Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vJRWv-006hPs-1D for pgsql-hackers@arkaria.postgresql.org; Thu, 13 Nov 2025 07:14:04 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vJRWs-00H07A-2j for pgsql-hackers@arkaria.postgresql.org; Thu, 13 Nov 2025 07:14:02 +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.96) (envelope-from ) id 1vJRWs-00H072-0Q for pgsql-hackers@lists.postgresql.org; Thu, 13 Nov 2025 07:14:02 +0000 Received: from fout-a4-smtp.messagingengine.com ([103.168.172.147]) by makus.postgresql.org with smtp (Exim 4.96) (envelope-from ) id 1vJRWq-006sJc-1K for pgsql-hackers@postgresql.org; Thu, 13 Nov 2025 07:14:01 +0000 Received: from phl-compute-05.internal (phl-compute-05.internal [10.202.2.45]) by mailfout.phl.internal (Postfix) with ESMTP id EB7A9EC020B; Thu, 13 Nov 2025 02:13:59 -0500 (EST) Received: from phl-imap-03 ([10.202.2.93]) by phl-compute-05.internal (MEProxy); Thu, 13 Nov 2025 02:13:59 -0500 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=fm3; t=1763018039; x=1763104439; bh=pcaksgJlEo TWNe5bdDiyieTpEAq03myb0ThSJP2Jahw=; b=fkITkUiqIbcvvz8f8Bhy4RMwNV 1K8qJjVd/9IjBI3eP+rlkUBiZsIOycZH7m+TbfGAVaBE4AWeYf+XzPyVruZBsP3k ZlgOxRp85LCfX2trxsHnoxkMVccGzFbv6m+Qd5eUCSvi0DGsEssdJpdYt28pJHZh TaJfD/lzFCo5kjTyKoUi8lolBoipf8Pe+1p72plTWgDyokOzzuyapy8rxiNbvzmU vH0VPtunrHWjE8n8eqVxLlnc5GrLqR5DKHImRsN0KqzYcnZNnBXIqktsGcI62B1c YRnZzdK4CPM2ZgyfC++UbOIJC0Kix8hM3e23iPKrZYExStRhdiw8xyiW0h+Q== 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=fm3; t= 1763018039; x=1763104439; bh=pcaksgJlEoTWNe5bdDiyieTpEAq03myb0Th SJP2Jahw=; b=z1kVUj32CbtLOTxalQeAyVJclkiDiISJ8ciKo4yrLSgZpoFjkJD FYLIY4tphGBi/3b+cKRBLguf4EOs06HbP7iLcoL4/T6G7Ln0MxpVvssNFVxwfpUe 2XlL/SVB8HXregBdVA34szKdDhV5TC8gkqSQJY0STLtx6uxYq1NQOdX27j8K3yKd vHizEFobBp3/exQQc/G4dmB7Ybp99nrIeK/00mbVsrClT3GdjoUk9WDLyNyoPYxc gP5JWP6L+aXENYlL3uTwAiH+zngTTJ1FkYepIC4U/bhqDXIdedLjaqZIHil2bTd5 Cq9PWw4U3f+v1RtER+1Gi2IDV0E2+zvE3uQ== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggddvtdeifedvucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucenucfjughrpefoggffhffvvefkjghfufgtsehmtderre ertdejnecuhfhrohhmpedflfhovghlucflrggtohgsshhonhdfuceojhhovghlsegtohhm phhilhgvrhdrohhrgheqnecuggftrfgrthhtvghrnhepleeiueefveeljeelkeeguedvtd fggeeftdeguedtjeejkedvvedtvdeuteekvdelnecuvehluhhsthgvrhfuihiivgeptden ucfrrghrrghmpehmrghilhhfrhhomhepjhhovghlsegtohhmphhilhgvrhdrohhrghdpnh gspghrtghpthhtohepvddpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtoheprghrshgv nhhihidrmhhukhhhihhnrdguvghvsehgmhgrihhlrdgtohhmpdhrtghpthhtohepphhgsh hqlhdqhhgrtghkvghrshesphhoshhtghhrvghsqhhlrdhorhhg X-ME-Proxy: Feedback-ID: ic6394509:Fastmail Received: by mailuser.phl.internal (Postfix, from userid 501) id 8BAEA18E0069; Thu, 13 Nov 2025 02:13:59 -0500 (EST) X-Mailer: MessagingEngine.com Webmail Interface MIME-Version: 1.0 X-ThreadId: AE1r89ybsZ1g Date: Thu, 13 Nov 2025 08:13:28 +0100 From: "Joel Jacobson" To: "Arseniy Mukhin" Cc: pgsql-hackers Message-Id: In-Reply-To: References: <6899c044-4a82-49be-8117-e6f669765f7e@app.fastmail.com> <165530.1752362320@sss.pgh.pa.us> <02a7cd37-e2fc-4212-8b19-f8c239c95fb8@app.fastmail.com> <96f00bf1-cc9d-4520-9d02-9e14e7767c88@app.fastmail.com> <30c2aa7d-dd6c-4b68-a2e4-f217a1a34acf@app.fastmail.com> <0b4d402a-9ac2-4aa8-acf8-8231dbe579ea@app.fastmail.com> <3095599.1758644879@sss.pgh.pa.us> <0dc6a2cc-5216-4dc1-9dd2-430cafc6095b@app.fastmail.com> <52CC167F-763B-4ECA-B0B4-DAB381816828@gmail.com> <9186C6D0-F7A9-482A-9183-89E530B57E36@gmail.com> <1073593.1759423179@sss.pgh.pa.us> <4bd5e6c4-6fa7-44bb-869d-59a32a331fa8@app.fastmail.com> <85828f29-e72e-4400-94f3-9a69bc8dc239@app.fastmail.com> <2495353.1759860890@sss.pgh.pa.us> <8aeae418-92a6-4bbd-9c06-9574c79e59f7@app.fastmail.com> <2531672.1759868124@sss.pgh.pa.us> <474efa78-337c-41cd-a73a-f845a0115109@app.fastmail.com> <2749343.1759949176@sss.pgh.pa.us> <8bfca2be-1ec0-4e15-aafb-0b7b661fe936@app.fastmail.com> <9eba307f-f2fb-48f0-9507-2e197f39ef9e@app.fastmail.com> <8c71183a-0d28-4bcf-a806-78446ff95404@app.fastmail.com> <1009807.1760476747@sss.pgh.pa.us> <1F7227F5-C33D-4E2C-8511-33F1468590D0@gmail.com> <0a5a20d3-4621-46b3-b2ab-903f63a20dea@app.fastmail.com> <6F913129-ABEF-4004-AAF3-F22FC34!29AE8@gmail.com> <1547585.1760645808@sss.pgh.pa.us> <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> <26d4dd6a-cfc5-4efc-9704-9cd3216ed712@app.fastmail.com> <7456ec96-7a9c-45a0-988e-ba1c7f9ec937@app.fastmail.com> <0253b822-e8fd-4067-ab24-23493c115a2a@app.fastmail.com> Subject: Re: Optimize LISTEN/NOTIFY Content-Type: multipart/mixed; boundary=9f71c8c85e4649908b5af13be7598d74 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --9f71c8c85e4649908b5af13be7598d74 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On Thu, Nov 13, 2025, at 07:36, Arseniy Mukhin wrote: > On Thu, Nov 13, 2025 at 9:28=E2=80=AFAM Joel Jacobson wrote: >> I think this confirms that listeners can actually stop somewhere in b= etween >> queueHeadBeforeWrite and queueHeadAfterWrite. > > > Ahh, yes, I think you are right. I missed that notifiers update the > head when they move to the next page. Thank you for the detailed > example and sorry for taking your time with it. I agree that > QUEUE_POS_PRECEDES(pos, queueHeadAfterWrite) is correct and covers > more cases where we can do direct advancement. Thanks for investigating this; we now both have an even stronger mental model of the code. Attached, please find a new version rebased on top of the bug fix patches that just got committed in 0bdc777, 797e9ea, 8eeb4a0, and 1b46990. /Joel --9f71c8c85e4649908b5af13be7598d74 Content-Disposition: attachment; filename*0="0001-optimize_listen_notify-v27.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0001-optimize=5Flisten=5Fnotify-v27.patch?=" Content-Transfer-Encoding: base64 RnJvbSBhN2Y3NTQ5NWQ2NTVkYmFjZWQ0NTE1ZjlmMDRhOTViOWRhNTkwNWFkIE1vbiBTZXAg 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 --9f71c8c85e4649908b5af13be7598d74 Content-Disposition: attachment; filename*0="0002-optimize_listen_notify-v27.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0002-optimize=5Flisten=5Fnotify-v27.patch?=" Content-Transfer-Encoding: base64 RnJvbSBiYjViMGRmMGUzMDdmODhlZjM1YTM4MWI2ODgxZGM5OGJkZDZhYjA1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEphY29ic29uIDxqb2VsQGNvbXBpbGVyLm9y Zz4KRGF0ZTogRnJpLCA3IE5vdiAyMDI1IDE5OjA4OjM5ICswMTAwClN1YmplY3Q6IFtQQVRD 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 IHwgNzE4ICsrKysrKysrKysrKysrKy0tLQogLi4uL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZl bnRfbmFtZXMudHh0ICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2Nr bGlzdC5oICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCAgICAgICAgICAgICAgfCAgIDIgKwogNCBmaWxlcyBjaGFuZ2VkLCA2MTcgaW5z ZXJ0aW9ucygrKSwgMTA1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2FzeW5jLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jCmluZGV4 IGUxY2Y2NTk0ODVhLi4zZjFmYTdhYzBjYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t 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 IG90aGVycy4gIEluIHBhcnRpY3VsYXIsIHRoaXMKQEAgLTI0Niw2ICsyODQsOSBAQCB0eXBl ZGVmIHN0cnVjdCBRdWV1ZUJhY2tlbmRTdGF0dXMKIAlPaWQJCQlkYm9pZDsJCQkvKiBiYWNr ZW5kJ3MgZGF0YWJhc2UgT0lELCBvciBJbnZhbGlkT2lkICovCiAJUHJvY051bWJlcgluZXh0 TGlzdGVuZXI7CS8qIGlkIG9mIG5leHQgbGlzdGVuZXIsIG9yIElOVkFMSURfUFJPQ19OVU1C RVIgKi8KIAlRdWV1ZVBvc2l0aW9uIHBvczsJCQkvKiBiYWNrZW5kIGhhcyByZWFkIHF1ZXVl IHVwIHRvIGhlcmUgKi8KKwlib29sCQl3YWtldXBQZW5kaW5nOwkvKiBzaWduYWwgc2VudCBi dXQgbm90IHlldCBwcm9jZXNzZWQgKi8KKwlib29sCQlpc0FkdmFuY2luZzsJLyogYmFja2Vu ZCBpcyBhZHZhbmNpbmcgaXRzIHBvc2l0aW9uICovCisJUXVldWVQb3NpdGlvbiBhZHZhbmNp bmdQb3M7IC8qIHRhcmdldCBwb3NpdGlvbiBiYWNrZW5kIGlzIGFkdmFuY2luZyB0byAqLwog fSBRdWV1ZUJhY2tlbmRTdGF0dXM7CiAKIC8qCkBAIC0yNjAsOSArMzAxLDEwIEBAIHR5cGVk ZWYgc3RydWN0IFF1ZXVlQmFja2VuZFN0YXR1cwogICogKHNpbmNlIG5vIG90aGVyIGJhY2tl bmQgd2lsbCBpbnNwZWN0IGl0KS4KICAqCiAgKiBXaGVuIGhvbGRpbmcgTm90aWZ5UXVldWVM b2NrIGluIEVYQ0xVU0lWRSBtb2RlLCBiYWNrZW5kcyBjYW4gaW5zcGVjdCB0aGUKLSAqIGVu dHJpZXMgb2Ygb3RoZXIgYmFja2VuZHMgYW5kIGFsc28gY2hhbmdlIHRoZSBoZWFkIHBvaW50 ZXIuIFdoZW4gaG9sZGluZwotICogYm90aCBOb3RpZnlRdWV1ZUxvY2sgYW5kIE5vdGlmeVF1 ZXVlVGFpbExvY2sgaW4gRVhDTFVTSVZFIG1vZGUsIGJhY2tlbmRzCi0gKiBjYW4gY2hhbmdl IHRoZSB0YWlsIHBvaW50ZXJzLgorICogZW50cmllcyBvZiBvdGhlciBiYWNrZW5kcyBhbmQg YWxzbyBjaGFuZ2UgdGhlIGhlYWQgcG9pbnRlci4gVGhleSBjYW4KKyAqIGFsc28gYWR2YW5j ZSBvdGhlciBiYWNrZW5kcycgcXVldWUgcG9zaXRpb25zLCB1bmxlc3MgdGhleSBhcmUgbm90 CisgKiBpbiB0aGUgcHJvY2VzcyBvZiBkb2luZyB0aGF0IHRoZW1zZWx2ZXMuIFdoZW4gaG9s ZGluZyBib3RoIE5vdGlmeVF1ZXVlTG9jayBhbmQKKyAqIE5vdGlmeVF1ZXVlVGFpbExvY2sg aW4gRVhDTFVTSVZFIG1vZGUsIGJhY2tlbmRzIGNhbiBjaGFuZ2UgdGhlIHRhaWwgcG9pbnRl cnMuCiAgKgogICogU0xSVSBidWZmZXIgcG9vbCBpcyBkaXZpZGVkIGluIGJhbmtzIGFuZCBi YW5rIHdpc2UgU0xSVSBsb2NrIGlzIHVzZWQgYXMKICAqIHRoZSBjb250cm9sIGxvY2sgZm9y IHRoZSBwZ19ub3RpZnkgU0xSVSBidWZmZXJzLgpAQCAtMjg4LDExICszMzAsMTYgQEAgdHlw ZWRlZiBzdHJ1Y3QgQXN5bmNRdWV1ZUNvbnRyb2wKIAlQcm9jTnVtYmVyCWZpcnN0TGlzdGVu ZXI7CS8qIGlkIG9mIGZpcnN0IGxpc3RlbmVyLCBvcgogCQkJCQkJCQkgKiBJTlZBTElEX1BS T0NfTlVNQkVSICovCiAJVGltZXN0YW1wVHogbGFzdFF1ZXVlRmlsbFdhcm47CS8qIHRpbWUg b2YgbGFzdCBxdWV1ZS1mdWxsIG1zZyAqLworCWRzYV9oYW5kbGUJY2hhbm5lbEhhc2hEU0E7 CisJZHNoYXNoX3RhYmxlX2hhbmRsZSBjaGFubmVsSGFzaERTSDsKIAlRdWV1ZUJhY2tlbmRT dGF0dXMgYmFja2VuZFtGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOwogfSBBc3luY1F1ZXVlQ29u dHJvbDsKIAogc3RhdGljIEFzeW5jUXVldWVDb250cm9sICphc3luY1F1ZXVlQ29udHJvbDsK IAorc3RhdGljIGRzYV9hcmVhICpjaGFubmVsRFNBID0gTlVMTDsKK3N0YXRpYyBkc2hhc2hf dGFibGUgKmNoYW5uZWxIYXNoID0gTlVMTDsKKwogI2RlZmluZSBRVUVVRV9IRUFECQkJCQko YXN5bmNRdWV1ZUNvbnRyb2wtPmhlYWQpCiAjZGVmaW5lIFFVRVVFX1RBSUwJCQkJCShhc3lu Y1F1ZXVlQ29udHJvbC0+dGFpbCkKICNkZWZpbmUgUVVFVUVfU1RPUF9QQUdFCQkJCShhc3lu Y1F1ZXVlQ29udHJvbC0+c3RvcFBhZ2UpCkBAIC0zMDEsNiArMzQ4LDkgQEAgc3RhdGljIEFz eW5jUXVldWVDb250cm9sICphc3luY1F1ZXVlQ29udHJvbDsKICNkZWZpbmUgUVVFVUVfQkFD S0VORF9EQk9JRChpKQkJKGFzeW5jUXVldWVDb250cm9sLT5iYWNrZW5kW2ldLmRib2lkKQog I2RlZmluZSBRVUVVRV9ORVhUX0xJU1RFTkVSKGkpCQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmJh Y2tlbmRbaV0ubmV4dExpc3RlbmVyKQogI2RlZmluZSBRVUVVRV9CQUNLRU5EX1BPUyhpKQkJ KGFzeW5jUXVldWVDb250cm9sLT5iYWNrZW5kW2ldLnBvcykKKyNkZWZpbmUgUVVFVUVfQkFD S0VORF9XQUtFVVBfUEVORElORyhpKQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmJhY2tlbmRbaV0u d2FrZXVwUGVuZGluZykKKyNkZWZpbmUgUVVFVUVfQkFDS0VORF9JU19BRFZBTkNJTkcoaSkJ KGFzeW5jUXVldWVDb250cm9sLT5iYWNrZW5kW2ldLmlzQWR2YW5jaW5nKQorI2RlZmluZSBR VUVVRV9CQUNLRU5EX0FEVkFOQ0lOR19QT1MoaSkJKGFzeW5jUXVldWVDb250cm9sLT5iYWNr ZW5kW2ldLmFkdmFuY2luZ1BvcykKIAogLyoKICAqIFRoZSBTTFJVIGJ1ZmZlciBhcmVhIHRo cm91Z2ggd2hpY2ggd2UgYWNjZXNzIHRoZSBub3RpZmljYXRpb24gcXVldWUKQEAgLTMxMywx NiArMzYzLDE2IEBAIHN0YXRpYyBTbHJ1Q3RsRGF0YSBOb3RpZnlDdGxEYXRhOwogI2RlZmlu ZSBRVUVVRV9GVUxMX1dBUk5fSU5URVJWQUwJNTAwMAkvKiB3YXJuIGF0IG1vc3Qgb25jZSBl dmVyeSA1cyAqLwogCiAvKgotICogbGlzdGVuQ2hhbm5lbHMgaWRlbnRpZmllcyB0aGUgY2hh bm5lbHMgd2UgYXJlIGFjdHVhbGx5IGxpc3RlbmluZyB0bwotICogKGllLCBoYXZlIGNvbW1p dHRlZCBhIExJU1RFTiBvbikuICBJdCBpcyBhIHNpbXBsZSBsaXN0IG9mIGNoYW5uZWwgbmFt ZXMsCisgKiBsaXN0ZW5DaGFubmVsc0hhc2ggaWRlbnRpZmllcyB0aGUgY2hhbm5lbHMgd2Ug YXJlIGFjdHVhbGx5IGxpc3RlbmluZyB0bworICogKGllLCBoYXZlIGNvbW1pdHRlZCBhIExJ U1RFTiBvbikuICBJdCBpcyBhIGhhc2ggdGFibGUgb2YgY2hhbm5lbCBuYW1lcywKICAqIGFs bG9jYXRlZCBpbiBUb3BNZW1vcnlDb250ZXh0LgogICovCi1zdGF0aWMgTGlzdCAqbGlzdGVu Q2hhbm5lbHMgPSBOSUw7CS8qIGxpc3Qgb2YgQyBzdHJpbmdzICovCitzdGF0aWMgSFRBQiAq bGlzdGVuQ2hhbm5lbHNIYXNoID0gTlVMTDsKIAogLyoKICAqIFN0YXRlIGZvciBwZW5kaW5n IExJU1RFTi9VTkxJU1RFTiBhY3Rpb25zIGNvbnNpc3RzIG9mIGFuIG9yZGVyZWQgbGlzdCBv ZgogICogYWxsIGFjdGlvbnMgcmVxdWVzdGVkIGluIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9u LiAgQXMgZXhwbGFpbmVkIGFib3ZlLAotICogd2UgZG9uJ3QgYWN0dWFsbHkgY2hhbmdlIGxp c3RlbkNoYW5uZWxzIHVudGlsIHdlIHJlYWNoIHRyYW5zYWN0aW9uIGNvbW1pdC4KKyAqIHdl IGRvbid0IGFjdHVhbGx5IGNoYW5nZSBsaXN0ZW5DaGFubmVsc0hhc2ggdW50aWwgd2UgcmVh Y2ggdHJhbnNhY3Rpb24gY29tbWl0LgogICoKICAqIFRoZSBsaXN0IGlzIGtlcHQgaW4gQ3Vy VHJhbnNhY3Rpb25Db250ZXh0LiAgSW4gc3VidHJhbnNhY3Rpb25zLCBlYWNoCiAgKiBzdWJ0 cmFuc2FjdGlvbiBoYXMgaXRzIG93biBsaXN0IGluIGl0cyBvd24gQ3VyVHJhbnNhY3Rpb25D b250ZXh0LCBidXQKQEAgLTM5MSw2ICs0NDEsNyBAQCB0eXBlZGVmIHN0cnVjdCBOb3RpZmlj YXRpb25MaXN0CiAJaW50CQkJbmVzdGluZ0xldmVsOwkvKiBjdXJyZW50IHRyYW5zYWN0aW9u IG5lc3RpbmcgZGVwdGggKi8KIAlMaXN0CSAgICpldmVudHM7CQkJLyogbGlzdCBvZiBOb3Rp ZmljYXRpb24gc3RydWN0cyAqLwogCUhUQUIJICAgKmhhc2h0YWI7CQkvKiBoYXNoIG9mIE5v dGlmaWNhdGlvbkhhc2ggc3RydWN0cywgb3IgTlVMTCAqLworCUhUQUIJICAgKmNoYW5uZWxI YXNodGFiOyAvKiBoYXNoIG9mIHVuaXF1ZSBjaGFubmVsIG5hbWVzLCBvciBOVUxMICovCiAJ c3RydWN0IE5vdGlmaWNhdGlvbkxpc3QgKnVwcGVyOyAvKiBkZXRhaWxzIGZvciB1cHBlciB0 cmFuc2FjdGlvbiBsZXZlbHMgKi8KIH0gTm90aWZpY2F0aW9uTGlzdDsKIApAQCAtNDAxLDYg KzQ1MiwxMSBAQCBzdHJ1Y3QgTm90aWZpY2F0aW9uSGFzaAogCU5vdGlmaWNhdGlvbiAqZXZl bnQ7CQkvKiA9PiB0aGUgYWN0dWFsIE5vdGlmaWNhdGlvbiBzdHJ1Y3QgKi8KIH07CiAKK3N0 cnVjdCBDaGFubmVsSGFzaAoreworCWNoYXIJCWNoYW5uZWxbTkFNRURBVEFMRU5dOworfTsK Kwogc3RhdGljIE5vdGlmaWNhdGlvbkxpc3QgKnBlbmRpbmdOb3RpZmllcyA9IE5VTEw7CiAK IC8qCkBAIC00MTgsNiArNDc0LDIwIEBAIHN0YXRpYyBib29sIHVubGlzdGVuRXhpdFJlZ2lz dGVyZWQgPSBmYWxzZTsKIC8qIFRydWUgaWYgd2UncmUgY3VycmVudGx5IHJlZ2lzdGVyZWQg YXMgYSBsaXN0ZW5lciBpbiBhc3luY1F1ZXVlQ29udHJvbCAqLwogc3RhdGljIGJvb2wgYW1S ZWdpc3RlcmVkTGlzdGVuZXIgPSBmYWxzZTsKIAorLyoKKyAqIFF1ZXVlIGhlYWQgcG9zaXRp b25zIGZvciBkaXJlY3QgYWR2YW5jZW1lbnQuCisgKiBUaGVzZSBhcmUgY2FwdHVyZWQgZHVy aW5nIFByZUNvbW1pdF9Ob3RpZnkgd2hpbGUgaG9sZGluZyB0aGUgaGVhdnl3ZWlnaHQKKyAq IGxvY2sgb24gZGF0YWJhc2UgMCwgZW5zdXJpbmcgbm8gb3RoZXIgYmFja2VuZCBjYW4gaW5z ZXJ0IG5vdGlmaWNhdGlvbnMKKyAqIGJldHdlZW4gdGhlbS4gIFNpZ25hbEJhY2tlbmRzIHVz ZXMgdGhlc2UgdG8gYWR2YW5jZSBpZGxlIGJhY2tlbmRzLgorICovCitzdGF0aWMgUXVldWVQ b3NpdGlvbiBxdWV1ZUhlYWRCZWZvcmVXcml0ZTsKK3N0YXRpYyBRdWV1ZVBvc2l0aW9uIHF1 ZXVlSGVhZEFmdGVyV3JpdGU7CisKKy8qCisgKiBMaXN0IG9mIGNoYW5uZWxzIHdpdGggcGVu ZGluZyBub3RpZmljYXRpb25zIGluIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLgorICovCitz dGF0aWMgTGlzdCAqcGVuZGluZ05vdGlmeUNoYW5uZWxzID0gTklMOworCiAvKiBoYXZlIHdl IGFkdmFuY2VkIHRvIGEgcGFnZSB0aGF0J3MgYSBtdWx0aXBsZSBvZiBRVUVVRV9DTEVBTlVQ X0RFTEFZPyAqLwogc3RhdGljIGJvb2wgdHJ5QWR2YW5jZVRhaWwgPSBmYWxzZTsKIApAQCAt NDI4LDcgKzQ5OCw2IEBAIGJvb2wJCVRyYWNlX25vdGlmeSA9IGZhbHNlOwogaW50CQkJbWF4 X25vdGlmeV9xdWV1ZV9wYWdlcyA9IDEwNDg1NzY7CiAKIC8qIGxvY2FsIGZ1bmN0aW9uIHBy b3RvdHlwZXMgKi8KLXN0YXRpYyBpbmxpbmUgaW50NjQgYXN5bmNRdWV1ZVBhZ2VEaWZmKGlu dDY0IHAsIGludDY0IHEpOwogc3RhdGljIGlubGluZSBib29sIGFzeW5jUXVldWVQYWdlUHJl Y2VkZXMoaW50NjQgcCwgaW50NjQgcSk7CiBzdGF0aWMgdm9pZCBxdWV1ZV9saXN0ZW4oTGlz dGVuQWN0aW9uS2luZCBhY3Rpb24sIGNvbnN0IGNoYXIgKmNoYW5uZWwpOwogc3RhdGljIHZv aWQgQXN5bmNfVW5saXN0ZW5PbkV4aXQoaW50IGNvZGUsIERhdHVtIGFyZyk7CkBAIC00NTYs MTYgKzUyNSw5IEBAIHN0YXRpYyB2b2lkIEFkZEV2ZW50VG9QZW5kaW5nTm90aWZpZXMoTm90 aWZpY2F0aW9uICpuKTsKIHN0YXRpYyB1aW50MzIgbm90aWZpY2F0aW9uX2hhc2goY29uc3Qg dm9pZCAqa2V5LCBTaXplIGtleXNpemUpOwogc3RhdGljIGludAlub3RpZmljYXRpb25fbWF0 Y2goY29uc3Qgdm9pZCAqa2V5MSwgY29uc3Qgdm9pZCAqa2V5MiwgU2l6ZSBrZXlzaXplKTsK IHN0YXRpYyB2b2lkIENsZWFyUGVuZGluZ0FjdGlvbnNBbmROb3RpZmllcyh2b2lkKTsKLQot LyoKLSAqIENvbXB1dGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gcXVldWUgcGFnZSBu dW1iZXJzLgotICogUHJldmlvdXNseSB0aGlzIGZ1bmN0aW9uIGFjY291bnRlZCBmb3IgYSB3 cmFwYXJvdW5kLgotICovCi1zdGF0aWMgaW5saW5lIGludDY0Ci1hc3luY1F1ZXVlUGFnZURp ZmYoaW50NjQgcCwgaW50NjQgcSkKLXsKLQlyZXR1cm4gcCAtIHE7Ci19CitzdGF0aWMgaW5s aW5lIHZvaWQgQ2hhbm5lbEhhc2hQcmVwYXJlS2V5KENoYW5uZWxIYXNoS2V5ICprZXksIE9p ZCBkYm9pZCwgY29uc3QgY2hhciAqY2hhbm5lbCk7CitzdGF0aWMgZHNoYXNoX2hhc2ggY2hh bm5lbEhhc2hGdW5jKGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IHNpemUsIHZvaWQgKmFyZyk7 CitzdGF0aWMgdm9pZCBpbml0Q2hhbm5lbEhhc2godm9pZCk7CiAKIC8qCiAgKiBEZXRlcm1p bmVzIHdoZXRoZXIgcCBwcmVjZWRlcyBxLgpAQCAtNDc3LDYgKzUzOSwxMDUgQEAgYXN5bmNR dWV1ZVBhZ2VQcmVjZWRlcyhpbnQ2NCBwLCBpbnQ2NCBxKQogCXJldHVybiBwIDwgcTsKIH0K IAorLyoKKyAqIGNoYW5uZWxIYXNoRnVuYworICoJCUhhc2ggZnVuY3Rpb24gZm9yIGNoYW5u ZWwga2V5cy4KKyAqLworc3RhdGljIGRzaGFzaF9oYXNoCitjaGFubmVsSGFzaEZ1bmMoY29u c3Qgdm9pZCAqa2V5LCBzaXplX3Qgc2l6ZSwgdm9pZCAqYXJnKQoreworCWNvbnN0IENoYW5u ZWxIYXNoS2V5ICprID0gKGNvbnN0IENoYW5uZWxIYXNoS2V5ICopIGtleTsKKwlkc2hhc2hf aGFzaCBoOworCisJaCA9IERhdHVtR2V0VUludDMyKGhhc2hfdWludDMyKGstPmRib2lkKSk7 CisJaCBePSBEYXR1bUdldFVJbnQzMihoYXNoX2FueSgoY29uc3QgdW5zaWduZWQgY2hhciAq KSBrLT5jaGFubmVsLAorCQkJCQkJCQkgc3RybmxlbihrLT5jaGFubmVsLCBOQU1FREFUQUxF TikpKTsKKworCXJldHVybiBoOworfQorCisvKiBwYXJhbWV0ZXJzIGZvciB0aGUgY2hhbm5l bCBoYXNoIHRhYmxlICovCitzdGF0aWMgY29uc3QgZHNoYXNoX3BhcmFtZXRlcnMgY2hhbm5l bERTSFBhcmFtcyA9IHsKKwlzaXplb2YoQ2hhbm5lbEhhc2hLZXkpLAorCXNpemVvZihDaGFu bmVsRW50cnkpLAorCWRzaGFzaF9tZW1jbXAsCisJY2hhbm5lbEhhc2hGdW5jLAorCWRzaGFz aF9tZW1jcHksCisJTFdUUkFOQ0hFX05PVElGWV9DSEFOTkVMX0hBU0gKK307CisKKy8qCisg KiBpbml0Q2hhbm5lbEhhc2gKKyAqCQlMYXp5IGluaXRpYWxpemF0aW9uIG9mIHRoZSBjaGFu bmVsIGhhc2ggdGFibGUuCisgKi8KK3N0YXRpYyB2b2lkCitpbml0Q2hhbm5lbEhhc2godm9p ZCkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisKKwkvKiBRdWljayBleGl0IGlm IHdlIGFscmVhZHkgZGlkIHRoaXMgKi8KKwlpZiAoYXN5bmNRdWV1ZUNvbnRyb2wtPmNoYW5u ZWxIYXNoRFNIICE9IERTSEFTSF9IQU5ETEVfSU5WQUxJRCAmJgorCQljaGFubmVsSGFzaCAh PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKiBPdGhlcndpc2UsIHVzZSBhIGxvY2sgdG8gZW5z dXJlIG9ubHkgb25lIHByb2Nlc3MgY3JlYXRlcyB0aGUgdGFibGUgKi8KKwlMV0xvY2tBY3F1 aXJlKE5vdGlmeVF1ZXVlTG9jaywgTFdfRVhDTFVTSVZFKTsKKworCS8qIEJlIHN1cmUgYW55 IGxvY2FsIG1lbW9yeSBhbGxvY2F0ZWQgYnkgRFNBIHJvdXRpbmVzIGlzIHBlcnNpc3RlbnQg Ki8KKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcE1lbW9yeUNvbnRl eHQpOworCisJaWYgKGFzeW5jUXVldWVDb250cm9sLT5jaGFubmVsSGFzaERTSCA9PSBEU0hB U0hfSEFORExFX0lOVkFMSUQpCisJeworCQkvKiBJbml0aWFsaXplIGR5bmFtaWMgc2hhcmVk IGhhc2ggdGFibGUgZm9yIGNoYW5uZWwgaGFzaCAqLworCQljaGFubmVsRFNBID0gZHNhX2Ny ZWF0ZShMV1RSQU5DSEVfTk9USUZZX0NIQU5ORUxfSEFTSCk7CisJCWRzYV9waW4oY2hhbm5l bERTQSk7CisJCWRzYV9waW5fbWFwcGluZyhjaGFubmVsRFNBKTsKKwkJY2hhbm5lbEhhc2gg PSBkc2hhc2hfY3JlYXRlKGNoYW5uZWxEU0EsICZjaGFubmVsRFNIUGFyYW1zLCBOVUxMKTsK KworCQkvKiBTdG9yZSBoYW5kbGVzIGluIHNoYXJlZCBtZW1vcnkgZm9yIG90aGVyIGJhY2tl bmRzIHRvIHVzZSAqLworCQlhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhhc2hEU0EgPSBk c2FfZ2V0X2hhbmRsZShjaGFubmVsRFNBKTsKKwkJYXN5bmNRdWV1ZUNvbnRyb2wtPmNoYW5u ZWxIYXNoRFNIID0KKwkJCWRzaGFzaF9nZXRfaGFzaF90YWJsZV9oYW5kbGUoY2hhbm5lbEhh c2gpOworCX0KKwllbHNlIGlmICghY2hhbm5lbEhhc2gpCisJeworCQkvKiBBdHRhY2ggdG8g ZXhpc3RpbmcgZHluYW1pYyBzaGFyZWQgaGFzaCB0YWJsZSAqLworCQljaGFubmVsRFNBID0g ZHNhX2F0dGFjaChhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhhc2hEU0EpOworCQlkc2Ff cGluX21hcHBpbmcoY2hhbm5lbERTQSk7CisJCWNoYW5uZWxIYXNoID0gZHNoYXNoX2F0dGFj aChjaGFubmVsRFNBLCAmY2hhbm5lbERTSFBhcmFtcywKKwkJCQkJCQkJCWFzeW5jUXVldWVD b250cm9sLT5jaGFubmVsSGFzaERTSCwKKwkJCQkJCQkJCU5VTEwpOworCX0KKworCU1lbW9y eUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwlMV0xvY2tSZWxlYXNlKE5vdGlmeVF1 ZXVlTG9jayk7Cit9CisKKy8qCisgKiBpbml0TGlzdGVuQ2hhbm5lbHNIYXNoCisgKgkJTGF6 eSBpbml0aWFsaXphdGlvbiBvZiB0aGUgbG9jYWwgbGlzdGVuIGNoYW5uZWxzIGhhc2ggdGFi bGUuCisgKi8KK3N0YXRpYyB2b2lkCitpbml0TGlzdGVuQ2hhbm5lbHNIYXNoKHZvaWQpCit7 CisJSEFTSENUTAkJaGFzaF9jdGw7CisKKwkvKiBRdWljayBleGl0IGlmIHdlIGFscmVhZHkg ZGlkIHRoaXMgKi8KKwlpZiAobGlzdGVuQ2hhbm5lbHNIYXNoICE9IE5VTEwpCisJCXJldHVy bjsKKworCS8qIEluaXRpYWxpemUgbG9jYWwgaGFzaCB0YWJsZSBmb3IgdGhpcyBiYWNrZW5k J3MgbGlzdGVuZWQgY2hhbm5lbHMgKi8KKwltZW1zZXQoJmhhc2hfY3RsLCAwLCBzaXplb2Yo aGFzaF9jdGwpKTsKKwloYXNoX2N0bC5rZXlzaXplID0gTkFNRURBVEFMRU47CisJaGFzaF9j dGwuZW50cnlzaXplID0gc2l6ZW9mKHN0cnVjdCBDaGFubmVsSGFzaCk7CisKKwlsaXN0ZW5D aGFubmVsc0hhc2ggPQorCQloYXNoX2NyZWF0ZSgiTGlzdGVuIENoYW5uZWxzIiwKKwkJCQkJ NjQsCisJCQkJCSZoYXNoX2N0bCwKKwkJCQkJSEFTSF9FTEVNIHwgSEFTSF9TVFJJTkdTKTsK K30KKwogLyoKICAqIFJlcG9ydCBzcGFjZSBuZWVkZWQgZm9yIG91ciBzaGFyZWQgbWVtb3J5 IGFyZWEKICAqLwpAQCAtNTIwLDEyICs2ODEsMTcgQEAgQXN5bmNTaG1lbUluaXQodm9pZCkK IAkJUVVFVUVfU1RPUF9QQUdFID0gMDsKIAkJUVVFVUVfRklSU1RfTElTVEVORVIgPSBJTlZB TElEX1BST0NfTlVNQkVSOwogCQlhc3luY1F1ZXVlQ29udHJvbC0+bGFzdFF1ZXVlRmlsbFdh cm4gPSAwOworCQlhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhhc2hEU0EgPSBEU0FfSEFO RExFX0lOVkFMSUQ7CisJCWFzeW5jUXVldWVDb250cm9sLT5jaGFubmVsSGFzaERTSCA9IERT SEFTSF9IQU5ETEVfSU5WQUxJRDsKIAkJZm9yIChpbnQgaSA9IDA7IGkgPCBNYXhCYWNrZW5k czsgaSsrKQogCQl7CiAJCQlRVUVVRV9CQUNLRU5EX1BJRChpKSA9IEludmFsaWRQaWQ7CiAJ CQlRVUVVRV9CQUNLRU5EX0RCT0lEKGkpID0gSW52YWxpZE9pZDsKIAkJCVFVRVVFX05FWFRf TElTVEVORVIoaSkgPSBJTlZBTElEX1BST0NfTlVNQkVSOwogCQkJU0VUX1FVRVVFX1BPUyhR VUVVRV9CQUNLRU5EX1BPUyhpKSwgMCwgMCk7CisJCQlTRVRfUVVFVUVfUE9TKFFVRVVFX0JB Q0tFTkRfQURWQU5DSU5HX1BPUyhpKSwgMCwgMCk7CisJCQlRVUVVRV9CQUNLRU5EX1dBS0VV UF9QRU5ESU5HKGkpID0gZmFsc2U7CisJCQlRVUVVRV9CQUNLRU5EX0lTX0FEVkFOQ0lORyhp KSA9IGZhbHNlOwogCQl9CiAJfQogCkBAIC02NTYsNiArODIyLDcgQEAgQXN5bmNfTm90aWZ5 KGNvbnN0IGNoYXIgKmNoYW5uZWwsIGNvbnN0IGNoYXIgKnBheWxvYWQpCiAJCW5vdGlmaWVz LT5ldmVudHMgPSBsaXN0X21ha2UxKG4pOwogCQkvKiBXZSBjZXJ0YWlubHkgZG9uJ3QgbmVl ZCBhIGhhc2h0YWJsZSB5ZXQgKi8KIAkJbm90aWZpZXMtPmhhc2h0YWIgPSBOVUxMOworCQlu b3RpZmllcy0+Y2hhbm5lbEhhc2h0YWIgPSBOVUxMOwogCQlub3RpZmllcy0+dXBwZXIgPSBw ZW5kaW5nTm90aWZpZXM7CiAJCXBlbmRpbmdOb3RpZmllcyA9IG5vdGlmaWVzOwogCX0KQEAg LTY4Miw3ICs4NDksNyBAQCBBc3luY19Ob3RpZnkoY29uc3QgY2hhciAqY2hhbm5lbCwgY29u c3QgY2hhciAqcGF5bG9hZCkKICAqCQlDb21tb24gY29kZSBmb3IgbGlzdGVuLCB1bmxpc3Rl biwgdW5saXN0ZW4gYWxsIGNvbW1hbmRzLgogICoKICAqCQlBZGRzIHRoZSByZXF1ZXN0IHRv IHRoZSBsaXN0IG9mIHBlbmRpbmcgYWN0aW9ucy4KLSAqCQlBY3R1YWwgdXBkYXRlIG9mIHRo ZSBsaXN0ZW5DaGFubmVscyBsaXN0IGhhcHBlbnMgZHVyaW5nIHRyYW5zYWN0aW9uCisgKgkJ QWN0dWFsIHVwZGF0ZSBvZiB0aGUgbGlzdGVuQ2hhbm5lbHNIYXNoIGhhcHBlbnMgZHVyaW5n IHRyYW5zYWN0aW9uCiAgKgkJY29tbWl0LgogICovCiBzdGF0aWMgdm9pZApAQCAtNzgyLDMw ICs5NDksNDkgQEAgQXN5bmNfVW5saXN0ZW5BbGwodm9pZCkKICAqIFNRTCBmdW5jdGlvbjog cmV0dXJuIGEgc2V0IG9mIHRoZSBjaGFubmVsIG5hbWVzIHRoaXMgYmFja2VuZCBpcyBhY3Rp dmVseQogICogbGlzdGVuaW5nIHRvLgogICoKLSAqIE5vdGU6IHRoaXMgY29kaW5nIHJlbGll cyBvbiB0aGUgZmFjdCB0aGF0IHRoZSBsaXN0ZW5DaGFubmVscyBsaXN0IGNhbm5vdAorICog Tm90ZTogdGhpcyBjb2RpbmcgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQgdGhlIGxpc3RlbkNo YW5uZWxzSGFzaCBjYW5ub3QKICAqIGNoYW5nZSB3aXRoaW4gYSB0cmFuc2FjdGlvbi4KICAq LwogRGF0dW0KIHBnX2xpc3RlbmluZ19jaGFubmVscyhQR19GVU5DVElPTl9BUkdTKQogewog CUZ1bmNDYWxsQ29udGV4dCAqZnVuY2N0eDsKKwlIQVNIX1NFUV9TVEFUVVMgKnN0YXR1czsK IAogCS8qIHN0dWZmIGRvbmUgb25seSBvbiB0aGUgZmlyc3QgY2FsbCBvZiB0aGUgZnVuY3Rp b24gKi8KIAlpZiAoU1JGX0lTX0ZJUlNUQ0FMTCgpKQogCXsKKwkJTWVtb3J5Q29udGV4dCBv bGRjb250ZXh0OworCiAJCS8qIGNyZWF0ZSBhIGZ1bmN0aW9uIGNvbnRleHQgZm9yIGNyb3Nz LWNhbGwgcGVyc2lzdGVuY2UgKi8KIAkJZnVuY2N0eCA9IFNSRl9GSVJTVENBTExfSU5JVCgp OworCisJCS8qIEluaXRpYWxpemUgaGFzaCB0YWJsZSBpdGVyYXRpb24gaWYgd2UgaGF2ZSBh bnkgY2hhbm5lbHMgKi8KKwkJaWYgKGxpc3RlbkNoYW5uZWxzSGFzaCAhPSBOVUxMKQorCQl7 CisJCQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGZ1bmNjdHgtPm11bHRp X2NhbGxfbWVtb3J5X2N0eCk7CisJCQlzdGF0dXMgPSAoSEFTSF9TRVFfU1RBVFVTICopIHBh bGxvYyhzaXplb2YoSEFTSF9TRVFfU1RBVFVTKSk7CisJCQloYXNoX3NlcV9pbml0KHN0YXR1 cywgbGlzdGVuQ2hhbm5lbHNIYXNoKTsKKwkJCWZ1bmNjdHgtPnVzZXJfZmN0eCA9IHN0YXR1 czsKKwkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwkJfQorCQllbHNl CisJCXsKKwkJCWZ1bmNjdHgtPnVzZXJfZmN0eCA9IE5VTEw7CisJCX0KIAl9CiAKIAkvKiBz dHVmZiBkb25lIG9uIGV2ZXJ5IGNhbGwgb2YgdGhlIGZ1bmN0aW9uICovCiAJZnVuY2N0eCA9 IFNSRl9QRVJDQUxMX1NFVFVQKCk7CisJc3RhdHVzID0gKEhBU0hfU0VRX1NUQVRVUyAqKSBm dW5jY3R4LT51c2VyX2ZjdHg7CiAKLQlpZiAoZnVuY2N0eC0+Y2FsbF9jbnRyIDwgbGlzdF9s ZW5ndGgobGlzdGVuQ2hhbm5lbHMpKQorCWlmIChzdGF0dXMgIT0gTlVMTCkKIAl7Ci0JCWNo YXIJICAgKmNoYW5uZWwgPSAoY2hhciAqKSBsaXN0X250aChsaXN0ZW5DaGFubmVscywKLQkJ CQkJCQkJCQkJCWZ1bmNjdHgtPmNhbGxfY250cik7CisJCXN0cnVjdCBDaGFubmVsSGFzaCAq ZW50cnk7CiAKLQkJU1JGX1JFVFVSTl9ORVhUKGZ1bmNjdHgsIENTdHJpbmdHZXRUZXh0RGF0 dW0oY2hhbm5lbCkpOworCQllbnRyeSA9IChzdHJ1Y3QgQ2hhbm5lbEhhc2ggKikgaGFzaF9z ZXFfc2VhcmNoKHN0YXR1cyk7CisJCWlmIChlbnRyeSAhPSBOVUxMKQorCQkJU1JGX1JFVFVS Tl9ORVhUKGZ1bmNjdHgsIENTdHJpbmdHZXRUZXh0RGF0dW0oZW50cnktPmNoYW5uZWwpKTsK IAl9CiAKIAlTUkZfUkVUVVJOX0RPTkUoZnVuY2N0eCk7CkBAIC04OTMsNiArMTA3OSwzNiBA QCBQcmVDb21taXRfTm90aWZ5KHZvaWQpCiAJaWYgKHBlbmRpbmdOb3RpZmllcykKIAl7CiAJ CUxpc3RDZWxsICAgKm5leHROb3RpZnk7CisJCWJvb2wJCWZpcnN0SXRlcmF0aW9uID0gdHJ1 ZTsKKworCQkvKgorCQkgKiBCdWlsZCBsaXN0IG9mIHVuaXF1ZSBjaGFubmVscyBmb3IgU2ln bmFsQmFja2VuZHMoKS4KKwkJICoKKwkJICogSWYgd2UgaGF2ZSBhIGNoYW5uZWxIYXNodGFi LCB1c2UgaXQgdG8gZWZmaWNpZW50bHkgZ2V0IHRoZSB1bmlxdWUKKwkJICogY2hhbm5lbHMu ICBPdGhlcndpc2UsIGZhbGwgYmFjayB0byB0aGUgbGluZWFyIGFwcHJvYWNoLgorCQkgKi8K KwkJcGVuZGluZ05vdGlmeUNoYW5uZWxzID0gTklMOworCQlpZiAocGVuZGluZ05vdGlmaWVz LT5jaGFubmVsSGFzaHRhYiAhPSBOVUxMKQorCQl7CisJCQlIQVNIX1NFUV9TVEFUVVMgc3Rh dHVzOworCQkJc3RydWN0IENoYW5uZWxIYXNoICpjaGFubmVsRW50cnk7CisKKwkJCWhhc2hf c2VxX2luaXQoJnN0YXR1cywgcGVuZGluZ05vdGlmaWVzLT5jaGFubmVsSGFzaHRhYik7CisJ CQl3aGlsZSAoKGNoYW5uZWxFbnRyeSA9IChzdHJ1Y3QgQ2hhbm5lbEhhc2ggKikgaGFzaF9z ZXFfc2VhcmNoKCZzdGF0dXMpKSAhPSBOVUxMKQorCQkJCXBlbmRpbmdOb3RpZnlDaGFubmVs cyA9IGxhcHBlbmQocGVuZGluZ05vdGlmeUNoYW5uZWxzLCBjaGFubmVsRW50cnktPmNoYW5u ZWwpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogTGluZWFyIGFwcHJvYWNoIGZvciBzbWFs bCBudW1iZXIgb2Ygbm90aWZpY2F0aW9ucyAqLworCQkJZm9yZWFjaF9wdHIoTm90aWZpY2F0 aW9uLCBuLCBwZW5kaW5nTm90aWZpZXMtPmV2ZW50cykKKwkJCXsKKwkJCQljaGFyCSAgICpj aGFubmVsID0gbi0+ZGF0YTsKKworCQkJCS8qIEFkZCBpZiBub3QgYWxyZWFkeSBpbiBsaXN0 ICovCisJCQkJaWYgKCFsaXN0X21lbWJlcl9wdHIocGVuZGluZ05vdGlmeUNoYW5uZWxzLCBj aGFubmVsKSkKKwkJCQkJcGVuZGluZ05vdGlmeUNoYW5uZWxzID0gbGFwcGVuZChwZW5kaW5n Tm90aWZ5Q2hhbm5lbHMsIGNoYW5uZWwpOworCQkJfQorCQl9CiAKIAkJLyoKIAkJICogTWFr ZSBzdXJlIHRoYXQgd2UgaGF2ZSBhbiBYSUQgYXNzaWduZWQgdG8gdGhlIGN1cnJlbnQgdHJh bnNhY3Rpb24uCkBAIC05MjEsNiArMTEzNywyMiBAQCBQcmVDb21taXRfTm90aWZ5KHZvaWQp CiAJCUxvY2tTaGFyZWRPYmplY3QoRGF0YWJhc2VSZWxhdGlvbklkLCBJbnZhbGlkT2lkLCAw LAogCQkJCQkJIEFjY2Vzc0V4Y2x1c2l2ZUxvY2spOwogCisJCS8qCisJCSAqIEZvciB0aGUg ZGlyZWN0IGFkdmFuY2VtZW50IG9wdGltaXphdGlvbiBpbiBTaWduYWxCYWNrZW5kcygpLCB3 ZQorCQkgKiBuZWVkIHRvIGVuc3VyZSB0aGF0IG5vIG90aGVyIGJhY2tlbmQgY2FuIGluc2Vy dCBxdWV1ZSBlbnRyaWVzCisJCSAqIGJldHdlZW4gcXVldWVIZWFkQmVmb3JlV3JpdGUgYW5k IHF1ZXVlSGVhZEFmdGVyV3JpdGUuICBUaGUKKwkJICogaGVhdnl3ZWlnaHQgbG9jayBhYm92 ZSBwcm92aWRlcyB0aGlzIGd1YXJhbnRlZSwgc2luY2UgaXQgc2VyaWFsaXplcworCQkgKiBh bGwgd3JpdGVycy4KKwkJICoKKwkJICogTm90ZTogaWYgdGhlIGhlYXZ5d2VpZ2h0IGxvY2sg d2VyZSBldmVyIHJlbW92ZWQgZm9yIHNjYWxhYmlsaXR5CisJCSAqIHJlYXNvbnMsIHdlIGNv dWxkIGFjaGlldmUgdGhlIHNhbWUgZ3VhcmFudGVlIGJ5IGhvbGRpbmcKKwkJICogTm90aWZ5 UXVldWVMb2NrIGluIEVYQ0xVU0lWRSBtb2RlIGFjcm9zcyBhbGwgb3VyIGluc2VydGlvbnMs IHJhdGhlcgorCQkgKiB0aGFuIHJlbGVhc2luZyBhbmQgcmVhY3F1aXJpbmcgaXQgZm9yIGVh Y2ggcGFnZSBhcyB3ZSBkbyBiZWxvdy4KKwkJICovCisKKwkJLyogSW5pdGlhbGl6ZSBxdWV1 ZUhlYWRCZWZvcmVXcml0ZSB0byBhIHNhZmUgZGVmYXVsdCAqLworCQlTRVRfUVVFVUVfUE9T KHF1ZXVlSGVhZEJlZm9yZVdyaXRlLCAwLCAwKTsKKwogCQkvKiBOb3cgcHVzaCB0aGUgbm90 aWZpY2F0aW9ucyBpbnRvIHRoZSBxdWV1ZSAqLwogCQluZXh0Tm90aWZ5ID0gbGlzdF9oZWFk KHBlbmRpbmdOb3RpZmllcy0+ZXZlbnRzKTsKIAkJd2hpbGUgKG5leHROb3RpZnkgIT0gTlVM TCkKQEAgLTkzOCwxMiArMTE3MCwyMCBAQCBQcmVDb21taXRfTm90aWZ5KHZvaWQpCiAJCQkg KiBwb2ludCBpbiB0aW1lIHdlIGNhbiBzdGlsbCByb2xsIHRoZSB0cmFuc2FjdGlvbiBiYWNr LgogCQkJICovCiAJCQlMV0xvY2tBY3F1aXJlKE5vdGlmeVF1ZXVlTG9jaywgTFdfRVhDTFVT SVZFKTsKKwkJCWlmIChmaXJzdEl0ZXJhdGlvbikKKwkJCXsKKwkJCQlxdWV1ZUhlYWRCZWZv cmVXcml0ZSA9IFFVRVVFX0hFQUQ7CisJCQkJZmlyc3RJdGVyYXRpb24gPSBmYWxzZTsKKwkJ CX0KKwogCQkJYXN5bmNRdWV1ZUZpbGxXYXJuaW5nKCk7CiAJCQlpZiAoYXN5bmNRdWV1ZUlz RnVsbCgpKQogCQkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCQkoZXJyY29kZShFUlJDT0RFX1BS T0dSQU1fTElNSVRfRVhDRUVERUQpLAogCQkJCQkJIGVycm1zZygidG9vIG1hbnkgbm90aWZp Y2F0aW9ucyBpbiB0aGUgTk9USUZZIHF1ZXVlIikpKTsKIAkJCW5leHROb3RpZnkgPSBhc3lu Y1F1ZXVlQWRkRW50cmllcyhuZXh0Tm90aWZ5KTsKKwkJCXF1ZXVlSGVhZEFmdGVyV3JpdGUg PSBRVUVVRV9IRUFEOworCiAJCQlMV0xvY2tSZWxlYXNlKE5vdGlmeVF1ZXVlTG9jayk7CiAJ CX0KIApAQCAtOTU2LDcgKzExOTYsNyBAQCBQcmVDb21taXRfTm90aWZ5KHZvaWQpCiAgKgog ICoJCVRoaXMgaXMgY2FsbGVkIGF0IHRyYW5zYWN0aW9uIGNvbW1pdCwgYWZ0ZXIgY29tbWl0 dGluZyB0byBjbG9nLgogICoKLSAqCQlVcGRhdGUgbGlzdGVuQ2hhbm5lbHMgYW5kIGNsZWFy IHRyYW5zYWN0aW9uLWxvY2FsIHN0YXRlLgorICoJCVVwZGF0ZSBsaXN0ZW5DaGFubmVsc0hh c2ggYW5kIGNsZWFyIHRyYW5zYWN0aW9uLWxvY2FsIHN0YXRlLgogICoKICAqCQlJZiB3ZSBp c3N1ZWQgYW55IG5vdGlmaWNhdGlvbnMgaW4gdGhlIHRyYW5zYWN0aW9uLCBzZW5kIHNpZ25h bHMgdG8KICAqCQlsaXN0ZW5pbmcgYmFja2VuZHMgKHBvc3NpYmx5IGluY2x1ZGluZyBvdXJz ZWx2ZXMpIHRvIHByb2Nlc3MgdGhlbS4KQEAgLTEwMDEsNyArMTI0MSw4IEBAIEF0Q29tbWl0 X05vdGlmeSh2b2lkKQogCX0KIAogCS8qIElmIG5vIGxvbmdlciBsaXN0ZW5pbmcgdG8gYW55 dGhpbmcsIGdldCBvdXQgb2YgbGlzdGVuZXIgYXJyYXkgKi8KLQlpZiAoYW1SZWdpc3RlcmVk TGlzdGVuZXIgJiYgbGlzdGVuQ2hhbm5lbHMgPT0gTklMKQorCWlmIChhbVJlZ2lzdGVyZWRM aXN0ZW5lciAmJgorCQkobGlzdGVuQ2hhbm5lbHNIYXNoID09IE5VTEwgfHwgaGFzaF9nZXRf bnVtX2VudHJpZXMobGlzdGVuQ2hhbm5lbHNIYXNoKSA9PSAwKSkKIAkJYXN5bmNRdWV1ZVVu cmVnaXN0ZXIoKTsKIAogCS8qCkBAIC0xMTM0LDUwICsxMzc1LDE0NSBAQCBFeGVjX0xpc3Rl blByZUNvbW1pdCh2b2lkKQogc3RhdGljIHZvaWQKIEV4ZWNfTGlzdGVuQ29tbWl0KGNvbnN0 IGNoYXIgKmNoYW5uZWwpCiB7Ci0JTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCUNoYW5u ZWxIYXNoS2V5IGtleTsKKwlDaGFubmVsRW50cnkgKmVudHJ5OworCWJvb2wJCWZvdW5kOwor CVByb2NOdW1iZXIgKmxpc3RlbmVyczsKIAogCS8qIERvIG5vdGhpbmcgaWYgd2UgYXJlIGFs cmVhZHkgbGlzdGVuaW5nIG9uIHRoaXMgY2hhbm5lbCAqLwogCWlmIChJc0xpc3RlbmluZ09u KGNoYW5uZWwpKQogCQlyZXR1cm47CiAKIAkvKgotCSAqIEFkZCB0aGUgbmV3IGNoYW5uZWwg bmFtZSB0byBsaXN0ZW5DaGFubmVscy4KKwkgKiBBZGQgdGhlIG5ldyBjaGFubmVsIG5hbWUg dG8gbGlzdGVuQ2hhbm5lbHNIYXNoLgogCSAqCiAJICogWFhYIEl0IGlzIHRoZW9yZXRpY2Fs bHkgcG9zc2libGUgdG8gZ2V0IGFuIG91dC1vZi1tZW1vcnkgZmFpbHVyZSBoZXJlLAogCSAq IHdoaWNoIHdvdWxkIGJlIGJhZCBiZWNhdXNlIHdlIGFscmVhZHkgY29tbWl0dGVkLiAgRm9y IHRoZSBtb21lbnQgaXQKIAkgKiBkb2Vzbid0IHNlZW0gd29ydGggdHJ5aW5nIHRvIGd1YXJk IGFnYWluc3QgdGhhdCwgYnV0IG1heWJlIGltcHJvdmUgdGhpcwogCSAqIGxhdGVyLgogCSAq LwotCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oVG9wTWVtb3J5Q29udGV4 dCk7Ci0JbGlzdGVuQ2hhbm5lbHMgPSBsYXBwZW5kKGxpc3RlbkNoYW5uZWxzLCBwc3RyZHVw KGNoYW5uZWwpKTsKLQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJaW5p dExpc3RlbkNoYW5uZWxzSGFzaCgpOworCSh2b2lkKSBoYXNoX3NlYXJjaChsaXN0ZW5DaGFu bmVsc0hhc2gsIGNoYW5uZWwsIEhBU0hfRU5URVIsIE5VTEwpOworCisJLyogTm93IHVwZGF0 ZSB0aGUgc2hhcmVkIGNoYW5uZWxIYXNoIGZvciBTaWduYWxCYWNrZW5kcygpIHRvIHVzZSAq LworCWluaXRDaGFubmVsSGFzaCgpOworCisJQ2hhbm5lbEhhc2hQcmVwYXJlS2V5KCZrZXks IE15RGF0YWJhc2VJZCwgY2hhbm5lbCk7CisKKwkvKgorCSAqIEZvciBuZXcgZW50cmllcywg d2UgaW5pdGlhbGl6ZSBsaXN0ZW5lcnNBcnJheSB0byBJbnZhbGlkRHNhUG9pbnRlciBhcyBh CisJICogbWFya2VyLiBUaGlzIGhhbmRsZXMgYm90aCB0aGUgaW5pdGlhbCBjcmVhdGlvbiBh bmQgcG90ZW50aWFsIHJldHJ5CisJICogYWZ0ZXIgT09NLgorCSAqLworCWVudHJ5ID0gZHNo YXNoX2ZpbmRfb3JfaW5zZXJ0KGNoYW5uZWxIYXNoLCAma2V5LCAmZm91bmQpOworCisJaWYg KCFmb3VuZCkKKwkJZW50cnktPmxpc3RlbmVyc0FycmF5ID0gSW52YWxpZERzYVBvaW50ZXI7 CisKKwlpZiAoIURzYVBvaW50ZXJJc1ZhbGlkKGVudHJ5LT5saXN0ZW5lcnNBcnJheSkpCisJ eworCQkvKiBGaXJzdCBsaXN0ZW5lciBmb3IgdGhpcyBjaGFubmVsICovCisJCWVudHJ5LT5s aXN0ZW5lcnNBcnJheSA9IGRzYV9hbGxvY2F0ZShjaGFubmVsRFNBLAorCQkJCQkJCQkJCQkg c2l6ZW9mKFByb2NOdW1iZXIpICogSU5JVElBTF9MSVNURU5FUlNfQVJSQVlfU0laRSk7CisJ CWVudHJ5LT5udW1MaXN0ZW5lcnMgPSAwOworCQllbnRyeS0+YWxsb2NhdGVkTGlzdGVuZXJz ID0gSU5JVElBTF9MSVNURU5FUlNfQVJSQVlfU0laRTsKKwl9CisKKwlsaXN0ZW5lcnMgPSAo UHJvY051bWJlciAqKSBkc2FfZ2V0X2FkZHJlc3MoY2hhbm5lbERTQSwKKwkJCQkJCQkJCQkJ ICAgZW50cnktPmxpc3RlbmVyc0FycmF5KTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgZW50 cnktPm51bUxpc3RlbmVyczsgaSsrKQorCXsKKwkJaWYgKGxpc3RlbmVyc1tpXSA9PSBNeVBy b2NOdW1iZXIpCisJCXsKKwkJCWRzaGFzaF9yZWxlYXNlX2xvY2soY2hhbm5lbEhhc2gsIGVu dHJ5KTsKKwkJCXJldHVybjsJCQkJLyogQWxyZWFkeSByZWdpc3RlcmVkICovCisJCX0KKwl9 CisKKwlpZiAoZW50cnktPm51bUxpc3RlbmVycyA+PSBlbnRyeS0+YWxsb2NhdGVkTGlzdGVu ZXJzKQorCXsKKwkJaW50CQkJbmV3X3NpemUgPSBlbnRyeS0+YWxsb2NhdGVkTGlzdGVuZXJz ICogMjsKKwkJZHNhX3BvaW50ZXIgbmV3X2FycmF5ID0gZHNhX2FsbG9jYXRlKGNoYW5uZWxE U0EsCisJCQkJCQkJCQkJCSBzaXplb2YoUHJvY051bWJlcikgKiBuZXdfc2l6ZSk7CisJCVBy b2NOdW1iZXIgKm5ld19saXN0ZW5lcnMgPSAoUHJvY051bWJlciAqKSBkc2FfZ2V0X2FkZHJl c3MoY2hhbm5lbERTQSwKKwkJCQkJCQkJCQkJCQkJCQkgICBuZXdfYXJyYXkpOworCisJCW1l bWNweShuZXdfbGlzdGVuZXJzLCBsaXN0ZW5lcnMsCisJCQkgICBzaXplb2YoUHJvY051bWJl cikgKiBlbnRyeS0+bnVtTGlzdGVuZXJzKTsKKworCQlkc2FfZnJlZShjaGFubmVsRFNBLCBl bnRyeS0+bGlzdGVuZXJzQXJyYXkpOworCQllbnRyeS0+bGlzdGVuZXJzQXJyYXkgPSBuZXdf YXJyYXk7CisJCWVudHJ5LT5hbGxvY2F0ZWRMaXN0ZW5lcnMgPSBuZXdfc2l6ZTsKKwkJbGlz dGVuZXJzID0gbmV3X2xpc3RlbmVyczsKKwl9CisKKwlsaXN0ZW5lcnNbZW50cnktPm51bUxp c3RlbmVyc10gPSBNeVByb2NOdW1iZXI7CisJZW50cnktPm51bUxpc3RlbmVycysrOworCisJ ZHNoYXNoX3JlbGVhc2VfbG9jayhjaGFubmVsSGFzaCwgZW50cnkpOwogfQogCiAvKgogICog RXhlY19Vbmxpc3RlbkNvbW1pdCAtLS0gc3Vicm91dGluZSBmb3IgQXRDb21taXRfTm90aWZ5 CiAgKgotICogUmVtb3ZlIHRoZSBzcGVjaWZpZWQgY2hhbm5lbCBuYW1lIGZyb20gbGlzdGVu Q2hhbm5lbHMuCisgKgkJVW5saXN0ZW4gdGhlIHNwZWNpZmllZCBjaGFubmVsIGZvciB0aGlz IGJhY2tlbmQuCiAgKi8KIHN0YXRpYyB2b2lkCiBFeGVjX1VubGlzdGVuQ29tbWl0KGNvbnN0 IGNoYXIgKmNoYW5uZWwpCiB7Ci0JTGlzdENlbGwgICAqcTsKKwlDaGFubmVsSGFzaEtleSBr ZXk7CisJQ2hhbm5lbEVudHJ5ICplbnRyeTsKKwlQcm9jTnVtYmVyICpsaXN0ZW5lcnM7CisJ aW50CQkJaTsKIAogCWlmIChUcmFjZV9ub3RpZnkpCiAJCWVsb2coREVCVUcxLCAiRXhlY19V bmxpc3RlbkNvbW1pdCglcywlZCkiLCBjaGFubmVsLCBNeVByb2NQaWQpOwogCi0JZm9yZWFj aChxLCBsaXN0ZW5DaGFubmVscykKKwkvKiBSZW1vdmUgZnJvbSBvdXIgbG9jYWwgY2FjaGUg Ki8KKwlpZiAobGlzdGVuQ2hhbm5lbHNIYXNoICE9IE5VTEwpCisJCSh2b2lkKSBoYXNoX3Nl YXJjaChsaXN0ZW5DaGFubmVsc0hhc2gsIGNoYW5uZWwsIEhBU0hfUkVNT1ZFLCBOVUxMKTsK KworCS8qIE5vdyByZW1vdmUgZnJvbSB0aGUgc2hhcmVkIGNoYW5uZWxIYXNoICovCisJaWYg KGNoYW5uZWxIYXNoID09IE5VTEwpCisJCXJldHVybjsKKworCUNoYW5uZWxIYXNoUHJlcGFy ZUtleSgma2V5LCBNeURhdGFiYXNlSWQsIGNoYW5uZWwpOworCisJLyogTG9vayB1cCB0aGUg Y2hhbm5lbCB3aXRoIGV4Y2x1c2l2ZSBsb2NrIHNvIHdlIGNhbiBtb2RpZnkgaXQgKi8KKwll bnRyeSA9IGRzaGFzaF9maW5kKGNoYW5uZWxIYXNoLCAma2V5LCB0cnVlKTsKKwlpZiAoZW50 cnkgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJbGlzdGVuZXJzID0gKFByb2NOdW1iZXIgKikg ZHNhX2dldF9hZGRyZXNzKGNoYW5uZWxEU0EsCisJCQkJCQkJCQkJCSAgIGVudHJ5LT5saXN0 ZW5lcnNBcnJheSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZW50cnktPm51bUxpc3RlbmVyczsg aSsrKQogCXsKLQkJY2hhcgkgICAqbGNoYW4gPSAoY2hhciAqKSBsZmlyc3QocSk7Ci0KLQkJ aWYgKHN0cmNtcChsY2hhbiwgY2hhbm5lbCkgPT0gMCkKKwkJaWYgKGxpc3RlbmVyc1tpXSA9 PSBNeVByb2NOdW1iZXIpCiAJCXsKLQkJCWxpc3RlbkNoYW5uZWxzID0gZm9yZWFjaF9kZWxl dGVfY3VycmVudChsaXN0ZW5DaGFubmVscywgcSk7Ci0JCQlwZnJlZShsY2hhbik7Ci0JCQli cmVhazsKKwkJCWVudHJ5LT5udW1MaXN0ZW5lcnMtLTsKKwkJCWlmIChpIDwgZW50cnktPm51 bUxpc3RlbmVycykKKwkJCQltZW1tb3ZlKCZsaXN0ZW5lcnNbaV0sICZsaXN0ZW5lcnNbaSAr IDFdLAorCQkJCQkJc2l6ZW9mKFByb2NOdW1iZXIpICogKGVudHJ5LT5udW1MaXN0ZW5lcnMg LSBpKSk7CisKKwkJCWlmIChlbnRyeS0+bnVtTGlzdGVuZXJzID09IDApCisJCQl7CisJCQkJ LyogTGFzdCBsaXN0ZW5lciBmb3IgdGhpcyBjaGFubmVsICovCisJCQkJZHNhX2ZyZWUoY2hh bm5lbERTQSwgZW50cnktPmxpc3RlbmVyc0FycmF5KTsKKwkJCQlkc2hhc2hfZGVsZXRlX2Vu dHJ5KGNoYW5uZWxIYXNoLCBlbnRyeSk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJZHNo YXNoX3JlbGVhc2VfbG9jayhjaGFubmVsSGFzaCwgZW50cnkpOworCQkJfQorCisJCQlyZXR1 cm47CiAJCX0KIAl9CiAKKwlkc2hhc2hfcmVsZWFzZV9sb2NrKGNoYW5uZWxIYXNoLCBlbnRy eSk7CisKIAkvKgogCSAqIFdlIGRvIG5vdCBjb21wbGFpbiBhYm91dCB1bmxpc3RlbmluZyBz b21ldGhpbmcgbm90IGJlaW5nIGxpc3RlbmVkOwogCSAqIHNob3VsZCB3ZT8KQEAgLTExOTIs MzQgKzE1MjgsNjggQEAgRXhlY19Vbmxpc3RlbkNvbW1pdChjb25zdCBjaGFyICpjaGFubmVs KQogc3RhdGljIHZvaWQKIEV4ZWNfVW5saXN0ZW5BbGxDb21taXQodm9pZCkKIHsKKwlkc2hh c2hfc2VxX3N0YXR1cyBzdGF0dXM7CisJQ2hhbm5lbEVudHJ5ICplbnRyeTsKKwogCWlmIChU cmFjZV9ub3RpZnkpCiAJCWVsb2coREVCVUcxLCAiRXhlY19Vbmxpc3RlbkFsbENvbW1pdCgl ZCkiLCBNeVByb2NQaWQpOwogCi0JbGlzdF9mcmVlX2RlZXAobGlzdGVuQ2hhbm5lbHMpOwot CWxpc3RlbkNoYW5uZWxzID0gTklMOworCS8qIENsZWFyIG91ciBsb2NhbCBjYWNoZSAqLwor CWlmIChsaXN0ZW5DaGFubmVsc0hhc2ggIT0gTlVMTCkKKwl7CisJCWhhc2hfZGVzdHJveShs aXN0ZW5DaGFubmVsc0hhc2gpOworCQlsaXN0ZW5DaGFubmVsc0hhc2ggPSBOVUxMOworCX0K KworCS8qIE5vdyByZW1vdmUgZnJvbSB0aGUgc2hhcmVkIGNoYW5uZWxIYXNoICovCisJaWYg KGNoYW5uZWxIYXNoID09IE5VTEwpCisJCXJldHVybjsKKworCWRzaGFzaF9zZXFfaW5pdCgm c3RhdHVzLCBjaGFubmVsSGFzaCwgdHJ1ZSk7CisJd2hpbGUgKChlbnRyeSA9IGRzaGFzaF9z ZXFfbmV4dCgmc3RhdHVzKSkgIT0gTlVMTCkKKwl7CisJCWlmIChlbnRyeS0+a2V5LmRib2lk ID09IE15RGF0YWJhc2VJZCkKKwkJeworCQkJUHJvY051bWJlciAqbGlzdGVuZXJzOworCQkJ aW50CQkJaTsKKworCQkJbGlzdGVuZXJzID0gKFByb2NOdW1iZXIgKikgZHNhX2dldF9hZGRy ZXNzKGNoYW5uZWxEU0EsCisJCQkJCQkJCQkJCQkJICAgZW50cnktPmxpc3RlbmVyc0FycmF5 KTsKKworCQkJZm9yIChpID0gMDsgaSA8IGVudHJ5LT5udW1MaXN0ZW5lcnM7IGkrKykKKwkJ CXsKKwkJCQlpZiAobGlzdGVuZXJzW2ldID09IE15UHJvY051bWJlcikKKwkJCQl7CisJCQkJ CWVudHJ5LT5udW1MaXN0ZW5lcnMtLTsKKwkJCQkJaWYgKGkgPCBlbnRyeS0+bnVtTGlzdGVu ZXJzKQorCQkJCQkJbWVtbW92ZSgmbGlzdGVuZXJzW2ldLCAmbGlzdGVuZXJzW2kgKyAxXSwK KwkJCQkJCQkJc2l6ZW9mKFByb2NOdW1iZXIpICogKGVudHJ5LT5udW1MaXN0ZW5lcnMgLSBp KSk7CisKKwkJCQkJaWYgKGVudHJ5LT5udW1MaXN0ZW5lcnMgPT0gMCkKKwkJCQkJeworCQkJ CQkJZHNhX2ZyZWUoY2hhbm5lbERTQSwgZW50cnktPmxpc3RlbmVyc0FycmF5KTsKKwkJCQkJ CWRzaGFzaF9kZWxldGVfY3VycmVudCgmc3RhdHVzKTsKKwkJCQkJfQorCQkJCQlicmVhazsK KwkJCQl9CisJCQl9CisJCX0KKwl9CisJZHNoYXNoX3NlcV90ZXJtKCZzdGF0dXMpOwogfQog CiAvKgogICogVGVzdCB3aGV0aGVyIHdlIGFyZSBhY3RpdmVseSBsaXN0ZW5pbmcgb24gdGhl IGdpdmVuIGNoYW5uZWwgbmFtZS4KICAqCiAgKiBOb3RlOiB0aGlzIGZ1bmN0aW9uIGlzIGV4 ZWN1dGVkIGZvciBldmVyeSBub3RpZmljYXRpb24gZm91bmQgaW4gdGhlIHF1ZXVlLgotICog UGVyaGFwcyBpdCBpcyB3b3J0aCBmdXJ0aGVyIG9wdGltaXphdGlvbiwgZWcgY29udmVydCB0 aGUgbGlzdCB0byBhIHNvcnRlZAotICogYXJyYXkgc28gd2UgY2FuIGJpbmFyeS1zZWFyY2gg aXQuICBJbiBwcmFjdGljZSB0aGUgbGlzdCBpcyBsaWtlbHkgdG8gYmUKLSAqIGZhaXJseSBz aG9ydCwgdGhvdWdoLgogICovCiBzdGF0aWMgYm9vbAogSXNMaXN0ZW5pbmdPbihjb25zdCBj aGFyICpjaGFubmVsKQogewotCUxpc3RDZWxsICAgKnA7CisJaWYgKGxpc3RlbkNoYW5uZWxz SGFzaCA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CiAKLQlmb3JlYWNoKHAsIGxpc3RlbkNo YW5uZWxzKQotCXsKLQkJY2hhcgkgICAqbGNoYW4gPSAoY2hhciAqKSBsZmlyc3QocCk7Ci0K LQkJaWYgKHN0cmNtcChsY2hhbiwgY2hhbm5lbCkgPT0gMCkKLQkJCXJldHVybiB0cnVlOwot CX0KLQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIChoYXNoX3NlYXJjaChsaXN0ZW5DaGFubmVs c0hhc2gsIGNoYW5uZWwsIEhBU0hfRklORCwgTlVMTCkgIT0gTlVMTCk7CiB9CiAKIC8qCkBA IC0xMjI5LDcgKzE1OTksNyBAQCBJc0xpc3RlbmluZ09uKGNvbnN0IGNoYXIgKmNoYW5uZWwp CiBzdGF0aWMgdm9pZAogYXN5bmNRdWV1ZVVucmVnaXN0ZXIodm9pZCkKIHsKLQlBc3NlcnQo bGlzdGVuQ2hhbm5lbHMgPT0gTklMKTsJLyogZWxzZSBjYWxsZXIgZXJyb3IgKi8KKwlBc3Nl cnQobGlzdGVuQ2hhbm5lbHNIYXNoID09IE5VTEwgfHwgaGFzaF9nZXRfbnVtX2VudHJpZXMo bGlzdGVuQ2hhbm5lbHNIYXNoKSA9PSAwKTsJLyogZWxzZSBjYWxsZXIgZXJyb3IgKi8KIAog CWlmICghYW1SZWdpc3RlcmVkTGlzdGVuZXIpCS8qIG5vdGhpbmcgdG8gZG8gKi8KIAkJcmV0 dXJuOwpAQCAtMTI0MSw2ICsxNjExLDcgQEAgYXN5bmNRdWV1ZVVucmVnaXN0ZXIodm9pZCkK IAkvKiBNYXJrIG91ciBlbnRyeSBhcyBpbnZhbGlkICovCiAJUVVFVUVfQkFDS0VORF9QSUQo TXlQcm9jTnVtYmVyKSA9IEludmFsaWRQaWQ7CiAJUVVFVUVfQkFDS0VORF9EQk9JRChNeVBy b2NOdW1iZXIpID0gSW52YWxpZE9pZDsKKwlRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5H KE15UHJvY051bWJlcikgPSBmYWxzZTsKIAkvKiBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIGxp c3QgKi8KIAlpZiAoUVVFVUVfRklSU1RfTElTVEVORVIgPT0gTXlQcm9jTnVtYmVyKQogCQlR VUVVRV9GSVJTVF9MSVNURU5FUiA9IFFVRVVFX05FWFRfTElTVEVORVIoTXlQcm9jTnVtYmVy KTsKQEAgLTE1NjUsMTIgKzE5MzYsMTUgQEAgYXN5bmNRdWV1ZUZpbGxXYXJuaW5nKHZvaWQp CiAvKgogICogU2VuZCBzaWduYWxzIHRvIGxpc3RlbmluZyBiYWNrZW5kcy4KICAqCi0gKiBO b3JtYWxseSB3ZSBzaWduYWwgb25seSBiYWNrZW5kcyBpbiBvdXIgb3duIGRhdGFiYXNlLCBz aW5jZSBvbmx5IHRob3NlCi0gKiBiYWNrZW5kcyBjb3VsZCBiZSBpbnRlcmVzdGVkIGluIG5v dGlmaWVzIHdlIHNlbmQuICBIb3dldmVyLCBpZiB0aGVyZSdzCi0gKiBub3RpZnkgdHJhZmZp YyBpbiBvdXIgZGF0YWJhc2UgYnV0IG5vIHRyYWZmaWMgaW4gYW5vdGhlciBkYXRhYmFzZSB0 aGF0Ci0gKiBkb2VzIGhhdmUgbGlzdGVuZXIocyksIHRob3NlIGxpc3RlbmVycyB3aWxsIGZh bGwgZnVydGhlciBhbmQgZnVydGhlcgotICogYmVoaW5kLiAgV2FrZW4gdGhlbSBhbnl3YXkg aWYgdGhleSdyZSBmYXIgZW5vdWdoIGJlaGluZCwgc28gdGhhdCB0aGV5J2xsCi0gKiBhZHZh bmNlIHRoZWlyIHF1ZXVlIHBvc2l0aW9uIHBvaW50ZXJzLCBhbGxvd2luZyB0aGUgZ2xvYmFs IHRhaWwgdG8gYWR2YW5jZS4KKyAqIE5vcm1hbGx5IHdlIHNpZ25hbCBvbmx5IGJhY2tlbmRz IGluIG91ciBvd24gZGF0YWJhc2UsIHRoYXQgYXJlCisgKiBsaXN0ZW5pbmcgb24gdGhlIGNo YW5uZWxzIHdpdGggcGVuZGluZyBub3RpZmllcywgc2luY2Ugb25seSB0aG9zZQorICogYmFj a2VuZHMgYXJlIGludGVyZXN0ZWQgaW4gbm90aWZpZXMgd2Ugc2VuZC4KKyAqCisgKiBCYWNr ZW5kcyB0aGF0IGFyZSBrbm93biB0byBzdGlsbCBiZSBwb3NpdGlvbmVkIGF0IHRoZSBxdWV1 ZSBoZWFkCisgKiBmcm9tIGJlZm9yZSBvdXIgY29tbWl0IGNhbiBiZSBzYWZlbHkgYWR2YW5j ZWQgZGlyZWN0bHkgdG8gdGhlIG5ldworICogaGVhZCwgc2luY2UgdGhlIHF1ZXVlIHJlZ2lv biB3ZSB3cm90ZSBpcyBrbm93biB0byBjb250YWluIG9ubHkgb3VyCisgKiBvd24gbm90aWZp Y2F0aW9ucy4gIFRoaXMgYXZvaWRzIHVubmVjZXNzYXJ5IHdha2V1cHMgd2hlbiB0aGVyZSBp cworICogbm90aGluZyBvZiBpbnRlcmVzdCB0byB0aGVtLgogICoKICAqIFNpbmNlIHdlIGtu b3cgdGhlIFByb2NOdW1iZXIgYW5kIHRoZSBQaWQgdGhlIHNpZ25hbGluZyBpcyBxdWl0ZSBj aGVhcC4KICAqCkBAIC0xNTgzLDYgKzE5NTcsMTMgQEAgU2lnbmFsQmFja2VuZHModm9pZCkK IAlpbnQzMgkgICAqcGlkczsKIAlQcm9jTnVtYmVyICpwcm9jbm9zOwogCWludAkJCWNvdW50 OworCUxpc3RDZWxsICAgKmxjOworCisJLyoKKwkgKiBBdHRhY2ggdG8gdGhlIGNoYW5uZWwg aGFzaCBpZiBuZWVkZWQuICBXZSBtaWdodCBub3QgaGF2ZSBvbmUgaWYgdGhpcworCSAqIGJh Y2tlbmQgaGFzbid0IGRvbmUgTElTVEVOLCBidXQgd2UgbmVlZCBpdCB0byBmaW5kIGxpc3Rl bmVycy4KKwkgKi8KKwlpbml0Q2hhbm5lbEhhc2goKTsKIAogCS8qCiAJICogSWRlbnRpZnkg YmFja2VuZHMgdGhhdCB3ZSBuZWVkIHRvIHNpZ25hbC4gIFdlIGRvbid0IHdhbnQgdG8gc2Vu ZApAQCAtMTU5NywzNiArMTk3OCwxMDMgQEAgU2lnbmFsQmFja2VuZHModm9pZCkKIAljb3Vu dCA9IDA7CiAKIAlMV0xvY2tBY3F1aXJlKE5vdGlmeVF1ZXVlTG9jaywgTFdfRVhDTFVTSVZF KTsKLQlmb3IgKFByb2NOdW1iZXIgaSA9IFFVRVVFX0ZJUlNUX0xJU1RFTkVSOyBpICE9IElO VkFMSURfUFJPQ19OVU1CRVI7IGkgPSBRVUVVRV9ORVhUX0xJU1RFTkVSKGkpKQorCWZvcmVh Y2gobGMsIHBlbmRpbmdOb3RpZnlDaGFubmVscykKIAl7Ci0JCWludDMyCQlwaWQgPSBRVUVV RV9CQUNLRU5EX1BJRChpKTsKLQkJUXVldWVQb3NpdGlvbiBwb3M7CisJCWNoYXIJICAgKmNo YW5uZWwgPSAoY2hhciAqKSBsZmlyc3QobGMpOworCQlDaGFubmVsRW50cnkgKmVudHJ5ID0g TlVMTDsKKwkJUHJvY051bWJlciAqbGlzdGVuZXJzOwogCi0JCUFzc2VydChwaWQgIT0gSW52 YWxpZFBpZCk7Ci0JCXBvcyA9IFFVRVVFX0JBQ0tFTkRfUE9TKGkpOwotCQlpZiAoUVVFVUVf QkFDS0VORF9EQk9JRChpKSA9PSBNeURhdGFiYXNlSWQpCisJCWlmIChjaGFubmVsSGFzaCAh PSBOVUxMKQogCQl7Ci0JCQkvKgotCQkJICogQWx3YXlzIHNpZ25hbCBsaXN0ZW5lcnMgaW4g b3VyIG93biBkYXRhYmFzZSwgdW5sZXNzIHRoZXkncmUKLQkJCSAqIGFscmVhZHkgY2F1Z2h0 IHVwICh1bmxpa2VseSwgYnV0IHBvc3NpYmxlKS4KLQkJCSAqLworCQkJQ2hhbm5lbEhhc2hL ZXkga2V5OworCisJCQlDaGFubmVsSGFzaFByZXBhcmVLZXkoJmtleSwgTXlEYXRhYmFzZUlk LCBjaGFubmVsKTsKKwkJCWVudHJ5ID0gZHNoYXNoX2ZpbmQoY2hhbm5lbEhhc2gsICZrZXks IGZhbHNlKTsKKwkJfQorCisJCWlmIChlbnRyeSA9PSBOVUxMKQorCQkJY29udGludWU7CQkJ LyogTm8gbGlzdGVuZXJzIHJlZ2lzdGVyZWQgZm9yIHRoaXMgY2hhbm5lbCAqLworCisJCWxp c3RlbmVycyA9IChQcm9jTnVtYmVyICopIGRzYV9nZXRfYWRkcmVzcyhjaGFubmVsRFNBLAor CQkJCQkJCQkJCQkJICAgZW50cnktPmxpc3RlbmVyc0FycmF5KTsKKworCQlmb3IgKGludCBq ID0gMDsgaiA8IGVudHJ5LT5udW1MaXN0ZW5lcnM7IGorKykKKwkJeworCQkJUHJvY051bWJl cglpID0gbGlzdGVuZXJzW2pdOworCQkJaW50MzIJCXBpZDsKKwkJCVF1ZXVlUG9zaXRpb24g cG9zOworCisJCQlpZiAoUVVFVUVfQkFDS0VORF9XQUtFVVBfUEVORElORyhpKSkKKwkJCQlj b250aW51ZTsKKworCQkJcG9zID0gUVVFVUVfQkFDS0VORF9QT1MoaSk7CisJCQlwaWQgPSBR VUVVRV9CQUNLRU5EX1BJRChpKTsKKworCQkJLyogU2tpcCBpZiBjYXVnaHQgdXAgKi8KIAkJ CWlmIChRVUVVRV9QT1NfRVFVQUwocG9zLCBRVUVVRV9IRUFEKSkKIAkJCQljb250aW51ZTsK KworCQkJQXNzZXJ0KHBpZCAhPSBJbnZhbGlkUGlkKTsKKworCQkJUVVFVUVfQkFDS0VORF9X QUtFVVBfUEVORElORyhpKSA9IHRydWU7CisJCQlwaWRzW2NvdW50XSA9IHBpZDsKKwkJCXBy b2Nub3NbY291bnRdID0gaTsKKwkJCWNvdW50Kys7CiAJCX0KLQkJZWxzZQorCisJCWRzaGFz aF9yZWxlYXNlX2xvY2soY2hhbm5lbEhhc2gsIGVudHJ5KTsKKwl9CisKKwkvKgorCSAqIERp cmVjdCBhZHZhbmNlbWVudDogYXZvaWQgd2FraW5nIG5vbi1jYXVnaHQgdXAgYmFja2VuZHMg dGhhdCBhcmVuJ3QKKwkgKiBpbnRlcmVzdGVkIGluIG91ciBub3RpZmljYXRpb25zLgorCSAq LworCWlmIChwZW5kaW5nTm90aWZpZXMgIT0gTlVMTCkKKwl7CisJCWZvciAoUHJvY051bWJl ciBpID0gUVVFVUVfRklSU1RfTElTVEVORVI7CisJCQkgaSAhPSBJTlZBTElEX1BST0NfTlVN QkVSOworCQkJIGkgPSBRVUVVRV9ORVhUX0xJU1RFTkVSKGkpKQogCQl7CisJCQlRdWV1ZVBv c2l0aW9uIHBvczsKKwkJCWludDMyCQlwaWQ7CisKKwkJCWlmIChRVUVVRV9CQUNLRU5EX1dB S0VVUF9QRU5ESU5HKGkpKQorCQkJCWNvbnRpbnVlOworCisJCQlwb3MgPSBRVUVVRV9CQUNL RU5EX1BPUyhpKTsKKwkJCXBpZCA9IFFVRVVFX0JBQ0tFTkRfUElEKGkpOworCiAJCQkvKgot CQkJICogTGlzdGVuZXJzIGluIG90aGVyIGRhdGFiYXNlcyBzaG91bGQgYmUgc2lnbmFsZWQg b25seSBpZiB0aGV5Ci0JCQkgKiBhcmUgZmFyIGJlaGluZC4KKwkJCSAqIFdlIG5lZWQgdG8g c2lnbmFsIGFkdmFuY2luZyBsaXN0ZW5pbmcgYmFja2VuZHMgdGhhdCB3b3VsZCBnZXQKKwkJ CSAqIHN0dWNrIGF0IGEgcG9zaXRpb24gYmVmb3JlIHRoZSBuZXcgcXVldWUgaGVhZC4gV2Ug YWxzbyBuZWVkIHRvCisJCQkgKiBzaWduYWwgbGlzdGVuaW5nIGJhY2tlbmRzIHRoYXQgYXJl IGlkbGUgYXQgYSBwb3NpdGlvbiBiZWZvcmUKKwkJCSAqIHRoZSBvbGQgcXVldWUgaGVhZCBz aW5jZSB0aGV5IGNvdWxkIGJlIGludGVyZXN0ZWQgaW4gdGhlCisJCQkgKiBtZXNzYWdlcyBp bi1iZXR3ZWVuLgorCQkJICoKKwkJCSAqIExpc3RlbmluZyBiYWNrZW5kcyB0aGF0IGFyZSBu b3QgYWR2YW5jaW5nIGFuZCBhcmUgc3RhdGlvbmFyeSBhdAorCQkJICogYSBwb3NpdGlvbiBz b21ld2hlcmUgaW4gdGhlIHJhbmdlIHdlIGp1c3Qgd3JvdGUsIGNhbiBzYWZlbHkgYmUKKwkJ CSAqIGRpcmVjdCBhZHZhbmNlZCB0byB0aGUgbmV3IHF1ZXVlIGhlYWQsIHNpbmNlIHdlIGtu b3cgdGhhdCB0aGV5CisJCQkgKiBhcmUgbm90IGludGVyZXN0ZWQgaW4gb3VyIG1lc3NhZ2Vz LgogCQkJICovCi0JCQlpZiAoYXN5bmNRdWV1ZVBhZ2VEaWZmKFFVRVVFX1BPU19QQUdFKFFV RVVFX0hFQUQpLAotCQkJCQkJCQkgICBRVUVVRV9QT1NfUEFHRShwb3MpKSA8IFFVRVVFX0NM RUFOVVBfREVMQVkpCi0JCQkJY29udGludWU7CisJCQlpZiAoUVVFVUVfQkFDS0VORF9JU19B RFZBTkNJTkcoaSkgPworCQkJCVFVRVVFX1BPU19QUkVDRURFUyhRVUVVRV9CQUNLRU5EX0FE VkFOQ0lOR19QT1MoaSksIHF1ZXVlSGVhZEFmdGVyV3JpdGUpIDoKKwkJCQlRVUVVRV9QT1Nf UFJFQ0VERVMocG9zLCBxdWV1ZUhlYWRCZWZvcmVXcml0ZSkpCisJCQl7CisJCQkJQXNzZXJ0 KHBpZCAhPSBJbnZhbGlkUGlkKTsKKworCQkJCVFVRVVFX0JBQ0tFTkRfV0FLRVVQX1BFTkRJ TkcoaSkgPSB0cnVlOworCQkJCXBpZHNbY291bnRdID0gcGlkOworCQkJCXByb2Nub3NbY291 bnRdID0gaTsKKwkJCQljb3VudCsrOworCQkJfQorCQkJZWxzZSBpZiAoIVFVRVVFX0JBQ0tF TkRfSVNfQURWQU5DSU5HKGkpICYmCisJCQkJCSBRVUVVRV9QT1NfUFJFQ0VERVMocG9zLCBx dWV1ZUhlYWRBZnRlcldyaXRlKSkKKwkJCXsKKwkJCQlBc3NlcnQoIVFVRVVFX1BPU19QUkVD RURFUyhwb3MsIHF1ZXVlSGVhZEJlZm9yZVdyaXRlKSk7CisKKwkJCQlRVUVVRV9CQUNLRU5E X1BPUyhpKSA9IHF1ZXVlSGVhZEFmdGVyV3JpdGU7CisJCQl9CiAJCX0KLQkJLyogT0ssIG5l ZWQgdG8gc2lnbmFsIHRoaXMgb25lICovCi0JCXBpZHNbY291bnRdID0gcGlkOwotCQlwcm9j bm9zW2NvdW50XSA9IGk7Ci0JCWNvdW50Kys7CiAJfQogCUxXTG9ja1JlbGVhc2UoTm90aWZ5 UXVldWVMb2NrKTsKIApAQCAtMTY3Myw5ICsyMTIxLDEwIEBAIEF0QWJvcnRfTm90aWZ5KHZv aWQpCiAJLyoKIAkgKiBJZiB3ZSBMSVNURU4gYnV0IHRoZW4gcm9sbCBiYWNrIHRoZSB0cmFu c2FjdGlvbiBhZnRlciBQcmVDb21taXRfTm90aWZ5LAogCSAqIHdlIGhhdmUgcmVnaXN0ZXJl ZCBhcyBhIGxpc3RlbmVyIGJ1dCBoYXZlIG5vdCBtYWRlIGFueSBlbnRyeSBpbgotCSAqIGxp c3RlbkNoYW5uZWxzLiAgSW4gdGhhdCBjYXNlLCBkZXJlZ2lzdGVyIGFnYWluLgorCSAqIGxp c3RlbkNoYW5uZWxzSGFzaC4gIEluIHRoYXQgY2FzZSwgZGVyZWdpc3RlciBhZ2Fpbi4KIAkg Ki8KLQlpZiAoYW1SZWdpc3RlcmVkTGlzdGVuZXIgJiYgbGlzdGVuQ2hhbm5lbHMgPT0gTklM KQorCWlmIChhbVJlZ2lzdGVyZWRMaXN0ZW5lciAmJgorCQkobGlzdGVuQ2hhbm5lbHNIYXNo ID09IE5VTEwgfHwgaGFzaF9nZXRfbnVtX2VudHJpZXMobGlzdGVuQ2hhbm5lbHNIYXNoKSA9 PSAwKSkKIAkJYXN5bmNRdWV1ZVVucmVnaXN0ZXIoKTsKIAogCS8qIEFuZCBjbGVhbiB1cCAq LwpAQCAtMTg1NCwyMCArMjMwMywyOSBAQCBhc3luY1F1ZXVlUmVhZEFsbE5vdGlmaWNhdGlv bnModm9pZCkKIAlRdWV1ZVBvc2l0aW9uIGhlYWQ7CiAJU25hcHNob3QJc25hcHNob3Q7CiAK LQkvKiBGZXRjaCBjdXJyZW50IHN0YXRlICovCisJLyoKKwkgKiBGZXRjaCBjdXJyZW50IHN0 YXRlLCBpbmRpY2F0ZSB0byBvdGhlcnMgdGhhdCB3ZSBoYXZlIHdva2VuIHVwLCBhbmQgdGhh dAorCSAqIHdlIG5vdyB3aWxsIGJlIGFkdmFuY2luZyBvdXIgcG9zaXRpb24uCisJICovCiAJ TFdMb2NrQWNxdWlyZShOb3RpZnlRdWV1ZUxvY2ssIExXX1NIQVJFRCk7CiAJLyogQXNzZXJ0 IGNoZWNrcyB0aGF0IHdlIGhhdmUgYSB2YWxpZCBzdGF0ZSBlbnRyeSAqLwogCUFzc2VydChN eVByb2NQaWQgPT0gUVVFVUVfQkFDS0VORF9QSUQoTXlQcm9jTnVtYmVyKSk7CisJUVVFVUVf QkFDS0VORF9XQUtFVVBfUEVORElORyhNeVByb2NOdW1iZXIpID0gZmFsc2U7CisJaGVhZCA9 IFFVRVVFX0hFQUQ7CiAJcG9zID0gUVVFVUVfQkFDS0VORF9QT1MoTXlQcm9jTnVtYmVyKTsK LQloZWFkID0gUVVFVUVfSEVBRDsKLQlMV0xvY2tSZWxlYXNlKE5vdGlmeVF1ZXVlTG9jayk7 CiAKIAlpZiAoUVVFVUVfUE9TX0VRVUFMKHBvcywgaGVhZCkpCiAJewogCQkvKiBOb3RoaW5n IHRvIGRvLCB3ZSBoYXZlIHJlYWQgYWxsIG5vdGlmaWNhdGlvbnMgYWxyZWFkeS4gKi8KKwkJ TFdMb2NrUmVsZWFzZShOb3RpZnlRdWV1ZUxvY2spOwogCQlyZXR1cm47CiAJfQogCisJUVVF VUVfQkFDS0VORF9JU19BRFZBTkNJTkcoTXlQcm9jTnVtYmVyKSA9IHRydWU7CisJUVVFVUVf QkFDS0VORF9BRFZBTkNJTkdfUE9TKE15UHJvY051bWJlcikgPSBoZWFkOworCisJTFdMb2Nr UmVsZWFzZShOb3RpZnlRdWV1ZUxvY2spOworCiAJLyotLS0tLS0tLS0tCiAJICogR2V0IHNu YXBzaG90IHdlJ2xsIHVzZSB0byBkZWNpZGUgd2hpY2ggeGFjdHMgYXJlIHN0aWxsIGluIHBy b2dyZXNzLgogCSAqIFRoaXMgaXMgdHJpY2tpZXIgdGhhbiBpdCBtaWdodCBzZWVtLCBiZWNh dXNlIG9mIHJhY2UgY29uZGl0aW9ucy4KQEAgLTE5NTQsNiArMjQxMiw4IEBAIGFzeW5jUXVl dWVSZWFkQWxsTm90aWZpY2F0aW9ucyh2b2lkKQogCiAJCS8qIFVwZGF0ZSBzaGFyZWQgc3Rh dGUgKi8KIAkJTFdMb2NrQWNxdWlyZShOb3RpZnlRdWV1ZUxvY2ssIExXX1NIQVJFRCk7CisK KwkJUVVFVUVfQkFDS0VORF9JU19BRFZBTkNJTkcoTXlQcm9jTnVtYmVyKSA9IGZhbHNlOwog CQlRVUVVRV9CQUNLRU5EX1BPUyhNeVByb2NOdW1iZXIpID0gcG9zOwogCQlMV0xvY2tSZWxl YXNlKE5vdGlmeVF1ZXVlTG9jayk7CiAKQEAgLTIwNTUsNyArMjUxNSw3IEBAIGFzeW5jUXVl dWVQcm9jZXNzUGFnZUVudHJpZXMoUXVldWVQb3NpdGlvbiAqY3VycmVudCwKIAkJCSAqIG92 ZXIgaXQgb24gdGhlIGZpcnN0IExJU1RFTiBpbiBhIHNlc3Npb24sIGFuZCBub3QgZ2V0IHN0 dWNrIG9uCiAJCQkgKiBpdCBpbmRlZmluaXRlbHkuCiAJCQkgKi8KLQkJCWlmIChsaXN0ZW5D aGFubmVscyA9PSBOSUwpCisJCQlpZiAobGlzdGVuQ2hhbm5lbHNIYXNoID09IE5VTEwgfHwg aGFzaF9nZXRfbnVtX2VudHJpZXMobGlzdGVuQ2hhbm5lbHNIYXNoKSA9PSAwKQogCQkJCWNv bnRpbnVlOwogCiAJCQlpZiAoVHJhbnNhY3Rpb25JZERpZENvbW1pdChxZS0+eGlkKSkKQEAg LTIzMTAsNyArMjc3MCw3IEBAIFByb2Nlc3NJbmNvbWluZ05vdGlmeShib29sIGZsdXNoKQog CW5vdGlmeUludGVycnVwdFBlbmRpbmcgPSBmYWxzZTsKIAogCS8qIERvIG5vdGhpbmcgZWxz ZSBpZiB3ZSBhcmVuJ3QgYWN0aXZlbHkgbGlzdGVuaW5nICovCi0JaWYgKGxpc3RlbkNoYW5u ZWxzID09IE5JTCkKKwlpZiAobGlzdGVuQ2hhbm5lbHNIYXNoID09IE5VTEwgfHwgaGFzaF9n ZXRfbnVtX2VudHJpZXMobGlzdGVuQ2hhbm5lbHNIYXNoKSA9PSAwKQogCQlyZXR1cm47CiAK IAlpZiAoVHJhY2Vfbm90aWZ5KQpAQCAtMjQxNCwxMyArMjg3NCwxNSBAQCBBZGRFdmVudFRv UGVuZGluZ05vdGlmaWVzKE5vdGlmaWNhdGlvbiAqbikKIHsKIAlBc3NlcnQocGVuZGluZ05v dGlmaWVzLT5ldmVudHMgIT0gTklMKTsKIAotCS8qIENyZWF0ZSB0aGUgaGFzaCB0YWJsZSBp ZiBpdCdzIHRpbWUgdG8gKi8KKwkvKiBDcmVhdGUgdGhlIGhhc2ggdGFibGVzIGlmIGl0J3Mg dGltZSB0byAqLwogCWlmIChsaXN0X2xlbmd0aChwZW5kaW5nTm90aWZpZXMtPmV2ZW50cykg Pj0gTUlOX0hBU0hBQkxFX05PVElGSUVTICYmCiAJCXBlbmRpbmdOb3RpZmllcy0+aGFzaHRh YiA9PSBOVUxMKQogCXsKIAkJSEFTSENUTAkJaGFzaF9jdGw7CiAJCUxpc3RDZWxsICAgKmw7 CiAKKwkJQXNzZXJ0KHBlbmRpbmdOb3RpZmllcy0+Y2hhbm5lbEhhc2h0YWIgPT0gTlVMTCk7 CisKIAkJLyogQ3JlYXRlIHRoZSBoYXNoIHRhYmxlICovCiAJCWhhc2hfY3RsLmtleXNpemUg PSBzaXplb2YoTm90aWZpY2F0aW9uICopOwogCQloYXNoX2N0bC5lbnRyeXNpemUgPSBzaXpl b2Yoc3RydWN0IE5vdGlmaWNhdGlvbkhhc2gpOwpAQCAtMjQzMywxMCArMjg5NSwyMiBAQCBB ZGRFdmVudFRvUGVuZGluZ05vdGlmaWVzKE5vdGlmaWNhdGlvbiAqbikKIAkJCQkJCSZoYXNo X2N0bCwKIAkJCQkJCUhBU0hfRUxFTSB8IEhBU0hfRlVOQ1RJT04gfCBIQVNIX0NPTVBBUkUg fCBIQVNIX0NPTlRFWFQpOwogCisJCS8qIENyZWF0ZSB0aGUgY2hhbm5lbCBoYXNoIHRhYmxl ICovCisJCW1lbXNldCgmaGFzaF9jdGwsIDAsIHNpemVvZihoYXNoX2N0bCkpOworCQloYXNo X2N0bC5rZXlzaXplID0gTkFNRURBVEFMRU47CisJCWhhc2hfY3RsLmVudHJ5c2l6ZSA9IHNp emVvZihzdHJ1Y3QgQ2hhbm5lbEhhc2gpOworCQloYXNoX2N0bC5oY3h0ID0gQ3VyVHJhbnNh Y3Rpb25Db250ZXh0OworCQlwZW5kaW5nTm90aWZpZXMtPmNoYW5uZWxIYXNodGFiID0KKwkJ CWhhc2hfY3JlYXRlKCJQZW5kaW5nIE5vdGlmeSBDaGFubmVscyIsCisJCQkJCQk2NEwsCisJ CQkJCQkmaGFzaF9jdGwsCisJCQkJCQlIQVNIX0VMRU0gfCBIQVNIX1NUUklOR1MgfCBIQVNI X0NPTlRFWFQpOworCiAJCS8qIEluc2VydCBhbGwgdGhlIGFscmVhZHktZXhpc3RpbmcgZXZl bnRzICovCiAJCWZvcmVhY2gobCwgcGVuZGluZ05vdGlmaWVzLT5ldmVudHMpCiAJCXsKIAkJ CU5vdGlmaWNhdGlvbiAqb2xkbiA9IChOb3RpZmljYXRpb24gKikgbGZpcnN0KGwpOworCQkJ Y2hhcgkgICAqY2hhbm5lbCA9IG9sZG4tPmRhdGE7CiAJCQlib29sCQlmb3VuZDsKIAogCQkJ KHZvaWQpIGhhc2hfc2VhcmNoKHBlbmRpbmdOb3RpZmllcy0+aGFzaHRhYiwKQEAgLTI0NDQs MjIgKzI5MTgsNDIgQEAgQWRkRXZlbnRUb1BlbmRpbmdOb3RpZmllcyhOb3RpZmljYXRpb24g Km4pCiAJCQkJCQkJICAgSEFTSF9FTlRFUiwKIAkJCQkJCQkgICAmZm91bmQpOwogCQkJQXNz ZXJ0KCFmb3VuZCk7CisKKwkJCS8qIEluc2VydCBjaGFubmVsIGludG8gY2hhbm5lbEhhc2h0 YWIgKi8KKwkJCSh2b2lkKSBoYXNoX3NlYXJjaChwZW5kaW5nTm90aWZpZXMtPmNoYW5uZWxI YXNodGFiLAorCQkJCQkJCSAgIGNoYW5uZWwsCisJCQkJCQkJICAgSEFTSF9FTlRFUiwKKwkJ CQkJCQkgICAmZm91bmQpOworCQkJLyogZm91bmQgbWF5IGJlIHRydWUgaWYgbXVsdGlwbGUg ZXZlbnRzIG9uIHNhbWUgY2hhbm5lbCAqLwogCQl9CiAJfQogCiAJLyogQWRkIG5ldyBldmVu dCB0byB0aGUgbGlzdCwgaW4gb3JkZXIgKi8KIAlwZW5kaW5nTm90aWZpZXMtPmV2ZW50cyA9 IGxhcHBlbmQocGVuZGluZ05vdGlmaWVzLT5ldmVudHMsIG4pOwogCi0JLyogQWRkIGV2ZW50 IHRvIHRoZSBoYXNoIHRhYmxlIGlmIG5lZWRlZCAqLworCS8qIEFkZCBldmVudCB0byB0aGUg aGFzaCB0YWJsZXMgaWYgbmVlZGVkICovCiAJaWYgKHBlbmRpbmdOb3RpZmllcy0+aGFzaHRh YiAhPSBOVUxMKQogCXsKIAkJYm9vbAkJZm91bmQ7CiAKKwkJQXNzZXJ0KHBlbmRpbmdOb3Rp Zmllcy0+Y2hhbm5lbEhhc2h0YWIgIT0gTlVMTCk7CisKIAkJKHZvaWQpIGhhc2hfc2VhcmNo KHBlbmRpbmdOb3RpZmllcy0+aGFzaHRhYiwKIAkJCQkJCSAgICZuLAogCQkJCQkJICAgSEFT SF9FTlRFUiwKIAkJCQkJCSAgICZmb3VuZCk7CiAJCUFzc2VydCghZm91bmQpOworCisJCS8q IEFkZCBjaGFubmVsIHRvIGNoYW5uZWxIYXNodGFiICovCisJCXsKKwkJCWNoYXIJICAgKmNo YW5uZWwgPSBuLT5kYXRhOworCisJCQkodm9pZCkgaGFzaF9zZWFyY2gocGVuZGluZ05vdGlm aWVzLT5jaGFubmVsSGFzaHRhYiwKKwkJCQkJCQkgICBjaGFubmVsLAorCQkJCQkJCSAgIEhB U0hfRU5URVIsCisJCQkJCQkJICAgJmZvdW5kKTsKKwkJCS8qIGZvdW5kIG1heSBiZSB0cnVl IGlmIHdlIGFscmVhZHkgaGF2ZSBhbiBldmVudCBvbiB0aGlzIGNoYW5uZWwgKi8KKwkJfQog CX0KIH0KIApAQCAtMjQ5Nyw3ICsyOTkxLDcgQEAgbm90aWZpY2F0aW9uX21hdGNoKGNvbnN0 IHZvaWQgKmtleTEsIGNvbnN0IHZvaWQgKmtleTIsIFNpemUga2V5c2l6ZSkKIAlyZXR1cm4g MTsJCQkJCS8qIG5vdCBlcXVhbCAqLwogfQogCi0vKiBDbGVhciB0aGUgcGVuZGluZ0FjdGlv bnMgYW5kIHBlbmRpbmdOb3RpZmllcyBsaXN0cy4gKi8KKy8qIENsZWFyIHRoZSBwZW5kaW5n QWN0aW9ucywgcGVuZGluZ05vdGlmaWVzLCBhbmQgcGVuZGluZ05vdGlmeUNoYW5uZWxzIGxp c3RzLiAqLwogc3RhdGljIHZvaWQKIENsZWFyUGVuZGluZ0FjdGlvbnNBbmROb3RpZmllcyh2 b2lkKQogewpAQCAtMjUwOSw2ICszMDAzLDcgQEAgQ2xlYXJQZW5kaW5nQWN0aW9uc0FuZE5v dGlmaWVzKHZvaWQpCiAJICovCiAJcGVuZGluZ0FjdGlvbnMgPSBOVUxMOwogCXBlbmRpbmdO b3RpZmllcyA9IE5VTEw7CisJcGVuZGluZ05vdGlmeUNoYW5uZWxzID0gTklMOwogfQogCiAv KgpAQCAtMjUxOSwzICszMDE0LDE2IEBAIGNoZWNrX25vdGlmeV9idWZmZXJzKGludCAqbmV3 dmFsLCB2b2lkICoqZXh0cmEsIEd1Y1NvdXJjZSBzb3VyY2UpCiB7CiAJcmV0dXJuIGNoZWNr X3NscnVfYnVmZmVycygibm90aWZ5X2J1ZmZlcnMiLCBuZXd2YWwpOwogfQorCisKKy8qCisg KiBDaGFubmVsSGFzaFByZXBhcmVLZXkKKyAqCQlQcmVwYXJlIGEgY2hhbm5lbCBrZXkgZm9y IHVzZSBhcyBhIGhhc2gga2V5LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK0NoYW5uZWxI YXNoUHJlcGFyZUtleShDaGFubmVsSGFzaEtleSAqa2V5LCBPaWQgZGJvaWQsIGNvbnN0IGNo YXIgKmNoYW5uZWwpCit7CisJbWVtc2V0KGtleSwgMCwgc2l6ZW9mKENoYW5uZWxIYXNoS2V5 KSk7CisJa2V5LT5kYm9pZCA9IGRib2lkOworCXN0cmxjcHkoa2V5LT5jaGFubmVsLCBjaGFu bmVsLCBOQU1FREFUQUxFTik7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9h Y3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4dCBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2 aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0CmluZGV4IGMxYWM3MWZmN2YyLi43YzJjZjk2MDA5 MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9u YW1lcy50eHQKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudF9u YW1lcy50eHQKQEAgLTM2OSw2ICszNjksNyBAQCBTdWJ0cmFuc0J1ZmZlcgkiV2FpdGluZyBm b3IgSS9PIG9uIGEgc3ViLXRyYW5zYWN0aW9uIFNMUlUgYnVmZmVyLiIKIE11bHRpWGFjdE9m ZnNldEJ1ZmZlcgkiV2FpdGluZyBmb3IgSS9PIG9uIGEgbXVsdGl4YWN0IG9mZnNldCBTTFJV IGJ1ZmZlci4iCiBNdWx0aVhhY3RNZW1iZXJCdWZmZXIJIldhaXRpbmcgZm9yIEkvTyBvbiBh IG11bHRpeGFjdCBtZW1iZXIgU0xSVSBidWZmZXIuIgogTm90aWZ5QnVmZmVyCSJXYWl0aW5n IGZvciBJL08gb24gYSA8Y29tbWFuZD5OT1RJRlk8L2NvbW1hbmQ+IG1lc3NhZ2UgU0xSVSBi dWZmZXIuIgorTm90aWZ5Q2hhbm5lbEhhc2gJIldhaXRpbmcgdG8gYWNjZXNzIHRoZSA8Y29t bWFuZD5OT1RJRlk8L2NvbW1hbmQ+IGNoYW5uZWwgaGFzaCB0YWJsZS4iCiBTZXJpYWxCdWZm ZXIJIldhaXRpbmcgZm9yIEkvTyBvbiBhIHNlcmlhbGl6YWJsZSB0cmFuc2FjdGlvbiBjb25m bGljdCBTTFJVIGJ1ZmZlci4iCiBXQUxJbnNlcnQJIldhaXRpbmcgdG8gaW5zZXJ0IFdBTCBk YXRhIGludG8gYSBtZW1vcnkgYnVmZmVyLiIKIEJ1ZmZlckNvbnRlbnQJIldhaXRpbmcgdG8g YWNjZXNzIGEgZGF0YSBwYWdlIGluIG1lbW9yeS4iCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9zdG9yYWdlL2x3bG9ja2xpc3QuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrbGlz dC5oCmluZGV4IDViMGNlMzgzNDA4Li40MjM2OTY1ZTcyYSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9sd2xvY2tsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9s d2xvY2tsaXN0LmgKQEAgLTEwMSw2ICsxMDEsNyBAQCBQR19MV0xPQ0tUUkFOQ0hFKFNVQlRS QU5TX0JVRkZFUiwgU3VidHJhbnNCdWZmZXIpCiBQR19MV0xPQ0tUUkFOQ0hFKE1VTFRJWEFD VE9GRlNFVF9CVUZGRVIsIE11bHRpWGFjdE9mZnNldEJ1ZmZlcikKIFBHX0xXTE9DS1RSQU5D SEUoTVVMVElYQUNUTUVNQkVSX0JVRkZFUiwgTXVsdGlYYWN0TWVtYmVyQnVmZmVyKQogUEdf TFdMT0NLVFJBTkNIRShOT1RJRllfQlVGRkVSLCBOb3RpZnlCdWZmZXIpCitQR19MV0xPQ0tU UkFOQ0hFKE5PVElGWV9DSEFOTkVMX0hBU0gsIE5vdGlmeUNoYW5uZWxIYXNoKQogUEdfTFdM T0NLVFJBTkNIRShTRVJJQUxfQlVGRkVSLCBTZXJpYWxCdWZmZXIpCiBQR19MV0xPQ0tUUkFO Q0hFKFdBTF9JTlNFUlQsIFdBTEluc2VydCkKIFBHX0xXTE9DS1RSQU5DSEUoQlVGRkVSX0NP TlRFTlQsIEJ1ZmZlckNvbnRlbnQpCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4 IDIzYmNlNzJhZTY0Li5jOTkxN2U4N2Q0NSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxp c3QKQEAgLTQxMiw2ICs0MTIsOCBAQCBDYXRhbG9nSWRNYXBFbnRyeQogQ2F0YWxvZ0luZGV4 U3RhdGUKIENoYW5nZVZhck5vZGVzX2NhbGxiYWNrCiBDaGFuZ2VWYXJOb2Rlc19jb250ZXh0 CitDaGFubmVsRW50cnkKK0NoYW5uZWxIYXNoS2V5CiBDaGVja1BvaW50CiBDaGVja1BvaW50 U3RtdAogQ2hlY2twb2ludFN0YXRzRGF0YQotLSAKMi41MC4xCgo= --9f71c8c85e4649908b5af13be7598d74--