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 1w19mR-0002jz-39 for pgsql-hackers@arkaria.postgresql.org; Fri, 13 Mar 2026 21:10:50 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w19lQ-000AVm-2n for pgsql-hackers@arkaria.postgresql.org; Fri, 13 Mar 2026 21:09:45 +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 1w19lQ-000AVe-0u for pgsql-hackers@lists.postgresql.org; Fri, 13 Mar 2026 21:09:45 +0000 Received: from meesny.iki.fi ([2001:67c:2b0:1c1::201]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1w19lN-000000001i6-0dhq for pgsql-hackers@postgresql.org; Fri, 13 Mar 2026 21:09:44 +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 meesny.iki.fi (Postfix) with ESMTPSA id 4fXcYp3syfzyPt; Fri, 13 Mar 2026 23:09:34 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=meesny; t=1773436175; 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=homHODbfLpwjAzukoQZFFuK6ZQHRryaas+s2wzjWsAQ=; b=PMZ+32HP4qZPZdHTzMiDtJISPSqiu8qynJylZeJtT4KZkCqrmob6ihqNfFxuRsobvDaC79 RqJanVPqj5S3eI3H6kgE35Waf0aJ9m5Kh7Fi69w7A2jkvee+74RWboWO03jsF6ca90P7/7 NHeXXFwKj7nNnn2BBdYHcV7lO0qAW4Y= ARC-Seal: i=1; a=rsa-sha256; d=iki.fi; s=meesny; cv=none; t=1773436175; b=k6tJnzqBD1M7Ni5PLaqFl+0si4yuDv1V0LC2uuZ9ko/0Fh1vUVjhZREevyshwxz3YCmOS3 qkzJ15haPfywcUWU4jIhXT0QemM+Q07zs5+dNojMNqMpHVai7SmCRRUnv5bQ98moe52mRa zqeiD3wj2cMFhJ7pGaWa57cXAieWMiI= ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=meesny; t=1773436175; 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=homHODbfLpwjAzukoQZFFuK6ZQHRryaas+s2wzjWsAQ=; b=UnyzQGKh8pA3odDtKoTmj6fzHagZTi4jqwfJ64f/rkp9F+VzeTKG3HRa7or93RIRI+nsB3 KuyiMCcFUw+yYSkU/lOIAZ4V9sWuw8DmYY407dPlx6JIHihGZ1nW1vkz2/X88ET14dbF6p XVhmIbeX1PLaV8YJg6cTBUhMiCdm554= Content-Type: multipart/mixed; boundary="------------sHJ4NdKMkCB9GbTF7phkSOpd" Message-ID: <7de8e39c-d1c4-4783-91b9-129d90e91411@iki.fi> Date: Fri, 13 Mar 2026 23:09:33 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Better shared data structure management and resizable shared data structures From: Heikki Linnakangas To: Ashutosh Bapat , Andres Freund Cc: pgsql-hackers , chaturvedipalak1911@gmail.com References: <5a37c2e3-619d-4816-84d7-0b27e3e6797f@iki.fi> <26c766d6-db0f-43d3-a618-44f8d40a3121@iki.fi> Content-Language: en-US In-Reply-To: <26c766d6-db0f-43d3-a618-44f8d40a3121@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. --------------sHJ4NdKMkCB9GbTF7phkSOpd Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 06/03/2026 16:12, Heikki Linnakangas wrote: > Firstly, I'm not sure what to do with ShmemRegisterHash() and the > 'HASHCTL *infoP' argument to it. I feel it'd be nicer if the HASHCTL was > just part of the ShmemHashDesc struct, but I'm not sure if that fits all > the callers. I'll have to try that out I guess. I took a stab at that, and it turned out to be straightforward. I'm not sure why I hesitated on that earlier. Here's a new version with that change, and a ton of little comment cleanups and such. - Heikki --------------sHJ4NdKMkCB9GbTF7phkSOpd Content-Type: text/x-patch; charset=UTF-8; name="v4-0001-Introduce-a-new-mechanism-for-registering-shared-.patch" Content-Disposition: attachment; filename*0="v4-0001-Introduce-a-new-mechanism-for-registering-shared-.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBiZjdmMTE0MWQwMjY1NGM4MGJkZTEwMzlhYTgxODBmNmE5NjFkNjFjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IEZyaSwgMTMgTWFyIDIwMjYgMjI6NTk6NTMgKzAyMDAK U3ViamVjdDogW1BBVENIIHY0IDEvM10gSW50cm9kdWNlIGEgbmV3IG1lY2hhbmlzbSBmb3Ig cmVnaXN0ZXJpbmcgc2hhcmVkCiBtZW1vcnkgYXJlYXMKCkVhY2ggc2hhcmVkIG1lbW9yeSBh cmVhIGlzIHJlZ2lzdGVyZWQgd2l0aCBhICJkZXNjcmlwdG9yIHN0cnVjdCIgdGhhdApjb250 YWlucyBwYXJhbWV0ZXJzIGxpa2UgbmFtZSBhbmQgc2l6ZSBvZiB0aGUgYXJlYS4gVGhlIGRl c2NyaXB0b3IKc3RydWN0IG1ha2VzIGl0IGVhc2llciB0byBhZGQgb3B0aW9uYWwgZmllbGRz IGluIHRoZSBmdXR1cmU7IHRoZQphZGRpdGlvbmFsIGZpZWxkcyBjYW4ganVzdCBiZSBsZWZ0 IGFzIHplcm9zLgoKVGhpcyBtZXJnZXMgdGhlIHNlcGFyYXRlIFtTdWJzeXN0ZW1dU2htZW1T aXplKCkgYW5kCltTdWJzeXN0ZW1dU2htZW1Jbml0KCkgcGhhc2VzIGF0IHBvc3RtYXN0ZXIg c3RhcnR1cC4gRWFjaCBzdWJzeXN0ZW0gaXMKbm93IGNhbGxlZCBpbnRvIGp1c3Qgb25jZSwg YmVmb3JlIHRoZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgaGFzIGJlZW4KYWxsb2NhdGVkLCB0 byByZWdpc3RlciB0aGUgc3Vic3lzdGVtJ3Mgc2hhcmVkIG1lbW9yeSBuZWVkcy4gVGhlCnJl Z2lzdHJhdGlvbiBpbmNsdWRlcyB0aGUgc2l6ZSwgd2hpY2ggcmVwbGFjZXMgdGhlCltTdWJz eXN0ZW1dU2htZW1TaXplKCkgY2FsbHMsIGFuZCBhIHBvaW50ZXIgdG8gYW4gaW5pdGlhbGl6 YXRpb24KY2FsbGJhY2sgZnVuY3Rpb24sIHdoaWNoIHJlcGxhY2VzIHRoZSBbU3Vic3lzdGVt XVNobWVtSW5pdCgpCmNhbGxzLiBUaGlzIGlzIG1vcmUgZXJnb25vbWljLCBhcyB5b3Ugb25s eSBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgc2l6ZQpvbmNlLCB3aGVuIHlvdSByZWdpc3RlciB0 aGUgc3RydWN0LgoKVGhpcyByZXBsYWNlcyBTaG1lbUluaXRTdHJ1Y3QoKSBhbmQgU2htZW1J bml0SGFzaCgpLCB3aGljaCBiZWNvbWUganVzdApiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSB3 cmFwcGVycyBhcm91bmQgdGhlIG5ldyBmdW5jdGlvbnMuIEluIGZ1dHVyZQpjb21taXRzLCBJ IHBsYW4gdG8gcmVwbGFjZSBhbGwgU2htZW1Jbml0U3RydWN0KCkgYW5kIFNobWVtSW5pdEhh c2goKQpjYWxscyB3aXRoIHRoZSBuZXcgZnVuY3Rpb25zLCBhbHRob3VnaCB3ZSdsbCBzdGls bCBuZWVkIHRvIGtlZXAgdGhlbQphcm91bmQgZm9yIGV4dGVuc2lvbnMuCi0tLQogZG9jL3Ny Yy9zZ21sL3N5c3RlbS12aWV3cy5zZ21sICAgICAgICAgIHwgICA0ICstCiBkb2Mvc3JjL3Nn bWwveGZ1bmMuc2dtbCAgICAgICAgICAgICAgICAgfCAxMjYgKystLQogc3JjL2JhY2tlbmQv Ym9vdHN0cmFwL2Jvb3RzdHJhcC5jICAgICAgIHwgICAyICsKIHNyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvbGF1bmNoX2JhY2tlbmQuYyB8ICAgNCArCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVy L3Bvc3RtYXN0ZXIuYyAgICAgfCAgIDUgKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBj aS5jICAgICAgICAgIHwgIDU2ICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5j ICAgICAgICAgfCA4NDUgKysrKysrKysrKysrKysrKystLS0tLS0tCiBzcmMvYmFja2VuZC90 Y29wL3Bvc3RncmVzLmMgICAgICAgICAgICAgfCAgIDMgKwogc3JjL2luY2x1ZGUvc3RvcmFn ZS9pcGMuaCAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2Uvc2ht ZW0uaCAgICAgICAgICAgICB8IDE0NCArKystCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCAgICAgICAgfCAgIDQgKy0KIDExIGZpbGVzIGNoYW5nZWQsIDg1OCBpbnNlcnRp b25zKCspLCAzMzYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3N5 c3RlbS12aWV3cy5zZ21sIGIvZG9jL3NyYy9zZ21sL3N5c3RlbS12aWV3cy5zZ21sCmluZGV4 IGU1ZmU0MjNmYzYxLi5hMGJhZWQzMzlmZSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3N5 c3RlbS12aWV3cy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9zeXN0ZW0tdmlld3Muc2dtbApA QCAtNDI1NCw4ICs0MjU0LDggQEAgU0VMRUNUICogRlJPTSBwZ19sb2NrcyBwbCBMRUZUIEpP SU4gcGdfcHJlcGFyZWRfeGFjdHMgcHB4CiAgIDxwYXJhPgogICAgQW5vbnltb3VzIGFsbG9j YXRpb25zIGFyZSBhbGxvY2F0aW9ucyB0aGF0IGhhdmUgYmVlbiBtYWRlCiAgICB3aXRoIDxs aXRlcmFsPlNobWVtQWxsb2MoKTwvbGl0ZXJhbD4gZGlyZWN0bHksIHJhdGhlciB0aGFuIHZp YQotICAgPGxpdGVyYWw+U2htZW1Jbml0U3RydWN0KCk8L2xpdGVyYWw+IG9yCi0gICA8bGl0 ZXJhbD5TaG1lbUluaXRIYXNoKCk8L2xpdGVyYWw+LgorICAgPGxpdGVyYWw+U2htZW1SZWdp c3RlclN0cnVjdCgpPC9saXRlcmFsPiBvcgorICAgPGxpdGVyYWw+U2htZW1SZWdpc3Rlckhh c2goKTwvbGl0ZXJhbD4uCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KZGlmZiAtLWdpdCBhL2Rv Yy9zcmMvc2dtbC94ZnVuYy5zZ21sIGIvZG9jL3NyYy9zZ21sL3hmdW5jLnNnbWwKaW5kZXgg NzBlODE1YjhhMmMuLjUyNDM5Yjg3ZDNjIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwveGZ1 bmMuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwveGZ1bmMuc2dtbApAQCAtMzYyOCw1OSArMzYy OCw4NyBAQCBDUkVBVEUgRlVOQ1RJT04gbWFrZV9hcnJheShhbnllbGVtZW50KSBSRVRVUk5T IGFueWFycmF5CiAgICAgICBBZGQtaW5zIGNhbiByZXNlcnZlIHNoYXJlZCBtZW1vcnkgb24g c2VydmVyIHN0YXJ0dXAuICBUbyBkbyBzbywgdGhlCiAgICAgICBhZGQtaW4ncyBzaGFyZWQg bGlicmFyeSBtdXN0IGJlIHByZWxvYWRlZCBieSBzcGVjaWZ5aW5nIGl0IGluCiAgICAgICA8 eHJlZiBsaW5rZW5kPSJndWMtc2hhcmVkLXByZWxvYWQtbGlicmFyaWVzIi8+PGluZGV4dGVy bT48cHJpbWFyeT5zaGFyZWRfcHJlbG9hZF9saWJyYXJpZXM8L3ByaW1hcnk+PC9pbmRleHRl cm0+LgotICAgICAgVGhlIHNoYXJlZCBsaWJyYXJ5IHNob3VsZCBhbHNvIHJlZ2lzdGVyIGEK LSAgICAgIDxsaXRlcmFsPnNobWVtX3JlcXVlc3RfaG9vazwvbGl0ZXJhbD4gaW4gaXRzCi0g ICAgICA8ZnVuY3Rpb24+X1BHX2luaXQ8L2Z1bmN0aW9uPiBmdW5jdGlvbi4gIFRoaXMKLSAg ICAgIDxsaXRlcmFsPnNobWVtX3JlcXVlc3RfaG9vazwvbGl0ZXJhbD4gY2FuIHJlc2VydmUg c2hhcmVkIG1lbW9yeSBieQotICAgICAgY2FsbGluZzoKLTxwcm9ncmFtbGlzdGluZz4KLXZv aWQgUmVxdWVzdEFkZGluU2htZW1TcGFjZShTaXplIHNpemUpCi08L3Byb2dyYW1saXN0aW5n PgotICAgICAgRWFjaCBiYWNrZW5kIHNob3VsZCBvYnRhaW4gYSBwb2ludGVyIHRvIHRoZSBy ZXNlcnZlZCBzaGFyZWQgbWVtb3J5IGJ5Ci0gICAgICBjYWxsaW5nOgorICAgICAgVGhlIHNo YXJlZCBsaWJyYXJ5IHNob3VsZCByZWdpc3RlciB0aGUgc2hhcmVkIG1lbW9yeSBhbGxvY2F0 aW9uIGluCisgICAgICBpdHMgPGZ1bmN0aW9uPl9QR19pbml0PC9mdW5jdGlvbj4gZnVuY3Rp b24uICBIZXJlIGlzIGFuIGV4YW1wbGU6CiA8cHJvZ3JhbWxpc3Rpbmc+Ci12b2lkICpTaG1l bUluaXRTdHJ1Y3QoY29uc3QgY2hhciAqbmFtZSwgU2l6ZSBzaXplLCBib29sICpmb3VuZFB0 cikKLTwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICBJZiB0aGlzIGZ1bmN0aW9uIHNldHMgPGxp dGVyYWw+Zm91bmRQdHI8L2xpdGVyYWw+IHRvCi0gICAgICA8bGl0ZXJhbD5mYWxzZTwvbGl0 ZXJhbD4sIHRoZSBjYWxsZXIgc2hvdWxkIHByb2NlZWQgdG8gaW5pdGlhbGl6ZSB0aGUKLSAg ICAgIGNvbnRlbnRzIG9mIHRoZSByZXNlcnZlZCBzaGFyZWQgbWVtb3J5LiAgSWYgPGxpdGVy YWw+Zm91bmRQdHI8L2xpdGVyYWw+Ci0gICAgICBpcyBzZXQgdG8gPGxpdGVyYWw+dHJ1ZTwv bGl0ZXJhbD4sIHRoZSBzaGFyZWQgbWVtb3J5IHdhcyBhbHJlYWR5Ci0gICAgICBpbml0aWFs aXplZCBieSBhbm90aGVyIGJhY2tlbmQsIGFuZCB0aGUgY2FsbGVyIG5lZWQgbm90IGluaXRp YWxpemUKLSAgICAgIGZ1cnRoZXIuCi0gICAgIDwvcGFyYT4KK3R5cGVkZWYgc3RydWN0IE15 U2htZW1EYXRhIHsKKyAgICBMV0xvY2sgICAgICBsb2NrOyAgICAvKiBwcm90ZWN0cyB0aGUg ZmllbGRzIGJlbG93ICovCiAKLSAgICAgPHBhcmE+Ci0gICAgICBUbyBhdm9pZCByYWNlIGNv bmRpdGlvbnMsIGVhY2ggYmFja2VuZCBzaG91bGQgdXNlIHRoZSBMV0xvY2sKLSAgICAgIDxm dW5jdGlvbj5BZGRpblNobWVtSW5pdExvY2s8L2Z1bmN0aW9uPiB3aGVuIGluaXRpYWxpemlu ZyBpdHMgYWxsb2NhdGlvbgotICAgICAgb2Ygc2hhcmVkIG1lbW9yeSwgYXMgc2hvd24gaGVy ZToKLTxwcm9ncmFtbGlzdGluZz4KLXN0YXRpYyBteXN0cnVjdCAqcHRyID0gTlVMTDsKLWJv b2wgICAgICAgIGZvdW5kOworICAgIC4uLiBzaGFyZWQgbWVtb3J5IGNvbnRlbnRzIC4uLgor fSBNeVNobWVtRGF0YTsKKworc3RhdGljIE15U2htZW1EYXRhICpNeVNobWVtOyAgICAvKiBw b2ludGVyIHRvIHRoZSBzdHJ1Y3QgaW4gc2hhcmVkIG1lbW9yeSAqLworCitzdGF0aWMgdm9p ZCBteV9zaG1lbV9pbml0KHZvaWQgKmFyZyk7CisKK3N0YXRpYyBTaG1lbVN0cnVjdERlc2Mg TXlTaG1lbURlc2MgPSB7CisgICAgLm5hbWUgPSAiTXkgc2htZW0gYXJlYSIsCisgICAgLnNp emUgPSBzaXplb2YoTXlTaG1lbURhdGEpLAorICAgIC5pbml0X2ZuID0gbXlfc2htZW1faW5p dCwKKyAgICAucHRyID0gKHZvaWQgKiopICZhbXA7TXlTaG1lbSwKK307CiAKLUxXTG9ja0Fj cXVpcmUoQWRkaW5TaG1lbUluaXRMb2NrLCBMV19FWENMVVNJVkUpOwotcHRyID0gU2htZW1J bml0U3RydWN0KCJteSBzdHJ1Y3QgbmFtZSIsIHNpemUsICZhbXA7Zm91bmQpOwotaWYgKCFm b3VuZCkKKy8qCisgKiBNb2R1bGUgbG9hZCBjYWxsYmFjaworICovCit2b2lkCitfUEdfaW5p dCh2b2lkKQogewotICAgIC4uLiBpbml0aWFsaXplIGNvbnRlbnRzIG9mIHNoYXJlZCBtZW1v cnkgLi4uCi0gICAgcHRyLT5sb2NrcyA9IEdldE5hbWVkTFdMb2NrVHJhbmNoZSgibXkgdHJh bmNoZSBuYW1lIik7CisgICAgLyoKKyAgICAgKiBJbiBvcmRlciB0byBjcmVhdGUgb3VyIHNo YXJlZCBtZW1vcnkgYXJlYSwgd2UgaGF2ZSB0byBiZSBsb2FkZWQgdmlhCisgICAgICogc2hh cmVkX3ByZWxvYWRfbGlicmFyaWVzLgorICAgICAqLworICAgIGlmICghcHJvY2Vzc19zaGFy ZWRfcHJlbG9hZF9saWJyYXJpZXNfaW5fcHJvZ3Jlc3MpCisgICAgICAgIHJldHVybjsKKwor ICAgIC8qIFJlZ2lzdGVyIG91ciBzaGFyZWQgbWVtb3J5IG5lZWRzICovCisgICAgU2htZW1S ZWdpc3RlclN0cnVjdCgmYW1wO015U2htZW1EZXNjKTsKIH0KLUxXTG9ja1JlbGVhc2UoQWRk aW5TaG1lbUluaXRMb2NrKTsKKworLyogY2FsbGJhY2sgdG8gaW5pdGlhbGl6ZSB0aGUgY29u dGVudHMgb2YgdGhlIE15U2htZW0gYXJlYSBhdCBzdGFydHVwICovCitzdGF0aWMgdm9pZAor bXlfc2htZW1faW5pdCh2b2lkICphcmcpCit7CisgICAgaW50ICAgICAgICAgdHJhbmNoZV9p ZDsKKworICAgIC8qIEluaXRpYWxpemUgdGhlIGxvY2sgKi8KKyAgICB0cmFuY2hlX2lkID0g TFdMb2NrTmV3VHJhbmNoZUlkKCJteSB0cmFuY2hlIG5hbWUiKTsKKyAgICBMV0xvY2tJbml0 aWFsaXplKCZhbXA7TXlTaG1lbS0+bG9jayk7CisKKyAgICAuLi4gaW5pdGlhbGl6ZSB0aGUg cmVzdCBvZiBNeVNobWVtIGZpZWxkcyAuLi4KK30KKwogPC9wcm9ncmFtbGlzdGluZz4KLSAg ICAgIDxsaXRlcmFsPnNobWVtX3N0YXJ0dXBfaG9vazwvbGl0ZXJhbD4gcHJvdmlkZXMgYSBj b252ZW5pZW50IHBsYWNlIGZvciB0aGUKLSAgICAgIGluaXRpYWxpemF0aW9uIGNvZGUsIGJ1 dCBpdCBpcyBub3Qgc3RyaWN0bHkgcmVxdWlyZWQgdGhhdCBhbGwgc3VjaCBjb2RlCi0gICAg ICBiZSBwbGFjZWQgaW4gdGhpcyBob29rLiAgT24gV2luZG93cyAoYW5kIGFueXdoZXJlIGVs c2Ugd2hlcmUKLSAgICAgIDxsaXRlcmFsPkVYRUNfQkFDS0VORDwvbGl0ZXJhbD4gaXMgZGVm aW5lZCksIGVhY2ggYmFja2VuZCBleGVjdXRlcyB0aGUKLSAgICAgIHJlZ2lzdGVyZWQgPGxp dGVyYWw+c2htZW1fc3RhcnR1cF9ob29rPC9saXRlcmFsPiBzaG9ydGx5IGFmdGVyIGl0Ci0g ICAgICBhdHRhY2hlcyB0byBzaGFyZWQgbWVtb3J5LCBzbyBhZGQtaW5zIHNob3VsZCBzdGls bCBhY3F1aXJlCi0gICAgICA8ZnVuY3Rpb24+QWRkaW5TaG1lbUluaXRMb2NrPC9mdW5jdGlv bj4gd2l0aGluIHRoaXMgaG9vaywgYXMgc2hvd24gaW4gdGhlCi0gICAgICBleGFtcGxlIGFi b3ZlLiAgT24gb3RoZXIgcGxhdGZvcm1zLCBvbmx5IHRoZSBwb3N0bWFzdGVyIHByb2Nlc3Mg ZXhlY3V0ZXMKLSAgICAgIHRoZSA8bGl0ZXJhbD5zaG1lbV9zdGFydHVwX2hvb2s8L2xpdGVy YWw+LCBhbmQgZWFjaCBiYWNrZW5kIGF1dG9tYXRpY2FsbHkKLSAgICAgIGluaGVyaXRzIHRo ZSBwb2ludGVycyB0byBzaGFyZWQgbWVtb3J5LgorICAgICAgVGhlIDxmdW5jdGlvbj5TaG1l bVJlZ2lzdGVyU3RydWN0KCk8L2Z1bmN0aW9uPiBjYWxsIGRvZXNuJ3QgaW1tZWRpYXRlbHkK KyAgICAgIGFsbG9jYXRlIG9yIGluaXRpYWxpemUgdGhlIG1lbW9yeSwgaXQgbWVyZWx5IHJl Z2lzdGVycyB0aGUgc3BhY2UgdG8gYmUKKyAgICAgIGFsbG9jYXRlZCBsYXRlciBpbiB0aGUg c3RhcnR1cCBzZXF1ZW5jZS4gIElmIHRoZSBzaXplIG9mIHRoZSBhbGxvY2F0aW9uCisgICAg ICBkZXBlbmRzIG9uIDx2YXJuYW1lPk1heEJhY2tlbmRzPC92YXJuYW1lPiBvciBvdGhlciB2 YXJpYWJsZXMgdGhhdCBhcmUKKyAgICAgIG5vdCB5ZXQgaW5pdGlhbGl6ZWQgd2hlbiA8ZnVu Y3Rpb24+X1BHX2luaXQoKTwvZnVuY3Rpb24+IGlzIGNhbGxlZCwgdGhlCisgICAgICBzaXpl IGNhbiBzdGlsbCBiZSBhZGp1c3RlZCBsYXRlciBieSByZWdpc3RlcmluZyBhCisgICAgICA8 bGl0ZXJhbD5zaG1lbV9yZXF1ZXN0X2hvb2s8L2xpdGVyYWw+IGFuZCBjaGFuZ2luZyB0aGUg ZGVzY3JpcHRvciB0aGVyZS4KKyAgICAgIFdoZW4gdGhlIG1lbW9yeSBpcyBhbGxvY2F0ZWQs IHRoZSByZWdpc3RlcmVkCisgICAgICA8ZnVuY3Rpb24+aW5pdF9mbjwvZnVuY3Rpb24+IGNh bGxiYWNrIGlzIGNhbGxlZCB0byBpbml0aWFsaXplIGl0LgorICAgICA8L3BhcmE+CisgICAg IDxwYXJhPgorICAgICAgVGhlIDxmdW5jdGlvbj5pbml0X2ZuKCk8L2Z1bmN0aW9uPiBjYWxs YmFjayBpcyBub3JtYWxseSBjYWxsZWQgYXQKKyAgICAgIHBvc3RtYXN0ZXIgc3RhcnR1cCwg d2hlbiBubyBvdGhlciBwcm9jZXNzZXMgYXJlIHJ1bm5pbmcgeWV0IGFuZCBubworICAgICAg bG9ja2luZyBpcyByZXF1aXJlZC4gIEhvd2V2ZXIsIGlmIGEgc2hhcmVkIG1lbW9yeSBhcmVh IGlzIHJlZ2lzdGVyZWQKKyAgICAgIGFmdGVyIHN5c3RlbSBzdGFydCwgZS5nLiBpbiBhbiBl eHRlbnNpb24gdGhhdCBpcyBub3QgaW4KKyAgICAgIDx4cmVmIGxpbmtlbmQ9Imd1Yy1zaGFy ZWQtcHJlbG9hZC1saWJyYXJpZXMiLz48aW5kZXh0ZXJtPjxwcmltYXJ5PnNoYXJlZF9wcmVs b2FkX2xpYnJhcmllczwvcHJpbWFyeT48L2luZGV4dGVybT4sCisgICAgICA8ZnVuY3Rpb24+ U2htZW1SZWdpc3RlclN0cnVjdCgpPC9mdW5jdGlvbj4gd2lsbCBpbW1lZGlhdGVseSBjYWxs CisgICAgICB0aGUgPGZ1bmN0aW9uPmluaXRfZm48L2Z1bmN0aW9uPiBjYWxsYmFjay4gIElu IHRoYXQgY2FzZSwgaXQgaG9sZHMgYQorICAgICAgbG9jayBpbnRlcm5hbGx5IHRoYXQgcHJl dmVudHMgY29uY3VycmVudCBzaG1lbSBhbGxvY2F0aW9ucy4KKyAgICAgPC9wYXJhPgorICAg ICA8cGFyYT4KKyAgICAgIE9uIFdpbmRvd3MsIHRoZSA8ZnVuY3Rpb24+YXR0YWNoX2ZuPC9m dW5jdGlvbj4gY2FsbGJhY2sgaXMgYWRkaXRpb25hbGx5CisgICAgICBjYWxsZWQgYXQgZXZl cnkgYmFja2VuZCBzdGFydHVwLiAgSXQgY2FuIGJlIHVzZWQgZm9yIGluaXRpYWxpemluZwor ICAgICAgYWRkaXRpb25hbCBwZXItYmFja2VuZCBzdGF0ZSByZWxhdGVkIHRvIHRoZSBzaGFy ZWQgbWVtb3J5IGFyZWEgdGhhdCBpcworICAgICAgaW5oZXJpdGVkIHZpYSA8ZnVuY3Rpb24+ Zm9yaygpPC9mdW5jdGlvbj4gb24gb3RoZXIgc3lzdGVtcy4gIE9uIG90aGVyCisgICAgICBw bGF0Zm9ybXMsIHRoZSA8ZnVuY3Rpb24+YXR0YWNoX2ZuPC9mdW5jdGlvbj4gY2FsbGJhY2sg aXMgb25seSBjYWxsZWQKKyAgICAgIGZvciBzdHJ1Y3RzIHRoYXQgYXJlIHJlZ2lzdGVyZWQg YWZ0ZXIgc3lzdGVtIHN0YXJ0dXAuCiAgICAgIDwvcGFyYT4KLQogICAgICA8cGFyYT4KLSAg ICAgIEFuIGV4YW1wbGUgb2YgYSA8bGl0ZXJhbD5zaG1lbV9yZXF1ZXN0X2hvb2s8L2xpdGVy YWw+IGFuZAotICAgICAgPGxpdGVyYWw+c2htZW1fc3RhcnR1cF9ob29rPC9saXRlcmFsPiBj YW4gYmUgZm91bmQgaW4KKyAgICAgIEFuIGV4YW1wbGUgb2YgYWxsb2NhdGluZyBzaGFyZWQg bWVtb3J5IGNhbiBiZSBmb3VuZCBpbgogICAgICAgPGZpbGVuYW1lPmNvbnRyaWIvcGdfc3Rh dF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jPC9maWxlbmFtZT4gaW4KICAgICAg IHRoZSA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IHNvdXJjZSB0cmVl LgogICAgICA8L3BhcmE+CkBAIC0zNjkxLDggKzM3MTksNyBAQCBMV0xvY2tSZWxlYXNlKEFk ZGluU2htZW1Jbml0TG9jayk7CiAKICAgICAgPHBhcmE+CiAgICAgICBUaGVyZSBpcyBhbm90 aGVyLCBtb3JlIGZsZXhpYmxlIG1ldGhvZCBvZiByZXNlcnZpbmcgc2hhcmVkIG1lbW9yeSB0 aGF0Ci0gICAgICBjYW4gYmUgZG9uZSBhZnRlciBzZXJ2ZXIgc3RhcnR1cCBhbmQgb3V0c2lk ZSBhCi0gICAgICA8bGl0ZXJhbD5zaG1lbV9yZXF1ZXN0X2hvb2s8L2xpdGVyYWw+LiAgVG8g ZG8gc28sIGVhY2ggYmFja2VuZCB0aGF0IHdpbGwKKyAgICAgIGNhbiBiZSBkb25lIGFmdGVy IHNlcnZlciBzdGFydHVwLiAgVG8gZG8gc28sIGVhY2ggYmFja2VuZCB0aGF0IHdpbGwKICAg ICAgIHVzZSB0aGUgc2hhcmVkIG1lbW9yeSBzaG91bGQgb2J0YWluIGEgcG9pbnRlciB0byBp dCBieSBjYWxsaW5nOgogPHByb2dyYW1saXN0aW5nPgogdm9pZCAqR2V0TmFtZWREU01TZWdt ZW50KGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBzaXplLApAQCAtMzcxMSwxMCArMzczOCw3 IEBAIHZvaWQgKkdldE5hbWVkRFNNU2VnbWVudChjb25zdCBjaGFyICpuYW1lLCBzaXplX3Qg c2l6ZSwKICAgICAgPC9wYXJhPgogCiAgICAgIDxwYXJhPgotICAgICAgVW5saWtlIHNoYXJl ZCBtZW1vcnkgcmVzZXJ2ZWQgYXQgc2VydmVyIHN0YXJ0dXAsIHRoZXJlIGlzIG5vIG5lZWQg dG8KLSAgICAgIGFjcXVpcmUgPGZ1bmN0aW9uPkFkZGluU2htZW1Jbml0TG9jazwvZnVuY3Rp b24+IG9yIG90aGVyd2lzZSB0YWtlIGFjdGlvbgotICAgICAgdG8gYXZvaWQgcmFjZSBjb25k aXRpb25zIHdoZW4gcmVzZXJ2aW5nIHNoYXJlZCBtZW1vcnkgd2l0aAotICAgICAgPGZ1bmN0 aW9uPkdldE5hbWVkRFNNU2VnbWVudDwvZnVuY3Rpb24+LiAgVGhpcyBmdW5jdGlvbiBlbnN1 cmVzIHRoYXQgb25seQorICAgICAgPGZ1bmN0aW9uPkdldE5hbWVkRFNNU2VnbWVudDwvZnVu Y3Rpb24+IGVuc3VyZXMgdGhhdCBvbmx5CiAgICAgICBvbmUgYmFja2VuZCBhbGxvY2F0ZXMg YW5kIGluaXRpYWxpemVzIHRoZSBzZWdtZW50IGFuZCB0aGF0IGFsbCBvdGhlcgogICAgICAg YmFja2VuZHMgcmVjZWl2ZSBhIHBvaW50ZXIgdG8gdGhlIGZ1bGx5IGFsbG9jYXRlZCBhbmQg aW5pdGlhbGl6ZWQKICAgICAgIHNlZ21lbnQuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9i b290c3RyYXAvYm9vdHN0cmFwLmMgYi9zcmMvYmFja2VuZC9ib290c3RyYXAvYm9vdHN0cmFw LmMKaW5kZXggMTcxMThmMmZlNzYuLmQ5ZDhiYjZhNWZkIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9ib290c3RyYXAvYm9vdHN0cmFwLmMKKysrIGIvc3JjL2JhY2tlbmQvYm9vdHN0cmFw L2Jvb3RzdHJhcC5jCkBAIC0zNjksNiArMzY5LDggQEAgQm9vdHN0cmFwTW9kZU1haW4oaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgYm9vbCBjaGVja19vbmx5KQogCiAJSW5pdGlhbGl6ZUZh c3RQYXRoTG9ja3MoKTsKIAorCVJlZ2lzdGVyU2htZW1TdHJ1Y3RzKCk7CisKIAlDcmVhdGVT aGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzKCk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvcG9zdG1hc3Rlci9sYXVuY2hfYmFja2VuZC5jIGIvc3JjL2JhY2tlbmQvcG9zdG1h c3Rlci9sYXVuY2hfYmFja2VuZC5jCmluZGV4IDMwMzU3ODQ1NzI5Li5mZWNhZTgyN2U1YiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9sYXVuY2hfYmFja2VuZC5jCisr KyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbGF1bmNoX2JhY2tlbmQuYwpAQCAtNDksNiAr NDksNyBAQAogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9kc20uaCIKICNpbmNsdWRlICJzdG9yYWdlL2lvX3dvcmtlci5oIgorI2lu Y2x1ZGUgInN0b3JhZ2UvaXBjLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wZ19zaG1lbS5oIgog I2luY2x1ZGUgInRjb3AvYmFja2VuZF9zdGFydHVwLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVt dXRpbHMuaCIKQEAgLTY3Nyw3ICs2NzgsMTAgQEAgU3ViUG9zdG1hc3Rlck1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKIAogCS8qIFJlc3RvcmUgYmFzaWMgc2hhcmVkIG1lbW9yeSBw b2ludGVycyAqLwogCWlmIChVc2VkU2htZW1TZWdBZGRyICE9IE5VTEwpCisJewogCQlJbml0 U2htZW1BbGxvY2F0b3IoVXNlZFNobWVtU2VnQWRkcik7CisJCVJlZ2lzdGVyU2htZW1TdHJ1 Y3RzKCk7CisJfQogCiAJLyoKIAkgKiBSdW4gdGhlIGFwcHJvcHJpYXRlIE1haW4gZnVuY3Rp b24KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jIGIv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKaW5kZXggM2ZhYzQ2YzQwMmIu LjcwMmM2NDZmMGQ3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3Rt YXN0ZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYwpAQCAt OTU4LDYgKzk1OCw5IEBAIFBvc3RtYXN0ZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10p CiAJICovCiAJSW5pdGlhbGl6ZUZhc3RQYXRoTG9ja3MoKTsKIAorCS8qIFJlZ2lzdGVyIHRo ZSBzaGFyZWQgbWVtb3J5IG5lZWRzIG9mIGFsbCBjb3JlIHN1YnN5c3RlbXMuICovCisJUmVn aXN0ZXJTaG1lbVN0cnVjdHMoKTsKKwogCS8qCiAJICogR2l2ZSBwcmVsb2FkZWQgbGlicmFy aWVzIGEgY2hhbmNlIHRvIHJlcXVlc3QgYWRkaXRpb25hbCBzaGFyZWQgbWVtb3J5LgogCSAq LwpAQCAtMzIzNiw2ICszMjM5LDggQEAgUG9zdG1hc3RlclN0YXRlTWFjaGluZSh2b2lkKQog CQlMb2NhbFByb2Nlc3NDb250cm9sRmlsZSh0cnVlKTsKIAogCQkvKiByZS1jcmVhdGUgc2hh cmVkIG1lbW9yeSBhbmQgc2VtYXBob3JlcyAqLworCQlSZXNldFNobWVtQWxsb2NhdG9yKCk7 CisJCVJlZ2lzdGVyU2htZW1TdHJ1Y3RzKCk7CiAJCUNyZWF0ZVNoYXJlZE1lbW9yeUFuZFNl bWFwaG9yZXMoKTsKIAogCQlVcGRhdGVQTVN0YXRlKFBNX1NUQVJUVVApOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFn ZS9pcGMvaXBjaS5jCmluZGV4IGE0Nzg1ZGFmMWU1Li40MDVjNjk2NTVmMCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvaXBjL2lwY2kuYwpAQCAtOTksMTAgKzk5LDEyIEBAIENhbGN1bGF0ZVNobWVtU2l6 ZSh2b2lkKQogCSAqIGR1cmluZyB0aGUgYWN0dWFsIGFsbG9jYXRpb24gcGhhc2UuCiAJICov CiAJc2l6ZSA9IDEwMDAwMDsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgaGFzaF9lc3RpbWF0 ZV9zaXplKFNITUVNX0lOREVYX1NJWkUsCi0JCQkJCQkJCQkJCSBzaXplb2YoU2htZW1JbmRl eEVudCkpKTsKKwlzaXplID0gYWRkX3NpemUoc2l6ZSwgU2htZW1SZWdpc3RlcmVkU2l6ZSgp KTsKKwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBkc21fZXN0aW1hdGVfc2l6ZSgpKTsKIAlz aXplID0gYWRkX3NpemUoc2l6ZSwgRFNNUmVnaXN0cnlTaG1lbVNpemUoKSk7CisKKwkvKiBs ZWdhY3kgc3Vic3lzdGVtcyAqLwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBCdWZmZXJNYW5h Z2VyU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBMb2NrTWFuYWdlclNo bWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgUHJlZGljYXRlTG9ja1NobWVt U2l6ZSgpKTsKQEAgLTIxOCw2ICsyMjAsMTAgQEAgQ3JlYXRlU2hhcmVkTWVtb3J5QW5kU2Vt YXBob3Jlcyh2b2lkKQogCSAqLwogCUluaXRTaG1lbUFsbG9jYXRvcihzZWdoZHIpOwogCisJ LyogUmVzZXJ2ZSBzcGFjZSBmb3Igc2VtYXBob3Jlcy4gKi8KKwlpZiAoIUlzVW5kZXJQb3N0 bWFzdGVyKQorCQlQR1Jlc2VydmVTZW1hcGhvcmVzKFByb2NHbG9iYWxTZW1hcygpKTsKKwog CS8qIEluaXRpYWxpemUgc3Vic3lzdGVtcyAqLwogCUNyZWF0ZU9yQXR0YWNoU2htZW1TdHJ1 Y3RzKCk7CiAKQEAgLTIzMSw2ICsyMzcsMjIgQEAgQ3JlYXRlU2hhcmVkTWVtb3J5QW5kU2Vt YXBob3Jlcyh2b2lkKQogCQlzaG1lbV9zdGFydHVwX2hvb2soKTsKIH0KIAorLyoKKyAqIEVh cmx5IGluaXRpYWxpemF0aW9uIG9mIHZhcmlvdXMgc3Vic3lzdGVtcywgZ2l2aW5nIHRoZW0g YSBjaGFuY2UgdG8KKyAqIHJlZ2lzdGVyIHRoZWlyIHNoYXJlZCBtZW1vcnkgbmVlZHMgYmVm b3JlIHRoZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgaXMKKyAqIGFsbG9jYXRlZC4KKyAqLwor dm9pZAorUmVnaXN0ZXJTaG1lbVN0cnVjdHModm9pZCkKK3sKKwkvKgorCSAqIFRPRE86IE5v dCB1c2VkIGluIGFueSBidWlsdC1pbiBzdWJzeXN0ZW1zIHlldC4gIEluIHRoZSBmdXR1cmUs IG1vc3Qgb2YKKwkgKiB0aGUgY2FsbHMgKlNobWVtSW5pdCgpIGNhbGxzIGluIENyZWF0ZU9y QXR0YWNoU2htZW1TdHJ1Y3RzKCksIGFuZAorCSAqICpTaG1lbVNpemUoKSBjYWxscyBpbiBD YWxjdWxhdGVTaG1lbVNpemUoKSB3aWxsIGJlIHJlcGxhY2VkIGJ5IGNhbGxzCisJICogaW50 byB0aGUgc3Vic3lzdGVtcyBmcm9tIGhlcmUuCisJICovCit9CisKIC8qCiAgKiBJbml0aWFs aXplIHZhcmlvdXMgc3Vic3lzdGVtcywgc2V0dGluZyB1cCB0aGVpciBkYXRhIHN0cnVjdHVy ZXMgaW4KICAqIHNoYXJlZCBtZW1vcnkuCkBAIC0yNDksMTYgKzI3MSwyNiBAQCBDcmVhdGVT aGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzKHZvaWQpCiBzdGF0aWMgdm9pZAogQ3JlYXRlT3JB dHRhY2hTaG1lbVN0cnVjdHModm9pZCkKIHsKLQkvKgotCSAqIE5vdyBpbml0aWFsaXplIExX TG9ja3MsIHdoaWNoIGRvIHNoYXJlZCBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgYXJlCi0JICog bmVlZGVkIGZvciBJbml0U2htZW1JbmRleC4KLQkgKi8KLQlDcmVhdGVMV0xvY2tzKCk7Ci0K LQkvKgotCSAqIFNldCB1cCBzaG1lbS5jIGluZGV4IGhhc2h0YWJsZQotCSAqLwotCUluaXRT aG1lbUluZGV4KCk7CisjaWZkZWYgRVhFQ19CQUNLRU5ECisJaWYgKElzVW5kZXJQb3N0bWFz dGVyKQorCXsKKwkJLyoKKwkJICogU2htZW1BdHRhY2hSZWdpc3RlcmVkKCkgdXNlcyBMV0xv Y2tzLiBGb3J0dW5hdGVseSwgTFdMb2NrcyBkb24ndAorCQkgKiBuZWVkIGFueSBzcGVjaWFs IGF0dGFjaGluZy4KKwkJICovCisJCVNobWVtQXR0YWNoUmVnaXN0ZXJlZCgpOworCX0KKwll bHNlCisjZW5kaWYKKwl7CisJCS8qCisJCSAqIEluaXRpYWxpemUgTFdMb2NrcyBmaXJzdCwg aW4gY2FzZSBhbnkgb2YgdGhlIHNobWVtIGluaXQgZnVuY3Rpb24KKwkJICogdXNlIExXTG9j a3MuICAoTm90aGluZyBlbHNlIGNhbiBiZSBydW5uaW5nIGR1cmluZyBzdGFydHVwLCBzbyB0 aGV5CisJCSAqIGRvbid0IG5lZWQgdG8gZG8gYW55IGxvY2tpbmcgeWV0LCBidXQgd2UgbmV2 ZXJ0aGVsZXNzIGFsbG93IGl0LikKKwkJICovCisJCUNyZWF0ZUxXTG9ja3MoKTsKKwkJU2ht ZW1Jbml0UmVnaXN0ZXJlZCgpOworCX0KIAogCWRzbV9zaG1lbV9pbml0KCk7CiAJRFNNUmVn aXN0cnlTaG1lbUluaXQoKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBj L3NobWVtLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jCmluZGV4IDU1ZTRh NTQyMWRlLi5lNDI3YTQ1NzA1YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9p cGMvc2htZW0uYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jCkBAIC0x OSw0OCArMTksOTUgQEAKICAqIG1ldGhvZHMpLiAgVGhlIHJvdXRpbmVzIGluIHRoaXMgZmls ZSBhcmUgdXNlZCBmb3IgYWxsb2NhdGluZyBhbmQKICAqIGJpbmRpbmcgdG8gc2hhcmVkIG1l bW9yeSBkYXRhIHN0cnVjdHVyZXMuCiAgKgotICogTk9URVM6Ci0gKgkJKGEpIFRoZXJlIGFy ZSB0aHJlZSBraW5kcyBvZiBzaGFyZWQgbWVtb3J5IGRhdGEgc3RydWN0dXJlcwotICoJYXZh aWxhYmxlIHRvIFBPU1RHUkVTOiBmaXhlZC1zaXplIHN0cnVjdHVyZXMsIHF1ZXVlcyBhbmQg aGFzaAotICoJdGFibGVzLiAgRml4ZWQtc2l6ZSBzdHJ1Y3R1cmVzIGNvbnRhaW4gdGhpbmdz IGxpa2UgZ2xvYmFsIHZhcmlhYmxlcwotICoJZm9yIGEgbW9kdWxlIGFuZCBzaG91bGQgbmV2 ZXIgYmUgYWxsb2NhdGVkIGFmdGVyIHRoZSBzaGFyZWQgbWVtb3J5Ci0gKglpbml0aWFsaXph dGlvbiBwaGFzZS4gIEhhc2ggdGFibGVzIGhhdmUgYSBmaXhlZCBtYXhpbXVtIHNpemUsIGJ1 dAotICoJdGhlaXIgYWN0dWFsIHNpemUgY2FuIHZhcnkgZHluYW1pY2FsbHkuICBXaGVuIGVu dHJpZXMgYXJlIGFkZGVkCi0gKgl0byB0aGUgdGFibGUsIG1vcmUgc3BhY2UgaXMgYWxsb2Nh dGVkLiAgUXVldWVzIGxpbmsgZGF0YSBzdHJ1Y3R1cmVzCi0gKgl0aGF0IGhhdmUgYmVlbiBh bGxvY2F0ZWQgZWl0aGVyIHdpdGhpbiBmaXhlZC1zaXplIHN0cnVjdHVyZXMgb3IgYXMgaGFz aAotICoJYnVja2V0cy4gIEVhY2ggc2hhcmVkIGRhdGEgc3RydWN0dXJlIGhhcyBhIHN0cmlu ZyBuYW1lIHRvIGlkZW50aWZ5Ci0gKglpdCAoYXNzaWduZWQgaW4gdGhlIG1vZHVsZSB0aGF0 IGRlY2xhcmVzIGl0KS4KLSAqCi0gKgkJKGIpIER1cmluZyBpbml0aWFsaXphdGlvbiwgZWFj aCBtb2R1bGUgbG9va3MgZm9yIGl0cwotICoJc2hhcmVkIGRhdGEgc3RydWN0dXJlcyBpbiBh IGhhc2ggdGFibGUgY2FsbGVkIHRoZSAiU2htZW0gSW5kZXgiLgotICoJSWYgdGhlIGRhdGEg c3RydWN0dXJlIGlzIG5vdCBwcmVzZW50LCB0aGUgY2FsbGVyIGNhbiBhbGxvY2F0ZQotICoJ YSBuZXcgb25lIGFuZCBpbml0aWFsaXplIGl0LiAgSWYgdGhlIGRhdGEgc3RydWN0dXJlIGlz IHByZXNlbnQsCi0gKgl0aGUgY2FsbGVyICJhdHRhY2hlcyIgdG8gdGhlIHN0cnVjdHVyZSBi eSBpbml0aWFsaXppbmcgYSBwb2ludGVyCi0gKglpbiB0aGUgbG9jYWwgYWRkcmVzcyBzcGFj ZS4KLSAqCQlUaGUgc2htZW0gaW5kZXggaGFzIHR3byBwdXJwb3NlczogZmlyc3QsIGl0IGdp dmVzIHVzCi0gKglhIHNpbXBsZSBtb2RlbCBvZiBob3cgdGhlIHdvcmxkIGxvb2tzIHdoZW4g YSBiYWNrZW5kIHByb2Nlc3MKLSAqCWluaXRpYWxpemVzLiAgSWYgc29tZXRoaW5nIGlzIHBy ZXNlbnQgaW4gdGhlIHNobWVtIGluZGV4LAotICoJaXQgaXMgaW5pdGlhbGl6ZWQuICBJZiBp dCBpcyBub3QsIGl0IGlzIHVuaW5pdGlhbGl6ZWQuICBTZWNvbmQsCi0gKgl0aGUgc2htZW0g aW5kZXggYWxsb3dzIHVzIHRvIGFsbG9jYXRlIHNoYXJlZCBtZW1vcnkgb24gZGVtYW5kCi0g KglpbnN0ZWFkIG9mIHRyeWluZyB0byBwcmVhbGxvY2F0ZSBzdHJ1Y3R1cmVzIGFuZCBoYXJk LXdpcmUgdGhlCi0gKglzaXplcyBhbmQgbG9jYXRpb25zIGluIGhlYWRlciBmaWxlcy4gIElm IHlvdSBhcmUgdXNpbmcgYSBsb3QKLSAqCW9mIHNoYXJlZCBtZW1vcnkgaW4gYSBsb3Qgb2Yg ZGlmZmVyZW50IHBsYWNlcyAoYW5kIGNoYW5naW5nCi0gKgl0aGluZ3MgZHVyaW5nIGRldmVs b3BtZW50KSwgdGhpcyBpcyBpbXBvcnRhbnQuCi0gKgotICoJCShjKSBJbiBzdGFuZGFyZCBV bml4LWlzaCBlbnZpcm9ubWVudHMsIGluZGl2aWR1YWwgYmFja2VuZHMgZG8gbm90Ci0gKglu ZWVkIHRvIHJlLWVzdGFibGlzaCB0aGVpciBsb2NhbCBwb2ludGVycyBpbnRvIHNoYXJlZCBt ZW1vcnksIGJlY2F1c2UKLSAqCXRoZXkgaW5oZXJpdCBjb3JyZWN0IHZhbHVlcyBvZiB0aG9z ZSB2YXJpYWJsZXMgdmlhIGZvcmsoKSBmcm9tIHRoZQotICoJcG9zdG1hc3Rlci4gIEhvd2V2 ZXIsIHRoaXMgZG9lcyBub3Qgd29yayBpbiB0aGUgRVhFQ19CQUNLRU5EIGNhc2UuCi0gKglJ biBwb3J0cyB1c2luZyBFWEVDX0JBQ0tFTkQsIG5ldyBiYWNrZW5kcyBoYXZlIHRvIHNldCB1 cCB0aGVpciBsb2NhbAotICoJcG9pbnRlcnMgdXNpbmcgdGhlIG1ldGhvZCBkZXNjcmliZWQg aW4gKGIpIGFib3ZlLgotICoKLSAqCQkoZCkgbWVtb3J5IGFsbG9jYXRpb24gbW9kZWw6IHNo YXJlZCBtZW1vcnkgY2FuIG5ldmVyIGJlCi0gKglmcmVlZCwgb25jZSBhbGxvY2F0ZWQuICAg RWFjaCBoYXNoIHRhYmxlIGhhcyBpdHMgb3duIGZyZWUgbGlzdCwKLSAqCXNvIGhhc2ggYnVj a2V0cyBjYW4gYmUgcmV1c2VkIHdoZW4gYW4gaXRlbSBpcyBkZWxldGVkLiAgSG93ZXZlciwK LSAqCWlmIG9uZSBoYXNoIHRhYmxlIGdyb3dzIHZlcnkgbGFyZ2UgYW5kIHRoZW4gc2hyaW5r cywgaXRzIHNwYWNlCi0gKgljYW5ub3QgYmUgcmVkaXN0cmlidXRlZCB0byBvdGhlciB0YWJs ZXMuICBXZSBjb3VsZCBidWlsZCBhIHNpbXBsZQotICoJaGFzaCBidWNrZXQgZ2FyYmFnZSBj b2xsZWN0b3IgaWYgbmVlZCBiZS4gIFJpZ2h0IG5vdywgaXQgc2VlbXMKLSAqCXVubmVjZXNz YXJ5LgorICogTm93YWRheXMsIHRoZXJlIGlzIGFsc28gYW5vdGhlciB3YXkgdG8gYWxsb2Nh dGUgc2hhcmVkIG1lbW9yeSBjYWxsZWQKKyAqIER5bmFtaWMgU2hhcmVkIE1lbW9yeS4gIFNl ZSBkc20uYyBmb3IgdGhhdCBmYWNpbGl0eS4gIE9uZSBiaWcgZGlmZmVyZW5jZQorICogYmV0 d2VlbiB0cmFkaXRpb25hbCBzaGFyZWQgbWVtb3J5IGhhbmRsZWQgYnkgdGhpcyBmYWNpbGl0 eSBhbmQgZHluYW1pYworICogc2hhcmVkIG1lbW9yeSBpcyB0aGF0IHRyYWRpdGlvbmFsIHNo YXJlZCBtZW1vcnkgYXJlYXMgYXJlIG1hcHBlZCB0byB0aGUKKyAqIHNhbWUgYWRkcmVzcyBp biBhbGwgcHJvY2Vzc2VzLCBzbyB5b3UgY2FuIHVzZSBub3JtYWwgcG9pbnRlcnMgaW4gc2hh cmVkCisgKiBtZW1vcnkgc3RydWN0cy4gIFdpdGggRHluYW1pYyBTaGFyZWQgTWVtb3J5LCB5 b3UgbXVzdCB1c2Ugb2Zmc2V0cyBvciBEU0EKKyAqIHBvaW50ZXJzIGluc3RlYWQuCisgKgor ICogVGhlcmUgYXJlIHR3byBraW5kcyBvZiBzaGFyZWQgbWVtb3J5IGRhdGEgc3RydWN0dXJl czogZml4ZWQtc2l6ZSBzdHJ1Y3R1cmVzCisgKiBhbmQgaGFzaCB0YWJsZXMuICBGaXhlZC1z aXplIHN0cnVjdHVyZXMgY29udGFpbiB0aGluZ3MgbGlrZSBnbG9iYWwKKyAqIHZhcmlhYmxl cyBmb3IgYSBtb2R1bGUgYW5kIHNob3VsZCBuZXZlciBiZSBhbGxvY2F0ZWQgYWZ0ZXIgdGhl IHNoYXJlZAorICogbWVtb3J5IGluaXRpYWxpemF0aW9uIHBoYXNlLiAgSGFzaCB0YWJsZXMg aGF2ZSBhIGZpeGVkIG1heGltdW0gc2l6ZSwgYnV0CisgKiB0aGVpciBhY3R1YWwgc2l6ZSBj YW4gdmFyeSBkeW5hbWljYWxseS4gIFdoZW4gZW50cmllcyBhcmUgYWRkZWQgdG8gdGhlCisg KiB0YWJsZSwgbW9yZSBzcGFjZSBpcyBhbGxvY2F0ZWQuICBFYWNoIHNoYXJlZCBkYXRhIHN0 cnVjdHVyZSBhbmQgaGFzaCBoYXMgYQorICogc3RyaW5nIG5hbWUgdG8gaWRlbnRpZnkgaXQs IHNwZWNpZmllZCBpbiB0aGUgZGVzY3JpcHRvciB3aGVuIGl0cworICogcmVnaXN0ZXJlZC4K KyAqCisgKiBTaGFyZWQgbWVtb3J5IGNhbiBuZXZlciBiZSBmcmVlZCwgb25jZSBhbGxvY2F0 ZWQuICBFYWNoIGhhc2ggdGFibGUgaGFzIGl0cworICogb3duIGZyZWUgbGlzdCwgc28gaGFz aCBidWNrZXRzIGNhbiBiZSByZXVzZWQgd2hlbiBhbiBpdGVtIGlzIGRlbGV0ZWQuCisgKiBI b3dldmVyLCBpZiBvbmUgaGFzaCB0YWJsZSBncm93cyB2ZXJ5IGxhcmdlIGFuZCB0aGVuIHNo cmlua3MsIGl0cyBzcGFjZQorICogY2Fubm90IGJlIHJlZGlzdHJpYnV0ZWQgdG8gb3RoZXIg dGFibGVzLiAgV2UgY291bGQgYnVpbGQgYSBzaW1wbGUgaGFzaAorICogYnVja2V0IGdhcmJh Z2UgY29sbGVjdG9yIGlmIG5lZWQgYmUuICBSaWdodCBub3csIGl0IHNlZW1zIHVubmVjZXNz YXJ5LgorICoKKyAqIFVzYWdlCisgKiAtLS0tLQorICoKKyAqIFRvIGFsbG9jYXRlIGEgc2hh cmVkIG1lbW9yeSBhcmVhLCBmaWxsIGluIHRoZSBuYW1lLCBzaXplLCBhbmQgYW55IG90aGVy CisgKiBvcHRpb25zIGluIFNobWVtU3RydWN0RGVzYywgYW5kIGNhbGwgU2htZW1SZWdpc3Rl clN0cnVjdCgpLiAgTGVhdmUgYW55CisgKiB1bnVzZWQgZmllbGRzIGFzIHplcm9zLgorICoK KyAqCXR5cGVkZWYgc3RydWN0IE15U2htZW1EYXRhIHsKKyAqCQkuLi4KKyAqCX0gTXlTaG1l bURhdGE7CisgKgorICoJc3RhdGljIE15U2htZW1EYXRhICpNeVNobWVtOworICoKKyAqCXN0 YXRpYyB2b2lkIG15X3NobWVtX2luaXQodm9pZCAqYXJnKTsKKyAqCisgKglzdGF0aWMgU2ht ZW1TdHJ1Y3REZXNjIE15U2htZW1EZXNjID0geworICoJCS5uYW1lID0gIk15IHNobWVtIGFy ZWEiLAorICoJCS5zaXplID0gc2l6ZW9mKE15U2htZW1EYXRhKSwKKyAqCQkuaW5pdF9mbiA9 IG15X3NobWVtX2luaXQsCisgKgkJLnB0ciA9ICZNeVNobWVtLAorICoJfTsKKyAqCisgKiBJ biB0aGUgc3Vic3lzdGVtJ3MgaW5pdGlhbGl6YXRpb24gY29kZSAob3IgaW4gX1BHX2luaXQo KSBpbiBleHRlbnNpb25zKSwKKyAqIGNhbGwgU2htZW1SZWdpc3RlclN0cnVjdCgmTXlTaG1l bURlc2MpLgorICoKKyAqIExpZmVjeWNsZQorICogLS0tLS0tLS0tCisgKgorICogUmVnaXN0 ZXJTaG1lbVN0cnVjdHMoKSBpcyBjYWxsZWQgYXQgcG9zdG1hc3RlciBzdGFydHVwIGJlZm9y ZSBjYWxjdWxhdGluZworICogdGhlIHNpemUgb2YgdGhlIGdsb2JhbCBzaGFyZWQgbWVtb3J5 IHNlZ21lbnQuICBPbmNlIGFsbCB0aGUgcmVnaXN0cmF0aW9ucworICogaGF2ZSBiZWVuIGRv bmUsIHBvc3RtYXN0ZXIgY2FsbHMgU2htZW1SZWdpc3RlcmVkU2l6ZSgpIHRvIGFkZCB1cCB0 aGUgc2l6ZXMKKyAqIG9mIGFsbCB0aGUgcmVnaXN0ZXJlZCBhcmVhcy4gIEFmdGVyIGFsbG9j YXRpbmcgdGhlIHNoYXJlZCBtZW1vcnkgc2VnbWVudCwKKyAqIHBvc3RtYXN0ZXIgY2FsbHMg U2htZW1Jbml0UmVnaXN0ZXJlZCgpLCB3aGljaCBjYWxscyB0aGUgaW5pdF9mbiBjYWxsYmFj a3MKKyAqIG9mIGVhY2ggcmVnaXN0ZXJlZCBhcmVhLCBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5 IHdlcmUgcmVnaXN0ZXJlZC4KKyAqCisgKiBJbiBzdGFuZGFyZCBVbml4LWlzaCBlbnZpcm9u bWVudHMsIGluZGl2aWR1YWwgYmFja2VuZHMgZG8gbm90IG5lZWQgdG8KKyAqIHJlLWVzdGFi bGlzaCB0aGVpciBsb2NhbCBwb2ludGVycyBpbnRvIHNoYXJlZCBtZW1vcnksIGJlY2F1c2Ug dGhleSBpbmhlcml0CisgKiBjb3JyZWN0IHZhbHVlcyBvZiB0aG9zZSB2YXJpYWJsZXMgdmlh IGZvcmsoKSBmcm9tIHRoZSBwb3N0bWFzdGVyLiAgSG93ZXZlciwKKyAqIHRoaXMgZG9lcyBu b3Qgd29yayBpbiB0aGUgRVhFQ19CQUNLRU5EIGNhc2UuICBJbiBwb3J0cyB1c2luZyBFWEVD X0JBQ0tFTkQsCisgKiBiYWNrZW5kIHN0YXJ0dXAgYWxzbyBjYWxscyBSZWdpc3RlclNobWVt U3RydWN0cygpLCBmb2xsb3dlZCBieQorICogU2htZW1BdHRhY2hSZWdpc3RlcmVkKCksIHdo aWNoIHJlLWVzdGFibGlzaGVzIHRoZSBwb2ludGVyIHZhcmlhYmxlcworICogKCpTaG1lbVN0 cnVjdERlc2MtPnB0ciksIGFuZCBjYWxscyB0aGUgYXR0YWNoX2ZuIGNhbGxiYWNrLCBpZiBh bnksIGZvcgorICogYWRkaXRpb25hbCBwZXItYmFja2VuZCBzZXR1cC4KKyAqCisgKiBMZWdh Y3kgU2htZW1Jbml0U3RydWN0KCkvU2htZW1Jbml0SGFzaCgpIGZ1bmN0aW9ucworICogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisg KiBTaG1lbUluaXRTdHJ1Y3QoKS9TaG1lbUluaXRIYXNoKCkgaXMgYW5vdGhlciB3YXkgb2Yg cmVnaXN0cmluZyBzaG1lbSBhcmVhcy4KKyAqIEl0IHByZS1kYXRlcyB0aGUgU2htZW1SZWdp c3RlclN0cnVjdCgpL1NobWVtUmVnaXN0ZXJIYXNoKCkgZnVuY3Rpb25zLCBhbmQKKyAqIHNo b3VsZCBub3QgYmUgdXNlZCBpbiBuZXcgY29kZSwgYnV0IGFzIG9mIHRoaXMgd3JpdGluZyBp dCBpcyBzdGlsbCB3aWRlbHkKKyAqIHVzZWQgaW4gZXh0ZW5zaW9ucy4KKyAqCisgKiBUbyBh bGxvY2F0ZSBhIHNobWVtIGFyZWEgd2l0aCBTaG1lbUluaXRTdHJ1Y3QoKSwgeW91IG5lZWQg dG8gc2VwYXJhdGVseQorICogcmVnaXN0ZXIgdGhlIHNpemUgbmVlZGVkIGZvciB0aGUgYXJl YSBieSBjYWxsaW5nIFJlcXVlc3RBZGRpblNobWVtU3BhY2UoKQorICogZnJvbSB0aGUgZXh0 ZW5zaW9uJ3Mgc2htZW1fcmVxdWVzdF9ob29rLCBhbmQgYWxsb2NhdGUgdGhlIGFyZWEgYnkg Y2FsbGluZworICogU2htZW1Jbml0U3RydWN0KCkgZnJvbSB0aGUgZXh0ZW5zaW9uJ3Mgc2ht ZW1fc3RhcnR1cF9ob29rLiAgVGhlcmUgYXJlIG5vCisgKiBpbml0L2F0dGFjaCBjYWxsYmFj a3MuICBJbnN0ZWFkLCB0aGUgY2FsbGVyIG9mIFNobWVtSW5pdFN0cnVjdCgpIG11c3QgY2hl Y2sKKyAqIHRoZSByZXR1cm4gc3RhdHVzIG9mIFNobWVtSW5pdFN0cnVjdCgpIGFuZCBpbml0 aWFsaXplIHRoZSBzdHJ1Y3QgaWYgaXQgd2FzCisgKiBub3QgcHJldmlvdXNseSBpbml0aWFs aXplZC4KKyAqCisgKiBDYWxsaW5nIFNobWVtQWxsb2MoKSBkaXJlY3RseQorICogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBUaGVyZSdzIGEgbW9yZSBsb3ctbGV2 ZWwgd2F5IG9mIGFsbG9jYXRpbmcgc2hhcmVkIG1lbW9yeSB0b286IHlvdSBjYW4gY2FsbAor ICogU2htZW1BbGxvYygpIGRpcmVjdGx5LiAgSXQncyB1c2VkIHRvIGltcGxlbWVudCB0aGUg aGlnaGVyIGxldmVsIG1lY2hhbmlzbXMsCisgKiBhbmQgc2hvdWxkIGdlbmVyYWxseSBub3Qg YmUgY2FsbGVkIGRpcmVjdGx5LgogICovCiAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgpAQCAt NzYsNiArMTIzLDI0IEBACiAjaW5jbHVkZSAic3RvcmFnZS9zcGluLmgiCiAjaW5jbHVkZSAi dXRpbHMvYnVpbHRpbnMuaCIKIAorLyoKKyAqIEFycmF5IG9mIHJlZ2lzdGVyZWQgc2hhcmVk IG1lbW9yeSBhcmVhcy4KKyAqCisgKiBUaGlzIGlzIGluIHByb2Nlc3MgcHJpdmF0ZSBtZW1v cnksIGFsdGhvdWdoIG9uIFVuaXgtbGlrZSBzeXN0ZW1zLCB3ZSBleHBlY3QKKyAqIGFsbCB0 aGUgcmVnaXN0cmF0aW9ucyB0byBoYXBwZW4gYXQgcG9zdG1hc3RlciBzdGFydHVwIHRpbWUg YW5kIGJlIGluaGVyaXRlZAorICogYnkgYWxsIHRoZSBjaGlsZCBwcm9jZXNzZXMgdmlhIGZv cmsoKS4gIEV4dGVuc2lvbnMgbWF5IHJlZ2lzdGVyIGFkZGl0aW9uYWwKKyAqIGFyZWFzIGFm dGVyIHN0YXJ0dXAsIGJ1dCBvbmx5IGFyZWFzIHJlZ2lzdGVyZWQgYXQgcG9zdG1hc3RlciBz dGFydHVwIGFyZQorICogaW5jbHVkZWQgaW4gdGhlIGVzdGltYXRlIGZvciB0aGUgdG90YWwg bWVtb3J5IG5lZWRlZCBmb3Igc2hhcmVkIG1lbW9yeS4gIElmCisgKiBhbnkgbm9uLXRyaXZp YWwgYWxsb2NhdGlvbnMgYXJlIG1hZGUgYWZ0ZXIgc3RhcnR1cCwgdGhlcmUgbWlnaHQgbm90 IGJlCisgKiBlbm91Z2ggc2hhcmVkIG1lbW9yeSBhdmFpbGFibGUuCisgKi8KK3N0YXRpYyBT aG1lbVN0cnVjdERlc2MgKipyZWdpc3RlcmVkX3NobWVtX2FyZWFzOworc3RhdGljIGludAlu dW1fcmVnaXN0ZXJlZF9zaG1lbV9hcmVhcyA9IDA7CitzdGF0aWMgaW50CW1heF9yZWdpc3Rl cmVkX3NobWVtX2FyZWFzID0gMDsgLyogYWxsb2NhdGVkIHNpemUgb2YgdGhlIGFycmF5ICov CisKKy8qIGVzdGltYXRlZCBzaXplIG9mIHJlZ2lzdGVyZWRfc2htZW1fYXJlYXMgKG5vdCBh IGhhcmQgbGltaXQpICovCisjZGVmaW5lIElOSVRJQUxfUkVHSVNUUllfU0laRQkJICg2NCkK KwogLyoKICAqIFRoaXMgaXMgdGhlIGZpcnN0IGRhdGEgc3RydWN0dXJlIHN0b3JlZCBpbiB0 aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50LCBhdAogICogdGhlIG9mZnNldCB0aGF0IFBHU2ht ZW1IZWFkZXItPmNvbnRlbnRfb2Zmc2V0IHBvaW50cyB0by4gIEFsbG9jYXRpb25zIGJ5CkBA IC05NSw2ICsxNjAsOSBAQCB0eXBlZGVmIHN0cnVjdCBTaG1lbUFsbG9jYXRvckRhdGEKIAog c3RhdGljIHZvaWQgKlNobWVtQWxsb2NSYXcoU2l6ZSBzaXplLCBTaXplICphbGxvY2F0ZWRf c2l6ZSk7CiAKK3N0YXRpYyB2b2lkIHNobWVtX2hhc2hfaW5pdCh2b2lkICphcmcpOworc3Rh dGljIHZvaWQgc2htZW1faGFzaF9hdHRhY2godm9pZCAqYXJnKTsKKwogLyogc2hhcmVkIG1l bW9yeSBnbG9iYWwgdmFyaWFibGVzICovCiAKIHN0YXRpYyBQR1NobWVtSGVhZGVyICpTaG1l bVNlZ0hkcjsJLyogc2hhcmVkIG1lbSBzZWdtZW50IGhlYWRlciAqLwpAQCAtMTAzLDI0ICsx NzEsMzQ1IEBAIHN0YXRpYyB2b2lkICpTaG1lbUVuZDsJCQkvKiBlbmQrMSBhZGRyZXNzIG9m IHNoYXJlZCBtZW1vcnkgKi8KIAogc3RhdGljIFNobWVtQWxsb2NhdG9yRGF0YSAqU2htZW1B bGxvY2F0b3I7CiBzbG9ja190ICAgICpTaG1lbUxvY2s7CQkJLyogcG9pbnRzIHRvIFNobWVt QWxsb2NhdG9yLT5zaG1lbV9sb2NrICovCi1zdGF0aWMgSFRBQiAqU2htZW1JbmRleCA9IE5V TEw7IC8qIHByaW1hcnkgaW5kZXggaGFzaHRhYmxlIGZvciBzaG1lbSAqLworCitzdGF0aWMg Ym9vbCBzaG1lbV9pbml0aWFsaXplZCA9IGZhbHNlOworCisvKgorICogU2htZW1JbmRleCBp cyBhIGdsb2JhbCBkaXJlY3Rvcnkgb2Ygc2htZW0gYXJlYXMsIGl0c2VsZiBhbHNvIHN0b3Jl ZCBpbiB0aGUKKyAqIHNoYXJlZCBtZW1vcnkuCisgKi8KK3N0YXRpYyBIVEFCICpTaG1lbUlu ZGV4OworCisgLyogbWF4IHNpemUgb2YgZGF0YSBzdHJ1Y3R1cmUgc3RyaW5nIG5hbWUgKi8K KyNkZWZpbmUgU0hNRU1fSU5ERVhfS0VZU0laRQkJICg0OCkKKworLyoKKyAqICMgb2YgYWRk aXRpb25hbCBlbnRyaWVzIHRvIHJlc2VydmUgaW4gdGhlIHNobWVtIGluZGV4IHRhYmxlLCBm b3IgYWxsb2NhdGlvbnMKKyAqIGFmdGVyIHBvc3RtYXN0ZXIgc3RhcnR1cCAobm90IGEgaGFy ZCBsaW1pdCkKKyAqLworI2RlZmluZSBTSE1FTV9JTkRFWF9BRERJVElPTkFMX1NJWkUJCSAo NjQpCisKKy8qIHRoaXMgaXMgYSBoYXNoIGJ1Y2tldCBpbiB0aGUgc2htZW0gaW5kZXggdGFi bGUgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJY2hhcgkJa2V5W1NITUVNX0lOREVYX0tFWVNJ WkVdOwkvKiBzdHJpbmcgbmFtZSAqLworCXZvaWQJICAgKmxvY2F0aW9uOwkJLyogbG9jYXRp b24gaW4gc2hhcmVkIG1lbSAqLworCVNpemUJCXNpemU7CQkJLyogIyBieXRlcyByZXF1ZXN0 ZWQgZm9yIHRoZSBzdHJ1Y3R1cmUgKi8KKwlTaXplCQlhbGxvY2F0ZWRfc2l6ZTsgLyogIyBi eXRlcyBhY3R1YWxseSBhbGxvY2F0ZWQgKi8KK30gU2htZW1JbmRleEVudDsKIAogLyogVG8g Z2V0IHJlbGlhYmxlIHJlc3VsdHMgZm9yIE5VTUEgaW5xdWlyeSB3ZSBuZWVkIHRvICJ0b3Vj aCBwYWdlcyIgb25jZSAqLwogc3RhdGljIGJvb2wgZmlyc3ROdW1hVG91Y2ggPSB0cnVlOwog CiBEYXR1bQkJcGdfbnVtYV9hdmFpbGFibGUoUEdfRlVOQ1RJT05fQVJHUyk7CiAKKy8qCisg KglTaG1lbVJlZ2lzdGVyU3RydWN0KCkgLS0tIHJlZ2lzdGVyIGEgc2hhcmVkIG1lbW9yeSBz dHJ1Y3QKKyAqCisgKiBTdWJzeXN0ZW1zIGNhbGwgdGhpcyB0byByZWdpc3RlciB0aGVpciBz aGFyZWQgbWVtb3J5IG5lZWRzLiAgVGhhdCBzaG91bGQgYmUKKyAqIGRvbmUgZWFybHkgaW4g cG9zdG1hc3RlciBzdGFydHVwLCBiZWZvcmUgdGhlIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBo YXMgYmVlbgorICogY3JlYXRlZCwgc28gdGhhdCB0aGUgc2l6ZSBjYW4gYmUgaW5jbHVkZWQg aW4gdGhlIGVzdGltYXRlIGZvciB0b3RhbCBhbW91bnQKKyAqIG9mIHNoYXJlZCBtZW1vcnkg bmVlZGVkLiAgV2Ugc2V0IGFzaWRlIGEgc21hbGwgYW1vdW50IG9mIG1lbW9yeSBmb3IKKyAq IGFsbG9jYXRpb25zIHRoYXQgaGFwcGVuIGxhdGVyLCBmb3IgdGhlIGJlbmVmaXQgb2Ygbm9u LXByZWxvYWRlZCBleHRlbnNpb25zLAorICogYnV0IHRoYXQgc2hvdWxkIG5vdCBiZSByZWxp ZWQgdXBvbi4KKyAqCisgKiBJbiBjb3JlIHN1YnN5c3RlbXMsIGVhY2ggc3Vic3lzdGVtJ3Mg cmVnaXN0cmF0aW9uIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tCisgKiBSZWdpc3RlclNobWVt U3RydWN0cygpLiAgSW4gZXh0ZW5zaW9ucywgdGhpcyBzaG91bGQgYmUgY2FsbGVkIGZyb20g dGhlCisgKiBfUEdfaW5pdCgpIGZ1bmN0aW9uLiAgSW4gRVhFQ19CQUNLRU5EIG1vZGUsIHRo aXMgYWxzbyBuZWVkcyB0byBiZSBjYWxsZWQgaW4KKyAqIGVhY2ggY2hpbGQgcHJvY2Vzcywg dG8gcmVhdHRhY2ggYW5kIHNldCB0aGUgcG9pbnRlciB0byB0aGUgc2hhcmVkIG1lbW9yeQor ICogYXJlYSwgdXN1YWxseSBpbiBhIGdsb2JhbCB2YXJpYWJsZS4gIENhbGxpbmcgdGhpcyBm cm9tIHRoZSBfUEdfaW5pdCgpCisgKiBpbml0aWFsaXplciB0YWtlcyBjYXJlIG9mIHRoYXQg dG9vLgorICoKKyAqIFdoZW4gY2FsbGVkIGR1cmluZyBwb3N0bWFzdGVyIHN0YXJ0dXAsIGJl Zm9yZSB0aGUgc2hhcmVkIG1lbW9yeSBoYXMgYmVlbgorICogYWxsb2NhdGVkLCB0aGUgZnVu Y3Rpb24gbWVyZWx5IHJlbWVtYmVycyB0aGUgcmVnaXN0ZXJlZCBkZXNjcmlwdG9yLCBidXQg dGhlCisgKiBkZXNjcmlwdG9yIG1heSBzdGlsbCBiZSBjaGFuZ2VkIGxhdGVyLCB1bnRpbCB0 aGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50IGhhcworICogYmVlbiBhbGxvY2F0ZWQuICBUaGF0 IG1lYW5zIHRoYXQgYW4gZXh0ZW5zaW9uIG1heSBzdGlsbCBtb2RpZnkgdGhlCisgKiBhbHJl YWR5LXJlZ2lzdGVyZWQgZGVzY3JpcHRvciBpbiB0aGUgc2htZW1fcmVxdWVzdF9ob29rLiAg QSBjb21tb24gZXhhbXBsZQorICogb2Ygd2hlbiB0aGF0J3MgdXNlZnVsIGlzIHdoZW4gdGhl IHNpemUgZGVwZW5kcyBvbiBNYXhCYWNrZW5kczogeW91IGNhbgorICogbGVhdmUgdGhlIHNp emUgZW1wdHkgaW4gdGhlIFNobWVtUmVnaXN0ZXJTdHJ1Y3QoKSBjYWxsIGFuZCBmaWxsIGl0 IGxhdGVyIGluCisgKiB0aGUgc2htZW1fcmVxdWVzdF9ob29rLgorICoKKyAqIFJldHVybnMg dHJ1ZSBpZiB0aGUgc3RydWN0IHdhcyBhbHJlYWR5IGluaXRpYWxpemVkIGluIHNoYXJlZCBt ZW1vcnkgYW5kIHdlCisgKiBtZXJlbHkgYXR0YWNoZWQgdG8gaXQuCisgKi8KK2Jvb2wKK1No bWVtUmVnaXN0ZXJTdHJ1Y3QoU2htZW1TdHJ1Y3REZXNjICpkZXNjKQoreworCWJvb2wJCWZv dW5kOworCisJLyogQ2hlY2sgdGhhdCBpdCdzIG5vdCBhbHJlYWR5IHJlZ2lzdGVyZWQgaW4g dGhpcyBwcm9jZXNzICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fcmVnaXN0ZXJlZF9z aG1lbV9hcmVhczsgaSsrKQorCXsKKwkJU2htZW1TdHJ1Y3REZXNjICpleGlzdGluZyA9IHJl Z2lzdGVyZWRfc2htZW1fYXJlYXNbaV07CisKKwkJaWYgKHN0cmNtcChleGlzdGluZy0+bmFt ZSwgZGVzYy0+bmFtZSkgPT0gMCkKKwkJCWVsb2coRVJST1IsICJzaGFyZWQgbWVtb3J5IHN0 cnVjdCBcIiVzXCIgaXMgYWxyZWFkeSByZWdpc3RlcmVkIiwKKwkJCQkgZGVzYy0+bmFtZSk7 CisJfQorCisJLyogZGVzYy0+cHRyIGNhbiBiZSBub24tTlVMTCB3aGVuIHJlLWluaXRpYWxp emluZyBhZnRlciBjcmFzaCAqLworCWlmICghSXNVbmRlclBvc3RtYXN0ZXIgJiYgZGVzYy0+ cHRyKQorCQkqZGVzYy0+cHRyID0gTlVMTDsKKworCS8qIEFkZCB0aGUgZGVzY3JpcHRvciB0 byB0aGUgYXJyYXksIGdyb3dpbmcgdGhlIGFycmF5IGlmIG5lZWRlZCAqLworCWlmIChudW1f cmVnaXN0ZXJlZF9zaG1lbV9hcmVhcyA9PSBtYXhfcmVnaXN0ZXJlZF9zaG1lbV9hcmVhcykK Kwl7CisJCWludAkJCW5ld19zaXplOworCisJCWlmIChyZWdpc3RlcmVkX3NobWVtX2FyZWFz KQorCQl7CisJCQluZXdfc2l6ZSA9IG1heF9yZWdpc3RlcmVkX3NobWVtX2FyZWFzICogMjsK KwkJCXJlZ2lzdGVyZWRfc2htZW1fYXJlYXMgPSByZXBhbGxvYyhyZWdpc3RlcmVkX3NobWVt X2FyZWFzLAorCQkJCQkJCQkJCQkgIG5ld19zaXplICogc2l6ZW9mKFNobWVtU3RydWN0RGVz YyAqKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQluZXdfc2l6ZSA9IElOSVRJQUxfUkVHSVNU UllfU0laRTsKKwkJCXJlZ2lzdGVyZWRfc2htZW1fYXJlYXMgPSBNZW1vcnlDb250ZXh0QWxs b2MoVG9wTWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCQkJCQkJbmV3X3NpemUgKiBzaXplb2Yo U2htZW1TdHJ1Y3REZXNjICopKTsKKwkJfQorCQltYXhfcmVnaXN0ZXJlZF9zaG1lbV9hcmVh cyA9IG5ld19zaXplOworCX0KKwlyZWdpc3RlcmVkX3NobWVtX2FyZWFzW251bV9yZWdpc3Rl cmVkX3NobWVtX2FyZWFzKytdID0gZGVzYzsKKworCS8qCisJICogSWYgY2FsbGVkIGFmdGVy IHBvc3RtYXN0ZXIgc3RhcnR1cCwgd2UgbmVlZCB0byBpbW1lZGlhdGVseSBhbHNvCisJICog aW5pdGlhbGl6ZSBvciBhdHRhY2ggdG8gdGhlIGFyZWEuCisJICovCisJaWYgKHNobWVtX2lu aXRpYWxpemVkKQorCXsKKwkJU2htZW1JbmRleEVudCAqaW5kZXhfZW50cnk7CisKKwkJTFdM b2NrQWNxdWlyZShTaG1lbUluZGV4TG9jaywgTFdfRVhDTFVTSVZFKTsKKworCQkvKiBsb29r IGl0IHVwIGluIHRoZSBzaG1lbSBpbmRleCAqLworCQlpbmRleF9lbnRyeSA9IChTaG1lbUlu ZGV4RW50ICopCisJCQloYXNoX3NlYXJjaChTaG1lbUluZGV4LCBkZXNjLT5uYW1lLCBIQVNI X0VOVEVSX05VTEwsICZmb3VuZCk7CisJCWlmICghaW5kZXhfZW50cnkpCisJCXsKKwkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfT1VUX09GX01FTU9SWSksCisJ CQkJCSBlcnJtc2coImNvdWxkIG5vdCBjcmVhdGUgU2htZW1JbmRleCBlbnRyeSBmb3IgZGF0 YSBzdHJ1Y3R1cmUgXCIlc1wiIiwKKwkJCQkJCQlkZXNjLT5uYW1lKSkpOworCQl9CisJCWlm IChmb3VuZCkKKwkJeworCQkJLyogQWxyZWFkeSBwcmVzZW50LCBqdXN0IGF0dGFjaCB0byBp dCAqLworCQkJaWYgKGluZGV4X2VudHJ5LT5zaXplICE9IGRlc2MtPnNpemUpCisJCQkJZWxv ZyhFUlJPUiwgInNoYXJlZCBtZW1vcnkgc3RydWN0IFwiJXNcIiBpcyBhbHJlYWR5IHJlZ2lz dGVyZWQgd2l0aCBkaWZmZXJlbnQgc2l6ZSIsCisJCQkJCSBkZXNjLT5uYW1lKTsKKwkJCWlm IChkZXNjLT5wdHIpCisJCQkJKmRlc2MtPnB0ciA9IGluZGV4X2VudHJ5LT5sb2NhdGlvbjsK KwkJCWlmIChkZXNjLT5hdHRhY2hfZm4pCisJCQkJZGVzYy0+YXR0YWNoX2ZuKGRlc2MtPmF0 dGFjaF9mbl9hcmcpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIFRoaXMgaXMg dGhlIGZpcnN0IHRpbWUuICBJbml0aWFsaXplIGl0IGxpa2UKKwkJCSAqIFNobWVtSW5pdFJl Z2lzdGVyZWQoKSB3b3VsZAorCQkJICovCisJCQlzaXplX3QJCWFsbG9jYXRlZF9zaXplOwor CQkJdm9pZAkgICAqc3RydWN0UHRyOworCisJCQlzdHJ1Y3RQdHIgPSBTaG1lbUFsbG9jUmF3 KGRlc2MtPnNpemUsICZhbGxvY2F0ZWRfc2l6ZSk7CisJCQlpZiAoc3RydWN0UHRyID09IE5V TEwpCisJCQl7CisJCQkJLyogb3V0IG9mIG1lbW9yeTsgcmVtb3ZlIHRoZSBmYWlsZWQgU2ht ZW1JbmRleCBlbnRyeSAqLworCQkJCWhhc2hfc2VhcmNoKFNobWVtSW5kZXgsIGRlc2MtPm5h bWUsIEhBU0hfUkVNT1ZFLCBOVUxMKTsKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVy cmNvZGUoRVJSQ09ERV9PVVRfT0ZfTUVNT1JZKSwKKwkJCQkJCSBlcnJtc2coIm5vdCBlbm91 Z2ggc2hhcmVkIG1lbW9yeSBmb3IgZGF0YSBzdHJ1Y3R1cmUiCisJCQkJCQkJCSIgXCIlc1wi ICglenUgYnl0ZXMgcmVxdWVzdGVkKSIsCisJCQkJCQkJCWRlc2MtPm5hbWUsIGRlc2MtPnNp emUpKSk7CisJCQl9CisJCQlpbmRleF9lbnRyeS0+c2l6ZSA9IGRlc2MtPnNpemU7CisJCQlp bmRleF9lbnRyeS0+YWxsb2NhdGVkX3NpemUgPSBhbGxvY2F0ZWRfc2l6ZTsKKwkJCWluZGV4 X2VudHJ5LT5sb2NhdGlvbiA9IHN0cnVjdFB0cjsKKwkJCWlmIChkZXNjLT5wdHIpCisJCQkJ KmRlc2MtPnB0ciA9IGluZGV4X2VudHJ5LT5sb2NhdGlvbjsKKworCQkJLyoKKwkJCSAqIFhY WDogaWYgdGhpcyBlcnJvcnMgb3V0LCB0aGUgYXJlYSBpcyBsZWZ0IGluIGEgaGFsZi1pbml0 aWFsaXplZAorCQkJICogc3RhdGUKKwkJCSAqLworCQkJaWYgKGRlc2MtPmluaXRfZm4pCisJ CQkJZGVzYy0+aW5pdF9mbihkZXNjLT5pbml0X2ZuX2FyZyk7CisJCX0KKworCQlMV0xvY2tS ZWxlYXNlKFNobWVtSW5kZXhMb2NrKTsKKwl9CisJZWxzZQorCQlmb3VuZCA9IGZhbHNlOwor CisJcmV0dXJuIGZvdW5kOworfQorCisvKgorICoJU2htZW1SZWdpc3RlcmVkU2l6ZSgpIC0t LSBlc3RpbWF0ZSB0aGUgdG90YWwgc2l6ZSBvZiBhbGwgcmVnaXN0ZXJlZCBzaGFyZWQKKyAq ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSBzdHJ1Y3R1cmVzLgorICoKKyAq IFRoaXMgaXMgY2FsbGVkIG9uY2UgYXQgcG9zdG1hc3RlciBzdGFydHVwLCBiZWZvcmUgdGhl IHNoYXJlZCBtZW1vcnkgc2VnbWVudAorICogaGFzIGJlZW4gY3JlYXRlZC4KKyAqLworc2l6 ZV90CitTaG1lbVJlZ2lzdGVyZWRTaXplKHZvaWQpCit7CisJc2l6ZV90CQlzaXplOworCisJ LyogbWVtb3J5IG5lZWRlZCBmb3IgdGhlIFNobWVtSW5kZXggKi8KKwlzaXplID0gaGFzaF9l c3RpbWF0ZV9zaXplKG51bV9yZWdpc3RlcmVkX3NobWVtX2FyZWFzICsgU0hNRU1fSU5ERVhf QURESVRJT05BTF9TSVpFLAorCQkJCQkJCSAgc2l6ZW9mKFNobWVtSW5kZXhFbnQpKTsKKwor CS8qIG1lbW9yeSBuZWVkZWQgZm9yIGFsbCB0aGUgcmVnaXN0ZXJlZCBhcmVhcyAqLworCWZv ciAoaW50IGkgPSAwOyBpIDwgbnVtX3JlZ2lzdGVyZWRfc2htZW1fYXJlYXM7IGkrKykKKwl7 CisJCVNobWVtU3RydWN0RGVzYyAqZGVzYyA9IHJlZ2lzdGVyZWRfc2htZW1fYXJlYXNbaV07 CisKKwkJc2l6ZSA9IGFkZF9zaXplKHNpemUsIGRlc2MtPnNpemUpOworCQlzaXplID0gYWRk X3NpemUoc2l6ZSwgZGVzYy0+ZXh0cmFfc2l6ZSk7CisJfQorCisJcmV0dXJuIHNpemU7Cit9 CisKKy8qCisgKglTaG1lbUluaXRSZWdpc3RlcmVkKCkgLS0tIGFsbG9jYXRlIGFuZCBpbml0 aWFsaXplIHByZS1yZWdpc3RlcmVkIHNoYXJlZAorICogICAgICAgICAgICAgICAgICAgICAg ICAgICAgbWVtb3J5IHN0cnVjdHVyZXMuCisgKgorICogVGhpcyBpcyBjYWxsZWQgb25jZSBh dCBwb3N0bWFzdGVyIHN0YXJ0dXAsIGFmdGVyIHRoZSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQK KyAqIGhhcyBiZWVuIGNyZWF0ZWQuCisgKi8KK3ZvaWQKK1NobWVtSW5pdFJlZ2lzdGVyZWQo dm9pZCkKK3sKKwkvKiBTaG91bGQgYmUgY2FsbGVkIG9ubHkgYnkgdGhlIHBvc3RtYXN0ZXIg b3IgYSBzdGFuZGFsb25lIGJhY2tlbmQuICovCisJQXNzZXJ0KCFJc1VuZGVyUG9zdG1hc3Rl cik7CisJQXNzZXJ0KCFzaG1lbV9pbml0aWFsaXplZCk7CisKKwkvKgorCSAqIEluaXRpYWxp emUgYWxsIHRoZSByZWdpc3RlcmVkIG1lbW9yeSBhcmVhcy4gIFRoZXJlIGFyZSBubyBjb25j dXJyZW50CisJICogcHJvY2Vzc2VzIHlldCwgc28gbm8gbmVlZCBmb3IgbG9ja2luZy4KKwkg Ki8KKwlmb3IgKGludCBpID0gMDsgaSA8IG51bV9yZWdpc3RlcmVkX3NobWVtX2FyZWFzOyBp KyspCisJeworCQlTaG1lbVN0cnVjdERlc2MgKmRlc2MgPSByZWdpc3RlcmVkX3NobWVtX2Fy ZWFzW2ldOworCQlzaXplX3QJCWFsbG9jYXRlZF9zaXplOworCQl2b2lkCSAgICpzdHJ1Y3RQ dHI7CisJCWJvb2wJCWZvdW5kOworCQlTaG1lbUluZGV4RW50ICppbmRleF9lbnRyeTsKKwor CQkvKiBsb29rIGl0IHVwIGluIHRoZSBzaG1lbSBpbmRleCAqLworCQlpbmRleF9lbnRyeSA9 IChTaG1lbUluZGV4RW50ICopCisJCQloYXNoX3NlYXJjaChTaG1lbUluZGV4LCBkZXNjLT5u YW1lLCBIQVNIX0VOVEVSX05VTEwsICZmb3VuZCk7CisJCWlmICghaW5kZXhfZW50cnkpCisJ CXsKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfT1VUX09GX01F TU9SWSksCisJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBjcmVhdGUgU2htZW1JbmRleCBlbnRy eSBmb3IgZGF0YSBzdHJ1Y3R1cmUgXCIlc1wiIiwKKwkJCQkJCQlkZXNjLT5uYW1lKSkpOwor CQl9CisJCWlmIChmb3VuZCkKKwkJCWVsb2coRVJST1IsICJzaG1lbSBzdHJ1Y3QgXCIlc1wi IGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQiLCBkZXNjLT5uYW1lKTsKKworCQkvKiBhbGxvY2F0 ZSBhbmQgaW5pdGlhbGl6ZSBpdCAqLworCQlzdHJ1Y3RQdHIgPSBTaG1lbUFsbG9jUmF3KGRl c2MtPnNpemUsICZhbGxvY2F0ZWRfc2l6ZSk7CisJCWlmIChzdHJ1Y3RQdHIgPT0gTlVMTCkK KwkJeworCQkJLyogb3V0IG9mIG1lbW9yeTsgcmVtb3ZlIHRoZSBmYWlsZWQgU2htZW1JbmRl eCBlbnRyeSAqLworCQkJaGFzaF9zZWFyY2goU2htZW1JbmRleCwgZGVzYy0+bmFtZSwgSEFT SF9SRU1PVkUsIE5VTEwpOworCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJS Q09ERV9PVVRfT0ZfTUVNT1JZKSwKKwkJCQkJIGVycm1zZygibm90IGVub3VnaCBzaGFyZWQg bWVtb3J5IGZvciBkYXRhIHN0cnVjdHVyZSIKKwkJCQkJCQkiIFwiJXNcIiAoJXp1IGJ5dGVz IHJlcXVlc3RlZCkiLAorCQkJCQkJCWRlc2MtPm5hbWUsIGRlc2MtPnNpemUpKSk7CisJCX0K KwkJaW5kZXhfZW50cnktPnNpemUgPSBkZXNjLT5zaXplOworCQlpbmRleF9lbnRyeS0+YWxs b2NhdGVkX3NpemUgPSBhbGxvY2F0ZWRfc2l6ZTsKKwkJaW5kZXhfZW50cnktPmxvY2F0aW9u ID0gc3RydWN0UHRyOworCisJCSooZGVzYy0+cHRyKSA9IHN0cnVjdFB0cjsKKwkJaWYgKGRl c2MtPmluaXRfZm4pCisJCQlkZXNjLT5pbml0X2ZuKGRlc2MtPmluaXRfZm5fYXJnKTsKKwl9 CisKKwlzaG1lbV9pbml0aWFsaXplZCA9IHRydWU7Cit9CisKKy8qCisgKiBDYWxsIHRoZSBh dHRhY2hfZm4gY2FsbGJhY2tzIG9mIGFsbCByZWdpc3RlcmVkIHNobWVtIGFyZWFzCisgKgor ICogVGhpcyBpcyBjYWxsZWQgYXQgYmFja2VuZCBzdGFydHVwLCBpbiBFWEVDX0JBQ0tFTkQg bW9kZS4KKyAqLworI2lmZGVmIEVYRUNfQkFDS0VORAordm9pZAorU2htZW1BdHRhY2hSZWdp c3RlcmVkKHZvaWQpCit7CisJLyogTXVzdCBiZSBpbml0aWFsaXppbmcgYSAobm9uLXN0YW5k YWxvbmUpIGJhY2tlbmQgKi8KKwlBc3NlcnQoSXNVbmRlclBvc3RtYXN0ZXIpOworCUFzc2Vy dChTaG1lbUFsbG9jYXRvci0+aW5kZXggIT0gTlVMTCk7CisKKwlMV0xvY2tBY3F1aXJlKFNo bWVtSW5kZXhMb2NrLCBMV19TSEFSRUQpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1f cmVnaXN0ZXJlZF9zaG1lbV9hcmVhczsgaSsrKQorCXsKKwkJU2htZW1TdHJ1Y3REZXNjICpk ZXNjID0gcmVnaXN0ZXJlZF9zaG1lbV9hcmVhc1tpXTsKKwkJYm9vbAkJZm91bmQ7CisJCVNo bWVtSW5kZXhFbnQgKnJlc3VsdDsKKworCQkvKiBsb29rIGl0IHVwIGluIHRoZSBzaG1lbSBp bmRleCAqLworCQlyZXN1bHQgPSAoU2htZW1JbmRleEVudCAqKQorCQkJaGFzaF9zZWFyY2go U2htZW1JbmRleCwgZGVzYy0+bmFtZSwgSEFTSF9GSU5ELCAmZm91bmQpOworCQlpZiAoIWZv dW5kKQorCQl7CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX09V VF9PRl9NRU1PUlkpLAorCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgZmluZCBTaG1lbUluZGV4 IGVudHJ5IGZvciBkYXRhIHN0cnVjdHVyZSBcIiVzXCIiLAorCQkJCQkJCWRlc2MtPm5hbWUp KSk7CisJCX0KKworCQlpZiAoZGVzYy0+cHRyKQorCQkJKmRlc2MtPnB0ciA9IHJlc3VsdC0+ bG9jYXRpb247CisJCWlmIChkZXNjLT5hdHRhY2hfZm4pCisJCQlkZXNjLT5hdHRhY2hfZm4o ZGVzYy0+YXR0YWNoX2ZuX2FyZyk7CisJfQorCisJTFdMb2NrUmVsZWFzZShTaG1lbUluZGV4 TG9jayk7CisKKwlzaG1lbV9pbml0aWFsaXplZCA9IHRydWU7Cit9CisjZW5kaWYKKworLyoK KyAqIFJlc2V0IHRoZSBzaG1lbSBzdHJ1Y3QgcmVnaXN0cnkgb24gcG9zdG1hc3RlciBjcmFz aCByZXN0YXJ0LgorICovCit2b2lkCitSZXNldFNobWVtQWxsb2NhdG9yKHZvaWQpCit7CisJ c2htZW1faW5pdGlhbGl6ZWQgPSBmYWxzZTsKKwludW1fcmVnaXN0ZXJlZF9zaG1lbV9hcmVh cyA9IDA7CisKKwkvKiBGSVhNRTogdGhpcyBsZWFrcyB0aGUgYWxsb2NhdGlvbnMgaW4gVG9w TWVtb3J5Q29udGV4dCAqLworfQorCiAvKgogICoJSW5pdFNobWVtQWxsb2NhdG9yKCkgLS0t IHNldCB1cCBiYXNpYyBwb2ludGVycyB0byBzaGFyZWQgbWVtb3J5LgogICoKICAqIENhbGxl ZCBhdCBwb3N0bWFzdGVyIG9yIHN0YW5kLWFsb25lIGJhY2tlbmQgc3RhcnR1cCwgdG8gaW5p dGlhbGl6ZSB0aGUKICAqIGFsbG9jYXRvcidzIGRhdGEgc3RydWN0dXJlIGluIHRoZSBzaGFy ZWQgbWVtb3J5IHNlZ21lbnQuICBJbiBFWEVDX0JBQ0tFTkQsCi0gKiB0aGlzIGlzIGFsc28g Y2FsbGVkIGF0IGJhY2tlbmQgc3RhcnR1cCwgdG8gc2V0IHVwIHBvaW50ZXJzIHRvIHRoZSBz aGFyZWQKLSAqIG1lbW9yeSBhcmVhcy4KKyAqIGFsc28gY2FsbGVkIGF0IGJhY2tlbmQgc3Rh cnR1cCwgdG8gc2V0IHVwIHBvaW50ZXJzIHRvIHRoZQorICogYWxyZWFkeS1pbml0aWFsaXpl ZCBkYXRhIHN0cnVjdHVyZS4KICAqLwogdm9pZAogSW5pdFNobWVtQWxsb2NhdG9yKFBHU2ht ZW1IZWFkZXIgKnNlZ2hkcikKIHsKKwlTaXplCQlvZmZzZXQ7CisJaW50CQkJaGFzaF9zaXpl OworCUhBU0hDVEwJCWluZm87CisJaW50CQkJaGFzaF9mbGFnczsKKwlzaXplX3QJCXNpemU7 CisKKwlBc3NlcnQoIXNobWVtX2luaXRpYWxpemVkKTsKIAlBc3NlcnQoc2VnaGRyICE9IE5V TEwpOwogCiAJLyoKQEAgLTEzNCw0MSArNTIzLDQ3IEBAIEluaXRTaG1lbUFsbG9jYXRvcihQ R1NobWVtSGVhZGVyICpzZWdoZHIpCiAJU2htZW1CYXNlID0gc2VnaGRyOwogCVNobWVtRW5k ID0gKGNoYXIgKikgU2htZW1CYXNlICsgc2VnaGRyLT50b3RhbHNpemU7CiAKLSNpZm5kZWYg RVhFQ19CQUNLRU5ECi0JQXNzZXJ0KCFJc1VuZGVyUG9zdG1hc3Rlcik7Ci0jZW5kaWYKLQlp ZiAoSXNVbmRlclBvc3RtYXN0ZXIpCi0JewotCQlQR1NobWVtSGVhZGVyICpzaG1oZHIgPSBT aG1lbVNlZ0hkcjsKLQotCQlTaG1lbUFsbG9jYXRvciA9IChTaG1lbUFsbG9jYXRvckRhdGEg KikgKChjaGFyICopIHNobWhkciArIHNobWhkci0+Y29udGVudF9vZmZzZXQpOwotCQlTaG1l bUxvY2sgPSAmU2htZW1BbGxvY2F0b3ItPnNobWVtX2xvY2s7Ci0JfQotCWVsc2UKLQl7Ci0J CVNpemUJCW9mZnNldDsKLQotCQkvKgotCQkgKiBBbGxvY2F0aW9ucyBhZnRlciB0aGlzIHBv aW50IHNob3VsZCBnbyB0aHJvdWdoIFNobWVtQWxsb2MsIHdoaWNoCi0JCSAqIGV4cGVjdHMg dG8gYWxsb2NhdGUgZXZlcnl0aGluZyBvbiBjYWNoZSBsaW5lIGJvdW5kYXJpZXMuICBNYWtl IHN1cmUKLQkJICogdGhlIGZpcnN0IGFsbG9jYXRpb24gYmVnaW5zIG9uIGEgY2FjaGUgbGlu ZSBib3VuZGFyeS4KLQkJICovCi0JCW9mZnNldCA9IENBQ0hFTElORUFMSUdOKHNlZ2hkci0+ Y29udGVudF9vZmZzZXQgKyBzaXplb2YoU2htZW1BbGxvY2F0b3JEYXRhKSk7Ci0JCWlmIChv ZmZzZXQgPiBzZWdoZHItPnRvdGFsc2l6ZSkKLQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCShl cnJjb2RlKEVSUkNPREVfT1VUX09GX01FTU9SWSksCi0JCQkJCSBlcnJtc2coIm91dCBvZiBz aGFyZWQgbWVtb3J5ICglenUgYnl0ZXMgcmVxdWVzdGVkKSIsCi0JCQkJCQkJb2Zmc2V0KSkp OworCS8qCisJICogQWxsb2NhdGlvbnMgYWZ0ZXIgdGhpcyBwb2ludCBzaG91bGQgZ28gdGhy b3VnaCBTaG1lbUFsbG9jLCB3aGljaAorCSAqIGV4cGVjdHMgdG8gYWxsb2NhdGUgZXZlcnl0 aGluZyBvbiBjYWNoZSBsaW5lIGJvdW5kYXJpZXMuICBNYWtlIHN1cmUgdGhlCisJICogZmly c3QgYWxsb2NhdGlvbiBiZWdpbnMgb24gYSBjYWNoZSBsaW5lIGJvdW5kYXJ5LgorCSAqLwor CW9mZnNldCA9IENBQ0hFTElORUFMSUdOKHNlZ2hkci0+Y29udGVudF9vZmZzZXQgKyBzaXpl b2YoU2htZW1BbGxvY2F0b3JEYXRhKSk7CisJaWYgKG9mZnNldCA+IHNlZ2hkci0+dG90YWxz aXplKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfT1VUX09GX01F TU9SWSksCisJCQkJIGVycm1zZygib3V0IG9mIHNoYXJlZCBtZW1vcnkgKCV6dSBieXRlcyBy ZXF1ZXN0ZWQpIiwKKwkJCQkJCW9mZnNldCkpKTsKIAotCQlTaG1lbUFsbG9jYXRvciA9IChT aG1lbUFsbG9jYXRvckRhdGEgKikgKChjaGFyICopIHNlZ2hkciArIHNlZ2hkci0+Y29udGVu dF9vZmZzZXQpOworCVNobWVtQWxsb2NhdG9yID0gKFNobWVtQWxsb2NhdG9yRGF0YSAqKSAo KGNoYXIgKikgc2VnaGRyICsgc2VnaGRyLT5jb250ZW50X29mZnNldCk7CisJU2htZW1Mb2Nr ID0gJlNobWVtQWxsb2NhdG9yLT5zaG1lbV9sb2NrOwogCisJaWYgKCFJc1VuZGVyUG9zdG1h c3RlcikKKwl7CiAJCVNwaW5Mb2NrSW5pdCgmU2htZW1BbGxvY2F0b3ItPnNobWVtX2xvY2sp OwotCQlTaG1lbUxvY2sgPSAmU2htZW1BbGxvY2F0b3ItPnNobWVtX2xvY2s7CiAJCVNobWVt QWxsb2NhdG9yLT5mcmVlX29mZnNldCA9IG9mZnNldDsKLQkJLyogU2htZW1JbmRleCBjYW4n dCBiZSBzZXQgdXAgeWV0IChuZWVkIExXTG9ja3MgZmlyc3QpICovCi0JCVNobWVtQWxsb2Nh dG9yLT5pbmRleCA9IE5VTEw7Ci0JCVNobWVtSW5kZXggPSAoSFRBQiAqKSBOVUxMOwogCX0K KworCS8qCisJICogQ3JlYXRlIChvciBhdHRhY2ggdG8pIHRoZSBzaGFyZWQgbWVtb3J5IGlu ZGV4IG9mIHNobWVtIGFyZWFzLgorCSAqLworCWhhc2hfc2l6ZSA9IG51bV9yZWdpc3RlcmVk X3NobWVtX2FyZWFzICsgU0hNRU1fSU5ERVhfQURESVRJT05BTF9TSVpFOworCisJaW5mby5r ZXlzaXplID0gU0hNRU1fSU5ERVhfS0VZU0laRTsKKwlpbmZvLmVudHJ5c2l6ZSA9IHNpemVv ZihTaG1lbUluZGV4RW50KTsKKwlpbmZvLmRzaXplID0gaW5mby5tYXhfZHNpemUgPSBoYXNo X3NlbGVjdF9kaXJzaXplKGhhc2hfc2l6ZSk7CisJaW5mby5hbGxvYyA9IFNobWVtQWxsb2NO b0Vycm9yOworCWhhc2hfZmxhZ3MgPSBIQVNIX0VMRU0gfCBIQVNIX1NUUklOR1MgfCBIQVNI X1NIQVJFRF9NRU0gfCBIQVNIX0FMTE9DIHwgSEFTSF9ESVJTSVpFOworCWlmICghSXNVbmRl clBvc3RtYXN0ZXIpCisJeworCQlzaXplID0gaGFzaF9nZXRfc2hhcmVkX3NpemUoJmluZm8s IGhhc2hfZmxhZ3MpOworCQlTaG1lbUFsbG9jYXRvci0+aW5kZXggPSAoSEFTSEhEUiAqKSBT aG1lbUFsbG9jKHNpemUpOworCX0KKwllbHNlCisJCWhhc2hfZmxhZ3MgfD0gSEFTSF9BVFRB Q0g7CisJaW5mby5oY3RsID0gU2htZW1BbGxvY2F0b3ItPmluZGV4OworCVNobWVtSW5kZXgg PSBoYXNoX2NyZWF0ZSgiU2htZW1JbmRleCIsIGhhc2hfc2l6ZSwgJmluZm8sIGhhc2hfZmxh Z3MpOworCUFzc2VydChTaG1lbUluZGV4ICE9IE5VTEwpOwogfQogCiAvKgpAQCAtMjY4LDY3 ICs2NjMsMTQgQEAgU2htZW1BZGRySXNWYWxpZChjb25zdCB2b2lkICphZGRyKQogfQogCiAv KgotICoJSW5pdFNobWVtSW5kZXgoKSAtLS0gc2V0IHVwIG9yIGF0dGFjaCB0byBzaG1lbSBp bmRleCB0YWJsZS4KLSAqLwotdm9pZAotSW5pdFNobWVtSW5kZXgodm9pZCkKLXsKLQlIQVNI Q1RMCQlpbmZvOwotCi0JLyoKLQkgKiBDcmVhdGUgdGhlIHNoYXJlZCBtZW1vcnkgc2htZW0g aW5kZXguCi0JICoKLQkgKiBTaW5jZSBTaG1lbUluaXRIYXNoIGNhbGxzIFNobWVtSW5pdFN0 cnVjdCwgd2hpY2ggZXhwZWN0cyB0aGUgU2htZW1JbmRleAotCSAqIGhhc2h0YWJsZSB0byBl eGlzdCBhbHJlYWR5LCB3ZSBoYXZlIGEgYml0IG9mIGEgY2lyY3VsYXJpdHkgcHJvYmxlbSBp bgotCSAqIGluaXRpYWxpemluZyB0aGUgU2htZW1JbmRleCBpdHNlbGYuICBUaGUgc3BlY2lh bCAiU2htZW1JbmRleCIgaGFzaAotCSAqIHRhYmxlIG5hbWUgd2lsbCB0ZWxsIFNobWVtSW5p dFN0cnVjdCB0byBmYWtlIGl0LgotCSAqLwotCWluZm8ua2V5c2l6ZSA9IFNITUVNX0lOREVY X0tFWVNJWkU7Ci0JaW5mby5lbnRyeXNpemUgPSBzaXplb2YoU2htZW1JbmRleEVudCk7Ci0K LQlTaG1lbUluZGV4ID0gU2htZW1Jbml0SGFzaCgiU2htZW1JbmRleCIsCi0JCQkJCQkJICAg U0hNRU1fSU5ERVhfU0laRSwgU0hNRU1fSU5ERVhfU0laRSwKLQkJCQkJCQkgICAmaW5mbywK LQkJCQkJCQkgICBIQVNIX0VMRU0gfCBIQVNIX1NUUklOR1MpOwotfQotCi0vKgotICogU2ht ZW1Jbml0SGFzaCAtLSBDcmVhdGUgYW5kIGluaXRpYWxpemUsIG9yIGF0dGFjaCB0bywgYQot ICoJCXNoYXJlZCBtZW1vcnkgaGFzaCB0YWJsZS4KLSAqCi0gKiBXZSBhc3N1bWUgY2FsbGVy IGlzIGRvaW5nIHNvbWUga2luZCBvZiBzeW5jaHJvbml6YXRpb24KLSAqIHNvIHRoYXQgdHdv IHByb2Nlc3NlcyBkb24ndCB0cnkgdG8gY3JlYXRlL2luaXRpYWxpemUgdGhlIHNhbWUKLSAq IHRhYmxlIGF0IG9uY2UuICAoSW4gcHJhY3RpY2UsIGFsbCBjcmVhdGlvbnMgYXJlIGRvbmUg aW4gdGhlIHBvc3RtYXN0ZXIKLSAqIHByb2Nlc3M7IGNoaWxkIHByb2Nlc3NlcyBzaG91bGQg YWx3YXlzIGJlIGF0dGFjaGluZyB0byBleGlzdGluZyB0YWJsZXMuKQotICoKLSAqIG1heF9z aXplIGlzIHRoZSBlc3RpbWF0ZWQgbWF4aW11bSBudW1iZXIgb2YgaGFzaHRhYmxlIGVudHJp ZXMuICBUaGlzIGlzCi0gKiBub3QgYSBoYXJkIGxpbWl0LCBidXQgdGhlIGFjY2VzcyBlZmZp Y2llbmN5IHdpbGwgZGVncmFkZSBpZiBpdCBpcwotICogZXhjZWVkZWQgc3Vic3RhbnRpYWxs eSAoc2luY2UgaXQncyB1c2VkIHRvIGNvbXB1dGUgZGlyZWN0b3J5IHNpemUgYW5kCi0gKiB0 aGUgaGFzaCB0YWJsZSBidWNrZXRzIHdpbGwgZ2V0IG92ZXJmdWxsKS4KKyAqIFNobWVtUmVn aXN0ZXJIYXNoIC0tIFJlZ2lzdGVyIGEgc2hhcmVkIG1lbW9yeSBoYXNoIHRhYmxlLgogICoK LSAqIGluaXRfc2l6ZSBpcyB0aGUgbnVtYmVyIG9mIGhhc2h0YWJsZSBlbnRyaWVzIHRvIHBy ZWFsbG9jYXRlLiAgRm9yIGEgdGFibGUKLSAqIHdob3NlIG1heGltdW0gc2l6ZSBpcyBjZXJ0 YWluLCB0aGlzIHNob3VsZCBiZSBlcXVhbCB0byBtYXhfc2l6ZTsgdGhhdAotICogZW5zdXJl cyB0aGF0IG5vIHJ1bi10aW1lIG91dC1vZi1zaGFyZWQtbWVtb3J5IGZhaWx1cmVzIGNhbiBv Y2N1ci4KLSAqCi0gKiAqaW5mb1AgYW5kIGhhc2hfZmxhZ3MgbXVzdCBzcGVjaWZ5IGF0IGxl YXN0IHRoZSBlbnRyeSBzaXplcyBhbmQga2V5Ci0gKiBjb21wYXJpc29uIHNlbWFudGljcyAo c2VlIGhhc2hfY3JlYXRlKCkpLiAgRmxhZyBiaXRzIGFuZCB2YWx1ZXMgc3BlY2lmaWMKLSAq IHRvIHNoYXJlZC1tZW1vcnkgaGFzaCB0YWJsZXMgYXJlIGFkZGVkIGhlcmUsIGV4Y2VwdCB0 aGF0IGNhbGxlcnMgbWF5Ci0gKiBjaG9vc2UgdG8gc3BlY2lmeSBIQVNIX1BBUlRJVElPTiBh bmQvb3IgSEFTSF9GSVhFRF9TSVpFLgotICoKLSAqIE5vdGU6IGJlZm9yZSBQb3N0Z3JlcyA5 LjAsIHRoaXMgZnVuY3Rpb24gcmV0dXJuZWQgTlVMTCBmb3Igc29tZSBmYWlsdXJlCi0gKiBj YXNlcy4gIE5vdywgaXQgYWx3YXlzIHRocm93cyBlcnJvciBpbnN0ZWFkLCBzbyBjYWxsZXJz IG5lZWQgbm90IGNoZWNrCi0gKiBmb3IgTlVMTC4KKyAqIFNpbWlsYXIgdG8gU2htZW1SZWdp c3RlclN0cnVjdCgpLCBidXQgcmVnaXN0ZXJzIGEgaGFzaCB0YWJsZSBpbnN0ZWFkIG9mIGFu CisgKiBvcGFxdWUgYXJlYS4KICAqLwotSFRBQiAqCi1TaG1lbUluaXRIYXNoKGNvbnN0IGNo YXIgKm5hbWUsCQkvKiB0YWJsZSBzdHJpbmcgbmFtZSBmb3Igc2htZW0gaW5kZXggKi8KLQkJ CSAgaW50NjQgaW5pdF9zaXplLAkvKiBpbml0aWFsIHRhYmxlIHNpemUgKi8KLQkJCSAgaW50 NjQgbWF4X3NpemUsCS8qIG1heCBzaXplIG9mIHRoZSB0YWJsZSAqLwotCQkJICBIQVNIQ1RM ICppbmZvUCwJLyogaW5mbyBhYm91dCBrZXkgYW5kIGJ1Y2tldCBzaXplICovCi0JCQkgIGlu dCBoYXNoX2ZsYWdzKQkvKiBpbmZvIGFib3V0IGluZm9QICovCitib29sCitTaG1lbVJlZ2lz dGVySGFzaChTaG1lbUhhc2hEZXNjICpkZXNjKQogewotCWJvb2wJCWZvdW5kOwotCXZvaWQJ ICAgKmxvY2F0aW9uOwotCiAJLyoKIAkgKiBIYXNoIHRhYmxlcyBhbGxvY2F0ZWQgaW4gc2hh cmVkIG1lbW9yeSBoYXZlIGEgZml4ZWQgZGlyZWN0b3J5OyBpdCBjYW4ndAogCSAqIGdyb3cg b3Igb3RoZXIgYmFja2VuZHMgd291bGRuJ3QgYmUgYWJsZSB0byBmaW5kIGl0LiBTbywgbWFr ZSBzdXJlIHdlCkBAIC0zMzYsMTQ1ICs2NzgsNTggQEAgU2htZW1Jbml0SGFzaChjb25zdCBj aGFyICpuYW1lLAkJLyogdGFibGUgc3RyaW5nIG5hbWUgZm9yIHNobWVtIGluZGV4ICovCiAJ ICoKIAkgKiBUaGUgc2hhcmVkIG1lbW9yeSBhbGxvY2F0b3IgbXVzdCBiZSBzcGVjaWZpZWQg dG9vLgogCSAqLwotCWluZm9QLT5kc2l6ZSA9IGluZm9QLT5tYXhfZHNpemUgPSBoYXNoX3Nl bGVjdF9kaXJzaXplKG1heF9zaXplKTsKLQlpbmZvUC0+YWxsb2MgPSBTaG1lbUFsbG9jTm9F cnJvcjsKLQloYXNoX2ZsYWdzIHw9IEhBU0hfU0hBUkVEX01FTSB8IEhBU0hfQUxMT0MgfCBI QVNIX0RJUlNJWkU7CisJZGVzYy0+aGFzaF9pbmZvLmRzaXplID0gZGVzYy0+aGFzaF9pbmZv Lm1heF9kc2l6ZSA9IGhhc2hfc2VsZWN0X2RpcnNpemUoZGVzYy0+bWF4X3NpemUpOworCWRl c2MtPmhhc2hfaW5mby5hbGxvYyA9IFNobWVtQWxsb2NOb0Vycm9yOworCWRlc2MtPmhhc2hf ZmxhZ3MgfD0gSEFTSF9TSEFSRURfTUVNIHwgSEFTSF9BTExPQyB8IEhBU0hfRElSU0laRTsK IAogCS8qIGxvb2sgaXQgdXAgaW4gdGhlIHNobWVtIGluZGV4ICovCi0JbG9jYXRpb24gPSBT aG1lbUluaXRTdHJ1Y3QobmFtZSwKLQkJCQkJCQkgICBoYXNoX2dldF9zaGFyZWRfc2l6ZShp bmZvUCwgaGFzaF9mbGFncyksCi0JCQkJCQkJICAgJmZvdW5kKTsKKwltZW1zZXQoJmRlc2Mt PmJhc2VfZGVzYywgMCwgc2l6ZW9mKGRlc2MtPmJhc2VfZGVzYykpOworCWRlc2MtPmJhc2Vf ZGVzYy5uYW1lID0gZGVzYy0+bmFtZTsKKwlkZXNjLT5iYXNlX2Rlc2Muc2l6ZSA9IGhhc2hf Z2V0X3NoYXJlZF9zaXplKCZkZXNjLT5oYXNoX2luZm8sIGRlc2MtPmhhc2hfZmxhZ3MpOwor CWRlc2MtPmJhc2VfZGVzYy5pbml0X2ZuID0gc2htZW1faGFzaF9pbml0OworCWRlc2MtPmJh c2VfZGVzYy5pbml0X2ZuX2FyZyA9IGRlc2M7CisJZGVzYy0+YmFzZV9kZXNjLmF0dGFjaF9m biA9IHNobWVtX2hhc2hfYXR0YWNoOworCWRlc2MtPmJhc2VfZGVzYy5hdHRhY2hfZm5fYXJn ID0gZGVzYzsKIAogCS8qCi0JICogaWYgaXQgYWxyZWFkeSBleGlzdHMsIGF0dGFjaCB0byBp dCByYXRoZXIgdGhhbiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZQotCSAqIG5ldyBzcGFjZQor CSAqIFdlIG5lZWQgYSBzdGFibGUgcG9pbnRlciB0byBob2xkIHRoZSBwb2ludGVyIHRvIHRo ZSBzaGFyZWQgbWVtb3J5LiAgVXNlCisJICogdGhlIG9uZSBwYXNzZWQgaW4gdGhlIGRlc2Ny aXB0b3Igbm93LiAgSXQgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZQorCSAqIGhhc2ggdGFi bGUgaGVhZGVyIGJ5IGluaXQgb3IgYXR0YWNoIGZ1bmN0aW9uLgogCSAqLwotCWlmIChmb3Vu ZCkKLQkJaGFzaF9mbGFncyB8PSBIQVNIX0FUVEFDSDsKKwlkZXNjLT5iYXNlX2Rlc2MucHRy ID0gKHZvaWQgKiopIGRlc2MtPnB0cjsKIAotCS8qIFBhc3MgbG9jYXRpb24gb2YgaGFzaHRh YmxlIGhlYWRlciB0byBoYXNoX2NyZWF0ZSAqLwotCWluZm9QLT5oY3RsID0gKEhBU0hIRFIg KikgbG9jYXRpb247CisJZGVzYy0+YmFzZV9kZXNjLmV4dHJhX3NpemUgPSBoYXNoX2VzdGlt YXRlX3NpemUoZGVzYy0+bWF4X3NpemUsIGRlc2MtPmhhc2hfaW5mby5lbnRyeXNpemUpIC0g ZGVzYy0+YmFzZV9kZXNjLnNpemU7CiAKLQlyZXR1cm4gaGFzaF9jcmVhdGUobmFtZSwgaW5p dF9zaXplLCBpbmZvUCwgaGFzaF9mbGFncyk7CisJcmV0dXJuIFNobWVtUmVnaXN0ZXJTdHJ1 Y3QoJmRlc2MtPmJhc2VfZGVzYyk7CiB9CiAKLS8qCi0gKiBTaG1lbUluaXRTdHJ1Y3QgLS0g Q3JlYXRlL2F0dGFjaCB0byBhIHN0cnVjdHVyZSBpbiBzaGFyZWQgbWVtb3J5LgotICoKLSAq CQlUaGlzIGlzIGNhbGxlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gdG8gZmluZCBvciBhbGxv Y2F0ZQotICoJCWEgZGF0YSBzdHJ1Y3R1cmUgaW4gc2hhcmVkIG1lbW9yeS4gIElmIG5vIG90 aGVyIHByb2Nlc3MKLSAqCQloYXMgY3JlYXRlZCB0aGUgc3RydWN0dXJlLCB0aGlzIHJvdXRp bmUgYWxsb2NhdGVzIHNwYWNlCi0gKgkJZm9yIGl0LiAgSWYgaXQgZXhpc3RzIGFscmVhZHks IGEgcG9pbnRlciB0byB0aGUgZXhpc3RpbmcKLSAqCQlzdHJ1Y3R1cmUgaXMgcmV0dXJuZWQu Ci0gKgotICoJUmV0dXJuczogcG9pbnRlciB0byB0aGUgb2JqZWN0LiAgKmZvdW5kUHRyIGlz IHNldCB0cnVlIGlmIHRoZSBvYmplY3Qgd2FzCi0gKgkJYWxyZWFkeSBpbiB0aGUgc2htZW0g aW5kZXggKGhlbmNlLCBhbHJlYWR5IGluaXRpYWxpemVkKS4KLSAqCi0gKglOb3RlOiBiZWZv cmUgUG9zdGdyZXMgOS4wLCB0aGlzIGZ1bmN0aW9uIHJldHVybmVkIE5VTEwgZm9yIHNvbWUg ZmFpbHVyZQotICoJY2FzZXMuICBOb3csIGl0IGFsd2F5cyB0aHJvd3MgZXJyb3IgaW5zdGVh ZCwgc28gY2FsbGVycyBuZWVkIG5vdCBjaGVjawotICoJZm9yIE5VTEwuCi0gKi8KLXZvaWQg KgotU2htZW1Jbml0U3RydWN0KGNvbnN0IGNoYXIgKm5hbWUsIFNpemUgc2l6ZSwgYm9vbCAq Zm91bmRQdHIpCitzdGF0aWMgdm9pZAorc2htZW1faGFzaF9pbml0KHZvaWQgKmFyZykKIHsK LQlTaG1lbUluZGV4RW50ICpyZXN1bHQ7Ci0Jdm9pZAkgICAqc3RydWN0UHRyOwotCi0JTFdM b2NrQWNxdWlyZShTaG1lbUluZGV4TG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCWlmICghU2ht ZW1JbmRleCkKLQl7Ci0JCS8qIE11c3QgYmUgdHJ5aW5nIHRvIGNyZWF0ZS9hdHRhY2ggdG8g U2htZW1JbmRleCBpdHNlbGYgKi8KLQkJQXNzZXJ0KHN0cmNtcChuYW1lLCAiU2htZW1JbmRl eCIpID09IDApOwotCi0JCWlmIChJc1VuZGVyUG9zdG1hc3RlcikKLQkJewotCQkJLyogTXVz dCBiZSBpbml0aWFsaXppbmcgYSAobm9uLXN0YW5kYWxvbmUpIGJhY2tlbmQgKi8KLQkJCUFz c2VydChTaG1lbUFsbG9jYXRvci0+aW5kZXggIT0gTlVMTCk7Ci0JCQlzdHJ1Y3RQdHIgPSBT aG1lbUFsbG9jYXRvci0+aW5kZXg7Ci0JCQkqZm91bmRQdHIgPSB0cnVlOwotCQl9Ci0JCWVs c2UKLQkJewotCQkJLyoKLQkJCSAqIElmIHRoZSBzaG1lbSBpbmRleCBkb2Vzbid0IGV4aXN0 LCB3ZSBhcmUgYm9vdHN0cmFwcGluZzogd2UgbXVzdAotCQkJICogYmUgdHJ5aW5nIHRvIGlu aXQgdGhlIHNobWVtIGluZGV4IGl0c2VsZi4KLQkJCSAqCi0JCQkgKiBOb3RpY2UgdGhhdCB0 aGUgU2htZW1JbmRleExvY2sgaXMgcmVsZWFzZWQgYmVmb3JlIHRoZSBzaG1lbQotCQkJICog aW5kZXggaGFzIGJlZW4gaW5pdGlhbGl6ZWQuICBUaGlzIHNob3VsZCBiZSBPSyBiZWNhdXNl IG5vIG90aGVyCi0JCQkgKiBwcm9jZXNzIGNhbiBiZSBhY2Nlc3Npbmcgc2hhcmVkIG1lbW9y eSB5ZXQuCi0JCQkgKi8KLQkJCUFzc2VydChTaG1lbUFsbG9jYXRvci0+aW5kZXggPT0gTlVM TCk7Ci0JCQlzdHJ1Y3RQdHIgPSBTaG1lbUFsbG9jKHNpemUpOwotCQkJU2htZW1BbGxvY2F0 b3ItPmluZGV4ID0gc3RydWN0UHRyOwotCQkJKmZvdW5kUHRyID0gZmFsc2U7Ci0JCX0KLQkJ TFdMb2NrUmVsZWFzZShTaG1lbUluZGV4TG9jayk7Ci0JCXJldHVybiBzdHJ1Y3RQdHI7Ci0J fQotCi0JLyogbG9vayBpdCB1cCBpbiB0aGUgc2htZW0gaW5kZXggKi8KLQlyZXN1bHQgPSAo U2htZW1JbmRleEVudCAqKQotCQloYXNoX3NlYXJjaChTaG1lbUluZGV4LCBuYW1lLCBIQVNI X0VOVEVSX05VTEwsIGZvdW5kUHRyKTsKLQotCWlmICghcmVzdWx0KQotCXsKLQkJTFdMb2Nr UmVsZWFzZShTaG1lbUluZGV4TG9jayk7Ci0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNv ZGUoRVJSQ09ERV9PVVRfT0ZfTUVNT1JZKSwKLQkJCQkgZXJybXNnKCJjb3VsZCBub3QgY3Jl YXRlIFNobWVtSW5kZXggZW50cnkgZm9yIGRhdGEgc3RydWN0dXJlIFwiJXNcIiIsCi0JCQkJ CQluYW1lKSkpOwotCX0KKwlTaG1lbUhhc2hEZXNjICpkZXNjID0gKFNobWVtSGFzaERlc2Mg KikgYXJnOworCWludAkJCWhhc2hfZmxhZ3MgPSBkZXNjLT5oYXNoX2ZsYWdzOwogCi0JaWYg KCpmb3VuZFB0cikKLQl7Ci0JCS8qCi0JCSAqIFN0cnVjdHVyZSBpcyBpbiB0aGUgc2htZW0g aW5kZXggc28gc29tZW9uZSBlbHNlIGhhcyBhbGxvY2F0ZWQgaXQKLQkJICogYWxyZWFkeS4g IFRoZSBzaXplIGJldHRlciBiZSB0aGUgc2FtZSBhcyB0aGUgc2l6ZSB3ZSBhcmUgdHJ5aW5n IHRvCi0JCSAqIGluaXRpYWxpemUgdG8sIG9yIHRoZXJlIGlzIGEgbmFtZSBjb25mbGljdCAo b3Igd29yc2UpLgotCQkgKi8KLQkJaWYgKHJlc3VsdC0+c2l6ZSAhPSBzaXplKQotCQl7Ci0J CQlMV0xvY2tSZWxlYXNlKFNobWVtSW5kZXhMb2NrKTsKLQkJCWVyZXBvcnQoRVJST1IsCi0J CQkJCShlcnJtc2coIlNobWVtSW5kZXggZW50cnkgc2l6ZSBpcyB3cm9uZyBmb3IgZGF0YSBz dHJ1Y3R1cmUiCi0JCQkJCQkJIiBcIiVzXCI6IGV4cGVjdGVkICV6dSwgYWN0dWFsICV6dSIs Ci0JCQkJCQkJbmFtZSwgc2l6ZSwgcmVzdWx0LT5zaXplKSkpOwotCQl9Ci0JCXN0cnVjdFB0 ciA9IHJlc3VsdC0+bG9jYXRpb247Ci0JfQotCWVsc2UKLQl7Ci0JCVNpemUJCWFsbG9jYXRl ZF9zaXplOworCS8qIFBhc3MgbG9jYXRpb24gb2YgaGFzaHRhYmxlIGhlYWRlciB0byBoYXNo X2NyZWF0ZSAqLworCWRlc2MtPmhhc2hfaW5mby5oY3RsID0gKEhBU0hIRFIgKikgKmRlc2Mt PmJhc2VfZGVzYy5wdHI7CiAKLQkJLyogSXQgaXNuJ3QgaW4gdGhlIHRhYmxlIHlldC4gYWxs b2NhdGUgYW5kIGluaXRpYWxpemUgaXQgKi8KLQkJc3RydWN0UHRyID0gU2htZW1BbGxvY1Jh dyhzaXplLCAmYWxsb2NhdGVkX3NpemUpOwotCQlpZiAoc3RydWN0UHRyID09IE5VTEwpCi0J CXsKLQkJCS8qIG91dCBvZiBtZW1vcnk7IHJlbW92ZSB0aGUgZmFpbGVkIFNobWVtSW5kZXgg ZW50cnkgKi8KLQkJCWhhc2hfc2VhcmNoKFNobWVtSW5kZXgsIG5hbWUsIEhBU0hfUkVNT1ZF LCBOVUxMKTsKLQkJCUxXTG9ja1JlbGVhc2UoU2htZW1JbmRleExvY2spOwotCQkJZXJlcG9y dChFUlJPUiwKLQkJCQkJKGVycmNvZGUoRVJSQ09ERV9PVVRfT0ZfTUVNT1JZKSwKLQkJCQkJ IGVycm1zZygibm90IGVub3VnaCBzaGFyZWQgbWVtb3J5IGZvciBkYXRhIHN0cnVjdHVyZSIK LQkJCQkJCQkiIFwiJXNcIiAoJXp1IGJ5dGVzIHJlcXVlc3RlZCkiLAotCQkJCQkJCW5hbWUs IHNpemUpKSk7Ci0JCX0KLQkJcmVzdWx0LT5zaXplID0gc2l6ZTsKLQkJcmVzdWx0LT5hbGxv Y2F0ZWRfc2l6ZSA9IGFsbG9jYXRlZF9zaXplOwotCQlyZXN1bHQtPmxvY2F0aW9uID0gc3Ry dWN0UHRyOwotCX0KKwkqZGVzYy0+cHRyID0gaGFzaF9jcmVhdGUoZGVzYy0+bmFtZSwgZGVz Yy0+aW5pdF9zaXplLCAmZGVzYy0+aGFzaF9pbmZvLCBoYXNoX2ZsYWdzKTsKK30KIAotCUxX TG9ja1JlbGVhc2UoU2htZW1JbmRleExvY2spOworc3RhdGljIHZvaWQKK3NobWVtX2hhc2hf YXR0YWNoKHZvaWQgKmFyZykKK3sKKwlTaG1lbUhhc2hEZXNjICpkZXNjID0gKFNobWVtSGFz aERlc2MgKikgYXJnOworCWludAkJCWhhc2hfZmxhZ3MgPSBkZXNjLT5oYXNoX2ZsYWdzOwog Ci0JQXNzZXJ0KFNobWVtQWRkcklzVmFsaWQoc3RydWN0UHRyKSk7CisJLyogYXR0YWNoIHRv IGl0IHJhdGhlciB0aGFuIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIG5ldyBzcGFjZSAqLwor CWhhc2hfZmxhZ3MgfD0gSEFTSF9BVFRBQ0g7CiAKLQlBc3NlcnQoc3RydWN0UHRyID09ICh2 b2lkICopIENBQ0hFTElORUFMSUdOKHN0cnVjdFB0cikpOworCS8qIFBhc3MgbG9jYXRpb24g b2YgaGFzaHRhYmxlIGhlYWRlciB0byBoYXNoX2NyZWF0ZSAqLworCWRlc2MtPmhhc2hfaW5m by5oY3RsID0gKEhBU0hIRFIgKikgKmRlc2MtPmJhc2VfZGVzYy5wdHI7CiAKLQlyZXR1cm4g c3RydWN0UHRyOworCSpkZXNjLT5wdHIgPSBoYXNoX2NyZWF0ZShkZXNjLT5uYW1lLCBkZXNj LT5pbml0X3NpemUsICZkZXNjLT5oYXNoX2luZm8sIGhhc2hfZmxhZ3MpOwogfQogCi0KIC8q CiAgKiBBZGQgdHdvIFNpemUgdmFsdWVzLCBjaGVja2luZyBmb3Igb3ZlcmZsb3cKICAqLwpA QCAtNzYxLDMgKzEwMTYsODUgQEAgcGdfbnVtYV9hdmFpbGFibGUoUEdfRlVOQ1RJT05fQVJH UykKIHsKIAlQR19SRVRVUk5fQk9PTChwZ19udW1hX2luaXQoKSAhPSAtMSk7CiB9CisKKy8q CisgKiBTaG1lbUluaXRTdHJ1Y3QgLS0gQ3JlYXRlL2F0dGFjaCB0byBhIHN0cnVjdHVyZSBp biBzaGFyZWQgbWVtb3J5LgorICoKKyAqCQlUaGlzIGlzIGNhbGxlZCBkdXJpbmcgaW5pdGlh bGl6YXRpb24gdG8gZmluZCBvciBhbGxvY2F0ZQorICoJCWEgZGF0YSBzdHJ1Y3R1cmUgaW4g c2hhcmVkIG1lbW9yeS4gIElmIG5vIG90aGVyIHByb2Nlc3MKKyAqCQloYXMgY3JlYXRlZCB0 aGUgc3RydWN0dXJlLCB0aGlzIHJvdXRpbmUgYWxsb2NhdGVzIHNwYWNlCisgKgkJZm9yIGl0 LiAgSWYgaXQgZXhpc3RzIGFscmVhZHksIGEgcG9pbnRlciB0byB0aGUgZXhpc3RpbmcKKyAq CQlzdHJ1Y3R1cmUgaXMgcmV0dXJuZWQuCisgKgorICoJUmV0dXJuczogcG9pbnRlciB0byB0 aGUgb2JqZWN0LiAgKmZvdW5kUHRyIGlzIHNldCB0cnVlIGlmIHRoZSBvYmplY3Qgd2FzCisg KgkJYWxyZWFkeSBpbiB0aGUgc2htZW0gaW5kZXggKGhlbmNlLCBhbHJlYWR5IGluaXRpYWxp emVkKS4KKyAqCisgKiBOb3RlOiBUaGlzIGlzIGEgbGVnYWN5IGludGVyZmFjZSwga2VwdCBm b3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aAorICogZXh0ZW5zaW9ucy4gIFVzZSBT aG1lbVJlZ2lzdGVyU3RydWN0KCkgaW4gbmV3IGNvZGUhCisgKi8KK3ZvaWQgKgorU2htZW1J bml0U3RydWN0KGNvbnN0IGNoYXIgKm5hbWUsIFNpemUgc2l6ZSwgYm9vbCAqZm91bmRQdHIp Cit7CisJU2htZW1TdHJ1Y3REZXNjICpkZXNjOworCisJQXNzZXJ0KHNobWVtX2luaXRpYWxp emVkKTsKKworCWRlc2MgPSBNZW1vcnlDb250ZXh0QWxsb2NaZXJvKFRvcE1lbW9yeUNvbnRl eHQsIHNpemVvZihTaG1lbVN0cnVjdERlc2MpICsgc2l6ZW9mKHZvaWQgKikpOworCWRlc2Mt Pm5hbWUgPSBuYW1lOworCWRlc2MtPnNpemUgPSBzaXplOworCWRlc2MtPnB0ciA9ICh2b2lk ICopICgoKGNoYXIgKikgZGVzYykgKyBzaXplb2YoU2htZW1TdHJ1Y3REZXNjKSk7CisKKwkq Zm91bmRQdHIgPSBTaG1lbVJlZ2lzdGVyU3RydWN0KGRlc2MpOworCUFzc2VydCgqZGVzYy0+ cHRyICE9IE5VTEwpOworCXJldHVybiAqZGVzYy0+cHRyOworfQorCisvKgorICogU2htZW1J bml0SGFzaCAtLSBDcmVhdGUgYW5kIGluaXRpYWxpemUsIG9yIGF0dGFjaCB0bywgYQorICoJ CXNoYXJlZCBtZW1vcnkgaGFzaCB0YWJsZS4KKyAqCisgKiBXZSBhc3N1bWUgY2FsbGVyIGlz IGRvaW5nIHNvbWUga2luZCBvZiBzeW5jaHJvbml6YXRpb24KKyAqIHNvIHRoYXQgdHdvIHBy b2Nlc3NlcyBkb24ndCB0cnkgdG8gY3JlYXRlL2luaXRpYWxpemUgdGhlIHNhbWUKKyAqIHRh YmxlIGF0IG9uY2UuICAoSW4gcHJhY3RpY2UsIGFsbCBjcmVhdGlvbnMgYXJlIGRvbmUgaW4g dGhlIHBvc3RtYXN0ZXIKKyAqIHByb2Nlc3M7IGNoaWxkIHByb2Nlc3NlcyBzaG91bGQgYWx3 YXlzIGJlIGF0dGFjaGluZyB0byBleGlzdGluZyB0YWJsZXMuKQorICoKKyAqIG1heF9zaXpl IGlzIHRoZSBlc3RpbWF0ZWQgbWF4aW11bSBudW1iZXIgb2YgaGFzaHRhYmxlIGVudHJpZXMu ICBUaGlzIGlzCisgKiBub3QgYSBoYXJkIGxpbWl0LCBidXQgdGhlIGFjY2VzcyBlZmZpY2ll bmN5IHdpbGwgZGVncmFkZSBpZiBpdCBpcworICogZXhjZWVkZWQgc3Vic3RhbnRpYWxseSAo c2luY2UgaXQncyB1c2VkIHRvIGNvbXB1dGUgZGlyZWN0b3J5IHNpemUgYW5kCisgKiB0aGUg aGFzaCB0YWJsZSBidWNrZXRzIHdpbGwgZ2V0IG92ZXJmdWxsKS4KKyAqCisgKiBpbml0X3Np emUgaXMgdGhlIG51bWJlciBvZiBoYXNodGFibGUgZW50cmllcyB0byBwcmVhbGxvY2F0ZS4g IEZvciBhIHRhYmxlCisgKiB3aG9zZSBtYXhpbXVtIHNpemUgaXMgY2VydGFpbiwgdGhpcyBz aG91bGQgYmUgZXF1YWwgdG8gbWF4X3NpemU7IHRoYXQKKyAqIGVuc3VyZXMgdGhhdCBubyBy dW4tdGltZSBvdXQtb2Ytc2hhcmVkLW1lbW9yeSBmYWlsdXJlcyBjYW4gb2NjdXIuCisgKgor ICogKmluZm9QIGFuZCBoYXNoX2ZsYWdzIG11c3Qgc3BlY2lmeSBhdCBsZWFzdCB0aGUgZW50 cnkgc2l6ZXMgYW5kIGtleQorICogY29tcGFyaXNvbiBzZW1hbnRpY3MgKHNlZSBoYXNoX2Ny ZWF0ZSgpKS4gIEZsYWcgYml0cyBhbmQgdmFsdWVzIHNwZWNpZmljCisgKiB0byBzaGFyZWQt bWVtb3J5IGhhc2ggdGFibGVzIGFyZSBhZGRlZCBoZXJlLCBleGNlcHQgdGhhdCBjYWxsZXJz IG1heQorICogY2hvb3NlIHRvIHNwZWNpZnkgSEFTSF9QQVJUSVRJT04gYW5kL29yIEhBU0hf RklYRURfU0laRS4KKyAqCisgKiBOb3RlOiBUaGlzIGlzIGEgbGVnYWN5IGludGVyZmFjZSwg a2VwdCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aAorICogZXh0ZW5zaW9ucy4g IFVzZSBTaG1lbVJlZ2lzdGVySGFzaCgpIGluIG5ldyBjb2RlIQorICovCitIVEFCICoKK1No bWVtSW5pdEhhc2goY29uc3QgY2hhciAqbmFtZSwJCS8qIHRhYmxlIHN0cmluZyBuYW1lIGZv ciBzaG1lbSBpbmRleCAqLworCQkJICBpbnQ2NCBpbml0X3NpemUsCS8qIGluaXRpYWwgdGFi bGUgc2l6ZSAqLworCQkJICBpbnQ2NCBtYXhfc2l6ZSwJLyogbWF4IHNpemUgb2YgdGhlIHRh YmxlICovCisJCQkgIEhBU0hDVEwgKmluZm9QLAkvKiBpbmZvIGFib3V0IGtleSBhbmQgYnVj a2V0IHNpemUgKi8KKwkJCSAgaW50IGhhc2hfZmxhZ3MpCS8qIGluZm8gYWJvdXQgaW5mb1Ag Ki8KK3sKKwlTaG1lbUhhc2hEZXNjICpkZXNjOworCisJQXNzZXJ0KHNobWVtX2luaXRpYWxp emVkKTsKKworCWRlc2MgPSBNZW1vcnlDb250ZXh0QWxsb2NaZXJvKFRvcE1lbW9yeUNvbnRl eHQsIHNpemVvZihTaG1lbUhhc2hEZXNjKSArIHNpemVvZihIVEFCICopKTsKKwlkZXNjLT5u YW1lID0gbmFtZTsKKwlkZXNjLT5pbml0X3NpemUgPSBpbml0X3NpemU7CisJZGVzYy0+bWF4 X3NpemUgPSBtYXhfc2l6ZTsKKwltZW1jcHkoJmRlc2MtPmhhc2hfaW5mbywgaW5mb1AsIHNp emVvZihIQVNIQ1RMKSk7CisJZGVzYy0+aGFzaF9mbGFncyA9IGhhc2hfZmxhZ3M7CisKKwlk ZXNjLT5wdHIgPSAoSFRBQiAqKikgKCgoY2hhciAqKSBkZXNjKSArIHNpemVvZihTaG1lbUhh c2hEZXNjKSk7CisKKwlTaG1lbVJlZ2lzdGVySGFzaChkZXNjKTsKKwlyZXR1cm4gKmRlc2Mt PnB0cjsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyBiL3Ny Yy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwppbmRleCBkMDFhMDlkZDBjNC4uZmEwNzRjNDE5 YTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYworKysgYi9zcmMv YmFja2VuZC90Y29wL3Bvc3RncmVzLmMKQEAgLTQxNjIsNiArNDE2Miw5IEBAIFBvc3RncmVz U2luZ2xlVXNlck1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwKIAkvKiBJbml0aWFsaXpl IHNpemUgb2YgZmFzdC1wYXRoIGxvY2sgY2FjaGUuICovCiAJSW5pdGlhbGl6ZUZhc3RQYXRo TG9ja3MoKTsKIAorCS8qIFJlZ2lzdGVyIHRoZSBzaGFyZWQgbWVtb3J5IG5lZWRzIG9mIGFs bCBjb3JlIHN1YnN5c3RlbXMuICovCisJUmVnaXN0ZXJTaG1lbVN0cnVjdHMoKTsKKwogCS8q CiAJICogR2l2ZSBwcmVsb2FkZWQgbGlicmFyaWVzIGEgY2hhbmNlIHRvIHJlcXVlc3QgYWRk aXRpb25hbCBzaGFyZWQgbWVtb3J5LgogCSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv c3RvcmFnZS9pcGMuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvaXBjLmgKaW5kZXggZGEzMjc4 N2FiNTEuLjhhM2I3MWFkNWQzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2lw Yy5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvaXBjLmgKQEAgLTc3LDYgKzc3LDcgQEAg ZXh0ZXJuIHZvaWQgY2hlY2tfb25fc2htZW1fZXhpdF9saXN0c19hcmVfZW1wdHkodm9pZCk7 CiAvKiBpcGNpLmMgKi8KIGV4dGVybiBQR0RMTElNUE9SVCBzaG1lbV9zdGFydHVwX2hvb2tf dHlwZSBzaG1lbV9zdGFydHVwX2hvb2s7CiAKK2V4dGVybiB2b2lkIFJlZ2lzdGVyU2htZW1T dHJ1Y3RzKHZvaWQpOwogZXh0ZXJuIFNpemUgQ2FsY3VsYXRlU2htZW1TaXplKHZvaWQpOwog ZXh0ZXJuIHZvaWQgQ3JlYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3Jlcyh2b2lkKTsKICNp ZmRlZiBFWEVDX0JBQ0tFTkQKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc2ht ZW0uaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc2htZW0uaAppbmRleCA4OWQ0NTI4N2MxNy4u NGQ2ZDY3ZGVjYTggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc2htZW0uaAor KysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3NobWVtLmgKQEAgLTI0LDE5ICsyNCwxNDYgQEAK ICNpbmNsdWRlICJzdG9yYWdlL3NwaW4uaCIKICNpbmNsdWRlICJ1dGlscy9oc2VhcmNoLmgi CiAKK3R5cGVkZWYgdm9pZCAoKlNobWVtSW5pdENhbGxiYWNrKSAodm9pZCAqYXJnKTsKK3R5 cGVkZWYgdm9pZCAoKlNobWVtQXR0YWNoQ2FsbGJhY2spICh2b2lkICphcmcpOworCisvKgor ICogU2htZW1TdHJ1Y3REZXNjIGRlc2NyaWJlcyBhIG5hbWVkIGFyZWEgb3Igc3RydWN0IGlu IHNoYXJlZCBtZW1vcnkuCisgKgorICogU2hhcmVkIG1lbW9yeSBpcyByZXNlcnZlZCBhbmQg YWxsb2NhdGVkIGluIGEgZmV3IHBoYXNlcyBhdCBwb3N0bWFzdGVyCisgKiBzdGFydHVwLCBh bmQgaW4gRVhFQ19CQUNLRU5EIG1vZGUsIHRoZXJlJ3Mgc29tZSBleHRyYSB3b3JrIGRvbmUg dG8gImF0dGFjaCIKKyAqIHRvIHRoZW0gYXQgYmFja2VuZCBzdGFydHVwLiAgU2htZW1TdHJ1 Y3REZXNjIGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24KKyAqIG5lZWRlZCB0byBtYW5h Z2UgdGhlIGxpZmVjeWNsZS4KKyAqCisgKiAnbmFtZScsICdzaXplJyBhbmQgdGhlIGNhbGxi YWNrIGZ1bmN0aW9ucyBhcmUgZmlsbGVkIGluIGJ5IHRoZQorICogU2htZW1SZWdpc3RlclN0 cnVjdCgpIGNhbGxlci4gIEFmdGVyIHJlZ2lzdHJhdGlvbiwgdGhlIHNobWVtIG1hY2hpbmVy eQorICogcmVzZXJ2ZXMgbWVtb3J5IGZvciB0aGUgYXJlYSwgc2V0cyAqcHRyIHRvIHBvaW50 IHRvIHRoZSBhbGxvY2F0aW9uLCBhbmQKKyAqIGNhbGxzIHRoZSBjYWxsYmFja3MgYXQgdGhl IHJpZ2h0IG1vbWVudHMuCisgKi8KK3R5cGVkZWYgc3RydWN0IFNobWVtU3RydWN0RGVzYwor eworCS8qIE5hbWUgb2YgdGhlIHNoYXJlZCBtZW1vcnkgYXJlYS4gIE11c3QgYmUgdW5pcXVl IGFjcm9zcyB0aGUgc3lzdGVtICovCisJY29uc3QgY2hhciAqbmFtZTsKKworCS8qIFNpemUg b2YgdGhlIHNoYXJlZCBtZW1vcnkgYXJlYSAqLworCXNpemVfdAkJc2l6ZTsKKworCS8qCisJ ICogSW5pdGlhbGl6YXRpb24gY2FsbGJhY2sgZnVuY3Rpb24uICBUaGlzIGlzIGNhbGxlZCB3 aGVuIHRoZSBzaGFyZWQKKwkgKiBtZW1vcnkgYXJlYSBpcyBhbGxvY2F0ZWQsIHVzdWFsbHkg YXQgcG9zdG1hc3RlciBzdGFydHVwLiAgJ2luaXRfZm5fYXJnJworCSAqIGlzIGFuIG9wYXF1 ZSBhcmd1bWVudCBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrLgorCSAqLworCVNobWVtSW5pdENh bGxiYWNrIGluaXRfZm47CisJdm9pZAkgICAqaW5pdF9mbl9hcmc7CisKKwkvKgorCSAqIEF0 dGFjaG1lbnQgY2FsbGJhY2sgZnVuY3Rpb24uICBJbiBFWEVDX0JBQ0tFTkQgbW9kZSwgdGhp cyBpcyBjYWxsZWQgYXQKKwkgKiBzdGFydHVwIG9mIGVhY2ggYmFja2VuZC4gIEluICFFWEVD X0JBQ0tFTkQgbW9kZSwgdGhpcyBpcyBvbmx5IGNhbGxlZCBpZgorCSAqIHRoZSBzaGFyZWQg bWVtb3J5IGFyZWEgaXMgcmVnaXN0ZXJlZCBhZnRlciBwb3N0bWFzdGVyIHN0YXJ0dXAuICBX ZQorCSAqIG5ldmVyIGRvIHRoYXQgaW4gY29yZSBjb2RlLCBidXQgZXh0ZW5zaW9ucyBtaWdo dC4KKwkgKi8KKwlTaG1lbUluaXRDYWxsYmFjayBhdHRhY2hfZm47CisJdm9pZAkgICAqYXR0 YWNoX2ZuX2FyZzsKKworCS8qCisJICogRXh0cmEgc3BhY2UgdG8gcmVzZXJ2ZSBpbiB0aGUg c2hhcmVkIG1lbW9yeSBzZWdtZW50LCBidXQgaXQncyBub3QgcGFydAorCSAqIG9mIHRoZSBz dHJ1Y3QgaXRzZWxmLiAgVGhpcyBpcyB1c2VkIGZvciBzaGFyZWQgbWVtb3J5IGhhc2ggdGFi bGVzIHRoYXQKKwkgKiBjYW4gZ3JvdyBiZXlvbmQgdGhlIGluaXRpYWwgc2l6ZSB3aGVuIG1v cmUgYnVja2V0cyBhcmUgYWxsb2NhdGVkLgorCSAqLworCXNpemVfdAkJZXh0cmFfc2l6ZTsK KworCS8qCisJICogV2hlbiB0aGUgc2htZW0gYXJlYSBpcyBpbml0aWFsaXplZCBvciBhdHRh Y2hlZCB0bywgcG9pbnRlciB0byBpdCBpcworCSAqIHN0b3JlZCBpbiAqcHRyLiAgSXQgdXN1 YWxseSBwb2ludHMgdG8gYSBnbG9iYWwgdmFyaWFibGUsIHVzZWQgdG8gYWNjZXNzCisJICog dGhlIHNoYXJlZCBtZW1vcnkgYXJlYSBsYXRlci4gICpwdHIgaXMgc2V0IGJlZm9yZSB0aGUg aW5pdF9mbiBvcgorCSAqIGF0dGFjaF9mbiBjYWxsYmFjayBpcyBjYWxsZWQuCisJICovCisJ dm9pZAkgICoqcHRyOworfSBTaG1lbVN0cnVjdERlc2M7CisKKy8qCisgKiBEZXNjcmlwdG9y IGZvciBhIG5hbWVkIHNoYXJlZCBtZW1vcnkgaGFzaCB0YWJsZS4KKyAqCisgKiBTaW1pbGFy IHRvIFNobWVtU3RydWN0RGVzYywgYnV0IGRlc2NyaWJlcyBhIHNoYXJlZCBtZW1vcnkgaGFz aCB0YWJsZS4gIEVhY2gKKyAqIGhhc2ggdGFibGUgaXMgYmFja2VkIGJ5IGFuIGFsbG9jYXRl ZCBhcmVhLCBkZXNjcmliZWQgYnkgJ2Jhc2VfZGVzYycsIGJ1dCBpZgorICogJ21heF9zaXpl JyBpcyBncmVhdGVyIHRoYW4gJ2luaXRfc2l6ZScsIGl0IGNhbiBhbHNvIGdyb3cgYmV5b25k IHRoZSBpbml0aWFsCisgKiBhbGxvY2F0ZWQgYXJlYSBieSBhbGxvY2F0aW5nIG1vcmUgaGFz aCBlbnRyaWVzIGZyb20gdGhlIGdsb2JhbCB1bnJlc2VydmVkCisgKiBzcGFjZS4KKyAqLwor dHlwZWRlZiBzdHJ1Y3QgU2htZW1IYXNoRGVzYworeworCS8qIE5hbWUgb2YgdGhlIHNoYXJl ZCBtZW1vcnkgYXJlYS4gIE11c3QgYmUgdW5pcXVlIGFjcm9zcyB0aGUgc3lzdGVtICovCisJ Y29uc3QgY2hhciAqbmFtZTsKKworCS8qCisJICogbWF4X3NpemUgaXMgdGhlIGVzdGltYXRl ZCBtYXhpbXVtIG51bWJlciBvZiBoYXNodGFibGUgZW50cmllcy4gIFRoaXMgaXMKKwkgKiBu b3QgYSBoYXJkIGxpbWl0LCBidXQgdGhlIGFjY2VzcyBlZmZpY2llbmN5IHdpbGwgZGVncmFk ZSBpZiBpdCBpcworCSAqIGV4Y2VlZGVkIHN1YnN0YW50aWFsbHkgKHNpbmNlIGl0J3MgdXNl ZCB0byBjb21wdXRlIGRpcmVjdG9yeSBzaXplIGFuZAorCSAqIHRoZSBoYXNoIHRhYmxlIGJ1 Y2tldHMgd2lsbCBnZXQgb3ZlcmZ1bGwpLgorCSAqLworCXNpemVfdAkJbWF4X3NpemU7CisK KwkvKgorCSAqIGluaXRfc2l6ZSBpcyB0aGUgbnVtYmVyIG9mIGhhc2h0YWJsZSBlbnRyaWVz IHRvIHByZWFsbG9jYXRlLiAgRm9yIGEKKwkgKiB0YWJsZSB3aG9zZSBtYXhpbXVtIHNpemUg aXMgY2VydGFpbiwgdGhpcyBzaG91bGQgYmUgZXF1YWwgdG8gbWF4X3NpemU7CisJICogdGhh dCBlbnN1cmVzIHRoYXQgbm8gcnVuLXRpbWUgb3V0LW9mLXNoYXJlZC1tZW1vcnkgZmFpbHVy ZXMgY2FuIG9jY3VyLgorCSAqLworCXNpemVfdAkJaW5pdF9zaXplOworCisJLyoKKwkgKiBI YXNoIHRhYmxlIG9wdGlvbnMgcGFzc2VkIHRvIGhhc2hfY3JlYXRlKCkKKwkgKgorCSAqIGhh c2hfaW5mbyBhbmQgaGFzaF9mbGFncyBtdXN0IHNwZWNpZnkgYXQgbGVhc3QgdGhlIGVudHJ5 IHNpemVzIGFuZCBrZXkKKwkgKiBjb21wYXJpc29uIHNlbWFudGljcyAoc2VlIGhhc2hfY3Jl YXRlKCkpLiAgRmxhZyBiaXRzIGFuZCB2YWx1ZXMKKwkgKiBzcGVjaWZpYyB0byBzaGFyZWQt bWVtb3J5IGhhc2ggdGFibGVzIGFyZSBhZGRlZCBpbXBsaWNpdGx5IGluCisJICogU2htZW1S ZWdpc3Rlckhhc2goKSwgZXhjZXB0IHRoYXQgY2FsbGVycyBtYXkgY2hvb3NlIHRvIHNwZWNp ZnkKKwkgKiBIQVNIX1BBUlRJVElPTiBhbmQvb3IgSEFTSF9GSVhFRF9TSVpFLgorCSAqLwor CUhBU0hDVEwJCWhhc2hfaW5mbzsKKwlpbnQJCQloYXNoX2ZsYWdzOworCisJLyoKKwkgKiBX aGVuIHRoZSBoYXNoIHRhYmxlIGlzIGluaXRpYWxpemVkIG9yIGF0dGFjaGVkIHRvLCBwb2lu dGVyIHRvIGl0cworCSAqIGJhY2tlbmQtcHJpdmF0ZSBoYW5kbGUgaXMgc3RvcmVkIGluICpw dHIuICBJdCB1c3VhbGx5IHBvaW50cyB0byBhCisJICogZ2xvYmFsIHZhcmlhYmxlLCB1c2Vk IHRvIGFjY2VzcyB0aGUgaGFzaCB0YWJsZSBsYXRlci4KKwkgKi8KKwlIVEFCCSAgKipwdHI7 CisKKwkvKgorCSAqIERlc2NyaXB0b3IgZm9yIHRoZSB1bmRlcmx5aW5nICJhcmVhIi4gIENh bGxlcnMgb2YgU2htZW1SZWdpc3Rlckhhc2goKQorCSAqIGRvIG5vdCBuZWVkIHRvIHRvdWNo IHRoaXMsIGl0IGlzIGZpbGxlZCBpbiBieSBTaG1lbVJlZ2lzdGVySGFzaCgpIGJhc2VkCisJ ICogb24gdGhlIGhhc2ggdGFibGUgcGFyYW1ldGVycy4KKwkgKi8KKwlTaG1lbVN0cnVjdERl c2MgYmFzZV9kZXNjOworfSBTaG1lbUhhc2hEZXNjOwogCiAvKiBzaG1lbS5jICovCiBleHRl cm4gUEdETExJTVBPUlQgc2xvY2tfdCAqU2htZW1Mb2NrOwogdHlwZWRlZiBzdHJ1Y3QgUEdT aG1lbUhlYWRlciBQR1NobWVtSGVhZGVyOyAvKiBhdm9pZCBpbmNsdWRpbmcKIAkJCQkJCQkJ CQkJICogc3RvcmFnZS9wZ19zaG1lbS5oIGhlcmUgKi8KK2V4dGVybiB2b2lkIFJlc2V0U2ht ZW1BbGxvY2F0b3Iodm9pZCk7CiBleHRlcm4gdm9pZCBJbml0U2htZW1BbGxvY2F0b3IoUEdT aG1lbUhlYWRlciAqc2VnaGRyKTsKKyNpZmRlZiBFWEVDX0JBQ0tFTkQKK2V4dGVybiB2b2lk IEF0dGFjaFNobWVtQWxsb2NhdG9yKFBHU2htZW1IZWFkZXIgKnNlZ2hkcik7CisjZW5kaWYK IGV4dGVybiB2b2lkICpTaG1lbUFsbG9jKFNpemUgc2l6ZSk7CiBleHRlcm4gdm9pZCAqU2ht ZW1BbGxvY05vRXJyb3IoU2l6ZSBzaXplKTsKIGV4dGVybiBib29sIFNobWVtQWRkcklzVmFs aWQoY29uc3Qgdm9pZCAqYWRkcik7Ci1leHRlcm4gdm9pZCBJbml0U2htZW1JbmRleCh2b2lk KTsKKworZXh0ZXJuIGJvb2wgU2htZW1SZWdpc3RlclN0cnVjdChTaG1lbVN0cnVjdERlc2Mg KmRlc2MpOworZXh0ZXJuIGJvb2wgU2htZW1SZWdpc3Rlckhhc2goU2htZW1IYXNoRGVzYyAq ZGVzYyk7CisKKy8qIGxlZ2FjeSBzaG1lbSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyAqLwogZXh0 ZXJuIEhUQUIgKlNobWVtSW5pdEhhc2goY29uc3QgY2hhciAqbmFtZSwgaW50NjQgaW5pdF9z aXplLCBpbnQ2NCBtYXhfc2l6ZSwKIAkJCQkJCSAgIEhBU0hDVEwgKmluZm9QLCBpbnQgaGFz aF9mbGFncyk7CiBleHRlcm4gdm9pZCAqU2htZW1Jbml0U3RydWN0KGNvbnN0IGNoYXIgKm5h bWUsIFNpemUgc2l6ZSwgYm9vbCAqZm91bmRQdHIpOworCitleHRlcm4gc2l6ZV90IFNobWVt UmVnaXN0ZXJlZFNpemUodm9pZCk7CitleHRlcm4gdm9pZCBTaG1lbUluaXRSZWdpc3RlcmVk KHZvaWQpOworI2lmZGVmIEVYRUNfQkFDS0VORAorZXh0ZXJuIHZvaWQgU2htZW1BdHRhY2hS ZWdpc3RlcmVkKHZvaWQpOworI2VuZGlmCisKIGV4dGVybiBTaXplIGFkZF9zaXplKFNpemUg czEsIFNpemUgczIpOwogZXh0ZXJuIFNpemUgbXVsX3NpemUoU2l6ZSBzMSwgU2l6ZSBzMik7 CiAKQEAgLTQ1LDE5ICsxNzIsNCBAQCBleHRlcm4gUEdETExJTVBPUlQgU2l6ZSBwZ19nZXRf c2htZW1fcGFnZXNpemUodm9pZCk7CiAvKiBpcGNpLmMgKi8KIGV4dGVybiB2b2lkIFJlcXVl c3RBZGRpblNobWVtU3BhY2UoU2l6ZSBzaXplKTsKIAotLyogc2l6ZSBjb25zdGFudHMgZm9y IHRoZSBzaG1lbSBpbmRleCB0YWJsZSAqLwotIC8qIG1heCBzaXplIG9mIGRhdGEgc3RydWN0 dXJlIHN0cmluZyBuYW1lICovCi0jZGVmaW5lIFNITUVNX0lOREVYX0tFWVNJWkUJCSAoNDgp Ci0gLyogZXN0aW1hdGVkIHNpemUgb2YgdGhlIHNobWVtIGluZGV4IHRhYmxlIChub3QgYSBo YXJkIGxpbWl0KSAqLwotI2RlZmluZSBTSE1FTV9JTkRFWF9TSVpFCQkgKDY0KQotCi0vKiB0 aGlzIGlzIGEgaGFzaCBidWNrZXQgaW4gdGhlIHNobWVtIGluZGV4IHRhYmxlICovCi10eXBl ZGVmIHN0cnVjdAotewotCWNoYXIJCWtleVtTSE1FTV9JTkRFWF9LRVlTSVpFXTsJLyogc3Ry aW5nIG5hbWUgKi8KLQl2b2lkCSAgICpsb2NhdGlvbjsJCS8qIGxvY2F0aW9uIGluIHNoYXJl ZCBtZW0gKi8KLQlTaXplCQlzaXplOwkJCS8qICMgYnl0ZXMgcmVxdWVzdGVkIGZvciB0aGUg c3RydWN0dXJlICovCi0JU2l6ZQkJYWxsb2NhdGVkX3NpemU7IC8qICMgYnl0ZXMgYWN0dWFs bHkgYWxsb2NhdGVkICovCi19IFNobWVtSW5kZXhFbnQ7Ci0KICNlbmRpZgkJCQkJCQkvKiBT SE1FTV9IICovCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDQ5YWQ4NGE2MmQ0 Li45OTBkNTA2YTY5NiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTI4MTUs OSArMjgxNSwxMSBAQCBTaGFyZWRUeXBtb2RUYWJsZUVudHJ5CiBTaGFyZWRzb3J0CiBTaGVs bFR5cGVJbmZvCiBTaGlwcGFibGVDYWNoZUVudHJ5Ci1TaG1lbUFsbG9jYXRvckRhdGEKIFNo aXBwYWJsZUNhY2hlS2V5CitTaG1lbUFsbG9jYXRvckRhdGEKIFNobWVtSW5kZXhFbnQKK1No bWVtSGFzaERlc2MKK1NobWVtU3RydWN0RGVzYwogU2h1dGRvd25Gb3JlaWduU2Nhbl9mdW5j dGlvbgogU2h1dGRvd25JbmZvcm1hdGlvbgogU2h1dGRvd25Nb2RlCi0tIAoyLjQ3LjMKCg== --------------sHJ4NdKMkCB9GbTF7phkSOpd Content-Type: text/x-patch; charset=UTF-8; name="v4-0002-Convert-pg_stat_statements-to-use-the-new-interfa.patch" Content-Disposition: attachment; filename*0="v4-0002-Convert-pg_stat_statements-to-use-the-new-interfa.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBmZmE5NGU3MWU3OTMzNDQ0ZGQ3ZmJkYWRkMzVlYmY2YzQxNWQ3ZDVkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IEZyaSwgMTMgTWFyIDIwMjYgMjM6MDA6MDAgKzAyMDAK U3ViamVjdDogW1BBVENIIHY0IDIvM10gQ29udmVydCBwZ19zdGF0X3N0YXRlbWVudHMgdG8g dXNlIHRoZSBuZXcgaW50ZXJmYWNlCgpBcyBwYXJ0IG9mIHRoaXMsIGVtYmVkIHRoZSBMV0xv Y2sgaXQgbmVlZHMgaW4gdGhlIHNoYXJlZCBtZW1vcnkgc3RydWN0Cml0c2VsZiwgc28gdGhh dCB3ZSBkb24ndCBuZWVkIHRvIHVzZSBSZXF1ZXN0TmFtZWRMV0xvY2tUcmFuY2hlKCkKYW55 bW9yZS4gTFdMb2NrTmV3VHJhbmNoZUlkK0xXTG9ja0luaXRpYWxpemUgaXMgbW9yZSBjb252 ZW5pZW50IHRvIHVzZQppbiBleHRlbnNpb25zLgotLS0KIC4uLi9wZ19zdGF0X3N0YXRlbWVu dHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMgICB8IDE2MSArKysrKysrKy0tLS0tLS0tLS0KIDEg ZmlsZSBjaGFuZ2VkLCA2NyBpbnNlcnRpb25zKCspLCA5NCBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMu YyBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jCmlu ZGV4IDRhNDI3NTMzYmQ4Li5jYzE4ZGYzNGU3MCAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19z dGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMKKysrIGIvY29udHJpYi9wZ19z dGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMKQEAgLTI0OCw3ICsyNDgsNyBA QCB0eXBlZGVmIHN0cnVjdCBwZ3NzRW50cnkKICAqLwogdHlwZWRlZiBzdHJ1Y3QgcGdzc1No YXJlZFN0YXRlCiB7Ci0JTFdMb2NrCSAgICpsb2NrOwkJCS8qIHByb3RlY3RzIGhhc2h0YWJs ZSBzZWFyY2gvbW9kaWZpY2F0aW9uICovCisJTFdMb2NrUGFkZGVkIGxvY2s7CQkJLyogcHJv dGVjdHMgaGFzaHRhYmxlIHNlYXJjaC9tb2RpZmljYXRpb24gKi8KIAlkb3VibGUJCWN1cl9t ZWRpYW5fdXNhZ2U7CS8qIGN1cnJlbnQgbWVkaWFuIHVzYWdlIGluIGhhc2h0YWJsZSAqLwog CVNpemUJCW1lYW5fcXVlcnlfbGVuOyAvKiBjdXJyZW50IG1lYW4gZW50cnkgdGV4dCBsZW5n dGggKi8KIAlzbG9ja190CQltdXRleDsJCQkvKiBwcm90ZWN0cyBmb2xsb3dpbmcgZmllbGRz IG9ubHk6ICovCkBAIC0yNTgsMTMgKzI1OCwzOSBAQCB0eXBlZGVmIHN0cnVjdCBwZ3NzU2hh cmVkU3RhdGUKIAlwZ3NzR2xvYmFsU3RhdHMgc3RhdHM7CQkvKiBnbG9iYWwgc3RhdGlzdGlj cyBmb3IgcGdzcyAqLwogfSBwZ3NzU2hhcmVkU3RhdGU7CiAKKy8qIExpbmtzIHRvIHNoYXJl ZCBtZW1vcnkgc3RhdGUgKi8KK3N0YXRpYyBwZ3NzU2hhcmVkU3RhdGUgKnBnc3M7CitzdGF0 aWMgSFRBQiAqcGdzc19oYXNoOworCitzdGF0aWMgdm9pZCBwZ3NzX3NobWVtX2luaXQodm9p ZCAqYXJnKTsKKworc3RhdGljIFNobWVtU3RydWN0RGVzYyBwZ3NzU2hhcmVkU3RhdGVTaG1l bURlc2MgPQoreworCS5uYW1lID0gInBnX3N0YXRfc3RhdGVtZW50cyIsCisJLnNpemUgPSBz aXplb2YocGdzc1NoYXJlZFN0YXRlKSwKKwkuaW5pdF9mbiA9IHBnc3Nfc2htZW1faW5pdCwK KwkucHRyID0gKHZvaWQgKiopICZwZ3NzLAorfTsKKworc3RhdGljIFNobWVtSGFzaERlc2Mg cGdzc1NoYXJlZEhhc2hEZXNjID0KK3sKKwkubmFtZSA9ICJwZ19zdGF0X3N0YXRlbWVudHMg aGFzaCIsCisJLnB0ciA9ICZwZ3NzX2hhc2gsCisKKwkuaW5pdF9zaXplID0gMCwJCQkJLyog c2V0IGZyb20gJ3Bnc3NfbWF4JyAqLworCS5tYXhfc2l6ZSA9IDAsCQkJCS8qIHNldCBmcm9t ICdwZ3NzX21heCcgKi8KKwkuaGFzaF9pbmZvLmtleXNpemUgPSBzaXplb2YocGdzc0hhc2hL ZXkpLAorCS5oYXNoX2luZm8uZW50cnlzaXplID0gc2l6ZW9mKHBnc3NFbnRyeSksCisJLmhh c2hfZmxhZ3MgPSBIQVNIX0VMRU0gfCBIQVNIX0JMT0JTLAorfTsKKworCiAvKi0tLS0gTG9j YWwgdmFyaWFibGVzIC0tLS0qLwogCiAvKiBDdXJyZW50IG5lc3RpbmcgZGVwdGggb2YgcGxh bm5lci9FeGVjdXRvclJ1bi9Qcm9jZXNzVXRpbGl0eSBjYWxscyAqLwogc3RhdGljIGludAlu ZXN0aW5nX2xldmVsID0gMDsKIAogLyogU2F2ZWQgaG9vayB2YWx1ZXMgKi8KLXN0YXRpYyBz aG1lbV9yZXF1ZXN0X2hvb2tfdHlwZSBwcmV2X3NobWVtX3JlcXVlc3RfaG9vayA9IE5VTEw7 CiBzdGF0aWMgc2htZW1fc3RhcnR1cF9ob29rX3R5cGUgcHJldl9zaG1lbV9zdGFydHVwX2hv b2sgPSBOVUxMOwogc3RhdGljIHBvc3RfcGFyc2VfYW5hbHl6ZV9ob29rX3R5cGUgcHJldl9w b3N0X3BhcnNlX2FuYWx5emVfaG9vayA9IE5VTEw7CiBzdGF0aWMgcGxhbm5lcl9ob29rX3R5 cGUgcHJldl9wbGFubmVyX2hvb2sgPSBOVUxMOwpAQCAtMjc0LDEwICszMDAsNiBAQCBzdGF0 aWMgRXhlY3V0b3JGaW5pc2hfaG9va190eXBlIHByZXZfRXhlY3V0b3JGaW5pc2ggPSBOVUxM Owogc3RhdGljIEV4ZWN1dG9yRW5kX2hvb2tfdHlwZSBwcmV2X0V4ZWN1dG9yRW5kID0gTlVM TDsKIHN0YXRpYyBQcm9jZXNzVXRpbGl0eV9ob29rX3R5cGUgcHJldl9Qcm9jZXNzVXRpbGl0 eSA9IE5VTEw7CiAKLS8qIExpbmtzIHRvIHNoYXJlZCBtZW1vcnkgc3RhdGUgKi8KLXN0YXRp YyBwZ3NzU2hhcmVkU3RhdGUgKnBnc3MgPSBOVUxMOwotc3RhdGljIEhUQUIgKnBnc3NfaGFz aCA9IE5VTEw7Ci0KIC8qLS0tLSBHVUMgdmFyaWFibGVzIC0tLS0qLwogCiB0eXBlZGVmIGVu dW0KQEAgLTMzMCw3ICszNTIsNiBAQCBQR19GVU5DVElPTl9JTkZPX1YxKHBnX3N0YXRfc3Rh dGVtZW50c18xXzEzKTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEocGdfc3RhdF9zdGF0ZW1lbnRz KTsKIFBHX0ZVTkNUSU9OX0lORk9fVjEocGdfc3RhdF9zdGF0ZW1lbnRzX2luZm8pOwogCi1z dGF0aWMgdm9pZCBwZ3NzX3NobWVtX3JlcXVlc3Qodm9pZCk7CiBzdGF0aWMgdm9pZCBwZ3Nz X3NobWVtX3N0YXJ0dXAodm9pZCk7CiBzdGF0aWMgdm9pZCBwZ3NzX3NobWVtX3NodXRkb3du KGludCBjb2RlLCBEYXR1bSBhcmcpOwogc3RhdGljIHZvaWQgcGdzc19wb3N0X3BhcnNlX2Fu YWx5emUoUGFyc2VTdGF0ZSAqcHN0YXRlLCBRdWVyeSAqcXVlcnksCkBAIC0zNjUsNyArMzg2 LDYgQEAgc3RhdGljIHZvaWQgcGdzc19zdG9yZShjb25zdCBjaGFyICpxdWVyeSwgaW50NjQg cXVlcnlJZCwKIHN0YXRpYyB2b2lkIHBnX3N0YXRfc3RhdGVtZW50c19pbnRlcm5hbChGdW5j dGlvbkNhbGxJbmZvIGZjaW5mbywKIAkJCQkJCQkJCQlwZ3NzVmVyc2lvbiBhcGlfdmVyc2lv biwKIAkJCQkJCQkJCQlib29sIHNob3d0ZXh0KTsKLXN0YXRpYyBTaXplIHBnc3NfbWVtc2l6 ZSh2b2lkKTsKIHN0YXRpYyBwZ3NzRW50cnkgKmVudHJ5X2FsbG9jKHBnc3NIYXNoS2V5ICpr ZXksIFNpemUgcXVlcnlfb2Zmc2V0LCBpbnQgcXVlcnlfbGVuLAogCQkJCQkJCSAgaW50IGVu Y29kaW5nLCBib29sIHN0aWNreSk7CiBzdGF0aWMgdm9pZCBlbnRyeV9kZWFsbG9jKHZvaWQp OwpAQCAtNDcwLDExICs0OTAsMTggQEAgX1BHX2luaXQodm9pZCkKIAogCU1hcmtHVUNQcmVm aXhSZXNlcnZlZCgicGdfc3RhdF9zdGF0ZW1lbnRzIik7CiAKKwkvKgorCSAqIFJlZ2lzdGVy IG91ciBzaGFyZWQgbWVtb3J5IG5lZWRzLCBpbmNsdWRpbmcgaGFzaCB0YWJsZQorCSAqLwor CVNobWVtUmVnaXN0ZXJTdHJ1Y3QoJnBnc3NTaGFyZWRTdGF0ZVNobWVtRGVzYyk7CisKKwlw Z3NzU2hhcmVkSGFzaERlc2MuaW5pdF9zaXplID0gcGdzc19tYXg7CisJcGdzc1NoYXJlZEhh c2hEZXNjLm1heF9zaXplID0gcGdzc19tYXg7CisJU2htZW1SZWdpc3Rlckhhc2goJnBnc3NT aGFyZWRIYXNoRGVzYyk7CisKIAkvKgogCSAqIEluc3RhbGwgaG9va3MuCiAJICovCi0JcHJl dl9zaG1lbV9yZXF1ZXN0X2hvb2sgPSBzaG1lbV9yZXF1ZXN0X2hvb2s7Ci0Jc2htZW1fcmVx dWVzdF9ob29rID0gcGdzc19zaG1lbV9yZXF1ZXN0OwogCXByZXZfc2htZW1fc3RhcnR1cF9o b29rID0gc2htZW1fc3RhcnR1cF9ob29rOwogCXNobWVtX3N0YXJ0dXBfaG9vayA9IHBnc3Nf c2htZW1fc3RhcnR1cDsKIAlwcmV2X3Bvc3RfcGFyc2VfYW5hbHl6ZV9ob29rID0gcG9zdF9w YXJzZV9hbmFseXplX2hvb2s7CkBAIC00OTMsMzEgKzUyMCwzMSBAQCBfUEdfaW5pdCh2b2lk KQogCVByb2Nlc3NVdGlsaXR5X2hvb2sgPSBwZ3NzX1Byb2Nlc3NVdGlsaXR5OwogfQogCi0v KgotICogc2htZW1fcmVxdWVzdCBob29rOiByZXF1ZXN0IGFkZGl0aW9uYWwgc2hhcmVkIHJl c291cmNlcy4gIFdlJ2xsIGFsbG9jYXRlIG9yCi0gKiBhdHRhY2ggdG8gdGhlIHNoYXJlZCBy ZXNvdXJjZXMgaW4gcGdzc19zaG1lbV9zdGFydHVwKCkuCi0gKi8KIHN0YXRpYyB2b2lkCi1w Z3NzX3NobWVtX3JlcXVlc3Qodm9pZCkKK3Bnc3Nfc2htZW1faW5pdCh2b2lkICphcmcpCiB7 Ci0JaWYgKHByZXZfc2htZW1fcmVxdWVzdF9ob29rKQotCQlwcmV2X3NobWVtX3JlcXVlc3Rf aG9vaygpOworCWludAkJCXRyYW5jaGVfaWQ7CiAKLQlSZXF1ZXN0QWRkaW5TaG1lbVNwYWNl KHBnc3NfbWVtc2l6ZSgpKTsKLQlSZXF1ZXN0TmFtZWRMV0xvY2tUcmFuY2hlKCJwZ19zdGF0 X3N0YXRlbWVudHMiLCAxKTsKKwl0cmFuY2hlX2lkID0gTFdMb2NrTmV3VHJhbmNoZUlkKCJw Z19zdGF0X3N0YXRlbWVudHMiKTsKKwlMV0xvY2tJbml0aWFsaXplKCZwZ3NzLT5sb2NrLmxv Y2ssIHRyYW5jaGVfaWQpOworCXBnc3MtPmN1cl9tZWRpYW5fdXNhZ2UgPSBBU1NVTUVEX01F RElBTl9JTklUOworCXBnc3MtPm1lYW5fcXVlcnlfbGVuID0gQVNTVU1FRF9MRU5HVEhfSU5J VDsKKwlTcGluTG9ja0luaXQoJnBnc3MtPm11dGV4KTsKKwlwZ3NzLT5leHRlbnQgPSAwOwor CXBnc3MtPm5fd3JpdGVycyA9IDA7CisJcGdzcy0+Z2NfY291bnQgPSAwOworCXBnc3MtPnN0 YXRzLmRlYWxsb2MgPSAwOworCXBnc3MtPnN0YXRzLnN0YXRzX3Jlc2V0ID0gR2V0Q3VycmVu dFRpbWVzdGFtcCgpOwogfQogCiAvKgotICogc2htZW1fc3RhcnR1cCBob29rOiBhbGxvY2F0 ZSBvciBhdHRhY2ggdG8gc2hhcmVkIG1lbW9yeSwKLSAqIHRoZW4gbG9hZCBhbnkgcHJlLWV4 aXN0aW5nIHN0YXRpc3RpY3MgZnJvbSBmaWxlLgotICogQWxzbyBjcmVhdGUgYW5kIGxvYWQg dGhlIHF1ZXJ5LXRleHRzIGZpbGUsIHdoaWNoIGlzIGV4cGVjdGVkIHRvIGV4aXN0Ci0gKiAo ZXZlbiBpZiBlbXB0eSkgd2hpbGUgdGhlIG1vZHVsZSBpcyBlbmFibGVkLgorICogc2htZW1f c3RhcnR1cCBob29rOiBMb2FkIGFueSBwcmUtZXhpc3Rpbmcgc3RhdGlzdGljcyBmcm9tIGZp bGUgYXQKKyAqIHBvc3RtYXN0ZXIgc3RhcnR1cC4gIEFsc28gY3JlYXRlIGFuZCBsb2FkIHRo ZSBxdWVyeS10ZXh0cyBmaWxlLCB3aGljaCBpcworICogZXhwZWN0ZWQgdG8gZXhpc3QgKGV2 ZW4gaWYgZW1wdHkpIHdoaWxlIHRoZSBtb2R1bGUgaXMgZW5hYmxlZC4KICAqLwogc3RhdGlj IHZvaWQKIHBnc3Nfc2htZW1fc3RhcnR1cCh2b2lkKQogewotCWJvb2wJCWZvdW5kOwotCUhB U0hDVEwJCWluZm87CiAJRklMRQkgICAqZmlsZSA9IE5VTEw7CiAJRklMRQkgICAqcWZpbGUg PSBOVUxMOwogCXVpbnQzMgkJaGVhZGVyOwpAQCAtNTMwLDU0ICs1NTcsMTQgQEAgcGdzc19z aG1lbV9zdGFydHVwKHZvaWQpCiAJaWYgKHByZXZfc2htZW1fc3RhcnR1cF9ob29rKQogCQlw cmV2X3NobWVtX3N0YXJ0dXBfaG9vaygpOwogCi0JLyogcmVzZXQgaW4gY2FzZSB0aGlzIGlz IGEgcmVzdGFydCB3aXRoaW4gdGhlIHBvc3RtYXN0ZXIgKi8KLQlwZ3NzID0gTlVMTDsKLQlw Z3NzX2hhc2ggPSBOVUxMOworCWlmIChJc1VuZGVyUG9zdG1hc3RlcikKKwkJcmV0dXJuOwkJ CQkJLyogbm90aGluZyB0byBkbyBpbiBiYWNrZW5kcyAqLwogCiAJLyoKLQkgKiBDcmVhdGUg b3IgYXR0YWNoIHRvIHRoZSBzaGFyZWQgbWVtb3J5IHN0YXRlLCBpbmNsdWRpbmcgaGFzaCB0 YWJsZQorCSAqIFNldCB1cCBhIHNobWVtIGV4aXQgaG9vayB0byBkdW1wIHRoZSBzdGF0aXN0 aWNzIHRvIGRpc2sgb24gcG9zdG1hc3RlcgorCSAqIChvciBzdGFuZGFsb25lIGJhY2tlbmQp IGV4aXQuCiAJICovCi0JTFdMb2NrQWNxdWlyZShBZGRpblNobWVtSW5pdExvY2ssIExXX0VY Q0xVU0lWRSk7Ci0KLQlwZ3NzID0gU2htZW1Jbml0U3RydWN0KCJwZ19zdGF0X3N0YXRlbWVu dHMiLAotCQkJCQkJICAgc2l6ZW9mKHBnc3NTaGFyZWRTdGF0ZSksCi0JCQkJCQkgICAmZm91 bmQpOwotCi0JaWYgKCFmb3VuZCkKLQl7Ci0JCS8qIEZpcnN0IHRpbWUgdGhyb3VnaCAuLi4g Ki8KLQkJcGdzcy0+bG9jayA9ICYoR2V0TmFtZWRMV0xvY2tUcmFuY2hlKCJwZ19zdGF0X3N0 YXRlbWVudHMiKSktPmxvY2s7Ci0JCXBnc3MtPmN1cl9tZWRpYW5fdXNhZ2UgPSBBU1NVTUVE X01FRElBTl9JTklUOwotCQlwZ3NzLT5tZWFuX3F1ZXJ5X2xlbiA9IEFTU1VNRURfTEVOR1RI X0lOSVQ7Ci0JCVNwaW5Mb2NrSW5pdCgmcGdzcy0+bXV0ZXgpOwotCQlwZ3NzLT5leHRlbnQg PSAwOwotCQlwZ3NzLT5uX3dyaXRlcnMgPSAwOwotCQlwZ3NzLT5nY19jb3VudCA9IDA7Ci0J CXBnc3MtPnN0YXRzLmRlYWxsb2MgPSAwOwotCQlwZ3NzLT5zdGF0cy5zdGF0c19yZXNldCA9 IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKLQl9Ci0KLQlpbmZvLmtleXNpemUgPSBzaXplb2Yo cGdzc0hhc2hLZXkpOwotCWluZm8uZW50cnlzaXplID0gc2l6ZW9mKHBnc3NFbnRyeSk7Ci0J cGdzc19oYXNoID0gU2htZW1Jbml0SGFzaCgicGdfc3RhdF9zdGF0ZW1lbnRzIGhhc2giLAot CQkJCQkJCSAgcGdzc19tYXgsIHBnc3NfbWF4LAotCQkJCQkJCSAgJmluZm8sCi0JCQkJCQkJ ICBIQVNIX0VMRU0gfCBIQVNIX0JMT0JTKTsKLQotCUxXTG9ja1JlbGVhc2UoQWRkaW5TaG1l bUluaXRMb2NrKTsKLQotCS8qCi0JICogSWYgd2UncmUgaW4gdGhlIHBvc3RtYXN0ZXIgKG9y IGEgc3RhbmRhbG9uZSBiYWNrZW5kLi4uKSwgc2V0IHVwIGEgc2htZW0KLQkgKiBleGl0IGhv b2sgdG8gZHVtcCB0aGUgc3RhdGlzdGljcyB0byBkaXNrLgotCSAqLwotCWlmICghSXNVbmRl clBvc3RtYXN0ZXIpCi0JCW9uX3NobWVtX2V4aXQocGdzc19zaG1lbV9zaHV0ZG93biwgKERh dHVtKSAwKTsKLQotCS8qCi0JICogRG9uZSBpZiBzb21lIG90aGVyIHByb2Nlc3MgYWxyZWFk eSBjb21wbGV0ZWQgb3VyIGluaXRpYWxpemF0aW9uLgotCSAqLwotCWlmIChmb3VuZCkKLQkJ cmV0dXJuOworCW9uX3NobWVtX2V4aXQocGdzc19zaG1lbV9zaHV0ZG93biwgKERhdHVtKSAw KTsKIAogCS8qCiAJICogTm90ZTogd2UgZG9uJ3QgYm90aGVyIHdpdGggbG9ja3MgaGVyZSwg YmVjYXVzZSB0aGVyZSBzaG91bGQgYmUgbm8gb3RoZXIKQEAgLTEzMzcsNyArMTMyNCw3IEBA IHBnc3Nfc3RvcmUoY29uc3QgY2hhciAqcXVlcnksIGludDY0IHF1ZXJ5SWQsCiAJa2V5LnRv cGxldmVsID0gKG5lc3RpbmdfbGV2ZWwgPT0gMCk7CiAKIAkvKiBMb29rdXAgdGhlIGhhc2gg dGFibGUgZW50cnkgd2l0aCBzaGFyZWQgbG9jay4gKi8KLQlMV0xvY2tBY3F1aXJlKHBnc3Mt PmxvY2ssIExXX1NIQVJFRCk7CisJTFdMb2NrQWNxdWlyZSgmcGdzcy0+bG9jay5sb2NrLCBM V19TSEFSRUQpOwogCiAJZW50cnkgPSAocGdzc0VudHJ5ICopIGhhc2hfc2VhcmNoKHBnc3Nf aGFzaCwgJmtleSwgSEFTSF9GSU5ELCBOVUxMKTsKIApAQCAtMTM1OCwxMSArMTM0NSwxMSBA QCBwZ3NzX3N0b3JlKGNvbnN0IGNoYXIgKnF1ZXJ5LCBpbnQ2NCBxdWVyeUlkLAogCQkgKi8K IAkJaWYgKGpzdGF0ZSkKIAkJewotCQkJTFdMb2NrUmVsZWFzZShwZ3NzLT5sb2NrKTsKKwkJ CUxXTG9ja1JlbGVhc2UoJnBnc3MtPmxvY2subG9jayk7CiAJCQlub3JtX3F1ZXJ5ID0gZ2Vu ZXJhdGVfbm9ybWFsaXplZF9xdWVyeShqc3RhdGUsIHF1ZXJ5LAogCQkJCQkJCQkJCQkJICAg cXVlcnlfbG9jYXRpb24sCiAJCQkJCQkJCQkJCQkgICAmcXVlcnlfbGVuKTsKLQkJCUxXTG9j a0FjcXVpcmUocGdzcy0+bG9jaywgTFdfU0hBUkVEKTsKKwkJCUxXTG9ja0FjcXVpcmUoJnBn c3MtPmxvY2subG9jaywgTFdfU0hBUkVEKTsKIAkJfQogCiAJCS8qIEFwcGVuZCBuZXcgcXVl cnkgdGV4dCB0byBmaWxlIHdpdGggb25seSBzaGFyZWQgbG9jayBoZWxkICovCkBAIC0xMzc3 LDggKzEzNjQsOCBAQCBwZ3NzX3N0b3JlKGNvbnN0IGNoYXIgKnF1ZXJ5LCBpbnQ2NCBxdWVy eUlkLAogCQlkb19nYyA9IG5lZWRfZ2NfcXRleHRzKCk7CiAKIAkJLyogTmVlZCBleGNsdXNp dmUgbG9jayB0byBtYWtlIGEgbmV3IGhhc2h0YWJsZSBlbnRyeSAtIHByb21vdGUgKi8KLQkJ TFdMb2NrUmVsZWFzZShwZ3NzLT5sb2NrKTsKLQkJTFdMb2NrQWNxdWlyZShwZ3NzLT5sb2Nr LCBMV19FWENMVVNJVkUpOworCQlMV0xvY2tSZWxlYXNlKCZwZ3NzLT5sb2NrLmxvY2spOwor CQlMV0xvY2tBY3F1aXJlKCZwZ3NzLT5sb2NrLmxvY2ssIExXX0VYQ0xVU0lWRSk7CiAKIAkJ LyoKIAkJICogQSBnYXJiYWdlIGNvbGxlY3Rpb24gbWF5IGhhdmUgb2NjdXJyZWQgd2hpbGUg d2Ugd2VyZW4ndCBob2xkaW5nIHRoZQpAQCAtMTUxNyw3ICsxNTA0LDcgQEAgcGdzc19zdG9y ZShjb25zdCBjaGFyICpxdWVyeSwgaW50NjQgcXVlcnlJZCwKIAl9CiAKIGRvbmU6Ci0JTFdM b2NrUmVsZWFzZShwZ3NzLT5sb2NrKTsKKwlMV0xvY2tSZWxlYXNlKCZwZ3NzLT5sb2NrLmxv Y2spOwogCiAJLyogV2UgcG9zdHBvbmUgdGhpcyBjbGVhbi11cCB1bnRpbCB3ZSdyZSBvdXQg b2YgdGhlIGxvY2sgKi8KIAlpZiAobm9ybV9xdWVyeSkKQEAgLTE4MDYsNyArMTc5Myw3IEBA IHBnX3N0YXRfc3RhdGVtZW50c19pbnRlcm5hbChGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywK IAkgKiB3ZSBuZWVkIHRvIHBhcnRpdGlvbiB0aGUgaGFzaCB0YWJsZSB0byBsaW1pdCB0aGUg dGltZSBzcGVudCBob2xkaW5nIGFueQogCSAqIG9uZSBsb2NrLgogCSAqLwotCUxXTG9ja0Fj cXVpcmUocGdzcy0+bG9jaywgTFdfU0hBUkVEKTsKKwlMV0xvY2tBY3F1aXJlKCZwZ3NzLT5s b2NrLmxvY2ssIExXX1NIQVJFRCk7CiAKIAlpZiAoc2hvd3RleHQpCiAJewpAQCAtMjA0Myw3 ICsyMDMwLDcgQEAgcGdfc3RhdF9zdGF0ZW1lbnRzX2ludGVybmFsKEZ1bmN0aW9uQ2FsbElu Zm8gZmNpbmZvLAogCQl0dXBsZXN0b3JlX3B1dHZhbHVlcyhyc2luZm8tPnNldFJlc3VsdCwg cnNpbmZvLT5zZXREZXNjLCB2YWx1ZXMsIG51bGxzKTsKIAl9CiAKLQlMV0xvY2tSZWxlYXNl KHBnc3MtPmxvY2spOworCUxXTG9ja1JlbGVhc2UoJnBnc3MtPmxvY2subG9jayk7CiAKIAlm cmVlKHFidWZmZXIpOwogfQpAQCAtMjA4MiwyMCArMjA2OSw2IEBAIHBnX3N0YXRfc3RhdGVt ZW50c19pbmZvKFBHX0ZVTkNUSU9OX0FSR1MpCiAJUEdfUkVUVVJOX0RBVFVNKEhlYXBUdXBs ZUdldERhdHVtKGhlYXBfZm9ybV90dXBsZSh0dXBkZXNjLCB2YWx1ZXMsIG51bGxzKSkpOwog fQogCi0vKgotICogRXN0aW1hdGUgc2hhcmVkIG1lbW9yeSBzcGFjZSBuZWVkZWQuCi0gKi8K LXN0YXRpYyBTaXplCi1wZ3NzX21lbXNpemUodm9pZCkKLXsKLQlTaXplCQlzaXplOwotCi0J c2l6ZSA9IE1BWEFMSUdOKHNpemVvZihwZ3NzU2hhcmVkU3RhdGUpKTsKLQlzaXplID0gYWRk X3NpemUoc2l6ZSwgaGFzaF9lc3RpbWF0ZV9zaXplKHBnc3NfbWF4LCBzaXplb2YocGdzc0Vu dHJ5KSkpOwotCi0JcmV0dXJuIHNpemU7Ci19Ci0KIC8qCiAgKiBBbGxvY2F0ZSBhIG5ldyBo YXNodGFibGUgZW50cnkuCiAgKiBjYWxsZXIgbXVzdCBob2xkIGFuIGV4Y2x1c2l2ZSBsb2Nr IG9uIHBnc3MtPmxvY2sKQEAgLTI3MjUsNyArMjY5OCw3IEBAIGVudHJ5X3Jlc2V0KE9pZCB1 c2VyaWQsIE9pZCBkYmlkLCBpbnQ2NCBxdWVyeWlkLCBib29sIG1pbm1heF9vbmx5KQogCQkJ CShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAog CQkJCSBlcnJtc2coInBnX3N0YXRfc3RhdGVtZW50cyBtdXN0IGJlIGxvYWRlZCB2aWEgXCJz aGFyZWRfcHJlbG9hZF9saWJyYXJpZXNcIiIpKSk7CiAKLQlMV0xvY2tBY3F1aXJlKHBnc3Mt PmxvY2ssIExXX0VYQ0xVU0lWRSk7CisJTFdMb2NrQWNxdWlyZSgmcGdzcy0+bG9jay5sb2Nr LCBMV19FWENMVVNJVkUpOwogCW51bV9lbnRyaWVzID0gaGFzaF9nZXRfbnVtX2VudHJpZXMo cGdzc19oYXNoKTsKIAogCXN0YXRzX3Jlc2V0ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOwpA QCAtMjgxOSw3ICsyNzkyLDcgQEAgZG9uZToKIAlyZWNvcmRfZ2NfcXRleHRzKCk7CiAKIHJl bGVhc2VfbG9jazoKLQlMV0xvY2tSZWxlYXNlKHBnc3MtPmxvY2spOworCUxXTG9ja1JlbGVh c2UoJnBnc3MtPmxvY2subG9jayk7CiAKIAlyZXR1cm4gc3RhdHNfcmVzZXQ7CiB9Ci0tIAoy LjQ3LjMKCg== --------------sHJ4NdKMkCB9GbTF7phkSOpd Content-Type: text/x-patch; charset=UTF-8; name="v4-0003-Use-the-new-mechanism-in-a-few-core-subsystems.patch" Content-Disposition: attachment; filename*0="v4-0003-Use-the-new-mechanism-in-a-few-core-subsystems.patch" Content-Transfer-Encoding: base64 RnJvbSAxZjBkNzUzNWU1YzFlMDdkZGRhYTVmMGMwOTNlY2U1OTcxNmEzZmQ0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IEZyaSwgMTMgTWFyIDIwMjYgMjM6MDE6NDQgKzAyMDAK U3ViamVjdDogW1BBVENIIHY0IDMvM10gVXNlIHRoZSBuZXcgbWVjaGFuaXNtIGluIGEgZmV3 IGNvcmUgc3Vic3lzdGVtcwoKSSBjaG9zZSB0aGVzZSBzdWJzeXN0ZW1zIHNwZWNpZmljYWxs eSBiZWNhdXNlIHRoZXkgaGF2ZSBzb21lCmNvbXBsaWNhdGluZyBwcm9wZXJ0aWVzLCBtYWtp bmcgdGhlbSBzbGlnaHRseSBoYXJkZXIgdG8gY29udmVydCB0aGFuCm1vc3Q6CgotIFRoZSBp bml0aWFsaXphdGlvbiBjYWxsYmFja3Mgb2Ygc29tZSBvZiB0aGVzZSBzdWJzeXN0ZW1zIGhh dmUKICBkZXBlbmRlbmNpZXMsIGkuZS4gdGhleSBuZWVkIHRvIGJlIGluaXRpYWxpemVkIGlu IHRoZSByaWdodCBvcmRlci4KCi0gVGhlIFByb2dHbG9iYWwgcG9pbnRlciBzdGlsbCBuZWVk cyB0byBiZSBpbmhlcml0ZWQgYnkgdGhlCiAgQmFja2VuZFBhcmFtZXRlcnMgbWVjaGFuaXNt IG9uIEVYRUNfQkFDS0VORCBidWlsZHMsIGJlY2F1c2UKICBQcm9jR2xvYmFsIGlzIHJlcXVp cmVkIGJ5IEluaXRQcm9jZXNzKCkgdG8gZ2V0IGEgUEdQUk9DIGVudHJ5LCBhbmQKICB0aGUg UEdQUk9DIGVudHJ5IGlzIHJlcXVpcmVkIHRvIHVzZSBMV0xvY2tzLCBhbmQgdXN1YWxseSBh dHRhY2hpbmcKICB0byBzaGFyZWQgbWVtb3J5IGFyZWFzIHJlcXVpcmVzIHRoZSB1c2Ugb2Yg TFdMb2Nrcy4KCi0gU2ltaWxhcmx5LCBQcm9jU2lnbmFsIHBvaW50ZXIgc3RpbGwgbmVlZHMg dG8gYmUgaGFuZGxlZCBieQogIEJhY2tlbmRQYXJhbWV0ZXJzLCBiZWNhdXNlIHF1ZXJ5IGNh bmNlbGxhdGlvbiBjb25uZWN0aW9ucyBhY2Nlc3MgaXQKICB3aXRob3V0IGNhbGxpbmcgSW5p dFByb2Nlc3MKCkknbSBiZWxpZXZlIGNvbnZlcnRpbmcgYWxsIHRoZSByZXN0IG9mIHRoZSBz dWJzeXN0ZW1zIGFmdGVyIHRoaXMgd2lsbApiZSBwcmV0dHkgbWVjaGFuaWMuCi0tLQogc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdmFyc3VwLmMgICAgIHwgIDMzICsrLS0tCiBzcmMv YmFja2VuZC9zdG9yYWdlL2lwYy9kc20uYyAgICAgICAgICAgfCAgNDUgKysrLS0tCiBzcmMv YmFja2VuZC9zdG9yYWdlL2lwYy9kc21fcmVnaXN0cnkuYyAgfCAgMzQgKystLS0KIHNyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYyAgICAgICAgICB8ICA0NSArKystLS0KIHNyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL3Btc2lnbmFsLmMgICAgICB8ICA0OSArKysrLS0tCiBzcmMv YmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYyAgICAgfCAxMjIgKysrKysrKystLS0t LS0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jICAgIHwgIDYzICsr KystLS0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2ludmFsYWR0LmMgICAgIHwgIDM2 ICsrLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jICAgICAgICAgfCAxNzgg KysrKysrKysrKysrLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93 YWl0X2V2ZW50LmMgfCAgOTQgKysrKysrLS0tLS0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL3Ry YW5zYW0uaCAgICAgICAgICAgIHwgICAzICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2RzbV9y ZWdpc3RyeS5oICAgICAgfCAgIDMgKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvcG1zaWduYWwu aCAgICAgICAgICB8ICAgMyArLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jLmggICAgICAg ICAgICAgIHwgICAyICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NhcnJheS5oICAgICAg ICAgfCAgIDMgKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oICAgICAgICB8 ICAgMyArLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9zaW52YWxhZHQuaCAgICAgICAgIHwgICAz ICstCiBzcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50LmggICAgICAgICAgfCAgIDMgKy0K IDE4IGZpbGVzIGNoYW5nZWQsIDM2MCBpbnNlcnRpb25zKCspLCAzNjIgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdmFyc3VwLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS92YXJzdXAuYwppbmRleCAzZTk1ZDRjZmQxNi4u ODRlNmM5MGY0ZmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3Zh cnN1cC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3ZhcnN1cC5jCkBAIC0z MCwzNSArMzAsMzIgQEAKIC8qIE51bWJlciBvZiBPSURzIHRvIHByZWZldGNoIChwcmVhbGxv Y2F0ZSkgcGVyIFhMT0cgd3JpdGUgKi8KICNkZWZpbmUgVkFSX09JRF9QUkVGRVRDSAkJODE5 MgogCitzdGF0aWMgdm9pZCBWYXJzdXBTaG1lbUluaXQodm9pZCAqYXJnKTsKKwogLyogcG9p bnRlciB0byB2YXJpYWJsZXMgc3RydWN0IGluIHNoYXJlZCBtZW1vcnkgKi8KIFRyYW5zYW1W YXJpYWJsZXNEYXRhICpUcmFuc2FtVmFyaWFibGVzID0gTlVMTDsKIAorc3RhdGljIFNobWVt U3RydWN0RGVzYyBUcmFuc2FtVmFyaWFibGVzU2htZW1EZXNjID0geworCS5uYW1lID0gIlRy YW5zYW1WYXJpYWJsZXMiLAorCS5zaXplID0gc2l6ZW9mKFRyYW5zYW1WYXJpYWJsZXNEYXRh KSwKKwkuaW5pdF9mbiA9IFZhcnN1cFNobWVtSW5pdCwKKwkucHRyID0gKHZvaWQgKiopICZU cmFuc2FtVmFyaWFibGVzLAorfTsKIAogLyoKICAqIEluaXRpYWxpemF0aW9uIG9mIHNoYXJl ZCBtZW1vcnkgZm9yIFRyYW5zYW1WYXJpYWJsZXMuCiAgKi8KLVNpemUKLVZhcnN1cFNobWVt U2l6ZSh2b2lkKQordm9pZAorVmFyc3VwU2htZW1SZWdpc3Rlcih2b2lkKQogewotCXJldHVy biBzaXplb2YoVHJhbnNhbVZhcmlhYmxlc0RhdGEpOworCVNobWVtUmVnaXN0ZXJTdHJ1Y3Qo JlRyYW5zYW1WYXJpYWJsZXNTaG1lbURlc2MpOwogfQogCi12b2lkCi1WYXJzdXBTaG1lbUlu aXQodm9pZCkKLXsKLQlib29sCQlmb3VuZDsKK3N0YXRpYyB2b2lkCitWYXJzdXBTaG1lbUlu aXQodm9pZCAqYXJnKQogCi0JLyogSW5pdGlhbGl6ZSBvdXIgc2hhcmVkIHN0YXRlIHN0cnVj dCAqLwotCVRyYW5zYW1WYXJpYWJsZXMgPSBTaG1lbUluaXRTdHJ1Y3QoIlRyYW5zYW1WYXJp YWJsZXMiLAotCQkJCQkJCQkJICAgc2l6ZW9mKFRyYW5zYW1WYXJpYWJsZXNEYXRhKSwKLQkJ CQkJCQkJCSAgICZmb3VuZCk7Ci0JaWYgKCFJc1VuZGVyUG9zdG1hc3RlcikKLQl7Ci0JCUFz c2VydCghZm91bmQpOwotCQltZW1zZXQoVHJhbnNhbVZhcmlhYmxlcywgMCwgc2l6ZW9mKFRy YW5zYW1WYXJpYWJsZXNEYXRhKSk7Ci0JfQotCWVsc2UKLQkJQXNzZXJ0KGZvdW5kKTsKK3sK KwltZW1zZXQoVHJhbnNhbVZhcmlhYmxlcywgMCwgc2l6ZW9mKFRyYW5zYW1WYXJpYWJsZXNE YXRhKSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9k c20uYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2RzbS5jCmluZGV4IDZhNWIxNjM5MmY3 Li5mN2MxOGVhZjM4NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNt LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNtLmMKQEAgLTExMCw2ICsxMTAs MTUgQEAgc3RhdGljIGJvb2wgZHNtX2luaXRfZG9uZSA9IGZhbHNlOwogLyogUHJlYWxsb2Nh dGVkIERTTSBzcGFjZSBpbiB0aGUgbWFpbiBzaGFyZWQgbWVtb3J5IHJlZ2lvbi4gKi8KIHN0 YXRpYyB2b2lkICpkc21fbWFpbl9zcGFjZV9iZWdpbiA9IE5VTEw7CiAKK3N0YXRpYyB2b2lk IGRzbV9tYWluX3NwYWNlX2luaXQodm9pZCAqKTsKKworc3RhdGljIFNobWVtU3RydWN0RGVz YyBkc21fbWFpbl9zcGFjZV9zaG1lbV9kZXNjID0geworCS5uYW1lID0gIlByZWFsbG9jYXRl ZCBEU00iLAorCS5zaXplID0gMCwJCQkJCS8qIGNhbGN1bGF0ZWQgbGF0ZXIgKi8KKwkuaW5p dF9mbiA9IGRzbV9tYWluX3NwYWNlX2luaXQsCisJLnB0ciA9ICZkc21fbWFpbl9zcGFjZV9i ZWdpbiwKK307CisKIC8qCiAgKiBMaXN0IG9mIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBzZWdt ZW50cyB1c2VkIGJ5IHRoaXMgYmFja2VuZC4KICAqCkBAIC00NzksMjcgKzQ4OCwyOSBAQCB2 b2lkCiBkc21fc2htZW1faW5pdCh2b2lkKQogewogCXNpemVfdAkJc2l6ZSA9IGRzbV9lc3Rp bWF0ZV9zaXplKCk7Ci0JYm9vbAkJZm91bmQ7CiAKIAlpZiAoc2l6ZSA9PSAwKQogCQlyZXR1 cm47CiAKLQlkc21fbWFpbl9zcGFjZV9iZWdpbiA9IFNobWVtSW5pdFN0cnVjdCgiUHJlYWxs b2NhdGVkIERTTSIsIHNpemUsICZmb3VuZCk7Ci0JaWYgKCFmb3VuZCkKLQl7Ci0JCUZyZWVQ YWdlTWFuYWdlciAqZnBtID0gKEZyZWVQYWdlTWFuYWdlciAqKSBkc21fbWFpbl9zcGFjZV9i ZWdpbjsKLQkJc2l6ZV90CQlmaXJzdF9wYWdlID0gMDsKLQkJc2l6ZV90CQlwYWdlczsKLQot CQkvKiBSZXNlcnZlIHNwYWNlIGZvciB0aGUgRnJlZVBhZ2VNYW5hZ2VyLiAqLwotCQl3aGls ZSAoZmlyc3RfcGFnZSAqIEZQTV9QQUdFX1NJWkUgPCBzaXplb2YoRnJlZVBhZ2VNYW5hZ2Vy KSkKLQkJCSsrZmlyc3RfcGFnZTsKLQotCQkvKiBJbml0aWFsaXplIGl0IGFuZCBnaXZlIGl0 IGFsbCB0aGUgcmVzdCBvZiB0aGUgc3BhY2UuICovCi0JCUZyZWVQYWdlTWFuYWdlckluaXRp YWxpemUoZnBtLCBkc21fbWFpbl9zcGFjZV9iZWdpbik7Ci0JCXBhZ2VzID0gKHNpemUgLyBG UE1fUEFHRV9TSVpFKSAtIGZpcnN0X3BhZ2U7Ci0JCUZyZWVQYWdlTWFuYWdlclB1dChmcG0s IGZpcnN0X3BhZ2UsIHBhZ2VzKTsKLQl9CisJU2htZW1SZWdpc3RlclN0cnVjdCgmZHNtX21h aW5fc3BhY2Vfc2htZW1fZGVzYyk7Cit9CisKK3N0YXRpYyB2b2lkCitkc21fbWFpbl9zcGFj ZV9pbml0KHZvaWQgKmFyZykKK3sKKwlzaXplX3QJCXNpemUgPSBkc21fbWFpbl9zcGFjZV9z aG1lbV9kZXNjLnNpemU7CisJRnJlZVBhZ2VNYW5hZ2VyICpmcG0gPSAoRnJlZVBhZ2VNYW5h Z2VyICopIGRzbV9tYWluX3NwYWNlX2JlZ2luOworCXNpemVfdAkJZmlyc3RfcGFnZSA9IDA7 CisJc2l6ZV90CQlwYWdlczsKKworCS8qIFJlc2VydmUgc3BhY2UgZm9yIHRoZSBGcmVlUGFn ZU1hbmFnZXIuICovCisJd2hpbGUgKGZpcnN0X3BhZ2UgKiBGUE1fUEFHRV9TSVpFIDwgc2l6 ZW9mKEZyZWVQYWdlTWFuYWdlcikpCisJCSsrZmlyc3RfcGFnZTsKKworCS8qIEluaXRpYWxp emUgaXQgYW5kIGdpdmUgaXQgYWxsIHRoZSByZXN0IG9mIHRoZSBzcGFjZS4gKi8KKwlGcmVl UGFnZU1hbmFnZXJJbml0aWFsaXplKGZwbSwgZHNtX21haW5fc3BhY2VfYmVnaW4pOworCXBh Z2VzID0gKHNpemUgLyBGUE1fUEFHRV9TSVpFKSAtIGZpcnN0X3BhZ2U7CisJRnJlZVBhZ2VN YW5hZ2VyUHV0KGZwbSwgZmlyc3RfcGFnZSwgcGFnZXMpOwogfQogCiAvKgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvZHNtX3JlZ2lzdHJ5LmMgYi9zcmMvYmFja2Vu ZC9zdG9yYWdlL2lwYy9kc21fcmVnaXN0cnkuYwppbmRleCAwNjhjMTU3N2IxMi4uNjBjODQ0 NzEyMjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2RzbV9yZWdpc3Ry eS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2RzbV9yZWdpc3RyeS5jCkBAIC01 Niw2ICs1NiwxNiBAQCB0eXBlZGVmIHN0cnVjdCBEU01SZWdpc3RyeUN0eFN0cnVjdAogCiBz dGF0aWMgRFNNUmVnaXN0cnlDdHhTdHJ1Y3QgKkRTTVJlZ2lzdHJ5Q3R4OwogCitzdGF0aWMg dm9pZCBEU01SZWdpc3RyeUN0eFNobWVtSW5pdCh2b2lkICphcmcpOworCitzdGF0aWMgU2ht ZW1TdHJ1Y3REZXNjIERTTVJlZ2lzdHJ5Q3R4U2htZW1EZXNjID0geworCS5uYW1lID0gIkRT TSBSZWdpc3RyeSBEYXRhIiwKKwkuc2l6ZSA9IHNpemVvZihEU01SZWdpc3RyeUN0eFN0cnVj dCksCisJLmluaXRfZm4gPSBEU01SZWdpc3RyeUN0eFNobWVtSW5pdCwKKwkucHRyID0gKHZv aWQgKiopICZEU01SZWdpc3RyeUN0eCwKK307CisKKwogdHlwZWRlZiBzdHJ1Y3QgTmFtZWRE U01TdGF0ZQogewogCWRzbV9oYW5kbGUJaGFuZGxlOwpAQCAtMTEzLDI3ICsxMjMsMTcgQEAg c3RhdGljIGNvbnN0IGRzaGFzaF9wYXJhbWV0ZXJzIGRzaF9wYXJhbXMgPSB7CiBzdGF0aWMg ZHNhX2FyZWEgKmRzbV9yZWdpc3RyeV9kc2E7CiBzdGF0aWMgZHNoYXNoX3RhYmxlICpkc21f cmVnaXN0cnlfdGFibGU7CiAKLVNpemUKLURTTVJlZ2lzdHJ5U2htZW1TaXplKHZvaWQpCit2 b2lkCitEU01SZWdpc3RyeVNobWVtUmVnaXN0ZXIodm9pZCkKIHsKLQlyZXR1cm4gTUFYQUxJ R04oc2l6ZW9mKERTTVJlZ2lzdHJ5Q3R4U3RydWN0KSk7CisJU2htZW1SZWdpc3RlclN0cnVj dCgmRFNNUmVnaXN0cnlDdHhTaG1lbURlc2MpOwogfQogCi12b2lkCi1EU01SZWdpc3RyeVNo bWVtSW5pdCh2b2lkKQorc3RhdGljIHZvaWQKK0RTTVJlZ2lzdHJ5Q3R4U2htZW1Jbml0KHZv aWQgKmFyZykKIHsKLQlib29sCQlmb3VuZDsKLQotCURTTVJlZ2lzdHJ5Q3R4ID0gKERTTVJl Z2lzdHJ5Q3R4U3RydWN0ICopCi0JCVNobWVtSW5pdFN0cnVjdCgiRFNNIFJlZ2lzdHJ5IERh dGEiLAotCQkJCQkJRFNNUmVnaXN0cnlTaG1lbVNpemUoKSwKLQkJCQkJCSZmb3VuZCk7Ci0K LQlpZiAoIWZvdW5kKQotCXsKLQkJRFNNUmVnaXN0cnlDdHgtPmRzYWggPSBEU0FfSEFORExF X0lOVkFMSUQ7Ci0JCURTTVJlZ2lzdHJ5Q3R4LT5kc2hoID0gRFNIQVNIX0hBTkRMRV9JTlZB TElEOwotCX0KKwlEU01SZWdpc3RyeUN0eC0+ZHNhaCA9IERTQV9IQU5ETEVfSU5WQUxJRDsK KwlEU01SZWdpc3RyeUN0eC0+ZHNoaCA9IERTSEFTSF9IQU5ETEVfSU5WQUxJRDsKIH0KIAog LyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwppbmRleCA0MDVjNjk2NTVmMC4uY2MzMmEyOTJi MTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYworKysgYi9z cmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKQEAgLTEwMiwxNSArMTAyLDE0IEBAIENh bGN1bGF0ZVNobWVtU2l6ZSh2b2lkKQogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTaG1lbVJl Z2lzdGVyZWRTaXplKCkpOwogCiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIGRzbV9lc3RpbWF0 ZV9zaXplKCkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBEU01SZWdpc3RyeVNobWVtU2l6 ZSgpKTsKKworCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTaG1lbVJlZ2lzdGVyZWRTaXplKCkp OwogCiAJLyogbGVnYWN5IHN1YnN5c3RlbXMgKi8KIAlzaXplID0gYWRkX3NpemUoc2l6ZSwg QnVmZmVyTWFuYWdlclNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgTG9j a01hbmFnZXJTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFByZWRpY2F0 ZUxvY2tTaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIFByb2NHbG9iYWxT aG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFhMb2dQcmVmZXRjaFNobWVt U2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgVmFyc3VwU2htZW1TaXplKCkpOwog CXNpemUgPSBhZGRfc2l6ZShzaXplLCBYTE9HU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRf c2l6ZShzaXplLCBYTG9nUmVjb3ZlcnlTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXpl KHNpemUsIENMT0dTaG1lbVNpemUoKSk7CkBAIC0xMjAsMTEgKzExOSw3IEBAIENhbGN1bGF0 ZVNobWVtU2l6ZSh2b2lkKQogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBCYWNrZ3JvdW5kV29y a2VyU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBNdWx0aVhhY3RTaG1l bVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIExXTG9ja1NobWVtU2l6ZSgpKTsK LQlzaXplID0gYWRkX3NpemUoc2l6ZSwgUHJvY0FycmF5U2htZW1TaXplKCkpOwogCXNpemUg PSBhZGRfc2l6ZShzaXplLCBCYWNrZW5kU3RhdHVzU2htZW1TaXplKCkpOwotCXNpemUgPSBh ZGRfc2l6ZShzaXplLCBTaGFyZWRJbnZhbFNobWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3Np emUoc2l6ZSwgUE1TaWduYWxTaG1lbVNpemUoKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUs IFByb2NTaWduYWxTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIENoZWNr cG9pbnRlclNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgQXV0b1ZhY3V1 bVNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgUmVwbGljYXRpb25TbG90 c1NobWVtU2l6ZSgpKTsKQEAgLTEzOCw3ICsxMzMsNiBAQCBDYWxjdWxhdGVTaG1lbVNpemUo dm9pZCkKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgU3luY1NjYW5TaG1lbVNpemUoKSk7CiAJ c2l6ZSA9IGFkZF9zaXplKHNpemUsIEFzeW5jU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRf c2l6ZShzaXplLCBTdGF0c1NobWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwg V2FpdEV2ZW50Q3VzdG9tU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBJ bmplY3Rpb25Qb2ludFNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgU2xv dFN5bmNTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIEFpb1NobWVtU2l6 ZSgpKTsKQEAgLTI0NiwxMSArMjQwLDI1IEBAIHZvaWQKIFJlZ2lzdGVyU2htZW1TdHJ1Y3Rz KHZvaWQpCiB7CiAJLyoKLQkgKiBUT0RPOiBOb3QgdXNlZCBpbiBhbnkgYnVpbHQtaW4gc3Vi c3lzdGVtcyB5ZXQuICBJbiB0aGUgZnV0dXJlLCBtb3N0IG9mCi0JICogdGhlIGNhbGxzICpT aG1lbUluaXQoKSBjYWxscyBpbiBDcmVhdGVPckF0dGFjaFNobWVtU3RydWN0cygpLCBhbmQK LQkgKiAqU2htZW1TaXplKCkgY2FsbHMgaW4gQ2FsY3VsYXRlU2htZW1TaXplKCkgd2lsbCBi ZSByZXBsYWNlZCBieSBjYWxscwotCSAqIGludG8gdGhlIHN1YnN5c3RlbXMgZnJvbSBoZXJl LgorCSAqIFRPRE86IEluIHRoZSBmdXR1cmUsIGFsbCB0aGUgY2FsbHMgKlNobWVtSW5pdCgp IGNhbGxzIGluCisJICogQ3JlYXRlT3JBdHRhY2hTaG1lbVN0cnVjdHMoKSwgYW5kIGFsbCB0 aGUgKlNobWVtU2l6ZSgpIGNhbGxzIGluCisJICogQ2FsY3VsYXRlU2htZW1TaXplKCkgd2ls bCBiZSByZXBsYWNlZCBieSBjYWxscyBpbnRvIHRoZSBzdWJzeXN0ZW1zIGZyb20KKwkgKiBo ZXJlLgorCSAqLworCisJLyoKKwkgKiBOb3RlOiB0aGVyZSBhcmUgc29tZSBpbnRlci1kZXBl bmRlbmNpZXMgYmV0d2VlbiB0aGVzZSwgc28gdGhlIG9yZGVyIG9mCisJICogc29tZSBvZiB0 aGVzZSBtYXR0ZXIuCiAJICovCisJRFNNUmVnaXN0cnlTaG1lbVJlZ2lzdGVyKCk7CisJUHJv Y0dsb2JhbFNobWVtUmVnaXN0ZXIoKTsKKwlWYXJzdXBTaG1lbVJlZ2lzdGVyKCk7CisJUHJv Y0FycmF5U2htZW1SZWdpc3RlcigpOworCVNoYXJlZEludmFsU2htZW1SZWdpc3RlcigpOwor CVBNU2lnbmFsU2htZW1SZWdpc3RlcigpOworCVByb2NTaWduYWxTaG1lbVJlZ2lzdGVyKCk7 CisKKwlXYWl0RXZlbnRDdXN0b21TaG1lbVJlZ2lzdGVyKCk7CiB9CiAKIC8qCkBAIC0yOTMs MTIgKzMwMSwxMCBAQCBDcmVhdGVPckF0dGFjaFNobWVtU3RydWN0cyh2b2lkKQogCX0KIAog CWRzbV9zaG1lbV9pbml0KCk7Ci0JRFNNUmVnaXN0cnlTaG1lbUluaXQoKTsKIAogCS8qCiAJ ICogU2V0IHVwIHhsb2csIGNsb2csIGFuZCBidWZmZXJzCiAJICovCi0JVmFyc3VwU2htZW1J bml0KCk7CiAJWExPR1NobWVtSW5pdCgpOwogCVhMb2dQcmVmZXRjaFNobWVtSW5pdCgpOwog CVhMb2dSZWNvdmVyeVNobWVtSW5pdCgpOwpAQCAtMzIxLDIzICszMjcsMTMgQEAgQ3JlYXRl T3JBdHRhY2hTaG1lbVN0cnVjdHModm9pZCkKIAkvKgogCSAqIFNldCB1cCBwcm9jZXNzIHRh YmxlCiAJICovCi0JaWYgKCFJc1VuZGVyUG9zdG1hc3RlcikKLQkJSW5pdFByb2NHbG9iYWwo KTsKLQlQcm9jQXJyYXlTaG1lbUluaXQoKTsKIAlCYWNrZW5kU3RhdHVzU2htZW1Jbml0KCk7 CiAJVHdvUGhhc2VTaG1lbUluaXQoKTsKIAlCYWNrZ3JvdW5kV29ya2VyU2htZW1Jbml0KCk7 CiAKLQkvKgotCSAqIFNldCB1cCBzaGFyZWQtaW52YWwgbWVzc2FnaW5nCi0JICovCi0JU2hh cmVkSW52YWxTaG1lbUluaXQoKTsKLQogCS8qCiAJICogU2V0IHVwIGludGVycHJvY2VzcyBz aWduYWxpbmcgbWVjaGFuaXNtcwogCSAqLwotCVBNU2lnbmFsU2htZW1Jbml0KCk7Ci0JUHJv Y1NpZ25hbFNobWVtSW5pdCgpOwogCUNoZWNrcG9pbnRlclNobWVtSW5pdCgpOwogCUF1dG9W YWN1dW1TaG1lbUluaXQoKTsKIAlSZXBsaWNhdGlvblNsb3RzU2htZW1Jbml0KCk7CkBAIC0z NTYsNyArMzUyLDYgQEAgQ3JlYXRlT3JBdHRhY2hTaG1lbVN0cnVjdHModm9pZCkKIAlTeW5j U2NhblNobWVtSW5pdCgpOwogCUFzeW5jU2htZW1Jbml0KCk7CiAJU3RhdHNTaG1lbUluaXQo KTsKLQlXYWl0RXZlbnRDdXN0b21TaG1lbUluaXQoKTsKIAlJbmplY3Rpb25Qb2ludFNobWVt SW5pdCgpOwogCUFpb1NobWVtSW5pdCgpOwogCVdhaXRMU05TaG1lbUluaXQoKTsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Btc2lnbmFsLmMgYi9zcmMvYmFja2Vu ZC9zdG9yYWdlL2lwYy9wbXNpZ25hbC5jCmluZGV4IDQ2MTg4MjBiMzM3Li5kNzQ2M2RmNzNh YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcG1zaWduYWwuYworKysg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wbXNpZ25hbC5jCkBAIC04Myw2ICs4MywxNSBA QCBzdHJ1Y3QgUE1TaWduYWxEYXRhCiAvKiBQTVNpZ25hbFN0YXRlIHBvaW50ZXIgaXMgdmFs aWQgaW4gYm90aCBwb3N0bWFzdGVyIGFuZCBjaGlsZCBwcm9jZXNzZXMgKi8KIE5PTl9FWEVD X1NUQVRJQyB2b2xhdGlsZSBQTVNpZ25hbERhdGEgKlBNU2lnbmFsU3RhdGUgPSBOVUxMOwog CitzdGF0aWMgdm9pZCBQTVNpZ25hbFNobWVtSW5pdCh2b2lkICopOworCitzdGF0aWMgU2ht ZW1TdHJ1Y3REZXNjIFBNU2lnbmFsU2htZW1EZXNjID0geworCS5uYW1lID0gIlBNU2lnbmFs U3RhdGUiLAorCS5zaXplID0gMCwJCQkJCS8qIGNhbGN1bGF0ZWQgbGF0ZXIgKi8KKwkuaW5p dF9mbiA9IFBNU2lnbmFsU2htZW1Jbml0LAorCS5wdHIgPSAodm9pZCAqKikgJlBNU2lnbmFs U3RhdGUsCit9OworCiAvKgogICogTG9jYWwgY29weSBvZiBQTVNpZ25hbFN0YXRlLT5udW1f Y2hpbGRfZmxhZ3MsIG9ubHkgdmFsaWQgaW4gdGhlCiAgKiBwb3N0bWFzdGVyLiAgUG9zdG1h c3RlciBrZWVwcyBhIGxvY2FsIGNvcHkgc28gdGhhdCBpdCBkb2Vzbid0IG5lZWQgdG8KQEAg LTEyMywzOSArMTMyLDI5IEBAIHBvc3RtYXN0ZXJfZGVhdGhfaGFuZGxlcihTSUdOQUxfQVJH UykKIHN0YXRpYyB2b2lkIE1hcmtQb3N0bWFzdGVyQ2hpbGRJbmFjdGl2ZShpbnQgY29kZSwg RGF0dW0gYXJnKTsKIAogLyoKLSAqIFBNU2lnbmFsU2htZW1TaXplCi0gKgkJQ29tcHV0ZSBz cGFjZSBuZWVkZWQgZm9yIHBtc2lnbmFsLmMncyBzaGFyZWQgbWVtb3J5CisgKiBQTVNpZ25h bFNobWVtUmVnaXN0ZXIgLSBSZWdpc3RlciBwbXNpZ25hbC5jJ3Mgc2hhcmVkIG1lbW9yeSBu ZWVkcwogICovCi1TaXplCi1QTVNpZ25hbFNobWVtU2l6ZSh2b2lkKQordm9pZAorUE1TaWdu YWxTaG1lbVJlZ2lzdGVyKHZvaWQpCiB7CiAJU2l6ZQkJc2l6ZTsKIAotCXNpemUgPSBvZmZz ZXRvZihQTVNpZ25hbERhdGEsIFBNQ2hpbGRGbGFncyk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNp emUsIG11bF9zaXplKE1heExpdmVQb3N0bWFzdGVyQ2hpbGRyZW4oKSwKLQkJCQkJCQkJICAg c2l6ZW9mKHNpZ19hdG9taWNfdCkpKTsKKwludW1fY2hpbGRfZmxhZ3MgPSBNYXhMaXZlUG9z dG1hc3RlckNoaWxkcmVuKCk7CiAKLQlyZXR1cm4gc2l6ZTsKKwlzaXplID0gb2Zmc2V0b2Yo UE1TaWduYWxEYXRhLCBQTUNoaWxkRmxhZ3MpOworCXNpemUgPSBhZGRfc2l6ZShzaXplLCBt dWxfc2l6ZShudW1fY2hpbGRfZmxhZ3MsIHNpemVvZihzaWdfYXRvbWljX3QpKSk7CisJUE1T aWduYWxTaG1lbURlc2Muc2l6ZSA9IHNpemU7CisJU2htZW1SZWdpc3RlclN0cnVjdCgmUE1T aWduYWxTaG1lbURlc2MpOwogfQogCi0vKgotICogUE1TaWduYWxTaG1lbUluaXQgLSBpbml0 aWFsaXplIGR1cmluZyBzaGFyZWQtbWVtb3J5IGNyZWF0aW9uCi0gKi8KLXZvaWQKLVBNU2ln bmFsU2htZW1Jbml0KHZvaWQpCitzdGF0aWMgdm9pZAorUE1TaWduYWxTaG1lbUluaXQodm9p ZCAqYXJnKQogewotCWJvb2wJCWZvdW5kOwotCi0JUE1TaWduYWxTdGF0ZSA9IChQTVNpZ25h bERhdGEgKikKLQkJU2htZW1Jbml0U3RydWN0KCJQTVNpZ25hbFN0YXRlIiwgUE1TaWduYWxT aG1lbVNpemUoKSwgJmZvdW5kKTsKLQotCWlmICghZm91bmQpCi0JewotCQkvKiBpbml0aWFs aXplIGFsbCBmbGFncyB0byB6ZXJvZXMgKi8KLQkJTWVtU2V0KHVudm9sYXRpemUoUE1TaWdu YWxEYXRhICosIFBNU2lnbmFsU3RhdGUpLCAwLCBQTVNpZ25hbFNobWVtU2l6ZSgpKTsKLQkJ bnVtX2NoaWxkX2ZsYWdzID0gTWF4TGl2ZVBvc3RtYXN0ZXJDaGlsZHJlbigpOwotCQlQTVNp Z25hbFN0YXRlLT5udW1fY2hpbGRfZmxhZ3MgPSBudW1fY2hpbGRfZmxhZ3M7Ci0JfQorCS8q IGluaXRpYWxpemUgYWxsIGZsYWdzIHRvIHplcm9lcyAqLworCUFzc2VydChQTVNpZ25hbFN0 YXRlKTsKKwlNZW1TZXQodW52b2xhdGl6ZShQTVNpZ25hbERhdGEgKiwgUE1TaWduYWxTdGF0 ZSksIDAsIFBNU2lnbmFsU2htZW1EZXNjLnNpemUpOworCUFzc2VydChudW1fY2hpbGRfZmxh Z3MgPiAwKTsKKwlQTVNpZ25hbFN0YXRlLT5udW1fY2hpbGRfZmxhZ3MgPSBudW1fY2hpbGRf ZmxhZ3M7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9w cm9jYXJyYXkuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5jCmluZGV4 IDBmOTEzODk3YWNjLi41ZGFmMzNkNTMyMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9pcGMvcHJvY2FycmF5LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJv Y2FycmF5LmMKQEAgLTEwMyw2ICsxMDMsMTkgQEAgdHlwZWRlZiBzdHJ1Y3QgUHJvY0FycmF5 U3RydWN0CiAJaW50CQkJcGdwcm9jbm9zW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07CiB9IFBy b2NBcnJheVN0cnVjdDsKIAorc3RhdGljIHZvaWQgUHJvY0FycmF5U2htZW1Jbml0KHZvaWQg KmFyZyk7CitzdGF0aWMgdm9pZCBQcm9jQXJyYXlTaG1lbUF0dGFjaCh2b2lkICphcmcpOwor CitzdGF0aWMgUHJvY0FycmF5U3RydWN0ICpwcm9jQXJyYXk7CisKK3N0YXRpYyBTaG1lbVN0 cnVjdERlc2MgUHJvY0FycmF5U2htZW1EZXNjID0geworCS5uYW1lID0gIlByb2MgQXJyYXki LAorCS5zaXplID0gMCwJCQkJCS8qIGNhbGN1bGF0ZWQgbGF0ZXIgKi8KKwkuaW5pdF9mbiA9 IFByb2NBcnJheVNobWVtSW5pdCwKKwkuYXR0YWNoX2ZuID0gUHJvY0FycmF5U2htZW1BdHRh Y2gsCisJLnB0ciA9ICh2b2lkICoqKSAmcHJvY0FycmF5LAorfTsKKwogLyoKICAqIFN0YXRl IGZvciB0aGUgR2xvYmFsVmlzVGVzdCogZmFtaWx5IG9mIGZ1bmN0aW9ucy4gVGhvc2UgZnVu Y3Rpb25zIGNhbgogICogZS5nLiBiZSB1c2VkIHRvIGRlY2lkZSBpZiBhIGRlbGV0ZWQgcm93 IGNhbiBiZSByZW1vdmVkIHdpdGhvdXQgdmlvbGF0aW5nCkBAIC0yNjksOSArMjgyLDYgQEAg dHlwZWRlZiBlbnVtIEtBWENvbXByZXNzUmVhc29uCiAJS0FYX1NUQVJUVVBfUFJPQ0VTU19J RExFLAkvKiBzdGFydHVwIHByb2Nlc3MgaXMgYWJvdXQgdG8gc2xlZXAgKi8KIH0gS0FYQ29t cHJlc3NSZWFzb247CiAKLQotc3RhdGljIFByb2NBcnJheVN0cnVjdCAqcHJvY0FycmF5Owot CiBzdGF0aWMgUEdQUk9DICphbGxQcm9jczsKIAogLyoKQEAgLTI4Miw4ICsyOTIsMjUgQEAg c3RhdGljIFRyYW5zYWN0aW9uSWQgY2FjaGVkWGlkSXNOb3RJblByb2dyZXNzID0gSW52YWxp ZFRyYW5zYWN0aW9uSWQ7CiAvKgogICogQm9va2tlZXBpbmcgZm9yIHRyYWNraW5nIGVtdWxh dGVkIHRyYW5zYWN0aW9ucyBpbiByZWNvdmVyeQogICovCisKIHN0YXRpYyBUcmFuc2FjdGlv bklkICpLbm93bkFzc2lnbmVkWGlkczsKKworc3RhdGljIFNobWVtU3RydWN0RGVzYyBLbm93 bkFzc2lnbmVkWGlkc1NobWVtRGVzYyA9IHsKKwkubmFtZSA9ICJLbm93bkFzc2lnbmVkWGlk cyIsCisJLnNpemUgPSAwLAkJCQkJLyogY2FsY3VsYXRlZCBsYXRlciAqLworCS5pbml0X2Zu ID0gTlVMTCwJCQkvKiBubyBpbml0aWFsaXphdGlvbiBuZWVkZWQgKi8KKwkucHRyID0gKHZv aWQgKiopICZLbm93bkFzc2lnbmVkWGlkcywKK307CisKIHN0YXRpYyBib29sICpLbm93bkFz c2lnbmVkWGlkc1ZhbGlkOworCitzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIEtub3duQXNzaWdu ZWRYaWRzVmFsaWRTaG1lbURlc2MgPSB7CisJLm5hbWUgPSAiS25vd25Bc3NpZ25lZFhpZHNW YWxpZCIsCisJLnNpemUgPSAwLAkJCQkJLyogY2FsY3VsYXRlZCBsYXRlciAqLworCS5pbml0 X2ZuID0gTlVMTCwJCQkvKiBubyBpbml0aWFsaXphdGlvbiBuZWVkZWQgKi8KKwkucHRyID0g KHZvaWQgKiopICZLbm93bkFzc2lnbmVkWGlkc1ZhbGlkLAorfTsKKwogc3RhdGljIFRyYW5z YWN0aW9uSWQgbGF0ZXN0T2JzZXJ2ZWRYaWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKIAog LyoKQEAgLTM3NCwxOCArNDAxLDE4IEBAIHN0YXRpYyBpbmxpbmUgRnVsbFRyYW5zYWN0aW9u SWQgRnVsbFhpZFJlbGF0aXZlVG8oRnVsbFRyYW5zYWN0aW9uSWQgcmVsLAogc3RhdGljIHZv aWQgR2xvYmFsVmlzVXBkYXRlQXBwbHkoQ29tcHV0ZVhpZEhvcml6b25zUmVzdWx0ICpob3Jp em9ucyk7CiAKIC8qCi0gKiBSZXBvcnQgc2hhcmVkLW1lbW9yeSBzcGFjZSBuZWVkZWQgYnkg UHJvY0FycmF5U2htZW1Jbml0CisgKiBSZWdpc3RlciB0aGUgc2hhcmVkIFBHUFJPQyBhcnJh eSBkdXJpbmcgcG9zdG1hc3RlciBzdGFydHVwLgogICovCi1TaXplCi1Qcm9jQXJyYXlTaG1l bVNpemUodm9pZCkKK3ZvaWQKK1Byb2NBcnJheVNobWVtUmVnaXN0ZXIodm9pZCkKIHsKLQlT aXplCQlzaXplOwotCi0JLyogU2l6ZSBvZiB0aGUgUHJvY0FycmF5IHN0cnVjdHVyZSBpdHNl bGYgKi8KICNkZWZpbmUgUFJPQ0FSUkFZX01BWFBST0NTCShNYXhCYWNrZW5kcyArIG1heF9w cmVwYXJlZF94YWN0cykKIAotCXNpemUgPSBvZmZzZXRvZihQcm9jQXJyYXlTdHJ1Y3QsIHBn cHJvY25vcyk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKHNpemVvZihpbnQp LCBQUk9DQVJSQVlfTUFYUFJPQ1MpKTsKKwkvKiBSZWdpc3RlciB0aGUgUHJvY0FycmF5IHNo YXJlZCBzdHJ1Y3R1cmUgKi8KKwlQcm9jQXJyYXlTaG1lbURlc2Muc2l6ZSA9CisJCWFkZF9z aXplKG9mZnNldG9mKFByb2NBcnJheVN0cnVjdCwgcGdwcm9jbm9zKSwKKwkJCQkgbXVsX3Np emUoc2l6ZW9mKGludCksIFBST0NBUlJBWV9NQVhQUk9DUykpOworCVNobWVtUmVnaXN0ZXJT dHJ1Y3QoJlByb2NBcnJheVNobWVtRGVzYyk7CiAKIAkvKgogCSAqIER1cmluZyBIb3QgU3Rh bmRieSBwcm9jZXNzaW5nIHdlIGhhdmUgYSBkYXRhIHN0cnVjdHVyZSBjYWxsZWQKQEAgLTQw NSw2NCArNDMyLDQxIEBAIFByb2NBcnJheVNobWVtU2l6ZSh2b2lkKQogCiAJaWYgKEVuYWJs ZUhvdFN0YW5kYnkpCiAJewotCQlzaXplID0gYWRkX3NpemUoc2l6ZSwKLQkJCQkJCW11bF9z aXplKHNpemVvZihUcmFuc2FjdGlvbklkKSwKLQkJCQkJCQkJIFRPVEFMX01BWF9DQUNIRURf U1VCWElEUykpOwotCQlzaXplID0gYWRkX3NpemUoc2l6ZSwKLQkJCQkJCW11bF9zaXplKHNp emVvZihib29sKSwgVE9UQUxfTUFYX0NBQ0hFRF9TVUJYSURTKSk7CisJCUtub3duQXNzaWdu ZWRYaWRzU2htZW1EZXNjLnNpemUgPQorCQkJbXVsX3NpemUoc2l6ZW9mKFRyYW5zYWN0aW9u SWQpLAorCQkJCQkgVE9UQUxfTUFYX0NBQ0hFRF9TVUJYSURTKTsKKwkJU2htZW1SZWdpc3Rl clN0cnVjdCgmS25vd25Bc3NpZ25lZFhpZHNTaG1lbURlc2MpOworCisJCUtub3duQXNzaWdu ZWRYaWRzVmFsaWRTaG1lbURlc2Muc2l6ZSA9CisJCQltdWxfc2l6ZShzaXplb2YoYm9vbCks IFRPVEFMX01BWF9DQUNIRURfU1VCWElEUyk7CisJCVNobWVtUmVnaXN0ZXJTdHJ1Y3QoJktu b3duQXNzaWduZWRYaWRzVmFsaWRTaG1lbURlc2MpOwogCX0KLQotCXJldHVybiBzaXplOwog fQogCiAvKgogICogSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIFBHUFJPQyBhcnJheSBkdXJpbmcg cG9zdG1hc3RlciBzdGFydHVwLgogICovCi12b2lkCi1Qcm9jQXJyYXlTaG1lbUluaXQodm9p ZCkKK3N0YXRpYyB2b2lkCitQcm9jQXJyYXlTaG1lbUluaXQodm9pZCAqYXJnKQogewotCWJv b2wJCWZvdW5kOwotCi0JLyogQ3JlYXRlIG9yIGF0dGFjaCB0byB0aGUgUHJvY0FycmF5IHNo YXJlZCBzdHJ1Y3R1cmUgKi8KLQlwcm9jQXJyYXkgPSAoUHJvY0FycmF5U3RydWN0ICopCi0J CVNobWVtSW5pdFN0cnVjdCgiUHJvYyBBcnJheSIsCi0JCQkJCQlhZGRfc2l6ZShvZmZzZXRv ZihQcm9jQXJyYXlTdHJ1Y3QsIHBncHJvY25vcyksCi0JCQkJCQkJCSBtdWxfc2l6ZShzaXpl b2YoaW50KSwKLQkJCQkJCQkJCQkgIFBST0NBUlJBWV9NQVhQUk9DUykpLAotCQkJCQkJJmZv dW5kKTsKLQotCWlmICghZm91bmQpCi0JewotCQkvKgotCQkgKiBXZSdyZSB0aGUgZmlyc3Qg LSBpbml0aWFsaXplLgotCQkgKi8KLQkJcHJvY0FycmF5LT5udW1Qcm9jcyA9IDA7Ci0JCXBy b2NBcnJheS0+bWF4UHJvY3MgPSBQUk9DQVJSQVlfTUFYUFJPQ1M7Ci0JCXByb2NBcnJheS0+ bWF4S25vd25Bc3NpZ25lZFhpZHMgPSBUT1RBTF9NQVhfQ0FDSEVEX1NVQlhJRFM7Ci0JCXBy b2NBcnJheS0+bnVtS25vd25Bc3NpZ25lZFhpZHMgPSAwOwotCQlwcm9jQXJyYXktPnRhaWxL bm93bkFzc2lnbmVkWGlkcyA9IDA7Ci0JCXByb2NBcnJheS0+aGVhZEtub3duQXNzaWduZWRY aWRzID0gMDsKLQkJcHJvY0FycmF5LT5sYXN0T3ZlcmZsb3dlZFhpZCA9IEludmFsaWRUcmFu c2FjdGlvbklkOwotCQlwcm9jQXJyYXktPnJlcGxpY2F0aW9uX3Nsb3RfeG1pbiA9IEludmFs aWRUcmFuc2FjdGlvbklkOwotCQlwcm9jQXJyYXktPnJlcGxpY2F0aW9uX3Nsb3RfY2F0YWxv Z194bWluID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7Ci0JCVRyYW5zYW1WYXJpYWJsZXMtPnhh Y3RDb21wbGV0aW9uQ291bnQgPSAxOwotCX0KKwlwcm9jQXJyYXktPm51bVByb2NzID0gMDsK Kwlwcm9jQXJyYXktPm1heFByb2NzID0gUFJPQ0FSUkFZX01BWFBST0NTOworCXByb2NBcnJh eS0+bWF4S25vd25Bc3NpZ25lZFhpZHMgPSBUT1RBTF9NQVhfQ0FDSEVEX1NVQlhJRFM7CisJ cHJvY0FycmF5LT5udW1Lbm93bkFzc2lnbmVkWGlkcyA9IDA7CisJcHJvY0FycmF5LT50YWls S25vd25Bc3NpZ25lZFhpZHMgPSAwOworCXByb2NBcnJheS0+aGVhZEtub3duQXNzaWduZWRY aWRzID0gMDsKKwlwcm9jQXJyYXktPmxhc3RPdmVyZmxvd2VkWGlkID0gSW52YWxpZFRyYW5z YWN0aW9uSWQ7CisJcHJvY0FycmF5LT5yZXBsaWNhdGlvbl9zbG90X3htaW4gPSBJbnZhbGlk VHJhbnNhY3Rpb25JZDsKKwlwcm9jQXJyYXktPnJlcGxpY2F0aW9uX3Nsb3RfY2F0YWxvZ194 bWluID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJVHJhbnNhbVZhcmlhYmxlcy0+eGFjdENv bXBsZXRpb25Db3VudCA9IDE7CiAKIAlhbGxQcm9jcyA9IFByb2NHbG9iYWwtPmFsbFByb2Nz OworfQogCi0JLyogQ3JlYXRlIG9yIGF0dGFjaCB0byB0aGUgS25vd25Bc3NpZ25lZFhpZHMg YXJyYXlzIHRvbywgaWYgbmVlZGVkICovCi0JaWYgKEVuYWJsZUhvdFN0YW5kYnkpCi0Jewot CQlLbm93bkFzc2lnbmVkWGlkcyA9IChUcmFuc2FjdGlvbklkICopCi0JCQlTaG1lbUluaXRT dHJ1Y3QoIktub3duQXNzaWduZWRYaWRzIiwKLQkJCQkJCQltdWxfc2l6ZShzaXplb2YoVHJh bnNhY3Rpb25JZCksCi0JCQkJCQkJCQkgVE9UQUxfTUFYX0NBQ0hFRF9TVUJYSURTKSwKLQkJ CQkJCQkmZm91bmQpOwotCQlLbm93bkFzc2lnbmVkWGlkc1ZhbGlkID0gKGJvb2wgKikKLQkJ CVNobWVtSW5pdFN0cnVjdCgiS25vd25Bc3NpZ25lZFhpZHNWYWxpZCIsCi0JCQkJCQkJbXVs X3NpemUoc2l6ZW9mKGJvb2wpLCBUT1RBTF9NQVhfQ0FDSEVEX1NVQlhJRFMpLAotCQkJCQkJ CSZmb3VuZCk7Ci0JfQorc3RhdGljIHZvaWQKK1Byb2NBcnJheVNobWVtQXR0YWNoKHZvaWQg KmFyZykKK3sKKwlhbGxQcm9jcyA9IFByb2NHbG9iYWwtPmFsbFByb2NzOwogfQogCiAvKgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jIGIvc3Jj L2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jCmluZGV4IDdlMDE3YzhkNTNiLi5h MGM5NGRkZDc3YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3Np Z25hbC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYwpAQCAt MTA1LDcgKzEwNSwxOCBAQCBzdHJ1Y3QgUHJvY1NpZ25hbEhlYWRlcgogI2RlZmluZSBCQVJS SUVSX0NMRUFSX0JJVChmbGFncywgdHlwZSkgXAogCSgoZmxhZ3MpICY9IH4oKCh1aW50MzIp IDEpIDw8ICh1aW50MzIpICh0eXBlKSkpCiAKK3N0YXRpYyB2b2lkIFByb2NTaWduYWxTaG1l bUluaXQodm9pZCAqYXJnKTsKKwogTk9OX0VYRUNfU1RBVElDIFByb2NTaWduYWxIZWFkZXIg KlByb2NTaWduYWwgPSBOVUxMOworCitzdGF0aWMgU2htZW1TdHJ1Y3REZXNjIFByb2NTaWdu YWxTaG1lbURlc2MgPSB7CisJLm5hbWUgPSAiUHJvY1NpZ25hbCIsCisJLnNpemUgPSAwLAkJ CQkJLyogY2FsY3VsYXRlZCBsYXRlciAqLworCS5pbml0X2ZuID0gUHJvY1NpZ25hbFNobWVt SW5pdCwKKwkucHRyID0gKHZvaWQgKiopICZQcm9jU2lnbmFsLAorfTsKKworCiBzdGF0aWMg UHJvY1NpZ25hbFNsb3QgKk15UHJvY1NpZ25hbFNsb3QgPSBOVUxMOwogCiBzdGF0aWMgYm9v bCBDaGVja1Byb2NTaWduYWwoUHJvY1NpZ25hbFJlYXNvbiByZWFzb24pOwpAQCAtMTEzLDUx ICsxMjQsMzcgQEAgc3RhdGljIHZvaWQgQ2xlYW51cFByb2NTaWduYWxTdGF0ZShpbnQgc3Rh dHVzLCBEYXR1bSBhcmcpOwogc3RhdGljIHZvaWQgUmVzZXRQcm9jU2lnbmFsQmFycmllckJp dHModWludDMyIGZsYWdzKTsKIAogLyoKLSAqIFByb2NTaWduYWxTaG1lbVNpemUKLSAqCQlD b21wdXRlIHNwYWNlIG5lZWRlZCBmb3IgUHJvY1NpZ25hbCdzIHNoYXJlZCBtZW1vcnkKKyAq IFByb2NTaWduYWxTaG1lbVJlZ2lzdGVyCisgKgkJUmVnaXN0ZXIgUHJvY1NpZ25hbCdzIHNo YXJlZCBtZW1vcnkgbmVlZHMgYXQgcG9zdG1hc3RlciBzdGFydHVwCiAgKi8KLVNpemUKLVBy b2NTaWduYWxTaG1lbVNpemUodm9pZCkKK3ZvaWQKK1Byb2NTaWduYWxTaG1lbVJlZ2lzdGVy KHZvaWQpCiB7CiAJU2l6ZQkJc2l6ZTsKIAogCXNpemUgPSBtdWxfc2l6ZShOdW1Qcm9jU2ln bmFsU2xvdHMsIHNpemVvZihQcm9jU2lnbmFsU2xvdCkpOwogCXNpemUgPSBhZGRfc2l6ZShz aXplLCBvZmZzZXRvZihQcm9jU2lnbmFsSGVhZGVyLCBwc2hfc2xvdCkpOwotCXJldHVybiBz aXplOworCisJUHJvY1NpZ25hbFNobWVtRGVzYy5zaXplID0gc2l6ZTsKKwlTaG1lbVJlZ2lz dGVyU3RydWN0KCZQcm9jU2lnbmFsU2htZW1EZXNjKTsKIH0KIAotLyoKLSAqIFByb2NTaWdu YWxTaG1lbUluaXQKLSAqCQlBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBQcm9jU2lnbmFsJ3Mg c2hhcmVkIG1lbW9yeQotICovCi12b2lkCi1Qcm9jU2lnbmFsU2htZW1Jbml0KHZvaWQpCitz dGF0aWMgdm9pZAorUHJvY1NpZ25hbFNobWVtSW5pdCh2b2lkICphcmcpCiB7Ci0JU2l6ZQkJ c2l6ZSA9IFByb2NTaWduYWxTaG1lbVNpemUoKTsKLQlib29sCQlmb3VuZDsKKwlwZ19hdG9t aWNfaW5pdF91NjQoJlByb2NTaWduYWwtPnBzaF9iYXJyaWVyR2VuZXJhdGlvbiwgMCk7CiAK LQlQcm9jU2lnbmFsID0gKFByb2NTaWduYWxIZWFkZXIgKikKLQkJU2htZW1Jbml0U3RydWN0 KCJQcm9jU2lnbmFsIiwgc2l6ZSwgJmZvdW5kKTsKLQotCS8qIElmIHdlJ3JlIGZpcnN0LCBp bml0aWFsaXplLiAqLwotCWlmICghZm91bmQpCisJZm9yIChpbnQgaSA9IDA7IGkgPCBOdW1Q cm9jU2lnbmFsU2xvdHM7ICsraSkKIAl7Ci0JCWludAkJCWk7Ci0KLQkJcGdfYXRvbWljX2lu aXRfdTY0KCZQcm9jU2lnbmFsLT5wc2hfYmFycmllckdlbmVyYXRpb24sIDApOworCQlQcm9j U2lnbmFsU2xvdCAqc2xvdCA9ICZQcm9jU2lnbmFsLT5wc2hfc2xvdFtpXTsKIAotCQlmb3Ig KGkgPSAwOyBpIDwgTnVtUHJvY1NpZ25hbFNsb3RzOyArK2kpCi0JCXsKLQkJCVByb2NTaWdu YWxTbG90ICpzbG90ID0gJlByb2NTaWduYWwtPnBzaF9zbG90W2ldOwotCi0JCQlTcGluTG9j a0luaXQoJnNsb3QtPnBzc19tdXRleCk7Ci0JCQlwZ19hdG9taWNfaW5pdF91MzIoJnNsb3Qt PnBzc19waWQsIDApOwotCQkJc2xvdC0+cHNzX2NhbmNlbF9rZXlfbGVuID0gMDsKLQkJCU1l bVNldChzbG90LT5wc3Nfc2lnbmFsRmxhZ3MsIDAsIHNpemVvZihzbG90LT5wc3Nfc2lnbmFs RmxhZ3MpKTsKLQkJCXBnX2F0b21pY19pbml0X3U2NCgmc2xvdC0+cHNzX2JhcnJpZXJHZW5l cmF0aW9uLCBQR19VSU5UNjRfTUFYKTsKLQkJCXBnX2F0b21pY19pbml0X3UzMigmc2xvdC0+ cHNzX2JhcnJpZXJDaGVja01hc2ssIDApOwotCQkJQ29uZGl0aW9uVmFyaWFibGVJbml0KCZz bG90LT5wc3NfYmFycmllckNWKTsKLQkJfQorCQlTcGluTG9ja0luaXQoJnNsb3QtPnBzc19t dXRleCk7CisJCXBnX2F0b21pY19pbml0X3UzMigmc2xvdC0+cHNzX3BpZCwgMCk7CisJCXNs b3QtPnBzc19jYW5jZWxfa2V5X2xlbiA9IDA7CisJCU1lbVNldChzbG90LT5wc3Nfc2lnbmFs RmxhZ3MsIDAsIHNpemVvZihzbG90LT5wc3Nfc2lnbmFsRmxhZ3MpKTsKKwkJcGdfYXRvbWlj X2luaXRfdTY0KCZzbG90LT5wc3NfYmFycmllckdlbmVyYXRpb24sIFBHX1VJTlQ2NF9NQVgp OworCQlwZ19hdG9taWNfaW5pdF91MzIoJnNsb3QtPnBzc19iYXJyaWVyQ2hlY2tNYXNrLCAw KTsKKwkJQ29uZGl0aW9uVmFyaWFibGVJbml0KCZzbG90LT5wc3NfYmFycmllckNWKTsKIAl9 CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NpbnZhbGFkdC5j IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2ludmFsYWR0LmMKaW5kZXggYTdhN2NjNGYw YTkuLmI5ZGYzYjg0ZGU5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9z aW52YWxhZHQuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaW52YWxhZHQuYwpA QCAtMjAzLDggKzIwMywxNyBAQCB0eXBlZGVmIHN0cnVjdCBTSVNlZwogICovCiAjZGVmaW5l IE51bVByb2NTdGF0ZVNsb3RzCShNYXhCYWNrZW5kcyArIE5VTV9BVVhJTElBUllfUFJPQ1Mp CiAKK3N0YXRpYyB2b2lkIFNoYXJlZEludmFsU2htZW1Jbml0KHZvaWQgKmFyZyk7CisKIHN0 YXRpYyBTSVNlZyAqc2htSW52YWxCdWZmZXI7CS8qIHBvaW50ZXIgdG8gdGhlIHNoYXJlZCBp bnZhbCBidWZmZXIgKi8KIAorc3RhdGljIFNobWVtU3RydWN0RGVzYyBTaGFyZWRJbnZhbFNo bWVtRGVzYyA9IHsKKwkubmFtZSA9ICJzaG1JbnZhbEJ1ZmZlciIsCisJLnNpemUgPSAwLAkJ CQkJLyogY2FsY3VsYXRlZCBsYXRlciAqLworCS5pbml0X2ZuID0gU2hhcmVkSW52YWxTaG1l bUluaXQsCisJLnB0ciA9ICh2b2lkICoqKSAmc2htSW52YWxCdWZmZXIsCit9OworCiAKIHN0 YXRpYyBMb2NhbFRyYW5zYWN0aW9uSWQgbmV4dExvY2FsVHJhbnNhY3Rpb25JZDsKIApAQCAt MjEyLDEwICsyMjEsMTEgQEAgc3RhdGljIHZvaWQgQ2xlYW51cEludmFsaWRhdGlvblN0YXRl KGludCBzdGF0dXMsIERhdHVtIGFyZyk7CiAKIAogLyoKLSAqIFNoYXJlZEludmFsU2htZW1T aXplIC0tLSByZXR1cm4gc2hhcmVkLW1lbW9yeSBzcGFjZSBuZWVkZWQKKyAqIFNoYXJlZElu dmFsU2htZW1SZWdpc3RlcgorICoJCVJlZ2lzdGVyIHNoYXJlZCBtZW1vcnkgbmVlZHMgZm9y IHRoZSBTSSBtZXNzYWdlIGJ1ZmZlcgogICovCi1TaXplCi1TaGFyZWRJbnZhbFNobWVtU2l6 ZSh2b2lkKQordm9pZAorU2hhcmVkSW52YWxTaG1lbVJlZ2lzdGVyKHZvaWQpCiB7CiAJU2l6 ZQkJc2l6ZTsKIApAQCAtMjIzLDI2ICsyMzMsMTYgQEAgU2hhcmVkSW52YWxTaG1lbVNpemUo dm9pZCkKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoc2l6ZW9mKFByb2NTdGF0 ZSksIE51bVByb2NTdGF0ZVNsb3RzKSk7CS8qIHByb2NTdGF0ZSAqLwogCXNpemUgPSBhZGRf c2l6ZShzaXplLCBtdWxfc2l6ZShzaXplb2YoaW50KSwgTnVtUHJvY1N0YXRlU2xvdHMpKTsJ LyogcGdwcm9jbm9zICovCiAKLQlyZXR1cm4gc2l6ZTsKKwlTaGFyZWRJbnZhbFNobWVtRGVz Yy5zaXplID0gc2l6ZTsKKwlTaG1lbVJlZ2lzdGVyU3RydWN0KCZTaGFyZWRJbnZhbFNobWVt RGVzYyk7CiB9CiAKLS8qCi0gKiBTaGFyZWRJbnZhbFNobWVtSW5pdAotICoJCUNyZWF0ZSBh bmQgaW5pdGlhbGl6ZSB0aGUgU0kgbWVzc2FnZSBidWZmZXIKLSAqLwotdm9pZAotU2hhcmVk SW52YWxTaG1lbUluaXQodm9pZCkKK3N0YXRpYyB2b2lkCitTaGFyZWRJbnZhbFNobWVtSW5p dCh2b2lkICphcmcpCiB7CiAJaW50CQkJaTsKLQlib29sCQlmb3VuZDsKLQotCS8qIEFsbG9j YXRlIHNwYWNlIGluIHNoYXJlZCBtZW1vcnkgKi8KLQlzaG1JbnZhbEJ1ZmZlciA9IChTSVNl ZyAqKQotCQlTaG1lbUluaXRTdHJ1Y3QoInNobUludmFsQnVmZmVyIiwgU2hhcmVkSW52YWxT aG1lbVNpemUoKSwgJmZvdW5kKTsKLQlpZiAoZm91bmQpCi0JCXJldHVybjsKIAotCS8qIENs ZWFyIG1lc3NhZ2UgY291bnRlcnMsIHNhdmUgc2l6ZSBvZiBwcm9jU3RhdGUgYXJyYXksIGlu aXQgc3BpbmxvY2sgKi8KKwkvKiBDbGVhciBtZXNzYWdlIGNvdW50ZXJzLCBpbml0IHNwaW5s b2NrICovCiAJc2htSW52YWxCdWZmZXItPm1pbk1zZ051bSA9IDA7CiAJc2htSW52YWxCdWZm ZXItPm1heE1zZ051bSA9IDA7CiAJc2htSW52YWxCdWZmZXItPm5leHRUaHJlc2hvbGQgPSBD TEVBTlVQX01JTjsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9j LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCmluZGV4IGQ0MDc3MjVlNjAy Li45NjFmY2IyYmM2NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3By b2MuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCkBAIC02OSw5ICs2 OSw0MSBAQCBQR1BST0MJICAgKk15UHJvYyA9IE5VTEw7CiAKIC8qIFBvaW50ZXJzIHRvIHNo YXJlZC1tZW1vcnkgc3RydWN0dXJlcyAqLwogUFJPQ19IRFIgICAqUHJvY0dsb2JhbCA9IE5V TEw7CitzdGF0aWMgdm9pZCAqdG1wQWxsUHJvY3M7CitzdGF0aWMgdm9pZCAqdG1wRmFzdFBh dGhMb2NrQXJyYXk7CiBOT05fRVhFQ19TVEFUSUMgUEdQUk9DICpBdXhpbGlhcnlQcm9jcyA9 IE5VTEw7CiBQR1BST0MJICAgKlByZXBhcmVkWGFjdFByb2NzID0gTlVMTDsKIAorc3RhdGlj IHZvaWQgUHJvY0dsb2JhbFNobWVtSW5pdCh2b2lkICphcmcpOworCitzdGF0aWMgU2htZW1T dHJ1Y3REZXNjIFByb2NHbG9iYWxTaG1lbURlc2MgPSB7CisJLm5hbWUgPSAiUHJvYyBIZWFk ZXIiLAorCS5zaXplID0gc2l6ZW9mKFBST0NfSERSKSwKKwkuaW5pdF9mbiA9IFByb2NHbG9i YWxTaG1lbUluaXQsCisKKwkvKgorCSAqIFByb2NHbG9iYWwgaXMgcmVnaXN0ZXJlZCBoZXJl IGluIC5wdHIgYXMgdXN1YWwsIGJ1dCBpdCBuZWVkcyB0byBiZQorCSAqIHByb3BhZ2F0ZWQg c3BlY2lhbGx5IGluIEVYRUNfQkFDS0VORCBtb2RlLCBiZWNhdXNlIFByb2NHbG9iYWwgbmVl ZHMgdG8KKwkgKiBiZSBhY2Nlc3NlZCBlYXJseSBhdCBiYWNrZW5kIHN0YXJ0dXAsIGJlZm9y ZSBTaG1lbUF0dGFjaFJlZ2lzdGVyZWQoKQorCSAqIGhhcyBiZWVuIGNhbGxlZC4KKwkgKi8K KwkucHRyID0gKHZvaWQgKiopICZQcm9jR2xvYmFsLAorfTsKKworc3RhdGljIFNobWVtU3Ry dWN0RGVzYyBQcm9jR2xvYmFsQWxsUHJvY3NTaG1lbURlc2MgPSB7CisJLm5hbWUgPSAiUEdQ Uk9DIHN0cnVjdHVyZXMiLAorCS5zaXplID0gMCwJCQkJCS8qIGNhbGN1bGF0ZWQgbGF0ZXIg Ki8KKwkucHRyID0gKHZvaWQgKiopICZ0bXBBbGxQcm9jcywKK307CisKK3N0YXRpYyBTaG1l bVN0cnVjdERlc2MgRmFzdFBhdGhMb2NrQXJyYXlTaG1lbURlc2MgPSB7CisJLm5hbWUgPSAi RmFzdC1QYXRoIExvY2sgQXJyYXkiLAorCS5zaXplID0gMCwJCQkJCS8qIGNhbGN1bGF0ZWQg bGF0ZXIgKi8KKwkucHRyID0gKHZvaWQgKiopICZ0bXBGYXN0UGF0aExvY2tBcnJheSwKK307 CisKK3N0YXRpYyB1aW50MzIgVG90YWxQcm9jczsKKwogLyogSXMgYSBkZWFkbG9jayBjaGVj ayBwZW5kaW5nPyAqLwogc3RhdGljIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBnb3RfZGVhZGxv Y2tfdGltZW91dDsKIApAQCAtODEsMjQgKzExMyw2IEBAIHN0YXRpYyB2b2lkIEF1eGlsaWFy eVByb2NLaWxsKGludCBjb2RlLCBEYXR1bSBhcmcpOwogc3RhdGljIERlYWRMb2NrU3RhdGUg Q2hlY2tEZWFkTG9jayh2b2lkKTsKIAogCi0vKgotICogUmVwb3J0IHNoYXJlZC1tZW1vcnkg c3BhY2UgbmVlZGVkIGJ5IFBHUFJPQy4KLSAqLwotc3RhdGljIFNpemUKLVBHUHJvY1NobWVt U2l6ZSh2b2lkKQotewotCVNpemUJCXNpemUgPSAwOwotCVNpemUJCVRvdGFsUHJvY3MgPQot CQlhZGRfc2l6ZShNYXhCYWNrZW5kcywgYWRkX3NpemUoTlVNX0FVWElMSUFSWV9QUk9DUywg bWF4X3ByZXBhcmVkX3hhY3RzKSk7Ci0KLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3Np emUoVG90YWxQcm9jcywgc2l6ZW9mKFBHUFJPQykpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6 ZSwgbXVsX3NpemUoVG90YWxQcm9jcywgc2l6ZW9mKCpQcm9jR2xvYmFsLT54aWRzKSkpOwot CXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShUb3RhbFByb2NzLCBzaXplb2YoKlBy b2NHbG9iYWwtPnN1YnhpZFN0YXRlcykpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVs X3NpemUoVG90YWxQcm9jcywgc2l6ZW9mKCpQcm9jR2xvYmFsLT5zdGF0dXNGbGFncykpKTsK LQotCXJldHVybiBzaXplOwotfQotCiAvKgogICogUmVwb3J0IHNoYXJlZC1tZW1vcnkgc3Bh Y2UgbmVlZGVkIGJ5IEZhc3QtUGF0aCBsb2Nrcy4KICAqLwpAQCAtMTA2LDggKzEyMCw2IEBA IHN0YXRpYyBTaXplCiBGYXN0UGF0aExvY2tTaG1lbVNpemUodm9pZCkKIHsKIAlTaXplCQlz aXplID0gMDsKLQlTaXplCQlUb3RhbFByb2NzID0KLQkJYWRkX3NpemUoTWF4QmFja2VuZHMs IGFkZF9zaXplKE5VTV9BVVhJTElBUllfUFJPQ1MsIG1heF9wcmVwYXJlZF94YWN0cykpOwog CVNpemUJCWZwTG9ja0JpdHNTaXplLAogCQkJCWZwUmVsSWRTaXplOwogCkBAIC0xMjMsMjUg KzEzNSw2IEBAIEZhc3RQYXRoTG9ja1NobWVtU2l6ZSh2b2lkKQogCXJldHVybiBzaXplOwog fQogCi0vKgotICogUmVwb3J0IHNoYXJlZC1tZW1vcnkgc3BhY2UgbmVlZGVkIGJ5IEluaXRQ cm9jR2xvYmFsLgotICovCi1TaXplCi1Qcm9jR2xvYmFsU2htZW1TaXplKHZvaWQpCi17Ci0J U2l6ZQkJc2l6ZSA9IDA7Ci0KLQkvKiBQcm9jR2xvYmFsICovCi0Jc2l6ZSA9IGFkZF9zaXpl KHNpemUsIHNpemVvZihQUk9DX0hEUikpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBzaXpl b2Yoc2xvY2tfdCkpOwotCi0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIFBHU2VtYXBob3JlU2ht ZW1TaXplKFByb2NHbG9iYWxTZW1hcygpKSk7Ci0Jc2l6ZSA9IGFkZF9zaXplKHNpemUsIFBH UHJvY1NobWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgRmFzdFBhdGhMb2Nr U2htZW1TaXplKCkpOwotCi0JcmV0dXJuIHNpemU7Ci19Ci0KIC8qCiAgKiBSZXBvcnQgbnVt YmVyIG9mIHNlbWFwaG9yZXMgbmVlZGVkIGJ5IEluaXRQcm9jR2xvYmFsLgogICovCkBAIC0x NTYsNyArMTQ5LDUwIEBAIFByb2NHbG9iYWxTZW1hcyh2b2lkKQogfQogCiAvKgotICogSW5p dFByb2NHbG9iYWwgLQorICogUHJvY0dsb2JhbFNobWVtUmVnaXN0ZXIgLQorICoJICBSZWdp c3RlciBzaGFyZWQgbWVtb3J5IG5lZWRzLgorICoKKyAqIFRoaXMgaXMgY2FsbGVkIGR1cmlu ZyBwb3N0bWFzdGVyIG9yIHN0YW5kYWxvbmUgYmFja2VuZCBzdGFydHVwLCBhbmQgYWxzbwor ICogZHVyaW5nIGJhY2tlbmQgc3RhcnR1cCBpbiBFWEVDX0JBQ0tFTkQgbW9kZS4KKyAqLwor dm9pZAorUHJvY0dsb2JhbFNobWVtUmVnaXN0ZXIodm9pZCkKK3sKKwlTaXplCQlzaXplID0g MDsKKworCS8qCisJICogUmVzZXJ2ZSBhbGwgdGhlIFBHUFJPQyBzdHJ1Y3R1cmVzIHdlJ2xs IG5lZWQuICBUaGVyZSBhcmUgc2l4IHNlcGFyYXRlCisJICogY29uc3VtZXJzOiAoMSkgbm9y bWFsIGJhY2tlbmRzLCAoMikgYXV0b3ZhY3V1bSB3b3JrZXJzIGFuZCBzcGVjaWFsCisJICog d29ya2VycywgKDMpIGJhY2tncm91bmQgd29ya2VycywgKDQpIHdhbHNlbmRlcnMsICg1KSBh dXhpbGlhcnkKKwkgKiBwcm9jZXNzZXMsIGFuZCAoNikgcHJlcGFyZWQgdHJhbnNhY3Rpb25z LiAgKEZvciBsYXJnZWx5LWhpc3RvcmljYWwKKwkgKiByZWFzb25zLCB3ZSBjb21iaW5lIGF1 dG92YWN1dW0gYW5kIHNwZWNpYWwgd29ya2VycyBpbnRvIG9uZSBjYXRlZ29yeQorCSAqIHdp dGggYSBzaW5nbGUgZnJlZWxpc3QuKSAgRWFjaCBQR1BST0Mgc3RydWN0dXJlIGlzIGRlZGlj YXRlZCB0byBleGFjdGx5CisJICogb25lIG9mIHRoZXNlIHB1cnBvc2VzLCBhbmQgdGhleSBk byBub3QgbW92ZSBiZXR3ZWVuIGdyb3Vwcy4KKwkgKi8KKwlUb3RhbFByb2NzID0KKwkJYWRk X3NpemUoTWF4QmFja2VuZHMsIGFkZF9zaXplKE5VTV9BVVhJTElBUllfUFJPQ1MsIG1heF9w cmVwYXJlZF94YWN0cykpOworCisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKFRv dGFsUHJvY3MsIHNpemVvZihQR1BST0MpKSk7CisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11 bF9zaXplKFRvdGFsUHJvY3MsIHNpemVvZigqUHJvY0dsb2JhbC0+eGlkcykpKTsKKwlzaXpl ID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoVG90YWxQcm9jcywgc2l6ZW9mKCpQcm9jR2xv YmFsLT5zdWJ4aWRTdGF0ZXMpKSk7CisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXpl KFRvdGFsUHJvY3MsIHNpemVvZigqUHJvY0dsb2JhbC0+c3RhdHVzRmxhZ3MpKSk7CisKKwlQ cm9jR2xvYmFsQWxsUHJvY3NTaG1lbURlc2Muc2l6ZSA9IHNpemU7CisJU2htZW1SZWdpc3Rl clN0cnVjdCgmUHJvY0dsb2JhbEFsbFByb2NzU2htZW1EZXNjKTsKKworCUZhc3RQYXRoTG9j a0FycmF5U2htZW1EZXNjLnNpemUgPSBGYXN0UGF0aExvY2tTaG1lbVNpemUoKTsKKwlTaG1l bVJlZ2lzdGVyU3RydWN0KCZGYXN0UGF0aExvY2tBcnJheVNobWVtRGVzYyk7CisKKwkvKgor CSAqIFJlZ2lzdGVyIHRoZSBQcm9jR2xvYmFsIHNoYXJlZCBzdHJ1Y3R1cmUgbGFzdC4gIEl0 cyBpbml0IGNhbGxiYWNrCisJICogaW5pdGlhbGl6ZXMgdGhlIG90aGVycyB0b28uCisJICov CisJU2htZW1SZWdpc3RlclN0cnVjdCgmUHJvY0dsb2JhbFNobWVtRGVzYyk7Cit9CisKKwor LyoKKyAqIFByb2NHbG9iYWxTaG1lbUluaXQgLQogICoJICBJbml0aWFsaXplIHRoZSBnbG9i YWwgcHJvY2VzcyB0YWJsZSBkdXJpbmcgcG9zdG1hc3RlciBvciBzdGFuZGFsb25lCiAgKgkg IGJhY2tlbmQgc3RhcnR1cC4KICAqCkBAIC0xNzUsMzYgKzIxMSwyMyBAQCBQcm9jR2xvYmFs U2VtYXModm9pZCkKICAqCSAgQW5vdGhlciByZWFzb24gZm9yIGNyZWF0aW5nIHNlbWFwaG9y ZXMgaGVyZSBpcyB0aGF0IHRoZSBzZW1hcGhvcmUKICAqCSAgaW1wbGVtZW50YXRpb24gdHlw aWNhbGx5IHJlcXVpcmVzIHVzIHRvIGNyZWF0ZSBzZW1hcGhvcmVzIGluIHRoZQogICoJICBw b3N0bWFzdGVyLCBub3QgaW4gYmFja2VuZHMuCi0gKgotICogTm90ZTogdGhpcyBpcyBOT1Qg Y2FsbGVkIGJ5IGluZGl2aWR1YWwgYmFja2VuZHMgdW5kZXIgYSBwb3N0bWFzdGVyLAotICog bm90IGV2ZW4gaW4gdGhlIEVYRUNfQkFDS0VORCBjYXNlLiAgVGhlIFByb2NHbG9iYWwgYW5k IEF1eGlsaWFyeVByb2NzCi0gKiBwb2ludGVycyBtdXN0IGJlIHByb3BhZ2F0ZWQgc3BlY2lh bGx5IGZvciBFWEVDX0JBQ0tFTkQgb3BlcmF0aW9uLgogICovCi12b2lkCi1Jbml0UHJvY0ds b2JhbCh2b2lkKQorc3RhdGljIHZvaWQKK1Byb2NHbG9iYWxTaG1lbUluaXQodm9pZCAqYXJn KQogeworCWNoYXIJICAgKnB0cjsKKwlzaXplX3QJCXJlcXVlc3RTaXplOwogCVBHUFJPQwkg ICAqcHJvY3M7CiAJaW50CQkJaSwKIAkJCQlqOwotCWJvb2wJCWZvdW5kOwotCXVpbnQzMgkJ VG90YWxQcm9jcyA9IE1heEJhY2tlbmRzICsgTlVNX0FVWElMSUFSWV9QUk9DUyArIG1heF9w cmVwYXJlZF94YWN0czsKIAogCS8qIFVzZWQgZm9yIHNldHVwIG9mIHBlci1iYWNrZW5kIGZh c3QtcGF0aCBzbG90cy4gKi8KIAljaGFyCSAgICpmcFB0ciwKIAkJCSAgICpmcEVuZFB0ciBQ R19VU0VEX0ZPUl9BU1NFUlRTX09OTFk7CiAJU2l6ZQkJZnBMb2NrQml0c1NpemUsCiAJCQkJ ZnBSZWxJZFNpemU7Ci0JU2l6ZQkJcmVxdWVzdFNpemU7Ci0JY2hhcgkgICAqcHRyOwotCi0J LyogQ3JlYXRlIHRoZSBQcm9jR2xvYmFsIHNoYXJlZCBzdHJ1Y3R1cmUgKi8KLQlQcm9jR2xv YmFsID0gKFBST0NfSERSICopCi0JCVNobWVtSW5pdFN0cnVjdCgiUHJvYyBIZWFkZXIiLCBz aXplb2YoUFJPQ19IRFIpLCAmZm91bmQpOwotCUFzc2VydCghZm91bmQpOwogCi0JLyoKLQkg KiBJbml0aWFsaXplIHRoZSBkYXRhIHN0cnVjdHVyZXMuCi0JICovCisJQXNzZXJ0KFByb2NH bG9iYWwpOwogCVByb2NHbG9iYWwtPnNwaW5zX3Blcl9kZWxheSA9IERFRkFVTFRfU1BJTlNf UEVSX0RFTEFZOwogCVNwaW5Mb2NrSW5pdCgmUHJvY0dsb2JhbC0+ZnJlZVByb2NzTG9jayk7 CiAJZGxpc3RfaW5pdCgmUHJvY0dsb2JhbC0+ZnJlZVByb2NzKTsKQEAgLTIxNywyMyArMjQw LDEyIEBAIEluaXRQcm9jR2xvYmFsKHZvaWQpCiAJcGdfYXRvbWljX2luaXRfdTMyKCZQcm9j R2xvYmFsLT5wcm9jQXJyYXlHcm91cEZpcnN0LCBJTlZBTElEX1BST0NfTlVNQkVSKTsKIAlw Z19hdG9taWNfaW5pdF91MzIoJlByb2NHbG9iYWwtPmNsb2dHcm91cEZpcnN0LCBJTlZBTElE X1BST0NfTlVNQkVSKTsKIAotCS8qCi0JICogQ3JlYXRlIGFuZCBpbml0aWFsaXplIGFsbCB0 aGUgUEdQUk9DIHN0cnVjdHVyZXMgd2UnbGwgbmVlZC4gIFRoZXJlIGFyZQotCSAqIHNpeCBz ZXBhcmF0ZSBjb25zdW1lcnM6ICgxKSBub3JtYWwgYmFja2VuZHMsICgyKSBhdXRvdmFjdXVt IHdvcmtlcnMgYW5kCi0JICogc3BlY2lhbCB3b3JrZXJzLCAoMykgYmFja2dyb3VuZCB3b3Jr ZXJzLCAoNCkgd2Fsc2VuZGVycywgKDUpIGF1eGlsaWFyeQotCSAqIHByb2Nlc3NlcywgYW5k ICg2KSBwcmVwYXJlZCB0cmFuc2FjdGlvbnMuICAoRm9yIGxhcmdlbHktaGlzdG9yaWNhbAot CSAqIHJlYXNvbnMsIHdlIGNvbWJpbmUgYXV0b3ZhY3V1bSBhbmQgc3BlY2lhbCB3b3JrZXJz IGludG8gb25lIGNhdGVnb3J5Ci0JICogd2l0aCBhIHNpbmdsZSBmcmVlbGlzdC4pICBFYWNo IFBHUFJPQyBzdHJ1Y3R1cmUgaXMgZGVkaWNhdGVkIHRvIGV4YWN0bHkKLQkgKiBvbmUgb2Yg dGhlc2UgcHVycG9zZXMsIGFuZCB0aGV5IGRvIG5vdCBtb3ZlIGJldHdlZW4gZ3JvdXBzLgot CSAqLwotCXJlcXVlc3RTaXplID0gUEdQcm9jU2htZW1TaXplKCk7Ci0KLQlwdHIgPSBTaG1l bUluaXRTdHJ1Y3QoIlBHUFJPQyBzdHJ1Y3R1cmVzIiwKLQkJCQkJCSAgcmVxdWVzdFNpemUs Ci0JCQkJCQkgICZmb3VuZCk7Ci0KKwlBc3NlcnQodG1wQWxsUHJvY3MpOworCXB0ciA9IHRt cEFsbFByb2NzOworCXJlcXVlc3RTaXplID0gUHJvY0dsb2JhbEFsbFByb2NzU2htZW1EZXNj LnNpemU7CiAJTWVtU2V0KHB0ciwgMCwgcmVxdWVzdFNpemUpOwogCisJLyogQ2FydmUgb3V0 IHRoZSBhbGxQcm9jcyBhcnJheSBmcm9tIHRoZSBzaGFyZWQgbWVtb3J5IGFyZWEgKi8KIAlw cm9jcyA9IChQR1BST0MgKikgcHRyOwogCXB0ciA9IHB0ciArIFRvdGFsUHJvY3MgKiBzaXpl b2YoUEdQUk9DKTsKIApAQCAtMjQyLDcgKzI1NCw3IEBAIEluaXRQcm9jR2xvYmFsKHZvaWQp CiAJUHJvY0dsb2JhbC0+YWxsUHJvY0NvdW50ID0gTWF4QmFja2VuZHMgKyBOVU1fQVVYSUxJ QVJZX1BST0NTOwogCiAJLyoKLQkgKiBBbGxvY2F0ZSBhcnJheXMgbWlycm9yaW5nIFBHUFJP QyBmaWVsZHMgaW4gYSBkZW5zZSBtYW5uZXIuIFNlZQorCSAqIENhcnZlIG91dCBhcnJheXMg bWlycm9yaW5nIFBHUFJPQyBmaWVsZHMgaW4gYSBkZW5zZSBtYW5uZXIuIFNlZQogCSAqIFBS T0NfSERSLgogCSAqCiAJICogWFhYOiBJdCBtaWdodCBtYWtlIHNlbnNlIHRvIGluY3JlYXNl IHBhZGRpbmcgZm9yIHRoZXNlIGFycmF5cywgZ2l2ZW4KQEAgLTI1NywzMSArMjY5LDI1IEBA IEluaXRQcm9jR2xvYmFsKHZvaWQpCiAJUHJvY0dsb2JhbC0+c3RhdHVzRmxhZ3MgPSAodWlu dDggKikgcHRyOwogCXB0ciA9IHB0ciArIChUb3RhbFByb2NzICogc2l6ZW9mKCpQcm9jR2xv YmFsLT5zdGF0dXNGbGFncykpOwogCi0JLyogbWFrZSBzdXJlIHdlciBkaWRuJ3Qgb3ZlcmZs b3cgKi8KKwkvKiBtYWtlIHN1cmUgd2UgZGlkbid0IG92ZXJmbG93ICovCiAJQXNzZXJ0KChw dHIgPiAoY2hhciAqKSBwcm9jcykgJiYgKHB0ciA8PSAoY2hhciAqKSBwcm9jcyArIHJlcXVl c3RTaXplKSk7CiAKIAkvKgotCSAqIEFsbG9jYXRlIGFycmF5cyBmb3IgZmFzdC1wYXRoIGxv Y2tzLiBUaG9zZSBhcmUgdmFyaWFibGUtbGVuZ3RoLCBzbworCSAqIEluaXRpYWxpemUgYXJy YXlzIGZvciBmYXN0LXBhdGggbG9ja3MuIFRob3NlIGFyZSB2YXJpYWJsZS1sZW5ndGgsIHNv CiAJICogY2FuJ3QgYmUgaW5jbHVkZWQgaW4gUEdQUk9DIGRpcmVjdGx5LiBXZSBhbGxvY2F0 ZSBhIHNlcGFyYXRlIHBpZWNlIG9mCiAJICogc2hhcmVkIG1lbW9yeSBhbmQgdGhlbiBkaXZp ZGUgdGhhdCBiZXR3ZWVuIGJhY2tlbmRzLgogCSAqLwogCWZwTG9ja0JpdHNTaXplID0gTUFY QUxJR04oRmFzdFBhdGhMb2NrR3JvdXBzUGVyQmFja2VuZCAqIHNpemVvZih1aW50NjQpKTsK IAlmcFJlbElkU2l6ZSA9IE1BWEFMSUdOKEZhc3RQYXRoTG9ja1Nsb3RzUGVyQmFja2VuZCgp ICogc2l6ZW9mKE9pZCkpOwogCi0JcmVxdWVzdFNpemUgPSBGYXN0UGF0aExvY2tTaG1lbVNp emUoKTsKLQotCWZwUHRyID0gU2htZW1Jbml0U3RydWN0KCJGYXN0LVBhdGggTG9jayBBcnJh eSIsCi0JCQkJCQkJcmVxdWVzdFNpemUsCi0JCQkJCQkJJmZvdW5kKTsKLQotCU1lbVNldChm cFB0ciwgMCwgcmVxdWVzdFNpemUpOworCUFzc2VydCh0bXBGYXN0UGF0aExvY2tBcnJheSk7 CisJZnBQdHIgPSB0bXBGYXN0UGF0aExvY2tBcnJheTsKKwlyZXF1ZXN0U2l6ZSA9IEZhc3RQ YXRoTG9ja0FycmF5U2htZW1EZXNjLnNpemU7CisJbWVtc2V0KGZwUHRyLCAwLCByZXF1ZXN0 U2l6ZSk7CiAKIAkvKiBGb3IgYXNzZXJ0cyBjaGVja2luZyB3ZSBkaWQgbm90IG92ZXJmbG93 LiAqLwogCWZwRW5kUHRyID0gZnBQdHIgKyByZXF1ZXN0U2l6ZTsKIAotCS8qIFJlc2VydmUg c3BhY2UgZm9yIHNlbWFwaG9yZXMuICovCi0JUEdSZXNlcnZlU2VtYXBob3JlcyhQcm9jR2xv YmFsU2VtYXMoKSk7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgVG90YWxQcm9jczsgaSsrKQogCXsK IAkJUEdQUk9DCSAgICpwcm9jID0gJnByb2NzW2ldOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0 aXZpdHkvd2FpdF9ldmVudC5jCmluZGV4IGFjYTJjOGZjNzQyLi5kOTAyOTNmZTY5NyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudC5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnQuYwpAQCAtNzksNiArNzks MzAgQEAgdHlwZWRlZiBzdHJ1Y3QgV2FpdEV2ZW50Q3VzdG9tRW50cnlCeU5hbWUKIAl1aW50 MzIJCXdhaXRfZXZlbnRfaW5mbzsKIH0gV2FpdEV2ZW50Q3VzdG9tRW50cnlCeU5hbWU7CiAK K3N0YXRpYyBTaG1lbUhhc2hEZXNjIFdhaXRFdmVudEN1c3RvbUhhc2hCeUluZm9EZXNjID0K K3sKKwkubmFtZSA9ICJXYWl0RXZlbnRDdXN0b20gaGFzaCBieSB3YWl0IGV2ZW50IGluZm9y bWF0aW9uIiwKKwkucHRyID0gJldhaXRFdmVudEN1c3RvbUhhc2hCeUluZm8sCisKKwkuaW5p dF9zaXplID0gV0FJVF9FVkVOVF9DVVNUT01fSEFTSF9JTklUX1NJWkUsCisJLm1heF9zaXpl ID0gV0FJVF9FVkVOVF9DVVNUT01fSEFTSF9NQVhfU0laRSwKKwkuaGFzaF9pbmZvLmtleXNp emUgPSBzaXplb2YodWludDMyKSwKKwkuaGFzaF9pbmZvLmVudHJ5c2l6ZSA9IHNpemVvZihX YWl0RXZlbnRDdXN0b21FbnRyeUJ5SW5mbyksCisJLmhhc2hfZmxhZ3MgPSBIQVNIX0VMRU0g fCBIQVNIX0JMT0JTLAorfTsKKworc3RhdGljIFNobWVtSGFzaERlc2MgV2FpdEV2ZW50Q3Vz dG9tSGFzaEJ5TmFtZURlc2MgPQoreworCS5uYW1lID0gIldhaXRFdmVudEN1c3RvbSBoYXNo IGJ5IG5hbWUiLAorCS5wdHIgPSAmV2FpdEV2ZW50Q3VzdG9tSGFzaEJ5TmFtZSwKKworCS5p bml0X3NpemUgPSBXQUlUX0VWRU5UX0NVU1RPTV9IQVNIX0lOSVRfU0laRSwKKwkubWF4X3Np emUgPSBXQUlUX0VWRU5UX0NVU1RPTV9IQVNIX01BWF9TSVpFLAorCS8qIGtleSBpcyBhIE5V TEwtdGVybWluYXRlZCBzdHJpbmcgKi8KKwkuaGFzaF9pbmZvLmtleXNpemUgPSBzaXplb2Yo Y2hhcltOQU1FREFUQUxFTl0pLAorCS5oYXNoX2luZm8uZW50cnlzaXplID0gc2l6ZW9mKFdh aXRFdmVudEN1c3RvbUVudHJ5QnlOYW1lKSwKKwkuaGFzaF9mbGFncyA9IEhBU0hfRUxFTSB8 IEhBU0hfQkxPQlMsCit9OwogCiAvKiBkeW5hbWljIGFsbG9jYXRpb24gY291bnRlciBmb3Ig Y3VzdG9tIHdhaXQgZXZlbnRzICovCiB0eXBlZGVmIHN0cnVjdCBXYWl0RXZlbnRDdXN0b21D b3VudGVyRGF0YQpAQCAtOTAsNiArMTE0LDE2IEBAIHR5cGVkZWYgc3RydWN0IFdhaXRFdmVu dEN1c3RvbUNvdW50ZXJEYXRhCiAvKiBwb2ludGVyIHRvIHRoZSBzaGFyZWQgbWVtb3J5ICov CiBzdGF0aWMgV2FpdEV2ZW50Q3VzdG9tQ291bnRlckRhdGEgKldhaXRFdmVudEN1c3RvbUNv dW50ZXI7CiAKK3N0YXRpYyB2b2lkIFdhaXRFdmVudEN1c3RvbUNvdW50ZXJEYXRhU2htZW1J bml0KHZvaWQgKmFyZyk7CisKK3N0YXRpYyBTaG1lbVN0cnVjdERlc2MgV2FpdEV2ZW50Q3Vz dG9tQ291bnRlclNobWVtRGVzYyA9Cit7CisJLm5hbWUgPSAiV2FpdEV2ZW50Q3VzdG9tQ291 bnRlckRhdGEiLAorCS5zaXplID0gc2l6ZW9mKFdhaXRFdmVudEN1c3RvbUNvdW50ZXJEYXRh KSwKKwkuaW5pdF9mbiA9IFdhaXRFdmVudEN1c3RvbUNvdW50ZXJEYXRhU2htZW1Jbml0LAor CS5wdHIgPSAodm9pZCAqKikgJldhaXRFdmVudEN1c3RvbUNvdW50ZXIsCit9OworCiAvKiBm aXJzdCBldmVudCBJRCBvZiBjdXN0b20gd2FpdCBldmVudHMgKi8KICNkZWZpbmUgV0FJVF9F VkVOVF9DVVNUT01fSU5JVElBTF9JRAkxCiAKQEAgLTk3LDYwICsxMzEsMjIgQEAgc3RhdGlj IHVpbnQzMiBXYWl0RXZlbnRDdXN0b21OZXcodWludDMyIGNsYXNzSWQsIGNvbnN0IGNoYXIg KndhaXRfZXZlbnRfbmFtZSk7CiBzdGF0aWMgY29uc3QgY2hhciAqR2V0V2FpdEV2ZW50Q3Vz dG9tSWRlbnRpZmllcih1aW50MzIgd2FpdF9ldmVudF9pbmZvKTsKIAogLyoKLSAqICBSZXR1 cm4gdGhlIHNwYWNlIGZvciBkeW5hbWljIHNoYXJlZCBoYXNoIHRhYmxlcyBhbmQgZHluYW1p YyBhbGxvY2F0aW9uIGNvdW50ZXIuCisgKiBSZWdpc3RlciBzaG1lbSBzcGFjZSBmb3IgZHlu YW1pYyBzaGFyZWQgaGFzaCBhbmQgZHluYW1pYyBhbGxvY2F0aW9uIGNvdW50ZXIuCiAgKi8K LVNpemUKLVdhaXRFdmVudEN1c3RvbVNobWVtU2l6ZSh2b2lkKQordm9pZAorV2FpdEV2ZW50 Q3VzdG9tU2htZW1SZWdpc3Rlcih2b2lkKQogewotCVNpemUJCXN6OwotCi0Jc3ogPSBNQVhB TElHTihzaXplb2YoV2FpdEV2ZW50Q3VzdG9tQ291bnRlckRhdGEpKTsKLQlzeiA9IGFkZF9z aXplKHN6LCBoYXNoX2VzdGltYXRlX3NpemUoV0FJVF9FVkVOVF9DVVNUT01fSEFTSF9NQVhf U0laRSwKLQkJCQkJCQkJCQkgc2l6ZW9mKFdhaXRFdmVudEN1c3RvbUVudHJ5QnlJbmZvKSkp OwotCXN6ID0gYWRkX3NpemUoc3osIGhhc2hfZXN0aW1hdGVfc2l6ZShXQUlUX0VWRU5UX0NV U1RPTV9IQVNIX01BWF9TSVpFLAotCQkJCQkJCQkJCSBzaXplb2YoV2FpdEV2ZW50Q3VzdG9t RW50cnlCeU5hbWUpKSk7Ci0JcmV0dXJuIHN6OworCVNobWVtUmVnaXN0ZXJTdHJ1Y3QoJldh aXRFdmVudEN1c3RvbUNvdW50ZXJTaG1lbURlc2MpOworCVNobWVtUmVnaXN0ZXJIYXNoKCZX YWl0RXZlbnRDdXN0b21IYXNoQnlJbmZvRGVzYyk7CisJU2htZW1SZWdpc3Rlckhhc2goJldh aXRFdmVudEN1c3RvbUhhc2hCeU5hbWVEZXNjKTsKIH0KIAotLyoKLSAqIEFsbG9jYXRlIHNo bWVtIHNwYWNlIGZvciBkeW5hbWljIHNoYXJlZCBoYXNoIGFuZCBkeW5hbWljIGFsbG9jYXRp b24gY291bnRlci4KLSAqLwotdm9pZAotV2FpdEV2ZW50Q3VzdG9tU2htZW1Jbml0KHZvaWQp CitzdGF0aWMgdm9pZAorV2FpdEV2ZW50Q3VzdG9tQ291bnRlckRhdGFTaG1lbUluaXQodm9p ZCAqYXJnKQogewotCWJvb2wJCWZvdW5kOwotCUhBU0hDVEwJCWluZm87Ci0KLQlXYWl0RXZl bnRDdXN0b21Db3VudGVyID0gKFdhaXRFdmVudEN1c3RvbUNvdW50ZXJEYXRhICopCi0JCVNo bWVtSW5pdFN0cnVjdCgiV2FpdEV2ZW50Q3VzdG9tQ291bnRlckRhdGEiLAotCQkJCQkJc2l6 ZW9mKFdhaXRFdmVudEN1c3RvbUNvdW50ZXJEYXRhKSwgJmZvdW5kKTsKLQotCWlmICghZm91 bmQpCi0JewotCQkvKiBpbml0aWFsaXplIHRoZSBhbGxvY2F0aW9uIGNvdW50ZXIgYW5kIGl0 cyBzcGlubG9jay4gKi8KLQkJV2FpdEV2ZW50Q3VzdG9tQ291bnRlci0+bmV4dElkID0gV0FJ VF9FVkVOVF9DVVNUT01fSU5JVElBTF9JRDsKLQkJU3BpbkxvY2tJbml0KCZXYWl0RXZlbnRD dXN0b21Db3VudGVyLT5tdXRleCk7Ci0JfQotCi0JLyogaW5pdGlhbGl6ZSBvciBhdHRhY2gg dGhlIGhhc2ggdGFibGVzIHRvIHN0b3JlIGN1c3RvbSB3YWl0IGV2ZW50cyAqLwotCWluZm8u a2V5c2l6ZSA9IHNpemVvZih1aW50MzIpOwotCWluZm8uZW50cnlzaXplID0gc2l6ZW9mKFdh aXRFdmVudEN1c3RvbUVudHJ5QnlJbmZvKTsKLQlXYWl0RXZlbnRDdXN0b21IYXNoQnlJbmZv ID0KLQkJU2htZW1Jbml0SGFzaCgiV2FpdEV2ZW50Q3VzdG9tIGhhc2ggYnkgd2FpdCBldmVu dCBpbmZvcm1hdGlvbiIsCi0JCQkJCSAgV0FJVF9FVkVOVF9DVVNUT01fSEFTSF9JTklUX1NJ WkUsCi0JCQkJCSAgV0FJVF9FVkVOVF9DVVNUT01fSEFTSF9NQVhfU0laRSwKLQkJCQkJICAm aW5mbywKLQkJCQkJICBIQVNIX0VMRU0gfCBIQVNIX0JMT0JTKTsKLQotCS8qIGtleSBpcyBh IE5VTEwtdGVybWluYXRlZCBzdHJpbmcgKi8KLQlpbmZvLmtleXNpemUgPSBzaXplb2YoY2hh cltOQU1FREFUQUxFTl0pOwotCWluZm8uZW50cnlzaXplID0gc2l6ZW9mKFdhaXRFdmVudEN1 c3RvbUVudHJ5QnlOYW1lKTsKLQlXYWl0RXZlbnRDdXN0b21IYXNoQnlOYW1lID0KLQkJU2ht ZW1Jbml0SGFzaCgiV2FpdEV2ZW50Q3VzdG9tIGhhc2ggYnkgbmFtZSIsCi0JCQkJCSAgV0FJ VF9FVkVOVF9DVVNUT01fSEFTSF9JTklUX1NJWkUsCi0JCQkJCSAgV0FJVF9FVkVOVF9DVVNU T01fSEFTSF9NQVhfU0laRSwKLQkJCQkJICAmaW5mbywKLQkJCQkJICBIQVNIX0VMRU0gfCBI QVNIX1NUUklOR1MpOworCS8qIGluaXRpYWxpemUgdGhlIGFsbG9jYXRpb24gY291bnRlciBh bmQgaXRzIHNwaW5sb2NrLiAqLworCVdhaXRFdmVudEN1c3RvbUNvdW50ZXItPm5leHRJZCA9 IFdBSVRfRVZFTlRfQ1VTVE9NX0lOSVRJQUxfSUQ7CisJU3BpbkxvY2tJbml0KCZXYWl0RXZl bnRDdXN0b21Db3VudGVyLT5tdXRleCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9hY2Nlc3MvdHJhbnNhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RyYW5zYW0uaApp bmRleCA2ZmE5MWJmY2RjMC4uMmRmYzhiMGY4NWYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2FjY2Vzcy90cmFuc2FtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RyYW5zYW0uaApA QCAtMzQ1LDggKzM0NSw3IEBAIGV4dGVybiBUcmFuc2FjdGlvbklkIFRyYW5zYWN0aW9uSWRM YXRlc3QoVHJhbnNhY3Rpb25JZCBtYWlueGlkLAogZXh0ZXJuIFhMb2dSZWNQdHIgVHJhbnNh Y3Rpb25JZEdldENvbW1pdExTTihUcmFuc2FjdGlvbklkIHhpZCk7CiAKIC8qIGluIHRyYW5z YW0vdmFyc3VwLmMgKi8KLWV4dGVybiBTaXplIFZhcnN1cFNobWVtU2l6ZSh2b2lkKTsKLWV4 dGVybiB2b2lkIFZhcnN1cFNobWVtSW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIFZhcnN1cFNo bWVtUmVnaXN0ZXIodm9pZCk7CiBleHRlcm4gRnVsbFRyYW5zYWN0aW9uSWQgR2V0TmV3VHJh bnNhY3Rpb25JZChib29sIGlzU3ViWGFjdCk7CiBleHRlcm4gdm9pZCBBZHZhbmNlTmV4dEZ1 bGxUcmFuc2FjdGlvbklkUGFzdFhpZChUcmFuc2FjdGlvbklkIHhpZCk7CiBleHRlcm4gRnVs bFRyYW5zYWN0aW9uSWQgUmVhZE5leHRGdWxsVHJhbnNhY3Rpb25JZCh2b2lkKTsKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvZHNtX3JlZ2lzdHJ5LmggYi9zcmMvaW5jbHVk ZS9zdG9yYWdlL2RzbV9yZWdpc3RyeS5oCmluZGV4IDUwNmZhZTJjOWNhLi45YTFiNGQ5ODJh ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9kc21fcmVnaXN0cnkuaAorKysg Yi9zcmMvaW5jbHVkZS9zdG9yYWdlL2RzbV9yZWdpc3RyeS5oCkBAIC0yMiw3ICsyMiw2IEBA IGV4dGVybiBkc2FfYXJlYSAqR2V0TmFtZWREU0EoY29uc3QgY2hhciAqbmFtZSwgYm9vbCAq Zm91bmQpOwogZXh0ZXJuIGRzaGFzaF90YWJsZSAqR2V0TmFtZWREU0hhc2goY29uc3QgY2hh ciAqbmFtZSwKIAkJCQkJCQkJCWNvbnN0IGRzaGFzaF9wYXJhbWV0ZXJzICpwYXJhbXMsCiAJ CQkJCQkJCQlib29sICpmb3VuZCk7Ci1leHRlcm4gU2l6ZSBEU01SZWdpc3RyeVNobWVtU2l6 ZSh2b2lkKTsKLWV4dGVybiB2b2lkIERTTVJlZ2lzdHJ5U2htZW1Jbml0KHZvaWQpOworZXh0 ZXJuIHZvaWQgRFNNUmVnaXN0cnlTaG1lbVJlZ2lzdGVyKHZvaWQpOwogCiAjZW5kaWYJCQkJ CQkJLyogRFNNX1JFR0lTVFJZX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvcG1zaWduYWwuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcG1zaWduYWwuaAppbmRleCAy MDZmYjc4ZjhhNS4uN2NkYzQ4NTIzMzQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvcG1zaWduYWwuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Btc2lnbmFsLmgKQEAg LTY2LDggKzY2LDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIFBNU2lnbmFsRGF0 YSAqUE1TaWduYWxTdGF0ZTsKIC8qCiAgKiBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgaW4g cG1zaWduYWwuYwogICovCi1leHRlcm4gU2l6ZSBQTVNpZ25hbFNobWVtU2l6ZSh2b2lkKTsK LWV4dGVybiB2b2lkIFBNU2lnbmFsU2htZW1Jbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgUE1T aWduYWxTaG1lbVJlZ2lzdGVyKHZvaWQpOwogZXh0ZXJuIHZvaWQgU2VuZFBvc3RtYXN0ZXJT aWduYWwoUE1TaWduYWxSZWFzb24gcmVhc29uKTsKIGV4dGVybiBib29sIENoZWNrUG9zdG1h c3RlclNpZ25hbChQTVNpZ25hbFJlYXNvbiByZWFzb24pOwogZXh0ZXJuIHZvaWQgU2V0UXVp dFNpZ25hbFJlYXNvbihRdWl0U2lnbmFsUmVhc29uIHJlYXNvbik7CmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9zdG9yYWdlL3Byb2MuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5o CmluZGV4IDNmODk0NTBjMjE2Li4xZDFlMDg4MWFmMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvc3RvcmFnZS9wcm9jLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jLmgKQEAg LTU1Miw3ICs1NTIsNyBAQCBleHRlcm4gUEdETExJTVBPUlQgUEdQUk9DICpBdXhpbGlhcnlQ cm9jczsKICAqIEZ1bmN0aW9uIFByb3RvdHlwZXMKICAqLwogZXh0ZXJuIGludAlQcm9jR2xv YmFsU2VtYXModm9pZCk7Ci1leHRlcm4gU2l6ZSBQcm9jR2xvYmFsU2htZW1TaXplKHZvaWQp OworZXh0ZXJuIHZvaWQgUHJvY0dsb2JhbFNobWVtUmVnaXN0ZXIodm9pZCk7CiBleHRlcm4g dm9pZCBJbml0UHJvY0dsb2JhbCh2b2lkKTsKIGV4dGVybiB2b2lkIEluaXRQcm9jZXNzKHZv aWQpOwogZXh0ZXJuIHZvaWQgSW5pdFByb2Nlc3NQaGFzZTIodm9pZCk7CmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NhcnJheS5oIGIvc3JjL2luY2x1ZGUvc3RvcmFn ZS9wcm9jYXJyYXkuaAppbmRleCBjNWFiMTU3NGZlMy4uNTcyNTE2YzRlMjEgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY2FycmF5LmgKKysrIGIvc3JjL2luY2x1ZGUv c3RvcmFnZS9wcm9jYXJyYXkuaApAQCAtMjAsOCArMjAsNyBAQAogI2luY2x1ZGUgInV0aWxz L3NuYXBzaG90LmgiCiAKIAotZXh0ZXJuIFNpemUgUHJvY0FycmF5U2htZW1TaXplKHZvaWQp OwotZXh0ZXJuIHZvaWQgUHJvY0FycmF5U2htZW1Jbml0KHZvaWQpOworZXh0ZXJuIHZvaWQg UHJvY0FycmF5U2htZW1SZWdpc3Rlcih2b2lkKTsKIGV4dGVybiB2b2lkIFByb2NBcnJheUFk ZChQR1BST0MgKnByb2MpOwogZXh0ZXJuIHZvaWQgUHJvY0FycmF5UmVtb3ZlKFBHUFJPQyAq cHJvYywgVHJhbnNhY3Rpb25JZCBsYXRlc3RYaWQpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3Np Z25hbC5oCmluZGV4IDM0OGZiYTUzYTkzLi5kMjM0NGIxY2JiMyAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFn ZS9wcm9jc2lnbmFsLmgKQEAgLTYzLDggKzYzLDcgQEAgdHlwZWRlZiBlbnVtCiAvKgogICog cHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zIGluIHByb2NzaWduYWwuYwogICovCi1leHRlcm4g U2l6ZSBQcm9jU2lnbmFsU2htZW1TaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgUHJvY1NpZ25h bFNobWVtSW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIFByb2NTaWduYWxTaG1lbVJlZ2lzdGVy KHZvaWQpOwogCiBleHRlcm4gdm9pZCBQcm9jU2lnbmFsSW5pdChjb25zdCB1aW50OCAqY2Fu Y2VsX2tleSwgaW50IGNhbmNlbF9rZXlfbGVuKTsKIGV4dGVybiBpbnQJU2VuZFByb2NTaWdu YWwocGlkX3QgcGlkLCBQcm9jU2lnbmFsUmVhc29uIHJlYXNvbiwKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3N0b3JhZ2Uvc2ludmFsYWR0LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Np bnZhbGFkdC5oCmluZGV4IGExNjk0NTAwYTg1Li40ZWRiYTI5MzZlNiAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvc3RvcmFnZS9zaW52YWxhZHQuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9y YWdlL3NpbnZhbGFkdC5oCkBAIC0yOCw4ICsyOCw3IEBACiAvKgogICogcHJvdG90eXBlcyBm b3IgZnVuY3Rpb25zIGluIHNpbnZhbGFkdC5jCiAgKi8KLWV4dGVybiBTaXplIFNoYXJlZElu dmFsU2htZW1TaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgU2hhcmVkSW52YWxTaG1lbUluaXQo dm9pZCk7CitleHRlcm4gdm9pZCBTaGFyZWRJbnZhbFNobWVtUmVnaXN0ZXIodm9pZCk7CiBl eHRlcm4gdm9pZCBTaGFyZWRJbnZhbEJhY2tlbmRJbml0KGJvb2wgc2VuZE9ubHkpOwogCiBl eHRlcm4gdm9pZCBTSUluc2VydERhdGFFbnRyaWVzKGNvbnN0IFNoYXJlZEludmFsaWRhdGlv bk1lc3NhZ2UgKmRhdGEsIGludCBuKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxz L3dhaXRfZXZlbnQuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZlbnQuaAppbmRleCAz NGMyN2NjM2RjMy4uODZmYzg2MzdmNWUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxz L3dhaXRfZXZlbnQuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50LmgKQEAg LTQyLDggKzQyLDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIHVpbnQzMiAqbXlfd2FpdF9ldmVu dF9pbmZvOwogZXh0ZXJuIHVpbnQzMiBXYWl0RXZlbnRFeHRlbnNpb25OZXcoY29uc3QgY2hh ciAqd2FpdF9ldmVudF9uYW1lKTsKIGV4dGVybiB1aW50MzIgV2FpdEV2ZW50SW5qZWN0aW9u UG9pbnROZXcoY29uc3QgY2hhciAqd2FpdF9ldmVudF9uYW1lKTsKIAotZXh0ZXJuIHZvaWQg V2FpdEV2ZW50Q3VzdG9tU2htZW1Jbml0KHZvaWQpOwotZXh0ZXJuIFNpemUgV2FpdEV2ZW50 Q3VzdG9tU2htZW1TaXplKHZvaWQpOworZXh0ZXJuIHZvaWQgV2FpdEV2ZW50Q3VzdG9tU2ht ZW1SZWdpc3Rlcih2b2lkKTsKIGV4dGVybiBjaGFyICoqR2V0V2FpdEV2ZW50Q3VzdG9tTmFt ZXModWludDMyIGNsYXNzSWQsIGludCAqbndhaXRldmVudHMpOwogCiAvKiAtLS0tLS0tLS0t Ci0tIAoyLjQ3LjMKCg== --------------sHJ4NdKMkCB9GbTF7phkSOpd--