From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from conssluserg-04.nifty.com (conssluserg-04.nifty.com [210.131.2.83]) by sourceware.org (Postfix) with ESMTPS id 220283857C42 for ; Fri, 24 Jul 2020 05:38:56 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 220283857C42 Received: from Express5800-S70 (v038192.dynamic.ppp.asahi-net.or.jp [124.155.38.192]) (authenticated) by conssluserg-04.nifty.com with ESMTP id 06O5cZKk016192 for ; Fri, 24 Jul 2020 14:38:35 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conssluserg-04.nifty.com 06O5cZKk016192 X-Nifty-SrcIP: [124.155.38.192] Date: Fri, 24 Jul 2020 14:38:42 +0900 From: Takashi Yano To: cygwin-developers@cygwin.com Subject: Re: New implementation of pseudo console support (experimental) Message-Id: <20200724143842.020cea9ffa2f6e7ffe760f67@nifty.ne.jp> In-Reply-To: <20200723093328.709654ea6a539cb9b3251ab2@nifty.ne.jp> References: <20200514183420.c246647a6d9e396d42c6b47e@nifty.ne.jp> <20200516092956.74369d694d611b1dcd095607@nifty.ne.jp> <20200516164735.2a2ef183788b151e9185ef41@nifty.ne.jp> <20200519224018.746f6324badd8a5762df42b1@nifty.ne.jp> <20200525195332.cf60ab2f38d167a76513740e@nifty.ne.jp> <20200526100955.30b1a2baea517e0565f30db6@nifty.ne.jp> <20200529004024.0c2ac3c68b588bda987e0837@nifty.ne.jp> <20200701204751.27609a8f5701010468521a87@nifty.ne.jp> <20200717111912.GG3784@calimero.vinschen.de> <20200718143024.45920213c7aa81912939d944@nifty.ne.jp> <20200720080613.GE16360@calimero.vinschen.de> <20200722031751.e02bf24a7519b43d80e5db71@nifty.ne.jp> <20200722174541.c8113635236fd217cb9ebb77@nifty.ne.jp> <20200723093328.709654ea6a539cb9b3251ab2@nifty.ne.jp> X-Mailer: Sylpheed 3.7.0 (GTK+ 2.24.30; i686-pc-mingw32) Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart=_Fri__24_Jul_2020_14_38_42_+0900_VPCcJBB2pXRRNAXX" X-Spam-Status: No, score=-1.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=no autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: cygwin-developers@cygwin.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Cygwin core component developers mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Jul 2020 05:39:02 -0000 This is a multi-part message in MIME format. --Multipart=_Fri__24_Jul_2020_14_38_42_+0900_VPCcJBB2pXRRNAXX Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit On Thu, 23 Jul 2020 09:33:28 +0900 Takashi Yano via Cygwin-developers wrote: > On Wed, 22 Jul 2020 17:45:41 +0900 > Takashi Yano via Cygwin-developers wrote: > > > On Wed, 22 Jul 2020 03:17:51 +0900 > > Takashi Yano via Cygwin-developers wrote: > > > Hi Corinna, > > > > > > On Mon, 20 Jul 2020 10:06:13 +0200 > > > Corinna Vinschen wrote: > > > > On Jul 18 14:30, Takashi Yano via Cygwin-developers wrote: > > > > > Hi Corinna, > > > > > > > > > > On Fri, 17 Jul 2020 13:19:12 +0200 > > > > > Corinna Vinschen wrote: > > > > > > Hi Takashi, > > > > > > > > > > > > On Jul 1 20:47, Takashi Yano via Cygwin-developers wrote: > > > > > > > [...] > > > > > > > Revise the patch to fit the current git head. > > > > > > > > > > > > are you satisfied with the code? If you want to merge it, > > > > > > I'd bump Cygwin to 3.2. > > > > > > > > > > Since this new implementation has both advantages and disadvantages, > > > > > there might be some options. > > > > > > > > > > 1) Default to new implementation and leave the current one as an > > > > > alternative. Switch them using the environment CYGWIN. > > > > > 2) Default to current implementation and add the new one as an > > > > > alternative. Switch them using the environment CYGWIN. > > > > > 3) Adopt only new implementation and throw the current one away. > > > > > > > > > > What do you think? > > > > > > > > Do you really want to maintain twice as much code doing the same stuff > > > > and constantly having to ask users which version of the code they are > > > > running? The maintenance cost outweighs the advantages, IMHO. > > > > Personally I'd go for option 3. > > > > > > Personally, I feel a tinge of sadness to discard the current code, > > > however, your opinion sounds reasonable. > > > > > > I will submit a new patch in which all the codes specific to the > > > current implementation are removed. > > > > Attached is the patch in git format-patch format. > > All the codes specific to the current implementation are removed. > > > > Despite the utmost care, the changes are relatively large, so some > > degradation may exist. > > > > I will appreciate if you could test. > > There were still unused code. Please try attached patch instead. Changes: * Do not activate pseudo console if it is already activated for another process on same pty. -- Takashi Yano --Multipart=_Fri__24_Jul_2020_14_38_42_+0900_VPCcJBB2pXRRNAXX Content-Type: application/octet-stream; name="0001-Cygwin-pty-Implement-new-pseudo-console-support.patch" Content-Disposition: attachment; filename="0001-Cygwin-pty-Implement-new-pseudo-console-support.patch" Content-Transfer-Encoding: base64 RnJvbSAxZTFjOWU5M2E5OTE2MmU0YmFhN2NjYTRmZjQ4ZWNkYWExYjE0OTc4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0BuaWZ0eS5uZS5q cD4KRGF0ZTogRnJpLCAyNCBKdWwgMjAyMCAxNDozMjo1OCArMDkwMApTdWJqZWN0OiBbUEFUQ0hd IEN5Z3dpbjogcHR5OiBJbXBsZW1lbnQgbmV3IHBzZXVkbyBjb25zb2xlIHN1cHBvcnQuCgotIElu IHRoaXMgaW1wbGVtZW50YXRpb24sIHBzZXVkbyBjb25zb2xlIGlzIGNyZWF0ZWQgZm9yIGVhY2gg bmF0aXZlCiAgY29uc29sZSBhcHAuIEFkdmFudGFnZXMgYW5kIGRpc2FkdmFudGFnZXMgb2YgdGhp cyBpbXBsZW1lbnRhdGlvbgogIG92ZXIgdGhlIHByZXZpb3VzIGltcGxlbWVudGF0aW9uIGFyZSBh cyBmb2xsb3dzLgoKICBBZHZhbnRhZ2VzOgogIDEpIE5vIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9u IGluIHB0eSBvdXRwdXQgZm9yIGN5Z3dpbiBwcm9jZXNzLgogICAgICBodHRwczovL2N5Z3dpbi5j b20vcGlwZXJtYWlsL2N5Z3dpbi8yMDIwLUZlYnJ1YXJ5LzI0Mzg1OC5odG1sCiAgMikgRnJlZSBm cm9tIHRoZSBwcm9ibGVtIGNhdXNlZCBieSBkaWZmZXJlbmNlIG9mIGJlaGF2aW91ciBvZiBjb250 cm9sCiAgICAgc2VxdWVuY2VzIGJldHdlZW4gcmVhbCB0ZXJtaW5hbCBhbmQgcHNldWRvIGNvbnNv bGUuCiAgICAgIGh0dHBzOi8vY3lnd2luLmNvbS9waXBlcm1haWwvY3lnd2luLzIwMTktRGVjZW1i ZXIvMjQzMjgxLmh0bWwKICAgICAgaHR0cHM6Ly9jeWd3aW4uY29tL3BpcGVybWFpbC9jeWd3aW4v MjAyMC1GZWJydWFyeS8yNDM4NTUuaHRtbAogIDMpIEZyZWUgZnJvbSB0aGUgcHJvYmxlbSBpbiBj Z2RiIGFuZCBlbWFjcyBndWQuCiAgICAgIGh0dHBzOi8vY3lnd2luLmNvbS9waXBlcm1haWwvY3ln d2luLzIwMjAtSmFudWFyeS8yNDM2MDEuaHRtbAogICAgICBodHRwczovL2N5Z3dpbi5jb20vcGlw ZXJtYWlsL2N5Z3dpbi8yMDIwLU1hcmNoLzI0NDE0Ni5odG1sCiAgNCkgUmVkcmF3aW5nIHNjcmVl biBvbiBleGVjdXRpbmcgbmF0aXZlIGNvbnNvbGUgYXBwcyBpcyBub3QgbmVjZXNzYXJ5LgogIDUp IGN5Z3dpbi1jb25zb2xlLWhlbHBlciBpcyBub3QgbmVjZXNzYXJ5IGZvciB0aGUgcHNldWRvIGNv bnNvbGUKICAgICBzdXBwb3J0LgogIDYpIFRoZSBjb2RlcyBmb3IgcHNldWRvIGNvbnNvbGUgc3Vw cG9ydCBhcmUgbXVjaCBzaW1wbGVyIHRoYW4gdGhhdAogICAgIG9mIHRoZSBwcmV2aW91cyBvbmUu CgogIERpc2FkdmFudGFnZXM6CiAgMSkgVGhlIGN5Z3dpbiBwcm9ncmFtIHdoaWNoIGNhbGxzIGNv bnNvbGUgQVBJIGRpcmVjdGx5IGRvZXMgbm90IHdvcmsuCiAgMikgVGhlIGFwcHMgd2hpY2ggdXNl IGNvbnNvbGUgQVBJIGNhbm5vdCBiZSBkZWJ1Z2dlZCB3aXRoIGdkYi4gVGhpcwogICAgIGlzIGJl Y2F1c2UgcHNldWRvIGNvbnNvbGUgaXMgbm90IGFjdGl2YXRlZCBzaW5jZSBnZGIgdXNlcwogICAg IENyZWF0ZVByb2Nlc3MoKSByYXRoZXIgdGhhbiBleGVjKCkuIEV2ZW4gd2l0aCB0aGlzIGxpbWl0 YXRpb24sCiAgICAgYXR0YWNoaW5nIGdkYiB0byBuYXRpdmUgYXBwcywgaW4gd2hpY2ggcHNldWRv IGNvbnNvbGUgaXMgYWxyZWFkeQogICAgIGFjdGl2YXRlZCwgd29ya3MuCiAgMykgVHlwZWFoZWFk IGtleSBpbnB1dHMgYXJlIGRpc2NhcmRlZCB3aGlsZSBuYXRpdmUgY29uc29sZSBhcHAgaXMKICAg ICBleGVjdXRlZC4gU2ltaXJhbGx5LCB0eXBlYWhlYWQga2V5IGlucHV0cyB3aGlsZSBjeWd3aW4g YXBwIGlzCiAgICAgZXhlY3V0ZWQgYXJlIG5vdCBpbmhlcml0ZWQgdG8gbmF0aXZlIGNvbnNvbGUg YXBwLgogIDQpIENvZGUgcGFnZSBjYW5ub3QgYmUgY2hhbmdlZCBieSBjaGNwLmNvbS4gQWNjdHVh bGx5LCBjaGNwIHdvcmtzCiAgICAgaXRzZWxmIGFuZCBjaGFuZ2VzIGNvZGUgcGFnZSBvZiBpdHMg b3duIHBzZXVkbyBjb25zb2xlLiAgSG93ZXZlciwKICAgICBzaW5jZSBwc2V1ZG8gY29uc29sZSBp cyByZWNyZWF0ZWQgZm9yIGFub3RoZXIgcHJvY2VzcywgaXQgY2Fubm90CiAgICAgaW5oZXJpdCB0 aGUgY29kZSBwYWdlLgogIDUpIHN5c3RlbV9wcmludGYoKSBkb2VzIG5vdCB3b3JrIGFmdGVyIHN0 ZGVyciBpcyBjbG9zZWQuIChTYW1lIHdpdGgKICAgICBjeWd3aW4gMy4wLjcpCiAgNikgU3RhcnR1 cCB0aW1lIG9mIG5hdGl2ZSBjb25zb2xlIGFwcHMgaXMgYWJvdXQgMyB0aW1lcyBzbG93ZXIgdGhh bgogICAgIHByZXZpb3VzIGltcGxlbWVuYXRpb24uCiAgNykgUHNldWRvIGNvbnNvbGUgY2Fubm90 IGJlIGFjdGl2YXRlZCBpZiBpdCBpcyBhbHJlYWR5IGFjdGl2YXRlZCBmb3IKICAgICBhbm90aGVy IHByb2Nlc3Mgb24gc2FtZSBwdHkuCi0tLQogd2luc3VwL2N5Z3dpbi9kdGFibGUuY2MgICAgICAg ICAgIHwgICAzMiAtCiB3aW5zdXAvY3lnd2luL2ZoYW5kbGVyLmggICAgICAgICAgfCAgIDUzICst CiB3aW5zdXAvY3lnd2luL2ZoYW5kbGVyX2NvbnNvbGUuY2MgfCAgIDQzIC0KIHdpbnN1cC9jeWd3 aW4vZmhhbmRsZXJfdHR5LmNjICAgICB8IDE3MzUgKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KIHdpbnN1cC9jeWd3aW4vZm9yay5jYyAgICAgICAgICAgICB8ICAgMzAgLQogd2luc3VwL2N5 Z3dpbi9zZWxlY3QuY2MgICAgICAgICAgIHwgICAgNSArLQogd2luc3VwL2N5Z3dpbi9zbWFsbHBy aW50LmNjICAgICAgIHwgICAgMiAtCiB3aW5zdXAvY3lnd2luL3NwYXduLmNjICAgICAgICAgICAg fCAgIDg3ICstCiB3aW5zdXAvY3lnd2luL3N0cmFjZS5jYyAgICAgICAgICAgfCAgICAyIC0KIHdp bnN1cC9jeWd3aW4vdHR5LmNjICAgICAgICAgICAgICB8ICAgMjAgKy0KIHdpbnN1cC9jeWd3aW4v dHR5LmggICAgICAgICAgICAgICB8ICAgMTMgKy0KIHdpbnN1cC9jeWd3aW4vd2luc3VwLmggICAg ICAgICAgICB8ICAgIDMgLQogMTIgZmlsZXMgY2hhbmdlZCwgMzIxIGluc2VydGlvbnMoKyksIDE3 MDQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvd2luc3VwL2N5Z3dpbi9kdGFibGUuY2MgYi93 aW5zdXAvY3lnd2luL2R0YWJsZS5jYwppbmRleCBlOWUwMDViMDguLjZhOTFlMzNiYyAxMDA2NDQK LS0tIGEvd2luc3VwL2N5Z3dpbi9kdGFibGUuY2MKKysrIGIvd2luc3VwL2N5Z3dpbi9kdGFibGUu Y2MKQEAgLTE0NywzOCArMTQ3LDYgQEAgZHRhYmxlOjpnZXRfZGVidWdnZXJfaW5mbyAoKQogdm9p ZAogZHRhYmxlOjpzdGRpb19pbml0ICgpCiB7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSAr KykKLSAgICB7Ci0gICAgICBjb25zdCBpbnQgY2hrX29yZGVyW10gPSB7MSwgMCwgMn07Ci0gICAg ICBpbnQgZmQgPSBjaGtfb3JkZXJbaV07Ci0gICAgICBmaGFuZGxlcl9iYXNlICpmaCA9IGN5Z2hl YXAtPmZkdGFiW2ZkXTsKLSAgICAgIGlmIChmaCAmJiBmaC0+Z2V0X21ham9yICgpID09IERFVl9Q VFlTX01BSk9SKQotCXsKLQkgIGZoYW5kbGVyX3B0eV9zbGF2ZSAqcHR5cyA9IChmaGFuZGxlcl9w dHlfc2xhdmUgKikgZmg7Ci0JICBpZiAocHR5cy0+Z2V0X3BzZXVkb19jb25zb2xlICgpKQotCSAg ICB7Ci0JICAgICAgYm9vbCBhdHRhY2hlZCA9ICEhZmhhbmRsZXJfY29uc29sZTo6Z2V0X2NvbnNv bGVfcHJvY2Vzc19pZAotCQkocHR5cy0+Z2V0X2hlbHBlcl9wcm9jZXNzX2lkICgpLCB0cnVlKTsK LQkgICAgICBpZiAoYXR0YWNoZWQpCi0JCWJyZWFrOwotCSAgICAgIGVsc2UKLQkJewotCQkgIC8q IE5vdCBhdHRhY2hlZCB0byBwc2V1ZG8gY29uc29sZSBpbiBmb3JrKCkgb3Igc3Bhd24oKQotCQkg ICAgIGJ5IHNvbWUgcmVhc29uLiBUaGlzIGhhcHBlbnMgaWYgdGhlIGV4ZWN1dGFibGUgaXMKLQkJ ICAgICBhIHdpbmRvd3MgR1VJIGJpbmFyeSwgc3VjaCBhcyBtaW50dHkuICovCi0JCSAgRnJlZUNv bnNvbGUgKCk7Ci0JCSAgaWYgKEF0dGFjaENvbnNvbGUgKHB0eXMtPmdldF9oZWxwZXJfcHJvY2Vz c19pZCAoKSkpCi0JCSAgICB7Ci0JCSAgICAgIHB0eXMtPmZpeHVwX2FmdGVyX2F0dGFjaCAoZmFs c2UsIGZkKTsKLQkJICAgICAgYnJlYWs7Ci0JCSAgICB9Ci0JCX0KLQkgICAgfQotCX0KLSAgICAg IGVsc2UgaWYgKGZoICYmIGZoLT5nZXRfbWFqb3IgKCkgPT0gREVWX0NPTlNfTUFKT1IpCi0JYnJl YWs7Ci0gICAgfQotCiAgIGlmIChteXNlbGYtPmN5Z3N0YXJ0ZWQgfHwgSVNTVEFURSAobXlzZWxm LCBQSURfQ1lHUEFSRU5UKSkKICAgICB7CiAgICAgICB0dHlfbWluICp0ID0gY3lnd2luX3NoYXJl ZC0+dHR5LmdldF9jdHR5cCAoKTsKZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXIu aCBiL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXIuaAppbmRleCA2MGJkMjdlMDAuLjQ2MDRmZjJiYSAx MDA2NDQKLS0tIGEvd2luc3VwL2N5Z3dpbi9maGFuZGxlci5oCisrKyBiL3dpbnN1cC9jeWd3aW4v ZmhhbmRsZXIuaApAQCAtMzI2LDE2ICszMjYsMTYgQEAgY2xhc3MgZmhhbmRsZXJfYmFzZQogICB2 aXJ0dWFsIHNpemVfdCAmcmFpeHB1dCAoKSB7IHJldHVybiByYS5yYWl4cHV0OyB9OwogICB2aXJ0 dWFsIHNpemVfdCAmcmFidWZsZW4gKCkgeyByZXR1cm4gcmEucmFidWZsZW47IH07CiAKLSAgdmly dHVhbCBib29sIGdldF9yZWFkYWhlYWRfdmFsaWQgKCkgeyByZXR1cm4gcmFpeGdldCAoKSA8IHJh bGVuICgpOyB9CisgIGJvb2wgZ2V0X3JlYWRhaGVhZF92YWxpZCAoKSB7IHJldHVybiByYWl4Z2V0 ICgpIDwgcmFsZW4gKCk7IH0KICAgaW50IHB1dHNfcmVhZGFoZWFkIChjb25zdCBjaGFyICpzLCBz aXplX3QgbGVuID0gKHNpemVfdCkgLTEpOwotICB2aXJ0dWFsIGludCBwdXRfcmVhZGFoZWFkIChj aGFyIHZhbHVlKTsKKyAgaW50IHB1dF9yZWFkYWhlYWQgKGNoYXIgdmFsdWUpOwogCiAgIGludCBn ZXRfcmVhZGFoZWFkICgpOwogICBpbnQgcGVla19yZWFkYWhlYWQgKGludCBxdWVyeXB1dCA9IDAp OwogCiAgIHZvaWQgc2V0X3JlYWRhaGVhZF92YWxpZCAoaW50IHZhbCwgaW50IGNoID0gLTEpOwog Ci0gIHZpcnR1YWwgaW50IGdldF9yZWFkYWhlYWRfaW50b19idWZmZXIgKGNoYXIgKmJ1Ziwgc2l6 ZV90IGJ1Zmxlbik7CisgIGludCBnZXRfcmVhZGFoZWFkX2ludG9fYnVmZmVyIChjaGFyICpidWYs IHNpemVfdCBidWZsZW4pOwogCiAgIGJvb2wgaGFzX2FjbHMgKCkgY29uc3QgeyByZXR1cm4gcGMu aGFzX2FjbHMgKCk7IH0KIApAQCAtMTkwOSw3ICsxOTA5LDcgQEAgY2xhc3MgZmhhbmRsZXJfdGVy bWlvczogcHVibGljIGZoYW5kbGVyX2Jhc2UKICAgaW50IGlvY3RsIChpbnQsIHZvaWQgKik7CiAg IHR0eV9taW4gKl90YzsKICAgdHR5ICpnZXRfdHR5cCAoKSB7cmV0dXJuICh0dHkgKikgdGMgKCk7 fQotICB2aXJ0dWFsIGludCBlYXRfcmVhZGFoZWFkIChpbnQgbik7CisgIGludCBlYXRfcmVhZGFo ZWFkIChpbnQgbik7CiAKICBwdWJsaWM6CiAgIHR0eV9taW4qJiB0YyAoKSB7cmV0dXJuIF90Yzt9 CkBAIC0yMTg4LDcgKzIxODgsNiBAQCBwcml2YXRlOgogICBzdGF0aWMgYm9vbCBuZWVkX2ludmlz aWJsZSAoKTsKICAgc3RhdGljIHZvaWQgZnJlZV9jb25zb2xlICgpOwogICBzdGF0aWMgY29uc3Qg Y2hhciAqZ2V0X25vbmFzY2lpX2tleSAoSU5QVVRfUkVDT1JEJiBpbnB1dF9yZWMsIGNoYXIgKik7 Ci0gIHN0YXRpYyBEV09SRCBnZXRfY29uc29sZV9wcm9jZXNzX2lkIChEV09SRCBwaWQsIGJvb2wg bWF0Y2gpOwogCiAgIGZoYW5kbGVyX2NvbnNvbGUgKHZvaWQgKikge30KIApAQCAtMjI2OCwxOSAr MjI2Nyw3IEBAIGNsYXNzIGZoYW5kbGVyX3B0eV9jb21tb246IHB1YmxpYyBmaGFuZGxlcl90ZXJt aW9zCiAgICAgcmV0dXJuIGZoOwogICB9CiAKLSAgYm9vbCBhdHRhY2hfcGNvbl9pbl9mb3JrICh2 b2lkKQotICB7Ci0gICAgcmV0dXJuIGdldF90dHlwICgpLT5hdHRhY2hfcGNvbl9pbl9mb3JrOwot ICB9Ci0gIERXT1JEIGdldF9oZWxwZXJfcHJvY2Vzc19pZCAodm9pZCkKLSAgewotICAgIHJldHVy biBnZXRfdHR5cCAoKS0+aGVscGVyX3Byb2Nlc3NfaWQ7Ci0gIH0KLSAgSFBDT04gZ2V0X3BzZXVk b19jb25zb2xlICh2b2lkKQotICB7Ci0gICAgcmV0dXJuIGdldF90dHlwICgpLT5oX3BzZXVkb19j b25zb2xlOwotICB9Ci0gIGJvb2wgdG9fYmVfcmVhZF9mcm9tX3Bjb24gKHZvaWQpOworICB2b2lk IHJlc2l6ZV9wc2V1ZG9fY29uc29sZSAoc3RydWN0IHdpbnNpemUgKik7CiAKICBwcm90ZWN0ZWQ6 CiAgIEJPT0wgcHJvY2Vzc19vcG9zdF9vdXRwdXQgKEhBTkRMRSBoLApAQCAtMjI5MSwyMyArMjI3 OCwxNSBAQCBjbGFzcyBmaGFuZGxlcl9wdHlfc2xhdmU6IHB1YmxpYyBmaGFuZGxlcl9wdHlfY29t bW9uCiB7CiAgIEhBTkRMRSBpbnVzZTsJCQkvLyB1c2VkIHRvIGluZGljYXRlIHRoYXQgYSB0dHkg aXMgaW4gdXNlCiAgIEhBTkRMRSBvdXRwdXRfaGFuZGxlX2N5ZywgaW9faGFuZGxlX2N5ZzsKLSAg RFdPUkQgcGlkX3Jlc3RvcmU7Ci0gIGludCBmZDsKIAogICAvKiBIZWxwZXIgZnVuY3Rpb25zIGZv ciBmY2htb2QgYW5kIGZjaG93bi4gKi8KICAgYm9vbCBmY2hfb3Blbl9oYW5kbGVzIChib29sIGNo b3duKTsKICAgaW50IGZjaF9zZXRfc2QgKHNlY3VyaXR5X2Rlc2NyaXB0b3IgJnNkLCBib29sIGNo b3duKTsKICAgdm9pZCBmY2hfY2xvc2VfaGFuZGxlcyAoKTsKIAotICBib29sIHRyeV9yZWF0dGFj aF9wY29uICgpOwotICB2b2lkIHJlc3RvcmVfcmVhdHRhY2hfcGNvbiAoKTsKLSAgaW5saW5lIHZv aWQgZnJlZV9hdHRhY2hlZF9jb25zb2xlICgpOwotCiAgcHVibGljOgogICAvKiBDb25zdHJ1Y3Rv ciAqLwogICBmaGFuZGxlcl9wdHlfc2xhdmUgKGludCk7Ci0gIC8qIERlc3RydWN0b3IgKi8KLSAg fmZoYW5kbGVyX3B0eV9zbGF2ZSAoKTsKIAogICB2b2lkIHNldF9vdXRwdXRfaGFuZGxlX2N5ZyAo SEFORExFIGgpIHsgb3V0cHV0X2hhbmRsZV9jeWcgPSBoOyB9CiAgIEhBTkRMRSYgZ2V0X291dHB1 dF9oYW5kbGVfY3lnICgpIHsgcmV0dXJuIG91dHB1dF9oYW5kbGVfY3lnOyB9CkBAIC0yMzE5LDkg KzIyOTgsNiBAQCBjbGFzcyBmaGFuZGxlcl9wdHlfc2xhdmU6IHB1YmxpYyBmaGFuZGxlcl9wdHlf Y29tbW9uCiAgIHNzaXplX3QgX19zdGRjYWxsIHdyaXRlIChjb25zdCB2b2lkICpwdHIsIHNpemVf dCBsZW4pOwogICB2b2lkIF9fcmVnMyByZWFkICh2b2lkICpwdHIsIHNpemVfdCYgbGVuKTsKICAg aW50IGluaXQgKEhBTkRMRSwgRFdPUkQsIG1vZGVfdCk7Ci0gIGludCBlYXRfcmVhZGFoZWFkIChp bnQgbik7Ci0gIGludCBnZXRfcmVhZGFoZWFkX2ludG9fYnVmZmVyIChjaGFyICpidWYsIHNpemVf dCBidWZsZW4pOwotICBib29sIGdldF9yZWFkYWhlYWRfdmFsaWQgKHZvaWQpOwogCiAgIGludCB0 Y3NldGF0dHIgKGludCBhLCBjb25zdCBzdHJ1Y3QgdGVybWlvcyAqdCk7CiAgIGludCB0Y2dldGF0 dHIgKHN0cnVjdCB0ZXJtaW9zICp0KTsKQEAgLTIzNTgsMjAgKzIzMzQsMTIgQEAgY2xhc3MgZmhh bmRsZXJfcHR5X3NsYXZlOiBwdWJsaWMgZmhhbmRsZXJfcHR5X2NvbW1vbgogICAgIGNvcHl0byAo ZmgpOwogICAgIHJldHVybiBmaDsKICAgfQotICB2b2lkIHNldF9zd2l0Y2hfdG9fcGNvbiAoaW50 IGZkKTsKKyAgYm9vbCBzZXR1cF9wc2V1ZG9jb25zb2xlIChTVEFSVFVQSU5GT0VYVyAqc2kpOwor ICB2b2lkIGNsb3NlX3BzZXVkb2NvbnNvbGUgKHZvaWQpOworICB2b2lkIHNldF9zd2l0Y2hfdG9f cGNvbiAodm9pZCk7CiAgIHZvaWQgcmVzZXRfc3dpdGNoX3RvX3Bjb24gKHZvaWQpOwotICB2b2lk IHB1c2hfdG9fcGNvbl9zY3JlZW5idWZmZXIgKGNvbnN0IGNoYXIgKnB0ciwgc2l6ZV90IGxlbiwg Ym9vbCBpc19lY2hvKTsKICAgdm9pZCBtYXNrX3N3aXRjaF90b19wY29uX2luIChib29sIG1hc2sp OwotICB2b2lkIGZpeHVwX2FmdGVyX2F0dGFjaCAoYm9vbCBuYXRpdmVfbWF5YmUsIGludCBmZCk7 Ci0gIGJvb2wgaXNfbGluZV9pbnB1dCAodm9pZCkKLSAgewotICAgIHJldHVybiBnZXRfdHR5cCAo KS0+dGkuY19sZmxhZyAmIElDQU5PTjsKLSAgfQogICB2b2lkIHNldHVwX2xvY2FsZSAodm9pZCk7 Ci0gIHZvaWQgc2V0X2ZyZWVjb25zb2xlX29uX2Nsb3NlIChib29sIHZhbCk7Ci0gIHZvaWQgdHJp Z2dlcl9yZWRyYXdfc2NyZWVuICh2b2lkKTsKLSAgdm9pZCBwdWxsX3Bjb25faW5wdXQgKHZvaWQp OwotICB2b2lkIHVwZGF0ZV9wY29uX2lucHV0X3N0YXRlIChib29sIG5lZWRfbG9jayk7CiB9Owog CiAjZGVmaW5lIF9fcHRzbmFtZShidWYsIHVuaXQpIF9fc21hbGxfc3ByaW50ZiAoKGJ1ZiksICIv ZGV2L3B0eSVkIiwgKHVuaXQpKQpAQCAtMjM5Niw3ICsyMzY0LDYgQEAgcHVibGljOgogICBpbnQg cHJvY2Vzc19zbGF2ZV9vdXRwdXQgKGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwgaW50IHBrdG1vZGVf b24pOwogICB2b2lkIGRvZWNobyAoY29uc3Qgdm9pZCAqc3RyLCBEV09SRCBsZW4pOwogICBpbnQg YWNjZXB0X2lucHV0ICgpOwotICBpbnQgcHV0X3JlYWRhaGVhZCAoY2hhciB2YWx1ZSk7CiAgIGlu dCBvcGVuIChpbnQgZmxhZ3MsIG1vZGVfdCBtb2RlID0gMCk7CiAgIHZvaWQgb3Blbl9zZXR1cCAo aW50IGZsYWdzKTsKICAgc3NpemVfdCBfX3N0ZGNhbGwgd3JpdGUgKGNvbnN0IHZvaWQgKnB0ciwg c2l6ZV90IGxlbik7CkBAIC0yNDM1LDkgKzI0MDIsNyBAQCBwdWJsaWM6CiAgICAgY29weXRvIChm aCk7CiAgICAgcmV0dXJuIGZoOwogICB9Ci0KLSAgYm9vbCBzZXR1cF9wc2V1ZG9jb25zb2xlICh2 b2lkKTsKLSAgdm9pZCB0cmFuc2Zlcl9pbnB1dF90b19wY29uICh2b2lkKTsKKyAgYm9vbCB0b19i ZV9yZWFkX2Zyb21fcGNvbiAodm9pZCk7CiB9OwogCiBjbGFzcyBmaGFuZGxlcl9kZXZfbnVsbDog cHVibGljIGZoYW5kbGVyX2Jhc2UKZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJf Y29uc29sZS5jYyBiL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJfY29uc29sZS5jYwppbmRleCA1Mjc0 MWNlOGIuLjAyYTU5OTZhMSAxMDA2NDQKLS0tIGEvd2luc3VwL2N5Z3dpbi9maGFuZGxlcl9jb25z b2xlLmNjCisrKyBiL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJfY29uc29sZS5jYwpAQCAtMTIwNiwx OCArMTIwNiw2IEBAIGZoYW5kbGVyX2NvbnNvbGU6OmNsb3NlICgpCiAgIGlmIChjb25fcmEucmFi dWYpCiAgICAgZnJlZSAoY29uX3JhLnJhYnVmKTsKIAotICAvKiBJZiBhbHJlYWR5IGF0dGFjaGVk IHRvIHBzZXVkbyBjb25zb2xlLCBkb24ndCBjYWxsIGZyZWVfY29uc29sZSAoKSAqLwotICBjeWdo ZWFwX2ZkZW51bSBjZmQgKGZhbHNlKTsKLSAgd2hpbGUgKGNmZC5uZXh0ICgpID49IDApCi0gICAg aWYgKGNmZC0+Z2V0X21ham9yICgpID09IERFVl9QVFlNX01BSk9SIHx8Ci0JY2ZkLT5nZXRfbWFq b3IgKCkgPT0gREVWX1BUWVNfTUFKT1IpCi0gICAgICB7Ci0JZmhhbmRsZXJfcHR5X2NvbW1vbiAq dCA9Ci0JICAoZmhhbmRsZXJfcHR5X2NvbW1vbiAqKSAoZmhhbmRsZXJfYmFzZSAqKSBjZmQ7Ci0J aWYgKGdldF9jb25zb2xlX3Byb2Nlc3NfaWQgKHQtPmdldF9oZWxwZXJfcHJvY2Vzc19pZCAoKSwg dHJ1ZSkpCi0JICByZXR1cm4gMDsKLSAgICAgIH0KLQogICBpZiAoIWhhdmVfZXhlY2VkKQogICAg IGZyZWVfY29uc29sZSAoKTsKICAgcmV0dXJuIDA7CkBAIC0zNjExLDM3ICszNTk5LDYgQEAgZmhh bmRsZXJfY29uc29sZTo6bmVlZF9pbnZpc2libGUgKCkKICAgcmV0dXJuIGI7CiB9CiAKLURXT1JE Ci1maGFuZGxlcl9jb25zb2xlOjpnZXRfY29uc29sZV9wcm9jZXNzX2lkIChEV09SRCBwaWQsIGJv b2wgbWF0Y2gpCi17Ci0gIERXT1JEIHRtcDsKLSAgRFdPUkQgbnVtLCBudW1fcmVxOwotICBudW0g PSAxOwotICBudW1fcmVxID0gR2V0Q29uc29sZVByb2Nlc3NMaXN0ICgmdG1wLCBudW0pOwotICBE V09SRCAqbGlzdDsKLSAgd2hpbGUgKHRydWUpCi0gICAgewotICAgICAgbGlzdCA9IChEV09SRCAq KQotCUhlYXBBbGxvYyAoR2V0UHJvY2Vzc0hlYXAgKCksIDAsIG51bV9yZXEgKiBzaXplb2YgKERX T1JEKSk7Ci0gICAgICBudW0gPSBudW1fcmVxOwotICAgICAgbnVtX3JlcSA9IEdldENvbnNvbGVQ cm9jZXNzTGlzdCAobGlzdCwgbnVtKTsKLSAgICAgIGlmIChudW1fcmVxID4gbnVtKQotCUhlYXBG cmVlIChHZXRQcm9jZXNzSGVhcCAoKSwgMCwgbGlzdCk7Ci0gICAgICBlbHNlCi0JYnJlYWs7Ci0g ICAgfQotICBudW0gPSBudW1fcmVxOwotCi0gIHRtcCA9IDA7Ci0gIGZvciAoRFdPUkQgaT0wOyBp PG51bTsgaSsrKQotICAgIGlmICgobWF0Y2ggJiYgbGlzdFtpXSA9PSBwaWQpIHx8ICghbWF0Y2gg JiYgbGlzdFtpXSAhPSBwaWQpKQotICAgICAgLyogTGFzdCBvbmUgaXMgdGhlIG9sZGVzdC4gKi8K LSAgICAgIC8qIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvdGVybWluYWwvaXNzdWVzLzk1 ICovCi0gICAgICB0bXAgPSBsaXN0W2ldOwotICBIZWFwRnJlZSAoR2V0UHJvY2Vzc0hlYXAgKCks IDAsIGxpc3QpOwotICByZXR1cm4gdG1wOwotfQotCiBEV09SRAogZmhhbmRsZXJfY29uc29sZTo6 X19hY3F1aXJlX2lucHV0X211dGV4IChjb25zdCBjaGFyICpmbiwgaW50IGxuLCBEV09SRCBtcykK IHsKZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJfdHR5LmNjIGIvd2luc3VwL2N5 Z3dpbi9maGFuZGxlcl90dHkuY2MKaW5kZXggNmEwMDRmM2E1Li40Y2NjYzc0YzcgMTAwNjQ0Ci0t LSBhL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJfdHR5LmNjCisrKyBiL3dpbnN1cC9jeWd3aW4vZmhh bmRsZXJfdHR5LmNjCkBAIC0yNSw3ICsyNSw2IEBAIGRldGFpbHMuICovCiAjaW5jbHVkZSAiY2hp bGRfaW5mby5oIgogI2luY2x1ZGUgPGFzbS9zb2NrZXQuaD4KICNpbmNsdWRlICJjeWd3YWl0Lmgi Ci0jaW5jbHVkZSAidGxzX3BidWYuaCIKICNpbmNsdWRlICJyZWdpc3RyeS5oIgogCiAjaWZuZGVm IFBST0NfVEhSRUFEX0FUVFJJQlVURV9QU0VVRE9DT05TT0xFCkBAIC0zMyw3ICszMiw2IEBAIGRl dGFpbHMuICovCiAjZW5kaWYgLyogUFJPQ19USFJFQURfQVRUUklCVVRFX1BTRVVET0NPTlNPTEUg Ki8KIAogZXh0ZXJuICJDIiBpbnQgc3NjYW5mIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwg Li4uKTsKLWV4dGVybiAiQyIgaW50IHR0eW5hbWVfciAoaW50LCBjaGFyKiwgc2l6ZV90KTsKIAog ZXh0ZXJuICJDIiB7CiAgIEhSRVNVTFQgV0lOQVBJIENyZWF0ZVBzZXVkb0NvbnNvbGUgKENPT1JE LCBIQU5ETEUsIEhBTkRMRSwgRFdPUkQsIEhQQ09OICopOwpAQCAtNjAsMjAgKzU4LDEwIEBAIHN0 cnVjdCBwaXBlX3JlcGx5IHsKICAgRFdPUkQgZXJyb3I7CiB9OwogCi1zdGF0aWMgaW50IHBjb25f YXR0YWNoZWRfdG8gPSAtMTsKIHN0YXRpYyBib29sIGlzSHlicmlkOwotc3RhdGljIGJvb2wgZG9f bm90X3Jlc2V0X3N3aXRjaF90b19wY29uOwotc3RhdGljIGJvb2wgZnJlZWNvbnNvbGVfb25fY2xv c2UgPSB0cnVlOwotc3RhdGljIHR0eSAqbGFzdF90dHlwID0gTlVMTDsKLQotdm9pZAotY2xlYXJf cGNvbl9hdHRhY2hlZF90byAodm9pZCkKLXsKLSAgcGNvbl9hdHRhY2hlZF90byA9IC0xOwotfQog CiBzdGF0aWMgdm9pZAotc2V0X3N3aXRjaF90b19wY29uICh2b2lkKQorc2V0X3N3aXRjaF90b19w Y29uIChIQU5ETEUgaCkKIHsKICAgY3lnaGVhcF9mZGVudW0gY2ZkIChmYWxzZSk7CiAgIGludCBm ZDsKQEAgLTgyLDI4MCArNzAsMTcgQEAgc2V0X3N3aXRjaF90b19wY29uICh2b2lkKQogICAgICAg ewogCWZoYW5kbGVyX2Jhc2UgKmZoID0gY2ZkOwogCWZoYW5kbGVyX3B0eV9zbGF2ZSAqcHR5cyA9 IChmaGFuZGxlcl9wdHlfc2xhdmUgKikgZmg7Ci0JaWYgKHB0eXMtPmdldF9wc2V1ZG9fY29uc29s ZSAoKSkKLQkgIHsKLQkgICAgcHR5cy0+c2V0X3N3aXRjaF90b19wY29uIChmZCk7Ci0JICAgIHB0 eXMtPnRyaWdnZXJfcmVkcmF3X3NjcmVlbiAoKTsKLQkgICAgRFdPUkQgbW9kZSA9Ci0JICAgICAg RU5BQkxFX1BST0NFU1NFRF9JTlBVVCB8IEVOQUJMRV9MSU5FX0lOUFVUIHwgRU5BQkxFX0VDSE9f SU5QVVQ7Ci0JICAgIFNldENvbnNvbGVNb2RlIChwdHlzLT5nZXRfaGFuZGxlICgpLCBtb2RlKTsK LQkgIH0KKwlpZiAoaCA9PSBwdHlzLT5nZXRfaGFuZGxlICgpKQorCSAgcHR5cy0+c2V0X3N3aXRj aF90b19wY29uICgpOwogCXJldHVybjsKICAgICAgIH0KLSAgLyogTm8gcHR5IHNsYXZlIG9wZW5l ZCAqLwotICBpZiAobGFzdF90dHlwKSAvKiBNYWtlIHN5c3RlbV9wcmludGYoKSB3b3JrIGFmdGVy IGNsb3NpbmcgcHR5IHNsYXZlICovCi0gICAgbGFzdF90dHlwLT5zZXRfc3dpdGNoX3RvX3Bjb25f b3V0ICh0cnVlKTsKLX0KLQotc3RhdGljIHZvaWQKLWZvcmNlX2F0dGFjaF90b19wY29uIChIQU5E TEUgaCkKLXsKLSAgYm9vbCBhdHRhY2hfZG9uZSA9IGZhbHNlOwotICBmb3IgKGludCBuID0gMDsg biA8IDI7IG4gKyspCi0gICAgewotICAgICAgLyogRmlyc3QgdGltZSwgYXR0YWNoIHRvIHRoZSBw dHkgd2hvc2UgaGFuZGxlIHZhbHVlIGlzIG1hdGNoLgotCSBTZWNvbmQgdGltZSwgdHJ5IHRvIGF0 dGFjaCB0byBhbnkgcHR5LiAqLwotICAgICAgY3lnaGVhcF9mZGVudW0gY2ZkIChmYWxzZSk7Ci0g ICAgICB3aGlsZSAoY2ZkLm5leHQgKCkgPj0gMCkKLQlpZiAoY2ZkLT5nZXRfbWFqb3IgKCkgPT0g REVWX1BUWVNfTUFKT1IpCi0JICB7Ci0JICAgIGZoYW5kbGVyX2Jhc2UgKmZoID0gY2ZkOwotCSAg ICBmaGFuZGxlcl9wdHlfc2xhdmUgKnB0eXMgPSAoZmhhbmRsZXJfcHR5X3NsYXZlICopIGZoOwot CSAgICBpZiAoIXB0eXMtPmdldF9wc2V1ZG9fY29uc29sZSAoKSkKLQkgICAgICBjb250aW51ZTsK LQkgICAgaWYgKG4gIT0gMAotCQl8fCBoID09IHB0eXMtPmdldF9oYW5kbGUgKCkKLQkJfHwgaCA9 PSBwdHlzLT5nZXRfb3V0cHV0X2hhbmRsZSAoKSkKLQkgICAgICB7Ci0JCWlmIChmaGFuZGxlcl9j b25zb2xlOjpnZXRfY29uc29sZV9wcm9jZXNzX2lkCi0JCQkJICAocHR5cy0+Z2V0X2hlbHBlcl9w cm9jZXNzX2lkICgpLCB0cnVlKSkKLQkJICBhdHRhY2hfZG9uZSA9IHRydWU7Ci0JCWVsc2UKLQkJ ICB7Ci0JCSAgICBGcmVlQ29uc29sZSAoKTsKLQkJICAgIGlmIChBdHRhY2hDb25zb2xlIChwdHlz LT5nZXRfaGVscGVyX3Byb2Nlc3NfaWQgKCkpKQotCQkgICAgICB7Ci0JCQlwY29uX2F0dGFjaGVk X3RvID0gcHR5cy0+Z2V0X21pbm9yICgpOwotCQkJYXR0YWNoX2RvbmUgPSB0cnVlOwotCQkgICAg ICB9Ci0JCSAgICBlbHNlCi0JCSAgICAgIHBjb25fYXR0YWNoZWRfdG8gPSAtMTsKLQkJICB9Ci0J CWJyZWFrOwotCSAgICAgIH0KLQkgIH0KLQllbHNlIGlmIChjZmQtPmdldF9tYWpvciAoKSA9PSBE RVZfQ09OU19NQUpPUikKLQkgIHsKLQkgICAgZmhhbmRsZXJfYmFzZSAqZmggPSBjZmQ7Ci0JICAg IGZoYW5kbGVyX2NvbnNvbGUgKmNvbnMgPSAoZmhhbmRsZXJfY29uc29sZSAqKSBmaDsKLQkgICAg aWYgKG4gIT0gMAotCQl8fCBoID09IGNvbnMtPmdldF9oYW5kbGUgKCkKLQkJfHwgaCA9PSBjb25z LT5nZXRfb3V0cHV0X2hhbmRsZSAoKSkKLQkgICAgICB7Ci0JCS8qIElmIHRoZSBwcm9jZXNzIGlz IHJ1bm5pbmcgb24gYSBjb25zb2xlLAotCQkgICB0aGUgcGFyZW50IHByb2Nlc3Mgc2hvdWxkIGJl IGF0dGFjaGVkCi0JCSAgIHRvIHRoZSBzYW1lIGNvbnNvbGUuICovCi0JCURXT1JEIGF0dGFjaF93 cGlkOwotCQlpZiAobXlzZWxmLT5wcGlkID09IDEpCi0JCSAgYXR0YWNoX3dwaWQgPSBBVFRBQ0hf UEFSRU5UX1BST0NFU1M7Ci0JCWVsc2UKLQkJICB7Ci0JCSAgICBwaW5mbyBwIChteXNlbGYtPnBw aWQpOwotCQkgICAgYXR0YWNoX3dwaWQgPSBwLT5kd1Byb2Nlc3NJZDsKLQkJICB9Ci0JCUZyZWVD b25zb2xlICgpOwotCQlpZiAoQXR0YWNoQ29uc29sZSAoYXR0YWNoX3dwaWQpKQotCQkgIHsKLQkJ ICAgIHBjb25fYXR0YWNoZWRfdG8gPSAtMTsKLQkJICAgIGF0dGFjaF9kb25lID0gdHJ1ZTsKLQkJ ICB9Ci0JCWVsc2UKLQkJICBwY29uX2F0dGFjaGVkX3RvID0gLTE7Ci0JCWJyZWFrOwotCSAgICAg IH0KLQkgIH0KLSAgICAgIGlmIChhdHRhY2hfZG9uZSkKLQlicmVhazsKLSAgICB9Ci19Ci0KLXZv aWQKLXNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKEhBTkRMRSBoKQotewotICBpZiAo R2V0RmlsZVR5cGUgKGgpID09IEZJTEVfVFlQRV9DSEFSKQotICAgIHsKLSAgICAgIGZvcmNlX2F0 dGFjaF90b19wY29uIChoKTsKLSAgICAgIERXT1JEIGR1bW15OwotICAgICAgaWYgKCFpc0h5YnJp ZCAmJiAoR2V0Q29uc29sZU1vZGUgKGgsICZkdW1teSkKLQkJCXx8IEdldExhc3RFcnJvciAoKSAh PSBFUlJPUl9JTlZBTElEX0hBTkRMRSkpCi0JewotCSAgaXNIeWJyaWQgPSB0cnVlOwotCSAgc2V0 X3N3aXRjaF90b19wY29uICgpOwotCX0KLSAgICB9Ci19Ci0KLWlubGluZSB2b2lkCi1maGFuZGxl cl9wdHlfc2xhdmU6OmZyZWVfYXR0YWNoZWRfY29uc29sZSAoKQotewotICBib29sIGF0dGFjaGVk ID0gZ2V0X3R0eXAgKCkgPwotICAgIGZoYW5kbGVyX2NvbnNvbGU6OmdldF9jb25zb2xlX3Byb2Nl c3NfaWQgKGdldF9oZWxwZXJfcHJvY2Vzc19pZCAoKSwgdHJ1ZSkKLSAgICA6IChnZXRfbWlub3Ig KCkgPT0gcGNvbl9hdHRhY2hlZF90byk7Ci0gIGlmIChmcmVlY29uc29sZV9vbl9jbG9zZSAmJiBh dHRhY2hlZCkKLSAgICB7Ci0gICAgICBGcmVlQ29uc29sZSAoKTsKLSAgICAgIHBjb25fYXR0YWNo ZWRfdG8gPSAtMTsKLSAgICB9CiB9CiAKICNkZWZpbmUgREVGX0hPT0sobmFtZSkgc3RhdGljIF9f dHlwZW9mX18gKG5hbWUpICpuYW1lIyNfT3JpZwotREVGX0hPT0sgKFdyaXRlRmlsZSk7Ci1ERUZf SE9PSyAoV3JpdGVDb25zb2xlQSk7Ci1ERUZfSE9PSyAoV3JpdGVDb25zb2xlVyk7Ci1ERUZfSE9P SyAoUmVhZEZpbGUpOwotREVGX0hPT0sgKFJlYWRDb25zb2xlQSk7Ci1ERUZfSE9PSyAoUmVhZENv bnNvbGVXKTsKLURFRl9IT09LIChXcml0ZUNvbnNvbGVPdXRwdXRBKTsKLURFRl9IT09LIChXcml0 ZUNvbnNvbGVPdXRwdXRXKTsKLURFRl9IT09LIChXcml0ZUNvbnNvbGVPdXRwdXRDaGFyYWN0ZXJB KTsKLURFRl9IT09LIChXcml0ZUNvbnNvbGVPdXRwdXRDaGFyYWN0ZXJXKTsKLURFRl9IT09LIChX cml0ZUNvbnNvbGVPdXRwdXRBdHRyaWJ1dGUpOwotREVGX0hPT0sgKFNldENvbnNvbGVDdXJzb3JQ b3NpdGlvbik7Ci1ERUZfSE9PSyAoU2V0Q29uc29sZVRleHRBdHRyaWJ1dGUpOwotREVGX0hPT0sg KFdyaXRlQ29uc29sZUlucHV0QSk7Ci1ERUZfSE9PSyAoV3JpdGVDb25zb2xlSW5wdXRXKTsKLURF Rl9IT09LIChSZWFkQ29uc29sZUlucHV0QSk7Ci1ERUZfSE9PSyAoUmVhZENvbnNvbGVJbnB1dFcp OwotREVGX0hPT0sgKFBlZWtDb25zb2xlSW5wdXRBKTsKLURFRl9IT09LIChQZWVrQ29uc29sZUlu cHV0Vyk7CiAvKiBDcmVhdGVQcm9jZXNzKCkgaXMgaG9va2VkIGZvciBHREIgZXRjLiAqLwogREVG X0hPT0sgKENyZWF0ZVByb2Nlc3NBKTsKIERFRl9IT09LIChDcmVhdGVQcm9jZXNzVyk7CiAKLXN0 YXRpYyBCT09MIFdJTkFQSQotV3JpdGVGaWxlX0hvb2tlZAotICAgICAoSEFORExFIGgsIExQQ1ZP SUQgcCwgRFdPUkQgbCwgTFBEV09SRCBuLCBMUE9WRVJMQVBQRUQgbykKLXsKLSAgc2V0X2lzaHli cmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoaCk7Ci0gIHJldHVybiBXcml0ZUZpbGVfT3JpZyAoaCwg cCwgbCwgbiwgbyk7Ci19Ci1zdGF0aWMgQk9PTCBXSU5BUEkKLVdyaXRlQ29uc29sZUFfSG9va2Vk Ci0gICAgIChIQU5ETEUgaCwgTFBDVk9JRCBwLCBEV09SRCBsLCBMUERXT1JEIG4sIExQVk9JRCBv KQotewotICBzZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChoKTsKLSAgcmV0dXJuIFdy aXRlQ29uc29sZUFfT3JpZyAoaCwgcCwgbCwgbiwgbyk7Ci19Ci1zdGF0aWMgQk9PTCBXSU5BUEkK LVdyaXRlQ29uc29sZVdfSG9va2VkCi0gICAgIChIQU5ETEUgaCwgTFBDVk9JRCBwLCBEV09SRCBs LCBMUERXT1JEIG4sIExQVk9JRCBvKQotewotICBzZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90b19w Y29uIChoKTsKLSAgcmV0dXJuIFdyaXRlQ29uc29sZVdfT3JpZyAoaCwgcCwgbCwgbiwgbyk7Ci19 Ci1zdGF0aWMgQk9PTCBXSU5BUEkKLVJlYWRGaWxlX0hvb2tlZAotICAgICAoSEFORExFIGgsIExQ Vk9JRCBwLCBEV09SRCBsLCBMUERXT1JEIG4sIExQT1ZFUkxBUFBFRCBvKQotewotICBzZXRfaXNo eWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChoKTsKLSAgcmV0dXJuIFJlYWRGaWxlX09yaWcgKGgs IHAsIGwsIG4sIG8pOwotfQotc3RhdGljIEJPT0wgV0lOQVBJCi1SZWFkQ29uc29sZUFfSG9va2Vk Ci0gICAgIChIQU5ETEUgaCwgTFBWT0lEIHAsIERXT1JEIGwsIExQRFdPUkQgbiwgTFBWT0lEIG8p Ci17Ci0gIHNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGgpOwotICByZXR1cm4gUmVh ZENvbnNvbGVBX09yaWcgKGgsIHAsIGwsIG4sIG8pOwotfQotc3RhdGljIEJPT0wgV0lOQVBJCi1S ZWFkQ29uc29sZVdfSG9va2VkCi0gICAgIChIQU5ETEUgaCwgTFBWT0lEIHAsIERXT1JEIGwsIExQ RFdPUkQgbiwgTFBWT0lEIG8pCi17Ci0gIHNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24g KGgpOwotICByZXR1cm4gUmVhZENvbnNvbGVXX09yaWcgKGgsIHAsIGwsIG4sIG8pOwotfQotc3Rh dGljIEJPT0wgV0lOQVBJCi1Xcml0ZUNvbnNvbGVPdXRwdXRBX0hvb2tlZAotICAgICAoSEFORExF IGgsIENPTlNUIENIQVJfSU5GTyAqcCwgQ09PUkQgcywgQ09PUkQgYywgUFNNQUxMX1JFQ1QgcikK LXsKLSAgc2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoaCk7Ci0gIHJldHVybiBXcml0 ZUNvbnNvbGVPdXRwdXRBX09yaWcgKGgsIHAsIHMsIGMsIHIpOwotfQotc3RhdGljIEJPT0wgV0lO QVBJCi1Xcml0ZUNvbnNvbGVPdXRwdXRXX0hvb2tlZAotICAgICAoSEFORExFIGgsIENPTlNUIENI QVJfSU5GTyAqcCwgQ09PUkQgcywgQ09PUkQgYywgUFNNQUxMX1JFQ1QgcikKLXsKLSAgc2V0X2lz aHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoaCk7Ci0gIHJldHVybiBXcml0ZUNvbnNvbGVPdXRw dXRXX09yaWcgKGgsIHAsIHMsIGMsIHIpOwotfQotc3RhdGljIEJPT0wgV0lOQVBJCi1Xcml0ZUNv bnNvbGVPdXRwdXRDaGFyYWN0ZXJBX0hvb2tlZAotICAgICAoSEFORExFIGgsIExQQ1NUUiBwLCBE V09SRCBsLCBDT09SRCBjLCBMUERXT1JEIG4pCi17Ci0gIHNldF9pc2h5YnJpZF9hbmRfc3dpdGNo X3RvX3Bjb24gKGgpOwotICByZXR1cm4gV3JpdGVDb25zb2xlT3V0cHV0Q2hhcmFjdGVyQV9Pcmln IChoLCBwLCBsLCBjLCBuKTsKLX0KLXN0YXRpYyBCT09MIFdJTkFQSQotV3JpdGVDb25zb2xlT3V0 cHV0Q2hhcmFjdGVyV19Ib29rZWQKLSAgICAgKEhBTkRMRSBoLCBMUENXU1RSIHAsIERXT1JEIGws IENPT1JEIGMsIExQRFdPUkQgbikKLXsKLSAgc2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNv biAoaCk7Ci0gIHJldHVybiBXcml0ZUNvbnNvbGVPdXRwdXRDaGFyYWN0ZXJXX09yaWcgKGgsIHAs IGwsIGMsIG4pOwotfQotc3RhdGljIEJPT0wgV0lOQVBJCi1Xcml0ZUNvbnNvbGVPdXRwdXRBdHRy aWJ1dGVfSG9va2VkCi0gICAgIChIQU5ETEUgaCwgQ09OU1QgV09SRCAqYSwgRFdPUkQgbCwgQ09P UkQgYywgTFBEV09SRCBuKQotewotICBzZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90b19wY29uICho KTsKLSAgcmV0dXJuIFdyaXRlQ29uc29sZU91dHB1dEF0dHJpYnV0ZV9PcmlnIChoLCBhLCBsLCBj LCBuKTsKLX0KLXN0YXRpYyBCT09MIFdJTkFQSQotU2V0Q29uc29sZUN1cnNvclBvc2l0aW9uX0hv b2tlZAotICAgICAoSEFORExFIGgsIENPT1JEIGMpCi17Ci0gIHNldF9pc2h5YnJpZF9hbmRfc3dp dGNoX3RvX3Bjb24gKGgpOwotICByZXR1cm4gU2V0Q29uc29sZUN1cnNvclBvc2l0aW9uX09yaWcg KGgsIGMpOwotfQotc3RhdGljIEJPT0wgV0lOQVBJCi1TZXRDb25zb2xlVGV4dEF0dHJpYnV0ZV9I b29rZWQKLSAgICAgKEhBTkRMRSBoLCBXT1JEIGEpCi17Ci0gIHNldF9pc2h5YnJpZF9hbmRfc3dp dGNoX3RvX3Bjb24gKGgpOwotICByZXR1cm4gU2V0Q29uc29sZVRleHRBdHRyaWJ1dGVfT3JpZyAo aCwgYSk7Ci19Ci1zdGF0aWMgQk9PTCBXSU5BUEkKLVdyaXRlQ29uc29sZUlucHV0QV9Ib29rZWQK LSAgICAgKEhBTkRMRSBoLCBDT05TVCBJTlBVVF9SRUNPUkQgKnIsIERXT1JEIGwsIExQRFdPUkQg bikKLXsKLSAgc2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoaCk7Ci0gIHJldHVybiBX cml0ZUNvbnNvbGVJbnB1dEFfT3JpZyAoaCwgciwgbCwgbik7Ci19Ci1zdGF0aWMgQk9PTCBXSU5B UEkKLVdyaXRlQ29uc29sZUlucHV0V19Ib29rZWQKLSAgICAgKEhBTkRMRSBoLCBDT05TVCBJTlBV VF9SRUNPUkQgKnIsIERXT1JEIGwsIExQRFdPUkQgbikKLXsKLSAgc2V0X2lzaHlicmlkX2FuZF9z d2l0Y2hfdG9fcGNvbiAoaCk7Ci0gIHJldHVybiBXcml0ZUNvbnNvbGVJbnB1dFdfT3JpZyAoaCwg ciwgbCwgbik7Ci19Ci1zdGF0aWMgQk9PTCBXSU5BUEkKLVJlYWRDb25zb2xlSW5wdXRBX0hvb2tl ZAotICAgICAoSEFORExFIGgsIFBJTlBVVF9SRUNPUkQgciwgRFdPUkQgbCwgTFBEV09SRCBuKQot ewotICBzZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChoKTsKLSAgcmV0dXJuIFJlYWRD b25zb2xlSW5wdXRBX09yaWcgKGgsIHIsIGwsIG4pOwotfQotc3RhdGljIEJPT0wgV0lOQVBJCi1S ZWFkQ29uc29sZUlucHV0V19Ib29rZWQKLSAgICAgKEhBTkRMRSBoLCBQSU5QVVRfUkVDT1JEIHIs IERXT1JEIGwsIExQRFdPUkQgbikKLXsKLSAgc2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNv biAoaCk7Ci0gIHJldHVybiBSZWFkQ29uc29sZUlucHV0V19PcmlnIChoLCByLCBsLCBuKTsKLX0K LXN0YXRpYyBCT09MIFdJTkFQSQotUGVla0NvbnNvbGVJbnB1dEFfSG9va2VkCi0gICAgIChIQU5E TEUgaCwgUElOUFVUX1JFQ09SRCByLCBEV09SRCBsLCBMUERXT1JEIG4pCi17Ci0gIHNldF9pc2h5 YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGgpOwotICByZXR1cm4gUGVla0NvbnNvbGVJbnB1dEFf T3JpZyAoaCwgciwgbCwgbik7Ci19Ci1zdGF0aWMgQk9PTCBXSU5BUEkKLVBlZWtDb25zb2xlSW5w dXRXX0hvb2tlZAotICAgICAoSEFORExFIGgsIFBJTlBVVF9SRUNPUkQgciwgRFdPUkQgbCwgTFBE V09SRCBuKQotewotICBzZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChoKTsKLSAgcmV0 dXJuIFBlZWtDb25zb2xlSW5wdXRXX09yaWcgKGgsIHIsIGwsIG4pOwotfQotLyogQ3JlYXRlUHJv Y2VzcygpIGlzIGhvb2tlZCBmb3IgR0RCIGV0Yy4gKi8KIHN0YXRpYyBCT09MIFdJTkFQSQogQ3Jl YXRlUHJvY2Vzc0FfSG9va2VkCiAgICAgIChMUENTVFIgbiwgTFBTVFIgYywgTFBTRUNVUklUWV9B VFRSSUJVVEVTIHBhLCBMUFNFQ1VSSVRZX0FUVFJJQlVURVMgdGEsCkBAIC0zNjMsMTEgKzg4LDE0 IEBAIENyZWF0ZVByb2Nlc3NBX0hvb2tlZAogICAgICAgTFBTVEFSVFVQSU5GT0Egc2ksIExQUFJP Q0VTU19JTkZPUk1BVElPTiBwaSkKIHsKICAgSEFORExFIGg7Ci0gIGlmIChzaS0+ZHdGbGFncyAm IFNUQVJURl9VU0VTVERIQU5ETEVTKQotICAgIGggPSBzaS0+aFN0ZE91dHB1dDsKLSAgZWxzZQot ICAgIGggPSBHZXRTdGRIYW5kbGUgKFNURF9PVVRQVVRfSEFORExFKTsKLSAgc2V0X2lzaHlicmlk X2FuZF9zd2l0Y2hfdG9fcGNvbiAoaCk7CisgIGlmICghaXNIeWJyaWQpCisgICAgeworICAgICAg aWYgKHNpLT5kd0ZsYWdzICYgU1RBUlRGX1VTRVNUREhBTkRMRVMpCisJaCA9IHNpLT5oU3RkSW5w dXQ7CisgICAgICBlbHNlCisJaCA9IEdldFN0ZEhhbmRsZSAoU1REX0lOUFVUX0hBTkRMRSk7Cisg ICAgICBzZXRfc3dpdGNoX3RvX3Bjb24gKGgpOworICAgIH0KICAgcmV0dXJuIENyZWF0ZVByb2Nl c3NBX09yaWcgKG4sIGMsIHBhLCB0YSwgaW5oLCBmLCBlLCBkLCBzaSwgcGkpOwogfQogc3RhdGlj IEJPT0wgV0lOQVBJCkBAIC0zNzcsMTEgKzEwNSwxNCBAQCBDcmVhdGVQcm9jZXNzV19Ib29rZWQK ICAgICAgIExQU1RBUlRVUElORk9XIHNpLCBMUFBST0NFU1NfSU5GT1JNQVRJT04gcGkpCiB7CiAg IEhBTkRMRSBoOwotICBpZiAoc2ktPmR3RmxhZ3MgJiBTVEFSVEZfVVNFU1RESEFORExFUykKLSAg ICBoID0gc2ktPmhTdGRPdXRwdXQ7Ci0gIGVsc2UKLSAgICBoID0gR2V0U3RkSGFuZGxlIChTVERf T1VUUFVUX0hBTkRMRSk7Ci0gIHNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGgpOwor ICBpZiAoIWlzSHlicmlkKQorICAgIHsKKyAgICAgIGlmIChzaS0+ZHdGbGFncyAmIFNUQVJURl9V U0VTVERIQU5ETEVTKQorCWggPSBzaS0+aFN0ZElucHV0OworICAgICAgZWxzZQorCWggPSBHZXRT dGRIYW5kbGUgKFNURF9JTlBVVF9IQU5ETEUpOworICAgICAgc2V0X3N3aXRjaF90b19wY29uICho KTsKKyAgICB9CiAgIHJldHVybiBDcmVhdGVQcm9jZXNzV19PcmlnIChuLCBjLCBwYSwgdGEsIGlu aCwgZiwgZSwgZCwgc2ksIHBpKTsKIH0KIApAQCAtNDY0LDEwICsxOTUsNiBAQCBmaGFuZGxlcl9w dHlfbWFzdGVyOjpmbHVzaF90b19zbGF2ZSAoKQogewogICBpZiAoZ2V0X3JlYWRhaGVhZF92YWxp ZCAoKSAmJiAhKGdldF90dHlwICgpLT50aS5jX2xmbGFnICYgSUNBTk9OKSkKICAgICBhY2NlcHRf aW5wdXQgKCk7Ci0gIFdhaXRGb3JTaW5nbGVPYmplY3QgKGlucHV0X211dGV4LCBJTkZJTklURSk7 Ci0gIGlmICghZ2V0X3R0eXAgKCktPnBjb25faW5fZW1wdHkgJiYgIShnZXRfdHR5cCAoKS0+dGku Y19sZmxhZyAmIElDQU5PTikpCi0gICAgU2V0RXZlbnQgKGlucHV0X2F2YWlsYWJsZV9ldmVudCk7 Ci0gIFJlbGVhc2VNdXRleCAoaW5wdXRfbXV0ZXgpOwogfQogCiBEV09SRApAQCAtNTMyLDE0ICsy NTksNiBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjpkb2VjaG8gKGNvbnN0IHZvaWQgKnN0ciwgRFdP UkQgbGVuKQogICByZWxlYXNlX291dHB1dF9tdXRleCAoKTsKIH0KIAotaW50Ci1maGFuZGxlcl9w dHlfbWFzdGVyOjpwdXRfcmVhZGFoZWFkIChjaGFyIHZhbHVlKQotewotICBpZiAodG9fYmVfcmVh ZF9mcm9tX3Bjb24gKCkpCi0gICAgcmV0dXJuIDE7Ci0gIHJldHVybiBmaGFuZGxlcl9iYXNlOjpw dXRfcmVhZGFoZWFkICh2YWx1ZSk7Ci19Ci0KIGludAogZmhhbmRsZXJfcHR5X21hc3Rlcjo6YWNj ZXB0X2lucHV0ICgpCiB7CkBAIC01NTEsOSArMjcwLDExIEBAIGZoYW5kbGVyX3B0eV9tYXN0ZXI6 OmFjY2VwdF9pbnB1dCAoKQogICBjaGFyICpwID0gcmFidWYgKCkgKyByYWl4Z2V0ICgpOwogICBi eXRlc19sZWZ0ID0gZWF0X3JlYWRhaGVhZCAoLTEpOwogCisgIEhBTkRMRSB3cml0ZV90byA9IGdl dF9vdXRwdXRfaGFuZGxlICgpOwogICBpZiAodG9fYmVfcmVhZF9mcm9tX3Bjb24gKCkpCi0gICAg OyAvKiBEbyBub3RoaW5nICovCi0gIGVsc2UgaWYgKCFieXRlc19sZWZ0KQorICAgIHdyaXRlX3Rv ID0gdG9fc2xhdmU7CisKKyAgaWYgKCFieXRlc19sZWZ0KQogICAgIHsKICAgICAgIHRlcm1pb3Nf cHJpbnRmICgic2VuZGluZyBFT0YgdG8gc2xhdmUiKTsKICAgICAgIGdldF90dHlwICgpLT5yZWFk X3JldHZhbCA9IDA7CkBAIC01NjQsMTAgKzI4NSwxMCBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjph Y2NlcHRfaW5wdXQgKCkKICAgICAgIERXT1JEIHdyaXR0ZW4gPSAwOwogCiAgICAgICBwYXJhbm9p ZF9wcmludGYgKCJhYm91dCB0byB3cml0ZSAldSBjaGFycyB0byBzbGF2ZSIsIGJ5dGVzX2xlZnQp OwotICAgICAgcmMgPSBXcml0ZUZpbGUgKGdldF9vdXRwdXRfaGFuZGxlICgpLCBwLCBieXRlc19s ZWZ0LCAmd3JpdHRlbiwgTlVMTCk7CisgICAgICByYyA9IFdyaXRlRmlsZSAod3JpdGVfdG8sIHAs IGJ5dGVzX2xlZnQsICZ3cml0dGVuLCBOVUxMKTsKICAgICAgIGlmICghcmMpCiAJewotCSAgZGVi dWdfcHJpbnRmICgiZXJyb3Igd3JpdGluZyB0byBwaXBlICVwICVFIiwgZ2V0X291dHB1dF9oYW5k bGUgKCkpOworCSAgZGVidWdfcHJpbnRmICgiZXJyb3Igd3JpdGluZyB0byBwaXBlICVwICVFIiwg d3JpdGVfdG8pOwogCSAgZ2V0X3R0eXAgKCktPnJlYWRfcmV0dmFsID0gLTE7CiAJICByZXQgPSAt MTsKIAl9CkBAIC03MjUsNTIgKzQ0NiwxMiBAQCBvdXQ6CiAKIGZoYW5kbGVyX3B0eV9zbGF2ZTo6 ZmhhbmRsZXJfcHR5X3NsYXZlIChpbnQgdW5pdCkKICAgOiBmaGFuZGxlcl9wdHlfY29tbW9uICgp LCBpbnVzZSAoTlVMTCksIG91dHB1dF9oYW5kbGVfY3lnIChOVUxMKSwKLSAgaW9faGFuZGxlX2N5 ZyAoTlVMTCksIHBpZF9yZXN0b3JlICgwKSwgZmQgKC0xKQorICBpb19oYW5kbGVfY3lnIChOVUxM KQogewogICBpZiAodW5pdCA+PSAwKQogICAgIGRldiAoKS5wYXJzZSAoREVWX1BUWVNfTUFKT1Is IHVuaXQpOwogfQogCi1maGFuZGxlcl9wdHlfc2xhdmU6On5maGFuZGxlcl9wdHlfc2xhdmUgKCkK LXsKLSAgaWYgKCFnZXRfdHR5cCAoKSkKLSAgICB7Ci0gICAgICAvKiBXaHkgY29tZXMgaGVyZT8g V2hvIGNsZWFycyBfdGM/ICovCi0gICAgICBmcmVlX2F0dGFjaGVkX2NvbnNvbGUgKCk7Ci0gICAg ICByZXR1cm47Ci0gICAgfQotICBpZiAoZ2V0X3BzZXVkb19jb25zb2xlICgpKQotICAgIHsKLSAg ICAgIGludCB1c2VkID0gMDsKLSAgICAgIGludCBhdHRhY2hlZCA9IDA7Ci0gICAgICBjeWdoZWFw X2ZkZW51bSBjZmQgKGZhbHNlKTsKLSAgICAgIHdoaWxlIChjZmQubmV4dCAoKSA+PSAwKQotCXsK LQkgIGlmIChjZmQtPmdldF9tYWpvciAoKSA9PSBERVZfUFRZU19NQUpPUiB8fAotCSAgICAgIGNm ZC0+Z2V0X21ham9yICgpID09IERFVl9DT05TX01BSk9SKQotCSAgICB1c2VkICsrOwotCSAgaWYg KGNmZC0+Z2V0X21ham9yICgpID09IERFVl9QVFlTX01BSk9SICYmCi0JICAgICAgY2ZkLT5nZXRf bWlub3IgKCkgPT0gcGNvbl9hdHRhY2hlZF90bykKLQkgICAgYXR0YWNoZWQgKys7Ci0JfQotCi0g ICAgICAvKiBDYWxsIEZyZWVDb25zb2xlKCkgaWYgbm8gdHR5IGlzIG9wZW5lZCBhbmQgdGhlIHBy b2Nlc3MKLQkgaXMgYXR0YWNoZWQgdG8gY29uc29sZSBjb3JyZXNwb25kaW5nIHRvIHR0eS4gVGhp cyBpcwotCSBuZWVkZWQgdG8gbWFrZSBHTlUgc2NyZWVuIGFuZCB0bXV4IHdvcmsgaW4gV2luZG93 cyAxMAotCSAxOTAzLiAqLwotICAgICAgaWYgKGF0dGFjaGVkID09IDApCi0JewotCSAgcGNvbl9h dHRhY2hlZF90byA9IC0xOwotCSAgbGFzdF90dHlwID0gZ2V0X3R0eXAgKCk7Ci0JfQotICAgICAg aWYgKHVzZWQgPT0gMCkKLQl7Ci0JICBpbml0X2NvbnNvbGVfaGFuZGxlciAoZmFsc2UpOwotCSAg ZnJlZV9hdHRhY2hlZF9jb25zb2xlICgpOwotCX0KLSAgICB9Ci19Ci0KIGludAogZmhhbmRsZXJf cHR5X3NsYXZlOjpvcGVuIChpbnQgZmxhZ3MsIG1vZGVfdCkKIHsKQEAgLTk1MCwyNCArNjMxLDcg QEAgZmhhbmRsZXJfcHR5X3NsYXZlOjpvcGVuIChpbnQgZmxhZ3MsIG1vZGVfdCkKICAgc2V0X291 dHB1dF9oYW5kbGUgKHRvX21hc3Rlcl9sb2NhbCk7CiAgIHNldF9vdXRwdXRfaGFuZGxlX2N5ZyAo dG9fbWFzdGVyX2N5Z19sb2NhbCk7CiAKLSAgaWYgKCFnZXRfcHNldWRvX2NvbnNvbGUgKCkpCi0g ICAgewotICAgICAgZmhhbmRsZXJfY29uc29sZTo6bmVlZF9pbnZpc2libGUgKCk7Ci0gICAgICBw Y29uX2F0dGFjaGVkX3RvID0gLTE7Ci0gICAgfQotICBlbHNlIGlmICghZmhhbmRsZXJfY29uc29s ZTo6Z2V0X2NvbnNvbGVfcHJvY2Vzc19pZAotCQkJICAgICAgIChHZXRDdXJyZW50UHJvY2Vzc0lk ICgpLCB0cnVlKSkKLSAgICB7Ci0gICAgICBmaGFuZGxlcl9jb25zb2xlOjpuZWVkX2ludmlzaWJs ZSAoKTsKLSAgICAgIHBjb25fYXR0YWNoZWRfdG8gPSAtMTsKLSAgICB9Ci0gIGVsc2UgaWYgKGZo YW5kbGVyX2NvbnNvbGU6OmdldF9jb25zb2xlX3Byb2Nlc3NfaWQKLQkJCSAgICAgICAoZ2V0X2hl bHBlcl9wcm9jZXNzX2lkICgpLCB0cnVlKSkKLSAgICAvKiBBdHRhY2hlZCB0byBwY29uIG9mIHRo aXMgcHR5ICovCi0gICAgewotICAgICAgcGNvbl9hdHRhY2hlZF90byA9IGdldF9taW5vciAoKTsK LSAgICAgIGluaXRfY29uc29sZV9oYW5kbGVyICh0cnVlKTsKLSAgICB9CisgIGZoYW5kbGVyX2Nv bnNvbGU6Om5lZWRfaW52aXNpYmxlICgpOwogCiAgIHNldF9vcGVuX3N0YXR1cyAoKTsKICAgcmV0 dXJuIDE7CkBAIC0xMDIxLDggKzY4NSw3IEBAIGZoYW5kbGVyX3B0eV9zbGF2ZTo6Y2xvc2UgKCkK ICAgaWYgKCFGb3JjZUNsb3NlSGFuZGxlIChnZXRfaGFuZGxlX2N5ZyAoKSkpCiAgICAgdGVybWlv c19wcmludGYgKCJDbG9zZUhhbmRsZSAoZ2V0X2hhbmRsZV9jeWcgKCk8JXA+KSwgJUUiLAogCWdl dF9oYW5kbGVfY3lnICgpKTsKLSAgaWYgKCFnZXRfcHNldWRvX2NvbnNvbGUgKCkgJiYKLSAgICAg ICh1bnNpZ25lZCkgbXlzZWxmLT5jdHR5ID09IEZIREVWIChERVZfUFRZU19NQUpPUiwgZ2V0X21p bm9yICgpKSkKKyAgaWYgKCh1bnNpZ25lZCkgbXlzZWxmLT5jdHR5ID09IEZIREVWIChERVZfUFRZ U19NQUpPUiwgZ2V0X21pbm9yICgpKSkKICAgICBmaGFuZGxlcl9jb25zb2xlOjpmcmVlX2NvbnNv bGUgKCk7CS8qIGFzc3VtZXMgdGhhdCB3ZSBhcmUgdGhlIGxhc3QgcHR5IGNsb3NlciAqLwogICBm aGFuZGxlcl9wdHlfY29tbW9uOjpjbG9zZSAoKTsKICAgaWYgKCFGb3JjZUNsb3NlSGFuZGxlIChv dXRwdXRfbXV0ZXgpKQpAQCAtMTA3MCwyMzQgKzczMywxNyBAQCBmaGFuZGxlcl9wdHlfc2xhdmU6 OmluaXQgKEhBTkRMRSBoLCBEV09SRCBhLCBtb2RlX3QpCiAgIHJldHVybiByZXQ7CiB9CiAKLWJv b2wKLWZoYW5kbGVyX3B0eV9zbGF2ZTo6dHJ5X3JlYXR0YWNoX3Bjb24gKHZvaWQpCi17Ci0gIHBp ZF9yZXN0b3JlID0gMDsKLQotICAvKiBEbyBub3QgZGV0YWNoIGZyb20gdGhlIGNvbnNvbGUgYmVj YXVzZSByZS1hdHRhY2hpbmcgd2lsbAotICAgICBmYWlsIGlmIGhlbHBlciBwcm9jZXNzIGlzIHJ1 bm5pbmcgYXMgc2VydmljZSBhY2NvdW50LiAqLwotICBpZiAoZ2V0X3R0eXAoKS0+YXR0YWNoX3Bj b25faW5fZm9yaykKLSAgICByZXR1cm4gZmFsc2U7Ci0gIGlmIChwY29uX2F0dGFjaGVkX3RvID49 IDAgJiYKLSAgICAgIGN5Z3dpbl9zaGFyZWQtPnR0eVtwY29uX2F0dGFjaGVkX3RvXS0+YXR0YWNo X3Bjb25faW5fZm9yaykKLSAgICByZXR1cm4gZmFsc2U7Ci0KLSAgcGlkX3Jlc3RvcmUgPQotICAg IGZoYW5kbGVyX2NvbnNvbGU6OmdldF9jb25zb2xlX3Byb2Nlc3NfaWQgKEdldEN1cnJlbnRQcm9j ZXNzSWQgKCksCi0JCQkJCSAgICAgIGZhbHNlKTsKLSAgLyogSWYgcGlkX3Jlc3RvcmUgaXMgbm90 IHNldCwgZ2l2ZSB1cC4gKi8KLSAgaWYgKCFwaWRfcmVzdG9yZSkKLSAgICByZXR1cm4gZmFsc2U7 Ci0KLSAgRnJlZUNvbnNvbGUgKCk7Ci0gIGlmICghQXR0YWNoQ29uc29sZSAoZ2V0X2hlbHBlcl9w cm9jZXNzX2lkICgpKSkKLSAgICB7Ci0gICAgICBzeXN0ZW1fcHJpbnRmICgicHR5JWQ6IEF0dGFj aENvbnNvbGUoaGVscGVyPSVkKSBmYWlsZWQuIDB4JTA4bHgiLAotCQkgICAgIGdldF9taW5vciAo KSwgZ2V0X2hlbHBlcl9wcm9jZXNzX2lkICgpLCBHZXRMYXN0RXJyb3IgKCkpOwotICAgICAgcmV0 dXJuIGZhbHNlOwotICAgIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQKLWZoYW5kbGVyX3B0 eV9zbGF2ZTo6cmVzdG9yZV9yZWF0dGFjaF9wY29uICh2b2lkKQotewotICBpZiAocGlkX3Jlc3Rv cmUpCi0gICAgewotICAgICAgRnJlZUNvbnNvbGUgKCk7Ci0gICAgICBpZiAoIUF0dGFjaENvbnNv bGUgKHBpZF9yZXN0b3JlKSkKLQl7Ci0JICBzeXN0ZW1fcHJpbnRmICgicHR5JWQ6IEF0dGFjaENv bnNvbGUocmVzdG9yZT0lZCkgZmFpbGVkLiAweCUwOGx4IiwKLQkJCSBnZXRfbWlub3IgKCksIHBp ZF9yZXN0b3JlLCBHZXRMYXN0RXJyb3IgKCkpOwotCSAgcGNvbl9hdHRhY2hlZF90byA9IC0xOwot CX0KLSAgICB9Ci0gIHBpZF9yZXN0b3JlID0gMDsKLX0KLQotLyogVGhpcyBmdW5jdGlvbiByZXF1 ZXN0cyB0cmFuc2ZlcmluZyB0aGUgaW5wdXQgZGF0YSBmcm9tIHRoZSBpbnB1dAotICAgcGlwZSBm b3IgY3lnd2luIGFwcHMgdG8gdGhlIG90aGVyIGlucHV0IHBpcGUgZm9yIG5hdGl2ZSBhcHBzLiAq Lwotdm9pZAotZmhhbmRsZXJfcHR5X3NsYXZlOjpwdWxsX3Bjb25faW5wdXQgKHZvaWQpCi17Ci0g IGdldF90dHlwICgpLT5yZXFfdHJhbnNmZXJfaW5wdXRfdG9fcGNvbiA9IHRydWU7Ci0gIHdoaWxl IChnZXRfdHR5cCAoKS0+cmVxX3RyYW5zZmVyX2lucHV0X3RvX3Bjb24pCi0gICAgU2xlZXAgKDEp OwotfQotCi12b2lkCi1maGFuZGxlcl9wdHlfc2xhdmU6OnVwZGF0ZV9wY29uX2lucHV0X3N0YXRl IChib29sIG5lZWRfbG9jaykKLXsKLSAgaWYgKG5lZWRfbG9jaykKLSAgICBXYWl0Rm9yU2luZ2xl T2JqZWN0IChpbnB1dF9tdXRleCwgSU5GSU5JVEUpOwotICAvKiBGbHVzaCBpbnB1dCBidWZmZXIg aWYgaXQgaXMgcmVxdWVzdGVkIGJ5IG1hc3Rlci4KLSAgICAgVGhpcyBoYXBwZW5zIGlmIF5DIGlz IHByZXNzZWQgaW4gcHNldWRvIGNvbnNvbGUgc2lkZS4gKi8KLSAgaWYgKGdldF90dHlwICgpLT5y ZXFfZmx1c2hfcGNvbl9pbnB1dCkKLSAgICB7Ci0gICAgICBGbHVzaENvbnNvbGVJbnB1dEJ1ZmZl ciAoZ2V0X2hhbmRsZSAoKSk7Ci0gICAgICBnZXRfdHR5cCAoKS0+cmVxX2ZsdXNoX3Bjb25faW5w dXQgPSBmYWxzZTsKLSAgICB9Ci0gIC8qIFBlZWsgY29uc29sZSBpbnB1dCBidWZmZXIgYW5kIHVw ZGF0ZSBzdGF0ZS4gKi8KLSAgSU5QVVRfUkVDT1JEIGlucFtJTlJFQ19TSVpFXTsKLSAgRFdPUkQg bjsKLSAgQk9PTCAoV0lOQVBJICpQZWVrRnVuYykKLSAgICAoSEFORExFLCBQSU5QVVRfUkVDT1JE LCBEV09SRCwgTFBEV09SRCk7Ci0gIFBlZWtGdW5jID0KLSAgICBQZWVrQ29uc29sZUlucHV0QV9P cmlnID8gOiBQZWVrQ29uc29sZUlucHV0OwotICBQZWVrRnVuYyAoZ2V0X2hhbmRsZSAoKSwgaW5w LCBJTlJFQ19TSVpFLCAmbik7Ci0gIGJvb2wgc2F3X2FjY2VwdCA9IGZhbHNlOwotICBib29sIHBp cGVfZW1wdHkgPSB0cnVlOwotICB3aGlsZSAobi0tID4gMCkKLSAgICBpZiAoaW5wW25dLkV2ZW50 VHlwZSA9PSBLRVlfRVZFTlQgJiYgaW5wW25dLkV2ZW50LktleUV2ZW50LmJLZXlEb3duICYmCi0J aW5wW25dLkV2ZW50LktleUV2ZW50LnVDaGFyLkFzY2lpQ2hhcikKLSAgICAgIHsKLQlwaXBlX2Vt cHR5ID0gZmFsc2U7Ci0JY2hhciBjID0gaW5wW25dLkV2ZW50LktleUV2ZW50LnVDaGFyLkFzY2lp Q2hhcjsKLQljb25zdCBjaGFyIHNpZ3NbXSA9IHsKLQkgIChjaGFyKSBnZXRfdHR5cCAoKS0+dGku Y19jY1tWSU5UUl0sCi0JICAoY2hhcikgZ2V0X3R0eXAgKCktPnRpLmNfY2NbVlFVSVRdLAotCSAg KGNoYXIpIGdldF90dHlwICgpLT50aS5jX2NjW1ZTVVNQXSwKLQl9OwotCWNvbnN0IGNoYXIgZW9s c1tdID0gewotCSAgKGNoYXIpIGdldF90dHlwICgpLT50aS5jX2NjW1ZFT0ZdLAotCSAgKGNoYXIp IGdldF90dHlwICgpLT50aS5jX2NjW1ZFT0xdLAotCSAgKGNoYXIpIGdldF90dHlwICgpLT50aS5j X2NjW1ZFT0wyXSwKLQkgICdcbicsCi0JICAnXHInCi0JfTsKLQlpZiAoaXNfbGluZV9pbnB1dCAo KSAmJiBjICYmIG1lbWNociAoZW9scywgYywgc2l6ZW9mIChlb2xzKSkpCi0JICBzYXdfYWNjZXB0 ID0gdHJ1ZTsKLQlpZiAoKGdldF90dHlwICgpLT50aS5jX2xmbGFnICYgSVNJRykKLQkgICAgJiYg YyAmJiBtZW1jaHIgKHNpZ3MsIGMsIHNpemVvZiAoc2lncykpKQotCSAgc2F3X2FjY2VwdCA9IHRy dWU7Ci0gICAgICB9Ci0gIGdldF90dHlwICgpLT5wY29uX2luX2VtcHR5ID0gcGlwZV9lbXB0eSAm JiAhKHJhbGVuICgpID4gcmFpeGdldCAoKSk7Ci0gIGlmICghZ2V0X3JlYWRhaGVhZF92YWxpZCAo KSAmJgotICAgICAgKHBpcGVfZW1wdHkgfHwgKGlzX2xpbmVfaW5wdXQgKCkgJiYgIXNhd19hY2Nl cHQpKSAmJgotICAgICAgZ2V0X3R0eXAgKCktPnJlYWRfcmV0dmFsID09IDEgJiYgYnl0ZXNfYXZh aWxhYmxlIChuKSAmJiBuID09IDApCi0gICAgUmVzZXRFdmVudCAoaW5wdXRfYXZhaWxhYmxlX2V2 ZW50KTsKLSAgaWYgKG5lZWRfbG9jaykKLSAgICBSZWxlYXNlTXV0ZXggKGlucHV0X211dGV4KTsK LX0KLQotaW50Ci1maGFuZGxlcl9wdHlfc2xhdmU6OmVhdF9yZWFkYWhlYWQgKGludCBuKQotewot ICBpbnQgb3JhbGVuID0gcmFsZW4gKCk7Ci0gIGlmIChuIDwgMCkKLSAgICBuID0gcmFsZW4gKCkg LSByYWl4Z2V0ICgpOwotICBpZiAobiA+IDAgJiYgcmFsZW4gKCkgPiByYWl4Z2V0ICgpKQotICAg IHsKLSAgICAgIGNvbnN0IGNoYXIgZW9sc1tdID0gewotCShjaGFyKSBnZXRfdHR5cCAoKS0+dGku Y19jY1tWRU9GXSwKLQkoY2hhcikgZ2V0X3R0eXAgKCktPnRpLmNfY2NbVkVPTF0sCi0JKGNoYXIp IGdldF90dHlwICgpLT50aS5jX2NjW1ZFT0wyXSwKLQknXG4nCi0gICAgICB9OwotICAgICAgd2hp bGUgKG4gPiAwICYmIHJhbGVuICgpID4gcmFpeGdldCAoKSkKLQl7Ci0JICBpZiAoaXNfbGluZV9p bnB1dCAoKSAmJiByYWJ1ZiAoKVtyYWxlbiAoKS0xXQotCSAgICAgICYmIG1lbWNociAoZW9scywg cmFidWYgKClbcmFsZW4gKCktMV0sIHNpemVvZiAoZW9scykpKQotCSAgICBicmVhazsKLQkgIC0t IG47Ci0JICAtLSByYWxlbiAoKTsKLQl9Ci0KLSAgICAgIC8qIElmIElVVEY4IGlzIHNldCwgdGhl IHRlcm1pbmFsIGlzIGluIFVURi04IG1vZGUuICBJZiBzbywgd2UgZXJhc2UKLQkgYSBjb21wbGV0 ZSBVVEYtOCBtdWx0aWJ5dGUgc2VxdWVuY2Ugb24gVkVSQVNFL1ZXRVJBU0UuICBPdGhlcndpc2Us Ci0JIGlmIHdlIG9ubHkgZXJhc2UgYSBzaW5nbGUgYnl0ZSwgaW52YWxpZCB1bmljb2RlIGNoYXJz IGFyZSBsZWZ0IGluCi0JIHRoZSBpbnB1dC4gKi8KLSAgICAgIGlmIChnZXRfdHR5cCAoKS0+dGku Y19pZmxhZyAmIElVVEY4KQotCXdoaWxlIChyYWxlbiAoKSA+IHJhaXhnZXQgKCkgJiYKLQkgICAg ICAgKCh1bnNpZ25lZCBjaGFyKSByYWJ1ZiAoKVtyYWxlbiAoKV0gJiAweGMwKSA9PSAweDgwKQot CSAgLS1yYWxlbiAoKTsKLSAgICB9Ci0gIG9yYWxlbiA9IG9yYWxlbiAtIHJhbGVuICgpOwotICBp ZiAocmFpeGdldCAoKSA+PSByYWxlbiAoKSkKLSAgICByYWl4Z2V0ICgpID0gcmFpeHB1dCAoKSA9 IHJhbGVuICgpID0gMDsKLSAgZWxzZSBpZiAocmFpeHB1dCAoKSA+IHJhbGVuICgpKQotICAgIHJh aXhwdXQgKCkgPSByYWxlbiAoKTsKLQotICByZXR1cm4gb3JhbGVuOwotfQotCi1pbnQKLWZoYW5k bGVyX3B0eV9zbGF2ZTo6Z2V0X3JlYWRhaGVhZF9pbnRvX2J1ZmZlciAoY2hhciAqYnVmLCBzaXpl X3QgYnVmbGVuKQotewotICBpbnQgY2g7Ci0gIGludCBjb3BpZWRfY2hhcnMgPSAwOwotCi0gIHdo aWxlIChidWZsZW4pCi0gICAgaWYgKChjaCA9IGdldF9yZWFkYWhlYWQgKCkpIDwgMCkKLSAgICAg IGJyZWFrOwotICAgIGVsc2UKLSAgICAgIHsKLQljb25zdCBjaGFyIGVvbHNbXSA9IHsKLQkgIChj aGFyKSBnZXRfdHR5cCAoKS0+dGkuY19jY1tWRU9GXSwKLQkgIChjaGFyKSBnZXRfdHR5cCAoKS0+ dGkuY19jY1tWRU9MXSwKLQkgIChjaGFyKSBnZXRfdHR5cCAoKS0+dGkuY19jY1tWRU9MMl0sCi0J ICAnXG4nCi0JfTsKLQlidWZbY29waWVkX2NoYXJzKytdID0gKHVuc2lnbmVkIGNoYXIpKGNoICYg MHhmZik7Ci0JYnVmbGVuLS07Ci0JaWYgKGlzX2xpbmVfaW5wdXQgKCkgJiYgY2ggJiYgbWVtY2hy IChlb2xzLCBjaCAmIDB4ZmYsIHNpemVvZiAoZW9scykpKQotCSAgYnJlYWs7Ci0gICAgICB9Ci0K LSAgcmV0dXJuIGNvcGllZF9jaGFyczsKLX0KLQotYm9vbAotZmhhbmRsZXJfcHR5X3NsYXZlOjpn ZXRfcmVhZGFoZWFkX3ZhbGlkICh2b2lkKQotewotICBpZiAoaXNfbGluZV9pbnB1dCAoKSkKLSAg ICB7Ci0gICAgICBjb25zdCBjaGFyIGVvbHNbXSA9IHsKLQkoY2hhcikgZ2V0X3R0eXAgKCktPnRp LmNfY2NbVkVPRl0sCi0JKGNoYXIpIGdldF90dHlwICgpLT50aS5jX2NjW1ZFT0xdLAotCShjaGFy KSBnZXRfdHR5cCAoKS0+dGkuY19jY1tWRU9MMl0sCi0JJ1xuJwotICAgICAgfTsKLSAgICAgIGZv ciAoc2l6ZV90IGk9cmFpeGdldCAoKTsgaTxyYWxlbiAoKTsgaSsrKQotCWlmIChyYWJ1ZiAoKVtp XSAmJiBtZW1jaHIgKGVvbHMsIHJhYnVmICgpW2ldLCBzaXplb2YgKGVvbHMpKSkKLQkgIHJldHVy biB0cnVlOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgZWxzZQotICAgIHJldHVybiBy YWxlbiAoKSA+IHJhaXhnZXQgKCk7Ci19Ci0KIHZvaWQKLWZoYW5kbGVyX3B0eV9zbGF2ZTo6c2V0 X3N3aXRjaF90b19wY29uIChpbnQgZmRfc2V0KQorZmhhbmRsZXJfcHR5X3NsYXZlOjpzZXRfc3dp dGNoX3RvX3Bjb24gKHZvaWQpCiB7Ci0gIGlmIChmZCA8IDApCi0gICAgZmQgPSBmZF9zZXQ7Ci0g IGFjcXVpcmVfb3V0cHV0X211dGV4IChJTkZJTklURSk7Ci0gIGlmIChmZCA9PSAwICYmICFnZXRf dHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25faW4pCisgIGlmICghZ2V0X3R0eXAgKCktPnN3aXRjaF90 b19wY29uX2luKQogICAgIHsKLSAgICAgIHB1bGxfcGNvbl9pbnB1dCAoKTsKKyAgICAgIGlzSHli cmlkID0gdHJ1ZTsKICAgICAgIGlmIChnZXRfdHR5cCAoKS0+cGNvbl9waWQgPT0gMCB8fAogCSAg IXBpbmZvIChnZXRfdHR5cCAoKS0+cGNvbl9waWQpKQogCWdldF90dHlwICgpLT5wY29uX3BpZCA9 IG15c2VsZi0+cGlkOwogICAgICAgZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX2luID0gdHJ1 ZTsKLSAgICAgIGlmIChpc0h5YnJpZCAmJiAhZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX291 dCkKLQl7Ci0JICBnZXRfdHR5cCAoKS0+d2FpdF9wY29uX2Z3ZCAoKTsKLQkgIGdldF90dHlwICgp LT5zd2l0Y2hfdG9fcGNvbl9vdXQgPSB0cnVlOwotCX0KICAgICB9Ci0gIGVsc2UgaWYgKChmZCA9 PSAxIHx8IGZkID09IDIpICYmICFnZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25fb3V0KQotICAg IHsKLSAgICAgIGdldF90dHlwICgpLT53YWl0X3Bjb25fZndkICgpOwotICAgICAgaWYgKGdldF90 dHlwICgpLT5wY29uX3BpZCA9PSAwIHx8Ci0JICAhcGluZm8gKGdldF90dHlwICgpLT5wY29uX3Bp ZCkpCi0JZ2V0X3R0eXAgKCktPnBjb25fcGlkID0gbXlzZWxmLT5waWQ7Ci0gICAgICBnZXRfdHR5 cCAoKS0+c3dpdGNoX3RvX3Bjb25fb3V0ID0gdHJ1ZTsKLSAgICAgIGlmIChpc0h5YnJpZCkKLQln ZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25faW4gPSB0cnVlOwotICAgIH0KLSAgcmVsZWFzZV9v dXRwdXRfbXV0ZXggKCk7CiB9CiAKIHZvaWQKQEAgLTEzMTAsMTgzICs3NTYsMTAgQEAgZmhhbmRs ZXJfcHR5X3NsYXZlOjpyZXNldF9zd2l0Y2hfdG9fcGNvbiAodm9pZCkKICAgICByZXR1cm47CiAg IGlmIChpc0h5YnJpZCkKICAgICByZXR1cm47Ci0gIGlmIChkb19ub3RfcmVzZXRfc3dpdGNoX3Rv X3Bjb24pCi0gICAgcmV0dXJuOwotICBhY3F1aXJlX291dHB1dF9tdXRleCAoSU5GSU5JVEUpOwot ICBpZiAoZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX291dCkKLSAgICAvKiBXYWl0IGZvciBw dHlfbWFzdGVyX2Z3ZF90aHJlYWQoKSAqLwotICAgIGdldF90dHlwICgpLT53YWl0X3Bjb25fZndk ICgpOwogICBnZXRfdHR5cCAoKS0+cGNvbl9waWQgPSAwOwogICBnZXRfdHR5cCAoKS0+c3dpdGNo X3RvX3Bjb25faW4gPSBmYWxzZTsKLSAgZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX291dCA9 IGZhbHNlOwotICByZWxlYXNlX291dHB1dF9tdXRleCAoKTsKLSAgaW5pdF9jb25zb2xlX2hhbmRs ZXIgKHRydWUpOwotfQotCi12b2lkCi1maGFuZGxlcl9wdHlfc2xhdmU6OnB1c2hfdG9fcGNvbl9z Y3JlZW5idWZmZXIgKGNvbnN0IGNoYXIgKnB0ciwgc2l6ZV90IGxlbiwKLQkJCQkJICAgICAgIGJv b2wgaXNfZWNobykKLXsKLSAgYm9vbCBhdHRhY2hlZCA9Ci0gICAgISFmaGFuZGxlcl9jb25zb2xl OjpnZXRfY29uc29sZV9wcm9jZXNzX2lkIChnZXRfaGVscGVyX3Byb2Nlc3NfaWQgKCksIHRydWUp OwotICBpZiAoIWF0dGFjaGVkICYmIHBjb25fYXR0YWNoZWRfdG8gPT0gZ2V0X21pbm9yICgpKQot ICAgIHsKLSAgICAgIGZvciAoRFdPUkQgdDAgPSBHZXRUaWNrQ291bnQgKCk7IEdldFRpY2tDb3Vu dCAoKSAtIHQwIDwgMTAwOyApCi0JewotCSAgU2xlZXAgKDEpOwotCSAgYXR0YWNoZWQgPSBmaGFu ZGxlcl9jb25zb2xlOjpnZXRfY29uc29sZV9wcm9jZXNzX2lkCi0JCQkJICAgICAgKGdldF9oZWxw ZXJfcHJvY2Vzc19pZCAoKSwgdHJ1ZSk7Ci0JICBpZiAoYXR0YWNoZWQpCi0JICAgIGJyZWFrOwot CX0KLSAgICAgIGlmICghYXR0YWNoZWQpCi0JewotCSAgc3lzdGVtX3ByaW50ZiAoInB0eSVkOiBw Y29uX2F0dGFjaF90byBtaXNtYXRjaD8/Pz8/PyIsIGdldF9taW5vciAoKSk7Ci0JICByZXR1cm47 Ci0JfQotICAgIH0KLQotICAvKiBJZiBub3QgYXR0YWNoZWQgdG8gdGhpcyBwc2V1ZG8gY29uc29s ZSwgdHJ5IHRvIGF0dGFjaCB0ZW1wb3JhcmlseS4gKi8KLSAgcGlkX3Jlc3RvcmUgPSAwOwotICBp ZiAocGNvbl9hdHRhY2hlZF90byAhPSBnZXRfbWlub3IgKCkpCi0gICAgaWYgKCF0cnlfcmVhdHRh Y2hfcGNvbiAoKSkKLSAgICAgIGdvdG8gZGV0YWNoOwotCi0gIGNoYXIgKmJ1ZjsKLSAgc2l6ZV90 IG5sZW47Ci0gIERXT1JEIG9yaWdDUDsKLSAgb3JpZ0NQID0gR2V0Q29uc29sZU91dHB1dENQICgp OwotICBTZXRDb25zb2xlT3V0cHV0Q1AgKGdldF90dHlwICgpLT50ZXJtX2NvZGVfcGFnZSk7Ci0g IC8qIEp1c3QgY29weSAqLwotICBidWYgPSAoY2hhciAqKSBIZWFwQWxsb2MgKEdldFByb2Nlc3NI ZWFwICgpLCAwLCBsZW4pOwotICBtZW1jcHkgKGJ1ZiwgKGNoYXIgKilwdHIsIGxlbik7Ci0gIG5s ZW4gPSBsZW47Ci0gIGNoYXIgKnAwLCAqcDE7Ci0gIHAwID0gcDEgPSBidWY7Ci0gIC8qIFJlbW92 ZSBhbHRlcm5hdGUgc2NyZWVuIGJ1ZmZlciBkcmF3aW5nICovCi0gIHdoaWxlIChwMCAmJiBwMSkK LSAgICB7Ci0gICAgICBpZiAoIWdldF90dHlwICgpLT5zY3JlZW5fYWx0ZXJuYXRlZCkKLQl7Ci0J ICAvKiBDaGVjayBzd2l0Y2hpbmcgdG8gYWx0ZXJuYXRlIHNjcmVlbiBidWZmZXIgKi8KLQkgIHAw ID0gKGNoYXIgKikgbWVtbWVtIChwMSwgbmxlbiAtIChwMS1idWYpLCAiXDAzM1s/MTA0OWgiLCA4 KTsKLQkgIGlmIChwMCkKLQkgICAgewotCSAgICAgIC8vcDAgKz0gODsKLQkgICAgICBnZXRfdHR5 cCAoKS0+c2NyZWVuX2FsdGVybmF0ZWQgPSB0cnVlOwotCSAgICAgIGlmIChnZXRfdHR5cCAoKS0+ c3dpdGNoX3RvX3Bjb25fb3V0KQotCQlkb19ub3RfcmVzZXRfc3dpdGNoX3RvX3Bjb24gPSB0cnVl OwotCSAgICB9Ci0JfQotICAgICAgaWYgKGdldF90dHlwICgpLT5zY3JlZW5fYWx0ZXJuYXRlZCkK LQl7Ci0JICAvKiBDaGVjayBzd2l0Y2hpbmcgdG8gbWFpbiBzY3JlZW4gYnVmZmVyICovCi0JICBw MSA9IChjaGFyICopIG1lbW1lbSAocDAsIG5sZW4gLSAocDAtYnVmKSwgIlwwMzNbPzEwNDlsIiwg OCk7Ci0JICBpZiAocDEpCi0JICAgIHsKLQkgICAgICBwMSArPSA4OwotCSAgICAgIGdldF90dHlw ICgpLT5zY3JlZW5fYWx0ZXJuYXRlZCA9IGZhbHNlOwotCSAgICAgIGRvX25vdF9yZXNldF9zd2l0 Y2hfdG9fcGNvbiA9IGZhbHNlOwotCSAgICAgIG1lbW1vdmUgKHAwLCBwMSwgYnVmK25sZW4gLSBw MSk7Ci0JICAgICAgbmxlbiAtPSBwMSAtIHAwOwotCSAgICB9Ci0JICBlbHNlCi0JICAgIG5sZW4g PSBwMCAtIGJ1ZjsKLQl9Ci0gICAgfQotICBpZiAoIW5sZW4pIC8qIE5vdGhpbmcgdG8gYmUgc3lu Y2hyb25pemVkICovCi0gICAgZ290byBjbGVhbnVwOwotICBpZiAoZ2V0X3R0eXAgKCktPnN3aXRj aF90b19wY29uX291dCAmJiAhaXNfZWNobykKLSAgICBnb3RvIGNsZWFudXA7Ci0gIC8qIFJlbW92 ZSBFU0Mgc2VxdWVuY2Ugd2hpY2ggcmV0dXJucyByZXN1bHRzIHRvIGNvbnNvbGUKLSAgICAgaW5w dXQgYnVmZmVyLiBXaXRob3V0IHRoaXMsIGN1cnNvciBwb3NpdGlvbiByZXBvcnQKLSAgICAgaXMg cHV0IGludG8gdGhlIGlucHV0IGJ1ZmZlciBhcyBhIGdhcmJhZ2UuICovCi0gIC8qIFJlbW92ZSBF U0Mgc2VxdWVuY2UgdG8gcmVwb3J0IGN1cnNvciBwb3NpdGlvbi4gKi8KLSAgd2hpbGUgKChwMCA9 IChjaGFyICopIG1lbW1lbSAoYnVmLCBubGVuLCAiXDAzM1s2biIsIDQpKSkKLSAgICB7Ci0gICAg ICBtZW1tb3ZlIChwMCwgcDArNCwgbmxlbiAtIChwMCs0IC0gYnVmKSk7Ci0gICAgICBubGVuIC09 IDQ7Ci0gICAgfQotICAvKiBSZW1vdmUgRVNDIHNlcXVlbmNlIHRvIHJlcG9ydCB0ZXJtaW5hbCBp ZGVudGl0eS4gKi8KLSAgd2hpbGUgKChwMCA9IChjaGFyICopIG1lbW1lbSAoYnVmLCBubGVuLCAi XDAzM1swYyIsIDQpKSkKLSAgICB7Ci0gICAgICBtZW1tb3ZlIChwMCwgcDArNCwgbmxlbiAtIChw MCs0IC0gYnVmKSk7Ci0gICAgICBubGVuIC09IDQ7Ci0gICAgfQotCi0gIC8qIElmIHRoZSBFU0Mg c2VxdWVuY2UgRVNDWz8zaCBvciBFU0NbPzNsIHdoaWNoIGNsZWFycyBjb25zb2xlIHNjcmVlbgot ICAgICBidWZmZXIgaXMgcHVzaGVkLCBzZXQgbmVlZF9yZWRyYXdfc2NyZWVuIHRvIHRyaWdnZXIg cmVkcmF3IHNjcmVlbi4gKi8KLSAgcDAgPSBidWY7Ci0gIHdoaWxlICgocDAgPSAoY2hhciAqKSBt ZW1tZW0gKHAwLCBubGVuIC0gKHAwIC0gYnVmKSwgIlwwMzNbPyIsIDMpKSkKLSAgICB7Ci0gICAg ICBwMCArPSAzOwotICAgICAgYm9vbCBleGlzdF9hcmdfMyA9IGZhbHNlOwotICAgICAgd2hpbGUg KHAwIDwgYnVmICsgbmxlbiAmJiAoaXNkaWdpdCAoKnAwKSB8fCAqcDAgPT0gJzsnKSkKLQl7Ci0J ICBpbnQgYXJnID0gMDsKLQkgIHdoaWxlIChwMCA8IGJ1ZiArIG5sZW4gJiYgaXNkaWdpdCAoKnAw KSkKLQkgICAgYXJnID0gYXJnICogMTAgKyAoKnAwICsrKSAtICcwJzsKLQkgIGlmIChhcmcgPT0g MykKLQkgICAgZXhpc3RfYXJnXzMgPSB0cnVlOwotCSAgaWYgKHAwIDwgYnVmICsgbmxlbiAmJiAq cDAgPT0gJzsnKQotCSAgICBwMCArKzsKLQl9Ci0gICAgICBpZiAocDAgPCBidWYgKyBubGVuICYm IGV4aXN0X2FyZ18zICYmICgqcDAgPT0gJ2gnIHx8ICpwMCA9PSAnbCcpKQotCWdldF90dHlwICgp LT5uZWVkX3JlZHJhd19zY3JlZW4gPSB0cnVlOwotICAgICAgcDAgKys7Ci0gICAgICBpZiAocDAg Pj0gYnVmICsgbmxlbikKLQlicmVhazsKLSAgICB9Ci0KLSAgaW50IHJldHJ5X2NvdW50OwotICBy ZXRyeV9jb3VudCA9IDA7Ci0gIERXT1JEIGR3TW9kZSwgZmxhZ3M7Ci0gIGZsYWdzID0gRU5BQkxF X1ZJUlRVQUxfVEVSTUlOQUxfUFJPQ0VTU0lORzsKLSAgd2hpbGUgKCFHZXRDb25zb2xlTW9kZSAo Z2V0X291dHB1dF9oYW5kbGUgKCksICZkd01vZGUpKQotICAgIHsKLSAgICAgIHRlcm1pb3NfcHJp bnRmICgiR2V0Q29uc29sZU1vZGUgZmFpbGVkLCAlRSIpOwotICAgICAgaW50IGVycm5vX3NhdmUg PSBlcnJubzsKLSAgICAgIC8qIFJlLW9wZW4gaGFuZGxlcyAqLwotICAgICAgdGhpcy0+b3BlbiAo MCwgMCk7Ci0gICAgICAvKiBGaXggcHNldWRvIGNvbnNvbGUgd2luZG93IHNpemUgKi8KLSAgICAg IHRoaXMtPmlvY3RsIChUSU9DU1dJTlNaLCAmZ2V0X3R0eXAgKCktPndpbnNpemUpOwotICAgICAg aWYgKGVycm5vICE9IGVycm5vX3NhdmUpCi0Jc2V0X2Vycm5vIChlcnJub19zYXZlKTsKLSAgICAg IGlmICgrK3JldHJ5X2NvdW50ID4gMykKLQlnb3RvIGNsZWFudXA7Ci0gICAgfQotICBpZiAoIShn ZXRfdHR5cCAoKS0+dGkuY19vZmxhZyAmIE9QT1NUKSB8fAotICAgICAgIShnZXRfdHR5cCAoKS0+ dGkuY19vZmxhZyAmIE9OTENSKSkKLSAgICBmbGFncyB8PSBESVNBQkxFX05FV0xJTkVfQVVUT19S RVRVUk47Ci0gIFNldENvbnNvbGVNb2RlIChnZXRfb3V0cHV0X2hhbmRsZSAoKSwgZHdNb2RlIHwg ZmxhZ3MpOwotICBjaGFyICpwOwotICBwID0gYnVmOwotICBEV09SRCB3TGVuLCB3cml0dGVuOwot ICB3cml0dGVuID0gMDsKLSAgQk9PTCAoV0lOQVBJICpXcml0ZUZ1bmMpCi0gICAgKEhBTkRMRSwg TFBDVk9JRCwgRFdPUkQsIExQRFdPUkQsIExQT1ZFUkxBUFBFRCk7Ci0gIFdyaXRlRnVuYyA9IFdy aXRlRmlsZV9PcmlnID8gV3JpdGVGaWxlX09yaWcgOiBXcml0ZUZpbGU7Ci0gIHdoaWxlICh3cml0 dGVuIDwgIG5sZW4pCi0gICAgewotICAgICAgaWYgKCFXcml0ZUZ1bmMgKGdldF9vdXRwdXRfaGFu ZGxlICgpLCBwLCBubGVuIC0gd3JpdHRlbiwgJndMZW4sIE5VTEwpKQotCXsKLQkgIHRlcm1pb3Nf cHJpbnRmICgiV3JpdGVGaWxlIGZhaWxlZCwgJUUiKTsKLQkgIGJyZWFrOwotCX0KLSAgICAgIGVs c2UKLQl7Ci0JICB3cml0dGVuICs9IHdMZW47Ci0JICBwICs9IHdMZW47Ci0JfQotICAgIH0KLSAg LyogRGV0YWNoIGZyb20gcHNldWRvIGNvbnNvbGUgYW5kIHJlc3VtZS4gKi8KLSAgZmxhZ3MgPSBF TkFCTEVfVklSVFVBTF9URVJNSU5BTF9QUk9DRVNTSU5HOwotICBTZXRDb25zb2xlTW9kZSAoZ2V0 X291dHB1dF9oYW5kbGUgKCksIGR3TW9kZSB8IGZsYWdzKTsKLWNsZWFudXA6Ci0gIFNldENvbnNv bGVPdXRwdXRDUCAob3JpZ0NQKTsKLSAgSGVhcEZyZWUgKEdldFByb2Nlc3NIZWFwICgpLCAwLCBi dWYpOwotZGV0YWNoOgotICByZXN0b3JlX3JlYXR0YWNoX3Bjb24gKCk7CisgIGdldF90dHlwICgp LT5oX3BzZXVkb19jb25zb2xlID0gTlVMTDsKKyAgZ2V0X3R0eXAgKCktPnBjb25fc3RhcnQgPSBm YWxzZTsKIH0KIAogc3NpemVfdCBfX3N0ZGNhbGwKQEAgLTE1MDUsNDQgKzc3OCw3IEBAIGZoYW5k bGVyX3B0eV9zbGF2ZTo6d3JpdGUgKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IGxlbikKICAgcmVz ZXRfc3dpdGNoX3RvX3Bjb24gKCk7CiAKICAgYWNxdWlyZV9vdXRwdXRfbXV0ZXggKElORklOSVRF KTsKLSAgYm9vbCBvdXRwdXRfdG9fcGNvbiA9IGdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9v dXQ7Ci0gIHJlbGVhc2Vfb3V0cHV0X211dGV4ICgpOwotCi0gIFVJTlQgdGFyZ2V0X2NvZGVfcGFn ZSA9IG91dHB1dF90b19wY29uID8KLSAgICBHZXRDb25zb2xlT3V0cHV0Q1AgKCkgOiBnZXRfdHR5 cCAoKS0+dGVybV9jb2RlX3BhZ2U7Ci0gIHNzaXplX3QgbmxlbjsKLSAgY2hhciAqYnVmID0gY29u dmVydF9tYl9zdHIgKHRhcmdldF9jb2RlX3BhZ2UsIChzaXplX3QgKikgJm5sZW4sCi0JCSBnZXRf dHR5cCAoKS0+dGVybV9jb2RlX3BhZ2UsIChjb25zdCBjaGFyICopIHB0ciwgbGVuKTsKLQotICAv KiBJZiBub3QgYXR0YWNoZWQgdG8gdGhpcyBwc2V1ZG8gY29uc29sZSwgdHJ5IHRvIGF0dGFjaCB0 ZW1wb3JhcmlseS4gKi8KLSAgcGlkX3Jlc3RvcmUgPSAwOwotICBib29sIGZhbGxiYWNrID0gZmFs c2U7Ci0gIGlmIChvdXRwdXRfdG9fcGNvbiAmJiBwY29uX2F0dGFjaGVkX3RvICE9IGdldF9taW5v ciAoKSkKLSAgICBpZiAoIXRyeV9yZWF0dGFjaF9wY29uICgpKQotICAgICAgZmFsbGJhY2sgPSB0 cnVlOwotCi0gIGlmIChvdXRwdXRfdG9fcGNvbiAmJiAhZmFsbGJhY2sgJiYKLSAgICAgIChtZW1t ZW0gKGJ1ZiwgbmxlbiwgIlwwMzNbNm4iLCA0KSB8fCBtZW1tZW0gKGJ1ZiwgbmxlbiwgIlwwMzNb MGMiLCA0KSkpCi0gICAgewotICAgICAgZ2V0X3R0eXAgKCktPnBjb25faW5fZW1wdHkgPSBmYWxz ZTsKLSAgICAgIGlmICghaXNfbGluZV9pbnB1dCAoKSkKLQlTZXRFdmVudCAoaW5wdXRfYXZhaWxh YmxlX2V2ZW50KTsKLSAgICB9Ci0KLSAgRFdPUkQgZHdNb2RlLCBmbGFnczsKLSAgZmxhZ3MgPSBF TkFCTEVfVklSVFVBTF9URVJNSU5BTF9QUk9DRVNTSU5HOwotICBpZiAoIShnZXRfdHR5cCAoKS0+ dGkuY19vZmxhZyAmIE9QT1NUKSB8fAotICAgICAgIShnZXRfdHR5cCAoKS0+dGkuY19vZmxhZyAm IE9OTENSKSkKLSAgICBmbGFncyB8PSBESVNBQkxFX05FV0xJTkVfQVVUT19SRVRVUk47Ci0gIGlm IChvdXRwdXRfdG9fcGNvbiAmJiAhZmFsbGJhY2spCi0gICAgewotICAgICAgR2V0Q29uc29sZU1v ZGUgKGdldF9vdXRwdXRfaGFuZGxlICgpLCAmZHdNb2RlKTsKLSAgICAgIFNldENvbnNvbGVNb2Rl IChnZXRfb3V0cHV0X2hhbmRsZSAoKSwgZHdNb2RlIHwgZmxhZ3MpOwotICAgIH0KLSAgSEFORExF IHRvID0gKG91dHB1dF90b19wY29uICYmICFmYWxsYmFjaykgPwotICAgIGdldF9vdXRwdXRfaGFu ZGxlICgpIDogZ2V0X291dHB1dF9oYW5kbGVfY3lnICgpOwotICBhY3F1aXJlX291dHB1dF9tdXRl eCAoSU5GSU5JVEUpOwotICBpZiAoIXByb2Nlc3Nfb3Bvc3Rfb3V0cHV0ICh0bywgYnVmLCBubGVu LCBmYWxzZSkpCisgIGlmICghcHJvY2Vzc19vcG9zdF9vdXRwdXQgKGdldF9vdXRwdXRfaGFuZGxl X2N5ZyAoKSwgcHRyLCB0b3dyaXRlLCBmYWxzZSkpCiAgICAgewogICAgICAgRFdPUkQgZXJyID0g R2V0TGFzdEVycm9yICgpOwogICAgICAgdGVybWlvc19wcmludGYgKCJXcml0ZUZpbGUgZmFpbGVk LCAlRSIpOwpAQCAtMTU1NywyMCArNzkzLDYgQEAgZmhhbmRsZXJfcHR5X3NsYXZlOjp3cml0ZSAo Y29uc3Qgdm9pZCAqcHRyLCBzaXplX3QgbGVuKQogICAgICAgdG93cml0ZSA9IC0xOwogICAgIH0K ICAgcmVsZWFzZV9vdXRwdXRfbXV0ZXggKCk7Ci0gIG1iX3N0cl9mcmVlIChidWYpOwotICBmbGFn cyA9IEVOQUJMRV9WSVJUVUFMX1RFUk1JTkFMX1BST0NFU1NJTkc7Ci0gIGlmIChvdXRwdXRfdG9f cGNvbiAmJiAhZmFsbGJhY2spCi0gICAgU2V0Q29uc29sZU1vZGUgKGdldF9vdXRwdXRfaGFuZGxl ICgpLCBkd01vZGUgfCBmbGFncyk7Ci0KLSAgcmVzdG9yZV9yZWF0dGFjaF9wY29uICgpOwotCi0g IC8qIFB1c2ggc2xhdmUgb3V0cHV0IHRvIHBzZXVkbyBjb25zb2xlIHNjcmVlbiBidWZmZXIgKi8K LSAgaWYgKGdldF9wc2V1ZG9fY29uc29sZSAoKSkKLSAgICB7Ci0gICAgICBhY3F1aXJlX291dHB1 dF9tdXRleCAoSU5GSU5JVEUpOwotICAgICAgcHVzaF90b19wY29uX3NjcmVlbmJ1ZmZlciAoKGNo YXIgKilwdHIsIGxlbiwgZmFsc2UpOwotICAgICAgcmVsZWFzZV9vdXRwdXRfbXV0ZXggKCk7Ci0g ICAgfQogCiAgIHJldHVybiB0b3dyaXRlOwogfQpAQCAtMTU4MiwxNiArODA0LDE1IEBAIGZoYW5k bGVyX3B0eV9zbGF2ZTo6bWFza19zd2l0Y2hfdG9fcGNvbl9pbiAoYm9vbCBtYXNrKQogfQogCiBi b29sCi1maGFuZGxlcl9wdHlfY29tbW9uOjp0b19iZV9yZWFkX2Zyb21fcGNvbiAodm9pZCkKK2Zo YW5kbGVyX3B0eV9tYXN0ZXI6OnRvX2JlX3JlYWRfZnJvbV9wY29uICh2b2lkKQogewotICByZXR1 cm4gIWdldF90dHlwICgpLT5wY29uX2luX2VtcHR5IHx8Ci0gICAgKGdldF90dHlwICgpLT5zd2l0 Y2hfdG9fcGNvbl9pbiAmJiAhZ2V0X3R0eXAgKCktPm1hc2tfc3dpdGNoX3RvX3Bjb25faW4pOwor ICByZXR1cm4gZ2V0X3R0eXAgKCktPnBjb25fc3RhcnQKKyAgICB8fCAoZ2V0X3R0eXAgKCktPnN3 aXRjaF90b19wY29uX2luICYmICFnZXRfdHR5cCAoKS0+bWFza19zd2l0Y2hfdG9fcGNvbl9pbik7 CiB9CiAKIHZvaWQgX19yZWczCiBmaGFuZGxlcl9wdHlfc2xhdmU6OnJlYWQgKHZvaWQgKnB0ciwg c2l6ZV90JiBsZW4pCiB7Ci0gIGNoYXIgKnB0cjAgPSAoY2hhciAqKXB0cjsKICAgc3NpemVfdCB0 b3RhbHJlYWQgPSAwOwogICBpbnQgdm1pbiA9IDA7CiAgIGludCB2dGltZSA9IDA7CS8qIEluaXRp YWxpemVkIHRvIHByZXZlbnQgLVd1bmluaXRpYWxpemVkIHdhcm5pbmcgKi8KQEAgLTE2MTYsOCAr ODM3LDYgQEAgZmhhbmRsZXJfcHR5X3NsYXZlOjpyZWFkICh2b2lkICpwdHIsIHNpemVfdCYgbGVu KQogICAgICAgbWFza19zd2l0Y2hfdG9fcGNvbl9pbiAodHJ1ZSk7CiAgICAgICByZXNldF9zd2l0 Y2hfdG9fcGNvbiAoKTsKICAgICB9Ci0gIGlmICh0b19iZV9yZWFkX2Zyb21fcGNvbiAoKSkKLSAg ICB1cGRhdGVfcGNvbl9pbnB1dF9zdGF0ZSAodHJ1ZSk7CiAKICAgaWYgKGlzX25vbmJsb2NraW5n ICgpIHx8ICFwdHIpIC8qIEluZGljYXRpbmcgdGNmbHVzaCgpLiAqLwogICAgIHRpbWVfdG9fd2Fp dCA9IDA7CkBAIC0xNzAyLDk5ICs5MjEsMjIgQEAgZmhhbmRsZXJfcHR5X3NsYXZlOjpyZWFkICh2 b2lkICpwdHIsIHNpemVfdCYgbGVuKQogCSAgICB7CiAJICAgICAgaWYgKCF0b3RhbHJlYWQpCiAJ CXsKLQkJICBzZXRfc2lnX2Vycm5vIChFQUdBSU4pOwotCQkgIHRvdGFscmVhZCA9IC0xOwotCQl9 Ci0JICAgICAgZ290byBvdXQ7Ci0JICAgIH0KLQkgIGNvbnRpbnVlOwotCWRlZmF1bHQ6Ci0JICB0 ZXJtaW9zX3ByaW50ZiAoIndhaXQgZm9yIGlucHV0IG11dGV4IGZhaWxlZCwgJUUiKTsKLQkgIGlm ICghdG90YWxyZWFkKQotCSAgICB7Ci0JICAgICAgX19zZXRlcnJubyAoKTsKLQkgICAgICB0b3Rh bHJlYWQgPSAtMTsKLQkgICAgfQotCSAgZ290byBvdXQ7Ci0JfQotICAgICAgaWYgKHB0ciAmJiB0 b19iZV9yZWFkX2Zyb21fcGNvbiAoKSkKLQl7Ci0JICBpZiAoZ2V0X3JlYWRhaGVhZF92YWxpZCAo KSkKLQkgICAgewotCSAgICAgIFJlbGVhc2VNdXRleCAoaW5wdXRfbXV0ZXgpOwotCSAgICAgIHRv dGFscmVhZCA9IGdldF9yZWFkYWhlYWRfaW50b19idWZmZXIgKChjaGFyICopIHB0ciwgbGVuKTsK LQkgICAgfQotCSAgZWxzZQotCSAgICB7Ci0JICAgICAgaWYgKCF0cnlfcmVhdHRhY2hfcGNvbiAo KSkKLQkJewotCQkgIHJlc3RvcmVfcmVhdHRhY2hfcGNvbiAoKTsKLQkJICBnb3RvIGRvX3JlYWRf Y3lnOwotCQl9Ci0KLQkgICAgICBEV09SRCBkd01vZGU7Ci0JICAgICAgR2V0Q29uc29sZU1vZGUg KGdldF9oYW5kbGUgKCksICZkd01vZGUpOwotCSAgICAgIERXT1JEIGZsYWdzID0gRU5BQkxFX1ZJ UlRVQUxfVEVSTUlOQUxfSU5QVVQ7Ci0JICAgICAgaWYgKGR3TW9kZSAhPSBmbGFncykKLQkJU2V0 Q29uc29sZU1vZGUgKGdldF9oYW5kbGUgKCksIGZsYWdzKTsKLQkgICAgICAvKiBSZWFkIGdldF9o YW5kbGUoKSBpbnN0YWQgb2YgZ2V0X2hhbmRsZV9jeWcoKSAqLwotCSAgICAgIEJPT0wgKFdJTkFQ SSAqUmVhZEZ1bmMpCi0JCShIQU5ETEUsIExQVk9JRCwgRFdPUkQsIExQRFdPUkQsIExQVk9JRCk7 Ci0JICAgICAgUmVhZEZ1bmMgPSBSZWFkQ29uc29sZUFfT3JpZyA/IFJlYWRDb25zb2xlQV9Pcmln IDogUmVhZENvbnNvbGVBOwotCSAgICAgIERXT1JEIHJsZW47Ci0JICAgICAgcmVhZGxlbiA9IE1J TiAobGVuLCBzaXplb2YgKGJ1ZikpOwotCSAgICAgIGlmICghUmVhZEZ1bmMgKGdldF9oYW5kbGUg KCksIGJ1ZiwgcmVhZGxlbiwgJnJsZW4sIE5VTEwpKQotCQl7Ci0JCSAgdGVybWlvc19wcmludGYg KCJyZWFkIGZhaWxlZCwgJUUiKTsKLQkJICBTZXRDb25zb2xlTW9kZSAoZ2V0X2hhbmRsZSAoKSwg ZHdNb2RlKTsKLQkJICByZXN0b3JlX3JlYXR0YWNoX3Bjb24gKCk7Ci0JCSAgUmVsZWFzZU11dGV4 IChpbnB1dF9tdXRleCk7Ci0JCSAgc2V0X2Vycm5vIChFSU8pOwotCQkgIHRvdGFscmVhZCA9IC0x OwotCQkgIGdvdG8gb3V0OwotCQl9Ci0JICAgICAgU2V0Q29uc29sZU1vZGUgKGdldF9oYW5kbGUg KCksIGR3TW9kZSk7Ci0JICAgICAgcmVzdG9yZV9yZWF0dGFjaF9wY29uICgpOwotCSAgICAgIFJl bGVhc2VNdXRleCAoaW5wdXRfbXV0ZXgpOwotCi0JICAgICAgc3NpemVfdCBubGVuOwotCSAgICAg IGNoYXIgKm5idWYgPSBjb252ZXJ0X21iX3N0ciAoZ2V0X3R0eXAgKCktPnRlcm1fY29kZV9wYWdl LAotCQkJICAgICAoc2l6ZV90ICopICZubGVuLCBHZXRDb25zb2xlQ1AgKCksIGJ1Ziwgcmxlbik7 Ci0KLQkgICAgICBzc2l6ZV90IHJldDsKLQkgICAgICBsaW5lX2VkaXRfc3RhdHVzIHJlcyA9Ci0J CWxpbmVfZWRpdCAobmJ1ZiwgbmxlbiwgZ2V0X3R0eXAgKCktPnRpLCAmcmV0KTsKLQotCSAgICAg IG1iX3N0cl9mcmVlIChuYnVmKTsKLQotCSAgICAgIGlmIChyZXMgPT0gbGluZV9lZGl0X2lucHV0 X2RvbmUgfHwgcmVzID09IGxpbmVfZWRpdF9vaykKLQkJdG90YWxyZWFkID0gZ2V0X3JlYWRhaGVh ZF9pbnRvX2J1ZmZlciAoKGNoYXIgKikgcHRyLCBsZW4pOwotCSAgICAgIGVsc2UgaWYgKHJlcyA+ IGxpbmVfZWRpdF9zaWduYWxsZWQpCi0JCXsKLQkJICBzZXRfc2lnX2Vycm5vIChFSU5UUik7CisJ CSAgc2V0X3NpZ19lcnJubyAoRUFHQUlOKTsKIAkJICB0b3RhbHJlYWQgPSAtMTsKIAkJfQotCSAg ICAgIGVsc2UKLQkJewotCQkgIHVwZGF0ZV9wY29uX2lucHV0X3N0YXRlICh0cnVlKTsKLQkJICBj b250aW51ZTsKLQkJfQorCSAgICAgIGdvdG8gb3V0OworCSAgICB9CisJICBjb250aW51ZTsKKwlk ZWZhdWx0OgorCSAgdGVybWlvc19wcmludGYgKCJ3YWl0IGZvciBpbnB1dCBtdXRleCBmYWlsZWQs ICVFIik7CisJICBpZiAoIXRvdGFscmVhZCkKKwkgICAgeworCSAgICAgIF9fc2V0ZXJybm8gKCk7 CisJICAgICAgdG90YWxyZWFkID0gLTE7CiAJICAgIH0KLQotCSAgdXBkYXRlX3Bjb25faW5wdXRf c3RhdGUgKHRydWUpOwotCSAgbWFza19zd2l0Y2hfdG9fcGNvbl9pbiAoZmFsc2UpOwogCSAgZ290 byBvdXQ7CiAJfQotICAgICAgaWYgKCFwdHIgJiYgbGVuID09IFVJTlRfTUFYICYmICFnZXRfdHR5 cCAoKS0+cGNvbl9pbl9lbXB0eSkKLQl7Ci0JICBGbHVzaENvbnNvbGVJbnB1dEJ1ZmZlciAoZ2V0 X2hhbmRsZSAoKSk7Ci0JICBnZXRfdHR5cCAoKS0+cGNvbl9pbl9lbXB0eSA9IHRydWU7Ci0JICBE V09SRCBuOwotCSAgaWYgKGJ5dGVzX2F2YWlsYWJsZSAobikgJiYgbiA9PSAwKQotCSAgICBSZXNl dEV2ZW50IChpbnB1dF9hdmFpbGFibGVfZXZlbnQpOwotCX0KIAotZG9fcmVhZF9jeWc6CiAgICAg ICBpZiAoIWJ5dGVzX2F2YWlsYWJsZSAoYnl0ZXNfaW5fcGlwZSkpCiAJewogCSAgUmVsZWFzZU11 dGV4IChpbnB1dF9tdXRleCk7CkBAIC0xOTExLDE2ICsxMDUzLDYgQEAgZG9fcmVhZF9jeWc6CiBv dXQ6CiAgIHRlcm1pb3NfcHJpbnRmICgiJWQgPSByZWFkKCVwLCAlbHUpIiwgdG90YWxyZWFkLCBw dHIsIGxlbik7CiAgIGxlbiA9IChzaXplX3QpIHRvdGFscmVhZDsKLSAgLyogUHVzaCBzbGF2ZSBy ZWFkIGFzIGVjaG8gdG8gcHNldWRvIGNvbnNvbGUgc2NyZWVuIGJ1ZmZlci4gKi8KLSAgaWYgKGdl dF9wc2V1ZG9fY29uc29sZSAoKSAmJiBwdHIwICYmIHRvdGFscmVhZCA+IDAgJiYKLSAgICAgIChn ZXRfdHR5cCAoKS0+dGkuY19sZmxhZyAmIEVDSE8pKQotICAgIHsKLSAgICAgIGFjcXVpcmVfb3V0 cHV0X211dGV4IChJTkZJTklURSk7Ci0gICAgICBwdXNoX3RvX3Bjb25fc2NyZWVuYnVmZmVyIChw dHIwLCBsZW4sIHRydWUpOwotICAgICAgaWYgKGdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9v dXQpCi0JdHJpZ2dlcl9yZWRyYXdfc2NyZWVuICgpOwotICAgICAgcmVsZWFzZV9vdXRwdXRfbXV0 ZXggKCk7Ci0gICAgfQogICBtYXNrX3N3aXRjaF90b19wY29uX2luIChmYWxzZSk7CiB9CiAKQEAg LTIwNjEsMzggKzExOTMsMTEgQEAgZmhhbmRsZXJfcHR5X3NsYXZlOjppb2N0bCAodW5zaWduZWQg aW50IGNtZCwgdm9pZCAqYXJnKQogICAgICAgZ2V0X3R0eXAgKCktPndpbnNpemUgPSBnZXRfdHR5 cCAoKS0+YXJnLndpbnNpemU7CiAgICAgICBicmVhazsKICAgICBjYXNlIFRJT0NTV0lOU1o6Ci0g ICAgICBpZiAoZ2V0X3BzZXVkb19jb25zb2xlICgpKQotCXsKLQkgIC8qIElmIG5vdCBhdHRhY2hl ZCB0byB0aGlzIHBzZXVkbyBjb25zb2xlLAotCSAgICAgdHJ5IHRvIGF0dGFjaCB0ZW1wb3Jhcmls eS4gKi8KLQkgIHBpZF9yZXN0b3JlID0gMDsKLQkgIGlmIChwY29uX2F0dGFjaGVkX3RvICE9IGdl dF9taW5vciAoKSkKLQkgICAgaWYgKCF0cnlfcmVhdHRhY2hfcGNvbiAoKSkKLQkgICAgICBnb3Rv IGNsZWFudXA7Ci0KLQkgIENPT1JEIHNpemU7Ci0JICBzaXplLlggPSAoKHN0cnVjdCB3aW5zaXpl ICopIGFyZyktPndzX2NvbDsKLQkgIHNpemUuWSA9ICgoc3RydWN0IHdpbnNpemUgKikgYXJnKS0+ d3Nfcm93OwotCSAgQ09OU09MRV9TQ1JFRU5fQlVGRkVSX0lORk8gY3NiaTsKLQkgIGlmIChHZXRD b25zb2xlU2NyZWVuQnVmZmVySW5mbyAoZ2V0X291dHB1dF9oYW5kbGUgKCksICZjc2JpKSkKLQkg ICAgaWYgKHNpemUuWCA9PSBjc2JpLnNyV2luZG93LlJpZ2h0IC0gY3NiaS5zcldpbmRvdy5MZWZ0 ICsgMSAmJgotCQlzaXplLlkgPT0gY3NiaS5zcldpbmRvdy5Cb3R0b20gLSBjc2JpLnNyV2luZG93 LlRvcCArIDEpCi0JICAgICAgZ290byBjbGVhbnVwOwotCSAgaWYgKCFTZXRDb25zb2xlU2NyZWVu QnVmZmVyU2l6ZSAoZ2V0X291dHB1dF9oYW5kbGUgKCksIHNpemUpKQotCSAgICBnb3RvIGNsZWFu dXA7Ci0JICBTTUFMTF9SRUNUIHJlY3Q7Ci0JICByZWN0LkxlZnQgPSAwOwotCSAgcmVjdC5Ub3Ag PSAwOwotCSAgcmVjdC5SaWdodCA9IHNpemUuWC0xOwotCSAgcmVjdC5Cb3R0b20gPSBzaXplLlkt MTsKLQkgIFNldENvbnNvbGVXaW5kb3dJbmZvIChnZXRfb3V0cHV0X2hhbmRsZSAoKSwgVFJVRSwg JnJlY3QpOwotY2xlYW51cDoKLQkgIHJlc3RvcmVfcmVhdHRhY2hfcGNvbiAoKTsKLQl9Ci0KICAg ICAgIGlmIChnZXRfdHR5cCAoKS0+d2luc2l6ZS53c19yb3cgIT0gKChzdHJ1Y3Qgd2luc2l6ZSAq KSBhcmcpLT53c19yb3cKIAkgIHx8IGdldF90dHlwICgpLT53aW5zaXplLndzX2NvbCAhPSAoKHN0 cnVjdCB3aW5zaXplICopIGFyZyktPndzX2NvbCkKIAl7CisJICBpZiAoZ2V0X3R0eXAgKCktPmhf cHNldWRvX2NvbnNvbGUgJiYgZ2V0X3R0eXAgKCktPnBjb25fcGlkKQorCSAgICByZXNpemVfcHNl dWRvX2NvbnNvbGUgKChzdHJ1Y3Qgd2luc2l6ZSAqKSBhcmcpOwogCSAgZ2V0X3R0eXAgKCktPmFy Zy53aW5zaXplID0gKihzdHJ1Y3Qgd2luc2l6ZSAqKSBhcmc7CiAJICBnZXRfdHR5cCAoKS0+d2lu c2l6ZSA9ICooc3RydWN0IHdpbnNpemUgKikgYXJnOwogCSAgZ2V0X3R0eXAgKCktPmtpbGxfcGdy cCAoU0lHV0lOQ0gpOwpAQCAtMjM3OCw2ICsxNDgzLDI3IEBAIGZoYW5kbGVyX3B0eV9jb21tb246 OmNsb3NlICgpCiAgIHJldHVybiAwOwogfQogCit2b2lkCitmaGFuZGxlcl9wdHlfY29tbW9uOjpy ZXNpemVfcHNldWRvX2NvbnNvbGUgKHN0cnVjdCB3aW5zaXplICp3cykKK3sKKyAgQ09PUkQgc2l6 ZTsKKyAgc2l6ZS5YID0gd3MtPndzX2NvbDsKKyAgc2l6ZS5ZID0gd3MtPndzX3JvdzsKKyAgcGlu Zm8gcCAoZ2V0X3R0eXAgKCktPnBjb25fcGlkKTsKKyAgaWYgKHApCisgICAgeworICAgICAgSFBD T05fSU5URVJOQUwgaHBjb25fbG9jYWw7CisgICAgICBIQU5ETEUgcGNvbl9vd25lciA9CisJT3Bl blByb2Nlc3MgKFBST0NFU1NfRFVQX0hBTkRMRSwgRkFMU0UsIHAtPmV4ZWNfZHdQcm9jZXNzSWQp OworICAgICAgRHVwbGljYXRlSGFuZGxlIChwY29uX293bmVyLCBnZXRfdHR5cCAoKS0+aF9wY29u X3dyaXRlX3BpcGUsCisJCSAgICAgICBHZXRDdXJyZW50UHJvY2VzcyAoKSwgJmhwY29uX2xvY2Fs LmhXcml0ZVBpcGUsCisJCSAgICAgICAwLCBUUlVFLCBEVVBMSUNBVEVfU0FNRV9BQ0NFU1MpOwor ICAgICAgUmVzaXplUHNldWRvQ29uc29sZSAoKEhQQ09OKSAmaHBjb25fbG9jYWwsIHNpemUpOwor ICAgICAgQ2xvc2VIYW5kbGUgKHBjb25fb3duZXIpOworICAgICAgQ2xvc2VIYW5kbGUgKGhwY29u X2xvY2FsLmhXcml0ZVBpcGUpOworICAgIH0KK30KKwogdm9pZAogZmhhbmRsZXJfcHR5X21hc3Rl cjo6Y2xlYW51cCAoKQogewpAQCAtMjM5Myw3ICsxNTE5LDYgQEAgZmhhbmRsZXJfcHR5X21hc3Rl cjo6Y2xvc2UgKCkKIHsKICAgT0JKRUNUX0JBU0lDX0lORk9STUFUSU9OIG9iaTsKICAgTlRTVEFU VVMgc3RhdHVzOwotICBwaWRfdCBtYXN0ZXJfcGlkX3RtcCA9IGdldF90dHlwICgpLT5tYXN0ZXJf cGlkOwogCiAgIHRlcm1pb3NfcHJpbnRmICgiY2xvc2luZyBmcm9tX21hc3RlciglcCkvZnJvbV9t YXN0ZXJfY3lnKCVwKS90b19tYXN0ZXIoJXApL3RvX21hc3Rlcl9jeWcoJXApIHNpbmNlIHdlIG93 biB0aGVtKCV1KSIsCiAJCSAgZnJvbV9tYXN0ZXIsIGZyb21fbWFzdGVyX2N5ZywKQEAgLTI0Mzgs MzAgKzE1NjMsNiBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjpjbG9zZSAoKQogICBlbHNlIGlmIChv YmkuSGFuZGxlQ291bnQgPT0gMSkKICAgICB7CiAgICAgICB0ZXJtaW9zX3ByaW50ZiAoIkNsb3Np bmcgbGFzdCBtYXN0ZXIgb2YgcHR5JWQiLCBnZXRfbWlub3IgKCkpOwotICAgICAgLyogQ2xvc2Ug UHNldWRvIENvbnNvbGUgKi8KLSAgICAgIGlmIChnZXRfcHNldWRvX2NvbnNvbGUgKCkpCi0Jewot CSAgLyogVGVybWluYXRlIGhlbHBlciBwcm9jZXNzICovCi0JICBTZXRFdmVudCAoZ2V0X3R0eXAg KCktPmhfaGVscGVyX2dvb2RieWUpOwotCSAgV2FpdEZvclNpbmdsZU9iamVjdCAoZ2V0X3R0eXAg KCktPmhfaGVscGVyX3Byb2Nlc3MsIElORklOSVRFKTsKLQkgIENsb3NlSGFuZGxlIChnZXRfdHR5 cCAoKS0+aF9oZWxwZXJfZ29vZGJ5ZSk7Ci0JICBDbG9zZUhhbmRsZSAoZ2V0X3R0eXAgKCktPmhf aGVscGVyX3Byb2Nlc3MpOwotCSAgLyogRklYTUU6IFBzZXVkbyBjb25zb2xlIGNhbiBiZSBhY2Nl c3NlZCB2aWEgaXRzIGhhbmRsZQotCSAgICAgb25seSBpbiB0aGUgcHJvY2VzcyB3aGljaCBjcmVh dGVkIGl0LiBXaGF0IGVsc2UgY2FuIHdlIGRvPyAqLwotCSAgaWYgKG1hc3Rlcl9waWRfdG1wID09 IG15c2VsZi0+cGlkKQotCSAgICB7Ci0JICAgICAgLyogQ2xvc2VQc2V1ZG9Db25zb2xlKCkgc2Vl bXMgdG8gaGF2ZSBhIGJ1ZyB0aGF0IG9uZQotCQkgaW50ZXJuYWwgaGFuZGxlIHJlbWFpbnMgb3Bl bmVkLiBUaGlzIGNhdXNlcyBoYW5kbGUgbGVhay4KLQkJIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZv ciB0aGlzIHByb2JsZW0uICovCi0JICAgICAgSFBDT05fSU5URVJOQUwgKmhwID0gKEhQQ09OX0lO VEVSTkFMICopIGdldF9wc2V1ZG9fY29uc29sZSAoKTsKLQkgICAgICBIQU5ETEUgdG1wID0gaHAt PmhDb25Ib3N0UHJvY2VzczsKLQkgICAgICAvKiBSZWxlYXNlIHBzZXVkbyBjb25zb2xlICovCi0J ICAgICAgQ2xvc2VQc2V1ZG9Db25zb2xlIChnZXRfcHNldWRvX2NvbnNvbGUgKCkpOwotCSAgICAg IENsb3NlSGFuZGxlICh0bXApOwotCSAgICB9Ci0JICBnZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bj b25faW4gPSBmYWxzZTsKLQkgIGdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9vdXQgPSBmYWxz ZTsKLQl9CiAgICAgICBpZiAoZ2V0X3R0eXAgKCktPmdldHNpZCAoKSA+IDApCiAJa2lsbCAoZ2V0 X3R0eXAgKCktPmdldHNpZCAoKSwgU0lHSFVQKTsKICAgICAgIFNldEV2ZW50IChpbnB1dF9hdmFp bGFibGVfZXZlbnQpOwpAQCAtMjQ2OSw5ICsxNTcwLDggQEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6 Y2xvc2UgKCkKIAogICBpZiAoIUZvcmNlQ2xvc2VIYW5kbGUgKGZyb21fbWFzdGVyKSkKICAgICB0 ZXJtaW9zX3ByaW50ZiAoImVycm9yIGNsb3NpbmcgZnJvbV9tYXN0ZXIgJXAsICVFIiwgZnJvbV9t YXN0ZXIpOwotICBpZiAoZnJvbV9tYXN0ZXJfY3lnICE9IGZyb21fbWFzdGVyKSAvKiBBdm9pZCBk b3VibGUgY2xvc2UuICovCi0gICAgaWYgKCFGb3JjZUNsb3NlSGFuZGxlIChmcm9tX21hc3Rlcl9j eWcpKQotICAgICAgdGVybWlvc19wcmludGYgKCJlcnJvciBjbG9zaW5nIGZyb21fbWFzdGVyX2N5 ZyAlcCwgJUUiLCBmcm9tX21hc3Rlcl9jeWcpOworICBpZiAoIUZvcmNlQ2xvc2VIYW5kbGUgKGZy b21fbWFzdGVyX2N5ZykpCisgICAgdGVybWlvc19wcmludGYgKCJlcnJvciBjbG9zaW5nIGZyb21f bWFzdGVyX2N5ZyAlcCwgJUUiLCBmcm9tX21hc3Rlcl9jeWcpOwogICBpZiAoIUZvcmNlQ2xvc2VI YW5kbGUgKHRvX21hc3RlcikpCiAgICAgdGVybWlvc19wcmludGYgKCJlcnJvciBjbG9zaW5nIHRv X21hc3RlciAlcCwgJUUiLCB0b19tYXN0ZXIpOwogICBmcm9tX21hc3RlciA9IHRvX21hc3RlciA9 IE5VTEw7CkBAIC0yNTEzLDcgKzE2MTMsNyBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjp3cml0ZSAo Y29uc3Qgdm9pZCAqcHRyLCBzaXplX3QgbGVuKQogCiAgIC8qIFdyaXRlIHRlcm1pbmFsIGlucHV0 IHRvIHRvX3NsYXZlIHBpcGUgaW5zdGVhZCBvZiBvdXRwdXRfaGFuZGxlCiAgICAgIGlmIGN1cnJl bnQgYXBwbGljYXRpb24gaXMgbmF0aXZlIGNvbnNvbGUgYXBwbGljYXRpb24uICovCi0gIGlmICh0 b19iZV9yZWFkX2Zyb21fcGNvbiAoKSkKKyAgaWYgKHRvX2JlX3JlYWRfZnJvbV9wY29uICgpICYm IGdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xlKQogICAgIHsKICAgICAgIHNpemVfdCBubGVu OwogICAgICAgY2hhciAqYnVmID0gY29udmVydF9tYl9zdHIKQEAgLTI1MjEsNDAgKzE2MjEsNTAg QEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6d3JpdGUgKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IGxl bikKIAogICAgICAgV2FpdEZvclNpbmdsZU9iamVjdCAoaW5wdXRfbXV0ZXgsIElORklOSVRFKTsK IAotICAgICAgaWYgKG1lbWNociAoYnVmLCAnXDAwMycsIG5sZW4pKSAvKiBeQyBpbnRyIGtleSBp biBwY29uICovCi0JZ2V0X3R0eXAgKCktPnJlcV9mbHVzaF9wY29uX2lucHV0ID0gdHJ1ZTsKLQog ICAgICAgRFdPUkQgd0xlbjsKLSAgICAgIFdyaXRlRmlsZSAodG9fc2xhdmUsIGJ1Ziwgbmxlbiwg JndMZW4sIE5VTEwpOwotICAgICAgZ2V0X3R0eXAgKCktPnBjb25faW5fZW1wdHkgPSBmYWxzZTsK LQotICAgICAgUmVsZWFzZU11dGV4IChpbnB1dF9tdXRleCk7CiAKLSAgICAgIC8qIFVzZSBsaW5l X2VkaXQgKCkgaW4gb3JkZXIgdG8gc2V0IGlucHV0X2F2YWlsYWJsZV9ldmVudC4gKi8KLSAgICAg IGJvb2wgaXNfZWNobyA9IHRjICgpLT50aS5jX2xmbGFnICYgRUNITzsKLSAgICAgIGlmICghZ2V0 X3R0eXAgKCktPm1hc2tfc3dpdGNoX3RvX3Bjb25faW4pCisgICAgICBpZiAoZ2V0X3R0eXAgKCkt PnBjb25fc3RhcnQpCiAJewotCSAgdGMgKCktPnRpLmNfbGZsYWcgJj0gfkVDSE87Ci0JICB0aS5j X2xmbGFnICY9IH5FQ0hPOwotCX0KLSAgICAgIHRpLmNfbGZsYWcgJj0gfklTSUc7Ci0gICAgICBs aW5lX2VkaXQgKGJ1ZiwgbmxlbiwgdGksICZyZXQpOwotICAgICAgaWYgKGlzX2VjaG8pCi0JdGMg KCktPnRpLmNfbGZsYWcgfD0gRUNITzsKLSAgICAgIGdldF90dHlwICgpLT5yZWFkX3JldHZhbCA9 IDE7Ci0KLSAgICAgIGNvbnN0IGNoYXIgc2lnc1tdID0gewotCShjaGFyKSB0aS5jX2NjW1ZJTlRS XSwKLQkoY2hhcikgdGkuY19jY1tWUVVJVF0sCi0JKGNoYXIpIHRpLmNfY2NbVlNVU1BdLAotICAg ICAgfTsKLSAgICAgIGlmICh0YyAoKS0+dGkuY19sZmxhZyAmIElTSUcpCi0JZm9yIChzaXplX3Qg aT0wOyBpPHNpemVvZiAoc2lncyk7IGkrKykKLQkgIGlmIChzaWdzW2ldICYmIG1lbWNociAoYnVm LCBzaWdzW2ldLCBubGVuKSkKKwkgIC8qIFBzZXVkbyBjb25kb2xlIHN1cHBvcnQgdXNlcyAiQ1NJ Nm4iIHRvIGdldCBjdXJzb3IgcG9zaXRpb24uCisJICAgICBJZiB0aGUgcmVwbHkgZm9yICJDU0k2 biIgaXMgZGl2aWRlZCBpbnRvIG11bHRpcGxlIHdyaXRlcywKKwkgICAgIHBzZXVkbyBjb25zb2xl IHNvbWV0aW1lcyBkb2VzIG5vdCByZWNvZ25pemUgaXQuICBUaGVyZWZvcmUsCisJICAgICBwdXQg dGhlbSB0b2dldGhlciBpbnRvIHdwYnVmIGFuZCB3cml0ZSBhbGwgYXQgb25jZS4gKi8KKwkgIHN0 YXRpYyBjb25zdCBpbnQgd3BidWZfbGVuID0gNjQ7CisJICBzdGF0aWMgY2hhciB3cGJ1Zlt3cGJ1 Zl9sZW5dOworCSAgc3RhdGljIGludCBpeHB1dCA9IDA7CisKKwkgIGlmIChpeHB1dCA9PSAwICYm IGJ1ZlswXSAhPSAnXDAzMycpCisJICAgIHsgLyogZmFpbC1zYWZlICovCisJICAgICAgV3JpdGVG aWxlICh0b19zbGF2ZSwgIlwwMzNbMTsxUiIsIDYsICZ3TGVuLCBOVUxMKTsgLyogZHVtbXkgKi8K KwkgICAgICBnZXRfdHR5cCAoKS0+cGNvbl9zdGFydCA9IGZhbHNlOworCSAgICB9CisJICBlbHNl CiAJICAgIHsKLQkgICAgICBlYXRfcmVhZGFoZWFkICgtMSk7Ci0JICAgICAgU2V0RXZlbnQgKGlu cHV0X2F2YWlsYWJsZV9ldmVudCk7CisJICAgICAgaWYgKGl4cHV0ICsgbmxlbiA8IHdwYnVmX2xl bikKKwkJZm9yIChzaXplX3QgaT0wOyBpPG5sZW47IGkrKykKKwkJICB3cGJ1ZltpeHB1dCsrXSA9 IGJ1ZltpXTsKKwkgICAgICBlbHNlCisJCXsKKwkJICBXcml0ZUZpbGUgKHRvX3NsYXZlLCB3cGJ1 ZiwgaXhwdXQsICZ3TGVuLCBOVUxMKTsKKwkJICBpeHB1dCA9IDA7CisJCSAgZ2V0X3R0eXAgKCkt PnBjb25fc3RhcnQgPSBmYWxzZTsKKwkJICBXcml0ZUZpbGUgKHRvX3NsYXZlLCBidWYsIG5sZW4s ICZ3TGVuLCBOVUxMKTsKKwkJfQorCSAgICAgIGlmIChpeHB1dCAmJiBtZW1jaHIgKHdwYnVmLCAn UicsIGl4cHV0KSkKKwkJeworCQkgIFdyaXRlRmlsZSAodG9fc2xhdmUsIHdwYnVmLCBpeHB1dCwg JndMZW4sIE5VTEwpOworCQkgIGl4cHV0ID0gMDsKKwkJICBnZXRfdHR5cCAoKS0+cGNvbl9zdGFy dCA9IGZhbHNlOworCQl9CisJICAgICAgUmVsZWFzZU11dGV4IChpbnB1dF9tdXRleCk7CisJICAg ICAgbWJfc3RyX2ZyZWUgKGJ1Zik7CisJICAgICAgcmV0dXJuIGxlbjsKIAkgICAgfQorCX0KKwor ICAgICAgV3JpdGVGaWxlICh0b19zbGF2ZSwgYnVmLCBubGVuLCAmd0xlbiwgTlVMTCk7CisKKyAg ICAgIFJlbGVhc2VNdXRleCAoaW5wdXRfbXV0ZXgpOwogCiAgICAgICBtYl9zdHJfZnJlZSAoYnVm KTsKICAgICAgIHJldHVybiBsZW47CkBAIC0yNjMwLDE1ICsxNzQwLDggQEAgZmhhbmRsZXJfcHR5 X21hc3Rlcjo6aW9jdGwgKHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKICAgICAgIGlmIChn ZXRfdHR5cCAoKS0+d2luc2l6ZS53c19yb3cgIT0gKChzdHJ1Y3Qgd2luc2l6ZSAqKSBhcmcpLT53 c19yb3cKIAkgIHx8IGdldF90dHlwICgpLT53aW5zaXplLndzX2NvbCAhPSAoKHN0cnVjdCB3aW5z aXplICopIGFyZyktPndzX2NvbCkKIAl7Ci0JICAvKiBGSVhNRTogUHNldWRvIGNvbnNvbGUgY2Fu IGJlIGFjY2Vzc2VkIHZpYSBpdHMgaGFuZGxlCi0JICAgICBvbmx5IGluIHRoZSBwcm9jZXNzIHdo aWNoIGNyZWF0ZWQgaXQuIFdoYXQgZWxzZSBjYW4gd2UgZG8/ICovCi0JICBpZiAoZ2V0X3BzZXVk b19jb25zb2xlICgpICYmIGdldF90dHlwICgpLT5tYXN0ZXJfcGlkID09IG15c2VsZi0+cGlkKQot CSAgICB7Ci0JICAgICAgQ09PUkQgc2l6ZTsKLQkgICAgICBzaXplLlggPSAoKHN0cnVjdCB3aW5z aXplICopIGFyZyktPndzX2NvbDsKLQkgICAgICBzaXplLlkgPSAoKHN0cnVjdCB3aW5zaXplICop IGFyZyktPndzX3JvdzsKLQkgICAgICBSZXNpemVQc2V1ZG9Db25zb2xlIChnZXRfcHNldWRvX2Nv bnNvbGUgKCksIHNpemUpOwotCSAgICB9CisJICBpZiAoZ2V0X3R0eXAgKCktPmhfcHNldWRvX2Nv bnNvbGUgJiYgZ2V0X3R0eXAgKCktPnBjb25fcGlkKQorCSAgICByZXNpemVfcHNldWRvX2NvbnNv bGUgKChzdHJ1Y3Qgd2luc2l6ZSAqKSBhcmcpOwogCSAgZ2V0X3R0eXAgKCktPndpbnNpemUgPSAq KHN0cnVjdCB3aW5zaXplICopIGFyZzsKIAkgIGdldF90dHlwICgpLT5raWxsX3BncnAgKFNJR1dJ TkNIKTsKIAl9CkBAIC0yNzYzLDcgKzE4NjYsNyBAQCBnZXRfbG9jYWxlX2Zyb21fZW52IChjaGFy ICpsb2NhbGUpCiAgIHN0cmNweSAobG9jYWxlLCBlbnYpOwogfQogCi1zdGF0aWMgTENJRAorc3Rh dGljIHZvaWQKIGdldF9sYW5naW5mbyAoY2hhciAqbG9jYWxlX291dCwgY2hhciAqY2hhcnNldF9v dXQpCiB7CiAgIC8qIEdldCBsb2NhbGUgZnJvbSBlbnZpcm9ubWVudCAqLwpAQCAtMjc3NiwxMSAr MTg3OSw2IEBAIGdldF9sYW5naW5mbyAoY2hhciAqbG9jYWxlX291dCwgY2hhciAqY2hhcnNldF9v dXQpCiAgIGlmICghbG9jYWxlKQogICAgIGxvY2FsZSA9ICJDIjsKIAotICBjaGFyIHRtcF9sb2Nh bGVbRU5DT0RJTkdfTEVOICsgMV07Ci0gIGNoYXIgKnJldCA9IF9fc2V0X2xvY2FsZV9mcm9tX2xv Y2FsZV9hbGlhcyAobG9jYWxlLCB0bXBfbG9jYWxlKTsKLSAgaWYgKHJldCkKLSAgICBsb2NhbGUg PSB0bXBfbG9jYWxlOwotCiAgIGNvbnN0IGNoYXIgKmNoYXJzZXQ7CiAgIHN0cnVjdCBsY19jdHlw ZV9UICpsY19jdHlwZSA9IChzdHJ1Y3QgbGNfY3R5cGVfVCAqKSBsb2MubGNfY2F0W0xDX0NUWVBF XS5wdHI7CiAgIGlmICghbGNfY3R5cGUpCkBAIC0yODMwLDIzICsxOTI4LDkgQEAgZ2V0X2xhbmdp bmZvIChjaGFyICpsb2NhbGVfb3V0LCBjaGFyICpjaGFyc2V0X291dCkKICAgICAgIGNoYXJzZXQg PSAiQ1A5MzIiOwogICAgIH0KIAotICB3Y2hhcl90IGxjW0VOQ09ESU5HX0xFTiArIDFdOwotICB3 Y2hhcl90ICpwOwotICBtYnN0b3djcyAobGMsIGxvY2FsZSwgRU5DT0RJTkdfTEVOKTsKLSAgcCA9 IHdjc2NociAobGMsIEwnLicpOwotICBpZiAocCkKLSAgICAqcCA9IEwnXDAnOwotICBwID0gd2Nz Y2hyIChsYywgTCdfJyk7Ci0gIGlmIChwKQotICAgICpwID0gTCctJzsKLSAgTENJRCBsY2lkID0g TG9jYWxlTmFtZVRvTENJRCAobGMsIDApOwotICBpZiAoIWxjaWQgJiYgIXN0cmNtcCAoY2hhcnNl dCwgIkFTQ0lJIikpCi0gICAgcmV0dXJuIDA7Ci0KICAgLyogU2V0IHJlc3VsdHMgKi8KICAgc3Ry Y3B5IChsb2NhbGVfb3V0LCBuZXdfbG9jYWxlKTsKICAgc3RyY3B5IChjaGFyc2V0X291dCwgY2hh cnNldCk7Ci0gIHJldHVybiBsY2lkOwogfQogCiB2b2lkCkBAIC0yODU0LDIxICsxOTM4LDcgQEAg ZmhhbmRsZXJfcHR5X3NsYXZlOjpzZXR1cF9sb2NhbGUgKHZvaWQpCiB7CiAgIGNoYXIgbG9jYWxl W0VOQ09ESU5HX0xFTiArIDFdID0gIkMiOwogICBjaGFyIGNoYXJzZXRbRU5DT0RJTkdfTEVOICsg MV0gPSAiQVNDSUkiOwotICBMQ0lEIGxjaWQgPSBnZXRfbGFuZ2luZm8gKGxvY2FsZSwgY2hhcnNl dCk7Ci0KLSAgLyogU2V0IGNvbnNvbGUgY29kZSBwYWdlIGZvcm0gbG9jYWxlICovCi0gIGlmIChn ZXRfcHNldWRvX2NvbnNvbGUgKCkpCi0gICAgewotICAgICAgVUlOVCBjb2RlX3BhZ2U7Ci0gICAg ICBpZiAobGNpZCA9PSAwIHx8IGxjaWQgPT0gKExDSUQpIC0xKQotCWNvZGVfcGFnZSA9IDIwMTI3 OyAvKiBBU0NJSSAqLwotICAgICAgZWxzZSBpZiAoIUdldExvY2FsZUluZm8gKGxjaWQsCi0JCQkg ICAgICAgTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UgfCBMT0NBTEVfUkVUVVJOX05VTUJFUiwKLQkJ CSAgICAgICAoY2hhciAqKSAmY29kZV9wYWdlLCBzaXplb2YgKGNvZGVfcGFnZSkpKQotCWNvZGVf cGFnZSA9IDIwMTI3OyAvKiBBU0NJSSAqLwotICAgICAgU2V0Q29uc29sZUNQIChjb2RlX3BhZ2Up OwotICAgICAgU2V0Q29uc29sZU91dHB1dENQIChjb2RlX3BhZ2UpOwotICAgIH0KKyAgZ2V0X2xh bmdpbmZvIChsb2NhbGUsIGNoYXJzZXQpOwogCiAgIC8qIFNldCB0ZXJtaW5hbCBjb2RlIHBhZ2Ug ZnJvbSBsb2NhbGUgKi8KICAgLyogVGhpcyBjb2RlIGlzIGJvcnJvd2VkIGZyb20gbWludHR5OiBj aGFyc2V0LmMgKi8KQEAgLTI4OTYsOTAgKzE5NjYsOSBAQCBmaGFuZGxlcl9wdHlfc2xhdmU6OnNl dHVwX2xvY2FsZSAodm9pZCkKIAl9CiB9CiAKLXZvaWQKLWZoYW5kbGVyX3B0eV9zbGF2ZTo6c2V0 X2ZyZWVjb25zb2xlX29uX2Nsb3NlIChib29sIHZhbCkKLXsKLSAgZnJlZWNvbnNvbGVfb25fY2xv c2UgPSB2YWw7Ci19Ci0KLXZvaWQKLWZoYW5kbGVyX3B0eV9zbGF2ZTo6dHJpZ2dlcl9yZWRyYXdf c2NyZWVuICh2b2lkKQotewotICAvKiBGb3JjaWJseSByZWRyYXcgc2NyZWVuIGJhc2VkIG9uIGNv bnNvbGUgc2NyZWVuIGJ1ZmZlci4gKi8KLSAgLyogVGhlIGZvbGxvd2luZyBjb2RlIHRyaWdnZXJz IHJlZHJhd2luZyB0aGUgc2NyZWVuLiAqLwotICBDT05TT0xFX1NDUkVFTl9CVUZGRVJfSU5GTyBz Ymk7Ci0gIEdldENvbnNvbGVTY3JlZW5CdWZmZXJJbmZvIChnZXRfb3V0cHV0X2hhbmRsZSAoKSwg JnNiaSk7Ci0gIFNNQUxMX1JFQ1QgcmVjdCA9IHswLCAwLAotICAgIChTSE9SVCkgKHNiaS5kd1Np emUuWCAtMSksIChTSE9SVCkgKHNiaS5kd1NpemUuWSAtIDEpfTsKLSAgQ09PUkQgZGVzdCA9IHsw LCAwfTsKLSAgQ0hBUl9JTkZPIGZpbGwgPSB7JyAnLCAwfTsKLSAgU2Nyb2xsQ29uc29sZVNjcmVl bkJ1ZmZlciAoZ2V0X291dHB1dF9oYW5kbGUgKCksICZyZWN0LCBOVUxMLCBkZXN0LCAmZmlsbCk7 Ci0gIGdldF90dHlwICgpLT5uZWVkX3JlZHJhd19zY3JlZW4gPSBmYWxzZTsKLX0KLQotdm9pZAot ZmhhbmRsZXJfcHR5X3NsYXZlOjpmaXh1cF9hZnRlcl9hdHRhY2ggKGJvb2wgbmF0aXZlX21heWJl LCBpbnQgZmRfc2V0KQotewotICBpZiAoZmQgPCAwKQotICAgIGZkID0gZmRfc2V0OwotICBpZiAo Z2V0X3BzZXVkb19jb25zb2xlICgpKQotICAgIHsKLSAgICAgIGlmIChmaGFuZGxlcl9jb25zb2xl OjpnZXRfY29uc29sZV9wcm9jZXNzX2lkIChnZXRfaGVscGVyX3Byb2Nlc3NfaWQgKCksCi0JCQkJ CQkgICAgdHJ1ZSkpCi0JaWYgKHBjb25fYXR0YWNoZWRfdG8gIT0gZ2V0X21pbm9yICgpKQotCSAg ewotCSAgICBwY29uX2F0dGFjaGVkX3RvID0gZ2V0X21pbm9yICgpOwotCSAgICBpbml0X2NvbnNv bGVfaGFuZGxlciAodHJ1ZSk7Ci0JICB9Ci0KLSNpZiAwIC8qIFRoaXMgaXMgZm9yIGRlYnVnIG9u bHkuICovCi0gICAgICBpc0h5YnJpZCA9IHRydWU7Ci0gICAgICBnZXRfdHR5cCAoKS0+c3dpdGNo X3RvX3Bjb25faW4gPSB0cnVlOwotICAgICAgZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX291 dCA9IHRydWU7Ci0jZW5kaWYKLQotICAgICAgaWYgKHBjb25fYXR0YWNoZWRfdG8gPT0gZ2V0X21p bm9yICgpICYmIG5hdGl2ZV9tYXliZSkKLQl7Ci0JICBpZiAoZmQgPT0gMCkKLQkgICAgewotCSAg ICAgIHB1bGxfcGNvbl9pbnB1dCAoKTsKLQkgICAgICBEV09SRCBtb2RlID0KLQkJRU5BQkxFX1BS T0NFU1NFRF9JTlBVVCB8IEVOQUJMRV9MSU5FX0lOUFVUIHwgRU5BQkxFX0VDSE9fSU5QVVQ7Ci0J ICAgICAgU2V0Q29uc29sZU1vZGUgKGdldF9oYW5kbGUgKCksIG1vZGUpOwotCSAgICAgIGlmIChn ZXRfdHR5cCAoKS0+cGNvbl9waWQgPT0gMCB8fAotCQkgICFwaW5mbyAoZ2V0X3R0eXAgKCktPnBj b25fcGlkKSkKLQkJZ2V0X3R0eXAgKCktPnBjb25fcGlkID0gbXlzZWxmLT5waWQ7Ci0JICAgICAg Z2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX2luID0gdHJ1ZTsKLQkgICAgfQotCSAgZWxzZSBp ZiAoZmQgPT0gMSB8fCBmZCA9PSAyKQotCSAgICB7Ci0JICAgICAgRFdPUkQgbW9kZSA9IEVOQUJM RV9QUk9DRVNTRURfT1VUUFVUIHwgRU5BQkxFX1dSQVBfQVRfRU9MX09VVFBVVDsKLQkgICAgICBT ZXRDb25zb2xlTW9kZSAoZ2V0X291dHB1dF9oYW5kbGUgKCksIG1vZGUpOwotCSAgICAgIGFjcXVp cmVfb3V0cHV0X211dGV4IChJTkZJTklURSk7Ci0JICAgICAgaWYgKCFnZXRfdHR5cCAoKS0+c3dp dGNoX3RvX3Bjb25fb3V0KQotCQlnZXRfdHR5cCAoKS0+d2FpdF9wY29uX2Z3ZCAoKTsKLQkgICAg ICBpZiAoZ2V0X3R0eXAgKCktPnBjb25fcGlkID09IDAgfHwKLQkJICAhcGluZm8gKGdldF90dHlw ICgpLT5wY29uX3BpZCkpCi0JCWdldF90dHlwICgpLT5wY29uX3BpZCA9IG15c2VsZi0+cGlkOwot CSAgICAgIGdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9vdXQgPSB0cnVlOwotCSAgICAgIHJl bGVhc2Vfb3V0cHV0X211dGV4ICgpOwotCi0JICAgICAgaWYgKGdldF90dHlwICgpLT5uZWVkX3Jl ZHJhd19zY3JlZW4pCi0JCXRyaWdnZXJfcmVkcmF3X3NjcmVlbiAoKTsKLQkgICAgfQotCSAgaW5p dF9jb25zb2xlX2hhbmRsZXIgKGZhbHNlKTsKLQl9Ci0gICAgICBlbHNlIGlmIChmZCA9PSAwICYm IG5hdGl2ZV9tYXliZSkKLQkvKiBSZWFkIGZyb20gdW5hdHRhY2hlZCBwc2V1ZG8gY29uc29sZSBj YXVzZSBmcmVlemUsCi0JICAgdGhlcmVmb3JlLCBmYWxsYmFjayB0byBsZWdhY3kgcHR5LiAqLwot CXNldF9oYW5kbGUgKGdldF9oYW5kbGVfY3lnICgpKTsKLSAgICB9Ci19Ci0KIHZvaWQKIGZoYW5k bGVyX3B0eV9zbGF2ZTo6Zml4dXBfYWZ0ZXJfZm9yayAoSEFORExFIHBhcmVudCkKIHsKLSAgZml4 dXBfYWZ0ZXJfYXR0YWNoIChmYWxzZSwgLTEpOwogICAvLyBmb3JrX2ZpeHVwIChwYXJlbnQsIGlu dXNlLCAiaW51c2UiKTsKICAgLy8gZmhhbmRsZXJfcHR5X2NvbW1vbjo6Zml4dXBfYWZ0ZXJfZm9y ayAocGFyZW50KTsKICAgcmVwb3J0X3R0eV9jb3VudHMgKHRoaXMsICJpbmhlcml0ZWQiLCAiIik7 CkBAIC0yOTkyLDcxICsxOTgxLDIyIEBAIGZoYW5kbGVyX3B0eV9zbGF2ZTo6Zml4dXBfYWZ0ZXJf ZXhlYyAoKQogCiAgIGlmICghY2xvc2Vfb25fZXhlYyAoKSkKICAgICBmaXh1cF9hZnRlcl9mb3Jr IChOVUxMKTsJLyogTm8gcGFyZW50IGhhbmRsZSByZXF1aXJlZC4gKi8KLSAgZWxzZSBpZiAoZ2V0 X3BzZXVkb19jb25zb2xlICgpKQotICAgIHsKLSAgICAgIGludCB1c2VkID0gMDsKLSAgICAgIGlu dCBhdHRhY2hlZCA9IDA7Ci0gICAgICBjeWdoZWFwX2ZkZW51bSBjZmQgKGZhbHNlKTsKLSAgICAg IHdoaWxlIChjZmQubmV4dCAoKSA+PSAwKQotCXsKLQkgIGlmIChjZmQtPmdldF9tYWpvciAoKSA9 PSBERVZfUFRZU19NQUpPUiB8fAotCSAgICAgIGNmZC0+Z2V0X21ham9yICgpID09IERFVl9DT05T X01BSk9SKQotCSAgICB1c2VkICsrOwotCSAgaWYgKGNmZC0+Z2V0X21ham9yICgpID09IERFVl9Q VFlTX01BSk9SICYmCi0JICAgICAgY2ZkLT5nZXRfbWlub3IgKCkgPT0gcGNvbl9hdHRhY2hlZF90 bykKLQkgICAgYXR0YWNoZWQgKys7Ci0JfQotCi0gICAgICAvKiBDYWxsIEZyZWVDb25zb2xlKCkg aWYgbm8gdHR5IGlzIG9wZW5lZCBhbmQgdGhlIHByb2Nlc3MKLQkgaXMgYXR0YWNoZWQgdG8gY29u c29sZSBjb3JyZXNwb25kaW5nIHRvIHR0eS4gVGhpcyBpcwotCSBuZWVkZWQgdG8gbWFrZSBHTlUg c2NyZWVuIGFuZCB0bXV4IHdvcmsgaW4gV2luZG93cyAxMAotCSAxOTAzLiAqLwotICAgICAgaWYg KGF0dGFjaGVkID09IDEgJiYgZ2V0X21pbm9yICgpID09IHBjb25fYXR0YWNoZWRfdG8pCi0JcGNv bl9hdHRhY2hlZF90byA9IC0xOwotICAgICAgaWYgKHVzZWQgPT0gMSAvKiBBYm91dCB0byBjbG9z ZSB0aGlzIHR0eSAqLykKLQl7Ci0JICBpbml0X2NvbnNvbGVfaGFuZGxlciAoZmFsc2UpOwotCSAg ZnJlZV9hdHRhY2hlZF9jb25zb2xlICgpOwotCX0KLSAgICB9CiAKICAgLyogU2V0IGxvY2FsZSAq LwogICBpZiAoZ2V0X3R0eXAgKCktPnRlcm1fY29kZV9wYWdlID09IDApCiAgICAgc2V0dXBfbG9j YWxlICgpOwogCiAgIC8qIEhvb2sgQ29uc29sZSBBUEkgKi8KLSAgaWYgKGdldF9wc2V1ZG9fY29u c29sZSAoKSkKLSAgICB7CiAjZGVmaW5lIERPX0hPT0sobW9kdWxlLCBuYW1lKSBcCi0gICAgICBp ZiAoIW5hbWUjI19PcmlnKSBcCi0JeyBcCi0JICB2b2lkICphcGkgPSBob29rX2FwaSAobW9kdWxl LCAjbmFtZSwgKHZvaWQgKikgbmFtZSMjX0hvb2tlZCk7IFwKLQkgIG5hbWUjI19PcmlnID0gKF9f dHlwZW9mX18gKG5hbWUpICopIGFwaTsgXAotCSAgLyppZiAoYXBpKSBzeXN0ZW1fcHJpbnRmICgj bmFtZSAiIGhvb2tlZC4iKTsqLyBcCi0JfQotICAgICAgRE9fSE9PSyAoTlVMTCwgV3JpdGVGaWxl KTsKLSAgICAgIERPX0hPT0sgKE5VTEwsIFdyaXRlQ29uc29sZUEpOwotICAgICAgRE9fSE9PSyAo TlVMTCwgV3JpdGVDb25zb2xlVyk7Ci0gICAgICBET19IT09LIChOVUxMLCBSZWFkRmlsZSk7Ci0g ICAgICBET19IT09LIChOVUxMLCBSZWFkQ29uc29sZUEpOwotICAgICAgRE9fSE9PSyAoTlVMTCwg UmVhZENvbnNvbGVXKTsKLSAgICAgIERPX0hPT0sgKE5VTEwsIFdyaXRlQ29uc29sZU91dHB1dEEp OwotICAgICAgRE9fSE9PSyAoTlVMTCwgV3JpdGVDb25zb2xlT3V0cHV0Vyk7Ci0gICAgICBET19I T09LIChOVUxMLCBXcml0ZUNvbnNvbGVPdXRwdXRDaGFyYWN0ZXJBKTsKLSAgICAgIERPX0hPT0sg KE5VTEwsIFdyaXRlQ29uc29sZU91dHB1dENoYXJhY3RlclcpOwotICAgICAgRE9fSE9PSyAoTlVM TCwgV3JpdGVDb25zb2xlT3V0cHV0QXR0cmlidXRlKTsKLSAgICAgIERPX0hPT0sgKE5VTEwsIFNl dENvbnNvbGVDdXJzb3JQb3NpdGlvbik7Ci0gICAgICBET19IT09LIChOVUxMLCBTZXRDb25zb2xl VGV4dEF0dHJpYnV0ZSk7Ci0gICAgICBET19IT09LIChOVUxMLCBXcml0ZUNvbnNvbGVJbnB1dEEp OwotICAgICAgRE9fSE9PSyAoTlVMTCwgV3JpdGVDb25zb2xlSW5wdXRXKTsKLSAgICAgIERPX0hP T0sgKE5VTEwsIFJlYWRDb25zb2xlSW5wdXRBKTsKLSAgICAgIERPX0hPT0sgKE5VTEwsIFJlYWRD b25zb2xlSW5wdXRXKTsKLSAgICAgIERPX0hPT0sgKE5VTEwsIFBlZWtDb25zb2xlSW5wdXRBKTsK LSAgICAgIERPX0hPT0sgKE5VTEwsIFBlZWtDb25zb2xlSW5wdXRXKTsKLSAgICAgIC8qIENyZWF0 ZVByb2Nlc3MoKSBpcyBob29rZWQgZm9yIEdEQiBldGMuICovCi0gICAgICBET19IT09LIChOVUxM LCBDcmVhdGVQcm9jZXNzQSk7Ci0gICAgICBET19IT09LIChOVUxMLCBDcmVhdGVQcm9jZXNzVyk7 CisgIGlmICghbmFtZSMjX09yaWcpIFwKKyAgICB7IFwKKyAgICAgIHZvaWQgKmFwaSA9IGhvb2tf YXBpIChtb2R1bGUsICNuYW1lLCAodm9pZCAqKSBuYW1lIyNfSG9va2VkKTsgXAorICAgICAgbmFt ZSMjX09yaWcgPSAoX190eXBlb2ZfXyAobmFtZSkgKikgYXBpOyBcCisgICAgICAvKmlmIChhcGkp IHN5c3RlbV9wcmludGYgKCNuYW1lICIgaG9va2VkLiIpOyovIFwKICAgICB9CisgIC8qIENyZWF0 ZVByb2Nlc3MoKSBpcyBob29rZWQgZm9yIEdEQiBldGMuICovCisgIERPX0hPT0sgKE5VTEwsIENy ZWF0ZVByb2Nlc3NBKTsKKyAgRE9fSE9PSyAoTlVMTCwgQ3JlYXRlUHJvY2Vzc1cpOwogfQogCiAv KiBUaGlzIHRocmVhZCBmdW5jdGlvbiBoYW5kbGVzIHRoZSBtYXN0ZXIgY29udHJvbCBwaXBlLiAg SXQgd2FpdHMgZm9yIGEKQEAgLTMyMDQsMjcgKzIxNDQsNiBAQCByZXBseToKICAgcmV0dXJuIDA7 CiB9CiAKLXZvaWQKLWZoYW5kbGVyX3B0eV9tYXN0ZXI6OnRyYW5zZmVyX2lucHV0X3RvX3Bjb24g KHZvaWQpCi17Ci0gIFdhaXRGb3JTaW5nbGVPYmplY3QgKGlucHV0X211dGV4LCBJTkZJTklURSk7 Ci0gIERXT1JEIG47Ci0gIHNpemVfdCB0cmFuc2ZlcmVkID0gMDsKLSAgd2hpbGUgKDo6Ynl0ZXNf YXZhaWxhYmxlIChuLCBmcm9tX21hc3Rlcl9jeWcpICYmIG4pCi0gICAgewotICAgICAgY2hhciBi dWZbMTAyNF07Ci0gICAgICBSZWFkRmlsZSAoZnJvbV9tYXN0ZXJfY3lnLCBidWYsIHNpemVvZiAo YnVmKSwgJm4sIDApOwotICAgICAgY2hhciAqcCA9IGJ1ZjsKLSAgICAgIHdoaWxlICgocCA9IChj aGFyICopIG1lbWNociAocCwgJ1xuJywgbiAtIChwIC0gYnVmKSkpKQotCSpwID0gJ1xyJzsKLSAg ICAgIGlmIChXcml0ZUZpbGUgKHRvX3NsYXZlLCBidWYsIG4sICZuLCAwKSkKLQl0cmFuc2ZlcmVk ICs9IG47Ci0gICAgfQotICBpZiAodHJhbnNmZXJlZCkKLSAgICBnZXRfdHR5cCAoKS0+cGNvbl9p bl9lbXB0eSA9IGZhbHNlOwotICBSZWxlYXNlTXV0ZXggKGlucHV0X211dGV4KTsKLX0KLQogc3Rh dGljIERXT1JEIFdJTkFQSQogcHR5X21hc3Rlcl90aHJlYWQgKFZPSUQgKmFyZykKIHsKQEAgLTMy NDAsMjMgKzIxNTksNyBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjpwdHlfbWFzdGVyX2Z3ZF90aHJl YWQgKCkKICAgdGVybWlvc19wcmludGYgKCJTdGFydGVkLiIpOwogICBmb3IgKDs7KQogICAgIHsK LSAgICAgIGlmIChnZXRfcHNldWRvX2NvbnNvbGUgKCkpCi0JewotCSAgZ2V0X3R0eXAgKCktPnBj b25fbGFzdF90aW1lID0gR2V0VGlja0NvdW50ICgpOwotCSAgd2hpbGUgKDo6Ynl0ZXNfYXZhaWxh YmxlIChybGVuLCBmcm9tX3NsYXZlKSAmJiBybGVuID09IDApCi0JICAgIHsKLQkgICAgICAvKiBG b3JjaWJseSB0cmFuc2ZlciBpbnB1dCBpZiBpdCBpcyByZXF1ZXN0ZWQgYnkgc2xhdmUuCi0JCSBU aGlzIGhhcHBlbnMgd2hlbiBpbnB1dCBkYXRhIHNob3VsZCBiZSB0cmFuc2ZlcmVkCi0JCSBmcm9t IHRoZSBpbnB1dCBwaXBlIGZvciBjeWd3aW4gYXBwcyB0byB0aGUgaW5wdXQgcGlwZQotCQkgZm9y IG5hdGl2ZSBhcHBzLiAqLwotCSAgICAgIGlmIChnZXRfdHR5cCAoKS0+cmVxX3RyYW5zZmVyX2lu cHV0X3RvX3Bjb24pCi0JCXsKLQkJICB0cmFuc2Zlcl9pbnB1dF90b19wY29uICgpOwotCQkgIGdl dF90dHlwICgpLT5yZXFfdHJhbnNmZXJfaW5wdXRfdG9fcGNvbiA9IGZhbHNlOwotCQl9Ci0JICAg ICAgU2xlZXAgKDEpOwotCSAgICB9Ci0JfQorICAgICAgZ2V0X3R0eXAgKCktPnBjb25fbGFzdF90 aW1lID0gR2V0VGlja0NvdW50ICgpOwogICAgICAgaWYgKCFSZWFkRmlsZSAoZnJvbV9zbGF2ZSwg b3V0YnVmLCBzaXplb2Ygb3V0YnVmLCAmcmxlbiwgTlVMTCkpCiAJewogCSAgdGVybWlvc19wcmlu dGYgKCJSZWFkRmlsZSBmb3IgZm9yd2FyZGluZyBmYWlsZWQsICVFIik7CkBAIC0zMjY0LDUxICsy MTY3LDExIEBAIGZoYW5kbGVyX3B0eV9tYXN0ZXI6OnB0eV9tYXN0ZXJfZndkX3RocmVhZCAoKQog CX0KICAgICAgIHNzaXplX3Qgd2xlbiA9IHJsZW47CiAgICAgICBjaGFyICpwdHIgPSBvdXRidWY7 Ci0gICAgICBpZiAoZ2V0X3BzZXVkb19jb25zb2xlICgpKQorICAgICAgaWYgKGdldF90dHlwICgp LT5oX3BzZXVkb19jb25zb2xlKQogCXsKLQkgIC8qIEF2b2lkIGR1cGxpY2F0aW5nIHNsYXZlIG91 dHB1dCB3aGljaCBpcyBhbHJlYWR5IHNlbnQgdG8KLQkgICAgIHRvX21hc3Rlcl9jeWcgKi8KLQkg IGlmICghZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX291dCkKLQkgICAgY29udGludWU7Ci0K LQkgIC8qIEF2b2lkIHNldHRpbmcgd2luZG93IHRpdGxlIHRvICJjeWd3aW4tY29uc29sZS1oZWxw ZXIuZXhlIiAqLworCSAgLyogUmVtb3ZlIENTSSA+IFBtIG0gKi8KIAkgIGludCBzdGF0ZSA9IDA7 CiAJICBpbnQgc3RhcnRfYXQgPSAwOwotCSAgZm9yIChEV09SRCBpPTA7IGk8cmxlbjsgaSsrKQot CSAgICBpZiAob3V0YnVmW2ldID09ICdcMDMzJykKLQkgICAgICB7Ci0JCXN0YXJ0X2F0ID0gaTsK LQkJc3RhdGUgPSAxOwotCQljb250aW51ZTsKLQkgICAgICB9Ci0JICAgIGVsc2UgaWYgKChzdGF0 ZSA9PSAxICYmIG91dGJ1ZltpXSA9PSAnXScpIHx8Ci0JCSAgICAgKHN0YXRlID09IDIgJiYgb3V0 YnVmW2ldID09ICcwJykgfHwKLQkJICAgICAoc3RhdGUgPT0gMyAmJiBvdXRidWZbaV0gPT0gJzsn KSkKLQkgICAgICB7Ci0JCXN0YXRlICsrOwotCQljb250aW51ZTsKLQkgICAgICB9Ci0JICAgIGVs c2UgaWYgKHN0YXRlID09IDQgJiYgb3V0YnVmW2ldID09ICdcYScpCi0JICAgICAgewotCQljb25z dCBjaGFyICpoZWxwZXJfc3RyID0gIlxcYmluXFxjeWd3aW4tY29uc29sZS1oZWxwZXIuZXhlIjsK LQkJaWYgKG1lbW1lbSAoJm91dGJ1ZltzdGFydF9hdF0sIGkgKyAxIC0gc3RhcnRfYXQsCi0JCQkg ICAgaGVscGVyX3N0ciwgc3RybGVuIChoZWxwZXJfc3RyKSkpCi0JCSAgewotCQkgICAgbWVtbW92 ZSAoJm91dGJ1ZltzdGFydF9hdF0sICZvdXRidWZbaSsxXSwgcmxlbi1pLTEpOwotCQkgICAgcmxl biA9IHdsZW4gPSBzdGFydF9hdCArIHJsZW4gLSBpIC0gMTsKLQkJICB9Ci0JCXN0YXRlID0gMDsK LQkJY29udGludWU7Ci0JICAgICAgfQotCSAgICBlbHNlIGlmIChvdXRidWZbaV0gPT0gJ1xhJykK LQkgICAgICB7Ci0JCXN0YXRlID0gMDsKLQkJY29udGludWU7Ci0JICAgICAgfQotCi0JICAvKiBS ZW1vdmUgQ1NJID4gUG0gbSAqLwotCSAgc3RhdGUgPSAwOwotCSAgc3RhcnRfYXQgPSAwOwogCSAg Zm9yIChEV09SRCBpPTA7IGk8cmxlbjsgaSsrKQogCSAgICBpZiAob3V0YnVmW2ldID09ICdcMDMz JykKIAkgICAgICB7CkBAIC0zMzg2LDIwMSArMjI0OSw2IEBAIHB0eV9tYXN0ZXJfZndkX3RocmVh ZCAoVk9JRCAqYXJnKQogICByZXR1cm4gKChmaGFuZGxlcl9wdHlfbWFzdGVyICopIGFyZyktPnB0 eV9tYXN0ZXJfZndkX3RocmVhZCAoKTsKIH0KIAotLyogSWYgbWFzdGVyIHByb2Nlc3MgaXMgcnVu bmluZyBhcyBzZXJ2aWNlLCBhdHRhY2hpbmcgdG8KLSAgIHBzZXVkbyBjb25zb2xlIHNob3VsZCBi ZSBkb25lIGluIGZvcmsuIElmIGF0dGFjaGluZwotICAgaXMgZG9uZSBpbiBzcGF3biBmb3IgaW5l dGQgb3Igc3NoZCwgaXQgZmFpbHMgYmVjYXVzZQotICAgdGhlIGhlbHBlciBwcm9jZXNzIGlzIHJ1 bm5pbmcgYXMgcHJpdmlsZWdlZCB1c2VyIHdoaWxlCi0gICBzbGF2ZSBwcm9jZXNzIGlzIG5vdC4g VGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRldGVybWluZQotICAgaWYgdGhlIHByb2Nlc3MgaXMg cnVubmluZyBhcyBhIHNydmljZSBvciBub3QuICovCi1pbmxpbmUgc3RhdGljIGJvb2wKLWlzX3J1 bm5pbmdfYXNfc2VydmljZSAodm9pZCkKLXsKLSAgcmV0dXJuIGNoZWNrX3Rva2VuX21lbWJlcnNo aXAgKHdlbGxfa25vd25fc2VydmljZV9zaWQpCi0gICAgfHwgY3lnaGVhcC0+dXNlci5zYXZlZF9z aWQgKCkgPT0gd2VsbF9rbm93bl9zeXN0ZW1fc2lkOwotfQotCi1ib29sCi1maGFuZGxlcl9wdHlf bWFzdGVyOjpzZXR1cF9wc2V1ZG9jb25zb2xlICgpCi17Ci0gIGlmIChkaXNhYmxlX3Bjb24pCi0g ICAgcmV0dXJuIGZhbHNlOwotICAvKiBJZiB0aGUgbGVnYWN5IGNvbnNvbGUgbW9kZSBpcyBlbmFi bGVkLCBwc2V1ZG8gY29uc29sZSBzZWVtcwotICAgICBub3QgdG8gd29yayBhcyBleHBlY3RlZC4g VG8gZGV0ZXJtaW5lIGNvbnNvbGUgbW9kZSwgcmVnaXN0cnkKLSAgICAga2V5IEZvcmNlVjIgaW4g SEtFWV9DVVJSRU5UX1VTRVJcQ29uc29sZSBpcyBjaGVja2VkLiAqLwotICByZWdfa2V5IHJlZyAo SEtFWV9DVVJSRU5UX1VTRVIsIEtFWV9SRUFELCBMIkNvbnNvbGUiLCBOVUxMKTsKLSAgaWYgKHJl Zy5lcnJvciAoKSkKLSAgICByZXR1cm4gZmFsc2U7Ci0gIGlmIChyZWcuZ2V0X2R3b3JkIChMIkZv cmNlVjIiLCAxKSA9PSAwKQotICAgIHsKLSAgICAgIHRlcm1pb3NfcHJpbnRmICgiUHNldWRvIGNv bnNvbGUgaXMgZGlzYWJsZWQgIgotCQkgICAgICAiYmVjYXVzZSB0aGUgbGVnYWN5IGNvbnNvbGUg bW9kZSBpcyBlbmFibGVkLiIpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAvKiBQ c2V1ZG8gY29uc29sZSBzdXBwcm90IGlzIHJlYWxpemVkIHVzaW5nIGEgdHJpY2t5IHRlY2huaWMu Ci0gICAgIFBUWSBuZWVkIHRoZSBwc2V1ZG8gY29uc29sZSBoYW5kbGVzLCBob3dldmVyLCB0aGV5 IGNhbm5vdAotICAgICBiZSByZXRyaWV2ZWQgYnkgbm9ybWFsIHByb2NlZHVyZS4gVGhlcmVmb3Jl LCBydW4gYSBoZWxwZXIKLSAgICAgcHJvY2VzcyBpbiBhIHBzZXVkbyBjb25zb2xlIGFuZCBnZXQg dGhlbSBmcm9tIHRoZSBoZWxwZXIuCi0gICAgIFNsYXZlIHByb2Nlc3Mgd2lsbCBhdHRhY2ggdG8g dGhlIHBzZXVkbyBjb25zb2xlIGluIHRoZQotICAgICBoZWxwZXIgcHJvY2VzcyB1c2luZyBBdHRh Y2hDb25zb2xlKCkuICovCi0gIENPT1JEIHNpemUgPSB7Ci0gICAgKFNIT1JUKSBnZXRfdHR5cCAo KS0+d2luc2l6ZS53c19jb2wsCi0gICAgKFNIT1JUKSBnZXRfdHR5cCAoKS0+d2luc2l6ZS53c19y b3cKLSAgfTsKLSAgQ3JlYXRlUGlwZSAoJmZyb21fbWFzdGVyLCAmdG9fc2xhdmUsICZzZWNfbm9u ZSwgMCk7Ci0gIFNldExhc3RFcnJvciAoRVJST1JfU1VDQ0VTUyk7Ci0gIEhSRVNVTFQgcmVzID0g Q3JlYXRlUHNldWRvQ29uc29sZSAoc2l6ZSwgZnJvbV9tYXN0ZXIsIHRvX21hc3RlciwKLQkJCQkg ICAgIDAsICZnZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZSk7Ci0gIGlmIChyZXMgIT0gU19P SyB8fCBHZXRMYXN0RXJyb3IgKCkgPT0gRVJST1JfUFJPQ19OT1RfRk9VTkQpCi0gICAgewotICAg ICAgaWYgKHJlcyAhPSBTX09LKQotCXN5c3RlbV9wcmludGYgKCJDcmVhdGVQc2V1ZG9Db25zb2xl KCkgZmFpbGVkLiAlMDh4XG4iLAotCQkgICAgICAgR2V0TGFzdEVycm9yICgpKTsKLSAgICAgIGdv dG8gZmFsbGJhY2s7Ci0gICAgfQotCi0gIC8qIElmIG1hc3RlciBwcm9jZXNzIGlzIHJ1bm5pbmcg YXMgc2VydmljZSwgYXR0YWNoaW5nIHRvCi0gICAgIHBzZXVkbyBjb25zb2xlIHNob3VsZCBiZSBk b25lIGluIGZvcmsuIElmIGF0dGFjaGluZwotICAgICBpcyBkb25lIGluIHNwYXduIGZvciBpbmV0 ZCBvciBzc2hkLCBpdCBmYWlscyBiZWNhdXNlCi0gICAgIHRoZSBoZWxwZXIgcHJvY2VzcyBpcyBy dW5uaW5nIGFzIHByaXZpbGVnZWQgdXNlciB3aGlsZQotICAgICBzbGF2ZSBwcm9jZXNzIGlzIG5v dC4gKi8KLSAgaWYgKGlzX3J1bm5pbmdfYXNfc2VydmljZSAoKSkKLSAgICBnZXRfdHR5cCAoKS0+ YXR0YWNoX3Bjb25faW5fZm9yayA9IHRydWU7Ci0KLSAgU1RBUlRVUElORk9FWFcgc2lfaGVscGVy OwotICBIQU5ETEUgaGVsbG8sIGdvb2RieWU7Ci0gIEhBTkRMRSBociwgaHc7Ci0gIFBST0NFU1Nf SU5GT1JNQVRJT04gcGlfaGVscGVyOwotICBIQU5ETEUgaHBDb25JbiwgaHBDb25PdXQ7Ci0gIHsK LSAgICBTSVpFX1QgYnl0ZXNSZXF1aXJlZDsKLSAgICBJbml0aWFsaXplUHJvY1RocmVhZEF0dHJp YnV0ZUxpc3QgKE5VTEwsIDIsIDAsICZieXRlc1JlcXVpcmVkKTsKLSAgICBaZXJvTWVtb3J5ICgm c2lfaGVscGVyLCBzaXplb2YgKHNpX2hlbHBlcikpOwotICAgIHNpX2hlbHBlci5TdGFydHVwSW5m by5jYiA9IHNpemVvZiAoU1RBUlRVUElORk9FWFcpOwotICAgIHNpX2hlbHBlci5scEF0dHJpYnV0 ZUxpc3QgPSAoUFBST0NfVEhSRUFEX0FUVFJJQlVURV9MSVNUKQotICAgICAgSGVhcEFsbG9jIChH ZXRQcm9jZXNzSGVhcCAoKSwgMCwgYnl0ZXNSZXF1aXJlZCk7Ci0gICAgaWYgKHNpX2hlbHBlci5s cEF0dHJpYnV0ZUxpc3QgPT0gTlVMTCkKLSAgICAgIGdvdG8gY2xlYW51cF9wc2V1ZG9fY29uc29s ZTsKLSAgICBpZiAoIUluaXRpYWxpemVQcm9jVGhyZWFkQXR0cmlidXRlTGlzdCAoc2lfaGVscGVy LmxwQXR0cmlidXRlTGlzdCwKLQkJCQkJICAgIDIsIDAsICZieXRlc1JlcXVpcmVkKSkKLSAgICAg IGdvdG8gY2xlYW51cF9oZWFwOwotICAgIGlmICghVXBkYXRlUHJvY1RocmVhZEF0dHJpYnV0ZSAo c2lfaGVscGVyLmxwQXR0cmlidXRlTGlzdCwKLQkJCQkgICAgMCwKLQkJCQkgICAgUFJPQ19USFJF QURfQVRUUklCVVRFX1BTRVVET0NPTlNPTEUsCi0JCQkJICAgIGdldF90dHlwICgpLT5oX3BzZXVk b19jb25zb2xlLAotCQkJCSAgICBzaXplb2YgKGdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xl KSwKLQkJCQkgICAgTlVMTCwgTlVMTCkpCi0gICAgICBnb3RvIGNsZWFudXBfaGVhcDsKLSAgICAv KiBDcmVhdGUgZXZlbnRzIGZvciBzdGFydC9zdG9wIGhlbHBlciBwcm9jZXNzLiAqLwotICAgIGhl bGxvID0gQ3JlYXRlRXZlbnQgKCZzZWNfbm9uZSwgdHJ1ZSwgZmFsc2UsIE5VTEwpOwotICAgIGdv b2RieWUgPSBDcmVhdGVFdmVudCAoJnNlY19ub25lLCB0cnVlLCBmYWxzZSwgTlVMTCk7Ci0gICAg LyogQ3JlYXRlIGEgcGlwZSBmb3IgcmVjZWl2aW5nIHBzZXVkbyBjb25zb2xlIGhhbmRsZXMgKi8K LSAgICBDcmVhdGVQaXBlICgmaHIsICZodywgJnNlY19ub25lLCAwKTsKLSAgICAvKiBJbmhlcml0 IG9ubHkgaGFuZGxlcyB3aGljaCBhcmUgbmVlZGVkIGJ5IGhlbHBlci4gKi8KLSAgICBIQU5ETEUg aGFuZGxlc190b19pbmhlcml0W10gPSB7aGVsbG8sIGdvb2RieWUsIGh3fTsKLSAgICBpZiAoIVVw ZGF0ZVByb2NUaHJlYWRBdHRyaWJ1dGUgKHNpX2hlbHBlci5scEF0dHJpYnV0ZUxpc3QsCi0JCQkJ ICAgIDAsCi0JCQkJICAgIFBST0NfVEhSRUFEX0FUVFJJQlVURV9IQU5ETEVfTElTVCwKLQkJCQkg ICAgaGFuZGxlc190b19pbmhlcml0LAotCQkJCSAgICBzaXplb2YgKGhhbmRsZXNfdG9faW5oZXJp dCksCi0JCQkJICAgIE5VTEwsIE5VTEwpKQotICAgICAgZ290byBjbGVhbnVwX2V2ZW50X2FuZF9w aXBlczsKLSAgICAvKiBDcmVhdGUgaGVscGVyIHByb2Nlc3MgKi8KLSAgICBXQ0hBUiBjbWRbTUFY X1BBVEhdOwotICAgIHBhdGhfY29udiBoZWxwZXIgKCIvYmluL2N5Z3dpbi1jb25zb2xlLWhlbHBl ci5leGUiKTsKLSAgICBzaXplX3QgbGVuID0gaGVscGVyLmdldF93aWRlX3dpbjMyX3BhdGhfbGVu ICgpOwotICAgIGhlbHBlci5nZXRfd2lkZV93aW4zMl9wYXRoIChjbWQpOwotICAgIF9fc21hbGxf c3dwcmludGYgKGNtZCArIGxlbiwgTCIgJXAgJXAgJXAiLCBoZWxsbywgZ29vZGJ5ZSwgaHcpOwot ICAgIHNpX2hlbHBlci5TdGFydHVwSW5mby5kd0ZsYWdzID0gU1RBUlRGX1VTRVNUREhBTkRMRVM7 Ci0gICAgc2lfaGVscGVyLlN0YXJ0dXBJbmZvLmhTdGRJbnB1dCA9IE5VTEw7Ci0gICAgc2lfaGVs cGVyLlN0YXJ0dXBJbmZvLmhTdGRPdXRwdXQgPSBOVUxMOwotICAgIHNpX2hlbHBlci5TdGFydHVw SW5mby5oU3RkRXJyb3IgPSBOVUxMOwotICAgIGlmICghQ3JlYXRlUHJvY2Vzc1cgKE5VTEwsIGNt ZCwgJnNlY19ub25lLCAmc2VjX25vbmUsCi0JCQkgVFJVRSwgRVhURU5ERURfU1RBUlRVUElORk9f UFJFU0VOVCwKLQkJCSBOVUxMLCBOVUxMLCAmc2lfaGVscGVyLlN0YXJ0dXBJbmZvLCAmcGlfaGVs cGVyKSkKLSAgICAgIGdvdG8gY2xlYW51cF9ldmVudF9hbmRfcGlwZXM7Ci0gICAgZm9yICg7OykK LSAgICAgIHsKLSAgICAgICAgRFdPUkQgd2FpdF9yZXN1bHQgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0 IChoZWxsbywgNTAwKTsKLQlpZiAod2FpdF9yZXN1bHQgPT0gV0FJVF9PQkpFQ1RfMCkKLQkgIGJy ZWFrOwotCWlmICh3YWl0X3Jlc3VsdCAhPSBXQUlUX1RJTUVPVVQpCi0JICBnb3RvIGNsZWFudXBf aGVscGVyX3Byb2Nlc3M7Ci0JRFdPUkQgZXhpdF9jb2RlOwotCWlmICghR2V0RXhpdENvZGVQcm9j ZXNzKHBpX2hlbHBlci5oUHJvY2VzcywgJmV4aXRfY29kZSkpCi0JICBnb3RvIGNsZWFudXBfaGVs cGVyX3Byb2Nlc3M7Ci0JaWYgKGV4aXRfY29kZSA9PSBTVElMTF9BQ1RJVkUpCi0JICBjb250aW51 ZTsKLQlpZiAoZXhpdF9jb2RlICE9IDAgfHwKLQkgICAgV2FpdEZvclNpbmdsZU9iamVjdCAoaGVs bG8sIDUwMCkgIT0gV0FJVF9PQkpFQ1RfMCkKLQkgIGdvdG8gY2xlYW51cF9oZWxwZXJfcHJvY2Vz czsKLQlicmVhazsKLSAgICAgIH0KLSAgICBDbG9zZUhhbmRsZSAoaGVsbG8pOwotICAgIENsb3Nl SGFuZGxlIChwaV9oZWxwZXIuaFRocmVhZCk7Ci0gICAgLyogUmV0cmlldmUgcHNldWRvIGNvbnNv bGUgaGFuZGxlcyAqLwotICAgIERXT1JEIHJMZW47Ci0gICAgY2hhciBidWZbNjRdOwotICAgIGlm ICghUmVhZEZpbGUgKGhyLCBidWYsIHNpemVvZiAoYnVmKSwgJnJMZW4sIE5VTEwpKQotICAgICAg Z290byBjbGVhbnVwX2hlbHBlcl9wcm9jZXNzOwotICAgIGJ1ZltyTGVuXSA9ICdcMCc7Ci0gICAg c3NjYW5mIChidWYsICJTdGRIYW5kbGVzPSVwLCVwIiwgJmhwQ29uSW4sICZocENvbk91dCk7Ci0g ICAgaWYgKCFEdXBsaWNhdGVIYW5kbGUgKHBpX2hlbHBlci5oUHJvY2VzcywgaHBDb25JbiwKLQkJ CSAgR2V0Q3VycmVudFByb2Nlc3MgKCksICZocENvbkluLCAwLAotCQkJICBUUlVFLCBEVVBMSUNB VEVfU0FNRV9BQ0NFU1MpKQotICAgICAgZ290byBjbGVhbnVwX2hlbHBlcl9wcm9jZXNzOwotICAg IGlmICghRHVwbGljYXRlSGFuZGxlIChwaV9oZWxwZXIuaFByb2Nlc3MsIGhwQ29uT3V0LAotCQkJ ICBHZXRDdXJyZW50UHJvY2VzcyAoKSwgJmhwQ29uT3V0LCAwLAotCQkJICBUUlVFLCBEVVBMSUNB VEVfU0FNRV9BQ0NFU1MpKQotICAgICAgZ290byBjbGVhbnVwX3Bjb25faW47Ci0gICAgQ2xvc2VI YW5kbGUgKGhyKTsKLSAgICBDbG9zZUhhbmRsZSAoaHcpOwotICAgIC8qIENsZWFuIHVwICovCi0g ICAgRGVsZXRlUHJvY1RocmVhZEF0dHJpYnV0ZUxpc3QgKHNpX2hlbHBlci5scEF0dHJpYnV0ZUxp c3QpOwotICAgIEhlYXBGcmVlIChHZXRQcm9jZXNzSGVhcCAoKSwgMCwgc2lfaGVscGVyLmxwQXR0 cmlidXRlTGlzdCk7Ci0gIH0KLSAgLyogU2V0dGluZyBpbmZvcm1hdGlvbiBvZiBzdHVmZnMgcmVn YXJkaW5nIHBzZXVkbyBjb25zb2xlICovCi0gIGdldF90dHlwICgpLT5oX2hlbHBlcl9nb29kYnll ID0gZ29vZGJ5ZTsKLSAgZ2V0X3R0eXAgKCktPmhfaGVscGVyX3Byb2Nlc3MgPSBwaV9oZWxwZXIu aFByb2Nlc3M7Ci0gIGdldF90dHlwICgpLT5oZWxwZXJfcHJvY2Vzc19pZCA9IHBpX2hlbHBlci5k d1Byb2Nlc3NJZDsKLSAgQ2xvc2VIYW5kbGUgKGZyb21fbWFzdGVyKTsKLSAgQ2xvc2VIYW5kbGUg KHRvX21hc3Rlcik7Ci0gIGZyb21fbWFzdGVyID0gaHBDb25JbjsKLSAgdG9fbWFzdGVyID0gaHBD b25PdXQ7Ci0gIFJlc2l6ZVBzZXVkb0NvbnNvbGUgKGdldF90dHlwICgpLT5oX3BzZXVkb19jb25z b2xlLCBzaXplKTsKLSAgcmV0dXJuIHRydWU7Ci0KLWNsZWFudXBfcGNvbl9pbjoKLSAgQ2xvc2VI YW5kbGUgKGhwQ29uSW4pOwotY2xlYW51cF9oZWxwZXJfcHJvY2VzczoKLSAgU2V0RXZlbnQgKGdv b2RieWUpOwotICBXYWl0Rm9yU2luZ2xlT2JqZWN0IChwaV9oZWxwZXIuaFByb2Nlc3MsIElORklO SVRFKTsKLSAgQ2xvc2VIYW5kbGUgKHBpX2hlbHBlci5oUHJvY2Vzcyk7Ci0gIGdvdG8gc2tpcF9j bG9zZV9oZWxsbzsKLWNsZWFudXBfZXZlbnRfYW5kX3BpcGVzOgotICBDbG9zZUhhbmRsZSAoaGVs bG8pOwotc2tpcF9jbG9zZV9oZWxsbzoKLSAgQ2xvc2VIYW5kbGUgKGdvb2RieWUpOwotICBDbG9z ZUhhbmRsZSAoaHIpOwotICBDbG9zZUhhbmRsZSAoaHcpOwotY2xlYW51cF9oZWFwOgotICBIZWFw RnJlZSAoR2V0UHJvY2Vzc0hlYXAgKCksIDAsIHNpX2hlbHBlci5scEF0dHJpYnV0ZUxpc3QpOwot Y2xlYW51cF9wc2V1ZG9fY29uc29sZToKLSAgewotICAgIEhQQ09OX0lOVEVSTkFMICpocCA9IChI UENPTl9JTlRFUk5BTCAqKSBnZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZTsKLSAgICBIQU5E TEUgdG1wID0gaHAtPmhDb25Ib3N0UHJvY2VzczsKLSAgICBDbG9zZVBzZXVkb0NvbnNvbGUgKGdl dF9wc2V1ZG9fY29uc29sZSAoKSk7Ci0gICAgQ2xvc2VIYW5kbGUgKHRtcCk7Ci0gIH0KLWZhbGxi YWNrOgotICBDbG9zZUhhbmRsZSAoZnJvbV9tYXN0ZXIpOwotICBDbG9zZUhhbmRsZSAodG9fc2xh dmUpOwotICBmcm9tX21hc3RlciA9IGZyb21fbWFzdGVyX2N5ZzsKLSAgdG9fc2xhdmUgPSBOVUxM OwotICBnZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZSA9IE5VTEw7Ci0gIHJldHVybiBmYWxz ZTsKLX0KLQogYm9vbAogZmhhbmRsZXJfcHR5X21hc3Rlcjo6c2V0dXAgKCkKIHsKQEAgLTM1OTMs MTEgKzIyNjEsNiBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjpzZXR1cCAoKQogICBpZiAodW5pdCA8 IDApCiAgICAgcmV0dXJuIGZhbHNlOwogCi0gIC8qIGZyb21fbWFzdGVyIHNob3VsZCBiZSB1c2Vk IGZvciBwc2V1ZG8gY29uc29sZS4KLSAgICAgSnVzdCBjb3B5IGZyb21fbWFzdGVyX2N5ZyBoZXJl IGZvciB0aGUgY2FzZSB0aGF0Ci0gICAgIHBzZXVkbyBjb25zb2xlIGlzIG5vdCBhdmFpbGFibGUu ICovCi0gIGZyb21fbWFzdGVyID0gZnJvbV9tYXN0ZXJfY3lnOwotCiAgIFByb3RlY3RIYW5kbGUx IChnZXRfb3V0cHV0X2hhbmRsZSAoKSwgdG9fcHR5KTsKIAogICB0dHkmIHQgPSAqY3lnd2luX3No YXJlZC0+dHR5W3VuaXRdOwpAQCAtMzY5NiwxNSArMjM1OSwyMSBAQCBmaGFuZGxlcl9wdHlfbWFz dGVyOjpzZXR1cCAoKQogICAgICAgZ290byBlcnI7CiAgICAgfQogCi0gIHQud2luc2l6ZS53c19j b2wgPSA4MDsKLSAgdC53aW5zaXplLndzX3JvdyA9IDI1OwotCi0gIHNldHVwX3BzZXVkb2NvbnNv bGUgKCk7CisgIF9fc21hbGxfc3ByaW50ZiAocGlwZW5hbWUsICJwdHklZC10by1zbGF2ZSIsIHVu aXQpOworICByZXMgPSBmaGFuZGxlcl9waXBlOjpjcmVhdGUgKCZzZWNfbm9uZSwgJmZyb21fbWFz dGVyLCAmdG9fc2xhdmUsCisJCQkgICAgICAgZmhhbmRsZXJfcHR5X2NvbW1vbjo6cGlwZXNpemUs IHBpcGVuYW1lLCAwKTsKKyAgaWYgKHJlcykKKyAgICB7CisgICAgICBlcnJzdHIgPSAiaW5wdXQg cGlwZSI7CisgICAgICBnb3RvIGVycjsKKyAgICB9CiAKICAgdC5zZXRfZnJvbV9tYXN0ZXIgKGZy b21fbWFzdGVyKTsKICAgdC5zZXRfZnJvbV9tYXN0ZXJfY3lnIChmcm9tX21hc3Rlcl9jeWcpOwog ICB0LnNldF90b19tYXN0ZXIgKHRvX21hc3Rlcik7CiAgIHQuc2V0X3RvX21hc3Rlcl9jeWcgKHRv X21hc3Rlcl9jeWcpOworICB0LndpbnNpemUud3NfY29sID0gODA7CisgIHQud2luc2l6ZS53c19y b3cgPSAyNTsKICAgdC5tYXN0ZXJfcGlkID0gbXlzZWxmLT5waWQ7CiAKICAgZGV2ICgpLnBhcnNl IChERVZfUFRZTV9NQUpPUiwgdW5pdCk7CkBAIC0zNzE3LDYgKzIzODYsNyBAQCBmaGFuZGxlcl9w dHlfbWFzdGVyOjpzZXR1cCAoKQogZXJyOgogICBfX3NldGVycm5vICgpOwogICBjbG9zZV9tYXli ZSAoZnJvbV9zbGF2ZSk7CisgIGNsb3NlX21heWJlICh0b19zbGF2ZSk7CiAgIGNsb3NlX21heWJl IChnZXRfaGFuZGxlICgpKTsKICAgY2xvc2VfbWF5YmUgKGdldF9vdXRwdXRfaGFuZGxlICgpKTsK ICAgY2xvc2VfbWF5YmUgKGlucHV0X2F2YWlsYWJsZV9ldmVudCk7CkBAIC0zNzc2LDkgKzI0NDYs NiBAQCBmaGFuZGxlcl9wdHlfY29tbW9uOjpwcm9jZXNzX29wb3N0X291dHB1dCAoSEFORExFIGgs IGNvbnN0IHZvaWQgKnB0ciwgc3NpemVfdCYgbAogewogICBzc2l6ZV90IHRvd3JpdGUgPSBsZW47 CiAgIEJPT0wgcmVzID0gVFJVRTsKLSAgQk9PTCAoV0lOQVBJICpXcml0ZUZ1bmMpCi0gICAgKEhB TkRMRSwgTFBDVk9JRCwgRFdPUkQsIExQRFdPUkQsIExQT1ZFUkxBUFBFRCk7Ci0gIFdyaXRlRnVu YyA9IFdyaXRlRmlsZV9PcmlnID8gV3JpdGVGaWxlX09yaWcgOiBXcml0ZUZpbGU7CiAgIHdoaWxl ICh0b3dyaXRlKQogICAgIHsKICAgICAgIGlmICghaXNfZWNobykKQEAgLTM4MDEsNyArMjQ2OCw3 IEBAIGZoYW5kbGVyX3B0eV9jb21tb246OnByb2Nlc3Nfb3Bvc3Rfb3V0cHV0IChIQU5ETEUgaCwg Y29uc3Qgdm9pZCAqcHRyLCBzc2l6ZV90JiBsCiAgICAgICBpZiAoIShnZXRfdHR5cCAoKS0+dGku Y19vZmxhZyAmIE9QT1NUKSkJLy8gcmF3IG91dHB1dCBtb2RlCiAJewogCSAgRFdPUkQgbiA9IE1J TiAoT1VUX0JVRkZFUl9TSVpFLCB0b3dyaXRlKTsKLQkgIHJlcyA9IFdyaXRlRnVuYyAoaCwgcHRy LCBuLCAmbiwgTlVMTCk7CisJICByZXMgPSBXcml0ZUZpbGUgKGgsIHB0ciwgbiwgJm4sIE5VTEwp OwogCSAgaWYgKCFyZXMpCiAJICAgIGJyZWFrOwogCSAgcHRyID0gKGNoYXIgKikgcHRyICsgbjsK QEAgLTM4NTEsNyArMjUxOCw3IEBAIGZoYW5kbGVyX3B0eV9jb21tb246OnByb2Nlc3Nfb3Bvc3Rf b3V0cHV0IChIQU5ETEUgaCwgY29uc3Qgdm9pZCAqcHRyLCBzc2l6ZV90JiBsCiAJCSAgYnJlYWs7 CiAJCX0KIAkgICAgfQotCSAgcmVzID0gV3JpdGVGdW5jIChoLCBvdXRidWYsIG4sICZuLCBOVUxM KTsKKwkgIHJlcyA9IFdyaXRlRmlsZSAoaCwgb3V0YnVmLCBuLCAmbiwgTlVMTCk7CiAJICBpZiAo IXJlcykKIAkgICAgYnJlYWs7CiAJICBwdHIgPSAoY2hhciAqKSBwdHIgKyByYzsKQEAgLTM4NjEs MyArMjUyOCwxMjUgQEAgZmhhbmRsZXJfcHR5X2NvbW1vbjo6cHJvY2Vzc19vcG9zdF9vdXRwdXQg KEhBTkRMRSBoLCBjb25zdCB2b2lkICpwdHIsIHNzaXplX3QmIGwKICAgbGVuIC09IHRvd3JpdGU7 CiAgIHJldHVybiByZXM7CiB9CisKK2Jvb2wKK2ZoYW5kbGVyX3B0eV9zbGF2ZTo6c2V0dXBfcHNl dWRvY29uc29sZSAoU1RBUlRVUElORk9FWFcgKnNpKQoreworICBpZiAoZ2V0X3R0eXAgKCktPnBj b25fcGlkICYmIHBpbmZvIChnZXRfdHR5cCAoKS0+cGNvbl9waWQpKQorICAgIHJldHVybiBmYWxz ZTsKKyAgaWYgKGRpc2FibGVfcGNvbikKKyAgICByZXR1cm4gZmFsc2U7CisgIC8qIElmIHRoZSBs ZWdhY3kgY29uc29sZSBtb2RlIGlzIGVuYWJsZWQsIHBzZXVkbyBjb25zb2xlIHNlZW1zCisgICAg IG5vdCB0byB3b3JrIGFzIGV4cGVjdGVkLiBUbyBkZXRlcm1pbmUgY29uc29sZSBtb2RlLCByZWdp c3RyeQorICAgICBrZXkgRm9yY2VWMiBpbiBIS0VZX0NVUlJFTlRfVVNFUlxDb25zb2xlIGlzIGNo ZWNrZWQuICovCisgIHJlZ19rZXkgcmVnIChIS0VZX0NVUlJFTlRfVVNFUiwgS0VZX1JFQUQsIEwi Q29uc29sZSIsIE5VTEwpOworICBpZiAocmVnLmVycm9yICgpKQorICAgIHJldHVybiBmYWxzZTsK KyAgaWYgKHJlZy5nZXRfZHdvcmQgKEwiRm9yY2VWMiIsIDEpID09IDApCisgICAgeworICAgICAg dGVybWlvc19wcmludGYgKCJQc2V1ZG8gY29uc29sZSBpcyBkaXNhYmxlZCAiCisJCSAgICAgICJi ZWNhdXNlIHRoZSBsZWdhY3kgY29uc29sZSBtb2RlIGlzIGVuYWJsZWQuIik7CisgICAgICByZXR1 cm4gZmFsc2U7CisgICAgfQorCisgIENPT1JEIHNpemUgPSB7CisgICAgKFNIT1JUKSBnZXRfdHR5 cCAoKS0+d2luc2l6ZS53c19jb2wsCisgICAgKFNIT1JUKSBnZXRfdHR5cCAoKS0+d2luc2l6ZS53 c19yb3cKKyAgfTsKKyAgU2V0TGFzdEVycm9yIChFUlJPUl9TVUNDRVNTKTsKKyAgSFJFU1VMVCBy ZXMgPSBDcmVhdGVQc2V1ZG9Db25zb2xlIChzaXplLCBnZXRfaGFuZGxlICgpLCBnZXRfb3V0cHV0 X2hhbmRsZSAoKSwKKwkJCQkgICAgIDEsICZnZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZSk7 CisgIGlmIChyZXMgIT0gU19PSyB8fCBHZXRMYXN0RXJyb3IgKCkgPT0gRVJST1JfUFJPQ19OT1Rf Rk9VTkQpCisgICAgeworICAgICAgaWYgKHJlcyAhPSBTX09LKQorCXN5c3RlbV9wcmludGYgKCJD cmVhdGVQc2V1ZG9Db25zb2xlKCkgZmFpbGVkLiAlMDh4ICUwOHhcbiIsCisJCSAgICAgICBHZXRM YXN0RXJyb3IgKCksIHJlcyk7CisgICAgICBnb3RvIGZhbGxiYWNrOworICAgIH0KKworICBTSVpF X1QgYnl0ZXNSZXF1aXJlZDsKKyAgSW5pdGlhbGl6ZVByb2NUaHJlYWRBdHRyaWJ1dGVMaXN0IChO VUxMLCAxLCAwLCAmYnl0ZXNSZXF1aXJlZCk7CisgIFplcm9NZW1vcnkgKHNpLCBzaXplb2YgKCpz aSkpOworICBzaS0+U3RhcnR1cEluZm8uY2IgPSBzaXplb2YgKFNUQVJUVVBJTkZPRVhXKTsKKyAg c2ktPmxwQXR0cmlidXRlTGlzdCA9IChQUFJPQ19USFJFQURfQVRUUklCVVRFX0xJU1QpCisgICAg SGVhcEFsbG9jIChHZXRQcm9jZXNzSGVhcCAoKSwgMCwgYnl0ZXNSZXF1aXJlZCk7CisgIGlmIChz aS0+bHBBdHRyaWJ1dGVMaXN0ID09IE5VTEwpCisgICAgZ290byBjbGVhbnVwX3BzZXVkb19jb25z b2xlOworICBpZiAoIUluaXRpYWxpemVQcm9jVGhyZWFkQXR0cmlidXRlTGlzdCAoc2ktPmxwQXR0 cmlidXRlTGlzdCwKKwkJCQkJICAxLCAwLCAmYnl0ZXNSZXF1aXJlZCkpCisgICAgZ290byBjbGVh bnVwX2hlYXA7CisgIGlmICghVXBkYXRlUHJvY1RocmVhZEF0dHJpYnV0ZSAoc2ktPmxwQXR0cmli dXRlTGlzdCwKKwkJCQkgIDAsCisJCQkJICBQUk9DX1RIUkVBRF9BVFRSSUJVVEVfUFNFVURPQ09O U09MRSwKKwkJCQkgIGdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xlLAorCQkJCSAgc2l6ZW9m IChnZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZSksCisJCQkJICBOVUxMLCBOVUxMKSkKKyAg ICBnb3RvIGNsZWFudXBfaGVhcDsKKyAgc2ktPlN0YXJ0dXBJbmZvLmR3RmxhZ3MgPSBTVEFSVEZf VVNFU1RESEFORExFUzsKKyAgc2ktPlN0YXJ0dXBJbmZvLmhTdGRJbnB1dCA9IE5VTEw7CisgIHNp LT5TdGFydHVwSW5mby5oU3RkT3V0cHV0ID0gTlVMTDsKKyAgc2ktPlN0YXJ0dXBJbmZvLmhTdGRF cnJvciA9IE5VTEw7CisKKyAgeworICAgIGZoYW5kbGVyX2Jhc2UgKmZoMCA9IDo6Y3lnaGVhcC0+ ZmR0YWJbMF07CisgICAgaWYgKGZoMCAmJiBmaDAtPmdldF9kZXZpY2UgKCkgIT0gZ2V0X2Rldmlj ZSAoKSkKKyAgICAgIHNpLT5TdGFydHVwSW5mby5oU3RkSW5wdXQgPSBmaDAtPmdldF9oYW5kbGUg KCk7CisgICAgZmhhbmRsZXJfYmFzZSAqZmgxID0gOjpjeWdoZWFwLT5mZHRhYlsxXTsKKyAgICBp ZiAoZmgxICYmIGZoMS0+Z2V0X2RldmljZSAoKSAhPSBnZXRfZGV2aWNlICgpKQorICAgICAgc2kt PlN0YXJ0dXBJbmZvLmhTdGRPdXRwdXQgPSBmaDEtPmdldF9vdXRwdXRfaGFuZGxlICgpOworICAg IGZoYW5kbGVyX2Jhc2UgKmZoMiA9IDo6Y3lnaGVhcC0+ZmR0YWJbMl07CisgICAgaWYgKGZoMiAm JiBmaDItPmdldF9kZXZpY2UgKCkgIT0gZ2V0X2RldmljZSAoKSkKKyAgICAgIHNpLT5TdGFydHVw SW5mby5oU3RkRXJyb3IgPSBmaDItPmdldF9vdXRwdXRfaGFuZGxlICgpOworCisgICAgaWYgKGZo MCAmJiBmaDAtPmdldF9tYWpvciAoKSA9PSBERVZfUFRZU19NQUpPUikKKyAgICAgIHsKKwlmaGFu ZGxlcl9wdHlfc2xhdmUgKnB0eXMgPSAoZmhhbmRsZXJfcHR5X3NsYXZlICopIGZoMDsKKwlwdHlz LT5nZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25faW4gPSB0cnVlOworCWlmIChwdHlzLT5nZXRf dHR5cCAoKS0+cGNvbl9waWQgPT0gMCB8fAorCSAgICAhcGluZm8gKHB0eXMtPmdldF90dHlwICgp LT5wY29uX3BpZCkpCisJICBwdHlzLT5nZXRfdHR5cCAoKS0+cGNvbl9waWQgPSBteXNlbGYtPnBp ZDsKKyAgICAgIH0KKyAgfQorCisgIGlmIChnZXRfdHR5cCAoKS0+cGNvbl9waWQgPT0gMCB8fCAh cGluZm8gKGdldF90dHlwICgpLT5wY29uX3BpZCkpCisgICAgZ2V0X3R0eXAgKCktPnBjb25fcGlk ID0gbXlzZWxmLT5waWQ7CisKKyAgaWYgKGdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xlICYm IGdldF90dHlwICgpLT5wY29uX3BpZCA9PSBteXNlbGYtPnBpZCkKKyAgICB7CisgICAgICBIUENP Tl9JTlRFUk5BTCAqaHAgPSAoSFBDT05fSU5URVJOQUwgKikgZ2V0X3R0eXAgKCktPmhfcHNldWRv X2NvbnNvbGU7CisgICAgICBnZXRfdHR5cCAoKS0+aF9wY29uX3dyaXRlX3BpcGUgPSBocC0+aFdy aXRlUGlwZTsKKyAgICB9CisgIGdldF90dHlwICgpLT5wY29uX3N0YXJ0ID0gdHJ1ZTsKKyAgcmV0 dXJuIHRydWU7CisKK2NsZWFudXBfaGVhcDoKKyAgSGVhcEZyZWUgKEdldFByb2Nlc3NIZWFwICgp LCAwLCBzaS0+bHBBdHRyaWJ1dGVMaXN0KTsKK2NsZWFudXBfcHNldWRvX2NvbnNvbGU6CisgIGlm IChnZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZSkKKyAgICB7CisgICAgICBIUENPTl9JTlRF Uk5BTCAqaHAgPSAoSFBDT05fSU5URVJOQUwgKikgZ2V0X3R0eXAgKCktPmhfcHNldWRvX2NvbnNv bGU7CisgICAgICBIQU5ETEUgdG1wID0gaHAtPmhDb25Ib3N0UHJvY2VzczsKKyAgICAgIENsb3Nl UHNldWRvQ29uc29sZSAoZ2V0X3R0eXAgKCktPmhfcHNldWRvX2NvbnNvbGUpOworICAgICAgQ2xv c2VIYW5kbGUgKHRtcCk7CisgICAgfQorZmFsbGJhY2s6CisgIGdldF90dHlwICgpLT5oX3BzZXVk b19jb25zb2xlID0gTlVMTDsKKyAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkCitmaGFuZGxlcl9w dHlfc2xhdmU6OmNsb3NlX3BzZXVkb2NvbnNvbGUgKHZvaWQpCit7CisgIGlmIChnZXRfdHR5cCAo KS0+aF9wc2V1ZG9fY29uc29sZSkKKyAgICB7CisgICAgICBnZXRfdHR5cCAoKS0+d2FpdF9wY29u X2Z3ZCAoKTsKKyAgICAgIEhQQ09OX0lOVEVSTkFMICpocCA9IChIUENPTl9JTlRFUk5BTCAqKSBn ZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZTsKKyAgICAgIEhBTkRMRSB0bXAgPSBocC0+aENv bkhvc3RQcm9jZXNzOworICAgICAgQ2xvc2VQc2V1ZG9Db25zb2xlIChnZXRfdHR5cCAoKS0+aF9w c2V1ZG9fY29uc29sZSk7CisgICAgICBDbG9zZUhhbmRsZSAodG1wKTsKKyAgICAgIGdldF90dHlw ICgpLT5oX3BzZXVkb19jb25zb2xlID0gTlVMTDsKKyAgICAgIGdldF90dHlwICgpLT5zd2l0Y2hf dG9fcGNvbl9pbiA9IGZhbHNlOworICAgICAgZ2V0X3R0eXAgKCktPnBjb25fcGlkID0gMDsKKyAg ICAgIGdldF90dHlwICgpLT5wY29uX3N0YXJ0ID0gZmFsc2U7CisgICAgfQorfQpkaWZmIC0tZ2l0 IGEvd2luc3VwL2N5Z3dpbi9mb3JrLmNjIGIvd2luc3VwL2N5Z3dpbi9mb3JrLmNjCmluZGV4IDY5 MWQwODEzNy4uNmNhNGI1ZjI5IDEwMDY0NAotLS0gYS93aW5zdXAvY3lnd2luL2ZvcmsuY2MKKysr IGIvd2luc3VwL2N5Z3dpbi9mb3JrLmNjCkBAIC0xMzQsMzYgKzEzNCw2IEBAIGNoaWxkX2luZm86 OnByZWZvcmsgKGJvb2wgZGV0YWNoZWQpCiBpbnQgX19zdGRjYWxsCiBmcm9rOjpjaGlsZCAodm9s YXRpbGUgY2hhciAqIHZvbGF0aWxlIGhlcmUpCiB7Ci0gIGN5Z2hlYXBfZmRlbnVtIGNmZCAoZmFs c2UpOwotICB3aGlsZSAoY2ZkLm5leHQgKCkgPj0gMCkKLSAgICBpZiAoY2ZkLT5nZXRfbWFqb3Ig KCkgPT0gREVWX1BUWU1fTUFKT1IpCi0gICAgICB7Ci0JZmhhbmRsZXJfYmFzZSAqZmggPSBjZmQ7 Ci0JZmhhbmRsZXJfcHR5X21hc3RlciAqcHR5bSA9IChmaGFuZGxlcl9wdHlfbWFzdGVyICopIGZo OwotCWlmIChwdHltLT5nZXRfcHNldWRvX2NvbnNvbGUgKCkpCi0JICB7Ci0JICAgIGRlYnVnX3By aW50ZiAoImZvdW5kIGEgUFRZIG1hc3RlciAlZDogaGVscGVyX1BJRD0lZCIsCi0JCQkgIHB0eW0t PmdldF9taW5vciAoKSwgcHR5bS0+Z2V0X2hlbHBlcl9wcm9jZXNzX2lkICgpKTsKLQkgICAgaWYg KGZoYW5kbGVyX2NvbnNvbGU6OmdldF9jb25zb2xlX3Byb2Nlc3NfaWQgKAotCQkJCXB0eW0tPmdl dF9oZWxwZXJfcHJvY2Vzc19pZCAoKSwgdHJ1ZSkpCi0JICAgICAgLyogQWxyZWFkeSBhdHRhY2hl ZCAqLwotCSAgICAgIGJyZWFrOwotCSAgICBlbHNlCi0JICAgICAgewotCQlpZiAocHR5bS0+YXR0 YWNoX3Bjb25faW5fZm9yayAoKSkKLQkJICB7Ci0JCSAgICBGcmVlQ29uc29sZSAoKTsKLQkJICAg IGlmICghQXR0YWNoQ29uc29sZSAocHR5bS0+Z2V0X2hlbHBlcl9wcm9jZXNzX2lkICgpKSkKLQkJ ICAgICAgLyogRXJyb3IgKi87Ci0JCSAgICBlbHNlCi0JCSAgICAgIGJyZWFrOwotCQkgIH0KLQkg ICAgICB9Ci0JICB9Ci0gICAgICB9Ci0gIGV4dGVybiB2b2lkIGNsZWFyX3Bjb25fYXR0YWNoZWRf dG8gKHZvaWQpOyAvKiBmaGFuZGxlcl90dHkuY2MgKi8KLSAgY2xlYXJfcGNvbl9hdHRhY2hlZF90 byAoKTsKLQogICBIQU5ETEUmIGhQYXJlbnQgPSBjaC5wYXJlbnQ7CiAKICAgc3luY193aXRoX3Bh cmVudCAoImFmdGVyIGxvbmdqbXAiLCB0cnVlKTsKZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4v c2VsZWN0LmNjIGIvd2luc3VwL2N5Z3dpbi9zZWxlY3QuY2MKaW5kZXggM2YzZjMzZmI1Li45M2Fj ZGQ4OWEgMTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3aW4vc2VsZWN0LmNjCisrKyBiL3dpbnN1cC9j eWd3aW4vc2VsZWN0LmNjCkBAIC0xMjEzLDggKzEyMTMsNyBAQCB2ZXJpZnlfdHR5X3NsYXZlIChz ZWxlY3RfcmVjb3JkICptZSwgZmRfc2V0ICpyZWFkZmRzLCBmZF9zZXQgKndyaXRlZmRzLAogCSAg IGZkX3NldCAqZXhjZXB0ZmRzKQogewogICBmaGFuZGxlcl9wdHlfc2xhdmUgKnB0eXMgPSAoZmhh bmRsZXJfcHR5X3NsYXZlICopIG1lLT5maDsKLSAgaWYgKG1lLT5yZWFkX3NlbGVjdGVkICYmICFw dHlzLT50b19iZV9yZWFkX2Zyb21fcGNvbiAoKSAmJgotICAgICAgSXNFdmVudFNpZ25hbGxlZCAo cHR5cy0+aW5wdXRfYXZhaWxhYmxlX2V2ZW50KSkKKyAgaWYgKG1lLT5yZWFkX3NlbGVjdGVkICYm IElzRXZlbnRTaWduYWxsZWQgKHB0eXMtPmlucHV0X2F2YWlsYWJsZV9ldmVudCkpCiAgICAgbWUt PnJlYWRfcmVhZHkgPSB0cnVlOwogICByZXR1cm4gc2V0X2JpdHMgKG1lLCByZWFkZmRzLCB3cml0 ZWZkcywgZXhjZXB0ZmRzKTsKIH0KQEAgLTEyMjcsOCArMTIyNiw2IEBAIHBlZWtfcHR5X3NsYXZl IChzZWxlY3RfcmVjb3JkICpzLCBib29sIGZyb21fc2VsZWN0KQogICBmaGFuZGxlcl9wdHlfc2xh dmUgKnB0eXMgPSAoZmhhbmRsZXJfcHR5X3NsYXZlICopIGZoOwogCiAgIHB0eXMtPnJlc2V0X3N3 aXRjaF90b19wY29uICgpOwotICBpZiAocHR5cy0+dG9fYmVfcmVhZF9mcm9tX3Bjb24gKCkpCi0g ICAgcHR5cy0+dXBkYXRlX3Bjb25faW5wdXRfc3RhdGUgKHRydWUpOwogCiAgIGlmIChzLT5yZWFk X3NlbGVjdGVkKQogICAgIHsKZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4vc21hbGxwcmludC5j YyBiL3dpbnN1cC9jeWd3aW4vc21hbGxwcmludC5jYwppbmRleCAyNmQzNGQ5ZTQuLmYyMDhhMDU3 YSAxMDA2NDQKLS0tIGEvd2luc3VwL2N5Z3dpbi9zbWFsbHByaW50LmNjCisrKyBiL3dpbnN1cC9j eWd3aW4vc21hbGxwcmludC5jYwpAQCAtNDA1LDcgKzQwNSw2IEBAIHNtYWxsX3ByaW50ZiAoY29u c3QgY2hhciAqZm10LCAuLi4pCiAgIGNvdW50ID0gX19zbWFsbF92c3ByaW50ZiAoYnVmLCBmbXQs IGFwKTsKICAgdmFfZW5kIChhcCk7CiAKLSAgc2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNv biAoR2V0U3RkSGFuZGxlIChTVERfRVJST1JfSEFORExFKSk7CiAgIFdyaXRlRmlsZSAoR2V0U3Rk SGFuZGxlIChTVERfRVJST1JfSEFORExFKSwgYnVmLCBjb3VudCwgJmRvbmUsIE5VTEwpOwogICBG bHVzaEZpbGVCdWZmZXJzIChHZXRTdGRIYW5kbGUgKFNURF9FUlJPUl9IQU5ETEUpKTsKIH0KQEAg LTQzMiw3ICs0MzEsNiBAQCBjb25zb2xlX3ByaW50ZiAoY29uc3QgY2hhciAqZm10LCAuLi4pCiAg IGNvdW50ID0gX19zbWFsbF92c3ByaW50ZiAoYnVmLCBmbXQsIGFwKTsKICAgdmFfZW5kIChhcCk7 CiAKLSAgc2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoY29uc29sZV9oYW5kbGUpOwog ICBXcml0ZUZpbGUgKGNvbnNvbGVfaGFuZGxlLCBidWYsIGNvdW50LCAmZG9uZSwgTlVMTCk7CiAg IEZsdXNoRmlsZUJ1ZmZlcnMgKGNvbnNvbGVfaGFuZGxlKTsKIH0KZGlmZiAtLWdpdCBhL3dpbnN1 cC9jeWd3aW4vc3Bhd24uY2MgYi93aW5zdXAvY3lnd2luL3NwYXduLmNjCmluZGV4IDNlOGM4MzY3 YS4uYTMwNzE4ODRlIDEwMDY0NAotLS0gYS93aW5zdXAvY3lnd2luL3NwYXduLmNjCisrKyBiL3dp bnN1cC9jeWd3aW4vc3Bhd24uY2MKQEAgLTE5NCw2ICsxOTQsMjQgQEAgaGFuZGxlIChpbnQgZmQs IGJvb2wgd3JpdGluZykKICAgcmV0dXJuIGg7CiB9CiAKK3N0YXRpYyBib29sCitpc19jb25zb2xl X2FwcCAoV0NIQVIgKmZpbGVuYW1lKQoreworICBIQU5ETEUgaDsKKyAgY29uc3QgaW50IGlkX29m ZnNldCA9IDkyOworICBoID0gQ3JlYXRlRmlsZVcgKGZpbGVuYW1lLCBHRU5FUklDX1JFQUQsIEZJ TEVfU0hBUkVfUkVBRCwKKwkJICBOVUxMLCBPUEVOX0VYSVNUSU5HLCAwLCBOVUxMKTsKKyAgY2hh ciBidWZbMTAyNF07CisgIERXT1JEIG47CisgIFJlYWRGaWxlIChoLCBidWYsIHNpemVvZiAoYnVm KSwgJm4sIDApOworICBDbG9zZUhhbmRsZSAoaCk7CisgIGNoYXIgKnAgPSAoY2hhciAqKSBtZW1t ZW0gKGJ1ZiwgbiwgIlBFXDBcMCIsIDQpOworICBpZiAocCAmJiBwICsgaWRfb2Zmc2V0IDw9IGJ1 ZiArIG4pCisgICAgcmV0dXJuIHBbaWRfb2Zmc2V0XSA9PSAnXDAwMyc7IC8qIDAyOiBHVUksIDAz OiBjb25zb2xlICovCisgIGVsc2UKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIGludAogaXNjbWQg KGNvbnN0IGNoYXIgKmFyZ3YwLCBjb25zdCBjaGFyICp3aGF0KQogewpAQCAtMjU5LDggKzI3Nyw2 IEBAIGNoaWxkX2luZm9fc3Bhd246OndvcmtlciAoY29uc3QgY2hhciAqcHJvZ19hcmcsIGNvbnN0 IGNoYXIgKmNvbnN0ICphcmd2LAogewogICBib29sIHJjOwogICBpbnQgcmVzID0gLTE7Ci0gIERX T1JEIHBpZF9yZXN0b3JlID0gMDsKLSAgYm9vbCBhdHRhY2hfdG9fY29uc29sZSA9IGZhbHNlOwog ICBwaWRfdCBjdHR5X3BnaWQgPSAwOwogCiAgIC8qIFNlYXJjaCBmb3IgQ1RUWSBhbmQgcmV0cmll dmUgaXRzIFBHSUQgKi8KQEAgLTU4MCw5ICs1OTYsNyBAQCBjaGlsZF9pbmZvX3NwYXduOjp3b3Jr ZXIgKGNvbnN0IGNoYXIgKnByb2dfYXJnLCBjb25zdCBjaGFyICpjb25zdCAqYXJndiwKIAkJCSBQ Uk9DRVNTX1FVRVJZX0xJTUlURURfSU5GT1JNQVRJT04pKQogCXNhID0gJnNlY19ub25lX25paDsK IAotICAgICAgLyogQXR0YWNoIHRvIHBzZXVkbyBjb25zb2xlIGlmIHB0eSBzYWx2ZSBpcyB1c2Vk ICovCi0gICAgICBwaWRfcmVzdG9yZSA9IGZoYW5kbGVyX2NvbnNvbGU6OmdldF9jb25zb2xlX3By b2Nlc3NfaWQKLQkoR2V0Q3VycmVudFByb2Nlc3NJZCAoKSwgZmFsc2UpOworICAgICAgZmhhbmRs ZXJfcHR5X3NsYXZlICpwdHlzX3ByaW1hcnkgPSBOVUxMOwogICAgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCAzOyBpICsrKQogCXsKIAkgIGNvbnN0IGludCBjaGtfb3JkZXJbXSA9IHsxLCAwLCAyfTsK QEAgLTU5MSwyOSArNjA1LDExIEBAIGNoaWxkX2luZm9fc3Bhd246OndvcmtlciAoY29uc3QgY2hh ciAqcHJvZ19hcmcsIGNvbnN0IGNoYXIgKmNvbnN0ICphcmd2LAogCSAgaWYgKGZoICYmIGZoLT5n ZXRfbWFqb3IgKCkgPT0gREVWX1BUWVNfTUFKT1IpCiAJICAgIHsKIAkgICAgICBmaGFuZGxlcl9w dHlfc2xhdmUgKnB0eXMgPSAoZmhhbmRsZXJfcHR5X3NsYXZlICopIGZoOwotCSAgICAgIGlmIChw dHlzLT5nZXRfcHNldWRvX2NvbnNvbGUgKCkpCi0JCXsKLQkJICBEV09SRCBoZWxwZXJfcHJvY2Vz c19pZCA9IHB0eXMtPmdldF9oZWxwZXJfcHJvY2Vzc19pZCAoKTsKLQkJICBkZWJ1Z19wcmludGYg KCJmb3VuZCBhIFBUWSBzbGF2ZSAlZDogaGVscGVyX1BJRD0lZCIsCi0JCQkJICAgIGZoLT5nZXRf bWlub3IgKCksIGhlbHBlcl9wcm9jZXNzX2lkKTsKLQkJICBpZiAoZmhhbmRsZXJfY29uc29sZTo6 Z2V0X2NvbnNvbGVfcHJvY2Vzc19pZAotCQkJCQkgICAgICAoaGVscGVyX3Byb2Nlc3NfaWQsIHRy dWUpKQotCQkgICAgLyogQWxyZWFkeSBhdHRhY2hlZCAqLwotCQkgICAgYXR0YWNoX3RvX2NvbnNv bGUgPSB0cnVlOwotCQkgIGVsc2UgaWYgKCFhdHRhY2hfdG9fY29uc29sZSkKLQkJICAgIHsKLQkJ ICAgICAgRnJlZUNvbnNvbGUgKCk7Ci0JCSAgICAgIGlmIChBdHRhY2hDb25zb2xlIChoZWxwZXJf cHJvY2Vzc19pZCkpCi0JCQlhdHRhY2hfdG9fY29uc29sZSA9IHRydWU7Ci0JCSAgICB9Ci0JCSAg cHR5cy0+Zml4dXBfYWZ0ZXJfYXR0YWNoICghaXNjeWd3aW4gKCksIGZkKTsKLQkJICBpZiAobW9k ZSA9PSBfUF9PVkVSTEFZKQotCQkgICAgcHR5cy0+c2V0X2ZyZWVjb25zb2xlX29uX2Nsb3NlIChp c2N5Z3dpbiAoKSk7Ci0JCX0KKwkgICAgICBpZiAocHR5c19wcmltYXJ5ID09IE5VTEwpCisJCXB0 eXNfcHJpbWFyeSA9IHB0eXM7CiAJICAgIH0KIAkgIGVsc2UgaWYgKGZoICYmIGZoLT5nZXRfbWFq b3IgKCkgPT0gREVWX0NPTlNfTUFKT1IpCiAJICAgIHsKLQkgICAgICBhdHRhY2hfdG9fY29uc29s ZSA9IHRydWU7CiAJICAgICAgZmhhbmRsZXJfY29uc29sZSAqY29ucyA9IChmaGFuZGxlcl9jb25z b2xlICopIGZoOwogCSAgICAgIGlmICh3aW5jYXAuaGFzX2Nvbl8yNGJpdF9jb2xvcnMgKCkgJiYg IWlzY3lnd2luICgpKQogCQlpZiAoZmQgPT0gMSB8fCBmZCA9PSAyKQpAQCAtNjMyLDYgKzYyOCwx OCBAQCBjaGlsZF9pbmZvX3NwYXduOjp3b3JrZXIgKGNvbnN0IGNoYXIgKnByb2dfYXJnLCBjb25z dCBjaGFyICpjb25zdCAqYXJndiwKICAgICAgIGlmICghaXNjeWd3aW4gKCkpCiAJaW5pdF9jb25z b2xlX2hhbmRsZXIgKG15c2VsZi0+Y3R0eSA+IDApOwogCisgICAgICBib29sIGVuYWJsZV9wY29u ID0gZmFsc2U7CisgICAgICBTVEFSVFVQSU5GT0VYVyBzaV9wY29uOworICAgICAgWmVyb01lbW9y eSAoJnNpX3Bjb24sIHNpemVvZiAoc2lfcGNvbikpOworICAgICAgU1RBUlRVUElORk9XICpzaV90 bXAgPSAmc2k7CisgICAgICBpZiAoIWlzY3lnd2luICgpICYmIHB0eXNfcHJpbWFyeSAmJiBpc19j b25zb2xlX2FwcCAocnVucGF0aCkpCisJaWYgKHB0eXNfcHJpbWFyeS0+c2V0dXBfcHNldWRvY29u c29sZSAoJnNpX3Bjb24pKQorCSAgeworCSAgICBjX2ZsYWdzIHw9IEVYVEVOREVEX1NUQVJUVVBJ TkZPX1BSRVNFTlQ7CisJICAgIHNpX3RtcCA9ICZzaV9wY29uLlN0YXJ0dXBJbmZvOworCSAgICBl bmFibGVfcGNvbiA9IHRydWU7CisJICB9CisKICAgICBsb29wOgogICAgICAgLyogV2hlbiBydWlk ICE9IGV1aWQgd2UgY3JlYXRlIHRoZSBuZXcgcHJvY2VzcyB1bmRlciB0aGUgY3VycmVudCBvcmln aW5hbAogCSBhY2NvdW50IGFuZCBpbXBlcnNvbmF0ZSBpbiBjaGlsZCwgdGhpcyB3YXkgbWFpbnRh aW5pbmcgdGhlIGRpZmZlcmVudApAQCAtNjYwLDcgKzY2OCw3IEBAIGNoaWxkX2luZm9fc3Bhd246 OndvcmtlciAoY29uc3QgY2hhciAqcHJvZ19hcmcsIGNvbnN0IGNoYXIgKmNvbnN0ICphcmd2LAog CQkJICAgICAgIGNfZmxhZ3MsCiAJCQkgICAgICAgZW52YmxvY2ssCS8qIGVudmlyb25tZW50ICov CiAJCQkgICAgICAgTlVMTCwKLQkJCSAgICAgICAmc2ksCisJCQkgICAgICAgc2lfdG1wLAogCQkJ ICAgICAgICZwaSk7CiAJfQogICAgICAgZWxzZQpAQCAtNzE0LDcgKzcyMiw3IEBAIGNoaWxkX2lu Zm9fc3Bhd246OndvcmtlciAoY29uc3QgY2hhciAqcHJvZ19hcmcsIGNvbnN0IGNoYXIgKmNvbnN0 ICphcmd2LAogCQkJICAgICAgIGNfZmxhZ3MsCiAJCQkgICAgICAgZW52YmxvY2ssCS8qIGVudmly b25tZW50ICovCiAJCQkgICAgICAgTlVMTCwKLQkJCSAgICAgICAmc2ksCisJCQkgICAgICAgc2lf dG1wLAogCQkJICAgICAgICZwaSk7CiAJICBpZiAoaHdzdCkKIAkgICAgewpAQCAtNzI3LDYgKzcz NSwxMSBAQCBjaGlsZF9pbmZvX3NwYXduOjp3b3JrZXIgKGNvbnN0IGNoYXIgKnByb2dfYXJnLCBj b25zdCBjaGFyICpjb25zdCAqYXJndiwKIAkgICAgICBDbG9zZURlc2t0b3AgKGhkc2spOwogCSAg ICB9CiAJfQorICAgICAgaWYgKGVuYWJsZV9wY29uKQorCXsKKwkgIERlbGV0ZVByb2NUaHJlYWRB dHRyaWJ1dGVMaXN0IChzaV9wY29uLmxwQXR0cmlidXRlTGlzdCk7CisJICBIZWFwRnJlZSAoR2V0 UHJvY2Vzc0hlYXAgKCksIDAsIHNpX3Bjb24ubHBBdHRyaWJ1dGVMaXN0KTsKKwl9CiAKICAgICAg IGlmIChtb2RlICE9IF9QX09WRVJMQVkpCiAJU2V0SGFuZGxlSW5mb3JtYXRpb24gKG15X3dyX3By b2NfcGlwZSwgSEFORExFX0ZMQUdfSU5IRVJJVCwKQEAgLTg5Nyw2ICs5MTAsMTEgQEAgY2hpbGRf aW5mb19zcGF3bjo6d29ya2VyIChjb25zdCBjaGFyICpwcm9nX2FyZywgY29uc3QgY2hhciAqY29u c3QgKmFyZ3YsCiAJCSAgJiYgV2FpdEZvclNpbmdsZU9iamVjdCAocGkuaFByb2Nlc3MsIDApID09 IFdBSVRfVElNRU9VVCkKIAkJd2FpdF9mb3JfbXlzZWxmICgpOwogCSAgICB9CisJICBpZiAoZW5h YmxlX3Bjb24pCisJICAgIHsKKwkgICAgICBXYWl0Rm9yU2luZ2xlT2JqZWN0IChwaS5oUHJvY2Vz cywgSU5GSU5JVEUpOworCSAgICAgIHB0eXNfcHJpbWFyeS0+Y2xvc2VfcHNldWRvY29uc29sZSAo KTsKKwkgICAgfQogCSAgbXlzZWxmLmV4aXQgKEVYSVRDT0RFX05PU0VUKTsKIAkgIGJyZWFrOwog CWNhc2UgX1BfV0FJVDoKQEAgLTkzMCwyMSArOTQ4LDYgQEAgY2hpbGRfaW5mb19zcGF3bjo6d29y a2VyIChjb25zdCBjaGFyICpwcm9nX2FyZywgY29uc3QgY2hhciAqY29uc3QgKmFyZ3YsCiAgIGlm IChlbnZibG9jaykKICAgICBmcmVlIChlbnZibG9jayk7CiAKLSAgaWYgKGF0dGFjaF90b19jb25z b2xlICYmIHBpZF9yZXN0b3JlKQotICAgIHsKLSAgICAgIEZyZWVDb25zb2xlICgpOwotICAgICAg QXR0YWNoQ29uc29sZSAocGlkX3Jlc3RvcmUpOwotICAgICAgY3lnaGVhcF9mZGVudW0gY2ZkIChm YWxzZSk7Ci0gICAgICBpbnQgZmQ7Ci0gICAgICB3aGlsZSAoKGZkID0gY2ZkLm5leHQgKCkpID49 IDApCi0JaWYgKGNmZC0+Z2V0X21ham9yICgpID09IERFVl9QVFlTX01BSk9SKQotCSAgewotCSAg ICBmaGFuZGxlcl9wdHlfc2xhdmUgKnB0eXMgPQotCSAgICAgIChmaGFuZGxlcl9wdHlfc2xhdmUg KikgKGZoYW5kbGVyX2Jhc2UgKikgY2ZkOwotCSAgICBwdHlzLT5maXh1cF9hZnRlcl9hdHRhY2gg KGZhbHNlLCBmZCk7Ci0JICB9Ci0gICAgfQotCiAgIHJldHVybiAoaW50KSByZXM7CiB9CiAKZGlm ZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4vc3RyYWNlLmNjIGIvd2luc3VwL2N5Z3dpbi9zdHJhY2Uu Y2MKaW5kZXggZjBhZWYzYTM2Li4zNWY4YTU5YWUgMTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3aW4v c3RyYWNlLmNjCisrKyBiL3dpbnN1cC9jeWd3aW4vc3RyYWNlLmNjCkBAIC0yNjQsNyArMjY0LDYg QEAgc3RyYWNlOjp2cHJudGYgKHVuc2lnbmVkIGNhdGVnb3J5LCBjb25zdCBjaGFyICpmdW5jLCBj b25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXAKICAgaWYgKGNhdGVnb3J5ICYgX1NUUkFDRV9TWVNU RU0pCiAgICAgewogICAgICAgRFdPUkQgZG9uZTsKLSAgICAgIHNldF9pc2h5YnJpZF9hbmRfc3dp dGNoX3RvX3Bjb24gKEdldFN0ZEhhbmRsZSAoU1REX0VSUk9SX0hBTkRMRSkpOwogICAgICAgV3Jp dGVGaWxlIChHZXRTdGRIYW5kbGUgKFNURF9FUlJPUl9IQU5ETEUpLCBidWYsIGxlbiwgJmRvbmUs IDApOwogICAgICAgRmx1c2hGaWxlQnVmZmVycyAoR2V0U3RkSGFuZGxlIChTVERfRVJST1JfSEFO RExFKSk7CiAgICAgICAvKiBNYWtlIHN1cmUgdGhhdCB0aGUgbWVzc2FnZSBzaG93cyB1cCBvbiB0 aGUgc2NyZWVuLCB0b28sIHNpbmNlIHRoaXMgaXMKQEAgLTI3Niw3ICsyNzUsNiBAQCBzdHJhY2U6 OnZwcm50ZiAodW5zaWduZWQgY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmZ1bmMsIGNvbnN0IGNoYXIg KmZtdCwgdmFfbGlzdCBhcAogCQkJCSAmc2VjX25vbmUsIE9QRU5fRVhJU1RJTkcsIDAsIDApOwog CSAgaWYgKGggIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCiAJICAgIHsKLQkgICAgICBzZXRfaXNo eWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChoKTsKIAkgICAgICBXcml0ZUZpbGUgKGgsIGJ1Ziwg bGVuLCAmZG9uZSwgMCk7CiAJICAgICAgQ2xvc2VIYW5kbGUgKGgpOwogCSAgICB9CmRpZmYgLS1n aXQgYS93aW5zdXAvY3lnd2luL3R0eS5jYyBiL3dpbnN1cC9jeWd3aW4vdHR5LmNjCmluZGV4IDRj YjY4Zjc3Ni4uZDYwZjI3NTQ1IDEwMDY0NAotLS0gYS93aW5zdXAvY3lnd2luL3R0eS5jYworKysg Yi93aW5zdXAvY3lnd2luL3R0eS5jYwpAQCAtMjM0LDIwICsyMzQsMTQgQEAgdHR5Ojppbml0ICgp CiAgIHdhc19vcGVuZWQgPSBmYWxzZTsKICAgbWFzdGVyX3BpZCA9IDA7CiAgIGlzX2NvbnNvbGUg PSBmYWxzZTsKLSAgYXR0YWNoX3Bjb25faW5fZm9yayA9IGZhbHNlOwotICBoX3BzZXVkb19jb25z b2xlID0gTlVMTDsKICAgY29sdW1uID0gMDsKKyAgaF9wc2V1ZG9fY29uc29sZSA9IE5VTEw7CiAg IHN3aXRjaF90b19wY29uX2luID0gZmFsc2U7Ci0gIHN3aXRjaF90b19wY29uX291dCA9IGZhbHNl OwotICBzY3JlZW5fYWx0ZXJuYXRlZCA9IGZhbHNlOwogICBtYXNrX3N3aXRjaF90b19wY29uX2lu ID0gZmFsc2U7CiAgIHBjb25fcGlkID0gMDsKICAgdGVybV9jb2RlX3BhZ2UgPSAwOwotICBuZWVk X3JlZHJhd19zY3JlZW4gPSB0cnVlOwogICBwY29uX2xhc3RfdGltZSA9IDA7Ci0gIHBjb25faW5f ZW1wdHkgPSB0cnVlOwotICByZXFfdHJhbnNmZXJfaW5wdXRfdG9fcGNvbiA9IGZhbHNlOwotICBy ZXFfZmx1c2hfcGNvbl9pbnB1dCA9IGZhbHNlOworICBwY29uX3N0YXJ0ID0gZmFsc2U7CiB9CiAK IEhBTkRMRQpAQCAtMjkzLDE2ICsyODcsNiBAQCB0dHlfbWluOjp0dHluYW1lICgpCiAgIHJldHVy biBkLm5hbWUgKCk7CiB9CiAKLXZvaWQKLXR0eTo6c2V0X3N3aXRjaF90b19wY29uX291dCAoYm9v bCB2KQotewotICBpZiAoc3dpdGNoX3RvX3Bjb25fb3V0ICE9IHYpCi0gICAgewotICAgICAgd2Fp dF9wY29uX2Z3ZCAoKTsKLSAgICAgIHN3aXRjaF90b19wY29uX291dCA9IHY7Ci0gICAgfQotfQot CiB2b2lkCiB0dHk6OndhaXRfcGNvbl9md2QgKHZvaWQpCiB7CmRpZmYgLS1naXQgYS93aW5zdXAv Y3lnd2luL3R0eS5oIGIvd2luc3VwL2N5Z3dpbi90dHkuaAppbmRleCA5MjBlMzJiMTYuLmM0OTFk Mzg5MSAxMDA2NDQKLS0tIGEvd2luc3VwL2N5Z3dpbi90dHkuaAorKysgYi93aW5zdXAvY3lnd2lu L3R0eS5oCkBAIC05NCwyMSArOTQsMTMgQEAgcHJpdmF0ZToKICAgSEFORExFIF90b19tYXN0ZXI7 CiAgIEhBTkRMRSBfdG9fbWFzdGVyX2N5ZzsKICAgSFBDT04gaF9wc2V1ZG9fY29uc29sZTsKLSAg SEFORExFIGhfaGVscGVyX3Byb2Nlc3M7Ci0gIERXT1JEIGhlbHBlcl9wcm9jZXNzX2lkOwotICBI QU5ETEUgaF9oZWxwZXJfZ29vZGJ5ZTsKLSAgYm9vbCBhdHRhY2hfcGNvbl9pbl9mb3JrOworICBi b29sIHBjb25fc3RhcnQ7CiAgIGJvb2wgc3dpdGNoX3RvX3Bjb25faW47Ci0gIGJvb2wgc3dpdGNo X3RvX3Bjb25fb3V0OwotICBib29sIHNjcmVlbl9hbHRlcm5hdGVkOwogICBib29sIG1hc2tfc3dp dGNoX3RvX3Bjb25faW47CiAgIHBpZF90IHBjb25fcGlkOwogICBVSU5UIHRlcm1fY29kZV9wYWdl OwotICBib29sIG5lZWRfcmVkcmF3X3NjcmVlbjsKICAgRFdPUkQgcGNvbl9sYXN0X3RpbWU7Ci0g IGJvb2wgcGNvbl9pbl9lbXB0eTsKLSAgYm9vbCByZXFfdHJhbnNmZXJfaW5wdXRfdG9fcGNvbjsK LSAgYm9vbCByZXFfZmx1c2hfcGNvbl9pbnB1dDsKKyAgSEFORExFIGhfcGNvbl93cml0ZV9waXBl OwogCiBwdWJsaWM6CiAgIEhBTkRMRSBmcm9tX21hc3RlciAoKSBjb25zdCB7IHJldHVybiBfZnJv bV9tYXN0ZXI7IH0KQEAgLTEzOCw3ICsxMzAsNiBAQCBwdWJsaWM6CiAgIHZvaWQgc2V0X21hc3Rl cl9jdGxfY2xvc2VkICgpIHttYXN0ZXJfcGlkID0gLTE7fQogICBzdGF0aWMgdm9pZCBfX3N0ZGNh bGwgY3JlYXRlX21hc3RlciAoaW50KTsKICAgc3RhdGljIHZvaWQgX19zdGRjYWxsIGluaXRfc2Vz c2lvbiAoKTsKLSAgdm9pZCBzZXRfc3dpdGNoX3RvX3Bjb25fb3V0IChib29sIHYpOwogICB2b2lk IHdhaXRfcGNvbl9md2QgKHZvaWQpOwogICBmcmllbmQgY2xhc3MgZmhhbmRsZXJfcHR5X2NvbW1v bjsKICAgZnJpZW5kIGNsYXNzIGZoYW5kbGVyX3B0eV9tYXN0ZXI7CmRpZmYgLS1naXQgYS93aW5z dXAvY3lnd2luL3dpbnN1cC5oIGIvd2luc3VwL2N5Z3dpbi93aW5zdXAuaAppbmRleCBmZmY3ZDE4 ZjMuLjQ1OGZiMmEyMyAxMDA2NDQKLS0tIGEvd2luc3VwL2N5Z3dpbi93aW5zdXAuaAorKysgYi93 aW5zdXAvY3lnd2luL3dpbnN1cC5oCkBAIC0yMjIsOSArMjIyLDYgQEAgdm9pZCBpbml0X2NvbnNv bGVfaGFuZGxlciAoYm9vbCk7CiAKIGV4dGVybiBib29sIHdzb2NrX3N0YXJ0ZWQ7CiAKLS8qIFBU WSByZWxhdGVkICovCi12b2lkIHNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKEhBTkRM RSBoKTsKLQogLyogUHJpbnRmIHR5cGUgZnVuY3Rpb25zICovCiBleHRlcm4gIkMiIHZvaWQgdmFw aV9mYXRhbCAoY29uc3QgY2hhciAqLCB2YV9saXN0IGFwKSBfX2F0dHJpYnV0ZV9fICgobm9yZXR1 cm4pKTsKIGV4dGVybiAiQyIgdm9pZCBhcGlfZmF0YWwgKGNvbnN0IGNoYXIgKiwgLi4uKSBfX2F0 dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsKLS0gCjIuMjcuMAoK --Multipart=_Fri__24_Jul_2020_14_38_42_+0900_VPCcJBB2pXRRNAXX--