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.94.2) (envelope-from ) id 1vAbcT-003qLF-UF for pgsql-hackers@arkaria.postgresql.org; Sun, 19 Oct 2025 22:11:17 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1vAbcS-00Cqwo-Or for pgsql-hackers@arkaria.postgresql.org; Sun, 19 Oct 2025 22:11:15 +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.94.2) (envelope-from ) id 1vAbcS-00Cqwf-AM for pgsql-hackers@lists.postgresql.org; Sun, 19 Oct 2025 22:11:15 +0000 Received: from fhigh-a1-smtp.messagingengine.com ([103.168.172.152]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vAbcO-0037IF-2p for pgsql-hackers@postgresql.org; Sun, 19 Oct 2025 22:11:15 +0000 Received: from phl-compute-04.internal (phl-compute-04.internal [10.202.2.44]) by mailfhigh.phl.internal (Postfix) with ESMTP id 87F95140003C; Sun, 19 Oct 2025 18:11:11 -0400 (EDT) Received: from phl-imap-03 ([10.202.2.93]) by phl-compute-04.internal (MEProxy); Sun, 19 Oct 2025 18:11:11 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=compiler.org; h= cc:cc:content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm2; t=1760911871; x=1760998271; bh=Nwe3sOquhD TzLjkKXIQ/m5Yh/g9tKwqU630THXk3OGY=; b=CRdoanJV1GfNIkx2zeI5ITGBk8 HqXLMHBLd3LstbxC89VZnC/0dNcFXjzyC2h5srS4NJrqXYqkrTm+ouJiEOAlmVos KiGnGT4wWCaRCgXpiGQKiCS39mlQJOXWHpEhUOSaswd2MTAVUkUZEXjprixEFVMj B6s+UbibhKjdrKWt/1xraNK7dhgcxY6BFtdBBRrpi9z+LGY4/myc1yjooQ9C41hI UoTLAp5YbX8Ed0i2OCWVtv+WxrgZh6gd0opLaTQD45WqiJjDUvym/0EoX6B+jvxh 5Y746gY3IjQ6P0cYQo49rP2zsZEwfYiVWdqlIam5o+A/xqrOtz1cubIUrMsw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm2; t= 1760911871; x=1760998271; bh=Nwe3sOquhDTzLjkKXIQ/m5Yh/g9tKwqU630 THXk3OGY=; b=UHt3ESCBMbS0yJeU/Z3iW24uCNe7FZkMB/B/HU/DSaDnlC7RV5o OQKnY1GLgtdB2GR5rTklSzj4fduxjBCl/yA4loOFUDq+zOGf9q8d2JvsEu2V8fNW 5kFWscHnIRkd4LQXggKtAaZGukot7rTB2TB2772+nMOG7YLgXyJUIp4nK8Vb5dOh 2+tIhiG14eaa5LnxXQs5QCTP15+dDsOL/fWCr+4V6eKVhmYU53aByyWzf4yLIz/y TekyPCBRiF/Tp+7uKq0wK4mlzXzrs43YWaAx859vrcBTSqZhAXtOvBW5yiZi+il1 eIxHv7sjDmyzHxthOpSfsJfEbVmW23+xP+g== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggddufeeiuddtucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucenucfjughrpefoggffhffvvefkjghfufgtsehmtderre ertddtnecuhfhrohhmpedflfhovghlucflrggtohgsshhonhdfuceojhhovghlsegtohhm phhilhgvrhdrohhrgheqnecuggftrfgrthhtvghrnhepfffgleffffdvhefhieegfeeije dujedvieeuveeugefgveeukeevieethefhteeinecuvehluhhsthgvrhfuihiivgeptden ucfrrghrrghmpehmrghilhhfrhhomhepjhhovghlsegtohhmphhilhgvrhdrohhrghdpnh gspghrtghpthhtohepfedpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtoheplhhirdgv vhgrnhdrtghhrghosehgmhgrihhlrdgtohhmpdhrtghpthhtohepphhgshhqlhdqhhgrtg hkvghrshesphhoshhtghhrvghsqhhlrdhorhhgpdhrtghpthhtohepthhglhesshhsshdr phhghhdrphgrrdhush X-ME-Proxy: Feedback-ID: ic6394509:Fastmail Received: by mailuser.phl.internal (Postfix, from userid 501) id 3D3C518E0054; Sun, 19 Oct 2025 18:11:11 -0400 (EDT) X-Mailer: MessagingEngine.com Webmail Interface MIME-Version: 1.0 X-ThreadId: AE1r89ybsZ1g Date: Mon, 20 Oct 2025 00:10:34 +0200 From: "Joel Jacobson" To: "Tom Lane" Cc: "Chao Li" , pgsql-hackers Message-Id: <2701b873-46ca-4844-a892-a166ee101af9@app.fastmail.com> In-Reply-To: References: <6899c044-4a82-49be-8117-e6f669765f7e@app.fastmail.com> <165530.1752362320@sss.pgh.pa.us> <02a7cd37-e2fc-4212-8b19-f8c239c95fb8@app.fastmail.com> <96f00bf1-cc9d-4520-9d02-9e14e7767c88@app.fastmail.com> <30c2aa7d-dd6c-4b68-a2e4-f217a1a34acf@app.fastmail.com> <0b4d402a-9ac2-4aa8-acf8-8231dbe579ea@app.fastmail.com> <3095599.1758644879@sss.pgh.pa.us> <0dc6a2cc-5216-4dc1-9dd2-430cafc6095b@app.fastmail.com> <52CC167F-763B-4ECA-B0B4-DAB381816828@gmail.com> <9186C6D0-F7A9-482A-9183-89E530B57E36@gmail.com> <1073593.1759423179@sss.pgh.pa.us> <4bd5e6c4-6fa7-44bb-869d-59a32a331fa8@app.fastmail.com> <85828f29-e72e-4400-94f3-9a69bc8dc239@app.fastmail.com> <2495353.1759860890@sss.pgh.pa.us> <8aeae418-92a6-4bbd-9c06-9574c79e59f7@app.fastmail.com> <2531672.1759868124@sss.pgh.pa.us> <474efa78-337c-41cd-a73a-f845a0115109@app.fastmail.com> <2749343.1759949176@sss.pgh.pa.us> <8bfca2be-1ec0-4e15-aafb-0b7b661fe936@app.fastmail.com> <9eba307f-f2fb-48f0-9507-2e197f39ef9e@app.fastmail.com> <8c71183a-0d28-4bcf-a806-78446ff95404@app.fastmail.com> <1009807.1760476747@sss.pgh.pa.us> <1F7227F5-C33D-4E2C-8511-33F1468590D0@gmail.com> <0a5a20d3-4621-46b3-b2ab-903f63a20dea@app.fastmail.com> <6F913129-ABEF-4004-AAF3-F22FC34!29AE8@gmail.com> <1547585.1760645808@sss.pgh.pa.us> Subject: Re: Optimize LISTEN/NOTIFY Content-Type: multipart/mixed; boundary=c9e2941be37f430381a9a0b1a7b9285d List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --c9e2941be37f430381a9a0b1a7b9285d Content-Type: text/plain Content-Transfer-Encoding: 7bit On Mon, Oct 20, 2025, at 00:06, Joel Jacobson wrote: > Attachments: > * 0001-optimize_listen_notify-v20.patch > * 0002-optimize_listen_notify-v20-alt1.txt > * 0002-optimize_listen_notify-v20-alt3.txt > * 0002-optimize_listen_notify-v20-alt2.txt My apologies, I forgot to attach 0002-optimize_listen_notify-v20.patch. /Joel --c9e2941be37f430381a9a0b1a7b9285d Content-Disposition: attachment; filename*0="0001-optimize_listen_notify-v20.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0001-optimize=5Flisten=5Fnotify-v20.patch?=" Content-Transfer-Encoding: base64 RnJvbSBmMzcwOTUyNTA1MjFkMGEyOWQ4MTI5OTdiN2I3OWQ5MzhlZDljODk0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEphY29ic29uIDxqb2VsQGNvbXBpbGVyLm9y Zz4KRGF0ZTogV2VkLCA4IE9jdCAyMDI1IDA5OjMwOjU0ICswMjAwClN1YmplY3Q6IFtQQVRD SCAxLzJdIEltcHJvdmUgTElTVEVOL05PVElGWSB0ZXN0IGNvdmVyYWdlCgpUaGlzIGFkZHMg aXNvbGF0aW9uIHRlc3RzIHRvIGNvdmVyIHByZXZpb3VzbHkgdW50ZXN0ZWQgY29kZSBwYXRo czoKCiogQ2hlY2sgc2ltcGxlIE5PVElGWSByZXBhcmVudGluZyB3aGVuIHBhcmVudCBoYXMg bm8gYWN0aW9uCiogQ2hlY2sgTElTVEVOIHJlcGFyZW50aW5nIGluIHN1YnRyYW5zYWN0aW9u CiogQ2hlY2sgTElTVEVOIG1lcmdlIHBhdGggd2hlbiBib3RoIG91dGVyIGFuZCBpbm5lciB0 cmFuc2FjdGlvbnMgaGF2ZSBhY3Rpb25zCiogQ2hlY2sgTElTVEVOIGFib3J0IHBhdGggKFJP TExCQUNLIFRPIFNBVkVQT0lOVCBkaXNjYXJkcyBwZW5kaW5nIGFjdGlvbnMpCiogQ2hlY2sg bm90aWZpY2F0aW9uX21hdGNoIGZ1bmN0aW9uICh0cmlnZ2VyZWQgYnkgaGFzaCB0YWJsZSBk dXBsaWNhdGUgZGV0ZWN0aW9uKQoqIENoZWNrIHRoYXQgbm90aWZpY2F0aW9ucyBzZW50IGZy b20gYSBiYWNrZW5kIHRoYXQgaGFzIG5vdCBkb25lIExJU1RFTgogIGFyZSBwcm9wZXJseSBk ZWxpdmVyZWQgdG8gYSBsaXN0ZW5lciBpbiBhbm90aGVyIGJhY2tlbmQKClRoaXMgYWxzbyBh ZGRzIGEgdGVzdCB0byBwcmVwYXJlIGZvciB0aGUgbmV4dCBwYXRjaDoKCiogQ2hlY2sgQ2hh bm5lbEhhc2hBZGRMaXN0ZW5lciBhcnJheSBncm93dGgKLS0tCiBzcmMvdGVzdC9pc29sYXRp b24vZXhwZWN0ZWQvYXN5bmMtbm90aWZ5Lm91dCB8IDExNCArKysrKysrKysrKysrKysrKyst CiBzcmMvdGVzdC9pc29sYXRpb24vc3BlY3MvYXN5bmMtbm90aWZ5LnNwZWMgICB8ICA2OCAr KysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCAxODEgaW5zZXJ0aW9ucygrKSwgMSBkZWxl dGlvbigtKQoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9hc3lu Yy1ub3RpZnkub3V0IGIvc3JjL3Rlc3QvaXNvbGF0aW9uL2V4cGVjdGVkL2FzeW5jLW5vdGlm eS5vdXQKaW5kZXggNTU2ZTE4MDU4OTMuLjQ0M2E2ZWI2NjlmIDEwMDY0NAotLS0gYS9zcmMv dGVzdC9pc29sYXRpb24vZXhwZWN0ZWQvYXN5bmMtbm90aWZ5Lm91dAorKysgYi9zcmMvdGVz dC9pc29sYXRpb24vZXhwZWN0ZWQvYXN5bmMtbm90aWZ5Lm91dApAQCAtMSw0ICsxLDQgQEAK LVBhcnNlZCB0ZXN0IHNwZWMgd2l0aCAzIHNlc3Npb25zCitQYXJzZWQgdGVzdCBzcGVjIHdp dGggNyBzZXNzaW9ucwogCiBzdGFydGluZyBwZXJtdXRhdGlvbjogbGlzdGVuYyBub3RpZnkx IG5vdGlmeTIgbm90aWZ5MyBub3RpZnlmCiBzdGVwIGxpc3RlbmM6IExJU1RFTiBjMTsgTElT VEVOIGMyOwpAQCAtNDcsNiArNDcsMTA1IEBAIG5vdGlmaWVyOiBOT1RJRlkgImMyIiB3aXRo IHBheWxvYWQgInBheWxvYWQiIGZyb20gbm90aWZpZXIKIG5vdGlmaWVyOiBOT1RJRlkgImMx IiB3aXRoIHBheWxvYWQgInBheWxvYWRzIiBmcm9tIG5vdGlmaWVyCiBub3RpZmllcjogTk9U SUZZICJjMiIgd2l0aCBwYXlsb2FkICJwYXlsb2FkcyIgZnJvbSBub3RpZmllcgogCitzdGFy dGluZyBwZXJtdXRhdGlvbjogbGlzdGVuYyBub3RpZnlzX3NpbXBsZQorc3RlcCBsaXN0ZW5j OiBMSVNURU4gYzE7IExJU1RFTiBjMjsKK3N0ZXAgbm90aWZ5c19zaW1wbGU6IAorCUJFR0lO OworCVNBVkVQT0lOVCBzMTsKKwlOT1RJRlkgYzEsICdzaW1wbGUxJzsKKwlOT1RJRlkgYzIs ICdzaW1wbGUyJzsKKwlSRUxFQVNFIFNBVkVQT0lOVCBzMTsKKwlDT01NSVQ7CisKK25vdGlm aWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgInNpbXBsZTEiIGZyb20gbm90aWZpZXIK K25vdGlmaWVyOiBOT1RJRlkgImMyIiB3aXRoIHBheWxvYWQgInNpbXBsZTIiIGZyb20gbm90 aWZpZXIKKworc3RhcnRpbmcgcGVybXV0YXRpb246IGxzYmVnaW4gbHNzYXZlcG9pbnQgbHNs aXN0ZW4gbHNyZWxlYXNlIGxzY29tbWl0IGxzbm90aWZ5CitzdGVwIGxzYmVnaW46IEJFR0lO Oworc3RlcCBsc3NhdmVwb2ludDogU0FWRVBPSU5UIHMxOworc3RlcCBsc2xpc3RlbjogTElT VEVOIGMxOyBMSVNURU4gYzI7CitzdGVwIGxzcmVsZWFzZTogUkVMRUFTRSBTQVZFUE9JTlQg czE7CitzdGVwIGxzY29tbWl0OiBDT01NSVQ7CitzdGVwIGxzbm90aWZ5OiBOT1RJRlkgYzEs ICdzdWJ4YWN0X3Rlc3QnOworbGlzdGVuX3N1YnhhY3Q6IE5PVElGWSAiYzEiIHdpdGggcGF5 bG9hZCAic3VieGFjdF90ZXN0IiBmcm9tIGxpc3Rlbl9zdWJ4YWN0CisKK3N0YXJ0aW5nIHBl cm11dGF0aW9uOiBsc2JlZ2luIGxzbGlzdGVuX291dGVyIGxzc2F2ZXBvaW50IGxzbGlzdGVu IGxzcmVsZWFzZSBsc2NvbW1pdCBsc25vdGlmeQorc3RlcCBsc2JlZ2luOiBCRUdJTjsKK3N0 ZXAgbHNsaXN0ZW5fb3V0ZXI6IExJU1RFTiBjMzsKK3N0ZXAgbHNzYXZlcG9pbnQ6IFNBVkVQ T0lOVCBzMTsKK3N0ZXAgbHNsaXN0ZW46IExJU1RFTiBjMTsgTElTVEVOIGMyOworc3RlcCBs c3JlbGVhc2U6IFJFTEVBU0UgU0FWRVBPSU5UIHMxOworc3RlcCBsc2NvbW1pdDogQ09NTUlU Oworc3RlcCBsc25vdGlmeTogTk9USUZZIGMxLCAnc3VieGFjdF90ZXN0JzsKK2xpc3Rlbl9z dWJ4YWN0OiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgInN1YnhhY3RfdGVzdCIgZnJvbSBs aXN0ZW5fc3VieGFjdAorCitzdGFydGluZyBwZXJtdXRhdGlvbjogbHNiZWdpbiBsc3NhdmVw b2ludCBsc2xpc3RlbiBsc3JvbGxiYWNrIGxzY29tbWl0IGxzbm90aWZ5X2NoZWNrCitzdGVw IGxzYmVnaW46IEJFR0lOOworc3RlcCBsc3NhdmVwb2ludDogU0FWRVBPSU5UIHMxOworc3Rl cCBsc2xpc3RlbjogTElTVEVOIGMxOyBMSVNURU4gYzI7CitzdGVwIGxzcm9sbGJhY2s6IFJP TExCQUNLIFRPIFNBVkVQT0lOVCBzMTsKK3N0ZXAgbHNjb21taXQ6IENPTU1JVDsKK3N0ZXAg bHNub3RpZnlfY2hlY2s6IE5PVElGWSBjMSwgJ3Nob3VsZF9ub3RfcmVjZWl2ZSc7CisKK3N0 YXJ0aW5nIHBlcm11dGF0aW9uOiBsaXN0ZW5jIG5vdGlmeV9tYW55X3dpdGhfZHVwCitzdGVw IGxpc3RlbmM6IExJU1RFTiBjMTsgTElTVEVOIGMyOworc3RlcCBub3RpZnlfbWFueV93aXRo X2R1cDogCisJQkVHSU47CisJU0VMRUNUIHBnX25vdGlmeSgnYzEnLCAnbXNnJyB8fCBzOjp0 ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxNykgczsKKwlTRUxFQ1QgcGdfbm90aWZ5 KCdjMScsICdtc2cxJyk7CisJQ09NTUlUOworCitwZ19ub3RpZnkKKy0tLS0tLS0tLQorICAg ICAgICAgCisgICAgICAgICAKKyAgICAgICAgIAorICAgICAgICAgCisgICAgICAgICAKKyAg ICAgICAgIAorICAgICAgICAgCisgICAgICAgICAKKyAgICAgICAgIAorICAgICAgICAgCisg ICAgICAgICAKKyAgICAgICAgIAorICAgICAgICAgCisgICAgICAgICAKKyAgICAgICAgIAor ICAgICAgICAgCisgICAgICAgICAKKygxNyByb3dzKQorCitwZ19ub3RpZnkKKy0tLS0tLS0t LQorICAgICAgICAgCisoMSByb3cpCisKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBh eWxvYWQgIm1zZzEiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRo IHBheWxvYWQgIm1zZzIiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3 aXRoIHBheWxvYWQgIm1zZzMiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMx IiB3aXRoIHBheWxvYWQgIm1zZzQiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkg ImMxIiB3aXRoIHBheWxvYWQgIm1zZzUiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJ RlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzYiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBO T1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzciIGZyb20gbm90aWZpZXIKK25vdGlmaWVy OiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzgiIGZyb20gbm90aWZpZXIKK25vdGlm aWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzkiIGZyb20gbm90aWZpZXIKK25v dGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzEwIiBmcm9tIG5vdGlmaWVy Citub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICJtc2cxMSIgZnJvbSBub3Rp Zmllcgorbm90aWZpZXI6IE5PVElGWSAiYzEiIHdpdGggcGF5bG9hZCAibXNnMTIiIGZyb20g bm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzEzIiBm cm9tIG5vdGlmaWVyCitub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICJtc2cx NCIgZnJvbSBub3RpZmllcgorbm90aWZpZXI6IE5PVElGWSAiYzEiIHdpdGggcGF5bG9hZCAi bXNnMTUiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxv YWQgIm1zZzE2IiBmcm9tIG5vdGlmaWVyCitub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBw YXlsb2FkICJtc2cxNyIgZnJvbSBub3RpZmllcgorCitzdGFydGluZyBwZXJtdXRhdGlvbjog bGlzdGVuYyBsbGlzdGVuIGwybGlzdGVuIGwzbGlzdGVuIGxzbGlzdGVuCitzdGVwIGxpc3Rl bmM6IExJU1RFTiBjMTsgTElTVEVOIGMyOworc3RlcCBsbGlzdGVuOiBMSVNURU4gYzE7IExJ U1RFTiBjMjsKK3N0ZXAgbDJsaXN0ZW46IExJU1RFTiBjMTsKK3N0ZXAgbDNsaXN0ZW46IExJ U1RFTiBjMTsKK3N0ZXAgbHNsaXN0ZW46IExJU1RFTiBjMTsgTElTVEVOIGMyOworCiBzdGFy dGluZyBwZXJtdXRhdGlvbjogbGxpc3RlbiBub3RpZnkxIG5vdGlmeTIgbm90aWZ5MyBub3Rp ZnlmIGxjaGVjawogc3RlcCBsbGlzdGVuOiBMSVNURU4gYzE7IExJU1RFTiBjMjsKIHN0ZXAg bm90aWZ5MTogTk9USUZZIGMxOwpAQCAtOTUsNiArMTk0LDggQEAgbGlzdGVuZXI6IE5PVElG WSAiYzIiIHdpdGggcGF5bG9hZCAiIiBmcm9tIG5vdGlmaWVyCiAKIHN0YXJ0aW5nIHBlcm11 dGF0aW9uOiBsMmxpc3RlbiBsMmJlZ2luIG5vdGlmeTEgbGJlZ2lucyBsbGlzdGVuIGxjb21t aXQgbDJjb21taXQgbDJzdG9wCiBzdGVwIGwybGlzdGVuOiBMSVNURU4gYzE7CitsaXN0ZW5l cjI6IE5PVElGWSAiYzEiIHdpdGggcGF5bG9hZCAiIiBmcm9tIG5vdGlmaWVyCitsaXN0ZW5l cjI6IE5PVElGWSAiYzEiIHdpdGggcGF5bG9hZCAiIiBmcm9tIG5vdGlmaWVyCiBzdGVwIGwy YmVnaW46IEJFR0lOOwogc3RlcCBub3RpZnkxOiBOT1RJRlkgYzE7CiBzdGVwIGxiZWdpbnM6 IEJFR0lOIElTT0xBVElPTiBMRVZFTCBTRVJJQUxJWkFCTEU7CkBAIC0xMDQsNiArMjA1LDE3 IEBAIHN0ZXAgbDJjb21taXQ6IENPTU1JVDsKIGxpc3RlbmVyMjogTk9USUZZICJjMSIgd2l0 aCBwYXlsb2FkICIiIGZyb20gbm90aWZpZXIKIHN0ZXAgbDJzdG9wOiBVTkxJU1RFTiAqOwog CitzdGFydGluZyBwZXJtdXRhdGlvbjogbGNoX2xpc3RlbiBuY2hfbm90aWZ5IGxjaF9jaGVj aworc3RlcCBsY2hfbGlzdGVuOiBMSVNURU4gY2g7CitzdGVwIG5jaF9ub3RpZnk6IE5PVElG WSBjaCwgJ2FhJzsKK3N0ZXAgbGNoX2NoZWNrOiBTRUxFQ1QgMSBBUyB4OworeAorLQorMQor KDEgcm93KQorCitsaXN0ZW5lcl9jaDogTk9USUZZICJjaCIgd2l0aCBwYXlsb2FkICJhYSIg ZnJvbSBub3RpZmllcl9jaAorCiBzdGFydGluZyBwZXJtdXRhdGlvbjogbGxpc3RlbiBsYmVn aW4gdXNhZ2UgYmlnbm90aWZ5IHVzYWdlCiBzdGVwIGxsaXN0ZW46IExJU1RFTiBjMTsgTElT VEVOIGMyOwogc3RlcCBsYmVnaW46IEJFR0lOOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvaXNv bGF0aW9uL3NwZWNzL2FzeW5jLW5vdGlmeS5zcGVjIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL3Nw ZWNzL2FzeW5jLW5vdGlmeS5zcGVjCmluZGV4IDBiOGNmZDkxMDgzLi4wYTAxZTc3N2I5OCAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNzL2FzeW5jLW5vdGlmeS5zcGVj CisrKyBiL3NyYy90ZXN0L2lzb2xhdGlvbi9zcGVjcy9hc3luYy1ub3RpZnkuc3BlYwpAQCAt MzEsNiArMzEsMjAgQEAgc3RlcCBub3RpZnlzMQl7CiAJUk9MTEJBQ0sgVE8gU0FWRVBPSU5U IHMyOwogCUNPTU1JVDsKIH0KK3N0ZXAgbm90aWZ5c19zaW1wbGUJeworCUJFR0lOOworCVNB VkVQT0lOVCBzMTsKKwlOT1RJRlkgYzEsICdzaW1wbGUxJzsKKwlOT1RJRlkgYzIsICdzaW1w bGUyJzsKKwlSRUxFQVNFIFNBVkVQT0lOVCBzMTsKKwlDT01NSVQ7Cit9CitzdGVwIG5vdGlm eV9tYW55X3dpdGhfZHVwCXsKKwlCRUdJTjsKKwlTRUxFQ1QgcGdfbm90aWZ5KCdjMScsICdt c2cnIHx8IHM6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDE3KSBzOworCVNFTEVD VCBwZ19ub3RpZnkoJ2MxJywgJ21zZzEnKTsKKwlDT01NSVQ7Cit9CiBzdGVwIHVzYWdlCQl7 IFNFTEVDVCBwZ19ub3RpZmljYXRpb25fcXVldWVfdXNhZ2UoKSA+IDAgQVMgbm9uemVybzsg fQogc3RlcCBiaWdub3RpZnkJeyBTRUxFQ1QgY291bnQocGdfbm90aWZ5KCdjMScsIHM6OnRl eHQpKSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKSBzOyB9CiB0ZWFyZG93bgkJeyBV TkxJU1RFTiAqOyB9CkBAIC01Myw2ICs2NywzOCBAQCBzdGVwIGwyYmVnaW4JeyBCRUdJTjsg fQogc3RlcCBsMmNvbW1pdAl7IENPTU1JVDsgfQogc3RlcCBsMnN0b3AJCXsgVU5MSVNURU4g KjsgfQogCisjIFRoaXJkIGxpc3RlbmVyIHNlc3Npb24gZm9yIHRlc3RpbmcgYXJyYXkgZ3Jv d3RoLgorCitzZXNzaW9uIGxpc3RlbmVyMworc3RlcCBsM2xpc3Rlbgl7IExJU1RFTiBjMTsg fQordGVhcmRvd24JCXsgVU5MSVNURU4gKjsgfQorCisjIExpc3RlbmVyIHNlc3Npb24gZm9y IGNyb3NzLXNlc3Npb24gbm90aWZpY2F0aW9uIHRlc3Qgd2l0aCBjaGFubmVsICdjaCcuCisK K3Nlc3Npb24gbGlzdGVuZXJfY2gKK3N0ZXAgbGNoX2xpc3Rlbgl7IExJU1RFTiBjaDsgfQor c3RlcCBsY2hfY2hlY2sJeyBTRUxFQ1QgMSBBUyB4OyB9Cit0ZWFyZG93bgkJeyBVTkxJU1RF TiAqOyB9CisKKyMgTm90aWZpZXIgc2Vzc2lvbiBmb3IgY3Jvc3Mtc2Vzc2lvbiBub3RpZmlj YXRpb24gdGVzdCB3aXRoIGNoYW5uZWwgJ2NoJy4KKworc2Vzc2lvbiBub3RpZmllcl9jaAor c3RlcCBuY2hfbm90aWZ5CXsgTk9USUZZIGNoLCAnYWEnOyB9CisKKyMgU2Vzc2lvbiBmb3Ig dGVzdGluZyBMSVNURU4gaW4gc3VidHJhbnNhY3Rpb24gd2l0aCBzZXBhcmF0ZSBzdGVwcy4K Kworc2Vzc2lvbiBsaXN0ZW5fc3VieGFjdAorc3RlcCBsc2JlZ2luCXsgQkVHSU47IH0KK3N0 ZXAgbHNsaXN0ZW5fb3V0ZXIJeyBMSVNURU4gYzM7IH0KK3N0ZXAgbHNzYXZlcG9pbnQJeyBT QVZFUE9JTlQgczE7IH0KK3N0ZXAgbHNsaXN0ZW4JeyBMSVNURU4gYzE7IExJU1RFTiBjMjsg fQorc3RlcCBsc3JlbGVhc2UJeyBSRUxFQVNFIFNBVkVQT0lOVCBzMTsgfQorc3RlcCBsc3Jv bGxiYWNrCXsgUk9MTEJBQ0sgVE8gU0FWRVBPSU5UIHMxOyB9CitzdGVwIGxzY29tbWl0CXsg Q09NTUlUOyB9CitzdGVwIGxzbm90aWZ5CXsgTk9USUZZIGMxLCAnc3VieGFjdF90ZXN0Jzsg fQorc3RlcCBsc25vdGlmeV9jaGVjawl7IE5PVElGWSBjMSwgJ3Nob3VsZF9ub3RfcmVjZWl2 ZSc7IH0KK3RlYXJkb3duCQl7IFVOTElTVEVOICo7IH0KKwogCiAjIFRyaXZpYWwgY2FzZXMu CiBwZXJtdXRhdGlvbiBsaXN0ZW5jIG5vdGlmeTEgbm90aWZ5MiBub3RpZnkzIG5vdGlmeWYK QEAgLTYwLDYgKzEwNiwyNCBAQCBwZXJtdXRhdGlvbiBsaXN0ZW5jIG5vdGlmeTEgbm90aWZ5 MiBub3RpZnkzIG5vdGlmeWYKICMgQ2hlY2sgc2ltcGxlIGFuZCBsZXNzLXNpbXBsZSBkZWR1 cGxpY2F0aW9uLgogcGVybXV0YXRpb24gbGlzdGVuYyBub3RpZnlkMSBub3RpZnlkMiBub3Rp ZnlzMQogCisjIENoZWNrIHNpbXBsZSBOT1RJRlkgcmVwYXJlbnRpbmcgd2hlbiBwYXJlbnQg aGFzIG5vIGFjdGlvbi4KK3Blcm11dGF0aW9uIGxpc3RlbmMgbm90aWZ5c19zaW1wbGUKKwor IyBDaGVjayBMSVNURU4gcmVwYXJlbnRpbmcgaW4gc3VidHJhbnNhY3Rpb24uCitwZXJtdXRh dGlvbiBsc2JlZ2luIGxzc2F2ZXBvaW50IGxzbGlzdGVuIGxzcmVsZWFzZSBsc2NvbW1pdCBs c25vdGlmeQorCisjIENoZWNrIExJU1RFTiBtZXJnZSBwYXRoIHdoZW4gYm90aCBvdXRlciBh bmQgaW5uZXIgdHJhbnNhY3Rpb25zIGhhdmUgYWN0aW9ucy4KK3Blcm11dGF0aW9uIGxzYmVn aW4gbHNsaXN0ZW5fb3V0ZXIgbHNzYXZlcG9pbnQgbHNsaXN0ZW4gbHNyZWxlYXNlIGxzY29t bWl0IGxzbm90aWZ5CisKKyMgQ2hlY2sgTElTVEVOIGFib3J0IHBhdGggKFJPTExCQUNLIFRP IFNBVkVQT0lOVCBkaXNjYXJkcyBwZW5kaW5nIGFjdGlvbnMpLgorcGVybXV0YXRpb24gbHNi ZWdpbiBsc3NhdmVwb2ludCBsc2xpc3RlbiBsc3JvbGxiYWNrIGxzY29tbWl0IGxzbm90aWZ5 X2NoZWNrCisKKyMgQ2hlY2sgbm90aWZpY2F0aW9uX21hdGNoIGZ1bmN0aW9uICh0cmlnZ2Vy ZWQgYnkgaGFzaCB0YWJsZSBkdXBsaWNhdGUgZGV0ZWN0aW9uKS4KK3Blcm11dGF0aW9uIGxp c3RlbmMgbm90aWZ5X21hbnlfd2l0aF9kdXAKKworIyBDaGVjayBDaGFubmVsSGFzaEFkZExp c3RlbmVyIGFycmF5IGdyb3d0aC4KK3Blcm11dGF0aW9uIGxpc3RlbmMgbGxpc3RlbiBsMmxp c3RlbiBsM2xpc3RlbiBsc2xpc3RlbgorCiAjIENyb3NzLWJhY2tlbmQgbm90aWZpY2F0aW9u IGRlbGl2ZXJ5LiAgV2UgdXNlIGEgInNlbGVjdCAxIiB0byBmb3JjZSB0aGUKICMgbGlzdGVu ZXIgc2Vzc2lvbiB0byBjaGVjayBmb3Igbm90aWZpZXMuICBJbiBwcmluY2lwbGUgd2UgY291 bGQganVzdCB3YWl0CiAjIGZvciBkZWxpdmVyeSwgYnV0IHRoYXQgd291bGQgcmVxdWlyZSBl eHRyYSBzdXBwb3J0IGluIGlzb2xhdGlvbnRlc3RlcgpAQCAtNzMsNiArMTM3LDEwIEBAIHBl cm11dGF0aW9uIGxpc3RlbmMgbGxpc3RlbiBub3RpZnkxIG5vdGlmeTIgbm90aWZ5MyBub3Rp ZnlmIGxjaGVjawogIyBhbmQgbm90aWZ5IHF1ZXVlIGlzIG5vdCBlbXB0eQogcGVybXV0YXRp b24gbDJsaXN0ZW4gbDJiZWdpbiBub3RpZnkxIGxiZWdpbnMgbGxpc3RlbiBsY29tbWl0IGwy Y29tbWl0IGwyc3RvcAogCisjIENoZWNrIHRoYXQgbm90aWZpY2F0aW9ucyBzZW50IGZyb20g YSBiYWNrZW5kIHRoYXQgaGFzIG5vdCBkb25lIExJU1RFTgorIyBhcmUgcHJvcGVybHkgZGVs aXZlcmVkIHRvIGEgbGlzdGVuZXIgaW4gYW5vdGhlciBiYWNrZW5kLgorcGVybXV0YXRpb24g bGNoX2xpc3RlbiBuY2hfbm90aWZ5IGxjaF9jaGVjaworCiAjIFZlcmlmeSB0aGF0IHBnX25v dGlmaWNhdGlvbl9xdWV1ZV91c2FnZSBjb3JyZWN0bHkgcmVwb3J0cyBhIG5vbi16ZXJvIHJl c3VsdCwKICMgYWZ0ZXIgc3VibWl0dGluZyBub3RpZmljYXRpb25zIHdoaWxlIGFub3RoZXIg Y29ubmVjdGlvbiBpcyBsaXN0ZW5pbmcgZm9yCiAjIHRob3NlIG5vdGlmaWNhdGlvbnMgYW5k IHdhaXRpbmcgaW5zaWRlIGFuIGFjdGl2ZSB0cmFuc2FjdGlvbi4gIFdlIGhhdmUgdG8KLS0g CjIuNTAuMQoK --c9e2941be37f430381a9a0b1a7b9285d Content-Disposition: attachment; filename*0="0002-optimize_listen_notify-v20.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0002-optimize=5Flisten=5Fnotify-v20.patch?=" Content-Transfer-Encoding: base64 MDAwMi1vcHRpbWl6ZV9saXN0ZW5fbm90aWZ5LXYyMC5wYXRjaEZyb20gOWU1Yjk4MGVlMmI0 ZjA1NGY0NThjMzA3NzJjOTQ2M2QwOTkzMGZhNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEK RnJvbTogSm9lbCBKYWNvYnNvbiA8am9lbEBjb21waWxlci5vcmc+CkRhdGU6IFR1ZSwgMTQg T2N0IDIwMjUgMDg6MDM6MTkgKzAyMDAKU3ViamVjdDogW1BBVENIIDIvMl0gT3B0aW1pemUg TElTVEVOL05PVElGWSB3aXRoIHNoYXJlZCBjaGFubmVsIG1hcCBhbmQgZGlyZWN0CiBhZHZh bmNlbWVudAoKVGhpcyBwYXRjaCByZXdvcmtzIHRoZSBMSVNURU4vTk9USUZZIHNpZ25hbGlu ZyBwYXRoIHRvIGF2b2lkIHRoZQpsb25nLXN0YW5kaW5nIGluZWZmaWNpZW5jeSB3aGVyZSBl dmVyeSBjb21taXQgd2FrZXMgYWxsIGxpc3RlbmluZwpiYWNrZW5kcyBpbiB0aGUgc2FtZSBk YXRhYmFzZSwgZXZlbiB0aG9zZSB0aGF0IGFyZSBsaXN0ZW5pbmcgb24KY29tcGxldGVseSBk aWZmZXJlbnQgY2hhbm5lbHMuCgpQcm9ibGVtCi0tLS0tLS0KCkF0IHByZXNlbnQsIFNpZ25h bEJhY2tlbmRzIGhhcyBubyBjZW50cmFsIGtub3dsZWRnZSBvZiB3aGljaCBiYWNrZW5kCmxp c3RlbnMgb24gd2hpY2ggY2hhbm5lbC4gV2hlbiBhIGJhY2tlbmQgY29tbWl0cyBhIHRyYW5z YWN0aW9uIHRoYXQKaXNzdWVkIE5PVElGWSwgaXQgc2ltcGx5IGl0ZXJhdGVzIG92ZXIgYWxs IHJlZ2lzdGVyZWQgbGlzdGVuZXJzIGluIHRoZQpzYW1lIGRhdGFiYXNlIGFuZCBzZW5kcyBl YWNoIG9uZSBhIFBST0NTSUdfTk9USUZZX0lOVEVSUlVQVCBzaWduYWwuCgpUaGF0IGJlaGF2 aW9yIGlzIGZpbmUgd2hlbiBhbGwgbGlzdGVuZXJzIGFyZSBvbiB0aGUgc2FtZSBjaGFubmVs LCBidXQKd2hlbiBtYW55IGJhY2tlbmRzIGFyZSBsaXN0ZW5pbmcgb24gZGlmZmVyZW50IGNo YW5uZWxzLCBlYWNoIE5PVElGWQp0cmlnZ2VycyBhIHN0b3JtIG9mIHVubmVjZXNzYXJ5IHdh a2V1cHMgYW5kIGNvbnRleHQgc3dpdGNoZXMuIEFzIHRoZQpudW1iZXIgb2YgaWRsZSBsaXN0 ZW5lcnMgZ3Jvd3MsIHRoaXMgb2Z0ZW4gYmVjb21lcyB0aGUgYm90dGxlbmVjayBhbmQKdGhy b3VnaHB1dCBkcm9wcyBzaGFycGx5LgoKT3ZlcnZpZXcgb2YgdGhlIHNvbHV0aW9uCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbGF6aWx5LWNy ZWF0ZWQgZHluYW1pYyBzaGFyZWQgaGFzaCAoZHNoYXNoKQpiYWNrZWQgYnkgZHluYW1pYyBz aGFyZWQgbWVtb3J5IChEU0EpIHRoYXQgbWFwcyAoZGJvaWQsIGNoYW5uZWwpIHRvCmFycmF5 cyBvZiBsaXN0ZW5pbmcgYmFja2VuZHMgKFByb2NOdW1iZXJzKS4gVGhpcyBhbGxvd3MgdGhl IHNlbmRlciB0bwp0YXJnZXQgb25seSB0aG9zZSBiYWNrZW5kcyBhY3R1YWxseSBsaXN0ZW5p bmcgb24gdGhlIGNoYW5uZWxzIGZvciB3aGljaAppdCBoYXMgcXVldWVkIG5vdGlmaWNhdGlv bnMuCgpBdCBjb21taXQgdGltZToKCiogQXRDb21taXRfTm90aWZ5IHVwZGF0ZXMgdGhlIHNo YXJlZCBjaGFubmVsSGFzaCB0byByZWZsZWN0IGFueSBMSVNURU4KICBvciBVTkxJU1RFTiBh Y3Rpb25zIHBlcmZvcm1lZCBpbiB0aGUgdHJhbnNhY3Rpb24uCiogU2lnbmFsQmFja2VuZHMg Y29uc3VsdHMgdGhpcyBoYXNoIHRvIGZpbmQgdGhlIGJhY2tlbmRzIHRoYXQgYXJlCiAgbGlz dGVuaW5nIG9uIHRoZSBjaGFubmVscyBiZWluZyBub3RpZmllZCBpbiB0aGUgY3VycmVudCBk YXRhYmFzZSwgYW5kCiAgc2lnbmFscyBvbmx5IHRob3NlLgoKRWFjaCBiYWNrZW5kJ3MgZW50 cnkgaW4gQXN5bmNRdWV1ZUNvbnRyb2wgbm93IGluY2x1ZGVzIGEgd2FrZXVwUGVuZGluZwpm bGFnIHRvIHByZXZlbnQgZHVwbGljYXRlIHNpZ25hbHMgd2hpbGUgYSBwcmV2aW91cyB3YWtl dXAgaXMgc3RpbGwgYmVpbmcKcHJvY2Vzc2VkLgoKRGlyZWN0IGFkdmFuY2VtZW50Ci0tLS0t LS0tLS0tLS0tLS0tLQoKQSBmdXJ0aGVyIG9wdGltaXphdGlvbiBhdm9pZHMgc2lnbmFsaW5n IGlkbGUgYmFja2VuZHMgdGhhdCBhcmUgbm90Cmxpc3RlbmluZyBvbiBhbnkgb2YgdGhlIGNo YW5uZWxzIG5vdGlmaWVkIHdpdGhpbiB0aGUgdHJhbnNhY3Rpb24uCgpXaGlsZSBxdWV1aW5n IG5vdGlmaWNhdGlvbnMsIFByZUNvbW1pdF9Ob3RpZnkgcmVjb3JkcyB0aGUgcXVldWUgaGVh ZApwb3NpdGlvbiBib3RoIGJlZm9yZSBhbmQgYWZ0ZXIgd3JpdGluZyBpdHMgbm90aWZpY2F0 aW9ucy4gQmVjYXVzZSBhbGwKd3JpdGVycyBhcmUgc2VyaWFsaXplZCBieSB0aGUgZXhpc3Rp bmcgY2x1c3Rlci13aWRlIGhlYXZ5d2VpZ2h0IGxvY2sgb24KImRhdGFiYXNlIDAiLCBubyBi YWNrZW5kIChmcm9tIGFueSBkYXRhYmFzZSkgY2FuIGluc2VydCBlbnRyaWVzIGJldHdlZW4K dGhvc2UgdHdvIHBvaW50cy4gVGhpcyBndWFyYW50ZWVzIHRoYXQgdGhlIHJlZ2lvbiBbb2xk SGVhZCwgbmV3SGVhZCkKY29udGFpbnMgb25seSB0aGUgZW50cmllcyB3cml0dGVuIGJ5IG91 ciBjb21taXQuCgpTaWduYWxCYWNrZW5kcyB1c2VzIHRoaXMgZmFjdCB0byBkaXJlY3RseSBh ZHZhbmNlIGFueSBiYWNrZW5kIHN0aWxsCnBvc2l0aW9uZWQgYXQgb2xkSGVhZCB1cCB0byBu ZXdIZWFkLCBhdm9pZGluZyBhIG5lZWRsZXNzIHdha2V1cCBmb3IKbGlzdGVuZXJzIHRoYXQg d291bGQgb3RoZXJ3aXNlIG5vdCBmaW5kIGFueSBub3RpZmllcyBvZiBpbnRlcmVzdC4KClF1 ZXVlIGhlYWx0aAotLS0tLS0tLS0tLS0KCklmIGEgYmFja2VuZCBoYXMgZmFsbGVuIHRvbyBm YXIgYmVoaW5kIChsYWcgPj0gUVVFVUVfQ0xFQU5VUF9ERUxBWQpwYWdlcyksIGl0IGlzIHNp Z25hbGVkIHRvIGNhdGNoIHVwIHNvIHRoZSBnbG9iYWwgcXVldWUgdGFpbCBjYW4gYWR2YW5j ZS4KCk90aGVyIG5vdGVzCi0tLS0tLS0tLS0tCgoqIE1haW50YWlucyBkdWFsIGRhdGEgc3Ry dWN0dXJlczogYSBzaGFyZWQgY2hhbm5lbEhhc2ggZm9yIGRldGVybWluaW5nCiAgd2hpY2gg YmFja2VuZHMgdG8gc2lnbmFsLCBhbmQgYSBsb2NhbCBwZXItYmFja2VuZCBsaXN0ZW5DaGFu bmVscyBsaXN0CiAgZm9yIGZhc3QgbG9jay1mcmVlIGxvb2t1cHMgZHVyaW5nIG5vdGlmaWNh dGlvbiBwcm9jZXNzaW5nLiBUaGlzIGF2b2lkcwogIGNvbnRlbnRpb24gb24gdGhlIHNoYXJl ZCBoYXNoIGR1cmluZyB0aGUgaGlnaC1mcmVxdWVuY3kgSXNMaXN0ZW5pbmdPbgogIGNoZWNr cyB0aGF0IG9jY3VyIGZvciBldmVyeSBub3RpZmljYXRpb24gcmVhZCBmcm9tIHRoZSBxdWV1 ZS4KKiBCYWNrZW5kcyByZW1haW4gcmVnaXN0ZXJlZCBpbiB0aGUgZ2xvYmFsIGxpc3RlbmVy IGxpc3QgYXMgbG9uZyBhcwogIGxpc3RlbkNoYW5uZWxzIGlzIG5vbi1lbXB0eS4KKiBBZGRz IExXTG9jayB0cmFuY2hlIE5PVElGWV9DSEFOTkVMX0hBU0ggYW5kIHdhaXQgZXZlbnQKICBO b3RpZnlDaGFubmVsSGFzaCBmb3IgdmlzaWJpbGl0eS4KKiBObyB1c2VyLXZpc2libGUgYmVo YXZpb3JhbCBjaGFuZ2VzOyB0aGlzIGlzIGFuIGludGVybmFsIG9wdGltaXphdGlvbgogIG9u bHkuCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYyAgICAgICAgICAgICAgICAg IHwgNTk4ICsrKysrKysrKysrKysrKystLQogLi4uL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZl bnRfbmFtZXMudHh0ICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2Nr bGlzdC5oICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCAgICAgICAgICAgICAgfCAgIDIgKwogNCBmaWxlcyBjaGFuZ2VkLCA1NTMgaW5z ZXJ0aW9ucygrKSwgNDkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvYXN5bmMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMKaW5kZXgg NGJkMzdkNWJlYjUuLjRlNjU1NmZiOGQxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21t YW5kcy9hc3luYy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMKQEAgLTI0 LDggKzI0LDEwIEBACiAgKgkgIEFsbCBub3RpZmljYXRpb24gbWVzc2FnZXMgYXJlIHBsYWNl ZCBpbiB0aGUgcXVldWUgYW5kIGxhdGVyIHJlYWQgb3V0CiAgKgkgIGJ5IGxpc3RlbmluZyBi YWNrZW5kcy4KICAqCi0gKgkgIFRoZXJlIGlzIG5vIGNlbnRyYWwga25vd2xlZGdlIG9mIHdo aWNoIGJhY2tlbmQgbGlzdGVucyBvbiB3aGljaCBjaGFubmVsOwotICoJICBldmVyeSBiYWNr ZW5kIGhhcyBpdHMgb3duIGxpc3Qgb2YgaW50ZXJlc3RpbmcgY2hhbm5lbHMuCisgKgkgIFdl IGFsc28gbWFpbnRhaW4gYSBkeW5hbWljIHNoYXJlZCBoYXNoIHRhYmxlIChkc2hhc2gpIHRo YXQgbWFwcyBjaGFubmVsCisgKgkgIG5hbWVzIHRvIHRoZSBzZXQgb2YgYmFja2VuZHMgbGlz dGVuaW5nIG9uIGVhY2ggY2hhbm5lbC4gVGhpcyB0YWJsZSBpcworICoJICBjcmVhdGVkIGxh emlseSBvbiB0aGUgZmlyc3QgTElTVEVOIGNvbW1hbmQgYW5kIGdyb3dzIGR5bmFtaWNhbGx5 IGFzCisgKgkgIG5lZWRlZC4KICAqCiAgKgkgIEFsdGhvdWdoIHRoZXJlIGlzIG9ubHkgb25l IHF1ZXVlLCBub3RpZmljYXRpb25zIGFyZSB0cmVhdGVkIGFzIGJlaW5nCiAgKgkgIGRhdGFi YXNlLWxvY2FsOyB0aGlzIGlzIGRvbmUgYnkgaW5jbHVkaW5nIHRoZSBzZW5kZXIncyBkYXRh YmFzZSBPSUQKQEAgLTY4LDE2ICs3MCwyNyBAQAogICoJICBDb21taXRUcmFuc2FjdGlvbigp IHdoaWNoIHdpbGwgdGhlbiBkbyB0aGUgYWN0dWFsIHRyYW5zYWN0aW9uIGNvbW1pdC4KICAq CiAgKgkgIEFmdGVyIGNvbW1pdCB3ZSBhcmUgY2FsbGVkIGFub3RoZXIgdGltZSAoQXRDb21t aXRfTm90aWZ5KCkpLiBIZXJlIHdlCi0gKgkgIG1ha2UgYW55IGFjdHVhbCB1cGRhdGVzIHRv IHRoZSBlZmZlY3RpdmUgbGlzdGVuIHN0YXRlIChsaXN0ZW5DaGFubmVscykuCi0gKgkgIFRo ZW4gd2Ugc2lnbmFsIGFueSBiYWNrZW5kcyB0aGF0IG1heSBiZSBpbnRlcmVzdGVkIGluIG91 ciBtZXNzYWdlcwotICoJICAoaW5jbHVkaW5nIG91ciBvd24gYmFja2VuZCwgaWYgbGlzdGVu aW5nKS4gIFRoaXMgaXMgZG9uZSBieQotICoJICBTaWduYWxCYWNrZW5kcygpLCB3aGljaCBz Y2FucyB0aGUgbGlzdCBvZiBsaXN0ZW5pbmcgYmFja2VuZHMgYW5kIHNlbmRzIGEKLSAqCSAg UFJPQ1NJR19OT1RJRllfSU5URVJSVVBUIHNpZ25hbCB0byBldmVyeSBsaXN0ZW5pbmcgYmFj a2VuZCAod2UgZG9uJ3QKLSAqCSAga25vdyB3aGljaCBiYWNrZW5kIGlzIGxpc3RlbmluZyBv biB3aGljaCBjaGFubmVsIHNvIHdlIG11c3Qgc2lnbmFsIHRoZW0KLSAqCSAgYWxsKS4gIFdl IGNhbiBleGNsdWRlIGJhY2tlbmRzIHRoYXQgYXJlIGFscmVhZHkgdXAgdG8gZGF0ZSwgdGhv dWdoLCBhbmQKLSAqCSAgd2UgY2FuIGFsc28gZXhjbHVkZSBiYWNrZW5kcyB0aGF0IGFyZSBp biBvdGhlciBkYXRhYmFzZXMgKHVubGVzcyB0aGV5Ci0gKgkgIGFyZSB3YXkgYmVoaW5kIGFu ZCBzaG91bGQgYmUga2lja2VkIHRvIG1ha2UgdGhlbSBhZHZhbmNlIHRoZWlyCi0gKgkgIHBv aW50ZXJzKS4KKyAqCSAgbWFrZSBhbnkgYWN0dWFsIHVwZGF0ZXMgdG8gdGhlIGxvY2FsIGxp c3RlbiBzdGF0ZSAobGlzdGVuQ2hhbm5lbHMpIGFuZAorICoJICBzaGFyZWQgY2hhbm5lbCBo YXNoIHRhYmxlIChjaGFubmVsSGFzaCkuICBUaGVuIHdlIHNpZ25hbCBhbnkgYmFja2VuZHMK KyAqCSAgdGhhdCBtYXkgYmUgaW50ZXJlc3RlZCBpbiBvdXIgbWVzc2FnZXMgKGluY2x1ZGlu ZyBvdXIgb3duIGJhY2tlbmQsCisgKgkgIGlmIGxpc3RlbmluZykuICBUaGlzIGlzIGRvbmUg YnkgU2lnbmFsQmFja2VuZHMoKSwgd2hpY2ggY29uc3VsdHMgdGhlCisgKgkgIHNoYXJlZCBj aGFubmVsIGhhc2ggdGFibGUgdG8gaWRlbnRpZnkgbGlzdGVuZXJzIGZvciB0aGUgY2hhbm5l bHMgdGhhdAorICoJICBoYXZlIHBlbmRpbmcgbm90aWZpY2F0aW9ucyBpbiB0aGUgY3VycmVu dCBkYXRhYmFzZS4gIEVhY2ggc2VsZWN0ZWQKKyAqCSAgYmFja2VuZCBpcyBtYXJrZWQgYXMg aGF2aW5nIGEgd2FrZXVwIHBlbmRpbmcgdG8gYXZvaWQgZHVwbGljYXRlIHNpZ25hbHMsCisg KgkgIGFuZCBhIFBST0NTSUdfTk9USUZZX0lOVEVSUlVQVCBzaWduYWwgaXMgc2VudCB0byBp dC4KKyAqCisgKgkgIFdoZW4gd3JpdGluZyBub3RpZmljYXRpb25zLCBQcmVDb21taXRfTm90 aWZ5KCkgcmVjb3JkcyB0aGUgcXVldWUgaGVhZAorICoJICBwb3NpdGlvbiBib3RoIGJlZm9y ZSBhbmQgYWZ0ZXIgdGhlIHdyaXRlLiAgQmVjYXVzZSBhbGwgd3JpdGVycyBzZXJpYWxpemUK KyAqCSAgb24gYSBjbHVzdGVyLXdpZGUgaGVhdnl3ZWlnaHQgbG9jaywgbm8gYmFja2VuZCBj YW4gaW5zZXJ0IGVudHJpZXMgYmV0d2VlbgorICoJICB0aGVzZSB0d28gcG9pbnRzLiAgU2ln bmFsQmFja2VuZHMoKSB1c2VzIHRoaXMgZmFjdCB0byBkaXJlY3RseSBhZHZhbmNlIGFueQor ICoJICBiYWNrZW5kIHRoYXQgaXMgc3RpbGwgcG9zaXRpb25lZCBhdCB0aGUgb2xkIGhlYWQs IGF2b2lkaW5nIHVubmVjZXNzYXJ5CisgKgkgIHdha2V1cHMgZm9yIGlkbGUgbGlzdGVuZXJz IHRoYXQgaGF2ZSBub3RoaW5nIHRvIHJlYWQuCisgKgorICoJICBUbyBtYWludGFpbiBxdWV1 ZSBoZWFsdGgsIFNpZ25hbEJhY2tlbmRzKCkgYWxzbyB3YWtlcyBvbmUgYmFja2VuZAorICoJ ICBwb3NpdGlvbmVkIGF0IHRoZSBnbG9iYWwgcXVldWUgdGFpbCB0byBoZWxwIGFkdmFuY2Ug aXQsIGFuZCBzaWduYWxzCisgKgkgIGFueSBiYWNrZW5kIHRoYXQgaGFzIGZhbGxlbiB0b28g ZmFyIGJlaGluZCB0byBjYXRjaCB1cC4gIFRoZXNlIG1lYXN1cmVzCisgKgkgIHByZXZlbnQg dGhlIG5vdGlmaWNhdGlvbiBxdWV1ZSBmcm9tIGdyb3dpbmcgaW5kZWZpbml0ZWx5LCB3aGls ZSBtb3N0bHkKKyAqCSAgbGltaXRpbmcgd2FrZXVwcyB0byB0aGUgYmFja2VuZHMgdGhhdCBh Y3R1YWxseSBuZWVkIHRoZW0uCiAgKgogICoJICBGaW5hbGx5LCBhZnRlciB3ZSBhcmUgb3V0 IG9mIHRoZSB0cmFuc2FjdGlvbiBhbHRvZ2V0aGVyIGFuZCBhYm91dCB0byBnbwogICoJICBp ZGxlLCB3ZSBzY2FuIHRoZSBxdWV1ZSBmb3IgbWVzc2FnZXMgdGhhdCBuZWVkIHRvIGJlIHNl bnQgdG8gb3VyCkBAIC0xMjgsNiArMTQxLDcgQEAKICNpbmNsdWRlIDxsaW1pdHMuaD4KICNp bmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdHJp bmcuaD4KIAogI2luY2x1ZGUgImFjY2Vzcy9wYXJhbGxlbC5oIgogI2luY2x1ZGUgImFjY2Vz cy9zbHJ1LmgiCkBAIC0xMzcsMTQgKzE1MSwxNyBAQAogI2luY2x1ZGUgImNvbW1hbmRzL2Fz eW5jLmgiCiAjaW5jbHVkZSAiY29tbW9uL2hhc2hmbi5oIgogI2luY2x1ZGUgImZ1bmNhcGku aCIKKyNpbmNsdWRlICJsaWIvZHNoYXNoLmgiCiAjaW5jbHVkZSAibGlicHEvbGlicHEuaCIK ICNpbmNsdWRlICJsaWJwcS9wcWZvcm1hdC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgor I2luY2x1ZGUgInN0b3JhZ2UvZHNtX3JlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9p cGMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3By b2NzaWduYWwuaCIKICNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCiAjaW5jbHVkZSAidXRp bHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9kc2EuaCIKICNpbmNsdWRlICJ1dGls cy9ndWNfaG9va3MuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUg InV0aWxzL3BzX3N0YXR1cy5oIgpAQCAtMTYyLDYgKzE3OSwyOSBAQAogICovCiAjZGVmaW5l IE5PVElGWV9QQVlMT0FEX01BWF9MRU5HVEgJKEJMQ0tTWiAtIE5BTUVEQVRBTEVOIC0gMTI4 KQogCisvKgorICogQ2hhbm5lbCBoYXNoIHRhYmxlIGRlZmluaXRpb25zCisgKgorICogVGhp cyBoYXNoIHRhYmxlIG1hcHMgKGRhdGFiYXNlIE9JRCwgY2hhbm5lbCBuYW1lKSBrZXlzIHRv IGFycmF5cyBvZgorICogUHJvY051bWJlcnMgcmVwcmVzZW50aW5nIHRoZSBiYWNrZW5kcyBs aXN0ZW5pbmcgb24gZWFjaCBjaGFubmVsLgorICovCisKKyNkZWZpbmUgSU5JVElBTF9MSVNU RU5FUlNfQVJSQVlfU0laRSA0CisKK3R5cGVkZWYgc3RydWN0IENoYW5uZWxIYXNoS2V5Cit7 CisJT2lkCQkJZGJvaWQ7CisJY2hhcgkJY2hhbm5lbFtOQU1FREFUQUxFTl07Cit9IENoYW5u ZWxIYXNoS2V5OworCit0eXBlZGVmIHN0cnVjdCBDaGFubmVsRW50cnkKK3sKKwlDaGFubmVs SGFzaEtleSBrZXk7CisJZHNhX3BvaW50ZXIgbGlzdGVuZXJzQXJyYXk7IC8qIERTQSBwb2lu dGVyIHRvIFByb2NOdW1iZXIgYXJyYXkgKi8KKwlpbnQJCQludW1MaXN0ZW5lcnM7CS8qIE51 bWJlciBvZiBsaXN0ZW5lcnMgY3VycmVudGx5IHN0b3JlZCAqLworCWludAkJCWFsbG9jYXRl ZExpc3RlbmVyczsgLyogQWxsb2NhdGVkIHNpemUgb2YgYXJyYXkgKi8KK30gQ2hhbm5lbEVu dHJ5OworCiAvKgogICogU3RydWN0IHJlcHJlc2VudGluZyBhbiBlbnRyeSBpbiB0aGUgZ2xv YmFsIG5vdGlmeSBxdWV1ZQogICoKQEAgLTIyNyw4ICsyNjcsOCBAQCB0eXBlZGVmIHN0cnVj dCBRdWV1ZVBvc2l0aW9uCiAvKgogICogUGFyYW1ldGVyIGRldGVybWluaW5nIGhvdyBvZnRl biB3ZSB0cnkgdG8gYWR2YW5jZSB0aGUgdGFpbCBwb2ludGVyOgogICogd2UgZG8gdGhhdCBh ZnRlciBldmVyeSBRVUVVRV9DTEVBTlVQX0RFTEFZIHBhZ2VzIG9mIE5PVElGWSBkYXRhLiAg VGhpcyBpcwotICogYWxzbyB0aGUgZGlzdGFuY2UgYnkgd2hpY2ggYSBiYWNrZW5kIGluIGFu b3RoZXIgZGF0YWJhc2UgbmVlZHMgdG8gYmUKLSAqIGJlaGluZCBiZWZvcmUgd2UnbGwgZGVj aWRlIHdlIG5lZWQgdG8gd2FrZSBpdCB1cCB0byBhZHZhbmNlIGl0cyBwb2ludGVyLgorICog YWxzbyB0aGUgZGlzdGFuY2UgYnkgd2hpY2ggYSBiYWNrZW5kIG5lZWRzIHRvIGJlIGJlaGlu ZCBiZWZvcmUgd2UnbGwKKyAqIGRlY2lkZSB3ZSBuZWVkIHRvIHdha2UgaXQgdXAgdG8gYWR2 YW5jZSBpdHMgcG9pbnRlci4KICAqCiAgKiBSZXNpc3QgdGhlIHRlbXB0YXRpb24gdG8gbWFr ZSB0aGlzIHJlYWxseSBsYXJnZS4gIFdoaWxlIHRoYXQgd291bGQgc2F2ZQogICogd29yayBp biBzb21lIHBsYWNlcywgaXQgd291bGQgYWRkIGNvc3QgaW4gb3RoZXJzLiAgSW4gcGFydGlj dWxhciwgdGhpcwpAQCAtMjQ2LDYgKzI4Niw3IEBAIHR5cGVkZWYgc3RydWN0IFF1ZXVlQmFj a2VuZFN0YXR1cwogCU9pZAkJCWRib2lkOwkJCS8qIGJhY2tlbmQncyBkYXRhYmFzZSBPSUQs IG9yIEludmFsaWRPaWQgKi8KIAlQcm9jTnVtYmVyCW5leHRMaXN0ZW5lcjsJLyogaWQgb2Yg bmV4dCBsaXN0ZW5lciwgb3IgSU5WQUxJRF9QUk9DX05VTUJFUiAqLwogCVF1ZXVlUG9zaXRp b24gcG9zOwkJCS8qIGJhY2tlbmQgaGFzIHJlYWQgcXVldWUgdXAgdG8gaGVyZSAqLworCWJv b2wJCXdha2V1cFBlbmRpbmc7CS8qIHNpZ25hbCBzZW50IGJ1dCBub3QgeWV0IHByb2Nlc3Nl ZCAqLwogfSBRdWV1ZUJhY2tlbmRTdGF0dXM7CiAKIC8qCkBAIC0yNjAsOSArMzAxLDkgQEAg dHlwZWRlZiBzdHJ1Y3QgUXVldWVCYWNrZW5kU3RhdHVzCiAgKiAoc2luY2Ugbm8gb3RoZXIg YmFja2VuZCB3aWxsIGluc3BlY3QgaXQpLgogICoKICAqIFdoZW4gaG9sZGluZyBOb3RpZnlR dWV1ZUxvY2sgaW4gRVhDTFVTSVZFIG1vZGUsIGJhY2tlbmRzIGNhbiBpbnNwZWN0IHRoZQot ICogZW50cmllcyBvZiBvdGhlciBiYWNrZW5kcyBhbmQgYWxzbyBjaGFuZ2UgdGhlIGhlYWQg cG9pbnRlci4gV2hlbiBob2xkaW5nCi0gKiBib3RoIE5vdGlmeVF1ZXVlTG9jayBhbmQgTm90 aWZ5UXVldWVUYWlsTG9jayBpbiBFWENMVVNJVkUgbW9kZSwgYmFja2VuZHMKLSAqIGNhbiBj aGFuZ2UgdGhlIHRhaWwgcG9pbnRlcnMuCisgKiBlbnRyaWVzIG9mIG90aGVyIGJhY2tlbmRz LCBjaGFuZ2UgdGhlIGhlYWQgcG9pbnRlciwgYW5kIGFkdmFuY2Ugb3RoZXIKKyAqIGJhY2tl bmRzJyBxdWV1ZSBwb3NpdGlvbnMuIFdoZW4gaG9sZGluZyBib3RoIE5vdGlmeVF1ZXVlTG9j ayBhbmQKKyAqIE5vdGlmeVF1ZXVlVGFpbExvY2sgaW4gRVhDTFVTSVZFIG1vZGUsIGJhY2tl bmRzIGNhbiBjaGFuZ2UgdGhlIHRhaWwgcG9pbnRlcnMuCiAgKgogICogU0xSVSBidWZmZXIg cG9vbCBpcyBkaXZpZGVkIGluIGJhbmtzIGFuZCBiYW5rIHdpc2UgU0xSVSBsb2NrIGlzIHVz ZWQgYXMKICAqIHRoZSBjb250cm9sIGxvY2sgZm9yIHRoZSBwZ19ub3RpZnkgU0xSVSBidWZm ZXJzLgpAQCAtMjg4LDExICszMjksMTYgQEAgdHlwZWRlZiBzdHJ1Y3QgQXN5bmNRdWV1ZUNv bnRyb2wKIAlQcm9jTnVtYmVyCWZpcnN0TGlzdGVuZXI7CS8qIGlkIG9mIGZpcnN0IGxpc3Rl bmVyLCBvcgogCQkJCQkJCQkgKiBJTlZBTElEX1BST0NfTlVNQkVSICovCiAJVGltZXN0YW1w VHogbGFzdFF1ZXVlRmlsbFdhcm47CS8qIHRpbWUgb2YgbGFzdCBxdWV1ZS1mdWxsIG1zZyAq LworCWRzYV9oYW5kbGUJY2hhbm5lbEhhc2hEU0E7CisJZHNoYXNoX3RhYmxlX2hhbmRsZSBj aGFubmVsSGFzaERTSDsKIAlRdWV1ZUJhY2tlbmRTdGF0dXMgYmFja2VuZFtGTEVYSUJMRV9B UlJBWV9NRU1CRVJdOwogfSBBc3luY1F1ZXVlQ29udHJvbDsKIAogc3RhdGljIEFzeW5jUXVl dWVDb250cm9sICphc3luY1F1ZXVlQ29udHJvbDsKIAorc3RhdGljIGRzYV9hcmVhICpjaGFu bmVsRFNBID0gTlVMTDsKK3N0YXRpYyBkc2hhc2hfdGFibGUgKmNoYW5uZWxIYXNoID0gTlVM TDsKKwogI2RlZmluZSBRVUVVRV9IRUFECQkJCQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmhlYWQp CiAjZGVmaW5lIFFVRVVFX1RBSUwJCQkJCShhc3luY1F1ZXVlQ29udHJvbC0+dGFpbCkKICNk ZWZpbmUgUVVFVUVfU1RPUF9QQUdFCQkJCShhc3luY1F1ZXVlQ29udHJvbC0+c3RvcFBhZ2Up CkBAIC0zMDEsNiArMzQ3LDcgQEAgc3RhdGljIEFzeW5jUXVldWVDb250cm9sICphc3luY1F1 ZXVlQ29udHJvbDsKICNkZWZpbmUgUVVFVUVfQkFDS0VORF9EQk9JRChpKQkJKGFzeW5jUXVl dWVDb250cm9sLT5iYWNrZW5kW2ldLmRib2lkKQogI2RlZmluZSBRVUVVRV9ORVhUX0xJU1RF TkVSKGkpCQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmJhY2tlbmRbaV0ubmV4dExpc3RlbmVyKQog I2RlZmluZSBRVUVVRV9CQUNLRU5EX1BPUyhpKQkJKGFzeW5jUXVldWVDb250cm9sLT5iYWNr ZW5kW2ldLnBvcykKKyNkZWZpbmUgUVVFVUVfQkFDS0VORF9XQUtFVVBfUEVORElORyhpKQko YXN5bmNRdWV1ZUNvbnRyb2wtPmJhY2tlbmRbaV0ud2FrZXVwUGVuZGluZykKIAogLyoKICAq IFRoZSBTTFJVIGJ1ZmZlciBhcmVhIHRocm91Z2ggd2hpY2ggd2UgYWNjZXNzIHRoZSBub3Rp ZmljYXRpb24gcXVldWUKQEAgLTM5MSw2ICs0MzgsNyBAQCB0eXBlZGVmIHN0cnVjdCBOb3Rp ZmljYXRpb25MaXN0CiAJaW50CQkJbmVzdGluZ0xldmVsOwkvKiBjdXJyZW50IHRyYW5zYWN0 aW9uIG5lc3RpbmcgZGVwdGggKi8KIAlMaXN0CSAgICpldmVudHM7CQkJLyogbGlzdCBvZiBO b3RpZmljYXRpb24gc3RydWN0cyAqLwogCUhUQUIJICAgKmhhc2h0YWI7CQkvKiBoYXNoIG9m IE5vdGlmaWNhdGlvbkhhc2ggc3RydWN0cywgb3IgTlVMTCAqLworCUhUQUIJICAgKmNoYW5u ZWxIYXNodGFiOyAvKiBoYXNoIG9mIHVuaXF1ZSBjaGFubmVsIG5hbWVzLCBvciBOVUxMICov CiAJc3RydWN0IE5vdGlmaWNhdGlvbkxpc3QgKnVwcGVyOyAvKiBkZXRhaWxzIGZvciB1cHBl ciB0cmFuc2FjdGlvbiBsZXZlbHMgKi8KIH0gTm90aWZpY2F0aW9uTGlzdDsKIApAQCAtNDAx LDYgKzQ0OSwxMSBAQCBzdHJ1Y3QgTm90aWZpY2F0aW9uSGFzaAogCU5vdGlmaWNhdGlvbiAq ZXZlbnQ7CQkvKiA9PiB0aGUgYWN0dWFsIE5vdGlmaWNhdGlvbiBzdHJ1Y3QgKi8KIH07CiAK K3N0cnVjdCBDaGFubmVsSGFzaAoreworCWNoYXIJCWNoYW5uZWxbTkFNRURBVEFMRU5dOwor fTsKKwogc3RhdGljIE5vdGlmaWNhdGlvbkxpc3QgKnBlbmRpbmdOb3RpZmllcyA9IE5VTEw7 CiAKIC8qCkBAIC00MTgsNiArNDcxLDIwIEBAIHN0YXRpYyBib29sIHVubGlzdGVuRXhpdFJl Z2lzdGVyZWQgPSBmYWxzZTsKIC8qIFRydWUgaWYgd2UncmUgY3VycmVudGx5IHJlZ2lzdGVy ZWQgYXMgYSBsaXN0ZW5lciBpbiBhc3luY1F1ZXVlQ29udHJvbCAqLwogc3RhdGljIGJvb2wg YW1SZWdpc3RlcmVkTGlzdGVuZXIgPSBmYWxzZTsKIAorLyoKKyAqIFF1ZXVlIGhlYWQgcG9z aXRpb25zIGZvciBkaXJlY3QgYWR2YW5jZW1lbnQuCisgKiBUaGVzZSBhcmUgY2FwdHVyZWQg ZHVyaW5nIFByZUNvbW1pdF9Ob3RpZnkgd2hpbGUgaG9sZGluZyB0aGUgaGVhdnl3ZWlnaHQK KyAqIGxvY2sgb24gZGF0YWJhc2UgMCwgZW5zdXJpbmcgbm8gb3RoZXIgYmFja2VuZCBjYW4g aW5zZXJ0IG5vdGlmaWNhdGlvbnMKKyAqIGJldHdlZW4gdGhlbS4gIFNpZ25hbEJhY2tlbmRz IHVzZXMgdGhlc2UgdG8gYWR2YW5jZSBpZGxlIGJhY2tlbmRzLgorICovCitzdGF0aWMgUXVl dWVQb3NpdGlvbiBxdWV1ZUhlYWRCZWZvcmVXcml0ZTsKK3N0YXRpYyBRdWV1ZVBvc2l0aW9u IHF1ZXVlSGVhZEFmdGVyV3JpdGU7CisKKy8qCisgKiBMaXN0IG9mIGNoYW5uZWxzIHdpdGgg cGVuZGluZyBub3RpZmljYXRpb25zIGluIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLgorICov CitzdGF0aWMgTGlzdCAqcGVuZGluZ05vdGlmeUNoYW5uZWxzID0gTklMOworCiAvKiBoYXZl IHdlIGFkdmFuY2VkIHRvIGEgcGFnZSB0aGF0J3MgYSBtdWx0aXBsZSBvZiBRVUVVRV9DTEVB TlVQX0RFTEFZPyAqLwogc3RhdGljIGJvb2wgdHJ5QWR2YW5jZVRhaWwgPSBmYWxzZTsKIApA QCAtNDU3LDYgKzUyNCw5IEBAIHN0YXRpYyB2b2lkIEFkZEV2ZW50VG9QZW5kaW5nTm90aWZp ZXMoTm90aWZpY2F0aW9uICpuKTsKIHN0YXRpYyB1aW50MzIgbm90aWZpY2F0aW9uX2hhc2go Y29uc3Qgdm9pZCAqa2V5LCBTaXplIGtleXNpemUpOwogc3RhdGljIGludAlub3RpZmljYXRp b25fbWF0Y2goY29uc3Qgdm9pZCAqa2V5MSwgY29uc3Qgdm9pZCAqa2V5MiwgU2l6ZSBrZXlz aXplKTsKIHN0YXRpYyB2b2lkIENsZWFyUGVuZGluZ0FjdGlvbnNBbmROb3RpZmllcyh2b2lk KTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBDaGFubmVsSGFzaFByZXBhcmVLZXkoQ2hhbm5lbEhh c2hLZXkgKmtleSwgT2lkIGRib2lkLCBjb25zdCBjaGFyICpjaGFubmVsKTsKK3N0YXRpYyBk c2hhc2hfaGFzaCBjaGFubmVsSGFzaEZ1bmMoY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qgc2l6 ZSwgdm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIGluaXRDaGFubmVsSGFzaCh2b2lkKTsKIAog LyoKICAqIENvbXB1dGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gcXVldWUgcGFnZSBu dW1iZXJzLgpAQCAtNDc4LDYgKzU0OCw4MCBAQCBhc3luY1F1ZXVlUGFnZVByZWNlZGVzKGlu dDY0IHAsIGludDY0IHEpCiAJcmV0dXJuIHAgPCBxOwogfQogCisvKgorICogY2hhbm5lbEhh c2hGdW5jCisgKgkJSGFzaCBmdW5jdGlvbiBmb3IgY2hhbm5lbCBrZXlzLgorICovCitzdGF0 aWMgZHNoYXNoX2hhc2gKK2NoYW5uZWxIYXNoRnVuYyhjb25zdCB2b2lkICprZXksIHNpemVf dCBzaXplLCB2b2lkICphcmcpCit7CisJY29uc3QgQ2hhbm5lbEhhc2hLZXkgKmsgPSAoY29u c3QgQ2hhbm5lbEhhc2hLZXkgKikga2V5OworCWRzaGFzaF9oYXNoIGg7CisKKwloID0gRGF0 dW1HZXRVSW50MzIoaGFzaF91aW50MzIoay0+ZGJvaWQpKTsKKwloIF49IERhdHVtR2V0VUlu dDMyKGhhc2hfYW55KChjb25zdCB1bnNpZ25lZCBjaGFyICopIGstPmNoYW5uZWwsCisJCQkJ CQkJCSBzdHJubGVuKGstPmNoYW5uZWwsIE5BTUVEQVRBTEVOKSkpOworCisJcmV0dXJuIGg7 Cit9CisKKy8qIHBhcmFtZXRlcnMgZm9yIHRoZSBjaGFubmVsIGhhc2ggdGFibGUgKi8KK3N0 YXRpYyBjb25zdCBkc2hhc2hfcGFyYW1ldGVycyBjaGFubmVsRFNIUGFyYW1zID0geworCXNp emVvZihDaGFubmVsSGFzaEtleSksCisJc2l6ZW9mKENoYW5uZWxFbnRyeSksCisJZHNoYXNo X21lbWNtcCwKKwljaGFubmVsSGFzaEZ1bmMsCisJZHNoYXNoX21lbWNweSwKKwlMV1RSQU5D SEVfTk9USUZZX0NIQU5ORUxfSEFTSAorfTsKKworLyoKKyAqIGluaXRDaGFubmVsSGFzaAor ICoJCUxhenkgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGNoYW5uZWwgaGFzaCB0YWJsZS4KKyAq Lworc3RhdGljIHZvaWQKK2luaXRDaGFubmVsSGFzaCh2b2lkKQoreworCU1lbW9yeUNvbnRl eHQgb2xkY29udGV4dDsKKworCS8qIFF1aWNrIGV4aXQgaWYgd2UgYWxyZWFkeSBkaWQgdGhp cyAqLworCWlmIChhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhhc2hEU0ggIT0gRFNIQVNI X0hBTkRMRV9JTlZBTElEICYmCisJCWNoYW5uZWxIYXNoICE9IE5VTEwpCisJCXJldHVybjsK KworCS8qIE90aGVyd2lzZSwgdXNlIGEgbG9jayB0byBlbnN1cmUgb25seSBvbmUgcHJvY2Vz cyBjcmVhdGVzIHRoZSB0YWJsZSAqLworCUxXTG9ja0FjcXVpcmUoTm90aWZ5UXVldWVMb2Nr LCBMV19FWENMVVNJVkUpOworCisJLyogQmUgc3VyZSBhbnkgbG9jYWwgbWVtb3J5IGFsbG9j YXRlZCBieSBEU0Egcm91dGluZXMgaXMgcGVyc2lzdGVudCAqLworCW9sZGNvbnRleHQgPSBN ZW1vcnlDb250ZXh0U3dpdGNoVG8oVG9wTWVtb3J5Q29udGV4dCk7CisKKwlpZiAoYXN5bmNR dWV1ZUNvbnRyb2wtPmNoYW5uZWxIYXNoRFNIID09IERTSEFTSF9IQU5ETEVfSU5WQUxJRCkK Kwl7CisJCS8qIEluaXRpYWxpemUgZHluYW1pYyBzaGFyZWQgaGFzaCB0YWJsZSBmb3IgY2hh bm5lbCBoYXNoICovCisJCWNoYW5uZWxEU0EgPSBkc2FfY3JlYXRlKExXVFJBTkNIRV9OT1RJ RllfQ0hBTk5FTF9IQVNIKTsKKwkJZHNhX3BpbihjaGFubmVsRFNBKTsKKwkJZHNhX3Bpbl9t YXBwaW5nKGNoYW5uZWxEU0EpOworCQljaGFubmVsSGFzaCA9IGRzaGFzaF9jcmVhdGUoY2hh bm5lbERTQSwgJmNoYW5uZWxEU0hQYXJhbXMsIE5VTEwpOworCisJCS8qIFN0b3JlIGhhbmRs ZXMgaW4gc2hhcmVkIG1lbW9yeSBmb3Igb3RoZXIgYmFja2VuZHMgdG8gdXNlICovCisJCWFz eW5jUXVldWVDb250cm9sLT5jaGFubmVsSGFzaERTQSA9IGRzYV9nZXRfaGFuZGxlKGNoYW5u ZWxEU0EpOworCQlhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhhc2hEU0ggPQorCQkJZHNo YXNoX2dldF9oYXNoX3RhYmxlX2hhbmRsZShjaGFubmVsSGFzaCk7CisJfQorCWVsc2UgaWYg KCFjaGFubmVsSGFzaCkKKwl7CisJCS8qIEF0dGFjaCB0byBleGlzdGluZyBkeW5hbWljIHNo YXJlZCBoYXNoIHRhYmxlICovCisJCWNoYW5uZWxEU0EgPSBkc2FfYXR0YWNoKGFzeW5jUXVl dWVDb250cm9sLT5jaGFubmVsSGFzaERTQSk7CisJCWRzYV9waW5fbWFwcGluZyhjaGFubmVs RFNBKTsKKwkJY2hhbm5lbEhhc2ggPSBkc2hhc2hfYXR0YWNoKGNoYW5uZWxEU0EsICZjaGFu bmVsRFNIUGFyYW1zLAorCQkJCQkJCQkJYXN5bmNRdWV1ZUNvbnRyb2wtPmNoYW5uZWxIYXNo RFNILAorCQkJCQkJCQkJTlVMTCk7CisJfQorCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZGNvbnRleHQpOworCUxXTG9ja1JlbGVhc2UoTm90aWZ5UXVldWVMb2NrKTsKK30KKwogLyoK ICAqIFJlcG9ydCBzcGFjZSBuZWVkZWQgZm9yIG91ciBzaGFyZWQgbWVtb3J5IGFyZWEKICAq LwpAQCAtNTIxLDEyICs2NjUsMTYgQEAgQXN5bmNTaG1lbUluaXQodm9pZCkKIAkJUVVFVUVf U1RPUF9QQUdFID0gMDsKIAkJUVVFVUVfRklSU1RfTElTVEVORVIgPSBJTlZBTElEX1BST0Nf TlVNQkVSOwogCQlhc3luY1F1ZXVlQ29udHJvbC0+bGFzdFF1ZXVlRmlsbFdhcm4gPSAwOwor CQlhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhhc2hEU0EgPSBEU0FfSEFORExFX0lOVkFM SUQ7CisJCWFzeW5jUXVldWVDb250cm9sLT5jaGFubmVsSGFzaERTSCA9IERTSEFTSF9IQU5E TEVfSU5WQUxJRDsKKwogCQlmb3IgKGludCBpID0gMDsgaSA8IE1heEJhY2tlbmRzOyBpKysp CiAJCXsKIAkJCVFVRVVFX0JBQ0tFTkRfUElEKGkpID0gSW52YWxpZFBpZDsKIAkJCVFVRVVF X0JBQ0tFTkRfREJPSUQoaSkgPSBJbnZhbGlkT2lkOwogCQkJUVVFVUVfTkVYVF9MSVNURU5F UihpKSA9IElOVkFMSURfUFJPQ19OVU1CRVI7CiAJCQlTRVRfUVVFVUVfUE9TKFFVRVVFX0JB Q0tFTkRfUE9TKGkpLCAwLCAwKTsKKwkJCVFVRVVFX0JBQ0tFTkRfV0FLRVVQX1BFTkRJTkco aSkgPSBmYWxzZTsKIAkJfQogCX0KIApAQCAtNjU3LDYgKzgwNSw3IEBAIEFzeW5jX05vdGlm eShjb25zdCBjaGFyICpjaGFubmVsLCBjb25zdCBjaGFyICpwYXlsb2FkKQogCQlub3RpZmll cy0+ZXZlbnRzID0gbGlzdF9tYWtlMShuKTsKIAkJLyogV2UgY2VydGFpbmx5IGRvbid0IG5l ZWQgYSBoYXNodGFibGUgeWV0ICovCiAJCW5vdGlmaWVzLT5oYXNodGFiID0gTlVMTDsKKwkJ bm90aWZpZXMtPmNoYW5uZWxIYXNodGFiID0gTlVMTDsKIAkJbm90aWZpZXMtPnVwcGVyID0g cGVuZGluZ05vdGlmaWVzOwogCQlwZW5kaW5nTm90aWZpZXMgPSBub3RpZmllczsKIAl9CkBA IC04OTQsNiArMTA0MywzNiBAQCBQcmVDb21taXRfTm90aWZ5KHZvaWQpCiAJaWYgKHBlbmRp bmdOb3RpZmllcykKIAl7CiAJCUxpc3RDZWxsICAgKm5leHROb3RpZnk7CisJCWJvb2wJCWZp cnN0SXRlcmF0aW9uID0gdHJ1ZTsKKworCQkvKgorCQkgKiBCdWlsZCBsaXN0IG9mIHVuaXF1 ZSBjaGFubmVscyBmb3IgU2lnbmFsQmFja2VuZHMoKS4KKwkJICoKKwkJICogSWYgd2UgaGF2 ZSBhIGNoYW5uZWxIYXNodGFiLCB1c2UgaXQgdG8gZWZmaWNpZW50bHkgZ2V0IHRoZSB1bmlx dWUKKwkJICogY2hhbm5lbHMuICBPdGhlcndpc2UsIGZhbGwgYmFjayB0byB0aGUgbGluZWFy IGFwcHJvYWNoLgorCQkgKi8KKwkJcGVuZGluZ05vdGlmeUNoYW5uZWxzID0gTklMOworCQlp ZiAocGVuZGluZ05vdGlmaWVzLT5jaGFubmVsSGFzaHRhYiAhPSBOVUxMKQorCQl7CisJCQlI QVNIX1NFUV9TVEFUVVMgc3RhdHVzOworCQkJc3RydWN0IENoYW5uZWxIYXNoICpjaGFubmVs RW50cnk7CisKKwkJCWhhc2hfc2VxX2luaXQoJnN0YXR1cywgcGVuZGluZ05vdGlmaWVzLT5j aGFubmVsSGFzaHRhYik7CisJCQl3aGlsZSAoKGNoYW5uZWxFbnRyeSA9IChzdHJ1Y3QgQ2hh bm5lbEhhc2ggKikgaGFzaF9zZXFfc2VhcmNoKCZzdGF0dXMpKSAhPSBOVUxMKQorCQkJCXBl bmRpbmdOb3RpZnlDaGFubmVscyA9IGxhcHBlbmQocGVuZGluZ05vdGlmeUNoYW5uZWxzLCBj aGFubmVsRW50cnktPmNoYW5uZWwpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogTGluZWFy IGFwcHJvYWNoIGZvciBzbWFsbCBudW1iZXIgb2Ygbm90aWZpY2F0aW9ucyAqLworCQkJZm9y ZWFjaF9wdHIoTm90aWZpY2F0aW9uLCBuLCBwZW5kaW5nTm90aWZpZXMtPmV2ZW50cykKKwkJ CXsKKwkJCQljaGFyCSAgICpjaGFubmVsID0gbi0+ZGF0YTsKKworCQkJCS8qIEFkZCBpZiBu b3QgYWxyZWFkeSBpbiBsaXN0ICovCisJCQkJaWYgKCFsaXN0X21lbWJlcl9wdHIocGVuZGlu Z05vdGlmeUNoYW5uZWxzLCBjaGFubmVsKSkKKwkJCQkJcGVuZGluZ05vdGlmeUNoYW5uZWxz ID0gbGFwcGVuZChwZW5kaW5nTm90aWZ5Q2hhbm5lbHMsIGNoYW5uZWwpOworCQkJfQorCQl9 CiAKIAkJLyoKIAkJICogTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhbiBYSUQgYXNzaWduZWQg dG8gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCkBAIC05MjEsNiArMTEwMCwyMSBAQCBQcmVD b21taXRfTm90aWZ5KHZvaWQpCiAJCSAqLwogCQlMb2NrU2hhcmVkT2JqZWN0KERhdGFiYXNl UmVsYXRpb25JZCwgSW52YWxpZE9pZCwgMCwKIAkJCQkJCSBBY2Nlc3NFeGNsdXNpdmVMb2Nr KTsKKwkJLyoKKwkJICogRm9yIHRoZSBkaXJlY3QgYWR2YW5jZW1lbnQgb3B0aW1pemF0aW9u IGluIFNpZ25hbEJhY2tlbmRzKCksIHdlCisJCSAqIG5lZWQgdG8gZW5zdXJlIHRoYXQgbm8g b3RoZXIgYmFja2VuZCBjYW4gaW5zZXJ0IHF1ZXVlIGVudHJpZXMKKwkJICogYmV0d2VlbiBx dWV1ZUhlYWRCZWZvcmVXcml0ZSBhbmQgcXVldWVIZWFkQWZ0ZXJXcml0ZS4gIFRoZQorCQkg KiBoZWF2eXdlaWdodCBsb2NrIGFib3ZlIHByb3ZpZGVzIHRoaXMgZ3VhcmFudGVlLCBzaW5j ZSBpdCBzZXJpYWxpemVzCisJCSAqIGFsbCB3cml0ZXJzLgorCQkgKgorCQkgKiBOb3RlOiBp ZiB0aGUgaGVhdnl3ZWlnaHQgbG9jayB3ZXJlIGV2ZXIgcmVtb3ZlZCBmb3Igc2NhbGFiaWxp dHkKKwkJICogcmVhc29ucywgd2UgY291bGQgYWNoaWV2ZSB0aGUgc2FtZSBndWFyYW50ZWUg YnkgaG9sZGluZworCQkgKiBOb3RpZnlRdWV1ZUxvY2sgaW4gRVhDTFVTSVZFIG1vZGUgYWNy b3NzIGFsbCBvdXIgaW5zZXJ0aW9ucywgcmF0aGVyCisJCSAqIHRoYW4gcmVsZWFzaW5nIGFu ZCByZWFjcXVpcmluZyBpdCBmb3IgZWFjaCBwYWdlIGFzIHdlIGRvIGJlbG93LgorCQkgKi8K KworCQkvKiBJbml0aWFsaXplIHF1ZXVlSGVhZEJlZm9yZVdyaXRlIHRvIGEgc2FmZSBkZWZh dWx0ICovCisJCVNFVF9RVUVVRV9QT1MocXVldWVIZWFkQmVmb3JlV3JpdGUsIDAsIDApOwog CiAJCS8qIE5vdyBwdXNoIHRoZSBub3RpZmljYXRpb25zIGludG8gdGhlIHF1ZXVlICovCiAJ CW5leHROb3RpZnkgPSBsaXN0X2hlYWQocGVuZGluZ05vdGlmaWVzLT5ldmVudHMpOwpAQCAt OTM5LDEyICsxMTMzLDMzIEBAIFByZUNvbW1pdF9Ob3RpZnkodm9pZCkKIAkJCSAqIHBvaW50 IGluIHRpbWUgd2UgY2FuIHN0aWxsIHJvbGwgdGhlIHRyYW5zYWN0aW9uIGJhY2suCiAJCQkg Ki8KIAkJCUxXTG9ja0FjcXVpcmUoTm90aWZ5UXVldWVMb2NrLCBMV19FWENMVVNJVkUpOwor CisJCQkvKgorCQkJICogT24gdGhlIGZpcnN0IGl0ZXJhdGlvbiwgc2F2ZSB0aGUgcXVldWUg aGVhZCBwb3NpdGlvbiBiZWZvcmUgd2UKKwkJCSAqIHdyaXRlIGFueSBub3RpZmljYXRpb25z LiAgVGhpcyBpcyB1c2VkIGJ5IFNpZ25hbEJhY2tlbmRzKCkgdG8KKwkJCSAqIGlkZW50aWZ5 IGJhY2tlbmRzIHRoYXQgY2FuIGJlIGFkdmFuY2VkIGRpcmVjdGx5IHdpdGhvdXQgd2FraW5n CisJCQkgKiB0aGVtIHVwLgorCQkJICovCisJCQlpZiAoZmlyc3RJdGVyYXRpb24pCisJCQl7 CisJCQkJcXVldWVIZWFkQmVmb3JlV3JpdGUgPSBRVUVVRV9IRUFEOworCQkJCWZpcnN0SXRl cmF0aW9uID0gZmFsc2U7CisJCQl9CisKIAkJCWFzeW5jUXVldWVGaWxsV2FybmluZygpOwog CQkJaWYgKGFzeW5jUXVldWVJc0Z1bGwoKSkKIAkJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkJ KGVycmNvZGUoRVJSQ09ERV9QUk9HUkFNX0xJTUlUX0VYQ0VFREVEKSwKIAkJCQkJCSBlcnJt c2coInRvbyBtYW55IG5vdGlmaWNhdGlvbnMgaW4gdGhlIE5PVElGWSBxdWV1ZSIpKSk7CiAJ CQluZXh0Tm90aWZ5ID0gYXN5bmNRdWV1ZUFkZEVudHJpZXMobmV4dE5vdGlmeSk7CisKKwkJ CS8qCisJCQkgKiBDYXB0dXJlIHRoZSBxdWV1ZSBoZWFkIGFmdGVyIGVhY2ggYmF0Y2ggb2Yg ZW50cmllcy4gIE9uIHRoZQorCQkJICogbGFzdCBpdGVyYXRpb24sIHRoaXMgZ2l2ZXMgdXMg dGhlIGZpbmFsIHF1ZXVlIGhlYWQgcG9zaXRpb24gZm9yCisJCQkgKiBTaWduYWxCYWNrZW5k cygpIHRvIHVzZSB3aGVuIGFkdmFuY2luZyBpZGxlIGJhY2tlbmRzLgorCQkJICovCisJCQlx dWV1ZUhlYWRBZnRlcldyaXRlID0gUVVFVUVfSEVBRDsKKwogCQkJTFdMb2NrUmVsZWFzZShO b3RpZnlRdWV1ZUxvY2spOwogCQl9CiAKQEAgLTExMzUsNiArMTM1MCwxMCBAQCBFeGVjX0xp c3RlblByZUNvbW1pdCh2b2lkKQogc3RhdGljIHZvaWQKIEV4ZWNfTGlzdGVuQ29tbWl0KGNv bnN0IGNoYXIgKmNoYW5uZWwpCiB7CisJQ2hhbm5lbEhhc2hLZXkga2V5OworCUNoYW5uZWxF bnRyeSAqZW50cnk7CisJYm9vbAkJZm91bmQ7CisJUHJvY051bWJlciAqbGlzdGVuZXJzOwog CU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKIAogCS8qIERvIG5vdGhpbmcgaWYgd2UgYXJl IGFscmVhZHkgbGlzdGVuaW5nIG9uIHRoaXMgY2hhbm5lbCAqLwpAQCAtMTE1MiwyMSArMTM3 MSw4NCBAQCBFeGVjX0xpc3RlbkNvbW1pdChjb25zdCBjaGFyICpjaGFubmVsKQogCW9sZGNv bnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oVG9wTWVtb3J5Q29udGV4dCk7CiAJbGlz dGVuQ2hhbm5lbHMgPSBsYXBwZW5kKGxpc3RlbkNoYW5uZWxzLCBwc3RyZHVwKGNoYW5uZWwp KTsKIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisKKwkvKiBOb3cgdXBk YXRlIHRoZSBzaGFyZWQgY2hhbm5lbEhhc2ggZm9yIFNpZ25hbEJhY2tlbmRzKCkgdG8gdXNl ICovCisJaW5pdENoYW5uZWxIYXNoKCk7CisKKwlDaGFubmVsSGFzaFByZXBhcmVLZXkoJmtl eSwgTXlEYXRhYmFzZUlkLCBjaGFubmVsKTsKKworCS8qCisJICogRm9yIG5ldyBlbnRyaWVz LCB3ZSBpbml0aWFsaXplIGxpc3RlbmVyc0FycmF5IHRvIEludmFsaWREc2FQb2ludGVyIGFz IGEKKwkgKiBtYXJrZXIuIFRoaXMgaGFuZGxlcyBib3RoIHRoZSBpbml0aWFsIGNyZWF0aW9u IGFuZCBwb3RlbnRpYWwgcmV0cnkKKwkgKiBhZnRlciBPT00uCisJICovCisJZW50cnkgPSBk c2hhc2hfZmluZF9vcl9pbnNlcnQoY2hhbm5lbEhhc2gsICZrZXksICZmb3VuZCk7CisKKwlp ZiAoIWZvdW5kKQorCQllbnRyeS0+bGlzdGVuZXJzQXJyYXkgPSBJbnZhbGlkRHNhUG9pbnRl cjsKKworCWlmICghRHNhUG9pbnRlcklzVmFsaWQoZW50cnktPmxpc3RlbmVyc0FycmF5KSkK Kwl7CisJCS8qIEZpcnN0IGxpc3RlbmVyIGZvciB0aGlzIGNoYW5uZWwgKi8KKwkJZW50cnkt Pmxpc3RlbmVyc0FycmF5ID0gZHNhX2FsbG9jYXRlKGNoYW5uZWxEU0EsCisJCQkJCQkJCQkJ CSBzaXplb2YoUHJvY051bWJlcikgKiBJTklUSUFMX0xJU1RFTkVSU19BUlJBWV9TSVpFKTsK KwkJZW50cnktPm51bUxpc3RlbmVycyA9IDA7CisJCWVudHJ5LT5hbGxvY2F0ZWRMaXN0ZW5l cnMgPSBJTklUSUFMX0xJU1RFTkVSU19BUlJBWV9TSVpFOworCX0KKworCWxpc3RlbmVycyA9 IChQcm9jTnVtYmVyICopIGRzYV9nZXRfYWRkcmVzcyhjaGFubmVsRFNBLAorCQkJCQkJCQkJ CQkgICBlbnRyeS0+bGlzdGVuZXJzQXJyYXkpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBl bnRyeS0+bnVtTGlzdGVuZXJzOyBpKyspCisJeworCQlpZiAobGlzdGVuZXJzW2ldID09IE15 UHJvY051bWJlcikKKwkJeworCQkJZHNoYXNoX3JlbGVhc2VfbG9jayhjaGFubmVsSGFzaCwg ZW50cnkpOworCQkJcmV0dXJuOwkJCQkvKiBBbHJlYWR5IHJlZ2lzdGVyZWQgKi8KKwkJfQor CX0KKworCWlmIChlbnRyeS0+bnVtTGlzdGVuZXJzID49IGVudHJ5LT5hbGxvY2F0ZWRMaXN0 ZW5lcnMpCisJeworCQlpbnQJCQluZXdfc2l6ZSA9IGVudHJ5LT5hbGxvY2F0ZWRMaXN0ZW5l cnMgKiAyOworCQlkc2FfcG9pbnRlciBuZXdfYXJyYXkgPSBkc2FfYWxsb2NhdGUoY2hhbm5l bERTQSwKKwkJCQkJCQkJCQkJIHNpemVvZihQcm9jTnVtYmVyKSAqIG5ld19zaXplKTsKKwkJ UHJvY051bWJlciAqbmV3X2xpc3RlbmVycyA9IChQcm9jTnVtYmVyICopIGRzYV9nZXRfYWRk cmVzcyhjaGFubmVsRFNBLAorCQkJCQkJCQkJCQkJCQkJCSAgIG5ld19hcnJheSk7CisKKwkJ bWVtY3B5KG5ld19saXN0ZW5lcnMsIGxpc3RlbmVycywKKwkJCSAgIHNpemVvZihQcm9jTnVt YmVyKSAqIGVudHJ5LT5udW1MaXN0ZW5lcnMpOworCisJCWRzYV9mcmVlKGNoYW5uZWxEU0Es IGVudHJ5LT5saXN0ZW5lcnNBcnJheSk7CisJCWVudHJ5LT5saXN0ZW5lcnNBcnJheSA9IG5l d19hcnJheTsKKwkJZW50cnktPmFsbG9jYXRlZExpc3RlbmVycyA9IG5ld19zaXplOworCQls aXN0ZW5lcnMgPSBuZXdfbGlzdGVuZXJzOworCX0KKworCWxpc3RlbmVyc1tlbnRyeS0+bnVt TGlzdGVuZXJzXSA9IE15UHJvY051bWJlcjsKKwllbnRyeS0+bnVtTGlzdGVuZXJzKys7CisK Kwlkc2hhc2hfcmVsZWFzZV9sb2NrKGNoYW5uZWxIYXNoLCBlbnRyeSk7CiB9CiAKIC8qCiAg KiBFeGVjX1VubGlzdGVuQ29tbWl0IC0tLSBzdWJyb3V0aW5lIGZvciBBdENvbW1pdF9Ob3Rp ZnkKICAqCi0gKiBSZW1vdmUgdGhlIHNwZWNpZmllZCBjaGFubmVsIG5hbWUgZnJvbSBsaXN0 ZW5DaGFubmVscy4KKyAqIFJlbW92ZSB0aGUgc3BlY2lmaWVkIGNoYW5uZWwgZnJvbSB0aGUg bGlzdCBvZiBjaGFubmVscyB3ZSBhcmUgbGlzdGVuaW5nIG9uLgogICovCiBzdGF0aWMgdm9p ZAogRXhlY19Vbmxpc3RlbkNvbW1pdChjb25zdCBjaGFyICpjaGFubmVsKQogeworCUNoYW5u ZWxIYXNoS2V5IGtleTsKKwlDaGFubmVsRW50cnkgKmVudHJ5OworCVByb2NOdW1iZXIgKmxp c3RlbmVyczsKIAlMaXN0Q2VsbCAgICpxOworCWludAkJCWk7CiAKIAlpZiAoVHJhY2Vfbm90 aWZ5KQogCQllbG9nKERFQlVHMSwgIkV4ZWNfVW5saXN0ZW5Db21taXQoJXMsJWQpIiwgY2hh bm5lbCwgTXlQcm9jUGlkKTsKIAorCS8qIFJlbW92ZSBmcm9tIG91ciBsb2NhbCBjYWNoZSAq LwogCWZvcmVhY2gocSwgbGlzdGVuQ2hhbm5lbHMpCiAJewogCQljaGFyCSAgICpsY2hhbiA9 IChjaGFyICopIGxmaXJzdChxKTsKQEAgLTExNzksNiArMTQ2MSw0NiBAQCBFeGVjX1VubGlz dGVuQ29tbWl0KGNvbnN0IGNoYXIgKmNoYW5uZWwpCiAJCX0KIAl9CiAKKwkvKiBOb3cgcmVt b3ZlIGZyb20gdGhlIHNoYXJlZCBjaGFubmVsSGFzaCAqLworCWlmIChjaGFubmVsSGFzaCA9 PSBOVUxMKQorCQlyZXR1cm47CisKKwlDaGFubmVsSGFzaFByZXBhcmVLZXkoJmtleSwgTXlE YXRhYmFzZUlkLCBjaGFubmVsKTsKKworCS8qIExvb2sgdXAgdGhlIGNoYW5uZWwgd2l0aCBl eGNsdXNpdmUgbG9jayBzbyB3ZSBjYW4gbW9kaWZ5IGl0ICovCisJZW50cnkgPSBkc2hhc2hf ZmluZChjaGFubmVsSGFzaCwgJmtleSwgdHJ1ZSk7CisJaWYgKGVudHJ5ID09IE5VTEwpCisJ CXJldHVybjsKKworCWxpc3RlbmVycyA9IChQcm9jTnVtYmVyICopIGRzYV9nZXRfYWRkcmVz cyhjaGFubmVsRFNBLAorCQkJCQkJCQkJCQkgICBlbnRyeS0+bGlzdGVuZXJzQXJyYXkpOwor CisJZm9yIChpID0gMDsgaSA8IGVudHJ5LT5udW1MaXN0ZW5lcnM7IGkrKykKKwl7CisJCWlm IChsaXN0ZW5lcnNbaV0gPT0gTXlQcm9jTnVtYmVyKQorCQl7CisJCQllbnRyeS0+bnVtTGlz dGVuZXJzLS07CisJCQlpZiAoaSA8IGVudHJ5LT5udW1MaXN0ZW5lcnMpCisJCQkJbWVtbW92 ZSgmbGlzdGVuZXJzW2ldLCAmbGlzdGVuZXJzW2kgKyAxXSwKKwkJCQkJCXNpemVvZihQcm9j TnVtYmVyKSAqIChlbnRyeS0+bnVtTGlzdGVuZXJzIC0gaSkpOworCisJCQlpZiAoZW50cnkt Pm51bUxpc3RlbmVycyA9PSAwKQorCQkJeworCQkJCS8qIExhc3QgbGlzdGVuZXIgZm9yIHRo aXMgY2hhbm5lbCAqLworCQkJCWRzYV9mcmVlKGNoYW5uZWxEU0EsIGVudHJ5LT5saXN0ZW5l cnNBcnJheSk7CisJCQkJZHNoYXNoX2RlbGV0ZV9lbnRyeShjaGFubmVsSGFzaCwgZW50cnkp OworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWRzaGFzaF9yZWxlYXNlX2xvY2soY2hhbm5l bEhhc2gsIGVudHJ5KTsKKwkJCX0KKworCQkJcmV0dXJuOworCQl9CisJfQorCisJZHNoYXNo X3JlbGVhc2VfbG9jayhjaGFubmVsSGFzaCwgZW50cnkpOworCiAJLyoKIAkgKiBXZSBkbyBu b3QgY29tcGxhaW4gYWJvdXQgdW5saXN0ZW5pbmcgc29tZXRoaW5nIG5vdCBiZWluZyBsaXN0 ZW5lZDsKIAkgKiBzaG91bGQgd2U/CkBAIC0xMTkzLDExICsxNTE1LDUxIEBAIEV4ZWNfVW5s aXN0ZW5Db21taXQoY29uc3QgY2hhciAqY2hhbm5lbCkKIHN0YXRpYyB2b2lkCiBFeGVjX1Vu bGlzdGVuQWxsQ29tbWl0KHZvaWQpCiB7CisJZHNoYXNoX3NlcV9zdGF0dXMgc3RhdHVzOwor CUNoYW5uZWxFbnRyeSAqZW50cnk7CisKIAlpZiAoVHJhY2Vfbm90aWZ5KQogCQllbG9nKERF QlVHMSwgIkV4ZWNfVW5saXN0ZW5BbGxDb21taXQoJWQpIiwgTXlQcm9jUGlkKTsKIAorCS8q IENsZWFyIG91ciBsb2NhbCBjYWNoZSAqLwogCWxpc3RfZnJlZV9kZWVwKGxpc3RlbkNoYW5u ZWxzKTsKIAlsaXN0ZW5DaGFubmVscyA9IE5JTDsKKworCS8qIE5vdyBjbGVhciBmcm9tIHNo YXJlZCBjaGFubmVsSGFzaCAqLworCWlmIChjaGFubmVsSGFzaCA9PSBOVUxMKQorCQlyZXR1 cm47CisKKwlkc2hhc2hfc2VxX2luaXQoJnN0YXR1cywgY2hhbm5lbEhhc2gsIHRydWUpOwor CXdoaWxlICgoZW50cnkgPSBkc2hhc2hfc2VxX25leHQoJnN0YXR1cykpICE9IE5VTEwpCisJ eworCQlpZiAoZW50cnktPmtleS5kYm9pZCA9PSBNeURhdGFiYXNlSWQpCisJCXsKKwkJCVBy b2NOdW1iZXIgKmxpc3RlbmVyczsKKwkJCWludAkJCWk7CisKKwkJCWxpc3RlbmVycyA9IChQ cm9jTnVtYmVyICopIGRzYV9nZXRfYWRkcmVzcyhjaGFubmVsRFNBLAorCQkJCQkJCQkJCQkJ CSAgIGVudHJ5LT5saXN0ZW5lcnNBcnJheSk7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBlbnRy eS0+bnVtTGlzdGVuZXJzOyBpKyspCisJCQl7CisJCQkJaWYgKGxpc3RlbmVyc1tpXSA9PSBN eVByb2NOdW1iZXIpCisJCQkJeworCQkJCQllbnRyeS0+bnVtTGlzdGVuZXJzLS07CisJCQkJ CWlmIChpIDwgZW50cnktPm51bUxpc3RlbmVycykKKwkJCQkJCW1lbW1vdmUoJmxpc3RlbmVy c1tpXSwgJmxpc3RlbmVyc1tpICsgMV0sCisJCQkJCQkJCXNpemVvZihQcm9jTnVtYmVyKSAq IChlbnRyeS0+bnVtTGlzdGVuZXJzIC0gaSkpOworCisJCQkJCWlmIChlbnRyeS0+bnVtTGlz dGVuZXJzID09IDApCisJCQkJCXsKKwkJCQkJCWRzYV9mcmVlKGNoYW5uZWxEU0EsIGVudHJ5 LT5saXN0ZW5lcnNBcnJheSk7CisJCQkJCQlkc2hhc2hfZGVsZXRlX2N1cnJlbnQoJnN0YXR1 cyk7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJfQorCWRzaGFz aF9zZXFfdGVybSgmc3RhdHVzKTsKIH0KIAogLyoKQEAgLTE1NjUsMTIgKzE5MjcsMTkgQEAg YXN5bmNRdWV1ZUZpbGxXYXJuaW5nKHZvaWQpCiAvKgogICogU2VuZCBzaWduYWxzIHRvIGxp c3RlbmluZyBiYWNrZW5kcy4KICAqCi0gKiBOb3JtYWxseSB3ZSBzaWduYWwgb25seSBiYWNr ZW5kcyBpbiBvdXIgb3duIGRhdGFiYXNlLCBzaW5jZSBvbmx5IHRob3NlCi0gKiBiYWNrZW5k cyBjb3VsZCBiZSBpbnRlcmVzdGVkIGluIG5vdGlmaWVzIHdlIHNlbmQuICBIb3dldmVyLCBp ZiB0aGVyZSdzCi0gKiBub3RpZnkgdHJhZmZpYyBpbiBvdXIgZGF0YWJhc2UgYnV0IG5vIHRy YWZmaWMgaW4gYW5vdGhlciBkYXRhYmFzZSB0aGF0Ci0gKiBkb2VzIGhhdmUgbGlzdGVuZXIo cyksIHRob3NlIGxpc3RlbmVycyB3aWxsIGZhbGwgZnVydGhlciBhbmQgZnVydGhlcgotICog YmVoaW5kLiAgV2FrZW4gdGhlbSBhbnl3YXkgaWYgdGhleSdyZSBmYXIgZW5vdWdoIGJlaGlu ZCwgc28gdGhhdCB0aGV5J2xsCi0gKiBhZHZhbmNlIHRoZWlyIHF1ZXVlIHBvc2l0aW9uIHBv aW50ZXJzLCBhbGxvd2luZyB0aGUgZ2xvYmFsIHRhaWwgdG8gYWR2YW5jZS4KKyAqIE5vcm1h bGx5IHdlIHNpZ25hbCBvbmx5IGJhY2tlbmRzIGluIG91ciBvd24gZGF0YWJhc2UsIHRoYXQg YXJlCisgKiBsaXN0ZW5pbmcgb24gdGhlIGNoYW5uZWxzIHdpdGggcGVuZGluZyBub3RpZmll cywgc2luY2Ugb25seSB0aG9zZQorICogYmFja2VuZHMgYXJlIGludGVyZXN0ZWQgaW4gbm90 aWZpZXMgd2Ugc2VuZC4KKyAqCisgKiBCYWNrZW5kcyB0aGF0IGFyZSBzdGlsbCBwb3NpdGlv bmVkIGF0IHRoZSBxdWV1ZSBoZWFkIGZyb20gYmVmb3JlIG91cgorICogY29tbWl0IGNhbiBi ZSBzYWZlbHkgYWR2YW5jZWQgZGlyZWN0bHkgdG8gdGhlIG5ldyBoZWFkLCBzaW5jZSB0aGUK KyAqIHF1ZXVlIHJlZ2lvbiB3ZSB3cm90ZSBpcyBrbm93biB0byBjb250YWluIG9ubHkgb3Vy IG93biBub3RpZmljYXRpb25zLgorICogVGhpcyBhdm9pZHMgdW5uZWNlc3Nhcnkgd2FrZXVw cyB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgb2YgaW50ZXJlc3QgdG8KKyAqIHRoZW0uCisgKgor ICogSW4gYWRkaXRpb24sIGlmIGEgYmFja2VuZCBoYXMgZmFsbGVuIHRvbyBmYXIgYmVoaW5k IGluIHRoZSBxdWV1ZSwgd2UKKyAqIHNpZ25hbCBpdCBzbyB0aGF0IGl0IHdpbGwgYWR2YW5j ZSBpdHMgcG9zaXRpb24gYW5kIGFsbG93IHRoZSBnbG9iYWwKKyAqIHRhaWwgcG9pbnRlciB0 byBtb3ZlIGZvcndhcmQuCiAgKgogICogU2luY2Ugd2Uga25vdyB0aGUgUHJvY051bWJlciBh bmQgdGhlIFBpZCB0aGUgc2lnbmFsaW5nIGlzIHF1aXRlIGNoZWFwLgogICoKQEAgLTE1ODMs NiArMTk1MiwxMyBAQCBTaWduYWxCYWNrZW5kcyh2b2lkKQogCWludDMyCSAgICpwaWRzOwog CVByb2NOdW1iZXIgKnByb2Nub3M7CiAJaW50CQkJY291bnQ7CisJTGlzdENlbGwgICAqbGM7 CisKKwkvKgorCSAqIEF0dGFjaCB0byB0aGUgY2hhbm5lbCBoYXNoIGlmIG5lZWRlZC4gIFdl IG1pZ2h0IG5vdCBoYXZlIG9uZSBpZiB0aGlzCisJICogYmFja2VuZCBoYXNuJ3QgZG9uZSBM SVNURU4sIGJ1dCB3ZSBuZWVkIGl0IHRvIGZpbmQgbGlzdGVuZXJzLgorCSAqLworCWluaXRD aGFubmVsSGFzaCgpOwogCiAJLyoKIAkgKiBJZGVudGlmeSBiYWNrZW5kcyB0aGF0IHdlIG5l ZWQgdG8gc2lnbmFsLiAgV2UgZG9uJ3Qgd2FudCB0byBzZW5kCkBAIC0xNTk3LDM2ICsxOTcz LDExMSBAQCBTaWduYWxCYWNrZW5kcyh2b2lkKQogCWNvdW50ID0gMDsKIAogCUxXTG9ja0Fj cXVpcmUoTm90aWZ5UXVldWVMb2NrLCBMV19FWENMVVNJVkUpOwotCWZvciAoUHJvY051bWJl ciBpID0gUVVFVUVfRklSU1RfTElTVEVORVI7IGkgIT0gSU5WQUxJRF9QUk9DX05VTUJFUjsg aSA9IFFVRVVFX05FWFRfTElTVEVORVIoaSkpCisJZm9yZWFjaChsYywgcGVuZGluZ05vdGlm eUNoYW5uZWxzKQorCXsKKwkJY2hhcgkgICAqY2hhbm5lbCA9IChjaGFyICopIGxmaXJzdChs Yyk7CisJCUNoYW5uZWxFbnRyeSAqZW50cnkgPSBOVUxMOworCQlQcm9jTnVtYmVyICpsaXN0 ZW5lcnM7CisKKwkJaWYgKGNoYW5uZWxIYXNoICE9IE5VTEwpCisJCXsKKwkJCUNoYW5uZWxI YXNoS2V5IGtleTsKKworCQkJQ2hhbm5lbEhhc2hQcmVwYXJlS2V5KCZrZXksIE15RGF0YWJh c2VJZCwgY2hhbm5lbCk7CisJCQllbnRyeSA9IGRzaGFzaF9maW5kKGNoYW5uZWxIYXNoLCAm a2V5LCBmYWxzZSk7CisJCX0KKworCQlpZiAoZW50cnkgPT0gTlVMTCkKKwkJCWNvbnRpbnVl OwkJCS8qIE5vIGxpc3RlbmVycyByZWdpc3RlcmVkIGZvciB0aGlzIGNoYW5uZWwgKi8KKwor CQlsaXN0ZW5lcnMgPSAoUHJvY051bWJlciAqKSBkc2FfZ2V0X2FkZHJlc3MoY2hhbm5lbERT QSwKKwkJCQkJCQkJCQkJCSAgIGVudHJ5LT5saXN0ZW5lcnNBcnJheSk7CisKKwkJZm9yIChp bnQgaiA9IDA7IGogPCBlbnRyeS0+bnVtTGlzdGVuZXJzOyBqKyspCisJCXsKKwkJCVByb2NO dW1iZXIJaSA9IGxpc3RlbmVyc1tqXTsKKwkJCWludDMyCQlwaWQ7CisJCQlRdWV1ZVBvc2l0 aW9uIHBvczsKKworCQkJaWYgKFFVRVVFX0JBQ0tFTkRfV0FLRVVQX1BFTkRJTkcoaSkpCisJ CQkJY29udGludWU7CisKKwkJCXBvcyA9IFFVRVVFX0JBQ0tFTkRfUE9TKGkpOworCQkJcGlk ID0gUVVFVUVfQkFDS0VORF9QSUQoaSk7CisKKwkJCS8qIFNraXAgaWYgY2F1Z2h0IHVwICov CisJCQlpZiAoUVVFVUVfUE9TX0VRVUFMKHBvcywgUVVFVUVfSEVBRCkpCisJCQkJY29udGlu dWU7CisKKwkJCUFzc2VydChwaWQgIT0gSW52YWxpZFBpZCk7CisKKwkJCVFVRVVFX0JBQ0tF TkRfV0FLRVVQX1BFTkRJTkcoaSkgPSB0cnVlOworCQkJcGlkc1tjb3VudF0gPSBwaWQ7CisJ CQlwcm9jbm9zW2NvdW50XSA9IGk7CisJCQljb3VudCsrOworCQl9CisKKwkJZHNoYXNoX3Jl bGVhc2VfbG9jayhjaGFubmVsSGFzaCwgZW50cnkpOworCX0KKworCS8qCisJICogRGlyZWN0 IGFkdmFuY2VtZW50IGFuZCBsYWdnaW5nIGJhY2tlbmQgZGV0ZWN0aW9uLgorCSAqCisJICog RGlyZWN0IGFkdmFuY2VtZW50OiBhdm9pZCB3YWtpbmcgYmFja2VuZHMgc3RpbGwgcG9zaXRp b25lZCBhdCB0aGUgb2xkCisJICogcXVldWUgaGVhZCB0aGF0IGFyZW4ndCBpbnRlcmVzdGVk IGluIG91ciBub3RpZmljYXRpb25zLgorCSAqCisJICogVGhlIGhlYXZ5d2VpZ2h0IGxvY2sg b24gZGF0YWJhc2UgMCAoaGVsZCBpbiBQcmVDb21taXRfTm90aWZ5KSBlbnN1cmVzCisJICog bm8gb3RoZXIgYmFja2VuZCBjYW4gaW5zZXJ0IG5vdGlmaWNhdGlvbnMgaW4gdGhlIHJlZ2lv biB3ZSBqdXN0IHdyb3RlLgorCSAqIEV2ZW4gdGhvdWdoIHdlIG1heSB0YWtlIGFuZCByZWxl YXNlIE5vdGlmeVF1ZXVlTG9jayBtdWx0aXBsZSB0aW1lcworCSAqIHdoaWxlIHdyaXRpbmcs IHRoZSBoZWF2eXdlaWdodCBsb2NrIGd1YXJhbnRlZXMgdGhpcyByZWdpb24gY29udGFpbnMK KwkgKiBvbmx5IG91ciBtZXNzYWdlcy4gIFRoZXJlZm9yZSwgYW55IGJhY2tlbmQgc3RpbGwg cG9zaXRpb25lZCBhdCB0aGUKKwkgKiBxdWV1ZSBoZWFkIGZyb20gYmVmb3JlIG91ciB3cml0 ZSBjYW4gYmUgc2FmZWx5IGFkdmFuY2VkIHRvIHRoZSBjdXJyZW50CisJICogcXVldWUgaGVh ZCB3aXRob3V0IHdha2luZyBpdC4KKwkgKgorCSAqIEZhbHNlLXBvc2l0aXZlIHBvc3NpYmls aXR5OiBpZiBhIGJhY2tlbmQgd2FzIHByZXZpb3VzbHkgc2lnbmFsZWQgYnV0CisJICogaGFz bid0IHlldCBhd29rZW4sIHdlJ2xsIHNraXAgYWR2YW5jaW5nIGl0IChiZWNhdXNlIHdha2V1 cFBlbmRpbmcgaXMKKwkgKiB0cnVlKS4gIFRoaXMgaXMgc2FmZSAtIHRoZSBiYWNrZW5kIHdp bGwgYWR2YW5jZSBpdHMgcG9pbnRlciB3aGVuIGl0CisJICogZG9lcyB3YWtlIHVwLiAgVGhl IGFsdGVybmF0aXZlIChhZHZhbmNpbmcgaXQgYW55d2F5KSB3b3VsZCByaXNrCisJICogYWR2 YW5jaW5nIG92ZXIgbm90aWZpY2F0aW9ucyBmcm9tIHdob2V2ZXIgc2lnbmFsZWQgaXQuCisJ ICoKKwkgKiBMYWdnaW5nIGJhY2tlbmRzOiB3ZSBhbHNvIGNoZWNrIGlmIGFueSBiYWNrZW5k IGhhcyBmYWxsZW4gdG9vIGZhcgorCSAqIGJlaGluZCBhbmQgc2lnbmFsIGl0IHRvIGNhdGNo IHVwLCBhbGxvd2luZyB0aGUgZ2xvYmFsIHRhaWwgdG8gYWR2YW5jZS4KKwkgKi8KKwlmb3Ig KFByb2NOdW1iZXIgaSA9IFFVRVVFX0ZJUlNUX0xJU1RFTkVSOworCQkgaSAhPSBJTlZBTElE X1BST0NfTlVNQkVSOworCQkgaSA9IFFVRVVFX05FWFRfTElTVEVORVIoaSkpCiAJewotCQlp bnQzMgkJcGlkID0gUVVFVUVfQkFDS0VORF9QSUQoaSk7CiAJCVF1ZXVlUG9zaXRpb24gcG9z OworCQlpbnQ2NAkJbGFnOworCQlpbnQzMgkJcGlkOworCisJCWlmIChRVUVVRV9CQUNLRU5E X1dBS0VVUF9QRU5ESU5HKGkpKQorCQkJY29udGludWU7CiAKLQkJQXNzZXJ0KHBpZCAhPSBJ bnZhbGlkUGlkKTsKIAkJcG9zID0gUVVFVUVfQkFDS0VORF9QT1MoaSk7Ci0JCWlmIChRVUVV RV9CQUNLRU5EX0RCT0lEKGkpID09IE15RGF0YWJhc2VJZCkKKworCQkvKiBEaXJlY3QgYWR2 YW5jZW1lbnQgZm9yIGlkbGUgYmFja2VuZHMgYXQgdGhlIG9sZCBoZWFkICovCisJCWlmIChw ZW5kaW5nTm90aWZpZXMgIT0gTlVMTCAmJgorCQkJUVVFVUVfUE9TX0VRVUFMKHBvcywgcXVl dWVIZWFkQmVmb3JlV3JpdGUpKQogCQl7Ci0JCQkvKgotCQkJICogQWx3YXlzIHNpZ25hbCBs aXN0ZW5lcnMgaW4gb3VyIG93biBkYXRhYmFzZSwgdW5sZXNzIHRoZXkncmUKLQkJCSAqIGFs cmVhZHkgY2F1Z2h0IHVwICh1bmxpa2VseSwgYnV0IHBvc3NpYmxlKS4KLQkJCSAqLwotCQkJ aWYgKFFVRVVFX1BPU19FUVVBTChwb3MsIFFVRVVFX0hFQUQpKQotCQkJCWNvbnRpbnVlOwor CQkJUVVFVUVfQkFDS0VORF9QT1MoaSkgPSBxdWV1ZUhlYWRBZnRlcldyaXRlOworCQkJcG9z ID0gcXVldWVIZWFkQWZ0ZXJXcml0ZTsKIAkJfQotCQllbHNlCisKKwkJLyogU2lnbmFsIGJh Y2tlbmRzIHRoYXQgaGF2ZSBmYWxsZW4gdG9vIGZhciBiZWhpbmQgKi8KKwkJbGFnID0gYXN5 bmNRdWV1ZVBhZ2VEaWZmKFFVRVVFX1BPU19QQUdFKFFVRVVFX0hFQUQpLAorCQkJCQkJCQkg UVVFVUVfUE9TX1BBR0UocG9zKSk7CisKKwkJaWYgKGxhZyA+PSBRVUVVRV9DTEVBTlVQX0RF TEFZKQogCQl7Ci0JCQkvKgotCQkJICogTGlzdGVuZXJzIGluIG90aGVyIGRhdGFiYXNlcyBz aG91bGQgYmUgc2lnbmFsZWQgb25seSBpZiB0aGV5Ci0JCQkgKiBhcmUgZmFyIGJlaGluZC4K LQkJCSAqLwotCQkJaWYgKGFzeW5jUXVldWVQYWdlRGlmZihRVUVVRV9QT1NfUEFHRShRVUVV RV9IRUFEKSwKLQkJCQkJCQkJICAgUVVFVUVfUE9TX1BBR0UocG9zKSkgPCBRVUVVRV9DTEVB TlVQX0RFTEFZKQotCQkJCWNvbnRpbnVlOworCQkJcGlkID0gUVVFVUVfQkFDS0VORF9QSUQo aSk7CisJCQlBc3NlcnQocGlkICE9IEludmFsaWRQaWQpOworCisJCQlRVUVVRV9CQUNLRU5E X1dBS0VVUF9QRU5ESU5HKGkpID0gdHJ1ZTsKKwkJCXBpZHNbY291bnRdID0gcGlkOworCQkJ cHJvY25vc1tjb3VudF0gPSBpOworCQkJY291bnQrKzsKIAkJfQotCQkvKiBPSywgbmVlZCB0 byBzaWduYWwgdGhpcyBvbmUgKi8KLQkJcGlkc1tjb3VudF0gPSBwaWQ7Ci0JCXByb2Nub3Nb Y291bnRdID0gaTsKLQkJY291bnQrKzsKIAl9CiAJTFdMb2NrUmVsZWFzZShOb3RpZnlRdWV1 ZUxvY2spOwogCkBAIC0xODY1LDYgKzIzMTYsNyBAQCBhc3luY1F1ZXVlUmVhZEFsbE5vdGlm aWNhdGlvbnModm9pZCkKIAlMV0xvY2tBY3F1aXJlKE5vdGlmeVF1ZXVlTG9jaywgTFdfU0hB UkVEKTsKIAkvKiBBc3NlcnQgY2hlY2tzIHRoYXQgd2UgaGF2ZSBhIHZhbGlkIHN0YXRlIGVu dHJ5ICovCiAJQXNzZXJ0KE15UHJvY1BpZCA9PSBRVUVVRV9CQUNLRU5EX1BJRChNeVByb2NO dW1iZXIpKTsKKwlRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5HKE15UHJvY051bWJlcikg PSBmYWxzZTsKIAlwb3MgPSBRVUVVRV9CQUNLRU5EX1BPUyhNeVByb2NOdW1iZXIpOwogCWhl YWQgPSBRVUVVRV9IRUFEOwogCUxXTG9ja1JlbGVhc2UoTm90aWZ5UXVldWVMb2NrKTsKQEAg LTIyOTAsMTMgKzI3NDIsMTUgQEAgQWRkRXZlbnRUb1BlbmRpbmdOb3RpZmllcyhOb3RpZmlj YXRpb24gKm4pCiB7CiAJQXNzZXJ0KHBlbmRpbmdOb3RpZmllcy0+ZXZlbnRzICE9IE5JTCk7 CiAKLQkvKiBDcmVhdGUgdGhlIGhhc2ggdGFibGUgaWYgaXQncyB0aW1lIHRvICovCisJLyog Q3JlYXRlIHRoZSBoYXNoIHRhYmxlcyBpZiBpdCdzIHRpbWUgdG8gKi8KIAlpZiAobGlzdF9s ZW5ndGgocGVuZGluZ05vdGlmaWVzLT5ldmVudHMpID49IE1JTl9IQVNIQUJMRV9OT1RJRklF UyAmJgogCQlwZW5kaW5nTm90aWZpZXMtPmhhc2h0YWIgPT0gTlVMTCkKIAl7CiAJCUhBU0hD VEwJCWhhc2hfY3RsOwogCQlMaXN0Q2VsbCAgICpsOwogCisJCUFzc2VydChwZW5kaW5nTm90 aWZpZXMtPmNoYW5uZWxIYXNodGFiID09IE5VTEwpOworCiAJCS8qIENyZWF0ZSB0aGUgaGFz aCB0YWJsZSAqLwogCQloYXNoX2N0bC5rZXlzaXplID0gc2l6ZW9mKE5vdGlmaWNhdGlvbiAq KTsKIAkJaGFzaF9jdGwuZW50cnlzaXplID0gc2l6ZW9mKHN0cnVjdCBOb3RpZmljYXRpb25I YXNoKTsKQEAgLTIzMDksMTAgKzI3NjMsMjIgQEAgQWRkRXZlbnRUb1BlbmRpbmdOb3RpZmll cyhOb3RpZmljYXRpb24gKm4pCiAJCQkJCQkmaGFzaF9jdGwsCiAJCQkJCQlIQVNIX0VMRU0g fCBIQVNIX0ZVTkNUSU9OIHwgSEFTSF9DT01QQVJFIHwgSEFTSF9DT05URVhUKTsKIAorCQkv KiBDcmVhdGUgdGhlIGNoYW5uZWwgaGFzaCB0YWJsZSAqLworCQltZW1zZXQoJmhhc2hfY3Rs LCAwLCBzaXplb2YoaGFzaF9jdGwpKTsKKwkJaGFzaF9jdGwua2V5c2l6ZSA9IE5BTUVEQVRB TEVOOworCQloYXNoX2N0bC5lbnRyeXNpemUgPSBzaXplb2Yoc3RydWN0IENoYW5uZWxIYXNo KTsKKwkJaGFzaF9jdGwuaGN4dCA9IEN1clRyYW5zYWN0aW9uQ29udGV4dDsKKwkJcGVuZGlu Z05vdGlmaWVzLT5jaGFubmVsSGFzaHRhYiA9CisJCQloYXNoX2NyZWF0ZSgiUGVuZGluZyBO b3RpZnkgQ2hhbm5lbHMiLAorCQkJCQkJNjRMLAorCQkJCQkJJmhhc2hfY3RsLAorCQkJCQkJ SEFTSF9FTEVNIHwgSEFTSF9TVFJJTkdTIHwgSEFTSF9DT05URVhUKTsKKwogCQkvKiBJbnNl cnQgYWxsIHRoZSBhbHJlYWR5LWV4aXN0aW5nIGV2ZW50cyAqLwogCQlmb3JlYWNoKGwsIHBl bmRpbmdOb3RpZmllcy0+ZXZlbnRzKQogCQl7CiAJCQlOb3RpZmljYXRpb24gKm9sZG4gPSAo Tm90aWZpY2F0aW9uICopIGxmaXJzdChsKTsKKwkJCWNoYXIJICAgKmNoYW5uZWwgPSBvbGRu LT5kYXRhOwogCQkJYm9vbAkJZm91bmQ7CiAKIAkJCSh2b2lkKSBoYXNoX3NlYXJjaChwZW5k aW5nTm90aWZpZXMtPmhhc2h0YWIsCkBAIC0yMzIwLDIyICsyNzg2LDQyIEBAIEFkZEV2ZW50 VG9QZW5kaW5nTm90aWZpZXMoTm90aWZpY2F0aW9uICpuKQogCQkJCQkJCSAgIEhBU0hfRU5U RVIsCiAJCQkJCQkJICAgJmZvdW5kKTsKIAkJCUFzc2VydCghZm91bmQpOworCisJCQkvKiBJ bnNlcnQgY2hhbm5lbCBpbnRvIGNoYW5uZWxIYXNodGFiICovCisJCQkodm9pZCkgaGFzaF9z ZWFyY2gocGVuZGluZ05vdGlmaWVzLT5jaGFubmVsSGFzaHRhYiwKKwkJCQkJCQkgICBjaGFu bmVsLAorCQkJCQkJCSAgIEhBU0hfRU5URVIsCisJCQkJCQkJICAgJmZvdW5kKTsKKwkJCS8q IGZvdW5kIG1heSBiZSB0cnVlIGlmIG11bHRpcGxlIGV2ZW50cyBvbiBzYW1lIGNoYW5uZWwg Ki8KIAkJfQogCX0KIAogCS8qIEFkZCBuZXcgZXZlbnQgdG8gdGhlIGxpc3QsIGluIG9yZGVy ICovCiAJcGVuZGluZ05vdGlmaWVzLT5ldmVudHMgPSBsYXBwZW5kKHBlbmRpbmdOb3RpZmll cy0+ZXZlbnRzLCBuKTsKIAotCS8qIEFkZCBldmVudCB0byB0aGUgaGFzaCB0YWJsZSBpZiBu ZWVkZWQgKi8KKwkvKiBBZGQgZXZlbnQgdG8gdGhlIGhhc2ggdGFibGVzIGlmIG5lZWRlZCAq LwogCWlmIChwZW5kaW5nTm90aWZpZXMtPmhhc2h0YWIgIT0gTlVMTCkKIAl7CiAJCWJvb2wJ CWZvdW5kOwogCisJCUFzc2VydChwZW5kaW5nTm90aWZpZXMtPmNoYW5uZWxIYXNodGFiICE9 IE5VTEwpOworCiAJCSh2b2lkKSBoYXNoX3NlYXJjaChwZW5kaW5nTm90aWZpZXMtPmhhc2h0 YWIsCiAJCQkJCQkgICAmbiwKIAkJCQkJCSAgIEhBU0hfRU5URVIsCiAJCQkJCQkgICAmZm91 bmQpOwogCQlBc3NlcnQoIWZvdW5kKTsKKworCQkvKiBBZGQgY2hhbm5lbCB0byBjaGFubmVs SGFzaHRhYiAqLworCQl7CisJCQljaGFyCSAgICpjaGFubmVsID0gbi0+ZGF0YTsKKworCQkJ KHZvaWQpIGhhc2hfc2VhcmNoKHBlbmRpbmdOb3RpZmllcy0+Y2hhbm5lbEhhc2h0YWIsCisJ CQkJCQkJICAgY2hhbm5lbCwKKwkJCQkJCQkgICBIQVNIX0VOVEVSLAorCQkJCQkJCSAgICZm b3VuZCk7CisJCQkvKiBmb3VuZCBtYXkgYmUgdHJ1ZSBpZiB3ZSBhbHJlYWR5IGhhdmUgYW4g ZXZlbnQgb24gdGhpcyBjaGFubmVsICovCisJCX0KIAl9CiB9CiAKQEAgLTIzNzMsNyArMjg1 OSw3IEBAIG5vdGlmaWNhdGlvbl9tYXRjaChjb25zdCB2b2lkICprZXkxLCBjb25zdCB2b2lk ICprZXkyLCBTaXplIGtleXNpemUpCiAJcmV0dXJuIDE7CQkJCQkvKiBub3QgZXF1YWwgKi8K IH0KIAotLyogQ2xlYXIgdGhlIHBlbmRpbmdBY3Rpb25zIGFuZCBwZW5kaW5nTm90aWZpZXMg bGlzdHMuICovCisvKiBDbGVhciB0aGUgcGVuZGluZ0FjdGlvbnMsIHBlbmRpbmdOb3RpZmll cywgYW5kIHBlbmRpbmdOb3RpZnlDaGFubmVscyBsaXN0cy4gKi8KIHN0YXRpYyB2b2lkCiBD bGVhclBlbmRpbmdBY3Rpb25zQW5kTm90aWZpZXModm9pZCkKIHsKQEAgLTIzODUsNiArMjg3 MSw3IEBAIENsZWFyUGVuZGluZ0FjdGlvbnNBbmROb3RpZmllcyh2b2lkKQogCSAqLwogCXBl bmRpbmdBY3Rpb25zID0gTlVMTDsKIAlwZW5kaW5nTm90aWZpZXMgPSBOVUxMOworCXBlbmRp bmdOb3RpZnlDaGFubmVscyA9IE5JTDsKIH0KIAogLyoKQEAgLTIzOTUsMyArMjg4MiwxNiBA QCBjaGVja19ub3RpZnlfYnVmZmVycyhpbnQgKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLCBHdWNT b3VyY2Ugc291cmNlKQogewogCXJldHVybiBjaGVja19zbHJ1X2J1ZmZlcnMoIm5vdGlmeV9i dWZmZXJzIiwgbmV3dmFsKTsKIH0KKworCisvKgorICogQ2hhbm5lbEhhc2hQcmVwYXJlS2V5 CisgKgkJUHJlcGFyZSBhIGNoYW5uZWwga2V5IGZvciB1c2UgYXMgYSBoYXNoIGtleS4KKyAq Lworc3RhdGljIGlubGluZSB2b2lkCitDaGFubmVsSGFzaFByZXBhcmVLZXkoQ2hhbm5lbEhh c2hLZXkgKmtleSwgT2lkIGRib2lkLCBjb25zdCBjaGFyICpjaGFubmVsKQoreworCW1lbXNl dChrZXksIDAsIHNpemVvZihDaGFubmVsSGFzaEtleSkpOworCWtleS0+ZGJvaWQgPSBkYm9p ZDsKKwlzdHJsY3B5KGtleS0+Y2hhbm5lbCwgY2hhbm5lbCwgTkFNRURBVEFMRU4pOworfQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1l cy50eHQgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4 dAppbmRleCA3NTUzZjZlYWNlZi4uYTRmYWRiZDA3NjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0CisrKyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0CkBAIC0zNjYsNiArMzY2 LDcgQEAgU3VidHJhbnNCdWZmZXIJIldhaXRpbmcgZm9yIEkvTyBvbiBhIHN1Yi10cmFuc2Fj dGlvbiBTTFJVIGJ1ZmZlci4iCiBNdWx0aVhhY3RPZmZzZXRCdWZmZXIJIldhaXRpbmcgZm9y IEkvTyBvbiBhIG11bHRpeGFjdCBvZmZzZXQgU0xSVSBidWZmZXIuIgogTXVsdGlYYWN0TWVt YmVyQnVmZmVyCSJXYWl0aW5nIGZvciBJL08gb24gYSBtdWx0aXhhY3QgbWVtYmVyIFNMUlUg YnVmZmVyLiIKIE5vdGlmeUJ1ZmZlcgkiV2FpdGluZyBmb3IgSS9PIG9uIGEgPGNvbW1hbmQ+ Tk9USUZZPC9jb21tYW5kPiBtZXNzYWdlIFNMUlUgYnVmZmVyLiIKK05vdGlmeUNoYW5uZWxI YXNoCSJXYWl0aW5nIHRvIGFjY2VzcyB0aGUgPGNvbW1hbmQ+Tk9USUZZPC9jb21tYW5kPiBj aGFubmVsIGhhc2ggdGFibGUuIgogU2VyaWFsQnVmZmVyCSJXYWl0aW5nIGZvciBJL08gb24g YSBzZXJpYWxpemFibGUgdHJhbnNhY3Rpb24gY29uZmxpY3QgU0xSVSBidWZmZXIuIgogV0FM SW5zZXJ0CSJXYWl0aW5nIHRvIGluc2VydCBXQUwgZGF0YSBpbnRvIGEgbWVtb3J5IGJ1ZmZl ci4iCiBCdWZmZXJDb250ZW50CSJXYWl0aW5nIHRvIGFjY2VzcyBhIGRhdGEgcGFnZSBpbiBt ZW1vcnkuIgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2tsaXN0Lmgg Yi9zcmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9ja2xpc3QuaAppbmRleCAwNmExZmZkNGIwOC4u Mjc2OGRkZjQ0MTQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlz dC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlzdC5oCkBAIC0xMDAsNiAr MTAwLDcgQEAgUEdfTFdMT0NLVFJBTkNIRShTVUJUUkFOU19CVUZGRVIsIFN1YnRyYW5zQnVm ZmVyKQogUEdfTFdMT0NLVFJBTkNIRShNVUxUSVhBQ1RPRkZTRVRfQlVGRkVSLCBNdWx0aVhh Y3RPZmZzZXRCdWZmZXIpCiBQR19MV0xPQ0tUUkFOQ0hFKE1VTFRJWEFDVE1FTUJFUl9CVUZG RVIsIE11bHRpWGFjdE1lbWJlckJ1ZmZlcikKIFBHX0xXTE9DS1RSQU5DSEUoTk9USUZZX0JV RkZFUiwgTm90aWZ5QnVmZmVyKQorUEdfTFdMT0NLVFJBTkNIRShOT1RJRllfQ0hBTk5FTF9I QVNILCBOb3RpZnlDaGFubmVsSGFzaCkKIFBHX0xXTE9DS1RSQU5DSEUoU0VSSUFMX0JVRkZF UiwgU2VyaWFsQnVmZmVyKQogUEdfTFdMT0NLVFJBTkNIRShXQUxfSU5TRVJULCBXQUxJbnNl cnQpCiBQR19MV0xPQ0tUUkFOQ0hFKEJVRkZFUl9DT05URU5ULCBCdWZmZXJDb250ZW50KQpk aWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA1MjkwYjkxZTgzZS4uNWNjZGQ0MDQz ZTggMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBi L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC00MTIsNiArNDEyLDggQEAg Q2F0YWxvZ0lkTWFwRW50cnkKIENhdGFsb2dJbmRleFN0YXRlCiBDaGFuZ2VWYXJOb2Rlc19j YWxsYmFjawogQ2hhbmdlVmFyTm9kZXNfY29udGV4dAorQ2hhbm5lbEVudHJ5CitDaGFubmVs SGFzaEtleQogQ2hlY2tQb2ludAogQ2hlY2tQb2ludFN0bXQKIENoZWNrcG9pbnRTdGF0c0Rh dGEKLS0gCjIuNTAuMQoK --c9e2941be37f430381a9a0b1a7b9285d Content-Disposition: attachment; filename*0="0002-optimize_listen_notify-v20-alt1.txt" Content-Type: text/plain; name="0002-optimize_listen_notify-v20-alt1.txt" Content-Transfer-Encoding: base64 RnJvbSBhZmZmMGYzZjhiMDFjZmRlMzY5YzU2NDAyNTMxM2U2YWNjOWE2MTBhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEphY29ic29uIDxqb2VsQGNvbXBpbGVyLm9y Zz4KRGF0ZTogU3VuLCAxOSBPY3QgMjAyNSAwODowODowNSArMDIwMApTdWJqZWN0OiBbUEFU Q0hdIEltcGxlbWVudHMgaWRlYSAjMTogYWR2aXNvcnlQb3MKCi0tLQogc3JjL2JhY2tlbmQv Y29tbWFuZHMvYXN5bmMuYyB8IDYzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Ky0tLQogMSBmaWxlIGNoYW5nZWQsIDU4IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2FzeW5jLmMKaW5kZXggNGU2NTU2ZmI4ZDEuLjZhMDJmNWUzYWNjIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jCisrKyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2FzeW5jLmMKQEAgLTI2NCw2ICsyNjQsMTEgQEAgdHlwZWRlZiBzdHJ1 Y3QgUXVldWVQb3NpdGlvbgogCSAoeCkucGFnZSAhPSAoeSkucGFnZSA/ICh4KSA6IFwKIAkg KHgpLm9mZnNldCA+ICh5KS5vZmZzZXQgPyAoeCkgOiAoeSkpCiAKKy8qIHJldHVybnMgdHJ1 ZSBpZiB4IGNvbWVzIGJlZm9yZSB5IGluIHF1ZXVlIG9yZGVyICovCisjZGVmaW5lIFFVRVVF X1BPU19QUkVDRURFUyh4LHkpIFwKKwkoYXN5bmNRdWV1ZVBhZ2VQcmVjZWRlcygoeCkucGFn ZSwgKHkpLnBhZ2UpIHx8IFwKKwkgKCh4KS5wYWdlID09ICh5KS5wYWdlICYmICh4KS5vZmZz ZXQgPCAoeSkub2Zmc2V0KSkKKwogLyoKICAqIFBhcmFtZXRlciBkZXRlcm1pbmluZyBob3cg b2Z0ZW4gd2UgdHJ5IHRvIGFkdmFuY2UgdGhlIHRhaWwgcG9pbnRlcjoKICAqIHdlIGRvIHRo YXQgYWZ0ZXIgZXZlcnkgUVVFVUVfQ0xFQU5VUF9ERUxBWSBwYWdlcyBvZiBOT1RJRlkgZGF0 YS4gIFRoaXMgaXMKQEAgLTI4Niw2ICsyOTEsNyBAQCB0eXBlZGVmIHN0cnVjdCBRdWV1ZUJh Y2tlbmRTdGF0dXMKIAlPaWQJCQlkYm9pZDsJCQkvKiBiYWNrZW5kJ3MgZGF0YWJhc2UgT0lE LCBvciBJbnZhbGlkT2lkICovCiAJUHJvY051bWJlcgluZXh0TGlzdGVuZXI7CS8qIGlkIG9m IG5leHQgbGlzdGVuZXIsIG9yIElOVkFMSURfUFJPQ19OVU1CRVIgKi8KIAlRdWV1ZVBvc2l0 aW9uIHBvczsJCQkvKiBiYWNrZW5kIGhhcyByZWFkIHF1ZXVlIHVwIHRvIGhlcmUgKi8KKwlR dWV1ZVBvc2l0aW9uIGFkdmlzb3J5UG9zOwkvKiBiYWNrZW5kIGNvdWxkIHNraXAgcXVldWUg dG8gaGVyZSAqLwogCWJvb2wJCXdha2V1cFBlbmRpbmc7CS8qIHNpZ25hbCBzZW50IGJ1dCBu b3QgeWV0IHByb2Nlc3NlZCAqLwogfSBRdWV1ZUJhY2tlbmRTdGF0dXM7CiAKQEAgLTM0Nyw2 ICszNTMsNyBAQCBzdGF0aWMgZHNoYXNoX3RhYmxlICpjaGFubmVsSGFzaCA9IE5VTEw7CiAj ZGVmaW5lIFFVRVVFX0JBQ0tFTkRfREJPSUQoaSkJCShhc3luY1F1ZXVlQ29udHJvbC0+YmFj a2VuZFtpXS5kYm9pZCkKICNkZWZpbmUgUVVFVUVfTkVYVF9MSVNURU5FUihpKQkJKGFzeW5j UXVldWVDb250cm9sLT5iYWNrZW5kW2ldLm5leHRMaXN0ZW5lcikKICNkZWZpbmUgUVVFVUVf QkFDS0VORF9QT1MoaSkJCShhc3luY1F1ZXVlQ29udHJvbC0+YmFja2VuZFtpXS5wb3MpCisj ZGVmaW5lIFFVRVVFX0JBQ0tFTkRfQURWSVNPUllfUE9TKGkpCShhc3luY1F1ZXVlQ29udHJv bC0+YmFja2VuZFtpXS5hZHZpc29yeVBvcykKICNkZWZpbmUgUVVFVUVfQkFDS0VORF9XQUtF VVBfUEVORElORyhpKQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmJhY2tlbmRbaV0ud2FrZXVwUGVu ZGluZykKIAogLyoKQEAgLTY3NCw2ICs2ODEsNyBAQCBBc3luY1NobWVtSW5pdCh2b2lkKQog CQkJUVVFVUVfQkFDS0VORF9EQk9JRChpKSA9IEludmFsaWRPaWQ7CiAJCQlRVUVVRV9ORVhU X0xJU1RFTkVSKGkpID0gSU5WQUxJRF9QUk9DX05VTUJFUjsKIAkJCVNFVF9RVUVVRV9QT1Mo UVVFVUVfQkFDS0VORF9QT1MoaSksIDAsIDApOworCQkJU0VUX1FVRVVFX1BPUyhRVUVVRV9C QUNLRU5EX0FEVklTT1JZX1BPUyhpKSwgMCwgMCk7CiAJCQlRVUVVRV9CQUNLRU5EX1dBS0VV UF9QRU5ESU5HKGkpID0gZmFsc2U7CiAJCX0KIAl9CkBAIC0xMzEyLDYgKzEzMjAsNyBAQCBF eGVjX0xpc3RlblByZUNvbW1pdCh2b2lkKQogCQkJcHJldkxpc3RlbmVyID0gaTsKIAl9CiAJ UVVFVUVfQkFDS0VORF9QT1MoTXlQcm9jTnVtYmVyKSA9IG1heDsKKwlRVUVVRV9CQUNLRU5E X0FEVklTT1JZX1BPUyhNeVByb2NOdW1iZXIpID0gbWF4OwogCVFVRVVFX0JBQ0tFTkRfUElE KE15UHJvY051bWJlcikgPSBNeVByb2NQaWQ7CiAJUVVFVUVfQkFDS0VORF9EQk9JRChNeVBy b2NOdW1iZXIpID0gTXlEYXRhYmFzZUlkOwogCS8qIEluc2VydCBiYWNrZW5kIGludG8gbGlz dCBvZiBsaXN0ZW5lcnMgYXQgY29ycmVjdCBwb3NpdGlvbiAqLwpAQCAtMjAzMSw5ICsyMDQw LDEzIEBAIFNpZ25hbEJhY2tlbmRzKHZvaWQpCiAJICogRXZlbiB0aG91Z2ggd2UgbWF5IHRh a2UgYW5kIHJlbGVhc2UgTm90aWZ5UXVldWVMb2NrIG11bHRpcGxlIHRpbWVzCiAJICogd2hp bGUgd3JpdGluZywgdGhlIGhlYXZ5d2VpZ2h0IGxvY2sgZ3VhcmFudGVlcyB0aGlzIHJlZ2lv biBjb250YWlucwogCSAqIG9ubHkgb3VyIG1lc3NhZ2VzLiAgVGhlcmVmb3JlLCBhbnkgYmFj a2VuZCBzdGlsbCBwb3NpdGlvbmVkIGF0IHRoZQotCSAqIHF1ZXVlIGhlYWQgZnJvbSBiZWZv cmUgb3VyIHdyaXRlIGNhbiBiZSBzYWZlbHkgYWR2YW5jZWQgdG8gdGhlIGN1cnJlbnQKKwkg KiBxdWV1ZSBoZWFkIGZyb20gYmVmb3JlIG91ciB3cml0ZSBjYW4gYmUgYWR2aXNlZCB0byBz a2lwIHRvIHRoZSBjdXJyZW50CiAJICogcXVldWUgaGVhZCB3aXRob3V0IHdha2luZyBpdC4K IAkgKgorCSAqIFdlIHVzZSB0aGUgYWR2aXNvcnlQb3MgZmllbGQgcmF0aGVyIHRoYW4gZGly ZWN0bHkgbW9kaWZ5aW5nIHBvcy4KKwkgKiBUaGUgYmFja2VuZCBjb250cm9scyBpdHMgb3du IHBvcyBmaWVsZCBhbmQgd2lsbCBjaGVjayBhZHZpc29yeVBvcworCSAqIHdoZW4gaXQncyBz YWZlIHRvIGRvIHNvLgorCSAqCiAJICogRmFsc2UtcG9zaXRpdmUgcG9zc2liaWxpdHk6IGlm IGEgYmFja2VuZCB3YXMgcHJldmlvdXNseSBzaWduYWxlZCBidXQKIAkgKiBoYXNuJ3QgeWV0 IGF3b2tlbiwgd2UnbGwgc2tpcCBhZHZhbmNpbmcgaXQgKGJlY2F1c2Ugd2FrZXVwUGVuZGlu ZyBpcwogCSAqIHRydWUpLiAgVGhpcyBpcyBzYWZlIC0gdGhlIGJhY2tlbmQgd2lsbCBhZHZh bmNlIGl0cyBwb2ludGVyIHdoZW4gaXQKQEAgLTIwNDgsNiArMjA2MSw3IEBAIFNpZ25hbEJh Y2tlbmRzKHZvaWQpCiAJCSBpID0gUVVFVUVfTkVYVF9MSVNURU5FUihpKSkKIAl7CiAJCVF1 ZXVlUG9zaXRpb24gcG9zOworCQlRdWV1ZVBvc2l0aW9uIGFkdmlzb3J5UG9zOwogCQlpbnQ2 NAkJbGFnOwogCQlpbnQzMgkJcGlkOwogCkBAIC0yMDU1LDE1ICsyMDY5LDMxIEBAIFNpZ25h bEJhY2tlbmRzKHZvaWQpCiAJCQljb250aW51ZTsKIAogCQlwb3MgPSBRVUVVRV9CQUNLRU5E X1BPUyhpKTsKKwkJYWR2aXNvcnlQb3MgPSBRVUVVRV9CQUNLRU5EX0FEVklTT1JZX1BPUyhp KTsKIAotCQkvKiBEaXJlY3QgYWR2YW5jZW1lbnQgZm9yIGlkbGUgYmFja2VuZHMgYXQgdGhl IG9sZCBoZWFkICovCisJCS8qCisJCSAqIERpcmVjdCBhZHZhbmNlbWVudCBmb3IgaWRsZSBi YWNrZW5kcyBhdCB0aGUgb2xkIGhlYWQuCisJCSAqCisJCSAqIFdlIGNoZWNrIGFkdmlzb3J5 UG9zIHJhdGhlciB0aGFuIHBvcyB0byBhbGxvdyBhY2N1bXVsYXRpbmcgYWR2YW5jZXMKKwkJ ICogZnJvbSBtdWx0aXBsZSBjb25zZWN1dGl2ZSBub3RpZnlpbmcgYmFja2VuZHMuICBJZiB3 ZSBjaGVja2VkIHBvcywKKwkJICogb25seSB0aGUgZmlyc3Qgbm90aWZpZXIgY291bGQgYWR2 YW5jZSBpZGxlIGJhY2tlbmRzOyBzdWJzZXF1ZW50CisJCSAqIG5vdGlmaWVycyB3b3VsZCBm aW5kIHBvcyB1bmNoYW5nZWQgKHNpbmNlIHRoZSBiYWNrZW5kIGhhc24ndCB3b2tlbgorCQkg KiB1cCB5ZXQpIGFuZCBmYWlsIHRvIGFkdmFuY2UgZnVydGhlci4KKwkJICovCiAJCWlmIChw ZW5kaW5nTm90aWZpZXMgIT0gTlVMTCAmJgotCQkJUVVFVUVfUE9TX0VRVUFMKHBvcywgcXVl dWVIZWFkQmVmb3JlV3JpdGUpKQorCQkJUVVFVUVfUE9TX0VRVUFMKGFkdmlzb3J5UG9zLCBx dWV1ZUhlYWRCZWZvcmVXcml0ZSkpCiAJCXsKLQkJCVFVRVVFX0JBQ0tFTkRfUE9TKGkpID0g cXVldWVIZWFkQWZ0ZXJXcml0ZTsKLQkJCXBvcyA9IHF1ZXVlSGVhZEFmdGVyV3JpdGU7CisJ CQlRVUVVRV9CQUNLRU5EX0FEVklTT1JZX1BPUyhpKSA9IHF1ZXVlSGVhZEFmdGVyV3JpdGU7 CisJCQlhZHZpc29yeVBvcyA9IHF1ZXVlSGVhZEFmdGVyV3JpdGU7CiAJCX0KIAorCQkvKgor CQkgKiBGb3IgbGFnIGNhbGN1bGF0aW9uLCB1c2Ugd2hpY2hldmVyIHBvc2l0aW9uIGlzIGZ1 cnRoZXIgYWhlYWQuCisJCSAqIFRoaXMgZW5zdXJlcyB3ZSBkb24ndCBzcHVyaW91c2x5IHdh a2UgYSBiYWNrZW5kIHRoYXQgaGFzIGJlZW4KKwkJICogZGlyZWN0bHkgYWR2YW5jZWQuCisJ CSAqLworCQlwb3MgPSBRVUVVRV9QT1NfTUFYKHBvcywgYWR2aXNvcnlQb3MpOworCiAJCS8q IFNpZ25hbCBiYWNrZW5kcyB0aGF0IGhhdmUgZmFsbGVuIHRvbyBmYXIgYmVoaW5kICovCiAJ CWxhZyA9IGFzeW5jUXVldWVQYWdlRGlmZihRVUVVRV9QT1NfUEFHRShRVUVVRV9IRUFEKSwK IAkJCQkJCQkJIFFVRVVFX1BPU19QQUdFKHBvcykpOwpAQCAtMjMwMiw2ICsyMzMyLDcgQEAg c3RhdGljIHZvaWQKIGFzeW5jUXVldWVSZWFkQWxsTm90aWZpY2F0aW9ucyh2b2lkKQogewog CXZvbGF0aWxlIFF1ZXVlUG9zaXRpb24gcG9zOworCVF1ZXVlUG9zaXRpb24gYWR2aXNvcnlQ b3M7CiAJUXVldWVQb3NpdGlvbiBoZWFkOwogCVNuYXBzaG90CXNuYXBzaG90OwogCkBAIC0y MzE5LDYgKzIzNTAsMjEgQEAgYXN5bmNRdWV1ZVJlYWRBbGxOb3RpZmljYXRpb25zKHZvaWQp CiAJUVVFVUVfQkFDS0VORF9XQUtFVVBfUEVORElORyhNeVByb2NOdW1iZXIpID0gZmFsc2U7 CiAJcG9zID0gUVVFVUVfQkFDS0VORF9QT1MoTXlQcm9jTnVtYmVyKTsKIAloZWFkID0gUVVF VUVfSEVBRDsKKworCS8qCisJICogQ2hlY2sgaWYgYW5vdGhlciBiYWNrZW5kIGhhcyBzZXQg YW4gYWR2aXNvcnkgcG9zaXRpb24gZm9yIHVzLgorCSAqIElmIHNvLCBhbmQgaWYgd2UgaGF2 ZW4ndCB5ZXQgcmVhZCBwYXN0IHRoYXQgcG9pbnQsIHdlIGNhbiBzYWZlbHkKKwkgKiBhZG9w dCB0aGUgYWR2aXNvcnkgcG9zaXRpb24gYW5kIHNraXAgdGhlIGludGVydmVuaW5nIG5vdGlm aWNhdGlvbnMuCisJICovCisJYWR2aXNvcnlQb3MgPSBRVUVVRV9CQUNLRU5EX0FEVklTT1JZ X1BPUyhNeVByb2NOdW1iZXIpOworCisJaWYgKCFRVUVVRV9QT1NfRVFVQUwoYWR2aXNvcnlQ b3MsIHBvcykgJiYKKwkJUVVFVUVfUE9TX1BSRUNFREVTKHBvcywgYWR2aXNvcnlQb3MpKQor CXsKKwkJcG9zID0gYWR2aXNvcnlQb3M7CisJCVFVRVVFX0JBQ0tFTkRfUE9TKE15UHJvY051 bWJlcikgPSBwb3M7CisJfQorCiAJTFdMb2NrUmVsZWFzZShOb3RpZnlRdWV1ZUxvY2spOwog CiAJaWYgKFFVRVVFX1BPU19FUVVBTChwb3MsIGhlYWQpKQpAQCAtMjQ0MCw2ICsyNDg2LDEz IEBAIGFzeW5jUXVldWVSZWFkQWxsTm90aWZpY2F0aW9ucyh2b2lkKQogCQkvKiBVcGRhdGUg c2hhcmVkIHN0YXRlICovCiAJCUxXTG9ja0FjcXVpcmUoTm90aWZ5UXVldWVMb2NrLCBMV19T SEFSRUQpOwogCQlRVUVVRV9CQUNLRU5EX1BPUyhNeVByb2NOdW1iZXIpID0gcG9zOworCQkv KgorCQkgKiBBZHZhbmNlIGFkdmlzb3J5UG9zIHRvIG91ciBjdXJyZW50IHBvc2l0aW9uIGlm IGl0IGhhcyBmYWxsZW4gYmVoaW5kLAorCQkgKiBidXQgcHJlc2VydmUgYW55IG5ld2VyIGFk dmlzb3J5IHBvc2l0aW9uIHRoYXQgbWF5IGhhdmUgYmVlbiBzZXQgYnkKKwkJICogYW5vdGhl ciBiYWNrZW5kIHdoaWxlIHdlIHdlcmUgcHJvY2Vzc2luZyBub3RpZmljYXRpb25zLgorCQkg Ki8KKwkJUVVFVUVfQkFDS0VORF9BRFZJU09SWV9QT1MoTXlQcm9jTnVtYmVyKSA9CisJCQlR VUVVRV9QT1NfTUFYKHBvcywgUVVFVUVfQkFDS0VORF9BRFZJU09SWV9QT1MoTXlQcm9jTnVt YmVyKSk7CiAJCUxXTG9ja1JlbGVhc2UoTm90aWZ5UXVldWVMb2NrKTsKIAl9CiAJUEdfRU5E X1RSWSgpOwotLSAKMi41MC4xCgo= --c9e2941be37f430381a9a0b1a7b9285d Content-Disposition: attachment; filename*0="0002-optimize_listen_notify-v20-alt3.txt" Content-Type: text/plain; name="0002-optimize_listen_notify-v20-alt3.txt" Content-Transfer-Encoding: base64 RnJvbSBjNDAzMDk4YWU0ZTRkMDZmMTA5ZWI2MjkyYTY3YzY1NzdlMTIzMDEwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEphY29ic29uIDxqb2VsQGNvbXBpbGVyLm9y Zz4KRGF0ZTogU3VuLCAxOSBPY3QgMjAyNSAwODozNTo0NCArMDIwMApTdWJqZWN0OiBbUEFU Q0hdIEltcGxlbWVudCBpZGVhICMzCgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5j LmMgfCAxNTAgKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBj aGFuZ2VkLCA4NSBpbnNlcnRpb25zKCspLCA2NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv YXN5bmMuYwppbmRleCA0ZTY1NTZmYjhkMS4uYjM0ZTRhMjI0N2IgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv YXN5bmMuYwpAQCAtMjY0LDYgKzI2NCwxMSBAQCB0eXBlZGVmIHN0cnVjdCBRdWV1ZVBvc2l0 aW9uCiAJICh4KS5wYWdlICE9ICh5KS5wYWdlID8gKHgpIDogXAogCSAoeCkub2Zmc2V0ID4g KHkpLm9mZnNldCA/ICh4KSA6ICh5KSkKIAorLyogcmV0dXJucyB0cnVlIGlmIHggY29tZXMg YmVmb3JlIHkgaW4gcXVldWUgb3JkZXIgKi8KKyNkZWZpbmUgUVVFVUVfUE9TX1BSRUNFREVT KHgseSkgXAorCShhc3luY1F1ZXVlUGFnZVByZWNlZGVzKCh4KS5wYWdlLCAoeSkucGFnZSkg fHwgXAorCSAoKHgpLnBhZ2UgPT0gKHkpLnBhZ2UgJiYgKHgpLm9mZnNldCA8ICh5KS5vZmZz ZXQpKQorCiAvKgogICogUGFyYW1ldGVyIGRldGVybWluaW5nIGhvdyBvZnRlbiB3ZSB0cnkg dG8gYWR2YW5jZSB0aGUgdGFpbCBwb2ludGVyOgogICogd2UgZG8gdGhhdCBhZnRlciBldmVy eSBRVUVVRV9DTEVBTlVQX0RFTEFZIHBhZ2VzIG9mIE5PVElGWSBkYXRhLiAgVGhpcyBpcwpA QCAtMjMwNCw2ICsyMzA5LDcgQEAgYXN5bmNRdWV1ZVJlYWRBbGxOb3RpZmljYXRpb25zKHZv aWQpCiAJdm9sYXRpbGUgUXVldWVQb3NpdGlvbiBwb3M7CiAJUXVldWVQb3NpdGlvbiBoZWFk OwogCVNuYXBzaG90CXNuYXBzaG90OworCWJvb2wJCXJlYWNoZWRTdG9wOwogCiAJLyogcGFn ZV9idWZmZXIgbXVzdCBiZSBhZGVxdWF0ZWx5IGFsaWduZWQsIHNvIHVzZSBhIHVuaW9uICov CiAJdW5pb24KQEAgLTIzNzIsNzcgKzIzNzgsNjkgQEAgYXN5bmNRdWV1ZVJlYWRBbGxOb3Rp ZmljYXRpb25zKHZvaWQpCiAJICogSXQgaXMgcG9zc2libGUgdGhhdCB3ZSBmYWlsIHdoaWxl IHRyeWluZyB0byBzZW5kIGEgbWVzc2FnZSB0byBvdXIKIAkgKiBmcm9udGVuZCAoZm9yIGV4 YW1wbGUsIGJlY2F1c2Ugb2YgZW5jb2RpbmcgY29udmVyc2lvbiBmYWlsdXJlKS4gIElmCiAJ ICogdGhhdCBoYXBwZW5zIGl0IGlzIGNyaXRpY2FsIHRoYXQgd2Ugbm90IHRyeSB0byBzZW5k IHRoZSBzYW1lIG1lc3NhZ2UKLQkgKiBvdmVyIGFuZCBvdmVyIGFnYWluLiAgVGhlcmVmb3Jl LCB3ZSBwbGFjZSBhIFBHX1RSWSBibG9jayBoZXJlIHRoYXQgd2lsbAotCSAqIGZvcmNpYmx5 IGFkdmFuY2Ugb3VyIHF1ZXVlIHBvc2l0aW9uIGJlZm9yZSB3ZSBsb3NlIGNvbnRyb2wgdG8g YW4gZXJyb3IuCi0JICogKFdlIGNvdWxkIGFsdGVybmF0aXZlbHkgcmV0YWtlIE5vdGlmeVF1 ZXVlTG9jayBhbmQgbW92ZSB0aGUgcG9zaXRpb24KLQkgKiBiZWZvcmUgaGFuZGxpbmcgZWFj aCBpbmRpdmlkdWFsIG1lc3NhZ2UsIGJ1dCB0aGF0IHNlZW1zIGxpa2UgdG9vIG11Y2gKLQkg KiBsb2NrIHRyYWZmaWMuKQorCSAqIG92ZXIgYW5kIG92ZXIgYWdhaW4uICBUaGVyZWZvcmUs IHdlIG11c3QgYWR2YW5jZSBvdXIgcXVldWUgcG9zaXRpb24KKwkgKiByZWd1bGFybHkgYXMg d2UgcHJvY2VzcyBtZXNzYWdlcy4KKwkgKgorCSAqIFdlIG11c3QgYWxzbyBiZSBjYXJlZnVs IGFib3V0IGNvbmN1cnJlbmN5OiBTaWduYWxCYWNrZW5kcygpIGNhbgorCSAqIGRpcmVjdGx5 IGFkdmFuY2Ugb3VyIHBvc2l0aW9uIHdoaWxlIHdlJ3JlIHJlYWRpbmcuICBUbyBwcmVzZXJ2 ZSBzdWNoCisJICogYWR2YW5jZW1lbnQsIGFzeW5jUXVldWVQcm9jZXNzUGFnZUVudHJpZXMg dXBkYXRlcyBvdXIgcG9zaXRpb24gaW4KKwkgKiBzaGFyZWQgbWVtb3J5IGZvciBlYWNoIG1l c3NhZ2UsIG9ubHkgd3JpdGluZyBpZiBvdXIgcG9zaXRpb24gaXMgYWhlYWQuCisJICogU2hh cmVkIGxvY2sgaXMgc3VmZmljaWVudCBzaW5jZSB3ZSdyZSBvbmx5IHVwZGF0aW5nIG91ciBv d24gcG9zaXRpb24uCiAJICovCi0JUEdfVFJZKCk7CisJZG8KIAl7Ci0JCWJvb2wJCXJlYWNo ZWRTdG9wOworCQlpbnQ2NAkJY3VycGFnZSA9IFFVRVVFX1BPU19QQUdFKHBvcyk7CisJCWlu dAkJCWN1cm9mZnNldCA9IFFVRVVFX1BPU19PRkZTRVQocG9zKTsKKwkJaW50CQkJc2xvdG5v OworCQlpbnQJCQljb3B5c2l6ZTsKIAotCQlkbworCQkvKgorCQkgKiBXZSBjb3B5IHRoZSBk YXRhIGZyb20gU0xSVSBpbnRvIGEgbG9jYWwgYnVmZmVyLCBzbyBhcyB0byBhdm9pZAorCQkg KiBob2xkaW5nIHRoZSBTTFJVIGxvY2sgd2hpbGUgd2UgYXJlIGV4YW1pbmluZyB0aGUgZW50 cmllcyBhbmQKKwkJICogcG9zc2libHkgdHJhbnNtaXR0aW5nIHRoZW0gdG8gb3VyIGZyb250 ZW5kLiAgQ29weSBvbmx5IHRoZSBwYXJ0CisJCSAqIG9mIHRoZSBwYWdlIHdlIHdpbGwgYWN0 dWFsbHkgaW5zcGVjdC4KKwkJICovCisJCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlX1Jl YWRPbmx5KE5vdGlmeUN0bCwgY3VycGFnZSwKKwkJCQkJCQkJCQkJSW52YWxpZFRyYW5zYWN0 aW9uSWQpOworCQlpZiAoY3VycGFnZSA9PSBRVUVVRV9QT1NfUEFHRShoZWFkKSkKIAkJewot CQkJaW50NjQJCWN1cnBhZ2UgPSBRVUVVRV9QT1NfUEFHRShwb3MpOwotCQkJaW50CQkJY3Vy b2Zmc2V0ID0gUVVFVUVfUE9TX09GRlNFVChwb3MpOwotCQkJaW50CQkJc2xvdG5vOwotCQkJ aW50CQkJY29weXNpemU7CisJCQkvKiB3ZSBvbmx5IHdhbnQgdG8gcmVhZCBhcyBmYXIgYXMg aGVhZCAqLworCQkJY29weXNpemUgPSBRVUVVRV9QT1NfT0ZGU0VUKGhlYWQpIC0gY3Vyb2Zm c2V0OworCQkJaWYgKGNvcHlzaXplIDwgMCkKKwkJCQljb3B5c2l6ZSA9IDA7CS8qIGp1c3Qg Zm9yIHNhZmV0eSAqLworCQl9CisJCWVsc2UKKwkJeworCQkJLyogZmV0Y2ggYWxsIHRoZSBy ZXN0IG9mIHRoZSBwYWdlICovCisJCQljb3B5c2l6ZSA9IFFVRVVFX1BBR0VTSVpFIC0gY3Vy b2Zmc2V0OworCQl9CisJCW1lbWNweShwYWdlX2J1ZmZlci5idWYgKyBjdXJvZmZzZXQsCisJ CQkgICBOb3RpZnlDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSArIGN1cm9mZnNl dCwKKwkJCSAgIGNvcHlzaXplKTsKKwkJLyogUmVsZWFzZSBsb2NrIHRoYXQgd2UgZ290IGZy b20gU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkoKSAqLworCQlMV0xvY2tSZWxlYXNlKFNp bXBsZUxydUdldEJhbmtMb2NrKE5vdGlmeUN0bCwgY3VycGFnZSkpOwogCi0JCQkvKgotCQkJ ICogV2UgY29weSB0aGUgZGF0YSBmcm9tIFNMUlUgaW50byBhIGxvY2FsIGJ1ZmZlciwgc28g YXMgdG8gYXZvaWQKLQkJCSAqIGhvbGRpbmcgdGhlIFNMUlUgbG9jayB3aGlsZSB3ZSBhcmUg ZXhhbWluaW5nIHRoZSBlbnRyaWVzIGFuZAotCQkJICogcG9zc2libHkgdHJhbnNtaXR0aW5n IHRoZW0gdG8gb3VyIGZyb250ZW5kLiAgQ29weSBvbmx5IHRoZSBwYXJ0Ci0JCQkgKiBvZiB0 aGUgcGFnZSB3ZSB3aWxsIGFjdHVhbGx5IGluc3BlY3QuCi0JCQkgKi8KLQkJCXNsb3RubyA9 IFNpbXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5KE5vdGlmeUN0bCwgY3VycGFnZSwKLQkJCQkJ CQkJCQkJCUludmFsaWRUcmFuc2FjdGlvbklkKTsKLQkJCWlmIChjdXJwYWdlID09IFFVRVVF X1BPU19QQUdFKGhlYWQpKQotCQkJewotCQkJCS8qIHdlIG9ubHkgd2FudCB0byByZWFkIGFz IGZhciBhcyBoZWFkICovCi0JCQkJY29weXNpemUgPSBRVUVVRV9QT1NfT0ZGU0VUKGhlYWQp IC0gY3Vyb2Zmc2V0OwotCQkJCWlmIChjb3B5c2l6ZSA8IDApCi0JCQkJCWNvcHlzaXplID0g MDsJLyoganVzdCBmb3Igc2FmZXR5ICovCi0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLyog ZmV0Y2ggYWxsIHRoZSByZXN0IG9mIHRoZSBwYWdlICovCi0JCQkJY29weXNpemUgPSBRVUVV RV9QQUdFU0laRSAtIGN1cm9mZnNldDsKLQkJCX0KLQkJCW1lbWNweShwYWdlX2J1ZmZlci5i dWYgKyBjdXJvZmZzZXQsCi0JCQkJICAgTm90aWZ5Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVy W3Nsb3Rub10gKyBjdXJvZmZzZXQsCi0JCQkJICAgY29weXNpemUpOwotCQkJLyogUmVsZWFz ZSBsb2NrIHRoYXQgd2UgZ290IGZyb20gU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkoKSAq LwotCQkJTFdMb2NrUmVsZWFzZShTaW1wbGVMcnVHZXRCYW5rTG9jayhOb3RpZnlDdGwsIGN1 cnBhZ2UpKTsKKwkJLyoKKwkJICogUHJvY2VzcyBtZXNzYWdlcyB1cCB0byB0aGUgc3RvcCBw b3NpdGlvbiwgZW5kIG9mIHBhZ2UsIG9yIGFuCisJCSAqIHVuY29tbWl0dGVkIG1lc3NhZ2Uu CisJCSAqCisJCSAqIE91ciBzdG9wIHBvc2l0aW9uIGlzIHdoYXQgd2UgZm91bmQgdG8gYmUg dGhlIGhlYWQncyBwb3NpdGlvbgorCQkgKiB3aGVuIHdlIGVudGVyZWQgdGhpcyBmdW5jdGlv bi4gSXQgbWlnaHQgaGF2ZSBjaGFuZ2VkIGFscmVhZHkuCisJCSAqIEJ1dCBpZiBpdCBoYXMs IHdlIHdpbGwgcmVjZWl2ZSAob3IgaGF2ZSBhbHJlYWR5IHJlY2VpdmVkIGFuZAorCQkgKiBx dWV1ZWQpIGFub3RoZXIgc2lnbmFsIGFuZCBjb21lIGhlcmUgYWdhaW4uCisJCSAqCisJCSAq IFdlIGFyZSBub3QgaG9sZGluZyBOb3RpZnlRdWV1ZUxvY2sgaGVyZSEgVGhlIHF1ZXVlIGNh biBvbmx5CisJCSAqIGV4dGVuZCBiZXlvbmQgdGhlIGhlYWQgcG9pbnRlciAoc2VlIGFib3Zl KS4KKwkJICogYXN5bmNRdWV1ZVByb2Nlc3NQYWdlRW50cmllcyB3aWxsIHVwZGF0ZSBvdXIg YmFja2VuZCdzIHBvc2l0aW9uCisJCSAqIGZvciBlYWNoIG1lc3NhZ2UgdG8gZW5zdXJlIHdl IGRvbid0IHJlcHJvY2VzcyBtZXNzYWdlcyBpZiB3ZSBmYWlsCisJCSAqIHBhcnR3YXkgdGhy b3VnaCwgYW5kIHRvIHByZXNlcnZlIGFueSBkaXJlY3QgYWR2YW5jZW1lbnQgdGhhdAorCQkg KiBTaWduYWxCYWNrZW5kcygpIG1pZ2h0IHBlcmZvcm0gY29uY3VycmVudGx5LgorCQkgKi8K KwkJcmVhY2hlZFN0b3AgPSBhc3luY1F1ZXVlUHJvY2Vzc1BhZ2VFbnRyaWVzKCZwb3MsIGhl YWQsCisJCQkJCQkJCQkJCQkgICBwYWdlX2J1ZmZlci5idWYsCisJCQkJCQkJCQkJCQkgICBz bmFwc2hvdCk7CiAKLQkJCS8qCi0JCQkgKiBQcm9jZXNzIG1lc3NhZ2VzIHVwIHRvIHRoZSBz dG9wIHBvc2l0aW9uLCBlbmQgb2YgcGFnZSwgb3IgYW4KLQkJCSAqIHVuY29tbWl0dGVkIG1l c3NhZ2UuCi0JCQkgKgotCQkJICogT3VyIHN0b3AgcG9zaXRpb24gaXMgd2hhdCB3ZSBmb3Vu ZCB0byBiZSB0aGUgaGVhZCdzIHBvc2l0aW9uCi0JCQkgKiB3aGVuIHdlIGVudGVyZWQgdGhp cyBmdW5jdGlvbi4gSXQgbWlnaHQgaGF2ZSBjaGFuZ2VkIGFscmVhZHkuCi0JCQkgKiBCdXQg aWYgaXQgaGFzLCB3ZSB3aWxsIHJlY2VpdmUgKG9yIGhhdmUgYWxyZWFkeSByZWNlaXZlZCBh bmQKLQkJCSAqIHF1ZXVlZCkgYW5vdGhlciBzaWduYWwgYW5kIGNvbWUgaGVyZSBhZ2Fpbi4K LQkJCSAqCi0JCQkgKiBXZSBhcmUgbm90IGhvbGRpbmcgTm90aWZ5UXVldWVMb2NrIGhlcmUh IFRoZSBxdWV1ZSBjYW4gb25seQotCQkJICogZXh0ZW5kIGJleW9uZCB0aGUgaGVhZCBwb2lu dGVyIChzZWUgYWJvdmUpIGFuZCB3ZSBsZWF2ZSBvdXIKLQkJCSAqIGJhY2tlbmQncyBwb2lu dGVyIHdoZXJlIGl0IGlzIHNvIG5vYm9keSB3aWxsIHRydW5jYXRlIG9yCi0JCQkgKiByZXdy aXRlIHBhZ2VzIHVuZGVyIHVzLiBFc3BlY2lhbGx5IHdlIGRvbid0IHdhbnQgdG8gaG9sZCBh IGxvY2sKLQkJCSAqIHdoaWxlIHNlbmRpbmcgdGhlIG5vdGlmaWNhdGlvbnMgdG8gdGhlIGZy b250ZW5kLgotCQkJICovCi0JCQlyZWFjaGVkU3RvcCA9IGFzeW5jUXVldWVQcm9jZXNzUGFn ZUVudHJpZXMoJnBvcywgaGVhZCwKLQkJCQkJCQkJCQkJCQkgICBwYWdlX2J1ZmZlci5idWYs Ci0JCQkJCQkJCQkJCQkJICAgc25hcHNob3QpOwotCQl9IHdoaWxlICghcmVhY2hlZFN0b3Ap OwotCX0KLQlQR19GSU5BTExZKCk7Ci0JewotCQkvKiBVcGRhdGUgc2hhcmVkIHN0YXRlICov Ci0JCUxXTG9ja0FjcXVpcmUoTm90aWZ5UXVldWVMb2NrLCBMV19TSEFSRUQpOwotCQlRVUVV RV9CQUNLRU5EX1BPUyhNeVByb2NOdW1iZXIpID0gcG9zOwotCQlMV0xvY2tSZWxlYXNlKE5v dGlmeVF1ZXVlTG9jayk7Ci0JfQotCVBHX0VORF9UUlkoKTsKKwl9IHdoaWxlICghcmVhY2hl ZFN0b3ApOwogCiAJLyogRG9uZSB3aXRoIHNuYXBzaG90ICovCiAJVW5yZWdpc3RlclNuYXBz aG90KHNuYXBzaG90KTsKQEAgLTI0OTAsNiArMjQ4OCwyNCBAQCBhc3luY1F1ZXVlUHJvY2Vz c1BhZ2VFbnRyaWVzKHZvbGF0aWxlIFF1ZXVlUG9zaXRpb24gKmN1cnJlbnQsCiAJCSAqLwog CQlyZWFjaGVkRW5kT2ZQYWdlID0gYXN5bmNRdWV1ZUFkdmFuY2UoY3VycmVudCwgcWUtPmxl bmd0aCk7CiAKKwkJLyoKKwkJICogVXBkYXRlIG91ciBwb3NpdGlvbiBpbiBzaGFyZWQgbWVt b3J5IGltbWVkaWF0ZWx5IGFmdGVyIGFkdmFuY2luZywKKwkJICogYmVmb3JlIHdlIGF0dGVt cHQgdG8gcHJvY2VzcyB0aGUgbWVzc2FnZS4gVGhpcyBlbnN1cmVzIHdlIHdvbid0CisJCSAq IHJlcHJvY2VzcyB0aGlzIG1lc3NhZ2UgaWYgTm90aWZ5TXlGcm9udEVuZCBmYWlscy4KKwkJ ICoKKwkJICogT25seSB3cml0ZSBpZiBvdXIgcG9zaXRpb24gaXMgYWhlYWQgb2YgdGhlIHNo YXJlZCBwb3NpdGlvbi4KKwkJICogSWYgdGhlIHNoYXJlZCBwb3NpdGlvbiBpcyBhbHJlYWR5 IGFoZWFkIChkdWUgdG8gZGlyZWN0IGFkdmFuY2VtZW50CisJCSAqIGJ5IFNpZ25hbEJhY2tl bmRzKSwgcHJlc2VydmUgaXQgYnkgbm90IG92ZXJ3cml0aW5nLgorCQkgKi8KKwkJTFdMb2Nr QWNxdWlyZShOb3RpZnlRdWV1ZUxvY2ssIExXX1NIQVJFRCk7CisJCXsKKwkJCVF1ZXVlUG9z aXRpb24gc2hhcmVkUG9zID0gUVVFVUVfQkFDS0VORF9QT1MoTXlQcm9jTnVtYmVyKTsKKwor CQkJaWYgKFFVRVVFX1BPU19QUkVDRURFUyhzaGFyZWRQb3MsICpjdXJyZW50KSkKKwkJCQlR VUVVRV9CQUNLRU5EX1BPUyhNeVByb2NOdW1iZXIpID0gKmN1cnJlbnQ7CisJCX0KKwkJTFdM b2NrUmVsZWFzZShOb3RpZnlRdWV1ZUxvY2spOworCiAJCS8qIElnbm9yZSBtZXNzYWdlcyBk ZXN0aW5lZCBmb3Igb3RoZXIgZGF0YWJhc2VzICovCiAJCWlmIChxZS0+ZGJvaWQgPT0gTXlE YXRhYmFzZUlkKQogCQl7CkBAIC0yNTE1LDYgKzI1MzEsMTAgQEAgYXN5bmNRdWV1ZVByb2Nl c3NQYWdlRW50cmllcyh2b2xhdGlsZSBRdWV1ZVBvc2l0aW9uICpjdXJyZW50LAogCQkJCSAq IG1lc3NhZ2VzLgogCQkJCSAqLwogCQkJCSpjdXJyZW50ID0gdGhpc2VudHJ5OworCQkJCS8q IFVwZGF0ZSBzaGFyZWQgbWVtb3J5IHRvIHJlZmxlY3QgdGhlIGJhY2tlZC11cCBwb3NpdGlv biAqLworCQkJCUxXTG9ja0FjcXVpcmUoTm90aWZ5UXVldWVMb2NrLCBMV19TSEFSRUQpOwor CQkJCVFVRVVFX0JBQ0tFTkRfUE9TKE15UHJvY051bWJlcikgPSAqY3VycmVudDsKKwkJCQlM V0xvY2tSZWxlYXNlKE5vdGlmeVF1ZXVlTG9jayk7CiAJCQkJcmVhY2hlZFN0b3AgPSB0cnVl OwogCQkJCWJyZWFrOwogCQkJfQotLSAKMi41MC4xCgo= --c9e2941be37f430381a9a0b1a7b9285d Content-Disposition: attachment; filename*0="0002-optimize_listen_notify-v20-alt2.txt" Content-Type: text/plain; name="0002-optimize_listen_notify-v20-alt2.txt" Content-Transfer-Encoding: base64 RnJvbSA5MjhjYzAzMjcwNmFjMTU0MTUzMjc5YWRiZGZiYTk1ZjZhZjJmYWU0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEphY29ic29uIDxqb2VsQGNvbXBpbGVyLm9y Zz4KRGF0ZTogU3VuLCAxOSBPY3QgMjAyNSAwODoxMjo0NyArMDIwMApTdWJqZWN0OiBbUEFU Q0hdIEltcGxlbWVudCBpZGVhICMyOiBkb25lUG9zCgotLS0KIHNyYy9iYWNrZW5kL2NvbW1h bmRzL2FzeW5jLmMgfCA1NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0K IDEgZmlsZSBjaGFuZ2VkLCA0OSBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9hc3luYy5jCmluZGV4IDRlNjU1NmZiOGQxLi5jODE4MDcxMDdkMSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYworKysgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9hc3luYy5jCkBAIC0yODUsNyArMjg1LDggQEAgdHlwZWRlZiBzdHJ1Y3QgUXVl dWVCYWNrZW5kU3RhdHVzCiAJaW50MzIJCXBpZDsJCQkvKiBlaXRoZXIgYSBQSUQgb3IgSW52 YWxpZFBpZCAqLwogCU9pZAkJCWRib2lkOwkJCS8qIGJhY2tlbmQncyBkYXRhYmFzZSBPSUQs IG9yIEludmFsaWRPaWQgKi8KIAlQcm9jTnVtYmVyCW5leHRMaXN0ZW5lcjsJLyogaWQgb2Yg bmV4dCBsaXN0ZW5lciwgb3IgSU5WQUxJRF9QUk9DX05VTUJFUiAqLwotCVF1ZXVlUG9zaXRp b24gcG9zOwkJCS8qIGJhY2tlbmQgaGFzIHJlYWQgcXVldWUgdXAgdG8gaGVyZSAqLworCVF1 ZXVlUG9zaXRpb24gcG9zOwkJCS8qIG5leHQgcG9zaXRpb24gdG8gcmVhZCBmcm9tICovCisJ UXVldWVQb3NpdGlvbiBkb25lUG9zOwkJLyogYmFja2VuZCBoYXMgZGVmaW5pdGl2ZWx5IHBy b2Nlc3NlZCB1cCB0byBoZXJlICovCiAJYm9vbAkJd2FrZXVwUGVuZGluZzsJLyogc2lnbmFs IHNlbnQgYnV0IG5vdCB5ZXQgcHJvY2Vzc2VkICovCiB9IFF1ZXVlQmFja2VuZFN0YXR1czsK IApAQCAtMzQ3LDYgKzM0OCw3IEBAIHN0YXRpYyBkc2hhc2hfdGFibGUgKmNoYW5uZWxIYXNo ID0gTlVMTDsKICNkZWZpbmUgUVVFVUVfQkFDS0VORF9EQk9JRChpKQkJKGFzeW5jUXVldWVD b250cm9sLT5iYWNrZW5kW2ldLmRib2lkKQogI2RlZmluZSBRVUVVRV9ORVhUX0xJU1RFTkVS KGkpCQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmJhY2tlbmRbaV0ubmV4dExpc3RlbmVyKQogI2Rl ZmluZSBRVUVVRV9CQUNLRU5EX1BPUyhpKQkJKGFzeW5jUXVldWVDb250cm9sLT5iYWNrZW5k W2ldLnBvcykKKyNkZWZpbmUgUVVFVUVfQkFDS0VORF9ET05FUE9TKGkpCShhc3luY1F1ZXVl Q29udHJvbC0+YmFja2VuZFtpXS5kb25lUG9zKQogI2RlZmluZSBRVUVVRV9CQUNLRU5EX1dB S0VVUF9QRU5ESU5HKGkpCShhc3luY1F1ZXVlQ29udHJvbC0+YmFja2VuZFtpXS53YWtldXBQ ZW5kaW5nKQogCiAvKgpAQCAtNjc0LDYgKzY3Niw3IEBAIEFzeW5jU2htZW1Jbml0KHZvaWQp CiAJCQlRVUVVRV9CQUNLRU5EX0RCT0lEKGkpID0gSW52YWxpZE9pZDsKIAkJCVFVRVVFX05F WFRfTElTVEVORVIoaSkgPSBJTlZBTElEX1BST0NfTlVNQkVSOwogCQkJU0VUX1FVRVVFX1BP UyhRVUVVRV9CQUNLRU5EX1BPUyhpKSwgMCwgMCk7CisJCQlTRVRfUVVFVUVfUE9TKFFVRVVF X0JBQ0tFTkRfRE9ORVBPUyhpKSwgMCwgMCk7CiAJCQlRVUVVRV9CQUNLRU5EX1dBS0VVUF9Q RU5ESU5HKGkpID0gZmFsc2U7CiAJCX0KIAl9CkBAIC0xMzEyLDYgKzEzMTUsNyBAQCBFeGVj X0xpc3RlblByZUNvbW1pdCh2b2lkKQogCQkJcHJldkxpc3RlbmVyID0gaTsKIAl9CiAJUVVF VUVfQkFDS0VORF9QT1MoTXlQcm9jTnVtYmVyKSA9IG1heDsKKwlRVUVVRV9CQUNLRU5EX0RP TkVQT1MoTXlQcm9jTnVtYmVyKSA9IG1heDsKIAlRVUVVRV9CQUNLRU5EX1BJRChNeVByb2NO dW1iZXIpID0gTXlQcm9jUGlkOwogCVFVRVVFX0JBQ0tFTkRfREJPSUQoTXlQcm9jTnVtYmVy KSA9IE15RGF0YWJhc2VJZDsKIAkvKiBJbnNlcnQgYmFja2VuZCBpbnRvIGxpc3Qgb2YgbGlz dGVuZXJzIGF0IGNvcnJlY3QgcG9zaXRpb24gKi8KQEAgLTIwNDgsNiArMjA1Miw3IEBAIFNp Z25hbEJhY2tlbmRzKHZvaWQpCiAJCSBpID0gUVVFVUVfTkVYVF9MSVNURU5FUihpKSkKIAl7 CiAJCVF1ZXVlUG9zaXRpb24gcG9zOworCQlRdWV1ZVBvc2l0aW9uIGRvbmVQb3M7CiAJCWlu dDY0CQlsYWc7CiAJCWludDMyCQlwaWQ7CiAKQEAgLTIwNTUsNiArMjA2MCw3IEBAIFNpZ25h bEJhY2tlbmRzKHZvaWQpCiAJCQljb250aW51ZTsKIAogCQlwb3MgPSBRVUVVRV9CQUNLRU5E X1BPUyhpKTsKKwkJZG9uZVBvcyA9IFFVRVVFX0JBQ0tFTkRfRE9ORVBPUyhpKTsKIAogCQkv KiBEaXJlY3QgYWR2YW5jZW1lbnQgZm9yIGlkbGUgYmFja2VuZHMgYXQgdGhlIG9sZCBoZWFk ICovCiAJCWlmIChwZW5kaW5nTm90aWZpZXMgIT0gTlVMTCAmJgpAQCAtMjA2NCw5ICsyMDcw LDE3IEBAIFNpZ25hbEJhY2tlbmRzKHZvaWQpCiAJCQlwb3MgPSBxdWV1ZUhlYWRBZnRlcldy aXRlOwogCQl9CiAKLQkJLyogU2lnbmFsIGJhY2tlbmRzIHRoYXQgaGF2ZSBmYWxsZW4gdG9v IGZhciBiZWhpbmQgKi8KKwkJLyoKKwkJICogU2lnbmFsIGJhY2tlbmRzIHRoYXQgaGF2ZSBm YWxsZW4gdG9vIGZhciBiZWhpbmQuCisJCSAqCisJCSAqIFdlIHVzZSBkb25lUG9zIHJhdGhl ciB0aGFuIHBvcyBmb3IgdGhlIGxhZyBjaGVjayBiZWNhdXNlIGRvbmVQb3MKKwkJICogaXMg d2hhdCBtYXR0ZXJzIGZvciBxdWV1ZSB0cnVuY2F0aW9uIChzZWUgYXN5bmNRdWV1ZUFkdmFu Y2VUYWlsKS4KKwkJICogQSBiYWNrZW5kIG1heSBoYXZlIGJlZW4gZGlyZWN0bHkgYWR2YW5j ZWQgKHBvcyBpcyByZWNlbnQpIHdoaWxlCisJCSAqIGRvbmVQb3MgaXMgc3RpbGwgZmFyIGJl aGluZCwgaG9sZGluZyBiYWNrIHRoZSB0YWlsLiAgV2UgbmVlZCB0bworCQkgKiB3YWtlIHN1 Y2ggYmFja2VuZHMgc28gdGhleSBjYW4gYWR2YW5jZSB0aGVpciBkb25lUG9zLgorCQkgKi8K IAkJbGFnID0gYXN5bmNRdWV1ZVBhZ2VEaWZmKFFVRVVFX1BPU19QQUdFKFFVRVVFX0hFQUQp LAotCQkJCQkJCQkgUVVFVUVfUE9TX1BBR0UocG9zKSk7CisJCQkJCQkJCSBRVUVVRV9QT1Nf UEFHRShkb25lUG9zKSk7CiAKIAkJaWYgKGxhZyA+PSBRVUVVRV9DTEVBTlVQX0RFTEFZKQog CQl7CkBAIC0yMzE5LDE0ICsyMzMzLDI1IEBAIGFzeW5jUXVldWVSZWFkQWxsTm90aWZpY2F0 aW9ucyh2b2lkKQogCVFVRVVFX0JBQ0tFTkRfV0FLRVVQX1BFTkRJTkcoTXlQcm9jTnVtYmVy KSA9IGZhbHNlOwogCXBvcyA9IFFVRVVFX0JBQ0tFTkRfUE9TKE15UHJvY051bWJlcik7CiAJ aGVhZCA9IFFVRVVFX0hFQUQ7Ci0JTFdMb2NrUmVsZWFzZShOb3RpZnlRdWV1ZUxvY2spOwog CiAJaWYgKFFVRVVFX1BPU19FUVVBTChwb3MsIGhlYWQpKQogCXsKLQkJLyogTm90aGluZyB0 byBkbywgd2UgaGF2ZSByZWFkIGFsbCBub3RpZmljYXRpb25zIGFscmVhZHkuICovCisJCS8q CisJCSAqIE5vdGhpbmcgdG8gZG8sIHdlIGhhdmUgcmVhZCBhbGwgbm90aWZpY2F0aW9ucyBh bHJlYWR5LgorCQkgKgorCQkgKiBVcGRhdGUgZG9uZVBvcyB0byBtYXRjaCBwb3MgYmVmb3Jl IHJldHVybmluZy4gIFRoaXMgaXMgaW1wb3J0YW50CisJCSAqIHdoZW4gb3VyIHBvc2l0aW9u IHdhcyBhZHZhbmNlZCB2aWEgZGlyZWN0IGFkdmFuY2VtZW50OiB3ZSBuZWVkIHRvCisJCSAq IHVwZGF0ZSBkb25lUG9zIHNvIHRoZSBxdWV1ZSB0YWlsIGNhbiBhZHZhbmNlLiAgV2l0aG91 dCB0aGlzLAorCQkgKiBiYWNrZW5kcyB0aGF0IGhhdmUgYmVlbiBkaXJlY3RseSBhZHZhbmNl ZCB3b3VsZCBob2xkIGJhY2sgcXVldWUKKwkJICogdHJ1bmNhdGlvbiBpbmRlZmluaXRlbHku CisJCSAqLworCQlRVUVVRV9CQUNLRU5EX0RPTkVQT1MoTXlQcm9jTnVtYmVyKSA9IHBvczsK KwkJTFdMb2NrUmVsZWFzZShOb3RpZnlRdWV1ZUxvY2spOwogCQlyZXR1cm47CiAJfQogCisJ TFdMb2NrUmVsZWFzZShOb3RpZnlRdWV1ZUxvY2spOworCiAJLyotLS0tLS0tLS0tCiAJICog R2V0IHNuYXBzaG90IHdlJ2xsIHVzZSB0byBkZWNpZGUgd2hpY2ggeGFjdHMgYXJlIHN0aWxs IGluIHByb2dyZXNzLgogCSAqIFRoaXMgaXMgdHJpY2tpZXIgdGhhbiBpdCBtaWdodCBzZWVt LCBiZWNhdXNlIG9mIHJhY2UgY29uZGl0aW9ucy4KQEAgLTI0MzcsOSArMjQ2MiwxOSBAQCBh c3luY1F1ZXVlUmVhZEFsbE5vdGlmaWNhdGlvbnModm9pZCkKIAl9CiAJUEdfRklOQUxMWSgp OwogCXsKLQkJLyogVXBkYXRlIHNoYXJlZCBzdGF0ZSAqLworCQkvKgorCQkgKiBVcGRhdGUg c2hhcmVkIHN0YXRlLgorCQkgKgorCQkgKiBXZSB1cGRhdGUgZG9uZVBvcyB0byB3aGF0IHdl IGFjdHVhbGx5IHJlYWQgKHRoZSBsb2NhbCBwb3MgdmFyaWFibGUpLAorCQkgKiBhcyB0aGlz IGlzIHVzZWQgZm9yIHRydW5jYXRpb24gc2FmZXR5LiAgRm9yIHRoZSByZWFkIHBvc2l0aW9u IChwb3MpLAorCQkgKiB3ZSB1c2UgdGhlIG1heGltdW0gb2Ygb3VyIGxvY2FsIHBvc2l0aW9u IGFuZCB0aGUgY3VycmVudCBzaGFyZWQKKwkJICogcG9zaXRpb24sIGluIGNhc2UgYW5vdGhl ciBiYWNrZW5kIHVzZWQgZGlyZWN0IGFkdmFuY2VtZW50IHRvIHNraXAgdXMKKwkJICogYWhl YWQgd2hpbGUgd2Ugd2VyZSByZWFkaW5nLiAgVGhpcyBwcmV2ZW50cyB1cyBmcm9tIGdvaW5n IGJhY2t3YXJkcworCQkgKiBhbmQgcG90ZW50aWFsbHkgcG9pbnRpbmcgdG8gYSB0cnVuY2F0 ZWQgcGFnZS4KKwkJICovCiAJCUxXTG9ja0FjcXVpcmUoTm90aWZ5UXVldWVMb2NrLCBMV19T SEFSRUQpOwotCQlRVUVVRV9CQUNLRU5EX1BPUyhNeVByb2NOdW1iZXIpID0gcG9zOworCQlR VUVVRV9CQUNLRU5EX0RPTkVQT1MoTXlQcm9jTnVtYmVyKSA9IHBvczsKKwkJUVVFVUVfQkFD S0VORF9QT1MoTXlQcm9jTnVtYmVyKSA9IFFVRVVFX1BPU19NQVgocG9zLCBRVUVVRV9CQUNL RU5EX1BPUyhNeVByb2NOdW1iZXIpKTsKIAkJTFdMb2NrUmVsZWFzZShOb3RpZnlRdWV1ZUxv Y2spOwogCX0KIAlQR19FTkRfVFJZKCk7CkBAIC0yNTg5LDcgKzI2MjQsMTMgQEAgYXN5bmNR dWV1ZUFkdmFuY2VUYWlsKHZvaWQpCiAJZm9yIChQcm9jTnVtYmVyIGkgPSBRVUVVRV9GSVJT VF9MSVNURU5FUjsgaSAhPSBJTlZBTElEX1BST0NfTlVNQkVSOyBpID0gUVVFVUVfTkVYVF9M SVNURU5FUihpKSkKIAl7CiAJCUFzc2VydChRVUVVRV9CQUNLRU5EX1BJRChpKSAhPSBJbnZh bGlkUGlkKTsKLQkJbWluID0gUVVFVUVfUE9TX01JTihtaW4sIFFVRVVFX0JBQ0tFTkRfUE9T KGkpKTsKKwkJLyoKKwkJICogVXNlIGRvbmVQb3MgcmF0aGVyIHRoYW4gcG9zIGZvciB0cnVu Y2F0aW9uIHNhZmV0eS4gIFRoZSBkb25lUG9zCisJCSAqIGZpZWxkIHJlcHJlc2VudHMgd2hh dCB0aGUgYmFja2VuZCBoYXMgZGVmaW5pdGl2ZWx5IHByb2Nlc3NlZCwgd2hpbGUKKwkJICog cG9zIGNhbiBiZSBhZHZhbmNlZCBieSBvdGhlciBiYWNrZW5kcyB2aWEgZGlyZWN0IGFkdmFu Y2VtZW50LiAgVGhpcworCQkgKiBwcmV2ZW50cyB0cnVuY2F0aW5nIHBhZ2VzIHRoYXQgYSBi YWNrZW5kIGlzIHN0aWxsIHJlYWRpbmcgZnJvbS4KKwkJICovCisJCW1pbiA9IFFVRVVFX1BP U19NSU4obWluLCBRVUVVRV9CQUNLRU5EX0RPTkVQT1MoaSkpOwogCX0KIAlRVUVVRV9UQUlM ID0gbWluOwogCW9sZHRhaWxwYWdlID0gUVVFVUVfU1RPUF9QQUdFOwotLSAKMi41MC4xCgo= --c9e2941be37f430381a9a0b1a7b9285d--