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 1vHkV3-00HMML-KI for pgsql-hackers@arkaria.postgresql.org; Sat, 08 Nov 2025 15:05:10 +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 1vHkV2-0026jA-3Q for pgsql-hackers@arkaria.postgresql.org; Sat, 08 Nov 2025 15:05:08 +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 1vHkV0-0026j1-Ke for pgsql-hackers@lists.postgresql.org; Sat, 08 Nov 2025 15:05:07 +0000 Received: from fhigh-a2-smtp.messagingengine.com ([103.168.172.153]) by makus.postgresql.org with smtp (Exim 4.96) (envelope-from ) id 1vHkUy-0064wx-1V for pgsql-hackers@postgresql.org; Sat, 08 Nov 2025 15:05:05 +0000 Received: from phl-compute-05.internal (phl-compute-05.internal [10.202.2.45]) by mailfhigh.phl.internal (Postfix) with ESMTP id 5DED91400171 for ; Sat, 8 Nov 2025 10:05:03 -0500 (EST) Received: from phl-imap-16 ([10.202.2.88]) by phl-compute-05.internal (MEProxy); Sat, 08 Nov 2025 10:05:03 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=compiler.org; h= 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=fm3; t=1762614303; x=1762700703; bh=GZClQDmaGB Gk17tUgnNUJPf3xZdskH3XEYKgpnO+F2I=; b=RPB2WFpA4g+ui+J7MQQAxQSFQn SEa+i/if+91e9nnrA3rT0Zv5AtMYhPSFv05vdkP66MNKBRATghdBtH3j54WXtE9X uY2N6fWcq4FHo9BPt2t5X3c6jWkIGv0huCfl08jUEhyXQq0THmESit4fhpWo5Zjw KQjB5D0oLhSPis7Bhd333NwuwyqY6GnlKeUxCnq0iqIrUwpppgn0VB2aR4mas1gc BHnBkTRt8LBcpgq314SBUXxdcabDObHuAXJskgXZVpbLT2PhEtzTdK29z6qGHbgl fPVcAnsrscpxPSzOypzGo2g/KuaIq59Lgvqs0tgoC402g/cPBVadIrw6xW1g== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=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=fm3; t= 1762614303; x=1762700703; bh=GZClQDmaGBGk17tUgnNUJPf3xZdskH3XEYK gpnO+F2I=; b=h9XWi0bJUFU80jXD/aivGv91q6LG9jru2/0nI/+y/htCzhYGUOi 8/xGYN4cH9vuKZpgFFok1DlGQGgo8E7y2zBJbxAJej1EBBuHWGWyVWKVu1QEJD+3 9iTaYKR7wIhU1lSNIDgz8iFu/nXbO3CDbtWnjPGvdrsc+u/1HuWTOV4W3dAiMXFv IS9Ns8SJSXi/JRQmJnO4LP246YiiIySeAJP2xI0pqyKi2gaQu89kWJ4sZHlcJob+ 6RHDRH9XF5HXKTgNC4Q7Jl+Tda0W+m87uA+V76sKCSC7eorx5ckViLvR5l7A4O1D tOU2z9CM5Y9kqua8nZg6z5GpR+z9+KW6qjA== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggdduledvkeehucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucenucfjughrpefoggffhffvkfgjfhfutgesmhdtreerre dttdenucfhrhhomhepfdflohgvlhculfgrtghosghsohhnfdcuoehjohgvlhestghomhhp ihhlvghrrdhorhhgqeenucggtffrrghtthgvrhhnpeefheeutdegvdfgueeuueekieeuff ehkeeuleffveekkeegkeevhfekfffghfevleenucevlhhushhtvghrufhiiigvpedtnecu rfgrrhgrmhepmhgrihhlfhhrohhmpehjohgvlhestghomhhpihhlvghrrdhorhhgpdhnsg gprhgtphhtthhopedupdhmohguvgepshhmthhpohhuthdprhgtphhtthhopehpghhsqhhl qdhhrggtkhgvrhhssehpohhsthhgrhgvshhqlhdrohhrgh X-ME-Proxy: Feedback-ID: ic6394509:Fastmail Received: by mailuser.phl.internal (Postfix, from userid 501) id D20402CC0054; Sat, 8 Nov 2025 10:05:02 -0500 (EST) X-Mailer: MessagingEngine.com Webmail Interface MIME-Version: 1.0 X-ThreadId: AE1r89ybsZ1g Date: Sat, 08 Nov 2025 16:04:42 +0100 From: "Joel Jacobson" To: pgsql-hackers Message-Id: <26d4dd6a-cfc5-4efc-9704-9cd3216ed712@app.fastmail.com> In-Reply-To: <294e1641-d658-4d43-8671-60e8ff860532@app.fastmail.com> 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> <14865EB6-0BF4-462B-9072-10BDAC10C052@gmail.com> <0BCA1C2D-B92C-459E-B1A6-6D06BA4C62CF@gmail.com> <55d24cbb-e9ef-491f-a99b-b3dbd7cecdf9@app.fastmail.com> <38574cad-e90d-47b7-a015-753bb6bbc360@app.fastmail.com> <66631FB7-5BEA-4ED5-A694-9AD8B9CCFEE8@gmail.com> <4b7b49a5-5e1a-44a8-93e0-60457d15cb1d@app.fastmail.com> <82DEA2B6-6FC5-4A79-BDE3-1FD72F104A6E@gmail.com> <38de1036-d8cf-420c-b845-edb5a946b191@app.fastmail.com> <87E40BF8-8877-4DBD-9040-99AF8A4E6358@gmail.com> <7556f0d4-03fd-451a-bd34-5f62b424319a@app.fastmail.com> <290910DE-9A03-4AE6-B348-073D5DA96ACC@gmail.com> <4B243750-12BE-4C16-A769-A803268F40E3@gmail.com> <4605CAD6-69D5-4082-B96C-91FC0DE5399D@gmail.com> <294e1641-d658-4d43-8671-60e8ff860532@app.fastmail.com> Subject: Re: Optimize LISTEN/NOTIFY Content-Type: multipart/mixed; boundary=1c6c888031b34e7e8c04984304bc9bdb List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --1c6c888031b34e7e8c04984304bc9bdb Content-Type: text/plain Content-Transfer-Encoding: 7bit On Sat, Nov 8, 2025, at 13:59, Joel Jacobson wrote: > On Fri, Nov 7, 2025, at 19:59, Joel Jacobson wrote: >> * The logic in SignalBackends has been reworked and simplified, >> thanks to the new isAdvancing and advancingPos fields. >> I now think it's finally easy to reason about why each branch >> in SignalBackends must be correct. > > I was wrong. I wrongly assumed asyncQueueReadAllNotifications would read > up until head, which it might not actually do: > > * Process messages up to the stop position, end of page, or an > * uncommitted message. > > This in turn could cause a listening backend to remain behind, if there > would be no more notifies, so it unfortunately seems like we will always > need to signal when a backend isAdvancing, and therefore have no use of > the advancingPos field. > > I will do more correctness and benchmark testing before posting a new > version. Just wanted to give you a heads up on the bug, so you don't > waste time reviewing. Changes since v24: * Removed the QueuePosition advancingPos QueueBackendStatus field. * Always signal when isAdvancing is true. Some benchmarking: master: % ./pg_async_notify_test --listeners 1 --notifiers 1 --channels 1000 --sleep 0.1 --sleep-exp 1.01 13 s: 8668 sent (658/s), 8676 received (653/s) Notification Latency Distribution: 0.00-0.01ms 0 (0.0%) avg: 0.000ms 0.01-0.10ms 0 (0.0%) avg: 0.000ms 0.10-1.00ms # 3 (0.0%) avg: 0.783ms 1.00-10.00ms # 49 (0.6%) avg: 5.559ms 10.00-100.00ms # 168 (1.9%) avg: 56.360mss >100.00ms ######### 8456 (97.5%) avg: 256.086ms v25: % ./pg_async_notify_test --listeners 1 --notifiers 1 --channels 1000 --sleep 0.1 --sleep-exp 1.01 14 s: 27097 sent (1959/s), 27097 received (1960/s) Notification Latency Distribution: 0.00-0.01ms 0 (0.0%) avg: 0.000ms 0.01-0.10ms # 962 (3.6%) avg: 0.081ms 0.10-1.00ms ######### 25066 (92.5%) avg: 0.321ms 1.00-10.00ms # 1069 (3.9%) avg: 2.104ms 10.00-100.00ms 0 (0.0%) avg: 0.000ms >100.00ms 0 (0.0%) avg: 0.000ms On master, I see lots of "waiting for AccessExclusiveLock on object 0" in the logs for this benchmark setup, but none at all for v25. I wonder if there would be some way to solve the problem with v24, without having to always signal when isAdvancing is true with an advancingPos at or ahead of the notifier's queueHeadAfterWrite. One idea I had, that I think is a bad idea, but just mentioning it in case you think it could work, is to check if the new pos is at head, in asyncQueueReadAllNotifications's PG_FINALLY block, and if not, to let the listening backend signal itself. I guess this is a bad idea, since then it could signal itself over and over again, and consume a lot of resources, if some uncommitted message takes a long time to commit. The current mechanism limit the rate of wake-ups to the same rate as the notifies, which seems sensible. Thoughts on this? /Joel --1c6c888031b34e7e8c04984304bc9bdb Content-Disposition: attachment; filename*0="0001-optimize_listen_notify-v25.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0001-optimize=5Flisten=5Fnotify-v25.patch?=" Content-Transfer-Encoding: base64 RnJvbSBkZWYwMDU2OWVjNmQyM2IzNjUyZWRmNmEzNzI3ZTAwNzg5OWZhZmU4IE1vbiBTZXAg 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 --1c6c888031b34e7e8c04984304bc9bdb Content-Disposition: attachment; filename*0="0002-optimize_listen_notify-v25.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0002-optimize=5Flisten=5Fnotify-v25.patch?=" Content-Transfer-Encoding: base64 RnJvbSAyYWJlZDFhMjE3NjQyYTkwMzdmZTAzYjI3MDkwNmM4NDk2NjJjM2E5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEphY29ic29uIDxqb2VsQGNvbXBpbGVyLm9y Zz4KRGF0ZTogU2F0LCA4IE5vdiAyMDI1IDEzOjQ3OjA5ICswMTAwClN1YmplY3Q6IFtQQVRD SCAyLzJdIE9wdGltaXplIExJU1RFTi9OT1RJRlkgd2l0aCBzaGFyZWQgY2hhbm5lbCBtYXAg YW5kIGRpcmVjdAogYWR2YW5jZW1lbnQKClRoaXMgcGF0Y2ggcmV3b3JrcyB0aGUgTElTVEVO L05PVElGWSBzaWduYWxpbmcgcGF0aCB0byBhdm9pZCB0aGUKbG9uZy1zdGFuZGluZyBpbmVm ZmljaWVuY3kgd2hlcmUgZXZlcnkgY29tbWl0IHdha2VzIGFsbCBsaXN0ZW5pbmcKYmFja2Vu ZHMgaW4gdGhlIHNhbWUgZGF0YWJhc2UsIGV2ZW4gdGhvc2UgdGhhdCBhcmUgbGlzdGVuaW5n IG9uCmNvbXBsZXRlbHkgZGlmZmVyZW50IGNoYW5uZWxzLgoKUHJvYmxlbQotLS0tLS0tCgpB dCBwcmVzZW50LCBTaWduYWxCYWNrZW5kcyBoYXMgbm8gY2VudHJhbCBrbm93bGVkZ2Ugb2Yg d2hpY2ggYmFja2VuZApsaXN0ZW5zIG9uIHdoaWNoIGNoYW5uZWwuIFdoZW4gYSBiYWNrZW5k IGNvbW1pdHMgYSB0cmFuc2FjdGlvbiB0aGF0Cmlzc3VlZCBOT1RJRlksIGl0IHNpbXBseSBp dGVyYXRlcyBvdmVyIGFsbCByZWdpc3RlcmVkIGxpc3RlbmVycyBpbiB0aGUKc2FtZSBkYXRh YmFzZSBhbmQgc2VuZHMgZWFjaCBvbmUgYSBQUk9DU0lHX05PVElGWV9JTlRFUlJVUFQgc2ln bmFsLgoKVGhhdCBiZWhhdmlvciBpcyBmaW5lIHdoZW4gYWxsIGxpc3RlbmVycyBhcmUgb24g dGhlIHNhbWUgY2hhbm5lbCwgYnV0CndoZW4gbWFueSBiYWNrZW5kcyBhcmUgbGlzdGVuaW5n IG9uIGRpZmZlcmVudCBjaGFubmVscywgZWFjaCBOT1RJRlkKdHJpZ2dlcnMgYSBzdG9ybSBv ZiB1bm5lY2Vzc2FyeSB3YWtldXBzIGFuZCBjb250ZXh0IHN3aXRjaGVzLiBBcyB0aGUKbnVt YmVyIG9mIGlkbGUgbGlzdGVuZXJzIGdyb3dzLCB0aGlzIG9mdGVuIGJlY29tZXMgdGhlIGJv dHRsZW5lY2sgYW5kCnRocm91Z2hwdXQgZHJvcHMgc2hhcnBseS4KCk92ZXJ2aWV3IG9mIHRo ZSBzb2x1dGlvbgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgcGF0Y2ggaW50cm9k dWNlcyBhIGxhemlseS1jcmVhdGVkIGR5bmFtaWMgc2hhcmVkIGhhc2ggKGRzaGFzaCkKYmFj a2VkIGJ5IGR5bmFtaWMgc2hhcmVkIG1lbW9yeSAoRFNBKSB0aGF0IG1hcHMgKGRib2lkLCBj aGFubmVsKSB0bwphcnJheXMgb2YgbGlzdGVuaW5nIGJhY2tlbmRzIChQcm9jTnVtYmVycyku IFRoaXMgYWxsb3dzIHRoZSBzZW5kZXIgdG8KdGFyZ2V0IG9ubHkgdGhvc2UgYmFja2VuZHMg YWN0dWFsbHkgbGlzdGVuaW5nIG9uIHRoZSBjaGFubmVscyBmb3Igd2hpY2gKaXQgaGFzIHF1 ZXVlZCBub3RpZmljYXRpb25zLgoKQXQgY29tbWl0IHRpbWU6CgoqIEF0Q29tbWl0X05vdGlm eSB1cGRhdGVzIHRoZSBzaGFyZWQgY2hhbm5lbEhhc2ggdG8gcmVmbGVjdCBhbnkgTElTVEVO CiAgb3IgVU5MSVNURU4gYWN0aW9ucyBwZXJmb3JtZWQgaW4gdGhlIHRyYW5zYWN0aW9uLgoq IFNpZ25hbEJhY2tlbmRzIGNvbnN1bHRzIHRoaXMgaGFzaCB0byBmaW5kIHRoZSBiYWNrZW5k cyB0aGF0IGFyZQogIGxpc3RlbmluZyBvbiB0aGUgY2hhbm5lbHMgYmVpbmcgbm90aWZpZWQg aW4gdGhlIGN1cnJlbnQgZGF0YWJhc2UsIGFuZAogIHNpZ25hbHMgb25seSB0aG9zZS4KCkVh Y2ggYmFja2VuZCdzIGVudHJ5IGluIEFzeW5jUXVldWVDb250cm9sIG5vdyBpbmNsdWRlcyBh IHdha2V1cFBlbmRpbmcKZmxhZyB0byBwcmV2ZW50IGR1cGxpY2F0ZSBzaWduYWxzIHdoaWxl IGEgcHJldmlvdXMgd2FrZXVwIGlzIHN0aWxsIGJlaW5nCnByb2Nlc3NlZC4KCkRpcmVjdCBh ZHZhbmNlbWVudAotLS0tLS0tLS0tLS0tLS0tLS0KCkEgZnVydGhlciBvcHRpbWl6YXRpb24g YXZvaWRzIHNpZ25hbGluZyBpZGxlIGJhY2tlbmRzIHRoYXQgYXJlIG5vdApsaXN0ZW5pbmcg b24gYW55IG9mIHRoZSBjaGFubmVscyBub3RpZmllZCB3aXRoaW4gdGhlIHRyYW5zYWN0aW9u LgoKV2hpbGUgcXVldWluZyBub3RpZmljYXRpb25zLCBQcmVDb21taXRfTm90aWZ5IHJlY29y ZHMgdGhlIHF1ZXVlIGhlYWQKcG9zaXRpb24gYm90aCBiZWZvcmUgYW5kIGFmdGVyIHdyaXRp bmcgaXRzIG5vdGlmaWNhdGlvbnMuIEJlY2F1c2UgYWxsCndyaXRlcnMgYXJlIHNlcmlhbGl6 ZWQgYnkgdGhlIGV4aXN0aW5nIGNsdXN0ZXItd2lkZSBoZWF2eXdlaWdodCBsb2NrIG9uCiJk YXRhYmFzZSAwIiwgbm8gYmFja2VuZCAoZnJvbSBhbnkgZGF0YWJhc2UpIGNhbiBpbnNlcnQg ZW50cmllcyBiZXR3ZWVuCnRob3NlIHR3byBwb2ludHMuIFRoaXMgZ3VhcmFudGVlcyB0aGF0 IHRoZSByZWdpb24gW29sZEhlYWQsIG5ld0hlYWQpCmNvbnRhaW5zIG9ubHkgdGhlIGVudHJp ZXMgd3JpdHRlbiBieSBvdXIgY29tbWl0LgoKU2lnbmFsQmFja2VuZHMgdXNlcyB0aGlzIGZh Y3QgdG8gZGlyZWN0bHkgYWR2YW5jZSBhbnkgYmFja2VuZCBzdGlsbApwb3NpdGlvbmVkIGF0 IG9sZEhlYWQgdXAgdG8gbmV3SGVhZCwgYXZvaWRpbmcgYSBuZWVkbGVzcyB3YWtldXAgZm9y Cmxpc3RlbmVycyB0aGF0IHdvdWxkIG90aGVyd2lzZSBub3QgZmluZCBhbnkgbm90aWZpZXMg b2YgaW50ZXJlc3QuCgpUbyBoYW5kbGUgYWR2YW5jaW5nIGJhY2tlbmRzIGNvcnJlY3RseSwg ZWFjaCBiYWNrZW5kJ3MgZW50cnkgdHJhY2tzIGJvdGgKd2hldGhlciBpdCBpcyBjdXJyZW50 bHkgYWR2YW5jaW5nIChpc0FkdmFuY2luZykgYW5kIHRoZSB0YXJnZXQgcG9zaXRpb24KaXQg aXMgYWR2YW5jaW5nIHRvIChhZHZhbmNpbmdQb3MpLiBUaGlzIGFsbG93cyBTaWduYWxCYWNr ZW5kcyB0byBzaWduYWwKYWR2YW5jaW5nIGJhY2tlbmRzIG9ubHkgd2hlbiB0aGVpciB0YXJn ZXQgcG9zaXRpb24gd291bGQgbGVhdmUgdGhlbQpiZWhpbmQgdGhlIG5ldyBxdWV1ZSBoZWFk LCB3aGlsZSBzYWZlbHkgZGlyZWN0LWFkdmFuY2luZyBpZGxlIGJhY2tlbmRzCnRoYXQgd291 bGQgbm90IGJlIGludGVyZXN0ZWQgaW4gdGhlIG5ld2x5IHdyaXR0ZW4gbm90aWZpY2F0aW9u cy4KCk90aGVyIG5vdGVzCi0tLS0tLS0tLS0tCgoqIE1haW50YWlucyBkdWFsIGRhdGEgc3Ry dWN0dXJlczogYSBzaGFyZWQgY2hhbm5lbEhhc2ggZm9yIGRldGVybWluaW5nCiAgd2hpY2gg YmFja2VuZHMgdG8gc2lnbmFsLCBhbmQgYSBsb2NhbCBwZXItYmFja2VuZCBsaXN0ZW5DaGFu bmVscyBsaXN0CiAgZm9yIGZhc3QgbG9jay1mcmVlIGxvb2t1cHMgZHVyaW5nIG5vdGlmaWNh dGlvbiBwcm9jZXNzaW5nLiBUaGlzIGF2b2lkcwogIGNvbnRlbnRpb24gb24gdGhlIHNoYXJl ZCBoYXNoIGR1cmluZyB0aGUgaGlnaC1mcmVxdWVuY3kgSXNMaXN0ZW5pbmdPbgogIGNoZWNr cyB0aGF0IG9jY3VyIGZvciBldmVyeSBub3RpZmljYXRpb24gcmVhZCBmcm9tIHRoZSBxdWV1 ZS4KKiBCYWNrZW5kcyByZW1haW4gcmVnaXN0ZXJlZCBpbiB0aGUgZ2xvYmFsIGxpc3RlbmVy IGxpc3QgYXMgbG9uZyBhcwogIGxpc3RlbkNoYW5uZWxzIGlzIG5vbi1lbXB0eS4KKiBBZGRz IExXTG9jayB0cmFuY2hlIE5PVElGWV9DSEFOTkVMX0hBU0ggYW5kIHdhaXQgZXZlbnQKICBO b3RpZnlDaGFubmVsSGFzaCBmb3IgdmlzaWJpbGl0eS4KKiBObyB1c2VyLXZpc2libGUgYmVo YXZpb3JhbCBjaGFuZ2VzOyB0aGlzIGlzIGFuIGludGVybmFsIG9wdGltaXphdGlvbgogIG9u bHkuCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYyAgICAgICAgICAgICAgICAg IHwgNzA4ICsrKysrKysrKysrKysrKy0tLQogLi4uL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZl bnRfbmFtZXMudHh0ICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2Nr bGlzdC5oICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCAgICAgICAgICAgICAgfCAgIDIgKwogNCBmaWxlcyBjaGFuZ2VkLCA2MDggaW5z ZXJ0aW9ucygrKSwgMTA0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2FzeW5jLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jCmluZGV4 IDRiZDM3ZDViZWI1Li4xZjU0ZmE4ZTQxYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvYXN5bmMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jCkBAIC0y NCw4ICsyNCwxMCBAQAogICoJICBBbGwgbm90aWZpY2F0aW9uIG1lc3NhZ2VzIGFyZSBwbGFj ZWQgaW4gdGhlIHF1ZXVlIGFuZCBsYXRlciByZWFkIG91dAogICoJICBieSBsaXN0ZW5pbmcg YmFja2VuZHMuCiAgKgotICoJICBUaGVyZSBpcyBubyBjZW50cmFsIGtub3dsZWRnZSBvZiB3 aGljaCBiYWNrZW5kIGxpc3RlbnMgb24gd2hpY2ggY2hhbm5lbDsKLSAqCSAgZXZlcnkgYmFj a2VuZCBoYXMgaXRzIG93biBsaXN0IG9mIGludGVyZXN0aW5nIGNoYW5uZWxzLgorICoJICBX ZSBhbHNvIG1haW50YWluIGEgZHluYW1pYyBzaGFyZWQgaGFzaCB0YWJsZSAoZHNoYXNoKSB0 aGF0IG1hcHMgY2hhbm5lbAorICoJICBuYW1lcyB0byB0aGUgc2V0IG9mIGJhY2tlbmRzIGxp c3RlbmluZyBvbiBlYWNoIGNoYW5uZWwuIFRoaXMgdGFibGUgaXMKKyAqCSAgY3JlYXRlZCBs YXppbHkgb24gdGhlIGZpcnN0IExJU1RFTiBjb21tYW5kIGFuZCBncm93cyBkeW5hbWljYWxs eSBhcworICoJICBuZWVkZWQuCiAgKgogICoJICBBbHRob3VnaCB0aGVyZSBpcyBvbmx5IG9u ZSBxdWV1ZSwgbm90aWZpY2F0aW9ucyBhcmUgdHJlYXRlZCBhcyBiZWluZwogICoJICBkYXRh YmFzZS1sb2NhbDsgdGhpcyBpcyBkb25lIGJ5IGluY2x1ZGluZyB0aGUgc2VuZGVyJ3MgZGF0 YWJhc2UgT0lECkBAIC02OCwxNiArNzAsMjEgQEAKICAqCSAgQ29tbWl0VHJhbnNhY3Rpb24o KSB3aGljaCB3aWxsIHRoZW4gZG8gdGhlIGFjdHVhbCB0cmFuc2FjdGlvbiBjb21taXQuCiAg KgogICoJICBBZnRlciBjb21taXQgd2UgYXJlIGNhbGxlZCBhbm90aGVyIHRpbWUgKEF0Q29t bWl0X05vdGlmeSgpKS4gSGVyZSB3ZQotICoJICBtYWtlIGFueSBhY3R1YWwgdXBkYXRlcyB0 byB0aGUgZWZmZWN0aXZlIGxpc3RlbiBzdGF0ZSAobGlzdGVuQ2hhbm5lbHMpLgotICoJICBU aGVuIHdlIHNpZ25hbCBhbnkgYmFja2VuZHMgdGhhdCBtYXkgYmUgaW50ZXJlc3RlZCBpbiBv dXIgbWVzc2FnZXMKLSAqCSAgKGluY2x1ZGluZyBvdXIgb3duIGJhY2tlbmQsIGlmIGxpc3Rl bmluZykuICBUaGlzIGlzIGRvbmUgYnkKLSAqCSAgU2lnbmFsQmFja2VuZHMoKSwgd2hpY2gg c2NhbnMgdGhlIGxpc3Qgb2YgbGlzdGVuaW5nIGJhY2tlbmRzIGFuZCBzZW5kcyBhCi0gKgkg IFBST0NTSUdfTk9USUZZX0lOVEVSUlVQVCBzaWduYWwgdG8gZXZlcnkgbGlzdGVuaW5nIGJh Y2tlbmQgKHdlIGRvbid0Ci0gKgkgIGtub3cgd2hpY2ggYmFja2VuZCBpcyBsaXN0ZW5pbmcg b24gd2hpY2ggY2hhbm5lbCBzbyB3ZSBtdXN0IHNpZ25hbCB0aGVtCi0gKgkgIGFsbCkuICBX ZSBjYW4gZXhjbHVkZSBiYWNrZW5kcyB0aGF0IGFyZSBhbHJlYWR5IHVwIHRvIGRhdGUsIHRo b3VnaCwgYW5kCi0gKgkgIHdlIGNhbiBhbHNvIGV4Y2x1ZGUgYmFja2VuZHMgdGhhdCBhcmUg aW4gb3RoZXIgZGF0YWJhc2VzICh1bmxlc3MgdGhleQotICoJICBhcmUgd2F5IGJlaGluZCBh bmQgc2hvdWxkIGJlIGtpY2tlZCB0byBtYWtlIHRoZW0gYWR2YW5jZSB0aGVpcgotICoJICBw b2ludGVycykuCisgKgkgIG1ha2UgYW55IGFjdHVhbCB1cGRhdGVzIHRvIHRoZSBsb2NhbCBs aXN0ZW4gc3RhdGUgKGxpc3RlbkNoYW5uZWxzSGFzaCkgYW5kCisgKgkgIHNoYXJlZCBjaGFu bmVsIGhhc2ggdGFibGUgKGNoYW5uZWxIYXNoKS4gIFRoZW4gd2Ugc2lnbmFsIGFueSBiYWNr ZW5kcworICoJICB0aGF0IG1heSBiZSBpbnRlcmVzdGVkIGluIG91ciBtZXNzYWdlcyAoaW5j bHVkaW5nIG91ciBvd24gYmFja2VuZCwKKyAqCSAgaWYgbGlzdGVuaW5nKS4gIFRoaXMgaXMg ZG9uZSBieSBTaWduYWxCYWNrZW5kcygpLCB3aGljaCBjb25zdWx0cyB0aGUKKyAqCSAgc2hh cmVkIGNoYW5uZWwgaGFzaCB0YWJsZSB0byBpZGVudGlmeSBsaXN0ZW5lcnMgZm9yIHRoZSBj aGFubmVscyB0aGF0CisgKgkgIGhhdmUgcGVuZGluZyBub3RpZmljYXRpb25zIGluIHRoZSBj dXJyZW50IGRhdGFiYXNlLiAgRWFjaCBzZWxlY3RlZAorICoJICBiYWNrZW5kIGlzIG1hcmtl ZCBhcyBoYXZpbmcgYSB3YWtldXAgcGVuZGluZyB0byBhdm9pZCBkdXBsaWNhdGUgc2lnbmFs cywKKyAqCSAgYW5kIGEgUFJPQ1NJR19OT1RJRllfSU5URVJSVVBUIHNpZ25hbCBpcyBzZW50 IHRvIGl0LgorICoKKyAqCSAgV2hlbiB3cml0aW5nIG5vdGlmaWNhdGlvbnMsIFByZUNvbW1p dF9Ob3RpZnkoKSByZWNvcmRzIHRoZSBxdWV1ZSBoZWFkCisgKgkgIHBvc2l0aW9uIGJvdGgg YmVmb3JlIGFuZCBhZnRlciB0aGUgd3JpdGUuICBCZWNhdXNlIGFsbCB3cml0ZXJzIHNlcmlh bGl6ZQorICoJICBvbiBhIGNsdXN0ZXItd2lkZSBoZWF2eXdlaWdodCBsb2NrLCBubyBiYWNr ZW5kIGNhbiBpbnNlcnQgZW50cmllcyBiZXR3ZWVuCisgKgkgIHRoZXNlIHR3byBwb2ludHMu ICBTaWduYWxCYWNrZW5kcygpIHVzZXMgdGhpcyBmYWN0IHRvIGRpcmVjdGx5IGFkdmFuY2Ug YW55CisgKgkgIGJhY2tlbmQgdGhhdCBpcyBzdGlsbCBwb3NpdGlvbmVkIGF0IHRoZSBvbGQg aGVhZCwgYXZvaWRpbmcgdW5uZWNlc3NhcnkKKyAqCSAgd2FrZXVwcyBmb3IgaWRsZSBsaXN0 ZW5lcnMgdGhhdCBoYXZlIG5vdGhpbmcgdG8gcmVhZC4KICAqCiAgKgkgIEZpbmFsbHksIGFm dGVyIHdlIGFyZSBvdXQgb2YgdGhlIHRyYW5zYWN0aW9uIGFsdG9nZXRoZXIgYW5kIGFib3V0 IHRvIGdvCiAgKgkgIGlkbGUsIHdlIHNjYW4gdGhlIHF1ZXVlIGZvciBtZXNzYWdlcyB0aGF0 IG5lZWQgdG8gYmUgc2VudCB0byBvdXIKQEAgLTEzNywxNCArMTQ0LDE3IEBACiAjaW5jbHVk ZSAiY29tbWFuZHMvYXN5bmMuaCIKICNpbmNsdWRlICJjb21tb24vaGFzaGZuLmgiCiAjaW5j bHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgImxpYi9kc2hhc2guaCIKICNpbmNsdWRlICJs aWJwcS9saWJwcS5oIgogI2luY2x1ZGUgImxpYnBxL3BxZm9ybWF0LmgiCiAjaW5jbHVkZSAi bWlzY2FkbWluLmgiCisjaW5jbHVkZSAic3RvcmFnZS9kc21fcmVnaXN0cnkuaCIKICNpbmNs dWRlICJzdG9yYWdlL2lwYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1 ZGUgInN0b3JhZ2UvcHJvY3NpZ25hbC5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIK ICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2RzYS5oIgog I2luY2x1ZGUgInV0aWxzL2d1Y19ob29rcy5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxz LmgiCiAjaW5jbHVkZSAidXRpbHMvcHNfc3RhdHVzLmgiCkBAIC0xNjIsNiArMTcyLDI5IEBA CiAgKi8KICNkZWZpbmUgTk9USUZZX1BBWUxPQURfTUFYX0xFTkdUSAkoQkxDS1NaIC0gTkFN RURBVEFMRU4gLSAxMjgpCiAKKy8qCisgKiBDaGFubmVsIGhhc2ggdGFibGUgZGVmaW5pdGlv bnMKKyAqCisgKiBUaGlzIGhhc2ggdGFibGUgbWFwcyAoZGF0YWJhc2UgT0lELCBjaGFubmVs IG5hbWUpIGtleXMgdG8gYXJyYXlzIG9mCisgKiBQcm9jTnVtYmVycyByZXByZXNlbnRpbmcg dGhlIGJhY2tlbmRzIGxpc3RlbmluZyBvbiBlYWNoIGNoYW5uZWwuCisgKi8KKworI2RlZmlu ZSBJTklUSUFMX0xJU1RFTkVSU19BUlJBWV9TSVpFIDQKKwordHlwZWRlZiBzdHJ1Y3QgQ2hh bm5lbEhhc2hLZXkKK3sKKwlPaWQJCQlkYm9pZDsKKwljaGFyCQljaGFubmVsW05BTUVEQVRB TEVOXTsKK30gQ2hhbm5lbEhhc2hLZXk7CisKK3R5cGVkZWYgc3RydWN0IENoYW5uZWxFbnRy eQoreworCUNoYW5uZWxIYXNoS2V5IGtleTsKKwlkc2FfcG9pbnRlciBsaXN0ZW5lcnNBcnJh eTsgLyogRFNBIHBvaW50ZXIgdG8gUHJvY051bWJlciBhcnJheSAqLworCWludAkJCW51bUxp c3RlbmVyczsJLyogTnVtYmVyIG9mIGxpc3RlbmVycyBjdXJyZW50bHkgc3RvcmVkICovCisJ aW50CQkJYWxsb2NhdGVkTGlzdGVuZXJzOyAvKiBBbGxvY2F0ZWQgc2l6ZSBvZiBhcnJheSAq LworfSBDaGFubmVsRW50cnk7CisKIC8qCiAgKiBTdHJ1Y3QgcmVwcmVzZW50aW5nIGFuIGVu dHJ5IGluIHRoZSBnbG9iYWwgbm90aWZ5IHF1ZXVlCiAgKgpAQCAtMjI0LDExICsyNTcsMTYg QEAgdHlwZWRlZiBzdHJ1Y3QgUXVldWVQb3NpdGlvbgogCSAoeCkucGFnZSAhPSAoeSkucGFn ZSA/ICh4KSA6IFwKIAkgKHgpLm9mZnNldCA+ICh5KS5vZmZzZXQgPyAoeCkgOiAoeSkpCiAK Ky8qIHJldHVybnMgdHJ1ZSBpZiB4IGNvbWVzIGJlZm9yZSB5IGluIHF1ZXVlIG9yZGVyICov CisjZGVmaW5lIFFVRVVFX1BPU19QUkVDRURFUyh4LHkpIFwKKwkoYXN5bmNRdWV1ZVBhZ2VQ cmVjZWRlcygoeCkucGFnZSwgKHkpLnBhZ2UpIHx8IFwKKwkgKCh4KS5wYWdlID09ICh5KS5w YWdlICYmICh4KS5vZmZzZXQgPCAoeSkub2Zmc2V0KSkKKwogLyoKICAqIFBhcmFtZXRlciBk ZXRlcm1pbmluZyBob3cgb2Z0ZW4gd2UgdHJ5IHRvIGFkdmFuY2UgdGhlIHRhaWwgcG9pbnRl cjoKICAqIHdlIGRvIHRoYXQgYWZ0ZXIgZXZlcnkgUVVFVUVfQ0xFQU5VUF9ERUxBWSBwYWdl cyBvZiBOT1RJRlkgZGF0YS4gIFRoaXMgaXMKLSAqIGFsc28gdGhlIGRpc3RhbmNlIGJ5IHdo aWNoIGEgYmFja2VuZCBpbiBhbm90aGVyIGRhdGFiYXNlIG5lZWRzIHRvIGJlCi0gKiBiZWhp bmQgYmVmb3JlIHdlJ2xsIGRlY2lkZSB3ZSBuZWVkIHRvIHdha2UgaXQgdXAgdG8gYWR2YW5j ZSBpdHMgcG9pbnRlci4KKyAqIGFsc28gdGhlIGRpc3RhbmNlIGJ5IHdoaWNoIGEgYmFja2Vu ZCBuZWVkcyB0byBiZSBiZWhpbmQgYmVmb3JlIHdlJ2xsCisgKiBkZWNpZGUgd2UgbmVlZCB0 byB3YWtlIGl0IHVwIHRvIGFkdmFuY2UgaXRzIHBvaW50ZXIuCiAgKgogICogUmVzaXN0IHRo ZSB0ZW1wdGF0aW9uIHRvIG1ha2UgdGhpcyByZWFsbHkgbGFyZ2UuICBXaGlsZSB0aGF0IHdv dWxkIHNhdmUKICAqIHdvcmsgaW4gc29tZSBwbGFjZXMsIGl0IHdvdWxkIGFkZCBjb3N0IGlu IG90aGVycy4gIEluIHBhcnRpY3VsYXIsIHRoaXMKQEAgLTI0Niw2ICsyODQsOCBAQCB0eXBl ZGVmIHN0cnVjdCBRdWV1ZUJhY2tlbmRTdGF0dXMKIAlPaWQJCQlkYm9pZDsJCQkvKiBiYWNr ZW5kJ3MgZGF0YWJhc2UgT0lELCBvciBJbnZhbGlkT2lkICovCiAJUHJvY051bWJlcgluZXh0 TGlzdGVuZXI7CS8qIGlkIG9mIG5leHQgbGlzdGVuZXIsIG9yIElOVkFMSURfUFJPQ19OVU1C RVIgKi8KIAlRdWV1ZVBvc2l0aW9uIHBvczsJCQkvKiBiYWNrZW5kIGhhcyByZWFkIHF1ZXVl IHVwIHRvIGhlcmUgKi8KKwlib29sCQl3YWtldXBQZW5kaW5nOwkvKiBzaWduYWwgc2VudCBi dXQgbm90IHlldCBwcm9jZXNzZWQgKi8KKwlib29sCQlpc0FkdmFuY2luZzsJLyogYmFja2Vu ZCBpcyBhZHZhbmNpbmcgaXRzIHBvc2l0aW9uICovCiB9IFF1ZXVlQmFja2VuZFN0YXR1czsK IAogLyoKQEAgLTI2MCw5ICszMDAsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgUXVldWVCYWNrZW5k U3RhdHVzCiAgKiAoc2luY2Ugbm8gb3RoZXIgYmFja2VuZCB3aWxsIGluc3BlY3QgaXQpLgog ICoKICAqIFdoZW4gaG9sZGluZyBOb3RpZnlRdWV1ZUxvY2sgaW4gRVhDTFVTSVZFIG1vZGUs IGJhY2tlbmRzIGNhbiBpbnNwZWN0IHRoZQotICogZW50cmllcyBvZiBvdGhlciBiYWNrZW5k cyBhbmQgYWxzbyBjaGFuZ2UgdGhlIGhlYWQgcG9pbnRlci4gV2hlbiBob2xkaW5nCi0gKiBi b3RoIE5vdGlmeVF1ZXVlTG9jayBhbmQgTm90aWZ5UXVldWVUYWlsTG9jayBpbiBFWENMVVNJ VkUgbW9kZSwgYmFja2VuZHMKLSAqIGNhbiBjaGFuZ2UgdGhlIHRhaWwgcG9pbnRlcnMuCisg KiBlbnRyaWVzIG9mIG90aGVyIGJhY2tlbmRzIGFuZCBhbHNvIGNoYW5nZSB0aGUgaGVhZCBw b2ludGVyLiBUaGV5IGNhbgorICogYWxzbyBhZHZhbmNlIG90aGVyIGJhY2tlbmRzJyBxdWV1 ZSBwb3NpdGlvbnMsIHVubGVzcyB0aGV5IGFyZSBub3QKKyAqIGluIHRoZSBwcm9jZXNzIG9m IGRvaW5nIHRoYXQgdGhlbXNlbHZlcy4gV2hlbiBob2xkaW5nIGJvdGggTm90aWZ5UXVldWVM b2NrIGFuZAorICogTm90aWZ5UXVldWVUYWlsTG9jayBpbiBFWENMVVNJVkUgbW9kZSwgYmFj a2VuZHMgY2FuIGNoYW5nZSB0aGUgdGFpbCBwb2ludGVycy4KICAqCiAgKiBTTFJVIGJ1ZmZl ciBwb29sIGlzIGRpdmlkZWQgaW4gYmFua3MgYW5kIGJhbmsgd2lzZSBTTFJVIGxvY2sgaXMg dXNlZCBhcwogICogdGhlIGNvbnRyb2wgbG9jayBmb3IgdGhlIHBnX25vdGlmeSBTTFJVIGJ1 ZmZlcnMuCkBAIC0yODgsMTEgKzMyOSwxNiBAQCB0eXBlZGVmIHN0cnVjdCBBc3luY1F1ZXVl Q29udHJvbAogCVByb2NOdW1iZXIJZmlyc3RMaXN0ZW5lcjsJLyogaWQgb2YgZmlyc3QgbGlz dGVuZXIsIG9yCiAJCQkJCQkJCSAqIElOVkFMSURfUFJPQ19OVU1CRVIgKi8KIAlUaW1lc3Rh bXBUeiBsYXN0UXVldWVGaWxsV2FybjsJLyogdGltZSBvZiBsYXN0IHF1ZXVlLWZ1bGwgbXNn ICovCisJZHNhX2hhbmRsZQljaGFubmVsSGFzaERTQTsKKwlkc2hhc2hfdGFibGVfaGFuZGxl IGNoYW5uZWxIYXNoRFNIOwogCVF1ZXVlQmFja2VuZFN0YXR1cyBiYWNrZW5kW0ZMRVhJQkxF X0FSUkFZX01FTUJFUl07CiB9IEFzeW5jUXVldWVDb250cm9sOwogCiBzdGF0aWMgQXN5bmNR dWV1ZUNvbnRyb2wgKmFzeW5jUXVldWVDb250cm9sOwogCitzdGF0aWMgZHNhX2FyZWEgKmNo YW5uZWxEU0EgPSBOVUxMOworc3RhdGljIGRzaGFzaF90YWJsZSAqY2hhbm5lbEhhc2ggPSBO VUxMOworCiAjZGVmaW5lIFFVRVVFX0hFQUQJCQkJCShhc3luY1F1ZXVlQ29udHJvbC0+aGVh ZCkKICNkZWZpbmUgUVVFVUVfVEFJTAkJCQkJKGFzeW5jUXVldWVDb250cm9sLT50YWlsKQog I2RlZmluZSBRVUVVRV9TVE9QX1BBR0UJCQkJKGFzeW5jUXVldWVDb250cm9sLT5zdG9wUGFn ZSkKQEAgLTMwMSw2ICszNDcsOCBAQCBzdGF0aWMgQXN5bmNRdWV1ZUNvbnRyb2wgKmFzeW5j UXVldWVDb250cm9sOwogI2RlZmluZSBRVUVVRV9CQUNLRU5EX0RCT0lEKGkpCQkoYXN5bmNR dWV1ZUNvbnRyb2wtPmJhY2tlbmRbaV0uZGJvaWQpCiAjZGVmaW5lIFFVRVVFX05FWFRfTElT VEVORVIoaSkJCShhc3luY1F1ZXVlQ29udHJvbC0+YmFja2VuZFtpXS5uZXh0TGlzdGVuZXIp CiAjZGVmaW5lIFFVRVVFX0JBQ0tFTkRfUE9TKGkpCQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmJh Y2tlbmRbaV0ucG9zKQorI2RlZmluZSBRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5HKGkp CShhc3luY1F1ZXVlQ29udHJvbC0+YmFja2VuZFtpXS53YWtldXBQZW5kaW5nKQorI2RlZmlu ZSBRVUVVRV9CQUNLRU5EX0lTX0FEVkFOQ0lORyhpKQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmJh Y2tlbmRbaV0uaXNBZHZhbmNpbmcpCiAKIC8qCiAgKiBUaGUgU0xSVSBidWZmZXIgYXJlYSB0 aHJvdWdoIHdoaWNoIHdlIGFjY2VzcyB0aGUgbm90aWZpY2F0aW9uIHF1ZXVlCkBAIC0zMTMs MTYgKzM2MSwxNiBAQCBzdGF0aWMgU2xydUN0bERhdGEgTm90aWZ5Q3RsRGF0YTsKICNkZWZp bmUgUVVFVUVfRlVMTF9XQVJOX0lOVEVSVkFMCTUwMDAJLyogd2FybiBhdCBtb3N0IG9uY2Ug ZXZlcnkgNXMgKi8KIAogLyoKLSAqIGxpc3RlbkNoYW5uZWxzIGlkZW50aWZpZXMgdGhlIGNo YW5uZWxzIHdlIGFyZSBhY3R1YWxseSBsaXN0ZW5pbmcgdG8KLSAqIChpZSwgaGF2ZSBjb21t aXR0ZWQgYSBMSVNURU4gb24pLiAgSXQgaXMgYSBzaW1wbGUgbGlzdCBvZiBjaGFubmVsIG5h bWVzLAorICogbGlzdGVuQ2hhbm5lbHNIYXNoIGlkZW50aWZpZXMgdGhlIGNoYW5uZWxzIHdl IGFyZSBhY3R1YWxseSBsaXN0ZW5pbmcgdG8KKyAqIChpZSwgaGF2ZSBjb21taXR0ZWQgYSBM SVNURU4gb24pLiAgSXQgaXMgYSBoYXNoIHRhYmxlIG9mIGNoYW5uZWwgbmFtZXMsCiAgKiBh bGxvY2F0ZWQgaW4gVG9wTWVtb3J5Q29udGV4dC4KICAqLwotc3RhdGljIExpc3QgKmxpc3Rl bkNoYW5uZWxzID0gTklMOwkvKiBsaXN0IG9mIEMgc3RyaW5ncyAqLworc3RhdGljIEhUQUIg Kmxpc3RlbkNoYW5uZWxzSGFzaCA9IE5VTEw7CiAKIC8qCiAgKiBTdGF0ZSBmb3IgcGVuZGlu ZyBMSVNURU4vVU5MSVNURU4gYWN0aW9ucyBjb25zaXN0cyBvZiBhbiBvcmRlcmVkIGxpc3Qg b2YKICAqIGFsbCBhY3Rpb25zIHJlcXVlc3RlZCBpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlv bi4gIEFzIGV4cGxhaW5lZCBhYm92ZSwKLSAqIHdlIGRvbid0IGFjdHVhbGx5IGNoYW5nZSBs aXN0ZW5DaGFubmVscyB1bnRpbCB3ZSByZWFjaCB0cmFuc2FjdGlvbiBjb21taXQuCisgKiB3 ZSBkb24ndCBhY3R1YWxseSBjaGFuZ2UgbGlzdGVuQ2hhbm5lbHNIYXNoIHVudGlsIHdlIHJl YWNoIHRyYW5zYWN0aW9uIGNvbW1pdC4KICAqCiAgKiBUaGUgbGlzdCBpcyBrZXB0IGluIEN1 clRyYW5zYWN0aW9uQ29udGV4dC4gIEluIHN1YnRyYW5zYWN0aW9ucywgZWFjaAogICogc3Vi dHJhbnNhY3Rpb24gaGFzIGl0cyBvd24gbGlzdCBpbiBpdHMgb3duIEN1clRyYW5zYWN0aW9u Q29udGV4dCwgYnV0CkBAIC0zOTEsNiArNDM5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgTm90aWZp Y2F0aW9uTGlzdAogCWludAkJCW5lc3RpbmdMZXZlbDsJLyogY3VycmVudCB0cmFuc2FjdGlv biBuZXN0aW5nIGRlcHRoICovCiAJTGlzdAkgICAqZXZlbnRzOwkJCS8qIGxpc3Qgb2YgTm90 aWZpY2F0aW9uIHN0cnVjdHMgKi8KIAlIVEFCCSAgICpoYXNodGFiOwkJLyogaGFzaCBvZiBO b3RpZmljYXRpb25IYXNoIHN0cnVjdHMsIG9yIE5VTEwgKi8KKwlIVEFCCSAgICpjaGFubmVs SGFzaHRhYjsgLyogaGFzaCBvZiB1bmlxdWUgY2hhbm5lbCBuYW1lcywgb3IgTlVMTCAqLwog CXN0cnVjdCBOb3RpZmljYXRpb25MaXN0ICp1cHBlcjsgLyogZGV0YWlscyBmb3IgdXBwZXIg dHJhbnNhY3Rpb24gbGV2ZWxzICovCiB9IE5vdGlmaWNhdGlvbkxpc3Q7CiAKQEAgLTQwMSw2 ICs0NTAsMTEgQEAgc3RydWN0IE5vdGlmaWNhdGlvbkhhc2gKIAlOb3RpZmljYXRpb24gKmV2 ZW50OwkJLyogPT4gdGhlIGFjdHVhbCBOb3RpZmljYXRpb24gc3RydWN0ICovCiB9OwogCitz dHJ1Y3QgQ2hhbm5lbEhhc2gKK3sKKwljaGFyCQljaGFubmVsW05BTUVEQVRBTEVOXTsKK307 CisKIHN0YXRpYyBOb3RpZmljYXRpb25MaXN0ICpwZW5kaW5nTm90aWZpZXMgPSBOVUxMOwog CiAvKgpAQCAtNDE4LDYgKzQ3MiwyMCBAQCBzdGF0aWMgYm9vbCB1bmxpc3RlbkV4aXRSZWdp c3RlcmVkID0gZmFsc2U7CiAvKiBUcnVlIGlmIHdlJ3JlIGN1cnJlbnRseSByZWdpc3RlcmVk IGFzIGEgbGlzdGVuZXIgaW4gYXN5bmNRdWV1ZUNvbnRyb2wgKi8KIHN0YXRpYyBib29sIGFt UmVnaXN0ZXJlZExpc3RlbmVyID0gZmFsc2U7CiAKKy8qCisgKiBRdWV1ZSBoZWFkIHBvc2l0 aW9ucyBmb3IgZGlyZWN0IGFkdmFuY2VtZW50LgorICogVGhlc2UgYXJlIGNhcHR1cmVkIGR1 cmluZyBQcmVDb21taXRfTm90aWZ5IHdoaWxlIGhvbGRpbmcgdGhlIGhlYXZ5d2VpZ2h0Cisg KiBsb2NrIG9uIGRhdGFiYXNlIDAsIGVuc3VyaW5nIG5vIG90aGVyIGJhY2tlbmQgY2FuIGlu c2VydCBub3RpZmljYXRpb25zCisgKiBiZXR3ZWVuIHRoZW0uICBTaWduYWxCYWNrZW5kcyB1 c2VzIHRoZXNlIHRvIGFkdmFuY2UgaWRsZSBiYWNrZW5kcy4KKyAqLworc3RhdGljIFF1ZXVl UG9zaXRpb24gcXVldWVIZWFkQmVmb3JlV3JpdGU7CitzdGF0aWMgUXVldWVQb3NpdGlvbiBx dWV1ZUhlYWRBZnRlcldyaXRlOworCisvKgorICogTGlzdCBvZiBjaGFubmVscyB3aXRoIHBl bmRpbmcgbm90aWZpY2F0aW9ucyBpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4KKyAqLwor c3RhdGljIExpc3QgKnBlbmRpbmdOb3RpZnlDaGFubmVscyA9IE5JTDsKKwogLyogaGF2ZSB3 ZSBhZHZhbmNlZCB0byBhIHBhZ2UgdGhhdCdzIGEgbXVsdGlwbGUgb2YgUVVFVUVfQ0xFQU5V UF9ERUxBWT8gKi8KIHN0YXRpYyBib29sIHRyeUFkdmFuY2VUYWlsID0gZmFsc2U7CiAKQEAg LTQyOCw3ICs0OTYsNiBAQCBib29sCQlUcmFjZV9ub3RpZnkgPSBmYWxzZTsKIGludAkJCW1h eF9ub3RpZnlfcXVldWVfcGFnZXMgPSAxMDQ4NTc2OwogCiAvKiBsb2NhbCBmdW5jdGlvbiBw cm90b3R5cGVzICovCi1zdGF0aWMgaW5saW5lIGludDY0IGFzeW5jUXVldWVQYWdlRGlmZihp bnQ2NCBwLCBpbnQ2NCBxKTsKIHN0YXRpYyBpbmxpbmUgYm9vbCBhc3luY1F1ZXVlUGFnZVBy ZWNlZGVzKGludDY0IHAsIGludDY0IHEpOwogc3RhdGljIHZvaWQgcXVldWVfbGlzdGVuKExp c3RlbkFjdGlvbktpbmQgYWN0aW9uLCBjb25zdCBjaGFyICpjaGFubmVsKTsKIHN0YXRpYyB2 b2lkIEFzeW5jX1VubGlzdGVuT25FeGl0KGludCBjb2RlLCBEYXR1bSBhcmcpOwpAQCAtNDU3 LDE2ICs1MjQsOSBAQCBzdGF0aWMgdm9pZCBBZGRFdmVudFRvUGVuZGluZ05vdGlmaWVzKE5v dGlmaWNhdGlvbiAqbik7CiBzdGF0aWMgdWludDMyIG5vdGlmaWNhdGlvbl9oYXNoKGNvbnN0 IHZvaWQgKmtleSwgU2l6ZSBrZXlzaXplKTsKIHN0YXRpYyBpbnQJbm90aWZpY2F0aW9uX21h dGNoKGNvbnN0IHZvaWQgKmtleTEsIGNvbnN0IHZvaWQgKmtleTIsIFNpemUga2V5c2l6ZSk7 CiBzdGF0aWMgdm9pZCBDbGVhclBlbmRpbmdBY3Rpb25zQW5kTm90aWZpZXModm9pZCk7Ci0K LS8qCi0gKiBDb21wdXRlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIHF1ZXVlIHBhZ2Ug bnVtYmVycy4KLSAqIFByZXZpb3VzbHkgdGhpcyBmdW5jdGlvbiBhY2NvdW50ZWQgZm9yIGEg d3JhcGFyb3VuZC4KLSAqLwotc3RhdGljIGlubGluZSBpbnQ2NAotYXN5bmNRdWV1ZVBhZ2VE aWZmKGludDY0IHAsIGludDY0IHEpCi17Ci0JcmV0dXJuIHAgLSBxOwotfQorc3RhdGljIGlu bGluZSB2b2lkIENoYW5uZWxIYXNoUHJlcGFyZUtleShDaGFubmVsSGFzaEtleSAqa2V5LCBP aWQgZGJvaWQsIGNvbnN0IGNoYXIgKmNoYW5uZWwpOworc3RhdGljIGRzaGFzaF9oYXNoIGNo YW5uZWxIYXNoRnVuYyhjb25zdCB2b2lkICprZXksIHNpemVfdCBzaXplLCB2b2lkICphcmcp Oworc3RhdGljIHZvaWQgaW5pdENoYW5uZWxIYXNoKHZvaWQpOwogCiAvKgogICogRGV0ZXJt aW5lcyB3aGV0aGVyIHAgcHJlY2VkZXMgcS4KQEAgLTQ3OCw2ICs1MzgsMTA1IEBAIGFzeW5j UXVldWVQYWdlUHJlY2VkZXMoaW50NjQgcCwgaW50NjQgcSkKIAlyZXR1cm4gcCA8IHE7CiB9 CiAKKy8qCisgKiBjaGFubmVsSGFzaEZ1bmMKKyAqCQlIYXNoIGZ1bmN0aW9uIGZvciBjaGFu bmVsIGtleXMuCisgKi8KK3N0YXRpYyBkc2hhc2hfaGFzaAorY2hhbm5lbEhhc2hGdW5jKGNv bnN0IHZvaWQgKmtleSwgc2l6ZV90IHNpemUsIHZvaWQgKmFyZykKK3sKKwljb25zdCBDaGFu bmVsSGFzaEtleSAqayA9IChjb25zdCBDaGFubmVsSGFzaEtleSAqKSBrZXk7CisJZHNoYXNo X2hhc2ggaDsKKworCWggPSBEYXR1bUdldFVJbnQzMihoYXNoX3VpbnQzMihrLT5kYm9pZCkp OworCWggXj0gRGF0dW1HZXRVSW50MzIoaGFzaF9hbnkoKGNvbnN0IHVuc2lnbmVkIGNoYXIg Kikgay0+Y2hhbm5lbCwKKwkJCQkJCQkJIHN0cm5sZW4oay0+Y2hhbm5lbCwgTkFNRURBVEFM RU4pKSk7CisKKwlyZXR1cm4gaDsKK30KKworLyogcGFyYW1ldGVycyBmb3IgdGhlIGNoYW5u ZWwgaGFzaCB0YWJsZSAqLworc3RhdGljIGNvbnN0IGRzaGFzaF9wYXJhbWV0ZXJzIGNoYW5u ZWxEU0hQYXJhbXMgPSB7CisJc2l6ZW9mKENoYW5uZWxIYXNoS2V5KSwKKwlzaXplb2YoQ2hh bm5lbEVudHJ5KSwKKwlkc2hhc2hfbWVtY21wLAorCWNoYW5uZWxIYXNoRnVuYywKKwlkc2hh c2hfbWVtY3B5LAorCUxXVFJBTkNIRV9OT1RJRllfQ0hBTk5FTF9IQVNICit9OworCisvKgor ICogaW5pdENoYW5uZWxIYXNoCisgKgkJTGF6eSBpbml0aWFsaXphdGlvbiBvZiB0aGUgY2hh bm5lbCBoYXNoIHRhYmxlLgorICovCitzdGF0aWMgdm9pZAoraW5pdENoYW5uZWxIYXNoKHZv aWQpCit7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCisJLyogUXVpY2sgZXhpdCBp ZiB3ZSBhbHJlYWR5IGRpZCB0aGlzICovCisJaWYgKGFzeW5jUXVldWVDb250cm9sLT5jaGFu bmVsSGFzaERTSCAhPSBEU0hBU0hfSEFORExFX0lOVkFMSUQgJiYKKwkJY2hhbm5lbEhhc2gg IT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogT3RoZXJ3aXNlLCB1c2UgYSBsb2NrIHRvIGVu c3VyZSBvbmx5IG9uZSBwcm9jZXNzIGNyZWF0ZXMgdGhlIHRhYmxlICovCisJTFdMb2NrQWNx dWlyZShOb3RpZnlRdWV1ZUxvY2ssIExXX0VYQ0xVU0lWRSk7CisKKwkvKiBCZSBzdXJlIGFu eSBsb2NhbCBtZW1vcnkgYWxsb2NhdGVkIGJ5IERTQSByb3V0aW5lcyBpcyBwZXJzaXN0ZW50 ICovCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhUb3BNZW1vcnlDb250 ZXh0KTsKKworCWlmIChhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhhc2hEU0ggPT0gRFNI QVNIX0hBTkRMRV9JTlZBTElEKQorCXsKKwkJLyogSW5pdGlhbGl6ZSBkeW5hbWljIHNoYXJl ZCBoYXNoIHRhYmxlIGZvciBjaGFubmVsIGhhc2ggKi8KKwkJY2hhbm5lbERTQSA9IGRzYV9j cmVhdGUoTFdUUkFOQ0hFX05PVElGWV9DSEFOTkVMX0hBU0gpOworCQlkc2FfcGluKGNoYW5u ZWxEU0EpOworCQlkc2FfcGluX21hcHBpbmcoY2hhbm5lbERTQSk7CisJCWNoYW5uZWxIYXNo ID0gZHNoYXNoX2NyZWF0ZShjaGFubmVsRFNBLCAmY2hhbm5lbERTSFBhcmFtcywgTlVMTCk7 CisKKwkJLyogU3RvcmUgaGFuZGxlcyBpbiBzaGFyZWQgbWVtb3J5IGZvciBvdGhlciBiYWNr ZW5kcyB0byB1c2UgKi8KKwkJYXN5bmNRdWV1ZUNvbnRyb2wtPmNoYW5uZWxIYXNoRFNBID0g ZHNhX2dldF9oYW5kbGUoY2hhbm5lbERTQSk7CisJCWFzeW5jUXVldWVDb250cm9sLT5jaGFu bmVsSGFzaERTSCA9CisJCQlkc2hhc2hfZ2V0X2hhc2hfdGFibGVfaGFuZGxlKGNoYW5uZWxI YXNoKTsKKwl9CisJZWxzZSBpZiAoIWNoYW5uZWxIYXNoKQorCXsKKwkJLyogQXR0YWNoIHRv IGV4aXN0aW5nIGR5bmFtaWMgc2hhcmVkIGhhc2ggdGFibGUgKi8KKwkJY2hhbm5lbERTQSA9 IGRzYV9hdHRhY2goYXN5bmNRdWV1ZUNvbnRyb2wtPmNoYW5uZWxIYXNoRFNBKTsKKwkJZHNh X3Bpbl9tYXBwaW5nKGNoYW5uZWxEU0EpOworCQljaGFubmVsSGFzaCA9IGRzaGFzaF9hdHRh Y2goY2hhbm5lbERTQSwgJmNoYW5uZWxEU0hQYXJhbXMsCisJCQkJCQkJCQlhc3luY1F1ZXVl Q29udHJvbC0+Y2hhbm5lbEhhc2hEU0gsCisJCQkJCQkJCQlOVUxMKTsKKwl9CisKKwlNZW1v cnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJTFdMb2NrUmVsZWFzZShOb3RpZnlR dWV1ZUxvY2spOworfQorCisvKgorICogaW5pdExpc3RlbkNoYW5uZWxzSGFzaAorICoJCUxh enkgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGxvY2FsIGxpc3RlbiBjaGFubmVscyBoYXNoIHRh YmxlLgorICovCitzdGF0aWMgdm9pZAoraW5pdExpc3RlbkNoYW5uZWxzSGFzaCh2b2lkKQor eworCUhBU0hDVEwJCWhhc2hfY3RsOworCisJLyogUXVpY2sgZXhpdCBpZiB3ZSBhbHJlYWR5 IGRpZCB0aGlzICovCisJaWYgKGxpc3RlbkNoYW5uZWxzSGFzaCAhPSBOVUxMKQorCQlyZXR1 cm47CisKKwkvKiBJbml0aWFsaXplIGxvY2FsIGhhc2ggdGFibGUgZm9yIHRoaXMgYmFja2Vu ZCdzIGxpc3RlbmVkIGNoYW5uZWxzICovCisJbWVtc2V0KCZoYXNoX2N0bCwgMCwgc2l6ZW9m KGhhc2hfY3RsKSk7CisJaGFzaF9jdGwua2V5c2l6ZSA9IE5BTUVEQVRBTEVOOworCWhhc2hf Y3RsLmVudHJ5c2l6ZSA9IHNpemVvZihzdHJ1Y3QgQ2hhbm5lbEhhc2gpOworCisJbGlzdGVu Q2hhbm5lbHNIYXNoID0KKwkJaGFzaF9jcmVhdGUoIkxpc3RlbiBDaGFubmVscyIsCisJCQkJ CTY0LAorCQkJCQkmaGFzaF9jdGwsCisJCQkJCUhBU0hfRUxFTSB8IEhBU0hfU1RSSU5HUyk7 Cit9CisKIC8qCiAgKiBSZXBvcnQgc3BhY2UgbmVlZGVkIGZvciBvdXIgc2hhcmVkIG1lbW9y eSBhcmVhCiAgKi8KQEAgLTUyMSwxMiArNjgwLDE2IEBAIEFzeW5jU2htZW1Jbml0KHZvaWQp CiAJCVFVRVVFX1NUT1BfUEFHRSA9IDA7CiAJCVFVRVVFX0ZJUlNUX0xJU1RFTkVSID0gSU5W QUxJRF9QUk9DX05VTUJFUjsKIAkJYXN5bmNRdWV1ZUNvbnRyb2wtPmxhc3RRdWV1ZUZpbGxX YXJuID0gMDsKKwkJYXN5bmNRdWV1ZUNvbnRyb2wtPmNoYW5uZWxIYXNoRFNBID0gRFNBX0hB TkRMRV9JTlZBTElEOworCQlhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhhc2hEU0ggPSBE U0hBU0hfSEFORExFX0lOVkFMSUQ7CiAJCWZvciAoaW50IGkgPSAwOyBpIDwgTWF4QmFja2Vu ZHM7IGkrKykKIAkJewogCQkJUVVFVUVfQkFDS0VORF9QSUQoaSkgPSBJbnZhbGlkUGlkOwog CQkJUVVFVUVfQkFDS0VORF9EQk9JRChpKSA9IEludmFsaWRPaWQ7CiAJCQlRVUVVRV9ORVhU X0xJU1RFTkVSKGkpID0gSU5WQUxJRF9QUk9DX05VTUJFUjsKIAkJCVNFVF9RVUVVRV9QT1Mo UVVFVUVfQkFDS0VORF9QT1MoaSksIDAsIDApOworCQkJUVVFVUVfQkFDS0VORF9XQUtFVVBf UEVORElORyhpKSA9IGZhbHNlOworCQkJUVVFVUVfQkFDS0VORF9JU19BRFZBTkNJTkcoaSkg PSBmYWxzZTsKIAkJfQogCX0KIApAQCAtNjU3LDYgKzgyMCw3IEBAIEFzeW5jX05vdGlmeShj b25zdCBjaGFyICpjaGFubmVsLCBjb25zdCBjaGFyICpwYXlsb2FkKQogCQlub3RpZmllcy0+ ZXZlbnRzID0gbGlzdF9tYWtlMShuKTsKIAkJLyogV2UgY2VydGFpbmx5IGRvbid0IG5lZWQg YSBoYXNodGFibGUgeWV0ICovCiAJCW5vdGlmaWVzLT5oYXNodGFiID0gTlVMTDsKKwkJbm90 aWZpZXMtPmNoYW5uZWxIYXNodGFiID0gTlVMTDsKIAkJbm90aWZpZXMtPnVwcGVyID0gcGVu ZGluZ05vdGlmaWVzOwogCQlwZW5kaW5nTm90aWZpZXMgPSBub3RpZmllczsKIAl9CkBAIC02 ODMsNyArODQ3LDcgQEAgQXN5bmNfTm90aWZ5KGNvbnN0IGNoYXIgKmNoYW5uZWwsIGNvbnN0 IGNoYXIgKnBheWxvYWQpCiAgKgkJQ29tbW9uIGNvZGUgZm9yIGxpc3RlbiwgdW5saXN0ZW4s IHVubGlzdGVuIGFsbCBjb21tYW5kcy4KICAqCiAgKgkJQWRkcyB0aGUgcmVxdWVzdCB0byB0 aGUgbGlzdCBvZiBwZW5kaW5nIGFjdGlvbnMuCi0gKgkJQWN0dWFsIHVwZGF0ZSBvZiB0aGUg bGlzdGVuQ2hhbm5lbHMgbGlzdCBoYXBwZW5zIGR1cmluZyB0cmFuc2FjdGlvbgorICoJCUFj dHVhbCB1cGRhdGUgb2YgdGhlIGxpc3RlbkNoYW5uZWxzSGFzaCBoYXBwZW5zIGR1cmluZyB0 cmFuc2FjdGlvbgogICoJCWNvbW1pdC4KICAqLwogc3RhdGljIHZvaWQKQEAgLTc4MywzMCAr OTQ3LDQ5IEBAIEFzeW5jX1VubGlzdGVuQWxsKHZvaWQpCiAgKiBTUUwgZnVuY3Rpb246IHJl dHVybiBhIHNldCBvZiB0aGUgY2hhbm5lbCBuYW1lcyB0aGlzIGJhY2tlbmQgaXMgYWN0aXZl bHkKICAqIGxpc3RlbmluZyB0by4KICAqCi0gKiBOb3RlOiB0aGlzIGNvZGluZyByZWxpZXMg b24gdGhlIGZhY3QgdGhhdCB0aGUgbGlzdGVuQ2hhbm5lbHMgbGlzdCBjYW5ub3QKKyAqIE5v dGU6IHRoaXMgY29kaW5nIHJlbGllcyBvbiB0aGUgZmFjdCB0aGF0IHRoZSBsaXN0ZW5DaGFu bmVsc0hhc2ggY2Fubm90CiAgKiBjaGFuZ2Ugd2l0aGluIGEgdHJhbnNhY3Rpb24uCiAgKi8K IERhdHVtCiBwZ19saXN0ZW5pbmdfY2hhbm5lbHMoUEdfRlVOQ1RJT05fQVJHUykKIHsKIAlG dW5jQ2FsbENvbnRleHQgKmZ1bmNjdHg7CisJSEFTSF9TRVFfU1RBVFVTICpzdGF0dXM7CiAK IAkvKiBzdHVmZiBkb25lIG9ubHkgb24gdGhlIGZpcnN0IGNhbGwgb2YgdGhlIGZ1bmN0aW9u ICovCiAJaWYgKFNSRl9JU19GSVJTVENBTEwoKSkKIAl7CisJCU1lbW9yeUNvbnRleHQgb2xk Y29udGV4dDsKKwogCQkvKiBjcmVhdGUgYSBmdW5jdGlvbiBjb250ZXh0IGZvciBjcm9zcy1j YWxsIHBlcnNpc3RlbmNlICovCiAJCWZ1bmNjdHggPSBTUkZfRklSU1RDQUxMX0lOSVQoKTsK KworCQkvKiBJbml0aWFsaXplIGhhc2ggdGFibGUgaXRlcmF0aW9uIGlmIHdlIGhhdmUgYW55 IGNoYW5uZWxzICovCisJCWlmIChsaXN0ZW5DaGFubmVsc0hhc2ggIT0gTlVMTCkKKwkJewor CQkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhmdW5jY3R4LT5tdWx0aV9j YWxsX21lbW9yeV9jdHgpOworCQkJc3RhdHVzID0gKEhBU0hfU0VRX1NUQVRVUyAqKSBwYWxs b2Moc2l6ZW9mKEhBU0hfU0VRX1NUQVRVUykpOworCQkJaGFzaF9zZXFfaW5pdChzdGF0dXMs IGxpc3RlbkNoYW5uZWxzSGFzaCk7CisJCQlmdW5jY3R4LT51c2VyX2ZjdHggPSBzdGF0dXM7 CisJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJCX0KKwkJZWxzZQor CQl7CisJCQlmdW5jY3R4LT51c2VyX2ZjdHggPSBOVUxMOworCQl9CiAJfQogCiAJLyogc3R1 ZmYgZG9uZSBvbiBldmVyeSBjYWxsIG9mIHRoZSBmdW5jdGlvbiAqLwogCWZ1bmNjdHggPSBT UkZfUEVSQ0FMTF9TRVRVUCgpOworCXN0YXR1cyA9IChIQVNIX1NFUV9TVEFUVVMgKikgZnVu Y2N0eC0+dXNlcl9mY3R4OwogCi0JaWYgKGZ1bmNjdHgtPmNhbGxfY250ciA8IGxpc3RfbGVu Z3RoKGxpc3RlbkNoYW5uZWxzKSkKKwlpZiAoc3RhdHVzICE9IE5VTEwpCiAJewotCQljaGFy CSAgICpjaGFubmVsID0gKGNoYXIgKikgbGlzdF9udGgobGlzdGVuQ2hhbm5lbHMsCi0JCQkJ CQkJCQkJCQlmdW5jY3R4LT5jYWxsX2NudHIpOworCQlzdHJ1Y3QgQ2hhbm5lbEhhc2ggKmVu dHJ5OwogCi0JCVNSRl9SRVRVUk5fTkVYVChmdW5jY3R4LCBDU3RyaW5nR2V0VGV4dERhdHVt KGNoYW5uZWwpKTsKKwkJZW50cnkgPSAoc3RydWN0IENoYW5uZWxIYXNoICopIGhhc2hfc2Vx X3NlYXJjaChzdGF0dXMpOworCQlpZiAoZW50cnkgIT0gTlVMTCkKKwkJCVNSRl9SRVRVUk5f TkVYVChmdW5jY3R4LCBDU3RyaW5nR2V0VGV4dERhdHVtKGVudHJ5LT5jaGFubmVsKSk7CiAJ fQogCiAJU1JGX1JFVFVSTl9ET05FKGZ1bmNjdHgpOwpAQCAtODk0LDYgKzEwNzcsMzYgQEAg UHJlQ29tbWl0X05vdGlmeSh2b2lkKQogCWlmIChwZW5kaW5nTm90aWZpZXMpCiAJewogCQlM aXN0Q2VsbCAgICpuZXh0Tm90aWZ5OworCQlib29sCQlmaXJzdEl0ZXJhdGlvbiA9IHRydWU7 CisKKwkJLyoKKwkJICogQnVpbGQgbGlzdCBvZiB1bmlxdWUgY2hhbm5lbHMgZm9yIFNpZ25h bEJhY2tlbmRzKCkuCisJCSAqCisJCSAqIElmIHdlIGhhdmUgYSBjaGFubmVsSGFzaHRhYiwg dXNlIGl0IHRvIGVmZmljaWVudGx5IGdldCB0aGUgdW5pcXVlCisJCSAqIGNoYW5uZWxzLiAg T3RoZXJ3aXNlLCBmYWxsIGJhY2sgdG8gdGhlIGxpbmVhciBhcHByb2FjaC4KKwkJICovCisJ CXBlbmRpbmdOb3RpZnlDaGFubmVscyA9IE5JTDsKKwkJaWYgKHBlbmRpbmdOb3RpZmllcy0+ Y2hhbm5lbEhhc2h0YWIgIT0gTlVMTCkKKwkJeworCQkJSEFTSF9TRVFfU1RBVFVTIHN0YXR1 czsKKwkJCXN0cnVjdCBDaGFubmVsSGFzaCAqY2hhbm5lbEVudHJ5OworCisJCQloYXNoX3Nl cV9pbml0KCZzdGF0dXMsIHBlbmRpbmdOb3RpZmllcy0+Y2hhbm5lbEhhc2h0YWIpOworCQkJ d2hpbGUgKChjaGFubmVsRW50cnkgPSAoc3RydWN0IENoYW5uZWxIYXNoICopIGhhc2hfc2Vx X3NlYXJjaCgmc3RhdHVzKSkgIT0gTlVMTCkKKwkJCQlwZW5kaW5nTm90aWZ5Q2hhbm5lbHMg PSBsYXBwZW5kKHBlbmRpbmdOb3RpZnlDaGFubmVscywgY2hhbm5lbEVudHJ5LT5jaGFubmVs KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIExpbmVhciBhcHByb2FjaCBmb3Igc21hbGwg bnVtYmVyIG9mIG5vdGlmaWNhdGlvbnMgKi8KKwkJCWZvcmVhY2hfcHRyKE5vdGlmaWNhdGlv biwgbiwgcGVuZGluZ05vdGlmaWVzLT5ldmVudHMpCisJCQl7CisJCQkJY2hhcgkgICAqY2hh bm5lbCA9IG4tPmRhdGE7CisKKwkJCQkvKiBBZGQgaWYgbm90IGFscmVhZHkgaW4gbGlzdCAq LworCQkJCWlmICghbGlzdF9tZW1iZXJfcHRyKHBlbmRpbmdOb3RpZnlDaGFubmVscywgY2hh bm5lbCkpCisJCQkJCXBlbmRpbmdOb3RpZnlDaGFubmVscyA9IGxhcHBlbmQocGVuZGluZ05v dGlmeUNoYW5uZWxzLCBjaGFubmVsKTsKKwkJCX0KKwkJfQogCiAJCS8qCiAJCSAqIE1ha2Ug c3VyZSB0aGF0IHdlIGhhdmUgYW4gWElEIGFzc2lnbmVkIHRvIHRoZSBjdXJyZW50IHRyYW5z YWN0aW9uLgpAQCAtOTIyLDYgKzExMzUsMjIgQEAgUHJlQ29tbWl0X05vdGlmeSh2b2lkKQog CQlMb2NrU2hhcmVkT2JqZWN0KERhdGFiYXNlUmVsYXRpb25JZCwgSW52YWxpZE9pZCwgMCwK IAkJCQkJCSBBY2Nlc3NFeGNsdXNpdmVMb2NrKTsKIAorCQkvKgorCQkgKiBGb3IgdGhlIGRp cmVjdCBhZHZhbmNlbWVudCBvcHRpbWl6YXRpb24gaW4gU2lnbmFsQmFja2VuZHMoKSwgd2UK KwkJICogbmVlZCB0byBlbnN1cmUgdGhhdCBubyBvdGhlciBiYWNrZW5kIGNhbiBpbnNlcnQg cXVldWUgZW50cmllcworCQkgKiBiZXR3ZWVuIHF1ZXVlSGVhZEJlZm9yZVdyaXRlIGFuZCBx dWV1ZUhlYWRBZnRlcldyaXRlLiAgVGhlCisJCSAqIGhlYXZ5d2VpZ2h0IGxvY2sgYWJvdmUg cHJvdmlkZXMgdGhpcyBndWFyYW50ZWUsIHNpbmNlIGl0IHNlcmlhbGl6ZXMKKwkJICogYWxs IHdyaXRlcnMuCisJCSAqCisJCSAqIE5vdGU6IGlmIHRoZSBoZWF2eXdlaWdodCBsb2NrIHdl cmUgZXZlciByZW1vdmVkIGZvciBzY2FsYWJpbGl0eQorCQkgKiByZWFzb25zLCB3ZSBjb3Vs ZCBhY2hpZXZlIHRoZSBzYW1lIGd1YXJhbnRlZSBieSBob2xkaW5nCisJCSAqIE5vdGlmeVF1 ZXVlTG9jayBpbiBFWENMVVNJVkUgbW9kZSBhY3Jvc3MgYWxsIG91ciBpbnNlcnRpb25zLCBy YXRoZXIKKwkJICogdGhhbiByZWxlYXNpbmcgYW5kIHJlYWNxdWlyaW5nIGl0IGZvciBlYWNo IHBhZ2UgYXMgd2UgZG8gYmVsb3cuCisJCSAqLworCisJCS8qIEluaXRpYWxpemUgcXVldWVI ZWFkQmVmb3JlV3JpdGUgdG8gYSBzYWZlIGRlZmF1bHQgKi8KKwkJU0VUX1FVRVVFX1BPUyhx dWV1ZUhlYWRCZWZvcmVXcml0ZSwgMCwgMCk7CisKIAkJLyogTm93IHB1c2ggdGhlIG5vdGlm aWNhdGlvbnMgaW50byB0aGUgcXVldWUgKi8KIAkJbmV4dE5vdGlmeSA9IGxpc3RfaGVhZChw ZW5kaW5nTm90aWZpZXMtPmV2ZW50cyk7CiAJCXdoaWxlIChuZXh0Tm90aWZ5ICE9IE5VTEwp CkBAIC05MzksMTIgKzExNjgsMjAgQEAgUHJlQ29tbWl0X05vdGlmeSh2b2lkKQogCQkJICog cG9pbnQgaW4gdGltZSB3ZSBjYW4gc3RpbGwgcm9sbCB0aGUgdHJhbnNhY3Rpb24gYmFjay4K IAkJCSAqLwogCQkJTFdMb2NrQWNxdWlyZShOb3RpZnlRdWV1ZUxvY2ssIExXX0VYQ0xVU0lW RSk7CisJCQlpZiAoZmlyc3RJdGVyYXRpb24pCisJCQl7CisJCQkJcXVldWVIZWFkQmVmb3Jl V3JpdGUgPSBRVUVVRV9IRUFEOworCQkJCWZpcnN0SXRlcmF0aW9uID0gZmFsc2U7CisJCQl9 CisKIAkJCWFzeW5jUXVldWVGaWxsV2FybmluZygpOwogCQkJaWYgKGFzeW5jUXVldWVJc0Z1 bGwoKSkKIAkJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9H UkFNX0xJTUlUX0VYQ0VFREVEKSwKIAkJCQkJCSBlcnJtc2coInRvbyBtYW55IG5vdGlmaWNh dGlvbnMgaW4gdGhlIE5PVElGWSBxdWV1ZSIpKSk7CiAJCQluZXh0Tm90aWZ5ID0gYXN5bmNR dWV1ZUFkZEVudHJpZXMobmV4dE5vdGlmeSk7CisJCQlxdWV1ZUhlYWRBZnRlcldyaXRlID0g UVVFVUVfSEVBRDsKKwogCQkJTFdMb2NrUmVsZWFzZShOb3RpZnlRdWV1ZUxvY2spOwogCQl9 CiAKQEAgLTk1Nyw3ICsxMTk0LDcgQEAgUHJlQ29tbWl0X05vdGlmeSh2b2lkKQogICoKICAq CQlUaGlzIGlzIGNhbGxlZCBhdCB0cmFuc2FjdGlvbiBjb21taXQsIGFmdGVyIGNvbW1pdHRp bmcgdG8gY2xvZy4KICAqCi0gKgkJVXBkYXRlIGxpc3RlbkNoYW5uZWxzIGFuZCBjbGVhciB0 cmFuc2FjdGlvbi1sb2NhbCBzdGF0ZS4KKyAqCQlVcGRhdGUgbGlzdGVuQ2hhbm5lbHNIYXNo IGFuZCBjbGVhciB0cmFuc2FjdGlvbi1sb2NhbCBzdGF0ZS4KICAqCiAgKgkJSWYgd2UgaXNz dWVkIGFueSBub3RpZmljYXRpb25zIGluIHRoZSB0cmFuc2FjdGlvbiwgc2VuZCBzaWduYWxz IHRvCiAgKgkJbGlzdGVuaW5nIGJhY2tlbmRzIChwb3NzaWJseSBpbmNsdWRpbmcgb3Vyc2Vs dmVzKSB0byBwcm9jZXNzIHRoZW0uCkBAIC0xMDAyLDcgKzEyMzksOCBAQCBBdENvbW1pdF9O b3RpZnkodm9pZCkKIAl9CiAKIAkvKiBJZiBubyBsb25nZXIgbGlzdGVuaW5nIHRvIGFueXRo aW5nLCBnZXQgb3V0IG9mIGxpc3RlbmVyIGFycmF5ICovCi0JaWYgKGFtUmVnaXN0ZXJlZExp c3RlbmVyICYmIGxpc3RlbkNoYW5uZWxzID09IE5JTCkKKwlpZiAoYW1SZWdpc3RlcmVkTGlz dGVuZXIgJiYKKwkJKGxpc3RlbkNoYW5uZWxzSGFzaCA9PSBOVUxMIHx8IGhhc2hfZ2V0X251 bV9lbnRyaWVzKGxpc3RlbkNoYW5uZWxzSGFzaCkgPT0gMCkpCiAJCWFzeW5jUXVldWVVbnJl Z2lzdGVyKCk7CiAKIAkvKgpAQCAtMTEzNSw1MCArMTM3MywxNDUgQEAgRXhlY19MaXN0ZW5Q cmVDb21taXQodm9pZCkKIHN0YXRpYyB2b2lkCiBFeGVjX0xpc3RlbkNvbW1pdChjb25zdCBj aGFyICpjaGFubmVsKQogewotCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwlDaGFubmVs SGFzaEtleSBrZXk7CisJQ2hhbm5lbEVudHJ5ICplbnRyeTsKKwlib29sCQlmb3VuZDsKKwlQ cm9jTnVtYmVyICpsaXN0ZW5lcnM7CiAKIAkvKiBEbyBub3RoaW5nIGlmIHdlIGFyZSBhbHJl YWR5IGxpc3RlbmluZyBvbiB0aGlzIGNoYW5uZWwgKi8KIAlpZiAoSXNMaXN0ZW5pbmdPbihj aGFubmVsKSkKIAkJcmV0dXJuOwogCiAJLyoKLQkgKiBBZGQgdGhlIG5ldyBjaGFubmVsIG5h bWUgdG8gbGlzdGVuQ2hhbm5lbHMuCisJICogQWRkIHRoZSBuZXcgY2hhbm5lbCBuYW1lIHRv IGxpc3RlbkNoYW5uZWxzSGFzaC4KIAkgKgogCSAqIFhYWCBJdCBpcyB0aGVvcmV0aWNhbGx5 IHBvc3NpYmxlIHRvIGdldCBhbiBvdXQtb2YtbWVtb3J5IGZhaWx1cmUgaGVyZSwKIAkgKiB3 aGljaCB3b3VsZCBiZSBiYWQgYmVjYXVzZSB3ZSBhbHJlYWR5IGNvbW1pdHRlZC4gIEZvciB0 aGUgbW9tZW50IGl0CiAJICogZG9lc24ndCBzZWVtIHdvcnRoIHRyeWluZyB0byBndWFyZCBh Z2FpbnN0IHRoYXQsIGJ1dCBtYXliZSBpbXByb3ZlIHRoaXMKIAkgKiBsYXRlci4KIAkgKi8K LQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcE1lbW9yeUNvbnRleHQp OwotCWxpc3RlbkNoYW5uZWxzID0gbGFwcGVuZChsaXN0ZW5DaGFubmVscywgcHN0cmR1cChj aGFubmVsKSk7Ci0JTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCWluaXRM aXN0ZW5DaGFubmVsc0hhc2goKTsKKwkodm9pZCkgaGFzaF9zZWFyY2gobGlzdGVuQ2hhbm5l bHNIYXNoLCBjaGFubmVsLCBIQVNIX0VOVEVSLCBOVUxMKTsKKworCS8qIE5vdyB1cGRhdGUg dGhlIHNoYXJlZCBjaGFubmVsSGFzaCBmb3IgU2lnbmFsQmFja2VuZHMoKSB0byB1c2UgKi8K Kwlpbml0Q2hhbm5lbEhhc2goKTsKKworCUNoYW5uZWxIYXNoUHJlcGFyZUtleSgma2V5LCBN eURhdGFiYXNlSWQsIGNoYW5uZWwpOworCisJLyoKKwkgKiBGb3IgbmV3IGVudHJpZXMsIHdl IGluaXRpYWxpemUgbGlzdGVuZXJzQXJyYXkgdG8gSW52YWxpZERzYVBvaW50ZXIgYXMgYQor CSAqIG1hcmtlci4gVGhpcyBoYW5kbGVzIGJvdGggdGhlIGluaXRpYWwgY3JlYXRpb24gYW5k IHBvdGVudGlhbCByZXRyeQorCSAqIGFmdGVyIE9PTS4KKwkgKi8KKwllbnRyeSA9IGRzaGFz aF9maW5kX29yX2luc2VydChjaGFubmVsSGFzaCwgJmtleSwgJmZvdW5kKTsKKworCWlmICgh Zm91bmQpCisJCWVudHJ5LT5saXN0ZW5lcnNBcnJheSA9IEludmFsaWREc2FQb2ludGVyOwor CisJaWYgKCFEc2FQb2ludGVySXNWYWxpZChlbnRyeS0+bGlzdGVuZXJzQXJyYXkpKQorCXsK KwkJLyogRmlyc3QgbGlzdGVuZXIgZm9yIHRoaXMgY2hhbm5lbCAqLworCQllbnRyeS0+bGlz dGVuZXJzQXJyYXkgPSBkc2FfYWxsb2NhdGUoY2hhbm5lbERTQSwKKwkJCQkJCQkJCQkJIHNp emVvZihQcm9jTnVtYmVyKSAqIElOSVRJQUxfTElTVEVORVJTX0FSUkFZX1NJWkUpOworCQll bnRyeS0+bnVtTGlzdGVuZXJzID0gMDsKKwkJZW50cnktPmFsbG9jYXRlZExpc3RlbmVycyA9 IElOSVRJQUxfTElTVEVORVJTX0FSUkFZX1NJWkU7CisJfQorCisJbGlzdGVuZXJzID0gKFBy b2NOdW1iZXIgKikgZHNhX2dldF9hZGRyZXNzKGNoYW5uZWxEU0EsCisJCQkJCQkJCQkJCSAg IGVudHJ5LT5saXN0ZW5lcnNBcnJheSk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IGVudHJ5 LT5udW1MaXN0ZW5lcnM7IGkrKykKKwl7CisJCWlmIChsaXN0ZW5lcnNbaV0gPT0gTXlQcm9j TnVtYmVyKQorCQl7CisJCQlkc2hhc2hfcmVsZWFzZV9sb2NrKGNoYW5uZWxIYXNoLCBlbnRy eSk7CisJCQlyZXR1cm47CQkJCS8qIEFscmVhZHkgcmVnaXN0ZXJlZCAqLworCQl9CisJfQor CisJaWYgKGVudHJ5LT5udW1MaXN0ZW5lcnMgPj0gZW50cnktPmFsbG9jYXRlZExpc3RlbmVy cykKKwl7CisJCWludAkJCW5ld19zaXplID0gZW50cnktPmFsbG9jYXRlZExpc3RlbmVycyAq IDI7CisJCWRzYV9wb2ludGVyIG5ld19hcnJheSA9IGRzYV9hbGxvY2F0ZShjaGFubmVsRFNB LAorCQkJCQkJCQkJCQkgc2l6ZW9mKFByb2NOdW1iZXIpICogbmV3X3NpemUpOworCQlQcm9j TnVtYmVyICpuZXdfbGlzdGVuZXJzID0gKFByb2NOdW1iZXIgKikgZHNhX2dldF9hZGRyZXNz KGNoYW5uZWxEU0EsCisJCQkJCQkJCQkJCQkJCQkJICAgbmV3X2FycmF5KTsKKworCQltZW1j cHkobmV3X2xpc3RlbmVycywgbGlzdGVuZXJzLAorCQkJICAgc2l6ZW9mKFByb2NOdW1iZXIp ICogZW50cnktPm51bUxpc3RlbmVycyk7CisKKwkJZHNhX2ZyZWUoY2hhbm5lbERTQSwgZW50 cnktPmxpc3RlbmVyc0FycmF5KTsKKwkJZW50cnktPmxpc3RlbmVyc0FycmF5ID0gbmV3X2Fy cmF5OworCQllbnRyeS0+YWxsb2NhdGVkTGlzdGVuZXJzID0gbmV3X3NpemU7CisJCWxpc3Rl bmVycyA9IG5ld19saXN0ZW5lcnM7CisJfQorCisJbGlzdGVuZXJzW2VudHJ5LT5udW1MaXN0 ZW5lcnNdID0gTXlQcm9jTnVtYmVyOworCWVudHJ5LT5udW1MaXN0ZW5lcnMrKzsKKworCWRz aGFzaF9yZWxlYXNlX2xvY2soY2hhbm5lbEhhc2gsIGVudHJ5KTsKIH0KIAogLyoKICAqIEV4 ZWNfVW5saXN0ZW5Db21taXQgLS0tIHN1YnJvdXRpbmUgZm9yIEF0Q29tbWl0X05vdGlmeQog ICoKLSAqIFJlbW92ZSB0aGUgc3BlY2lmaWVkIGNoYW5uZWwgbmFtZSBmcm9tIGxpc3RlbkNo YW5uZWxzLgorICoJCVVubGlzdGVuIHRoZSBzcGVjaWZpZWQgY2hhbm5lbCBmb3IgdGhpcyBi YWNrZW5kLgogICovCiBzdGF0aWMgdm9pZAogRXhlY19Vbmxpc3RlbkNvbW1pdChjb25zdCBj aGFyICpjaGFubmVsKQogewotCUxpc3RDZWxsICAgKnE7CisJQ2hhbm5lbEhhc2hLZXkga2V5 OworCUNoYW5uZWxFbnRyeSAqZW50cnk7CisJUHJvY051bWJlciAqbGlzdGVuZXJzOworCWlu dAkJCWk7CiAKIAlpZiAoVHJhY2Vfbm90aWZ5KQogCQllbG9nKERFQlVHMSwgIkV4ZWNfVW5s aXN0ZW5Db21taXQoJXMsJWQpIiwgY2hhbm5lbCwgTXlQcm9jUGlkKTsKIAotCWZvcmVhY2go cSwgbGlzdGVuQ2hhbm5lbHMpCisJLyogUmVtb3ZlIGZyb20gb3VyIGxvY2FsIGNhY2hlICov CisJaWYgKGxpc3RlbkNoYW5uZWxzSGFzaCAhPSBOVUxMKQorCQkodm9pZCkgaGFzaF9zZWFy Y2gobGlzdGVuQ2hhbm5lbHNIYXNoLCBjaGFubmVsLCBIQVNIX1JFTU9WRSwgTlVMTCk7CisK KwkvKiBOb3cgcmVtb3ZlIGZyb20gdGhlIHNoYXJlZCBjaGFubmVsSGFzaCAqLworCWlmIChj aGFubmVsSGFzaCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlDaGFubmVsSGFzaFByZXBhcmVL ZXkoJmtleSwgTXlEYXRhYmFzZUlkLCBjaGFubmVsKTsKKworCS8qIExvb2sgdXAgdGhlIGNo YW5uZWwgd2l0aCBleGNsdXNpdmUgbG9jayBzbyB3ZSBjYW4gbW9kaWZ5IGl0ICovCisJZW50 cnkgPSBkc2hhc2hfZmluZChjaGFubmVsSGFzaCwgJmtleSwgdHJ1ZSk7CisJaWYgKGVudHJ5 ID09IE5VTEwpCisJCXJldHVybjsKKworCWxpc3RlbmVycyA9IChQcm9jTnVtYmVyICopIGRz YV9nZXRfYWRkcmVzcyhjaGFubmVsRFNBLAorCQkJCQkJCQkJCQkgICBlbnRyeS0+bGlzdGVu ZXJzQXJyYXkpOworCisJZm9yIChpID0gMDsgaSA8IGVudHJ5LT5udW1MaXN0ZW5lcnM7IGkr KykKIAl7Ci0JCWNoYXIJICAgKmxjaGFuID0gKGNoYXIgKikgbGZpcnN0KHEpOwotCi0JCWlm IChzdHJjbXAobGNoYW4sIGNoYW5uZWwpID09IDApCisJCWlmIChsaXN0ZW5lcnNbaV0gPT0g TXlQcm9jTnVtYmVyKQogCQl7Ci0JCQlsaXN0ZW5DaGFubmVscyA9IGZvcmVhY2hfZGVsZXRl X2N1cnJlbnQobGlzdGVuQ2hhbm5lbHMsIHEpOwotCQkJcGZyZWUobGNoYW4pOwotCQkJYnJl YWs7CisJCQllbnRyeS0+bnVtTGlzdGVuZXJzLS07CisJCQlpZiAoaSA8IGVudHJ5LT5udW1M aXN0ZW5lcnMpCisJCQkJbWVtbW92ZSgmbGlzdGVuZXJzW2ldLCAmbGlzdGVuZXJzW2kgKyAx XSwKKwkJCQkJCXNpemVvZihQcm9jTnVtYmVyKSAqIChlbnRyeS0+bnVtTGlzdGVuZXJzIC0g aSkpOworCisJCQlpZiAoZW50cnktPm51bUxpc3RlbmVycyA9PSAwKQorCQkJeworCQkJCS8q IExhc3QgbGlzdGVuZXIgZm9yIHRoaXMgY2hhbm5lbCAqLworCQkJCWRzYV9mcmVlKGNoYW5u ZWxEU0EsIGVudHJ5LT5saXN0ZW5lcnNBcnJheSk7CisJCQkJZHNoYXNoX2RlbGV0ZV9lbnRy eShjaGFubmVsSGFzaCwgZW50cnkpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWRzaGFz aF9yZWxlYXNlX2xvY2soY2hhbm5lbEhhc2gsIGVudHJ5KTsKKwkJCX0KKworCQkJcmV0dXJu OwogCQl9CiAJfQogCisJZHNoYXNoX3JlbGVhc2VfbG9jayhjaGFubmVsSGFzaCwgZW50cnkp OworCiAJLyoKIAkgKiBXZSBkbyBub3QgY29tcGxhaW4gYWJvdXQgdW5saXN0ZW5pbmcgc29t ZXRoaW5nIG5vdCBiZWluZyBsaXN0ZW5lZDsKIAkgKiBzaG91bGQgd2U/CkBAIC0xMTkzLDM0 ICsxNTI2LDY4IEBAIEV4ZWNfVW5saXN0ZW5Db21taXQoY29uc3QgY2hhciAqY2hhbm5lbCkK IHN0YXRpYyB2b2lkCiBFeGVjX1VubGlzdGVuQWxsQ29tbWl0KHZvaWQpCiB7CisJZHNoYXNo X3NlcV9zdGF0dXMgc3RhdHVzOworCUNoYW5uZWxFbnRyeSAqZW50cnk7CisKIAlpZiAoVHJh Y2Vfbm90aWZ5KQogCQllbG9nKERFQlVHMSwgIkV4ZWNfVW5saXN0ZW5BbGxDb21taXQoJWQp IiwgTXlQcm9jUGlkKTsKIAotCWxpc3RfZnJlZV9kZWVwKGxpc3RlbkNoYW5uZWxzKTsKLQls aXN0ZW5DaGFubmVscyA9IE5JTDsKKwkvKiBDbGVhciBvdXIgbG9jYWwgY2FjaGUgKi8KKwlp ZiAobGlzdGVuQ2hhbm5lbHNIYXNoICE9IE5VTEwpCisJeworCQloYXNoX2Rlc3Ryb3kobGlz dGVuQ2hhbm5lbHNIYXNoKTsKKwkJbGlzdGVuQ2hhbm5lbHNIYXNoID0gTlVMTDsKKwl9CisK KwkvKiBOb3cgcmVtb3ZlIGZyb20gdGhlIHNoYXJlZCBjaGFubmVsSGFzaCAqLworCWlmIChj aGFubmVsSGFzaCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlkc2hhc2hfc2VxX2luaXQoJnN0 YXR1cywgY2hhbm5lbEhhc2gsIHRydWUpOworCXdoaWxlICgoZW50cnkgPSBkc2hhc2hfc2Vx X25leHQoJnN0YXR1cykpICE9IE5VTEwpCisJeworCQlpZiAoZW50cnktPmtleS5kYm9pZCA9 PSBNeURhdGFiYXNlSWQpCisJCXsKKwkJCVByb2NOdW1iZXIgKmxpc3RlbmVyczsKKwkJCWlu dAkJCWk7CisKKwkJCWxpc3RlbmVycyA9IChQcm9jTnVtYmVyICopIGRzYV9nZXRfYWRkcmVz cyhjaGFubmVsRFNBLAorCQkJCQkJCQkJCQkJCSAgIGVudHJ5LT5saXN0ZW5lcnNBcnJheSk7 CisKKwkJCWZvciAoaSA9IDA7IGkgPCBlbnRyeS0+bnVtTGlzdGVuZXJzOyBpKyspCisJCQl7 CisJCQkJaWYgKGxpc3RlbmVyc1tpXSA9PSBNeVByb2NOdW1iZXIpCisJCQkJeworCQkJCQll bnRyeS0+bnVtTGlzdGVuZXJzLS07CisJCQkJCWlmIChpIDwgZW50cnktPm51bUxpc3RlbmVy cykKKwkJCQkJCW1lbW1vdmUoJmxpc3RlbmVyc1tpXSwgJmxpc3RlbmVyc1tpICsgMV0sCisJ CQkJCQkJCXNpemVvZihQcm9jTnVtYmVyKSAqIChlbnRyeS0+bnVtTGlzdGVuZXJzIC0gaSkp OworCisJCQkJCWlmIChlbnRyeS0+bnVtTGlzdGVuZXJzID09IDApCisJCQkJCXsKKwkJCQkJ CWRzYV9mcmVlKGNoYW5uZWxEU0EsIGVudHJ5LT5saXN0ZW5lcnNBcnJheSk7CisJCQkJCQlk c2hhc2hfZGVsZXRlX2N1cnJlbnQoJnN0YXR1cyk7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJ CQkJfQorCQkJfQorCQl9CisJfQorCWRzaGFzaF9zZXFfdGVybSgmc3RhdHVzKTsKIH0KIAog LyoKICAqIFRlc3Qgd2hldGhlciB3ZSBhcmUgYWN0aXZlbHkgbGlzdGVuaW5nIG9uIHRoZSBn aXZlbiBjaGFubmVsIG5hbWUuCiAgKgogICogTm90ZTogdGhpcyBmdW5jdGlvbiBpcyBleGVj dXRlZCBmb3IgZXZlcnkgbm90aWZpY2F0aW9uIGZvdW5kIGluIHRoZSBxdWV1ZS4KLSAqIFBl cmhhcHMgaXQgaXMgd29ydGggZnVydGhlciBvcHRpbWl6YXRpb24sIGVnIGNvbnZlcnQgdGhl IGxpc3QgdG8gYSBzb3J0ZWQKLSAqIGFycmF5IHNvIHdlIGNhbiBiaW5hcnktc2VhcmNoIGl0 LiAgSW4gcHJhY3RpY2UgdGhlIGxpc3QgaXMgbGlrZWx5IHRvIGJlCi0gKiBmYWlybHkgc2hv cnQsIHRob3VnaC4KICAqLwogc3RhdGljIGJvb2wKIElzTGlzdGVuaW5nT24oY29uc3QgY2hh ciAqY2hhbm5lbCkKIHsKLQlMaXN0Q2VsbCAgICpwOworCWlmIChsaXN0ZW5DaGFubmVsc0hh c2ggPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOwogCi0JZm9yZWFjaChwLCBsaXN0ZW5DaGFu bmVscykKLQl7Ci0JCWNoYXIJICAgKmxjaGFuID0gKGNoYXIgKikgbGZpcnN0KHApOwotCi0J CWlmIChzdHJjbXAobGNoYW4sIGNoYW5uZWwpID09IDApCi0JCQlyZXR1cm4gdHJ1ZTsKLQl9 Ci0JcmV0dXJuIGZhbHNlOworCXJldHVybiAoaGFzaF9zZWFyY2gobGlzdGVuQ2hhbm5lbHNI YXNoLCBjaGFubmVsLCBIQVNIX0ZJTkQsIE5VTEwpICE9IE5VTEwpOwogfQogCiAvKgpAQCAt MTIzMCw3ICsxNTk3LDcgQEAgSXNMaXN0ZW5pbmdPbihjb25zdCBjaGFyICpjaGFubmVsKQog c3RhdGljIHZvaWQKIGFzeW5jUXVldWVVbnJlZ2lzdGVyKHZvaWQpCiB7Ci0JQXNzZXJ0KGxp c3RlbkNoYW5uZWxzID09IE5JTCk7CS8qIGVsc2UgY2FsbGVyIGVycm9yICovCisJQXNzZXJ0 KGxpc3RlbkNoYW5uZWxzSGFzaCA9PSBOVUxMIHx8IGhhc2hfZ2V0X251bV9lbnRyaWVzKGxp c3RlbkNoYW5uZWxzSGFzaCkgPT0gMCk7CS8qIGVsc2UgY2FsbGVyIGVycm9yICovCiAKIAlp ZiAoIWFtUmVnaXN0ZXJlZExpc3RlbmVyKQkvKiBub3RoaW5nIHRvIGRvICovCiAJCXJldHVy bjsKQEAgLTEyNDIsNiArMTYwOSw3IEBAIGFzeW5jUXVldWVVbnJlZ2lzdGVyKHZvaWQpCiAJ LyogTWFyayBvdXIgZW50cnkgYXMgaW52YWxpZCAqLwogCVFVRVVFX0JBQ0tFTkRfUElEKE15 UHJvY051bWJlcikgPSBJbnZhbGlkUGlkOwogCVFVRVVFX0JBQ0tFTkRfREJPSUQoTXlQcm9j TnVtYmVyKSA9IEludmFsaWRPaWQ7CisJUVVFVUVfQkFDS0VORF9XQUtFVVBfUEVORElORyhN eVByb2NOdW1iZXIpID0gZmFsc2U7CiAJLyogYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0 ICovCiAJaWYgKFFVRVVFX0ZJUlNUX0xJU1RFTkVSID09IE15UHJvY051bWJlcikKIAkJUVVF VUVfRklSU1RfTElTVEVORVIgPSBRVUVVRV9ORVhUX0xJU1RFTkVSKE15UHJvY051bWJlcik7 CkBAIC0xNTY1LDEyICsxOTMzLDE1IEBAIGFzeW5jUXVldWVGaWxsV2FybmluZyh2b2lkKQog LyoKICAqIFNlbmQgc2lnbmFscyB0byBsaXN0ZW5pbmcgYmFja2VuZHMuCiAgKgotICogTm9y bWFsbHkgd2Ugc2lnbmFsIG9ubHkgYmFja2VuZHMgaW4gb3VyIG93biBkYXRhYmFzZSwgc2lu Y2Ugb25seSB0aG9zZQotICogYmFja2VuZHMgY291bGQgYmUgaW50ZXJlc3RlZCBpbiBub3Rp ZmllcyB3ZSBzZW5kLiAgSG93ZXZlciwgaWYgdGhlcmUncwotICogbm90aWZ5IHRyYWZmaWMg aW4gb3VyIGRhdGFiYXNlIGJ1dCBubyB0cmFmZmljIGluIGFub3RoZXIgZGF0YWJhc2UgdGhh dAotICogZG9lcyBoYXZlIGxpc3RlbmVyKHMpLCB0aG9zZSBsaXN0ZW5lcnMgd2lsbCBmYWxs IGZ1cnRoZXIgYW5kIGZ1cnRoZXIKLSAqIGJlaGluZC4gIFdha2VuIHRoZW0gYW55d2F5IGlm IHRoZXkncmUgZmFyIGVub3VnaCBiZWhpbmQsIHNvIHRoYXQgdGhleSdsbAotICogYWR2YW5j ZSB0aGVpciBxdWV1ZSBwb3NpdGlvbiBwb2ludGVycywgYWxsb3dpbmcgdGhlIGdsb2JhbCB0 YWlsIHRvIGFkdmFuY2UuCisgKiBOb3JtYWxseSB3ZSBzaWduYWwgb25seSBiYWNrZW5kcyBp biBvdXIgb3duIGRhdGFiYXNlLCB0aGF0IGFyZQorICogbGlzdGVuaW5nIG9uIHRoZSBjaGFu bmVscyB3aXRoIHBlbmRpbmcgbm90aWZpZXMsIHNpbmNlIG9ubHkgdGhvc2UKKyAqIGJhY2tl bmRzIGFyZSBpbnRlcmVzdGVkIGluIG5vdGlmaWVzIHdlIHNlbmQuCisgKgorICogQmFja2Vu ZHMgdGhhdCBhcmUga25vd24gdG8gc3RpbGwgYmUgcG9zaXRpb25lZCBhdCB0aGUgcXVldWUg aGVhZAorICogZnJvbSBiZWZvcmUgb3VyIGNvbW1pdCBjYW4gYmUgc2FmZWx5IGFkdmFuY2Vk IGRpcmVjdGx5IHRvIHRoZSBuZXcKKyAqIGhlYWQsIHNpbmNlIHRoZSBxdWV1ZSByZWdpb24g d2Ugd3JvdGUgaXMga25vd24gdG8gY29udGFpbiBvbmx5IG91cgorICogb3duIG5vdGlmaWNh dGlvbnMuICBUaGlzIGF2b2lkcyB1bm5lY2Vzc2FyeSB3YWtldXBzIHdoZW4gdGhlcmUgaXMK KyAqIG5vdGhpbmcgb2YgaW50ZXJlc3QgdG8gdGhlbS4KICAqCiAgKiBTaW5jZSB3ZSBrbm93 IHRoZSBQcm9jTnVtYmVyIGFuZCB0aGUgUGlkIHRoZSBzaWduYWxpbmcgaXMgcXVpdGUgY2hl YXAuCiAgKgpAQCAtMTU4Myw2ICsxOTU0LDEzIEBAIFNpZ25hbEJhY2tlbmRzKHZvaWQpCiAJ aW50MzIJICAgKnBpZHM7CiAJUHJvY051bWJlciAqcHJvY25vczsKIAlpbnQJCQljb3VudDsK KwlMaXN0Q2VsbCAgICpsYzsKKworCS8qCisJICogQXR0YWNoIHRvIHRoZSBjaGFubmVsIGhh c2ggaWYgbmVlZGVkLiAgV2UgbWlnaHQgbm90IGhhdmUgb25lIGlmIHRoaXMKKwkgKiBiYWNr ZW5kIGhhc24ndCBkb25lIExJU1RFTiwgYnV0IHdlIG5lZWQgaXQgdG8gZmluZCBsaXN0ZW5l cnMuCisJICovCisJaW5pdENoYW5uZWxIYXNoKCk7CiAKIAkvKgogCSAqIElkZW50aWZ5IGJh Y2tlbmRzIHRoYXQgd2UgbmVlZCB0byBzaWduYWwuICBXZSBkb24ndCB3YW50IHRvIHNlbmQK QEAgLTE1OTcsMzYgKzE5NzUsOTkgQEAgU2lnbmFsQmFja2VuZHModm9pZCkKIAljb3VudCA9 IDA7CiAKIAlMV0xvY2tBY3F1aXJlKE5vdGlmeVF1ZXVlTG9jaywgTFdfRVhDTFVTSVZFKTsK LQlmb3IgKFByb2NOdW1iZXIgaSA9IFFVRVVFX0ZJUlNUX0xJU1RFTkVSOyBpICE9IElOVkFM SURfUFJPQ19OVU1CRVI7IGkgPSBRVUVVRV9ORVhUX0xJU1RFTkVSKGkpKQorCWZvcmVhY2go bGMsIHBlbmRpbmdOb3RpZnlDaGFubmVscykKIAl7Ci0JCWludDMyCQlwaWQgPSBRVUVVRV9C QUNLRU5EX1BJRChpKTsKLQkJUXVldWVQb3NpdGlvbiBwb3M7CisJCWNoYXIJICAgKmNoYW5u ZWwgPSAoY2hhciAqKSBsZmlyc3QobGMpOworCQlDaGFubmVsRW50cnkgKmVudHJ5ID0gTlVM TDsKKwkJUHJvY051bWJlciAqbGlzdGVuZXJzOwogCi0JCUFzc2VydChwaWQgIT0gSW52YWxp ZFBpZCk7Ci0JCXBvcyA9IFFVRVVFX0JBQ0tFTkRfUE9TKGkpOwotCQlpZiAoUVVFVUVfQkFD S0VORF9EQk9JRChpKSA9PSBNeURhdGFiYXNlSWQpCisJCWlmIChjaGFubmVsSGFzaCAhPSBO VUxMKQogCQl7Ci0JCQkvKgotCQkJICogQWx3YXlzIHNpZ25hbCBsaXN0ZW5lcnMgaW4gb3Vy IG93biBkYXRhYmFzZSwgdW5sZXNzIHRoZXkncmUKLQkJCSAqIGFscmVhZHkgY2F1Z2h0IHVw ICh1bmxpa2VseSwgYnV0IHBvc3NpYmxlKS4KLQkJCSAqLworCQkJQ2hhbm5lbEhhc2hLZXkg a2V5OworCisJCQlDaGFubmVsSGFzaFByZXBhcmVLZXkoJmtleSwgTXlEYXRhYmFzZUlkLCBj aGFubmVsKTsKKwkJCWVudHJ5ID0gZHNoYXNoX2ZpbmQoY2hhbm5lbEhhc2gsICZrZXksIGZh bHNlKTsKKwkJfQorCisJCWlmIChlbnRyeSA9PSBOVUxMKQorCQkJY29udGludWU7CQkJLyog Tm8gbGlzdGVuZXJzIHJlZ2lzdGVyZWQgZm9yIHRoaXMgY2hhbm5lbCAqLworCisJCWxpc3Rl bmVycyA9IChQcm9jTnVtYmVyICopIGRzYV9nZXRfYWRkcmVzcyhjaGFubmVsRFNBLAorCQkJ CQkJCQkJCQkJICAgZW50cnktPmxpc3RlbmVyc0FycmF5KTsKKworCQlmb3IgKGludCBqID0g MDsgaiA8IGVudHJ5LT5udW1MaXN0ZW5lcnM7IGorKykKKwkJeworCQkJUHJvY051bWJlcglp ID0gbGlzdGVuZXJzW2pdOworCQkJaW50MzIJCXBpZDsKKwkJCVF1ZXVlUG9zaXRpb24gcG9z OworCisJCQlpZiAoUVVFVUVfQkFDS0VORF9XQUtFVVBfUEVORElORyhpKSkKKwkJCQljb250 aW51ZTsKKworCQkJcG9zID0gUVVFVUVfQkFDS0VORF9QT1MoaSk7CisJCQlwaWQgPSBRVUVV RV9CQUNLRU5EX1BJRChpKTsKKworCQkJLyogU2tpcCBpZiBjYXVnaHQgdXAgKi8KIAkJCWlm IChRVUVVRV9QT1NfRVFVQUwocG9zLCBRVUVVRV9IRUFEKSkKIAkJCQljb250aW51ZTsKKwor CQkJQXNzZXJ0KHBpZCAhPSBJbnZhbGlkUGlkKTsKKworCQkJUVVFVUVfQkFDS0VORF9XQUtF VVBfUEVORElORyhpKSA9IHRydWU7CisJCQlwaWRzW2NvdW50XSA9IHBpZDsKKwkJCXByb2Nu b3NbY291bnRdID0gaTsKKwkJCWNvdW50Kys7CiAJCX0KLQkJZWxzZQorCisJCWRzaGFzaF9y ZWxlYXNlX2xvY2soY2hhbm5lbEhhc2gsIGVudHJ5KTsKKwl9CisKKwkvKgorCSAqIERpcmVj dCBhZHZhbmNlbWVudDogYXZvaWQgd2FraW5nIG5vbi1jYXVnaHQgdXAgYmFja2VuZHMgdGhh dCBhcmVuJ3QKKwkgKiBpbnRlcmVzdGVkIGluIG91ciBub3RpZmljYXRpb25zLgorCSAqLwor CWlmIChwZW5kaW5nTm90aWZpZXMgIT0gTlVMTCkKKwl7CisJCWZvciAoUHJvY051bWJlciBp ID0gUVVFVUVfRklSU1RfTElTVEVORVI7CisJCQkgaSAhPSBJTlZBTElEX1BST0NfTlVNQkVS OworCQkJIGkgPSBRVUVVRV9ORVhUX0xJU1RFTkVSKGkpKQogCQl7CisJCQlRdWV1ZVBvc2l0 aW9uIHBvczsKKwkJCWludDMyCQlwaWQ7CisKKwkJCWlmIChRVUVVRV9CQUNLRU5EX1dBS0VV UF9QRU5ESU5HKGkpKQorCQkJCWNvbnRpbnVlOworCisJCQlwb3MgPSBRVUVVRV9CQUNLRU5E X1BPUyhpKTsKKwkJCXBpZCA9IFFVRVVFX0JBQ0tFTkRfUElEKGkpOworCiAJCQkvKgotCQkJ ICogTGlzdGVuZXJzIGluIG90aGVyIGRhdGFiYXNlcyBzaG91bGQgYmUgc2lnbmFsZWQgb25s eSBpZiB0aGV5Ci0JCQkgKiBhcmUgZmFyIGJlaGluZC4KKwkJCSAqIFdlIG5lZWQgdG8gc2ln bmFsIGFkdmFuY2luZyBsaXN0ZW5pbmcgYmFja2VuZHMgc2luY2Ugd2UKKwkJCSAqIGRvbid0 IGtub3cgd2hlcmUgdGhleSB3aWxsIHN0b3AgYWR2YW5jaW5nLiAgV2UgYWxzbyBuZWVkCisJ CQkgKiB0byBzaWduYWwgbGlzdGVuaW5nIGJhY2tlbmRzIHRoYXQgYXJlIGlkbGUgYXQgYSBw b3NpdGlvbgorCQkJICogYmVmb3JlIHRoZSBvbGQgcXVldWUgaGVhZCBzaW5jZSB0aGV5IGNv dWxkIGJlIGludGVyZXN0ZWQKKwkJCSAqIGluIHRoZSBtZXNzYWdlcyBpbi1iZXR3ZWVuLgor CQkJICoKKwkJCSAqIExpc3RlbmluZyBiYWNrZW5kcyB0aGF0IGFyZSBub3QgYWR2YW5jaW5n IGFuZCBhcmUgc3RhdGlvbmFyeSBhdAorCQkJICogYSBwb3NpdGlvbiBzb21ld2hlcmUgaW4g dGhlIHJhbmdlIHdlIGp1c3Qgd3JvdGUsIGNhbiBzYWZlbHkgYmUKKwkJCSAqIGRpcmVjdCBh ZHZhbmNlZCB0byB0aGUgbmV3IHF1ZXVlIGhlYWQsIHNpbmNlIHdlIGtub3cgdGhhdCB0aGV5 CisJCQkgKiBhcmUgbm90IGludGVyZXN0ZWQgaW4gb3VyIG1lc3NhZ2VzLgogCQkJICovCi0J CQlpZiAoYXN5bmNRdWV1ZVBhZ2VEaWZmKFFVRVVFX1BPU19QQUdFKFFVRVVFX0hFQUQpLAot CQkJCQkJCQkgICBRVUVVRV9QT1NfUEFHRShwb3MpKSA8IFFVRVVFX0NMRUFOVVBfREVMQVkp Ci0JCQkJY29udGludWU7CisJCQlpZiAoUVVFVUVfQkFDS0VORF9JU19BRFZBTkNJTkcoaSkp CisJCQl7CisJCQkJQXNzZXJ0KHBpZCAhPSBJbnZhbGlkUGlkKTsKKworCQkJCVFVRVVFX0JB Q0tFTkRfV0FLRVVQX1BFTkRJTkcoaSkgPSB0cnVlOworCQkJCXBpZHNbY291bnRdID0gcGlk OworCQkJCXByb2Nub3NbY291bnRdID0gaTsKKwkJCQljb3VudCsrOworCQkJfQorCQkJZWxz ZSBpZiAoIVFVRVVFX1BPU19QUkVDRURFUyhwb3MsIHF1ZXVlSGVhZEJlZm9yZVdyaXRlKSAm JgorCQkJCQkgUVVFVUVfUE9TX1BSRUNFREVTKHBvcywgcXVldWVIZWFkQWZ0ZXJXcml0ZSkp CisJCQl7CisJCQkJUVVFVUVfQkFDS0VORF9QT1MoaSkgPSBxdWV1ZUhlYWRBZnRlcldyaXRl OworCQkJfQogCQl9Ci0JCS8qIE9LLCBuZWVkIHRvIHNpZ25hbCB0aGlzIG9uZSAqLwotCQlw aWRzW2NvdW50XSA9IHBpZDsKLQkJcHJvY25vc1tjb3VudF0gPSBpOwotCQljb3VudCsrOwog CX0KIAlMV0xvY2tSZWxlYXNlKE5vdGlmeVF1ZXVlTG9jayk7CiAKQEAgLTE2NzMsOSArMjEx NCwxMCBAQCBBdEFib3J0X05vdGlmeSh2b2lkKQogCS8qCiAJICogSWYgd2UgTElTVEVOIGJ1 dCB0aGVuIHJvbGwgYmFjayB0aGUgdHJhbnNhY3Rpb24gYWZ0ZXIgUHJlQ29tbWl0X05vdGlm eSwKIAkgKiB3ZSBoYXZlIHJlZ2lzdGVyZWQgYXMgYSBsaXN0ZW5lciBidXQgaGF2ZSBub3Qg bWFkZSBhbnkgZW50cnkgaW4KLQkgKiBsaXN0ZW5DaGFubmVscy4gIEluIHRoYXQgY2FzZSwg ZGVyZWdpc3RlciBhZ2Fpbi4KKwkgKiBsaXN0ZW5DaGFubmVsc0hhc2guICBJbiB0aGF0IGNh c2UsIGRlcmVnaXN0ZXIgYWdhaW4uCiAJICovCi0JaWYgKGFtUmVnaXN0ZXJlZExpc3RlbmVy ICYmIGxpc3RlbkNoYW5uZWxzID09IE5JTCkKKwlpZiAoYW1SZWdpc3RlcmVkTGlzdGVuZXIg JiYKKwkJKGxpc3RlbkNoYW5uZWxzSGFzaCA9PSBOVUxMIHx8IGhhc2hfZ2V0X251bV9lbnRy aWVzKGxpc3RlbkNoYW5uZWxzSGFzaCkgPT0gMCkpCiAJCWFzeW5jUXVldWVVbnJlZ2lzdGVy KCk7CiAKIAkvKiBBbmQgY2xlYW4gdXAgKi8KQEAgLTE4NjEsMjAgKzIzMDMsMjggQEAgYXN5 bmNRdWV1ZVJlYWRBbGxOb3RpZmljYXRpb25zKHZvaWQpCiAJCUFzeW5jUXVldWVFbnRyeSBh bGlnbjsKIAl9CQkJcGFnZV9idWZmZXI7CiAKLQkvKiBGZXRjaCBjdXJyZW50IHN0YXRlICov CisJLyoKKwkgKiBGZXRjaCBjdXJyZW50IHN0YXRlLCBpbmRpY2F0ZSB0byBvdGhlcnMgdGhh dCB3ZSBoYXZlIHdva2VuIHVwLCBhbmQgdGhhdAorCSAqIHdlIG5vdyB3aWxsIGJlIGFkdmFu Y2luZyBvdXIgcG9zaXRpb24uCisJICovCiAJTFdMb2NrQWNxdWlyZShOb3RpZnlRdWV1ZUxv Y2ssIExXX1NIQVJFRCk7CiAJLyogQXNzZXJ0IGNoZWNrcyB0aGF0IHdlIGhhdmUgYSB2YWxp ZCBzdGF0ZSBlbnRyeSAqLwogCUFzc2VydChNeVByb2NQaWQgPT0gUVVFVUVfQkFDS0VORF9Q SUQoTXlQcm9jTnVtYmVyKSk7CisJUVVFVUVfQkFDS0VORF9XQUtFVVBfUEVORElORyhNeVBy b2NOdW1iZXIpID0gZmFsc2U7CisJaGVhZCA9IFFVRVVFX0hFQUQ7CiAJcG9zID0gUVVFVUVf QkFDS0VORF9QT1MoTXlQcm9jTnVtYmVyKTsKLQloZWFkID0gUVVFVUVfSEVBRDsKLQlMV0xv Y2tSZWxlYXNlKE5vdGlmeVF1ZXVlTG9jayk7CiAKIAlpZiAoUVVFVUVfUE9TX0VRVUFMKHBv cywgaGVhZCkpCiAJewogCQkvKiBOb3RoaW5nIHRvIGRvLCB3ZSBoYXZlIHJlYWQgYWxsIG5v dGlmaWNhdGlvbnMgYWxyZWFkeS4gKi8KKwkJTFdMb2NrUmVsZWFzZShOb3RpZnlRdWV1ZUxv Y2spOwogCQlyZXR1cm47CiAJfQogCisJUVVFVUVfQkFDS0VORF9JU19BRFZBTkNJTkcoTXlQ cm9jTnVtYmVyKSA9IHRydWU7CisKKwlMV0xvY2tSZWxlYXNlKE5vdGlmeVF1ZXVlTG9jayk7 CisKIAkvKi0tLS0tLS0tLS0KIAkgKiBHZXQgc25hcHNob3Qgd2UnbGwgdXNlIHRvIGRlY2lk ZSB3aGljaCB4YWN0cyBhcmUgc3RpbGwgaW4gcHJvZ3Jlc3MuCiAJICogVGhpcyBpcyB0cmlj a2llciB0aGFuIGl0IG1pZ2h0IHNlZW0sIGJlY2F1c2Ugb2YgcmFjZSBjb25kaXRpb25zLgpA QCAtMTk4Nyw2ICsyNDM3LDggQEAgYXN5bmNRdWV1ZVJlYWRBbGxOb3RpZmljYXRpb25zKHZv aWQpCiAJewogCQkvKiBVcGRhdGUgc2hhcmVkIHN0YXRlICovCiAJCUxXTG9ja0FjcXVpcmUo Tm90aWZ5UXVldWVMb2NrLCBMV19TSEFSRUQpOworCisJCVFVRVVFX0JBQ0tFTkRfSVNfQURW QU5DSU5HKE15UHJvY051bWJlcikgPSBmYWxzZTsKIAkJUVVFVUVfQkFDS0VORF9QT1MoTXlQ cm9jTnVtYmVyKSA9IHBvczsKIAkJTFdMb2NrUmVsZWFzZShOb3RpZnlRdWV1ZUxvY2spOwog CX0KQEAgLTIxODYsNyArMjYzOCw3IEBAIFByb2Nlc3NJbmNvbWluZ05vdGlmeShib29sIGZs dXNoKQogCW5vdGlmeUludGVycnVwdFBlbmRpbmcgPSBmYWxzZTsKIAogCS8qIERvIG5vdGhp bmcgZWxzZSBpZiB3ZSBhcmVuJ3QgYWN0aXZlbHkgbGlzdGVuaW5nICovCi0JaWYgKGxpc3Rl bkNoYW5uZWxzID09IE5JTCkKKwlpZiAobGlzdGVuQ2hhbm5lbHNIYXNoID09IE5VTEwgfHwg aGFzaF9nZXRfbnVtX2VudHJpZXMobGlzdGVuQ2hhbm5lbHNIYXNoKSA9PSAwKQogCQlyZXR1 cm47CiAKIAlpZiAoVHJhY2Vfbm90aWZ5KQpAQCAtMjI5MCwxMyArMjc0MiwxNSBAQCBBZGRF dmVudFRvUGVuZGluZ05vdGlmaWVzKE5vdGlmaWNhdGlvbiAqbikKIHsKIAlBc3NlcnQocGVu ZGluZ05vdGlmaWVzLT5ldmVudHMgIT0gTklMKTsKIAotCS8qIENyZWF0ZSB0aGUgaGFzaCB0 YWJsZSBpZiBpdCdzIHRpbWUgdG8gKi8KKwkvKiBDcmVhdGUgdGhlIGhhc2ggdGFibGVzIGlm IGl0J3MgdGltZSB0byAqLwogCWlmIChsaXN0X2xlbmd0aChwZW5kaW5nTm90aWZpZXMtPmV2 ZW50cykgPj0gTUlOX0hBU0hBQkxFX05PVElGSUVTICYmCiAJCXBlbmRpbmdOb3RpZmllcy0+ aGFzaHRhYiA9PSBOVUxMKQogCXsKIAkJSEFTSENUTAkJaGFzaF9jdGw7CiAJCUxpc3RDZWxs ICAgKmw7CiAKKwkJQXNzZXJ0KHBlbmRpbmdOb3RpZmllcy0+Y2hhbm5lbEhhc2h0YWIgPT0g TlVMTCk7CisKIAkJLyogQ3JlYXRlIHRoZSBoYXNoIHRhYmxlICovCiAJCWhhc2hfY3RsLmtl eXNpemUgPSBzaXplb2YoTm90aWZpY2F0aW9uICopOwogCQloYXNoX2N0bC5lbnRyeXNpemUg PSBzaXplb2Yoc3RydWN0IE5vdGlmaWNhdGlvbkhhc2gpOwpAQCAtMjMwOSwxMCArMjc2Mywy MiBAQCBBZGRFdmVudFRvUGVuZGluZ05vdGlmaWVzKE5vdGlmaWNhdGlvbiAqbikKIAkJCQkJ CSZoYXNoX2N0bCwKIAkJCQkJCUhBU0hfRUxFTSB8IEhBU0hfRlVOQ1RJT04gfCBIQVNIX0NP TVBBUkUgfCBIQVNIX0NPTlRFWFQpOwogCisJCS8qIENyZWF0ZSB0aGUgY2hhbm5lbCBoYXNo IHRhYmxlICovCisJCW1lbXNldCgmaGFzaF9jdGwsIDAsIHNpemVvZihoYXNoX2N0bCkpOwor CQloYXNoX2N0bC5rZXlzaXplID0gTkFNRURBVEFMRU47CisJCWhhc2hfY3RsLmVudHJ5c2l6 ZSA9IHNpemVvZihzdHJ1Y3QgQ2hhbm5lbEhhc2gpOworCQloYXNoX2N0bC5oY3h0ID0gQ3Vy VHJhbnNhY3Rpb25Db250ZXh0OworCQlwZW5kaW5nTm90aWZpZXMtPmNoYW5uZWxIYXNodGFi ID0KKwkJCWhhc2hfY3JlYXRlKCJQZW5kaW5nIE5vdGlmeSBDaGFubmVscyIsCisJCQkJCQk2 NEwsCisJCQkJCQkmaGFzaF9jdGwsCisJCQkJCQlIQVNIX0VMRU0gfCBIQVNIX1NUUklOR1Mg fCBIQVNIX0NPTlRFWFQpOworCiAJCS8qIEluc2VydCBhbGwgdGhlIGFscmVhZHktZXhpc3Rp bmcgZXZlbnRzICovCiAJCWZvcmVhY2gobCwgcGVuZGluZ05vdGlmaWVzLT5ldmVudHMpCiAJ CXsKIAkJCU5vdGlmaWNhdGlvbiAqb2xkbiA9IChOb3RpZmljYXRpb24gKikgbGZpcnN0KGwp OworCQkJY2hhcgkgICAqY2hhbm5lbCA9IG9sZG4tPmRhdGE7CiAJCQlib29sCQlmb3VuZDsK IAogCQkJKHZvaWQpIGhhc2hfc2VhcmNoKHBlbmRpbmdOb3RpZmllcy0+aGFzaHRhYiwKQEAg LTIzMjAsMjIgKzI3ODYsNDIgQEAgQWRkRXZlbnRUb1BlbmRpbmdOb3RpZmllcyhOb3RpZmlj YXRpb24gKm4pCiAJCQkJCQkJICAgSEFTSF9FTlRFUiwKIAkJCQkJCQkgICAmZm91bmQpOwog CQkJQXNzZXJ0KCFmb3VuZCk7CisKKwkJCS8qIEluc2VydCBjaGFubmVsIGludG8gY2hhbm5l bEhhc2h0YWIgKi8KKwkJCSh2b2lkKSBoYXNoX3NlYXJjaChwZW5kaW5nTm90aWZpZXMtPmNo YW5uZWxIYXNodGFiLAorCQkJCQkJCSAgIGNoYW5uZWwsCisJCQkJCQkJICAgSEFTSF9FTlRF UiwKKwkJCQkJCQkgICAmZm91bmQpOworCQkJLyogZm91bmQgbWF5IGJlIHRydWUgaWYgbXVs dGlwbGUgZXZlbnRzIG9uIHNhbWUgY2hhbm5lbCAqLwogCQl9CiAJfQogCiAJLyogQWRkIG5l dyBldmVudCB0byB0aGUgbGlzdCwgaW4gb3JkZXIgKi8KIAlwZW5kaW5nTm90aWZpZXMtPmV2 ZW50cyA9IGxhcHBlbmQocGVuZGluZ05vdGlmaWVzLT5ldmVudHMsIG4pOwogCi0JLyogQWRk IGV2ZW50IHRvIHRoZSBoYXNoIHRhYmxlIGlmIG5lZWRlZCAqLworCS8qIEFkZCBldmVudCB0 byB0aGUgaGFzaCB0YWJsZXMgaWYgbmVlZGVkICovCiAJaWYgKHBlbmRpbmdOb3RpZmllcy0+ aGFzaHRhYiAhPSBOVUxMKQogCXsKIAkJYm9vbAkJZm91bmQ7CiAKKwkJQXNzZXJ0KHBlbmRp bmdOb3RpZmllcy0+Y2hhbm5lbEhhc2h0YWIgIT0gTlVMTCk7CisKIAkJKHZvaWQpIGhhc2hf c2VhcmNoKHBlbmRpbmdOb3RpZmllcy0+aGFzaHRhYiwKIAkJCQkJCSAgICZuLAogCQkJCQkJ ICAgSEFTSF9FTlRFUiwKIAkJCQkJCSAgICZmb3VuZCk7CiAJCUFzc2VydCghZm91bmQpOwor CisJCS8qIEFkZCBjaGFubmVsIHRvIGNoYW5uZWxIYXNodGFiICovCisJCXsKKwkJCWNoYXIJ ICAgKmNoYW5uZWwgPSBuLT5kYXRhOworCisJCQkodm9pZCkgaGFzaF9zZWFyY2gocGVuZGlu Z05vdGlmaWVzLT5jaGFubmVsSGFzaHRhYiwKKwkJCQkJCQkgICBjaGFubmVsLAorCQkJCQkJ CSAgIEhBU0hfRU5URVIsCisJCQkJCQkJICAgJmZvdW5kKTsKKwkJCS8qIGZvdW5kIG1heSBi ZSB0cnVlIGlmIHdlIGFscmVhZHkgaGF2ZSBhbiBldmVudCBvbiB0aGlzIGNoYW5uZWwgKi8K KwkJfQogCX0KIH0KIApAQCAtMjM3Myw3ICsyODU5LDcgQEAgbm90aWZpY2F0aW9uX21hdGNo KGNvbnN0IHZvaWQgKmtleTEsIGNvbnN0IHZvaWQgKmtleTIsIFNpemUga2V5c2l6ZSkKIAly ZXR1cm4gMTsJCQkJCS8qIG5vdCBlcXVhbCAqLwogfQogCi0vKiBDbGVhciB0aGUgcGVuZGlu Z0FjdGlvbnMgYW5kIHBlbmRpbmdOb3RpZmllcyBsaXN0cy4gKi8KKy8qIENsZWFyIHRoZSBw ZW5kaW5nQWN0aW9ucywgcGVuZGluZ05vdGlmaWVzLCBhbmQgcGVuZGluZ05vdGlmeUNoYW5u ZWxzIGxpc3RzLiAqLwogc3RhdGljIHZvaWQKIENsZWFyUGVuZGluZ0FjdGlvbnNBbmROb3Rp Zmllcyh2b2lkKQogewpAQCAtMjM4NSw2ICsyODcxLDcgQEAgQ2xlYXJQZW5kaW5nQWN0aW9u c0FuZE5vdGlmaWVzKHZvaWQpCiAJICovCiAJcGVuZGluZ0FjdGlvbnMgPSBOVUxMOwogCXBl bmRpbmdOb3RpZmllcyA9IE5VTEw7CisJcGVuZGluZ05vdGlmeUNoYW5uZWxzID0gTklMOwog fQogCiAvKgpAQCAtMjM5NSwzICsyODgyLDE2IEBAIGNoZWNrX25vdGlmeV9idWZmZXJzKGlu dCAqbmV3dmFsLCB2b2lkICoqZXh0cmEsIEd1Y1NvdXJjZSBzb3VyY2UpCiB7CiAJcmV0dXJu IGNoZWNrX3NscnVfYnVmZmVycygibm90aWZ5X2J1ZmZlcnMiLCBuZXd2YWwpOwogfQorCisK Ky8qCisgKiBDaGFubmVsSGFzaFByZXBhcmVLZXkKKyAqCQlQcmVwYXJlIGEgY2hhbm5lbCBr ZXkgZm9yIHVzZSBhcyBhIGhhc2gga2V5LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK0No YW5uZWxIYXNoUHJlcGFyZUtleShDaGFubmVsSGFzaEtleSAqa2V5LCBPaWQgZGJvaWQsIGNv bnN0IGNoYXIgKmNoYW5uZWwpCit7CisJbWVtc2V0KGtleSwgMCwgc2l6ZW9mKENoYW5uZWxI YXNoS2V5KSk7CisJa2V5LT5kYm9pZCA9IGRib2lkOworCXN0cmxjcHkoa2V5LT5jaGFubmVs LCBjaGFubmVsLCBOQU1FREFUQUxFTik7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91 dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4dCBiL3NyYy9iYWNrZW5kL3V0aWxz L2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0CmluZGV4IGMxYWM3MWZmN2YyLi43YzJj Zjk2MDA5MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9l dmVudF9uYW1lcy50eHQKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9l dmVudF9uYW1lcy50eHQKQEAgLTM2OSw2ICszNjksNyBAQCBTdWJ0cmFuc0J1ZmZlcgkiV2Fp dGluZyBmb3IgSS9PIG9uIGEgc3ViLXRyYW5zYWN0aW9uIFNMUlUgYnVmZmVyLiIKIE11bHRp WGFjdE9mZnNldEJ1ZmZlcgkiV2FpdGluZyBmb3IgSS9PIG9uIGEgbXVsdGl4YWN0IG9mZnNl dCBTTFJVIGJ1ZmZlci4iCiBNdWx0aVhhY3RNZW1iZXJCdWZmZXIJIldhaXRpbmcgZm9yIEkv TyBvbiBhIG11bHRpeGFjdCBtZW1iZXIgU0xSVSBidWZmZXIuIgogTm90aWZ5QnVmZmVyCSJX YWl0aW5nIGZvciBJL08gb24gYSA8Y29tbWFuZD5OT1RJRlk8L2NvbW1hbmQ+IG1lc3NhZ2Ug U0xSVSBidWZmZXIuIgorTm90aWZ5Q2hhbm5lbEhhc2gJIldhaXRpbmcgdG8gYWNjZXNzIHRo ZSA8Y29tbWFuZD5OT1RJRlk8L2NvbW1hbmQ+IGNoYW5uZWwgaGFzaCB0YWJsZS4iCiBTZXJp YWxCdWZmZXIJIldhaXRpbmcgZm9yIEkvTyBvbiBhIHNlcmlhbGl6YWJsZSB0cmFuc2FjdGlv biBjb25mbGljdCBTTFJVIGJ1ZmZlci4iCiBXQUxJbnNlcnQJIldhaXRpbmcgdG8gaW5zZXJ0 IFdBTCBkYXRhIGludG8gYSBtZW1vcnkgYnVmZmVyLiIKIEJ1ZmZlckNvbnRlbnQJIldhaXRp bmcgdG8gYWNjZXNzIGEgZGF0YSBwYWdlIGluIG1lbW9yeS4iCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9zdG9yYWdlL2x3bG9ja2xpc3QuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHds b2NrbGlzdC5oCmluZGV4IDViMGNlMzgzNDA4Li40MjM2OTY1ZTcyYSAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2tsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvc3Rv cmFnZS9sd2xvY2tsaXN0LmgKQEAgLTEwMSw2ICsxMDEsNyBAQCBQR19MV0xPQ0tUUkFOQ0hF KFNVQlRSQU5TX0JVRkZFUiwgU3VidHJhbnNCdWZmZXIpCiBQR19MV0xPQ0tUUkFOQ0hFKE1V TFRJWEFDVE9GRlNFVF9CVUZGRVIsIE11bHRpWGFjdE9mZnNldEJ1ZmZlcikKIFBHX0xXTE9D S1RSQU5DSEUoTVVMVElYQUNUTUVNQkVSX0JVRkZFUiwgTXVsdGlYYWN0TWVtYmVyQnVmZmVy KQogUEdfTFdMT0NLVFJBTkNIRShOT1RJRllfQlVGRkVSLCBOb3RpZnlCdWZmZXIpCitQR19M V0xPQ0tUUkFOQ0hFKE5PVElGWV9DSEFOTkVMX0hBU0gsIE5vdGlmeUNoYW5uZWxIYXNoKQog UEdfTFdMT0NLVFJBTkNIRShTRVJJQUxfQlVGRkVSLCBTZXJpYWxCdWZmZXIpCiBQR19MV0xP Q0tUUkFOQ0hFKFdBTF9JTlNFUlQsIFdBTEluc2VydCkKIFBHX0xXTE9DS1RSQU5DSEUoQlVG RkVSX0NPTlRFTlQsIEJ1ZmZlckNvbnRlbnQpCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 CmluZGV4IDQzMjUwOTI3N2M5Li5lZTM1NDA2NDNjOCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKQEAgLTQxMiw2ICs0MTIsOCBAQCBDYXRhbG9nSWRNYXBFbnRyeQogQ2F0YWxv Z0luZGV4U3RhdGUKIENoYW5nZVZhck5vZGVzX2NhbGxiYWNrCiBDaGFuZ2VWYXJOb2Rlc19j b250ZXh0CitDaGFubmVsRW50cnkKK0NoYW5uZWxIYXNoS2V5CiBDaGVja1BvaW50CiBDaGVj a1BvaW50U3RtdAogQ2hlY2twb2ludFN0YXRzRGF0YQotLSAKMi41MC4xCgo= --1c6c888031b34e7e8c04984304bc9bdb--