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 1v9KSJ-00FnAx-6D for pgsql-hackers@arkaria.postgresql.org; Thu, 16 Oct 2025 09:39:31 +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 1v9KSI-00B8gV-2S for pgsql-hackers@arkaria.postgresql.org; Thu, 16 Oct 2025 09:39:29 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1v9KSG-00B8gN-SF for pgsql-hackers@lists.postgresql.org; Thu, 16 Oct 2025 09:39:28 +0000 Received: from fhigh-b3-smtp.messagingengine.com ([202.12.124.154]) by makus.postgresql.org with smtp (Exim 4.96) (envelope-from ) id 1v9KSD-0024Am-1T for pgsql-hackers@postgresql.org; Thu, 16 Oct 2025 09:39:27 +0000 Received: from phl-compute-04.internal (phl-compute-04.internal [10.202.2.44]) by mailfhigh.stl.internal (Postfix) with ESMTP id EEDE37A01A0; Thu, 16 Oct 2025 05:39:23 -0400 (EDT) Received: from phl-imap-03 ([10.202.2.93]) by phl-compute-04.internal (MEProxy); Thu, 16 Oct 2025 05:39:24 -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=1760607563; x=1760693963; bh=fKiqdiFrjB v8vloIP1sO5Upb9G4th9saqtr0TwWgqbo=; b=F/JWWMDAHiLvtm+0yJcGu3wE8b P8rbfOcydkiD8WCxV2HZ/UUcRXEplQsFnprJaHuS2JoHfsj8n1BJY/r9ax1cLivS FMZinJE7MnKEnVClXfh4xkPg5hnaxV2+u1X2NS1spS8S31M8WiJA2y8/XPKP2chB ZgZA6tNI3pyhuxD354GiRKDM3U3GWMXeyV+pd2wWVDamrt9zOKiLY2Jk4hjO0wLK 10F8MQ+bGh+Pu7JCW98CpTJiwKzRqRJB62v8Bs4V5bGbxzBgaR7a5DfBv5ebboFM JLogRYOR93LxVz9Yd87a06XWh5bkZxdjFm0h814nvEE2scp23pFhWaBvHoRw== 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= 1760607563; x=1760693963; bh=fKiqdiFrjBv8vloIP1sO5Upb9G4th9saqtr 0TwWgqbo=; b=dkuBsiSBMQZJOWf6xJGioRcMMUvaX4Myh9uMdcXJbwzpfUI0Yeu UY7Q4ww9d8l7qkSLmwpLRNriBK3h8SJtS7XYH5yeAvemCbZZ6PQRYIhUTULd765Q uLumpOCupRhcQTPz3Smm/tb7RFZVrnRVnbrtUOGimeA8QYUytCSlfovrtjR6s7In 4BqVJLo6EpUwd6faVbYUTKNpzxOsu3XMGEoxx+xYLa6p5BuPU1yk4R/t8Nohg09P iZ6yoEIJSWeuJR+hz2wknUrzoCsrJMWa5cJI9PyzJdGOwqzLNGYhpGlS7D0n2P5Z moO2qVlpr+pBec0bXkG2mPdIsa/Sp3iABvQ== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggdduvdehleehucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucenucfjughrpefoggffhffvvefkjghfufgtsehmtderre ertddtnecuhfhrohhmpedflfhovghlucflrggtohgsshhonhdfuceojhhovghlsegtohhm phhilhgvrhdrohhrgheqnecuggftrfgrthhtvghrnhepfffgleffffdvhefhieegfeeije dujedvieeuveeugefgveeukeevieethefhteeinecuvehluhhsthgvrhfuihiivgeptden ucfrrghrrghmpehmrghilhhfrhhomhepjhhovghlsegtohhmphhilhgvrhdrohhrghdpnh gspghrtghpthhtohepfedpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtoheprghrshgv nhhihidrmhhukhhhihhnrdguvghvsehgmhgrihhlrdgtohhmpdhrtghpthhtohepphhgsh hqlhdqhhgrtghkvghrshesphhoshhtghhrvghsqhhlrdhorhhgpdhrtghpthhtohepthhg lhesshhsshdrphhghhdrphgrrdhush X-ME-Proxy: Feedback-ID: ic6394509:Fastmail Received: by mailuser.phl.internal (Postfix, from userid 501) id 5B73918E0054; Thu, 16 Oct 2025 05:39:23 -0400 (EDT) X-Mailer: MessagingEngine.com Webmail Interface MIME-Version: 1.0 X-ThreadId: AZ7XRsRLdGms Date: Thu, 16 Oct 2025 11:39:02 +0200 From: "Joel Jacobson" To: "Tom Lane" , "Arseniy Mukhin" Cc: pgsql-hackers Message-Id: <3ef9b541-e835-4dc8-8f7a-b76677f17b36@app.fastmail.com> In-Reply-To: <1126737.1760537761@sss.pgh.pa.us> 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> <2a30bcf1-aee2-4b07-a302-11e4b350adaf@app.fastmail.com> <1126737.1760537761@sss.pgh.pa.us> Subject: Re: Optimize LISTEN/NOTIFY Content-Type: multipart/mixed; boundary=b0b77e07619846f8a224da5c4226b641 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --b0b77e07619846f8a224da5c4226b641 Content-Type: text/plain Content-Transfer-Encoding: 7bit On Wed, Oct 15, 2025, at 16:16, Tom Lane wrote: > Arseniy Mukhin writes: >> I think "Direct advancement" is a good idea. But the way it's >> implemented now has a concurrency bug. Listeners store its current >> position in the local variable 'pos' during the reading in >> asyncQueueReadAllNotifications() and don't hold NotifyQueueLock. It >> means that some notifier can directly advance the listener's position >> while the listener has an old value in the local variable. The same >> time we use listener positions to find out the limit we can truncate >> the queue in asyncQueueAdvanceTail(). > > Good catch! I've implemented the three ideas presented below, attached as .txt files that are diffs on top of v19, which has these changes since v17: 0002-optimize_listen_notify-v19.patch: * Improve wording of top comment per request from Chao Li. * Add initChannelHash call to top of SignalBackends, to fix bug reported by Arseniy Mukhin. > I think we can perhaps salvage the idea if we invent a separate > "advisory" queue position field, which tells its backend "hey, > you could skip as far as here if you want", but is not used for > purposes of SLRU truncation. Above idea is implemented in 0002-optimize_listen_notify-v19-alt1.txt > Alternatively, split the queue pos > into "this is where to read next" and "this is as much as I'm > definitively done with", where the second field gets advanced at > the end of asyncQueueReadAllNotifications. Not sure which > view would be less confusing (in the end I guess they're nearly > the same thing, differently explained). Above idea is implemented in 0002-optimize_listen_notify-v19-alt2.txt > A different line of thought could be to get rid of > asyncQueueReadAllNotifications's optimization of moving the > queue pos only once, per > > * (We could alternatively retake NotifyQueueLock and move the position > * before handling each individual message, but that seems like too much > * lock traffic.) > > Since we only need shared lock to advance our own queue pos, > maybe that wouldn't be too awful. Not sure. Above idea is implemented in 0002-optimize_listen_notify-v19-alt3.txt /Joel --b0b77e07619846f8a224da5c4226b641 Content-Disposition: attachment; filename*0="0001-optimize_listen_notify-v19.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0001-optimize=5Flisten=5Fnotify-v19.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 --b0b77e07619846f8a224da5c4226b641 Content-Disposition: attachment; filename*0="0002-optimize_listen_notify-v19.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0002-optimize=5Flisten=5Fnotify-v19.patch?=" Content-Transfer-Encoding: base64 RnJvbSA4ZDc3ZmE0Mjk2ZjUzMGIwMzgxY2YyZTYxMjc3NGYwZmVhZjhiNTA2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEphY29ic29uIDxqb2VsQGNvbXBpbGVyLm9y Zz4KRGF0ZTogVHVlLCAxNCBPY3QgMjAyNSAwODowMzoxOSArMDIwMApTdWJqZWN0OiBbUEFU Q0ggMi8yXSBPcHRpbWl6ZSBMSVNURU4vTk9USUZZIHdpdGggc2hhcmVkIGNoYW5uZWwgbWFw IGFuZCBkaXJlY3QKIGFkdmFuY2VtZW50CgpUaGlzIHBhdGNoIHJld29ya3MgdGhlIExJU1RF Ti9OT1RJRlkgc2lnbmFsaW5nIHBhdGggdG8gYXZvaWQgdGhlCmxvbmctc3RhbmRpbmcgaW5l ZmZpY2llbmN5IHdoZXJlIGV2ZXJ5IGNvbW1pdCB3YWtlcyBhbGwgbGlzdGVuaW5nCmJhY2tl bmRzIGluIHRoZSBzYW1lIGRhdGFiYXNlLCBldmVuIHRob3NlIHRoYXQgYXJlIGxpc3Rlbmlu ZyBvbgpjb21wbGV0ZWx5IGRpZmZlcmVudCBjaGFubmVscy4KClByb2JsZW0KLS0tLS0tLQoK QXQgcHJlc2VudCwgU2lnbmFsQmFja2VuZHMgaGFzIG5vIGNlbnRyYWwga25vd2xlZGdlIG9m IHdoaWNoIGJhY2tlbmQKbGlzdGVucyBvbiB3aGljaCBjaGFubmVsLiBXaGVuIGEgYmFja2Vu ZCBjb21taXRzIGEgdHJhbnNhY3Rpb24gdGhhdAppc3N1ZWQgTk9USUZZLCBpdCBzaW1wbHkg aXRlcmF0ZXMgb3ZlciBhbGwgcmVnaXN0ZXJlZCBsaXN0ZW5lcnMgaW4gdGhlCnNhbWUgZGF0 YWJhc2UgYW5kIHNlbmRzIGVhY2ggb25lIGEgUFJPQ1NJR19OT1RJRllfSU5URVJSVVBUIHNp Z25hbC4KClRoYXQgYmVoYXZpb3IgaXMgZmluZSB3aGVuIGFsbCBsaXN0ZW5lcnMgYXJlIG9u IHRoZSBzYW1lIGNoYW5uZWwsIGJ1dAp3aGVuIG1hbnkgYmFja2VuZHMgYXJlIGxpc3Rlbmlu ZyBvbiBkaWZmZXJlbnQgY2hhbm5lbHMsIGVhY2ggTk9USUZZCnRyaWdnZXJzIGEgc3Rvcm0g b2YgdW5uZWNlc3Nhcnkgd2FrZXVwcyBhbmQgY29udGV4dCBzd2l0Y2hlcy4gQXMgdGhlCm51 bWJlciBvZiBpZGxlIGxpc3RlbmVycyBncm93cywgdGhpcyBvZnRlbiBiZWNvbWVzIHRoZSBi b3R0bGVuZWNrIGFuZAp0aHJvdWdocHV0IGRyb3BzIHNoYXJwbHkuCgpPdmVydmlldyBvZiB0 aGUgc29sdXRpb24KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGlzIHBhdGNoIGludHJv ZHVjZXMgYSBsYXppbHktY3JlYXRlZCBkeW5hbWljIHNoYXJlZCBoYXNoIChkc2hhc2gpCmJh Y2tlZCBieSBkeW5hbWljIHNoYXJlZCBtZW1vcnkgKERTQSkgdGhhdCBtYXBzIChkYm9pZCwg Y2hhbm5lbCkgdG8KYXJyYXlzIG9mIGxpc3RlbmluZyBiYWNrZW5kcyAoUHJvY051bWJlcnMp LiBUaGlzIGFsbG93cyB0aGUgc2VuZGVyIHRvCnRhcmdldCBvbmx5IHRob3NlIGJhY2tlbmRz IGFjdHVhbGx5IGxpc3RlbmluZyBvbiB0aGUgY2hhbm5lbHMgZm9yIHdoaWNoCml0IGhhcyBx dWV1ZWQgbm90aWZpY2F0aW9ucy4KCkF0IGNvbW1pdCB0aW1lOgoKKiBBdENvbW1pdF9Ob3Rp ZnkgdXBkYXRlcyB0aGUgc2hhcmVkIGNoYW5uZWxIYXNoIHRvIHJlZmxlY3QgYW55IExJU1RF TgogIG9yIFVOTElTVEVOIGFjdGlvbnMgcGVyZm9ybWVkIGluIHRoZSB0cmFuc2FjdGlvbi4K KiBTaWduYWxCYWNrZW5kcyBjb25zdWx0cyB0aGlzIGhhc2ggdG8gZmluZCB0aGUgYmFja2Vu ZHMgdGhhdCBhcmUKICBsaXN0ZW5pbmcgb24gdGhlIGNoYW5uZWxzIGJlaW5nIG5vdGlmaWVk IGluIHRoZSBjdXJyZW50IGRhdGFiYXNlLCBhbmQKICBzaWduYWxzIG9ubHkgdGhvc2UuCgpF YWNoIGJhY2tlbmQncyBlbnRyeSBpbiBBc3luY1F1ZXVlQ29udHJvbCBub3cgaW5jbHVkZXMg YSB3YWtldXBQZW5kaW5nCmZsYWcgdG8gcHJldmVudCBkdXBsaWNhdGUgc2lnbmFscyB3aGls ZSBhIHByZXZpb3VzIHdha2V1cCBpcyBzdGlsbCBiZWluZwpwcm9jZXNzZWQuCgpEaXJlY3Qg YWR2YW5jZW1lbnQKLS0tLS0tLS0tLS0tLS0tLS0tCgpBIGZ1cnRoZXIgb3B0aW1pemF0aW9u IGF2b2lkcyBzaWduYWxpbmcgaWRsZSBiYWNrZW5kcyB0aGF0IGFyZSBub3QKbGlzdGVuaW5n IG9uIGFueSBvZiB0aGUgY2hhbm5lbHMgbm90aWZpZWQgd2l0aGluIHRoZSB0cmFuc2FjdGlv bi4KCldoaWxlIHF1ZXVpbmcgbm90aWZpY2F0aW9ucywgUHJlQ29tbWl0X05vdGlmeSByZWNv cmRzIHRoZSBxdWV1ZSBoZWFkCnBvc2l0aW9uIGJvdGggYmVmb3JlIGFuZCBhZnRlciB3cml0 aW5nIGl0cyBub3RpZmljYXRpb25zLiBCZWNhdXNlIGFsbAp3cml0ZXJzIGFyZSBzZXJpYWxp emVkIGJ5IHRoZSBleGlzdGluZyBjbHVzdGVyLXdpZGUgaGVhdnl3ZWlnaHQgbG9jayBvbgoi ZGF0YWJhc2UgMCIsIG5vIGJhY2tlbmQgKGZyb20gYW55IGRhdGFiYXNlKSBjYW4gaW5zZXJ0 IGVudHJpZXMgYmV0d2Vlbgp0aG9zZSB0d28gcG9pbnRzLiBUaGlzIGd1YXJhbnRlZXMgdGhh dCB0aGUgcmVnaW9uIFtvbGRIZWFkLCBuZXdIZWFkKQpjb250YWlucyBvbmx5IHRoZSBlbnRy aWVzIHdyaXR0ZW4gYnkgb3VyIGNvbW1pdC4KClNpZ25hbEJhY2tlbmRzIHVzZXMgdGhpcyBm YWN0IHRvIGRpcmVjdGx5IGFkdmFuY2UgYW55IGJhY2tlbmQgc3RpbGwKcG9zaXRpb25lZCBh dCBvbGRIZWFkIHVwIHRvIG5ld0hlYWQsIGF2b2lkaW5nIGEgbmVlZGxlc3Mgd2FrZXVwIGZv cgpsaXN0ZW5lcnMgdGhhdCB3b3VsZCBvdGhlcndpc2Ugbm90IGZpbmQgYW55IG5vdGlmaWVz IG9mIGludGVyZXN0LgoKUXVldWUgaGVhbHRoCi0tLS0tLS0tLS0tLQoKSWYgYSBiYWNrZW5k IGhhcyBmYWxsZW4gdG9vIGZhciBiZWhpbmQgKGxhZyA+PSBRVUVVRV9DTEVBTlVQX0RFTEFZ CnBhZ2VzKSwgaXQgaXMgc2lnbmFsZWQgdG8gY2F0Y2ggdXAgc28gdGhlIGdsb2JhbCBxdWV1 ZSB0YWlsIGNhbiBhZHZhbmNlLgoKT3RoZXIgbm90ZXMKLS0tLS0tLS0tLS0KCiogTWFpbnRh aW5zIGR1YWwgZGF0YSBzdHJ1Y3R1cmVzOiBhIHNoYXJlZCBjaGFubmVsSGFzaCBmb3IgZGV0 ZXJtaW5pbmcKICB3aGljaCBiYWNrZW5kcyB0byBzaWduYWwsIGFuZCBhIGxvY2FsIHBlci1i YWNrZW5kIGxpc3RlbkNoYW5uZWxzIGxpc3QKICBmb3IgZmFzdCBsb2NrLWZyZWUgbG9va3Vw cyBkdXJpbmcgbm90aWZpY2F0aW9uIHByb2Nlc3NpbmcuIFRoaXMgYXZvaWRzCiAgY29udGVu dGlvbiBvbiB0aGUgc2hhcmVkIGhhc2ggZHVyaW5nIHRoZSBoaWdoLWZyZXF1ZW5jeSBJc0xp c3RlbmluZ09uCiAgY2hlY2tzIHRoYXQgb2NjdXIgZm9yIGV2ZXJ5IG5vdGlmaWNhdGlvbiBy ZWFkIGZyb20gdGhlIHF1ZXVlLgoqIEJhY2tlbmRzIHJlbWFpbiByZWdpc3RlcmVkIGluIHRo ZSBnbG9iYWwgbGlzdGVuZXIgbGlzdCBhcyBsb25nIGFzCiAgbGlzdGVuQ2hhbm5lbHMgaXMg bm9uLWVtcHR5LgoqIEFkZHMgTFdMb2NrIHRyYW5jaGUgTk9USUZZX0NIQU5ORUxfSEFTSCBh bmQgd2FpdCBldmVudAogIE5vdGlmeUNoYW5uZWxIYXNoIGZvciB2aXNpYmlsaXR5LgoqIE5v IHVzZXItdmlzaWJsZSBiZWhhdmlvcmFsIGNoYW5nZXM7IHRoaXMgaXMgYW4gaW50ZXJuYWwg b3B0aW1pemF0aW9uCiAgb25seS4KLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5j ICAgICAgICAgICAgICAgICAgfCA1MzggKysrKysrKysrKysrKysrKy0tCiAuLi4vdXRpbHMv YWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQgICAgICAgfCAgIDEgKwogc3JjL2luY2x1 ZGUvc3RvcmFnZS9sd2xvY2tsaXN0LmggICAgICAgICAgICAgIHwgICAxICsKIHNyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMiArCiA0IGZpbGVz IGNoYW5nZWQsIDQ5NSBpbnNlcnRpb25zKCspLCA0NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvYXN5bmMuYwppbmRleCA0YmQzN2Q1YmViNS4uOTBhNTMwY2ZjNjEgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvYXN5bmMuYwpAQCAtMjQsOCArMjQsMTAgQEAKICAqCSAgQWxsIG5vdGlmaWNhdGlvbiBt ZXNzYWdlcyBhcmUgcGxhY2VkIGluIHRoZSBxdWV1ZSBhbmQgbGF0ZXIgcmVhZCBvdXQKICAq CSAgYnkgbGlzdGVuaW5nIGJhY2tlbmRzLgogICoKLSAqCSAgVGhlcmUgaXMgbm8gY2VudHJh bCBrbm93bGVkZ2Ugb2Ygd2hpY2ggYmFja2VuZCBsaXN0ZW5zIG9uIHdoaWNoIGNoYW5uZWw7 Ci0gKgkgIGV2ZXJ5IGJhY2tlbmQgaGFzIGl0cyBvd24gbGlzdCBvZiBpbnRlcmVzdGluZyBj aGFubmVscy4KKyAqCSAgV2UgYWxzbyBtYWludGFpbiBhIGR5bmFtaWMgc2hhcmVkIGhhc2gg dGFibGUgKGRzaGFzaCkgdGhhdCBtYXBzIGNoYW5uZWwKKyAqCSAgbmFtZXMgdG8gdGhlIHNl dCBvZiBiYWNrZW5kcyBsaXN0ZW5pbmcgb24gZWFjaCBjaGFubmVsLiBUaGlzIHRhYmxlIGlz CisgKgkgIGNyZWF0ZWQgbGF6aWx5IG9uIHRoZSBmaXJzdCBMSVNURU4gY29tbWFuZCBhbmQg Z3Jvd3MgZHluYW1pY2FsbHkgYXMKKyAqCSAgbmVlZGVkLgogICoKICAqCSAgQWx0aG91Z2gg dGhlcmUgaXMgb25seSBvbmUgcXVldWUsIG5vdGlmaWNhdGlvbnMgYXJlIHRyZWF0ZWQgYXMg YmVpbmcKICAqCSAgZGF0YWJhc2UtbG9jYWw7IHRoaXMgaXMgZG9uZSBieSBpbmNsdWRpbmcg dGhlIHNlbmRlcidzIGRhdGFiYXNlIE9JRApAQCAtNjgsMTYgKzcwLDI3IEBACiAgKgkgIENv bW1pdFRyYW5zYWN0aW9uKCkgd2hpY2ggd2lsbCB0aGVuIGRvIHRoZSBhY3R1YWwgdHJhbnNh Y3Rpb24gY29tbWl0LgogICoKICAqCSAgQWZ0ZXIgY29tbWl0IHdlIGFyZSBjYWxsZWQgYW5v dGhlciB0aW1lIChBdENvbW1pdF9Ob3RpZnkoKSkuIEhlcmUgd2UKLSAqCSAgbWFrZSBhbnkg YWN0dWFsIHVwZGF0ZXMgdG8gdGhlIGVmZmVjdGl2ZSBsaXN0ZW4gc3RhdGUgKGxpc3RlbkNo YW5uZWxzKS4KLSAqCSAgVGhlbiB3ZSBzaWduYWwgYW55IGJhY2tlbmRzIHRoYXQgbWF5IGJl IGludGVyZXN0ZWQgaW4gb3VyIG1lc3NhZ2VzCi0gKgkgIChpbmNsdWRpbmcgb3VyIG93biBi YWNrZW5kLCBpZiBsaXN0ZW5pbmcpLiAgVGhpcyBpcyBkb25lIGJ5Ci0gKgkgIFNpZ25hbEJh Y2tlbmRzKCksIHdoaWNoIHNjYW5zIHRoZSBsaXN0IG9mIGxpc3RlbmluZyBiYWNrZW5kcyBh bmQgc2VuZHMgYQotICoJICBQUk9DU0lHX05PVElGWV9JTlRFUlJVUFQgc2lnbmFsIHRvIGV2 ZXJ5IGxpc3RlbmluZyBiYWNrZW5kICh3ZSBkb24ndAotICoJICBrbm93IHdoaWNoIGJhY2tl bmQgaXMgbGlzdGVuaW5nIG9uIHdoaWNoIGNoYW5uZWwgc28gd2UgbXVzdCBzaWduYWwgdGhl bQotICoJICBhbGwpLiAgV2UgY2FuIGV4Y2x1ZGUgYmFja2VuZHMgdGhhdCBhcmUgYWxyZWFk eSB1cCB0byBkYXRlLCB0aG91Z2gsIGFuZAotICoJICB3ZSBjYW4gYWxzbyBleGNsdWRlIGJh Y2tlbmRzIHRoYXQgYXJlIGluIG90aGVyIGRhdGFiYXNlcyAodW5sZXNzIHRoZXkKLSAqCSAg YXJlIHdheSBiZWhpbmQgYW5kIHNob3VsZCBiZSBraWNrZWQgdG8gbWFrZSB0aGVtIGFkdmFu Y2UgdGhlaXIKLSAqCSAgcG9pbnRlcnMpLgorICoJICBtYWtlIGFueSBhY3R1YWwgdXBkYXRl cyB0byB0aGUgbG9jYWwgbGlzdGVuIHN0YXRlIChsaXN0ZW5DaGFubmVscykgYW5kCisgKgkg IHNoYXJlZCBjaGFubmVsIGhhc2ggdGFibGUgKGNoYW5uZWxIYXNoKS4gIFRoZW4gd2Ugc2ln bmFsIGFueSBiYWNrZW5kcworICoJICB0aGF0IG1heSBiZSBpbnRlcmVzdGVkIGluIG91ciBt ZXNzYWdlcyAoaW5jbHVkaW5nIG91ciBvd24gYmFja2VuZCwKKyAqCSAgaWYgbGlzdGVuaW5n KS4gIFRoaXMgaXMgZG9uZSBieSBTaWduYWxCYWNrZW5kcygpLCB3aGljaCBjb25zdWx0cyB0 aGUKKyAqCSAgc2hhcmVkIGNoYW5uZWwgaGFzaCB0YWJsZSB0byBpZGVudGlmeSBsaXN0ZW5l cnMgZm9yIHRoZSBjaGFubmVscyB0aGF0CisgKgkgIGhhdmUgcGVuZGluZyBub3RpZmljYXRp b25zIGluIHRoZSBjdXJyZW50IGRhdGFiYXNlLiAgRWFjaCBzZWxlY3RlZAorICoJICBiYWNr ZW5kIGlzIG1hcmtlZCBhcyBoYXZpbmcgYSB3YWtldXAgcGVuZGluZyB0byBhdm9pZCBkdXBs aWNhdGUgc2lnbmFscywKKyAqCSAgYW5kIGEgUFJPQ1NJR19OT1RJRllfSU5URVJSVVBUIHNp Z25hbCBpcyBzZW50IHRvIGl0LgorICoKKyAqCSAgV2hlbiB3cml0aW5nIG5vdGlmaWNhdGlv bnMsIFByZUNvbW1pdF9Ob3RpZnkoKSByZWNvcmRzIHRoZSBxdWV1ZSBoZWFkCisgKgkgIHBv c2l0aW9uIGJvdGggYmVmb3JlIGFuZCBhZnRlciB0aGUgd3JpdGUuICBCZWNhdXNlIGFsbCB3 cml0ZXJzIHNlcmlhbGl6ZQorICoJICBvbiBhIGNsdXN0ZXItd2lkZSBoZWF2eXdlaWdodCBs b2NrLCBubyBiYWNrZW5kIGNhbiBpbnNlcnQgZW50cmllcyBiZXR3ZWVuCisgKgkgIHRoZXNl IHR3byBwb2ludHMuICBTaWduYWxCYWNrZW5kcygpIHVzZXMgdGhpcyBmYWN0IHRvIGRpcmVj dGx5IGFkdmFuY2UgYW55CisgKgkgIGJhY2tlbmQgdGhhdCBpcyBzdGlsbCBwb3NpdGlvbmVk IGF0IHRoZSBvbGQgaGVhZCwgYXZvaWRpbmcgdW5uZWNlc3NhcnkKKyAqCSAgd2FrZXVwcyBm b3IgaWRsZSBsaXN0ZW5lcnMgdGhhdCBoYXZlIG5vdGhpbmcgdG8gcmVhZC4KKyAqCisgKgkg IFRvIG1haW50YWluIHF1ZXVlIGhlYWx0aCwgU2lnbmFsQmFja2VuZHMoKSBhbHNvIHdha2Vz IG9uZSBiYWNrZW5kCisgKgkgIHBvc2l0aW9uZWQgYXQgdGhlIGdsb2JhbCBxdWV1ZSB0YWls IHRvIGhlbHAgYWR2YW5jZSBpdCwgYW5kIHNpZ25hbHMKKyAqCSAgYW55IGJhY2tlbmQgdGhh dCBoYXMgZmFsbGVuIHRvbyBmYXIgYmVoaW5kIHRvIGNhdGNoIHVwLiAgVGhlc2UgbWVhc3Vy ZXMKKyAqCSAgcHJldmVudCB0aGUgbm90aWZpY2F0aW9uIHF1ZXVlIGZyb20gZ3Jvd2luZyBp bmRlZmluaXRlbHksIHdoaWxlIG1vc3RseQorICoJICBsaW1pdGluZyB3YWtldXBzIHRvIHRo ZSBiYWNrZW5kcyB0aGF0IGFjdHVhbGx5IG5lZWQgdGhlbS4KICAqCiAgKgkgIEZpbmFsbHks IGFmdGVyIHdlIGFyZSBvdXQgb2YgdGhlIHRyYW5zYWN0aW9uIGFsdG9nZXRoZXIgYW5kIGFi b3V0IHRvIGdvCiAgKgkgIGlkbGUsIHdlIHNjYW4gdGhlIHF1ZXVlIGZvciBtZXNzYWdlcyB0 aGF0IG5lZWQgdG8gYmUgc2VudCB0byBvdXIKQEAgLTEyOCw2ICsxNDEsNyBAQAogI2luY2x1 ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHNpZ25hbC5o PgorI2luY2x1ZGUgPHN0cmluZy5oPgogCiAjaW5jbHVkZSAiYWNjZXNzL3BhcmFsbGVsLmgi CiAjaW5jbHVkZSAiYWNjZXNzL3NscnUuaCIKQEAgLTEzNywxNCArMTUxLDE3IEBACiAjaW5j bHVkZSAiY29tbWFuZHMvYXN5bmMuaCIKICNpbmNsdWRlICJjb21tb24vaGFzaGZuLmgiCiAj aW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgImxpYi9kc2hhc2guaCIKICNpbmNsdWRl ICJsaWJwcS9saWJwcS5oIgogI2luY2x1ZGUgImxpYnBxL3BxZm9ybWF0LmgiCiAjaW5jbHVk ZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAic3RvcmFnZS9kc21fcmVnaXN0cnkuaCIKICNp bmNsdWRlICJzdG9yYWdlL2lwYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2lu Y2x1ZGUgInN0b3JhZ2UvcHJvY3NpZ25hbC5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3Qu aCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2RzYS5o IgogI2luY2x1ZGUgInV0aWxzL2d1Y19ob29rcy5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0 aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcHNfc3RhdHVzLmgiCkBAIC0xNjIsNiArMTc5LDI5 IEBACiAgKi8KICNkZWZpbmUgTk9USUZZX1BBWUxPQURfTUFYX0xFTkdUSAkoQkxDS1NaIC0g TkFNRURBVEFMRU4gLSAxMjgpCiAKKy8qCisgKiBDaGFubmVsIGhhc2ggdGFibGUgZGVmaW5p dGlvbnMKKyAqCisgKiBUaGlzIGhhc2ggdGFibGUgbWFwcyAoZGF0YWJhc2UgT0lELCBjaGFu bmVsIG5hbWUpIGtleXMgdG8gYXJyYXlzIG9mCisgKiBQcm9jTnVtYmVycyByZXByZXNlbnRp bmcgdGhlIGJhY2tlbmRzIGxpc3RlbmluZyBvbiBlYWNoIGNoYW5uZWwuCisgKi8KKworI2Rl ZmluZSBJTklUSUFMX0xJU1RFTkVSU19BUlJBWV9TSVpFIDQKKwordHlwZWRlZiBzdHJ1Y3Qg Q2hhbm5lbEhhc2hLZXkKK3sKKwlPaWQJCQlkYm9pZDsKKwljaGFyCQljaGFubmVsW05BTUVE QVRBTEVOXTsKK30gQ2hhbm5lbEhhc2hLZXk7CisKK3R5cGVkZWYgc3RydWN0IENoYW5uZWxF bnRyeQoreworCUNoYW5uZWxIYXNoS2V5IGtleTsKKwlkc2FfcG9pbnRlciBsaXN0ZW5lcnNB cnJheTsgLyogRFNBIHBvaW50ZXIgdG8gUHJvY051bWJlciBhcnJheSAqLworCWludAkJCW51 bUxpc3RlbmVyczsJLyogTnVtYmVyIG9mIGxpc3RlbmVycyBjdXJyZW50bHkgc3RvcmVkICov CisJaW50CQkJYWxsb2NhdGVkTGlzdGVuZXJzOyAvKiBBbGxvY2F0ZWQgc2l6ZSBvZiBhcnJh eSAqLworfSBDaGFubmVsRW50cnk7CisKIC8qCiAgKiBTdHJ1Y3QgcmVwcmVzZW50aW5nIGFu IGVudHJ5IGluIHRoZSBnbG9iYWwgbm90aWZ5IHF1ZXVlCiAgKgpAQCAtMjI3LDggKzI2Nyw4 IEBAIHR5cGVkZWYgc3RydWN0IFF1ZXVlUG9zaXRpb24KIC8qCiAgKiBQYXJhbWV0ZXIgZGV0 ZXJtaW5pbmcgaG93IG9mdGVuIHdlIHRyeSB0byBhZHZhbmNlIHRoZSB0YWlsIHBvaW50ZXI6 CiAgKiB3ZSBkbyB0aGF0IGFmdGVyIGV2ZXJ5IFFVRVVFX0NMRUFOVVBfREVMQVkgcGFnZXMg b2YgTk9USUZZIGRhdGEuICBUaGlzIGlzCi0gKiBhbHNvIHRoZSBkaXN0YW5jZSBieSB3aGlj aCBhIGJhY2tlbmQgaW4gYW5vdGhlciBkYXRhYmFzZSBuZWVkcyB0byBiZQotICogYmVoaW5k IGJlZm9yZSB3ZSdsbCBkZWNpZGUgd2UgbmVlZCB0byB3YWtlIGl0IHVwIHRvIGFkdmFuY2Ug aXRzIHBvaW50ZXIuCisgKiBhbHNvIHRoZSBkaXN0YW5jZSBieSB3aGljaCBhIGJhY2tlbmQg bmVlZHMgdG8gYmUgYmVoaW5kIGJlZm9yZSB3ZSdsbAorICogZGVjaWRlIHdlIG5lZWQgdG8g d2FrZSBpdCB1cCB0byBhZHZhbmNlIGl0cyBwb2ludGVyLgogICoKICAqIFJlc2lzdCB0aGUg dGVtcHRhdGlvbiB0byBtYWtlIHRoaXMgcmVhbGx5IGxhcmdlLiAgV2hpbGUgdGhhdCB3b3Vs ZCBzYXZlCiAgKiB3b3JrIGluIHNvbWUgcGxhY2VzLCBpdCB3b3VsZCBhZGQgY29zdCBpbiBv dGhlcnMuICBJbiBwYXJ0aWN1bGFyLCB0aGlzCkBAIC0yNDYsNiArMjg2LDcgQEAgdHlwZWRl ZiBzdHJ1Y3QgUXVldWVCYWNrZW5kU3RhdHVzCiAJT2lkCQkJZGJvaWQ7CQkJLyogYmFja2Vu ZCdzIGRhdGFiYXNlIE9JRCwgb3IgSW52YWxpZE9pZCAqLwogCVByb2NOdW1iZXIJbmV4dExp c3RlbmVyOwkvKiBpZCBvZiBuZXh0IGxpc3RlbmVyLCBvciBJTlZBTElEX1BST0NfTlVNQkVS ICovCiAJUXVldWVQb3NpdGlvbiBwb3M7CQkJLyogYmFja2VuZCBoYXMgcmVhZCBxdWV1ZSB1 cCB0byBoZXJlICovCisJYm9vbAkJd2FrZXVwUGVuZGluZzsJLyogc2lnbmFsIHNlbnQgYnV0 IG5vdCB5ZXQgcHJvY2Vzc2VkICovCiB9IFF1ZXVlQmFja2VuZFN0YXR1czsKIAogLyoKQEAg LTI2MCw5ICszMDEsOSBAQCB0eXBlZGVmIHN0cnVjdCBRdWV1ZUJhY2tlbmRTdGF0dXMKICAq IChzaW5jZSBubyBvdGhlciBiYWNrZW5kIHdpbGwgaW5zcGVjdCBpdCkuCiAgKgogICogV2hl biBob2xkaW5nIE5vdGlmeVF1ZXVlTG9jayBpbiBFWENMVVNJVkUgbW9kZSwgYmFja2VuZHMg Y2FuIGluc3BlY3QgdGhlCi0gKiBlbnRyaWVzIG9mIG90aGVyIGJhY2tlbmRzIGFuZCBhbHNv IGNoYW5nZSB0aGUgaGVhZCBwb2ludGVyLiBXaGVuIGhvbGRpbmcKLSAqIGJvdGggTm90aWZ5 UXVldWVMb2NrIGFuZCBOb3RpZnlRdWV1ZVRhaWxMb2NrIGluIEVYQ0xVU0lWRSBtb2RlLCBi YWNrZW5kcwotICogY2FuIGNoYW5nZSB0aGUgdGFpbCBwb2ludGVycy4KKyAqIGVudHJpZXMg b2Ygb3RoZXIgYmFja2VuZHMsIGNoYW5nZSB0aGUgaGVhZCBwb2ludGVyLCBhbmQgYWR2YW5j ZSBvdGhlcgorICogYmFja2VuZHMnIHF1ZXVlIHBvc2l0aW9ucy4gV2hlbiBob2xkaW5nIGJv dGggTm90aWZ5UXVldWVMb2NrIGFuZAorICogTm90aWZ5UXVldWVUYWlsTG9jayBpbiBFWENM VVNJVkUgbW9kZSwgYmFja2VuZHMgY2FuIGNoYW5nZSB0aGUgdGFpbCBwb2ludGVycy4KICAq CiAgKiBTTFJVIGJ1ZmZlciBwb29sIGlzIGRpdmlkZWQgaW4gYmFua3MgYW5kIGJhbmsgd2lz ZSBTTFJVIGxvY2sgaXMgdXNlZCBhcwogICogdGhlIGNvbnRyb2wgbG9jayBmb3IgdGhlIHBn X25vdGlmeSBTTFJVIGJ1ZmZlcnMuCkBAIC0yODgsMTEgKzMyOSwxNiBAQCB0eXBlZGVmIHN0 cnVjdCBBc3luY1F1ZXVlQ29udHJvbAogCVByb2NOdW1iZXIJZmlyc3RMaXN0ZW5lcjsJLyog aWQgb2YgZmlyc3QgbGlzdGVuZXIsIG9yCiAJCQkJCQkJCSAqIElOVkFMSURfUFJPQ19OVU1C RVIgKi8KIAlUaW1lc3RhbXBUeiBsYXN0UXVldWVGaWxsV2FybjsJLyogdGltZSBvZiBsYXN0 IHF1ZXVlLWZ1bGwgbXNnICovCisJZHNhX2hhbmRsZQljaGFubmVsSGFzaERTQTsKKwlkc2hh c2hfdGFibGVfaGFuZGxlIGNoYW5uZWxIYXNoRFNIOwogCVF1ZXVlQmFja2VuZFN0YXR1cyBi YWNrZW5kW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07CiB9IEFzeW5jUXVldWVDb250cm9sOwog CiBzdGF0aWMgQXN5bmNRdWV1ZUNvbnRyb2wgKmFzeW5jUXVldWVDb250cm9sOwogCitzdGF0 aWMgZHNhX2FyZWEgKmNoYW5uZWxEU0EgPSBOVUxMOworc3RhdGljIGRzaGFzaF90YWJsZSAq Y2hhbm5lbEhhc2ggPSBOVUxMOworCiAjZGVmaW5lIFFVRVVFX0hFQUQJCQkJCShhc3luY1F1 ZXVlQ29udHJvbC0+aGVhZCkKICNkZWZpbmUgUVVFVUVfVEFJTAkJCQkJKGFzeW5jUXVldWVD b250cm9sLT50YWlsKQogI2RlZmluZSBRVUVVRV9TVE9QX1BBR0UJCQkJKGFzeW5jUXVldWVD b250cm9sLT5zdG9wUGFnZSkKQEAgLTMwMSw2ICszNDcsNyBAQCBzdGF0aWMgQXN5bmNRdWV1 ZUNvbnRyb2wgKmFzeW5jUXVldWVDb250cm9sOwogI2RlZmluZSBRVUVVRV9CQUNLRU5EX0RC T0lEKGkpCQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmJhY2tlbmRbaV0uZGJvaWQpCiAjZGVmaW5l IFFVRVVFX05FWFRfTElTVEVORVIoaSkJCShhc3luY1F1ZXVlQ29udHJvbC0+YmFja2VuZFtp XS5uZXh0TGlzdGVuZXIpCiAjZGVmaW5lIFFVRVVFX0JBQ0tFTkRfUE9TKGkpCQkoYXN5bmNR dWV1ZUNvbnRyb2wtPmJhY2tlbmRbaV0ucG9zKQorI2RlZmluZSBRVUVVRV9CQUNLRU5EX1dB S0VVUF9QRU5ESU5HKGkpCShhc3luY1F1ZXVlQ29udHJvbC0+YmFja2VuZFtpXS53YWtldXBQ ZW5kaW5nKQogCiAvKgogICogVGhlIFNMUlUgYnVmZmVyIGFyZWEgdGhyb3VnaCB3aGljaCB3 ZSBhY2Nlc3MgdGhlIG5vdGlmaWNhdGlvbiBxdWV1ZQpAQCAtNDE4LDYgKzQ2NSwyMCBAQCBz dGF0aWMgYm9vbCB1bmxpc3RlbkV4aXRSZWdpc3RlcmVkID0gZmFsc2U7CiAvKiBUcnVlIGlm IHdlJ3JlIGN1cnJlbnRseSByZWdpc3RlcmVkIGFzIGEgbGlzdGVuZXIgaW4gYXN5bmNRdWV1 ZUNvbnRyb2wgKi8KIHN0YXRpYyBib29sIGFtUmVnaXN0ZXJlZExpc3RlbmVyID0gZmFsc2U7 CiAKKy8qCisgKiBRdWV1ZSBoZWFkIHBvc2l0aW9ucyBmb3IgZGlyZWN0IGFkdmFuY2VtZW50 LgorICogVGhlc2UgYXJlIGNhcHR1cmVkIGR1cmluZyBQcmVDb21taXRfTm90aWZ5IHdoaWxl IGhvbGRpbmcgdGhlIGhlYXZ5d2VpZ2h0CisgKiBsb2NrIG9uIGRhdGFiYXNlIDAsIGVuc3Vy aW5nIG5vIG90aGVyIGJhY2tlbmQgY2FuIGluc2VydCBub3RpZmljYXRpb25zCisgKiBiZXR3 ZWVuIHRoZW0uICBTaWduYWxCYWNrZW5kcyB1c2VzIHRoZXNlIHRvIGFkdmFuY2UgaWRsZSBi YWNrZW5kcy4KKyAqLworc3RhdGljIFF1ZXVlUG9zaXRpb24gcXVldWVIZWFkQmVmb3JlV3Jp dGU7CitzdGF0aWMgUXVldWVQb3NpdGlvbiBxdWV1ZUhlYWRBZnRlcldyaXRlOworCisvKgor ICogTGlzdCBvZiBjaGFubmVscyB3aXRoIHBlbmRpbmcgbm90aWZpY2F0aW9ucyBpbiB0aGUg Y3VycmVudCB0cmFuc2FjdGlvbi4KKyAqLworc3RhdGljIExpc3QgKnBlbmRpbmdOb3RpZnlD aGFubmVscyA9IE5JTDsKKwogLyogaGF2ZSB3ZSBhZHZhbmNlZCB0byBhIHBhZ2UgdGhhdCdz IGEgbXVsdGlwbGUgb2YgUVVFVUVfQ0xFQU5VUF9ERUxBWT8gKi8KIHN0YXRpYyBib29sIHRy eUFkdmFuY2VUYWlsID0gZmFsc2U7CiAKQEAgLTQ1Nyw2ICs1MTgsOSBAQCBzdGF0aWMgdm9p ZCBBZGRFdmVudFRvUGVuZGluZ05vdGlmaWVzKE5vdGlmaWNhdGlvbiAqbik7CiBzdGF0aWMg dWludDMyIG5vdGlmaWNhdGlvbl9oYXNoKGNvbnN0IHZvaWQgKmtleSwgU2l6ZSBrZXlzaXpl KTsKIHN0YXRpYyBpbnQJbm90aWZpY2F0aW9uX21hdGNoKGNvbnN0IHZvaWQgKmtleTEsIGNv bnN0IHZvaWQgKmtleTIsIFNpemUga2V5c2l6ZSk7CiBzdGF0aWMgdm9pZCBDbGVhclBlbmRp bmdBY3Rpb25zQW5kTm90aWZpZXModm9pZCk7CitzdGF0aWMgaW5saW5lIHZvaWQgQ2hhbm5l bEhhc2hQcmVwYXJlS2V5KENoYW5uZWxIYXNoS2V5ICprZXksIE9pZCBkYm9pZCwgY29uc3Qg Y2hhciAqY2hhbm5lbCk7CitzdGF0aWMgZHNoYXNoX2hhc2ggY2hhbm5lbEhhc2hGdW5jKGNv bnN0IHZvaWQgKmtleSwgc2l6ZV90IHNpemUsIHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBp bml0Q2hhbm5lbEhhc2godm9pZCk7CiAKIC8qCiAgKiBDb21wdXRlIHRoZSBkaWZmZXJlbmNl IGJldHdlZW4gdHdvIHF1ZXVlIHBhZ2UgbnVtYmVycy4KQEAgLTQ3OCw2ICs1NDIsODAgQEAg YXN5bmNRdWV1ZVBhZ2VQcmVjZWRlcyhpbnQ2NCBwLCBpbnQ2NCBxKQogCXJldHVybiBwIDwg cTsKIH0KIAorLyoKKyAqIGNoYW5uZWxIYXNoRnVuYworICoJCUhhc2ggZnVuY3Rpb24gZm9y IGNoYW5uZWwga2V5cy4KKyAqLworc3RhdGljIGRzaGFzaF9oYXNoCitjaGFubmVsSGFzaEZ1 bmMoY29uc3Qgdm9pZCAqa2V5LCBzaXplX3Qgc2l6ZSwgdm9pZCAqYXJnKQoreworCWNvbnN0 IENoYW5uZWxIYXNoS2V5ICprID0gKGNvbnN0IENoYW5uZWxIYXNoS2V5ICopIGtleTsKKwlk c2hhc2hfaGFzaCBoOworCisJaCA9IERhdHVtR2V0VUludDMyKGhhc2hfdWludDMyKGstPmRi b2lkKSk7CisJaCBePSBEYXR1bUdldFVJbnQzMihoYXNoX2FueSgoY29uc3QgdW5zaWduZWQg Y2hhciAqKSBrLT5jaGFubmVsLAorCQkJCQkJCQkgc3RybmxlbihrLT5jaGFubmVsLCBOQU1F REFUQUxFTikpKTsKKworCXJldHVybiBoOworfQorCisvKiBwYXJhbWV0ZXJzIGZvciB0aGUg Y2hhbm5lbCBoYXNoIHRhYmxlICovCitzdGF0aWMgY29uc3QgZHNoYXNoX3BhcmFtZXRlcnMg Y2hhbm5lbERTSFBhcmFtcyA9IHsKKwlzaXplb2YoQ2hhbm5lbEhhc2hLZXkpLAorCXNpemVv ZihDaGFubmVsRW50cnkpLAorCWRzaGFzaF9tZW1jbXAsCisJY2hhbm5lbEhhc2hGdW5jLAor CWRzaGFzaF9tZW1jcHksCisJTFdUUkFOQ0hFX05PVElGWV9DSEFOTkVMX0hBU0gKK307CisK Ky8qCisgKiBpbml0Q2hhbm5lbEhhc2gKKyAqCQlMYXp5IGluaXRpYWxpemF0aW9uIG9mIHRo ZSBjaGFubmVsIGhhc2ggdGFibGUuCisgKi8KK3N0YXRpYyB2b2lkCitpbml0Q2hhbm5lbEhh c2godm9pZCkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisKKwkvKiBRdWljayBl eGl0IGlmIHdlIGFscmVhZHkgZGlkIHRoaXMgKi8KKwlpZiAoYXN5bmNRdWV1ZUNvbnRyb2wt PmNoYW5uZWxIYXNoRFNIICE9IERTSEFTSF9IQU5ETEVfSU5WQUxJRCAmJgorCQljaGFubmVs SGFzaCAhPSBOVUxMKQorCQlyZXR1cm47CisKKwkvKiBPdGhlcndpc2UsIHVzZSBhIGxvY2sg dG8gZW5zdXJlIG9ubHkgb25lIHByb2Nlc3MgY3JlYXRlcyB0aGUgdGFibGUgKi8KKwlMV0xv Y2tBY3F1aXJlKE5vdGlmeVF1ZXVlTG9jaywgTFdfRVhDTFVTSVZFKTsKKworCS8qIEJlIHN1 cmUgYW55IGxvY2FsIG1lbW9yeSBhbGxvY2F0ZWQgYnkgRFNBIHJvdXRpbmVzIGlzIHBlcnNp c3RlbnQgKi8KKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcE1lbW9y eUNvbnRleHQpOworCisJaWYgKGFzeW5jUXVldWVDb250cm9sLT5jaGFubmVsSGFzaERTSCA9 PSBEU0hBU0hfSEFORExFX0lOVkFMSUQpCisJeworCQkvKiBJbml0aWFsaXplIGR5bmFtaWMg c2hhcmVkIGhhc2ggdGFibGUgZm9yIGNoYW5uZWwgaGFzaCAqLworCQljaGFubmVsRFNBID0g ZHNhX2NyZWF0ZShMV1RSQU5DSEVfTk9USUZZX0NIQU5ORUxfSEFTSCk7CisJCWRzYV9waW4o Y2hhbm5lbERTQSk7CisJCWRzYV9waW5fbWFwcGluZyhjaGFubmVsRFNBKTsKKwkJY2hhbm5l bEhhc2ggPSBkc2hhc2hfY3JlYXRlKGNoYW5uZWxEU0EsICZjaGFubmVsRFNIUGFyYW1zLCBO VUxMKTsKKworCQkvKiBTdG9yZSBoYW5kbGVzIGluIHNoYXJlZCBtZW1vcnkgZm9yIG90aGVy IGJhY2tlbmRzIHRvIHVzZSAqLworCQlhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhhc2hE U0EgPSBkc2FfZ2V0X2hhbmRsZShjaGFubmVsRFNBKTsKKwkJYXN5bmNRdWV1ZUNvbnRyb2wt PmNoYW5uZWxIYXNoRFNIID0KKwkJCWRzaGFzaF9nZXRfaGFzaF90YWJsZV9oYW5kbGUoY2hh bm5lbEhhc2gpOworCX0KKwllbHNlIGlmICghY2hhbm5lbEhhc2gpCisJeworCQkvKiBBdHRh Y2ggdG8gZXhpc3RpbmcgZHluYW1pYyBzaGFyZWQgaGFzaCB0YWJsZSAqLworCQljaGFubmVs RFNBID0gZHNhX2F0dGFjaChhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhhc2hEU0EpOwor CQlkc2FfcGluX21hcHBpbmcoY2hhbm5lbERTQSk7CisJCWNoYW5uZWxIYXNoID0gZHNoYXNo X2F0dGFjaChjaGFubmVsRFNBLCAmY2hhbm5lbERTSFBhcmFtcywKKwkJCQkJCQkJCWFzeW5j UXVldWVDb250cm9sLT5jaGFubmVsSGFzaERTSCwKKwkJCQkJCQkJCU5VTEwpOworCX0KKwor CU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwlMV0xvY2tSZWxlYXNlKE5v dGlmeVF1ZXVlTG9jayk7Cit9CisKIC8qCiAgKiBSZXBvcnQgc3BhY2UgbmVlZGVkIGZvciBv dXIgc2hhcmVkIG1lbW9yeSBhcmVhCiAgKi8KQEAgLTUyMSwxMiArNjU5LDE2IEBAIEFzeW5j U2htZW1Jbml0KHZvaWQpCiAJCVFVRVVFX1NUT1BfUEFHRSA9IDA7CiAJCVFVRVVFX0ZJUlNU X0xJU1RFTkVSID0gSU5WQUxJRF9QUk9DX05VTUJFUjsKIAkJYXN5bmNRdWV1ZUNvbnRyb2wt Pmxhc3RRdWV1ZUZpbGxXYXJuID0gMDsKKwkJYXN5bmNRdWV1ZUNvbnRyb2wtPmNoYW5uZWxI YXNoRFNBID0gRFNBX0hBTkRMRV9JTlZBTElEOworCQlhc3luY1F1ZXVlQ29udHJvbC0+Y2hh bm5lbEhhc2hEU0ggPSBEU0hBU0hfSEFORExFX0lOVkFMSUQ7CisKIAkJZm9yIChpbnQgaSA9 IDA7IGkgPCBNYXhCYWNrZW5kczsgaSsrKQogCQl7CiAJCQlRVUVVRV9CQUNLRU5EX1BJRChp KSA9IEludmFsaWRQaWQ7CiAJCQlRVUVVRV9CQUNLRU5EX0RCT0lEKGkpID0gSW52YWxpZE9p ZDsKIAkJCVFVRVVFX05FWFRfTElTVEVORVIoaSkgPSBJTlZBTElEX1BST0NfTlVNQkVSOwog CQkJU0VUX1FVRVVFX1BPUyhRVUVVRV9CQUNLRU5EX1BPUyhpKSwgMCwgMCk7CisJCQlRVUVV RV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5HKGkpID0gZmFsc2U7CiAJCX0KIAl9CiAKQEAgLTg5 NCw2ICsxMDM2LDcgQEAgUHJlQ29tbWl0X05vdGlmeSh2b2lkKQogCWlmIChwZW5kaW5nTm90 aWZpZXMpCiAJewogCQlMaXN0Q2VsbCAgICpuZXh0Tm90aWZ5OworCQlib29sCQlmaXJzdEl0 ZXJhdGlvbiA9IHRydWU7CiAKIAkJLyoKIAkJICogTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBh biBYSUQgYXNzaWduZWQgdG8gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCkBAIC05MjIsNiAr MTA2NSwzNSBAQCBQcmVDb21taXRfTm90aWZ5KHZvaWQpCiAJCUxvY2tTaGFyZWRPYmplY3Qo RGF0YWJhc2VSZWxhdGlvbklkLCBJbnZhbGlkT2lkLCAwLAogCQkJCQkJIEFjY2Vzc0V4Y2x1 c2l2ZUxvY2spOwogCisJCS8qCisJCSAqIEJ1aWxkIGxpc3Qgb2YgdW5pcXVlIGNoYW5uZWxz IGZvciBTaWduYWxCYWNrZW5kcygpLgorCQkgKi8KKwkJcGVuZGluZ05vdGlmeUNoYW5uZWxz ID0gTklMOworCQlmb3JlYWNoX3B0cihOb3RpZmljYXRpb24sIG4sIHBlbmRpbmdOb3RpZmll cy0+ZXZlbnRzKQorCQl7CisJCQljaGFyCSAgICpjaGFubmVsID0gbi0+ZGF0YTsKKworCQkJ LyogQWRkIGlmIG5vdCBhbHJlYWR5IGluIGxpc3QgKi8KKwkJCWlmICghbGlzdF9tZW1iZXJf cHRyKHBlbmRpbmdOb3RpZnlDaGFubmVscywgY2hhbm5lbCkpCisJCQkJcGVuZGluZ05vdGlm eUNoYW5uZWxzID0gbGFwcGVuZChwZW5kaW5nTm90aWZ5Q2hhbm5lbHMsIGNoYW5uZWwpOwor CQl9CisKKwkJLyoKKwkJICogRm9yIHRoZSBkaXJlY3QgYWR2YW5jZW1lbnQgb3B0aW1pemF0 aW9uIGluIFNpZ25hbEJhY2tlbmRzKCksIHdlCisJCSAqIG5lZWQgdG8gZW5zdXJlIHRoYXQg bm8gb3RoZXIgYmFja2VuZCBjYW4gaW5zZXJ0IHF1ZXVlIGVudHJpZXMKKwkJICogYmV0d2Vl biBxdWV1ZUhlYWRCZWZvcmVXcml0ZSBhbmQgcXVldWVIZWFkQWZ0ZXJXcml0ZS4gIFRoZQor CQkgKiBoZWF2eXdlaWdodCBsb2NrIGFib3ZlIHByb3ZpZGVzIHRoaXMgZ3VhcmFudGVlLCBz aW5jZSBpdCBzZXJpYWxpemVzCisJCSAqIGFsbCB3cml0ZXJzLgorCQkgKgorCQkgKiBOb3Rl OiBpZiB0aGUgaGVhdnl3ZWlnaHQgbG9jayB3ZXJlIGV2ZXIgcmVtb3ZlZCBmb3Igc2NhbGFi aWxpdHkKKwkJICogcmVhc29ucywgd2UgY291bGQgYWNoaWV2ZSB0aGUgc2FtZSBndWFyYW50 ZWUgYnkgaG9sZGluZworCQkgKiBOb3RpZnlRdWV1ZUxvY2sgaW4gRVhDTFVTSVZFIG1vZGUg YWNyb3NzIGFsbCBvdXIgaW5zZXJ0aW9ucywgcmF0aGVyCisJCSAqIHRoYW4gcmVsZWFzaW5n IGFuZCByZWFjcXVpcmluZyBpdCBmb3IgZWFjaCBwYWdlIGFzIHdlIGRvIGJlbG93LgorCQkg Ki8KKworCQkvKiBJbml0aWFsaXplIHF1ZXVlSGVhZEJlZm9yZVdyaXRlIHRvIGEgc2FmZSBk ZWZhdWx0ICovCisJCVNFVF9RVUVVRV9QT1MocXVldWVIZWFkQmVmb3JlV3JpdGUsIDAsIDAp OworCiAJCS8qIE5vdyBwdXNoIHRoZSBub3RpZmljYXRpb25zIGludG8gdGhlIHF1ZXVlICov CiAJCW5leHROb3RpZnkgPSBsaXN0X2hlYWQocGVuZGluZ05vdGlmaWVzLT5ldmVudHMpOwog CQl3aGlsZSAobmV4dE5vdGlmeSAhPSBOVUxMKQpAQCAtOTM5LDEyICsxMTExLDMzIEBAIFBy ZUNvbW1pdF9Ob3RpZnkodm9pZCkKIAkJCSAqIHBvaW50IGluIHRpbWUgd2UgY2FuIHN0aWxs IHJvbGwgdGhlIHRyYW5zYWN0aW9uIGJhY2suCiAJCQkgKi8KIAkJCUxXTG9ja0FjcXVpcmUo Tm90aWZ5UXVldWVMb2NrLCBMV19FWENMVVNJVkUpOworCisJCQkvKgorCQkJICogT24gdGhl IGZpcnN0IGl0ZXJhdGlvbiwgc2F2ZSB0aGUgcXVldWUgaGVhZCBwb3NpdGlvbiBiZWZvcmUg d2UKKwkJCSAqIHdyaXRlIGFueSBub3RpZmljYXRpb25zLiAgVGhpcyBpcyB1c2VkIGJ5IFNp Z25hbEJhY2tlbmRzKCkgdG8KKwkJCSAqIGlkZW50aWZ5IGJhY2tlbmRzIHRoYXQgY2FuIGJl IGFkdmFuY2VkIGRpcmVjdGx5IHdpdGhvdXQgd2FraW5nCisJCQkgKiB0aGVtIHVwLgorCQkJ ICovCisJCQlpZiAoZmlyc3RJdGVyYXRpb24pCisJCQl7CisJCQkJcXVldWVIZWFkQmVmb3Jl V3JpdGUgPSBRVUVVRV9IRUFEOworCQkJCWZpcnN0SXRlcmF0aW9uID0gZmFsc2U7CisJCQl9 CisKIAkJCWFzeW5jUXVldWVGaWxsV2FybmluZygpOwogCQkJaWYgKGFzeW5jUXVldWVJc0Z1 bGwoKSkKIAkJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9H UkFNX0xJTUlUX0VYQ0VFREVEKSwKIAkJCQkJCSBlcnJtc2coInRvbyBtYW55IG5vdGlmaWNh dGlvbnMgaW4gdGhlIE5PVElGWSBxdWV1ZSIpKSk7CiAJCQluZXh0Tm90aWZ5ID0gYXN5bmNR dWV1ZUFkZEVudHJpZXMobmV4dE5vdGlmeSk7CisKKwkJCS8qCisJCQkgKiBDYXB0dXJlIHRo ZSBxdWV1ZSBoZWFkIGFmdGVyIGVhY2ggYmF0Y2ggb2YgZW50cmllcy4gIE9uIHRoZQorCQkJ ICogbGFzdCBpdGVyYXRpb24sIHRoaXMgZ2l2ZXMgdXMgdGhlIGZpbmFsIHF1ZXVlIGhlYWQg cG9zaXRpb24gZm9yCisJCQkgKiBTaWduYWxCYWNrZW5kcygpIHRvIHVzZSB3aGVuIGFkdmFu Y2luZyBpZGxlIGJhY2tlbmRzLgorCQkJICovCisJCQlxdWV1ZUhlYWRBZnRlcldyaXRlID0g UVVFVUVfSEVBRDsKKwogCQkJTFdMb2NrUmVsZWFzZShOb3RpZnlRdWV1ZUxvY2spOwogCQl9 CiAKQEAgLTExMzUsNiArMTMyOCwxMCBAQCBFeGVjX0xpc3RlblByZUNvbW1pdCh2b2lkKQog c3RhdGljIHZvaWQKIEV4ZWNfTGlzdGVuQ29tbWl0KGNvbnN0IGNoYXIgKmNoYW5uZWwpCiB7 CisJQ2hhbm5lbEhhc2hLZXkga2V5OworCUNoYW5uZWxFbnRyeSAqZW50cnk7CisJYm9vbAkJ Zm91bmQ7CisJUHJvY051bWJlciAqbGlzdGVuZXJzOwogCU1lbW9yeUNvbnRleHQgb2xkY29u dGV4dDsKIAogCS8qIERvIG5vdGhpbmcgaWYgd2UgYXJlIGFscmVhZHkgbGlzdGVuaW5nIG9u IHRoaXMgY2hhbm5lbCAqLwpAQCAtMTE1MiwyMSArMTM0OSw4NCBAQCBFeGVjX0xpc3RlbkNv bW1pdChjb25zdCBjaGFyICpjaGFubmVsKQogCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0 U3dpdGNoVG8oVG9wTWVtb3J5Q29udGV4dCk7CiAJbGlzdGVuQ2hhbm5lbHMgPSBsYXBwZW5k KGxpc3RlbkNoYW5uZWxzLCBwc3RyZHVwKGNoYW5uZWwpKTsKIAlNZW1vcnlDb250ZXh0U3dp dGNoVG8ob2xkY29udGV4dCk7CisKKwkvKiBOb3cgdXBkYXRlIHRoZSBzaGFyZWQgY2hhbm5l bEhhc2ggZm9yIFNpZ25hbEJhY2tlbmRzKCkgdG8gdXNlICovCisJaW5pdENoYW5uZWxIYXNo KCk7CisKKwlDaGFubmVsSGFzaFByZXBhcmVLZXkoJmtleSwgTXlEYXRhYmFzZUlkLCBjaGFu bmVsKTsKKworCS8qCisJICogRm9yIG5ldyBlbnRyaWVzLCB3ZSBpbml0aWFsaXplIGxpc3Rl bmVyc0FycmF5IHRvIEludmFsaWREc2FQb2ludGVyIGFzIGEKKwkgKiBtYXJrZXIuIFRoaXMg aGFuZGxlcyBib3RoIHRoZSBpbml0aWFsIGNyZWF0aW9uIGFuZCBwb3RlbnRpYWwgcmV0cnkK KwkgKiBhZnRlciBPT00uCisJICovCisJZW50cnkgPSBkc2hhc2hfZmluZF9vcl9pbnNlcnQo Y2hhbm5lbEhhc2gsICZrZXksICZmb3VuZCk7CisKKwlpZiAoIWZvdW5kKQorCQllbnRyeS0+ bGlzdGVuZXJzQXJyYXkgPSBJbnZhbGlkRHNhUG9pbnRlcjsKKworCWlmICghRHNhUG9pbnRl cklzVmFsaWQoZW50cnktPmxpc3RlbmVyc0FycmF5KSkKKwl7CisJCS8qIEZpcnN0IGxpc3Rl bmVyIGZvciB0aGlzIGNoYW5uZWwgKi8KKwkJZW50cnktPmxpc3RlbmVyc0FycmF5ID0gZHNh X2FsbG9jYXRlKGNoYW5uZWxEU0EsCisJCQkJCQkJCQkJCSBzaXplb2YoUHJvY051bWJlcikg KiBJTklUSUFMX0xJU1RFTkVSU19BUlJBWV9TSVpFKTsKKwkJZW50cnktPm51bUxpc3RlbmVy cyA9IDA7CisJCWVudHJ5LT5hbGxvY2F0ZWRMaXN0ZW5lcnMgPSBJTklUSUFMX0xJU1RFTkVS U19BUlJBWV9TSVpFOworCX0KKworCWxpc3RlbmVycyA9IChQcm9jTnVtYmVyICopIGRzYV9n ZXRfYWRkcmVzcyhjaGFubmVsRFNBLAorCQkJCQkJCQkJCQkgICBlbnRyeS0+bGlzdGVuZXJz QXJyYXkpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBlbnRyeS0+bnVtTGlzdGVuZXJzOyBp KyspCisJeworCQlpZiAobGlzdGVuZXJzW2ldID09IE15UHJvY051bWJlcikKKwkJeworCQkJ ZHNoYXNoX3JlbGVhc2VfbG9jayhjaGFubmVsSGFzaCwgZW50cnkpOworCQkJcmV0dXJuOwkJ CQkvKiBBbHJlYWR5IHJlZ2lzdGVyZWQgKi8KKwkJfQorCX0KKworCWlmIChlbnRyeS0+bnVt TGlzdGVuZXJzID49IGVudHJ5LT5hbGxvY2F0ZWRMaXN0ZW5lcnMpCisJeworCQlpbnQJCQlu ZXdfc2l6ZSA9IGVudHJ5LT5hbGxvY2F0ZWRMaXN0ZW5lcnMgKiAyOworCQlkc2FfcG9pbnRl ciBuZXdfYXJyYXkgPSBkc2FfYWxsb2NhdGUoY2hhbm5lbERTQSwKKwkJCQkJCQkJCQkJIHNp emVvZihQcm9jTnVtYmVyKSAqIG5ld19zaXplKTsKKwkJUHJvY051bWJlciAqbmV3X2xpc3Rl bmVycyA9IChQcm9jTnVtYmVyICopIGRzYV9nZXRfYWRkcmVzcyhjaGFubmVsRFNBLAorCQkJ CQkJCQkJCQkJCQkJCSAgIG5ld19hcnJheSk7CisKKwkJbWVtY3B5KG5ld19saXN0ZW5lcnMs IGxpc3RlbmVycywKKwkJCSAgIHNpemVvZihQcm9jTnVtYmVyKSAqIGVudHJ5LT5udW1MaXN0 ZW5lcnMpOworCisJCWRzYV9mcmVlKGNoYW5uZWxEU0EsIGVudHJ5LT5saXN0ZW5lcnNBcnJh eSk7CisJCWVudHJ5LT5saXN0ZW5lcnNBcnJheSA9IG5ld19hcnJheTsKKwkJZW50cnktPmFs bG9jYXRlZExpc3RlbmVycyA9IG5ld19zaXplOworCQlsaXN0ZW5lcnMgPSBuZXdfbGlzdGVu ZXJzOworCX0KKworCWxpc3RlbmVyc1tlbnRyeS0+bnVtTGlzdGVuZXJzXSA9IE15UHJvY051 bWJlcjsKKwllbnRyeS0+bnVtTGlzdGVuZXJzKys7CisKKwlkc2hhc2hfcmVsZWFzZV9sb2Nr KGNoYW5uZWxIYXNoLCBlbnRyeSk7CiB9CiAKIC8qCiAgKiBFeGVjX1VubGlzdGVuQ29tbWl0 IC0tLSBzdWJyb3V0aW5lIGZvciBBdENvbW1pdF9Ob3RpZnkKICAqCi0gKiBSZW1vdmUgdGhl IHNwZWNpZmllZCBjaGFubmVsIG5hbWUgZnJvbSBsaXN0ZW5DaGFubmVscy4KKyAqIFJlbW92 ZSB0aGUgc3BlY2lmaWVkIGNoYW5uZWwgZnJvbSB0aGUgbGlzdCBvZiBjaGFubmVscyB3ZSBh cmUgbGlzdGVuaW5nIG9uLgogICovCiBzdGF0aWMgdm9pZAogRXhlY19Vbmxpc3RlbkNvbW1p dChjb25zdCBjaGFyICpjaGFubmVsKQogeworCUNoYW5uZWxIYXNoS2V5IGtleTsKKwlDaGFu bmVsRW50cnkgKmVudHJ5OworCVByb2NOdW1iZXIgKmxpc3RlbmVyczsKIAlMaXN0Q2VsbCAg ICpxOworCWludAkJCWk7CiAKIAlpZiAoVHJhY2Vfbm90aWZ5KQogCQllbG9nKERFQlVHMSwg IkV4ZWNfVW5saXN0ZW5Db21taXQoJXMsJWQpIiwgY2hhbm5lbCwgTXlQcm9jUGlkKTsKIAor CS8qIFJlbW92ZSBmcm9tIG91ciBsb2NhbCBjYWNoZSAqLwogCWZvcmVhY2gocSwgbGlzdGVu Q2hhbm5lbHMpCiAJewogCQljaGFyCSAgICpsY2hhbiA9IChjaGFyICopIGxmaXJzdChxKTsK QEAgLTExNzksNiArMTQzOSw0NiBAQCBFeGVjX1VubGlzdGVuQ29tbWl0KGNvbnN0IGNoYXIg KmNoYW5uZWwpCiAJCX0KIAl9CiAKKwkvKiBOb3cgcmVtb3ZlIGZyb20gdGhlIHNoYXJlZCBj aGFubmVsSGFzaCAqLworCWlmIChjaGFubmVsSGFzaCA9PSBOVUxMKQorCQlyZXR1cm47CisK KwlDaGFubmVsSGFzaFByZXBhcmVLZXkoJmtleSwgTXlEYXRhYmFzZUlkLCBjaGFubmVsKTsK KworCS8qIExvb2sgdXAgdGhlIGNoYW5uZWwgd2l0aCBleGNsdXNpdmUgbG9jayBzbyB3ZSBj YW4gbW9kaWZ5IGl0ICovCisJZW50cnkgPSBkc2hhc2hfZmluZChjaGFubmVsSGFzaCwgJmtl eSwgdHJ1ZSk7CisJaWYgKGVudHJ5ID09IE5VTEwpCisJCXJldHVybjsKKworCWxpc3RlbmVy cyA9IChQcm9jTnVtYmVyICopIGRzYV9nZXRfYWRkcmVzcyhjaGFubmVsRFNBLAorCQkJCQkJ CQkJCQkgICBlbnRyeS0+bGlzdGVuZXJzQXJyYXkpOworCisJZm9yIChpID0gMDsgaSA8IGVu dHJ5LT5udW1MaXN0ZW5lcnM7IGkrKykKKwl7CisJCWlmIChsaXN0ZW5lcnNbaV0gPT0gTXlQ cm9jTnVtYmVyKQorCQl7CisJCQllbnRyeS0+bnVtTGlzdGVuZXJzLS07CisJCQlpZiAoaSA8 IGVudHJ5LT5udW1MaXN0ZW5lcnMpCisJCQkJbWVtbW92ZSgmbGlzdGVuZXJzW2ldLCAmbGlz dGVuZXJzW2kgKyAxXSwKKwkJCQkJCXNpemVvZihQcm9jTnVtYmVyKSAqIChlbnRyeS0+bnVt TGlzdGVuZXJzIC0gaSkpOworCisJCQlpZiAoZW50cnktPm51bUxpc3RlbmVycyA9PSAwKQor CQkJeworCQkJCS8qIExhc3QgbGlzdGVuZXIgZm9yIHRoaXMgY2hhbm5lbCAqLworCQkJCWRz YV9mcmVlKGNoYW5uZWxEU0EsIGVudHJ5LT5saXN0ZW5lcnNBcnJheSk7CisJCQkJZHNoYXNo X2RlbGV0ZV9lbnRyeShjaGFubmVsSGFzaCwgZW50cnkpOworCQkJfQorCQkJZWxzZQorCQkJ eworCQkJCWRzaGFzaF9yZWxlYXNlX2xvY2soY2hhbm5lbEhhc2gsIGVudHJ5KTsKKwkJCX0K KworCQkJcmV0dXJuOworCQl9CisJfQorCisJZHNoYXNoX3JlbGVhc2VfbG9jayhjaGFubmVs SGFzaCwgZW50cnkpOworCiAJLyoKIAkgKiBXZSBkbyBub3QgY29tcGxhaW4gYWJvdXQgdW5s aXN0ZW5pbmcgc29tZXRoaW5nIG5vdCBiZWluZyBsaXN0ZW5lZDsKIAkgKiBzaG91bGQgd2U/ CkBAIC0xMTkzLDExICsxNDkzLDUxIEBAIEV4ZWNfVW5saXN0ZW5Db21taXQoY29uc3QgY2hh ciAqY2hhbm5lbCkKIHN0YXRpYyB2b2lkCiBFeGVjX1VubGlzdGVuQWxsQ29tbWl0KHZvaWQp CiB7CisJZHNoYXNoX3NlcV9zdGF0dXMgc3RhdHVzOworCUNoYW5uZWxFbnRyeSAqZW50cnk7 CisKIAlpZiAoVHJhY2Vfbm90aWZ5KQogCQllbG9nKERFQlVHMSwgIkV4ZWNfVW5saXN0ZW5B bGxDb21taXQoJWQpIiwgTXlQcm9jUGlkKTsKIAorCS8qIENsZWFyIG91ciBsb2NhbCBjYWNo ZSAqLwogCWxpc3RfZnJlZV9kZWVwKGxpc3RlbkNoYW5uZWxzKTsKIAlsaXN0ZW5DaGFubmVs cyA9IE5JTDsKKworCS8qIE5vdyBjbGVhciBmcm9tIHNoYXJlZCBjaGFubmVsSGFzaCAqLwor CWlmIChjaGFubmVsSGFzaCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlkc2hhc2hfc2VxX2lu aXQoJnN0YXR1cywgY2hhbm5lbEhhc2gsIHRydWUpOworCXdoaWxlICgoZW50cnkgPSBkc2hh c2hfc2VxX25leHQoJnN0YXR1cykpICE9IE5VTEwpCisJeworCQlpZiAoZW50cnktPmtleS5k Ym9pZCA9PSBNeURhdGFiYXNlSWQpCisJCXsKKwkJCVByb2NOdW1iZXIgKmxpc3RlbmVyczsK KwkJCWludAkJCWk7CisKKwkJCWxpc3RlbmVycyA9IChQcm9jTnVtYmVyICopIGRzYV9nZXRf YWRkcmVzcyhjaGFubmVsRFNBLAorCQkJCQkJCQkJCQkJCSAgIGVudHJ5LT5saXN0ZW5lcnNB cnJheSk7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBlbnRyeS0+bnVtTGlzdGVuZXJzOyBpKysp CisJCQl7CisJCQkJaWYgKGxpc3RlbmVyc1tpXSA9PSBNeVByb2NOdW1iZXIpCisJCQkJewor CQkJCQllbnRyeS0+bnVtTGlzdGVuZXJzLS07CisJCQkJCWlmIChpIDwgZW50cnktPm51bUxp c3RlbmVycykKKwkJCQkJCW1lbW1vdmUoJmxpc3RlbmVyc1tpXSwgJmxpc3RlbmVyc1tpICsg MV0sCisJCQkJCQkJCXNpemVvZihQcm9jTnVtYmVyKSAqIChlbnRyeS0+bnVtTGlzdGVuZXJz IC0gaSkpOworCisJCQkJCWlmIChlbnRyeS0+bnVtTGlzdGVuZXJzID09IDApCisJCQkJCXsK KwkJCQkJCWRzYV9mcmVlKGNoYW5uZWxEU0EsIGVudHJ5LT5saXN0ZW5lcnNBcnJheSk7CisJ CQkJCQlkc2hhc2hfZGVsZXRlX2N1cnJlbnQoJnN0YXR1cyk7CisJCQkJCX0KKwkJCQkJYnJl YWs7CisJCQkJfQorCQkJfQorCQl9CisJfQorCWRzaGFzaF9zZXFfdGVybSgmc3RhdHVzKTsK IH0KIAogLyoKQEAgLTE1NjUsMTIgKzE5MDUsMTkgQEAgYXN5bmNRdWV1ZUZpbGxXYXJuaW5n KHZvaWQpCiAvKgogICogU2VuZCBzaWduYWxzIHRvIGxpc3RlbmluZyBiYWNrZW5kcy4KICAq Ci0gKiBOb3JtYWxseSB3ZSBzaWduYWwgb25seSBiYWNrZW5kcyBpbiBvdXIgb3duIGRhdGFi YXNlLCBzaW5jZSBvbmx5IHRob3NlCi0gKiBiYWNrZW5kcyBjb3VsZCBiZSBpbnRlcmVzdGVk IGluIG5vdGlmaWVzIHdlIHNlbmQuICBIb3dldmVyLCBpZiB0aGVyZSdzCi0gKiBub3RpZnkg dHJhZmZpYyBpbiBvdXIgZGF0YWJhc2UgYnV0IG5vIHRyYWZmaWMgaW4gYW5vdGhlciBkYXRh YmFzZSB0aGF0Ci0gKiBkb2VzIGhhdmUgbGlzdGVuZXIocyksIHRob3NlIGxpc3RlbmVycyB3 aWxsIGZhbGwgZnVydGhlciBhbmQgZnVydGhlcgotICogYmVoaW5kLiAgV2FrZW4gdGhlbSBh bnl3YXkgaWYgdGhleSdyZSBmYXIgZW5vdWdoIGJlaGluZCwgc28gdGhhdCB0aGV5J2xsCi0g KiBhZHZhbmNlIHRoZWlyIHF1ZXVlIHBvc2l0aW9uIHBvaW50ZXJzLCBhbGxvd2luZyB0aGUg Z2xvYmFsIHRhaWwgdG8gYWR2YW5jZS4KKyAqIE5vcm1hbGx5IHdlIHNpZ25hbCBvbmx5IGJh Y2tlbmRzIGluIG91ciBvd24gZGF0YWJhc2UsIHRoYXQgYXJlCisgKiBsaXN0ZW5pbmcgb24g dGhlIGNoYW5uZWxzIHdpdGggcGVuZGluZyBub3RpZmllcywgc2luY2Ugb25seSB0aG9zZQor ICogYmFja2VuZHMgYXJlIGludGVyZXN0ZWQgaW4gbm90aWZpZXMgd2Ugc2VuZC4KKyAqCisg KiBCYWNrZW5kcyB0aGF0IGFyZSBzdGlsbCBwb3NpdGlvbmVkIGF0IHRoZSBxdWV1ZSBoZWFk IGZyb20gYmVmb3JlIG91cgorICogY29tbWl0IGNhbiBiZSBzYWZlbHkgYWR2YW5jZWQgZGly ZWN0bHkgdG8gdGhlIG5ldyBoZWFkLCBzaW5jZSB0aGUKKyAqIHF1ZXVlIHJlZ2lvbiB3ZSB3 cm90ZSBpcyBrbm93biB0byBjb250YWluIG9ubHkgb3VyIG93biBub3RpZmljYXRpb25zLgor ICogVGhpcyBhdm9pZHMgdW5uZWNlc3Nhcnkgd2FrZXVwcyB3aGVuIHRoZXJlIGlzIG5vdGhp bmcgb2YgaW50ZXJlc3QgdG8KKyAqIHRoZW0uCisgKgorICogSW4gYWRkaXRpb24sIGlmIGEg YmFja2VuZCBoYXMgZmFsbGVuIHRvbyBmYXIgYmVoaW5kIGluIHRoZSBxdWV1ZSwgd2UKKyAq IHNpZ25hbCBpdCBzbyB0aGF0IGl0IHdpbGwgYWR2YW5jZSBpdHMgcG9zaXRpb24gYW5kIGFs bG93IHRoZSBnbG9iYWwKKyAqIHRhaWwgcG9pbnRlciB0byBtb3ZlIGZvcndhcmQuCiAgKgog ICogU2luY2Ugd2Uga25vdyB0aGUgUHJvY051bWJlciBhbmQgdGhlIFBpZCB0aGUgc2lnbmFs aW5nIGlzIHF1aXRlIGNoZWFwLgogICoKQEAgLTE1ODMsNiArMTkzMCwxMyBAQCBTaWduYWxC YWNrZW5kcyh2b2lkKQogCWludDMyCSAgICpwaWRzOwogCVByb2NOdW1iZXIgKnByb2Nub3M7 CiAJaW50CQkJY291bnQ7CisJTGlzdENlbGwgICAqbGM7CisKKwkvKgorCSAqIEF0dGFjaCB0 byB0aGUgY2hhbm5lbCBoYXNoIGlmIG5lZWRlZC4gIFdlIG1pZ2h0IG5vdCBoYXZlIG9uZSBp ZiB0aGlzCisJICogYmFja2VuZCBoYXNuJ3QgZG9uZSBMSVNURU4sIGJ1dCB3ZSBuZWVkIGl0 IHRvIGZpbmQgbGlzdGVuZXJzLgorCSAqLworCWluaXRDaGFubmVsSGFzaCgpOwogCiAJLyoK IAkgKiBJZGVudGlmeSBiYWNrZW5kcyB0aGF0IHdlIG5lZWQgdG8gc2lnbmFsLiAgV2UgZG9u J3Qgd2FudCB0byBzZW5kCkBAIC0xNTk3LDM2ICsxOTUxLDExMSBAQCBTaWduYWxCYWNrZW5k cyh2b2lkKQogCWNvdW50ID0gMDsKIAogCUxXTG9ja0FjcXVpcmUoTm90aWZ5UXVldWVMb2Nr LCBMV19FWENMVVNJVkUpOwotCWZvciAoUHJvY051bWJlciBpID0gUVVFVUVfRklSU1RfTElT VEVORVI7IGkgIT0gSU5WQUxJRF9QUk9DX05VTUJFUjsgaSA9IFFVRVVFX05FWFRfTElTVEVO RVIoaSkpCisJZm9yZWFjaChsYywgcGVuZGluZ05vdGlmeUNoYW5uZWxzKQorCXsKKwkJY2hh cgkgICAqY2hhbm5lbCA9IChjaGFyICopIGxmaXJzdChsYyk7CisJCUNoYW5uZWxFbnRyeSAq ZW50cnkgPSBOVUxMOworCQlQcm9jTnVtYmVyICpsaXN0ZW5lcnM7CisKKwkJaWYgKGNoYW5u ZWxIYXNoICE9IE5VTEwpCisJCXsKKwkJCUNoYW5uZWxIYXNoS2V5IGtleTsKKworCQkJQ2hh bm5lbEhhc2hQcmVwYXJlS2V5KCZrZXksIE15RGF0YWJhc2VJZCwgY2hhbm5lbCk7CisJCQll bnRyeSA9IGRzaGFzaF9maW5kKGNoYW5uZWxIYXNoLCAma2V5LCBmYWxzZSk7CisJCX0KKwor CQlpZiAoZW50cnkgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOwkJCS8qIE5vIGxpc3RlbmVycyBy ZWdpc3RlcmVkIGZvciB0aGlzIGNoYW5uZWwgKi8KKworCQlsaXN0ZW5lcnMgPSAoUHJvY051 bWJlciAqKSBkc2FfZ2V0X2FkZHJlc3MoY2hhbm5lbERTQSwKKwkJCQkJCQkJCQkJCSAgIGVu dHJ5LT5saXN0ZW5lcnNBcnJheSk7CisKKwkJZm9yIChpbnQgaiA9IDA7IGogPCBlbnRyeS0+ bnVtTGlzdGVuZXJzOyBqKyspCisJCXsKKwkJCVByb2NOdW1iZXIJaSA9IGxpc3RlbmVyc1tq XTsKKwkJCWludDMyCQlwaWQ7CisJCQlRdWV1ZVBvc2l0aW9uIHBvczsKKworCQkJaWYgKFFV RVVFX0JBQ0tFTkRfV0FLRVVQX1BFTkRJTkcoaSkpCisJCQkJY29udGludWU7CisKKwkJCXBv cyA9IFFVRVVFX0JBQ0tFTkRfUE9TKGkpOworCQkJcGlkID0gUVVFVUVfQkFDS0VORF9QSUQo aSk7CisKKwkJCS8qIFNraXAgaWYgY2F1Z2h0IHVwICovCisJCQlpZiAoUVVFVUVfUE9TX0VR VUFMKHBvcywgUVVFVUVfSEVBRCkpCisJCQkJY29udGludWU7CisKKwkJCUFzc2VydChwaWQg IT0gSW52YWxpZFBpZCk7CisKKwkJCVFVRVVFX0JBQ0tFTkRfV0FLRVVQX1BFTkRJTkcoaSkg PSB0cnVlOworCQkJcGlkc1tjb3VudF0gPSBwaWQ7CisJCQlwcm9jbm9zW2NvdW50XSA9IGk7 CisJCQljb3VudCsrOworCQl9CisKKwkJZHNoYXNoX3JlbGVhc2VfbG9jayhjaGFubmVsSGFz aCwgZW50cnkpOworCX0KKworCS8qCisJICogRGlyZWN0IGFkdmFuY2VtZW50IGFuZCBsYWdn aW5nIGJhY2tlbmQgZGV0ZWN0aW9uLgorCSAqCisJICogRGlyZWN0IGFkdmFuY2VtZW50OiBh dm9pZCB3YWtpbmcgYmFja2VuZHMgc3RpbGwgcG9zaXRpb25lZCBhdCB0aGUgb2xkCisJICog cXVldWUgaGVhZCB0aGF0IGFyZW4ndCBpbnRlcmVzdGVkIGluIG91ciBub3RpZmljYXRpb25z LgorCSAqCisJICogVGhlIGhlYXZ5d2VpZ2h0IGxvY2sgb24gZGF0YWJhc2UgMCAoaGVsZCBp biBQcmVDb21taXRfTm90aWZ5KSBlbnN1cmVzCisJICogbm8gb3RoZXIgYmFja2VuZCBjYW4g aW5zZXJ0IG5vdGlmaWNhdGlvbnMgaW4gdGhlIHJlZ2lvbiB3ZSBqdXN0IHdyb3RlLgorCSAq IEV2ZW4gdGhvdWdoIHdlIG1heSB0YWtlIGFuZCByZWxlYXNlIE5vdGlmeVF1ZXVlTG9jayBt dWx0aXBsZSB0aW1lcworCSAqIHdoaWxlIHdyaXRpbmcsIHRoZSBoZWF2eXdlaWdodCBsb2Nr IGd1YXJhbnRlZXMgdGhpcyByZWdpb24gY29udGFpbnMKKwkgKiBvbmx5IG91ciBtZXNzYWdl cy4gIFRoZXJlZm9yZSwgYW55IGJhY2tlbmQgc3RpbGwgcG9zaXRpb25lZCBhdCB0aGUKKwkg KiBxdWV1ZSBoZWFkIGZyb20gYmVmb3JlIG91ciB3cml0ZSBjYW4gYmUgc2FmZWx5IGFkdmFu Y2VkIHRvIHRoZSBjdXJyZW50CisJICogcXVldWUgaGVhZCB3aXRob3V0IHdha2luZyBpdC4K KwkgKgorCSAqIEZhbHNlLXBvc2l0aXZlIHBvc3NpYmlsaXR5OiBpZiBhIGJhY2tlbmQgd2Fz IHByZXZpb3VzbHkgc2lnbmFsZWQgYnV0CisJICogaGFzbid0IHlldCBhd29rZW4sIHdlJ2xs IHNraXAgYWR2YW5jaW5nIGl0IChiZWNhdXNlIHdha2V1cFBlbmRpbmcgaXMKKwkgKiB0cnVl KS4gIFRoaXMgaXMgc2FmZSAtIHRoZSBiYWNrZW5kIHdpbGwgYWR2YW5jZSBpdHMgcG9pbnRl ciB3aGVuIGl0CisJICogZG9lcyB3YWtlIHVwLiAgVGhlIGFsdGVybmF0aXZlIChhZHZhbmNp bmcgaXQgYW55d2F5KSB3b3VsZCByaXNrCisJICogYWR2YW5jaW5nIG92ZXIgbm90aWZpY2F0 aW9ucyBmcm9tIHdob2V2ZXIgc2lnbmFsZWQgaXQuCisJICoKKwkgKiBMYWdnaW5nIGJhY2tl bmRzOiB3ZSBhbHNvIGNoZWNrIGlmIGFueSBiYWNrZW5kIGhhcyBmYWxsZW4gdG9vIGZhcgor CSAqIGJlaGluZCBhbmQgc2lnbmFsIGl0IHRvIGNhdGNoIHVwLCBhbGxvd2luZyB0aGUgZ2xv YmFsIHRhaWwgdG8gYWR2YW5jZS4KKwkgKi8KKwlmb3IgKFByb2NOdW1iZXIgaSA9IFFVRVVF X0ZJUlNUX0xJU1RFTkVSOworCQkgaSAhPSBJTlZBTElEX1BST0NfTlVNQkVSOworCQkgaSA9 IFFVRVVFX05FWFRfTElTVEVORVIoaSkpCiAJewotCQlpbnQzMgkJcGlkID0gUVVFVUVfQkFD S0VORF9QSUQoaSk7CiAJCVF1ZXVlUG9zaXRpb24gcG9zOworCQlpbnQ2NAkJbGFnOworCQlp bnQzMgkJcGlkOworCisJCWlmIChRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5HKGkpKQor CQkJY29udGludWU7CiAKLQkJQXNzZXJ0KHBpZCAhPSBJbnZhbGlkUGlkKTsKIAkJcG9zID0g UVVFVUVfQkFDS0VORF9QT1MoaSk7Ci0JCWlmIChRVUVVRV9CQUNLRU5EX0RCT0lEKGkpID09 IE15RGF0YWJhc2VJZCkKKworCQkvKiBEaXJlY3QgYWR2YW5jZW1lbnQgZm9yIGlkbGUgYmFj a2VuZHMgYXQgdGhlIG9sZCBoZWFkICovCisJCWlmIChwZW5kaW5nTm90aWZpZXMgIT0gTlVM TCAmJgorCQkJUVVFVUVfUE9TX0VRVUFMKHBvcywgcXVldWVIZWFkQmVmb3JlV3JpdGUpKQog CQl7Ci0JCQkvKgotCQkJICogQWx3YXlzIHNpZ25hbCBsaXN0ZW5lcnMgaW4gb3VyIG93biBk YXRhYmFzZSwgdW5sZXNzIHRoZXkncmUKLQkJCSAqIGFscmVhZHkgY2F1Z2h0IHVwICh1bmxp a2VseSwgYnV0IHBvc3NpYmxlKS4KLQkJCSAqLwotCQkJaWYgKFFVRVVFX1BPU19FUVVBTChw b3MsIFFVRVVFX0hFQUQpKQotCQkJCWNvbnRpbnVlOworCQkJUVVFVUVfQkFDS0VORF9QT1Mo aSkgPSBxdWV1ZUhlYWRBZnRlcldyaXRlOworCQkJcG9zID0gcXVldWVIZWFkQWZ0ZXJXcml0 ZTsKIAkJfQotCQllbHNlCisKKwkJLyogU2lnbmFsIGJhY2tlbmRzIHRoYXQgaGF2ZSBmYWxs ZW4gdG9vIGZhciBiZWhpbmQgKi8KKwkJbGFnID0gYXN5bmNRdWV1ZVBhZ2VEaWZmKFFVRVVF X1BPU19QQUdFKFFVRVVFX0hFQUQpLAorCQkJCQkJCQkgUVVFVUVfUE9TX1BBR0UocG9zKSk7 CisKKwkJaWYgKGxhZyA+PSBRVUVVRV9DTEVBTlVQX0RFTEFZKQogCQl7Ci0JCQkvKgotCQkJ ICogTGlzdGVuZXJzIGluIG90aGVyIGRhdGFiYXNlcyBzaG91bGQgYmUgc2lnbmFsZWQgb25s eSBpZiB0aGV5Ci0JCQkgKiBhcmUgZmFyIGJlaGluZC4KLQkJCSAqLwotCQkJaWYgKGFzeW5j UXVldWVQYWdlRGlmZihRVUVVRV9QT1NfUEFHRShRVUVVRV9IRUFEKSwKLQkJCQkJCQkJICAg UVVFVUVfUE9TX1BBR0UocG9zKSkgPCBRVUVVRV9DTEVBTlVQX0RFTEFZKQotCQkJCWNvbnRp bnVlOworCQkJcGlkID0gUVVFVUVfQkFDS0VORF9QSUQoaSk7CisJCQlBc3NlcnQocGlkICE9 IEludmFsaWRQaWQpOworCisJCQlRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5HKGkpID0g dHJ1ZTsKKwkJCXBpZHNbY291bnRdID0gcGlkOworCQkJcHJvY25vc1tjb3VudF0gPSBpOwor CQkJY291bnQrKzsKIAkJfQotCQkvKiBPSywgbmVlZCB0byBzaWduYWwgdGhpcyBvbmUgKi8K LQkJcGlkc1tjb3VudF0gPSBwaWQ7Ci0JCXByb2Nub3NbY291bnRdID0gaTsKLQkJY291bnQr KzsKIAl9CiAJTFdMb2NrUmVsZWFzZShOb3RpZnlRdWV1ZUxvY2spOwogCkBAIC0xODY1LDYg KzIyOTQsNyBAQCBhc3luY1F1ZXVlUmVhZEFsbE5vdGlmaWNhdGlvbnModm9pZCkKIAlMV0xv Y2tBY3F1aXJlKE5vdGlmeVF1ZXVlTG9jaywgTFdfU0hBUkVEKTsKIAkvKiBBc3NlcnQgY2hl Y2tzIHRoYXQgd2UgaGF2ZSBhIHZhbGlkIHN0YXRlIGVudHJ5ICovCiAJQXNzZXJ0KE15UHJv Y1BpZCA9PSBRVUVVRV9CQUNLRU5EX1BJRChNeVByb2NOdW1iZXIpKTsKKwlRVUVVRV9CQUNL RU5EX1dBS0VVUF9QRU5ESU5HKE15UHJvY051bWJlcikgPSBmYWxzZTsKIAlwb3MgPSBRVUVV RV9CQUNLRU5EX1BPUyhNeVByb2NOdW1iZXIpOwogCWhlYWQgPSBRVUVVRV9IRUFEOwogCUxX TG9ja1JlbGVhc2UoTm90aWZ5UXVldWVMb2NrKTsKQEAgLTIzNzMsNyArMjgwMyw3IEBAIG5v dGlmaWNhdGlvbl9tYXRjaChjb25zdCB2b2lkICprZXkxLCBjb25zdCB2b2lkICprZXkyLCBT aXplIGtleXNpemUpCiAJcmV0dXJuIDE7CQkJCQkvKiBub3QgZXF1YWwgKi8KIH0KIAotLyog Q2xlYXIgdGhlIHBlbmRpbmdBY3Rpb25zIGFuZCBwZW5kaW5nTm90aWZpZXMgbGlzdHMuICov CisvKiBDbGVhciB0aGUgcGVuZGluZ0FjdGlvbnMsIHBlbmRpbmdOb3RpZmllcywgYW5kIHBl bmRpbmdOb3RpZnlDaGFubmVscyBsaXN0cy4gKi8KIHN0YXRpYyB2b2lkCiBDbGVhclBlbmRp bmdBY3Rpb25zQW5kTm90aWZpZXModm9pZCkKIHsKQEAgLTIzODUsNiArMjgxNSw3IEBAIENs ZWFyUGVuZGluZ0FjdGlvbnNBbmROb3RpZmllcyh2b2lkKQogCSAqLwogCXBlbmRpbmdBY3Rp b25zID0gTlVMTDsKIAlwZW5kaW5nTm90aWZpZXMgPSBOVUxMOworCXBlbmRpbmdOb3RpZnlD aGFubmVscyA9IE5JTDsKIH0KIAogLyoKQEAgLTIzOTUsMyArMjgyNiwxNiBAQCBjaGVja19u b3RpZnlfYnVmZmVycyhpbnQgKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLCBHdWNTb3VyY2Ugc291 cmNlKQogewogCXJldHVybiBjaGVja19zbHJ1X2J1ZmZlcnMoIm5vdGlmeV9idWZmZXJzIiwg bmV3dmFsKTsKIH0KKworCisvKgorICogQ2hhbm5lbEhhc2hQcmVwYXJlS2V5CisgKgkJUHJl cGFyZSBhIGNoYW5uZWwga2V5IGZvciB1c2UgYXMgYSBoYXNoIGtleS4KKyAqLworc3RhdGlj IGlubGluZSB2b2lkCitDaGFubmVsSGFzaFByZXBhcmVLZXkoQ2hhbm5lbEhhc2hLZXkgKmtl eSwgT2lkIGRib2lkLCBjb25zdCBjaGFyICpjaGFubmVsKQoreworCW1lbXNldChrZXksIDAs IHNpemVvZihDaGFubmVsSGFzaEtleSkpOworCWtleS0+ZGJvaWQgPSBkYm9pZDsKKwlzdHJs Y3B5KGtleS0+Y2hhbm5lbCwgY2hhbm5lbCwgTkFNRURBVEFMRU4pOworfQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQgYi9z cmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4dAppbmRleCA3 NTUzZjZlYWNlZi4uYTRmYWRiZDA3NjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0CkBAIC0zNjYsNiArMzY2LDcgQEAgU3Vi dHJhbnNCdWZmZXIJIldhaXRpbmcgZm9yIEkvTyBvbiBhIHN1Yi10cmFuc2FjdGlvbiBTTFJV IGJ1ZmZlci4iCiBNdWx0aVhhY3RPZmZzZXRCdWZmZXIJIldhaXRpbmcgZm9yIEkvTyBvbiBh IG11bHRpeGFjdCBvZmZzZXQgU0xSVSBidWZmZXIuIgogTXVsdGlYYWN0TWVtYmVyQnVmZmVy CSJXYWl0aW5nIGZvciBJL08gb24gYSBtdWx0aXhhY3QgbWVtYmVyIFNMUlUgYnVmZmVyLiIK IE5vdGlmeUJ1ZmZlcgkiV2FpdGluZyBmb3IgSS9PIG9uIGEgPGNvbW1hbmQ+Tk9USUZZPC9j b21tYW5kPiBtZXNzYWdlIFNMUlUgYnVmZmVyLiIKK05vdGlmeUNoYW5uZWxIYXNoCSJXYWl0 aW5nIHRvIGFjY2VzcyB0aGUgPGNvbW1hbmQ+Tk9USUZZPC9jb21tYW5kPiBjaGFubmVsIGhh c2ggdGFibGUuIgogU2VyaWFsQnVmZmVyCSJXYWl0aW5nIGZvciBJL08gb24gYSBzZXJpYWxp emFibGUgdHJhbnNhY3Rpb24gY29uZmxpY3QgU0xSVSBidWZmZXIuIgogV0FMSW5zZXJ0CSJX YWl0aW5nIHRvIGluc2VydCBXQUwgZGF0YSBpbnRvIGEgbWVtb3J5IGJ1ZmZlci4iCiBCdWZm ZXJDb250ZW50CSJXYWl0aW5nIHRvIGFjY2VzcyBhIGRhdGEgcGFnZSBpbiBtZW1vcnkuIgpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2tsaXN0LmggYi9zcmMvaW5j bHVkZS9zdG9yYWdlL2x3bG9ja2xpc3QuaAppbmRleCAwNmExZmZkNGIwOC4uMjc2OGRkZjQ0 MTQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlzdC5oCisrKyBi L3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlzdC5oCkBAIC0xMDAsNiArMTAwLDcgQEAg UEdfTFdMT0NLVFJBTkNIRShTVUJUUkFOU19CVUZGRVIsIFN1YnRyYW5zQnVmZmVyKQogUEdf TFdMT0NLVFJBTkNIRShNVUxUSVhBQ1RPRkZTRVRfQlVGRkVSLCBNdWx0aVhhY3RPZmZzZXRC dWZmZXIpCiBQR19MV0xPQ0tUUkFOQ0hFKE1VTFRJWEFDVE1FTUJFUl9CVUZGRVIsIE11bHRp WGFjdE1lbWJlckJ1ZmZlcikKIFBHX0xXTE9DS1RSQU5DSEUoTk9USUZZX0JVRkZFUiwgTm90 aWZ5QnVmZmVyKQorUEdfTFdMT0NLVFJBTkNIRShOT1RJRllfQ0hBTk5FTF9IQVNILCBOb3Rp ZnlDaGFubmVsSGFzaCkKIFBHX0xXTE9DS1RSQU5DSEUoU0VSSUFMX0JVRkZFUiwgU2VyaWFs QnVmZmVyKQogUEdfTFdMT0NLVFJBTkNIRShXQUxfSU5TRVJULCBXQUxJbnNlcnQpCiBQR19M V0xPQ0tUUkFOQ0hFKEJVRkZFUl9DT05URU5ULCBCdWZmZXJDb250ZW50KQpkaWZmIC0tZ2l0 IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdAppbmRleCA1MjkwYjkxZTgzZS4uNWNjZGQ0MDQzZTggMTAwNjQ0 Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC00MTIsNiArNDEyLDggQEAgQ2F0YWxvZ0lk TWFwRW50cnkKIENhdGFsb2dJbmRleFN0YXRlCiBDaGFuZ2VWYXJOb2Rlc19jYWxsYmFjawog Q2hhbmdlVmFyTm9kZXNfY29udGV4dAorQ2hhbm5lbEVudHJ5CitDaGFubmVsSGFzaEtleQog Q2hlY2tQb2ludAogQ2hlY2tQb2ludFN0bXQKIENoZWNrcG9pbnRTdGF0c0RhdGEKLS0gCjIu NTAuMQoK --b0b77e07619846f8a224da5c4226b641 Content-Disposition: attachment; filename*0="0002-optimize_listen_notify-v19-alt1.txt" Content-Type: text/plain; name="0002-optimize_listen_notify-v19-alt1.txt" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9hc3luYy5jCmluZGV4IDkwYTUzMGNmYzYxLi40NDQ0MmU5MjdmZiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYworKysgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9hc3luYy5jCkBAIC0yNjQsNiArMjY0LDExIEBAIHR5cGVkZWYgc3RydWN0 IFF1ZXVlUG9zaXRpb24KIAkgKHgpLnBhZ2UgIT0gKHkpLnBhZ2UgPyAoeCkgOiBcCiAJICh4 KS5vZmZzZXQgPiAoeSkub2Zmc2V0ID8gKHgpIDogKHkpKQogCisvKiByZXR1cm5zIHRydWUg aWYgeCBjb21lcyBiZWZvcmUgeSBpbiBxdWV1ZSBvcmRlciAqLworI2RlZmluZSBRVUVVRV9Q T1NfUFJFQ0VERVMoeCx5KSBcCisJKGFzeW5jUXVldWVQYWdlUHJlY2VkZXMoKHgpLnBhZ2Us ICh5KS5wYWdlKSB8fCBcCisJICgoeCkucGFnZSA9PSAoeSkucGFnZSAmJiAoeCkub2Zmc2V0 IDwgKHkpLm9mZnNldCkpCisKIC8qCiAgKiBQYXJhbWV0ZXIgZGV0ZXJtaW5pbmcgaG93IG9m dGVuIHdlIHRyeSB0byBhZHZhbmNlIHRoZSB0YWlsIHBvaW50ZXI6CiAgKiB3ZSBkbyB0aGF0 IGFmdGVyIGV2ZXJ5IFFVRVVFX0NMRUFOVVBfREVMQVkgcGFnZXMgb2YgTk9USUZZIGRhdGEu ICBUaGlzIGlzCkBAIC0yODYsNiArMjkxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUXVldWVCYWNr ZW5kU3RhdHVzCiAJT2lkCQkJZGJvaWQ7CQkJLyogYmFja2VuZCdzIGRhdGFiYXNlIE9JRCwg b3IgSW52YWxpZE9pZCAqLwogCVByb2NOdW1iZXIJbmV4dExpc3RlbmVyOwkvKiBpZCBvZiBu ZXh0IGxpc3RlbmVyLCBvciBJTlZBTElEX1BST0NfTlVNQkVSICovCiAJUXVldWVQb3NpdGlv biBwb3M7CQkJLyogYmFja2VuZCBoYXMgcmVhZCBxdWV1ZSB1cCB0byBoZXJlICovCisJUXVl dWVQb3NpdGlvbiBhZHZpc29yeVBvczsJLyogYmFja2VuZCBjb3VsZCBza2lwIHF1ZXVlIHRv IGhlcmUgKi8KIAlib29sCQl3YWtldXBQZW5kaW5nOwkvKiBzaWduYWwgc2VudCBidXQgbm90 IHlldCBwcm9jZXNzZWQgKi8KIH0gUXVldWVCYWNrZW5kU3RhdHVzOwogCkBAIC0zNDcsNiAr MzUzLDcgQEAgc3RhdGljIGRzaGFzaF90YWJsZSAqY2hhbm5lbEhhc2ggPSBOVUxMOwogI2Rl ZmluZSBRVUVVRV9CQUNLRU5EX0RCT0lEKGkpCQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmJhY2tl bmRbaV0uZGJvaWQpCiAjZGVmaW5lIFFVRVVFX05FWFRfTElTVEVORVIoaSkJCShhc3luY1F1 ZXVlQ29udHJvbC0+YmFja2VuZFtpXS5uZXh0TGlzdGVuZXIpCiAjZGVmaW5lIFFVRVVFX0JB Q0tFTkRfUE9TKGkpCQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmJhY2tlbmRbaV0ucG9zKQorI2Rl ZmluZSBRVUVVRV9CQUNLRU5EX0FEVklTT1JZX1BPUyhpKQkoYXN5bmNRdWV1ZUNvbnRyb2wt PmJhY2tlbmRbaV0uYWR2aXNvcnlQb3MpCiAjZGVmaW5lIFFVRVVFX0JBQ0tFTkRfV0FLRVVQ X1BFTkRJTkcoaSkJKGFzeW5jUXVldWVDb250cm9sLT5iYWNrZW5kW2ldLndha2V1cFBlbmRp bmcpCiAKIC8qCkBAIC02NjgsNiArNjc1LDcgQEAgQXN5bmNTaG1lbUluaXQodm9pZCkKIAkJ CVFVRVVFX0JBQ0tFTkRfREJPSUQoaSkgPSBJbnZhbGlkT2lkOwogCQkJUVVFVUVfTkVYVF9M SVNURU5FUihpKSA9IElOVkFMSURfUFJPQ19OVU1CRVI7CiAJCQlTRVRfUVVFVUVfUE9TKFFV RVVFX0JBQ0tFTkRfUE9TKGkpLCAwLCAwKTsKKwkJCVNFVF9RVUVVRV9QT1MoUVVFVUVfQkFD S0VORF9BRFZJU09SWV9QT1MoaSksIDAsIDApOwogCQkJUVVFVUVfQkFDS0VORF9XQUtFVVBf UEVORElORyhpKSA9IGZhbHNlOwogCQl9CiAJfQpAQCAtMjAwOSw5ICsyMDE3LDE0IEBAIFNp Z25hbEJhY2tlbmRzKHZvaWQpCiAJICogRXZlbiB0aG91Z2ggd2UgbWF5IHRha2UgYW5kIHJl bGVhc2UgTm90aWZ5UXVldWVMb2NrIG11bHRpcGxlIHRpbWVzCiAJICogd2hpbGUgd3JpdGlu ZywgdGhlIGhlYXZ5d2VpZ2h0IGxvY2sgZ3VhcmFudGVlcyB0aGlzIHJlZ2lvbiBjb250YWlu cwogCSAqIG9ubHkgb3VyIG1lc3NhZ2VzLiAgVGhlcmVmb3JlLCBhbnkgYmFja2VuZCBzdGls bCBwb3NpdGlvbmVkIGF0IHRoZQotCSAqIHF1ZXVlIGhlYWQgZnJvbSBiZWZvcmUgb3VyIHdy aXRlIGNhbiBiZSBzYWZlbHkgYWR2YW5jZWQgdG8gdGhlIGN1cnJlbnQKKwkgKiBxdWV1ZSBo ZWFkIGZyb20gYmVmb3JlIG91ciB3cml0ZSBjYW4gYmUgYWR2aXNlZCB0byBza2lwIHRvIHRo ZSBjdXJyZW50CiAJICogcXVldWUgaGVhZCB3aXRob3V0IHdha2luZyBpdC4KIAkgKgorCSAq IFdlIHVzZSB0aGUgYWR2aXNvcnlQb3MgZmllbGQgcmF0aGVyIHRoYW4gZGlyZWN0bHkgbW9k aWZ5aW5nIHBvcywKKwkgKiBiZWNhdXNlIHRoZSBsaXN0ZW5pbmcgYmFja2VuZCBtaWdodCBi ZSBjb25jdXJyZW50bHkgcmVhZGluZworCSAqIG5vdGlmaWNhdGlvbnMgdXNpbmcgaXRzIGxv Y2FsIGNvcHkgb2YgcG9zLiAgVGhlIGJhY2tlbmQgY29udHJvbHMgaXRzCisJICogb3duIHBv cyBmaWVsZCBhbmQgd2lsbCBjaGVjayBhZHZpc29yeVBvcyB3aGVuIGl0J3Mgc2FmZSB0byBk byBzby4KKwkgKgogCSAqIEZhbHNlLXBvc2l0aXZlIHBvc3NpYmlsaXR5OiBpZiBhIGJhY2tl bmQgd2FzIHByZXZpb3VzbHkgc2lnbmFsZWQgYnV0CiAJICogaGFzbid0IHlldCBhd29rZW4s IHdlJ2xsIHNraXAgYWR2YW5jaW5nIGl0IChiZWNhdXNlIHdha2V1cFBlbmRpbmcgaXMKIAkg KiB0cnVlKS4gIFRoaXMgaXMgc2FmZSAtIHRoZSBiYWNrZW5kIHdpbGwgYWR2YW5jZSBpdHMg cG9pbnRlciB3aGVuIGl0CkBAIC0yMDM4LDcgKzIwNTEsNyBAQCBTaWduYWxCYWNrZW5kcyh2 b2lkKQogCQlpZiAocGVuZGluZ05vdGlmaWVzICE9IE5VTEwgJiYKIAkJCVFVRVVFX1BPU19F UVVBTChwb3MsIHF1ZXVlSGVhZEJlZm9yZVdyaXRlKSkKIAkJewotCQkJUVVFVUVfQkFDS0VO RF9QT1MoaSkgPSBxdWV1ZUhlYWRBZnRlcldyaXRlOworCQkJUVVFVUVfQkFDS0VORF9BRFZJ U09SWV9QT1MoaSkgPSBxdWV1ZUhlYWRBZnRlcldyaXRlOwogCQkJcG9zID0gcXVldWVIZWFk QWZ0ZXJXcml0ZTsKIAkJfQogCkBAIC0yMjk3LDYgKzIzMTAsMjYgQEAgYXN5bmNRdWV1ZVJl YWRBbGxOb3RpZmljYXRpb25zKHZvaWQpCiAJUVVFVUVfQkFDS0VORF9XQUtFVVBfUEVORElO RyhNeVByb2NOdW1iZXIpID0gZmFsc2U7CiAJcG9zID0gUVVFVUVfQkFDS0VORF9QT1MoTXlQ cm9jTnVtYmVyKTsKIAloZWFkID0gUVVFVUVfSEVBRDsKKworCS8qCisJICogQ2hlY2sgaWYg YW5vdGhlciBiYWNrZW5kIGhhcyBzZXQgYW4gYWR2aXNvcnkgcG9zaXRpb24gZm9yIHVzLgor CSAqIElmIHNvLCBhbmQgaWYgd2UgaGF2ZW4ndCB5ZXQgcmVhZCBwYXN0IHRoYXQgcG9pbnQs IHdlIGNhbiBzYWZlbHkKKwkgKiBhZG9wdCB0aGUgYWR2aXNvcnkgcG9zaXRpb24gYW5kIHNr aXAgdGhlIGludGVydmVuaW5nIG5vdGlmaWNhdGlvbnMuCisJICogVGhpcyBpcyBzYWZlIGJl Y2F1c2UgdGhlIGFkdmlzb3J5IHBvc2l0aW9uIGlzIG9ubHkgc2V0IHdoZW4gd2UncmUKKwkg KiBwb3NpdGlvbmVkIGF0IGEga25vd24gcG9pbnQgYW5kIHRoZSBza2lwcGVkIHJlZ2lvbiBj b250YWlucyBvbmx5CisJICogbm90aWZpY2F0aW9ucyB3ZSdyZSBub3QgaW50ZXJlc3RlZCBp bi4KKwkgKi8KKwl7CisJCVF1ZXVlUG9zaXRpb24gYWR2aXNvcnlQb3MgPSBRVUVVRV9CQUNL RU5EX0FEVklTT1JZX1BPUyhNeVByb2NOdW1iZXIpOworCisJCWlmICghUVVFVUVfUE9TX0VR VUFMKGFkdmlzb3J5UG9zLCBwb3MpICYmCisJCQlRVUVVRV9QT1NfUFJFQ0VERVMocG9zLCBh ZHZpc29yeVBvcykpCisJCXsKKwkJCXBvcyA9IGFkdmlzb3J5UG9zOworCQkJUVVFVUVfQkFD S0VORF9QT1MoTXlQcm9jTnVtYmVyKSA9IHBvczsKKwkJfQorCX0KKwogCUxXTG9ja1JlbGVh c2UoTm90aWZ5UXVldWVMb2NrKTsKIAogCWlmIChRVUVVRV9QT1NfRVFVQUwocG9zLCBoZWFk KSkK --b0b77e07619846f8a224da5c4226b641 Content-Disposition: attachment; filename*0="0002-optimize_listen_notify-v19-alt3.txt" Content-Type: text/plain; name="0002-optimize_listen_notify-v19-alt3.txt" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9hc3luYy5jCmluZGV4IDkwYTUzMGNmYzYxLi5lMjAxZGViNWU1NCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYworKysgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9hc3luYy5jCkBAIC03MCwxNCArNzAsMTQgQEAKICAqCSAgQ29tbWl0VHJh bnNhY3Rpb24oKSB3aGljaCB3aWxsIHRoZW4gZG8gdGhlIGFjdHVhbCB0cmFuc2FjdGlvbiBj b21taXQuCiAgKgogICoJICBBZnRlciBjb21taXQgd2UgYXJlIGNhbGxlZCBhbm90aGVyIHRp bWUgKEF0Q29tbWl0X05vdGlmeSgpKS4gSGVyZSB3ZQotICoJICBtYWtlIGFueSBhY3R1YWwg dXBkYXRlcyB0byB0aGUgbG9jYWwgbGlzdGVuIHN0YXRlIChsaXN0ZW5DaGFubmVscykgYW5k Ci0gKgkgIHNoYXJlZCBjaGFubmVsIGhhc2ggdGFibGUgKGNoYW5uZWxIYXNoKS4gIFRoZW4g d2Ugc2lnbmFsIGFueSBiYWNrZW5kcwotICoJICB0aGF0IG1heSBiZSBpbnRlcmVzdGVkIGlu IG91ciBtZXNzYWdlcyAoaW5jbHVkaW5nIG91ciBvd24gYmFja2VuZCwKLSAqCSAgaWYgbGlz dGVuaW5nKS4gIFRoaXMgaXMgZG9uZSBieSBTaWduYWxCYWNrZW5kcygpLCB3aGljaCBjb25z dWx0cyB0aGUKLSAqCSAgc2hhcmVkIGNoYW5uZWwgaGFzaCB0YWJsZSB0byBpZGVudGlmeSBs aXN0ZW5lcnMgZm9yIHRoZSBjaGFubmVscyB0aGF0Ci0gKgkgIGhhdmUgcGVuZGluZyBub3Rp ZmljYXRpb25zIGluIHRoZSBjdXJyZW50IGRhdGFiYXNlLiAgRWFjaCBzZWxlY3RlZAotICoJ ICBiYWNrZW5kIGlzIG1hcmtlZCBhcyBoYXZpbmcgYSB3YWtldXAgcGVuZGluZyB0byBhdm9p ZCBkdXBsaWNhdGUgc2lnbmFscywKLSAqCSAgYW5kIGEgUFJPQ1NJR19OT1RJRllfSU5URVJS VVBUIHNpZ25hbCBpcyBzZW50IHRvIGl0LgorICoJICBtYWtlIGFueSBhY3R1YWwgdXBkYXRl cyB0byB0aGUgZWZmZWN0aXZlIGxpc3RlbiBzdGF0ZSAoY2hhbm5lbEhhc2gpLgorICoJICBU aGVuIHdlIHNpZ25hbCBhbnkgYmFja2VuZHMgdGhhdCBtYXkgYmUgaW50ZXJlc3RlZCBpbiBv dXIgbWVzc2FnZXMKKyAqCSAgKGluY2x1ZGluZyBvdXIgb3duIGJhY2tlbmQsIGlmIGxpc3Rl bmluZykuICBUaGlzIGlzIGRvbmUgYnkKKyAqCSAgU2lnbmFsQmFja2VuZHMoKSwgd2hpY2gg Y29uc3VsdHMgdGhlIHNoYXJlZCBjaGFubmVsIGhhc2ggdGFibGUgdG8KKyAqCSAgaWRlbnRp ZnkgbGlzdGVuZXJzIGZvciB0aGUgY2hhbm5lbHMgdGhhdCBoYXZlIHBlbmRpbmcgbm90aWZp Y2F0aW9ucworICoJICBpbiB0aGUgY3VycmVudCBkYXRhYmFzZS4gIEVhY2ggc2VsZWN0ZWQg YmFja2VuZCBpcyBtYXJrZWQgYXMgaGF2aW5nIGEKKyAqCSAgd2FrZXVwIHBlbmRpbmcgdG8g YXZvaWQgZHVwbGljYXRlIHNpZ25hbHMsIGFuZCBhIFBST0NTSUdfTk9USUZZX0lOVEVSUlVQ VAorICoJICBzaWduYWwgaXMgc2VudCB0byBpdC4KICAqCiAgKgkgIFdoZW4gd3JpdGluZyBu b3RpZmljYXRpb25zLCBQcmVDb21taXRfTm90aWZ5KCkgcmVjb3JkcyB0aGUgcXVldWUgaGVh ZAogICoJICBwb3NpdGlvbiBib3RoIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHdyaXRlLiAgQmVj YXVzZSBhbGwgd3JpdGVycyBzZXJpYWxpemUKQEAgLTIyODIsNiArMjI4Miw3IEBAIGFzeW5j UXVldWVSZWFkQWxsTm90aWZpY2F0aW9ucyh2b2lkKQogCXZvbGF0aWxlIFF1ZXVlUG9zaXRp b24gcG9zOwogCVF1ZXVlUG9zaXRpb24gaGVhZDsKIAlTbmFwc2hvdAlzbmFwc2hvdDsKKwli b29sCQlyZWFjaGVkU3RvcDsKIAogCS8qIHBhZ2VfYnVmZmVyIG11c3QgYmUgYWRlcXVhdGVs eSBhbGlnbmVkLCBzbyB1c2UgYSB1bmlvbiAqLwogCXVuaW9uCkBAIC0yMzUwLDc3ICsyMzUx LDgzIEBAIGFzeW5jUXVldWVSZWFkQWxsTm90aWZpY2F0aW9ucyh2b2lkKQogCSAqIEl0IGlz IHBvc3NpYmxlIHRoYXQgd2UgZmFpbCB3aGlsZSB0cnlpbmcgdG8gc2VuZCBhIG1lc3NhZ2Ug dG8gb3VyCiAJICogZnJvbnRlbmQgKGZvciBleGFtcGxlLCBiZWNhdXNlIG9mIGVuY29kaW5n IGNvbnZlcnNpb24gZmFpbHVyZSkuICBJZgogCSAqIHRoYXQgaGFwcGVucyBpdCBpcyBjcml0 aWNhbCB0aGF0IHdlIG5vdCB0cnkgdG8gc2VuZCB0aGUgc2FtZSBtZXNzYWdlCi0JICogb3Zl ciBhbmQgb3ZlciBhZ2Fpbi4gIFRoZXJlZm9yZSwgd2UgcGxhY2UgYSBQR19UUlkgYmxvY2sg aGVyZSB0aGF0IHdpbGwKLQkgKiBmb3JjaWJseSBhZHZhbmNlIG91ciBxdWV1ZSBwb3NpdGlv biBiZWZvcmUgd2UgbG9zZSBjb250cm9sIHRvIGFuIGVycm9yLgotCSAqIChXZSBjb3VsZCBh bHRlcm5hdGl2ZWx5IHJldGFrZSBOb3RpZnlRdWV1ZUxvY2sgYW5kIG1vdmUgdGhlIHBvc2l0 aW9uCi0JICogYmVmb3JlIGhhbmRsaW5nIGVhY2ggaW5kaXZpZHVhbCBtZXNzYWdlLCBidXQg dGhhdCBzZWVtcyBsaWtlIHRvbyBtdWNoCi0JICogbG9jayB0cmFmZmljLikKKwkgKiBvdmVy IGFuZCBvdmVyIGFnYWluLiAgVGhlcmVmb3JlLCB3ZSBtdXN0IGFkdmFuY2Ugb3VyIHF1ZXVl IHBvc2l0aW9uCisJICogcmVndWxhcmx5IGFzIHdlIHByb2Nlc3MgbWVzc2FnZXMuCisJICoK KwkgKiBXZSBtdXN0IGFsc28gYmUgY2FyZWZ1bCBhYm91dCBjb25jdXJyZW5jeTogU2lnbmFs QmFja2VuZHMoKSBjYW4KKwkgKiBkaXJlY3RseSBhZHZhbmNlIG91ciBwb3NpdGlvbiB3aGls ZSB3ZSdyZSByZWFkaW5nLiAgVG8gcHJldmVudAorCSAqIG92ZXJ3cml0aW5nIHN1Y2ggYW4g YWR2YW5jZW1lbnQgd2l0aCBhIHN0YWxlIHZhbHVlLCB3ZSB1cGRhdGUgb3VyCisJICogcG9z aXRpb24gaW4gc2hhcmVkIG1lbW9yeSBhZnRlciBwcm9jZXNzaW5nIG1lc3NhZ2VzIGZyb20g ZWFjaCBwYWdlLAorCSAqIHdoaWxlIGhvbGRpbmcgTm90aWZ5UXVldWVMb2NrLiAgU2hhcmVk IGxvY2sgaXMgc3VmZmljaWVudCBzaW5jZSB3ZSdyZQorCSAqIG9ubHkgdXBkYXRpbmcgb3Vy IG93biBwb3NpdGlvbi4KIAkgKi8KLQlQR19UUlkoKTsKKwlkbwogCXsKLQkJYm9vbAkJcmVh Y2hlZFN0b3A7CisJCWludDY0CQljdXJwYWdlID0gUVVFVUVfUE9TX1BBR0UocG9zKTsKKwkJ aW50CQkJY3Vyb2Zmc2V0ID0gUVVFVUVfUE9TX09GRlNFVChwb3MpOworCQlpbnQJCQlzbG90 bm87CisJCWludAkJCWNvcHlzaXplOwogCi0JCWRvCisJCS8qCisJCSAqIFdlIGNvcHkgdGhl IGRhdGEgZnJvbSBTTFJVIGludG8gYSBsb2NhbCBidWZmZXIsIHNvIGFzIHRvIGF2b2lkCisJ CSAqIGhvbGRpbmcgdGhlIFNMUlUgbG9jayB3aGlsZSB3ZSBhcmUgZXhhbWluaW5nIHRoZSBl bnRyaWVzIGFuZAorCQkgKiBwb3NzaWJseSB0cmFuc21pdHRpbmcgdGhlbSB0byBvdXIgZnJv bnRlbmQuICBDb3B5IG9ubHkgdGhlIHBhcnQKKwkJICogb2YgdGhlIHBhZ2Ugd2Ugd2lsbCBh Y3R1YWxseSBpbnNwZWN0LgorCQkgKi8KKwkJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2Vf UmVhZE9ubHkoTm90aWZ5Q3RsLCBjdXJwYWdlLAorCQkJCQkJCQkJCQlJbnZhbGlkVHJhbnNh Y3Rpb25JZCk7CisJCWlmIChjdXJwYWdlID09IFFVRVVFX1BPU19QQUdFKGhlYWQpKQogCQl7 Ci0JCQlpbnQ2NAkJY3VycGFnZSA9IFFVRVVFX1BPU19QQUdFKHBvcyk7Ci0JCQlpbnQJCQlj dXJvZmZzZXQgPSBRVUVVRV9QT1NfT0ZGU0VUKHBvcyk7Ci0JCQlpbnQJCQlzbG90bm87Ci0J CQlpbnQJCQljb3B5c2l6ZTsKKwkJCS8qIHdlIG9ubHkgd2FudCB0byByZWFkIGFzIGZhciBh cyBoZWFkICovCisJCQljb3B5c2l6ZSA9IFFVRVVFX1BPU19PRkZTRVQoaGVhZCkgLSBjdXJv ZmZzZXQ7CisJCQlpZiAoY29weXNpemUgPCAwKQorCQkJCWNvcHlzaXplID0gMDsJLyoganVz dCBmb3Igc2FmZXR5ICovCisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBmZXRjaCBhbGwgdGhl IHJlc3Qgb2YgdGhlIHBhZ2UgKi8KKwkJCWNvcHlzaXplID0gUVVFVUVfUEFHRVNJWkUgLSBj dXJvZmZzZXQ7CisJCX0KKwkJbWVtY3B5KHBhZ2VfYnVmZmVyLmJ1ZiArIGN1cm9mZnNldCwK KwkJCSAgIE5vdGlmeUN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dICsgY3Vyb2Zm c2V0LAorCQkJICAgY29weXNpemUpOworCQkvKiBSZWxlYXNlIGxvY2sgdGhhdCB3ZSBnb3Qg ZnJvbSBTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seSgpICovCisJCUxXTG9ja1JlbGVhc2Uo U2ltcGxlTHJ1R2V0QmFua0xvY2soTm90aWZ5Q3RsLCBjdXJwYWdlKSk7CiAKLQkJCS8qCi0J CQkgKiBXZSBjb3B5IHRoZSBkYXRhIGZyb20gU0xSVSBpbnRvIGEgbG9jYWwgYnVmZmVyLCBz byBhcyB0byBhdm9pZAotCQkJICogaG9sZGluZyB0aGUgU0xSVSBsb2NrIHdoaWxlIHdlIGFy ZSBleGFtaW5pbmcgdGhlIGVudHJpZXMgYW5kCi0JCQkgKiBwb3NzaWJseSB0cmFuc21pdHRp bmcgdGhlbSB0byBvdXIgZnJvbnRlbmQuICBDb3B5IG9ubHkgdGhlIHBhcnQKLQkJCSAqIG9m IHRoZSBwYWdlIHdlIHdpbGwgYWN0dWFsbHkgaW5zcGVjdC4KLQkJCSAqLwotCQkJc2xvdG5v ID0gU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkoTm90aWZ5Q3RsLCBjdXJwYWdlLAotCQkJ CQkJCQkJCQkJSW52YWxpZFRyYW5zYWN0aW9uSWQpOwotCQkJaWYgKGN1cnBhZ2UgPT0gUVVF VUVfUE9TX1BBR0UoaGVhZCkpCi0JCQl7Ci0JCQkJLyogd2Ugb25seSB3YW50IHRvIHJlYWQg YXMgZmFyIGFzIGhlYWQgKi8KLQkJCQljb3B5c2l6ZSA9IFFVRVVFX1BPU19PRkZTRVQoaGVh ZCkgLSBjdXJvZmZzZXQ7Ci0JCQkJaWYgKGNvcHlzaXplIDwgMCkKLQkJCQkJY29weXNpemUg PSAwOwkvKiBqdXN0IGZvciBzYWZldHkgKi8KLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQkv KiBmZXRjaCBhbGwgdGhlIHJlc3Qgb2YgdGhlIHBhZ2UgKi8KLQkJCQljb3B5c2l6ZSA9IFFV RVVFX1BBR0VTSVpFIC0gY3Vyb2Zmc2V0OwotCQkJfQotCQkJbWVtY3B5KHBhZ2VfYnVmZmVy LmJ1ZiArIGN1cm9mZnNldCwKLQkJCQkgICBOb3RpZnlDdGwtPnNoYXJlZC0+cGFnZV9idWZm ZXJbc2xvdG5vXSArIGN1cm9mZnNldCwKLQkJCQkgICBjb3B5c2l6ZSk7Ci0JCQkvKiBSZWxl YXNlIGxvY2sgdGhhdCB3ZSBnb3QgZnJvbSBTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seSgp ICovCi0JCQlMV0xvY2tSZWxlYXNlKFNpbXBsZUxydUdldEJhbmtMb2NrKE5vdGlmeUN0bCwg Y3VycGFnZSkpOworCQkvKgorCQkgKiBQcm9jZXNzIG1lc3NhZ2VzIHVwIHRvIHRoZSBzdG9w IHBvc2l0aW9uLCBlbmQgb2YgcGFnZSwgb3IgYW4KKwkJICogdW5jb21taXR0ZWQgbWVzc2Fn ZS4KKwkJICoKKwkJICogT3VyIHN0b3AgcG9zaXRpb24gaXMgd2hhdCB3ZSBmb3VuZCB0byBi ZSB0aGUgaGVhZCdzIHBvc2l0aW9uCisJCSAqIHdoZW4gd2UgZW50ZXJlZCB0aGlzIGZ1bmN0 aW9uLiBJdCBtaWdodCBoYXZlIGNoYW5nZWQgYWxyZWFkeS4KKwkJICogQnV0IGlmIGl0IGhh cywgd2Ugd2lsbCByZWNlaXZlIChvciBoYXZlIGFscmVhZHkgcmVjZWl2ZWQgYW5kCisJCSAq IHF1ZXVlZCkgYW5vdGhlciBzaWduYWwgYW5kIGNvbWUgaGVyZSBhZ2Fpbi4KKwkJICoKKwkJ ICogV2UgYXJlIG5vdCBob2xkaW5nIE5vdGlmeVF1ZXVlTG9jayBoZXJlISBUaGUgcXVldWUg Y2FuIG9ubHkKKwkJICogZXh0ZW5kIGJleW9uZCB0aGUgaGVhZCBwb2ludGVyIChzZWUgYWJv dmUpLiAgV2UgdXBkYXRlIG91cgorCQkgKiBiYWNrZW5kJ3MgcG9zaXRpb24gYWZ0ZXIgcHJv Y2Vzc2luZyBtZXNzYWdlcyBmcm9tIGVhY2ggcGFnZSB0bworCQkgKiBlbnN1cmUgd2UgZG9u J3QgcmVwcm9jZXNzIG1lc3NhZ2VzIGlmIHdlIGZhaWwgcGFydHdheSB0aHJvdWdoLAorCQkg KiBhbmQgdG8gYXZvaWQgb3ZlcndyaXRpbmcgYW55IGRpcmVjdCBhZHZhbmNlbWVudCB0aGF0 CisJCSAqIFNpZ25hbEJhY2tlbmRzKCkgbWlnaHQgcGVyZm9ybSBjb25jdXJyZW50bHkuCisJ CSAqLworCQlyZWFjaGVkU3RvcCA9IGFzeW5jUXVldWVQcm9jZXNzUGFnZUVudHJpZXMoJnBv cywgaGVhZCwKKwkJCQkJCQkJCQkJCSAgIHBhZ2VfYnVmZmVyLmJ1ZiwKKwkJCQkJCQkJCQkJ CSAgIHNuYXBzaG90KTsKIAotCQkJLyoKLQkJCSAqIFByb2Nlc3MgbWVzc2FnZXMgdXAgdG8g dGhlIHN0b3AgcG9zaXRpb24sIGVuZCBvZiBwYWdlLCBvciBhbgotCQkJICogdW5jb21taXR0 ZWQgbWVzc2FnZS4KLQkJCSAqCi0JCQkgKiBPdXIgc3RvcCBwb3NpdGlvbiBpcyB3aGF0IHdl IGZvdW5kIHRvIGJlIHRoZSBoZWFkJ3MgcG9zaXRpb24KLQkJCSAqIHdoZW4gd2UgZW50ZXJl ZCB0aGlzIGZ1bmN0aW9uLiBJdCBtaWdodCBoYXZlIGNoYW5nZWQgYWxyZWFkeS4KLQkJCSAq IEJ1dCBpZiBpdCBoYXMsIHdlIHdpbGwgcmVjZWl2ZSAob3IgaGF2ZSBhbHJlYWR5IHJlY2Vp dmVkIGFuZAotCQkJICogcXVldWVkKSBhbm90aGVyIHNpZ25hbCBhbmQgY29tZSBoZXJlIGFn YWluLgotCQkJICoKLQkJCSAqIFdlIGFyZSBub3QgaG9sZGluZyBOb3RpZnlRdWV1ZUxvY2sg aGVyZSEgVGhlIHF1ZXVlIGNhbiBvbmx5Ci0JCQkgKiBleHRlbmQgYmV5b25kIHRoZSBoZWFk IHBvaW50ZXIgKHNlZSBhYm92ZSkgYW5kIHdlIGxlYXZlIG91cgotCQkJICogYmFja2VuZCdz IHBvaW50ZXIgd2hlcmUgaXQgaXMgc28gbm9ib2R5IHdpbGwgdHJ1bmNhdGUgb3IKLQkJCSAq IHJld3JpdGUgcGFnZXMgdW5kZXIgdXMuIEVzcGVjaWFsbHkgd2UgZG9uJ3Qgd2FudCB0byBo b2xkIGEgbG9jawotCQkJICogd2hpbGUgc2VuZGluZyB0aGUgbm90aWZpY2F0aW9ucyB0byB0 aGUgZnJvbnRlbmQuCi0JCQkgKi8KLQkJCXJlYWNoZWRTdG9wID0gYXN5bmNRdWV1ZVByb2Nl c3NQYWdlRW50cmllcygmcG9zLCBoZWFkLAotCQkJCQkJCQkJCQkJCSAgIHBhZ2VfYnVmZmVy LmJ1ZiwKLQkJCQkJCQkJCQkJCQkgICBzbmFwc2hvdCk7Ci0JCX0gd2hpbGUgKCFyZWFjaGVk U3RvcCk7Ci0JfQotCVBHX0ZJTkFMTFkoKTsKLQl7Ci0JCS8qIFVwZGF0ZSBzaGFyZWQgc3Rh dGUgKi8KKwkJLyoKKwkJICogVXBkYXRlIG91ciBwb3NpdGlvbiBpbiBzaGFyZWQgbWVtb3J5 LiAgVGhlICdwb3MnIHZhcmlhYmxlIG5vdworCQkgKiBob2xkcyBvdXIgbmV3IHBvc2l0aW9u IChhZHZhbmNlZCBwYXN0IGFsbCBtZXNzYWdlcyB3ZSBqdXN0CisJCSAqIHByb2Nlc3NlZCku ICBUaGlzIGVuc3VyZXMgdGhhdCBpZiB3ZSBmYWlsIHdoaWxlIHByb2Nlc3NpbmcKKwkJICog bWVzc2FnZXMgZnJvbSB0aGUgbmV4dCBwYWdlLCB3ZSB3b24ndCByZXByb2Nlc3MgdGhlIG9u ZXMgd2UKKwkJICoganVzdCBoYW5kbGVkLiAgSXQgYWxzbyBwcmV2ZW50cyB1cyBmcm9tIG92 ZXJ3cml0aW5nIGFueSBkaXJlY3QKKwkJICogYWR2YW5jZW1lbnQgdGhhdCBhbm90aGVyIGJh Y2tlbmQgbWlnaHQgaGF2ZSBkb25lIHdoaWxlIHdlIHdlcmUKKwkJICogcHJvY2Vzc2luZyBt ZXNzYWdlcy4KKwkJICovCiAJCUxXTG9ja0FjcXVpcmUoTm90aWZ5UXVldWVMb2NrLCBMV19T SEFSRUQpOwogCQlRVUVVRV9CQUNLRU5EX1BPUyhNeVByb2NOdW1iZXIpID0gcG9zOwogCQlM V0xvY2tSZWxlYXNlKE5vdGlmeVF1ZXVlTG9jayk7Ci0JfQotCVBHX0VORF9UUlkoKTsKKwor CX0gd2hpbGUgKCFyZWFjaGVkU3RvcCk7CiAKIAkvKiBEb25lIHdpdGggc25hcHNob3QgKi8K IAlVbnJlZ2lzdGVyU25hcHNob3Qoc25hcHNob3QpOwo= --b0b77e07619846f8a224da5c4226b641 Content-Disposition: attachment; filename*0="0002-optimize_listen_notify-v19-alt2.txt" Content-Type: text/plain; name="0002-optimize_listen_notify-v19-alt2.txt" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9hc3luYy5jCmluZGV4IDkwYTUzMGNmYzYxLi43NTE0MDBiODMxNSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYworKysgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9hc3luYy5jCkBAIC0yODUsNyArMjg1LDggQEAgdHlwZWRlZiBzdHJ1Y3Qg UXVldWVCYWNrZW5kU3RhdHVzCiAJaW50MzIJCXBpZDsJCQkvKiBlaXRoZXIgYSBQSUQgb3Ig SW52YWxpZFBpZCAqLwogCU9pZAkJCWRib2lkOwkJCS8qIGJhY2tlbmQncyBkYXRhYmFzZSBP SUQsIG9yIEludmFsaWRPaWQgKi8KIAlQcm9jTnVtYmVyCW5leHRMaXN0ZW5lcjsJLyogaWQg b2YgbmV4dCBsaXN0ZW5lciwgb3IgSU5WQUxJRF9QUk9DX05VTUJFUiAqLwotCVF1ZXVlUG9z aXRpb24gcG9zOwkJCS8qIGJhY2tlbmQgaGFzIHJlYWQgcXVldWUgdXAgdG8gaGVyZSAqLwor CVF1ZXVlUG9zaXRpb24gcG9zOwkJCS8qIG5leHQgcG9zaXRpb24gdG8gcmVhZCBmcm9tICov CisJUXVldWVQb3NpdGlvbiBkb25lUG9zOwkJLyogYmFja2VuZCBoYXMgZGVmaW5pdGl2ZWx5 IHByb2Nlc3NlZCB1cCB0byBoZXJlICovCiAJYm9vbAkJd2FrZXVwUGVuZGluZzsJLyogc2ln bmFsIHNlbnQgYnV0IG5vdCB5ZXQgcHJvY2Vzc2VkICovCiB9IFF1ZXVlQmFja2VuZFN0YXR1 czsKIApAQCAtMzQ3LDYgKzM0OCw3IEBAIHN0YXRpYyBkc2hhc2hfdGFibGUgKmNoYW5uZWxI YXNoID0gTlVMTDsKICNkZWZpbmUgUVVFVUVfQkFDS0VORF9EQk9JRChpKQkJKGFzeW5jUXVl dWVDb250cm9sLT5iYWNrZW5kW2ldLmRib2lkKQogI2RlZmluZSBRVUVVRV9ORVhUX0xJU1RF TkVSKGkpCQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmJhY2tlbmRbaV0ubmV4dExpc3RlbmVyKQog I2RlZmluZSBRVUVVRV9CQUNLRU5EX1BPUyhpKQkJKGFzeW5jUXVldWVDb250cm9sLT5iYWNr ZW5kW2ldLnBvcykKKyNkZWZpbmUgUVVFVUVfQkFDS0VORF9ET05FUE9TKGkpCShhc3luY1F1 ZXVlQ29udHJvbC0+YmFja2VuZFtpXS5kb25lUG9zKQogI2RlZmluZSBRVUVVRV9CQUNLRU5E X1dBS0VVUF9QRU5ESU5HKGkpCShhc3luY1F1ZXVlQ29udHJvbC0+YmFja2VuZFtpXS53YWtl dXBQZW5kaW5nKQogCiAvKgpAQCAtNjY4LDYgKzY3MCw3IEBAIEFzeW5jU2htZW1Jbml0KHZv aWQpCiAJCQlRVUVVRV9CQUNLRU5EX0RCT0lEKGkpID0gSW52YWxpZE9pZDsKIAkJCVFVRVVF X05FWFRfTElTVEVORVIoaSkgPSBJTlZBTElEX1BST0NfTlVNQkVSOwogCQkJU0VUX1FVRVVF X1BPUyhRVUVVRV9CQUNLRU5EX1BPUyhpKSwgMCwgMCk7CisJCQlTRVRfUVVFVUVfUE9TKFFV RVVFX0JBQ0tFTkRfRE9ORVBPUyhpKSwgMCwgMCk7CiAJCQlRVUVVRV9CQUNLRU5EX1dBS0VV UF9QRU5ESU5HKGkpID0gZmFsc2U7CiAJCX0KIAl9CkBAIC0xMjkwLDYgKzEyOTMsNyBAQCBF eGVjX0xpc3RlblByZUNvbW1pdCh2b2lkKQogCQkJcHJldkxpc3RlbmVyID0gaTsKIAl9CiAJ UVVFVUVfQkFDS0VORF9QT1MoTXlQcm9jTnVtYmVyKSA9IG1heDsKKwlRVUVVRV9CQUNLRU5E X0RPTkVQT1MoTXlQcm9jTnVtYmVyKSA9IG1heDsKIAlRVUVVRV9CQUNLRU5EX1BJRChNeVBy b2NOdW1iZXIpID0gTXlQcm9jUGlkOwogCVFVRVVFX0JBQ0tFTkRfREJPSUQoTXlQcm9jTnVt YmVyKSA9IE15RGF0YWJhc2VJZDsKIAkvKiBJbnNlcnQgYmFja2VuZCBpbnRvIGxpc3Qgb2Yg bGlzdGVuZXJzIGF0IGNvcnJlY3QgcG9zaXRpb24gKi8KQEAgLTI0MTUsOSArMjQxOSwxOSBA QCBhc3luY1F1ZXVlUmVhZEFsbE5vdGlmaWNhdGlvbnModm9pZCkKIAl9CiAJUEdfRklOQUxM WSgpOwogCXsKLQkJLyogVXBkYXRlIHNoYXJlZCBzdGF0ZSAqLworCQkvKgorCQkgKiBVcGRh dGUgc2hhcmVkIHN0YXRlLgorCQkgKgorCQkgKiBXZSB1cGRhdGUgZG9uZVBvcyB0byB3aGF0 IHdlIGFjdHVhbGx5IHJlYWQgKHRoZSBsb2NhbCBwb3MgdmFyaWFibGUpLAorCQkgKiBhcyB0 aGlzIGlzIHVzZWQgZm9yIHRydW5jYXRpb24gc2FmZXR5LiAgRm9yIHRoZSByZWFkIHBvc2l0 aW9uIChwb3MpLAorCQkgKiB3ZSB1c2UgdGhlIG1heGltdW0gb2Ygb3VyIGxvY2FsIHBvc2l0 aW9uIGFuZCB0aGUgY3VycmVudCBzaGFyZWQKKwkJICogcG9zaXRpb24sIGluIGNhc2UgYW5v dGhlciBiYWNrZW5kIHVzZWQgZGlyZWN0IGFkdmFuY2VtZW50IHRvIHNraXAgdXMKKwkJICog YWhlYWQgd2hpbGUgd2Ugd2VyZSByZWFkaW5nLiAgVGhpcyBwcmV2ZW50cyB1cyBmcm9tIGdv aW5nIGJhY2t3YXJkcworCQkgKiBhbmQgcG90ZW50aWFsbHkgcG9pbnRpbmcgdG8gYSB0cnVu Y2F0ZWQgcGFnZS4KKwkJICovCiAJCUxXTG9ja0FjcXVpcmUoTm90aWZ5UXVldWVMb2NrLCBM V19TSEFSRUQpOwotCQlRVUVVRV9CQUNLRU5EX1BPUyhNeVByb2NOdW1iZXIpID0gcG9zOwor CQlRVUVVRV9CQUNLRU5EX0RPTkVQT1MoTXlQcm9jTnVtYmVyKSA9IHBvczsKKwkJUVVFVUVf QkFDS0VORF9QT1MoTXlQcm9jTnVtYmVyKSA9IFFVRVVFX1BPU19NQVgocG9zLCBRVUVVRV9C QUNLRU5EX1BPUyhNeVByb2NOdW1iZXIpKTsKIAkJTFdMb2NrUmVsZWFzZShOb3RpZnlRdWV1 ZUxvY2spOwogCX0KIAlQR19FTkRfVFJZKCk7CkBAIC0yNTY3LDcgKzI1ODEsMTMgQEAgYXN5 bmNRdWV1ZUFkdmFuY2VUYWlsKHZvaWQpCiAJZm9yIChQcm9jTnVtYmVyIGkgPSBRVUVVRV9G SVJTVF9MSVNURU5FUjsgaSAhPSBJTlZBTElEX1BST0NfTlVNQkVSOyBpID0gUVVFVUVfTkVY VF9MSVNURU5FUihpKSkKIAl7CiAJCUFzc2VydChRVUVVRV9CQUNLRU5EX1BJRChpKSAhPSBJ bnZhbGlkUGlkKTsKLQkJbWluID0gUVVFVUVfUE9TX01JTihtaW4sIFFVRVVFX0JBQ0tFTkRf UE9TKGkpKTsKKwkJLyoKKwkJICogVXNlIGRvbmVQb3MgcmF0aGVyIHRoYW4gcG9zIGZvciB0 cnVuY2F0aW9uIHNhZmV0eS4gIFRoZSBkb25lUG9zCisJCSAqIGZpZWxkIHJlcHJlc2VudHMg d2hhdCB0aGUgYmFja2VuZCBoYXMgZGVmaW5pdGl2ZWx5IHByb2Nlc3NlZCwgd2hpbGUKKwkJ ICogcG9zIGNhbiBiZSBhZHZhbmNlZCBieSBvdGhlciBiYWNrZW5kcyB2aWEgZGlyZWN0IGFk dmFuY2VtZW50LiAgVGhpcworCQkgKiBwcmV2ZW50cyB0cnVuY2F0aW5nIHBhZ2VzIHRoYXQg YSBiYWNrZW5kIGlzIHN0aWxsIHJlYWRpbmcgZnJvbS4KKwkJICovCisJCW1pbiA9IFFVRVVF X1BPU19NSU4obWluLCBRVUVVRV9CQUNLRU5EX0RPTkVQT1MoaSkpOwogCX0KIAlRVUVVRV9U QUlMID0gbWluOwogCW9sZHRhaWxwYWdlID0gUVVFVUVfU1RPUF9QQUdFOwo= --b0b77e07619846f8a224da5c4226b641--