Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vSaso-001Ozb-1L for pgsql-hackers@arkaria.postgresql.org; Mon, 08 Dec 2025 13:02:31 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vSasl-00H15F-2s for pgsql-hackers@arkaria.postgresql.org; Mon, 08 Dec 2025 13:02:28 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vSasl-00H157-14 for pgsql-hackers@lists.postgresql.org; Mon, 08 Dec 2025 13:02:27 +0000 Received: from lahtoruutu.iki.fi ([185.185.170.37]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vSasi-003qep-2u for pgsql-hackers@lists.postgresql.org; Mon, 08 Dec 2025 13:02:27 +0000 Received: from [10.0.2.15] (unknown [130.41.208.2]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange x25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4dQ2FP6Czsz49PvY; Mon, 08 Dec 2025 15:02:17 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1765198939; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=cnBhNDQsaGrTVci/0iqvWI+veSBl6/lMRrvNy15C9RM=; b=ZvIMDarIsZyYf36+ve7JwQs83gbsgzWaStKv8RVDblxY+A482TvjmeKWacmlbnJe0BvlfN n9MLUM6F8SxxzXE8irSbGEoL1uL630je+GH4Pw06r8RKG/o4djSasBy7xd5Akbl7dI8jqY /8D8zsi2G6notByOVcHc+oXoWHmbHCPLk9OVmyLmOIB5A9Bs57bY1ZQv9XUrcIhPjwuHk0 VR+dUb92EouBIoE2jdxGcYyLkCkl1HOmtMR8DnBSokir128f+OYT0MZqlA/E325Rs+dBQv PYuFAJRsobSVK67IueuB66AzGTZJUTbe3vRLAjMSXn1jHK7aiNWOMncbSUGEkQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1765198939; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=cnBhNDQsaGrTVci/0iqvWI+veSBl6/lMRrvNy15C9RM=; b=W2TQgfVR1dRZva3Pjy1iCPaX3VBUauRHobhsQGPKVvbPgQdr6oJuQx7RfdO3Yt3ueN+nWK Nr1IqqVNmX1RdyGMCfRvX5aA4buOvamHY8rVcpCVLDmSaIvuI/zujWJ/SwcKEpEg9h6l9Y ymLa+yb3KNf42kcpcUDGw3/ZYlDYdUgjqch8RqlRqdO6Ma5okbB8MpaaQ/pOgZa89G0OMY qi200UGp+YCvB3TUWgiI6jm7LRa2ozmah0zeZjsDqB4rsowe7curCG6Lov89hv3watQLhh eh+6zsmFIfAdiCqGnqGdGJ8I/iIhupuBu7O0v/zg91uEJYlZkBx0AhX7/FymEA== ARC-Seal: i=1; a=rsa-sha256; d=iki.fi; s=lahtoruutu; cv=none; t=1765198939; b=pbCfwxRVcvRC3S8ilczv8/24Ajv/pgFer7XjslaoW5YT2EuOOS0UkOr8vLtU2pdAypx1Zh 9ZLBL9gE/iBWrR++3+QR8vi0aAjCtnfUSsKXmAtI/QImtTuo8nyuCoLy/dgXjB+AiDEz6n jGCMQZHSKRA/BNLsWwiKx1LJHqHXLNuPxunD0AK3qT2RDZvduq6fJhbs82UdOBhldU6iAn 6slhtjie97AaRRETlsWoAfU7Dfh0ZnVVKD1D3Wubu9eWiEVsj7kSkzGT+nJiyQQscUqy+a U70OYnFjEL1FQCuZWmbatgIO5BFYIK0BaXDLucQ1QtKLeFG3ZbVSrtg3m1gmPw== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi Content-Type: multipart/mixed; boundary="------------EF1KvNPe4qiGLZkWwh7MtAzl" Message-ID: <22d30907-03b0-47c7-b38e-5574e475a387@iki.fi> Date: Mon, 8 Dec 2025 15:02:11 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: POC: make mxidoff 64 bits From: Heikki Linnakangas To: Ashutosh Bapat , Maxim Orlov Cc: Alvaro Herrera , Alexander Korotkov , wenhui qiu , Postgres hackers References: <36531c0e-292c-409d-bbc7-a252cf6e910a@iki.fi> <54aa8f65-f0e4-4464-b543-e0399c1cab1e@iki.fi> <4a9dda70-0af7-41a4-9636-b168f2fc48ef@iki.fi> <46cc45e9-fddd-44bc-bcb3-96889aafd921@iki.fi> <6c298bc4-7029-4c1d-bf16-3e094842ce32@iki.fi> <2c62322e-a0e3-49cd-b369-370718a8efd8@iki.fi> Content-Language: en-US In-Reply-To: <2c62322e-a0e3-49cd-b369-370718a8efd8@iki.fi> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------EF1KvNPe4qiGLZkWwh7MtAzl Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 06/12/2025 01:36, Heikki Linnakangas wrote: > On 05/12/2025 15:42, Ashutosh Bapat wrote: >> + $newnode->start; >> + my $new_dump = get_dump_for_comparison($newnode, "newnode_${tag} >> _dump"); >> + $newnode->stop; >> >> >> There is no code which actually looks at the multixact offsets here to >> make sure that the conversion happened correctly. I guess the test >> relies on visibility checks for that. Anyway, we need a comment >> explaining why just comparing the contents of the table is enough to >> ensure correct conversion. Better if we can add an explicit test that >> the offsets were converted correctly. I don't have any idea of how to >> do that right now, though. Maybe use pg_get_multixact_members() >> somehow in the query to extract data out of the table? > > Agreed, the verification here is quite weak. I didn't realize that > pg_get_multixact_members() exists! That might indeed be handy here, but > I'm not sure how exactly to construct the test. A direct C function like > test_create_multixact() in test_multixact.c would be handy here, but > we'd need to compile and do run that in the old cluster, which seems > difficult. I added verification of all the multixids between oldest and next multixid, using pg_get_multixact_members(). The test now calls pg_get_multixact_members() for all updating multixids in the range, before and after the upgrade, and compares the results. The verification ignores locking-only multixids. Verifying their correctness would need a little more code because they're not fully preserved by the upgrade. I also expanded the test to cover multixid wraparound. It only covered mxoffset wraparound previously. New patch set attached. Only test changes compared to patch set v28. - Heikki --------------EF1KvNPe4qiGLZkWwh7MtAzl Content-Type: text/x-patch; charset=UTF-8; name="v29-0001-pg_resetwal-Reject-negative-and-out-of-range-arg.patch" Content-Disposition: attachment; filename*0="v29-0001-pg_resetwal-Reject-negative-and-out-of-range-arg.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBjYWM0ZjQ2NWM4OTdlOWI4MjNmMjc0NzNiNDRkNzdjMGRjMWE5ZDdiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMTkgTm92IDIwMjUgMTY6MzY6MDAgKzAyMDAK U3ViamVjdDogW1BBVENIIHYyOSAxLzZdIHBnX3Jlc2V0d2FsOiBSZWplY3QgbmVnYXRpdmUg YW5kIG91dCBvZiByYW5nZQogYXJndW1lbnRzCgpUaGUgc3RydG91bCgpIGZ1bmN0aW9uIHRo YXQgd2UgdXNlZCB0byBwYXJzZSBtYW55IG9mIHRoZSBvcHRpb25zCmFjY2VwdHMgbmVnYXRp dmUgdmFsdWVzLCBhbmQgc2lsZW50bHkgd3JhcHMgdGhlbSB0byB0aGUgZXF1aXZhbGVudAp1 bnNpZ25lZCB2YWx1ZXMuIEZvciBleGFtcGxlLCAtMSBiZWNvbWVzIDB4RkZGRkZGRkYsIG9u IHBsYXRmb3Jtcwp3aGVyZSB1bnNpZ25lZCBsb25nIGlzIDMyIGJpdHMgd2lkZS4gQWxzbywg b24gcGxhdGZvcm1zIHdoZXJlCiJ1bnNpZ25lZCBsb25nIiBpcyA2NCBiaXRzIHdpZGUsIHdl IHNpbGVudGx5IGNhc3RlZCB2YWx1ZXMgbGFyZ2VyIHRoYW4KVUlOVDMyX01BWCB0byB0aGUg ZXF1aXZhbGVudCAzMi1iaXQgdmFsdWUuIEJvdGggb2YgdGhvc2UgYmVoYXZpb3JzCnNlZW0g dW5kZXNpcmVhYmxlLCBzbyB0aWdodGVuIHVwIHRoZSBwYXJzaW5nIHRvIHJlamVjdCBuZWdh dGl2ZSBhbmQKdG9vIGxhcmdlIHZhbHVlcy4KLS0tCiBzcmMvYmluL3BnX3Jlc2V0d2FsL3Bn X3Jlc2V0d2FsLmMgIHwgNjQgKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tCiBzcmMv YmluL3BnX3Jlc2V0d2FsL3QvMDAxX2Jhc2ljLnBsIHwgMTkgKysrKysrKystCiAyIGZpbGVz IGNoYW5nZWQsIDY4IGluc2VydGlvbnMoKyksIDE1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp dCBhL3NyYy9iaW4vcGdfcmVzZXR3YWwvcGdfcmVzZXR3YWwuYyBiL3NyYy9iaW4vcGdfcmVz ZXR3YWwvcGdfcmVzZXR3YWwuYwppbmRleCA4ZDVkOTgwNTI3OS4uOGNhOGRhZDAxYTAgMTAw NjQ0Ci0tLSBhL3NyYy9iaW4vcGdfcmVzZXR3YWwvcGdfcmVzZXR3YWwuYworKysgYi9zcmMv YmluL3BnX3Jlc2V0d2FsL3BnX3Jlc2V0d2FsLmMKQEAgLTkyLDYgKzkyLDcgQEAgc3RhdGlj IHZvaWQgS2lsbEV4aXN0aW5nQXJjaGl2ZVN0YXR1cyh2b2lkKTsKIHN0YXRpYyB2b2lkIEtp bGxFeGlzdGluZ1dBTFN1bW1hcmllcyh2b2lkKTsKIHN0YXRpYyB2b2lkIFdyaXRlRW1wdHlY TE9HKHZvaWQpOwogc3RhdGljIHZvaWQgdXNhZ2Uodm9pZCk7CitzdGF0aWMgdWludDMyIHN0 cnRvdWludDMyX3N0cmljdChjb25zdCBjaGFyICpyZXN0cmljdCBzLCBjaGFyICoqcmVzdHJp Y3QgZW5kcHRyLCBpbnQgYmFzZSk7CiAKIAogaW50CkBAIC0xMjAsNyArMTIxLDYgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCU11bHRpWGFjdElkIHNldF9vbGRlc3RteGlk ID0gMDsKIAljaGFyCSAgICplbmRwdHI7CiAJY2hhcgkgICAqZW5kcHRyMjsKLQlpbnQ2NAkJ dG1waTY0OwogCWNoYXIJICAgKkRhdGFEaXIgPSBOVUxMOwogCWNoYXIJICAgKmxvZ19mbmFt ZSA9IE5VTEw7CiAJaW50CQkJZmQ7CkBAIC0xNjIsNyArMTYyLDcgQEAgbWFpbihpbnQgYXJn YywgY2hhciAqYXJndltdKQogCiAJCQljYXNlICdlJzoKIAkJCQllcnJubyA9IDA7Ci0JCQkJ c2V0X3hpZF9lcG9jaCA9IHN0cnRvdWwob3B0YXJnLCAmZW5kcHRyLCAwKTsKKwkJCQlzZXRf eGlkX2Vwb2NoID0gc3RydG91aW50MzJfc3RyaWN0KG9wdGFyZywgJmVuZHB0ciwgMCk7CiAJ CQkJaWYgKGVuZHB0ciA9PSBvcHRhcmcgfHwgKmVuZHB0ciAhPSAnXDAnIHx8IGVycm5vICE9 IDApCiAJCQkJewogCQkJCQkvKi0tLS0tLQpAQCAtMTc3LDcgKzE3Nyw3IEBAIG1haW4oaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAogCQkJY2FzZSAndSc6CiAJCQkJZXJybm8gPSAwOwot CQkJCXNldF9vbGRlc3RfeGlkID0gc3RydG91bChvcHRhcmcsICZlbmRwdHIsIDApOworCQkJ CXNldF9vbGRlc3RfeGlkID0gc3RydG91aW50MzJfc3RyaWN0KG9wdGFyZywgJmVuZHB0ciwg MCk7CiAJCQkJaWYgKGVuZHB0ciA9PSBvcHRhcmcgfHwgKmVuZHB0ciAhPSAnXDAnIHx8IGVy cm5vICE9IDApCiAJCQkJewogCQkJCQlwZ19sb2dfZXJyb3IoImludmFsaWQgYXJndW1lbnQg Zm9yIG9wdGlvbiAlcyIsICItdSIpOwpAQCAtMTkwLDcgKzE5MCw3IEBAIG1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKIAogCQkJY2FzZSAneCc6CiAJCQkJZXJybm8gPSAwOwotCQkJ CXNldF94aWQgPSBzdHJ0b3VsKG9wdGFyZywgJmVuZHB0ciwgMCk7CisJCQkJc2V0X3hpZCA9 IHN0cnRvdWludDMyX3N0cmljdChvcHRhcmcsICZlbmRwdHIsIDApOwogCQkJCWlmIChlbmRw dHIgPT0gb3B0YXJnIHx8ICplbmRwdHIgIT0gJ1wwJyB8fCBlcnJubyAhPSAwKQogCQkJCXsK IAkJCQkJcGdfbG9nX2Vycm9yKCJpbnZhbGlkIGFyZ3VtZW50IGZvciBvcHRpb24gJXMiLCAi LXgiKTsKQEAgLTIwMyw3ICsyMDMsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10p CiAKIAkJCWNhc2UgJ2MnOgogCQkJCWVycm5vID0gMDsKLQkJCQlzZXRfb2xkZXN0X2NvbW1p dF90c194aWQgPSBzdHJ0b3VsKG9wdGFyZywgJmVuZHB0ciwgMCk7CisJCQkJc2V0X29sZGVz dF9jb21taXRfdHNfeGlkID0gc3RydG91aW50MzJfc3RyaWN0KG9wdGFyZywgJmVuZHB0ciwg MCk7CiAJCQkJaWYgKGVuZHB0ciA9PSBvcHRhcmcgfHwgKmVuZHB0ciAhPSAnLCcgfHwgZXJy bm8gIT0gMCkKIAkJCQl7CiAJCQkJCXBnX2xvZ19lcnJvcigiaW52YWxpZCBhcmd1bWVudCBm b3Igb3B0aW9uICVzIiwgIi1jIik7CkBAIC0yMjksNyArMjI5LDcgQEAgbWFpbihpbnQgYXJn YywgY2hhciAqYXJndltdKQogCiAJCQljYXNlICdvJzoKIAkJCQllcnJubyA9IDA7Ci0JCQkJ c2V0X29pZCA9IHN0cnRvdWwob3B0YXJnLCAmZW5kcHRyLCAwKTsKKwkJCQlzZXRfb2lkID0g c3RydG91aW50MzJfc3RyaWN0KG9wdGFyZywgJmVuZHB0ciwgMCk7CiAJCQkJaWYgKGVuZHB0 ciA9PSBvcHRhcmcgfHwgKmVuZHB0ciAhPSAnXDAnIHx8IGVycm5vICE9IDApCiAJCQkJewog CQkJCQlwZ19sb2dfZXJyb3IoImludmFsaWQgYXJndW1lbnQgZm9yIG9wdGlvbiAlcyIsICIt byIpOwpAQCAtMjQyLDcgKzI0Miw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkK IAogCQkJY2FzZSAnbSc6CiAJCQkJZXJybm8gPSAwOwotCQkJCXNldF9teGlkID0gc3RydG91 bChvcHRhcmcsICZlbmRwdHIsIDApOworCQkJCXNldF9teGlkID0gc3RydG91aW50MzJfc3Ry aWN0KG9wdGFyZywgJmVuZHB0ciwgMCk7CiAJCQkJaWYgKGVuZHB0ciA9PSBvcHRhcmcgfHwg KmVuZHB0ciAhPSAnLCcgfHwgZXJybm8gIT0gMCkKIAkJCQl7CiAJCQkJCXBnX2xvZ19lcnJv cigiaW52YWxpZCBhcmd1bWVudCBmb3Igb3B0aW9uICVzIiwgIi1tIik7CkBAIC0yNTAsNyAr MjUwLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkJCQlleGl0KDEpOwog CQkJCX0KIAotCQkJCXNldF9vbGRlc3RteGlkID0gc3RydG91bChlbmRwdHIgKyAxLCAmZW5k cHRyMiwgMCk7CisJCQkJc2V0X29sZGVzdG14aWQgPSBzdHJ0b3VpbnQzMl9zdHJpY3QoZW5k cHRyICsgMSwgJmVuZHB0cjIsIDApOwogCQkJCWlmIChlbmRwdHIyID09IGVuZHB0ciArIDEg fHwgKmVuZHB0cjIgIT0gJ1wwJyB8fCBlcnJubyAhPSAwKQogCQkJCXsKIAkJCQkJcGdfbG9n X2Vycm9yKCJpbnZhbGlkIGFyZ3VtZW50IGZvciBvcHRpb24gJXMiLCAiLW0iKTsKQEAgLTI2 OSwxNyArMjY5LDEzIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAogCQkJY2Fz ZSAnTyc6CiAJCQkJZXJybm8gPSAwOwotCQkJCXRtcGk2NCA9IHN0cnRvaTY0KG9wdGFyZywg JmVuZHB0ciwgMCk7CisJCQkJc2V0X214b2ZmID0gc3RydG91aW50MzJfc3RyaWN0KG9wdGFy ZywgJmVuZHB0ciwgMCk7CiAJCQkJaWYgKGVuZHB0ciA9PSBvcHRhcmcgfHwgKmVuZHB0ciAh PSAnXDAnIHx8IGVycm5vICE9IDApCiAJCQkJewogCQkJCQlwZ19sb2dfZXJyb3IoImludmFs aWQgYXJndW1lbnQgZm9yIG9wdGlvbiAlcyIsICItTyIpOwogCQkJCQlwZ19sb2dfZXJyb3Jf aGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25h bWUpOwogCQkJCQlleGl0KDEpOwogCQkJCX0KLQkJCQlpZiAodG1waTY0IDwgMCB8fCB0bXBp NjQgPiAoaW50NjQpIE1heE11bHRpWGFjdE9mZnNldCkKLQkJCQkJcGdfZmF0YWwoIm11bHRp dHJhbnNhY3Rpb24gb2Zmc2V0ICgtTykgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kICV1IiwgTWF4 TXVsdGlYYWN0T2Zmc2V0KTsKLQotCQkJCXNldF9teG9mZiA9IChNdWx0aVhhY3RPZmZzZXQp IHRtcGk2NDsKIAkJCQlteG9mZl9naXZlbiA9IHRydWU7CiAJCQkJYnJlYWs7CiAKQEAgLTEy MTQsMyArMTIxMCw0NSBAQCB1c2FnZSh2b2lkKQogCXByaW50ZihfKCJcblJlcG9ydCBidWdz IHRvIDwlcz4uXG4iKSwgUEFDS0FHRV9CVUdSRVBPUlQpOwogCXByaW50ZihfKCIlcyBob21l IHBhZ2U6IDwlcz5cbiIpLCBQQUNLQUdFX05BTUUsIFBBQ0tBR0VfVVJMKTsKIH0KKworLyoK KyAqIHN0cnRvdWludDMyX3N0cmljdCAtLSBsaWtlIHN0cnRvdWwoKSwgYnV0IHJldHVybnMg dWludDMyIGFuZCBkb2Vzbid0IGFjY2VwdAorICogbmVnYXRpdmUgdmFsdWVzCisgKi8KK3N0 YXRpYyB1aW50MzIKK3N0cnRvdWludDMyX3N0cmljdChjb25zdCBjaGFyICpyZXN0cmljdCBz LCBjaGFyICoqcmVzdHJpY3QgZW5kcHRyLCBpbnQgYmFzZSkKK3sKKwl1bnNpZ25lZCBsb25n IHZhbDsKKwlib29sCQlpc19uZWc7CisKKwkvKiBza2lwIGxlYWRpbmcgd2hpdGVzcGFjZSAq LworCXdoaWxlIChpc3NwYWNlKCpzKSkKKwkJcysrOworCisJLyoKKwkgKiBJcyBpdCBuZWdh dGl2ZT8gIFdlIHN0aWxsIGNhbGwgc3RydG91bCgpIGlmIGl0IHdhcywgdG8gc2V0ICdlbmRw dHInLgorCSAqIChUaGUgY3VycmVudCBjYWxsZXJzIGRvbid0IGNhcmUgdGhvdWdoLikKKwkg Ki8KKwlpc19uZWcgPSAoKnMgPT0gJy0nKTsKKworCXZhbCA9IHN0cnRvdWwocywgZW5kcHRy LCBiYXNlKTsKKworCS8qIHJlamVjdCBpZiBpdCB3YXMgbmVnYXRpdmUgKi8KKwlpZiAoZXJy bm8gPT0gMCAmJiBpc19uZWcpCisJeworCQllcnJubyA9IEVSQU5HRTsKKwkJdmFsID0gMDsK Kwl9CisKKwkvKgorCSAqIHJlamVjdCB2YWx1ZXMgbGFyZ2VyIHRoYW4gVUlOVDMyX01BWCBv biBwbGF0Zm9ybXMgd2hlcmUgbG9uZyBpcyA2NCBiaXRzCisJICogd2lkZS4KKwkgKi8KKwlp ZiAoZXJybm8gPT0gMCAmJiB2YWwgIT0gKHVpbnQzMikgdmFsKQorCXsKKwkJZXJybm8gPSBF UkFOR0U7CisJCXZhbCA9IFVJTlQzMl9NQVg7CisJfQorCisJcmV0dXJuICh1aW50MzIpIHZh bDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfcmVzZXR3YWwvdC8wMDFfYmFzaWMucGwg Yi9zcmMvYmluL3BnX3Jlc2V0d2FsL3QvMDAxX2Jhc2ljLnBsCmluZGV4IDkwZWNiOGFmZTE4 Li5lOTc4MGRiZTJhNiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19yZXNldHdhbC90LzAwMV9i YXNpYy5wbAorKysgYi9zcmMvYmluL3BnX3Jlc2V0d2FsL3QvMDAxX2Jhc2ljLnBsCkBAIC0x MDMsNyArMTAzLDcgQEAgY29tbWFuZF9mYWlsc19saWtlKAogCSdmYWlscyB3aXRoIGluY29y cmVjdCAtZSBvcHRpb24nKTsKIGNvbW1hbmRfZmFpbHNfbGlrZSgKIAlbICdwZ19yZXNldHdh bCcsICctZScgPT4gJy0xJywgJG5vZGUtPmRhdGFfZGlyIF0sCi0JcXIvbXVzdCBub3QgYmUg LTEvLAorCXFyL2Vycm9yOiBpbnZhbGlkIGFyZ3VtZW50IGZvciBvcHRpb24gLWUvLAogCSdm YWlscyB3aXRoIC1lIHZhbHVlIC0xJyk7CiAjIC1sCiBjb21tYW5kX2ZhaWxzX2xpa2UoCkBA IC0xNDUsNyArMTQ1LDcgQEAgY29tbWFuZF9mYWlsc19saWtlKAogCSdmYWlscyB3aXRoIGlu Y29ycmVjdCAtTyBvcHRpb24nKTsKIGNvbW1hbmRfZmFpbHNfbGlrZSgKIAlbICdwZ19yZXNl dHdhbCcsICctTycgPT4gJy0xJywgJG5vZGUtPmRhdGFfZGlyIF0sCi0JcXIvbXVzdCBiZSBi ZXR3ZWVuIDAgYW5kIDQyOTQ5NjcyOTUvLAorCXFyL2Vycm9yOiBpbnZhbGlkIGFyZ3VtZW50 IGZvciBvcHRpb24gLU8vLAogCSdmYWlscyB3aXRoIC1PIHZhbHVlIC0xJyk7CiAjIC0td2Fs LXNlZ3NpemUKIGNvbW1hbmRfZmFpbHNfbGlrZSgKQEAgLTE3NSw2ICsxNzUsMjEgQEAgY29t bWFuZF9mYWlsc19saWtlKAogCXFyL211c3QgYmUgZ3JlYXRlciB0aGFuLywKIAknZmFpbHMg d2l0aCAteCB2YWx1ZSB0b28gc21hbGwnKTsKIAorIyBDaGVjayBvdXQgb2YgcmFuZ2UgdmFs dWVzIHdpdGggLXguIFRoZXNlIGFyZSBmb3JiaWRkZW4gZm9yIGFsbCBvdGhlcgorIyAzMi1i aXQgdmFsdWVzIHRvbywgYnV0IHdlIHVzZSBqdXN0IC14IHRvIGV4ZXJjaXNlIHRoZSBwYXJz aW5nLgorY29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3BnX3Jlc2V0d2FsJywgJy14JyA9PiAn LTEnLCAkbm9kZS0+ZGF0YV9kaXIgXSwKKwlxci9lcnJvcjogaW52YWxpZCBhcmd1bWVudCBm b3Igb3B0aW9uIC14LywKKwknZmFpbHMgd2l0aCAteCB2YWx1ZSAtMScpOworY29tbWFuZF9m YWlsc19saWtlKAorCVsgJ3BnX3Jlc2V0d2FsJywgJy14JyA9PiAnLTEwMCcsICRub2RlLT5k YXRhX2RpciBdLAorCXFyL2Vycm9yOiBpbnZhbGlkIGFyZ3VtZW50IGZvciBvcHRpb24gLXgv LAorCSdmYWlscyB3aXRoIG5lZ2F0aXZlIC14IHZhbHVlJyk7Citjb21tYW5kX2ZhaWxzX2xp a2UoCisJWyAncGdfcmVzZXR3YWwnLCAnLXgnID0+ICcxMDAwMDAwMDAwMCcsICRub2RlLT5k YXRhX2RpciBdLAorCXFyL2Vycm9yOiBpbnZhbGlkIGFyZ3VtZW50IGZvciBvcHRpb24gLXgv LAorCSdmYWlscyB3aXRoIC14IHZhbHVlIHRvbyBsYXJnZScpOworCiAjIC0tY2hhci1zaWdu ZWRuZXNzCiBjb21tYW5kX2ZhaWxzX2xpa2UoCiAJWyAncGdfcmVzZXR3YWwnLCAnLS1jaGFy LXNpZ25lZG5lc3MnLCAnZm9vJywgJG5vZGUtPmRhdGFfZGlyIF0sCi0tIAoyLjQ3LjMKCg== --------------EF1KvNPe4qiGLZkWwh7MtAzl Content-Type: text/x-patch; charset=UTF-8; name="v29-0002-pg_resetwal-Use-separate-flags-for-whether-an-op.patch" Content-Disposition: attachment; filename*0="v29-0002-pg_resetwal-Use-separate-flags-for-whether-an-op.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA3YzdlMGFkMTJhMWE1NzViN2RiMGQwZGEzN2U0NjNhYWE3N2MyNTI4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMyBEZWMgMjAyNSAyMDo0ODo0OCArMDIwMApT dWJqZWN0OiBbUEFUQ0ggdjI5IDIvNl0gcGdfcmVzZXR3YWw6IFVzZSBzZXBhcmF0ZSBmbGFn cyBmb3Igd2hldGhlciBhbiBvcHRpb24KIGlzIGdpdmVuCgpDdXJyZW50bHksIHdlIHVzZSBz cGVjaWFsIHZhbHVlcyB0aGF0IGFyZSBvdGhlcndpc2UgaW52YWxpZCBmb3IgZWFjaApvcHRp b24gdG8gaW5kaWNhdGUgIm9wdGlvbiB3YXMgbm90IGdpdmVuIi4gUmVwbGFjZSB0aGF0IHdp dGggc2VwYXJhdGUKYm9vbGVhbiB2YXJpYWJsZXMgZm9yIGVhY2ggb3B0aW9uLiBJdCBzZWVt cyBtb3JlIGNsZWFyIHRvIGJlIGV4cGxpY2l0LgoKV2Ugd2VyZSBhbHJlYWR5IGRvaW5nIHRo YXQgZm9yIHRoZSAtbSBvcHRpb24sIGJlY2F1c2UgdGhlcmUgd2VyZSBubwppbnZhbGlkIHZh bHVlcyBmb3IgbmV4dE11bHRpIHRoYXQgd2UgY291bGQgdXNlIChzaW5jZSBjb21taXQKOTQ5 MzljNWYzYSkuCi0tLQogc3JjL2Jpbi9wZ19yZXNldHdhbC9wZ19yZXNldHdhbC5jIHwgMTY2 ICsrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDk1IGlu c2VydGlvbnMoKyksIDcxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdf cmVzZXR3YWwvcGdfcmVzZXR3YWwuYyBiL3NyYy9iaW4vcGdfcmVzZXR3YWwvcGdfcmVzZXR3 YWwuYwppbmRleCA4Y2E4ZGFkMDFhMC4uYzY2N2ExMWNiNmEgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcGdfcmVzZXR3YWwvcGdfcmVzZXR3YWwuYworKysgYi9zcmMvYmluL3BnX3Jlc2V0d2Fs L3BnX3Jlc2V0d2FsLmMKQEAgLTY0LDIxICs2NCw0MyBAQCBzdGF0aWMgQ29udHJvbEZpbGVE YXRhIENvbnRyb2xGaWxlOyAvKiBwZ19jb250cm9sIHZhbHVlcyAqLwogc3RhdGljIFhMb2dT ZWdObyBuZXdYbG9nU2VnTm87CS8qIG5ldyBYTE9HIHNlZ21lbnQgIyAqLwogc3RhdGljIGJv b2wgZ3Vlc3NlZCA9IGZhbHNlOwkvKiBUIGlmIHdlIGhhZCB0byBndWVzcyBhdCBhbnkgdmFs dWVzICovCiBzdGF0aWMgY29uc3QgY2hhciAqcHJvZ25hbWU7Ci1zdGF0aWMgdWludDMyIHNl dF94aWRfZXBvY2ggPSAodWludDMyKSAtMTsKLXN0YXRpYyBUcmFuc2FjdGlvbklkIHNldF9v bGRlc3RfeGlkID0gMDsKLXN0YXRpYyBUcmFuc2FjdGlvbklkIHNldF94aWQgPSAwOwotc3Rh dGljIFRyYW5zYWN0aW9uSWQgc2V0X29sZGVzdF9jb21taXRfdHNfeGlkID0gMDsKLXN0YXRp YyBUcmFuc2FjdGlvbklkIHNldF9uZXdlc3RfY29tbWl0X3RzX3hpZCA9IDA7Ci1zdGF0aWMg T2lkCXNldF9vaWQgPSAwOwotc3RhdGljIGJvb2wgbXhpZF9naXZlbiA9IGZhbHNlOwotc3Rh dGljIE11bHRpWGFjdElkIHNldF9teGlkID0gMDsKLXN0YXRpYyBib29sIG14b2ZmX2dpdmVu ID0gZmFsc2U7Ci1zdGF0aWMgTXVsdGlYYWN0T2Zmc2V0IHNldF9teG9mZiA9IDA7CisKKy8q CisgKiBOZXcgdmFsdWVzIGdpdmVuIG9uIHRoZSBjb21tYW5kLWxpbmUKKyAqLworc3RhdGlj IGJvb2wgbmV4dF94aWRfZXBvY2hfZ2l2ZW4gPSBmYWxzZTsKK3N0YXRpYyB1aW50MzIgbmV4 dF94aWRfZXBvY2hfdmFsOworCitzdGF0aWMgYm9vbCBvbGRlc3RfeGlkX2dpdmVuID0gZmFs c2U7CitzdGF0aWMgVHJhbnNhY3Rpb25JZCBvbGRlc3RfeGlkX3ZhbDsKKworc3RhdGljIGJv b2wgbmV4dF94aWRfZ2l2ZW4gPSBmYWxzZTsKK3N0YXRpYyBUcmFuc2FjdGlvbklkIG5leHRf eGlkX3ZhbDsKKworc3RhdGljIGJvb2wgY29tbWl0X3RzX3hpZHNfZ2l2ZW4gPSBmYWxzZTsK K3N0YXRpYyBUcmFuc2FjdGlvbklkIG9sZGVzdF9jb21taXRfdHNfeGlkX3ZhbDsKK3N0YXRp YyBUcmFuc2FjdGlvbklkIG5ld2VzdF9jb21taXRfdHNfeGlkX3ZhbDsKKworc3RhdGljIGJv b2wgbmV4dF9vaWRfZ2l2ZW4gPSBmYWxzZTsKK3N0YXRpYyBPaWQJbmV4dF9vaWRfdmFsOwor CitzdGF0aWMgYm9vbCBteGlkc19naXZlbiA9IGZhbHNlOworc3RhdGljIE11bHRpWGFjdElk IG5leHRfbXhpZF92YWw7CitzdGF0aWMgTXVsdGlYYWN0SWQgb2xkZXN0X214aWRfdmFsID0g MDsKKworc3RhdGljIGJvb2wgbmV4dF9teG9mZl9naXZlbiA9IGZhbHNlOworc3RhdGljIE11 bHRpWGFjdE9mZnNldCBuZXh0X214b2ZmX3ZhbDsKKworc3RhdGljIGJvb2wgd2FsX3NlZ3Np emVfZ2l2ZW4gPSBmYWxzZTsKK3N0YXRpYyBpbnQJd2FsX3NlZ3NpemVfdmFsOworCitzdGF0 aWMgYm9vbCBjaGFyX3NpZ25lZG5lc3NfZ2l2ZW4gPSBmYWxzZTsKK3N0YXRpYyBib29sIGNo YXJfc2lnbmVkbmVzc192YWw7CisKKwogc3RhdGljIFRpbWVMaW5lSUQgbWluWGxvZ1RsaSA9 IDA7CiBzdGF0aWMgWExvZ1NlZ05vIG1pblhsb2dTZWdObyA9IDA7CiBzdGF0aWMgaW50CVdh bFNlZ1N6Owotc3RhdGljIGludAlzZXRfd2FsX3NlZ3NpemU7Ci1zdGF0aWMgaW50CXNldF9j aGFyX3NpZ25lZG5lc3MgPSAtMTsKIAogc3RhdGljIHZvaWQgQ2hlY2tEYXRhVmVyc2lvbih2 b2lkKTsKIHN0YXRpYyBib29sIHJlYWRfY29udHJvbGZpbGUodm9pZCk7CkBAIC0xMTgsNyAr MTQwLDYgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWludAkJCWM7CiAJYm9v bAkJZm9yY2UgPSBmYWxzZTsKIAlib29sCQlub3VwZGF0ZSA9IGZhbHNlOwotCU11bHRpWGFj dElkIHNldF9vbGRlc3RteGlkID0gMDsKIAljaGFyCSAgICplbmRwdHI7CiAJY2hhcgkgICAq ZW5kcHRyMjsKIAljaGFyCSAgICpEYXRhRGlyID0gTlVMTDsKQEAgLTE2Miw3ICsxODMsNyBA QCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAKIAkJCWNhc2UgJ2UnOgogCQkJCWVy cm5vID0gMDsKLQkJCQlzZXRfeGlkX2Vwb2NoID0gc3RydG91aW50MzJfc3RyaWN0KG9wdGFy ZywgJmVuZHB0ciwgMCk7CisJCQkJbmV4dF94aWRfZXBvY2hfdmFsID0gc3RydG91aW50MzJf c3RyaWN0KG9wdGFyZywgJmVuZHB0ciwgMCk7CiAJCQkJaWYgKGVuZHB0ciA9PSBvcHRhcmcg fHwgKmVuZHB0ciAhPSAnXDAnIHx8IGVycm5vICE9IDApCiAJCQkJewogCQkJCQkvKi0tLS0t LQpAQCAtMTcxLDQ2ICsxOTIsNDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQog CQkJCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5m b3JtYXRpb24uIiwgcHJvZ25hbWUpOwogCQkJCQlleGl0KDEpOwogCQkJCX0KLQkJCQlpZiAo c2V0X3hpZF9lcG9jaCA9PSAtMSkKLQkJCQkJcGdfZmF0YWwoInRyYW5zYWN0aW9uIElEIGVw b2NoICgtZSkgbXVzdCBub3QgYmUgLTEiKTsKKwkJCQluZXh0X3hpZF9lcG9jaF9naXZlbiA9 IHRydWU7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgJ3UnOgogCQkJCWVycm5vID0gMDsKLQkJ CQlzZXRfb2xkZXN0X3hpZCA9IHN0cnRvdWludDMyX3N0cmljdChvcHRhcmcsICZlbmRwdHIs IDApOworCQkJCW9sZGVzdF94aWRfdmFsID0gc3RydG91aW50MzJfc3RyaWN0KG9wdGFyZywg JmVuZHB0ciwgMCk7CiAJCQkJaWYgKGVuZHB0ciA9PSBvcHRhcmcgfHwgKmVuZHB0ciAhPSAn XDAnIHx8IGVycm5vICE9IDApCiAJCQkJewogCQkJCQlwZ19sb2dfZXJyb3IoImludmFsaWQg YXJndW1lbnQgZm9yIG9wdGlvbiAlcyIsICItdSIpOwogCQkJCQlwZ19sb2dfZXJyb3JfaGlu dCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUp OwogCQkJCQlleGl0KDEpOwogCQkJCX0KLQkJCQlpZiAoIVRyYW5zYWN0aW9uSWRJc05vcm1h bChzZXRfb2xkZXN0X3hpZCkpCisJCQkJaWYgKCFUcmFuc2FjdGlvbklkSXNOb3JtYWwob2xk ZXN0X3hpZF92YWwpKQogCQkJCQlwZ19mYXRhbCgib2xkZXN0IHRyYW5zYWN0aW9uIElEICgt dSkgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXUiLCBGaXJzdE5vcm1hbFRy YW5zYWN0aW9uSWQpOworCQkJCW9sZGVzdF94aWRfZ2l2ZW4gPSB0cnVlOwogCQkJCWJyZWFr OwogCiAJCQljYXNlICd4JzoKIAkJCQllcnJubyA9IDA7Ci0JCQkJc2V0X3hpZCA9IHN0cnRv dWludDMyX3N0cmljdChvcHRhcmcsICZlbmRwdHIsIDApOworCQkJCW5leHRfeGlkX3ZhbCA9 IHN0cnRvdWludDMyX3N0cmljdChvcHRhcmcsICZlbmRwdHIsIDApOwogCQkJCWlmIChlbmRw dHIgPT0gb3B0YXJnIHx8ICplbmRwdHIgIT0gJ1wwJyB8fCBlcnJubyAhPSAwKQogCQkJCXsK IAkJCQkJcGdfbG9nX2Vycm9yKCJpbnZhbGlkIGFyZ3VtZW50IGZvciBvcHRpb24gJXMiLCAi LXgiKTsKIAkJCQkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBt b3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKIAkJCQkJZXhpdCgxKTsKIAkJCQl9Ci0J CQkJaWYgKCFUcmFuc2FjdGlvbklkSXNOb3JtYWwoc2V0X3hpZCkpCisJCQkJaWYgKCFUcmFu c2FjdGlvbklkSXNOb3JtYWwobmV4dF94aWRfdmFsKSkKIAkJCQkJcGdfZmF0YWwoInRyYW5z YWN0aW9uIElEICgteCkgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXUiLCBG aXJzdE5vcm1hbFRyYW5zYWN0aW9uSWQpOworCQkJCW5leHRfeGlkX2dpdmVuID0gdHJ1ZTsK IAkJCQlicmVhazsKIAogCQkJY2FzZSAnYyc6CiAJCQkJZXJybm8gPSAwOwotCQkJCXNldF9v bGRlc3RfY29tbWl0X3RzX3hpZCA9IHN0cnRvdWludDMyX3N0cmljdChvcHRhcmcsICZlbmRw dHIsIDApOworCQkJCW9sZGVzdF9jb21taXRfdHNfeGlkX3ZhbCA9IHN0cnRvdWludDMyX3N0 cmljdChvcHRhcmcsICZlbmRwdHIsIDApOwogCQkJCWlmIChlbmRwdHIgPT0gb3B0YXJnIHx8 ICplbmRwdHIgIT0gJywnIHx8IGVycm5vICE9IDApCiAJCQkJewogCQkJCQlwZ19sb2dfZXJy b3IoImludmFsaWQgYXJndW1lbnQgZm9yIG9wdGlvbiAlcyIsICItYyIpOwogCQkJCQlwZ19s b2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24u IiwgcHJvZ25hbWUpOwogCQkJCQlleGl0KDEpOwogCQkJCX0KLQkJCQlzZXRfbmV3ZXN0X2Nv bW1pdF90c194aWQgPSBzdHJ0b3VsKGVuZHB0ciArIDEsICZlbmRwdHIyLCAwKTsKKwkJCQlu ZXdlc3RfY29tbWl0X3RzX3hpZF92YWwgPSBzdHJ0b3VsKGVuZHB0ciArIDEsICZlbmRwdHIy LCAwKTsKIAkJCQlpZiAoZW5kcHRyMiA9PSBlbmRwdHIgKyAxIHx8ICplbmRwdHIyICE9ICdc MCcgfHwgZXJybm8gIT0gMCkKIAkJCQl7CiAJCQkJCXBnX2xvZ19lcnJvcigiaW52YWxpZCBh cmd1bWVudCBmb3Igb3B0aW9uICVzIiwgIi1jIik7CkBAIC0yMTgsMzEgKzI0MCwzMyBAQCBt YWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCQkJCWV4aXQoMSk7CiAJCQkJfQogCi0J CQkJaWYgKHNldF9vbGRlc3RfY29tbWl0X3RzX3hpZCA8IEZpcnN0Tm9ybWFsVHJhbnNhY3Rp b25JZCAmJgotCQkJCQlzZXRfb2xkZXN0X2NvbW1pdF90c194aWQgIT0gSW52YWxpZFRyYW5z YWN0aW9uSWQpCisJCQkJaWYgKG9sZGVzdF9jb21taXRfdHNfeGlkX3ZhbCA8IEZpcnN0Tm9y bWFsVHJhbnNhY3Rpb25JZCAmJgorCQkJCQlvbGRlc3RfY29tbWl0X3RzX3hpZF92YWwgIT0g SW52YWxpZFRyYW5zYWN0aW9uSWQpCiAJCQkJCXBnX2ZhdGFsKCJ0cmFuc2FjdGlvbiBJRCAo LWMpIG11c3QgYmUgZWl0aGVyICV1IG9yIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAldSIs IEludmFsaWRUcmFuc2FjdGlvbklkLCBGaXJzdE5vcm1hbFRyYW5zYWN0aW9uSWQpOwogCi0J CQkJaWYgKHNldF9uZXdlc3RfY29tbWl0X3RzX3hpZCA8IEZpcnN0Tm9ybWFsVHJhbnNhY3Rp b25JZCAmJgotCQkJCQlzZXRfbmV3ZXN0X2NvbW1pdF90c194aWQgIT0gSW52YWxpZFRyYW5z YWN0aW9uSWQpCisJCQkJaWYgKG5ld2VzdF9jb21taXRfdHNfeGlkX3ZhbCA8IEZpcnN0Tm9y bWFsVHJhbnNhY3Rpb25JZCAmJgorCQkJCQluZXdlc3RfY29tbWl0X3RzX3hpZF92YWwgIT0g SW52YWxpZFRyYW5zYWN0aW9uSWQpCiAJCQkJCXBnX2ZhdGFsKCJ0cmFuc2FjdGlvbiBJRCAo LWMpIG11c3QgYmUgZWl0aGVyICV1IG9yIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAldSIs IEludmFsaWRUcmFuc2FjdGlvbklkLCBGaXJzdE5vcm1hbFRyYW5zYWN0aW9uSWQpOworCQkJ CWNvbW1pdF90c194aWRzX2dpdmVuID0gdHJ1ZTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSAn byc6CiAJCQkJZXJybm8gPSAwOwotCQkJCXNldF9vaWQgPSBzdHJ0b3VpbnQzMl9zdHJpY3Qo b3B0YXJnLCAmZW5kcHRyLCAwKTsKKwkJCQluZXh0X29pZF92YWwgPSBzdHJ0b3VpbnQzMl9z dHJpY3Qob3B0YXJnLCAmZW5kcHRyLCAwKTsKIAkJCQlpZiAoZW5kcHRyID09IG9wdGFyZyB8 fCAqZW5kcHRyICE9ICdcMCcgfHwgZXJybm8gIT0gMCkKIAkJCQl7CiAJCQkJCXBnX2xvZ19l cnJvcigiaW52YWxpZCBhcmd1bWVudCBmb3Igb3B0aW9uICVzIiwgIi1vIik7CiAJCQkJCXBn X2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlv bi4iLCBwcm9nbmFtZSk7CiAJCQkJCWV4aXQoMSk7CiAJCQkJfQotCQkJCWlmIChzZXRfb2lk ID09IDApCisJCQkJaWYgKG5leHRfb2lkX3ZhbCA9PSAwKQogCQkJCQlwZ19mYXRhbCgiT0lE ICgtbykgbXVzdCBub3QgYmUgMCIpOworCQkJCW5leHRfb2lkX2dpdmVuID0gdHJ1ZTsKIAkJ CQlicmVhazsKIAogCQkJY2FzZSAnbSc6CiAJCQkJZXJybm8gPSAwOwotCQkJCXNldF9teGlk ID0gc3RydG91aW50MzJfc3RyaWN0KG9wdGFyZywgJmVuZHB0ciwgMCk7CisJCQkJbmV4dF9t eGlkX3ZhbCA9IHN0cnRvdWludDMyX3N0cmljdChvcHRhcmcsICZlbmRwdHIsIDApOwogCQkJ CWlmIChlbmRwdHIgPT0gb3B0YXJnIHx8ICplbmRwdHIgIT0gJywnIHx8IGVycm5vICE9IDAp CiAJCQkJewogCQkJCQlwZ19sb2dfZXJyb3IoImludmFsaWQgYXJndW1lbnQgZm9yIG9wdGlv biAlcyIsICItbSIpOwpAQCAtMjUwLDcgKzI3NCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkKIAkJCQkJZXhpdCgxKTsKIAkJCQl9CiAKLQkJCQlzZXRfb2xkZXN0bXhpZCA9 IHN0cnRvdWludDMyX3N0cmljdChlbmRwdHIgKyAxLCAmZW5kcHRyMiwgMCk7CisJCQkJb2xk ZXN0X214aWRfdmFsID0gc3RydG91aW50MzJfc3RyaWN0KGVuZHB0ciArIDEsICZlbmRwdHIy LCAwKTsKIAkJCQlpZiAoZW5kcHRyMiA9PSBlbmRwdHIgKyAxIHx8ICplbmRwdHIyICE9ICdc MCcgfHwgZXJybm8gIT0gMCkKIAkJCQl7CiAJCQkJCXBnX2xvZ19lcnJvcigiaW52YWxpZCBh cmd1bWVudCBmb3Igb3B0aW9uICVzIiwgIi1tIik7CkBAIC0yNjIsMjEgKzI4NiwyMSBAQCBt YWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCQkJICogWFhYIEl0J2QgYmUgbmljZSB0 byBoYXZlIG1vcmUgc2FuaXR5IGNoZWNrcyBoZXJlLCBlLmcuIHNvCiAJCQkJICogdGhhdCBv bGRlc3QgaXMgbm90IHdyYXBwZWQgYXJvdW5kIHcuci50LiBuZXh0TXVsdGkuCiAJCQkJICov Ci0JCQkJaWYgKHNldF9vbGRlc3RteGlkID09IDApCisJCQkJaWYgKG9sZGVzdF9teGlkX3Zh bCA9PSAwKQogCQkJCQlwZ19mYXRhbCgib2xkZXN0IG11bHRpdHJhbnNhY3Rpb24gSUQgKC1t KSBtdXN0IG5vdCBiZSAwIik7Ci0JCQkJbXhpZF9naXZlbiA9IHRydWU7CisJCQkJbXhpZHNf Z2l2ZW4gPSB0cnVlOwogCQkJCWJyZWFrOwogCiAJCQljYXNlICdPJzoKIAkJCQllcnJubyA9 IDA7Ci0JCQkJc2V0X214b2ZmID0gc3RydG91aW50MzJfc3RyaWN0KG9wdGFyZywgJmVuZHB0 ciwgMCk7CisJCQkJbmV4dF9teG9mZl92YWwgPSBzdHJ0b3VpbnQzMl9zdHJpY3Qob3B0YXJn LCAmZW5kcHRyLCAwKTsKIAkJCQlpZiAoZW5kcHRyID09IG9wdGFyZyB8fCAqZW5kcHRyICE9 ICdcMCcgfHwgZXJybm8gIT0gMCkKIAkJCQl7CiAJCQkJCXBnX2xvZ19lcnJvcigiaW52YWxp ZCBhcmd1bWVudCBmb3Igb3B0aW9uICVzIiwgIi1PIik7CiAJCQkJCXBnX2xvZ19lcnJvcl9o aW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFt ZSk7CiAJCQkJCWV4aXQoMSk7CiAJCQkJfQotCQkJCW14b2ZmX2dpdmVuID0gdHJ1ZTsKKwkJ CQluZXh0X214b2ZmX2dpdmVuID0gdHJ1ZTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSAnbCc6 CkBAIC0zMDAsOSArMzI0LDEwIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAog CQkJCQlpZiAoIW9wdGlvbl9wYXJzZV9pbnQob3B0YXJnLCAiLS13YWwtc2Vnc2l6ZSIsIDEs IDEwMjQsICZ3YWxfc2Vnc2l6ZV9tYikpCiAJCQkJCQlleGl0KDEpOwotCQkJCQlzZXRfd2Fs X3NlZ3NpemUgPSB3YWxfc2Vnc2l6ZV9tYiAqIDEwMjQgKiAxMDI0OwotCQkJCQlpZiAoIUlz VmFsaWRXYWxTZWdTaXplKHNldF93YWxfc2Vnc2l6ZSkpCisJCQkJCXdhbF9zZWdzaXplX3Zh bCA9IHdhbF9zZWdzaXplX21iICogMTAyNCAqIDEwMjQ7CisJCQkJCWlmICghSXNWYWxpZFdh bFNlZ1NpemUod2FsX3NlZ3NpemVfdmFsKSkKIAkJCQkJCXBnX2ZhdGFsKCJhcmd1bWVudCBv ZiAlcyBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvIGJldHdlZW4gMSBhbmQgMTAyNCIsICItLXdh bC1zZWdzaXplIik7CisJCQkJCXdhbF9zZWdzaXplX2dpdmVuID0gdHJ1ZTsKIAkJCQkJYnJl YWs7CiAJCQkJfQogCkBAIC0zMTEsMTUgKzMzNiwxNiBAQCBtYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pCiAJCQkJCWVycm5vID0gMDsKIAogCQkJCQlpZiAocGdfc3RyY2FzZWNtcChv cHRhcmcsICJzaWduZWQiKSA9PSAwKQotCQkJCQkJc2V0X2NoYXJfc2lnbmVkbmVzcyA9IDE7 CisJCQkJCQljaGFyX3NpZ25lZG5lc3NfdmFsID0gdHJ1ZTsKIAkJCQkJZWxzZSBpZiAocGdf c3RyY2FzZWNtcChvcHRhcmcsICJ1bnNpZ25lZCIpID09IDApCi0JCQkJCQlzZXRfY2hhcl9z aWduZWRuZXNzID0gMDsKKwkJCQkJCWNoYXJfc2lnbmVkbmVzc192YWwgPSBmYWxzZTsKIAkJ CQkJZWxzZQogCQkJCQl7CiAJCQkJCQlwZ19sb2dfZXJyb3IoImludmFsaWQgYXJndW1lbnQg Zm9yIG9wdGlvbiAlcyIsICItLWNoYXItc2lnbmVkbmVzcyIpOwogCQkJCQkJcGdfbG9nX2Vy cm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHBy b2duYW1lKTsKIAkJCQkJCWV4aXQoMSk7CiAJCQkJCX0KKwkJCQkJY2hhcl9zaWduZWRuZXNz X2dpdmVuID0gdHJ1ZTsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCkBAIC00MDcsOCArNDMzLDgg QEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCS8qCiAJICogSWYgbm8gbmV3IFdB TCBzZWdtZW50IHNpemUgd2FzIHNwZWNpZmllZCwgdXNlIHRoZSBjb250cm9sIGZpbGUgdmFs dWUuCiAJICovCi0JaWYgKHNldF93YWxfc2Vnc2l6ZSAhPSAwKQotCQlXYWxTZWdTeiA9IHNl dF93YWxfc2Vnc2l6ZTsKKwlpZiAod2FsX3NlZ3NpemVfZ2l2ZW4pCisJCVdhbFNlZ1N6ID0g d2FsX3NlZ3NpemVfdmFsOwogCWVsc2UKIAkJV2FsU2VnU3ogPSBDb250cm9sRmlsZS54bG9n X3NlZ19zaXplOwogCkBAIC00MzEsNDIgKzQ1Nyw0MyBAQCBtYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pCiAJICogQWRqdXN0IGZpZWxkcyBpZiByZXF1aXJlZCBieSBzd2l0Y2hlcy4g IChEbyB0aGlzIG5vdyBzbyB0aGF0IHByaW50b3V0LAogCSAqIGlmIGFueSwgaW5jbHVkZXMg dGhlc2UgdmFsdWVzLikKIAkgKi8KLQlpZiAoc2V0X3hpZF9lcG9jaCAhPSAtMSkKKwlpZiAo bmV4dF94aWRfZXBvY2hfZ2l2ZW4pCiAJCUNvbnRyb2xGaWxlLmNoZWNrUG9pbnRDb3B5Lm5l eHRYaWQgPQotCQkJRnVsbFRyYW5zYWN0aW9uSWRGcm9tRXBvY2hBbmRYaWQoc2V0X3hpZF9l cG9jaCwKKwkJCUZ1bGxUcmFuc2FjdGlvbklkRnJvbUVwb2NoQW5kWGlkKG5leHRfeGlkX2Vw b2NoX3ZhbCwKIAkJCQkJCQkJCQkJIFhpZEZyb21GdWxsVHJhbnNhY3Rpb25JZChDb250cm9s RmlsZS5jaGVja1BvaW50Q29weS5uZXh0WGlkKSk7CiAKLQlpZiAoc2V0X29sZGVzdF94aWQg IT0gMCkKKwlpZiAob2xkZXN0X3hpZF9naXZlbikKIAl7Ci0JCUNvbnRyb2xGaWxlLmNoZWNr UG9pbnRDb3B5Lm9sZGVzdFhpZCA9IHNldF9vbGRlc3RfeGlkOworCQlDb250cm9sRmlsZS5j aGVja1BvaW50Q29weS5vbGRlc3RYaWQgPSBvbGRlc3RfeGlkX3ZhbDsKIAkJQ29udHJvbEZp bGUuY2hlY2tQb2ludENvcHkub2xkZXN0WGlkREIgPSBJbnZhbGlkT2lkOwogCX0KIAotCWlm IChzZXRfeGlkICE9IDApCisJaWYgKG5leHRfeGlkX2dpdmVuKQogCQlDb250cm9sRmlsZS5j aGVja1BvaW50Q29weS5uZXh0WGlkID0KIAkJCUZ1bGxUcmFuc2FjdGlvbklkRnJvbUVwb2No QW5kWGlkKEVwb2NoRnJvbUZ1bGxUcmFuc2FjdGlvbklkKENvbnRyb2xGaWxlLmNoZWNrUG9p bnRDb3B5Lm5leHRYaWQpLAotCQkJCQkJCQkJCQkgc2V0X3hpZCk7CisJCQkJCQkJCQkJCSBu ZXh0X3hpZF92YWwpOwogCi0JaWYgKHNldF9vbGRlc3RfY29tbWl0X3RzX3hpZCAhPSAwKQot CQlDb250cm9sRmlsZS5jaGVja1BvaW50Q29weS5vbGRlc3RDb21taXRUc1hpZCA9IHNldF9v bGRlc3RfY29tbWl0X3RzX3hpZDsKLQlpZiAoc2V0X25ld2VzdF9jb21taXRfdHNfeGlkICE9 IDApCi0JCUNvbnRyb2xGaWxlLmNoZWNrUG9pbnRDb3B5Lm5ld2VzdENvbW1pdFRzWGlkID0g c2V0X25ld2VzdF9jb21taXRfdHNfeGlkOworCWlmIChjb21taXRfdHNfeGlkc19naXZlbikK Kwl7CisJCUNvbnRyb2xGaWxlLmNoZWNrUG9pbnRDb3B5Lm9sZGVzdENvbW1pdFRzWGlkID0g b2xkZXN0X2NvbW1pdF90c194aWRfdmFsOworCQlDb250cm9sRmlsZS5jaGVja1BvaW50Q29w eS5uZXdlc3RDb21taXRUc1hpZCA9IG5ld2VzdF9jb21taXRfdHNfeGlkX3ZhbDsKKwl9CiAK LQlpZiAoc2V0X29pZCAhPSAwKQotCQlDb250cm9sRmlsZS5jaGVja1BvaW50Q29weS5uZXh0 T2lkID0gc2V0X29pZDsKKwlpZiAobmV4dF9vaWRfZ2l2ZW4pCisJCUNvbnRyb2xGaWxlLmNo ZWNrUG9pbnRDb3B5Lm5leHRPaWQgPSBuZXh0X29pZF92YWw7CiAKLQlpZiAobXhpZF9naXZl bikKKwlpZiAobXhpZHNfZ2l2ZW4pCiAJewotCQlDb250cm9sRmlsZS5jaGVja1BvaW50Q29w eS5uZXh0TXVsdGkgPSBzZXRfbXhpZDsKKwkJQ29udHJvbEZpbGUuY2hlY2tQb2ludENvcHku bmV4dE11bHRpID0gbmV4dF9teGlkX3ZhbDsKIAotCQlDb250cm9sRmlsZS5jaGVja1BvaW50 Q29weS5vbGRlc3RNdWx0aSA9IHNldF9vbGRlc3RteGlkOworCQlDb250cm9sRmlsZS5jaGVj a1BvaW50Q29weS5vbGRlc3RNdWx0aSA9IG9sZGVzdF9teGlkX3ZhbDsKIAkJaWYgKENvbnRy b2xGaWxlLmNoZWNrUG9pbnRDb3B5Lm9sZGVzdE11bHRpIDwgRmlyc3RNdWx0aVhhY3RJZCkK IAkJCUNvbnRyb2xGaWxlLmNoZWNrUG9pbnRDb3B5Lm9sZGVzdE11bHRpICs9IEZpcnN0TXVs dGlYYWN0SWQ7CiAJCUNvbnRyb2xGaWxlLmNoZWNrUG9pbnRDb3B5Lm9sZGVzdE11bHRpREIg PSBJbnZhbGlkT2lkOwogCX0KIAotCWlmIChteG9mZl9naXZlbikKLQkJQ29udHJvbEZpbGUu Y2hlY2tQb2ludENvcHkubmV4dE11bHRpT2Zmc2V0ID0gc2V0X214b2ZmOworCWlmIChuZXh0 X214b2ZmX2dpdmVuKQorCQlDb250cm9sRmlsZS5jaGVja1BvaW50Q29weS5uZXh0TXVsdGlP ZmZzZXQgPSBuZXh0X214b2ZmX3ZhbDsKIAogCWlmIChtaW5YbG9nVGxpID4gQ29udHJvbEZp bGUuY2hlY2tQb2ludENvcHkuVGhpc1RpbWVMaW5lSUQpCiAJewpAQCAtNDc0LDExICs1MDEs MTEgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQlDb250cm9sRmlsZS5jaGVj a1BvaW50Q29weS5QcmV2VGltZUxpbmVJRCA9IG1pblhsb2dUbGk7CiAJfQogCi0JaWYgKHNl dF93YWxfc2Vnc2l6ZSAhPSAwKQorCWlmICh3YWxfc2Vnc2l6ZV9naXZlbikKIAkJQ29udHJv bEZpbGUueGxvZ19zZWdfc2l6ZSA9IFdhbFNlZ1N6OwogCi0JaWYgKHNldF9jaGFyX3NpZ25l ZG5lc3MgIT0gLTEpCi0JCUNvbnRyb2xGaWxlLmRlZmF1bHRfY2hhcl9zaWduZWRuZXNzID0g KHNldF9jaGFyX3NpZ25lZG5lc3MgPT0gMSk7CisJaWYgKGNoYXJfc2lnbmVkbmVzc19naXZl bikKKwkJQ29udHJvbEZpbGUuZGVmYXVsdF9jaGFyX3NpZ25lZG5lc3MgPSBjaGFyX3NpZ25l ZG5lc3NfdmFsOwogCiAJaWYgKG1pblhsb2dTZWdObyA+IG5ld1hsb2dTZWdObykKIAkJbmV3 WGxvZ1NlZ05vID0gbWluWGxvZ1NlZ05vOwpAQCAtODA5LDcgKzgzNiw3IEBAIFByaW50TmV3 Q29udHJvbFZhbHVlcyh2b2lkKQogCQkJCSBuZXdYbG9nU2VnTm8sIFdhbFNlZ1N6KTsKIAlw cmludGYoXygiRmlyc3QgbG9nIHNlZ21lbnQgYWZ0ZXIgcmVzZXQ6ICAgICAgICAlc1xuIiks IGZuYW1lKTsKIAotCWlmIChteGlkX2dpdmVuKQorCWlmIChteGlkc19naXZlbikKIAl7CiAJ CXByaW50ZihfKCJOZXh0TXVsdGlYYWN0SWQ6ICAgICAgICAgICAgICAgICAgICAgICV1XG4i KSwKIAkJCSAgIENvbnRyb2xGaWxlLmNoZWNrUG9pbnRDb3B5Lm5leHRNdWx0aSk7CkBAIC04 MTksMjUgKzg0NiwyNSBAQCBQcmludE5ld0NvbnRyb2xWYWx1ZXModm9pZCkKIAkJCSAgIENv bnRyb2xGaWxlLmNoZWNrUG9pbnRDb3B5Lm9sZGVzdE11bHRpREIpOwogCX0KIAotCWlmICht eG9mZl9naXZlbikKKwlpZiAobmV4dF9teG9mZl9naXZlbikKIAl7CiAJCXByaW50ZihfKCJO ZXh0TXVsdGlPZmZzZXQ6ICAgICAgICAgICAgICAgICAgICAgICV1XG4iKSwKIAkJCSAgIENv bnRyb2xGaWxlLmNoZWNrUG9pbnRDb3B5Lm5leHRNdWx0aU9mZnNldCk7CiAJfQogCi0JaWYg KHNldF9vaWQgIT0gMCkKKwlpZiAobmV4dF9vaWRfZ2l2ZW4pCiAJewogCQlwcmludGYoXygi TmV4dE9JRDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAldVxuIiksCiAJCQkgICBD b250cm9sRmlsZS5jaGVja1BvaW50Q29weS5uZXh0T2lkKTsKIAl9CiAKLQlpZiAoc2V0X3hp ZCAhPSAwKQorCWlmIChuZXh0X3hpZF9naXZlbikKIAl7CiAJCXByaW50ZihfKCJOZXh0WElE OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICV1XG4iKSwKIAkJCSAgIFhpZEZyb21G dWxsVHJhbnNhY3Rpb25JZChDb250cm9sRmlsZS5jaGVja1BvaW50Q29weS5uZXh0WGlkKSk7 CiAJfQogCi0JaWYgKHNldF9vbGRlc3RfeGlkICE9IDApCisJaWYgKG9sZGVzdF94aWRfZ2l2 ZW4pCiAJewogCQlwcmludGYoXygiT2xkZXN0WElEOiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAldVxuIiksCiAJCQkgICBDb250cm9sRmlsZS5jaGVja1BvaW50Q29weS5vbGRlc3RY aWQpOwpAQCAtODQ1LDI0ICs4NzIsMjEgQEAgUHJpbnROZXdDb250cm9sVmFsdWVzKHZvaWQp CiAJCQkgICBDb250cm9sRmlsZS5jaGVja1BvaW50Q29weS5vbGRlc3RYaWREQik7CiAJfQog Ci0JaWYgKHNldF94aWRfZXBvY2ggIT0gLTEpCisJaWYgKG5leHRfeGlkX2Vwb2NoX2dpdmVu KQogCXsKIAkJcHJpbnRmKF8oIk5leHRYSUQgZXBvY2g6ICAgICAgICAgICAgICAgICAgICAg ICAgJXVcbiIpLAogCQkJICAgRXBvY2hGcm9tRnVsbFRyYW5zYWN0aW9uSWQoQ29udHJvbEZp bGUuY2hlY2tQb2ludENvcHkubmV4dFhpZCkpOwogCX0KIAotCWlmIChzZXRfb2xkZXN0X2Nv bW1pdF90c194aWQgIT0gMCkKKwlpZiAoY29tbWl0X3RzX3hpZHNfZ2l2ZW4pCiAJewogCQlw cmludGYoXygib2xkZXN0Q29tbWl0VHNYaWQ6ICAgICAgICAgICAgICAgICAgICAldVxuIiks CiAJCQkgICBDb250cm9sRmlsZS5jaGVja1BvaW50Q29weS5vbGRlc3RDb21taXRUc1hpZCk7 Ci0JfQotCWlmIChzZXRfbmV3ZXN0X2NvbW1pdF90c194aWQgIT0gMCkKLQl7CiAJCXByaW50 ZihfKCJuZXdlc3RDb21taXRUc1hpZDogICAgICAgICAgICAgICAgICAgICV1XG4iKSwKIAkJ CSAgIENvbnRyb2xGaWxlLmNoZWNrUG9pbnRDb3B5Lm5ld2VzdENvbW1pdFRzWGlkKTsKIAl9 CiAKLQlpZiAoc2V0X3dhbF9zZWdzaXplICE9IDApCisJaWYgKHdhbF9zZWdzaXplX2dpdmVu KQogCXsKIAkJcHJpbnRmKF8oIkJ5dGVzIHBlciBXQUwgc2VnbWVudDogICAgICAgICAgICAg ICAgJXVcbiIpLAogCQkJICAgQ29udHJvbEZpbGUueGxvZ19zZWdfc2l6ZSk7Ci0tIAoyLjQ3 LjMKCg== --------------EF1KvNPe4qiGLZkWwh7MtAzl Content-Type: text/x-patch; charset=UTF-8; name="v29-0003-Move-pg_multixact-SLRU-page-format-definitions-t.patch" Content-Disposition: attachment; filename*0="v29-0003-Move-pg_multixact-SLRU-page-format-definitions-t.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAxZjU4NGViOThkY2ExM2JiOTkyZDE5OWM2ZmZkZDJiMThhMDRiZDI5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMyBEZWMgMjAyNSAyMDowNzo0NyArMDIwMApT dWJqZWN0OiBbUEFUQ0ggdjI5IDMvNl0gTW92ZSBwZ19tdWx0aXhhY3QgU0xSVSBwYWdlIGZv cm1hdCBkZWZpbml0aW9ucyB0byBhCiBzZXBhcmF0ZSBoZWFkZXIKClRoaXMgbWFrZXMgdGhl bSBhY2Nlc3NpYmxlIGZyb20gcGdfdXBncmFkZSwgbmVlZGVkIGJ5IHRoZSBuZXh0IGNvbW1p dC4KSSdtIGRvaW5nIHRoaXMgbWVjaGFuaWNhbCBtb3ZlIGFzIGEgc2VwYXJhdGUgY29tbWl0 IHRvIG1ha2UgdGhlIG5leHQKY29tbWl0J3MgY2hhbmdlcyB0byB0aGVzZSBkZWZpbml0aW9u cyBtb3JlIG9idmlvdXMuCgpBdXRob3I6IE1heGltIE9ybG92IDxvcmxvdm1nQGdtYWlsLmNv bT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9D QUNHJTNEZXpiWm9fM19mbnglM0RTNUJmZXB3UmZ0enJwSiUyQjdXRVQ0RWtUVTZ3bmpEVHNu amdAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0 aXhhY3QuYyAgfCAxMjAgKy0tLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL2FjY2Vz cy9tdWx0aXhhY3RfaW50ZXJuYWwuaCB8IDE0MCArKysrKysrKysrKysrKysrKysrKysrKysK IDIgZmlsZXMgY2hhbmdlZCwgMTQxIGluc2VydGlvbnMoKyksIDExOSBkZWxldGlvbnMoLSkK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0X2ludGVy bmFsLmgKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhh Y3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jCmluZGV4IDhl ZDNmZDlkMDcxLi4xNGQ0NmZiNzYxYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0vbXVsdGl4YWN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v bXVsdGl4YWN0LmMKQEAgLTY5LDYgKzY5LDcgQEAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgog CiAjaW5jbHVkZSAiYWNjZXNzL211bHRpeGFjdC5oIgorI2luY2x1ZGUgImFjY2Vzcy9tdWx0 aXhhY3RfaW50ZXJuYWwuaCIKICNpbmNsdWRlICJhY2Nlc3Mvc2xydS5oIgogI2luY2x1ZGUg ImFjY2Vzcy90d29waGFzZS5oIgogI2luY2x1ZGUgImFjY2Vzcy90d29waGFzZV9ybWdyLmgi CkBAIC04OCwxMjUgKzg5LDYgQEAKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogCiAK LS8qCi0gKiBEZWZpbmVzIGZvciBNdWx0aVhhY3RPZmZzZXQgcGFnZSBzaXplcy4gIEEgcGFn ZSBpcyB0aGUgc2FtZSBCTENLU1ogYXMgaXMKLSAqIHVzZWQgZXZlcnl3aGVyZSBlbHNlIGlu IFBvc3RncmVzLgotICoKLSAqIE5vdGU6IGJlY2F1c2UgTXVsdGlYYWN0T2Zmc2V0cyBhcmUg MzIgYml0cyBhbmQgd3JhcCBhcm91bmQgYXQgMHhGRkZGRkZGRiwKLSAqIE11bHRpWGFjdCBw YWdlIG51bWJlcmluZyBhbHNvIHdyYXBzIGFyb3VuZCBhdAotICogMHhGRkZGRkZGRi9NVUxU SVhBQ1RfT0ZGU0VUU19QRVJfUEFHRSwgYW5kIHNlZ21lbnQgbnVtYmVyaW5nIGF0Ci0gKiAw eEZGRkZGRkZGL01VTFRJWEFDVF9PRkZTRVRTX1BFUl9QQUdFL1NMUlVfUEFHRVNfUEVSX1NF R01FTlQuICBXZSBuZWVkCi0gKiB0YWtlIG5vIGV4cGxpY2l0IG5vdGljZSBvZiB0aGF0IGZh Y3QgaW4gdGhpcyBtb2R1bGUsIGV4Y2VwdCB3aGVuIGNvbXBhcmluZwotICogc2VnbWVudCBh bmQgcGFnZSBudW1iZXJzIGluIFRydW5jYXRlTXVsdGlYYWN0IChzZWUKLSAqIE11bHRpWGFj dE9mZnNldFBhZ2VQcmVjZWRlcykuCi0gKi8KLQotLyogV2UgbmVlZCBmb3VyIGJ5dGVzIHBl ciBvZmZzZXQgKi8KLSNkZWZpbmUgTVVMVElYQUNUX09GRlNFVFNfUEVSX1BBR0UgKEJMQ0tT WiAvIHNpemVvZihNdWx0aVhhY3RPZmZzZXQpKQotCi1zdGF0aWMgaW5saW5lIGludDY0Ci1N dWx0aVhhY3RJZFRvT2Zmc2V0UGFnZShNdWx0aVhhY3RJZCBtdWx0aSkKLXsKLQlyZXR1cm4g bXVsdGkgLyBNVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRTsKLX0KLQotc3RhdGljIGlubGlu ZSBpbnQKLU11bHRpWGFjdElkVG9PZmZzZXRFbnRyeShNdWx0aVhhY3RJZCBtdWx0aSkKLXsK LQlyZXR1cm4gbXVsdGkgJSBNVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRTsKLX0KLQotc3Rh dGljIGlubGluZSBpbnQ2NAotTXVsdGlYYWN0SWRUb09mZnNldFNlZ21lbnQoTXVsdGlYYWN0 SWQgbXVsdGkpCi17Ci0JcmV0dXJuIE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKG11bHRpKSAv IFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7Ci19Ci0KLS8qCi0gKiBUaGUgc2l0dWF0aW9uIGZv ciBtZW1iZXJzIGlzIGEgYml0IG1vcmUgY29tcGxleDogd2Ugc3RvcmUgb25lIGJ5dGUgb2YK LSAqIGFkZGl0aW9uYWwgZmxhZyBiaXRzIGZvciBlYWNoIFRyYW5zYWN0aW9uSWQuICBUbyBk byB0aGlzIHdpdGhvdXQgZ2V0dGluZwotICogaW50byBhbGlnbm1lbnQgaXNzdWVzLCB3ZSBz dG9yZSBmb3VyIGJ5dGVzIG9mIGZsYWdzLCBhbmQgdGhlbiB0aGUKLSAqIGNvcnJlc3BvbmRp bmcgNCBYaWRzLiAgRWFjaCBzdWNoIDUtd29yZCAoMjAtYnl0ZSkgc2V0IHdlIGNhbGwgYSAi Z3JvdXAiLCBhbmQKLSAqIGFyZSBzdG9yZWQgYXMgYSB3aG9sZSBpbiBwYWdlcy4gIFRodXMs IHdpdGggOGtCIEJMQ0tTWiwgd2Uga2VlcCA0MDkgZ3JvdXBzCi0gKiBwZXIgcGFnZS4gIFRo aXMgd2FzdGVzIDEyIGJ5dGVzIHBlciBwYWdlLCBidXQgdGhhdCdzIE9LIC0tIHNpbXBsaWNp dHkgKGFuZAotICogcGVyZm9ybWFuY2UpIHRydW1wcyBzcGFjZSBlZmZpY2llbmN5IGhlcmUu Ci0gKgotICogTm90ZSB0aGF0IHRoZSAib2Zmc2V0IiBtYWNyb3Mgd29yayB3aXRoIGJ5dGUg b2Zmc2V0LCBub3QgYXJyYXkgaW5kZXhlcywgc28KLSAqIGFyaXRobWV0aWMgbXVzdCBiZSBk b25lIHVzaW5nICJjaGFyICoiIHBvaW50ZXJzLgotICovCi0vKiBXZSBuZWVkIGVpZ2h0IGJp dHMgcGVyIHhhY3QsIHNvIG9uZSB4YWN0IGZpdHMgaW4gYSBieXRlICovCi0jZGVmaW5lIE1Y QUNUX01FTUJFUl9CSVRTX1BFUl9YQUNUCQkJOAotI2RlZmluZSBNWEFDVF9NRU1CRVJfRkxB R1NfUEVSX0JZVEUJCQkxCi0jZGVmaW5lIE1YQUNUX01FTUJFUl9YQUNUX0JJVE1BU0sJKCgx IDw8IE1YQUNUX01FTUJFUl9CSVRTX1BFUl9YQUNUKSAtIDEpCi0KLS8qIGhvdyBtYW55IGZ1 bGwgYnl0ZXMgb2YgZmxhZ3MgYXJlIHRoZXJlIGluIGEgZ3JvdXA/ICovCi0jZGVmaW5lIE1V TFRJWEFDVF9GTEFHQllURVNfUEVSX0dST1VQCQk0Ci0jZGVmaW5lIE1VTFRJWEFDVF9NRU1C RVJTX1BFUl9NRU1CRVJHUk9VUAlcCi0JKE1VTFRJWEFDVF9GTEFHQllURVNfUEVSX0dST1VQ ICogTVhBQ1RfTUVNQkVSX0ZMQUdTX1BFUl9CWVRFKQotLyogc2l6ZSBpbiBieXRlcyBvZiBh IGNvbXBsZXRlIGdyb3VwICovCi0jZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJHUk9VUF9TSVpF IFwKLQkoc2l6ZW9mKFRyYW5zYWN0aW9uSWQpICogTVVMVElYQUNUX01FTUJFUlNfUEVSX01F TUJFUkdST1VQICsgTVVMVElYQUNUX0ZMQUdCWVRFU19QRVJfR1JPVVApCi0jZGVmaW5lIE1V TFRJWEFDVF9NRU1CRVJHUk9VUFNfUEVSX1BBR0UgKEJMQ0tTWiAvIE1VTFRJWEFDVF9NRU1C RVJHUk9VUF9TSVpFKQotI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFHRQlcCi0J KE1VTFRJWEFDVF9NRU1CRVJHUk9VUFNfUEVSX1BBR0UgKiBNVUxUSVhBQ1RfTUVNQkVSU19Q RVJfTUVNQkVSR1JPVVApCi0KLS8qCi0gKiBCZWNhdXNlIHRoZSBudW1iZXIgb2YgaXRlbXMg cGVyIHBhZ2UgaXMgbm90IGEgZGl2aXNvciBvZiB0aGUgbGFzdCBpdGVtCi0gKiBudW1iZXIg KG1lbWJlciAweEZGRkZGRkZGKSwgdGhlIGxhc3Qgc2VnbWVudCBkb2VzIG5vdCB1c2UgdGhl IG1heGltdW0gbnVtYmVyCi0gKiBvZiBwYWdlcywgYW5kIG1vcmVvdmVyIHRoZSBsYXN0IHVz ZWQgcGFnZSB0aGVyZWluIGRvZXMgbm90IHVzZSB0aGUgc2FtZQotICogbnVtYmVyIG9mIGl0 ZW1zIGFzIHByZXZpb3VzIHBhZ2VzLiAgKEFub3RoZXIgd2F5IHRvIHNheSBpdCBpcyB0aGF0 IHRoZQotICogMHhGRkZGRkZGRiBtZW1iZXIgaXMgc29tZXdoZXJlIGluIHRoZSBtaWRkbGUg b2YgdGhlIGxhc3QgcGFnZSwgc28gdGhlIHBhZ2UKLSAqIGhhcyBzb21lIGVtcHR5IHNwYWNl IGFmdGVyIHRoYXQgaXRlbS4pCi0gKgotICogVGhpcyBjb25zdGFudCBpcyB0aGUgbnVtYmVy IG9mIG1lbWJlcnMgaW4gdGhlIGxhc3QgcGFnZSBvZiB0aGUgbGFzdCBzZWdtZW50LgotICov Ci0jZGVmaW5lIE1BWF9NRU1CRVJTX0lOX0xBU1RfTUVNQkVSU19QQUdFIFwKLQkJKCh1aW50 MzIpICgoMHhGRkZGRkZGRiAlIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFKSArIDEpKQot Ci0vKiBwYWdlIGluIHdoaWNoIGEgbWVtYmVyIGlzIHRvIGJlIGZvdW5kICovCi1zdGF0aWMg aW5saW5lIGludDY0Ci1NWE9mZnNldFRvTWVtYmVyUGFnZShNdWx0aVhhY3RPZmZzZXQgb2Zm c2V0KQotewotCXJldHVybiBvZmZzZXQgLyBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFHRTsK LX0KLQotc3RhdGljIGlubGluZSBpbnQ2NAotTVhPZmZzZXRUb01lbWJlclNlZ21lbnQoTXVs dGlYYWN0T2Zmc2V0IG9mZnNldCkKLXsKLQlyZXR1cm4gTVhPZmZzZXRUb01lbWJlclBhZ2Uo b2Zmc2V0KSAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7Ci19Ci0KLS8qIExvY2F0aW9uIChi eXRlIG9mZnNldCB3aXRoaW4gcGFnZSkgb2YgZmxhZyB3b3JkIGZvciBhIGdpdmVuIG1lbWJl ciAqLwotc3RhdGljIGlubGluZSBpbnQKLU1YT2Zmc2V0VG9GbGFnc09mZnNldChNdWx0aVhh Y3RPZmZzZXQgb2Zmc2V0KQotewotCU11bHRpWGFjdE9mZnNldCBncm91cCA9IG9mZnNldCAv IE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUDsKLQlpbnQJCQlncm91cG9ucGcg PSBncm91cCAlIE1VTFRJWEFDVF9NRU1CRVJHUk9VUFNfUEVSX1BBR0U7Ci0JaW50CQkJYnl0 ZW9mZiA9IGdyb3Vwb25wZyAqIE1VTFRJWEFDVF9NRU1CRVJHUk9VUF9TSVpFOwotCi0JcmV0 dXJuIGJ5dGVvZmY7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1NWE9mZnNldFRvRmxhZ3NC aXRTaGlmdChNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQotewotCWludAkJCW1lbWJlcl9pbl9n cm91cCA9IG9mZnNldCAlIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUDsKLQlp bnQJCQlic2hpZnQgPSBtZW1iZXJfaW5fZ3JvdXAgKiBNWEFDVF9NRU1CRVJfQklUU19QRVJf WEFDVDsKLQotCXJldHVybiBic2hpZnQ7Ci19Ci0KLS8qIExvY2F0aW9uIChieXRlIG9mZnNl dCB3aXRoaW4gcGFnZSkgb2YgVHJhbnNhY3Rpb25JZCBvZiBnaXZlbiBtZW1iZXIgKi8KLXN0 YXRpYyBpbmxpbmUgaW50Ci1NWE9mZnNldFRvTWVtYmVyT2Zmc2V0KE11bHRpWGFjdE9mZnNl dCBvZmZzZXQpCi17Ci0JaW50CQkJbWVtYmVyX2luX2dyb3VwID0gb2Zmc2V0ICUgTVVMVElY QUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQOwotCi0JcmV0dXJuIE1YT2Zmc2V0VG9GbGFn c09mZnNldChvZmZzZXQpICsKLQkJTVVMVElYQUNUX0ZMQUdCWVRFU19QRVJfR1JPVVAgKwot CQltZW1iZXJfaW5fZ3JvdXAgKiBzaXplb2YoVHJhbnNhY3Rpb25JZCk7Ci19Ci0KIC8qIE11 bHRpeGFjdCBtZW1iZXJzIHdyYXBhcm91bmQgdGhyZXNob2xkcy4gKi8KICNkZWZpbmUgTVVM VElYQUNUX01FTUJFUl9TQUZFX1RIUkVTSE9MRAkJKE1heE11bHRpWGFjdE9mZnNldCAvIDIp CiAjZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJfREFOR0VSX1RIUkVTSE9MRAlcCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0X2ludGVybmFsLmggYi9zcmMvaW5j bHVkZS9hY2Nlc3MvbXVsdGl4YWN0X2ludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjliNTZkZWFlZjMxCi0tLSAvZGV2L251bGwKKysrIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL211bHRpeGFjdF9pbnRlcm5hbC5oCkBAIC0wLDAgKzEsMTQwIEBA CisvKgorICogbXVsdGl4YWN0X2ludGVybmFsLmgKKyAqCisgKiBQb3N0Z3JlU1FMIG11bHRp LXRyYW5zYWN0aW9uLWxvZyBtYW5hZ2VyIGludGVybmFsIGRlY2xhcmF0aW9ucworICoKKyAq IFRoZXNlIGZ1bmN0aW9ucyBhbmQgZGVmaW5pdGlvbnMgYXJlIGZvciBkZWFsaW5nIHdpdGgg cGdfbXVsdGl4YWN0IHBhZ2VzLgorICogVGhleSBhcmUgaW50ZXJuYWwgdG8gbXVsdGl4YWN0 LmMsIGJ1dCB0aGV5IGFyZSBleHBvcnRlZCBoZXJlIHRvIGFsbG93CisgKiBwZ191cGdyYWRl IHRvIHdyaXRlIHBnX211bHRpeGFjdCBmaWxlcyBkaXJlY3RseS4KKyAqCisgKiBQb3J0aW9u cyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1l bnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0 aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUvYWNjZXNz L211bHRpeGFjdF9pbnRlcm5hbC5oCisgKi8KKyNpZm5kZWYgTVVMVElYQUNUX0lOVEVSTkFM X0gKKyNkZWZpbmUgTVVMVElYQUNUX0lOVEVSTkFMX0gKKworI2luY2x1ZGUgImFjY2Vzcy9t dWx0aXhhY3QuaCIKKworCisvKgorICogRGVmaW5lcyBmb3IgTXVsdGlYYWN0T2Zmc2V0IHBh Z2Ugc2l6ZXMuICBBIHBhZ2UgaXMgdGhlIHNhbWUgQkxDS1NaIGFzIGlzCisgKiB1c2VkIGV2 ZXJ5d2hlcmUgZWxzZSBpbiBQb3N0Z3Jlcy4KKyAqCisgKiBOb3RlOiBiZWNhdXNlIE11bHRp WGFjdE9mZnNldHMgYXJlIDMyIGJpdHMgYW5kIHdyYXAgYXJvdW5kIGF0IDB4RkZGRkZGRkYs CisgKiBNdWx0aVhhY3QgcGFnZSBudW1iZXJpbmcgYWxzbyB3cmFwcyBhcm91bmQgYXQKKyAq IDB4RkZGRkZGRkYvTVVMVElYQUNUX09GRlNFVFNfUEVSX1BBR0UsIGFuZCBzZWdtZW50IG51 bWJlcmluZyBhdAorICogMHhGRkZGRkZGRi9NVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRS9T TFJVX1BBR0VTX1BFUl9TRUdNRU5ULiAgV2UgbmVlZAorICogdGFrZSBubyBleHBsaWNpdCBu b3RpY2Ugb2YgdGhhdCBmYWN0IGluIHRoaXMgbW9kdWxlLCBleGNlcHQgd2hlbiBjb21wYXJp bmcKKyAqIHNlZ21lbnQgYW5kIHBhZ2UgbnVtYmVycyBpbiBUcnVuY2F0ZU11bHRpWGFjdCAo c2VlCisgKiBNdWx0aVhhY3RPZmZzZXRQYWdlUHJlY2VkZXMpLgorICovCisKKy8qIFdlIG5l ZWQgZm91ciBieXRlcyBwZXIgb2Zmc2V0ICovCisjZGVmaW5lIE1VTFRJWEFDVF9PRkZTRVRT X1BFUl9QQUdFIChCTENLU1ogLyBzaXplb2YoTXVsdGlYYWN0T2Zmc2V0KSkKKworc3RhdGlj IGlubGluZSBpbnQ2NAorTXVsdGlYYWN0SWRUb09mZnNldFBhZ2UoTXVsdGlYYWN0SWQgbXVs dGkpCit7CisJcmV0dXJuIG11bHRpIC8gTVVMVElYQUNUX09GRlNFVFNfUEVSX1BBR0U7Cit9 CisKK3N0YXRpYyBpbmxpbmUgaW50CitNdWx0aVhhY3RJZFRvT2Zmc2V0RW50cnkoTXVsdGlY YWN0SWQgbXVsdGkpCit7CisJcmV0dXJuIG11bHRpICUgTVVMVElYQUNUX09GRlNFVFNfUEVS X1BBR0U7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50NjQKK011bHRpWGFjdElkVG9PZmZzZXRT ZWdtZW50KE11bHRpWGFjdElkIG11bHRpKQoreworCXJldHVybiBNdWx0aVhhY3RJZFRvT2Zm c2V0UGFnZShtdWx0aSkgLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOworfQorCisvKgorICog VGhlIHNpdHVhdGlvbiBmb3IgbWVtYmVycyBpcyBhIGJpdCBtb3JlIGNvbXBsZXg6IHdlIHN0 b3JlIG9uZSBieXRlIG9mCisgKiBhZGRpdGlvbmFsIGZsYWcgYml0cyBmb3IgZWFjaCBUcmFu c2FjdGlvbklkLiAgVG8gZG8gdGhpcyB3aXRob3V0IGdldHRpbmcKKyAqIGludG8gYWxpZ25t ZW50IGlzc3Vlcywgd2Ugc3RvcmUgZm91ciBieXRlcyBvZiBmbGFncywgYW5kIHRoZW4gdGhl CisgKiBjb3JyZXNwb25kaW5nIDQgWGlkcy4gIEVhY2ggc3VjaCA1LXdvcmQgKDIwLWJ5dGUp IHNldCB3ZSBjYWxsIGEgImdyb3VwIiwgYW5kCisgKiBhcmUgc3RvcmVkIGFzIGEgd2hvbGUg aW4gcGFnZXMuICBUaHVzLCB3aXRoIDhrQiBCTENLU1osIHdlIGtlZXAgNDA5IGdyb3Vwcwor ICogcGVyIHBhZ2UuICBUaGlzIHdhc3RlcyAxMiBieXRlcyBwZXIgcGFnZSwgYnV0IHRoYXQn cyBPSyAtLSBzaW1wbGljaXR5IChhbmQKKyAqIHBlcmZvcm1hbmNlKSB0cnVtcHMgc3BhY2Ug ZWZmaWNpZW5jeSBoZXJlLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgIm9mZnNldCIgbWFjcm9z IHdvcmsgd2l0aCBieXRlIG9mZnNldCwgbm90IGFycmF5IGluZGV4ZXMsIHNvCisgKiBhcml0 aG1ldGljIG11c3QgYmUgZG9uZSB1c2luZyAiY2hhciAqIiBwb2ludGVycy4KKyAqLworLyog V2UgbmVlZCBlaWdodCBiaXRzIHBlciB4YWN0LCBzbyBvbmUgeGFjdCBmaXRzIGluIGEgYnl0 ZSAqLworI2RlZmluZSBNWEFDVF9NRU1CRVJfQklUU19QRVJfWEFDVAkJCTgKKyNkZWZpbmUg TVhBQ1RfTUVNQkVSX0ZMQUdTX1BFUl9CWVRFCQkJMQorI2RlZmluZSBNWEFDVF9NRU1CRVJf WEFDVF9CSVRNQVNLCSgoMSA8PCBNWEFDVF9NRU1CRVJfQklUU19QRVJfWEFDVCkgLSAxKQor CisvKiBob3cgbWFueSBmdWxsIGJ5dGVzIG9mIGZsYWdzIGFyZSB0aGVyZSBpbiBhIGdyb3Vw PyAqLworI2RlZmluZSBNVUxUSVhBQ1RfRkxBR0JZVEVTX1BFUl9HUk9VUAkJNAorI2RlZmlu ZSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVSR1JPVVAJXAorCShNVUxUSVhBQ1RfRkxB R0JZVEVTX1BFUl9HUk9VUCAqIE1YQUNUX01FTUJFUl9GTEFHU19QRVJfQllURSkKKy8qIHNp emUgaW4gYnl0ZXMgb2YgYSBjb21wbGV0ZSBncm91cCAqLworI2RlZmluZSBNVUxUSVhBQ1Rf TUVNQkVSR1JPVVBfU0laRSBcCisJKHNpemVvZihUcmFuc2FjdGlvbklkKSAqIE1VTFRJWEFD VF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUCArIE1VTFRJWEFDVF9GTEFHQllURVNfUEVSX0dS T1VQKQorI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBTX1BFUl9QQUdFIChCTENLU1og LyBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBfU0laRSkKKyNkZWZpbmUgTVVMVElYQUNUX01FTUJF UlNfUEVSX1BBR0UJXAorCShNVUxUSVhBQ1RfTUVNQkVSR1JPVVBTX1BFUl9QQUdFICogTVVM VElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQKQorCisvKgorICogQmVjYXVzZSB0aGUg bnVtYmVyIG9mIGl0ZW1zIHBlciBwYWdlIGlzIG5vdCBhIGRpdmlzb3Igb2YgdGhlIGxhc3Qg aXRlbQorICogbnVtYmVyIChtZW1iZXIgMHhGRkZGRkZGRiksIHRoZSBsYXN0IHNlZ21lbnQg ZG9lcyBub3QgdXNlIHRoZSBtYXhpbXVtIG51bWJlcgorICogb2YgcGFnZXMsIGFuZCBtb3Jl b3ZlciB0aGUgbGFzdCB1c2VkIHBhZ2UgdGhlcmVpbiBkb2VzIG5vdCB1c2UgdGhlIHNhbWUK KyAqIG51bWJlciBvZiBpdGVtcyBhcyBwcmV2aW91cyBwYWdlcy4gIChBbm90aGVyIHdheSB0 byBzYXkgaXQgaXMgdGhhdCB0aGUKKyAqIDB4RkZGRkZGRkYgbWVtYmVyIGlzIHNvbWV3aGVy ZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBsYXN0IHBhZ2UsIHNvIHRoZSBwYWdlCisgKiBoYXMg c29tZSBlbXB0eSBzcGFjZSBhZnRlciB0aGF0IGl0ZW0uKQorICoKKyAqIFRoaXMgY29uc3Rh bnQgaXMgdGhlIG51bWJlciBvZiBtZW1iZXJzIGluIHRoZSBsYXN0IHBhZ2Ugb2YgdGhlIGxh c3Qgc2VnbWVudC4KKyAqLworI2RlZmluZSBNQVhfTUVNQkVSU19JTl9MQVNUX01FTUJFUlNf UEFHRSBcCisJCSgodWludDMyKSAoKDB4RkZGRkZGRkYgJSBNVUxUSVhBQ1RfTUVNQkVSU19Q RVJfUEFHRSkgKyAxKSkKKworLyogcGFnZSBpbiB3aGljaCBhIG1lbWJlciBpcyB0byBiZSBm b3VuZCAqLworc3RhdGljIGlubGluZSBpbnQ2NAorTVhPZmZzZXRUb01lbWJlclBhZ2UoTXVs dGlYYWN0T2Zmc2V0IG9mZnNldCkKK3sKKwlyZXR1cm4gb2Zmc2V0IC8gTVVMVElYQUNUX01F TUJFUlNfUEVSX1BBR0U7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50NjQKK01YT2Zmc2V0VG9N ZW1iZXJTZWdtZW50KE11bHRpWGFjdE9mZnNldCBvZmZzZXQpCit7CisJcmV0dXJuIE1YT2Zm c2V0VG9NZW1iZXJQYWdlKG9mZnNldCkgLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOworfQor CisvKiBMb2NhdGlvbiAoYnl0ZSBvZmZzZXQgd2l0aGluIHBhZ2UpIG9mIGZsYWcgd29yZCBm b3IgYSBnaXZlbiBtZW1iZXIgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitNWE9mZnNldFRvRmxh Z3NPZmZzZXQoTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCkKK3sKKwlNdWx0aVhhY3RPZmZzZXQg Z3JvdXAgPSBvZmZzZXQgLyBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVSR1JPVVA7CisJ aW50CQkJZ3JvdXBvbnBnID0gZ3JvdXAgJSBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBTX1BFUl9Q QUdFOworCWludAkJCWJ5dGVvZmYgPSBncm91cG9ucGcgKiBNVUxUSVhBQ1RfTUVNQkVSR1JP VVBfU0laRTsKKworCXJldHVybiBieXRlb2ZmOworfQorCitzdGF0aWMgaW5saW5lIGludAor TVhPZmZzZXRUb0ZsYWdzQml0U2hpZnQoTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCkKK3sKKwlp bnQJCQltZW1iZXJfaW5fZ3JvdXAgPSBvZmZzZXQgJSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJf TUVNQkVSR1JPVVA7CisJaW50CQkJYnNoaWZ0ID0gbWVtYmVyX2luX2dyb3VwICogTVhBQ1Rf TUVNQkVSX0JJVFNfUEVSX1hBQ1Q7CisKKwlyZXR1cm4gYnNoaWZ0OworfQorCisvKiBMb2Nh dGlvbiAoYnl0ZSBvZmZzZXQgd2l0aGluIHBhZ2UpIG9mIFRyYW5zYWN0aW9uSWQgb2YgZ2l2 ZW4gbWVtYmVyICovCitzdGF0aWMgaW5saW5lIGludAorTVhPZmZzZXRUb01lbWJlck9mZnNl dChNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQoreworCWludAkJCW1lbWJlcl9pbl9ncm91cCA9 IG9mZnNldCAlIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUDsKKworCXJldHVy biBNWE9mZnNldFRvRmxhZ3NPZmZzZXQob2Zmc2V0KSArCisJCU1VTFRJWEFDVF9GTEFHQllU RVNfUEVSX0dST1VQICsKKwkJbWVtYmVyX2luX2dyb3VwICogc2l6ZW9mKFRyYW5zYWN0aW9u SWQpOworfQorCisjZW5kaWYJCQkJCQkJLyogTVVMVElYQUNUX0lOVEVSTkFMX0ggKi8KLS0g CjIuNDcuMwoK --------------EF1KvNPe4qiGLZkWwh7MtAzl Content-Type: text/x-patch; charset=UTF-8; name="v29-0004-FIXME-bump-catversion.patch" Content-Disposition: attachment; filename="v29-0004-FIXME-bump-catversion.patch" Content-Transfer-Encoding: base64 RnJvbSBjNzQxNzEzYmY2ZmEwNTAzMGQ5MTY1MmRhN2NiNTQyNjRhYzI1ZTQ3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMjQgT2N0IDIwMjUgMTE6NDc6NTAgKzAzMDAKU3ViamVjdDogW1BBVENI IHYyOSA0LzZdIEZJWE1FOiBidW1wIGNhdHZlcnNpb24KClRvIGF2b2lkIGNvbnN0YW50IENG LWJvdCBjb21wbGFpbnMsIG1ha2UgY2F0dmVyc2lvbiBidW1wIGluIGEgc2VwYXJhdGUKY29t bWl0LgoKVGhpcyBpcyB0byBiZSBzcXVhc2hlZCB3aXRoIHRoZSBtYWluIGNvbW1pdCBiZWZv cmUgcHVzaGluZy4KCk5PVEU6IGtlZXAgaXQgaW4gc3luYyB3aXRoIE1VTFRJWEFDVE9GRlNF VF9GT1JNQVRDSEFOR0VfQ0FUX1ZFUgotLS0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvY2F0dmVy c2lvbi5oIHwgMyArKy0KIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVs ZXRpb24oLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2NhdHZlcnNpb24u aCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvY2F0dmVyc2lvbi5oCmluZGV4IDJmYTZjOGM2MGYw Li5iMDE2MmMyYmY2MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9jYXR2ZXJz aW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9jYXR2ZXJzaW9uLmgKQEAgLTU3LDYg KzU3LDcgQEAKICAqLwogCiAvKgkJCQkJCQl5eXl5bW1kZE4gKi8KLSNkZWZpbmUgQ0FUQUxP R19WRVJTSU9OX05PCTIwMjUxMjA2MQorLy8gRklYTUU6IGJ1bXAgaXQKKyNkZWZpbmUgQ0FU QUxPR19WRVJTSU9OX05PCTk5OTk5OTk5OQogCiAjZW5kaWYKLS0gCjIuNDcuMwoK --------------EF1KvNPe4qiGLZkWwh7MtAzl Content-Type: text/x-patch; charset=UTF-8; name="v29-0005-Widen-MultiXactOffset-to-64-bits.patch" Content-Disposition: attachment; filename="v29-0005-Widen-MultiXactOffset-to-64-bits.patch" Content-Transfer-Encoding: base64 RnJvbSBlZTEwMTIyOThiZmJjNjA3MDIyYzgxY2IzZTk1OTEyZjU0MmMzNjQ5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMyBEZWMgMjAyNSAyMDoxMTo1MCArMDIwMApT dWJqZWN0OiBbUEFUQ0ggdjI5IDUvNl0gV2lkZW4gTXVsdGlYYWN0T2Zmc2V0IHRvIDY0IGJp dHMKClRoaXMgZWxpbWluYXRlcyBvZmZzZXQgd3JhcGFyb3VuZCBhbmQgdGhlIDJeMzIgbGlt aXQgb24gdGhlIHRvdGFsCm51bWJlciBvZiBtdWx0aXhpZCBtZW1iZXJzLiBNdWx0aXhpZHMg YXJlIHN0aWxsIGxpbWl0ZWQgdG8gMl4zMSwgYnV0CnRoaXMgaXMgYSBuaWNlIGltcHJvdmVt ZW50IGJlY2F1c2UgJ21lbWJlcnMnIGNhbiBncm93IG11Y2ggZmFzdGVyIHRoYW4KdGhlIG51 bWJlciBvZiBtdWx0aXhpZHMuIE9uIHN1Y2ggc3lzdGVtcywgeW91IGNhbiBub3cgcnVuIGxv bmdlcgpiZWZvcmUgaGl0dGluZyBoYXJkIGxpbWl0cyBvciB0cmlnZ2VyaW5nIGFudGktd3Jh cGFyb3VuZCB2YWN1dW1zLgoKTm90IGhhdmluZyB0byBkZWFsIHdpdGggb2Zmc2V0IHdyYXBh cm91bmQgYWxzbyBzaW1wbGlmaWVzIHRoZSBjb2RlIGFuZApyZW1vdmVzIHNvbWUgZ25hcmx5 IGNvcm5lciBjYXNlcy4KCldlIG5vIGxvbmdlciBuZWVkIHRvIHBlcmZvcm0gZW1lcmdlbmN5 IGFudGktd3JhcGFyb3VuZCBmcmVlemluZwpiZWNhdXNlIG9mIHJ1bm5pbmcgb3V0IG9mICdt ZW1iZXJzJyBzcGFjZSwgc28gdGhlIG9mZnNldCBzdG9wIGxpbWl0IGlzCmdvbmUuIEJ1dCB5 b3UgbWlnaHQgc3RpbGwgbm90IHdhbnQgJ21lbWJlcnMnIHRvIGNvbnN1bWUgaHVnZSBhbW91 bnRzCm9mIGRpc2sgc3BhY2UuIEZvciB0aGF0IHJlYXNvbiwgSSBrZXB0IHRoZSBsb2dpYyBm b3IgbG93ZXJpbmcgdmFjdXVtJ3MKbXVsdGl4aWQgZnJlZXppbmcgY3V0b2ZmIGlmIGEgbGFy Z2UgYW1vdW50IG9mICdtZW1iZXJzJyBzcGFjZSBpcwp1c2VkLiBUaGUgdGhyZXNob2xkcyBm b3IgdGhhdCBhcmUgcm91Z2hseSB0aGUgc2FtZSBhcyB0aGUgInNhZmUiIGFuZAoiZGFuZ2Vy IiB0aHJlc2hvbGRzIHVzZWQgYmVmb3JlLCAyIGJpbGxpb24gdHJhbnNhY3Rpb25zIGFuZCA0 IGJpbGxpb24KdHJhbnNhY3Rpb25zLiBUaGlzIGtlZXBzIHRoZSBiZWhhdmlvciBmb3IgdGhl IGZyZWV6ZSBjdXRvZmYgcm91Z2hseQp0aGUgc2FtZSBhcyBiZWZvcmUgLiBJdCBtaWdodCBt YWtlIHNlbnNlIHRvIG1ha2UgdGhpcyBzbWFydGVyIG9yCmNvbmZpZ3VyYWJsZSwgbm93IHRo YXQgdGhlIHRocmVzaG9sZCBpcyBvbmx5IG5lZWRlZCB0byBtYW5hZ2UgZGlzawp1c2FnZSwg YnV0IHRoYXQncyBsZWZ0IGZvciB0aGUgZnV0dXJlLgoKQWRkIGNvZGUgdG8gcGdfdXBncmFk ZSB0byBjb252ZXJ0IG11bHRpdHJhbnNhY3Rpb25zIGZyb20gdGhlIG9sZCB0bwp0aGUgbmV3 IGZvcm1hdC4gQmVjYXVzZSBwZ191cGdyYWRlIG5vdyByZXdyaXRlcyB0aGUgZmlsZXMgaW4g dGhlIG5ldwpmb3JtYXQsIHdlIGNhbiBnZXQgcmlkIG9mIHNvbWUgaGFja3Mgd2UgaGFkIHB1 dCBpbiBwbGFjZSB0byBkZWFsIHdpdGgKb2xkIGJ1Z3MgYW5kIHVwZ3JhZGVkIGNsdXN0ZXJz LgoKQXV0aG9yOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+ClJldmlld2VkLWJ5 OiBBc2h1dG9zaCBCYXBhdCA8YXNodXRvc2guYmFwYXQub3NzQGdtYWlsLmNvbT4KUmV2aWV3 ZWQtYnk6IEFsZXhhbmRlciBLb3JvdGtvdiA8YWVrb3JvdGtvdkBnbWFpbC5jb20+ClJldmll d2VkLWJ5OiB3ZW5odWkgcWl1IDxxaXV3ZW5odWlmeEBnbWFpbC5jb20+CkRpc2N1c3Npb246 IGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvQ0FDRyUzRGV6YVdnN19u dC04ZXk0YUt2Mnc5TGN1THRoSGtud0Nhd21CZ0VlVG5KckpUY3dAbWFpbC5nbWFpbC5jb20K LS0tCiBkb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc2V0d2FsLnNnbWwgICAgICAgICAgICAgfCAg MTMgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9teGFjdGRlc2MuYyAgICAgICB8 ICAgNCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL3hsb2dkZXNjLmMgICAgICAg IHwgICAyICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYyAgICAg ICAgfCA1NTAgKysrKy0tLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS94bG9nLmMgICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3hsb2dyZWNvdmVyeS5jICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMv dmFjdXVtLmMgICAgICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9wb3N0bWFz dGVyL2F1dG92YWN1dW0uYyAgICAgICAgICAgfCAgIDQgKy0KIHNyYy9iaW4vcGdfY29udHJv bGRhdGEvcGdfY29udHJvbGRhdGEuYyAgICAgICB8ICAgMiArLQogc3JjL2Jpbi9wZ19yZXNl dHdhbC9wZ19yZXNldHdhbC5jICAgICAgICAgICAgIHwgIDM4ICstCiBzcmMvYmluL3BnX3Jl c2V0d2FsL3QvMDAxX2Jhc2ljLnBsICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iaW4vcGdf dXBncmFkZS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICB8ICAgMyArCiBzcmMvYmluL3Bn X3VwZ3JhZGUvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgfCAgIDQgKwogc3JjL2Jpbi9w Z191cGdyYWRlL211bHRpeGFjdF9yZWFkX3YxOC5jICAgICAgIHwgMzM3ICsrKysrKysrKysr CiBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X3JlYWRfdjE4LmggICAgICAgfCAgMzcg KysKIHNyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3RfcmV3cml0ZS5jICAgICAgICB8IDE5 NSArKysrKysrCiBzcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5jICAgICAgICAgICAg ICAgfCAgODEgKystCiBzcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5oICAgICAgICAg ICAgICAgfCAgMTIgKy0KIHNyYy9iaW4vcGdfdXBncmFkZS9zbHJ1X2lvLmMgICAgICAgICAg ICAgICAgICB8IDI1OCArKysrKysrKwogc3JjL2Jpbi9wZ191cGdyYWRlL3NscnVfaW8uaCAg ICAgICAgICAgICAgICAgIHwgIDUyICsrCiAuLi4vcGdfdXBncmFkZS90LzAwN19tdWx0aXhh Y3RfY29udmVyc2lvbi5wbCAgfCA0MzMgKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL2Fj Y2Vzcy9tdWx0aXhhY3QuaCAgICAgICAgICAgICAgICB8ICAgNyArLQogc3JjL2luY2x1ZGUv YWNjZXNzL211bHRpeGFjdF9pbnRlcm5hbC5oICAgICAgIHwgIDIzICstCiBzcmMvaW5jbHVk ZS9jLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KIC4uLi90ZXN0 X3NscnUvdC8wMDJfbXVsdGl4YWN0X3dyYXBhcm91bmQucGwgICB8ICAgMiArLQogLi4uL3Bl cmwvUG9zdGdyZVNRTC9UZXN0L0JhY2tncm91bmRQc3FsLnBtICAgIHwgIDE1ICstCiBzcmMv dGVzdC9wZXJsL1Bvc3RncmVTUUwvVGVzdC9DbHVzdGVyLnBtICAgICAgfCAgMjEgKy0KIHNy Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMyArCiAy OCBmaWxlcyBjaGFuZ2VkLCAxNTk0IGluc2VydGlvbnMoKyksIDUyMCBkZWxldGlvbnMoLSkK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X3JlYWRf djE4LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0 X3JlYWRfdjE4LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX3VwZ3JhZGUvbXVs dGl4YWN0X3Jld3JpdGUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfdXBncmFk ZS9zbHJ1X2lvLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX3VwZ3JhZGUvc2xy dV9pby5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ191cGdyYWRlL3QvMDA3X211 bHRpeGFjdF9jb252ZXJzaW9uLnBsCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9w Z19yZXNldHdhbC5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXNldHdhbC5zZ21sCmlu ZGV4IDJjMDE5YzJhYWM2Li40MWYyYjFkNDgwYyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21s L3JlZi9wZ19yZXNldHdhbC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzZXR3 YWwuc2dtbApAQCAtMjY3LDE0ICsyNjcsMTcgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9u CiAgICAgICBBIHNhZmUgdmFsdWUgZm9yIHRoZSBuZXh0IG11bHRpdHJhbnNhY3Rpb24gSUQg KGZpcnN0IHBhcnQpIGNhbiBiZQogICAgICAgZGV0ZXJtaW5lZCBieSBsb29raW5nIGZvciB0 aGUgbnVtZXJpY2FsbHkgbGFyZ2VzdCBmaWxlIG5hbWUgaW4gdGhlCiAgICAgICBkaXJlY3Rv cnkgPGZpbGVuYW1lPnBnX211bHRpeGFjdC9vZmZzZXRzPC9maWxlbmFtZT4gdW5kZXIgdGhl IGRhdGEgZGlyZWN0b3J5LAotICAgICAgYWRkaW5nIG9uZSwgYW5kIHRoZW4gbXVsdGlwbHlp bmcgYnkgNjU1MzYgKDB4MTAwMDApLiAgQ29udmVyc2VseSwgYSBzYWZlCisgICAgICBhZGRp bmcgb25lLCBhbmQgdGhlbiBtdWx0aXBseWluZyBieSAzMjc2OCAoMHg4MDAwKS4gIENvbnZl cnNlbHksIGEgc2FmZQogICAgICAgdmFsdWUgZm9yIHRoZSBvbGRlc3QgbXVsdGl0cmFuc2Fj dGlvbiBJRCAoc2Vjb25kIHBhcnQgb2YKICAgICAgIDxvcHRpb24+LW08L29wdGlvbj4pIGNh biBiZSBkZXRlcm1pbmVkIGJ5IGxvb2tpbmcgZm9yIHRoZSBudW1lcmljYWxseSBzbWFsbGVz dAotICAgICAgZmlsZSBuYW1lIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhbmQgbXVsdGlwbHlp bmcgYnkgNjU1MzYuICBUaGUgZmlsZQotICAgICAgbmFtZXMgYXJlIGluIGhleGFkZWNpbWFs LCBzbyB0aGUgZWFzaWVzdCB3YXkgdG8gZG8gdGhpcyBpcyB0byBzcGVjaWZ5Ci0gICAgICB0 aGUgb3B0aW9uIHZhbHVlIGluIGhleGFkZWNpbWFsIGFuZCBhcHBlbmQgZm91ciB6ZXJvZXMu CisgICAgICBmaWxlIG5hbWUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFuZCBtdWx0aXBseWlu ZyBieSAzMjc2OCAoMHg4MDAwKS4KKyAgICAgIE5vdGUgdGhhdCB0aGUgZmlsZSBuYW1lcyBh cmUgaW4gaGV4YWRlY2ltYWwuICBJdCBpcyB1c3VhbGx5IGVhc2llc3QKKyAgICAgIHRvIHNw ZWNpZnkgdGhlIG9wdGlvbiB2YWx1ZSBpbiBoZXhhZGVjaW1hbCB0b28uICBGb3IgZXhhbXBs ZSwgaWYKKyAgICAgIDxmaWxlbmFtZT4wMDBGPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT4w MDA3PC9maWxlbmFtZT4gYXJlIHRoZSBncmVhdGVzdCBhbmQKKyAgICAgIHNtYWxsZXN0IGVu dHJpZXMgaW4gPGZpbGVuYW1lPnBnX211bHRpeGFjdC9vZmZzZXRzPC9maWxlbmFtZT4sCisg ICAgICA8bGl0ZXJhbD4tbSAweDgwMDAwLDB4MzgwMDA8L2xpdGVyYWw+IHdpbGwgd29yay4K ICAgICAgPC9wYXJhPgotICAgICA8IS0tIDY1NTM2ID0gU0xSVV9QQUdFU19QRVJfU0VHTUVO VCAqIEJMQ0tTWiAvIHNpemVvZihNdWx0aVhhY3RPZmZzZXQpIC0tPgorICAgICA8IS0tIDMy NzY4ID0gU0xSVV9QQUdFU19QRVJfU0VHTUVOVCAqIEJMQ0tTWiAvIHNpemVvZihNdWx0aVhh Y3RPZmZzZXQpIC0tPgogICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KIApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL214YWN0ZGVzYy5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL214YWN0ZGVzYy5jCmluZGV4IDNjYTA1ODJk YjM2Li4wNTJkZDBhNGNlNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3Jk ZXNjL214YWN0ZGVzYy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9teGFj dGRlc2MuYwpAQCAtNjUsNyArNjUsNyBAQCBtdWx0aXhhY3RfZGVzYyhTdHJpbmdJbmZvIGJ1 ZiwgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJCXhsX211bHRpeGFjdF9jcmVhdGUgKnhs cmVjID0gKHhsX211bHRpeGFjdF9jcmVhdGUgKikgcmVjOwogCQlpbnQJCQlpOwogCi0JCWFw cGVuZFN0cmluZ0luZm8oYnVmLCAiJXUgb2Zmc2V0ICV1IG5tZW1iZXJzICVkOiAiLCB4bHJl Yy0+bWlkLAorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiV1IG9mZnNldCAlIiBQUkl1NjQg IiBubWVtYmVycyAlZDogIiwgeGxyZWMtPm1pZCwKIAkJCQkJCSB4bHJlYy0+bW9mZiwgeGxy ZWMtPm5tZW1iZXJzKTsKIAkJZm9yIChpID0gMDsgaSA8IHhscmVjLT5ubWVtYmVyczsgaSsr KQogCQkJb3V0X21lbWJlcihidWYsICZ4bHJlYy0+bWVtYmVyc1tpXSk7CkBAIC03NCw3ICs3 NCw3IEBAIG11bHRpeGFjdF9kZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUg KnJlY29yZCkKIAl7CiAJCXhsX211bHRpeGFjdF90cnVuY2F0ZSAqeGxyZWMgPSAoeGxfbXVs dGl4YWN0X3RydW5jYXRlICopIHJlYzsKIAotCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIm9m ZnNldHMgWyV1LCAldSksIG1lbWJlcnMgWyV1LCAldSkiLAorCQlhcHBlbmRTdHJpbmdJbmZv KGJ1ZiwgIm9mZnNldHMgWyV1LCAldSksIG1lbWJlcnMgWyUiIFBSSXU2NCAiLCAlIiBQUkl1 NjQgIikiLAogCQkJCQkJIHhscmVjLT5zdGFydFRydW5jT2ZmLCB4bHJlYy0+ZW5kVHJ1bmNP ZmYsCiAJCQkJCQkgeGxyZWMtPnN0YXJ0VHJ1bmNNZW1iLCB4bHJlYy0+ZW5kVHJ1bmNNZW1i KTsKIAl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MveGxvZ2Rl c2MuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy94bG9nZGVzYy5jCmluZGV4IGNk NmMyYTJmNjUwLi40NDEwMzRmNTkyOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L3JtZ3JkZXNjL3hsb2dkZXNjLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNj L3hsb2dkZXNjLmMKQEAgLTY2LDcgKzY2LDcgQEAgeGxvZ19kZXNjKFN0cmluZ0luZm8gYnVm LCBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAkJQ2hlY2tQb2ludCAqY2hlY2twb2ludCA9 IChDaGVja1BvaW50ICopIHJlYzsKIAogCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgInJlZG8g JVgvJTA4WDsgIgotCQkJCQkJICJ0bGkgJXU7IHByZXYgdGxpICV1OyBmcHcgJXM7IHdhbF9s ZXZlbCAlczsgeGlkICV1OiV1OyBvaWQgJXU7IG11bHRpICV1OyBvZmZzZXQgJXU7ICIKKwkJ CQkJCSAidGxpICV1OyBwcmV2IHRsaSAldTsgZnB3ICVzOyB3YWxfbGV2ZWwgJXM7IHhpZCAl dToldTsgb2lkICV1OyBtdWx0aSAldTsgb2Zmc2V0ICUiIFBSSXU2NCAiOyAiCiAJCQkJCQkg Im9sZGVzdCB4aWQgJXUgaW4gREIgJXU7IG9sZGVzdCBtdWx0aSAldSBpbiBEQiAldTsgIgog CQkJCQkJICJvbGRlc3QvbmV3ZXN0IGNvbW1pdCB0aW1lc3RhbXAgeGlkOiAldS8ldTsgIgog CQkJCQkJICJvbGRlc3QgcnVubmluZyB4aWQgJXU7ICVzIiwKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0vbXVsdGl4YWN0LmMKaW5kZXggMTRkNDZmYjc2MWIuLmRmZmEwYzhlN2Q0IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYwpAQCAtODksMTAgKzg5 LDE0IEBACiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKIAogCi0vKiBNdWx0aXhhY3Qg bWVtYmVycyB3cmFwYXJvdW5kIHRocmVzaG9sZHMuICovCi0jZGVmaW5lIE1VTFRJWEFDVF9N RU1CRVJfU0FGRV9USFJFU0hPTEQJCShNYXhNdWx0aVhhY3RPZmZzZXQgLyAyKQotI2RlZmlu ZSBNVUxUSVhBQ1RfTUVNQkVSX0RBTkdFUl9USFJFU0hPTEQJXAotCShNYXhNdWx0aVhhY3RP ZmZzZXQgLSBNYXhNdWx0aVhhY3RPZmZzZXQgLyA0KQorLyoKKyAqIFRocmVzaG9sZHMgdXNl ZCB0byBrZWVwIG1lbWJlcnMgZGlzayB1c2FnZSBpbiBjaGVjayB3aGVuIG11bHRpeGlkcyBo YXZlIGEKKyAqIGxvdCBvZiBtZW1iZXJzLiAgV2hlbiBNVUxUSVhBQ1RfTUVNQkVSX0xPV19U SFJFU0hPTEQgaXMgcmVhY2hlZCwgdmFjdXVtCisgKiBzdGFydHMgZnJlZXppbmcgbXVsdGl4 aWRzIG1vcmUgYWdncmVzc2l2ZWx5LCBldmVuIGlmIHRoZSBub3JtYWwgbXVsdGl4aWQKKyAq IGFnZSBsaW1pdHMgaGF2ZW4ndCBiZWVuIHJlYWNoZWQgeWV0LgorICovCisjZGVmaW5lIE1V TFRJWEFDVF9NRU1CRVJfTE9XX1RIUkVTSE9MRAkJVUlOVDY0Q09OU1QoMjAwMDAwMDAwMCkK KyNkZWZpbmUgTVVMVElYQUNUX01FTUJFUl9ISUdIX1RIUkVTSE9MRAkJVUlOVDY0Q09OU1Qo NDAwMDAwMDAwMCkKIAogc3RhdGljIGlubGluZSBNdWx0aVhhY3RJZAogUHJldmlvdXNNdWx0 aVhhY3RJZChNdWx0aVhhY3RJZCBtdWx0aSkKQEAgLTEzNywxMSArMTQxLDkgQEAgdHlwZWRl ZiBzdHJ1Y3QgTXVsdGlYYWN0U3RhdGVEYXRhCiAKIAkvKgogCSAqIE9sZGVzdCBtdWx0aXhh Y3Qgb2Zmc2V0IHRoYXQgaXMgcG90ZW50aWFsbHkgcmVmZXJlbmNlZCBieSBhIG11bHRpeGFj dAotCSAqIHJlZmVyZW5jZWQgYnkgYSByZWxhdGlvbi4gIFdlIGRvbid0IGFsd2F5cyBrbm93 IHRoaXMgdmFsdWUsIHNvIHRoZXJlJ3MKLQkgKiBhIGZsYWcgaGVyZSB0byBpbmRpY2F0ZSB3 aGV0aGVyIG9yIG5vdCB3ZSBjdXJyZW50bHkgZG8uCisJICogcmVmZXJlbmNlZCBieSBhIHJl bGF0aW9uLgogCSAqLwogCU11bHRpWGFjdE9mZnNldCBvbGRlc3RPZmZzZXQ7Ci0JYm9vbAkJ b2xkZXN0T2Zmc2V0S25vd247CiAKIAkvKiBzdXBwb3J0IGZvciBhbnRpLXdyYXBhcm91bmQg bWVhc3VyZXMgKi8KIAlNdWx0aVhhY3RJZCBtdWx0aVZhY0xpbWl0OwpAQCAtMTQ5LDkgKzE1 MSw2IEBAIHR5cGVkZWYgc3RydWN0IE11bHRpWGFjdFN0YXRlRGF0YQogCU11bHRpWGFjdElk IG11bHRpU3RvcExpbWl0OwogCU11bHRpWGFjdElkIG11bHRpV3JhcExpbWl0OwogCi0JLyog c3VwcG9ydCBmb3IgbWVtYmVycyBhbnRpLXdyYXBhcm91bmQgbWVhc3VyZXMgKi8KLQlNdWx0 aVhhY3RPZmZzZXQgb2Zmc2V0U3RvcExpbWl0OwkvKiBrbm93biBpZiBvbGRlc3RPZmZzZXRL bm93biAqLwotCiAJLyoKIAkgKiBQZXItYmFja2VuZCBkYXRhIHN0YXJ0cyBoZXJlLiAgV2Ug aGF2ZSB0d28gYXJyYXlzIHN0b3JlZCBpbiB0aGUgYXJlYQogCSAqIGltbWVkaWF0ZWx5IGZv bGxvd2luZyB0aGUgTXVsdGlYYWN0U3RhdGVEYXRhIHN0cnVjdC4gRWFjaCBpcyBpbmRleGVk IGJ5CkBAIC0yNzIsMTMgKzI3MSw5IEBAIHN0YXRpYyB2b2lkIG1YYWN0Q2FjaGVQdXQoTXVs dGlYYWN0SWQgbXVsdGksIGludCBubWVtYmVycywKIC8qIG1hbmFnZW1lbnQgb2YgU0xSVSBp bmZyYXN0cnVjdHVyZSAqLwogc3RhdGljIGJvb2wgTXVsdGlYYWN0T2Zmc2V0UGFnZVByZWNl ZGVzKGludDY0IHBhZ2UxLCBpbnQ2NCBwYWdlMik7CiBzdGF0aWMgYm9vbCBNdWx0aVhhY3RN ZW1iZXJQYWdlUHJlY2VkZXMoaW50NjQgcGFnZTEsIGludDY0IHBhZ2UyKTsKLXN0YXRpYyBi b29sIE11bHRpWGFjdE9mZnNldFByZWNlZGVzKE11bHRpWGFjdE9mZnNldCBvZmZzZXQxLAot CQkJCQkJCQkJTXVsdGlYYWN0T2Zmc2V0IG9mZnNldDIpOwogc3RhdGljIHZvaWQgRXh0ZW5k TXVsdGlYYWN0T2Zmc2V0KE11bHRpWGFjdElkIG11bHRpKTsKIHN0YXRpYyB2b2lkIEV4dGVu ZE11bHRpWGFjdE1lbWJlcihNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0LCBpbnQgbm1lbWJlcnMp Owotc3RhdGljIGJvb2wgTXVsdGlYYWN0T2Zmc2V0V291bGRXcmFwKE11bHRpWGFjdE9mZnNl dCBib3VuZGFyeSwKLQkJCQkJCQkJCSBNdWx0aVhhY3RPZmZzZXQgc3RhcnQsIHVpbnQzMiBk aXN0YW5jZSk7Ci1zdGF0aWMgYm9vbCBTZXRPZmZzZXRWYWN1dW1MaW1pdChib29sIGlzX3N0 YXJ0dXApOworc3RhdGljIHZvaWQgU2V0T2Zmc2V0VmFjdXVtTGltaXQodm9pZCk7CiBzdGF0 aWMgYm9vbCBmaW5kX211bHRpeGFjdF9zdGFydChNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlY YWN0T2Zmc2V0ICpyZXN1bHQpOwogc3RhdGljIHZvaWQgV3JpdGVNVHJ1bmNhdGVYbG9nUmVj KE9pZCBvbGRlc3RNdWx0aURCLAogCQkJCQkJCQkgIE11bHRpWGFjdElkIHN0YXJ0VHJ1bmNP ZmYsCkBAIC0xMDczLDkwICsxMDY4LDIyIEBAIEdldE5ld011bHRpWGFjdElkKGludCBubWVt YmVycywgTXVsdGlYYWN0T2Zmc2V0ICpvZmZzZXQpCiAJRXh0ZW5kTXVsdGlYYWN0T2Zmc2V0 KHJlc3VsdCArIDEpOwogCiAJLyoKLQkgKiBSZXNlcnZlIHRoZSBtZW1iZXJzIHNwYWNlLCBz aW1pbGFybHkgdG8gYWJvdmUuICBBbHNvLCBiZSBjYXJlZnVsIG5vdCB0bwotCSAqIHJldHVy biB6ZXJvIGFzIHRoZSBzdGFydGluZyBvZmZzZXQgZm9yIGFueSBtdWx0aXhhY3QuIFNlZQot CSAqIEdldE11bHRpWGFjdElkTWVtYmVycygpIGZvciBtb3RpdmF0aW9uLgorCSAqIFJlc2Vy dmUgdGhlIG1lbWJlcnMgc3BhY2UsIHNpbWlsYXJseSB0byBhYm92ZS4KIAkgKi8KIAluZXh0 T2Zmc2V0ID0gTXVsdGlYYWN0U3RhdGUtPm5leHRPZmZzZXQ7Ci0JaWYgKG5leHRPZmZzZXQg PT0gMCkKLQl7Ci0JCSpvZmZzZXQgPSAxOwotCQlubWVtYmVycysrOwkJCQkvKiBhbGxvY2F0 ZSBtZW1iZXIgc2xvdCAwIHRvbyAqLwotCX0KLQllbHNlCi0JCSpvZmZzZXQgPSBuZXh0T2Zm c2V0OwotCi0JLyotLS0tLS0tLS0tCi0JICogUHJvdGVjdCBhZ2FpbnN0IG92ZXJydW4gb2Yg dGhlIG1lbWJlcnMgc3BhY2UgYXMgd2VsbCwgd2l0aCB0aGUKLQkgKiBmb2xsb3dpbmcgcnVs ZXM6Ci0JICoKLQkgKiBJZiB3ZSdyZSBwYXN0IG9mZnNldFN0b3BMaW1pdCwgcmVmdXNlIHRv IGdlbmVyYXRlIG1vcmUgbXVsdGlzLgotCSAqIElmIHdlJ3JlIGNsb3NlIHRvIG9mZnNldFN0 b3BMaW1pdCwgZW1pdCBhIHdhcm5pbmcuCi0JICoKLQkgKiBBcmJpdHJhcmlseSwgd2Ugc3Rh cnQgZW1pdHRpbmcgd2FybmluZ3Mgd2hlbiB3ZSdyZSAyMCBzZWdtZW50cyBvciBsZXNzCi0J ICogZnJvbSBvZmZzZXRTdG9wTGltaXQuCi0JICoKLQkgKiBOb3RlIHdlIGhhdmVuJ3QgdXBk YXRlZCB0aGUgc2hhcmVkIHN0YXRlIHlldCwgc28gaWYgd2UgZmFpbCBhdCB0aGlzCi0JICog cG9pbnQsIHRoZSBtdWx0aXhhY3QgSUQgd2UgZ3JhYmJlZCBjYW4gc3RpbGwgYmUgdXNlZCBi eSB0aGUgbmV4dCBndXkuCi0JICoKLQkgKiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gcG9pbnQg aW4gZm9yY2luZyBhdXRvdmFjdXVtIHJ1bnMgaGVyZTogdGhlCi0JICogbXVsdGl4YWN0IGZy ZWV6ZSBzZXR0aW5ncyB3b3VsZCBoYXZlIHRvIGJlIHJlZHVjZWQgZm9yIHRoYXQgdG8gaGF2 ZSBhbnkKLQkgKiBlZmZlY3QuCi0JICotLS0tLS0tLS0tCi0JICovCi0jZGVmaW5lIE9GRlNF VF9XQVJOX1NFR01FTlRTCTIwCi0JaWYgKE11bHRpWGFjdFN0YXRlLT5vbGRlc3RPZmZzZXRL bm93biAmJgotCQlNdWx0aVhhY3RPZmZzZXRXb3VsZFdyYXAoTXVsdGlYYWN0U3RhdGUtPm9m ZnNldFN0b3BMaW1pdCwgbmV4dE9mZnNldCwKLQkJCQkJCQkJIG5tZW1iZXJzKSkKLQl7Ci0J CS8qIHNlZSBjb21tZW50IGluIHRoZSBjb3JyZXNwb25kaW5nIG9mZnNldHMgd3JhcGFyb3Vu ZCBjYXNlICovCi0JCVNlbmRQb3N0bWFzdGVyU2lnbmFsKFBNU0lHTkFMX1NUQVJUX0FVVE9W QUNfTEFVTkNIRVIpOwotCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09E RV9QUk9HUkFNX0xJTUlUX0VYQ0VFREVEKSwKLQkJCQkgZXJybXNnKCJtdWx0aXhhY3QgXCJt ZW1iZXJzXCIgbGltaXQgZXhjZWVkZWQiKSwKLQkJCQkgZXJyZGV0YWlsX3BsdXJhbCgiVGhp cyBjb21tYW5kIHdvdWxkIGNyZWF0ZSBhIG11bHRpeGFjdCB3aXRoICV1IG1lbWJlcnMsIGJ1 dCB0aGUgcmVtYWluaW5nIHNwYWNlIGlzIG9ubHkgZW5vdWdoIGZvciAldSBtZW1iZXIuIiwK LQkJCQkJCQkJICAiVGhpcyBjb21tYW5kIHdvdWxkIGNyZWF0ZSBhIG11bHRpeGFjdCB3aXRo ICV1IG1lbWJlcnMsIGJ1dCB0aGUgcmVtYWluaW5nIHNwYWNlIGlzIG9ubHkgZW5vdWdoIGZv ciAldSBtZW1iZXJzLiIsCi0JCQkJCQkJCSAgTXVsdGlYYWN0U3RhdGUtPm9mZnNldFN0b3BM aW1pdCAtIG5leHRPZmZzZXQgLSAxLAotCQkJCQkJCQkgIG5tZW1iZXJzLAotCQkJCQkJCQkg IE11bHRpWGFjdFN0YXRlLT5vZmZzZXRTdG9wTGltaXQgLSBuZXh0T2Zmc2V0IC0gMSksCi0J CQkJIGVycmhpbnQoIkV4ZWN1dGUgYSBkYXRhYmFzZS13aWRlIFZBQ1VVTSBpbiBkYXRhYmFz ZSB3aXRoIE9JRCAldSB3aXRoIHJlZHVjZWQgXCJ2YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV9t aW5fYWdlXCIgYW5kIFwidmFjdXVtX211bHRpeGFjdF9mcmVlemVfdGFibGVfYWdlXCIgc2V0 dGluZ3MuIiwKLQkJCQkJCSBNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0TXVsdGlYYWN0REIpKSk7 Ci0JfQogCiAJLyoKLQkgKiBDaGVjayB3aGV0aGVyIHdlIHNob3VsZCBraWNrIGF1dG92YWN1 dW0gaW50byBhY3Rpb24sIHRvIHByZXZlbnQgbWVtYmVycwotCSAqIHdyYXBhcm91bmQuIE5C IHdlIHVzZSBhIG11Y2ggbGFyZ2VyIHdpbmRvdyB0byB0cmlnZ2VyIGF1dG92YWN1dW0gdGhh bgotCSAqIGp1c3QgdGhlIHdhcm5pbmcgbGltaXQuIFRoZSB3YXJuaW5nIGlzIGp1c3QgYSBt ZWFzdXJlIG9mIGxhc3QgcmVzb3J0IC0KLQkgKiB0aGlzIGlzIGluIGxpbmUgd2l0aCBHZXRO ZXdUcmFuc2FjdGlvbklkJ3MgYmVoYXZpb3VyLgorCSAqIE9mZnNldHMgYXJlIDY0LWJpdCBp bnRlZ2VycyBhbmQgd2lsbCBuZXZlciB3cmFwIGFyb3VuZC4gIEZpcnN0bHksIGl0CisJICog d291bGQgdGFrZSBhbiB1bnJlYWxpc3RpYyBhbW91bnQgb2YgdGltZSBhbmQgcmVzb3VyY2Vz IHRvIGNvbnN1bWUgMl42NAorCSAqIG9mZnNldHMuICBTZWNvbmRseSwgbXVsdGl4aWQgY3Jl YXRpb24gaXMgV0FMLWxvZ2dlZCwgc28geW91IHdvdWxkIHJ1bgorCSAqIG91dCBvZiBMU05z IGJlZm9yZSByZWFjaGluZyBvZmZzZXQgd3JhcGFyb3VuZC4gIE5ldmVydGhlbGVzcywgY2hl Y2sgZm9yCisJICogd3JhcGFyb3VuZCBhcyBhIHNhbml0eSBjaGVjay4KIAkgKi8KLQlpZiAo IU11bHRpWGFjdFN0YXRlLT5vbGRlc3RPZmZzZXRLbm93biB8fAotCQkoTXVsdGlYYWN0U3Rh dGUtPm5leHRPZmZzZXQgLSBNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0T2Zmc2V0Ci0JCSA+IE1V TFRJWEFDVF9NRU1CRVJfU0FGRV9USFJFU0hPTEQpKQotCXsKLQkJLyoKLQkJICogVG8gYXZv aWQgc3dhbXBpbmcgdGhlIHBvc3RtYXN0ZXIgd2l0aCBzaWduYWxzLCB3ZSBpc3N1ZSB0aGUg YXV0b3ZhYwotCQkgKiByZXF1ZXN0IG9ubHkgd2hlbiBjcm9zc2luZyBhIHNlZ21lbnQgYm91 bmRhcnkuIFdpdGggZGVmYXVsdAotCQkgKiBjb21waWxhdGlvbiBzZXR0aW5ncyB0aGF0J3Mg cm91Z2hseSBhZnRlciA1MGsgbWVtYmVycy4gIFRoaXMgc3RpbGwKLQkJICogZ2l2ZXMgcGxl bnR5IG9mIGNoYW5jZXMgYmVmb3JlIHdlIGdldCBpbnRvIHJlYWwgdHJvdWJsZS4KLQkJICov Ci0JCWlmICgoTVhPZmZzZXRUb01lbWJlclBhZ2UobmV4dE9mZnNldCkgLyBTTFJVX1BBR0VT X1BFUl9TRUdNRU5UKSAhPQotCQkJKE1YT2Zmc2V0VG9NZW1iZXJQYWdlKG5leHRPZmZzZXQg KyBubWVtYmVycykgLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UKSkKLQkJCVNlbmRQb3N0bWFz dGVyU2lnbmFsKFBNU0lHTkFMX1NUQVJUX0FVVE9WQUNfTEFVTkNIRVIpOwotCX0KLQotCWlm IChNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0T2Zmc2V0S25vd24gJiYKLQkJTXVsdGlYYWN0T2Zm c2V0V291bGRXcmFwKE11bHRpWGFjdFN0YXRlLT5vZmZzZXRTdG9wTGltaXQsCi0JCQkJCQkJ CSBuZXh0T2Zmc2V0LAotCQkJCQkJCQkgbm1lbWJlcnMgKyBNVUxUSVhBQ1RfTUVNQkVSU19Q RVJfUEFHRSAqIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQgKiBPRkZTRVRfV0FSTl9TRUdNRU5U UykpCi0JCWVyZXBvcnQoV0FSTklORywKKwlpZiAobmV4dE9mZnNldCArIG5tZW1iZXJzIDwg bmV4dE9mZnNldCkKKwkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1BS T0dSQU1fTElNSVRfRVhDRUVERUQpLAotCQkJCSBlcnJtc2dfcGx1cmFsKCJkYXRhYmFzZSB3 aXRoIE9JRCAldSBtdXN0IGJlIHZhY3V1bWVkIGJlZm9yZSAlZCBtb3JlIG11bHRpeGFjdCBt ZW1iZXIgaXMgdXNlZCIsCi0JCQkJCQkJICAgImRhdGFiYXNlIHdpdGggT0lEICV1IG11c3Qg YmUgdmFjdXVtZWQgYmVmb3JlICVkIG1vcmUgbXVsdGl4YWN0IG1lbWJlcnMgYXJlIHVzZWQi LAotCQkJCQkJCSAgIE11bHRpWGFjdFN0YXRlLT5vZmZzZXRTdG9wTGltaXQgLSBuZXh0T2Zm c2V0ICsgbm1lbWJlcnMsCi0JCQkJCQkJICAgTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE11bHRp WGFjdERCLAotCQkJCQkJCSAgIE11bHRpWGFjdFN0YXRlLT5vZmZzZXRTdG9wTGltaXQgLSBu ZXh0T2Zmc2V0ICsgbm1lbWJlcnMpLAotCQkJCSBlcnJoaW50KCJFeGVjdXRlIGEgZGF0YWJh c2Utd2lkZSBWQUNVVU0gaW4gdGhhdCBkYXRhYmFzZSB3aXRoIHJlZHVjZWQgXCJ2YWN1dW1f bXVsdGl4YWN0X2ZyZWV6ZV9taW5fYWdlXCIgYW5kIFwidmFjdXVtX211bHRpeGFjdF9mcmVl emVfdGFibGVfYWdlXCIgc2V0dGluZ3MuIikpKTsKKwkJCQkgZXJybXNnKCJNdWx0aVhhY3Qg bWVtYmVycyB3b3VsZCB3cmFwIGFyb3VuZCIpKSk7CisJKm9mZnNldCA9IG5leHRPZmZzZXQ7 CiAKIAlFeHRlbmRNdWx0aVhhY3RNZW1iZXIobmV4dE9mZnNldCwgbm1lbWJlcnMpOwogCkBA IC0xMTc3LDggKzExMDQsNyBAQCBHZXROZXdNdWx0aVhhY3RJZChpbnQgbm1lbWJlcnMsIE11 bHRpWGFjdE9mZnNldCAqb2Zmc2V0KQogCSAqIHRoZSBuZXh0IGl0ZXJhdGlvbi4gIEJ1dCBu b3RlIHRoYXQgbmV4dE1YYWN0IG1heSBiZSBJbnZhbGlkTXVsdGlYYWN0SWQKIAkgKiBvciB0 aGUgZmlyc3QgdmFsdWUgb24gYSBzZWdtZW50LWJlZ2lubmluZyBwYWdlIGFmdGVyIHRoaXMg cm91dGluZQogCSAqIGV4aXRzLCBzbyBhbnlvbmUgZWxzZSBsb29raW5nIGF0IHRoZSB2YXJp YWJsZSBtdXN0IGJlIHByZXBhcmVkIHRvIGRlYWwKLQkgKiB3aXRoIGVpdGhlciBjYXNlLiAg U2ltaWxhcmx5LCBuZXh0T2Zmc2V0IG1heSBiZSB6ZXJvLCBidXQgd2Ugd29uJ3QgdXNlCi0J ICogdGhhdCBhcyB0aGUgYWN0dWFsIHN0YXJ0IG9mZnNldCBvZiB0aGUgbmV4dCBtdWx0aXhh Y3QuCisJICogd2l0aCBlaXRoZXIgY2FzZS4KIAkgKi8KIAkoTXVsdGlYYWN0U3RhdGUtPm5l eHRNWGFjdCkrKzsKIApAQCAtMTE4Niw3ICsxMTEyLDggQEAgR2V0TmV3TXVsdGlYYWN0SWQo aW50IG5tZW1iZXJzLCBNdWx0aVhhY3RPZmZzZXQgKm9mZnNldCkKIAogCUxXTG9ja1JlbGVh c2UoTXVsdGlYYWN0R2VuTG9jayk7CiAKLQlkZWJ1Z19lbG9nNChERUJVRzIsICJHZXROZXc6 IHJldHVybmluZyAldSBvZmZzZXQgJXUiLCByZXN1bHQsICpvZmZzZXQpOworCWRlYnVnX2Vs b2c0KERFQlVHMiwgIkdldE5ldzogcmV0dXJuaW5nICV1IG9mZnNldCAlIiBQUkl1NjQsCisJ CQkJcmVzdWx0LCAqb2Zmc2V0KTsKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMjI4LDcg KzExNTUsNiBAQCBHZXRNdWx0aVhhY3RJZE1lbWJlcnMoTXVsdGlYYWN0SWQgbXVsdGksIE11 bHRpWGFjdE1lbWJlciAqKm1lbWJlcnMsCiAJTXVsdGlYYWN0T2Zmc2V0ICpvZmZwdHI7CiAJ TXVsdGlYYWN0T2Zmc2V0IG9mZnNldDsKIAlpbnQJCQlsZW5ndGg7Ci0JaW50CQkJdHJ1ZWxl bmd0aDsKIAlNdWx0aVhhY3RJZCBvbGRlc3RNWGFjdDsKIAlNdWx0aVhhY3RJZCBuZXh0TVhh Y3Q7CiAJTXVsdGlYYWN0TWVtYmVyICpwdHI7CkBAIC0xMzA0LDE2ICsxMjMwLDcgQEAgR2V0 TXVsdGlYYWN0SWRNZW1iZXJzKE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RNZW1iZXIg KiptZW1iZXJzLAogCSAqIEZpbmQgb3V0IHRoZSBvZmZzZXQgYXQgd2hpY2ggd2UgbmVlZCB0 byBzdGFydCByZWFkaW5nIE11bHRpWGFjdE1lbWJlcnMKIAkgKiBhbmQgdGhlIG51bWJlciBv ZiBtZW1iZXJzIGluIHRoZSBtdWx0aXhhY3QuICBXZSBkZXRlcm1pbmUgdGhlIGxhdHRlciBh cwogCSAqIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcyBtdWx0aXhhY3QncyBzdGFydGlu ZyBvZmZzZXQgYW5kIHRoZSBuZXh0Ci0JICogb25lJ3MuICBIb3dldmVyLCB0aGVyZSBpcyBv bmUgY29ybmVyIGNhc2UgdG8gd29ycnkgYWJvdXQ6Ci0JICoKLQkgKiBCZWNhdXNlIEdldE5l d011bHRpWGFjdElkIHNraXBzIG92ZXIgb2Zmc2V0IHplcm8sIHRvIHJlc2VydmUgemVybyBm b3IKLQkgKiB0byBtZWFuICJ1bnNldCIsIHRoZXJlIGlzIGFuIGFtYmlndWl0eSBuZWFyIHRo ZSBwb2ludCBvZiBvZmZzZXQKLQkgKiB3cmFwYXJvdW5kLiAgSWYgd2Ugc2VlIG5leHQgbXVs dGl4YWN0J3Mgb2Zmc2V0IGlzIG9uZSwgaXMgdGhhdCBvdXIKLQkgKiBtdWx0aXhhY3QncyBh Y3R1YWwgZW5kcG9pbnQsIG9yIGRpZCBpdCBlbmQgYXQgemVybyB3aXRoIGEgc3Vic2VxdWVu dAotCSAqIGluY3JlbWVudD8gIFdlIGhhbmRsZSB0aGlzIHVzaW5nIHRoZSBrbm93bGVkZ2Ug dGhhdCBpZiB0aGUgemVybyd0aAotCSAqIG1lbWJlciBzbG90IHdhc24ndCBmaWxsZWQsIGl0 J2xsIGNvbnRhaW4gemVybywgYW5kIHplcm8gaXNuJ3QgYSB2YWxpZAotCSAqIHRyYW5zYWN0 aW9uIElEIHNvIGl0IGNhbid0IGJlIGEgbXVsdGl4YWN0IG1lbWJlci4gIFRoZXJlZm9yZSwg aWYgd2UKLQkgKiByZWFkIGEgemVybyBmcm9tIHRoZSBtZW1iZXJzIGFycmF5LCBqdXN0IGln bm9yZSBpdC4KKwkgKiBvbmUncy4KIAkgKi8KIAlwYWdlbm8gPSBNdWx0aVhhY3RJZFRvT2Zm c2V0UGFnZShtdWx0aSk7CiAJZW50cnlubyA9IE11bHRpWGFjdElkVG9PZmZzZXRFbnRyeSht dWx0aSk7CkBAIC0xMzgwLDEwICsxMjk3LDExIEBAIEdldE11bHRpWGFjdElkTWVtYmVycyhN dWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0TWVtYmVyICoqbWVtYmVycywKIAlMV0xvY2tS ZWxlYXNlKGxvY2spOwogCWxvY2sgPSBOVUxMOwogCisJLyogQSBtdWx0aXhpZCB3aXRoIHpl cm8gbWVtYmVycyBzaG91bGQgbm90IGhhcHBlbiAqLworCUFzc2VydChsZW5ndGggPiAwKTsK KwogCS8qIHJlYWQgdGhlIG1lbWJlcnMgKi8KIAlwdHIgPSAoTXVsdGlYYWN0TWVtYmVyICop IHBhbGxvYyhsZW5ndGggKiBzaXplb2YoTXVsdGlYYWN0TWVtYmVyKSk7Ci0KLQl0cnVlbGVu Z3RoID0gMDsKIAlwcmV2X3BhZ2VubyA9IC0xOwogCWZvciAoaW50IGkgPSAwOyBpIDwgbGVu Z3RoOyBpKyssIG9mZnNldCsrKQogCXsKQEAgLTE0MjAsMzcgKzEzMzgsMjcgQEAgR2V0TXVs dGlYYWN0SWRNZW1iZXJzKE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RNZW1iZXIgKipt ZW1iZXJzLAogCiAJCXhhY3RwdHIgPSAoVHJhbnNhY3Rpb25JZCAqKQogCQkJKE11bHRpWGFj dE1lbWJlckN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dICsgbWVtYmVyb2ZmKTsK LQotCQlpZiAoIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKCp4YWN0cHRyKSkKLQkJewotCQkJLyog Q29ybmVyIGNhc2U6IHdlIG11c3QgYmUgbG9va2luZyBhdCB1bnVzZWQgc2xvdCB6ZXJvICov Ci0JCQlBc3NlcnQob2Zmc2V0ID09IDApOwotCQkJY29udGludWU7Ci0JCX0KKwkJQXNzZXJ0 KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKCp4YWN0cHRyKSk7CiAKIAkJZmxhZ3NvZmYgPSBNWE9m ZnNldFRvRmxhZ3NPZmZzZXQob2Zmc2V0KTsKIAkJYnNoaWZ0ID0gTVhPZmZzZXRUb0ZsYWdz Qml0U2hpZnQob2Zmc2V0KTsKIAkJZmxhZ3NwdHIgPSAodWludDMyICopIChNdWx0aVhhY3RN ZW1iZXJDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSArIGZsYWdzb2ZmKTsKIAot CQlwdHJbdHJ1ZWxlbmd0aF0ueGlkID0gKnhhY3RwdHI7Ci0JCXB0clt0cnVlbGVuZ3RoXS5z dGF0dXMgPSAoKmZsYWdzcHRyID4+IGJzaGlmdCkgJiBNWEFDVF9NRU1CRVJfWEFDVF9CSVRN QVNLOwotCQl0cnVlbGVuZ3RoKys7CisJCXB0cltpXS54aWQgPSAqeGFjdHB0cjsKKwkJcHRy W2ldLnN0YXR1cyA9ICgqZmxhZ3NwdHIgPj4gYnNoaWZ0KSAmIE1YQUNUX01FTUJFUl9YQUNU X0JJVE1BU0s7CiAJfQogCiAJTFdMb2NrUmVsZWFzZShsb2NrKTsKIAotCS8qIEEgbXVsdGl4 aWQgd2l0aCB6ZXJvIG1lbWJlcnMgc2hvdWxkIG5vdCBoYXBwZW4gKi8KLQlBc3NlcnQodHJ1 ZWxlbmd0aCA+IDApOwotCiAJLyoKIAkgKiBDb3B5IHRoZSByZXN1bHQgaW50byB0aGUgbG9j YWwgY2FjaGUuCiAJICovCi0JbVhhY3RDYWNoZVB1dChtdWx0aSwgdHJ1ZWxlbmd0aCwgcHRy KTsKKwltWGFjdENhY2hlUHV0KG11bHRpLCBsZW5ndGgsIHB0cik7CiAKIAlkZWJ1Z19lbG9n MyhERUJVRzIsICJHZXRNZW1iZXJzOiBubyBjYWNoZSBmb3IgJXMiLAotCQkJCW14aWRfdG9f c3RyaW5nKG11bHRpLCB0cnVlbGVuZ3RoLCBwdHIpKTsKKwkJCQlteGlkX3RvX3N0cmluZyht dWx0aSwgbGVuZ3RoLCBwdHIpKTsKIAkqbWVtYmVycyA9IHB0cjsKLQlyZXR1cm4gdHJ1ZWxl bmd0aDsKKwlyZXR1cm4gbGVuZ3RoOwogfQogCiAvKgpAQCAtMTg1Nyw3ICsxNzY1LDcgQEAg TXVsdGlYYWN0U2htZW1Jbml0KHZvaWQpCiAJCQkJICAicGdfbXVsdGl4YWN0L21lbWJlcnMi LCBMV1RSQU5DSEVfTVVMVElYQUNUTUVNQkVSX0JVRkZFUiwKIAkJCQkgIExXVFJBTkNIRV9N VUxUSVhBQ1RNRU1CRVJfU0xSVSwKIAkJCQkgIFNZTkNfSEFORExFUl9NVUxUSVhBQ1RfTUVN QkVSLAotCQkJCSAgZmFsc2UpOworCQkJCSAgdHJ1ZSk7CiAJLyogZG9lc24ndCBjYWxsIFNp bXBsZUxydVRydW5jYXRlKCkgb3IgbWVldCBjcml0ZXJpYSBmb3IgdW5pdCB0ZXN0cyAqLwog CiAJLyogSW5pdGlhbGl6ZSBvdXIgc2hhcmVkIHN0YXRlIHN0cnVjdCAqLwpAQCAtMTkxMiw0 OCArMTgyMCw2IEBAIEJvb3RTdHJhcE11bHRpWGFjdCh2b2lkKQogCVNpbXBsZUxydVplcm9B bmRXcml0ZVBhZ2UoTXVsdGlYYWN0TWVtYmVyQ3RsLCAwKTsKIH0KIAotLyoKLSAqIE1heWJl RXh0ZW5kT2Zmc2V0U2xydQotICoJCUV4dGVuZCB0aGUgb2Zmc2V0cyBTTFJVIGFyZWEsIGlm IG5lY2Vzc2FyeQotICoKLSAqIEFmdGVyIGEgYmluYXJ5IHVwZ3JhZGUgZnJvbSA8PSA5LjIs IHRoZSBwZ19tdWx0aXhhY3Qvb2Zmc2V0cyBTTFJVIGFyZWEgbWlnaHQKLSAqIGNvbnRhaW4g ZmlsZXMgdGhhdCBhcmUgc2hvcnRlciB0aGFuIG5lY2Vzc2FyeTsgdGhpcyB3b3VsZCBvY2N1 ciBpZiB0aGUgb2xkCi0gKiBpbnN0YWxsYXRpb24gaGFkIHVzZWQgbXVsdGl4YWN0cyBiZXlv bmQgdGhlIGZpcnN0IHBhZ2UgKGZpbGVzIGNhbm5vdCBiZQotICogY29waWVkLCBiZWNhdXNl IHRoZSBvbi1kaXNrIHJlcHJlc2VudGF0aW9uIGlzIGRpZmZlcmVudCkuICBwZ191cGdyYWRl IHdvdWxkCi0gKiB1cGRhdGUgcGdfY29udHJvbCB0byBzZXQgdGhlIG5leHQgb2Zmc2V0IHZh bHVlIHRvIGJlIGF0IHRoYXQgcG9zaXRpb24sIHNvCi0gKiB0aGF0IHR1cGxlcyBtYXJrZWQg YXMgbG9ja2VkIGJ5IHN1Y2ggTXVsdGlYYWN0cyB3b3VsZCBiZSBzZWVuIGFzIHZpc2libGUK LSAqIHdpdGhvdXQgaGF2aW5nIHRvIGNvbnN1bHQgbXVsdGl4YWN0LiAgSG93ZXZlciwgdHJ5 aW5nIHRvIGNyZWF0ZSBhbmQgdXNlIGEKLSAqIG5ldyBNdWx0aVhhY3RJZCB3b3VsZCByZXN1 bHQgaW4gYW4gZXJyb3IgYmVjYXVzZSB0aGUgcGFnZSBvbiB3aGljaCB0aGUgbmV3Ci0gKiB2 YWx1ZSB3b3VsZCByZXNpZGUgZG9lcyBub3QgZXhpc3QuICBUaGlzIHJvdXRpbmUgaXMgaW4g Y2hhcmdlIG9mIGNyZWF0aW5nCi0gKiBzdWNoIHBhZ2VzLgotICovCi1zdGF0aWMgdm9pZAot TWF5YmVFeHRlbmRPZmZzZXRTbHJ1KHZvaWQpCi17Ci0JaW50NjQJCXBhZ2VubzsKLQlMV0xv Y2sJICAgKmxvY2s7Ci0KLQlwYWdlbm8gPSBNdWx0aVhhY3RJZFRvT2Zmc2V0UGFnZShNdWx0 aVhhY3RTdGF0ZS0+bmV4dE1YYWN0KTsKLQlsb2NrID0gU2ltcGxlTHJ1R2V0QmFua0xvY2so TXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8pOwotCi0JTFdMb2NrQWNxdWlyZShsb2NrLCBM V19FWENMVVNJVkUpOwotCi0JaWYgKCFTaW1wbGVMcnVEb2VzUGh5c2ljYWxQYWdlRXhpc3Qo TXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8pKQotCXsKLQkJaW50CQkJc2xvdG5vOwotCi0J CS8qCi0JCSAqIEZvcnR1bmF0ZWx5IGZvciB1cywgU2ltcGxlTHJ1V3JpdGVQYWdlIGlzIGFs cmVhZHkgcHJlcGFyZWQgdG8gZGVhbAotCQkgKiB3aXRoIGNyZWF0aW5nIGEgbmV3IHNlZ21l bnQgZmlsZSBldmVuIGlmIHRoZSBwYWdlIHdlJ3JlIHdyaXRpbmcgaXMKLQkJICogbm90IHRo ZSBmaXJzdCBpbiBpdCwgc28gdGhpcyBpcyBlbm91Z2guCi0JCSAqLwotCQlzbG90bm8gPSBT aW1wbGVMcnVaZXJvUGFnZShNdWx0aVhhY3RPZmZzZXRDdGwsIHBhZ2Vubyk7Ci0JCVNpbXBs ZUxydVdyaXRlUGFnZShNdWx0aVhhY3RPZmZzZXRDdGwsIHNsb3Rubyk7Ci0JfQotCi0JTFdM b2NrUmVsZWFzZShsb2NrKTsKLX0KLQogLyoKICAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgT05D RSBkdXJpbmcgcG9zdG1hc3RlciBvciBzdGFuZGFsb25lLWJhY2tlbmQgc3RhcnR1cC4KICAq CkBAIC0yMDkyLDggKzE5NTgsOCBAQCBUcmltTXVsdGlYYWN0KHZvaWQpCiAJTXVsdGlYYWN0 U3RhdGUtPmZpbmlzaGVkU3RhcnR1cCA9IHRydWU7CiAJTFdMb2NrUmVsZWFzZShNdWx0aVhh Y3RHZW5Mb2NrKTsKIAotCS8qIE5vdyBjb21wdXRlIGhvdyBmYXIgYXdheSB0aGUgbmV4dCBt ZW1iZXJzIHdyYXBhcm91bmQgaXMuICovCi0JU2V0TXVsdGlYYWN0SWRMaW1pdChvbGRlc3RN WGFjdCwgb2xkZXN0TVhhY3REQiwgdHJ1ZSk7CisJLyogTm93IGNvbXB1dGUgaG93IGZhciBh d2F5IHRoZSBuZXh0IG11bHRpeGlkIHdyYXBhcm91bmQgaXMuICovCisJU2V0TXVsdGlYYWN0 SWRMaW1pdChvbGRlc3RNWGFjdCwgb2xkZXN0TVhhY3REQik7CiB9CiAKIC8qCkBAIC0yMTE0 LDcgKzE5ODAsNyBAQCBNdWx0aVhhY3RHZXRDaGVja3B0TXVsdGkoYm9vbCBpc19zaHV0ZG93 biwKIAlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdEdlbkxvY2spOwogCiAJZGVidWdfZWxvZzYo REVCVUcyLAotCQkJCSJNdWx0aVhhY3Q6IGNoZWNrcG9pbnQgaXMgbmV4dE11bHRpICV1LCBu ZXh0T2Zmc2V0ICV1LCBvbGRlc3RNdWx0aSAldSBpbiBEQiAldSIsCisJCQkJIk11bHRpWGFj dDogY2hlY2twb2ludCBpcyBuZXh0TXVsdGkgJXUsIG5leHRPZmZzZXQgJSIgUFJJdTY0ICIs IG9sZGVzdE11bHRpICV1IGluIERCICV1IiwKIAkJCQkqbmV4dE11bHRpLCAqbmV4dE11bHRp T2Zmc2V0LCAqb2xkZXN0TXVsdGksICpvbGRlc3RNdWx0aURCKTsKIH0KIApAQCAtMjE0OSwy NiArMjAxNSwxMiBAQCB2b2lkCiBNdWx0aVhhY3RTZXROZXh0TVhhY3QoTXVsdGlYYWN0SWQg bmV4dE11bHRpLAogCQkJCQkgIE11bHRpWGFjdE9mZnNldCBuZXh0TXVsdGlPZmZzZXQpCiB7 Ci0JZGVidWdfZWxvZzQoREVCVUcyLCAiTXVsdGlYYWN0OiBzZXR0aW5nIG5leHQgbXVsdGkg dG8gJXUgb2Zmc2V0ICV1IiwKKwlkZWJ1Z19lbG9nNChERUJVRzIsICJNdWx0aVhhY3Q6IHNl dHRpbmcgbmV4dCBtdWx0aSB0byAldSBvZmZzZXQgJSIgUFJJdTY0LAogCQkJCW5leHRNdWx0 aSwgbmV4dE11bHRpT2Zmc2V0KTsKIAlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdEdlbkxvY2ss IExXX0VYQ0xVU0lWRSk7CiAJTXVsdGlYYWN0U3RhdGUtPm5leHRNWGFjdCA9IG5leHRNdWx0 aTsKIAlNdWx0aVhhY3RTdGF0ZS0+bmV4dE9mZnNldCA9IG5leHRNdWx0aU9mZnNldDsKIAlM V0xvY2tSZWxlYXNlKE11bHRpWGFjdEdlbkxvY2spOwotCi0JLyoKLQkgKiBEdXJpbmcgYSBi aW5hcnkgdXBncmFkZSwgbWFrZSBzdXJlIHRoYXQgdGhlIG9mZnNldHMgU0xSVSBpcyBsYXJn ZQotCSAqIGVub3VnaCB0byBjb250YWluIHRoZSBuZXh0IHZhbHVlIHRoYXQgd291bGQgYmUg Y3JlYXRlZC4KLQkgKgotCSAqIFdlIG5lZWQgdG8gZG8gdGhpcyBwcmV0dHkgZWFybHkgZHVy aW5nIHRoZSBmaXJzdCBzdGFydHVwIGluIGJpbmFyeQotCSAqIHVwZ3JhZGUgbW9kZTogYmVm b3JlIFN0YXJ0dXBNdWx0aVhhY3QoKSBpbiBmYWN0LCBiZWNhdXNlIHRoaXMgcm91dGluZQot CSAqIGlzIGNhbGxlZCBldmVuIGJlZm9yZSB0aGF0IGJ5IFN0YXJ0dXBYTE9HKCkuICBBbmQg d2UgY2FuJ3QgZG8gaXQKLQkgKiBlYXJsaWVyIHRoYW4gYXQgdGhpcyBwb2ludCwgYmVjYXVz ZSBkdXJpbmcgdGhhdCBmaXJzdCBjYWxsIG9mIHRoaXMKLQkgKiByb3V0aW5lIHdlIGRldGVy bWluZSB0aGUgTXVsdGlYYWN0U3RhdGUtPm5leHRNWGFjdCB2YWx1ZSB0aGF0Ci0JICogTWF5 YmVFeHRlbmRPZmZzZXRTbHJ1IG5lZWRzLgotCSAqLwotCWlmIChJc0JpbmFyeVVwZ3JhZGUp Ci0JCU1heWJlRXh0ZW5kT2Zmc2V0U2xydSgpOwogfQogCiAvKgpAQCAtMjE3NiwyOCArMjAy OCwyNCBAQCBNdWx0aVhhY3RTZXROZXh0TVhhY3QoTXVsdGlYYWN0SWQgbmV4dE11bHRpLAog ICogZGF0bWlubXhpZCAoaWUsIHRoZSBvbGRlc3QgTXVsdGlYYWN0SWQgdGhhdCBtaWdodCBl eGlzdCBpbiBhbnkgZGF0YWJhc2UKICAqIG9mIG91ciBjbHVzdGVyKSwgYW5kIHRoZSBPSUQg b2YgdGhlIChvciBhKSBkYXRhYmFzZSB3aXRoIHRoYXQgdmFsdWUuCiAgKgotICogaXNfc3Rh cnR1cCBpcyB0cnVlIHdoZW4gd2UgYXJlIGp1c3Qgc3RhcnRpbmcgdGhlIGNsdXN0ZXIsIGZh bHNlIHdoZW4gd2UKLSAqIGFyZSB1cGRhdGluZyBzdGF0ZSBpbiBhIHJ1bm5pbmcgY2x1c3Rl ci4gIFRoaXMgb25seSBhZmZlY3RzIGxvZyBtZXNzYWdlcy4KKyAqIFRoaXMgYWxzbyB1cGRh dGVzIE11bHRpWGFjdFN0YXRlLT5vbGRlc3RPZmZzZXQsIGJ5IGxvb2tpbmcgdXAgdGhlIG9m ZnNldCBvZgorICogTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE11bHRpWGFjdElkLgogICovCiB2 b2lkCi1TZXRNdWx0aVhhY3RJZExpbWl0KE11bHRpWGFjdElkIG9sZGVzdF9kYXRtaW5teGlk LCBPaWQgb2xkZXN0X2RhdG9pZCwKLQkJCQkJYm9vbCBpc19zdGFydHVwKQorU2V0TXVsdGlY YWN0SWRMaW1pdChNdWx0aVhhY3RJZCBvbGRlc3RfZGF0bWlubXhpZCwgT2lkIG9sZGVzdF9k YXRvaWQpCiB7CiAJTXVsdGlYYWN0SWQgbXVsdGlWYWNMaW1pdDsKIAlNdWx0aVhhY3RJZCBt dWx0aVdhcm5MaW1pdDsKIAlNdWx0aVhhY3RJZCBtdWx0aVN0b3BMaW1pdDsKIAlNdWx0aVhh Y3RJZCBtdWx0aVdyYXBMaW1pdDsKIAlNdWx0aVhhY3RJZCBjdXJNdWx0aTsKLQlib29sCQlu ZWVkc19vZmZzZXRfdmFjdXVtOwogCiAJQXNzZXJ0KE11bHRpWGFjdElkSXNWYWxpZChvbGRl c3RfZGF0bWlubXhpZCkpOwogCiAJLyoKIAkgKiBXZSBwcmV0ZW5kIHRoYXQgYSB3cmFwIHdp bGwgaGFwcGVuIGhhbGZ3YXkgdGhyb3VnaCB0aGUgbXVsdGl4YWN0IElECiAJICogc3BhY2Us IGJ1dCB0aGF0J3Mgbm90IHJlYWxseSB0cnVlLCBiZWNhdXNlIG11bHRpeGFjdHMgd3JhcCBk aWZmZXJlbnRseQotCSAqIGZyb20gdHJhbnNhY3Rpb24gSURzLiAgTm90ZSB0aGF0LCBzZXBh cmF0ZWx5IGZyb20gYW55IGNvbmNlcm4gYWJvdXQKLQkgKiBtdWx0aXhhY3QgSURzIHdyYXBw aW5nLCB3ZSBtdXN0IGVuc3VyZSB0aGF0IG11bHRpeGFjdCBtZW1iZXJzIGRvIG5vdAotCSAq IHdyYXAuICBMaW1pdHMgZm9yIHRoYXQgYXJlIHNldCBpbiBTZXRPZmZzZXRWYWN1dW1MaW1p dCwgbm90IGhlcmUuCisJICogZnJvbSB0cmFuc2FjdGlvbiBJRHMuCiAJICovCiAJbXVsdGlX cmFwTGltaXQgPSBvbGRlc3RfZGF0bWlubXhpZCArIChNYXhNdWx0aVhhY3RJZCA+PiAxKTsK IAlpZiAobXVsdGlXcmFwTGltaXQgPCBGaXJzdE11bHRpWGFjdElkKQpAQCAtMjI2NSw4ICsy MTEzLDEzIEBAIFNldE11bHRpWGFjdElkTGltaXQoTXVsdGlYYWN0SWQgb2xkZXN0X2RhdG1p bm14aWQsIE9pZCBvbGRlc3RfZGF0b2lkLAogCiAJQXNzZXJ0KCFJblJlY292ZXJ5KTsKIAot CS8qIFNldCBsaW1pdHMgZm9yIG9mZnNldCB2YWN1dW0uICovCi0JbmVlZHNfb2Zmc2V0X3Zh Y3V1bSA9IFNldE9mZnNldFZhY3V1bUxpbWl0KGlzX3N0YXJ0dXApOworCS8qCisJICogT2Zm c2V0cyBhcmUgNjQtYml0cyB3aWRlIGFuZCBuZXZlciB3cmFwIGFyb3VuZCwgc28gd2UgZG9u J3QgbmVlZCB0bworCSAqIGNvbnNpZGVyIHRoZW0gZm9yIGVtZXJnZW5jeSBhdXRvdmFjdXVt IHB1cnBvc2VzLiAgQnV0IG5vdyB0aGF0IHdlJ3JlIGluCisJICogYSBjb25zaXN0ZW50IHN0 YXRlLCBkZXRlcm1pbmUgTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9mZnNldCwgdG8gYmUgdXNl ZAorCSAqIHRvIGNhbGN1bGF0ZSBmcmVlemluZyBjdXRvZmYgdG8ga2VlcCB0aGUgb2Zmc2V0 cyBkaXNrIHVzYWdlIGluIGNoZWNrLgorCSAqLworCVNldE9mZnNldFZhY3V1bUxpbWl0KCk7 CiAKIAkvKgogCSAqIElmIHBhc3QgdGhlIGF1dG92YWN1dW0gZm9yY2UgcG9pbnQsIGltbWVk aWF0ZWx5IHNpZ25hbCBhbiBhdXRvdmFjCkBAIC0yMjc1LDggKzIxMjgsNyBAQCBTZXRNdWx0 aVhhY3RJZExpbWl0KE11bHRpWGFjdElkIG9sZGVzdF9kYXRtaW5teGlkLCBPaWQgb2xkZXN0 X2RhdG9pZCwKIAkgKiBkYXRhYmFzZSwgaXQnbGwgY2FsbCBoZXJlLCBhbmQgd2UnbGwgc2ln bmFsIHRoZSBwb3N0bWFzdGVyIHRvIHN0YXJ0CiAJICogYW5vdGhlciBpdGVyYXRpb24gaW1t ZWRpYXRlbHkgaWYgdGhlcmUgYXJlIHN0aWxsIGFueSBvbGQgZGF0YWJhc2VzLgogCSAqLwot CWlmICgoTXVsdGlYYWN0SWRQcmVjZWRlcyhtdWx0aVZhY0xpbWl0LCBjdXJNdWx0aSkgfHwK LQkJIG5lZWRzX29mZnNldF92YWN1dW0pICYmIElzVW5kZXJQb3N0bWFzdGVyKQorCWlmIChN dWx0aVhhY3RJZFByZWNlZGVzKG11bHRpVmFjTGltaXQsIGN1ck11bHRpKSAmJiBJc1VuZGVy UG9zdG1hc3RlcikKIAkJU2VuZFBvc3RtYXN0ZXJTaWduYWwoUE1TSUdOQUxfU1RBUlRfQVVU T1ZBQ19MQVVOQ0hFUik7CiAKIAkvKiBHaXZlIGFuIGltbWVkaWF0ZSB3YXJuaW5nIGlmIHBh c3QgdGhlIHdyYXAgd2FybiBwb2ludCAqLwpAQCAtMjMzOCw5ICsyMTkwLDkgQEAgTXVsdGlY YWN0QWR2YW5jZU5leHRNWGFjdChNdWx0aVhhY3RJZCBtaW5NdWx0aSwKIAkJZGVidWdfZWxv ZzMoREVCVUcyLCAiTXVsdGlYYWN0OiBzZXR0aW5nIG5leHQgbXVsdGkgdG8gJXUiLCBtaW5N dWx0aSk7CiAJCU11bHRpWGFjdFN0YXRlLT5uZXh0TVhhY3QgPSBtaW5NdWx0aTsKIAl9Ci0J aWYgKE11bHRpWGFjdE9mZnNldFByZWNlZGVzKE11bHRpWGFjdFN0YXRlLT5uZXh0T2Zmc2V0 LCBtaW5NdWx0aU9mZnNldCkpCisJaWYgKE11bHRpWGFjdFN0YXRlLT5uZXh0T2Zmc2V0IDwg bWluTXVsdGlPZmZzZXQpCiAJewotCQlkZWJ1Z19lbG9nMyhERUJVRzIsICJNdWx0aVhhY3Q6 IHNldHRpbmcgbmV4dCBvZmZzZXQgdG8gJXUiLAorCQlkZWJ1Z19lbG9nMyhERUJVRzIsICJN dWx0aVhhY3Q6IHNldHRpbmcgbmV4dCBvZmZzZXQgdG8gJSIgUFJJVTY0LAogCQkJCQltaW5N dWx0aU9mZnNldCk7CiAJCU11bHRpWGFjdFN0YXRlLT5uZXh0T2Zmc2V0ID0gbWluTXVsdGlP ZmZzZXQ7CiAJfQpAQCAtMjM1OSw3ICsyMjExLDcgQEAgTXVsdGlYYWN0QWR2YW5jZU9sZGVz dChNdWx0aVhhY3RJZCBvbGRlc3RNdWx0aSwgT2lkIG9sZGVzdE11bHRpREIpCiAJQXNzZXJ0 KEluUmVjb3ZlcnkpOwogCiAJaWYgKE11bHRpWGFjdElkUHJlY2VkZXMoTXVsdGlYYWN0U3Rh dGUtPm9sZGVzdE11bHRpWGFjdElkLCBvbGRlc3RNdWx0aSkpCi0JCVNldE11bHRpWGFjdElk TGltaXQob2xkZXN0TXVsdGksIG9sZGVzdE11bHRpREIsIGZhbHNlKTsKKwkJU2V0TXVsdGlY YWN0SWRMaW1pdChvbGRlc3RNdWx0aSwgb2xkZXN0TXVsdGlEQik7CiB9CiAKIC8qCkBAIC0y NDQyLDI3ICsyMjk0LDExIEBAIEV4dGVuZE11bHRpWGFjdE1lbWJlcihNdWx0aVhhY3RPZmZz ZXQgb2Zmc2V0LCBpbnQgbm1lbWJlcnMpCiAJCQlMV0xvY2tSZWxlYXNlKGxvY2spOwogCQl9 CiAKLQkJLyoKLQkJICogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRpbGwgZW5kIG9m IGN1cnJlbnQgcGFnZS4gIENhcmVmdWw6IGlmCi0JCSAqIGFkZGl0aW9uIG9mIHVuc2lnbmVk IGludHMgd3JhcHMgYXJvdW5kLCB3ZSdyZSBhdCB0aGUgbGFzdCBwYWdlIG9mCi0JCSAqIHRo ZSBsYXN0IHNlZ21lbnQ7IHNpbmNlIHRoYXQgcGFnZSBob2xkcyBhIGRpZmZlcmVudCBudW1i ZXIgb2YgaXRlbXMKLQkJICogdGhhbiBvdGhlciBwYWdlcywgd2UgbmVlZCB0byBkbyBpdCBk aWZmZXJlbnRseS4KLQkJICovCi0JCWlmIChvZmZzZXQgKyBNQVhfTUVNQkVSU19JTl9MQVNU X01FTUJFUlNfUEFHRSA8IG9mZnNldCkKLQkJewotCQkJLyoKLQkJCSAqIFRoaXMgaXMgdGhl IGxhc3QgcGFnZSBvZiB0aGUgbGFzdCBzZWdtZW50OyB3ZSBjYW4gY29tcHV0ZSB0aGUKLQkJ CSAqIG51bWJlciBvZiBpdGVtcyBsZWZ0IHRvIGFsbG9jYXRlIGluIGl0IHdpdGhvdXQgbW9k dWxvCi0JCQkgKiBhcml0aG1ldGljLgotCQkJICovCi0JCQlkaWZmZXJlbmNlID0gTWF4TXVs dGlYYWN0T2Zmc2V0IC0gb2Zmc2V0ICsgMTsKLQkJfQotCQllbHNlCi0JCQlkaWZmZXJlbmNl ID0gTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0UgLSBvZmZzZXQgJSBNVUxUSVhBQ1RfTUVN QkVSU19QRVJfUEFHRTsKKwkJLyogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRpbGwg ZW5kIG9mIGN1cnJlbnQgcGFnZS4gKi8KKwkJZGlmZmVyZW5jZSA9IE1VTFRJWEFDVF9NRU1C RVJTX1BFUl9QQUdFIC0gb2Zmc2V0ICUgTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0U7CiAK IAkJLyoKLQkJICogQWR2YW5jZSB0byBuZXh0IHBhZ2UsIHRha2luZyBjYXJlIHRvIHByb3Bl cmx5IGhhbmRsZSB0aGUgd3JhcGFyb3VuZAotCQkgKiBjYXNlLiAgT0sgaWYgbm1lbWJlcnMg Z29lcyBuZWdhdGl2ZS4KKwkJICogQWR2YW5jZSB0byBuZXh0IHBhZ2UuICBPSyBpZiBubWVt YmVycyBnb2VzIG5lZ2F0aXZlLgogCQkgKi8KIAkJbm1lbWJlcnMgLT0gZGlmZmVyZW5jZTsK IAkJb2Zmc2V0ICs9IGRpZmZlcmVuY2U7CkBAIC0yNTI0LDI4ICsyMzYwLDE3IEBAIEdldE9s ZGVzdE11bHRpWGFjdElkKHZvaWQpCiB9CiAKIC8qCi0gKiBEZXRlcm1pbmUgaG93IGFnZ3Jl c3NpdmVseSB3ZSBuZWVkIHRvIHZhY3V1bSBpbiBvcmRlciB0byBwcmV2ZW50IG1lbWJlcgot ICogd3JhcGFyb3VuZC4KLSAqCi0gKiBUbyBkbyBzbyBkZXRlcm1pbmUgd2hhdCdzIHRoZSBv bGRlc3QgbWVtYmVyIG9mZnNldCBhbmQgaW5zdGFsbCB0aGUgbGltaXQKLSAqIGluZm8gaW4g TXVsdGlYYWN0U3RhdGUsIHdoZXJlIGl0IGNhbiBiZSB1c2VkIHRvIHByZXZlbnQgb3ZlcnJ1 biBvZiBvbGQgZGF0YQotICogaW4gdGhlIG1lbWJlcnMgU0xSVSBhcmVhLgotICoKLSAqIFRo ZSByZXR1cm4gdmFsdWUgaXMgdHJ1ZSBpZiBlbWVyZ2VuY3kgYXV0b3ZhY3V1bSBpcyByZXF1 aXJlZCBhbmQgZmFsc2UKLSAqIG90aGVyd2lzZS4KKyAqIENhbGN1bGF0ZSB0aGUgb2xkZXN0 IG1lbWJlciBvZmZzZXQgYW5kIGluc3RhbGwgaXQgaW4gTXVsdGlYYWN0U3RhdGUsIHdoZXJl CisgKiBpdCBjYW4gYmUgdXNlZCB0byBhZGp1c3QgbXVsdGl4aWQgZnJlZXppbmcgY3V0b2Zm cy4KICAqLwotc3RhdGljIGJvb2wKLVNldE9mZnNldFZhY3V1bUxpbWl0KGJvb2wgaXNfc3Rh cnR1cCkKK3N0YXRpYyB2b2lkCitTZXRPZmZzZXRWYWN1dW1MaW1pdCh2b2lkKQogewogCU11 bHRpWGFjdElkIG9sZGVzdE11bHRpWGFjdElkOwogCU11bHRpWGFjdElkIG5leHRNWGFjdDsK IAlNdWx0aVhhY3RPZmZzZXQgb2xkZXN0T2Zmc2V0ID0gMDsJLyogcGxhY2F0ZSBjb21waWxl ciAqLwotCU11bHRpWGFjdE9mZnNldCBwcmV2T2xkZXN0T2Zmc2V0OwogCU11bHRpWGFjdE9m ZnNldCBuZXh0T2Zmc2V0OwogCWJvb2wJCW9sZGVzdE9mZnNldEtub3duID0gZmFsc2U7Ci0J Ym9vbAkJcHJldk9sZGVzdE9mZnNldEtub3duOwotCU11bHRpWGFjdE9mZnNldCBvZmZzZXRT dG9wTGltaXQgPSAwOwotCU11bHRpWGFjdE9mZnNldCBwcmV2T2Zmc2V0U3RvcExpbWl0Owog CiAJLyoKIAkgKiBOQjogSGF2ZSB0byBwcmV2ZW50IGNvbmN1cnJlbnQgdHJ1bmNhdGlvbiwg d2UgbWlnaHQgb3RoZXJ3aXNlIHRyeSB0bwpAQCAtMjU1OCw5ICsyMzgzLDYgQEAgU2V0T2Zm c2V0VmFjdXVtTGltaXQoYm9vbCBpc19zdGFydHVwKQogCW9sZGVzdE11bHRpWGFjdElkID0g TXVsdGlYYWN0U3RhdGUtPm9sZGVzdE11bHRpWGFjdElkOwogCW5leHRNWGFjdCA9IE11bHRp WGFjdFN0YXRlLT5uZXh0TVhhY3Q7CiAJbmV4dE9mZnNldCA9IE11bHRpWGFjdFN0YXRlLT5u ZXh0T2Zmc2V0OwotCXByZXZPbGRlc3RPZmZzZXRLbm93biA9IE11bHRpWGFjdFN0YXRlLT5v bGRlc3RPZmZzZXRLbm93bjsKLQlwcmV2T2xkZXN0T2Zmc2V0ID0gTXVsdGlYYWN0U3RhdGUt Pm9sZGVzdE9mZnNldDsKLQlwcmV2T2Zmc2V0U3RvcExpbWl0ID0gTXVsdGlYYWN0U3RhdGUt Pm9mZnNldFN0b3BMaW1pdDsKIAlBc3NlcnQoTXVsdGlYYWN0U3RhdGUtPmZpbmlzaGVkU3Rh cnR1cCk7CiAJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RHZW5Mb2NrKTsKIApAQCAtMjU4Mywx MjEgKzI0MDUsMzkgQEAgU2V0T2Zmc2V0VmFjdXVtTGltaXQoYm9vbCBpc19zdGFydHVwKQog CWVsc2UKIAl7CiAJCS8qCi0JCSAqIEZpZ3VyZSBvdXQgd2hlcmUgdGhlIG9sZGVzdCBleGlz dGluZyBtdWx0aXhhY3QncyBvZmZzZXRzIGFyZQotCQkgKiBzdG9yZWQuIER1ZSB0byBidWdz IGluIGVhcmx5IHJlbGVhc2Ugb2YgUG9zdGdyZVNRTCA5LjMuWCBhbmQgOS40LlgsCi0JCSAq IHRoZSBzdXBwb3NlZGx5LWVhcmxpZXN0IG11bHRpeGFjdCBtaWdodCBub3QgcmVhbGx5IGV4 aXN0LiAgV2UgYXJlCi0JCSAqIGNhcmVmdWwgbm90IHRvIGZhaWwgaW4gdGhhdCBjYXNlLgor CQkgKiBMb29rIHVwIHRoZSBvZmZzZXQgYXQgd2hpY2ggdGhlIG9sZGVzdCBleGlzdGluZyBt dWx0aXhhY3QncyBtZW1iZXJzCisJCSAqIGFyZSBzdG9yZWQuICBJZiB3ZSBjYW5ub3QgZmlu ZCBpdCwgYmUgY2FyZWZ1bCBub3QgdG8gZmFpbCwgYW5kCisJCSAqIGxlYXZlIG9sZGVzdE9m ZnNldCB1bmNoYW5nZWQuICBvbGRlc3RPZmZzZXQgaXMgaW5pdGlhbGl6ZWQgdG8gemVybwor CQkgKiBhdCBzeXN0ZW0gc3RhcnR1cCwgd2hpY2ggcHJldmVudHMgdHJ1bmNhdGluZyBtZW1i ZXJzIHVudGlsIGEgcHJvcGVyCisJCSAqIHZhbHVlIGlzIGNhbGN1bGF0ZWQuCisJCSAqCisJ CSAqIChXZSBoYWQgYnVncyBpbiBlYXJseSByZWxlYXNlcyBvZiBQb3N0Z3JlU1FMIDkuMy5Y IGFuZCA5LjQuWCB3aGVyZQorCQkgKiB0aGUgc3VwcG9zZWRseS1lYXJsaWVzdCBtdWx0aXhh Y3QgbWlnaHQgbm90IHJlYWxseSBleGlzdC4gIFRob3NlCisJCSAqIHNob3VsZCBiZSBsb25n IGdvbmUgYnkgbm93LCBzbyB0aGlzIHNob3VsZCBub3QgZmFpbCwgYnV0IGxldCdzCisJCSAq IHN0aWxsIGJlIGRlZmVuc2l2ZS4pCiAJCSAqLwogCQlvbGRlc3RPZmZzZXRLbm93biA9CiAJ CQlmaW5kX211bHRpeGFjdF9zdGFydChvbGRlc3RNdWx0aVhhY3RJZCwgJm9sZGVzdE9mZnNl dCk7CiAKIAkJaWYgKG9sZGVzdE9mZnNldEtub3duKQogCQkJZXJlcG9ydChERUJVRzEsCi0J CQkJCShlcnJtc2dfaW50ZXJuYWwoIm9sZGVzdCBNdWx0aVhhY3RJZCBtZW1iZXIgaXMgYXQg b2Zmc2V0ICV1IiwKKwkJCQkJKGVycm1zZ19pbnRlcm5hbCgib2xkZXN0IE11bHRpWGFjdElk IG1lbWJlciBpcyBhdCBvZmZzZXQgJSIgUFJJdTY0LAogCQkJCQkJCQkJIG9sZGVzdE9mZnNl dCkpKTsKIAkJZWxzZQogCQkJZXJlcG9ydChMT0csCi0JCQkJCShlcnJtc2coIk11bHRpWGFj dCBtZW1iZXIgd3JhcGFyb3VuZCBwcm90ZWN0aW9ucyBhcmUgZGlzYWJsZWQgYmVjYXVzZSBv bGRlc3QgY2hlY2twb2ludGVkIE11bHRpWGFjdCAldSBkb2VzIG5vdCBleGlzdCBvbiBkaXNr IiwKKwkJCQkJKGVycm1zZygib2xkZXN0IGNoZWNrcG9pbnRlZCBNdWx0aVhhY3QgJXUgZG9l cyBub3QgZXhpc3Qgb24gZGlzayIsCiAJCQkJCQkJb2xkZXN0TXVsdGlYYWN0SWQpKSk7CiAJ fQogCiAJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RUcnVuY2F0aW9uTG9jayk7CiAKLQkvKgot CSAqIElmIHdlIGNhbiwgY29tcHV0ZSBsaW1pdHMgKGFuZCBpbnN0YWxsIHRoZW0gTXVsdGlY YWN0U3RhdGUpIHRvIHByZXZlbnQKLQkgKiBvdmVycnVuIG9mIG9sZCBkYXRhIGluIHRoZSBt ZW1iZXJzIFNMUlUgYXJlYS4gV2UgY2FuIG9ubHkgZG8gc28gaWYgdGhlCi0JICogb2xkZXN0 IG9mZnNldCBpcyBrbm93biB0aG91Z2guCi0JICovCisJLyogSW5zdGFsbCB0aGUgY29tcHV0 ZWQgdmFsdWUgKi8KIAlpZiAob2xkZXN0T2Zmc2V0S25vd24pCiAJewotCQkvKiBtb3ZlIGJh Y2sgdG8gc3RhcnQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc2VnbWVudCAqLwotCQlvZmZzZXRT dG9wTGltaXQgPSBvbGRlc3RPZmZzZXQgLSAob2xkZXN0T2Zmc2V0ICUKLQkJCQkJCQkJCQkg IChNVUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFHRSAqIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQp KTsKLQotCQkvKiBhbHdheXMgbGVhdmUgb25lIHNlZ21lbnQgYmVmb3JlIHRoZSB3cmFwYXJv dW5kIHBvaW50ICovCi0JCW9mZnNldFN0b3BMaW1pdCAtPSAoTVVMVElYQUNUX01FTUJFUlNf UEVSX1BBR0UgKiBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UKTsKLQotCQlpZiAoIXByZXZPbGRl c3RPZmZzZXRLbm93biAmJiAhaXNfc3RhcnR1cCkKLQkJCWVyZXBvcnQoTE9HLAotCQkJCQko ZXJybXNnKCJNdWx0aVhhY3QgbWVtYmVyIHdyYXBhcm91bmQgcHJvdGVjdGlvbnMgYXJlIG5v dyBlbmFibGVkIikpKTsKLQotCQllcmVwb3J0KERFQlVHMSwKLQkJCQkoZXJybXNnX2ludGVy bmFsKCJNdWx0aVhhY3QgbWVtYmVyIHN0b3AgbGltaXQgaXMgbm93ICV1IGJhc2VkIG9uIE11 bHRpWGFjdCAldSIsCi0JCQkJCQkJCSBvZmZzZXRTdG9wTGltaXQsIG9sZGVzdE11bHRpWGFj dElkKSkpOwotCX0KLQllbHNlIGlmIChwcmV2T2xkZXN0T2Zmc2V0S25vd24pCi0JewotCQkv KgotCQkgKiBJZiB3ZSBmYWlsZWQgdG8gZ2V0IHRoZSBvbGRlc3Qgb2Zmc2V0IHRoaXMgdGlt ZSwgYnV0IHdlIGhhdmUgYQotCQkgKiB2YWx1ZSBmcm9tIGEgcHJldmlvdXMgcGFzcyB0aHJv dWdoIHRoaXMgZnVuY3Rpb24sIHVzZSB0aGUgb2xkCi0JCSAqIHZhbHVlcyByYXRoZXIgdGhh biBhdXRvbWF0aWNhbGx5IGZvcmNpbmcgYW4gZW1lcmdlbmN5IGF1dG92YWN1dW0KLQkJICog Y3ljbGUgYWdhaW4uCi0JCSAqLwotCQlvbGRlc3RPZmZzZXQgPSBwcmV2T2xkZXN0T2Zmc2V0 OwotCQlvbGRlc3RPZmZzZXRLbm93biA9IHRydWU7Ci0JCW9mZnNldFN0b3BMaW1pdCA9IHBy ZXZPZmZzZXRTdG9wTGltaXQ7CisJCUxXTG9ja0FjcXVpcmUoTXVsdGlYYWN0R2VuTG9jaywg TFdfRVhDTFVTSVZFKTsKKwkJTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9mZnNldCA9IG9sZGVz dE9mZnNldDsKKwkJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RHZW5Mb2NrKTsKIAl9Ci0KLQkv KiBJbnN0YWxsIHRoZSBjb21wdXRlZCB2YWx1ZXMgKi8KLQlMV0xvY2tBY3F1aXJlKE11bHRp WGFjdEdlbkxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0JTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9m ZnNldCA9IG9sZGVzdE9mZnNldDsKLQlNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0T2Zmc2V0S25v d24gPSBvbGRlc3RPZmZzZXRLbm93bjsKLQlNdWx0aVhhY3RTdGF0ZS0+b2Zmc2V0U3RvcExp bWl0ID0gb2Zmc2V0U3RvcExpbWl0OwotCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0R2VuTG9j ayk7Ci0KLQkvKgotCSAqIERvIHdlIG5lZWQgYW4gZW1lcmdlbmN5IGF1dG92YWN1dW0/CUlm IHdlJ3JlIG5vdCBzdXJlLCBhc3N1bWUgeWVzLgotCSAqLwotCXJldHVybiAhb2xkZXN0T2Zm c2V0S25vd24gfHwKLQkJKG5leHRPZmZzZXQgLSBvbGRlc3RPZmZzZXQgPiBNVUxUSVhBQ1Rf TUVNQkVSX1NBRkVfVEhSRVNIT0xEKTsKLX0KLQotLyoKLSAqIFJldHVybiB3aGV0aGVyIGFk ZGluZyAiZGlzdGFuY2UiIHRvICJzdGFydCIgd291bGQgbW92ZSBwYXN0ICJib3VuZGFyeSIu Ci0gKgotICogV2UgdXNlIHRoaXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGFkZGl0aW9u IGlzICJ3cmFwcGluZyBhcm91bmQiIHRoZQotICogYm91bmRhcnkgcG9pbnQsIGhlbmNlIHRo ZSBuYW1lLiAgVGhlIHJlYXNvbiB3ZSBkb24ndCB3YW50IHRvIHVzZSB0aGUgcmVndWxhcgot ICogMl4zMS1tb2R1bG8gYXJpdGhtZXRpYyBoZXJlIGlzIHRoYXQgd2Ugd2FudCB0byBiZSBh YmxlIHRvIHVzZSB0aGUgd2hvbGUgb2YKLSAqIHRoZSAyXjMyLTEgc3BhY2UgaGVyZSwgYWxs b3dpbmcgZm9yIG1vcmUgbXVsdGl4YWN0cyB0aGFuIHdvdWxkIGZpdAotICogb3RoZXJ3aXNl LgotICovCi1zdGF0aWMgYm9vbAotTXVsdGlYYWN0T2Zmc2V0V291bGRXcmFwKE11bHRpWGFj dE9mZnNldCBib3VuZGFyeSwgTXVsdGlYYWN0T2Zmc2V0IHN0YXJ0LAotCQkJCQkJIHVpbnQz MiBkaXN0YW5jZSkKLXsKLQlNdWx0aVhhY3RPZmZzZXQgZmluaXNoOwotCi0JLyoKLQkgKiBO b3RlIHRoYXQgb2Zmc2V0IG51bWJlciAwIGlzIG5vdCB1c2VkIChzZWUgR2V0TXVsdGlYYWN0 SWRNZW1iZXJzKSwgc28KLQkgKiBpZiB0aGUgYWRkaXRpb24gd3JhcHMgYXJvdW5kIHRoZSBV SU5UX01BWCBib3VuZGFyeSwgc2tpcCB0aGF0IHZhbHVlLgotCSAqLwotCWZpbmlzaCA9IHN0 YXJ0ICsgZGlzdGFuY2U7Ci0JaWYgKGZpbmlzaCA8IHN0YXJ0KQotCQlmaW5pc2grKzsKLQot CS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgKiBXaGVuIHRoZSBib3VuZGFyeSBpcyBudW1lcmlj YWxseSBncmVhdGVyIHRoYW4gdGhlIHN0YXJ0aW5nIHBvaW50LCBhbnkKLQkgKiB2YWx1ZSBu dW1lcmljYWxseSBiZXR3ZWVuIHRoZSB0d28gaXMgbm90IHdyYXBwZWQ6Ci0JICoKLQkgKgk8 LS0tLVMtLS0tQi0tLS0+Ci0JICoJWy0tLSkJCQkgPSBGIHdyYXBwZWQgcGFzdCBCIChhbmQg VUlOVF9NQVgpCi0JICoJCSBbLS0tKQkJID0gRiBub3Qgd3JhcHBlZAotCSAqCQkJICBbLS0t LV0gPSBGIHdyYXBwZWQgcGFzdCBCCi0JICoKLQkgKiBXaGVuIHRoZSBib3VuZGFyeSBpcyBu dW1lcmljYWxseSBsZXNzIHRoYW4gdGhlIHN0YXJ0aW5nIHBvaW50IChpLmUuIHRoZQotCSAq IFVJTlRfTUFYIHdyYXBhcm91bmQgb2NjdXJzIHNvbWV3aGVyZSBpbiBiZXR3ZWVuKSB0aGVu IGFsbCB2YWx1ZXMgaW4KLQkgKiBiZXR3ZWVuIGFyZSB3cmFwcGVkOgotCSAqCi0JICoJPC0t LS1CLS0tLVMtLS0tPgotCSAqCVstLS0pCQkJID0gRiBub3Qgd3JhcHBlZCBwYXN0IEIgKGJ1 dCB3cmFwcGVkIHBhc3QgVUlOVF9NQVgpCi0JICoJCSBbLS0tKQkJID0gRiB3cmFwcGVkIHBh c3QgQiAoYW5kIFVJTlRfTUFYKQotCSAqCQkJICBbLS0tLV0gPSBGIG5vdCB3cmFwcGVkCi0J ICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqLwotCWlmIChzdGFydCA8IGJvdW5kYXJ5KQotCQly ZXR1cm4gZmluaXNoID49IGJvdW5kYXJ5IHx8IGZpbmlzaCA8IHN0YXJ0OwotCWVsc2UKLQkJ cmV0dXJuIGZpbmlzaCA+PSBib3VuZGFyeSAmJiBmaW5pc2ggPCBzdGFydDsKIH0KIAogLyoK QEAgLTI3NTEsMzcgKzI0OTEsMjMgQEAgZmluZF9tdWx0aXhhY3Rfc3RhcnQoTXVsdGlYYWN0 SWQgbXVsdGksIE11bHRpWGFjdE9mZnNldCAqcmVzdWx0KQogICogbWVtYmVyczogTnVtYmVy IG9mIG1lbWJlciBlbnRyaWVzIChuZXh0T2Zmc2V0IC0gb2xkZXN0T2Zmc2V0KQogICogb2xk ZXN0TXVsdGlYYWN0SWQ6IE9sZGVzdCBNdWx0aVhhY3QgSUQgc3RpbGwgaW4gdXNlCiAgKiBv bGRlc3RPZmZzZXQ6IE9sZGVzdCBvZmZzZXQgc3RpbGwgaW4gdXNlCi0gKgotICogUmV0dXJu cyBmYWxzZSBpZiB1bmFibGUgdG8gZGV0ZXJtaW5lLCB0aGUgb2xkZXN0IG9mZnNldCBiZWlu ZyB1bmtub3duLgogICovCi1ib29sCit2b2lkCiBHZXRNdWx0aVhhY3RJbmZvKHVpbnQzMiAq bXVsdGl4YWN0cywgTXVsdGlYYWN0T2Zmc2V0ICptZW1iZXJzLAogCQkJCSBNdWx0aVhhY3RJ ZCAqb2xkZXN0TXVsdGlYYWN0SWQsIE11bHRpWGFjdE9mZnNldCAqb2xkZXN0T2Zmc2V0KQog ewogCU11bHRpWGFjdE9mZnNldCBuZXh0T2Zmc2V0OwogCU11bHRpWGFjdElkIG5leHRNdWx0 aVhhY3RJZDsKLQlib29sCQlvbGRlc3RPZmZzZXRLbm93bjsKIAogCUxXTG9ja0FjcXVpcmUo TXVsdGlYYWN0R2VuTG9jaywgTFdfU0hBUkVEKTsKIAluZXh0T2Zmc2V0ID0gTXVsdGlYYWN0 U3RhdGUtPm5leHRPZmZzZXQ7CiAJKm9sZGVzdE11bHRpWGFjdElkID0gTXVsdGlYYWN0U3Rh dGUtPm9sZGVzdE11bHRpWGFjdElkOwogCW5leHRNdWx0aVhhY3RJZCA9IE11bHRpWGFjdFN0 YXRlLT5uZXh0TVhhY3Q7CiAJKm9sZGVzdE9mZnNldCA9IE11bHRpWGFjdFN0YXRlLT5vbGRl c3RPZmZzZXQ7Ci0Jb2xkZXN0T2Zmc2V0S25vd24gPSBNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0 T2Zmc2V0S25vd247CiAJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RHZW5Mb2NrKTsKIAotCWlm ICghb2xkZXN0T2Zmc2V0S25vd24pCi0JewotCQkqbWVtYmVycyA9IDA7Ci0JCSptdWx0aXhh Y3RzID0gMDsKLQkJKm9sZGVzdE11bHRpWGFjdElkID0gSW52YWxpZE11bHRpWGFjdElkOwot CQkqb2xkZXN0T2Zmc2V0ID0gMDsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQogCSptZW1iZXJz ID0gbmV4dE9mZnNldCAtICpvbGRlc3RPZmZzZXQ7CiAJKm11bHRpeGFjdHMgPSBuZXh0TXVs dGlYYWN0SWQgLSAqb2xkZXN0TXVsdGlYYWN0SWQ7Ci0JcmV0dXJuIHRydWU7CiB9CiAKIC8q CkBAIC0yNzkwLDI2ICsyNTE2LDI3IEBAIEdldE11bHRpWGFjdEluZm8odWludDMyICptdWx0 aXhhY3RzLCBNdWx0aVhhY3RPZmZzZXQgKm1lbWJlcnMsCiAgKiB2YWN1dW1fbXVsdGl4YWN0 X2ZyZWV6ZV90YWJsZV9hZ2Ugd29yayB0b2dldGhlciB0byBtYWtlIHN1cmUgd2UgbmV2ZXIg aGF2ZQogICogdG9vIG1hbnkgbXVsdGl4YWN0czsgd2UgaG9wZSB0aGF0LCBhdCBsZWFzdCB1 bmRlciBub3JtYWwgY2lyY3Vtc3RhbmNlcywKICAqIHRoaXMgd2lsbCBhbHNvIGJlIHN1ZmZp Y2llbnQgdG8ga2VlcCB1cyBmcm9tIHVzaW5nIHRvbyBtYW55IG9mZnNldHMuCi0gKiBIb3dl dmVyLCBpZiB0aGUgYXZlcmFnZSBtdWx0aXhhY3QgaGFzIG1hbnkgbWVtYmVycywgd2UgbWln aHQgZXhoYXVzdCB0aGUKLSAqIG1lbWJlcnMgc3BhY2Ugd2hpbGUgc3RpbGwgdXNpbmcgZmV3 IGVub3VnaCBtZW1iZXJzIHRoYXQgdGhlc2UgbGltaXRzIGZhaWwKLSAqIHRvIHRyaWdnZXIg cmVsbWlubXhpZCBhZHZhbmNlbWVudCBieSBWQUNVVU0uICBBdCB0aGF0IHBvaW50LCB3ZSdk IGhhdmUgbm8KLSAqIGNob2ljZSBidXQgdG8gc3RhcnQgZmFpbGluZyBtdWx0aXhhY3QtY3Jl YXRpbmcgb3BlcmF0aW9ucyB3aXRoIGFuIGVycm9yLgotICoKLSAqIFRvIHByZXZlbnQgdGhh dCwgaWYgbW9yZSB0aGFuIGEgdGhyZXNob2xkIHBvcnRpb24gb2YgdGhlIG1lbWJlcnMgc3Bh Y2UgaXMKLSAqIHVzZWQsIHdlIGVmZmVjdGl2ZWx5IHJlZHVjZSBhdXRvdmFjdXVtX211bHRp eGFjdF9mcmVlemVfbWF4X2FnZSBhbmQKLSAqIHRvIGEgdmFsdWUganVzdCBsZXNzIHRoYW4g dGhlIG51bWJlciBvZiBtdWx0aXhhY3RzIGluIHVzZS4gIFdlIGhvcGUgdGhhdAotICogdGhp cyB3aWxsIHF1aWNrbHkgdHJpZ2dlciBhdXRvdmFjdXVtaW5nIG9uIHRoZSB0YWJsZSBvciB0 YWJsZXMgd2l0aCB0aGUKLSAqIG9sZGVzdCByZWxtaW5teGlkLCB0aHVzIGFsbG93aW5nIGRh dG1pbm14aWQgdmFsdWVzIHRvIGFkdmFuY2UgYW5kIHJlbW92aW5nCi0gKiBzb21lIG1lbWJl cnMuCi0gKgotICogQXMgdGhlIGZyYWN0aW9uIG9mIHRoZSBtZW1iZXIgc3BhY2UgY3VycmVu dGx5IGluIHVzZSBncm93cywgd2UgYmVjb21lCi0gKiBtb3JlIGFnZ3Jlc3NpdmUgaW4gY2xh bXBpbmcgdGhpcyB2YWx1ZS4gIFRoYXQgbm90IG9ubHkgY2F1c2VzIGF1dG92YWN1dW0KLSAq IHRvIHJhbXAgdXAsIGJ1dCBhbHNvIG1ha2VzIGFueSBtYW51YWwgdmFjdXVtcyB0aGUgdXNl ciBpc3N1ZXMgbW9yZQotICogYWdncmVzc2l2ZS4gIFRoaXMgaGFwcGVucyBiZWNhdXNlIHZh Y3V1bV9nZXRfY3V0b2ZmcygpIHdpbGwgY2xhbXAgdGhlCi0gKiBmcmVlemUgdGFibGUgYW5k IHRoZSBtaW5pbXVtIGZyZWV6ZSBhZ2UgY3V0b2ZmcyBiYXNlZCBvbiB0aGUgZWZmZWN0aXZl Ci0gKiBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSB0aGlzIGZ1bmN0aW9u IHJldHVybnMuICBJbiB0aGUgd29yc3QKLSAqIGNhc2UsIHdlJ2xsIGNsYWltIHRoZSBmcmVl emVfbWF4X2FnZSB0byB6ZXJvLCBhbmQgZXZlcnkgdmFjdXVtIG9mIGFueQotICogdGFibGUg d2lsbCBmcmVlemUgZXZlcnkgbXVsdGl4YWN0LgorICogSG93ZXZlciwgaWYgdGhlIGF2ZXJh Z2UgbXVsdGl4YWN0IGhhcyBtYW55IG1lbWJlcnMsIHdlIG1pZ2h0IGFjY3VtdWxhdGUgYQor ICogbGFyZ2UgYW1vdW50IG9mIG1lbWJlcnMsIGNvbnN1bWluZyBkaXNrIHNwYWNlLCB3aGls ZSBzdGlsbCB1c2luZyBmZXcgZW5vdWdoCisgKiBtdWx0aXhpZHMgdGhhdCB0aGUgbXVsdGl4 aWQgbGltaXRzIGZhaWwgdG8gdHJpZ2dlciByZWxtaW5teGlkIGFkdmFuY2VtZW50CisgKiBi eSBWQUNVVU0uCisgKgorICogVG8gcHJldmVudCB0aGF0LCBpZiB0aGUgbWVtYmVycyBzcGFj ZSB1c2FnZSBleGNlZWRzIGEgdGhyZXNob2xkCisgKiAoTVVMVElYQUNUX01FTUJFUl9MT1df VEhSRVNIT0xEKSwgd2UgZWZmZWN0aXZlbHkgcmVkdWNlCisgKiBhdXRvdmFjdXVtX211bHRp eGFjdF9mcmVlemVfbWF4X2FnZSB0byBhIHZhbHVlIGp1c3QgbGVzcyB0aGFuIHRoZSBudW1i ZXIgb2YKKyAqIG11bHRpeGFjdHMgaW4gdXNlLiAgV2UgaG9wZSB0aGF0IHRoaXMgd2lsbCBx dWlja2x5IHRyaWdnZXIgYXV0b3ZhY3V1bWluZyBvbgorICogdGhlIHRhYmxlIG9yIHRhYmxl cyB3aXRoIHRoZSBvbGRlc3QgcmVsbWlubXhpZCwgdGh1cyBhbGxvd2luZyBkYXRtaW5teGlk CisgKiB2YWx1ZXMgdG8gYWR2YW5jZSBhbmQgcmVtb3Zpbmcgc29tZSBtZW1iZXJzLgorICoK KyAqIEFzIHRoZSBhbW91bnQgb2YgdGhlIG1lbWJlciBzcGFjZSBpbiB1c2UgZ3Jvd3MsIHdl IGJlY29tZSBtb3JlIGFnZ3Jlc3NpdmUKKyAqIGluIGNsYW1waW5nIHRoaXMgdmFsdWUuICBU aGF0IG5vdCBvbmx5IGNhdXNlcyBhdXRvdmFjdXVtIHRvIHJhbXAgdXAsIGJ1dAorICogYWxz byBtYWtlcyBhbnkgbWFudWFsIHZhY3V1bXMgdGhlIHVzZXIgaXNzdWVzIG1vcmUgYWdncmVz c2l2ZS4gIFRoaXMKKyAqIGhhcHBlbnMgYmVjYXVzZSB2YWN1dW1fZ2V0X2N1dG9mZnMoKSB3 aWxsIGNsYW1wIHRoZSBmcmVlemUgdGFibGUgYW5kIHRoZQorICogbWluaW11bSBmcmVlemUg YWdlIGN1dG9mZnMgYmFzZWQgb24gdGhlIGVmZmVjdGl2ZQorICogYXV0b3ZhY3V1bV9tdWx0 aXhhY3RfZnJlZXplX21heF9hZ2UgdGhpcyBmdW5jdGlvbiByZXR1cm5zLiAgQXQgdGhlIGV4 dHJlbWUsCisgKiB3aGVuIHRoZSBtZW1iZXJzIHVzYWdlIHJlYWNoZXMgTVVMVElYQUNUX01F TUJFUl9ISUdIX1RIUkVTSE9MRCwgd2UgY2xhbXAKKyAqIGZyZWV6ZV9tYXhfYWdlIHRvIHpl cm8sIGFuZCBldmVyeSB2YWN1dW0gb2YgYW55IHRhYmxlIHdpbGwgZnJlZXplIGV2ZXJ5Cisg KiBtdWx0aXhhY3QuCiAgKi8KIGludAogTXVsdGlYYWN0TWVtYmVyRnJlZXplVGhyZXNob2xk KHZvaWQpCkBAIC0yODIyLDIxICsyNTQ5LDI3IEBAIE11bHRpWGFjdE1lbWJlckZyZWV6ZVRo cmVzaG9sZCh2b2lkKQogCU11bHRpWGFjdElkIG9sZGVzdE11bHRpWGFjdElkOwogCU11bHRp WGFjdE9mZnNldCBvbGRlc3RPZmZzZXQ7CiAKLQkvKiBJZiB3ZSBjYW4ndCBkZXRlcm1pbmUg bWVtYmVyIHNwYWNlIHV0aWxpemF0aW9uLCBhc3N1bWUgdGhlIHdvcnN0LiAqLwotCWlmICgh R2V0TXVsdGlYYWN0SW5mbygmbXVsdGl4YWN0cywgJm1lbWJlcnMsICZvbGRlc3RNdWx0aVhh Y3RJZCwgJm9sZGVzdE9mZnNldCkpCi0JCXJldHVybiAwOworCS8qIFJlYWQgdGhlIGN1cnJl bnQgb2Zmc2V0cyBhbmQgbWVtYmVycyB1c2FnZS4gKi8KKwlHZXRNdWx0aVhhY3RJbmZvKCZt dWx0aXhhY3RzLCAmbWVtYmVycywgJm9sZGVzdE11bHRpWGFjdElkLCAmb2xkZXN0T2Zmc2V0 KTsKIAogCS8qIElmIG1lbWJlciBzcGFjZSB1dGlsaXphdGlvbiBpcyBsb3csIG5vIHNwZWNp YWwgYWN0aW9uIGlzIHJlcXVpcmVkLiAqLwotCWlmIChtZW1iZXJzIDw9IE1VTFRJWEFDVF9N RU1CRVJfU0FGRV9USFJFU0hPTEQpCisJaWYgKG1lbWJlcnMgPD0gTVVMVElYQUNUX01FTUJF Ul9MT1dfVEhSRVNIT0xEKQogCQlyZXR1cm4gYXV0b3ZhY3V1bV9tdWx0aXhhY3RfZnJlZXpl X21heF9hZ2U7CiAKIAkvKgogCSAqIENvbXB1dGUgYSB0YXJnZXQgZm9yIHJlbG1pbm14aWQg YWR2YW5jZW1lbnQuICBUaGUgbnVtYmVyIG9mIG11bHRpeGFjdHMKIAkgKiB3ZSB0cnkgdG8g ZWxpbWluYXRlIGZyb20gdGhlIHN5c3RlbSBpcyBiYXNlZCBvbiBob3cgZmFyIHdlIGFyZSBw YXN0Ci0JICogTVVMVElYQUNUX01FTUJFUl9TQUZFX1RIUkVTSE9MRC4KLQkgKi8KLQlmcmFj dGlvbiA9IChkb3VibGUpIChtZW1iZXJzIC0gTVVMVElYQUNUX01FTUJFUl9TQUZFX1RIUkVT SE9MRCkgLwotCQkoTVVMVElYQUNUX01FTUJFUl9EQU5HRVJfVEhSRVNIT0xEIC0gTVVMVElY QUNUX01FTUJFUl9TQUZFX1RIUkVTSE9MRCk7CisJICogTVVMVElYQUNUX01FTUJFUl9MT1df VEhSRVNIT0xELgorCSAqCisJICogVGhlIHdheSB0aGlzIGZvcm11bGEgd29ya3MgaXMgdGhh dCB3aGVuIG1lbWJlcnMgaXMgZXhhY3RseSBhdCB0aGUgbG93CisJICogdGhyZXNob2xkLCBm cmFjdGlvbiA9IDAuMCwgYW5kIHdlIHNldCBmcmVlemVfbWF4X2FnZSBlcXVhbCB0bworCSAq IG14aWRfYWdlKG9sZGVzdE11bHRpWGFjdElkKS4gIEFzIG1lbWJlcnMgZ3Jvd3MgZnVydGhl ciwgdG93YXJkcyB0aGUKKwkgKiBoaWdoIHRocmVzaG9sZCwgZnJhY3Rpb24gZ3Jvd3MgbGlu ZWFybHkgZnJvbSAwLjAgdG8gMS4wLCBhbmQgdGhlIHJlc3VsdAorCSAqIHNocmlua3MgZnJv bSBteGlkX2FnZShvbGRlc3RNdWx0aVhhY3RJZCkgdG8gMC4gIEJleW9uZCB0aGUgaGlnaAor CSAqIHRocmVzaG9sZCwgZnJhY3Rpb24gPiAxLjAgYW5kIHRoZSByZXN1bHQgaXMgY2xhbXBl ZCB0byAwLgorCSAqLworCWZyYWN0aW9uID0gKGRvdWJsZSkgKG1lbWJlcnMgLSBNVUxUSVhB Q1RfTUVNQkVSX0xPV19USFJFU0hPTEQpIC8KKwkJKE1VTFRJWEFDVF9NRU1CRVJfSElHSF9U SFJFU0hPTEQgLSBNVUxUSVhBQ1RfTUVNQkVSX0xPV19USFJFU0hPTEQpOwogCXZpY3RpbV9t dWx0aXhhY3RzID0gbXVsdGl4YWN0cyAqIGZyYWN0aW9uOwogCiAJLyogZnJhY3Rpb24gY291 bGQgYmUgPiAxLjAsIGJ1dCBsb3dlc3QgcG9zc2libGUgZnJlZXplIGFnZSBpcyB6ZXJvICov CkBAIC0yODc3LDM2ICsyNjEwLDEyIEBAIFNscnVTY2FuRGlyQ2JGaW5kRWFybGllc3QoU2xy dUN0bCBjdGwsIGNoYXIgKmZpbGVuYW1lLCBpbnQ2NCBzZWdwYWdlLCB2b2lkICpkYXRhCiAK IC8qCiAgKiBEZWxldGUgbWVtYmVycyBzZWdtZW50cyBbb2xkZXN0LCBuZXdPbGRlc3QpCi0g KgotICogVGhlIG1lbWJlcnMgU0xSVSBjYW4sIGluIGNvbnRyYXN0IHRvIHRoZSBvZmZzZXRz IG9uZSwgYmUgZmlsbGVkIHRvIGFsbW9zdAotICogdGhlIGZ1bGwgcmFuZ2UgYXQgb25jZS4g VGhpcyBtZWFucyBTaW1wbGVMcnVUcnVuY2F0ZSgpIGNhbid0IHRyaXZpYWxseSBiZQotICog dXNlZCAtIGluc3RlYWQgdGhlIHRvLWJlLWRlbGV0ZWQgcmFuZ2UgaXMgY29tcHV0ZWQgdXNp bmcgdGhlIG9mZnNldHMKLSAqIFNMUlUuIEMuZi4gVHJ1bmNhdGVNdWx0aVhhY3QoKS4KICAq Lwogc3RhdGljIHZvaWQKIFBlcmZvcm1NZW1iZXJzVHJ1bmNhdGlvbihNdWx0aVhhY3RPZmZz ZXQgb2xkZXN0T2Zmc2V0LCBNdWx0aVhhY3RPZmZzZXQgbmV3T2xkZXN0T2Zmc2V0KQogewot CWNvbnN0IGludDY0IG1heHNlZ21lbnQgPSBNWE9mZnNldFRvTWVtYmVyU2VnbWVudChNYXhN dWx0aVhhY3RPZmZzZXQpOwotCWludDY0CQlzdGFydHNlZ21lbnQgPSBNWE9mZnNldFRvTWVt YmVyU2VnbWVudChvbGRlc3RPZmZzZXQpOwotCWludDY0CQllbmRzZWdtZW50ID0gTVhPZmZz ZXRUb01lbWJlclNlZ21lbnQobmV3T2xkZXN0T2Zmc2V0KTsKLQlpbnQ2NAkJc2VnbWVudCA9 IHN0YXJ0c2VnbWVudDsKLQotCS8qCi0JICogRGVsZXRlIGFsbCB0aGUgc2VnbWVudHMgYnV0 IHRoZSBsYXN0IG9uZS4gVGhlIGxhc3Qgc2VnbWVudCBjYW4gc3RpbGwKLQkgKiBjb250YWlu LCBwb3NzaWJseSBwYXJ0aWFsbHksIHZhbGlkIGRhdGEuCi0JICovCi0Jd2hpbGUgKHNlZ21l bnQgIT0gZW5kc2VnbWVudCkKLQl7Ci0JCWVsb2coREVCVUcyLCAidHJ1bmNhdGluZyBtdWx0 aXhhY3QgbWVtYmVycyBzZWdtZW50ICUiIFBSSXg2NCwKLQkJCSBzZWdtZW50KTsKLQkJU2xy dURlbGV0ZVNlZ21lbnQoTXVsdGlYYWN0TWVtYmVyQ3RsLCBzZWdtZW50KTsKLQotCQkvKiBt b3ZlIHRvIG5leHQgc2VnbWVudCwgaGFuZGxpbmcgd3JhcGFyb3VuZCBjb3JyZWN0bHkgKi8K LQkJaWYgKHNlZ21lbnQgPT0gbWF4c2VnbWVudCkKLQkJCXNlZ21lbnQgPSAwOwotCQllbHNl Ci0JCQlzZWdtZW50ICs9IDE7Ci0JfQorCVNpbXBsZUxydVRydW5jYXRlKE11bHRpWGFjdE1l bWJlckN0bCwKKwkJCQkJICBNWE9mZnNldFRvTWVtYmVyUGFnZShuZXdPbGRlc3RPZmZzZXQp KTsKIH0KIAogLyoKQEAgLTMwNTAsNyArMjc1OSw3IEBAIFRydW5jYXRlTXVsdGlYYWN0KE11 bHRpWGFjdElkIG5ld09sZGVzdE11bHRpLCBPaWQgbmV3T2xkZXN0TXVsdGlEQikKIAogCWVs b2coREVCVUcxLCAicGVyZm9ybWluZyBtdWx0aXhhY3QgdHJ1bmNhdGlvbjogIgogCQkgIm9m ZnNldHMgWyV1LCAldSksIG9mZnNldHMgc2VnbWVudHMgWyUiIFBSSXg2NCAiLCAlIiBQUkl4 NjQgIiksICIKLQkJICJtZW1iZXJzIFsldSwgJXUpLCBtZW1iZXJzIHNlZ21lbnRzIFslIiBQ Ukl4NjQgIiwgJSIgUFJJeDY0ICIpIiwKKwkJICJtZW1iZXJzIFslIiBQUkl1NjQgIiwgJSIg UFJJdTY0ICIpLCBtZW1iZXJzIHNlZ21lbnRzIFslIiBQUkl4NjQgIiwgJSIgUFJJeDY0ICIp IiwKIAkJIG9sZGVzdE11bHRpLCBuZXdPbGRlc3RNdWx0aSwKIAkJIE11bHRpWGFjdElkVG9P ZmZzZXRTZWdtZW50KG9sZGVzdE11bHRpKSwKIAkJIE11bHRpWGFjdElkVG9PZmZzZXRTZWdt ZW50KG5ld09sZGVzdE11bHRpKSwKQEAgLTMwOTEsNiArMjgwMCw3IEBAIFRydW5jYXRlTXVs dGlYYWN0KE11bHRpWGFjdElkIG5ld09sZGVzdE11bHRpLCBPaWQgbmV3T2xkZXN0TXVsdGlE QikKIAlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdEdlbkxvY2ssIExXX0VYQ0xVU0lWRSk7CiAJ TXVsdGlYYWN0U3RhdGUtPm9sZGVzdE11bHRpWGFjdElkID0gbmV3T2xkZXN0TXVsdGk7CiAJ TXVsdGlYYWN0U3RhdGUtPm9sZGVzdE11bHRpWGFjdERCID0gbmV3T2xkZXN0TXVsdGlEQjsK KwlNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0T2Zmc2V0ID0gbmV3T2xkZXN0T2Zmc2V0OwogCUxX TG9ja1JlbGVhc2UoTXVsdGlYYWN0R2VuTG9jayk7CiAKIAkvKiBGaXJzdCB0cnVuY2F0ZSBt ZW1iZXJzICovCkBAIC0zMTMwLDIwICsyODQwLDEzIEBAIE11bHRpWGFjdE9mZnNldFBhZ2VQ cmVjZWRlcyhpbnQ2NCBwYWdlMSwgaW50NjQgcGFnZTIpCiAKIC8qCiAgKiBEZWNpZGUgd2hl dGhlciBhIE11bHRpWGFjdE1lbWJlciBwYWdlIG51bWJlciBpcyAib2xkZXIiIGZvciB0cnVu Y2F0aW9uCi0gKiBwdXJwb3Nlcy4gIFRoZXJlIGlzIG5vICJpbnZhbGlkIG9mZnNldCBudW1i ZXIiIHNvIHVzZSB0aGUgbnVtYmVycyB2ZXJiYXRpbS4KKyAqIHB1cnBvc2VzLiAgVGhlcmUg aXMgbm8gImludmFsaWQgb2Zmc2V0IG51bWJlciIgYW5kIG1lbWJlcnMgbmV2ZXIgd3JhcAor ICogYXJvdW5kLCBzbyB1c2UgdGhlIG51bWJlcnMgdmVyYmF0aW0uCiAgKi8KIHN0YXRpYyBi b29sCiBNdWx0aVhhY3RNZW1iZXJQYWdlUHJlY2VkZXMoaW50NjQgcGFnZTEsIGludDY0IHBh Z2UyKQogewotCU11bHRpWGFjdE9mZnNldCBvZmZzZXQxOwotCU11bHRpWGFjdE9mZnNldCBv ZmZzZXQyOwotCi0Jb2Zmc2V0MSA9ICgoTXVsdGlYYWN0T2Zmc2V0KSBwYWdlMSkgKiBNVUxU SVhBQ1RfTUVNQkVSU19QRVJfUEFHRTsKLQlvZmZzZXQyID0gKChNdWx0aVhhY3RPZmZzZXQp IHBhZ2UyKSAqIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFOwotCi0JcmV0dXJuIChNdWx0 aVhhY3RPZmZzZXRQcmVjZWRlcyhvZmZzZXQxLCBvZmZzZXQyKSAmJgotCQkJTXVsdGlYYWN0 T2Zmc2V0UHJlY2VkZXMob2Zmc2V0MSwKLQkJCQkJCQkJCW9mZnNldDIgKyBNVUxUSVhBQ1Rf TUVNQkVSU19QRVJfUEFHRSAtIDEpKTsKKwlyZXR1cm4gcGFnZTEgPCBwYWdlMjsKIH0KIAog LyoKQEAgLTMxNzUsMTcgKzI4NzgsNiBAQCBNdWx0aVhhY3RJZFByZWNlZGVzT3JFcXVhbHMo TXVsdGlYYWN0SWQgbXVsdGkxLCBNdWx0aVhhY3RJZCBtdWx0aTIpCiB9CiAKIAotLyoKLSAq IERlY2lkZSB3aGljaCBvZiB0d28gb2Zmc2V0cyBpcyBlYXJsaWVyLgotICovCi1zdGF0aWMg Ym9vbAotTXVsdGlYYWN0T2Zmc2V0UHJlY2VkZXMoTXVsdGlYYWN0T2Zmc2V0IG9mZnNldDEs IE11bHRpWGFjdE9mZnNldCBvZmZzZXQyKQotewotCWludDMyCQlkaWZmID0gKGludDMyKSAo b2Zmc2V0MSAtIG9mZnNldDIpOwotCi0JcmV0dXJuIChkaWZmIDwgMCk7Ci19Ci0KIC8qCiAg KiBXcml0ZSBhIFRSVU5DQVRFIHhsb2cgcmVjb3JkCiAgKgpAQCAtMzI3OCw3ICsyOTcwLDcg QEAgbXVsdGl4YWN0X3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAKIAkJZWxvZyhE RUJVRzEsICJyZXBsYXlpbmcgbXVsdGl4YWN0IHRydW5jYXRpb246ICIKIAkJCSAib2Zmc2V0 cyBbJXUsICV1KSwgb2Zmc2V0cyBzZWdtZW50cyBbJSIgUFJJeDY0ICIsICUiIFBSSXg2NCAi KSwgIgotCQkJICJtZW1iZXJzIFsldSwgJXUpLCBtZW1iZXJzIHNlZ21lbnRzIFslIiBQUkl4 NjQgIiwgJSIgUFJJeDY0ICIpIiwKKwkJCSAibWVtYmVycyBbJSIgUFJJdTY0ICIsICUiIFBS SXU2NCAiKSwgbWVtYmVycyBzZWdtZW50cyBbJSIgUFJJeDY0ICIsICUiIFBSSXg2NCAiKSIs CiAJCQkgeGxyZWMuc3RhcnRUcnVuY09mZiwgeGxyZWMuZW5kVHJ1bmNPZmYsCiAJCQkgTXVs dGlYYWN0SWRUb09mZnNldFNlZ21lbnQoeGxyZWMuc3RhcnRUcnVuY09mZiksCiAJCQkgTXVs dGlYYWN0SWRUb09mZnNldFNlZ21lbnQoeGxyZWMuZW5kVHJ1bmNPZmYpLApAQCAtMzI5Myw3 ICsyOTg1LDcgQEAgbXVsdGl4YWN0X3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJ CSAqIEFkdmFuY2UgdGhlIGhvcml6b24gdmFsdWVzLCBzbyB0aGV5J3JlIGN1cnJlbnQgYXQg dGhlIGVuZCBvZgogCQkgKiByZWNvdmVyeS4KIAkJICovCi0JCVNldE11bHRpWGFjdElkTGlt aXQoeGxyZWMuZW5kVHJ1bmNPZmYsIHhscmVjLm9sZGVzdE11bHRpREIsIGZhbHNlKTsKKwkJ U2V0TXVsdGlYYWN0SWRMaW1pdCh4bHJlYy5lbmRUcnVuY09mZiwgeGxyZWMub2xkZXN0TXVs dGlEQik7CiAKIAkJUGVyZm9ybU1lbWJlcnNUcnVuY2F0aW9uKHhscmVjLnN0YXJ0VHJ1bmNN ZW1iLCB4bHJlYy5lbmRUcnVuY01lbWIpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS94bG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9n LmMKaW5kZXggMjJkMGEyZThjM2EuLmEwMDBiOGJkNTA5IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0veGxvZy5jCkBAIC01MTM5LDcgKzUxMzksNyBAQCBCb290U3RyYXBYTE9HKHVpbnQz MiBkYXRhX2NoZWNrc3VtX3ZlcnNpb24pCiAJCUZ1bGxUcmFuc2FjdGlvbklkRnJvbUVwb2No QW5kWGlkKDAsIEZpcnN0Tm9ybWFsVHJhbnNhY3Rpb25JZCk7CiAJY2hlY2tQb2ludC5uZXh0 T2lkID0gRmlyc3RHZW5ia2lPYmplY3RJZDsKIAljaGVja1BvaW50Lm5leHRNdWx0aSA9IEZp cnN0TXVsdGlYYWN0SWQ7Ci0JY2hlY2tQb2ludC5uZXh0TXVsdGlPZmZzZXQgPSAwOworCWNo ZWNrUG9pbnQubmV4dE11bHRpT2Zmc2V0ID0gMTsKIAljaGVja1BvaW50Lm9sZGVzdFhpZCA9 IEZpcnN0Tm9ybWFsVHJhbnNhY3Rpb25JZDsKIAljaGVja1BvaW50Lm9sZGVzdFhpZERCID0g VGVtcGxhdGUxRGJPaWQ7CiAJY2hlY2tQb2ludC5vbGRlc3RNdWx0aSA9IEZpcnN0TXVsdGlY YWN0SWQ7CkBAIC01MTU1LDcgKzUxNTUsNyBAQCBCb290U3RyYXBYTE9HKHVpbnQzMiBkYXRh X2NoZWNrc3VtX3ZlcnNpb24pCiAJTXVsdGlYYWN0U2V0TmV4dE1YYWN0KGNoZWNrUG9pbnQu bmV4dE11bHRpLCBjaGVja1BvaW50Lm5leHRNdWx0aU9mZnNldCk7CiAJQWR2YW5jZU9sZGVz dENsb2dYaWQoY2hlY2tQb2ludC5vbGRlc3RYaWQpOwogCVNldFRyYW5zYWN0aW9uSWRMaW1p dChjaGVja1BvaW50Lm9sZGVzdFhpZCwgY2hlY2tQb2ludC5vbGRlc3RYaWREQik7Ci0JU2V0 TXVsdGlYYWN0SWRMaW1pdChjaGVja1BvaW50Lm9sZGVzdE11bHRpLCBjaGVja1BvaW50Lm9s ZGVzdE11bHRpREIsIHRydWUpOworCVNldE11bHRpWGFjdElkTGltaXQoY2hlY2tQb2ludC5v bGRlc3RNdWx0aSwgY2hlY2tQb2ludC5vbGRlc3RNdWx0aURCKTsKIAlTZXRDb21taXRUc0xp bWl0KEludmFsaWRUcmFuc2FjdGlvbklkLCBJbnZhbGlkVHJhbnNhY3Rpb25JZCk7CiAKIAkv KiBTZXQgdXAgdGhlIFhMT0cgcGFnZSBoZWFkZXIgKi8KQEAgLTU2MzYsNyArNTYzNiw3IEBA IFN0YXJ0dXBYTE9HKHZvaWQpCiAJTXVsdGlYYWN0U2V0TmV4dE1YYWN0KGNoZWNrUG9pbnQu bmV4dE11bHRpLCBjaGVja1BvaW50Lm5leHRNdWx0aU9mZnNldCk7CiAJQWR2YW5jZU9sZGVz dENsb2dYaWQoY2hlY2tQb2ludC5vbGRlc3RYaWQpOwogCVNldFRyYW5zYWN0aW9uSWRMaW1p dChjaGVja1BvaW50Lm9sZGVzdFhpZCwgY2hlY2tQb2ludC5vbGRlc3RYaWREQik7Ci0JU2V0 TXVsdGlYYWN0SWRMaW1pdChjaGVja1BvaW50Lm9sZGVzdE11bHRpLCBjaGVja1BvaW50Lm9s ZGVzdE11bHRpREIsIHRydWUpOworCVNldE11bHRpWGFjdElkTGltaXQoY2hlY2tQb2ludC5v bGRlc3RNdWx0aSwgY2hlY2tQb2ludC5vbGRlc3RNdWx0aURCKTsKIAlTZXRDb21taXRUc0xp bWl0KGNoZWNrUG9pbnQub2xkZXN0Q29tbWl0VHNYaWQsCiAJCQkJCSBjaGVja1BvaW50Lm5l d2VzdENvbW1pdFRzWGlkKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0veGxvZ3JlY292ZXJ5LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9n cmVjb3ZlcnkuYwppbmRleCAyMWI4ZjE3OWJhMC4uNTFkZWEzNDJhNGQgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jCkBAIC04ODYsNyArODg2LDcg QEAgSW5pdFdhbFJlY292ZXJ5KENvbnRyb2xGaWxlRGF0YSAqQ29udHJvbEZpbGUsIGJvb2wg Kndhc1NodXRkb3duX3B0ciwKIAkJCQkJCQkgVTY0RnJvbUZ1bGxUcmFuc2FjdGlvbklkKGNo ZWNrUG9pbnQubmV4dFhpZCksCiAJCQkJCQkJIGNoZWNrUG9pbnQubmV4dE9pZCkpKTsKIAll cmVwb3J0KERFQlVHMSwKLQkJCShlcnJtc2dfaW50ZXJuYWwoIm5leHQgTXVsdGlYYWN0SWQ6 ICV1OyBuZXh0IE11bHRpWGFjdE9mZnNldDogJXUiLAorCQkJKGVycm1zZ19pbnRlcm5hbCgi bmV4dCBNdWx0aVhhY3RJZDogJXU7IG5leHQgTXVsdGlYYWN0T2Zmc2V0OiAlIiBQUkl1NjQs CiAJCQkJCQkJIGNoZWNrUG9pbnQubmV4dE11bHRpLCBjaGVja1BvaW50Lm5leHRNdWx0aU9m ZnNldCkpKTsKIAllcmVwb3J0KERFQlVHMSwKIAkJCShlcnJtc2dfaW50ZXJuYWwoIm9sZGVz dCB1bmZyb3plbiB0cmFuc2FjdGlvbiBJRDogJXUsIGluIGRhdGFiYXNlICV1IiwKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvdmFjdXVtLmMKaW5kZXggZTc4NWRkNTVjZTUuLjc3ODBlYTZlYWUzIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYworKysgYi9zcmMvYmFja2VuZC9j b21tYW5kcy92YWN1dW0uYwpAQCAtMTE0NSw4ICsxMTQ1LDggQEAgdmFjdXVtX2dldF9jdXRv ZmZzKFJlbGF0aW9uIHJlbCwgY29uc3QgVmFjdXVtUGFyYW1zIHBhcmFtcywKIAogCS8qCiAJ ICogQWxzbyBjb21wdXRlIHRoZSBtdWx0aXhhY3QgYWdlIGZvciB3aGljaCBmcmVlemluZyBp cyB1cmdlbnQuICBUaGlzIGlzCi0JICogbm9ybWFsbHkgYXV0b3ZhY3V1bV9tdWx0aXhhY3Rf ZnJlZXplX21heF9hZ2UsIGJ1dCBtYXkgYmUgbGVzcyBpZiB3ZSBhcmUKLQkgKiBzaG9ydCBv ZiBtdWx0aXhhY3QgbWVtYmVyIHNwYWNlLgorCSAqIG5vcm1hbGx5IGF1dG92YWN1dW1fbXVs dGl4YWN0X2ZyZWV6ZV9tYXhfYWdlLCBidXQgbWF5IGJlIGxlc3MgaWYKKwkgKiBtdWx0aXhh Y3QgbWVtYmVycyBhcmUgYmxvYXRlZC4KIAkgKi8KIAllZmZlY3RpdmVfbXVsdGl4YWN0X2Zy ZWV6ZV9tYXhfYWdlID0gTXVsdGlYYWN0TWVtYmVyRnJlZXplVGhyZXNob2xkKCk7CiAKQEAg LTE5NzEsNyArMTk3MSw3IEBAIHZhY190cnVuY2F0ZV9jbG9nKFRyYW5zYWN0aW9uSWQgZnJv emVuWElELAogCSAqIHNpZ25hbGluZyB0d2ljZT8KIAkgKi8KIAlTZXRUcmFuc2FjdGlvbklk TGltaXQoZnJvemVuWElELCBvbGRlc3R4aWRfZGF0b2lkKTsKLQlTZXRNdWx0aVhhY3RJZExp bWl0KG1pbk11bHRpLCBtaW5tdWx0aV9kYXRvaWQsIGZhbHNlKTsKKwlTZXRNdWx0aVhhY3RJ ZExpbWl0KG1pbk11bHRpLCBtaW5tdWx0aV9kYXRvaWQpOwogCiAJTFdMb2NrUmVsZWFzZShX cmFwTGltaXRzVmFjdXVtTG9jayk7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0 bWFzdGVyL2F1dG92YWN1dW0uYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1 bS5jCmluZGV4IDFjMzg0ODhmMmNiLi5mNDgzMGY4OTZmMyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1h c3Rlci9hdXRvdmFjdXVtLmMKQEAgLTE5MzYsOCArMTkzNiw4IEBAIGRvX2F1dG92YWN1dW0o dm9pZCkKIAogCS8qCiAJICogQ29tcHV0ZSB0aGUgbXVsdGl4YWN0IGFnZSBmb3Igd2hpY2gg ZnJlZXppbmcgaXMgdXJnZW50LiAgVGhpcyBpcwotCSAqIG5vcm1hbGx5IGF1dG92YWN1dW1f bXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlLCBidXQgbWF5IGJlIGxlc3MgaWYgd2UgYXJlCi0J ICogc2hvcnQgb2YgbXVsdGl4YWN0IG1lbWJlciBzcGFjZS4KKwkgKiBub3JtYWxseSBhdXRv dmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSwgYnV0IG1heSBiZSBsZXNzIGlmCisJ ICogbXVsdGl4YWN0IG1lbWJlcnMgYXJlIGJsb2F0ZWQuCiAJICovCiAJZWZmZWN0aXZlX211 bHRpeGFjdF9mcmVlemVfbWF4X2FnZSA9IE11bHRpWGFjdE1lbWJlckZyZWV6ZVRocmVzaG9s ZCgpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2NvbnRyb2xkYXRhL3BnX2NvbnRyb2xk YXRhLmMgYi9zcmMvYmluL3BnX2NvbnRyb2xkYXRhL3BnX2NvbnRyb2xkYXRhLmMKaW5kZXgg MzBhZDQ2OTEyZTEuLmE0MDYwMzA5YWUwIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2NvbnRy b2xkYXRhL3BnX2NvbnRyb2xkYXRhLmMKKysrIGIvc3JjL2Jpbi9wZ19jb250cm9sZGF0YS9w Z19jb250cm9sZGF0YS5jCkBAIC0yNzEsNyArMjcxLDcgQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQogCQkgICBDb250cm9sRmlsZS0+Y2hlY2tQb2ludENvcHkubmV4dE9pZCk7 CiAJcHJpbnRmKF8oIkxhdGVzdCBjaGVja3BvaW50J3MgTmV4dE11bHRpWGFjdElkOiAgJXVc biIpLAogCQkgICBDb250cm9sRmlsZS0+Y2hlY2tQb2ludENvcHkubmV4dE11bHRpKTsKLQlw cmludGYoXygiTGF0ZXN0IGNoZWNrcG9pbnQncyBOZXh0TXVsdGlPZmZzZXQ6ICAldVxuIiks CisJcHJpbnRmKF8oIkxhdGVzdCBjaGVja3BvaW50J3MgTmV4dE11bHRpT2Zmc2V0OiAgJSIg UFJJdTY0ICJcbiIpLAogCQkgICBDb250cm9sRmlsZS0+Y2hlY2tQb2ludENvcHkubmV4dE11 bHRpT2Zmc2V0KTsKIAlwcmludGYoXygiTGF0ZXN0IGNoZWNrcG9pbnQncyBvbGRlc3RYSUQ6 ICAgICAgICAldVxuIiksCiAJCSAgIENvbnRyb2xGaWxlLT5jaGVja1BvaW50Q29weS5vbGRl c3RYaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19yZXNldHdhbC9wZ19yZXNldHdhbC5j IGIvc3JjL2Jpbi9wZ19yZXNldHdhbC9wZ19yZXNldHdhbC5jCmluZGV4IGM2NjdhMTFjYjZh Li5kNWRlNGE3MTcxYSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19yZXNldHdhbC9wZ19yZXNl dHdhbC5jCisrKyBiL3NyYy9iaW4vcGdfcmVzZXR3YWwvcGdfcmVzZXR3YWwuYwpAQCAtMTE1 LDYgKzExNSw3IEBAIHN0YXRpYyB2b2lkIEtpbGxFeGlzdGluZ1dBTFN1bW1hcmllcyh2b2lk KTsKIHN0YXRpYyB2b2lkIFdyaXRlRW1wdHlYTE9HKHZvaWQpOwogc3RhdGljIHZvaWQgdXNh Z2Uodm9pZCk7CiBzdGF0aWMgdWludDMyIHN0cnRvdWludDMyX3N0cmljdChjb25zdCBjaGFy ICpyZXN0cmljdCBzLCBjaGFyICoqcmVzdHJpY3QgZW5kcHRyLCBpbnQgYmFzZSk7CitzdGF0 aWMgdWludDY0IHN0cnRvdWludDY0X3N0cmljdChjb25zdCBjaGFyICpyZXN0cmljdCBzLCBj aGFyICoqcmVzdHJpY3QgZW5kcHRyLCBpbnQgYmFzZSk7CiAKIAogaW50CkBAIC0yOTMsNyAr Mjk0LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCiAJCQljYXNlICdPJzoK IAkJCQllcnJubyA9IDA7Ci0JCQkJbmV4dF9teG9mZl92YWwgPSBzdHJ0b3VpbnQzMl9zdHJp Y3Qob3B0YXJnLCAmZW5kcHRyLCAwKTsKKwkJCQluZXh0X214b2ZmX3ZhbCA9IHN0cnRvdWlu dDY0X3N0cmljdChvcHRhcmcsICZlbmRwdHIsIDApOwogCQkJCWlmIChlbmRwdHIgPT0gb3B0 YXJnIHx8ICplbmRwdHIgIT0gJ1wwJyB8fCBlcnJubyAhPSAwKQogCQkJCXsKIAkJCQkJcGdf bG9nX2Vycm9yKCJpbnZhbGlkIGFyZ3VtZW50IGZvciBvcHRpb24gJXMiLCAiLU8iKTsKQEAg LTc3Miw3ICs3NzMsNyBAQCBQcmludENvbnRyb2xWYWx1ZXMoYm9vbCBndWVzc2VkKQogCQkg ICBDb250cm9sRmlsZS5jaGVja1BvaW50Q29weS5uZXh0T2lkKTsKIAlwcmludGYoXygiTGF0 ZXN0IGNoZWNrcG9pbnQncyBOZXh0TXVsdGlYYWN0SWQ6ICAldVxuIiksCiAJCSAgIENvbnRy b2xGaWxlLmNoZWNrUG9pbnRDb3B5Lm5leHRNdWx0aSk7Ci0JcHJpbnRmKF8oIkxhdGVzdCBj aGVja3BvaW50J3MgTmV4dE11bHRpT2Zmc2V0OiAgJXVcbiIpLAorCXByaW50ZihfKCJMYXRl c3QgY2hlY2twb2ludCdzIE5leHRNdWx0aU9mZnNldDogICUiIFBSSXU2NCAiXG4iKSwKIAkJ ICAgQ29udHJvbEZpbGUuY2hlY2tQb2ludENvcHkubmV4dE11bHRpT2Zmc2V0KTsKIAlwcmlu dGYoXygiTGF0ZXN0IGNoZWNrcG9pbnQncyBvbGRlc3RYSUQ6ICAgICAgICAldVxuIiksCiAJ CSAgIENvbnRyb2xGaWxlLmNoZWNrUG9pbnRDb3B5Lm9sZGVzdFhpZCk7CkBAIC04NDgsNyAr ODQ5LDcgQEAgUHJpbnROZXdDb250cm9sVmFsdWVzKHZvaWQpCiAKIAlpZiAobmV4dF9teG9m Zl9naXZlbikKIAl7Ci0JCXByaW50ZihfKCJOZXh0TXVsdGlPZmZzZXQ6ICAgICAgICAgICAg ICAgICAgICAgICV1XG4iKSwKKwkJcHJpbnRmKF8oIk5leHRNdWx0aU9mZnNldDogICAgICAg ICAgICAgICAgICAgICAgJSIgUFJJdTY0ICJcbiIpLAogCQkJICAgQ29udHJvbEZpbGUuY2hl Y2tQb2ludENvcHkubmV4dE11bHRpT2Zmc2V0KTsKIAl9CiAKQEAgLTEyNzYsMyArMTI3Nywz NCBAQCBzdHJ0b3VpbnQzMl9zdHJpY3QoY29uc3QgY2hhciAqcmVzdHJpY3QgcywgY2hhciAq KnJlc3RyaWN0IGVuZHB0ciwgaW50IGJhc2UpCiAKIAlyZXR1cm4gKHVpbnQzMikgdmFsOwog fQorCisvKgorICogc3RydG91aW50NjRfc3RyaWN0IC0tIGxpa2Ugc3RydG91NjQoKSwgYnV0 IGRvZXNuJ3QgYWNjZXB0IG5lZ2F0aXZlIHZhbHVlcworICovCitzdGF0aWMgdWludDY0Citz dHJ0b3VpbnQ2NF9zdHJpY3QoY29uc3QgY2hhciAqcmVzdHJpY3QgcywgY2hhciAqKnJlc3Ry aWN0IGVuZHB0ciwgaW50IGJhc2UpCit7CisJdWludDY0CQl2YWw7CisJYm9vbAkJaXNfbmVn OworCisJLyogc2tpcCBsZWFkaW5nIHdoaXRlc3BhY2UgKi8KKwl3aGlsZSAoaXNzcGFjZSgq cykpCisJCXMrKzsKKworCS8qCisJICogSXMgaXQgbmVnYXRpdmU/ICBXZSBzdGlsbCBjYWxs IHN0cnRvdTY0KCkgaWYgaXQgd2FzLCB0byBzZXQgJ2VuZHB0cicuCisJICogKFRoZSBjdXJy ZW50IGNhbGxlcnMgZG9uJ3QgY2FyZSB0aG91Z2guKQorCSAqLworCWlzX25lZyA9ICgqcyA9 PSAnLScpOworCisJdmFsID0gc3RydG91NjQocywgZW5kcHRyLCBiYXNlKTsKKworCS8qIHJl amVjdCBpZiBpdCB3YXMgbmVnYXRpdmUgKi8KKwlpZiAoZXJybm8gPT0gMCAmJiBpc19uZWcp CisJeworCQllcnJubyA9IEVSQU5HRTsKKwkJdmFsID0gMDsKKwl9CisKKwlyZXR1cm4gdmFs OworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19yZXNldHdhbC90LzAwMV9iYXNpYy5wbCBi L3NyYy9iaW4vcGdfcmVzZXR3YWwvdC8wMDFfYmFzaWMucGwKaW5kZXggZTk3ODBkYmUyYTYu LjRhZTUxZWU1NzRlIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3Jlc2V0d2FsL3QvMDAxX2Jh c2ljLnBsCisrKyBiL3NyYy9iaW4vcGdfcmVzZXR3YWwvdC8wMDFfYmFzaWMucGwKQEAgLTIz MCw3ICsyMzAsNyBAQCBwdXNoIEBjbWQsCiAgIHNwcmludGYoIiVkLCVkIiwgaGV4KCRmaWxl c1swXSkgPT0gMCA/IDMgOiBoZXgoJGZpbGVzWzBdKSwgaGV4KCRmaWxlc1stMV0pKTsKIAog QGZpbGVzID0gZ2V0X3NscnVfZmlsZXMoJ3BnX211bHRpeGFjdC9vZmZzZXRzJyk7Ci0kbXVs dCA9IDMyICogJGJsY2tzeiAvIDQ7CiskbXVsdCA9IDMyICogJGJsY2tzeiAvIDg7CiAjIC0t bXVsdGl4YWN0LWlkcyBhcmd1bWVudCBpcyAibmV3LG9sZCIKIHB1c2ggQGNtZCwKICAgJy0t bXVsdGl4YWN0LWlkcycgPT4gc3ByaW50ZigiJWQsJWQiLApkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ191cGdyYWRlL01ha2VmaWxlIGIvc3JjL2Jpbi9wZ191cGdyYWRlL01ha2VmaWxlCmlu ZGV4IDY5ZmNmNTkzY2FlLi4xMmY3NDdiMmM1OSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ191 cGdyYWRlL01ha2VmaWxlCisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS9NYWtlZmlsZQpAQCAt MTgsMTEgKzE4LDE0IEBAIE9CSlMgPSBcCiAJZmlsZS5vIFwKIAlmdW5jdGlvbi5vIFwKIAlp bmZvLm8gXAorCW11bHRpeGFjdF9yZXdyaXRlLm8gXAorCW11bHRpeGFjdF9yZWFkX3YxOC5v IFwKIAlvcHRpb24ubyBcCiAJcGFyYWxsZWwubyBcCiAJcGdfdXBncmFkZS5vIFwKIAlyZWxm aWxlbnVtYmVyLm8gXAogCXNlcnZlci5vIFwKKwlzbHJ1X2lvLm8gXAogCXRhYmxlc3BhY2Uu byBcCiAJdGFzay5vIFwKIAl1dGlsLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ191cGdy YWRlL21lc29uLmJ1aWxkIGIvc3JjL2Jpbi9wZ191cGdyYWRlL21lc29uLmJ1aWxkCmluZGV4 IGFjOTkyZjBkMTRiLi43YmQ3MDYyYjYyZiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ191cGdy YWRlL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS9tZXNvbi5idWlsZApA QCAtOCwxMSArOCwxNCBAQCBwZ191cGdyYWRlX3NvdXJjZXMgPSBmaWxlcygKICAgJ2ZpbGUu YycsCiAgICdmdW5jdGlvbi5jJywKICAgJ2luZm8uYycsCisgICdtdWx0aXhhY3RfcmV3cml0 ZS5jJywKKyAgJ211bHRpeGFjdF9yZWFkX3YxOC5jJywKICAgJ29wdGlvbi5jJywKICAgJ3Bh cmFsbGVsLmMnLAogICAncGdfdXBncmFkZS5jJywKICAgJ3JlbGZpbGVudW1iZXIuYycsCiAg ICdzZXJ2ZXIuYycsCisgICdzbHJ1X2lvLmMnLAogICAndGFibGVzcGFjZS5jJywKICAgJ3Rh c2suYycsCiAgICd1dGlsLmMnLApAQCAtNDcsNiArNTAsNyBAQCB0ZXN0cyArPSB7CiAgICAg ICAndC8wMDRfc3Vic2NyaXB0aW9uLnBsJywKICAgICAgICd0LzAwNV9jaGFyX3NpZ25lZG5l c3MucGwnLAogICAgICAgJ3QvMDA2X3RyYW5zZmVyX21vZGVzLnBsJywKKyAgICAgICd0LzAw N19tdWx0aXhhY3RfY29udmVyc2lvbi5wbCcsCiAgICAgXSwKICAgICAndGVzdF9rd2FyZ3Mn OiB7J3ByaW9yaXR5JzogNDB9LCAjIHBnX3VwZ3JhZGUgdGVzdHMgYXJlIHNsb3cKICAgfSwK ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3RfcmVhZF92MTguYyBi L3NyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3RfcmVhZF92MTguYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZmI1Mzc2NjhhMmMKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X3JlYWRfdjE4LmMKQEAgLTAsMCAr MSwzMzcgQEAKKy8qCisgKiBtdWx0aXhhY3RfcmVhZF92MTguYworICoKKyAqIEZ1bmN0aW9u cyB0byByZWFkIG11bHRpeGFjdCBTTFJVcyBmcm9tIGNsdXN0ZXIgb2YgUG9zdGdyZVNRTCB2 ZXJzaW9uIDE4IGFuZAorICogb2xkZXIuIEluIHZlcnNpb24gMTksIHRoZSBtdWx0aXhpZCBv ZmZzZXRzIHdlcmUgZXhwYW5kZWQgZnJvbSAzMiB0byA2NAorICogYml0cy4KKyAqCisgKiBD b3B5cmlnaHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisgKiBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X3JlYWRfdjE4LmMKKyAqLworCisj aW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKworI2luY2x1ZGUgIm11bHRpeGFjdF9yZWFkX3Yx OC5oIgorI2luY2x1ZGUgInBnX3VwZ3JhZGUuaCIKKworLyoKKyAqIE5PVEU6IGJlbG93IGFy ZSBhIGJ1bmNoIG9mIGRlZmluaXRpb25zIHRoYXQgYXJlIGNvcHktcGFzdGVkIGZyb20KKyAq IG11bHRpeGFjdC5jIGZyb20gdmVyc2lvbiAxOC4gIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhp cyBmaWxlIGRvZXNuJ3QKKyAqICNpbmNsdWRlIHRoZSBuZXcgZGVmaW5pdGlvbnMgd2l0aCBz YW1lIG5hbWVzIGZyb20gIm11bHRpeGFjdF9pbnRlcm5hbC5oIiEKKyAqCisgKiBUbyBhdm9p ZCBjb25mdXNpb24gaW4gdGhlIGZ1bmN0aW9ucyBleHBvc2VkIG91dHNpZGUgdGhpcyBzb3Vy Y2UgZmlsZSwKKyAqIHRob3VnaCwgd2UgdXNlIE9sZE11bHRpWGFjdE9mZnNldCB0byByZXBy ZXNlbnQgdGhlIG9sZC1zdHlsZSAzMi1iaXQKKyAqIG11bHRpeGlkIG9mZnNldHMuIFRoZSBu ZXcgNjQtYml0IE11bHRpWGFjdE9mZnNldCBzaG91bGQgbm90IGJlIHVzZWQKKyAqIGFueXdo ZXJlIGluIHRoaXMgZmlsZS4KKyAqLworI2RlZmluZSBNdWx0aVhhY3RPZmZzZXQgc2hvdWxk X25vdF9iZV91c2VkCisKKy8qIFdlIG5lZWQgZm91ciBieXRlcyBwZXIgb2Zmc2V0IGFuZCA4 IGJ5dGVzIHBlciBiYXNlIGZvciBlYWNoIHBhZ2UuICovCisjZGVmaW5lIE1VTFRJWEFDVF9P RkZTRVRTX1BFUl9QQUdFIChCTENLU1ogLyBzaXplb2YoT2xkTXVsdGlYYWN0T2Zmc2V0KSkK Kworc3RhdGljIGlubGluZSBpbnQ2NAorTXVsdGlYYWN0SWRUb09mZnNldFBhZ2UoTXVsdGlY YWN0SWQgbXVsdGkpCit7CisJcmV0dXJuIG11bHRpIC8gTVVMVElYQUNUX09GRlNFVFNfUEVS X1BBR0U7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitNdWx0aVhhY3RJZFRvT2Zmc2V0RW50 cnkoTXVsdGlYYWN0SWQgbXVsdGkpCit7CisJcmV0dXJuIG11bHRpICUgTVVMVElYQUNUX09G RlNFVFNfUEVSX1BBR0U7Cit9CisKKy8qCisgKiBUaGUgc2l0dWF0aW9uIGZvciBtZW1iZXJz IGlzIGEgYml0IG1vcmUgY29tcGxleDogd2Ugc3RvcmUgb25lIGJ5dGUgb2YKKyAqIGFkZGl0 aW9uYWwgZmxhZyBiaXRzIGZvciBlYWNoIFRyYW5zYWN0aW9uSWQuICBUbyBkbyB0aGlzIHdp dGhvdXQgZ2V0dGluZworICogaW50byBhbGlnbm1lbnQgaXNzdWVzLCB3ZSBzdG9yZSBmb3Vy IGJ5dGVzIG9mIGZsYWdzLCBhbmQgdGhlbiB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgNCBYaWRz LiAgRWFjaCBzdWNoIDUtd29yZCAoMjAtYnl0ZSkgc2V0IHdlIGNhbGwgYSAiZ3JvdXAiLCBh bmQKKyAqIGFyZSBzdG9yZWQgYXMgYSB3aG9sZSBpbiBwYWdlcy4gIFRodXMsIHdpdGggOGtC IEJMQ0tTWiwgd2Uga2VlcCA0MDkgZ3JvdXBzCisgKiBwZXIgcGFnZS4gIFRoaXMgd2FzdGVz IDEyIGJ5dGVzIHBlciBwYWdlLCBidXQgdGhhdCdzIE9LIC0tIHNpbXBsaWNpdHkgKGFuZAor ICogcGVyZm9ybWFuY2UpIHRydW1wcyBzcGFjZSBlZmZpY2llbmN5IGhlcmUuCisgKgorICog Tm90ZSB0aGF0IHRoZSAib2Zmc2V0IiBtYWNyb3Mgd29yayB3aXRoIGJ5dGUgb2Zmc2V0LCBu b3QgYXJyYXkgaW5kZXhlcywgc28KKyAqIGFyaXRobWV0aWMgbXVzdCBiZSBkb25lIHVzaW5n ICJjaGFyICoiIHBvaW50ZXJzLgorICovCisvKiBXZSBuZWVkIGVpZ2h0IGJpdHMgcGVyIHhh Y3QsIHNvIG9uZSB4YWN0IGZpdHMgaW4gYSBieXRlICovCisjZGVmaW5lIE1YQUNUX01FTUJF Ul9CSVRTX1BFUl9YQUNUCQkJOAorI2RlZmluZSBNWEFDVF9NRU1CRVJfRkxBR1NfUEVSX0JZ VEUJCQkxCisjZGVmaW5lIE1YQUNUX01FTUJFUl9YQUNUX0JJVE1BU0sJKCgxIDw8IE1YQUNU X01FTUJFUl9CSVRTX1BFUl9YQUNUKSAtIDEpCisKKy8qIGhvdyBtYW55IGZ1bGwgYnl0ZXMg b2YgZmxhZ3MgYXJlIHRoZXJlIGluIGEgZ3JvdXA/ICovCisjZGVmaW5lIE1VTFRJWEFDVF9G TEFHQllURVNfUEVSX0dST1VQCQk0CisjZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9N RU1CRVJHUk9VUAlcCisJKE1VTFRJWEFDVF9GTEFHQllURVNfUEVSX0dST1VQICogTVhBQ1Rf TUVNQkVSX0ZMQUdTX1BFUl9CWVRFKQorLyogc2l6ZSBpbiBieXRlcyBvZiBhIGNvbXBsZXRl IGdyb3VwICovCisjZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJHUk9VUF9TSVpFIFwKKwkoc2l6 ZW9mKFRyYW5zYWN0aW9uSWQpICogTVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQ ICsgTVVMVElYQUNUX0ZMQUdCWVRFU19QRVJfR1JPVVApCisjZGVmaW5lIE1VTFRJWEFDVF9N RU1CRVJHUk9VUFNfUEVSX1BBR0UgKEJMQ0tTWiAvIE1VTFRJWEFDVF9NRU1CRVJHUk9VUF9T SVpFKQorI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFHRQlcCisJKE1VTFRJWEFD VF9NRU1CRVJHUk9VUFNfUEVSX1BBR0UgKiBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVS R1JPVVApCisKKy8qIHBhZ2UgaW4gd2hpY2ggYSBtZW1iZXIgaXMgdG8gYmUgZm91bmQgKi8K K3N0YXRpYyBpbmxpbmUgaW50NjQKK01YT2Zmc2V0VG9NZW1iZXJQYWdlKE9sZE11bHRpWGFj dE9mZnNldCBvZmZzZXQpCit7CisJcmV0dXJuIG9mZnNldCAvIE1VTFRJWEFDVF9NRU1CRVJT X1BFUl9QQUdFOworfQorCisvKiBMb2NhdGlvbiAoYnl0ZSBvZmZzZXQgd2l0aGluIHBhZ2Up IG9mIGZsYWcgd29yZCBmb3IgYSBnaXZlbiBtZW1iZXIgKi8KK3N0YXRpYyBpbmxpbmUgaW50 CitNWE9mZnNldFRvRmxhZ3NPZmZzZXQoT2xkTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCkKK3sK KwlPbGRNdWx0aVhhY3RPZmZzZXQgZ3JvdXAgPSBvZmZzZXQgLyBNVUxUSVhBQ1RfTUVNQkVS U19QRVJfTUVNQkVSR1JPVVA7CisJaW50CQkJZ3JvdXBvbnBnID0gZ3JvdXAgJSBNVUxUSVhB Q1RfTUVNQkVSR1JPVVBTX1BFUl9QQUdFOworCWludAkJCWJ5dGVvZmYgPSBncm91cG9ucGcg KiBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBfU0laRTsKKworCXJldHVybiBieXRlb2ZmOworfQor CisvKiBMb2NhdGlvbiAoYnl0ZSBvZmZzZXQgd2l0aGluIHBhZ2UpIG9mIFRyYW5zYWN0aW9u SWQgb2YgZ2l2ZW4gbWVtYmVyICovCitzdGF0aWMgaW5saW5lIGludAorTVhPZmZzZXRUb01l bWJlck9mZnNldChPbGRNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQoreworCWludAkJCW1lbWJl cl9pbl9ncm91cCA9IG9mZnNldCAlIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9V UDsKKworCXJldHVybiBNWE9mZnNldFRvRmxhZ3NPZmZzZXQob2Zmc2V0KSArCisJCU1VTFRJ WEFDVF9GTEFHQllURVNfUEVSX0dST1VQICsKKwkJbWVtYmVyX2luX2dyb3VwICogc2l6ZW9m KFRyYW5zYWN0aW9uSWQpOworfQorCitzdGF0aWMgaW5saW5lIGludAorTVhPZmZzZXRUb0Zs YWdzQml0U2hpZnQoT2xkTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCkKK3sKKwlpbnQJCQltZW1i ZXJfaW5fZ3JvdXAgPSBvZmZzZXQgJSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVSR1JP VVA7CisJaW50CQkJYnNoaWZ0ID0gbWVtYmVyX2luX2dyb3VwICogTVhBQ1RfTUVNQkVSX0JJ VFNfUEVSX1hBQ1Q7CisKKwlyZXR1cm4gYnNoaWZ0OworfQorCisvKgorICogQ29uc3RydWN0 IHJlYWRlciBvZiBvbGQgbXVsdGl4YWN0cy4KKyAqCisgKiBSZXR1cm5zIHRoZSBtYWxsb2Nl ZCBtZW1vcnkgdXNlZCBieSB0aGUgYWxsIG90aGVyIGNhbGxzIGluIHRoaXMgbW9kdWxlLgor ICovCitPbGRNdWx0aVhhY3RSZWFkZXIgKgorQWxsb2NPbGRNdWx0aVhhY3RSZWFkKGNoYXIg KnBnZGF0YSwgTXVsdGlYYWN0SWQgbmV4dE11bHRpLAorCQkJCQkgIE9sZE11bHRpWGFjdE9m ZnNldCBuZXh0T2Zmc2V0KQoreworCU9sZE11bHRpWGFjdFJlYWRlciAqc3RhdGUgPSBzdGF0 ZSA9IHBnX21hbGxvYyhzaXplb2YoKnN0YXRlKSk7CisJY2hhcgkJZGlyW01BWFBHUEFUSF0g PSB7MH07CisKKwlzdGF0ZS0+bmV4dE1YYWN0ID0gbmV4dE11bHRpOworCXN0YXRlLT5uZXh0 T2Zmc2V0ID0gbmV4dE9mZnNldDsKKworCXBnX3NwcmludGYoZGlyLCAiJXMvcGdfbXVsdGl4 YWN0L29mZnNldHMiLCBwZ2RhdGEpOworCXN0YXRlLT5vZmZzZXQgPSBBbGxvY1NscnVSZWFk KGRpciwgZmFsc2UpOworCisJcGdfc3ByaW50ZihkaXIsICIlcy9wZ19tdWx0aXhhY3QvbWVt YmVycyIsIHBnZGF0YSk7CisJc3RhdGUtPm1lbWJlcnMgPSBBbGxvY1NscnVSZWFkKGRpciwg ZmFsc2UpOworCisJcmV0dXJuIHN0YXRlOworfQorCisvKgorICogVGhpcyBpcyBhIHNpbXBs aWZpZWQgdmVyc2lvbiBvZiB0aGUgR2V0TXVsdGlYYWN0SWRNZW1iZXJzKCkgc2VydmVyCisg KiBmdW5jdGlvbjoKKyAqCisgKiAtIE9ubHkgcmV0dXJuIHRoZSB1cGRhdGluZyBtZW1iZXIs IGlmIGFueS4gIFVwZ3JhZGUgb25seSBjYXJlcyBhYm91dCB0aGUKKyAqICAgdXBkYXRlcnMu ICBJZiB0aGVyZSBpcyBubyB1cGRhdGluZyBtZW1iZXIsIHJldHVybiBzb21ld2hhdCBhcmJp dHJhcmlseQorICogICB0aGUgZmlyc3QgbG9ja2luZy1vbmx5IG1lbWJlciwgYmVjYXVzZSB3 ZSBkb24ndCBoYXZlIGFueSB3YXkgdG8gcmVwcmVzZW50CisgKiAgICJubyBtZW1iZXJzIi4K KyAqCisgKiAtIEJlY2F1c2UgdGhlcmUncyBubyBjb25jdXJyZW50IGFjdGl2aXR5LCBXZSBk b24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0CisgKiAgIGxvY2tpbmcgYW5kIHNvbWUgY29ybmVy IGNhc2VzLgorICoKKyAqIC0gRG9uJ3QgYmFpbCBvdXQgb24gaW52YWxpZCBlbnRyaWVzLiAg SWYgdGhlIHNlcnZlciBjcmFzaGVzLCBpdCBjYW4gbGVhdmUKKyAqICAgaW52YWxpZCBvciBo YWxmLXdyaXR0ZW4gZW50cmllcyBvbiBkaXNrLiBTdWNoIG11bHRpeGlkcyB3b24ndCBhcHBl YXIKKyAqICAgYW55d2hlcmUgZWxzZSBvbiBkaXNrLCBzbyB0aGUgc2VydmVyIHdpbGwgbmV2 ZXIgdHJ5IHRvIHJlYWQgdGhlbS4gIER1cmluZworICogICB1cGdyYWRlLCBob3dldmVyLCB3 ZSBzY2FuIHRocm91Z2ggYWxsIG11bHRpeGlkcyBpbiBvcmRlciwgYW5kIHdpbGwKKyAqICAg ZW5jb3VudGVyIHN1Y2ggaW52YWxpZCBidXQgdW5yZWZlcmVuY2VkIG11bHRpeGlkcyB0b28u CisgKgorICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIGlmIHRoZSBtdWx0aXhh Y3Qgd2FzIGludmFsaWQuCisgKi8KK2Jvb2wKK0dldE9sZE11bHRpWGFjdElkU2luZ2xlTWVt YmVyKE9sZE11bHRpWGFjdFJlYWRlciAqc3RhdGUsIE11bHRpWGFjdElkIG11bHRpLAorCQkJ CQkJCSAgTXVsdGlYYWN0TWVtYmVyICptZW1iZXIpCit7CisJTXVsdGlYYWN0SWQgbmV4dE1Y YWN0LAorCQkJCW5leHRPZmZzZXQsCisJCQkJdG1wTVhhY3Q7CisJaW50NjQJCXBhZ2VubywK KwkJCQlwcmV2X3BhZ2VubzsKKwlpbnQJCQllbnRyeW5vLAorCQkJCWxlbmd0aDsKKwljaGFy CSAgICpidWY7CisJT2xkTXVsdGlYYWN0T2Zmc2V0ICpvZmZwdHIsCisJCQkJb2Zmc2V0Owor CU9sZE11bHRpWGFjdE9mZnNldCBuZXh0TVhPZmZzZXQ7CisJVHJhbnNhY3Rpb25JZCByZXN1 bHRfeGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJTXVsdGlYYWN0U3RhdHVzIHJlc3Vs dF9zdGF0dXMgPSAwOworCisJbmV4dE1YYWN0ID0gc3RhdGUtPm5leHRNWGFjdDsKKwluZXh0 T2Zmc2V0ID0gc3RhdGUtPm5leHRPZmZzZXQ7CisKKwkvKgorCSAqIENvbW1lbnQgY29waWVk IGZyb20gR2V0TXVsdGlYYWN0SWRNZW1iZXJzIGluIFBvc3RncmVTUUwgdjE4CisJICogbXVs dGl4YWN0LmM6CisJICoKKwkgKiBGaW5kIG91dCB0aGUgb2Zmc2V0IGF0IHdoaWNoIHdlIG5l ZWQgdG8gc3RhcnQgcmVhZGluZyBNdWx0aVhhY3RNZW1iZXJzCisJICogYW5kIHRoZSBudW1i ZXIgb2YgbWVtYmVycyBpbiB0aGUgbXVsdGl4YWN0LiAgV2UgZGV0ZXJtaW5lIHRoZSBsYXR0 ZXIgYXMKKwkgKiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgbXVsdGl4YWN0J3Mgc3Rh cnRpbmcgb2Zmc2V0IGFuZCB0aGUgbmV4dAorCSAqIG9uZSdzLiAgSG93ZXZlciwgdGhlcmUg YXJlIHNvbWUgY29ybmVyIGNhc2VzIHRvIHdvcnJ5IGFib3V0OgorCSAqCisJICogMS4gVGhp cyBtdWx0aXhhY3QgbWF5IGJlIHRoZSBsYXRlc3Qgb25lIGNyZWF0ZWQsIGluIHdoaWNoIGNh c2UgdGhlcmUgaXMKKwkgKiBubyBuZXh0IG9uZSB0byBsb29rIGF0LiAgVGhlIG5leHQgbXVs dGl4YWN0J3Mgb2Zmc2V0IHNob3VsZCBiZSBzZXQKKwkgKiBhbHJlYWR5LCBhcyB3ZSBzZXQg aXQgaW4gUmVjb3JkTmV3TXVsdGlYYWN0KCksIGJ1dCB3ZSB1c2VkIHRvIG5vdCBkbworCSAq IHRoYXQgaW4gb2xkZXIgbWlub3IgdmVyc2lvbnMuICBUbyBjb3BlIHdpdGggdGhhdCBjYXNl LCBpZiB0aGlzCisJICogbXVsdGl4YWN0IGlzIHRoZSBsYXRlc3Qgb25lIGNyZWF0ZWQsIHVz ZSB0aGUgbmV4dE9mZnNldCB2YWx1ZSB3ZSByZWFkCisJICogYWJvdmUgYXMgdGhlIGVuZHBv aW50LgorCSAqCisJICogMi4gQmVjYXVzZSBHZXROZXdNdWx0aVhhY3RJZCBza2lwcyBvdmVy IG9mZnNldCB6ZXJvLCB0byByZXNlcnZlIHplcm8KKwkgKiBmb3IgdG8gbWVhbiAidW5zZXQi LCB0aGVyZSBpcyBhbiBhbWJpZ3VpdHkgbmVhciB0aGUgcG9pbnQgb2Ygb2Zmc2V0CisJICog d3JhcGFyb3VuZC4gIElmIHdlIHNlZSBuZXh0IG11bHRpeGFjdCdzIG9mZnNldCBpcyBvbmUs IGlzIHRoYXQgb3VyCisJICogbXVsdGl4YWN0J3MgYWN0dWFsIGVuZHBvaW50LCBvciBkaWQg aXQgZW5kIGF0IHplcm8gd2l0aCBhIHN1YnNlcXVlbnQKKwkgKiBpbmNyZW1lbnQ/ICBXZSBo YW5kbGUgdGhpcyB1c2luZyB0aGUga25vd2xlZGdlIHRoYXQgaWYgdGhlIHplcm8ndGgKKwkg KiBtZW1iZXIgc2xvdCB3YXNuJ3QgZmlsbGVkLCBpdCdsbCBjb250YWluIHplcm8sIGFuZCB6 ZXJvIGlzbid0IGEgdmFsaWQKKwkgKiB0cmFuc2FjdGlvbiBJRCBzbyBpdCBjYW4ndCBiZSBh IG11bHRpeGFjdCBtZW1iZXIuICBUaGVyZWZvcmUsIGlmIHdlCisJICogcmVhZCBhIHplcm8g ZnJvbSB0aGUgbWVtYmVycyBhcnJheSwganVzdCBpZ25vcmUgaXQuCisJICovCisKKwlwYWdl bm8gPSBNdWx0aVhhY3RJZFRvT2Zmc2V0UGFnZShtdWx0aSk7CisJZW50cnlubyA9IE11bHRp WGFjdElkVG9PZmZzZXRFbnRyeShtdWx0aSk7CisKKwlidWYgPSBTbHJ1UmVhZFN3aXRjaFBh Z2Uoc3RhdGUtPm9mZnNldCwgcGFnZW5vKTsKKwlvZmZwdHIgPSAoT2xkTXVsdGlYYWN0T2Zm c2V0ICopIGJ1ZjsKKwlvZmZwdHIgKz0gZW50cnlubzsKKwlvZmZzZXQgPSAqb2ZmcHRyOwor CisJaWYgKG9mZnNldCA9PSAwKQorCXsKKwkJLyogSW52YWxpZCBlbnRyeSAqLworCQlyZXR1 cm4gZmFsc2U7CisJfQorCisJLyoKKwkgKiBVc2UgdGhlIHNhbWUgaW5jcmVtZW50IHJ1bGUg YXMgR2V0TmV3TXVsdGlYYWN0SWQoKSwgdGhhdCBpcywgZG9uJ3QKKwkgKiBoYW5kbGUgd3Jh cGFyb3VuZCBleHBsaWNpdGx5IHVudGlsIG5lZWRlZC4KKwkgKi8KKwl0bXBNWGFjdCA9IG11 bHRpICsgMTsKKworCWlmIChuZXh0TVhhY3QgPT0gdG1wTVhhY3QpCisJeworCQkvKiBDb3Ju ZXIgY2FzZSAxOiB0aGVyZSBpcyBubyBuZXh0IG11bHRpeGFjdCAqLworCQluZXh0TVhPZmZz ZXQgPSBuZXh0T2Zmc2V0OworCX0KKwllbHNlCisJeworCQkvKiBoYW5kbGUgd3JhcGFyb3Vu ZCBpZiBuZWVkZWQgKi8KKwkJaWYgKHRtcE1YYWN0IDwgRmlyc3RNdWx0aVhhY3RJZCkKKwkJ CXRtcE1YYWN0ID0gRmlyc3RNdWx0aVhhY3RJZDsKKworCQlwcmV2X3BhZ2VubyA9IHBhZ2Vu bzsKKworCQlwYWdlbm8gPSBNdWx0aVhhY3RJZFRvT2Zmc2V0UGFnZSh0bXBNWGFjdCk7CisJ CWVudHJ5bm8gPSBNdWx0aVhhY3RJZFRvT2Zmc2V0RW50cnkodG1wTVhhY3QpOworCisJCWlm IChwYWdlbm8gIT0gcHJldl9wYWdlbm8pCisJCQlidWYgPSBTbHJ1UmVhZFN3aXRjaFBhZ2Uo c3RhdGUtPm9mZnNldCwgcGFnZW5vKTsKKworCQlvZmZwdHIgPSAoT2xkTXVsdGlYYWN0T2Zm c2V0ICopIGJ1ZjsKKwkJb2ZmcHRyICs9IGVudHJ5bm87CisJCW5leHRNWE9mZnNldCA9ICpv ZmZwdHI7CisJfQorCisJaWYgKG5leHRNWE9mZnNldCA9PSAwKQorCXsKKwkJLyogSW52YWxp ZCBlbnRyeSAqLworCQlyZXR1cm4gZmFsc2U7CisJfQorCWxlbmd0aCA9IG5leHRNWE9mZnNl dCAtIG9mZnNldDsKKworCS8qIHJlYWQgdGhlIG1lbWJlcnMgKi8KKwlwcmV2X3BhZ2VubyA9 IC0xOworCWZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyssIG9mZnNldCsrKQorCXsK KwkJVHJhbnNhY3Rpb25JZCAqeGFjdHB0cjsKKwkJdWludDMyCSAgICpmbGFnc3B0cjsKKwkJ aW50CQkJZmxhZ3NvZmY7CisJCWludAkJCWJzaGlmdDsKKwkJaW50CQkJbWVtYmVyb2ZmOwor CQlNdWx0aVhhY3RTdGF0dXMgc3RhdHVzOworCisJCXBhZ2VubyA9IE1YT2Zmc2V0VG9NZW1i ZXJQYWdlKG9mZnNldCk7CisJCW1lbWJlcm9mZiA9IE1YT2Zmc2V0VG9NZW1iZXJPZmZzZXQo b2Zmc2V0KTsKKworCQlpZiAocGFnZW5vICE9IHByZXZfcGFnZW5vKQorCQl7CisJCQlidWYg PSBTbHJ1UmVhZFN3aXRjaFBhZ2Uoc3RhdGUtPm1lbWJlcnMsIHBhZ2Vubyk7CisJCQlwcmV2 X3BhZ2VubyA9IHBhZ2VubzsKKwkJfQorCisJCXhhY3RwdHIgPSAoVHJhbnNhY3Rpb25JZCAq KSAoYnVmICsgbWVtYmVyb2ZmKTsKKwkJaWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZCgqeGFj dHB0cikpCisJCXsKKwkJCS8qCisJCQkgKiBDb3JuZXIgY2FzZSAyOiB3ZSBhcmUgbG9va2lu ZyBhdCB1bnVzZWQgc2xvdCB6ZXJvCisJCQkgKi8KKwkJCWlmIChvZmZzZXQgPT0gMCkKKwkJ CQljb250aW51ZTsKKworCQkJLyoKKwkJCSAqIE90aGVyd2lzZSB0aGlzIGlzIGFuIGludmFs aWQgZW50cnkgdGhhdCBzaG91bGQgbm90IGJlCisJCQkgKiByZWZlcmVuY2VkIGZyb20gYW55 d2hlcmUgaW4gdGhlIGhlYXAuICBXZSBjb3VsZCByZXR1cm4gJ2ZhbHNlJworCQkJICogaGVy ZSwgYnV0IHdlIHByZWZlciB0byBjb250aW51ZSByZWFkaW5nIHRoZSBtZW1iZXJzIGFuZAor CQkJICogY29udmVydGluZyB0aGVtIHRoZSBiZXN0IHdlIGNhbiwgdG8gcHJlc2VydmUgZXZp ZGVuY2UgaW4gY2FzZQorCQkJICogdGhpcyBpcyBjb3JydXB0aW9uIHRoYXQgc2hvdWxkIG5v dCBoYXBwZW4uCisJCQkgKi8KKwkJfQorCisJCWZsYWdzb2ZmID0gTVhPZmZzZXRUb0ZsYWdz T2Zmc2V0KG9mZnNldCk7CisJCWJzaGlmdCA9IE1YT2Zmc2V0VG9GbGFnc0JpdFNoaWZ0KG9m ZnNldCk7CisJCWZsYWdzcHRyID0gKHVpbnQzMiAqKSAoYnVmICsgZmxhZ3NvZmYpOworCisJ CXN0YXR1cyA9ICgqZmxhZ3NwdHIgPj4gYnNoaWZ0KSAmIE1YQUNUX01FTUJFUl9YQUNUX0JJ VE1BU0s7CisKKwkJLyoKKwkJICogUmVtZW1iZXIgdGhlIHVwZGF0aW5nIFhJRCBhbW9uZyB0 aGUgbWVtYmVycywgb3IgZmlyc3QgbG9ja2luZyBYSUQKKwkJICogaWYgbm8gdXBkYXRpbmcg WElELgorCQkgKi8KKwkJaWYgKElTVVBEQVRFX2Zyb21fbXhzdGF0dXMoc3RhdHVzKSkKKwkJ eworCQkJLyogc2FuaXR5IGNoZWNrICovCisJCQlpZiAoSVNVUERBVEVfZnJvbV9teHN0YXR1 cyhyZXN1bHRfc3RhdHVzKSkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFdlIGRvbid0IGV4cGVj dCB0byBzZWUgbW9yZSB0aGFuIG9uZSB1cGRhdGluZyBtZW1iZXIsIGV2ZW4KKwkJCQkgKiBp ZiB0aGUgc2VydmVyIGhhZCBjcmFzaGVkLgorCQkJCSAqLworCQkJCXBnX2ZhdGFsKCJtdWx0 aXhhY3QgJXUgaGFzIG1vcmUgdGhhbiBvbmUgdXBkYXRpbmcgbWVtYmVyIiwKKwkJCQkJCSBt dWx0aSk7CisJCQl9CisJCQlyZXN1bHRfeGlkID0gKnhhY3RwdHI7CisJCQlyZXN1bHRfc3Rh dHVzID0gc3RhdHVzOworCQl9CisJCWVsc2UgaWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZChy ZXN1bHRfeGlkKSkKKwkJeworCQkJcmVzdWx0X3hpZCA9ICp4YWN0cHRyOworCQkJcmVzdWx0 X3N0YXR1cyA9IHN0YXR1czsKKwkJfQorCX0KKworCW1lbWJlci0+eGlkID0gcmVzdWx0X3hp ZDsKKwltZW1iZXItPnN0YXR1cyA9IHJlc3VsdF9zdGF0dXM7CisJcmV0dXJuIHRydWU7Cit9 CisKKy8qCisgKiBGcmVlcyB0aGUgbWFsbG9jZWQgcmVhZGVyLgorICovCit2b2lkCitGcmVl T2xkTXVsdGlYYWN0UmVhZGVyKE9sZE11bHRpWGFjdFJlYWRlciAqc3RhdGUpCit7CisJRnJl ZVNscnVSZWFkKHN0YXRlLT5vZmZzZXQpOworCUZyZWVTbHJ1UmVhZChzdGF0ZS0+bWVtYmVy cyk7CisKKwlwZnJlZShzdGF0ZSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3VwZ3Jh ZGUvbXVsdGl4YWN0X3JlYWRfdjE4LmggYi9zcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0 X3JlYWRfdjE4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjhl ZTgyYTE0YTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ191cGdyYWRlL211bHRp eGFjdF9yZWFkX3YxOC5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBtdWx0aXhhY3RfcmVh ZF92MTguaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKyAqIHNyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3RfcmVh ZF92MTguaAorICovCisjaWZuZGVmIE1VTFRJWEFDVF9SRUFEX1YxOF9ICisjZGVmaW5lIE1V TFRJWEFDVF9SRUFEX1YxOF9ICisKKyNpbmNsdWRlICJhY2Nlc3MvbXVsdGl4YWN0LmgiCisj aW5jbHVkZSAic2xydV9pby5oIgorCisvKgorICogTXVsdGlYYWN0T2Zmc2V0IGNoYW5nZWQg ZnJvbSB1aW50MzIgdG8gdWludDY0IGJldHdlZW4gdmVyc2lvbnMgMTggYW5kIDE5LgorICog T2xkTXVsdGlYYWN0T2Zmc2V0IGlzIHVzZWQgdG8gcmVwcmVzZW50IGEgMzItYml0IG9mZnNl dCBmcm9tIHRoZSBvbGQKKyAqIGNsdXN0ZXIuCisgKi8KK3R5cGVkZWYgdWludDMyIE9sZE11 bHRpWGFjdE9mZnNldDsKKwordHlwZWRlZiBzdHJ1Y3QgT2xkTXVsdGlYYWN0UmVhZGVyCit7 CisJTXVsdGlYYWN0SWQgbmV4dE1YYWN0OworCU9sZE11bHRpWGFjdE9mZnNldCBuZXh0T2Zm c2V0OworCisJU2xydVNlZ1N0YXRlICpvZmZzZXQ7CisJU2xydVNlZ1N0YXRlICptZW1iZXJz OworfSBPbGRNdWx0aVhhY3RSZWFkZXI7CisKK2V4dGVybiBPbGRNdWx0aVhhY3RSZWFkZXIg KkFsbG9jT2xkTXVsdGlYYWN0UmVhZChjaGFyICpwZ2RhdGEsCisJCQkJCQkJCQkJCQkgTXVs dGlYYWN0SWQgbmV4dE11bHRpLAorCQkJCQkJCQkJCQkJIE9sZE11bHRpWGFjdE9mZnNldCBu ZXh0T2Zmc2V0KTsKK2V4dGVybiBib29sIEdldE9sZE11bHRpWGFjdElkU2luZ2xlTWVtYmVy KE9sZE11bHRpWGFjdFJlYWRlciAqc3RhdGUsCisJCQkJCQkJCQkJICBNdWx0aVhhY3RJZCBt dWx0aSwKKwkJCQkJCQkJCQkgIE11bHRpWGFjdE1lbWJlciAqbWVtYmVyKTsKK2V4dGVybiB2 b2lkIEZyZWVPbGRNdWx0aVhhY3RSZWFkZXIoT2xkTXVsdGlYYWN0UmVhZGVyICpyZWFkZXIp OworCisjZW5kaWYJCQkJCQkJLyogTVVMVElYQUNUX1JFQURfVjE4X0ggKi8KZGlmZiAtLWdp dCBhL3NyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3RfcmV3cml0ZS5jIGIvc3JjL2Jpbi9w Z191cGdyYWRlL211bHRpeGFjdF9yZXdyaXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLmQ0ODNiMmZmMzFmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jp bi9wZ191cGdyYWRlL211bHRpeGFjdF9yZXdyaXRlLmMKQEAgLTAsMCArMSwxOTUgQEAKKy8q CisgKiBtdWx0aXhhY3RfcmV3cml0ZS5jCisgKgorICogRnVuY3Rpb25zIHRvIGNvbnZlcnQg bXVsdGl4YWN0IFNMUlVzIGZyb20gdGhlIHByZS12MTkgZm9ybWF0IHRvIHRoZSBjdXJyZW50 CisgKiBmb3JtYXQgd2l0aCA2NC1iaXQgTXVsdGlYYWN0T2Zmc2V0cy4KKyAqCisgKiBDb3B5 cmlnaHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KiBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X3Jld3JpdGUuYworICovCisKKyNpbmNs dWRlICJwb3N0Z3Jlc19mZS5oIgorCisjaW5jbHVkZSAiYWNjZXNzL211bHRpeGFjdF9pbnRl cm5hbC5oIgorI2luY2x1ZGUgIm11bHRpeGFjdF9yZWFkX3YxOC5oIgorI2luY2x1ZGUgInBn X3VwZ3JhZGUuaCIKKworc3RhdGljIHZvaWQgUmVjb3JkTXVsdGlYYWN0T2Zmc2V0KFNscnVT ZWdTdGF0ZSAqb2Zmc2V0c193cml0ZXIsIE11bHRpWGFjdElkIG11bHRpLAorCQkJCQkJCQkg IE11bHRpWGFjdE9mZnNldCBvZmZzZXQpOworc3RhdGljIHZvaWQgUmVjb3JkTXVsdGlYYWN0 TWVtYmVycyhTbHJ1U2VnU3RhdGUgKm1lbWJlcnNfd3JpdGVyLAorCQkJCQkJCQkgICBNdWx0 aVhhY3RPZmZzZXQgb2Zmc2V0LAorCQkJCQkJCQkgICBpbnQgbm1lbWJlcnMsIE11bHRpWGFj dE1lbWJlciAqbWVtYmVycyk7CisKKy8qCisgKiBDb252ZXJ0IHBnX211bHRpeGFjdC9vZmZz ZXQgYW5kIC9tZW1iZXJzIGZyb20gdGhlIG9sZCBwcmUtdjE5IGZvcm1hdCB3aXRoCisgKiAz Mi1iaXQgb2Zmc2V0cyB0byB0aGUgY3VycmVudCBmb3JtYXQuCisgKgorICogTXVsdGl4aWRz IGluIHRoZSByYW5nZSBbZnJvbV9tdWx0aSwgdG9fbXVsdGkpIGFyZSByZWFkIGZyb20gdGhl IG9sZAorICogY2x1c3RlciwgYW5kIHdyaXR0ZW4gaW4gdGhlIG5ldyBmb3JtYXQuICBBbiBp bXBvcnRhbnQgZWRnZSBjYXNlIGlzIHRoYXQgaWYKKyAqIGZyb21fbXVsdGkgPT0gdG9fbXVs dGksIHRoaXMgaW5pdGlhbGl6ZXMgdGhlIG5ldyBwZ19tdWx0aXhhY3QgZmlsZXMgaW4gdGhl CisgKiBuZXcgZm9ybWF0IHdpdGhvdXQgdHJ5aW5nIHRvIG9wZW4gYW55IG9sZCBmaWxlcy4g IChXZSByZWx5IG9uIHRoYXQgd2hlbgorICogdXBncmFkaW5nIGZyb20gUG9zdGdyZVNRTCB2 ZXJzaW9uIDkuMiBvciBiZWxvdy4pCisgKgorICogUmV0dXJucyB0aGUgbmV3IG5leHRPZmZz ZXQgdmFsdWU7IHRoZSBjYWxsZXIgc2hvdWxkIHNldCBpdCBpbiB0aGUgbmV3CisgKiBjb250 cm9sIGZpbGUuICBUaGUgbmV3IG1lbWJlcnMgYWx3YXlzIHN0YXJ0IGZyb20gb2Zmc2V0IDEs IHJlZ2FyZGxlc3Mgb2YKKyAqIHRoZSBvZmZzZXQgcmFuZ2UgdXNlZCBpbiB0aGUgb2xkIGNs dXN0ZXIuCisgKi8KK011bHRpWGFjdE9mZnNldAorcmV3cml0ZV9tdWx0aXhhY3RzKE11bHRp WGFjdElkIGZyb21fbXVsdGksIE11bHRpWGFjdElkIHRvX211bHRpKQoreworCU11bHRpWGFj dElkIG9sZGVzdF9tdWx0aSwKKwkJCQluZXh0X211bHRpOworCU11bHRpWGFjdE9mZnNldCBu ZXh0X29mZnNldDsKKwlTbHJ1U2VnU3RhdGUgKm9mZnNldHNfd3JpdGVyOworCVNscnVTZWdT dGF0ZSAqbWVtYmVyc193cml0ZXI7CisJY2hhcgkJZGlyW01BWFBHUEFUSF0gPSB7MH07CisJ Ym9vbAkJcHJldl9tdWx0aXhpZF92YWxpZCA9IGZhbHNlOworCisJLyoKKwkgKiBUaGUgcmFu Z2Ugb2YgdmFsaWQgbXVsdGkgWElEcyBpcyB1bmNoYW5nZWQgYnkgdGhlIGNvbnZlcnNpb24g KHRoZXkgYXJlCisJICogcmVmZXJlbmNlZCBmcm9tIHRoZSBoZWFwIHRhYmxlcyksIGJ1dCB0 aGUgbWVtYmVycyBTTFJVIGlzIHJld3JpdHRlbiB0bworCSAqIHN0YXJ0IGZyb20gb2Zmc2V0 IDEuCisJICovCisJb2xkZXN0X211bHRpID0gZnJvbV9tdWx0aTsKKwluZXh0X211bHRpID0g dG9fbXVsdGk7CisJbmV4dF9vZmZzZXQgPSAxOworCisJLyogUHJlcGFyZSB0byB3cml0ZSB0 aGUgbmV3IFNMUlUgZmlsZXMgKi8KKwlwZ19zcHJpbnRmKGRpciwgIiVzL3BnX211bHRpeGFj dC9vZmZzZXRzIiwgbmV3X2NsdXN0ZXIucGdkYXRhKTsKKwlvZmZzZXRzX3dyaXRlciA9IEFs bG9jU2xydVdyaXRlKGRpciwgZmFsc2UpOworCVNscnVXcml0ZVN3aXRjaFBhZ2Uob2Zmc2V0 c193cml0ZXIsIE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKGZyb21fbXVsdGkpKTsKKworCXBn X3NwcmludGYoZGlyLCAiJXMvcGdfbXVsdGl4YWN0L21lbWJlcnMiLCBuZXdfY2x1c3Rlci5w Z2RhdGEpOworCW1lbWJlcnNfd3JpdGVyID0gQWxsb2NTbHJ1V3JpdGUoZGlyLCB0cnVlIC8q IHVzZSBsb25nIHNlZ21lbnQgbmFtZXMgKi8gKTsKKwlTbHJ1V3JpdGVTd2l0Y2hQYWdlKG1l bWJlcnNfd3JpdGVyLCBNWE9mZnNldFRvTWVtYmVyUGFnZShuZXh0X29mZnNldCkpOworCisJ LyoKKwkgKiBDb252ZXJ0IG9sZCBtdWx0aXhpZHMsIGlmIG5lZWRlZCwgYnkgcmVhZGluZyB0 aGVtIG9uZS1ieS1vbmUgZnJvbSB0aGUKKwkgKiBvbGQgY2x1c3Rlci4KKwkgKi8KKwlpZiAo dG9fbXVsdGkgIT0gZnJvbV9tdWx0aSkKKwl7CisJCU9sZE11bHRpWGFjdFJlYWRlciAqb2xk X3JlYWRlcjsKKworCQlvbGRfcmVhZGVyID0gQWxsb2NPbGRNdWx0aVhhY3RSZWFkKG9sZF9j bHVzdGVyLnBnZGF0YSwKKwkJCQkJCQkJCQkgICBvbGRfY2x1c3Rlci5jb250cm9sZGF0YS5j aGtwbnRfbnh0bXVsdGksCisJCQkJCQkJCQkJICAgb2xkX2NsdXN0ZXIuY29udHJvbGRhdGEu Y2hrcG50X254dG14b2ZmKTsKKworCQlmb3IgKE11bHRpWGFjdElkIG11bHRpID0gb2xkZXN0 X211bHRpOyBtdWx0aSAhPSBuZXh0X211bHRpOykKKwkJeworCQkJTXVsdGlYYWN0TWVtYmVy IG1lbWJlcjsKKwkJCWJvb2wJCW11bHRpeGlkX3ZhbGlkOworCisJCQkvKgorCQkJICogUmVh ZCB0aGlzIG11bHRpeGlkJ3MgbWVtYmVycy4KKwkJCSAqCisJCQkgKiBMb2NraW5nLW9ubHkg WElEcyB0aGF0IG1heSBiZSBwYXJ0IG9mIG11bHRpLXhpZHMgZG9uJ3QgbWF0dGVyCisJCQkg KiBhZnRlciB1cGdyYWRlLCBhcyB0aGVyZSBjYW4gYmUgbm8gdHJhbnNhY3Rpb25zIHJ1bm5p bmcgYWNyb3NzCisJCQkgKiB1cGdyYWRlLiAgU28gYXMgYSBzbWFsbCBvcHRpbWl6YXRpb24s IHdlIG9ubHkgcmVhZCBvbmUgbWVtYmVyCisJCQkgKiBmcm9tIGVhY2ggbXVsdGl4aWQ6IHRo ZSBvbmUgdXBkYXRpbmcgb25lLCBvciBpZiB0aGVyZSB3YXMgbm8KKwkJCSAqIHVwZGF0ZSwg YXJiaXRyYXJpbHkgdGhlIGZpcnN0IGxvY2tpbmcgeGlkLgorCQkJICovCisJCQltdWx0aXhp ZF92YWxpZCA9IEdldE9sZE11bHRpWGFjdElkU2luZ2xlTWVtYmVyKG9sZF9yZWFkZXIsIG11 bHRpLCAmbWVtYmVyKTsKKworCQkJLyoKKwkJCSAqIFdyaXRlIHRoZSBuZXcgb2Zmc2V0IHRv IHBnX211bHRpeGFjdC9vZmZzZXRzLgorCQkJICoKKwkJCSAqIElmIHRoZSBvbGQgbXVsdGl4 aWQgd2FzIGludmFsaWQsIHdlIHN0aWxsIG5lZWQgdG8gd3JpdGUgdGhpcworCQkJICogb2Zm c2V0IGlmIHRoZSAqcHJldmlvdXMqIG11bHRpeGlkIHdhcyB2YWxpZC4gIFRoYXQncyBiZWNh dXNlCisJCQkgKiB0aGUgd2hlbiByZWFkaW5nIGEgbXVsdGl4aWRzLCB0aGUgbnVtYmVyIG9m IG1lbWJlcnMgaXMKKwkJCSAqIGNhbGN1bGF0ZWQgZnJvbSB0aGUgZGlmZmVyZW5jZSBiZXR3 ZWVuIHRoZSBjdXJyZW50IGFuZCB0aGUgbmV4dAorCQkJICogbXVsdGl4aWQncyBvZmZzZXRz LgorCQkJICovCisJCQlSZWNvcmRNdWx0aVhhY3RPZmZzZXQob2Zmc2V0c193cml0ZXIsIG11 bHRpLAorCQkJCQkJCQkgIChtdWx0aXhpZF92YWxpZCB8fCBwcmV2X211bHRpeGlkX3ZhbGlk KSA/IG5leHRfb2Zmc2V0IDogMCk7CisKKwkJCWlmIChtdWx0aXhpZF92YWxpZCkKKwkJCXsK KwkJCQlSZWNvcmRNdWx0aVhhY3RNZW1iZXJzKG1lbWJlcnNfd3JpdGVyLCBuZXh0X29mZnNl dCwgMSwgJm1lbWJlcik7CisJCQkJbmV4dF9vZmZzZXQgKz0gMTsKKwkJCX0KKworCQkJLyog QWR2YW5jZSB0byBuZXh0IG11bHRpeGlkLCBoYW5kbGluZyB3cmFwYXJvdW5kICovCisJCQlt dWx0aSsrOworCQkJaWYgKG11bHRpIDwgRmlyc3RNdWx0aVhhY3RJZCkKKwkJCQltdWx0aSA9 IEZpcnN0TXVsdGlYYWN0SWQ7CisJCQlwcmV2X211bHRpeGlkX3ZhbGlkID0gbXVsdGl4aWRf dmFsaWQ7CisJCX0KKworCQlGcmVlT2xkTXVsdGlYYWN0UmVhZGVyKG9sZF9yZWFkZXIpOwor CX0KKworCS8qIHdyaXRlIHRoZSBmaW5hbCAnbmV4dCcgb2Zmc2V0IHRvIHRoZSBsYXN0IFNM UlUgcGFnZSAqLworCVJlY29yZE11bHRpWGFjdE9mZnNldChvZmZzZXRzX3dyaXRlciwgbmV4 dF9tdWx0aSwKKwkJCQkJCSAgcHJldl9tdWx0aXhpZF92YWxpZCA/IG5leHRfb2Zmc2V0IDog MCk7CisKKwkvKiBSZWxlYXNlIHJlc291cmNlcyAqLworCUZyZWVTbHJ1V3JpdGUob2Zmc2V0 c193cml0ZXIpOworCUZyZWVTbHJ1V3JpdGUobWVtYmVyc193cml0ZXIpOworCisJcmV0dXJu IG5leHRfb2Zmc2V0OworfQorCisKKy8qCisgKiBXcml0ZSBvbmUgb2Zmc2V0IHRvIHRoZSBv ZmZzZXQgU0xSVQorICovCitzdGF0aWMgdm9pZAorUmVjb3JkTXVsdGlYYWN0T2Zmc2V0KFNs cnVTZWdTdGF0ZSAqb2Zmc2V0c193cml0ZXIsIE11bHRpWGFjdElkIG11bHRpLAorCQkJCQkg IE11bHRpWGFjdE9mZnNldCBvZmZzZXQpCit7CisJaW50NjQJCXBhZ2VubzsKKwlpbnQJCQll bnRyeW5vOworCWNoYXIJICAgKmJ1ZjsKKwlNdWx0aVhhY3RPZmZzZXQgKm9mZnB0cjsKKwor CXBhZ2VubyA9IE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKG11bHRpKTsKKwllbnRyeW5vID0g TXVsdGlYYWN0SWRUb09mZnNldEVudHJ5KG11bHRpKTsKKworCWJ1ZiA9IFNscnVXcml0ZVN3 aXRjaFBhZ2Uob2Zmc2V0c193cml0ZXIsIHBhZ2Vubyk7CisJb2ZmcHRyID0gKE11bHRpWGFj dE9mZnNldCAqKSBidWY7CisJb2ZmcHRyW2VudHJ5bm9dID0gb2Zmc2V0OworfQorCisvKgor ICogV3JpdGUgdGhlIG1lbWJlcnMgZm9yIG9uZSBtdWx0aXhpZCBpbiB0aGUgbWVtYmVycyBT TFJVCisgKgorICogKEN1cnJlbnRseSwgdGhpcyBpcyBvbmx5IGV2ZXIgY2FsbGVkIHdpdGgg bm1lbWJlcnMgPT0gMSkKKyAqLworc3RhdGljIHZvaWQKK1JlY29yZE11bHRpWGFjdE1lbWJl cnMoU2xydVNlZ1N0YXRlICptZW1iZXJzX3dyaXRlciwKKwkJCQkJICAgTXVsdGlYYWN0T2Zm c2V0IG9mZnNldCwKKwkJCQkJICAgaW50IG5tZW1iZXJzLCBNdWx0aVhhY3RNZW1iZXIgKm1l bWJlcnMpCit7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBubWVtYmVyczsgaSsrLCBvZmZzZXQr KykKKwl7CisJCWludDY0CQlwYWdlbm87CisJCWNoYXIJICAgKmJ1ZjsKKwkJVHJhbnNhY3Rp b25JZCAqbWVtYmVycHRyOworCQl1aW50MzIJICAgKmZsYWdzcHRyOworCQl1aW50MzIJCWZs YWdzdmFsOworCQlpbnQJCQlic2hpZnQ7CisJCWludAkJCWZsYWdzb2ZmOworCQlpbnQJCQlt ZW1iZXJvZmY7CisKKwkJQXNzZXJ0KG1lbWJlcnNbaV0uc3RhdHVzIDw9IE11bHRpWGFjdFN0 YXR1c1VwZGF0ZSk7CisKKwkJcGFnZW5vID0gTVhPZmZzZXRUb01lbWJlclBhZ2Uob2Zmc2V0 KTsKKwkJbWVtYmVyb2ZmID0gTVhPZmZzZXRUb01lbWJlck9mZnNldChvZmZzZXQpOworCQlm bGFnc29mZiA9IE1YT2Zmc2V0VG9GbGFnc09mZnNldChvZmZzZXQpOworCQlic2hpZnQgPSBN WE9mZnNldFRvRmxhZ3NCaXRTaGlmdChvZmZzZXQpOworCisJCWJ1ZiA9IFNscnVXcml0ZVN3 aXRjaFBhZ2UobWVtYmVyc193cml0ZXIsIHBhZ2Vubyk7CisKKwkJbWVtYmVycHRyID0gKFRy YW5zYWN0aW9uSWQgKikgKGJ1ZiArIG1lbWJlcm9mZik7CisKKwkJKm1lbWJlcnB0ciA9IG1l bWJlcnNbaV0ueGlkOworCisJCWZsYWdzcHRyID0gKHVpbnQzMiAqKSAoYnVmICsgZmxhZ3Nv ZmYpOworCisJCWZsYWdzdmFsID0gKmZsYWdzcHRyOworCQlmbGFnc3ZhbCAmPSB+KCgoMSA8 PCBNWEFDVF9NRU1CRVJfQklUU19QRVJfWEFDVCkgLSAxKSA8PCBic2hpZnQpOworCQlmbGFn c3ZhbCB8PSAobWVtYmVyc1tpXS5zdGF0dXMgPDwgYnNoaWZ0KTsKKwkJKmZsYWdzcHRyID0g ZmxhZ3N2YWw7CisJfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ191cGdyYWRlL3BnX3Vw Z3JhZGUuYyBiL3NyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmMKaW5kZXggNDkwZTk4 ZmEyNmYuLmIzNDA1YzIyMTM1IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3VwZ3JhZGUvcGdf dXBncmFkZS5jCisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmMKQEAgLTQz LDYgKzQzLDcgQEAKIAogI2luY2x1ZGUgPHRpbWUuaD4KIAorI2luY2x1ZGUgImFjY2Vzcy9t dWx0aXhhY3QuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2NsYXNzX2QuaCIKICNpbmNsdWRl ICJjb21tb24vZmlsZV9wZXJtLmgiCiAjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaCIKQEAg LTgwNywxNSArODA4LDE1IEBAIGNvcHlfeGFjdF94bG9nX3hpZCh2b2lkKQogCQkJICBuZXdf Y2x1c3Rlci5wZ2RhdGEpOwogCWNoZWNrX29rKCk7CiAKLQkvKgotCSAqIElmIHRoZSBvbGQg c2VydmVyIGlzIGJlZm9yZSB0aGUgTVVMVElYQUNUX0ZPUk1BVENIQU5HRV9DQVRfVkVSIGNo YW5nZQotCSAqIChzZWUgcGdfdXBncmFkZS5oKSBhbmQgdGhlIG5ldyBzZXJ2ZXIgaXMgYWZ0 ZXIsIHRoZW4gd2UgZG9uJ3QgY29weQotCSAqIHBnX211bHRpeGFjdCBmaWxlcywgYnV0IHdl IG5lZWQgdG8gcmVzZXQgcGdfY29udHJvbCBzbyB0aGF0IHRoZSBuZXcKLQkgKiBzZXJ2ZXIg ZG9lc24ndCBhdHRlbXB0IHRvIHJlYWQgbXVsdGlzIG9sZGVyIHRoYW4gdGhlIGN1dG9mZiB2 YWx1ZS4KLQkgKi8KLQlpZiAob2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2F0X3ZlciA+PSBN VUxUSVhBQ1RfRk9STUFUQ0hBTkdFX0NBVF9WRVIgJiYKLQkJbmV3X2NsdXN0ZXIuY29udHJv bGRhdGEuY2F0X3ZlciA+PSBNVUxUSVhBQ1RfRk9STUFUQ0hBTkdFX0NBVF9WRVIpCisJLyog Q29weSBvciBjb252ZXJ0IHBnX211bHRpeGFjdCBmaWxlcyAqLworCUFzc2VydChuZXdfY2x1 c3Rlci5jb250cm9sZGF0YS5jYXRfdmVyID49IE1VTFRJWEFDVF9GT1JNQVRDSEFOR0VfQ0FU X1ZFUik7CisJQXNzZXJ0KG5ld19jbHVzdGVyLmNvbnRyb2xkYXRhLmNhdF92ZXIgPj0gTVVM VElYQUNUT0ZGU0VUX0ZPUk1BVENIQU5HRV9DQVRfVkVSKTsKKwlpZiAob2xkX2NsdXN0ZXIu Y29udHJvbGRhdGEuY2F0X3ZlciA+PSBNVUxUSVhBQ1RPRkZTRVRfRk9STUFUQ0hBTkdFX0NB VF9WRVIpCiAJeworCQkvKiBObyBjaGFuZ2UgaW4gbXVsdGl4YWN0IGZvcm1hdCwganVzdCBj b3B5IHRoZSBmaWxlcyAqLworCQlNdWx0aVhhY3RJZCBuZXdfbnh0bXVsdGkgPSBvbGRfY2x1 c3Rlci5jb250cm9sZGF0YS5jaGtwbnRfbnh0bXVsdGk7CisJCU11bHRpWGFjdE9mZnNldCBu ZXdfbnh0bXhvZmYgPSBvbGRfY2x1c3Rlci5jb250cm9sZGF0YS5jaGtwbnRfbnh0bXhvZmY7 CisKIAkJY29weV9zdWJkaXJfZmlsZXMoInBnX211bHRpeGFjdC9vZmZzZXRzIiwgInBnX211 bHRpeGFjdC9vZmZzZXRzIik7CiAJCWNvcHlfc3ViZGlyX2ZpbGVzKCJwZ19tdWx0aXhhY3Qv bWVtYmVycyIsICJwZ19tdWx0aXhhY3QvbWVtYmVycyIpOwogCkBAIC04MjYsMzggKzgyNyw2 NCBAQCBjb3B5X3hhY3RfeGxvZ194aWQodm9pZCkKIAkJICogY291bnRlcnMgaGVyZSBhbmQg dGhlIG9sZGVzdCBtdWx0aSBwcmVzZW50IG9uIHN5c3RlbS4KIAkJICovCiAJCWV4ZWNfcHJv ZyhVVElMSVRZX0xPR19GSUxFLCBOVUxMLCB0cnVlLCB0cnVlLAotCQkJCSAgIlwiJXMvcGdf cmVzZXR3YWxcIiAtTyAldSAtbSAldSwldSBcIiVzXCIiLAotCQkJCSAgbmV3X2NsdXN0ZXIu YmluZGlyLAotCQkJCSAgb2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hrcG50X254dG14b2Zm LAotCQkJCSAgb2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hrcG50X254dG11bHRpLAorCQkJ CSAgIlwiJXMvcGdfcmVzZXR3YWxcIiAtTyAlIiBQUkl1NjQgIiAtbSAldSwldSBcIiVzXCIi LAorCQkJCSAgbmV3X2NsdXN0ZXIuYmluZGlyLCBuZXdfbnh0bXhvZmYsIG5ld19ueHRtdWx0 aSwKIAkJCQkgIG9sZF9jbHVzdGVyLmNvbnRyb2xkYXRhLmNoa3BudF9vbGRzdE11bHRpLAog CQkJCSAgbmV3X2NsdXN0ZXIucGdkYXRhKTsKIAkJY2hlY2tfb2soKTsKIAl9Ci0JZWxzZSBp ZiAobmV3X2NsdXN0ZXIuY29udHJvbGRhdGEuY2F0X3ZlciA+PSBNVUxUSVhBQ1RfRk9STUFU Q0hBTkdFX0NBVF9WRVIpCisJZWxzZQogCXsKKwkJLyogQ29udmVyc2lvbiBpcyBuZWVkZWQg Ki8KKwkJTXVsdGlYYWN0SWQgbnh0bXVsdGk7CisJCU11bHRpWGFjdElkIG9sZHN0TXVsdGk7 CisJCU11bHRpWGFjdE9mZnNldCBueHRteG9mZjsKKwogCQkvKgotCQkgKiBSZW1vdmUgb2Zm c2V0cy8wMDAwIGZpbGUgY3JlYXRlZCBieSBpbml0ZGIgdGhhdCBubyBsb25nZXIgbWF0Y2hl cwotCQkgKiB0aGUgbmV3IG11bHRpLXhpZCB2YWx1ZS4gICJtZW1iZXJzIiBzdGFydHMgYXQg emVybyBzbyBubyBuZWVkIHRvCi0JCSAqIHJlbW92ZSBpdC4KKwkJICogRGV0ZXJtaW5lIHRo ZSByYW5nZSBvZiBtdWx0aXhhY3RzIHRvIGNvbnZlcnQuCiAJCSAqLwotCQlyZW1vdmVfbmV3 X3N1YmRpcigicGdfbXVsdGl4YWN0L29mZnNldHMiLCBmYWxzZSk7CisJCW54dG11bHRpID0g b2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hrcG50X254dG11bHRpOworCQlpZiAob2xkX2Ns dXN0ZXIuY29udHJvbGRhdGEuY2F0X3ZlciA+PSBNVUxUSVhBQ1RfRk9STUFUQ0hBTkdFX0NB VF9WRVIpCisJCQlvbGRzdE11bHRpID0gb2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hrcG50 X29sZHN0TXVsdGk7CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIEluIFBvc3RncmVTUUwg OS4yIGFuZCBiZWxvdywgbXVsdGl0cmFuc2FjdGlvbnMgd2VyZSBvbmx5IHVzZWQKKwkJCSAq IGZvciByb3cgbG9ja2luZywgYW5kIGFzIHN1Y2ggZG9uJ3QgbmVlZCB0byBiZSBwcmVzZXJ2 ZWQgZHVyaW5nCisJCQkgKiB1cGdyYWRlLiAgSW4gdGhhdCBjYXNlLCB3ZSB1dGlsaXplIGNv bnZlcnRfbXVsdGl4YWN0cygpIGp1c3QgdG8KKwkJCSAqIGluaXRpYWxpemUgbmV3LCBlbXB0 eSBmaWxlcyBpbiB0aGUgbmV3IGZvcm1hdC4KKwkJCSAqCisJCQkgKiBJdCdzIGltcG9ydGFu dCB0aGF0IHRoZSBvbGRlc3QgbXVsdGkgaXMgc2V0IHRvIHRoZSBsYXRlc3QgdmFsdWUKKwkJ CSAqIHVzZWQgYnkgdGhlIG9sZCBzeXN0ZW0sIHNvIHRoYXQgbXVsdGl4YWN0LmMgcmV0dXJu cyB0aGUgZW1wdHkKKwkJCSAqIHNldCBmb3IgbXVsdGlzIHRoYXQgbWlnaHQgYmUgcHJlc2Vu dCBvbiBkaXNrLgorCQkJICovCisJCQlvbGRzdE11bHRpID0gbnh0bXVsdGk7CisJCX0KKwkJ LyogaGFuZGxlIHdyYXBhcm91bmQgKi8KKwkJaWYgKG54dG11bHRpIDwgRmlyc3RNdWx0aVhh Y3RJZCkKKwkJCW54dG11bHRpID0gRmlyc3RNdWx0aVhhY3RJZDsKKwkJaWYgKG9sZHN0TXVs dGkgPCBGaXJzdE11bHRpWGFjdElkKQorCQkJb2xkc3RNdWx0aSA9IEZpcnN0TXVsdGlYYWN0 SWQ7CiAKLQkJcHJlcF9zdGF0dXMoIlNldHRpbmcgb2xkZXN0IG11bHRpeGFjdCBJRCBpbiBu ZXcgY2x1c3RlciIpOworCQkvKgorCQkgKiBSZW1vdmUgdGhlIGZpbGVzIGNyZWF0ZWQgYnkg aW5pdGRiIGluIHRoZSBuZXcgY2x1c3Rlci4KKwkJICogY29udmVydF9tdWx0aXhhY3RzKCkg d2lsbCBjcmVhdGUgbmV3IG9uZXMuCisJCSAqLworCQlyZW1vdmVfbmV3X3N1YmRpcigicGdf bXVsdGl4YWN0L21lbWJlcnMiLCBmYWxzZSk7CisJCXJlbW92ZV9uZXdfc3ViZGlyKCJwZ19t dWx0aXhhY3Qvb2Zmc2V0cyIsIGZhbHNlKTsKIAogCQkvKgotCQkgKiBXZSBkb24ndCBwcmVz ZXJ2ZSBmaWxlcyBpbiB0aGlzIGNhc2UsIGJ1dCBpdCdzIGltcG9ydGFudCB0aGF0IHRoZQot CQkgKiBvbGRlc3QgbXVsdGkgaXMgc2V0IHRvIHRoZSBsYXRlc3QgdmFsdWUgdXNlZCBieSB0 aGUgb2xkIHN5c3RlbSwgc28KLQkJICogdGhhdCBtdWx0aXhhY3QuYyByZXR1cm5zIHRoZSBl bXB0eSBzZXQgZm9yIG11bHRpcyB0aGF0IG1pZ2h0IGJlCi0JCSAqIHByZXNlbnQgb24gZGlz ay4gIFdlIHNldCBuZXh0IG11bHRpIHRvIHRoZSB2YWx1ZSBmb2xsb3dpbmcgdGhhdDsgaXQK LQkJICogbWlnaHQgZW5kIHVwIHdyYXBwZWQgYXJvdW5kIChpLmUuIDApIGlmIHRoZSBvbGQg Y2x1c3RlciBoYWQKLQkJICogbmV4dD1NYXhNdWx0aVhhY3RJZCwgYnV0IG11bHRpeGFjdC5j IGNhbiBjb3BlIHdpdGggdGhhdCBqdXN0IGZpbmUuCisJCSAqIENyZWF0ZSBuZXcgcGdfbXVs dGl4YWN0IGZpbGVzLCBjb252ZXJ0aW5nIG9sZCBvbmVzIGlmIG5lZWRlZC4KIAkJICovCisJ CXByZXBfc3RhdHVzKCJDb252ZXJ0aW5nIHBnX211bHRpeGFjdCBmaWxlcyIpOworCQlueHRt eG9mZiA9IHJld3JpdGVfbXVsdGl4YWN0cyhvbGRzdE11bHRpLCBueHRtdWx0aSk7CisJCWNo ZWNrX29rKCk7CisKKwkJcHJlcF9zdGF0dXMoIlNldHRpbmcgbmV4dCBtdWx0aXhhY3QgSUQg YW5kIG9mZnNldCBmb3IgbmV3IGNsdXN0ZXIiKTsKIAkJZXhlY19wcm9nKFVUSUxJVFlfTE9H X0ZJTEUsIE5VTEwsIHRydWUsIHRydWUsCi0JCQkJICAiXCIlcy9wZ19yZXNldHdhbFwiIC1t ICV1LCV1IFwiJXNcIiIsCisJCQkJICAiXCIlcy9wZ19yZXNldHdhbFwiIC1PICUiIFBSSXU2 NCAiIC1tICV1LCV1IFwiJXNcIiIsCiAJCQkJICBuZXdfY2x1c3Rlci5iaW5kaXIsCi0JCQkJ ICBvbGRfY2x1c3Rlci5jb250cm9sZGF0YS5jaGtwbnRfbnh0bXVsdGkgKyAxLAotCQkJCSAg b2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hrcG50X254dG11bHRpLAorCQkJCSAgbnh0bXhv ZmYsIG54dG11bHRpLCBvbGRzdE11bHRpLAogCQkJCSAgbmV3X2NsdXN0ZXIucGdkYXRhKTsK IAkJY2hlY2tfb2soKTsKIAl9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3VwZ3JhZGUvcGdf dXBncmFkZS5oIGIvc3JjL2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUuaAppbmRleCBlODYz MzZmNGJlOS4uNDhmMTVkZmY1ZTAgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfdXBncmFkZS9w Z191cGdyYWRlLmgKKysrIGIvc3JjL2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUuaApAQCAt MTE0LDYgKzExNCwxMyBAQCBleHRlcm4gY2hhciAqb3V0cHV0X2ZpbGVzW107CiAgKi8KICNk ZWZpbmUgTVVMVElYQUNUX0ZPUk1BVENIQU5HRV9DQVRfVkVSIDIwMTMwMTIzMQogCisvKgor ICogTXVsdGlYYWN0T2Zmc2V0IHdhcyBjaGFuZ2VkIGZyb20gMzItYml0IHRvIDY0LWJpdCBp biB2ZXJzaW9uIDE5LCBhdCB0aGlzCisgKiBjYXRhbG9nIHZlcnNpb24uICBwZ19tdWx0aXhh Y3QgZmlsZXMgbmVlZCB0byBiZSBjb252ZXJ0ZWQgd2hlbiB1cGdyYWRpbmcKKyAqIGFjcm9z cyB0aGlzIHZlcnNpb24uCisgKi8KKyNkZWZpbmUgTVVMVElYQUNUT0ZGU0VUX0ZPUk1BVENI QU5HRV9DQVRfVkVSIDk5OTk5OTk5OQorCiAvKgogICogbGFyZ2Ugb2JqZWN0IGNodW5rIHNp emUgYWRkZWQgdG8gcGdfY29udHJvbGRhdGEsCiAgKiBjb21taXQgNWY5M2MzNzgwNWU3NDg1 NDg4NDgwOTE2YjQ1ODVlMDk4ZDNjYzg4MwpAQCAtMjM1LDcgKzI0Miw3IEBAIHR5cGVkZWYg c3RydWN0CiAJdWludDMyCQljaGtwbnRfbnh0ZXBvY2g7CiAJdWludDMyCQljaGtwbnRfbnh0 b2lkOwogCXVpbnQzMgkJY2hrcG50X254dG11bHRpOwotCXVpbnQzMgkJY2hrcG50X254dG14 b2ZmOworCXVpbnQ2NAkJY2hrcG50X254dG14b2ZmOwogCXVpbnQzMgkJY2hrcG50X29sZHN0 TXVsdGk7CiAJdWludDMyCQljaGtwbnRfb2xkc3R4aWQ7CiAJdWludDMyCQlhbGlnbjsKQEAg LTQ5OSw2ICs1MDYsOSBAQCB2b2lkCQlvbGRfOV82X2ludmFsaWRhdGVfaGFzaF9pbmRleGVz KENsdXN0ZXJJbmZvICpjbHVzdGVyLAogCiB2b2lkCQlyZXBvcnRfZXh0ZW5zaW9uX3VwZGF0 ZXMoQ2x1c3RlckluZm8gKmNsdXN0ZXIpOwogCisvKiBtdWx0aXhhY3RfcmV3cml0ZS5jICov CitNdWx0aVhhY3RPZmZzZXQgcmV3cml0ZV9tdWx0aXhhY3RzKE11bHRpWGFjdElkIGZyb21f bXVsdGksIE11bHRpWGFjdElkIHRvX211bHRpKTsKKwogLyogcGFyYWxsZWwuYyAqLwogdm9p ZAkJcGFyYWxsZWxfZXhlY19wcm9nKGNvbnN0IGNoYXIgKmxvZ19maWxlLCBjb25zdCBjaGFy ICpvcHRfbG9nX2ZpbGUsCiAJCQkJCQkJICAgY29uc3QgY2hhciAqZm10LC4uLikgcGdfYXR0 cmlidXRlX3ByaW50ZigzLCA0KTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9z bHJ1X2lvLmMgYi9zcmMvYmluL3BnX3VwZ3JhZGUvc2xydV9pby5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43MjA0NDUyODliOQotLS0gL2Rldi9udWxsCisr KyBiL3NyYy9iaW4vcGdfdXBncmFkZS9zbHJ1X2lvLmMKQEAgLTAsMCArMSwyNTggQEAKKy8q CisgKiBzbHJ1X2lvLmMKKyAqCisgKiBSb3V0aW5lcyBmb3IgcmVhZGluZyBhbmQgd3JpdGlu ZyBTTFJVIGZpbGVzIGR1cmluZyB1cGdyYWRlLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAy NSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIHNyYy9iaW4vcGdf dXBncmFkZS9zbHJ1X2lvLmMKKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKwor I2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlICJjb21tb24vZmVfbWVtdXRpbHMuaCIK KyNpbmNsdWRlICJjb21tb24vZmlsZV9wZXJtLmgiCisjaW5jbHVkZSAiY29tbW9uL2ZpbGVf dXRpbHMuaCIKKyNpbmNsdWRlICJwb3J0L3BnX2lvdmVjLmgiCisjaW5jbHVkZSAicGdfdXBn cmFkZS5oIgorI2luY2x1ZGUgInNscnVfaW8uaCIKKworc3RhdGljIFNscnVTZWdTdGF0ZSAq QWxsb2NTbHJ1U2VnU3RhdGUoY29uc3QgY2hhciAqZGlyKTsKK3N0YXRpYyBjaGFyICpTbHJ1 RmlsZU5hbWUoU2xydVNlZ1N0YXRlICpzdGF0ZSwgaW50NjQgc2Vnbm8pOworc3RhdGljIHZv aWQgU2xydUZsdXNoKFNscnVTZWdTdGF0ZSAqc3RhdGUpOworCitzdGF0aWMgU2xydVNlZ1N0 YXRlICoKK0FsbG9jU2xydVNlZ1N0YXRlKGNvbnN0IGNoYXIgKmRpcikKK3sKKwlTbHJ1U2Vn U3RhdGUgKnN0YXRlID0gcGdfbWFsbG9jKHNpemVvZigqc3RhdGUpKTsKKworCXN0YXRlLT5k aXIgPSBwc3RyZHVwKGRpcik7CisJc3RhdGUtPmZuID0gTlVMTDsKKwlzdGF0ZS0+ZmQgPSAt MTsKKwlzdGF0ZS0+c2Vnbm8gPSAtMTsKKwlzdGF0ZS0+cGFnZW5vID0gMDsKKworCXJldHVy biBzdGF0ZTsKK30KKworLyogc2ltaWxhciB0byB0aGUgYmFja2VuZCBmdW5jdGlvbiB3aXRo IHRoZSBzYW1lIG5hbWUgKi8KK3N0YXRpYyBjaGFyICoKK1NscnVGaWxlTmFtZShTbHJ1U2Vn U3RhdGUgKnN0YXRlLCBpbnQ2NCBzZWdubykKK3sKKwlpZiAoc3RhdGUtPmxvbmdfc2VnbWVu dF9uYW1lcykKKwl7CisJCUFzc2VydChzZWdubyA+PSAwICYmIHNlZ25vIDw9IElOVDY0Q09O U1QoMHhGRkZGRkZGRkZGRkZGRkYpKTsKKwkJcmV0dXJuIHBzcHJpbnRmKCIlcy8lMDE1IiBQ UklYNjQsIHN0YXRlLT5kaXIsIHNlZ25vKTsKKwl9CisJZWxzZQorCXsKKwkJQXNzZXJ0KHNl Z25vID49IDAgJiYgc2Vnbm8gPD0gSU5UNjRDT05TVCgweEZGRkZGRikpOworCQlyZXR1cm4g cHNwcmludGYoIiVzLyUwNFgiLCBzdGF0ZS0+ZGlyLCAodW5zaWduZWQgaW50KSBzZWdubyk7 CisJfQorfQorCisvKgorICogQ3JlYXRlIHNscnUgcmVhZGVyIGZvciBkaXIuCisgKgorICog UmV0dXJucyB0aGUgbWFsbG9jZWQgbWVtb3J5IHVzZWQgYnkgdGhlIGFsbCBvdGhlciByZWFk IGNhbGxzIGluIHRoaXMgbW9kdWxlLgorICovCitTbHJ1U2VnU3RhdGUgKgorQWxsb2NTbHJ1 UmVhZChjb25zdCBjaGFyICpkaXIsIGJvb2wgbG9uZ19zZWdtZW50X25hbWVzKQoreworCVNs cnVTZWdTdGF0ZSAqc3RhdGUgPSBBbGxvY1NscnVTZWdTdGF0ZShkaXIpOworCisJc3RhdGUt PndyaXRpbmcgPSBmYWxzZTsKKwlzdGF0ZS0+bG9uZ19zZWdtZW50X25hbWVzID0gbG9uZ19z ZWdtZW50X25hbWVzOworCisJcmV0dXJuIHN0YXRlOworfQorCisvKgorICogT3BlbiBnaXZl biBwYWdlIGZvciByZWFkaW5nLgorICoKKyAqIFJlYWRpbmcgY2FuIGJlIGRvbmUgaW4gcmFu ZG9tIG9yZGVyLgorICovCitjaGFyICoKK1NscnVSZWFkU3dpdGNoUGFnZVNsb3coU2xydVNl Z1N0YXRlICpzdGF0ZSwgdWludDY0IHBhZ2VubykKK3sKKwlpbnQ2NAkJc2Vnbm87CisJc3Np emVfdAkJYnl0ZXNfcmVhZDsKKwlvZmZfdAkJb2Zmc2V0OworCisJQXNzZXJ0KCFzdGF0ZS0+ d3JpdGluZyk7CS8qIHJlYWQgb25seSBtb2RlICovCisKKwlpZiAoc3RhdGUtPnNlZ25vICE9 IC0xICYmIHBhZ2VubyA9PSBzdGF0ZS0+cGFnZW5vKQorCQlyZXR1cm4gc3RhdGUtPmJ1Zi5k YXRhOworCisJc2Vnbm8gPSBwYWdlbm8gLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOworCWlm IChzZWdubyAhPSBzdGF0ZS0+c2Vnbm8pCisJeworCQlpZiAoc3RhdGUtPnNlZ25vICE9IC0x KQorCQl7CisJCQljbG9zZShzdGF0ZS0+ZmQpOworCQkJc3RhdGUtPmZkID0gLTE7CisKKwkJ CXBnX2ZyZWUoc3RhdGUtPmZuKTsKKwkJCXN0YXRlLT5mbiA9IE5VTEw7CisKKwkJCXN0YXRl LT5zZWdubyA9IC0xOworCQl9CisKKwkJLyogT3BlbiBuZXcgc2VnbWVudCAqLworCQlzdGF0 ZS0+Zm4gPSBTbHJ1RmlsZU5hbWUoc3RhdGUsIHNlZ25vKTsKKwkJaWYgKChzdGF0ZS0+ZmQg PSBvcGVuKHN0YXRlLT5mbiwgT19SRE9OTFkgfCBQR19CSU5BUlksIDApKSA8IDApCisJCQlw Z19mYXRhbCgiY291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCI6ICVtIiwgc3RhdGUtPmZuKTsK Kwl9CisJc3RhdGUtPnNlZ25vID0gc2Vnbm87CisKKwlvZmZzZXQgPSAocGFnZW5vICUgU0xS VV9QQUdFU19QRVJfU0VHTUVOVCkgKiBCTENLU1o7CisJYnl0ZXNfcmVhZCA9IDA7CisJd2hp bGUgKGJ5dGVzX3JlYWQgPCBCTENLU1opCisJeworCQlzc2l6ZV90CQlyYzsKKworCQlyYyA9 IHBnX3ByZWFkKHN0YXRlLT5mZCwKKwkJCQkJICAmc3RhdGUtPmJ1Zi5kYXRhICsgYnl0ZXNf cmVhZCwKKwkJCQkJICBCTENLU1ogLSBieXRlc19yZWFkLAorCQkJCQkgIG9mZnNldCArIGJ5 dGVzX3JlYWQpOworCQlpZiAocmMgPCAwKQorCQl7CisJCQlpZiAoZXJybm8gPT0gRUlOVFIp CisJCQkJY29udGludWU7CisJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZmlsZSBcIiVz XCI6ICVtIiwgc3RhdGUtPmZuKTsKKwkJfQorCQlpZiAocmMgPT0gMCkKKwkJeworCQkJLyog dW5leHBlY3RlZCBFT0YgKi8KKwkJCXBnX2xvZyhQR19XQVJOSU5HLCAidW5leHBlY3RlZCBF T0YgcmVhZGluZyBmaWxlIFwiJXNcIiBhdCBvZmZzZXQgJXpkLCByZWFkaW5nIGFzIHplcm9z Iiwgc3RhdGUtPmZuLAorCQkJCSAgIG9mZnNldCArIGJ5dGVzX3JlYWQpOworCQkJbWVtc2V0 KCZzdGF0ZS0+YnVmLmRhdGEgKyBieXRlc19yZWFkLCAwLCBCTENLU1ogLSBieXRlc19yZWFk KTsKKwkJCWJyZWFrOworCQl9CisJCWJ5dGVzX3JlYWQgKz0gcmM7CisJfQorCXN0YXRlLT5w YWdlbm8gPSBwYWdlbm87CisKKwlyZXR1cm4gc3RhdGUtPmJ1Zi5kYXRhOworfQorCisvKgor ICogRnJlZXMgdGhlIG1hbGxvY2VkIHJlYWRlci4KKyAqLwordm9pZAorRnJlZVNscnVSZWFk KFNscnVTZWdTdGF0ZSAqc3RhdGUpCit7CisJQXNzZXJ0KCFzdGF0ZS0+d3JpdGluZyk7CS8q IHJlYWQgb25seSBtb2RlICovCisKKwlpZiAoc3RhdGUtPmZkICE9IC0xKQorCQljbG9zZShz dGF0ZS0+ZmQpOworCXBnX2ZyZWUoc3RhdGUpOworfQorCisvKgorICogQ3JlYXRlIHNscnUg d3JpdGVyIGZvciBkaXIuCisgKgorICogUmV0dXJucyB0aGUgbWFsbG9jZWQgbWVtb3J5IHVz ZWQgYnkgdGhlIGFsbCBvdGhlciB3cml0ZSBjYWxscyBpbiB0aGlzIG1vZHVsZS4KKyAqLwor U2xydVNlZ1N0YXRlICoKK0FsbG9jU2xydVdyaXRlKGNvbnN0IGNoYXIgKmRpciwgYm9vbCBs b25nX3NlZ21lbnRfbmFtZXMpCit7CisJU2xydVNlZ1N0YXRlICpzdGF0ZSA9IEFsbG9jU2xy dVNlZ1N0YXRlKGRpcik7CisKKwlzdGF0ZS0+d3JpdGluZyA9IHRydWU7CisJc3RhdGUtPmxv bmdfc2VnbWVudF9uYW1lcyA9IGxvbmdfc2VnbWVudF9uYW1lczsKKworCXJldHVybiBzdGF0 ZTsKK30KKworLyoKKyAqIE9wZW4gdGhlIGdpdmVuIHBhZ2UgZm9yIHdyaXRpbmcuCisgKgor ICogTk9URTogVGhpcyB1c2VzIE9fRVhDTCB3aGVuIHN0ZXBwaW5nIHRvIGEgbmV3IHNlZ21l bnQsIHNvIHRoaXMgYXNzdW1lcyB0aGF0CisgKiBlYWNoIHNlZ21lbnQgaXMgd3JpdHRlbiBp biBmdWxsIGJlZm9yZSBtb3Zpbmcgb24gdG8gbmV4dCBvbmUuICBUaGlzCisgKiBsaW1pdGF0 aW9uIHdvdWxkIGJlIGVhc3kgdG8gbGlmdCBpZiBuZWVkZWQsIGJ1dCBpdCBmaXRzIHRoZSB1 c2FnZSBwYXR0ZXJuIG9mCisgKiBjdXJyZW50IGNhbGxlcnMuCisgKi8KK2NoYXIgKgorU2xy dVdyaXRlU3dpdGNoUGFnZVNsb3coU2xydVNlZ1N0YXRlICpzdGF0ZSwgdWludDY0IHBhZ2Vu bykKK3sKKwlpbnQ2NAkJc2Vnbm87CisJb2ZmX3QJCW9mZnNldDsKKworCWlmIChzdGF0ZS0+ c2Vnbm8gIT0gLTEgJiYgcGFnZW5vID09IHN0YXRlLT5wYWdlbm8pCisJCXJldHVybiBzdGF0 ZS0+YnVmLmRhdGE7CisKKwlzZWdubyA9IHBhZ2VubyAvIFNMUlVfUEFHRVNfUEVSX1NFR01F TlQ7CisJb2Zmc2V0ID0gKHBhZ2VubyAlIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQpICogQkxD S1NaOworCisJU2xydUZsdXNoKHN0YXRlKTsKKwltZW1zZXQoc3RhdGUtPmJ1Zi5kYXRhLCAw LCBCTENLU1opOworCisJaWYgKHNlZ25vICE9IHN0YXRlLT5zZWdubykKKwl7CisJCWlmIChz dGF0ZS0+c2Vnbm8gIT0gLTEpCisJCXsKKwkJCWNsb3NlKHN0YXRlLT5mZCk7CisJCQlzdGF0 ZS0+ZmQgPSAtMTsKKworCQkJcGdfZnJlZShzdGF0ZS0+Zm4pOworCQkJc3RhdGUtPmZuID0g TlVMTDsKKworCQkJc3RhdGUtPnNlZ25vID0gLTE7CisJCX0KKworCQkvKiBDcmVhdGUgdGhl IHNlZ21lbnQgKi8KKwkJc3RhdGUtPmZuID0gU2xydUZpbGVOYW1lKHN0YXRlLCBzZWdubyk7 CisJCWlmICgoc3RhdGUtPmZkID0gb3BlbihzdGF0ZS0+Zm4sIE9fUkRXUiB8IE9fQ1JFQVQg fCBPX0VYQ0wgfCBQR19CSU5BUlksCisJCQkJCQkJICBwZ19maWxlX2NyZWF0ZV9tb2RlKSkg PCAwKQorCQl7CisJCQlwZ19mYXRhbCgiY291bGQgbm90IGNyZWF0ZSBmaWxlIFwiJXNcIjog JW0iLCBzdGF0ZS0+Zm4pOworCQl9CisKKwkJc3RhdGUtPnNlZ25vID0gc2Vnbm87CisKKwkJ aWYgKG9mZnNldCA+IDApCisJCXsKKwkJCWlmIChwZ19wd3JpdGVfemVyb3Moc3RhdGUtPmZk LCBvZmZzZXQsIDApIDwgMCkKKwkJCQlwZ19mYXRhbCgiY291bGQgbm90IHdyaXRlIGZpbGUg XCIlc1wiOiAlbSIsIHN0YXRlLT5mbik7CisJCX0KKwl9CisKKwlzdGF0ZS0+cGFnZW5vID0g cGFnZW5vOworCisJcmV0dXJuIHN0YXRlLT5idWYuZGF0YTsKK30KKworc3RhdGljIHZvaWQK K1NscnVGbHVzaChTbHJ1U2VnU3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBpb3ZlYyBpb3Zl YyA9IHsKKwkJLmlvdl9iYXNlID0gJnN0YXRlLT5idWYsCisJCS5pb3ZfbGVuID0gQkxDS1Na LAorCX07CisJb2ZmX3QJCW9mZnNldDsKKworCWlmIChzdGF0ZS0+c2Vnbm8gPT0gLTEpCisJ CXJldHVybjsKKworCW9mZnNldCA9IChzdGF0ZS0+cGFnZW5vICUgU0xSVV9QQUdFU19QRVJf U0VHTUVOVCkgKiBCTENLU1o7CisKKwlpZiAocGdfcHdyaXRldl93aXRoX3JldHJ5KHN0YXRl LT5mZCwgJmlvdmVjLCAxLCBvZmZzZXQpIDwgMCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCB3 cml0ZSBmaWxlIFwiJXNcIjogJW0iLCBzdGF0ZS0+Zm4pOworfQorCisvKgorICogRnJlZXMg dGhlIG1hbGxvY2VkIHdyaXRlci4KKyAqLwordm9pZAorRnJlZVNscnVXcml0ZShTbHJ1U2Vn U3RhdGUgKnN0YXRlKQoreworCUFzc2VydChzdGF0ZS0+d3JpdGluZyk7CisKKwlTbHJ1Rmx1 c2goc3RhdGUpOworCisJaWYgKHN0YXRlLT5mZCAhPSAtMSkKKwkJY2xvc2Uoc3RhdGUtPmZk KTsKKwlwZ19mcmVlKHN0YXRlKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFk ZS9zbHJ1X2lvLmggYi9zcmMvYmluL3BnX3VwZ3JhZGUvc2xydV9pby5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41YzgwYTY3OWI0ZAotLS0gL2Rldi9udWxs CisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS9zbHJ1X2lvLmgKQEAgLTAsMCArMSw1MiBAQAor LyoKKyAqIHNscnVfaW8uaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIHNyYy9iaW4vcGdfdXBncmFkZS9zbHJ1 X2lvLmgKKyAqLworCisjaWZuZGVmIFNMUlVfSU9fSAorI2RlZmluZSBTTFJVX0lPX0gKKwor LyoKKyAqIFN0YXRlIGZvciByZWFkaW5nIG9yIHdyaXRpbmcgYW4gU0xSVSwgd2l0aCBhIG9u ZSBwYWdlIGJ1ZmZlci4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgU2xydVNlZ1N0YXRlCit7CisJ Ym9vbAkJd3JpdGluZzsKKwlib29sCQlsb25nX3NlZ21lbnRfbmFtZXM7CisKKwljaGFyCSAg ICpkaXI7CisJY2hhcgkgICAqZm47CisJaW50CQkJZmQ7CisJaW50NjQJCXNlZ25vOworCXVp bnQ2NAkJcGFnZW5vOworCisJUEdBbGlnbmVkQmxvY2sgYnVmOworfSBTbHJ1U2VnU3RhdGU7 CisKK2V4dGVybiBTbHJ1U2VnU3RhdGUgKkFsbG9jU2xydVJlYWQoY29uc3QgY2hhciAqZGly LCBib29sIGxvbmdfc2VnbWVudF9uYW1lcyk7CitleHRlcm4gY2hhciAqU2xydVJlYWRTd2l0 Y2hQYWdlU2xvdyhTbHJ1U2VnU3RhdGUgKnN0YXRlLCB1aW50NjQgcGFnZW5vKTsKK2V4dGVy biB2b2lkIEZyZWVTbHJ1UmVhZChTbHJ1U2VnU3RhdGUgKnN0YXRlKTsKKworc3RhdGljIGlu bGluZSBjaGFyICoKK1NscnVSZWFkU3dpdGNoUGFnZShTbHJ1U2VnU3RhdGUgKnN0YXRlLCB1 aW50NjQgcGFnZW5vKQoreworCWlmIChzdGF0ZS0+c2Vnbm8gIT0gLTEgJiYgcGFnZW5vID09 IHN0YXRlLT5wYWdlbm8pCisJCXJldHVybiBzdGF0ZS0+YnVmLmRhdGE7CisJcmV0dXJuIFNs cnVSZWFkU3dpdGNoUGFnZVNsb3coc3RhdGUsIHBhZ2Vubyk7Cit9CisKK2V4dGVybiBTbHJ1 U2VnU3RhdGUgKkFsbG9jU2xydVdyaXRlKGNvbnN0IGNoYXIgKmRpciwgYm9vbCBsb25nX3Nl Z21lbnRfbmFtZXMpOworZXh0ZXJuIGNoYXIgKlNscnVXcml0ZVN3aXRjaFBhZ2VTbG93KFNs cnVTZWdTdGF0ZSAqc3RhdGUsIHVpbnQ2NCBwYWdlbm8pOworZXh0ZXJuIHZvaWQgRnJlZVNs cnVXcml0ZShTbHJ1U2VnU3RhdGUgKnN0YXRlKTsKKworc3RhdGljIGlubGluZSBjaGFyICoK K1NscnVXcml0ZVN3aXRjaFBhZ2UoU2xydVNlZ1N0YXRlICpzdGF0ZSwgdWludDY0IHBhZ2Vu bykKK3sKKwlpZiAoc3RhdGUtPnNlZ25vICE9IC0xICYmIHBhZ2VubyA9PSBzdGF0ZS0+cGFn ZW5vKQorCQlyZXR1cm4gc3RhdGUtPmJ1Zi5kYXRhOworCXJldHVybiBTbHJ1V3JpdGVTd2l0 Y2hQYWdlU2xvdyhzdGF0ZSwgcGFnZW5vKTsKK30KKworI2VuZGlmCQkJCQkJCS8qIFNMUlVf SU9fSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ191cGdyYWRlL3QvMDA3X211bHRpeGFj dF9jb252ZXJzaW9uLnBsIGIvc3JjL2Jpbi9wZ191cGdyYWRlL3QvMDA3X211bHRpeGFjdF9j b252ZXJzaW9uLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4z ZTllMmMyOWFmNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS90LzAw N19tdWx0aXhhY3RfY29udmVyc2lvbi5wbApAQCAtMCwwICsxLDQzMyBAQAorIyBDb3B5cmln aHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKKyMg VmVyc2lvbiAxOSBleHBhbmRlZCBNdWx0aVhhY3RPZmZzZXQgZnJvbSAzMiB0byA2NCBiaXRz LiBVcGdyYWRpbmcKKyMgYWNyb3NzIHRoYXQgcmVxdWlyZXMgcmV3cml0aW5nIHRoZSBTTFJV IGZpbGVzIHRvIHRoZSBuZXcgZm9ybWF0LgorIyBUaGlzIGZpbGUgY29udGFpbnMgdGVzdHMg Zm9yIHRoZSBjb252ZXJzaW9uLgorIworIyBUbyBydW4sIHNldCAnb2xkaW5zdGFsbCcgRU5W IHZhcmlhYmxlIHRvIHBvaW50IHRvIGEgcHJlLXYxOQorIyBpbnN0YWxsYXRpb24uIElmIGl0 J3Mgbm90IHNldCwgb3IgaWYgaXQgcG9pbnRzIHRvIGEgdjE5IG9yIGFib3ZlCisjIGluc3Rh bGxhdGlvbiwgdGhpcyBzdGlsbCBwZXJmb3JtcyBhIHZlcnkgYmFzaWMgdGVzdCwgdXBncmFk aW5nIGEKKyMgY2x1c3RlciB3aXRoIHNvbWUgbXVsdGl4YWN0cy4gSXQncyBub3QgdmVyeSBp bnRlcmVzdGluZywgaG93ZXZlciwKKyMgYmVjYXVzZSB0aGVyZSdzIG5vIGNvbnZlcnNpb24g aW52b2x2ZWQgaW4gdGhhdCBjYXNlLgorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZB VEFMID0+ICdhbGwnOworCit1c2UgTWF0aDo6QmlnSW50OwordXNlIFBvc3RncmVTUUw6OlRl c3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6 TW9yZTsKKworIyBUZW1wIGRpciBmb3IgYSBkdW1wcy4KK215ICR0ZW1wZGlyID0gUG9zdGdy ZVNRTDo6VGVzdDo6VXRpbHM6OnRlbXBkaXI7CisKKyMgQSB3b3JrbG9hZCB0aGF0IGNvbnN1 bWVzIG11bHRpeGlkcy4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBpcyB0bworIyBnZW5lcmF0ZSBz b21lIG11bHRpeGlkcyBpbiB0aGUgb2xkIGNsdXN0ZXIsIHNvIHRoYXQgd2UgY2FuIHRlc3QK KyMgdXBncmFkaW5nIHRoZW0uIFRoZSB3b3JrbG9hZCBpcyBhIG1peCBvZiBLRVkgU0hBUkUg bG9ja2luZyBxdWVyaWVzCisjIGFuZCBVUERBVEVzLCBhbmQgY29tbWl0cyBhbmQgYWJvcnRz LCB0byBnZW5lcmF0ZSBhIG1peCBvZiBtdWx0aXhpZHMKKyMgd2l0aCBkaWZmZXJlbnQgc3Rh dHVzZXMuIEl0IGNvbnN1bWVzIGFyb3VuZCAzMDAwIG11bHRpeGlkcyB3aXRoCisjIDMwMDAw IG1lbWJlcnMuIFRoYXQncyBlbm91Z2ggdG8gc3BhbiBtb3JlIHRoYW4gb25lIG11bHRpeGlk cworIyAnb2Zmc2V0cycgcGFnZSwgYW5kIG1vcmUgdGhhbiBvbmUgJ21lbWJlcnMnIHNlZ21l bnQuCisjCisjIFRoZSB3b3JrbG9hZCBsZWF2ZXMgYmVoaW5kIGEgdGFibGUgY2FsbGVkICdt eG9mZnRlc3QnIGNvbnRhaW5pbmcgYQorIyBzbWFsbCBudW1iZXIgb2Ygcm93cyByZWZlcmVu Y2luZyBzb21lIG9mIHRoZSBnZW5lcmF0ZWQgbXVsdGl4aWRzLgorIworIyBCZWNhdXNlIHRo aXMgZnVuY3Rpb24gaXMgdXNlZCB0byBnZW5lcmF0ZSB0ZXN0IGRhdGEgb24gdGhlIG9sZAor IyBpbnN0YWxsYXRpb24sIGl0IG5lZWRzIHRvIHdvcmsgd2l0aCBvbGRlciBQb3N0Z3JlU1FM IHNlcnZlcgorIyB2ZXJzaW9ucy4KKyMKKyMgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBj bHVzdGVyIHRvIGNvbm5lY3QgdG8sIHRoZSBzZWNvbmQgYXJndW1lbnQKKyMgaXMgYSBjbHVz dGVyIHVzaW5nIHRoZSBuZXcgdmVyc2lvbi4gV2UgbmVlZCB0aGUgJ3BzcWwnIGJpbmFyeSBm cm9tCisjIHRoZSBuZXcgdmVyc2lvbiwgdGhlIG5ldyBjbHVzdGVyIGlzIG90aGVyd2lzZSB1 bnVzZWQuIChXZSBuZWVkIHRvCisjIHVzZSB0aGUgbmV3ICdwc3FsJyBiZWNhdXNlIHNvbWUg b2YgdGhlIG1vcmUgYWR2YW5jZWQgYmFja2dyb3VuZCBwc3FsCisjIHBlcmwgbW9kdWxlIGZl YXR1cmVzIGRlcGVuZCBvbiBhIGZhaXJseSByZWNlbnQgcHNxbCB2ZXJzaW9uLikKK3N1YiBt eGFjdF93b3JrbG9hZAoreworCW15ICRub2RlID0gc2hpZnQ7ICAgICAgICMgQ2x1c3RlciB0 byBjb25uZWN0IHRvCisJbXkgJGJpbm5vZGUgPSBzaGlmdDsgICAgIyBVc2UgdGhlIHBzcWwg YmluYXJ5IGZyb20gdGhpcyBjbHVzdGVyCisKKwlteSAkY29ubnN0ciA9ICRub2RlLT5jb25u c3RyKCdwb3N0Z3JlcycpOworCisJJG5vZGUtPnN0YXJ0OworCSRub2RlLT5zYWZlX3BzcWwo CisJCSdwb3N0Z3JlcycsIHFxWworCQlDUkVBVEUgVEFCTEUgbXhvZmZ0ZXN0IChpZCBJTlQg UFJJTUFSWSBLRVksIG5fdXBkYXRlZCBJTlQpCisJCSAgV0lUSCAoQVVUT1ZBQ1VVTV9FTkFC TEVEPUZBTFNFKTsKKwkJSU5TRVJUIElOVE8gbXhvZmZ0ZXN0IFNFTEVDVCBHLCAwIEZST00g R0VORVJBVEVfU0VSSUVTKDEsIDUwKSBHOworCV0pOworCisJbXkgJG5jbGllbnRzID0gMjA7 CisJbXkgJHVwZGF0ZV9ldmVyeSA9IDEzOworCW15ICRhYm9ydF9ldmVyeSA9IDExOworCW15 IEBjb25uZWN0aW9ucyA9ICgpOworCisJIyBTaWxlbmNlIHRoZSBsb2dnaW5nIG9mIHRoZSBz dGF0ZW1lbnRzIHdlIHJ1biB0byBhdm9pZAorCSMgdW5uZWNlc3NhcmlseSBibG9hdGluZyB0 aGUgdGVzdCBsb2dzLiBUaGlzIHJ1bnMgYmVmb3JlIHRoZQorCSMgdXBncmFkZSB3ZSdyZSB0 ZXN0aW5nLCBzbyB0aGUgZGV0YWlscyBzaG91bGQgbm90IGJlIHZlcnkKKwkjIGludGVyZXN0 aW5nIGZvciBkZWJ1Z2dpbmcuIEJ1dCBpZiBuZWVkZWQsIHlvdSBjYW4gbWFrZSBpdCBtb3Jl CisJIyB2ZXJib3NlIGJ5IHNldHRpbmcgdGhpcy4KKwlteSAkdmVyYm9zZSA9IDA7CisKKwkj IE9wZW4gbXVsdGlwbGUgY29ubmVjdGlvbnMgdG8gdGhlIGRhdGFiYXNlLiBTdGFydCBhIHRy YW5zYWN0aW9uCisJIyBpbiBlYWNoIGNvbm5lY3Rpb24uCisJZm9yICgwIC4uICRuY2xpZW50 cykKKwl7CisJCSMgVXNlIHRoZSBwc3FsIGJpbmFyeSBmcm9tIHRoZSBuZXcgaW5zdGFsbGF0 aW9uLiBUaGUKKwkJIyBCYWNrZ3JvdW5kUHNxbCBmdW5jdGlvbmFsaXR5IGRvZXNuJ3Qgd29y ayB3aXRoIG9sZGVyIHBzcWwKKwkJIyB2ZXJzaW9ucy4KKwkJbXkgJGNvbm4gPSAkYmlubm9k ZS0+YmFja2dyb3VuZF9wc3FsKCcnLAorCQkJY29ubnN0ciA9PiAkbm9kZS0+Y29ubnN0cign cG9zdGdyZXMnKSk7CisKKwkJJGNvbm4tPnF1ZXJ5X3NhZmUoIlNFVCBsb2dfc3RhdGVtZW50 PW5vbmUiLCB2ZXJib3NlID0+ICR2ZXJib3NlKQorCQkgIHVubGVzcyAkdmVyYm9zZTsKKwkJ JGNvbm4tPnF1ZXJ5X3NhZmUoIlNFVCBlbmFibGVfc2Vxc2Nhbj1vZmYiLCB2ZXJib3NlID0+ ICR2ZXJib3NlKTsKKwkJJGNvbm4tPnF1ZXJ5X3NhZmUoIkJFR0lOIiwgdmVyYm9zZSA9PiAk dmVyYm9zZSk7CisKKwkJcHVzaChAY29ubmVjdGlvbnMsICRjb25uKTsKKwl9CisKKwkjIFJ1 biBxdWVyaWVzIHVzaW5nIGN5Y2xpbmcgdGhyb3VnaCB0aGUgY29ubmVjdGlvbnMgaW4gYQor CSMgcm91bmQtcm9iaW4gZmFzaGlvbi4gV2Uga2VlcCBhIHRyYW5zYWN0aW9uIG9wZW4gaW4g ZWFjaAorCSMgY29ubmVjdGlvbiBhdCBhbGwgdGltZXMsIGFuZCBsb2NrL3VwZGF0ZSB0aGUg cm93cy4gV2l0aCAxMAorCSMgY29ubmVjdGlvbnMsIGVhY2ggU0VMRUNUIEZPUiBLRVkgU0hB UkUgcXVlcnkgZ2VuZXJhdGVzIGEgbmV3CisJIyBtdWx0aXhpZCwgY29udGFpbmluZyB0aGUg MTAgWElEcyBvZiBhbGwgdGhlIHRyYW5zYWN0aW9ucyBydW5uaW5nCisJIyBhdCB0aGUgdGlt ZS4KKwlmb3IgKG15ICRpID0gMDsgJGkgPCAzMDAwOyAkaSsrKQorCXsKKwkJbXkgJGNvbm4g PSAkY29ubmVjdGlvbnNbICRpICUgJG5jbGllbnRzIF07CisKKwkJbXkgJHNxbDsKKwkJaWYg KCRpICUgJGFib3J0X2V2ZXJ5ID09IDApCisJCXsKKwkJCSRzcWwgPSAiQUJPUlQ7ICI7CisJ CX0KKwkJZWxzZQorCQl7CisJCQkkc3FsID0gIkNPTU1JVDsgIjsKKwkJfQorCQkkc3FsIC49 ICJCRUdJTjsgIjsKKworCQlpZiAoJGkgJSAkdXBkYXRlX2V2ZXJ5ID09IDApCisJCXsKKwkJ CSRzcWwgLj0gcXFbCisJCQkgIFVQREFURSBteG9mZnRlc3QgU0VUIG5fdXBkYXRlZCA9IG5f dXBkYXRlZCArIDEgV0hFUkUgaWQgPSAke2l9ICUgNTA7CisJCQldOworCQl9CisJCWVsc2UK KwkJeworCQkJbXkgJHRocmVzaG9sZCA9IGludCgkaSAvIDMwMDAgKiA1MCk7CisJCQkkc3Fs IC49IHFxWworCQkJICBzZWxlY3QgY291bnQoKikgZnJvbSAoCisJCQkJU0VMRUNUICogRlJP TSBteG9mZnRlc3QgV0hFUkUgaWQgPj0gJHRocmVzaG9sZCBGT1IgS0VZIFNIQVJFCisJCQkg ICkgYXMgeAorCQkJXTsKKwkJfQorCQkkY29ubi0+cXVlcnlfc2FmZSgkc3FsLCB2ZXJib3Nl ID0+ICR2ZXJib3NlKTsKKwl9CisKKwlmb3IgbXkgJGNvbm4gKEBjb25uZWN0aW9ucykKKwl7 CisJCSRjb25uLT5xdWl0KCk7CisJfQorCisJJG5vZGUtPnN0b3A7CisJcmV0dXJuOworfQor CisjIFJldHVybiBjb250ZW50cyBvZiB0aGUgJ214b2ZmdGVzdCcgdGFibGUsIGNyZWF0ZWQg YnkgbXhhY3Rfd29ya2xvYWQKK3N1YiBnZXRfdGVzdF90YWJsZV9jb250ZW50cworeworCW15 ICgkbm9kZSwgJGZpbGVuYW1lKSA9IEBfOworCisJbXkgJGNvbnRlbnRzID0gJG5vZGUtPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGN0aWQsIHhtaW4sIHhtYXgsICogRlJP TSBteG9mZnRlc3QiKTsKKworCW15ICRwYXRoID0gJHRlbXBkaXIgLiAnLycgLiAkZmlsZW5h bWU7CisJb3BlbihteSAkZmgsICc+JywgJHBhdGgpCisJICB8fCBkaWUgImNvdWxkIG5vdCBv cGVuICRwYXRoIGZvciB3cml0aW5nICQhIjsKKwlwcmludCAkZmggJGNvbnRlbnRzOworCWNs b3NlKCRmaCk7CisKKwlyZXR1cm4gJHBhdGg7Cit9CisKKyMgUmV0dXJuIHRoZSBtZW1iZXJz IG9mIGFsbCB1cGRhdGluZyBtdWx0aXhpZHMgaW4gdGhlIGdpdmVuIHJhbmdlCitzdWIgZ2V0 X3VwZGF0aW5nX211bHRpeGFjdF9tZW1iZXJzCit7CisJbXkgKCRub2RlLCAkZnJvbSwgJHRv LCAkZmlsZW5hbWUpID0gQF87CisKKwlteSAkcGF0aCA9ICR0ZW1wZGlyIC4gJy8nIC4gJGZp bGVuYW1lOworCW9wZW4obXkgJGZoLCAnPicsICRwYXRoKQorCSAgfHwgZGllICJjb3VsZCBu b3Qgb3BlbiAkcGF0aCBmb3Igd3JpdGluZyAkISI7CisKKwlpZiAoJHRvID49ICRmcm9tKQor CXsKKwkJbXkgJHJlcyA9ICRub2RlLT5zYWZlX3BzcWwoCisJCQkncG9zdGdyZXMnLCBxcVsK KwkJCVNFTEVDVCBtdWx0aSwgbW9kZSwgeGlkCisJCQlGUk9NIGdlbmVyYXRlX3Nlcmllcygk ZnJvbSwgJHRvIC0gMSkgYXMgbXVsdGksCisJCQkJIHBnX2dldF9tdWx0aXhhY3RfbWVtYmVy cyhtdWx0aTo6dGV4dDo6eGlkKQorCQkJV0hFUkUgbW9kZSBub3QgaW4gKCdrZXlzaCcsICdz aCcpOworCQldKTsKKwkJcHJpbnQgJGZoICRyZXM7CisJfQorCWVsc2UKKwl7CisJCSMgTXVs dGl4aWRzIHdyYXBwZWQgYXJvdW5kLiBTcGxpdCB0aGUgcXVlcnkgaW50byB0d28gcGFydHMs CisJCSMgYmVmb3JlIGFuZCBhZnRlciB0aGUgd3JhcGFyb3VuZC4KKwkJbXkgJHJlcyA9ICRu b2RlLT5zYWZlX3BzcWwoCisJCQkncG9zdGdyZXMnLCBxcVsKKwkJCVNFTEVDVCBtdWx0aSwg bW9kZSwgeGlkCisJCQlGUk9NIGdlbmVyYXRlX3NlcmllcygkZnJvbSwgNDI5NDk2NzI5NSkg YXMgbXVsdGksCisJCQkJIHBnX2dldF9tdWx0aXhhY3RfbWVtYmVycyhtdWx0aTo6dGV4dDo6 eGlkKQorCQkJV0hFUkUgbW9kZSBub3QgaW4gKCdrZXlzaCcsICdzaCcpOworCQldKTsKKwkJ cHJpbnQgJGZoICRyZXM7CisJCSRyZXMgPSAkbm9kZS0+c2FmZV9wc3FsKAorCQkJJ3Bvc3Rn cmVzJywgcXFbCisJCQlTRUxFQ1QgbXVsdGksIG1vZGUsIHhpZAorCQkJRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMSwgJHRvIC0gMSkgYXMgbXVsdGksCisJCQkJIHBnX2dldF9tdWx0aXhhY3Rf bWVtYmVycyhtdWx0aTo6dGV4dDo6eGlkKQorCQkJV0hFUkUgbW9kZSBub3QgaW4gKCdrZXlz aCcsICdzaCcpOworCQldKTsKKwkJcHJpbnQgJGZoICRyZXM7CisJfQorCisJY2xvc2UoJGZo KTsKKwlyZXR1cm4gJHBhdGg7Cit9CisKKyMgUmVhZCBtdWx0aXhpZCByZWxhdGVkIGZpZWxk cyBmcm9tIHRoZSBjb250cm9sIGZpbGUKKyMKKyMgTm90ZTogVGhpcyBpcyB1c2VkIG9uIGJv dGggdGhlIG9sZCBhbmQgdGhlIG5ldyBpbnN0YWxsYXRpb24sIHNvIHRoZQorIyBjb21tYW5k IGFyZ3VtZW50cyBhbmQgdGhlIG91dHB1dCBwYXJzaW5nIHVzZWQgaGVyZSBtdXN0IHdvcmsg d2l0aAorIyBhbGwgUG9zdGdyZVNRTCB2ZXJzaW9ucyBzdXBwb3J0ZWQgYnkgdGhlIHRlc3Qu CitzdWIgcmVhZF9tdWx0aXhpZF9maWVsZHMKK3sKKwlteSAkbm9kZSA9IHNoaWZ0OworCisJ bXkgJHBnX2NvbnRyb2xkYXRhX3BhdGggPSAkbm9kZS0+aW5zdGFsbGVkX2NvbW1hbmQoJ3Bn X2NvbnRyb2xkYXRhJyk7CisJbXkgKCRzdGRvdXQsICRzdGRlcnIpID0KKwkgIHJ1bl9jb21t YW5kKFsgJHBnX2NvbnRyb2xkYXRhX3BhdGgsICRub2RlLT5kYXRhX2RpciBdKTsKKwkkc3Rk b3V0ID1+IC9eTGF0ZXN0IGNoZWNrcG9pbnQncyBvbGRlc3RNdWx0aVhpZDpccyooLiopJC9t CisJICBvciBkaWUgImNvdWxkIG5vdCByZWFkIG9sZGVzdE11bHRpWGlkIGZyb20gcGdfY29u dHJvbGRhdGEiOworCW15ICRvbGRlc3RfbXVsdGlfeGlkID0gJDE7CisJJHN0ZG91dCA9fiAv XkxhdGVzdCBjaGVja3BvaW50J3MgTmV4dE11bHRpWGFjdElkOlxzKiguKikkL20KKwkgIG9y IGRpZSAiY291bGQgbm90IHJlYWQgTmV4dE11bHRpWGFjdElkIGZyb20gcGdfY29udHJvbGRh dGEiOworCW15ICRuZXh0X211bHRpX3hpZCA9ICQxOworCSRzdGRvdXQgPX4gL15MYXRlc3Qg Y2hlY2twb2ludCdzIE5leHRNdWx0aU9mZnNldDpccyooLiopJC9tCisJICBvciBkaWUgImNv dWxkIG5vdCByZWFkIE5leHRNdWx0aU9mZnNldCBmcm9tIHBnX2NvbnRyb2xkYXRhIjsKKwlt eSAkbmV4dF9tdWx0aV9vZmZzZXQgPSAkMTsKKworCXJldHVybiAoJG9sZGVzdF9tdWx0aV94 aWQsICRuZXh0X211bHRpX3hpZCwgJG5leHRfbXVsdGlfb2Zmc2V0KTsKK30KKworIyBSZXNl dCBhIGNsdXN0ZXIncyBuZXh0IG11bHRpeGlkIGFuZCBteG9mZnNldCB0byBnaXZlbiB2YWx1 ZXMuCisjCisjIE5vdGU6IFRoaXMgaXMgdXNlZCBvbiB0aGUgb2xkIGluc2FsbGF0aW9uLCBz byB0aGUgY29tbWFuZCBhcmd1bWVudHMKKyMgYW5kIHRoZSBvdXRwdXQgcGFyc2luZyB1c2Vk IGhlcmUgbXVzdCB3b3JrIHdpdGggYWxsIHByZS12MTkKKyMgUG9zdGdyZVNRTCB2ZXJzaW9u cyBzdXBwb3J0ZWQgYnkgdGhlIHRlc3QuCitzdWIgcmVzZXRfbXhpZF9teG9mZnNldF9wcmVf djE5Cit7CisJbXkgJG5vZGUgPSBzaGlmdDsKKwlteSAkbXhpZCA9IHNoaWZ0OworCW15ICRt eG9mZnNldCA9IHNoaWZ0OworCisJbXkgJHBnX3Jlc2V0d2FsX3BhdGggPSAkbm9kZS0+aW5z dGFsbGVkX2NvbW1hbmQoJ3BnX3Jlc2V0d2FsJyk7CisJIyBHZXQgYmxvY2sgc2l6ZQorCW15 ICgkb3V0LCAkZXJyKSA9CisJICBydW5fY29tbWFuZChbICRwZ19yZXNldHdhbF9wYXRoLCAn LS1kcnktcnVuJywgJG5vZGUtPmRhdGFfZGlyIF0pOworCSRvdXQgPX4gL15EYXRhYmFzZSBi bG9jayBzaXplOiAqKFxkKykkL20gb3IgZGllOworCisJIyBWZXJpZnkgdGhhdCBubyBtdWx0 aXhpZHMgYXJlIGN1cnJlbnRseSBpbiB1c2UuIFJlc2V0dGluZyB3b3VsZAorCSMgZGVzdHJv eSB0aGVtLiAoQSBmcmVzaGx5IGluaXRpYWxpemVkIGNsdXN0ZXIgaGFzIG5vIG11bHRpeGlk cy4pCisJJG91dCA9fiAvXkxhdGVzdCBjaGVja3BvaW50J3MgTmV4dE11bHRpWGFjdElkOiAq KFxkKykkL20gb3IgZGllOworCW15ICRuZXh0X214aWQgPSAkMTsKKwkkb3V0ID1+IC9eTGF0 ZXN0IGNoZWNrcG9pbnQncyBvbGRlc3RNdWx0aVhpZDogKihcZCspJC9tIG9yIGRpZTsKKwlt eSAkb2xkZXN0X214aWQgPSAkMTsKKwlkaWUgImNsdXN0ZXIgaGFzIHNvbWUgbXVsdGl4aWRz IGluIHVzZSIgdW5sZXNzICRuZXh0X214aWQgPT0gJG9sZGVzdF9teGlkOworCisJIyBFeHRy YWN0IGEgZmV3IG90aGVyIHZhbHVlcyBmcm9tIHBnX3Jlc2V0d2FsIC0tZHJ5LXJ1biBvdXRw dXQKKwkjIHRoYXQgd2UgbmVlZCBmb3IgdGhlIGNhbGN1bGF0aW9ucyBiZWxvdworCSRvdXQg PX4gL15EYXRhYmFzZSBibG9jayBzaXplOiAqKFxkKykkL20gb3IgZGllOworCW15ICRibGNr c3ogPSAkMTsKKwkjIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQgaXMgYWx3YXlzIDMyIG9uIHBy ZS0xOSB2ZXJzaW9ucworCW15ICRzbHJ1X3BhZ2VzX3Blcl9zZWdtZW50ID0gMzI7CisKKwkj IERvIHRoZSByZXNldAorCW15IEBjbWQgPSAoCisJCSRwZ19yZXNldHdhbF9wYXRoLAorCQkn LS1wZ2RhdGEnID0+ICRub2RlLT5kYXRhX2RpciwKKwkJJy0tbXVsdGl4YWN0LW9mZnNldCcg PT4gJG14b2Zmc2V0LAorCQknLS1tdWx0aXhhY3QtaWRzJyA9PiAiJG14aWQsJG14aWQiKTsK Kwljb21tYW5kX29rKFxAY21kLCAncmVzZXQgbXVsdGl4aWRzIGFuZCBvZmZzZXQnKTsKKwor CSMgcGdfcmVzZXR3YWwganVzdCB1cGRhdGVzIHRoZSBjb250cm9sIGZpbGUuIFRoZSBjbHVz dGVyIHdpbGwKKwkjIHJlZnVzZSB0byBzdGFydCB1cCwgaWYgdGhlIFNMUlUgc2VnbWVudHMg Y29ycmVzcG9uZGluZyB0byB0aGUKKwkjIG5leHQgbXVsdGl4aWQgYW5kIG9mZnNldCBkb2Vz IG5vdCBleGlzdC4gQ3JlYXRlIGEgc2VnbWVudHMgdGhhdAorCSMgY292ZXJzIHRoZSBnaXZl biB2YWx1ZXMsIGZpbGxlZCB3aXRoIHplcm9zLiBCdXQgZmlyc3QgcmVtb3ZlIGFueQorCSMg b2xkIHNlZ21lbnRzLgorCXVubGluayBnbG9iICRub2RlLT5kYXRhX2RpciAuICIvcGdfbXVs dGl4YWN0L29mZnNldHMvKiI7CisJdW5saW5rIGdsb2IgJG5vZGUtPmRhdGFfZGlyIC4gIi9w Z19tdWx0aXhhY3QvbWVtYmVycy8qIjsKKworCSMgSW5pdGlhbGl6ZSB0aGUgJ29mZnNldHMn IFNMUlUgZmlsZSBjb250YWluaW5nIHRoZSBuZXcgbmV4dCBtdWx0aXhpZAorCSMgd2l0aCB6 ZXJvcworCSMKKwkjIHNpemVvZihNdWx0aVhhY3RPZmZzZXQpID09IDQgaW4gUG9zdGdyZVNR TCB2ZXJzaW9ucyBiZWZvcmUgMTkKKwlteSAkbXVsdGl4YWN0X29mZnNldHNfcGVyX3BhZ2Ug PSAkYmxja3N6IC8gNDsKKwlteSAkc2Vnbm8gPQorCSAgaW50KCRteGlkIC8gJG11bHRpeGFj dF9vZmZzZXRzX3Blcl9wYWdlIC8gJHNscnVfcGFnZXNfcGVyX3NlZ21lbnQpOworCW15ICRw YXRoID0KKwkgIHNwcmludGYoJyVzL3BnX211bHRpeGFjdC9vZmZzZXRzLyUwNFgnLCAkbm9k ZS0+ZGF0YV9kaXIsICRzZWdubyk7CisJb3BlbiBteSAkZmgsICI+IiwgJHBhdGgKKwkgIG9y IGRpZSAiY291bGQgbm90IG9wZW4gXCIkcGF0aFwiOiAkISI7CisJYmlubW9kZSAkZmg7CisJ bXkgJGJ5dGVzX3Blcl9zZWcgPSAkc2xydV9wYWdlc19wZXJfc2VnbWVudCAqICRibGNrc3o7 CisJc3lzd3JpdGUoJGZoLCAiXDAiIHggJGJ5dGVzX3Blcl9zZWcpID09ICRieXRlc19wZXJf c2VnCisJICBvciBkaWUgImNvdWxkIG5vdCB3cml0ZSB0byBcIiRwYXRoXCI6ICQhIjsKKwlj bG9zZSAkZmg7CisKKwkjIFNhbWUgZm9yIHRoZSAnbWVtYmVycycgU0xSVQorCW15ICRtdWx0 aXhhY3RfbWVtYmVyc19wZXJfcGFnZSA9IGludCgkYmxja3N6IC8gMjApICogNDsKKwkkc2Vn bm8gPQorCSAgaW50KCRteG9mZnNldCAvICRtdWx0aXhhY3RfbWVtYmVyc19wZXJfcGFnZSAv ICRzbHJ1X3BhZ2VzX3Blcl9zZWdtZW50KTsKKwkkcGF0aCA9IHNwcmludGYgIiVzL3BnX211 bHRpeGFjdC9tZW1iZXJzLyUwNFgiLCAkbm9kZS0+ZGF0YV9kaXIsICRzZWdubzsKKwlvcGVu ICRmaCwgIj4iLCAkcGF0aAorCSAgb3IgZGllICJjb3VsZCBub3Qgb3BlbiBcIiRwYXRoXCI6 ICQhIjsKKwliaW5tb2RlICRmaDsKKwlzeXN3cml0ZSgkZmgsICJcMCIgeCAkYnl0ZXNfcGVy X3NlZykgPT0gJGJ5dGVzX3Blcl9zZWcKKwkgIG9yIGRpZSAiY291bGQgbm90IHdyaXRlIHRv IFwiJHBhdGhcIjogJCEiOworCWNsb3NlKCRmaCk7Cit9CisKKyMgTWFpbiB0ZXN0IHdvcmto b3JzZSByb3V0aW5lLgorIyBEdW1wIGRhdGEgb24gb2xkIHZlcnNpb24sIHJ1biBwZ191cGdy YWRlLCBjb21wYXJlIGRhdGEgYWZ0ZXIgdXBncmFkZS4KK3N1YiB1cGdyYWRlX2FuZF9jb21w YXJlCit7CisJbXkgJHRhZyA9IHNoaWZ0OworCW15ICRvbGRub2RlID0gc2hpZnQ7CisJbXkg JG5ld25vZGUgPSBzaGlmdDsKKworCWNvbW1hbmRfb2soCisJCVsKKwkJCSdwZ191cGdyYWRl JywgJy0tbm8tc3luYycsCisJCQknLS1vbGQtZGF0YWRpcicgPT4gJG9sZG5vZGUtPmRhdGFf ZGlyLAorCQkJJy0tbmV3LWRhdGFkaXInID0+ICRuZXdub2RlLT5kYXRhX2RpciwKKwkJCSct LW9sZC1iaW5kaXInID0+ICRvbGRub2RlLT5jb25maWdfZGF0YSgnLS1iaW5kaXInKSwKKwkJ CSctLW5ldy1iaW5kaXInID0+ICRuZXdub2RlLT5jb25maWdfZGF0YSgnLS1iaW5kaXInKSwK KwkJCSctLXNvY2tldGRpcicgPT4gJG5ld25vZGUtPmhvc3QsCisJCQknLS1vbGQtcG9ydCcg PT4gJG9sZG5vZGUtPnBvcnQsCisJCQknLS1uZXctcG9ydCcgPT4gJG5ld25vZGUtPnBvcnQs CisJCV0sCisJCSdydW4gb2YgcGdfdXBncmFkZSBmb3IgbmV3IGluc3RhbmNlJyk7CisKKwkj IER1bXAgY29udGVudHMgb2YgdGhlIHRlc3QgdGFibGUsIGFuZCB0aGUgc3RhdHVzIG9mIGFs bCB1cGRhdGluZworCSMgbXVsdGl4aWRzIGZyb20gdGhlIG9sZCBjbHVzdGVyLiAoTG9ja2lu Zy1vbmx5IG11bHRpeGlkcyBkb24ndAorCSMgbmVlZCB0byBiZSBwcmVzZXJ2ZWQgc28gd2Ug aWdub3JlIHRob3NlKQorCSMKKwkjIE5vdGU6IHdlIGRvIHRoaXMgKmFmdGVyKiBydW5uaW5n IHBnX3VwZ3JhZGUsIHRvIGVuc3VyZSB0aGF0IHdlCisJIyBkb24ndCBzZXQgYWxsIHRoZSBo aW50IGJpdHMgYmVmb3JlIHVwZ3JhZGUgYnkgZG9pbmcgdGhlIFNFTEVDVAorCSMgb24gdGhl IHRhYmxlLgorCW15ICgkbXVsdGl4aWRzX3N0YXJ0LCAkbXVsdGl4aWRzX2VuZCwgdW5kZWYp ID0KKwkgIHJlYWRfbXVsdGl4aWRfZmllbGRzKCRvbGRub2RlKTsKKwkkb2xkbm9kZS0+c3Rh cnQ7CisJbXkgJG9sZF90YWJsZV9jb250ZW50cyA9CisJICBnZXRfdGVzdF90YWJsZV9jb250 ZW50cygkb2xkbm9kZSwgIm9sZG5vZGVfJHt0YWd9X3RhYmxlX2NvbnRlbnRzIik7CisJbXkg JG9sZF9tdWx0aXhhY3RzID0KKwkgIGdldF91cGRhdGluZ19tdWx0aXhhY3RfbWVtYmVycygk b2xkbm9kZSwgJG11bHRpeGlkc19zdGFydCwKKwkJJG11bHRpeGlkc19lbmQsICJvbGRub2Rl XyR7dGFnfV9tdWx0aXhhY3RzIik7CisJJG9sZG5vZGUtPnN0b3A7CisKKwkjIENvbXBhcmUg dGhlbSB3aXRoIHVwZ3JhZGVkIGNsdXN0ZXIKKwkkbmV3bm9kZS0+c3RhcnQ7CisJbXkgJG5l d190YWJsZV9jb250ZW50cyA9CisJICBnZXRfdGVzdF90YWJsZV9jb250ZW50cygkbmV3bm9k ZSwgIm5ld25vZGVfJHt0YWd9X3RhYmxlX2NvbnRlbnRzIik7CisJbXkgJG5ld19tdWx0aXhh Y3RzID0KKwkgIGdldF91cGRhdGluZ19tdWx0aXhhY3RfbWVtYmVycygkbmV3bm9kZSwgJG11 bHRpeGlkc19zdGFydCwKKwkJJG11bHRpeGlkc19lbmQsICJuZXdub2RlXyR7dGFnfV9tdWx0 aXhhY3RzIik7CisJJG5ld25vZGUtPnN0b3A7CisKKwljb21wYXJlX2ZpbGVzKCRvbGRfdGFi bGVfY29udGVudHMsICRuZXdfdGFibGVfY29udGVudHMsCisJCSd0ZXN0IHRhYmxlIGNvbnRl bnRzIGZyb20gb3JpZ2luYWwgYW5kIHVwZ3JhZGVkIGNsdXN0ZXJzIG1hdGNoJyk7CisJY29t cGFyZV9maWxlcygkb2xkX211bHRpeGFjdHMsICRuZXdfbXVsdGl4YWN0cywKKwkJJ211bHRp eGFjdCBtZW1iZXJzIGZyb20gb3JpZ2luYWwgYW5kIHVwZ3JhZGVkIGNsdXN0ZXJzIG1hdGNo Jyk7Cit9CisKK215ICRvbGRfdmVyc2lvbjsKKworIyBCYXNpYyBzY2VuYXJpbzogQ3JlYXRl IGEgY2x1c3RlciB1c2luZyBvbGQgaW5zdGFsbGF0aW9uLCBydW4KKyMgbXVsdGl4aWQtY3Jl YXRpbmcgd29ya2xvYWQgb24gaXQsIHRoZW4gdXBncmFkZS4KKyMKKyMgVGhpcyB3b3JrcyBl dmVuIGV2ZW4gaWYgdGhlIG9sZCBhbmQgbmV3IHZlcnNpb24gaXMgdGhlIHNhbWUsCisjIGFs dGhvdWdoIGl0J3Mgbm90IHZlcnkgaW50ZXJlc3RpbmcgYXMgdGhlIGNvbnZlcnNpb24gcm91 dGluZXMgb25seQorIyBydW4gd2hlbiB1cGdyYWRpbmcgZnJvbSBhIHByZS12MTkgY2x1c3Rl ci4KK3sKKwlteSAkdGFnID0gJ2Jhc2ljJzsKKwlteSAkb2xkID0KKwkgIFBvc3RncmVTUUw6 OlRlc3Q6OkNsdXN0ZXItPm5ldygiJHt0YWd9X29sZG5vZGUiLAorCQlpbnN0YWxsX3BhdGgg PT4gJEVOVntvbGRpbnN0YWxsfSk7CisJbXkgJG5ldyA9IFBvc3RncmVTUUw6OlRlc3Q6OkNs dXN0ZXItPm5ldygiJHt0YWd9X25ld25vZGUiKTsKKworCSRvbGQtPmluaXQoZXh0cmEgPT4g WyctayddKTsKKworCSRvbGRfdmVyc2lvbiA9ICRvbGQtPnBnX3ZlcnNpb247CisJbm90ZSAi b2xkIGluc3RhbGxhdGlvbiBpcyB2ZXJzaW9uICRvbGRfdmVyc2lvblxuIjsKKworCSMgUnVu IHRoZSB3b3JrbG9hZAorCW15ICh1bmRlZiwgJHN0YXJ0X214aWQsICRzdGFydF9teG9mZikg PSByZWFkX211bHRpeGlkX2ZpZWxkcygkb2xkKTsKKwlteGFjdF93b3JrbG9hZCgkb2xkLCAk bmV3KTsKKwlteSAodW5kZWYsICRmaW5pc2hfbXhpZCwgJGZpbmlzaF9teG9mZikgPSByZWFk X211bHRpeGlkX2ZpZWxkcygkb2xkKTsKKworCW5vdGUgIlRlc3RpbmcgdXBncmFkZSwgJHt0 YWd9IHNjZW5hcmlvXG4iCisJICAuICIgbXhpZCBmcm9tICR7c3RhcnRfbXhpZH0gdG8gJHtm aW5pc2hfbXhpZH1cbiIKKwkgIC4gIiBvbGRub2RlIG14b2ZmIGZyb20gJHtzdGFydF9teG9m Zn0gdG8gJHtmaW5pc2hfbXhvZmZ9XG4iOworCisJJG5ldy0+aW5pdDsKKwl1cGdyYWRlX2Fu ZF9jb21wYXJlKCR0YWcsICRvbGQsICRuZXcpOworfQorCisjIFdyYXBhcm91bmQgc2NlbmFy aW86IFRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIGJhc2ljIHNjZW5hcmlvLCBidXQgdGhlCisj IG9sZCBjbHVzdGVyIGdvZXMgdGhyb3VnaCBtdWx0aXhpZCBhbmQgb2Zmc2V0IHdyYXBhcm91 bmQuCisjCisjIFRoaXMgcmVxdWlyZXMgdGhlIG9sZCBpbnN0YWxsYXRpb24gdG8gYmUgdmVy c2lvbiAxOSBvZiBvbGRlciwKKyMgYmVjYXVzZSB0aGUgaGFja3Mgd2UgdXNlIHRvIHJlc2V0 IHRoZSBvbGQgY2x1c3RlciB0byBhIHN0YXRlIGp1c3QKKyMgYmVmb3JlIHRoZSB3cmFwYXJv dW5kIHJlbHkgb24gdGhlIHByZS12MTkgZmlsZSBmb3JtYXQuIElmIHRoZSBvbGQKKyMgY2x1 c3RlciBpcyBvZiB2MTkgb3IgYWJvdmUsIG11bHRpeGFjdCBTTFJVIGNvbnZlcnNpb24gaXMg bm90IG5lZWRlZAorIyBhbnl3YXkuCitTS0lQOgoreworCXNraXAKKwkgICJza2lwcGluZyBt eG9mZnNldCBjb252ZXJzaW9uIHRlc3RzIGJlY2F1c2UgdXBncmFkaW5nIGZyb20gdGhlIG9s ZCB2ZXJzaW9uIGRvZXMgbm90IHJlcXVpcmUgY29udmVyc2lvbiIKKwkgIGlmICgkb2xkX3Zl cnNpb24gPj0gJzE5ZGV2ZWwnKTsKKworCW15ICR0YWcgPSAnd3JhcGFyb3VuZCc7CisJbXkg JG9sZCA9CisJICBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoIiR7dGFnfV9vbGRu b2RlIiwKKwkJaW5zdGFsbF9wYXRoID0+ICRFTlZ7b2xkaW5zdGFsbH0pOworCW15ICRuZXcg PSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoIiR7dGFnfV9uZXdub2RlIik7CisK Kwkkb2xkLT5pbml0KGV4dHJhID0+IFsnLWsnXSk7CisKKwkjIFJlc2V0IHRoZSBvbGQgY2x1 c3RlciB0byBqdXN0IGJlZm9yZSBtdWx0aXhpZCBhbmQgMzItYml0IG9mZnNldCB3cmFwYXJv dW5kLgorCXJlc2V0X214aWRfbXhvZmZzZXRfcHJlX3YxOSgkb2xkLCAweEZGRkZGQTAwLCAw eEZGRkZFQzAwKTsKKworCSMgUnVuIHRoZSB3b3JrbG9hZC4gVGhpcyBjcm9zc2VzIG11bHRp eGlkIGFuZCBvZmZzZXQgd3JhcGFyb3VuZC4KKwlteSAodW5kZWYsICRzdGFydF9teGlkLCAk c3RhcnRfbXhvZmYpID0gcmVhZF9tdWx0aXhpZF9maWVsZHMoJG9sZCk7CisJbXhhY3Rfd29y a2xvYWQoJG9sZCwgJG5ldyk7CisJbXkgKHVuZGVmLCAkZmluaXNoX214aWQsICRmaW5pc2hf bXhvZmYpID0gcmVhZF9tdWx0aXhpZF9maWVsZHMoJG9sZCk7CisKKwlub3RlICJUZXN0aW5n IHVwZ3JhZGUsICR7dGFnfSBzY2VuYXJpb1xuIgorCSAgLiAiIG14aWQgZnJvbSAke3N0YXJ0 X214aWR9IHRvICR7ZmluaXNoX214aWR9XG4iCisJICAuICIgb2xkbm9kZSBteG9mZiBmcm9t ICR7c3RhcnRfbXhvZmZ9IHRvICR7ZmluaXNoX214b2ZmfVxuIjsKKworCSMgVmVyaWZ5IHRo YXQgd3JhcGFyb3VuZHMgaGFwcGVuZWQuCisJY21wX29rKCRmaW5pc2hfbXhpZCwgJzwnLCAk c3RhcnRfbXhpZCwKKwkJIm11bHRpeGlkIHdyYXBwZWQgYXJvdW5kIGluIG9sZCBjbHVzdGVy Iik7CisJY21wX29rKCRmaW5pc2hfbXhvZmYsICc8JywgJHN0YXJ0X214b2ZmLAorCQkibXhv ZmYgd3JhcHBlZCBhcm91bmQgaW4gb2xkIGNsdXN0ZXIiKTsKKworCSRuZXctPmluaXQ7CisJ dXBncmFkZV9hbmRfY29tcGFyZSgkdGFnLCAkb2xkLCAkbmV3KTsKK30KKworZG9uZV90ZXN0 aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmggYi9z cmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmgKaW5kZXggODJlNGJiOTBkZDUuLjY0MzNm ZTE2MzY0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmgKKysr IGIvc3JjL2luY2x1ZGUvYWNjZXNzL211bHRpeGFjdC5oCkBAIC0yOCw4ICsyOCw2IEBACiAK ICNkZWZpbmUgTXVsdGlYYWN0SWRJc1ZhbGlkKG11bHRpKSAoKG11bHRpKSAhPSBJbnZhbGlk TXVsdGlYYWN0SWQpCiAKLSNkZWZpbmUgTWF4TXVsdGlYYWN0T2Zmc2V0CSgoTXVsdGlYYWN0 T2Zmc2V0KSAweEZGRkZGRkZGKQotCiAvKgogICogUG9zc2libGUgbXVsdGl4YWN0IGxvY2sg bW9kZXMgKCJzdGF0dXMiKS4gIFRoZSBmaXJzdCBmb3VyIG1vZGVzIGFyZSBmb3IKICAqIHR1 cGxlIGxvY2tzIChGT1IgS0VZIFNIQVJFLCBGT1IgU0hBUkUsIEZPUiBOTyBLRVkgVVBEQVRF LCBGT1IgVVBEQVRFKTsgdGhlCkBAIC0xMTEsNyArMTA5LDcgQEAgZXh0ZXJuIGJvb2wgTXVs dGlYYWN0SWRJc1J1bm5pbmcoTXVsdGlYYWN0SWQgbXVsdGksIGJvb2wgaXNMb2NrT25seSk7 CiBleHRlcm4gdm9pZCBNdWx0aVhhY3RJZFNldE9sZGVzdE1lbWJlcih2b2lkKTsKIGV4dGVy biBpbnQJR2V0TXVsdGlYYWN0SWRNZW1iZXJzKE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhh Y3RNZW1iZXIgKiptZW1iZXJzLAogCQkJCQkJCQkgIGJvb2wgZnJvbV9wZ3VwZ3JhZGUsIGJv b2wgaXNMb2NrT25seSk7Ci1leHRlcm4gYm9vbCBHZXRNdWx0aVhhY3RJbmZvKHVpbnQzMiAq bXVsdGl4YWN0cywgTXVsdGlYYWN0T2Zmc2V0ICptZW1iZXJzLAorZXh0ZXJuIHZvaWQgR2V0 TXVsdGlYYWN0SW5mbyh1aW50MzIgKm11bHRpeGFjdHMsIE11bHRpWGFjdE9mZnNldCAqbWVt YmVycywKIAkJCQkJCQkgTXVsdGlYYWN0SWQgKm9sZGVzdE11bHRpWGFjdElkLAogCQkJCQkJ CSBNdWx0aVhhY3RPZmZzZXQgKm9sZGVzdE9mZnNldCk7CiBleHRlcm4gYm9vbCBNdWx0aVhh Y3RJZFByZWNlZGVzKE11bHRpWGFjdElkIG11bHRpMSwgTXVsdGlYYWN0SWQgbXVsdGkyKTsK QEAgLTEzMSw4ICsxMjksNyBAQCBleHRlcm4gdm9pZCBCb290U3RyYXBNdWx0aVhhY3Qodm9p ZCk7CiBleHRlcm4gdm9pZCBTdGFydHVwTXVsdGlYYWN0KHZvaWQpOwogZXh0ZXJuIHZvaWQg VHJpbU11bHRpWGFjdCh2b2lkKTsKIGV4dGVybiB2b2lkIFNldE11bHRpWGFjdElkTGltaXQo TXVsdGlYYWN0SWQgb2xkZXN0X2RhdG1pbm14aWQsCi0JCQkJCQkJCU9pZCBvbGRlc3RfZGF0 b2lkLAotCQkJCQkJCQlib29sIGlzX3N0YXJ0dXApOworCQkJCQkJCQlPaWQgb2xkZXN0X2Rh dG9pZCk7CiBleHRlcm4gdm9pZCBNdWx0aVhhY3RHZXRDaGVja3B0TXVsdGkoYm9vbCBpc19z aHV0ZG93biwKIAkJCQkJCQkJCSBNdWx0aVhhY3RJZCAqbmV4dE11bHRpLAogCQkJCQkJCQkJ IE11bHRpWGFjdE9mZnNldCAqbmV4dE11bHRpT2Zmc2V0LApkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL211bHRpeGFjdF9pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNz L211bHRpeGFjdF9pbnRlcm5hbC5oCmluZGV4IDliNTZkZWFlZjMxLi5jNGRkMWFhMDQ0ZiAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL211bHRpeGFjdF9pbnRlcm5hbC5oCisr KyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3RfaW50ZXJuYWwuaApAQCAtMjEsMTcg KzIxLDkgQEAKIC8qCiAgKiBEZWZpbmVzIGZvciBNdWx0aVhhY3RPZmZzZXQgcGFnZSBzaXpl cy4gIEEgcGFnZSBpcyB0aGUgc2FtZSBCTENLU1ogYXMgaXMKICAqIHVzZWQgZXZlcnl3aGVy ZSBlbHNlIGluIFBvc3RncmVzLgotICoKLSAqIE5vdGU6IGJlY2F1c2UgTXVsdGlYYWN0T2Zm c2V0cyBhcmUgMzIgYml0cyBhbmQgd3JhcCBhcm91bmQgYXQgMHhGRkZGRkZGRiwKLSAqIE11 bHRpWGFjdCBwYWdlIG51bWJlcmluZyBhbHNvIHdyYXBzIGFyb3VuZCBhdAotICogMHhGRkZG RkZGRi9NVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRSwgYW5kIHNlZ21lbnQgbnVtYmVyaW5n IGF0Ci0gKiAweEZGRkZGRkZGL01VTFRJWEFDVF9PRkZTRVRTX1BFUl9QQUdFL1NMUlVfUEFH RVNfUEVSX1NFR01FTlQuICBXZSBuZWVkCi0gKiB0YWtlIG5vIGV4cGxpY2l0IG5vdGljZSBv ZiB0aGF0IGZhY3QgaW4gdGhpcyBtb2R1bGUsIGV4Y2VwdCB3aGVuIGNvbXBhcmluZwotICog c2VnbWVudCBhbmQgcGFnZSBudW1iZXJzIGluIFRydW5jYXRlTXVsdGlYYWN0IChzZWUKLSAq IE11bHRpWGFjdE9mZnNldFBhZ2VQcmVjZWRlcykuCiAgKi8KIAotLyogV2UgbmVlZCBmb3Vy IGJ5dGVzIHBlciBvZmZzZXQgKi8KKy8qIFdlIG5lZWQgOCBieXRlcyBwZXIgb2Zmc2V0ICov CiAjZGVmaW5lIE1VTFRJWEFDVF9PRkZTRVRTX1BFUl9QQUdFIChCTENLU1ogLyBzaXplb2Yo TXVsdGlYYWN0T2Zmc2V0KSkKIAogc3RhdGljIGlubGluZSBpbnQ2NApAQCAtODAsMTkgKzcy LDYgQEAgTXVsdGlYYWN0SWRUb09mZnNldFNlZ21lbnQoTXVsdGlYYWN0SWQgbXVsdGkpCiAj ZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFCVwKIAkoTVVMVElYQUNUX01FTUJF UkdST1VQU19QRVJfUEFHRSAqIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUCkK IAotLyoKLSAqIEJlY2F1c2UgdGhlIG51bWJlciBvZiBpdGVtcyBwZXIgcGFnZSBpcyBub3Qg YSBkaXZpc29yIG9mIHRoZSBsYXN0IGl0ZW0KLSAqIG51bWJlciAobWVtYmVyIDB4RkZGRkZG RkYpLCB0aGUgbGFzdCBzZWdtZW50IGRvZXMgbm90IHVzZSB0aGUgbWF4aW11bSBudW1iZXIK LSAqIG9mIHBhZ2VzLCBhbmQgbW9yZW92ZXIgdGhlIGxhc3QgdXNlZCBwYWdlIHRoZXJlaW4g ZG9lcyBub3QgdXNlIHRoZSBzYW1lCi0gKiBudW1iZXIgb2YgaXRlbXMgYXMgcHJldmlvdXMg cGFnZXMuICAoQW5vdGhlciB3YXkgdG8gc2F5IGl0IGlzIHRoYXQgdGhlCi0gKiAweEZGRkZG RkZGIG1lbWJlciBpcyBzb21ld2hlcmUgaW4gdGhlIG1pZGRsZSBvZiB0aGUgbGFzdCBwYWdl LCBzbyB0aGUgcGFnZQotICogaGFzIHNvbWUgZW1wdHkgc3BhY2UgYWZ0ZXIgdGhhdCBpdGVt LikKLSAqCi0gKiBUaGlzIGNvbnN0YW50IGlzIHRoZSBudW1iZXIgb2YgbWVtYmVycyBpbiB0 aGUgbGFzdCBwYWdlIG9mIHRoZSBsYXN0IHNlZ21lbnQuCi0gKi8KLSNkZWZpbmUgTUFYX01F TUJFUlNfSU5fTEFTVF9NRU1CRVJTX1BBR0UgXAotCQkoKHVpbnQzMikgKCgweEZGRkZGRkZG ICUgTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0UpICsgMSkpCi0KIC8qIHBhZ2UgaW4gd2hp Y2ggYSBtZW1iZXIgaXMgdG8gYmUgZm91bmQgKi8KIHN0YXRpYyBpbmxpbmUgaW50NjQKIE1Y T2Zmc2V0VG9NZW1iZXJQYWdlKE11bHRpWGFjdE9mZnNldCBvZmZzZXQpCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9jLmggYi9zcmMvaW5jbHVkZS9jLmgKaW5kZXggY2NkMmI2NTRkNDUu LjYyY2JmN2EyZWVjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jLmgKKysrIGIvc3JjL2lu Y2x1ZGUvYy5oCkBAIC02NjksNyArNjY5LDcgQEAgdHlwZWRlZiB1aW50MzIgU3ViVHJhbnNh Y3Rpb25JZDsKIC8qIE11bHRpWGFjdElkIG11c3QgYmUgZXF1aXZhbGVudCB0byBUcmFuc2Fj dGlvbklkLCB0byBmaXQgaW4gdF94bWF4ICovCiB0eXBlZGVmIFRyYW5zYWN0aW9uSWQgTXVs dGlYYWN0SWQ7CiAKLXR5cGVkZWYgdWludDMyIE11bHRpWGFjdE9mZnNldDsKK3R5cGVkZWYg dWludDY0IE11bHRpWGFjdE9mZnNldDsKIAogdHlwZWRlZiB1aW50MzIgQ29tbWFuZElkOwog CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2xydS90LzAwMl9tdWx0aXhh Y3Rfd3JhcGFyb3VuZC5wbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zbHJ1L3QvMDAyX211 bHRpeGFjdF93cmFwYXJvdW5kLnBsCmluZGV4IDE2OTMzM2ZjNTY0Li4yNzJkOGU2ZmIwOCAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NscnUvdC8wMDJfbXVsdGl4YWN0 X3dyYXBhcm91bmQucGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NscnUvdC8wMDJf bXVsdGl4YWN0X3dyYXBhcm91bmQucGwKQEAgLTM3LDcgKzM3LDcgQEAgbXkgJHNscnVfcGFn ZXNfcGVyX3NlZ21lbnQgPSAkMTsKIAogIyBpbml0aWFsaXplIHRoZSAnb2Zmc2V0cycgU0xS VSBmaWxlIGNvbnRhaW5pbmcgdGhlIG5ldyBuZXh0IG11bHRpeGlkCiAjIHdpdGggemVyb3MK LW15ICRtdWx0aXhhY3Rfb2Zmc2V0c19wZXJfcGFnZSA9ICRibGNrc3ogLyA0OyAgICMgc2l6 ZW9mKE11bHRpWGFjdE9mZnNldCkgPT0gNAorbXkgJG11bHRpeGFjdF9vZmZzZXRzX3Blcl9w YWdlID0gJGJsY2tzeiAvIDg7ICAgIyBzaXplb2YoTXVsdGlYYWN0T2Zmc2V0KSA9PSA4CiBt eSAkc2Vnbm8gPQogICBpbnQoMHhGRkZGRkZGOCAvICRtdWx0aXhhY3Rfb2Zmc2V0c19wZXJf cGFnZSAvICRzbHJ1X3BhZ2VzX3Blcl9zZWdtZW50KTsKIG15ICRzbHJ1X2ZpbGUgPSBzcHJp bnRmKCclcy9wZ19tdWx0aXhhY3Qvb2Zmc2V0cy8lMDRYJywgJG5vZGVfcGdkYXRhLCAkc2Vn bm8pOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcGVybC9Qb3N0Z3JlU1FML1Rlc3QvQmFja2dy b3VuZFBzcWwucG0gYi9zcmMvdGVzdC9wZXJsL1Bvc3RncmVTUUwvVGVzdC9CYWNrZ3JvdW5k UHNxbC5wbQppbmRleCA2MGJiZDVkZDQ0NS4uOTgyNWFhYTliYjQgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L3BlcmwvUG9zdGdyZVNRTC9UZXN0L0JhY2tncm91bmRQc3FsLnBtCisrKyBiL3Ny Yy90ZXN0L3BlcmwvUG9zdGdyZVNRTC9UZXN0L0JhY2tncm91bmRQc3FsLnBtCkBAIC0yMzAs MTggKzIzMCwyMyBAQCBFeGVjdXRlcyBhIHF1ZXJ5IGluIHRoZSBjdXJyZW50IHNlc3Npb24g YW5kIHJldHVybnMgdGhlIG91dHB1dCBpbiBzY2FsYXIKIGNvbnRleHQgYW5kIChvdXRwdXQs IGVycm9yKSBpbiBsaXN0IGNvbnRleHQgd2hlcmUgZXJyb3IgaXMgMSBpbiBjYXNlIHRoZXJl CiB3YXMgb3V0cHV0IGdlbmVyYXRlZCBvbiBzdGRlcnIgd2hlbiBleGVjdXRpbmcgdGhlIHF1 ZXJ5LgogCitCeSBkZWZhdWx0LCB0aGUgcXVlcnkgYW5kIGl0cyByZXN1bHRzIGFyZSBwcmlu dGVkIHRvIHRoZSB0ZXN0IG91dHB1dC4gVGhpcworY2FuIGJlIGRpc2FibGVkIGJ5IHBhc3Np bmcgdGhlIGtleXdvcmQgcGFyYW1ldGVyIHZlcmJvc2UgPT4gZmFsc2UuCisKID1jdXQKIAog c3ViIHF1ZXJ5CiB7Ci0JbXkgKCRzZWxmLCAkcXVlcnkpID0gQF87CisJbXkgKCRzZWxmLCAk cXVlcnksICVwYXJhbXMpID0gQF87CiAJbXkgJHJldDsKIAlteSAkb3V0cHV0OwogCW15ICRx dWVyeV9jbnQgPSAkc2VsZi0+e3F1ZXJ5X2NudH0rKzsKIAorCSRwYXJhbXN7dmVyYm9zZX0g PSAxIHVubGVzcyBkZWZpbmVkICRwYXJhbXN7dmVyYm9zZX07CisKIAlsb2NhbCAkVGVzdDo6 QnVpbGRlcjo6TGV2ZWwgPSAkVGVzdDo6QnVpbGRlcjo6TGV2ZWwgKyAxOwogCi0Jbm90ZSAi aXNzdWluZyBxdWVyeSAkcXVlcnlfY250IHZpYSBiYWNrZ3JvdW5kIHBzcWw6ICRxdWVyeSI7 CisJbm90ZSAiaXNzdWluZyBxdWVyeSAkcXVlcnlfY250IHZpYSBiYWNrZ3JvdW5kIHBzcWw6 ICRxdWVyeSIgdW5sZXNzICEkcGFyYW1ze3ZlcmJvc2V9OwogCiAJJHNlbGYtPnt0aW1lb3V0 fS0+c3RhcnQoKSBpZiAoZGVmaW5lZCgkc2VsZi0+e3F1ZXJ5X3RpbWVyX3Jlc3RhcnR9KSk7 CiAKQEAgLTI4MCw3ICsyODUsNyBAQCBzdWIgcXVlcnkKIAkgIGV4cGxhaW4gewogCQlzdGRv dXQgPT4gJHNlbGYtPntzdGRvdXR9LAogCQlzdGRlcnIgPT4gJHNlbGYtPntzdGRlcnJ9LAot CSAgfTsKKwkgIH0gdW5sZXNzICEkcGFyYW1ze3ZlcmJvc2V9OwogCiAJIyBSZW1vdmUgYmFu bmVyIGZyb20gc3Rkb3V0IGFuZCBzdGRlcnIsIG91ciBjYWxsZXIgZG9lc24ndCBjYXJlLiAg VGhlCiAJIyBmaXJzdCBuZXdsaW5lIGlzIG9wdGlvbmFsLCBhcyB0aGVyZSB3b3VsZCBub3Qg YmUgb25lIGlmIGNvbnN1bWluZyBhbgpAQCAtMzA4LDkgKzMxMyw5IEBAIFF1ZXJ5IGZhaWx1 cmUgaXMgZGV0ZXJtaW5lZCBieSBpdCBwcm9kdWNpbmcgb3V0cHV0IG9uIHN0ZGVyci4KIAog c3ViIHF1ZXJ5X3NhZmUKIHsKLQlteSAoJHNlbGYsICRxdWVyeSkgPSBAXzsKKwlteSAoJHNl bGYsICRxdWVyeSwgJXBhcmFtcykgPSBAXzsKIAotCW15ICRyZXQgPSAkc2VsZi0+cXVlcnko JHF1ZXJ5KTsKKwlteSAkcmV0ID0gJHNlbGYtPnF1ZXJ5KCRxdWVyeSwgJXBhcmFtcyk7CiAK IAlpZiAoJHNlbGYtPntzdGRlcnJ9IG5lICIiKQogCXsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3BlcmwvUG9zdGdyZVNRTC9UZXN0L0NsdXN0ZXIucG0gYi9zcmMvdGVzdC9wZXJsL1Bvc3Rn cmVTUUwvVGVzdC9DbHVzdGVyLnBtCmluZGV4IDc0NzUyOGM0YWYxLi4yOTU5ODhiOGI4NyAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvcGVybC9Qb3N0Z3JlU1FML1Rlc3QvQ2x1c3Rlci5wbQor KysgYi9zcmMvdGVzdC9wZXJsL1Bvc3RncmVTUUwvVGVzdC9DbHVzdGVyLnBtCkBAIC0xNzkz LDEzICsxNzkzLDIwIEBAIHN1YiBfZ2V0X2VudgogCXJldHVybiAoJWluc3RfZW52KTsKIH0K IAotIyBQcml2YXRlIHJvdXRpbmUgdG8gZ2V0IGFuIGluc3RhbGxhdGlvbiBwYXRoIHF1YWxp ZmllZCBjb21tYW5kLgotIwotIyBJUEM6OlJ1biBtYWludGFpbnMgYSBjYWNoZSwgJWNtZF9j YWNoZSwgbWFwcGluZyBjb21tYW5kcyB0byBwYXRocy4gIFRlc3RzCi0jIHdoaWNoIHVzZSBu b2RlcyBzcGFubmluZyBtb3JlIHRoYW4gb25lIHBvc3RncmVzIGluc3RhbGxhdGlvbiBwYXRo IG5lZWQgdG8KLSMgYXZvaWQgY29uZnVzaW5nIHdoaWNoIGluc3RhbGxhdGlvbidzIGJpbmFy aWVzIGdldCBydW4uICBTZXR0aW5nICRFTlZ7UEFUSH0gaXMKLSMgaW5zdWZmaWNpZW50LCBh cyBJUEM6OlJ1biBkb2VzIG5vdCBjaGVjayB0byBzZWUgaWYgdGhlIHBhdGggaGFzIGNoYW5n ZWQgc2luY2UKLSMgY2FjaGluZyBhIGNvbW1hbmQuCis9cG9kCisKKz1pdGVtICRub2RlLT5p bnN0YWxsZWRfY29tbWFuZChjbWQpCisKK0dldCBhbiBpbnN0YWxsYXRpb24gcGF0aCBxdWFs aWZpZWQgY29tbWFuZC4KKworSVBDOjpSdW4gbWFpbnRhaW5zIGEgY2FjaGUsICVjbWRfY2Fj aGUsIG1hcHBpbmcgY29tbWFuZHMgdG8gcGF0aHMuICBUZXN0cword2hpY2ggdXNlIG5vZGVz IHNwYW5uaW5nIG1vcmUgdGhhbiBvbmUgcG9zdGdyZXMgaW5zdGFsbGF0aW9uIHBhdGggbmVl ZCB0bworYXZvaWQgY29uZnVzaW5nIHdoaWNoIGluc3RhbGxhdGlvbidzIGJpbmFyaWVzIGdl dCBydW4uICBTZXR0aW5nICRFTlZ7UEFUSH0gaXMKK2luc3VmZmljaWVudCwgYXMgSVBDOjpS dW4gZG9lcyBub3QgY2hlY2sgdG8gc2VlIGlmIHRoZSBwYXRoIGhhcyBjaGFuZ2VkIHNpbmNl CitjYWNoaW5nIGEgY29tbWFuZC4KKworPWN1dAorCiBzdWIgaW5zdGFsbGVkX2NvbW1hbmQK IHsKIAlteSAoJHNlbGYsICRjbWQpID0gQF87CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 CmluZGV4IDZlMmVkMGM4ODI1Li45ZGQ2NWIxMDI1NCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKQEAgLTE3MzEsNiArMTczMSw3IEBAIE11bHRpWGFjdE1lbWJlcgogTXVsdGlY YWN0T2Zmc2V0CiBNdWx0aVhhY3RTdGF0ZURhdGEKIE11bHRpWGFjdFN0YXR1cworTXVsdGlY YWN0V3JpdGVyCiBNdWx0aXJhbmdlSU9EYXRhCiBNdWx0aXJhbmdlUGFyc2VTdGF0ZQogTXVs dGlyYW5nZVR5cGUKQEAgLTE4MTYsNiArMTgxNyw3IEBAIE9mZnNldFZhck5vZGVzX2NvbnRl eHQKIE9pZAogT2lkT3B0aW9ucwogT2tleXNTdGF0ZQorT2xkTXVsdGlYYWN0UmVhZGVyCiBP bGRUb05ld01hcHBpbmcKIE9sZFRvTmV3TWFwcGluZ0RhdGEKIE9uQ29tbWl0QWN0aW9uCkBA IC0yODE0LDYgKzI4MTYsNyBAQCBTbHJ1Q3RsRGF0YQogU2xydUVycm9yQ2F1c2UKIFNscnVQ YWdlU3RhdHVzCiBTbHJ1U2NhbkNhbGxiYWNrCitTbHJ1U2VnU3RhdGUKIFNscnVTaGFyZWQK IFNscnVTaGFyZWREYXRhCiBTbHJ1V3JpdGVBbGwKLS0gCjIuNDcuMwoK --------------EF1KvNPe4qiGLZkWwh7MtAzl Content-Type: text/x-patch; charset=UTF-8; name="v29-0006-Add-runtime-checks-for-bogus-multixact-offsets.patch" Content-Disposition: attachment; filename*0="v29-0006-Add-runtime-checks-for-bogus-multixact-offsets.patc"; filename*1="h" Content-Transfer-Encoding: base64 RnJvbSAwMWM5YTk1MGUxYTQxMDQyZTc2Yzc4Y2Y1YTZiOGU3YTEwNDQyZjdkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFRodSwgNCBEZWMgMjAyNSAxNTozMTozOSArMDIwMApT dWJqZWN0OiBbUEFUQ0ggdjI5IDYvNl0gQWRkIHJ1bnRpbWUgY2hlY2tzIGZvciBib2d1cyBt dWx0aXhhY3Qgb2Zmc2V0cwoKVGhlc2UgYXJlIG5vdCBkaXJlY3RseSByZWxhdGVkIHRvIDY0 IGJpdCBvZmZzZXRzLCBidXQgbWFrZXMgc2Vuc2UgSQp0aGluawotLS0KIHNyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jIHwgMzMgKysrKysrKysrKysrKysrKy0tLS0t LS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAyMSBpbnNlcnRpb25zKCspLCAxMiBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3Qu YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jCmluZGV4IGRmZmEw YzhlN2Q0Li5kYzljNDI1N2E5OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0vbXVsdGl4YWN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVs dGl4YWN0LmMKQEAgLTExNTQsNiArMTE1NCw3IEBAIEdldE11bHRpWGFjdElkTWVtYmVycyhN dWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0TWVtYmVyICoqbWVtYmVycywKIAlpbnQJCQlz bG90bm87CiAJTXVsdGlYYWN0T2Zmc2V0ICpvZmZwdHI7CiAJTXVsdGlYYWN0T2Zmc2V0IG9m ZnNldDsKKwlNdWx0aVhhY3RPZmZzZXQgbmV4dE1YT2Zmc2V0OwogCWludAkJCWxlbmd0aDsK IAlNdWx0aVhhY3RJZCBvbGRlc3RNWGFjdDsKIAlNdWx0aVhhY3RJZCBuZXh0TVhhY3Q7CkBA IC0xMjQ1LDEyICsxMjQ2LDE0IEBAIEdldE11bHRpWGFjdElkTWVtYmVycyhNdWx0aVhhY3RJ ZCBtdWx0aSwgTXVsdGlYYWN0TWVtYmVyICoqbWVtYmVycywKIAlvZmZwdHIgKz0gZW50cnlu bzsKIAlvZmZzZXQgPSAqb2ZmcHRyOwogCi0JQXNzZXJ0KG9mZnNldCAhPSAwKTsKKwlpZiAo b2Zmc2V0ID09IDApCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9E QVRBX0NPUlJVUFRFRCksCisJCQkJIGVycm1zZygiTXVsdGlYYWN0ICV1IGhhcyBpbnZhbGlk IG9mZnNldCIsIG11bHRpKSkpOwogCiAJLyogcmVhZCBuZXh0IG11bHRpJ3Mgb2Zmc2V0ICov CiAJewogCQlNdWx0aVhhY3RJZCB0bXBNWGFjdDsKLQkJTXVsdGlYYWN0T2Zmc2V0IG5leHRN WE9mZnNldDsKIAogCQkvKiBoYW5kbGUgd3JhcGFyb3VuZCBpZiBuZWVkZWQgKi8KIAkJdG1w TVhhY3QgPSBtdWx0aSArIDE7CkBAIC0xMjg0LDIxICsxMjg3LDI3IEBAIEdldE11bHRpWGFj dElkTWVtYmVycyhNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0TWVtYmVyICoqbWVtYmVy cywKIAkJb2ZmcHRyID0gKE11bHRpWGFjdE9mZnNldCAqKSBNdWx0aVhhY3RPZmZzZXRDdGwt PnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXTsKIAkJb2ZmcHRyICs9IGVudHJ5bm87CiAJ CW5leHRNWE9mZnNldCA9ICpvZmZwdHI7Ci0KLQkJaWYgKG5leHRNWE9mZnNldCA9PSAwKQot CQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJKGVycmNvZGUoRVJSQ09ERV9EQVRBX0NPUlJVUFRF RCksCi0JCQkJCSBlcnJtc2coIk11bHRpWGFjdCAldSBoYXMgaW52YWxpZCBuZXh0IG9mZnNl dCIsCi0JCQkJCQkJbXVsdGkpKSk7Ci0KLQkJbGVuZ3RoID0gbmV4dE1YT2Zmc2V0IC0gb2Zm c2V0OwogCX0KIAogCUxXTG9ja1JlbGVhc2UobG9jayk7CiAJbG9jayA9IE5VTEw7CiAKLQkv KiBBIG11bHRpeGlkIHdpdGggemVybyBtZW1iZXJzIHNob3VsZCBub3QgaGFwcGVuICovCi0J QXNzZXJ0KGxlbmd0aCA+IDApOworCS8qIFNhbml0eSBjaGVjayB0aGUgbmV4dCBvZmZzZXQg Ki8KKwlpZiAobmV4dE1YT2Zmc2V0ID09IDApCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVy cmNvZGUoRVJSQ09ERV9EQVRBX0NPUlJVUFRFRCksCisJCQkJIGVycm1zZygiTXVsdGlYYWN0 ICV1IGhhcyBpbnZhbGlkIG5leHQgb2Zmc2V0IiwgbXVsdGkpKSk7CisJaWYgKG5leHRNWE9m ZnNldCA8IG9mZnNldCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RF X0RBVEFfQ09SUlVQVEVEKSwKKwkJCQkgZXJybXNnKCJNdWx0aVhhY3QgJXUgaGFzIG9mZnNl dCAoJSIgUFJJdTY0IikgZ3JlYXRlciB0aGFuIGl0cyBuZXh0IG9mZnNldCAgKCUiIFBSSXU2 NCIpIiwKKwkJCQkJCW11bHRpLCBvZmZzZXQsIG5leHRNWE9mZnNldCkpKTsKKwlpZiAobmV4 dE1YT2Zmc2V0IC0gb2Zmc2V0ID4gSU5UMzJfTUFYKQorCQllcmVwb3J0KEVSUk9SLAorCQkJ CShlcnJjb2RlKEVSUkNPREVfREFUQV9DT1JSVVBURUQpLAorCQkJCSBlcnJtc2coIk11bHRp WGFjdCAldSBoYXMgdG9vIG1hbnkgbWVtYmVycyAoJSIgUFJJdTY0ICIpIiwKKwkJCQkJCW11 bHRpLCBuZXh0TVhPZmZzZXQgLSBvZmZzZXQpKSk7CisJbGVuZ3RoID0gbmV4dE1YT2Zmc2V0 IC0gb2Zmc2V0OwogCiAJLyogcmVhZCB0aGUgbWVtYmVycyAqLwogCXB0ciA9IChNdWx0aVhh Y3RNZW1iZXIgKikgcGFsbG9jKGxlbmd0aCAqIHNpemVvZihNdWx0aVhhY3RNZW1iZXIpKTsK LS0gCjIuNDcuMwoK --------------EF1KvNPe4qiGLZkWwh7MtAzl--