From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16727 invoked by alias); 26 Oct 2002 03:16:01 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 16654 invoked by uid 71); 26 Oct 2002 03:16:00 -0000 Date: Fri, 25 Oct 2002 20:16:00 -0000 Message-ID: <20021026031600.16647.qmail@sources.redhat.com> To: nobody@gcc.gnu.org Cc: gcc-prs@gcc.gnu.org, From: Davin McCall Subject: Re: other/8335: problems with __builtin_frame_address when -fomit-frame-pointer used Reply-To: Davin McCall X-SW-Source: 2002-10/txt/msg01062.txt.bz2 List-Id: The following reply was made to PR other/8335; it has been noted by GNATS. From: Davin McCall To: rth@gcc.gnu.org, davmac@ozonline.com.au, gcc-bugs@gcc.gnu.org, gcc-prs@gcc.gnu.org, nobody@gcc.gnu.org, gcc-gnats@gcc.gnu.org Cc: Subject: Re: other/8335: problems with __builtin_frame_address when -fomit-frame-pointer used Date: Sat, 26 Oct 2002 13:24:27 +0000 This is a multi-part message in MIME format. --Multipart_Sat__26_Oct_2002_13:24:27_+0000_081c8688 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Hi, > Describe "doesn't work correctly". By "doesn't work correctly" I mean: __builtin_frame_address seems to expect that the frame address is stored in the %ebp register. However, if -fomit-frame-pointer is used, this is clearly not true. In the attached files, see function "pthread_initialize". In particular in the generated assembly at ".L8:", which corresponds to the line referencing CURRENT_STACK_FRAME in the C source. CURRENT_STACK_FRAME is defined as "__builtin_frame_address(0)". In the assembly, I see "leal constant(%ebp),%edi" which is clearly wrong because it is using %ebp. Incidentally, in other source compiled with -fomit-frame-pointer I remember seeing that %ebp was being used more-or-less as a general purpose register - so using it as the frame address could be wildly inaccurate. > The result should be the address of the stack frame, with or > without a frame pointer. The frame is at a known offset from > the stack pointer, after all. Well in that case I guess that this really is a bug. best regards, Davin --Multipart_Sat__26_Oct_2002_13:24:27_+0000_081c8688 Content-Type: application/octet-stream; name="pthread.c" Content-Disposition: attachment; filename="pthread.c" Content-Transfer-Encoding: base64 Ci8qIExpbnV4dGhyZWFkcyAtIGEgc2ltcGxlIGNsb25lKCktYmFzZWQgaW1wbGVtZW50YXRpb24g b2YgUG9zaXggICAgICAgICovCi8qIHRocmVhZHMgZm9yIExpbnV4LiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi8qIENvcHlyaWdodCAoQykgMTk5 NiBYYXZpZXIgTGVyb3kgKFhhdmllci5MZXJveUBpbnJpYS5mcikgICAgICAgICAgICAgICovCi8q ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICovCi8qIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgICAgICAgICovCi8qIG1vZGlmeSBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICovCi8qIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAyICAgICAgICovCi8qIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICovCi8qICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi8qIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LCAgICAgICovCi8qIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICovCi8qIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICovCi8qIEdOVSBMaWJy YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAg ICAgICovCgovKiBUaHJlYWQgY3JlYXRpb24sIGluaXRpYWxpemF0aW9uLCBhbmQgYmFzaWMgbG93 LWxldmVsIHJvdXRpbmVzICovCgojaW5jbHVkZSA8ZXJybm8uaD4KI2luY2x1ZGUgPHN0ZGRlZi5o PgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RyaW5n Lmg+CiNpbmNsdWRlIDx1bmlzdGQuaD4KI2luY2x1ZGUgPGZjbnRsLmg+CiNpbmNsdWRlIDxzeXMv d2FpdC5oPgojaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CiNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+ CiNpbmNsdWRlIDxzaGxpYi1jb21wYXQuaD4KI2luY2x1ZGUgInB0aHJlYWQuaCIKI2luY2x1ZGUg ImludGVybmFscy5oIgojaW5jbHVkZSAic3BpbmxvY2suaCIKI2luY2x1ZGUgInJlc3RhcnQuaCIK Ci8qIFdlIG5lZWQgdGhlIGdsb2JhbC9zdGF0aWMgcmVzb2x2ZXIgc3RhdGUgaGVyZS4gICovCiNp bmNsdWRlIDxyZXNvbHYuaD4KI3VuZGVmIF9yZXMKCmV4dGVybiBzdHJ1Y3QgX19yZXNfc3RhdGUg X3JlczsKCi8qIFNhbml0eSBjaGVjay4gICovCiNpZiBfX0FTU1VNRV9SRUFMVElNRV9TSUdOQUxT ICYmICFkZWZpbmVkIF9fU0lHUlRNSU4KIyBlcnJvciAiVGhpcyBtdXN0IG5vdCBoYXBwZW47IG5l dyBrZXJuZWwgYXNzdW1lZCBidXQgb2xkIGhlYWRlcnMiCiNlbmRpZgoKLyogVGhlc2UgdmFyaWFi bGVzIGFyZSB1c2VkIGJ5IHRoZSBzZXR1cCBjb2RlLiAgKi8KZXh0ZXJuIGludCBfZXJybm87CmV4 dGVybiBpbnQgX2hfZXJybm87CgovKiBEZXNjcmlwdG9yIG9mIHRoZSBpbml0aWFsIHRocmVhZCAq LwoKc3RydWN0IF9wdGhyZWFkX2Rlc2NyX3N0cnVjdCBfX3B0aHJlYWRfaW5pdGlhbF90aHJlYWQg PSB7CiAgewogICAgewogICAgICAmX19wdGhyZWFkX2luaXRpYWxfdGhyZWFkIC8qIHB0aHJlYWRf ZGVzY3Igc2VsZiAqLwogICAgfQogIH0sCiAgJl9fcHRocmVhZF9pbml0aWFsX3RocmVhZCwgIC8q IHB0aHJlYWRfZGVzY3IgcF9uZXh0bGl2ZSAqLwogICZfX3B0aHJlYWRfaW5pdGlhbF90aHJlYWQs ICAvKiBwdGhyZWFkX2Rlc2NyIHBfcHJldmxpdmUgKi8KICBOVUxMLCAgICAgICAgICAgICAgICAg ICAgICAgLyogcHRocmVhZF9kZXNjciBwX25leHR3YWl0aW5nICovCiAgTlVMTCwJCQkgICAgICAv KiBwdGhyZWFkX2Rlc2NyIHBfbmV4dGxvY2sgKi8KICBQVEhSRUFEX1RIUkVBRFNfTUFYLCAgICAg ICAgLyogcHRocmVhZF90IHBfdGlkICovCiAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IGludCBwX3BpZCAqLwogIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbnQgcF9wcmlv cml0eSAqLwogICZfX3B0aHJlYWRfaGFuZGxlc1swXS5oX2xvY2ssIC8qIHN0cnVjdCBfcHRocmVh ZF9mYXN0bG9jayAqIHBfbG9jayAqLwogIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBp bnQgcF9zaWduYWwgKi8KICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgLyogc2lnam1wX2J1 ZiAqIHBfc2lnbmFsX2J1ZiAqLwogIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAvKiBzaWdq bXBfYnVmICogcF9jYW5jZWxfYnVmICovCiAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IGNoYXIgcF90ZXJtaW5hdGVkICovCiAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNo YXIgcF9kZXRhY2hlZCAqLwogIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjaGFyIHBf ZXhpdGVkICovCiAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgIC8qIHZvaWQgKiBwX3JldHZh bCAqLwogIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbnQgcF9yZXR2YWwgKi8KICBO VUxMLCAgICAgICAgICAgICAgICAgICAgICAgLyogcHRocmVhZF9kZXNjciBwX2pvaW5pbmcgKi8K ICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgLyogc3RydWN0IF9wdGhyZWFkX2NsZWFudXBf YnVmZmVyICogcF9jbGVhbnVwICovCiAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNo YXIgcF9jYW5jZWxzdGF0ZSAqLwogIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjaGFy IHBfY2FuY2VsdHlwZSAqLwogIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjaGFyIHBf Y2FuY2VsZWQgKi8KICAmX2Vycm5vLCAgICAgICAgICAgICAgICAgICAgLyogaW50ICpwX2Vycm5v cCAqLwogIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbnQgcF9lcnJubyAqLwogICZf aF9lcnJubywgICAgICAgICAgICAgICAgICAvKiBpbnQgKnBfaF9lcnJub3AgKi8KICAwLCAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogaW50IHBfaF9lcnJubyAqLwogIE5VTEwsICAgICAgICAg ICAgICAgICAgICAgICAvKiBjaGFyICogcF9pbl9zaWdoYW5kbGVyICovCiAgMCwgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIGNoYXIgcF9zaWd3YWl0aW5nICovCiAgUFRIUkVBRF9TVEFSVF9B UkdTX0lOSVRJQUxJWkVSKE5VTEwpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBz dHJ1Y3QgcHRocmVhZF9zdGFydF9hcmdzIHBfc3RhcnRfYXJncyAqLwogIHtOVUxMfSwgICAgICAg ICAgICAgICAgICAgICAvKiB2b2lkICoqIHBfc3BlY2lmaWNbUFRIUkVBRF9LRVlfMVNUTEVWRUxf U0laRV0gKi8KICB7TlVMTH0sICAgICAgICAgICAgICAgICAgICAgLyogdm9pZCAqIHBfbGliY19z cGVjaWZpY1tfTElCQ19UU0RfS0VZX05dICovCiAgMSwgICAgICAgICAgICAgICAgICAgICAgICAg IC8qIGludCBwX3VzZXJzdGFjayAqLwogIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAvKiB2 b2lkICogcF9ndWFyZGFkZHIgKi8KICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2l6 ZV90IHBfZ3VhcmRzaXplICovCiAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFsd2F5 cyBpbmRleCAwICovCiAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGludCBwX3JlcG9y dF9ldmVudHMgKi8KICB7e3swLCB9fSwgMCwgTlVMTH0sICAgICAgICAgLyogdGRfZXZlbnRidWZf dCBwX2V2ZW50YnVmICovCiAgX19BVE9NSUNfSU5JVElBTElaRVIsICAgICAgIC8qIHN0cnVjdCBw dGhyZWFkX2F0b21pYyBwX3Jlc3VtZV9jb3VudCAqLwogIDAsICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBjaGFyIHBfd29rZW5fYnlfY2FuY2VsICovCiAgMCwgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIGNoYXIgcF9jb25kdmFyX2F2YWlsICovCiAgMCwgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIGNoYXIgcF9zZW1fYXZhaWwgKi8KICBOVUxMLCAgICAgICAgICAgICAgICAgICAg ICAgLyogc3RydWN0IHB0aHJlYWRfZXh0cmljYXRlX2lmICpwX2V4dHJpY2F0ZSAqLwogIE5VTEws CSAgICAgICAgICAgICAgICAgICAgICAvKiBwdGhyZWFkX3JlYWRsb2NrX2luZm8gKnBfcmVhZGxv Y2tfbGlzdDsgKi8KICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgLyogcHRocmVhZF9yZWFk bG9ja19pbmZvICpwX3JlYWRsb2NrX2ZyZWU7ICovCiAgMCAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIGludCBwX3VudHJhY2tlZF9yZWFkbG9ja19jb3VudDsgKi8KfTsKCi8qIERlc2NyaXB0 b3Igb2YgdGhlIG1hbmFnZXIgdGhyZWFkOyBub25lIG9mIHRoaXMgaXMgdXNlZCBidXQgdGhlIGVy cm9yCiAgIHZhcmlhYmxlcywgdGhlIHBfcGlkIGFuZCBwX3ByaW9yaXR5IGZpZWxkcywKICAgYW5k IHRoZSBhZGRyZXNzIGZvciBpZGVudGlmaWNhdGlvbi4gICovCgpzdHJ1Y3QgX3B0aHJlYWRfZGVz Y3Jfc3RydWN0IF9fcHRocmVhZF9tYW5hZ2VyX3RocmVhZCA9IHsKICB7CiAgICB7CiAgICAgICZf X3B0aHJlYWRfbWFuYWdlcl90aHJlYWQgLyogcHRocmVhZF9kZXNjciBzZWxmICovCiAgICB9CiAg fSwKICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgLyogcHRocmVhZF9kZXNjciBwX25leHRs aXZlICovCiAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgIC8qIHB0aHJlYWRfZGVzY3IgcF9w cmV2bGl2ZSAqLwogIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAvKiBwdGhyZWFkX2Rlc2Ny IHBfbmV4dHdhaXRpbmcgKi8KICBOVUxMLAkJCSAgICAgIC8qIHB0aHJlYWRfZGVzY3IgcF9uZXh0 bG9jayAqLwogIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbnQgcF90aWQgKi8KICAw LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW50IHBfcGlkICovCiAgMCwgICAgICAgICAg ICAgICAgICAgICAgICAgIC8qIGludCBwX3ByaW9yaXR5ICovCiAgJl9fcHRocmVhZF9oYW5kbGVz WzFdLmhfbG9jaywgLyogc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrICogcF9sb2NrICovCiAgMCwg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGludCBwX3NpZ25hbCAqLwogIE5VTEwsICAgICAg ICAgICAgICAgICAgICAgICAvKiBzaWdqbXBfYnVmICogcF9zaWduYWxfYnVmICovCiAgTlVMTCwg ICAgICAgICAgICAgICAgICAgICAgIC8qIHNpZ2ptcF9idWYgKiBwX2NhbmNlbF9idWYgKi8KICAw LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2hhciBwX3Rlcm1pbmF0ZWQgKi8KICAwLCAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogY2hhciBwX2RldGFjaGVkICovCiAgMCwgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIGNoYXIgcF9leGl0ZWQgKi8KICBOVUxMLCAgICAgICAgICAg ICAgICAgICAgICAgLyogdm9pZCAqIHBfcmV0dmFsICovCiAgMCwgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIGludCBwX3JldHZhbCAqLwogIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAv KiBwdGhyZWFkX2Rlc2NyIHBfam9pbmluZyAqLwogIE5VTEwsICAgICAgICAgICAgICAgICAgICAg ICAvKiBzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKiBwX2NsZWFudXAgKi8KICAwLCAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogY2hhciBwX2NhbmNlbHN0YXRlICovCiAgMCwgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIGNoYXIgcF9jYW5jZWx0eXBlICovCiAgMCwgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIGNoYXIgcF9jYW5jZWxlZCAqLwogICZfX3B0aHJlYWRfbWFu YWdlcl90aHJlYWQucF9lcnJubywgLyogaW50ICpwX2Vycm5vcCAqLwogIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBpbnQgcF9lcnJubyAqLwogIE5VTEwsICAgICAgICAgICAgICAgICAg ICAgICAvKiBpbnQgKnBfaF9lcnJub3AgKi8KICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAg LyogaW50IHBfaF9lcnJubyAqLwogIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAvKiBjaGFy ICogcF9pbl9zaWdoYW5kbGVyICovCiAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNo YXIgcF9zaWd3YWl0aW5nICovCiAgUFRIUkVBRF9TVEFSVF9BUkdTX0lOSVRJQUxJWkVSKF9fcHRo cmVhZF9tYW5hZ2VyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RydWN0IHB0 aHJlYWRfc3RhcnRfYXJncyBwX3N0YXJ0X2FyZ3MgKi8KICB7TlVMTH0sICAgICAgICAgICAgICAg ICAgICAgLyogdm9pZCAqKiBwX3NwZWNpZmljW1BUSFJFQURfS0VZXzFTVExFVkVMX1NJWkVdICov CiAge05VTEx9LCAgICAgICAgICAgICAgICAgICAgIC8qIHZvaWQgKiBwX2xpYmNfc3BlY2lmaWNb X0xJQkNfVFNEX0tFWV9OXSAqLwogIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbnQg cF91c2Vyc3RhY2sgKi8KICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgLyogdm9pZCAqIHBf Z3VhcmRhZGRyICovCiAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNpemVfdCBwX2d1 YXJkc2l6ZSAqLwogIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBbHdheXMgaW5kZXgg MSAqLwogIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbnQgcF9yZXBvcnRfZXZlbnRz ICovCiAge3t7MCwgfX0sIDAsIE5VTEx9LCAgICAgICAgIC8qIHRkX2V2ZW50YnVmX3QgcF9ldmVu dGJ1ZiAqLwogIF9fQVRPTUlDX0lOSVRJQUxJWkVSLCAgICAgICAvKiBzdHJ1Y3QgcHRocmVhZF9h dG9taWMgcF9yZXN1bWVfY291bnQgKi8KICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyog Y2hhciBwX3dva2VuX2J5X2NhbmNlbCAqLwogIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBjaGFyIHBfY29uZHZhcl9hdmFpbCAqLwogIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBjaGFyIHBfc2VtX2F2YWlsICovCiAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0 cnVjdCBwdGhyZWFkX2V4dHJpY2F0ZV9pZiAqcF9leHRyaWNhdGUgKi8KICBOVUxMLAkgICAgICAg ICAgICAgICAgICAgICAgLyogcHRocmVhZF9yZWFkbG9ja19pbmZvICpwX3JlYWRsb2NrX2xpc3Q7 ICovCiAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgIC8qIHB0aHJlYWRfcmVhZGxvY2tfaW5m byAqcF9yZWFkbG9ja19mcmVlOyAqLwogIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBp bnQgcF91bnRyYWNrZWRfcmVhZGxvY2tfY291bnQ7ICovCn07CgovKiBQb2ludGVyIHRvIHRoZSBt YWluIHRocmVhZCAodGhlIGZhdGhlciBvZiB0aGUgdGhyZWFkIG1hbmFnZXIgdGhyZWFkKSAqLwov KiBPcmlnaW5hbGx5LCB0aGlzIGlzIHRoZSBpbml0aWFsIHRocmVhZCwgYnV0IHRoaXMgY2hhbmdl cyBhZnRlciBmb3JrKCkgKi8KCnB0aHJlYWRfZGVzY3IgX19wdGhyZWFkX21haW5fdGhyZWFkID0g Jl9fcHRocmVhZF9pbml0aWFsX3RocmVhZDsKCi8qIExpbWl0IGJldHdlZW4gdGhlIHN0YWNrIG9m IHRoZSBpbml0aWFsIHRocmVhZCAoYWJvdmUpIGFuZCB0aGUKICAgc3RhY2tzIG9mIG90aGVyIHRo cmVhZHMgKGJlbG93KS4gQWxpZ25lZCBvbiBhIFNUQUNLX1NJWkUgYm91bmRhcnkuICovCgpjaGFy ICpfX3B0aHJlYWRfaW5pdGlhbF90aHJlYWRfYm9zOwoKLyogRmlsZSBkZXNjcmlwdG9yIGZvciBz ZW5kaW5nIHJlcXVlc3RzIHRvIHRoZSB0aHJlYWQgbWFuYWdlci4gKi8KLyogSW5pdGlhbGx5IC0x LCBtZWFuaW5nIHRoYXQgdGhlIHRocmVhZCBtYW5hZ2VyIGlzIG5vdCBydW5uaW5nLiAqLwoKaW50 IF9fcHRocmVhZF9tYW5hZ2VyX3JlcXVlc3QgPSAtMTsKCi8qIE90aGVyIGVuZCBvZiB0aGUgcGlw ZSBmb3Igc2VuZGluZyByZXF1ZXN0cyB0byB0aGUgdGhyZWFkIG1hbmFnZXIuICovCgppbnQgX19w dGhyZWFkX21hbmFnZXJfcmVhZGVyOwoKLyogTGltaXRzIG9mIHRoZSB0aHJlYWQgbWFuYWdlciBz dGFjayAqLwoKY2hhciAqX19wdGhyZWFkX21hbmFnZXJfdGhyZWFkX2JvczsKY2hhciAqX19wdGhy ZWFkX21hbmFnZXJfdGhyZWFkX3RvczsKCi8qIEZvciBwcm9jZXNzLXdpZGUgZXhpdCgpICovCgpp bnQgX19wdGhyZWFkX2V4aXRfcmVxdWVzdGVkOwppbnQgX19wdGhyZWFkX2V4aXRfY29kZTsKCi8q IE1heGltdW0gc3RhY2sgc2l6ZS4gICovCnNpemVfdCBfX3B0aHJlYWRfbWF4X3N0YWNrc2l6ZTsK Ci8qIE5vemVybyBpZiB0aGUgbWFjaGluZSBoYXMgbW9yZSB0aGFuIG9uZSBwcm9jZXNzb3IuICAq LwppbnQgX19wdGhyZWFkX3NtcF9rZXJuZWw7CgoKI2lmICFfX0FTU1VNRV9SRUFMVElNRV9TSUdO QUxTCi8qIFBvaW50ZXJzIHRoYXQgc2VsZWN0IG5ldyBvciBvbGQgc3VzcGVuZC9yZXN1bWUgZnVu Y3Rpb25zCiAgIGJhc2VkIG9uIGF2YWlsYWJpbGl0eSBvZiBydCBzaWduYWxzLiAqLwoKdm9pZCAo Kl9fcHRocmVhZF9yZXN0YXJ0KShwdGhyZWFkX2Rlc2NyKSA9IF9fcHRocmVhZF9yZXN0YXJ0X29s ZDsKdm9pZCAoKl9fcHRocmVhZF9zdXNwZW5kKShwdGhyZWFkX2Rlc2NyKSA9IF9fcHRocmVhZF9z dXNwZW5kX29sZDsKaW50ICgqX19wdGhyZWFkX3RpbWVkc3VzcGVuZCkocHRocmVhZF9kZXNjciwg Y29uc3Qgc3RydWN0IHRpbWVzcGVjICopID0gX19wdGhyZWFkX3RpbWVkc3VzcGVuZF9vbGQ7CiNl bmRpZgkvKiBfX0FTU1VNRV9SRUFMVElNRV9TSUdOQUxTICovCgovKiBDb21tdW5pY2F0ZSByZWxl dmFudCBMaW51eFRocmVhZHMgY29uc3RhbnRzIHRvIGdkYiAqLwoKY29uc3QgaW50IF9fcHRocmVh ZF90aHJlYWRzX21heCA9IFBUSFJFQURfVEhSRUFEU19NQVg7CmNvbnN0IGludCBfX3B0aHJlYWRf c2l6ZW9mX2hhbmRsZSA9IHNpemVvZihzdHJ1Y3QgcHRocmVhZF9oYW5kbGVfc3RydWN0KTsKY29u c3QgaW50IF9fcHRocmVhZF9vZmZzZXRvZl9kZXNjciA9IG9mZnNldG9mKHN0cnVjdCBwdGhyZWFk X2hhbmRsZV9zdHJ1Y3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBoX2Rlc2NyKTsKY29uc3QgaW50IF9fcHRocmVhZF9vZmZzZXRvZl9waWQgPSBvZmZzZXRv ZihzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBfcGlkKTsKY29uc3QgaW50IF9fbGludXh0aHJlYWRzX3B0aHJl YWRfc2l6ZW9mX2Rlc2NyCiAgPSBzaXplb2Yoc3RydWN0IF9wdGhyZWFkX2Rlc2NyX3N0cnVjdCk7 CgovKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqLwoKc3RhdGljIHZvaWQgcHRocmVhZF9vbmV4aXRf cHJvY2VzcyhpbnQgcmV0Y29kZSwgdm9pZCAqYXJnKTsKI2lmbmRlZiBIQVZFX1pfTk9ERUxFVEUK c3RhdGljIHZvaWQgcHRocmVhZF9hdGV4aXRfcHJvY2Vzcyh2b2lkICphcmcsIGludCByZXRjb2Rl KTsKc3RhdGljIHZvaWQgcHRocmVhZF9hdGV4aXRfcmV0Y29kZSh2b2lkICphcmcsIGludCByZXRj b2RlKTsKI2VuZGlmCnN0YXRpYyB2b2lkIHB0aHJlYWRfaGFuZGxlX3NpZ2NhbmNlbChpbnQgc2ln KTsKc3RhdGljIHZvaWQgcHRocmVhZF9oYW5kbGVfc2lncmVzdGFydChpbnQgc2lnKTsKc3RhdGlj IHZvaWQgcHRocmVhZF9oYW5kbGVfc2lnZGVidWcoaW50IHNpZyk7CgovKiBDUFUgY2xvY2sgaGFu ZGxpbmcuICAqLwojaWYgSFBfVElNSU5HX0FWQUlMCmV4dGVybiBocF90aW1pbmdfdCBfZGxfY3B1 Y2xvY2tfb2Zmc2V0OwojZW5kaWYKCi8qIFNpZ25hbCBudW1iZXJzIHVzZWQgZm9yIHRoZSBjb21t dW5pY2F0aW9uLgogICBJbiB0aGVzZSB2YXJpYWJsZXMgd2Uga2VlcCB0cmFjayBvZiB0aGUgdXNl ZCB2YXJpYWJsZXMuICBJZiB0aGUKICAgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCBhbnkgcmVh bC10aW1lIHNpZ25hbHMgd2Ugd2lsbCBkZWZpbmUgdGhlCiAgIHZhbHVlcyB0byBzb21lIHVucmVh c29uYWJsZSB2YWx1ZSB3aGljaCB3aWxsIHNpZ25hbCBmYWlsaW5nIG9mIGFsbAogICB0aGUgZnVu Y3Rpb25zIGJlbG93LiAgKi8KI2lmbmRlZiBfX1NJR1JUTUlOCnN0YXRpYyBpbnQgY3VycmVudF9y dG1pbiA9IC0xOwpzdGF0aWMgaW50IGN1cnJlbnRfcnRtYXggPSAtMTsKaW50IF9fcHRocmVhZF9z aWdfcmVzdGFydCA9IFNJR1VTUjE7CmludCBfX3B0aHJlYWRfc2lnX2NhbmNlbCA9IFNJR1VTUjI7 CmludCBfX3B0aHJlYWRfc2lnX2RlYnVnOwojZWxzZQpzdGF0aWMgaW50IGN1cnJlbnRfcnRtaW47 CnN0YXRpYyBpbnQgY3VycmVudF9ydG1heDsKCiNpZiBfX1NJR1JUTUFYIC0gX19TSUdSVE1JTiA+ PSAzCmludCBfX3B0aHJlYWRfc2lnX3Jlc3RhcnQgPSBfX1NJR1JUTUlOOwppbnQgX19wdGhyZWFk X3NpZ19jYW5jZWwgPSBfX1NJR1JUTUlOICsgMTsKaW50IF9fcHRocmVhZF9zaWdfZGVidWcgPSBf X1NJR1JUTUlOICsgMjsKI2Vsc2UKaW50IF9fcHRocmVhZF9zaWdfcmVzdGFydCA9IFNJR1VTUjE7 CmludCBfX3B0aHJlYWRfc2lnX2NhbmNlbCA9IFNJR1VTUjI7CmludCBfX3B0aHJlYWRfc2lnX2Rl YnVnOwojZW5kaWYKCnN0YXRpYyBpbnQgcnRzaWdzX2luaXRpYWxpemVkOwoKI2lmICFfX0FTU1VN RV9SRUFMVElNRV9TSUdOQUxTCiMgaW5jbHVkZSAidGVzdHJ0c2lnLmgiCiNlbmRpZgoKc3RhdGlj IHZvaWQKaW5pdF9ydHNpZ3MgKHZvaWQpCnsKI2lmICFfX0FTU1VNRV9SRUFMVElNRV9TSUdOQUxT CiAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCFrZXJuZWxfaGFzX3J0c2lnICgpLCAwKSkKICAgIHsK ICAgICAgY3VycmVudF9ydG1pbiA9IC0xOwogICAgICBjdXJyZW50X3J0bWF4ID0gLTE7CiMgaWYg X19TSUdSVE1BWCAtIF9fU0lHUlRNSU4gPj0gMwogICAgICBfX3B0aHJlYWRfc2lnX3Jlc3RhcnQg PSBTSUdVU1IxOwogICAgICBfX3B0aHJlYWRfc2lnX2NhbmNlbCA9IFNJR1VTUjI7CiAgICAgIF9f cHRocmVhZF9zaWdfZGVidWcgPSAwOwojIGVuZGlmCiAgICB9CiAgZWxzZQojZW5kaWYJLyogX19B U1NVTUVfUkVBTFRJTUVfU0lHTkFMUyAqLwogICAgewojaWYgX19TSUdSVE1BWCAtIF9fU0lHUlRN SU4gPj0gMwogICAgICBjdXJyZW50X3J0bWluID0gX19TSUdSVE1JTiArIDM7CiMgaWYgIV9fQVNT VU1FX1JFQUxUSU1FX1NJR05BTFMKICAgICAgX19wdGhyZWFkX3Jlc3RhcnQgPSBfX3B0aHJlYWRf cmVzdGFydF9uZXc7CiAgICAgIF9fcHRocmVhZF9zdXNwZW5kID0gX19wdGhyZWFkX3dhaXRfZm9y X3Jlc3RhcnRfc2lnbmFsOwogICAgICBfX3B0aHJlYWRfdGltZWRzdXNwZW5kID0gX19wdGhyZWFk X3RpbWVkc3VzcGVuZF9uZXc7CiMgZW5kaWYgLyogX19BU1NVTUVfUkVBTFRJTUVfU0lHTkFMUyAq LwojZWxzZQogICAgICBjdXJyZW50X3J0bWluID0gX19TSUdSVE1JTjsKI2VuZGlmCgogICAgICBj dXJyZW50X3J0bWF4ID0gX19TSUdSVE1BWDsKICAgIH0KCiAgcnRzaWdzX2luaXRpYWxpemVkID0g MTsKfQojZW5kaWYKCi8qIFJldHVybiBudW1iZXIgb2YgYXZhaWxhYmxlIHJlYWwtdGltZSBzaWdu YWwgd2l0aCBoaWdoZXN0IHByaW9yaXR5LiAgKi8KaW50Cl9fbGliY19jdXJyZW50X3NpZ3J0bWlu ICh2b2lkKQp7CiNpZmRlZiBfX1NJR1JUTUlOCiAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCFydHNp Z3NfaW5pdGlhbGl6ZWQsIDApKQogICAgaW5pdF9ydHNpZ3MgKCk7CiNlbmRpZgogIHJldHVybiBj dXJyZW50X3J0bWluOwp9CgovKiBSZXR1cm4gbnVtYmVyIG9mIGF2YWlsYWJsZSByZWFsLXRpbWUg c2lnbmFsIHdpdGggbG93ZXN0IHByaW9yaXR5LiAgKi8KaW50Cl9fbGliY19jdXJyZW50X3NpZ3J0 bWF4ICh2b2lkKQp7CiNpZmRlZiBfX1NJR1JUTUlOCiAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCFy dHNpZ3NfaW5pdGlhbGl6ZWQsIDApKQogICAgaW5pdF9ydHNpZ3MgKCk7CiNlbmRpZgogIHJldHVy biBjdXJyZW50X3J0bWF4Owp9CgovKiBBbGxvY2F0ZSByZWFsLXRpbWUgc2lnbmFsIHdpdGggaGln aGVzdC9sb3dlc3QgYXZhaWxhYmxlCiAgIHByaW9yaXR5LiAgUGxlYXNlIG5vdGUgdGhhdCB3ZSBk b24ndCB1c2UgYSBsb2NrIHNpbmNlIHdlIGFzc3VtZQogICB0aGlzIGZ1bmN0aW9uIHRvIGJlIGNh bGxlZCBhdCBwcm9ncmFtIHN0YXJ0LiAgKi8KaW50Cl9fbGliY19hbGxvY2F0ZV9ydHNpZyAoaW50 IGhpZ2gpCnsKI2lmbmRlZiBfX1NJR1JUTUlOCiAgcmV0dXJuIC0xOwojZWxzZQogIGlmIChfX2J1 aWx0aW5fZXhwZWN0ICghcnRzaWdzX2luaXRpYWxpemVkLCAwKSkKICAgIGluaXRfcnRzaWdzICgp OwogIGlmIChfX2J1aWx0aW5fZXhwZWN0IChjdXJyZW50X3J0bWluID09IC0xLCAwKQogICAgICB8 fCBfX2J1aWx0aW5fZXhwZWN0IChjdXJyZW50X3J0bWluID4gY3VycmVudF9ydG1heCwgMCkpCiAg ICAvKiBXZSBkb24ndCBoYXZlIGFueW1vcmUgc2lnbmFsIGF2YWlsYWJsZS4gICovCiAgICByZXR1 cm4gLTE7CgogIHJldHVybiBoaWdoID8gY3VycmVudF9ydG1pbisrIDogY3VycmVudF9ydG1heC0t OwojZW5kaWYKfQoKLyogVGhlIGZ1bmN0aW9uIHdlIHVzZSB0byBnZXQgdGhlIGtlcm5lbCByZXZp c2lvbi4gICovCmV4dGVybiBpbnQgX19zeXNjdGwgKGludCAqbmFtZSwgaW50IG5sZW4sIHZvaWQg Km9sZHZhbCwgc2l6ZV90ICpvbGRsZW5wLAoJCSAgICAgdm9pZCAqbmV3dmFsLCBzaXplX3QgbmV3 bGVuKTsKCi8qIFRlc3Qgd2hldGhlciB0aGUgbWFjaGluZSBoYXMgbW9yZSB0aGFuIG9uZSBwcm9j ZXNzb3IuICBUaGlzIGlzIG5vdCB0aGUKICAgYmVzdCB0ZXN0IGJ1dCBnb29kIGVub3VnaC4gIE1v cmUgY29tcGxpY2F0ZWQgdGVzdHMgd291bGQgcmVxdWlyZSBgbWFsbG9jJwogICB3aGljaCBpcyBu b3QgYXZhaWxhYmxlIGF0IHRoYXQgdGltZS4gICovCnN0YXRpYyBpbnQKaXNfc21wX3N5c3RlbSAo dm9pZCkKewogIHN0YXRpYyBjb25zdCBpbnQgc3lzY3RsX2FyZ3NbXSA9IHsgQ1RMX0tFUk4sIEtF Uk5fVkVSU0lPTiB9OwogIGNoYXIgYnVmWzUxMl07CiAgc2l6ZV90IHJlc2xlbiA9IHNpemVvZiAo YnVmKTsKCiAgLyogVHJ5IHJlYWRpbmcgdGhlIG51bWJlciB1c2luZyBgc3lzY3RsJyBmaXJzdC4g ICovCiAgaWYgKF9fc3lzY3RsICgoaW50ICopIHN5c2N0bF9hcmdzLAoJCXNpemVvZiAoc3lzY3Rs X2FyZ3MpIC8gc2l6ZW9mIChzeXNjdGxfYXJnc1swXSksCgkJYnVmLCAmcmVzbGVuLCBOVUxMLCAw KSA8IDApCiAgICB7CiAgICAgIC8qIFRoaXMgd2FzIG5vdCBzdWNjZXNzZnVsLiAgTm93IHRyeSBy ZWFkaW5nIHRoZSAvcHJvYyBmaWxlc3lzdGVtLiAgKi8KICAgICAgaW50IGZkID0gX19vcGVuICgi L3Byb2Mvc3lzL2tlcm5lbC92ZXJzaW9uIiwgT19SRE9OTFkpOwogICAgICBpZiAoX19idWlsdGlu X2V4cGVjdCAoZmQsIDApID09IC0xCgkgIHx8IChyZXNsZW4gPSBfX3JlYWQgKGZkLCBidWYsIHNp emVvZiAoYnVmKSkpIDw9IDApCgkvKiBUaGlzIGFsc28gZGlkbid0IHdvcmsuICBXZSBnaXZlIHVw IGFuZCBzYXkgaXQncyBhIFVQIG1hY2hpbmUuICAqLwoJYnVmWzBdID0gJ1wwJzsKCiAgICAgIF9f Y2xvc2UgKGZkKTsKICAgIH0KCiAgcmV0dXJuIHN0cnN0ciAoYnVmLCAiU01QIikgIT0gTlVMTDsK fQoKCi8qIEluaXRpYWxpemUgdGhlIHB0aHJlYWQgbGlicmFyeS4KICAgSW5pdGlhbGl6YXRpb24g aXMgc3BsaXQgaW4gdHdvIGZ1bmN0aW9uczoKICAgLSBhIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIHRo YXQgYmxvY2tzIHRoZSBfX3B0aHJlYWRfc2lnX3Jlc3RhcnQgc2lnbmFsCiAgICAgKG11c3QgZG8g dGhpcyB2ZXJ5IGVhcmx5LCBzaW5jZSB0aGUgcHJvZ3JhbSBjb3VsZCBjYXB0dXJlIHRoZSBzaWdu YWwKICAgICAgbWFzayB3aXRoIGUuZy4gc2lnc2V0am1wIGJlZm9yZSBjcmVhdGluZyB0aGUgZmly c3QgdGhyZWFkKTsKICAgLSBhIHJlZ3VsYXIgZnVuY3Rpb24gY2FsbGVkIGZyb20gcHRocmVhZF9j cmVhdGUgd2hlbiBuZWVkZWQuICovCgpzdGF0aWMgdm9pZCBwdGhyZWFkX2luaXRpYWxpemUodm9p ZCkgX19hdHRyaWJ1dGVfXygoY29uc3RydWN0b3IpKTsKCiNpZm5kZWYgSEFWRV9aX05PREVMRVRF CmV4dGVybiB2b2lkICpfX2Rzb19oYW5kbGUgX19hdHRyaWJ1dGVfXyAoKHdlYWspKTsKI2VuZGlm CgoKLyogRG8gc29tZSBtaW5pbWFsIGluaXRpYWxpemF0aW9uIHdoaWNoIGhhcyB0byBiZSBkb25l IGR1cmluZyB0aGUKICAgc3RhcnR1cCBvZiB0aGUgQyBsaWJyYXJ5LiAgKi8Kdm9pZApfX3B0aHJl YWRfaW5pdGlhbGl6ZV9taW5pbWFsKHZvaWQpCnsKICAvKiBJZiB3ZSBoYXZlIHNwZWNpYWwgdGhy ZWFkX3NlbGYgcHJvY2Vzc2luZywgaW5pdGlhbGl6ZSB0aGF0IGZvciB0aGUKICAgICBtYWluIHRo cmVhZCBub3cuICAqLwojaWZkZWYgSU5JVF9USFJFQURfU0VMRgogIElOSVRfVEhSRUFEX1NFTEYo Jl9fcHRocmVhZF9pbml0aWFsX3RocmVhZCwgMCk7CiNlbmRpZgojaWYgSFBfVElNSU5HX0FWQUlM CiAgX19wdGhyZWFkX2luaXRpYWxfdGhyZWFkLnBfY3B1Y2xvY2tfb2Zmc2V0ID0gX2RsX2NwdWNs b2NrX29mZnNldDsKI2VuZGlmCn0KCgp2b2lkCl9fcHRocmVhZF9pbml0X21heF9zdGFja3NpemUo dm9pZCkKewogIHN0cnVjdCBybGltaXQgbGltaXQ7CiAgc2l6ZV90IG1heF9zdGFjazsKCiAgZ2V0 cmxpbWl0KFJMSU1JVF9TVEFDSywgJmxpbWl0KTsKI2lmZGVmIEZMT0FUSU5HX1NUQUNLUwogIGlm IChsaW1pdC5ybGltX2N1ciA9PSBSTElNX0lORklOSVRZKQogICAgbGltaXQucmxpbV9jdXIgPSBB UkNIX1NUQUNLX01BWF9TSVpFOwojIGlmZGVmIE5FRURfU0VQQVJBVEVfUkVHSVNURVJfU1RBQ0sK ICBtYXhfc3RhY2sgPSBsaW1pdC5ybGltX2N1ciAvIDI7CiMgZWxzZQogIG1heF9zdGFjayA9IGxp bWl0LnJsaW1fY3VyOwojIGVuZGlmCiNlbHNlCiAgLyogUGxheSB3aXRoIHRoZSBzdGFjayBzaXpl IGxpbWl0IHRvIG1ha2Ugc3VyZSB0aGF0IG5vIHN0YWNrIGV2ZXIgZ3Jvd3MKICAgICBiZXlvbmQg U1RBQ0tfU0laRSBtaW51cyBvbmUgcGFnZSAodG8gYWN0IGFzIGEgZ3VhcmQgcGFnZSkuICovCiMg aWZkZWYgTkVFRF9TRVBBUkFURV9SRUdJU1RFUl9TVEFDSwogIC8qIFNUQUNLX1NJWkUgYnl0ZXMg aG9sZCBib3RoIHRoZSBtYWluIHN0YWNrIGFuZCByZWdpc3RlciBiYWNraW5nCiAgICAgc3RvcmUu IFRoZSBybGltaXQgdmFsdWUgYXBwbGllcyB0byBlYWNoIGluZGl2aWR1YWxseS4gICovCiAgbWF4 X3N0YWNrID0gU1RBQ0tfU0laRS8yIC0gX19nZXRwYWdlc2l6ZSAoKTsKIyBlbHNlCiAgbWF4X3N0 YWNrID0gU1RBQ0tfU0laRSAtIF9fZ2V0cGFnZXNpemUoKTsKIyBlbmRpZgogIGlmIChsaW1pdC5y bGltX2N1ciA+IG1heF9zdGFjaykgewogICAgbGltaXQucmxpbV9jdXIgPSBtYXhfc3RhY2s7CiAg ICBzZXRybGltaXQoUkxJTUlUX1NUQUNLLCAmbGltaXQpOwogIH0KI2VuZGlmCiAgX19wdGhyZWFk X21heF9zdGFja3NpemUgPSBtYXhfc3RhY2s7Cn0KCgpzdGF0aWMgdm9pZCBwdGhyZWFkX2luaXRp YWxpemUodm9pZCkKewogIHN0cnVjdCBzaWdhY3Rpb24gc2E7CiAgc2lnc2V0X3QgbWFzazsKCiAg LyogSWYgYWxyZWFkeSBkb25lIChlLmcuIGJ5IGEgY29uc3RydWN0b3IgY2FsbGVkIGVhcmxpZXIh KSwgYmFpbCBvdXQgKi8KICBpZiAoX19wdGhyZWFkX2luaXRpYWxfdGhyZWFkX2JvcyAhPSBOVUxM KSByZXR1cm47CiNpZmRlZiBURVNUX0ZPUl9DT01QQVJFX0FORF9TV0FQCiAgLyogVGVzdCBpZiBj b21wYXJlLWFuZC1zd2FwIGlzIGF2YWlsYWJsZSAqLwogIF9fcHRocmVhZF9oYXNfY2FzID0gY29t cGFyZV9hbmRfc3dhcF9pc19hdmFpbGFibGUoKTsKI2VuZGlmCiNpZmRlZiBGTE9BVElOR19TVEFD S1MKICAvKiBXZSBkb24ndCBuZWVkIHRvIGtub3cgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suICBH aXZlIHRoZSBwb2ludGVyIHNvbWUKICAgICB2YWx1ZSB0byBzaWduYWwgdGhhdCBpbml0aWFsaXph dGlvbiBoYXBwZW5lZC4gICovCiAgX19wdGhyZWFkX2luaXRpYWxfdGhyZWFkX2JvcyA9ICh2b2lk ICopIC0xbDsKI2Vsc2UKICAvKiBEZXRlcm1pbmUgc3RhY2sgc2l6ZSBsaW1pdHMgLiAgKi8KICBf X3B0aHJlYWRfaW5pdF9tYXhfc3RhY2tzaXplICgpOwojIGlmZGVmIF9TVEFDS19HUk9XU19VUAog IC8qIFRoZSBpbml0aWFsIHRocmVhZCBhbHJlYWR5IGhhcyBhbGwgdGhlIHN0YWNrIGl0IG5lZWRz ICovCiAgX19wdGhyZWFkX2luaXRpYWxfdGhyZWFkX2JvcyA9IChjaGFyICopCiAgICAoKGxvbmcp Q1VSUkVOVF9TVEFDS19GUkFNRSAmfiAoU1RBQ0tfU0laRSAtIDEpKTsKIyBlbHNlCiAgLyogRm9y IHRoZSBpbml0aWFsIHN0YWNrLCByZXNlcnZlIGF0IGxlYXN0IFNUQUNLX1NJWkUgYnl0ZXMgb2Yg c3RhY2sKICAgICBiZWxvdyB0aGUgY3VycmVudCBzdGFjayBhZGRyZXNzLCBhbmQgYWxpZ24gdGhh dCBvbiBhCiAgICAgU1RBQ0tfU0laRSBib3VuZGFyeS4gKi8KICBfX3B0aHJlYWRfaW5pdGlhbF90 aHJlYWRfYm9zID0KICAgIChjaGFyICopKCgobG9uZylDVVJSRU5UX1NUQUNLX0ZSQU1FIC0gMiAq IFNUQUNLX1NJWkUpICYgfihTVEFDS19TSVpFIC0gMSkpOwojIGVuZGlmCiNlbmRpZgogIC8qIFVw ZGF0ZSB0aGUgZGVzY3JpcHRvciBmb3IgdGhlIGluaXRpYWwgdGhyZWFkLiAqLwogIF9fcHRocmVh ZF9pbml0aWFsX3RocmVhZC5wX3BpZCA9IF9fZ2V0cGlkKCk7CiAgLyogTGlrZXdpc2UgZm9yIHRo ZSByZXNvbHZlciBzdGF0ZSBfcmVzLiAgKi8KICBfX3B0aHJlYWRfaW5pdGlhbF90aHJlYWQucF9y ZXNwID0gJl9yZXM7CiNpZmRlZiBfX1NJR1JUTUlOCiAgLyogSW5pdGlhbGl6ZSByZWFsLXRpbWUg c2lnbmFscy4gKi8KICBpbml0X3J0c2lncyAoKTsKI2VuZGlmCiAgLyogU2V0dXAgc2lnbmFsIGhh bmRsZXJzIGZvciB0aGUgaW5pdGlhbCB0aHJlYWQuCiAgICAgU2luY2Ugc2lnbmFsIGhhbmRsZXJz IGFyZSBzaGFyZWQgYmV0d2VlbiB0aHJlYWRzLCB0aGVzZSBzZXR0aW5ncwogICAgIHdpbGwgYmUg aW5oZXJpdGVkIGJ5IGFsbCBvdGhlciB0aHJlYWRzLiAqLwogIHNhLnNhX2hhbmRsZXIgPSBwdGhy ZWFkX2hhbmRsZV9zaWdyZXN0YXJ0OwogIHNpZ2VtcHR5c2V0KCZzYS5zYV9tYXNrKTsKICBzYS5z YV9mbGFncyA9IDA7CiAgX19saWJjX3NpZ2FjdGlvbihfX3B0aHJlYWRfc2lnX3Jlc3RhcnQsICZz YSwgTlVMTCk7CiAgc2Euc2FfaGFuZGxlciA9IHB0aHJlYWRfaGFuZGxlX3NpZ2NhbmNlbDsKICAv LyBzYS5zYV9mbGFncyA9IDA7CiAgX19saWJjX3NpZ2FjdGlvbihfX3B0aHJlYWRfc2lnX2NhbmNl bCwgJnNhLCBOVUxMKTsKICBpZiAoX19wdGhyZWFkX3NpZ19kZWJ1ZyA+IDApIHsKICAgIHNhLnNh X2hhbmRsZXIgPSBwdGhyZWFkX2hhbmRsZV9zaWdkZWJ1ZzsKICAgIHNpZ2VtcHR5c2V0KCZzYS5z YV9tYXNrKTsKICAgIC8vIHNhLnNhX2ZsYWdzID0gMDsKICAgIF9fbGliY19zaWdhY3Rpb24oX19w dGhyZWFkX3NpZ19kZWJ1ZywgJnNhLCBOVUxMKTsKICB9CiAgLyogSW5pdGlhbGx5LCBibG9jayBf X3B0aHJlYWRfc2lnX3Jlc3RhcnQuIFdpbGwgYmUgdW5ibG9ja2VkIG9uIGRlbWFuZC4gKi8KICBz aWdlbXB0eXNldCgmbWFzayk7CiAgc2lnYWRkc2V0KCZtYXNrLCBfX3B0aHJlYWRfc2lnX3Jlc3Rh cnQpOwogIHNpZ3Byb2NtYXNrKFNJR19CTE9DSywgJm1hc2ssIE5VTEwpOwogIC8qIFJlZ2lzdGVy IGFuIGV4aXQgZnVuY3Rpb24gdG8ga2lsbCBhbGwgb3RoZXIgdGhyZWFkcy4gKi8KICAvKiBEbyBp dCBlYXJseSBzbyB0aGF0IHVzZXItcmVnaXN0ZXJlZCBhdGV4aXQgZnVuY3Rpb25zIGFyZSBjYWxs ZWQKICAgICBiZWZvcmUgcHRocmVhZF8qZXhpdF9wcm9jZXNzLiAqLwojaWZuZGVmIEhBVkVfWl9O T0RFTEVURQogIGlmIChfX2J1aWx0aW5fZXhwZWN0ICgmX19kc29faGFuZGxlICE9IE5VTEwsIDEp KQogICAgX19jeGFfYXRleGl0ICgodm9pZCAoKikgKHZvaWQgKikpIHB0aHJlYWRfYXRleGl0X3By b2Nlc3MsIE5VTEwsCgkJICBfX2Rzb19oYW5kbGUpOwogIGVsc2UKI2VuZGlmCiAgICBfX29uX2V4 aXQgKHB0aHJlYWRfb25leGl0X3Byb2Nlc3MsIE5VTEwpOwogIC8qIEhvdyBtYW55IHByb2Nlc3Nv cnMuICAqLwogIF9fcHRocmVhZF9zbXBfa2VybmVsID0gaXNfc21wX3N5c3RlbSAoKTsKfQoKdm9p ZCBfX3B0aHJlYWRfaW5pdGlhbGl6ZSh2b2lkKQp7CiAgcHRocmVhZF9pbml0aWFsaXplKCk7Cn0K CmludCBfX3B0aHJlYWRfaW5pdGlhbGl6ZV9tYW5hZ2VyKHZvaWQpCnsKICBpbnQgbWFuYWdlcl9w aXBlWzJdOwogIGludCBwaWQ7CiAgc3RydWN0IHB0aHJlYWRfcmVxdWVzdCByZXF1ZXN0OwoKI2lm bmRlZiBIQVZFX1pfTk9ERUxFVEUKICBpZiAoX19idWlsdGluX2V4cGVjdCAoJl9fZHNvX2hhbmRs ZSAhPSBOVUxMLCAxKSkKICAgIF9fY3hhX2F0ZXhpdCAoKHZvaWQgKCopICh2b2lkICopKSBwdGhy ZWFkX2F0ZXhpdF9yZXRjb2RlLCBOVUxMLAoJCSAgX19kc29faGFuZGxlKTsKI2VuZGlmCgogIGlm IChfX3B0aHJlYWRfbWF4X3N0YWNrc2l6ZSA9PSAwKQogICAgX19wdGhyZWFkX2luaXRfbWF4X3N0 YWNrc2l6ZSAoKTsKICAvKiBJZiBiYXNpYyBpbml0aWFsaXphdGlvbiBub3QgZG9uZSB5ZXQgKGUu Zy4gd2UncmUgY2FsbGVkIGZyb20gYQogICAgIGNvbnN0cnVjdG9yIHJ1biBiZWZvcmUgb3VyIGNv bnN0cnVjdG9yKSwgZG8gaXQgbm93ICovCiAgaWYgKF9fcHRocmVhZF9pbml0aWFsX3RocmVhZF9i b3MgPT0gTlVMTCkgcHRocmVhZF9pbml0aWFsaXplKCk7CiAgLyogU2V0dXAgc3RhY2sgZm9yIHRo cmVhZCBtYW5hZ2VyICovCiAgX19wdGhyZWFkX21hbmFnZXJfdGhyZWFkX2JvcyA9IG1hbGxvYyhU SFJFQURfTUFOQUdFUl9TVEFDS19TSVpFKTsKICBpZiAoX19wdGhyZWFkX21hbmFnZXJfdGhyZWFk X2JvcyA9PSBOVUxMKSByZXR1cm4gLTE7CiAgX19wdGhyZWFkX21hbmFnZXJfdGhyZWFkX3RvcyA9 CiAgICBfX3B0aHJlYWRfbWFuYWdlcl90aHJlYWRfYm9zICsgVEhSRUFEX01BTkFHRVJfU1RBQ0tf U0laRTsKICAvKiBTZXR1cCBwaXBlIHRvIGNvbW11bmljYXRlIHdpdGggdGhyZWFkIG1hbmFnZXIg Ki8KICBpZiAocGlwZShtYW5hZ2VyX3BpcGUpID09IC0xKSB7CiAgICBmcmVlKF9fcHRocmVhZF9t YW5hZ2VyX3RocmVhZF9ib3MpOwogICAgcmV0dXJuIC0xOwogIH0KICAvKiBTdGFydCB0aGUgdGhy ZWFkIG1hbmFnZXIgKi8KICBwaWQgPSAwOwogIGlmIChfX2J1aWx0aW5fZXhwZWN0IChfX3B0aHJl YWRfaW5pdGlhbF90aHJlYWQucF9yZXBvcnRfZXZlbnRzLCAwKSkKICAgIHsKICAgICAgLyogSXQn cyBhIGJpdCBtb3JlIGNvbXBsaWNhdGVkLiAgV2UgaGF2ZSB0byByZXBvcnQgdGhlIGNyZWF0aW9u IG9mCgkgdGhlIG1hbmFnZXIgdGhyZWFkLiAgKi8KICAgICAgaW50IGlkeCA9IF9fdGRfZXZlbnR3 b3JkIChURF9DUkVBVEUpOwogICAgICB1aW50MzJfdCBtYXNrID0gX190ZF9ldmVudG1hc2sgKFRE X0NSRUFURSk7CgogICAgICBpZiAoKG1hc2sgJiAoX19wdGhyZWFkX3RocmVhZHNfZXZlbnRzLmV2 ZW50X2JpdHNbaWR4XQoJCSAgIHwgX19wdGhyZWFkX2luaXRpYWxfdGhyZWFkLnBfZXZlbnRidWYu ZXZlbnRtYXNrLmV2ZW50X2JpdHNbaWR4XSkpCgkgICE9IDApCgl7CgkgIF9fcHRocmVhZF9sb2Nr KF9fcHRocmVhZF9tYW5hZ2VyX3RocmVhZC5wX2xvY2ssIE5VTEwpOwoKI2lmZGVmIE5FRURfU0VQ QVJBVEVfUkVHSVNURVJfU1RBQ0sKCSAgcGlkID0gX19jbG9uZTIoX19wdGhyZWFkX21hbmFnZXJf ZXZlbnQsCgkJCSAodm9pZCAqKikgX19wdGhyZWFkX21hbmFnZXJfdGhyZWFkX2JvcywKCQkJIFRI UkVBRF9NQU5BR0VSX1NUQUNLX1NJWkUsCgkJCSBDTE9ORV9WTSB8IENMT05FX0ZTIHwgQ0xPTkVf RklMRVMgfCBDTE9ORV9TSUdIQU5ELAoJCQkgKHZvaWQgKikobG9uZyltYW5hZ2VyX3BpcGVbMF0p OwojZWxpZiBfU1RBQ0tfR1JPV1NfVVAKCSAgcGlkID0gX19jbG9uZShfX3B0aHJlYWRfbWFuYWdl cl9ldmVudCwKCQkJKHZvaWQgKiopIF9fcHRocmVhZF9tYW5hZ2VyX3RocmVhZF9ib3MsCgkJCUNM T05FX1ZNIHwgQ0xPTkVfRlMgfCBDTE9ORV9GSUxFUyB8IENMT05FX1NJR0hBTkQsCgkJCSh2b2lk ICopKGxvbmcpbWFuYWdlcl9waXBlWzBdKTsKI2Vsc2UKCSAgcGlkID0gX19jbG9uZShfX3B0aHJl YWRfbWFuYWdlcl9ldmVudCwKCQkJKHZvaWQgKiopIF9fcHRocmVhZF9tYW5hZ2VyX3RocmVhZF90 b3MsCgkJCUNMT05FX1ZNIHwgQ0xPTkVfRlMgfCBDTE9ORV9GSUxFUyB8IENMT05FX1NJR0hBTkQs CgkJCSh2b2lkICopKGxvbmcpbWFuYWdlcl9waXBlWzBdKTsKI2VuZGlmCgoJICBpZiAocGlkICE9 IC0xKQoJICAgIHsKCSAgICAgIC8qIE5vdyBmaWxsIGluIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0 aGUgbmV3IHRocmVhZCBpbgoJICAgICAgICAgdGhlIG5ld2x5IGNyZWF0ZWQgdGhyZWFkJ3MgZGF0 YSBzdHJ1Y3R1cmUuICBXZSBjYW5ub3QgbGV0CgkgICAgICAgICB0aGUgbmV3IHRocmVhZCBkbyB0 aGlzIHNpbmNlIHdlIGRvbid0IGtub3cgd2hldGhlciBpdCB3YXMKCSAgICAgICAgIGFscmVhZHkg c2NoZWR1bGVkIHdoZW4gd2Ugc2VuZCB0aGUgZXZlbnQuICAqLwoJICAgICAgX19wdGhyZWFkX21h bmFnZXJfdGhyZWFkLnBfZXZlbnRidWYuZXZlbnRkYXRhID0KCQkmX19wdGhyZWFkX21hbmFnZXJf dGhyZWFkOwoJICAgICAgX19wdGhyZWFkX21hbmFnZXJfdGhyZWFkLnBfZXZlbnRidWYuZXZlbnRu dW0gPSBURF9DUkVBVEU7CgkgICAgICBfX3B0aHJlYWRfbGFzdF9ldmVudCA9ICZfX3B0aHJlYWRf bWFuYWdlcl90aHJlYWQ7CgkgICAgICBfX3B0aHJlYWRfbWFuYWdlcl90aHJlYWQucF90aWQgPSAy KiBQVEhSRUFEX1RIUkVBRFNfTUFYICsgMTsKCSAgICAgIF9fcHRocmVhZF9tYW5hZ2VyX3RocmVh ZC5wX3BpZCA9IHBpZDsKCgkgICAgICAvKiBOb3cgY2FsbCB0aGUgZnVuY3Rpb24gd2hpY2ggc2ln bmFscyB0aGUgZXZlbnQuICAqLwoJICAgICAgX19saW51eHRocmVhZHNfY3JlYXRlX2V2ZW50ICgp OwoJICAgIH0KCgkgIC8qIE5vdyByZXN0YXJ0IHRoZSB0aHJlYWQuICAqLwoJICBfX3B0aHJlYWRf dW5sb2NrKF9fcHRocmVhZF9tYW5hZ2VyX3RocmVhZC5wX2xvY2spOwoJfQogICAgfQoKICBpZiAo X19idWlsdGluX2V4cGVjdCAocGlkLCAwKSA9PSAwKQogICAgewojaWZkZWYgTkVFRF9TRVBBUkFU RV9SRUdJU1RFUl9TVEFDSwogICAgICBwaWQgPSBfX2Nsb25lMihfX3B0aHJlYWRfbWFuYWdlciwg KHZvaWQgKiopIF9fcHRocmVhZF9tYW5hZ2VyX3RocmVhZF9ib3MsCgkJICAgICBUSFJFQURfTUFO QUdFUl9TVEFDS19TSVpFLAoJCSAgICAgQ0xPTkVfVk0gfCBDTE9ORV9GUyB8IENMT05FX0ZJTEVT IHwgQ0xPTkVfU0lHSEFORCwKCQkgICAgICh2b2lkICopKGxvbmcpbWFuYWdlcl9waXBlWzBdKTsK I2VsaWYgX1NUQUNLX0dST1dTX1VQCiAgICAgIHBpZCA9IF9fY2xvbmUoX19wdGhyZWFkX21hbmFn ZXIsICh2b2lkICoqKSBfX3B0aHJlYWRfbWFuYWdlcl90aHJlYWRfYm9zLAoJCSAgICBDTE9ORV9W TSB8IENMT05FX0ZTIHwgQ0xPTkVfRklMRVMgfCBDTE9ORV9TSUdIQU5ELAoJCSAgICAodm9pZCAq KShsb25nKW1hbmFnZXJfcGlwZVswXSk7CiNlbHNlCiAgICAgIHBpZCA9IF9fY2xvbmUoX19wdGhy ZWFkX21hbmFnZXIsICh2b2lkICoqKSBfX3B0aHJlYWRfbWFuYWdlcl90aHJlYWRfdG9zLAoJCSAg ICBDTE9ORV9WTSB8IENMT05FX0ZTIHwgQ0xPTkVfRklMRVMgfCBDTE9ORV9TSUdIQU5ELAoJCSAg ICAodm9pZCAqKShsb25nKW1hbmFnZXJfcGlwZVswXSk7CiNlbmRpZgogICAgfQogIGlmIChfX2J1 aWx0aW5fZXhwZWN0IChwaWQsIDApID09IC0xKSB7CiAgICBmcmVlKF9fcHRocmVhZF9tYW5hZ2Vy X3RocmVhZF9ib3MpOwogICAgX19saWJjX2Nsb3NlKG1hbmFnZXJfcGlwZVswXSk7CiAgICBfX2xp YmNfY2xvc2UobWFuYWdlcl9waXBlWzFdKTsKICAgIHJldHVybiAtMTsKICB9CiAgX19wdGhyZWFk X21hbmFnZXJfcmVxdWVzdCA9IG1hbmFnZXJfcGlwZVsxXTsgLyogd3JpdGluZyBlbmQgKi8KICBf X3B0aHJlYWRfbWFuYWdlcl9yZWFkZXIgPSBtYW5hZ2VyX3BpcGVbMF07IC8qIHJlYWRpbmcgZW5k ICovCiAgX19wdGhyZWFkX21hbmFnZXJfdGhyZWFkLnBfdGlkID0gMiogUFRIUkVBRF9USFJFQURT X01BWCArIDE7CiAgX19wdGhyZWFkX21hbmFnZXJfdGhyZWFkLnBfcGlkID0gcGlkOwogIC8qIE1h a2UgZ2RiIGF3YXJlIG9mIG5ldyB0aHJlYWQgbWFuYWdlciAqLwogIGlmIChfX2J1aWx0aW5fZXhw ZWN0IChfX3B0aHJlYWRfdGhyZWFkc19kZWJ1ZywgMCkgJiYgX19wdGhyZWFkX3NpZ19kZWJ1ZyA+ IDApCiAgICB7CiAgICAgIHJhaXNlKF9fcHRocmVhZF9zaWdfZGVidWcpOwogICAgICAvKiBXZSBz dXNwZW5kIG91cnNlbGYgYW5kIGdkYiB3aWxsIHdha2UgdXMgdXAgd2hlbiBpdCBpcwoJIHJlYWR5 IHRvIGhhbmRsZSB1cy4gKi8KICAgICAgX19wdGhyZWFkX3dhaXRfZm9yX3Jlc3RhcnRfc2lnbmFs KHRocmVhZF9zZWxmKCkpOwogICAgfQogIC8qIFN5bmNocm9uaXplIGRlYnVnZ2luZyBvZiB0aGUg dGhyZWFkIG1hbmFnZXIgKi8KICByZXF1ZXN0LnJlcV9raW5kID0gUkVRX0RFQlVHOwogIFRFTVBf RkFJTFVSRV9SRVRSWShfX2xpYmNfd3JpdGUoX19wdGhyZWFkX21hbmFnZXJfcmVxdWVzdCwKCQkJ CSAgKGNoYXIgKikgJnJlcXVlc3QsIHNpemVvZihyZXF1ZXN0KSkpOwogIHJldHVybiAwOwp9Cgov KiBUaHJlYWQgY3JlYXRpb24gKi8KCmludCBfX3B0aHJlYWRfY3JlYXRlXzJfMShwdGhyZWFkX3Qg KnRocmVhZCwgY29uc3QgcHRocmVhZF9hdHRyX3QgKmF0dHIsCgkJCSB2b2lkICogKCpzdGFydF9y b3V0aW5lKSh2b2lkICopLCB2b2lkICphcmcpCnsKICBwdGhyZWFkX2Rlc2NyIHNlbGYgPSB0aHJl YWRfc2VsZigpOwogIHN0cnVjdCBwdGhyZWFkX3JlcXVlc3QgcmVxdWVzdDsKICBpbnQgcmV0dmFs OwogIGlmIChfX2J1aWx0aW5fZXhwZWN0IChfX3B0aHJlYWRfbWFuYWdlcl9yZXF1ZXN0LCAwKSA8 IDApIHsKICAgIGlmIChfX3B0aHJlYWRfaW5pdGlhbGl6ZV9tYW5hZ2VyKCkgPCAwKSByZXR1cm4g RUFHQUlOOwogIH0KICByZXF1ZXN0LnJlcV90aHJlYWQgPSBzZWxmOwogIHJlcXVlc3QucmVxX2tp bmQgPSBSRVFfQ1JFQVRFOwogIHJlcXVlc3QucmVxX2FyZ3MuY3JlYXRlLmF0dHIgPSBhdHRyOwog IHJlcXVlc3QucmVxX2FyZ3MuY3JlYXRlLmZuID0gc3RhcnRfcm91dGluZTsKICByZXF1ZXN0LnJl cV9hcmdzLmNyZWF0ZS5hcmcgPSBhcmc7CiAgc2lncHJvY21hc2soU0lHX1NFVE1BU0ssIChjb25z dCBzaWdzZXRfdCAqKSBOVUxMLAogICAgICAgICAgICAgICZyZXF1ZXN0LnJlcV9hcmdzLmNyZWF0 ZS5tYXNrKTsKICBURU1QX0ZBSUxVUkVfUkVUUlkoX19saWJjX3dyaXRlKF9fcHRocmVhZF9tYW5h Z2VyX3JlcXVlc3QsCgkJCQkgIChjaGFyICopICZyZXF1ZXN0LCBzaXplb2YocmVxdWVzdCkpKTsK ICBzdXNwZW5kKHNlbGYpOwogIHJldHZhbCA9IFRIUkVBRF9HRVRNRU0oc2VsZiwgcF9yZXRjb2Rl KTsKICBpZiAoX19idWlsdGluX2V4cGVjdCAocmV0dmFsLCAwKSA9PSAwKQogICAgKnRocmVhZCA9 IChwdGhyZWFkX3QpIFRIUkVBRF9HRVRNRU0oc2VsZiwgcF9yZXR2YWwpOwogIHJldHVybiByZXR2 YWw7Cn0KCnZlcnNpb25lZF9zeW1ib2wgKGxpYnB0aHJlYWQsIF9fcHRocmVhZF9jcmVhdGVfMl8x LCBwdGhyZWFkX2NyZWF0ZSwgR0xJQkNfMl8xKTsKCiNpZiBTSExJQl9DT01QQVQgKGxpYnB0aHJl YWQsIEdMSUJDXzJfMCwgR0xJQkNfMl8xKQoKaW50IF9fcHRocmVhZF9jcmVhdGVfMl8wKHB0aHJl YWRfdCAqdGhyZWFkLCBjb25zdCBwdGhyZWFkX2F0dHJfdCAqYXR0ciwKCQkJIHZvaWQgKiAoKnN0 YXJ0X3JvdXRpbmUpKHZvaWQgKiksIHZvaWQgKmFyZykKewogIC8qIFRoZSBBVFRSIGF0dHJpYnV0 ZSBpcyBub3QgcmVhbGx5IG9mIHR5cGUgYHB0aHJlYWRfYXR0cl90IConLiAgSXQgaGFzCiAgICAg dGhlIG9sZCBzaXplIGFuZCBhY2Nlc3MgdG8gdGhlIG5ldyBtZW1iZXJzIG1pZ2h0IGNyYXNoIHRo ZSBwcm9ncmFtLgogICAgIFdlIGNvbnZlcnQgdGhlIHN0cnVjdCBub3cuICAqLwogIHB0aHJlYWRf YXR0cl90IG5ld19hdHRyOwoKICBpZiAoYXR0ciAhPSBOVUxMKQogICAgewogICAgICBzaXplX3Qg cHMgPSBfX2dldHBhZ2VzaXplICgpOwoKICAgICAgbWVtY3B5ICgmbmV3X2F0dHIsIGF0dHIsCgkg ICAgICAoc2l6ZV90KSAmKCgocHRocmVhZF9hdHRyX3QqKU5VTEwpLT5fX2d1YXJkc2l6ZSkpOwog ICAgICBuZXdfYXR0ci5fX2d1YXJkc2l6ZSA9IHBzOwogICAgICBuZXdfYXR0ci5fX3N0YWNrYWRk cl9zZXQgPSAwOwogICAgICBuZXdfYXR0ci5fX3N0YWNrYWRkciA9IE5VTEw7CiAgICAgIG5ld19h dHRyLl9fc3RhY2tzaXplID0gU1RBQ0tfU0laRSAtIHBzOwogICAgICBhdHRyID0gJm5ld19hdHRy OwogICAgfQogIHJldHVybiBfX3B0aHJlYWRfY3JlYXRlXzJfMSAodGhyZWFkLCBhdHRyLCBzdGFy dF9yb3V0aW5lLCBhcmcpOwp9CmNvbXBhdF9zeW1ib2wgKGxpYnB0aHJlYWQsIF9fcHRocmVhZF9j cmVhdGVfMl8wLCBwdGhyZWFkX2NyZWF0ZSwgR0xJQkNfMl8wKTsKI2VuZGlmCgovKiBTaW1wbGUg b3BlcmF0aW9ucyBvbiB0aHJlYWQgaWRlbnRpZmllcnMgKi8KCnB0aHJlYWRfdCBwdGhyZWFkX3Nl bGYodm9pZCkKewogIHB0aHJlYWRfZGVzY3Igc2VsZiA9IHRocmVhZF9zZWxmKCk7CiAgcmV0dXJu IFRIUkVBRF9HRVRNRU0oc2VsZiwgcF90aWQpOwp9CgppbnQgcHRocmVhZF9lcXVhbChwdGhyZWFk X3QgdGhyZWFkMSwgcHRocmVhZF90IHRocmVhZDIpCnsKICByZXR1cm4gdGhyZWFkMSA9PSB0aHJl YWQyOwp9CgovKiBIZWxwZXIgZnVuY3Rpb24gZm9yIHRocmVhZF9zZWxmIGluIHRoZSBjYXNlIG9m IHVzZXItcHJvdmlkZWQgc3RhY2tzICovCgojaWZuZGVmIFRIUkVBRF9TRUxGCgpwdGhyZWFkX2Rl c2NyIF9fcHRocmVhZF9maW5kX3NlbGYodm9pZCkKewogIGNoYXIgKiBzcCA9IENVUlJFTlRfU1RB Q0tfRlJBTUU7CiAgcHRocmVhZF9oYW5kbGUgaDsKCiAgLyogX19wdGhyZWFkX2hhbmRsZXNbMF0g aXMgdGhlIGluaXRpYWwgdGhyZWFkLCBfX3B0aHJlYWRfaGFuZGxlc1sxXSBpcwogICAgIHRoZSBt YW5hZ2VyIHRocmVhZHMgaGFuZGxlZCBzcGVjaWFsbHkgaW4gdGhyZWFkX3NlbGYoKSwgc28gc3Rh cnQgYXQgMiAqLwogIGggPSBfX3B0aHJlYWRfaGFuZGxlcyArIDI7CiAgd2hpbGUgKCEgKHNwIDw9 IChjaGFyICopIGgtPmhfZGVzY3IgJiYgc3AgPj0gaC0+aF9ib3R0b20pKSBoKys7CiAgcmV0dXJu IGgtPmhfZGVzY3I7Cn0KCiNlbHNlCgpzdGF0aWMgcHRocmVhZF9kZXNjciB0aHJlYWRfc2VsZl9z dGFjayh2b2lkKQp7CiAgY2hhciAqc3AgPSBDVVJSRU5UX1NUQUNLX0ZSQU1FOwogIHB0aHJlYWRf aGFuZGxlIGg7CgogIGlmIChzcCA+PSBfX3B0aHJlYWRfbWFuYWdlcl90aHJlYWRfYm9zICYmIHNw IDwgX19wdGhyZWFkX21hbmFnZXJfdGhyZWFkX3RvcykKICAgIHJldHVybiAmX19wdGhyZWFkX21h bmFnZXJfdGhyZWFkOwogIGggPSBfX3B0aHJlYWRfaGFuZGxlcyArIDI7CiAgd2hpbGUgKCEgKHNw IDw9IChjaGFyICopIGgtPmhfZGVzY3IgJiYgc3AgPj0gaC0+aF9ib3R0b20pKQogICAgaCsrOwog IHJldHVybiBoLT5oX2Rlc2NyOwp9CgojZW5kaWYKCi8qIFRocmVhZCBzY2hlZHVsaW5nICovCgpp bnQgcHRocmVhZF9zZXRzY2hlZHBhcmFtKHB0aHJlYWRfdCB0aHJlYWQsIGludCBwb2xpY3ksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpwYXJhbSkK ewogIHB0aHJlYWRfaGFuZGxlIGhhbmRsZSA9IHRocmVhZF9oYW5kbGUodGhyZWFkKTsKICBwdGhy ZWFkX2Rlc2NyIHRoOwoKICBfX3B0aHJlYWRfbG9jaygmaGFuZGxlLT5oX2xvY2ssIE5VTEwpOwog IGlmIChfX2J1aWx0aW5fZXhwZWN0IChpbnZhbGlkX2hhbmRsZShoYW5kbGUsIHRocmVhZCksIDAp KSB7CiAgICBfX3B0aHJlYWRfdW5sb2NrKCZoYW5kbGUtPmhfbG9jayk7CiAgICByZXR1cm4gRVNS Q0g7CiAgfQogIHRoID0gaGFuZGxlLT5oX2Rlc2NyOwogIGlmIChfX2J1aWx0aW5fZXhwZWN0IChf X3NjaGVkX3NldHNjaGVkdWxlcih0aC0+cF9waWQsIHBvbGljeSwgcGFyYW0pID09IC0xLAoJCQkw KSkgewogICAgX19wdGhyZWFkX3VubG9jaygmaGFuZGxlLT5oX2xvY2spOwogICAgcmV0dXJuIGVy cm5vOwogIH0KICB0aC0+cF9wcmlvcml0eSA9IHBvbGljeSA9PSBTQ0hFRF9PVEhFUiA/IDAgOiBw YXJhbS0+c2NoZWRfcHJpb3JpdHk7CiAgX19wdGhyZWFkX3VubG9jaygmaGFuZGxlLT5oX2xvY2sp OwogIGlmIChfX3B0aHJlYWRfbWFuYWdlcl9yZXF1ZXN0ID49IDApCiAgICBfX3B0aHJlYWRfbWFu YWdlcl9hZGp1c3RfcHJpbyh0aC0+cF9wcmlvcml0eSk7CiAgcmV0dXJuIDA7Cn0KCmludCBwdGhy ZWFkX2dldHNjaGVkcGFyYW0ocHRocmVhZF90IHRocmVhZCwgaW50ICpwb2xpY3ksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IHNjaGVkX3BhcmFtICpwYXJhbSkKewogIHB0aHJlYWRf aGFuZGxlIGhhbmRsZSA9IHRocmVhZF9oYW5kbGUodGhyZWFkKTsKICBpbnQgcGlkLCBwb2w7Cgog IF9fcHRocmVhZF9sb2NrKCZoYW5kbGUtPmhfbG9jaywgTlVMTCk7CiAgaWYgKF9fYnVpbHRpbl9l eHBlY3QgKGludmFsaWRfaGFuZGxlKGhhbmRsZSwgdGhyZWFkKSwgMCkpIHsKICAgIF9fcHRocmVh ZF91bmxvY2soJmhhbmRsZS0+aF9sb2NrKTsKICAgIHJldHVybiBFU1JDSDsKICB9CiAgcGlkID0g aGFuZGxlLT5oX2Rlc2NyLT5wX3BpZDsKICBfX3B0aHJlYWRfdW5sb2NrKCZoYW5kbGUtPmhfbG9j ayk7CiAgcG9sID0gX19zY2hlZF9nZXRzY2hlZHVsZXIocGlkKTsKICBpZiAoX19idWlsdGluX2V4 cGVjdCAocG9sLCAwKSA9PSAtMSkgcmV0dXJuIGVycm5vOwogIGlmIChfX3NjaGVkX2dldHBhcmFt KHBpZCwgcGFyYW0pID09IC0xKSByZXR1cm4gZXJybm87CiAgKnBvbGljeSA9IHBvbDsKICByZXR1 cm4gMDsKfQoKaW50IF9fcHRocmVhZF95aWVsZCAodm9pZCkKewogIC8qIEZvciBub3cgdGhpcyBp cyBlcXVpdmFsZW50IHdpdGggdGhlIFBPU0lYIGNhbGwuICAqLwogIHJldHVybiBzY2hlZF95aWVs ZCAoKTsKfQp3ZWFrX2FsaWFzIChfX3B0aHJlYWRfeWllbGQsIHB0aHJlYWRfeWllbGQpCgovKiBQ cm9jZXNzLXdpZGUgZXhpdCgpIHJlcXVlc3QgKi8KCnN0YXRpYyB2b2lkIHB0aHJlYWRfb25leGl0 X3Byb2Nlc3MoaW50IHJldGNvZGUsIHZvaWQgKmFyZykKewogIGlmIChfX2J1aWx0aW5fZXhwZWN0 IChfX3B0aHJlYWRfbWFuYWdlcl9yZXF1ZXN0LCAwKSA+PSAwKSB7CiAgICBzdHJ1Y3QgcHRocmVh ZF9yZXF1ZXN0IHJlcXVlc3Q7CiAgICBwdGhyZWFkX2Rlc2NyIHNlbGYgPSB0aHJlYWRfc2VsZigp OwoKICAgIHJlcXVlc3QucmVxX3RocmVhZCA9IHNlbGY7CiAgICByZXF1ZXN0LnJlcV9raW5kID0g UkVRX1BST0NFU1NfRVhJVDsKICAgIHJlcXVlc3QucmVxX2FyZ3MuZXhpdC5jb2RlID0gcmV0Y29k ZTsKICAgIFRFTVBfRkFJTFVSRV9SRVRSWShfX2xpYmNfd3JpdGUoX19wdGhyZWFkX21hbmFnZXJf cmVxdWVzdCwKCQkJCSAgICAoY2hhciAqKSAmcmVxdWVzdCwgc2l6ZW9mKHJlcXVlc3QpKSk7CiAg ICBzdXNwZW5kKHNlbGYpOwogICAgLyogTWFpbiB0aHJlYWQgc2hvdWxkIGFjY3VtdWxhdGUgdGlt ZXMgZm9yIHRocmVhZCBtYW5hZ2VyIGFuZCBpdHMKICAgICAgIGNoaWxkcmVuLCBzbyB0aGF0IHRp bWluZ3MgZm9yIG1haW4gdGhyZWFkIGFjY291bnQgZm9yIGFsbCB0aHJlYWRzLiAqLwogICAgaWYg KHNlbGYgPT0gX19wdGhyZWFkX21haW5fdGhyZWFkKQogICAgICB7Cgl3YWl0cGlkKF9fcHRocmVh ZF9tYW5hZ2VyX3RocmVhZC5wX3BpZCwgTlVMTCwgX19XQ0xPTkUpOwoJLyogU2luY2UgYWxsIHRo cmVhZHMgaGF2ZSBiZWVuIGFzeW5jaHJvbm91c2x5IHRlcm1pbmF0ZWQKICAgICAgICAgICAocG9z c2libHkgaG9sZGluZyBsb2NrcyksIGZyZWUgY2Fubm90IGJlIHVzZWQgYW55IG1vcmUuICAqLwoJ LypmcmVlIChfX3B0aHJlYWRfbWFuYWdlcl90aHJlYWRfYm9zKTsqLwoJX19wdGhyZWFkX21hbmFn ZXJfdGhyZWFkX2JvcyA9IF9fcHRocmVhZF9tYW5hZ2VyX3RocmVhZF90b3MgPSBOVUxMOwogICAg ICB9CiAgfQp9CgojaWZuZGVmIEhBVkVfWl9OT0RFTEVURQpzdGF0aWMgaW50IF9fcHRocmVhZF9h dGV4aXRfcmV0Y29kZTsKCnN0YXRpYyB2b2lkIHB0aHJlYWRfYXRleGl0X3Byb2Nlc3Modm9pZCAq YXJnLCBpbnQgcmV0Y29kZSkKewogIHB0aHJlYWRfb25leGl0X3Byb2Nlc3MgKHJldGNvZGUgPzog X19wdGhyZWFkX2F0ZXhpdF9yZXRjb2RlLCBhcmcpOwp9CgpzdGF0aWMgdm9pZCBwdGhyZWFkX2F0 ZXhpdF9yZXRjb2RlKHZvaWQgKmFyZywgaW50IHJldGNvZGUpCnsKICBfX3B0aHJlYWRfYXRleGl0 X3JldGNvZGUgPSByZXRjb2RlOwp9CiNlbmRpZgoKLyogVGhlIGhhbmRsZXIgZm9yIHRoZSBSRVNU QVJUIHNpZ25hbCBqdXN0IHJlY29yZHMgdGhlIHNpZ25hbCByZWNlaXZlZAogICBpbiB0aGUgdGhy ZWFkIGRlc2NyaXB0b3IsIGFuZCBvcHRpb25hbGx5IHBlcmZvcm1zIGEgc2lnbG9uZ2ptcAogICAo Zm9yIHB0aHJlYWRfY29uZF90aW1lZHdhaXQpLiAqLwoKc3RhdGljIHZvaWQgcHRocmVhZF9oYW5k bGVfc2lncmVzdGFydChpbnQgc2lnKQp7CiAgcHRocmVhZF9kZXNjciBzZWxmID0gdGhyZWFkX3Nl bGYoKTsKICBUSFJFQURfU0VUTUVNKHNlbGYsIHBfc2lnbmFsLCBzaWcpOwogIGlmIChUSFJFQURf R0VUTUVNKHNlbGYsIHBfc2lnbmFsX2ptcCkgIT0gTlVMTCkKICAgIHNpZ2xvbmdqbXAoKlRIUkVB RF9HRVRNRU0oc2VsZiwgcF9zaWduYWxfam1wKSwgMSk7Cn0KCi8qIFRoZSBoYW5kbGVyIGZvciB0 aGUgQ0FOQ0VMIHNpZ25hbCBjaGVja3MgZm9yIGNhbmNlbGxhdGlvbgogICAoaW4gYXN5bmNocm9u b3VzIG1vZGUpLCBmb3IgcHJvY2Vzcy13aWRlIGV4aXQgYW5kIGV4ZWMgcmVxdWVzdHMuCiAgIEZv ciB0aGUgdGhyZWFkIG1hbmFnZXIgdGhyZWFkLCByZWRpcmVjdCB0aGUgc2lnbmFsIHRvCiAgIF9f cHRocmVhZF9tYW5hZ2VyX3NpZ2hhbmRsZXIuICovCgpzdGF0aWMgdm9pZCBwdGhyZWFkX2hhbmRs ZV9zaWdjYW5jZWwoaW50IHNpZykKewogIHB0aHJlYWRfZGVzY3Igc2VsZiA9IHRocmVhZF9zZWxm KCk7CiAgc2lnam1wX2J1ZiAqIGptcGJ1ZjsKCiAgaWYgKHNlbGYgPT0gJl9fcHRocmVhZF9tYW5h Z2VyX3RocmVhZCkKICAgIHsKI2lmZGVmIFRIUkVBRF9TRUxGCiAgICAgIC8qIEEgbmV3IHRocmVh ZCBtaWdodCBnZXQgYSBjYW5jZWwgc2lnbmFsIGJlZm9yZSBpdCBpcyBmdWxseQoJIGluaXRpYWxp emVkLCBzbyB0aGF0IHRoZSB0aHJlYWQgcmVnaXN0ZXIgbWlnaHQgc3RpbGwgcG9pbnQgdG8gdGhl CgkgbWFuYWdlciB0aHJlYWQuICBEb3VibGUgY2hlY2sgdGhhdCB0aGlzIGlzIHJlYWxseSB0aGUg bWFuYWdlcgoJIHRocmVhZC4gICovCiAgICAgIHB0aHJlYWRfZGVzY3IgcmVhbF9zZWxmID0gdGhy ZWFkX3NlbGZfc3RhY2soKTsKICAgICAgaWYgKHJlYWxfc2VsZiA9PSAmX19wdGhyZWFkX21hbmFn ZXJfdGhyZWFkKQoJewoJICBfX3B0aHJlYWRfbWFuYWdlcl9zaWdoYW5kbGVyKHNpZyk7CgkgIHJl dHVybjsKCX0KICAgICAgLyogT29wcywgdGhyZWFkX3NlbGYoKSBpc24ndCB3b3JraW5nIHlldC4u ICAqLwogICAgICBzZWxmID0gcmVhbF9zZWxmOwojIGlmZGVmIElOSVRfVEhSRUFEX1NFTEYKICAg ICAgSU5JVF9USFJFQURfU0VMRihzZWxmLCBzZWxmLT5wX25yKTsKIyBlbmRpZgojZWxzZQogICAg ICBfX3B0aHJlYWRfbWFuYWdlcl9zaWdoYW5kbGVyKHNpZyk7CiAgICAgIHJldHVybjsKI2VuZGlm CiAgICB9CiAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKF9fcHRocmVhZF9leGl0X3JlcXVlc3RlZCwg MCkpIHsKICAgIC8qIE1haW4gdGhyZWFkIHNob3VsZCBhY2N1bXVsYXRlIHRpbWVzIGZvciB0aHJl YWQgbWFuYWdlciBhbmQgaXRzCiAgICAgICBjaGlsZHJlbiwgc28gdGhhdCB0aW1pbmdzIGZvciBt YWluIHRocmVhZCBhY2NvdW50IGZvciBhbGwgdGhyZWFkcy4gKi8KICAgIGlmIChzZWxmID09IF9f cHRocmVhZF9tYWluX3RocmVhZCkKICAgICAgd2FpdHBpZChfX3B0aHJlYWRfbWFuYWdlcl90aHJl YWQucF9waWQsIE5VTEwsIF9fV0NMT05FKTsKICAgIF9leGl0KF9fcHRocmVhZF9leGl0X2NvZGUp OwogIH0KICBpZiAoX19idWlsdGluX2V4cGVjdCAoVEhSRUFEX0dFVE1FTShzZWxmLCBwX2NhbmNl bGVkKSwgMCkKICAgICAgJiYgVEhSRUFEX0dFVE1FTShzZWxmLCBwX2NhbmNlbHN0YXRlKSA9PSBQ VEhSRUFEX0NBTkNFTF9FTkFCTEUpIHsKICAgIGlmIChUSFJFQURfR0VUTUVNKHNlbGYsIHBfY2Fu Y2VsdHlwZSkgPT0gUFRIUkVBRF9DQU5DRUxfQVNZTkNIUk9OT1VTKQogICAgICBfX3B0aHJlYWRf ZG9fZXhpdChQVEhSRUFEX0NBTkNFTEVELCBDVVJSRU5UX1NUQUNLX0ZSQU1FKTsKICAgIGptcGJ1 ZiA9IFRIUkVBRF9HRVRNRU0oc2VsZiwgcF9jYW5jZWxfam1wKTsKICAgIGlmIChqbXBidWYgIT0g TlVMTCkgewogICAgICBUSFJFQURfU0VUTUVNKHNlbGYsIHBfY2FuY2VsX2ptcCwgTlVMTCk7CiAg ICAgIHNpZ2xvbmdqbXAoKmptcGJ1ZiwgMSk7CiAgICB9CiAgfQp9CgovKiBIYW5kbGVyIGZvciB0 aGUgREVCVUcgc2lnbmFsLgogICBUaGUgZGVidWdnaW5nIHN0cmF0ZWd5IGlzIGFzIGZvbGxvd3M6 CiAgIE9uIHJlY2VwdGlvbiBvZiBhIFJFUV9ERUJVRyByZXF1ZXN0IChzZW50IGJ5IG5ldyB0aHJl YWRzIGNyZWF0ZWQgdG8KICAgdGhlIHRocmVhZCBtYW5hZ2VyIHVuZGVyIGRlYnVnZ2luZyBtb2Rl KSwgdGhlIHRocmVhZCBtYW5hZ2VyIHRocm93cwogICBfX3B0aHJlYWRfc2lnX2RlYnVnIHRvIGl0 c2VsZi4gVGhlIGRlYnVnZ2VyIChpZiBhY3RpdmUpIGludGVyY2VwdHMKICAgdGhpcyBzaWduYWws IHRha2VzIGludG8gYWNjb3VudCBuZXcgdGhyZWFkcyBhbmQgY29udGludWUgZXhlY3V0aW9uCiAg IG9mIHRoZSB0aHJlYWQgbWFuYWdlciBieSBwcm9wYWdhdGluZyB0aGUgc2lnbmFsIGJlY2F1c2Ug aXQgZG9lc24ndAogICBrbm93IHdoYXQgaXQgaXMgc3BlY2lmaWNhbGx5IGRvbmUgZm9yLiBJbiB0 aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwKICAgdGhlIHRocmVhZCBtYW5hZ2VyIHNpbXBseSBk aXNjYXJkcyBpdC4gKi8KCnN0YXRpYyB2b2lkIHB0aHJlYWRfaGFuZGxlX3NpZ2RlYnVnKGludCBz aWcpCnsKICAvKiBOb3RoaW5nICovCn0KCi8qIFJlc2V0IHRoZSBzdGF0ZSBvZiB0aGUgdGhyZWFk IG1hY2hpbmVyeSBhZnRlciBhIGZvcmsoKS4KICAgQ2xvc2UgdGhlIHBpcGUgdXNlZCBmb3IgcmVx dWVzdHMgYW5kIHNldCB0aGUgbWFpbiB0aHJlYWQgdG8gdGhlIGZvcmtlZAogICB0aHJlYWQuCiAg IE5vdGljZSB0aGF0IHdlIGNhbid0IGZyZWUgdGhlIHN0YWNrIHNlZ21lbnRzLCBhcyB0aGUgZm9y a2VkIHRocmVhZAogICBtYXkgaG9sZCBwb2ludGVycyBpbnRvIHRoZW0uICovCgp2b2lkIF9fcHRo cmVhZF9yZXNldF9tYWluX3RocmVhZCh2b2lkKQp7CiAgcHRocmVhZF9kZXNjciBzZWxmID0gdGhy ZWFkX3NlbGYoKTsKICBzdHJ1Y3QgcmxpbWl0IGxpbWl0OwoKICBpZiAoX19wdGhyZWFkX21hbmFn ZXJfcmVxdWVzdCAhPSAtMSkgewogICAgLyogRnJlZSB0aGUgdGhyZWFkIG1hbmFnZXIgc3RhY2sg Ki8KICAgIGZyZWUoX19wdGhyZWFkX21hbmFnZXJfdGhyZWFkX2Jvcyk7CiAgICBfX3B0aHJlYWRf bWFuYWdlcl90aHJlYWRfYm9zID0gX19wdGhyZWFkX21hbmFnZXJfdGhyZWFkX3RvcyA9IE5VTEw7 CiAgICAvKiBDbG9zZSB0aGUgdHdvIGVuZHMgb2YgdGhlIHBpcGUgKi8KICAgIF9fbGliY19jbG9z ZShfX3B0aHJlYWRfbWFuYWdlcl9yZXF1ZXN0KTsKICAgIF9fbGliY19jbG9zZShfX3B0aHJlYWRf bWFuYWdlcl9yZWFkZXIpOwogICAgX19wdGhyZWFkX21hbmFnZXJfcmVxdWVzdCA9IF9fcHRocmVh ZF9tYW5hZ2VyX3JlYWRlciA9IC0xOwogIH0KCiAgLyogVXBkYXRlIHRoZSBwaWQgb2YgdGhlIG1h aW4gdGhyZWFkICovCiAgVEhSRUFEX1NFVE1FTShzZWxmLCBwX3BpZCwgX19nZXRwaWQoKSk7CiAg LyogTWFrZSB0aGUgZm9ya2VkIHRocmVhZCB0aGUgbWFpbiB0aHJlYWQgKi8KICBfX3B0aHJlYWRf bWFpbl90aHJlYWQgPSBzZWxmOwogIFRIUkVBRF9TRVRNRU0oc2VsZiwgcF9uZXh0bGl2ZSwgc2Vs Zik7CiAgVEhSRUFEX1NFVE1FTShzZWxmLCBwX3ByZXZsaXZlLCBzZWxmKTsKICAvKiBOb3cgdGhp cyB0aHJlYWQgbW9kaWZpZXMgdGhlIGdsb2JhbCB2YXJpYWJsZXMuICAqLwogIFRIUkVBRF9TRVRN RU0oc2VsZiwgcF9lcnJub3AsICZfZXJybm8pOwogIFRIUkVBRF9TRVRNRU0oc2VsZiwgcF9oX2Vy cm5vcCwgJl9oX2Vycm5vKTsKICBUSFJFQURfU0VUTUVNKHNlbGYsIHBfcmVzcCwgJl9yZXMpOwoK ICBpZiAoZ2V0cmxpbWl0IChSTElNSVRfU1RBQ0ssICZsaW1pdCkgPT0gMAogICAgICAmJiBsaW1p dC5ybGltX2N1ciAhPSBsaW1pdC5ybGltX21heCkgewogICAgbGltaXQucmxpbV9jdXIgPSBsaW1p dC5ybGltX21heDsKICAgIHNldHJsaW1pdChSTElNSVRfU1RBQ0ssICZsaW1pdCk7CiAgfQp9Cgov KiBQcm9jZXNzLXdpZGUgZXhlYygpIHJlcXVlc3QgKi8KCnZvaWQgX19wdGhyZWFkX2tpbGxfb3Ro ZXJfdGhyZWFkc19ucCh2b2lkKQp7CiAgc3RydWN0IHNpZ2FjdGlvbiBzYTsKICAvKiBUZXJtaW5h dGUgYWxsIG90aGVyIHRocmVhZHMgYW5kIHRocmVhZCBtYW5hZ2VyICovCiAgcHRocmVhZF9vbmV4 aXRfcHJvY2VzcygwLCBOVUxMKTsKICAvKiBNYWtlIGN1cnJlbnQgdGhyZWFkIHRoZSBtYWluIHRo cmVhZCBpbiBjYXNlIHRoZSBjYWxsaW5nIHRocmVhZAogICAgIGNoYW5nZXMgaXRzIG1pbmQsIGRv ZXMgbm90IGV4ZWMoKSwgYW5kIGNyZWF0ZXMgbmV3IHRocmVhZHMgaW5zdGVhZC4gKi8KICBfX3B0 aHJlYWRfcmVzZXRfbWFpbl90aHJlYWQoKTsKCiAgLyogUmVzZXQgdGhlIHNpZ25hbCBoYW5kbGVy cyBiZWhhdmlvdXIgZm9yIHRoZSBzaWduYWxzIHRoZQogICAgIGltcGxlbWVudGF0aW9uIHVzZXMg c2luY2UgdGhpcyB3b3VsZCBiZSBwYXNzZWQgdG8gdGhlIG5ldwogICAgIHByb2Nlc3MuICAqLwog IHNpZ2VtcHR5c2V0KCZzYS5zYV9tYXNrKTsKICBzYS5zYV9mbGFncyA9IDA7CiAgc2Euc2FfaGFu ZGxlciA9IFNJR19ERkw7CiAgX19saWJjX3NpZ2FjdGlvbihfX3B0aHJlYWRfc2lnX3Jlc3RhcnQs ICZzYSwgTlVMTCk7CiAgX19saWJjX3NpZ2FjdGlvbihfX3B0aHJlYWRfc2lnX2NhbmNlbCwgJnNh LCBOVUxMKTsKICBpZiAoX19wdGhyZWFkX3NpZ19kZWJ1ZyA+IDApCiAgICBfX2xpYmNfc2lnYWN0 aW9uKF9fcHRocmVhZF9zaWdfZGVidWcsICZzYSwgTlVMTCk7Cn0Kd2Vha19hbGlhcyAoX19wdGhy ZWFkX2tpbGxfb3RoZXJfdGhyZWFkc19ucCwgcHRocmVhZF9raWxsX290aGVyX3RocmVhZHNfbnAp CgovKiBDb25jdXJyZW5jeSBzeW1ib2wgbGV2ZWwuICAqLwpzdGF0aWMgaW50IGN1cnJlbnRfbGV2 ZWw7CgppbnQgX19wdGhyZWFkX3NldGNvbmN1cnJlbmN5KGludCBsZXZlbCkKewogIC8qIFdlIGRv bid0IGRvIGFueXRoaW5nIHVubGVzcyB3ZSBoYXZlIGZvdW5kIGEgdXNlZnVsIGludGVycHJldGF0 aW9uLiAgKi8KICBjdXJyZW50X2xldmVsID0gbGV2ZWw7CiAgcmV0dXJuIDA7Cn0Kd2Vha19hbGlh cyAoX19wdGhyZWFkX3NldGNvbmN1cnJlbmN5LCBwdGhyZWFkX3NldGNvbmN1cnJlbmN5KQoKaW50 IF9fcHRocmVhZF9nZXRjb25jdXJyZW5jeSh2b2lkKQp7CiAgcmV0dXJuIGN1cnJlbnRfbGV2ZWw7 Cn0Kd2Vha19hbGlhcyAoX19wdGhyZWFkX2dldGNvbmN1cnJlbmN5LCBwdGhyZWFkX2dldGNvbmN1 cnJlbmN5KQoKLyogUHJpbWl0aXZlcyBmb3IgY29udHJvbGxpbmcgdGhyZWFkIGV4ZWN1dGlvbiAq LwoKdm9pZCBfX3B0aHJlYWRfd2FpdF9mb3JfcmVzdGFydF9zaWduYWwocHRocmVhZF9kZXNjciBz ZWxmKQp7CiAgc2lnc2V0X3QgbWFzazsKCiAgc2lncHJvY21hc2soU0lHX1NFVE1BU0ssIE5VTEws ICZtYXNrKTsgLyogR2V0IGN1cnJlbnQgc2lnbmFsIG1hc2sgKi8KICBzaWdkZWxzZXQoJm1hc2ss IF9fcHRocmVhZF9zaWdfcmVzdGFydCk7IC8qIFVuYmxvY2sgdGhlIHJlc3RhcnQgc2lnbmFsICov CiAgVEhSRUFEX1NFVE1FTShzZWxmLCBwX3NpZ25hbCwgMCk7CiAgZG8gewogICAgc2lnc3VzcGVu ZCgmbWFzayk7ICAgICAgICAgICAgICAgICAgIC8qIFdhaXQgZm9yIHNpZ25hbCAqLwogIH0gd2hp bGUgKFRIUkVBRF9HRVRNRU0oc2VsZiwgcF9zaWduYWwpICE9X19wdGhyZWFkX3NpZ19yZXN0YXJ0 KTsKCiAgUkVBRF9NRU1PUllfQkFSUklFUigpOyAvKiBTZWUgY29tbWVudCBpbiBfX3B0aHJlYWRf cmVzdGFydF9uZXcgKi8KfQoKI2lmICFfX0FTU1VNRV9SRUFMVElNRV9TSUdOQUxTCi8qIFRoZSBf b2xkIHZhcmlhbnRzIGFyZSBmb3IgMi4wIGFuZCBlYXJseSAyLjEga2VybmVscyB3aGljaCBkb24n dCBoYXZlIFJUCiAgIHNpZ25hbHMuCiAgIE9uIHRoZXNlIGtlcm5lbHMsIHdlIHVzZSBTSUdVU1Ix IGFuZCBTSUdVU1IyIGZvciByZXN0YXJ0IGFuZCBjYW5jZWxsYXRpb24uCiAgIFNpbmNlIHRoZSBy ZXN0YXJ0IHNpZ25hbCBkb2VzIG5vdCBxdWV1ZSwgd2UgdXNlIGFuIGF0b21pYyBjb3VudGVyIHRv IGNyZWF0ZQogICBxdWV1aW5nIHNlbWFudGljcy4gVGhpcyBpcyBuZWVkZWQgdG8gcmVzb2x2ZSBh IHJhcmUgcmFjZSBjb25kaXRpb24gaW4KICAgcHRocmVhZF9jb25kX3RpbWVkd2FpdF9yZWxhdGl2 ZS4gKi8KCnZvaWQgX19wdGhyZWFkX3Jlc3RhcnRfb2xkKHB0aHJlYWRfZGVzY3IgdGgpCnsKICBp ZiAoYXRvbWljX2luY3JlbWVudCgmdGgtPnBfcmVzdW1lX2NvdW50KSA9PSAtMSkKICAgIGtpbGwo dGgtPnBfcGlkLCBfX3B0aHJlYWRfc2lnX3Jlc3RhcnQpOwp9Cgp2b2lkIF9fcHRocmVhZF9zdXNw ZW5kX29sZChwdGhyZWFkX2Rlc2NyIHNlbGYpCnsKICBpZiAoYXRvbWljX2RlY3JlbWVudCgmc2Vs Zi0+cF9yZXN1bWVfY291bnQpIDw9IDApCiAgICBfX3B0aHJlYWRfd2FpdF9mb3JfcmVzdGFydF9z aWduYWwoc2VsZik7Cn0KCmludApfX3B0aHJlYWRfdGltZWRzdXNwZW5kX29sZChwdGhyZWFkX2Rl c2NyIHNlbGYsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqYWJzdGltZSkKewogIHNpZ3NldF90IHVu YmxvY2ssIGluaXRpYWxfbWFzazsKICBpbnQgd2FzX3NpZ25hbGxlZCA9IDA7CiAgc2lnam1wX2J1 ZiBqbXBidWY7CgogIGlmIChhdG9taWNfZGVjcmVtZW50KCZzZWxmLT5wX3Jlc3VtZV9jb3VudCkg PT0gMCkgewogICAgLyogU2V0IHVwIGEgbG9uZ2ptcCBoYW5kbGVyIGZvciB0aGUgcmVzdGFydCBz aWduYWwsIHVuYmxvY2sKICAgICAgIHRoZSBzaWduYWwgYW5kIHNsZWVwLiAqLwoKICAgIGlmIChz aWdzZXRqbXAoam1wYnVmLCAxKSA9PSAwKSB7CiAgICAgIFRIUkVBRF9TRVRNRU0oc2VsZiwgcF9z aWduYWxfam1wLCAmam1wYnVmKTsKICAgICAgVEhSRUFEX1NFVE1FTShzZWxmLCBwX3NpZ25hbCwg MCk7CiAgICAgIC8qIFVuYmxvY2sgdGhlIHJlc3RhcnQgc2lnbmFsICovCiAgICAgIHNpZ2VtcHR5 c2V0KCZ1bmJsb2NrKTsKICAgICAgc2lnYWRkc2V0KCZ1bmJsb2NrLCBfX3B0aHJlYWRfc2lnX3Jl c3RhcnQpOwogICAgICBzaWdwcm9jbWFzayhTSUdfVU5CTE9DSywgJnVuYmxvY2ssICZpbml0aWFs X21hc2spOwoKICAgICAgd2hpbGUgKDEpIHsKCXN0cnVjdCB0aW1ldmFsIG5vdzsKCXN0cnVjdCB0 aW1lc3BlYyByZWx0aW1lOwoKCS8qIENvbXB1dGUgYSB0aW1lIG9mZnNldCByZWxhdGl2ZSB0byBu b3cuICAqLwoJX19nZXR0aW1lb2ZkYXkgKCZub3csIE5VTEwpOwoJcmVsdGltZS50dl9uc2VjID0g YWJzdGltZS0+dHZfbnNlYyAtIG5vdy50dl91c2VjICogMTAwMDsKCXJlbHRpbWUudHZfc2VjID0g YWJzdGltZS0+dHZfc2VjIC0gbm93LnR2X3NlYzsKCWlmIChyZWx0aW1lLnR2X25zZWMgPCAwKSB7 CgkgIHJlbHRpbWUudHZfbnNlYyArPSAxMDAwMDAwMDAwOwoJICByZWx0aW1lLnR2X3NlYyAtPSAx OwoJfQoKCS8qIFNsZWVwIGZvciB0aGUgcmVxdWlyZWQgZHVyYXRpb24uIElmIHdva2VuIGJ5IGEg c2lnbmFsLAoJICAgcmVzdW1lIHdhaXRpbmcgYXMgcmVxdWlyZWQgYnkgU2luZ2xlIFVuaXggU3Bl Y2lmaWNhdGlvbi4gICovCglpZiAocmVsdGltZS50dl9zZWMgPCAwIHx8IF9fbGliY19uYW5vc2xl ZXAoJnJlbHRpbWUsIE5VTEwpID09IDApCgkgIGJyZWFrOwogICAgICB9CgogICAgICAvKiBCbG9j ayB0aGUgcmVzdGFydCBzaWduYWwgYWdhaW4gKi8KICAgICAgc2lncHJvY21hc2soU0lHX1NFVE1B U0ssICZpbml0aWFsX21hc2ssIE5VTEwpOwogICAgICB3YXNfc2lnbmFsbGVkID0gMDsKICAgIH0g ZWxzZSB7CiAgICAgIHdhc19zaWduYWxsZWQgPSAxOwogICAgfQogICAgVEhSRUFEX1NFVE1FTShz ZWxmLCBwX3NpZ25hbF9qbXAsIE5VTEwpOwogIH0KCiAgLyogTm93IHdhc19zaWduYWxsZWQgaXMg dHJ1ZSBpZiB3ZSBleGl0ZWQgdGhlIGFib3ZlIGNvZGUKICAgICBkdWUgdG8gdGhlIGRlbGl2ZXJ5 IG9mIGEgcmVzdGFydCBzaWduYWwuICBJbiB0aGF0IGNhc2UsCiAgICAgd2Uga25vdyB3ZSBoYXZl IGJlZW4gZGVxdWV1ZWQgYW5kIHJlc3VtZWQgYW5kIHRoYXQgdGhlCiAgICAgcmVzdW1lIGNvdW50 IGlzIGJhbGFuY2VkLiAgT3RoZXJ3aXNlLCB0aGVyZSBhcmUgc29tZQogICAgIGNhc2VzIHRvIGNv bnNpZGVyLiBGaXJzdCwgdHJ5IHRvIGJ1bXAgdXAgdGhlIHJlc3VtZSBjb3VudAogICAgIGJhY2sg dG8gemVyby4gSWYgaXQgZ29lcyB0byAxLCBpdCBtZWFucyByZXN0YXJ0KCkgd2FzCiAgICAgaW52 b2tlZCBvbiB0aGlzIHRocmVhZC4gVGhlIHNpZ25hbCBtdXN0IGJlIGNvbnN1bWVkCiAgICAgYW5k IHRoZSBjb3VudCBidW1wZWQgZG93biBhbmQgZXZlcnl0aGluZyBpcyBjb29sLiBXZQogICAgIGNh biByZXR1cm4gYSAxIHRvIHRoZSBjYWxsZXIuCiAgICAgT3RoZXJ3aXNlLCBubyByZXN0YXJ0IHdh cyBkZWxpdmVyZWQgeWV0LCBzbyBhIHBvdGVudGlhbAogICAgIHJhY2UgZXhpc3RzOyB3ZSByZXR1 cm4gYSAwIHRvIHRoZSBjYWxsZXIgd2hpY2ggbXVzdCBkZWFsCiAgICAgd2l0aCB0aGlzIHJhY2Ug aW4gYW4gYXBwcm9wcmlhdGUgd2F5OyBmb3IgZXhhbXBsZSBieQogICAgIGF0b21pY2FsbHkgcmVt b3ZpbmcgdGhlIHRocmVhZCBmcm9tIGNvbnNpZGVyYXRpb24gZm9yIGEKICAgICB3YWtldXAtLS1p ZiBzdWNoIGEgdGhpbmcgZmFpbHMsIGl0IG1lYW5zIGEgcmVzdGFydCBpcwogICAgIGJlaW5nIGRl bGl2ZXJlZC4gKi8KCiAgaWYgKCF3YXNfc2lnbmFsbGVkKSB7CiAgICBpZiAoYXRvbWljX2luY3Jl bWVudCgmc2VsZi0+cF9yZXN1bWVfY291bnQpICE9IC0xKSB7CiAgICAgIF9fcHRocmVhZF93YWl0 X2Zvcl9yZXN0YXJ0X3NpZ25hbChzZWxmKTsKICAgICAgYXRvbWljX2RlY3JlbWVudCgmc2VsZi0+ cF9yZXN1bWVfY291bnQpOyAvKiBzaG91bGQgYmUgemVybyBub3chICovCiAgICAgIC8qIHdva2Ug c3BvbnRhbmVvdXNseSBhbmQgY29uc3VtZWQgcmVzdGFydCBzaWduYWwgKi8KICAgICAgcmV0dXJu IDE7CiAgICB9CiAgICAvKiB3b2tlIHNwb250YW5lb3VzbHkgYnV0IGRpZCBub3QgY29uc3VtZSBy ZXN0YXJ0LS0tY2FsbGVyIG11c3QgcmVzb2x2ZSAqLwogICAgcmV0dXJuIDA7CiAgfQogIC8qIHdv a2VuIGR1ZSB0byByZXN0YXJ0IHNpZ25hbCAqLwogIHJldHVybiAxOwp9CiNlbmRpZiAvKiBfX0FT U1VNRV9SRUFMVElNRV9TSUdOQUxTICovCgp2b2lkIF9fcHRocmVhZF9yZXN0YXJ0X25ldyhwdGhy ZWFkX2Rlc2NyIHRoKQp7CiAgLyogVGhlIGJhcnJpZXIgaXMgcHJvYWJhYmx5IG5vdCBuZWVkZWQs IGluIHdoaWNoIGNhc2UgaXQgc3RpbGwgZG9jdW1lbnRzCiAgICAgb3VyIGFzc3VtcHRpb25zLiBU aGUgaW50ZW50IGlzIHRvIGNvbW1pdCBwcmV2aW91cyB3cml0ZXMgdG8gc2hhcmVkCiAgICAgbWVt b3J5IHNvIHRoZSB3b2tlbiB0aHJlYWQgd2lsbCBoYXZlIGEgY29uc2lzdGVudCB2aWV3LiAgQ29t cGxlbWVudGFyeQogICAgIHJlYWQgYmFycmllcnMgYXJlIHByZXNlbnQgdG8gdGhlIHN1c3BlbmQg ZnVuY3Rpb25zLiAqLwogIFdSSVRFX01FTU9SWV9CQVJSSUVSKCk7CiAga2lsbCh0aC0+cF9waWQs IF9fcHRocmVhZF9zaWdfcmVzdGFydCk7Cn0KCi8qIFRoZXJlIGlzIG5vIF9fcHRocmVhZF9zdXNw ZW5kX25ldyBiZWNhdXNlIGl0IHdvdWxkIGp1c3QKICAgYmUgYSB3YXN0ZWZ1bCB3cmFwcGVyIGZv ciBfX3B0aHJlYWRfd2FpdF9mb3JfcmVzdGFydF9zaWduYWwgKi8KCmludApfX3B0aHJlYWRfdGlt ZWRzdXNwZW5kX25ldyhwdGhyZWFkX2Rlc2NyIHNlbGYsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAq YWJzdGltZSkKewogIHNpZ3NldF90IHVuYmxvY2ssIGluaXRpYWxfbWFzazsKICBpbnQgd2FzX3Np Z25hbGxlZCA9IDA7CiAgc2lnam1wX2J1ZiBqbXBidWY7CgogIGlmIChzaWdzZXRqbXAoam1wYnVm LCAxKSA9PSAwKSB7CiAgICBUSFJFQURfU0VUTUVNKHNlbGYsIHBfc2lnbmFsX2ptcCwgJmptcGJ1 Zik7CiAgICBUSFJFQURfU0VUTUVNKHNlbGYsIHBfc2lnbmFsLCAwKTsKICAgIC8qIFVuYmxvY2sg dGhlIHJlc3RhcnQgc2lnbmFsICovCiAgICBzaWdlbXB0eXNldCgmdW5ibG9jayk7CiAgICBzaWdh ZGRzZXQoJnVuYmxvY2ssIF9fcHRocmVhZF9zaWdfcmVzdGFydCk7CiAgICBzaWdwcm9jbWFzayhT SUdfVU5CTE9DSywgJnVuYmxvY2ssICZpbml0aWFsX21hc2spOwoKICAgIHdoaWxlICgxKSB7CiAg ICAgIHN0cnVjdCB0aW1ldmFsIG5vdzsKICAgICAgc3RydWN0IHRpbWVzcGVjIHJlbHRpbWU7Cgog ICAgICAvKiBDb21wdXRlIGEgdGltZSBvZmZzZXQgcmVsYXRpdmUgdG8gbm93LiAgKi8KICAgICAg X19nZXR0aW1lb2ZkYXkgKCZub3csIE5VTEwpOwogICAgICByZWx0aW1lLnR2X25zZWMgPSBhYnN0 aW1lLT50dl9uc2VjIC0gbm93LnR2X3VzZWMgKiAxMDAwOwogICAgICByZWx0aW1lLnR2X3NlYyA9 IGFic3RpbWUtPnR2X3NlYyAtIG5vdy50dl9zZWM7CiAgICAgIGlmIChyZWx0aW1lLnR2X25zZWMg PCAwKSB7CglyZWx0aW1lLnR2X25zZWMgKz0gMTAwMDAwMDAwMDsKCXJlbHRpbWUudHZfc2VjIC09 IDE7CiAgICAgIH0KCiAgICAgIC8qIFNsZWVwIGZvciB0aGUgcmVxdWlyZWQgZHVyYXRpb24uIElm IHdva2VuIGJ5IGEgc2lnbmFsLAoJIHJlc3VtZSB3YWl0aW5nIGFzIHJlcXVpcmVkIGJ5IFNpbmds ZSBVbml4IFNwZWNpZmljYXRpb24uICAqLwogICAgICBpZiAocmVsdGltZS50dl9zZWMgPCAwIHx8 IF9fbGliY19uYW5vc2xlZXAoJnJlbHRpbWUsIE5VTEwpID09IDApCglicmVhazsKICAgIH0KCiAg ICAvKiBCbG9jayB0aGUgcmVzdGFydCBzaWduYWwgYWdhaW4gKi8KICAgIHNpZ3Byb2NtYXNrKFNJ R19TRVRNQVNLLCAmaW5pdGlhbF9tYXNrLCBOVUxMKTsKICAgIHdhc19zaWduYWxsZWQgPSAwOwog IH0gZWxzZSB7CiAgICB3YXNfc2lnbmFsbGVkID0gMTsKICB9CiAgVEhSRUFEX1NFVE1FTShzZWxm LCBwX3NpZ25hbF9qbXAsIE5VTEwpOwoKICAvKiBOb3cgd2FzX3NpZ25hbGxlZCBpcyB0cnVlIGlm IHdlIGV4aXRlZCB0aGUgYWJvdmUgY29kZQogICAgIGR1ZSB0byB0aGUgZGVsaXZlcnkgb2YgYSBy ZXN0YXJ0IHNpZ25hbC4gIEluIHRoYXQgY2FzZSwKICAgICBldmVyeXRoaW5nIGlzIGNvb2wuIFdl IGhhdmUgYmVlbiByZW1vdmVkIGZyb20gd2hhdGV2ZXIKICAgICB3ZSB3ZXJlIHdhaXRpbmcgb24g YnkgdGhlIG90aGVyIHRocmVhZCwgYW5kIGNvbnN1bWVkIGl0cyBzaWduYWwuCgogICAgIE90aGVy d2lzZSB3ZSB0aGlzIHRocmVhZCB3b2tlIHVwIHNwb250YW5lb3VzbHksIG9yIGR1ZSB0byBhIHNp Z25hbCBvdGhlcgogICAgIHRoYW4gcmVzdGFydC4gVGhpcyBpcyBhbiBhbWJpZ3VvdXMgY2FzZSAg dGhhdCBtdXN0IGJlIHJlc29sdmVkIGJ5CiAgICAgdGhlIGNhbGxlcjsgdGhlIHRocmVhZCBpcyBz dGlsbCBlbGlnaWJsZSBmb3IgYSByZXN0YXJ0IHdha2V1cAogICAgIHNvIHRoZXJlIGlzIGEgcmFj ZS4gKi8KCiAgUkVBRF9NRU1PUllfQkFSUklFUigpOyAvKiBTZWUgY29tbWVudCBpbiBfX3B0aHJl YWRfcmVzdGFydF9uZXcgKi8KICByZXR1cm4gd2FzX3NpZ25hbGxlZDsKfQoKCi8qIERlYnVnZ2lu ZyBhaWQgKi8KCiNpZmRlZiBERUJVRwojaW5jbHVkZSA8c3RkYXJnLmg+Cgp2b2lkIF9fcHRocmVh ZF9tZXNzYWdlKGNoYXIgKiBmbXQsIC4uLikKewogIGNoYXIgYnVmZmVyWzEwMjRdOwogIHZhX2xp c3QgYXJnczsKICBzcHJpbnRmKGJ1ZmZlciwgIiUwNWQgOiAiLCBfX2dldHBpZCgpKTsKICB2YV9z dGFydChhcmdzLCBmbXQpOwogIHZzbnByaW50ZihidWZmZXIgKyA4LCBzaXplb2YoYnVmZmVyKSAt IDgsIGZtdCwgYXJncyk7CiAgdmFfZW5kKGFyZ3MpOwogIFRFTVBfRkFJTFVSRV9SRVRSWShfX2xp YmNfd3JpdGUoMiwgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSkpOwp9CgojZW5kaWYKCgojaWZuZGVm IFNIQVJFRAovKiBXZSBuZWVkIGEgaG9vayB0byBmb3JjZSB0aGUgY2FuY2VsYXRpb24gd3JhcHBl cnMgYW5kIGZpbGUgbG9ja2luZwogICB0byBiZSBsaW5rZWQgaW4gd2hlbiBzdGF0aWMgbGlicHRo cmVhZCBpcyB1c2VkLiAgKi8KZXh0ZXJuIGNvbnN0IGludCBfX3B0aHJlYWRfcHJvdmlkZV93cmFw cGVyczsKc3RhdGljIGNvbnN0IGludCAqY29uc3QgX19wdGhyZWFkX3JlcXVpcmVfd3JhcHBlcnMg PQogICZfX3B0aHJlYWRfcHJvdmlkZV93cmFwcGVyczsKZXh0ZXJuIGNvbnN0IGludCBfX3B0aHJl YWRfcHJvdmlkZV9sb2NrZmlsZTsKc3RhdGljIGNvbnN0IGludCAqY29uc3QgX19wdGhyZWFkX3Jl cXVpcmVfbG9ja2ZpbGUgPQogICZfX3B0aHJlYWRfcHJvdmlkZV9sb2NrZmlsZTsKI2VuZGlmCg== --Multipart_Sat__26_Oct_2002_13:24:27_+0000_081c8688 Content-Type: application/octet-stream; name="pthread.i" Content-Disposition: attachment; filename="pthread.i" Content-Transfer-Encoding: base64 IyAxICJwdGhyZWFkLmMiCiMgMSAiPGJ1aWx0LWluPiIKIyAxICI8Y29tbWFuZCBsaW5lPiIKIyAx ICIuLi9pbmNsdWRlL2xpYmMtc3ltYm9scy5oIiAxCiMgNTQgIi4uL2luY2x1ZGUvbGliYy1zeW1i b2xzLmgiCiMgMSAiL3Vzci9zcmMvZ2xpYmMtMi4yLjUtYnVpbGQvY29uZmlnLmgiIDEKIyA1NSAi Li4vaW5jbHVkZS9saWJjLXN5bWJvbHMuaCIgMgojIDIgIjxjb21tYW5kIGxpbmU+IiAyCiMgMSAi cHRocmVhZC5jIgojIDE4ICJwdGhyZWFkLmMiCiMgMSAiLi4vaW5jbHVkZS9lcnJuby5oIiAxCiMg MjkgIi4uL2luY2x1ZGUvZXJybm8uaCIKIyAxICIuLi9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEKIyAy ODMgIi4uL2luY2x1ZGUvZmVhdHVyZXMuaCIKIyAxICIuLi9pbmNsdWRlL3N5cy9jZGVmcy5oIiAx CiMgMSAiLi4vbWlzYy9zeXMvY2RlZnMuaCIgMQojIDIgIi4uL2luY2x1ZGUvc3lzL2NkZWZzLmgi IDIKIyAyODQgIi4uL2luY2x1ZGUvZmVhdHVyZXMuaCIgMgojIDMwICIuLi9pbmNsdWRlL2Vycm5v LmgiIDIKCgoKCgoKIyAxICIuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9iaXRzL2Vycm5vLmgi IDEKIyAyNSAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgvYml0cy9lcnJuby5oIgojIDEgIi91 c3Ivc3JjL2xpbnV4LXRoaXMvaW5jbHVkZS9saW51eC9lcnJuby5oIiAxIDMKCgoKIyAxICIvdXNy L3NyYy9saW51eC10aGlzL2luY2x1ZGUvYXNtL2Vycm5vLmgiIDEgMwojIDUgIi91c3Ivc3JjL2xp bnV4LXRoaXMvaW5jbHVkZS9saW51eC9lcnJuby5oIiAyIDMKIyAyNiAiLi4vc3lzZGVwcy91bml4 L3N5c3YvbGludXgvYml0cy9lcnJuby5oIiAyCiMgMzYgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xp bnV4L2JpdHMvZXJybm8uaCIKZXh0ZXJuIGludCBlcnJubzsKCgpleHRlcm4gaW50ICpfX2Vycm5v X2xvY2F0aW9uICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMgMzcgIi4uL2lu Y2x1ZGUvZXJybm8uaCIgMgojIDU1ICIuLi9pbmNsdWRlL2Vycm5vLmgiCmV4dGVybiBjaGFyICpw cm9ncmFtX2ludm9jYXRpb25fbmFtZSwgKnByb2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1lOwoK CgoKIyA2OSAiLi4vaW5jbHVkZS9lcnJuby5oIgp0eXBlZGVmIGludCBlcnJvcl90OwojIDE5ICJw dGhyZWFkLmMiIDIKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi9p bmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAxNDcgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51 eC1nbnUvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiBpbnQgcHRyZGlmZl90OwojIDIw MSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYu aCIgMwp0eXBlZGVmIHVuc2lnbmVkIGludCBzaXplX3Q7CiMgMjk0ICIvdXNyL2xpYi9nY2MtbGli L2k1ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgbG9uZyBp bnQgd2NoYXJfdDsKIyAyMCAicHRocmVhZC5jIiAyCiMgMSAiLi4vaW5jbHVkZS9zdGRpby5oIiAx CiMgMTAgIi4uL2luY2x1ZGUvc3RkaW8uaCIKIyAxICIuLi9saWJpby9zdGRpby5oIiAxCiMgMzAg Ii4uL2xpYmlvL3N0ZGlvLmgiCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51 eC1nbnUvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM1ICIuLi9saWJpby9zdGRpby5oIiAy CgojIDEgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2JpdHMvdHlwZXMuaCIgMQojIDI5ICIu Li9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9iaXRzL3R5cGVzLmgiCiMgMSAiL3Vzci9saWIvZ2Nj LWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzAgIi4u L3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2JpdHMvdHlwZXMuaCIgMgoKCnR5cGVkZWYgdW5zaWdu ZWQgY2hhciBfX3VfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5cGVk ZWYgdW5zaWduZWQgaW50IF9fdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VfbG9uZzsK Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdV9xdWFkX3Q7 Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25nIGxvbmcgaW50IF9fcXVhZF90OwojIDQ5ICIuLi9z eXNkZXBzL3VuaXgvc3lzdi9saW51eC9iaXRzL3R5cGVzLmgiCnR5cGVkZWYgc2lnbmVkIGNoYXIg X19pbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVk IHNob3J0IGludCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2 X3Q7CnR5cGVkZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9f dWludDMyX3Q7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19p bnQ2NF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3Vp bnQ2NF90OwoKdHlwZWRlZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKdHlwZWRlZiBfX3VfcXVhZF90 IF9fZGV2X3Q7CnR5cGVkZWYgX191X2ludCBfX3VpZF90Owp0eXBlZGVmIF9fdV9pbnQgX19naWRf dDsKdHlwZWRlZiBfX3VfbG9uZyBfX2lub190Owp0eXBlZGVmIF9fdV9pbnQgX19tb2RlX3Q7CnR5 cGVkZWYgX191X2ludCBfX25saW5rX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRl ZiBfX3F1YWRfdCBfX2xvZmZfdDsKdHlwZWRlZiBpbnQgX19waWRfdDsKdHlwZWRlZiBpbnQgX19z c2l6ZV90Owp0eXBlZGVmIF9fdV9sb25nIF9fcmxpbV90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19y bGltNjRfdDsKdHlwZWRlZiBfX3VfaW50IF9faWRfdDsKCnR5cGVkZWYgc3RydWN0CiAgewogICAg aW50IF9fdmFsWzJdOwogIH0gX19mc2lkX3Q7CgoKdHlwZWRlZiBpbnQgX19kYWRkcl90Owp0eXBl ZGVmIGNoYXIgKl9fY2FkZHJfdDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1 bnNpZ25lZCBpbnQgX191c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7 CnR5cGVkZWYgbG9uZyBpbnQgX19zd2Jsa190OwoKdHlwZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7 CgoKdHlwZWRlZiBpbnQgX19jbG9ja2lkX3Q7CgoKdHlwZWRlZiBpbnQgX190aW1lcl90OwoKCgoK Cgp0eXBlZGVmIGludCBfX2tleV90OwoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9faXBj X3BpZF90OwoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25n IGludCBfX2Jsa2NudF90Owp0eXBlZGVmIF9fcXVhZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVm IF9fdV9sb25nIF9fZnNibGtjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90 OwoKCnR5cGVkZWYgX191X2xvbmcgX19mc2ZpbGNudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19m c2ZpbGNudDY0X3Q7CgoKdHlwZWRlZiBfX3VfcXVhZF90IF9faW5vNjRfdDsKCgp0eXBlZGVmIF9f bG9mZl90IF9fb2ZmNjRfdDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fdF9zY2FsYXJfdDsKdHlwZWRl ZiB1bnNpZ25lZCBsb25nIGludCBfX3RfdXNjYWxhcl90OwoKCnR5cGVkZWYgaW50IF9faW50cHRy X3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19zb2NrbGVuX3Q7CgoKCgojIDEgIi4uL2xpbnV4 dGhyZWFkcy9zeXNkZXBzL3B0aHJlYWQvYml0cy9wdGhyZWFkdHlwZXMuaCIgMQojIDIzICIuLi9s aW51eHRocmVhZHMvc3lzZGVwcy9wdGhyZWFkL2JpdHMvcHRocmVhZHR5cGVzLmgiCiMgMSAiLi4v c3lzZGVwcy91bml4L3N5c3YvbGludXgvYml0cy9zY2hlZC5oIiAxCiMgNjggIi4uL3N5c2RlcHMv dW5peC9zeXN2L2xpbnV4L2JpdHMvc2NoZWQuaCIKc3RydWN0IF9fc2NoZWRfcGFyYW0KICB7CiAg ICBpbnQgX19zY2hlZF9wcmlvcml0eTsKICB9OwojIDI0ICIuLi9saW51eHRocmVhZHMvc3lzZGVw cy9wdGhyZWFkL2JpdHMvcHRocmVhZHR5cGVzLmgiIDIKCgpzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxv Y2sKewogIGxvbmcgaW50IF9fc3RhdHVzOwogIGludCBfX3NwaW5sb2NrOwoKfTsKCgoKdHlwZWRl ZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsKCgoKCgp0eXBl ZGVmIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zCnsKICBpbnQgX19kZXRhY2hzdGF0ZTsKICBpbnQg X19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBfX3NjaGVkcGFyYW07CiAgaW50 IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNpemVfdCBfX2d1YXJkc2l6ZTsKICBp bnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2thZGRyOwogIHNpemVfdCBfX3N0YWNr c2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRo cmVhZF9mYXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVhZF9kZXNjciBfX2Nfd2FpdGluZzsKfSBw dGhyZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15Owp9IHB0aHJl YWRfY29uZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBwdGhyZWFkX2tleV90OwoKCgoK CnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOwogIGludCBfX21fY291bnQ7CiAg X3B0aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGludCBfX21fa2luZDsKICBzdHJ1Y3QgX3B0aHJl YWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9tdXRleF90OwoKCgp0eXBlZGVmIHN0cnVj dAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoKCnR5cGVkZWYg aW50IHB0aHJlYWRfb25jZV90OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfcndsb2NrX3QK ewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX3J3X2xvY2s7CiAgaW50IF9fcndfcmVhZGVy czsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlcjsKICBfcHRocmVhZF9kZXNjciBfX3J3X3Jl YWRfd2FpdGluZzsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlX3dhaXRpbmc7CiAgaW50IF9f cndfa2luZDsKICBpbnQgX19yd19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrX3Q7CgoKCnR5cGVk ZWYgc3RydWN0CnsKICBpbnQgX19sb2Nra2luZDsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRf cndsb2NrYXR0cl90OwoKCgoKdHlwZWRlZiB2b2xhdGlsZSBpbnQgcHRocmVhZF9zcGlubG9ja190 OwoKCnR5cGVkZWYgc3RydWN0IHsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19iYV9sb2Nr OwogIGludCBfX2JhX3JlcXVpcmVkOwogIGludCBfX2JhX3ByZXNlbnQ7CiAgX3B0aHJlYWRfZGVz Y3IgX19iYV93YWl0aW5nOwp9IHB0aHJlYWRfYmFycmllcl90OwoKCnR5cGVkZWYgc3RydWN0IHsK ICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfYmFycmllcmF0dHJfdDsKCgoKCgp0eXBlZGVmIHVu c2lnbmVkIGxvbmcgaW50IHB0aHJlYWRfdDsKIyAxNDQgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xp bnV4L2JpdHMvdHlwZXMuaCIgMgojIDM3ICIuLi9saWJpby9zdGRpby5oIiAyCiMgNDUgIi4uL2xp YmlvL3N0ZGlvLmgiCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIEZJTEU7CiMgNTUgIi4uL2xpYmlv L3N0ZGlvLmgiCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIF9fRklMRTsKIyA2NSAiLi4vbGliaW8v c3RkaW8uaCIKIyAxICIuLi9saWJpby9saWJpby5oIiAxCiMgMzIgIi4uL2xpYmlvL2xpYmlvLmgi CiMgMSAiLi4vc3lzZGVwcy9nbnUvX0dfY29uZmlnLmgiIDEKIyAxNCAiLi4vc3lzZGVwcy9nbnUv X0dfY29uZmlnLmgiCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIv aW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzIxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGlu dXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHdpbnRf dDsKIyAxNSAiLi4vc3lzZGVwcy9nbnUvX0dfY29uZmlnLmgiIDIKIyAyNCAiLi4vc3lzZGVwcy9n bnUvX0dfY29uZmlnLmgiCiMgMSAiLi4vaW5jbHVkZS93Y2hhci5oIiAxCgojIDEgIi4uL3djc21i cy93Y2hhci5oIiAxCiMgNDggIi4uL3djc21icy93Y2hhci5oIgojIDEgIi91c3IvbGliL2djYy1s aWIvaTU4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ5ICIuLi93 Y3NtYnMvd2NoYXIuaCIgMgoKIyAxICIuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L2Jp dHMvd2NoYXIuaCIgMQojIDUxICIuLi93Y3NtYnMvd2NoYXIuaCIgMgojIDY3ICIuLi93Y3NtYnMv d2NoYXIuaCIKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2NvdW50OwogIHVuaW9uCiAgewogICAg d2ludF90IF9fd2NoOwogICAgY2hhciBfX3djaGJbNF07CiAgfSBfX3ZhbHVlOwp9IF9fbWJzdGF0 ZV90OwojIDMgIi4uL2luY2x1ZGUvd2NoYXIuaCIgMgojIDI1ICIuLi9zeXNkZXBzL2dudS9fR19j b25maWcuaCIgMgoKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmX3QgX19wb3M7CiAgX19tYnN0YXRl X3QgX19zdGF0ZTsKfSBfR19mcG9zX3Q7CnR5cGVkZWYgc3RydWN0CnsKICBfX29mZjY0X3QgX19w b3M7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zNjRfdDsKIyA0NCAiLi4vc3lzZGVw cy9nbnUvX0dfY29uZmlnLmgiCiMgMSAiLi4vaW5jbHVkZS9nY29udi5oIiAxCiMgMSAiLi4vaWNv bnYvZ2NvbnYuaCIgMQojIDI4ICIuLi9pY29udi9nY29udi5oIgojIDEgIi4uL2luY2x1ZGUvd2No YXIuaCIgMQoKIyAxICIuLi93Y3NtYnMvd2NoYXIuaCIgMQojIDQ4ICIuLi93Y3NtYnMvd2NoYXIu aCIKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0 ZGRlZi5oIiAxIDMKIyA0OSAiLi4vd2NzbWJzL3djaGFyLmgiIDIKIyAzICIuLi9pbmNsdWRlL3dj aGFyLmgiIDIKIyAyOSAiLi4vaWNvbnYvZ2NvbnYuaCIgMgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxp Yi9pNTg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzIgIi4uL2lj b252L2djb252LmgiIDIKCgoKCgplbnVtCnsKICBfX0dDT05WX09LID0gMCwKICBfX0dDT05WX05P Q09OViwKICBfX0dDT05WX05PREIsCiAgX19HQ09OVl9OT01FTSwKCiAgX19HQ09OVl9FTVBUWV9J TlBVVCwKICBfX0dDT05WX0ZVTExfT1VUUFVULAogIF9fR0NPTlZfSUxMRUdBTF9JTlBVVCwKICBf X0dDT05WX0lOQ09NUExFVEVfSU5QVVQsCgogIF9fR0NPTlZfSUxMRUdBTF9ERVNDUklQVE9SLAog IF9fR0NPTlZfSU5URVJOQUxfRVJST1IKfTsKCgoKZW51bQp7CiAgX19HQ09OVl9JU19MQVNUID0g MHgwMDAxLAogIF9fR0NPTlZfSUdOT1JFX0VSUk9SUyA9IDB4MDAwMgp9OwoKCgpzdHJ1Y3QgX19n Y29udl9zdGVwOwpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGE7CnN0cnVjdCBfX2djb252X2xvYWRl ZF9vYmplY3Q7CnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGE7CgoKCnR5cGVkZWYgaW50ICgqX19n Y29udl9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICosIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0 YSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoq LCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGNoYXIgKiosIHNpemVfdCAqLCBpbnQsIGludCk7CgoKdHlwZWRlZiBpbnQgKCpfX2dj b252X2luaXRfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqKTsKdHlwZWRlZiB2b2lkICgqX19n Y29udl9lbmRfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqKTsKCgoKdHlwZWRlZiBpbnQgKCpf X2djb252X3RyYW5zX2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLCB2b2lkICosCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAq KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hh ciAqLCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90ICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19jb250ZXh0X2ZjdCkgKHZv aWQgKiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIg Kik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX3F1ZXJ5X2ZjdCkgKF9fY29uc3QgY2hh ciAqLCBfX2NvbnN0IGNoYXIgKioqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZV90ICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19pbml0X2ZjdCkg KHZvaWQgKiosIGNvbnN0IGNoYXIgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfdHJhbnNfZW5k X2ZjdCkgKHZvaWQgKik7CgpzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhCnsKCiAgX19nY29udl90 cmFuc19mY3QgX190cmFuc19mY3Q7CiAgX19nY29udl90cmFuc19jb250ZXh0X2ZjdCBfX3RyYW5z X2NvbnRleHRfZmN0OwogIF9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCBfX3RyYW5zX2VuZF9mY3Q7CiAg dm9pZCAqX19kYXRhOwogIHN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEgKl9fbmV4dDsKfTsKCgoK c3RydWN0IF9fZ2NvbnZfc3RlcAp7CiAgc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdCAqX19z aGxpYl9oYW5kbGU7CiAgX19jb25zdCBjaGFyICpfX21vZG5hbWU7CgogIGludCBfX2NvdW50ZXI7 CgogIGNoYXIgKl9fZnJvbV9uYW1lOwogIGNoYXIgKl9fdG9fbmFtZTsKCiAgX19nY29udl9mY3Qg X19mY3Q7CiAgX19nY29udl9pbml0X2ZjdCBfX2luaXRfZmN0OwogIF9fZ2NvbnZfZW5kX2ZjdCBf X2VuZF9mY3Q7CgoKCiAgaW50IF9fbWluX25lZWRlZF9mcm9tOwogIGludCBfX21heF9uZWVkZWRf ZnJvbTsKICBpbnQgX19taW5fbmVlZGVkX3RvOwogIGludCBfX21heF9uZWVkZWRfdG87CgoKICBp bnQgX19zdGF0ZWZ1bDsKCiAgdm9pZCAqX19kYXRhOwp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVw X2RhdGEKewogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmOwogIHVuc2lnbmVkIGNoYXIgKl9fb3V0 YnVmZW5kOwoKCgogIGludCBfX2ZsYWdzOwoKCgogIGludCBfX2ludm9jYXRpb25fY291bnRlcjsK CgoKICBpbnQgX19pbnRlcm5hbF91c2U7CgogIF9fbWJzdGF0ZV90ICpfX3N0YXRlcDsKICBfX21i c3RhdGVfdCBfX3N0YXRlOwoKCgogIHN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEgKl9fdHJhbnM7 Cn07CgoKCnR5cGVkZWYgc3RydWN0IF9fZ2NvbnZfaW5mbwp7CiAgc2l6ZV90IF9fbnN0ZXBzOwog IHN0cnVjdCBfX2djb252X3N0ZXAgKl9fc3RlcHM7CiAgX19leHRlbnNpb25fXyBzdHJ1Y3QgX19n Y29udl9zdGVwX2RhdGEgX19kYXRhIFtdOwp9ICpfX2djb252X3Q7CiMgMiAiLi4vaW5jbHVkZS9n Y29udi5oIiAyCiMgNDUgIi4uL3N5c2RlcHMvZ251L19HX2NvbmZpZy5oIiAyCnR5cGVkZWYgdW5p b24KewogIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICBzdHJ1Y3QKICB7CiAgICBzdHJ1Y3Qg X19nY29udl9pbmZvIF9fY2Q7CiAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhOwog IH0gX19jb21iaW5lZDsKfSBfR19pY29udl90OwoKdHlwZWRlZiBpbnQgX0dfaW50MTZfdCBfX2F0 dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgX0dfaW50MzJfdCBf X2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQg X0dfdWludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYg dW5zaWduZWQgaW50IF9HX3VpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9f KSkpOwojIDMzICIuLi9saWJpby9saWJpby5oIiAyCiMgNTMgIi4uL2xpYmlvL2xpYmlvLmgiCiMg MSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRhcmcu aCIgMSAzCiMgNDMgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1 ZGUvc3RkYXJnLmgiIDMKdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlzdDsK IyA1NCAiLi4vbGliaW8vbGliaW8uaCIgMgojIDE2MCAiLi4vbGliaW8vbGliaW8uaCIKc3RydWN0 IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklMRTsKIyAxNzAgIi4uL2xpYmlvL2xpYmlvLmgiCnR5 cGVkZWYgdm9pZCBfSU9fbG9ja190OwoKCgoKCnN0cnVjdCBfSU9fbWFya2VyIHsKICBzdHJ1Y3Qg X0lPX21hcmtlciAqX25leHQ7CiAgc3RydWN0IF9JT19GSUxFICpfc2J1ZjsKCgoKICBpbnQgX3Bv czsKIyAxOTMgIi4uL2xpYmlvL2xpYmlvLmgiCn07CgoKZW51bSBfX2NvZGVjdnRfcmVzdWx0CnsK ICBfX2NvZGVjdnRfb2ssCiAgX19jb2RlY3Z0X3BhcnRpYWwsCiAgX19jb2RlY3Z0X2Vycm9yLAog IF9fY29kZWN2dF9ub2NvbnYKfTsKCgoKCnN0cnVjdCBfSU9fY29kZWN2dAp7CiAgdm9pZCAoKl9f Y29kZWN2dF9kZXN0cikgKHN0cnVjdCBfSU9fY29kZWN2dCAqKTsKICBlbnVtIF9fY29kZWN2dF9y ZXN1bHQgKCpfX2NvZGVjdnRfZG9fb3V0KSAoc3RydWN0IF9JT19jb2RlY3Z0ICosCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWJzdGF0ZV90ICosCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJf dCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3 Y2hhcl90ICoqLCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNoYXIgKiwgY2hhciAqKik7CiAgZW51bSBfX2NvZGVjdnRfcmVzdWx0ICgqX19jb2Rl Y3Z0X2RvX3Vuc2hpZnQpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWJzdGF0ZV90ICosIGNoYXIgKiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgY2hh ciAqKik7CiAgZW51bSBfX2NvZGVjdnRfcmVzdWx0ICgqX19jb2RlY3Z0X2RvX2luKSAoc3RydWN0 IF9JT19jb2RlY3Z0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19tYnN0YXRlX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqLCB3Y2hhcl90ICosCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqLCB3Y2hhcl90ICoqKTsK ICBpbnQgKCpfX2NvZGVjdnRfZG9fZW5jb2RpbmcpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7CiAg aW50ICgqX19jb2RlY3Z0X2RvX2Fsd2F5c19ub2NvbnYpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7 CiAgaW50ICgqX19jb2RlY3Z0X2RvX2xlbmd0aCkgKHN0cnVjdCBfSU9fY29kZWN2dCAqLCBfX21i c3RhdGVfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGNv bnN0IGNoYXIgKiwgc2l6ZV90KTsKICBpbnQgKCpfX2NvZGVjdnRfZG9fbWF4X2xlbmd0aCkgKHN0 cnVjdCBfSU9fY29kZWN2dCAqKTsKCiAgX0dfaWNvbnZfdCBfX2NkX2luOwogIF9HX2ljb252X3Qg X19jZF9vdXQ7Cn07CgoKc3RydWN0IF9JT193aWRlX2RhdGEKewogIHdjaGFyX3QgKl9JT19yZWFk X3B0cjsKICB3Y2hhcl90ICpfSU9fcmVhZF9lbmQ7CiAgd2NoYXJfdCAqX0lPX3JlYWRfYmFzZTsK ICB3Y2hhcl90ICpfSU9fd3JpdGVfYmFzZTsKICB3Y2hhcl90ICpfSU9fd3JpdGVfcHRyOwogIHdj aGFyX3QgKl9JT193cml0ZV9lbmQ7CiAgd2NoYXJfdCAqX0lPX2J1Zl9iYXNlOwogIHdjaGFyX3Qg Kl9JT19idWZfZW5kOwoKICB3Y2hhcl90ICpfSU9fc2F2ZV9iYXNlOwogIHdjaGFyX3QgKl9JT19i YWNrdXBfYmFzZTsKCiAgd2NoYXJfdCAqX0lPX3NhdmVfZW5kOwoKICBfX21ic3RhdGVfdCBfSU9f c3RhdGU7CiAgX19tYnN0YXRlX3QgX0lPX2xhc3Rfc3RhdGU7CiAgc3RydWN0IF9JT19jb2RlY3Z0 IF9jb2RlY3Z0OwoKICB3Y2hhcl90IF9zaG9ydGJ1ZlsxXTsKCiAgc3RydWN0IF9JT19qdW1wX3Qg Kl93aWRlX3Z0YWJsZTsKfTsKCgpzdHJ1Y3QgX0lPX0ZJTEUgewogIGludCBfZmxhZ3M7CgoKCgog IGNoYXIqIF9JT19yZWFkX3B0cjsKICBjaGFyKiBfSU9fcmVhZF9lbmQ7CiAgY2hhciogX0lPX3Jl YWRfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfcHRyOwog IGNoYXIqIF9JT193cml0ZV9lbmQ7CiAgY2hhciogX0lPX2J1Zl9iYXNlOwogIGNoYXIqIF9JT19i dWZfZW5kOwoKICBjaGFyICpfSU9fc2F2ZV9iYXNlOwogIGNoYXIgKl9JT19iYWNrdXBfYmFzZTsK ICBjaGFyICpfSU9fc2F2ZV9lbmQ7CgogIHN0cnVjdCBfSU9fbWFya2VyICpfbWFya2VyczsKCiAg c3RydWN0IF9JT19GSUxFICpfY2hhaW47CgogIGludCBfZmlsZW5vOwogIGludCBfYmxrc2l6ZTsK ICBfX29mZl90IF9vbGRfb2Zmc2V0OwoKCgogIHVuc2lnbmVkIHNob3J0IF9jdXJfY29sdW1uOwog IHNpZ25lZCBjaGFyIF92dGFibGVfb2Zmc2V0OwogIGNoYXIgX3Nob3J0YnVmWzFdOwoKCgogIF9J T19sb2NrX3QgKl9sb2NrOwojIDMwNSAiLi4vbGliaW8vbGliaW8uaCIKICBfX29mZjY0X3QgX29m ZnNldDsKCgogIHN0cnVjdCBfSU9fY29kZWN2dCAqX2NvZGVjdnQ7CiAgc3RydWN0IF9JT193aWRl X2RhdGEgKl93aWRlX2RhdGE7CgoKCgogIGludCBfbW9kZTsKCiAgY2hhciBfdW51c2VkMlsxNSAq IHNpemVvZiAoaW50KSAtIDIgKiBzaXplb2YgKHZvaWQgKildOwoKfTsKCgp0eXBlZGVmIHN0cnVj dCBfSU9fRklMRSBfSU9fRklMRTsKCgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKCmV4dGVybiBzdHJ1 Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9w bHVzIF9JT18yXzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFf c3RkZXJyXzsKCgoKCgpleHRlcm4gX0lPX0ZJTEUgKl9JT19zdGRpbjsKZXh0ZXJuIF9JT19GSUxF ICpfSU9fc3Rkb3V0OwpleHRlcm4gX0lPX0ZJTEUgKl9JT19zdGRlcnI7CgoKCgoKCgp0eXBlZGVm IF9fc3NpemVfdCBfX2lvX3JlYWRfZm4gKHZvaWQgKl9fY29va2llLCBjaGFyICpfX2J1Ziwgc2l6 ZV90IF9fbmJ5dGVzKTsKCgoKCgoKCnR5cGVkZWYgX19zc2l6ZV90IF9faW9fd3JpdGVfZm4gKHZv aWQgKl9fY29va2llLCBfX2NvbnN0IGNoYXIgKl9fYnVmLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplX3QgX19uKTsKCgoKCgoKCnR5cGVkZWYgaW50IF9faW9fc2Vla19mbiAo dm9pZCAqX19jb29raWUsIF9fb2ZmNjRfdCAqX19wb3MsIGludCBfX3cpOwoKCnR5cGVkZWYgaW50 IF9faW9fY2xvc2VfZm4gKHZvaWQgKl9fY29va2llKTsKCgoKCnR5cGVkZWYgX19pb19yZWFkX2Zu IGNvb2tpZV9yZWFkX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb193cml0ZV9mbiBjb29raWVfd3Jp dGVfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3NlZWtfZm4gY29va2llX3NlZWtfZnVuY3Rpb25f dDsKdHlwZWRlZiBfX2lvX2Nsb3NlX2ZuIGNvb2tpZV9jbG9zZV9mdW5jdGlvbl90OwoKCnR5cGVk ZWYgc3RydWN0CnsKICBfX2lvX3JlYWRfZm4gKnJlYWQ7CiAgX19pb193cml0ZV9mbiAqd3JpdGU7 CiAgX19pb19zZWVrX2ZuICpzZWVrOwogIF9faW9fY2xvc2VfZm4gKmNsb3NlOwp9IF9JT19jb29r aWVfaW9fZnVuY3Rpb25zX3Q7CnR5cGVkZWYgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBjb29r aWVfaW9fZnVuY3Rpb25zX3Q7CgpzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlOwoKCmV4dGVybiB2b2lk IF9JT19jb29raWVfaW5pdCAoc3RydWN0IF9JT19jb29raWVfZmlsZSAqX19jZmlsZSwgaW50IF9f cmVhZF93cml0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX2Nvb2tpZSwg X0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2Zucyk7CgoKCgoKCgpleHRlcm4gaW50IF9fdW5k ZXJmbG93IChfSU9fRklMRSAqKSA7CmV4dGVybiBpbnQgX191ZmxvdyAoX0lPX0ZJTEUgKikgOwpl eHRlcm4gaW50IF9fb3ZlcmZsb3cgKF9JT19GSUxFICosIGludCkgOwpleHRlcm4gd2ludF90IF9f d3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgOwpleHRlcm4gd2ludF90IF9fd3VmbG93IChfSU9fRklM RSAqKSA7CmV4dGVybiB3aW50X3QgX193b3ZlcmZsb3cgKF9JT19GSUxFICosIHdpbnRfdCkgOwoj IDQyNiAiLi4vbGliaW8vbGliaW8uaCIKZXh0ZXJuIGludCBfSU9fZ2V0YyAoX0lPX0ZJTEUgKl9f ZnApIDsKZXh0ZXJuIGludCBfSU9fcHV0YyAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApIDsKZXh0 ZXJuIGludCBfSU9fZmVvZiAoX0lPX0ZJTEUgKl9fZnApIDsKZXh0ZXJuIGludCBfSU9fZmVycm9y IChfSU9fRklMRSAqX19mcCkgOwoKZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkIChfSU9fRklM RSAqX19mcCkgOwoKCgoKCmV4dGVybiB2b2lkIF9JT19mbG9ja2ZpbGUgKF9JT19GSUxFICopIDsK ZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklMRSAqKSA7CmV4dGVybiBpbnQgX0lP X2Z0cnlsb2NrZmlsZSAoX0lPX0ZJTEUgKikgOwojIDQ1NiAiLi4vbGliaW8vbGliaW8uaCIKZXh0 ZXJuIGludCBfSU9fdmZzY2FuZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICog X19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAq X19yZXN0cmljdCkgOwpleHRlcm4gaW50IF9JT192ZnByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJp Y3QsIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2du dWNfdmFfbGlzdCkgOwpleHRlcm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAqLCBpbnQs IF9fc3NpemVfdCkgOwpleHRlcm4gc2l6ZV90IF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwgdm9pZCAq LCBzaXplX3QpIDsKCmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtvZmYgKF9JT19GSUxFICosIF9f b2ZmNjRfdCwgaW50LCBpbnQpIDsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla3BvcyAoX0lPX0ZJ TEUgKiwgX19vZmY2NF90LCBpbnQpIDsKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVh IChfSU9fRklMRSAqKSA7CgoKZXh0ZXJuIHdpbnRfdCBfSU9fZ2V0d2MgKF9JT19GSUxFICpfX2Zw KSA7CmV4dGVybiB3aW50X3QgX0lPX3B1dHdjICh3Y2hhcl90IF9fd2MsIF9JT19GSUxFICpfX2Zw KSA7CmV4dGVybiBpbnQgX0lPX2Z3aWRlIChfSU9fRklMRSAqX19mcCwgaW50IF9fbW9kZSkgOwoj IDUwNSAiLi4vbGliaW8vbGliaW8uaCIKZXh0ZXJuIGludCBfSU9fdmZ3c2NhbmYgKF9JT19GSUxF ICogX19yZXN0cmljdCwgY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICBfX2dudWNfdmFfbGlzdCwgaW50ICpfX3Jlc3RyaWN0KSA7CmV4dGVybiBpbnQg X0lPX3Zmd3ByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNvbnN0IHdjaGFyX3QgKl9fcmVz dHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QpIDsKZXh0ZXJu IF9fc3NpemVfdCBfSU9fd3BhZG4gKF9JT19GSUxFICosIHdpbnRfdCwgX19zc2l6ZV90KSA7CmV4 dGVybiB2b2lkIF9JT19mcmVlX3diYWNrdXBfYXJlYSAoX0lPX0ZJTEUgKikgOwojIDY2ICIuLi9s aWJpby9zdGRpby5oIiAyCgoKCgp0eXBlZGVmIF9fZ251Y192YV9saXN0IHZhX2xpc3Q7CiMgODAg Ii4uL2xpYmlvL3N0ZGlvLmgiCnR5cGVkZWYgX0dfZnBvc190IGZwb3NfdDsKCgoKCnR5cGVkZWYg X0dfZnBvczY0X3QgZnBvczY0X3Q7CiMgMTI5ICIuLi9saWJpby9zdGRpby5oIgojIDEgIi91c3Iv c3JjL2dsaWJjLTIuMi41LWJ1aWxkL2JpdHMvc3RkaW9fbGltLmgiIDEKIyAxMzAgIi4uL2xpYmlv L3N0ZGlvLmgiIDIKCgoKZXh0ZXJuIEZJTEUgKnN0ZGluOwpleHRlcm4gRklMRSAqc3Rkb3V0Owpl eHRlcm4gRklMRSAqc3RkZXJyOwoKCgoKCgpleHRlcm4gaW50IHJlbW92ZSAoX19jb25zdCBjaGFy ICpfX2ZpbGVuYW1lKSA7CgpleHRlcm4gaW50IHJlbmFtZSAoX19jb25zdCBjaGFyICpfX29sZCwg X19jb25zdCBjaGFyICpfX25ldykgOwoKCgoKZXh0ZXJuIEZJTEUgKnRtcGZpbGUgKHZvaWQpIDsK IyAxNTggIi4uL2xpYmlvL3N0ZGlvLmgiCmV4dGVybiBGSUxFICp0bXBmaWxlNjQgKHZvaWQpIDsK CgpleHRlcm4gY2hhciAqdG1wbmFtIChjaGFyICpfX3MpIDsKCgoKCmV4dGVybiBjaGFyICp0bXBu YW1fciAoY2hhciAqX19zKSA7CiMgMTc4ICIuLi9saWJpby9zdGRpby5oIgpleHRlcm4gY2hhciAq dGVtcG5hbSAoX19jb25zdCBjaGFyICpfX2RpciwgX19jb25zdCBjaGFyICpfX3BmeCkKICAgICBf X2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKZXh0ZXJuIGludCBmY2xvc2UgKEZJTEUg Kl9fc3RyZWFtKSA7CgpleHRlcm4gaW50IGZmbHVzaCAoRklMRSAqX19zdHJlYW0pIDsKCgoKZXh0 ZXJuIGludCBmZmx1c2hfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgpleHRlcm4gaW50 IGZjbG9zZWFsbCAodm9pZCkgOwoKCgoKCmV4dGVybiBGSUxFICpmb3BlbiAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fbW9kZXMpIDsKCmV4dGVybiBGSUxFICpmcmVvcGVuIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19y ZXN0cmljdCBfX3N0cmVhbSkgOwojIDIyMiAiLi4vbGliaW8vc3RkaW8uaCIKZXh0ZXJuIEZJTEUg KmZvcGVuNjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIDsKZXh0ZXJuIEZJ TEUgKmZyZW9wZW42NCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAg ICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CgoKCgpleHRl cm4gRklMRSAqZmRvcGVuIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSA7CgoKCgoK ZXh0ZXJuIEZJTEUgKmZvcGVuY29va2llICh2b2lkICpfX3Jlc3RyaWN0IF9fbWFnaWNfY29va2ll LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21v ZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3Qg X19pb19mdW5jcykgOwoKCmV4dGVybiBGSUxFICpmbWVtb3BlbiAodm9pZCAqX19zLCBzaXplX3Qg X19sZW4sIF9fY29uc3QgY2hhciAqX19tb2RlcykgOwoKCgoKZXh0ZXJuIEZJTEUgKm9wZW5fbWVt c3RyZWFtIChjaGFyICoqX19yZXN0cmljdCBfX2J1ZmxvYywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19zaXplbG9jKSA7CgoKCgoKZXh0ZXJuIHZvaWQg c2V0YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVm KSA7CgoKCmV4dGVybiBpbnQgc2V0dmJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hh ciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICBpbnQgX19tb2Rlcywgc2l6 ZV90IF9fbikgOwoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9f c3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHNp emVfdCBfX3NpemUpIDsKCgpleHRlcm4gdm9pZCBzZXRsaW5lYnVmIChGSUxFICpfX3N0cmVhbSkg OwoKCgoKZXh0ZXJuIGludCBmcHJpbnRmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAg ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSA7 CgpleHRlcm4gaW50IHByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAu Li4pIDsKCmV4dGVybiBpbnQgc3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCgpl eHRlcm4gaW50IHZmcHJpbnRmIChGSUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBf X2FyZykgOwoKZXh0ZXJuIGludCB2cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m b3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIDsKCmV4dGVybiBpbnQgdnNwcmludGYg KGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQs CiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSA7CgoKCmV4dGVybiBp bnQgc25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sCiAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQog ICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpOwoKZXh0 ZXJuIGludCB2c25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4s CiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQs IF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChf X3ByaW50Zl9fLCAzLCAwKSkpOwoKCgoKCmV4dGVybiBpbnQgdmFzcHJpbnRmIChjaGFyICoqX19y ZXN0cmljdCBfX3B0ciwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZiwKICAgICAgICAgICAg ICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIF9fYXR0cmlidXRlX18gKChfX2Zv cm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwpleHRlcm4gaW50IF9fYXNwcmludGYgKGNoYXIg KipfX3Jlc3RyaWN0IF9fcHRyLAogICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChf X3ByaW50Zl9fLCAyLCAzKSkpOwpleHRlcm4gaW50IGFzcHJpbnRmIChjaGFyICoqX19yZXN0cmlj dCBfX3B0ciwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f Zm10LCAuLi4pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIs IDMpKSk7CgoKZXh0ZXJuIGludCB2ZHByaW50ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX2ZtdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcp CiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7CmV4 dGVybiBpbnQgZHByaW50ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zt dCwgLi4uKQogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAz KSkpOwoKCgoKZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikg OwoKZXh0ZXJuIGludCBzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAu Li4pIDsKCmV4dGVybiBpbnQgc3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAog ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4p IDsKCgoKZXh0ZXJuIGludCB2ZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9s aXN0IF9fYXJnKQogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIs IDApKSk7CgoKZXh0ZXJuIGludCB2c2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zv cm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0 X18gKF9fc2NhbmZfXywgMSwgMCkpKTsKCgpleHRlcm4gaW50IHZzc2NhbmYgKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICBfX2F0dHJpYnV0ZV9f ICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKCgoKZXh0ZXJuIGludCBmZ2V0YyAo RklMRSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBnZXRjIChGSUxFICpfX3N0cmVhbSkgOwoKCmV4 dGVybiBpbnQgZ2V0Y2hhciAodm9pZCkgOwoKCgoKCgoKZXh0ZXJuIGludCBnZXRjX3VubG9ja2Vk IChGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IGdldGNoYXJfdW5sb2NrZWQgKHZvaWQpIDsK CgoKCmV4dGVybiBpbnQgZmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgpleHRl cm4gaW50IGZwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IHB1dGMg KGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CgoKZXh0ZXJuIGludCBwdXRjaGFyIChpbnQgX19j KSA7CgoKCgoKCgpleHRlcm4gaW50IGZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0 cmVhbSkgOwoKCgoKZXh0ZXJuIGludCBwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0 cmVhbSkgOwpleHRlcm4gaW50IHB1dGNoYXJfdW5sb2NrZWQgKGludCBfX2MpIDsKCgoKCgpleHRl cm4gaW50IGdldHcgKEZJTEUgKl9fc3RyZWFtKSA7CgoKZXh0ZXJuIGludCBwdXR3IChpbnQgX193 LCBGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzIChjaGFyICpfX3Jlc3Ry aWN0IF9fcywgaW50IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKICAgICA7CgoKCmV4 dGVybiBjaGFyICpmZ2V0c191bmxvY2tlZCAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24s CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkg OwoKCgoKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykgOwojIDQyNiAiLi4vbGliaW8vc3Rk aW8uaCIKZXh0ZXJuIF9fc3NpemVfdCBfX2dldGRlbGltIChjaGFyICoqX19yZXN0cmljdCBfX2xp bmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3Qg X19uLCBpbnQgX19kZWxpbWl0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxF ICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CmV4dGVybiBfX3NzaXplX3QgZ2V0ZGVsaW0gKGNoYXIg KipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl X3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxpbWl0ZXIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgOwoKCmV4dGVybiBfX3NzaXplX3Qg Z2V0bGluZSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKCgoKCmV4dGVybiBpbnQgZnB1dHMgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAg ICAgOwoKCgpleHRlcm4gaW50IGZwdXRzX3VubG9ja2VkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3Ry ZWFtKSA7CgoKCmV4dGVybiBpbnQgcHV0cyAoX19jb25zdCBjaGFyICpfX3MpIDsKCgoKZXh0ZXJu IGludCB1bmdldGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CgoKCmV4dGVybiBzaXplX3Qg ZnJlYWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKCmV4dGVy biBzaXplX3QgZndyaXRlIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBf X3NpemUsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0 IF9fcykgOwoKCgpleHRlcm4gc2l6ZV90IGZyZWFkX3VubG9ja2VkICh2b2lkICpfX3Jlc3RyaWN0 IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl X3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CmV4dGVybiBzaXplX3QgZndyaXRl X3VubG9ja2VkIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3Ry aWN0IF9fc3RyZWFtKSA7CgoKCgpleHRlcm4gaW50IGZzZWVrIChGSUxFICpfX3N0cmVhbSwgbG9u ZyBpbnQgX19vZmYsIGludCBfX3doZW5jZSkgOwoKZXh0ZXJuIGxvbmcgaW50IGZ0ZWxsIChGSUxF ICpfX3N0cmVhbSkgOwoKZXh0ZXJuIHZvaWQgcmV3aW5kIChGSUxFICpfX3N0cmVhbSkgOwojIDQ4 OSAiLi4vbGliaW8vc3RkaW8uaCIKZXh0ZXJuIGludCBmc2Vla28gKEZJTEUgKl9fc3RyZWFtLCBf X29mZl90IF9fb2ZmLCBpbnQgX193aGVuY2UpIDsKCmV4dGVybiBfX29mZl90IGZ0ZWxsbyAoRklM RSAqX19zdHJlYW0pIDsKCgoKZXh0ZXJuIGludCBmZ2V0cG9zIChGSUxFICpfX3Jlc3RyaWN0IF9f c3RyZWFtLCBmcG9zX3QgKl9fcmVzdHJpY3QgX19wb3MpCiAgICAgOwoKZXh0ZXJuIGludCBmc2V0 cG9zIChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zX3QgKl9fcG9zKSA7CiMgNTIzICIuLi9s aWJpby9zdGRpby5oIgpleHRlcm4gaW50IGZzZWVrbzY0IChGSUxFICpfX3N0cmVhbSwgX19vZmY2 NF90IF9fb2ZmLCBpbnQgX193aGVuY2UpIDsKZXh0ZXJuIF9fb2ZmNjRfdCBmdGVsbG82NCAoRklM RSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBmZ2V0cG9zNjQgKEZJTEUgKl9fcmVzdHJpY3QgX19z dHJlYW0sIGZwb3M2NF90ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgIDsKZXh0ZXJuIGludCBmc2V0 cG9zNjQgKEZJTEUgKl9fc3RyZWFtLCBfX2NvbnN0IGZwb3M2NF90ICpfX3BvcykgOwoKCgpleHRl cm4gdm9pZCBjbGVhcmVyciAoRklMRSAqX19zdHJlYW0pIDsKCmV4dGVybiBpbnQgZmVvZiAoRklM RSAqX19zdHJlYW0pIDsKCmV4dGVybiBpbnQgZmVycm9yIChGSUxFICpfX3N0cmVhbSkgOwoKCgpl eHRlcm4gdm9pZCBjbGVhcmVycl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJuIGlu dCBmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IGZlcnJvcl91bmxv Y2tlZCAoRklMRSAqX19zdHJlYW0pIDsKCgoKCmV4dGVybiB2b2lkIHBlcnJvciAoX19jb25zdCBj aGFyICpfX3MpIDsKCgoKCmV4dGVybiBpbnQgc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIg Kl9fY29uc3Qgc3lzX2Vycmxpc3RbXTsKCgpleHRlcm4gaW50IF9zeXNfbmVycjsKZXh0ZXJuIF9f Y29uc3QgY2hhciAqX19jb25zdCBfc3lzX2Vycmxpc3RbXTsKCgoKCgpleHRlcm4gaW50IGZpbGVu byAoRklMRSAqX19zdHJlYW0pIDsKCgoKCmV4dGVybiBpbnQgZmlsZW5vX3VubG9ja2VkIChGSUxF ICpfX3N0cmVhbSkgOwoKCgoKCgpleHRlcm4gRklMRSAqcG9wZW4gKF9fY29uc3QgY2hhciAqX19j b21tYW5kLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIDsKCgpleHRlcm4gaW50IHBjbG9zZSAoRklM RSAqX19zdHJlYW0pIDsKCgoKCgpleHRlcm4gY2hhciAqY3Rlcm1pZCAoY2hhciAqX19zKSA7CgoK CgoKZXh0ZXJuIGNoYXIgKmN1c2VyaWQgKGNoYXIgKl9fcykgOwoKCgoKc3RydWN0IG9ic3RhY2s7 CgoKZXh0ZXJuIGludCBvYnN0YWNrX3ByaW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3Qg X19vYnN0YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19mb3JtYXQsIC4uLikgOwpleHRlcm4gaW50IG9ic3RhY2tfdnByaW50ZiAoc3RydWN0 IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmdzKSA7CgoKCgoKCgpleHRlcm4gdm9pZCBmbG9j a2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCmV4dGVybiBpbnQgZnRyeWxvY2tmaWxlIChGSUxF ICpfX3N0cmVhbSkgOwoKCmV4dGVybiB2b2lkIGZ1bmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkg OwojIDYzMCAiLi4vbGliaW8vc3RkaW8uaCIKIyAxICIuLi9saWJpby9iaXRzL3N0ZGlvLmgiIDEK IyAzMyAiLi4vbGliaW8vYml0cy9zdGRpby5oIgpleHRlcm4gX19pbmxpbmUgaW50CnZwcmludGYg KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCnsK ICByZXR1cm4gdmZwcmludGYgKHN0ZG91dCwgX19mbXQsIF9fYXJnKTsKfQoKCmV4dGVybiBfX2lu bGluZSBpbnQKZ2V0Y2hhciAodm9pZCkKewogIHJldHVybiBfSU9fZ2V0YyAoc3RkaW4pOwp9CgoK CgpleHRlcm4gX19pbmxpbmUgaW50CmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fZnApCnsKICByZXR1 cm4gKChfX2ZwKS0+X0lPX3JlYWRfcHRyID49IChfX2ZwKS0+X0lPX3JlYWRfZW5kID8gX191Zmxv dyAoX19mcCkgOiAqKHVuc2lnbmVkIGNoYXIgKikgKF9fZnApLT5fSU9fcmVhZF9wdHIrKyk7Cn0K CgpleHRlcm4gX19pbmxpbmUgaW50CmdldGNoYXJfdW5sb2NrZWQgKHZvaWQpCnsKICByZXR1cm4g KChzdGRpbiktPl9JT19yZWFkX3B0ciA+PSAoc3RkaW4pLT5fSU9fcmVhZF9lbmQgPyBfX3VmbG93 IChzdGRpbikgOiAqKHVuc2lnbmVkIGNoYXIgKikgKHN0ZGluKS0+X0lPX3JlYWRfcHRyKyspOwp9 CgoKCgpleHRlcm4gX19pbmxpbmUgaW50CnB1dGNoYXIgKGludCBfX2MpCnsKICByZXR1cm4gX0lP X3B1dGMgKF9fYywgc3Rkb3V0KTsKfQoKCgoKZXh0ZXJuIF9faW5saW5lIGludApmcHV0Y191bmxv Y2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pCnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5f SU9fd3JpdGVfcHRyID49IChfX3N0cmVhbSktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAo X19zdHJlYW0sICh1bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikgKCooX19z dHJlYW0pLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkpOwp9CgoKCgoKZXh0ZXJuIF9faW5saW5l IGludApwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkKewogIHJldHVybiAo KChfX3N0cmVhbSktPl9JT193cml0ZV9wdHIgPj0gKF9fc3RyZWFtKS0+X0lPX3dyaXRlX2VuZCkg PyBfX292ZXJmbG93IChfX3N0cmVhbSwgKHVuc2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1bnNpZ25l ZCBjaGFyKSAoKihfX3N0cmVhbSktPl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KCgpleHRl cm4gX19pbmxpbmUgaW50CnB1dGNoYXJfdW5sb2NrZWQgKGludCBfX2MpCnsKICByZXR1cm4gKCgo c3Rkb3V0KS0+X0lPX3dyaXRlX3B0ciA+PSAoc3Rkb3V0KS0+X0lPX3dyaXRlX2VuZCkgPyBfX292 ZXJmbG93IChzdGRvdXQsICh1bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikg KCooc3Rkb3V0KS0+X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCgoKCmV4dGVybiBfX2lu bGluZSBfX3NzaXplX3QKZ2V0bGluZSAoY2hhciAqKl9fbGluZXB0ciwgc2l6ZV90ICpfX24sIEZJ TEUgKl9fc3RyZWFtKQp7CiAgcmV0dXJuIF9fZ2V0ZGVsaW0gKF9fbGluZXB0ciwgX19uLCAnXG4n LCBfX3N0cmVhbSk7Cn0KCgoKCgpleHRlcm4gX19pbmxpbmUgaW50CmZlb2ZfdW5sb2NrZWQgKEZJ TEUgKl9fc3RyZWFtKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X2ZsYWdzICYgMHgxMCkgIT0g MCk7Cn0KCgpleHRlcm4gX19pbmxpbmUgaW50CmZlcnJvcl91bmxvY2tlZCAoRklMRSAqX19zdHJl YW0pCnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5fZmxhZ3MgJiAweDIwKSAhPSAwKTsKfQojIDYz MSAiLi4vbGliaW8vc3RkaW8uaCIgMgoKCgojIDExICIuLi9pbmNsdWRlL3N0ZGlvLmgiIDIKCgpl eHRlcm4gaW50IF9fZmNsb3NlYWxsICh2b2lkKTsKZXh0ZXJuIGludCBfX3NucHJpbnRmIChjaGFy ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIF9fYXR0cmlidXRl X18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpOwpleHRlcm4gaW50IF9fdnNucHJp bnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9s aXN0IF9fYXJnKQogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAz LCAwKSkpOwpleHRlcm4gaW50IF9fdmZzY2FuZiAoRklMRSAqX19yZXN0cmljdCBfX3MsCiAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAg ICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICBfX2F0dHJpYnV0ZV9f ICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwpleHRlcm4gaW50IF9fdnNjYW5mIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9f Z251Y192YV9saXN0IF9fYXJnKQogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3Nj YW5mX18sIDEsIDApKSk7CmV4dGVybiBfX3NzaXplX3QgX19nZXRsaW5lIChjaGFyICoqX19saW5l cHRyLCBzaXplX3QgKl9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19z dHJlYW0pOwpleHRlcm4gaW50IF9fdnNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f cywKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h dCwKICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIF9fYXR0 cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoKZXh0ZXJuIEZJTEUg Kl9fbmV3X3RtcGZpbGUgKHZvaWQpOwpleHRlcm4gRklMRSAqX19vbGRfdG1wZmlsZSAodm9pZCk7 CgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1 ZGUvc3RkZGVmLmgiIDEgMwojIDQ1ICIuLi9pbmNsdWRlL3N0ZGlvLmgiIDIKCmV4dGVybiBpbnQg X19wYXRoX3NlYXJjaCAoY2hhciAqX190bXBsLCBzaXplX3QgX190bXBsX2xlbiwKICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fZGlyLCBfX2NvbnN0IGNoYXIgKl9fcGZ4 LAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3RyeV90ZW1wZGlyKTsKCmV4dGVybiBp bnQgX19nZW5fdGVtcG5hbWUgKGNoYXIgKl9fdG1wbCwgaW50IF9fa2luZCk7CgoKCgoKCgpleHRl cm4gdm9pZCBfX2xpYmNfZmF0YWwgKF9fY29uc3QgY2hhciAqX19tZXNzYWdlKQogICAgIF9fYXR0 cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgpleHRlcm4gdm9pZCBfX2Zsb2NrZmlsZSAoRklM RSAqX19zdHJlYW0pOwoKCmV4dGVybiB2b2lkIF9fZnVubG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFt KTsKCgoKZXh0ZXJuIGludCBfX2Z0cnlsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pOwoKZXh0ZXJu IGludCBfX2dldGNfdW5sb2NrZWQgKEZJTEUgKl9fZnApOwoKZXh0ZXJuIHdpbnRfdCBfX2dldHdj X3VubG9ja2VkIChGSUxFICpfX2ZwKTsKIyAyMSAicHRocmVhZC5jIiAyCiMgMSAiLi4vaW5jbHVk ZS9zdGRsaWIuaCIgMQoKCgoKCgojIDEgIi4uL3N0ZGxpYi9zdGRsaWIuaCIgMQojIDMzICIuLi9z dGRsaWIvc3RkbGliLmgiCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8z LjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQgIi4uL3N0ZGxpYi9zdGRsaWIuaCIgMgoKCgoK CgoKCiMgMSAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgvYml0cy93YWl0ZmxhZ3MuaCIgMQoj IDQzICIuLi9zdGRsaWIvc3RkbGliLmgiIDIKIyAxICIuLi9zeXNkZXBzL2dlbmVyaWMvYml0cy93 YWl0c3RhdHVzLmgiIDEKIyA2MyAiLi4vc3lzZGVwcy9nZW5lcmljL2JpdHMvd2FpdHN0YXR1cy5o IgojIDEgIi4uL2luY2x1ZGUvZW5kaWFuLmgiIDEKIyAxICIuLi9zdHJpbmcvZW5kaWFuLmgiIDEK IyAzNyAiLi4vc3RyaW5nL2VuZGlhbi5oIgojIDEgIi4uL3N5c2RlcHMvaTM4Ni9iaXRzL2VuZGlh bi5oIiAxCiMgMzggIi4uL3N0cmluZy9lbmRpYW4uaCIgMgojIDIgIi4uL2luY2x1ZGUvZW5kaWFu LmgiIDIKIyA2NCAiLi4vc3lzZGVwcy9nZW5lcmljL2JpdHMvd2FpdHN0YXR1cy5oIiAyCgp1bmlv biB3YWl0CiAgewogICAgaW50IHdfc3RhdHVzOwogICAgc3RydWN0CiAgICAgIHsKCiAgICAgICAg dW5zaWduZWQgaW50IF9fd190ZXJtc2lnOjc7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19jb3Jl ZHVtcDoxOwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfcmV0Y29kZTo4OwogICAgICAgIHVuc2ln bmVkIGludDoxNjsKCgoKCgoKCiAgICAgIH0gX193YWl0X3Rlcm1pbmF0ZWQ7CiAgICBzdHJ1Y3QK ICAgICAgewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3N0b3B2YWw6ODsKICAgICAgICB1bnNp Z25lZCBpbnQgX193X3N0b3BzaWc6ODsKICAgICAgICB1bnNpZ25lZCBpbnQ6MTY7CgoKCgoKCiAg ICAgIH0gX193YWl0X3N0b3BwZWQ7CiAgfTsKIyA0NCAiLi4vc3RkbGliL3N0ZGxpYi5oIiAyCiMg NjggIi4uL3N0ZGxpYi9zdGRsaWIuaCIKdHlwZWRlZiB1bmlvbgogIHsKICAgIHVuaW9uIHdhaXQg Kl9fdXB0cjsKICAgIGludCAqX19pcHRyOwogIH0gX19XQUlUX1NUQVRVUyBfX2F0dHJpYnV0ZV9f ICgoX190cmFuc3BhcmVudF91bmlvbl9fKSk7CiMgOTQgIi4uL3N0ZGxpYi9zdGRsaWIuaCIKdHlw ZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgcXVvdDsKICAgIGludCByZW07CiAgfSBkaXZfdDsKCgoK dHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGludCBxdW90OwogICAgbG9uZyBpbnQgcmVtOwog IH0gbGRpdl90OwoKCgoKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25n IGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGxvbmcgaW50IHJlbTsKICB9IGxsZGl2X3Q7CiMgMTMz ICIuLi9zdGRsaWIvc3RkbGliLmgiCmV4dGVybiBzaXplX3QgX19jdHlwZV9nZXRfbWJfY3VyX21h eCAodm9pZCkgOwoKCgpleHRlcm4gZG91YmxlIGF0b2YgKF9fY29uc3QgY2hhciAqX19ucHRyKSBf X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgYXRvaSAoX19jb25zdCBjaGFy ICpfX25wdHIpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGxvbmcgaW50IGF0 b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoK X19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBsb25nIGludCBhdG9sbCAoX19jb25zdCBjaGFyICpf X25wdHIpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBkb3VibGUg c3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIDsKCgoKZXh0ZXJuIGZsb2F0IHN0cnRv ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIDsKCmV4dGVybiBsb25nIGRvdWJsZSBzdHJ0b2xk IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIDsKCgoKZXh0ZXJuIGxvbmcgaW50IHN0 cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIDsKCmV4dGVybiB1 bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l bmRwdHIsIGludCBfX2Jhc2UpCiAgICAgOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxv bmcgaW50IHN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFz ZSkgOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3Vx IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkK ICAgICA7CgoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCAo X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIDsKCl9fZXh0ZW5z aW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91bGwgKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICA7CiMgMjEx ICIuLi9zdGRsaWIvc3RkbGliLmgiCiMgMSAiLi4vaW5jbHVkZS94bG9jYWxlLmgiIDEKIyAxICIu Li9sb2NhbGUveGxvY2FsZS5oIiAxCiMgMjggIi4uL2xvY2FsZS94bG9jYWxlLmgiCnR5cGVkZWYg c3RydWN0IF9fbG9jYWxlX3N0cnVjdAp7CgogIHN0cnVjdCBsb2NhbGVfZGF0YSAqX19sb2NhbGVz WzEzXTsKCgogIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwogIGNvbnN0IGlu dCAqX19jdHlwZV90b2xvd2VyOwogIGNvbnN0IGludCAqX19jdHlwZV90b3VwcGVyOwp9ICpfX2xv Y2FsZV90OwojIDIgIi4uL2luY2x1ZGUveGxvY2FsZS5oIiAyCiMgMjEyICIuLi9zdGRsaWIvc3Rk bGliLmgiIDIKCgoKZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9sX2wgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0 cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f bG9jYWxlX3QgX19sb2MpIDsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxfbCAo X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSA7Cgpf X2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9sbF9sIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSA7CgpfX2V4dGVuc2lvbl9fCmV4dGVy biB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfbCAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIDsKCmV4 dGVybiBkb3VibGUgX19zdHJ0b2RfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19s b2NhbGVfdCBfX2xvYykKICAgICA7CgpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfbCAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf X3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKSA7CgpleHRlcm4gbG9uZyBkb3Vi bGUgX19zdHJ0b2xkX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgOwoKCgoKCgpleHRl cm4gZG91YmxlIF9fc3RydG9kX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf X2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgOwpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfaW50ZXJu YWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAg IDsKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBfX2dyb3VwKSA7CgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfaW50ZXJu YWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIDsKCgoKZXh0ZXJu IHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSA7CgoKCgpfX2V4dGVu c2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9sbF9pbnRlcm5hbCAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgOwoKCgpfX2V4dGVu c2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfaW50ZXJuYWwg KF9fY29uc3QgY2hhciAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwg aW50IF9fZ3JvdXApCiAgICAgOwoKCgoKCgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZQpzdHJ0b2Qg KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k cHRyKQp7CiAgcmV0dXJuIF9fc3RydG9kX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsK fQpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQKc3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICBpbnQgX19iYXNl KQp7CiAgcmV0dXJuIF9fc3RydG9sX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2Us IDApOwp9CmV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25nIGludApzdHJ0b3VsIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAg ICAgICAgaW50IF9fYmFzZSkKewogIHJldHVybiBfX3N0cnRvdWxfaW50ZXJuYWwgKF9fbnB0ciwg X19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KCgpleHRlcm4gX19pbmxpbmUgZmxvYXQKc3RydG9mIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0 cikKewogIHJldHVybiBfX3N0cnRvZl9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0K ZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlCnN0cnRvbGQgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKQp7CiAgcmV0dXJuIF9fc3Ry dG9sZF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KCgoKX19leHRlbnNpb25fXyBl eHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludApzdHJ0b3EgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgIGludCBfX2Jh c2UpCnsKICByZXR1cm4gX19zdHJ0b2xsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jh c2UsIDApOwp9Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9u ZyBpbnQKc3RydG91cSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9f cmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2UpCnsKICByZXR1cm4gX19zdHJ0 b3VsbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCgpfX2V4dGVu c2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvbGwgKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAg ICBpbnQgX19iYXNlKQp7CiAgcmV0dXJuIF9fc3RydG9sbF9pbnRlcm5hbCAoX19ucHRyLCBfX2Vu ZHB0ciwgX19iYXNlLCAwKTsKfQpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB1bnNpZ25l ZCBsb25nIGxvbmcgaW50CnN0cnRvdWxsIChfX2NvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0IF9fbnB0 ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICBpbnQgX19iYXNlKQp7CiAg cmV0dXJuIF9fc3RydG91bGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7 Cn0KCgpleHRlcm4gX19pbmxpbmUgZG91YmxlCmF0b2YgKF9fY29uc3QgY2hhciAqX19ucHRyKQp7 CiAgcmV0dXJuIHN0cnRvZCAoX19ucHRyLCAoY2hhciAqKikgKCh2b2lkICopMCkpOwp9CmV4dGVy biBfX2lubGluZSBpbnQKYXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIpCnsKICByZXR1cm4gKGlu dCkgc3RydG9sIChfX25wdHIsIChjaGFyICoqKSAoKHZvaWQgKikwKSwgMTApOwp9CmV4dGVybiBf X2lubGluZSBsb25nIGludAphdG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKewogIHJldHVybiBz dHJ0b2wgKF9fbnB0ciwgKGNoYXIgKiopICgodm9pZCAqKTApLCAxMCk7Cn0KCgpfX2V4dGVuc2lv bl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CmF0b2xsIChfX2NvbnN0IGNoYXIgKl9f bnB0cikKewogIHJldHVybiBzdHJ0b2xsIChfX25wdHIsIChjaGFyICoqKSAoKHZvaWQgKikwKSwg MTApOwp9CiMgMzg0ICIuLi9zdGRsaWIvc3RkbGliLmgiCmV4dGVybiBjaGFyICpsNjRhIChsb25n IGludCBfX24pIDsKCgpleHRlcm4gbG9uZyBpbnQgYTY0bCAoX19jb25zdCBjaGFyICpfX3MpIF9f YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCiMgMSAiLi4vaW5jbHVkZS9zeXMvdHlwZXMuaCIg MQojIDEgIi4uL3Bvc2l4L3N5cy90eXBlcy5oIiAxCiMgMjggIi4uL3Bvc2l4L3N5cy90eXBlcy5o IgoKCgoKCgp0eXBlZGVmIF9fdV9jaGFyIHVfY2hhcjsKdHlwZWRlZiBfX3Vfc2hvcnQgdV9zaG9y dDsKdHlwZWRlZiBfX3VfaW50IHVfaW50Owp0eXBlZGVmIF9fdV9sb25nIHVfbG9uZzsKdHlwZWRl ZiBfX3F1YWRfdCBxdWFkX3Q7CnR5cGVkZWYgX191X3F1YWRfdCB1X3F1YWRfdDsKdHlwZWRlZiBf X2ZzaWRfdCBmc2lkX3Q7CgoKCgp0eXBlZGVmIF9fbG9mZl90IGxvZmZfdDsKCgoKdHlwZWRlZiBf X2lub190IGlub190OwoKCgoKCgp0eXBlZGVmIF9faW5vNjRfdCBpbm82NF90OwoKCgoKdHlwZWRl ZiBfX2Rldl90IGRldl90OwoKCgoKdHlwZWRlZiBfX2dpZF90IGdpZF90OwoKCgoKdHlwZWRlZiBf X21vZGVfdCBtb2RlX3Q7CgoKCgp0eXBlZGVmIF9fbmxpbmtfdCBubGlua190OwoKCgoKdHlwZWRl ZiBfX3VpZF90IHVpZF90OwoKCgoKCnR5cGVkZWYgX19vZmZfdCBvZmZfdDsKCgoKCgoKdHlwZWRl ZiBfX29mZjY0X3Qgb2ZmNjRfdDsKCgoKCnR5cGVkZWYgX19waWRfdCBwaWRfdDsKCgoKCnR5cGVk ZWYgX19pZF90IGlkX3Q7CgoKCgp0eXBlZGVmIF9fc3NpemVfdCBzc2l6ZV90OwoKCgoKCnR5cGVk ZWYgX19kYWRkcl90IGRhZGRyX3Q7CnR5cGVkZWYgX19jYWRkcl90IGNhZGRyX3Q7CgoKCgoKdHlw ZWRlZiBfX2tleV90IGtleV90OwojIDEzMiAiLi4vcG9zaXgvc3lzL3R5cGVzLmgiCiMgMSAiLi4v aW5jbHVkZS90aW1lLmgiIDEKCgojIDEgIi4uL3RpbWUvdGltZS5oIiAxCiMgNTkgIi4uL3RpbWUv dGltZS5oIgp0eXBlZGVmIF9fY2xvY2tfdCBjbG9ja190OwojIDcwICIuLi90aW1lL3RpbWUuaCIK dHlwZWRlZiBfX3RpbWVfdCB0aW1lX3Q7CiMgODIgIi4uL3RpbWUvdGltZS5oIgp0eXBlZGVmIF9f Y2xvY2tpZF90IGNsb2NraWRfdDsKIyA5NCAiLi4vdGltZS90aW1lLmgiCnR5cGVkZWYgX190aW1l cl90IHRpbWVyX3Q7CiMgNCAiLi4vaW5jbHVkZS90aW1lLmgiIDIKIyAxMzMgIi4uL3Bvc2l4L3N5 cy90eXBlcy5oIiAyCgoKCnR5cGVkZWYgX191c2Vjb25kc190IHVzZWNvbmRzX3Q7CgoKCnR5cGVk ZWYgX19zdXNlY29uZHNfdCBzdXNlY29uZHNfdDsKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIv aTU4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDE0NyAiLi4vcG9z aXgvc3lzL3R5cGVzLmgiIDIKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB1bG9uZzsKdHlw ZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgdXNob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50 OwojIDE5MCAiLi4vcG9zaXgvc3lzL3R5cGVzLmgiCnR5cGVkZWYgaW50IGludDhfdCBfX2F0dHJp YnV0ZV9fICgoX19tb2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiBpbnQgaW50MTZfdCBfX2F0dHJp YnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgaW50MzJfdCBfX2F0dHJp YnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiBpbnQgaW50NjRfdCBfX2F0dHJp YnV0ZV9fICgoX19tb2RlX18gKF9fRElfXykpKTsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2lu dDhfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiB1bnNpZ25l ZCBpbnQgdV9pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBl ZGVmIHVuc2lnbmVkIGludCB1X2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJ X18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19t b2RlX18gKF9fRElfXykpKTsKCnR5cGVkZWYgaW50IHJlZ2lzdGVyX3QgX19hdHRyaWJ1dGVfXyAo KF9fbW9kZV9fIChfX3dvcmRfXykpKTsKIyAyMTIgIi4uL3Bvc2l4L3N5cy90eXBlcy5oIgojIDEg Ii4uL2luY2x1ZGUvZW5kaWFuLmgiIDEKIyAyMTMgIi4uL3Bvc2l4L3N5cy90eXBlcy5oIiAyCgoK IyAxICIuLi9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMQoKIyAxICIuLi9taXNjL3N5cy9zZWxlY3Qu aCIgMQojIDMxICIuLi9taXNjL3N5cy9zZWxlY3QuaCIKIyAxICIuLi9zeXNkZXBzL2kzODYvYml0 cy9zZWxlY3QuaCIgMQojIDMyICIuLi9taXNjL3N5cy9zZWxlY3QuaCIgMgoKCiMgMSAiLi4vc3lz ZGVwcy91bml4L3N5c3YvbGludXgvYml0cy9zaWdzZXQuaCIgMQojIDIzICIuLi9zeXNkZXBzL3Vu aXgvc3lzdi9saW51eC9iaXRzL3NpZ3NldC5oIgp0eXBlZGVmIGludCBfX3NpZ19hdG9taWNfdDsK CgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgdW5zaWduZWQgbG9uZyBpbnQgX192YWxbKDEwMjQg LyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSldOwogIH0gX19zaWdzZXRfdDsKIyAz NSAiLi4vbWlzYy9zeXMvc2VsZWN0LmgiIDIKCgoKdHlwZWRlZiBfX3NpZ3NldF90IHNpZ3NldF90 OwoKCgoKCiMgMSAiLi4vaW5jbHVkZS90aW1lLmgiIDEKCgojIDEgIi4uL3RpbWUvdGltZS5oIiAx CiMgMTA2ICIuLi90aW1lL3RpbWUuaCIKc3RydWN0IHRpbWVzcGVjCiAgewogICAgX190aW1lX3Qg dHZfc2VjOwogICAgbG9uZyBpbnQgdHZfbnNlYzsKICB9OwojIDQgIi4uL2luY2x1ZGUvdGltZS5o IiAyCiMgNDUgIi4uL21pc2Mvc3lzL3NlbGVjdC5oIiAyCgojIDEgIi4uL3N5c2RlcHMvdW5peC9z eXN2L2xpbnV4L2kzODYvYml0cy90aW1lLmgiIDEKIyA2NyAiLi4vc3lzZGVwcy91bml4L3N5c3Yv bGludXgvaTM4Ni9iaXRzL3RpbWUuaCIKc3RydWN0IHRpbWV2YWwKICB7CiAgICBfX3RpbWVfdCB0 dl9zZWM7CiAgICBfX3N1c2Vjb25kc190IHR2X3VzZWM7CiAgfTsKIyA0NyAiLi4vbWlzYy9zeXMv c2VsZWN0LmgiIDIKIyA1NSAiLi4vbWlzYy9zeXMvc2VsZWN0LmgiCnR5cGVkZWYgbG9uZyBpbnQg X19mZF9tYXNrOwoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CgoKCiAgICBfX2ZkX21hc2sgZmRz X2JpdHNbMTAyNCAvICg4ICogc2l6ZW9mIChfX2ZkX21hc2spKV07CgoKCgoKICB9IGZkX3NldDsK CgoKCgoKdHlwZWRlZiBfX2ZkX21hc2sgZmRfbWFzazsKIyA5NSAiLi4vbWlzYy9zeXMvc2VsZWN0 LmgiCgoKCgoKCgpleHRlcm4gaW50IHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0ICpfX3Jlc3Ry aWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dy aXRlZmRzLAogICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRz LAogICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QgX190aW1lb3V0 KSA7CgoKCgoKZXh0ZXJuIGludCBwc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJp Y3QgX19yZWFkZmRzLAogICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dy aXRlZmRzLAogICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZk cywKICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3Qg X190aW1lb3V0LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fc2lnc2V0X3QgKl9fcmVzdHJp Y3QgX19zaWdtYXNrKSA7CgoKCiMgMyAiLi4vaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIKCgpleHRl cm4gaW50IF9fcHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0ICpfX3JlYWRmZHMsCiAgICAgICAg ICAgICAgICAgICAgICBmZF9zZXQgKl9fd3JpdGVmZHMsIGZkX3NldCAqX19leGNlcHRmZHMsCiAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fdGltZW91dCwKICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fc2lnc2V0X3QgKl9fc2lnbWFzayk7CgpleHRlcm4g aW50IF9fc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRzLAog ICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193cml0ZWZkcywKICAgICAg ICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqX19yZXN0cmljdCBfX3RpbWVvdXQpOwojIDIxNiAi Li4vcG9zaXgvc3lzL3R5cGVzLmgiIDIKCgojIDEgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4 L3N5cy9zeXNtYWNyb3MuaCIgMQojIDIxOSAiLi4vcG9zaXgvc3lzL3R5cGVzLmgiIDIKCgoKCnR5 cGVkZWYgX19ibGtzaXplX3QgYmxrc2l6ZV90OwoKCgoKCgp0eXBlZGVmIF9fYmxrY250X3QgYmxr Y250X3Q7CgoKCnR5cGVkZWYgX19mc2Jsa2NudF90IGZzYmxrY250X3Q7CgoKCnR5cGVkZWYgX19m c2ZpbGNudF90IGZzZmlsY250X3Q7CiMgMjU3ICIuLi9wb3NpeC9zeXMvdHlwZXMuaCIKdHlwZWRl ZiBfX2Jsa2NudDY0X3QgYmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzYmxrY250NjRfdCBmc2Jsa2Nu dDY0X3Q7CnR5cGVkZWYgX19mc2ZpbGNudDY0X3QgZnNmaWxjbnQ2NF90OwoKCgojIDIgIi4uL2lu Y2x1ZGUvc3lzL3R5cGVzLmgiIDIKIyAzOTEgIi4uL3N0ZGxpYi9zdGRsaWIuaCIgMgoKCgoKCgpl eHRlcm4gbG9uZyBpbnQgcmFuZG9tICh2b2lkKSA7CgoKZXh0ZXJuIHZvaWQgc3JhbmRvbSAodW5z aWduZWQgaW50IF9fc2VlZCkgOwoKCgoKCmV4dGVybiBjaGFyICppbml0c3RhdGUgKHVuc2lnbmVk IGludCBfX3NlZWQsIGNoYXIgKl9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNp emVfdCBfX3N0YXRlbGVuKSA7CgoKCmV4dGVybiBjaGFyICpzZXRzdGF0ZSAoY2hhciAqX19zdGF0 ZWJ1ZikgOwoKCgoKCgoKc3RydWN0IHJhbmRvbV9kYXRhCiAgewogICAgaW50MzJfdCAqZnB0cjsK ICAgIGludDMyX3QgKnJwdHI7CiAgICBpbnQzMl90ICpzdGF0ZTsKICAgIGludCByYW5kX3R5cGU7 CiAgICBpbnQgcmFuZF9kZWc7CiAgICBpbnQgcmFuZF9zZXA7CiAgICBpbnQzMl90ICplbmRfcHRy OwogIH07CgpleHRlcm4gaW50IHJhbmRvbV9yIChzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJp Y3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKl9fcmVzdHJpY3QgX19yZXN1 bHQpIDsKCmV4dGVybiBpbnQgc3JhbmRvbV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBzdHJ1Y3Qg cmFuZG9tX2RhdGEgKl9fYnVmKSA7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICh1bnNpZ25lZCBp bnQgX19zZWVkLCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVfdCBfX3N0YXRlbGVuLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg cmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIDsKCmV4dGVybiBpbnQgc2V0c3RhdGVfciAo Y2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgOwoKCgoKCmV4dGVybiBpbnQgcmFuZCAo dm9pZCkgOwoKZXh0ZXJuIHZvaWQgc3JhbmQgKHVuc2lnbmVkIGludCBfX3NlZWQpIDsKCgoKZXh0 ZXJuIGludCByYW5kX3IgKHVuc2lnbmVkIGludCAqX19zZWVkKSA7CgoKCgoKCgpleHRlcm4gZG91 YmxlIGRyYW5kNDggKHZvaWQpIDsKZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4ICh1bnNpZ25lZCBzaG9y dCBpbnQgX194c3ViaVszXSkgOwoKCmV4dGVybiBsb25nIGludCBscmFuZDQ4ICh2b2lkKSA7CmV4 dGVybiBsb25nIGludCBucmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgOwoK CmV4dGVybiBsb25nIGludCBtcmFuZDQ4ICh2b2lkKSA7CmV4dGVybiBsb25nIGludCBqcmFuZDQ4 ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgOwoKCmV4dGVybiB2b2lkIHNyYW5kNDgg KGxvbmcgaW50IF9fc2VlZHZhbCkgOwpleHRlcm4gdW5zaWduZWQgc2hvcnQgaW50ICpzZWVkNDgg KHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10pIDsKZXh0ZXJuIHZvaWQgbGNvbmc0OCAo dW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10pIDsKCgoKCgpzdHJ1Y3QgZHJhbmQ0OF9kYXRh CiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50IF9feFszXTsKICAgIHVuc2lnbmVkIHNob3J0IGlu dCBfX29sZF94WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fYzsKICAgIHVuc2lnbmVkIHNo b3J0IGludCBfX2luaXQ7CiAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fYTsKICB9OwoKCmV4 dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVm ZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7 CmV4dGVybiBpbnQgZXJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZm ZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsK CgpleHRlcm4gaW50IGxyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBf X2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVz dWx0KSA7CmV4dGVybiBpbnQgbnJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVsz XSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3Qg X19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jl c3VsdCkgOwoKCmV4dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jl c3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJp Y3QgX19yZXN1bHQpIDsKZXh0ZXJuIGludCBqcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBf X3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19y ZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3Ry aWN0IF9fcmVzdWx0KSA7CgoKZXh0ZXJuIGludCBzcmFuZDQ4X3IgKGxvbmcgaW50IF9fc2VlZHZh bCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpCiAgICAgOwoKZXh0ZXJuIGludCBzZWVk NDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSwKICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIDsKCmV4dGVybiBpbnQgbGNvbmc0OF9y ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSwKICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSA7CiMgNTI3ICIuLi9zdGRsaWIvc3RkbGliLmgi CmV4dGVybiB2b2lkICptYWxsb2MgKHNpemVfdCBfX3NpemUpIF9fYXR0cmlidXRlX18gKChfX21h bGxvY19fKSk7CgpleHRlcm4gdm9pZCAqY2FsbG9jIChzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9f c2l6ZSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCmV4dGVybiB2b2lk ICpyZWFsbG9jICh2b2lkICpfX3B0ciwgc2l6ZV90IF9fc2l6ZSkgX19hdHRyaWJ1dGVfXyAoKF9f bWFsbG9jX18pKTsKCmV4dGVybiB2b2lkIGZyZWUgKHZvaWQgKl9fcHRyKSA7CgoKCmV4dGVybiB2 b2lkIGNmcmVlICh2b2lkICpfX3B0cikgOwoKCgojIDEgIi4uL2luY2x1ZGUvYWxsb2NhLmgiIDEK CgojIDEgIi4uL3N0ZGxpYi9hbGxvY2EuaCIgMQojIDI1ICIuLi9zdGRsaWIvYWxsb2NhLmgiCiMg MSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYu aCIgMSAzCiMgMjYgIi4uL3N0ZGxpYi9hbGxvY2EuaCIgMgoKCgoKCgoKZXh0ZXJuIHZvaWQgKmFs bG9jYSAoc2l6ZV90IF9fc2l6ZSkgOwoKCgoKCgojIDQgIi4uL2luY2x1ZGUvYWxsb2NhLmgiIDIK CgoKCmV4dGVybiB2b2lkICpfX2FsbG9jYSAoc2l6ZV90IF9fc2l6ZSk7CiMgNTQ3ICIuLi9zdGRs aWIvc3RkbGliLmgiIDIKCgoKCmV4dGVybiB2b2lkICp2YWxsb2MgKHNpemVfdCBfX3NpemUpIF9f YXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4gaW50IHBvc2l4X21lbWFsaWdu ICh2b2lkICoqX19tZW1wdHIsIHNpemVfdCBfX2FsaWdubWVudCwgc2l6ZV90IF9fc2l6ZSkKICAg ICBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgpleHRlcm4gdm9pZCBhYm9ydCAodm9p ZCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgpleHRlcm4gaW50IGF0ZXhpdCAo dm9pZCAoKl9fZnVuYykgKHZvaWQpKSA7CgoKCgpleHRlcm4gaW50IG9uX2V4aXQgKHZvaWQgKCpf X2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKl9fYXJnKSwgdm9pZCAqX19hcmcpCiAgICAgOwoK CgoKCmV4dGVybiB2b2lkIGV4aXQgKGludCBfX3N0YXR1cykgX19hdHRyaWJ1dGVfXyAoKF9fbm9y ZXR1cm5fXykpOwoKCgoKZXh0ZXJuIHZvaWQgX0V4aXQgKGludCBfX3N0YXR1cykgX19hdHRyaWJ1 dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIGNoYXIgKmdldGVudiAoX19jb25zdCBj aGFyICpfX25hbWUpIDsKCgoKZXh0ZXJuIGNoYXIgKl9fc2VjdXJlX2dldGVudiAoX19jb25zdCBj aGFyICpfX25hbWUpIDsKCgoKCgpleHRlcm4gaW50IHB1dGVudiAoY2hhciAqX19zdHJpbmcpIDsK CgoKCgpleHRlcm4gaW50IHNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hh ciAqX192YWx1ZSwgaW50IF9fcmVwbGFjZSkKICAgICA7CgoKZXh0ZXJuIGludCB1bnNldGVudiAo X19jb25zdCBjaGFyICpfX25hbWUpIDsKCgoKCgoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9pZCkg OwojIDYyMyAiLi4vc3RkbGliL3N0ZGxpYi5oIgpleHRlcm4gY2hhciAqbWt0ZW1wIChjaGFyICpf X3RlbXBsYXRlKSA7CgoKCgoKCgpleHRlcm4gaW50IG1rc3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUp IDsKIyA2NDAgIi4uL3N0ZGxpYi9zdGRsaWIuaCIKZXh0ZXJuIGludCBta3N0ZW1wNjQgKGNoYXIg Kl9fdGVtcGxhdGUpIDsKIyA2NTAgIi4uL3N0ZGxpYi9zdGRsaWIuaCIKZXh0ZXJuIGNoYXIgKm1r ZHRlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIDsKCgoKCmV4dGVybiBpbnQgc3lzdGVtIChfX2NvbnN0 IGNoYXIgKl9fY29tbWFuZCkgOwoKCgoKCgpleHRlcm4gY2hhciAqY2Fub25pY2FsaXplX2ZpbGVf bmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUpIDsKIyA2NzIgIi4uL3N0ZGxpYi9zdGRsaWIuaCIK ZXh0ZXJuIGNoYXIgKnJlYWxwYXRoIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAog ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19yZXNvbHZlZCkgOwoKCgoK Cgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3QpIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2 b2lkICopOwoKCnR5cGVkZWYgX19jb21wYXJfZm5fdCBjb21wYXJpc29uX2ZuX3Q7CgoKCgoKZXh0 ZXJuIHZvaWQgKmJzZWFyY2ggKF9fY29uc3Qgdm9pZCAqX19rZXksIF9fY29uc3Qgdm9pZCAqX19i YXNlLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUs IF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCgpleHRlcm4gdm9pZCBxc29ydCAodm9pZCAqX19i YXNlLCBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgIF9f Y29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCgpleHRlcm4gaW50IGFicyAoaW50IF9feCkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbG9uZyBpbnQgbGFicyAobG9uZyBpbnQgX194 KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25n IGxvbmcgaW50IGxsYWJzIChsb25nIGxvbmcgaW50IF9feCkKICAgICBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7CgoKCgoKCmV4dGVybiBkaXZfdCBkaXYgKGludCBfX251bWVyLCBpbnQgX19k ZW5vbSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsZGl2X3QgbGRp diAobG9uZyBpbnQgX19udW1lciwgbG9uZyBpbnQgX19kZW5vbSkKICAgICBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsbGRpdl90IGxsZGl2IChsb25n IGxvbmcgaW50IF9fbnVtZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxv bmcgbG9uZyBpbnQgX19kZW5vbSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMg NzI4ICIuLi9zdGRsaWIvc3RkbGliLmgiCmV4dGVybiBjaGFyICplY3Z0IChkb3VibGUgX192YWx1 ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAg ICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24pIDsKCgoKCmV4dGVybiBjaGFyICpmY3Z0IChkb3Vi bGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAg ICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24pIDsKCgoKCmV4dGVybiBjaGFyICpn Y3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgOwoKCgoKZXh0 ZXJuIGNoYXIgKnFlY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAg ICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBf X3NpZ24pIDsKZXh0ZXJuIGNoYXIgKnFmY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19u ZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAq X19yZXN0cmljdCBfX3NpZ24pIDsKZXh0ZXJuIGNoYXIgKnFnY3Z0IChsb25nIGRvdWJsZSBfX3Zh bHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSA7CgoKCgpleHRlcm4gaW50IGVjdnRfciAo ZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAg ICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0 IF9fYnVmLAogICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuKSA7CmV4dGVybiBpbnQgZmN2 dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNw dCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVz dHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIDsKCmV4dGVybiBp bnQgcWVjdnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAg ICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWdu LAogICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xl bikgOwpleHRlcm4gaW50IHFmY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdp dCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jl c3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVm LCBzaXplX3QgX19sZW4pIDsKCgoKCgoKZXh0ZXJuIGludCBtYmxlbiAoX19jb25zdCBjaGFyICpf X3MsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gaW50IG1idG93YyAod2NoYXJfdCAqX19yZXN0cmlj dCBfX3B3YywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Ms IHNpemVfdCBfX24pIDsKCgpleHRlcm4gaW50IHdjdG9tYiAoY2hhciAqX19zLCB3Y2hhcl90IF9f d2NoYXIpIDsKCgoKZXh0ZXJuIHNpemVfdCBtYnN0b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBf X3B3Y3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X3MsIHNpemVfdCBfX24pIDsKCmV4dGVybiBzaXplX3Qgd2NzdG9tYnMgKGNoYXIgKl9fcmVzdHJp Y3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp Y3QgX19wd2NzLCBzaXplX3QgX19uKQogICAgIDsKCgoKCgoKCmV4dGVybiBpbnQgcnBtYXRjaCAo X19jb25zdCBjaGFyICpfX3Jlc3BvbnNlKSA7CiMgODA4ICIuLi9zdGRsaWIvc3RkbGliLmgiCmV4 dGVybiBpbnQgZ2V0c3Vib3B0IChjaGFyICoqX19yZXN0cmljdCBfX29wdGlvbnAsCiAgICAgICAg ICAgICAgICAgICAgICBjaGFyICpfX2NvbnN0ICpfX3Jlc3RyaWN0IF9fdG9rZW5zLAogICAgICAg ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX192YWx1ZXApIDsKCgoKCgpleHRlcm4g dm9pZCBzZXRrZXkgKF9fY29uc3QgY2hhciAqX19rZXkpIDsKCgoKCgoKCmV4dGVybiBpbnQgcG9z aXhfb3BlbnB0IChpbnQgX19vZmxhZykgOwoKCgoKCgoKZXh0ZXJuIGludCBncmFudHB0IChpbnQg X19mZCkgOwoKCgpleHRlcm4gaW50IHVubG9ja3B0IChpbnQgX19mZCkgOwoKCgoKZXh0ZXJuIGNo YXIgKnB0c25hbWUgKGludCBfX2ZkKSA7CgoKCgoKCmV4dGVybiBpbnQgcHRzbmFtZV9yIChpbnQg X19mZCwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgOwoKCmV4dGVybiBpbnQgZ2V0cHQg KHZvaWQpIDsKCgoKCgoKZXh0ZXJuIGludCBnZXRsb2FkYXZnIChkb3VibGUgX19sb2FkYXZnW10s IGludCBfX25lbGVtKSA7CgoKCgoKCiMgOCAiLi4vaW5jbHVkZS9zdGRsaWIuaCIgMgoKCgpleHRl cm4gbG9uZyBpbnQgX19yYW5kb20gKHZvaWQpOwpleHRlcm4gdm9pZCBfX3NyYW5kb20gKHVuc2ln bmVkIGludCBfX3NlZWQpOwpleHRlcm4gY2hhciAqX19pbml0c3RhdGUgKHVuc2lnbmVkIGludCBf X3NlZWQsIGNoYXIgKl9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90 IF9fc3RhdGVsZW4pOwpleHRlcm4gY2hhciAqX19zZXRzdGF0ZSAoY2hhciAqX19zdGF0ZWJ1Zik7 CmV4dGVybiBpbnQgX19yYW5kb21fciAoc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZiwgaW50MzJf dCAqX19yZXN1bHQpOwpleHRlcm4gaW50IF9fc3JhbmRvbV9yICh1bnNpZ25lZCBpbnQgX19zZWVk LCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKTsKZXh0ZXJuIGludCBfX2luaXRzdGF0ZV9yICh1 bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVfdCBfX3N0YXRlbGVuLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKTsKZXh0 ZXJuIGludCBfX3NldHN0YXRlX3IgKGNoYXIgKl9fc3RhdGVidWYsIHN0cnVjdCByYW5kb21fZGF0 YSAqX19idWYpOwpleHRlcm4gaW50IF9fcmFuZF9yICh1bnNpZ25lZCBpbnQgKl9fc2VlZCk7CmV4 dGVybiBpbnQgX19lcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlciwgZG91Ymxl ICpfX3Jlc3VsdCk7CmV4dGVybiBpbnQgX19ucmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBf X3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf X2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdWx0KTsKZXh0 ZXJuIGludCBfX2pyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyLAogICAgICAg ICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN1bHQpOwpleHRlcm4gaW50IF9fc3JhbmQ0 OF9yIChsb25nIGludCBfX3NlZWR2YWwsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBk cmFuZDQ4X2RhdGEgKl9fYnVmZmVyKTsKZXh0ZXJuIGludCBfX3NlZWQ0OF9yICh1bnNpZ25lZCBz aG9ydCBpbnQgX19zZWVkMTZ2WzNdLAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFu ZDQ4X2RhdGEgKl9fYnVmZmVyKTsKZXh0ZXJuIGludCBfX2xjb25nNDhfciAodW5zaWduZWQgc2hv cnQgaW50IF9fcGFyYW1bN10sCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4 X2RhdGEgKl9fYnVmZmVyKTsKCgpleHRlcm4gaW50IF9fZHJhbmQ0OF9pdGVyYXRlICh1bnNpZ25l ZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpOwoKZXh0ZXJuIGludCBfX3NldGVudiAoX19jb25z dCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192YWx1ZSwKICAgICAgICAgICAgICAgICAg ICAgaW50IF9fcmVwbGFjZSk7CmV4dGVybiBpbnQgX191bnNldGVudiAoX19jb25zdCBjaGFyICpf X25hbWUpOwpleHRlcm4gaW50IF9fY2xlYXJlbnYgKHZvaWQpOwpleHRlcm4gY2hhciAqX19jYW5v bmljYWxpemVfZmlsZV9uYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSk7CmV4dGVybiBjaGFyICpf X3JlYWxwYXRoIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgY2hhciAqX19yZXNvbHZlZCk7CmV4dGVy biBpbnQgX19wdHNuYW1lX3IgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVu KTsKZXh0ZXJuIGludCBfX2dldHB0ICh2b2lkKTsKZXh0ZXJuIGludCBfX3Bvc2l4X29wZW5wdCAo aW50IF9fb2ZsYWcpOwoKZXh0ZXJuIGludCBfX2FkZF90b19lbnZpcm9uIChjb25zdCBjaGFyICpu YW1lLCBjb25zdCBjaGFyICp2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyICpjb21iaW5lcywgaW50IHJlcGxhY2UpOwoKZXh0ZXJuIHZvaWQgX3F1aWNrc29ydCAo dm9pZCAqY29uc3QgcGJhc2UsIHNpemVfdCB0b3RhbF9lbGVtcywKICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZV90IHNpemUsIF9fY29tcGFyX2ZuX3QgY21wKTsKCmV4dGVybiBpbnQgX19vbl9l eGl0ICh2b2lkICgqX19mdW5jKSAoaW50IF9fc3RhdHVzLCB2b2lkICpfX2FyZyksIHZvaWQgKl9f YXJnKTsKCmV4dGVybiBpbnQgX19jeGFfYXRleGl0ICh2b2lkICgqZnVuYykgKHZvaWQgKiksIHZv aWQgKmFyZywgdm9pZCAqZCk7CgpleHRlcm4gdm9pZCBfX2N4YV9maW5hbGl6ZSAodm9pZCAqZCk7 CgpleHRlcm4gaW50IF9fcG9zaXhfbWVtYWxpZ24gKHZvaWQgKiptZW1wdHIsIHNpemVfdCBhbGln bm1lbnQsIHNpemVfdCBzaXplKQogICAgIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7Cgpl eHRlcm4gaW50IF9fbGliY19zeXN0ZW0gKGNvbnN0IGNoYXIgKmxpbmUpOwojIDIyICJwdGhyZWFk LmMiIDIKIyAxICIuLi9pbmNsdWRlL3N0cmluZy5oIiAxCgoKIyAxICIuLi9pbmNsdWRlL3N5cy90 eXBlcy5oIiAxCiMgNCAiLi4vaW5jbHVkZS9zdHJpbmcuaCIgMgoKZXh0ZXJuIHZvaWQgKl9fbWVt Y2NweSAodm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3JjLAogICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBfX2MsIHNpemVfdCBfX24pOwoKZXh0ZXJuIHNpemVfdCBfX3N0cm5sZW4g KF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX21heGxlbikKICAgICBfX2F0dHJpYnV0 ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpfX3N0cnNlcCAoY2hhciAqKl9fc3RyaW5n cCwgX19jb25zdCBjaGFyICpfX2RlbGltKTsKCmV4dGVybiBpbnQgX19zdHJ2ZXJzY21wIChfX2Nv bnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCmV4dGVybiBpbnQgX19zdHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3Mx LCBfX2NvbnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9f bikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgX19zdHJjYXNl Y21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICBfX2F0dHJp YnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpfX3N0cmNhc2VzdHIgKF9fY29uc3Qg Y2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkKICAgICBfX2F0dHJpYnV0 ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpfX3N0cmR1cCAoX19jb25zdCBjaGFyICpf X3N0cmluZykKICAgICBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwpleHRlcm4gY2hhciAq X19zdHJuZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19uKQogICAgIF9fYXR0 cmlidXRlX18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCAqX19yYXdtZW1jaHIgKF9fY29u c3Qgdm9pZCAqX19zLCBpbnQgX19jKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK ZXh0ZXJuIGNoYXIgKl9fc3RyY2hybnVsIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykKICAg ICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiB2b2lkICpfX21lbXJjaHIgKF9f Y29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQogICAgIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKZXh0ZXJuIHZvaWQgKl9fbWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywg aW50IF9fYywgc2l6ZV90IF9fbikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4 dGVybiBpbnQgX19mZnMgKGludCBfX2kpIF9fYXR0cmlidXRlX18gKChjb25zdCkpOwoKZXh0ZXJu IGNoYXIgKl9fc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9f YnVmbGVuKTsKCgoKIyAxICIuLi9zdHJpbmcvc3RyaW5nLmgiIDEKIyAyOCAiLi4vc3RyaW5nL3N0 cmluZy5oIgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIv aW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQgIi4uL3N0cmluZy9zdHJpbmcuaCIgMgoKCgpleHRl cm4gdm9pZCAqbWVtY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAg ICAgICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7CgoKZXh0 ZXJuIHZvaWQgKm1lbW1vdmUgKHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywgc2l6 ZV90IF9fbikKICAgICA7CgoKCgoKZXh0ZXJuIHZvaWQgKm1lbWNjcHkgKHZvaWQgKl9fcmVzdHJp Y3QgX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAg ICAgICAgICBpbnQgX19jLCBzaXplX3QgX19uKQogICAgIDsKCgoKCmV4dGVybiB2b2lkICptZW1z ZXQgKHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgbWVtY21w IChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAg ICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtY2hyIChfX2Nv bnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAgX19hdHRyaWJ1dGVfXyAo KF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gdm9pZCAqcmF3bWVtY2hyIChfX2NvbnN0IHZvaWQgKl9f cywgaW50IF9fYykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1l bXJjaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQogICAgICBfX2F0 dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJjcHkgKGNoYXIgKl9f cmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgOwoK ZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7 CgoKZXh0ZXJuIGNoYXIgKnN0cmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICA7CgpleHRlcm4gY2hhciAqc3RybmNhdCAoY2hh ciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywKICAg ICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pIDsKCgpleHRlcm4gaW50IHN0cmNtcCAoX19j b25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgX19hdHRyaWJ1dGVfXyAo KF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHN0cm5jbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19j b25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVf XykpOwoKCmV4dGVybiBpbnQgc3RyY29sbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNo YXIgKl9fczIpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90 IHN0cnhmcm0gKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgOwoKCgoKCiMgMSAi Li4vaW5jbHVkZS94bG9jYWxlLmgiIDEKIyAxMDkgIi4uL3N0cmluZy9zdHJpbmcuaCIgMgoKCmV4 dGVybiBpbnQgX19zdHJjb2xsX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpf X3MyLCBfX2xvY2FsZV90IF9fbCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4 dGVybiBzaXplX3QgX19zdHJ4ZnJtX2wgKGNoYXIgKl9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Ny Yywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2wp IDsKCgoKCmV4dGVybiBjaGFyICpzdHJkdXAgKF9fY29uc3QgY2hhciAqX19zKSBfX2F0dHJpYnV0 ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCgpleHRlcm4gY2hhciAqc3RybmR1cCAoX19jb25zdCBj aGFyICpfX3N0cmluZywgc2l6ZV90IF9fbikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2Nf XykpOwojIDE1NSAiLi4vc3RyaW5nL3N0cmluZy5oIgpleHRlcm4gY2hhciAqc3RyY2hyIChfX2Nv bnN0IGNoYXIgKl9fcywgaW50IF9fYykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRl cm4gY2hhciAqc3RycmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIF9fYXR0cmlidXRl X18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNocm51bCAoX19jb25zdCBjaGFy ICpfX3MsIGludCBfX2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHNp emVfdCBzdHJjc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX3JlamVjdCkK ICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gc2l6ZV90IHN0cnNwbiAo X19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgX19hdHRyaWJ1 dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycGJyayAoX19jb25zdCBjaGFyICpf X3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CgpleHRlcm4gY2hhciAqc3Ryc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29u c3QgY2hhciAqX19uZWVkbGUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4 dGVybiBjaGFyICpzdHJjYXNlc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3Qg Y2hhciAqX19uZWVkbGUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVy biBjaGFyICpzdHJ0b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19kZWxpbSkKICAgICA7CgoKCmV4dGVybiBjaGFyICpfX3N0cnRva19yIChjaGFyICpf X3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp Y3QgX19zYXZlX3B0cikgOwoKZXh0ZXJuIGNoYXIgKnN0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0 IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAg ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgOwoKCgoKCgpleHRlcm4gdm9pZCAq bWVtbWVtIChfX2NvbnN0IHZvaWQgKl9faGF5c3RhY2ssIHNpemVfdCBfX2hheXN0YWNrbGVuLAog ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fbmVlZGxlLCBzaXplX3QgX19uZWVk bGVsZW4pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiB2b2lkICpf X21lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIDsKZXh0ZXJuIHZv aWQgKm1lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7CgoKCgpleHRl cm4gc2l6ZV90IHN0cmxlbiAoX19jb25zdCBjaGFyICpfX3MpIF9fYXR0cmlidXRlX18gKChfX3B1 cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJubGVuIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5n LCBzaXplX3QgX19tYXhsZW4pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpl eHRlcm4gY2hhciAqc3RyZXJyb3IgKGludCBfX2Vycm51bSkgOwoKCgpleHRlcm4gY2hhciAqc3Ry ZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSA7CgoK CgpleHRlcm4gdm9pZCBfX2J6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIDsKCgoKZXh0ZXJu IHZvaWQgYmNvcHkgKF9fY29uc3Qgdm9pZCAqX19zcmMsIHZvaWQgKl9fZGVzdCwgc2l6ZV90IF9f bikgOwoKCmV4dGVybiB2b2lkIGJ6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIDsKCgpleHRl cm4gaW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXpl X3QgX19uKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpp bmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf XykpOwoKCmV4dGVybiBjaGFyICpyaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSBf X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGludCBmZnMgKGludCBfX2kpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgZmZzbCAobG9uZyBpbnQg X19sKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBp bnQgZmZzbGwgKGxvbmcgbG9uZyBpbnQgX19sbCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgoKCgpleHRlcm4gaW50IHN0cmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19j b25zdCBjaGFyICpfX3MyKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVy biBpbnQgc3RybmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3My LCBzaXplX3QgX19uKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVy biBpbnQgX19zdHJjYXNlY21wX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpf X3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSBfX2F0dHJp YnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgX19zdHJuY2FzZWNtcF9sIChfX2NvbnN0 IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9f cHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnNlcCAoY2hhciAqKl9fcmVzdHJpY3QgX19z dHJpbmdwLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19k ZWxpbSkgOwoKCgoKZXh0ZXJuIGludCBzdHJ2ZXJzY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9f Y29uc3QgY2hhciAqX19zMikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRl cm4gY2hhciAqc3Ryc2lnbmFsIChpbnQgX19zaWcpIDsKCgpleHRlcm4gY2hhciAqX19zdHBjcHkg KGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMp CiAgICAgOwpleHRlcm4gY2hhciAqc3RwY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIDsKCgoKZXh0ZXJuIGNoYXIgKl9fc3Rw bmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgOwpleHRlcm4gY2hhciAq c3RwbmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gY2hh ciAqc3RyZnJ5IChjaGFyICpfX3N0cmluZykgOwoKCmV4dGVybiB2b2lkICptZW1mcm9iICh2b2lk ICpfX3MsIHNpemVfdCBfX24pIDsKCgoKCgoKZXh0ZXJuIGNoYXIgKmJhc2VuYW1lIChfX2NvbnN0 IGNoYXIgKl9fZmlsZW5hbWUpIDsKIyAzNTcgIi4uL3N0cmluZy9zdHJpbmcuaCIKIyAxICIuLi9z eXNkZXBzL2kzODYvaTQ4Ni9iaXRzL3N0cmluZy5oIiAxCiMgNjQgIi4uL3N5c2RlcHMvaTM4Ni9p NDg2L2JpdHMvc3RyaW5nLmgiCmV4dGVybiBfX2lubGluZSB2b2lkICpfX21lbWNweV9ieTQgKHZv aWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZV90IF9fbik7CgpleHRlcm4gX19pbmxpbmUgdm9pZCAqCl9fbWVtY3B5 X2J5NCAodm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3JjLCBzaXplX3QgX19uKQp7CiAg cmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBpbnQgX19kMCwgX19kMTsKICByZWdpc3RlciB2b2lkICpf X3RtcCA9IF9fZGVzdDsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXwogICAgKCIxOlxuXHQiCiAgICAg Im1vdmwJKCUyKSwlMFxuXHQiCiAgICAgImxlYWwJNCglMiksJTJcblx0IgogICAgICJtb3ZsCSUw LCglMSlcblx0IgogICAgICJsZWFsCTQoJTEpLCUxXG5cdCIKICAgICAiZGVjbAklM1xuXHQiCiAg ICAgImpuegkxYiIKICAgICA6ICI9JnIiIChfX2QwKSwgIj0mciIgKF9fdG1wKSwgIj0mciIgKF9f c3JjKSwgIj0mciIgKF9fZDEpCiAgICAgOiAiMSIgKF9fdG1wKSwgIjIiIChfX3NyYyksICIzIiAo X19uIC8gNCkKICAgICA6ICJtZW1vcnkiLCAiY2MiKTsKICByZXR1cm4gX19kZXN0Owp9CgpleHRl cm4gX19pbmxpbmUgdm9pZCAqX19tZW1jcHlfYnkyICh2b2lkICpfX2Rlc3QsIF9fY29uc3Qgdm9p ZCAqX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24p OwoKZXh0ZXJuIF9faW5saW5lIHZvaWQgKgpfX21lbWNweV9ieTIgKHZvaWQgKl9fZGVzdCwgX19j b25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikKewogIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcg aW50IF9fZDAsIF9fZDE7CiAgcmVnaXN0ZXIgdm9pZCAqX190bXAgPSBfX2Rlc3Q7CiAgX19hc21f XyBfX3ZvbGF0aWxlX18KICAgICgic2hybAkkMSwlM1xuXHQiCiAgICAgImp6CTJmXG4iCiAgICAg IjE6XG5cdCIKICAgICAibW92bAkoJTIpLCUwXG5cdCIKICAgICAibGVhbAk0KCUyKSwlMlxuXHQi CiAgICAgIm1vdmwJJTAsKCUxKVxuXHQiCiAgICAgImxlYWwJNCglMSksJTFcblx0IgogICAgICJk ZWNsCSUzXG5cdCIKICAgICAiam56CTFiXG4iCiAgICAgIjI6XG5cdCIKICAgICAibW92dwkoJTIp LCV3MFxuXHQiCiAgICAgIm1vdncJJXcwLCglMSkiCiAgICAgOiAiPSZxIiAoX19kMCksICI9JnIi IChfX3RtcCksICI9JnIiIChfX3NyYyksICI9JnIiIChfX2QxKQogICAgIDogIjEiIChfX3RtcCks ICIyIiAoX19zcmMpLCAiMyIgKF9fbiAvIDIpCiAgICAgOiAibWVtb3J5IiwgImNjIik7CiAgcmV0 dXJuIF9fZGVzdDsKfQoKZXh0ZXJuIF9faW5saW5lIHZvaWQgKl9fbWVtY3B5X2cgKHZvaWQgKl9f ZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCBfX24pOwoKZXh0ZXJuIF9faW5saW5lIHZvaWQgKgpfX21lbWNweV9nICh2b2lk ICpfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19zcmMsIHNpemVfdCBfX24pCnsKICByZWdpc3RlciB1 bnNpZ25lZCBsb25nIGludCBfX2QwLCBfX2QxLCBfX2QyOwogIHJlZ2lzdGVyIHZvaWQgKl9fdG1w ID0gX19kZXN0OwogIF9fYXNtX18gX192b2xhdGlsZV9fCiAgICAoImNsZFxuXHQiCiAgICAgInNo cmwJJDEsJSVlY3hcblx0IgogICAgICJqbmMJMWZcblx0IgogICAgICJtb3ZzYlxuIgogICAgICIx OlxuXHQiCiAgICAgInNocmwJJDEsJSVlY3hcblx0IgogICAgICJqbmMJMmZcblx0IgogICAgICJt b3Zzd1xuIgogICAgICIyOlxuXHQiCiAgICAgInJlcDsgbW92c2wiCiAgICAgOiAiPSZjIiAoX19k MCksICI9JkQiIChfX2QxKSwgIj0mUyIgKF9fZDIpCiAgICAgOiAiMCIgKF9fbiksICIxIiAoX190 bXApLCAiMiIgKF9fc3JjKQogICAgIDogIm1lbW9yeSIsICJjYyIpOwogIHJldHVybiBfX2Rlc3Q7 Cn0KCgoKCgpleHRlcm4gX19pbmxpbmUgdm9pZCAqCm1lbW1vdmUgKHZvaWQgKl9fZGVzdCwgX19j b25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikKewogIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcg aW50IF9fZDAsIF9fZDEsIF9fZDI7CiAgcmVnaXN0ZXIgdm9pZCAqX190bXAgPSBfX2Rlc3Q7CiAg aWYgKF9fZGVzdCA8IF9fc3JjKQogICAgX19hc21fXyBfX3ZvbGF0aWxlX18KICAgICAgKCJjbGRc blx0IgogICAgICAgInJlcDsgbW92c2IiCiAgICAgICA6ICI9JmMiIChfX2QwKSwgIj0mUyIgKF9f ZDEpLCAiPSZEIiAoX19kMikKICAgICAgIDogIjAiIChfX24pLCAiMSIgKF9fc3JjKSwgIjIiIChf X3RtcCkKICAgICAgIDogIm1lbW9yeSIpOwogIGVsc2UKICAgIF9fYXNtX18gX192b2xhdGlsZV9f CiAgICAgICgic3RkXG5cdCIKICAgICAgICJyZXA7IG1vdnNiXG5cdCIKICAgICAgICJjbGQiCiAg ICAgICA6ICI9JmMiIChfX2QwKSwgIj0mUyIgKF9fZDEpLCAiPSZEIiAoX19kMikKICAgICAgIDog IjAiIChfX24pLCAiMSIgKF9fbiAtIDEgKyAoX19jb25zdCBjaGFyICopIF9fc3JjKSwKICAgICAg ICAgIjIiIChfX24gLSAxICsgKGNoYXIgKikgX190bXApCiAgICAgICA6ICJtZW1vcnkiKTsKICBy ZXR1cm4gX19kZXN0Owp9CgoKCgoKCgpleHRlcm4gX19pbmxpbmUgaW50Cm1lbWNtcCAoX19jb25z dCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCnsKICByZWdpc3Rl ciB1bnNpZ25lZCBsb25nIGludCBfX2QwLCBfX2QxLCBfX2QyOwogIHJlZ2lzdGVyIGludCBfX3Jl czsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXwogICAgKCJjbGRcblx0IgogICAgICJ0ZXN0bCAlMywl M1xuXHQiCiAgICAgInJlcGU7IGNtcHNiXG5cdCIKICAgICAiamUJMWZcblx0IgogICAgICJzYmJs CSUwLCUwXG5cdCIKICAgICAib3JsCSQxLCUwXG4iCiAgICAgIjE6IgogICAgIDogIj1hIiAoX19y ZXMpLCAiPSZTIiAoX19kMCksICI9JkQiIChfX2QxKSwgIj0mYyIgKF9fZDIpCiAgICAgOiAiMCIg KDApLCAiMSIgKF9fczEpLCAiMiIgKF9fczIpLCAiMyIgKF9fbikKICAgICA6ICJjYyIpOwogIHJl dHVybiBfX3JlczsKfQojIDMwMCAiLi4vc3lzZGVwcy9pMzg2L2k0ODYvYml0cy9zdHJpbmcuaCIK ZXh0ZXJuIF9faW5saW5lIHZvaWQgKl9fbWVtc2V0X2Njbl9ieTQgKHZvaWQgKl9fcywgdW5zaWdu ZWQgaW50IF9fYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBfX24pOwoKZXh0ZXJuIF9faW5saW5lIHZvaWQgKgpfX21lbXNldF9jY25fYnk0ICh2b2lkICpf X3MsIHVuc2lnbmVkIGludCBfX2MsIHNpemVfdCBfX24pCnsKICByZWdpc3RlciB2b2lkICpfX3Rt cCA9IF9fczsKICByZWdpc3RlciB1bnNpZ25lZCBsb25nIGludCBfX2QwOwojIDMxNiAiLi4vc3lz ZGVwcy9pMzg2L2k0ODYvYml0cy9zdHJpbmcuaCIKICBfX2FzbV9fIF9fdm9sYXRpbGVfXwogICAg KCIxOlxuXHQiCiAgICAgIm1vdmwJJTAsKCUxKVxuXHQiCiAgICAgImFkZGwJJDQsJTFcblx0Igog ICAgICJkZWNsCSUyXG5cdCIKICAgICAiam56CTFiXG4iCiAgICAgOiAiPSZyIiAoX19jKSwgIj0m ciIgKF9fdG1wKSwgIj0mciIgKF9fZDApCiAgICAgOiAiMCIgKCh1bnNpZ25lZCBpbnQpIF9fYyks ICIxIiAoX190bXApLCAiMiIgKF9fbiAvIDQpCiAgICAgOiAibWVtb3J5IiwgImNjIik7CgogIHJl dHVybiBfX3M7Cn0KCmV4dGVybiBfX2lubGluZSB2b2lkICpfX21lbXNldF9jY25fYnkyICh2b2lk ICpfX3MsIHVuc2lnbmVkIGludCBfX2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3QgX19uKTsKCmV4dGVybiBfX2lubGluZSB2b2lkICoKX19tZW1zZXRfY2Nu X2J5MiAodm9pZCAqX19zLCB1bnNpZ25lZCBpbnQgX19jLCBzaXplX3QgX19uKQp7CiAgcmVnaXN0 ZXIgdW5zaWduZWQgbG9uZyBpbnQgX19kMCwgX19kMTsKICByZWdpc3RlciB2b2lkICpfX3RtcCA9 IF9fczsKIyAzNDYgIi4uL3N5c2RlcHMvaTM4Ni9pNDg2L2JpdHMvc3RyaW5nLmgiCiAgX19hc21f XyBfX3ZvbGF0aWxlX18KICAgICgiMTpcdG1vdmwJJTAsKCUxKVxuXHQiCiAgICAgImxlYWwJNCgl MSksJTFcblx0IgogICAgICJkZWNsCSUyXG5cdCIKICAgICAiam56CTFiXG4iCiAgICAgIm1vdncJ JXcwLCglMSkiCiAgICAgOiAiPSZxIiAoX19kMCksICI9JnIiIChfX3RtcCksICI9JnIiIChfX2Qx KQogICAgIDogIjAiICgodW5zaWduZWQgaW50KSBfX2MpLCAiMSIgKF9fdG1wKSwgIjIiIChfX24g LyA0KQogICAgIDogIm1lbW9yeSIsICJjYyIpOwoKICByZXR1cm4gX19zOwp9CiMgMzY2ICIuLi9z eXNkZXBzL2kzODYvaTQ4Ni9iaXRzL3N0cmluZy5oIgpleHRlcm4gX19pbmxpbmUgdm9pZCAqX19t ZW1zZXRfZ2NuX2J5NCAodm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKTsKCmV4dGVybiBf X2lubGluZSB2b2lkICoKX19tZW1zZXRfZ2NuX2J5NCAodm9pZCAqX19zLCBpbnQgX19jLCBzaXpl X3QgX19uKQp7CiAgcmVnaXN0ZXIgdm9pZCAqX190bXAgPSBfX3M7CiAgcmVnaXN0ZXIgdW5zaWdu ZWQgbG9uZyBpbnQgX19kMDsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXwogICAgKCJtb3ZiCSViMCwl aDBcbiIKICAgICAicHVzaHcJJXcwXG5cdCIKICAgICAic2hsbAkkMTYsJTBcblx0IgogICAgICJw b3B3CSV3MFxuIgogICAgICIxOlxuXHQiCiAgICAgIm1vdmwJJTAsKCUxKVxuXHQiCiAgICAgImFk ZGwJJDQsJTFcblx0IgogICAgICJkZWNsCSUyXG5cdCIKICAgICAiam56CTFiXG4iCiAgICAgOiAi PSZxIiAoX19jKSwgIj0mciIgKF9fdG1wKSwgIj0mciIgKF9fZDApCiAgICAgOiAiMCIgKCh1bnNp Z25lZCBpbnQpIF9fYyksICIxIiAoX190bXApLCAiMiIgKF9fbiAvIDQpCiAgICAgOiAibWVtb3J5 IiwgImNjIik7CiAgcmV0dXJuIF9fczsKfQoKZXh0ZXJuIF9faW5saW5lIHZvaWQgKl9fbWVtc2V0 X2djbl9ieTIgKHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbik7CgpleHRlcm4gX19pbmxp bmUgdm9pZCAqCl9fbWVtc2V0X2djbl9ieTIgKHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9f bikKewogIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgaW50IF9fZDAsIF9fZDE7CiAgcmVnaXN0ZXIg dm9pZCAqX190bXAgPSBfX3M7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18KICAgICgibW92YgklYjAs JWgwXG5cdCIKICAgICAicHVzaHcJJXcwXG5cdCIKICAgICAic2hsbAkkMTYsJTBcblx0IgogICAg ICJwb3B3CSV3MFxuIgogICAgICIxOlxuXHQiCiAgICAgIm1vdmwJJTAsKCUxKVxuXHQiCiAgICAg ImxlYWwJNCglMSksJTFcblx0IgogICAgICJkZWNsCSUyXG5cdCIKICAgICAiam56CTFiXG4iCiAg ICAgIm1vdncJJXcwLCglMSkiCiAgICAgOiAiPSZxIiAoX19kMCksICI9JnIiIChfX3RtcCksICI9 JnIiIChfX2QxKQogICAgIDogIjAiICgodW5zaWduZWQgaW50KSBfX2MpLCAiMSIgKF9fdG1wKSwg IjIiIChfX24gLyA0KQogICAgIDogIm1lbW9yeSIsICJjYyIpOwogIHJldHVybiBfX3M7Cn0KCgoK CgpleHRlcm4gX19pbmxpbmUgdm9pZCAqCm1lbWNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBf X2MsIHNpemVfdCBfX24pCnsKICByZWdpc3RlciB1bnNpZ25lZCBsb25nIGludCBfX2QwOwoKCgog IHJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgKl9fcmVzOwogIGlmIChfX24gPT0gMCkKICAgIHJldHVy biAoKHZvaWQgKikwKTsKIyA0MzYgIi4uL3N5c2RlcHMvaTM4Ni9pNDg2L2JpdHMvc3RyaW5nLmgi CiAgX19hc21fXyBfX3ZvbGF0aWxlX18KICAgICgiY2xkXG5cdCIKICAgICAicmVwbmU7IHNjYXNi XG5cdCIKICAgICAiamUJMWZcblx0IgogICAgICJtb3ZsCSQxLCUwXG4iCiAgICAgIjE6IgogICAg IDogIj1EIiAoX19yZXMpLCAiPSZjIiAoX19kMCkKICAgICA6ICJhIiAoX19jKSwgIjAiIChfX3Mp LCAiMSIgKF9fbikKICAgICA6ICJjYyIpOwoKICByZXR1cm4gX19yZXMgLSAxOwp9CgoKCgpleHRl cm4gX19pbmxpbmUgdm9pZCAqCl9fbWVtcmNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2Ms IHNpemVfdCBfX24pCnsKICByZWdpc3RlciB1bnNpZ25lZCBsb25nIGludCBfX2QwOwoKCgogIHJl Z2lzdGVyIHZvaWQgKl9fcmVzOwogIGlmIChfX24gPT0gMCkKICAgIHJldHVybiAoKHZvaWQgKikw KTsKIyA0NzIgIi4uL3N5c2RlcHMvaTM4Ni9pNDg2L2JpdHMvc3RyaW5nLmgiCiAgX19hc21fXyBf X3ZvbGF0aWxlX18KICAgICgic3RkXG5cdCIKICAgICAicmVwbmU7IHNjYXNiXG5cdCIKICAgICAi amUgMWZcblx0IgogICAgICJvcmwgJC0xLCUwXG4iCiAgICAgIjE6XHRjbGQiCiAgICAgOiAiPUQi IChfX3JlcyksICI9JmMiIChfX2QwKQogICAgIDogImEiIChfX2MpLCAiMCIgKF9fcyArIF9fbiAt IDEpLCAiMSIgKF9fbikKICAgICA6ICJjYyIpOwoKICByZXR1cm4gX19yZXMgKyAxOwp9CgoKCgoK CgpleHRlcm4gX19pbmxpbmUgdm9pZCAqX19yYXdtZW1jaHIgKGNvbnN0IHZvaWQgKl9fcywgaW50 IF9fYyk7CgoKZXh0ZXJuIF9faW5saW5lIHZvaWQgKgpfX3Jhd21lbWNociAoY29uc3Qgdm9pZCAq X19zLCBpbnQgX19jKQp7CiAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBpbnQgX19kMDsKICByZWdp c3RlciB1bnNpZ25lZCBjaGFyICpfX3JlczsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXwogICAgKCJj bGRcblx0IgogICAgICJyZXBuZTsgc2Nhc2Jcblx0IgogICAgIDogIj1EIiAoX19yZXMpLCAiPSZj IiAoX19kMCkKICAgICA6ICJhIiAoX19jKSwgIjAiIChfX3MpLCAiMSIgKDB4ZmZmZmZmZmYpCiAg ICAgOiAiY2MiKTsKICByZXR1cm4gX19yZXMgLSAxOwp9CgpleHRlcm4gX19pbmxpbmUgdm9pZCAq CnJhd21lbWNociAoY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jKQp7CiAgcmV0dXJuIF9fcmF3bWVt Y2hyIChfX3MsIF9fYyk7Cn0KIyA1MjMgIi4uL3N5c2RlcHMvaTM4Ni9pNDg2L2JpdHMvc3RyaW5n LmgiCmV4dGVybiBfX2lubGluZSBzaXplX3QgX19zdHJsZW5fZyAoX19jb25zdCBjaGFyICpfX3N0 cik7CgpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3RybGVuX2cgKF9fY29uc3QgY2hhciAqX19z dHIpCnsKICByZWdpc3RlciBjaGFyIF9fZHVtbXk7CiAgcmVnaXN0ZXIgX19jb25zdCBjaGFyICpf X3RtcCA9IF9fc3RyOwogIF9fYXNtX18gX192b2xhdGlsZV9fCiAgICAoIjE6XG5cdCIKICAgICAi bW92YgkoJTApLCViMVxuXHQiCiAgICAgImxlYWwJMSglMCksJTBcblx0IgogICAgICJ0ZXN0Ygkl YjEsJWIxXG5cdCIKICAgICAiam5lCTFiIgogICAgIDogIj1yIiAoX190bXApLCAiPSZxIiAoX19k dW1teSkKICAgICA6ICIwIiAoX19zdHIpCiAgICAgOiAibWVtb3J5IiwgImNjIiApOwogIHJldHVy biBfX3RtcCAtIF9fc3RyIC0gMTsKfQojIDYwMyAiLi4vc3lzZGVwcy9pMzg2L2k0ODYvYml0cy9z dHJpbmcuaCIKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3RyY3B5X2cgKGNoYXIgKl9fZGVzdCwg X19jb25zdCBjaGFyICpfX3NyYyk7CgpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3RyY3B5X2cg KGNoYXIgKl9fZGVzdCwgX19jb25zdCBjaGFyICpfX3NyYykKewogIHJlZ2lzdGVyIGNoYXIgKl9f dG1wID0gX19kZXN0OwogIHJlZ2lzdGVyIGNoYXIgX19kdW1teTsKICBfX2FzbV9fIF9fdm9sYXRp bGVfXwogICAgKAogICAgICIxOlxuXHQiCiAgICAgIm1vdmIJKCUwKSwlYjJcblx0IgogICAgICJs ZWFsCTEoJTApLCUwXG5cdCIKICAgICAibW92YgklYjIsKCUxKVxuXHQiCiAgICAgImxlYWwJMSgl MSksJTFcblx0IgogICAgICJ0ZXN0YgklYjIsJWIyXG5cdCIKICAgICAiam5lCTFiIgogICAgIDog Ij0mciIgKF9fc3JjKSwgIj0mciIgKF9fdG1wKSwgIj0mcSIgKF9fZHVtbXkpCiAgICAgOiAiMCIg KF9fc3JjKSwgIjEiIChfX3RtcCkKICAgICA6ICJtZW1vcnkiLCAiY2MiKTsKICByZXR1cm4gX19k ZXN0Owp9CiMgNjk3ICIuLi9zeXNkZXBzL2kzODYvaTQ4Ni9iaXRzL3N0cmluZy5oIgpleHRlcm4g X19pbmxpbmUgY2hhciAqX19tZW1wY3B5X2J5NCAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIg Kl9fc3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3Jj bGVuKTsKCmV4dGVybiBfX2lubGluZSBjaGFyICoKX19tZW1wY3B5X2J5NCAoY2hhciAqX19kZXN0 LCBfX2NvbnN0IGNoYXIgKl9fc3JjLCBzaXplX3QgX19zcmNsZW4pCnsKICByZWdpc3RlciBjaGFy ICpfX3RtcCA9IF9fZGVzdDsKICByZWdpc3RlciB1bnNpZ25lZCBsb25nIGludCBfX2QwLCBfX2Qx OwogIF9fYXNtX18gX192b2xhdGlsZV9fCiAgICAoIjE6XG5cdCIKICAgICAibW92bAkoJTIpLCUw XG5cdCIKICAgICAibGVhbAk0KCUyKSwlMlxuXHQiCiAgICAgIm1vdmwJJTAsKCUxKVxuXHQiCiAg ICAgImxlYWwJNCglMSksJTFcblx0IgogICAgICJkZWNsCSUzXG5cdCIKICAgICAiam56CTFiIgog ICAgIDogIj0mciIgKF9fZDApLCAiPXIiIChfX3RtcCksICI9JnIiIChfX3NyYyksICI9JnIiIChf X2QxKQogICAgIDogIjEiIChfX3RtcCksICIyIiAoX19zcmMpLCAiMyIgKF9fc3JjbGVuIC8gNCkK ICAgICA6ICJtZW1vcnkiLCAiY2MiKTsKICByZXR1cm4gX190bXA7Cn0KCmV4dGVybiBfX2lubGlu ZSBjaGFyICpfX21lbXBjcHlfYnkyIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zcmNsZW4pOwoK ZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX21lbXBjcHlfYnkyIChjaGFyICpfX2Rlc3QsIF9fY29u c3QgY2hhciAqX19zcmMsIHNpemVfdCBfX3NyY2xlbikKewogIHJlZ2lzdGVyIGNoYXIgKl9fdG1w ID0gX19kZXN0OwogIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgaW50IF9fZDAsIF9fZDE7CiAgX19h c21fXyBfX3ZvbGF0aWxlX18KICAgICgic2hybAkkMSwlM1xuXHQiCiAgICAgImp6CTJmXG4iCiAg ICAgIjE6XG5cdCIKICAgICAibW92bAkoJTIpLCUwXG5cdCIKICAgICAibGVhbAk0KCUyKSwlMlxu XHQiCiAgICAgIm1vdmwJJTAsKCUxKVxuXHQiCiAgICAgImxlYWwJNCglMSksJTFcblx0IgogICAg ICJkZWNsCSUzXG5cdCIKICAgICAiam56CTFiXG4iCiAgICAgIjI6XG5cdCIKICAgICAibW92dwko JTIpLCV3MFxuXHQiCiAgICAgIm1vdncJJXcwLCglMSkiCiAgICAgOiAiPSZxIiAoX19kMCksICI9 ciIgKF9fdG1wKSwgIj0mciIgKF9fc3JjKSwgIj0mciIgKF9fZDEpCiAgICAgOiAiMSIgKF9fdG1w KSwgIjIiIChfX3NyYyksICIzIiAoX19zcmNsZW4gLyAyKQogICAgIDogIm1lbW9yeSIsICJjYyIp OwogIHJldHVybiBfX3RtcCArIDI7Cn0KCmV4dGVybiBfX2lubGluZSBjaGFyICpfX21lbXBjcHlf YnluIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zcmNsZW4pOwoKZXh0ZXJuIF9faW5saW5lIGNo YXIgKgpfX21lbXBjcHlfYnluIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMsIHNp emVfdCBfX3NyY2xlbikKewogIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19kMCwgX19kMTsKICBy ZWdpc3RlciBjaGFyICpfX3RtcCA9IF9fZGVzdDsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXwogICAg KCJjbGRcblx0IgogICAgICJzaHJsCSQxLCUlZWN4XG5cdCIKICAgICAiam5jCTFmXG5cdCIKICAg ICAibW92c2JcbiIKICAgICAiMTpcblx0IgogICAgICJzaHJsCSQxLCUlZWN4XG5cdCIKICAgICAi am5jCTJmXG5cdCIKICAgICAibW92c3dcbiIKICAgICAiMjpcblx0IgogICAgICJyZXA7IG1vdnNs IgogICAgIDogIj1EIiAoX190bXApLCAiPSZjIiAoX19kMCksICI9JlMiIChfX2QxKQogICAgIDog IjAiIChfX3RtcCksICIxIiAoX19zcmNsZW4pLCAiMiIgKF9fc3JjKQogICAgIDogIm1lbW9yeSIs ICJjYyIpOwogIHJldHVybiBfX3RtcDsKfQoKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3RwY3B5 X2cgKGNoYXIgKl9fZGVzdCwgX19jb25zdCBjaGFyICpfX3NyYyk7CgpleHRlcm4gX19pbmxpbmUg Y2hhciAqCl9fc3RwY3B5X2cgKGNoYXIgKl9fZGVzdCwgX19jb25zdCBjaGFyICpfX3NyYykKewog IHJlZ2lzdGVyIGNoYXIgKl9fdG1wID0gX19kZXN0OwogIHJlZ2lzdGVyIGNoYXIgX19kdW1teTsK ICBfX2FzbV9fIF9fdm9sYXRpbGVfXwogICAgKAogICAgICIxOlxuXHQiCiAgICAgIm1vdmIJKCUw KSwlYjJcblx0IgogICAgICJsZWFsCTEoJTApLCUwXG5cdCIKICAgICAibW92YgklYjIsKCUxKVxu XHQiCiAgICAgImxlYWwJMSglMSksJTFcblx0IgogICAgICJ0ZXN0YgklYjIsJWIyXG5cdCIKICAg ICAiam5lCTFiIgogICAgIDogIj0mciIgKF9fc3JjKSwgIj1yIiAoX190bXApLCAiPSZxIiAoX19k dW1teSkKICAgICA6ICIwIiAoX19zcmMpLCAiMSIgKF9fdG1wKQogICAgIDogIm1lbW9yeSIsICJj YyIpOwogIHJldHVybiBfX3RtcCAtIDE7Cn0KIyA4MTEgIi4uL3N5c2RlcHMvaTM4Ni9pNDg2L2Jp dHMvc3RyaW5nLmgiCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cm5jcHlfYnk0IChjaGFyICpf X2Rlc3QsIF9fY29uc3QgY2hhciBfX3NyY1tdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90IF9fc3JjbGVuLCBzaXplX3QgX19uKTsKCmV4dGVybiBfX2lubGluZSBj aGFyICoKX19zdHJuY3B5X2J5NCAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgX19zcmNbXSwg c2l6ZV90IF9fc3JjbGVuLCBzaXplX3QgX19uKQp7CiAgcmVnaXN0ZXIgY2hhciAqX190bXAgPSBf X2Rlc3Q7CiAgcmVnaXN0ZXIgaW50IF9fZHVtbXkxLCBfX2R1bW15MjsKICBfX2FzbV9fIF9fdm9s YXRpbGVfXwogICAgKCIxOlxuXHQiCiAgICAgIm1vdmwJKCUyKSwlMFxuXHQiCiAgICAgImxlYWwJ NCglMiksJTJcblx0IgogICAgICJtb3ZsCSUwLCglMSlcblx0IgogICAgICJsZWFsCTQoJTEpLCUx XG5cdCIKICAgICAiZGVjbAklM1xuXHQiCiAgICAgImpuegkxYiIKICAgICA6ICI9JnIiIChfX2R1 bW15MSksICI9ciIgKF9fdG1wKSwgIj0mciIgKF9fc3JjKSwgIj0mciIgKF9fZHVtbXkyKQogICAg IDogIjEiIChfX3RtcCksICIyIiAoX19zcmMpLCAiMyIgKF9fc3JjbGVuIC8gNCkKICAgICA6ICJt ZW1vcnkiLCAiY2MiKTsKICAodm9pZCkgKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFu dF9wIChfX24gLSBfX3NyY2xlbikgJiYgKF9fbiAtIF9fc3JjbGVuKSA8PSAxNiA/ICgoX19uIC0g X19zcmNsZW4pID09IDEgPyAoeyB2b2lkICpfX3MgPSAoX190bXApOyAqKCh1bnNpZ25lZCBjaGFy ICopIF9fcykgPSAodW5zaWduZWQgY2hhcikgKCdcMCcpOyBfX3M7IH0pIDogKHsgdm9pZCAqX19z ID0gKF9fdG1wKTsgdW5pb24geyB1bnNpZ25lZCBpbnQgX191aTsgdW5zaWduZWQgc2hvcnQgaW50 IF9fdXNpOyB1bnNpZ25lZCBjaGFyIF9fdWM7IH0gKl9fdSA9IF9fczsgdW5zaWduZWQgaW50IF9f YyA9ICgodW5zaWduZWQgaW50KSAoKHVuc2lnbmVkIGNoYXIpICgnXDAnKSkpICogMHgwMTAxMDEw MTsgaWYgKF9fbiAtIF9fc3JjbGVuID09IDMgfHwgX19uIC0gX19zcmNsZW4gPj0gNSkgX19hc21f XyBfX3ZvbGF0aWxlX18gKCIiIDogIj1yIiAoX19jKSA6ICIwIiAoX19jKSk7IHN3aXRjaCAoX19u IC0gX19zcmNsZW4pIHsgY2FzZSAxNTogX191LT5fX3VpID0gX19jOyBfX3UgPSBfX2V4dGVuc2lv bl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSAxMTogX191LT5fX3VpID0gX19jOyBfX3UgPSBf X2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSA3OiBfX3UtPl9fdWkgPSBfX2M7 IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDM6IF9fdS0+X191 c2kgPSAodW5zaWduZWQgc2hvcnQgaW50KSBfX2M7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lk ICopIF9fdSArIDIpOyBfX3UtPl9fdWMgPSAodW5zaWduZWQgY2hhcikgX19jOyBicmVhazsgY2Fz ZSAxNDogX191LT5fX3VpID0gX19jOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3Ug KyA0KTsgY2FzZSAxMDogX191LT5fX3VpID0gX19jOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9p ZCAqKSBfX3UgKyA0KTsgY2FzZSA2OiBfX3UtPl9fdWkgPSBfX2M7IF9fdSA9IF9fZXh0ZW5zaW9u X18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDI6IF9fdS0+X191c2kgPSAodW5zaWduZWQgc2hv cnQgaW50KSBfX2M7IGJyZWFrOyBjYXNlIDEzOiBfX3UtPl9fdWkgPSBfX2M7IF9fdSA9IF9fZXh0 ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDk6IF9fdS0+X191aSA9IF9fYzsgX191 ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgNTogX191LT5fX3VpID0g X19jOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSAxOiBfX3Ut Pl9fdWMgPSAodW5zaWduZWQgY2hhcikgX19jOyBicmVhazsgY2FzZSAxNjogX191LT5fX3VpID0g X19jOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSAxMjogX191 LT5fX3VpID0gX19jOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2Fz ZSA4OiBfX3UtPl9fdWkgPSBfX2M7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSAr IDQpOyBjYXNlIDQ6IF9fdS0+X191aSA9IF9fYzsgY2FzZSAwOiBicmVhazsgfSBfX3M7IH0pKSA6 IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoJ1wwJykgPyAoX19idWlsdGluX2NvbnN0YW50X3AgKF9f biAtIF9fc3JjbGVuKSA/ICgoKF9fbiAtIF9fc3JjbGVuKSAlIDQgPT0gMCkgPyBfX21lbXNldF9j Y25fYnk0IChfX3RtcCwgKCh1bnNpZ25lZCBpbnQpICgodW5zaWduZWQgY2hhcikgKCdcMCcpKSkg KiAweDAxMDEwMTAxLCBfX24gLSBfX3NyY2xlbikgOiAoKChfX24gLSBfX3NyY2xlbikgJSAyID09 IDApID8gX19tZW1zZXRfY2NuX2J5MiAoX190bXAsICgodW5zaWduZWQgaW50KSAoKHVuc2lnbmVk IGNoYXIpICgnXDAnKSkpICogMHgwMTAxMDEwMSwgX19uIC0gX19zcmNsZW4pIDogbWVtc2V0IChf X3RtcCwgJ1wwJywgX19uIC0gX19zcmNsZW4pKSkgOiBtZW1zZXQgKF9fdG1wLCAnXDAnLCBfX24g LSBfX3NyY2xlbikpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wIChfX24gLSBfX3NyY2xlbikgPyAo KChfX24gLSBfX3NyY2xlbikgJSA0ID09IDApID8gX19tZW1zZXRfZ2NuX2J5NCAoX190bXAsICdc MCcsIF9fbiAtIF9fc3JjbGVuKSA6ICgoKF9fbiAtIF9fc3JjbGVuKSAlIDIgPT0gMCkgPyBfX21l bXNldF9nY25fYnkyIChfX3RtcCwgJ1wwJywgX19uIC0gX19zcmNsZW4pIDogbWVtc2V0IChfX3Rt cCwgJ1wwJywgX19uIC0gX19zcmNsZW4pKSkgOiBtZW1zZXQgKF9fdG1wLCAnXDAnLCBfX24gLSBf X3NyY2xlbikpKSkpOwogIHJldHVybiBfX2Rlc3Q7Cn0KCmV4dGVybiBfX2lubGluZSBjaGFyICpf X3N0cm5jcHlfYnkyIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciBfX3NyY1tdLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3JjbGVuLCBzaXplX3QgX19u KTsKCmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJuY3B5X2J5MiAoY2hhciAqX19kZXN0LCBf X2NvbnN0IGNoYXIgX19zcmNbXSwgc2l6ZV90IF9fc3JjbGVuLCBzaXplX3QgX19uKQp7CiAgcmVn aXN0ZXIgY2hhciAqX190bXAgPSBfX2Rlc3Q7CiAgcmVnaXN0ZXIgaW50IF9fZHVtbXkxLCBfX2R1 bW15MjsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXwogICAgKCJzaHJsCSQxLCUzXG5cdCIKICAgICAi anoJMmZcbiIKICAgICAiMTpcblx0IgogICAgICJtb3ZsCSglMiksJTBcblx0IgogICAgICJsZWFs CTQoJTIpLCUyXG5cdCIKICAgICAibW92bAklMCwoJTEpXG5cdCIKICAgICAibGVhbAk0KCUxKSwl MVxuXHQiCiAgICAgImRlY2wJJTNcblx0IgogICAgICJqbnoJMWJcbiIKICAgICAiMjpcblx0Igog ICAgICJtb3Z3CSglMiksJXcwXG5cdCIKICAgICAibW92dwkldzAsKCUxKVxuXHQiCiAgICAgOiAi PSZxIiAoX19kdW1teTEpLCAiPXIiIChfX3RtcCksICI9JnIiIChfX3NyYyksICI9JnIiIChfX2R1 bW15MikKICAgICA6ICIxIiAoX190bXApLCAiMiIgKF9fc3JjKSwgIjMiIChfX3NyY2xlbiAvIDIp CiAgICAgOiAibWVtb3J5IiwgImNjIik7CiAgKHZvaWQpIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0 aW5fY29uc3RhbnRfcCAoX19uIC0gX19zcmNsZW4pICYmIChfX24gLSBfX3NyY2xlbikgPD0gMTYg PyAoKF9fbiAtIF9fc3JjbGVuKSA9PSAxID8gKHsgdm9pZCAqX19zID0gKF9fdG1wICsgMik7ICoo KHVuc2lnbmVkIGNoYXIgKikgX19zKSA9ICh1bnNpZ25lZCBjaGFyKSAoJ1wwJyk7IF9fczsgfSkg OiAoeyB2b2lkICpfX3MgPSAoX190bXAgKyAyKTsgdW5pb24geyB1bnNpZ25lZCBpbnQgX191aTsg dW5zaWduZWQgc2hvcnQgaW50IF9fdXNpOyB1bnNpZ25lZCBjaGFyIF9fdWM7IH0gKl9fdSA9IF9f czsgdW5zaWduZWQgaW50IF9fYyA9ICgodW5zaWduZWQgaW50KSAoKHVuc2lnbmVkIGNoYXIpICgn XDAnKSkpICogMHgwMTAxMDEwMTsgaWYgKF9fbiAtIF9fc3JjbGVuID09IDMgfHwgX19uIC0gX19z cmNsZW4gPj0gNSkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIiIDogIj1yIiAoX19jKSA6ICIwIiAo X19jKSk7IHN3aXRjaCAoX19uIC0gX19zcmNsZW4pIHsgY2FzZSAxNTogX191LT5fX3VpID0gX19j OyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSAxMTogX191LT5f X3VpID0gX19jOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSA3 OiBfX3UtPl9fdWkgPSBfX2M7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQp OyBjYXNlIDM6IF9fdS0+X191c2kgPSAodW5zaWduZWQgc2hvcnQgaW50KSBfX2M7IF9fdSA9IF9f ZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDIpOyBfX3UtPl9fdWMgPSAodW5zaWduZWQgY2hh cikgX19jOyBicmVhazsgY2FzZSAxNDogX191LT5fX3VpID0gX19jOyBfX3UgPSBfX2V4dGVuc2lv bl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSAxMDogX191LT5fX3VpID0gX19jOyBfX3UgPSBf X2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSA2OiBfX3UtPl9fdWkgPSBfX2M7 IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDI6IF9fdS0+X191 c2kgPSAodW5zaWduZWQgc2hvcnQgaW50KSBfX2M7IGJyZWFrOyBjYXNlIDEzOiBfX3UtPl9fdWkg PSBfX2M7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDk6IF9f dS0+X191aSA9IF9fYzsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNh c2UgNTogX191LT5fX3VpID0gX19jOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3Ug KyA0KTsgY2FzZSAxOiBfX3UtPl9fdWMgPSAodW5zaWduZWQgY2hhcikgX19jOyBicmVhazsgY2Fz ZSAxNjogX191LT5fX3VpID0gX19jOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3Ug KyA0KTsgY2FzZSAxMjogX191LT5fX3VpID0gX19jOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9p ZCAqKSBfX3UgKyA0KTsgY2FzZSA4OiBfX3UtPl9fdWkgPSBfX2M7IF9fdSA9IF9fZXh0ZW5zaW9u X18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDQ6IF9fdS0+X191aSA9IF9fYzsgY2FzZSAwOiBi cmVhazsgfSBfX3M7IH0pKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoJ1wwJykgPyAoX19idWls dGluX2NvbnN0YW50X3AgKF9fbiAtIF9fc3JjbGVuKSA/ICgoKF9fbiAtIF9fc3JjbGVuKSAlIDQg PT0gMCkgPyBfX21lbXNldF9jY25fYnk0IChfX3RtcCArIDIsICgodW5zaWduZWQgaW50KSAoKHVu c2lnbmVkIGNoYXIpICgnXDAnKSkpICogMHgwMTAxMDEwMSwgX19uIC0gX19zcmNsZW4pIDogKCgo X19uIC0gX19zcmNsZW4pICUgMiA9PSAwKSA/IF9fbWVtc2V0X2Njbl9ieTIgKF9fdG1wICsgMiwg KCh1bnNpZ25lZCBpbnQpICgodW5zaWduZWQgY2hhcikgKCdcMCcpKSkgKiAweDAxMDEwMTAxLCBf X24gLSBfX3NyY2xlbikgOiBtZW1zZXQgKF9fdG1wICsgMiwgJ1wwJywgX19uIC0gX19zcmNsZW4p KSkgOiBtZW1zZXQgKF9fdG1wICsgMiwgJ1wwJywgX19uIC0gX19zcmNsZW4pKSA6IChfX2J1aWx0 aW5fY29uc3RhbnRfcCAoX19uIC0gX19zcmNsZW4pID8gKCgoX19uIC0gX19zcmNsZW4pICUgNCA9 PSAwKSA/IF9fbWVtc2V0X2djbl9ieTQgKF9fdG1wICsgMiwgJ1wwJywgX19uIC0gX19zcmNsZW4p IDogKCgoX19uIC0gX19zcmNsZW4pICUgMiA9PSAwKSA/IF9fbWVtc2V0X2djbl9ieTIgKF9fdG1w ICsgMiwgJ1wwJywgX19uIC0gX19zcmNsZW4pIDogbWVtc2V0IChfX3RtcCArIDIsICdcMCcsIF9f biAtIF9fc3JjbGVuKSkpIDogbWVtc2V0IChfX3RtcCArIDIsICdcMCcsIF9fbiAtIF9fc3JjbGVu KSkpKSk7CiAgcmV0dXJuIF9fZGVzdDsKfQoKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3RybmNw eV9ieW4gKGNoYXIgKl9fZGVzdCwgX19jb25zdCBjaGFyIF9fc3JjW10sCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zcmNsZW4sIHNpemVfdCBfX24pOwoKZXh0 ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cm5jcHlfYnluIChjaGFyICpfX2Rlc3QsIF9fY29uc3Qg Y2hhciBfX3NyY1tdLCBzaXplX3QgX19zcmNsZW4sIHNpemVfdCBfX24pCnsKICByZWdpc3RlciB1 bnNpZ25lZCBsb25nIGludCBfX2QwLCBfX2QxOwogIHJlZ2lzdGVyIGNoYXIgKl9fdG1wID0gX19k ZXN0OwogIF9fYXNtX18gX192b2xhdGlsZV9fCiAgICAoImNsZFxuXHQiCiAgICAgInNocmwJJDEs JTFcblx0IgogICAgICJqbmMJMWZcblx0IgogICAgICJtb3ZzYlxuIgogICAgICIxOlxuXHQiCiAg ICAgInNocmwJJDEsJTFcblx0IgogICAgICJqbmMJMmZcblx0IgogICAgICJtb3Zzd1xuIgogICAg ICIyOlxuXHQiCiAgICAgInJlcDsgbW92c2wiCiAgICAgOiAiPUQiIChfX3RtcCksICI9JmMiIChf X2QwKSwgIj0mUyIgKF9fZDEpCiAgICAgOiAiMSIgKF9fc3JjbGVuKSwgIjAiIChfX3RtcCksIjIi IChfX3NyYykKICAgICA6ICJtZW1vcnkiLCAiY2MiKTsKICAodm9pZCkgKF9fZXh0ZW5zaW9uX18g KF9fYnVpbHRpbl9jb25zdGFudF9wIChfX24gLSBfX3NyY2xlbikgJiYgKF9fbiAtIF9fc3JjbGVu KSA8PSAxNiA/ICgoX19uIC0gX19zcmNsZW4pID09IDEgPyAoeyB2b2lkICpfX3MgPSAoX190bXAp OyAqKCh1bnNpZ25lZCBjaGFyICopIF9fcykgPSAodW5zaWduZWQgY2hhcikgKCdcMCcpOyBfX3M7 IH0pIDogKHsgdm9pZCAqX19zID0gKF9fdG1wKTsgdW5pb24geyB1bnNpZ25lZCBpbnQgX191aTsg dW5zaWduZWQgc2hvcnQgaW50IF9fdXNpOyB1bnNpZ25lZCBjaGFyIF9fdWM7IH0gKl9fdSA9IF9f czsgdW5zaWduZWQgaW50IF9fYyA9ICgodW5zaWduZWQgaW50KSAoKHVuc2lnbmVkIGNoYXIpICgn XDAnKSkpICogMHgwMTAxMDEwMTsgaWYgKF9fbiAtIF9fc3JjbGVuID09IDMgfHwgX19uIC0gX19z cmNsZW4gPj0gNSkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIiIDogIj1yIiAoX19jKSA6ICIwIiAo X19jKSk7IHN3aXRjaCAoX19uIC0gX19zcmNsZW4pIHsgY2FzZSAxNTogX191LT5fX3VpID0gX19j OyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSAxMTogX191LT5f X3VpID0gX19jOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSA3 OiBfX3UtPl9fdWkgPSBfX2M7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQp OyBjYXNlIDM6IF9fdS0+X191c2kgPSAodW5zaWduZWQgc2hvcnQgaW50KSBfX2M7IF9fdSA9IF9f ZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDIpOyBfX3UtPl9fdWMgPSAodW5zaWduZWQgY2hh cikgX19jOyBicmVhazsgY2FzZSAxNDogX191LT5fX3VpID0gX19jOyBfX3UgPSBfX2V4dGVuc2lv bl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSAxMDogX191LT5fX3VpID0gX19jOyBfX3UgPSBf X2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSA2OiBfX3UtPl9fdWkgPSBfX2M7 IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDI6IF9fdS0+X191 c2kgPSAodW5zaWduZWQgc2hvcnQgaW50KSBfX2M7IGJyZWFrOyBjYXNlIDEzOiBfX3UtPl9fdWkg PSBfX2M7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDk6IF9f dS0+X191aSA9IF9fYzsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNh c2UgNTogX191LT5fX3VpID0gX19jOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3Ug KyA0KTsgY2FzZSAxOiBfX3UtPl9fdWMgPSAodW5zaWduZWQgY2hhcikgX19jOyBicmVhazsgY2Fz ZSAxNjogX191LT5fX3VpID0gX19jOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3Ug KyA0KTsgY2FzZSAxMjogX191LT5fX3VpID0gX19jOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9p ZCAqKSBfX3UgKyA0KTsgY2FzZSA4OiBfX3UtPl9fdWkgPSBfX2M7IF9fdSA9IF9fZXh0ZW5zaW9u X18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDQ6IF9fdS0+X191aSA9IF9fYzsgY2FzZSAwOiBi cmVhazsgfSBfX3M7IH0pKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoJ1wwJykgPyAoX19idWls dGluX2NvbnN0YW50X3AgKF9fbiAtIF9fc3JjbGVuKSA/ICgoKF9fbiAtIF9fc3JjbGVuKSAlIDQg PT0gMCkgPyBfX21lbXNldF9jY25fYnk0IChfX3RtcCwgKCh1bnNpZ25lZCBpbnQpICgodW5zaWdu ZWQgY2hhcikgKCdcMCcpKSkgKiAweDAxMDEwMTAxLCBfX24gLSBfX3NyY2xlbikgOiAoKChfX24g LSBfX3NyY2xlbikgJSAyID09IDApID8gX19tZW1zZXRfY2NuX2J5MiAoX190bXAsICgodW5zaWdu ZWQgaW50KSAoKHVuc2lnbmVkIGNoYXIpICgnXDAnKSkpICogMHgwMTAxMDEwMSwgX19uIC0gX19z cmNsZW4pIDogbWVtc2V0IChfX3RtcCwgJ1wwJywgX19uIC0gX19zcmNsZW4pKSkgOiBtZW1zZXQg KF9fdG1wLCAnXDAnLCBfX24gLSBfX3NyY2xlbikpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wIChf X24gLSBfX3NyY2xlbikgPyAoKChfX24gLSBfX3NyY2xlbikgJSA0ID09IDApID8gX19tZW1zZXRf Z2NuX2J5NCAoX190bXAsICdcMCcsIF9fbiAtIF9fc3JjbGVuKSA6ICgoKF9fbiAtIF9fc3JjbGVu KSAlIDIgPT0gMCkgPyBfX21lbXNldF9nY25fYnkyIChfX3RtcCwgJ1wwJywgX19uIC0gX19zcmNs ZW4pIDogbWVtc2V0IChfX3RtcCwgJ1wwJywgX19uIC0gX19zcmNsZW4pKSkgOiBtZW1zZXQgKF9f dG1wLCAnXDAnLCBfX24gLSBfX3NyY2xlbikpKSkpOwogIHJldHVybiBfX2Rlc3Q7Cn0KCmV4dGVy biBfX2lubGluZSBjaGFyICpfX3N0cm5jcHlfZ2cgKGNoYXIgKl9fZGVzdCwgX19jb25zdCBjaGFy ICpfX3NyYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbik7 CgpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3RybmNweV9nZyAoY2hhciAqX19kZXN0LCBfX2Nv bnN0IGNoYXIgKl9fc3JjLCBzaXplX3QgX19uKQp7CiAgcmVnaXN0ZXIgY2hhciAqX190bXAgPSBf X2Rlc3Q7CiAgcmVnaXN0ZXIgY2hhciBfX2R1bW15OwogIGlmIChfX24gPiAwKQogICAgX19hc21f XyBfX3ZvbGF0aWxlX18KICAgICAgKCIxOlxuXHQiCiAgICAgICAibW92YgkoJTApLCUyXG5cdCIK ICAgICAgICJpbmNsCSUwXG5cdCIKICAgICAgICJtb3ZiCSUyLCglMSlcblx0IgogICAgICAgImlu Y2wJJTFcblx0IgogICAgICAgImRlY2wJJTNcblx0IgogICAgICAgImplCTNmXG5cdCIKICAgICAg ICJ0ZXN0YgklMiwlMlxuXHQiCiAgICAgICAiam5lCTFiXG5cdCIKICAgICAgICIyOlxuXHQiCiAg ICAgICAibW92YgklMiwoJTEpXG5cdCIKICAgICAgICJpbmNsCSUxXG5cdCIKICAgICAgICJkZWNs CSUzXG5cdCIKICAgICAgICJqbmUJMmJcblx0IgogICAgICAgIjM6IgogICAgICAgOiAiPSZyIiAo X19zcmMpLCAiPSZyIiAoX190bXApLCAiPSZxIiAoX19kdW1teSksICI9JnIiIChfX24pCiAgICAg ICA6ICIwIiAoX19zcmMpLCAiMSIgKF9fdG1wKSwgIjMiIChfX24pCiAgICAgICA6ICJtZW1vcnki LCAiY2MiKTsKCiAgcmV0dXJuIF9fZGVzdDsKfQojIDkyOCAiLi4vc3lzZGVwcy9pMzg2L2k0ODYv Yml0cy9zdHJpbmcuaCIKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3RyY2F0X2MgKGNoYXIgKl9f ZGVzdCwgX19jb25zdCBjaGFyIF9fc3JjW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplX3QgX19zcmNsZW4pOwoKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cmNhdF9j IChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciBfX3NyY1tdLCBzaXplX3QgX19zcmNsZW4pCnsK IyA5NDQgIi4uL3N5c2RlcHMvaTM4Ni9pNDg2L2JpdHMvc3RyaW5nLmgiCiAgcmVnaXN0ZXIgY2hh ciAqX190bXAgPSBfX2Rlc3QgLSAxOwogIF9fYXNtX18gX192b2xhdGlsZV9fCiAgICAoIjE6XG5c dCIKICAgICAiaW5jbAklMFxuXHQiCiAgICAgImNtcGIJJDAsKCUwKVxuXHQiCiAgICAgImpuZQkx YlxuIgogICAgIDogIj1yIiAoX190bXApCiAgICAgOiAiMCIgKF9fdG1wKQogICAgIDogImNjIik7 CgogICh2b2lkKSAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKF9fc3JjbGVu KSA/ICgoX19zcmNsZW4pID09IDAgPyAoX190bXApIDogKCgoX19zcmNsZW4pICUgNCA9PSAwKSA/ IF9fbWVtY3B5X2J5NCAoX190bXAsIF9fc3JjLCBfX3NyY2xlbikgOiAoKChfX3NyY2xlbikgJSAy ID09IDApID8gX19tZW1jcHlfYnkyIChfX3RtcCwgX19zcmMsIF9fc3JjbGVuKSA6IF9fbWVtY3B5 X2cgKF9fdG1wLCBfX3NyYywgX19zcmNsZW4pKSkpIDogX19tZW1jcHlfZyAoX190bXAsIF9fc3Jj LCBfX3NyY2xlbikpKTsKICByZXR1cm4gX19kZXN0Owp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAq X19zdHJjYXRfZyAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fc3JjKTsKCmV4dGVybiBf X2lubGluZSBjaGFyICoKX19zdHJjYXRfZyAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9f c3JjKQp7CiAgcmVnaXN0ZXIgY2hhciAqX190bXAgPSBfX2Rlc3QgLSAxOwogIHJlZ2lzdGVyIGNo YXIgX19kdW1teTsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXwogICAgKCIxOlxuXHQiCiAgICAgImlu Y2wJJTFcblx0IgogICAgICJjbXBiCSQwLCglMSlcblx0IgogICAgICJqbmUJMWJcbiIKICAgICAi Mjpcblx0IgogICAgICJtb3ZiCSglMiksJWIwXG5cdCIKICAgICAiaW5jbAklMlxuXHQiCiAgICAg Im1vdmIJJWIwLCglMSlcblx0IgogICAgICJpbmNsCSUxXG5cdCIKICAgICAidGVzdGIJJWIwLCVi MFxuXHQiCiAgICAgImpuZQkyYlxuIgogICAgIDogIj0mcSIgKF9fZHVtbXkpLCAiPSZyIiAoX190 bXApLCAiPSZyIiAoX19zcmMpCiAgICAgOiAiMSIgKF9fdG1wKSwgIjIiIChfX3NyYykKICAgICA6 ICJtZW1vcnkiLCAiY2MiKTsKICByZXR1cm4gX19kZXN0Owp9CiMgOTk2ICIuLi9zeXNkZXBzL2kz ODYvaTQ4Ni9iaXRzL3N0cmluZy5oIgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJuY2F0X2cg KGNoYXIgKl9fZGVzdCwgX19jb25zdCBjaGFyIF9fc3JjW10sCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90IF9fbik7CgpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3Ry bmNhdF9nIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciBfX3NyY1tdLCBzaXplX3QgX19uKQp7 CiAgcmVnaXN0ZXIgY2hhciAqX190bXAgPSBfX2Rlc3Q7CiAgcmVnaXN0ZXIgY2hhciBfX2R1bW15 OwojIDEwMjIgIi4uL3N5c2RlcHMvaTM4Ni9pNDg2L2JpdHMvc3RyaW5nLmgiCiAgLS1fX3RtcDsK ICBfX2FzbV9fIF9fdm9sYXRpbGVfXwogICAgKCIxOlxuXHQiCiAgICAgImNtcGIJJDAsMSglMSlc blx0IgogICAgICJsZWFsCTEoJTEpLCUxXG5cdCIKICAgICAiam5lCTFiXG4iCiAgICAgIjI6XG5c dCIKICAgICAiZGVjbAklM1xuXHQiCiAgICAgImpzCTNmXG5cdCIKICAgICAibW92YgkoJTIpLCVi MFxuXHQiCiAgICAgImxlYWwJMSglMiksJTJcblx0IgogICAgICJtb3ZiCSViMCwoJTEpXG5cdCIK ICAgICAibGVhbAkxKCUxKSwlMVxuXHQiCiAgICAgInRlc3RiCSViMCwlYjBcblx0IgogICAgICJq bmUJMmJcblx0IgogICAgICJkZWNsCSUxXG4iCiAgICAgIjM6XG5cdCIKICAgICAibW92YgkkMCwo JTEpIgogICAgIDogIj0mcSIgKF9fZHVtbXkpLCAiPSZyIiAoX190bXApLCAiPSZyIiAoX19zcmMp LCAiPSZyIiAoX19uKQogICAgIDogIjEiIChfX3RtcCksICIyIiAoX19zcmMpLCAiMyIgKF9fbikK ICAgICA6ICJtZW1vcnkiLCAiY2MiKTsKCiAgcmV0dXJuIF9fZGVzdDsKfQojIDExMjEgIi4uL3N5 c2RlcHMvaTM4Ni9pNDg2L2JpdHMvc3RyaW5nLmgiCmV4dGVybiBfX2lubGluZSBpbnQgX19zdHJj bXBfZ2cgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKTsKCmV4dGVybiBf X2lubGluZSBpbnQKX19zdHJjbXBfZ2cgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFy ICpfX3MyKQp7CiAgcmVnaXN0ZXIgaW50IF9fcmVzOwogIF9fYXNtX18gX192b2xhdGlsZV9fCiAg ICAoIjE6XG5cdCIKICAgICAibW92YgkoJTEpLCViMFxuXHQiCiAgICAgImxlYWwJMSglMSksJTFc blx0IgogICAgICJjbXBiCSViMCwoJTIpXG5cdCIKICAgICAiam5lCTJmXG5cdCIKICAgICAibGVh bAkxKCUyKSwlMlxuXHQiCiAgICAgInRlc3RiCSViMCwlYjBcblx0IgogICAgICJqbmUJMWJcblx0 IgogICAgICJ4b3JsCSUwLCUwXG5cdCIKICAgICAiam1wCTNmXG4iCiAgICAgIjI6XG5cdCIKICAg ICAibW92bAkkMSwlMFxuXHQiCiAgICAgImpiCTNmXG5cdCIKICAgICAibmVnbAklMFxuIgogICAg ICIzOiIKICAgICA6ICI9cSIgKF9fcmVzKSwgIj0mciIgKF9fczEpLCAiPSZyIiAoX19zMikKICAg ICA6ICIxIiAoX19zMSksICIyIiAoX19zMikKICAgICA6ICJjYyIpOwogIHJldHVybiBfX3JlczsK fQojIDExNTkgIi4uL3N5c2RlcHMvaTM4Ni9pNDg2L2JpdHMvc3RyaW5nLmgiCmV4dGVybiBfX2lu bGluZSBpbnQgX19zdHJuY21wX2cgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpf X3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKTsKCmV4dGVy biBfX2lubGluZSBpbnQKX19zdHJuY21wX2cgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBj aGFyICpfX3MyLCBzaXplX3QgX19uKQp7CiAgcmVnaXN0ZXIgaW50IF9fcmVzOwogIF9fYXNtX18g X192b2xhdGlsZV9fCiAgICAoIjE6XG5cdCIKICAgICAiZGVjbAklM1xuXHQiCiAgICAgImpzCTJm XG5cdCIKICAgICAibW92YgkoJTEpLCViMFxuXHQiCiAgICAgImluY2wJJTFcblx0IgogICAgICJj bXBiCSViMCwoJTIpXG5cdCIKICAgICAiam5lCTNmXG5cdCIKICAgICAiaW5jbAklMlxuXHQiCiAg ICAgInRlc3RiCSViMCwlYjBcblx0IgogICAgICJqbmUJMWJcbiIKICAgICAiMjpcblx0IgogICAg ICJ4b3JsCSUwLCUwXG5cdCIKICAgICAiam1wCTRmXG4iCiAgICAgIjM6XG5cdCIKICAgICAibW92 bAkkMSwlMFxuXHQiCiAgICAgImpiCTRmXG5cdCIKICAgICAibmVnbAklMFxuIgogICAgICI0OiIK ICAgICA6ICI9cSIgKF9fcmVzKSwgIj0mciIgKF9fczEpLCAiPSZyIiAoX19zMiksICI9JnIiIChf X24pCiAgICAgOiAiMSIgKF9fczEpLCAiMiIgKF9fczIpLCAiMyIgKF9fbikKICAgICA6ICJjYyIp OwogIHJldHVybiBfX3JlczsKfQojIDEyMDIgIi4uL3N5c2RlcHMvaTM4Ni9pNDg2L2JpdHMvc3Ry aW5nLmgiCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cmNocl9jIChfX2NvbnN0IGNoYXIgKl9f cywgaW50IF9fYyk7CgpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3RyY2hyX2MgKF9fY29uc3Qg Y2hhciAqX19zLCBpbnQgX19jKQp7CiAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBpbnQgX19kMDsK ICByZWdpc3RlciBjaGFyICpfX3JlczsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXwogICAgKCIxOlxu XHQiCiAgICAgIm1vdmIJKCUwKSwlJWFsXG5cdCIKICAgICAiY21wYgklJWFoLCUlYWxcblx0Igog ICAgICJqZQkyZlxuXHQiCiAgICAgImxlYWwJMSglMCksJTBcblx0IgogICAgICJ0ZXN0YgklJWFs LCUlYWxcblx0IgogICAgICJqbmUJMWJcblx0IgogICAgICJ4b3JsCSUwLCUwXG4iCiAgICAgIjI6 IgogICAgIDogIj1yIiAoX19yZXMpLCAiPSZhIiAoX19kMCkKICAgICA6ICIwIiAoX19zKSwgIjEi IChfX2MpCiAgICAgOiAiY2MiKTsKICByZXR1cm4gX19yZXM7Cn0KCmV4dGVybiBfX2lubGluZSBj aGFyICpfX3N0cmNocl9nIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYyk7CgpleHRlcm4gX19p bmxpbmUgY2hhciAqCl9fc3RyY2hyX2cgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKQp7CiAg cmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBpbnQgX19kMDsKICByZWdpc3RlciBjaGFyICpfX3JlczsK ICBfX2FzbV9fIF9fdm9sYXRpbGVfXwogICAgKCJtb3ZiCSUlYWwsJSVhaFxuIgogICAgICIxOlxu XHQiCiAgICAgIm1vdmIJKCUwKSwlJWFsXG5cdCIKICAgICAiY21wYgklJWFoLCUlYWxcblx0Igog ICAgICJqZQkyZlxuXHQiCiAgICAgImxlYWwJMSglMCksJTBcblx0IgogICAgICJ0ZXN0YgklJWFs LCUlYWxcblx0IgogICAgICJqbmUJMWJcblx0IgogICAgICJ4b3JsCSUwLCUwXG4iCiAgICAgIjI6 IgogICAgIDogIj1yIiAoX19yZXMpLCAiPSZhIiAoX19kMCkKICAgICA6ICIwIiAoX19zKSwgIjEi IChfX2MpCiAgICAgOiAiY2MiKTsKICByZXR1cm4gX19yZXM7Cn0KIyAxMjU5ICIuLi9zeXNkZXBz L2kzODYvaTQ4Ni9iaXRzL3N0cmluZy5oIgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJjaHJu dWxfYyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpOwoKZXh0ZXJuIF9faW5saW5lIGNoYXIg KgpfX3N0cmNocm51bF9jIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykKewogIHJlZ2lzdGVy IHVuc2lnbmVkIGxvbmcgaW50IF9fZDA7CiAgcmVnaXN0ZXIgY2hhciAqX19yZXM7CiAgX19hc21f XyBfX3ZvbGF0aWxlX18KICAgICgiMTpcblx0IgogICAgICJtb3ZiCSglMCksJSVhbFxuXHQiCiAg ICAgImNtcGIJJSVhaCwlJWFsXG5cdCIKICAgICAiamUJMmZcblx0IgogICAgICJsZWFsCTEoJTAp LCUwXG5cdCIKICAgICAidGVzdGIJJSVhbCwlJWFsXG5cdCIKICAgICAiam5lCTFiXG5cdCIKICAg ICAiZGVjbAklMFxuIgogICAgICIyOiIKICAgICA6ICI9ciIgKF9fcmVzKSwgIj0mYSIgKF9fZDAp CiAgICAgOiAiMCIgKF9fcyksICIxIiAoX19jKQogICAgIDogImNjIik7CiAgcmV0dXJuIF9fcmVz Owp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJjaHJudWxfZyAoX19jb25zdCBjaGFyICpf X3MsIGludCBfX2MpOwoKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cmNocm51bF9nIChfX2Nv bnN0IGNoYXIgKl9fcywgaW50IF9fYykKewogIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgaW50IF9f ZDA7CiAgcmVnaXN0ZXIgY2hhciAqX19yZXM7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18KICAgICgi bW92YgklJWFsLCUlYWhcbiIKICAgICAiMTpcblx0IgogICAgICJtb3ZiCSglMCksJSVhbFxuXHQi CiAgICAgImNtcGIJJSVhaCwlJWFsXG5cdCIKICAgICAiamUJMmZcblx0IgogICAgICJsZWFsCTEo JTApLCUwXG5cdCIKICAgICAidGVzdGIJJSVhbCwlJWFsXG5cdCIKICAgICAiam5lCTFiXG5cdCIK ICAgICAiZGVjbAklMFxuIgogICAgICIyOiIKICAgICA6ICI9ciIgKF9fcmVzKSwgIj0mYSIgKF9f ZDApCiAgICAgOiAiMCIgKF9fcyksICIxIiAoX19jKQogICAgIDogImNjIik7CiAgcmV0dXJuIF9f cmVzOwp9CiMgMTM3MSAiLi4vc3lzZGVwcy9pMzg2L2k0ODYvYml0cy9zdHJpbmcuaCIKZXh0ZXJu IF9faW5saW5lIGNoYXIgKl9fc3RycmNocl9jIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYyk7 CgpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3RycmNocl9jIChfX2NvbnN0IGNoYXIgKl9fcywg aW50IF9fYykKewogIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgaW50IF9fZDAsIF9fZDE7CiAgcmVn aXN0ZXIgY2hhciAqX19yZXM7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18KICAgICgiY2xkXG4iCiAg ICAgIjE6XG5cdCIKICAgICAibG9kc2Jcblx0IgogICAgICJjbXBiCSUlYWgsJSVhbFxuXHQiCiAg ICAgImpuZQkyZlxuXHQiCiAgICAgImxlYWwJLTEoJSVlc2kpLCUwXG4iCiAgICAgIjI6XG5cdCIK ICAgICAidGVzdGIJJSVhbCwlJWFsXG5cdCIKICAgICAiam5lIDFiIgogICAgIDogIj1kIiAoX19y ZXMpLCAiPSZTIiAoX19kMCksICI9JmEiIChfX2QxKQogICAgIDogIjAiICgwKSwgIjEiIChfX3Mp LCAiMiIgKF9fYykKICAgICA6ICJjYyIpOwogIHJldHVybiBfX3JlczsKfQoKZXh0ZXJuIF9faW5s aW5lIGNoYXIgKl9fc3RycmNocl9nIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYyk7CgpleHRl cm4gX19pbmxpbmUgY2hhciAqCl9fc3RycmNocl9nIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9f YykKewogIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgaW50IF9fZDAsIF9fZDE7CiAgcmVnaXN0ZXIg Y2hhciAqX19yZXM7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18KICAgICgibW92YgklJWFsLCUlYWhc biIKICAgICAiY2xkXG5cdCIKICAgICAiMTpcblx0IgogICAgICJsb2RzYlxuXHQiCiAgICAgImNt cGIJJSVhaCwlJWFsXG5cdCIKICAgICAiam5lCTJmXG5cdCIKICAgICAibGVhbAktMSglJWVzaSks JTBcbiIKICAgICAiMjpcblx0IgogICAgICJ0ZXN0YgklJWFsLCUlYWxcblx0IgogICAgICJqbmUg MWIiCiAgICAgOiAiPXIiIChfX3JlcyksICI9JlMiIChfX2QwKSwgIj0mYSIgKF9fZDEpCiAgICAg OiAiMCIgKDApLCAiMSIgKF9fcyksICIyIiAoX19jKQogICAgIDogImNjIik7CiAgcmV0dXJuIF9f cmVzOwp9CiMgMTQ0MiAiLi4vc3lzZGVwcy9pMzg2L2k0ODYvYml0cy9zdHJpbmcuaCIKZXh0ZXJu IF9faW5saW5lIHNpemVfdCBfX3N0cmNzcG5fYzEgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19y ZWplY3QpOwoKCmV4dGVybiBfX2lubGluZSBzaXplX3QKX19zdHJjc3BuX2MxIChfX2NvbnN0IGNo YXIgKl9fcywgaW50IF9fcmVqZWN0KQp7CiAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBpbnQgX19k MDsKICByZWdpc3RlciBjaGFyICpfX3JlczsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXwogICAgKCIx OlxuXHQiCiAgICAgIm1vdmIJKCUwKSwlJWFsXG5cdCIKICAgICAibGVhbAkxKCUwKSwlMFxuXHQi CiAgICAgImNtcGIJJSVhaCwlJWFsXG5cdCIKICAgICAiamUJMmZcblx0IgogICAgICJ0ZXN0Ygkl JWFsLCUlYWxcblx0IgogICAgICJqbmUJMWJcbiIKICAgICAiMjoiCiAgICAgOiAiPXIiIChfX3Jl cyksICI9JmEiIChfX2QwKQogICAgIDogIjAiIChfX3MpLCAiMSIgKF9fcmVqZWN0KQogICAgIDog ImNjIik7CiAgcmV0dXJuIChfX3JlcyAtIDEpIC0gX19zOwp9CgoKZXh0ZXJuIF9faW5saW5lIHNp emVfdCBfX3N0cmNzcG5fY2cgKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgX19yZWpl Y3RbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fcmVqZWN0 X2xlbik7CgpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3RyY3Nwbl9jZyAoX19jb25zdCBjaGFy ICpfX3MsIF9fY29uc3QgY2hhciBfX3JlamVjdFtdLCBzaXplX3QgX19yZWplY3RfbGVuKQp7CiAg cmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBpbnQgX19kMCwgX19kMSwgX19kMjsKICByZWdpc3RlciBf X2NvbnN0IGNoYXIgKl9fcmVzOwogIF9fYXNtX18gX192b2xhdGlsZV9fCiAgICAoImNsZFxuIgog ICAgICIxOlxuXHQiCiAgICAgImxvZHNiXG5cdCIKICAgICAidGVzdGIJJSVhbCwlJWFsXG5cdCIK ICAgICAiamUJMmZcblx0IgogICAgICJtb3ZsCSU1LCUlZWRpXG5cdCIKICAgICAibW92bAklNiwl JWVjeFxuXHQiCiAgICAgInJlcG5lOyBzY2FzYlxuXHQiCiAgICAgImpuZQkxYlxuIgogICAgICIy OiIKICAgICA6ICI9UyIgKF9fcmVzKSwgIj0mYSIgKF9fZDApLCAiPSZjIiAoX19kMSksICI9JkQi IChfX2QyKQogICAgIDogIjAiIChfX3MpLCAiZCIgKF9fcmVqZWN0KSwgImciIChfX3JlamVjdF9s ZW4pCiAgICAgOiAiY2MiKTsKICByZXR1cm4gKF9fcmVzIC0gMSkgLSBfX3M7Cn0KCmV4dGVybiBf X2lubGluZSBzaXplX3QgX19zdHJjc3BuX2cgKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNo YXIgKl9fcmVqZWN0KTsKIyAxNTIyICIuLi9zeXNkZXBzL2kzODYvaTQ4Ni9iaXRzL3N0cmluZy5o IgpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3RyY3Nwbl9nIChfX2NvbnN0IGNoYXIgKl9fcywg X19jb25zdCBjaGFyICpfX3JlamVjdCkKewogIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgaW50IF9f ZDAsIF9fZDEsIF9fZDIsIF9fZDM7CiAgcmVnaXN0ZXIgX19jb25zdCBjaGFyICpfX3JlczsKICBf X2FzbV9fIF9fdm9sYXRpbGVfXwogICAgKCJjbGRcblx0IgogICAgICJyZXBuZTsgc2Nhc2Jcblx0 IgogICAgICJub3RsCSUlZWN4XG5cdCIKICAgICAibGVhbAktMSglJWVjeCksJSVlZHhcbiIKICAg ICAiMTpcblx0IgogICAgICJsb2RzYlxuXHQiCiAgICAgInRlc3RiCSUlYWwsJSVhbFxuXHQiCiAg ICAgImplCTJmXG5cdCIKICAgICAibW92bAklJWVieCwlJWVkaVxuXHQiCiAgICAgIm1vdmwJJSVl ZHgsJSVlY3hcblx0IgogICAgICJyZXBuZTsgc2Nhc2Jcblx0IgogICAgICJqbmUJMWJcbiIKICAg ICAiMjoiCiAgICAgOiAiPVMiIChfX3JlcyksICI9JmEiIChfX2QwKSwgIj0mYyIgKF9fZDEpLCAi PSZEIiAoX19kMiksICI9JmQiIChfX2QzKQogICAgIDogIjAiIChfX3MpLCAiMSIgKDApLCAiMiIg KDB4ZmZmZmZmZmYpLCAiMyIgKF9fcmVqZWN0KSwgImIiIChfX3JlamVjdCkKICAgICA6ICJjYyIp OwogIHJldHVybiAoX19yZXMgLSAxKSAtIF9fczsKfQojIDE1NjIgIi4uL3N5c2RlcHMvaTM4Ni9p NDg2L2JpdHMvc3RyaW5nLmgiCmV4dGVybiBfX2lubGluZSBzaXplX3QgX19zdHJzcG5fYzEgKF9f Y29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQpOwoKZXh0ZXJuIF9faW5saW5lIHNpemVfdApf X3N0cnNwbl9jMSAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdCkKewogIHJlZ2lzdGVy IHVuc2lnbmVkIGxvbmcgaW50IF9fZDA7CiAgcmVnaXN0ZXIgY2hhciAqX19yZXM7CgogIF9fYXNt X18gX192b2xhdGlsZV9fCiAgICAoIjE6XG5cdCIKICAgICAibW92YgkoJTApLCViMVxuXHQiCiAg ICAgImxlYWwJMSglMCksJTBcblx0IgogICAgICJjbXBiCSVoMSwlYjFcblx0IgogICAgICJqZQkx YiIKICAgICA6ICI9ciIgKF9fcmVzKSwgIj0mcSIgKF9fZDApCiAgICAgOiAiMCIgKF9fcyksICIx IiAoX19hY2NlcHQpCiAgICAgOiAiY2MiKTsKICByZXR1cm4gKF9fcmVzIC0gMSkgLSBfX3M7Cn0K CgpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3Ryc3BuX2NnIChfX2NvbnN0IGNoYXIgKl9fcywg X19jb25zdCBjaGFyIF9fYWNjZXB0W10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCBfX2FjY2VwdF9sZW4pOwoKZXh0ZXJuIF9faW5saW5lIHNpemVfdApfX3N0cnNw bl9jZyAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciBfX2FjY2VwdFtdLCBzaXplX3Qg X19hY2NlcHRfbGVuKQp7CiAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBpbnQgX19kMCwgX19kMSwg X19kMjsKICByZWdpc3RlciBfX2NvbnN0IGNoYXIgKl9fcmVzOwogIF9fYXNtX18gX192b2xhdGls ZV9fCiAgICAoImNsZFxuIgogICAgICIxOlxuXHQiCiAgICAgImxvZHNiXG5cdCIKICAgICAidGVz dGIJJSVhbCwlJWFsXG5cdCIKICAgICAiamUJMmZcblx0IgogICAgICJtb3ZsCSUxLCUlZWRpXG5c dCIKICAgICAibW92bAklNiwlJWVjeFxuXHQiCiAgICAgInJlcG5lOyBzY2FzYlxuXHQiCiAgICAg ImplCTFiXG4iCiAgICAgIjI6IgogICAgIDogIj1TIiAoX19yZXMpLCAiPSZkIiAoX19kMCksICI9 JmMiIChfX2QxKSwgIj0mRCIgKF9fZDIpCiAgICAgOiAiMCIgKF9fcyksICIxIiAoX19hY2NlcHQp LCAiZyIgKF9fYWNjZXB0X2xlbikKICAgICA6ICJjYyIpOwogIHJldHVybiAoX19yZXMgLSAxKSAt IF9fczsKfQoKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cnNwbl9nIChfX2NvbnN0IGNoYXIg Kl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCk7CiMgMTYzOCAiLi4vc3lzZGVwcy9pMzg2L2k0 ODYvYml0cy9zdHJpbmcuaCIKZXh0ZXJuIF9faW5saW5lIHNpemVfdApfX3N0cnNwbl9nIChfX2Nv bnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkKewogIHJlZ2lzdGVyIHVuc2ln bmVkIGxvbmcgaW50IF9fZDAsIF9fZDEsIF9fZDIsIF9fZDM7CiAgcmVnaXN0ZXIgX19jb25zdCBj aGFyICpfX3JlczsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXwogICAgKCJjbGRcblx0IgogICAgICJy ZXBuZTsgc2Nhc2Jcblx0IgogICAgICJub3RsCSUlZWN4XG5cdCIKICAgICAibGVhbAktMSglJWVj eCksJSVlZHhcbiIKICAgICAiMTpcblx0IgogICAgICJsb2RzYlxuXHQiCiAgICAgInRlc3RiCSUl YWwsJSVhbFxuXHQiCiAgICAgImplCTJmXG5cdCIKICAgICAibW92bAklJWVieCwlJWVkaVxuXHQi CiAgICAgIm1vdmwJJSVlZHgsJSVlY3hcblx0IgogICAgICJyZXBuZTsgc2Nhc2Jcblx0IgogICAg ICJqZQkxYlxuIgogICAgICIyOiIKICAgICA6ICI9UyIgKF9fcmVzKSwgIj0mYSIgKF9fZDApLCAi PSZjIiAoX19kMSksICI9JkQiIChfX2QyKSwgIj0mZCIgKF9fZDMpCiAgICAgOiAiMCIgKF9fcyks ICIxIiAoMCksICIyIiAoMHhmZmZmZmZmZiksICIzIiAoX19hY2NlcHQpLCAiYiIgKF9fYWNjZXB0 KQogICAgIDogImNjIik7CiAgcmV0dXJuIChfX3JlcyAtIDEpIC0gX19zOwp9CiMgMTY3NiAiLi4v c3lzZGVwcy9pMzg2L2k0ODYvYml0cy9zdHJpbmcuaCIKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9f c3RycGJya19jZyAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciBfX2FjY2VwdFtdLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19hY2NlcHRfbGVuKTsK CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJwYnJrX2NnIChfX2NvbnN0IGNoYXIgKl9fcywg X19jb25zdCBjaGFyIF9fYWNjZXB0W10sIHNpemVfdCBfX2FjY2VwdF9sZW4pCnsKICByZWdpc3Rl ciB1bnNpZ25lZCBsb25nIGludCBfX2QwLCBfX2QxLCBfX2QyOwogIHJlZ2lzdGVyIGNoYXIgKl9f cmVzOwogIF9fYXNtX18gX192b2xhdGlsZV9fCiAgICAoImNsZFxuIgogICAgICIxOlxuXHQiCiAg ICAgImxvZHNiXG5cdCIKICAgICAidGVzdGIJJSVhbCwlJWFsXG5cdCIKICAgICAiamUJMmZcblx0 IgogICAgICJtb3ZsCSU1LCUlZWRpXG5cdCIKICAgICAibW92bAklNiwlJWVjeFxuXHQiCiAgICAg InJlcG5lOyBzY2FzYlxuXHQiCiAgICAgImpuZQkxYlxuXHQiCiAgICAgImRlY2wJJTBcblx0Igog ICAgICJqbXAJM2ZcbiIKICAgICAiMjpcblx0IgogICAgICJ4b3JsCSUwLCUwXG4iCiAgICAgIjM6 IgogICAgIDogIj1TIiAoX19yZXMpLCAiPSZhIiAoX19kMCksICI9JmMiIChfX2QxKSwgIj0mRCIg KF9fZDIpCiAgICAgOiAiMCIgKF9fcyksICJkIiAoX19hY2NlcHQpLCAiZyIgKF9fYWNjZXB0X2xl bikKICAgICA6ICJjYyIpOwogIHJldHVybiBfX3JlczsKfQoKZXh0ZXJuIF9faW5saW5lIGNoYXIg Kl9fc3RycGJya19nIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCk7 CiMgMTc0MCAiLi4vc3lzZGVwcy9pMzg2L2k0ODYvYml0cy9zdHJpbmcuaCIKZXh0ZXJuIF9faW5s aW5lIGNoYXIgKgpfX3N0cnBicmtfZyAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAq X19hY2NlcHQpCnsKICByZWdpc3RlciB1bnNpZ25lZCBsb25nIGludCBfX2QwLCBfX2QxLCBfX2Qy LCBfX2QzOwogIHJlZ2lzdGVyIGNoYXIgKl9fcmVzOwogIF9fYXNtX18gX192b2xhdGlsZV9fCiAg ICAoIm1vdmwJJSVlYngsJSVlZGlcblx0IgogICAgICJjbGRcblx0IgogICAgICJyZXBuZTsgc2Nh c2Jcblx0IgogICAgICJub3RsCSUlZWN4XG5cdCIKICAgICAibGVhbAktMSglJWVjeCksJSVlZHhc biIKICAgICAiMTpcblx0IgogICAgICJsb2RzYlxuXHQiCiAgICAgInRlc3RiCSUlYWwsJSVhbFxu XHQiCiAgICAgImplCTJmXG5cdCIKICAgICAibW92bAklJWVieCwlJWVkaVxuXHQiCiAgICAgIm1v dmwJJSVlZHgsJSVlY3hcblx0IgogICAgICJyZXBuZTsgc2Nhc2Jcblx0IgogICAgICJqbmUJMWJc blx0IgogICAgICJkZWNsCSUwXG5cdCIKICAgICAiam1wCTNmXG4iCiAgICAgIjI6XG5cdCIKICAg ICAieG9ybAklMCwlMFxuIgogICAgICIzOiIKICAgICA6ICI9UyIgKF9fcmVzKSwgIj0mYSIgKF9f ZDApLCAiPSZjIiAoX19kMSksICI9JmQiIChfX2QyKSwgIj0mRCIgKF9fZDMpCiAgICAgOiAiMCIg KF9fcyksICIxIiAoMCksICIyIiAoMHhmZmZmZmZmZiksICJiIiAoX19hY2NlcHQpCiAgICAgOiAi Y2MiKTsKICByZXR1cm4gX19yZXM7Cn0KIyAxNzg1ICIuLi9zeXNkZXBzL2kzODYvaTQ4Ni9iaXRz L3N0cmluZy5oIgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJzdHJfY2cgKF9fY29uc3QgY2hh ciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyIF9fbmVlZGxlW10sCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbmVlZGxlX2xlbik7CgpleHRlcm4gX19pbmxpbmUg Y2hhciAqCl9fc3Ryc3RyX2NnIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hh ciBfX25lZWRsZVtdLAogICAgICAgICAgICAgc2l6ZV90IF9fbmVlZGxlX2xlbikKewogIHJlZ2lz dGVyIHVuc2lnbmVkIGxvbmcgaW50IF9fZDAsIF9fZDEsIF9fZDI7CiAgcmVnaXN0ZXIgY2hhciAq X19yZXM7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18KICAgICgiY2xkXG4iICIxOlxuXHQiCgogICAg ICJtb3ZsCSU2LCUlZWRpXG5cdCIKICAgICAibW92bAklNSwlJWVheFxuXHQiCiAgICAgIm1vdmwJ JTQsJSVlY3hcblx0IgogICAgICJyZXBlOyBjbXBzYlxuXHQiCiAgICAgImplCTJmXG5cdCIKICAg ICAiY21wYgkkMCwtMSglJWVzaSlcblx0IgogICAgICJsZWFsCTEoJSVlYXgpLCU1XG5cdCIKICAg ICAiam5lCTFiXG5cdCIKICAgICAieG9ybAklJWVheCwlJWVheFxuIgogICAgICIyOiIKICAgICA6 ICI9YSIgKF9fcmVzKSwgIj0mUyIgKF9fZDApLCAiPSZEIiAoX19kMSksICI9JmMiIChfX2QyKQog ICAgIDogImciIChfX25lZWRsZV9sZW4pLCAiMSIgKF9faGF5c3RhY2spLCAiZCIgKF9fbmVlZGxl KQogICAgIDogImNjIik7CiAgcmV0dXJuIF9fcmVzOwp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAq X19zdHJzdHJfZyAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVl ZGxlKTsKIyAxODQ3ICIuLi9zeXNkZXBzL2kzODYvaTQ4Ni9iaXRzL3N0cmluZy5oIgpleHRlcm4g X19pbmxpbmUgY2hhciAqCl9fc3Ryc3RyX2cgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19j b25zdCBjaGFyICpfX25lZWRsZSkKewogIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgaW50IF9fZDAs IF9fZDEsIF9fZDIsIF9fZDM7CiAgcmVnaXN0ZXIgY2hhciAqX19yZXM7CiAgX19hc21fXyBfX3Zv bGF0aWxlX18KICAgICgiY2xkXG5cdCIKICAgICAicmVwbmU7IHNjYXNiXG5cdCIKICAgICAibm90 bAklJWVjeFxuXHQiCiAgICAgImRlY2wJJSVlY3hcblx0IgogICAgICJtb3ZsCSUlZWN4LCUlZWR4 XG4iCiAgICAgIjE6XG5cdCIKICAgICAibW92bAklJWVieCwlJWVkaVxuXHQiCiAgICAgIm1vdmwJ JSVlc2ksJSVlYXhcblx0IgogICAgICJtb3ZsCSUlZWR4LCUlZWN4XG5cdCIKICAgICAicmVwZTsg Y21wc2Jcblx0IgogICAgICJqZQkyZlxuXHQiCiAgICAgImNtcGIJJDAsLTEoJSVlc2kpXG5cdCIK ICAgICAibGVhbAkxKCUlZWF4KSwlJWVzaVxuXHQiCiAgICAgImpuZQkxYlxuXHQiCiAgICAgInhv cmwJJSVlYXgsJSVlYXhcbiIKICAgICAiMjoiCiAgICAgOiAiPWEiIChfX3JlcyksICI9JmMiIChf X2QwKSwgIj0mUyIgKF9fZDEpLCAiPSZEIiAoX19kMiksICI9JmQiIChfX2QzKQogICAgIDogIjAi ICgwKSwgIjEiICgweGZmZmZmZmZmKSwgIjIiIChfX2hheXN0YWNrKSwgIjMiIChfX25lZWRsZSks CiAgICAgICAiYiIgKF9fbmVlZGxlKQogICAgIDogImNjIik7CiAgcmV0dXJuIF9fcmVzOwp9CiMg MzU4ICIuLi9zdHJpbmcvc3RyaW5nLmgiIDIKCgojIDEgIi4uL2luY2x1ZGUvYml0cy9zdHJpbmcy LmgiIDEKIyAxICIuLi9zdHJpbmcvYml0cy9zdHJpbmcyLmgiIDEKIyA1MiAiLi4vc3RyaW5nL2Jp dHMvc3RyaW5nMi5oIgojIDEgIi4uL2luY2x1ZGUvZW5kaWFuLmgiIDEKIyA1MyAiLi4vc3RyaW5n L2JpdHMvc3RyaW5nMi5oIiAyCiMgMjIxICIuLi9zdHJpbmcvYml0cy9zdHJpbmcyLmgiCmV4dGVy biBfX2lubGluZSB2b2lkICpfX21lbXBjcHlfc21hbGwgKHZvaWQgKiwgY2hhciwgY2hhciwgY2hh ciwgY2hhciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191aW50MTZf dCwgX191aW50MTZfdCwgX191aW50MzJfdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX191aW50MzJfdCwgc2l6ZV90KTsKZXh0ZXJuIF9faW5saW5lIHZvaWQgKgpfX21l bXBjcHlfc21hbGwgKHZvaWQgKl9fZGVzdDEsCiAgICAgICAgICAgICAgICAgY2hhciBfX3NyYzBf MSwgY2hhciBfX3NyYzJfMSwgY2hhciBfX3NyYzRfMSwgY2hhciBfX3NyYzZfMSwKICAgICAgICAg ICAgICAgICBfX3VpbnQxNl90IF9fc3JjMF8yLCBfX3VpbnQxNl90IF9fc3JjNF8yLAogICAgICAg ICAgICAgICAgIF9fdWludDMyX3QgX19zcmMwXzQsIF9fdWludDMyX3QgX19zcmM0XzQsCiAgICAg ICAgICAgICAgICAgc2l6ZV90IF9fc3JjbGVuKQp7CiAgdW5pb24gewogICAgX191aW50MzJfdCBf X3VpOwogICAgX191aW50MTZfdCBfX3VzaTsKICAgIHVuc2lnbmVkIGNoYXIgX191YzsKICAgIHVu c2lnbmVkIGNoYXIgX19jOwogIH0gKl9fdSA9IF9fZGVzdDE7CiAgc3dpdGNoICgodW5zaWduZWQg aW50KSBfX3NyY2xlbikKICAgIHsKICAgIGNhc2UgMToKICAgICAgX191LT5fX2MgPSBfX3NyYzBf MTsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgMSk7CiAgICAgIGJy ZWFrOwogICAgY2FzZSAyOgogICAgICBfX3UtPl9fdXNpID0gX19zcmMwXzI7CiAgICAgIF9fdSA9 IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDIpOwogICAgICBicmVhazsKICAgIGNhc2Ug MzoKICAgICAgX191LT5fX3VzaSA9IF9fc3JjMF8yOwogICAgICBfX3UgPSBfX2V4dGVuc2lvbl9f ICgodm9pZCAqKSBfX3UgKyAyKTsKICAgICAgX191LT5fX2MgPSBfX3NyYzJfMTsKICAgICAgX191 ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgMSk7CiAgICAgIGJyZWFrOwogICAgY2Fz ZSA0OgogICAgICBfX3UtPl9fdWkgPSBfX3NyYzBfNDsKICAgICAgX191ID0gX19leHRlbnNpb25f XyAoKHZvaWQgKikgX191ICsgNCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSA1OgogICAgICBfX3Ut Pl9fdWkgPSBfX3NyYzBfNDsKICAgICAgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191 ICsgNCk7CiAgICAgIF9fdS0+X19jID0gX19zcmM0XzE7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9u X18gKCh2b2lkICopIF9fdSArIDEpOwogICAgICBicmVhazsKICAgIGNhc2UgNjoKICAgICAgX191 LT5fX3VpID0gX19zcmMwXzQ7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9f dSArIDQpOwogICAgICBfX3UtPl9fdXNpID0gX19zcmM0XzI7CiAgICAgIF9fdSA9IF9fZXh0ZW5z aW9uX18gKCh2b2lkICopIF9fdSArIDIpOwogICAgICBicmVhazsKICAgIGNhc2UgNzoKICAgICAg X191LT5fX3VpID0gX19zcmMwXzQ7CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICop IF9fdSArIDQpOwogICAgICBfX3UtPl9fdXNpID0gX19zcmM0XzI7CiAgICAgIF9fdSA9IF9fZXh0 ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDIpOwogICAgICBfX3UtPl9fYyA9IF9fc3JjNl8xOwog ICAgICBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyAxKTsKICAgICAgYnJlYWs7 CiAgICBjYXNlIDg6CiAgICAgIF9fdS0+X191aSA9IF9fc3JjMF80OwogICAgICBfX3UgPSBfX2V4 dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsKICAgICAgX191LT5fX3VpID0gX19zcmM0XzQ7 CiAgICAgIF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOwogICAgICBicmVh azsKICAgIH0KICByZXR1cm4gKHZvaWQgKikgX191Owp9CiMgMTA1OSAiLi4vc3RyaW5nL2JpdHMv c3RyaW5nMi5oIgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJ0b2tfcl8xYyAoY2hhciAqX19z LCBjaGFyIF9fc2VwLCBjaGFyICoqX19uZXh0cCk7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19z dHJ0b2tfcl8xYyAoY2hhciAqX19zLCBjaGFyIF9fc2VwLCBjaGFyICoqX19uZXh0cCkKewogIGNo YXIgKl9fcmVzdWx0OwogIGlmIChfX3MgPT0gKCh2b2lkICopMCkpCiAgICBfX3MgPSAqX19uZXh0 cDsKICB3aGlsZSAoKl9fcyA9PSBfX3NlcCkKICAgICsrX19zOwogIF9fcmVzdWx0ID0gKCh2b2lk ICopMCk7CiAgaWYgKCpfX3MgIT0gJ1wwJykKICAgIHsKICAgICAgX19yZXN1bHQgPSBfX3MrKzsK ICAgICAgd2hpbGUgKCpfX3MgIT0gJ1wwJykKICAgICAgICBpZiAoKl9fcysrID09IF9fc2VwKQog ICAgICAgICAgewogICAgICAgICAgICBfX3NbLTFdID0gJ1wwJzsKICAgICAgICAgICAgYnJlYWs7 CiAgICAgICAgICB9CiAgICAgICpfX25leHRwID0gX19zOwogICAgfQogIHJldHVybiBfX3Jlc3Vs dDsKfQojIDEwOTEgIi4uL3N0cmluZy9iaXRzL3N0cmluZzIuaCIKZXh0ZXJuIGNoYXIgKl9fc3Ry c2VwX2cgKGNoYXIgKipfX3N0cmluZ3AsIF9fY29uc3QgY2hhciAqX19kZWxpbSk7CiMgMTEwOSAi Li4vc3RyaW5nL2JpdHMvc3RyaW5nMi5oIgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJzZXBf MWMgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QpOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9f c3Ryc2VwXzFjIChjaGFyICoqX19zLCBjaGFyIF9fcmVqZWN0KQp7CiAgcmVnaXN0ZXIgY2hhciAq X19yZXR2YWwgPSAqX19zOwogIGlmIChfX3JldHZhbCAhPSAoKHZvaWQgKikwKSAmJiAoKl9fcyA9 IChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19yZWplY3QpID8gKChfX3Jl amVjdCkgPT0gJ1wwJyA/IChjaGFyICopIF9fcmF3bWVtY2hyIChfX3JldHZhbCwgX19yZWplY3Qp IDogX19zdHJjaHJfYyAoX19yZXR2YWwsICgoX19yZWplY3QpICYgMHhmZikgPDwgOCkpIDogX19z dHJjaHJfZyAoX19yZXR2YWwsIF9fcmVqZWN0KSkpKSAhPSAoKHZvaWQgKikwKSkKICAgICooKl9f cykrKyA9ICdcMCc7CiAgcmV0dXJuIF9fcmV0dmFsOwp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAq X19zdHJzZXBfMmMgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0Mik7 CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJzZXBfMmMgKGNoYXIgKipfX3MsIGNoYXIgX19y ZWplY3QxLCBjaGFyIF9fcmVqZWN0MikKewogIHJlZ2lzdGVyIGNoYXIgKl9fcmV0dmFsID0gKl9f czsKICBpZiAoX19yZXR2YWwgIT0gKCh2b2lkICopMCkpCiAgICB7CiAgICAgIHJlZ2lzdGVyIGNo YXIgKl9fY3AgPSBfX3JldHZhbDsKICAgICAgd2hpbGUgKDEpCiAgICAgICAgewogICAgICAgICAg aWYgKCpfX2NwID09ICdcMCcpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2NwID0gKCh2 b2lkICopMCk7CiAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKCpf X2NwID09IF9fcmVqZWN0MSB8fCAqX19jcCA9PSBfX3JlamVjdDIpCiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAqX19jcCsrID0gJ1wwJzsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg ICAgfQogICAgICAgICAgKytfX2NwOwogICAgICAgIH0KICAgICAgKl9fcyA9IF9fY3A7CiAgICB9 CiAgcmV0dXJuIF9fcmV0dmFsOwp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJzZXBfM2Mg KGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0MiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9fcmVqZWN0Myk7CmV4dGVybiBfX2lubGluZSBj aGFyICoKX19zdHJzZXBfM2MgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVq ZWN0MiwgY2hhciBfX3JlamVjdDMpCnsKICByZWdpc3RlciBjaGFyICpfX3JldHZhbCA9ICpfX3M7 CiAgaWYgKF9fcmV0dmFsICE9ICgodm9pZCAqKTApKQogICAgewogICAgICByZWdpc3RlciBjaGFy ICpfX2NwID0gX19yZXR2YWw7CiAgICAgIHdoaWxlICgxKQogICAgICAgIHsKICAgICAgICAgIGlm ICgqX19jcCA9PSAnXDAnKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19jcCA9ICgodm9p ZCAqKTApOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmICgqX19j cCA9PSBfX3JlamVjdDEgfHwgKl9fY3AgPT0gX19yZWplY3QyIHx8ICpfX2NwID09IF9fcmVqZWN0 MykKICAgICAgICAgICAgewogICAgICAgICAgICAgICpfX2NwKysgPSAnXDAnOwogICAgICAgICAg ICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICArK19fY3A7CiAgICAgICAgfQogICAg ICAqX19zID0gX19jcDsKICAgIH0KICByZXR1cm4gX19yZXR2YWw7Cn0KIyAxMTkwICIuLi9zdHJp bmcvYml0cy9zdHJpbmcyLmgiCmV4dGVybiBjaGFyICpfX3N0cmR1cCAoX19jb25zdCBjaGFyICpf X3N0cmluZykgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyAxMjA5ICIuLi9zdHJpbmcv Yml0cy9zdHJpbmcyLmgiCmV4dGVybiBjaGFyICpfX3N0cm5kdXAgKF9fY29uc3QgY2hhciAqX19z dHJpbmcsIHNpemVfdCBfX24pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyAy ICIuLi9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAyCiMgMzYxICIuLi9zdHJpbmcvc3RyaW5nLmgi IDIKCgoKCiMgNTAgIi4uL2luY2x1ZGUvc3RyaW5nLmgiIDIKIyAyMyAicHRocmVhZC5jIiAyCiMg MSAiLi4vaW5jbHVkZS91bmlzdGQuaCIgMQoKIyAxICIuLi9wb3NpeC91bmlzdGQuaCIgMQojIDI4 ICIuLi9wb3NpeC91bmlzdGQuaCIKCiMgMTc1ICIuLi9wb3NpeC91bmlzdGQuaCIKIyAxICIuLi9s aW51eHRocmVhZHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9iaXRzL3Bvc2l4X29wdC5o IiAxCiMgMTc2ICIuLi9wb3NpeC91bmlzdGQuaCIgMgoKCgojIDEgIi4uL3N5c2RlcHMvZ2VuZXJp Yy9iaXRzL2Vudmlyb25tZW50cy5oIiAxCiMgMjMgIi4uL3N5c2RlcHMvZ2VuZXJpYy9iaXRzL2Vu dmlyb25tZW50cy5oIgojIDEgIi4uL3N5c2RlcHMvd29yZHNpemUtMzIvYml0cy93b3Jkc2l6ZS5o IiAxCiMgMjQgIi4uL3N5c2RlcHMvZ2VuZXJpYy9iaXRzL2Vudmlyb25tZW50cy5oIiAyCiMgMTgw ICIuLi9wb3NpeC91bmlzdGQuaCIgMgojIDE5OSAiLi4vcG9zaXgvdW5pc3RkLmgiCiMgMSAiL3Vz ci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAz CiMgMjAwICIuLi9wb3NpeC91bmlzdGQuaCIgMgojIDI0MCAiLi4vcG9zaXgvdW5pc3RkLmgiCnR5 cGVkZWYgX19pbnRwdHJfdCBpbnRwdHJfdDsKCgoKCgoKdHlwZWRlZiBfX3NvY2tsZW5fdCBzb2Nr bGVuX3Q7CiMgMjYwICIuLi9wb3NpeC91bmlzdGQuaCIKZXh0ZXJuIGludCBhY2Nlc3MgKF9fY29u c3QgY2hhciAqX19uYW1lLCBpbnQgX190eXBlKSA7CgoKCgpleHRlcm4gaW50IGV1aWRhY2Nlc3Mg KF9fY29uc3QgY2hhciAqX19uYW1lLCBpbnQgX190eXBlKSA7CiMgMjkwICIuLi9wb3NpeC91bmlz dGQuaCIKZXh0ZXJuIF9fb2ZmX3QgbHNlZWsgKGludCBfX2ZkLCBfX29mZl90IF9fb2Zmc2V0LCBp bnQgX193aGVuY2UpIDsKIyAzMDIgIi4uL3Bvc2l4L3VuaXN0ZC5oIgpleHRlcm4gX19vZmY2NF90 IGxzZWVrNjQgKGludCBfX2ZkLCBfX29mZjY0X3QgX19vZmZzZXQsIGludCBfX3doZW5jZSkgOwoK CgpleHRlcm4gaW50IGNsb3NlIChpbnQgX19mZCkgOwoKCgpleHRlcm4gc3NpemVfdCByZWFkIChp bnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcykgOwoKCmV4dGVybiBzc2l6ZV90 IHdyaXRlIChpbnQgX19mZCwgX19jb25zdCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbikgOwoKCgpl eHRlcm4gc3NpemVfdCBwcmVhZCAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0 ZXMsIF9fb2ZmX3QgX19vZmZzZXQpCiAgICAgOwpleHRlcm4gc3NpemVfdCBwd3JpdGUgKGludCBf X2ZkLCBfX2NvbnN0IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAg ICAgIF9fb2ZmX3QgX19vZmZzZXQpIDsKIyAzNDAgIi4uL3Bvc2l4L3VuaXN0ZC5oIgpleHRlcm4g c3NpemVfdCBwcmVhZDY0IChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcywK ICAgICAgICAgICAgICAgICAgICAgICAgX19vZmY2NF90IF9fb2Zmc2V0KSA7CgoKZXh0ZXJuIHNz aXplX3QgcHdyaXRlNjQgKGludCBfX2ZkLCBfX2NvbnN0IHZvaWQgKl9fYnVmLCBzaXplX3QgX19u LAogICAgICAgICAgICAgICAgICAgICAgICAgX19vZmY2NF90IF9fb2Zmc2V0KSA7CgoKCgoKCgpl eHRlcm4gaW50IHBpcGUgKGludCBfX3BpcGVkZXNbMl0pIDsKIyAzNjIgIi4uL3Bvc2l4L3VuaXN0 ZC5oIgpleHRlcm4gdW5zaWduZWQgaW50IGFsYXJtICh1bnNpZ25lZCBpbnQgX19zZWNvbmRzKSA7 CiMgMzcxICIuLi9wb3NpeC91bmlzdGQuaCIKZXh0ZXJuIHVuc2lnbmVkIGludCBzbGVlcCAodW5z aWduZWQgaW50IF9fc2Vjb25kcykgOwoKCgoKCgpleHRlcm4gX191c2Vjb25kc190IHVhbGFybSAo X191c2Vjb25kc190IF9fdmFsdWUsIF9fdXNlY29uZHNfdCBfX2ludGVydmFsKQogICAgIDsKCgoK ZXh0ZXJuIGludCB1c2xlZXAgKF9fdXNlY29uZHNfdCBfX3VzZWNvbmRzKSA7CgoKCgoKZXh0ZXJu IGludCBwYXVzZSAodm9pZCkgOwoKCgpleHRlcm4gaW50IGNob3duIChfX2NvbnN0IGNoYXIgKl9f ZmlsZSwgX191aWRfdCBfX293bmVyLCBfX2dpZF90IF9fZ3JvdXApCiAgICAgOwoKCgpleHRlcm4g aW50IGZjaG93biAoaW50IF9fZmQsIF9fdWlkX3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKSA7 CgoKCgpleHRlcm4gaW50IGxjaG93biAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fdWlkX3QgX19v d25lciwgX19naWRfdCBfX2dyb3VwKQogICAgIDsKCgoKCmV4dGVybiBpbnQgY2hkaXIgKF9fY29u c3QgY2hhciAqX19wYXRoKSA7CgoKCmV4dGVybiBpbnQgZmNoZGlyIChpbnQgX19mZCkgOwojIDQy MyAiLi4vcG9zaXgvdW5pc3RkLmgiCmV4dGVybiBjaGFyICpnZXRjd2QgKGNoYXIgKl9fYnVmLCBz aXplX3QgX19zaXplKSA7CgoKCgoKZXh0ZXJuIGNoYXIgKmdldF9jdXJyZW50X2Rpcl9uYW1lICh2 b2lkKSA7CgoKCgoKCmV4dGVybiBjaGFyICpnZXR3ZCAoY2hhciAqX19idWYpIDsKCgoKCmV4dGVy biBpbnQgZHVwIChpbnQgX19mZCkgOwoKCmV4dGVybiBpbnQgZHVwMiAoaW50IF9fZmQsIGludCBf X2ZkMikgOwoKCmV4dGVybiBjaGFyICoqX19lbnZpcm9uOwoKZXh0ZXJuIGNoYXIgKiplbnZpcm9u OwoKCgoKCmV4dGVybiBpbnQgZXhlY3ZlIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgY2hhciAqX19j b25zdCBfX2FyZ3ZbXSwKICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fY29uc3QgX19lbnZwW10p IDsKCgoKCmV4dGVybiBpbnQgZmV4ZWN2ZSAoaW50IF9fZmQsIGNoYXIgKl9fY29uc3QgX19hcmd2 W10sIGNoYXIgKl9fY29uc3QgX19lbnZwW10pCiAgICAgOwoKCgoKZXh0ZXJuIGludCBleGVjdiAo X19jb25zdCBjaGFyICpfX3BhdGgsIGNoYXIgKl9fY29uc3QgX19hcmd2W10pIDsKCgoKZXh0ZXJu IGludCBleGVjbGUgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX2NvbnN0IGNoYXIgKl9fYXJnLCAu Li4pIDsKCgoKZXh0ZXJuIGludCBleGVjbCAoX19jb25zdCBjaGFyICpfX3BhdGgsIF9fY29uc3Qg Y2hhciAqX19hcmcsIC4uLikgOwoKCgpleHRlcm4gaW50IGV4ZWN2cCAoX19jb25zdCBjaGFyICpf X2ZpbGUsIGNoYXIgKl9fY29uc3QgX19hcmd2W10pIDsKCgoKCmV4dGVybiBpbnQgZXhlY2xwIChf X2NvbnN0IGNoYXIgKl9fZmlsZSwgX19jb25zdCBjaGFyICpfX2FyZywgLi4uKSA7CgoKCgpleHRl cm4gaW50IG5pY2UgKGludCBfX2luYykgOwoKCgoKZXh0ZXJuIHZvaWQgX2V4aXQgKGludCBfX3N0 YXR1cykgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKCiMgMSAiLi4vc3lzZGVw cy9nZW5lcmljL2JpdHMvY29uZm5hbWUuaCIgMQojIDI1ICIuLi9zeXNkZXBzL2dlbmVyaWMvYml0 cy9jb25mbmFtZS5oIgplbnVtCiAgewogICAgX1BDX0xJTktfTUFYLAoKICAgIF9QQ19NQVhfQ0FO T04sCgogICAgX1BDX01BWF9JTlBVVCwKCiAgICBfUENfTkFNRV9NQVgsCgogICAgX1BDX1BBVEhf TUFYLAoKICAgIF9QQ19QSVBFX0JVRiwKCiAgICBfUENfQ0hPV05fUkVTVFJJQ1RFRCwKCiAgICBf UENfTk9fVFJVTkMsCgogICAgX1BDX1ZESVNBQkxFLAoKICAgIF9QQ19TWU5DX0lPLAoKICAgIF9Q Q19BU1lOQ19JTywKCiAgICBfUENfUFJJT19JTywKCiAgICBfUENfU09DS19NQVhCVUYsCgogICAg X1BDX0ZJTEVTSVpFQklUUywKCiAgICBfUENfUkVDX0lOQ1JfWEZFUl9TSVpFLAoKICAgIF9QQ19S RUNfTUFYX1hGRVJfU0laRSwKCiAgICBfUENfUkVDX01JTl9YRkVSX1NJWkUsCgogICAgX1BDX1JF Q19YRkVSX0FMSUdOLAoKICAgIF9QQ19BTExPQ19TSVpFX01JTiwKCiAgICBfUENfU1lNTElOS19N QVgKCiAgfTsKCgplbnVtCiAgewogICAgX1NDX0FSR19NQVgsCgogICAgX1NDX0NISUxEX01BWCwK CiAgICBfU0NfQ0xLX1RDSywKCiAgICBfU0NfTkdST1VQU19NQVgsCgogICAgX1NDX09QRU5fTUFY LAoKICAgIF9TQ19TVFJFQU1fTUFYLAoKICAgIF9TQ19UWk5BTUVfTUFYLAoKICAgIF9TQ19KT0Jf Q09OVFJPTCwKCiAgICBfU0NfU0FWRURfSURTLAoKICAgIF9TQ19SRUFMVElNRV9TSUdOQUxTLAoK ICAgIF9TQ19QUklPUklUWV9TQ0hFRFVMSU5HLAoKICAgIF9TQ19USU1FUlMsCgogICAgX1NDX0FT WU5DSFJPTk9VU19JTywKCiAgICBfU0NfUFJJT1JJVElaRURfSU8sCgogICAgX1NDX1NZTkNIUk9O SVpFRF9JTywKCiAgICBfU0NfRlNZTkMsCgogICAgX1NDX01BUFBFRF9GSUxFUywKCiAgICBfU0Nf TUVNTE9DSywKCiAgICBfU0NfTUVNTE9DS19SQU5HRSwKCiAgICBfU0NfTUVNT1JZX1BST1RFQ1RJ T04sCgogICAgX1NDX01FU1NBR0VfUEFTU0lORywKCiAgICBfU0NfU0VNQVBIT1JFUywKCiAgICBf U0NfU0hBUkVEX01FTU9SWV9PQkpFQ1RTLAoKICAgIF9TQ19BSU9fTElTVElPX01BWCwKCiAgICBf U0NfQUlPX01BWCwKCiAgICBfU0NfQUlPX1BSSU9fREVMVEFfTUFYLAoKICAgIF9TQ19ERUxBWVRJ TUVSX01BWCwKCiAgICBfU0NfTVFfT1BFTl9NQVgsCgogICAgX1NDX01RX1BSSU9fTUFYLAoKICAg IF9TQ19WRVJTSU9OLAoKICAgIF9TQ19QQUdFU0laRSwKCgogICAgX1NDX1JUU0lHX01BWCwKCiAg ICBfU0NfU0VNX05TRU1TX01BWCwKCiAgICBfU0NfU0VNX1ZBTFVFX01BWCwKCiAgICBfU0NfU0lH UVVFVUVfTUFYLAoKICAgIF9TQ19USU1FUl9NQVgsCgoKCgogICAgX1NDX0JDX0JBU0VfTUFYLAoK ICAgIF9TQ19CQ19ESU1fTUFYLAoKICAgIF9TQ19CQ19TQ0FMRV9NQVgsCgogICAgX1NDX0JDX1NU UklOR19NQVgsCgogICAgX1NDX0NPTExfV0VJR0hUU19NQVgsCgogICAgX1NDX0VRVUlWX0NMQVNT X01BWCwKCiAgICBfU0NfRVhQUl9ORVNUX01BWCwKCiAgICBfU0NfTElORV9NQVgsCgogICAgX1ND X1JFX0RVUF9NQVgsCgogICAgX1NDX0NIQVJDTEFTU19OQU1FX01BWCwKCgogICAgX1NDXzJfVkVS U0lPTiwKCiAgICBfU0NfMl9DX0JJTkQsCgogICAgX1NDXzJfQ19ERVYsCgogICAgX1NDXzJfRk9S VF9ERVYsCgogICAgX1NDXzJfRk9SVF9SVU4sCgogICAgX1NDXzJfU1dfREVWLAoKICAgIF9TQ18y X0xPQ0FMRURFRiwKCgogICAgX1NDX1BJSSwKCiAgICBfU0NfUElJX1hUSSwKCiAgICBfU0NfUElJ X1NPQ0tFVCwKCiAgICBfU0NfUElJX0lOVEVSTkVULAoKICAgIF9TQ19QSUlfT1NJLAoKICAgIF9T Q19QT0xMLAoKICAgIF9TQ19TRUxFQ1QsCgogICAgX1NDX1VJT19NQVhJT1YsCgogICAgX1NDX0lP Vl9NQVggPSBfU0NfVUlPX01BWElPViwKCiAgICBfU0NfUElJX0lOVEVSTkVUX1NUUkVBTSwKCiAg ICBfU0NfUElJX0lOVEVSTkVUX0RHUkFNLAoKICAgIF9TQ19QSUlfT1NJX0NPVFMsCgogICAgX1ND X1BJSV9PU0lfQ0xUUywKCiAgICBfU0NfUElJX09TSV9NLAoKICAgIF9TQ19UX0lPVl9NQVgsCgoK CiAgICBfU0NfVEhSRUFEUywKCiAgICBfU0NfVEhSRUFEX1NBRkVfRlVOQ1RJT05TLAoKICAgIF9T Q19HRVRHUl9SX1NJWkVfTUFYLAoKICAgIF9TQ19HRVRQV19SX1NJWkVfTUFYLAoKICAgIF9TQ19M T0dJTl9OQU1FX01BWCwKCiAgICBfU0NfVFRZX05BTUVfTUFYLAoKICAgIF9TQ19USFJFQURfREVT VFJVQ1RPUl9JVEVSQVRJT05TLAoKICAgIF9TQ19USFJFQURfS0VZU19NQVgsCgogICAgX1NDX1RI UkVBRF9TVEFDS19NSU4sCgogICAgX1NDX1RIUkVBRF9USFJFQURTX01BWCwKCiAgICBfU0NfVEhS RUFEX0FUVFJfU1RBQ0tBRERSLAoKICAgIF9TQ19USFJFQURfQVRUUl9TVEFDS1NJWkUsCgogICAg X1NDX1RIUkVBRF9QUklPUklUWV9TQ0hFRFVMSU5HLAoKICAgIF9TQ19USFJFQURfUFJJT19JTkhF UklULAoKICAgIF9TQ19USFJFQURfUFJJT19QUk9URUNULAoKICAgIF9TQ19USFJFQURfUFJPQ0VT U19TSEFSRUQsCgoKICAgIF9TQ19OUFJPQ0VTU09SU19DT05GLAoKICAgIF9TQ19OUFJPQ0VTU09S U19PTkxOLAoKICAgIF9TQ19QSFlTX1BBR0VTLAoKICAgIF9TQ19BVlBIWVNfUEFHRVMsCgogICAg X1NDX0FURVhJVF9NQVgsCgogICAgX1NDX1BBU1NfTUFYLAoKCiAgICBfU0NfWE9QRU5fVkVSU0lP TiwKCiAgICBfU0NfWE9QRU5fWENVX1ZFUlNJT04sCgogICAgX1NDX1hPUEVOX1VOSVgsCgogICAg X1NDX1hPUEVOX0NSWVBULAoKICAgIF9TQ19YT1BFTl9FTkhfSTE4TiwKCiAgICBfU0NfWE9QRU5f U0hNLAoKCiAgICBfU0NfMl9DSEFSX1RFUk0sCgogICAgX1NDXzJfQ19WRVJTSU9OLAoKICAgIF9T Q18yX1VQRSwKCgogICAgX1NDX1hPUEVOX1hQRzIsCgogICAgX1NDX1hPUEVOX1hQRzMsCgogICAg X1NDX1hPUEVOX1hQRzQsCgoKICAgIF9TQ19DSEFSX0JJVCwKCiAgICBfU0NfQ0hBUl9NQVgsCgog ICAgX1NDX0NIQVJfTUlOLAoKICAgIF9TQ19JTlRfTUFYLAoKICAgIF9TQ19JTlRfTUlOLAoKICAg IF9TQ19MT05HX0JJVCwKCiAgICBfU0NfV09SRF9CSVQsCgogICAgX1NDX01CX0xFTl9NQVgsCgog ICAgX1NDX05aRVJPLAoKICAgIF9TQ19TU0laRV9NQVgsCgogICAgX1NDX1NDSEFSX01BWCwKCiAg ICBfU0NfU0NIQVJfTUlOLAoKICAgIF9TQ19TSFJUX01BWCwKCiAgICBfU0NfU0hSVF9NSU4sCgog ICAgX1NDX1VDSEFSX01BWCwKCiAgICBfU0NfVUlOVF9NQVgsCgogICAgX1NDX1VMT05HX01BWCwK CiAgICBfU0NfVVNIUlRfTUFYLAoKCiAgICBfU0NfTkxfQVJHTUFYLAoKICAgIF9TQ19OTF9MQU5H TUFYLAoKICAgIF9TQ19OTF9NU0dNQVgsCgogICAgX1NDX05MX05NQVgsCgogICAgX1NDX05MX1NF VE1BWCwKCiAgICBfU0NfTkxfVEVYVE1BWCwKCgogICAgX1NDX1hCUzVfSUxQMzJfT0ZGMzIsCgog ICAgX1NDX1hCUzVfSUxQMzJfT0ZGQklHLAoKICAgIF9TQ19YQlM1X0xQNjRfT0ZGNjQsCgogICAg X1NDX1hCUzVfTFBCSUdfT0ZGQklHLAoKCiAgICBfU0NfWE9QRU5fTEVHQUNZLAoKICAgIF9TQ19Y T1BFTl9SRUFMVElNRSwKCiAgICBfU0NfWE9QRU5fUkVBTFRJTUVfVEhSRUFEUywKCgogICAgX1ND X0FEVklTT1JZX0lORk8sCgogICAgX1NDX0JBUlJJRVJTLAoKICAgIF9TQ19CQVNFLAoKICAgIF9T Q19DX0xBTkdfU1VQUE9SVCwKCiAgICBfU0NfQ19MQU5HX1NVUFBPUlRfUiwKCiAgICBfU0NfQ0xP Q0tfU0VMRUNUSU9OLAoKICAgIF9TQ19DUFVUSU1FLAoKICAgIF9TQ19USFJFQURfQ1BVVElNRSwK CiAgICBfU0NfREVWSUNFX0lPLAoKICAgIF9TQ19ERVZJQ0VfU1BFQ0lGSUMsCgogICAgX1NDX0RF VklDRV9TUEVDSUZJQ19SLAoKICAgIF9TQ19GRF9NR01ULAoKICAgIF9TQ19GSUZPLAoKICAgIF9T Q19QSVBFLAoKICAgIF9TQ19GSUxFX0FUVFJJQlVURVMsCgogICAgX1NDX0ZJTEVfTE9DS0lORywK CiAgICBfU0NfRklMRV9TWVNURU0sCgogICAgX1NDX01PTk9UT05JQ19DTE9DSywKCiAgICBfU0Nf TVVMVElfUFJPQ0VTUywKCiAgICBfU0NfU0lOR0xFX1BST0NFU1MsCgogICAgX1NDX05FVFdPUktJ TkcsCgogICAgX1NDX1JFQURFUl9XUklURVJfTE9DS1MsCgogICAgX1NDX1NQSU5fTE9DS1MsCgog ICAgX1NDX1JFR0VYUCwKCiAgICBfU0NfUkVHRVhfVkVSU0lPTiwKCiAgICBfU0NfU0hFTEwsCgog ICAgX1NDX1NJR05BTFMsCgogICAgX1NDX1NQQVdOLAoKICAgIF9TQ19TUE9SQURJQ19TRVJWRVIs CgogICAgX1NDX1RIUkVBRF9TUE9SQURJQ19TRVJWRVIsCgogICAgX1NDX1NZU1RFTV9EQVRBQkFT RSwKCiAgICBfU0NfU1lTVEVNX0RBVEFCQVNFX1IsCgogICAgX1NDX1RJTUVPVVRTLAoKICAgIF9T Q19UWVBFRF9NRU1PUllfT0JKRUNUUywKCiAgICBfU0NfVVNFUl9HUk9VUFMsCgogICAgX1NDX1VT RVJfR1JPVVBTX1IsCgogICAgX1NDXzJfUEJTLAoKICAgIF9TQ18yX1BCU19BQ0NPVU5USU5HLAoK ICAgIF9TQ18yX1BCU19MT0NBVEUsCgogICAgX1NDXzJfUEJTX01FU1NBR0UsCgogICAgX1NDXzJf UEJTX1RSQUNLLAoKICAgIF9TQ19TWU1MT09QX01BWCwKCiAgICBfU0NfU1RSRUFNUywKCiAgICBf U0NfMl9QQlNfQ0hFQ0tQT0lOVCwKCgogICAgX1NDX1Y2X0lMUDMyX09GRjMyLAoKICAgIF9TQ19W Nl9JTFAzMl9PRkZCSUcsCgogICAgX1NDX1Y2X0xQNjRfT0ZGNjQsCgogICAgX1NDX1Y2X0xQQklH X09GRkJJRywKCgogICAgX1NDX0hPU1RfTkFNRV9NQVgsCgogICAgX1NDX1RSQUNFLAoKICAgIF9T Q19UUkFDRV9FVkVOVF9GSUxURVIsCgogICAgX1NDX1RSQUNFX0lOSEVSSVQsCgogICAgX1NDX1RS QUNFX0xPRwoKICB9OwoKCgoKCmVudW0KICB7CiAgICBfQ1NfUEFUSCwKCgoKCiAgICBfQ1NfTEZT X0NGTEFHUyA9IDEwMDAsCgogICAgX0NTX0xGU19MREZMQUdTLAoKICAgIF9DU19MRlNfTElCUywK CiAgICBfQ1NfTEZTX0xJTlRGTEFHUywKCiAgICBfQ1NfTEZTNjRfQ0ZMQUdTLAoKICAgIF9DU19M RlM2NF9MREZMQUdTLAoKICAgIF9DU19MRlM2NF9MSUJTLAoKICAgIF9DU19MRlM2NF9MSU5URkxB R1MsCgoKCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGMzJfQ0ZMQUdTID0gMTEwMCwKCiAgICBfQ1Nf WEJTNV9JTFAzMl9PRkYzMl9MREZMQUdTLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRjMyX0xJQlMs CgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGMzJfTElOVEZMQUdTLAoKICAgIF9DU19YQlM1X0lMUDMy X09GRkJJR19DRkxBR1MsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGQklHX0xERkxBR1MsCgogICAg X0NTX1hCUzVfSUxQMzJfT0ZGQklHX0xJQlMsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGQklHX0xJ TlRGTEFHUywKCiAgICBfQ1NfWEJTNV9MUDY0X09GRjY0X0NGTEFHUywKCiAgICBfQ1NfWEJTNV9M UDY0X09GRjY0X0xERkxBR1MsCgogICAgX0NTX1hCUzVfTFA2NF9PRkY2NF9MSUJTLAoKICAgIF9D U19YQlM1X0xQNjRfT0ZGNjRfTElOVEZMQUdTLAoKICAgIF9DU19YQlM1X0xQQklHX09GRkJJR19D RkxBR1MsCgogICAgX0NTX1hCUzVfTFBCSUdfT0ZGQklHX0xERkxBR1MsCgogICAgX0NTX1hCUzVf TFBCSUdfT0ZGQklHX0xJQlMsCgogICAgX0NTX1hCUzVfTFBCSUdfT0ZGQklHX0xJTlRGTEFHUywK CgoKICAgIF9DU19QT1NJWF9WNl9JTFAzMl9PRkYzMl9DRkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2 X0lMUDMyX09GRjMyX0xERkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRjMyX0xJQlMs CgogICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRjMyX0xJTlRGTEFHUywKCiAgICBfQ1NfUE9TSVhf VjZfSUxQMzJfT0ZGQklHX0NGTEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGQklHX0xE RkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRkJJR19MSUJTLAoKICAgIF9DU19QT1NJ WF9WNl9JTFAzMl9PRkZCSUdfTElOVEZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9MUDY0X09GRjY0 X0NGTEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfTFA2NF9PRkY2NF9MREZMQUdTLAoKICAgIF9DU19Q T1NJWF9WNl9MUDY0X09GRjY0X0xJQlMsCgogICAgX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfTElO VEZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9MUEJJR19PRkZCSUdfQ0ZMQUdTLAoKICAgIF9DU19Q T1NJWF9WNl9MUEJJR19PRkZCSUdfTERGTEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfTFBCSUdfT0ZG QklHX0xJQlMsCgogICAgX0NTX1BPU0lYX1Y2X0xQQklHX09GRkJJR19MSU5URkxBR1MsCgoKCiAg ICBfQ1NfVjZfV0lEVEhfUkVTVFJJQ1RFRF9FTlZTCgogIH07CiMgNTAxICIuLi9wb3NpeC91bmlz dGQuaCIgMgoKCmV4dGVybiBsb25nIGludCBwYXRoY29uZiAoX19jb25zdCBjaGFyICpfX3BhdGgs IGludCBfX25hbWUpIDsKCgpleHRlcm4gbG9uZyBpbnQgZnBhdGhjb25mIChpbnQgX19mZCwgaW50 IF9fbmFtZSkgOwoKCmV4dGVybiBsb25nIGludCBzeXNjb25mIChpbnQgX19uYW1lKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBzaXplX3QgY29uZnN0ciAoaW50IF9fbmFt ZSwgY2hhciAqX19idWYsIHNpemVfdCBfX2xlbikgOwoKCgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cGlk ICh2b2lkKSA7CgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cHBpZCAodm9pZCkgOwoKCgoKZXh0ZXJuIF9f cGlkX3QgZ2V0cGdycCAodm9pZCkgOwojIDUzNiAiLi4vcG9zaXgvdW5pc3RkLmgiCmV4dGVybiBf X3BpZF90IF9fZ2V0cGdpZCAoX19waWRfdCBfX3BpZCkgOwoKZXh0ZXJuIF9fcGlkX3QgZ2V0cGdp ZCAoX19waWRfdCBfX3BpZCkgOwoKCgoKCgpleHRlcm4gaW50IHNldHBnaWQgKF9fcGlkX3QgX19w aWQsIF9fcGlkX3QgX19wZ2lkKSA7CiMgNTYyICIuLi9wb3NpeC91bmlzdGQuaCIKZXh0ZXJuIGlu dCBzZXRwZ3JwICh2b2lkKSA7CiMgNTgwICIuLi9wb3NpeC91bmlzdGQuaCIKZXh0ZXJuIF9fcGlk X3Qgc2V0c2lkICh2b2lkKSA7CgoKCmV4dGVybiBfX3BpZF90IGdldHNpZCAoX19waWRfdCBfX3Bp ZCkgOwoKCgpleHRlcm4gX191aWRfdCBnZXR1aWQgKHZvaWQpIDsKCgpleHRlcm4gX191aWRfdCBn ZXRldWlkICh2b2lkKSA7CgoKZXh0ZXJuIF9fZ2lkX3QgZ2V0Z2lkICh2b2lkKSA7CgoKZXh0ZXJu IF9fZ2lkX3QgZ2V0ZWdpZCAodm9pZCkgOwoKCgoKZXh0ZXJuIGludCBnZXRncm91cHMgKGludCBf X3NpemUsIF9fZ2lkX3QgX19saXN0W10pIDsKCgoKZXh0ZXJuIGludCBncm91cF9tZW1iZXIgKF9f Z2lkX3QgX19naWQpIDsKCgoKCgoKZXh0ZXJuIGludCBzZXR1aWQgKF9fdWlkX3QgX191aWQpIDsK CgoKCmV4dGVybiBpbnQgc2V0cmV1aWQgKF9fdWlkX3QgX19ydWlkLCBfX3VpZF90IF9fZXVpZCkg OwoKCgoKZXh0ZXJuIGludCBzZXRldWlkIChfX3VpZF90IF9fdWlkKSA7CgoKCgoKCmV4dGVybiBp bnQgc2V0Z2lkIChfX2dpZF90IF9fZ2lkKSA7CgoKCgpleHRlcm4gaW50IHNldHJlZ2lkIChfX2dp ZF90IF9fcmdpZCwgX19naWRfdCBfX2VnaWQpIDsKCgoKCmV4dGVybiBpbnQgc2V0ZWdpZCAoX19n aWRfdCBfX2dpZCkgOwoKCgoKCgpleHRlcm4gX19waWRfdCBmb3JrICh2b2lkKSA7CgoKCgoKCmV4 dGVybiBfX3BpZF90IHZmb3JrICh2b2lkKSA7CgoKCgoKZXh0ZXJuIGNoYXIgKnR0eW5hbWUgKGlu dCBfX2ZkKSA7CgoKCmV4dGVybiBpbnQgdHR5bmFtZV9yIChpbnQgX19mZCwgY2hhciAqX19idWYs IHNpemVfdCBfX2J1ZmxlbikgOwoKCgpleHRlcm4gaW50IGlzYXR0eSAoaW50IF9fZmQpIDsKCgoK CgpleHRlcm4gaW50IHR0eXNsb3QgKHZvaWQpIDsKCgoKCmV4dGVybiBpbnQgbGluayAoX19jb25z dCBjaGFyICpfX2Zyb20sIF9fY29uc3QgY2hhciAqX190bykgOwoKCgpleHRlcm4gaW50IHN5bWxp bmsgKF9fY29uc3QgY2hhciAqX19mcm9tLCBfX2NvbnN0IGNoYXIgKl9fdG8pIDsKCgoKCmV4dGVy biBpbnQgcmVhZGxpbmsgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3BhdGgsIGNoYXIgKl9f cmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgOwoKCgpl eHRlcm4gaW50IHVubGluayAoX19jb25zdCBjaGFyICpfX25hbWUpIDsKCgpleHRlcm4gaW50IHJt ZGlyIChfX2NvbnN0IGNoYXIgKl9fcGF0aCkgOwoKCgpleHRlcm4gX19waWRfdCB0Y2dldHBncnAg KGludCBfX2ZkKSA7CgoKZXh0ZXJuIGludCB0Y3NldHBncnAgKGludCBfX2ZkLCBfX3BpZF90IF9f cGdycF9pZCkgOwoKCgpleHRlcm4gY2hhciAqZ2V0bG9naW4gKHZvaWQpIDsKCgoKCmV4dGVybiBp bnQgZ2V0bG9naW5fciAoY2hhciAqX19uYW1lLCBzaXplX3QgX19uYW1lX2xlbikgOwoKCgoKZXh0 ZXJuIGludCBzZXRsb2dpbiAoX19jb25zdCBjaGFyICpfX25hbWUpIDsKIyA3MjYgIi4uL3Bvc2l4 L3VuaXN0ZC5oIgojIDEgIi4uL2luY2x1ZGUvZ2V0b3B0LmgiIDEKCgojIDEgIi4uL3Bvc2l4L2dl dG9wdC5oIiAxCiMgNDcgIi4uL3Bvc2l4L2dldG9wdC5oIgpleHRlcm4gY2hhciAqb3B0YXJnOwoj IDYxICIuLi9wb3NpeC9nZXRvcHQuaCIKZXh0ZXJuIGludCBvcHRpbmQ7CgoKCgpleHRlcm4gaW50 IG9wdGVycjsKCgoKZXh0ZXJuIGludCBvcHRvcHQ7CiMgMTQ1ICIuLi9wb3NpeC9nZXRvcHQuaCIK ZXh0ZXJuIGludCBnZXRvcHQgKGludCBfX19hcmdjLCBjaGFyICpjb25zdCAqX19fYXJndiwgY29u c3QgY2hhciAqX19zaG9ydG9wdHMpOwojIDQgIi4uL2luY2x1ZGUvZ2V0b3B0LmgiIDIKCgpleHRl cm4gdm9pZCBfX2dldG9wdF9jbGVhbl9lbnZpcm9ubWVudCAoY2hhciAqKl9fZW52KTsKIyA3Mjcg Ii4uL3Bvc2l4L3VuaXN0ZC5oIiAyCgoKCgoKCgpleHRlcm4gaW50IGdldGhvc3RuYW1lIChjaGFy ICpfX25hbWUsIHNpemVfdCBfX2xlbikgOwoKCgoKCgpleHRlcm4gaW50IHNldGhvc3RuYW1lIChf X2NvbnN0IGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbGVuKSA7CgoKCmV4dGVybiBpbnQgc2V0aG9z dGlkIChsb25nIGludCBfX2lkKSA7CgoKCgoKZXh0ZXJuIGludCBnZXRkb21haW5uYW1lIChjaGFy ICpfX25hbWUsIHNpemVfdCBfX2xlbikgOwpleHRlcm4gaW50IHNldGRvbWFpbm5hbWUgKF9fY29u c3QgY2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pIDsKCgoKCgpleHRlcm4gaW50IHZoYW5ndXAg KHZvaWQpIDsKCgpleHRlcm4gaW50IHJldm9rZSAoX19jb25zdCBjaGFyICpfX2ZpbGUpIDsKCgoK CgoKCmV4dGVybiBpbnQgcHJvZmlsICh1bnNpZ25lZCBzaG9ydCBpbnQgKl9fc2FtcGxlX2J1ZmZl ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX29mZnNldCwgdW5z aWduZWQgaW50IF9fc2NhbGUpIDsKCgoKCgpleHRlcm4gaW50IGFjY3QgKF9fY29uc3QgY2hhciAq X19uYW1lKSA7CgoKCmV4dGVybiBjaGFyICpnZXR1c2Vyc2hlbGwgKHZvaWQpIDsKZXh0ZXJuIHZv aWQgZW5kdXNlcnNoZWxsICh2b2lkKSA7CmV4dGVybiB2b2lkIHNldHVzZXJzaGVsbCAodm9pZCkg OwoKCgoKCmV4dGVybiBpbnQgZGFlbW9uIChpbnQgX19ub2NoZGlyLCBpbnQgX19ub2Nsb3NlKSA7 CgoKCgoKCmV4dGVybiBpbnQgY2hyb290IChfX2NvbnN0IGNoYXIgKl9fcGF0aCkgOwoKCgpleHRl cm4gY2hhciAqZ2V0cGFzcyAoX19jb25zdCBjaGFyICpfX3Byb21wdCkgOwoKCgoKCmV4dGVybiBp bnQgZnN5bmMgKGludCBfX2ZkKSA7CgoKCgoKCmV4dGVybiBsb25nIGludCBnZXRob3N0aWQgKHZv aWQpIDsKCgpleHRlcm4gdm9pZCBzeW5jICh2b2lkKSA7CgoKCgpleHRlcm4gaW50IGdldHBhZ2Vz aXplICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IHRy dW5jYXRlIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19vZmZfdCBfX2xlbmd0aCkgOwojIDgzNiAi Li4vcG9zaXgvdW5pc3RkLmgiCmV4dGVybiBpbnQgdHJ1bmNhdGU2NCAoX19jb25zdCBjaGFyICpf X2ZpbGUsIF9fb2ZmNjRfdCBfX2xlbmd0aCkgOwoKCgoKZXh0ZXJuIGludCBmdHJ1bmNhdGUgKGlu dCBfX2ZkLCBfX29mZl90IF9fbGVuZ3RoKSA7CiMgODUxICIuLi9wb3NpeC91bmlzdGQuaCIKZXh0 ZXJuIGludCBmdHJ1bmNhdGU2NCAoaW50IF9fZmQsIF9fb2ZmNjRfdCBfX2xlbmd0aCkgOwoKCgoK CmV4dGVybiBpbnQgZ2V0ZHRhYmxlc2l6ZSAodm9pZCkgOwojIDg2NiAiLi4vcG9zaXgvdW5pc3Rk LmgiCmV4dGVybiBpbnQgYnJrICh2b2lkICpfX2FkZHIpIDsKCgoKCgpleHRlcm4gdm9pZCAqc2Jy ayAoaW50cHRyX3QgX19kZWx0YSkgOwojIDg4NyAiLi4vcG9zaXgvdW5pc3RkLmgiCmV4dGVybiBs b25nIGludCBzeXNjYWxsIChsb25nIGludCBfX3N5c25vLCAuLi4pIDsKIyA5MDcgIi4uL3Bvc2l4 L3VuaXN0ZC5oIgpleHRlcm4gaW50IGxvY2tmIChpbnQgX19mZCwgaW50IF9fY21kLCBfX29mZl90 IF9fbGVuKSA7CiMgOTE3ICIuLi9wb3NpeC91bmlzdGQuaCIKZXh0ZXJuIGludCBsb2NrZjY0IChp bnQgX19mZCwgaW50IF9fY21kLCBfX29mZjY0X3QgX19sZW4pIDsKIyA5MzggIi4uL3Bvc2l4L3Vu aXN0ZC5oIgpleHRlcm4gaW50IGZkYXRhc3luYyAoaW50IF9fZmlsZGVzKSA7CgoKCgoKCgpleHRl cm4gY2hhciAqY3J5cHQgKF9fY29uc3QgY2hhciAqX19rZXksIF9fY29uc3QgY2hhciAqX19zYWx0 KSA7CgoKCmV4dGVybiB2b2lkIGVuY3J5cHQgKGNoYXIgKl9fYmxvY2ssIGludCBfX2VkZmxhZykg OwoKCgoKCgpleHRlcm4gdm9pZCBzd2FiIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19mcm9t LCB2b2lkICpfX3Jlc3RyaWN0IF9fdG8sCiAgICAgICAgICAgICAgICAgIHNzaXplX3QgX19uKSA7 CgoKCgoKCgpleHRlcm4gY2hhciAqY3Rlcm1pZCAoY2hhciAqX19zKSA7CiMgOTgzICIuLi9wb3Np eC91bmlzdGQuaCIKZXh0ZXJuIGludCBwdGhyZWFkX2F0Zm9yayAodm9pZCAoKl9fcHJlcGFyZSkg KHZvaWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19wYXJlbnQpICh2b2lk KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgOwoK CgojIDMgIi4uL2luY2x1ZGUvdW5pc3RkLmgiIDIKCgpleHRlcm4gaW50IF9fYWNjZXNzIChfX2Nv bnN0IGNoYXIgKl9fbmFtZSwgaW50IF9fdHlwZSk7CmV4dGVybiBpbnQgX19ldWlkYWNjZXNzIChf X2NvbnN0IGNoYXIgKl9fbmFtZSwgaW50IF9fdHlwZSk7CmV4dGVybiBfX29mZjY0X3QgX19sc2Vl azY0IChpbnQgX19mZCwgX19vZmY2NF90IF9fb2Zmc2V0LCBpbnQgX193aGVuY2UpOwpleHRlcm4g X19vZmZfdCBfX2xzZWVrIChpbnQgX19mZCwgX19vZmZfdCBfX29mZnNldCwgaW50IF9fd2hlbmNl KTsKZXh0ZXJuIF9fb2ZmX3QgX19saWJjX2xzZWVrIChpbnQgX19mZCwgX19vZmZfdCBfX29mZnNl dCwgaW50IF9fd2hlbmNlKTsKZXh0ZXJuIF9fb2ZmNjRfdCBfX2xpYmNfbHNlZWs2NCAoaW50IF9f ZmQsIF9fb2ZmNjRfdCBfX29mZnNldCwgaW50IF9fd2hlbmNlKTsKZXh0ZXJuIHNzaXplX3QgX19w cmVhZCAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMsCiAgICAgICAgICAg ICAgICAgICAgICAgIF9fb2ZmX3QgX19vZmZzZXQpOwpleHRlcm4gc3NpemVfdCBfX2xpYmNfcHJl YWQgKGludCBfX2ZkLCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fb2ZmX3QgX19vZmZzZXQpOwpleHRlcm4gc3NpemVfdCBfX3ByZWFk NjQgKGludCBfX2ZkLCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzLAogICAgICAgICAgICAg ICAgICAgICAgICAgIF9fb2ZmNjRfdCBfX29mZnNldCk7CmV4dGVybiBzc2l6ZV90IF9fbGliY19w cmVhZDY0IChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fb2ZmNjRfdCBfX29mZnNldCk7CmV4dGVybiBzc2l6ZV90 IF9fcHdyaXRlIChpbnQgX19mZCwgX19jb25zdCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbiwKICAg ICAgICAgICAgICAgICAgICAgICAgIF9fb2ZmX3QgX19vZmZzZXQpOwpleHRlcm4gc3NpemVfdCBf X2xpYmNfcHdyaXRlIChpbnQgX19mZCwgX19jb25zdCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19vZmZfdCBfX29mZnNldCk7CmV4dGVybiBz c2l6ZV90IF9fcHdyaXRlNjQgKGludCBfX2ZkLCBfX2NvbnN0IHZvaWQgKl9fYnVmLCBzaXplX3Qg X19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX29mZjY0X3QgX19vZmZzZXQpOwpleHRl cm4gc3NpemVfdCBfX2xpYmNfcHdyaXRlNjQgKGludCBfX2ZkLCBfX2NvbnN0IHZvaWQgKl9fYnVm LCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fb2ZmNjRfdCBf X29mZnNldCk7CmV4dGVybiBzc2l6ZV90IF9fbGliY19yZWFkIChpbnQgX19mZCwgdm9pZCAqX19i dWYsIHNpemVfdCBfX24pOwpleHRlcm4gc3NpemVfdCBfX2xpYmNfd3JpdGUgKGludCBfX2ZkLCBf X2NvbnN0IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uKTsKZXh0ZXJuIGludCBfX3BpcGUgKGludCBf X3BpcGVkZXNbMl0pOwpleHRlcm4gdW5zaWduZWQgaW50IF9fc2xlZXAgKHVuc2lnbmVkIGludCBf X3NlY29uZHMpOwpleHRlcm4gaW50IF9fY2hvd24gKF9fY29uc3QgY2hhciAqX19maWxlLAogICAg ICAgICAgICAgICAgICAgIF9fdWlkX3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKTsKZXh0ZXJu IGludCBfX2ZjaG93biAoaW50IF9fZmQsCiAgICAgICAgICAgICAgICAgICAgIF9fdWlkX3QgX19v d25lciwgX19naWRfdCBfX2dyb3VwKTsKZXh0ZXJuIGludCBfX2xjaG93biAoX19jb25zdCBjaGFy ICpfX2ZpbGUsIF9fdWlkX3QgX19vd25lciwKICAgICAgICAgICAgICAgICAgICAgX19naWRfdCBf X2dyb3VwKTsKZXh0ZXJuIGludCBfX2NoZGlyIChfX2NvbnN0IGNoYXIgKl9fcGF0aCk7CmV4dGVy biBpbnQgX19mY2hkaXIgKGludCBfX2ZkKTsKZXh0ZXJuIGNoYXIgKl9fZ2V0Y3dkIChjaGFyICpf X2J1Ziwgc2l6ZV90IF9fc2l6ZSk7CmV4dGVybiBpbnQgX19ybWRpciAoY29uc3QgY2hhciAqX19w YXRoKTsKCgoKCgoKCmNoYXIgKl9fY2Fub25pY2FsaXplX2RpcmVjdG9yeV9uYW1lX2ludGVybmFs IChfX2NvbnN0IGNoYXIgKl9fdGhpc2RpciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKl9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc2l6ZSk7CgpleHRlcm4gaW50IF9fZHVwIChpbnQg X19mZCk7CmV4dGVybiBpbnQgX19kdXAyIChpbnQgX19mZCwgaW50IF9fZmQyKTsKZXh0ZXJuIGlu dCBfX2V4ZWN2ZSAoX19jb25zdCBjaGFyICpfX3BhdGgsIGNoYXIgKl9fY29uc3QgX19hcmd2W10s CiAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fY29uc3QgX19lbnZwW10pOwpleHRlcm4gbG9u ZyBpbnQgX19wYXRoY29uZiAoX19jb25zdCBjaGFyICpfX3BhdGgsIGludCBfX25hbWUpOwpleHRl cm4gbG9uZyBpbnQgX19mcGF0aGNvbmYgKGludCBfX2ZkLCBpbnQgX19uYW1lKTsKZXh0ZXJuIGxv bmcgaW50IF9fc3lzY29uZiAoaW50IF9fbmFtZSk7CmV4dGVybiBfX3BpZF90IF9fZ2V0cGlkICh2 b2lkKTsKZXh0ZXJuIF9fcGlkX3QgX19nZXRwcGlkICh2b2lkKTsKZXh0ZXJuIF9fcGlkX3QgX19z ZXRzaWQgKHZvaWQpOwpleHRlcm4gX191aWRfdCBfX2dldHVpZCAodm9pZCk7CmV4dGVybiBfX3Vp ZF90IF9fZ2V0ZXVpZCAodm9pZCk7CmV4dGVybiBfX2dpZF90IF9fZ2V0Z2lkICh2b2lkKTsKZXh0 ZXJuIF9fZ2lkX3QgX19nZXRlZ2lkICh2b2lkKTsKZXh0ZXJuIGludCBfX2dldGdyb3VwcyAoaW50 IF9fc2l6ZSwgX19naWRfdCBfX2xpc3RbXSk7CmV4dGVybiBpbnQgX19ncm91cF9tZW1iZXIgKF9f Z2lkX3QgX19naWQpOwpleHRlcm4gaW50IF9fc2V0dWlkIChfX3VpZF90IF9fdWlkKTsKZXh0ZXJu IGludCBfX3NldHJldWlkIChfX3VpZF90IF9fcnVpZCwgX191aWRfdCBfX2V1aWQpOwpleHRlcm4g aW50IF9fc2V0Z2lkIChfX2dpZF90IF9fZ2lkKTsKZXh0ZXJuIGludCBfX3NldHBnaWQgKF9fcGlk X3QgX19waWQsIF9fcGlkX3QgX19wZ2lkKTsKZXh0ZXJuIGludCBfX3NldHJlZ2lkIChfX2dpZF90 IF9fcmdpZCwgX19naWRfdCBfX2VnaWQpOwpleHRlcm4gX19waWRfdCBfX3Zmb3JrICh2b2lkKTsK ZXh0ZXJuIGludCBfX3R0eW5hbWVfciAoaW50IF9fZmQsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19i dWZsZW4pOwpleHRlcm4gaW50IF9faXNhdHR5IChpbnQgX19mZCk7CmV4dGVybiBpbnQgX19saW5r IChfX2NvbnN0IGNoYXIgKl9fZnJvbSwgX19jb25zdCBjaGFyICpfX3RvKTsKZXh0ZXJuIGludCBf X3N5bWxpbmsgKF9fY29uc3QgY2hhciAqX19mcm9tLCBfX2NvbnN0IGNoYXIgKl9fdG8pOwpleHRl cm4gaW50IF9fcmVhZGxpbmsgKF9fY29uc3QgY2hhciAqX19wYXRoLCBjaGFyICpfX2J1Ziwgc2l6 ZV90IF9fbGVuKTsKZXh0ZXJuIGludCBfX3VubGluayAoX19jb25zdCBjaGFyICpfX25hbWUpOwpl eHRlcm4gaW50IF9fZ2V0aG9zdG5hbWUgKGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbGVuKTsKZXh0 ZXJuIGludCBfX3Byb2ZpbCAodW5zaWduZWQgc2hvcnQgaW50ICpfX3NhbXBsZV9idWZmZXIsIHNp emVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX29mZnNldCwgdW5zaWdu ZWQgaW50IF9fc2NhbGUpOwpleHRlcm4gaW50IF9fZ2V0ZHRhYmxlc2l6ZSAodm9pZCk7CmV4dGVy biBpbnQgX19icmsgKHZvaWQgKl9fYWRkcik7CmV4dGVybiBpbnQgX19jbG9zZSAoaW50IF9fZmQp OwpleHRlcm4gc3NpemVfdCBfX3JlYWQgKGludCBfX2ZkLCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9f bmJ5dGVzKTsKZXh0ZXJuIHNzaXplX3QgX193cml0ZSAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAq X19idWYsIHNpemVfdCBfX24pOwpleHRlcm4gX19waWRfdCBfX2ZvcmsgKHZvaWQpOwpleHRlcm4g aW50IF9fZ2V0cGFnZXNpemUgKHZvaWQpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0 ZXJuIGludCBfX2Z0cnVuY2F0ZSAoaW50IF9fZmQsIF9fb2ZmX3QgX19sZW5ndGgpOwpleHRlcm4g aW50IF9fZnRydW5jYXRlNjQgKGludCBfX2ZkLCBfX29mZjY0X3QgX19sZW5ndGgpOwpleHRlcm4g dm9pZCAqX19zYnJrIChpbnRwdHJfdCBfX2RlbHRhKTsKCgoKCgoKCmV4dGVybiBpbnQgX19saWJj X2VuYWJsZV9zZWN1cmU7CgoKCmV4dGVybiB2b2lkIF9fbGliY19jaGVja19zdGFuZGFyZF9mZHMg KHZvaWQpOwojIDI0ICJwdGhyZWFkLmMiIDIKIyAxICIuLi9pbmNsdWRlL2ZjbnRsLmgiIDEKCiMg MSAiLi4vaW8vZmNudGwuaCIgMQojIDI5ICIuLi9pby9mY250bC5oIgoKCgoKIyAxICIuLi9zeXNk ZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L2JpdHMvZmNudGwuaCIgMQojIDI1ICIuLi9zeXNkZXBz L3VuaXgvc3lzdi9saW51eC9pMzg2L2JpdHMvZmNudGwuaCIKIyAxICIuLi9pbmNsdWRlL3N5cy90 eXBlcy5oIiAxCiMgMjYgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvYml0cy9mY250 bC5oIiAyCiMgMTM2ICIuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L2JpdHMvZmNudGwu aCIKc3RydWN0IGZsb2NrCiAgewogICAgc2hvcnQgaW50IGxfdHlwZTsKICAgIHNob3J0IGludCBs X3doZW5jZTsKCiAgICBfX29mZl90IGxfc3RhcnQ7CiAgICBfX29mZl90IGxfbGVuOwoKCgoKICAg IF9fcGlkX3QgbF9waWQ7CiAgfTsKCgpzdHJ1Y3QgZmxvY2s2NAogIHsKICAgIHNob3J0IGludCBs X3R5cGU7CiAgICBzaG9ydCBpbnQgbF93aGVuY2U7CiAgICBfX29mZjY0X3QgbF9zdGFydDsKICAg IF9fb2ZmNjRfdCBsX2xlbjsKICAgIF9fcGlkX3QgbF9waWQ7CiAgfTsKIyAzNCAiLi4vaW8vZmNu dGwuaCIgMgoKCgojIDEgIi4uL2luY2x1ZGUvc3lzL3N0YXQuaCIgMQoKIyAxICIuLi9pby9zeXMv c3RhdC5oIiAxCiMgMzIgIi4uL2lvL3N5cy9zdGF0LmgiCiMgMSAiLi4vaW5jbHVkZS90aW1lLmgi IDEKCgojIDEgIi4uL3RpbWUvdGltZS5oIiAxCiMgNCAiLi4vaW5jbHVkZS90aW1lLmgiIDIKIyAz MyAiLi4vaW8vc3lzL3N0YXQuaCIgMgojIDk2ICIuLi9pby9zeXMvc3RhdC5oIgoKCiMgMSAiLi4v c3lzZGVwcy91bml4L3N5c3YvbGludXgvYml0cy9zdGF0LmgiIDEKIyAzNiAiLi4vc3lzZGVwcy91 bml4L3N5c3YvbGludXgvYml0cy9zdGF0LmgiCnN0cnVjdCBzdGF0CiAgewogICAgX19kZXZfdCBz dF9kZXY7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19wYWQxOwoKICAgIF9faW5vX3Qgc3RfaW5v OwoKCgogICAgX19tb2RlX3Qgc3RfbW9kZTsKICAgIF9fbmxpbmtfdCBzdF9ubGluazsKICAgIF9f dWlkX3Qgc3RfdWlkOwogICAgX19naWRfdCBzdF9naWQ7CiAgICBfX2Rldl90IHN0X3JkZXY7CiAg ICB1bnNpZ25lZCBzaG9ydCBpbnQgX19wYWQyOwoKICAgIF9fb2ZmX3Qgc3Rfc2l6ZTsKCgoKICAg IF9fYmxrc2l6ZV90IHN0X2Jsa3NpemU7CgoKICAgIF9fYmxrY250X3Qgc3RfYmxvY2tzOwoKCgog ICAgX190aW1lX3Qgc3RfYXRpbWU7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3VudXNlZDE7CiAg ICBfX3RpbWVfdCBzdF9tdGltZTsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkMjsKICAg IF9fdGltZV90IHN0X2N0aW1lOwogICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQzOwoKICAg IHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkNDsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51 c2VkNTsKCgoKICB9OwoKCnN0cnVjdCBzdGF0NjQKICB7CiAgICBfX2Rldl90IHN0X2RldjsKICAg IHVuc2lnbmVkIGludCBfX3BhZDE7CgogICAgX19pbm9fdCBfX3N0X2lubzsKICAgIF9fbW9kZV90 IHN0X21vZGU7CiAgICBfX25saW5rX3Qgc3Rfbmxpbms7CiAgICBfX3VpZF90IHN0X3VpZDsKICAg IF9fZ2lkX3Qgc3RfZ2lkOwogICAgX19kZXZfdCBzdF9yZGV2OwogICAgdW5zaWduZWQgaW50IF9f cGFkMjsKICAgIF9fb2ZmNjRfdCBzdF9zaXplOwogICAgX19ibGtzaXplX3Qgc3RfYmxrc2l6ZTsK CiAgICBfX2Jsa2NudDY0X3Qgc3RfYmxvY2tzOwogICAgX190aW1lX3Qgc3RfYXRpbWU7CiAgICB1 bnNpZ25lZCBsb25nIGludCBfX3VudXNlZDE7CiAgICBfX3RpbWVfdCBzdF9tdGltZTsKICAgIHVu c2lnbmVkIGxvbmcgaW50IF9fdW51c2VkMjsKICAgIF9fdGltZV90IHN0X2N0aW1lOwogICAgdW5z aWduZWQgbG9uZyBpbnQgX191bnVzZWQzOwogICAgX19pbm82NF90IHN0X2lubzsKICB9OwojIDk5 ICIuLi9pby9zeXMvc3RhdC5oIiAyCiMgMjAwICIuLi9pby9zeXMvc3RhdC5oIgpleHRlcm4gaW50 IHN0YXQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGUsCiAgICAgICAgICAgICAgICAg c3RydWN0IHN0YXQgKl9fcmVzdHJpY3QgX19idWYpIDsKCgoKZXh0ZXJuIGludCBmc3RhdCAoaW50 IF9fZmQsIHN0cnVjdCBzdGF0ICpfX2J1ZikgOwojIDIxOSAiLi4vaW8vc3lzL3N0YXQuaCIKZXh0 ZXJuIGludCBzdGF0NjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGUsCiAgICAgICAg ICAgICAgICAgICBzdHJ1Y3Qgc3RhdDY0ICpfX3Jlc3RyaWN0IF9fYnVmKSA7CmV4dGVybiBpbnQg ZnN0YXQ2NCAoaW50IF9fZmQsIHN0cnVjdCBzdGF0NjQgKl9fYnVmKSA7CgoKCgoKCmV4dGVybiBp bnQgbHN0YXQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGUsCiAgICAgICAgICAgICAg ICAgIHN0cnVjdCBzdGF0ICpfX3Jlc3RyaWN0IF9fYnVmKSA7CiMgMjQxICIuLi9pby9zeXMvc3Rh dC5oIgpleHRlcm4gaW50IGxzdGF0NjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGUs CiAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQ2NCAqX19yZXN0cmljdCBfX2J1ZikgOwoK CgoKCgpleHRlcm4gaW50IGNobW9kIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19tb2RlX3QgX19t b2RlKSA7CgoKCmV4dGVybiBpbnQgZmNobW9kIChpbnQgX19mZCwgX19tb2RlX3QgX19tb2RlKSA7 CgoKCgoKZXh0ZXJuIF9fbW9kZV90IHVtYXNrIChfX21vZGVfdCBfX21hc2spIDsKCgoKCmV4dGVy biBfX21vZGVfdCBnZXR1bWFzayAodm9pZCkgOwoKCgpleHRlcm4gaW50IG1rZGlyIChfX2NvbnN0 IGNoYXIgKl9fcGF0aCwgX19tb2RlX3QgX19tb2RlKSA7CgoKCgoKZXh0ZXJuIGludCBta25vZCAo X19jb25zdCBjaGFyICpfX3BhdGgsIF9fbW9kZV90IF9fbW9kZSwgX19kZXZfdCBfX2RldikKICAg ICA7CgoKCgpleHRlcm4gaW50IG1rZmlmbyAoX19jb25zdCBjaGFyICpfX3BhdGgsIF9fbW9kZV90 IF9fbW9kZSkgOwojIDMwNiAiLi4vaW8vc3lzL3N0YXQuaCIKZXh0ZXJuIGludCBfX2Z4c3RhdCAo aW50IF9fdmVyLCBpbnQgX19maWxkZXMsIHN0cnVjdCBzdGF0ICpfX3N0YXRfYnVmKSA7CmV4dGVy biBpbnQgX194c3RhdCAoaW50IF9fdmVyLCBfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUsCiAgICAg ICAgICAgICAgICAgICAgc3RydWN0IHN0YXQgKl9fc3RhdF9idWYpIDsKZXh0ZXJuIGludCBfX2x4 c3RhdCAoaW50IF9fdmVyLCBfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUsCiAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBzdGF0ICpfX3N0YXRfYnVmKSA7CiMgMzMwICIuLi9pby9zeXMvc3RhdC5o IgpleHRlcm4gaW50IF9fZnhzdGF0NjQgKGludCBfX3ZlciwgaW50IF9fZmlsZGVzLCBzdHJ1Y3Qg c3RhdDY0ICpfX3N0YXRfYnVmKQogICAgIDsKZXh0ZXJuIGludCBfX3hzdGF0NjQgKGludCBfX3Zl ciwgX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IHN0YXQ2NCAqX19zdGF0X2J1ZikgOwpleHRlcm4gaW50IF9fbHhzdGF0NjQgKGludCBfX3Zlciwg X19jb25zdCBjaGFyICpfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBz dGF0NjQgKl9fc3RhdF9idWYpIDsKCmV4dGVybiBpbnQgX194bWtub2QgKGludCBfX3ZlciwgX19j b25zdCBjaGFyICpfX3BhdGgsIF9fbW9kZV90IF9fbW9kZSwKICAgICAgICAgICAgICAgICAgICAg X19kZXZfdCAqX19kZXYpIDsKCgoKCmV4dGVybiBfX2lubGluZV9fIGludCBzdGF0IChfX2NvbnN0 IGNoYXIgKl9fcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0ICpf X3N0YXRidWYpCnsKICByZXR1cm4gX194c3RhdCAoMywgX19wYXRoLCBfX3N0YXRidWYpOwp9CgoK ZXh0ZXJuIF9faW5saW5lX18gaW50IGxzdGF0IChfX2NvbnN0IGNoYXIgKl9fcGF0aCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdCAqX19zdGF0YnVmKQp7CiAgcmV0dXJu IF9fbHhzdGF0ICgzLCBfX3BhdGgsIF9fc3RhdGJ1Zik7Cn0KCgpleHRlcm4gX19pbmxpbmVfXyBp bnQgZnN0YXQgKGludCBfX2ZkLCBzdHJ1Y3Qgc3RhdCAqX19zdGF0YnVmKQp7CiAgcmV0dXJuIF9f ZnhzdGF0ICgzLCBfX2ZkLCBfX3N0YXRidWYpOwp9CgoKZXh0ZXJuIF9faW5saW5lX18gaW50IG1r bm9kIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgX19tb2RlX3QgX19tb2RlLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fZGV2X3QgX19kZXYpCnsKICByZXR1cm4gX194bWtub2QgKDEsIF9f cGF0aCwgX19tb2RlLCAmX19kZXYpOwp9CgoKCgoKZXh0ZXJuIF9faW5saW5lX18gaW50IHN0YXQ2 NCAoX19jb25zdCBjaGFyICpfX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBzdGF0NjQgKl9fc3RhdGJ1ZikKewogIHJldHVybiBfX3hzdGF0NjQgKDMsIF9fcGF0aCwg X19zdGF0YnVmKTsKfQoKCmV4dGVybiBfX2lubGluZV9fIGludCBsc3RhdDY0IChfX2NvbnN0IGNo YXIgKl9fcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0NjQg Kl9fc3RhdGJ1ZikKewogIHJldHVybiBfX2x4c3RhdDY0ICgzLCBfX3BhdGgsIF9fc3RhdGJ1Zik7 Cn0KCgpleHRlcm4gX19pbmxpbmVfXyBpbnQgZnN0YXQ2NCAoaW50IF9fZmQsIHN0cnVjdCBzdGF0 NjQgKl9fc3RhdGJ1ZikKewogIHJldHVybiBfX2Z4c3RhdDY0ICgzLCBfX2ZkLCBfX3N0YXRidWYp Owp9CgoKCgoKIyAzICIuLi9pbmNsdWRlL3N5cy9zdGF0LmgiIDIKCgpleHRlcm4gaW50IF9fc3Rh dCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIHN0cnVjdCBzdGF0ICpfX2J1Zik7CmV4dGVybiBpbnQg X19mc3RhdCAoaW50IF9fZmQsIHN0cnVjdCBzdGF0ICpfX2J1Zik7CmV4dGVybiBpbnQgX19sc3Rh dCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIHN0cnVjdCBzdGF0ICpfX2J1Zik7CmV4dGVybiBpbnQg X19jaG1vZCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fbW9kZV90IF9fbW9kZSk7CmV4dGVybiBp bnQgX19mY2htb2QgKGludCBfX2ZkLCBfX21vZGVfdCBfX21vZGUpOwpleHRlcm4gX19tb2RlX3Qg X191bWFzayAoX19tb2RlX3QgX19tYXNrKTsKZXh0ZXJuIGludCBfX21rZGlyIChfX2NvbnN0IGNo YXIgKl9fcGF0aCwgX19tb2RlX3QgX19tb2RlKTsKZXh0ZXJuIGludCBfX21rbm9kIChfX2NvbnN0 IGNoYXIgKl9fcGF0aCwKICAgICAgICAgICAgICAgICAgICBfX21vZGVfdCBfX21vZGUsIF9fZGV2 X3QgX19kZXYpOwpleHRlcm4gX19pbmxpbmVfXyBpbnQgX19zdGF0IChfX2NvbnN0IGNoYXIgKl9f cGF0aCwgc3RydWN0IHN0YXQgKl9fc3RhdGJ1ZikKewogIHJldHVybiBfX3hzdGF0ICgzLCBfX3Bh dGgsIF9fc3RhdGJ1Zik7Cn0KZXh0ZXJuIF9faW5saW5lX18gaW50IF9fbHN0YXQgKF9fY29uc3Qg Y2hhciAqX19wYXRoLCBzdHJ1Y3Qgc3RhdCAqX19zdGF0YnVmKQp7CiAgcmV0dXJuIF9fbHhzdGF0 ICgzLCBfX3BhdGgsIF9fc3RhdGJ1Zik7Cn0KZXh0ZXJuIF9faW5saW5lX18gaW50IF9fZnN0YXQg KGludCBfX2ZkLCBzdHJ1Y3Qgc3RhdCAqX19zdGF0YnVmKQp7CiAgcmV0dXJuIF9fZnhzdGF0ICgz LCBfX2ZkLCBfX3N0YXRidWYpOwp9CmV4dGVybiBfX2lubGluZV9fIGludCBfX21rbm9kIChfX2Nv bnN0IGNoYXIgKl9fcGF0aCwgX19tb2RlX3QgX19tb2RlLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19kZXZfdCBfX2RldikKewogIHJldHVybiBfX3hta25vZCAoMSwgX19wYXRoLCBf X21vZGUsICZfX2Rldik7Cn0KIyAzOCAiLi4vaW8vZmNudGwuaCIgMgojIDYwICIuLi9pby9mY250 bC5oIgpleHRlcm4gaW50IGZjbnRsIChpbnQgX19mZCwgaW50IF9fY21kLCAuLi4pIDsKCgoKCgpl eHRlcm4gaW50IG9wZW4gKF9fY29uc3QgY2hhciAqX19maWxlLCBpbnQgX19vZmxhZywgLi4uKSA7 CiMgNzYgIi4uL2lvL2ZjbnRsLmgiCmV4dGVybiBpbnQgb3BlbjY0IChfX2NvbnN0IGNoYXIgKl9f ZmlsZSwgaW50IF9fb2ZsYWcsIC4uLikgOwoKCgoKCgpleHRlcm4gaW50IGNyZWF0IChfX2NvbnN0 IGNoYXIgKl9fZmlsZSwgX19tb2RlX3QgX19tb2RlKSA7CiMgOTMgIi4uL2lvL2ZjbnRsLmgiCmV4 dGVybiBpbnQgY3JlYXQ2NCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fbW9kZV90IF9fbW9kZSkg OwojIDEzMCAiLi4vaW8vZmNudGwuaCIKZXh0ZXJuIGludCBwb3NpeF9mYWR2aXNlIChpbnQgX19m ZCwgX19vZmZfdCBfX29mZnNldCwgc2l6ZV90IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAg ICAgIGludCBfX2FkdmlzZSkgOwojIDE0MiAiLi4vaW8vZmNudGwuaCIKZXh0ZXJuIGludCBwb3Np eF9mYWR2aXNlNjQgKGludCBfX2ZkLCBfX29mZjY0X3QgX19vZmZzZXQsIHNpemVfdCBfX2xlbiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2FkdmlzZSkgOwoKCgoKCmV4dGVybiBp bnQgcG9zaXhfZmFsbG9jYXRlIChpbnQgX19mZCwgX19vZmZfdCBfX29mZnNldCwgc2l6ZV90IF9f bGVuKSA7CiMgMTYwICIuLi9pby9mY250bC5oIgpleHRlcm4gaW50IHBvc2l4X2ZhbGxvY2F0ZTY0 IChpbnQgX19mZCwgX19vZmY2NF90IF9fb2Zmc2V0LCBzaXplX3QgX19sZW4pCiAgICAgOwoKCgoK IyAzICIuLi9pbmNsdWRlL2ZjbnRsLmgiIDIKCgpleHRlcm4gaW50IF9fb3BlbjY0IChfX2NvbnN0 IGNoYXIgKl9fZmlsZSwgaW50IF9fb2ZsYWcsIC4uLik7CmV4dGVybiBpbnQgX19saWJjX29wZW42 NCAoY29uc3QgY2hhciAqZmlsZSwgaW50IG9mbGFnLCAuLi4pOwpleHRlcm4gaW50IF9fbGliY19v cGVuIChjb25zdCBjaGFyICpmaWxlLCBpbnQgb2ZsYWcsIC4uLik7CmV4dGVybiBpbnQgX19saWJj X2ZjbnRsIChpbnQgZmQsIGludCBjbWQsIC4uLik7CmV4dGVybiBpbnQgX19vcGVuIChfX2NvbnN0 IGNoYXIgKl9fZmlsZSwgaW50IF9fb2ZsYWcsIC4uLik7CmV4dGVybiBpbnQgX19mY250bCAoaW50 IF9fZmQsIGludCBfX2NtZCwgLi4uKSA7CiMgMjUgInB0aHJlYWQuYyIgMgojIDEgIi4uL2luY2x1 ZGUvc3lzL3dhaXQuaCIgMQoKIyAxICIuLi9wb3NpeC9zeXMvd2FpdC5oIiAxCiMgMjggIi4uL3Bv c2l4L3N5cy93YWl0LmgiCgoKIyAxICIuLi9pbmNsdWRlL3NpZ25hbC5oIiAxCgoKCgojIDEgIi4u L3NpZ25hbC9zaWduYWwuaCIgMQojIDMxICIuLi9zaWduYWwvc2lnbmFsLmgiCgoKIyAxICIuLi9z eXNkZXBzL3VuaXgvc3lzdi9saW51eC9iaXRzL3NpZ3NldC5oIiAxCiMgMTAzICIuLi9zeXNkZXBz L3VuaXgvc3lzdi9saW51eC9iaXRzL3NpZ3NldC5oIgpleHRlcm4gaW50IF9fc2lnaXNtZW1iZXIg KF9fY29uc3QgX19zaWdzZXRfdCAqLCBpbnQpOwpleHRlcm4gaW50IF9fc2lnYWRkc2V0IChfX3Np Z3NldF90ICosIGludCk7CmV4dGVybiBpbnQgX19zaWdkZWxzZXQgKF9fc2lnc2V0X3QgKiwgaW50 KTsKIyAxMTcgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2JpdHMvc2lnc2V0LmgiCmV4dGVy biBfX2lubGluZSBpbnQgX19zaWdpc21lbWJlciAoX19jb25zdCBfX3NpZ3NldF90ICpfX3NldCwg aW50IF9fc2lnKSB7IHVuc2lnbmVkIGxvbmcgaW50IF9fbWFzayA9ICgoKHVuc2lnbmVkIGxvbmcg aW50KSAxKSA8PCAoKChfX3NpZykgLSAxKSAlICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25nIGlu dCkpKSk7IHVuc2lnbmVkIGxvbmcgaW50IF9fd29yZCA9ICgoKF9fc2lnKSAtIDEpIC8gKDggKiBz aXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpOyByZXR1cm4gKF9fc2V0LT5fX3ZhbFtfX3dvcmRd ICYgX19tYXNrKSA/IDEgOiAwOyB9CmV4dGVybiBfX2lubGluZSBpbnQgX19zaWdhZGRzZXQgKCBf X3NpZ3NldF90ICpfX3NldCwgaW50IF9fc2lnKSB7IHVuc2lnbmVkIGxvbmcgaW50IF9fbWFzayA9 ICgoKHVuc2lnbmVkIGxvbmcgaW50KSAxKSA8PCAoKChfX3NpZykgLSAxKSAlICg4ICogc2l6ZW9m ICh1bnNpZ25lZCBsb25nIGludCkpKSk7IHVuc2lnbmVkIGxvbmcgaW50IF9fd29yZCA9ICgoKF9f c2lnKSAtIDEpIC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpOyByZXR1cm4gKChf X3NldC0+X192YWxbX193b3JkXSB8PSBfX21hc2spLCAwKTsgfQpleHRlcm4gX19pbmxpbmUgaW50 IF9fc2lnZGVsc2V0ICggX19zaWdzZXRfdCAqX19zZXQsIGludCBfX3NpZykgeyB1bnNpZ25lZCBs b25nIGludCBfX21hc2sgPSAoKCh1bnNpZ25lZCBsb25nIGludCkgMSkgPDwgKCgoX19zaWcpIC0g MSkgJSAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSkpOyB1bnNpZ25lZCBsb25nIGlu dCBfX3dvcmQgPSAoKChfX3NpZykgLSAxKSAvICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25nIGlu dCkpKTsgcmV0dXJuICgoX19zZXQtPl9fdmFsW19fd29yZF0gJj0gfl9fbWFzayksIDApOyB9CiMg MzQgIi4uL3NpZ25hbC9zaWduYWwuaCIgMgoKCgoKCgp0eXBlZGVmIF9fc2lnX2F0b21pY190IHNp Z19hdG9taWNfdDsKIyA1NiAiLi4vc2lnbmFsL3NpZ25hbC5oIgojIDEgIi4uL3N5c2RlcHMvdW5p eC9zeXN2L2xpbnV4L2JpdHMvc2lnbnVtLmgiIDEKIyA1NyAiLi4vc2lnbmFsL3NpZ25hbC5oIiAy CiMgNzEgIi4uL3NpZ25hbC9zaWduYWwuaCIKdHlwZWRlZiB2b2lkICgqX19zaWdoYW5kbGVyX3Qp IChpbnQpOwoKCgoKZXh0ZXJuIF9fc2lnaGFuZGxlcl90IF9fc3lzdl9zaWduYWwgKGludCBfX3Np ZywgX19zaWdoYW5kbGVyX3QgX19oYW5kbGVyKQogICAgIDsKCmV4dGVybiBfX3NpZ2hhbmRsZXJf dCBzeXN2X3NpZ25hbCAoaW50IF9fc2lnLCBfX3NpZ2hhbmRsZXJfdCBfX2hhbmRsZXIpCiAgICAg OwoKCgoKCgpleHRlcm4gX19zaWdoYW5kbGVyX3Qgc2lnbmFsIChpbnQgX19zaWcsIF9fc2lnaGFu ZGxlcl90IF9faGFuZGxlcikgOwojIDEwMyAiLi4vc2lnbmFsL3NpZ25hbC5oIgpleHRlcm4gX19z aWdoYW5kbGVyX3QgYnNkX3NpZ25hbCAoaW50IF9fc2lnLCBfX3NpZ2hhbmRsZXJfdCBfX2hhbmRs ZXIpIDsKCgoKCgoKZXh0ZXJuIGludCBraWxsIChfX3BpZF90IF9fcGlkLCBpbnQgX19zaWcpIDsK CgoKCgoKZXh0ZXJuIGludCBraWxscGcgKF9fcGlkX3QgX19wZ3JwLCBpbnQgX19zaWcpIDsKCgoK ZXh0ZXJuIGludCByYWlzZSAoaW50IF9fc2lnKSA7CgoKCmV4dGVybiBfX3NpZ2hhbmRsZXJfdCBz c2lnbmFsIChpbnQgX19zaWcsIF9fc2lnaGFuZGxlcl90IF9faGFuZGxlcikgOwpleHRlcm4gaW50 IGdzaWduYWwgKGludCBfX3NpZykgOwoKCgoKZXh0ZXJuIHZvaWQgcHNpZ25hbCAoaW50IF9fc2ln LCBfX2NvbnN0IGNoYXIgKl9fcykgOwojIDE0MCAiLi4vc2lnbmFsL3NpZ25hbC5oIgpleHRlcm4g aW50IF9fc2lncGF1c2UgKGludCBfX3NpZ19vcl9tYXNrLCBpbnQgX19pc19zaWcpIDsKCgoKCmV4 dGVybiBpbnQgc2lncGF1c2UgKGludCBfX21hc2spIDsKIyAxNjggIi4uL3NpZ25hbC9zaWduYWwu aCIKZXh0ZXJuIGludCBzaWdibG9jayAoaW50IF9fbWFzaykgOwoKCmV4dGVybiBpbnQgc2lnc2V0 bWFzayAoaW50IF9fbWFzaykgOwoKCmV4dGVybiBpbnQgc2lnZ2V0bWFzayAodm9pZCkgOwojIDE4 MyAiLi4vc2lnbmFsL3NpZ25hbC5oIgp0eXBlZGVmIF9fc2lnaGFuZGxlcl90IHNpZ2hhbmRsZXJf dDsKCgoKCnR5cGVkZWYgX19zaWdoYW5kbGVyX3Qgc2lnX3Q7CgoKCgoKCgojIDEgIi4uL2luY2x1 ZGUvdGltZS5oIiAxCgoKIyAxICIuLi90aW1lL3RpbWUuaCIgMQojIDQgIi4uL2luY2x1ZGUvdGlt ZS5oIiAyCiMgMTk3ICIuLi9zaWduYWwvc2lnbmFsLmgiIDIKCgojIDEgIi4uL3N5c2RlcHMvdW5p eC9zeXN2L2xpbnV4L2JpdHMvc2lnaW5mby5oIiAxCiMgMjUgIi4uL3N5c2RlcHMvdW5peC9zeXN2 L2xpbnV4L2JpdHMvc2lnaW5mby5oIgojIDEgIi4uL3N5c2RlcHMvd29yZHNpemUtMzIvYml0cy93 b3Jkc2l6ZS5oIiAxCiMgMjYgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2JpdHMvc2lnaW5m by5oIiAyCgoKCgoKCgp0eXBlZGVmIHVuaW9uIHNpZ3ZhbAogIHsKICAgIGludCBzaXZhbF9pbnQ7 CiAgICB2b2lkICpzaXZhbF9wdHI7CiAgfSBzaWd2YWxfdDsKIyA1MSAiLi4vc3lzZGVwcy91bml4 L3N5c3YvbGludXgvYml0cy9zaWdpbmZvLmgiCnR5cGVkZWYgc3RydWN0IHNpZ2luZm8KICB7CiAg ICBpbnQgc2lfc2lnbm87CiAgICBpbnQgc2lfZXJybm87CgogICAgaW50IHNpX2NvZGU7CgogICAg dW5pb24KICAgICAgewogICAgICAgIGludCBfcGFkWygoMTI4IC8gc2l6ZW9mIChpbnQpKSAtIDMp XTsKCgogICAgICAgIHN0cnVjdAogICAgICAgICAgewogICAgICAgICAgICBfX3BpZF90IHNpX3Bp ZDsKICAgICAgICAgICAgX191aWRfdCBzaV91aWQ7CiAgICAgICAgICB9IF9raWxsOwoKCiAgICAg ICAgc3RydWN0CiAgICAgICAgICB7CiAgICAgICAgICAgIHVuc2lnbmVkIGludCBfdGltZXIxOwog ICAgICAgICAgICB1bnNpZ25lZCBpbnQgX3RpbWVyMjsKICAgICAgICAgIH0gX3RpbWVyOwoKCiAg ICAgICAgc3RydWN0CiAgICAgICAgICB7CiAgICAgICAgICAgIF9fcGlkX3Qgc2lfcGlkOwogICAg ICAgICAgICBfX3VpZF90IHNpX3VpZDsKICAgICAgICAgICAgc2lndmFsX3Qgc2lfc2lndmFsOwog ICAgICAgICAgfSBfcnQ7CgoKICAgICAgICBzdHJ1Y3QKICAgICAgICAgIHsKICAgICAgICAgICAg X19waWRfdCBzaV9waWQ7CiAgICAgICAgICAgIF9fdWlkX3Qgc2lfdWlkOwogICAgICAgICAgICBp bnQgc2lfc3RhdHVzOwogICAgICAgICAgICBfX2Nsb2NrX3Qgc2lfdXRpbWU7CiAgICAgICAgICAg IF9fY2xvY2tfdCBzaV9zdGltZTsKICAgICAgICAgIH0gX3NpZ2NobGQ7CgoKICAgICAgICBzdHJ1 Y3QKICAgICAgICAgIHsKICAgICAgICAgICAgdm9pZCAqc2lfYWRkcjsKICAgICAgICAgIH0gX3Np Z2ZhdWx0OwoKCiAgICAgICAgc3RydWN0CiAgICAgICAgICB7CiAgICAgICAgICAgIGxvbmcgaW50 IHNpX2JhbmQ7CiAgICAgICAgICAgIGludCBzaV9mZDsKICAgICAgICAgIH0gX3NpZ3BvbGw7CiAg ICAgIH0gX3NpZmllbGRzOwogIH0gc2lnaW5mb190OwojIDEyOCAiLi4vc3lzZGVwcy91bml4L3N5 c3YvbGludXgvYml0cy9zaWdpbmZvLmgiCmVudW0KewogIFNJX0FTWU5DTkwgPSAtNiwKCiAgU0lf U0lHSU8sCgogIFNJX0FTWU5DSU8sCgogIFNJX01FU0dRLAoKICBTSV9USU1FUiwKCiAgU0lfUVVF VUUsCgogIFNJX1VTRVIsCgogIFNJX0tFUk5FTCA9IDB4ODAKCn07CgoKCmVudW0KewogIElMTF9J TExPUEMgPSAxLAoKICBJTExfSUxMT1BOLAoKICBJTExfSUxMQURSLAoKICBJTExfSUxMVFJQLAoK ICBJTExfUFJWT1BDLAoKICBJTExfUFJWUkVHLAoKICBJTExfQ09QUk9DLAoKICBJTExfQkFEU1RL Cgp9OwoKCmVudW0KewogIEZQRV9JTlRESVYgPSAxLAoKICBGUEVfSU5UT1ZGLAoKICBGUEVfRkxU RElWLAoKICBGUEVfRkxUT1ZGLAoKICBGUEVfRkxUVU5ELAoKICBGUEVfRkxUUkVTLAoKICBGUEVf RkxUSU5WLAoKICBGUEVfRkxUU1VCCgp9OwoKCmVudW0KewogIFNFR1ZfTUFQRVJSID0gMSwKCiAg U0VHVl9BQ0NFUlIKCn07CgoKZW51bQp7CiAgQlVTX0FEUkFMTiA9IDEsCgogIEJVU19BRFJFUlIs CgogIEJVU19PQkpFUlIKCn07CgoKZW51bQp7CiAgVFJBUF9CUktQVCA9IDEsCgogIFRSQVBfVFJB Q0UKCn07CgoKZW51bQp7CiAgQ0xEX0VYSVRFRCA9IDEsCgogIENMRF9LSUxMRUQsCgogIENMRF9E VU1QRUQsCgogIENMRF9UUkFQUEVELAoKICBDTERfU1RPUFBFRCwKCiAgQ0xEX0NPTlRJTlVFRAoK fTsKCgplbnVtCnsKICBQT0xMX0lOID0gMSwKCiAgUE9MTF9PVVQsCgogIFBPTExfTVNHLAoKICBQ T0xMX0VSUiwKCiAgUE9MTF9QUkksCgogIFBPTExfSFVQCgp9OwojIDI3MSAiLi4vc3lzZGVwcy91 bml4L3N5c3YvbGludXgvYml0cy9zaWdpbmZvLmgiCnN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zOwoK dHlwZWRlZiBzdHJ1Y3Qgc2lnZXZlbnQKICB7CiAgICBzaWd2YWxfdCBzaWdldl92YWx1ZTsKICAg IGludCBzaWdldl9zaWdubzsKICAgIGludCBzaWdldl9ub3RpZnk7CgogICAgdW5pb24KICAgICAg ewogICAgICAgIGludCBfcGFkWygoNjQgLyBzaXplb2YgKGludCkpIC0gMyldOwoKICAgICAgICBz dHJ1Y3QKICAgICAgICAgIHsKICAgICAgICAgICAgdm9pZCAoKl9mdW5jdGlvbikgKHNpZ3ZhbF90 KTsKICAgICAgICAgICAgc3RydWN0IF9fcHRocmVhZF9hdHRyX3MgKl9hdHRyaWJ1dGU7CiAgICAg ICAgICB9IF9zaWdldl90aHJlYWQ7CiAgICAgIH0gX3NpZ2V2X3VuOwogIH0gc2lnZXZlbnRfdDsK CgoKCgoKZW51bQp7CiAgU0lHRVZfU0lHTkFMID0gMCwKCiAgU0lHRVZfTk9ORSwKCiAgU0lHRVZf VEhSRUFECgp9OwojIDIwMCAiLi4vc2lnbmFsL3NpZ25hbC5oIiAyCgoKCmV4dGVybiBpbnQgc2ln ZW1wdHlzZXQgKHNpZ3NldF90ICpfX3NldCkgOwoKCmV4dGVybiBpbnQgc2lnZmlsbHNldCAoc2ln c2V0X3QgKl9fc2V0KSA7CgoKZXh0ZXJuIGludCBzaWdhZGRzZXQgKHNpZ3NldF90ICpfX3NldCwg aW50IF9fc2lnbm8pIDsKCgpleHRlcm4gaW50IHNpZ2RlbHNldCAoc2lnc2V0X3QgKl9fc2V0LCBp bnQgX19zaWdubykgOwoKCmV4dGVybiBpbnQgc2lnaXNtZW1iZXIgKF9fY29uc3Qgc2lnc2V0X3Qg Kl9fc2V0LCBpbnQgX19zaWdubykgOwoKCgpleHRlcm4gaW50IHNpZ2lzZW1wdHlzZXQgKF9fY29u c3Qgc2lnc2V0X3QgKl9fc2V0KSA7CgoKZXh0ZXJuIGludCBzaWdhbmRzZXQgKHNpZ3NldF90ICpf X3NldCwgX19jb25zdCBzaWdzZXRfdCAqX19sZWZ0LAogICAgICAgICAgICAgICAgICAgICAgX19j b25zdCBzaWdzZXRfdCAqX19yaWdodCkgOwoKCmV4dGVybiBpbnQgc2lnb3JzZXQgKHNpZ3NldF90 ICpfX3NldCwgX19jb25zdCBzaWdzZXRfdCAqX19sZWZ0LAogICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IHNpZ3NldF90ICpfX3JpZ2h0KSA7CgoKCgojIDEgIi4uL3N5c2RlcHMvdW5peC9zeXN2 L2xpbnV4L2JpdHMvc2lnYWN0aW9uLmgiIDEKIyAyNSAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGlu dXgvYml0cy9zaWdhY3Rpb24uaCIKc3RydWN0IHNpZ2FjdGlvbgogIHsKCgogICAgdW5pb24KICAg ICAgewoKICAgICAgICBfX3NpZ2hhbmRsZXJfdCBzYV9oYW5kbGVyOwoKICAgICAgICB2b2lkICgq c2Ffc2lnYWN0aW9uKSAoaW50LCBzaWdpbmZvX3QgKiwgdm9pZCAqKTsKICAgICAgfQogICAgX19z aWdhY3Rpb25faGFuZGxlcjsKCgoKCgoKCiAgICBfX3NpZ3NldF90IHNhX21hc2s7CgoKICAgIGlu dCBzYV9mbGFnczsKCgogICAgdm9pZCAoKnNhX3Jlc3RvcmVyKSAodm9pZCk7CiAgfTsKIyAyMzMg Ii4uL3NpZ25hbC9zaWduYWwuaCIgMgoKCmV4dGVybiBpbnQgc2lncHJvY21hc2sgKGludCBfX2hv dywgX19jb25zdCBzaWdzZXRfdCAqX19yZXN0cmljdCBfX3NldCwKICAgICAgICAgICAgICAgICAg ICAgICAgc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19vc2V0KSA7CgoKCmV4dGVybiBpbnQgc2lnc3Vz cGVuZCAoX19jb25zdCBzaWdzZXRfdCAqX19zZXQpIDsKCgpleHRlcm4gaW50IHNpZ2FjdGlvbiAo aW50IF9fc2lnLCBfX2NvbnN0IHN0cnVjdCBzaWdhY3Rpb24gKl9fcmVzdHJpY3QgX19hY3QsCiAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uICpfX3Jlc3RyaWN0IF9fb2FjdCkg OwoKCmV4dGVybiBpbnQgc2lncGVuZGluZyAoc2lnc2V0X3QgKl9fc2V0KSA7CgoKCmV4dGVybiBp bnQgc2lnd2FpdCAoX19jb25zdCBzaWdzZXRfdCAqX19yZXN0cmljdCBfX3NldCwgaW50ICpfX3Jl c3RyaWN0IF9fc2lnKQogICAgIDsKCgoKZXh0ZXJuIGludCBzaWd3YWl0aW5mbyAoX19jb25zdCBz aWdzZXRfdCAqX19yZXN0cmljdCBfX3NldCwKICAgICAgICAgICAgICAgICAgICAgICAgc2lnaW5m b190ICpfX3Jlc3RyaWN0IF9faW5mbykgOwoKCgpleHRlcm4gaW50IHNpZ3RpbWVkd2FpdCAoX19j b25zdCBzaWdzZXRfdCAqX19yZXN0cmljdCBfX3NldCwKICAgICAgICAgICAgICAgICAgICAgICAg IHNpZ2luZm9fdCAqX19yZXN0cmljdCBfX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdCBfX3RpbWVvdXQpCiAgICAgOwoKCgpl eHRlcm4gaW50IHNpZ3F1ZXVlIChfX3BpZF90IF9fcGlkLCBpbnQgX19zaWcsIF9fY29uc3QgdW5p b24gc2lndmFsIF9fdmFsKQogICAgIDsKIyAyNzggIi4uL3NpZ25hbC9zaWduYWwuaCIKZXh0ZXJu IF9fY29uc3QgY2hhciAqX19jb25zdCBfc3lzX3NpZ2xpc3RbNjRdOwpleHRlcm4gX19jb25zdCBj aGFyICpfX2NvbnN0IHN5c19zaWdsaXN0WzY0XTsKCgpzdHJ1Y3Qgc2lndmVjCiAgewogICAgX19z aWdoYW5kbGVyX3Qgc3ZfaGFuZGxlcjsKICAgIGludCBzdl9tYXNrOwoKICAgIGludCBzdl9mbGFn czsKCiAgfTsKIyAzMDIgIi4uL3NpZ25hbC9zaWduYWwuaCIKZXh0ZXJuIGludCBzaWd2ZWMgKGlu dCBfX3NpZywgX19jb25zdCBzdHJ1Y3Qgc2lndmVjICpfX3ZlYywKICAgICAgICAgICAgICAgICAg IHN0cnVjdCBzaWd2ZWMgKl9fb3ZlYykgOwoKCgojIDEgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xp bnV4L2JpdHMvc2lnY29udGV4dC5oIiAxCiMgMjggIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4 L2JpdHMvc2lnY29udGV4dC5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LXRoaXMvaW5jbHVkZS9hc20v c2lnY29udGV4dC5oIiAxIDMKIyAxOCAiL3Vzci9zcmMvbGludXgtdGhpcy9pbmNsdWRlL2FzbS9z aWdjb250ZXh0LmgiIDMKc3RydWN0IF9mcHJlZyB7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc2ln bmlmaWNhbmRbNF07CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZXhwb25lbnQ7Cn07CgpzdHJ1Y3Qg X2ZweHJlZyB7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc2lnbmlmaWNhbmRbNF07CiAgICAgICAg dW5zaWduZWQgc2hvcnQgZXhwb25lbnQ7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgcGFkZGluZ1sz XTsKfTsKCnN0cnVjdCBfeG1tcmVnIHsKICAgICAgICB1bnNpZ25lZCBsb25nIGVsZW1lbnRbNF07 Cn07CgpzdHJ1Y3QgX2Zwc3RhdGUgewoKICAgICAgICB1bnNpZ25lZCBsb25nIGN3OwogICAgICAg IHVuc2lnbmVkIGxvbmcgc3c7CiAgICAgICAgdW5zaWduZWQgbG9uZyB0YWc7CiAgICAgICAgdW5z aWduZWQgbG9uZyBpcG9mZjsKICAgICAgICB1bnNpZ25lZCBsb25nIGNzc2VsOwogICAgICAgIHVu c2lnbmVkIGxvbmcgZGF0YW9mZjsKICAgICAgICB1bnNpZ25lZCBsb25nIGRhdGFzZWw7CiAgICAg ICAgc3RydWN0IF9mcHJlZyBfc3RbOF07CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3RhdHVzOwog ICAgICAgIHVuc2lnbmVkIHNob3J0IG1hZ2ljOwoKCiAgICAgICAgdW5zaWduZWQgbG9uZyBfZnhz cl9lbnZbNl07CiAgICAgICAgdW5zaWduZWQgbG9uZyBteGNzcjsKICAgICAgICB1bnNpZ25lZCBs b25nIHJlc2VydmVkOwogICAgICAgIHN0cnVjdCBfZnB4cmVnIF9meHNyX3N0WzhdOwogICAgICAg IHN0cnVjdCBfeG1tcmVnIF94bW1bOF07CiAgICAgICAgdW5zaWduZWQgbG9uZyBwYWRkaW5nWzU2 XTsKfTsKCgoKc3RydWN0IHNpZ2NvbnRleHQgewogICAgICAgIHVuc2lnbmVkIHNob3J0IGdzLCBf X2dzaDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBmcywgX19mc2g7CiAgICAgICAgdW5zaWduZWQg c2hvcnQgZXMsIF9fZXNoOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGRzLCBfX2RzaDsKICAgICAg ICB1bnNpZ25lZCBsb25nIGVkaTsKICAgICAgICB1bnNpZ25lZCBsb25nIGVzaTsKICAgICAgICB1 bnNpZ25lZCBsb25nIGVicDsKICAgICAgICB1bnNpZ25lZCBsb25nIGVzcDsKICAgICAgICB1bnNp Z25lZCBsb25nIGVieDsKICAgICAgICB1bnNpZ25lZCBsb25nIGVkeDsKICAgICAgICB1bnNpZ25l ZCBsb25nIGVjeDsKICAgICAgICB1bnNpZ25lZCBsb25nIGVheDsKICAgICAgICB1bnNpZ25lZCBs b25nIHRyYXBubzsKICAgICAgICB1bnNpZ25lZCBsb25nIGVycjsKICAgICAgICB1bnNpZ25lZCBs b25nIGVpcDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBjcywgX19jc2g7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyBlZmxhZ3M7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlc3BfYXRfc2lnbmFsOwogICAg ICAgIHVuc2lnbmVkIHNob3J0IHNzLCBfX3NzaDsKICAgICAgICBzdHJ1Y3QgX2Zwc3RhdGUgKiBm cHN0YXRlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgb2xkbWFzazsKICAgICAgICB1bnNpZ25lZCBs b25nIGNyMjsKfTsKIyAyOSAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgvYml0cy9zaWdjb250 ZXh0LmgiIDIKIyAzMDggIi4uL3NpZ25hbC9zaWduYWwuaCIgMgoKCmV4dGVybiBpbnQgc2lncmV0 dXJuIChzdHJ1Y3Qgc2lnY29udGV4dCAqX19zY3ApIDsKIyAzMjAgIi4uL3NpZ25hbC9zaWduYWwu aCIKZXh0ZXJuIGludCBzaWdpbnRlcnJ1cHQgKGludCBfX3NpZywgaW50IF9faW50ZXJydXB0KSA7 CgojIDEgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2JpdHMvc2lnc3RhY2suaCIgMQojIDI2 ICIuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9iaXRzL3NpZ3N0YWNrLmgiCnN0cnVjdCBzaWdz dGFjawogIHsKICAgIHZvaWQgKnNzX3NwOwogICAgaW50IHNzX29uc3RhY2s7CiAgfTsKCgoKZW51 bQp7CiAgU1NfT05TVEFDSyA9IDEsCgogIFNTX0RJU0FCTEUKCn07CiMgNTAgIi4uL3N5c2RlcHMv dW5peC9zeXN2L2xpbnV4L2JpdHMvc2lnc3RhY2suaCIKdHlwZWRlZiBzdHJ1Y3Qgc2lnYWx0c3Rh Y2sKICB7CiAgICB2b2lkICpzc19zcDsKICAgIGludCBzc19mbGFnczsKICAgIHNpemVfdCBzc19z aXplOwogIH0gc3RhY2tfdDsKIyAzMjMgIi4uL3NpZ25hbC9zaWduYWwuaCIgMgoKIyAxICIuLi9p bmNsdWRlL3Vjb250ZXh0LmgiIDEKIyAxICIuLi9zdGRsaWIvdWNvbnRleHQuaCIgMQojIDI3ICIu Li9zdGRsaWIvdWNvbnRleHQuaCIKIyAxICIuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2 L3N5cy91Y29udGV4dC5oIiAxCiMgMjMgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYv c3lzL3Vjb250ZXh0LmgiCiMgMSAiLi4vaW5jbHVkZS9zaWduYWwuaCIgMQojIDI0ICIuLi9zeXNk ZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L3N5cy91Y29udGV4dC5oIiAyCgoKCiMgMSAiLi4vc3lz ZGVwcy91bml4L3N5c3YvbGludXgvYml0cy9zaWdjb250ZXh0LmgiIDEKIyAyOCAiLi4vc3lzZGVw cy91bml4L3N5c3YvbGludXgvaTM4Ni9zeXMvdWNvbnRleHQuaCIgMgoKCgp0eXBlZGVmIGludCBn cmVnX3Q7CgoKCgoKdHlwZWRlZiBncmVnX3QgZ3JlZ3NldF90WzE5XTsKCgoKZW51bQp7CiAgUkVH X0dTID0gMCwKCiAgUkVHX0ZTLAoKICBSRUdfRVMsCgogIFJFR19EUywKCiAgUkVHX0VESSwKCiAg UkVHX0VTSSwKCiAgUkVHX0VCUCwKCiAgUkVHX0VTUCwKCiAgUkVHX0VCWCwKCiAgUkVHX0VEWCwK CiAgUkVHX0VDWCwKCiAgUkVHX0VBWCwKCiAgUkVHX1RSQVBOTywKCiAgUkVHX0VSUiwKCiAgUkVH X0VJUCwKCiAgUkVHX0NTLAoKICBSRUdfRUZMLAoKICBSRUdfVUVTUCwKCiAgUkVHX1NTCgp9OwoK CgpzdHJ1Y3QgX2xpYmNfZnByZWcKewogIHVuc2lnbmVkIHNob3J0IGludCBzaWduaWZpY2FuZFs0 XTsKICB1bnNpZ25lZCBzaG9ydCBpbnQgZXhwb25lbnQ7Cn07CgpzdHJ1Y3QgX2xpYmNfZnBzdGF0 ZQp7CiAgdW5zaWduZWQgbG9uZyBpbnQgY3c7CiAgdW5zaWduZWQgbG9uZyBpbnQgc3c7CiAgdW5z aWduZWQgbG9uZyBpbnQgdGFnOwogIHVuc2lnbmVkIGxvbmcgaW50IGlwb2ZmOwogIHVuc2lnbmVk IGxvbmcgaW50IGNzc2VsOwogIHVuc2lnbmVkIGxvbmcgaW50IGRhdGFvZmY7CiAgdW5zaWduZWQg bG9uZyBpbnQgZGF0YXNlbDsKICBzdHJ1Y3QgX2xpYmNfZnByZWcgX3N0WzhdOwogIHVuc2lnbmVk IGxvbmcgaW50IHN0YXR1czsKfTsKCgp0eXBlZGVmIHN0cnVjdCBfbGliY19mcHN0YXRlICpmcHJl Z3NldF90OwoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgZ3JlZ3NldF90IGdyZWdzOwoKCiAgICBm cHJlZ3NldF90IGZwcmVnczsKICAgIHVuc2lnbmVkIGxvbmcgaW50IG9sZG1hc2s7CiAgICB1bnNp Z25lZCBsb25nIGludCBjcjI7CiAgfSBtY29udGV4dF90OwoKCnR5cGVkZWYgc3RydWN0IHVjb250 ZXh0CiAgewogICAgdW5zaWduZWQgbG9uZyBpbnQgdWNfZmxhZ3M7CiAgICBzdHJ1Y3QgdWNvbnRl eHQgKnVjX2xpbms7CiAgICBzdGFja190IHVjX3N0YWNrOwogICAgbWNvbnRleHRfdCB1Y19tY29u dGV4dDsKICAgIF9fc2lnc2V0X3QgdWNfc2lnbWFzazsKICAgIHN0cnVjdCBfbGliY19mcHN0YXRl IF9fZnByZWdzX21lbTsKICB9IHVjb250ZXh0X3Q7CiMgMjggIi4uL3N0ZGxpYi91Y29udGV4dC5o IiAyCgoKCgpleHRlcm4gaW50IGdldGNvbnRleHQgKHVjb250ZXh0X3QgKl9fdWNwKSA7CgoKZXh0 ZXJuIGludCBzZXRjb250ZXh0IChfX2NvbnN0IHVjb250ZXh0X3QgKl9fdWNwKSA7CgoKCmV4dGVy biBpbnQgc3dhcGNvbnRleHQgKHVjb250ZXh0X3QgKl9fcmVzdHJpY3QgX19vdWNwLAogICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IHVjb250ZXh0X3QgKl9fcmVzdHJpY3QgX191Y3ApIDsK CgoKCgoKCmV4dGVybiB2b2lkIG1ha2Vjb250ZXh0ICh1Y29udGV4dF90ICpfX3VjcCwgdm9pZCAo Kl9fZnVuYykgKHZvaWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYXJnYywgLi4u KSA7CgoKIyAyICIuLi9pbmNsdWRlL3Vjb250ZXh0LmgiIDIKIyAzMjUgIi4uL3NpZ25hbC9zaWdu YWwuaCIgMgoKCgoKCmV4dGVybiBpbnQgc2lnc3RhY2sgKHN0cnVjdCBzaWdzdGFjayAqX19zcywg c3RydWN0IHNpZ3N0YWNrICpfX29zcykgOwoKCgpleHRlcm4gaW50IHNpZ2FsdHN0YWNrIChfX2Nv bnN0IHN0cnVjdCBzaWdhbHRzdGFjayAqX19yZXN0cmljdCBfX3NzLAogICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3Qgc2lnYWx0c3RhY2sgKl9fcmVzdHJpY3QgX19vc3MpIDsKCgoKCgoKCmV4 dGVybiBpbnQgc2lnaG9sZCAoaW50IF9fc2lnKSA7CgoKZXh0ZXJuIGludCBzaWdyZWxzZSAoaW50 IF9fc2lnKSA7CgoKZXh0ZXJuIGludCBzaWdpZ25vcmUgKGludCBfX3NpZykgOwoKCmV4dGVybiBf X3NpZ2hhbmRsZXJfdCBzaWdzZXQgKGludCBfX3NpZywgX19zaWdoYW5kbGVyX3QgX19kaXNwKSA7 CgoKCgoKIyAxICIuLi9saW51eHRocmVhZHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYml0cy9z aWd0aHJlYWQuaCIgMQojIDMxICIuLi9saW51eHRocmVhZHMvc3lzZGVwcy91bml4L3N5c3YvbGlu dXgvYml0cy9zaWd0aHJlYWQuaCIKZXh0ZXJuIGludCBwdGhyZWFkX3NpZ21hc2sgKGludCBfX2hv dywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgX19zaWdzZXRfdCAqX19yZXN0 cmljdCBfX25ld21hc2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NpZ3NldF90ICpf X3Jlc3RyaWN0IF9fb2xkbWFzayk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2tpbGwgKHB0aHJlYWRf dCBfX3RocmVhZCwgaW50IF9fc2lnbm8pIDsKIyAzNTkgIi4uL3NpZ25hbC9zaWduYWwuaCIgMgoK CgoKCgpleHRlcm4gaW50IF9fbGliY19jdXJyZW50X3NpZ3J0bWluICh2b2lkKSA7CgpleHRlcm4g aW50IF9fbGliY19jdXJyZW50X3NpZ3J0bWF4ICh2b2lkKSA7CgoKCgojIDYgIi4uL2luY2x1ZGUv c2lnbmFsLmgiIDIKCgpleHRlcm4gX19zaWdoYW5kbGVyX3QgX19ic2Rfc2lnbmFsIChpbnQgX19z aWcsIF9fc2lnaGFuZGxlcl90IF9faGFuZGxlcik7CmV4dGVybiBpbnQgX19raWxsIChfX3BpZF90 IF9fcGlkLCBpbnQgX19zaWcpOwpleHRlcm4gaW50IF9fc2lnYWN0aW9uIChpbnQgX19zaWcsIF9f Y29uc3Qgc3RydWN0IHNpZ2FjdGlvbiAqX19yZXN0cmljdCBfX2FjdCwKICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IHNpZ2FjdGlvbiAqX19yZXN0cmljdCBfX29hY3QpOwpleHRlcm4gaW50 IF9fc2lnYmxvY2sgKGludCBfX21hc2spOwpleHRlcm4gaW50IF9fc2lnc2V0bWFzayAoaW50IF9f bWFzayk7CmV4dGVybiBpbnQgX19zaWdwcm9jbWFzayAoaW50IF9faG93LAogICAgICAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3Qgc2lnc2V0X3QgKl9fc2V0LCBzaWdzZXRfdCAqX19vc2V0KTsK ZXh0ZXJuIGludCBfX3NpZ3N1c3BlbmQgKF9fY29uc3Qgc2lnc2V0X3QgKl9fc2V0KTsKZXh0ZXJu IGludCBfX3NpZ3dhaXQgKF9fY29uc3Qgc2lnc2V0X3QgKl9fc2V0LCBpbnQgKl9fc2lnKTsKZXh0 ZXJuIGludCBfX3NpZ3dhaXRpbmZvIChfX2NvbnN0IHNpZ3NldF90ICpfX3NldCwgc2lnaW5mb190 ICpfX2luZm8pOwpleHRlcm4gaW50IF9fc2lndGltZWR3YWl0IChfX2NvbnN0IHNpZ3NldF90ICpf X3NldCwgc2lnaW5mb190ICpfX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3Qgc3RydWN0IHRpbWVzcGVjICpfX3RpbWVvdXQpOwpleHRlcm4gaW50IF9fc2lncXVldWUgKF9f cGlkX3QgX19waWQsIGludCBfX3NpZywKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVu aW9uIHNpZ3ZhbCBfX3ZhbCk7CmV4dGVybiBpbnQgX19zaWd2ZWMgKGludCBfX3NpZywgX19jb25z dCBzdHJ1Y3Qgc2lndmVjICpfX3ZlYywKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNpZ3Zl YyAqX19vdmVjKTsKZXh0ZXJuIGludCBfX3NpZ3JldHVybiAoc3RydWN0IHNpZ2NvbnRleHQgKl9f c2NwKTsKZXh0ZXJuIGludCBfX3NpZ2FsdHN0YWNrIChfX2NvbnN0IHN0cnVjdCBzaWdhbHRzdGFj ayAqX19zcywKICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2lnYWx0c3RhY2sgKl9f b3NzKTsKZXh0ZXJuIGludCBfX2xpYmNfc2lnYWN0aW9uIChpbnQgc2lnLCBjb25zdCBzdHJ1Y3Qg c2lnYWN0aW9uICphY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNpZ2Fj dGlvbiAqb2FjdCk7CgpleHRlcm4gaW50IF9fc2lncGF1c2UgKGludCBzaWdfb3JfbWFzaywgaW50 IGlzX3NpZyk7CmV4dGVybiBpbnQgX19kZWZhdWx0X3NpZ3BhdXNlIChpbnQgbWFzayk7CmV4dGVy biBpbnQgX194cGdfc2lncGF1c2UgKGludCBzaWcpOwoKCgoKZXh0ZXJuIGludCBfX2xpYmNfYWxs b2NhdGVfcnRzaWcgKGludCBfX2hpZ2gpOwojIDMxICIuLi9wb3NpeC9zeXMvd2FpdC5oIiAyCiMg MSAiLi4vaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMQoKIyAxICIuLi9yZXNvdXJjZS9zeXMvcmVz b3VyY2UuaCIgMQojIDI1ICIuLi9yZXNvdXJjZS9zeXMvcmVzb3VyY2UuaCIKIyAxICIuLi9zeXNk ZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L2JpdHMvcmVzb3VyY2UuaCIgMQojIDMyICIuLi9zeXNk ZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L2JpdHMvcmVzb3VyY2UuaCIKZW51bSBfX3JsaW1pdF9y ZXNvdXJjZQp7CgogIFJMSU1JVF9DUFUgPSAwLAoKCgogIFJMSU1JVF9GU0laRSA9IDEsCgoKCiAg UkxJTUlUX0RBVEEgPSAyLAoKCgogIFJMSU1JVF9TVEFDSyA9IDMsCgoKCiAgUkxJTUlUX0NPUkUg PSA0LAoKCgoKCgogIFJMSU1JVF9SU1MgPSA1LAoKCgogIFJMSU1JVF9OT0ZJTEUgPSA3LAogIFJM SU1JVF9PRklMRSA9IFJMSU1JVF9OT0ZJTEUsCgoKCgogIFJMSU1JVF9BUyA9IDksCgoKCiAgUkxJ TUlUX05QUk9DID0gNiwKCgoKICBSTElNSVRfTUVNTE9DSyA9IDgsCgoKCiAgUkxJTUlUX0xPQ0tT ID0gMTAsCgoKICBSTElNSVRfTkxJTUlUUyA9IDExLAogIFJMSU1fTkxJTUlUUyA9IFJMSU1JVF9O TElNSVRTCgoKfTsKIyAxMDcgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvYml0cy9y ZXNvdXJjZS5oIgp0eXBlZGVmIF9fcmxpbV90IHJsaW1fdDsKCgoKCnR5cGVkZWYgX19ybGltNjRf dCBybGltNjRfdDsKCgpzdHJ1Y3QgcmxpbWl0CiAgewoKICAgIHJsaW1fdCBybGltX2N1cjsKCiAg ICBybGltX3QgcmxpbV9tYXg7CiAgfTsKCgpzdHJ1Y3QgcmxpbWl0NjQKICB7CgogICAgcmxpbTY0 X3QgcmxpbV9jdXI7CgogICAgcmxpbTY0X3QgcmxpbV9tYXg7CiB9OwoKCgplbnVtIF9fcnVzYWdl X3dobwp7CgogIFJVU0FHRV9TRUxGID0gMCwKCgoKICBSVVNBR0VfQ0hJTERSRU4gPSAtMSwKCgoK ICBSVVNBR0VfQk9USCA9IC0yCgp9OwoKCiMgMSAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgv aTM4Ni9iaXRzL3RpbWUuaCIgMQojIDE1MSAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4 Ni9iaXRzL3Jlc291cmNlLmgiIDIKCgpzdHJ1Y3QgcnVzYWdlCiAgewoKICAgIHN0cnVjdCB0aW1l dmFsIHJ1X3V0aW1lOwoKICAgIHN0cnVjdCB0aW1ldmFsIHJ1X3N0aW1lOwoKICAgIGxvbmcgaW50 IHJ1X21heHJzczsKCgogICAgbG9uZyBpbnQgcnVfaXhyc3M7CgogICAgbG9uZyBpbnQgcnVfaWRy c3M7CgogICAgbG9uZyBpbnQgcnVfaXNyc3M7CgoKICAgIGxvbmcgaW50IHJ1X21pbmZsdDsKCiAg ICBsb25nIGludCBydV9tYWpmbHQ7CgogICAgbG9uZyBpbnQgcnVfbnN3YXA7CgoKICAgIGxvbmcg aW50IHJ1X2luYmxvY2s7CgogICAgbG9uZyBpbnQgcnVfb3VibG9jazsKCiAgICBsb25nIGludCBy dV9tc2dzbmQ7CgogICAgbG9uZyBpbnQgcnVfbXNncmN2OwoKICAgIGxvbmcgaW50IHJ1X25zaWdu YWxzOwoKCgogICAgbG9uZyBpbnQgcnVfbnZjc3c7CgoKICAgIGxvbmcgaW50IHJ1X25pdmNzdzsK ICB9OwoKCgoKCgoKZW51bSBfX3ByaW9yaXR5X3doaWNoCnsKICBQUklPX1BST0NFU1MgPSAwLAoK ICBQUklPX1BHUlAgPSAxLAoKICBQUklPX1VTRVIgPSAyCgp9OwojIDI2ICIuLi9yZXNvdXJjZS9z eXMvcmVzb3VyY2UuaCIgMgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBlbnVtIF9fcmxpbWl0X3Jlc291 cmNlIF9fcmxpbWl0X3Jlc291cmNlX3Q7CnR5cGVkZWYgZW51bSBfX3J1c2FnZV93aG8gX19ydXNh Z2Vfd2hvX3Q7CnR5cGVkZWYgZW51bSBfX3ByaW9yaXR5X3doaWNoIF9fcHJpb3JpdHlfd2hpY2hf dDsKIyA1MSAiLi4vcmVzb3VyY2Uvc3lzL3Jlc291cmNlLmgiCmV4dGVybiBpbnQgZ2V0cmxpbWl0 IChfX3JsaW1pdF9yZXNvdXJjZV90IF9fcmVzb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgcmxpbWl0ICpfX3JsaW1pdHMpIDsKIyA2MyAiLi4vcmVzb3VyY2Uvc3lzL3Jlc291cmNl LmgiCmV4dGVybiBpbnQgZ2V0cmxpbWl0NjQgKF9fcmxpbWl0X3Jlc291cmNlX3QgX19yZXNvdXJj ZSwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJsaW1pdDY0ICpfX3JsaW1pdHMpIDsK CgoKCgoKZXh0ZXJuIGludCBzZXRybGltaXQgKF9fcmxpbWl0X3Jlc291cmNlX3QgX19yZXNvdXJj ZSwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHJsaW1pdCAqX19ybGltaXRz KSA7CiMgODMgIi4uL3Jlc291cmNlL3N5cy9yZXNvdXJjZS5oIgpleHRlcm4gaW50IHNldHJsaW1p dDY0IChfX3JsaW1pdF9yZXNvdXJjZV90IF9fcmVzb3VyY2UsCiAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3Qgc3RydWN0IHJsaW1pdDY0ICpfX3JsaW1pdHMpIDsKCgoKCmV4dGVybiBpbnQg Z2V0cnVzYWdlIChfX3J1c2FnZV93aG9fdCBfX3dobywgc3RydWN0IHJ1c2FnZSAqX191c2FnZSkg OwoKCgoKCmV4dGVybiBpbnQgZ2V0cHJpb3JpdHkgKF9fcHJpb3JpdHlfd2hpY2hfdCBfX3doaWNo LCBpZF90IF9fd2hvKSA7CgoKCmV4dGVybiBpbnQgc2V0cHJpb3JpdHkgKF9fcHJpb3JpdHlfd2hp Y2hfdCBfX3doaWNoLCBpZF90IF9fd2hvLCBpbnQgX19wcmlvKQogICAgIDsKCgojIDMgIi4uL2lu Y2x1ZGUvc3lzL3Jlc291cmNlLmgiIDIKCgpleHRlcm4gaW50IF9fZ2V0cmxpbWl0IChlbnVtIF9f cmxpbWl0X3Jlc291cmNlIF9fcmVzb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBybGltaXQgKl9fcmxpbWl0cyk7CmV4dGVybiBpbnQgX19nZXRydXNhZ2UgKGVudW0gX19ydXNh Z2Vfd2hvIF9fd2hvLCBzdHJ1Y3QgcnVzYWdlICpfX3VzYWdlKTsKCmV4dGVybiBpbnQgX19zZXRy bGltaXQgKGVudW0gX19ybGltaXRfcmVzb3VyY2UgX19yZXNvdXJjZSwKICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3Qgc3RydWN0IHJsaW1pdCAqX19ybGltaXRzKTsKIyAzMiAiLi4vcG9zaXgv c3lzL3dhaXQuaCIgMgojIDk4ICIuLi9wb3NpeC9zeXMvd2FpdC5oIgp0eXBlZGVmIGVudW0Kewog IFBfQUxMLAogIFBfUElELAogIFBfUEdJRAp9IGlkdHlwZV90OwoKCgoKCmV4dGVybiBfX3BpZF90 IHdhaXQgKF9fV0FJVF9TVEFUVVMgX19zdGF0X2xvYykgOwojIDEyOSAiLi4vcG9zaXgvc3lzL3dh aXQuaCIKZXh0ZXJuIF9fcGlkX3Qgd2FpdHBpZCAoX19waWRfdCBfX3BpZCwgaW50ICpfX3N0YXRf bG9jLCBpbnQgX19vcHRpb25zKSA7CgoKCiMgMSAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgv Yml0cy9zaWdpbmZvLmgiIDEKIyAyNSAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgvYml0cy9z aWdpbmZvLmgiCiMgMSAiLi4vc3lzZGVwcy93b3Jkc2l6ZS0zMi9iaXRzL3dvcmRzaXplLmgiIDEK IyAyNiAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgvYml0cy9zaWdpbmZvLmgiIDIKIyAxMzQg Ii4uL3Bvc2l4L3N5cy93YWl0LmgiIDIKIyAxNDIgIi4uL3Bvc2l4L3N5cy93YWl0LmgiCmV4dGVy biBpbnQgd2FpdGlkIChpZHR5cGVfdCBfX2lkdHlwZSwgX19pZF90IF9faWQsIHNpZ2luZm9fdCAq X19pbmZvcCwKICAgICAgICAgICAgICAgICAgIGludCBfX29wdGlvbnMpIDsKCgoKCgpzdHJ1Y3Qg cnVzYWdlOwoKCgoKCgpleHRlcm4gX19waWRfdCB3YWl0MyAoX19XQUlUX1NUQVRVUyBfX3N0YXRf bG9jLCBpbnQgX19vcHRpb25zLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJ1c2FnZSAq IF9fdXNhZ2UpIDsKCgoKCgpzdHJ1Y3QgcnVzYWdlOwoKCmV4dGVybiBfX3BpZF90IHdhaXQ0IChf X3BpZF90IF9fcGlkLCBfX1dBSVRfU1RBVFVTIF9fc3RhdF9sb2MsIGludCBfX29wdGlvbnMsCiAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcnVzYWdlICpfX3VzYWdlKSA7CgoKCgojIDMgIi4u L2luY2x1ZGUvc3lzL3dhaXQuaCIgMgoKCmV4dGVybiBfX3BpZF90IF9fd2FpdHBpZCAoX19waWRf dCBfX3BpZCwgaW50ICpfX3N0YXRfbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf X29wdGlvbnMpOwpleHRlcm4gX19waWRfdCBfX2xpYmNfd2FpdHBpZCAocGlkX3QgX19waWQsIGlu dCAqX19zdGF0X2xvYywgaW50IF9fb3B0aW9ucyk7CmV4dGVybiBfX3BpZF90IF9fbGliY193YWl0 IChpbnQgKl9fc3RhdF9sb2MpOwpleHRlcm4gX19waWRfdCBfX3dhaXQgKF9fV0FJVF9TVEFUVVMg X19zdGF0X2xvYyk7CmV4dGVybiBfX3BpZF90IF9fd2FpdDMgKF9fV0FJVF9TVEFUVVMgX19zdGF0 X2xvYywKICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fb3B0aW9ucywgc3RydWN0IHJ1c2Fn ZSAqIF9fdXNhZ2UpOwpleHRlcm4gX19waWRfdCBfX3dhaXQ0IChfX3BpZF90IF9fcGlkLCBfX1dB SVRfU1RBVFVTIF9fc3RhdF9sb2MsCiAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX29wdGlv bnMsIHN0cnVjdCBydXNhZ2UgKl9fdXNhZ2UpOwojIDI2ICJwdGhyZWFkLmMiIDIKCiMgMSAiLi4v aW5jbHVkZS9zeXMvc3lzY3RsLmgiIDEKCiMgMSAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgv c3lzL3N5c2N0bC5oIiAxCiMgMjQgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3N5cy9zeXNj dGwuaCIKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi9pbmNs dWRlL3N0ZGRlZi5oIiAxIDMKIyAyOCAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgvc3lzL3N5 c2N0bC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtdGhpcy9pbmNsdWRlL2xpbnV4L3N5c2N0bC5o IiAxIDMKIyAyNyAiL3Vzci9zcmMvbGludXgtdGhpcy9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oIiAz CiMgMSAiL3Vzci9zcmMvbGludXgtdGhpcy9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIiAxIDMKIyAx NjcgIi91c3Ivc3JjL2xpbnV4LXRoaXMvaW5jbHVkZS9saW51eC9rZXJuZWwuaCIgMwpzdHJ1Y3Qg c3lzaW5mbyB7CiAgICAgICAgbG9uZyB1cHRpbWU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBsb2Fk c1szXTsKICAgICAgICB1bnNpZ25lZCBsb25nIHRvdGFscmFtOwogICAgICAgIHVuc2lnbmVkIGxv bmcgZnJlZXJhbTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNoYXJlZHJhbTsKICAgICAgICB1bnNp Z25lZCBsb25nIGJ1ZmZlcnJhbTsKICAgICAgICB1bnNpZ25lZCBsb25nIHRvdGFsc3dhcDsKICAg ICAgICB1bnNpZ25lZCBsb25nIGZyZWVzd2FwOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHByb2Nz OwogICAgICAgIHVuc2lnbmVkIHNob3J0IHBhZDsKICAgICAgICB1bnNpZ25lZCBsb25nIHRvdGFs aGlnaDsKICAgICAgICB1bnNpZ25lZCBsb25nIGZyZWVoaWdoOwogICAgICAgIHVuc2lnbmVkIGlu dCBtZW1fdW5pdDsKICAgICAgICBjaGFyIF9mWzIwLTIqc2l6ZW9mKGxvbmcpLXNpemVvZihpbnQp XTsKfTsKIyAyOCAiL3Vzci9zcmMvbGludXgtdGhpcy9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oIiAy IDMKIyAxICIvdXNyL3NyYy9saW51eC10aGlzL2luY2x1ZGUvbGludXgvdHlwZXMuaCIgMSAzCgoK CgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LXRoaXMvaW5jbHVkZS9saW51eC9wb3NpeF90eXBlcy5o IiAxIDMKCgoKIyAxICIvdXNyL3NyYy9saW51eC10aGlzL2luY2x1ZGUvbGludXgvc3RkZGVmLmgi IDEgMwojIDUgIi91c3Ivc3JjL2xpbnV4LXRoaXMvaW5jbHVkZS9saW51eC9wb3NpeF90eXBlcy5o IiAyIDMKIyAzNiAiL3Vzci9zcmMvbGludXgtdGhpcy9pbmNsdWRlL2xpbnV4L3Bvc2l4X3R5cGVz LmgiIDMKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIHVuc2lnbmVkIGxvbmcgZmRzX2JpdHMgWygx MDI0Lyg4ICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSldOwp9IF9fa2VybmVsX2ZkX3NldDsKCgp0 eXBlZGVmIHZvaWQgKCpfX2tlcm5lbF9zaWdoYW5kbGVyX3QpKGludCk7CgoKdHlwZWRlZiBpbnQg X19rZXJuZWxfa2V5X3Q7CgojIDEgIi91c3Ivc3JjL2xpbnV4LXRoaXMvaW5jbHVkZS9hc20vcG9z aXhfdHlwZXMuaCIgMSAzCiMgMTAgIi91c3Ivc3JjL2xpbnV4LXRoaXMvaW5jbHVkZS9hc20vcG9z aXhfdHlwZXMuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX2Rldl90Owp0eXBl ZGVmIHVuc2lnbmVkIGxvbmcgX19rZXJuZWxfaW5vX3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQg X19rZXJuZWxfbW9kZV90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX25saW5rX3Q7 CnR5cGVkZWYgbG9uZyBfX2tlcm5lbF9vZmZfdDsKdHlwZWRlZiBpbnQgX19rZXJuZWxfcGlkX3Q7 CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfaXBjX3BpZF90Owp0eXBlZGVmIHVuc2ln bmVkIHNob3J0IF9fa2VybmVsX3VpZF90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVs X2dpZF90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX2tlcm5lbF9zaXplX3Q7CnR5cGVkZWYgaW50 IF9fa2VybmVsX3NzaXplX3Q7CnR5cGVkZWYgaW50IF9fa2VybmVsX3B0cmRpZmZfdDsKdHlwZWRl ZiBsb25nIF9fa2VybmVsX3RpbWVfdDsKdHlwZWRlZiBsb25nIF9fa2VybmVsX3N1c2Vjb25kc190 Owp0eXBlZGVmIGxvbmcgX19rZXJuZWxfY2xvY2tfdDsKdHlwZWRlZiBpbnQgX19rZXJuZWxfZGFk ZHJfdDsKdHlwZWRlZiBjaGFyICogX19rZXJuZWxfY2FkZHJfdDsKdHlwZWRlZiB1bnNpZ25lZCBz aG9ydCBfX2tlcm5lbF91aWQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX2dp ZDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fa2VybmVsX3VpZDMyX3Q7CnR5cGVkZWYgdW5z aWduZWQgaW50IF9fa2VybmVsX2dpZDMyX3Q7Cgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2Vy bmVsX29sZF91aWRfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF9vbGRfZ2lkX3Q7 CgoKdHlwZWRlZiBsb25nIGxvbmcgX19rZXJuZWxfbG9mZl90OwoKCnR5cGVkZWYgc3RydWN0IHsK CgoKICAgICAgICBpbnQgX192YWxbMl07Cgp9IF9fa2VybmVsX2ZzaWRfdDsKIyA0NyAiL3Vzci9z cmMvbGludXgtdGhpcy9pbmNsdWRlL2xpbnV4L3Bvc2l4X3R5cGVzLmgiIDIgMwojIDkgIi91c3Iv c3JjL2xpbnV4LXRoaXMvaW5jbHVkZS9saW51eC90eXBlcy5oIiAyIDMKIyAxICIvdXNyL3NyYy9s aW51eC10aGlzL2luY2x1ZGUvYXNtL3R5cGVzLmgiIDEgMwoKCgp0eXBlZGVmIHVuc2lnbmVkIHNo b3J0IHVtb2RlX3Q7CgoKCgoKCnR5cGVkZWYgX19zaWduZWRfXyBjaGFyIF9fczg7CnR5cGVkZWYg dW5zaWduZWQgY2hhciBfX3U4OwoKdHlwZWRlZiBfX3NpZ25lZF9fIHNob3J0IF9fczE2Owp0eXBl ZGVmIHVuc2lnbmVkIHNob3J0IF9fdTE2OwoKdHlwZWRlZiBfX3NpZ25lZF9fIGludCBfX3MzMjsK dHlwZWRlZiB1bnNpZ25lZCBpbnQgX191MzI7CgoKdHlwZWRlZiBfX3NpZ25lZF9fIGxvbmcgbG9u ZyBfX3M2NDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgX191NjQ7CiMgMTAgIi91c3Ivc3Jj L2xpbnV4LXRoaXMvaW5jbHVkZS9saW51eC90eXBlcy5oIiAyIDMKIyAxMjMgIi91c3Ivc3JjL2xp bnV4LXRoaXMvaW5jbHVkZS9saW51eC90eXBlcy5oIiAzCnN0cnVjdCB1c3RhdCB7CiAgICAgICAg X19rZXJuZWxfZGFkZHJfdCBmX3RmcmVlOwogICAgICAgIF9fa2VybmVsX2lub190IGZfdGlub2Rl OwogICAgICAgIGNoYXIgZl9mbmFtZVs2XTsKICAgICAgICBjaGFyIGZfZnBhY2tbNl07Cn07CiMg MjkgIi91c3Ivc3JjL2xpbnV4LXRoaXMvaW5jbHVkZS9saW51eC9zeXNjdGwuaCIgMiAzCiMgMSAi L3Vzci9zcmMvbGludXgtdGhpcy9pbmNsdWRlL2xpbnV4L2xpc3QuaCIgMSAzCiMgMzAgIi91c3Iv c3JjL2xpbnV4LXRoaXMvaW5jbHVkZS9saW51eC9zeXNjdGwuaCIgMiAzCgpzdHJ1Y3QgZmlsZTsK CgoKc3RydWN0IF9fc3lzY3RsX2FyZ3MgewogICAgICAgIGludCAqbmFtZTsKICAgICAgICBpbnQg bmxlbjsKICAgICAgICB2b2lkICpvbGR2YWw7CiAgICAgICAgc2l6ZV90ICpvbGRsZW5wOwogICAg ICAgIHZvaWQgKm5ld3ZhbDsKICAgICAgICBzaXplX3QgbmV3bGVuOwogICAgICAgIHVuc2lnbmVk IGxvbmcgX191bnVzZWRbNF07Cn07CiMgNTUgIi91c3Ivc3JjL2xpbnV4LXRoaXMvaW5jbHVkZS9s aW51eC9zeXNjdGwuaCIgMwplbnVtCnsKICAgICAgICBDVExfS0VSTj0xLAogICAgICAgIENUTF9W TT0yLAogICAgICAgIENUTF9ORVQ9MywKICAgICAgICBDVExfUFJPQz00LAogICAgICAgIENUTF9G Uz01LAogICAgICAgIENUTF9ERUJVRz02LAogICAgICAgIENUTF9ERVY9NywKICAgICAgICBDVExf QlVTPTgsCiAgICAgICAgQ1RMX0FCST05LAogICAgICAgIENUTF9DUFU9MTAKfTsKCgplbnVtCnsK ICAgICAgICBCVVNfSVNBPTEKfTsKCgplbnVtCnsKICAgICAgICBLRVJOX09TVFlQRT0xLAogICAg ICAgIEtFUk5fT1NSRUxFQVNFPTIsCiAgICAgICAgS0VSTl9PU1JFVj0zLAogICAgICAgIEtFUk5f VkVSU0lPTj00LAogICAgICAgIEtFUk5fU0VDVVJFTUFTSz01LAogICAgICAgIEtFUk5fUFJPRj02 LAogICAgICAgIEtFUk5fTk9ERU5BTUU9NywKICAgICAgICBLRVJOX0RPTUFJTk5BTUU9OCwKCiAg ICAgICAgS0VSTl9DQVBfQlNFVD0xNCwKICAgICAgICBLRVJOX1BBTklDPTE1LAogICAgICAgIEtF Uk5fUkVBTFJPT1RERVY9MTYsCgogICAgICAgIEtFUk5fU1BBUkNfUkVCT09UPTIxLAogICAgICAg IEtFUk5fQ1RMQUxUREVMPTIyLAogICAgICAgIEtFUk5fUFJJTlRLPTIzLAogICAgICAgIEtFUk5f TkFNRVRSQU5TPTI0LAogICAgICAgIEtFUk5fUFBDX0hUQUJSRUNMQUlNPTI1LAogICAgICAgIEtF Uk5fUFBDX1pFUk9QQUdFRD0yNiwKICAgICAgICBLRVJOX1BQQ19QT1dFUlNBVkVfTkFQPTI3LAog ICAgICAgIEtFUk5fTU9EUFJPQkU9MjgsCiAgICAgICAgS0VSTl9TR19CSUdfQlVGRj0yOSwKICAg ICAgICBLRVJOX0FDQ1Q9MzAsCiAgICAgICAgS0VSTl9QUENfTDJDUj0zMSwKCiAgICAgICAgS0VS Tl9SVFNJR05SPTMyLAogICAgICAgIEtFUk5fUlRTSUdNQVg9MzMsCgogICAgICAgIEtFUk5fU0hN TUFYPTM0LAogICAgICAgIEtFUk5fTVNHTUFYPTM1LAogICAgICAgIEtFUk5fTVNHTU5CPTM2LAog ICAgICAgIEtFUk5fTVNHUE9PTD0zNywKICAgICAgICBLRVJOX1NZU1JRPTM4LAogICAgICAgIEtF Uk5fTUFYX1RIUkVBRFM9MzksCiAgICAgICAgS0VSTl9SQU5ET009NDAsCiAgICAgICAgS0VSTl9T SE1BTEw9NDEsCiAgICAgICAgS0VSTl9NU0dNTkk9NDIsCiAgICAgICAgS0VSTl9TRU09NDMsCiAg ICAgICAgS0VSTl9TUEFSQ19TVE9QX0E9NDQsCiAgICAgICAgS0VSTl9TSE1NTkk9NDUsCiAgICAg ICAgS0VSTl9PVkVSRkxPV1VJRD00NiwKICAgICAgICBLRVJOX09WRVJGTE9XR0lEPTQ3LAogICAg ICAgIEtFUk5fU0hNUEFUSD00OCwKICAgICAgICBLRVJOX0hPVFBMVUc9NDksCiAgICAgICAgS0VS Tl9JRUVFX0VNVUxBVElPTl9XQVJOSU5HUz01MCwKICAgICAgICBLRVJOX1MzOTBfVVNFUl9ERUJV R19MT0dHSU5HPTUxLAogICAgICAgIEtFUk5fQ09SRV9VU0VTX1BJRD01MiwKICAgICAgICBLRVJO X1RBSU5URUQ9NTMsCiAgICAgICAgS0VSTl9DQURQSUQ9NTQsCn07CgoKCmVudW0KewogICAgICAg IFZNX1NXQVBDVEw9MSwKICAgICAgICBWTV9TV0FQT1VUPTIsCiAgICAgICAgVk1fRlJFRVBHPTMs CiAgICAgICAgVk1fQkRGTFVTSD00LAogICAgICAgIFZNX09WRVJDT01NSVRfTUVNT1JZPTUsCiAg ICAgICAgVk1fQlVGRkVSTUVNPTYsCiAgICAgICAgVk1fUEFHRUNBQ0hFPTcsCiAgICAgICAgVk1f UEFHRVJEQUVNT049OCwKICAgICAgICBWTV9QR1RfQ0FDSEU9OSwKICAgICAgICBWTV9QQUdFX0NM VVNURVI9MTAsCiAgICAgICBWTV9NSU5fUkVBREFIRUFEPTEyLAogICAgICAgVk1fTUFYX1JFQURB SEVBRD0xMwp9OwoKCgplbnVtCnsKICAgICAgICBORVRfQ09SRT0xLAogICAgICAgIE5FVF9FVEhF Uj0yLAogICAgICAgIE5FVF84MDI9MywKICAgICAgICBORVRfVU5JWD00LAogICAgICAgIE5FVF9J UFY0PTUsCiAgICAgICAgTkVUX0lQWD02LAogICAgICAgIE5FVF9BVEFMSz03LAogICAgICAgIE5F VF9ORVRST009OCwKICAgICAgICBORVRfQVgyNT05LAogICAgICAgIE5FVF9CUklER0U9MTAsCiAg ICAgICAgTkVUX1JPU0U9MTEsCiAgICAgICAgTkVUX0lQVjY9MTIsCiAgICAgICAgTkVUX1gyNT0x MywKICAgICAgICBORVRfVFI9MTQsCiAgICAgICAgTkVUX0RFQ05FVD0xNSwKICAgICAgICBORVRf RUNPTkVUPTE2LAogICAgICAgIE5FVF9LSFRUUEQ9MTcKfTsKCgplbnVtCnsKICAgICAgICBSQU5E T01fUE9PTFNJWkU9MSwKICAgICAgICBSQU5ET01fRU5UUk9QWV9DT1VOVD0yLAogICAgICAgIFJB TkRPTV9SRUFEX1RIUkVTSD0zLAogICAgICAgIFJBTkRPTV9XUklURV9USFJFU0g9NCwKICAgICAg ICBSQU5ET01fQk9PVF9JRD01LAogICAgICAgIFJBTkRPTV9VVUlEPTYKfTsKCgplbnVtCnsKICAg ICAgICBCVVNfSVNBX01FTV9CQVNFPTEsCiAgICAgICAgQlVTX0lTQV9QT1JUX0JBU0U9MiwKICAg ICAgICBCVVNfSVNBX1BPUlRfU0hJRlQ9Mwp9OwoKCmVudW0KewogICAgICAgIE5FVF9DT1JFX1dN RU1fTUFYPTEsCiAgICAgICAgTkVUX0NPUkVfUk1FTV9NQVg9MiwKICAgICAgICBORVRfQ09SRV9X TUVNX0RFRkFVTFQ9MywKICAgICAgICBORVRfQ09SRV9STUVNX0RFRkFVTFQ9NCwKCiAgICAgICAg TkVUX0NPUkVfTUFYX0JBQ0tMT0c9NiwKICAgICAgICBORVRfQ09SRV9GQVNUUk9VVEU9NywKICAg ICAgICBORVRfQ09SRV9NU0dfQ09TVD04LAogICAgICAgIE5FVF9DT1JFX01TR19CVVJTVD05LAog ICAgICAgIE5FVF9DT1JFX09QVE1FTV9NQVg9MTAsCiAgICAgICAgTkVUX0NPUkVfSE9UX0xJU1Rf TEVOR1RIPTExLAogICAgICAgIE5FVF9DT1JFX0RJVkVSVF9WRVJTSU9OPTEyLAogICAgICAgIE5F VF9DT1JFX05PX0NPTkdfVEhSRVNIPTEzLAogICAgICAgIE5FVF9DT1JFX05PX0NPTkc9MTQsCiAg ICAgICAgTkVUX0NPUkVfTE9fQ09ORz0xNSwKICAgICAgICBORVRfQ09SRV9NT0RfQ09ORz0xNgp9 OwoKCgoKCgoKZW51bQp7CiAgICAgICAgTkVUX1VOSVhfREVTVFJPWV9ERUxBWT0xLAogICAgICAg IE5FVF9VTklYX0RFTEVURV9ERUxBWT0yLAogICAgICAgIE5FVF9VTklYX01BWF9ER1JBTV9RTEVO PTMsCn07CgoKZW51bQp7CgogICAgICAgIE5FVF9JUFY0X0ZPUldBUkQ9OCwKICAgICAgICBORVRf SVBWNF9EWU5BRERSPTksCgogICAgICAgIE5FVF9JUFY0X0NPTkY9MTYsCiAgICAgICAgTkVUX0lQ VjRfTkVJR0g9MTcsCiAgICAgICAgTkVUX0lQVjRfUk9VVEU9MTgsCiAgICAgICAgTkVUX0lQVjRf RklCX0hBU0g9MTksCgogICAgICAgIE5FVF9JUFY0X1RDUF9USU1FU1RBTVBTPTMzLAogICAgICAg IE5FVF9JUFY0X1RDUF9XSU5ET1dfU0NBTElORz0zNCwKICAgICAgICBORVRfSVBWNF9UQ1BfU0FD Sz0zNSwKICAgICAgICBORVRfSVBWNF9UQ1BfUkVUUkFOU19DT0xMQVBTRT0zNiwKICAgICAgICBO RVRfSVBWNF9ERUZBVUxUX1RUTD0zNywKICAgICAgICBORVRfSVBWNF9BVVRPQ09ORklHPTM4LAog ICAgICAgIE5FVF9JUFY0X05PX1BNVFVfRElTQz0zOSwKICAgICAgICBORVRfSVBWNF9UQ1BfU1lO X1JFVFJJRVM9NDAsCiAgICAgICAgTkVUX0lQVjRfSVBGUkFHX0hJR0hfVEhSRVNIPTQxLAogICAg ICAgIE5FVF9JUFY0X0lQRlJBR19MT1dfVEhSRVNIPTQyLAogICAgICAgIE5FVF9JUFY0X0lQRlJB R19USU1FPTQzLAogICAgICAgIE5FVF9JUFY0X1RDUF9NQVhfS0FfUFJPQkVTPTQ0LAogICAgICAg IE5FVF9JUFY0X1RDUF9LRUVQQUxJVkVfVElNRT00NSwKICAgICAgICBORVRfSVBWNF9UQ1BfS0VF UEFMSVZFX1BST0JFUz00NiwKICAgICAgICBORVRfSVBWNF9UQ1BfUkVUUklFUzE9NDcsCiAgICAg ICAgTkVUX0lQVjRfVENQX1JFVFJJRVMyPTQ4LAogICAgICAgIE5FVF9JUFY0X1RDUF9GSU5fVElN RU9VVD00OSwKICAgICAgICBORVRfSVBWNF9JUF9NQVNRX0RFQlVHPTUwLAogICAgICAgIE5FVF9U Q1BfU1lOQ09PS0lFUz01MSwKICAgICAgICBORVRfVENQX1NURFVSRz01MiwKICAgICAgICBORVRf VENQX1JGQzEzMzc9NTMsCiAgICAgICAgTkVUX1RDUF9TWU5fVEFJTERST1A9NTQsCiAgICAgICAg TkVUX1RDUF9NQVhfU1lOX0JBQ0tMT0c9NTUsCiAgICAgICAgTkVUX0lQVjRfTE9DQUxfUE9SVF9S QU5HRT01NiwKICAgICAgICBORVRfSVBWNF9JQ01QX0VDSE9fSUdOT1JFX0FMTD01NywKICAgICAg ICBORVRfSVBWNF9JQ01QX0VDSE9fSUdOT1JFX0JST0FEQ0FTVFM9NTgsCiAgICAgICAgTkVUX0lQ VjRfSUNNUF9TT1VSQ0VRVUVOQ0hfUkFURT01OSwKICAgICAgICBORVRfSVBWNF9JQ01QX0RFU1RV TlJFQUNIX1JBVEU9NjAsCiAgICAgICAgTkVUX0lQVjRfSUNNUF9USU1FRVhDRUVEX1JBVEU9NjEs CiAgICAgICAgTkVUX0lQVjRfSUNNUF9QQVJBTVBST0JfUkFURT02MiwKICAgICAgICBORVRfSVBW NF9JQ01QX0VDSE9SRVBMWV9SQVRFPTYzLAogICAgICAgIE5FVF9JUFY0X0lDTVBfSUdOT1JFX0JP R1VTX0VSUk9SX1JFU1BPTlNFUz02NCwKICAgICAgICBORVRfSVBWNF9JR01QX01BWF9NRU1CRVJT SElQUz02NSwKICAgICAgICBORVRfVENQX1RXX1JFQ1lDTEU9NjYsCiAgICAgICAgTkVUX0lQVjRf QUxXQVlTX0RFRlJBRz02NywKICAgICAgICBORVRfSVBWNF9UQ1BfS0VFUEFMSVZFX0lOVFZMPTY4 LAogICAgICAgIE5FVF9JUFY0X0lORVRfUEVFUl9USFJFU0hPTEQ9NjksCiAgICAgICAgTkVUX0lQ VjRfSU5FVF9QRUVSX01JTlRUTD03MCwKICAgICAgICBORVRfSVBWNF9JTkVUX1BFRVJfTUFYVFRM PTcxLAogICAgICAgIE5FVF9JUFY0X0lORVRfUEVFUl9HQ19NSU5USU1FPTcyLAogICAgICAgIE5F VF9JUFY0X0lORVRfUEVFUl9HQ19NQVhUSU1FPTczLAogICAgICAgIE5FVF9UQ1BfT1JQSEFOX1JF VFJJRVM9NzQsCiAgICAgICAgTkVUX1RDUF9BQk9SVF9PTl9PVkVSRkxPVz03NSwKICAgICAgICBO RVRfVENQX1NZTkFDS19SRVRSSUVTPTc2LAogICAgICAgIE5FVF9UQ1BfTUFYX09SUEhBTlM9Nzcs CiAgICAgICAgTkVUX1RDUF9NQVhfVFdfQlVDS0VUUz03OCwKICAgICAgICBORVRfVENQX0ZBQ0s9 NzksCiAgICAgICAgTkVUX1RDUF9SRU9SREVSSU5HPTgwLAogICAgICAgIE5FVF9UQ1BfRUNOPTgx LAogICAgICAgIE5FVF9UQ1BfRFNBQ0s9ODIsCiAgICAgICAgTkVUX1RDUF9NRU09ODMsCiAgICAg ICAgTkVUX1RDUF9XTUVNPTg0LAogICAgICAgIE5FVF9UQ1BfUk1FTT04NSwKICAgICAgICBORVRf VENQX0FQUF9XSU49ODYsCiAgICAgICAgTkVUX1RDUF9BRFZfV0lOX1NDQUxFPTg3LAogICAgICAg IE5FVF9JUFY0X05PTkxPQ0FMX0JJTkQ9ODgsCiAgICAgICAgTkVUX0lQVjRfSUNNUF9SQVRFTElN SVQ9ODksCiAgICAgICAgTkVUX0lQVjRfSUNNUF9SQVRFTUFTSz05MAp9OwoKZW51bSB7CiAgICAg ICAgTkVUX0lQVjRfUk9VVEVfRkxVU0g9MSwKICAgICAgICBORVRfSVBWNF9ST1VURV9NSU5fREVM QVk9MiwKICAgICAgICBORVRfSVBWNF9ST1VURV9NQVhfREVMQVk9MywKICAgICAgICBORVRfSVBW NF9ST1VURV9HQ19USFJFU0g9NCwKICAgICAgICBORVRfSVBWNF9ST1VURV9NQVhfU0laRT01LAog ICAgICAgIE5FVF9JUFY0X1JPVVRFX0dDX01JTl9JTlRFUlZBTD02LAogICAgICAgIE5FVF9JUFY0 X1JPVVRFX0dDX1RJTUVPVVQ9NywKICAgICAgICBORVRfSVBWNF9ST1VURV9HQ19JTlRFUlZBTD04 LAogICAgICAgIE5FVF9JUFY0X1JPVVRFX1JFRElSRUNUX0xPQUQ9OSwKICAgICAgICBORVRfSVBW NF9ST1VURV9SRURJUkVDVF9OVU1CRVI9MTAsCiAgICAgICAgTkVUX0lQVjRfUk9VVEVfUkVESVJF Q1RfU0lMRU5DRT0xMSwKICAgICAgICBORVRfSVBWNF9ST1VURV9FUlJPUl9DT1NUPTEyLAogICAg ICAgIE5FVF9JUFY0X1JPVVRFX0VSUk9SX0JVUlNUPTEzLAogICAgICAgIE5FVF9JUFY0X1JPVVRF X0dDX0VMQVNUSUNJVFk9MTQsCiAgICAgICAgTkVUX0lQVjRfUk9VVEVfTVRVX0VYUElSRVM9MTUs CiAgICAgICAgTkVUX0lQVjRfUk9VVEVfTUlOX1BNVFU9MTYsCiAgICAgICAgTkVUX0lQVjRfUk9V VEVfTUlOX0FEVk1TUz0xNwp9OwoKZW51bQp7CiAgICAgICAgTkVUX1BST1RPX0NPTkZfQUxMPS0y LAogICAgICAgIE5FVF9QUk9UT19DT05GX0RFRkFVTFQ9LTMKCgp9OwoKZW51bQp7CiAgICAgICAg TkVUX0lQVjRfQ09ORl9GT1JXQVJESU5HPTEsCiAgICAgICAgTkVUX0lQVjRfQ09ORl9NQ19GT1JX QVJESU5HPTIsCiAgICAgICAgTkVUX0lQVjRfQ09ORl9QUk9YWV9BUlA9MywKICAgICAgICBORVRf SVBWNF9DT05GX0FDQ0VQVF9SRURJUkVDVFM9NCwKICAgICAgICBORVRfSVBWNF9DT05GX1NFQ1VS RV9SRURJUkVDVFM9NSwKICAgICAgICBORVRfSVBWNF9DT05GX1NFTkRfUkVESVJFQ1RTPTYsCiAg ICAgICAgTkVUX0lQVjRfQ09ORl9TSEFSRURfTUVESUE9NywKICAgICAgICBORVRfSVBWNF9DT05G X1JQX0ZJTFRFUj04LAogICAgICAgIE5FVF9JUFY0X0NPTkZfQUNDRVBUX1NPVVJDRV9ST1VURT05 LAogICAgICAgIE5FVF9JUFY0X0NPTkZfQk9PVFBfUkVMQVk9MTAsCiAgICAgICAgTkVUX0lQVjRf Q09ORl9MT0dfTUFSVElBTlM9MTEsCiAgICAgICAgTkVUX0lQVjRfQ09ORl9UQUc9MTIsCiAgICAg ICAgTkVUX0lQVjRfQ09ORl9BUlBGSUxURVI9MTMKfTsKCgplbnVtIHsKICAgICAgICBORVRfSVBW Nl9DT05GPTE2LAogICAgICAgIE5FVF9JUFY2X05FSUdIPTE3LAogICAgICAgIE5FVF9JUFY2X1JP VVRFPTE4Cn07CgplbnVtIHsKICAgICAgICBORVRfSVBWNl9ST1VURV9GTFVTSD0xLAogICAgICAg IE5FVF9JUFY2X1JPVVRFX0dDX1RIUkVTSD0yLAogICAgICAgIE5FVF9JUFY2X1JPVVRFX01BWF9T SVpFPTMsCiAgICAgICAgTkVUX0lQVjZfUk9VVEVfR0NfTUlOX0lOVEVSVkFMPTQsCiAgICAgICAg TkVUX0lQVjZfUk9VVEVfR0NfVElNRU9VVD01LAogICAgICAgIE5FVF9JUFY2X1JPVVRFX0dDX0lO VEVSVkFMPTYsCiAgICAgICAgTkVUX0lQVjZfUk9VVEVfR0NfRUxBU1RJQ0lUWT03LAogICAgICAg IE5FVF9JUFY2X1JPVVRFX01UVV9FWFBJUkVTPTgsCiAgICAgICAgTkVUX0lQVjZfUk9VVEVfTUlO X0FEVk1TUz05Cn07CgplbnVtIHsKICAgICAgICBORVRfSVBWNl9GT1JXQVJESU5HPTEsCiAgICAg ICAgTkVUX0lQVjZfSE9QX0xJTUlUPTIsCiAgICAgICAgTkVUX0lQVjZfTVRVPTMsCiAgICAgICAg TkVUX0lQVjZfQUNDRVBUX1JBPTQsCiAgICAgICAgTkVUX0lQVjZfQUNDRVBUX1JFRElSRUNUUz01 LAogICAgICAgIE5FVF9JUFY2X0FVVE9DT05GPTYsCiAgICAgICAgTkVUX0lQVjZfREFEX1RSQU5T TUlUUz03LAogICAgICAgIE5FVF9JUFY2X1JUUl9TT0xJQ0lUUz04LAogICAgICAgIE5FVF9JUFY2 X1JUUl9TT0xJQ0lUX0lOVEVSVkFMPTksCiAgICAgICAgTkVUX0lQVjZfUlRSX1NPTElDSVRfREVM QVk9MTAKfTsKCgplbnVtIHsKICAgICAgICBORVRfTkVJR0hfTUNBU1RfU09MSUNJVD0xLAogICAg ICAgIE5FVF9ORUlHSF9VQ0FTVF9TT0xJQ0lUPTIsCiAgICAgICAgTkVUX05FSUdIX0FQUF9TT0xJ Q0lUPTMsCiAgICAgICAgTkVUX05FSUdIX1JFVFJBTlNfVElNRT00LAogICAgICAgIE5FVF9ORUlH SF9SRUFDSEFCTEVfVElNRT01LAogICAgICAgIE5FVF9ORUlHSF9ERUxBWV9QUk9CRV9USU1FPTYs CiAgICAgICAgTkVUX05FSUdIX0dDX1NUQUxFX1RJTUU9NywKICAgICAgICBORVRfTkVJR0hfVU5S RVNfUUxFTj04LAogICAgICAgIE5FVF9ORUlHSF9QUk9YWV9RTEVOPTksCiAgICAgICAgTkVUX05F SUdIX0FOWUNBU1RfREVMQVk9MTAsCiAgICAgICAgTkVUX05FSUdIX1BST1hZX0RFTEFZPTExLAog ICAgICAgIE5FVF9ORUlHSF9MT0NLVElNRT0xMiwKICAgICAgICBORVRfTkVJR0hfR0NfSU5URVJW QUw9MTMsCiAgICAgICAgTkVUX05FSUdIX0dDX1RIUkVTSDE9MTQsCiAgICAgICAgTkVUX05FSUdI X0dDX1RIUkVTSDI9MTUsCiAgICAgICAgTkVUX05FSUdIX0dDX1RIUkVTSDM9MTYKfTsKCgplbnVt IHsKICAgICAgICBORVRfSVBYX1BQUk9QX0JST0FEQ0FTVElORz0xLAogICAgICAgIE5FVF9JUFhf Rk9SV0FSRElORz0yCn07CgoKCmVudW0gewogICAgICAgIE5FVF9BVEFMS19BQVJQX0VYUElSWV9U SU1FPTEsCiAgICAgICAgTkVUX0FUQUxLX0FBUlBfVElDS19USU1FPTIsCiAgICAgICAgTkVUX0FU QUxLX0FBUlBfUkVUUkFOU01JVF9MSU1JVD0zLAogICAgICAgIE5FVF9BVEFMS19BQVJQX1JFU09M VkVfVElNRT00Cn07CgoKCmVudW0gewogICAgICAgIE5FVF9ORVRST01fREVGQVVMVF9QQVRIX1FV QUxJVFk9MSwKICAgICAgICBORVRfTkVUUk9NX09CU09MRVNDRU5DRV9DT1VOVF9JTklUSUFMSVNF Uj0yLAogICAgICAgIE5FVF9ORVRST01fTkVUV09SS19UVExfSU5JVElBTElTRVI9MywKICAgICAg ICBORVRfTkVUUk9NX1RSQU5TUE9SVF9USU1FT1VUPTQsCiAgICAgICAgTkVUX05FVFJPTV9UUkFO U1BPUlRfTUFYSU1VTV9UUklFUz01LAogICAgICAgIE5FVF9ORVRST01fVFJBTlNQT1JUX0FDS05P V0xFREdFX0RFTEFZPTYsCiAgICAgICAgTkVUX05FVFJPTV9UUkFOU1BPUlRfQlVTWV9ERUxBWT03 LAogICAgICAgIE5FVF9ORVRST01fVFJBTlNQT1JUX1JFUVVFU1RFRF9XSU5ET1dfU0laRT04LAog ICAgICAgIE5FVF9ORVRST01fVFJBTlNQT1JUX05PX0FDVElWSVRZX1RJTUVPVVQ9OSwKICAgICAg ICBORVRfTkVUUk9NX1JPVVRJTkdfQ09OVFJPTD0xMCwKICAgICAgICBORVRfTkVUUk9NX0xJTktf RkFJTFNfQ09VTlQ9MTEKfTsKCgplbnVtIHsKICAgICAgICBORVRfQVgyNV9JUF9ERUZBVUxUX01P REU9MSwKICAgICAgICBORVRfQVgyNV9ERUZBVUxUX01PREU9MiwKICAgICAgICBORVRfQVgyNV9C QUNLT0ZGX1RZUEU9MywKICAgICAgICBORVRfQVgyNV9DT05ORUNUX01PREU9NCwKICAgICAgICBO RVRfQVgyNV9TVEFOREFSRF9XSU5ET1c9NSwKICAgICAgICBORVRfQVgyNV9FWFRFTkRFRF9XSU5E T1c9NiwKICAgICAgICBORVRfQVgyNV9UMV9USU1FT1VUPTcsCiAgICAgICAgTkVUX0FYMjVfVDJf VElNRU9VVD04LAogICAgICAgIE5FVF9BWDI1X1QzX1RJTUVPVVQ9OSwKICAgICAgICBORVRfQVgy NV9JRExFX1RJTUVPVVQ9MTAsCiAgICAgICAgTkVUX0FYMjVfTjI9MTEsCiAgICAgICAgTkVUX0FY MjVfUEFDTEVOPTEyLAogICAgICAgIE5FVF9BWDI1X1BST1RPQ09MPTEzLAogICAgICAgIE5FVF9B WDI1X0RBTUFfU0xBVkVfVElNRU9VVD0xNAp9OwoKCmVudW0gewogICAgICAgIE5FVF9ST1NFX1JF U1RBUlRfUkVRVUVTVF9USU1FT1VUPTEsCiAgICAgICAgTkVUX1JPU0VfQ0FMTF9SRVFVRVNUX1RJ TUVPVVQ9MiwKICAgICAgICBORVRfUk9TRV9SRVNFVF9SRVFVRVNUX1RJTUVPVVQ9MywKICAgICAg ICBORVRfUk9TRV9DTEVBUl9SRVFVRVNUX1RJTUVPVVQ9NCwKICAgICAgICBORVRfUk9TRV9BQ0tf SE9MRF9CQUNLX1RJTUVPVVQ9NSwKICAgICAgICBORVRfUk9TRV9ST1VUSU5HX0NPTlRST0w9NiwK ICAgICAgICBORVRfUk9TRV9MSU5LX0ZBSUxfVElNRU9VVD03LAogICAgICAgIE5FVF9ST1NFX01B WF9WQ1M9OCwKICAgICAgICBORVRfUk9TRV9XSU5ET1dfU0laRT05LAogICAgICAgIE5FVF9ST1NF X05PX0FDVElWSVRZX1RJTUVPVVQ9MTAKfTsKCgplbnVtIHsKICAgICAgICBORVRfWDI1X1JFU1RB UlRfUkVRVUVTVF9USU1FT1VUPTEsCiAgICAgICAgTkVUX1gyNV9DQUxMX1JFUVVFU1RfVElNRU9V VD0yLAogICAgICAgIE5FVF9YMjVfUkVTRVRfUkVRVUVTVF9USU1FT1VUPTMsCiAgICAgICAgTkVU X1gyNV9DTEVBUl9SRVFVRVNUX1RJTUVPVVQ9NCwKICAgICAgICBORVRfWDI1X0FDS19IT0xEX0JB Q0tfVElNRU9VVD01Cn07CgoKZW51bQp7CiAgICAgICAgTkVUX1RSX1JJRl9USU1FT1VUPTEKfTsK CgplbnVtIHsKICAgICAgICBORVRfREVDTkVUX05PREVfVFlQRSA9IDEsCiAgICAgICAgTkVUX0RF Q05FVF9OT0RFX0FERFJFU1MgPSAyLAogICAgICAgIE5FVF9ERUNORVRfTk9ERV9OQU1FID0gMywK ICAgICAgICBORVRfREVDTkVUX0RFRkFVTFRfREVWSUNFID0gNCwKICAgICAgICBORVRfREVDTkVU X1RJTUVfV0FJVCA9IDUsCiAgICAgICAgTkVUX0RFQ05FVF9ETl9DT1VOVCA9IDYsCiAgICAgICAg TkVUX0RFQ05FVF9ESV9DT1VOVCA9IDcsCiAgICAgICAgTkVUX0RFQ05FVF9EUl9DT1VOVCA9IDgs CiAgICAgICAgTkVUX0RFQ05FVF9EU1RfR0NfSU5URVJWQUwgPSA5LAogICAgICAgIE5FVF9ERUNO RVRfQ09ORiA9IDEwLAogICAgICAgIE5FVF9ERUNORVRfTk9fRkNfTUFYX0NXTkQgPSAxMSwKICAg ICAgICBORVRfREVDTkVUX0RFQlVHX0xFVkVMID0gMjU1Cn07CgoKZW51bSB7CiAgICAgICAgTkVU X0tIVFRQRF9ET0NST09UID0gMSwKICAgICAgICBORVRfS0hUVFBEX1NUQVJUID0gMiwKICAgICAg ICBORVRfS0hUVFBEX1NUT1AgPSAzLAogICAgICAgIE5FVF9LSFRUUERfVU5MT0FEID0gNCwKICAg ICAgICBORVRfS0hUVFBEX0NMSUVOVFBPUlQgPSA1LAogICAgICAgIE5FVF9LSFRUUERfUEVSTVJF USA9IDYsCiAgICAgICAgTkVUX0tIVFRQRF9QRVJNRk9SQklEID0gNywKICAgICAgICBORVRfS0hU VFBEX0xPR0dJTkcgPSA4LAogICAgICAgIE5FVF9LSFRUUERfU0VSVkVSUE9SVCA9IDksCiAgICAg ICAgTkVUX0tIVFRQRF9EWU5BTUlDU1RSSU5HPSAxMCwKICAgICAgICBORVRfS0hUVFBEX1NMT1BQ WU1JTUUgPSAxMSwKICAgICAgICBORVRfS0hUVFBEX1RIUkVBRFMgPSAxMiwKICAgICAgICBORVRf S0hUVFBEX01BWENPTk5FQ1QgPSAxMwp9OwoKCmVudW0gewogICAgICAgIE5FVF9ERUNORVRfQ09O Rl9MT09QQkFDSyA9IC0yLAogICAgICAgIE5FVF9ERUNORVRfQ09ORl9ERENNUCA9IC0zLAogICAg ICAgIE5FVF9ERUNORVRfQ09ORl9QUFAgPSAtNCwKICAgICAgICBORVRfREVDTkVUX0NPTkZfWDI1 ID0gLTUsCiAgICAgICAgTkVUX0RFQ05FVF9DT05GX0dSRSA9IC02LAogICAgICAgIE5FVF9ERUNO RVRfQ09ORl9FVEhFUiA9IC03CgoKfTsKCgplbnVtIHsKICAgICAgICBORVRfREVDTkVUX0NPTkZf REVWX1BSSU9SSVRZID0gMSwKICAgICAgICBORVRfREVDTkVUX0NPTkZfREVWX1QxID0gMiwKICAg ICAgICBORVRfREVDTkVUX0NPTkZfREVWX1QyID0gMywKICAgICAgICBORVRfREVDTkVUX0NPTkZf REVWX1QzID0gNCwKICAgICAgICBORVRfREVDTkVUX0NPTkZfREVWX0ZPUldBUkRJTkcgPSA1LAog ICAgICAgIE5FVF9ERUNORVRfQ09ORl9ERVZfQkxLU0laRSA9IDYsCiAgICAgICAgTkVUX0RFQ05F VF9DT05GX0RFVl9TVEFURSA9IDcKfTsKCgoKCmVudW0KewogICAgICAgIEZTX05SSU5PREU9MSwK ICAgICAgICBGU19TVEFUSU5PREU9MiwKICAgICAgICBGU19NQVhJTk9ERT0zLAogICAgICAgIEZT X05SRFFVT1Q9NCwKICAgICAgICBGU19NQVhEUVVPVD01LAogICAgICAgIEZTX05SRklMRT02LAog ICAgICAgIEZTX01BWEZJTEU9NywKICAgICAgICBGU19ERU5UUlk9OCwKICAgICAgICBGU19OUlNV UEVSPTksCiAgICAgICAgRlNfTUFYU1VQRVI9MTAsCiAgICAgICAgRlNfT1ZFUkZMT1dVSUQ9MTEs CiAgICAgICAgRlNfT1ZFUkZMT1dHSUQ9MTIsCiAgICAgICAgRlNfTEVBU0VTPTEzLAogICAgICAg IEZTX0RJUl9OT1RJRlk9MTQsCiAgICAgICAgRlNfTEVBU0VfVElNRT0xNSwKfTsKCgoKCmVudW0g ewogICAgICAgIERFVl9DRFJPTT0xLAogICAgICAgIERFVl9IV01PTj0yLAogICAgICAgIERFVl9Q QVJQT1JUPTMsCiAgICAgICAgREVWX1JBSUQ9NCwKICAgICAgICBERVZfTUFDX0hJRD01Cn07CgoK ZW51bSB7CiAgICAgICAgREVWX0NEUk9NX0lORk89MSwKICAgICAgICBERVZfQ0RST01fQVVUT0NM T1NFPTIsCiAgICAgICAgREVWX0NEUk9NX0FVVE9FSkVDVD0zLAogICAgICAgIERFVl9DRFJPTV9E RUJVRz00LAogICAgICAgIERFVl9DRFJPTV9MT0NLPTUsCiAgICAgICAgREVWX0NEUk9NX0NIRUNL X01FRElBPTYKfTsKCgplbnVtIHsKICAgICAgICBERVZfUEFSUE9SVF9ERUZBVUxUPS0zCn07CgoK ZW51bSB7CiAgICAgICAgREVWX1JBSURfU1BFRURfTElNSVRfTUlOPTEsCiAgICAgICAgREVWX1JB SURfU1BFRURfTElNSVRfTUFYPTIKfTsKCgplbnVtIHsKICAgICAgICBERVZfUEFSUE9SVF9ERUZB VUxUX1RJTUVTTElDRT0xLAogICAgICAgIERFVl9QQVJQT1JUX0RFRkFVTFRfU1BJTlRJTUU9Mgp9 OwoKCmVudW0gewogICAgICAgIERFVl9QQVJQT1JUX1NQSU5USU1FPTEsCiAgICAgICAgREVWX1BB UlBPUlRfQkFTRV9BRERSPTIsCiAgICAgICAgREVWX1BBUlBPUlRfSVJRPTMsCiAgICAgICAgREVW X1BBUlBPUlRfRE1BPTQsCiAgICAgICAgREVWX1BBUlBPUlRfTU9ERVM9NSwKICAgICAgICBERVZf UEFSUE9SVF9ERVZJQ0VTPTYsCiAgICAgICAgREVWX1BBUlBPUlRfQVVUT1BST0JFPTE2Cn07CgoK ZW51bSB7CiAgICAgICAgREVWX1BBUlBPUlRfREVWSUNFU19BQ1RJVkU9LTMsCn07CgoKZW51bSB7 CiAgICAgICAgREVWX1BBUlBPUlRfREVWSUNFX1RJTUVTTElDRT0xLAp9OwoKCmVudW0gewogICAg ICAgIERFVl9NQUNfSElEX0tFWUJPQVJEX1NFTkRTX0xJTlVYX0tFWUNPREVTPTEsCiAgICAgICAg REVWX01BQ19ISURfS0VZQk9BUkRfTE9DS19LRVlDT0RFUz0yLAogICAgICAgIERFVl9NQUNfSElE X01PVVNFX0JVVFRPTl9FTVVMQVRJT049MywKICAgICAgICBERVZfTUFDX0hJRF9NT1VTRV9CVVRU T04yX0tFWUNPREU9NCwKICAgICAgICBERVZfTUFDX0hJRF9NT1VTRV9CVVRUT04zX0tFWUNPREU9 NSwKICAgICAgICBERVZfTUFDX0hJRF9BREJfTU9VU0VfU0VORFNfS0VZQ09ERVM9Ngp9OwoKCmVu dW0KewogICAgICAgIEFCSV9ERUZIQU5ETEVSX0NPRkY9MSwKICAgICAgICBBQklfREVGSEFORExF Ul9FTEY9MiwKICAgICAgICBBQklfREVGSEFORExFUl9MQ0FMTDc9MywKICAgICAgICBBQklfREVG SEFORExFUl9MSUJDU089NCwKICAgICAgICBBQklfVFJBQ0U9NSwKICAgICAgICBBQklfRkFLRV9V VFNOQU1FPTYsCn07CiMgMjkgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3N5cy9zeXNjdGwu aCIgMgoKCmV4dGVybiBpbnQgc3lzY3RsIChpbnQgKl9fbmFtZSwgaW50IF9fbmxlbiwgdm9pZCAq X19vbGR2YWwsCiAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fb2xkbGVucCwgdm9pZCAqX19u ZXd2YWwsIHNpemVfdCBfX25ld2xlbikgOwoKCiMgMyAiLi4vaW5jbHVkZS9zeXMvc3lzY3RsLmgi IDIKCgpleHRlcm4gaW50IF9fc3lzY3RsIChpbnQgKl9fbmFtZSwgaW50IF9fbmxlbiwgdm9pZCAq X19vbGR2YWwsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19vbGRsZW5wLCB2b2lkICpf X25ld3ZhbCwgc2l6ZV90IF9fbmV3bGVuKTsKIyAyOCAicHRocmVhZC5jIiAyCiMgMSAiLi4vaW5j bHVkZS9zaGxpYi1jb21wYXQuaCIgMQojIDI2ICIuLi9pbmNsdWRlL3NobGliLWNvbXBhdC5oIgoj IDEgIi91c3Ivc3JjL2dsaWJjLTIuMi41LWJ1aWxkL2FiaS12ZXJzaW9ucy5oIiAxCiMgMjcgIi4u L2luY2x1ZGUvc2hsaWItY29tcGF0LmgiIDIKIyAyOSAicHRocmVhZC5jIiAyCiMgMSAiLi4vaW5j bHVkZS9wdGhyZWFkLmgiIDEKIyAxICIuLi9saW51eHRocmVhZHMvc3lzZGVwcy9wdGhyZWFkL3B0 aHJlYWQuaCIgMQojIDIwICIuLi9saW51eHRocmVhZHMvc3lzZGVwcy9wdGhyZWFkL3B0aHJlYWQu aCIKIyAxICIuLi9pbmNsdWRlL3NjaGVkLmgiIDEKCiMgMSAiLi4vcG9zaXgvc2NoZWQuaCIgMQoj IDI5ICIuLi9wb3NpeC9zY2hlZC5oIgojIDEgIi4uL2luY2x1ZGUvdGltZS5oIiAxCgoKIyAxICIu Li90aW1lL3RpbWUuaCIgMQojIDQgIi4uL2luY2x1ZGUvdGltZS5oIiAyCiMgMzAgIi4uL3Bvc2l4 L3NjaGVkLmgiIDIKCgojIDEgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2JpdHMvc2NoZWQu aCIgMQojIDQ3ICIuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9iaXRzL3NjaGVkLmgiCnN0cnVj dCBzY2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9yaXR5OwogIH07CgoKCgoKZXh0 ZXJuIGludCBjbG9uZSAoaW50ICgqX19mbikgKHZvaWQgKl9fYXJnKSwgdm9pZCAqX19jaGlsZF9z dGFjaywKICAgICAgICAgICAgICAgICAgaW50IF9fZmxhZ3MsIHZvaWQgKl9fYXJnKSA7CgoKCiMg MzMgIi4uL3Bvc2l4L3NjaGVkLmgiIDIKCgoKCgoKCmV4dGVybiBpbnQgc2NoZWRfc2V0cGFyYW0g KF9fcGlkX3QgX19waWQsIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKQogICAg IDsKCgpleHRlcm4gaW50IHNjaGVkX2dldHBhcmFtIChfX3BpZF90IF9fcGlkLCBzdHJ1Y3Qgc2No ZWRfcGFyYW0gKl9fcGFyYW0pIDsKCgpleHRlcm4gaW50IHNjaGVkX3NldHNjaGVkdWxlciAoX19w aWRfdCBfX3BpZCwgaW50IF9fcG9saWN5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pIDsKCgpleHRlcm4gaW50IHNjaGVk X2dldHNjaGVkdWxlciAoX19waWRfdCBfX3BpZCkgOwoKCmV4dGVybiBpbnQgc2NoZWRfeWllbGQg KHZvaWQpIDsKCgpleHRlcm4gaW50IHNjaGVkX2dldF9wcmlvcml0eV9tYXggKGludCBfX2FsZ29y aXRobSkgOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAoaW50IF9fYWxnb3Jp dGhtKSA7CgoKZXh0ZXJuIGludCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwgKF9fcGlkX3QgX19waWQs IHN0cnVjdCB0aW1lc3BlYyAqX190KSA7CgoKIyAzICIuLi9pbmNsdWRlL3NjaGVkLmgiIDIKCgpl eHRlcm4gaW50IF9fc2NoZWRfc2V0cGFyYW0gKF9fcGlkX3QgX19waWQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pOwpleHRl cm4gaW50IF9fc2NoZWRfZ2V0cGFyYW0gKF9fcGlkX3QgX19waWQsIHN0cnVjdCBzY2hlZF9wYXJh bSAqX19wYXJhbSk7CmV4dGVybiBpbnQgX19zY2hlZF9zZXRzY2hlZHVsZXIgKF9fcGlkX3QgX19w aWQsIGludCBfX3BvbGljeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z dCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pOwpleHRlcm4gaW50IF9fc2NoZWRfZ2V0c2No ZWR1bGVyIChfX3BpZF90IF9fcGlkKTsKZXh0ZXJuIGludCBfX3NjaGVkX3lpZWxkICh2b2lkKTsK ZXh0ZXJuIGludCBfX3NjaGVkX2dldF9wcmlvcml0eV9tYXggKGludCBfX2FsZ29yaXRobSk7CmV4 dGVybiBpbnQgX19zY2hlZF9nZXRfcHJpb3JpdHlfbWluIChpbnQgX19hbGdvcml0aG0pOwpleHRl cm4gaW50IF9fc2NoZWRfcnJfZ2V0X2ludGVydmFsIChfX3BpZF90IF9fcGlkLCBzdHJ1Y3QgdGlt ZXNwZWMgKl9fdCk7CgoKZXh0ZXJuIGludCBfX2Nsb25lIChpbnQgKCpfX2ZuKSAodm9pZCAqX19h cmcpLCB2b2lkICpfX2NoaWxkX3N0YWNrLAogICAgICAgICAgICAgICAgICAgIGludCBfX2ZsYWdz LCB2b2lkICpfX2FyZyk7CmV4dGVybiBpbnQgX19jbG9uZTIgKGludCAoKl9fZm4pICh2b2lkICpf X2FyZyksIHZvaWQgKl9fY2hpbGRfc3RhY2tfYmFzZSwKICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90IF9fY2hpbGRfc3RhY2tfc2l6ZSwgaW50IF9fZmxhZ3MsIHZvaWQgKl9fYXJnKTsKIyAyMSAi Li4vbGludXh0aHJlYWRzL3N5c2RlcHMvcHRocmVhZC9wdGhyZWFkLmgiIDIKIyAxICIuLi9pbmNs dWRlL3RpbWUuaCIgMQoKCgoKIyAxICIuLi90aW1lL3RpbWUuaCIgMQojIDMwICIuLi90aW1lL3Rp bWUuaCIKCgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4y L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM5ICIuLi90aW1lL3RpbWUuaCIgMgoKCgojIDEgIi4u L3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvYml0cy90aW1lLmgiIDEKIyA0MyAiLi4vdGlt ZS90aW1lLmgiIDIKIyAxMTggIi4uL3RpbWUvdGltZS5oIgpzdHJ1Y3QgdG0KewogIGludCB0bV9z ZWM7CiAgaW50IHRtX21pbjsKICBpbnQgdG1faG91cjsKICBpbnQgdG1fbWRheTsKICBpbnQgdG1f bW9uOwogIGludCB0bV95ZWFyOwogIGludCB0bV93ZGF5OwogIGludCB0bV95ZGF5OwogIGludCB0 bV9pc2RzdDsKCgogIGxvbmcgaW50IHRtX2dtdG9mZjsKICBfX2NvbnN0IGNoYXIgKnRtX3pvbmU7 CgoKCgp9OwoKCgoKc3RydWN0IGl0aW1lcnNwZWMKICB7CiAgICBzdHJ1Y3QgdGltZXNwZWMgaXRf aW50ZXJ2YWw7CiAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfdmFsdWU7CiAgfTsKCgpzdHJ1Y3Qgc2ln ZXZlbnQ7CiMgMTYzICIuLi90aW1lL3RpbWUuaCIKZXh0ZXJuIGNsb2NrX3QgY2xvY2sgKHZvaWQp IDsKCgpleHRlcm4gdGltZV90IHRpbWUgKHRpbWVfdCAqX190aW1lcikgOwoKCmV4dGVybiBkb3Vi bGUgZGlmZnRpbWUgKHRpbWVfdCBfX3RpbWUxLCB0aW1lX3QgX190aW1lMCkKICAgICBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIHRpbWVfdCBta3RpbWUgKHN0cnVjdCB0bSAq X190cCkgOwoKCgoKCmV4dGVybiBzaXplX3Qgc3RyZnRpbWUgKGNoYXIgKl9fcmVzdHJpY3QgX19z LCBzaXplX3QgX19tYXhzaXplLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3Ry dWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIDsKCgoKCmV4dGVybiBjaGFyICpzdHJwdGltZSAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIHN0cnVjdCB0bSAqX190cCkKICAgICA7CgoKCgoKZXh0 ZXJuIHN0cnVjdCB0bSAqZ210aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgOwoKCgpleHRl cm4gc3RydWN0IHRtICpsb2NhbHRpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSA7CgoKCgpl eHRlcm4gc3RydWN0IHRtICpnbXRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190 aW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmljdCBf X3RwKSA7CgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZV9yIChfX2NvbnN0IHRpbWVfdCAq X19yZXN0cmljdCBfX3RpbWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IHRtICpfX3Jlc3RyaWN0IF9fdHApIDsKCgoKCmV4dGVybiBjaGFyICphc2N0aW1lIChfX2NvbnN0 IHN0cnVjdCB0bSAqX190cCkgOwoKCmV4dGVybiBjaGFyICpjdGltZSAoX19jb25zdCB0aW1lX3Qg Kl9fdGltZXIpIDsKCgoKCgoKZXh0ZXJuIGNoYXIgKmFzY3RpbWVfciAoX19jb25zdCBzdHJ1Y3Qg dG0gKl9fcmVzdHJpY3QgX190cCwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0 cmljdCBfX2J1ZikgOwoKCmV4dGVybiBjaGFyICpjdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19y ZXN0cmljdCBfX3RpbWVyLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBf X2J1ZikgOwoKCgoKZXh0ZXJuIGNoYXIgKl9fdHpuYW1lWzJdOwpleHRlcm4gaW50IF9fZGF5bGln aHQ7CmV4dGVybiBsb25nIGludCBfX3RpbWV6b25lOwoKCgoKZXh0ZXJuIGNoYXIgKnR6bmFtZVsy XTsKCgoKZXh0ZXJuIHZvaWQgdHpzZXQgKHZvaWQpIDsKCgoKZXh0ZXJuIGludCBkYXlsaWdodDsK ZXh0ZXJuIGxvbmcgaW50IHRpbWV6b25lOwoKCgoKCmV4dGVybiBpbnQgc3RpbWUgKF9fY29uc3Qg dGltZV90ICpfX3doZW4pIDsKIyAyNzEgIi4uL3RpbWUvdGltZS5oIgpleHRlcm4gdGltZV90IHRp bWVnbSAoc3RydWN0IHRtICpfX3RwKSA7CgoKZXh0ZXJuIHRpbWVfdCB0aW1lbG9jYWwgKHN0cnVj dCB0bSAqX190cCkgOwoKCmV4dGVybiBpbnQgZHlzaXplIChpbnQgX195ZWFyKSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJuIGludCBuYW5vc2xlZXAgKF9fY29uc3Qgc3Ry dWN0IHRpbWVzcGVjICpfX3JlcXVlc3RlZF90aW1lLAogICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IHRpbWVzcGVjICpfX3JlbWFpbmluZykgOwoKCgpleHRlcm4gaW50IGNsb2NrX2dldHJlcyAo Y2xvY2tpZF90IF9fY2xvY2tfaWQsIHN0cnVjdCB0aW1lc3BlYyAqX19yZXMpIDsKCgpleHRlcm4g aW50IGNsb2NrX2dldHRpbWUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBzdHJ1Y3QgdGltZXNwZWMg Kl9fdHApIDsKCgpleHRlcm4gaW50IGNsb2NrX3NldHRpbWUgKGNsb2NraWRfdCBfX2Nsb2NrX2lk LCBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX190cCkKICAgICA7CgoKCmV4dGVybiBpbnQgY2xv Y2tfbmFub3NsZWVwIChjbG9ja2lkX3QgX19jbG9ja19pZCwgaW50IF9fZmxhZ3MsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXEsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtKSA7CgoKZXh0ZXJu IGludCBjbG9ja19nZXRjcHVjbG9ja2lkIChwaWRfdCBfX3BpZCwgY2xvY2tpZF90ICpfX2Nsb2Nr X2lkKSA7CgoKCgpleHRlcm4gaW50IHRpbWVyX2NyZWF0ZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQs CiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2lnZXZlbnQgKl9fcmVzdHJpY3QgX19l dnAsCiAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl90ICpfX3Jlc3RyaWN0IF9fdGltZXJp ZCkgOwoKCmV4dGVybiBpbnQgdGltZXJfZGVsZXRlICh0aW1lcl90IF9fdGltZXJpZCkgOwoKCmV4 dGVybiBpbnQgdGltZXJfc2V0dGltZSAodGltZXJfdCBfX3RpbWVyaWQsIGludCBfX2ZsYWdzLAog ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMgKl9fcmVz dHJpY3QgX192YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXRpbWVyc3Bl YyAqX19yZXN0cmljdCBfX292YWx1ZSkgOwoKCmV4dGVybiBpbnQgdGltZXJfZ2V0dGltZSAodGlt ZXJfdCBfX3RpbWVyaWQsIHN0cnVjdCBpdGltZXJzcGVjICpfX3ZhbHVlKQogICAgIDsKCgpleHRl cm4gaW50IHRpbWVyX2dldG92ZXJydW4gKHRpbWVyX3QgX190aW1lcmlkKSA7CiMgMzQyICIuLi90 aW1lL3RpbWUuaCIKZXh0ZXJuIGludCBnZXRkYXRlX2VycjsKCgoKCgpleHRlcm4gc3RydWN0IHRt ICpnZXRkYXRlIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nKSA7CiMgMzU3ICIuLi90aW1lL3RpbWUu aCIKZXh0ZXJuIGludCBnZXRkYXRlX3IgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3N0cmlu ZywKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3Jlc2J1ZnAp IDsKCgoKCiMgNiAiLi4vaW5jbHVkZS90aW1lLmgiIDIKCgpzdHJ1Y3QgdG07CgoKZXh0ZXJuIGNv bnN0IHVuc2lnbmVkIHNob3J0IGludCBfX21vbl95ZGF5WzJdWzEzXTsKCgpleHRlcm4gc3RydWN0 IHRtIF90bWJ1ZjsKCgpleHRlcm4gY2hhciAqX190enN0cmluZyAoY29uc3QgY2hhciAqc3RyaW5n KTsKCgpleHRlcm4gc2l6ZV90IF9fdHpuYW1lX2N1cl9tYXg7CgoKZXh0ZXJuIGludCBfX3VzZV90 emZpbGU7CgpleHRlcm4gdm9pZCBfX3R6ZmlsZV9yZWFkIChjb25zdCBjaGFyICpmaWxlLCBzaXpl X3QgZXh0cmEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipleHRyYXApOwpleHRl cm4gaW50IF9fdHpmaWxlX2NvbXB1dGUgKHRpbWVfdCB0aW1lciwgaW50IHVzZV9sb2NhbHRpbWUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKmxlYXBfY29ycmVjdCwgaW50 ICpsZWFwX2hpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKnRwKTsK ZXh0ZXJuIHZvaWQgX190emZpbGVfZGVmYXVsdCAoY29uc3QgY2hhciAqc3RkLCBjb25zdCBjaGFy ICpkc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50IHN0ZG9mZiwgbG9u ZyBpbnQgZHN0b2ZmKTsKCgoKCmV4dGVybiB0aW1lX3QgX19ta3RpbWVfaW50ZXJuYWwgKHN0cnVj dCB0bSAqX190cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICoo Kl9fZnVuYykgKGNvbnN0IHRpbWVfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICopLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0aW1lX3QgKl9fb2Zmc2V0KTsKZXh0ZXJuIHN0cnVjdCB0bSAqX19sb2Nh bHRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCB0bSAqX190cCk7CgpleHRlcm4gc3RydWN0IHRtICpfX2dtdGltZV9y IChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCk7CgoKCgoKZXh0ZXJuIGludCBf X29mZnRpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyLAogICAgICAgICAgICAgICAgICAgICAg bG9uZyBpbnQgX19vZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fdHAp OwoKZXh0ZXJuIGNoYXIgKl9fYXNjdGltZV9yIChfX2NvbnN0IHN0cnVjdCB0bSAqX190cCwgY2hh ciAqX19idWYpOwpleHRlcm4gdm9pZCBfX3R6c2V0ICh2b2lkKTsKCgpleHRlcm4gc3RydWN0IHRt ICpfX3R6X2NvbnZlcnQgKGNvbnN0IHRpbWVfdCAqdGltZXIsIGludCB1c2VfbG9jYWx0aW1lLCBz dHJ1Y3QgdG0gKnRwKTsKCgoKZXh0ZXJuIGxvbmcgaW50IF9fdHpuYW1lX21heCAodm9pZCk7Cgpl eHRlcm4gaW50IF9fbmFub3NsZWVwIChfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXF1ZXN0 ZWRfdGltZSwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbWFp bmluZyk7CmV4dGVybiBpbnQgX19nZXRkYXRlX3IgKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHN0 cnVjdCB0bSAqX19yZXNidWZwKTsKCgoKZXh0ZXJuIGludCBfX2dldGNsa3RjayAodm9pZCk7CiMg MjIgIi4uL2xpbnV4dGhyZWFkcy9zeXNkZXBzL3B0aHJlYWQvcHRocmVhZC5oIiAyCgoKCiMgMSAi Li4vbGludXh0aHJlYWRzL3N5c2RlcHMvcHRocmVhZC9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxCiMg MjYgIi4uL2xpbnV4dGhyZWFkcy9zeXNkZXBzL3B0aHJlYWQvcHRocmVhZC5oIiAyCiMgMSAiLi4v bGludXh0aHJlYWRzL3N5c2RlcHMvcHRocmVhZC9iaXRzL2luaXRzcGluLmgiIDEKIyAyNyAiLi4v bGludXh0aHJlYWRzL3N5c2RlcHMvcHRocmVhZC9wdGhyZWFkLmgiIDIKCgoKIyA1OSAiLi4vbGlu dXh0aHJlYWRzL3N5c2RlcHMvcHRocmVhZC9wdGhyZWFkLmgiCmVudW0KewogIFBUSFJFQURfQ1JF QVRFX0pPSU5BQkxFLAoKICBQVEhSRUFEX0NSRUFURV9ERVRBQ0hFRAoKfTsKCmVudW0KewogIFBU SFJFQURfSU5IRVJJVF9TQ0hFRCwKCiAgUFRIUkVBRF9FWFBMSUNJVF9TQ0hFRAoKfTsKCmVudW0K ewogIFBUSFJFQURfU0NPUEVfU1lTVEVNLAoKICBQVEhSRUFEX1NDT1BFX1BST0NFU1MKCn07Cgpl bnVtCnsKICBQVEhSRUFEX01VVEVYX1RJTUVEX05QLAogIFBUSFJFQURfTVVURVhfUkVDVVJTSVZF X05QLAogIFBUSFJFQURfTVVURVhfRVJST1JDSEVDS19OUCwKICBQVEhSRUFEX01VVEVYX0FEQVBU SVZFX05QCgogICwKICBQVEhSRUFEX01VVEVYX05PUk1BTCA9IFBUSFJFQURfTVVURVhfVElNRURf TlAsCiAgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUgPSBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRV9O UCwKICBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0sgPSBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0tf TlAsCiAgUFRIUkVBRF9NVVRFWF9ERUZBVUxUID0gUFRIUkVBRF9NVVRFWF9OT1JNQUwKCgoKICAs IFBUSFJFQURfTVVURVhfRkFTVF9OUCA9IFBUSFJFQURfTVVURVhfQURBUFRJVkVfTlAKCn07Cgpl bnVtCnsKICBQVEhSRUFEX1BST0NFU1NfUFJJVkFURSwKCiAgUFRIUkVBRF9QUk9DRVNTX1NIQVJF RAoKfTsKCgplbnVtCnsKICBQVEhSRUFEX1JXTE9DS19QUkVGRVJfUkVBREVSX05QLAogIFBUSFJF QURfUldMT0NLX1BSRUZFUl9XUklURVJfTlAsCiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1dSSVRF Ul9OT05SRUNVUlNJVkVfTlAsCiAgUFRIUkVBRF9SV0xPQ0tfREVGQVVMVF9OUCA9IFBUSFJFQURf UldMT0NLX1BSRUZFUl9XUklURVJfTlAKfTsKIyAxMzEgIi4uL2xpbnV4dGhyZWFkcy9zeXNkZXBz L3B0aHJlYWQvcHRocmVhZC5oIgpzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIKewogIHZv aWQgKCpfX3JvdXRpbmUpICh2b2lkICopOwogIHZvaWQgKl9fYXJnOwogIGludCBfX2NhbmNlbHR5 cGU7CiAgc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX3ByZXY7Cn07CgoKCmVudW0K ewogIFBUSFJFQURfQ0FOQ0VMX0VOQUJMRSwKCiAgUFRIUkVBRF9DQU5DRUxfRElTQUJMRQoKfTsK ZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxfREVGRVJSRUQsCgogIFBUSFJFQURfQ0FOQ0VMX0FTWU5D SFJPTk9VUwoKfTsKIyAxNjMgIi4uL2xpbnV4dGhyZWFkcy9zeXNkZXBzL3B0aHJlYWQvcHRocmVh ZC5oIgpleHRlcm4gaW50IHB0aHJlYWRfY3JlYXRlIChwdGhyZWFkX3QgKl9fcmVzdHJpY3QgX190 aHJlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9hdHRyX3Qg Kl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICooKl9f c3RhcnRfcm91dGluZSkgKHZvaWQgKiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQg Kl9fcmVzdHJpY3QgX19hcmcpIDsKCgpleHRlcm4gcHRocmVhZF90IHB0aHJlYWRfc2VsZiAodm9p ZCkgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9lcXVhbCAocHRocmVhZF90IF9fdGhyZWFkMSwgcHRo cmVhZF90IF9fdGhyZWFkMikgOwoKCmV4dGVybiB2b2lkIHB0aHJlYWRfZXhpdCAodm9pZCAqX19y ZXR2YWwpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIGlu dCBwdGhyZWFkX2pvaW4gKHB0aHJlYWRfdCBfX3RoLCB2b2lkICoqX190aHJlYWRfcmV0dXJuKSA7 CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2RldGFjaCAocHRocmVhZF90IF9fdGgpIDsKCgoKCgoK CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2luaXQgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIDsK CgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9kZXN0cm95IChwdGhyZWFkX2F0dHJfdCAqX19hdHRy KSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0ZGV0YWNoc3RhdGUgKHB0aHJlYWRfYXR0 cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg X19kZXRhY2hzdGF0ZSkgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGRldGFjaHN0YXRl IChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgKl9fZGV0YWNoc3RhdGUpIDsKCgpleHRlcm4gaW50IHB0aHJl YWRfYXR0cl9zZXRzY2hlZHBhcmFtIChwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHNj aGVkX3BhcmFtICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fcGFyYW0pIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBhcmFtIChf X2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHNjaGVkX3BhcmFtICpfX3Jlc3RyaWN0IF9fcGFyYW0pCiAgICAgOwoKCmV4 dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcG9saWN5IChwdGhyZWFkX2F0dHJfdCAqX19h dHRyLCBpbnQgX19wb2xpY3kpCiAgICAgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNj aGVkcG9saWN5IChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIGludCAqX19yZXN0cmljdCBfX3Bv bGljeSkKICAgICA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0aW5oZXJpdHNjaGVkIChw dGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBfX2luaGVyaXQpIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRpbmhl cml0c2NoZWQgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIGludCAqX19yZXN0cmljdCBfX2lu aGVyaXQpCiAgICAgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjb3BlIChwdGhyZWFk X2F0dHJfdCAqX19hdHRyLCBpbnQgX19zY29wZSkKICAgICA7CgoKZXh0ZXJuIGludCBwdGhyZWFk X2F0dHJfZ2V0c2NvcGUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2Nv cGUpIDsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0Z3VhcmRzaXplIChwdGhyZWFkX2F0 dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBfX2d1YXJkc2l6ZSkgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGd1YXJkc2l6ZSAo X19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fYXR0ciwgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fZ3VhcmRzaXplKQog ICAgIDsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2thZGRyIChwdGhyZWFk X2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv aWQgKl9fc3RhY2thZGRyKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2thZGRy IChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19hdHRyLCB2b2lkICoqX19yZXN0cmljdCBfX3N0YWNrYWRkcikK ICAgICA7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2sgKHB0aHJlYWRfYXR0 cl90ICpfX2F0dHIsIHZvaWQgKl9fc3RhY2thZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90IF9fc3RhY2tzaXplKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJf Z2V0c3RhY2sgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKl9fcmVzdHJpY3QgX19zdGFja2Fk ZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3Qg X19zdGFja3NpemUpIDsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUg KHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZV90IF9fc3RhY2tzaXplKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0 c3RhY2tzaXplIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCBzaXplX3QgKl9fcmVzdHJpY3QgX19z dGFja3NpemUpCiAgICAgOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0YXR0cl9ucCAocHRocmVh ZF90IF9fdGgsIHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIDsKCgoKCgoKZXh0ZXJuIGludCBwdGhy ZWFkX3NldHNjaGVkcGFyYW0gKHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQsIGludCBfX3BvbGlj eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHNjaGVk X3BhcmFtICpfX3BhcmFtKQogICAgIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0c2NoZWRwYXJh bSAocHRocmVhZF90IF9fdGFyZ2V0X3RocmVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCAqX19yZXN0cmljdCBfX3BvbGljeSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19yZXN0cmljdCBfX3BhcmFtKQogICAgIDsK CgoKZXh0ZXJuIGludCBwdGhyZWFkX2dldGNvbmN1cnJlbmN5ICh2b2lkKSA7CgoKZXh0ZXJuIGlu dCBwdGhyZWFkX3NldGNvbmN1cnJlbmN5IChpbnQgX19sZXZlbCkgOwoKCgoKCgoKZXh0ZXJuIGlu dCBwdGhyZWFkX3lpZWxkICh2b2lkKSA7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9p bml0IChwdGhyZWFkX211dGV4X3QgKl9fcmVzdHJpY3QgX19tdXRleCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqX19yZXN0cmljdAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tdXRleF9hdHRyKSA7CgoKZXh0ZXJuIGlu dCBwdGhyZWFkX211dGV4X2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgOwoKCmV4 dGVybiBpbnQgcHRocmVhZF9tdXRleF90cnlsb2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgp IDsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfbG9jayAocHRocmVhZF9tdXRleF90ICpfX211 dGV4KSA7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF90aW1lZGxvY2sgKHB0aHJlYWRfbXV0 ZXhfdCAqX19yZXN0cmljdCBfX211dGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2Fic3RpbWUpIDsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX211 dGV4X3VubG9jayAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSA7CgoKCgoKCmV4dGVybiBpbnQg cHRocmVhZF9tdXRleGF0dHJfaW5pdCAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSA7CgoK ZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95IChwdGhyZWFkX211dGV4YXR0cl90 ICpfX2F0dHIpIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHBzaGFyZWQgKF9f Y29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkgOwoKCmV4dGVybiBpbnQg cHRocmVhZF9tdXRleGF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQp IDsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUgKHB0aHJlYWRfbXV0 ZXhhdHRyX3QgKl9fYXR0ciwgaW50IF9fa2luZCkKICAgICA7CgoKZXh0ZXJuIGludCBwdGhyZWFk X211dGV4YXR0cl9nZXR0eXBlIChfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fcmVzdHJp Y3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIGludCAqX19y ZXN0cmljdCBfX2tpbmQpIDsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2luaXQgKHB0 aHJlYWRfY29uZF90ICpfX3Jlc3RyaWN0IF9fY29uZCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19jb25zdCBwdGhyZWFkX2NvbmRhdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19jb25kX2F0dHIpIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29u ZF9kZXN0cm95IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFk X2NvbmRfc2lnbmFsIChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSA7CgoKZXh0ZXJuIGludCBwdGhy ZWFkX2NvbmRfYnJvYWRjYXN0IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSA7CgoKCmV4dGVybiBp bnQgcHRocmVhZF9jb25kX3dhaXQgKHB0aHJlYWRfY29uZF90ICpfX3Jlc3RyaWN0IF9fY29uZCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0 IF9fbXV0ZXgpIDsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF90aW1lZHdhaXQgKHB0aHJl YWRfY29uZF90ICpfX3Jlc3RyaWN0IF9fY29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwdGhyZWFkX211dGV4X3QgKl9fcmVzdHJpY3QgX19tdXRleCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmlj dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgOwoKCgoKZXh0 ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2luaXQgKHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRy KSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfY29uZGF0 dHJfdCAqX19hdHRyKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2dldHBzaGFyZWQg KF9fY29uc3QgcHRocmVhZF9jb25kYXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkgOwoKCmV4dGVybiBpbnQg cHRocmVhZF9jb25kYXR0cl9zZXRwc2hhcmVkIChwdGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIDsK CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfaW5pdCAocHRocmVhZF9yd2xvY2tfdCAq X19yZXN0cmljdCBfX3J3bG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19hdHRyKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19kZXN0cm95 IChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xv Y2tfcmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgOwoKCmV4dGVybiBpbnQgcHRo cmVhZF9yd2xvY2tfdHJ5cmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgOwoKCgpl eHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3RpbWVkcmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpf X3Jlc3RyaWN0IF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2Fic3RpbWUpIDsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3 bG9ja193cmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSA7CgoKZXh0ZXJuIGludCBw dGhyZWFkX3J3bG9ja190cnl3cmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSA7CgoK CmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdGltZWR3cmxvY2sgKHB0aHJlYWRfcndsb2NrX3Qg Kl9fcmVzdHJpY3QgX19yd2xvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgOwoKCgpleHRlcm4gaW50IHB0aHJlYWRf cndsb2NrX3VubG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIDsKCgoKCgpleHRlcm4g aW50IHB0aHJlYWRfcndsb2NrYXR0cl9pbml0IChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRy KSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZGVzdHJveSAocHRocmVhZF9yd2xv Y2thdHRyX3QgKl9fYXR0cikgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2dldHBz aGFyZWQgKF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkgOwoK CmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfcndsb2Nr YXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBfX3BzaGFyZWQpIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9nZXRraW5k X25wIChfX2NvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19wcmVmKSA7CgoKZXh0ZXJuIGludCBw dGhyZWFkX3J3bG9ja2F0dHJfc2V0a2luZF9ucCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHJlZikg OwojIDUwOSAiLi4vbGludXh0aHJlYWRzL3N5c2RlcHMvcHRocmVhZC9wdGhyZWFkLmgiCmV4dGVy biBpbnQgcHRocmVhZF9zcGluX2luaXQgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrLCBpbnQg X19wc2hhcmVkKQogICAgIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl9kZXN0cm95IChwdGhy ZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zcGluX2xvY2sg KHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5f dHJ5bG9jayAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2spIDsKCgpleHRlcm4gaW50IHB0aHJl YWRfc3Bpbl91bmxvY2sgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrKSA7CgoKCgpleHRlcm4g aW50IHB0aHJlYWRfYmFycmllcl9pbml0IChwdGhyZWFkX2JhcnJpZXJfdCAqX19yZXN0cmljdCBf X2JhcnJpZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVh ZF9iYXJyaWVyYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fYXR0ciwgdW5zaWduZWQgaW50IF9fY291bnQpIDsKCmV4dGVybiBpbnQgcHRocmVhZF9i YXJyaWVyX2Rlc3Ryb3kgKHB0aHJlYWRfYmFycmllcl90ICpfX2JhcnJpZXIpIDsKCmV4dGVybiBp bnQgcHRocmVhZF9iYXJyaWVyYXR0cl9pbml0IChwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKl9fYXR0 cikgOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfYmFy cmllcmF0dHJfdCAqX19hdHRyKSA7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcmF0dHJfZ2V0 cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVk KSA7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcmF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9i YXJyaWVyYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgX19wc2hhcmVkKSA7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcl93YWl0 IChwdGhyZWFkX2JhcnJpZXJfdCAqX19iYXJyaWVyKSA7CiMgNTU2ICIuLi9saW51eHRocmVhZHMv c3lzZGVwcy9wdGhyZWFkL3B0aHJlYWQuaCIKZXh0ZXJuIGludCBwdGhyZWFkX2tleV9jcmVhdGUg KHB0aHJlYWRfa2V5X3QgKl9fa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p ZCAoKl9fZGVzdHJfZnVuY3Rpb24pICh2b2lkICopKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2tl eV9kZWxldGUgKHB0aHJlYWRfa2V5X3QgX19rZXkpIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0 c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19rZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19jb25zdCB2b2lkICpfX3BvaW50ZXIpIDsKCgpleHRlcm4gdm9pZCAqcHRocmVhZF9n ZXRzcGVjaWZpYyAocHRocmVhZF9rZXlfdCBfX2tleSkgOwojIDU3NiAiLi4vbGludXh0aHJlYWRz L3N5c2RlcHMvcHRocmVhZC9wdGhyZWFkLmgiCmV4dGVybiBpbnQgcHRocmVhZF9vbmNlIChwdGhy ZWFkX29uY2VfdCAqX19vbmNlX2NvbnRyb2wsCiAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk ICgqX19pbml0X3JvdXRpbmUpICh2b2lkKSkgOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0 Y2FuY2Vsc3RhdGUgKGludCBfX3N0YXRlLCBpbnQgKl9fb2xkc3RhdGUpIDsKCgoKZXh0ZXJuIGlu dCBwdGhyZWFkX3NldGNhbmNlbHR5cGUgKGludCBfX3R5cGUsIGludCAqX19vbGR0eXBlKSA7CgoK ZXh0ZXJuIGludCBwdGhyZWFkX2NhbmNlbCAocHRocmVhZF90IF9fdGhyZWFkKSA7CgoKCgpleHRl cm4gdm9pZCBwdGhyZWFkX3Rlc3RjYW5jZWwgKHZvaWQpIDsKIyA2MTAgIi4uL2xpbnV4dGhyZWFk cy9zeXNkZXBzL3B0aHJlYWQvcHRocmVhZC5oIgpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVw X3B1c2ggKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKiksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19hcmcpIDsKCgoKCgoKCmV4 dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcG9wIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9i dWZmZXIgKl9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f ZXhlY3V0ZSkgOwojIDYzMSAiLi4vbGludXh0aHJlYWRzL3N5c2RlcHMvcHRocmVhZC9wdGhyZWFk LmgiCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcHVzaF9kZWZlciAoc3RydWN0IF9wdGhy ZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB2b2lkICgqX19yb3V0aW5lKSAodm9pZCAqKSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX2FyZykgOwojIDY0MiAiLi4vbGludXh0 aHJlYWRzL3N5c2RlcHMvcHRocmVhZC9wdGhyZWFkLmgiCmV4dGVybiB2b2lkIF9wdGhyZWFkX2Ns ZWFudXBfcG9wX3Jlc3RvcmUgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZm ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2V4ZWN1 dGUpIDsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0Y3B1Y2xvY2tpZCAocHRocmVhZF90IF9f dGhyZWFkX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2tpZF90ICpf X2Nsb2NrX2lkKSA7CiMgNjcxICIuLi9saW51eHRocmVhZHMvc3lzZGVwcy9wdGhyZWFkL3B0aHJl YWQuaCIKZXh0ZXJuIGludCBwdGhyZWFkX2F0Zm9yayAodm9pZCAoKl9fcHJlcGFyZSkgKHZvaWQp LAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19wYXJlbnQpICh2b2lkKSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgOwoKCgoKZXh0 ZXJuIHZvaWQgcHRocmVhZF9raWxsX290aGVyX3RocmVhZHNfbnAgKHZvaWQpIDsKCgojIDIgIi4u L2luY2x1ZGUvcHRocmVhZC5oIiAyCgoKZXh0ZXJuIHZvaWQgX19wdGhyZWFkX2luaXRpYWxpemUg KHZvaWQpIF9fYXR0cmlidXRlX18gKCh3ZWFrKSk7CgpleHRlcm4gdm9pZCBfX3B0aHJlYWRfaW5p dGlhbGl6ZV9taW5pbWFsICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgod2VhaykpOwojIDMwICJwdGhy ZWFkLmMiIDIKIyAxICJpbnRlcm5hbHMuaCIgMQojIDIyICJpbnRlcm5hbHMuaCIKIyAxICIuLi9p bmNsdWRlL2xpbWl0cy5oIiAxCiMgMTI0ICIuLi9pbmNsdWRlL2xpbWl0cy5oIgojIDEgIi91c3Iv bGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvbGltaXRzLmgiIDEgMwoj IDEyNSAiLi4vaW5jbHVkZS9saW1pdHMuaCIgMgojIDE0NCAiLi4vaW5jbHVkZS9saW1pdHMuaCIK IyAxICIuLi9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAxCiMgMSAiLi4vcG9zaXgvYml0cy9w b3NpeDFfbGltLmgiIDEKIyAxMjYgIi4uL3Bvc2l4L2JpdHMvcG9zaXgxX2xpbS5oIgojIDEgIi4u L2xpbnV4dGhyZWFkcy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9iaXRzL2xvY2FsX2xpbS5oIiAx CiMgMzYgIi4uL2xpbnV4dGhyZWFkcy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9iaXRzL2xvY2Fs X2xpbS5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LXRoaXMvaW5jbHVkZS9saW51eC9saW1pdHMuaCIg MSAzCiMgMzcgIi4uL2xpbnV4dGhyZWFkcy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9iaXRzL2xv Y2FsX2xpbS5oIiAyCiMgMTI3ICIuLi9wb3NpeC9iaXRzL3Bvc2l4MV9saW0uaCIgMgojIDIgIi4u L2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDIKIyAxNDUgIi4uL2luY2x1ZGUvbGltaXRzLmgi IDIKCgoKIyAxICIuLi9pbmNsdWRlL2JpdHMvcG9zaXgyX2xpbS5oIiAxCiMgMSAiLi4vcG9zaXgv Yml0cy9wb3NpeDJfbGltLmgiIDEKIyAyICIuLi9pbmNsdWRlL2JpdHMvcG9zaXgyX2xpbS5oIiAy CiMgMTQ5ICIuLi9pbmNsdWRlL2xpbWl0cy5oIiAyCgoKCiMgMSAiLi4vaW5jbHVkZS9iaXRzL3hv cGVuX2xpbS5oIiAxCiMgMzQgIi4uL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIKIyAxICIvdXNy L3NyYy9nbGliYy0yLjIuNS1idWlsZC9iaXRzL3N0ZGlvX2xpbS5oIiAxCiMgMzUgIi4uL2luY2x1 ZGUvYml0cy94b3Blbl9saW0uaCIgMgojIDE1MyAiLi4vaW5jbHVkZS9saW1pdHMuaCIgMgojIDIz ICJpbnRlcm5hbHMuaCIgMgojIDEgIi4uL2luY2x1ZGUvcmVzb2x2LmgiIDEKIyAxMSAiLi4vaW5j bHVkZS9yZXNvbHYuaCIKIyAxICIuLi9yZXNvbHYvcmVzb2x2LmgiIDEKIyA1NSAiLi4vcmVzb2x2 L3Jlc29sdi5oIgojIDEgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3N5cy9wYXJhbS5oIiAx CiMgMjIgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3N5cy9wYXJhbS5oIgojIDEgIi4uL2lu Y2x1ZGUvbGltaXRzLmgiIDEKIyAxNDQgIi4uL2luY2x1ZGUvbGltaXRzLmgiCiMgMSAiLi4vaW5j bHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMQojIDE0NSAiLi4vaW5jbHVkZS9saW1pdHMuaCIgMgoK CgojIDEgIi4uL2luY2x1ZGUvYml0cy9wb3NpeDJfbGltLmgiIDEKIyAxNDkgIi4uL2luY2x1ZGUv bGltaXRzLmgiIDIKIyAyMyAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgvc3lzL3BhcmFtLmgi IDIKCiMgMSAiL3Vzci9zcmMvbGludXgtdGhpcy9pbmNsdWRlL2xpbnV4L3BhcmFtLmgiIDEgMwoK CgojIDEgIi91c3Ivc3JjL2xpbnV4LXRoaXMvaW5jbHVkZS9hc20vcGFyYW0uaCIgMSAzCiMgNSAi L3Vzci9zcmMvbGludXgtdGhpcy9pbmNsdWRlL2xpbnV4L3BhcmFtLmgiIDIgMwojIDI1ICIuLi9z eXNkZXBzL3VuaXgvc3lzdi9saW51eC9zeXMvcGFyYW0uaCIgMgojIDQyICIuLi9zeXNkZXBzL3Vu aXgvc3lzdi9saW51eC9zeXMvcGFyYW0uaCIKIyAxICIuLi9pbmNsdWRlL3N5cy90eXBlcy5oIiAx CiMgNDMgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3N5cy9wYXJhbS5oIiAyCiMgNTYgIi4u L3Jlc29sdi9yZXNvbHYuaCIgMgoKIyAxICIuLi9pbmNsdWRlL3N5cy9iaXR5cGVzLmgiIDEKIyAx ICIuLi9yZXNvbHYvc3lzL2JpdHlwZXMuaCIgMQoKCiMgMSAiLi4vaW5jbHVkZS9zeXMvdHlwZXMu aCIgMQojIDQgIi4uL3Jlc29sdi9zeXMvYml0eXBlcy5oIiAyCiMgMiAiLi4vaW5jbHVkZS9zeXMv Yml0eXBlcy5oIiAyCiMgNTggIi4uL3Jlc29sdi9yZXNvbHYuaCIgMgoKCgojIDEgIi4uL2luY2x1 ZGUvc3lzL2NkZWZzLmgiIDEKIyA2MiAiLi4vcmVzb2x2L3Jlc29sdi5oIiAyCgoKIyAxICIuLi9p bmNsdWRlL25ldGluZXQvaW4uaCIgMQojIDEgIi4uL2luZXQvbmV0aW5ldC9pbi5oIiAxCiMgMjMg Ii4uL2luZXQvbmV0aW5ldC9pbi5oIgojIDEgIi4uL3N5c2RlcHMvZ2VuZXJpYy9zdGRpbnQuaCIg MQojIDI4ICIuLi9zeXNkZXBzL2dlbmVyaWMvc3RkaW50LmgiCiMgMSAiLi4vc3lzZGVwcy93b3Jk c2l6ZS0zMi9iaXRzL3dvcmRzaXplLmgiIDEKIyAyOSAiLi4vc3lzZGVwcy9nZW5lcmljL3N0ZGlu dC5oIiAyCiMgNDkgIi4uL3N5c2RlcHMvZ2VuZXJpYy9zdGRpbnQuaCIKdHlwZWRlZiB1bnNpZ25l ZCBjaGFyIHVpbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVpbnQxNl90OwoKdHlw ZWRlZiB1bnNpZ25lZCBpbnQgdWludDMyX3Q7CgoKCgoKX19leHRlbnNpb25fXwp0eXBlZGVmIHVu c2lnbmVkIGxvbmcgbG9uZyBpbnQgdWludDY0X3Q7CgoKCgoKCnR5cGVkZWYgc2lnbmVkIGNoYXIg aW50X2xlYXN0OF90Owp0eXBlZGVmIHNob3J0IGludCBpbnRfbGVhc3QxNl90Owp0eXBlZGVmIGlu dCBpbnRfbGVhc3QzMl90OwoKCgpfX2V4dGVuc2lvbl9fCnR5cGVkZWYgbG9uZyBsb25nIGludCBp bnRfbGVhc3Q2NF90OwoKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludF9sZWFzdDhfdDsKdHlw ZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgdWludF9sZWFzdDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQg aW50IHVpbnRfbGVhc3QzMl90OwoKCgpfX2V4dGVuc2lvbl9fCnR5cGVkZWYgdW5zaWduZWQgbG9u ZyBsb25nIGludCB1aW50X2xlYXN0NjRfdDsKCgoKCgoKdHlwZWRlZiBzaWduZWQgY2hhciBpbnRf ZmFzdDhfdDsKCgoKCgp0eXBlZGVmIGludCBpbnRfZmFzdDE2X3Q7CnR5cGVkZWYgaW50IGludF9m YXN0MzJfdDsKX19leHRlbnNpb25fXwp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgaW50X2Zhc3Q2NF90 OwoKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludF9mYXN0OF90OwoKCgoKCnR5cGVkZWYgdW5z aWduZWQgaW50IHVpbnRfZmFzdDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnRfZmFzdDMy X3Q7Cl9fZXh0ZW5zaW9uX18KdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnRfZmFz dDY0X3Q7CiMgMTI5ICIuLi9zeXNkZXBzL2dlbmVyaWMvc3RkaW50LmgiCnR5cGVkZWYgdW5zaWdu ZWQgaW50IHVpbnRwdHJfdDsKIyAxMzggIi4uL3N5c2RlcHMvZ2VuZXJpYy9zdGRpbnQuaCIKX19l eHRlbnNpb25fXwp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgaW50bWF4X3Q7Cl9fZXh0ZW5zaW9uX18K dHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnRtYXhfdDsKIyAyNCAiLi4vaW5ldC9u ZXRpbmV0L2luLmgiIDIKCgoKCgoKZW51bQogIHsKICAgIElQUFJPVE9fSVAgPSAwLAoKICAgIElQ UFJPVE9fSE9QT1BUUyA9IDAsCgogICAgSVBQUk9UT19JQ01QID0gMSwKCiAgICBJUFBST1RPX0lH TVAgPSAyLAoKICAgIElQUFJPVE9fSVBJUCA9IDQsCgogICAgSVBQUk9UT19UQ1AgPSA2LAoKICAg IElQUFJPVE9fRUdQID0gOCwKCiAgICBJUFBST1RPX1BVUCA9IDEyLAoKICAgIElQUFJPVE9fVURQ ID0gMTcsCgogICAgSVBQUk9UT19JRFAgPSAyMiwKCiAgICBJUFBST1RPX1RQID0gMjksCgogICAg SVBQUk9UT19JUFY2ID0gNDEsCgogICAgSVBQUk9UT19ST1VUSU5HID0gNDMsCgogICAgSVBQUk9U T19GUkFHTUVOVCA9IDQ0LAoKICAgIElQUFJPVE9fUlNWUCA9IDQ2LAoKICAgIElQUFJPVE9fR1JF ID0gNDcsCgogICAgSVBQUk9UT19FU1AgPSA1MCwKCiAgICBJUFBST1RPX0FIID0gNTEsCgogICAg SVBQUk9UT19JQ01QVjYgPSA1OCwKCiAgICBJUFBST1RPX05PTkUgPSA1OSwKCiAgICBJUFBST1RP X0RTVE9QVFMgPSA2MCwKCiAgICBJUFBST1RPX01UUCA9IDkyLAoKICAgIElQUFJPVE9fRU5DQVAg PSA5OCwKCiAgICBJUFBST1RPX1BJTSA9IDEwMywKCiAgICBJUFBST1RPX0NPTVAgPSAxMDgsCgog ICAgSVBQUk9UT19SQVcgPSAyNTUsCgogICAgSVBQUk9UT19NQVgKICB9OwoKCgp0eXBlZGVmIHVp bnQxNl90IGluX3BvcnRfdDsKCgplbnVtCiAgewogICAgSVBQT1JUX0VDSE8gPSA3LAogICAgSVBQ T1JUX0RJU0NBUkQgPSA5LAogICAgSVBQT1JUX1NZU1RBVCA9IDExLAogICAgSVBQT1JUX0RBWVRJ TUUgPSAxMywKICAgIElQUE9SVF9ORVRTVEFUID0gMTUsCiAgICBJUFBPUlRfRlRQID0gMjEsCiAg ICBJUFBPUlRfVEVMTkVUID0gMjMsCiAgICBJUFBPUlRfU01UUCA9IDI1LAogICAgSVBQT1JUX1RJ TUVTRVJWRVIgPSAzNywKICAgIElQUE9SVF9OQU1FU0VSVkVSID0gNDIsCiAgICBJUFBPUlRfV0hP SVMgPSA0MywKICAgIElQUE9SVF9NVFAgPSA1NywKCiAgICBJUFBPUlRfVEZUUCA9IDY5LAogICAg SVBQT1JUX1JKRSA9IDc3LAogICAgSVBQT1JUX0ZJTkdFUiA9IDc5LAogICAgSVBQT1JUX1RUWUxJ TksgPSA4NywKICAgIElQUE9SVF9TVVBEVVAgPSA5NSwKCgogICAgSVBQT1JUX0VYRUNTRVJWRVIg PSA1MTIsCiAgICBJUFBPUlRfTE9HSU5TRVJWRVIgPSA1MTMsCiAgICBJUFBPUlRfQ01EU0VSVkVS ID0gNTE0LAogICAgSVBQT1JUX0VGU1NFUlZFUiA9IDUyMCwKCgogICAgSVBQT1JUX0JJRkZVRFAg PSA1MTIsCiAgICBJUFBPUlRfV0hPU0VSVkVSID0gNTEzLAogICAgSVBQT1JUX1JPVVRFU0VSVkVS ID0gNTIwLAoKCiAgICBJUFBPUlRfUkVTRVJWRUQgPSAxMDI0LAoKCiAgICBJUFBPUlRfVVNFUlJF U0VSVkVEID0gNTAwMAogIH07CgoKCnR5cGVkZWYgdWludDMyX3QgaW5fYWRkcl90OwpzdHJ1Y3Qg aW5fYWRkcgogIHsKICAgIGluX2FkZHJfdCBzX2FkZHI7CiAgfTsKIyAxOTAgIi4uL2luZXQvbmV0 aW5ldC9pbi5oIgpzdHJ1Y3QgaW42X2FkZHIKICB7CiAgICB1bmlvbgogICAgICB7CiAgICAgICAg dWludDhfdCB1Nl9hZGRyOFsxNl07CiAgICAgICAgdWludDE2X3QgdTZfYWRkcjE2WzhdOwogICAg ICAgIHVpbnQzMl90IHU2X2FkZHIzMls0XTsKICAgICAgfSBpbjZfdTsKCgoKICB9OwoKZXh0ZXJu IGNvbnN0IHN0cnVjdCBpbjZfYWRkciBpbjZhZGRyX2FueTsKZXh0ZXJuIGNvbnN0IHN0cnVjdCBp bjZfYWRkciBpbjZhZGRyX2xvb3BiYWNrOwoKCgoKCgoKIyAxICIuLi9zeXNkZXBzL3VuaXgvc3lz di9saW51eC9iaXRzL3NvY2tldC5oIiAxCiMgMjkgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4 L2JpdHMvc29ja2V0LmgiCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8z LjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzAgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4 L2JpdHMvc29ja2V0LmgiIDIKCiMgMSAiLi4vaW5jbHVkZS9saW1pdHMuaCIgMQojIDE0NCAiLi4v aW5jbHVkZS9saW1pdHMuaCIKIyAxICIuLi9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAxCiMg MTQ1ICIuLi9pbmNsdWRlL2xpbWl0cy5oIiAyCgoKCiMgMSAiLi4vaW5jbHVkZS9iaXRzL3Bvc2l4 Ml9saW0uaCIgMQojIDE0OSAiLi4vaW5jbHVkZS9saW1pdHMuaCIgMgojIDMyICIuLi9zeXNkZXBz L3VuaXgvc3lzdi9saW51eC9iaXRzL3NvY2tldC5oIiAyCiMgMSAiLi4vaW5jbHVkZS9zeXMvdHlw ZXMuaCIgMQojIDMzICIuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9iaXRzL3NvY2tldC5oIiAy CiMgNDEgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2JpdHMvc29ja2V0LmgiCmVudW0gX19z b2NrZXRfdHlwZQp7CiAgU09DS19TVFJFQU0gPSAxLAoKCiAgU09DS19ER1JBTSA9IDIsCgoKICBT T0NLX1JBVyA9IDMsCgogIFNPQ0tfUkRNID0gNCwKCiAgU09DS19TRVFQQUNLRVQgPSA1LAoKCiAg U09DS19QQUNLRVQgPSAxMAoKCgp9OwojIDE0MiAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgv Yml0cy9zb2NrZXQuaCIKIyAxICIuLi9zeXNkZXBzL2dlbmVyaWMvYml0cy9zb2NrYWRkci5oIiAx CiMgMjkgIi4uL3N5c2RlcHMvZ2VuZXJpYy9iaXRzL3NvY2thZGRyLmgiCnR5cGVkZWYgdW5zaWdu ZWQgc2hvcnQgaW50IHNhX2ZhbWlseV90OwojIDE0MyAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGlu dXgvYml0cy9zb2NrZXQuaCIgMgoKCnN0cnVjdCBzb2NrYWRkcgogIHsKICAgIHNhX2ZhbWlseV90 IHNhX2ZhbWlseTsKICAgIGNoYXIgc2FfZGF0YVsxNF07CiAgfTsKIyAxNjIgIi4uL3N5c2RlcHMv dW5peC9zeXN2L2xpbnV4L2JpdHMvc29ja2V0LmgiCnN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlCiAg ewogICAgc2FfZmFtaWx5X3Qgc3NfZmFtaWx5OwogICAgX191aW50MzJfdCBfX3NzX2FsaWduOwog ICAgY2hhciBfX3NzX3BhZGRpbmdbKDEyOCAtICgyICogc2l6ZW9mIChfX3VpbnQzMl90KSkpXTsK ICB9OwoKCgplbnVtCiAgewogICAgTVNHX09PQiA9IDB4MDEsCgogICAgTVNHX1BFRUsgPSAweDAy LAoKICAgIE1TR19ET05UUk9VVEUgPSAweDA0LAoKCgogICAgTVNHX1RSWUhBUkQgPSBNU0dfRE9O VFJPVVRFLAoKCiAgICBNU0dfQ1RSVU5DID0gMHgwOCwKCiAgICBNU0dfUFJPWFkgPSAweDEwLAoK ICAgIE1TR19UUlVOQyA9IDB4MjAsCgogICAgTVNHX0RPTlRXQUlUID0gMHg0MCwKCiAgICBNU0df RU9SID0gMHg4MCwKCiAgICBNU0dfV0FJVEFMTCA9IDB4MTAwLAoKICAgIE1TR19GSU4gPSAweDIw MCwKCiAgICBNU0dfU1lOID0gMHg0MDAsCgogICAgTVNHX0NPTkZJUk0gPSAweDgwMCwKCiAgICBN U0dfUlNUID0gMHgxMDAwLAoKICAgIE1TR19FUlJRVUVVRSA9IDB4MjAwMCwKCiAgICBNU0dfTk9T SUdOQUwgPSAweDQwMDAsCgogICAgTVNHX01PUkUgPSAweDgwMDAKCiAgfTsKCgoKCnN0cnVjdCBt c2doZHIKICB7CiAgICB2b2lkICptc2dfbmFtZTsKICAgIHNvY2tsZW5fdCBtc2dfbmFtZWxlbjsK CiAgICBzdHJ1Y3QgaW92ZWMgKm1zZ19pb3Y7CiAgICBpbnQgbXNnX2lvdmxlbjsKCiAgICB2b2lk ICptc2dfY29udHJvbDsKICAgIHNvY2tsZW5fdCBtc2dfY29udHJvbGxlbjsKCiAgICBpbnQgbXNn X2ZsYWdzOwogIH07CgoKc3RydWN0IGNtc2doZHIKICB7CiAgICBzaXplX3QgY21zZ19sZW47Cgog ICAgaW50IGNtc2dfbGV2ZWw7CiAgICBpbnQgY21zZ190eXBlOwoKICAgIF9fZXh0ZW5zaW9uX18g dW5zaWduZWQgY2hhciBfX2Ntc2dfZGF0YSBbXTsKCiAgfTsKIyAyNTcgIi4uL3N5c2RlcHMvdW5p eC9zeXN2L2xpbnV4L2JpdHMvc29ja2V0LmgiCmV4dGVybiBzdHJ1Y3QgY21zZ2hkciAqX19jbXNn X254dGhkciAoc3RydWN0IG1zZ2hkciAqX19taGRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBjbXNnaGRyICpfX2Ntc2cpIDsKCgoKCmV4dGVybiBfX2lubGlu ZSBzdHJ1Y3QgY21zZ2hkciAqCl9fY21zZ19ueHRoZHIgKHN0cnVjdCBtc2doZHIgKl9fbWhkciwg c3RydWN0IGNtc2doZHIgKl9fY21zZykKewogIGlmICgoc2l6ZV90KSBfX2Ntc2ctPmNtc2dfbGVu IDwgc2l6ZW9mIChzdHJ1Y3QgY21zZ2hkcikpCgogICAgcmV0dXJuIDA7CgogIF9fY21zZyA9IChz dHJ1Y3QgY21zZ2hkciAqKSAoKHVuc2lnbmVkIGNoYXIgKikgX19jbXNnCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICArICgoKF9fY21zZy0+Y21zZ19sZW4pICsgc2l6ZW9mIChzaXplX3Qp IC0gMSkgJiAoc2l6ZV90KSB+KHNpemVvZiAoc2l6ZV90KSAtIDEpKSk7CiAgaWYgKCh1bnNpZ25l ZCBjaGFyICopIChfX2Ntc2cgKyAxKSA+ICgodW5zaWduZWQgY2hhciAqKSBfX21oZHItPm1zZ19j b250cm9sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIF9fbWhkci0+ bXNnX2NvbnRyb2xsZW4pCiAgICAgIHx8ICgodW5zaWduZWQgY2hhciAqKSBfX2Ntc2cgKyAoKChf X2Ntc2ctPmNtc2dfbGVuKSArIHNpemVvZiAoc2l6ZV90KSAtIDEpICYgKHNpemVfdCkgfihzaXpl b2YgKHNpemVfdCkgLSAxKSkKICAgICAgICAgID4gKCh1bnNpZ25lZCBjaGFyICopIF9fbWhkci0+ bXNnX2NvbnRyb2wgKyBfX21oZHItPm1zZ19jb250cm9sbGVuKSkpCgogICAgcmV0dXJuIDA7CiAg cmV0dXJuIF9fY21zZzsKfQoKCgoKZW51bQogIHsKICAgIFNDTV9SSUdIVFMgPSAweDAxLAoKCiAg ICBTQ01fQ1JFREVOVElBTFMgPSAweDAyLAoKCiAgICBfX1NDTV9DT05ORUNUID0gMHgwMwogIH07 CgoKCnN0cnVjdCB1Y3JlZAp7CiAgcGlkX3QgcGlkOwogIHVpZF90IHVpZDsKICBnaWRfdCBnaWQ7 Cn07CgoKIyAxICIvdXNyL3NyYy9saW51eC10aGlzL2luY2x1ZGUvYXNtL3NvY2tldC5oIiAxIDMK CgoKIyAxICIvdXNyL3NyYy9saW51eC10aGlzL2luY2x1ZGUvYXNtL3NvY2tpb3MuaCIgMSAzCiMg NSAiL3Vzci9zcmMvbGludXgtdGhpcy9pbmNsdWRlL2FzbS9zb2NrZXQuaCIgMiAzCiMgMzA2ICIu Li9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9iaXRzL3NvY2tldC5oIiAyCgoKCnN0cnVjdCBsaW5n ZXIKICB7CiAgICBpbnQgbF9vbm9mZjsKICAgIGludCBsX2xpbmdlcjsKICB9OwojIDIxMyAiLi4v aW5ldC9uZXRpbmV0L2luLmgiIDIKCgoKc3RydWN0IHNvY2thZGRyX2luCiAgewogICAgc2FfZmFt aWx5X3Qgc2luX2ZhbWlseTsKICAgIGluX3BvcnRfdCBzaW5fcG9ydDsKICAgIHN0cnVjdCBpbl9h ZGRyIHNpbl9hZGRyOwoKCiAgICB1bnNpZ25lZCBjaGFyIHNpbl96ZXJvW3NpemVvZiAoc3RydWN0 IHNvY2thZGRyKSAtCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplb2YgKHVuc2lnbmVk IHNob3J0IGludCkpIC0KICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChpbl9wb3J0 X3QpIC0KICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChzdHJ1Y3QgaW5fYWRkcild OwogIH07CgoKc3RydWN0IHNvY2thZGRyX2luNgogIHsKICAgIHNhX2ZhbWlseV90IHNpbjZfZmFt aWx5OwogICAgaW5fcG9ydF90IHNpbjZfcG9ydDsKICAgIHVpbnQzMl90IHNpbjZfZmxvd2luZm87 CiAgICBzdHJ1Y3QgaW42X2FkZHIgc2luNl9hZGRyOwogICAgdWludDMyX3Qgc2luNl9zY29wZV9p ZDsKICB9OwoKCnN0cnVjdCBpcHY2X21yZXEKICB7CgogICAgc3RydWN0IGluNl9hZGRyIGlwdjZt cl9tdWx0aWFkZHI7CgoKICAgIHVuc2lnbmVkIGludCBpcHY2bXJfaW50ZXJmYWNlOwogIH07CgoK IyAxICIuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9iaXRzL2luLmgiIDEKIyA2NiAiLi4vc3lz ZGVwcy91bml4L3N5c3YvbGludXgvYml0cy9pbi5oIgpzdHJ1Y3QgaXBfb3B0cwogIHsKICAgIHN0 cnVjdCBpbl9hZGRyIGlwX2RzdDsKICAgIGNoYXIgaXBfb3B0c1s0MF07CiAgfTsKCgpzdHJ1Y3Qg aXBfbXJlcQogIHsKICAgIHN0cnVjdCBpbl9hZGRyIGltcl9tdWx0aWFkZHI7CiAgICBzdHJ1Y3Qg aW5fYWRkciBpbXJfaW50ZXJmYWNlOwogIH07CgoKc3RydWN0IGlwX21yZXFuCiAgewogICAgc3Ry dWN0IGluX2FkZHIgaW1yX211bHRpYWRkcjsKICAgIHN0cnVjdCBpbl9hZGRyIGltcl9hZGRyZXNz OwogICAgaW50IGltcl9pZmluZGV4OwogIH07CgoKc3RydWN0IGluX3BrdGluZm8KICB7CiAgICBp bnQgaXBpX2lmaW5kZXg7CiAgICBzdHJ1Y3QgaW5fYWRkciBpcGlfc3BlY19kc3Q7CiAgICBzdHJ1 Y3QgaW5fYWRkciBpcGlfYWRkcjsKICB9OwojIDI1MSAiLi4vaW5ldC9uZXRpbmV0L2luLmgiIDIK IyAyNTkgIi4uL2luZXQvbmV0aW5ldC9pbi5oIgpleHRlcm4gdWludDMyX3QgbnRvaGwgKHVpbnQz Ml90IF9fbmV0bG9uZykgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gdWludDE2 X3QgbnRvaHMgKHVpbnQxNl90IF9fbmV0c2hvcnQpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOwpleHRlcm4gdWludDMyX3QgaHRvbmwgKHVpbnQzMl90IF9faG9zdGxvbmcpCiAgICAg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gdWludDE2X3QgaHRvbnMgKHVpbnQx Nl90IF9faG9zdHNob3J0KQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCiMgMSAi Li4vaW5jbHVkZS9lbmRpYW4uaCIgMQojIDI2OCAiLi4vaW5ldC9uZXRpbmV0L2luLmgiIDIKCgoj IDEgIi4uL3N5c2RlcHMvaTM4Ni9iaXRzL2J5dGVzd2FwLmgiIDEKIyAyNzEgIi4uL2luZXQvbmV0 aW5ldC9pbi5oIiAyCiMgMzMzICIuLi9pbmV0L25ldGluZXQvaW4uaCIKZXh0ZXJuIGludCBiaW5k cmVzdnBvcnQgKGludCBfX3NvY2tmZCwgc3RydWN0IHNvY2thZGRyX2luICpfX3NvY2tfaW4pIDsK CgpleHRlcm4gaW50IGJpbmRyZXN2cG9ydDYgKGludCBfX3NvY2tmZCwgc3RydWN0IHNvY2thZGRy X2luNiAqX19zb2NrX2luKQogICAgIDsKIyAzNjEgIi4uL2luZXQvbmV0aW5ldC9pbi5oIgpzdHJ1 Y3QgaW42X3BrdGluZm8KICB7CiAgICBzdHJ1Y3QgaW42X2FkZHIgaXBpNl9hZGRyOwogICAgdW5z aWduZWQgaW50IGlwaTZfaWZpbmRleDsKICB9OwoKCiMgMiAiLi4vaW5jbHVkZS9uZXRpbmV0L2lu LmgiIDIKIyA2NSAiLi4vcmVzb2x2L3Jlc29sdi5oIiAyCiMgMSAiLi4vaW5jbHVkZS9hcnBhL25h bWVzZXIuaCIgMQojIDEgIi4uL3Jlc29sdi9hcnBhL25hbWVzZXIuaCIgMQojIDU4ICIuLi9yZXNv bHYvYXJwYS9uYW1lc2VyLmgiCiMgMSAiLi4vaW5jbHVkZS9zeXMvYml0eXBlcy5oIiAxCiMgMSAi Li4vcmVzb2x2L3N5cy9iaXR5cGVzLmgiIDEKCgojIDEgIi4uL2luY2x1ZGUvc3lzL3R5cGVzLmgi IDEKIyA0ICIuLi9yZXNvbHYvc3lzL2JpdHlwZXMuaCIgMgojIDIgIi4uL2luY2x1ZGUvc3lzL2Jp dHlwZXMuaCIgMgojIDU5ICIuLi9yZXNvbHYvYXJwYS9uYW1lc2VyLmgiIDIKCgoKIyAxICIuLi9p bmNsdWRlL3N5cy9jZGVmcy5oIiAxCiMgNjMgIi4uL3Jlc29sdi9hcnBhL25hbWVzZXIuaCIgMgoj IDk2ICIuLi9yZXNvbHYvYXJwYS9uYW1lc2VyLmgiCnR5cGVkZWYgZW51bSBfX25zX3NlY3Qgewog ICAgICAgIG5zX3NfcWQgPSAwLAogICAgICAgIG5zX3Nfem4gPSAwLAogICAgICAgIG5zX3NfYW4g PSAxLAogICAgICAgIG5zX3NfcHIgPSAxLAogICAgICAgIG5zX3NfbnMgPSAyLAogICAgICAgIG5z X3NfdWQgPSAyLAogICAgICAgIG5zX3NfYXIgPSAzLAogICAgICAgIG5zX3NfbWF4ID0gNAp9IG5z X3NlY3Q7CgoKCgoKCnR5cGVkZWYgc3RydWN0IF9fbnNfbXNnIHsKICAgICAgICBjb25zdCB1X2No YXIgKl9tc2csICpfZW9tOwogICAgICAgIHVfaW50MTZfdCBfaWQsIF9mbGFncywgX2NvdW50c1tu c19zX21heF07CiAgICAgICAgY29uc3QgdV9jaGFyICpfc2VjdGlvbnNbbnNfc19tYXhdOwogICAg ICAgIG5zX3NlY3QgX3NlY3Q7CiAgICAgICAgaW50IF9ycm51bTsKICAgICAgICBjb25zdCB1X2No YXIgKl9wdHI7Cn0gbnNfbXNnOwoKCnN0cnVjdCBfbnNfZmxhZ2RhdGEgeyBpbnQgbWFzaywgc2hp ZnQ7IH07CmV4dGVybiBzdHJ1Y3QgX25zX2ZsYWdkYXRhIF9uc19mbGFnZGF0YVtdOwojIDEzOSAi Li4vcmVzb2x2L2FycGEvbmFtZXNlci5oIgp0eXBlZGVmIHN0cnVjdCBfX25zX3JyIHsKICAgICAg ICBjaGFyIG5hbWVbMTAyNV07CiAgICAgICAgdV9pbnQxNl90IHR5cGU7CiAgICAgICAgdV9pbnQx Nl90IHJyX2NsYXNzOwogICAgICAgIHVfaW50MzJfdCB0dGw7CiAgICAgICAgdV9pbnQxNl90IHJk bGVuZ3RoOwogICAgICAgIGNvbnN0IHVfY2hhciAqIHJkYXRhOwp9IG5zX3JyOwojIDE2MSAiLi4v cmVzb2x2L2FycGEvbmFtZXNlci5oIgp0eXBlZGVmIGVudW0gX19uc19mbGFnIHsKICAgICAgICBu c19mX3FyLAogICAgICAgIG5zX2Zfb3Bjb2RlLAogICAgICAgIG5zX2ZfYWEsCiAgICAgICAgbnNf Zl90YywKICAgICAgICBuc19mX3JkLAogICAgICAgIG5zX2ZfcmEsCiAgICAgICAgbnNfZl96LAog ICAgICAgIG5zX2ZfYWQsCiAgICAgICAgbnNfZl9jZCwKICAgICAgICBuc19mX3Jjb2RlLAogICAg ICAgIG5zX2ZfbWF4Cn0gbnNfZmxhZzsKCgoKCnR5cGVkZWYgZW51bSBfX25zX29wY29kZSB7CiAg ICAgICAgbnNfb19xdWVyeSA9IDAsCiAgICAgICAgbnNfb19pcXVlcnkgPSAxLAogICAgICAgIG5z X29fc3RhdHVzID0gMiwKCiAgICAgICAgbnNfb19ub3RpZnkgPSA0LAogICAgICAgIG5zX29fdXBk YXRlID0gNSwKICAgICAgICBuc19vX21heCA9IDYKfSBuc19vcGNvZGU7CgoKCgp0eXBlZGVmIGVu dW0gX19uc19yY29kZSB7CiAgICAgICAgbnNfcl9ub2Vycm9yID0gMCwKICAgICAgICBuc19yX2Zv cm1lcnIgPSAxLAogICAgICAgIG5zX3Jfc2VydmZhaWwgPSAyLAogICAgICAgIG5zX3Jfbnhkb21h aW4gPSAzLAogICAgICAgIG5zX3Jfbm90aW1wbCA9IDQsCiAgICAgICAgbnNfcl9yZWZ1c2VkID0g NSwKCiAgICAgICAgbnNfcl95eGRvbWFpbiA9IDYsCiAgICAgICAgbnNfcl95eHJyc2V0ID0gNywK ICAgICAgICBuc19yX254cnJzZXQgPSA4LAogICAgICAgIG5zX3Jfbm90YXV0aCA9IDksCiAgICAg ICAgbnNfcl9ub3R6b25lID0gMTAsCiAgICAgICAgbnNfcl9tYXggPSAxMSwKCiAgICAgICAgbnNf cl9iYWRzaWcgPSAxNiwKICAgICAgICBuc19yX2JhZGtleSA9IDE3LAogICAgICAgIG5zX3JfYmFk dGltZSA9IDE4Cn0gbnNfcmNvZGU7CgoKdHlwZWRlZiBlbnVtIF9fbnNfdXBkYXRlX29wZXJhdGlv biB7CiAgICAgICAgbnNfdW9wX2RlbGV0ZSA9IDAsCiAgICAgICAgbnNfdW9wX2FkZCA9IDEsCiAg ICAgICAgbnNfdW9wX21heCA9IDIKfSBuc191cGRhdGVfb3BlcmF0aW9uOwoKCgoKc3RydWN0IG5z X3RzaWdfa2V5IHsKICAgICAgICBjaGFyIG5hbWVbMTAyNV0sIGFsZ1sxMDI1XTsKICAgICAgICB1 bnNpZ25lZCBjaGFyICpkYXRhOwogICAgICAgIGludCBsZW47Cn07CnR5cGVkZWYgc3RydWN0IG5z X3RzaWdfa2V5IG5zX3RzaWdfa2V5OwoKCgoKc3RydWN0IG5zX3RjcF90c2lnX3N0YXRlIHsKICAg ICAgICBpbnQgY291bnRlcjsKICAgICAgICBzdHJ1Y3QgZHN0X2tleSAqa2V5OwogICAgICAgIHZv aWQgKmN0eDsKICAgICAgICB1bnNpZ25lZCBjaGFyIHNpZ1s1MTJdOwogICAgICAgIGludCBzaWds ZW47Cn07CnR5cGVkZWYgc3RydWN0IG5zX3RjcF90c2lnX3N0YXRlIG5zX3RjcF90c2lnX3N0YXRl OwojIDI1MSAiLi4vcmVzb2x2L2FycGEvbmFtZXNlci5oIgp0eXBlZGVmIGVudW0gX19uc190eXBl IHsKICAgICAgICBuc190X2ludmFsaWQgPSAwLAogICAgICAgIG5zX3RfYSA9IDEsCiAgICAgICAg bnNfdF9ucyA9IDIsCiAgICAgICAgbnNfdF9tZCA9IDMsCiAgICAgICAgbnNfdF9tZiA9IDQsCiAg ICAgICAgbnNfdF9jbmFtZSA9IDUsCiAgICAgICAgbnNfdF9zb2EgPSA2LAogICAgICAgIG5zX3Rf bWIgPSA3LAogICAgICAgIG5zX3RfbWcgPSA4LAogICAgICAgIG5zX3RfbXIgPSA5LAogICAgICAg IG5zX3RfbnVsbCA9IDEwLAogICAgICAgIG5zX3Rfd2tzID0gMTEsCiAgICAgICAgbnNfdF9wdHIg PSAxMiwKICAgICAgICBuc190X2hpbmZvID0gMTMsCiAgICAgICAgbnNfdF9taW5mbyA9IDE0LAog ICAgICAgIG5zX3RfbXggPSAxNSwKICAgICAgICBuc190X3R4dCA9IDE2LAogICAgICAgIG5zX3Rf cnAgPSAxNywKICAgICAgICBuc190X2Fmc2RiID0gMTgsCiAgICAgICAgbnNfdF94MjUgPSAxOSwK ICAgICAgICBuc190X2lzZG4gPSAyMCwKICAgICAgICBuc190X3J0ID0gMjEsCiAgICAgICAgbnNf dF9uc2FwID0gMjIsCiAgICAgICAgbnNfdF9uc2FwX3B0ciA9IDIzLAogICAgICAgIG5zX3Rfc2ln ID0gMjQsCiAgICAgICAgbnNfdF9rZXkgPSAyNSwKICAgICAgICBuc190X3B4ID0gMjYsCiAgICAg ICAgbnNfdF9ncG9zID0gMjcsCiAgICAgICAgbnNfdF9hYWFhID0gMjgsCiAgICAgICAgbnNfdF9s b2MgPSAyOSwKICAgICAgICBuc190X254dCA9IDMwLAogICAgICAgIG5zX3RfZWlkID0gMzEsCiAg ICAgICAgbnNfdF9uaW1sb2MgPSAzMiwKICAgICAgICBuc190X3NydiA9IDMzLAogICAgICAgIG5z X3RfYXRtYSA9IDM0LAogICAgICAgIG5zX3RfbmFwdHIgPSAzNSwKICAgICAgICBuc190X2t4ID0g MzYsCiAgICAgICAgbnNfdF9jZXJ0ID0gMzcsCiAgICAgICAgbnNfdF9hNiA9IDM4LAogICAgICAg IG5zX3RfZG5hbWUgPSAzOSwKICAgICAgICBuc190X3NpbmsgPSA0MCwKICAgICAgICBuc190X29w dCA9IDQxLAogICAgICAgIG5zX3RfdHNpZyA9IDI1MCwKICAgICAgICBuc190X2l4ZnIgPSAyNTEs CiAgICAgICAgbnNfdF9heGZyID0gMjUyLAogICAgICAgIG5zX3RfbWFpbGIgPSAyNTMsCiAgICAg ICAgbnNfdF9tYWlsYSA9IDI1NCwKICAgICAgICBuc190X2FueSA9IDI1NSwKICAgICAgICBuc190 X3p4ZnIgPSAyNTYsCiAgICAgICAgbnNfdF9tYXggPSA2NTUzNgp9IG5zX3R5cGU7CiMgMzE4ICIu Li9yZXNvbHYvYXJwYS9uYW1lc2VyLmgiCnR5cGVkZWYgZW51bSBfX25zX2NsYXNzIHsKICAgICAg ICBuc19jX2ludmFsaWQgPSAwLAogICAgICAgIG5zX2NfaW4gPSAxLAogICAgICAgIG5zX2NfMiA9 IDIsCiAgICAgICAgbnNfY19jaGFvcyA9IDMsCiAgICAgICAgbnNfY19ocyA9IDQsCgogICAgICAg IG5zX2Nfbm9uZSA9IDI1NCwKICAgICAgICBuc19jX2FueSA9IDI1NSwKICAgICAgICBuc19jX21h eCA9IDY1NTM2Cn0gbnNfY2xhc3M7CgoKCnR5cGVkZWYgZW51bSBfX25zX2tleV90eXBlcyB7CiAg ICAgICAgbnNfa3RfcnNhID0gMSwKICAgICAgICBuc19rdF9kaCA9IDIsCiAgICAgICAgbnNfa3Rf ZHNhID0gMywKICAgICAgICBuc19rdF9wcml2YXRlID0gMjU0Cn0gbnNfa2V5X3R5cGVzOwoKdHlw ZWRlZiBlbnVtIF9fbnNfY2VydF90eXBlcyB7CiAgICAgICAgY2VydF90X3BraXggPSAxLAogICAg ICAgIGNlcnRfdF9zcGtpID0gMiwKICAgICAgICBjZXJ0X3RfcGdwID0gMywKICAgICAgICBjZXJ0 X3RfdXJsID0gMjUzLAogICAgICAgIGNlcnRfdF9vaWQgPSAyNTQKfSBuc19jZXJ0X3R5cGVzOwoj IDUwMSAiLi4vcmVzb2x2L2FycGEvbmFtZXNlci5oIgoKdV9pbnQgX19uc19nZXQxNiAoY29uc3Qg dV9jaGFyICopIDsKdV9sb25nIF9fbnNfZ2V0MzIgKGNvbnN0IHVfY2hhciAqKSA7CnZvaWQgX19u c19wdXQxNiAodV9pbnQsIHVfY2hhciAqKSA7CnZvaWQgX19uc19wdXQzMiAodV9sb25nLCB1X2No YXIgKikgOwppbnQgX19uc19pbml0cGFyc2UgKGNvbnN0IHVfY2hhciAqLCBpbnQsIG5zX21zZyAq KSA7CmludCBfX25zX3NraXByciAoY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqLCBuc19z ZWN0LCBpbnQpIDsKaW50IF9fbnNfcGFyc2VyciAobnNfbXNnICosIG5zX3NlY3QsIGludCwgbnNf cnIgKikgOwppbnQgX19uc19zcHJpbnRyciAoY29uc3QgbnNfbXNnICosIGNvbnN0IG5zX3JyICos IGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjaGFyICosIHNpemVfdCkgOwoKaW50IF9fbnNf c3ByaW50cnJmIChjb25zdCB1X2NoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIG5zX2NsYXNz LCBuc190eXBlLCB1X2xvbmcsIGNvbnN0IHVfY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwg Y29uc3QgY2hhciAqLCBjaGFyICosIHNpemVfdCkgOwoKCgppbnQgX19uc19mb3JtYXRfdHRsICh1 X2xvbmcsIGNoYXIgKiwgc2l6ZV90KSA7CmludCBfX25zX3BhcnNlX3R0bCAoY29uc3QgY2hhciAq LCB1X2xvbmcgKikgOwp1X2ludDMyX3QgX19uc19kYXRldG9zZWNzIChjb25zdCBjaGFyICpjcCwg aW50ICplcnJwKSA7CmludCBfX25zX25hbWVfbnRvbCAoY29uc3QgdV9jaGFyICosIHVfY2hhciAq LCBzaXplX3QpIDsKaW50IF9fbnNfbmFtZV9udG9wIChjb25zdCB1X2NoYXIgKiwgY2hhciAqLCBz aXplX3QpIDsKaW50IF9fbnNfbmFtZV9wdG9uIChjb25zdCBjaGFyICosIHVfY2hhciAqLCBzaXpl X3QpIDsKaW50IF9fbnNfbmFtZV91bnBhY2sgKGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIg KiwgY29uc3QgdV9jaGFyICosIHVfY2hhciAqLCBzaXplX3QpIDsKCmludCBfX25zX25hbWVfcGFj ayAoY29uc3QgdV9jaGFyICosIHVfY2hhciAqLCBpbnQsIGNvbnN0IHVfY2hhciAqKiwgY29uc3Qg dV9jaGFyICoqKSA7CgppbnQgX19uc19uYW1lX3VuY29tcHJlc3MgKGNvbnN0IHVfY2hhciAqLCBj b25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICosIGNoYXIgKiwgc2l6ZV90KSA7CgppbnQgX19u c19uYW1lX2NvbXByZXNzIChjb25zdCBjaGFyICosIHVfY2hhciAqLCBzaXplX3QsIGNvbnN0IHVf Y2hhciAqKiwgY29uc3QgdV9jaGFyICoqKSA7CgppbnQgX19uc19uYW1lX3NraXAgKGNvbnN0IHVf Y2hhciAqKiwgY29uc3QgdV9jaGFyICopIDsKdm9pZCBfX25zX25hbWVfcm9sbGJhY2sgKGNvbnN0 IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKiosIGNvbnN0IHVfY2hhciAqKikgOwoKaW50IF9fbnNf c2lnbiAodV9jaGFyICosIGludCAqLCBpbnQsIGludCwgdm9pZCAqLCBjb25zdCB1X2NoYXIgKiwg aW50LCB1X2NoYXIgKiwgaW50ICosIHRpbWVfdCkgOwoKaW50IF9fbnNfc2lnbl90Y3AgKHVfY2hh ciAqLCBpbnQgKiwgaW50LCBpbnQsIG5zX3RjcF90c2lnX3N0YXRlICosIGludCkgOwoKaW50IF9f bnNfc2lnbl90Y3BfaW5pdCAodm9pZCAqLCBjb25zdCB1X2NoYXIgKiwgaW50LCBuc190Y3BfdHNp Z19zdGF0ZSAqKSA7Cgp1X2NoYXIgKl9fbnNfZmluZF90c2lnICh1X2NoYXIgKiwgdV9jaGFyICop IDsKaW50IF9fbnNfdmVyaWZ5ICh1X2NoYXIgKiwgaW50ICosIHZvaWQgKiwgY29uc3QgdV9jaGFy ICosIGludCwgdV9jaGFyICosIGludCAqLCB0aW1lX3QgKiwgaW50KSA7CgoKaW50IF9fbnNfdmVy aWZ5X3RjcCAodV9jaGFyICosIGludCAqLCBuc190Y3BfdHNpZ19zdGF0ZSAqLCBpbnQpIDsKaW50 IF9fbnNfdmVyaWZ5X3RjcF9pbml0ICh2b2lkICosIGNvbnN0IHVfY2hhciAqLCBpbnQsIG5zX3Rj cF90c2lnX3N0YXRlICopIDsKCmludCBfX25zX3NhbWVkb21haW4gKGNvbnN0IGNoYXIgKiwgY29u c3QgY2hhciAqKSA7CmludCBfX25zX3N1YmRvbWFpbiAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFy ICopIDsKaW50IF9fbnNfbWFrZWNhbm9uIChjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6ZV90KSA7 CmludCBfX25zX3NhbWVuYW1lIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikgOwoKCgojIDEg Ii4uL2luY2x1ZGUvYXJwYS9uYW1lc2VyX2NvbXBhdC5oIiAxCiMgMSAiLi4vcmVzb2x2L2FycGEv bmFtZXNlcl9jb21wYXQuaCIgMQojIDM5ICIuLi9yZXNvbHYvYXJwYS9uYW1lc2VyX2NvbXBhdC5o IgojIDEgIi4uL2luY2x1ZGUvZW5kaWFuLmgiIDEKIyA0MCAiLi4vcmVzb2x2L2FycGEvbmFtZXNl cl9jb21wYXQuaCIgMgojIDQ4ICIuLi9yZXNvbHYvYXJwYS9uYW1lc2VyX2NvbXBhdC5oIgp0eXBl ZGVmIHN0cnVjdCB7CiAgICAgICAgdW5zaWduZWQgaWQgOjE2OwojIDY2ICIuLi9yZXNvbHYvYXJw YS9uYW1lc2VyX2NvbXBhdC5oIgogICAgICAgIHVuc2lnbmVkIHJkIDoxOwogICAgICAgIHVuc2ln bmVkIHRjIDoxOwogICAgICAgIHVuc2lnbmVkIGFhIDoxOwogICAgICAgIHVuc2lnbmVkIG9wY29k ZSA6NDsKICAgICAgICB1bnNpZ25lZCBxciA6MTsKCiAgICAgICAgdW5zaWduZWQgcmNvZGUgOjQ7 CiAgICAgICAgdW5zaWduZWQgY2Q6IDE7CiAgICAgICAgdW5zaWduZWQgYWQ6IDE7CiAgICAgICAg dW5zaWduZWQgdW51c2VkIDoxOwogICAgICAgIHVuc2lnbmVkIHJhIDoxOwoKCiAgICAgICAgdW5z aWduZWQgcWRjb3VudCA6MTY7CiAgICAgICAgdW5zaWduZWQgYW5jb3VudCA6MTY7CiAgICAgICAg dW5zaWduZWQgbnNjb3VudCA6MTY7CiAgICAgICAgdW5zaWduZWQgYXJjb3VudCA6MTY7Cn0gSEVB REVSOwojIDIgIi4uL2luY2x1ZGUvYXJwYS9uYW1lc2VyX2NvbXBhdC5oIiAyCiMgNTUzICIuLi9y ZXNvbHYvYXJwYS9uYW1lc2VyLmgiIDIKIyAyICIuLi9pbmNsdWRlL2FycGEvbmFtZXNlci5oIiAy CiMgNjYgIi4uL3Jlc29sdi9yZXNvbHYuaCIgMgojIDg3ICIuLi9yZXNvbHYvcmVzb2x2LmgiCnR5 cGVkZWYgZW51bSB7IHJlc19nb2FoZWFkLCByZXNfbmV4dG5zLCByZXNfbW9kaWZpZWQsIHJlc19k b25lLCByZXNfZXJyb3IgfQogICAgICAgIHJlc19zZW5kaG9va2FjdDsKCnR5cGVkZWYgcmVzX3Nl bmRob29rYWN0ICgqcmVzX3NlbmRfcWhvb2spIChzdHJ1Y3Qgc29ja2FkZHJfaW4gKiBjb25zdCAq bnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1X2No YXIgKipxdWVyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCAqcXVlcnlsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 X2NoYXIgKmFucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBhbnNzaXosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg KnJlc3BsZW4pOwoKdHlwZWRlZiByZXNfc2VuZGhvb2thY3QgKCpyZXNfc2VuZF9yaG9vaykgKGNv bnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKnF1ZXJ5LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IHF1ZXJ5bGVuLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICphbnMsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgYW5zc2l6LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50ICpyZXNwbGVuKTsKCnN0cnVjdCByZXNfc3ltIHsKICAgICAg ICBpbnQgbnVtYmVyOwogICAgICAgIGNoYXIgKiBuYW1lOwogICAgICAgIGNoYXIgKiBodW1hbm5h bWU7Cn07CiMgMTI2ICIuLi9yZXNvbHYvcmVzb2x2LmgiCnN0cnVjdCBfX3Jlc19zdGF0ZSB7CiAg ICAgICAgaW50IHJldHJhbnM7CiAgICAgICAgaW50IHJldHJ5OwogICAgICAgIHVfbG9uZyBvcHRp b25zOwogICAgICAgIGludCBuc2NvdW50OwogICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbgogICAg ICAgICAgICAgICAgbnNhZGRyX2xpc3RbM107CgogICAgICAgIHVfc2hvcnQgaWQ7CiAgICAgICAg Y2hhciAqZG5zcmNoWzYgKzFdOwogICAgICAgIGNoYXIgZGVmZG5hbWVbMjU2XTsKICAgICAgICB1 X2xvbmcgcGZjb2RlOwogICAgICAgIHVuc2lnbmVkIG5kb3RzOjQ7CiAgICAgICAgdW5zaWduZWQg bnNvcnQ6NDsKICAgICAgICBjaGFyIHVudXNlZFszXTsKICAgICAgICBzdHJ1Y3QgewogICAgICAg ICAgICAgICAgc3RydWN0IGluX2FkZHIgYWRkcjsKICAgICAgICAgICAgICAgIHVfaW50MzJfdCBt YXNrOwogICAgICAgIH0gc29ydF9saXN0WzEwXTsKICAgICAgICByZXNfc2VuZF9xaG9vayBxaG9v azsKICAgICAgICByZXNfc2VuZF9yaG9vayByaG9vazsKICAgICAgICBpbnQgcmVzX2hfZXJybm87 CiAgICAgICAgaW50IF92Y3NvY2s7CiAgICAgICAgdV9pbnQgX2ZsYWdzOwogICAgICAgIHVuaW9u IHsKICAgICAgICAgICAgICAgIGNoYXIgcGFkWzUyXTsKICAgICAgICAgICAgICAgIHN0cnVjdCB7 CiAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50MTZfdCBuc2NvdW50OwogICAgICAgICAgICAg ICAgICAgICAgICB1X2ludDE2X3QgbnN0aW1lc1szXTsKICAgICAgICAgICAgICAgICAgICAgICAg aW50IG5zc29ja3NbM107CiAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50MTZfdCBuc2NvdW50 NjsKICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQxNl90IG5zaW5pdDsKICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyX2luNiAqbnNhZGRyc1szXTsKICAgICAgICAgICAg ICAgIH0gX2V4dDsKICAgICAgICB9IF91Owp9OwoKdHlwZWRlZiBzdHJ1Y3QgX19yZXNfc3RhdGUg KnJlc19zdGF0ZTsKIyAyMjAgIi4uL3Jlc29sdi9yZXNvbHYuaCIKCmV4dGVybiBzdHJ1Y3QgX19y ZXNfc3RhdGUgKl9fcmVzX3N0YXRlKHZvaWQpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK CiMgMjQ0ICIuLi9yZXNvbHYvcmVzb2x2LmgiCgp2b2lkIF9fZnBfbnF1ZXJ5IChjb25zdCB1X2No YXIgKiwgaW50LCBGSUxFICopIDsKdm9pZCBfX2ZwX3F1ZXJ5IChjb25zdCB1X2NoYXIgKiwgRklM RSAqKSA7CmNvbnN0IGNoYXIgKiBfX2hvc3RhbGlhcyAoY29uc3QgY2hhciAqKSA7CnZvaWQgX19w X3F1ZXJ5IChjb25zdCB1X2NoYXIgKikgOwp2b2lkIF9fcmVzX2Nsb3NlICh2b2lkKSA7CmludCBf X3Jlc19pbml0ICh2b2lkKSA7CmludCBfX3Jlc19pc291cnNlcnZlciAoY29uc3Qgc3RydWN0IHNv Y2thZGRyX2luICopIDsKaW50IF9fcmVzX21rcXVlcnkgKGludCwgY29uc3QgY2hhciAqLCBpbnQs IGludCwgY29uc3QgdV9jaGFyICosIGludCwgY29uc3QgdV9jaGFyICosIHVfY2hhciAqLCBpbnQp IDsKCmludCBfX3Jlc19xdWVyeSAoY29uc3QgY2hhciAqLCBpbnQsIGludCwgdV9jaGFyICosIGlu dCkgOwppbnQgX19yZXNfcXVlcnlkb21haW4gKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBp bnQsIGludCwgdV9jaGFyICosIGludCkgOwoKaW50IF9fcmVzX3NlYXJjaCAoY29uc3QgY2hhciAq LCBpbnQsIGludCwgdV9jaGFyICosIGludCkgOwppbnQgX19yZXNfc2VuZCAoY29uc3QgdV9jaGFy ICosIGludCwgdV9jaGFyICosIGludCkgOwoKIyAyNzAgIi4uL3Jlc29sdi9yZXNvbHYuaCIKZXh0 ZXJuIGNvbnN0IHN0cnVjdCByZXNfc3ltIF9fcF9rZXlfc3ltc1tdOwpleHRlcm4gY29uc3Qgc3Ry dWN0IHJlc19zeW0gX19wX2NlcnRfc3ltc1tdOwpleHRlcm4gY29uc3Qgc3RydWN0IHJlc19zeW0g X19wX2NsYXNzX3N5bXNbXTsKZXh0ZXJuIGNvbnN0IHN0cnVjdCByZXNfc3ltIF9fcF90eXBlX3N5 bXNbXTsKZXh0ZXJuIGNvbnN0IHN0cnVjdCByZXNfc3ltIF9fcF9yY29kZV9zeW1zW107CiMgMzE5 ICIuLi9yZXNvbHYvcmVzb2x2LmgiCgppbnQgX19yZXNfaG5vayAoY29uc3QgY2hhciAqKSA7Cmlu dCBfX3Jlc19vd25vayAoY29uc3QgY2hhciAqKSA7CmludCBfX3Jlc19tYWlsb2sgKGNvbnN0IGNo YXIgKikgOwppbnQgX19yZXNfZG5vayAoY29uc3QgY2hhciAqKSA7CmludCBfX3N5bV9zdG9uIChj b25zdCBzdHJ1Y3QgcmVzX3N5bSAqLCBjb25zdCBjaGFyICosIGludCAqKSA7CmNvbnN0IGNoYXIg KiBfX3N5bV9udG9zIChjb25zdCBzdHJ1Y3QgcmVzX3N5bSAqLCBpbnQsIGludCAqKSA7CmNvbnN0 IGNoYXIgKiBfX3N5bV9udG9wIChjb25zdCBzdHJ1Y3QgcmVzX3N5bSAqLCBpbnQsIGludCAqKSA7 CmludCBfX2I2NF9udG9wICh1X2NoYXIgY29uc3QgKiwgc2l6ZV90LCBjaGFyICosIHNpemVfdCkg OwppbnQgX19iNjRfcHRvbiAoY2hhciBjb25zdCAqLCB1X2NoYXIgKiwgc2l6ZV90KSA7CmludCBf X2xvY19hdG9uIChjb25zdCBjaGFyICphc2NpaSwgdV9jaGFyICpiaW5hcnkpIDsKY29uc3QgY2hh ciAqIF9fbG9jX250b2EgKGNvbnN0IHVfY2hhciAqYmluYXJ5LCBjaGFyICphc2NpaSkgOwppbnQg X19kbl9za2lwbmFtZSAoY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqKSA7CnZvaWQgX19w dXRsb25nICh1X2ludDMyX3QsIHVfY2hhciAqKSA7CnZvaWQgX19wdXRzaG9ydCAodV9pbnQxNl90 LCB1X2NoYXIgKikgOwpjb25zdCBjaGFyICogX19wX2NsYXNzIChpbnQpIDsKY29uc3QgY2hhciAq IF9fcF90aW1lICh1X2ludDMyX3QpIDsKY29uc3QgY2hhciAqIF9fcF90eXBlIChpbnQpIDsKY29u c3QgY2hhciAqIF9fcF9yY29kZSAoaW50KSA7CmNvbnN0IHVfY2hhciAqIF9fcF9jZG5uYW1lIChj b25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICosIGludCwgRklMRSAqKSA7CmNvbnN0IHVfY2hh ciAqIF9fcF9jZG5hbWUgKGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKiwgRklMRSAqKSA7 CmNvbnN0IHVfY2hhciAqIF9fcF9mcW5uYW1lIChjb25zdCB1X2NoYXIgKmNwLCBjb25zdCB1X2No YXIgKm1zZywgaW50LCBjaGFyICosIGludCkgOwoKY29uc3QgdV9jaGFyICogX19wX2ZxbmFtZSAo Y29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqLCBGSUxFICopIDsKY29uc3QgY2hhciAqIF9f cF9vcHRpb24gKHVfbG9uZyBvcHRpb24pIDsKY2hhciAqIF9fcF9zZWNzdG9kYXRlICh1X2xvbmcp IDsKaW50IF9fZG5fY291bnRfbGFiZWxzIChjb25zdCBjaGFyICopIDsKaW50IF9fZG5fY29tcCAo Y29uc3QgY2hhciAqLCB1X2NoYXIgKiwgaW50LCB1X2NoYXIgKiosIHVfY2hhciAqKikgOwoKaW50 IF9fZG5fZXhwYW5kIChjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hh ciAqLCBjaGFyICosIGludCkgOwoKdV9pbnQgX19yZXNfcmFuZG9taWQgKHZvaWQpIDsKaW50IF9f cmVzX25hbWVpbnF1ZXJ5IChjb25zdCBjaGFyICosIGludCwgaW50LCBjb25zdCB1X2NoYXIgKiwg Y29uc3QgdV9jaGFyICopIDsKCmludCBfX3Jlc19xdWVyaWVzbWF0Y2ggKGNvbnN0IHVfY2hhciAq LCBjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqKSA7Cgpjb25z dCBjaGFyICogX19wX3NlY3Rpb24gKGludCBzZWN0aW9uLCBpbnQgb3Bjb2RlKSA7CgppbnQgX19y ZXNfbmluaXQgKHJlc19zdGF0ZSkgOwppbnQgX19yZXNfbmlzb3Vyc2VydmVyIChjb25zdCByZXNf c3RhdGUsIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqKSA7Cgp2b2lkIF9fZnBfcmVzc3RhdCAo Y29uc3QgcmVzX3N0YXRlLCBGSUxFICopIDsKdm9pZCBfX3Jlc19ucHF1ZXJ5IChjb25zdCByZXNf c3RhdGUsIGNvbnN0IHVfY2hhciAqLCBpbnQsIEZJTEUgKikgOwpjb25zdCBjaGFyICogX19yZXNf aG9zdGFsaWFzIChjb25zdCByZXNfc3RhdGUsIGNvbnN0IGNoYXIgKiwgY2hhciAqLCBzaXplX3Qp IDsKCmludCBfX3Jlc19ucXVlcnkgKHJlc19zdGF0ZSwgY29uc3QgY2hhciAqLCBpbnQsIGludCwg dV9jaGFyICosIGludCkgOwoKaW50IF9fcmVzX25zZWFyY2ggKHJlc19zdGF0ZSwgY29uc3QgY2hh ciAqLCBpbnQsIGludCwgdV9jaGFyICosIGludCkgOwoKaW50IF9fcmVzX25xdWVyeWRvbWFpbiAo cmVzX3N0YXRlLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIHVfY2hhciAq LCBpbnQpIDsKCgppbnQgX19yZXNfbm1rcXVlcnkgKHJlc19zdGF0ZSwgaW50LCBjb25zdCBjaGFy ICosIGludCwgaW50LCBjb25zdCB1X2NoYXIgKiwgaW50LCBjb25zdCB1X2NoYXIgKiwgdV9jaGFy ICosIGludCkgOwoKCmludCBfX3Jlc19uc2VuZCAocmVzX3N0YXRlLCBjb25zdCB1X2NoYXIgKiwg aW50LCB1X2NoYXIgKiwgaW50KSA7CnZvaWQgX19yZXNfbmNsb3NlIChyZXNfc3RhdGUpIDsKCiMg MTIgIi4uL2luY2x1ZGUvcmVzb2x2LmgiIDIKCgpleHRlcm4gaW50IF9fcmVzX3Zpbml0IChyZXNf c3RhdGUsIGludCk7CmV4dGVybiB2b2lkIF9zZXRodGVudCAoaW50KTsKZXh0ZXJuIHZvaWQgX2Vu ZGh0ZW50ICh2b2lkKTsKZXh0ZXJuIHN0cnVjdCBob3N0ZW50ICpfZ2V0aHRlbnQgKHZvaWQpOwpl eHRlcm4gc3RydWN0IGhvc3RlbnQgKl9nZXRodGJ5bmFtZSAoY29uc3QgY2hhciAqX19uYW1lKTsK ZXh0ZXJuIHN0cnVjdCBob3N0ZW50ICpfZ2V0aHRieW5hbWUyIChjb25zdCBjaGFyICpfX25hbWUs IGludCBfX2FmKTsKc3RydWN0IGhvc3RlbnQgKl9nZXRodGJ5YWRkciAoY29uc3QgY2hhciAqYWRk ciwgc2l6ZV90IF9fbGVuLCBpbnQgX19hZik7CmV4dGVybiB1X2ludDMyX3QgX2dldGxvbmcgKGNv bnN0IHVfY2hhciAqX19zcmMpOwpleHRlcm4gdV9pbnQxNl90IF9nZXRzaG9ydCAoY29uc3QgdV9j aGFyICpfX3NyYyk7CmV4dGVybiB2b2lkIHJlc19wcXVlcnkgKGNvbnN0IHJlc19zdGF0ZSBfX3N0 YXRwLCBjb25zdCB1X2NoYXIgKl9fbXNnLAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19s ZW4sIEZJTEUgKl9fZmlsZSk7CmV4dGVybiB2b2lkIHJlc19zZW5kX3NldHFob29rIChyZXNfc2Vu ZF9xaG9vayBfX2hvb2spOwpleHRlcm4gdm9pZCByZXNfc2VuZF9zZXRyaG9vayAocmVzX3NlbmRf cmhvb2sgX19ob29rKTsKZXh0ZXJuIGludCByZXNfb3Vyc2VydmVyX3AgKGNvbnN0IHJlc19zdGF0 ZSBfX3N0YXRwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNvY2th ZGRyX2luNiAqX19pbnApOwojIDI0ICJpbnRlcm5hbHMuaCIgMgojIDEgIi4uL2luY2x1ZGUvc2V0 am1wLmgiIDEKCiMgMSAiLi4vc2V0am1wL3NldGptcC5oIiAxCiMgMjggIi4uL3NldGptcC9zZXRq bXAuaCIKCgojIDEgIi4uL3N5c2RlcHMvaTM4Ni9iaXRzL3NldGptcC5oIiAxCiMgMzYgIi4uL3N5 c2RlcHMvaTM4Ni9iaXRzL3NldGptcC5oIgp0eXBlZGVmIGludCBfX2ptcF9idWZbNl07CiMgMzEg Ii4uL3NldGptcC9zZXRqbXAuaCIgMgojIDEgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2Jp dHMvc2lnc2V0LmgiIDEKIyAzMiAiLi4vc2V0am1wL3NldGptcC5oIiAyCgoKdHlwZWRlZiBzdHJ1 Y3QgX19qbXBfYnVmX3RhZwogIHsKCgoKCiAgICBfX2ptcF9idWYgX19qbXBidWY7CiAgICBpbnQg X19tYXNrX3dhc19zYXZlZDsKICAgIF9fc2lnc2V0X3QgX19zYXZlZF9tYXNrOwogIH0gam1wX2J1 ZlsxXTsKCgoKCmV4dGVybiBpbnQgc2V0am1wIChqbXBfYnVmIF9fZW52KSA7CgoKCmV4dGVybiBp bnQgX3NldGptcCAoam1wX2J1ZiBfX2VudikgOwoKCgoKZXh0ZXJuIGludCBfX3NpZ3NldGptcCAo am1wX2J1ZiBfX2VudiwgaW50IF9fc2F2ZW1hc2spIDsKIyA3MyAiLi4vc2V0am1wL3NldGptcC5o IgpleHRlcm4gdm9pZCBsb25nam1wIChqbXBfYnVmIF9fZW52LCBpbnQgX192YWwpCiAgICAgX19h dHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIHZvaWQgX2xvbmdqbXAgKGpt cF9idWYgX19lbnYsIGludCBfX3ZhbCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9f KSk7CgoKCgoKCgp0eXBlZGVmIGptcF9idWYgc2lnam1wX2J1ZjsKIyA5OCAiLi4vc2V0am1wL3Nl dGptcC5oIgpleHRlcm4gdm9pZCBzaWdsb25nam1wIChzaWdqbXBfYnVmIF9fZW52LCBpbnQgX192 YWwpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgojIDMgIi4uL2luY2x1 ZGUvc2V0am1wLmgiIDIKCgoKCmV4dGVybiB2b2lkIF9fbG9uZ2ptcCAoX19qbXBfYnVmIF9fZW52 LCBpbnQgX192YWwpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKCmV4 dGVybiBpbnQgX19zaWdqbXBfc2F2ZSAoam1wX2J1ZiBfX2VudiwgaW50IF9fc2F2ZW1hc2spOwoK ZXh0ZXJuIHZvaWQgX2xvbmdqbXBfdW53aW5kIChqbXBfYnVmIGVudiwgaW50IHZhbCk7CgpleHRl cm4gdm9pZCBfX2xpYmNfc2lnbG9uZ2ptcCAoc2lnam1wX2J1ZiBfX2VudiwgaW50IF9fdmFsKQog ICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSk7CiMgMjUgImludGVybmFscy5oIiAy CgoKIyAxICIuLi9zeXNkZXBzL2kzODYvc3RhY2tpbmZvLmgiIDEKIyAyOCAiaW50ZXJuYWxzLmgi IDIKIyAxICIuLi9pbmNsdWRlL3N5cy90eXBlcy5oIiAxCiMgMjkgImludGVybmFscy5oIiAyCiMg MSAiLi4vbGludXh0aHJlYWRzL3N5c2RlcHMvcHRocmVhZC9iaXRzL2xpYmMtdHNkLmgiIDEKIyAy NSAiLi4vbGludXh0aHJlYWRzL3N5c2RlcHMvcHRocmVhZC9iaXRzL2xpYmMtdHNkLmgiCmVudW0g X19saWJjX3RzZF9rZXlfdCB7IF9MSUJDX1RTRF9LRVlfTUFMTE9DID0gMCwKICAgICAgICAgICAg ICAgICAgICAgICAgX0xJQkNfVFNEX0tFWV9ETF9FUlJPUiwKICAgICAgICAgICAgICAgICAgICAg ICAgX0xJQkNfVFNEX0tFWV9SUENfVkFSUywKICAgICAgICAgICAgICAgICAgICAgICAgX0xJQkNf VFNEX0tFWV9OIH07CgpleHRlcm4gdm9pZCAqKCpfX2xpYmNfaW50ZXJuYWxfdHNkX2dldCkgKGVu dW0gX19saWJjX3RzZF9rZXlfdCkgOwpleHRlcm4gaW50ICgqX19saWJjX2ludGVybmFsX3RzZF9z ZXQpIChlbnVtIF9fbGliY190c2Rfa2V5X3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3Qgdm9pZCAqKSA7CiMgMzAgImludGVybmFscy5oIiAyCgpleHRlcm4g bG9uZyBpbnQgdGVzdGFuZHNldCAoaW50ICpzcGlubG9jayk7CmV4dGVybiBpbnQgX19jb21wYXJl X2FuZF9zd2FwIChsb25nIGludCAqcCwgbG9uZyBpbnQgb2xkdmFsLCBsb25nIGludCBuZXd2YWwp OwoKIyAxICIuLi9saW51eHRocmVhZHMvc3lzZGVwcy9pMzg2L3B0LW1hY2hpbmUuaCIgMQojIDMz ICIuLi9saW51eHRocmVhZHMvc3lzZGVwcy9pMzg2L3B0LW1hY2hpbmUuaCIKZXh0ZXJuIGlubGlu ZSBnZXRmcmFtZWFkZHIgKHZvaWQpCnsKICAgICAgICBpbnQgcmV0OwogICAgICAgIF9fYXNtX18g KAogICAgICAgICAgICAgICAgIm1vdmwgJSVlc3AsICUwIgogICAgICAgICAgICAgICAgOiAiPW1y IihyZXQpCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gcmV0Owp9CgoKZXh0ZXJuIGlubGluZSBs b25nIGludAp0ZXN0YW5kc2V0IChpbnQgKnNwaW5sb2NrKQp7CiAgbG9uZyBpbnQgcmV0OwoKICBf X2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICJ4Y2hnbCAlMCwgJTEiCiAgICAgICA6ICI9ciIo cmV0KSwgIj1tIigqc3BpbmxvY2spCiAgICAgICA6ICIwIigxKSwgIm0iKCpzcGlubG9jaykKICAg ICAgIDogIm1lbW9yeSIpOwoKICByZXR1cm4gcmV0Owp9CiMgNjYgIi4uL2xpbnV4dGhyZWFkcy9z eXNkZXBzL2kzODYvcHQtbWFjaGluZS5oIgpleHRlcm4gaW5saW5lIGludApfX2NvbXBhcmVfYW5k X3N3YXAgKGxvbmcgaW50ICpwLCBsb25nIGludCBvbGR2YWwsIGxvbmcgaW50IG5ld3ZhbCkKewog IGNoYXIgcmV0OwogIGxvbmcgaW50IHJlYWR2YWw7CgogIF9fYXNtX18gX192b2xhdGlsZV9fICgi bG9jazsgY21weGNoZ2wgJTMsICUxOyBzZXRlICUwIgogICAgICAgICAgICAgICAgICAgICAgICA6 ICI9cSIgKHJldCksICI9bSIgKCpwKSwgIj1hIiAocmVhZHZhbCkKICAgICAgICAgICAgICAgICAg ICAgICAgOiAiciIgKG5ld3ZhbCksICJtIiAoKnApLCAiYSIgKG9sZHZhbCkKICAgICAgICAgICAg ICAgICAgICAgICAgOiAibWVtb3J5Iik7CiAgcmV0dXJuIHJldDsKfQoKCmV4dGVybiBpbmxpbmUg aW50CmdldF9lZmxhZ3MgKHZvaWQpCnsKICBpbnQgcmVzOwogIF9fYXNtX18gX192b2xhdGlsZV9f ICgicHVzaGZsOyBwb3BsICUwIiA6ICI9ciIgKHJlcykgOiApOwogIHJldHVybiByZXM7Cn0KCgpl eHRlcm4gaW5saW5lIHZvaWQKc2V0X2VmbGFncyAoaW50IG5ld2ZsYWdzKQp7CiAgX19hc21fXyBf X3ZvbGF0aWxlX18gKCJwdXNobCAlMDsgcG9wZmwiIDogOiAiciIgKG5ld2ZsYWdzKSA6ICJjYyIp Owp9CgoKZXh0ZXJuIGlubGluZSBpbnQKY29tcGFyZV9hbmRfc3dhcF9pc19hdmFpbGFibGUgKHZv aWQpCnsKICBpbnQgb2xkZmxhZ3MgPSBnZXRfZWZsYWdzICgpOwogIGludCBjaGFuZ2VkOwoKICBz ZXRfZWZsYWdzIChvbGRmbGFncyBeIDB4NDAwMDApOwoKICBjaGFuZ2VkID0gKGdldF9lZmxhZ3Mg KCkgXiBvbGRmbGFncykgJiAweDQwMDAwOwoKICBzZXRfZWZsYWdzIChvbGRmbGFncyk7CgoKICBy ZXR1cm4gY2hhbmdlZCAhPSAwOwp9CiMgMzUgImludGVybmFscy5oIiAyCiMgMSAic2VtYXBob3Jl LmgiIDEKIyAxOSAic2VtYXBob3JlLmgiCiMgMSAiLi4vaW5jbHVkZS9zeXMvdHlwZXMuaCIgMQoj IDIwICJzZW1hcGhvcmUuaCIgMgojIDMyICJzZW1hcGhvcmUuaCIKdHlwZWRlZiBzdHJ1Y3QKewog IHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX3NlbV9sb2NrOwogIGludCBfX3NlbV92YWx1ZTsK ICBfcHRocmVhZF9kZXNjciBfX3NlbV93YWl0aW5nOwp9IHNlbV90OwojIDQ4ICJzZW1hcGhvcmUu aCIKCgoKCmV4dGVybiBpbnQgc2VtX2luaXQgKHNlbV90ICpfX3NlbSwgaW50IF9fcHNoYXJlZCwg dW5zaWduZWQgaW50IF9fdmFsdWUpIDsKCgpleHRlcm4gaW50IHNlbV9kZXN0cm95IChzZW1fdCAq X19zZW0pIDsKCgpleHRlcm4gc2VtX3QgKnNlbV9vcGVuIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwg aW50IF9fb2ZsYWcsIC4uLikgOwoKCmV4dGVybiBpbnQgc2VtX2Nsb3NlIChzZW1fdCAqX19zZW0p IDsKCgpleHRlcm4gaW50IHNlbV91bmxpbmsgKF9fY29uc3QgY2hhciAqX19uYW1lKSA7CgoKZXh0 ZXJuIGludCBzZW1fd2FpdCAoc2VtX3QgKl9fc2VtKSA7CgoKCmV4dGVybiBpbnQgc2VtX3RpbWVk d2FpdCAoc2VtX3QgKl9fcmVzdHJpY3QgX19zZW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAg X19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QgX19hYnN0aW1lKQogICAgIDsKCgoK ZXh0ZXJuIGludCBzZW1fdHJ5d2FpdCAoc2VtX3QgKl9fc2VtKSA7CgoKZXh0ZXJuIGludCBzZW1f cG9zdCAoc2VtX3QgKl9fc2VtKSA7CgoKZXh0ZXJuIGludCBzZW1fZ2V0dmFsdWUgKHNlbV90ICpf X3Jlc3RyaWN0IF9fc2VtLCBpbnQgKl9fcmVzdHJpY3QgX19zdmFsKQogICAgIDsKCgojIDM2ICJp bnRlcm5hbHMuaCIgMgojIDEgIi4uL2xpbnV4dGhyZWFkc19kYi90aHJlYWRfZGJQLmgiIDEKCgoK CgojIDEgIi4uL2xpbnV4dGhyZWFkc19kYi9wcm9jX3NlcnZpY2UuaCIgMQojIDIwICIuLi9saW51 eHRocmVhZHNfZGIvcHJvY19zZXJ2aWNlLmgiCiMgMSAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGlu dXgvaTM4Ni9zeXMvcHJvY2ZzLmgiIDEKIyAzMiAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgv aTM4Ni9zeXMvcHJvY2ZzLmgiCiMgMSAiLi4vaW5jbHVkZS9zeXMvdGltZS5oIiAxCgojIDEgIi4u L3RpbWUvc3lzL3RpbWUuaCIgMQojIDI4ICIuLi90aW1lL3N5cy90aW1lLmgiCiMgMSAiLi4vc3lz ZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9iaXRzL3RpbWUuaCIgMQojIDI5ICIuLi90aW1lL3N5 cy90aW1lLmgiIDIKIyAzOCAiLi4vdGltZS9zeXMvdGltZS5oIgoKIyA1NiAiLi4vdGltZS9zeXMv dGltZS5oIgpzdHJ1Y3QgdGltZXpvbmUKICB7CiAgICBpbnQgdHpfbWludXRlc3dlc3Q7CiAgICBp bnQgdHpfZHN0dGltZTsKICB9OwoKdHlwZWRlZiBzdHJ1Y3QgdGltZXpvbmUgKl9fcmVzdHJpY3Qg X190aW1lem9uZV9wdHJfdDsKIyA3MiAiLi4vdGltZS9zeXMvdGltZS5oIgpleHRlcm4gaW50IGdl dHRpbWVvZmRheSAoc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QgX190diwKICAgICAgICAgICAg ICAgICAgICAgICAgIF9fdGltZXpvbmVfcHRyX3QgX190eikgOwoKCgoKZXh0ZXJuIGludCBzZXR0 aW1lb2ZkYXkgKF9fY29uc3Qgc3RydWN0IHRpbWV2YWwgKl9fdHYsCiAgICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lem9uZSAqX190eikgOwoKCgoKCmV4dGVybiBpbnQg YWRqdGltZSAoX19jb25zdCBzdHJ1Y3QgdGltZXZhbCAqX19kZWx0YSwKICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgdGltZXZhbCAqX19vbGRkZWx0YSkgOwoKCgoKZW51bSBfX2l0aW1lcl93aGlj aAogIHsKCiAgICBJVElNRVJfUkVBTCA9IDAsCgoKICAgIElUSU1FUl9WSVJUVUFMID0gMSwKCgoK ICAgIElUSU1FUl9QUk9GID0gMgoKICB9OwoKCgpzdHJ1Y3QgaXRpbWVydmFsCiAgewoKICAgIHN0 cnVjdCB0aW1ldmFsIGl0X2ludGVydmFsOwoKICAgIHN0cnVjdCB0aW1ldmFsIGl0X3ZhbHVlOwog IH07CgoKCgp0eXBlZGVmIGVudW0gX19pdGltZXJfd2hpY2ggX19pdGltZXJfd2hpY2hfdDsKCgoK CgoKZXh0ZXJuIGludCBnZXRpdGltZXIgKF9faXRpbWVyX3doaWNoX3QgX193aGljaCwKICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBpdGltZXJ2YWwgKl9fdmFsdWUpIDsKCgoKCmV4dGVybiBp bnQgc2V0aXRpbWVyIChfX2l0aW1lcl93aGljaF90IF9fd2hpY2gsCiAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IHN0cnVjdCBpdGltZXJ2YWwgKl9fcmVzdHJpY3QgX19uZXcsCiAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgaXRpbWVydmFsICpfX3Jlc3RyaWN0IF9fb2xkKSA7CgoKCmV4 dGVybiBpbnQgdXRpbWVzIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19jb25zdCBzdHJ1Y3QgdGlt ZXZhbCBfX3R2cFsyXSkKICAgICA7CiMgMTcxICIuLi90aW1lL3N5cy90aW1lLmgiCgojIDMgIi4u L2luY2x1ZGUvc3lzL3RpbWUuaCIgMgoKCmV4dGVybiBpbnQgX19nZXR0aW1lb2ZkYXkgKHN0cnVj dCB0aW1ldmFsICpfX3R2LAogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXpv bmUgKl9fdHopOwpleHRlcm4gaW50IF9fc2V0dGltZW9mZGF5IChfX2NvbnN0IHN0cnVjdCB0aW1l dmFsICpfX3R2LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1l em9uZSAqX190eik7CmV4dGVybiBpbnQgX19hZGp0aW1lIChfX2NvbnN0IHN0cnVjdCB0aW1ldmFs ICpfX2RlbHRhLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKl9fb2xkZGVs dGEpOwpleHRlcm4gaW50IF9fZ2V0aXRpbWVyIChlbnVtIF9faXRpbWVyX3doaWNoIF9fd2hpY2gs CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpdGltZXJ2YWwgKl9fdmFsdWUpOwpleHRl cm4gaW50IF9fc2V0aXRpbWVyIChlbnVtIF9faXRpbWVyX3doaWNoIF9fd2hpY2gsCiAgICAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IGl0aW1lcnZhbCAqX19yZXN0cmljdCBfX25l dywKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl0aW1lcnZhbCAqX19yZXN0cmljdCBf X29sZCk7CmV4dGVybiBpbnQgX191dGltZXMgKF9fY29uc3QgY2hhciAqX19maWxlLCBjb25zdCBz dHJ1Y3QgdGltZXZhbCBfX3R2cFsyXSk7CiMgMzMgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4 L2kzODYvc3lzL3Byb2Nmcy5oIiAyCiMgMSAiLi4vaW5jbHVkZS9zeXMvdHlwZXMuaCIgMQojIDM0 ICIuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L3N5cy9wcm9jZnMuaCIgMgojIDEgIi4u L3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2kzODYvc3lzL3VzZXIuaCIgMQojIDI2ICIuLi9zeXNk ZXBzL3VuaXgvc3lzdi9saW51eC9pMzg2L3N5cy91c2VyLmgiCnN0cnVjdCB1c2VyX2ZwcmVnc19z dHJ1Y3QKewogIGxvbmcgaW50IGN3ZDsKICBsb25nIGludCBzd2Q7CiAgbG9uZyBpbnQgdHdkOwog IGxvbmcgaW50IGZpcDsKICBsb25nIGludCBmY3M7CiAgbG9uZyBpbnQgZm9vOwogIGxvbmcgaW50 IGZvczsKICBsb25nIGludCBzdF9zcGFjZSBbMjBdOwp9OwoKc3RydWN0IHVzZXJfZnB4cmVnc19z dHJ1Y3QKewogIHVuc2lnbmVkIHNob3J0IGludCBjd2Q7CiAgdW5zaWduZWQgc2hvcnQgaW50IHN3 ZDsKICB1bnNpZ25lZCBzaG9ydCBpbnQgdHdkOwogIHVuc2lnbmVkIHNob3J0IGludCBmb3A7CiAg bG9uZyBpbnQgZmlwOwogIGxvbmcgaW50IGZjczsKICBsb25nIGludCBmb287CiAgbG9uZyBpbnQg Zm9zOwogIGxvbmcgaW50IG14Y3NyOwogIGxvbmcgaW50IHJlc2VydmVkOwogIGxvbmcgaW50IHN0 X3NwYWNlWzMyXTsKICBsb25nIGludCB4bW1fc3BhY2VbMzJdOwogIGxvbmcgaW50IHBhZGRpbmdb NTZdOwp9OwoKc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QKewogIGxvbmcgaW50IGVieDsKICBsb25n IGludCBlY3g7CiAgbG9uZyBpbnQgZWR4OwogIGxvbmcgaW50IGVzaTsKICBsb25nIGludCBlZGk7 CiAgbG9uZyBpbnQgZWJwOwogIGxvbmcgaW50IGVheDsKICBsb25nIGludCB4ZHM7CiAgbG9uZyBp bnQgeGVzOwogIGxvbmcgaW50IHhmczsKICBsb25nIGludCB4Z3M7CiAgbG9uZyBpbnQgb3JpZ19l YXg7CiAgbG9uZyBpbnQgZWlwOwogIGxvbmcgaW50IHhjczsKICBsb25nIGludCBlZmxhZ3M7CiAg bG9uZyBpbnQgZXNwOwogIGxvbmcgaW50IHhzczsKfTsKCnN0cnVjdCB1c2VyCnsKICBzdHJ1Y3Qg dXNlcl9yZWdzX3N0cnVjdCByZWdzOwogIGludCB1X2ZwdmFsaWQ7CiAgc3RydWN0IHVzZXJfZnBy ZWdzX3N0cnVjdCBpMzg3OwogIHVuc2lnbmVkIGxvbmcgaW50IHVfdHNpemU7CiAgdW5zaWduZWQg bG9uZyBpbnQgdV9kc2l6ZTsKICB1bnNpZ25lZCBsb25nIGludCB1X3NzaXplOwogIHVuc2lnbmVk IGxvbmcgc3RhcnRfY29kZTsKICB1bnNpZ25lZCBsb25nIHN0YXJ0X3N0YWNrOwogIGxvbmcgaW50 IHNpZ25hbDsKICBpbnQgcmVzZXJ2ZWQ7CiAgc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QqIHVfYXIw OwogIHN0cnVjdCB1c2VyX2ZwcmVnc19zdHJ1Y3QqIHVfZnBzdGF0ZTsKICB1bnNpZ25lZCBsb25n IGludCBtYWdpYzsKICBjaGFyIHVfY29tbSBbMzJdOwogIGludCB1X2RlYnVncmVnIFs4XTsKfTsK IyAzNSAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgvaTM4Ni9zeXMvcHJvY2ZzLmgiIDIKCgoK CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZ3JlZ190OwoKCgoKCgp0eXBlZGVmIGVsZl9ncmVn X3QgZWxmX2dyZWdzZXRfdFsoc2l6ZW9mIChzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdCkgLyBzaXpl b2YoZWxmX2dyZWdfdCkpXTsKCgp0eXBlZGVmIHN0cnVjdCB1c2VyX2ZwcmVnc19zdHJ1Y3QgZWxm X2ZwcmVnc2V0X3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCB1c2VyX2ZweHJlZ3Nfc3RydWN0IGVsZl9m cHhyZWdzZXRfdDsKCgoKc3RydWN0IGVsZl9zaWdpbmZvCiAgewogICAgaW50IHNpX3NpZ25vOwog ICAgaW50IHNpX2NvZGU7CiAgICBpbnQgc2lfZXJybm87CiAgfTsKIyA3MyAiLi4vc3lzZGVwcy91 bml4L3N5c3YvbGludXgvaTM4Ni9zeXMvcHJvY2ZzLmgiCnN0cnVjdCBlbGZfcHJzdGF0dXMKICB7 CiAgICBzdHJ1Y3QgZWxmX3NpZ2luZm8gcHJfaW5mbzsKICAgIHNob3J0IGludCBwcl9jdXJzaWc7 CiAgICB1bnNpZ25lZCBsb25nIGludCBwcl9zaWdwZW5kOwogICAgdW5zaWduZWQgbG9uZyBpbnQg cHJfc2lnaG9sZDsKICAgIF9fcGlkX3QgcHJfcGlkOwogICAgX19waWRfdCBwcl9wcGlkOwogICAg X19waWRfdCBwcl9wZ3JwOwogICAgX19waWRfdCBwcl9zaWQ7CiAgICBzdHJ1Y3QgdGltZXZhbCBw cl91dGltZTsKICAgIHN0cnVjdCB0aW1ldmFsIHByX3N0aW1lOwogICAgc3RydWN0IHRpbWV2YWwg cHJfY3V0aW1lOwogICAgc3RydWN0IHRpbWV2YWwgcHJfY3N0aW1lOwogICAgZWxmX2dyZWdzZXRf dCBwcl9yZWc7CiAgICBpbnQgcHJfZnB2YWxpZDsKICB9OwoKCgoKc3RydWN0IGVsZl9wcnBzaW5m bwogIHsKICAgIGNoYXIgcHJfc3RhdGU7CiAgICBjaGFyIHByX3NuYW1lOwogICAgY2hhciBwcl96 b21iOwogICAgY2hhciBwcl9uaWNlOwogICAgdW5zaWduZWQgbG9uZyBpbnQgcHJfZmxhZzsKICAg IHVuc2lnbmVkIHNob3J0IGludCBwcl91aWQ7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgcHJfZ2lk OwogICAgaW50IHByX3BpZCwgcHJfcHBpZCwgcHJfcGdycCwgcHJfc2lkOwoKICAgIGNoYXIgcHJf Zm5hbWVbMTZdOwogICAgY2hhciBwcl9wc2FyZ3NbKDgwKV07CiAgfTsKCgoKCgoKCnR5cGVkZWYg dm9pZCAqcHNhZGRyX3Q7CgoKdHlwZWRlZiBlbGZfZ3JlZ3NldF90IHByZ3JlZ3NldF90Owp0eXBl ZGVmIGVsZl9mcHJlZ3NldF90IHByZnByZWdzZXRfdDsKCgoKdHlwZWRlZiBfX3BpZF90IGx3cGlk X3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgZWxmX3Byc3RhdHVzIHByc3RhdHVzX3Q7CnR5cGVkZWYgc3Ry dWN0IGVsZl9wcnBzaW5mbyBwcnBzaW5mb190OwoKCiMgMjEgIi4uL2xpbnV4dGhyZWFkc19kYi9w cm9jX3NlcnZpY2UuaCIgMgoKdHlwZWRlZiBlbnVtCnsKICBQU19PSywKICBQU19FUlIsCiAgUFNf QkFEUElELAogIFBTX0JBRExJRCwKICBQU19CQURBRERSLAogIFBTX05PU1lNLAogICAgICAgIFBT X05PRlJFR1MKCgoKCn0gcHNfZXJyX2U7CgoKc3RydWN0IHBzX3Byb2NoYW5kbGU7CgoKZXh0ZXJu IHBzX2Vycl9lIHBzX3BkcmVhZChzdHJ1Y3QgcHNfcHJvY2hhbmRsZSAqLAogICAgICAgICAgICAg ICAgICAgICAgICBwc2FkZHJfdCwgdm9pZCAqLCBzaXplX3QpOwpleHRlcm4gcHNfZXJyX2UgcHNf cGR3cml0ZShzdHJ1Y3QgcHNfcHJvY2hhbmRsZSAqLAogICAgICAgICAgICAgICAgICAgICAgICBw c2FkZHJfdCwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwpleHRlcm4gcHNfZXJyX2UgcHNfcHRyZWFk KHN0cnVjdCBwc19wcm9jaGFuZGxlICosCiAgICAgICAgICAgICAgICAgICAgICAgIHBzYWRkcl90 LCB2b2lkICosIHNpemVfdCk7CmV4dGVybiBwc19lcnJfZSBwc19wdHdyaXRlKHN0cnVjdCBwc19w cm9jaGFuZGxlICosCiAgICAgICAgICAgICAgICAgICAgICAgIHBzYWRkcl90LCBjb25zdCB2b2lk ICosIHNpemVfdCk7CgpleHRlcm4gcHNfZXJyX2UgcHNfcGdsb2JhbF9sb29rdXAoc3RydWN0IHBz X3Byb2NoYW5kbGUgKiwKICAgICAgICBjb25zdCBjaGFyICpvYmplY3RfbmFtZSwgY29uc3QgY2hh ciAqc3ltX25hbWUsIHBzYWRkcl90ICpzeW1fYWRkcik7CgoKZXh0ZXJuIHBzX2Vycl9lIHBzX2xn ZXRyZWdzKHN0cnVjdCBwc19wcm9jaGFuZGxlICosCiAgICAgICAgICAgICAgICAgICAgICAgIGx3 cGlkX3QsIHByZ3JlZ3NldF90KTsKZXh0ZXJuIHBzX2Vycl9lIHBzX2xzZXRyZWdzKHN0cnVjdCBw c19wcm9jaGFuZGxlICosCiAgICAgICAgICAgICAgICAgICAgICAgIGx3cGlkX3QsIGNvbnN0IHBy Z3JlZ3NldF90KTsKZXh0ZXJuIHBzX2Vycl9lIHBzX2xnZXRmcHJlZ3Moc3RydWN0IHBzX3Byb2No YW5kbGUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgbHdwaWRfdCwgcHJmcHJlZ3NldF90ICop OwpleHRlcm4gcHNfZXJyX2UgcHNfbHNldGZwcmVncyhzdHJ1Y3QgcHNfcHJvY2hhbmRsZSAqLAog ICAgICAgICAgICAgICAgICAgICAgICBsd3BpZF90LCBjb25zdCBwcmZwcmVnc2V0X3QgKik7Cgpl eHRlcm4gcGlkX3QgcHNfZ2V0cGlkIChzdHJ1Y3QgcHNfcHJvY2hhbmRsZSAqKTsKCgpleHRlcm4g cHNfZXJyX2UgcHNfcHN0b3AgKGNvbnN0IHN0cnVjdCBwc19wcm9jaGFuZGxlICopOwpleHRlcm4g cHNfZXJyX2UgcHNfcGNvbnRpbnVlIChjb25zdCBzdHJ1Y3QgcHNfcHJvY2hhbmRsZSAqKTsKCmV4 dGVybiBwc19lcnJfZSBwc19sc3RvcCAoY29uc3Qgc3RydWN0IHBzX3Byb2NoYW5kbGUgKiwgbHdw aWRfdCk7CmV4dGVybiBwc19lcnJfZSBwc19sY29udGludWUgKGNvbnN0IHN0cnVjdCBwc19wcm9j aGFuZGxlICosIGx3cGlkX3QpOwojIDcgIi4uL2xpbnV4dGhyZWFkc19kYi90aHJlYWRfZGJQLmgi IDIKIyAxICIuLi9saW51eHRocmVhZHNfZGIvdGhyZWFkX2RiLmgiIDEKIyAyNSAiLi4vbGludXh0 aHJlYWRzX2RiL3RocmVhZF9kYi5oIgojIDEgIi4uL2luY2x1ZGUvcHRocmVhZC5oIiAxCgoKCmV4 dGVybiB2b2lkIF9fcHRocmVhZF9pbml0aWFsaXplICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgod2Vh aykpOwoKZXh0ZXJuIHZvaWQgX19wdGhyZWFkX2luaXRpYWxpemVfbWluaW1hbCAodm9pZCkgX19h dHRyaWJ1dGVfXyAoKHdlYWspKTsKIyAyNiAiLi4vbGludXh0aHJlYWRzX2RiL3RocmVhZF9kYi5o IiAyCgojIDEgIi4uL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEKIyAyOCAiLi4vbGludXh0aHJlYWRz X2RiL3RocmVhZF9kYi5oIiAyCgoKCgp0eXBlZGVmIGVudW0KewogIFREX09LLAogIFREX0VSUiwK ICBURF9OT1RIUiwKICBURF9OT1NWLAogIFREX05PTFdQLAogIFREX0JBRFBILAogIFREX0JBRFRI LAogIFREX0JBRFNILAogIFREX0JBRFRBLAogIFREX0JBREtFWSwKICBURF9OT01TRywKICBURF9O T0ZQUkVHUywKICBURF9OT0xJQlRIUkVBRCwKICBURF9OT0VWRU5ULAogIFREX05PQ0FQQUIsCiAg VERfREJFUlIsCiAgVERfTk9BUExJQywKICBURF9OT1RTRCwKICBURF9NQUxMT0MsCiAgVERfUEFS VElBTFJFRywKICBURF9OT1hSRUdTCn0gdGRfZXJyX2U7CgoKCgp0eXBlZGVmIGVudW0KewogIFRE X1RIUl9BTllfU1RBVEUsCiAgVERfVEhSX1VOS05PV04sCiAgVERfVEhSX1NUT1BQRUQsCiAgVERf VEhSX1JVTiwKICBURF9USFJfQUNUSVZFLAogIFREX1RIUl9aT01CSUUsCiAgVERfVEhSX1NMRUVQ LAogIFREX1RIUl9TVE9QUEVEX0FTTEVFUAp9IHRkX3Rocl9zdGF0ZV9lOwoKCgp0eXBlZGVmIGVu dW0KewogIFREX1RIUl9BTllfVFlQRSwKICBURF9USFJfVVNFUiwKICBURF9USFJfU1lTVEVNCn0g dGRfdGhyX3R5cGVfZTsKCgoKCgp0eXBlZGVmIHN0cnVjdCB0ZF90aHJhZ2VudCB0ZF90aHJhZ2Vu dF90OwoKCnR5cGVkZWYgc3RydWN0IHRkX3RocmhhbmRsZQp7CiAgdGRfdGhyYWdlbnRfdCAqdGhf dGFfcDsKICBwc2FkZHJfdCB0aF91bmlxdWU7Cn0gdGRfdGhyaGFuZGxlX3Q7CiMgMTA3ICIuLi9s aW51eHRocmVhZHNfZGIvdGhyZWFkX2RiLmgiCnR5cGVkZWYgc3RydWN0IHRkX3Rocl9ldmVudHMK ewogIHVpbnQzMl90IGV2ZW50X2JpdHNbMl07Cn0gdGRfdGhyX2V2ZW50c190OwojIDE0NiAiLi4v bGludXh0aHJlYWRzX2RiL3RocmVhZF9kYi5oIgp0eXBlZGVmIGVudW0KewogIFREX0FMTF9FVkVO VFMsCiAgVERfRVZFTlRfTk9ORSA9IFREX0FMTF9FVkVOVFMsCiAgVERfUkVBRFksCiAgVERfU0xF RVAsCiAgVERfU1dJVENIVE8sCiAgVERfU1dJVENIRlJPTSwKICBURF9MT0NLX1RSWSwKICBURF9D QVRDSFNJRywKICBURF9JRExFLAogIFREX0NSRUFURSwKICBURF9ERUFUSCwKICBURF9QUkVFTVBU LAogIFREX1BSSV9JTkhFUklULAogIFREX1JFQVAsCiAgVERfQ09OQ1VSUkVOQ1ksCiAgVERfVElN RU9VVCwKICBURF9NSU5fRVZFTlRfTlVNID0gVERfUkVBRFksCiAgVERfTUFYX0VWRU5UX05VTSA9 IFREX1RJTUVPVVQsCiAgVERfRVZFTlRTX0VOQUJMRSA9IDMxCn0gdGRfZXZlbnRfZTsKCgp0eXBl ZGVmIGVudW0KewogIE5PVElGWV9CUFQsCiAgTk9USUZZX0FVVE9CUFQsCgogIE5PVElGWV9TWVND QUxMCn0gdGRfbm90aWZ5X2U7CgoKdHlwZWRlZiBzdHJ1Y3QgdGRfbm90aWZ5CnsKICB0ZF9ub3Rp ZnlfZSB0eXBlOwogIHVuaW9uCiAgewogICAgcHNhZGRyX3QgYnB0YWRkcjsKICAgIGludCBzeXNj YWxsbm87CiAgfSB1Owp9IHRkX25vdGlmeV90OwoKCnR5cGVkZWYgc3RydWN0IHRkX2V2ZW50X21z Zwp7CiAgdGRfZXZlbnRfZSBldmVudDsKICBjb25zdCB0ZF90aHJoYW5kbGVfdCAqdGhfcDsKICB1 bmlvbgogIHsKCgoKICAgIHVpbnRwdHJfdCBkYXRhOwogIH0gbXNnOwp9IHRkX2V2ZW50X21zZ190 OwoKCnR5cGVkZWYgc3RydWN0CnsKICB0ZF90aHJfZXZlbnRzX3QgZXZlbnRtYXNrOwogIHRkX2V2 ZW50X2UgZXZlbnRudW07CiAgdm9pZCAqZXZlbnRkYXRhOwp9IHRkX2V2ZW50YnVmX3Q7CgoKCnR5 cGVkZWYgc3RydWN0IHRkX3RhX3N0YXRzCnsKICBpbnQgbnRocmVhZHM7CiAgaW50IHJfY29uY3Vy cmVuY3k7CiAgaW50IG5ydW5uYWJsZV9udW07CiAgaW50IG5ydW5uYWJsZV9kZW47CiAgaW50IGFf Y29uY3VycmVuY3lfbnVtOwogIGludCBhX2NvbmN1cnJlbmN5X2RlbjsKICBpbnQgbmx3cHNfbnVt OwoKICBpbnQgbmx3cHNfZGVuOwoKICBpbnQgbmlkbGVfbnVtOwoKICBpbnQgbmlkbGVfZGVuOwoK fSB0ZF90YV9zdGF0c190OwoKCgoKdHlwZWRlZiBwdGhyZWFkX3QgdGhyZWFkX3Q7CnR5cGVkZWYg cHRocmVhZF9rZXlfdCB0aHJlYWRfa2V5X3Q7CgoKCnR5cGVkZWYgaW50IHRkX3Rocl9pdGVyX2Yg KGNvbnN0IHRkX3RocmhhbmRsZV90ICosIHZvaWQgKik7CgoKdHlwZWRlZiBpbnQgdGRfa2V5X2l0 ZXJfZiAodGhyZWFkX2tleV90LCB2b2lkICgqKSAodm9pZCAqKSwgdm9pZCAqKTsKCgoKCnN0cnVj dCBwc19wcm9jaGFuZGxlOwoKCgp0eXBlZGVmIHN0cnVjdCB0ZF90aHJpbmZvCnsKICB0ZF90aHJh Z2VudF90ICp0aV90YV9wOwogIHVuc2lnbmVkIGludCB0aV91c2VyX2ZsYWdzOwogIHRocmVhZF90 IHRpX3RpZDsKCiAgY2hhciAqdGlfdGxzOwogIHBzYWRkcl90IHRpX3N0YXJ0ZnVuYzsKCiAgcHNh ZGRyX3QgdGlfc3RrYmFzZTsKICBsb25nIGludCB0aV9zdGtzaXplOwogIHBzYWRkcl90IHRpX3Jv X2FyZWE7CiAgaW50IHRpX3JvX3NpemU7CiAgdGRfdGhyX3N0YXRlX2UgdGlfc3RhdGU7CiAgdW5z aWduZWQgY2hhciB0aV9kYl9zdXNwZW5kZWQ7CiAgdGRfdGhyX3R5cGVfZSB0aV90eXBlOwoKICBp bnRwdHJfdCB0aV9wYzsKICBpbnRwdHJfdCB0aV9zcDsKICBzaG9ydCBpbnQgdGlfZmxhZ3M7CiAg aW50IHRpX3ByaTsKICBsd3BpZF90IHRpX2xpZDsKICBzaWdzZXRfdCB0aV9zaWdtYXNrOwogIHVu c2lnbmVkIGNoYXIgdGlfdHJhY2VtZTsKCiAgdW5zaWduZWQgY2hhciB0aV9wcmVlbXB0ZmxhZzsK ICB1bnNpZ25lZCBjaGFyIHRpX3BpcmVjZmxhZzsKICBzaWdzZXRfdCB0aV9wZW5kaW5nOwogIHRk X3Rocl9ldmVudHNfdCB0aV9ldmVudHM7Cn0gdGRfdGhyaW5mb190OwoKCgoKCgpleHRlcm4gdGRf ZXJyX2UgdGRfaW5pdCAodm9pZCk7CgoKZXh0ZXJuIHRkX2Vycl9lIHRkX2xvZyAodm9pZCk7CgoK ZXh0ZXJuIGNvbnN0IGNoYXIgKip0ZF9zeW1ib2xfbGlzdCAodm9pZCk7CgoKZXh0ZXJuIHRkX2Vy cl9lIHRkX3RhX25ldyAoc3RydWN0IHBzX3Byb2NoYW5kbGUgKl9fcHMsIHRkX3RocmFnZW50X3Qg KipfX3RhKTsKCgpleHRlcm4gdGRfZXJyX2UgdGRfdGFfZGVsZXRlICh0ZF90aHJhZ2VudF90ICpf X3RhKTsKCgpleHRlcm4gdGRfZXJyX2UgdGRfdGFfZ2V0X250aHJlYWRzIChjb25zdCB0ZF90aHJh Z2VudF90ICpfX3RhLCBpbnQgKl9fbnApOwoKCgpleHRlcm4gdGRfZXJyX2UgdGRfdGFfZ2V0X3Bo IChjb25zdCB0ZF90aHJhZ2VudF90ICpfX3RhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgcHNfcHJvY2hhbmRsZSAqKl9fcGgpOwoKCgpleHRlcm4gdGRfZXJyX2UgdGRfdGFf bWFwX2lkMnRociAoY29uc3QgdGRfdGhyYWdlbnRfdCAqX190YSwgcHRocmVhZF90IF9fcHQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZF90aHJoYW5kbGVfdCAqX190aCk7CgoK CmV4dGVybiB0ZF9lcnJfZSB0ZF90YV9tYXBfbHdwMnRociAoY29uc3QgdGRfdGhyYWdlbnRfdCAq X190YSwgbHdwaWRfdCBfX2x3cGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRkX3RocmhhbmRsZV90ICpfX3RoKTsKCgoKCmV4dGVybiB0ZF9lcnJfZSB0ZF90YV90aHJfaXRl ciAoY29uc3QgdGRfdGhyYWdlbnRfdCAqX190YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0ZF90aHJfaXRlcl9mICpfX2NhbGxiYWNrLCB2b2lkICpfX2NiZGF0YV9wLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRkX3Rocl9zdGF0ZV9lIF9fc3RhdGUsIGludCBfX3Rp X3ByaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWdzZXRfdCAqX190aV9zaWdt YXNrX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fdGlf dXNlcl9mbGFncyk7CgoKZXh0ZXJuIHRkX2Vycl9lIHRkX3RhX3RzZF9pdGVyIChjb25zdCB0ZF90 aHJhZ2VudF90ICpfX3RhLCB0ZF9rZXlfaXRlcl9mICpfX2tpLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZvaWQgKl9fcCk7CgoKCmV4dGVybiB0ZF9lcnJfZSB0ZF90YV9ldmVudF9h ZGRyIChjb25zdCB0ZF90aHJhZ2VudF90ICpfX3RhLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGRfZXZlbnRfZSBfX2V2ZW50LCB0ZF9ub3RpZnlfdCAqX19wdHIpOwoKCmV4dGVy biB0ZF9lcnJfZSB0ZF90YV9zZXRfZXZlbnQgKGNvbnN0IHRkX3RocmFnZW50X3QgKl9fdGEsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkX3Rocl9ldmVudHNfdCAqX19ldmVudCk7 CgoKZXh0ZXJuIHRkX2Vycl9lIHRkX3RhX2NsZWFyX2V2ZW50IChjb25zdCB0ZF90aHJhZ2VudF90 ICpfX3RhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkX3Rocl9ldmVudHNf dCAqX19ldmVudCk7CgoKZXh0ZXJuIHRkX2Vycl9lIHRkX3RhX2V2ZW50X2dldG1zZyAoY29uc3Qg dGRfdGhyYWdlbnRfdCAqX190YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dGRfZXZlbnRfbXNnX3QgKm1zZyk7CgoKCmV4dGVybiB0ZF9lcnJfZSB0ZF90YV9zZXRjb25jdXJy ZW5jeSAoY29uc3QgdGRfdGhyYWdlbnRfdCAqX190YSwgaW50IF9fbGV2ZWwpOwoKCgpleHRlcm4g dGRfZXJyX2UgdGRfdGFfZW5hYmxlX3N0YXRzIChjb25zdCB0ZF90aHJhZ2VudF90ICpfX3RhLCBp bnQgX19lbmFibGUpOwoKCmV4dGVybiB0ZF9lcnJfZSB0ZF90YV9yZXNldF9zdGF0cyAoY29uc3Qg dGRfdGhyYWdlbnRfdCAqX190YSk7CgoKZXh0ZXJuIHRkX2Vycl9lIHRkX3RhX2dldF9zdGF0cyAo Y29uc3QgdGRfdGhyYWdlbnRfdCAqX190YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdGRfdGFfc3RhdHNfdCAqX19zdGF0c3ApOwoKCgpleHRlcm4gdGRfZXJyX2UgdGRfdGhyX3Zh bGlkYXRlIChjb25zdCB0ZF90aHJoYW5kbGVfdCAqX190aCk7CgoKZXh0ZXJuIHRkX2Vycl9lIHRk X3Rocl9nZXRfaW5mbyAoY29uc3QgdGRfdGhyaGFuZGxlX3QgKl9fdGgsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRkX3RocmluZm9fdCAqX19pbmZvcCk7CgoKZXh0ZXJuIHRkX2Vy cl9lIHRkX3Rocl9nZXRmcHJlZ3MgKGNvbnN0IHRkX3RocmhhbmRsZV90ICpfX3RoLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJmcHJlZ3NldF90ICpfX3JlZ3NldCk7CgoKZXh0 ZXJuIHRkX2Vycl9lIHRkX3Rocl9nZXRncmVncyAoY29uc3QgdGRfdGhyaGFuZGxlX3QgKl9fdGgs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZ3JlZ3NldF90IF9fZ3JlZ3MpOwoK CmV4dGVybiB0ZF9lcnJfZSB0ZF90aHJfZ2V0eHJlZ3MgKGNvbnN0IHRkX3RocmhhbmRsZV90ICpf X3RoLCB2b2lkICpfX3hyZWdzKTsKCgpleHRlcm4gdGRfZXJyX2UgdGRfdGhyX2dldHhyZWdzaXpl IChjb25zdCB0ZF90aHJoYW5kbGVfdCAqX190aCwgaW50ICpfX3NpemVwKTsKCgpleHRlcm4gdGRf ZXJyX2UgdGRfdGhyX3NldGZwcmVncyAoY29uc3QgdGRfdGhyaGFuZGxlX3QgKl9fdGgsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmZwcmVnc2V0X3QgKl9fZnByZWdz KTsKCgpleHRlcm4gdGRfZXJyX2UgdGRfdGhyX3NldGdyZWdzIChjb25zdCB0ZF90aHJoYW5kbGVf dCAqX190aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJncmVnc2V0X3QgX19n cmVncyk7CgoKZXh0ZXJuIHRkX2Vycl9lIHRkX3Rocl9zZXR4cmVncyAoY29uc3QgdGRfdGhyaGFu ZGxlX3QgKl9fdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQg Kl9fYWRkcik7CgoKCmV4dGVybiB0ZF9lcnJfZSB0ZF90aHJfZXZlbnRfZW5hYmxlIChjb25zdCB0 ZF90aHJoYW5kbGVfdCAqX190aCwgaW50IF9fZXZlbnQpOwoKCmV4dGVybiB0ZF9lcnJfZSB0ZF90 aHJfc2V0X2V2ZW50IChjb25zdCB0ZF90aHJoYW5kbGVfdCAqX190aCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRkX3Rocl9ldmVudHNfdCAqX19ldmVudCk7CgoKZXh0ZXJuIHRk X2Vycl9lIHRkX3Rocl9jbGVhcl9ldmVudCAoY29uc3QgdGRfdGhyaGFuZGxlX3QgKl9fdGgsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkX3Rocl9ldmVudHNfdCAqX19ldmVu dCk7CgoKZXh0ZXJuIHRkX2Vycl9lIHRkX3Rocl9ldmVudF9nZXRtc2cgKGNvbnN0IHRkX3Rocmhh bmRsZV90ICpfX3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRfZXZl bnRfbXNnX3QgKl9fbXNnKTsKCgoKZXh0ZXJuIHRkX2Vycl9lIHRkX3Rocl9zZXRwcmlvIChjb25z dCB0ZF90aHJoYW5kbGVfdCAqX190aCwgaW50IF9fcHJpbyk7CgoKCmV4dGVybiB0ZF9lcnJfZSB0 ZF90aHJfc2V0c2lncGVuZGluZyAoY29uc3QgdGRfdGhyaGFuZGxlX3QgKl9fdGgsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBfX24sIGNvbnN0IHNp Z3NldF90ICpfX3NzKTsKCgpleHRlcm4gdGRfZXJyX2UgdGRfdGhyX3NpZ3NldG1hc2sgKGNvbnN0 IHRkX3RocmhhbmRsZV90ICpfX3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHNpZ3NldF90ICpfX3NzKTsKCgoKZXh0ZXJuIHRkX2Vycl9lIHRkX3Rocl90c2QgKGNv bnN0IHRkX3RocmhhbmRsZV90ICpfX3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgdGhyZWFkX2tleV90IF9fdGssIHZvaWQgKipfX2RhdGEpOwoKCgpleHRlcm4gdGRfZXJyX2Ug dGRfdGhyX2Ric3VzcGVuZCAoY29uc3QgdGRfdGhyaGFuZGxlX3QgKl9fdGgpOwoKCmV4dGVybiB0 ZF9lcnJfZSB0ZF90aHJfZGJyZXN1bWUgKGNvbnN0IHRkX3RocmhhbmRsZV90ICpfX3RoKTsKIyA4 ICIuLi9saW51eHRocmVhZHNfZGIvdGhyZWFkX2RiUC5oIiAyCiMgMSAiLi4vbGludXh0aHJlYWRz L2ludGVybmFscy5oIiAxCiMgOSAiLi4vbGludXh0aHJlYWRzX2RiL3RocmVhZF9kYlAuaCIgMgoK CgplbnVtCiAgewogICAgUFRIUkVBRF9USFJFQURTX0VWRU5UUyA9IDAsCiAgICBQVEhSRUFEX0xB U1RfRVZFTlQsCiAgICBQVEhSRUFEX0hBTkRMRVNfTlVNLAogICAgUFRIUkVBRF9IQU5ETEVTLAog ICAgUFRIUkVBRF9LRVlTLAogICAgTElOVVhUSFJFQURTX1BUSFJFQURfVEhSRUFEU19NQVgsCiAg ICBMSU5VWFRIUkVBRFNfUFRIUkVBRF9LRVlTX01BWCwKICAgIExJTlVYVEhSRUFEU19QVEhSRUFE X1NJWkVPRl9ERVNDUiwKICAgIExJTlVYVEhSRUFEU19DUkVBVEVfRVZFTlQsCiAgICBMSU5VWFRI UkVBRFNfREVBVEhfRVZFTlQsCiAgICBMSU5VWFRIUkVBRFNfUkVBUF9FVkVOVCwKICAgIE5VTV9N RVNTQUdFUwogIH07CgoKCgoKZXh0ZXJuIGludCBfX3RkX2RlYnVnOwoKCgoKCgpzdHJ1Y3QgdGRf dGhyYWdlbnQKewoKCiAgc3RydWN0IHBzX3Byb2NoYW5kbGUgKnBoOwoKCgoKICBzdHJ1Y3QgcHRo cmVhZF9oYW5kbGVfc3RydWN0ICpoYW5kbGVzOwoKCiAgc3RydWN0IHB0aHJlYWRfa2V5X3N0cnVj dCAqa2V5czsKCgogIGludCBwdGhyZWFkX3RocmVhZHNfbWF4OwoKCiAgaW50IHB0aHJlYWRfa2V5 c19tYXg7CgoKICBpbnQgcHRocmVhZF9rZXlfMm5kbGV2ZWxfc2l6ZTsKCgogIGludCBzaXplb2Zf ZGVzY3I7CgoKICBwc2FkZHJfdCBwdGhyZWFkX3RocmVhZHNfZXZlbnRzcDsKCgogIHBzYWRkcl90 IHB0aHJlYWRfbGFzdF9ldmVudDsKCgogIHBzYWRkcl90IHB0aHJlYWRfaGFuZGxlc19udW07Cn07 CgoKCnN0cnVjdCBhZ2VudF9saXN0CnsKICB0ZF90aHJhZ2VudF90ICp0YTsKICBzdHJ1Y3QgYWdl bnRfbGlzdCAqbmV4dDsKfTsKCgpleHRlcm4gc3RydWN0IGFnZW50X2xpc3QgKl9fdGRfYWdlbnRf bGlzdDsKCgpzdGF0aWMgaW5saW5lIGludAp0YV9vayAoY29uc3QgdGRfdGhyYWdlbnRfdCAqdGEp CnsKICBzdHJ1Y3QgYWdlbnRfbGlzdCAqcnVucCA9IF9fdGRfYWdlbnRfbGlzdDsKCiAgaWYgKHRh ID09ICgodm9pZCAqKTApKQogICAgcmV0dXJuIDA7CgogIHdoaWxlIChydW5wICE9ICgodm9pZCAq KTApICYmIHJ1bnAtPnRhICE9IHRhKQogICAgcnVucCA9IHJ1bnAtPm5leHQ7CgogIHJldHVybiBy dW5wICE9ICgodm9pZCAqKTApOwp9CgoKCmV4dGVybiBpbnQgdGRfbG9va3VwIChzdHJ1Y3QgcHNf cHJvY2hhbmRsZSAqcHMsIGludCBpZHgsIHBzYWRkcl90ICpzeW1fYWRkcik7CiMgMzcgImludGVy bmFscy5oIiAyCiMgMSAiLi4vc3lzZGVwcy9nZW5lcmljL2hwLXRpbWluZy5oIiAxCiMgNzEgIi4u L3N5c2RlcHMvZ2VuZXJpYy9ocC10aW1pbmcuaCIKdHlwZWRlZiBpbnQgaHBfdGltaW5nX3Q7CiMg MzggImludGVybmFscy5oIiAyCiMgNTQgImludGVybmFscy5oIgpzdHJ1Y3QgcHRocmVhZF9zdGFy dF9hcmdzIHsKICB2b2lkICogKCpzdGFydF9yb3V0aW5lKSh2b2lkICopOwogIHZvaWQgKiBhcmc7 CiAgc2lnc2V0X3QgbWFzazsKICBpbnQgc2NoZWRwb2xpY3k7CiAgc3RydWN0IHNjaGVkX3BhcmFt IHNjaGVkcGFyYW07Cn07CiMgNzcgImludGVybmFscy5oIgp0eXBlZGVmIHZvaWQgKCpkZXN0cl9m dW5jdGlvbikodm9pZCAqKTsKCnN0cnVjdCBwdGhyZWFkX2tleV9zdHJ1Y3QgewogIGludCBpbl91 c2U7CiAgZGVzdHJfZnVuY3Rpb24gZGVzdHI7Cn07CgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBfcHRo cmVhZF9kZXNjcl9zdHJ1Y3QgKiBwdGhyZWFkX2Rlc2NyOwojIDEwMSAiaW50ZXJuYWxzLmgiCnR5 cGVkZWYgc3RydWN0IF9wdGhyZWFkX2V4dHJpY2F0ZV9zdHJ1Y3QgewogICAgdm9pZCAqcHVfb2Jq ZWN0OwogICAgaW50ICgqcHVfZXh0cmljYXRlX2Z1bmMpKHZvaWQgKiwgcHRocmVhZF9kZXNjcik7 Cn0gcHRocmVhZF9leHRyaWNhdGVfaWY7CgoKCnN0cnVjdCBwdGhyZWFkX2F0b21pYyB7CiAgbG9u ZyBwX2NvdW50OwogIGludCBwX3NwaW5sb2NrOwp9OwojIDEyMSAiaW50ZXJuYWxzLmgiCnN0cnVj dCBfcHRocmVhZF9yd2xvY2tfdDsKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX3J3bG9ja19pbmZv IHsKICBzdHJ1Y3QgX3B0aHJlYWRfcndsb2NrX2luZm8gKnByX25leHQ7CiAgc3RydWN0IF9wdGhy ZWFkX3J3bG9ja190ICpwcl9sb2NrOwogIGludCBwcl9sb2NrX2NvdW50Owp9IHB0aHJlYWRfcmVh ZGxvY2tfaW5mbzsKCnN0cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1Y3QgewogIHVuaW9uIHsKICAg IHN0cnVjdCB7CiAgICAgIHB0aHJlYWRfZGVzY3Igc2VsZjsKICAgIH0gZGF0YTsKICAgIHZvaWQg Kl9fcGFkZGluZ1sxNl07CiAgfSBwX2hlYWRlcjsKICBwdGhyZWFkX2Rlc2NyIHBfbmV4dGxpdmUs IHBfcHJldmxpdmU7CgogIHB0aHJlYWRfZGVzY3IgcF9uZXh0d2FpdGluZzsKICBwdGhyZWFkX2Rl c2NyIHBfbmV4dGxvY2s7CiAgcHRocmVhZF90IHBfdGlkOwogIGludCBwX3BpZDsKICBpbnQgcF9w cmlvcml0eTsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgKiBwX2xvY2s7CiAgaW50IHBfc2ln bmFsOwogIHNpZ2ptcF9idWYgKiBwX3NpZ25hbF9qbXA7CiAgc2lnam1wX2J1ZiAqIHBfY2FuY2Vs X2ptcDsKICBjaGFyIHBfdGVybWluYXRlZDsKICBjaGFyIHBfZGV0YWNoZWQ7CiAgY2hhciBwX2V4 aXRlZDsKICB2b2lkICogcF9yZXR2YWw7CiAgaW50IHBfcmV0Y29kZTsKICBwdGhyZWFkX2Rlc2Ny IHBfam9pbmluZzsKICBzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKiBwX2NsZWFudXA7 CiAgY2hhciBwX2NhbmNlbHN0YXRlOwogIGNoYXIgcF9jYW5jZWx0eXBlOwogIGNoYXIgcF9jYW5j ZWxlZDsKICBpbnQgKiBwX2Vycm5vcDsKICBpbnQgcF9lcnJubzsKICBpbnQgKiBwX2hfZXJybm9w OwogIGludCBwX2hfZXJybm87CiAgY2hhciAqIHBfaW5fc2lnaGFuZGxlcjsKICBjaGFyIHBfc2ln d2FpdGluZzsKICBzdHJ1Y3QgcHRocmVhZF9zdGFydF9hcmdzIHBfc3RhcnRfYXJnczsKICB2b2lk ICoqIHBfc3BlY2lmaWNbKCgxMDI0ICsgMzIgLSAxKSAvIDMyKV07CiAgdm9pZCAqIHBfbGliY19z cGVjaWZpY1tfTElCQ19UU0RfS0VZX05dOwogIGludCBwX3VzZXJzdGFjazsKICB2b2lkICpwX2d1 YXJkYWRkcjsKICBzaXplX3QgcF9ndWFyZHNpemU7CiAgaW50IHBfbnI7CiAgaW50IHBfcmVwb3J0 X2V2ZW50czsKICB0ZF9ldmVudGJ1Zl90IHBfZXZlbnRidWY7CiAgc3RydWN0IHB0aHJlYWRfYXRv bWljIHBfcmVzdW1lX2NvdW50OwoKICBjaGFyIHBfd29rZW5fYnlfY2FuY2VsOwogIGNoYXIgcF9j b25kdmFyX2F2YWlsOwogIGNoYXIgcF9zZW1fYXZhaWw7CiAgcHRocmVhZF9leHRyaWNhdGVfaWYg KnBfZXh0cmljYXRlOwogIHB0aHJlYWRfcmVhZGxvY2tfaW5mbyAqcF9yZWFkbG9ja19saXN0Owog IHB0aHJlYWRfcmVhZGxvY2tfaW5mbyAqcF9yZWFkbG9ja19mcmVlOwogIGludCBwX3VudHJhY2tl ZF9yZWFkbG9ja19jb3VudDsKICBzdHJ1Y3QgX19yZXNfc3RhdGUgKnBfcmVzcDsKICBzdHJ1Y3Qg X19yZXNfc3RhdGUgcF9yZXM7CiAgaW50IHBfaW5oZXJpdHNjaGVkOwoKCgoKfSBfX2F0dHJpYnV0 ZV9fICgoYWxpZ25lZCgzMikpKTsKIyAxOTcgImludGVybmFscy5oIgp0eXBlZGVmIHN0cnVjdCBw dGhyZWFkX2hhbmRsZV9zdHJ1Y3QgKiBwdGhyZWFkX2hhbmRsZTsKCnN0cnVjdCBwdGhyZWFkX2hh bmRsZV9zdHJ1Y3QgewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBoX2xvY2s7CiAgcHRocmVh ZF9kZXNjciBoX2Rlc2NyOwogIGNoYXIgKiBoX2JvdHRvbTsKfTsKCgoKc3RydWN0IHB0aHJlYWRf cmVxdWVzdCB7CiAgcHRocmVhZF9kZXNjciByZXFfdGhyZWFkOwogIGVudW0gewogICAgUkVRX0NS RUFURSwgUkVRX0ZSRUUsIFJFUV9QUk9DRVNTX0VYSVQsIFJFUV9NQUlOX1RIUkVBRF9FWElULAog ICAgUkVRX1BPU1QsIFJFUV9ERUJVRywgUkVRX0tJQ0ssIFJFUV9GT1JfRUFDSF9USFJFQUQKICB9 IHJlcV9raW5kOwogIHVuaW9uIHsKICAgIHN0cnVjdCB7CiAgICAgIGNvbnN0IHB0aHJlYWRfYXR0 cl90ICogYXR0cjsKICAgICAgdm9pZCAqICgqZm4pKHZvaWQgKik7CiAgICAgIHZvaWQgKiBhcmc7 CiAgICAgIHNpZ3NldF90IG1hc2s7CiAgICB9IGNyZWF0ZTsKICAgIHN0cnVjdCB7CiAgICAgIHB0 aHJlYWRfdCB0aHJlYWRfaWQ7CiAgICB9IGZyZWU7CiAgICBzdHJ1Y3QgewogICAgICBpbnQgY29k ZTsKICAgIH0gZXhpdDsKICAgIHZvaWQgKiBwb3N0OwogICAgc3RydWN0IHsKICAgICAgdm9pZCAo KmZuKSh2b2lkICosIHB0aHJlYWRfZGVzY3IpOwogICAgICB2b2lkICphcmc7CiAgICB9IGZvcl9l YWNoOwogIH0gcmVxX2FyZ3M7Cn07CgoKCgpleHRlcm4gaW50IF9fcHRocmVhZF9zaWdfcmVzdGFy dDsKZXh0ZXJuIGludCBfX3B0aHJlYWRfc2lnX2NhbmNlbDsKCgoKZXh0ZXJuIGludCBfX3B0aHJl YWRfc2lnX2RlYnVnOwoKCgoKCmV4dGVybiBzdHJ1Y3QgcHRocmVhZF9oYW5kbGVfc3RydWN0IF9f cHRocmVhZF9oYW5kbGVzWzEwMjRdOwoKCgpleHRlcm4gc3RydWN0IF9wdGhyZWFkX2Rlc2NyX3N0 cnVjdCBfX3B0aHJlYWRfaW5pdGlhbF90aHJlYWQ7CgoKCmV4dGVybiBzdHJ1Y3QgX3B0aHJlYWRf ZGVzY3Jfc3RydWN0IF9fcHRocmVhZF9tYW5hZ2VyX3RocmVhZDsKCgoKZXh0ZXJuIHB0aHJlYWRf ZGVzY3IgX19wdGhyZWFkX21haW5fdGhyZWFkOwoKCgoKCgpleHRlcm4gY2hhciAqX19wdGhyZWFk X2luaXRpYWxfdGhyZWFkX2JvczsKCgoKCmV4dGVybiBpbnQgX19wdGhyZWFkX25vbnN0YW5kYXJk X3N0YWNrczsKCgoKCmV4dGVybiBpbnQgX19wdGhyZWFkX21hbmFnZXJfcmVxdWVzdDsKCgoKZXh0 ZXJuIGludCBfX3B0aHJlYWRfbWFuYWdlcl9yZWFkZXI7CgoKCmV4dGVybiBjaGFyICpfX3B0aHJl YWRfbWFuYWdlcl90aHJlYWRfYm9zOwpleHRlcm4gY2hhciAqX19wdGhyZWFkX21hbmFnZXJfdGhy ZWFkX3RvczsKIyAyOTUgImludGVybmFscy5oIgpleHRlcm4gaW50IF9fcHRocmVhZF9leGl0X3Jl cXVlc3RlZCwgX19wdGhyZWFkX2V4aXRfY29kZTsKCgoKZXh0ZXJuIHZvbGF0aWxlIGludCBfX3B0 aHJlYWRfdGhyZWFkc19kZWJ1ZzsKCgpleHRlcm4gdm9sYXRpbGUgdGRfdGhyX2V2ZW50c190IF9f cHRocmVhZF90aHJlYWRzX2V2ZW50czsKCgpleHRlcm4gdm9sYXRpbGUgcHRocmVhZF9kZXNjciBf X3B0aHJlYWRfbGFzdF9ldmVudDsKCgpleHRlcm4gaW50IF9fcHRocmVhZF9zbXBfa2VybmVsOwoK CgpzdGF0aWMgaW5saW5lIHB0aHJlYWRfaGFuZGxlIHRocmVhZF9oYW5kbGUocHRocmVhZF90IGlk KQp7CiAgcmV0dXJuICZfX3B0aHJlYWRfaGFuZGxlc1tpZCAlIDEwMjRdOwp9CgoKCnN0YXRpYyBp bmxpbmUgaW50IGludmFsaWRfaGFuZGxlKHB0aHJlYWRfaGFuZGxlIGgsIHB0aHJlYWRfdCBpZCkK ewogIHJldHVybiBoLT5oX2Rlc2NyID09ICgodm9pZCAqKTApIHx8IGgtPmhfZGVzY3ItPnBfdGlk ICE9IGlkIHx8IGgtPmhfZGVzY3ItPnBfdGVybWluYXRlZDsKfQoKc3RhdGljIGlubGluZSBpbnQg bm9uZXhpc3RpbmdfaGFuZGxlKHB0aHJlYWRfaGFuZGxlIGgsIHB0aHJlYWRfdCBpZCkKewogIHJl dHVybiBoLT5oX2Rlc2NyID09ICgodm9pZCAqKTApIHx8IGgtPmhfZGVzY3ItPnBfdGlkICE9IGlk Owp9CiMgMzc1ICJpbnRlcm5hbHMuaCIKZXh0ZXJuIHB0aHJlYWRfZGVzY3IgX19wdGhyZWFkX2Zp bmRfc2VsZiAodm9pZCkgX19hdHRyaWJ1dGVfXyAoKGNvbnN0KSk7CgpzdGF0aWMgaW5saW5lIHB0 aHJlYWRfZGVzY3IgdGhyZWFkX3NlbGYgKHZvaWQpIF9fYXR0cmlidXRlX18gKChjb25zdCkpOwpz dGF0aWMgaW5saW5lIHB0aHJlYWRfZGVzY3IgdGhyZWFkX3NlbGYgKHZvaWQpCnsKCgoKICBjaGFy ICpzcCA9IF9fYnVpbHRpbl9mcmFtZV9hZGRyZXNzICgwKTsKICBpZiAoc3AgPj0gX19wdGhyZWFk X2luaXRpYWxfdGhyZWFkX2JvcykKICAgIHJldHVybiAmX19wdGhyZWFkX2luaXRpYWxfdGhyZWFk OwogIGVsc2UgaWYgKHNwID49IF9fcHRocmVhZF9tYW5hZ2VyX3RocmVhZF9ib3MKICAgICAgICAg ICAmJiBzcCA8IF9fcHRocmVhZF9tYW5hZ2VyX3RocmVhZF90b3MpCiAgICByZXR1cm4gJl9fcHRo cmVhZF9tYW5hZ2VyX3RocmVhZDsKICBlbHNlIGlmIChfX3B0aHJlYWRfbm9uc3RhbmRhcmRfc3Rh Y2tzKQogICAgcmV0dXJuIF9fcHRocmVhZF9maW5kX3NlbGYoKTsKICBlbHNlCgogICAgcmV0dXJu IChwdGhyZWFkX2Rlc2NyKSgoKHVuc2lnbmVkIGxvbmcpc3AgfCAoKDIgKiAxMDI0ICogMTAyNCkt MSkpKzEpIC0gMTsKCgoKCn0KIyA0NTEgImludGVybmFscy5oIgpleHRlcm4gdm9pZCBfX3B0aHJl YWRfZG9fZXhpdCAodm9pZCAqcmV0dmFsLCBjaGFyICpjdXJyZW50ZnJhbWUpCiAgICAgX19hdHRy aWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwpleHRlcm4gdm9pZCBfX3B0aHJlYWRfZGVzdHJveV9z cGVjaWZpY3MgKHZvaWQpOwpleHRlcm4gdm9pZCBfX3B0aHJlYWRfcGVyZm9ybV9jbGVhbnVwIChj aGFyICpjdXJyZW50ZnJhbWUpOwpleHRlcm4gdm9pZCBfX3B0aHJlYWRfaW5pdF9tYXhfc3RhY2tz aXplICh2b2lkKTsKZXh0ZXJuIGludCBfX3B0aHJlYWRfaW5pdGlhbGl6ZV9tYW5hZ2VyICh2b2lk KTsKZXh0ZXJuIHZvaWQgX19wdGhyZWFkX21lc3NhZ2UgKGNoYXIgKiBmbXQsIC4uLik7CmV4dGVy biBpbnQgX19wdGhyZWFkX21hbmFnZXIgKHZvaWQgKnJlcWZkKTsKZXh0ZXJuIGludCBfX3B0aHJl YWRfbWFuYWdlcl9ldmVudCAodm9pZCAqcmVxZmQpOwpleHRlcm4gdm9pZCBfX3B0aHJlYWRfbWFu YWdlcl9zaWdoYW5kbGVyIChpbnQgc2lnKTsKZXh0ZXJuIHZvaWQgX19wdGhyZWFkX3Jlc2V0X21h aW5fdGhyZWFkICh2b2lkKTsKZXh0ZXJuIHZvaWQgX19wdGhyZWFkX29uY2VfZm9ya19wcmVwYXJl ICh2b2lkKTsKZXh0ZXJuIHZvaWQgX19wdGhyZWFkX29uY2VfZm9ya19wYXJlbnQgKHZvaWQpOwpl eHRlcm4gdm9pZCBfX3B0aHJlYWRfb25jZV9mb3JrX2NoaWxkICh2b2lkKTsKZXh0ZXJuIHZvaWQg X19mbG9ja2ZpbGVsaXN0ICh2b2lkKTsKZXh0ZXJuIHZvaWQgX19mdW5sb2NrZmlsZWxpc3QgKHZv aWQpOwpleHRlcm4gdm9pZCBfX2ZyZXNldGxvY2tmaWxlcyAodm9pZCk7CmV4dGVybiB2b2lkIF9f cHRocmVhZF9tYW5hZ2VyX2FkanVzdF9wcmlvIChpbnQgdGhyZWFkX3ByaW8pOwpleHRlcm4gdm9p ZCBfX3B0aHJlYWRfaW5pdGlhbGl6ZV9taW5pbWFsICh2b2lkKTsKCmV4dGVybiBpbnQgX19wdGhy ZWFkX2F0dHJfc2V0Z3VhcmRzaXplIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fZ3VhcmRzaXplKTsKZXh0ZXJu IGludCBfX3B0aHJlYWRfYXR0cl9nZXRndWFyZHNpemUgKGNvbnN0IHB0aHJlYWRfYXR0cl90ICpf X2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9f Z3VhcmRzaXplKTsKZXh0ZXJuIGludCBfX3B0aHJlYWRfYXR0cl9zZXRzdGFja2FkZHIgKHB0aHJl YWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2b2lkICpfX3N0YWNrYWRkcik7CmV4dGVybiBpbnQgX19wdGhyZWFkX2F0dHJfZ2V0c3RhY2th ZGRyIChjb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdm9pZCAqKl9fc3RhY2thZGRyKTsKZXh0ZXJuIGludCBfX3B0aHJl YWRfYXR0cl9zZXRzdGFja3NpemUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGFja3NpemUpOwpleHRlcm4g aW50IF9fcHRocmVhZF9hdHRyX2dldHN0YWNrc2l6ZSAoY29uc3QgcHRocmVhZF9hdHRyX3QgKl9f YXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19z dGFja3NpemUpOwpleHRlcm4gaW50IF9fcHRocmVhZF9hdHRyX3NldHN0YWNrIChwdGhyZWFkX2F0 dHJfdCAqX19hdHRyLCB2b2lkICpfX3N0YWNrYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZV90IF9fc3RhY2tzaXplKTsKZXh0ZXJuIGludCBfX3B0aHJlYWRfYXR0 cl9nZXRzdGFjayAoY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgdm9pZCAqKl9fc3RhY2th ZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fc3RhY2tz aXplKTsKZXh0ZXJuIGludCBfX3B0aHJlYWRfZ2V0Y29uY3VycmVuY3kgKHZvaWQpOwpleHRlcm4g aW50IF9fcHRocmVhZF9zZXRjb25jdXJyZW5jeSAoaW50IF9fbGV2ZWwpOwpleHRlcm4gaW50IF9f cHRocmVhZF9tdXRleF90aW1lZGxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9f YWJzdGltZSk7CmV4dGVybiBpbnQgX19wdGhyZWFkX211dGV4YXR0cl9nZXRwc2hhcmVkIChjb25z dCBwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgKl9fcHNoYXJlZCk7CmV4dGVybiBpbnQgX19wdGhyZWFkX211 dGV4YXR0cl9zZXRwc2hhcmVkIChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19wc2hhcmVkKTsKZXh0ZXJu IGludCBfX3B0aHJlYWRfbXV0ZXhhdHRyX2dldHR5cGUgKGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRy X3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAq X19raW5kKTsKZXh0ZXJuIHZvaWQgX19wdGhyZWFkX2tpbGxfb3RoZXJfdGhyZWFkc19ucCAodm9p ZCk7CgpleHRlcm4gdm9pZCBfX3B0aHJlYWRfcmVzdGFydF9vbGQocHRocmVhZF9kZXNjciB0aCk7 CmV4dGVybiB2b2lkIF9fcHRocmVhZF9zdXNwZW5kX29sZChwdGhyZWFkX2Rlc2NyIHNlbGYpOwpl eHRlcm4gaW50IF9fcHRocmVhZF90aW1lZHN1c3BlbmRfb2xkKHB0aHJlYWRfZGVzY3Igc2VsZiwg Y29uc3Qgc3RydWN0IHRpbWVzcGVjICphYnMpOwoKZXh0ZXJuIHZvaWQgX19wdGhyZWFkX3Jlc3Rh cnRfbmV3KHB0aHJlYWRfZGVzY3IgdGgpOwpleHRlcm4gdm9pZCBfX3B0aHJlYWRfc3VzcGVuZF9u ZXcocHRocmVhZF9kZXNjciBzZWxmKTsKZXh0ZXJuIGludCBfX3B0aHJlYWRfdGltZWRzdXNwZW5k X25ldyhwdGhyZWFkX2Rlc2NyIHNlbGYsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqYWJzKTsKCmV4 dGVybiB2b2lkIF9fcHRocmVhZF93YWl0X2Zvcl9yZXN0YXJ0X3NpZ25hbChwdGhyZWFkX2Rlc2Ny IHNlbGYpOwoKZXh0ZXJuIGludCBfX3B0aHJlYWRfeWllbGQgKHZvaWQpOwoKZXh0ZXJuIGludCBf X3B0aHJlYWRfcndsb2NrX3RpbWVkcmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3Jlc3RyaWN0 IF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19hYnN0aW1lKTsKZXh0ZXJuIGludCBfX3B0aHJlYWRfcndsb2NrX3Rp bWVkd3Jsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3Jlc3RyaWN0IF9fcndsb2NrLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVj ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19h YnN0aW1lKTsKZXh0ZXJuIGludCBfX3B0aHJlYWRfcndsb2NrYXR0cl9kZXN0cm95IChwdGhyZWFk X3J3bG9ja2F0dHJfdCAqX19hdHRyKTsKCmV4dGVybiBpbnQgX19wdGhyZWFkX2JhcnJpZXJhdHRy X2dldHBzaGFyZWQgKF9fY29uc3QgcHRocmVhZF9iYXJyaWVyYXR0cl90ICoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBf X3BzaGFyZWQpOwoKZXh0ZXJuIGludCBfX3B0aHJlYWRfc3Bpbl9sb2NrIChwdGhyZWFkX3NwaW5s b2NrX3QgKl9fbG9jayk7CmV4dGVybiBpbnQgX19wdGhyZWFkX3NwaW5fdHJ5bG9jayAocHRocmVh ZF9zcGlubG9ja190ICpfX2xvY2spOwpleHRlcm4gaW50IF9fcHRocmVhZF9zcGluX3VubG9jayAo cHRocmVhZF9zcGlubG9ja190ICpfX2xvY2spOwpleHRlcm4gaW50IF9fcHRocmVhZF9zcGluX2lu aXQgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrLCBpbnQgX19wc2hhcmVkKTsKZXh0ZXJuIGlu dCBfX3B0aHJlYWRfc3Bpbl9kZXN0cm95IChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jayk7Cgpl eHRlcm4gaW50IF9fcHRocmVhZF9jbG9ja19nZXR0aW1lIChocF90aW1pbmdfdCBmcmVxLCBzdHJ1 Y3QgdGltZXNwZWMgKnRwKTsKZXh0ZXJuIHZvaWQgX19wdGhyZWFkX2Nsb2NrX3NldHRpbWUgKGhw X3RpbWluZ190IG9mZnNldCk7CgoKCgpleHRlcm4gdm9pZCAoKl9fcHRocmVhZF9yZXN0YXJ0KShw dGhyZWFkX2Rlc2NyKTsKZXh0ZXJuIHZvaWQgKCpfX3B0aHJlYWRfc3VzcGVuZCkocHRocmVhZF9k ZXNjcik7CmV4dGVybiBpbnQgKCpfX3B0aHJlYWRfdGltZWRzdXNwZW5kKShwdGhyZWFkX2Rlc2Ny LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKik7CgoKCmV4dGVybiBpbnQgX19saWJjX2Nsb3NlIChp bnQgZmQpOwpleHRlcm4gaW50IF9fbGliY19uYW5vc2xlZXAgKGNvbnN0IHN0cnVjdCB0aW1lc3Bl YyAqcmVxdWVzdGVkX3RpbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRp bWVzcGVjICpyZW1haW5pbmcpOwoKZXh0ZXJuIGludCBfX25ld19zZW1fcG9zdCAoc2VtX3QgKiBz ZW0pOwpleHRlcm4gaW50IF9fbmV3X3NlbV9pbml0IChzZW1fdCAqX19zZW0sIGludCBfX3BzaGFy ZWQsIHVuc2lnbmVkIGludCBfX3ZhbHVlKTsKZXh0ZXJuIGludCBfX25ld19zZW1fd2FpdCAoc2Vt X3QgKl9fc2VtKTsKZXh0ZXJuIGludCBfX25ld19zZW1fdHJ5d2FpdCAoc2VtX3QgKl9fc2VtKTsK ZXh0ZXJuIGludCBfX25ld19zZW1fZ2V0dmFsdWUgKHNlbV90ICpfX3Jlc3RyaWN0IF9fc2VtLCBp bnQgKl9fcmVzdHJpY3QgX19zdmFsKTsKZXh0ZXJuIGludCBfX25ld19zZW1fZGVzdHJveSAoc2Vt X3QgKl9fc2VtKTsKCgpleHRlcm4gaW50IF9fcHRocmVhZF9hdHRyX2luaXRfMl8xIChwdGhyZWFk X2F0dHJfdCAqX19hdHRyKTsKZXh0ZXJuIGludCBfX3B0aHJlYWRfYXR0cl9pbml0XzJfMCAocHRo cmVhZF9hdHRyX3QgKl9fYXR0cik7CmV4dGVybiBpbnQgX19wdGhyZWFkX2NyZWF0ZV8yXzEgKHB0 aHJlYWRfdCAqX19yZXN0cmljdCBfX3RocmVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdm9pZCAqKCpfX3N0YXJ0X3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX3Jlc3RyaWN0IF9fYXJnKTsKZXh0ZXJuIGlu dCBfX3B0aHJlYWRfY3JlYXRlXzJfMCAocHRocmVhZF90ICpfX3Jlc3RyaWN0IHRocmVhZCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKCpfX3N0YXJ0X3JvdXRp bmUpICh2b2lkICopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX3Jl c3RyaWN0IGFyZyk7CgoKZXh0ZXJuIHZvaWQgX19saW51eHRocmVhZHNfY3JlYXRlX2V2ZW50ICh2 b2lkKTsKZXh0ZXJuIHZvaWQgX19saW51eHRocmVhZHNfZGVhdGhfZXZlbnQgKHZvaWQpOwpleHRl cm4gdm9pZCBfX2xpbnV4dGhyZWFkc19yZWFwX2V2ZW50ICh2b2lkKTsKCgpleHRlcm4gdm9pZCBf X3B0aHJlYWRfaW5pdGlhbGl6ZSAodm9pZCk7CiMgMzEgInB0aHJlYWQuYyIgMgojIDEgInNwaW5s b2NrLmgiIDEKIyAxNSAic3BpbmxvY2suaCIKIyAxICIuLi9saW51eHRocmVhZHMvc3lzZGVwcy9w dGhyZWFkL2JpdHMvaW5pdHNwaW4uaCIgMQojIDE2ICJzcGlubG9jay5oIiAyCiMgMzggInNwaW5s b2NrLmgiCmV4dGVybiBpbnQgX19wdGhyZWFkX2hhc19jYXM7CmV4dGVybiBpbnQgX19wdGhyZWFk X2NvbXBhcmVfYW5kX3N3YXAobG9uZyAqIHB0ciwgbG9uZyBvbGR2YWwsIGxvbmcgbmV3dmFsLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqIHNwaW5sb2NrKTsKCnN0 YXRpYyBpbmxpbmUgaW50IGNvbXBhcmVfYW5kX3N3YXAobG9uZyAqIHB0ciwgbG9uZyBvbGR2YWws IGxvbmcgbmV3dmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqIHNw aW5sb2NrKQp7CiAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKF9fcHRocmVhZF9oYXNfY2FzLCAxKSkK ICAgIHJldHVybiBfX2NvbXBhcmVfYW5kX3N3YXAocHRyLCBvbGR2YWwsIG5ld3ZhbCk7CiAgZWxz ZQogICAgcmV0dXJuIF9fcHRocmVhZF9jb21wYXJlX2FuZF9zd2FwKHB0ciwgb2xkdmFsLCBuZXd2 YWwsIHNwaW5sb2NrKTsKfQojIDk1ICJzcGlubG9jay5oIgpleHRlcm4gdm9pZCBfX2F0dHJpYnV0 ZV9fICgocmVncGFybSAoMyksIHN0ZGNhbGwpKSBfX3B0aHJlYWRfbG9jayhzdHJ1Y3QgX3B0aHJl YWRfZmFzdGxvY2sgKiBsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwdGhyZWFkX2Rlc2NyIHNlbGYpOwpleHRlcm4gaW50IF9fcHRocmVhZF91bmxvY2so c3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrICpsb2NrKTsKCnN0YXRpYyBpbmxpbmUgdm9pZCBfX3B0 aHJlYWRfaW5pdF9sb2NrKHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayAqIGxvY2spCnsKICBsb2Nr LT5fX3N0YXR1cyA9IDA7CiAgbG9jay0+X19zcGlubG9jayA9IDA7Cn0KCnN0YXRpYyBpbmxpbmUg aW50IF9fcHRocmVhZF90cnlsb2NrIChzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgKiBsb2NrKQp7 CgogIGlmICghX19wdGhyZWFkX2hhc19jYXMpCgoKICB7CiAgICByZXR1cm4gKHRlc3RhbmRzZXQo JmxvY2stPl9fc3BpbmxvY2spID8gMTYgOiAwKTsKICB9CgoKCiAgZG8gewogICAgaWYgKGxvY2st Pl9fc3RhdHVzICE9IDApIHJldHVybiAxNjsKICB9IHdoaWxlKCEgX19jb21wYXJlX2FuZF9zd2Fw KCZsb2NrLT5fX3N0YXR1cywgMCwgMSkpOwogIHJldHVybiAwOwoKfQoKCgoKCmV4dGVybiB2b2lk IF9fcHRocmVhZF9hbHRfbG9jayhzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgKiBsb2NrLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9kZXNjciBzZWxmKTsKCmV4dGVybiBp bnQgX19wdGhyZWFkX2FsdF90aW1lZGxvY2soc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrICogbG9j aywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfZGVzY3Igc2VsZiwgY29u c3Qgc3RydWN0IHRpbWVzcGVjICphYnN0aW1lKTsKCmV4dGVybiB2b2lkIF9fcHRocmVhZF9hbHRf dW5sb2NrKHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayAqbG9jayk7CgpzdGF0aWMgaW5saW5lIHZv aWQgX19wdGhyZWFkX2FsdF9pbml0X2xvY2soc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrICogbG9j aykKewogIGxvY2stPl9fc3RhdHVzID0gMDsKICBsb2NrLT5fX3NwaW5sb2NrID0gMDsKfQoKc3Rh dGljIGlubGluZSBpbnQgX19wdGhyZWFkX2FsdF90cnlsb2NrIChzdHJ1Y3QgX3B0aHJlYWRfZmFz dGxvY2sgKiBsb2NrKQp7CgogIGlmICghX19wdGhyZWFkX2hhc19jYXMpCgoKICB7CiAgICBpbnQg cmVzID0gMTY7CgogICAgaWYgKHRlc3RhbmRzZXQoJmxvY2stPl9fc3BpbmxvY2spID09IDApCiAg ICAgIHsKICAgICAgICBpZiAobG9jay0+X19zdGF0dXMgPT0gMCkKICAgICAgICAgIHsKICAgICAg ICAgICAgbG9jay0+X19zdGF0dXMgPSAxOwogICAgICAgICAgICA7CiAgICAgICAgICAgIHJlcyA9 IDA7CiAgICAgICAgICB9CiAgICAgICAgbG9jay0+X19zcGlubG9jayA9IDA7CiAgICAgIH0KICAg IHJldHVybiByZXM7CiAgfQoKCgogIGRvIHsKICAgIGlmIChsb2NrLT5fX3N0YXR1cyAhPSAwKSBy ZXR1cm4gMTY7CiAgfSB3aGlsZSghIGNvbXBhcmVfYW5kX3N3YXAoJmxvY2stPl9fc3RhdHVzLCAw LCAxLCAmbG9jay0+X19zcGlubG9jaykpOwogIHJldHVybiAwOwoKfQoKCgpzdGF0aWMgaW5saW5l IGxvbmcgYXRvbWljX2luY3JlbWVudChzdHJ1Y3QgcHRocmVhZF9hdG9taWMgKnBhKQp7CiAgICBs b25nIG9sZHZhbDsKCiAgICBkbyB7CiAgICAgICAgb2xkdmFsID0gcGEtPnBfY291bnQ7CiAgICB9 IHdoaWxlICghY29tcGFyZV9hbmRfc3dhcCgmcGEtPnBfY291bnQsIG9sZHZhbCwgb2xkdmFsICsg MSwgJnBhLT5wX3NwaW5sb2NrKSk7CgogICAgcmV0dXJuIG9sZHZhbDsKfQoKCnN0YXRpYyBpbmxp bmUgbG9uZyBhdG9taWNfZGVjcmVtZW50KHN0cnVjdCBwdGhyZWFkX2F0b21pYyAqcGEpCnsKICAg IGxvbmcgb2xkdmFsOwoKICAgIGRvIHsKICAgICAgICBvbGR2YWwgPSBwYS0+cF9jb3VudDsKICAg IH0gd2hpbGUgKCFjb21wYXJlX2FuZF9zd2FwKCZwYS0+cF9jb3VudCwgb2xkdmFsLCBvbGR2YWwg LSAxLCAmcGEtPnBfc3BpbmxvY2spKTsKCiAgICByZXR1cm4gb2xkdmFsOwp9CgoKc3RhdGljIGlu bGluZSB2b2lkCl9fcHRocmVhZF9zZXRfb3duX2V4dHJpY2F0ZV9pZiAocHRocmVhZF9kZXNjciBz ZWxmLCBwdGhyZWFkX2V4dHJpY2F0ZV9pZiAqcGVpZikKewoKCgogIGlmIChwZWlmID09ICgodm9p ZCAqKTApCiAgICAgIHx8IHNlbGYtPnBfY2FuY2Vsc3RhdGUgPT0gUFRIUkVBRF9DQU5DRUxfRU5B QkxFKQogICAgewoKCgoKICAgICAgaWYgKHBlaWYgPT0gKCh2b2lkICopMCkpCiAgICAgICAgX19w dGhyZWFkX2xvY2sgKHNlbGYtPnBfbG9jaywgc2VsZik7CiAgICAgIHNlbGYtPnBfZXh0cmljYXRl ID0gKHBlaWYpOwogICAgICBpZiAocGVpZiA9PSAoKHZvaWQgKikwKSkKICAgICAgICBfX3B0aHJl YWRfdW5sb2NrIChzZWxmLT5wX2xvY2spOwogICAgfQp9CiMgMzIgInB0aHJlYWQuYyIgMgojIDEg InJlc3RhcnQuaCIgMQojIDE2ICJyZXN0YXJ0LmgiCiMgMSAiLi4vc3lzZGVwcy91bml4L3N5c3Yv bGludXgva2VybmVsLWZlYXR1cmVzLmgiIDEKIyAxNyAicmVzdGFydC5oIiAyCgoKCnN0YXRpYyBp bmxpbmUgdm9pZCByZXN0YXJ0KHB0aHJlYWRfZGVzY3IgdGgpCnsKCgogIF9fcHRocmVhZF9yZXN0 YXJ0X25ldyh0aCk7CgoKCn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBzdXNwZW5kKHB0aHJlYWRfZGVz Y3Igc2VsZikKewoKCiAgX19wdGhyZWFkX3dhaXRfZm9yX3Jlc3RhcnRfc2lnbmFsKHNlbGYpOwoK Cgp9CgpzdGF0aWMgaW5saW5lIGludCB0aW1lZHN1c3BlbmQocHRocmVhZF9kZXNjciBzZWxmLAog ICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjICphYnN0aW1lKQp7CgoKICByZXR1 cm4gX19wdGhyZWFkX3RpbWVkc3VzcGVuZF9uZXcoc2VsZiwgYWJzdGltZSk7CgoKCn0KIyAzMyAi cHRocmVhZC5jIiAyCgoKCgoKZXh0ZXJuIHN0cnVjdCBfX3Jlc19zdGF0ZSBfcmVzOwoKCgoKCgoK ZXh0ZXJuIGludCBfZXJybm87CmV4dGVybiBpbnQgX2hfZXJybm87CgoKCnN0cnVjdCBfcHRocmVh ZF9kZXNjcl9zdHJ1Y3QgX19wdGhyZWFkX2luaXRpYWxfdGhyZWFkID0gewogIHsKICAgIHsKICAg ICAgJl9fcHRocmVhZF9pbml0aWFsX3RocmVhZAogICAgfQogIH0sCiAgJl9fcHRocmVhZF9pbml0 aWFsX3RocmVhZCwKICAmX19wdGhyZWFkX2luaXRpYWxfdGhyZWFkLAogICgodm9pZCAqKTApLAog ICgodm9pZCAqKTApLAogIDEwMjQsCiAgMCwKICAwLAogICZfX3B0aHJlYWRfaGFuZGxlc1swXS5o X2xvY2ssCiAgMCwKICAoKHZvaWQgKikwKSwKICAoKHZvaWQgKikwKSwKICAwLAogIDAsCiAgMCwK ICAoKHZvaWQgKikwKSwKICAwLAogICgodm9pZCAqKTApLAogICgodm9pZCAqKTApLAogIDAsCiAg MCwKICAwLAogICZfZXJybm8sCiAgMCwKICAmX2hfZXJybm8sCiAgMCwKICAoKHZvaWQgKikwKSwK ICAwLAogIHsgKHZvaWQgKigqKSAodm9pZCAqKSkgKCh2b2lkICopMCksICgodm9pZCAqKTApLCB7 ezAsIH19LCAwLCB7IDAgfSB9LAoKICB7KCh2b2lkICopMCl9LAogIHsoKHZvaWQgKikwKX0sCiAg MSwKICAoKHZvaWQgKikwKSwKICAwLAogIDAsCiAgMCwKICB7e3swLCB9fSwgMCwgKCh2b2lkICop MCl9LAogIHsgMCwgMCB9LAogIDAsCiAgMCwKICAwLAogICgodm9pZCAqKTApLAogICgodm9pZCAq KTApLAogICgodm9pZCAqKTApLAogIDAKfTsKCgoKCgpzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3Ry dWN0IF9fcHRocmVhZF9tYW5hZ2VyX3RocmVhZCA9IHsKICB7CiAgICB7CiAgICAgICZfX3B0aHJl YWRfbWFuYWdlcl90aHJlYWQKICAgIH0KICB9LAogICgodm9pZCAqKTApLAogICgodm9pZCAqKTAp LAogICgodm9pZCAqKTApLAogICgodm9pZCAqKTApLAogIDAsCiAgMCwKICAwLAogICZfX3B0aHJl YWRfaGFuZGxlc1sxXS5oX2xvY2ssCiAgMCwKICAoKHZvaWQgKikwKSwKICAoKHZvaWQgKikwKSwK ICAwLAogIDAsCiAgMCwKICAoKHZvaWQgKikwKSwKICAwLAogICgodm9pZCAqKTApLAogICgodm9p ZCAqKTApLAogIDAsCiAgMCwKICAwLAogICZfX3B0aHJlYWRfbWFuYWdlcl90aHJlYWQucF9lcnJu bywKICAwLAogICgodm9pZCAqKTApLAogIDAsCiAgKCh2b2lkICopMCksCiAgMCwKICB7ICh2b2lk ICooKikgKHZvaWQgKikpIF9fcHRocmVhZF9tYW5hZ2VyLCAoKHZvaWQgKikwKSwge3swLCB9fSwg MCwgeyAwIH0gfSwKCiAgeygodm9pZCAqKTApfSwKICB7KCh2b2lkICopMCl9LAogIDAsCiAgKCh2 b2lkICopMCksCiAgMCwKICAxLAogIDAsCiAge3t7MCwgfX0sIDAsICgodm9pZCAqKTApfSwKICB7 IDAsIDAgfSwKICAwLAogIDAsCiAgMCwKICAoKHZvaWQgKikwKSwKICAoKHZvaWQgKikwKSwKICAo KHZvaWQgKikwKSwKICAwCn07CgoKCgpwdGhyZWFkX2Rlc2NyIF9fcHRocmVhZF9tYWluX3RocmVh ZCA9ICZfX3B0aHJlYWRfaW5pdGlhbF90aHJlYWQ7CgoKCgpjaGFyICpfX3B0aHJlYWRfaW5pdGlh bF90aHJlYWRfYm9zOwoKCgoKaW50IF9fcHRocmVhZF9tYW5hZ2VyX3JlcXVlc3QgPSAtMTsKCgoK aW50IF9fcHRocmVhZF9tYW5hZ2VyX3JlYWRlcjsKCgoKY2hhciAqX19wdGhyZWFkX21hbmFnZXJf dGhyZWFkX2JvczsKY2hhciAqX19wdGhyZWFkX21hbmFnZXJfdGhyZWFkX3RvczsKCgoKaW50IF9f cHRocmVhZF9leGl0X3JlcXVlc3RlZDsKaW50IF9fcHRocmVhZF9leGl0X2NvZGU7CgoKc2l6ZV90 IF9fcHRocmVhZF9tYXhfc3RhY2tzaXplOwoKCmludCBfX3B0aHJlYWRfc21wX2tlcm5lbDsKIyAy MDggInB0aHJlYWQuYyIKY29uc3QgaW50IF9fcHRocmVhZF90aHJlYWRzX21heCA9IDEwMjQ7CmNv bnN0IGludCBfX3B0aHJlYWRfc2l6ZW9mX2hhbmRsZSA9IHNpemVvZihzdHJ1Y3QgcHRocmVhZF9o YW5kbGVfc3RydWN0KTsKY29uc3QgaW50IF9fcHRocmVhZF9vZmZzZXRvZl9kZXNjciA9ICgoc2l6 ZV90KSAmKChzdHJ1Y3QgcHRocmVhZF9oYW5kbGVfc3RydWN0ICopMCktPmhfZGVzY3IpOwoKY29u c3QgaW50IF9fcHRocmVhZF9vZmZzZXRvZl9waWQgPSAoKHNpemVfdCkgJigoc3RydWN0IF9wdGhy ZWFkX2Rlc2NyX3N0cnVjdCAqKTApLT5wX3BpZCk7Cgpjb25zdCBpbnQgX19saW51eHRocmVhZHNf cHRocmVhZF9zaXplb2ZfZGVzY3IKICA9IHNpemVvZihzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3Ry dWN0KTsKCgoKc3RhdGljIHZvaWQgcHRocmVhZF9vbmV4aXRfcHJvY2VzcyhpbnQgcmV0Y29kZSwg dm9pZCAqYXJnKTsKCgoKCnN0YXRpYyB2b2lkIHB0aHJlYWRfaGFuZGxlX3NpZ2NhbmNlbChpbnQg c2lnKTsKc3RhdGljIHZvaWQgcHRocmVhZF9oYW5kbGVfc2lncmVzdGFydChpbnQgc2lnKTsKc3Rh dGljIHZvaWQgcHRocmVhZF9oYW5kbGVfc2lnZGVidWcoaW50IHNpZyk7CiMgMjQ1ICJwdGhyZWFk LmMiCnN0YXRpYyBpbnQgY3VycmVudF9ydG1pbjsKc3RhdGljIGludCBjdXJyZW50X3J0bWF4OwoK CmludCBfX3B0aHJlYWRfc2lnX3Jlc3RhcnQgPSAzMjsKaW50IF9fcHRocmVhZF9zaWdfY2FuY2Vs ID0gMzIgKyAxOwppbnQgX19wdGhyZWFkX3NpZ19kZWJ1ZyA9IDMyICsgMjsKCgoKCgoKc3RhdGlj IGludCBydHNpZ3NfaW5pdGlhbGl6ZWQ7CgoKCgoKc3RhdGljIHZvaWQKaW5pdF9ydHNpZ3MgKHZv aWQpCnsKIyAyODAgInB0aHJlYWQuYyIKICAgIHsKCiAgICAgIGN1cnJlbnRfcnRtaW4gPSAzMiAr IDM7CiMgMjkyICJwdGhyZWFkLmMiCiAgICAgIGN1cnJlbnRfcnRtYXggPSAoNjQgLSAxKTsKICAg IH0KCiAgcnRzaWdzX2luaXRpYWxpemVkID0gMTsKfQoKCgppbnQKX19saWJjX2N1cnJlbnRfc2ln cnRtaW4gKHZvaWQpCnsKCiAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCFydHNpZ3NfaW5pdGlhbGl6 ZWQsIDApKQogICAgaW5pdF9ydHNpZ3MgKCk7CgogIHJldHVybiBjdXJyZW50X3J0bWluOwp9CgoK aW50Cl9fbGliY19jdXJyZW50X3NpZ3J0bWF4ICh2b2lkKQp7CgogIGlmIChfX2J1aWx0aW5fZXhw ZWN0ICghcnRzaWdzX2luaXRpYWxpemVkLCAwKSkKICAgIGluaXRfcnRzaWdzICgpOwoKICByZXR1 cm4gY3VycmVudF9ydG1heDsKfQoKCgoKaW50Cl9fbGliY19hbGxvY2F0ZV9ydHNpZyAoaW50IGhp Z2gpCnsKCgoKICBpZiAoX19idWlsdGluX2V4cGVjdCAoIXJ0c2lnc19pbml0aWFsaXplZCwgMCkp CiAgICBpbml0X3J0c2lncyAoKTsKICBpZiAoX19idWlsdGluX2V4cGVjdCAoY3VycmVudF9ydG1p biA9PSAtMSwgMCkKICAgICAgfHwgX19idWlsdGluX2V4cGVjdCAoY3VycmVudF9ydG1pbiA+IGN1 cnJlbnRfcnRtYXgsIDApKQoKICAgIHJldHVybiAtMTsKCiAgcmV0dXJuIGhpZ2ggPyBjdXJyZW50 X3J0bWluKysgOiBjdXJyZW50X3J0bWF4LS07Cgp9CgoKZXh0ZXJuIGludCBfX3N5c2N0bCAoaW50 ICpuYW1lLCBpbnQgbmxlbiwgdm9pZCAqb2xkdmFsLCBzaXplX3QgKm9sZGxlbnAsCiAgICAgICAg ICAgICAgICAgICAgIHZvaWQgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbik7CgoKCgpzdGF0aWMgaW50 CmlzX3NtcF9zeXN0ZW0gKHZvaWQpCnsKICBzdGF0aWMgY29uc3QgaW50IHN5c2N0bF9hcmdzW10g PSB7IENUTF9LRVJOLCBLRVJOX1ZFUlNJT04gfTsKICBjaGFyIGJ1Zls1MTJdOwogIHNpemVfdCBy ZXNsZW4gPSBzaXplb2YgKGJ1Zik7CgoKICBpZiAoX19zeXNjdGwgKChpbnQgKikgc3lzY3RsX2Fy Z3MsCiAgICAgICAgICAgICAgICBzaXplb2YgKHN5c2N0bF9hcmdzKSAvIHNpemVvZiAoc3lzY3Rs X2FyZ3NbMF0pLAogICAgICAgICAgICAgICAgYnVmLCAmcmVzbGVuLCAoKHZvaWQgKikwKSwgMCkg PCAwKQogICAgewoKICAgICAgaW50IGZkID0gX19vcGVuICgiL3Byb2Mvc3lzL2tlcm5lbC92ZXJz aW9uIiwgMDApOwogICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoZmQsIDApID09IC0xCiAgICAg ICAgICB8fCAocmVzbGVuID0gX19yZWFkIChmZCwgYnVmLCBzaXplb2YgKGJ1ZikpKSA8PSAwKQoK ICAgICAgICBidWZbMF0gPSAnXDAnOwoKICAgICAgX19jbG9zZSAoZmQpOwogICAgfQoKICByZXR1 cm4gKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wICgiU01QIikgJiYgc2l6ZW9m ICgoIlNNUCIpWzBdKSA9PSAxID8gKCgiU01QIilbMF0gPT0gJ1wwJyA/IGJ1ZiA6ICgoIlNNUCIp WzFdID09ICdcMCcgPyAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKCgiU01Q IilbMF0pID8gKCgoIlNNUCIpWzBdKSA9PSAnXDAnID8gKGNoYXIgKikgX19yYXdtZW1jaHIgKGJ1 ZiwgKCJTTVAiKVswXSkgOiBfX3N0cmNocl9jIChidWYsICgoKCJTTVAiKVswXSkgJiAweGZmKSA8 PCA4KSkgOiBfX3N0cmNocl9nIChidWYsICgiU01QIilbMF0pKSkgOiBfX3N0cnN0cl9jZyAoYnVm LCAiU01QIiwgKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wICgiU01QIikgPyBf X2J1aWx0aW5fc3RybGVuICgiU01QIikgOiBfX3N0cmxlbl9nICgiU01QIikpKSkpKSA6IF9fc3Ry c3RyX2cgKGJ1ZiwgIlNNUCIpKSkgIT0gKCh2b2lkICopMCk7Cn0KIyAzODEgInB0aHJlYWQuYyIK c3RhdGljIHZvaWQgcHRocmVhZF9pbml0aWFsaXplKHZvaWQpIF9fYXR0cmlidXRlX18oKGNvbnN0 cnVjdG9yKSk7CiMgMzkwICJwdGhyZWFkLmMiCnZvaWQKX19wdGhyZWFkX2luaXRpYWxpemVfbWlu aW1hbCh2b2lkKQp7CiMgNDAxICJwdGhyZWFkLmMiCn0KCgp2b2lkCl9fcHRocmVhZF9pbml0X21h eF9zdGFja3NpemUodm9pZCkKewogIHN0cnVjdCBybGltaXQgbGltaXQ7CiAgc2l6ZV90IG1heF9z dGFjazsKCiAgZ2V0cmxpbWl0KFJMSU1JVF9TVEFDSywgJmxpbWl0KTsKIyA0MjcgInB0aHJlYWQu YyIKICBtYXhfc3RhY2sgPSAoMiAqIDEwMjQgKiAxMDI0KSAtIF9fZ2V0cGFnZXNpemUoKTsKCiAg aWYgKGxpbWl0LnJsaW1fY3VyID4gbWF4X3N0YWNrKSB7CiAgICBsaW1pdC5ybGltX2N1ciA9IG1h eF9zdGFjazsKICAgIHNldHJsaW1pdChSTElNSVRfU1RBQ0ssICZsaW1pdCk7CiAgfQoKICBfX3B0 aHJlYWRfbWF4X3N0YWNrc2l6ZSA9IG1heF9zdGFjazsKfQoKCnN0YXRpYyB2b2lkIHB0aHJlYWRf aW5pdGlhbGl6ZSh2b2lkKQp7CiAgc3RydWN0IHNpZ2FjdGlvbiBzYTsKICBzaWdzZXRfdCBtYXNr OwoKCiAgaWYgKF9fcHRocmVhZF9pbml0aWFsX3RocmVhZF9ib3MgIT0gKCh2b2lkICopMCkpIHJl dHVybjsKCgogIF9fcHRocmVhZF9oYXNfY2FzID0gY29tcGFyZV9hbmRfc3dhcF9pc19hdmFpbGFi bGUoKTsKCgoKCgoKCiAgX19wdGhyZWFkX2luaXRfbWF4X3N0YWNrc2l6ZSAoKTsKIyA0NjQgInB0 aHJlYWQuYyIKICBfX3B0aHJlYWRfaW5pdGlhbF90aHJlYWRfYm9zID0KICAgIChjaGFyICopKCgo bG9uZylfX2J1aWx0aW5fZnJhbWVfYWRkcmVzcyAoMCkgLSAyICogKDIgKiAxMDI0ICogMTAyNCkp ICYgfigoMiAqIDEwMjQgKiAxMDI0KSAtIDEpKTsKCgoKICBfX3B0aHJlYWRfaW5pdGlhbF90aHJl YWQucF9waWQgPSBfX2dldHBpZCgpOwoKICBfX3B0aHJlYWRfaW5pdGlhbF90aHJlYWQucF9yZXNw ID0gJl9yZXM7CgoKICBpbml0X3J0c2lncyAoKTsKCgoKCiAgc2EuX19zaWdhY3Rpb25faGFuZGxl ci5zYV9oYW5kbGVyID0gcHRocmVhZF9oYW5kbGVfc2lncmVzdGFydDsKICBzaWdlbXB0eXNldCgm c2Euc2FfbWFzayk7CiAgc2Euc2FfZmxhZ3MgPSAwOwogIF9fbGliY19zaWdhY3Rpb24oX19wdGhy ZWFkX3NpZ19yZXN0YXJ0LCAmc2EsICgodm9pZCAqKTApKTsKICBzYS5fX3NpZ2FjdGlvbl9oYW5k bGVyLnNhX2hhbmRsZXIgPSBwdGhyZWFkX2hhbmRsZV9zaWdjYW5jZWw7CgogIF9fbGliY19zaWdh Y3Rpb24oX19wdGhyZWFkX3NpZ19jYW5jZWwsICZzYSwgKCh2b2lkICopMCkpOwogIGlmIChfX3B0 aHJlYWRfc2lnX2RlYnVnID4gMCkgewogICAgc2EuX19zaWdhY3Rpb25faGFuZGxlci5zYV9oYW5k bGVyID0gcHRocmVhZF9oYW5kbGVfc2lnZGVidWc7CiAgICBzaWdlbXB0eXNldCgmc2Euc2FfbWFz ayk7CgogICAgX19saWJjX3NpZ2FjdGlvbihfX3B0aHJlYWRfc2lnX2RlYnVnLCAmc2EsICgodm9p ZCAqKTApKTsKICB9CgogIHNpZ2VtcHR5c2V0KCZtYXNrKTsKICBzaWdhZGRzZXQoJm1hc2ssIF9f cHRocmVhZF9zaWdfcmVzdGFydCk7CiAgc2lncHJvY21hc2soMCwgJm1hc2ssICgodm9pZCAqKTAp KTsKIyA1MDUgInB0aHJlYWQuYyIKICAgIF9fb25fZXhpdCAocHRocmVhZF9vbmV4aXRfcHJvY2Vz cywgKCh2b2lkICopMCkpOwoKICBfX3B0aHJlYWRfc21wX2tlcm5lbCA9IGlzX3NtcF9zeXN0ZW0g KCk7Cn0KCnZvaWQgX19wdGhyZWFkX2luaXRpYWxpemUodm9pZCkKewogIHB0aHJlYWRfaW5pdGlh bGl6ZSgpOwp9CgppbnQgX19wdGhyZWFkX2luaXRpYWxpemVfbWFuYWdlcih2b2lkKQp7CiAgaW50 IG1hbmFnZXJfcGlwZVsyXTsKICBpbnQgcGlkOwogIHN0cnVjdCBwdGhyZWFkX3JlcXVlc3QgcmVx dWVzdDsKCgoKCgoKCiAgaWYgKF9fcHRocmVhZF9tYXhfc3RhY2tzaXplID09IDApCiAgICBfX3B0 aHJlYWRfaW5pdF9tYXhfc3RhY2tzaXplICgpOwoKCiAgaWYgKF9fcHRocmVhZF9pbml0aWFsX3Ro cmVhZF9ib3MgPT0gKCh2b2lkICopMCkpIHB0aHJlYWRfaW5pdGlhbGl6ZSgpOwoKICBfX3B0aHJl YWRfbWFuYWdlcl90aHJlYWRfYm9zID0gbWFsbG9jKCgyICogKDFVTCA8PCAxMikgLSAzMikpOwog IGlmIChfX3B0aHJlYWRfbWFuYWdlcl90aHJlYWRfYm9zID09ICgodm9pZCAqKTApKSByZXR1cm4g LTE7CiAgX19wdGhyZWFkX21hbmFnZXJfdGhyZWFkX3RvcyA9CiAgICBfX3B0aHJlYWRfbWFuYWdl cl90aHJlYWRfYm9zICsgKDIgKiAoMVVMIDw8IDEyKSAtIDMyKTsKCiAgaWYgKHBpcGUobWFuYWdl cl9waXBlKSA9PSAtMSkgewogICAgZnJlZShfX3B0aHJlYWRfbWFuYWdlcl90aHJlYWRfYm9zKTsK ICAgIHJldHVybiAtMTsKICB9CgogIHBpZCA9IDA7CiAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKF9f cHRocmVhZF9pbml0aWFsX3RocmVhZC5wX3JlcG9ydF9ldmVudHMsIDApKQogICAgewoKCiAgICAg IGludCBpZHggPSAoKChURF9DUkVBVEUpIC0gMVUpID4+IDUpOwogICAgICB1aW50MzJfdCBtYXNr ID0gKDFVIDw8ICgoKFREX0NSRUFURSkgLSAxKSAmICgoMSA8PCA1KSAtIDEpKSk7CgogICAgICBp ZiAoKG1hc2sgJiAoX19wdGhyZWFkX3RocmVhZHNfZXZlbnRzLmV2ZW50X2JpdHNbaWR4XQogICAg ICAgICAgICAgICAgICAgfCBfX3B0aHJlYWRfaW5pdGlhbF90aHJlYWQucF9ldmVudGJ1Zi5ldmVu dG1hc2suZXZlbnRfYml0c1tpZHhdKSkKICAgICAgICAgICE9IDApCiAgICAgICAgewogICAgICAg ICAgX19wdGhyZWFkX2xvY2soX19wdGhyZWFkX21hbmFnZXJfdGhyZWFkLnBfbG9jaywgKCh2b2lk ICopMCkpOwojIDU2OSAicHRocmVhZC5jIgogICAgICAgICAgcGlkID0gX19jbG9uZShfX3B0aHJl YWRfbWFuYWdlcl9ldmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKiopIF9fcHRo cmVhZF9tYW5hZ2VyX3RocmVhZF90b3MsCiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAx MDAgfCAweDAwMDAwMjAwIHwgMHgwMDAwMDQwMCB8IDB4MDAwMDA4MDAsCiAgICAgICAgICAgICAg ICAgICAgICAgICh2b2lkICopKGxvbmcpbWFuYWdlcl9waXBlWzBdKTsKCgogICAgICAgICAgaWYg KHBpZCAhPSAtMSkKICAgICAgICAgICAgewoKCgoKICAgICAgICAgICAgICBfX3B0aHJlYWRfbWFu YWdlcl90aHJlYWQucF9ldmVudGJ1Zi5ldmVudGRhdGEgPQogICAgICAgICAgICAgICAgJl9fcHRo cmVhZF9tYW5hZ2VyX3RocmVhZDsKICAgICAgICAgICAgICBfX3B0aHJlYWRfbWFuYWdlcl90aHJl YWQucF9ldmVudGJ1Zi5ldmVudG51bSA9IFREX0NSRUFURTsKICAgICAgICAgICAgICBfX3B0aHJl YWRfbGFzdF9ldmVudCA9ICZfX3B0aHJlYWRfbWFuYWdlcl90aHJlYWQ7CiAgICAgICAgICAgICAg X19wdGhyZWFkX21hbmFnZXJfdGhyZWFkLnBfdGlkID0gMiogMTAyNCArIDE7CiAgICAgICAgICAg ICAgX19wdGhyZWFkX21hbmFnZXJfdGhyZWFkLnBfcGlkID0gcGlkOwoKCiAgICAgICAgICAgICAg X19saW51eHRocmVhZHNfY3JlYXRlX2V2ZW50ICgpOwogICAgICAgICAgICB9CgoKICAgICAgICAg IF9fcHRocmVhZF91bmxvY2soX19wdGhyZWFkX21hbmFnZXJfdGhyZWFkLnBfbG9jayk7CiAgICAg ICAgfQogICAgfQoKICBpZiAoX19idWlsdGluX2V4cGVjdCAocGlkLCAwKSA9PSAwKQogICAgewoj IDYwOSAicHRocmVhZC5jIgogICAgICBwaWQgPSBfX2Nsb25lKF9fcHRocmVhZF9tYW5hZ2VyLCAo dm9pZCAqKikgX19wdGhyZWFkX21hbmFnZXJfdGhyZWFkX3RvcywKICAgICAgICAgICAgICAgICAg ICAweDAwMDAwMTAwIHwgMHgwMDAwMDIwMCB8IDB4MDAwMDA0MDAgfCAweDAwMDAwODAwLAogICAg ICAgICAgICAgICAgICAgICh2b2lkICopKGxvbmcpbWFuYWdlcl9waXBlWzBdKTsKCiAgICB9CiAg aWYgKF9fYnVpbHRpbl9leHBlY3QgKHBpZCwgMCkgPT0gLTEpIHsKICAgIGZyZWUoX19wdGhyZWFk X21hbmFnZXJfdGhyZWFkX2Jvcyk7CiAgICBfX2xpYmNfY2xvc2UobWFuYWdlcl9waXBlWzBdKTsK ICAgIF9fbGliY19jbG9zZShtYW5hZ2VyX3BpcGVbMV0pOwogICAgcmV0dXJuIC0xOwogIH0KICBf X3B0aHJlYWRfbWFuYWdlcl9yZXF1ZXN0ID0gbWFuYWdlcl9waXBlWzFdOwogIF9fcHRocmVhZF9t YW5hZ2VyX3JlYWRlciA9IG1hbmFnZXJfcGlwZVswXTsKICBfX3B0aHJlYWRfbWFuYWdlcl90aHJl YWQucF90aWQgPSAyKiAxMDI0ICsgMTsKICBfX3B0aHJlYWRfbWFuYWdlcl90aHJlYWQucF9waWQg PSBwaWQ7CgogIGlmIChfX2J1aWx0aW5fZXhwZWN0IChfX3B0aHJlYWRfdGhyZWFkc19kZWJ1Zywg MCkgJiYgX19wdGhyZWFkX3NpZ19kZWJ1ZyA+IDApCiAgICB7CiAgICAgIHJhaXNlKF9fcHRocmVh ZF9zaWdfZGVidWcpOwoKCiAgICAgIF9fcHRocmVhZF93YWl0X2Zvcl9yZXN0YXJ0X3NpZ25hbCh0 aHJlYWRfc2VsZigpKTsKICAgIH0KCiAgcmVxdWVzdC5yZXFfa2luZCA9IFJFUV9ERUJVRzsKICAo X19leHRlbnNpb25fXyAoeyBsb25nIGludCBfX3Jlc3VsdDsgZG8gX19yZXN1bHQgPSAobG9uZyBp bnQpIChfX2xpYmNfd3JpdGUoX19wdGhyZWFkX21hbmFnZXJfcmVxdWVzdCwgKGNoYXIgKikgJnJl cXVlc3QsIHNpemVvZihyZXF1ZXN0KSkpOyB3aGlsZSAoX19yZXN1bHQgPT0gLTFMICYmICgqX19l cnJub19sb2NhdGlvbiAoKSkgPT0gNCk7IF9fcmVzdWx0OyB9KSk7CgogIHJldHVybiAwOwp9CgoK CmludCBfX3B0aHJlYWRfY3JlYXRlXzJfMShwdGhyZWFkX3QgKnRocmVhZCwgY29uc3QgcHRocmVh ZF9hdHRyX3QgKmF0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogKCpzdGFydF9y b3V0aW5lKSh2b2lkICopLCB2b2lkICphcmcpCnsKICBwdGhyZWFkX2Rlc2NyIHNlbGYgPSB0aHJl YWRfc2VsZigpOwogIHN0cnVjdCBwdGhyZWFkX3JlcXVlc3QgcmVxdWVzdDsKICBpbnQgcmV0dmFs OwogIGlmIChfX2J1aWx0aW5fZXhwZWN0IChfX3B0aHJlYWRfbWFuYWdlcl9yZXF1ZXN0LCAwKSA8 IDApIHsKICAgIGlmIChfX3B0aHJlYWRfaW5pdGlhbGl6ZV9tYW5hZ2VyKCkgPCAwKSByZXR1cm4g MTE7CiAgfQogIHJlcXVlc3QucmVxX3RocmVhZCA9IHNlbGY7CiAgcmVxdWVzdC5yZXFfa2luZCA9 IFJFUV9DUkVBVEU7CiAgcmVxdWVzdC5yZXFfYXJncy5jcmVhdGUuYXR0ciA9IGF0dHI7CiAgcmVx dWVzdC5yZXFfYXJncy5jcmVhdGUuZm4gPSBzdGFydF9yb3V0aW5lOwogIHJlcXVlc3QucmVxX2Fy Z3MuY3JlYXRlLmFyZyA9IGFyZzsKICBzaWdwcm9jbWFzaygyLCAoY29uc3Qgc2lnc2V0X3QgKikg KCh2b2lkICopMCksCiAgICAgICAgICAgICAgJnJlcXVlc3QucmVxX2FyZ3MuY3JlYXRlLm1hc2sp OwogIChfX2V4dGVuc2lvbl9fICh7IGxvbmcgaW50IF9fcmVzdWx0OyBkbyBfX3Jlc3VsdCA9IChs b25nIGludCkgKF9fbGliY193cml0ZShfX3B0aHJlYWRfbWFuYWdlcl9yZXF1ZXN0LCAoY2hhciAq KSAmcmVxdWVzdCwgc2l6ZW9mKHJlcXVlc3QpKSk7IHdoaWxlIChfX3Jlc3VsdCA9PSAtMUwgJiYg KCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9PSA0KTsgX19yZXN1bHQ7IH0pKTsKCiAgc3VzcGVuZChz ZWxmKTsKICByZXR2YWwgPSBzZWxmLT5wX3JldGNvZGU7CiAgaWYgKF9fYnVpbHRpbl9leHBlY3Qg KHJldHZhbCwgMCkgPT0gMCkKICAgICp0aHJlYWQgPSAocHRocmVhZF90KSBzZWxmLT5wX3JldHZh bDsKICByZXR1cm4gcmV0dmFsOwp9CgpleHRlcm4gX190eXBlb2YgKF9fcHRocmVhZF9jcmVhdGVf Ml8xKSBwdGhyZWFkX2NyZWF0ZSBfX2F0dHJpYnV0ZV9fICgod2VhaywgYWxpYXMgKCJfX3B0aHJl YWRfY3JlYXRlXzJfMSIpKSk7OwojIDY5NyAicHRocmVhZC5jIgpwdGhyZWFkX3QgcHRocmVhZF9z ZWxmKHZvaWQpCnsKICBwdGhyZWFkX2Rlc2NyIHNlbGYgPSB0aHJlYWRfc2VsZigpOwogIHJldHVy biBzZWxmLT5wX3RpZDsKfQoKaW50IHB0aHJlYWRfZXF1YWwocHRocmVhZF90IHRocmVhZDEsIHB0 aHJlYWRfdCB0aHJlYWQyKQp7CiAgcmV0dXJuIHRocmVhZDEgPT0gdGhyZWFkMjsKfQoKCgoKCnB0 aHJlYWRfZGVzY3IgX19wdGhyZWFkX2ZpbmRfc2VsZih2b2lkKQp7CiAgY2hhciAqIHNwID0gX19i dWlsdGluX2ZyYW1lX2FkZHJlc3MgKDApOwogIHB0aHJlYWRfaGFuZGxlIGg7CgoKCiAgaCA9IF9f cHRocmVhZF9oYW5kbGVzICsgMjsKICB3aGlsZSAoISAoc3AgPD0gKGNoYXIgKikgaC0+aF9kZXNj ciAmJiBzcCA+PSBoLT5oX2JvdHRvbSkpIGgrKzsKICByZXR1cm4gaC0+aF9kZXNjcjsKfQojIDc0 MyAicHRocmVhZC5jIgppbnQgcHRocmVhZF9zZXRzY2hlZHBhcmFtKHB0aHJlYWRfdCB0aHJlYWQs IGludCBwb2xpY3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNjaGVk X3BhcmFtICpwYXJhbSkKewogIHB0aHJlYWRfaGFuZGxlIGhhbmRsZSA9IHRocmVhZF9oYW5kbGUo dGhyZWFkKTsKICBwdGhyZWFkX2Rlc2NyIHRoOwoKICBfX3B0aHJlYWRfbG9jaygmaGFuZGxlLT5o X2xvY2ssICgodm9pZCAqKTApKTsKICBpZiAoX19idWlsdGluX2V4cGVjdCAoaW52YWxpZF9oYW5k bGUoaGFuZGxlLCB0aHJlYWQpLCAwKSkgewogICAgX19wdGhyZWFkX3VubG9jaygmaGFuZGxlLT5o X2xvY2spOwogICAgcmV0dXJuIDM7CiAgfQogIHRoID0gaGFuZGxlLT5oX2Rlc2NyOwogIGlmIChf X2J1aWx0aW5fZXhwZWN0IChfX3NjaGVkX3NldHNjaGVkdWxlcih0aC0+cF9waWQsIHBvbGljeSwg cGFyYW0pID09IC0xLAogICAgICAgICAgICAgICAgICAgICAgICAwKSkgewogICAgX19wdGhyZWFk X3VubG9jaygmaGFuZGxlLT5oX2xvY2spOwogICAgcmV0dXJuICgqX19lcnJub19sb2NhdGlvbiAo KSk7CiAgfQogIHRoLT5wX3ByaW9yaXR5ID0gcG9saWN5ID09IDAgPyAwIDogcGFyYW0tPl9fc2No ZWRfcHJpb3JpdHk7CiAgX19wdGhyZWFkX3VubG9jaygmaGFuZGxlLT5oX2xvY2spOwogIGlmIChf X3B0aHJlYWRfbWFuYWdlcl9yZXF1ZXN0ID49IDApCiAgICBfX3B0aHJlYWRfbWFuYWdlcl9hZGp1 c3RfcHJpbyh0aC0+cF9wcmlvcml0eSk7CiAgcmV0dXJuIDA7Cn0KCmludCBwdGhyZWFkX2dldHNj aGVkcGFyYW0ocHRocmVhZF90IHRocmVhZCwgaW50ICpwb2xpY3ksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IHNjaGVkX3BhcmFtICpwYXJhbSkKewogIHB0aHJlYWRfaGFuZGxlIGhh bmRsZSA9IHRocmVhZF9oYW5kbGUodGhyZWFkKTsKICBpbnQgcGlkLCBwb2w7CgogIF9fcHRocmVh ZF9sb2NrKCZoYW5kbGUtPmhfbG9jaywgKCh2b2lkICopMCkpOwogIGlmIChfX2J1aWx0aW5fZXhw ZWN0IChpbnZhbGlkX2hhbmRsZShoYW5kbGUsIHRocmVhZCksIDApKSB7CiAgICBfX3B0aHJlYWRf dW5sb2NrKCZoYW5kbGUtPmhfbG9jayk7CiAgICByZXR1cm4gMzsKICB9CiAgcGlkID0gaGFuZGxl LT5oX2Rlc2NyLT5wX3BpZDsKICBfX3B0aHJlYWRfdW5sb2NrKCZoYW5kbGUtPmhfbG9jayk7CiAg cG9sID0gX19zY2hlZF9nZXRzY2hlZHVsZXIocGlkKTsKICBpZiAoX19idWlsdGluX2V4cGVjdCAo cG9sLCAwKSA9PSAtMSkgcmV0dXJuICgqX19lcnJub19sb2NhdGlvbiAoKSk7CiAgaWYgKF9fc2No ZWRfZ2V0cGFyYW0ocGlkLCBwYXJhbSkgPT0gLTEpIHJldHVybiAoKl9fZXJybm9fbG9jYXRpb24g KCkpOwogICpwb2xpY3kgPSBwb2w7CiAgcmV0dXJuIDA7Cn0KCmludCBfX3B0aHJlYWRfeWllbGQg KHZvaWQpCnsKCiAgcmV0dXJuIHNjaGVkX3lpZWxkICgpOwp9CmV4dGVybiBfX3R5cGVvZiAoX19w dGhyZWFkX3lpZWxkKSBwdGhyZWFkX3lpZWxkIF9fYXR0cmlidXRlX18gKCh3ZWFrLCBhbGlhcyAo Il9fcHRocmVhZF95aWVsZCIpKSk7CgoKCnN0YXRpYyB2b2lkIHB0aHJlYWRfb25leGl0X3Byb2Nl c3MoaW50IHJldGNvZGUsIHZvaWQgKmFyZykKewogIGlmIChfX2J1aWx0aW5fZXhwZWN0IChfX3B0 aHJlYWRfbWFuYWdlcl9yZXF1ZXN0LCAwKSA+PSAwKSB7CiAgICBzdHJ1Y3QgcHRocmVhZF9yZXF1 ZXN0IHJlcXVlc3Q7CiAgICBwdGhyZWFkX2Rlc2NyIHNlbGYgPSB0aHJlYWRfc2VsZigpOwoKICAg IHJlcXVlc3QucmVxX3RocmVhZCA9IHNlbGY7CiAgICByZXF1ZXN0LnJlcV9raW5kID0gUkVRX1BS T0NFU1NfRVhJVDsKICAgIHJlcXVlc3QucmVxX2FyZ3MuZXhpdC5jb2RlID0gcmV0Y29kZTsKICAg IChfX2V4dGVuc2lvbl9fICh7IGxvbmcgaW50IF9fcmVzdWx0OyBkbyBfX3Jlc3VsdCA9IChsb25n IGludCkgKF9fbGliY193cml0ZShfX3B0aHJlYWRfbWFuYWdlcl9yZXF1ZXN0LCAoY2hhciAqKSAm cmVxdWVzdCwgc2l6ZW9mKHJlcXVlc3QpKSk7IHdoaWxlIChfX3Jlc3VsdCA9PSAtMUwgJiYgKCpf X2Vycm5vX2xvY2F0aW9uICgpKSA9PSA0KTsgX19yZXN1bHQ7IH0pKTsKCiAgICBzdXNwZW5kKHNl bGYpOwoKCiAgICBpZiAoc2VsZiA9PSBfX3B0aHJlYWRfbWFpbl90aHJlYWQpCiAgICAgIHsKICAg ICAgICB3YWl0cGlkKF9fcHRocmVhZF9tYW5hZ2VyX3RocmVhZC5wX3BpZCwgKCh2b2lkICopMCks IDB4ODAwMDAwMDApOwoKCgogICAgICAgIF9fcHRocmVhZF9tYW5hZ2VyX3RocmVhZF9ib3MgPSBf X3B0aHJlYWRfbWFuYWdlcl90aHJlYWRfdG9zID0gKCh2b2lkICopMCk7CiAgICAgIH0KICB9Cn0K IyA4MzkgInB0aHJlYWQuYyIKc3RhdGljIHZvaWQgcHRocmVhZF9oYW5kbGVfc2lncmVzdGFydChp bnQgc2lnKQp7CiAgcHRocmVhZF9kZXNjciBzZWxmID0gdGhyZWFkX3NlbGYoKTsKICBzZWxmLT5w X3NpZ25hbCA9IChzaWcpOwogIGlmIChzZWxmLT5wX3NpZ25hbF9qbXAgIT0gKCh2b2lkICopMCkp CiAgICBzaWdsb25nam1wKCpzZWxmLT5wX3NpZ25hbF9qbXAsIDEpOwp9CgoKCgoKCnN0YXRpYyB2 b2lkIHB0aHJlYWRfaGFuZGxlX3NpZ2NhbmNlbChpbnQgc2lnKQp7CiAgcHRocmVhZF9kZXNjciBz ZWxmID0gdGhyZWFkX3NlbGYoKTsKICBzaWdqbXBfYnVmICogam1wYnVmOwoKICBpZiAoc2VsZiA9 PSAmX19wdGhyZWFkX21hbmFnZXJfdGhyZWFkKQogICAgewojIDg3NiAicHRocmVhZC5jIgogICAg ICBfX3B0aHJlYWRfbWFuYWdlcl9zaWdoYW5kbGVyKHNpZyk7CiAgICAgIHJldHVybjsKCiAgICB9 CiAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKF9fcHRocmVhZF9leGl0X3JlcXVlc3RlZCwgMCkpIHsK CgogICAgaWYgKHNlbGYgPT0gX19wdGhyZWFkX21haW5fdGhyZWFkKQogICAgICB3YWl0cGlkKF9f cHRocmVhZF9tYW5hZ2VyX3RocmVhZC5wX3BpZCwgKCh2b2lkICopMCksIDB4ODAwMDAwMDApOwog ICAgX2V4aXQoX19wdGhyZWFkX2V4aXRfY29kZSk7CiAgfQogIGlmIChfX2J1aWx0aW5fZXhwZWN0 IChzZWxmLT5wX2NhbmNlbGVkLCAwKQogICAgICAmJiBzZWxmLT5wX2NhbmNlbHN0YXRlID09IFBU SFJFQURfQ0FOQ0VMX0VOQUJMRSkgewogICAgaWYgKHNlbGYtPnBfY2FuY2VsdHlwZSA9PSBQVEhS RUFEX0NBTkNFTF9BU1lOQ0hST05PVVMpCiAgICAgIF9fcHRocmVhZF9kb19leGl0KCgodm9pZCAq KSAtMSksIF9fYnVpbHRpbl9mcmFtZV9hZGRyZXNzICgwKSk7CiAgICBqbXBidWYgPSBzZWxmLT5w X2NhbmNlbF9qbXA7CiAgICBpZiAoam1wYnVmICE9ICgodm9pZCAqKTApKSB7CiAgICAgIHNlbGYt PnBfY2FuY2VsX2ptcCA9ICgoKHZvaWQgKikwKSk7CiAgICAgIHNpZ2xvbmdqbXAoKmptcGJ1Ziwg MSk7CiAgICB9CiAgfQp9CiMgOTA5ICJwdGhyZWFkLmMiCnN0YXRpYyB2b2lkIHB0aHJlYWRfaGFu ZGxlX3NpZ2RlYnVnKGludCBzaWcpCnsKCn0KCgoKCgoKCnZvaWQgX19wdGhyZWFkX3Jlc2V0X21h aW5fdGhyZWFkKHZvaWQpCnsKICBwdGhyZWFkX2Rlc2NyIHNlbGYgPSB0aHJlYWRfc2VsZigpOwog IHN0cnVjdCBybGltaXQgbGltaXQ7CgogIGlmIChfX3B0aHJlYWRfbWFuYWdlcl9yZXF1ZXN0ICE9 IC0xKSB7CgogICAgZnJlZShfX3B0aHJlYWRfbWFuYWdlcl90aHJlYWRfYm9zKTsKICAgIF9fcHRo cmVhZF9tYW5hZ2VyX3RocmVhZF9ib3MgPSBfX3B0aHJlYWRfbWFuYWdlcl90aHJlYWRfdG9zID0g KCh2b2lkICopMCk7CgogICAgX19saWJjX2Nsb3NlKF9fcHRocmVhZF9tYW5hZ2VyX3JlcXVlc3Qp OwogICAgX19saWJjX2Nsb3NlKF9fcHRocmVhZF9tYW5hZ2VyX3JlYWRlcik7CiAgICBfX3B0aHJl YWRfbWFuYWdlcl9yZXF1ZXN0ID0gX19wdGhyZWFkX21hbmFnZXJfcmVhZGVyID0gLTE7CiAgfQoK CiAgc2VsZi0+cF9waWQgPSAoX19nZXRwaWQoKSk7CgogIF9fcHRocmVhZF9tYWluX3RocmVhZCA9 IHNlbGY7CiAgc2VsZi0+cF9uZXh0bGl2ZSA9IChzZWxmKTsKICBzZWxmLT5wX3ByZXZsaXZlID0g KHNlbGYpOwoKICBzZWxmLT5wX2Vycm5vcCA9ICgmX2Vycm5vKTsKICBzZWxmLT5wX2hfZXJybm9w ID0gKCZfaF9lcnJubyk7CiAgc2VsZi0+cF9yZXNwID0gKCZfcmVzKTsKCiAgaWYgKGdldHJsaW1p dCAoUkxJTUlUX1NUQUNLLCAmbGltaXQpID09IDAKICAgICAgJiYgbGltaXQucmxpbV9jdXIgIT0g bGltaXQucmxpbV9tYXgpIHsKICAgIGxpbWl0LnJsaW1fY3VyID0gbGltaXQucmxpbV9tYXg7CiAg ICBzZXRybGltaXQoUkxJTUlUX1NUQUNLLCAmbGltaXQpOwogIH0KfQoKCgp2b2lkIF9fcHRocmVh ZF9raWxsX290aGVyX3RocmVhZHNfbnAodm9pZCkKewogIHN0cnVjdCBzaWdhY3Rpb24gc2E7Cgog IHB0aHJlYWRfb25leGl0X3Byb2Nlc3MoMCwgKCh2b2lkICopMCkpOwoKCiAgX19wdGhyZWFkX3Jl c2V0X21haW5fdGhyZWFkKCk7CgoKCgogIHNpZ2VtcHR5c2V0KCZzYS5zYV9tYXNrKTsKICBzYS5z YV9mbGFncyA9IDA7CiAgc2EuX19zaWdhY3Rpb25faGFuZGxlci5zYV9oYW5kbGVyID0gKChfX3Np Z2hhbmRsZXJfdCkgMCk7CiAgX19saWJjX3NpZ2FjdGlvbihfX3B0aHJlYWRfc2lnX3Jlc3RhcnQs ICZzYSwgKCh2b2lkICopMCkpOwogIF9fbGliY19zaWdhY3Rpb24oX19wdGhyZWFkX3NpZ19jYW5j ZWwsICZzYSwgKCh2b2lkICopMCkpOwogIGlmIChfX3B0aHJlYWRfc2lnX2RlYnVnID4gMCkKICAg IF9fbGliY19zaWdhY3Rpb24oX19wdGhyZWFkX3NpZ19kZWJ1ZywgJnNhLCAoKHZvaWQgKikwKSk7 Cn0KZXh0ZXJuIF9fdHlwZW9mIChfX3B0aHJlYWRfa2lsbF9vdGhlcl90aHJlYWRzX25wKSBwdGhy ZWFkX2tpbGxfb3RoZXJfdGhyZWFkc19ucCBfX2F0dHJpYnV0ZV9fICgod2VhaywgYWxpYXMgKCJf X3B0aHJlYWRfa2lsbF9vdGhlcl90aHJlYWRzX25wIikpKTsKCgpzdGF0aWMgaW50IGN1cnJlbnRf bGV2ZWw7CgppbnQgX19wdGhyZWFkX3NldGNvbmN1cnJlbmN5KGludCBsZXZlbCkKewoKICBjdXJy ZW50X2xldmVsID0gbGV2ZWw7CiAgcmV0dXJuIDA7Cn0KZXh0ZXJuIF9fdHlwZW9mIChfX3B0aHJl YWRfc2V0Y29uY3VycmVuY3kpIHB0aHJlYWRfc2V0Y29uY3VycmVuY3kgX19hdHRyaWJ1dGVfXyAo KHdlYWssIGFsaWFzICgiX19wdGhyZWFkX3NldGNvbmN1cnJlbmN5IikpKTsKCmludCBfX3B0aHJl YWRfZ2V0Y29uY3VycmVuY3kodm9pZCkKewogIHJldHVybiBjdXJyZW50X2xldmVsOwp9CmV4dGVy biBfX3R5cGVvZiAoX19wdGhyZWFkX2dldGNvbmN1cnJlbmN5KSBwdGhyZWFkX2dldGNvbmN1cnJl bmN5IF9fYXR0cmlidXRlX18gKCh3ZWFrLCBhbGlhcyAoIl9fcHRocmVhZF9nZXRjb25jdXJyZW5j eSIpKSk7CgoKCnZvaWQgX19wdGhyZWFkX3dhaXRfZm9yX3Jlc3RhcnRfc2lnbmFsKHB0aHJlYWRf ZGVzY3Igc2VsZikKewogIHNpZ3NldF90IG1hc2s7CgogIHNpZ3Byb2NtYXNrKDIsICgodm9pZCAq KTApLCAmbWFzayk7CiAgc2lnZGVsc2V0KCZtYXNrLCBfX3B0aHJlYWRfc2lnX3Jlc3RhcnQpOwog IHNlbGYtPnBfc2lnbmFsID0gKDApOwogIGRvIHsKICAgIHNpZ3N1c3BlbmQoJm1hc2spOwogIH0g d2hpbGUgKHNlbGYtPnBfc2lnbmFsICE9X19wdGhyZWFkX3NpZ19yZXN0YXJ0KTsKCiAgOwp9CiMg MTEwOCAicHRocmVhZC5jIgp2b2lkIF9fcHRocmVhZF9yZXN0YXJ0X25ldyhwdGhyZWFkX2Rlc2Ny IHRoKQp7CgoKCgogIDsKICBraWxsKHRoLT5wX3BpZCwgX19wdGhyZWFkX3NpZ19yZXN0YXJ0KTsK fQoKCgoKaW50Cl9fcHRocmVhZF90aW1lZHN1c3BlbmRfbmV3KHB0aHJlYWRfZGVzY3Igc2VsZiwg Y29uc3Qgc3RydWN0IHRpbWVzcGVjICphYnN0aW1lKQp7CiAgc2lnc2V0X3QgdW5ibG9jaywgaW5p dGlhbF9tYXNrOwogIGludCB3YXNfc2lnbmFsbGVkID0gMDsKICBzaWdqbXBfYnVmIGptcGJ1ZjsK CiAgaWYgKF9fc2lnc2V0am1wIChqbXBidWYsIDEpID09IDApIHsKICAgIHNlbGYtPnBfc2lnbmFs X2ptcCA9ICgmam1wYnVmKTsKICAgIHNlbGYtPnBfc2lnbmFsID0gKDApOwoKICAgIHNpZ2VtcHR5 c2V0KCZ1bmJsb2NrKTsKICAgIHNpZ2FkZHNldCgmdW5ibG9jaywgX19wdGhyZWFkX3NpZ19yZXN0 YXJ0KTsKICAgIHNpZ3Byb2NtYXNrKDEsICZ1bmJsb2NrLCAmaW5pdGlhbF9tYXNrKTsKCiAgICB3 aGlsZSAoMSkgewogICAgICBzdHJ1Y3QgdGltZXZhbCBub3c7CiAgICAgIHN0cnVjdCB0aW1lc3Bl YyByZWx0aW1lOwoKCiAgICAgIF9fZ2V0dGltZW9mZGF5ICgmbm93LCAoKHZvaWQgKikwKSk7CiAg ICAgIHJlbHRpbWUudHZfbnNlYyA9IGFic3RpbWUtPnR2X25zZWMgLSBub3cudHZfdXNlYyAqIDEw MDA7CiAgICAgIHJlbHRpbWUudHZfc2VjID0gYWJzdGltZS0+dHZfc2VjIC0gbm93LnR2X3NlYzsK ICAgICAgaWYgKHJlbHRpbWUudHZfbnNlYyA8IDApIHsKICAgICAgICByZWx0aW1lLnR2X25zZWMg Kz0gMTAwMDAwMDAwMDsKICAgICAgICByZWx0aW1lLnR2X3NlYyAtPSAxOwogICAgICB9CgoKCiAg ICAgIGlmIChyZWx0aW1lLnR2X3NlYyA8IDAgfHwgX19saWJjX25hbm9zbGVlcCgmcmVsdGltZSwg KCh2b2lkICopMCkpID09IDApCiAgICAgICAgYnJlYWs7CiAgICB9CgoKICAgIHNpZ3Byb2NtYXNr KDIsICZpbml0aWFsX21hc2ssICgodm9pZCAqKTApKTsKICAgIHdhc19zaWduYWxsZWQgPSAwOwog IH0gZWxzZSB7CiAgICB3YXNfc2lnbmFsbGVkID0gMTsKICB9CiAgc2VsZi0+cF9zaWduYWxfam1w ID0gKCgodm9pZCAqKTApKTsKIyAxMTczICJwdGhyZWFkLmMiCiAgOwogIHJldHVybiB3YXNfc2ln bmFsbGVkOwp9CiMgMTIwMCAicHRocmVhZC5jIgpleHRlcm4gY29uc3QgaW50IF9fcHRocmVhZF9w cm92aWRlX3dyYXBwZXJzOwpzdGF0aWMgY29uc3QgaW50ICpjb25zdCBfX3B0aHJlYWRfcmVxdWly ZV93cmFwcGVycyA9CiAgJl9fcHRocmVhZF9wcm92aWRlX3dyYXBwZXJzOwpleHRlcm4gY29uc3Qg aW50IF9fcHRocmVhZF9wcm92aWRlX2xvY2tmaWxlOwpzdGF0aWMgY29uc3QgaW50ICpjb25zdCBf X3B0aHJlYWRfcmVxdWlyZV9sb2NrZmlsZSA9CiAgJl9fcHRocmVhZF9wcm92aWRlX2xvY2tmaWxl Owo= --Multipart_Sat__26_Oct_2002_13:24:27_+0000_081c8688 Content-Type: application/octet-stream; name="pthread.s" Content-Disposition: attachment; filename="pthread.s" Content-Transfer-Encoding: base64 CS5maWxlCSJwdGhyZWFkLmMiCi5nbG9ibCBfX3B0aHJlYWRfaW5pdGlhbF90aHJlYWQKCS5kYXRh CgkuYWxpZ24gMzIKCS50eXBlCV9fcHRocmVhZF9pbml0aWFsX3RocmVhZCxAb2JqZWN0Cgkuc2l6 ZQlfX3B0aHJlYWRfaW5pdGlhbF90aHJlYWQsMTAyNApfX3B0aHJlYWRfaW5pdGlhbF90aHJlYWQ6 CgkubG9uZwlfX3B0aHJlYWRfaW5pdGlhbF90aHJlYWQKCS56ZXJvCTYwCgkubG9uZwlfX3B0aHJl YWRfaW5pdGlhbF90aHJlYWQKCS5sb25nCV9fcHRocmVhZF9pbml0aWFsX3RocmVhZAoJLmxvbmcJ MAoJLmxvbmcJMAoJLmxvbmcJMTAyNAoJLmxvbmcJMAoJLmxvbmcJMAoJLmxvbmcJX19wdGhyZWFk X2hhbmRsZXMKCS5sb25nCTAKCS5sb25nCTAKCS5sb25nCTAKCS5ieXRlCTAKCS5ieXRlCTAKCS5i eXRlCTAKCS56ZXJvCTEKCS5sb25nCTAKCS5sb25nCTAKCS5sb25nCTAKCS5sb25nCTAKCS5ieXRl CTAKCS5ieXRlCTAKCS5ieXRlCTAKCS56ZXJvCTEKCS5sb25nCV9lcnJubwoJLmxvbmcJMAoJLmxv bmcJX2hfZXJybm8KCS5sb25nCTAKCS5sb25nCTAKCS5ieXRlCTAKCS56ZXJvCTMKCS5sb25nCTAK CS5sb25nCTAKCS5sb25nCTAKCS56ZXJvCTEyNAoJLmxvbmcJMAoJLmxvbmcJMAoJLmxvbmcJMAoJ Lnplcm8JMTI0CgkubG9uZwkwCgkuemVybwk4CgkubG9uZwkxCgkubG9uZwkwCgkubG9uZwkwCgku bG9uZwkwCgkubG9uZwkwCgkubG9uZwkwCgkuemVybwk0CgkubG9uZwkwCgkubG9uZwkwCgkubG9u ZwkwCgkubG9uZwkwCgkuYnl0ZQkwCgkuYnl0ZQkwCgkuYnl0ZQkwCgkuemVybwkxCgkubG9uZwkw CgkubG9uZwkwCgkubG9uZwkwCgkubG9uZwkwCgkuemVybwk1MjAKLmdsb2JsIF9fcHRocmVhZF9t YW5hZ2VyX3RocmVhZAoJLmFsaWduIDMyCgkudHlwZQlfX3B0aHJlYWRfbWFuYWdlcl90aHJlYWQs QG9iamVjdAoJLnNpemUJX19wdGhyZWFkX21hbmFnZXJfdGhyZWFkLDEwMjQKX19wdGhyZWFkX21h bmFnZXJfdGhyZWFkOgoJLmxvbmcJX19wdGhyZWFkX21hbmFnZXJfdGhyZWFkCgkuemVybwk2MAoJ LmxvbmcJMAoJLmxvbmcJMAoJLmxvbmcJMAoJLmxvbmcJMAoJLmxvbmcJMAoJLmxvbmcJMAoJLmxv bmcJMAoJLmxvbmcJX19wdGhyZWFkX2hhbmRsZXMrMTYKCS5sb25nCTAKCS5sb25nCTAKCS5sb25n CTAKCS5ieXRlCTAKCS5ieXRlCTAKCS5ieXRlCTAKCS56ZXJvCTEKCS5sb25nCTAKCS5sb25nCTAK CS5sb25nCTAKCS5sb25nCTAKCS5ieXRlCTAKCS5ieXRlCTAKCS5ieXRlCTAKCS56ZXJvCTEKCS5s b25nCV9fcHRocmVhZF9tYW5hZ2VyX3RocmVhZCsxMzYKCS5sb25nCTAKCS5sb25nCTAKCS5sb25n CTAKCS5sb25nCTAKCS5ieXRlCTAKCS56ZXJvCTMKCS5sb25nCV9fcHRocmVhZF9tYW5hZ2VyCgku bG9uZwkwCgkubG9uZwkwCgkuemVybwkxMjQKCS5sb25nCTAKCS5sb25nCTAKCS5sb25nCTAKCS56 ZXJvCTEyNAoJLmxvbmcJMAoJLnplcm8JOAoJLmxvbmcJMAoJLmxvbmcJMAoJLmxvbmcJMAoJLmxv bmcJMQoJLmxvbmcJMAoJLmxvbmcJMAoJLnplcm8JNAoJLmxvbmcJMAoJLmxvbmcJMAoJLmxvbmcJ MAoJLmxvbmcJMAoJLmJ5dGUJMAoJLmJ5dGUJMAoJLmJ5dGUJMAoJLnplcm8JMQoJLmxvbmcJMAoJ LmxvbmcJMAoJLmxvbmcJMAoJLmxvbmcJMAoJLnplcm8JNTIwCi5nbG9ibCBfX3B0aHJlYWRfbWFp bl90aHJlYWQKCS5hbGlnbiA0CgkudHlwZQlfX3B0aHJlYWRfbWFpbl90aHJlYWQsQG9iamVjdAoJ LnNpemUJX19wdGhyZWFkX21haW5fdGhyZWFkLDQKX19wdGhyZWFkX21haW5fdGhyZWFkOgoJLmxv bmcJX19wdGhyZWFkX2luaXRpYWxfdGhyZWFkCi5nbG9ibCBfX3B0aHJlYWRfbWFuYWdlcl9yZXF1 ZXN0CgkuYWxpZ24gNAoJLnR5cGUJX19wdGhyZWFkX21hbmFnZXJfcmVxdWVzdCxAb2JqZWN0Cgku c2l6ZQlfX3B0aHJlYWRfbWFuYWdlcl9yZXF1ZXN0LDQKX19wdGhyZWFkX21hbmFnZXJfcmVxdWVz dDoKCS5sb25nCS0xCi5nbG9ibCBfX3B0aHJlYWRfdGhyZWFkc19tYXgKCS5zZWN0aW9uCS5yb2Rh dGEKCS5hbGlnbiA0CgkudHlwZQlfX3B0aHJlYWRfdGhyZWFkc19tYXgsQG9iamVjdAoJLnNpemUJ X19wdGhyZWFkX3RocmVhZHNfbWF4LDQKX19wdGhyZWFkX3RocmVhZHNfbWF4OgoJLmxvbmcJMTAy NAouZ2xvYmwgX19wdGhyZWFkX3NpemVvZl9oYW5kbGUKCS5hbGlnbiA0CgkudHlwZQlfX3B0aHJl YWRfc2l6ZW9mX2hhbmRsZSxAb2JqZWN0Cgkuc2l6ZQlfX3B0aHJlYWRfc2l6ZW9mX2hhbmRsZSw0 Cl9fcHRocmVhZF9zaXplb2ZfaGFuZGxlOgoJLmxvbmcJMTYKLmdsb2JsIF9fcHRocmVhZF9vZmZz ZXRvZl9kZXNjcgoJLmFsaWduIDQKCS50eXBlCV9fcHRocmVhZF9vZmZzZXRvZl9kZXNjcixAb2Jq ZWN0Cgkuc2l6ZQlfX3B0aHJlYWRfb2Zmc2V0b2ZfZGVzY3IsNApfX3B0aHJlYWRfb2Zmc2V0b2Zf ZGVzY3I6CgkubG9uZwk4Ci5nbG9ibCBfX3B0aHJlYWRfb2Zmc2V0b2ZfcGlkCgkuYWxpZ24gNAoJ LnR5cGUJX19wdGhyZWFkX29mZnNldG9mX3BpZCxAb2JqZWN0Cgkuc2l6ZQlfX3B0aHJlYWRfb2Zm c2V0b2ZfcGlkLDQKX19wdGhyZWFkX29mZnNldG9mX3BpZDoKCS5sb25nCTg0Ci5nbG9ibCBfX2xp bnV4dGhyZWFkc19wdGhyZWFkX3NpemVvZl9kZXNjcgoJLmFsaWduIDQKCS50eXBlCV9fbGludXh0 aHJlYWRzX3B0aHJlYWRfc2l6ZW9mX2Rlc2NyLEBvYmplY3QKCS5zaXplCV9fbGludXh0aHJlYWRz X3B0aHJlYWRfc2l6ZW9mX2Rlc2NyLDQKX19saW51eHRocmVhZHNfcHRocmVhZF9zaXplb2ZfZGVz Y3I6CgkubG9uZwkxMDI0Ci5nbG9ibCBfX3B0aHJlYWRfc2lnX3Jlc3RhcnQKCS5kYXRhCgkuYWxp Z24gNAoJLnR5cGUJX19wdGhyZWFkX3NpZ19yZXN0YXJ0LEBvYmplY3QKCS5zaXplCV9fcHRocmVh ZF9zaWdfcmVzdGFydCw0Cl9fcHRocmVhZF9zaWdfcmVzdGFydDoKCS5sb25nCTMyCi5nbG9ibCBf X3B0aHJlYWRfc2lnX2NhbmNlbAoJLmFsaWduIDQKCS50eXBlCV9fcHRocmVhZF9zaWdfY2FuY2Vs LEBvYmplY3QKCS5zaXplCV9fcHRocmVhZF9zaWdfY2FuY2VsLDQKX19wdGhyZWFkX3NpZ19jYW5j ZWw6CgkubG9uZwkzMwouZ2xvYmwgX19wdGhyZWFkX3NpZ19kZWJ1ZwoJLmFsaWduIDQKCS50eXBl CV9fcHRocmVhZF9zaWdfZGVidWcsQG9iamVjdAoJLnNpemUJX19wdGhyZWFkX3NpZ19kZWJ1Zyw0 Cl9fcHRocmVhZF9zaWdfZGVidWc6CgkubG9uZwkzNAoJLnNlY3Rpb24JLnJvZGF0YQoJLmFsaWdu IDQKCS50eXBlCXN5c2N0bF9hcmdzLjAsQG9iamVjdAoJLnNpemUJc3lzY3RsX2FyZ3MuMCw4CnN5 c2N0bF9hcmdzLjA6CgkubG9uZwkxCgkubG9uZwk0Cgkuc2VjdGlvbgkuY3RvcnMsImF3IixAcHJv Z2JpdHMKCS5hbGlnbiA0CgkubG9uZwlwdGhyZWFkX2luaXRpYWxpemUKCS50ZXh0CgkuYWxpZ24g MgoJLnAyYWxpZ24gNCwsMTUKLmdsb2JsIF9fcHRocmVhZF9pbml0aWFsaXplX21hbmFnZXIKCS50 eXBlCV9fcHRocmVhZF9pbml0aWFsaXplX21hbmFnZXIsQGZ1bmN0aW9uCl9fcHRocmVhZF9pbml0 aWFsaXplX21hbmFnZXI6CglwdXNobAklZWJwCglwdXNobAklZWJ4CglzdWJsCSQxODAsICVlc3AK CW1vdmwJX19wdGhyZWFkX21heF9zdGFja3NpemUsICVlYXgKCXRlc3RsCSVlYXgsICVlYXgKCWpl CS5MNTQKLkwyOToKCW1vdmwJX19wdGhyZWFkX2luaXRpYWxfdGhyZWFkX2JvcywgJWVheAoJdGVz dGwJJWVheCwgJWVheAoJamUJLkw1NQouTDMyOgoJc3VibAkkMTIsICVlc3AKCXB1c2hsCSQ4MTYw CgljYWxsCW1hbGxvYwoJb3JsCSQtMSwgJWVkeAoJYWRkbAkkMTYsICVlc3AKCW1vdmwJJWVheCwg X19wdGhyZWFkX21hbmFnZXJfdGhyZWFkX2JvcwoJdGVzdGwJJWVheCwgJWVheAoJamUJLkwyOAoJ c3VibAkkMTIsICVlc3AKCWFkZGwJJDgxNjAsICVlYXgKCW1vdmwJJWVheCwgX19wdGhyZWFkX21h bmFnZXJfdGhyZWFkX3RvcwoJbGVhbAkxMiglZXNwKSwgJWVieAoJcHVzaGwJJWVieAoJY2FsbAlw aXBlCglhZGRsCSQxNiwgJWVzcAoJaW5jbAklZWF4CglqZQkuTDU2Cgltb3ZsCV9fcHRocmVhZF9p bml0aWFsX3RocmVhZCs0NTYsICVlZHgKCXhvcmwJJWVicCwgJWVicAoJdGVzdGwJJWVkeCwgJWVk eAoJam5lCS5MNTcKLkwzNToKCXRlc3RsCSVlYnAsICVlYnAKCWpuZQkuTDM4Cgltb3ZsCSglZXNw KSwgJWVheAoJcHVzaGwJJWVheAoJbW92bAlfX3B0aHJlYWRfbWFuYWdlcl90aHJlYWRfdG9zLCAl ZWF4CglwdXNobAkkMzg0MAoJcHVzaGwJJWVheAoJcHVzaGwJJF9fcHRocmVhZF9tYW5hZ2VyCglj YWxsCV9fY2xvbmUKCWFkZGwJJDE2LCAlZXNwCgltb3ZsCSVlYXgsICVlYnAKLkwzODoKCWNtcGwJ JC0xLCAlZWJwCglqZQkuTDU4Cgltb3ZsCTQoJWVieCksICVlYXgKCW1vdmwJJWVicCwgX19wdGhy ZWFkX21hbmFnZXJfdGhyZWFkKzg0Cgltb3ZsCSVlYXgsIF9fcHRocmVhZF9tYW5hZ2VyX3JlcXVl c3QKCW1vdmwJKCVlc3ApLCAlZWF4Cgltb3ZsCSVlYXgsIF9fcHRocmVhZF9tYW5hZ2VyX3JlYWRl cgoJbW92bAlfX3B0aHJlYWRfdGhyZWFkc19kZWJ1ZywgJWVheAoJbW92bAkkMjA0OSwgX19wdGhy ZWFkX21hbmFnZXJfdGhyZWFkKzgwCgl0ZXN0bAklZWF4LCAlZWF4CglqbmUJLkw1OQouTDQwOgoJ bW92bAkkNSwgMjAoJWVzcCkKCWxlYWwJMTYoJWVzcCksICVlYnAKCS5wMmFsaWduIDQsLDcKLkw0 ODoKCW1vdmwJX19wdGhyZWFkX21hbmFnZXJfcmVxdWVzdCwgJWVheAoJcHVzaGwJJWVkeAoJcHVz aGwJJDE0OAoJcHVzaGwJJWVicAoJcHVzaGwJJWVheAoJY2FsbAlfX2xpYmNfd3JpdGUKCWFkZGwJ JDE2LCAlZXNwCglpbmNsCSVlYXgKCWpuZQkuTDQ5CgljYWxsCV9fZXJybm9fbG9jYXRpb24KCWNt cGwJJDQsICglZWF4KQoJamUJLkw0OAouTDQ5OgoJeG9ybAklZWR4LCAlZWR4Ci5MMjg6CglhZGRs CSQxODAsICVlc3AKCW1vdmwJJWVkeCwgJWVheAoJcG9wbAklZWJ4Cglwb3BsCSVlYnAKCXJldAou TDU5OgoJbW92bAlfX3B0aHJlYWRfc2lnX2RlYnVnLCAlZWF4Cgl0ZXN0bAklZWF4LCAlZWF4Cglq bGUJLkw0MAoJc3VibAkkMTIsICVlc3AKCXB1c2hsCSVlYXgKCWNhbGwJcmFpc2UKCW1vdmwJJWVi cCwgJWVheAoJYWRkbAkkMTYsICVlc3AKCWNtcGwJX19wdGhyZWFkX2luaXRpYWxfdGhyZWFkX2Jv cywgJWVicAoJamIJLkw0MQoJbW92bAkkX19wdGhyZWFkX2luaXRpYWxfdGhyZWFkLCAlZWF4Ci5M NDI6CglzdWJsCSQxMiwgJWVzcAoJcHVzaGwJJWVheAoJY2FsbAlfX3B0aHJlYWRfd2FpdF9mb3Jf cmVzdGFydF9zaWduYWwKCWFkZGwJJDE2LCAlZXNwCglqbXAJLkw0MAouTDQxOgoJY21wbAlfX3B0 aHJlYWRfbWFuYWdlcl90aHJlYWRfYm9zLCAlZWJwCglqYgkuTDQ0CgljbXBsCV9fcHRocmVhZF9t YW5hZ2VyX3RocmVhZF90b3MsICVlYnAKCWphZQkuTDQ0Cgltb3ZsCSRfX3B0aHJlYWRfbWFuYWdl cl90aHJlYWQsICVlYXgKCWptcAkuTDQyCi5MNDQ6Cgltb3ZsCV9fcHRocmVhZF9ub25zdGFuZGFy ZF9zdGFja3MsICVlYngKCXRlc3RsCSVlYngsICVlYngKCWplCS5MNDYKCWNhbGwJX19wdGhyZWFk X2ZpbmRfc2VsZgoJam1wCS5MNDIKLkw0NjoKCW9ybAkkMjA5NzE1MSwgJWVheAoJc3VibAkkMTAy MywgJWVheAoJam1wCS5MNDIKLkw1ODoKCXN1YmwJJDEyLCAlZXNwCgltb3ZsCV9fcHRocmVhZF9t YW5hZ2VyX3RocmVhZF9ib3MsICVlYXgKCXB1c2hsCSVlYXgKCWNhbGwJZnJlZQoJcG9wbAklZWF4 Cgltb3ZsCTEyKCVlc3ApLCAlZWF4CglwdXNobAklZWF4CgljYWxsCV9fbGliY19jbG9zZQoJbW92 bAk0KCVlYngpLCAlZWR4Cglwb3BsCSVlYnAKCXB1c2hsCSVlZHgKCWNhbGwJX19saWJjX2Nsb3Nl Ci5MNTM6CglvcmwJJC0xLCAlZWR4CglhZGRsCSQxNiwgJWVzcAoJam1wCS5MMjgKLkw1NzoKCW1v dmwJX19wdGhyZWFkX3RocmVhZHNfZXZlbnRzLCAlZWF4Cgltb3ZsCV9fcHRocmVhZF9pbml0aWFs X3RocmVhZCs0NjAsICVlY3gKCW9ybAklZWN4LCAlZWF4Cgl0ZXN0bAkkMTI4LCAlZWF4CglqZQku TDM1Cgl4b3JsCSVlZHgsICVlZHgKCW1vdmwJX19wdGhyZWFkX21hbmFnZXJfdGhyZWFkKzkyLCAl ZWF4CgljYWxsCV9fcHRocmVhZF9sb2NrCgltb3ZsCV9fcHRocmVhZF9tYW5hZ2VyX3RocmVhZF90 b3MsICVlYnAKCW1vdmwJKCVlc3ApLCAlZWF4CglwdXNobAklZWF4CglwdXNobAkkMzg0MAoJcHVz aGwJJWVicAoJcHVzaGwJJF9fcHRocmVhZF9tYW5hZ2VyX2V2ZW50CgljYWxsCV9fY2xvbmUKCWFk ZGwJJDE2LCAlZXNwCgltb3ZsCSVlYXgsICVlYnAKCWNtcGwJJC0xLCAlZWF4CglqZQkuTDM3Cglt b3ZsCSRfX3B0aHJlYWRfbWFuYWdlcl90aHJlYWQsIF9fcHRocmVhZF9tYW5hZ2VyX3RocmVhZCs0 NzIKCW1vdmwJJDgsIF9fcHRocmVhZF9tYW5hZ2VyX3RocmVhZCs0NjgKCW1vdmwJJF9fcHRocmVh ZF9tYW5hZ2VyX3RocmVhZCwgX19wdGhyZWFkX2xhc3RfZXZlbnQKCW1vdmwJJDIwNDksIF9fcHRo cmVhZF9tYW5hZ2VyX3RocmVhZCs4MAoJbW92bAklZWF4LCBfX3B0aHJlYWRfbWFuYWdlcl90aHJl YWQrODQKCWNhbGwJX19saW51eHRocmVhZHNfY3JlYXRlX2V2ZW50Ci5MMzc6CglzdWJsCSQxMiwg JWVzcAoJbW92bAlfX3B0aHJlYWRfbWFuYWdlcl90aHJlYWQrOTIsICVlYXgKCXB1c2hsCSVlYXgK CWNhbGwJX19wdGhyZWFkX3VubG9jawoJYWRkbAkkMTYsICVlc3AKCWptcAkuTDM1Ci5MNTY6Cglz dWJsCSQxMiwgJWVzcAoJbW92bAlfX3B0aHJlYWRfbWFuYWdlcl90aHJlYWRfYm9zLCAlZWF4Cglw dXNobAklZWF4CgljYWxsCWZyZWUKCWptcAkuTDUzCi5MNTU6CgljYWxsCXB0aHJlYWRfaW5pdGlh bGl6ZQoJam1wCS5MMzIKLkw1NDoKCW1vdmwJJDIwOTcxNTIsICVlYnAKCXB1c2hsCSVlYXgKCXB1 c2hsCSVlYXgKCWxlYWwJMTYoJWVzcCksICVlYngKCXB1c2hsCSVlYngKCXB1c2hsCSQzCgljYWxs CWdldHJsaW1pdAoJYWRkbAkkMTYsICVlc3AKCWNhbGwJX19nZXRwYWdlc2l6ZQoJc3VibAklZWF4 LCAlZWJwCgljbXBsCSVlYnAsIDgoJWVzcCkKCWphCS5MNjAKLkwzMDoKCW1vdmwJJWVicCwgX19w dGhyZWFkX21heF9zdGFja3NpemUKCWptcAkuTDI5Ci5MNjA6Cgltb3ZsCSVlYnAsIDgoJWVzcCkK CXB1c2hsCSVlYXgKCXB1c2hsCSVlYXgKCXB1c2hsCSVlYngKCXB1c2hsCSQzCgljYWxsCXNldHJs aW1pdAoJYWRkbAkkMTYsICVlc3AKCWptcAkuTDMwCi5MZmUxOgoJLnNpemUJX19wdGhyZWFkX2lu aXRpYWxpemVfbWFuYWdlciwuTGZlMS1fX3B0aHJlYWRfaW5pdGlhbGl6ZV9tYW5hZ2VyCgkuYWxp Z24gMgoJLnAyYWxpZ24gNCwsMTUKLmdsb2JsIF9fcHRocmVhZF9jcmVhdGVfMl8xCgkudHlwZQlf X3B0aHJlYWRfY3JlYXRlXzJfMSxAZnVuY3Rpb24KX19wdGhyZWFkX2NyZWF0ZV8yXzE6CglwdXNo bAklZWJwCgltb3ZsCSVlYnAsICVlYXgKCXB1c2hsCSVlYngKCXN1YmwJJDE2NCwgJWVzcAoJY21w bAlfX3B0aHJlYWRfaW5pdGlhbF90aHJlYWRfYm9zLCAlZWJwCglqYgkuTDYyCgltb3ZsCSRfX3B0 aHJlYWRfaW5pdGlhbF90aHJlYWQsICVlYngKLkw2MzoKCW1vdmwJX19wdGhyZWFkX21hbmFnZXJf cmVxdWVzdCwgJWVheAoJdGVzdGwJJWVheCwgJWVheAoJanMJLkw3OAouTDY5OgoJbW92bAkxODAo JWVzcCksICVlYXgKCW1vdmwJJWVieCwgKCVlc3ApCgltb3ZsCSVlYXgsIDgoJWVzcCkKCW1vdmwJ MTg0KCVlc3ApLCAlZWF4Cgltb3ZsCSVlYXgsIDEyKCVlc3ApCgltb3ZsCTE4OCglZXNwKSwgJWVh eAoJbW92bAklZWF4LCAxNiglZXNwKQoJbW92bAkkMCwgNCglZXNwKQoJcHVzaGwJJWVheAoJbGVh bAkyNCglZXNwKSwgJWVkeAoJcHVzaGwJJWVkeAoJcHVzaGwJJDAKCXB1c2hsCSQyCgljYWxsCXNp Z3Byb2NtYXNrCglhZGRsCSQxNiwgJWVzcAoJbW92bAklZXNwLCAlZWJwCgkucDJhbGlnbiA0LCw3 Ci5MNzE6CglwdXNobAklZWF4Cgltb3ZsCV9fcHRocmVhZF9tYW5hZ2VyX3JlcXVlc3QsICVlYXgK CXB1c2hsCSQxNDgKCXB1c2hsCSVlYnAKCXB1c2hsCSVlYXgKCWNhbGwJX19saWJjX3dyaXRlCglh ZGRsCSQxNiwgJWVzcAoJaW5jbAklZWF4CglqbmUJLkw3MgoJY2FsbAlfX2Vycm5vX2xvY2F0aW9u CgljbXBsCSQ0LCAoJWVheCkKCWplCS5MNzEKLkw3MjoKCXN1YmwJJDEyLCAlZXNwCglwdXNobAkl ZWJ4CgljYWxsCV9fcHRocmVhZF93YWl0X2Zvcl9yZXN0YXJ0X3NpZ25hbAoJbW92bAkxMTYoJWVi eCksICVlY3gKCWFkZGwJJDE2LCAlZXNwCgl0ZXN0bAklZWN4LCAlZWN4CglqbmUJLkw3NwoJbW92 bAkxNzYoJWVzcCksICVlYXgKCW1vdmwJMTEyKCVlYngpLCAlZWJwCgltb3ZsCSVlYnAsICglZWF4 KQouTDc3OgoJbW92bAklZWN4LCAlZWR4Ci5MNjE6CglhZGRsCSQxNjQsICVlc3AKCW1vdmwJJWVk eCwgJWVheAoJcG9wbAklZWJ4Cglwb3BsCSVlYnAKCXJldAouTDc4OgoJY2FsbAlfX3B0aHJlYWRf aW5pdGlhbGl6ZV9tYW5hZ2VyCgltb3ZsCSQxMSwgJWVkeAoJdGVzdGwJJWVheCwgJWVheAoJam5z CS5MNjkKCWptcAkuTDYxCgkucDJhbGlnbiA0LCw3Ci5MNjI6CgljbXBsCV9fcHRocmVhZF9tYW5h Z2VyX3RocmVhZF9ib3MsICVlYnAKCWpiCS5MNjUKCWNtcGwJX19wdGhyZWFkX21hbmFnZXJfdGhy ZWFkX3RvcywgJWVicAoJamFlCS5MNjUKCW1vdmwJJF9fcHRocmVhZF9tYW5hZ2VyX3RocmVhZCwg JWVieAoJam1wCS5MNjMKLkw2NToKCW1vdmwJX19wdGhyZWFkX25vbnN0YW5kYXJkX3N0YWNrcywg JWVkeAoJdGVzdGwJJWVkeCwgJWVkeAoJamUJLkw2NwoJY2FsbAlfX3B0aHJlYWRfZmluZF9zZWxm Cgltb3ZsCSVlYXgsICVlYngKCWptcAkuTDYzCi5MNjc6CglvcmwJJDIwOTcxNTEsICVlYXgKCWxl YWwJLTEwMjMoJWVheCksICVlYngKCWptcAkuTDYzCi5MZmUyOgoJLnNpemUJX19wdGhyZWFkX2Ny ZWF0ZV8yXzEsLkxmZTItX19wdGhyZWFkX2NyZWF0ZV8yXzEKCS53ZWFrCXB0aHJlYWRfY3JlYXRl Cgkuc2V0CXB0aHJlYWRfY3JlYXRlLF9fcHRocmVhZF9jcmVhdGVfMl8xCgkuYWxpZ24gMgoJLnAy YWxpZ24gNCwsMTUKLmdsb2JsIF9fcHRocmVhZF9maW5kX3NlbGYKCS50eXBlCV9fcHRocmVhZF9m aW5kX3NlbGYsQGZ1bmN0aW9uCl9fcHRocmVhZF9maW5kX3NlbGY6CglwdXNobAklZWJwCgltb3Zs CSVlYnAsICVlY3gKCW1vdmwJJF9fcHRocmVhZF9oYW5kbGVzKzMyLCAlZWR4CgljbXBsCV9fcHRo cmVhZF9oYW5kbGVzKzQwLCAlZWJwCglqYmUJLkw4NwoJLnAyYWxpZ24gNCwsNwouTDgzOgoJYWRk bAkkMTYsICVlZHgKCW1vdmwJOCglZWR4KSwgJWVheAoJY21wbAklZWF4LCAlZWN4CglqYQkuTDgz CgljbXBsCTEyKCVlZHgpLCAlZWN4CglqYgkuTDgzCi5MODU6Cglwb3BsCSVlYnAKCXJldAouTDg3 OgoJY21wbAlfX3B0aHJlYWRfaGFuZGxlcys0NCwgJWVicAoJamIJLkw4MwoJbW92bAlfX3B0aHJl YWRfaGFuZGxlcys0MCwgJWVheAoJam1wCS5MODUKLkxmZTM6Cgkuc2l6ZQlfX3B0aHJlYWRfZmlu ZF9zZWxmLC5MZmUzLV9fcHRocmVhZF9maW5kX3NlbGYKCS53ZWFrCXB0aHJlYWRfeWllbGQKCS5z ZXQJcHRocmVhZF95aWVsZCxfX3B0aHJlYWRfeWllbGQKCS5hbGlnbiAyCgkucDJhbGlnbiA0LCwx NQoJLnR5cGUJcHRocmVhZF9oYW5kbGVfc2lnY2FuY2VsLEBmdW5jdGlvbgpwdGhyZWFkX2hhbmRs ZV9zaWdjYW5jZWw6CglwdXNobAklZWJwCglwdXNobAklZWN4CglwdXNobAklZWN4Cgltb3ZsCTE2 KCVlc3ApLCAlZWJwCgltb3ZsCSVlYnAsICVlYXgKCWNtcGwJX19wdGhyZWFkX2luaXRpYWxfdGhy ZWFkX2JvcywgJWVicAoJamIJLkw4OQoJbW92bAkkX19wdGhyZWFkX2luaXRpYWxfdGhyZWFkLCAl ZWF4Ci5MOTA6CgljbXBsCSRfX3B0aHJlYWRfbWFuYWdlcl90aHJlYWQsICVlYXgKCWplCS5MMTAy Cgltb3ZsCV9fcHRocmVhZF9leGl0X3JlcXVlc3RlZCwgJWVjeAoJdGVzdGwJJWVjeCwgJWVjeAoJ am5lCS5MMTAzCgljbXBiCSQwLCAxMzAoJWVheCkKCWpuZQkuTDEwNAouTDg4OgoJcG9wbAklZWJw Cglwb3BsCSVlYXgKCXBvcGwJJWVicAoJcmV0Ci5MMTA0OgoJY21wYgkkMCwgMTI4KCVlYXgpCglq bmUJLkw4OAoJY21wYgkkMSwgMTI5KCVlYXgpCglqZQkuTDEwNQoJbW92bAkxMDQoJWVheCksICVl ZHgKCXRlc3RsCSVlZHgsICVlZHgKCWplCS5MODgKCWptcAkuTDEwNgoJLnAyYWxpZ24gNCwsNwou TDEwMzoKCWNtcGwJX19wdGhyZWFkX21haW5fdGhyZWFkLCAlZWF4CglqZQkuTDEwNwouTDk4OgoJ c3VibAkkMTIsICVlc3AKCW1vdmwJX19wdGhyZWFkX2V4aXRfY29kZSwgJWVheAoJcHVzaGwJJWVh eAoJY2FsbAlfZXhpdAouTDEwNzoKCXB1c2hsCSVlYXgKCW1vdmwJX19wdGhyZWFkX21hbmFnZXJf dGhyZWFkKzg0LCAlZWF4CglwdXNobAkkLTIxNDc0ODM2NDgKCXB1c2hsCSQwCglwdXNobAklZWF4 CgljYWxsCXdhaXRwaWQKCWFkZGwJJDE2LCAlZXNwCglqbXAJLkw5OAouTDEwMjoKCW1vdmwJJWVi cCwgMTYoJWVzcCkKCXBvcGwJJWVjeAoJcG9wbAklZWJwCglwb3BsCSVlYnAKCWptcAlfX3B0aHJl YWRfbWFuYWdlcl9zaWdoYW5kbGVyCgkucDJhbGlnbiA0LCw3Ci5MODk6CgljbXBsCV9fcHRocmVh ZF9tYW5hZ2VyX3RocmVhZF9ib3MsICVlYnAKCWpiCS5MOTIKCWNtcGwJX19wdGhyZWFkX21hbmFn ZXJfdGhyZWFkX3RvcywgJWVicAoJamFlCS5MOTIKCW1vdmwJJF9fcHRocmVhZF9tYW5hZ2VyX3Ro cmVhZCwgJWVheAoJam1wCS5MOTAKCS5wMmFsaWduIDQsLDcKLkw5MjoKCW1vdmwJX19wdGhyZWFk X25vbnN0YW5kYXJkX3N0YWNrcywgJWVjeAoJdGVzdGwJJWVjeCwgJWVjeAoJamUJLkw5NAoJY2Fs bAlfX3B0aHJlYWRfZmluZF9zZWxmCglqbXAJLkw5MAoJLnAyYWxpZ24gNCwsNwouTDk0OgoJb3Js CSQyMDk3MTUxLCAlZWF4CglzdWJsCSQxMDIzLCAlZWF4CglqbXAJLkw5MAouTDEwNToKCXB1c2hs CSVlYXgKCXB1c2hsCSVlYXgKCXB1c2hsCSVlYnAKCXB1c2hsCSQtMQoJY2FsbAlfX3B0aHJlYWRf ZG9fZXhpdAouTDEwNjoKCW1vdmwJJDAsIDEwNCglZWF4KQoJcHVzaGwJJWVheAoJcHVzaGwJJWVh eAoJcHVzaGwJJDEKCXB1c2hsCSVlZHgKCWNhbGwJc2lnbG9uZ2ptcAouTGZlNDoKCS5zaXplCXB0 aHJlYWRfaGFuZGxlX3NpZ2NhbmNlbCwuTGZlNC1wdGhyZWFkX2hhbmRsZV9zaWdjYW5jZWwKCS53 ZWFrCXB0aHJlYWRfa2lsbF9vdGhlcl90aHJlYWRzX25wCgkuc2V0CXB0aHJlYWRfa2lsbF9vdGhl cl90aHJlYWRzX25wLF9fcHRocmVhZF9raWxsX290aGVyX3RocmVhZHNfbnAKCS53ZWFrCXB0aHJl YWRfc2V0Y29uY3VycmVuY3kKCS5zZXQJcHRocmVhZF9zZXRjb25jdXJyZW5jeSxfX3B0aHJlYWRf c2V0Y29uY3VycmVuY3kKCS53ZWFrCXB0aHJlYWRfZ2V0Y29uY3VycmVuY3kKCS5zZXQJcHRocmVh ZF9nZXRjb25jdXJyZW5jeSxfX3B0aHJlYWRfZ2V0Y29uY3VycmVuY3kKCS5hbGlnbiAyCgkucDJh bGlnbiA0LCwxNQouZ2xvYmwgX19wdGhyZWFkX3dhaXRfZm9yX3Jlc3RhcnRfc2lnbmFsCgkudHlw ZQlfX3B0aHJlYWRfd2FpdF9mb3JfcmVzdGFydF9zaWduYWwsQGZ1bmN0aW9uCl9fcHRocmVhZF93 YWl0X2Zvcl9yZXN0YXJ0X3NpZ25hbDoKCXB1c2hsCSVlc2kKCXB1c2hsCSVlYngKCXN1YmwJJDEz NiwgJWVzcAoJbGVhbAk0KCVlc3ApLCAlZWJ4Cgltb3ZsCTE0OCglZXNwKSwgJWVzaQoJcHVzaGwJ JWVieAoJcHVzaGwJJDAKCXB1c2hsCSQyCgljYWxsCXNpZ3Byb2NtYXNrCglwb3BsCSVlYXgKCXBv cGwJJWVkeAoJbW92bAlfX3B0aHJlYWRfc2lnX3Jlc3RhcnQsICVlYXgKCXB1c2hsCSVlYXgKCXB1 c2hsCSVlYngKCWNhbGwJc2lnZGVsc2V0CglhZGRsCSQxNiwgJWVzcAoJbW92bAkkMCwgOTYoJWVz aSkKCS5wMmFsaWduIDQsLDcKLkwxMDk6CglzdWJsCSQxMiwgJWVzcAoJcHVzaGwJJWVieAoJY2Fs bAlzaWdzdXNwZW5kCgltb3ZsCV9fcHRocmVhZF9zaWdfcmVzdGFydCwgJWVheAoJYWRkbAkkMTYs ICVlc3AKCWNtcGwJJWVheCwgOTYoJWVzaSkKCWpuZQkuTDEwOQoJYWRkbAkkMTMyLCAlZXNwCglw b3BsCSVlYngKCXBvcGwJJWVzaQoJcmV0Ci5MZmU1OgoJLnNpemUJX19wdGhyZWFkX3dhaXRfZm9y X3Jlc3RhcnRfc2lnbmFsLC5MZmU1LV9fcHRocmVhZF93YWl0X2Zvcl9yZXN0YXJ0X3NpZ25hbAoJ LmFsaWduIDIKCS5wMmFsaWduIDQsLDE1Ci5nbG9ibCBfX3B0aHJlYWRfdGltZWRzdXNwZW5kX25l dwoJLnR5cGUJX19wdGhyZWFkX3RpbWVkc3VzcGVuZF9uZXcsQGZ1bmN0aW9uCl9fcHRocmVhZF90 aW1lZHN1c3BlbmRfbmV3OgoJcHVzaGwJJWVicAoJcHVzaGwJJWVkaQoJcHVzaGwJJWVzaQoJcHVz aGwJJWVieAoJc3VibAkkNDUyLCAlZXNwCglwdXNobAkkMQoJbGVhbAkyOCglZXNwKSwgJWVkeAoJ cHVzaGwJJWVkeAoJY2FsbAlfX3NpZ3NldGptcAoJYWRkbAkkMTYsICVlc3AKCXRlc3RsCSVlYXgs ICVlYXgKCWplCS5MMTIzCgltb3ZsCSQxLCAlZWF4Ci5MMTIyOgoJbW92bAk0NjQoJWVzcCksICVl YngKCW1vdmwJJDAsIDEwMCglZWJ4KQoJYWRkbAkkNDQ0LCAlZXNwCglwb3BsCSVlYngKCXBvcGwJ JWVzaQoJcG9wbAklZWRpCglwb3BsCSVlYnAKCXJldAoJLnAyYWxpZ24gNCwsNwouTDEyMzoKCW1v dmwJNDY0KCVlc3ApLCAlZWN4CglsZWFsCTE2KCVlc3ApLCAlZWJ4CglzdWJsCSQxMiwgJWVzcAoJ bW92bAklZWJ4LCAxMDAoJWVjeCkKCWxlYWwJMzE2KCVlc3ApLCAlZXNpCgltb3ZsCSQwLCA5Nigl ZWN4KQoJcHVzaGwJJWVzaQoJY2FsbAlzaWdlbXB0eXNldAoJcG9wbAklZWF4Cglwb3BsCSVlZHgK CW1vdmwJX19wdGhyZWFkX3NpZ19yZXN0YXJ0LCAlZWF4CglwdXNobAklZWF4CglwdXNobAklZXNp CgljYWxsCXNpZ2FkZHNldAoJYWRkbAkkMTIsICVlc3AKCWxlYWwJMTgwKCVlc3ApLCAlZWR4Cglw dXNobAklZWR4CglwdXNobAklZXNpCglwdXNobAkkMQoJY2FsbAlzaWdwcm9jbWFzawoJYWRkbAkk MTYsICVlc3AKCW1vdmwJJWVzcCwgJWVzaQoJbGVhbAk4KCVlc3ApLCAlZWJ4CgkucDJhbGlnbiA0 LCw3Ci5MMTIxOgoJcHVzaGwJJWVheAoJcHVzaGwJJWVheAoJcHVzaGwJJDAKCXB1c2hsCSVlYngK CWNhbGwJX19nZXR0aW1lb2ZkYXkKCW1vdmwJNDg0KCVlc3ApLCAlZWJwCgltb3ZsCTI4KCVlc3Ap LCAlZWF4CglsZWFsCSglZWF4LCVlYXgsNCksICVlZGkKCW1vdmwJMjQoJWVzcCksICVlYXgKCWxl YWwJKCVlZGksJWVkaSw0KSwgJWVkeAoJbGVhbAkoJWVkeCwlZWR4LDQpLCAlZWN4Cgltb3ZsCTQo JWVicCksICVlZHgKCXNhbGwJJDMsICVlY3gKCXN1YmwJJWVjeCwgJWVkeAoJbW92bAkoJWVicCks ICVlY3gKCXN1YmwJJWVheCwgJWVjeAoJbW92bAklZWR4LCAyMCglZXNwKQoJbW92bAklZWN4LCAx NiglZXNwKQoJYWRkbAkkMTYsICVlc3AKCXRlc3RsCSVlZHgsICVlZHgKCWpzCS5MMTI0Ci5MMTE4 OgoJbW92bAkoJWVzcCksICVlYXgKCXRlc3RsCSVlYXgsICVlYXgKCWpzCS5MMTE2CglwdXNobAkl ZWRpCglwdXNobAklZWRpCglwdXNobAkkMAoJcHVzaGwJJWVzaQoJY2FsbAlfX2xpYmNfbmFub3Ns ZWVwCglhZGRsCSQxNiwgJWVzcAoJdGVzdGwJJWVheCwgJWVheAoJam5lCS5MMTIxCi5MMTE2OgoJ cHVzaGwJJWVjeAoJcHVzaGwJJDAKCWxlYWwJMTg0KCVlc3ApLCAlZXNpCglwdXNobAklZXNpCglw dXNobAkkMgoJY2FsbAlzaWdwcm9jbWFzawoJYWRkbAkkMTYsICVlc3AKCXhvcmwJJWVheCwgJWVh eAoJam1wCS5MMTIyCgkucDJhbGlnbiA0LCw3Ci5MMTI0OgoJbGVhbAkxMDAwMDAwMDAwKCVlZHgp LCAlZWRpCglsZWFsCS0xKCVlY3gpLCAlZWJwCgltb3ZsCSVlZGksIDQoJWVzcCkKCW1vdmwJJWVi cCwgKCVlc3ApCglqbXAJLkwxMTgKLkxmZTY6Cgkuc2l6ZQlfX3B0aHJlYWRfdGltZWRzdXNwZW5k X25ldywuTGZlNi1fX3B0aHJlYWRfdGltZWRzdXNwZW5kX25ldwoJLnNlY3Rpb24JLnJvZGF0YQoJ LmFsaWduIDQKCS50eXBlCV9fcHRocmVhZF9yZXF1aXJlX3dyYXBwZXJzLEBvYmplY3QKCS5zaXpl CV9fcHRocmVhZF9yZXF1aXJlX3dyYXBwZXJzLDQKX19wdGhyZWFkX3JlcXVpcmVfd3JhcHBlcnM6 CgkubG9uZwlfX3B0aHJlYWRfcHJvdmlkZV93cmFwcGVycwoJLmFsaWduIDQKCS50eXBlCV9fcHRo cmVhZF9yZXF1aXJlX2xvY2tmaWxlLEBvYmplY3QKCS5zaXplCV9fcHRocmVhZF9yZXF1aXJlX2xv Y2tmaWxlLDQKX19wdGhyZWFkX3JlcXVpcmVfbG9ja2ZpbGU6CgkubG9uZwlfX3B0aHJlYWRfcHJv dmlkZV9sb2NrZmlsZQoJLnRleHQKCS5hbGlnbiAyCgkucDJhbGlnbiA0LCwxNQouZ2xvYmwgX19s aWJjX2N1cnJlbnRfc2lncnRtaW4KCS50eXBlCV9fbGliY19jdXJyZW50X3NpZ3J0bWluLEBmdW5j dGlvbgpfX2xpYmNfY3VycmVudF9zaWdydG1pbjoKCW1vdmwJcnRzaWdzX2luaXRpYWxpemVkLCAl ZWF4Cgl0ZXN0bAklZWF4LCAlZWF4CglqZQkuTDQ4NAouTDQ4MjoKCW1vdmwJY3VycmVudF9ydG1p biwgJWVheAoJcmV0Ci5MNDg0OgoJbW92bAkkMzUsIGN1cnJlbnRfcnRtaW4KCW1vdmwJJDYzLCBj dXJyZW50X3J0bWF4Cgltb3ZsCSQxLCBydHNpZ3NfaW5pdGlhbGl6ZWQKCWptcAkuTDQ4MgouTGZl NzoKCS5zaXplCV9fbGliY19jdXJyZW50X3NpZ3J0bWluLC5MZmU3LV9fbGliY19jdXJyZW50X3Np Z3J0bWluCgkuYWxpZ24gMgoJLnAyYWxpZ24gNCwsMTUKLmdsb2JsIF9fbGliY19jdXJyZW50X3Np Z3J0bWF4CgkudHlwZQlfX2xpYmNfY3VycmVudF9zaWdydG1heCxAZnVuY3Rpb24KX19saWJjX2N1 cnJlbnRfc2lncnRtYXg6Cgltb3ZsCXJ0c2lnc19pbml0aWFsaXplZCwgJWVheAoJdGVzdGwJJWVh eCwgJWVheAoJamUJLkw0ODgKLkw0ODY6Cgltb3ZsCWN1cnJlbnRfcnRtYXgsICVlYXgKCXJldAou TDQ4ODoKCW1vdmwJJDM1LCBjdXJyZW50X3J0bWluCgltb3ZsCSQ2MywgY3VycmVudF9ydG1heAoJ bW92bAkkMSwgcnRzaWdzX2luaXRpYWxpemVkCglqbXAJLkw0ODYKLkxmZTg6Cgkuc2l6ZQlfX2xp YmNfY3VycmVudF9zaWdydG1heCwuTGZlOC1fX2xpYmNfY3VycmVudF9zaWdydG1heAoJLmFsaWdu IDIKCS5wMmFsaWduIDQsLDE1Ci5nbG9ibCBfX2xpYmNfYWxsb2NhdGVfcnRzaWcKCS50eXBlCV9f bGliY19hbGxvY2F0ZV9ydHNpZyxAZnVuY3Rpb24KX19saWJjX2FsbG9jYXRlX3J0c2lnOgoJbW92 bAlydHNpZ3NfaW5pdGlhbGl6ZWQsICVlYXgKCXRlc3RsCSVlYXgsICVlYXgKCWplCS5MNDk2Ci5M NDkwOgoJbW92bAljdXJyZW50X3J0bWluLCAlZWF4CgljbXBsCSQtMSwgJWVheAoJamUJLkw0OTMK CW1vdmwJY3VycmVudF9ydG1heCwgJWVkeAoJY21wbAklZWR4LCAlZWF4CglqZwkuTDQ5MwoJbW92 bAk0KCVlc3ApLCAlZWN4Cgl0ZXN0bAklZWN4LCAlZWN4CglqZQkuTDQ5NAoJbGVhbAkxKCVlYXgp LCAlZWN4Cgltb3ZsCSVlYXgsICVlZHgKCW1vdmwJJWVjeCwgY3VycmVudF9ydG1pbgouTDQ5NToK CW1vdmwJJWVkeCwgJWVheAoJcmV0CgkucDJhbGlnbiA0LCw3Ci5MNDk0OgoJbGVhbAktMSglZWR4 KSwgJWVjeAoJbW92bAklZWN4LCBjdXJyZW50X3J0bWF4CglqbXAJLkw0OTUKCS5wMmFsaWduIDQs LDcKLkw0OTM6CglvcmwJJC0xLCAlZWF4CglyZXQKLkw0OTY6Cgltb3ZsCSQzNSwgY3VycmVudF9y dG1pbgoJbW92bAkkNjMsIGN1cnJlbnRfcnRtYXgKCW1vdmwJJDEsIHJ0c2lnc19pbml0aWFsaXpl ZAoJam1wCS5MNDkwCi5MZmU5OgoJLnNpemUJX19saWJjX2FsbG9jYXRlX3J0c2lnLC5MZmU5LV9f bGliY19hbGxvY2F0ZV9ydHNpZwoJLmFsaWduIDIKCS5wMmFsaWduIDQsLDE1Cgkud2VhawlfX3B0 aHJlYWRfaW5pdGlhbGl6ZV9taW5pbWFsCgkudHlwZQlfX3B0aHJlYWRfaW5pdGlhbGl6ZV9taW5p bWFsLEBmdW5jdGlvbgpfX3B0aHJlYWRfaW5pdGlhbGl6ZV9taW5pbWFsOgoJcmV0Ci5MZmUxMDoK CS5zaXplCV9fcHRocmVhZF9pbml0aWFsaXplX21pbmltYWwsLkxmZTEwLV9fcHRocmVhZF9pbml0 aWFsaXplX21pbmltYWwKCS5hbGlnbiAyCgkucDJhbGlnbiA0LCwxNQouZ2xvYmwgX19wdGhyZWFk X2luaXRfbWF4X3N0YWNrc2l6ZQoJLnR5cGUJX19wdGhyZWFkX2luaXRfbWF4X3N0YWNrc2l6ZSxA ZnVuY3Rpb24KX19wdGhyZWFkX2luaXRfbWF4X3N0YWNrc2l6ZToKCXB1c2hsCSVlc2kKCXB1c2hs CSVlYngKCW1vdmwJJDIwOTcxNTIsICVlYngKCXN1YmwJJDI4LCAlZXNwCglsZWFsCTE2KCVlc3Ap LCAlZXNpCglwdXNobAklZXNpCglwdXNobAkkMwoJY2FsbAlnZXRybGltaXQKCWNhbGwJX19nZXRw YWdlc2l6ZQoJYWRkbAkkMTYsICVlc3AKCXN1YmwJJWVheCwgJWVieAoJY21wbAklZWJ4LCA4KCVl c3ApCglqYQkuTDUxNgouTDUxNToKCW1vdmwJJWVieCwgX19wdGhyZWFkX21heF9zdGFja3NpemUK CWFkZGwJJDIwLCAlZXNwCglwb3BsCSVlYngKCXBvcGwJJWVzaQoJcmV0CgkucDJhbGlnbiA0LCw3 Ci5MNTE2OgoJbW92bAklZWJ4LCA4KCVlc3ApCglwdXNobAklZWF4CglwdXNobAklZWF4CglwdXNo bAklZXNpCglwdXNobAkkMwoJY2FsbAlzZXRybGltaXQKCWFkZGwJJDE2LCAlZXNwCglqbXAJLkw1 MTUKLkxmZTExOgoJLnNpemUJX19wdGhyZWFkX2luaXRfbWF4X3N0YWNrc2l6ZSwuTGZlMTEtX19w dGhyZWFkX2luaXRfbWF4X3N0YWNrc2l6ZQoJLmFsaWduIDIKCS5wMmFsaWduIDQsLDE1Cgkud2Vh awlfX3B0aHJlYWRfaW5pdGlhbGl6ZQoJLnR5cGUJX19wdGhyZWFkX2luaXRpYWxpemUsQGZ1bmN0 aW9uCl9fcHRocmVhZF9pbml0aWFsaXplOgoJam1wCXB0aHJlYWRfaW5pdGlhbGl6ZQouTGZlMTI6 Cgkuc2l6ZQlfX3B0aHJlYWRfaW5pdGlhbGl6ZSwuTGZlMTItX19wdGhyZWFkX2luaXRpYWxpemUK CS5hbGlnbiAyCgkucDJhbGlnbiA0LCwxNQouZ2xvYmwgcHRocmVhZF9zZWxmCgkudHlwZQlwdGhy ZWFkX3NlbGYsQGZ1bmN0aW9uCnB0aHJlYWRfc2VsZjoKCXB1c2hsCSVlYnAKCXB1c2hsCSVlYXgK CXB1c2hsCSVlYXgKCW1vdmwJJWVicCwgJWVheAoJY21wbAlfX3B0aHJlYWRfaW5pdGlhbF90aHJl YWRfYm9zLCAlZWJwCglqYgkuTDUxOQoJbW92bAkkX19wdGhyZWFkX2luaXRpYWxfdGhyZWFkLCAl ZWF4Ci5MNTIwOgoJbW92bAk4MCglZWF4KSwgJWVheAoJcG9wbAklZWR4Cglwb3BsCSVlY3gKCXBv cGwJJWVicAoJcmV0CgkucDJhbGlnbiA0LCw3Ci5MNTE5OgoJY21wbAlfX3B0aHJlYWRfbWFuYWdl cl90aHJlYWRfYm9zLCAlZWJwCglqYgkuTDUyMgoJY21wbAlfX3B0aHJlYWRfbWFuYWdlcl90aHJl YWRfdG9zLCAlZWJwCglqYWUJLkw1MjIKCW1vdmwJJF9fcHRocmVhZF9tYW5hZ2VyX3RocmVhZCwg JWVheAoJam1wCS5MNTIwCgkucDJhbGlnbiA0LCw3Ci5MNTIyOgoJbW92bAlfX3B0aHJlYWRfbm9u c3RhbmRhcmRfc3RhY2tzLCAlZWR4Cgl0ZXN0bAklZWR4LCAlZWR4CglqZQkuTDUyNAoJY2FsbAlf X3B0aHJlYWRfZmluZF9zZWxmCglqbXAJLkw1MjAKCS5wMmFsaWduIDQsLDcKLkw1MjQ6CglvcmwJ JDIwOTcxNTEsICVlYXgKCXN1YmwJJDEwMjMsICVlYXgKCWptcAkuTDUyMAouTGZlMTM6Cgkuc2l6 ZQlwdGhyZWFkX3NlbGYsLkxmZTEzLXB0aHJlYWRfc2VsZgoJLmFsaWduIDIKCS5wMmFsaWduIDQs LDE1Ci5nbG9ibCBwdGhyZWFkX2VxdWFsCgkudHlwZQlwdGhyZWFkX2VxdWFsLEBmdW5jdGlvbgpw dGhyZWFkX2VxdWFsOgoJbW92bAk4KCVlc3ApLCAlZWF4CgljbXBsCSVlYXgsIDQoJWVzcCkKCXNl dGUJJWFsCglhbmRsCSQyNTUsICVlYXgKCXJldAouTGZlMTQ6Cgkuc2l6ZQlwdGhyZWFkX2VxdWFs LC5MZmUxNC1wdGhyZWFkX2VxdWFsCgkuYWxpZ24gMgoJLnAyYWxpZ24gNCwsMTUKLmdsb2JsIHB0 aHJlYWRfc2V0c2NoZWRwYXJhbQoJLnR5cGUJcHRocmVhZF9zZXRzY2hlZHBhcmFtLEBmdW5jdGlv bgpwdGhyZWFkX3NldHNjaGVkcGFyYW06CglwdXNobAklZWJwCglwdXNobAklZWRpCglwdXNobAkl ZXNpCglwdXNobAklZWJ4CglzdWJsCSQxMiwgJWVzcAoJbW92bAkzMiglZXNwKSwgJWVzaQoJbW92 bAkzNiglZXNwKSwgJWVkaQoJbW92bAklZXNpLCAlZWR4Cgltb3ZsCTQwKCVlc3ApLCAlZWJwCglh bmRsCSQxMDIzLCAlZWR4CglzYWxsCSQ0LCAlZWR4CglsZWFsCV9fcHRocmVhZF9oYW5kbGVzKCVl ZHgpLCAlZWJ4Cgl4b3JsCSVlZHgsICVlZHgKCW1vdmwJJWVieCwgJWVheAoJY2FsbAlfX3B0aHJl YWRfbG9jawoJbW92bAk4KCVlYngpLCAlZWF4Cgl4b3JsCSVlZHgsICVlZHgKCXRlc3RsCSVlYXgs ICVlYXgKCWplCS5MNTMxCgljbXBsCSVlc2ksIDgwKCVlYXgpCglqZQkuTDUzOAouTDUzMToKCW1v dmwJJDEsICVlZHgKLkw1MzI6Cgl0ZXN0bAklZWR4LCAlZWR4CglqbmUJLkw1MzkKCW1vdmwJOCgl ZWJ4KSwgJWVzaQoJcHVzaGwJJWVheAoJcHVzaGwJJWVicAoJcHVzaGwJJWVkaQoJbW92bAk4NCgl ZXNpKSwgJWVheAoJcHVzaGwJJWVheAoJY2FsbAlfX3NjaGVkX3NldHNjaGVkdWxlcgoJYWRkbAkk MTYsICVlc3AKCWluY2wJJWVheAoJamUJLkw1NDAKCXhvcmwJJWVheCwgJWVheAoJdGVzdGwJJWVk aSwgJWVkaQoJamUJLkw1MzUKCW1vdmwJKCVlYnApLCAlZWF4Ci5MNTM1OgoJc3VibAkkMTIsICVl c3AKCW1vdmwJJWVheCwgODgoJWVzaSkKCXB1c2hsCSVlYngKCWNhbGwJX19wdGhyZWFkX3VubG9j awoJbW92bAlfX3B0aHJlYWRfbWFuYWdlcl9yZXF1ZXN0LCAlZWF4CglhZGRsCSQxNiwgJWVzcAoJ dGVzdGwJJWVheCwgJWVheAoJanMJLkw1MzYKCXN1YmwJJDEyLCAlZXNwCgltb3ZsCTg4KCVlc2kp LCAlZWF4CglwdXNobAklZWF4CgljYWxsCV9fcHRocmVhZF9tYW5hZ2VyX2FkanVzdF9wcmlvCglh ZGRsCSQxNiwgJWVzcAouTDUzNjoKCXhvcmwJJWVheCwgJWVheAouTDUyNzoKCWFkZGwJJDEyLCAl ZXNwCglwb3BsCSVlYngKCXBvcGwJJWVzaQoJcG9wbAklZWRpCglwb3BsCSVlYnAKCXJldAouTDU0 MDoKCXN1YmwJJDEyLCAlZXNwCglwdXNobAklZWJ4CgljYWxsCV9fcHRocmVhZF91bmxvY2sKCWNh bGwJX19lcnJub19sb2NhdGlvbgoJbW92bAkoJWVheCksICVlYXgKLkw1Mzc6CglhZGRsCSQxNiwg JWVzcAoJam1wCS5MNTI3Ci5MNTM5OgoJc3VibAkkMTIsICVlc3AKCXB1c2hsCSVlYngKCWNhbGwJ X19wdGhyZWFkX3VubG9jawoJbW92bAkkMywgJWVheAoJam1wCS5MNTM3CgkucDJhbGlnbiA0LCw3 Ci5MNTM4OgoJY21wYgkkMCwgMTA4KCVlYXgpCglqZQkuTDUzMgoJam1wCS5MNTMxCi5MZmUxNToK CS5zaXplCXB0aHJlYWRfc2V0c2NoZWRwYXJhbSwuTGZlMTUtcHRocmVhZF9zZXRzY2hlZHBhcmFt CgkuYWxpZ24gMgoJLnAyYWxpZ24gNCwsMTUKLmdsb2JsIHB0aHJlYWRfZ2V0c2NoZWRwYXJhbQoJ LnR5cGUJcHRocmVhZF9nZXRzY2hlZHBhcmFtLEBmdW5jdGlvbgpwdGhyZWFkX2dldHNjaGVkcGFy YW06CglwdXNobAklZXNpCglwdXNobAklZWJ4CglwdXNobAklZWF4Cgltb3ZsCTE2KCVlc3ApLCAl ZXNpCgltb3ZsCSVlc2ksICVlZHgKCWFuZGwJJDEwMjMsICVlZHgKCXNhbGwJJDQsICVlZHgKCWxl YWwJX19wdGhyZWFkX2hhbmRsZXMoJWVkeCksICVlYngKCXhvcmwJJWVkeCwgJWVkeAoJbW92bAkl ZWJ4LCAlZWF4CgljYWxsCV9fcHRocmVhZF9sb2NrCgltb3ZsCTgoJWVieCksICVlYXgKCXhvcmwJ JWVkeCwgJWVkeAoJdGVzdGwJJWVheCwgJWVheAoJamUJLkw1NDUKCWNtcGwJJWVzaSwgODAoJWVh eCkKCWplCS5MNTUwCi5MNTQ1OgoJbW92bAkkMSwgJWVkeAouTDU0NjoKCXRlc3RsCSVlZHgsICVl ZHgKCWpuZQkuTDU1MQoJc3VibAkkMTIsICVlc3AKCW1vdmwJOCglZWJ4KSwgJWVheAoJbW92bAk4 NCglZWF4KSwgJWVzaQoJcHVzaGwJJWVieAoJY2FsbAlfX3B0aHJlYWRfdW5sb2NrCgltb3ZsCSVl c2ksICglZXNwKQoJY2FsbAlfX3NjaGVkX2dldHNjaGVkdWxlcgoJYWRkbAkkMTYsICVlc3AKCW1v dmwJJWVheCwgJWVieAoJY21wbAkkLTEsICVlYXgKCWplCS5MNTQ5CglwdXNobAklZWF4CglwdXNo bAklZWF4Cgltb3ZsCTMyKCVlc3ApLCAlZWF4CglwdXNobAklZWF4CglwdXNobAklZXNpCgljYWxs CV9fc2NoZWRfZ2V0cGFyYW0KCWFkZGwJJDE2LCAlZXNwCglpbmNsCSVlYXgKCWplCS5MNTQ5Cglt b3ZsCTIwKCVlc3ApLCAlZWF4Cgltb3ZsCSVlYngsICglZWF4KQoJeG9ybAklZWF4LCAlZWF4Ci5M NTQxOgoJcG9wbAklZWR4Cglwb3BsCSVlYngKCXBvcGwJJWVzaQoJcmV0CgkucDJhbGlnbiA0LCw3 Ci5MNTQ5OgoJY2FsbAlfX2Vycm5vX2xvY2F0aW9uCgltb3ZsCSglZWF4KSwgJWVheAoJam1wCS5M NTQxCi5MNTUxOgoJc3VibAkkMTIsICVlc3AKCXB1c2hsCSVlYngKCWNhbGwJX19wdGhyZWFkX3Vu bG9jawoJYWRkbAkkMTYsICVlc3AKCW1vdmwJJDMsICVlYXgKCWptcAkuTDU0MQoJLnAyYWxpZ24g NCwsNwouTDU1MDoKCWNtcGIJJDAsIDEwOCglZWF4KQoJamUJLkw1NDYKCWptcAkuTDU0NQouTGZl MTY6Cgkuc2l6ZQlwdGhyZWFkX2dldHNjaGVkcGFyYW0sLkxmZTE2LXB0aHJlYWRfZ2V0c2NoZWRw YXJhbQoJLmFsaWduIDIKCS5wMmFsaWduIDQsLDE1Ci5nbG9ibCBfX3B0aHJlYWRfeWllbGQKCS50 eXBlCV9fcHRocmVhZF95aWVsZCxAZnVuY3Rpb24KX19wdGhyZWFkX3lpZWxkOgoJam1wCXNjaGVk X3lpZWxkCi5MZmUxNzoKCS5zaXplCV9fcHRocmVhZF95aWVsZCwuTGZlMTctX19wdGhyZWFkX3lp ZWxkCgkuYWxpZ24gMgoJLnAyYWxpZ24gNCwsMTUKLmdsb2JsIF9fcHRocmVhZF9yZXNldF9tYWlu X3RocmVhZAoJLnR5cGUJX19wdGhyZWFkX3Jlc2V0X21haW5fdGhyZWFkLEBmdW5jdGlvbgpfX3B0 aHJlYWRfcmVzZXRfbWFpbl90aHJlYWQ6CglwdXNobAklZWJwCgltb3ZsCSVlYnAsICVlYXgKCXB1 c2hsCSVlY3gKCXB1c2hsCSVlY3gKCWNtcGwJX19wdGhyZWFkX2luaXRpYWxfdGhyZWFkX2Jvcywg JWVicAoJamIJLkw1ODAKCW1vdmwJJF9fcHRocmVhZF9pbml0aWFsX3RocmVhZCwgJWVicAouTDU4 MToKCWNtcGwJJC0xLCBfX3B0aHJlYWRfbWFuYWdlcl9yZXF1ZXN0CglqZQkuTDU4NwoJc3VibAkk MTIsICVlc3AKCW1vdmwJX19wdGhyZWFkX21hbmFnZXJfdGhyZWFkX2JvcywgJWVheAoJcHVzaGwJ JWVheAoJY2FsbAlmcmVlCglwb3BsCSVlYXgKCW1vdmwJX19wdGhyZWFkX21hbmFnZXJfcmVxdWVz dCwgJWVheAoJcHVzaGwJJWVheAoJbW92bAkkMCwgX19wdGhyZWFkX21hbmFnZXJfdGhyZWFkX3Rv cwoJbW92bAkkMCwgX19wdGhyZWFkX21hbmFnZXJfdGhyZWFkX2JvcwoJY2FsbAlfX2xpYmNfY2xv c2UKCXBvcGwJJWVheAoJbW92bAlfX3B0aHJlYWRfbWFuYWdlcl9yZWFkZXIsICVlYXgKCXB1c2hs CSVlYXgKCWNhbGwJX19saWJjX2Nsb3NlCglhZGRsCSQxNiwgJWVzcAoJbW92bAkkLTEsIF9fcHRo cmVhZF9tYW5hZ2VyX3JlYWRlcgoJbW92bAkkLTEsIF9fcHRocmVhZF9tYW5hZ2VyX3JlcXVlc3QK Lkw1ODc6CgljYWxsCV9fZ2V0cGlkCgltb3ZsCSVlYnAsIF9fcHRocmVhZF9tYWluX3RocmVhZAoJ bW92bAkkX2Vycm5vLCAxMzIoJWVicCkKCW1vdmwJJWVheCwgODQoJWVicCkKCW1vdmwJJWVicCwg NjQoJWVicCkKCW1vdmwJJWVicCwgNjgoJWVicCkKCW1vdmwJJF9oX2Vycm5vLCAxNDAoJWVicCkK CW1vdmwJJF9yZXMsIDUwNCglZWJwKQoJcHVzaGwJJWVicAoJcHVzaGwJJWVicAoJbGVhbAk4KCVl c3ApLCAlZWJwCglwdXNobAklZWJwCglwdXNobAkkMwoJY2FsbAlnZXRybGltaXQKCWFkZGwJJDE2 LCAlZXNwCgl0ZXN0bAklZWF4LCAlZWF4CglqbmUJLkw1NzkKCW1vdmwJNCglZXNwKSwgJWVheAoJ Y21wbAklZWF4LCAoJWVzcCkKCWplCS5MNTc5Cgltb3ZsCSVlYXgsICglZXNwKQoJcHVzaGwJJWVj eAoJcHVzaGwJJWVjeAoJcHVzaGwJJWVicAoJcHVzaGwJJDMKCWNhbGwJc2V0cmxpbWl0CglhZGRs CSQxNiwgJWVzcAouTDU3OToKCXBvcGwJJWVheAoJcG9wbAklZWR4Cglwb3BsCSVlYnAKCXJldAoJ LnAyYWxpZ24gNCwsNwouTDU4MDoKCWNtcGwJX19wdGhyZWFkX21hbmFnZXJfdGhyZWFkX2Jvcywg JWVicAoJamIJLkw1ODMKCWNtcGwJX19wdGhyZWFkX21hbmFnZXJfdGhyZWFkX3RvcywgJWVicAoJ amFlCS5MNTgzCgltb3ZsCSRfX3B0aHJlYWRfbWFuYWdlcl90aHJlYWQsICVlYnAKCWptcAkuTDU4 MQoJLnAyYWxpZ24gNCwsNwouTDU4MzoKCW1vdmwJX19wdGhyZWFkX25vbnN0YW5kYXJkX3N0YWNr cywgJWVjeAoJdGVzdGwJJWVjeCwgJWVjeAoJamUJLkw1ODUKCWNhbGwJX19wdGhyZWFkX2ZpbmRf c2VsZgoJbW92bAklZWF4LCAlZWJwCglqbXAJLkw1ODEKCS5wMmFsaWduIDQsLDcKLkw1ODU6Cglv cmwJJDIwOTcxNTEsICVlYXgKCWxlYWwJLTEwMjMoJWVheCksICVlYnAKCWptcAkuTDU4MQouTGZl MTg6Cgkuc2l6ZQlfX3B0aHJlYWRfcmVzZXRfbWFpbl90aHJlYWQsLkxmZTE4LV9fcHRocmVhZF9y ZXNldF9tYWluX3RocmVhZAoJLmFsaWduIDIKCS5wMmFsaWduIDQsLDE1Ci5nbG9ibCBfX3B0aHJl YWRfa2lsbF9vdGhlcl90aHJlYWRzX25wCgkudHlwZQlfX3B0aHJlYWRfa2lsbF9vdGhlcl90aHJl YWRzX25wLEBmdW5jdGlvbgpfX3B0aHJlYWRfa2lsbF9vdGhlcl90aHJlYWRzX25wOgoJcHVzaGwJ JWVieAoJc3VibAkkMTYwLCAlZXNwCglwdXNobAkkMAoJcHVzaGwJJDAKCWNhbGwJcHRocmVhZF9v bmV4aXRfcHJvY2VzcwoJY2FsbAlfX3B0aHJlYWRfcmVzZXRfbWFpbl90aHJlYWQKCXBvcGwJJWVh eAoJbGVhbAkxNiglZXNwKSwgJWVkeAoJbGVhbAkxMiglZXNwKSwgJWVieAoJcHVzaGwJJWVkeAoJ Y2FsbAlzaWdlbXB0eXNldAoJbW92bAlfX3B0aHJlYWRfc2lnX3Jlc3RhcnQsICVlYXgKCW1vdmwJ JDAsIDE0OCglZXNwKQoJbW92bAkkMCwgMTYoJWVzcCkKCWFkZGwJJDEyLCAlZXNwCglwdXNobAkk MAoJcHVzaGwJJWVieAoJcHVzaGwJJWVheAoJY2FsbAlfX2xpYmNfc2lnYWN0aW9uCgltb3ZsCV9f cHRocmVhZF9zaWdfY2FuY2VsLCAlZWF4CglhZGRsCSQxMiwgJWVzcAoJcHVzaGwJJDAKCXB1c2hs CSVlYngKCXB1c2hsCSVlYXgKCWNhbGwJX19saWJjX3NpZ2FjdGlvbgoJYWRkbAkkMTYsICVlc3AK CW1vdmwJX19wdGhyZWFkX3NpZ19kZWJ1ZywgJWVheAoJdGVzdGwJJWVheCwgJWVheAoJamxlCS5M NTg5CglwdXNobAklZWR4CglwdXNobAkkMAoJcHVzaGwJJWVieAoJcHVzaGwJJWVheAoJY2FsbAlf X2xpYmNfc2lnYWN0aW9uCglhZGRsCSQxNiwgJWVzcAouTDU4OToKCWFkZGwJJDE1MiwgJWVzcAoJ cG9wbAklZWJ4CglyZXQKLkxmZTE5OgoJLnNpemUJX19wdGhyZWFkX2tpbGxfb3RoZXJfdGhyZWFk c19ucCwuTGZlMTktX19wdGhyZWFkX2tpbGxfb3RoZXJfdGhyZWFkc19ucAoJLmFsaWduIDIKCS5w MmFsaWduIDQsLDE1Ci5nbG9ibCBfX3B0aHJlYWRfc2V0Y29uY3VycmVuY3kKCS50eXBlCV9fcHRo cmVhZF9zZXRjb25jdXJyZW5jeSxAZnVuY3Rpb24KX19wdGhyZWFkX3NldGNvbmN1cnJlbmN5OgoJ bW92bAk0KCVlc3ApLCAlZWF4Cgltb3ZsCSVlYXgsIGN1cnJlbnRfbGV2ZWwKCXhvcmwJJWVheCwg JWVheAoJcmV0Ci5MZmUyMDoKCS5zaXplCV9fcHRocmVhZF9zZXRjb25jdXJyZW5jeSwuTGZlMjAt X19wdGhyZWFkX3NldGNvbmN1cnJlbmN5CgkuYWxpZ24gMgoJLnAyYWxpZ24gNCwsMTUKLmdsb2Js IF9fcHRocmVhZF9nZXRjb25jdXJyZW5jeQoJLnR5cGUJX19wdGhyZWFkX2dldGNvbmN1cnJlbmN5 LEBmdW5jdGlvbgpfX3B0aHJlYWRfZ2V0Y29uY3VycmVuY3k6Cgltb3ZsCWN1cnJlbnRfbGV2ZWws ICVlYXgKCXJldAouTGZlMjE6Cgkuc2l6ZQlfX3B0aHJlYWRfZ2V0Y29uY3VycmVuY3ksLkxmZTIx LV9fcHRocmVhZF9nZXRjb25jdXJyZW5jeQoJLmFsaWduIDIKCS5wMmFsaWduIDQsLDE1Ci5nbG9i bCBfX3B0aHJlYWRfcmVzdGFydF9uZXcKCS50eXBlCV9fcHRocmVhZF9yZXN0YXJ0X25ldyxAZnVu Y3Rpb24KX19wdGhyZWFkX3Jlc3RhcnRfbmV3OgoJc3VibAkkMjAsICVlc3AKCW1vdmwJX19wdGhy ZWFkX3NpZ19yZXN0YXJ0LCAlZWF4CglwdXNobAklZWF4Cgltb3ZsCTI4KCVlc3ApLCAlZWF4Cglt b3ZsCTg0KCVlYXgpLCAlZWF4CglwdXNobAklZWF4CgljYWxsCWtpbGwKCWFkZGwJJDI4LCAlZXNw CglyZXQKLkxmZTIyOgoJLnNpemUJX19wdGhyZWFkX3Jlc3RhcnRfbmV3LC5MZmUyMi1fX3B0aHJl YWRfcmVzdGFydF9uZXcKCS5jb21tCV9fcHRocmVhZF9pbml0aWFsX3RocmVhZF9ib3MsNCw0Cgku Y29tbQlfX3B0aHJlYWRfbWFuYWdlcl9yZWFkZXIsNCw0CgkuY29tbQlfX3B0aHJlYWRfbWFuYWdl cl90aHJlYWRfYm9zLDQsNAoJLmNvbW0JX19wdGhyZWFkX21hbmFnZXJfdGhyZWFkX3Rvcyw0LDQK CS5jb21tCV9fcHRocmVhZF9leGl0X3JlcXVlc3RlZCw0LDQKCS5jb21tCV9fcHRocmVhZF9leGl0 X2NvZGUsNCw0CgkuY29tbQlfX3B0aHJlYWRfc21wX2tlcm5lbCw0LDQKCS5jb21tCV9fcHRocmVh ZF9tYXhfc3RhY2tzaXplLDQsNAoJLmFsaWduIDIKCS5wMmFsaWduIDQsLDE1CgkudHlwZQlwdGhy ZWFkX29uZXhpdF9wcm9jZXNzLEBmdW5jdGlvbgpwdGhyZWFkX29uZXhpdF9wcm9jZXNzOgoJcHVz aGwJJWVicAoJcHVzaGwJJWVieAoJc3VibAkkMTY0LCAlZXNwCgltb3ZsCV9fcHRocmVhZF9tYW5h Z2VyX3JlcXVlc3QsICVlYXgKCXRlc3RsCSVlYXgsICVlYXgKCWpzCS5MNTUzCgltb3ZsCSVlYnAs ICVlYXgKCWNtcGwJX19wdGhyZWFkX2luaXRpYWxfdGhyZWFkX2JvcywgJWVicAoJamIJLkw1NTUK CW1vdmwJJF9fcHRocmVhZF9pbml0aWFsX3RocmVhZCwgJWVieAouTDU1NjoKCW1vdmwJMTc2KCVl c3ApLCAlZWF4Cgltb3ZsCSVlYngsICglZXNwKQoJbW92bAkkMiwgNCglZXNwKQoJbW92bAklZWF4 LCA4KCVlc3ApCgltb3ZsCSVlc3AsICVlYnAKCS5wMmFsaWduIDQsLDcKLkw1NjI6Cgltb3ZsCV9f cHRocmVhZF9tYW5hZ2VyX3JlcXVlc3QsICVlYXgKCXB1c2hsCSVlY3gKCXB1c2hsCSQxNDgKCXB1 c2hsCSVlYnAKCXB1c2hsCSVlYXgKCWNhbGwJX19saWJjX3dyaXRlCglhZGRsCSQxNiwgJWVzcAoJ aW5jbAklZWF4CglqbmUJLkw1NjMKCWNhbGwJX19lcnJub19sb2NhdGlvbgoJY21wbAkkNCwgKCVl YXgpCglqZQkuTDU2MgouTDU2MzoKCXN1YmwJJDEyLCAlZXNwCglwdXNobAklZWJ4CgljYWxsCV9f cHRocmVhZF93YWl0X2Zvcl9yZXN0YXJ0X3NpZ25hbAoJYWRkbAkkMTYsICVlc3AKCWNtcGwJX19w dGhyZWFkX21haW5fdGhyZWFkLCAlZWJ4CglqZQkuTDU5NAouTDU1MzoKCWFkZGwJJDE2NCwgJWVz cAoJcG9wbAklZWJ4Cglwb3BsCSVlYnAKCXJldAouTDU5NDoKCXB1c2hsCSVlYXgKCW1vdmwJX19w dGhyZWFkX21hbmFnZXJfdGhyZWFkKzg0LCAlZWF4CglwdXNobAkkLTIxNDc0ODM2NDgKCXB1c2hs CSQwCglwdXNobAklZWF4CgljYWxsCXdhaXRwaWQKCWFkZGwJJDE2LCAlZXNwCgltb3ZsCSQwLCBf X3B0aHJlYWRfbWFuYWdlcl90aHJlYWRfdG9zCgltb3ZsCSQwLCBfX3B0aHJlYWRfbWFuYWdlcl90 aHJlYWRfYm9zCglqbXAJLkw1NTMKLkw1NTU6CgljbXBsCV9fcHRocmVhZF9tYW5hZ2VyX3RocmVh ZF9ib3MsICVlYnAKCWpiCS5MNTU4CgljbXBsCV9fcHRocmVhZF9tYW5hZ2VyX3RocmVhZF90b3Ms ICVlYnAKCWphZQkuTDU1OAoJbW92bAkkX19wdGhyZWFkX21hbmFnZXJfdGhyZWFkLCAlZWJ4Cglq bXAJLkw1NTYKLkw1NTg6Cgltb3ZsCV9fcHRocmVhZF9ub25zdGFuZGFyZF9zdGFja3MsICVlZHgK CXRlc3RsCSVlZHgsICVlZHgKCWplCS5MNTYwCgljYWxsCV9fcHRocmVhZF9maW5kX3NlbGYKCW1v dmwJJWVheCwgJWVieAoJam1wCS5MNTU2Ci5MNTYwOgoJb3JsCSQyMDk3MTUxLCAlZWF4CglsZWFs CS0xMDIzKCVlYXgpLCAlZWJ4CglqbXAJLkw1NTYKLkxmZTIzOgoJLnNpemUJcHRocmVhZF9vbmV4 aXRfcHJvY2VzcywuTGZlMjMtcHRocmVhZF9vbmV4aXRfcHJvY2VzcwoJLmxvY2FsCWN1cnJlbnRf cnRtaW4KCS5jb21tCWN1cnJlbnRfcnRtaW4sNCw0CgkubG9jYWwJY3VycmVudF9ydG1heAoJLmNv bW0JY3VycmVudF9ydG1heCw0LDQKCS5sb2NhbAlydHNpZ3NfaW5pdGlhbGl6ZWQKCS5jb21tCXJ0 c2lnc19pbml0aWFsaXplZCw0LDQKCS5zZWN0aW9uCS5yb2RhdGEuc3RyMS4xLCJhTVMiLEBwcm9n Yml0cywxCi5MQzE6Cgkuc3RyaW5nCSJTTVAiCi5MQzA6Cgkuc3RyaW5nCSIvcHJvYy9zeXMva2Vy bmVsL3ZlcnNpb24iCgkudGV4dAoJLmFsaWduIDIKCS5wMmFsaWduIDQsLDE1CgkudHlwZQlwdGhy ZWFkX2luaXRpYWxpemUsQGZ1bmN0aW9uCnB0aHJlYWRfaW5pdGlhbGl6ZToKCXB1c2hsCSVlYnAK CXB1c2hsCSVlZGkKCXB1c2hsCSVlc2kKCXB1c2hsCSVlYngKCXN1YmwJJDgxMiwgJWVzcAoJbW92 bAlfX3B0aHJlYWRfaW5pdGlhbF90aHJlYWRfYm9zLCAlZWF4Cgl0ZXN0bAklZWF4LCAlZWF4Cglq ZQkuTDU5NQouTDE6CglhZGRsCSQ4MTIsICVlc3AKCXBvcGwJJWVieAoJcG9wbAklZXNpCglwb3Bs CSVlZGkKCXBvcGwJJWVicAoJcmV0CgkucDJhbGlnbiA0LCw3Ci5MNTk1OgojQVBQCglwdXNoZmw7 IHBvcGwgJWVieAojTk9fQVBQCgltb3ZsCSVlYngsICVlc2kKCXhvcmwJJDI2MjE0NCwgJWVzaQoj QVBQCglwdXNobCAlZXNpOyBwb3BmbAoJcHVzaGZsOyBwb3BsICVlY3gKI05PX0FQUAoJeG9ybAkl ZWJ4LCAlZWN4CglhbmRsCSQyNjIxNDQsICVlY3gKI0FQUAoJcHVzaGwgJWVieDsgcG9wZmwKI05P X0FQUAoJdGVzdGwJJWVjeCwgJWVjeAoJcHVzaGwJJWVheAoJbW92bAkkMjA5NzE1MiwgJWVieAoJ cHVzaGwJJWVheAoJbGVhbAkxNiglZXNwKSwgJWVzaQoJc2V0bmUJJWRsCglwdXNobAklZXNpCglh bmRsCSQyNTUsICVlZHgKCXB1c2hsCSQzCgltb3ZsCSVlZHgsIF9fcHRocmVhZF9oYXNfY2FzCglj YWxsCWdldHJsaW1pdAoJYWRkbAkkMTYsICVlc3AKCWNhbGwJX19nZXRwYWdlc2l6ZQoJc3VibAkl ZWF4LCAlZWJ4CgljbXBsCSVlYngsIDgoJWVzcCkKCWphCS5MNTk2Ci5MODoKCWxlYWwJLTQxOTQz MDQoJWVicCksICVlZGkKCW1vdmwJJWVieCwgX19wdGhyZWFkX21heF9zdGFja3NpemUKCWFuZGwJ JC0yMDk3MTUyLCAlZWRpCgltb3ZsCSVlZGksIF9fcHRocmVhZF9pbml0aWFsX3RocmVhZF9ib3MK CWNhbGwJX19nZXRwaWQKCW1vdmwJJHB0aHJlYWRfaGFuZGxlX3NpZ3Jlc3RhcnQsIDY1NiglZXNw KQoJc3VibAkkMTIsICVlc3AKCW1vdmwJJWVheCwgX19wdGhyZWFkX2luaXRpYWxfdGhyZWFkKzg0 Cgltb3ZsCSRfcmVzLCBfX3B0aHJlYWRfaW5pdGlhbF90aHJlYWQrNTA0CglsZWFsCTY3MiglZXNw KSwgJWVzaQoJbGVhbAk2NjgoJWVzcCksICVlYngKCXB1c2hsCSVlc2kKCW1vdmwJJDM1LCBjdXJy ZW50X3J0bWluCgltb3ZsCSQ2MywgY3VycmVudF9ydG1heAoJbW92bAkkMSwgcnRzaWdzX2luaXRp YWxpemVkCgljYWxsCXNpZ2VtcHR5c2V0Cgltb3ZsCV9fcHRocmVhZF9zaWdfcmVzdGFydCwgJWVh eAoJbW92bAkkMCwgODA0KCVlc3ApCglhZGRsCSQxMiwgJWVzcAoJcHVzaGwJJDAKCXB1c2hsCSVl YngKCXB1c2hsCSVlYXgKCWNhbGwJX19saWJjX3NpZ2FjdGlvbgoJbW92bAlfX3B0aHJlYWRfc2ln X2NhbmNlbCwgJWVheAoJbW92bAkkcHRocmVhZF9oYW5kbGVfc2lnY2FuY2VsLCA2NzIoJWVzcCkK CWFkZGwJJDEyLCAlZXNwCglwdXNobAkkMAoJcHVzaGwJJWVieAoJcHVzaGwJJWVheAoJY2FsbAlf X2xpYmNfc2lnYWN0aW9uCgltb3ZsCV9fcHRocmVhZF9zaWdfZGVidWcsICVlYXgKCWFkZGwJJDE2 LCAlZXNwCgl0ZXN0bAklZWF4LCAlZWF4CglqbGUJLkwxMQoJbW92bAkkcHRocmVhZF9oYW5kbGVf c2lnZGVidWcsIDY1NiglZXNwKQoJc3VibAkkMTIsICVlc3AKCXB1c2hsCSVlc2kKCWNhbGwJc2ln ZW1wdHlzZXQKCW1vdmwJX19wdGhyZWFkX3NpZ19kZWJ1ZywgJWVheAoJYWRkbAkkMTIsICVlc3AK CXB1c2hsCSQwCglwdXNobAklZWJ4CglwdXNobAklZWF4CgljYWxsCV9fbGliY19zaWdhY3Rpb24K CWFkZGwJJDE2LCAlZXNwCi5MMTE6CglzdWJsCSQxMiwgJWVzcAoJbGVhbAk1NDAoJWVzcCksICVl YngKCXB1c2hsCSVlYngKCWNhbGwJc2lnZW1wdHlzZXQKCW1vdmwJX19wdGhyZWFkX3NpZ19yZXN0 YXJ0LCAlZWF4Cglwb3BsCSVlZGkKCXBvcGwJJWVicAoJcHVzaGwJJWVheAoJcHVzaGwJJWVieAoJ Y2FsbAlzaWdhZGRzZXQKCWFkZGwJJDEyLCAlZXNwCglwdXNobAkkMAoJcHVzaGwJJWVieAoJcHVz aGwJJDAKCWNhbGwJc2lncHJvY21hc2sKCXBvcGwJJWVjeAoJcG9wbAklZWJ4CglwdXNobAkkMAoJ cHVzaGwJJHB0aHJlYWRfb25leGl0X3Byb2Nlc3MKCWNhbGwJX19vbl9leGl0Cglwb3BsCSVlYXgK CXBvcGwJJWVkeAoJbW92bAkkNTEyLCAxMiglZXNwKQoJcHVzaGwJJDAKCXB1c2hsCSQwCglsZWFs CTIwKCVlc3ApLCAlZWJwCglwdXNobAklZWJwCglsZWFsCTM2KCVlc3ApLCAlZXNpCglwdXNobAkl ZXNpCglwdXNobAkkMgoJcHVzaGwJJHN5c2N0bF9hcmdzLjAKCWNhbGwJX19zeXNjdGwKCWFkZGwJ JDMyLCAlZXNwCgl0ZXN0bAklZWF4LCAlZWF4CglqcwkuTDU5NwouTDE3OgoJbW92bAkkLkxDMSwg JWVkeAojQVBQCgljbGQKMToKCW1vdmwJJWVkeCwlZWRpCgltb3ZsCSVlc2ksJWVheAoJbW92bAkk MywlZWN4CglyZXBlOyBjbXBzYgoJamUJMmYKCWNtcGIJJDAsLTEoJWVzaSkKCWxlYWwJMSglZWF4 KSwlZXNpCglqbmUJMWIKCXhvcmwJJWVheCwlZWF4CjI6CiNOT19BUFAKCXRlc3RsCSVlYXgsICVl YXgKCXNldG5lCSVkbAoJYW5kbAkkMjU1LCAlZWR4Cgltb3ZsCSVlZHgsIF9fcHRocmVhZF9zbXBf a2VybmVsCglqbXAJLkwxCi5MNTk3OgoJcHVzaGwJJWVheAoJcHVzaGwJJWVheAoJcHVzaGwJJDAK CXB1c2hsCSQuTEMwCgljYWxsCV9fb3BlbgoJYWRkbAkkMTYsICVlc3AKCW1vdmwJJWVheCwgJWVi eAoJY21wbAkkLTEsICVlYXgKCWplCS5MMTQKCXB1c2hsCSVlYXgKCXB1c2hsCSQ1MTIKCXB1c2hs CSVlc2kKCXB1c2hsCSVlYngKCWNhbGwJX19yZWFkCglhZGRsCSQxNiwgJWVzcAoJdGVzdGwJJWVh eCwgJWVheAoJbW92bAklZWF4LCA0KCVlc3ApCglqbmUJLkwxMwouTDE0OgoJbW92YgkkMCwgMTYo JWVzcCkKLkwxMzoKCXN1YmwJJDEyLCAlZXNwCglwdXNobAklZWJ4CgljYWxsCV9fY2xvc2UKCWFk ZGwJJDE2LCAlZXNwCglqbXAJLkwxNwouTDU5NjoKCW1vdmwJJWVieCwgOCglZXNwKQoJcHVzaGwJ JWVheAoJcHVzaGwJJWVheAoJcHVzaGwJJWVzaQoJcHVzaGwJJDMKCWNhbGwJc2V0cmxpbWl0Cglh ZGRsCSQxNiwgJWVzcAoJam1wCS5MOAouTGZlMjQ6Cgkuc2l6ZQlwdGhyZWFkX2luaXRpYWxpemUs LkxmZTI0LXB0aHJlYWRfaW5pdGlhbGl6ZQoJLmxvY2FsCWN1cnJlbnRfbGV2ZWwKCS5jb21tCWN1 cnJlbnRfbGV2ZWwsNCw0CgkuYWxpZ24gMgoJLnAyYWxpZ24gNCwsMTUKCS50eXBlCXB0aHJlYWRf aGFuZGxlX3NpZ3Jlc3RhcnQsQGZ1bmN0aW9uCnB0aHJlYWRfaGFuZGxlX3NpZ3Jlc3RhcnQ6Cglw dXNobAklZWJwCgltb3ZsCSVlYnAsICVlYXgKCXB1c2hsCSVlY3gKCXB1c2hsCSVlY3gKCWNtcGwJ X19wdGhyZWFkX2luaXRpYWxfdGhyZWFkX2JvcywgJWVicAoJamIJLkw1NzAKCW1vdmwJJF9fcHRo cmVhZF9pbml0aWFsX3RocmVhZCwgJWVkeAouTDU3MToKCW1vdmwJMTYoJWVzcCksICVlYXgKCW1v dmwJJWVheCwgOTYoJWVkeCkKCW1vdmwJMTAwKCVlZHgpLCAlZWF4Cgl0ZXN0bAklZWF4LCAlZWF4 CglqbmUJLkw1OTgKCXBvcGwJJWVjeAoJcG9wbAklZWJwCglwb3BsCSVlYnAKCXJldAoJLnAyYWxp Z24gNCwsNwouTDU3MDoKCWNtcGwJX19wdGhyZWFkX21hbmFnZXJfdGhyZWFkX2JvcywgJWVicAoJ amIJLkw1NzMKCWNtcGwJX19wdGhyZWFkX21hbmFnZXJfdGhyZWFkX3RvcywgJWVicAoJamFlCS5M NTczCgltb3ZsCSRfX3B0aHJlYWRfbWFuYWdlcl90aHJlYWQsICVlZHgKCWptcAkuTDU3MQoJLnAy YWxpZ24gNCwsNwouTDU3MzoKCW1vdmwJX19wdGhyZWFkX25vbnN0YW5kYXJkX3N0YWNrcywgJWVj eAoJdGVzdGwJJWVjeCwgJWVjeAoJamUJLkw1NzUKCWNhbGwJX19wdGhyZWFkX2ZpbmRfc2VsZgoJ bW92bAklZWF4LCAlZWR4CglqbXAJLkw1NzEKCS5wMmFsaWduIDQsLDcKLkw1NzU6CglvcmwJJDIw OTcxNTEsICVlYXgKCWxlYWwJLTEwMjMoJWVheCksICVlZHgKCWptcAkuTDU3MQouTDU5ODoKCXB1 c2hsCSVlYXgKCXB1c2hsCSVlYXgKCXB1c2hsCSQxCgltb3ZsCTEwMCglZWR4KSwgJWVheAoJcHVz aGwJJWVheAoJY2FsbAlzaWdsb25nam1wCi5MZmUyNToKCS5zaXplCXB0aHJlYWRfaGFuZGxlX3Np Z3Jlc3RhcnQsLkxmZTI1LXB0aHJlYWRfaGFuZGxlX3NpZ3Jlc3RhcnQKCS5hbGlnbiAyCgkucDJh bGlnbiA0LCwxNQoJLnR5cGUJcHRocmVhZF9oYW5kbGVfc2lnZGVidWcsQGZ1bmN0aW9uCnB0aHJl YWRfaGFuZGxlX3NpZ2RlYnVnOgoJcmV0Ci5MZmUyNjoKCS5zaXplCXB0aHJlYWRfaGFuZGxlX3Np Z2RlYnVnLC5MZmUyNi1wdGhyZWFkX2hhbmRsZV9zaWdkZWJ1ZwoJLmlkZW50CSJHQ0M6IChHTlUp IDMuMiIK --Multipart_Sat__26_Oct_2002_13:24:27_+0000_081c8688--