From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from conssluserg-05.nifty.com (conssluserg-05.nifty.com [210.131.2.90]) by sourceware.org (Postfix) with ESMTPS id 4A1953861893 for ; Thu, 13 Aug 2020 09:58:41 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 4A1953861893 Received: from Express5800-S70 (v038192.dynamic.ppp.asahi-net.or.jp [124.155.38.192]) (authenticated) by conssluserg-05.nifty.com with ESMTP id 07D9wC0S019767 for ; Thu, 13 Aug 2020 18:58:12 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conssluserg-05.nifty.com 07D9wC0S019767 X-Nifty-SrcIP: [124.155.38.192] Date: Thu, 13 Aug 2020 18:58:13 +0900 From: Takashi Yano To: cygwin-developers@cygwin.com Subject: Re: New implementation of pseudo console support (experimental) Message-Id: <20200813185813.2d851113b6e134db371d35b4@nifty.ne.jp> In-Reply-To: <20200811201258.4bffb987ecdb96583c516bc2@nifty.ne.jp> References: <20200514183420.c246647a6d9e396d42c6b47e@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> <20200724143842.020cea9ffa2f6e7ffe760f67@nifty.ne.jp> <20200724202219.16ad238f515da19db21d3a6c@nifty.ne.jp> <20200803111103.27ef6554df7f40d1142bceee@nifty.ne.jp> <20200803212342.8b14a3164ed66bd521774fe4@nifty.ne.jp> <20200811201258.4bffb987ecdb96583c516bc2@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=_Thu__13_Aug_2020_18_58_13_+0900_Wz+rSN5UkgDSNHp9" X-Spam-Status: No, score=-0.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, NICE_REPLY_A, 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: Thu, 13 Aug 2020 09:58:45 -0000 This is a multi-part message in MIME format. --Multipart=_Thu__13_Aug_2020_18_58_13_+0900_Wz+rSN5UkgDSNHp9 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit On Tue, 11 Aug 2020 20:12:58 +0900 Takashi Yano via Cygwin-developers wrote: > On Mon, 3 Aug 2020 21:23:42 +0900 > Takashi Yano via Cygwin-developers wrote: > > On Mon, 3 Aug 2020 11:11:03 +0900 > > Takashi Yano via Cygwin-developers wrote: > > > On Fri, 24 Jul 2020 20:22:19 +0900 > > > Takashi Yano via Cygwin-developers wrote: > > > > On Fri, 24 Jul 2020 14:38:42 +0900 > > > > Takashi Yano via Cygwin-developers wrote: > > > > > 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. > > > > > > > > Changes: > > > > * Fix a bug in the latest change. > > > > > > Changes: > > > * Fix a handle leak caused when spawn is called with mode != _P_OVERLAY. > > > > This patch cannot be applied cleanly against current git head. > > Please use attached patch instead. > > Adapted to the current git head. Adapted to the current recent pty change. -- Takashi Yano --Multipart=_Thu__13_Aug_2020_18_58_13_+0900_Wz+rSN5UkgDSNHp9 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 RnJvbSAxMDNmZTJiOGM3YzZjOTcyZGJkMDQ1NGZlOWE1ZGQwMDRhNWI2OWMyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0BuaWZ0eS5uZS5q cD4KRGF0ZTogVHVlLCAxMSBBdWcgMjAyMCAxOTo0MjoxMiArMDkwMApTdWJqZWN0OiBbUEFUQ0hd 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 aW4vZmhhbmRsZXJfdHR5LmNjICAgICB8IDE3NzAgKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KIHdpbnN1cC9jeWd3aW4vZm9yay5jYyAgICAgICAgICAgICB8ICAgMzAgLQogd2luc3VwL2N5 Z3dpbi9zZWxlY3QuY2MgICAgICAgICAgIHwgICAgNSArLQogd2luc3VwL2N5Z3dpbi9zbWFsbHBy aW50LmNjICAgICAgIHwgICAgMiAtCiB3aW5zdXAvY3lnd2luL3NwYXduLmNjICAgICAgICAgICAg fCAgMTA1ICstCiB3aW5zdXAvY3lnd2luL3N0cmFjZS5jYyAgICAgICAgICAgfCAgICAyIC0KIHdp bnN1cC9jeWd3aW4vdHR5LmNjICAgICAgICAgICAgICB8ICAgMjAgKy0KIHdpbnN1cC9jeWd3aW4v dHR5LmggICAgICAgICAgICAgICB8ICAgMTMgKy0KIHdpbnN1cC9jeWd3aW4vd2luc3VwLmggICAg ICAgICAgICB8ICAgIDMgLQogMTIgZmlsZXMgY2hhbmdlZCwgMzQ5IGluc2VydGlvbnMoKyksIDE3 MjkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvd2luc3VwL2N5Z3dpbi9kdGFibGUuY2MgYi93 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 aCBiL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXIuaAppbmRleCBhNTc3Y2E1NDIuLjlmZDk1YzA5OCAx MDA2NDQKLS0tIGEvd2luc3VwL2N5Z3dpbi9maGFuZGxlci5oCisrKyBiL3dpbnN1cC9jeWd3aW4v ZmhhbmRsZXIuaApAQCAtMzI2LDE2ICszMjYsMTYgQEAgY2xhc3MgZmhhbmRsZXJfYmFzZQogICB2 aXJ0dWFsIHNpemVfdCAmcmFpeHB1dCAoKSB7IHJldHVybiByYS5yYWl4cHV0OyB9OwogICB2aXJ0 dWFsIHNpemVfdCAmcmFidWZsZW4gKCkgeyByZXR1cm4gcmEucmFidWZsZW47IH07CiAKLSAgdmly dHVhbCBib29sIGdldF9yZWFkYWhlYWRfdmFsaWQgKCkgeyByZXR1cm4gcmFpeGdldCAoKSA8IHJh bGVuICgpOyB9CisgIGJvb2wgZ2V0X3JlYWRhaGVhZF92YWxpZCAoKSB7IHJldHVybiByYWl4Z2V0 ICgpIDwgcmFsZW4gKCk7IH0KICAgaW50IHB1dHNfcmVhZGFoZWFkIChjb25zdCBjaGFyICpzLCBz aXplX3QgbGVuID0gKHNpemVfdCkgLTEpOwotICB2aXJ0dWFsIGludCBwdXRfcmVhZGFoZWFkIChj aGFyIHZhbHVlKTsKKyAgaW50IHB1dF9yZWFkYWhlYWQgKGNoYXIgdmFsdWUpOwogCiAgIGludCBn ZXRfcmVhZGFoZWFkICgpOwogICBpbnQgcGVla19yZWFkYWhlYWQgKGludCBxdWVyeXB1dCA9IDAp OwogCiAgIHZvaWQgc2V0X3JlYWRhaGVhZF92YWxpZCAoaW50IHZhbCwgaW50IGNoID0gLTEpOwog Ci0gIHZpcnR1YWwgaW50IGdldF9yZWFkYWhlYWRfaW50b19idWZmZXIgKGNoYXIgKmJ1Ziwgc2l6 ZV90IGJ1Zmxlbik7CisgIGludCBnZXRfcmVhZGFoZWFkX2ludG9fYnVmZmVyIChjaGFyICpidWYs IHNpemVfdCBidWZsZW4pOwogCiAgIGJvb2wgaGFzX2FjbHMgKCkgY29uc3QgeyByZXR1cm4gcGMu aGFzX2FjbHMgKCk7IH0KIApAQCAtMTkwNSw3ICsxOTA1LDcgQEAgY2xhc3MgZmhhbmRsZXJfdGVy bWlvczogcHVibGljIGZoYW5kbGVyX2Jhc2UKICAgaW50IGlvY3RsIChpbnQsIHZvaWQgKik7CiAg IHR0eV9taW4gKl90YzsKICAgdHR5ICpnZXRfdHR5cCAoKSB7cmV0dXJuICh0dHkgKikgdGMgKCk7 fQotICB2aXJ0dWFsIGludCBlYXRfcmVhZGFoZWFkIChpbnQgbik7CisgIGludCBlYXRfcmVhZGFo ZWFkIChpbnQgbik7CiAKICBwdWJsaWM6CiAgIHR0eV9taW4qJiB0YyAoKSB7cmV0dXJuIF90Yzt9 CkBAIC0yMTg0LDcgKzIxODQsNiBAQCBwcml2YXRlOgogICBzdGF0aWMgYm9vbCBuZWVkX2ludmlz aWJsZSAoKTsKICAgc3RhdGljIHZvaWQgZnJlZV9jb25zb2xlICgpOwogICBzdGF0aWMgY29uc3Qg Y2hhciAqZ2V0X25vbmFzY2lpX2tleSAoSU5QVVRfUkVDT1JEJiBpbnB1dF9yZWMsIGNoYXIgKik7 Ci0gIHN0YXRpYyBEV09SRCBnZXRfY29uc29sZV9wcm9jZXNzX2lkIChEV09SRCBwaWQsIGJvb2wg bWF0Y2gpOwogCiAgIGZoYW5kbGVyX2NvbnNvbGUgKHZvaWQgKikge30KIApAQCAtMjI2NCwxOSAr MjI2Myw3IEBAIGNsYXNzIGZoYW5kbGVyX3B0eV9jb21tb246IHB1YmxpYyBmaGFuZGxlcl90ZXJt aW9zCiAgICAgcmV0dXJuIGZoOwogICB9CiAKLSAgYm9vbCBhdHRhY2hfcGNvbl9pbl9mb3JrICh2 b2lkKQotICB7Ci0gICAgcmV0dXJuIGdldF90dHlwICgpLT5hdHRhY2hfcGNvbl9pbl9mb3JrOwot ICB9Ci0gIERXT1JEIGdldF9oZWxwZXJfcHJvY2Vzc19pZCAodm9pZCkKLSAgewotICAgIHJldHVy biBnZXRfdHR5cCAoKS0+aGVscGVyX3Byb2Nlc3NfaWQ7Ci0gIH0KLSAgSFBDT04gZ2V0X3BzZXVk b19jb25zb2xlICh2b2lkKQotICB7Ci0gICAgcmV0dXJuIGdldF90dHlwICgpLT5oX3BzZXVkb19j b25zb2xlOwotICB9Ci0gIGJvb2wgdG9fYmVfcmVhZF9mcm9tX3Bjb24gKHZvaWQpOworICB2b2lk IHJlc2l6ZV9wc2V1ZG9fY29uc29sZSAoc3RydWN0IHdpbnNpemUgKik7CiAKICBwcm90ZWN0ZWQ6 CiAgIEJPT0wgcHJvY2Vzc19vcG9zdF9vdXRwdXQgKEhBTkRMRSBoLApAQCAtMjI4NywyMyArMjI3 NCwxNSBAQCBjbGFzcyBmaGFuZGxlcl9wdHlfc2xhdmU6IHB1YmxpYyBmaGFuZGxlcl9wdHlfY29t bW9uCiB7CiAgIEhBTkRMRSBpbnVzZTsJCQkvLyB1c2VkIHRvIGluZGljYXRlIHRoYXQgYSB0dHkg aXMgaW4gdXNlCiAgIEhBTkRMRSBvdXRwdXRfaGFuZGxlX2N5ZywgaW9faGFuZGxlX2N5ZzsKLSAg RFdPUkQgcGlkX3Jlc3RvcmU7Ci0gIGludCBmZDsKIAogICAvKiBIZWxwZXIgZnVuY3Rpb25zIGZv ciBmY2htb2QgYW5kIGZjaG93bi4gKi8KICAgYm9vbCBmY2hfb3Blbl9oYW5kbGVzIChib29sIGNo b3duKTsKICAgaW50IGZjaF9zZXRfc2QgKHNlY3VyaXR5X2Rlc2NyaXB0b3IgJnNkLCBib29sIGNo b3duKTsKICAgdm9pZCBmY2hfY2xvc2VfaGFuZGxlcyAoKTsKIAotICBib29sIHRyeV9yZWF0dGFj aF9wY29uICgpOwotICB2b2lkIHJlc3RvcmVfcmVhdHRhY2hfcGNvbiAoKTsKLSAgaW5saW5lIHZv aWQgZnJlZV9hdHRhY2hlZF9jb25zb2xlICgpOwotCiAgcHVibGljOgogICAvKiBDb25zdHJ1Y3Rv ciAqLwogICBmaGFuZGxlcl9wdHlfc2xhdmUgKGludCk7Ci0gIC8qIERlc3RydWN0b3IgKi8KLSAg fmZoYW5kbGVyX3B0eV9zbGF2ZSAoKTsKIAogICB2b2lkIHNldF9vdXRwdXRfaGFuZGxlX2N5ZyAo SEFORExFIGgpIHsgb3V0cHV0X2hhbmRsZV9jeWcgPSBoOyB9CiAgIEhBTkRMRSYgZ2V0X291dHB1 dF9oYW5kbGVfY3lnICgpIHsgcmV0dXJuIG91dHB1dF9oYW5kbGVfY3lnOyB9CkBAIC0yMzE1LDkg KzIyOTQsNiBAQCBjbGFzcyBmaGFuZGxlcl9wdHlfc2xhdmU6IHB1YmxpYyBmaGFuZGxlcl9wdHlf Y29tbW9uCiAgIHNzaXplX3QgX19zdGRjYWxsIHdyaXRlIChjb25zdCB2b2lkICpwdHIsIHNpemVf dCBsZW4pOwogICB2b2lkIF9fcmVnMyByZWFkICh2b2lkICpwdHIsIHNpemVfdCYgbGVuKTsKICAg aW50IGluaXQgKEhBTkRMRSwgRFdPUkQsIG1vZGVfdCk7Ci0gIGludCBlYXRfcmVhZGFoZWFkIChp bnQgbik7Ci0gIGludCBnZXRfcmVhZGFoZWFkX2ludG9fYnVmZmVyIChjaGFyICpidWYsIHNpemVf dCBidWZsZW4pOwotICBib29sIGdldF9yZWFkYWhlYWRfdmFsaWQgKHZvaWQpOwogCiAgIGludCB0 Y3NldGF0dHIgKGludCBhLCBjb25zdCBzdHJ1Y3QgdGVybWlvcyAqdCk7CiAgIGludCB0Y2dldGF0 dHIgKHN0cnVjdCB0ZXJtaW9zICp0KTsKQEAgLTIzNTQsMjAgKzIzMzAsMTIgQEAgY2xhc3MgZmhh bmRsZXJfcHR5X3NsYXZlOiBwdWJsaWMgZmhhbmRsZXJfcHR5X2NvbW1vbgogICAgIGNvcHl0byAo ZmgpOwogICAgIHJldHVybiBmaDsKICAgfQotICB2b2lkIHNldF9zd2l0Y2hfdG9fcGNvbiAoaW50 IGZkKTsKKyAgYm9vbCBzZXR1cF9wc2V1ZG9jb25zb2xlIChTVEFSVFVQSU5GT0VYVyAqc2ksIGJv b2wgbm9wY29uKTsKKyAgdm9pZCBjbG9zZV9wc2V1ZG9jb25zb2xlICh2b2lkKTsKKyAgdm9pZCBz ZXRfc3dpdGNoX3RvX3Bjb24gKHZvaWQpOwogICB2b2lkIHJlc2V0X3N3aXRjaF90b19wY29uICh2 b2lkKTsKLSAgdm9pZCBwdXNoX3RvX3Bjb25fc2NyZWVuYnVmZmVyIChjb25zdCBjaGFyICpwdHIs IHNpemVfdCBsZW4sIGJvb2wgaXNfZWNobyk7CiAgIHZvaWQgbWFza19zd2l0Y2hfdG9fcGNvbl9p biAoYm9vbCBtYXNrKTsKLSAgdm9pZCBmaXh1cF9hZnRlcl9hdHRhY2ggKGJvb2wgbmF0aXZlX21h eWJlLCBpbnQgZmQpOwotICBib29sIGlzX2xpbmVfaW5wdXQgKHZvaWQpCi0gIHsKLSAgICByZXR1 cm4gZ2V0X3R0eXAgKCktPnRpLmNfbGZsYWcgJiBJQ0FOT047Ci0gIH0KICAgdm9pZCBzZXR1cF9s b2NhbGUgKHZvaWQpOwotICB2b2lkIHNldF9mcmVlY29uc29sZV9vbl9jbG9zZSAoYm9vbCB2YWwp OwotICB2b2lkIHRyaWdnZXJfcmVkcmF3X3NjcmVlbiAodm9pZCk7Ci0gIHZvaWQgcHVsbF9wY29u X2lucHV0ICh2b2lkKTsKLSAgdm9pZCB1cGRhdGVfcGNvbl9pbnB1dF9zdGF0ZSAoYm9vbCBuZWVk X2xvY2spOwogfTsKIAogI2RlZmluZSBfX3B0c25hbWUoYnVmLCB1bml0KSBfX3NtYWxsX3Nwcmlu dGYgKChidWYpLCAiL2Rldi9wdHklZCIsICh1bml0KSkKQEAgLTIzOTIsNyArMjM2MCw2IEBAIHB1 YmxpYzoKICAgaW50IHByb2Nlc3Nfc2xhdmVfb3V0cHV0IChjaGFyICpidWYsIHNpemVfdCBsZW4s IGludCBwa3Rtb2RlX29uKTsKICAgdm9pZCBkb2VjaG8gKGNvbnN0IHZvaWQgKnN0ciwgRFdPUkQg bGVuKTsKICAgaW50IGFjY2VwdF9pbnB1dCAoKTsKLSAgaW50IHB1dF9yZWFkYWhlYWQgKGNoYXIg dmFsdWUpOwogICBpbnQgb3BlbiAoaW50IGZsYWdzLCBtb2RlX3QgbW9kZSA9IDApOwogICB2b2lk IG9wZW5fc2V0dXAgKGludCBmbGFncyk7CiAgIHNzaXplX3QgX19zdGRjYWxsIHdyaXRlIChjb25z dCB2b2lkICpwdHIsIHNpemVfdCBsZW4pOwpAQCAtMjQzMSw5ICsyMzk4LDcgQEAgcHVibGljOgog ICAgIGNvcHl0byAoZmgpOwogICAgIHJldHVybiBmaDsKICAgfQotCi0gIGJvb2wgc2V0dXBfcHNl dWRvY29uc29sZSAodm9pZCk7Ci0gIHZvaWQgdHJhbnNmZXJfaW5wdXRfdG9fcGNvbiAodm9pZCk7 CisgIGJvb2wgdG9fYmVfcmVhZF9mcm9tX3Bjb24gKHZvaWQpOwogfTsKIAogY2xhc3MgZmhhbmRs ZXJfZGV2X251bGw6IHB1YmxpYyBmaGFuZGxlcl9iYXNlCmRpZmYgLS1naXQgYS93aW5zdXAvY3ln d2luL2ZoYW5kbGVyX2NvbnNvbGUuY2MgYi93aW5zdXAvY3lnd2luL2ZoYW5kbGVyX2NvbnNvbGUu Y2MKaW5kZXggNTI3NDFjZThiLi4wMmE1OTk2YTEgMTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3aW4v ZmhhbmRsZXJfY29uc29sZS5jYworKysgYi93aW5zdXAvY3lnd2luL2ZoYW5kbGVyX2NvbnNvbGUu Y2MKQEAgLTEyMDYsMTggKzEyMDYsNiBAQCBmaGFuZGxlcl9jb25zb2xlOjpjbG9zZSAoKQogICBp ZiAoY29uX3JhLnJhYnVmKQogICAgIGZyZWUgKGNvbl9yYS5yYWJ1Zik7CiAKLSAgLyogSWYgYWxy ZWFkeSBhdHRhY2hlZCB0byBwc2V1ZG8gY29uc29sZSwgZG9uJ3QgY2FsbCBmcmVlX2NvbnNvbGUg KCkgKi8KLSAgY3lnaGVhcF9mZGVudW0gY2ZkIChmYWxzZSk7Ci0gIHdoaWxlIChjZmQubmV4dCAo KSA+PSAwKQotICAgIGlmIChjZmQtPmdldF9tYWpvciAoKSA9PSBERVZfUFRZTV9NQUpPUiB8fAot CWNmZC0+Z2V0X21ham9yICgpID09IERFVl9QVFlTX01BSk9SKQotICAgICAgewotCWZoYW5kbGVy X3B0eV9jb21tb24gKnQgPQotCSAgKGZoYW5kbGVyX3B0eV9jb21tb24gKikgKGZoYW5kbGVyX2Jh c2UgKikgY2ZkOwotCWlmIChnZXRfY29uc29sZV9wcm9jZXNzX2lkICh0LT5nZXRfaGVscGVyX3By b2Nlc3NfaWQgKCksIHRydWUpKQotCSAgcmV0dXJuIDA7Ci0gICAgICB9Ci0KICAgaWYgKCFoYXZl X2V4ZWNlZCkKICAgICBmcmVlX2NvbnNvbGUgKCk7CiAgIHJldHVybiAwOwpAQCAtMzYxMSwzNyAr MzU5OSw2IEBAIGZoYW5kbGVyX2NvbnNvbGU6Om5lZWRfaW52aXNpYmxlICgpCiAgIHJldHVybiBi OwogfQogCi1EV09SRAotZmhhbmRsZXJfY29uc29sZTo6Z2V0X2NvbnNvbGVfcHJvY2Vzc19pZCAo RFdPUkQgcGlkLCBib29sIG1hdGNoKQotewotICBEV09SRCB0bXA7Ci0gIERXT1JEIG51bSwgbnVt X3JlcTsKLSAgbnVtID0gMTsKLSAgbnVtX3JlcSA9IEdldENvbnNvbGVQcm9jZXNzTGlzdCAoJnRt cCwgbnVtKTsKLSAgRFdPUkQgKmxpc3Q7Ci0gIHdoaWxlICh0cnVlKQotICAgIHsKLSAgICAgIGxp c3QgPSAoRFdPUkQgKikKLQlIZWFwQWxsb2MgKEdldFByb2Nlc3NIZWFwICgpLCAwLCBudW1fcmVx ICogc2l6ZW9mIChEV09SRCkpOwotICAgICAgbnVtID0gbnVtX3JlcTsKLSAgICAgIG51bV9yZXEg PSBHZXRDb25zb2xlUHJvY2Vzc0xpc3QgKGxpc3QsIG51bSk7Ci0gICAgICBpZiAobnVtX3JlcSA+ IG51bSkKLQlIZWFwRnJlZSAoR2V0UHJvY2Vzc0hlYXAgKCksIDAsIGxpc3QpOwotICAgICAgZWxz ZQotCWJyZWFrOwotICAgIH0KLSAgbnVtID0gbnVtX3JlcTsKLQotICB0bXAgPSAwOwotICBmb3Ig KERXT1JEIGk9MDsgaTxudW07IGkrKykKLSAgICBpZiAoKG1hdGNoICYmIGxpc3RbaV0gPT0gcGlk KSB8fCAoIW1hdGNoICYmIGxpc3RbaV0gIT0gcGlkKSkKLSAgICAgIC8qIExhc3Qgb25lIGlzIHRo ZSBvbGRlc3QuICovCi0gICAgICAvKiBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L3Rlcm1p bmFsL2lzc3Vlcy85NSAqLwotICAgICAgdG1wID0gbGlzdFtpXTsKLSAgSGVhcEZyZWUgKEdldFBy b2Nlc3NIZWFwICgpLCAwLCBsaXN0KTsKLSAgcmV0dXJuIHRtcDsKLX0KLQogRFdPUkQKIGZoYW5k bGVyX2NvbnNvbGU6Ol9fYWNxdWlyZV9pbnB1dF9tdXRleCAoY29uc3QgY2hhciAqZm4sIGludCBs biwgRFdPUkQgbXMpCiB7CmRpZmYgLS1naXQgYS93aW5zdXAvY3lnd2luL2ZoYW5kbGVyX3R0eS5j YyBiL3dpbnN1cC9jeWd3aW4vZmhhbmRsZXJfdHR5LmNjCmluZGV4IDQwYjc5YmZiYi4uN2I1YTU3 YmE2IDEwMDY0NAotLS0gYS93aW5zdXAvY3lnd2luL2ZoYW5kbGVyX3R0eS5jYworKysgYi93aW5z dXAvY3lnd2luL2ZoYW5kbGVyX3R0eS5jYwpAQCAtMjUsNyArMjUsNiBAQCBkZXRhaWxzLiAqLwog I2luY2x1ZGUgImNoaWxkX2luZm8uaCIKICNpbmNsdWRlIDxhc20vc29ja2V0Lmg+CiAjaW5jbHVk ZSAiY3lnd2FpdC5oIgotI2luY2x1ZGUgInRsc19wYnVmLmgiCiAjaW5jbHVkZSAicmVnaXN0cnku aCIKIAogI2lmbmRlZiBQUk9DX1RIUkVBRF9BVFRSSUJVVEVfUFNFVURPQ09OU09MRQpAQCAtMzMs NyArMzIsNiBAQCBkZXRhaWxzLiAqLwogI2VuZGlmIC8qIFBST0NfVEhSRUFEX0FUVFJJQlVURV9Q U0VVRE9DT05TT0xFICovCiAKIGV4dGVybiAiQyIgaW50IHNzY2FuZiAoY29uc3QgY2hhciAqLCBj b25zdCBjaGFyICosIC4uLik7Ci1leHRlcm4gIkMiIGludCB0dHluYW1lX3IgKGludCwgY2hhcios IHNpemVfdCk7CiAKIGV4dGVybiAiQyIgewogICBIUkVTVUxUIFdJTkFQSSBDcmVhdGVQc2V1ZG9D b25zb2xlIChDT09SRCwgSEFORExFLCBIQU5ETEUsIERXT1JELCBIUENPTiAqKTsKQEAgLTYwLDIw ICs1OCwxMCBAQCBzdHJ1Y3QgcGlwZV9yZXBseSB7CiAgIERXT1JEIGVycm9yOwogfTsKIAotc3Rh dGljIGludCBwY29uX2F0dGFjaGVkX3RvID0gLTE7CiBzdGF0aWMgYm9vbCBpc0h5YnJpZDsKLXN0 YXRpYyBib29sIGRvX25vdF9yZXNldF9zd2l0Y2hfdG9fcGNvbjsKLXN0YXRpYyBib29sIGZyZWVj b25zb2xlX29uX2Nsb3NlID0gdHJ1ZTsKLXN0YXRpYyB0dHkgKmxhc3RfdHR5cCA9IE5VTEw7Ci0K LXZvaWQKLWNsZWFyX3Bjb25fYXR0YWNoZWRfdG8gKHZvaWQpCi17Ci0gIHBjb25fYXR0YWNoZWRf dG8gPSAtMTsKLX0KIAogc3RhdGljIHZvaWQKLXNldF9zd2l0Y2hfdG9fcGNvbiAodm9pZCkKK3Nl dF9zd2l0Y2hfdG9fcGNvbiAoSEFORExFIGgpCiB7CiAgIGN5Z2hlYXBfZmRlbnVtIGNmZCAoZmFs c2UpOwogICBpbnQgZmQ7CkBAIC04MiwyODAgKzcwLDE3IEBAIHNldF9zd2l0Y2hfdG9fcGNvbiAo dm9pZCkKICAgICAgIHsKIAlmaGFuZGxlcl9iYXNlICpmaCA9IGNmZDsKIAlmaGFuZGxlcl9wdHlf c2xhdmUgKnB0eXMgPSAoZmhhbmRsZXJfcHR5X3NsYXZlICopIGZoOwotCWlmIChwdHlzLT5nZXRf cHNldWRvX2NvbnNvbGUgKCkpCi0JICB7Ci0JICAgIHB0eXMtPnNldF9zd2l0Y2hfdG9fcGNvbiAo ZmQpOwotCSAgICBwdHlzLT50cmlnZ2VyX3JlZHJhd19zY3JlZW4gKCk7Ci0JICAgIERXT1JEIG1v ZGUgPQotCSAgICAgIEVOQUJMRV9QUk9DRVNTRURfSU5QVVQgfCBFTkFCTEVfTElORV9JTlBVVCB8 IEVOQUJMRV9FQ0hPX0lOUFVUOwotCSAgICBTZXRDb25zb2xlTW9kZSAocHR5cy0+Z2V0X2hhbmRs ZSAoKSwgbW9kZSk7Ci0JICB9CisJaWYgKGggPT0gcHR5cy0+Z2V0X2hhbmRsZSAoKSkKKwkgIHB0 eXMtPnNldF9zd2l0Y2hfdG9fcGNvbiAoKTsKIAlyZXR1cm47CiAgICAgICB9Ci0gIC8qIE5vIHB0 eSBzbGF2ZSBvcGVuZWQgKi8KLSAgaWYgKGxhc3RfdHR5cCkgLyogTWFrZSBzeXN0ZW1fcHJpbnRm KCkgd29yayBhZnRlciBjbG9zaW5nIHB0eSBzbGF2ZSAqLwotICAgIGxhc3RfdHR5cC0+c2V0X3N3 aXRjaF90b19wY29uX291dCAodHJ1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1mb3JjZV9hdHRhY2hf dG9fcGNvbiAoSEFORExFIGgpCi17Ci0gIGJvb2wgYXR0YWNoX2RvbmUgPSBmYWxzZTsKLSAgZm9y IChpbnQgbiA9IDA7IG4gPCAyOyBuICsrKQotICAgIHsKLSAgICAgIC8qIEZpcnN0IHRpbWUsIGF0 dGFjaCB0byB0aGUgcHR5IHdob3NlIGhhbmRsZSB2YWx1ZSBpcyBtYXRjaC4KLQkgU2Vjb25kIHRp bWUsIHRyeSB0byBhdHRhY2ggdG8gYW55IHB0eS4gKi8KLSAgICAgIGN5Z2hlYXBfZmRlbnVtIGNm ZCAoZmFsc2UpOwotICAgICAgd2hpbGUgKGNmZC5uZXh0ICgpID49IDApCi0JaWYgKGNmZC0+Z2V0 X21ham9yICgpID09IERFVl9QVFlTX01BSk9SKQotCSAgewotCSAgICBmaGFuZGxlcl9iYXNlICpm aCA9IGNmZDsKLQkgICAgZmhhbmRsZXJfcHR5X3NsYXZlICpwdHlzID0gKGZoYW5kbGVyX3B0eV9z bGF2ZSAqKSBmaDsKLQkgICAgaWYgKCFwdHlzLT5nZXRfcHNldWRvX2NvbnNvbGUgKCkpCi0JICAg ICAgY29udGludWU7Ci0JICAgIGlmIChuICE9IDAKLQkJfHwgaCA9PSBwdHlzLT5nZXRfaGFuZGxl ICgpCi0JCXx8IGggPT0gcHR5cy0+Z2V0X291dHB1dF9oYW5kbGUgKCkpCi0JICAgICAgewotCQlp ZiAoZmhhbmRsZXJfY29uc29sZTo6Z2V0X2NvbnNvbGVfcHJvY2Vzc19pZAotCQkJCSAgKHB0eXMt PmdldF9oZWxwZXJfcHJvY2Vzc19pZCAoKSwgdHJ1ZSkpCi0JCSAgYXR0YWNoX2RvbmUgPSB0cnVl OwotCQllbHNlCi0JCSAgewotCQkgICAgRnJlZUNvbnNvbGUgKCk7Ci0JCSAgICBpZiAoQXR0YWNo Q29uc29sZSAocHR5cy0+Z2V0X2hlbHBlcl9wcm9jZXNzX2lkICgpKSkKLQkJICAgICAgewotCQkJ cGNvbl9hdHRhY2hlZF90byA9IHB0eXMtPmdldF9taW5vciAoKTsKLQkJCWF0dGFjaF9kb25lID0g dHJ1ZTsKLQkJICAgICAgfQotCQkgICAgZWxzZQotCQkgICAgICBwY29uX2F0dGFjaGVkX3RvID0g LTE7Ci0JCSAgfQotCQlicmVhazsKLQkgICAgICB9Ci0JICB9Ci0JZWxzZSBpZiAoY2ZkLT5nZXRf bWFqb3IgKCkgPT0gREVWX0NPTlNfTUFKT1IpCi0JICB7Ci0JICAgIGZoYW5kbGVyX2Jhc2UgKmZo ID0gY2ZkOwotCSAgICBmaGFuZGxlcl9jb25zb2xlICpjb25zID0gKGZoYW5kbGVyX2NvbnNvbGUg KikgZmg7Ci0JICAgIGlmIChuICE9IDAKLQkJfHwgaCA9PSBjb25zLT5nZXRfaGFuZGxlICgpCi0J CXx8IGggPT0gY29ucy0+Z2V0X291dHB1dF9oYW5kbGUgKCkpCi0JICAgICAgewotCQkvKiBJZiB0 aGUgcHJvY2VzcyBpcyBydW5uaW5nIG9uIGEgY29uc29sZSwKLQkJICAgdGhlIHBhcmVudCBwcm9j ZXNzIHNob3VsZCBiZSBhdHRhY2hlZAotCQkgICB0byB0aGUgc2FtZSBjb25zb2xlLiAqLwotCQlE V09SRCBhdHRhY2hfd3BpZDsKLQkJaWYgKG15c2VsZi0+cHBpZCA9PSAxKQotCQkgIGF0dGFjaF93 cGlkID0gQVRUQUNIX1BBUkVOVF9QUk9DRVNTOwotCQllbHNlCi0JCSAgewotCQkgICAgcGluZm8g cCAobXlzZWxmLT5wcGlkKTsKLQkJICAgIGF0dGFjaF93cGlkID0gcC0+ZHdQcm9jZXNzSWQ7Ci0J CSAgfQotCQlGcmVlQ29uc29sZSAoKTsKLQkJaWYgKEF0dGFjaENvbnNvbGUgKGF0dGFjaF93cGlk KSkKLQkJICB7Ci0JCSAgICBwY29uX2F0dGFjaGVkX3RvID0gLTE7Ci0JCSAgICBhdHRhY2hfZG9u ZSA9IHRydWU7Ci0JCSAgfQotCQllbHNlCi0JCSAgcGNvbl9hdHRhY2hlZF90byA9IC0xOwotCQli cmVhazsKLQkgICAgICB9Ci0JICB9Ci0gICAgICBpZiAoYXR0YWNoX2RvbmUpCi0JYnJlYWs7Ci0g ICAgfQotfQotCi12b2lkCi1zZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChIQU5ETEUg aCkKLXsKLSAgaWYgKEdldEZpbGVUeXBlIChoKSA9PSBGSUxFX1RZUEVfQ0hBUikKLSAgICB7Ci0g ICAgICBmb3JjZV9hdHRhY2hfdG9fcGNvbiAoaCk7Ci0gICAgICBEV09SRCBkdW1teTsKLSAgICAg IGlmICghaXNIeWJyaWQgJiYgKEdldENvbnNvbGVNb2RlIChoLCAmZHVtbXkpCi0JCQl8fCBHZXRM YXN0RXJyb3IgKCkgIT0gRVJST1JfSU5WQUxJRF9IQU5ETEUpKQotCXsKLQkgIGlzSHlicmlkID0g dHJ1ZTsKLQkgIHNldF9zd2l0Y2hfdG9fcGNvbiAoKTsKLQl9Ci0gICAgfQotfQotCi1pbmxpbmUg dm9pZAotZmhhbmRsZXJfcHR5X3NsYXZlOjpmcmVlX2F0dGFjaGVkX2NvbnNvbGUgKCkKLXsKLSAg Ym9vbCBhdHRhY2hlZCA9IGdldF90dHlwICgpID8KLSAgICBmaGFuZGxlcl9jb25zb2xlOjpnZXRf Y29uc29sZV9wcm9jZXNzX2lkIChnZXRfaGVscGVyX3Byb2Nlc3NfaWQgKCksIHRydWUpCi0gICAg OiAoZ2V0X21pbm9yICgpID09IHBjb25fYXR0YWNoZWRfdG8pOwotICBpZiAoZnJlZWNvbnNvbGVf b25fY2xvc2UgJiYgYXR0YWNoZWQpCi0gICAgewotICAgICAgRnJlZUNvbnNvbGUgKCk7Ci0gICAg ICBwY29uX2F0dGFjaGVkX3RvID0gLTE7Ci0gICAgfQogfQogCiAjZGVmaW5lIERFRl9IT09LKG5h bWUpIHN0YXRpYyBfX3R5cGVvZl9fIChuYW1lKSAqbmFtZSMjX09yaWcKLURFRl9IT09LIChXcml0 ZUZpbGUpOwotREVGX0hPT0sgKFdyaXRlQ29uc29sZUEpOwotREVGX0hPT0sgKFdyaXRlQ29uc29s ZVcpOwotREVGX0hPT0sgKFJlYWRGaWxlKTsKLURFRl9IT09LIChSZWFkQ29uc29sZUEpOwotREVG X0hPT0sgKFJlYWRDb25zb2xlVyk7Ci1ERUZfSE9PSyAoV3JpdGVDb25zb2xlT3V0cHV0QSk7Ci1E RUZfSE9PSyAoV3JpdGVDb25zb2xlT3V0cHV0Vyk7Ci1ERUZfSE9PSyAoV3JpdGVDb25zb2xlT3V0 cHV0Q2hhcmFjdGVyQSk7Ci1ERUZfSE9PSyAoV3JpdGVDb25zb2xlT3V0cHV0Q2hhcmFjdGVyVyk7 Ci1ERUZfSE9PSyAoV3JpdGVDb25zb2xlT3V0cHV0QXR0cmlidXRlKTsKLURFRl9IT09LIChTZXRD b25zb2xlQ3Vyc29yUG9zaXRpb24pOwotREVGX0hPT0sgKFNldENvbnNvbGVUZXh0QXR0cmlidXRl KTsKLURFRl9IT09LIChXcml0ZUNvbnNvbGVJbnB1dEEpOwotREVGX0hPT0sgKFdyaXRlQ29uc29s ZUlucHV0Vyk7Ci1ERUZfSE9PSyAoUmVhZENvbnNvbGVJbnB1dEEpOwotREVGX0hPT0sgKFJlYWRD b25zb2xlSW5wdXRXKTsKLURFRl9IT09LIChQZWVrQ29uc29sZUlucHV0QSk7Ci1ERUZfSE9PSyAo UGVla0NvbnNvbGVJbnB1dFcpOwogLyogQ3JlYXRlUHJvY2VzcygpIGlzIGhvb2tlZCBmb3IgR0RC IGV0Yy4gKi8KIERFRl9IT09LIChDcmVhdGVQcm9jZXNzQSk7CiBERUZfSE9PSyAoQ3JlYXRlUHJv Y2Vzc1cpOwogCi1zdGF0aWMgQk9PTCBXSU5BUEkKLVdyaXRlRmlsZV9Ib29rZWQKLSAgICAgKEhB TkRMRSBoLCBMUENWT0lEIHAsIERXT1JEIGwsIExQRFdPUkQgbiwgTFBPVkVSTEFQUEVEIG8pCi17 Ci0gIHNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGgpOwotICByZXR1cm4gV3JpdGVG aWxlX09yaWcgKGgsIHAsIGwsIG4sIG8pOwotfQotc3RhdGljIEJPT0wgV0lOQVBJCi1Xcml0ZUNv bnNvbGVBX0hvb2tlZAotICAgICAoSEFORExFIGgsIExQQ1ZPSUQgcCwgRFdPUkQgbCwgTFBEV09S RCBuLCBMUFZPSUQgbykKLXsKLSAgc2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoaCk7 Ci0gIHJldHVybiBXcml0ZUNvbnNvbGVBX09yaWcgKGgsIHAsIGwsIG4sIG8pOwotfQotc3RhdGlj IEJPT0wgV0lOQVBJCi1Xcml0ZUNvbnNvbGVXX0hvb2tlZAotICAgICAoSEFORExFIGgsIExQQ1ZP SUQgcCwgRFdPUkQgbCwgTFBEV09SRCBuLCBMUFZPSUQgbykKLXsKLSAgc2V0X2lzaHlicmlkX2Fu ZF9zd2l0Y2hfdG9fcGNvbiAoaCk7Ci0gIHJldHVybiBXcml0ZUNvbnNvbGVXX09yaWcgKGgsIHAs IGwsIG4sIG8pOwotfQotc3RhdGljIEJPT0wgV0lOQVBJCi1SZWFkRmlsZV9Ib29rZWQKLSAgICAg KEhBTkRMRSBoLCBMUFZPSUQgcCwgRFdPUkQgbCwgTFBEV09SRCBuLCBMUE9WRVJMQVBQRUQgbykK LXsKLSAgc2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoaCk7Ci0gIHJldHVybiBSZWFk RmlsZV9PcmlnIChoLCBwLCBsLCBuLCBvKTsKLX0KLXN0YXRpYyBCT09MIFdJTkFQSQotUmVhZENv bnNvbGVBX0hvb2tlZAotICAgICAoSEFORExFIGgsIExQVk9JRCBwLCBEV09SRCBsLCBMUERXT1JE IG4sIExQVk9JRCBvKQotewotICBzZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChoKTsK LSAgcmV0dXJuIFJlYWRDb25zb2xlQV9PcmlnIChoLCBwLCBsLCBuLCBvKTsKLX0KLXN0YXRpYyBC T09MIFdJTkFQSQotUmVhZENvbnNvbGVXX0hvb2tlZAotICAgICAoSEFORExFIGgsIExQVk9JRCBw LCBEV09SRCBsLCBMUERXT1JEIG4sIExQVk9JRCBvKQotewotICBzZXRfaXNoeWJyaWRfYW5kX3N3 aXRjaF90b19wY29uIChoKTsKLSAgcmV0dXJuIFJlYWRDb25zb2xlV19PcmlnIChoLCBwLCBsLCBu LCBvKTsKLX0KLXN0YXRpYyBCT09MIFdJTkFQSQotV3JpdGVDb25zb2xlT3V0cHV0QV9Ib29rZWQK LSAgICAgKEhBTkRMRSBoLCBDT05TVCBDSEFSX0lORk8gKnAsIENPT1JEIHMsIENPT1JEIGMsIFBT TUFMTF9SRUNUIHIpCi17Ci0gIHNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGgpOwot ICByZXR1cm4gV3JpdGVDb25zb2xlT3V0cHV0QV9PcmlnIChoLCBwLCBzLCBjLCByKTsKLX0KLXN0 YXRpYyBCT09MIFdJTkFQSQotV3JpdGVDb25zb2xlT3V0cHV0V19Ib29rZWQKLSAgICAgKEhBTkRM RSBoLCBDT05TVCBDSEFSX0lORk8gKnAsIENPT1JEIHMsIENPT1JEIGMsIFBTTUFMTF9SRUNUIHIp Ci17Ci0gIHNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGgpOwotICByZXR1cm4gV3Jp dGVDb25zb2xlT3V0cHV0V19PcmlnIChoLCBwLCBzLCBjLCByKTsKLX0KLXN0YXRpYyBCT09MIFdJ TkFQSQotV3JpdGVDb25zb2xlT3V0cHV0Q2hhcmFjdGVyQV9Ib29rZWQKLSAgICAgKEhBTkRMRSBo LCBMUENTVFIgcCwgRFdPUkQgbCwgQ09PUkQgYywgTFBEV09SRCBuKQotewotICBzZXRfaXNoeWJy aWRfYW5kX3N3aXRjaF90b19wY29uIChoKTsKLSAgcmV0dXJuIFdyaXRlQ29uc29sZU91dHB1dENo YXJhY3RlckFfT3JpZyAoaCwgcCwgbCwgYywgbik7Ci19Ci1zdGF0aWMgQk9PTCBXSU5BUEkKLVdy aXRlQ29uc29sZU91dHB1dENoYXJhY3RlcldfSG9va2VkCi0gICAgIChIQU5ETEUgaCwgTFBDV1NU UiBwLCBEV09SRCBsLCBDT09SRCBjLCBMUERXT1JEIG4pCi17Ci0gIHNldF9pc2h5YnJpZF9hbmRf c3dpdGNoX3RvX3Bjb24gKGgpOwotICByZXR1cm4gV3JpdGVDb25zb2xlT3V0cHV0Q2hhcmFjdGVy V19PcmlnIChoLCBwLCBsLCBjLCBuKTsKLX0KLXN0YXRpYyBCT09MIFdJTkFQSQotV3JpdGVDb25z b2xlT3V0cHV0QXR0cmlidXRlX0hvb2tlZAotICAgICAoSEFORExFIGgsIENPTlNUIFdPUkQgKmEs IERXT1JEIGwsIENPT1JEIGMsIExQRFdPUkQgbikKLXsKLSAgc2V0X2lzaHlicmlkX2FuZF9zd2l0 Y2hfdG9fcGNvbiAoaCk7Ci0gIHJldHVybiBXcml0ZUNvbnNvbGVPdXRwdXRBdHRyaWJ1dGVfT3Jp ZyAoaCwgYSwgbCwgYywgbik7Ci19Ci1zdGF0aWMgQk9PTCBXSU5BUEkKLVNldENvbnNvbGVDdXJz b3JQb3NpdGlvbl9Ib29rZWQKLSAgICAgKEhBTkRMRSBoLCBDT09SRCBjKQotewotICBzZXRfaXNo eWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChoKTsKLSAgcmV0dXJuIFNldENvbnNvbGVDdXJzb3JQ b3NpdGlvbl9PcmlnIChoLCBjKTsKLX0KLXN0YXRpYyBCT09MIFdJTkFQSQotU2V0Q29uc29sZVRl eHRBdHRyaWJ1dGVfSG9va2VkCi0gICAgIChIQU5ETEUgaCwgV09SRCBhKQotewotICBzZXRfaXNo eWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChoKTsKLSAgcmV0dXJuIFNldENvbnNvbGVUZXh0QXR0 cmlidXRlX09yaWcgKGgsIGEpOwotfQotc3RhdGljIEJPT0wgV0lOQVBJCi1Xcml0ZUNvbnNvbGVJ bnB1dEFfSG9va2VkCi0gICAgIChIQU5ETEUgaCwgQ09OU1QgSU5QVVRfUkVDT1JEICpyLCBEV09S RCBsLCBMUERXT1JEIG4pCi17Ci0gIHNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGgp OwotICByZXR1cm4gV3JpdGVDb25zb2xlSW5wdXRBX09yaWcgKGgsIHIsIGwsIG4pOwotfQotc3Rh dGljIEJPT0wgV0lOQVBJCi1Xcml0ZUNvbnNvbGVJbnB1dFdfSG9va2VkCi0gICAgIChIQU5ETEUg aCwgQ09OU1QgSU5QVVRfUkVDT1JEICpyLCBEV09SRCBsLCBMUERXT1JEIG4pCi17Ci0gIHNldF9p c2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGgpOwotICByZXR1cm4gV3JpdGVDb25zb2xlSW5w dXRXX09yaWcgKGgsIHIsIGwsIG4pOwotfQotc3RhdGljIEJPT0wgV0lOQVBJCi1SZWFkQ29uc29s ZUlucHV0QV9Ib29rZWQKLSAgICAgKEhBTkRMRSBoLCBQSU5QVVRfUkVDT1JEIHIsIERXT1JEIGws IExQRFdPUkQgbikKLXsKLSAgc2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoaCk7Ci0g IHJldHVybiBSZWFkQ29uc29sZUlucHV0QV9PcmlnIChoLCByLCBsLCBuKTsKLX0KLXN0YXRpYyBC T09MIFdJTkFQSQotUmVhZENvbnNvbGVJbnB1dFdfSG9va2VkCi0gICAgIChIQU5ETEUgaCwgUElO UFVUX1JFQ09SRCByLCBEV09SRCBsLCBMUERXT1JEIG4pCi17Ci0gIHNldF9pc2h5YnJpZF9hbmRf c3dpdGNoX3RvX3Bjb24gKGgpOwotICByZXR1cm4gUmVhZENvbnNvbGVJbnB1dFdfT3JpZyAoaCwg ciwgbCwgbik7Ci19Ci1zdGF0aWMgQk9PTCBXSU5BUEkKLVBlZWtDb25zb2xlSW5wdXRBX0hvb2tl ZAotICAgICAoSEFORExFIGgsIFBJTlBVVF9SRUNPUkQgciwgRFdPUkQgbCwgTFBEV09SRCBuKQot ewotICBzZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChoKTsKLSAgcmV0dXJuIFBlZWtD b25zb2xlSW5wdXRBX09yaWcgKGgsIHIsIGwsIG4pOwotfQotc3RhdGljIEJPT0wgV0lOQVBJCi1Q ZWVrQ29uc29sZUlucHV0V19Ib29rZWQKLSAgICAgKEhBTkRMRSBoLCBQSU5QVVRfUkVDT1JEIHIs IERXT1JEIGwsIExQRFdPUkQgbikKLXsKLSAgc2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNv biAoaCk7Ci0gIHJldHVybiBQZWVrQ29uc29sZUlucHV0V19PcmlnIChoLCByLCBsLCBuKTsKLX0K LS8qIENyZWF0ZVByb2Nlc3MoKSBpcyBob29rZWQgZm9yIEdEQiBldGMuICovCiBzdGF0aWMgQk9P TCBXSU5BUEkKIENyZWF0ZVByb2Nlc3NBX0hvb2tlZAogICAgICAoTFBDU1RSIG4sIExQU1RSIGMs IExQU0VDVVJJVFlfQVRUUklCVVRFUyBwYSwgTFBTRUNVUklUWV9BVFRSSUJVVEVTIHRhLApAQCAt MzYzLDExICs4OCwxNCBAQCBDcmVhdGVQcm9jZXNzQV9Ib29rZWQKICAgICAgIExQU1RBUlRVUElO Rk9BIHNpLCBMUFBST0NFU1NfSU5GT1JNQVRJT04gcGkpCiB7CiAgIEhBTkRMRSBoOwotICBpZiAo c2ktPmR3RmxhZ3MgJiBTVEFSVEZfVVNFU1RESEFORExFUykKLSAgICBoID0gc2ktPmhTdGRPdXRw dXQ7Ci0gIGVsc2UKLSAgICBoID0gR2V0U3RkSGFuZGxlIChTVERfT1VUUFVUX0hBTkRMRSk7Ci0g IHNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGgpOworICBpZiAoIWlzSHlicmlkKQor ICAgIHsKKyAgICAgIGlmIChzaS0+ZHdGbGFncyAmIFNUQVJURl9VU0VTVERIQU5ETEVTKQorCWgg PSBzaS0+aFN0ZElucHV0OworICAgICAgZWxzZQorCWggPSBHZXRTdGRIYW5kbGUgKFNURF9JTlBV VF9IQU5ETEUpOworICAgICAgc2V0X3N3aXRjaF90b19wY29uIChoKTsKKyAgICB9CiAgIHJldHVy biBDcmVhdGVQcm9jZXNzQV9PcmlnIChuLCBjLCBwYSwgdGEsIGluaCwgZiwgZSwgZCwgc2ksIHBp KTsKIH0KIHN0YXRpYyBCT09MIFdJTkFQSQpAQCAtMzc3LDExICsxMDUsMTQgQEAgQ3JlYXRlUHJv Y2Vzc1dfSG9va2VkCiAgICAgICBMUFNUQVJUVVBJTkZPVyBzaSwgTFBQUk9DRVNTX0lORk9STUFU SU9OIHBpKQogewogICBIQU5ETEUgaDsKLSAgaWYgKHNpLT5kd0ZsYWdzICYgU1RBUlRGX1VTRVNU REhBTkRMRVMpCi0gICAgaCA9IHNpLT5oU3RkT3V0cHV0OwotICBlbHNlCi0gICAgaCA9IEdldFN0 ZEhhbmRsZSAoU1REX09VVFBVVF9IQU5ETEUpOwotICBzZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90 b19wY29uIChoKTsKKyAgaWYgKCFpc0h5YnJpZCkKKyAgICB7CisgICAgICBpZiAoc2ktPmR3Rmxh Z3MgJiBTVEFSVEZfVVNFU1RESEFORExFUykKKwloID0gc2ktPmhTdGRJbnB1dDsKKyAgICAgIGVs c2UKKwloID0gR2V0U3RkSGFuZGxlIChTVERfSU5QVVRfSEFORExFKTsKKyAgICAgIHNldF9zd2l0 Y2hfdG9fcGNvbiAoaCk7CisgICAgfQogICByZXR1cm4gQ3JlYXRlUHJvY2Vzc1dfT3JpZyAobiwg YywgcGEsIHRhLCBpbmgsIGYsIGUsIGQsIHNpLCBwaSk7CiB9CiAKQEAgLTQ2NCwxMCArMTk1LDYg QEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6Zmx1c2hfdG9fc2xhdmUgKCkKIHsKICAgaWYgKGdldF9y ZWFkYWhlYWRfdmFsaWQgKCkgJiYgIShnZXRfdHR5cCAoKS0+dGkuY19sZmxhZyAmIElDQU5PTikp CiAgICAgYWNjZXB0X2lucHV0ICgpOwotICBXYWl0Rm9yU2luZ2xlT2JqZWN0IChpbnB1dF9tdXRl eCwgSU5GSU5JVEUpOwotICBpZiAoIWdldF90dHlwICgpLT5wY29uX2luX2VtcHR5ICYmICEoZ2V0 X3R0eXAgKCktPnRpLmNfbGZsYWcgJiBJQ0FOT04pKQotICAgIFNldEV2ZW50IChpbnB1dF9hdmFp bGFibGVfZXZlbnQpOwotICBSZWxlYXNlTXV0ZXggKGlucHV0X211dGV4KTsKIH0KIAogRFdPUkQK QEAgLTUzMiwxNCArMjU5LDYgQEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6ZG9lY2hvIChjb25zdCB2 b2lkICpzdHIsIERXT1JEIGxlbikKICAgcmVsZWFzZV9vdXRwdXRfbXV0ZXggKCk7CiB9CiAKLWlu dAotZmhhbmRsZXJfcHR5X21hc3Rlcjo6cHV0X3JlYWRhaGVhZCAoY2hhciB2YWx1ZSkKLXsKLSAg aWYgKHRvX2JlX3JlYWRfZnJvbV9wY29uICgpKQotICAgIHJldHVybiAxOwotICByZXR1cm4gZmhh bmRsZXJfYmFzZTo6cHV0X3JlYWRhaGVhZCAodmFsdWUpOwotfQotCiBpbnQKIGZoYW5kbGVyX3B0 eV9tYXN0ZXI6OmFjY2VwdF9pbnB1dCAoKQogewpAQCAtNTUxLDkgKzI3MCwxMSBAQCBmaGFuZGxl cl9wdHlfbWFzdGVyOjphY2NlcHRfaW5wdXQgKCkKICAgY2hhciAqcCA9IHJhYnVmICgpICsgcmFp eGdldCAoKTsKICAgYnl0ZXNfbGVmdCA9IGVhdF9yZWFkYWhlYWQgKC0xKTsKIAorICBIQU5ETEUg d3JpdGVfdG8gPSBnZXRfb3V0cHV0X2hhbmRsZSAoKTsKICAgaWYgKHRvX2JlX3JlYWRfZnJvbV9w Y29uICgpKQotICAgIDsgLyogRG8gbm90aGluZyAqLwotICBlbHNlIGlmICghYnl0ZXNfbGVmdCkK KyAgICB3cml0ZV90byA9IHRvX3NsYXZlOworCisgIGlmICghYnl0ZXNfbGVmdCkKICAgICB7CiAg ICAgICB0ZXJtaW9zX3ByaW50ZiAoInNlbmRpbmcgRU9GIHRvIHNsYXZlIik7CiAgICAgICBnZXRf dHR5cCAoKS0+cmVhZF9yZXR2YWwgPSAwOwpAQCAtNTY0LDEwICsyODUsMTAgQEAgZmhhbmRsZXJf cHR5X21hc3Rlcjo6YWNjZXB0X2lucHV0ICgpCiAgICAgICBEV09SRCB3cml0dGVuID0gMDsKIAog ICAgICAgcGFyYW5vaWRfcHJpbnRmICgiYWJvdXQgdG8gd3JpdGUgJXUgY2hhcnMgdG8gc2xhdmUi LCBieXRlc19sZWZ0KTsKLSAgICAgIHJjID0gV3JpdGVGaWxlIChnZXRfb3V0cHV0X2hhbmRsZSAo KSwgcCwgYnl0ZXNfbGVmdCwgJndyaXR0ZW4sIE5VTEwpOworICAgICAgcmMgPSBXcml0ZUZpbGUg KHdyaXRlX3RvLCBwLCBieXRlc19sZWZ0LCAmd3JpdHRlbiwgTlVMTCk7CiAgICAgICBpZiAoIXJj KQogCXsKLQkgIGRlYnVnX3ByaW50ZiAoImVycm9yIHdyaXRpbmcgdG8gcGlwZSAlcCAlRSIsIGdl dF9vdXRwdXRfaGFuZGxlICgpKTsKKwkgIGRlYnVnX3ByaW50ZiAoImVycm9yIHdyaXRpbmcgdG8g cGlwZSAlcCAlRSIsIHdyaXRlX3RvKTsKIAkgIGdldF90dHlwICgpLT5yZWFkX3JldHZhbCA9IC0x OwogCSAgcmV0ID0gLTE7CiAJfQpAQCAtNzI1LDUyICs0NDYsMTIgQEAgb3V0OgogCiBmaGFuZGxl cl9wdHlfc2xhdmU6OmZoYW5kbGVyX3B0eV9zbGF2ZSAoaW50IHVuaXQpCiAgIDogZmhhbmRsZXJf cHR5X2NvbW1vbiAoKSwgaW51c2UgKE5VTEwpLCBvdXRwdXRfaGFuZGxlX2N5ZyAoTlVMTCksCi0g IGlvX2hhbmRsZV9jeWcgKE5VTEwpLCBwaWRfcmVzdG9yZSAoMCksIGZkICgtMSkKKyAgaW9faGFu ZGxlX2N5ZyAoTlVMTCkKIHsKICAgaWYgKHVuaXQgPj0gMCkKICAgICBkZXYgKCkucGFyc2UgKERF Vl9QVFlTX01BSk9SLCB1bml0KTsKIH0KIAotZmhhbmRsZXJfcHR5X3NsYXZlOjp+ZmhhbmRsZXJf cHR5X3NsYXZlICgpCi17Ci0gIGlmICghZ2V0X3R0eXAgKCkpCi0gICAgewotICAgICAgLyogV2h5 IGNvbWVzIGhlcmU/IFdobyBjbGVhcnMgX3RjPyAqLwotICAgICAgZnJlZV9hdHRhY2hlZF9jb25z b2xlICgpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgaWYgKGdldF9wc2V1ZG9fY29uc29sZSAo KSkKLSAgICB7Ci0gICAgICBpbnQgdXNlZCA9IDA7Ci0gICAgICBpbnQgYXR0YWNoZWQgPSAwOwot ICAgICAgY3lnaGVhcF9mZGVudW0gY2ZkIChmYWxzZSk7Ci0gICAgICB3aGlsZSAoY2ZkLm5leHQg KCkgPj0gMCkKLQl7Ci0JICBpZiAoY2ZkLT5nZXRfbWFqb3IgKCkgPT0gREVWX1BUWVNfTUFKT1Ig fHwKLQkgICAgICBjZmQtPmdldF9tYWpvciAoKSA9PSBERVZfQ09OU19NQUpPUikKLQkgICAgdXNl ZCArKzsKLQkgIGlmIChjZmQtPmdldF9tYWpvciAoKSA9PSBERVZfUFRZU19NQUpPUiAmJgotCSAg ICAgIGNmZC0+Z2V0X21pbm9yICgpID09IHBjb25fYXR0YWNoZWRfdG8pCi0JICAgIGF0dGFjaGVk ICsrOwotCX0KLQotICAgICAgLyogQ2FsbCBGcmVlQ29uc29sZSgpIGlmIG5vIHR0eSBpcyBvcGVu ZWQgYW5kIHRoZSBwcm9jZXNzCi0JIGlzIGF0dGFjaGVkIHRvIGNvbnNvbGUgY29ycmVzcG9uZGlu ZyB0byB0dHkuIFRoaXMgaXMKLQkgbmVlZGVkIHRvIG1ha2UgR05VIHNjcmVlbiBhbmQgdG11eCB3 b3JrIGluIFdpbmRvd3MgMTAKLQkgMTkwMy4gKi8KLSAgICAgIGlmIChhdHRhY2hlZCA9PSAwKQot CXsKLQkgIHBjb25fYXR0YWNoZWRfdG8gPSAtMTsKLQkgIGxhc3RfdHR5cCA9IGdldF90dHlwICgp OwotCX0KLSAgICAgIGlmICh1c2VkID09IDApCi0JewotCSAgaW5pdF9jb25zb2xlX2hhbmRsZXIg KGZhbHNlKTsKLQkgIGZyZWVfYXR0YWNoZWRfY29uc29sZSAoKTsKLQl9Ci0gICAgfQotfQotCiBp bnQKIGZoYW5kbGVyX3B0eV9zbGF2ZTo6b3BlbiAoaW50IGZsYWdzLCBtb2RlX3QpCiB7CkBAIC04 MzMsOCArNTE0LDggQEAgZmhhbmRsZXJfcHR5X3NsYXZlOjpvcGVuIChpbnQgZmxhZ3MsIG1vZGVf dCkKICAgICByZWxlYXNlX291dHB1dF9tdXRleCAoKTsKICAgfQogCi0gIGlmICghZ2V0X3R0eXAg KCktPmZyb21fbWFzdGVyICgpIHx8ICFnZXRfdHR5cCAoKS0+ZnJvbV9tYXN0ZXJfY3lnICgpIHx8 Ci0gICAgICAhZ2V0X3R0eXAgKCktPnRvX21hc3RlciAoKSB8fCAhZ2V0X3R0eXAgKCktPnRvX21h c3Rlcl9jeWcgKCkpCisgIGlmICghZ2V0X3R0eXAgKCktPmZyb21fbWFzdGVyICgpIHx8ICFnZXRf dHR5cCAoKS0+ZnJvbV9tYXN0ZXJfY3lnICgpCisgICAgICB8fCAhZ2V0X3R0eXAgKCktPnRvX21h c3RlciAoKSB8fCAhZ2V0X3R0eXAgKCktPnRvX21hc3Rlcl9jeWcgKCkpCiAgICAgewogICAgICAg ZXJybXNnID0gInB0eSBoYW5kbGVzIGhhdmUgYmVlbiBjbG9zZWQiOwogICAgICAgc2V0X2Vycm5v IChFQUNDRVMpOwpAQCAtOTIzLDggKzYwNCw4IEBAIGZoYW5kbGVyX3B0eV9zbGF2ZTo6b3BlbiAo aW50IGZsYWdzLCBtb2RlX3QpCiAgICAgICBmcm9tX21hc3Rlcl9jeWdfbG9jYWwgPSByZXBsLmZy b21fbWFzdGVyX2N5ZzsKICAgICAgIHRvX21hc3Rlcl9sb2NhbCA9IHJlcGwudG9fbWFzdGVyOwog ICAgICAgdG9fbWFzdGVyX2N5Z19sb2NhbCA9IHJlcGwudG9fbWFzdGVyX2N5ZzsKLSAgICAgIGlm ICghZnJvbV9tYXN0ZXJfbG9jYWwgfHwgIWZyb21fbWFzdGVyX2N5Z19sb2NhbCB8fAotCSAgIXRv X21hc3Rlcl9sb2NhbCB8fCAhdG9fbWFzdGVyX2N5Z19sb2NhbCkKKyAgICAgIGlmICghZnJvbV9t YXN0ZXJfbG9jYWwgfHwgIWZyb21fbWFzdGVyX2N5Z19sb2NhbAorCSAgfHwgIXRvX21hc3Rlcl9s b2NhbCB8fCAhdG9fbWFzdGVyX2N5Z19sb2NhbCkKIAl7CiAJICBTZXRMYXN0RXJyb3IgKHJlcGwu ZXJyb3IpOwogCSAgZXJybXNnID0gImVycm9yIGR1cGxpY2F0aW5nIHBpcGVzLCAlRSI7CkBAIC05 NTAsMjQgKzYzMSw3IEBAIGZoYW5kbGVyX3B0eV9zbGF2ZTo6b3BlbiAoaW50IGZsYWdzLCBtb2Rl X3QpCiAgIHNldF9vdXRwdXRfaGFuZGxlICh0b19tYXN0ZXJfbG9jYWwpOwogICBzZXRfb3V0cHV0 X2hhbmRsZV9jeWcgKHRvX21hc3Rlcl9jeWdfbG9jYWwpOwogCi0gIGlmICghZ2V0X3BzZXVkb19j b25zb2xlICgpKQotICAgIHsKLSAgICAgIGZoYW5kbGVyX2NvbnNvbGU6Om5lZWRfaW52aXNpYmxl ICgpOwotICAgICAgcGNvbl9hdHRhY2hlZF90byA9IC0xOwotICAgIH0KLSAgZWxzZSBpZiAoIWZo YW5kbGVyX2NvbnNvbGU6OmdldF9jb25zb2xlX3Byb2Nlc3NfaWQKLQkJCSAgICAgICAoR2V0Q3Vy cmVudFByb2Nlc3NJZCAoKSwgdHJ1ZSkpCi0gICAgewotICAgICAgZmhhbmRsZXJfY29uc29sZTo6 bmVlZF9pbnZpc2libGUgKCk7Ci0gICAgICBwY29uX2F0dGFjaGVkX3RvID0gLTE7Ci0gICAgfQot ICBlbHNlIGlmIChmaGFuZGxlcl9jb25zb2xlOjpnZXRfY29uc29sZV9wcm9jZXNzX2lkCi0JCQkg ICAgICAgKGdldF9oZWxwZXJfcHJvY2Vzc19pZCAoKSwgdHJ1ZSkpCi0gICAgLyogQXR0YWNoZWQg dG8gcGNvbiBvZiB0aGlzIHB0eSAqLwotICAgIHsKLSAgICAgIHBjb25fYXR0YWNoZWRfdG8gPSBn ZXRfbWlub3IgKCk7Ci0gICAgICBpbml0X2NvbnNvbGVfaGFuZGxlciAodHJ1ZSk7Ci0gICAgfQor ICBmaGFuZGxlcl9jb25zb2xlOjpuZWVkX2ludmlzaWJsZSAoKTsKIAogICBzZXRfb3Blbl9zdGF0 dXMgKCk7CiAgIHJldHVybiAxOwpAQCAtMTAyMSw4ICs2ODUsNyBAQCBmaGFuZGxlcl9wdHlfc2xh dmU6OmNsb3NlICgpCiAgIGlmICghRm9yY2VDbG9zZUhhbmRsZSAoZ2V0X2hhbmRsZV9jeWcgKCkp KQogICAgIHRlcm1pb3NfcHJpbnRmICgiQ2xvc2VIYW5kbGUgKGdldF9oYW5kbGVfY3lnICgpPCVw PiksICVFIiwKIAlnZXRfaGFuZGxlX2N5ZyAoKSk7Ci0gIGlmICghZ2V0X3BzZXVkb19jb25zb2xl ICgpICYmCi0gICAgICAodW5zaWduZWQpIG15c2VsZi0+Y3R0eSA9PSBGSERFViAoREVWX1BUWVNf TUFKT1IsIGdldF9taW5vciAoKSkpCisgIGlmICgodW5zaWduZWQpIG15c2VsZi0+Y3R0eSA9PSBG SERFViAoREVWX1BUWVNfTUFKT1IsIGdldF9taW5vciAoKSkpCiAgICAgZmhhbmRsZXJfY29uc29s ZTo6ZnJlZV9jb25zb2xlICgpOwkvKiBhc3N1bWVzIHRoYXQgd2UgYXJlIHRoZSBsYXN0IHB0eSBj bG9zZXIgKi8KICAgZmhhbmRsZXJfcHR5X2NvbW1vbjo6Y2xvc2UgKCk7CiAgIGlmICghRm9yY2VD bG9zZUhhbmRsZSAob3V0cHV0X211dGV4KSkKQEAgLTEwNzAsNDIzICs3MzMsMzEgQEAgZmhhbmRs ZXJfcHR5X3NsYXZlOjppbml0IChIQU5ETEUgaCwgRFdPUkQgYSwgbW9kZV90KQogICByZXR1cm4g cmV0OwogfQogCi1ib29sCi1maGFuZGxlcl9wdHlfc2xhdmU6OnRyeV9yZWF0dGFjaF9wY29uICh2 b2lkKQotewotICBwaWRfcmVzdG9yZSA9IDA7Ci0KLSAgLyogRG8gbm90IGRldGFjaCBmcm9tIHRo ZSBjb25zb2xlIGJlY2F1c2UgcmUtYXR0YWNoaW5nIHdpbGwKLSAgICAgZmFpbCBpZiBoZWxwZXIg cHJvY2VzcyBpcyBydW5uaW5nIGFzIHNlcnZpY2UgYWNjb3VudC4gKi8KLSAgaWYgKGdldF90dHlw KCktPmF0dGFjaF9wY29uX2luX2ZvcmspCi0gICAgcmV0dXJuIGZhbHNlOwotICBpZiAocGNvbl9h dHRhY2hlZF90byA+PSAwICYmCi0gICAgICBjeWd3aW5fc2hhcmVkLT50dHlbcGNvbl9hdHRhY2hl ZF90b10tPmF0dGFjaF9wY29uX2luX2ZvcmspCi0gICAgcmV0dXJuIGZhbHNlOwotCi0gIHBpZF9y ZXN0b3JlID0KLSAgICBmaGFuZGxlcl9jb25zb2xlOjpnZXRfY29uc29sZV9wcm9jZXNzX2lkIChH ZXRDdXJyZW50UHJvY2Vzc0lkICgpLAotCQkJCQkgICAgICBmYWxzZSk7Ci0gIC8qIElmIHBpZF9y ZXN0b3JlIGlzIG5vdCBzZXQsIGdpdmUgdXAuICovCi0gIGlmICghcGlkX3Jlc3RvcmUpCi0gICAg cmV0dXJuIGZhbHNlOwotCi0gIEZyZWVDb25zb2xlICgpOwotICBpZiAoIUF0dGFjaENvbnNvbGUg KGdldF9oZWxwZXJfcHJvY2Vzc19pZCAoKSkpCi0gICAgewotICAgICAgc3lzdGVtX3ByaW50ZiAo InB0eSVkOiBBdHRhY2hDb25zb2xlKGhlbHBlcj0lZCkgZmFpbGVkLiAweCUwOGx4IiwKLQkJICAg ICBnZXRfbWlub3IgKCksIGdldF9oZWxwZXJfcHJvY2Vzc19pZCAoKSwgR2V0TGFzdEVycm9yICgp KTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIHJldHVybiB0cnVlOwotfQotCiB2b2lk Ci1maGFuZGxlcl9wdHlfc2xhdmU6OnJlc3RvcmVfcmVhdHRhY2hfcGNvbiAodm9pZCkKK2ZoYW5k bGVyX3B0eV9zbGF2ZTo6c2V0X3N3aXRjaF90b19wY29uICh2b2lkKQogewotICBpZiAocGlkX3Jl c3RvcmUpCisgIGlmICghZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX2luKQogICAgIHsKLSAg ICAgIEZyZWVDb25zb2xlICgpOwotICAgICAgaWYgKCFBdHRhY2hDb25zb2xlIChwaWRfcmVzdG9y ZSkpCi0JewotCSAgc3lzdGVtX3ByaW50ZiAoInB0eSVkOiBBdHRhY2hDb25zb2xlKHJlc3RvcmU9 JWQpIGZhaWxlZC4gMHglMDhseCIsCi0JCQkgZ2V0X21pbm9yICgpLCBwaWRfcmVzdG9yZSwgR2V0 TGFzdEVycm9yICgpKTsKLQkgIHBjb25fYXR0YWNoZWRfdG8gPSAtMTsKLQl9Ci0gICAgfQotICBw aWRfcmVzdG9yZSA9IDA7Ci19Ci0KLS8qIFRoaXMgZnVuY3Rpb24gcmVxdWVzdHMgdHJhbnNmZXJp bmcgdGhlIGlucHV0IGRhdGEgZnJvbSB0aGUgaW5wdXQKLSAgIHBpcGUgZm9yIGN5Z3dpbiBhcHBz IHRvIHRoZSBvdGhlciBpbnB1dCBwaXBlIGZvciBuYXRpdmUgYXBwcy4gKi8KLXZvaWQKLWZoYW5k bGVyX3B0eV9zbGF2ZTo6cHVsbF9wY29uX2lucHV0ICh2b2lkKQotewotICBnZXRfdHR5cCAoKS0+ cmVxX3RyYW5zZmVyX2lucHV0X3RvX3Bjb24gPSB0cnVlOwotICB3aGlsZSAoZ2V0X3R0eXAgKCkt PnJlcV90cmFuc2Zlcl9pbnB1dF90b19wY29uKQotICAgIFNsZWVwICgxKTsKLX0KLQotdm9pZAot ZmhhbmRsZXJfcHR5X3NsYXZlOjp1cGRhdGVfcGNvbl9pbnB1dF9zdGF0ZSAoYm9vbCBuZWVkX2xv Y2spCi17Ci0gIGlmIChuZWVkX2xvY2spCi0gICAgV2FpdEZvclNpbmdsZU9iamVjdCAoaW5wdXRf bXV0ZXgsIElORklOSVRFKTsKLSAgLyogRmx1c2ggaW5wdXQgYnVmZmVyIGlmIGl0IGlzIHJlcXVl c3RlZCBieSBtYXN0ZXIuCi0gICAgIFRoaXMgaGFwcGVucyBpZiBeQyBpcyBwcmVzc2VkIGluIHBz ZXVkbyBjb25zb2xlIHNpZGUuICovCi0gIGlmIChnZXRfdHR5cCAoKS0+cmVxX2ZsdXNoX3Bjb25f aW5wdXQpCi0gICAgewotICAgICAgRmx1c2hDb25zb2xlSW5wdXRCdWZmZXIgKGdldF9oYW5kbGUg KCkpOwotICAgICAgZ2V0X3R0eXAgKCktPnJlcV9mbHVzaF9wY29uX2lucHV0ID0gZmFsc2U7Ci0g ICAgfQotICAvKiBQZWVrIGNvbnNvbGUgaW5wdXQgYnVmZmVyIGFuZCB1cGRhdGUgc3RhdGUuICov Ci0gIElOUFVUX1JFQ09SRCBpbnBbSU5SRUNfU0laRV07Ci0gIERXT1JEIG47Ci0gIEJPT0wgKFdJ TkFQSSAqUGVla0Z1bmMpCi0gICAgKEhBTkRMRSwgUElOUFVUX1JFQ09SRCwgRFdPUkQsIExQRFdP UkQpOwotICBQZWVrRnVuYyA9Ci0gICAgUGVla0NvbnNvbGVJbnB1dEFfT3JpZyA/IDogUGVla0Nv bnNvbGVJbnB1dDsKLSAgUGVla0Z1bmMgKGdldF9oYW5kbGUgKCksIGlucCwgSU5SRUNfU0laRSwg Jm4pOwotICBib29sIHNhd19hY2NlcHQgPSBmYWxzZTsKLSAgYm9vbCBwaXBlX2VtcHR5ID0gdHJ1 ZTsKLSAgd2hpbGUgKG4tLSA+IDApCi0gICAgaWYgKGlucFtuXS5FdmVudFR5cGUgPT0gS0VZX0VW RU5UICYmIGlucFtuXS5FdmVudC5LZXlFdmVudC5iS2V5RG93biAmJgotCWlucFtuXS5FdmVudC5L ZXlFdmVudC51Q2hhci5Bc2NpaUNoYXIpCi0gICAgICB7Ci0JcGlwZV9lbXB0eSA9IGZhbHNlOwot CWNoYXIgYyA9IGlucFtuXS5FdmVudC5LZXlFdmVudC51Q2hhci5Bc2NpaUNoYXI7Ci0JY29uc3Qg Y2hhciBzaWdzW10gPSB7Ci0JICAoY2hhcikgZ2V0X3R0eXAgKCktPnRpLmNfY2NbVklOVFJdLAot CSAgKGNoYXIpIGdldF90dHlwICgpLT50aS5jX2NjW1ZRVUlUXSwKLQkgIChjaGFyKSBnZXRfdHR5 cCAoKS0+dGkuY19jY1tWU1VTUF0sCi0JfTsKLQljb25zdCBjaGFyIGVvbHNbXSA9IHsKLQkgIChj aGFyKSBnZXRfdHR5cCAoKS0+dGkuY19jY1tWRU9GXSwKLQkgIChjaGFyKSBnZXRfdHR5cCAoKS0+ dGkuY19jY1tWRU9MXSwKLQkgIChjaGFyKSBnZXRfdHR5cCAoKS0+dGkuY19jY1tWRU9MMl0sCi0J ICAnXG4nLAotCSAgJ1xyJwotCX07Ci0JaWYgKGlzX2xpbmVfaW5wdXQgKCkgJiYgYyAmJiBtZW1j aHIgKGVvbHMsIGMsIHNpemVvZiAoZW9scykpKQotCSAgc2F3X2FjY2VwdCA9IHRydWU7Ci0JaWYg KChnZXRfdHR5cCAoKS0+dGkuY19sZmxhZyAmIElTSUcpCi0JICAgICYmIGMgJiYgbWVtY2hyIChz aWdzLCBjLCBzaXplb2YgKHNpZ3MpKSkKLQkgIHNhd19hY2NlcHQgPSB0cnVlOwotICAgICAgfQot ICBnZXRfdHR5cCAoKS0+cGNvbl9pbl9lbXB0eSA9IHBpcGVfZW1wdHkgJiYgIShyYWxlbiAoKSA+ IHJhaXhnZXQgKCkpOwotICBpZiAoIWdldF9yZWFkYWhlYWRfdmFsaWQgKCkgJiYKLSAgICAgIChw aXBlX2VtcHR5IHx8IChpc19saW5lX2lucHV0ICgpICYmICFzYXdfYWNjZXB0KSkgJiYKLSAgICAg IGdldF90dHlwICgpLT5yZWFkX3JldHZhbCA9PSAxICYmIGJ5dGVzX2F2YWlsYWJsZSAobikgJiYg biA9PSAwKQotICAgIFJlc2V0RXZlbnQgKGlucHV0X2F2YWlsYWJsZV9ldmVudCk7Ci0gIGlmIChu ZWVkX2xvY2spCi0gICAgUmVsZWFzZU11dGV4IChpbnB1dF9tdXRleCk7Ci19Ci0KLWludAotZmhh bmRsZXJfcHR5X3NsYXZlOjplYXRfcmVhZGFoZWFkIChpbnQgbikKLXsKLSAgaW50IG9yYWxlbiA9 IHJhbGVuICgpOwotICBpZiAobiA8IDApCi0gICAgbiA9IHJhbGVuICgpIC0gcmFpeGdldCAoKTsK LSAgaWYgKG4gPiAwICYmIHJhbGVuICgpID4gcmFpeGdldCAoKSkKLSAgICB7Ci0gICAgICBjb25z dCBjaGFyIGVvbHNbXSA9IHsKLQkoY2hhcikgZ2V0X3R0eXAgKCktPnRpLmNfY2NbVkVPRl0sCi0J KGNoYXIpIGdldF90dHlwICgpLT50aS5jX2NjW1ZFT0xdLAotCShjaGFyKSBnZXRfdHR5cCAoKS0+ dGkuY19jY1tWRU9MMl0sCi0JJ1xuJwotICAgICAgfTsKLSAgICAgIHdoaWxlIChuID4gMCAmJiBy YWxlbiAoKSA+IHJhaXhnZXQgKCkpCi0JewotCSAgaWYgKGlzX2xpbmVfaW5wdXQgKCkgJiYgcmFi dWYgKClbcmFsZW4gKCktMV0KLQkgICAgICAmJiBtZW1jaHIgKGVvbHMsIHJhYnVmICgpW3JhbGVu ICgpLTFdLCBzaXplb2YgKGVvbHMpKSkKLQkgICAgYnJlYWs7Ci0JICAtLSBuOwotCSAgLS0gcmFs ZW4gKCk7Ci0JfQotCi0gICAgICAvKiBJZiBJVVRGOCBpcyBzZXQsIHRoZSB0ZXJtaW5hbCBpcyBp biBVVEYtOCBtb2RlLiAgSWYgc28sIHdlIGVyYXNlCi0JIGEgY29tcGxldGUgVVRGLTggbXVsdGli eXRlIHNlcXVlbmNlIG9uIFZFUkFTRS9WV0VSQVNFLiAgT3RoZXJ3aXNlLAotCSBpZiB3ZSBvbmx5 IGVyYXNlIGEgc2luZ2xlIGJ5dGUsIGludmFsaWQgdW5pY29kZSBjaGFycyBhcmUgbGVmdCBpbgot CSB0aGUgaW5wdXQuICovCi0gICAgICBpZiAoZ2V0X3R0eXAgKCktPnRpLmNfaWZsYWcgJiBJVVRG OCkKLQl3aGlsZSAocmFsZW4gKCkgPiByYWl4Z2V0ICgpICYmCi0JICAgICAgICgodW5zaWduZWQg Y2hhcikgcmFidWYgKClbcmFsZW4gKCldICYgMHhjMCkgPT0gMHg4MCkKLQkgIC0tcmFsZW4gKCk7 Ci0gICAgfQotICBvcmFsZW4gPSBvcmFsZW4gLSByYWxlbiAoKTsKLSAgaWYgKHJhaXhnZXQgKCkg Pj0gcmFsZW4gKCkpCi0gICAgcmFpeGdldCAoKSA9IHJhaXhwdXQgKCkgPSByYWxlbiAoKSA9IDA7 Ci0gIGVsc2UgaWYgKHJhaXhwdXQgKCkgPiByYWxlbiAoKSkKLSAgICByYWl4cHV0ICgpID0gcmFs ZW4gKCk7Ci0KLSAgcmV0dXJuIG9yYWxlbjsKLX0KLQotaW50Ci1maGFuZGxlcl9wdHlfc2xhdmU6 OmdldF9yZWFkYWhlYWRfaW50b19idWZmZXIgKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKLXsK LSAgaW50IGNoOwotICBpbnQgY29waWVkX2NoYXJzID0gMDsKLQotICB3aGlsZSAoYnVmbGVuKQot ICAgIGlmICgoY2ggPSBnZXRfcmVhZGFoZWFkICgpKSA8IDApCi0gICAgICBicmVhazsKLSAgICBl bHNlCi0gICAgICB7Ci0JY29uc3QgY2hhciBlb2xzW10gPSB7Ci0JICAoY2hhcikgZ2V0X3R0eXAg KCktPnRpLmNfY2NbVkVPRl0sCi0JICAoY2hhcikgZ2V0X3R0eXAgKCktPnRpLmNfY2NbVkVPTF0s Ci0JICAoY2hhcikgZ2V0X3R0eXAgKCktPnRpLmNfY2NbVkVPTDJdLAotCSAgJ1xuJwotCX07Ci0J YnVmW2NvcGllZF9jaGFycysrXSA9ICh1bnNpZ25lZCBjaGFyKShjaCAmIDB4ZmYpOwotCWJ1Zmxl bi0tOwotCWlmIChpc19saW5lX2lucHV0ICgpICYmIGNoICYmIG1lbWNociAoZW9scywgY2ggJiAw eGZmLCBzaXplb2YgKGVvbHMpKSkKLQkgIGJyZWFrOwotICAgICAgfQotCi0gIHJldHVybiBjb3Bp ZWRfY2hhcnM7Ci19Ci0KLWJvb2wKLWZoYW5kbGVyX3B0eV9zbGF2ZTo6Z2V0X3JlYWRhaGVhZF92 YWxpZCAodm9pZCkKLXsKLSAgaWYgKGlzX2xpbmVfaW5wdXQgKCkpCi0gICAgewotICAgICAgY29u c3QgY2hhciBlb2xzW10gPSB7Ci0JKGNoYXIpIGdldF90dHlwICgpLT50aS5jX2NjW1ZFT0ZdLAot CShjaGFyKSBnZXRfdHR5cCAoKS0+dGkuY19jY1tWRU9MXSwKLQkoY2hhcikgZ2V0X3R0eXAgKCkt PnRpLmNfY2NbVkVPTDJdLAotCSdcbicKLSAgICAgIH07Ci0gICAgICBmb3IgKHNpemVfdCBpPXJh aXhnZXQgKCk7IGk8cmFsZW4gKCk7IGkrKykKLQlpZiAocmFidWYgKClbaV0gJiYgbWVtY2hyIChl b2xzLCByYWJ1ZiAoKVtpXSwgc2l6ZW9mIChlb2xzKSkpCi0JICByZXR1cm4gdHJ1ZTsKLSAgICAg IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIGVsc2UKLSAgICByZXR1cm4gcmFsZW4gKCkgPiByYWl4 Z2V0ICgpOwotfQotCi12b2lkCi1maGFuZGxlcl9wdHlfc2xhdmU6OnNldF9zd2l0Y2hfdG9fcGNv biAoaW50IGZkX3NldCkKLXsKLSAgaWYgKGZkIDwgMCkKLSAgICBmZCA9IGZkX3NldDsKLSAgYWNx dWlyZV9vdXRwdXRfbXV0ZXggKElORklOSVRFKTsKLSAgaWYgKGZkID09IDAgJiYgIWdldF90dHlw ICgpLT5zd2l0Y2hfdG9fcGNvbl9pbikKLSAgICB7Ci0gICAgICBwdWxsX3Bjb25faW5wdXQgKCk7 Ci0gICAgICBpZiAoZ2V0X3R0eXAgKCktPnBjb25fcGlkID09IDAgfHwKLQkgICFwaW5mbyAoZ2V0 X3R0eXAgKCktPnBjb25fcGlkKSkKKyAgICAgIGlzSHlicmlkID0gdHJ1ZTsKKyAgICAgIGlmIChn ZXRfdHR5cCAoKS0+cGNvbl9waWQgPT0gMCB8fCAhcGluZm8gKGdldF90dHlwICgpLT5wY29uX3Bp ZCkpCiAJZ2V0X3R0eXAgKCktPnBjb25fcGlkID0gbXlzZWxmLT5waWQ7CiAgICAgICBnZXRfdHR5 cCAoKS0+c3dpdGNoX3RvX3Bjb25faW4gPSB0cnVlOwotICAgICAgaWYgKGlzSHlicmlkICYmICFn ZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25fb3V0KQotCXsKLQkgIGdldF90dHlwICgpLT53YWl0 X3Bjb25fZndkICgpOwotCSAgZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX291dCA9IHRydWU7 Ci0JfQogICAgIH0KLSAgZWxzZSBpZiAoKGZkID09IDEgfHwgZmQgPT0gMikgJiYgIWdldF90dHlw ICgpLT5zd2l0Y2hfdG9fcGNvbl9vdXQpCi0gICAgewotICAgICAgZ2V0X3R0eXAgKCktPndhaXRf cGNvbl9md2QgKCk7Ci0gICAgICBpZiAoZ2V0X3R0eXAgKCktPnBjb25fcGlkID09IDAgfHwKLQkg ICFwaW5mbyAoZ2V0X3R0eXAgKCktPnBjb25fcGlkKSkKLQlnZXRfdHR5cCAoKS0+cGNvbl9waWQg PSBteXNlbGYtPnBpZDsKLSAgICAgIGdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9vdXQgPSB0 cnVlOwotICAgICAgaWYgKGlzSHlicmlkKQotCWdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9p biA9IHRydWU7Ci0gICAgfQotICByZWxlYXNlX291dHB1dF9tdXRleCAoKTsKIH0KIAogdm9pZAog ZmhhbmRsZXJfcHR5X3NsYXZlOjpyZXNldF9zd2l0Y2hfdG9fcGNvbiAodm9pZCkKIHsKLSAgaWYg KGdldF90dHlwICgpLT5wY29uX3BpZCAmJgotICAgICAgZ2V0X3R0eXAgKCktPnBjb25fcGlkICE9 IG15c2VsZi0+cGlkICYmCi0gICAgICAhIXBpbmZvIChnZXRfdHR5cCAoKS0+cGNvbl9waWQpKQor ICBpZiAoZ2V0X3R0eXAgKCktPnBjb25fcGlkICYmIGdldF90dHlwICgpLT5wY29uX3BpZCAhPSBt eXNlbGYtPnBpZAorICAgICAgJiYgISFwaW5mbyAoZ2V0X3R0eXAgKCktPnBjb25fcGlkKSkKICAg ICAvKiBUaGVyZSBpcyBhIHByb2Nlc3Mgd2hpY2ggaXMgZ3JhYmJpbmcgcHNldWRvIGNvbnNvbGUu ICovCiAgICAgcmV0dXJuOwogICBpZiAoaXNIeWJyaWQpCiAgICAgcmV0dXJuOwotICBpZiAoZG9f bm90X3Jlc2V0X3N3aXRjaF90b19wY29uKQotICAgIHJldHVybjsKLSAgYWNxdWlyZV9vdXRwdXRf bXV0ZXggKElORklOSVRFKTsKLSAgaWYgKGdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9vdXQp Ci0gICAgLyogV2FpdCBmb3IgcHR5X21hc3Rlcl9md2RfdGhyZWFkKCkgKi8KLSAgICBnZXRfdHR5 cCAoKS0+d2FpdF9wY29uX2Z3ZCAoKTsKICAgZ2V0X3R0eXAgKCktPnBjb25fcGlkID0gMDsKICAg Z2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX2luID0gZmFsc2U7Ci0gIGdldF90dHlwICgpLT5z d2l0Y2hfdG9fcGNvbl9vdXQgPSBmYWxzZTsKLSAgcmVsZWFzZV9vdXRwdXRfbXV0ZXggKCk7Ci0g IGluaXRfY29uc29sZV9oYW5kbGVyICh0cnVlKTsKLX0KLQotdm9pZAotZmhhbmRsZXJfcHR5X3Ns YXZlOjpwdXNoX3RvX3Bjb25fc2NyZWVuYnVmZmVyIChjb25zdCBjaGFyICpwdHIsIHNpemVfdCBs ZW4sCi0JCQkJCSAgICAgICBib29sIGlzX2VjaG8pCi17Ci0gIGJvb2wgYXR0YWNoZWQgPQotICAg ICEhZmhhbmRsZXJfY29uc29sZTo6Z2V0X2NvbnNvbGVfcHJvY2Vzc19pZCAoZ2V0X2hlbHBlcl9w cm9jZXNzX2lkICgpLCB0cnVlKTsKLSAgaWYgKCFhdHRhY2hlZCAmJiBwY29uX2F0dGFjaGVkX3Rv ID09IGdldF9taW5vciAoKSkKLSAgICB7Ci0gICAgICBmb3IgKERXT1JEIHQwID0gR2V0VGlja0Nv dW50ICgpOyBHZXRUaWNrQ291bnQgKCkgLSB0MCA8IDEwMDsgKQotCXsKLQkgIFNsZWVwICgxKTsK LQkgIGF0dGFjaGVkID0gZmhhbmRsZXJfY29uc29sZTo6Z2V0X2NvbnNvbGVfcHJvY2Vzc19pZAot CQkJCSAgICAgIChnZXRfaGVscGVyX3Byb2Nlc3NfaWQgKCksIHRydWUpOwotCSAgaWYgKGF0dGFj aGVkKQotCSAgICBicmVhazsKLQl9Ci0gICAgICBpZiAoIWF0dGFjaGVkKQotCXsKLQkgIHN5c3Rl bV9wcmludGYgKCJwdHklZDogcGNvbl9hdHRhY2hfdG8gbWlzbWF0Y2g/Pz8/Pz8iLCBnZXRfbWlu b3IgKCkpOwotCSAgcmV0dXJuOwotCX0KLSAgICB9Ci0KLSAgLyogSWYgbm90IGF0dGFjaGVkIHRv IHRoaXMgcHNldWRvIGNvbnNvbGUsIHRyeSB0byBhdHRhY2ggdGVtcG9yYXJpbHkuICovCi0gIHBp ZF9yZXN0b3JlID0gMDsKLSAgaWYgKHBjb25fYXR0YWNoZWRfdG8gIT0gZ2V0X21pbm9yICgpKQot ICAgIGlmICghdHJ5X3JlYXR0YWNoX3Bjb24gKCkpCi0gICAgICBnb3RvIGRldGFjaDsKLQotICBj aGFyICpidWY7Ci0gIHNpemVfdCBubGVuOwotICBEV09SRCBvcmlnQ1A7Ci0gIG9yaWdDUCA9IEdl dENvbnNvbGVPdXRwdXRDUCAoKTsKLSAgU2V0Q29uc29sZU91dHB1dENQIChnZXRfdHR5cCAoKS0+ dGVybV9jb2RlX3BhZ2UpOwotICAvKiBKdXN0IGNvcHkgKi8KLSAgYnVmID0gKGNoYXIgKikgSGVh cEFsbG9jIChHZXRQcm9jZXNzSGVhcCAoKSwgMCwgbGVuKTsKLSAgbWVtY3B5IChidWYsIChjaGFy ICopcHRyLCBsZW4pOwotICBubGVuID0gbGVuOwotICBjaGFyICpwMCwgKnAxOwotICBwMCA9IHAx ID0gYnVmOwotICAvKiBSZW1vdmUgYWx0ZXJuYXRlIHNjcmVlbiBidWZmZXIgZHJhd2luZyAqLwot ICB3aGlsZSAocDAgJiYgcDEpCi0gICAgewotICAgICAgaWYgKCFnZXRfdHR5cCAoKS0+c2NyZWVu X2FsdGVybmF0ZWQpCi0JewotCSAgLyogQ2hlY2sgc3dpdGNoaW5nIHRvIGFsdGVybmF0ZSBzY3Jl ZW4gYnVmZmVyICovCi0JICBwMCA9IChjaGFyICopIG1lbW1lbSAocDEsIG5sZW4gLSAocDEtYnVm KSwgIlwwMzNbPzEwNDloIiwgOCk7Ci0JICBpZiAocDApCi0JICAgIHsKLQkgICAgICAvL3AwICs9 IDg7Ci0JICAgICAgZ2V0X3R0eXAgKCktPnNjcmVlbl9hbHRlcm5hdGVkID0gdHJ1ZTsKLQkgICAg ICBpZiAoZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX291dCkKLQkJZG9fbm90X3Jlc2V0X3N3 aXRjaF90b19wY29uID0gdHJ1ZTsKLQkgICAgfQotCX0KLSAgICAgIGlmIChnZXRfdHR5cCAoKS0+ c2NyZWVuX2FsdGVybmF0ZWQpCi0JewotCSAgLyogQ2hlY2sgc3dpdGNoaW5nIHRvIG1haW4gc2Ny ZWVuIGJ1ZmZlciAqLwotCSAgcDEgPSAoY2hhciAqKSBtZW1tZW0gKHAwLCBubGVuIC0gKHAwLWJ1 ZiksICJcMDMzWz8xMDQ5bCIsIDgpOwotCSAgaWYgKHAxKQotCSAgICB7Ci0JICAgICAgcDEgKz0g ODsKLQkgICAgICBnZXRfdHR5cCAoKS0+c2NyZWVuX2FsdGVybmF0ZWQgPSBmYWxzZTsKLQkgICAg ICBkb19ub3RfcmVzZXRfc3dpdGNoX3RvX3Bjb24gPSBmYWxzZTsKLQkgICAgICBtZW1tb3ZlIChw MCwgcDEsIGJ1ZitubGVuIC0gcDEpOwotCSAgICAgIG5sZW4gLT0gcDEgLSBwMDsKLQkgICAgfQot CSAgZWxzZQotCSAgICBubGVuID0gcDAgLSBidWY7Ci0JfQotICAgIH0KLSAgaWYgKCFubGVuKSAv KiBOb3RoaW5nIHRvIGJlIHN5bmNocm9uaXplZCAqLwotICAgIGdvdG8gY2xlYW51cDsKLSAgaWYg KGdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9vdXQgJiYgIWlzX2VjaG8pCi0gICAgZ290byBj bGVhbnVwOwotICAvKiBSZW1vdmUgRVNDIHNlcXVlbmNlIHdoaWNoIHJldHVybnMgcmVzdWx0cyB0 byBjb25zb2xlCi0gICAgIGlucHV0IGJ1ZmZlci4gV2l0aG91dCB0aGlzLCBjdXJzb3IgcG9zaXRp b24gcmVwb3J0Ci0gICAgIGlzIHB1dCBpbnRvIHRoZSBpbnB1dCBidWZmZXIgYXMgYSBnYXJiYWdl LiAqLwotICAvKiBSZW1vdmUgRVNDIHNlcXVlbmNlIHRvIHJlcG9ydCBjdXJzb3IgcG9zaXRpb24u ICovCi0gIHdoaWxlICgocDAgPSAoY2hhciAqKSBtZW1tZW0gKGJ1ZiwgbmxlbiwgIlwwMzNbNm4i LCA0KSkpCi0gICAgewotICAgICAgbWVtbW92ZSAocDAsIHAwKzQsIG5sZW4gLSAocDArNCAtIGJ1 ZikpOwotICAgICAgbmxlbiAtPSA0OwotICAgIH0KLSAgLyogUmVtb3ZlIEVTQyBzZXF1ZW5jZSB0 byByZXBvcnQgdGVybWluYWwgaWRlbnRpdHkuICovCi0gIHdoaWxlICgocDAgPSAoY2hhciAqKSBt ZW1tZW0gKGJ1ZiwgbmxlbiwgIlwwMzNbMGMiLCA0KSkpCi0gICAgewotICAgICAgbWVtbW92ZSAo cDAsIHAwKzQsIG5sZW4gLSAocDArNCAtIGJ1ZikpOwotICAgICAgbmxlbiAtPSA0OwotICAgIH0K LQotICAvKiBJZiB0aGUgRVNDIHNlcXVlbmNlIEVTQ1s/M2ggb3IgRVNDWz8zbCB3aGljaCBjbGVh cnMgY29uc29sZSBzY3JlZW4KLSAgICAgYnVmZmVyIGlzIHB1c2hlZCwgc2V0IG5lZWRfcmVkcmF3 X3NjcmVlbiB0byB0cmlnZ2VyIHJlZHJhdyBzY3JlZW4uICovCi0gIHAwID0gYnVmOwotICB3aGls ZSAoKHAwID0gKGNoYXIgKikgbWVtbWVtIChwMCwgbmxlbiAtIChwMCAtIGJ1ZiksICJcMDMzWz8i LCAzKSkpCi0gICAgewotICAgICAgcDAgKz0gMzsKLSAgICAgIGJvb2wgZXhpc3RfYXJnXzMgPSBm YWxzZTsKLSAgICAgIHdoaWxlIChwMCA8IGJ1ZiArIG5sZW4gJiYgKGlzZGlnaXQgKCpwMCkgfHwg KnAwID09ICc7JykpCi0JewotCSAgaW50IGFyZyA9IDA7Ci0JICB3aGlsZSAocDAgPCBidWYgKyBu bGVuICYmIGlzZGlnaXQgKCpwMCkpCi0JICAgIGFyZyA9IGFyZyAqIDEwICsgKCpwMCArKykgLSAn MCc7Ci0JICBpZiAoYXJnID09IDMpCi0JICAgIGV4aXN0X2FyZ18zID0gdHJ1ZTsKLQkgIGlmIChw MCA8IGJ1ZiArIG5sZW4gJiYgKnAwID09ICc7JykKLQkgICAgcDAgKys7Ci0JfQotICAgICAgaWYg KHAwIDwgYnVmICsgbmxlbiAmJiBleGlzdF9hcmdfMyAmJiAoKnAwID09ICdoJyB8fCAqcDAgPT0g J2wnKSkKLQlnZXRfdHR5cCAoKS0+bmVlZF9yZWRyYXdfc2NyZWVuID0gdHJ1ZTsKLSAgICAgIHAw ICsrOwotICAgICAgaWYgKHAwID49IGJ1ZiArIG5sZW4pCi0JYnJlYWs7Ci0gICAgfQotCi0gIGlu dCByZXRyeV9jb3VudDsKLSAgcmV0cnlfY291bnQgPSAwOwotICBEV09SRCBkd01vZGUsIGZsYWdz OwotICBmbGFncyA9IEVOQUJMRV9WSVJUVUFMX1RFUk1JTkFMX1BST0NFU1NJTkc7Ci0gIHdoaWxl ICghR2V0Q29uc29sZU1vZGUgKGdldF9vdXRwdXRfaGFuZGxlICgpLCAmZHdNb2RlKSkKLSAgICB7 Ci0gICAgICB0ZXJtaW9zX3ByaW50ZiAoIkdldENvbnNvbGVNb2RlIGZhaWxlZCwgJUUiKTsKLSAg ICAgIGludCBlcnJub19zYXZlID0gZXJybm87Ci0gICAgICAvKiBSZS1vcGVuIGhhbmRsZXMgKi8K LSAgICAgIHRoaXMtPm9wZW4gKDAsIDApOwotICAgICAgLyogRml4IHBzZXVkbyBjb25zb2xlIHdp bmRvdyBzaXplICovCi0gICAgICB0aGlzLT5pb2N0bCAoVElPQ1NXSU5TWiwgJmdldF90dHlwICgp LT53aW5zaXplKTsKLSAgICAgIGlmIChlcnJubyAhPSBlcnJub19zYXZlKQotCXNldF9lcnJubyAo ZXJybm9fc2F2ZSk7Ci0gICAgICBpZiAoKytyZXRyeV9jb3VudCA+IDMpCi0JZ290byBjbGVhbnVw OwotICAgIH0KLSAgaWYgKCEoZ2V0X3R0eXAgKCktPnRpLmNfb2ZsYWcgJiBPUE9TVCkgfHwKLSAg ICAgICEoZ2V0X3R0eXAgKCktPnRpLmNfb2ZsYWcgJiBPTkxDUikpCi0gICAgZmxhZ3MgfD0gRElT QUJMRV9ORVdMSU5FX0FVVE9fUkVUVVJOOwotICBTZXRDb25zb2xlTW9kZSAoZ2V0X291dHB1dF9o YW5kbGUgKCksIGR3TW9kZSB8IGZsYWdzKTsKLSAgY2hhciAqcDsKLSAgcCA9IGJ1ZjsKLSAgRFdP UkQgd0xlbiwgd3JpdHRlbjsKLSAgd3JpdHRlbiA9IDA7Ci0gIEJPT0wgKFdJTkFQSSAqV3JpdGVG dW5jKQotICAgIChIQU5ETEUsIExQQ1ZPSUQsIERXT1JELCBMUERXT1JELCBMUE9WRVJMQVBQRUQp OwotICBXcml0ZUZ1bmMgPSBXcml0ZUZpbGVfT3JpZyA/IFdyaXRlRmlsZV9PcmlnIDogV3JpdGVG aWxlOwotICB3aGlsZSAod3JpdHRlbiA8ICBubGVuKQotICAgIHsKLSAgICAgIGlmICghV3JpdGVG dW5jIChnZXRfb3V0cHV0X2hhbmRsZSAoKSwgcCwgbmxlbiAtIHdyaXR0ZW4sICZ3TGVuLCBOVUxM KSkKLQl7Ci0JICB0ZXJtaW9zX3ByaW50ZiAoIldyaXRlRmlsZSBmYWlsZWQsICVFIik7Ci0JICBi cmVhazsKLQl9Ci0gICAgICBlbHNlCi0JewotCSAgd3JpdHRlbiArPSB3TGVuOwotCSAgcCArPSB3 TGVuOwotCX0KLSAgICB9Ci0gIC8qIERldGFjaCBmcm9tIHBzZXVkbyBjb25zb2xlIGFuZCByZXN1 bWUuICovCi0gIGZsYWdzID0gRU5BQkxFX1ZJUlRVQUxfVEVSTUlOQUxfUFJPQ0VTU0lORzsKLSAg U2V0Q29uc29sZU1vZGUgKGdldF9vdXRwdXRfaGFuZGxlICgpLCBkd01vZGUgfCBmbGFncyk7Ci1j bGVhbnVwOgotICBTZXRDb25zb2xlT3V0cHV0Q1AgKG9yaWdDUCk7Ci0gIEhlYXBGcmVlIChHZXRQ cm9jZXNzSGVhcCAoKSwgMCwgYnVmKTsKLWRldGFjaDoKLSAgcmVzdG9yZV9yZWF0dGFjaF9wY29u ICgpOworICBnZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZSA9IE5VTEw7CisgIGdldF90dHlw ICgpLT5wY29uX3N0YXJ0ID0gZmFsc2U7CiB9CiAKIHNzaXplX3QgX19zdGRjYWxsCkBAIC0xNTA1 LDQ0ICs3NzYsNyBAQCBmaGFuZGxlcl9wdHlfc2xhdmU6OndyaXRlIChjb25zdCB2b2lkICpwdHIs IHNpemVfdCBsZW4pCiAgIHJlc2V0X3N3aXRjaF90b19wY29uICgpOwogCiAgIGFjcXVpcmVfb3V0 cHV0X211dGV4IChJTkZJTklURSk7Ci0gIGJvb2wgb3V0cHV0X3RvX3Bjb24gPSBnZXRfdHR5cCAo KS0+c3dpdGNoX3RvX3Bjb25fb3V0OwotICByZWxlYXNlX291dHB1dF9tdXRleCAoKTsKLQotICBV SU5UIHRhcmdldF9jb2RlX3BhZ2UgPSBvdXRwdXRfdG9fcGNvbiA/Ci0gICAgR2V0Q29uc29sZU91 dHB1dENQICgpIDogZ2V0X3R0eXAgKCktPnRlcm1fY29kZV9wYWdlOwotICBzc2l6ZV90IG5sZW47 Ci0gIGNoYXIgKmJ1ZiA9IGNvbnZlcnRfbWJfc3RyICh0YXJnZXRfY29kZV9wYWdlLCAoc2l6ZV90 ICopICZubGVuLAotCQkgZ2V0X3R0eXAgKCktPnRlcm1fY29kZV9wYWdlLCAoY29uc3QgY2hhciAq KSBwdHIsIGxlbik7Ci0KLSAgLyogSWYgbm90IGF0dGFjaGVkIHRvIHRoaXMgcHNldWRvIGNvbnNv bGUsIHRyeSB0byBhdHRhY2ggdGVtcG9yYXJpbHkuICovCi0gIHBpZF9yZXN0b3JlID0gMDsKLSAg Ym9vbCBmYWxsYmFjayA9IGZhbHNlOwotICBpZiAob3V0cHV0X3RvX3Bjb24gJiYgcGNvbl9hdHRh Y2hlZF90byAhPSBnZXRfbWlub3IgKCkpCi0gICAgaWYgKCF0cnlfcmVhdHRhY2hfcGNvbiAoKSkK LSAgICAgIGZhbGxiYWNrID0gdHJ1ZTsKLQotICBpZiAob3V0cHV0X3RvX3Bjb24gJiYgIWZhbGxi YWNrICYmCi0gICAgICAobWVtbWVtIChidWYsIG5sZW4sICJcMDMzWzZuIiwgNCkgfHwgbWVtbWVt IChidWYsIG5sZW4sICJcMDMzWzBjIiwgNCkpKQotICAgIHsKLSAgICAgIGdldF90dHlwICgpLT5w Y29uX2luX2VtcHR5ID0gZmFsc2U7Ci0gICAgICBpZiAoIWlzX2xpbmVfaW5wdXQgKCkpCi0JU2V0 RXZlbnQgKGlucHV0X2F2YWlsYWJsZV9ldmVudCk7Ci0gICAgfQotCi0gIERXT1JEIGR3TW9kZSwg ZmxhZ3M7Ci0gIGZsYWdzID0gRU5BQkxFX1ZJUlRVQUxfVEVSTUlOQUxfUFJPQ0VTU0lORzsKLSAg aWYgKCEoZ2V0X3R0eXAgKCktPnRpLmNfb2ZsYWcgJiBPUE9TVCkgfHwKLSAgICAgICEoZ2V0X3R0 eXAgKCktPnRpLmNfb2ZsYWcgJiBPTkxDUikpCi0gICAgZmxhZ3MgfD0gRElTQUJMRV9ORVdMSU5F X0FVVE9fUkVUVVJOOwotICBpZiAob3V0cHV0X3RvX3Bjb24gJiYgIWZhbGxiYWNrKQotICAgIHsK LSAgICAgIEdldENvbnNvbGVNb2RlIChnZXRfb3V0cHV0X2hhbmRsZSAoKSwgJmR3TW9kZSk7Ci0g ICAgICBTZXRDb25zb2xlTW9kZSAoZ2V0X291dHB1dF9oYW5kbGUgKCksIGR3TW9kZSB8IGZsYWdz KTsKLSAgICB9Ci0gIEhBTkRMRSB0byA9IChvdXRwdXRfdG9fcGNvbiAmJiAhZmFsbGJhY2spID8K LSAgICBnZXRfb3V0cHV0X2hhbmRsZSAoKSA6IGdldF9vdXRwdXRfaGFuZGxlX2N5ZyAoKTsKLSAg YWNxdWlyZV9vdXRwdXRfbXV0ZXggKElORklOSVRFKTsKLSAgaWYgKCFwcm9jZXNzX29wb3N0X291 dHB1dCAodG8sIGJ1ZiwgbmxlbiwgZmFsc2UpKQorICBpZiAoIXByb2Nlc3Nfb3Bvc3Rfb3V0cHV0 IChnZXRfb3V0cHV0X2hhbmRsZV9jeWcgKCksIHB0ciwgdG93cml0ZSwgZmFsc2UpKQogICAgIHsK ICAgICAgIERXT1JEIGVyciA9IEdldExhc3RFcnJvciAoKTsKICAgICAgIHRlcm1pb3NfcHJpbnRm ICgiV3JpdGVGaWxlIGZhaWxlZCwgJUUiKTsKQEAgLTE1NTcsMjAgKzc5MSw2IEBAIGZoYW5kbGVy X3B0eV9zbGF2ZTo6d3JpdGUgKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IGxlbikKICAgICAgIHRv d3JpdGUgPSAtMTsKICAgICB9CiAgIHJlbGVhc2Vfb3V0cHV0X211dGV4ICgpOwotICBtYl9zdHJf ZnJlZSAoYnVmKTsKLSAgZmxhZ3MgPSBFTkFCTEVfVklSVFVBTF9URVJNSU5BTF9QUk9DRVNTSU5H OwotICBpZiAob3V0cHV0X3RvX3Bjb24gJiYgIWZhbGxiYWNrKQotICAgIFNldENvbnNvbGVNb2Rl IChnZXRfb3V0cHV0X2hhbmRsZSAoKSwgZHdNb2RlIHwgZmxhZ3MpOwotCi0gIHJlc3RvcmVfcmVh dHRhY2hfcGNvbiAoKTsKLQotICAvKiBQdXNoIHNsYXZlIG91dHB1dCB0byBwc2V1ZG8gY29uc29s ZSBzY3JlZW4gYnVmZmVyICovCi0gIGlmIChnZXRfcHNldWRvX2NvbnNvbGUgKCkpCi0gICAgewot ICAgICAgYWNxdWlyZV9vdXRwdXRfbXV0ZXggKElORklOSVRFKTsKLSAgICAgIHB1c2hfdG9fcGNv bl9zY3JlZW5idWZmZXIgKChjaGFyICopcHRyLCBsZW4sIGZhbHNlKTsKLSAgICAgIHJlbGVhc2Vf b3V0cHV0X211dGV4ICgpOwotICAgIH0KIAogICByZXR1cm4gdG93cml0ZTsKIH0KQEAgLTE1ODIs MTYgKzgwMiwxNSBAQCBmaGFuZGxlcl9wdHlfc2xhdmU6Om1hc2tfc3dpdGNoX3RvX3Bjb25faW4g KGJvb2wgbWFzaykKIH0KIAogYm9vbAotZmhhbmRsZXJfcHR5X2NvbW1vbjo6dG9fYmVfcmVhZF9m cm9tX3Bjb24gKHZvaWQpCitmaGFuZGxlcl9wdHlfbWFzdGVyOjp0b19iZV9yZWFkX2Zyb21fcGNv biAodm9pZCkKIHsKLSAgcmV0dXJuICFnZXRfdHR5cCAoKS0+cGNvbl9pbl9lbXB0eSB8fAotICAg IChnZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25faW4gJiYgIWdldF90dHlwICgpLT5tYXNrX3N3 aXRjaF90b19wY29uX2luKTsKKyAgcmV0dXJuIGdldF90dHlwICgpLT5wY29uX3N0YXJ0CisgICAg fHwgKGdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9pbiAmJiAhZ2V0X3R0eXAgKCktPm1hc2tf c3dpdGNoX3RvX3Bjb25faW4pOwogfQogCiB2b2lkIF9fcmVnMwogZmhhbmRsZXJfcHR5X3NsYXZl OjpyZWFkICh2b2lkICpwdHIsIHNpemVfdCYgbGVuKQogewotICBjaGFyICpwdHIwID0gKGNoYXIg KilwdHI7CiAgIHNzaXplX3QgdG90YWxyZWFkID0gMDsKICAgaW50IHZtaW4gPSAwOwogICBpbnQg dnRpbWUgPSAwOwkvKiBJbml0aWFsaXplZCB0byBwcmV2ZW50IC1XdW5pbml0aWFsaXplZCB3YXJu aW5nICovCkBAIC0xNjE2LDggKzgzNSw2IEBAIGZoYW5kbGVyX3B0eV9zbGF2ZTo6cmVhZCAodm9p ZCAqcHRyLCBzaXplX3QmIGxlbikKICAgICAgIG1hc2tfc3dpdGNoX3RvX3Bjb25faW4gKHRydWUp OwogICAgICAgcmVzZXRfc3dpdGNoX3RvX3Bjb24gKCk7CiAgICAgfQotICBpZiAodG9fYmVfcmVh ZF9mcm9tX3Bjb24gKCkpCi0gICAgdXBkYXRlX3Bjb25faW5wdXRfc3RhdGUgKHRydWUpOwogCiAg IGlmIChpc19ub25ibG9ja2luZyAoKSB8fCAhcHRyKSAvKiBJbmRpY2F0aW5nIHRjZmx1c2goKS4g Ki8KICAgICB0aW1lX3RvX3dhaXQgPSAwOwpAQCAtMTcwMyw5OCArOTIwLDIxIEBAIGZoYW5kbGVy X3B0eV9zbGF2ZTo6cmVhZCAodm9pZCAqcHRyLCBzaXplX3QmIGxlbikKIAkgICAgICBpZiAoIXRv dGFscmVhZCkKIAkJewogCQkgIHNldF9zaWdfZXJybm8gKEVBR0FJTik7Ci0JCSAgdG90YWxyZWFk ID0gLTE7Ci0JCX0KLQkgICAgICBnb3RvIG91dDsKLQkgICAgfQotCSAgY29udGludWU7Ci0JZGVm YXVsdDoKLQkgIHRlcm1pb3NfcHJpbnRmICgid2FpdCBmb3IgaW5wdXQgbXV0ZXggZmFpbGVkLCAl RSIpOwotCSAgaWYgKCF0b3RhbHJlYWQpCi0JICAgIHsKLQkgICAgICBfX3NldGVycm5vICgpOwot CSAgICAgIHRvdGFscmVhZCA9IC0xOwotCSAgICB9Ci0JICBnb3RvIG91dDsKLQl9Ci0gICAgICBp ZiAocHRyICYmIHRvX2JlX3JlYWRfZnJvbV9wY29uICgpKQotCXsKLQkgIGlmIChnZXRfcmVhZGFo ZWFkX3ZhbGlkICgpKQotCSAgICB7Ci0JICAgICAgUmVsZWFzZU11dGV4IChpbnB1dF9tdXRleCk7 Ci0JICAgICAgdG90YWxyZWFkID0gZ2V0X3JlYWRhaGVhZF9pbnRvX2J1ZmZlciAoKGNoYXIgKikg cHRyLCBsZW4pOwotCSAgICB9Ci0JICBlbHNlCi0JICAgIHsKLQkgICAgICBpZiAoIXRyeV9yZWF0 dGFjaF9wY29uICgpKQotCQl7Ci0JCSAgcmVzdG9yZV9yZWF0dGFjaF9wY29uICgpOwotCQkgIGdv dG8gZG9fcmVhZF9jeWc7Ci0JCX0KLQotCSAgICAgIERXT1JEIGR3TW9kZTsKLQkgICAgICBHZXRD b25zb2xlTW9kZSAoZ2V0X2hhbmRsZSAoKSwgJmR3TW9kZSk7Ci0JICAgICAgRFdPUkQgZmxhZ3Mg PSBFTkFCTEVfVklSVFVBTF9URVJNSU5BTF9JTlBVVDsKLQkgICAgICBpZiAoZHdNb2RlICE9IGZs YWdzKQotCQlTZXRDb25zb2xlTW9kZSAoZ2V0X2hhbmRsZSAoKSwgZmxhZ3MpOwotCSAgICAgIC8q IFJlYWQgZ2V0X2hhbmRsZSgpIGluc3RhZCBvZiBnZXRfaGFuZGxlX2N5ZygpICovCi0JICAgICAg Qk9PTCAoV0lOQVBJICpSZWFkRnVuYykKLQkJKEhBTkRMRSwgTFBWT0lELCBEV09SRCwgTFBEV09S RCwgTFBWT0lEKTsKLQkgICAgICBSZWFkRnVuYyA9IFJlYWRDb25zb2xlQV9PcmlnID8gUmVhZENv bnNvbGVBX09yaWcgOiBSZWFkQ29uc29sZUE7Ci0JICAgICAgRFdPUkQgcmxlbjsKLQkgICAgICBy ZWFkbGVuID0gTUlOIChsZW4sIHNpemVvZiAoYnVmKSk7Ci0JICAgICAgaWYgKCFSZWFkRnVuYyAo Z2V0X2hhbmRsZSAoKSwgYnVmLCByZWFkbGVuLCAmcmxlbiwgTlVMTCkpCi0JCXsKLQkJICB0ZXJt aW9zX3ByaW50ZiAoInJlYWQgZmFpbGVkLCAlRSIpOwotCQkgIFNldENvbnNvbGVNb2RlIChnZXRf aGFuZGxlICgpLCBkd01vZGUpOwotCQkgIHJlc3RvcmVfcmVhdHRhY2hfcGNvbiAoKTsKLQkJICBS ZWxlYXNlTXV0ZXggKGlucHV0X211dGV4KTsKLQkJICBzZXRfZXJybm8gKEVJTyk7Ci0JCSAgdG90 YWxyZWFkID0gLTE7Ci0JCSAgZ290byBvdXQ7Ci0JCX0KLQkgICAgICBTZXRDb25zb2xlTW9kZSAo Z2V0X2hhbmRsZSAoKSwgZHdNb2RlKTsKLQkgICAgICByZXN0b3JlX3JlYXR0YWNoX3Bjb24gKCk7 Ci0JICAgICAgUmVsZWFzZU11dGV4IChpbnB1dF9tdXRleCk7Ci0KLQkgICAgICBzc2l6ZV90IG5s ZW47Ci0JICAgICAgY2hhciAqbmJ1ZiA9IGNvbnZlcnRfbWJfc3RyIChnZXRfdHR5cCAoKS0+dGVy bV9jb2RlX3BhZ2UsCi0JCQkgICAgIChzaXplX3QgKikgJm5sZW4sIEdldENvbnNvbGVDUCAoKSwg YnVmLCBybGVuKTsKLQotCSAgICAgIHNzaXplX3QgcmV0OwotCSAgICAgIGxpbmVfZWRpdF9zdGF0 dXMgcmVzID0KLQkJbGluZV9lZGl0IChuYnVmLCBubGVuLCBnZXRfdHR5cCAoKS0+dGksICZyZXQp OwotCi0JICAgICAgbWJfc3RyX2ZyZWUgKG5idWYpOwotCi0JICAgICAgaWYgKHJlcyA9PSBsaW5l X2VkaXRfaW5wdXRfZG9uZSB8fCByZXMgPT0gbGluZV9lZGl0X29rKQotCQl0b3RhbHJlYWQgPSBn ZXRfcmVhZGFoZWFkX2ludG9fYnVmZmVyICgoY2hhciAqKSBwdHIsIGxlbik7Ci0JICAgICAgZWxz ZSBpZiAocmVzID4gbGluZV9lZGl0X3NpZ25hbGxlZCkKLQkJewotCQkgIHNldF9zaWdfZXJybm8g KEVJTlRSKTsKLQkJICB0b3RhbHJlYWQgPSAtMTsKLQkJfQotCSAgICAgIGVsc2UKLQkJewotCQkg IHVwZGF0ZV9wY29uX2lucHV0X3N0YXRlICh0cnVlKTsKLQkJICBjb250aW51ZTsKKwkJICB0b3Rh bHJlYWQgPSAtMTsKIAkJfQorCSAgICAgIGdvdG8gb3V0OworCSAgICB9CisJICBjb250aW51ZTsK KwlkZWZhdWx0OgorCSAgdGVybWlvc19wcmludGYgKCJ3YWl0IGZvciBpbnB1dCBtdXRleCBmYWls ZWQsICVFIik7CisJICBpZiAoIXRvdGFscmVhZCkKKwkgICAgeworCSAgICAgIF9fc2V0ZXJybm8g KCk7CisJICAgICAgdG90YWxyZWFkID0gLTE7CiAJICAgIH0KLQotCSAgdXBkYXRlX3Bjb25faW5w dXRfc3RhdGUgKHRydWUpOwotCSAgbWFza19zd2l0Y2hfdG9fcGNvbl9pbiAoZmFsc2UpOwogCSAg Z290byBvdXQ7CiAJfQotICAgICAgaWYgKCFwdHIgJiYgbGVuID09IFVJTlRfTUFYICYmICFnZXRf dHR5cCAoKS0+cGNvbl9pbl9lbXB0eSkKLQl7Ci0JICBGbHVzaENvbnNvbGVJbnB1dEJ1ZmZlciAo Z2V0X2hhbmRsZSAoKSk7Ci0JICBnZXRfdHR5cCAoKS0+cGNvbl9pbl9lbXB0eSA9IHRydWU7Ci0J ICBEV09SRCBuOwotCSAgaWYgKGJ5dGVzX2F2YWlsYWJsZSAobikgJiYgbiA9PSAwKQotCSAgICBS ZXNldEV2ZW50IChpbnB1dF9hdmFpbGFibGVfZXZlbnQpOwotCX0KIAotZG9fcmVhZF9jeWc6CiAg ICAgICBpZiAoIWJ5dGVzX2F2YWlsYWJsZSAoYnl0ZXNfaW5fcGlwZSkpCiAJewogCSAgUmVsZWFz ZU11dGV4IChpbnB1dF9tdXRleCk7CkBAIC0xOTExLDE2ICsxMDUxLDYgQEAgZG9fcmVhZF9jeWc6 CiBvdXQ6CiAgIHRlcm1pb3NfcHJpbnRmICgiJWQgPSByZWFkKCVwLCAlbHUpIiwgdG90YWxyZWFk LCBwdHIsIGxlbik7CiAgIGxlbiA9IChzaXplX3QpIHRvdGFscmVhZDsKLSAgLyogUHVzaCBzbGF2 ZSByZWFkIGFzIGVjaG8gdG8gcHNldWRvIGNvbnNvbGUgc2NyZWVuIGJ1ZmZlci4gKi8KLSAgaWYg KGdldF9wc2V1ZG9fY29uc29sZSAoKSAmJiBwdHIwICYmIHRvdGFscmVhZCA+IDAgJiYKLSAgICAg IChnZXRfdHR5cCAoKS0+dGkuY19sZmxhZyAmIEVDSE8pKQotICAgIHsKLSAgICAgIGFjcXVpcmVf b3V0cHV0X211dGV4IChJTkZJTklURSk7Ci0gICAgICBwdXNoX3RvX3Bjb25fc2NyZWVuYnVmZmVy IChwdHIwLCBsZW4sIHRydWUpOwotICAgICAgaWYgKGdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNv bl9vdXQpCi0JdHJpZ2dlcl9yZWRyYXdfc2NyZWVuICgpOwotICAgICAgcmVsZWFzZV9vdXRwdXRf bXV0ZXggKCk7Ci0gICAgfQogICBtYXNrX3N3aXRjaF90b19wY29uX2luIChmYWxzZSk7CiB9CiAK QEAgLTIwNjEsMzggKzExOTEsMTEgQEAgZmhhbmRsZXJfcHR5X3NsYXZlOjppb2N0bCAodW5zaWdu ZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogICAgICAgZ2V0X3R0eXAgKCktPndpbnNpemUgPSBnZXRf dHR5cCAoKS0+YXJnLndpbnNpemU7CiAgICAgICBicmVhazsKICAgICBjYXNlIFRJT0NTV0lOU1o6 Ci0gICAgICBpZiAoZ2V0X3BzZXVkb19jb25zb2xlICgpKQotCXsKLQkgIC8qIElmIG5vdCBhdHRh Y2hlZCB0byB0aGlzIHBzZXVkbyBjb25zb2xlLAotCSAgICAgdHJ5IHRvIGF0dGFjaCB0ZW1wb3Jh cmlseS4gKi8KLQkgIHBpZF9yZXN0b3JlID0gMDsKLQkgIGlmIChwY29uX2F0dGFjaGVkX3RvICE9 IGdldF9taW5vciAoKSkKLQkgICAgaWYgKCF0cnlfcmVhdHRhY2hfcGNvbiAoKSkKLQkgICAgICBn b3RvIGNsZWFudXA7Ci0KLQkgIENPT1JEIHNpemU7Ci0JICBzaXplLlggPSAoKHN0cnVjdCB3aW5z aXplICopIGFyZyktPndzX2NvbDsKLQkgIHNpemUuWSA9ICgoc3RydWN0IHdpbnNpemUgKikgYXJn KS0+d3Nfcm93OwotCSAgQ09OU09MRV9TQ1JFRU5fQlVGRkVSX0lORk8gY3NiaTsKLQkgIGlmIChH ZXRDb25zb2xlU2NyZWVuQnVmZmVySW5mbyAoZ2V0X291dHB1dF9oYW5kbGUgKCksICZjc2JpKSkK LQkgICAgaWYgKHNpemUuWCA9PSBjc2JpLnNyV2luZG93LlJpZ2h0IC0gY3NiaS5zcldpbmRvdy5M ZWZ0ICsgMSAmJgotCQlzaXplLlkgPT0gY3NiaS5zcldpbmRvdy5Cb3R0b20gLSBjc2JpLnNyV2lu ZG93LlRvcCArIDEpCi0JICAgICAgZ290byBjbGVhbnVwOwotCSAgaWYgKCFTZXRDb25zb2xlU2Ny ZWVuQnVmZmVyU2l6ZSAoZ2V0X291dHB1dF9oYW5kbGUgKCksIHNpemUpKQotCSAgICBnb3RvIGNs ZWFudXA7Ci0JICBTTUFMTF9SRUNUIHJlY3Q7Ci0JICByZWN0LkxlZnQgPSAwOwotCSAgcmVjdC5U b3AgPSAwOwotCSAgcmVjdC5SaWdodCA9IHNpemUuWC0xOwotCSAgcmVjdC5Cb3R0b20gPSBzaXpl LlktMTsKLQkgIFNldENvbnNvbGVXaW5kb3dJbmZvIChnZXRfb3V0cHV0X2hhbmRsZSAoKSwgVFJV RSwgJnJlY3QpOwotY2xlYW51cDoKLQkgIHJlc3RvcmVfcmVhdHRhY2hfcGNvbiAoKTsKLQl9Ci0K ICAgICAgIGlmIChnZXRfdHR5cCAoKS0+d2luc2l6ZS53c19yb3cgIT0gKChzdHJ1Y3Qgd2luc2l6 ZSAqKSBhcmcpLT53c19yb3cKIAkgIHx8IGdldF90dHlwICgpLT53aW5zaXplLndzX2NvbCAhPSAo KHN0cnVjdCB3aW5zaXplICopIGFyZyktPndzX2NvbCkKIAl7CisJICBpZiAoZ2V0X3R0eXAgKCkt PmhfcHNldWRvX2NvbnNvbGUgJiYgZ2V0X3R0eXAgKCktPnBjb25fcGlkKQorCSAgICByZXNpemVf cHNldWRvX2NvbnNvbGUgKChzdHJ1Y3Qgd2luc2l6ZSAqKSBhcmcpOwogCSAgZ2V0X3R0eXAgKCkt PmFyZy53aW5zaXplID0gKihzdHJ1Y3Qgd2luc2l6ZSAqKSBhcmc7CiAJICBnZXRfdHR5cCAoKS0+ d2luc2l6ZSA9ICooc3RydWN0IHdpbnNpemUgKikgYXJnOwogCSAgZ2V0X3R0eXAgKCktPmtpbGxf cGdycCAoU0lHV0lOQ0gpOwpAQCAtMjM3OCw2ICsxNDgxLDI3IEBAIGZoYW5kbGVyX3B0eV9jb21t b246OmNsb3NlICgpCiAgIHJldHVybiAwOwogfQogCit2b2lkCitmaGFuZGxlcl9wdHlfY29tbW9u OjpyZXNpemVfcHNldWRvX2NvbnNvbGUgKHN0cnVjdCB3aW5zaXplICp3cykKK3sKKyAgQ09PUkQg c2l6ZTsKKyAgc2l6ZS5YID0gd3MtPndzX2NvbDsKKyAgc2l6ZS5ZID0gd3MtPndzX3JvdzsKKyAg cGluZm8gcCAoZ2V0X3R0eXAgKCktPnBjb25fcGlkKTsKKyAgaWYgKHApCisgICAgeworICAgICAg SFBDT05fSU5URVJOQUwgaHBjb25fbG9jYWw7CisgICAgICBIQU5ETEUgcGNvbl9vd25lciA9CisJ T3BlblByb2Nlc3MgKFBST0NFU1NfRFVQX0hBTkRMRSwgRkFMU0UsIHAtPmV4ZWNfZHdQcm9jZXNz SWQpOworICAgICAgRHVwbGljYXRlSGFuZGxlIChwY29uX293bmVyLCBnZXRfdHR5cCAoKS0+aF9w Y29uX3dyaXRlX3BpcGUsCisJCSAgICAgICBHZXRDdXJyZW50UHJvY2VzcyAoKSwgJmhwY29uX2xv Y2FsLmhXcml0ZVBpcGUsCisJCSAgICAgICAwLCBUUlVFLCBEVVBMSUNBVEVfU0FNRV9BQ0NFU1Mp OworICAgICAgUmVzaXplUHNldWRvQ29uc29sZSAoKEhQQ09OKSAmaHBjb25fbG9jYWwsIHNpemUp OworICAgICAgQ2xvc2VIYW5kbGUgKHBjb25fb3duZXIpOworICAgICAgQ2xvc2VIYW5kbGUgKGhw Y29uX2xvY2FsLmhXcml0ZVBpcGUpOworICAgIH0KK30KKwogdm9pZAogZmhhbmRsZXJfcHR5X21h c3Rlcjo6Y2xlYW51cCAoKQogewpAQCAtMjM5Myw3ICsxNTE3LDYgQEAgZmhhbmRsZXJfcHR5X21h c3Rlcjo6Y2xvc2UgKCkKIHsKICAgT0JKRUNUX0JBU0lDX0lORk9STUFUSU9OIG9iaTsKICAgTlRT VEFUVVMgc3RhdHVzOwotICBwaWRfdCBtYXN0ZXJfcGlkX3RtcCA9IGdldF90dHlwICgpLT5tYXN0 ZXJfcGlkOwogCiAgIHRlcm1pb3NfcHJpbnRmICgiY2xvc2luZyBmcm9tX21hc3RlciglcCkvZnJv bV9tYXN0ZXJfY3lnKCVwKS90b19tYXN0ZXIoJXApL3RvX21hc3Rlcl9jeWcoJXApIHNpbmNlIHdl IG93biB0aGVtKCV1KSIsCiAJCSAgZnJvbV9tYXN0ZXIsIGZyb21fbWFzdGVyX2N5ZywKQEAgLTI0 MzgsMzAgKzE1NjEsNiBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjpjbG9zZSAoKQogICBlbHNlIGlm IChvYmkuSGFuZGxlQ291bnQgPT0gMSkKICAgICB7CiAgICAgICB0ZXJtaW9zX3ByaW50ZiAoIkNs b3NpbmcgbGFzdCBtYXN0ZXIgb2YgcHR5JWQiLCBnZXRfbWlub3IgKCkpOwotICAgICAgLyogQ2xv c2UgUHNldWRvIENvbnNvbGUgKi8KLSAgICAgIGlmIChnZXRfcHNldWRvX2NvbnNvbGUgKCkpCi0J ewotCSAgLyogVGVybWluYXRlIGhlbHBlciBwcm9jZXNzICovCi0JICBTZXRFdmVudCAoZ2V0X3R0 eXAgKCktPmhfaGVscGVyX2dvb2RieWUpOwotCSAgV2FpdEZvclNpbmdsZU9iamVjdCAoZ2V0X3R0 eXAgKCktPmhfaGVscGVyX3Byb2Nlc3MsIElORklOSVRFKTsKLQkgIENsb3NlSGFuZGxlIChnZXRf dHR5cCAoKS0+aF9oZWxwZXJfZ29vZGJ5ZSk7Ci0JICBDbG9zZUhhbmRsZSAoZ2V0X3R0eXAgKCkt PmhfaGVscGVyX3Byb2Nlc3MpOwotCSAgLyogRklYTUU6IFBzZXVkbyBjb25zb2xlIGNhbiBiZSBh Y2Nlc3NlZCB2aWEgaXRzIGhhbmRsZQotCSAgICAgb25seSBpbiB0aGUgcHJvY2VzcyB3aGljaCBj cmVhdGVkIGl0LiBXaGF0IGVsc2UgY2FuIHdlIGRvPyAqLwotCSAgaWYgKG1hc3Rlcl9waWRfdG1w ID09IG15c2VsZi0+cGlkKQotCSAgICB7Ci0JICAgICAgLyogQ2xvc2VQc2V1ZG9Db25zb2xlKCkg c2VlbXMgdG8gaGF2ZSBhIGJ1ZyB0aGF0IG9uZQotCQkgaW50ZXJuYWwgaGFuZGxlIHJlbWFpbnMg b3BlbmVkLiBUaGlzIGNhdXNlcyBoYW5kbGUgbGVhay4KLQkJIFRoaXMgaXMgYSB3b3JrYXJvdW5k IGZvciB0aGlzIHByb2JsZW0uICovCi0JICAgICAgSFBDT05fSU5URVJOQUwgKmhwID0gKEhQQ09O X0lOVEVSTkFMICopIGdldF9wc2V1ZG9fY29uc29sZSAoKTsKLQkgICAgICBIQU5ETEUgdG1wID0g aHAtPmhDb25Ib3N0UHJvY2VzczsKLQkgICAgICAvKiBSZWxlYXNlIHBzZXVkbyBjb25zb2xlICov Ci0JICAgICAgQ2xvc2VQc2V1ZG9Db25zb2xlIChnZXRfcHNldWRvX2NvbnNvbGUgKCkpOwotCSAg ICAgIENsb3NlSGFuZGxlICh0bXApOwotCSAgICB9Ci0JICBnZXRfdHR5cCAoKS0+c3dpdGNoX3Rv X3Bjb25faW4gPSBmYWxzZTsKLQkgIGdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9vdXQgPSBm YWxzZTsKLQl9CiAgICAgICBpZiAoZ2V0X3R0eXAgKCktPmdldHNpZCAoKSA+IDApCiAJa2lsbCAo Z2V0X3R0eXAgKCktPmdldHNpZCAoKSwgU0lHSFVQKTsKICAgICAgIFNldEV2ZW50IChpbnB1dF9h dmFpbGFibGVfZXZlbnQpOwpAQCAtMjQ2OSw5ICsxNTY4LDggQEAgZmhhbmRsZXJfcHR5X21hc3Rl cjo6Y2xvc2UgKCkKIAogICBpZiAoIUZvcmNlQ2xvc2VIYW5kbGUgKGZyb21fbWFzdGVyKSkKICAg ICB0ZXJtaW9zX3ByaW50ZiAoImVycm9yIGNsb3NpbmcgZnJvbV9tYXN0ZXIgJXAsICVFIiwgZnJv bV9tYXN0ZXIpOwotICBpZiAoZnJvbV9tYXN0ZXJfY3lnICE9IGZyb21fbWFzdGVyKSAvKiBBdm9p ZCBkb3VibGUgY2xvc2UuICovCi0gICAgaWYgKCFGb3JjZUNsb3NlSGFuZGxlIChmcm9tX21hc3Rl cl9jeWcpKQotICAgICAgdGVybWlvc19wcmludGYgKCJlcnJvciBjbG9zaW5nIGZyb21fbWFzdGVy X2N5ZyAlcCwgJUUiLCBmcm9tX21hc3Rlcl9jeWcpOworICBpZiAoIUZvcmNlQ2xvc2VIYW5kbGUg KGZyb21fbWFzdGVyX2N5ZykpCisgICAgdGVybWlvc19wcmludGYgKCJlcnJvciBjbG9zaW5nIGZy b21fbWFzdGVyX2N5ZyAlcCwgJUUiLCBmcm9tX21hc3Rlcl9jeWcpOwogICBpZiAoIUZvcmNlQ2xv c2VIYW5kbGUgKHRvX21hc3RlcikpCiAgICAgdGVybWlvc19wcmludGYgKCJlcnJvciBjbG9zaW5n IHRvX21hc3RlciAlcCwgJUUiLCB0b19tYXN0ZXIpOwogICBmcm9tX21hc3RlciA9IHRvX21hc3Rl ciA9IE5VTEw7CkBAIC0yNTEzLDcgKzE2MTEsNyBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjp3cml0 ZSAoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3QgbGVuKQogCiAgIC8qIFdyaXRlIHRlcm1pbmFsIGlu cHV0IHRvIHRvX3NsYXZlIHBpcGUgaW5zdGVhZCBvZiBvdXRwdXRfaGFuZGxlCiAgICAgIGlmIGN1 cnJlbnQgYXBwbGljYXRpb24gaXMgbmF0aXZlIGNvbnNvbGUgYXBwbGljYXRpb24uICovCi0gIGlm ICh0b19iZV9yZWFkX2Zyb21fcGNvbiAoKSkKKyAgaWYgKHRvX2JlX3JlYWRfZnJvbV9wY29uICgp ICYmIGdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xlKQogICAgIHsKICAgICAgIHNpemVfdCBu bGVuOwogICAgICAgY2hhciAqYnVmID0gY29udmVydF9tYl9zdHIKQEAgLTI1MjEsNDAgKzE2MTks NTAgQEAgZmhhbmRsZXJfcHR5X21hc3Rlcjo6d3JpdGUgKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90 IGxlbikKIAogICAgICAgV2FpdEZvclNpbmdsZU9iamVjdCAoaW5wdXRfbXV0ZXgsIElORklOSVRF KTsKIAotICAgICAgaWYgKG1lbWNociAoYnVmLCAnXDAwMycsIG5sZW4pKSAvKiBeQyBpbnRyIGtl eSBpbiBwY29uICovCi0JZ2V0X3R0eXAgKCktPnJlcV9mbHVzaF9wY29uX2lucHV0ID0gdHJ1ZTsK LQogICAgICAgRFdPUkQgd0xlbjsKLSAgICAgIFdyaXRlRmlsZSAodG9fc2xhdmUsIGJ1Ziwgbmxl biwgJndMZW4sIE5VTEwpOwotICAgICAgZ2V0X3R0eXAgKCktPnBjb25faW5fZW1wdHkgPSBmYWxz ZTsKLQotICAgICAgUmVsZWFzZU11dGV4IChpbnB1dF9tdXRleCk7CiAKLSAgICAgIC8qIFVzZSBs aW5lX2VkaXQgKCkgaW4gb3JkZXIgdG8gc2V0IGlucHV0X2F2YWlsYWJsZV9ldmVudC4gKi8KLSAg ICAgIGJvb2wgaXNfZWNobyA9IHRjICgpLT50aS5jX2xmbGFnICYgRUNITzsKLSAgICAgIGlmICgh Z2V0X3R0eXAgKCktPm1hc2tfc3dpdGNoX3RvX3Bjb25faW4pCisgICAgICBpZiAoZ2V0X3R0eXAg KCktPnBjb25fc3RhcnQpCiAJewotCSAgdGMgKCktPnRpLmNfbGZsYWcgJj0gfkVDSE87Ci0JICB0 aS5jX2xmbGFnICY9IH5FQ0hPOwotCX0KLSAgICAgIHRpLmNfbGZsYWcgJj0gfklTSUc7Ci0gICAg ICBsaW5lX2VkaXQgKGJ1ZiwgbmxlbiwgdGksICZyZXQpOwotICAgICAgaWYgKGlzX2VjaG8pCi0J dGMgKCktPnRpLmNfbGZsYWcgfD0gRUNITzsKLSAgICAgIGdldF90dHlwICgpLT5yZWFkX3JldHZh bCA9IDE7Ci0KLSAgICAgIGNvbnN0IGNoYXIgc2lnc1tdID0gewotCShjaGFyKSB0aS5jX2NjW1ZJ TlRSXSwKLQkoY2hhcikgdGkuY19jY1tWUVVJVF0sCi0JKGNoYXIpIHRpLmNfY2NbVlNVU1BdLAot ICAgICAgfTsKLSAgICAgIGlmICh0YyAoKS0+dGkuY19sZmxhZyAmIElTSUcpCi0JZm9yIChzaXpl X3QgaT0wOyBpPHNpemVvZiAoc2lncyk7IGkrKykKLQkgIGlmIChzaWdzW2ldICYmIG1lbWNociAo YnVmLCBzaWdzW2ldLCBubGVuKSkKKwkgIC8qIFBzZXVkbyBjb25kb2xlIHN1cHBvcnQgdXNlcyAi Q1NJNm4iIHRvIGdldCBjdXJzb3IgcG9zaXRpb24uCisJICAgICBJZiB0aGUgcmVwbHkgZm9yICJD U0k2biIgaXMgZGl2aWRlZCBpbnRvIG11bHRpcGxlIHdyaXRlcywKKwkgICAgIHBzZXVkbyBjb25z b2xlIHNvbWV0aW1lcyBkb2VzIG5vdCByZWNvZ25pemUgaXQuICBUaGVyZWZvcmUsCisJICAgICBw dXQgdGhlbSB0b2dldGhlciBpbnRvIHdwYnVmIGFuZCB3cml0ZSBhbGwgYXQgb25jZS4gKi8KKwkg IHN0YXRpYyBjb25zdCBpbnQgd3BidWZfbGVuID0gNjQ7CisJICBzdGF0aWMgY2hhciB3cGJ1Zlt3 cGJ1Zl9sZW5dOworCSAgc3RhdGljIGludCBpeHB1dCA9IDA7CisKKwkgIGlmIChpeHB1dCA9PSAw ICYmIGJ1ZlswXSAhPSAnXDAzMycpCisJICAgIHsgLyogZmFpbC1zYWZlICovCisJICAgICAgV3Jp dGVGaWxlICh0b19zbGF2ZSwgIlwwMzNbMTsxUiIsIDYsICZ3TGVuLCBOVUxMKTsgLyogZHVtbXkg Ki8KKwkgICAgICBnZXRfdHR5cCAoKS0+cGNvbl9zdGFydCA9IGZhbHNlOworCSAgICB9CisJICBl bHNlCiAJICAgIHsKLQkgICAgICBlYXRfcmVhZGFoZWFkICgtMSk7Ci0JICAgICAgU2V0RXZlbnQg KGlucHV0X2F2YWlsYWJsZV9ldmVudCk7CisJICAgICAgaWYgKGl4cHV0ICsgbmxlbiA8IHdwYnVm X2xlbikKKwkJZm9yIChzaXplX3QgaT0wOyBpPG5sZW47IGkrKykKKwkJICB3cGJ1ZltpeHB1dCsr XSA9IGJ1ZltpXTsKKwkgICAgICBlbHNlCisJCXsKKwkJICBXcml0ZUZpbGUgKHRvX3NsYXZlLCB3 cGJ1ZiwgaXhwdXQsICZ3TGVuLCBOVUxMKTsKKwkJICBpeHB1dCA9IDA7CisJCSAgZ2V0X3R0eXAg KCktPnBjb25fc3RhcnQgPSBmYWxzZTsKKwkJICBXcml0ZUZpbGUgKHRvX3NsYXZlLCBidWYsIG5s ZW4sICZ3TGVuLCBOVUxMKTsKKwkJfQorCSAgICAgIGlmIChpeHB1dCAmJiBtZW1jaHIgKHdwYnVm LCAnUicsIGl4cHV0KSkKKwkJeworCQkgIFdyaXRlRmlsZSAodG9fc2xhdmUsIHdwYnVmLCBpeHB1 dCwgJndMZW4sIE5VTEwpOworCQkgIGl4cHV0ID0gMDsKKwkJICBnZXRfdHR5cCAoKS0+cGNvbl9z dGFydCA9IGZhbHNlOworCQl9CisJICAgICAgUmVsZWFzZU11dGV4IChpbnB1dF9tdXRleCk7CisJ ICAgICAgbWJfc3RyX2ZyZWUgKGJ1Zik7CisJICAgICAgcmV0dXJuIGxlbjsKIAkgICAgfQorCX0K KworICAgICAgV3JpdGVGaWxlICh0b19zbGF2ZSwgYnVmLCBubGVuLCAmd0xlbiwgTlVMTCk7CisK KyAgICAgIFJlbGVhc2VNdXRleCAoaW5wdXRfbXV0ZXgpOwogCiAgICAgICBtYl9zdHJfZnJlZSAo YnVmKTsKICAgICAgIHJldHVybiBsZW47CkBAIC0yNjMwLDE1ICsxNzM4LDggQEAgZmhhbmRsZXJf cHR5X21hc3Rlcjo6aW9jdGwgKHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKICAgICAgIGlm IChnZXRfdHR5cCAoKS0+d2luc2l6ZS53c19yb3cgIT0gKChzdHJ1Y3Qgd2luc2l6ZSAqKSBhcmcp LT53c19yb3cKIAkgIHx8IGdldF90dHlwICgpLT53aW5zaXplLndzX2NvbCAhPSAoKHN0cnVjdCB3 aW5zaXplICopIGFyZyktPndzX2NvbCkKIAl7Ci0JICAvKiBGSVhNRTogUHNldWRvIGNvbnNvbGUg Y2FuIGJlIGFjY2Vzc2VkIHZpYSBpdHMgaGFuZGxlCi0JICAgICBvbmx5IGluIHRoZSBwcm9jZXNz IHdoaWNoIGNyZWF0ZWQgaXQuIFdoYXQgZWxzZSBjYW4gd2UgZG8/ICovCi0JICBpZiAoZ2V0X3Bz ZXVkb19jb25zb2xlICgpICYmIGdldF90dHlwICgpLT5tYXN0ZXJfcGlkID09IG15c2VsZi0+cGlk KQotCSAgICB7Ci0JICAgICAgQ09PUkQgc2l6ZTsKLQkgICAgICBzaXplLlggPSAoKHN0cnVjdCB3 aW5zaXplICopIGFyZyktPndzX2NvbDsKLQkgICAgICBzaXplLlkgPSAoKHN0cnVjdCB3aW5zaXpl ICopIGFyZyktPndzX3JvdzsKLQkgICAgICBSZXNpemVQc2V1ZG9Db25zb2xlIChnZXRfcHNldWRv X2NvbnNvbGUgKCksIHNpemUpOwotCSAgICB9CisJICBpZiAoZ2V0X3R0eXAgKCktPmhfcHNldWRv X2NvbnNvbGUgJiYgZ2V0X3R0eXAgKCktPnBjb25fcGlkKQorCSAgICByZXNpemVfcHNldWRvX2Nv bnNvbGUgKChzdHJ1Y3Qgd2luc2l6ZSAqKSBhcmcpOwogCSAgZ2V0X3R0eXAgKCktPndpbnNpemUg PSAqKHN0cnVjdCB3aW5zaXplICopIGFyZzsKIAkgIGdldF90dHlwICgpLT5raWxsX3BncnAgKFNJ R1dJTkNIKTsKIAl9CkBAIC0yNzYzLDcgKzE4NjQsNyBAQCBnZXRfbG9jYWxlX2Zyb21fZW52IChj aGFyICpsb2NhbGUpCiAgIHN0cmNweSAobG9jYWxlLCBlbnYpOwogfQogCi1zdGF0aWMgTENJRAor c3RhdGljIHZvaWQKIGdldF9sYW5naW5mbyAoY2hhciAqbG9jYWxlX291dCwgY2hhciAqY2hhcnNl dF9vdXQpCiB7CiAgIC8qIEdldCBsb2NhbGUgZnJvbSBlbnZpcm9ubWVudCAqLwpAQCAtMjc3Niwx MSArMTg3Nyw2IEBAIGdldF9sYW5naW5mbyAoY2hhciAqbG9jYWxlX291dCwgY2hhciAqY2hhcnNl dF9vdXQpCiAgIGlmICghbG9jYWxlKQogICAgIGxvY2FsZSA9ICJDIjsKIAotICBjaGFyIHRtcF9s b2NhbGVbRU5DT0RJTkdfTEVOICsgMV07Ci0gIGNoYXIgKnJldCA9IF9fc2V0X2xvY2FsZV9mcm9t X2xvY2FsZV9hbGlhcyAobG9jYWxlLCB0bXBfbG9jYWxlKTsKLSAgaWYgKHJldCkKLSAgICBsb2Nh bGUgPSB0bXBfbG9jYWxlOwotCiAgIGNvbnN0IGNoYXIgKmNoYXJzZXQ7CiAgIHN0cnVjdCBsY19j dHlwZV9UICpsY19jdHlwZSA9IChzdHJ1Y3QgbGNfY3R5cGVfVCAqKSBsb2MubGNfY2F0W0xDX0NU WVBFXS5wdHI7CiAgIGlmICghbGNfY3R5cGUpCkBAIC0yODMwLDIzICsxOTI2LDkgQEAgZ2V0X2xh bmdpbmZvIChjaGFyICpsb2NhbGVfb3V0LCBjaGFyICpjaGFyc2V0X291dCkKICAgICAgIGNoYXJz ZXQgPSAiQ1A5MzIiOwogICAgIH0KIAotICB3Y2hhcl90IGxjW0VOQ09ESU5HX0xFTiArIDFdOwot ICB3Y2hhcl90ICpwOwotICBtYnN0b3djcyAobGMsIGxvY2FsZSwgRU5DT0RJTkdfTEVOKTsKLSAg cCA9IHdjc2NociAobGMsIEwnLicpOwotICBpZiAocCkKLSAgICAqcCA9IEwnXDAnOwotICBwID0g d2NzY2hyIChsYywgTCdfJyk7Ci0gIGlmIChwKQotICAgICpwID0gTCctJzsKLSAgTENJRCBsY2lk ID0gTG9jYWxlTmFtZVRvTENJRCAobGMsIDApOwotICBpZiAoIWxjaWQgJiYgIXN0cmNtcCAoY2hh cnNldCwgIkFTQ0lJIikpCi0gICAgcmV0dXJuIDA7Ci0KICAgLyogU2V0IHJlc3VsdHMgKi8KICAg c3RyY3B5IChsb2NhbGVfb3V0LCBuZXdfbG9jYWxlKTsKICAgc3RyY3B5IChjaGFyc2V0X291dCwg Y2hhcnNldCk7Ci0gIHJldHVybiBsY2lkOwogfQogCiB2b2lkCkBAIC0yODU0LDIxICsxOTM2LDcg QEAgZmhhbmRsZXJfcHR5X3NsYXZlOjpzZXR1cF9sb2NhbGUgKHZvaWQpCiB7CiAgIGNoYXIgbG9j YWxlW0VOQ09ESU5HX0xFTiArIDFdID0gIkMiOwogICBjaGFyIGNoYXJzZXRbRU5DT0RJTkdfTEVO ICsgMV0gPSAiQVNDSUkiOwotICBMQ0lEIGxjaWQgPSBnZXRfbGFuZ2luZm8gKGxvY2FsZSwgY2hh cnNldCk7Ci0KLSAgLyogU2V0IGNvbnNvbGUgY29kZSBwYWdlIGZvcm0gbG9jYWxlICovCi0gIGlm IChnZXRfcHNldWRvX2NvbnNvbGUgKCkpCi0gICAgewotICAgICAgVUlOVCBjb2RlX3BhZ2U7Ci0g ICAgICBpZiAobGNpZCA9PSAwIHx8IGxjaWQgPT0gKExDSUQpIC0xKQotCWNvZGVfcGFnZSA9IDIw MTI3OyAvKiBBU0NJSSAqLwotICAgICAgZWxzZSBpZiAoIUdldExvY2FsZUluZm8gKGxjaWQsCi0J CQkgICAgICAgTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UgfCBMT0NBTEVfUkVUVVJOX05VTUJFUiwK LQkJCSAgICAgICAoY2hhciAqKSAmY29kZV9wYWdlLCBzaXplb2YgKGNvZGVfcGFnZSkpKQotCWNv ZGVfcGFnZSA9IDIwMTI3OyAvKiBBU0NJSSAqLwotICAgICAgU2V0Q29uc29sZUNQIChjb2RlX3Bh Z2UpOwotICAgICAgU2V0Q29uc29sZU91dHB1dENQIChjb2RlX3BhZ2UpOwotICAgIH0KKyAgZ2V0 X2xhbmdpbmZvIChsb2NhbGUsIGNoYXJzZXQpOwogCiAgIC8qIFNldCB0ZXJtaW5hbCBjb2RlIHBh Z2UgZnJvbSBsb2NhbGUgKi8KICAgLyogVGhpcyBjb2RlIGlzIGJvcnJvd2VkIGZyb20gbWludHR5 OiBjaGFyc2V0LmMgKi8KQEAgLTI4NzgsOSArMTk0Niw5IEBAIGZoYW5kbGVyX3B0eV9zbGF2ZTo6 c2V0dXBfbG9jYWxlICh2b2lkKQogICAgIGNoYXJzZXRfdVtpXSA9IHRvdXBwZXIgKGNoYXJzZXRb aV0pOwogICB1bnNpZ25lZCBpbnQgaXNvOwogICBVSU5UIGNwID0gMjAxMjc7IC8qIERlZmF1bHQg Zm9yIGZhbGxiYWNrICovCi0gIGlmIChzc2NhbmYgKGNoYXJzZXRfdSwgIklTTy04ODU5LSV1Iiwg JmlzbykgPT0gMSB8fAotICAgICAgc3NjYW5mIChjaGFyc2V0X3UsICJJU084ODU5LSV1IiwgJmlz bykgPT0gMSB8fAotICAgICAgc3NjYW5mIChjaGFyc2V0X3UsICJJU084ODU5JXUiLCAmaXNvKSA9 PSAxKQorICBpZiAoc3NjYW5mIChjaGFyc2V0X3UsICJJU08tODg1OS0ldSIsICZpc28pID09IDEK KyAgICAgIHx8IHNzY2FuZiAoY2hhcnNldF91LCAiSVNPODg1OS0ldSIsICZpc28pID09IDEKKyAg ICAgIHx8IHNzY2FuZiAoY2hhcnNldF91LCAiSVNPODg1OSV1IiwgJmlzbykgPT0gMSkKICAgICB7 CiAgICAgICBpZiAoaXNvICYmIGlzbyA8PSAxNiAmJiBpc28gIT0xMikKIAlnZXRfdHR5cCAoKS0+ dGVybV9jb2RlX3BhZ2UgPSAyODU5MCArIGlzbzsKQEAgLTI4OTYsOTAgKzE5NjQsOSBAQCBmaGFu ZGxlcl9wdHlfc2xhdmU6OnNldHVwX2xvY2FsZSAodm9pZCkKIAl9CiB9CiAKLXZvaWQKLWZoYW5k bGVyX3B0eV9zbGF2ZTo6c2V0X2ZyZWVjb25zb2xlX29uX2Nsb3NlIChib29sIHZhbCkKLXsKLSAg ZnJlZWNvbnNvbGVfb25fY2xvc2UgPSB2YWw7Ci19Ci0KLXZvaWQKLWZoYW5kbGVyX3B0eV9zbGF2 ZTo6dHJpZ2dlcl9yZWRyYXdfc2NyZWVuICh2b2lkKQotewotICAvKiBGb3JjaWJseSByZWRyYXcg c2NyZWVuIGJhc2VkIG9uIGNvbnNvbGUgc2NyZWVuIGJ1ZmZlci4gKi8KLSAgLyogVGhlIGZvbGxv d2luZyBjb2RlIHRyaWdnZXJzIHJlZHJhd2luZyB0aGUgc2NyZWVuLiAqLwotICBDT05TT0xFX1ND UkVFTl9CVUZGRVJfSU5GTyBzYmk7Ci0gIEdldENvbnNvbGVTY3JlZW5CdWZmZXJJbmZvIChnZXRf b3V0cHV0X2hhbmRsZSAoKSwgJnNiaSk7Ci0gIFNNQUxMX1JFQ1QgcmVjdCA9IHswLCAwLAotICAg IChTSE9SVCkgKHNiaS5kd1NpemUuWCAtMSksIChTSE9SVCkgKHNiaS5kd1NpemUuWSAtIDEpfTsK LSAgQ09PUkQgZGVzdCA9IHswLCAwfTsKLSAgQ0hBUl9JTkZPIGZpbGwgPSB7JyAnLCAwfTsKLSAg U2Nyb2xsQ29uc29sZVNjcmVlbkJ1ZmZlciAoZ2V0X291dHB1dF9oYW5kbGUgKCksICZyZWN0LCBO VUxMLCBkZXN0LCAmZmlsbCk7Ci0gIGdldF90dHlwICgpLT5uZWVkX3JlZHJhd19zY3JlZW4gPSBm YWxzZTsKLX0KLQotdm9pZAotZmhhbmRsZXJfcHR5X3NsYXZlOjpmaXh1cF9hZnRlcl9hdHRhY2gg KGJvb2wgbmF0aXZlX21heWJlLCBpbnQgZmRfc2V0KQotewotICBpZiAoZmQgPCAwKQotICAgIGZk ID0gZmRfc2V0OwotICBpZiAoZ2V0X3BzZXVkb19jb25zb2xlICgpKQotICAgIHsKLSAgICAgIGlm IChmaGFuZGxlcl9jb25zb2xlOjpnZXRfY29uc29sZV9wcm9jZXNzX2lkIChnZXRfaGVscGVyX3By b2Nlc3NfaWQgKCksCi0JCQkJCQkgICAgdHJ1ZSkpCi0JaWYgKHBjb25fYXR0YWNoZWRfdG8gIT0g Z2V0X21pbm9yICgpKQotCSAgewotCSAgICBwY29uX2F0dGFjaGVkX3RvID0gZ2V0X21pbm9yICgp OwotCSAgICBpbml0X2NvbnNvbGVfaGFuZGxlciAodHJ1ZSk7Ci0JICB9Ci0KLSNpZiAwIC8qIFRo aXMgaXMgZm9yIGRlYnVnIG9ubHkuICovCi0gICAgICBpc0h5YnJpZCA9IHRydWU7Ci0gICAgICBn ZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25faW4gPSB0cnVlOwotICAgICAgZ2V0X3R0eXAgKCkt PnN3aXRjaF90b19wY29uX291dCA9IHRydWU7Ci0jZW5kaWYKLQotICAgICAgaWYgKHBjb25fYXR0 YWNoZWRfdG8gPT0gZ2V0X21pbm9yICgpICYmIG5hdGl2ZV9tYXliZSkKLQl7Ci0JICBpZiAoZmQg PT0gMCkKLQkgICAgewotCSAgICAgIHB1bGxfcGNvbl9pbnB1dCAoKTsKLQkgICAgICBEV09SRCBt b2RlID0KLQkJRU5BQkxFX1BST0NFU1NFRF9JTlBVVCB8IEVOQUJMRV9MSU5FX0lOUFVUIHwgRU5B QkxFX0VDSE9fSU5QVVQ7Ci0JICAgICAgU2V0Q29uc29sZU1vZGUgKGdldF9oYW5kbGUgKCksIG1v ZGUpOwotCSAgICAgIGlmIChnZXRfdHR5cCAoKS0+cGNvbl9waWQgPT0gMCB8fAotCQkgICFwaW5m byAoZ2V0X3R0eXAgKCktPnBjb25fcGlkKSkKLQkJZ2V0X3R0eXAgKCktPnBjb25fcGlkID0gbXlz ZWxmLT5waWQ7Ci0JICAgICAgZ2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29uX2luID0gdHJ1ZTsK LQkgICAgfQotCSAgZWxzZSBpZiAoZmQgPT0gMSB8fCBmZCA9PSAyKQotCSAgICB7Ci0JICAgICAg RFdPUkQgbW9kZSA9IEVOQUJMRV9QUk9DRVNTRURfT1VUUFVUIHwgRU5BQkxFX1dSQVBfQVRfRU9M X09VVFBVVDsKLQkgICAgICBTZXRDb25zb2xlTW9kZSAoZ2V0X291dHB1dF9oYW5kbGUgKCksIG1v ZGUpOwotCSAgICAgIGFjcXVpcmVfb3V0cHV0X211dGV4IChJTkZJTklURSk7Ci0JICAgICAgaWYg KCFnZXRfdHR5cCAoKS0+c3dpdGNoX3RvX3Bjb25fb3V0KQotCQlnZXRfdHR5cCAoKS0+d2FpdF9w Y29uX2Z3ZCAoKTsKLQkgICAgICBpZiAoZ2V0X3R0eXAgKCktPnBjb25fcGlkID09IDAgfHwKLQkJ ICAhcGluZm8gKGdldF90dHlwICgpLT5wY29uX3BpZCkpCi0JCWdldF90dHlwICgpLT5wY29uX3Bp ZCA9IG15c2VsZi0+cGlkOwotCSAgICAgIGdldF90dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9vdXQg PSB0cnVlOwotCSAgICAgIHJlbGVhc2Vfb3V0cHV0X211dGV4ICgpOwotCi0JICAgICAgaWYgKGdl dF90dHlwICgpLT5uZWVkX3JlZHJhd19zY3JlZW4pCi0JCXRyaWdnZXJfcmVkcmF3X3NjcmVlbiAo KTsKLQkgICAgfQotCSAgaW5pdF9jb25zb2xlX2hhbmRsZXIgKGZhbHNlKTsKLQl9Ci0gICAgICBl bHNlIGlmIChmZCA9PSAwICYmIG5hdGl2ZV9tYXliZSkKLQkvKiBSZWFkIGZyb20gdW5hdHRhY2hl ZCBwc2V1ZG8gY29uc29sZSBjYXVzZSBmcmVlemUsCi0JICAgdGhlcmVmb3JlLCBmYWxsYmFjayB0 byBsZWdhY3kgcHR5LiAqLwotCXNldF9oYW5kbGUgKGdldF9oYW5kbGVfY3lnICgpKTsKLSAgICB9 Ci19Ci0KIHZvaWQKIGZoYW5kbGVyX3B0eV9zbGF2ZTo6Zml4dXBfYWZ0ZXJfZm9yayAoSEFORExF IHBhcmVudCkKIHsKLSAgZml4dXBfYWZ0ZXJfYXR0YWNoIChmYWxzZSwgLTEpOwogICAvLyBmb3Jr X2ZpeHVwIChwYXJlbnQsIGludXNlLCAiaW51c2UiKTsKICAgLy8gZmhhbmRsZXJfcHR5X2NvbW1v bjo6Zml4dXBfYWZ0ZXJfZm9yayAocGFyZW50KTsKICAgcmVwb3J0X3R0eV9jb3VudHMgKHRoaXMs ICJpbmhlcml0ZWQiLCAiIik7CkBAIC0yOTk2LDY3ICsxOTgzLDE4IEBAIGZoYW5kbGVyX3B0eV9z bGF2ZTo6Zml4dXBfYWZ0ZXJfZXhlYyAoKQogCiAgIGlmICghY2xvc2Vfb25fZXhlYyAoKSkKICAg ICBmaXh1cF9hZnRlcl9mb3JrIChOVUxMKTsJLyogTm8gcGFyZW50IGhhbmRsZSByZXF1aXJlZC4g Ki8KLSAgZWxzZSBpZiAoZ2V0X3BzZXVkb19jb25zb2xlICgpKQotICAgIHsKLSAgICAgIGludCB1 c2VkID0gMDsKLSAgICAgIGludCBhdHRhY2hlZCA9IDA7Ci0gICAgICBjeWdoZWFwX2ZkZW51bSBj ZmQgKGZhbHNlKTsKLSAgICAgIHdoaWxlIChjZmQubmV4dCAoKSA+PSAwKQotCXsKLQkgIGlmIChj ZmQtPmdldF9tYWpvciAoKSA9PSBERVZfUFRZU19NQUpPUiB8fAotCSAgICAgIGNmZC0+Z2V0X21h am9yICgpID09IERFVl9DT05TX01BSk9SKQotCSAgICB1c2VkICsrOwotCSAgaWYgKGNmZC0+Z2V0 X21ham9yICgpID09IERFVl9QVFlTX01BSk9SICYmCi0JICAgICAgY2ZkLT5nZXRfbWlub3IgKCkg PT0gcGNvbl9hdHRhY2hlZF90bykKLQkgICAgYXR0YWNoZWQgKys7Ci0JfQotCi0gICAgICAvKiBD YWxsIEZyZWVDb25zb2xlKCkgaWYgbm8gdHR5IGlzIG9wZW5lZCBhbmQgdGhlIHByb2Nlc3MKLQkg aXMgYXR0YWNoZWQgdG8gY29uc29sZSBjb3JyZXNwb25kaW5nIHRvIHR0eS4gVGhpcyBpcwotCSBu ZWVkZWQgdG8gbWFrZSBHTlUgc2NyZWVuIGFuZCB0bXV4IHdvcmsgaW4gV2luZG93cyAxMAotCSAx OTAzLiAqLwotICAgICAgaWYgKGF0dGFjaGVkID09IDEgJiYgZ2V0X21pbm9yICgpID09IHBjb25f YXR0YWNoZWRfdG8pCi0JcGNvbl9hdHRhY2hlZF90byA9IC0xOwotICAgICAgaWYgKHVzZWQgPT0g MSAvKiBBYm91dCB0byBjbG9zZSB0aGlzIHR0eSAqLykKLQl7Ci0JICBpbml0X2NvbnNvbGVfaGFu ZGxlciAoZmFsc2UpOwotCSAgZnJlZV9hdHRhY2hlZF9jb25zb2xlICgpOwotCX0KLSAgICB9CiAK ICAgLyogSG9vayBDb25zb2xlIEFQSSAqLwotICBpZiAoZ2V0X3BzZXVkb19jb25zb2xlICgpKQot ICAgIHsKICNkZWZpbmUgRE9fSE9PSyhtb2R1bGUsIG5hbWUpIFwKLSAgICAgIGlmICghbmFtZSMj X09yaWcpIFwKLQl7IFwKLQkgIHZvaWQgKmFwaSA9IGhvb2tfYXBpIChtb2R1bGUsICNuYW1lLCAo dm9pZCAqKSBuYW1lIyNfSG9va2VkKTsgXAotCSAgbmFtZSMjX09yaWcgPSAoX190eXBlb2ZfXyAo bmFtZSkgKikgYXBpOyBcCi0JICAvKmlmIChhcGkpIHN5c3RlbV9wcmludGYgKCNuYW1lICIgaG9v a2VkLiIpOyovIFwKLQl9Ci0gICAgICBET19IT09LIChOVUxMLCBXcml0ZUZpbGUpOwotICAgICAg RE9fSE9PSyAoTlVMTCwgV3JpdGVDb25zb2xlQSk7Ci0gICAgICBET19IT09LIChOVUxMLCBXcml0 ZUNvbnNvbGVXKTsKLSAgICAgIERPX0hPT0sgKE5VTEwsIFJlYWRGaWxlKTsKLSAgICAgIERPX0hP T0sgKE5VTEwsIFJlYWRDb25zb2xlQSk7Ci0gICAgICBET19IT09LIChOVUxMLCBSZWFkQ29uc29s ZVcpOwotICAgICAgRE9fSE9PSyAoTlVMTCwgV3JpdGVDb25zb2xlT3V0cHV0QSk7Ci0gICAgICBE T19IT09LIChOVUxMLCBXcml0ZUNvbnNvbGVPdXRwdXRXKTsKLSAgICAgIERPX0hPT0sgKE5VTEws IFdyaXRlQ29uc29sZU91dHB1dENoYXJhY3RlckEpOwotICAgICAgRE9fSE9PSyAoTlVMTCwgV3Jp dGVDb25zb2xlT3V0cHV0Q2hhcmFjdGVyVyk7Ci0gICAgICBET19IT09LIChOVUxMLCBXcml0ZUNv bnNvbGVPdXRwdXRBdHRyaWJ1dGUpOwotICAgICAgRE9fSE9PSyAoTlVMTCwgU2V0Q29uc29sZUN1 cnNvclBvc2l0aW9uKTsKLSAgICAgIERPX0hPT0sgKE5VTEwsIFNldENvbnNvbGVUZXh0QXR0cmli dXRlKTsKLSAgICAgIERPX0hPT0sgKE5VTEwsIFdyaXRlQ29uc29sZUlucHV0QSk7Ci0gICAgICBE T19IT09LIChOVUxMLCBXcml0ZUNvbnNvbGVJbnB1dFcpOwotICAgICAgRE9fSE9PSyAoTlVMTCwg UmVhZENvbnNvbGVJbnB1dEEpOwotICAgICAgRE9fSE9PSyAoTlVMTCwgUmVhZENvbnNvbGVJbnB1 dFcpOwotICAgICAgRE9fSE9PSyAoTlVMTCwgUGVla0NvbnNvbGVJbnB1dEEpOwotICAgICAgRE9f SE9PSyAoTlVMTCwgUGVla0NvbnNvbGVJbnB1dFcpOwotICAgICAgLyogQ3JlYXRlUHJvY2Vzcygp IGlzIGhvb2tlZCBmb3IgR0RCIGV0Yy4gKi8KLSAgICAgIERPX0hPT0sgKE5VTEwsIENyZWF0ZVBy b2Nlc3NBKTsKLSAgICAgIERPX0hPT0sgKE5VTEwsIENyZWF0ZVByb2Nlc3NXKTsKKyAgaWYgKCFu YW1lIyNfT3JpZykgXAorICAgIHsgXAorICAgICAgdm9pZCAqYXBpID0gaG9va19hcGkgKG1vZHVs ZSwgI25hbWUsICh2b2lkICopIG5hbWUjI19Ib29rZWQpOyBcCisgICAgICBuYW1lIyNfT3JpZyA9 IChfX3R5cGVvZl9fIChuYW1lKSAqKSBhcGk7IFwKKyAgICAgIC8qaWYgKGFwaSkgc3lzdGVtX3By aW50ZiAoI25hbWUgIiBob29rZWQuIik7Ki8gXAogICAgIH0KKyAgLyogQ3JlYXRlUHJvY2Vzcygp IGlzIGhvb2tlZCBmb3IgR0RCIGV0Yy4gKi8KKyAgRE9fSE9PSyAoTlVMTCwgQ3JlYXRlUHJvY2Vz c0EpOworICBET19IT09LIChOVUxMLCBDcmVhdGVQcm9jZXNzVyk7CiB9CiAKIC8qIFRoaXMgdGhy ZWFkIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIG1hc3RlciBjb250cm9sIHBpcGUuICBJdCB3YWl0cyBm b3IgYQpAQCAtMzIwNCwyNyArMjE0Miw2IEBAIHJlcGx5OgogICByZXR1cm4gMDsKIH0KIAotdm9p ZAotZmhhbmRsZXJfcHR5X21hc3Rlcjo6dHJhbnNmZXJfaW5wdXRfdG9fcGNvbiAodm9pZCkKLXsK LSAgV2FpdEZvclNpbmdsZU9iamVjdCAoaW5wdXRfbXV0ZXgsIElORklOSVRFKTsKLSAgRFdPUkQg bjsKLSAgc2l6ZV90IHRyYW5zZmVyZWQgPSAwOwotICB3aGlsZSAoOjpieXRlc19hdmFpbGFibGUg KG4sIGZyb21fbWFzdGVyX2N5ZykgJiYgbikKLSAgICB7Ci0gICAgICBjaGFyIGJ1ZlsxMDI0XTsK LSAgICAgIFJlYWRGaWxlIChmcm9tX21hc3Rlcl9jeWcsIGJ1Ziwgc2l6ZW9mIChidWYpLCAmbiwg MCk7Ci0gICAgICBjaGFyICpwID0gYnVmOwotICAgICAgd2hpbGUgKChwID0gKGNoYXIgKikgbWVt Y2hyIChwLCAnXG4nLCBuIC0gKHAgLSBidWYpKSkpCi0JKnAgPSAnXHInOwotICAgICAgaWYgKFdy aXRlRmlsZSAodG9fc2xhdmUsIGJ1ZiwgbiwgJm4sIDApKQotCXRyYW5zZmVyZWQgKz0gbjsKLSAg ICB9Ci0gIGlmICh0cmFuc2ZlcmVkKQotICAgIGdldF90dHlwICgpLT5wY29uX2luX2VtcHR5ID0g ZmFsc2U7Ci0gIFJlbGVhc2VNdXRleCAoaW5wdXRfbXV0ZXgpOwotfQotCiBzdGF0aWMgRFdPUkQg V0lOQVBJCiBwdHlfbWFzdGVyX3RocmVhZCAoVk9JRCAqYXJnKQogewpAQCAtMzI0MCwyMyArMjE1 Nyw3IEBAIGZoYW5kbGVyX3B0eV9tYXN0ZXI6OnB0eV9tYXN0ZXJfZndkX3RocmVhZCAoKQogICB0 ZXJtaW9zX3ByaW50ZiAoIlN0YXJ0ZWQuIik7CiAgIGZvciAoOzspCiAgICAgewotICAgICAgaWYg KGdldF9wc2V1ZG9fY29uc29sZSAoKSkKLQl7Ci0JICBnZXRfdHR5cCAoKS0+cGNvbl9sYXN0X3Rp bWUgPSBHZXRUaWNrQ291bnQgKCk7Ci0JICB3aGlsZSAoOjpieXRlc19hdmFpbGFibGUgKHJsZW4s IGZyb21fc2xhdmUpICYmIHJsZW4gPT0gMCkKLQkgICAgewotCSAgICAgIC8qIEZvcmNpYmx5IHRy YW5zZmVyIGlucHV0IGlmIGl0IGlzIHJlcXVlc3RlZCBieSBzbGF2ZS4KLQkJIFRoaXMgaGFwcGVu cyB3aGVuIGlucHV0IGRhdGEgc2hvdWxkIGJlIHRyYW5zZmVyZWQKLQkJIGZyb20gdGhlIGlucHV0 IHBpcGUgZm9yIGN5Z3dpbiBhcHBzIHRvIHRoZSBpbnB1dCBwaXBlCi0JCSBmb3IgbmF0aXZlIGFw cHMuICovCi0JICAgICAgaWYgKGdldF90dHlwICgpLT5yZXFfdHJhbnNmZXJfaW5wdXRfdG9fcGNv bikKLQkJewotCQkgIHRyYW5zZmVyX2lucHV0X3RvX3Bjb24gKCk7Ci0JCSAgZ2V0X3R0eXAgKCkt PnJlcV90cmFuc2Zlcl9pbnB1dF90b19wY29uID0gZmFsc2U7Ci0JCX0KLQkgICAgICBTbGVlcCAo MSk7Ci0JICAgIH0KLQl9CisgICAgICBnZXRfdHR5cCAoKS0+cGNvbl9sYXN0X3RpbWUgPSBHZXRU aWNrQ291bnQgKCk7CiAgICAgICBpZiAoIVJlYWRGaWxlIChmcm9tX3NsYXZlLCBvdXRidWYsIHNp emVvZiBvdXRidWYsICZybGVuLCBOVUxMKSkKIAl7CiAJICB0ZXJtaW9zX3ByaW50ZiAoIlJlYWRG aWxlIGZvciBmb3J3YXJkaW5nIGZhaWxlZCwgJUUiKTsKQEAgLTMyNjQsMTQgKzIxNjUsOSBAQCBm aGFuZGxlcl9wdHlfbWFzdGVyOjpwdHlfbWFzdGVyX2Z3ZF90aHJlYWQgKCkKIAl9CiAgICAgICBz c2l6ZV90IHdsZW4gPSBybGVuOwogICAgICAgY2hhciAqcHRyID0gb3V0YnVmOwotICAgICAgaWYg KGdldF9wc2V1ZG9fY29uc29sZSAoKSkKKyAgICAgIGlmIChnZXRfdHR5cCAoKS0+aF9wc2V1ZG9f Y29uc29sZSkKIAl7Ci0JICAvKiBBdm9pZCBkdXBsaWNhdGluZyBzbGF2ZSBvdXRwdXQgd2hpY2gg aXMgYWxyZWFkeSBzZW50IHRvCi0JICAgICB0b19tYXN0ZXJfY3lnICovCi0JICBpZiAoIWdldF90 dHlwICgpLT5zd2l0Y2hfdG9fcGNvbl9vdXQpCi0JICAgIGNvbnRpbnVlOwotCi0JICAvKiBBdm9p ZCBzZXR0aW5nIHdpbmRvdyB0aXRsZSB0byAiY3lnd2luLWNvbnNvbGUtaGVscGVyLmV4ZSIgKi8K KwkgIC8qIFJlbW92ZSBDU0kgPiBQbSBtICovCiAJICBpbnQgc3RhdGUgPSAwOwogCSAgaW50IHN0 YXJ0X2F0ID0gMDsKIAkgIGZvciAoRFdPUkQgaT0wOyBpPHJsZW47IGkrKykKQEAgLTMyODEsNDMg KzIxNzcsOCBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjpwdHlfbWFzdGVyX2Z3ZF90aHJlYWQgKCkK IAkJc3RhdGUgPSAxOwogCQljb250aW51ZTsKIAkgICAgICB9Ci0JICAgIGVsc2UgaWYgKChzdGF0 ZSA9PSAxICYmIG91dGJ1ZltpXSA9PSAnXScpIHx8Ci0JCSAgICAgKHN0YXRlID09IDIgJiYgb3V0 YnVmW2ldID09ICcwJykgfHwKLQkJICAgICAoc3RhdGUgPT0gMyAmJiBvdXRidWZbaV0gPT0gJzsn KSkKLQkgICAgICB7Ci0JCXN0YXRlICsrOwotCQljb250aW51ZTsKLQkgICAgICB9Ci0JICAgIGVs c2UgaWYgKHN0YXRlID09IDQgJiYgb3V0YnVmW2ldID09ICdcYScpCi0JICAgICAgewotCQljb25z dCBjaGFyICpoZWxwZXJfc3RyID0gIlxcYmluXFxjeWd3aW4tY29uc29sZS1oZWxwZXIuZXhlIjsK LQkJaWYgKG1lbW1lbSAoJm91dGJ1ZltzdGFydF9hdF0sIGkgKyAxIC0gc3RhcnRfYXQsCi0JCQkg ICAgaGVscGVyX3N0ciwgc3RybGVuIChoZWxwZXJfc3RyKSkpCi0JCSAgewotCQkgICAgbWVtbW92 ZSAoJm91dGJ1ZltzdGFydF9hdF0sICZvdXRidWZbaSsxXSwgcmxlbi1pLTEpOwotCQkgICAgcmxl biA9IHdsZW4gPSBzdGFydF9hdCArIHJsZW4gLSBpIC0gMTsKLQkJICB9Ci0JCXN0YXRlID0gMDsK LQkJY29udGludWU7Ci0JICAgICAgfQotCSAgICBlbHNlIGlmIChvdXRidWZbaV0gPT0gJ1xhJykK LQkgICAgICB7Ci0JCXN0YXRlID0gMDsKLQkJY29udGludWU7Ci0JICAgICAgfQotCi0JICAvKiBS ZW1vdmUgQ1NJID4gUG0gbSAqLwotCSAgc3RhdGUgPSAwOwotCSAgc3RhcnRfYXQgPSAwOwotCSAg Zm9yIChEV09SRCBpPTA7IGk8cmxlbjsgaSsrKQotCSAgICBpZiAob3V0YnVmW2ldID09ICdcMDMz JykKLQkgICAgICB7Ci0JCXN0YXJ0X2F0ID0gaTsKLQkJc3RhdGUgPSAxOwotCQljb250aW51ZTsK LQkgICAgICB9Ci0JICAgIGVsc2UgaWYgKChzdGF0ZSA9PSAxICYmIG91dGJ1ZltpXSA9PSAnWycp IHx8Ci0JCSAgICAgKHN0YXRlID09IDIgJiYgb3V0YnVmW2ldID09ICc+JykpCisJICAgIGVsc2Ug aWYgKChzdGF0ZSA9PSAxICYmIG91dGJ1ZltpXSA9PSAnWycpCisJCSAgICAgfHwgKHN0YXRlID09 IDIgJiYgb3V0YnVmW2ldID09ICc+JykpCiAJICAgICAgewogCQlzdGF0ZSArKzsKIAkJY29udGlu dWU7CkBAIC0zMzg2LDIwMSArMjI0Nyw2IEBAIHB0eV9tYXN0ZXJfZndkX3RocmVhZCAoVk9JRCAq YXJnKQogICByZXR1cm4gKChmaGFuZGxlcl9wdHlfbWFzdGVyICopIGFyZyktPnB0eV9tYXN0ZXJf ZndkX3RocmVhZCAoKTsKIH0KIAotLyogSWYgbWFzdGVyIHByb2Nlc3MgaXMgcnVubmluZyBhcyBz ZXJ2aWNlLCBhdHRhY2hpbmcgdG8KLSAgIHBzZXVkbyBjb25zb2xlIHNob3VsZCBiZSBkb25lIGlu IGZvcmsuIElmIGF0dGFjaGluZwotICAgaXMgZG9uZSBpbiBzcGF3biBmb3IgaW5ldGQgb3Igc3No ZCwgaXQgZmFpbHMgYmVjYXVzZQotICAgdGhlIGhlbHBlciBwcm9jZXNzIGlzIHJ1bm5pbmcgYXMg cHJpdmlsZWdlZCB1c2VyIHdoaWxlCi0gICBzbGF2ZSBwcm9jZXNzIGlzIG5vdC4gVGhpcyBmdW5j dGlvbiBpcyB1c2VkIHRvIGRldGVybWluZQotICAgaWYgdGhlIHByb2Nlc3MgaXMgcnVubmluZyBh cyBhIHNydmljZSBvciBub3QuICovCi1pbmxpbmUgc3RhdGljIGJvb2wKLWlzX3J1bm5pbmdfYXNf c2VydmljZSAodm9pZCkKLXsKLSAgcmV0dXJuIGNoZWNrX3Rva2VuX21lbWJlcnNoaXAgKHdlbGxf a25vd25fc2VydmljZV9zaWQpCi0gICAgfHwgY3lnaGVhcC0+dXNlci5zYXZlZF9zaWQgKCkgPT0g d2VsbF9rbm93bl9zeXN0ZW1fc2lkOwotfQotCi1ib29sCi1maGFuZGxlcl9wdHlfbWFzdGVyOjpz ZXR1cF9wc2V1ZG9jb25zb2xlICgpCi17Ci0gIGlmIChkaXNhYmxlX3Bjb24pCi0gICAgcmV0dXJu IGZhbHNlOwotICAvKiBJZiB0aGUgbGVnYWN5IGNvbnNvbGUgbW9kZSBpcyBlbmFibGVkLCBwc2V1 ZG8gY29uc29sZSBzZWVtcwotICAgICBub3QgdG8gd29yayBhcyBleHBlY3RlZC4gVG8gZGV0ZXJt aW5lIGNvbnNvbGUgbW9kZSwgcmVnaXN0cnkKLSAgICAga2V5IEZvcmNlVjIgaW4gSEtFWV9DVVJS RU5UX1VTRVJcQ29uc29sZSBpcyBjaGVja2VkLiAqLwotICByZWdfa2V5IHJlZyAoSEtFWV9DVVJS RU5UX1VTRVIsIEtFWV9SRUFELCBMIkNvbnNvbGUiLCBOVUxMKTsKLSAgaWYgKHJlZy5lcnJvciAo KSkKLSAgICByZXR1cm4gZmFsc2U7Ci0gIGlmIChyZWcuZ2V0X2R3b3JkIChMIkZvcmNlVjIiLCAx KSA9PSAwKQotICAgIHsKLSAgICAgIHRlcm1pb3NfcHJpbnRmICgiUHNldWRvIGNvbnNvbGUgaXMg ZGlzYWJsZWQgIgotCQkgICAgICAiYmVjYXVzZSB0aGUgbGVnYWN5IGNvbnNvbGUgbW9kZSBpcyBl bmFibGVkLiIpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAvKiBQc2V1ZG8gY29u c29sZSBzdXBwcm90IGlzIHJlYWxpemVkIHVzaW5nIGEgdHJpY2t5IHRlY2huaWMuCi0gICAgIFBU WSBuZWVkIHRoZSBwc2V1ZG8gY29uc29sZSBoYW5kbGVzLCBob3dldmVyLCB0aGV5IGNhbm5vdAot ICAgICBiZSByZXRyaWV2ZWQgYnkgbm9ybWFsIHByb2NlZHVyZS4gVGhlcmVmb3JlLCBydW4gYSBo ZWxwZXIKLSAgICAgcHJvY2VzcyBpbiBhIHBzZXVkbyBjb25zb2xlIGFuZCBnZXQgdGhlbSBmcm9t IHRoZSBoZWxwZXIuCi0gICAgIFNsYXZlIHByb2Nlc3Mgd2lsbCBhdHRhY2ggdG8gdGhlIHBzZXVk byBjb25zb2xlIGluIHRoZQotICAgICBoZWxwZXIgcHJvY2VzcyB1c2luZyBBdHRhY2hDb25zb2xl KCkuICovCi0gIENPT1JEIHNpemUgPSB7Ci0gICAgKFNIT1JUKSBnZXRfdHR5cCAoKS0+d2luc2l6 ZS53c19jb2wsCi0gICAgKFNIT1JUKSBnZXRfdHR5cCAoKS0+d2luc2l6ZS53c19yb3cKLSAgfTsK LSAgQ3JlYXRlUGlwZSAoJmZyb21fbWFzdGVyLCAmdG9fc2xhdmUsICZzZWNfbm9uZSwgMCk7Ci0g IFNldExhc3RFcnJvciAoRVJST1JfU1VDQ0VTUyk7Ci0gIEhSRVNVTFQgcmVzID0gQ3JlYXRlUHNl dWRvQ29uc29sZSAoc2l6ZSwgZnJvbV9tYXN0ZXIsIHRvX21hc3RlciwKLQkJCQkgICAgIDAsICZn ZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZSk7Ci0gIGlmIChyZXMgIT0gU19PSyB8fCBHZXRM YXN0RXJyb3IgKCkgPT0gRVJST1JfUFJPQ19OT1RfRk9VTkQpCi0gICAgewotICAgICAgaWYgKHJl cyAhPSBTX09LKQotCXN5c3RlbV9wcmludGYgKCJDcmVhdGVQc2V1ZG9Db25zb2xlKCkgZmFpbGVk LiAlMDh4XG4iLAotCQkgICAgICAgR2V0TGFzdEVycm9yICgpKTsKLSAgICAgIGdvdG8gZmFsbGJh Y2s7Ci0gICAgfQotCi0gIC8qIElmIG1hc3RlciBwcm9jZXNzIGlzIHJ1bm5pbmcgYXMgc2Vydmlj ZSwgYXR0YWNoaW5nIHRvCi0gICAgIHBzZXVkbyBjb25zb2xlIHNob3VsZCBiZSBkb25lIGluIGZv cmsuIElmIGF0dGFjaGluZwotICAgICBpcyBkb25lIGluIHNwYXduIGZvciBpbmV0ZCBvciBzc2hk LCBpdCBmYWlscyBiZWNhdXNlCi0gICAgIHRoZSBoZWxwZXIgcHJvY2VzcyBpcyBydW5uaW5nIGFz IHByaXZpbGVnZWQgdXNlciB3aGlsZQotICAgICBzbGF2ZSBwcm9jZXNzIGlzIG5vdC4gKi8KLSAg aWYgKGlzX3J1bm5pbmdfYXNfc2VydmljZSAoKSkKLSAgICBnZXRfdHR5cCAoKS0+YXR0YWNoX3Bj b25faW5fZm9yayA9IHRydWU7Ci0KLSAgU1RBUlRVUElORk9FWFcgc2lfaGVscGVyOwotICBIQU5E TEUgaGVsbG8sIGdvb2RieWU7Ci0gIEhBTkRMRSBociwgaHc7Ci0gIFBST0NFU1NfSU5GT1JNQVRJ T04gcGlfaGVscGVyOwotICBIQU5ETEUgaHBDb25JbiwgaHBDb25PdXQ7Ci0gIHsKLSAgICBTSVpF X1QgYnl0ZXNSZXF1aXJlZDsKLSAgICBJbml0aWFsaXplUHJvY1RocmVhZEF0dHJpYnV0ZUxpc3Qg KE5VTEwsIDIsIDAsICZieXRlc1JlcXVpcmVkKTsKLSAgICBaZXJvTWVtb3J5ICgmc2lfaGVscGVy LCBzaXplb2YgKHNpX2hlbHBlcikpOwotICAgIHNpX2hlbHBlci5TdGFydHVwSW5mby5jYiA9IHNp emVvZiAoU1RBUlRVUElORk9FWFcpOwotICAgIHNpX2hlbHBlci5scEF0dHJpYnV0ZUxpc3QgPSAo UFBST0NfVEhSRUFEX0FUVFJJQlVURV9MSVNUKQotICAgICAgSGVhcEFsbG9jIChHZXRQcm9jZXNz SGVhcCAoKSwgMCwgYnl0ZXNSZXF1aXJlZCk7Ci0gICAgaWYgKHNpX2hlbHBlci5scEF0dHJpYnV0 ZUxpc3QgPT0gTlVMTCkKLSAgICAgIGdvdG8gY2xlYW51cF9wc2V1ZG9fY29uc29sZTsKLSAgICBp ZiAoIUluaXRpYWxpemVQcm9jVGhyZWFkQXR0cmlidXRlTGlzdCAoc2lfaGVscGVyLmxwQXR0cmli dXRlTGlzdCwKLQkJCQkJICAgIDIsIDAsICZieXRlc1JlcXVpcmVkKSkKLSAgICAgIGdvdG8gY2xl YW51cF9oZWFwOwotICAgIGlmICghVXBkYXRlUHJvY1RocmVhZEF0dHJpYnV0ZSAoc2lfaGVscGVy LmxwQXR0cmlidXRlTGlzdCwKLQkJCQkgICAgMCwKLQkJCQkgICAgUFJPQ19USFJFQURfQVRUUklC VVRFX1BTRVVET0NPTlNPTEUsCi0JCQkJICAgIGdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xl LAotCQkJCSAgICBzaXplb2YgKGdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xlKSwKLQkJCQkg ICAgTlVMTCwgTlVMTCkpCi0gICAgICBnb3RvIGNsZWFudXBfaGVhcDsKLSAgICAvKiBDcmVhdGUg ZXZlbnRzIGZvciBzdGFydC9zdG9wIGhlbHBlciBwcm9jZXNzLiAqLwotICAgIGhlbGxvID0gQ3Jl YXRlRXZlbnQgKCZzZWNfbm9uZSwgdHJ1ZSwgZmFsc2UsIE5VTEwpOwotICAgIGdvb2RieWUgPSBD cmVhdGVFdmVudCAoJnNlY19ub25lLCB0cnVlLCBmYWxzZSwgTlVMTCk7Ci0gICAgLyogQ3JlYXRl IGEgcGlwZSBmb3IgcmVjZWl2aW5nIHBzZXVkbyBjb25zb2xlIGhhbmRsZXMgKi8KLSAgICBDcmVh dGVQaXBlICgmaHIsICZodywgJnNlY19ub25lLCAwKTsKLSAgICAvKiBJbmhlcml0IG9ubHkgaGFu ZGxlcyB3aGljaCBhcmUgbmVlZGVkIGJ5IGhlbHBlci4gKi8KLSAgICBIQU5ETEUgaGFuZGxlc190 b19pbmhlcml0W10gPSB7aGVsbG8sIGdvb2RieWUsIGh3fTsKLSAgICBpZiAoIVVwZGF0ZVByb2NU aHJlYWRBdHRyaWJ1dGUgKHNpX2hlbHBlci5scEF0dHJpYnV0ZUxpc3QsCi0JCQkJICAgIDAsCi0J CQkJICAgIFBST0NfVEhSRUFEX0FUVFJJQlVURV9IQU5ETEVfTElTVCwKLQkJCQkgICAgaGFuZGxl c190b19pbmhlcml0LAotCQkJCSAgICBzaXplb2YgKGhhbmRsZXNfdG9faW5oZXJpdCksCi0JCQkJ ICAgIE5VTEwsIE5VTEwpKQotICAgICAgZ290byBjbGVhbnVwX2V2ZW50X2FuZF9waXBlczsKLSAg ICAvKiBDcmVhdGUgaGVscGVyIHByb2Nlc3MgKi8KLSAgICBXQ0hBUiBjbWRbTUFYX1BBVEhdOwot ICAgIHBhdGhfY29udiBoZWxwZXIgKCIvYmluL2N5Z3dpbi1jb25zb2xlLWhlbHBlci5leGUiKTsK LSAgICBzaXplX3QgbGVuID0gaGVscGVyLmdldF93aWRlX3dpbjMyX3BhdGhfbGVuICgpOwotICAg IGhlbHBlci5nZXRfd2lkZV93aW4zMl9wYXRoIChjbWQpOwotICAgIF9fc21hbGxfc3dwcmludGYg KGNtZCArIGxlbiwgTCIgJXAgJXAgJXAiLCBoZWxsbywgZ29vZGJ5ZSwgaHcpOwotICAgIHNpX2hl bHBlci5TdGFydHVwSW5mby5kd0ZsYWdzID0gU1RBUlRGX1VTRVNUREhBTkRMRVM7Ci0gICAgc2lf aGVscGVyLlN0YXJ0dXBJbmZvLmhTdGRJbnB1dCA9IE5VTEw7Ci0gICAgc2lfaGVscGVyLlN0YXJ0 dXBJbmZvLmhTdGRPdXRwdXQgPSBOVUxMOwotICAgIHNpX2hlbHBlci5TdGFydHVwSW5mby5oU3Rk RXJyb3IgPSBOVUxMOwotICAgIGlmICghQ3JlYXRlUHJvY2Vzc1cgKE5VTEwsIGNtZCwgJnNlY19u b25lLCAmc2VjX25vbmUsCi0JCQkgVFJVRSwgRVhURU5ERURfU1RBUlRVUElORk9fUFJFU0VOVCwK LQkJCSBOVUxMLCBOVUxMLCAmc2lfaGVscGVyLlN0YXJ0dXBJbmZvLCAmcGlfaGVscGVyKSkKLSAg ICAgIGdvdG8gY2xlYW51cF9ldmVudF9hbmRfcGlwZXM7Ci0gICAgZm9yICg7OykKLSAgICAgIHsK LSAgICAgICAgRFdPUkQgd2FpdF9yZXN1bHQgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0IChoZWxsbywg NTAwKTsKLQlpZiAod2FpdF9yZXN1bHQgPT0gV0FJVF9PQkpFQ1RfMCkKLQkgIGJyZWFrOwotCWlm ICh3YWl0X3Jlc3VsdCAhPSBXQUlUX1RJTUVPVVQpCi0JICBnb3RvIGNsZWFudXBfaGVscGVyX3By b2Nlc3M7Ci0JRFdPUkQgZXhpdF9jb2RlOwotCWlmICghR2V0RXhpdENvZGVQcm9jZXNzKHBpX2hl bHBlci5oUHJvY2VzcywgJmV4aXRfY29kZSkpCi0JICBnb3RvIGNsZWFudXBfaGVscGVyX3Byb2Nl c3M7Ci0JaWYgKGV4aXRfY29kZSA9PSBTVElMTF9BQ1RJVkUpCi0JICBjb250aW51ZTsKLQlpZiAo ZXhpdF9jb2RlICE9IDAgfHwKLQkgICAgV2FpdEZvclNpbmdsZU9iamVjdCAoaGVsbG8sIDUwMCkg IT0gV0FJVF9PQkpFQ1RfMCkKLQkgIGdvdG8gY2xlYW51cF9oZWxwZXJfcHJvY2VzczsKLQlicmVh azsKLSAgICAgIH0KLSAgICBDbG9zZUhhbmRsZSAoaGVsbG8pOwotICAgIENsb3NlSGFuZGxlIChw aV9oZWxwZXIuaFRocmVhZCk7Ci0gICAgLyogUmV0cmlldmUgcHNldWRvIGNvbnNvbGUgaGFuZGxl cyAqLwotICAgIERXT1JEIHJMZW47Ci0gICAgY2hhciBidWZbNjRdOwotICAgIGlmICghUmVhZEZp bGUgKGhyLCBidWYsIHNpemVvZiAoYnVmKSwgJnJMZW4sIE5VTEwpKQotICAgICAgZ290byBjbGVh bnVwX2hlbHBlcl9wcm9jZXNzOwotICAgIGJ1ZltyTGVuXSA9ICdcMCc7Ci0gICAgc3NjYW5mIChi dWYsICJTdGRIYW5kbGVzPSVwLCVwIiwgJmhwQ29uSW4sICZocENvbk91dCk7Ci0gICAgaWYgKCFE dXBsaWNhdGVIYW5kbGUgKHBpX2hlbHBlci5oUHJvY2VzcywgaHBDb25JbiwKLQkJCSAgR2V0Q3Vy cmVudFByb2Nlc3MgKCksICZocENvbkluLCAwLAotCQkJICBUUlVFLCBEVVBMSUNBVEVfU0FNRV9B Q0NFU1MpKQotICAgICAgZ290byBjbGVhbnVwX2hlbHBlcl9wcm9jZXNzOwotICAgIGlmICghRHVw bGljYXRlSGFuZGxlIChwaV9oZWxwZXIuaFByb2Nlc3MsIGhwQ29uT3V0LAotCQkJICBHZXRDdXJy ZW50UHJvY2VzcyAoKSwgJmhwQ29uT3V0LCAwLAotCQkJICBUUlVFLCBEVVBMSUNBVEVfU0FNRV9B Q0NFU1MpKQotICAgICAgZ290byBjbGVhbnVwX3Bjb25faW47Ci0gICAgQ2xvc2VIYW5kbGUgKGhy KTsKLSAgICBDbG9zZUhhbmRsZSAoaHcpOwotICAgIC8qIENsZWFuIHVwICovCi0gICAgRGVsZXRl UHJvY1RocmVhZEF0dHJpYnV0ZUxpc3QgKHNpX2hlbHBlci5scEF0dHJpYnV0ZUxpc3QpOwotICAg IEhlYXBGcmVlIChHZXRQcm9jZXNzSGVhcCAoKSwgMCwgc2lfaGVscGVyLmxwQXR0cmlidXRlTGlz dCk7Ci0gIH0KLSAgLyogU2V0dGluZyBpbmZvcm1hdGlvbiBvZiBzdHVmZnMgcmVnYXJkaW5nIHBz ZXVkbyBjb25zb2xlICovCi0gIGdldF90dHlwICgpLT5oX2hlbHBlcl9nb29kYnllID0gZ29vZGJ5 ZTsKLSAgZ2V0X3R0eXAgKCktPmhfaGVscGVyX3Byb2Nlc3MgPSBwaV9oZWxwZXIuaFByb2Nlc3M7 Ci0gIGdldF90dHlwICgpLT5oZWxwZXJfcHJvY2Vzc19pZCA9IHBpX2hlbHBlci5kd1Byb2Nlc3NJ ZDsKLSAgQ2xvc2VIYW5kbGUgKGZyb21fbWFzdGVyKTsKLSAgQ2xvc2VIYW5kbGUgKHRvX21hc3Rl cik7Ci0gIGZyb21fbWFzdGVyID0gaHBDb25JbjsKLSAgdG9fbWFzdGVyID0gaHBDb25PdXQ7Ci0g IFJlc2l6ZVBzZXVkb0NvbnNvbGUgKGdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xlLCBzaXpl KTsKLSAgcmV0dXJuIHRydWU7Ci0KLWNsZWFudXBfcGNvbl9pbjoKLSAgQ2xvc2VIYW5kbGUgKGhw Q29uSW4pOwotY2xlYW51cF9oZWxwZXJfcHJvY2VzczoKLSAgU2V0RXZlbnQgKGdvb2RieWUpOwot ICBXYWl0Rm9yU2luZ2xlT2JqZWN0IChwaV9oZWxwZXIuaFByb2Nlc3MsIElORklOSVRFKTsKLSAg Q2xvc2VIYW5kbGUgKHBpX2hlbHBlci5oUHJvY2Vzcyk7Ci0gIGdvdG8gc2tpcF9jbG9zZV9oZWxs bzsKLWNsZWFudXBfZXZlbnRfYW5kX3BpcGVzOgotICBDbG9zZUhhbmRsZSAoaGVsbG8pOwotc2tp cF9jbG9zZV9oZWxsbzoKLSAgQ2xvc2VIYW5kbGUgKGdvb2RieWUpOwotICBDbG9zZUhhbmRsZSAo aHIpOwotICBDbG9zZUhhbmRsZSAoaHcpOwotY2xlYW51cF9oZWFwOgotICBIZWFwRnJlZSAoR2V0 UHJvY2Vzc0hlYXAgKCksIDAsIHNpX2hlbHBlci5scEF0dHJpYnV0ZUxpc3QpOwotY2xlYW51cF9w c2V1ZG9fY29uc29sZToKLSAgewotICAgIEhQQ09OX0lOVEVSTkFMICpocCA9IChIUENPTl9JTlRF Uk5BTCAqKSBnZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZTsKLSAgICBIQU5ETEUgdG1wID0g aHAtPmhDb25Ib3N0UHJvY2VzczsKLSAgICBDbG9zZVBzZXVkb0NvbnNvbGUgKGdldF9wc2V1ZG9f Y29uc29sZSAoKSk7Ci0gICAgQ2xvc2VIYW5kbGUgKHRtcCk7Ci0gIH0KLWZhbGxiYWNrOgotICBD bG9zZUhhbmRsZSAoZnJvbV9tYXN0ZXIpOwotICBDbG9zZUhhbmRsZSAodG9fc2xhdmUpOwotICBm cm9tX21hc3RlciA9IGZyb21fbWFzdGVyX2N5ZzsKLSAgdG9fc2xhdmUgPSBOVUxMOwotICBnZXRf dHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZSA9IE5VTEw7Ci0gIHJldHVybiBmYWxzZTsKLX0KLQog Ym9vbAogZmhhbmRsZXJfcHR5X21hc3Rlcjo6c2V0dXAgKCkKIHsKQEAgLTM1OTMsMTEgKzIyNTks NiBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjpzZXR1cCAoKQogICBpZiAodW5pdCA8IDApCiAgICAg cmV0dXJuIGZhbHNlOwogCi0gIC8qIGZyb21fbWFzdGVyIHNob3VsZCBiZSB1c2VkIGZvciBwc2V1 ZG8gY29uc29sZS4KLSAgICAgSnVzdCBjb3B5IGZyb21fbWFzdGVyX2N5ZyBoZXJlIGZvciB0aGUg Y2FzZSB0aGF0Ci0gICAgIHBzZXVkbyBjb25zb2xlIGlzIG5vdCBhdmFpbGFibGUuICovCi0gIGZy b21fbWFzdGVyID0gZnJvbV9tYXN0ZXJfY3lnOwotCiAgIFByb3RlY3RIYW5kbGUxIChnZXRfb3V0 cHV0X2hhbmRsZSAoKSwgdG9fcHR5KTsKIAogICB0dHkmIHQgPSAqY3lnd2luX3NoYXJlZC0+dHR5 W3VuaXRdOwpAQCAtMzY5NiwxNSArMjM1NywyMSBAQCBmaGFuZGxlcl9wdHlfbWFzdGVyOjpzZXR1 cCAoKQogICAgICAgZ290byBlcnI7CiAgICAgfQogCi0gIHQud2luc2l6ZS53c19jb2wgPSA4MDsK LSAgdC53aW5zaXplLndzX3JvdyA9IDI1OwotCi0gIHNldHVwX3BzZXVkb2NvbnNvbGUgKCk7Cisg IF9fc21hbGxfc3ByaW50ZiAocGlwZW5hbWUsICJwdHklZC10by1zbGF2ZSIsIHVuaXQpOworICBy ZXMgPSBmaGFuZGxlcl9waXBlOjpjcmVhdGUgKCZzZWNfbm9uZSwgJmZyb21fbWFzdGVyLCAmdG9f c2xhdmUsCisJCQkgICAgICAgZmhhbmRsZXJfcHR5X2NvbW1vbjo6cGlwZXNpemUsIHBpcGVuYW1l LCAwKTsKKyAgaWYgKHJlcykKKyAgICB7CisgICAgICBlcnJzdHIgPSAiaW5wdXQgcGlwZSI7Cisg ICAgICBnb3RvIGVycjsKKyAgICB9CiAKICAgdC5zZXRfZnJvbV9tYXN0ZXIgKGZyb21fbWFzdGVy KTsKICAgdC5zZXRfZnJvbV9tYXN0ZXJfY3lnIChmcm9tX21hc3Rlcl9jeWcpOwogICB0LnNldF90 b19tYXN0ZXIgKHRvX21hc3Rlcik7CiAgIHQuc2V0X3RvX21hc3Rlcl9jeWcgKHRvX21hc3Rlcl9j eWcpOworICB0LndpbnNpemUud3NfY29sID0gODA7CisgIHQud2luc2l6ZS53c19yb3cgPSAyNTsK ICAgdC5tYXN0ZXJfcGlkID0gbXlzZWxmLT5waWQ7CiAKICAgZGV2ICgpLnBhcnNlIChERVZfUFRZ TV9NQUpPUiwgdW5pdCk7CkBAIC0zNzE3LDYgKzIzODQsNyBAQCBmaGFuZGxlcl9wdHlfbWFzdGVy OjpzZXR1cCAoKQogZXJyOgogICBfX3NldGVycm5vICgpOwogICBjbG9zZV9tYXliZSAoZnJvbV9z bGF2ZSk7CisgIGNsb3NlX21heWJlICh0b19zbGF2ZSk7CiAgIGNsb3NlX21heWJlIChnZXRfaGFu ZGxlICgpKTsKICAgY2xvc2VfbWF5YmUgKGdldF9vdXRwdXRfaGFuZGxlICgpKTsKICAgY2xvc2Vf bWF5YmUgKGlucHV0X2F2YWlsYWJsZV9ldmVudCk7CkBAIC0zNzc2LDkgKzI0NDQsNiBAQCBmaGFu ZGxlcl9wdHlfY29tbW9uOjpwcm9jZXNzX29wb3N0X291dHB1dCAoSEFORExFIGgsIGNvbnN0IHZv aWQgKnB0ciwgc3NpemVfdCYgbAogewogICBzc2l6ZV90IHRvd3JpdGUgPSBsZW47CiAgIEJPT0wg cmVzID0gVFJVRTsKLSAgQk9PTCAoV0lOQVBJICpXcml0ZUZ1bmMpCi0gICAgKEhBTkRMRSwgTFBD Vk9JRCwgRFdPUkQsIExQRFdPUkQsIExQT1ZFUkxBUFBFRCk7Ci0gIFdyaXRlRnVuYyA9IFdyaXRl RmlsZV9PcmlnID8gV3JpdGVGaWxlX09yaWcgOiBXcml0ZUZpbGU7CiAgIHdoaWxlICh0b3dyaXRl KQogICAgIHsKICAgICAgIGlmICghaXNfZWNobykKQEAgLTM4MDEsNyArMjQ2Niw3IEBAIGZoYW5k bGVyX3B0eV9jb21tb246OnByb2Nlc3Nfb3Bvc3Rfb3V0cHV0IChIQU5ETEUgaCwgY29uc3Qgdm9p ZCAqcHRyLCBzc2l6ZV90JiBsCiAgICAgICBpZiAoIShnZXRfdHR5cCAoKS0+dGkuY19vZmxhZyAm IE9QT1NUKSkJLy8gcmF3IG91dHB1dCBtb2RlCiAJewogCSAgRFdPUkQgbiA9IE1JTiAoT1VUX0JV RkZFUl9TSVpFLCB0b3dyaXRlKTsKLQkgIHJlcyA9IFdyaXRlRnVuYyAoaCwgcHRyLCBuLCAmbiwg TlVMTCk7CisJICByZXMgPSBXcml0ZUZpbGUgKGgsIHB0ciwgbiwgJm4sIE5VTEwpOwogCSAgaWYg KCFyZXMpCiAJICAgIGJyZWFrOwogCSAgcHRyID0gKGNoYXIgKikgcHRyICsgbjsKQEAgLTM4NTEs NyArMjUxNiw3IEBAIGZoYW5kbGVyX3B0eV9jb21tb246OnByb2Nlc3Nfb3Bvc3Rfb3V0cHV0IChI QU5ETEUgaCwgY29uc3Qgdm9pZCAqcHRyLCBzc2l6ZV90JiBsCiAJCSAgYnJlYWs7CiAJCX0KIAkg ICAgfQotCSAgcmVzID0gV3JpdGVGdW5jIChoLCBvdXRidWYsIG4sICZuLCBOVUxMKTsKKwkgIHJl cyA9IFdyaXRlRmlsZSAoaCwgb3V0YnVmLCBuLCAmbiwgTlVMTCk7CiAJICBpZiAoIXJlcykKIAkg ICAgYnJlYWs7CiAJICBwdHIgPSAoY2hhciAqKSBwdHIgKyByYzsKQEAgLTM4NjEsMyArMjUyNiwx MzQgQEAgZmhhbmRsZXJfcHR5X2NvbW1vbjo6cHJvY2Vzc19vcG9zdF9vdXRwdXQgKEhBTkRMRSBo LCBjb25zdCB2b2lkICpwdHIsIHNzaXplX3QmIGwKICAgbGVuIC09IHRvd3JpdGU7CiAgIHJldHVy biByZXM7CiB9CisKK2Jvb2wKK2ZoYW5kbGVyX3B0eV9zbGF2ZTo6c2V0dXBfcHNldWRvY29uc29s ZSAoU1RBUlRVUElORk9FWFcgKnNpLCBib29sIG5vcGNvbikKK3sKKworICAvKiBTZXR0aW5nIHN3 aXRjaF90b19wY29uX2luIGlzIG5lY2Vzc2FyeSBldmVuIGlmCisgICAgIHBzZXVkbyBjb25zb2xl IHdpbGwgbm90IGJlIGFjdGl2YXRlZC4gKi8KKyAgZmhhbmRsZXJfYmFzZSAqZmggPSA6OmN5Z2hl YXAtPmZkdGFiWzBdOworICBpZiAoZmggJiYgZmgtPmdldF9tYWpvciAoKSA9PSBERVZfUFRZU19N QUpPUikKKyAgICB7CisgICAgICBmaGFuZGxlcl9wdHlfc2xhdmUgKnB0eXMgPSAoZmhhbmRsZXJf cHR5X3NsYXZlICopIGZoOworICAgICAgcHR5cy0+Z2V0X3R0eXAgKCktPnN3aXRjaF90b19wY29u X2luID0gdHJ1ZTsKKyAgICAgIGlmIChwdHlzLT5nZXRfdHR5cCAoKS0+cGNvbl9waWQgPT0gMAor CSAgfHwgIXBpbmZvIChwdHlzLT5nZXRfdHR5cCAoKS0+cGNvbl9waWQpKQorCXB0eXMtPmdldF90 dHlwICgpLT5wY29uX3BpZCA9IG15c2VsZi0+cGlkOworICAgIH0KKworICBpZiAobm9wY29uKQor ICAgIHJldHVybiBmYWxzZTsKKyAgaWYgKGdldF90dHlwICgpLT5wY29uX3BpZCAmJiBnZXRfdHR5 cCAoKS0+cGNvbl9waWQgIT0gbXlzZWxmLT5waWQKKyAgICAgICYmICEhcGluZm8gKGdldF90dHlw ICgpLT5wY29uX3BpZCkpCisgICAgcmV0dXJuIGZhbHNlOworICBpZiAoZGlzYWJsZV9wY29uKQor ICAgIHJldHVybiBmYWxzZTsKKyAgLyogSWYgdGhlIGxlZ2FjeSBjb25zb2xlIG1vZGUgaXMgZW5h YmxlZCwgcHNldWRvIGNvbnNvbGUgc2VlbXMKKyAgICAgbm90IHRvIHdvcmsgYXMgZXhwZWN0ZWQu IFRvIGRldGVybWluZSBjb25zb2xlIG1vZGUsIHJlZ2lzdHJ5CisgICAgIGtleSBGb3JjZVYyIGlu IEhLRVlfQ1VSUkVOVF9VU0VSXENvbnNvbGUgaXMgY2hlY2tlZC4gKi8KKyAgcmVnX2tleSByZWcg KEhLRVlfQ1VSUkVOVF9VU0VSLCBLRVlfUkVBRCwgTCJDb25zb2xlIiwgTlVMTCk7CisgIGlmIChy ZWcuZXJyb3IgKCkpCisgICAgcmV0dXJuIGZhbHNlOworICBpZiAocmVnLmdldF9kd29yZCAoTCJG b3JjZVYyIiwgMSkgPT0gMCkKKyAgICB7CisgICAgICB0ZXJtaW9zX3ByaW50ZiAoIlBzZXVkbyBj b25zb2xlIGlzIGRpc2FibGVkICIKKwkJICAgICAgImJlY2F1c2UgdGhlIGxlZ2FjeSBjb25zb2xl IG1vZGUgaXMgZW5hYmxlZC4iKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgQ09P UkQgc2l6ZSA9IHsKKyAgICAoU0hPUlQpIGdldF90dHlwICgpLT53aW5zaXplLndzX2NvbCwKKyAg ICAoU0hPUlQpIGdldF90dHlwICgpLT53aW5zaXplLndzX3JvdworICB9OworICBjb25zdCBEV09S RCBpbmhlcml0X2N1cnNvciA9IDE7CisgIFNldExhc3RFcnJvciAoRVJST1JfU1VDQ0VTUyk7Cisg IEhSRVNVTFQgcmVzID0gQ3JlYXRlUHNldWRvQ29uc29sZSAoc2l6ZSwgZ2V0X2hhbmRsZSAoKSwg Z2V0X291dHB1dF9oYW5kbGUgKCksCisJCQkJICAgICBpbmhlcml0X2N1cnNvciwKKwkJCQkgICAg ICZnZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZSk7CisgIGlmIChyZXMgIT0gU19PSyB8fCBH ZXRMYXN0RXJyb3IgKCkgPT0gRVJST1JfUFJPQ19OT1RfRk9VTkQpCisgICAgeworICAgICAgaWYg KHJlcyAhPSBTX09LKQorCXN5c3RlbV9wcmludGYgKCJDcmVhdGVQc2V1ZG9Db25zb2xlKCkgZmFp bGVkLiAlMDh4ICUwOHhcbiIsCisJCSAgICAgICBHZXRMYXN0RXJyb3IgKCksIHJlcyk7CisgICAg ICBnb3RvIGZhbGxiYWNrOworICAgIH0KKworICBTSVpFX1QgYnl0ZXNSZXF1aXJlZDsKKyAgSW5p dGlhbGl6ZVByb2NUaHJlYWRBdHRyaWJ1dGVMaXN0IChOVUxMLCAxLCAwLCAmYnl0ZXNSZXF1aXJl ZCk7CisgIFplcm9NZW1vcnkgKHNpLCBzaXplb2YgKCpzaSkpOworICBzaS0+U3RhcnR1cEluZm8u Y2IgPSBzaXplb2YgKFNUQVJUVVBJTkZPRVhXKTsKKyAgc2ktPmxwQXR0cmlidXRlTGlzdCA9IChQ UFJPQ19USFJFQURfQVRUUklCVVRFX0xJU1QpCisgICAgSGVhcEFsbG9jIChHZXRQcm9jZXNzSGVh cCAoKSwgMCwgYnl0ZXNSZXF1aXJlZCk7CisgIGlmIChzaS0+bHBBdHRyaWJ1dGVMaXN0ID09IE5V TEwpCisgICAgZ290byBjbGVhbnVwX3BzZXVkb19jb25zb2xlOworICBpZiAoIUluaXRpYWxpemVQ cm9jVGhyZWFkQXR0cmlidXRlTGlzdCAoc2ktPmxwQXR0cmlidXRlTGlzdCwKKwkJCQkJICAxLCAw LCAmYnl0ZXNSZXF1aXJlZCkpCisgICAgZ290byBjbGVhbnVwX2hlYXA7CisgIGlmICghVXBkYXRl UHJvY1RocmVhZEF0dHJpYnV0ZSAoc2ktPmxwQXR0cmlidXRlTGlzdCwKKwkJCQkgIDAsCisJCQkJ ICBQUk9DX1RIUkVBRF9BVFRSSUJVVEVfUFNFVURPQ09OU09MRSwKKwkJCQkgIGdldF90dHlwICgp LT5oX3BzZXVkb19jb25zb2xlLAorCQkJCSAgc2l6ZW9mIChnZXRfdHR5cCAoKS0+aF9wc2V1ZG9f Y29uc29sZSksCisJCQkJICBOVUxMLCBOVUxMKSkKKyAgICBnb3RvIGNsZWFudXBfaGVhcDsKKyAg c2ktPlN0YXJ0dXBJbmZvLmR3RmxhZ3MgPSBTVEFSVEZfVVNFU1RESEFORExFUzsKKyAgc2ktPlN0 YXJ0dXBJbmZvLmhTdGRJbnB1dCA9IE5VTEw7CisgIHNpLT5TdGFydHVwSW5mby5oU3RkT3V0cHV0 ID0gTlVMTDsKKyAgc2ktPlN0YXJ0dXBJbmZvLmhTdGRFcnJvciA9IE5VTEw7CisKKyAgeworICAg IGZoYW5kbGVyX2Jhc2UgKmZoMCA9IDo6Y3lnaGVhcC0+ZmR0YWJbMF07CisgICAgaWYgKGZoMCAm JiBmaDAtPmdldF9kZXZpY2UgKCkgIT0gZ2V0X2RldmljZSAoKSkKKyAgICAgIHNpLT5TdGFydHVw SW5mby5oU3RkSW5wdXQgPSBmaDAtPmdldF9oYW5kbGUgKCk7CisgICAgZmhhbmRsZXJfYmFzZSAq ZmgxID0gOjpjeWdoZWFwLT5mZHRhYlsxXTsKKyAgICBpZiAoZmgxICYmIGZoMS0+Z2V0X2Rldmlj ZSAoKSAhPSBnZXRfZGV2aWNlICgpKQorICAgICAgc2ktPlN0YXJ0dXBJbmZvLmhTdGRPdXRwdXQg PSBmaDEtPmdldF9vdXRwdXRfaGFuZGxlICgpOworICAgIGZoYW5kbGVyX2Jhc2UgKmZoMiA9IDo6 Y3lnaGVhcC0+ZmR0YWJbMl07CisgICAgaWYgKGZoMiAmJiBmaDItPmdldF9kZXZpY2UgKCkgIT0g Z2V0X2RldmljZSAoKSkKKyAgICAgIHNpLT5TdGFydHVwSW5mby5oU3RkRXJyb3IgPSBmaDItPmdl dF9vdXRwdXRfaGFuZGxlICgpOworICB9CisKKyAgaWYgKGdldF90dHlwICgpLT5wY29uX3BpZCA9 PSAwIHx8ICFwaW5mbyAoZ2V0X3R0eXAgKCktPnBjb25fcGlkKSkKKyAgICBnZXRfdHR5cCAoKS0+ cGNvbl9waWQgPSBteXNlbGYtPnBpZDsKKworICBpZiAoZ2V0X3R0eXAgKCktPmhfcHNldWRvX2Nv bnNvbGUgJiYgZ2V0X3R0eXAgKCktPnBjb25fcGlkID09IG15c2VsZi0+cGlkKQorICAgIHsKKyAg ICAgIEhQQ09OX0lOVEVSTkFMICpocCA9IChIUENPTl9JTlRFUk5BTCAqKSBnZXRfdHR5cCAoKS0+ aF9wc2V1ZG9fY29uc29sZTsKKyAgICAgIGdldF90dHlwICgpLT5oX3Bjb25fd3JpdGVfcGlwZSA9 IGhwLT5oV3JpdGVQaXBlOworICAgIH0KKyAgZ2V0X3R0eXAgKCktPnBjb25fc3RhcnQgPSB0cnVl OworICByZXR1cm4gdHJ1ZTsKKworY2xlYW51cF9oZWFwOgorICBIZWFwRnJlZSAoR2V0UHJvY2Vz c0hlYXAgKCksIDAsIHNpLT5scEF0dHJpYnV0ZUxpc3QpOworY2xlYW51cF9wc2V1ZG9fY29uc29s ZToKKyAgaWYgKGdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xlKQorICAgIHsKKyAgICAgIEhQ Q09OX0lOVEVSTkFMICpocCA9IChIUENPTl9JTlRFUk5BTCAqKSBnZXRfdHR5cCAoKS0+aF9wc2V1 ZG9fY29uc29sZTsKKyAgICAgIEhBTkRMRSB0bXAgPSBocC0+aENvbkhvc3RQcm9jZXNzOworICAg ICAgQ2xvc2VQc2V1ZG9Db25zb2xlIChnZXRfdHR5cCAoKS0+aF9wc2V1ZG9fY29uc29sZSk7Cisg ICAgICBDbG9zZUhhbmRsZSAodG1wKTsKKyAgICB9CitmYWxsYmFjazoKKyAgZ2V0X3R0eXAgKCkt PmhfcHNldWRvX2NvbnNvbGUgPSBOVUxMOworICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQKK2Zo YW5kbGVyX3B0eV9zbGF2ZTo6Y2xvc2VfcHNldWRvY29uc29sZSAodm9pZCkKK3sKKyAgaWYgKGdl dF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xlKQorICAgIHsKKyAgICAgIGdldF90dHlwICgpLT53 YWl0X3Bjb25fZndkICgpOworICAgICAgSFBDT05fSU5URVJOQUwgKmhwID0gKEhQQ09OX0lOVEVS TkFMICopIGdldF90dHlwICgpLT5oX3BzZXVkb19jb25zb2xlOworICAgICAgSEFORExFIHRtcCA9 IGhwLT5oQ29uSG9zdFByb2Nlc3M7CisgICAgICBDbG9zZVBzZXVkb0NvbnNvbGUgKGdldF90dHlw ICgpLT5oX3BzZXVkb19jb25zb2xlKTsKKyAgICAgIENsb3NlSGFuZGxlICh0bXApOworICAgICAg Z2V0X3R0eXAgKCktPmhfcHNldWRvX2NvbnNvbGUgPSBOVUxMOworICAgICAgZ2V0X3R0eXAgKCkt PnN3aXRjaF90b19wY29uX2luID0gZmFsc2U7CisgICAgICBnZXRfdHR5cCAoKS0+cGNvbl9waWQg PSAwOworICAgICAgZ2V0X3R0eXAgKCktPnBjb25fc3RhcnQgPSBmYWxzZTsKKyAgICB9Cit9CmRp ZmYgLS1naXQgYS93aW5zdXAvY3lnd2luL2ZvcmsuY2MgYi93aW5zdXAvY3lnd2luL2ZvcmsuY2MK aW5kZXggN2MwN2IwNjJlLi4zODE3MmNhMWUgMTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3aW4vZm9y ay5jYworKysgYi93aW5zdXAvY3lnd2luL2ZvcmsuY2MKQEAgLTEzNCwzNiArMTM0LDYgQEAgY2hp bGRfaW5mbzo6cHJlZm9yayAoYm9vbCBkZXRhY2hlZCkKIGludCBfX3N0ZGNhbGwKIGZyb2s6OmNo aWxkICh2b2xhdGlsZSBjaGFyICogdm9sYXRpbGUgaGVyZSkKIHsKLSAgY3lnaGVhcF9mZGVudW0g Y2ZkIChmYWxzZSk7Ci0gIHdoaWxlIChjZmQubmV4dCAoKSA+PSAwKQotICAgIGlmIChjZmQtPmdl dF9tYWpvciAoKSA9PSBERVZfUFRZTV9NQUpPUikKLSAgICAgIHsKLQlmaGFuZGxlcl9iYXNlICpm aCA9IGNmZDsKLQlmaGFuZGxlcl9wdHlfbWFzdGVyICpwdHltID0gKGZoYW5kbGVyX3B0eV9tYXN0 ZXIgKikgZmg7Ci0JaWYgKHB0eW0tPmdldF9wc2V1ZG9fY29uc29sZSAoKSkKLQkgIHsKLQkgICAg ZGVidWdfcHJpbnRmICgiZm91bmQgYSBQVFkgbWFzdGVyICVkOiBoZWxwZXJfUElEPSVkIiwKLQkJ CSAgcHR5bS0+Z2V0X21pbm9yICgpLCBwdHltLT5nZXRfaGVscGVyX3Byb2Nlc3NfaWQgKCkpOwot CSAgICBpZiAoZmhhbmRsZXJfY29uc29sZTo6Z2V0X2NvbnNvbGVfcHJvY2Vzc19pZCAoCi0JCQkJ cHR5bS0+Z2V0X2hlbHBlcl9wcm9jZXNzX2lkICgpLCB0cnVlKSkKLQkgICAgICAvKiBBbHJlYWR5 IGF0dGFjaGVkICovCi0JICAgICAgYnJlYWs7Ci0JICAgIGVsc2UKLQkgICAgICB7Ci0JCWlmIChw dHltLT5hdHRhY2hfcGNvbl9pbl9mb3JrICgpKQotCQkgIHsKLQkJICAgIEZyZWVDb25zb2xlICgp OwotCQkgICAgaWYgKCFBdHRhY2hDb25zb2xlIChwdHltLT5nZXRfaGVscGVyX3Byb2Nlc3NfaWQg KCkpKQotCQkgICAgICAvKiBFcnJvciAqLzsKLQkJICAgIGVsc2UKLQkJICAgICAgYnJlYWs7Ci0J CSAgfQotCSAgICAgIH0KLQkgIH0KLSAgICAgIH0KLSAgZXh0ZXJuIHZvaWQgY2xlYXJfcGNvbl9h dHRhY2hlZF90byAodm9pZCk7IC8qIGZoYW5kbGVyX3R0eS5jYyAqLwotICBjbGVhcl9wY29uX2F0 dGFjaGVkX3RvICgpOwotCiAgIEhBTkRMRSYgaFBhcmVudCA9IGNoLnBhcmVudDsKIAogICBzeW5j X3dpdGhfcGFyZW50ICgiYWZ0ZXIgbG9uZ2ptcCIsIHRydWUpOwpkaWZmIC0tZ2l0IGEvd2luc3Vw L2N5Z3dpbi9zZWxlY3QuY2MgYi93aW5zdXAvY3lnd2luL3NlbGVjdC5jYwppbmRleCA0YThmM2Iy ZWMuLjlmMWE4YTU3YSAxMDA2NDQKLS0tIGEvd2luc3VwL2N5Z3dpbi9zZWxlY3QuY2MKKysrIGIv d2luc3VwL2N5Z3dpbi9zZWxlY3QuY2MKQEAgLTEyMTUsOCArMTIxNSw3IEBAIHZlcmlmeV90dHlf c2xhdmUgKHNlbGVjdF9yZWNvcmQgKm1lLCBmZF9zZXQgKnJlYWRmZHMsIGZkX3NldCAqd3JpdGVm ZHMsCiAJICAgZmRfc2V0ICpleGNlcHRmZHMpCiB7CiAgIGZoYW5kbGVyX3B0eV9zbGF2ZSAqcHR5 cyA9IChmaGFuZGxlcl9wdHlfc2xhdmUgKikgbWUtPmZoOwotICBpZiAobWUtPnJlYWRfc2VsZWN0 ZWQgJiYgIXB0eXMtPnRvX2JlX3JlYWRfZnJvbV9wY29uICgpICYmCi0gICAgICBJc0V2ZW50U2ln bmFsbGVkIChwdHlzLT5pbnB1dF9hdmFpbGFibGVfZXZlbnQpKQorICBpZiAobWUtPnJlYWRfc2Vs ZWN0ZWQgJiYgSXNFdmVudFNpZ25hbGxlZCAocHR5cy0+aW5wdXRfYXZhaWxhYmxlX2V2ZW50KSkK ICAgICBtZS0+cmVhZF9yZWFkeSA9IHRydWU7CiAgIHJldHVybiBzZXRfYml0cyAobWUsIHJlYWRm ZHMsIHdyaXRlZmRzLCBleGNlcHRmZHMpOwogfQpAQCAtMTIyOSw4ICsxMjI4LDYgQEAgcGVla19w dHlfc2xhdmUgKHNlbGVjdF9yZWNvcmQgKnMsIGJvb2wgZnJvbV9zZWxlY3QpCiAgIGZoYW5kbGVy X3B0eV9zbGF2ZSAqcHR5cyA9IChmaGFuZGxlcl9wdHlfc2xhdmUgKikgZmg7CiAKICAgcHR5cy0+ cmVzZXRfc3dpdGNoX3RvX3Bjb24gKCk7Ci0gIGlmIChwdHlzLT50b19iZV9yZWFkX2Zyb21fcGNv biAoKSkKLSAgICBwdHlzLT51cGRhdGVfcGNvbl9pbnB1dF9zdGF0ZSAodHJ1ZSk7CiAKICAgaWYg KHMtPnJlYWRfc2VsZWN0ZWQpCiAgICAgewpkaWZmIC0tZ2l0IGEvd2luc3VwL2N5Z3dpbi9zbWFs bHByaW50LmNjIGIvd2luc3VwL2N5Z3dpbi9zbWFsbHByaW50LmNjCmluZGV4IDljZmI0MTk4Ny4u NGExNGVlM2NmIDEwMDY0NAotLS0gYS93aW5zdXAvY3lnd2luL3NtYWxscHJpbnQuY2MKKysrIGIv d2luc3VwL2N5Z3dpbi9zbWFsbHByaW50LmNjCkBAIC00MDUsNyArNDA1LDYgQEAgc21hbGxfcHJp bnRmIChjb25zdCBjaGFyICpmbXQsIC4uLikKICAgY291bnQgPSBfX3NtYWxsX3ZzcHJpbnRmIChi dWYsIGZtdCwgYXApOwogICB2YV9lbmQgKGFwKTsKIAotICBzZXRfaXNoeWJyaWRfYW5kX3N3aXRj aF90b19wY29uIChHZXRTdGRIYW5kbGUgKFNURF9FUlJPUl9IQU5ETEUpKTsKICAgV3JpdGVGaWxl IChHZXRTdGRIYW5kbGUgKFNURF9FUlJPUl9IQU5ETEUpLCBidWYsIGNvdW50LCAmZG9uZSwgTlVM TCk7CiAgIEZsdXNoRmlsZUJ1ZmZlcnMgKEdldFN0ZEhhbmRsZSAoU1REX0VSUk9SX0hBTkRMRSkp OwogfQpAQCAtNDMyLDcgKzQzMSw2IEBAIGNvbnNvbGVfcHJpbnRmIChjb25zdCBjaGFyICpmbXQs IC4uLikKICAgY291bnQgPSBfX3NtYWxsX3ZzcHJpbnRmIChidWYsIGZtdCwgYXApOwogICB2YV9l bmQgKGFwKTsKIAotICBzZXRfaXNoeWJyaWRfYW5kX3N3aXRjaF90b19wY29uIChjb25zb2xlX2hh bmRsZSk7CiAgIFdyaXRlRmlsZSAoY29uc29sZV9oYW5kbGUsIGJ1ZiwgY291bnQsICZkb25lLCBO VUxMKTsKICAgRmx1c2hGaWxlQnVmZmVycyAoY29uc29sZV9oYW5kbGUpOwogfQpkaWZmIC0tZ2l0 IGEvd2luc3VwL2N5Z3dpbi9zcGF3bi5jYyBiL3dpbnN1cC9jeWd3aW4vc3Bhd24uY2MKaW5kZXgg ZTcwY2ViODZkLi5kMTJjZTdiMGEgMTAwNjQ0Ci0tLSBhL3dpbnN1cC9jeWd3aW4vc3Bhd24uY2MK KysrIGIvd2luc3VwL2N5Z3dpbi9zcGF3bi5jYwpAQCAtMTc3LDcgKzE3Nyw3IEBAIGZpbmRfZXhl YyAoY29uc3QgY2hhciAqbmFtZSwgcGF0aF9jb252JiBidWYsIGNvbnN0IGNoYXIgKnNlYXJjaCwK IC8qIFV0aWxpdHkgZm9yIGNoaWxkX2luZm9fc3Bhd246Ondvcmtlci4gICovCiAKIHN0YXRpYyBI QU5ETEUKLWhhbmRsZSAoaW50IGZkLCBib29sIHdyaXRpbmcsIGJvb2wgaXNjeWd3aW4pCitoYW5k bGUgKGludCBmZCwgYm9vbCB3cml0aW5nKQogewogICBIQU5ETEUgaDsKICAgY3lnaGVhcF9mZGdl dCBjZmQgKGZkKTsKQEAgLTE4OCwxNyArMTg4LDMwIEBAIGhhbmRsZSAoaW50IGZkLCBib29sIHdy aXRpbmcsIGJvb2wgaXNjeWd3aW4pCiAgICAgaCA9IElOVkFMSURfSEFORExFX1ZBTFVFOwogICBl bHNlIGlmICghd3JpdGluZykKICAgICBoID0gY2ZkLT5nZXRfaGFuZGxlICgpOwotICBlbHNlIGlm IChjZmQtPmdldF9tYWpvciAoKSA9PSBERVZfUFRZU19NQUpPUiAmJiBpc2N5Z3dpbikKLSAgICB7 Ci0gICAgICBmaGFuZGxlcl9wdHlfc2xhdmUgKnB0eXMgPSAoZmhhbmRsZXJfcHR5X3NsYXZlICop KGZoYW5kbGVyX2Jhc2UgKikgY2ZkOwotICAgICAgaCA9IHB0eXMtPmdldF9vdXRwdXRfaGFuZGxl X2N5ZyAoKTsKLSAgICB9CiAgIGVsc2UKICAgICBoID0gY2ZkLT5nZXRfb3V0cHV0X2hhbmRsZSAo KTsKIAogICByZXR1cm4gaDsKIH0KIAorc3RhdGljIGJvb2wKK2lzX2NvbnNvbGVfYXBwIChXQ0hB UiAqZmlsZW5hbWUpCit7CisgIEhBTkRMRSBoOworICBjb25zdCBpbnQgaWRfb2Zmc2V0ID0gOTI7 CisgIGggPSBDcmVhdGVGaWxlVyAoZmlsZW5hbWUsIEdFTkVSSUNfUkVBRCwgRklMRV9TSEFSRV9S RUFELAorCQkgIE5VTEwsIE9QRU5fRVhJU1RJTkcsIDAsIE5VTEwpOworICBjaGFyIGJ1ZlsxMDI0 XTsKKyAgRFdPUkQgbjsKKyAgUmVhZEZpbGUgKGgsIGJ1Ziwgc2l6ZW9mIChidWYpLCAmbiwgMCk7 CisgIENsb3NlSGFuZGxlIChoKTsKKyAgY2hhciAqcCA9IChjaGFyICopIG1lbW1lbSAoYnVmLCBu LCAiUEVcMFwwIiwgNCk7CisgIGlmIChwICYmIHAgKyBpZF9vZmZzZXQgPD0gYnVmICsgbikKKyAg ICByZXR1cm4gcFtpZF9vZmZzZXRdID09ICdcMDAzJzsgLyogMDI6IEdVSSwgMDM6IGNvbnNvbGUg Ki8KKyAgZWxzZQorICAgIHJldHVybiBmYWxzZTsKK30KKwogaW50CiBpc2NtZCAoY29uc3QgY2hh ciAqYXJndjAsIGNvbnN0IGNoYXIgKndoYXQpCiB7CkBAIC0yNjYsOCArMjc5LDYgQEAgY2hpbGRf aW5mb19zcGF3bjo6d29ya2VyIChjb25zdCBjaGFyICpwcm9nX2FyZywgY29uc3QgY2hhciAqY29u c3QgKmFyZ3YsCiB7CiAgIGJvb2wgcmM7CiAgIGludCByZXMgPSAtMTsKLSAgRFdPUkQgcGlkX3Jl c3RvcmUgPSAwOwotICBib29sIGF0dGFjaF90b19jb25zb2xlID0gZmFsc2U7CiAgIHBpZF90IGN0 dHlfcGdpZCA9IDA7CiAKICAgLyogU2VhcmNoIGZvciBDVFRZIGFuZCByZXRyaWV2ZSBpdHMgUEdJ RCAqLwpAQCAtNTg3LDkgKzU5OCw3IEBAIGNoaWxkX2luZm9fc3Bhd246OndvcmtlciAoY29uc3Qg Y2hhciAqcHJvZ19hcmcsIGNvbnN0IGNoYXIgKmNvbnN0ICphcmd2LAogCQkJIFBST0NFU1NfUVVF UllfTElNSVRFRF9JTkZPUk1BVElPTikpCiAJc2EgPSAmc2VjX25vbmVfbmloOwogCi0gICAgICAv KiBBdHRhY2ggdG8gcHNldWRvIGNvbnNvbGUgaWYgcHR5IHNhbHZlIGlzIHVzZWQgKi8KLSAgICAg IHBpZF9yZXN0b3JlID0gZmhhbmRsZXJfY29uc29sZTo6Z2V0X2NvbnNvbGVfcHJvY2Vzc19pZAot CShHZXRDdXJyZW50UHJvY2Vzc0lkICgpLCBmYWxzZSk7CisgICAgICBmaGFuZGxlcl9wdHlfc2xh dmUgKnB0eXNfcHJpbWFyeSA9IE5VTEw7CiAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkg KyspCiAJewogCSAgY29uc3QgaW50IGNoa19vcmRlcltdID0gezEsIDAsIDJ9OwpAQCAtNTk4LDI5 ICs2MDcsMTEgQEAgY2hpbGRfaW5mb19zcGF3bjo6d29ya2VyIChjb25zdCBjaGFyICpwcm9nX2Fy ZywgY29uc3QgY2hhciAqY29uc3QgKmFyZ3YsCiAJICBpZiAoZmggJiYgZmgtPmdldF9tYWpvciAo KSA9PSBERVZfUFRZU19NQUpPUikKIAkgICAgewogCSAgICAgIGZoYW5kbGVyX3B0eV9zbGF2ZSAq cHR5cyA9IChmaGFuZGxlcl9wdHlfc2xhdmUgKikgZmg7Ci0JICAgICAgaWYgKHB0eXMtPmdldF9w c2V1ZG9fY29uc29sZSAoKSkKLQkJewotCQkgIERXT1JEIGhlbHBlcl9wcm9jZXNzX2lkID0gcHR5 cy0+Z2V0X2hlbHBlcl9wcm9jZXNzX2lkICgpOwotCQkgIGRlYnVnX3ByaW50ZiAoImZvdW5kIGEg UFRZIHNsYXZlICVkOiBoZWxwZXJfUElEPSVkIiwKLQkJCQkgICAgZmgtPmdldF9taW5vciAoKSwg aGVscGVyX3Byb2Nlc3NfaWQpOwotCQkgIGlmIChmaGFuZGxlcl9jb25zb2xlOjpnZXRfY29uc29s ZV9wcm9jZXNzX2lkCi0JCQkJCSAgICAgIChoZWxwZXJfcHJvY2Vzc19pZCwgdHJ1ZSkpCi0JCSAg ICAvKiBBbHJlYWR5IGF0dGFjaGVkICovCi0JCSAgICBhdHRhY2hfdG9fY29uc29sZSA9IHRydWU7 Ci0JCSAgZWxzZSBpZiAoIWF0dGFjaF90b19jb25zb2xlKQotCQkgICAgewotCQkgICAgICBGcmVl Q29uc29sZSAoKTsKLQkJICAgICAgaWYgKEF0dGFjaENvbnNvbGUgKGhlbHBlcl9wcm9jZXNzX2lk KSkKLQkJCWF0dGFjaF90b19jb25zb2xlID0gdHJ1ZTsKLQkJICAgIH0KLQkJICBwdHlzLT5maXh1 cF9hZnRlcl9hdHRhY2ggKCFpc2N5Z3dpbiAoKSwgZmQpOwotCQkgIGlmIChtb2RlID09IF9QX09W RVJMQVkpCi0JCSAgICBwdHlzLT5zZXRfZnJlZWNvbnNvbGVfb25fY2xvc2UgKGlzY3lnd2luICgp KTsKLQkJfQorCSAgICAgIGlmIChwdHlzX3ByaW1hcnkgPT0gTlVMTCkKKwkJcHR5c19wcmltYXJ5 ID0gcHR5czsKIAkgICAgfQogCSAgZWxzZSBpZiAoZmggJiYgZmgtPmdldF9tYWpvciAoKSA9PSBE RVZfQ09OU19NQUpPUikKIAkgICAgewotCSAgICAgIGF0dGFjaF90b19jb25zb2xlID0gdHJ1ZTsK IAkgICAgICBmaGFuZGxlcl9jb25zb2xlICpjb25zID0gKGZoYW5kbGVyX2NvbnNvbGUgKikgZmg7 CiAJICAgICAgaWYgKHdpbmNhcC5oYXNfY29uXzI0Yml0X2NvbG9ycyAoKSAmJiAhaXNjeWd3aW4g KCkpCiAJCWlmIChmZCA9PSAxIHx8IGZkID09IDIpCkBAIC02MzAsMTcgKzYyMSwyOCBAQCBjaGls ZF9pbmZvX3NwYXduOjp3b3JrZXIgKGNvbnN0IGNoYXIgKnByb2dfYXJnLCBjb25zdCBjaGFyICpj b25zdCAqYXJndiwKIAogICAgICAgLyogU2V0IHVwIG5lZWRlZCBoYW5kbGVzIGZvciBzdGRpbyAq LwogICAgICAgc2kuZHdGbGFncyA9IFNUQVJURl9VU0VTVERIQU5ETEVTOwotICAgICAgc2kuaFN0 ZElucHV0ID0gaGFuZGxlICgoaW5fX3N0ZGluIDwgMCA/IDAgOiBpbl9fc3RkaW4pLCBmYWxzZSwK LQkJCSAgICAgaXNjeWd3aW4gKCkpOwotICAgICAgc2kuaFN0ZE91dHB1dCA9IGhhbmRsZSAoKGlu X19zdGRvdXQgPCAwID8gMSA6IGluX19zdGRvdXQpLCB0cnVlLAotCQkJICAgICAgaXNjeWd3aW4g KCkpOwotICAgICAgc2kuaFN0ZEVycm9yID0gaGFuZGxlICgyLCB0cnVlLCBpc2N5Z3dpbiAoKSk7 CisgICAgICBzaS5oU3RkSW5wdXQgPSBoYW5kbGUgKChpbl9fc3RkaW4gPCAwID8gMCA6IGluX19z dGRpbiksIGZhbHNlKTsKKyAgICAgIHNpLmhTdGRPdXRwdXQgPSBoYW5kbGUgKChpbl9fc3Rkb3V0 IDwgMCA/IDEgOiBpbl9fc3Rkb3V0KSwgdHJ1ZSk7CisgICAgICBzaS5oU3RkRXJyb3IgPSBoYW5k bGUgKDIsIHRydWUpOwogCiAgICAgICBzaS5jYiA9IHNpemVvZiAoc2kpOwogCiAgICAgICBpZiAo IWlzY3lnd2luICgpKQogCWluaXRfY29uc29sZV9oYW5kbGVyIChteXNlbGYtPmN0dHkgPiAwKTsK IAorICAgICAgYm9vbCBlbmFibGVfcGNvbiA9IGZhbHNlOworICAgICAgU1RBUlRVUElORk9FWFcg c2lfcGNvbjsKKyAgICAgIFplcm9NZW1vcnkgKCZzaV9wY29uLCBzaXplb2YgKHNpX3Bjb24pKTsK KyAgICAgIFNUQVJUVVBJTkZPVyAqc2lfdG1wID0gJnNpOworICAgICAgaWYgKCFpc2N5Z3dpbiAo KSAmJiBwdHlzX3ByaW1hcnkgJiYgaXNfY29uc29sZV9hcHAgKHJ1bnBhdGgpKQorCWlmIChwdHlz X3ByaW1hcnktPnNldHVwX3BzZXVkb2NvbnNvbGUgKCZzaV9wY29uLAorCQkJICAgICBtb2RlICE9 IF9QX09WRVJMQVkgJiYgbW9kZSAhPSBfUF9XQUlUKSkKKwkgIHsKKwkgICAgY19mbGFncyB8PSBF WFRFTkRFRF9TVEFSVFVQSU5GT19QUkVTRU5UOworCSAgICBzaV90bXAgPSAmc2lfcGNvbi5TdGFy dHVwSW5mbzsKKwkgICAgZW5hYmxlX3Bjb24gPSB0cnVlOworCSAgfQorCiAgICAgbG9vcDoKICAg ICAgIC8qIFdoZW4gcnVpZCAhPSBldWlkIHdlIGNyZWF0ZSB0aGUgbmV3IHByb2Nlc3MgdW5kZXIg dGhlIGN1cnJlbnQgb3JpZ2luYWwKIAkgYWNjb3VudCBhbmQgaW1wZXJzb25hdGUgaW4gY2hpbGQs IHRoaXMgd2F5IG1haW50YWluaW5nIHRoZSBkaWZmZXJlbnQKQEAgLTY2OSw3ICs2NzEsNyBAQCBj aGlsZF9pbmZvX3NwYXduOjp3b3JrZXIgKGNvbnN0IGNoYXIgKnByb2dfYXJnLCBjb25zdCBjaGFy ICpjb25zdCAqYXJndiwKIAkJCSAgICAgICBjX2ZsYWdzLAogCQkJICAgICAgIGVudmJsb2NrLAkv KiBlbnZpcm9ubWVudCAqLwogCQkJICAgICAgIE5VTEwsCi0JCQkgICAgICAgJnNpLAorCQkJICAg ICAgIHNpX3RtcCwKIAkJCSAgICAgICAmcGkpOwogCX0KICAgICAgIGVsc2UKQEAgLTcyMyw3ICs3 MjUsNyBAQCBjaGlsZF9pbmZvX3NwYXduOjp3b3JrZXIgKGNvbnN0IGNoYXIgKnByb2dfYXJnLCBj b25zdCBjaGFyICpjb25zdCAqYXJndiwKIAkJCSAgICAgICBjX2ZsYWdzLAogCQkJICAgICAgIGVu dmJsb2NrLAkvKiBlbnZpcm9ubWVudCAqLwogCQkJICAgICAgIE5VTEwsCi0JCQkgICAgICAgJnNp LAorCQkJICAgICAgIHNpX3RtcCwKIAkJCSAgICAgICAmcGkpOwogCSAgaWYgKGh3c3QpCiAJICAg IHsKQEAgLTczNiw2ICs3MzgsMTEgQEAgY2hpbGRfaW5mb19zcGF3bjo6d29ya2VyIChjb25zdCBj aGFyICpwcm9nX2FyZywgY29uc3QgY2hhciAqY29uc3QgKmFyZ3YsCiAJICAgICAgQ2xvc2VEZXNr dG9wIChoZHNrKTsKIAkgICAgfQogCX0KKyAgICAgIGlmIChlbmFibGVfcGNvbikKKwl7CisJICBE ZWxldGVQcm9jVGhyZWFkQXR0cmlidXRlTGlzdCAoc2lfcGNvbi5scEF0dHJpYnV0ZUxpc3QpOwor CSAgSGVhcEZyZWUgKEdldFByb2Nlc3NIZWFwICgpLCAwLCBzaV9wY29uLmxwQXR0cmlidXRlTGlz dCk7CisJfQogCiAgICAgICBpZiAobW9kZSAhPSBfUF9PVkVSTEFZKQogCVNldEhhbmRsZUluZm9y bWF0aW9uIChteV93cl9wcm9jX3BpcGUsIEhBTkRMRV9GTEFHX0lOSEVSSVQsCkBAIC05MDgsNiAr OTE1LDExIEBAIGNoaWxkX2luZm9fc3Bhd246OndvcmtlciAoY29uc3QgY2hhciAqcHJvZ19hcmcs IGNvbnN0IGNoYXIgKmNvbnN0ICphcmd2LAogCSAgICB9CiAJICBpZiAoc2VtKQogCSAgICBfX3Bv c2l4X3NwYXduX3NlbV9yZWxlYXNlIChzZW0sIDApOworCSAgaWYgKGVuYWJsZV9wY29uKQorCSAg ICB7CisJICAgICAgV2FpdEZvclNpbmdsZU9iamVjdCAocGkuaFByb2Nlc3MsIElORklOSVRFKTsK KwkgICAgICBwdHlzX3ByaW1hcnktPmNsb3NlX3BzZXVkb2NvbnNvbGUgKCk7CisJICAgIH0KIAkg IG15c2VsZi5leGl0IChFWElUQ09ERV9OT1NFVCk7CiAJICBicmVhazsKIAljYXNlIF9QX1dBSVQ6 CkBAIC05MTUsNiArOTI3LDggQEAgY2hpbGRfaW5mb19zcGF3bjo6d29ya2VyIChjb25zdCBjaGFy ICpwcm9nX2FyZywgY29uc3QgY2hhciAqY29uc3QgKmFyZ3YsCiAJICBzeXN0ZW1fY2FsbC5hcm0g KCk7CiAJICBpZiAod2FpdHBpZCAoY3lncGlkLCAmcmVzLCAwKSAhPSBjeWdwaWQpCiAJICAgIHJl cyA9IC0xOworCSAgaWYgKGVuYWJsZV9wY29uKQorCSAgICBwdHlzX3ByaW1hcnktPmNsb3NlX3Bz ZXVkb2NvbnNvbGUgKCk7CiAJICBicmVhazsKIAljYXNlIF9QX0RFVEFDSDoKIAkgIHJlcyA9IDA7 CS8qIExvc3QgYWxsIG1lbW9yeSBvZiB0aGlzIGNoaWxkLiAqLwpAQCAtOTQxLDIxICs5NTUsNiBA QCBjaGlsZF9pbmZvX3NwYXduOjp3b3JrZXIgKGNvbnN0IGNoYXIgKnByb2dfYXJnLCBjb25zdCBj aGFyICpjb25zdCAqYXJndiwKICAgaWYgKGVudmJsb2NrKQogICAgIGZyZWUgKGVudmJsb2NrKTsK IAotICBpZiAoYXR0YWNoX3RvX2NvbnNvbGUgJiYgcGlkX3Jlc3RvcmUpCi0gICAgewotICAgICAg RnJlZUNvbnNvbGUgKCk7Ci0gICAgICBBdHRhY2hDb25zb2xlIChwaWRfcmVzdG9yZSk7Ci0gICAg ICBjeWdoZWFwX2ZkZW51bSBjZmQgKGZhbHNlKTsKLSAgICAgIGludCBmZDsKLSAgICAgIHdoaWxl ICgoZmQgPSBjZmQubmV4dCAoKSkgPj0gMCkKLQlpZiAoY2ZkLT5nZXRfbWFqb3IgKCkgPT0gREVW X1BUWVNfTUFKT1IpCi0JICB7Ci0JICAgIGZoYW5kbGVyX3B0eV9zbGF2ZSAqcHR5cyA9Ci0JICAg ICAgKGZoYW5kbGVyX3B0eV9zbGF2ZSAqKSAoZmhhbmRsZXJfYmFzZSAqKSBjZmQ7Ci0JICAgIHB0 eXMtPmZpeHVwX2FmdGVyX2F0dGFjaCAoZmFsc2UsIGZkKTsKLQkgIH0KLSAgICB9Ci0KICAgcmV0 dXJuIChpbnQpIHJlczsKIH0KIApkaWZmIC0tZ2l0IGEvd2luc3VwL2N5Z3dpbi9zdHJhY2UuY2Mg Yi93aW5zdXAvY3lnd2luL3N0cmFjZS5jYwppbmRleCBmMGFlZjNhMzYuLjM1ZjhhNTlhZSAxMDA2 NDQKLS0tIGEvd2luc3VwL2N5Z3dpbi9zdHJhY2UuY2MKKysrIGIvd2luc3VwL2N5Z3dpbi9zdHJh Y2UuY2MKQEAgLTI2NCw3ICsyNjQsNiBAQCBzdHJhY2U6OnZwcm50ZiAodW5zaWduZWQgY2F0ZWdv cnksIGNvbnN0IGNoYXIgKmZ1bmMsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcAogICBpZiAo Y2F0ZWdvcnkgJiBfU1RSQUNFX1NZU1RFTSkKICAgICB7CiAgICAgICBEV09SRCBkb25lOwotICAg ICAgc2V0X2lzaHlicmlkX2FuZF9zd2l0Y2hfdG9fcGNvbiAoR2V0U3RkSGFuZGxlIChTVERfRVJS T1JfSEFORExFKSk7CiAgICAgICBXcml0ZUZpbGUgKEdldFN0ZEhhbmRsZSAoU1REX0VSUk9SX0hB TkRMRSksIGJ1ZiwgbGVuLCAmZG9uZSwgMCk7CiAgICAgICBGbHVzaEZpbGVCdWZmZXJzIChHZXRT dGRIYW5kbGUgKFNURF9FUlJPUl9IQU5ETEUpKTsKICAgICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHRo ZSBtZXNzYWdlIHNob3dzIHVwIG9uIHRoZSBzY3JlZW4sIHRvbywgc2luY2UgdGhpcyBpcwpAQCAt Mjc2LDcgKzI3NSw2IEBAIHN0cmFjZTo6dnBybnRmICh1bnNpZ25lZCBjYXRlZ29yeSwgY29uc3Qg Y2hhciAqZnVuYywgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwCiAJCQkJICZzZWNfbm9uZSwg T1BFTl9FWElTVElORywgMCwgMCk7CiAJICBpZiAoaCAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkK IAkgICAgewotCSAgICAgIHNldF9pc2h5YnJpZF9hbmRfc3dpdGNoX3RvX3Bjb24gKGgpOwogCSAg ICAgIFdyaXRlRmlsZSAoaCwgYnVmLCBsZW4sICZkb25lLCAwKTsKIAkgICAgICBDbG9zZUhhbmRs ZSAoaCk7CiAJICAgIH0KZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4vdHR5LmNjIGIvd2luc3Vw L2N5Z3dpbi90dHkuY2MKaW5kZXggNGNiNjhmNzc2Li5kNjBmMjc1NDUgMTAwNjQ0Ci0tLSBhL3dp bnN1cC9jeWd3aW4vdHR5LmNjCisrKyBiL3dpbnN1cC9jeWd3aW4vdHR5LmNjCkBAIC0yMzQsMjAg KzIzNCwxNCBAQCB0dHk6OmluaXQgKCkKICAgd2FzX29wZW5lZCA9IGZhbHNlOwogICBtYXN0ZXJf cGlkID0gMDsKICAgaXNfY29uc29sZSA9IGZhbHNlOwotICBhdHRhY2hfcGNvbl9pbl9mb3JrID0g ZmFsc2U7Ci0gIGhfcHNldWRvX2NvbnNvbGUgPSBOVUxMOwogICBjb2x1bW4gPSAwOworICBoX3Bz ZXVkb19jb25zb2xlID0gTlVMTDsKICAgc3dpdGNoX3RvX3Bjb25faW4gPSBmYWxzZTsKLSAgc3dp dGNoX3RvX3Bjb25fb3V0ID0gZmFsc2U7Ci0gIHNjcmVlbl9hbHRlcm5hdGVkID0gZmFsc2U7CiAg IG1hc2tfc3dpdGNoX3RvX3Bjb25faW4gPSBmYWxzZTsKICAgcGNvbl9waWQgPSAwOwogICB0ZXJt X2NvZGVfcGFnZSA9IDA7Ci0gIG5lZWRfcmVkcmF3X3NjcmVlbiA9IHRydWU7CiAgIHBjb25fbGFz dF90aW1lID0gMDsKLSAgcGNvbl9pbl9lbXB0eSA9IHRydWU7Ci0gIHJlcV90cmFuc2Zlcl9pbnB1 dF90b19wY29uID0gZmFsc2U7Ci0gIHJlcV9mbHVzaF9wY29uX2lucHV0ID0gZmFsc2U7CisgIHBj b25fc3RhcnQgPSBmYWxzZTsKIH0KIAogSEFORExFCkBAIC0yOTMsMTYgKzI4Nyw2IEBAIHR0eV9t aW46OnR0eW5hbWUgKCkKICAgcmV0dXJuIGQubmFtZSAoKTsKIH0KIAotdm9pZAotdHR5OjpzZXRf c3dpdGNoX3RvX3Bjb25fb3V0IChib29sIHYpCi17Ci0gIGlmIChzd2l0Y2hfdG9fcGNvbl9vdXQg IT0gdikKLSAgICB7Ci0gICAgICB3YWl0X3Bjb25fZndkICgpOwotICAgICAgc3dpdGNoX3RvX3Bj b25fb3V0ID0gdjsKLSAgICB9Ci19Ci0KIHZvaWQKIHR0eTo6d2FpdF9wY29uX2Z3ZCAodm9pZCkK IHsKZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4vdHR5LmggYi93aW5zdXAvY3lnd2luL3R0eS5o CmluZGV4IDkyMGUzMmIxNi4uYzQ5MWQzODkxIDEwMDY0NAotLS0gYS93aW5zdXAvY3lnd2luL3R0 eS5oCisrKyBiL3dpbnN1cC9jeWd3aW4vdHR5LmgKQEAgLTk0LDIxICs5NCwxMyBAQCBwcml2YXRl OgogICBIQU5ETEUgX3RvX21hc3RlcjsKICAgSEFORExFIF90b19tYXN0ZXJfY3lnOwogICBIUENP TiBoX3BzZXVkb19jb25zb2xlOwotICBIQU5ETEUgaF9oZWxwZXJfcHJvY2VzczsKLSAgRFdPUkQg aGVscGVyX3Byb2Nlc3NfaWQ7Ci0gIEhBTkRMRSBoX2hlbHBlcl9nb29kYnllOwotICBib29sIGF0 dGFjaF9wY29uX2luX2Zvcms7CisgIGJvb2wgcGNvbl9zdGFydDsKICAgYm9vbCBzd2l0Y2hfdG9f cGNvbl9pbjsKLSAgYm9vbCBzd2l0Y2hfdG9fcGNvbl9vdXQ7Ci0gIGJvb2wgc2NyZWVuX2FsdGVy bmF0ZWQ7CiAgIGJvb2wgbWFza19zd2l0Y2hfdG9fcGNvbl9pbjsKICAgcGlkX3QgcGNvbl9waWQ7 CiAgIFVJTlQgdGVybV9jb2RlX3BhZ2U7Ci0gIGJvb2wgbmVlZF9yZWRyYXdfc2NyZWVuOwogICBE V09SRCBwY29uX2xhc3RfdGltZTsKLSAgYm9vbCBwY29uX2luX2VtcHR5OwotICBib29sIHJlcV90 cmFuc2Zlcl9pbnB1dF90b19wY29uOwotICBib29sIHJlcV9mbHVzaF9wY29uX2lucHV0OworICBI QU5ETEUgaF9wY29uX3dyaXRlX3BpcGU7CiAKIHB1YmxpYzoKICAgSEFORExFIGZyb21fbWFzdGVy ICgpIGNvbnN0IHsgcmV0dXJuIF9mcm9tX21hc3RlcjsgfQpAQCAtMTM4LDcgKzEzMCw2IEBAIHB1 YmxpYzoKICAgdm9pZCBzZXRfbWFzdGVyX2N0bF9jbG9zZWQgKCkge21hc3Rlcl9waWQgPSAtMTt9 CiAgIHN0YXRpYyB2b2lkIF9fc3RkY2FsbCBjcmVhdGVfbWFzdGVyIChpbnQpOwogICBzdGF0aWMg dm9pZCBfX3N0ZGNhbGwgaW5pdF9zZXNzaW9uICgpOwotICB2b2lkIHNldF9zd2l0Y2hfdG9fcGNv bl9vdXQgKGJvb2wgdik7CiAgIHZvaWQgd2FpdF9wY29uX2Z3ZCAodm9pZCk7CiAgIGZyaWVuZCBj bGFzcyBmaGFuZGxlcl9wdHlfY29tbW9uOwogICBmcmllbmQgY2xhc3MgZmhhbmRsZXJfcHR5X21h c3RlcjsKZGlmZiAtLWdpdCBhL3dpbnN1cC9jeWd3aW4vd2luc3VwLmggYi93aW5zdXAvY3lnd2lu L3dpbnN1cC5oCmluZGV4IDliZmExYTdhNi4uNzk4NDRjYjg3IDEwMDY0NAotLS0gYS93aW5zdXAv Y3lnd2luL3dpbnN1cC5oCisrKyBiL3dpbnN1cC9jeWd3aW4vd2luc3VwLmgKQEAgLTIyNCw5ICsy MjQsNiBAQCB2b2lkIGluaXRfY29uc29sZV9oYW5kbGVyIChib29sKTsKIAogZXh0ZXJuIGJvb2wg d3NvY2tfc3RhcnRlZDsKIAotLyogUFRZIHJlbGF0ZWQgKi8KLXZvaWQgc2V0X2lzaHlicmlkX2Fu ZF9zd2l0Y2hfdG9fcGNvbiAoSEFORExFIGgpOwotCiAvKiBQcmludGYgdHlwZSBmdW5jdGlvbnMg Ki8KIGV4dGVybiAiQyIgdm9pZCB2YXBpX2ZhdGFsIChjb25zdCBjaGFyICosIHZhX2xpc3QgYXAp IF9fYXR0cmlidXRlX18gKChub3JldHVybikpOwogZXh0ZXJuICJDIiB2b2lkIGFwaV9mYXRhbCAo Y29uc3QgY2hhciAqLCAuLi4pIF9fYXR0cmlidXRlX18gKChub3JldHVybikpOwotLSAKMi4yNy4w Cgo= --Multipart=_Thu__13_Aug_2020_18_58_13_+0900_Wz+rSN5UkgDSNHp9--