Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1ikz92-0005cp-F4 for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Dec 2019 23:35:49 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1ikz90-00080W-9P for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Dec 2019 23:35:46 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1ikz8z-00080P-A2 for pgsql-hackers@lists.postgresql.org; Fri, 27 Dec 2019 23:35:45 +0000 Received: from mail-pl1-x642.google.com ([2607:f8b0:4864:20::642]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1ikz8p-0007CZ-A1 for pgsql-hackers@postgresql.org; Fri, 27 Dec 2019 23:35:43 +0000 Received: by mail-pl1-x642.google.com with SMTP id p27so12269544pli.10 for ; Fri, 27 Dec 2019 15:35:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=j-davis-com.20150623.gappssmtp.com; s=20150623; h=message-id:subject:from:to:cc:date:in-reply-to:references :mime-version; bh=DirF3qgnl0kZrHeiyeeskifLr4VwlCnmkBKccNEFfS0=; b=1LbR39uRDOUFXRAd4j3AZ7t2z7B4ZekgUmPVSTPvTUfiKaidg2UsgIWE3d8EQEZ+EF rG7bdhv/MAWXLsP7AK6NWznU84WK2UDZ48X9YNLV4G3wfDPiivog51yEKNJHPoZrRx2I Wa+LhNEUNn1LxUJxrPmmTpKk4y6OnIPJiCkd/zFXlj3iG4AXw6CIlHZQF7/vasZUODKj wx9kDqZFdEqtugqVN5dH6cKppmfm3KOwYKcvmJleqPdEDtnJ6MgFBJp74gPgIbxzkE/S wP2tp9fJ95MBd1573zXT+mCAo81pzgEWSuu61jS9TjL0ZI+4XfUUqJz8VN3JhqXgTDfS UDaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:subject:from:to:cc:date:in-reply-to :references:mime-version; bh=DirF3qgnl0kZrHeiyeeskifLr4VwlCnmkBKccNEFfS0=; b=TBSWHeQ40cIGTTQNqawv/fk6mq3ZSGPmr4bxfQHJ/KJsD1hGVFP0sJrr8yJykWtYTK yEYoWBt5YbUmpBAkexd9BN9mUiYzakjX4FoD7sgfk3htn1b4F0LycC88TKSxOe7Hd7Cx KybnJA92zpTwix/rp95ZBHxFGKYwHIO8DjY/0dihhyxwRhvcdFRRVoBWrCGnzSYYqqeB w3ggXNiDDQlecmHjTFdNSP1kCM8XbsMD6pCpNb7SUARyYqRXUZ0uMWlOojSCY2/P8cpC grGkcPLfN8IF67e3EJBX5kwH3MI/DVLGIaYJ3KdZ/KJexbcZtHoPmI6nF9IJhfxSoYOA lIDg== X-Gm-Message-State: APjAAAVorsXg84Nh9+vSx57zCcVEj8MQ9Mr+As2CIlCdXse1+XUD4GR7 Baccvs92Z9ReRtw3WO2LmH1TBA== X-Google-Smtp-Source: APXvYqzk2dU7f13Ay8SJhITggiOjpcQ7jPZiQ0kkiwagB1R6GmwB02ttk4R8IW0pgF2+iCDPXsi5CA== X-Received: by 2002:a17:90a:ba91:: with SMTP id t17mr29914018pjr.74.1577489733984; Fri, 27 Dec 2019 15:35:33 -0800 (PST) Received: from jdavis.lan (c-73-231-146-4.hsd1.ca.comcast.net. [73.231.146.4]) by smtp.gmail.com with ESMTPSA id f43sm16164650pje.23.2019.12.27.15.35.31 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 27 Dec 2019 15:35:32 -0800 (PST) Message-ID: Subject: Re: Memory-Bounded Hash Aggregation From: Jeff Davis To: Tomas Vondra Cc: Taylor Vesely , Adam Lee , Melanie Plageman , pgsql-hackers@postgresql.org Date: Fri, 27 Dec 2019 15:35:30 -0800 In-Reply-To: <20191214173225.3kzsbncr6brpxdll@development> References: <507ac540ec7c20136364b5272acbcd4574aa76ef.camel@j-davis.com> <20190703001753.s5e5cme3ucjgeu6c@development> <20190711155520.zqipi23o3yybx7ym@development> <9be86fc1adc315f69b8af4b379087ab451008d8a.camel@j-davis.com> <20190802064405.GA94036@mars.local> <617fea8258ba3df7bc8b21cd7f3afc219f2383d9.camel@j-davis.com> <20190802152123.ichmacgx3y3x7dc3@development> <20191214173225.3kzsbncr6brpxdll@development> Content-Type: multipart/mixed; boundary="=-ML923lNhEZfGuB7AO2Lz" X-Mailer: Evolution 3.28.5-0ubuntu0.18.04.1 Mime-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=-ML923lNhEZfGuB7AO2Lz Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit On Sat, 2019-12-14 at 18:32 +0100, Tomas Vondra wrote: > So I think we're not costing the batching properly / at all. Hi, I've attached a new patch that adds some basic costing for disk during hashagg. The accuracy is unfortunately not great, especially at smaller work_mem sizes and smaller entry sizes. The biggest discrepency seems to be the estimate for the average size of an entry in the hash table is significantly smaller than the actual average size. I'm not sure how big of a problem this accuracy is or how it compares to sort, for instance (it's a bit hard to compare because sort works with theoretical memory usage while hashagg looks at actual allocated memory). Costing was the last major TODO, so I'm considering this feature complete, though it still needs some work on quality. Regards, Jeff Davis --=-ML923lNhEZfGuB7AO2Lz Content-Disposition: attachment; filename="hashagg-20191227.patch" Content-Type: text/x-patch; name="hashagg-20191227.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2V4cGxhaW4uYwppbmRleCA5NDlmZWZhMjNhZS4uYzJmYjdhMDg4YTIgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYworKysgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9leHBsYWluLmMKQEAgLTEwMiw2ICsxMDIsNyBAQCBzdGF0aWMgdm9pZCBzaG93X3Rh Ymxlc2FtcGxlKFRhYmxlU2FtcGxlQ2xhdXNlICp0c2MsIFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAog CQkJCQkJCSBMaXN0ICphbmNlc3RvcnMsIEV4cGxhaW5TdGF0ZSAqZXMpOwogc3RhdGljIHZvaWQg c2hvd19zb3J0X2luZm8oU29ydFN0YXRlICpzb3J0c3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpOwog c3RhdGljIHZvaWQgc2hvd19oYXNoX2luZm8oSGFzaFN0YXRlICpoYXNoc3RhdGUsIEV4cGxhaW5T dGF0ZSAqZXMpOworc3RhdGljIHZvaWQgc2hvd19oYXNoYWdnX2luZm8oQWdnU3RhdGUgKmhhc2hz dGF0ZSwgRXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9pZCBzaG93X3RpZGJpdG1hcF9pbmZv KEJpdG1hcEhlYXBTY2FuU3RhdGUgKnBsYW5zdGF0ZSwKIAkJCQkJCQkJRXhwbGFpblN0YXRlICpl cyk7CiBzdGF0aWMgdm9pZCBzaG93X2luc3RydW1lbnRhdGlvbl9jb3VudChjb25zdCBjaGFyICpx bGFiZWwsIGludCB3aGljaCwKQEAgLTE4NDQsNiArMTg0NSw4IEBAIEV4cGxhaW5Ob2RlKFBsYW5T dGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCWNhc2UgVF9BZ2c6CiAJCQlzaG93 X2FnZ19rZXlzKGNhc3ROb2RlKEFnZ1N0YXRlLCBwbGFuc3RhdGUpLCBhbmNlc3RvcnMsIGVzKTsK IAkJCXNob3dfdXBwZXJfcXVhbChwbGFuLT5xdWFsLCAiRmlsdGVyIiwgcGxhbnN0YXRlLCBhbmNl c3RvcnMsIGVzKTsKKwkJCWlmIChlcy0+YW5hbHl6ZSkKKwkJCQlzaG93X2hhc2hhZ2dfaW5mbygo QWdnU3RhdGUgKikgcGxhbnN0YXRlLCBlcyk7CiAJCQlpZiAocGxhbi0+cXVhbCkKIAkJCQlzaG93 X2luc3RydW1lbnRhdGlvbl9jb3VudCgiUm93cyBSZW1vdmVkIGJ5IEZpbHRlciIsIDEsCiAJCQkJ CQkJCQkJICAgcGxhbnN0YXRlLCBlcyk7CkBAIC0yNzQyLDYgKzI3NDUsNTYgQEAgc2hvd19oYXNo X2luZm8oSGFzaFN0YXRlICpoYXNoc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpCiAJfQogfQogCisv KgorICogSWYgRVhQTEFJTiBBTkFMWVpFLCBzaG93IGluZm9ybWF0aW9uIG9uIGhhc2ggYWdncmVn YXRlIG1lbW9yeSB1c2FnZSBhbmQKKyAqIGJhdGNoZXMuCisgKi8KK3N0YXRpYyB2b2lkCitzaG93 X2hhc2hhZ2dfaW5mbyhBZ2dTdGF0ZSAqYWdnc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpCit7CisJ QWdnCQkqYWdnCSAgID0gKEFnZyAqKWFnZ3N0YXRlLT5zcy5wcy5wbGFuOworCWxvbmcJIG1lbVBl YWtLYiA9IChhZ2dzdGF0ZS0+aGFzaF9tZW1fcGVhayArIDEwMjMpIC8gMTAyNDsKKwlsb25nCSBk aXNrS2IgICAgPSAoYWdnc3RhdGUtPmhhc2hfZGlza191c2VkICsgMTAyMykgLyAxMDI0OworCisK KwlBc3NlcnQoSXNBKGFnZ3N0YXRlLCBBZ2dTdGF0ZSkpOworCisJaWYgKGFnZy0+YWdnc3RyYXRl Z3kgIT0gQUdHX0hBU0hFRCAmJgorCQlhZ2ctPmFnZ3N0cmF0ZWd5ICE9IEFHR19NSVhFRCkKKwkJ cmV0dXJuOworCisJaWYgKGVzLT5mb3JtYXQgPT0gRVhQTEFJTl9GT1JNQVRfVEVYVCkKKwl7CisJ CWFwcGVuZFN0cmluZ0luZm9TcGFjZXMoZXMtPnN0ciwgZXMtPmluZGVudCAqIDIpOworCQlhcHBl bmRTdHJpbmdJbmZvKAorCQkJZXMtPnN0ciwKKwkJCSJNZW1vcnkgVXNhZ2U6ICVsZGtCIiwKKwkJ CW1lbVBlYWtLYik7CisKKwkJaWYgKGFnZ3N0YXRlLT5oYXNoX2JhdGNoZXNfdXNlZCA+IDApCisJ CXsKKwkJCWFwcGVuZFN0cmluZ0luZm8oCisJCQkJZXMtPnN0ciwKKwkJCQkiICBCYXRjaGVzOiAl ZCAgRGlzazogJWxka0IiLAorCQkJCWFnZ3N0YXRlLT5oYXNoX2JhdGNoZXNfdXNlZCwgZGlza0ti KTsKKwkJfQorCisJCWFwcGVuZFN0cmluZ0luZm8oCisJCQllcy0+c3RyLAorCQkJIlxuIik7CisJ fQorCWVsc2UKKwl7CisJCUV4cGxhaW5Qcm9wZXJ0eUludGVnZXIoIlBlYWsgTWVtb3J5IFVzYWdl IiwgImtCIiwgbWVtUGVha0tiLCBlcyk7CisJCWlmIChhZ2dzdGF0ZS0+aGFzaF9iYXRjaGVzX3Vz ZWQgPiAwKQorCQl7CisJCQlFeHBsYWluUHJvcGVydHlJbnRlZ2VyKCJIYXNoQWdnIEJhdGNoZXMi LCBOVUxMLAorCQkJCQkJCQkgICBhZ2dzdGF0ZS0+aGFzaF9iYXRjaGVzX3VzZWQsIGVzKTsKKwkJ CUV4cGxhaW5Qcm9wZXJ0eUludGVnZXIoIkRpc2sgVXNhZ2UiLCAia0IiLCBkaXNrS2IsIGVzKTsK KwkJfQorCX0KK30KKwogLyoKICAqIElmIGl0J3MgRVhQTEFJTiBBTkFMWVpFLCBzaG93IGV4YWN0 L2xvc3N5IHBhZ2VzIGZvciBhIEJpdG1hcEhlYXBTY2FuIG5vZGUKICAqLwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNFeHByLmMKaW5kZXggOGRhMmUyZGNiYmEuLmZiM2U4MTc2NGFkIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNFeHByLmMKQEAgLTc5LDcgKzc5LDggQEAgc3RhdGljIHZvaWQgRXhlY0luaXRDb2VyY2VUb0Rv bWFpbihFeHByRXZhbFN0ZXAgKnNjcmF0Y2gsIENvZXJjZVRvRG9tYWluICpjdGVzdCwKIHN0YXRp YyB2b2lkIEV4ZWNCdWlsZEFnZ1RyYW5zQ2FsbChFeHByU3RhdGUgKnN0YXRlLCBBZ2dTdGF0ZSAq YWdnc3RhdGUsCiAJCQkJCQkJCSAgRXhwckV2YWxTdGVwICpzY3JhdGNoLAogCQkJCQkJCQkgIEZ1 bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBBZ2dTdGF0ZVBlclRyYW5zIHBlcnRyYW5zLAotCQkJCQkJ CQkgIGludCB0cmFuc25vLCBpbnQgc2V0bm8sIGludCBzZXRvZmYsIGJvb2wgaXNoYXNoKTsKKwkJ CQkJCQkJICBpbnQgdHJhbnNubywgaW50IHNldG5vLCBpbnQgc2V0b2ZmLCBib29sIGlzaGFzaCwK KwkJCQkJCQkJICBib29sIHNwaWxsZWQpOwogCiAKIC8qCkBAIC0yOTI3LDcgKzI5MjgsNyBAQCBF eGVjSW5pdENvZXJjZVRvRG9tYWluKEV4cHJFdmFsU3RlcCAqc2NyYXRjaCwgQ29lcmNlVG9Eb21h aW4gKmN0ZXN0LAogICovCiBFeHByU3RhdGUgKgogRXhlY0J1aWxkQWdnVHJhbnMoQWdnU3RhdGUg KmFnZ3N0YXRlLCBBZ2dTdGF0ZVBlclBoYXNlIHBoYXNlLAotCQkJCSAgYm9vbCBkb1NvcnQsIGJv b2wgZG9IYXNoKQorCQkJCSAgYm9vbCBkb1NvcnQsIGJvb2wgZG9IYXNoLCBib29sIHNwaWxsZWQp CiB7CiAJRXhwclN0YXRlICAqc3RhdGUgPSBtYWtlTm9kZShFeHByU3RhdGUpOwogCVBsYW5TdGF0 ZSAgKnBhcmVudCA9ICZhZ2dzdGF0ZS0+c3MucHM7CkBAIC0zMTYwLDcgKzMxNjEsOCBAQCBFeGVj QnVpbGRBZ2dUcmFucyhBZ2dTdGF0ZSAqYWdnc3RhdGUsIEFnZ1N0YXRlUGVyUGhhc2UgcGhhc2Us CiAJCQlmb3IgKHNldG5vID0gMDsgc2V0bm8gPCBwcm9jZXNzR3JvdXBpbmdTZXRzOyBzZXRubysr KQogCQkJewogCQkJCUV4ZWNCdWlsZEFnZ1RyYW5zQ2FsbChzdGF0ZSwgYWdnc3RhdGUsICZzY3Jh dGNoLCB0cmFuc19mY2luZm8sCi0JCQkJCQkJCQkgIHBlcnRyYW5zLCB0cmFuc25vLCBzZXRubywg c2V0b2ZmLCBmYWxzZSk7CisJCQkJCQkJCQkgIHBlcnRyYW5zLCB0cmFuc25vLCBzZXRubywgc2V0 b2ZmLCBmYWxzZSwKKwkJCQkJCQkJCSAgc3BpbGxlZCk7CiAJCQkJc2V0b2ZmKys7CiAJCQl9CiAJ CX0KQEAgLTMxNzgsNyArMzE4MCw4IEBAIEV4ZWNCdWlsZEFnZ1RyYW5zKEFnZ1N0YXRlICphZ2dz dGF0ZSwgQWdnU3RhdGVQZXJQaGFzZSBwaGFzZSwKIAkJCWZvciAoc2V0bm8gPSAwOyBzZXRubyA8 IG51bUhhc2hlczsgc2V0bm8rKykKIAkJCXsKIAkJCQlFeGVjQnVpbGRBZ2dUcmFuc0NhbGwoc3Rh dGUsIGFnZ3N0YXRlLCAmc2NyYXRjaCwgdHJhbnNfZmNpbmZvLAotCQkJCQkJCQkJICBwZXJ0cmFu cywgdHJhbnNubywgc2V0bm8sIHNldG9mZiwgdHJ1ZSk7CisJCQkJCQkJCQkgIHBlcnRyYW5zLCB0 cmFuc25vLCBzZXRubywgc2V0b2ZmLCB0cnVlLAorCQkJCQkJCQkJICBzcGlsbGVkKTsKIAkJCQlz ZXRvZmYrKzsKIAkJCX0KIAkJfQpAQCAtMzIyNiw3ICszMjI5LDggQEAgc3RhdGljIHZvaWQKIEV4 ZWNCdWlsZEFnZ1RyYW5zQ2FsbChFeHByU3RhdGUgKnN0YXRlLCBBZ2dTdGF0ZSAqYWdnc3RhdGUs CiAJCQkJCSAgRXhwckV2YWxTdGVwICpzY3JhdGNoLAogCQkJCQkgIEZ1bmN0aW9uQ2FsbEluZm8g ZmNpbmZvLCBBZ2dTdGF0ZVBlclRyYW5zIHBlcnRyYW5zLAotCQkJCQkgIGludCB0cmFuc25vLCBp bnQgc2V0bm8sIGludCBzZXRvZmYsIGJvb2wgaXNoYXNoKQorCQkJCQkgIGludCB0cmFuc25vLCBp bnQgc2V0bm8sIGludCBzZXRvZmYsIGJvb2wgaXNoYXNoLAorCQkJCQkgIGJvb2wgc3BpbGxlZCkK IHsKIAlpbnQJCQlhZGp1c3RfaW5pdF9qdW1wbnVsbCA9IC0xOwogCWludAkJCWFkanVzdF9zdHJp Y3RfanVtcG51bGwgPSAtMTsKQEAgLTMyNDgsNyArMzI1Miw4IEBAIEV4ZWNCdWlsZEFnZ1RyYW5z Q2FsbChFeHByU3RhdGUgKnN0YXRlLCBBZ2dTdGF0ZSAqYWdnc3RhdGUsCiAJCWZjaW5mby0+Zmxp bmZvLT5mbl9zdHJpY3QgJiYKIAkJcGVydHJhbnMtPmluaXRWYWx1ZUlzTnVsbCkKIAl7Ci0JCXNj cmF0Y2gtPm9wY29kZSA9IEVFT1BfQUdHX0lOSVRfVFJBTlM7CisJCXNjcmF0Y2gtPm9wY29kZSA9 IHNwaWxsZWQgPworCQkJRUVPUF9BR0dfSU5JVF9UUkFOU19TUElMTEVEIDogRUVPUF9BR0dfSU5J VF9UUkFOUzsKIAkJc2NyYXRjaC0+ZC5hZ2dfaW5pdF90cmFucy5hZ2dzdGF0ZSA9IGFnZ3N0YXRl OwogCQlzY3JhdGNoLT5kLmFnZ19pbml0X3RyYW5zLnBlcnRyYW5zID0gcGVydHJhbnM7CiAJCXNj cmF0Y2gtPmQuYWdnX2luaXRfdHJhbnMuc2V0bm8gPSBzZXRubzsKQEAgLTMyNjUsNyArMzI3MCw4 IEBAIEV4ZWNCdWlsZEFnZ1RyYW5zQ2FsbChFeHByU3RhdGUgKnN0YXRlLCBBZ2dTdGF0ZSAqYWdn c3RhdGUsCiAJaWYgKHBlcnRyYW5zLT5udW1Tb3J0Q29scyA9PSAwICYmCiAJCWZjaW5mby0+Zmxp bmZvLT5mbl9zdHJpY3QpCiAJewotCQlzY3JhdGNoLT5vcGNvZGUgPSBFRU9QX0FHR19TVFJJQ1Rf VFJBTlNfQ0hFQ0s7CisJCXNjcmF0Y2gtPm9wY29kZSA9IHNwaWxsZWQgPworCQkJRUVPUF9BR0df U1RSSUNUX1RSQU5TX0NIRUNLX1NQSUxMRUQgOiBFRU9QX0FHR19TVFJJQ1RfVFJBTlNfQ0hFQ0s7 CiAJCXNjcmF0Y2gtPmQuYWdnX3N0cmljdF90cmFuc19jaGVjay5hZ2dzdGF0ZSA9IGFnZ3N0YXRl OwogCQlzY3JhdGNoLT5kLmFnZ19zdHJpY3RfdHJhbnNfY2hlY2suc2V0bm8gPSBzZXRubzsKIAkJ c2NyYXRjaC0+ZC5hZ2dfc3RyaWN0X3RyYW5zX2NoZWNrLnNldG9mZiA9IHNldG9mZjsKQEAgLTMy ODMsOSArMzI4OSwxMSBAQCBFeGVjQnVpbGRBZ2dUcmFuc0NhbGwoRXhwclN0YXRlICpzdGF0ZSwg QWdnU3RhdGUgKmFnZ3N0YXRlLAogCiAJLyogaW52b2tlIGFwcHJvcHJpYXRlIHRyYW5zaXRpb24g aW1wbGVtZW50YXRpb24gKi8KIAlpZiAocGVydHJhbnMtPm51bVNvcnRDb2xzID09IDAgJiYgcGVy dHJhbnMtPnRyYW5zdHlwZUJ5VmFsKQotCQlzY3JhdGNoLT5vcGNvZGUgPSBFRU9QX0FHR19QTEFJ Tl9UUkFOU19CWVZBTDsKKwkJc2NyYXRjaC0+b3Bjb2RlID0gc3BpbGxlZCA/CisJCQlFRU9QX0FH R19QTEFJTl9UUkFOU19CWVZBTF9TUElMTEVEIDogRUVPUF9BR0dfUExBSU5fVFJBTlNfQllWQUw7 CiAJZWxzZSBpZiAocGVydHJhbnMtPm51bVNvcnRDb2xzID09IDApCi0JCXNjcmF0Y2gtPm9wY29k ZSA9IEVFT1BfQUdHX1BMQUlOX1RSQU5TOworCQlzY3JhdGNoLT5vcGNvZGUgPSBzcGlsbGVkID8K KwkJCUVFT1BfQUdHX1BMQUlOX1RSQU5TX1NQSUxMRUQgOiBFRU9QX0FHR19QTEFJTl9UUkFOUzsK IAllbHNlIGlmIChwZXJ0cmFucy0+bnVtSW5wdXRzID09IDEpCiAJCXNjcmF0Y2gtPm9wY29kZSA9 IEVFT1BfQUdHX09SREVSRURfVFJBTlNfREFUVU07CiAJZWxzZQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNFeHBySW50ZXJwLmMKaW5kZXggMDM0OTcwNjQ4ZjMuLjExYmE4YzA5NTQyIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jCisrKyBiL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKQEAgLTQzMCw5ICs0MzAsMTMgQEAgRXhlY0ludGVy cEV4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckNvbnRleHQgKmVjb250ZXh0LCBib29sICppc251 bGwpCiAJCSYmQ0FTRV9FRU9QX0FHR19TVFJJQ1RfSU5QVVRfQ0hFQ0tfQVJHUywKIAkJJiZDQVNF X0VFT1BfQUdHX1NUUklDVF9JTlBVVF9DSEVDS19OVUxMUywKIAkJJiZDQVNFX0VFT1BfQUdHX0lO SVRfVFJBTlMsCisJCSYmQ0FTRV9FRU9QX0FHR19JTklUX1RSQU5TX1NQSUxMRUQsCiAJCSYmQ0FT RV9FRU9QX0FHR19TVFJJQ1RfVFJBTlNfQ0hFQ0ssCisJCSYmQ0FTRV9FRU9QX0FHR19TVFJJQ1Rf VFJBTlNfQ0hFQ0tfU1BJTExFRCwKIAkJJiZDQVNFX0VFT1BfQUdHX1BMQUlOX1RSQU5TX0JZVkFM LAorCQkmJkNBU0VfRUVPUF9BR0dfUExBSU5fVFJBTlNfQllWQUxfU1BJTExFRCwKIAkJJiZDQVNF X0VFT1BfQUdHX1BMQUlOX1RSQU5TLAorCQkmJkNBU0VfRUVPUF9BR0dfUExBSU5fVFJBTlNfU1BJ TExFRCwKIAkJJiZDQVNFX0VFT1BfQUdHX09SREVSRURfVFJBTlNfREFUVU0sCiAJCSYmQ0FTRV9F RU9QX0FHR19PUkRFUkVEX1RSQU5TX1RVUExFLAogCQkmJkNBU0VfRUVPUF9MQVNUCkBAIC0xNjI1 LDYgKzE2MjksMzYgQEAgRXhlY0ludGVycEV4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckNvbnRl eHQgKmVjb250ZXh0LCBib29sICppc251bGwpCiAKIAkJCUVFT19ORVhUKCk7CiAJCX0KKwkJRUVP X0NBU0UoRUVPUF9BR0dfSU5JVF9UUkFOU19TUElMTEVEKQorCQl7CisJCQlBZ2dTdGF0ZSAgICph Z2dzdGF0ZTsKKwkJCUFnZ1N0YXRlUGVyR3JvdXAgcGVyZ3JvdXA7CisJCQlBZ2dTdGF0ZVBlckdy b3VwIHBlcmdyb3VwX2FsbGFnZ3M7CisKKwkJCWFnZ3N0YXRlID0gb3AtPmQuYWdnX2luaXRfdHJh bnMuYWdnc3RhdGU7CisJCQlwZXJncm91cF9hbGxhZ2dzID0gYWdnc3RhdGUtPmFsbF9wZXJncm91 cHNbb3AtPmQuYWdnX2luaXRfdHJhbnMuc2V0b2ZmXTsKKworCQkJaWYgKHBlcmdyb3VwX2FsbGFn Z3MgPT0gTlVMTCkKKwkJCQlFRU9fTkVYVCgpOworCisJCQlwZXJncm91cCA9ICZwZXJncm91cF9h bGxhZ2dzW29wLT5kLmFnZ19pbml0X3RyYW5zLnRyYW5zbm9dOworCisJCQkvKiBJZiB0cmFuc1Zh bHVlIGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQsIGRvIHNvIG5vdy4gKi8KKwkJCWlmIChw ZXJncm91cC0+bm9UcmFuc1ZhbHVlKQorCQkJeworCQkJCUFnZ1N0YXRlUGVyVHJhbnMgcGVydHJh bnMgPSBvcC0+ZC5hZ2dfaW5pdF90cmFucy5wZXJ0cmFuczsKKworCQkJCWFnZ3N0YXRlLT5jdXJh Z2djb250ZXh0ID0gb3AtPmQuYWdnX2luaXRfdHJhbnMuYWdnY29udGV4dDsKKwkJCQlhZ2dzdGF0 ZS0+Y3VycmVudF9zZXQgPSBvcC0+ZC5hZ2dfaW5pdF90cmFucy5zZXRubzsKKworCQkJCUV4ZWNB Z2dJbml0R3JvdXAoYWdnc3RhdGUsIHBlcnRyYW5zLCBwZXJncm91cCk7CisKKwkJCQkvKiBjb3Bp ZWQgdHJhbnMgdmFsdWUgZnJvbSBpbnB1dCwgZG9uZSB0aGlzIHJvdW5kICovCisJCQkJRUVPX0pV TVAob3AtPmQuYWdnX2luaXRfdHJhbnMuanVtcG51bGwpOworCQkJfQorCisJCQlFRU9fTkVYVCgp OworCQl9CiAKIAkJLyogY2hlY2sgdGhhdCBhIHN0cmljdCBhZ2dyZWdhdGUncyBpbnB1dCBpc24n dCBOVUxMICovCiAJCUVFT19DQVNFKEVFT1BfQUdHX1NUUklDVF9UUkFOU19DSEVDSykKQEAgLTE2 NDIsNiArMTY3NiwyNSBAQCBFeGVjSW50ZXJwRXhwcihFeHByU3RhdGUgKnN0YXRlLCBFeHByQ29u dGV4dCAqZWNvbnRleHQsIGJvb2wgKmlzbnVsbCkKIAogCQkJRUVPX05FWFQoKTsKIAkJfQorCQlF RU9fQ0FTRShFRU9QX0FHR19TVFJJQ1RfVFJBTlNfQ0hFQ0tfU1BJTExFRCkKKwkJeworCQkJQWdn U3RhdGUgICAqYWdnc3RhdGU7CisJCQlBZ2dTdGF0ZVBlckdyb3VwIHBlcmdyb3VwOworCQkJQWdn U3RhdGVQZXJHcm91cCBwZXJncm91cF9hbGxhZ2dzOworCisJCQlhZ2dzdGF0ZSA9IG9wLT5kLmFn Z19zdHJpY3RfdHJhbnNfY2hlY2suYWdnc3RhdGU7CisJCQlwZXJncm91cF9hbGxhZ2dzID0gYWdn c3RhdGUtPmFsbF9wZXJncm91cHNbb3AtPmQuYWdnX3N0cmljdF90cmFuc19jaGVjay5zZXRvZmZd OworCisJCQlpZiAocGVyZ3JvdXBfYWxsYWdncyA9PSBOVUxMKQorCQkJCUVFT19ORVhUKCk7CisK KwkJCXBlcmdyb3VwID0gJnBlcmdyb3VwX2FsbGFnZ3Nbb3AtPmQuYWdnX3N0cmljdF90cmFuc19j aGVjay50cmFuc25vXTsKKworCQkJaWYgKHVubGlrZWx5KHBlcmdyb3VwLT50cmFuc1ZhbHVlSXNO dWxsKSkKKwkJCQlFRU9fSlVNUChvcC0+ZC5hZ2dfc3RyaWN0X3RyYW5zX2NoZWNrLmp1bXBudWxs KTsKKworCQkJRUVPX05FWFQoKTsKKwkJfQogCiAJCS8qCiAJCSAqIEV2YWx1YXRlIGFnZ3JlZ2F0 ZSB0cmFuc2l0aW9uIC8gY29tYmluZSBmdW5jdGlvbiB0aGF0IGhhcyBhCkBAIC0xNjkxLDYgKzE3 NDQsNTIgQEAgRXhlY0ludGVycEV4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckNvbnRleHQgKmVj b250ZXh0LCBib29sICppc251bGwpCiAKIAkJCUVFT19ORVhUKCk7CiAJCX0KKwkJRUVPX0NBU0Uo RUVPUF9BR0dfUExBSU5fVFJBTlNfQllWQUxfU1BJTExFRCkKKwkJeworCQkJQWdnU3RhdGUgICAq YWdnc3RhdGU7CisJCQlBZ2dTdGF0ZVBlclRyYW5zIHBlcnRyYW5zOworCQkJQWdnU3RhdGVQZXJH cm91cCBwZXJncm91cDsKKwkJCUFnZ1N0YXRlUGVyR3JvdXAgcGVyZ3JvdXBfYWxsYWdnczsKKwkJ CUZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvOworCQkJTWVtb3J5Q29udGV4dCBvbGRDb250ZXh0Owor CQkJRGF0dW0JCW5ld1ZhbDsKKworCQkJYWdnc3RhdGUgPSBvcC0+ZC5hZ2dfdHJhbnMuYWdnc3Rh dGU7CisJCQlwZXJ0cmFucyA9IG9wLT5kLmFnZ190cmFucy5wZXJ0cmFuczsKKworCQkJcGVyZ3Jv dXBfYWxsYWdncyA9IGFnZ3N0YXRlLT5hbGxfcGVyZ3JvdXBzW29wLT5kLmFnZ190cmFucy5zZXRv ZmZdOworCQkJcGVyZ3JvdXAgPSAmcGVyZ3JvdXBfYWxsYWdnc1tvcC0+ZC5hZ2dfdHJhbnMudHJh bnNub107CisKKwkJCWlmIChwZXJncm91cF9hbGxhZ2dzID09IE5VTEwpCisJCQkJRUVPX05FWFQo KTsKKworCQkJQXNzZXJ0KHBlcnRyYW5zLT50cmFuc3R5cGVCeVZhbCk7CisKKwkJCWZjaW5mbyA9 IHBlcnRyYW5zLT50cmFuc2ZuX2ZjaW5mbzsKKworCQkJLyogY2YuIHNlbGVjdF9jdXJyZW50X3Nl dCgpICovCisJCQlhZ2dzdGF0ZS0+Y3VyYWdnY29udGV4dCA9IG9wLT5kLmFnZ190cmFucy5hZ2dj b250ZXh0OworCQkJYWdnc3RhdGUtPmN1cnJlbnRfc2V0ID0gb3AtPmQuYWdnX3RyYW5zLnNldG5v OworCisJCQkvKiBzZXQgdXAgYWdnc3RhdGUtPmN1cnBlcnRyYW5zIGZvciBBZ2dHZXRBZ2dyZWYo KSAqLworCQkJYWdnc3RhdGUtPmN1cnBlcnRyYW5zID0gcGVydHJhbnM7CisKKwkJCS8qIGludm9r ZSB0cmFuc2l0aW9uIGZ1bmN0aW9uIGluIHBlci10dXBsZSBjb250ZXh0ICovCisJCQlvbGRDb250 ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGFnZ3N0YXRlLT50bXBjb250ZXh0LT5lY3h0X3Bl cl90dXBsZV9tZW1vcnkpOworCisJCQlmY2luZm8tPmFyZ3NbMF0udmFsdWUgPSBwZXJncm91cC0+ dHJhbnNWYWx1ZTsKKwkJCWZjaW5mby0+YXJnc1swXS5pc251bGwgPSBwZXJncm91cC0+dHJhbnNW YWx1ZUlzTnVsbDsKKwkJCWZjaW5mby0+aXNudWxsID0gZmFsc2U7IC8qIGp1c3QgaW4gY2FzZSB0 cmFuc2ZuIGRvZXNuJ3Qgc2V0IGl0ICovCisKKwkJCW5ld1ZhbCA9IEZ1bmN0aW9uQ2FsbEludm9r ZShmY2luZm8pOworCisJCQlwZXJncm91cC0+dHJhbnNWYWx1ZSA9IG5ld1ZhbDsKKwkJCXBlcmdy b3VwLT50cmFuc1ZhbHVlSXNOdWxsID0gZmNpbmZvLT5pc251bGw7CisKKwkJCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhvbGRDb250ZXh0KTsKKworCQkJRUVPX05FWFQoKTsKKwkJfQogCiAJCS8qCiAJ CSAqIEV2YWx1YXRlIGFnZ3JlZ2F0ZSB0cmFuc2l0aW9uIC8gY29tYmluZSBmdW5jdGlvbiB0aGF0 IGhhcyBhCkBAIC0xNzU2LDYgKzE4NTUsNjcgQEAgRXhlY0ludGVycEV4cHIoRXhwclN0YXRlICpz dGF0ZSwgRXhwckNvbnRleHQgKmVjb250ZXh0LCBib29sICppc251bGwpCiAKIAkJCUVFT19ORVhU KCk7CiAJCX0KKwkJRUVPX0NBU0UoRUVPUF9BR0dfUExBSU5fVFJBTlNfU1BJTExFRCkKKwkJewor CQkJQWdnU3RhdGUgICAqYWdnc3RhdGU7CisJCQlBZ2dTdGF0ZVBlclRyYW5zIHBlcnRyYW5zOwor CQkJQWdnU3RhdGVQZXJHcm91cCBwZXJncm91cDsKKwkJCUFnZ1N0YXRlUGVyR3JvdXAgcGVyZ3Jv dXBfYWxsYWdnczsKKwkJCUZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvOworCQkJTWVtb3J5Q29udGV4 dCBvbGRDb250ZXh0OworCQkJRGF0dW0JCW5ld1ZhbDsKKworCQkJYWdnc3RhdGUgPSBvcC0+ZC5h Z2dfdHJhbnMuYWdnc3RhdGU7CisJCQlwZXJ0cmFucyA9IG9wLT5kLmFnZ190cmFucy5wZXJ0cmFu czsKKworCQkJcGVyZ3JvdXBfYWxsYWdncyA9IGFnZ3N0YXRlLT5hbGxfcGVyZ3JvdXBzW29wLT5k LmFnZ190cmFucy5zZXRvZmZdOworCisJCQlpZiAocGVyZ3JvdXBfYWxsYWdncyA9PSBOVUxMKQor CQkJCUVFT19ORVhUKCk7CisKKwkJCXBlcmdyb3VwID0gJnBlcmdyb3VwX2FsbGFnZ3Nbb3AtPmQu YWdnX3RyYW5zLnRyYW5zbm9dOworCisJCQlBc3NlcnQoIXBlcnRyYW5zLT50cmFuc3R5cGVCeVZh bCk7CisKKwkJCWZjaW5mbyA9IHBlcnRyYW5zLT50cmFuc2ZuX2ZjaW5mbzsKKworCQkJLyogY2Yu IHNlbGVjdF9jdXJyZW50X3NldCgpICovCisJCQlhZ2dzdGF0ZS0+Y3VyYWdnY29udGV4dCA9IG9w LT5kLmFnZ190cmFucy5hZ2djb250ZXh0OworCQkJYWdnc3RhdGUtPmN1cnJlbnRfc2V0ID0gb3At PmQuYWdnX3RyYW5zLnNldG5vOworCisJCQkvKiBzZXQgdXAgYWdnc3RhdGUtPmN1cnBlcnRyYW5z IGZvciBBZ2dHZXRBZ2dyZWYoKSAqLworCQkJYWdnc3RhdGUtPmN1cnBlcnRyYW5zID0gcGVydHJh bnM7CisKKwkJCS8qIGludm9rZSB0cmFuc2l0aW9uIGZ1bmN0aW9uIGluIHBlci10dXBsZSBjb250 ZXh0ICovCisJCQlvbGRDb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGFnZ3N0YXRlLT50 bXBjb250ZXh0LT5lY3h0X3Blcl90dXBsZV9tZW1vcnkpOworCisJCQlmY2luZm8tPmFyZ3NbMF0u dmFsdWUgPSBwZXJncm91cC0+dHJhbnNWYWx1ZTsKKwkJCWZjaW5mby0+YXJnc1swXS5pc251bGwg PSBwZXJncm91cC0+dHJhbnNWYWx1ZUlzTnVsbDsKKwkJCWZjaW5mby0+aXNudWxsID0gZmFsc2U7 IC8qIGp1c3QgaW4gY2FzZSB0cmFuc2ZuIGRvZXNuJ3Qgc2V0IGl0ICovCisKKwkJCW5ld1ZhbCA9 IEZ1bmN0aW9uQ2FsbEludm9rZShmY2luZm8pOworCisJCQkvKgorCQkJICogRm9yIHBhc3MtYnkt cmVmIGRhdGF0eXBlLCBtdXN0IGNvcHkgdGhlIG5ldyB2YWx1ZSBpbnRvCisJCQkgKiBhZ2djb250 ZXh0IGFuZCBmcmVlIHRoZSBwcmlvciB0cmFuc1ZhbHVlLiAgQnV0IGlmIHRyYW5zZm4KKwkJCSAq IHJldHVybmVkIGEgcG9pbnRlciB0byBpdHMgZmlyc3QgaW5wdXQsIHdlIGRvbid0IG5lZWQgdG8g ZG8KKwkJCSAqIGFueXRoaW5nLiAgQWxzbywgaWYgdHJhbnNmbiByZXR1cm5lZCBhIHBvaW50ZXIg dG8gYSBSL1cKKwkJCSAqIGV4cGFuZGVkIG9iamVjdCB0aGF0IGlzIGFscmVhZHkgYSBjaGlsZCBv ZiB0aGUgYWdnY29udGV4dCwKKwkJCSAqIGFzc3VtZSB3ZSBjYW4gYWRvcHQgdGhhdCB2YWx1ZSB3 aXRob3V0IGNvcHlpbmcgaXQuCisJCQkgKi8KKwkJCWlmIChEYXR1bUdldFBvaW50ZXIobmV3VmFs KSAhPSBEYXR1bUdldFBvaW50ZXIocGVyZ3JvdXAtPnRyYW5zVmFsdWUpKQorCQkJCW5ld1ZhbCA9 IEV4ZWNBZ2dUcmFuc1JlcGFyZW50KGFnZ3N0YXRlLCBwZXJ0cmFucywKKwkJCQkJCQkJCQkJICBu ZXdWYWwsIGZjaW5mby0+aXNudWxsLAorCQkJCQkJCQkJCQkgIHBlcmdyb3VwLT50cmFuc1ZhbHVl LAorCQkJCQkJCQkJCQkgIHBlcmdyb3VwLT50cmFuc1ZhbHVlSXNOdWxsKTsKKworCQkJcGVyZ3Jv dXAtPnRyYW5zVmFsdWUgPSBuZXdWYWw7CisJCQlwZXJncm91cC0+dHJhbnNWYWx1ZUlzTnVsbCA9 IGZjaW5mby0+aXNudWxsOworCisJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkQ29udGV4dCk7 CisKKwkJCUVFT19ORVhUKCk7CisJCX0KIAogCQkvKiBwcm9jZXNzIHNpbmdsZS1jb2x1bW4gb3Jk ZXJlZCBhZ2dyZWdhdGUgZGF0dW0gKi8KIAkJRUVPX0NBU0UoRUVPUF9BR0dfT1JERVJFRF9UUkFO U19EQVRVTSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNHcm91cGluZy5j IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0dyb3VwaW5nLmMKaW5kZXggZTM2MTE0MzA5NGMu LjAyZGJhM2VhYzE4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjR3JvdXBp bmcuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjR3JvdXBpbmcuYwpAQCAtMjUsOCAr MjUsOSBAQAogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL21l bXV0aWxzLmgiCiAKLXN0YXRpYyB1aW50MzIgVHVwbGVIYXNoVGFibGVIYXNoKHN0cnVjdCB0dXBs ZWhhc2hfaGFzaCAqdGIsIGNvbnN0IE1pbmltYWxUdXBsZSB0dXBsZSk7CiBzdGF0aWMgaW50CVR1 cGxlSGFzaFRhYmxlTWF0Y2goc3RydWN0IHR1cGxlaGFzaF9oYXNoICp0YiwgY29uc3QgTWluaW1h bFR1cGxlIHR1cGxlMSwgY29uc3QgTWluaW1hbFR1cGxlIHR1cGxlMik7CitzdGF0aWMgVHVwbGVI YXNoRW50cnkgTG9va3VwVHVwbGVIYXNoRW50cnlfaW50ZXJuYWwoCisJVHVwbGVIYXNoVGFibGUg aGFzaHRhYmxlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwgYm9vbCAqaXNuZXcsIHVpbnQzMiBoYXNo KTsKIAogLyoKICAqIERlZmluZSBwYXJhbWV0ZXJzIGZvciB0dXBsZSBoYXNoIHRhYmxlIGNvZGUg Z2VuZXJhdGlvbi4gVGhlIGludGVyZmFjZSBpcwpAQCAtMjg0LDYgKzI4NSwxNyBAQCBSZXNldFR1 cGxlSGFzaFRhYmxlKFR1cGxlSGFzaFRhYmxlIGhhc2h0YWJsZSkKIAl0dXBsZWhhc2hfcmVzZXQo aGFzaHRhYmxlLT5oYXNodGFiKTsKIH0KIAorLyoKKyAqIERlc3Ryb3kgdGhlIGhhc2ggdGFibGUu IE5vdGUgdGhhdCB0aGUgdGFibGVjeHQgcGFzc2VkIHRvCisgKiBCdWlsZFR1cGxlSGFzaFRhYmxl RXh0KCkgc2hvdWxkIGFsc28gYmUgcmVzZXQsIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlCisgKiBs ZWFrcy4KKyAqLwordm9pZAorRGVzdHJveVR1cGxlSGFzaFRhYmxlKFR1cGxlSGFzaFRhYmxlIGhh c2h0YWJsZSkKK3sKKwl0dXBsZWhhc2hfZGVzdHJveShoYXNodGFibGUtPmhhc2h0YWIpOworfQor CiAvKgogICogRmluZCBvciBjcmVhdGUgYSBoYXNodGFibGUgZW50cnkgZm9yIHRoZSB0dXBsZSBn cm91cCBjb250YWluaW5nIHRoZQogICogZ2l2ZW4gdHVwbGUuICBUaGUgdHVwbGUgbXVzdCBiZSB0 aGUgc2FtZSB0eXBlIGFzIHRoZSBoYXNodGFibGUgZW50cmllcy4KQEAgLTMwMCwxMCArMzEyLDkg QEAgVHVwbGVIYXNoRW50cnkKIExvb2t1cFR1cGxlSGFzaEVudHJ5KFR1cGxlSGFzaFRhYmxlIGhh c2h0YWJsZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJCSBib29sICppc25ldykKIHsKLQlU dXBsZUhhc2hFbnRyeURhdGEgKmVudHJ5OwotCU1lbW9yeUNvbnRleHQgb2xkQ29udGV4dDsKLQli b29sCQlmb3VuZDsKLQlNaW5pbWFsVHVwbGUga2V5OworCVR1cGxlSGFzaEVudHJ5CWVudHJ5Owor CU1lbW9yeUNvbnRleHQJb2xkQ29udGV4dDsKKwl1aW50MzIJCQloYXNoOwogCiAJLyogTmVlZCB0 byBydW4gdGhlIGhhc2ggZnVuY3Rpb25zIGluIHNob3J0LWxpdmVkIGNvbnRleHQgKi8KIAlvbGRD b250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGhhc2h0YWJsZS0+dGVtcGN4dCk7CkBAIC0z MTMsMzIgKzMyNCwyOSBAQCBMb29rdXBUdXBsZUhhc2hFbnRyeShUdXBsZUhhc2hUYWJsZSBoYXNo dGFibGUsIFR1cGxlVGFibGVTbG90ICpzbG90LAogCWhhc2h0YWJsZS0+aW5faGFzaF9mdW5jcyA9 IGhhc2h0YWJsZS0+dGFiX2hhc2hfZnVuY3M7CiAJaGFzaHRhYmxlLT5jdXJfZXFfZnVuYyA9IGhh c2h0YWJsZS0+dGFiX2VxX2Z1bmM7CiAKLQlrZXkgPSBOVUxMOwkJCQkJLyogZmxhZyB0byByZWZl cmVuY2UgaW5wdXRzbG90ICovCisJaGFzaCA9IFR1cGxlSGFzaFRhYmxlSGFzaChoYXNodGFibGUt Pmhhc2h0YWIsIE5VTEwpOworCWVudHJ5ID0gTG9va3VwVHVwbGVIYXNoRW50cnlfaW50ZXJuYWwo aGFzaHRhYmxlLCBzbG90LCBpc25ldywgaGFzaCk7CiAKLQlpZiAoaXNuZXcpCi0JewotCQllbnRy eSA9IHR1cGxlaGFzaF9pbnNlcnQoaGFzaHRhYmxlLT5oYXNodGFiLCBrZXksICZmb3VuZCk7CisJ TWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZENvbnRleHQpOwogCi0JCWlmIChmb3VuZCkKLQkJewot CQkJLyogZm91bmQgcHJlLWV4aXN0aW5nIGVudHJ5ICovCi0JCQkqaXNuZXcgPSBmYWxzZTsKLQkJ fQotCQllbHNlCi0JCXsKLQkJCS8qIGNyZWF0ZWQgbmV3IGVudHJ5ICovCi0JCQkqaXNuZXcgPSB0 cnVlOwotCQkJLyogemVybyBjYWxsZXIgZGF0YSAqLwotCQkJZW50cnktPmFkZGl0aW9uYWwgPSBO VUxMOwotCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKGhhc2h0YWJsZS0+dGFibGVjeHQpOwotCQkJ LyogQ29weSB0aGUgZmlyc3QgdHVwbGUgaW50byB0aGUgdGFibGUgY29udGV4dCAqLwotCQkJZW50 cnktPmZpcnN0VHVwbGUgPSBFeGVjQ29weVNsb3RNaW5pbWFsVHVwbGUoc2xvdCk7Ci0JCX0KLQl9 Ci0JZWxzZQotCXsKLQkJZW50cnkgPSB0dXBsZWhhc2hfbG9va3VwKGhhc2h0YWJsZS0+aGFzaHRh Yiwga2V5KTsKLQl9CisJcmV0dXJuIGVudHJ5OworfQorCisvKgorICogQSB2YXJpYW50IG9mIExv b2t1cFR1cGxlSGFzaEVudHJ5IGZvciBjYWxsZXJzIHRoYXQgaGF2ZSBhbHJlYWR5IGNvbXB1dGVk CisgKiB0aGUgaGFzaCB2YWx1ZS4KKyAqLworVHVwbGVIYXNoRW50cnkKK0xvb2t1cFR1cGxlSGFz aEVudHJ5SGFzaChUdXBsZUhhc2hUYWJsZSBoYXNodGFibGUsIFR1cGxlVGFibGVTbG90ICpzbG90 LAorCQkJCQkJIGJvb2wgKmlzbmV3LCB1aW50MzIgaGFzaCkKK3sKKwlUdXBsZUhhc2hFbnRyeQll bnRyeTsKKwlNZW1vcnlDb250ZXh0CW9sZENvbnRleHQ7CisKKwkvKiBOZWVkIHRvIHJ1biB0aGUg aGFzaCBmdW5jdGlvbnMgaW4gc2hvcnQtbGl2ZWQgY29udGV4dCAqLworCW9sZENvbnRleHQgPSBN ZW1vcnlDb250ZXh0U3dpdGNoVG8oaGFzaHRhYmxlLT50ZW1wY3h0KTsKKworCWVudHJ5ID0gTG9v a3VwVHVwbGVIYXNoRW50cnlfaW50ZXJuYWwoaGFzaHRhYmxlLCBzbG90LCBpc25ldywgaGFzaCk7 CiAKIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkQ29udGV4dCk7CiAKQEAgLTM4OSw3ICszOTcs NyBAQCBGaW5kVHVwbGVIYXNoRW50cnkoVHVwbGVIYXNoVGFibGUgaGFzaHRhYmxlLCBUdXBsZVRh YmxlU2xvdCAqc2xvdCwKICAqIEFsc28sIHRoZSBjYWxsZXIgbXVzdCBzZWxlY3QgYW4gYXBwcm9w cmlhdGUgbWVtb3J5IGNvbnRleHQgZm9yIHJ1bm5pbmcKICAqIHRoZSBoYXNoIGZ1bmN0aW9ucy4g KGR5bmFoYXNoLmMgZG9lc24ndCBjaGFuZ2UgQ3VycmVudE1lbW9yeUNvbnRleHQuKQogICovCi1z dGF0aWMgdWludDMyCit1aW50MzIKIFR1cGxlSGFzaFRhYmxlSGFzaChzdHJ1Y3QgdHVwbGVoYXNo X2hhc2ggKnRiLCBjb25zdCBNaW5pbWFsVHVwbGUgdHVwbGUpCiB7CiAJVHVwbGVIYXNoVGFibGUg aGFzaHRhYmxlID0gKFR1cGxlSGFzaFRhYmxlKSB0Yi0+cHJpdmF0ZV9kYXRhOwpAQCAtNDUwLDYg KzQ1OCw1NCBAQCBUdXBsZUhhc2hUYWJsZUhhc2goc3RydWN0IHR1cGxlaGFzaF9oYXNoICp0Yiwg Y29uc3QgTWluaW1hbFR1cGxlIHR1cGxlKQogCXJldHVybiBtdXJtdXJoYXNoMzIoaGFzaGtleSk7 CiB9CiAKKy8qCisgKiBEb2VzIHRoZSB3b3JrIG9mIExvb2t1cFR1cGxlSGFzaEVudHJ5IGFuZCBM b29rdXBUdXBsZUhhc2hFbnRyeUhhc2guIFVzZWZ1bAorICogc28gdGhhdCB3ZSBjYW4gYXZvaWQg c3dpdGNoaW5nIHRoZSBtZW1vcnkgY29udGV4dCBtdWx0aXBsZSB0aW1lcyBmb3IKKyAqIExvb2t1 cFR1cGxlSGFzaEVudHJ5LgorICovCitzdGF0aWMgVHVwbGVIYXNoRW50cnkKK0xvb2t1cFR1cGxl SGFzaEVudHJ5X2ludGVybmFsKFR1cGxlSGFzaFRhYmxlIGhhc2h0YWJsZSwgVHVwbGVUYWJsZVNs b3QgKnNsb3QsCisJCQkJCQkJICBib29sICppc25ldywgdWludDMyIGhhc2gpCit7CisJVHVwbGVI YXNoRW50cnlEYXRhICplbnRyeTsKKwlib29sCQlmb3VuZDsKKwlNaW5pbWFsVHVwbGUga2V5Owor CisJLyogc2V0IHVwIGRhdGEgbmVlZGVkIGJ5IGhhc2ggYW5kIG1hdGNoIGZ1bmN0aW9ucyAqLwor CWhhc2h0YWJsZS0+aW5wdXRzbG90ID0gc2xvdDsKKwloYXNodGFibGUtPmluX2hhc2hfZnVuY3Mg PSBoYXNodGFibGUtPnRhYl9oYXNoX2Z1bmNzOworCWhhc2h0YWJsZS0+Y3VyX2VxX2Z1bmMgPSBo YXNodGFibGUtPnRhYl9lcV9mdW5jOworCisJa2V5ID0gTlVMTDsJCQkJCS8qIGZsYWcgdG8gcmVm ZXJlbmNlIGlucHV0c2xvdCAqLworCisJaWYgKGlzbmV3KQorCXsKKwkJZW50cnkgPSB0dXBsZWhh c2hfaW5zZXJ0X2hhc2goaGFzaHRhYmxlLT5oYXNodGFiLCBrZXksIGhhc2gsICZmb3VuZCk7CisK KwkJaWYgKGZvdW5kKQorCQl7CisJCQkvKiBmb3VuZCBwcmUtZXhpc3RpbmcgZW50cnkgKi8KKwkJ CSppc25ldyA9IGZhbHNlOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogY3JlYXRlZCBuZXcgZW50 cnkgKi8KKwkJCSppc25ldyA9IHRydWU7CisJCQkvKiB6ZXJvIGNhbGxlciBkYXRhICovCisJCQll bnRyeS0+YWRkaXRpb25hbCA9IE5VTEw7CisJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8oaGFzaHRh YmxlLT50YWJsZWN4dCk7CisJCQkvKiBDb3B5IHRoZSBmaXJzdCB0dXBsZSBpbnRvIHRoZSB0YWJs ZSBjb250ZXh0ICovCisJCQllbnRyeS0+Zmlyc3RUdXBsZSA9IEV4ZWNDb3B5U2xvdE1pbmltYWxU dXBsZShzbG90KTsKKwkJfQorCX0KKwllbHNlCisJeworCQllbnRyeSA9IHR1cGxlaGFzaF9sb29r dXBfaGFzaChoYXNodGFibGUtPmhhc2h0YWIsIGtleSwgaGFzaCk7CisJfQorCisJcmV0dXJuIGVu dHJ5OworfQorCiAvKgogICogU2VlIHdoZXRoZXIgdHdvIHR1cGxlcyAocHJlc3VtYWJseSBvZiB0 aGUgc2FtZSBoYXNoIHZhbHVlKSBtYXRjaAogICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlQWdnLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQWdnLmMKaW5kZXgg NmVlMjRlYWIzZDIuLmJjNWFiOTgxZTFkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlQWdnLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFnZy5jCkBAIC0xOTQs NiArMTk0LDE4IEBACiAgKgkgIHRyYW5zaXRpb24gdmFsdWVzLiAgaGFzaGNvbnRleHQgaXMgdGhl IHNpbmdsZSBjb250ZXh0IGNyZWF0ZWQgdG8gc3VwcG9ydAogICoJICBhbGwgaGFzaCB0YWJsZXMu CiAgKgorICoJICBXaGVuIHRoZSBoYXNoIHRhYmxlIG1lbW9yeSBleGNlZWRzIHdvcmtfbWVtLCB3 ZSBhZHZhbmNlIHRoZSB0cmFuc2l0aW9uCisgKgkgIHN0YXRlcyBvbmx5IGZvciBncm91cHMgYWxy ZWFkeSBpbiB0aGUgaGFzaCB0YWJsZS4gRm9yIHR1cGxlcyB0aGF0IHdvdWxkCisgKgkgIG5lZWQg dG8gY3JlYXRlIGEgbmV3IGhhc2ggdGFibGUgZW50cmllcyAoYW5kIGluaXRpYWxpemUgbmV3IHRy YW5zaXRpb24KKyAqCSAgc3RhdGVzKSwgd2Ugc3BpbGwgdGhlbSB0byBkaXNrIHRvIGJlIHByb2Nl c3NlZCBsYXRlci4gVGhlIHR1cGxlcyBhcmUKKyAqCSAgc3BpbGxlZCBpbiBhIHBhcnRpdGlvbmVk IG1hbm5lciwgc28gdGhhdCBzdWJzZXF1ZW50IGJhdGNoZXMgYXJlIHNtYWxsZXIKKyAqCSAgYW5k IGxlc3MgbGlrZWx5IHRvIGV4Y2VlZCB3b3JrX21lbSAoaWYgYSBiYXRjaCBkb2VzIGV4Y2VlZCB3 b3JrX21lbSwgaXQKKyAqCSAgbXVzdCBiZSBzcGlsbGVkIHJlY3Vyc2l2ZWx5KS4KKyAqCisgKgkg IE5vdGUgdGhhdCBpdCdzIHBvc3NpYmxlIGZvciB0cmFuc2l0aW9uIHN0YXRlcyB0byBzdGFydCBz bWFsbCBidXQgdGhlbgorICoJICBncm93IHZlcnkgbGFyZ2U7IGZvciBpbnN0YW5jZSBpbiB0aGUg Y2FzZSBvZiBBUlJBWV9BR0cuIEluIHN1Y2ggY2FzZXMsCisgKgkgIGl0J3Mgc3RpbGwgcG9zc2li bGUgdG8gc2lnbmlmaWNhbnRseSBleGNlZWQgd29ya19tZW0uCisgKgogICogICAgVHJhbnNpdGlv biAvIENvbWJpbmUgZnVuY3Rpb24gaW52b2NhdGlvbjoKICAqCiAgKiAgICBGb3IgcGVyZm9ybWFu Y2UgcmVhc29ucyB0cmFuc2l0aW9uIGZ1bmN0aW9ucywgaW5jbHVkaW5nIGNvbWJpbmUKQEAgLTIy OSwxNSArMjQxLDY5IEBACiAjaW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5oIgogI2luY2x1 ZGUgInBhcnNlci9wYXJzZV9hZ2cuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfY29lcmNlLmgi CisjaW5jbHVkZSAic3RvcmFnZS9idWZmaWxlLmgiCiAjaW5jbHVkZSAidXRpbHMvYWNsLmgiCiAj aW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgorI2lu Y2x1ZGUgInV0aWxzL2R5bmFoYXNoLmgiCiAjaW5jbHVkZSAidXRpbHMvZXhwYW5kZWRkYXR1bS5o IgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxz LmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy90dXBsZXNv cnQuaCIKIAorLyoKKyAqIENvbnRyb2wgaG93IG1hbnkgcGFydGl0aW9ucyBhcmUgY3JlYXRlZCB3 aGVuIHNwaWxsaW5nIEhhc2hBZ2cgdG8KKyAqIGRpc2suCisgKgorICogSEFTSEFHR19QQVJUSVRJ T05fRkFDVE9SIGlzIG11bHRpcGxpZWQgYnkgdGhlIGVzdGltYXRlZCBudW1iZXIgb2YKKyAqIHBh cnRpdGlvbnMgbmVlZGVkIHN1Y2ggdGhhdCBlYWNoIHBhcnRpdGlvbiB3aWxsIGZpdCBpbiBtZW1v cnkuIFRoZSBmYWN0b3IKKyAqIGlzIHNldCBoaWdoZXIgdGhhbiBvbmUgYmVjYXVzZSB0aGVyZSdz IG5vdCBhIGhpZ2ggY29zdCB0byBoYXZpbmcgYSBmZXcgdG9vCisgKiBtYW55IHBhcnRpdGlvbnMs IGFuZCBpdCBtYWtlcyBpdCBsZXNzIGxpa2VseSB0aGF0IGEgcGFydGl0aW9uIHdpbGwgbmVlZCB0 bworICogYmUgc3BpbGxlZCByZWN1cnNpdmVseS4gQW5vdGhlciBiZW5lZml0IG9mIGhhdmluZyBt b3JlLCBzbWFsbGVyIHBhcnRpdGlvbnMKKyAqIGlzIHRoYXQgc21hbGwgaGFzaCB0YWJsZXMgbWF5 IHBlcmZvcm0gYmV0dGVyIHRoYW4gbGFyZ2Ugb25lcyBkdWUgdG8gbWVtb3J5CisgKiBjYWNoaW5n IGVmZmVjdHMuCisgKgorICogSEFTSEFHR19QQVJUSVRJT05fTUVNIGlzIHRoZSBhcHByb3hpbWF0 ZSBhbW91bnQgb2Ygd29ya19tZW0gd2Ugc2hvdWxkCisgKiByZXNlcnZlIGZvciB0aGUgcGFydGl0 aW9ucyB0aGVtc2VsdmVzIChpLmUuIGJ1ZmZlcmluZyBvZiB0aGUgZmlsZXMgYmFja2luZworICog dGhlIHBhcnRpdGlvbnMpLiBUaGlzIGlzIHNsb3BweSwgYmVjYXVzZSB3ZSBtdXN0IHJlc2VydmUg dGhlIG1lbW9yeSBiZWZvcmUKKyAqIGZpbGxpbmcgdGhlIGhhc2ggdGFibGU7IGJ1dCB3ZSBjaG9v c2UgdGhlIG51bWJlciBvZiBwYXJ0aXRpb25zIGF0IHRoZSB0aW1lCisgKiB3ZSBuZWVkIHRvIHNw aWxsLgorICoKKyAqIFdlIGFsc28gc3BlY2lmeSBhIG1pbiBhbmQgbWF4IG51bWJlciBvZiBwYXJ0 aXRpb25zIHBlciBzcGlsbC4gVG9vIGZldyBtaWdodAorICogbWVhbiBhIGxvdCBvZiB3YXN0ZWQg SS9PIGZyb20gcmVwZWF0ZWQgc3BpbGxpbmcgb2YgdGhlIHNhbWUgdHVwbGVzLiBUb28KKyAqIG1h bnkgd2lsbCByZXN1bHQgaW4gbG90cyBvZiBtZW1vcnkgd2FzdGVkIGJ1ZmZlcmluZyB0aGUgc3Bp bGwgZmlsZXMgKGFuZAorICogcG9zc2libHkgcHVzaGluZyBoaWRkZW4gY29zdHMgdG8gdGhlIE9T IGZvciBtYW5hZ2luZyBtb3JlIGZpbGVzKS4KKyAqLworI2RlZmluZSBIQVNIQUdHX1BBUlRJVElP Tl9GQUNUT1IgMS41MAorI2RlZmluZSBIQVNIQUdHX01JTl9QQVJUSVRJT05TIDQKKyNkZWZpbmUg SEFTSEFHR19QQVJUSVRJT05fTUVNIChIQVNIQUdHX01JTl9QQVJUSVRJT05TICogQkxDS1NaKQor CisvKgorICogUmVwcmVzZW50cyBwYXJ0aXRpb25lZCBzcGlsbCBkYXRhIGZvciBhIHNpbmdsZSBo YXNodGFibGUuCisgKi8KK3R5cGVkZWYgc3RydWN0IEhhc2hBZ2dTcGlsbAoreworCWludCAgICAg ICBuX3BhcnRpdGlvbnM7CQkvKiBudW1iZXIgb2Ygb3V0cHV0IHBhcnRpdGlvbnMgKi8KKwlpbnQg ICAgICAgcGFydGl0aW9uX2JpdHM7CS8qIG51bWJlciBvZiBiaXRzIGZvciBwYXJ0aXRpb24gbWFz aworCQkJCQkJCQkgICBsb2cyKG5fcGFydGl0aW9ucykgcGFyZW50IHBhcnRpdGlvbiBiaXRzICov CisJQnVmRmlsZSAqKnBhcnRpdGlvbnM7CQkvKiBvdXRwdXQgcGFydGl0aW9uIGZpbGVzICovCisJ aW50NjQgICAgKm50dXBsZXM7CQkJLyogbnVtYmVyIG9mIHR1cGxlcyBpbiBlYWNoIHBhcnRpdGlv biAqLworfSBIYXNoQWdnU3BpbGw7CisKKy8qCisgKiBSZXByZXNlbnRzIHdvcmsgdG8gYmUgZG9u ZSBmb3Igb25lIHBhc3Mgb2YgaGFzaCBhZ2dyZWdhdGlvbi4gSW5pdGlhbGx5LAorICogb25seSB0 aGUgaW5wdXQgZmllbGRzIGFyZSBzZXQuIElmIHNwaWxsZWQgdG8gZGlzaywgYWxzbyBzZXQgdGhl IHNwaWxsIGRhdGEuCisgKi8KK3R5cGVkZWYgc3RydWN0IEhhc2hBZ2dCYXRjaAoreworCUJ1ZkZp bGUgKmlucHV0X2ZpbGU7CQkvKiBpbnB1dCBwYXJ0aXRpb24gKi8KKwlpbnQgICAgICBpbnB1dF9i aXRzOwkJLyogbnVtYmVyIG9mIGJpdHMgZm9yIGlucHV0IHBhcnRpdGlvbiBtYXNrICovCisJaW50 NjQgICAgaW5wdXRfdHVwbGVzOwkJLyogbnVtYmVyIG9mIHR1cGxlcyBpbiB0aGlzIGJhdGNoICov CisJaW50CQkgc2V0bm87CQkJCS8qIGdyb3VwaW5nIHNldCAqLworCUhhc2hBZ2dTcGlsbCBzcGls bDsJCQkvKiBzcGlsbCBvdXRwdXQgKi8KK30gSGFzaEFnZ0JhdGNoOworCiBzdGF0aWMgdm9pZCBz ZWxlY3RfY3VycmVudF9zZXQoQWdnU3RhdGUgKmFnZ3N0YXRlLCBpbnQgc2V0bm8sIGJvb2wgaXNf aGFzaCk7CiBzdGF0aWMgdm9pZCBpbml0aWFsaXplX3BoYXNlKEFnZ1N0YXRlICphZ2dzdGF0ZSwg aW50IG5ld3BoYXNlKTsKIHN0YXRpYyBUdXBsZVRhYmxlU2xvdCAqZmV0Y2hfaW5wdXRfdHVwbGUo QWdnU3RhdGUgKmFnZ3N0YXRlKTsKQEAgLTI3MSwxMiArMzM3LDM1IEBAIHN0YXRpYyB2b2lkIGZp bmFsaXplX2FnZ3JlZ2F0ZXMoQWdnU3RhdGUgKmFnZ3N0YXRlLAogc3RhdGljIFR1cGxlVGFibGVT bG90ICpwcm9qZWN0X2FnZ3JlZ2F0ZXMoQWdnU3RhdGUgKmFnZ3N0YXRlKTsKIHN0YXRpYyBCaXRt YXBzZXQgKmZpbmRfdW5hZ2dyZWdhdGVkX2NvbHMoQWdnU3RhdGUgKmFnZ3N0YXRlKTsKIHN0YXRp YyBib29sIGZpbmRfdW5hZ2dyZWdhdGVkX2NvbHNfd2Fsa2VyKE5vZGUgKm5vZGUsIEJpdG1hcHNl dCAqKmNvbG5vcyk7Ci1zdGF0aWMgdm9pZCBidWlsZF9oYXNoX3RhYmxlKEFnZ1N0YXRlICphZ2dz dGF0ZSk7Ci1zdGF0aWMgVHVwbGVIYXNoRW50cnlEYXRhICpsb29rdXBfaGFzaF9lbnRyeShBZ2dT dGF0ZSAqYWdnc3RhdGUpOworc3RhdGljIHZvaWQgYnVpbGRfaGFzaF90YWJsZShBZ2dTdGF0ZSAq YWdnc3RhdGUsIGludCBzZXRubywKKwkJCQkJCQkgaW50NjQgbmdyb3Vwc19lc3RpbWF0ZSk7Citz dGF0aWMgdm9pZCBwcmVwYXJlX2hhc2hfc2xvdChBZ2dTdGF0ZSAqYWdnc3RhdGUpOworc3RhdGlj IHZvaWQgaGFzaF9yZWNvbXBpbGVfZXhwcmVzc2lvbnMoQWdnU3RhdGUgKmFnZ3N0YXRlKTsKK3N0 YXRpYyB1aW50MzIgY2FsY3VsYXRlX2hhc2goQWdnU3RhdGUgKmFnZ3N0YXRlKTsKK3N0YXRpYyBs b25nIGhhc2hfY2hvb3NlX251bV9idWNrZXRzKEFnZ1N0YXRlICphZ2dzdGF0ZSwKKwkJCQkJCQkJ CWxvbmcgZXN0aW1hdGVkX25idWNrZXRzLAorCQkJCQkJCQkJU2l6ZSBtZW1vcnkpOworc3RhdGlj IGludCBoYXNoX2Nob29zZV9udW1fc3BpbGxfcGFydGl0aW9ucyh1aW50NjQgaW5wdXRfZ3JvdXBz LAorCQkJCQkJCQkJCQlkb3VibGUgaGFzaGVudHJ5c2l6ZSk7CitzdGF0aWMgQWdnU3RhdGVQZXJH cm91cCBsb29rdXBfaGFzaF9lbnRyeShBZ2dTdGF0ZSAqYWdnc3RhdGUsIHVpbnQzMiBoYXNoKTsK IHN0YXRpYyB2b2lkIGxvb2t1cF9oYXNoX2VudHJpZXMoQWdnU3RhdGUgKmFnZ3N0YXRlKTsKIHN0 YXRpYyBUdXBsZVRhYmxlU2xvdCAqYWdnX3JldHJpZXZlX2RpcmVjdChBZ2dTdGF0ZSAqYWdnc3Rh dGUpOwogc3RhdGljIHZvaWQgYWdnX2ZpbGxfaGFzaF90YWJsZShBZ2dTdGF0ZSAqYWdnc3RhdGUp Oworc3RhdGljIGJvb2wgYWdnX3JlZmlsbF9oYXNoX3RhYmxlKEFnZ1N0YXRlICphZ2dzdGF0ZSk7 CiBzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKmFnZ19yZXRyaWV2ZV9oYXNoX3RhYmxlKEFnZ1N0YXRl ICphZ2dzdGF0ZSk7CitzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKmFnZ19yZXRyaWV2ZV9oYXNoX3Rh YmxlX2luX21lbW9yeShBZ2dTdGF0ZSAqYWdnc3RhdGUpOworc3RhdGljIHZvaWQgaGFzaF9zcGls bF9pbml0KEhhc2hBZ2dTcGlsbCAqc3BpbGwsIGludCBpbnB1dF9iaXRzLAorCQkJCQkJCXVpbnQ2 NCBpbnB1dF90dXBsZXMsIGRvdWJsZSBoYXNoZW50cnlzaXplKTsKK3N0YXRpYyBTaXplIGhhc2hf c3BpbGxfdHVwbGUoSGFzaEFnZ1NwaWxsICpzcGlsbCwgaW50IGlucHV0X2JpdHMsCisJCQkJCQkJ IFR1cGxlVGFibGVTbG90ICpzbG90LCB1aW50MzIgaGFzaCk7CitzdGF0aWMgTWluaW1hbFR1cGxl IGhhc2hfcmVhZF9zcGlsbGVkKEJ1ZkZpbGUgKmZpbGUsIHVpbnQzMiAqaGFzaHApOworc3RhdGlj IEhhc2hBZ2dCYXRjaCAqaGFzaF9iYXRjaF9uZXcoQnVmRmlsZSAqaW5wdXRfZmlsZSwgaW50IHNl dG5vLAorCQkJCQkJCQkJaW50NjQgaW5wdXRfdHVwbGVzLCBpbnQgaW5wdXRfYml0cyk7CitzdGF0 aWMgdm9pZCBoYXNoX2ZpbmlzaF9pbml0aWFsX3NwaWxscyhBZ2dTdGF0ZSAqYWdnc3RhdGUpOwor c3RhdGljIHZvaWQgaGFzaF9zcGlsbF9maW5pc2goQWdnU3RhdGUgKmFnZ3N0YXRlLCBIYXNoQWdn U3BpbGwgKnNwaWxsLAorCQkJCQkJCSAgaW50IHNldG5vLCBpbnQgaW5wdXRfYml0cyk7CitzdGF0 aWMgdm9pZCBoYXNoX3Jlc2V0X3NwaWxsKEhhc2hBZ2dTcGlsbCAqc3BpbGwpOworc3RhdGljIHZv aWQgaGFzaF9yZXNldF9zcGlsbHMoQWdnU3RhdGUgKmFnZ3N0YXRlKTsKIHN0YXRpYyBEYXR1bSBH ZXRBZ2dJbml0VmFsKERhdHVtIHRleHRJbml0VmFsLCBPaWQgdHJhbnN0eXBlKTsKIHN0YXRpYyB2 b2lkIGJ1aWxkX3BlcnRyYW5zX2Zvcl9hZ2dyZWYoQWdnU3RhdGVQZXJUcmFucyBwZXJ0cmFucywK IAkJCQkJCQkJCSAgQWdnU3RhdGUgKmFnZ3N0YXRlLCBFU3RhdGUgKmVzdGF0ZSwKQEAgLTEyMDEs NiArMTI5MCw2OCBAQCBwcm9qZWN0X2FnZ3JlZ2F0ZXMoQWdnU3RhdGUgKmFnZ3N0YXRlKQogCXJl dHVybiBOVUxMOwogfQogCitzdGF0aWMgYm9vbAorZmluZF9hZ2dyZWdhdGVkX2NvbHNfd2Fsa2Vy KE5vZGUgKm5vZGUsIEJpdG1hcHNldCAqKmNvbG5vcykKK3sKKwlpZiAobm9kZSA9PSBOVUxMKQor CQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoSXNBKG5vZGUsIFZhcikpCisJeworCQlWYXIJCSAgICp2 YXIgPSAoVmFyICopIG5vZGU7CisKKwkJKmNvbG5vcyA9IGJtc19hZGRfbWVtYmVyKCpjb2xub3Ms IHZhci0+dmFyYXR0bm8pOworCisJCXJldHVybiBmYWxzZTsKKwl9CisJcmV0dXJuIGV4cHJlc3Np b25fdHJlZV93YWxrZXIobm9kZSwgZmluZF9hZ2dyZWdhdGVkX2NvbHNfd2Fsa2VyLAorCQkJCQkJ CQkgICh2b2lkICopIGNvbG5vcyk7Cit9CisKKy8qCisgKiBmaW5kX2FnZ3JlZ2F0ZWRfY29scwor ICoJICBDb25zdHJ1Y3QgYSBiaXRtYXBzZXQgb2YgdGhlIGNvbHVtbiBudW1iZXJzIG9mIGFnZ3Jl Z2F0ZWQgVmFycworICoJICBhcHBlYXJpbmcgaW4gb3VyIHRhcmdldGxpc3QgYW5kIHF1YWwgKEhB VklORyBjbGF1c2UpCisgKi8KK3N0YXRpYyBCaXRtYXBzZXQgKgorZmluZF9hZ2dyZWdhdGVkX2Nv bHMoQWdnU3RhdGUgKmFnZ3N0YXRlKQoreworCUFnZwkJICAgKm5vZGUgPSAoQWdnICopIGFnZ3N0 YXRlLT5zcy5wcy5wbGFuOworCUJpdG1hcHNldCAgKmNvbG5vcyA9IE5VTEw7CisJTGlzdENlbGwg ICAqdGVtcDsKKworCS8qCisJICogV2Ugb25seSB3YW50IHRoZSBjb2x1bW5zIHVzZWQgYnkgYWdn cmVnYXRpb25zIGluIHRoZSB0YXJnZXRsaXN0IG9yIHF1YWwKKwkgKi8KKwlpZiAobm9kZS0+cGxh bi50YXJnZXRsaXN0ICE9IE5VTEwpCisJeworCQlmb3JlYWNoKHRlbXAsIChMaXN0ICopIG5vZGUt PnBsYW4udGFyZ2V0bGlzdCkKKwkJeworCQkJaWYgKElzQShsZmlyc3QodGVtcCksIFRhcmdldEVu dHJ5KSkKKwkJCXsKKwkJCQlOb2RlICpub2RlID0gKE5vZGUgKikoKFRhcmdldEVudHJ5ICopbGZp cnN0KHRlbXApKS0+ZXhwcjsKKwkJCQlpZiAoSXNBKG5vZGUsIEFnZ3JlZikgfHwgSXNBKG5vZGUs IEdyb3VwaW5nRnVuYykpCisJCQkJCWZpbmRfYWdncmVnYXRlZF9jb2xzX3dhbGtlcihub2RlLCAm Y29sbm9zKTsKKwkJCX0KKwkJfQorCX0KKworCWlmIChub2RlLT5wbGFuLnF1YWwgIT0gTlVMTCkK Kwl7CisJCWZvcmVhY2godGVtcCwgKExpc3QgKikgbm9kZS0+cGxhbi5xdWFsKQorCQl7CisJCQlp ZiAoSXNBKGxmaXJzdCh0ZW1wKSwgVGFyZ2V0RW50cnkpKQorCQkJeworCQkJCU5vZGUgKm5vZGUg PSAoTm9kZSAqKSgoVGFyZ2V0RW50cnkgKilsZmlyc3QodGVtcCkpLT5leHByOworCQkJCWlmIChJ c0Eobm9kZSwgQWdncmVmKSB8fCBJc0Eobm9kZSwgR3JvdXBpbmdGdW5jKSkKKwkJCQkJZmluZF9h Z2dyZWdhdGVkX2NvbHNfd2Fsa2VyKG5vZGUsICZjb2xub3MpOworCQkJfQorCQl9CisJfQorCisJ cmV0dXJuIGNvbG5vczsKK30KKwogLyoKICAqIGZpbmRfdW5hZ2dyZWdhdGVkX2NvbHMKICAqCSAg Q29uc3RydWN0IGEgYml0bWFwc2V0IG9mIHRoZSBjb2x1bW4gbnVtYmVycyBvZiB1bi1hZ2dyZWdh dGVkIFZhcnMKQEAgLTEyNTQsNDYgKzE0MDUsODQgQEAgZmluZF91bmFnZ3JlZ2F0ZWRfY29sc193 YWxrZXIoTm9kZSAqbm9kZSwgQml0bWFwc2V0ICoqY29sbm9zKQogICogZm9yIGVhY2ggZW50cnku CiAgKgogICogV2UgaGF2ZSBhIHNlcGFyYXRlIGhhc2h0YWJsZSBhbmQgYXNzb2NpYXRlZCBwZXJo YXNoIGRhdGEgc3RydWN0dXJlIGZvciBlYWNoCi0gKiBncm91cGluZyBzZXQgZm9yIHdoaWNoIHdl J3JlIGRvaW5nIGhhc2hpbmcuCisgKiBncm91cGluZyBzZXQgZm9yIHdoaWNoIHdlJ3JlIGRvaW5n IGhhc2hpbmcuIElmIHNldG5vIGlzIC0xLCBidWlsZCBoYXNoCisgKiB0YWJsZXMgZm9yIGFsbCBn cm91cGluZyBzZXRzLiBPdGhlcndpc2UsIGJ1aWxkIG9ubHkgZm9yIHRoZSBzcGVjaWZpZWQKKyAq IGdyb3VwaW5nIHNldC4KICAqCiAgKiBUaGUgY29udGVudHMgb2YgdGhlIGhhc2ggdGFibGVzIGFs d2F5cyBsaXZlIGluIHRoZSBoYXNoY29udGV4dCdzIHBlci10dXBsZQogICogbWVtb3J5IGNvbnRl eHQgKHRoZXJlIGlzIG9ubHkgb25lIG9mIHRoZXNlIGZvciBhbGwgdGFibGVzIHRvZ2V0aGVyLCBz aW5jZQogICogdGhleSBhcmUgYWxsIHJlc2V0IGF0IHRoZSBzYW1lIHRpbWUpLgogICovCiBzdGF0 aWMgdm9pZAotYnVpbGRfaGFzaF90YWJsZShBZ2dTdGF0ZSAqYWdnc3RhdGUpCitidWlsZF9oYXNo X3RhYmxlKEFnZ1N0YXRlICphZ2dzdGF0ZSwgaW50IHNldG5vLCBsb25nIG5ncm91cHNfZXN0aW1h dGUpCiB7Ci0JTWVtb3J5Q29udGV4dCB0bXBtZW0gPSBhZ2dzdGF0ZS0+dG1wY29udGV4dC0+ZWN4 dF9wZXJfdHVwbGVfbWVtb3J5OwotCVNpemUJCWFkZGl0aW9uYWxzaXplOwotCWludAkJCWk7CisJ TWVtb3J5Q29udGV4dAl0bXBtZW0gPSBhZ2dzdGF0ZS0+dG1wY29udGV4dC0+ZWN4dF9wZXJfdHVw bGVfbWVtb3J5OworCVNpemUgICAgICAgICAgICBhZGRpdGlvbmFsc2l6ZTsKKwlpbnQJCQkJaTsK IAogCUFzc2VydChhZ2dzdGF0ZS0+YWdnc3RyYXRlZ3kgPT0gQUdHX0hBU0hFRCB8fCBhZ2dzdGF0 ZS0+YWdnc3RyYXRlZ3kgPT0gQUdHX01JWEVEKTsKIAorCS8qCisJICogVXNlZCB0byBtYWtlIHN1 cmUgaW5pdGlhbCBoYXNoIHRhYmxlIGFsbG9jYXRpb24gZG9lcyBub3QgZXhjZWVkCisJICogd29y a19tZW0uIE5vdGUgdGhhdCB0aGUgZXN0aW1hdGUgZG9lcyBub3QgaW5jbHVkZSBzcGFjZSBmb3IK KwkgKiBwYXNzLWJ5LXJlZmVyZW5jZSB0cmFuc2l0aW9uIGRhdGEgdmFsdWVzLCBub3IgZm9yIHRo ZSByZXByZXNlbnRhdGl2ZQorCSAqIHR1cGxlIG9mIGVhY2ggZ3JvdXAuCisJICovCiAJYWRkaXRp b25hbHNpemUgPSBhZ2dzdGF0ZS0+bnVtdHJhbnMgKiBzaXplb2YoQWdnU3RhdGVQZXJHcm91cERh dGEpOwogCiAJZm9yIChpID0gMDsgaSA8IGFnZ3N0YXRlLT5udW1faGFzaGVzOyArK2kpCiAJewog CQlBZ2dTdGF0ZVBlckhhc2ggcGVyaGFzaCA9ICZhZ2dzdGF0ZS0+cGVyaGFzaFtpXTsKKwkJaW50 NjQJCQluZ3JvdXBzOworCQlsb25nCQkJbmJ1Y2tldHM7CisJCVNpemUJCQltZW1vcnk7CiAKIAkJ QXNzZXJ0KHBlcmhhc2gtPmFnZ25vZGUtPm51bUdyb3VwcyA+IDApOwogCiAJCWlmIChwZXJoYXNo LT5oYXNodGFibGUpCi0JCQlSZXNldFR1cGxlSGFzaFRhYmxlKHBlcmhhc2gtPmhhc2h0YWJsZSk7 Ci0JCWVsc2UKLQkJCXBlcmhhc2gtPmhhc2h0YWJsZSA9IEJ1aWxkVHVwbGVIYXNoVGFibGVFeHQo JmFnZ3N0YXRlLT5zcy5wcywKLQkJCQkJCQkJCQkJCQkJcGVyaGFzaC0+aGFzaHNsb3QtPnR0c190 dXBsZURlc2NyaXB0b3IsCi0JCQkJCQkJCQkJCQkJCXBlcmhhc2gtPm51bUNvbHMsCi0JCQkJCQkJ CQkJCQkJCXBlcmhhc2gtPmhhc2hHcnBDb2xJZHhIYXNoLAotCQkJCQkJCQkJCQkJCQlwZXJoYXNo LT5lcWZ1bmNvaWRzLAotCQkJCQkJCQkJCQkJCQlwZXJoYXNoLT5oYXNoZnVuY3Rpb25zLAotCQkJ CQkJCQkJCQkJCQlwZXJoYXNoLT5hZ2dub2RlLT5ncnBDb2xsYXRpb25zLAotCQkJCQkJCQkJCQkJ CQlwZXJoYXNoLT5hZ2dub2RlLT5udW1Hcm91cHMsCi0JCQkJCQkJCQkJCQkJCWFkZGl0aW9uYWxz aXplLAotCQkJCQkJCQkJCQkJCQlhZ2dzdGF0ZS0+c3MucHMuc3RhdGUtPmVzX3F1ZXJ5X2N4dCwK LQkJCQkJCQkJCQkJCQkJYWdnc3RhdGUtPmhhc2hjb250ZXh0LT5lY3h0X3Blcl90dXBsZV9tZW1v cnksCi0JCQkJCQkJCQkJCQkJCXRtcG1lbSwKLQkJCQkJCQkJCQkJCQkJRE9fQUdHU1BMSVRfU0tJ UEZJTkFMKGFnZ3N0YXRlLT5hZ2dzcGxpdCkpOworCQkJRGVzdHJveVR1cGxlSGFzaFRhYmxlKHBl cmhhc2gtPmhhc2h0YWJsZSk7CisJCXBlcmhhc2gtPmhhc2h0YWJsZSA9IE5VTEw7CisKKwkJLyoK KwkJICogSWYgd2UgYXJlIGJ1aWxkaW5nIGEgaGFzaCB0YWJsZSBmb3Igb25seSBhIHNpbmdsZSBn cm91cGluZyBzZXQsCisJCSAqIHNraXAgdGhlIG90aGVycy4KKwkJICovCisJCWlmIChzZXRubyA+ PSAwICYmIHNldG5vICE9IGkpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBVc2UgYW4gZXN0 aW1hdGUgZnJvbSBleGVjdXRpb24gdGltZSBpZiB3ZSBoYXZlIGl0OyBvdGhlcndpc2UgZmFsbAor CQkgKiBiYWNrIHRvIHRoZSBwbGFubmVyIGVzdGltYXRlLgorCQkgKi8KKwkJbmdyb3VwcyA9IG5n cm91cHNfZXN0aW1hdGUgPiAwID8KKwkJCW5ncm91cHNfZXN0aW1hdGUgOiBwZXJoYXNoLT5hZ2du b2RlLT5udW1Hcm91cHM7CisKKwkJLyogZGl2aWRlIG1lbW9yeSBieSB0aGUgbnVtYmVyIG9mIGhh c2ggdGFibGVzIHdlIGFyZSBpbml0aWFsaXppbmcgKi8KKwkJbWVtb3J5ID0gKGxvbmcpd29ya19t ZW0gKiAxMDI0TCAvCisJCQkoc2V0bm8gPj0gMCA/IDEgOiBhZ2dzdGF0ZS0+bnVtX2hhc2hlcyk7 CisKKwkJLyogY2hvb3NlIHJlYXNvbmFibGUgbnVtYmVyIG9mIGJ1Y2tldHMgcGVyIGhhc2h0YWJs ZSAqLworCQluYnVja2V0cyA9IGhhc2hfY2hvb3NlX251bV9idWNrZXRzKGFnZ3N0YXRlLCBuZ3Jv dXBzLCBtZW1vcnkpOworCisJCXBlcmhhc2gtPmhhc2h0YWJsZSA9IEJ1aWxkVHVwbGVIYXNoVGFi bGVFeHQoJmFnZ3N0YXRlLT5zcy5wcywKKwkJCQkJCQkJCQkJCQlwZXJoYXNoLT5oYXNoc2xvdC0+ dHRzX3R1cGxlRGVzY3JpcHRvciwKKwkJCQkJCQkJCQkJCQlwZXJoYXNoLT5udW1Db2xzLAorCQkJ CQkJCQkJCQkJCXBlcmhhc2gtPmhhc2hHcnBDb2xJZHhIYXNoLAorCQkJCQkJCQkJCQkJCXBlcmhh c2gtPmVxZnVuY29pZHMsCisJCQkJCQkJCQkJCQkJcGVyaGFzaC0+aGFzaGZ1bmN0aW9ucywKKwkJ CQkJCQkJCQkJCQlwZXJoYXNoLT5hZ2dub2RlLT5ncnBDb2xsYXRpb25zLAorCQkJCQkJCQkJCQkJ CW5idWNrZXRzLAorCQkJCQkJCQkJCQkJCWFkZGl0aW9uYWxzaXplLAorCQkJCQkJCQkJCQkJCWFn Z3N0YXRlLT5zcy5wcy5zdGF0ZS0+ZXNfcXVlcnlfY3h0LAorCQkJCQkJCQkJCQkJCWFnZ3N0YXRl LT5oYXNoY29udGV4dC0+ZWN4dF9wZXJfdHVwbGVfbWVtb3J5LAorCQkJCQkJCQkJCQkJCXRtcG1l bSwKKwkJCQkJCQkJCQkJCQlET19BR0dTUExJVF9TS0lQRklOQUwoYWdnc3RhdGUtPmFnZ3NwbGl0 KSk7CiAJfQorCisJYWdnc3RhdGUtPmhhc2hfbWVtX2N1cnJlbnQgPSBNZW1vcnlDb250ZXh0TWVt QWxsb2NhdGVkKAorCQlhZ2dzdGF0ZS0+aGFzaGNvbnRleHQtPmVjeHRfcGVyX3R1cGxlX21lbW9y eSwgdHJ1ZSk7CisJYWdnc3RhdGUtPmhhc2hfbmdyb3Vwc19jdXJyZW50ID0gMDsKKwlhZ2dzdGF0 ZS0+aGFzaF9ub19uZXdfZ3JvdXBzID0gZmFsc2U7CiB9CiAKIC8qCkBAIC0xMzI1LDYgKzE1MTQs NyBAQCBzdGF0aWMgdm9pZAogZmluZF9oYXNoX2NvbHVtbnMoQWdnU3RhdGUgKmFnZ3N0YXRlKQog ewogCUJpdG1hcHNldCAgKmJhc2VfY29sbm9zOworCUJpdG1hcHNldCAgKmFnZ3JlZ2F0ZWRfY29s bm9zOwogCUxpc3QJICAgKm91dGVyVGxpc3QgPSBvdXRlclBsYW5TdGF0ZShhZ2dzdGF0ZSktPnBs YW4tPnRhcmdldGxpc3Q7CiAJaW50CQkJbnVtSGFzaGVzID0gYWdnc3RhdGUtPm51bV9oYXNoZXM7 CiAJRVN0YXRlCSAgICplc3RhdGUgPSBhZ2dzdGF0ZS0+c3MucHMuc3RhdGU7CkBAIC0xMzMyLDEx ICsxNTIyLDEzIEBAIGZpbmRfaGFzaF9jb2x1bW5zKEFnZ1N0YXRlICphZ2dzdGF0ZSkKIAogCS8q IEZpbmQgVmFycyB0aGF0IHdpbGwgYmUgbmVlZGVkIGluIHRsaXN0IGFuZCBxdWFsICovCiAJYmFz ZV9jb2xub3MgPSBmaW5kX3VuYWdncmVnYXRlZF9jb2xzKGFnZ3N0YXRlKTsKKwlhZ2dyZWdhdGVk X2NvbG5vcyA9IGZpbmRfYWdncmVnYXRlZF9jb2xzKGFnZ3N0YXRlKTsKIAogCWZvciAoaiA9IDA7 IGogPCBudW1IYXNoZXM7ICsraikKIAl7CiAJCUFnZ1N0YXRlUGVySGFzaCBwZXJoYXNoID0gJmFn Z3N0YXRlLT5wZXJoYXNoW2pdOwogCQlCaXRtYXBzZXQgICpjb2xub3MgPSBibXNfY29weShiYXNl X2NvbG5vcyk7CisJCUJpdG1hcHNldCAgKmFsbE5lZWRlZENvbHNJbnB1dDsKIAkJQXR0ck51bWJl ciAqZ3JwQ29sSWR4ID0gcGVyaGFzaC0+YWdnbm9kZS0+Z3JwQ29sSWR4OwogCQlMaXN0CSAgICpo YXNoVGxpc3QgPSBOSUw7CiAJCVR1cGxlRGVzYwloYXNoRGVzYzsKQEAgLTEzODMsNiArMTU3NSwx OSBAQCBmaW5kX2hhc2hfY29sdW1ucyhBZ2dTdGF0ZSAqYWdnc3RhdGUpCiAJCWZvciAoaSA9IDA7 IGkgPCBwZXJoYXNoLT5udW1Db2xzOyBpKyspCiAJCQljb2xub3MgPSBibXNfYWRkX21lbWJlcihj b2xub3MsIGdycENvbElkeFtpXSk7CiAKKwkJLyoKKwkJICogVHJhY2sgdGhlIG5lY2Vzc2FyeSBj b2x1bW5zIGZyb20gdGhlIGlucHV0LiBUaGlzIGlzIGltcG9ydGFudCBmb3IKKwkJICogc3BpbGxp bmcgdHVwbGVzIHNvIHRoYXQgd2UgZG9uJ3Qgd2FzdGUgZGlzayBzcGFjZSB3aXRoIHVubmVlZGVk CisJCSAqIGNvbHVtbnMuCisJCSAqLworCQlhbGxOZWVkZWRDb2xzSW5wdXQgPSBibXNfdW5pb24o Y29sbm9zLCBhZ2dyZWdhdGVkX2NvbG5vcyk7CisJCXBlcmhhc2gtPm51bU5lZWRlZENvbHNJbnB1 dCA9IDA7CisJCXBlcmhhc2gtPmFsbE5lZWRlZENvbHNJbnB1dCA9IHBhbGxvYygKKwkJCWJtc19u dW1fbWVtYmVycyhhbGxOZWVkZWRDb2xzSW5wdXQpICogc2l6ZW9mKEF0dHJOdW1iZXIpKTsKKwor CQl3aGlsZSAoKGkgPSBibXNfZmlyc3RfbWVtYmVyKGFsbE5lZWRlZENvbHNJbnB1dCkpID49IDAp CisJCQlwZXJoYXNoLT5hbGxOZWVkZWRDb2xzSW5wdXRbcGVyaGFzaC0+bnVtTmVlZGVkQ29sc0lu cHV0KytdID0gaTsKKwogCQkvKgogCQkgKiBGaXJzdCBidWlsZCBtYXBwaW5nIGZvciBjb2x1bW5z IGRpcmVjdGx5IGhhc2hlZC4gVGhlc2UgYXJlIHRoZQogCQkgKiBmaXJzdCwgYmVjYXVzZSB0aGV5 J2xsIGJlIGFjY2Vzc2VkIHdoZW4gY29tcHV0aW5nIGhhc2ggdmFsdWVzIGFuZApAQCAtMTQzNSw0 MiArMTY0MCwzMSBAQCBmaW5kX2hhc2hfY29sdW1ucyhBZ2dTdGF0ZSAqYWdnc3RhdGUpCiAKIC8q CiAgKiBFc3RpbWF0ZSBwZXItaGFzaC10YWJsZS1lbnRyeSBvdmVyaGVhZCBmb3IgdGhlIHBsYW5u ZXIuCi0gKgotICogTm90ZSB0aGF0IHRoZSBlc3RpbWF0ZSBkb2VzIG5vdCBpbmNsdWRlIHNwYWNl IGZvciBwYXNzLWJ5LXJlZmVyZW5jZQotICogdHJhbnNpdGlvbiBkYXRhIHZhbHVlcywgbm9yIGZv ciB0aGUgcmVwcmVzZW50YXRpdmUgdHVwbGUgb2YgZWFjaCBncm91cC4KLSAqIE5vciBkb2VzIHRo aXMgYWNjb3VudCBvZiB0aGUgdGFyZ2V0IGZpbGwtZmFjdG9yIGFuZCBncm93dGggcG9saWN5IG9m IHRoZQotICogaGFzaCB0YWJsZS4KICAqLwogU2l6ZQotaGFzaF9hZ2dfZW50cnlfc2l6ZShpbnQg bnVtQWdncykKK2hhc2hfYWdnX2VudHJ5X3NpemUoaW50IG51bUFnZ3MsIFNpemUgdHVwbGVXaWR0 aCwgU2l6ZSB0cmFuc2l0aW9uU3BhY2UpCiB7Ci0JU2l6ZQkJZW50cnlzaXplOwotCi0JLyogVGhp cyBtdXN0IG1hdGNoIGJ1aWxkX2hhc2hfdGFibGUgKi8KLQllbnRyeXNpemUgPSBzaXplb2YoVHVw bGVIYXNoRW50cnlEYXRhKSArCi0JCW51bUFnZ3MgKiBzaXplb2YoQWdnU3RhdGVQZXJHcm91cERh dGEpOwotCWVudHJ5c2l6ZSA9IE1BWEFMSUdOKGVudHJ5c2l6ZSk7Ci0KLQlyZXR1cm4gZW50cnlz aXplOworCXJldHVybgorCQkvKiBrZXkgKi8KKwkJTUFYQUxJR04oU2l6ZW9mTWluaW1hbFR1cGxl SGVhZGVyKSArCisJCU1BWEFMSUdOKHR1cGxlV2lkdGgpICsKKwkJLyogZGF0YSAqLworCQlNQVhB TElHTihzaXplb2YoVHVwbGVIYXNoRW50cnlEYXRhKSArCisJCQkJIG51bUFnZ3MgKiBzaXplb2Yo QWdnU3RhdGVQZXJHcm91cERhdGEpKSArCisJCXRyYW5zaXRpb25TcGFjZTsKIH0KIAogLyoKLSAq IEZpbmQgb3IgY3JlYXRlIGEgaGFzaHRhYmxlIGVudHJ5IGZvciB0aGUgdHVwbGUgZ3JvdXAgY29u dGFpbmluZyB0aGUgY3VycmVudAotICogdHVwbGUgKGFscmVhZHkgc2V0IGluIHRtcGNvbnRleHQn cyBvdXRlcnR1cGxlIHNsb3QpLCBpbiB0aGUgY3VycmVudCBncm91cGluZwotICogc2V0ICh3aGlj aCB0aGUgY2FsbGVyIG11c3QgaGF2ZSBzZWxlY3RlZCAtIG5vdGUgdGhhdCBpbml0aWFsaXplX2Fn Z3JlZ2F0ZQotICogZGVwZW5kcyBvbiB0aGlzKS4KLSAqCi0gKiBXaGVuIGNhbGxlZCwgQ3VycmVu dE1lbW9yeUNvbnRleHQgc2hvdWxkIGJlIHRoZSBwZXItcXVlcnkgY29udGV4dC4KKyAqIEV4dHJh Y3QgdGhlIGF0dHJpYnV0ZXMgdGhhdCBtYWtlIHVwIHRoZSBncm91cGluZyBrZXkgaW50byB0aGUK KyAqIGhhc2hzbG90LiBUaGlzIGlzIG5lY2Vzc2FyeSB0byBjb21wdXRlIHRoZSBoYXNoIG9mIHRo ZSBncm91cGluZyBrZXkuCiAgKi8KLXN0YXRpYyBUdXBsZUhhc2hFbnRyeURhdGEgKgotbG9va3Vw X2hhc2hfZW50cnkoQWdnU3RhdGUgKmFnZ3N0YXRlKQorc3RhdGljIHZvaWQKK3ByZXBhcmVfaGFz aF9zbG90KEFnZ1N0YXRlICphZ2dzdGF0ZSkKIHsKLQlUdXBsZVRhYmxlU2xvdCAqaW5wdXRzbG90 ID0gYWdnc3RhdGUtPnRtcGNvbnRleHQtPmVjeHRfb3V0ZXJ0dXBsZTsKLQlBZ2dTdGF0ZVBlckhh c2ggcGVyaGFzaCA9ICZhZ2dzdGF0ZS0+cGVyaGFzaFthZ2dzdGF0ZS0+Y3VycmVudF9zZXRdOwot CVR1cGxlVGFibGVTbG90ICpoYXNoc2xvdCA9IHBlcmhhc2gtPmhhc2hzbG90OwotCVR1cGxlSGFz aEVudHJ5RGF0YSAqZW50cnk7Ci0JYm9vbAkJaXNuZXc7Ci0JaW50CQkJaTsKKwlUdXBsZVRhYmxl U2xvdAkqaW5wdXRzbG90ID0gYWdnc3RhdGUtPnRtcGNvbnRleHQtPmVjeHRfb3V0ZXJ0dXBsZTsK KwlBZ2dTdGF0ZVBlckhhc2gJIHBlcmhhc2ggICA9ICZhZ2dzdGF0ZS0+cGVyaGFzaFthZ2dzdGF0 ZS0+Y3VycmVudF9zZXRdOworCVR1cGxlVGFibGVTbG90CSpoYXNoc2xvdCAgPSBwZXJoYXNoLT5o YXNoc2xvdDsKKwlpbnQJCQkJIGk7CiAKIAkvKiB0cmFuc2ZlciBqdXN0IHRoZSBuZWVkZWQgY29s dW1ucyBpbnRvIGhhc2hzbG90ICovCiAJc2xvdF9nZXRzb21lYXR0cnMoaW5wdXRzbG90LCBwZXJo YXNoLT5sYXJnZXN0R3JwQ29sSWR4KTsKQEAgLTE0ODQsMTQgKzE2NzgsMTg1IEBAIGxvb2t1cF9o YXNoX2VudHJ5KEFnZ1N0YXRlICphZ2dzdGF0ZSkKIAkJaGFzaHNsb3QtPnR0c19pc251bGxbaV0g PSBpbnB1dHNsb3QtPnR0c19pc251bGxbdmFyTnVtYmVyXTsKIAl9CiAJRXhlY1N0b3JlVmlydHVh bFR1cGxlKGhhc2hzbG90KTsKK30KKworLyoKKyAqIFJlY29tcGlsZSB0aGUgZXhwcmVzc2lvbnMg Zm9yIGFkdmFuY2luZyBhZ2dyZWdhdGVzIHdoaWxlIGhhc2hpbmcuIFRoaXMgaXMKKyAqIG5lY2Vz c2FyeSBmb3IgY2VydGFpbiBraW5kcyBvZiBzdGF0ZSBjaGFuZ2VzIHRoYXQgYWZmZWN0IHRoZSBy ZXN1bHRpbmcKKyAqIGV4cHJlc3Npb24uIEZvciBpbnN0YW5jZSwgY2hhbmdpbmcgYWdnc3RhdGUt Pmhhc2hfc3BpbGxlZCBvcgorICogYWdnc3RhdGUtPnNzLnBzLm91dGVyb3BzIHJlcXVpcmUgcmVj b21waWxhdGlvbi4KKyAqLworc3RhdGljIHZvaWQKK2hhc2hfcmVjb21waWxlX2V4cHJlc3Npb25z KEFnZ1N0YXRlICphZ2dzdGF0ZSkKK3sKKwlBZ2dTdGF0ZVBlclBoYXNlIHBoYXNlOworCisJQXNz ZXJ0KGFnZ3N0YXRlLT5hZ2dzdHJhdGVneSA9PSBBR0dfSEFTSEVEIHx8CisJCSAgIGFnZ3N0YXRl LT5hZ2dzdHJhdGVneSA9PSBBR0dfTUlYRUQpOworCisJaWYgKGFnZ3N0YXRlLT5hZ2dzdHJhdGVn eSA9PSBBR0dfSEFTSEVEKQorCQlwaGFzZSA9ICZhZ2dzdGF0ZS0+cGhhc2VzWzBdOworCWVsc2Ug LyogQUdHX01JWEVEICovCisJCXBoYXNlID0gJmFnZ3N0YXRlLT5waGFzZXNbMV07CisKKwlwaGFz ZS0+ZXZhbHRyYW5zID0gRXhlY0J1aWxkQWdnVHJhbnMoCisJCWFnZ3N0YXRlLCBwaGFzZSwKKwkJ YWdnc3RhdGUtPmFnZ3N0cmF0ZWd5ID09IEFHR19NSVhFRCA/IHRydWUgOiBmYWxzZSwgLyogZG9z b3J0ICovCisJCXRydWUsIC8qIGRvaGFzaCAqLworCQlhZ2dzdGF0ZS0+aGFzaF9zcGlsbGVkIC8q IHNwaWxsZWQgKi8pOworfQorCisvKgorICogQ2FsY3VsYXRlIHRoZSBoYXNoIHZhbHVlIGZvciBh IHR1cGxlLiBJdCdzIHVzZWZ1bCB0byBkbyB0aGlzIG91dHNpZGUgb2YgdGhlCisgKiBoYXNoIHRh YmxlIHNvIHRoYXQgd2UgY2FuIHJldXNlIHNhdmVkIGhhc2ggdmFsdWVzIHJhdGhlciB0aGFuIHJl Y29tcHV0aW5nLgorICovCitzdGF0aWMgdWludDMyCitjYWxjdWxhdGVfaGFzaChBZ2dTdGF0ZSAq YWdnc3RhdGUpCit7CisJQWdnU3RhdGVQZXJIYXNoCSBwZXJoYXNoICAgPSAmYWdnc3RhdGUtPnBl cmhhc2hbYWdnc3RhdGUtPmN1cnJlbnRfc2V0XTsKKwlUdXBsZUhhc2hUYWJsZQkgaGFzaHRhYmxl ID0gcGVyaGFzaC0+aGFzaHRhYmxlOworCU1lbW9yeUNvbnRleHQJIG9sZENvbnRleHQ7CisJdWlu dDMyCQkJIGhhc2g7CisKKwkvKiBzZXQgdXAgZGF0YSBuZWVkZWQgYnkgaGFzaCBhbmQgbWF0Y2gg ZnVuY3Rpb25zICovCisJaGFzaHRhYmxlLT5pbnB1dHNsb3QgPSBwZXJoYXNoLT5oYXNoc2xvdDsK KwloYXNodGFibGUtPmluX2hhc2hfZnVuY3MgPSBoYXNodGFibGUtPnRhYl9oYXNoX2Z1bmNzOwor CWhhc2h0YWJsZS0+Y3VyX2VxX2Z1bmMgPSBoYXNodGFibGUtPnRhYl9lcV9mdW5jOworCisJLyog TmVlZCB0byBydW4gdGhlIGhhc2ggZnVuY3Rpb25zIGluIHNob3J0LWxpdmVkIGNvbnRleHQgKi8K KwlvbGRDb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGhhc2h0YWJsZS0+dGVtcGN4dCk7 CisKKwloYXNoID0gVHVwbGVIYXNoVGFibGVIYXNoKGhhc2h0YWJsZS0+aGFzaHRhYiwgTlVMTCk7 CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkQ29udGV4dCk7CisKKwlyZXR1cm4gaGFzaDsK K30KKworLyoKKyAqIENob29zZSBhIHJlYXNvbmFibGUgbnVtYmVyIG9mIGJ1Y2tldHMgZm9yIHRo ZSBpbml0aWFsIGhhc2ggdGFibGUgc2l6ZS4KKyAqLworc3RhdGljIGxvbmcKK2hhc2hfY2hvb3Nl X251bV9idWNrZXRzKEFnZ1N0YXRlICphZ2dzdGF0ZSwgbG9uZyBuZ3JvdXBzLCBTaXplIG1lbW9y eSkKK3sKKwlsb25nCW1heF9uYnVja2V0czsKKwlpbnQJCWxvZzJfbmdyb3VwczsKKwlsb25nCW5i dWNrZXRzOworCisJbWF4X25idWNrZXRzID0gbWVtb3J5IC8gYWdnc3RhdGUtPmhhc2hlbnRyeXNp emU7CisKKwkvKgorCSAqIExvd2VzdCBwb3dlciBvZiB0d28gZ3JlYXRlciB0aGFuIG5ncm91cHMs IHdpdGhvdXQgZXhjZWVkaW5nCisJICogbWF4X25idWNrZXRzLgorCSAqLworCWZvciAobG9nMl9u Z3JvdXBzID0gMSwgbmJ1Y2tldHMgPSAyOworCQkgbmJ1Y2tldHMgPCBuZ3JvdXBzICYmIG5idWNr ZXRzIDwgbWF4X25idWNrZXRzOworCQkgbG9nMl9uZ3JvdXBzKyssIG5idWNrZXRzIDw8PSAxKTsK KworCWlmIChuYnVja2V0cyA+IG1heF9uYnVja2V0cyAmJiBuYnVja2V0cyA+IDIpCisJCW5idWNr ZXRzID4+PSAxOworCisJcmV0dXJuIG5idWNrZXRzOworfQorCisvKgorICogRGV0ZXJtaW5lIHRo ZSBudW1iZXIgb2YgcGFydGl0aW9ucyB0byBjcmVhdGUgd2hlbiBzcGlsbGluZy4KKyAqLworc3Rh dGljIGludAoraGFzaF9jaG9vc2VfbnVtX3NwaWxsX3BhcnRpdGlvbnModWludDY0IGlucHV0X2dy b3VwcywgZG91YmxlIGhhc2hlbnRyeXNpemUpCit7CisJU2l6ZQltZW1fbmVlZGVkOworCWludAkJ cGFydGl0aW9uX2xpbWl0OworCWludAkJbnBhcnRpdGlvbnM7CisKKwkvKgorCSAqIEF2b2lkIGNy ZWF0aW5nIHNvIG1hbnkgcGFydGl0aW9ucyB0aGF0IHRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIG9m IHRoZQorCSAqIG9wZW4gcGFydGl0aW9uIGZpbGVzIChlc3RpbWF0ZWQgYXQgQkxDS1NaIGZvciBi dWZmZXJpbmcpIGFyZSBncmVhdGVyCisJICogdGhhbiAxLzQgb2Ygd29ya19tZW0uCisJICovCisJ cGFydGl0aW9uX2xpbWl0ID0gKHdvcmtfbWVtICogMTAyNEwgKiAwLjI1KSAvIEJMQ0tTWjsKKwor CS8qIHBlc3NpbWlzdGljYWxseSBlc3RpbWF0ZSB0aGF0IGVhY2ggaW5wdXQgdHVwbGUgY3JlYXRl cyBhIG5ldyBncm91cCAqLworCW1lbV9uZWVkZWQgPSBIQVNIQUdHX1BBUlRJVElPTl9GQUNUT1Ig KiBpbnB1dF9ncm91cHMgKiBoYXNoZW50cnlzaXplOworCisJLyogbWFrZSBlbm91Z2ggcGFydGl0 aW9ucyBzbyB0aGF0IGVhY2ggb25lIGlzIGxpa2VseSB0byBmaXQgaW4gbWVtb3J5ICovCisJbnBh cnRpdGlvbnMgPSAxICsgKG1lbV9uZWVkZWQgLyAod29ya19tZW0gKiAxMDI0TCkpOworCisJaWYg KG5wYXJ0aXRpb25zID4gcGFydGl0aW9uX2xpbWl0KQorCQlucGFydGl0aW9ucyA9IHBhcnRpdGlv bl9saW1pdDsKKworCWlmIChucGFydGl0aW9ucyA8IEhBU0hBR0dfTUlOX1BBUlRJVElPTlMpCisJ CW5wYXJ0aXRpb25zID0gSEFTSEFHR19NSU5fUEFSVElUSU9OUzsKKwlpZiAobnBhcnRpdGlvbnMg PiBIQVNIQUdHX01BWF9QQVJUSVRJT05TKQorCQlucGFydGl0aW9ucyA9IEhBU0hBR0dfTUFYX1BB UlRJVElPTlM7CisKKwlyZXR1cm4gbnBhcnRpdGlvbnM7Cit9CisKKy8qCisgKiBGaW5kIG9yIGNy ZWF0ZSBhIGhhc2h0YWJsZSBlbnRyeSBmb3IgdGhlIHR1cGxlIGdyb3VwIGNvbnRhaW5pbmcgdGhl IGN1cnJlbnQKKyAqIHR1cGxlIChhbHJlYWR5IHNldCBpbiB0bXBjb250ZXh0J3Mgb3V0ZXJ0dXBs ZSBzbG90KSwgaW4gdGhlIGN1cnJlbnQgZ3JvdXBpbmcKKyAqIHNldCAod2hpY2ggdGhlIGNhbGxl ciBtdXN0IGhhdmUgc2VsZWN0ZWQgLSBub3RlIHRoYXQgaW5pdGlhbGl6ZV9hZ2dyZWdhdGUKKyAq IGRlcGVuZHMgb24gdGhpcykuCisgKgorICogV2hlbiBjYWxsZWQsIEN1cnJlbnRNZW1vcnlDb250 ZXh0IHNob3VsZCBiZSB0aGUgcGVyLXF1ZXJ5IGNvbnRleHQuCisgKgorICogSWYgdGhlIGhhc2gg dGFibGUgaXMgYXQgdGhlIG1lbW9yeSBsaW1pdCwgdGhlbiBvbmx5IGZpbmQgZXhpc3RpbmcgaGFz aHRhYmxlCisgKiBlbnRyaWVzOyBkb24ndCBjcmVhdGUgbmV3IG9uZXMuIElmIGEgdHVwbGUncyBn cm91cCBpcyBub3QgYWxyZWFkeSBwcmVzZW50CisgKiBpbiB0aGUgaGFzaCB0YWJsZSBmb3IgdGhl IGN1cnJlbnQgZ3JvdXBpbmcgc2V0LCByZXR1cm4gTlVMTCBhbmQgdGhlIGNhbGxlcgorICogd2ls bCBzcGlsbCBpdCB0byBkaXNrLgorICovCitzdGF0aWMgQWdnU3RhdGVQZXJHcm91cAorbG9va3Vw X2hhc2hfZW50cnkoQWdnU3RhdGUgKmFnZ3N0YXRlLCB1aW50MzIgaGFzaCkKK3sKKwlBZ2dTdGF0 ZVBlckhhc2ggcGVyaGFzaCA9ICZhZ2dzdGF0ZS0+cGVyaGFzaFthZ2dzdGF0ZS0+Y3VycmVudF9z ZXRdOworCVR1cGxlVGFibGVTbG90ICpoYXNoc2xvdCA9IHBlcmhhc2gtPmhhc2hzbG90OworCVR1 cGxlSGFzaEVudHJ5RGF0YSAqZW50cnk7CisJYm9vbAkJaXNuZXcgPSBmYWxzZTsKKwlib29sCSAg ICpwX2lzbmV3OworCisJLyogaWYgaGFzaCB0YWJsZSBhbHJlYWR5IHNwaWxsZWQsIGRvbid0IGNy ZWF0ZSBuZXcgZW50cmllcyAqLworCXBfaXNuZXcgPSBhZ2dzdGF0ZS0+aGFzaF9ub19uZXdfZ3Jv dXBzID8gTlVMTCA6ICZpc25ldzsKIAogCS8qIGZpbmQgb3IgY3JlYXRlIHRoZSBoYXNodGFibGUg ZW50cnkgdXNpbmcgdGhlIGZpbHRlcmVkIHR1cGxlICovCi0JZW50cnkgPSBMb29rdXBUdXBsZUhh c2hFbnRyeShwZXJoYXNoLT5oYXNodGFibGUsIGhhc2hzbG90LCAmaXNuZXcpOworCWVudHJ5ID0g TG9va3VwVHVwbGVIYXNoRW50cnlIYXNoKHBlcmhhc2gtPmhhc2h0YWJsZSwgaGFzaHNsb3QsIHBf aXNuZXcsCisJCQkJCQkJCQkgaGFzaCk7CisKKwlpZiAoZW50cnkgPT0gTlVMTCkKKwkJcmV0dXJu IE5VTEw7CiAKIAlpZiAoaXNuZXcpCiAJewotCQlBZ2dTdGF0ZVBlckdyb3VwIHBlcmdyb3VwOwot CQlpbnQJCQl0cmFuc25vOworCQlBZ2dTdGF0ZVBlckdyb3VwCXBlcmdyb3VwOworCQlpbnQJCQkJ CXRyYW5zbm87CisKKwkJYWdnc3RhdGUtPmhhc2hfbmdyb3Vwc19jdXJyZW50Kys7CisKKwkJYWdn c3RhdGUtPmhhc2hfbWVtX2N1cnJlbnQgPSBNZW1vcnlDb250ZXh0TWVtQWxsb2NhdGVkKAorCQkJ YWdnc3RhdGUtPmhhc2hjb250ZXh0LT5lY3h0X3Blcl90dXBsZV9tZW1vcnksIHRydWUpOworCisJ CWlmIChhZ2dzdGF0ZS0+aGFzaF9tZW1fY3VycmVudCA+IGFnZ3N0YXRlLT5oYXNoX21lbV9wZWFr KQorCQkJYWdnc3RhdGUtPmhhc2hfbWVtX3BlYWsgPSBhZ2dzdGF0ZS0+aGFzaF9tZW1fY3VycmVu dDsKKworCQkvKgorCQkgKiBDaGVjayB3aGV0aGVyIHdlIG5lZWQgdG8gc3BpbGwuIEZvciBzbWFs bCB2YWx1ZXMgb2Ygd29ya19tZW0sIHRoZQorCQkgKiBlbXB0eSBoYXNoIHRhYmxlcyBtaWdodCBl eGNlZWQgaXQ7IHNvIGRvbid0IHNwaWxsIHVubGVzcyB0aGVyZSdzIGF0CisJCSAqIGxlYXN0IG9u ZSBncm91cCBpbiB0aGUgaGFzaCB0YWJsZS4KKwkJICovCisJCWlmIChhZ2dzdGF0ZS0+aGFzaF9u Z3JvdXBzX2N1cnJlbnQgPiAwICYmCisJCQkoYWdnc3RhdGUtPmhhc2hfbWVtX2N1cnJlbnQgICAg ID4gYWdnc3RhdGUtPmhhc2hfbWVtX2xpbWl0IHx8CisJCQkgYWdnc3RhdGUtPmhhc2hfbmdyb3Vw c19jdXJyZW50ID4gYWdnc3RhdGUtPmhhc2hfbmdyb3Vwc19saW1pdCkpCisJCXsKKwkJCWFnZ3N0 YXRlLT5oYXNoX25vX25ld19ncm91cHMgPSB0cnVlOworCQkJaWYgKCFhZ2dzdGF0ZS0+aGFzaF9z cGlsbGVkKQorCQkJeworCQkJCWFnZ3N0YXRlLT5oYXNoX3NwaWxsZWQgPSB0cnVlOworCQkJCWFn Z3N0YXRlLT5oYXNoX3NwaWxscyA9IHBhbGxvYzAoCisJCQkJCXNpemVvZihIYXNoQWdnU3BpbGwp ICogYWdnc3RhdGUtPm51bV9oYXNoZXMpOworCisJCQkJaGFzaF9yZWNvbXBpbGVfZXhwcmVzc2lv bnMoYWdnc3RhdGUpOworCQkJfQorCQl9CiAKIAkJcGVyZ3JvdXAgPSAoQWdnU3RhdGVQZXJHcm91 cCkKIAkJCU1lbW9yeUNvbnRleHRBbGxvYyhwZXJoYXNoLT5oYXNodGFibGUtPnRhYmxlY3h0LApA QCAtMTUxMSw3ICsxODc2LDcgQEAgbG9va3VwX2hhc2hfZW50cnkoQWdnU3RhdGUgKmFnZ3N0YXRl KQogCQl9CiAJfQogCi0JcmV0dXJuIGVudHJ5OworCXJldHVybiBlbnRyeS0+YWRkaXRpb25hbDsK IH0KIAogLyoKQEAgLTE1MTksMTggKzE4ODQsNzQgQEAgbG9va3VwX2hhc2hfZW50cnkoQWdnU3Rh dGUgKmFnZ3N0YXRlKQogICogcmV0dXJuaW5nIGFuIGFycmF5IG9mIHBlcmdyb3VwIHBvaW50ZXJz IHN1aXRhYmxlIGZvciBhZHZhbmNlX2FnZ3JlZ2F0ZXMuCiAgKgogICogQmUgYXdhcmUgdGhhdCBs b29rdXBfaGFzaF9lbnRyeSBjYW4gcmVzZXQgdGhlIHRtcGNvbnRleHQuCisgKgorICogU29tZSBl bnRyaWVzIG1heSBiZSBsZWZ0IE5VTEwgaWYgd2UgaGF2ZSByZWFjaGVkIHRoZSBsaW1pdCBhbmQg aGF2ZSBiZWd1bgorICogdG8gc3BpbGwuIFRoZSBzYW1lIHR1cGxlIHdpbGwgYmVsb25nIHRvIGRp ZmZlcmVudCBncm91cHMgZm9yIGVhY2ggc2V0LCBzbworICogbWF5IG1hdGNoIGEgZ3JvdXAgYWxy ZWFkeSBpbiBtZW1vcnkgZm9yIG9uZSBzZXQgYW5kIG1hdGNoIGEgZ3JvdXAgbm90IGluCisgKiBt ZW1vcnkgZm9yIGFub3RoZXIgc2V0LiBJZiB3ZSBoYXZlIGJlZ3VuIHRvIHNwaWxsIGFuZCBhIHR1 cGxlIGRvZXNuJ3QgbWF0Y2gKKyAqIGEgZ3JvdXAgaW4gbWVtb3J5IGZvciBhIHBhcnRpY3VsYXIg c2V0LCBpdCB3aWxsIGJlIHNwaWxsZWQuCisgKgorICogTkI6IEl0J3MgcG9zc2libGUgdG8gc3Bp bGwgdGhlIHNhbWUgdHVwbGUgZm9yIHNldmVyYWwgZGlmZmVyZW50IGdyb3VwaW5nCisgKiBzZXRz LiBUaGlzIG1heSBzZWVtIHdhc3RlZnVsLCBidXQgaXQncyBhY3R1YWxseSBhIHRyYWRlLW9mZjog aWYgd2Ugc3BpbGwKKyAqIHRoZSB0dXBsZSBtdWx0aXBsZSB0aW1lcyBmb3IgbXVsdGlwbGUgZ3Jv dXBpbmcgc2V0cywgaXQgY2FuIGJlIHBhcnRpdGlvbmVkCisgKiBmb3IgZWFjaCBncm91cGluZyBz ZXQsIG1ha2luZyB0aGUgcmVmaWxsaW5nIG9mIHRoZSBoYXNoIHRhYmxlIHZlcnkKKyAqIGVmZmlj aWVudC4KICAqLwogc3RhdGljIHZvaWQKIGxvb2t1cF9oYXNoX2VudHJpZXMoQWdnU3RhdGUgKmFn Z3N0YXRlKQogewotCWludAkJCW51bUhhc2hlcyA9IGFnZ3N0YXRlLT5udW1faGFzaGVzOwogCUFn Z1N0YXRlUGVyR3JvdXAgKnBlcmdyb3VwID0gYWdnc3RhdGUtPmhhc2hfcGVyZ3JvdXA7CiAJaW50 CQkJc2V0bm87CiAKLQlmb3IgKHNldG5vID0gMDsgc2V0bm8gPCBudW1IYXNoZXM7IHNldG5vKysp CisJZm9yIChzZXRubyA9IDA7IHNldG5vIDwgYWdnc3RhdGUtPm51bV9oYXNoZXM7IHNldG5vKysp CiAJeworCQl1aW50MzIJCQloYXNoOworCiAJCXNlbGVjdF9jdXJyZW50X3NldChhZ2dzdGF0ZSwg c2V0bm8sIHRydWUpOwotCQlwZXJncm91cFtzZXRub10gPSBsb29rdXBfaGFzaF9lbnRyeShhZ2dz dGF0ZSktPmFkZGl0aW9uYWw7CisJCXByZXBhcmVfaGFzaF9zbG90KGFnZ3N0YXRlKTsKKwkJaGFz aCA9IGNhbGN1bGF0ZV9oYXNoKGFnZ3N0YXRlKTsKKwkJcGVyZ3JvdXBbc2V0bm9dID0gbG9va3Vw X2hhc2hfZW50cnkoYWdnc3RhdGUsIGhhc2gpOworCisJCS8qIGNoZWNrIHRvIHNlZSBpZiB3ZSBu ZWVkIHRvIHNwaWxsIHRoZSB0dXBsZSBmb3IgdGhpcyBncm91cGluZyBzZXQgKi8KKwkJaWYgKHBl cmdyb3VwW3NldG5vXSA9PSBOVUxMKQorCQl7CisJCQlBZ2dTdGF0ZVBlckhhc2ggcGVyaGFzaCA9 ICZhZ2dzdGF0ZS0+cGVyaGFzaFtzZXRub107CisJCQlUdXBsZVRhYmxlU2xvdCAqaW5wdXRzbG90 ID0gYWdnc3RhdGUtPnRtcGNvbnRleHQtPmVjeHRfb3V0ZXJ0dXBsZTsKKwkJCVR1cGxlVGFibGVT bG90ICpzcGlsbHNsb3QgPSBhZ2dzdGF0ZS0+aGFzaF9zcGlsbF9zbG90OworCQkJSGFzaEFnZ1Nw aWxsICAgKnNwaWxsID0gJmFnZ3N0YXRlLT5oYXNoX3NwaWxsc1tzZXRub107CisJCQlpbnQJCQkJ aWR4OworCisJCQlpZiAoc3BpbGwtPnBhcnRpdGlvbnMgPT0gTlVMTCkKKwkJCQloYXNoX3NwaWxs X2luaXQoc3BpbGwsIDAsIHBlcmhhc2gtPmFnZ25vZGUtPm51bUdyb3VwcywKKwkJCQkJCQkJYWdn c3RhdGUtPmhhc2hlbnRyeXNpemUpOworCisJCQkvKgorCQkJICogQ29weSBvbmx5IG5lY2Vzc2Fy eSBhdHRyaWJ1dGVzIHRvIHNwaWxsIHNsb3QgYmVmb3JlIHdyaXRpbmcgdG8KKwkJCSAqIGRpc2su CisJCQkgKi8KKwkJCUV4ZWNDbGVhclR1cGxlKHNwaWxsc2xvdCk7CisJCQltZW1zZXQoc3BpbGxz bG90LT50dHNfaXNudWxsLCB0cnVlLAorCQkJCSAgIHNwaWxsc2xvdC0+dHRzX3R1cGxlRGVzY3Jp cHRvci0+bmF0dHMpOworCisJCQkvKiBkZXNlcmlhbGl6ZSBuZWVkZWQgYXR0cmlidXRlcyAqLwor CQkJaWYgKHBlcmhhc2gtPm51bU5lZWRlZENvbHNJbnB1dCA+IDApCisJCQl7CisJCQkJaW50IG1h eE5lZWRlZEF0dHJJZHggPSBwZXJoYXNoLT5udW1OZWVkZWRDb2xzSW5wdXQgLSAxOworCQkJCUF0 dHJOdW1iZXIgbWF4TmVlZGVkQXR0ciA9CisJCQkJCXBlcmhhc2gtPmFsbE5lZWRlZENvbHNJbnB1 dFttYXhOZWVkZWRBdHRySWR4XTsKKwkJCQlzbG90X2dldHNvbWVhdHRycyhpbnB1dHNsb3QsIG1h eE5lZWRlZEF0dHIpOworCQkJfQorCisJCQlmb3IgKGlkeCA9IDA7IGlkeCA8IHBlcmhhc2gtPm51 bU5lZWRlZENvbHNJbnB1dDsgaWR4KyspCisJCQl7CisJCQkJQXR0ck51bWJlciBhdHQgPSBwZXJo YXNoLT5hbGxOZWVkZWRDb2xzSW5wdXRbaWR4XTsKKwkJCQlzcGlsbHNsb3QtPnR0c192YWx1ZXNb YXR0LTFdID0gaW5wdXRzbG90LT50dHNfdmFsdWVzW2F0dC0xXTsKKwkJCQlzcGlsbHNsb3QtPnR0 c19pc251bGxbYXR0LTFdID0gaW5wdXRzbG90LT50dHNfaXNudWxsW2F0dC0xXTsKKwkJCX0KKwor CQkJRXhlY1N0b3JlVmlydHVhbFR1cGxlKHNwaWxsc2xvdCk7CisJCQlhZ2dzdGF0ZS0+aGFzaF9k aXNrX3VzZWQgKz0gaGFzaF9zcGlsbF90dXBsZShzcGlsbCwgMCwgc3BpbGxzbG90LCBoYXNoKTsK KwkJfQogCX0KIH0KIApAQCAtMTg1Myw2ICsyMjc0LDEyIEBAIGFnZ19yZXRyaWV2ZV9kaXJlY3Qo QWdnU3RhdGUgKmFnZ3N0YXRlKQogCQkJCQlpZiAoVHVwSXNOdWxsKG91dGVyc2xvdCkpCiAJCQkJ CXsKIAkJCQkJCS8qIG5vIG1vcmUgb3V0ZXItcGxhbiB0dXBsZXMgYXZhaWxhYmxlICovCisKKwkJ CQkJCS8qIGlmIHdlIGJ1aWx0IGhhc2ggdGFibGVzLCBmaW5hbGl6ZSBhbnkgc3BpbGxzICovCisJ CQkJCQlpZiAoYWdnc3RhdGUtPmFnZ3N0cmF0ZWd5ID09IEFHR19NSVhFRCAmJgorCQkJCQkJCWFn Z3N0YXRlLT5jdXJyZW50X3BoYXNlID09IDEpCisJCQkJCQkJaGFzaF9maW5pc2hfaW5pdGlhbF9z cGlsbHMoYWdnc3RhdGUpOworCiAJCQkJCQlpZiAoaGFzR3JvdXBpbmdTZXRzKQogCQkJCQkJewog CQkJCQkJCWFnZ3N0YXRlLT5pbnB1dF9kb25lID0gdHJ1ZTsKQEAgLTE5NTUsNiArMjM4Miw5IEBA IGFnZ19maWxsX2hhc2hfdGFibGUoQWdnU3RhdGUgKmFnZ3N0YXRlKQogCQlSZXNldEV4cHJDb250 ZXh0KGFnZ3N0YXRlLT50bXBjb250ZXh0KTsKIAl9CiAKKwkvKiBmaW5hbGl6ZSBzcGlsbHMsIGlm IGFueSAqLworCWhhc2hfZmluaXNoX2luaXRpYWxfc3BpbGxzKGFnZ3N0YXRlKTsKKwogCWFnZ3N0 YXRlLT50YWJsZV9maWxsZWQgPSB0cnVlOwogCS8qIEluaXRpYWxpemUgdG8gd2FsayB0aGUgZmly c3QgaGFzaCB0YWJsZSAqLwogCXNlbGVjdF9jdXJyZW50X3NldChhZ2dzdGF0ZSwgMCwgdHJ1ZSk7 CkBAIC0xOTYyLDExICsyMzkyLDE3NSBAQCBhZ2dfZmlsbF9oYXNoX3RhYmxlKEFnZ1N0YXRlICph Z2dzdGF0ZSkKIAkJCQkJCSAgICZhZ2dzdGF0ZS0+cGVyaGFzaFswXS5oYXNoaXRlcik7CiB9CiAK Ky8qCisgKiBJZiBhbnkgZGF0YSB3YXMgc3BpbGxlZCBkdXJpbmcgaGFzaCBhZ2dyZWdhdGlvbiwg cmVzZXQgdGhlIGhhc2ggdGFibGUgYW5kCisgKiByZXByb2Nlc3Mgb25lIGJhdGNoIG9mIHNwaWxs ZWQgZGF0YS4gQWZ0ZXIgcmVwcm9jZXNzaW5nIGEgYmF0Y2gsIHRoZSBoYXNoCisgKiB0YWJsZSB3 aWxsIGFnYWluIGNvbnRhaW4gZGF0YSwgcmVhZHkgdG8gYmUgY29uc3VtZWQgYnkKKyAqIGFnZ19y ZXRyaWV2ZV9oYXNoX3RhYmxlX2luX21lbW9yeSgpLgorICoKKyAqIFNob3VsZCBvbmx5IGJlIGNh bGxlZCBhZnRlciBhbGwgaW4gbWVtb3J5IGhhc2ggdGFibGUgZW50cmllcyBoYXZlIGJlZW4KKyAq IGNvbnN1bWVkLgorICoKKyAqIFJldHVybiBmYWxzZSB3aGVuIGlucHV0IGlzIGV4aGF1c3RlZCBh bmQgdGhlcmUncyBubyBtb3JlIHdvcmsgdG8gYmUgZG9uZTsKKyAqIG90aGVyd2lzZSByZXR1cm4g dHJ1ZS4KKyAqLworc3RhdGljIGJvb2wKK2FnZ19yZWZpbGxfaGFzaF90YWJsZShBZ2dTdGF0ZSAq YWdnc3RhdGUpCit7CisJSGFzaEFnZ0JhdGNoCSpiYXRjaDsKKworCWlmIChhZ2dzdGF0ZS0+aGFz aF9iYXRjaGVzID09IE5JTCkKKwkJcmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBFYWNoIHNwaWxs IGZpbGUgY29udGFpbnMgc3BpbGxlZCBkYXRhIGZvciBvbmx5IGEgc2luZ2xlIGdyb3VwaW5nCisJ ICogc2V0LiBXZSB3YW50IHRvIGlnbm9yZSBhbGwgb3RoZXJzLCB3aGljaCBpcyBkb25lIGJ5IHNl dHRpbmcgdGhlIG90aGVyCisJICogcGVyZ3JvdXBzIHRvIE5VTEwuCisJICovCisJbWVtc2V0KGFn Z3N0YXRlLT5hbGxfcGVyZ3JvdXBzLCAwLAorCQkgICBzaXplb2YoQWdnU3RhdGVQZXJHcm91cCkg KgorCQkgICAoYWdnc3RhdGUtPm1heHNldHMgKyBhZ2dzdGF0ZS0+bnVtX2hhc2hlcykpOworCisJ YmF0Y2ggPSBsaW5pdGlhbChhZ2dzdGF0ZS0+aGFzaF9iYXRjaGVzKTsKKwlhZ2dzdGF0ZS0+aGFz aF9iYXRjaGVzID0gbGlzdF9kZWxldGVfZmlyc3QoYWdnc3RhdGUtPmhhc2hfYmF0Y2hlcyk7CisK KwkvKgorCSAqIEZyZWUgbWVtb3J5IGFuZCByZWJ1aWxkIGEgc2luZ2xlIGhhc2ggdGFibGUgZm9y IHRoaXMgYmF0Y2gncyBncm91cGluZworCSAqIHNldC4KKwkgKi8KKwlSZVNjYW5FeHByQ29udGV4 dChhZ2dzdGF0ZS0+aGFzaGNvbnRleHQpOworCisJLyogZXN0aW1hdGUgdGhlIG51bWJlciBvZiBn cm91cHMgdG8gYmUgdGhlIG51bWJlciBvZiBpbnB1dCB0dXBsZXMgKi8KKwlidWlsZF9oYXNoX3Rh YmxlKGFnZ3N0YXRlLCBiYXRjaC0+c2V0bm8sIGJhdGNoLT5pbnB1dF90dXBsZXMpOworCisJQXNz ZXJ0KGFnZ3N0YXRlLT5jdXJyZW50X3BoYXNlID09IDApOworCisJaWYgKGFnZ3N0YXRlLT5waGFz ZS0+YWdnc3RyYXRlZ3kgPT0gQUdHX01JWEVEKQorCXsKKwkJYWdnc3RhdGUtPmN1cnJlbnRfcGhh c2UgPSAxOworCQlhZ2dzdGF0ZS0+cGhhc2UgPSAmYWdnc3RhdGUtPnBoYXNlc1thZ2dzdGF0ZS0+ Y3VycmVudF9waGFzZV07CisJfQorCisJLyoKKwkgKiBUaGUgZmlyc3QgcGFzcyAoYWdnX2ZpbGxf aGFzaF90YWJsZSkgcmVhZHMgd2hhdGV2ZXIga2luZCBvZiBzbG90IGNvbWVzCisJICogZnJvbSB0 aGUgb3V0ZXIgcGxhbiwgYW5kIGNvbnNpZGVycyB0aGUgc2xvdCBmaXhlZC4gQnV0IHNwaWxsZWQg dHVwbGVzCisJICogYXJlIGFsd2F5cyBNaW5pbWFsVHVwbGVzLCBzbyBpZiB0aGF0J3MgZGlmZmVy ZW50IGZyb20gdGhlIG91dGVyIHBsYW4gd2UKKwkgKiBuZWVkIHRvIGNoYW5nZSBpdCBhbmQgcmVj b21waWxlIHRoZSBhZ2dyZWdhdGUgZXhwcmVzc2lvbnMuCisJICovCisJaWYgKGFnZ3N0YXRlLT5z cy5wcy5vdXRlcm9wcyAhPSAmVFRTT3BzTWluaW1hbFR1cGxlKQorCXsKKwkJYWdnc3RhdGUtPnNz LnBzLm91dGVyb3BzID0gJlRUU09wc01pbmltYWxUdXBsZTsKKwkJaGFzaF9yZWNvbXBpbGVfZXhw cmVzc2lvbnMoYWdnc3RhdGUpOworCX0KKworCWZvciAoOzspIHsKKwkJVHVwbGVUYWJsZVNsb3QJ KnNsb3QgPSBhZ2dzdGF0ZS0+aGFzaF9zcGlsbF9zbG90OworCQlNaW5pbWFsVHVwbGUJIHR1cGxl OworCQl1aW50MzIJCQkgaGFzaDsKKworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCXR1 cGxlID0gaGFzaF9yZWFkX3NwaWxsZWQoYmF0Y2gtPmlucHV0X2ZpbGUsICZoYXNoKTsKKwkJaWYg KHR1cGxlID09IE5VTEwpCisJCQlicmVhazsKKworCQlFeGVjU3RvcmVNaW5pbWFsVHVwbGUodHVw bGUsIHNsb3QsIHRydWUpOworCQlhZ2dzdGF0ZS0+dG1wY29udGV4dC0+ZWN4dF9vdXRlcnR1cGxl ID0gc2xvdDsKKworCQlzZWxlY3RfY3VycmVudF9zZXQoYWdnc3RhdGUsIGJhdGNoLT5zZXRubywg dHJ1ZSk7CisJCXByZXBhcmVfaGFzaF9zbG90KGFnZ3N0YXRlKTsKKwkJYWdnc3RhdGUtPmhhc2hf cGVyZ3JvdXBbYmF0Y2gtPnNldG5vXSA9IGxvb2t1cF9oYXNoX2VudHJ5KGFnZ3N0YXRlLCBoYXNo KTsKKworCQkvKiBpZiB0aGVyZSdzIG5vIG1lbW9yeSBmb3IgYSBuZXcgZ3JvdXAsIHNwaWxsICov CisJCWlmIChhZ2dzdGF0ZS0+aGFzaF9wZXJncm91cFtiYXRjaC0+c2V0bm9dID09IE5VTEwpCisJ CXsKKwkJCWlmIChiYXRjaC0+c3BpbGwucGFydGl0aW9ucyA9PSBOVUxMKQorCQkJeworCQkJCS8q CisJCQkJICogRXN0aW1hdGUgdGhlIG51bWJlciBvZiBncm91cHMgZm9yIHRoaXMgYmF0Y2ggYXMg dGhlIHRvdGFsCisJCQkJICogbnVtYmVyIG9mIHR1cGxlcyBpbiBpdHMgaW5wdXQgZmlsZS4gQWx0 aG91Z2ggdGhhdCdzIGEgd29yc3QKKwkJCQkgKiBjYXNlLCBpdCdzIG5vdCBiYWQgaGVyZSBmb3Ig dHdvIHJlYXNvbnM6ICgxKSBvdmVyZXN0aW1hdGluZworCQkJCSAqIGlzIGJldHRlciB0aGFuIHVu ZGVyZXN0aW1hdGluZzsgYW5kICgyKSB3ZSd2ZSBhbHJlYWR5CisJCQkJICogc2Nhbm5lZCB0aGUg cmVsYXRpb24gb25jZSwgc28gaXQncyBsaWtlbHkgdGhhdCB3ZSd2ZQorCQkJCSAqIGFscmVhZHkg ZmluYWxpemVkIG1hbnkgb2YgdGhlIGNvbW1vbiB2YWx1ZXMuCisJCQkJICovCisJCQkJaGFzaF9z cGlsbF9pbml0KCZiYXRjaC0+c3BpbGwsIGJhdGNoLT5pbnB1dF9iaXRzLAorCQkJCQkJCQliYXRj aC0+aW5wdXRfdHVwbGVzLCBhZ2dzdGF0ZS0+aGFzaGVudHJ5c2l6ZSk7CisJCQl9CisKKwkJCWFn Z3N0YXRlLT5oYXNoX2Rpc2tfdXNlZCArPSBoYXNoX3NwaWxsX3R1cGxlKAorCQkJCSZiYXRjaC0+ c3BpbGwsIGJhdGNoLT5pbnB1dF9iaXRzLCBzbG90LCBoYXNoKTsKKwkJfQorCisJCS8qIEFkdmFu Y2UgdGhlIGFnZ3JlZ2F0ZXMgKG9yIGNvbWJpbmUgZnVuY3Rpb25zKSAqLworCQlhZHZhbmNlX2Fn Z3JlZ2F0ZXMoYWdnc3RhdGUpOworCisJCS8qCisJCSAqIFJlc2V0IHBlci1pbnB1dC10dXBsZSBj b250ZXh0IGFmdGVyIGVhY2ggdHVwbGUsIGJ1dCBub3RlIHRoYXQgdGhlCisJCSAqIGhhc2ggbG9v a3VwcyBkbyB0aGlzIHRvbworCQkgKi8KKwkJUmVzZXRFeHByQ29udGV4dChhZ2dzdGF0ZS0+dG1w Y29udGV4dCk7CisJfQorCisJQnVmRmlsZUNsb3NlKGJhdGNoLT5pbnB1dF9maWxlKTsKKworCWFn Z3N0YXRlLT5jdXJyZW50X3BoYXNlID0gMDsKKwlhZ2dzdGF0ZS0+cGhhc2UgPSAmYWdnc3RhdGUt PnBoYXNlc1thZ2dzdGF0ZS0+Y3VycmVudF9waGFzZV07CisKKwkvKiB1cGRhdGUgaGFzaGVudHJ5 c2l6ZSBlc3RpbWF0ZSBiYXNlZCBvbiBjb250ZW50cyAqLworCWlmIChhZ2dzdGF0ZS0+aGFzaF9u Z3JvdXBzX2N1cnJlbnQgPiAwKQorCXsKKwkJYWdnc3RhdGUtPmhhc2hlbnRyeXNpemUgPSAoZG91 YmxlKWFnZ3N0YXRlLT5oYXNoX21lbV9jdXJyZW50IC8KKwkJCShkb3VibGUpYWdnc3RhdGUtPmhh c2hfbmdyb3Vwc19jdXJyZW50OworCX0KKworCWhhc2hfc3BpbGxfZmluaXNoKGFnZ3N0YXRlLCAm YmF0Y2gtPnNwaWxsLCBiYXRjaC0+c2V0bm8sCisJCQkJCSAgYmF0Y2gtPmlucHV0X2JpdHMpOwor CisJcGZyZWUoYmF0Y2gpOworCisJLyogSW5pdGlhbGl6ZSB0byB3YWxrIHRoZSBmaXJzdCBoYXNo IHRhYmxlICovCisJc2VsZWN0X2N1cnJlbnRfc2V0KGFnZ3N0YXRlLCAwLCB0cnVlKTsKKwlSZXNl dFR1cGxlSGFzaEl0ZXJhdG9yKGFnZ3N0YXRlLT5wZXJoYXNoWzBdLmhhc2h0YWJsZSwKKwkJCQkJ CSAgICZhZ2dzdGF0ZS0+cGVyaGFzaFswXS5oYXNoaXRlcik7CisKKwlyZXR1cm4gdHJ1ZTsKK30K KwogLyoKICAqIEV4ZWNBZ2cgZm9yIGhhc2hlZCBjYXNlOiByZXRyaWV2aW5nIGdyb3VwcyBmcm9t IGhhc2ggdGFibGUKKyAqCisgKiBBZnRlciBleGhhdXN0aW5nIGluLW1lbW9yeSB0dXBsZXMsIGFs c28gdHJ5IHJlZmlsbGluZyB0aGUgaGFzaCB0YWJsZSB1c2luZworICogcHJldmlvdXNseS1zcGls bGVkIHR1cGxlcy4gT25seSByZXR1cm5zIE5VTEwgYWZ0ZXIgYWxsIGluLW1lbW9yeSBhbmQKKyAq IHNwaWxsZWQgdHVwbGVzIGFyZSBleGhhdXN0ZWQuCiAgKi8KIHN0YXRpYyBUdXBsZVRhYmxlU2xv dCAqCiBhZ2dfcmV0cmlldmVfaGFzaF90YWJsZShBZ2dTdGF0ZSAqYWdnc3RhdGUpCit7CisJVHVw bGVUYWJsZVNsb3QgKnJlc3VsdCA9IE5VTEw7CisKKwl3aGlsZSAocmVzdWx0ID09IE5VTEwpCisJ eworCQlyZXN1bHQgPSBhZ2dfcmV0cmlldmVfaGFzaF90YWJsZV9pbl9tZW1vcnkoYWdnc3RhdGUp OworCQlpZiAocmVzdWx0ID09IE5VTEwpCisJCXsKKwkJCWlmICghYWdnX3JlZmlsbF9oYXNoX3Rh YmxlKGFnZ3N0YXRlKSkKKwkJCXsKKwkJCQlhZ2dzdGF0ZS0+YWdnX2RvbmUgPSB0cnVlOworCQkJ CWJyZWFrOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFJl dHJpZXZlIHRoZSBncm91cHMgZnJvbSB0aGUgaW4tbWVtb3J5IGhhc2ggdGFibGVzIHdpdGhvdXQg Y29uc2lkZXJpbmcgYW55CisgKiBzcGlsbGVkIHR1cGxlcy4KKyAqLworc3RhdGljIFR1cGxlVGFi bGVTbG90ICoKK2FnZ19yZXRyaWV2ZV9oYXNoX3RhYmxlX2luX21lbW9yeShBZ2dTdGF0ZSAqYWdn c3RhdGUpCiB7CiAJRXhwckNvbnRleHQgKmVjb250ZXh0OwogCUFnZ1N0YXRlUGVyQWdnIHBlcmFn ZzsKQEAgLTE5OTUsNyArMjU4OSw3IEBAIGFnZ19yZXRyaWV2ZV9oYXNoX3RhYmxlKEFnZ1N0YXRl ICphZ2dzdGF0ZSkKIAkgKiBXZSBsb29wIHJldHJpZXZpbmcgZ3JvdXBzIHVudGlsIHdlIGZpbmQg b25lIHNhdGlzZnlpbmcKIAkgKiBhZ2dzdGF0ZS0+c3MucHMucXVhbAogCSAqLwotCXdoaWxlICgh YWdnc3RhdGUtPmFnZ19kb25lKQorCWZvciAoOzspCiAJewogCQlUdXBsZVRhYmxlU2xvdCAqaGFz aHNsb3QgPSBwZXJoYXNoLT5oYXNoc2xvdDsKIAkJaW50CQkJaTsKQEAgLTIwMjYsOCArMjYyMCw2 IEBAIGFnZ19yZXRyaWV2ZV9oYXNoX3RhYmxlKEFnZ1N0YXRlICphZ2dzdGF0ZSkKIAkJCX0KIAkJ CWVsc2UKIAkJCXsKLQkJCQkvKiBObyBtb3JlIGhhc2h0YWJsZXMsIHNvIGRvbmUgKi8KLQkJCQlh Z2dzdGF0ZS0+YWdnX2RvbmUgPSB0cnVlOwogCQkJCXJldHVybiBOVUxMOwogCQkJfQogCQl9CkBA IC0yMDg0LDYgKzI2NzYsMjgxIEBAIGFnZ19yZXRyaWV2ZV9oYXNoX3RhYmxlKEFnZ1N0YXRlICph Z2dzdGF0ZSkKIAlyZXR1cm4gTlVMTDsKIH0KIAorLyoKKyAqIGhhc2hfc3BpbGxfaW5pdAorICoK KyAqIENhbGxlZCBhZnRlciB3ZSBkZXRlcm1pbmVkIHRoYXQgc3BpbGxpbmcgaXMgbmVjZXNzYXJ5 LiBDaG9vc2VzIHRoZSBudW1iZXIKKyAqIG9mIHBhcnRpdGlvbnMgdG8gY3JlYXRlLCBhbmQgaW5p dGlhbGl6ZXMgdGhlbS4KKyAqLworc3RhdGljIHZvaWQKK2hhc2hfc3BpbGxfaW5pdChIYXNoQWdn U3BpbGwgKnNwaWxsLCBpbnQgaW5wdXRfYml0cywgdWludDY0IGlucHV0X2dyb3VwcywKKwkJCQlk b3VibGUgaGFzaGVudHJ5c2l6ZSkKK3sKKwlpbnQgICAgIG5wYXJ0aXRpb25zOworCWludCAgICAg cGFydGl0aW9uX2JpdHM7CisKKwlucGFydGl0aW9ucyA9IGhhc2hfY2hvb3NlX251bV9zcGlsbF9w YXJ0aXRpb25zKGlucHV0X2dyb3VwcywKKwkJCQkJCQkJCQkJCSAgIGhhc2hlbnRyeXNpemUpOwor CXBhcnRpdGlvbl9iaXRzID0gbXlfbG9nMihucGFydGl0aW9ucyk7CisKKwkvKiBtYWtlIHN1cmUg dGhhdCB3ZSBkb24ndCBleGhhdXN0IHRoZSBoYXNoIGJpdHMgKi8KKwlpZiAocGFydGl0aW9uX2Jp dHMgKyBpbnB1dF9iaXRzID49IDMyKQorCQlwYXJ0aXRpb25fYml0cyA9IDMyIC0gaW5wdXRfYml0 czsKKworCS8qIG51bWJlciBvZiBwYXJ0aXRpb25zIHdpbGwgYmUgYSBwb3dlciBvZiB0d28gKi8K KwlucGFydGl0aW9ucyA9IDFMIDw8IHBhcnRpdGlvbl9iaXRzOworCisJc3BpbGwtPnBhcnRpdGlv bl9iaXRzID0gcGFydGl0aW9uX2JpdHM7CisJc3BpbGwtPm5fcGFydGl0aW9ucyA9IG5wYXJ0aXRp b25zOworCXNwaWxsLT5wYXJ0aXRpb25zID0gcGFsbG9jMChzaXplb2YoQnVmRmlsZSAqKSAqIG5w YXJ0aXRpb25zKTsKKwlzcGlsbC0+bnR1cGxlcyA9IHBhbGxvYzAoc2l6ZW9mKGludDY0KSAqIG5w YXJ0aXRpb25zKTsKK30KKworLyoKKyAqIGhhc2hfc3BpbGxfdHVwbGUKKyAqCisgKiBObyByb29t IGZvciBuZXcgZ3JvdXBzIGluIHRoZSBoYXNoIHRhYmxlLiBTYXZlIGZvciBsYXRlciBpbiB0aGUg YXBwcm9wcmlhdGUKKyAqIHBhcnRpdGlvbiBzcGlsbCBmaWxlLgorICovCitzdGF0aWMgU2l6ZQor aGFzaF9zcGlsbF90dXBsZShIYXNoQWdnU3BpbGwgKnNwaWxsLCBpbnQgaW5wdXRfYml0cywgVHVw bGVUYWJsZVNsb3QgKnNsb3QsCisJCQkJIHVpbnQzMiBoYXNoKQoreworCWludAkJCQkJIHBhcnRp dGlvbjsKKwlNaW5pbWFsVHVwbGUJCSB0dXBsZTsKKwlCdWZGaWxlCQkJCSpmaWxlOworCWludAkJ CQkJIHdyaXR0ZW47CisJaW50CQkJCQkgdG90YWxfd3JpdHRlbiA9IDA7CisJYm9vbAkJCQkgc2hv dWxkRnJlZTsKKworCUFzc2VydChzcGlsbC0+cGFydGl0aW9ucyAhPSBOVUxMKTsKKworCS8qCisJ ICogV2hlbiBzcGlsbGluZyB0dXBsZXMgZnJvbSB0aGUgaW5wdXQsIHRoZSBzbG90IHdpbGwgYmUg dmlydHVhbAorCSAqIChjb250YWluaW5nIG9ubHkgdGhlIG5lZWRlZCBhdHRyaWJ1dGVzIGFuZCB0 aGUgcmVzdCBhcyBOVUxMKSwgYW5kIHdlCisJICogbmVlZCB0byBtYXRlcmlhbGl6ZSB0aGUgbWlu aW1hbCB0dXBsZS4gV2hlbiBzcGlsbGluZyB0dXBsZXMKKwkgKiByZWN1cnNpdmVseSwgdGhlIHNs b3Qgd2lsbCBob2xkIGEgbWluaW1hbCB0dXBsZSBhbHJlYWR5LgorCSAqLworCXR1cGxlID0gRXhl Y0ZldGNoU2xvdE1pbmltYWxUdXBsZShzbG90LCAmc2hvdWxkRnJlZSk7CisKKwlpZiAoc3BpbGwt PnBhcnRpdGlvbl9iaXRzID09IDApCisJCXBhcnRpdGlvbiA9IDA7CisJZWxzZQorCQlwYXJ0aXRp b24gPSAoaGFzaCA8PCBpbnB1dF9iaXRzKSA+PgorCQkJKDMyIC0gc3BpbGwtPnBhcnRpdGlvbl9i aXRzKTsKKworCXNwaWxsLT5udHVwbGVzW3BhcnRpdGlvbl0rKzsKKworCWlmIChzcGlsbC0+cGFy dGl0aW9uc1twYXJ0aXRpb25dID09IE5VTEwpCisJCXNwaWxsLT5wYXJ0aXRpb25zW3BhcnRpdGlv bl0gPSBCdWZGaWxlQ3JlYXRlVGVtcChmYWxzZSk7CisJZmlsZSA9IHNwaWxsLT5wYXJ0aXRpb25z W3BhcnRpdGlvbl07CisKKwl3cml0dGVuID0gQnVmRmlsZVdyaXRlKGZpbGUsICh2b2lkICopICZo YXNoLCBzaXplb2YodWludDMyKSk7CisJaWYgKHdyaXR0ZW4gIT0gc2l6ZW9mKHVpbnQzMikpCisJ CWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJIGVy cm1zZygiY291bGQgbm90IHdyaXRlIHRvIEhhc2hBZ2cgdGVtcG9yYXJ5IGZpbGU6ICVtIikpKTsK Kwl0b3RhbF93cml0dGVuICs9IHdyaXR0ZW47CisKKwl3cml0dGVuID0gQnVmRmlsZVdyaXRlKGZp bGUsICh2b2lkICopIHR1cGxlLCB0dXBsZS0+dF9sZW4pOworCWlmICh3cml0dGVuICE9IHR1cGxl LT50X2xlbikKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3Mo KSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3Qgd3JpdGUgdG8gSGFzaEFnZyB0ZW1wb3JhcnkgZmls ZTogJW0iKSkpOworCXRvdGFsX3dyaXR0ZW4gKz0gd3JpdHRlbjsKKworCWlmIChzaG91bGRGcmVl KQorCQlwZnJlZSh0dXBsZSk7CisKKwlyZXR1cm4gdG90YWxfd3JpdHRlbjsKK30KKworLyoKKyAq IHJlYWRfc3BpbGxlZF90dXBsZQorICogCQlyZWFkIHRoZSBuZXh0IHR1cGxlIGZyb20gYSBiYXRj aCBmaWxlLiAgUmV0dXJuIE5VTEwgaWYgbm8gbW9yZS4KKyAqLworc3RhdGljIE1pbmltYWxUdXBs ZQoraGFzaF9yZWFkX3NwaWxsZWQoQnVmRmlsZSAqZmlsZSwgdWludDMyICpoYXNocCkKK3sKKwlN aW5pbWFsVHVwbGUJdHVwbGU7CisJdWludDMyCQkJdF9sZW47CisJc2l6ZV90CQkJbnJlYWQ7CisJ dWludDMyCQkJaGFzaDsKKworCW5yZWFkID0gQnVmRmlsZVJlYWQoZmlsZSwgJmhhc2gsIHNpemVv Zih1aW50MzIpKTsKKwlpZiAobnJlYWQgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKG5yZWFk ICE9IHNpemVvZih1aW50MzIpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlX2Zvcl9m aWxlX2FjY2VzcygpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCByZWFkIGZyb20gSGFzaEFnZyB0 ZW1wb3JhcnkgZmlsZTogJW0iKSkpOworCWlmIChoYXNocCAhPSBOVUxMKQorCQkqaGFzaHAgPSBo YXNoOworCisJbnJlYWQgPSBCdWZGaWxlUmVhZChmaWxlLCAmdF9sZW4sIHNpemVvZih0X2xlbikp OworCWlmIChucmVhZCAhPSBzaXplb2YodWludDMyKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQko ZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkgZXJybXNnKCJjb3VsZCBub3QgcmVhZCBm cm9tIEhhc2hBZ2cgdGVtcG9yYXJ5IGZpbGU6ICVtIikpKTsKKworCXR1cGxlID0gKE1pbmltYWxU dXBsZSkgcGFsbG9jKHRfbGVuKTsKKwl0dXBsZS0+dF9sZW4gPSB0X2xlbjsKKworCW5yZWFkID0g QnVmRmlsZVJlYWQoZmlsZSwgKHZvaWQgKikoKGNoYXIgKil0dXBsZSArIHNpemVvZih1aW50MzIp KSwKKwkJCQkJCXRfbGVuIC0gc2l6ZW9mKHVpbnQzMikpOworCWlmIChucmVhZCAhPSB0X2xlbiAt IHNpemVvZih1aW50MzIpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlX2Zvcl9maWxl X2FjY2VzcygpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCByZWFkIGZyb20gSGFzaEFnZyB0ZW1w b3JhcnkgZmlsZTogJW0iKSkpOworCisJcmV0dXJuIHR1cGxlOworfQorCisvKgorICogbmV3X2hh c2hhZ2dfYmF0Y2gKKyAqCisgKiBDb25zdHJ1Y3QgYSBIYXNoQWdnQmF0Y2ggaXRlbSwgd2hpY2gg cmVwcmVzZW50cyBvbmUgaXRlcmF0aW9uIG9mIEhhc2hBZ2cgdG8KKyAqIGJlIGRvbmUuIFNob3Vs ZCBiZSBjYWxsZWQgaW4gdGhlIGFnZ3JlZ2F0ZSdzIG1lbW9yeSBjb250ZXh0LgorICovCitzdGF0 aWMgSGFzaEFnZ0JhdGNoICoKK2hhc2hfYmF0Y2hfbmV3KEJ1ZkZpbGUgKmlucHV0X2ZpbGUsIGlu dCBzZXRubywgaW50NjQgaW5wdXRfdHVwbGVzLAorCQkJICAgaW50IGlucHV0X2JpdHMpCit7CisJ SGFzaEFnZ0JhdGNoICpiYXRjaCA9IHBhbGxvYzAoc2l6ZW9mKEhhc2hBZ2dCYXRjaCkpOworCisJ YmF0Y2gtPmlucHV0X2ZpbGUgPSBpbnB1dF9maWxlOworCWJhdGNoLT5pbnB1dF9iaXRzID0gaW5w dXRfYml0czsKKwliYXRjaC0+aW5wdXRfdHVwbGVzID0gaW5wdXRfdHVwbGVzOworCWJhdGNoLT5z ZXRubyA9IHNldG5vOworCisJLyogYmF0Y2gtPnNwaWxsIHdpbGwgYmUgc2V0IG9ubHkgYWZ0ZXIg c3BpbGxpbmcgdGhpcyBiYXRjaCAqLworCisJcmV0dXJuIGJhdGNoOworfQorCisvKgorICogaGFz aF9maW5pc2hfaW5pdGlhbF9zcGlsbHMKKyAqCisgKiBBZnRlciBhIEhhc2hBZ2dCYXRjaCBoYXMg YmVlbiBwcm9jZXNzZWQsIGl0IG1heSBoYXZlIHNwaWxsZWQgdHVwbGVzIHRvCisgKiBkaXNrLiBJ ZiBzbywgdHVybiB0aGUgc3BpbGxlZCBwYXJ0aXRpb25zIGludG8gbmV3IGJhdGNoZXMgdGhhdCBt dXN0IGxhdGVyCisgKiBiZSBleGVjdXRlZC4KKyAqLworc3RhdGljIHZvaWQKK2hhc2hfZmluaXNo X2luaXRpYWxfc3BpbGxzKEFnZ1N0YXRlICphZ2dzdGF0ZSkKK3sKKwlpbnQgc2V0bm87CisKKwlp ZiAoYWdnc3RhdGUtPmhhc2hfc3BpbGxzID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIHVwZGF0 ZSBoYXNoZW50cnlzaXplIGVzdGltYXRlIGJhc2VkIG9uIGNvbnRlbnRzICovCisJQXNzZXJ0KGFn Z3N0YXRlLT5oYXNoX25ncm91cHNfY3VycmVudCA+IDApOworCWFnZ3N0YXRlLT5oYXNoZW50cnlz aXplID0gKGRvdWJsZSlhZ2dzdGF0ZS0+aGFzaF9tZW1fY3VycmVudCAvCisJCShkb3VibGUpYWdn c3RhdGUtPmhhc2hfbmdyb3Vwc19jdXJyZW50OworCisJZm9yIChzZXRubyA9IDA7IHNldG5vIDwg YWdnc3RhdGUtPm51bV9oYXNoZXM7IHNldG5vKyspCisJCWhhc2hfc3BpbGxfZmluaXNoKGFnZ3N0 YXRlLCAmYWdnc3RhdGUtPmhhc2hfc3BpbGxzW3NldG5vXSwgc2V0bm8sIDApOworCisJcGZyZWUo YWdnc3RhdGUtPmhhc2hfc3BpbGxzKTsKKwlhZ2dzdGF0ZS0+aGFzaF9zcGlsbHMgPSBOVUxMOwor fQorCisvKgorICogaGFzaF9zcGlsbF9maW5pc2gKKyAqCisgKiBUcmFuc2Zvcm0gc3BpbGwgZmls ZXMgaW50byBuZXcgYmF0Y2hlcy4KKyAqLworc3RhdGljIHZvaWQKK2hhc2hfc3BpbGxfZmluaXNo KEFnZ1N0YXRlICphZ2dzdGF0ZSwgSGFzaEFnZ1NwaWxsICpzcGlsbCwgaW50IHNldG5vLCBpbnQg aW5wdXRfYml0cykKK3sKKwlpbnQgaTsKKworCWlmIChzcGlsbC0+bl9wYXJ0aXRpb25zID09IDAp CisJCXJldHVybjsJLyogZGlkbid0IHNwaWxsICovCisKKwlmb3IgKGkgPSAwOyBpIDwgc3BpbGwt Pm5fcGFydGl0aW9uczsgaSsrKQorCXsKKwkJQnVmRmlsZSAgICAgICAgICpmaWxlID0gc3BpbGwt PnBhcnRpdGlvbnNbaV07CisJCU1lbW9yeUNvbnRleHQgICAgb2xkQ29udGV4dDsKKwkJSGFzaEFn Z0JhdGNoICAgICpuZXdfYmF0Y2g7CisKKwkJLyogcGFydGl0aW9uIGlzIGVtcHR5ICovCisJCWlm IChmaWxlID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQkvKiByZXdpbmQgZmlsZSBmb3IgcmVh ZGluZyAqLworCQlpZiAoQnVmRmlsZVNlZWsoZmlsZSwgMCwgMEwsIFNFRUtfU0VUKSkKKwkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCQkgZXJy bXNnKCJjb3VsZCBub3QgcmV3aW5kIEhhc2hBZ2cgdGVtcG9yYXJ5IGZpbGU6ICVtIikpKTsKKwor CQlvbGRDb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGFnZ3N0YXRlLT5zcy5wcy5zdGF0 ZS0+ZXNfcXVlcnlfY3h0KTsKKwkJbmV3X2JhdGNoID0gaGFzaF9iYXRjaF9uZXcoZmlsZSwgc2V0 bm8sIHNwaWxsLT5udHVwbGVzW2ldLAorCQkJCQkJCQkgICBzcGlsbC0+cGFydGl0aW9uX2JpdHMg KyBpbnB1dF9iaXRzKTsKKwkJYWdnc3RhdGUtPmhhc2hfYmF0Y2hlcyA9IGxhcHBlbmQoYWdnc3Rh dGUtPmhhc2hfYmF0Y2hlcywgbmV3X2JhdGNoKTsKKwkJYWdnc3RhdGUtPmhhc2hfYmF0Y2hlc191 c2VkKys7CisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRDb250ZXh0KTsKKwl9CisKKwlwZnJl ZShzcGlsbC0+bnR1cGxlcyk7CisJcGZyZWUoc3BpbGwtPnBhcnRpdGlvbnMpOworfQorCisvKgor ICogQ2xlYXIgYSBIYXNoQWdnU3BpbGwsIGZyZWUgaXRzIG1lbW9yeSwgYW5kIGNsb3NlIGl0cyBm aWxlcy4KKyAqLworc3RhdGljIHZvaWQKK2hhc2hfcmVzZXRfc3BpbGwoSGFzaEFnZ1NwaWxsICpz cGlsbCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgc3BpbGwtPm5fcGFydGl0aW9uczsg aSsrKQorCXsKKwkJQnVmRmlsZSAgICAgICAgICpmaWxlID0gc3BpbGwtPnBhcnRpdGlvbnNbaV07 CisKKwkJaWYgKGZpbGUgIT0gTlVMTCkKKwkJCUJ1ZkZpbGVDbG9zZShmaWxlKTsKKwl9CisJaWYg KHNwaWxsLT5udHVwbGVzICE9IE5VTEwpCisJCXBmcmVlKHNwaWxsLT5udHVwbGVzKTsKKwlpZiAo c3BpbGwtPnBhcnRpdGlvbnMgIT0gTlVMTCkKKwkJcGZyZWUoc3BpbGwtPnBhcnRpdGlvbnMpOwor fQorCisvKgorICogRmluZCBhbmQgcmVzZXQgYWxsIGFjdGl2ZSBIYXNoQWdnU3BpbGxzLgorICov CitzdGF0aWMgdm9pZAoraGFzaF9yZXNldF9zcGlsbHMoQWdnU3RhdGUgKmFnZ3N0YXRlKQorewor CUxpc3RDZWxsICpsYzsKKworCWlmIChhZ2dzdGF0ZS0+aGFzaF9zcGlsbHMgIT0gTlVMTCkKKwl7 CisJCWludCBzZXRubzsKKworCQlmb3IgKHNldG5vID0gMDsgc2V0bm8gPCBhZ2dzdGF0ZS0+bnVt X2hhc2hlczsgc2V0bm8rKykKKwkJCWhhc2hfcmVzZXRfc3BpbGwoJmFnZ3N0YXRlLT5oYXNoX3Nw aWxsc1tzZXRub10pOworCisJCXBmcmVlKGFnZ3N0YXRlLT5oYXNoX3NwaWxscyk7CisJCWFnZ3N0 YXRlLT5oYXNoX3NwaWxscyA9IE5VTEw7CisJfQorCisJZm9yZWFjaChsYywgYWdnc3RhdGUtPmhh c2hfYmF0Y2hlcykKKwl7CisJCUhhc2hBZ2dCYXRjaCAqYmF0Y2ggPSAoSGFzaEFnZ0JhdGNoKikg bGZpcnN0KGxjKTsKKwkJaWYgKGJhdGNoLT5pbnB1dF9maWxlICE9IE5VTEwpCisJCXsKKwkJCUJ1 ZkZpbGVDbG9zZShiYXRjaC0+aW5wdXRfZmlsZSk7CisJCQliYXRjaC0+aW5wdXRfZmlsZSA9IE5V TEw7CisJCX0KKwkJaGFzaF9yZXNldF9zcGlsbCgmYmF0Y2gtPnNwaWxsKTsKKwkJcGZyZWUoYmF0 Y2gpOworCX0KKwlsaXN0X2ZyZWUoYWdnc3RhdGUtPmhhc2hfYmF0Y2hlcyk7CisJYWdnc3RhdGUt Pmhhc2hfYmF0Y2hlcyA9IE5JTDsKK30KKworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLQogICogRXhl Y0luaXRBZ2cKICAqCkBAIC0yMjY4LDYgKzMxMzUsMTAgQEAgRXhlY0luaXRBZ2coQWdnICpub2Rl LCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJCWFnZ3N0YXRlLT5zcy5wcy5vdXRlcm9w c2ZpeGVkID0gZmFsc2U7CiAJfQogCisJaWYgKHVzZV9oYXNoaW5nKQorCQlhZ2dzdGF0ZS0+aGFz aF9zcGlsbF9zbG90ID0gRXhlY0luaXRFeHRyYVR1cGxlU2xvdChlc3RhdGUsIHNjYW5EZXNjLAor CQkJCQkJCQkJCQkJCQkgICAmVFRTT3BzTWluaW1hbFR1cGxlKTsKKwogCS8qCiAJICogSW5pdGlh bGl6ZSByZXN1bHQgdHlwZSwgc2xvdCBhbmQgcHJvamVjdGlvbi4KIAkgKi8KQEAgLTI0OTMsMTEg KzMzNjQsNDEgQEAgRXhlY0luaXRBZ2coQWdnICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVm bGFncykKIAkgKi8KIAlpZiAodXNlX2hhc2hpbmcpCiAJeworCQlQbGFuICpvdXRlcnBsYW4gPSBv dXRlclBsYW4obm9kZSk7CisKIAkJLyogdGhpcyBpcyBhbiBhcnJheSBvZiBwb2ludGVycywgbm90 IHN0cnVjdHVyZXMgKi8KIAkJYWdnc3RhdGUtPmhhc2hfcGVyZ3JvdXAgPSBwZXJncm91cHM7CiAK KwkJYWdnc3RhdGUtPmhhc2hlbnRyeXNpemUgPSBoYXNoX2FnZ19lbnRyeV9zaXplKAorCQkJYWdn c3RhdGUtPm51bXRyYW5zLCBvdXRlcnBsYW4tPnBsYW5fd2lkdGgsIG5vZGUtPnRyYW5zaXRpb25T cGFjZSk7CisKKwkJLyoKKwkJICogSW5pdGlhbGl6ZSB0aGUgdGhyZXNob2xkcyBhdCB3aGljaCB3 ZSBzdG9wIGNyZWF0aW5nIG5ldyBoYXNoIGVudHJpZXMKKwkJICogYW5kIHN0YXJ0IHNwaWxsaW5n LgorCQkgKi8KKwkJaWYgKGhhc2hhZ2dfbWVtX292ZXJmbG93KQorCQkJYWdnc3RhdGUtPmhhc2hf bWVtX2xpbWl0ID0gU0laRV9NQVg7CisJCWVsc2UgaWYgKHdvcmtfbWVtICogMTAyNEwgPiBIQVNI QUdHX1BBUlRJVElPTl9NRU0gKiAyKQorCQkJYWdnc3RhdGUtPmhhc2hfbWVtX2xpbWl0ID0KKwkJ CQl3b3JrX21lbSAqIDEwMjRMIC0gSEFTSEFHR19QQVJUSVRJT05fTUVNOworCQllbHNlCisJCQlh Z2dzdGF0ZS0+aGFzaF9tZW1fbGltaXQgPSB3b3JrX21lbSAqIDEwMjRMOworCisJCS8qCisJCSAq IFNldCBhIHNlcGFyYXRlIGxpbWl0IG9uIHRoZSBtYXhpbXVtIG51bWJlciBvZiBncm91cHMgdG8K KwkJICogY3JlYXRlLiBUaGlzIGlzIGltcG9ydGFudCBmb3IgYWdncmVnYXRlcyB3aGVyZSB0aGUg aW5pdGlhbCBzdGF0ZQorCQkgKiBzaXplIGlzIHNtYWxsLCBidXQgYWdndHJhbnNzcGFjZSBpcyBs YXJnZS4KKwkJICovCisJCWlmIChoYXNoYWdnX21lbV9vdmVyZmxvdykKKwkJCWFnZ3N0YXRlLT5o YXNoX25ncm91cHNfbGltaXQgPSBMT05HX01BWDsKKwkJZWxzZSBpZiAoYWdnc3RhdGUtPmhhc2hf bWVtX2xpbWl0ID4gYWdnc3RhdGUtPmhhc2hlbnRyeXNpemUpCisJCQlhZ2dzdGF0ZS0+aGFzaF9u Z3JvdXBzX2xpbWl0ID0KKwkJCQlhZ2dzdGF0ZS0+aGFzaF9tZW1fbGltaXQgLyBhZ2dzdGF0ZS0+ aGFzaGVudHJ5c2l6ZTsKKwkJZWxzZQorCQkJYWdnc3RhdGUtPmhhc2hfbmdyb3Vwc19saW1pdCA9 IDE7CisKIAkJZmluZF9oYXNoX2NvbHVtbnMoYWdnc3RhdGUpOwotCQlidWlsZF9oYXNoX3RhYmxl KGFnZ3N0YXRlKTsKKwkJYnVpbGRfaGFzaF90YWJsZShhZ2dzdGF0ZSwgLTEsIDApOwogCQlhZ2dz dGF0ZS0+dGFibGVfZmlsbGVkID0gZmFsc2U7CiAJfQogCkBAIC0yOTAzLDcgKzM4MDQsNyBAQCBF eGVjSW5pdEFnZyhBZ2cgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCQllbHNl CiAJCQlBc3NlcnQoZmFsc2UpOwogCi0JCXBoYXNlLT5ldmFsdHJhbnMgPSBFeGVjQnVpbGRBZ2dU cmFucyhhZ2dzdGF0ZSwgcGhhc2UsIGRvc29ydCwgZG9oYXNoKTsKKwkJcGhhc2UtPmV2YWx0cmFu cyA9IEV4ZWNCdWlsZEFnZ1RyYW5zKGFnZ3N0YXRlLCBwaGFzZSwgZG9zb3J0LCBkb2hhc2gsIGZh bHNlKTsKIAogCX0KIApAQCAtMzM5OCw2ICs0Mjk5LDggQEAgRXhlY0VuZEFnZyhBZ2dTdGF0ZSAq bm9kZSkKIAlpZiAobm9kZS0+c29ydF9vdXQpCiAJCXR1cGxlc29ydF9lbmQobm9kZS0+c29ydF9v dXQpOwogCisJaGFzaF9yZXNldF9zcGlsbHMobm9kZSk7CisKIAlmb3IgKHRyYW5zbm8gPSAwOyB0 cmFuc25vIDwgbm9kZS0+bnVtdHJhbnM7IHRyYW5zbm8rKykKIAl7CiAJCUFnZ1N0YXRlUGVyVHJh bnMgcGVydHJhbnMgPSAmbm9kZS0+cGVydHJhbnNbdHJhbnNub107CkBAIC0zNDUzLDEyICs0MzU2 LDEzIEBAIEV4ZWNSZVNjYW5BZ2coQWdnU3RhdGUgKm5vZGUpCiAJCQlyZXR1cm47CiAKIAkJLyoK LQkJICogSWYgd2UgZG8gaGF2ZSB0aGUgaGFzaCB0YWJsZSwgYW5kIHRoZSBzdWJwbGFuIGRvZXMg bm90IGhhdmUgYW55Ci0JCSAqIHBhcmFtZXRlciBjaGFuZ2VzLCBhbmQgbm9uZSBvZiBvdXIgb3du IHBhcmFtZXRlciBjaGFuZ2VzIGFmZmVjdAotCQkgKiBpbnB1dCBleHByZXNzaW9ucyBvZiB0aGUg YWdncmVnYXRlZCBmdW5jdGlvbnMsIHRoZW4gd2UgY2FuIGp1c3QKLQkJICogcmVzY2FuIHRoZSBl eGlzdGluZyBoYXNoIHRhYmxlOyBubyBuZWVkIHRvIGJ1aWxkIGl0IGFnYWluLgorCQkgKiBJZiB3 ZSBkbyBoYXZlIHRoZSBoYXNoIHRhYmxlLCBhbmQgaXQgbmV2ZXIgc3BpbGxlZCwgYW5kIHRoZSBz dWJwbGFuCisJCSAqIGRvZXMgbm90IGhhdmUgYW55IHBhcmFtZXRlciBjaGFuZ2VzLCBhbmQgbm9u ZSBvZiBvdXIgb3duIHBhcmFtZXRlcgorCQkgKiBjaGFuZ2VzIGFmZmVjdCBpbnB1dCBleHByZXNz aW9ucyBvZiB0aGUgYWdncmVnYXRlZCBmdW5jdGlvbnMsIHRoZW4KKwkJICogd2UgY2FuIGp1c3Qg cmVzY2FuIHRoZSBleGlzdGluZyBoYXNoIHRhYmxlOyBubyBuZWVkIHRvIGJ1aWxkIGl0CisJCSAq IGFnYWluLgogCQkgKi8KLQkJaWYgKG91dGVyUGxhbi0+Y2hnUGFyYW0gPT0gTlVMTCAmJgorCQlp ZiAob3V0ZXJQbGFuLT5jaGdQYXJhbSA9PSBOVUxMICYmICFub2RlLT5oYXNoX3NwaWxsZWQgJiYK IAkJCSFibXNfb3ZlcmxhcChub2RlLT5zcy5wcy5jaGdQYXJhbSwgYWdnbm9kZS0+YWdnUGFyYW1z KSkKIAkJewogCQkJUmVzZXRUdXBsZUhhc2hJdGVyYXRvcihub2RlLT5wZXJoYXNoWzBdLmhhc2h0 YWJsZSwKQEAgLTM1MTUsOSArNDQxOSwyMSBAQCBFeGVjUmVTY2FuQWdnKEFnZ1N0YXRlICpub2Rl KQogCSAqLwogCWlmIChub2RlLT5hZ2dzdHJhdGVneSA9PSBBR0dfSEFTSEVEIHx8IG5vZGUtPmFn Z3N0cmF0ZWd5ID09IEFHR19NSVhFRCkKIAl7CisJCWhhc2hfcmVzZXRfc3BpbGxzKG5vZGUpOwor CisJCW5vZGUtPmhhc2hfc3BpbGxlZCA9IGZhbHNlOworCQlub2RlLT5oYXNoX25vX25ld19ncm91 cHMgPSBmYWxzZTsKKwkJbm9kZS0+aGFzaF9tZW1fY3VycmVudCA9IDA7CisJCW5vZGUtPmhhc2hf bmdyb3Vwc19jdXJyZW50ID0gMDsKKworCQkvKiByZXNldCBzdGF0cyAqLworCQlub2RlLT5oYXNo X21lbV9wZWFrID0gMDsKKwkJbm9kZS0+aGFzaF9kaXNrX3VzZWQgPSAwOworCQlub2RlLT5oYXNo X2JhdGNoZXNfdXNlZCA9IDA7CisKIAkJUmVTY2FuRXhwckNvbnRleHQobm9kZS0+aGFzaGNvbnRl eHQpOwogCQkvKiBSZWJ1aWxkIGFuIGVtcHR5IGhhc2ggdGFibGUgKi8KLQkJYnVpbGRfaGFzaF90 YWJsZShub2RlKTsKKwkJYnVpbGRfaGFzaF90YWJsZShub2RlLCAtMSwgMCk7CiAJCW5vZGUtPnRh YmxlX2ZpbGxlZCA9IGZhbHNlOwogCQkvKiBpdGVyYXRvciB3aWxsIGJlIHJlc2V0IHdoZW4gdGhl IHRhYmxlIGlzIGZpbGxlZCAqLwogCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2ppdC9sbHZt L2xsdm1qaXRfZXhwci5jIGIvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9leHByLmMKaW5k ZXggZmZkODg3YzcxYWEuLjkzNTE3ZDAzODE5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9qaXQv bGx2bS9sbHZtaml0X2V4cHIuYworKysgYi9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X2V4 cHIuYwpAQCAtMjA4Miw2ICsyMDgyLDcgQEAgbGx2bV9jb21waWxlX2V4cHIoRXhwclN0YXRlICpz dGF0ZSkKIAkJCQl9CiAKIAkJCWNhc2UgRUVPUF9BR0dfSU5JVF9UUkFOUzoKKwkJCWNhc2UgRUVP UF9BR0dfSU5JVF9UUkFOU19TUElMTEVEOgogCQkJCXsKIAkJCQkJQWdnU3RhdGUgICAqYWdnc3Rh dGU7CiAJCQkJCUFnZ1N0YXRlUGVyVHJhbnMgcGVydHJhbnM7CkBAIC0yMDkyLDYgKzIwOTMsNyBA QCBsbHZtX2NvbXBpbGVfZXhwcihFeHByU3RhdGUgKnN0YXRlKQogCQkJCQlMTFZNVmFsdWVSZWYg dl9hbGxwZXJncm91cHNwOwogCiAJCQkJCUxMVk1WYWx1ZVJlZiB2X3Blcmdyb3VwcDsKKwkJCQkJ TExWTVZhbHVlUmVmIHZfcGVyZ3JvdXBfYWxsYWdnczsKIAogCQkJCQlMTFZNVmFsdWVSZWYgdl9z ZXRvZmYsCiAJCQkJCQkJCXZfdHJhbnNubzsKQEAgLTIxMTksMTEgKzIxMjEsMzIgQEAgbGx2bV9j b21waWxlX2V4cHIoRXhwclN0YXRlICpzdGF0ZSkKIAkJCQkJCQkJCQkgICJhZ2dzdGF0ZS5hbGxf cGVyZ3JvdXBzIik7CiAJCQkJCXZfc2V0b2ZmID0gbF9pbnQzMl9jb25zdChvcC0+ZC5hZ2dfaW5p dF90cmFucy5zZXRvZmYpOwogCQkJCQl2X3RyYW5zbm8gPSBsX2ludDMyX2NvbnN0KG9wLT5kLmFn Z19pbml0X3RyYW5zLnRyYW5zbm8pOwotCQkJCQl2X3Blcmdyb3VwcCA9Ci0JCQkJCQlMTFZNQnVp bGRHRVAoYiwKLQkJCQkJCQkJCSBsX2xvYWRfZ2VwMShiLCB2X2FsbHBlcmdyb3Vwc3AsIHZfc2V0 b2ZmLCAiIiksCi0JCQkJCQkJCQkgJnZfdHJhbnNubywgMSwgIiIpOworCQkJCQl2X3Blcmdyb3Vw X2FsbGFnZ3MgPSBsX2xvYWRfZ2VwMShiLCB2X2FsbHBlcmdyb3Vwc3AsIHZfc2V0b2ZmLCAiIik7 CiAKKwkJCQkJLyoKKwkJCQkJICogV2hlbiBubyB0dXBsZXMgYXQgYWxsIGhhdmUgc3BpbGxlZCwg d2UgYXZvaWQgYWRkaW5nIHRoaXMKKwkJCQkJICogZXh0cmEgYnJhbmNoLiBCdXQgYWZ0ZXIgc29t ZSB0dXBsZXMgaGF2ZSBzcGlsbGVkLCB0aGlzCisJCQkJCSAqIGJyYW5jaCBpcyBuZWNlc3Nhcnks IHNvIHdlIHJlY29tcGlsZSB0aGUgZXhwcmVzc2lvbgorCQkJCQkgKiB1c2luZyBhIG5ldyBvcGNv ZGUuCisJCQkJCSAqLworCQkJCQlpZiAob3Bjb2RlID09IEVFT1BfQUdHX0lOSVRfVFJBTlNfU1BJ TExFRCkKKwkJCQkJeworCQkJCQkJTExWTUJhc2ljQmxvY2tSZWYgYl9jaGVja19ub3RyYW5zdmFs dWUgPSBsX2JiX2JlZm9yZV92KAorCQkJCQkJCW9wYmxvY2tzW2kgKyAxXSwgIm9wLiVkLmNoZWNr X25vdHJhbnN2YWx1ZSIsIGkpOworCisJCQkJCQlMTFZNQnVpbGRDb25kQnIoCisJCQkJCQkJYiwK KwkJCQkJCQlMTFZNQnVpbGRJQ21wKGIsIExMVk1JbnRFUSwKKwkJCQkJCQkJCQkgIExMVk1CdWls ZFB0clRvSW50KAorCQkJCQkJCQkJCQkgIGIsIHZfcGVyZ3JvdXBfYWxsYWdncywgVHlwZVNpemVU LCAiIiksCisJCQkJCQkJCQkJICBsX3NpemV0X2NvbnN0KDApLCAiIiksCisJCQkJCQkJb3BibG9j a3NbaSArIDFdLAorCQkJCQkJCWJfY2hlY2tfbm90cmFuc3ZhbHVlKTsKKworCQkJCQkJTExWTVBv c2l0aW9uQnVpbGRlckF0RW5kKGIsIGJfY2hlY2tfbm90cmFuc3ZhbHVlKTsKKwkJCQkJfQorCisJ CQkJCXZfcGVyZ3JvdXBwID0gTExWTUJ1aWxkR0VQKGIsIHZfcGVyZ3JvdXBfYWxsYWdncywgJnZf dHJhbnNubywgMSwgIiIpOwogCQkJCQl2X25vdHJhbnN2YWx1ZSA9CiAJCQkJCQlsX2xvYWRfc3Ry dWN0X2dlcChiLCB2X3Blcmdyb3VwcCwKIAkJCQkJCQkJCQkgIEZJRUxETk9fQUdHU1RBVEVQRVJH Uk9VUERBVEFfTk9UUkFOU1ZBTFVFLApAQCAtMjE4MCw2ICsyMjAzLDcgQEAgbGx2bV9jb21waWxl X2V4cHIoRXhwclN0YXRlICpzdGF0ZSkKIAkJCQl9CiAKIAkJCWNhc2UgRUVPUF9BR0dfU1RSSUNU X1RSQU5TX0NIRUNLOgorCQkJY2FzZSBFRU9QX0FHR19TVFJJQ1RfVFJBTlNfQ0hFQ0tfU1BJTExF RDoKIAkJCQl7CiAJCQkJCUFnZ1N0YXRlICAgKmFnZ3N0YXRlOwogCQkJCQlMTFZNVmFsdWVSZWYg dl9zZXRvZmYsCkBAIC0yMTkwLDYgKzIyMTQsNyBAQCBsbHZtX2NvbXBpbGVfZXhwcihFeHByU3Rh dGUgKnN0YXRlKQogCiAJCQkJCUxMVk1WYWx1ZVJlZiB2X3RyYW5zbnVsbDsKIAkJCQkJTExWTVZh bHVlUmVmIHZfcGVyZ3JvdXBwOworCQkJCQlMTFZNVmFsdWVSZWYgdl9wZXJncm91cF9hbGxhZ2dz OwogCiAJCQkJCWludAkJCWp1bXBudWxsID0gb3AtPmQuYWdnX3N0cmljdF90cmFuc19jaGVjay5q dW1wbnVsbDsKIApAQCAtMjIwOSwxMSArMjIzNCwzMiBAQCBsbHZtX2NvbXBpbGVfZXhwcihFeHBy U3RhdGUgKnN0YXRlKQogCQkJCQkJbF9pbnQzMl9jb25zdChvcC0+ZC5hZ2dfc3RyaWN0X3RyYW5z X2NoZWNrLnNldG9mZik7CiAJCQkJCXZfdHJhbnNubyA9CiAJCQkJCQlsX2ludDMyX2NvbnN0KG9w LT5kLmFnZ19zdHJpY3RfdHJhbnNfY2hlY2sudHJhbnNubyk7Ci0JCQkJCXZfcGVyZ3JvdXBwID0K LQkJCQkJCUxMVk1CdWlsZEdFUChiLAotCQkJCQkJCQkJIGxfbG9hZF9nZXAxKGIsIHZfYWxscGVy Z3JvdXBzcCwgdl9zZXRvZmYsICIiKSwKLQkJCQkJCQkJCSAmdl90cmFuc25vLCAxLCAiIik7CisJ CQkJCXZfcGVyZ3JvdXBfYWxsYWdncyA9IGxfbG9hZF9nZXAxKGIsIHZfYWxscGVyZ3JvdXBzcCwg dl9zZXRvZmYsICIiKTsKKworCQkJCQkvKgorCQkJCQkgKiBXaGVuIG5vIHR1cGxlcyBhdCBhbGwg aGF2ZSBzcGlsbGVkLCB3ZSBhdm9pZCBhZGRpbmcgdGhpcworCQkJCQkgKiBleHRyYSBicmFuY2gu IEJ1dCBhZnRlciBzb21lIHR1cGxlcyBoYXZlIHNwaWxsZWQsIHRoaXMKKwkJCQkJICogYnJhbmNo IGlzIG5lY2Vzc2FyeSwgc28gd2UgcmVjb21waWxlIHRoZSBleHByZXNzaW9uCisJCQkJCSAqIHVz aW5nIGEgbmV3IG9wY29kZS4KKwkJCQkJICovCisJCQkJCWlmIChvcGNvZGUgPT0gRUVPUF9BR0df U1RSSUNUX1RSQU5TX0NIRUNLX1NQSUxMRUQpCisJCQkJCXsKKwkJCQkJCUxMVk1CYXNpY0Jsb2Nr UmVmIGJfY2hlY2tfdHJhbnNudWxsID0gbF9iYl9iZWZvcmVfdigKKwkJCQkJCQlvcGJsb2Nrc1tp ICsgMV0sICJvcC4lZC5jaGVja190cmFuc251bGwiLCBpKTsKKworCQkJCQkJTExWTUJ1aWxkQ29u ZEJyKAorCQkJCQkJCWIsCisJCQkJCQkJTExWTUJ1aWxkSUNtcChiLCBMTFZNSW50RVEsCisJCQkJ CQkJCQkJICBMTFZNQnVpbGRQdHJUb0ludChiLCB2X3Blcmdyb3VwX2FsbGFnZ3MsCisJCQkJCQkJ CQkJCQkJCQlUeXBlU2l6ZVQsICIiKSwKKwkJCQkJCQkJCQkgIGxfc2l6ZXRfY29uc3QoMCksICIi KSwKKwkJCQkJCQlvcGJsb2Nrc1tqdW1wbnVsbF0sCisJCQkJCQkJYl9jaGVja190cmFuc251bGwp OworCisJCQkJCQlMTFZNUG9zaXRpb25CdWlsZGVyQXRFbmQoYiwgYl9jaGVja190cmFuc251bGwp OworCQkJCQl9CiAKKwkJCQkJdl9wZXJncm91cHAgPSBMTFZNQnVpbGRHRVAoYiwgdl9wZXJncm91 cF9hbGxhZ2dzLCAmdl90cmFuc25vLCAxLCAiIik7CiAJCQkJCXZfdHJhbnNudWxsID0KIAkJCQkJ CWxfbG9hZF9zdHJ1Y3RfZ2VwKGIsIHZfcGVyZ3JvdXBwLAogCQkJCQkJCQkJCSAgRklFTEROT19B R0dTVEFURVBFUkdST1VQREFUQV9UUkFOU1ZBTFVFSVNOVUxMLApAQCAtMjIyOSw3ICsyMjc1LDkg QEAgbGx2bV9jb21waWxlX2V4cHIoRXhwclN0YXRlICpzdGF0ZSkKIAkJCQl9CiAKIAkJCWNhc2Ug RUVPUF9BR0dfUExBSU5fVFJBTlNfQllWQUw6CisJCQljYXNlIEVFT1BfQUdHX1BMQUlOX1RSQU5T X0JZVkFMX1NQSUxMRUQ6CiAJCQljYXNlIEVFT1BfQUdHX1BMQUlOX1RSQU5TOgorCQkJY2FzZSBF RU9QX0FHR19QTEFJTl9UUkFOU19TUElMTEVEOgogCQkJCXsKIAkJCQkJQWdnU3RhdGUgICAqYWdn c3RhdGU7CiAJCQkJCUFnZ1N0YXRlUGVyVHJhbnMgcGVydHJhbnM7CkBAIC0yMjU1LDYgKzIzMDMs NyBAQCBsbHZtX2NvbXBpbGVfZXhwcihFeHByU3RhdGUgKnN0YXRlKQogCQkJCQlMTFZNVmFsdWVS ZWYgdl9wZXJ0cmFuc3A7CiAKIAkJCQkJTExWTVZhbHVlUmVmIHZfcGVyZ3JvdXBwOworCQkJCQlM TFZNVmFsdWVSZWYgdl9wZXJncm91cF9hbGxhZ2dzOwogCiAJCQkJCUxMVk1WYWx1ZVJlZiB2X3Jl dHZhbDsKIApAQCAtMjI4MiwxMCArMjMzMSwzMyBAQCBsbHZtX2NvbXBpbGVfZXhwcihFeHByU3Rh dGUgKnN0YXRlKQogCQkJCQkJCQkJCSAgImFnZ3N0YXRlLmFsbF9wZXJncm91cHMiKTsKIAkJCQkJ dl9zZXRvZmYgPSBsX2ludDMyX2NvbnN0KG9wLT5kLmFnZ190cmFucy5zZXRvZmYpOwogCQkJCQl2 X3RyYW5zbm8gPSBsX2ludDMyX2NvbnN0KG9wLT5kLmFnZ190cmFucy50cmFuc25vKTsKLQkJCQkJ dl9wZXJncm91cHAgPQotCQkJCQkJTExWTUJ1aWxkR0VQKGIsCi0JCQkJCQkJCQkgbF9sb2FkX2dl cDEoYiwgdl9hbGxwZXJncm91cHNwLCB2X3NldG9mZiwgIiIpLAotCQkJCQkJCQkJICZ2X3RyYW5z bm8sIDEsICIiKTsKKwkJCQkJdl9wZXJncm91cF9hbGxhZ2dzID0gbF9sb2FkX2dlcDEoYiwgdl9h bGxwZXJncm91cHNwLCB2X3NldG9mZiwgIiIpOworCisJCQkJCS8qCisJCQkJCSAqIFdoZW4gbm8g dHVwbGVzIGF0IGFsbCBoYXZlIHNwaWxsZWQsIHdlIGF2b2lkIGFkZGluZyB0aGlzCisJCQkJCSAq IGV4dHJhIGJyYW5jaC4gQnV0IGFmdGVyIHNvbWUgdHVwbGVzIGhhdmUgc3BpbGxlZCwgdGhpcwor CQkJCQkgKiBicmFuY2ggaXMgbmVjZXNzYXJ5LCBzbyB3ZSByZWNvbXBpbGUgdGhlIGV4cHJlc3Np b24KKwkJCQkJICogdXNpbmcgYSBuZXcgb3Bjb2RlLgorCQkJCQkgKi8KKwkJCQkJaWYgKG9wY29k ZSA9PSBFRU9QX0FHR19QTEFJTl9UUkFOU19CWVZBTF9TUElMTEVEIHx8CisJCQkJCQlvcGNvZGUg PT0gRUVPUF9BR0dfUExBSU5fVFJBTlNfU1BJTExFRCkKKwkJCQkJeworCQkJCQkJTExWTUJhc2lj QmxvY2tSZWYgYl9hZHZhbmNlX3RyYW5zdmFsID0gbF9iYl9iZWZvcmVfdigKKwkJCQkJCQlvcGJs b2Nrc1tpICsgMV0sICJvcC4lZC5hZHZhbmNlX3RyYW5zdmFsIiwgaSk7CisKKwkJCQkJCUxMVk1C dWlsZENvbmRCcigKKwkJCQkJCQliLAorCQkJCQkJCUxMVk1CdWlsZElDbXAoYiwgTExWTUludEVR LAorCQkJCQkJCQkJCSAgTExWTUJ1aWxkUHRyVG9JbnQoYiwgdl9wZXJncm91cF9hbGxhZ2dzLAor CQkJCQkJCQkJCQkJCQkJVHlwZVNpemVULCAiIiksCisJCQkJCQkJCQkJICBsX3NpemV0X2NvbnN0 KDApLCAiIiksCisJCQkJCQkJb3BibG9ja3NbaSArIDFdLAorCQkJCQkJCWJfYWR2YW5jZV90cmFu c3ZhbCk7CisKKwkJCQkJCUxMVk1Qb3NpdGlvbkJ1aWxkZXJBdEVuZChiLCBiX2FkdmFuY2VfdHJh bnN2YWwpOworCQkJCQl9CisKKwkJCQkJdl9wZXJncm91cHAgPSBMTFZNQnVpbGRHRVAoYiwgdl9w ZXJncm91cF9hbGxhZ2dzLCAmdl90cmFuc25vLCAxLCAiIik7CiAKIAkJCQkJdl9mY2luZm8gPSBs X3B0cl9jb25zdChmY2luZm8sCiAJCQkJCQkJCQkJICAgbF9wdHIoU3RydWN0RnVuY3Rpb25DYWxs SW5mb0RhdGEpKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3Rz aXplLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCmluZGV4IDNmMGQy ODk5NjM1Li4xYjNlYTMzMjFjNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bh dGgvY29zdHNpemUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5j CkBAIC03Nyw2ICs3Nyw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgogI2lu Y2x1ZGUgImFjY2Vzcy90c21hcGkuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgor I2luY2x1ZGUgImV4ZWN1dG9yL25vZGVBZ2cuaCIKICNpbmNsdWRlICJleGVjdXRvci9ub2RlSGFz aC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5o IgpAQCAtMjE1NCw3ICsyMTU1LDcgQEAgY29zdF9hZ2coUGF0aCAqcGF0aCwgUGxhbm5lckluZm8g KnJvb3QsCiAJCSBpbnQgbnVtR3JvdXBDb2xzLCBkb3VibGUgbnVtR3JvdXBzLAogCQkgTGlzdCAq cXVhbHMsCiAJCSBDb3N0IGlucHV0X3N0YXJ0dXBfY29zdCwgQ29zdCBpbnB1dF90b3RhbF9jb3N0 LAotCQkgZG91YmxlIGlucHV0X3R1cGxlcykKKwkJIGRvdWJsZSBpbnB1dF90dXBsZXMsIGRvdWJs ZSBpbnB1dF93aWR0aCkKIHsKIAlkb3VibGUJCW91dHB1dF90dXBsZXM7CiAJQ29zdAkJc3RhcnR1 cF9jb3N0OwpAQCAtMjIyMCwyMCArMjIyMSw2OSBAQCBjb3N0X2FnZyhQYXRoICpwYXRoLCBQbGFu bmVySW5mbyAqcm9vdCwKIAkJdG90YWxfY29zdCArPSBhZ2djb3N0cy0+ZmluYWxDb3N0LnBlcl90 dXBsZSAqIG51bUdyb3VwczsKIAkJdG90YWxfY29zdCArPSBjcHVfdHVwbGVfY29zdCAqIG51bUdy b3VwczsKIAkJb3V0cHV0X3R1cGxlcyA9IG51bUdyb3VwczsKKworCQkvKgorCQkgKiBXZSBkb24n dCBuZWVkIHRvIGNvbXB1dGUgdGhlIGRpc2sgY29zdHMgb2YgaGFzaCBhZ2dyZWdhdGlvbiBoZXJl LAorCQkgKiBiZWNhdXNlIHRoZSBwbGFubmVyIGRvZXMgbm90IGNob29zZSBoYXNoIGFnZ3JlZ2F0 aW9uIGZvciBncm91cGluZworCQkgKiBzZXRzIHRoYXQgaXQgZG9lc24ndCBleHBlY3QgdG8gZml0 IGluIG1lbW9yeS4KKwkJICovCiAJfQogCWVsc2UKIAl7CisJCWRvdWJsZSBoYXNoZW50cnlzaXpl ID0gaGFzaF9hZ2dfZW50cnlfc2l6ZSgKKwkJCQlhZ2djb3N0cy0+bnVtQWdncywgaW5wdXRfd2lk dGgsIGFnZ2Nvc3RzLT50cmFuc2l0aW9uU3BhY2UpOworCQlkb3VibGUJbmJhdGNoZXMJID0KKwkJ CShudW1Hcm91cHMgKiBoYXNoZW50cnlzaXplKSAvICh3b3JrX21lbSAqIDEwMjRMKTsKKwkJZG91 YmxlCXBhZ2VzX3dyaXR0ZW4gPSAwLjA7CisJCWRvdWJsZQlwYWdlc19yZWFkID0gMC4wOworCiAJ CS8qIG11c3QgYmUgQUdHX0hBU0hFRCAqLwogCQlzdGFydHVwX2Nvc3QgPSBpbnB1dF90b3RhbF9j b3N0OwogCQlpZiAoIWVuYWJsZV9oYXNoYWdnKQogCQkJc3RhcnR1cF9jb3N0ICs9IGRpc2FibGVf Y29zdDsKIAkJc3RhcnR1cF9jb3N0ICs9IGFnZ2Nvc3RzLT50cmFuc0Nvc3Quc3RhcnR1cDsKIAkJ c3RhcnR1cF9jb3N0ICs9IGFnZ2Nvc3RzLT50cmFuc0Nvc3QucGVyX3R1cGxlICogaW5wdXRfdHVw bGVzOworCQkvKiBjb3N0IG9mIGNvbXB1dGluZyBoYXNoIHZhbHVlICovCiAJCXN0YXJ0dXBfY29z dCArPSAoY3B1X29wZXJhdG9yX2Nvc3QgKiBudW1Hcm91cENvbHMpICogaW5wdXRfdHVwbGVzOwog CQlzdGFydHVwX2Nvc3QgKz0gYWdnY29zdHMtPmZpbmFsQ29zdC5zdGFydHVwOworCisJCS8qCisJ CSAqIEFkZCB0aGUgZGlzayBjb3N0cyBvZiBoYXNoIGFnZ3JlZ2F0aW9uIHRoYXQgc3BpbGxzIHRv IGRpc2suCisJCSAqCisJCSAqIEdyb3VwcyB0aGF0IGdvIGludG8gdGhlIGhhc2ggdGFibGUgc3Rh eSBpbiBtZW1vcnkgdW50aWwgZmluYWxpemVkLAorCQkgKiBzbyBzcGlsbGluZyBhbmQgcmVwcm9j ZXNzaW5nIHR1cGxlcyBkb2Vzbid0IGluY3VyIGFkZGl0aW9uYWwKKwkJICogaW52b2NhdGlvbnMg b2YgdHJhbnNDb3N0IG9yIGZpbmFsQ29zdC4gRnVydGhlcm1vcmUsIHRoZSBjb21wdXRlZAorCQkg KiBoYXNoIHZhbHVlIGlzIHN0b3JlZCB3aXRoIHRoZSBzcGlsbGVkIHR1cGxlcywgc28gd2UgZG9u J3QgaW5jdXIKKwkJICogZXh0cmEgaW52b2NhdGlvbnMgb2YgdGhlIGhhc2ggZnVuY3Rpb24uCisJ CSAqCisJCSAqIFRoZSBkaXNrIGNvc3QgZGVwZW5kcyBvbiB0aGUgZGVwdGggb2YgcmVjdXJzaW9u OyBlYWNoIGxldmVsCisJCSAqIHJlcXVpcmluZyBvbmUgYWRkaXRpb25hbCB3cml0ZSBhbmQgdGhl biByZWFkIG9mIGEgdHVwbGUuIFdyaXRlcyBhcmUKKwkJICogcmFuZG9tIGFuZCByZWFkcyBhcmUg c2VxdWVudGlhbCwgc28gd2UgYXNzdW1lIDEvMiByYW5kb20gYW5kIGhhbGYKKwkJICogc2VxdWVu dGlhbC4KKwkJICoKKwkJICogSGFzaCBBZ2cgYmVnaW5zIHJldHVybmluZyB0dXBsZXMgYWZ0ZXIg dGhlIGZpcnN0IGJhdGNoIGlzCisJCSAqIGNvbXBsZXRlLiBBY2NydWUgd3JpdGVzIChzcGlsbGVk IHR1cGxlcykgdG8gc3RhcnR1cF9jb3N0IGFuZCByZWFkcworCQkgKiBvbmx5IHRvIHRvdGFsX2Nv c3QuIFRoaXMgaXMgbm90IHBlcmZlY3Q7IGl0IHBlbmFsaXplcyBzdGFydHVwX2Nvc3QKKwkJICog aW4gdGhlIGNhc2Ugb2YgcmVjdXJzaXZlIHNwaWxscy4gQWxzbywgdHJhbnNDb3N0IGlzIGVudGly ZWx5CisJCSAqIGNvdW50ZWQgaW4gc3RhcnR1cF9jb3N0OyBidXQgc29tZSBvZiB0aGF0IGNvc3Qg Y291bGQgYmUgY291bnRlZAorCQkgKiBvbmx5IGFnYWluc3QgdG90YWxfY29zdC4KKwkJICovCisJ CWlmICghaGFzaGFnZ19tZW1fb3ZlcmZsb3cgJiYgbmJhdGNoZXMgPiAxLjApCisJCXsKKwkJCWRv dWJsZSBkZXB0aDsKKwkJCWRvdWJsZSBwYWdlczsKKworCQkJcGFnZXMgPSByZWxhdGlvbl9ieXRl X3NpemUoaW5wdXRfdHVwbGVzLCBpbnB1dF93aWR0aCkgLyBCTENLU1o7CisJCQlkZXB0aCA9IGNl aWwoIGxvZyhuYmF0Y2hlcyAtIDEpIC8gbG9nKEhBU0hBR0dfTUFYX1BBUlRJVElPTlMpICk7CisJ CQlwYWdlc193cml0dGVuID0gcGFnZXNfcmVhZCA9IHBhZ2VzICogZGVwdGg7CisJCQlzdGFydHVw X2Nvc3QgKz0gcGFnZXNfd3JpdHRlbiAqIHJhbmRvbV9wYWdlX2Nvc3Q7CisJCX0KKwogCQl0b3Rh bF9jb3N0ID0gc3RhcnR1cF9jb3N0OwogCQl0b3RhbF9jb3N0ICs9IGFnZ2Nvc3RzLT5maW5hbENv c3QucGVyX3R1cGxlICogbnVtR3JvdXBzOworCQkvKiBjb3N0IG9mIHJldHJpZXZpbmcgZnJvbSBo YXNoIHRhYmxlICovCiAJCXRvdGFsX2Nvc3QgKz0gY3B1X3R1cGxlX2Nvc3QgKiBudW1Hcm91cHM7 CisJCXRvdGFsX2Nvc3QgKz0gcGFnZXNfcmVhZCAqIHNlcV9wYWdlX2Nvc3Q7CiAJCW91dHB1dF90 dXBsZXMgPSBudW1Hcm91cHM7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9jcmVhdGVwbGFuLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVw bGFuLmMKaW5kZXggOGM4YjRmOGVkNjkuLjQ2NWI5MzNmMmVjIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BsYW4vY3JlYXRlcGxhbi5jCkBAIC0xNjQ0LDYgKzE2NDQsNyBAQCBjcmVhdGVfdW5pcXVl X3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIFVuaXF1ZVBhdGggKmJlc3RfcGF0aCwgaW50IGZsYWdz KQogCQkJCQkJCQkgTklMLAogCQkJCQkJCQkgTklMLAogCQkJCQkJCQkgYmVzdF9wYXRoLT5wYXRo LnJvd3MsCisJCQkJCQkJCSAwLAogCQkJCQkJCQkgc3VicGxhbik7CiAJfQogCWVsc2UKQEAgLTIw OTYsNiArMjA5Nyw3IEBAIGNyZWF0ZV9hZ2dfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgQWdnUGF0 aCAqYmVzdF9wYXRoKQogCQkJCQlOSUwsCiAJCQkJCU5JTCwKIAkJCQkJYmVzdF9wYXRoLT5udW1H cm91cHMsCisJCQkJCWJlc3RfcGF0aC0+dHJhbnNpdGlvblNwYWNlLAogCQkJCQlzdWJwbGFuKTsK IAogCWNvcHlfZ2VuZXJpY19wYXRoX2luZm8oJnBsYW4tPnBsYW4sIChQYXRoICopIGJlc3RfcGF0 aCk7CkBAIC0yMjU3LDYgKzIyNTksNyBAQCBjcmVhdGVfZ3JvdXBpbmdzZXRzX3BsYW4oUGxhbm5l ckluZm8gKnJvb3QsIEdyb3VwaW5nU2V0c1BhdGggKmJlc3RfcGF0aCkKIAkJCQkJCQkJCQkgcm9s bHVwLT5nc2V0cywKIAkJCQkJCQkJCQkgTklMLAogCQkJCQkJCQkJCSByb2xsdXAtPm51bUdyb3Vw cywKKwkJCQkJCQkJCQkgYmVzdF9wYXRoLT50cmFuc2l0aW9uU3BhY2UsCiAJCQkJCQkJCQkJIHNv cnRfcGxhbik7CiAKIAkJCS8qCkBAIC0yMjk1LDYgKzIyOTgsNyBAQCBjcmVhdGVfZ3JvdXBpbmdz ZXRzX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIEdyb3VwaW5nU2V0c1BhdGggKmJlc3RfcGF0aCkK IAkJCQkJCXJvbGx1cC0+Z3NldHMsCiAJCQkJCQljaGFpbiwKIAkJCQkJCXJvbGx1cC0+bnVtR3Jv dXBzLAorCQkJCQkJYmVzdF9wYXRoLT50cmFuc2l0aW9uU3BhY2UsCiAJCQkJCQlzdWJwbGFuKTsK IAogCQkvKiBDb3B5IGNvc3QgZGF0YSBmcm9tIFBhdGggdG8gUGxhbiAqLwpAQCAtNjE5NCw4ICs2 MTk4LDggQEAgQWdnICoKIG1ha2VfYWdnKExpc3QgKnRsaXN0LCBMaXN0ICpxdWFsLAogCQkgQWdn U3RyYXRlZ3kgYWdnc3RyYXRlZ3ksIEFnZ1NwbGl0IGFnZ3NwbGl0LAogCQkgaW50IG51bUdyb3Vw Q29scywgQXR0ck51bWJlciAqZ3JwQ29sSWR4LCBPaWQgKmdycE9wZXJhdG9ycywgT2lkICpncnBD b2xsYXRpb25zLAotCQkgTGlzdCAqZ3JvdXBpbmdTZXRzLCBMaXN0ICpjaGFpbiwKLQkJIGRvdWJs ZSBkTnVtR3JvdXBzLCBQbGFuICpsZWZ0dHJlZSkKKwkJIExpc3QgKmdyb3VwaW5nU2V0cywgTGlz dCAqY2hhaW4sIGRvdWJsZSBkTnVtR3JvdXBzLAorCQkgaW50MzIgdHJhbnNpdGlvblNwYWNlLCBQ bGFuICpsZWZ0dHJlZSkKIHsKIAlBZ2cJCSAgICpub2RlID0gbWFrZU5vZGUoQWdnKTsKIAlQbGFu CSAgICpwbGFuID0gJm5vZGUtPnBsYW47CkBAIC02MjExLDYgKzYyMTUsNyBAQCBtYWtlX2FnZyhM aXN0ICp0bGlzdCwgTGlzdCAqcXVhbCwKIAlub2RlLT5ncnBPcGVyYXRvcnMgPSBncnBPcGVyYXRv cnM7CiAJbm9kZS0+Z3JwQ29sbGF0aW9ucyA9IGdycENvbGxhdGlvbnM7CiAJbm9kZS0+bnVtR3Jv dXBzID0gbnVtR3JvdXBzOworCW5vZGUtPnRyYW5zaXRpb25TcGFjZSA9IHRyYW5zaXRpb25TcGFj ZTsKIAlub2RlLT5hZ2dQYXJhbXMgPSBOVUxMOwkJLyogU1NfZmluYWxpemVfcGxhbigpIHdpbGwg ZmlsbCB0aGlzICovCiAJbm9kZS0+Z3JvdXBpbmdTZXRzID0gZ3JvdXBpbmdTZXRzOwogCW5vZGUt PmNoYWluID0gY2hhaW47CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9w bGFubmVyLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKaW5kZXggY2I1 NGIxNTUwN2IuLmE1Njg2ZDgyMmIzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGxhbi9wbGFubmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5j CkBAIC00ODY3LDEzICs0ODY3LDggQEAgY3JlYXRlX2Rpc3RpbmN0X3BhdGhzKFBsYW5uZXJJbmZv ICpyb290LAogCQlhbGxvd19oYXNoID0gZmFsc2U7CQkvKiBwb2xpY3ktYmFzZWQgZGVjaXNpb24g bm90IHRvIGhhc2ggKi8KIAllbHNlCiAJewotCQlTaXplCQloYXNoZW50cnlzaXplOwotCi0JCS8q IEVzdGltYXRlIHBlci1oYXNoLWVudHJ5IHNwYWNlIGF0IHR1cGxlIHdpZHRoLi4uICovCi0JCWhh c2hlbnRyeXNpemUgPSBNQVhBTElHTihjaGVhcGVzdF9pbnB1dF9wYXRoLT5wYXRodGFyZ2V0LT53 aWR0aCkgKwotCQkJTUFYQUxJR04oU2l6ZW9mTWluaW1hbFR1cGxlSGVhZGVyKTsKLQkJLyogcGx1 cyB0aGUgcGVyLWhhc2gtZW50cnkgb3ZlcmhlYWQgKi8KLQkJaGFzaGVudHJ5c2l6ZSArPSBoYXNo X2FnZ19lbnRyeV9zaXplKDApOworCQlTaXplCQloYXNoZW50cnlzaXplID0gaGFzaF9hZ2dfZW50 cnlfc2l6ZSgKKwkJCTAsIGNoZWFwZXN0X2lucHV0X3BhdGgtPnBhdGh0YXJnZXQtPndpZHRoLCAw KTsKIAogCQkvKiBBbGxvdyBoYXNoaW5nIG9ubHkgaWYgaGFzaHRhYmxlIGlzIHByZWRpY3RlZCB0 byBmaXQgaW4gd29ya19tZW0gKi8KIAkJYWxsb3dfaGFzaCA9IChoYXNoZW50cnlzaXplICogbnVt RGlzdGluY3RSb3dzIDw9IHdvcmtfbWVtICogMTAyNEwpOwpAQCAtNjUzMyw3ICs2NTI4LDggQEAg YWRkX3BhdGhzX3RvX2dyb3VwaW5nX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAq aW5wdXRfcmVsLAogCQkJICogd2VyZSB1bmFibGUgdG8gc29ydCBhYm92ZSwgdGhlbiB3ZSdkIGJl dHRlciBnZW5lcmF0ZSBhIFBhdGgsIHNvCiAJCQkgKiB0aGF0IHdlIGF0IGxlYXN0IGhhdmUgb25l LgogCQkJICovCi0JCQlpZiAoaGFzaGFnZ3RhYmxlc2l6ZSA8IHdvcmtfbWVtICogMTAyNEwgfHwK KwkJCWlmIChlbmFibGVfaGFzaGFnZ19zcGlsbCB8fAorCQkJCWhhc2hhZ2d0YWJsZXNpemUgPCB3 b3JrX21lbSAqIDEwMjRMIHx8CiAJCQkJZ3JvdXBlZF9yZWwtPnBhdGhsaXN0ID09IE5JTCkKIAkJ CXsKIAkJCQkvKgpAQCAtNjU2Niw3ICs2NTYyLDggQEAgYWRkX3BhdGhzX3RvX2dyb3VwaW5nX3Jl bChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAogCQkJCQkJCQkJCQkJ CQkgIGFnZ19maW5hbF9jb3N0cywKIAkJCQkJCQkJCQkJCQkJICBkTnVtR3JvdXBzKTsKIAotCQkJ aWYgKGhhc2hhZ2d0YWJsZXNpemUgPCB3b3JrX21lbSAqIDEwMjRMKQorCQkJaWYgKGVuYWJsZV9o YXNoYWdnX3NwaWxsIHx8CisJCQkJaGFzaGFnZ3RhYmxlc2l6ZSA8IHdvcmtfbWVtICogMTAyNEwp CiAJCQkJYWRkX3BhdGgoZ3JvdXBlZF9yZWwsIChQYXRoICopCiAJCQkJCQkgY3JlYXRlX2FnZ19w YXRoKHJvb3QsCiAJCQkJCQkJCQkJIGdyb3VwZWRfcmVsLApAQCAtNjgzNSw3ICs2ODMyLDcgQEAg Y3JlYXRlX3BhcnRpYWxfZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsCiAJCSAqIFRl bnRhdGl2ZWx5IHByb2R1Y2UgYSBwYXJ0aWFsIEhhc2hBZ2cgUGF0aCwgZGVwZW5kaW5nIG9uIGlm IGl0CiAJCSAqIGxvb2tzIGFzIGlmIHRoZSBoYXNoIHRhYmxlIHdpbGwgZml0IGluIHdvcmtfbWVt LgogCQkgKi8KLQkJaWYgKGhhc2hhZ2d0YWJsZXNpemUgPCB3b3JrX21lbSAqIDEwMjRMICYmCisJ CWlmICgoZW5hYmxlX2hhc2hhZ2dfc3BpbGwgfHwgaGFzaGFnZ3RhYmxlc2l6ZSA8IHdvcmtfbWVt ICogMTAyNEwpICYmCiAJCQljaGVhcGVzdF90b3RhbF9wYXRoICE9IE5VTEwpCiAJCXsKIAkJCWFk ZF9wYXRoKHBhcnRpYWxseV9ncm91cGVkX3JlbCwgKFBhdGggKikKQEAgLTY4NjIsNyArNjg1OSw3 IEBAIGNyZWF0ZV9wYXJ0aWFsX2dyb3VwaW5nX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LAogCQkJ CQkJCQkJICAgZE51bVBhcnRpYWxQYXJ0aWFsR3JvdXBzKTsKIAogCQkvKiBEbyB0aGUgc2FtZSBm b3IgcGFydGlhbCBwYXRocy4gKi8KLQkJaWYgKGhhc2hhZ2d0YWJsZXNpemUgPCB3b3JrX21lbSAq IDEwMjRMICYmCisJCWlmICgoZW5hYmxlX2hhc2hhZ2dfc3BpbGwgfHwgaGFzaGFnZ3RhYmxlc2l6 ZSA8IHdvcmtfbWVtICogMTAyNEwpICYmCiAJCQljaGVhcGVzdF9wYXJ0aWFsX3BhdGggIT0gTlVM TCkKIAkJewogCQkJYWRkX3BhcnRpYWxfcGF0aChwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwsIChQYXRo ICopCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwdW5pb24uYyBi L3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1bmlvbi5jCmluZGV4IGIwMWM5YmJhZTdk Li41ZjhmYzUwZjhkMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJl cHVuaW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMKQEAg LTEwNzIsNyArMTA3Miw3IEBAIGNob29zZV9oYXNoZWRfc2V0b3AoUGxhbm5lckluZm8gKnJvb3Qs IExpc3QgKmdyb3VwQ2xhdXNlcywKIAkJCSBudW1Hcm91cENvbHMsIGROdW1Hcm91cHMsCiAJCQkg TklMLAogCQkJIGlucHV0X3BhdGgtPnN0YXJ0dXBfY29zdCwgaW5wdXRfcGF0aC0+dG90YWxfY29z dCwKLQkJCSBpbnB1dF9wYXRoLT5yb3dzKTsKKwkJCSBpbnB1dF9wYXRoLT5yb3dzLCBpbnB1dF9w YXRoLT5wYXRodGFyZ2V0LT53aWR0aCk7CiAKIAkvKgogCSAqIE5vdyBmb3IgdGhlIHNvcnRlZCBj YXNlLiAgTm90ZSB0aGF0IHRoZSBpbnB1dCBpcyAqYWx3YXlzKiB1bnNvcnRlZCwKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCmluZGV4IDYwYzkzZWU3YzU5Li4xY2I0ZmVkMWY4MSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYworKysgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCkBAIC0xNzA0LDcgKzE3MDQsOCBA QCBjcmVhdGVfdW5pcXVlX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwg UGF0aCAqc3VicGF0aCwKIAkJCQkJIE5JTCwKIAkJCQkJIHN1YnBhdGgtPnN0YXJ0dXBfY29zdCwK IAkJCQkJIHN1YnBhdGgtPnRvdGFsX2Nvc3QsCi0JCQkJCSByZWwtPnJvd3MpOworCQkJCQkgcmVs LT5yb3dzLAorCQkJCQkgc3VicGF0aC0+cGF0aHRhcmdldC0+d2lkdGgpOwogCX0KIAogCWlmIChz amluZm8tPnNlbWlfY2FuX2J0cmVlICYmIHNqaW5mby0+c2VtaV9jYW5faGFzaCkKQEAgLTI5NDks NiArMjk1MCw3IEBAIGNyZWF0ZV9hZ2dfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAlwYXRobm9k ZS0+YWdnc3RyYXRlZ3kgPSBhZ2dzdHJhdGVneTsKIAlwYXRobm9kZS0+YWdnc3BsaXQgPSBhZ2dz cGxpdDsKIAlwYXRobm9kZS0+bnVtR3JvdXBzID0gbnVtR3JvdXBzOworCXBhdGhub2RlLT50cmFu c2l0aW9uU3BhY2UgPSBhZ2djb3N0cyA/IGFnZ2Nvc3RzLT50cmFuc2l0aW9uU3BhY2UgOiAwOwog CXBhdGhub2RlLT5ncm91cENsYXVzZSA9IGdyb3VwQ2xhdXNlOwogCXBhdGhub2RlLT5xdWFsID0g cXVhbDsKIApAQCAtMjk1Nyw3ICsyOTU5LDcgQEAgY3JlYXRlX2FnZ19wYXRoKFBsYW5uZXJJbmZv ICpyb290LAogCQkJIGxpc3RfbGVuZ3RoKGdyb3VwQ2xhdXNlKSwgbnVtR3JvdXBzLAogCQkJIHF1 YWwsCiAJCQkgc3VicGF0aC0+c3RhcnR1cF9jb3N0LCBzdWJwYXRoLT50b3RhbF9jb3N0LAotCQkJ IHN1YnBhdGgtPnJvd3MpOworCQkJIHN1YnBhdGgtPnJvd3MsIHN1YnBhdGgtPnBhdGh0YXJnZXQt PndpZHRoKTsKIAogCS8qIGFkZCB0bGlzdCBldmFsIGNvc3QgZm9yIGVhY2ggb3V0cHV0IHJvdyAq LwogCXBhdGhub2RlLT5wYXRoLnN0YXJ0dXBfY29zdCArPSB0YXJnZXQtPmNvc3Quc3RhcnR1cDsK QEAgLTMwMzYsNiArMzAzOCw3IEBAIGNyZWF0ZV9ncm91cGluZ3NldHNfcGF0aChQbGFubmVySW5m byAqcm9vdCwKIAlwYXRobm9kZS0+YWdnc3RyYXRlZ3kgPSBhZ2dzdHJhdGVneTsKIAlwYXRobm9k ZS0+cm9sbHVwcyA9IHJvbGx1cHM7CiAJcGF0aG5vZGUtPnF1YWwgPSBoYXZpbmdfcXVhbDsKKwlw YXRobm9kZS0+dHJhbnNpdGlvblNwYWNlID0gYWdnX2Nvc3RzID8gYWdnX2Nvc3RzLT50cmFuc2l0 aW9uU3BhY2UgOiAwOwogCiAJQXNzZXJ0KHJvbGx1cHMgIT0gTklMKTsKIAlBc3NlcnQoYWdnc3Ry YXRlZ3kgIT0gQUdHX1BMQUlOIHx8IGxpc3RfbGVuZ3RoKHJvbGx1cHMpID09IDEpOwpAQCAtMzA2 Nyw3ICszMDcwLDggQEAgY3JlYXRlX2dyb3VwaW5nc2V0c19wYXRoKFBsYW5uZXJJbmZvICpyb290 LAogCQkJCQkgaGF2aW5nX3F1YWwsCiAJCQkJCSBzdWJwYXRoLT5zdGFydHVwX2Nvc3QsCiAJCQkJ CSBzdWJwYXRoLT50b3RhbF9jb3N0LAotCQkJCQkgc3VicGF0aC0+cm93cyk7CisJCQkJCSBzdWJw YXRoLT5yb3dzLAorCQkJCQkgc3VicGF0aC0+cGF0aHRhcmdldC0+d2lkdGgpOwogCQkJaXNfZmly c3QgPSBmYWxzZTsKIAkJCWlmICghcm9sbHVwLT5pc19oYXNoZWQpCiAJCQkJaXNfZmlyc3Rfc29y dCA9IGZhbHNlOwpAQCAtMzA5MCw3ICszMDk0LDggQEAgY3JlYXRlX2dyb3VwaW5nc2V0c19wYXRo KFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJIHJvbGx1cC0+bnVtR3JvdXBzLAogCQkJCQkJIGhh dmluZ19xdWFsLAogCQkJCQkJIDAuMCwgMC4wLAotCQkJCQkJIHN1YnBhdGgtPnJvd3MpOworCQkJ CQkJIHN1YnBhdGgtPnJvd3MsCisJCQkJCQkgc3VicGF0aC0+cGF0aHRhcmdldC0+d2lkdGgpOwog CQkJCWlmICghcm9sbHVwLT5pc19oYXNoZWQpCiAJCQkJCWlzX2ZpcnN0X3NvcnQgPSBmYWxzZTsK IAkJCX0KQEAgLTMxMTUsNyArMzEyMCw4IEBAIGNyZWF0ZV9ncm91cGluZ3NldHNfcGF0aChQbGFu bmVySW5mbyAqcm9vdCwKIAkJCQkJCSBoYXZpbmdfcXVhbCwKIAkJCQkJCSBzb3J0X3BhdGguc3Rh cnR1cF9jb3N0LAogCQkJCQkJIHNvcnRfcGF0aC50b3RhbF9jb3N0LAotCQkJCQkJIHNvcnRfcGF0 aC5yb3dzKTsKKwkJCQkJCSBzb3J0X3BhdGgucm93cywKKwkJCQkJCSBzdWJwYXRoLT5wYXRodGFy Z2V0LT53aWR0aCk7CiAJCQl9CiAKIAkJCXBhdGhub2RlLT5wYXRoLnRvdGFsX2Nvc3QgKz0gYWdn X3BhdGgudG90YWxfY29zdDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxm dW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKaW5kZXggZmYwMmI1YWFm YWIuLjQ1YzcxNTM4NWM3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVu Y3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYwpAQCAtMzUyNiwxNiAr MzUyNiw4IEBAIGRvdWJsZQogZXN0aW1hdGVfaGFzaGFnZ190YWJsZXNpemUoUGF0aCAqcGF0aCwg Y29uc3QgQWdnQ2xhdXNlQ29zdHMgKmFnZ19jb3N0cywKIAkJCQkJCSAgIGRvdWJsZSBkTnVtR3Jv dXBzKQogewotCVNpemUJCWhhc2hlbnRyeXNpemU7Ci0KLQkvKiBFc3RpbWF0ZSBwZXItaGFzaC1l bnRyeSBzcGFjZSBhdCB0dXBsZSB3aWR0aC4uLiAqLwotCWhhc2hlbnRyeXNpemUgPSBNQVhBTElH TihwYXRoLT5wYXRodGFyZ2V0LT53aWR0aCkgKwotCQlNQVhBTElHTihTaXplb2ZNaW5pbWFsVHVw bGVIZWFkZXIpOwotCi0JLyogcGx1cyBzcGFjZSBmb3IgcGFzcy1ieS1yZWYgdHJhbnNpdGlvbiB2 YWx1ZXMuLi4gKi8KLQloYXNoZW50cnlzaXplICs9IGFnZ19jb3N0cy0+dHJhbnNpdGlvblNwYWNl OwotCS8qIHBsdXMgdGhlIHBlci1oYXNoLWVudHJ5IG92ZXJoZWFkICovCi0JaGFzaGVudHJ5c2l6 ZSArPSBoYXNoX2FnZ19lbnRyeV9zaXplKGFnZ19jb3N0cy0+bnVtQWdncyk7CisJU2l6ZQkJaGFz aGVudHJ5c2l6ZSA9IGhhc2hfYWdnX2VudHJ5X3NpemUoCisJCWFnZ19jb3N0cy0+bnVtQWdncywg cGF0aC0+cGF0aHRhcmdldC0+d2lkdGgsIGFnZ19jb3N0cy0+dHJhbnNpdGlvblNwYWNlKTsKIAog CS8qCiAJICogTm90ZSB0aGF0IHRoaXMgZGlzcmVnYXJkcyB0aGUgZWZmZWN0IG9mIGZpbGwtZmFj dG9yIGFuZCBncm93dGggcG9saWN5CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9l eGVjRXhwci5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaAppbmRleCBkMjFkYmVh ZDBhMi4uZTUwYTdhZDY3MTIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNF eHByLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaApAQCAtMjI2LDkgKzIy NiwxMyBAQCB0eXBlZGVmIGVudW0gRXhwckV2YWxPcAogCUVFT1BfQUdHX1NUUklDVF9JTlBVVF9D SEVDS19BUkdTLAogCUVFT1BfQUdHX1NUUklDVF9JTlBVVF9DSEVDS19OVUxMUywKIAlFRU9QX0FH R19JTklUX1RSQU5TLAorCUVFT1BfQUdHX0lOSVRfVFJBTlNfU1BJTExFRCwKIAlFRU9QX0FHR19T VFJJQ1RfVFJBTlNfQ0hFQ0ssCisJRUVPUF9BR0dfU1RSSUNUX1RSQU5TX0NIRUNLX1NQSUxMRUQs CiAJRUVPUF9BR0dfUExBSU5fVFJBTlNfQllWQUwsCisJRUVPUF9BR0dfUExBSU5fVFJBTlNfQllW QUxfU1BJTExFRCwKIAlFRU9QX0FHR19QTEFJTl9UUkFOUywKKwlFRU9QX0FHR19QTEFJTl9UUkFO U19TUElMTEVELAogCUVFT1BfQUdHX09SREVSRURfVFJBTlNfREFUVU0sCiAJRUVPUF9BR0dfT1JE RVJFRF9UUkFOU19UVVBMRSwKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhl Y3V0b3IuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKaW5kZXggNjI5OGM3Yzhj YWQuLmU4ZDg4ZjJjZTI2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRv ci5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKQEAgLTE0MCwxMSArMTQw LDE3IEBAIGV4dGVybiBUdXBsZUhhc2hUYWJsZSBCdWlsZFR1cGxlSGFzaFRhYmxlRXh0KFBsYW5T dGF0ZSAqcGFyZW50LAogZXh0ZXJuIFR1cGxlSGFzaEVudHJ5IExvb2t1cFR1cGxlSGFzaEVudHJ5 KFR1cGxlSGFzaFRhYmxlIGhhc2h0YWJsZSwKIAkJCQkJCQkJCQkgICBUdXBsZVRhYmxlU2xvdCAq c2xvdCwKIAkJCQkJCQkJCQkgICBib29sICppc25ldyk7CitleHRlcm4gVHVwbGVIYXNoRW50cnkg TG9va3VwVHVwbGVIYXNoRW50cnlIYXNoKFR1cGxlSGFzaFRhYmxlIGhhc2h0YWJsZSwKKwkJCQkJ CQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCisJCQkJCQkJCQkJCSAgIGJvb2wgKmlzbmV3 LCB1aW50MzIgaGFzaCk7CiBleHRlcm4gVHVwbGVIYXNoRW50cnkgRmluZFR1cGxlSGFzaEVudHJ5 KFR1cGxlSGFzaFRhYmxlIGhhc2h0YWJsZSwKIAkJCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNs b3QsCiAJCQkJCQkJCQkJIEV4cHJTdGF0ZSAqZXFjb21wLAogCQkJCQkJCQkJCSBGbWdySW5mbyAq aGFzaGZ1bmN0aW9ucyk7CitleHRlcm4gdWludDMyIFR1cGxlSGFzaFRhYmxlSGFzaChzdHJ1Y3Qg dHVwbGVoYXNoX2hhc2ggKnRiLAorCQkJCQkJCQkgY29uc3QgTWluaW1hbFR1cGxlIHR1cGxlKTsK IGV4dGVybiB2b2lkIFJlc2V0VHVwbGVIYXNoVGFibGUoVHVwbGVIYXNoVGFibGUgaGFzaHRhYmxl KTsKK2V4dGVybiB2b2lkIERlc3Ryb3lUdXBsZUhhc2hUYWJsZShUdXBsZUhhc2hUYWJsZSBoYXNo dGFibGUpOwogCiAvKgogICogcHJvdG90eXBlcyBmcm9tIGZ1bmN0aW9ucyBpbiBleGVjSnVuay5j CkBAIC0yNTAsNyArMjU2LDcgQEAgZXh0ZXJuIEV4cHJTdGF0ZSAqRXhlY0luaXRRdWFsKExpc3Qg KnF1YWwsIFBsYW5TdGF0ZSAqcGFyZW50KTsKIGV4dGVybiBFeHByU3RhdGUgKkV4ZWNJbml0Q2hl Y2soTGlzdCAqcXVhbCwgUGxhblN0YXRlICpwYXJlbnQpOwogZXh0ZXJuIExpc3QgKkV4ZWNJbml0 RXhwckxpc3QoTGlzdCAqbm9kZXMsIFBsYW5TdGF0ZSAqcGFyZW50KTsKIGV4dGVybiBFeHByU3Rh dGUgKkV4ZWNCdWlsZEFnZ1RyYW5zKEFnZ1N0YXRlICphZ2dzdGF0ZSwgc3RydWN0IEFnZ1N0YXRl UGVyUGhhc2VEYXRhICpwaGFzZSwKLQkJCQkJCQkJCWJvb2wgZG9Tb3J0LCBib29sIGRvSGFzaCk7 CisJCQkJCQkJCQlib29sIGRvU29ydCwgYm9vbCBkb0hhc2gsIGJvb2wgc3BpbGxlZCk7CiBleHRl cm4gRXhwclN0YXRlICpFeGVjQnVpbGRHcm91cGluZ0VxdWFsKFR1cGxlRGVzYyBsZGVzYywgVHVw bGVEZXNjIHJkZXNjLAogCQkJCQkJCQkJCSBjb25zdCBUdXBsZVRhYmxlU2xvdE9wcyAqbG9wcywg Y29uc3QgVHVwbGVUYWJsZVNsb3RPcHMgKnJvcHMsCiAJCQkJCQkJCQkJIGludCBudW1Db2xzLApk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZUFnZy5oIGIvc3JjL2luY2x1ZGUv ZXhlY3V0b3Ivbm9kZUFnZy5oCmluZGV4IDY4YzllNWY1NDAwLi4yOWJiYjliMGQwOSAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZUFnZy5oCisrKyBiL3NyYy9pbmNsdWRlL2V4 ZWN1dG9yL25vZGVBZ2cuaApAQCAtMzAyLDEzICszMDIsMTcgQEAgdHlwZWRlZiBzdHJ1Y3QgQWdn U3RhdGVQZXJIYXNoRGF0YQogCUF0dHJOdW1iZXIgKmhhc2hHcnBDb2xJZHhJbnB1dDsgLyogaGFz aCBjb2wgaW5kaWNlcyBpbiBpbnB1dCBzbG90ICovCiAJQXR0ck51bWJlciAqaGFzaEdycENvbElk eEhhc2g7CS8qIGluZGljZXMgaW4gaGFzaCB0YWJsZSB0dXBsZXMgKi8KIAlBZ2cJCSAgICphZ2du b2RlOwkJLyogb3JpZ2luYWwgQWdnIG5vZGUsIGZvciBudW1Hcm91cHMgZXRjLiAqLworCWludAkJ CW51bU5lZWRlZENvbHNJbnB1dDsgLyogbnVtYmVyIG9mIGNvbHVtbnMgbmVlZGVkIGZyb20gaW5w dXQgKi8KKwlBdHRyTnVtYmVyICphbGxOZWVkZWRDb2xzSW5wdXQ7IC8qIGFsbCBjb2x1bW5zIG5l ZWRlZCBmcm9tIGlucHV0ICovCiB9CQkJQWdnU3RhdGVQZXJIYXNoRGF0YTsKIAorI2RlZmluZSBI QVNIQUdHX01BWF9QQVJUSVRJT05TIDI1NgogCiBleHRlcm4gQWdnU3RhdGUgKkV4ZWNJbml0QWdn KEFnZyAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpOwogZXh0ZXJuIHZvaWQgRXhl Y0VuZEFnZyhBZ2dTdGF0ZSAqbm9kZSk7CiBleHRlcm4gdm9pZCBFeGVjUmVTY2FuQWdnKEFnZ1N0 YXRlICpub2RlKTsKIAotZXh0ZXJuIFNpemUgaGFzaF9hZ2dfZW50cnlfc2l6ZShpbnQgbnVtQWdn cyk7CitleHRlcm4gU2l6ZSBoYXNoX2FnZ19lbnRyeV9zaXplKGludCBudW1BZ2dzLCBTaXplIHR1 cGxlV2lkdGgsCisJCQkJCQkJCVNpemUgdHJhbnNpdGlvblNwYWNlKTsKIAogI2VuZGlmCQkJCQkJ CS8qIE5PREVBR0dfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVz LmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCAwYzJhNzdhYWY4ZC4uOGQ0 YTM2YTM1MzggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCisrKyBi L3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCkBAIC0yMDY2LDEzICsyMDY2LDMwIEBAIHR5 cGVkZWYgc3RydWN0IEFnZ1N0YXRlCiAJSGVhcFR1cGxlCWdycF9maXJzdFR1cGxlOyAvKiBjb3B5 IG9mIGZpcnN0IHR1cGxlIG9mIGN1cnJlbnQgZ3JvdXAgKi8KIAkvKiB0aGVzZSBmaWVsZHMgYXJl IHVzZWQgaW4gQUdHX0hBU0hFRCBhbmQgQUdHX01JWEVEIG1vZGVzOiAqLwogCWJvb2wJCXRhYmxl X2ZpbGxlZDsJLyogaGFzaCB0YWJsZSBmaWxsZWQgeWV0PyAqLwotCWludAkJCW51bV9oYXNoZXM7 CisJaW50CQkJbnVtX2hhc2hlczsJCS8qIG51bWJlciBvZiBoYXNoIHRhYmxlcyBhY3RpdmUgYXQg b25jZSAqLworCWJvb2wJCWhhc2hfc3BpbGxlZDsJLyogYW55IGhhc2ggdGFibGUgZXZlciBzcGls bGVkPyAqLworCWRvdWJsZQkJaGFzaGVudHJ5c2l6ZTsJLyogZXN0aW1hdGUgcmV2aXNlZCBkdXJp bmcgZXhlY3V0aW9uICovCisJc3RydWN0IEhhc2hBZ2dTcGlsbCAqaGFzaF9zcGlsbHM7IC8qIEhh c2hBZ2dTcGlsbCBmb3IgZWFjaCBoYXNoIHRhYmxlLAorCQkJCQkJCQkJCSBleGlzdHMgb25seSBk dXJpbmcgZmlyc3QgcGFzcyBpZiBzcGlsbGVkICovCisJVHVwbGVUYWJsZVNsb3QgKmhhc2hfc3Bp bGxfc2xvdDsgLyogc2xvdCBmb3IgcmVhZGluZyBmcm9tIHNwaWxsIGZpbGVzICovCisJYm9vbAkJ aGFzaF9ub19uZXdfZ3JvdXBzOwkvKiB3ZSBoaXQgYSBsaW1pdCBkdXJpbmcgdGhlIGN1cnJlbnQg YmF0Y2gKKwkJCQkJCQkJCSAgIGFuZCB3ZSBtdXN0IG5vdCBjcmVhdGUgbmV3IGdyb3VwcyAqLwor CVNpemUJCWhhc2hfbWVtX2N1cnJlbnQ7IC8qIGN1cnJlbnQgaGFzaCB0YWJsZSBtZW1vcnkgdXNh Z2UgKi8KKwlTaXplCQloYXNoX21lbV9saW1pdDsJLyogbGltaXQgYmVmb3JlIHNwaWxsaW5nIGhh c2ggdGFibGUgKi8KKwlTaXplCQloYXNoX21lbV9wZWFrOwkvKiBwZWFrIGhhc2ggdGFibGUgbWVt b3J5IHVzYWdlICovCisJbG9uZwkJaGFzaF9uZ3JvdXBzX2N1cnJlbnQ7CS8qIG51bWJlciBvZiBn cm91cHMgY3VycmVudGx5IGluCisJCQkJCQkJCQkJICAgbWVtb3J5IGluIGFsbCBoYXNoIHRhYmxl cyAqLworCWxvbmcJCWhhc2hfbmdyb3Vwc19saW1pdDsJLyogbGltaXQgYmVmb3JlIHNwaWxsaW5n IGhhc2ggdGFibGUgKi8KKwl1aW50NjQJCWhhc2hfZGlza191c2VkOyAvKiBieXRlcyBvZiBkaXNr IHNwYWNlIHVzZWQgKi8KKwlpbnQJCQloYXNoX2JhdGNoZXNfdXNlZDsJLyogYmF0Y2hlcyB1c2Vk IGR1cmluZyBlbnRpcmUgZXhlY3V0aW9uICovCisJTGlzdAkgICAqaGFzaF9iYXRjaGVzOwkvKiBo YXNoIGJhdGNoZXMgcmVtYWluaW5nIHRvIGJlIHByb2Nlc3NlZCAqLworCiAJQWdnU3RhdGVQZXJI YXNoIHBlcmhhc2g7CS8qIGFycmF5IG9mIHBlci1oYXNodGFibGUgZGF0YSAqLwogCUFnZ1N0YXRl UGVyR3JvdXAgKmhhc2hfcGVyZ3JvdXA7CS8qIGdyb3VwaW5nIHNldCBpbmRleGVkIGFycmF5IG9m CiAJCQkJCQkJCQkJICogcGVyLWdyb3VwIHBvaW50ZXJzICovCiAKIAkvKiBzdXBwb3J0IGZvciBl dmFsdWF0aW9uIG9mIGFnZyBpbnB1dCBleHByZXNzaW9uczogKi8KLSNkZWZpbmUgRklFTEROT19B R0dTVEFURV9BTExfUEVSR1JPVVBTIDM0CisjZGVmaW5lIEZJRUxETk9fQUdHU1RBVEVfQUxMX1BF UkdST1VQUyA0NwogCUFnZ1N0YXRlUGVyR3JvdXAgKmFsbF9wZXJncm91cHM7CS8qIGFycmF5IG9m IGZpcnN0IC0+cGVyZ3JvdXBzLCB0aGFuCiAJCQkJCQkJCQkJICogLT5oYXNoX3Blcmdyb3VwICov CiAJUHJvamVjdGlvbkluZm8gKmNvbWJpbmVkcHJvajsJLyogcHJvamVjdGlvbiBtYWNoaW5lcnkg Ki8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oIGIvc3JjL2luY2x1 ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggMzFiNjMxY2ZlMGYuLjYyNWE4YWVjYjc3IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9u b2Rlcy9wYXRobm9kZXMuaApAQCAtMTY2Myw2ICsxNjYzLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQWdn UGF0aAogCUFnZ1N0cmF0ZWd5IGFnZ3N0cmF0ZWd5OwkvKiBiYXNpYyBzdHJhdGVneSwgc2VlIG5v ZGVzLmggKi8KIAlBZ2dTcGxpdAlhZ2dzcGxpdDsJCS8qIGFnZy1zcGxpdHRpbmcgbW9kZSwgc2Vl IG5vZGVzLmggKi8KIAlkb3VibGUJCW51bUdyb3VwczsJCS8qIGVzdGltYXRlZCBudW1iZXIgb2Yg Z3JvdXBzIGluIGlucHV0ICovCisJaW50MzIJCXRyYW5zaXRpb25TcGFjZTsJLyogZXN0aW1hdGVk IHRyYW5zaXRpb24gc3RhdGUgc2l6ZSAqLwogCUxpc3QJICAgKmdyb3VwQ2xhdXNlOwkvKiBhIGxp c3Qgb2YgU29ydEdyb3VwQ2xhdXNlJ3MgKi8KIAlMaXN0CSAgICpxdWFsOwkJCS8qIHF1YWxzIChI QVZJTkcgcXVhbHMpLCBpZiBhbnkgKi8KIH0gQWdnUGF0aDsKQEAgLTE3MDAsNiArMTcwMSw3IEBA IHR5cGVkZWYgc3RydWN0IEdyb3VwaW5nU2V0c1BhdGgKIAlBZ2dTdHJhdGVneSBhZ2dzdHJhdGVn eTsJLyogYmFzaWMgc3RyYXRlZ3kgKi8KIAlMaXN0CSAgICpyb2xsdXBzOwkJLyogbGlzdCBvZiBS b2xsdXBEYXRhICovCiAJTGlzdAkgICAqcXVhbDsJCQkvKiBxdWFscyAoSEFWSU5HIHF1YWxzKSwg aWYgYW55ICovCisJaW50MzIJCXRyYW5zaXRpb25TcGFjZTsJLyogZXN0aW1hdGVkIHRyYW5zaXRp b24gc3RhdGUgc2l6ZSAqLwogfSBHcm91cGluZ1NldHNQYXRoOwogCiAvKgpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9k ZXMuaAppbmRleCA0NzdiNGRhMTkyYy4uZWEzZTBhNjQzZWMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5o CkBAIC04MTMsNiArODEzLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQWdnCiAJT2lkCQkgICAqZ3JwT3Bl cmF0b3JzOwkvKiBlcXVhbGl0eSBvcGVyYXRvcnMgdG8gY29tcGFyZSB3aXRoICovCiAJT2lkCQkg ICAqZ3JwQ29sbGF0aW9uczsKIAlsb25nCQludW1Hcm91cHM7CQkvKiBlc3RpbWF0ZWQgbnVtYmVy IG9mIGdyb3VwcyBpbiBpbnB1dCAqLworCWludDMyCQl0cmFuc2l0aW9uU3BhY2U7CS8qIGVzdGlt YXRlZCB0cmFuc2l0aW9uIHN0YXRlIHNpemUgKi8KIAlCaXRtYXBzZXQgICphZ2dQYXJhbXM7CQkv KiBJRHMgb2YgUGFyYW1zIHVzZWQgaW4gQWdncmVmIGlucHV0cyAqLwogCS8qIE5vdGU6IHBsYW5u ZXIgcHJvdmlkZXMgbnVtR3JvdXBzICYgYWdnUGFyYW1zIG9ubHkgaW4gSEFTSEVEL01JWEVEIGNh c2UgKi8KIAlMaXN0CSAgICpncm91cGluZ1NldHM7CS8qIGdyb3VwaW5nIHNldHMgdG8gdXNlICov CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oIGIvc3JjL2luY2x1ZGUv b3B0aW1pemVyL2Nvc3QuaAppbmRleCBiNzJlMmQwODI5MC4uZmE2YWQ1ZTU4NTcgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1p emVyL2Nvc3QuaApAQCAtMTE1LDcgKzExNSw3IEBAIGV4dGVybiB2b2lkIGNvc3RfYWdnKFBhdGgg KnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkgaW50IG51bUdyb3VwQ29scywgZG91Ymxl IG51bUdyb3VwcywKIAkJCQkJIExpc3QgKnF1YWxzLAogCQkJCQkgQ29zdCBpbnB1dF9zdGFydHVw X2Nvc3QsIENvc3QgaW5wdXRfdG90YWxfY29zdCwKLQkJCQkJIGRvdWJsZSBpbnB1dF90dXBsZXMp OworCQkJCQkgZG91YmxlIGlucHV0X3R1cGxlcywgZG91YmxlIGlucHV0X3dpZHRoKTsKIGV4dGVy biB2b2lkIGNvc3Rfd2luZG93YWdnKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCQkJ CQkJICAgTGlzdCAqd2luZG93RnVuY3MsIGludCBudW1QYXJ0Q29scywgaW50IG51bU9yZGVyQ29s cywKIAkJCQkJCSAgIENvc3QgaW5wdXRfc3RhcnR1cF9jb3N0LCBDb3N0IGlucHV0X3RvdGFsX2Nv c3QsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGxhbm1haW4uaCBiL3NyYy9p bmNsdWRlL29wdGltaXplci9wbGFubWFpbi5oCmluZGV4IGU3YWFkZGQ1MGQ2Li5lMjBhNjY0MDRi YSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BsYW5tYWluLmgKKysrIGIvc3Jj L2luY2x1ZGUvb3B0aW1pemVyL3BsYW5tYWluLmgKQEAgLTU0LDggKzU0LDggQEAgZXh0ZXJuIFNv cnQgKm1ha2Vfc29ydF9mcm9tX3NvcnRjbGF1c2VzKExpc3QgKnNvcnRjbHMsIFBsYW4gKmxlZnR0 cmVlKTsKIGV4dGVybiBBZ2cgKm1ha2VfYWdnKExpc3QgKnRsaXN0LCBMaXN0ICpxdWFsLAogCQkJ CQkgQWdnU3RyYXRlZ3kgYWdnc3RyYXRlZ3ksIEFnZ1NwbGl0IGFnZ3NwbGl0LAogCQkJCQkgaW50 IG51bUdyb3VwQ29scywgQXR0ck51bWJlciAqZ3JwQ29sSWR4LCBPaWQgKmdycE9wZXJhdG9ycywg T2lkICpncnBDb2xsYXRpb25zLAotCQkJCQkgTGlzdCAqZ3JvdXBpbmdTZXRzLCBMaXN0ICpjaGFp biwKLQkJCQkJIGRvdWJsZSBkTnVtR3JvdXBzLCBQbGFuICpsZWZ0dHJlZSk7CisJCQkJCSBMaXN0 ICpncm91cGluZ1NldHMsIExpc3QgKmNoYWluLCBkb3VibGUgZE51bUdyb3VwcywKKwkJCQkJIGlu dDMyIHRyYW5zaXRpb25TcGFjZSwgUGxhbiAqbGVmdHRyZWUpOwogZXh0ZXJuIExpbWl0ICptYWtl X2xpbWl0KFBsYW4gKmxlZnR0cmVlLCBOb2RlICpsaW1pdE9mZnNldCwgTm9kZSAqbGltaXRDb3Vu dCk7CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FnZ3JlZ2F0 ZXMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9hZ2dyZWdhdGVzLm91dAppbmRleCBk MDkxYWU0YzZlNC4uOTJlNWRiYWQ3N2UgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvYWdncmVnYXRlcy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9hZ2dy ZWdhdGVzLm91dApAQCAtMjMzMSwzICsyMzMxLDk1IEBAIGV4cGxhaW4gKGNvc3RzIG9mZikKICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBvbmVrCiAoOCByb3dzKQogCistLQorLS0gQ29t cGFyZSByZXN1bHRzIGJldHdlZW4gcGxhbnMgdXNpbmcgc29ydGluZyBhbmQgcGxhbnMgdXNpbmcg aGFzaAorLS0gYWdncmVnYXRpb24uIEZvcmNlIHNwaWxsaW5nIGluIGJvdGggY2FzZXMgYnkgc2V0 dGluZyB3b3JrX21lbSBsb3cuCistLQorc2V0IHdvcmtfbWVtPSc2NGtCJzsKKy0tIFByb2R1Y2Ug cmVzdWx0cyB3aXRoIHNvcnRpbmcuCitzZXQgZW5hYmxlX2hhc2hhZ2cgPSBmYWxzZTsKK3NldCBq aXRfYWJvdmVfY29zdCA9IDA7CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgZyUxMDAwMDAg YXMgYzEsIHN1bShnOjpudW1lcmljKSBhcyBjMiwgY291bnQoKikgYXMgYzMKKyAgZnJvbSBnZW5l cmF0ZV9zZXJpZXMoMCwgMTk5OTk5KSBnCisgIGdyb3VwIGJ5IGclMTAwMDAwOworICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBHcm91cEFnZ3JlZ2F0ZQorICAgR3Jv dXAgS2V5OiAoKGcgJSAxMDAwMDApKQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiAo KGcgJSAxMDAwMDApKQorICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2Vy aWVzIGcKKyg1IHJvd3MpCisKK2NyZWF0ZSB0YWJsZSBhZ2dfZ3JvdXBfMSBhcworc2VsZWN0IGcl MTAwMDAwIGFzIGMxLCBzdW0oZzo6bnVtZXJpYykgYXMgYzIsIGNvdW50KCopIGFzIGMzCisgIGZy b20gZ2VuZXJhdGVfc2VyaWVzKDAsIDE5OTk5OSkgZworICBncm91cCBieSBnJTEwMDAwMDsKK3Nl dCBqaXRfYWJvdmVfY29zdCB0byBkZWZhdWx0OworY3JlYXRlIHRhYmxlIGFnZ19ncm91cF8yIGFz CitzZWxlY3QgKGcvMik6Om51bWVyaWMgYXMgYzEsIHN1bSg3OjppbnQ0KSBhcyBjMiwgY291bnQo KikgYXMgYzMKKyAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwgMTk5OSkgZworICBncm91cCBieSBn LzI7CitjcmVhdGUgdGFibGUgYWdnX2dyb3VwXzMgYXMKK3NlbGVjdCAoZy8yKTo6bnVtZXJpYyBh cyBjMSwgYXJyYXlfYWdnKGc6Om51bWVyaWMpIGFzIGMyLCBjb3VudCgqKSBhcyBjMworICBmcm9t IGdlbmVyYXRlX3NlcmllcygwLCAxOTk5KSBnCisgIGdyb3VwIGJ5IGcvMjsKKy0tIFByb2R1Y2Ug cmVzdWx0cyB3aXRoIGhhc2ggYWdncmVnYXRpb24KK3NldCBlbmFibGVfaGFzaGFnZyA9IHRydWU7 CitzZXQgZW5hYmxlX3NvcnQgPSBmYWxzZTsKK3NldCBqaXRfYWJvdmVfY29zdCA9IDA7CitleHBs YWluIChjb3N0cyBvZmYpCitzZWxlY3QgZyUxMDAwMDAgYXMgYzEsIHN1bShnOjpudW1lcmljKSBh cyBjMiwgY291bnQoKikgYXMgYzMKKyAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwgMTk5OTk5KSBn CisgIGdyb3VwIGJ5IGclMTAwMDAwOworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBI YXNoQWdncmVnYXRlCisgICBHcm91cCBLZXk6IChnICUgMTAwMDAwKQorICAgLT4gIEZ1bmN0aW9u IFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKygzIHJvd3MpCisKK2NyZWF0ZSB0YWJsZSBhZ2df aGFzaF8xIGFzCitzZWxlY3QgZyUxMDAwMDAgYXMgYzEsIHN1bShnOjpudW1lcmljKSBhcyBjMiwg Y291bnQoKikgYXMgYzMKKyAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwgMTk5OTk5KSBnCisgIGdy b3VwIGJ5IGclMTAwMDAwOworc2V0IGppdF9hYm92ZV9jb3N0IHRvIGRlZmF1bHQ7CitjcmVhdGUg dGFibGUgYWdnX2hhc2hfMiBhcworc2VsZWN0IChnLzIpOjpudW1lcmljIGFzIGMxLCBzdW0oNzo6 aW50NCkgYXMgYzIsIGNvdW50KCopIGFzIGMzCisgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAsIDE5 OTkpIGcKKyAgZ3JvdXAgYnkgZy8yOworY3JlYXRlIHRhYmxlIGFnZ19oYXNoXzMgYXMKK3NlbGVj dCAoZy8yKTo6bnVtZXJpYyBhcyBjMSwgYXJyYXlfYWdnKGc6Om51bWVyaWMpIGFzIGMyLCBjb3Vu dCgqKSBhcyBjMworICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLCAxOTk5KSBnCisgIGdyb3VwIGJ5 IGcvMjsKK3NldCBlbmFibGVfc29ydCA9IHRydWU7CitzZXQgd29ya19tZW0gdG8gZGVmYXVsdDsK Ky0tIENvbXBhcmUgZ3JvdXAgYWdncmVnYXRpb24gcmVzdWx0cyB0byBoYXNoIGFnZ3JlZ2F0aW9u IHJlc3VsdHMKKyhzZWxlY3QgKiBmcm9tIGFnZ19oYXNoXzEgZXhjZXB0IHNlbGVjdCAqIGZyb20g YWdnX2dyb3VwXzEpCisgIHVuaW9uIGFsbAorKHNlbGVjdCAqIGZyb20gYWdnX2dyb3VwXzEgZXhj ZXB0IHNlbGVjdCAqIGZyb20gYWdnX2hhc2hfMSk7CisgYzEgfCBjMiB8IGMzIAorLS0tLSstLS0t Ky0tLS0KKygwIHJvd3MpCisKKyhzZWxlY3QgKiBmcm9tIGFnZ19oYXNoXzIgZXhjZXB0IHNlbGVj dCAqIGZyb20gYWdnX2dyb3VwXzIpCisgIHVuaW9uIGFsbAorKHNlbGVjdCAqIGZyb20gYWdnX2dy b3VwXzIgZXhjZXB0IHNlbGVjdCAqIGZyb20gYWdnX2hhc2hfMik7CisgYzEgfCBjMiB8IGMzIAor LS0tLSstLS0tKy0tLS0KKygwIHJvd3MpCisKKyhzZWxlY3QgKiBmcm9tIGFnZ19oYXNoXzMgZXhj ZXB0IHNlbGVjdCAqIGZyb20gYWdnX2dyb3VwXzMpCisgIHVuaW9uIGFsbAorKHNlbGVjdCAqIGZy b20gYWdnX2dyb3VwXzMgZXhjZXB0IHNlbGVjdCAqIGZyb20gYWdnX2hhc2hfMyk7CisgYzEgfCBj MiB8IGMzIAorLS0tLSstLS0tKy0tLS0KKygwIHJvd3MpCisKK2Ryb3AgdGFibGUgYWdnX2dyb3Vw XzE7Citkcm9wIHRhYmxlIGFnZ19ncm91cF8yOworZHJvcCB0YWJsZSBhZ2dfZ3JvdXBfMzsKK2Ry b3AgdGFibGUgYWdnX2hhc2hfMTsKK2Ryb3AgdGFibGUgYWdnX2hhc2hfMjsKK2Ryb3AgdGFibGUg YWdnX2hhc2hfMzsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ3JvdXBp bmdzZXRzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ3JvdXBpbmdzZXRzLm91dApp bmRleCBjMWY4MDJjODhhNy4uNzY3ZjYwYTk2YzcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvZ3JvdXBpbmdzZXRzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL2dyb3VwaW5nc2V0cy5vdXQKQEAgLTE2MzMsNCArMTYzMywxMjcgQEAgc2VsZWN0IHZ8fCdh JywgY2FzZSB3aGVuIGdyb3VwaW5nKHZ8fCdhJykgPSAxIHRoZW4gMSBlbHNlIDAgZW5kLCBjb3Vu dCgqKQogICAgICAgICAgIHwgICAgMSB8ICAgICAyCiAoNCByb3dzKQogCistLQorLS0gQ29tcGFy ZSByZXN1bHRzIGJldHdlZW4gcGxhbnMgdXNpbmcgc29ydGluZyBhbmQgcGxhbnMgdXNpbmcgaGFz aAorLS0gYWdncmVnYXRpb24uIEZvcmNlIHNwaWxsaW5nIGluIGJvdGggY2FzZXMgYnkgc2V0dGlu ZyB3b3JrX21lbSBsb3cuCistLQorU0VUIHdvcmtfbWVtPSc2NGtCJzsKKy0tIFByb2R1Y2UgcmVz dWx0cyB3aXRoIHNvcnRpbmcuCitzZXQgZW5hYmxlX2hhc2hhZ2cgPSBmYWxzZTsKK3NldCBqaXRf YWJvdmVfY29zdCA9IDA7CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgZzEwMDAsIGcxMDAs IGcxMCwgc3VtKGc6Om51bWVyaWMpLCBjb3VudCgqKSwgbWF4KGc6OnRleHQpIGZyb20KKyAgKHNl bGVjdCBnJTEwMDAgYXMgZzEwMDAsIGclMTAwIGFzIGcxMDAsIGclMTAgYXMgZzEwLCBnCisgICBm cm9tIGdlbmVyYXRlX3NlcmllcygwLDE5OTk5OSkgZykgcworZ3JvdXAgYnkgY3ViZSAoZzEwMDAs ZzEwMCxnMTApOworICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBHcm91cEFnZ3JlZ2F0ZQorICAgR3JvdXAgS2V5 OiAoKGcuZyAlIDEwMDApKSwgKChnLmcgJSAxMDApKSwgKChnLmcgJSAxMCkpCisgICBHcm91cCBL ZXk6ICgoZy5nICUgMTAwMCkpLCAoKGcuZyAlIDEwMCkpCisgICBHcm91cCBLZXk6ICgoZy5nICUg MTAwMCkpCisgICBHcm91cCBLZXk6ICgpCisgICBTb3J0IEtleTogKChnLmcgJSAxMDApKSwgKChn LmcgJSAxMCkpCisgICAgIEdyb3VwIEtleTogKChnLmcgJSAxMDApKSwgKChnLmcgJSAxMCkpCisg ICAgIEdyb3VwIEtleTogKChnLmcgJSAxMDApKQorICAgU29ydCBLZXk6ICgoZy5nICUgMTApKSwg KChnLmcgJSAxMDAwKSkKKyAgICAgR3JvdXAgS2V5OiAoKGcuZyAlIDEwKSksICgoZy5nICUgMTAw MCkpCisgICAgIEdyb3VwIEtleTogKChnLmcgJSAxMCkpCisgICAtPiAgU29ydAorICAgICAgICAg U29ydCBLZXk6ICgoZy5nICUgMTAwMCkpLCAoKGcuZyAlIDEwMCkpLCAoKGcuZyAlIDEwKSkKKyAg ICAgICAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisoMTQgcm93cykK KworY3JlYXRlIHRhYmxlIGdzX2dyb3VwXzEgYXMKK3NlbGVjdCBnMTAwMCwgZzEwMCwgZzEwLCBz dW0oZzo6bnVtZXJpYyksIGNvdW50KCopLCBtYXgoZzo6dGV4dCkgZnJvbQorICAoc2VsZWN0IGcl MTAwMCBhcyBnMTAwMCwgZyUxMDAgYXMgZzEwMCwgZyUxMCBhcyBnMTAsIGcKKyAgIGZyb20gZ2Vu ZXJhdGVfc2VyaWVzKDAsMTk5OTk5KSBnKSBzCitncm91cCBieSBjdWJlIChnMTAwMCxnMTAwLGcx MCk7CitzZXQgaml0X2Fib3ZlX2Nvc3QgdG8gZGVmYXVsdDsKK2NyZWF0ZSB0YWJsZSBnc19ncm91 cF8yIGFzCitzZWxlY3QgZzEwMDAsIGcxMDAsIGcxMCwgc3VtKGc6Om51bWVyaWMpLCBjb3VudCgq KSwgbWF4KGc6OnRleHQpIGZyb20KKyAgKHNlbGVjdCBnLzIwIGFzIGcxMDAwLCBnLzIwMCBhcyBn MTAwLCBnLzIwMDAgYXMgZzEwLCBnCisgICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLDE5OTk5KSBn KSBzCitncm91cCBieSBjdWJlIChnMTAwMCxnMTAwLGcxMCk7CitjcmVhdGUgdGFibGUgZ3NfZ3Jv dXBfMyBhcworc2VsZWN0IGcxMDAsIGcxMCwgYXJyYXlfYWdnKGcpIGFzIGEsIGNvdW50KCopIGFz IGMsIG1heChnOjp0ZXh0KSBhcyBtIGZyb20KKyAgKHNlbGVjdCBnLzIwMCBhcyBnMTAwLCBnLzIw MDAgYXMgZzEwLCBnCisgICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLDE5OTk5KSBnKSBzCitncm91 cCBieSBncm91cGluZyBzZXRzIChnMTAwLGcxMCk7CistLSBQcm9kdWNlIHJlc3VsdHMgd2l0aCBo YXNoIGFnZ3JlZ2F0aW9uLgorc2V0IGVuYWJsZV9oYXNoYWdnID0gdHJ1ZTsKK3NldCBlbmFibGVf c29ydCA9IGZhbHNlOworc2V0IHdvcmtfbWVtPSc2NGtCJzsKK3NldCBqaXRfYWJvdmVfY29zdCA9 IDA7CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgZzEwMDAsIGcxMDAsIGcxMCwgc3VtKGc6 Om51bWVyaWMpLCBjb3VudCgqKSwgbWF4KGc6OnRleHQpIGZyb20KKyAgKHNlbGVjdCBnJTEwMDAg YXMgZzEwMDAsIGclMTAwIGFzIGcxMDAsIGclMTAgYXMgZzEwLCBnCisgICBmcm9tIGdlbmVyYXRl X3NlcmllcygwLDE5OTk5OSkgZykgcworZ3JvdXAgYnkgY3ViZSAoZzEwMDAsZzEwMCxnMTApOwor ICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBHcm91cEFnZ3JlZ2F0ZQorICAgR3JvdXAgS2V5OiAoKGcuZyAlIDEw MDApKSwgKChnLmcgJSAxMDApKSwgKChnLmcgJSAxMCkpCisgICBHcm91cCBLZXk6ICgoZy5nICUg MTAwMCkpLCAoKGcuZyAlIDEwMCkpCisgICBHcm91cCBLZXk6ICgoZy5nICUgMTAwMCkpCisgICBH cm91cCBLZXk6ICgpCisgICBTb3J0IEtleTogKChnLmcgJSAxMDApKSwgKChnLmcgJSAxMCkpCisg ICAgIEdyb3VwIEtleTogKChnLmcgJSAxMDApKSwgKChnLmcgJSAxMCkpCisgICAgIEdyb3VwIEtl eTogKChnLmcgJSAxMDApKQorICAgU29ydCBLZXk6ICgoZy5nICUgMTApKSwgKChnLmcgJSAxMDAw KSkKKyAgICAgR3JvdXAgS2V5OiAoKGcuZyAlIDEwKSksICgoZy5nICUgMTAwMCkpCisgICAgIEdy b3VwIEtleTogKChnLmcgJSAxMCkpCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6ICgo Zy5nICUgMTAwMCkpLCAoKGcuZyAlIDEwMCkpLCAoKGcuZyAlIDEwKSkKKyAgICAgICAgIC0+ICBG dW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisoMTQgcm93cykKKworY3JlYXRlIHRh YmxlIGdzX2hhc2hfMSBhcworc2VsZWN0IGcxMDAwLCBnMTAwLCBnMTAsIHN1bShnOjpudW1lcmlj KSwgY291bnQoKiksIG1heChnOjp0ZXh0KSBmcm9tCisgIChzZWxlY3QgZyUxMDAwIGFzIGcxMDAw LCBnJTEwMCBhcyBnMTAwLCBnJTEwIGFzIGcxMCwgZworICAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMo MCwxOTk5OTkpIGcpIHMKK2dyb3VwIGJ5IGN1YmUgKGcxMDAwLGcxMDAsZzEwKTsKK3NldCBqaXRf YWJvdmVfY29zdCB0byBkZWZhdWx0OworY3JlYXRlIHRhYmxlIGdzX2hhc2hfMiBhcworc2VsZWN0 IGcxMDAwLCBnMTAwLCBnMTAsIHN1bShnOjpudW1lcmljKSwgY291bnQoKiksIG1heChnOjp0ZXh0 KSBmcm9tCisgIChzZWxlY3QgZy8yMCBhcyBnMTAwMCwgZy8yMDAgYXMgZzEwMCwgZy8yMDAwIGFz IGcxMCwgZworICAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwxOTk5OSkgZykgcworZ3JvdXAgYnkg Y3ViZSAoZzEwMDAsZzEwMCxnMTApOworY3JlYXRlIHRhYmxlIGdzX2hhc2hfMyBhcworc2VsZWN0 IGcxMDAsIGcxMCwgYXJyYXlfYWdnKGcpIGFzIGEsIGNvdW50KCopIGFzIGMsIG1heChnOjp0ZXh0 KSBhcyBtIGZyb20KKyAgKHNlbGVjdCBnLzIwMCBhcyBnMTAwLCBnLzIwMDAgYXMgZzEwLCBnCisg ICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLDE5OTk5KSBnKSBzCitncm91cCBieSBncm91cGluZyBz ZXRzIChnMTAwLGcxMCk7CitzZXQgZW5hYmxlX3NvcnQgPSB0cnVlOworc2V0IHdvcmtfbWVtIHRv IGRlZmF1bHQ7CistLSBDb21wYXJlIHJlc3VsdHMKKyhzZWxlY3QgKiBmcm9tIGdzX2hhc2hfMSBl eGNlcHQgc2VsZWN0ICogZnJvbSBnc19ncm91cF8xKQorICB1bmlvbiBhbGwKKyhzZWxlY3QgKiBm cm9tIGdzX2dyb3VwXzEgZXhjZXB0IHNlbGVjdCAqIGZyb20gZ3NfaGFzaF8xKTsKKyBnMTAwMCB8 IGcxMDAgfCBnMTAgfCBzdW0gfCBjb3VudCB8IG1heCAKKy0tLS0tLS0rLS0tLS0tKy0tLS0tKy0t LS0tKy0tLS0tLS0rLS0tLS0KKygwIHJvd3MpCisKKyhzZWxlY3QgKiBmcm9tIGdzX2hhc2hfMiBl eGNlcHQgc2VsZWN0ICogZnJvbSBnc19ncm91cF8yKQorICB1bmlvbiBhbGwKKyhzZWxlY3QgKiBm cm9tIGdzX2dyb3VwXzIgZXhjZXB0IHNlbGVjdCAqIGZyb20gZ3NfaGFzaF8yKTsKKyBnMTAwMCB8 IGcxMDAgfCBnMTAgfCBzdW0gfCBjb3VudCB8IG1heCAKKy0tLS0tLS0rLS0tLS0tKy0tLS0tKy0t LS0tKy0tLS0tLS0rLS0tLS0KKygwIHJvd3MpCisKKyhzZWxlY3QgZzEwMCxnMTAsdW5uZXN0KGEp LGMsbSBmcm9tIGdzX2hhc2hfMyBleGNlcHQKKyAgc2VsZWN0IGcxMDAsZzEwLHVubmVzdChhKSxj LG0gZnJvbSBnc19ncm91cF8zKQorICAgIHVuaW9uIGFsbAorKHNlbGVjdCBnMTAwLGcxMCx1bm5l c3QoYSksYyxtIGZyb20gZ3NfZ3JvdXBfMyBleGNlcHQKKyAgc2VsZWN0IGcxMDAsZzEwLHVubmVz dChhKSxjLG0gZnJvbSBnc19oYXNoXzMpOworIGcxMDAgfCBnMTAgfCB1bm5lc3QgfCBjIHwgbSAK Ky0tLS0tLSstLS0tLSstLS0tLS0tLSstLS0rLS0tCisoMCByb3dzKQorCitkcm9wIHRhYmxlIGdz X2dyb3VwXzE7Citkcm9wIHRhYmxlIGdzX2dyb3VwXzI7Citkcm9wIHRhYmxlIGdzX2dyb3VwXzM7 Citkcm9wIHRhYmxlIGdzX2hhc2hfMTsKK2Ryb3AgdGFibGUgZ3NfaGFzaF8yOworZHJvcCB0YWJs ZSBnc19oYXNoXzM7CiAtLSBlbmQKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvc2VsZWN0X2Rpc3RpbmN0Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc2VsZWN0 X2Rpc3RpbmN0Lm91dAppbmRleCBmMzY5NmM2ZDFkZS4uMTFjNmY1MGZiZmEgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc2VsZWN0X2Rpc3RpbmN0Lm91dAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3NlbGVjdF9kaXN0aW5jdC5vdXQKQEAgLTE0OCw2ICsxNDgs NjggQEAgU0VMRUNUIGNvdW50KCopIEZST00KICAgICAgNAogKDEgcm93KQogCistLQorLS0gQ29t cGFyZSByZXN1bHRzIGJldHdlZW4gcGxhbnMgdXNpbmcgc29ydGluZyBhbmQgcGxhbnMgdXNpbmcg aGFzaAorLS0gYWdncmVnYXRpb24uIEZvcmNlIHNwaWxsaW5nIGluIGJvdGggY2FzZXMgYnkgc2V0 dGluZyB3b3JrX21lbSBsb3cuCistLQorU0VUIHdvcmtfbWVtPSc2NGtCJzsKKy0tIFByb2R1Y2Ug cmVzdWx0cyB3aXRoIHNvcnRpbmcuCitTRVQgZW5hYmxlX2hhc2hhZ2c9RkFMU0U7CitTRVQgaml0 X2Fib3ZlX2Nvc3Q9MDsKK0VYUExBSU4gKGNvc3RzIG9mZikKK1NFTEVDVCBESVNUSU5DVCBnJTEw MDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMCw5OTk5KSBnOworICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBVbmlxdWUKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0 IEtleTogKChnICUgMTAwMCkpCisgICAgICAgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0 ZV9zZXJpZXMgZworKDQgcm93cykKKworQ1JFQVRFIFRBQkxFIGRpc3RpbmN0X2dyb3VwXzEgQVMK K1NFTEVDVCBESVNUSU5DVCBnJTEwMDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMCw5OTk5KSBnOwor U0VUIGppdF9hYm92ZV9jb3N0IFRPIERFRkFVTFQ7CitDUkVBVEUgVEFCTEUgZGlzdGluY3RfZ3Jv dXBfMiBBUworU0VMRUNUIERJU1RJTkNUIChnJTEwMDApOjp0ZXh0IEZST00gZ2VuZXJhdGVfc2Vy aWVzKDAsOTk5OSkgZzsKK1NFVCBlbmFibGVfaGFzaGFnZz1UUlVFOworLS0gUHJvZHVjZSByZXN1 bHRzIHdpdGggaGFzaCBhZ2dyZWdhdGlvbi4KK1NFVCBlbmFibGVfc29ydD1GQUxTRTsKK1NFVCBq aXRfYWJvdmVfY29zdD0wOworRVhQTEFJTiAoY29zdHMgb2ZmKQorU0VMRUNUIERJU1RJTkNUIGcl MTAwMCBGUk9NIGdlbmVyYXRlX3NlcmllcygwLDk5OTkpIGc7CisgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIEhhc2hBZ2dyZWdhdGUKKyAgIEdyb3VwIEtleTogKGcgJSAxMDAwKQorICAg LT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKygzIHJvd3MpCisKK0NSRUFU RSBUQUJMRSBkaXN0aW5jdF9oYXNoXzEgQVMKK1NFTEVDVCBESVNUSU5DVCBnJTEwMDAgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMCw5OTk5KSBnOworU0VUIGppdF9hYm92ZV9jb3N0IFRPIERFRkFVTFQ7 CitDUkVBVEUgVEFCTEUgZGlzdGluY3RfaGFzaF8yIEFTCitTRUxFQ1QgRElTVElOQ1QgKGclMTAw MCk6OnRleHQgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMCw5OTk5KSBnOworU0VUIGVuYWJsZV9zb3J0 PVRSVUU7CitTRVQgd29ya19tZW0gVE8gREVGQVVMVDsKKy0tIENvbXBhcmUgcmVzdWx0cworKFNF TEVDVCAqIEZST00gZGlzdGluY3RfaGFzaF8xIEVYQ0VQVCBTRUxFQ1QgKiBGUk9NIGRpc3RpbmN0 X2dyb3VwXzEpCisgIFVOSU9OIEFMTAorKFNFTEVDVCAqIEZST00gZGlzdGluY3RfZ3JvdXBfMSBF WENFUFQgU0VMRUNUICogRlJPTSBkaXN0aW5jdF9oYXNoXzEpOworID9jb2x1bW4/IAorLS0tLS0t LS0tLQorKDAgcm93cykKKworKFNFTEVDVCAqIEZST00gZGlzdGluY3RfaGFzaF8xIEVYQ0VQVCBT RUxFQ1QgKiBGUk9NIGRpc3RpbmN0X2dyb3VwXzEpCisgIFVOSU9OIEFMTAorKFNFTEVDVCAqIEZS T00gZGlzdGluY3RfZ3JvdXBfMSBFWENFUFQgU0VMRUNUICogRlJPTSBkaXN0aW5jdF9oYXNoXzEp OworID9jb2x1bW4/IAorLS0tLS0tLS0tLQorKDAgcm93cykKKworRFJPUCBUQUJMRSBkaXN0aW5j dF9oYXNoXzE7CitEUk9QIFRBQkxFIGRpc3RpbmN0X2hhc2hfMjsKK0RST1AgVEFCTEUgZGlzdGlu Y3RfZ3JvdXBfMTsKK0RST1AgVEFCTEUgZGlzdGluY3RfZ3JvdXBfMjsKIC0tCiAtLSBBbHNvLCBz b21lIHRlc3RzIG9mIElTIERJU1RJTkNUIEZST00sIHdoaWNoIGRvZXNuJ3QgcXVpdGUgZGVzZXJ2 ZSBpdHMKIC0tIHZlcnkgb3duIHJlZ3Jlc3Npb24gZmlsZS4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL2FnZ3JlZ2F0ZXMuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvYWdncmVn YXRlcy5zcWwKaW5kZXggMTdmYjI1NmFlYzUuLmJjZDMzNmM1ODEyIDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWdyZXNzL3NxbC9hZ2dyZWdhdGVzLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9hZ2dyZWdhdGVzLnNxbApAQCAtMTAxNywzICsxMDE3LDkxIEBAIHNlbGVjdCB2fHwnYScsIGNh c2Ugd2hlbiB2fHwnYScgPSAnYWEnIHRoZW4gMSBlbHNlIDAgZW5kLCBjb3VudCgqKQogZXhwbGFp biAoY29zdHMgb2ZmKQogICBzZWxlY3QgMSBmcm9tIHRlbmsxCiAgICB3aGVyZSAoaHVuZHJlZCwg dGhvdXNhbmQpIGluIChzZWxlY3QgdHdvdGhvdXNhbmQsIHR3b3Rob3VzYW5kIGZyb20gb25layk7 CisKKy0tCistLSBDb21wYXJlIHJlc3VsdHMgYmV0d2VlbiBwbGFucyB1c2luZyBzb3J0aW5nIGFu ZCBwbGFucyB1c2luZyBoYXNoCistLSBhZ2dyZWdhdGlvbi4gRm9yY2Ugc3BpbGxpbmcgaW4gYm90 aCBjYXNlcyBieSBzZXR0aW5nIHdvcmtfbWVtIGxvdy4KKy0tCisKK3NldCB3b3JrX21lbT0nNjRr Qic7CisKKy0tIFByb2R1Y2UgcmVzdWx0cyB3aXRoIHNvcnRpbmcuCisKK3NldCBlbmFibGVfaGFz aGFnZyA9IGZhbHNlOworCitzZXQgaml0X2Fib3ZlX2Nvc3QgPSAwOworCitleHBsYWluIChjb3N0 cyBvZmYpCitzZWxlY3QgZyUxMDAwMDAgYXMgYzEsIHN1bShnOjpudW1lcmljKSBhcyBjMiwgY291 bnQoKikgYXMgYzMKKyAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwgMTk5OTk5KSBnCisgIGdyb3Vw IGJ5IGclMTAwMDAwOworCitjcmVhdGUgdGFibGUgYWdnX2dyb3VwXzEgYXMKK3NlbGVjdCBnJTEw MDAwMCBhcyBjMSwgc3VtKGc6Om51bWVyaWMpIGFzIGMyLCBjb3VudCgqKSBhcyBjMworICBmcm9t IGdlbmVyYXRlX3NlcmllcygwLCAxOTk5OTkpIGcKKyAgZ3JvdXAgYnkgZyUxMDAwMDA7CisKK3Nl dCBqaXRfYWJvdmVfY29zdCB0byBkZWZhdWx0OworCitjcmVhdGUgdGFibGUgYWdnX2dyb3VwXzIg YXMKK3NlbGVjdCAoZy8yKTo6bnVtZXJpYyBhcyBjMSwgc3VtKDc6OmludDQpIGFzIGMyLCBjb3Vu dCgqKSBhcyBjMworICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLCAxOTk5KSBnCisgIGdyb3VwIGJ5 IGcvMjsKKworY3JlYXRlIHRhYmxlIGFnZ19ncm91cF8zIGFzCitzZWxlY3QgKGcvMik6Om51bWVy aWMgYXMgYzEsIGFycmF5X2FnZyhnOjpudW1lcmljKSBhcyBjMiwgY291bnQoKikgYXMgYzMKKyAg ZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwgMTk5OSkgZworICBncm91cCBieSBnLzI7CisKKy0tIFBy b2R1Y2UgcmVzdWx0cyB3aXRoIGhhc2ggYWdncmVnYXRpb24KKworc2V0IGVuYWJsZV9oYXNoYWdn ID0gdHJ1ZTsKK3NldCBlbmFibGVfc29ydCA9IGZhbHNlOworCitzZXQgaml0X2Fib3ZlX2Nvc3Qg PSAwOworCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgZyUxMDAwMDAgYXMgYzEsIHN1bShn OjpudW1lcmljKSBhcyBjMiwgY291bnQoKikgYXMgYzMKKyAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMo MCwgMTk5OTk5KSBnCisgIGdyb3VwIGJ5IGclMTAwMDAwOworCitjcmVhdGUgdGFibGUgYWdnX2hh c2hfMSBhcworc2VsZWN0IGclMTAwMDAwIGFzIGMxLCBzdW0oZzo6bnVtZXJpYykgYXMgYzIsIGNv dW50KCopIGFzIGMzCisgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAsIDE5OTk5OSkgZworICBncm91 cCBieSBnJTEwMDAwMDsKKworc2V0IGppdF9hYm92ZV9jb3N0IHRvIGRlZmF1bHQ7CisKK2NyZWF0 ZSB0YWJsZSBhZ2dfaGFzaF8yIGFzCitzZWxlY3QgKGcvMik6Om51bWVyaWMgYXMgYzEsIHN1bSg3 OjppbnQ0KSBhcyBjMiwgY291bnQoKikgYXMgYzMKKyAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwg MTk5OSkgZworICBncm91cCBieSBnLzI7CisKK2NyZWF0ZSB0YWJsZSBhZ2dfaGFzaF8zIGFzCitz ZWxlY3QgKGcvMik6Om51bWVyaWMgYXMgYzEsIGFycmF5X2FnZyhnOjpudW1lcmljKSBhcyBjMiwg Y291bnQoKikgYXMgYzMKKyAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwgMTk5OSkgZworICBncm91 cCBieSBnLzI7CisKK3NldCBlbmFibGVfc29ydCA9IHRydWU7CitzZXQgd29ya19tZW0gdG8gZGVm YXVsdDsKKworLS0gQ29tcGFyZSBncm91cCBhZ2dyZWdhdGlvbiByZXN1bHRzIHRvIGhhc2ggYWdn cmVnYXRpb24gcmVzdWx0cworCisoc2VsZWN0ICogZnJvbSBhZ2dfaGFzaF8xIGV4Y2VwdCBzZWxl Y3QgKiBmcm9tIGFnZ19ncm91cF8xKQorICB1bmlvbiBhbGwKKyhzZWxlY3QgKiBmcm9tIGFnZ19n cm91cF8xIGV4Y2VwdCBzZWxlY3QgKiBmcm9tIGFnZ19oYXNoXzEpOworCisoc2VsZWN0ICogZnJv bSBhZ2dfaGFzaF8yIGV4Y2VwdCBzZWxlY3QgKiBmcm9tIGFnZ19ncm91cF8yKQorICB1bmlvbiBh bGwKKyhzZWxlY3QgKiBmcm9tIGFnZ19ncm91cF8yIGV4Y2VwdCBzZWxlY3QgKiBmcm9tIGFnZ19o YXNoXzIpOworCisoc2VsZWN0ICogZnJvbSBhZ2dfaGFzaF8zIGV4Y2VwdCBzZWxlY3QgKiBmcm9t IGFnZ19ncm91cF8zKQorICB1bmlvbiBhbGwKKyhzZWxlY3QgKiBmcm9tIGFnZ19ncm91cF8zIGV4 Y2VwdCBzZWxlY3QgKiBmcm9tIGFnZ19oYXNoXzMpOworCitkcm9wIHRhYmxlIGFnZ19ncm91cF8x OworZHJvcCB0YWJsZSBhZ2dfZ3JvdXBfMjsKK2Ryb3AgdGFibGUgYWdnX2dyb3VwXzM7Citkcm9w IHRhYmxlIGFnZ19oYXNoXzE7Citkcm9wIHRhYmxlIGFnZ19oYXNoXzI7Citkcm9wIHRhYmxlIGFn Z19oYXNoXzM7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9ncm91cGluZ3NldHMu c3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ3JvdXBpbmdzZXRzLnNxbAppbmRleCA5NWFjM2Zi NTJmNi4uYmY4YmNlNmVkMzEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2dyb3Vw aW5nc2V0cy5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ3JvdXBpbmdzZXRzLnNxbApA QCAtNDQxLDQgKzQ0MSwxMDMgQEAgc2VsZWN0IHZ8fCdhJywgY2FzZSB3aGVuIGdyb3VwaW5nKHZ8 fCdhJykgPSAxIHRoZW4gMSBlbHNlIDAgZW5kLCBjb3VudCgqKQogICBmcm9tIHVubmVzdChhcnJh eVsxLDFdLCBhcnJheVsnYScsJ2InXSkgdShpLHYpCiAgZ3JvdXAgYnkgcm9sbHVwKGksIHZ8fCdh Jykgb3JkZXIgYnkgMSwzOwogCistLQorLS0gQ29tcGFyZSByZXN1bHRzIGJldHdlZW4gcGxhbnMg dXNpbmcgc29ydGluZyBhbmQgcGxhbnMgdXNpbmcgaGFzaAorLS0gYWdncmVnYXRpb24uIEZvcmNl IHNwaWxsaW5nIGluIGJvdGggY2FzZXMgYnkgc2V0dGluZyB3b3JrX21lbSBsb3cuCistLQorCitT RVQgd29ya19tZW09JzY0a0InOworCistLSBQcm9kdWNlIHJlc3VsdHMgd2l0aCBzb3J0aW5nLgor CitzZXQgZW5hYmxlX2hhc2hhZ2cgPSBmYWxzZTsKKworc2V0IGppdF9hYm92ZV9jb3N0ID0gMDsK KworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0IGcxMDAwLCBnMTAwLCBnMTAsIHN1bShnOjpu dW1lcmljKSwgY291bnQoKiksIG1heChnOjp0ZXh0KSBmcm9tCisgIChzZWxlY3QgZyUxMDAwIGFz IGcxMDAwLCBnJTEwMCBhcyBnMTAwLCBnJTEwIGFzIGcxMCwgZworICAgZnJvbSBnZW5lcmF0ZV9z ZXJpZXMoMCwxOTk5OTkpIGcpIHMKK2dyb3VwIGJ5IGN1YmUgKGcxMDAwLGcxMDAsZzEwKTsKKwor Y3JlYXRlIHRhYmxlIGdzX2dyb3VwXzEgYXMKK3NlbGVjdCBnMTAwMCwgZzEwMCwgZzEwLCBzdW0o Zzo6bnVtZXJpYyksIGNvdW50KCopLCBtYXgoZzo6dGV4dCkgZnJvbQorICAoc2VsZWN0IGclMTAw MCBhcyBnMTAwMCwgZyUxMDAgYXMgZzEwMCwgZyUxMCBhcyBnMTAsIGcKKyAgIGZyb20gZ2VuZXJh dGVfc2VyaWVzKDAsMTk5OTk5KSBnKSBzCitncm91cCBieSBjdWJlIChnMTAwMCxnMTAwLGcxMCk7 CisKK3NldCBqaXRfYWJvdmVfY29zdCB0byBkZWZhdWx0OworCitjcmVhdGUgdGFibGUgZ3NfZ3Jv dXBfMiBhcworc2VsZWN0IGcxMDAwLCBnMTAwLCBnMTAsIHN1bShnOjpudW1lcmljKSwgY291bnQo KiksIG1heChnOjp0ZXh0KSBmcm9tCisgIChzZWxlY3QgZy8yMCBhcyBnMTAwMCwgZy8yMDAgYXMg ZzEwMCwgZy8yMDAwIGFzIGcxMCwgZworICAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwxOTk5OSkg ZykgcworZ3JvdXAgYnkgY3ViZSAoZzEwMDAsZzEwMCxnMTApOworCitjcmVhdGUgdGFibGUgZ3Nf Z3JvdXBfMyBhcworc2VsZWN0IGcxMDAsIGcxMCwgYXJyYXlfYWdnKGcpIGFzIGEsIGNvdW50KCop IGFzIGMsIG1heChnOjp0ZXh0KSBhcyBtIGZyb20KKyAgKHNlbGVjdCBnLzIwMCBhcyBnMTAwLCBn LzIwMDAgYXMgZzEwLCBnCisgICBmcm9tIGdlbmVyYXRlX3NlcmllcygwLDE5OTk5KSBnKSBzCitn cm91cCBieSBncm91cGluZyBzZXRzIChnMTAwLGcxMCk7CisKKy0tIFByb2R1Y2UgcmVzdWx0cyB3 aXRoIGhhc2ggYWdncmVnYXRpb24uCisKK3NldCBlbmFibGVfaGFzaGFnZyA9IHRydWU7CitzZXQg ZW5hYmxlX3NvcnQgPSBmYWxzZTsKK3NldCB3b3JrX21lbT0nNjRrQic7CisKK3NldCBqaXRfYWJv dmVfY29zdCA9IDA7CisKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCBnMTAwMCwgZzEwMCwg ZzEwLCBzdW0oZzo6bnVtZXJpYyksIGNvdW50KCopLCBtYXgoZzo6dGV4dCkgZnJvbQorICAoc2Vs ZWN0IGclMTAwMCBhcyBnMTAwMCwgZyUxMDAgYXMgZzEwMCwgZyUxMCBhcyBnMTAsIGcKKyAgIGZy b20gZ2VuZXJhdGVfc2VyaWVzKDAsMTk5OTk5KSBnKSBzCitncm91cCBieSBjdWJlIChnMTAwMCxn MTAwLGcxMCk7CisKK2NyZWF0ZSB0YWJsZSBnc19oYXNoXzEgYXMKK3NlbGVjdCBnMTAwMCwgZzEw MCwgZzEwLCBzdW0oZzo6bnVtZXJpYyksIGNvdW50KCopLCBtYXgoZzo6dGV4dCkgZnJvbQorICAo c2VsZWN0IGclMTAwMCBhcyBnMTAwMCwgZyUxMDAgYXMgZzEwMCwgZyUxMCBhcyBnMTAsIGcKKyAg IGZyb20gZ2VuZXJhdGVfc2VyaWVzKDAsMTk5OTk5KSBnKSBzCitncm91cCBieSBjdWJlIChnMTAw MCxnMTAwLGcxMCk7CisKK3NldCBqaXRfYWJvdmVfY29zdCB0byBkZWZhdWx0OworCitjcmVhdGUg dGFibGUgZ3NfaGFzaF8yIGFzCitzZWxlY3QgZzEwMDAsIGcxMDAsIGcxMCwgc3VtKGc6Om51bWVy aWMpLCBjb3VudCgqKSwgbWF4KGc6OnRleHQpIGZyb20KKyAgKHNlbGVjdCBnLzIwIGFzIGcxMDAw LCBnLzIwMCBhcyBnMTAwLCBnLzIwMDAgYXMgZzEwLCBnCisgICBmcm9tIGdlbmVyYXRlX3Nlcmll cygwLDE5OTk5KSBnKSBzCitncm91cCBieSBjdWJlIChnMTAwMCxnMTAwLGcxMCk7CisKK2NyZWF0 ZSB0YWJsZSBnc19oYXNoXzMgYXMKK3NlbGVjdCBnMTAwLCBnMTAsIGFycmF5X2FnZyhnKSBhcyBh LCBjb3VudCgqKSBhcyBjLCBtYXgoZzo6dGV4dCkgYXMgbSBmcm9tCisgIChzZWxlY3QgZy8yMDAg YXMgZzEwMCwgZy8yMDAwIGFzIGcxMCwgZworICAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMCwxOTk5 OSkgZykgcworZ3JvdXAgYnkgZ3JvdXBpbmcgc2V0cyAoZzEwMCxnMTApOworCitzZXQgZW5hYmxl X3NvcnQgPSB0cnVlOworc2V0IHdvcmtfbWVtIHRvIGRlZmF1bHQ7CisKKy0tIENvbXBhcmUgcmVz dWx0cworCisoc2VsZWN0ICogZnJvbSBnc19oYXNoXzEgZXhjZXB0IHNlbGVjdCAqIGZyb20gZ3Nf Z3JvdXBfMSkKKyAgdW5pb24gYWxsCisoc2VsZWN0ICogZnJvbSBnc19ncm91cF8xIGV4Y2VwdCBz ZWxlY3QgKiBmcm9tIGdzX2hhc2hfMSk7CisKKyhzZWxlY3QgKiBmcm9tIGdzX2hhc2hfMiBleGNl cHQgc2VsZWN0ICogZnJvbSBnc19ncm91cF8yKQorICB1bmlvbiBhbGwKKyhzZWxlY3QgKiBmcm9t IGdzX2dyb3VwXzIgZXhjZXB0IHNlbGVjdCAqIGZyb20gZ3NfaGFzaF8yKTsKKworKHNlbGVjdCBn MTAwLGcxMCx1bm5lc3QoYSksYyxtIGZyb20gZ3NfaGFzaF8zIGV4Y2VwdAorICBzZWxlY3QgZzEw MCxnMTAsdW5uZXN0KGEpLGMsbSBmcm9tIGdzX2dyb3VwXzMpCisgICAgdW5pb24gYWxsCisoc2Vs ZWN0IGcxMDAsZzEwLHVubmVzdChhKSxjLG0gZnJvbSBnc19ncm91cF8zIGV4Y2VwdAorICBzZWxl Y3QgZzEwMCxnMTAsdW5uZXN0KGEpLGMsbSBmcm9tIGdzX2hhc2hfMyk7CisKK2Ryb3AgdGFibGUg Z3NfZ3JvdXBfMTsKK2Ryb3AgdGFibGUgZ3NfZ3JvdXBfMjsKK2Ryb3AgdGFibGUgZ3NfZ3JvdXBf MzsKK2Ryb3AgdGFibGUgZ3NfaGFzaF8xOworZHJvcCB0YWJsZSBnc19oYXNoXzI7Citkcm9wIHRh YmxlIGdzX2hhc2hfMzsKKwogLS0gZW5kCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9zZWxlY3RfZGlzdGluY3Quc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc2VsZWN0X2Rpc3Rp bmN0LnNxbAppbmRleCBhNjA1ZTg2NDQ5ZS4uMzMxMDI3NDRlYmYgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL3NlbGVjdF9kaXN0aW5jdC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9zcWwvc2VsZWN0X2Rpc3RpbmN0LnNxbApAQCAtNDUsNiArNDUsNjggQEAgU0VMRUNUIGNvdW50 KCopIEZST00KIFNFTEVDVCBjb3VudCgqKSBGUk9NCiAgIChTRUxFQ1QgRElTVElOQ1QgdHdvLCBm b3VyLCB0d28gRlJPTSB0ZW5rMSkgc3M7CiAKKy0tCistLSBDb21wYXJlIHJlc3VsdHMgYmV0d2Vl biBwbGFucyB1c2luZyBzb3J0aW5nIGFuZCBwbGFucyB1c2luZyBoYXNoCistLSBhZ2dyZWdhdGlv bi4gRm9yY2Ugc3BpbGxpbmcgaW4gYm90aCBjYXNlcyBieSBzZXR0aW5nIHdvcmtfbWVtIGxvdy4K Ky0tCisKK1NFVCB3b3JrX21lbT0nNjRrQic7CisKKy0tIFByb2R1Y2UgcmVzdWx0cyB3aXRoIHNv cnRpbmcuCisKK1NFVCBlbmFibGVfaGFzaGFnZz1GQUxTRTsKKworU0VUIGppdF9hYm92ZV9jb3N0 PTA7CisKK0VYUExBSU4gKGNvc3RzIG9mZikKK1NFTEVDVCBESVNUSU5DVCBnJTEwMDAgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMCw5OTk5KSBnOworCitDUkVBVEUgVEFCTEUgZGlzdGluY3RfZ3JvdXBf MSBBUworU0VMRUNUIERJU1RJTkNUIGclMTAwMCBGUk9NIGdlbmVyYXRlX3NlcmllcygwLDk5OTkp IGc7CisKK1NFVCBqaXRfYWJvdmVfY29zdCBUTyBERUZBVUxUOworCitDUkVBVEUgVEFCTEUgZGlz dGluY3RfZ3JvdXBfMiBBUworU0VMRUNUIERJU1RJTkNUIChnJTEwMDApOjp0ZXh0IEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDAsOTk5OSkgZzsKKworU0VUIGVuYWJsZV9oYXNoYWdnPVRSVUU7CisKKy0t IFByb2R1Y2UgcmVzdWx0cyB3aXRoIGhhc2ggYWdncmVnYXRpb24uCisKK1NFVCBlbmFibGVfc29y dD1GQUxTRTsKKworU0VUIGppdF9hYm92ZV9jb3N0PTA7CisKK0VYUExBSU4gKGNvc3RzIG9mZikK K1NFTEVDVCBESVNUSU5DVCBnJTEwMDAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMCw5OTk5KSBnOwor CitDUkVBVEUgVEFCTEUgZGlzdGluY3RfaGFzaF8xIEFTCitTRUxFQ1QgRElTVElOQ1QgZyUxMDAw IEZST00gZ2VuZXJhdGVfc2VyaWVzKDAsOTk5OSkgZzsKKworU0VUIGppdF9hYm92ZV9jb3N0IFRP IERFRkFVTFQ7CisKK0NSRUFURSBUQUJMRSBkaXN0aW5jdF9oYXNoXzIgQVMKK1NFTEVDVCBESVNU SU5DVCAoZyUxMDAwKTo6dGV4dCBGUk9NIGdlbmVyYXRlX3NlcmllcygwLDk5OTkpIGc7CisKK1NF VCBlbmFibGVfc29ydD1UUlVFOworCitTRVQgd29ya19tZW0gVE8gREVGQVVMVDsKKworLS0gQ29t cGFyZSByZXN1bHRzCisKKyhTRUxFQ1QgKiBGUk9NIGRpc3RpbmN0X2hhc2hfMSBFWENFUFQgU0VM RUNUICogRlJPTSBkaXN0aW5jdF9ncm91cF8xKQorICBVTklPTiBBTEwKKyhTRUxFQ1QgKiBGUk9N IGRpc3RpbmN0X2dyb3VwXzEgRVhDRVBUIFNFTEVDVCAqIEZST00gZGlzdGluY3RfaGFzaF8xKTsK KworKFNFTEVDVCAqIEZST00gZGlzdGluY3RfaGFzaF8xIEVYQ0VQVCBTRUxFQ1QgKiBGUk9NIGRp c3RpbmN0X2dyb3VwXzEpCisgIFVOSU9OIEFMTAorKFNFTEVDVCAqIEZST00gZGlzdGluY3RfZ3Jv dXBfMSBFWENFUFQgU0VMRUNUICogRlJPTSBkaXN0aW5jdF9oYXNoXzEpOworCitEUk9QIFRBQkxF IGRpc3RpbmN0X2hhc2hfMTsKK0RST1AgVEFCTEUgZGlzdGluY3RfaGFzaF8yOworRFJPUCBUQUJM RSBkaXN0aW5jdF9ncm91cF8xOworRFJPUCBUQUJMRSBkaXN0aW5jdF9ncm91cF8yOworCiAtLQog LS0gQWxzbywgc29tZSB0ZXN0cyBvZiBJUyBESVNUSU5DVCBGUk9NLCB3aGljaCBkb2Vzbid0IHF1 aXRlIGRlc2VydmUgaXRzCiAtLSB2ZXJ5IG93biByZWdyZXNzaW9uIGZpbGUuCg== --=-ML923lNhEZfGuB7AO2Lz--