From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id EA3F21A1E30 for ; Tue, 11 Oct 2016 01:28:17 -0700 (PDT) Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga104.jf.intel.com with ESMTP; 11 Oct 2016 01:28:16 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,476,1473145200"; d="scan'208,217";a="771219266" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by FMSMGA003.fm.intel.com with ESMTP; 11 Oct 2016 01:28:15 -0700 Received: from fmsmsx117.amr.corp.intel.com (10.18.116.17) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.248.2; Tue, 11 Oct 2016 01:28:14 -0700 Received: from shsmsx101.ccr.corp.intel.com (10.239.4.153) by fmsmsx117.amr.corp.intel.com (10.18.116.17) with Microsoft SMTP Server (TLS) id 14.3.248.2; Tue, 11 Oct 2016 01:28:11 -0700 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.101]) by SHSMSX101.ccr.corp.intel.com ([169.254.1.118]) with mapi id 14.03.0248.002; Tue, 11 Oct 2016 16:28:06 +0800 From: "Ni, Ruiyu" To: "Carsey, Jaben" , "Rothman, Michael A" , "Yao, Jiewen" , "Kinney, Michael D" , "'edk2-devel@lists.01.org'" CC: "Tian, Feng" , "Zhang, Chao B" , "Gao, Liming" , "Zeng, Star" Thread-Topic: [PATCH 17/45] MdeModulePkg/CapsuleApp: Add CapsuleApp application. Thread-Index: AQHSGe3EKzbbi+OGYkeIlbtytI+k5KCPOtUAgADHS0CAAE5JAIABGHSAgAA8bgCABOqvAIAAIjoAgAxGXSCAAAX3wA== Date: Tue, 11 Oct 2016 08:28:06 +0000 Message-ID: <734D49CCEBEEF84792F5B80ED585239D58E1822D@SHSMSX104.ccr.corp.intel.com> References: <1474440326-9292-1-git-send-email-jiewen.yao@intel.com> <1474440326-9292-18-git-send-email-jiewen.yao@intel.com> <74D8A39837DF1E4DA445A8C0B3885C503869ADBD@shsmsx102.ccr.corp.intel.com> <734D49CCEBEEF84792F5B80ED585239D58E0E64C@SHSMSX104.ccr.corp.intel.com> <734D49CCEBEEF84792F5B80ED585239D58E0F608@SHSMSX104.ccr.corp.intel.com> <734D49CCEBEEF84792F5B80ED585239D58E181D1@SHSMSX104.ccr.corp.intel.com> In-Reply-To: <734D49CCEBEEF84792F5B80ED585239D58E181D1@SHSMSX104.ccr.corp.intel.com> Accept-Language: en-US, zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 X-Mailman-Approved-At: Tue, 11 Oct 2016 08:21:32 -0700 X-Content-Filtered-By: Mailman/MimeDel 2.1.21 Subject: Re: [PATCH 17/45] MdeModulePkg/CapsuleApp: Add CapsuleApp application. X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Oct 2016 08:28:18 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SmFiZW4sDQpUaGUgcmVhc29uIEkgcHJvcG9zZSB0byBtb3ZlIHRoZSBTaGVsbCBwcm90b2NvbCBk ZWZpbml0aW9ucyB0byBNZGVQa2cgaXMgdGhhdCBhbGwgYXBwbGljYXRpb25zIHRoYXQgd2FudHMg dG8gdXNlIHRoZSBBUkdWIGNhbiB1c2UgdGhlIFNoZWxsUGFyYW1ldGVyIHByb3RvY29sLCB3aXRo b3V0IGRlcGVuZGluZyBvbiBTaGVsbFBrZy4NCg0KVGhhbmtzL1JheQ0KDQpGcm9tOiBOaSwgUnVp eXUNClNlbnQ6IFR1ZXNkYXksIE9jdG9iZXIgMTEsIDIwMTYgNDowOCBQTQ0KVG86IENhcnNleSwg SmFiZW4gPGphYmVuLmNhcnNleUBpbnRlbC5jb20+OyBSb3RobWFuLCBNaWNoYWVsIEEgPG1pY2hh ZWwuYS5yb3RobWFuQGludGVsLmNvbT47IFlhbywgSmlld2VuIDxqaWV3ZW4ueWFvQGludGVsLmNv bT47IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT47IGVkazIt ZGV2ZWxAbGlzdHMuMDEub3JnDQpDYzogVGlhbiwgRmVuZyA8ZmVuZy50aWFuQGludGVsLmNvbT47 IFpoYW5nLCBDaGFvIEIgPGNoYW8uYi56aGFuZ0BpbnRlbC5jb20+OyBHYW8sIExpbWluZyA8bGlt aW5nLmdhb0BpbnRlbC5jb20+OyBaZW5nLCBTdGFyIDxzdGFyLnplbmdAaW50ZWwuY29tPg0KU3Vi amVjdDogUkU6IFtQQVRDSCAxNy80NV0gTWRlTW9kdWxlUGtnL0NhcHN1bGVBcHA6IEFkZCBDYXBz dWxlQXBwIGFwcGxpY2F0aW9uLg0KDQpKYWJlbiwNCkhvdyBhYm91dCBtb3ZpbmcgdGhlIGNvbnRl bnRzIGluIFNoZWxsUGtnXEluY2x1ZGVcUHJvdG9jb2xcIHRvIE1kZVBrZ1xJbmNsdWRlXFByb3Rv Y29sXD8NCkFsbCBpbmR1c3RyeSBzdGFuZGFyZCBwcm90b2NvbHMgYXJlIGRlZmluZWQgaW4gTWRl UGtnLCBleGNlcHQgdGhlIFNoZWxsIHJlbGF0ZWQgcHJvdG9jb2xzLg0KDQpUaGFua3MvUmF5DQoN CkZyb206IENhcnNleSwgSmFiZW4NClNlbnQ6IFR1ZXNkYXksIE9jdG9iZXIgNCwgMjAxNiA0OjM4 IEFNDQpUbzogUm90aG1hbiwgTWljaGFlbCBBIDxtaWNoYWVsLmEucm90aG1hbkBpbnRlbC5jb208 bWFpbHRvOm1pY2hhZWwuYS5yb3RobWFuQGludGVsLmNvbT4+OyBOaSwgUnVpeXUgPHJ1aXl1Lm5p QGludGVsLmNvbTxtYWlsdG86cnVpeXUubmlAaW50ZWwuY29tPj47IFlhbywgSmlld2VuIDxqaWV3 ZW4ueWFvQGludGVsLmNvbTxtYWlsdG86amlld2VuLnlhb0BpbnRlbC5jb20+PjsgS2lubmV5LCBN aWNoYWVsIEQgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPG1haWx0bzptaWNoYWVsLmQua2lu bmV5QGludGVsLmNvbT4+OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZzxtYWlsdG86ZWRrMi1kZXZl bEBsaXN0cy4wMS5vcmc+DQpDYzogVGlhbiwgRmVuZyA8ZmVuZy50aWFuQGludGVsLmNvbTxtYWls dG86ZmVuZy50aWFuQGludGVsLmNvbT4+OyBaaGFuZywgQ2hhbyBCIDxjaGFvLmIuemhhbmdAaW50 ZWwuY29tPG1haWx0bzpjaGFvLmIuemhhbmdAaW50ZWwuY29tPj47IEdhbywgTGltaW5nIDxsaW1p bmcuZ2FvQGludGVsLmNvbTxtYWlsdG86bGltaW5nLmdhb0BpbnRlbC5jb20+PjsgWmVuZywgU3Rh ciA8c3Rhci56ZW5nQGludGVsLmNvbTxtYWlsdG86c3Rhci56ZW5nQGludGVsLmNvbT4+OyBDYXJz ZXksIEphYmVuIDxqYWJlbi5jYXJzZXlAaW50ZWwuY29tPG1haWx0bzpqYWJlbi5jYXJzZXlAaW50 ZWwuY29tPj4NClN1YmplY3Q6IFJFOiBbUEFUQ0ggMTcvNDVdIE1kZU1vZHVsZVBrZy9DYXBzdWxl QXBwOiBBZGQgQ2Fwc3VsZUFwcCBhcHBsaWNhdGlvbi4NCg0KSSBkb27igJl0IHRoaW5rIHRoYXQg aXMgd2hhdCBJIG1lYW50LiAgSXTigJlzIGEgc3RyaW5nIGFuZCBhIGxlbmd0aCwgbm90IGEgc3Ry dWN0dXJlLg0KDQpJIG1lYW4gY2xhcmlmeSB0aGUgZm9sbG93aW5nOg0KDQoxKSAgICAgIElzIHRo ZSBuYW1lIG9mIHRoZSBiaW5hcnkgaXRzZWxmIGluIHRoZSBMb2FkT3B0aW9ucyBzdHJpbmcgYXMg dGhlIGZpcnN0IG9wdGlvbiBvciBub3QgdGhlcmUgYXQgYWxsPw0KDQoyKSAgICAgIFRoZW4gY2xh cmlmeSB0aGF0IGFsbCBQYXJhbWV0ZXJzIGFyZSBzcGFjZSBkZWxpbWl0ZWQuDQoNCkZyb206IFJv dGhtYW4sIE1pY2hhZWwgQQ0KU2VudDogTW9uZGF5LCBPY3RvYmVyIDAzLCAyMDE2IDExOjM2IEFN DQpUbzogQ2Fyc2V5LCBKYWJlbiA8amFiZW4uY2Fyc2V5QGludGVsLmNvbTxtYWlsdG86amFiZW4u Y2Fyc2V5QGludGVsLmNvbT4+OyBOaSwgUnVpeXUgPHJ1aXl1Lm5pQGludGVsLmNvbTxtYWlsdG86 cnVpeXUubmlAaW50ZWwuY29tPj47IFlhbywgSmlld2VuIDxqaWV3ZW4ueWFvQGludGVsLmNvbTxt YWlsdG86amlld2VuLnlhb0BpbnRlbC5jb20+PjsgS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwu ZC5raW5uZXlAaW50ZWwuY29tPG1haWx0bzptaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4+OyBl ZGsyLWRldmVsQGxpc3RzLjAxLm9yZzxtYWlsdG86ZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc+DQpD YzogVGlhbiwgRmVuZyA8ZmVuZy50aWFuQGludGVsLmNvbTxtYWlsdG86ZmVuZy50aWFuQGludGVs LmNvbT4+OyBaaGFuZywgQ2hhbyBCIDxjaGFvLmIuemhhbmdAaW50ZWwuY29tPG1haWx0bzpjaGFv LmIuemhhbmdAaW50ZWwuY29tPj47IEdhbywgTGltaW5nIDxsaW1pbmcuZ2FvQGludGVsLmNvbTxt YWlsdG86bGltaW5nLmdhb0BpbnRlbC5jb20+PjsgWmVuZywgU3RhciA8c3Rhci56ZW5nQGludGVs LmNvbTxtYWlsdG86c3Rhci56ZW5nQGludGVsLmNvbT4+OyBSb3RobWFuLCBNaWNoYWVsIEEgPG1p Y2hhZWwuYS5yb3RobWFuQGludGVsLmNvbTxtYWlsdG86bWljaGFlbC5hLnJvdGhtYW5AaW50ZWwu Y29tPj4NClN1YmplY3Q6IFJFOiBbUEFUQ0ggMTcvNDVdIE1kZU1vZHVsZVBrZy9DYXBzdWxlQXBw OiBBZGQgQ2Fwc3VsZUFwcCBhcHBsaWNhdGlvbi4NCkltcG9ydGFuY2U6IEhpZ2gNCg0KWW91IG1l YW4gdXBkYXRlIHRoZSBMb2FkT3B0aW9ucyByZWZlcmVuY2UgdG8gcmVmZXIgdG8gdGhlIEVGSV9M T0FEX09QVElPTiBzdHJ1Y3R1cmU/IEJlY2F1c2UgdGhhdOKAmXMgaW4gZXNzZW5jZSB3aGF0IGl0 IG1lYW5zLg0KDQpUaGFua3MsDQpNaWtlIFJvdGhtYW4NCijov4jlhYsg572X5pav5pu8IC8g4KSu 4KS+4KSH4KSV4KSyIOCksOCli+CkpeCljeCkruClh+CkqOCljSAvINCc0LjRhdCw0LjQuyDQoNC+ 0YLQvNCw0L0gLyDXntep15Qg16jXldeY157XnykNCteo15XXoteUINei15nXp9eo15kg16nXnCDX l9eq15XXnNeZ150NCg0KRnJvbTogQ2Fyc2V5LCBKYWJlbg0KU2VudDogRnJpZGF5LCBTZXB0ZW1i ZXIgMzAsIDIwMTYgODozMSBBTQ0KVG86IE5pLCBSdWl5dSA8cnVpeXUubmlAaW50ZWwuY29tPG1h aWx0bzpydWl5dS5uaUBpbnRlbC5jb20+PjsgWWFvLCBKaWV3ZW4gPGppZXdlbi55YW9AaW50ZWwu Y29tPG1haWx0bzpqaWV3ZW4ueWFvQGludGVsLmNvbT4+OyBLaW5uZXksIE1pY2hhZWwgRCA8bWlj aGFlbC5kLmtpbm5leUBpbnRlbC5jb208bWFpbHRvOm1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29t Pj47IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnPG1haWx0bzplZGsyLWRldmVsQGxpc3RzLjAxLm9y Zz47IFJvdGhtYW4sIE1pY2hhZWwgQSA8bWljaGFlbC5hLnJvdGhtYW5AaW50ZWwuY29tPG1haWx0 bzptaWNoYWVsLmEucm90aG1hbkBpbnRlbC5jb20+Pg0KQ2M6IFRpYW4sIEZlbmcgPGZlbmcudGlh bkBpbnRlbC5jb208bWFpbHRvOmZlbmcudGlhbkBpbnRlbC5jb20+PjsgWmhhbmcsIENoYW8gQiA8 Y2hhby5iLnpoYW5nQGludGVsLmNvbTxtYWlsdG86Y2hhby5iLnpoYW5nQGludGVsLmNvbT4+OyBH YW8sIExpbWluZyA8bGltaW5nLmdhb0BpbnRlbC5jb208bWFpbHRvOmxpbWluZy5nYW9AaW50ZWwu Y29tPj47IFplbmcsIFN0YXIgPHN0YXIuemVuZ0BpbnRlbC5jb208bWFpbHRvOnN0YXIuemVuZ0Bp bnRlbC5jb20+PjsgQ2Fyc2V5LCBKYWJlbiA8amFiZW4uY2Fyc2V5QGludGVsLmNvbTxtYWlsdG86 amFiZW4uY2Fyc2V5QGludGVsLmNvbT4+DQpTdWJqZWN0OiBSRTogW1BBVENIIDE3LzQ1XSBNZGVN b2R1bGVQa2cvQ2Fwc3VsZUFwcDogQWRkIENhcHN1bGVBcHAgYXBwbGljYXRpb24uDQoNCk1pa2Ug Um90aG1hbiwNCg0KQ2FuIHdlIGdldCBMb2FkT3B0aW9ucyBhbmQgTG9hZE9wdGlvbnNTaXplIGNs YXJpZmllZCBpbiB0aGUgVUVGSSBTcGVjPyAgVGhpcyBzZWVtcyBsaWtlIGEgc2ltcGxlIGNsYXJp ZmljYXRpb24gYW5kIEkgd291bGQgYXJndWUgaXRzIG5lZWRlZC4gIFRoZSBVRUZJIFNoZWxsIGlz IG5vdCB0aGUgb25seSBwcm9kdWNlciBvZiB0aGlzIHByb3RvY29sLiAgQkRTIGxhdW5jaGVzIHRo aW5ncyAobGlrZSB0aGUgVUVGSSBTaGVsbCBpdHNlbGYpIGFuZCB0aGUgc2hlbGwgYWxyZWFkeSBj b25zdW1lcyBpdCBmb3IgaXRzZWxmIChhbmQgaXQgd29ya3MpLiAgSSB0aGluayBpdCBqdXN0IG5l ZWRzIGNsYXJpZmljYXRpb24gc28gcGVvcGxlIGNhbiBkZXBlbmQgb24gdGhlIGN1cnJlbnQgaW1w bGVtZW50YXRpb24gbm90IGNoYW5naW5nLg0KDQotSmFiZW4NCg0KRnJvbTogTmksIFJ1aXl1DQpT ZW50OiBUaHVyc2RheSwgU2VwdGVtYmVyIDI5LCAyMDE2IDk6MTMgUE0NClRvOiBDYXJzZXksIEph YmVuIDxqYWJlbi5jYXJzZXlAaW50ZWwuY29tPG1haWx0bzpqYWJlbi5jYXJzZXlAaW50ZWwuY29t Pj47IFlhbywgSmlld2VuIDxqaWV3ZW4ueWFvQGludGVsLmNvbTxtYWlsdG86amlld2VuLnlhb0Bp bnRlbC5jb20+PjsgS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29t PG1haWx0bzptaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4+OyBlZGsyLWRldmVsQGxpc3RzLjAx Lm9yZzxtYWlsdG86ZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc+DQpDYzogVGlhbiwgRmVuZyA8ZmVu Zy50aWFuQGludGVsLmNvbTxtYWlsdG86ZmVuZy50aWFuQGludGVsLmNvbT4+OyBaaGFuZywgQ2hh byBCIDxjaGFvLmIuemhhbmdAaW50ZWwuY29tPG1haWx0bzpjaGFvLmIuemhhbmdAaW50ZWwuY29t Pj47IEdhbywgTGltaW5nIDxsaW1pbmcuZ2FvQGludGVsLmNvbTxtYWlsdG86bGltaW5nLmdhb0Bp bnRlbC5jb20+PjsgWmVuZywgU3RhciA8c3Rhci56ZW5nQGludGVsLmNvbTxtYWlsdG86c3Rhci56 ZW5nQGludGVsLmNvbT4+DQpTdWJqZWN0OiBSRTogW1BBVENIIDE3LzQ1XSBNZGVNb2R1bGVQa2cv Q2Fwc3VsZUFwcDogQWRkIENhcHN1bGVBcHAgYXBwbGljYXRpb24uDQpJbXBvcnRhbmNlOiBIaWdo DQoNClN1cHBvc2luZyB1c2VyIGlucHV0cyDigJxDYXBzdWxlQXBwLmVmaSBQYXJhbWV0ZXIxIFBh cmFtZXRlcjLigJ0uDQpUaGVyZSBpcyBubyBzcGVjIHRvIGRlZmluZSB3aGF0IHRoZSBMb2FkT3B0 aW9uIHNob3VsZCBlcXVhbCB0by4NCklmIHRoZXJlIGlzIGFub3RoZXIgVUVGSSBTaGVsbCBpbXBs ZW1lbnRhdGlvbiwgaXQgY291bGQgaW50ZXJwcmV0IHRoZSBjb21tYW5kIGxpbmUgdGhlbiBzZXRz IG9ubHkg4oCcUGFyYW1ldGVyMSBQYXJhbWV0ZXIy4oCdIGludG8gTG9hZE9wdGlvbiwgb3Igc2V0 cyDigJxDYXBzdWxlQXBwLmVmaVx0UGFyYW1ldGVyMVx0UGFyYW1ldGVyMuKAnSB0byBMb2FkT3B0 aW9uLCBvciBzZXRzIOKAnFtTaGVsbF1cdENhcHN1bGVBcHAuZWZpXHRQYXJhbWV0ZXIxXHRQYXJh bWV0ZXIy4oCdIHRvIExvYWRPcHRpb24uDQpCZWNhdXNlIGl04oCccHJvZHVjZXPigJ0gc3VjaCBM b2FkT3B0aW9uLCBpdCBrbm93cyBob3cgdG8g4oCcY29uc3VtZeKAnS9wYXJzZSBpdCB0byBnZXQg dGhlIEFSR1ZzLg0KDQpTbyBJIHN1Z2dlc3Qgd2UgcHV0IHRoZSBDYXBzdWxlQXBwIGluIFNoZWxs UGtnIGFuZCBsZXQgaXQgdXNlIHRoZSBTaGVsbFBhcmFtZXRlciBwcm90b2NvbC4NCg0KUmVnYXJk cywNClJheQ0KDQpGcm9tOiBDYXJzZXksIEphYmVuDQpTZW50OiBGcmlkYXksIFNlcHRlbWJlciAz MCwgMjAxNiAzOjExIEFNDQpUbzogTmksIFJ1aXl1IDxydWl5dS5uaUBpbnRlbC5jb208bWFpbHRv OnJ1aXl1Lm5pQGludGVsLmNvbT4+OyBZYW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5jb208 bWFpbHRvOmppZXdlbi55YW9AaW50ZWwuY29tPj47IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVs LmQua2lubmV5QGludGVsLmNvbTxtYWlsdG86bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+Pjsg ZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc8bWFpbHRvOmVkazItZGV2ZWxAbGlzdHMuMDEub3JnPg0K Q2M6IFRpYW4sIEZlbmcgPGZlbmcudGlhbkBpbnRlbC5jb208bWFpbHRvOmZlbmcudGlhbkBpbnRl bC5jb20+PjsgWmhhbmcsIENoYW8gQiA8Y2hhby5iLnpoYW5nQGludGVsLmNvbTxtYWlsdG86Y2hh by5iLnpoYW5nQGludGVsLmNvbT4+OyBHYW8sIExpbWluZyA8bGltaW5nLmdhb0BpbnRlbC5jb208 bWFpbHRvOmxpbWluZy5nYW9AaW50ZWwuY29tPj47IFplbmcsIFN0YXIgPHN0YXIuemVuZ0BpbnRl bC5jb208bWFpbHRvOnN0YXIuemVuZ0BpbnRlbC5jb20+PjsgQ2Fyc2V5LCBKYWJlbiA8amFiZW4u Y2Fyc2V5QGludGVsLmNvbTxtYWlsdG86amFiZW4uY2Fyc2V5QGludGVsLmNvbT4+DQpTdWJqZWN0 OiBSRTogW1BBVENIIDE3LzQ1XSBNZGVNb2R1bGVQa2cvQ2Fwc3VsZUFwcDogQWRkIENhcHN1bGVB cHAgYXBwbGljYXRpb24uDQoNCkkgYW0gY29uZnVzZWQuDQoNCldoeSBpcyBMb2FkT3B0aW9uIGFu ZCBMb2FkT3B0aW9uU2l6ZSBub3Qgd29ya2luZz8gIFRoaXMgaXMgc3BlY2lmaWVkIGFzIHBhcnQg b2YgVUVGSSBTcGVjIChOb3RlOiBOb3QgVUVGSSBTaGVsbCBTcGVjKSBhcyBhIHN0YW5kYXJkIHdh eSB0byBwYXNzIHBhcmFtZXRlcnMgdG8gVUVGSSBhcHBsaWF0aW9ucy4gIEkgdGhpbmsgdGhpcyBz aG91bGQgd29yayAoYWx0aG91Z2ggaXQgaXMgbW9yZSB3b3JrIHRoYW4ganVzdCBleGFtaW5pbmcg YXJnYy9hcmd2KS4NCg0KLUphYmVuDQoNCkZyb206IE5pLCBSdWl5dQ0KU2VudDogV2VkbmVzZGF5 LCBTZXB0ZW1iZXIgMjgsIDIwMTYgMTE6NDAgUE0NClRvOiBZYW8sIEppZXdlbiA8amlld2VuLnlh b0BpbnRlbC5jb208bWFpbHRvOmppZXdlbi55YW9AaW50ZWwuY29tPj47IEtpbm5leSwgTWljaGFl bCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbTxtYWlsdG86bWljaGFlbC5kLmtpbm5leUBp bnRlbC5jb20+PjsgZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc8bWFpbHRvOmVkazItZGV2ZWxAbGlz dHMuMDEub3JnPg0KQ2M6IFRpYW4sIEZlbmcgPGZlbmcudGlhbkBpbnRlbC5jb208bWFpbHRvOmZl bmcudGlhbkBpbnRlbC5jb20+PjsgWmhhbmcsIENoYW8gQiA8Y2hhby5iLnpoYW5nQGludGVsLmNv bTxtYWlsdG86Y2hhby5iLnpoYW5nQGludGVsLmNvbT4+OyBHYW8sIExpbWluZyA8bGltaW5nLmdh b0BpbnRlbC5jb208bWFpbHRvOmxpbWluZy5nYW9AaW50ZWwuY29tPj47IFplbmcsIFN0YXIgPHN0 YXIuemVuZ0BpbnRlbC5jb208bWFpbHRvOnN0YXIuemVuZ0BpbnRlbC5jb20+PjsgQ2Fyc2V5LCBK YWJlbiA8amFiZW4uY2Fyc2V5QGludGVsLmNvbTxtYWlsdG86amFiZW4uY2Fyc2V5QGludGVsLmNv bT4+DQpTdWJqZWN0OiBSRTogW1BBVENIIDE3LzQ1XSBNZGVNb2R1bGVQa2cvQ2Fwc3VsZUFwcDog QWRkIENhcHN1bGVBcHAgYXBwbGljYXRpb24uDQpJbXBvcnRhbmNlOiBIaWdoDQoNCkppZXdlbiwN ClRoZSB3YXkgQ2Fwc3VsZUFwcCBleHRyYWN0cyB0aGUgQVJHViBhc3N1bWVzIFVFRkkgU2hlbGwg ZW5jb2RlcyB0aGUgcGFyYW1ldGVycyB1c2luZyBhIGNlcnRhaW4gd2F5LiBCdXQgdGhlIHBhcmFt ZXRlciBlbmNvZGluZyB3YXkgaXMgbm90IGRlc2NyaWJlZCBpbiB0aGUgU2hlbGwgc3BlYy4NCk1h eWJlIHdlIGNhbiBwdXQgdGhlIENhcHN1bGVBcHAgaW4gU2hlbGxQa2csIHRoZW4gbGV0IGl0IGRp cmVjdGx5IHVzZSBTaGVsbFBhcmFtZXRlciBwcm90b2NvbCB0byBnZXQgdGhlIEFSR1YuDQoNCkNv cHlpbmcgSmFiZW4uDQoNClJlZ2FyZHMsDQpSYXkNCg0KRnJvbTogZWRrMi1kZXZlbCBbbWFpbHRv OmVkazItZGV2ZWwtYm91bmNlc0BsaXN0cy4wMS5vcmddIE9uIEJlaGFsZiBPZiBZYW8sIEppZXdl bg0KU2VudDogVGh1cnNkYXksIFNlcHRlbWJlciAyOSwgMjAxNiAxMDozNyBBTQ0KVG86IEtpbm5l eSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbTxtYWlsdG86bWljaGFlbC5k Lmtpbm5leUBpbnRlbC5jb20+PjsgZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc8bWFpbHRvOmVkazIt ZGV2ZWxAbGlzdHMuMDEub3JnPg0KQ2M6IFRpYW4sIEZlbmcgPGZlbmcudGlhbkBpbnRlbC5jb208 bWFpbHRvOmZlbmcudGlhbkBpbnRlbC5jb20+PjsgWmhhbmcsIENoYW8gQiA8Y2hhby5iLnpoYW5n QGludGVsLmNvbTxtYWlsdG86Y2hhby5iLnpoYW5nQGludGVsLmNvbT4+OyBHYW8sIExpbWluZyA8 bGltaW5nLmdhb0BpbnRlbC5jb208bWFpbHRvOmxpbWluZy5nYW9AaW50ZWwuY29tPj47IFplbmcs IFN0YXIgPHN0YXIuemVuZ0BpbnRlbC5jb208bWFpbHRvOnN0YXIuemVuZ0BpbnRlbC5jb20+Pg0K U3ViamVjdDogUmU6IFtlZGsyXSBbUEFUQ0ggMTcvNDVdIE1kZU1vZHVsZVBrZy9DYXBzdWxlQXBw OiBBZGQgQ2Fwc3VsZUFwcCBhcHBsaWNhdGlvbi4NCg0KUmlnaHQuIENhcHN1bGVPbkRpc2sgaXMg bm90IHN1cHBvcnRlZCBpbiBCSU9TIHlldC4NCkkgd2lsbCByZW1vdmUgaXQgaW4gQ2Fwc3VsZUFw cC4NCg0KQ2Fwc3VsZUFwcCBqdXN0IHdvcmtzIGFzIGFuIGFnZW50IHRvIHBhc3MgY2Fwc3VsZSB0 byBDYXBzdWxlRHhlUnVudGltZSBkcml2ZXIuDQpTbyBpdCBpcyBjaGVja2VkIGJ5IENhcHN1bGVE eGVSdW50aW1lLCBub3QgQ2Fwc3VsZUFwcC4NCg0KVGhhbmsgeW91DQpZYW8gSmlld2VuDQoNCkZy b206IEtpbm5leSwgTWljaGFlbCBEDQpTZW50OiBUaHVyc2RheSwgU2VwdGVtYmVyIDI5LCAyMDE2 IDk6MDYgQU0NClRvOiBZYW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5jb208bWFpbHRvOmpp ZXdlbi55YW9AaW50ZWwuY29tPj47IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnPG1haWx0bzplZGsy LWRldmVsQGxpc3RzLjAxLm9yZz47IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5 QGludGVsLmNvbTxtYWlsdG86bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+Pg0KQ2M6IFRpYW4s IEZlbmcgPGZlbmcudGlhbkBpbnRlbC5jb208bWFpbHRvOmZlbmcudGlhbkBpbnRlbC5jb20+Pjsg WmVuZywgU3RhciA8c3Rhci56ZW5nQGludGVsLmNvbTxtYWlsdG86c3Rhci56ZW5nQGludGVsLmNv bT4+OyBHYW8sIExpbWluZyA8bGltaW5nLmdhb0BpbnRlbC5jb208bWFpbHRvOmxpbWluZy5nYW9A aW50ZWwuY29tPj47IFpoYW5nLCBDaGFvIEIgPGNoYW8uYi56aGFuZ0BpbnRlbC5jb208bWFpbHRv OmNoYW8uYi56aGFuZ0BpbnRlbC5jb20+Pg0KU3ViamVjdDogUkU6IFtQQVRDSCAxNy80NV0gTWRl TW9kdWxlUGtnL0NhcHN1bGVBcHA6IEFkZCBDYXBzdWxlQXBwIGFwcGxpY2F0aW9uLg0KDQpKaWV3 ZW4sDQoNCkRvZXMgdGhlIGNhcHN1bGUgb24gZGlzayBmZWF0dXJlIHByb3ZpZGVkIGJ5IHRoaXMg YXBwIHdvcms/DQoNCkkgdHJpZWQgaXQgd2l0aCB0aGUgUXVhcmtQbGF0Zm9ybVBrZyBjYXBzdWxl IGFuZCBJIGNhbiBnZXQNClRoZSBhcHAgdG8gY29weSB0aGUgY2Fwc3VsZSB0byBhbiBFRkkgU3lz dGVtIFBhcnRpdGlvbiwgYnV0DQpUaGUgbG9naWMgYWZ0ZXIgdGhhdCBwb2ludCBsb29rcyBpbmNv bXBsZXRlLg0KDQpBbHNvLCBpZiBJIGNsZWFyIHRoZSBQZXJzaXN0IGFuZCBSZXNldCBmbGFncyBv biB0aGUgY2Fwc3VsZSwNCnRoZSBpbW1lZGlhdGUgcHJvY2Vzc2luZyBvZiB0aGUgY2Fwc3VsZSBk b2VzIG5vdCB3b3JrLg0KDQpJcyB0aGVyZSBhbnkgRlcgY29kZSB0aGF0IHdpbGwgbG9vayBmb3Ig Y2Fwc3VsZXMgb24gZGlzaz8NCg0KSWYgdGhlcmUgYXJlIGluY29tcGxldGUgZmVhdHVyZXMgaW4g Q2Fwc3VsZUFwcCwgdGhlbiBJIHRoaW5rDQp3ZSBzaG91bGQgcmVtb3ZlIHRoZW0uDQoNCk1pa2UN Cg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBZYW8sIEppZXdlbg0KPiBT ZW50OiBUdWVzZGF5LCBTZXB0ZW1iZXIgMjAsIDIwMTYgMTE6NDUgUE0NCj4gVG86IGVkazItZGV2 ZWxAbGlzdHMuMDEub3JnPG1haWx0bzplZGsyLWRldmVsQGxpc3RzLjAxLm9yZzxtYWlsdG86ZWRr Mi1kZXZlbEBsaXN0cy4wMS5vcmclM2NtYWlsdG86ZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc+Pg0K PiBDYzogVGlhbiwgRmVuZyA8ZmVuZy50aWFuQGludGVsLmNvbTxtYWlsdG86ZmVuZy50aWFuQGlu dGVsLmNvbTxtYWlsdG86ZmVuZy50aWFuQGludGVsLmNvbSUzY21haWx0bzpmZW5nLnRpYW5AaW50 ZWwuY29tPj4+OyBaZW5nLCBTdGFyIDxzdGFyLnplbmdAaW50ZWwuY29tPG1haWx0bzpzdGFyLnpl bmdAaW50ZWwuY29tPG1haWx0bzpzdGFyLnplbmdAaW50ZWwuY29tJTNjbWFpbHRvOnN0YXIuemVu Z0BpbnRlbC5jb20+Pj47IEtpbm5leSwgTWljaGFlbA0KPiBEIDxtaWNoYWVsLmQua2lubmV5QGlu dGVsLmNvbTxtYWlsdG86bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb208bWFpbHRvOm1pY2hhZWwu ZC5raW5uZXlAaW50ZWwuY29tJTNjbWFpbHRvOm1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPj4+ OyBHYW8sIExpbWluZyA8bGltaW5nLmdhb0BpbnRlbC5jb208bWFpbHRvOmxpbWluZy5nYW9AaW50 ZWwuY29tPG1haWx0bzpsaW1pbmcuZ2FvQGludGVsLmNvbSUzY21haWx0bzpsaW1pbmcuZ2FvQGlu dGVsLmNvbT4+PjsgWmhhbmcsIENoYW8gQg0KPiA8Y2hhby5iLnpoYW5nQGludGVsLmNvbTxtYWls dG86Y2hhby5iLnpoYW5nQGludGVsLmNvbTxtYWlsdG86Y2hhby5iLnpoYW5nQGludGVsLmNvbSUz Y21haWx0bzpjaGFvLmIuemhhbmdAaW50ZWwuY29tPj4+DQo+IFN1YmplY3Q6IFtQQVRDSCAxNy80 NV0gTWRlTW9kdWxlUGtnL0NhcHN1bGVBcHA6IEFkZCBDYXBzdWxlQXBwIGFwcGxpY2F0aW9uLg0K Pg0KPiBUaGlzIENhcHN1bGVBcHAgY2FuIGhlbHAgcGVyZm9ybSBjYXBzdWxlIHVwZGF0ZSBpbiBV RUZJIHNoZWxsIGVudmlyb25tZW50Lg0KPiBJdCBjYW4gYWxzbyBkdW1wIGNhcHN1bGUgaW5mb3Jt YXRpb24sIGNhcHN1bGUgc3RhdHVzIHZhcmlhYmxlLCBFU1JUIGFuZCBGTVAuDQo+DQo+IENjOiBG ZW5nIFRpYW4gPGZlbmcudGlhbkBpbnRlbC5jb208bWFpbHRvOmZlbmcudGlhbkBpbnRlbC5jb208 bWFpbHRvOmZlbmcudGlhbkBpbnRlbC5jb20lM2NtYWlsdG86ZmVuZy50aWFuQGludGVsLmNvbT4+ Pg0KPiBDYzogU3RhciBaZW5nIDxzdGFyLnplbmdAaW50ZWwuY29tPG1haWx0bzpzdGFyLnplbmdA aW50ZWwuY29tPG1haWx0bzpzdGFyLnplbmdAaW50ZWwuY29tJTNjbWFpbHRvOnN0YXIuemVuZ0Bp bnRlbC5jb20+Pj4NCj4gQ2M6IE1pY2hhZWwgRCBLaW5uZXkgPG1pY2hhZWwuZC5raW5uZXlAaW50 ZWwuY29tPG1haWx0bzptaWNoYWVsLmQua2lubmV5QGludGVsLmNvbTxtYWlsdG86bWljaGFlbC5k Lmtpbm5leUBpbnRlbC5jb20lM2NtYWlsdG86bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+Pj4N Cj4gQ2M6IExpbWluZyBHYW8gPGxpbWluZy5nYW9AaW50ZWwuY29tPG1haWx0bzpsaW1pbmcuZ2Fv QGludGVsLmNvbTxtYWlsdG86bGltaW5nLmdhb0BpbnRlbC5jb20lM2NtYWlsdG86bGltaW5nLmdh b0BpbnRlbC5jb20+Pj4NCj4gQ2M6IENoYW8gWmhhbmcgPGNoYW8uYi56aGFuZ0BpbnRlbC5jb208 bWFpbHRvOmNoYW8uYi56aGFuZ0BpbnRlbC5jb208bWFpbHRvOmNoYW8uYi56aGFuZ0BpbnRlbC5j b20lM2NtYWlsdG86Y2hhby5iLnpoYW5nQGludGVsLmNvbT4+Pg0KPiBDb250cmlidXRlZC11bmRl cjogVGlhbm9Db3JlIENvbnRyaWJ1dGlvbiBBZ3JlZW1lbnQgMS4wDQo+IFNpZ25lZC1vZmYtYnk6 IEppZXdlbiBZYW8gPGppZXdlbi55YW9AaW50ZWwuY29tPG1haWx0bzpqaWV3ZW4ueWFvQGludGVs LmNvbTxtYWlsdG86amlld2VuLnlhb0BpbnRlbC5jb20lM2NtYWlsdG86amlld2VuLnlhb0BpbnRl bC5jb20+Pj4NCj4gLS0tDQo+ICBNZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3VsZUFwcC9B cHBTdXBwb3J0LmMgICAgICAgIHwgIDQ4MCArKysrKysrKysNCj4gIE1kZU1vZHVsZVBrZy9BcHBs aWNhdGlvbi9DYXBzdWxlQXBwL0NhcHN1bGVBcHAuYyAgICAgICAgfCAxMDQ3ICsrKysrKysrKysr KysrKysrKysrDQo+ICBNZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3VsZUFwcC9DYXBzdWxl QXBwLmluZiAgICAgIHwgICA3MSArKw0KPiAgTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9uL0NhcHN1 bGVBcHAvQ2Fwc3VsZUFwcC51bmkgICAgICB8ICAgMjIgKw0KPiAgTWRlTW9kdWxlUGtnL0FwcGxp Y2F0aW9uL0NhcHN1bGVBcHAvQ2Fwc3VsZUFwcEV4dHJhLnVuaSB8ICAgMTkgKw0KPiAgTWRlTW9k dWxlUGtnL0FwcGxpY2F0aW9uL0NhcHN1bGVBcHAvQ2Fwc3VsZUR1bXAuYyAgICAgICB8ICA4NDAg KysrKysrKysrKysrKysrKw0KPiAgNiBmaWxlcyBjaGFuZ2VkLCAyNDc5IGluc2VydGlvbnMoKykN Cj4NCj4gZGlmZiAtLWdpdCBhL01kZU1vZHVsZVBrZy9BcHBsaWNhdGlvbi9DYXBzdWxlQXBwL0Fw cFN1cHBvcnQuYw0KPiBiL01kZU1vZHVsZVBrZy9BcHBsaWNhdGlvbi9DYXBzdWxlQXBwL0FwcFN1 cHBvcnQuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwLi4zNjUwNjdk DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9uL0NhcHN1 bGVBcHAvQXBwU3VwcG9ydC5jDQo+IEBAIC0wLDAgKzEsNDgwIEBADQo+ICsvKiogQGZpbGUNCj4g KyAgQSBzaGVsbCBhcHBsaWNhdGlvbiB0aGF0IHRyaWdnZXJzIGNhcHN1bGUgdXBkYXRlIHByb2Nl c3MuDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDE2LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxs IHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFu eWluZyBtYXRlcmlhbHMNCj4gKyAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRl ciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlDQo+ICsgIHdoaWNo IGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGlj ZW5zZSBtYXkgYmUgZm91bmQgYXQNCj4gKyAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2Vz L2JzZC1saWNlbnNlLnBocA0KPiArDQo+ICsgIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVO REVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0KPiArICBXSVRIT1VUIFdB UlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBP UiBJTVBMSUVELg0KPiArDQo+ICsqKi8NCj4gKw0KPiArI2luY2x1ZGUgPFVlZmkuaD4NCj4gKyNp bmNsdWRlIDxMaWJyYXJ5L0Jhc2VMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGli Lmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+DQo+ICsjaW5jbHVkZSA8 TGlicmFyeS9NZW1vcnlBbGxvY2F0aW9uTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZp Qm9vdFNlcnZpY2VzVGFibGVMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlSdW50aW1l U2VydmljZXNUYWJsZUxpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaUxpYi5oPg0KPiAr I2luY2x1ZGUgPExpYnJhcnkvUHJpbnRMaWIuaD4NCj4gKyNpbmNsdWRlIDxQcm90b2NvbC9Mb2Fk ZWRJbWFnZS5oPg0KPiArI2luY2x1ZGUgPFByb3RvY29sL1NpbXBsZUZpbGVTeXN0ZW0uaD4NCj4g KyNpbmNsdWRlIDxHdWlkL0ZpbGVJbmZvLmg+DQo+ICsjaW5jbHVkZSA8R3VpZC9HcHQuaD4NCj4g Kw0KPiArI2RlZmluZSBNQVhfQVJHX05VTSAgICAgMTENCj4gKw0KPiArVUlOVE4gIEFyZ2MgPSAw Ow0KPiArQ0hBUjE2ICpBcmd2W01BWF9BUkdfTlVNXTsNCj4gK0NIQVIxNiAqQXJnQnVmZmVyOw0K PiArDQo+ICsvKioNCj4gKw0KPiArICBUaGlzIGZ1bmN0aW9uIHBhcnNlIGFwcGxpY2F0aW9uIEFS Ry4NCj4gKw0KPiArICBAcmV0dXJuIFN0YXR1cw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtH ZXRBcmcgKA0KPiArICBWT0lEDQo+ICsgICkNCj4gK3sNCj4gKyAgVUlOVDggICAgICAgICAgICAg ICAgICAgICAgICAgKkRhdGE7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIERh dGFTaXplOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAqSW5kZXg7DQo+ICsg IENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICpFbmQ7DQo+ICsgIENIQVIxNiAgICAgICAg ICAgICAgICAgICAgICAgICpESW5kZXg7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAg ICAgIFN0YXR1czsNCj4gKyAgRUZJX0xPQURFRF9JTUFHRV9QUk9UT0NPTCAgICAgKkxvYWRlZElt YWdlOw0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKA0KPiArICAgICAg ICAgICAgICAgICAgZ0ltYWdlSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgJmdFZmlMb2Fk ZWRJbWFnZVByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIChWT0lEKiopJkxvYWRl ZEltYWdlDQo+ICsgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SKFN0YXR1 cykpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgRGF0YSA9IExv YWRlZEltYWdlLT5Mb2FkT3B0aW9uczsNCj4gKyAgRGF0YVNpemUgPSBMb2FkZWRJbWFnZS0+TG9h ZE9wdGlvbnNTaXplOw0KPiArDQo+ICsgIEVuZCA9IChDSEFSMTYqKShVSU5UTikoRGF0YSArIERh dGFTaXplKTsNCj4gKyAgU3RhdHVzID0gZ0JTLT5BbGxvY2F0ZVBvb2wgKEVmaUJvb3RTZXJ2aWNl c0RhdGEsIERhdGFTaXplLCAoVk9JRCAqKikmQXJnQnVmZmVyKTsNCj4gKyAgQVNTRVJUX0VGSV9F UlJPUiAoU3RhdHVzKTsNCj4gKyAgREluZGV4ID0gQXJnQnVmZmVyOw0KPiArICBBcmd2W0FyZ2Mr K10gPSBBcmdCdWZmZXI7DQo+ICsgIGZvciAoSW5kZXggPSAoQ0hBUjE2KilEYXRhOyBJbmRleCA8 IEVuZDsgKSB7DQo+ICsgICAgaWYgKCpJbmRleCA9PSBMJyAnKSB7DQo+ICsgICAgICAqREluZGV4 ID0gTCdcMCc7DQo+ICsgICAgICBpZiAoQXJnYyA+PSBNQVhfQVJHX05VTSkgew0KPiArICAgICAg ICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiArICAgICAgfQ0KPiArICAgICAgQXJndltBcmdj KytdID0gKCsrIERJbmRleCk7DQo+ICsgICAgICB3aGlsZSgqSW5kZXggPT0gTCcgJykgew0KPiAr ICAgICAgICBJbmRleCArKzsNCj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ICsgICAgKCooREluZGV4 ICsrKSkgPSAoKihJbmRleCArKykpOw0KPiArICB9DQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsN Cj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENsZWFyIEFQUCBBUkcuDQo+ICsqKi8NCj4gK1ZPSUQN Cj4gK0NsZWFuQXJnICgNCj4gKyAgVk9JRA0KPiArICApDQo+ICt7DQo+ICsgIEZyZWVQb29sIChB cmd2WzBdKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFJldHVybiBGaWxlIFN5c3RlbSBWb2x1 bWUgY29udGFpbmluZyB0aGlzIHNoZWxsIGFwcGxpY2F0aW9uLg0KPiArDQo+ICsgIEByZXR1cm4g RmlsZSBTeXN0ZW0gVm9sdW1lIGNvbnRhaW5pbmcgdGhpcyBzaGVsbCBhcHBsaWNhdGlvbi4NCj4g KyoqLw0KPiArRUZJX1NJTVBMRV9GSUxFX1NZU1RFTV9QUk9UT0NPTCAqDQo+ICtHZXRNeVZvbCAo DQo+ICsgIFZPSUQNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAg ICAgICAgICAgU3RhdHVzOw0KPiArICBFRklfTE9BREVEX0lNQUdFX1BST1RPQ09MICAgICAgICAg KkxvYWRlZEltYWdlOw0KPiArICBFRklfU0lNUExFX0ZJTEVfU1lTVEVNX1BST1RPQ09MICAgKlZv bDsNCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgNCj4gKyAgICAgICAg ICAgICAgICAgIGdJbWFnZUhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWZpTG9hZGVk SW1hZ2VQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmTG9hZGVk SW1hZ2UNCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsgIEFTU0VSVF9FRklfRVJST1IgKFN0 YXR1cyk7DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+ICsgICAg ICAgICAgICAgICAgICBMb2FkZWRJbWFnZS0+RGV2aWNlSGFuZGxlLA0KPiArICAgICAgICAgICAg ICAgICAgJmdFZmlTaW1wbGVGaWxlU3lzdGVtUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAg ICAgICAgKFZPSUQgKiopJlZvbA0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKCFF RklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gVm9sOw0KPiArICB9DQo+ICsNCj4g KyAgcmV0dXJuIE5VTEw7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBSZWFkIGEgZmlsZSBmcm9t IHRoaXMgdm9sdW1lLg0KPiArDQo+ICsgIEBwYXJhbSBWb2wgICAgICAgICAgICAgRmlsZSBTeXN0 ZW0gVm9sdW1lDQo+ICsgIEBwYXJhbSBGaWxlTmFtZSAgICAgICAgVGhlIGZpbGUgdG8gYmUgcmVh ZC4NCj4gKyAgQHBhcmFtIEJ1ZmZlclNpemUgICAgICBUaGUgZmlsZSBidWZmZXIgc2l6ZQ0KPiAr ICBAcGFyYW0gQnVmZmVyICAgICAgICAgIFRoZSBmaWxlIGJ1ZmZlcg0KPiArDQo+ICsgIEByZXR2 YWwgRUZJX1NVQ0NFU1MgICAgUmVhZCBmaWxlIHN1Y2Nlc3NmdWxseQ0KPiArICBAcmV0dmFsIEVG SV9OT1RfRk9VTkQgIEZpbGUgbm90IGZvdW5kDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1Jl YWRGaWxlRnJvbVZvbCAoDQo+ICsgIElOICBFRklfU0lNUExFX0ZJTEVfU1lTVEVNX1BST1RPQ09M ICAgKlZvbCwNCj4gKyAgSU4gIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqRmls ZU5hbWUsDQo+ICsgIE9VVCBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZl clNpemUsDQo+ICsgIE9VVCBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipCdWZm ZXINCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAg U3RhdHVzOw0KPiArICBFRklfRklMRV9IQU5ETEUgICAgICAgICAgICAgICAgICAgUm9vdERpcjsN Cj4gKyAgRUZJX0ZJTEVfSEFORExFICAgICAgICAgICAgICAgICAgIEhhbmRsZTsNCj4gKyAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVJbmZvU2l6ZTsNCj4gKyAgRUZJX0ZJ TEVfSU5GTyAgICAgICAgICAgICAgICAgICAgICpGaWxlSW5mbzsNCj4gKyAgVUlOVE4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFRlbXBCdWZmZXJTaXplOw0KPiArICBWT0lEICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKlRlbXBCdWZmZXI7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8g T3BlbiB0aGUgcm9vdCBkaXJlY3RvcnkNCj4gKyAgLy8NCj4gKyAgU3RhdHVzID0gVm9sLT5PcGVu Vm9sdW1lIChWb2wsICZSb290RGlyKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBPcGVu IHRoZSBmaWxlDQo+ICsgIC8vDQo+ICsgIFN0YXR1cyA9IFJvb3REaXItPk9wZW4gKA0KPiArICAg ICAgICAgICAgICAgICAgICAgIFJvb3REaXIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgJkhh bmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICBGaWxlTmFtZSwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICBFRklfRklMRV9NT0RFX1JFQUQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAg MA0KPiArICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4gKyAgICBSb290RGlyLT5DbG9zZSAoUm9vdERpcik7DQo+ICsgICAgcmV0dXJuIFN0 YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFJvb3REaXItPkNsb3NlIChSb290RGlyKTsNCj4gKw0K PiArICAvLw0KPiArICAvLyBHZXQgdGhlIGZpbGUgaW5mb3JtYXRpb24NCj4gKyAgLy8NCj4gKyAg RmlsZUluZm9TaXplID0gc2l6ZW9mKEVGSV9GSUxFX0lORk8pICsgMTAyNDsNCj4gKw0KPiArICBG aWxlSW5mbyA9IEFsbG9jYXRlWmVyb1Bvb2wgKEZpbGVJbmZvU2l6ZSk7DQo+ICsgIGlmIChGaWxl SW5mbyA9PSBOVUxMKSB7DQo+ICsgICAgSGFuZGxlLT5DbG9zZSAoSGFuZGxlKTsNCj4gKyAgICBy ZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gSGFuZGxlLT5HZXRJbmZv ICgNCj4gKyAgICAgICAgICAgICAgICAgICAgIEhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAg ICAgICZnRWZpRmlsZUluZm9HdWlkLA0KPiArICAgICAgICAgICAgICAgICAgICAgJkZpbGVJbmZv U2l6ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgIEZpbGVJbmZvDQo+ICsgICAgICAgICAgICAg ICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgSGFuZGxl LT5DbG9zZSAoSGFuZGxlKTsNCj4gKyAgICBnQlMtPkZyZWVQb29sIChGaWxlSW5mbyk7DQo+ICsg ICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIEFsbG9jYXRl IGJ1ZmZlciBmb3IgdGhlIGZpbGUgZGF0YS4gVGhlIGxhc3QgQ0hBUjE2IGlzIGZvciBMJ1wwJw0K PiArICAvLw0KPiArICBUZW1wQnVmZmVyU2l6ZSA9IChVSU5UTikgRmlsZUluZm8tPkZpbGVTaXpl ICsgc2l6ZW9mKENIQVIxNik7DQo+ICsgIFRlbXBCdWZmZXIgPSBBbGxvY2F0ZVplcm9Qb29sIChU ZW1wQnVmZmVyU2l6ZSk7DQo+ICsgIGlmIChUZW1wQnVmZmVyID09IE5VTEwpIHsNCj4gKyAgICBI YW5kbGUtPkNsb3NlIChIYW5kbGUpOw0KPiArICAgIGdCUy0+RnJlZVBvb2wgKEZpbGVJbmZvKTsN Cj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgZ0JTLT5GcmVlUG9vbCAo RmlsZUluZm8pOw0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIFJlYWQgdGhlIGZpbGUgZGF0YSB0byB0 aGUgYnVmZmVyDQo+ICsgIC8vDQo+ICsgIFN0YXR1cyA9IEhhbmRsZS0+UmVhZCAoDQo+ICsgICAg ICAgICAgICAgICAgICAgICBIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAmVGVtcEJ1 ZmZlclNpemUsDQo+ICsgICAgICAgICAgICAgICAgICAgICBUZW1wQnVmZmVyDQo+ICsgICAgICAg ICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAg SGFuZGxlLT5DbG9zZSAoSGFuZGxlKTsNCj4gKyAgICBnQlMtPkZyZWVQb29sIChUZW1wQnVmZmVy KTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgSGFuZGxlLT5DbG9z ZSAoSGFuZGxlKTsNCj4gKw0KPiArICAqQnVmZmVyU2l6ZSA9IFRlbXBCdWZmZXJTaXplOw0KPiAr ICAqQnVmZmVyICAgICA9IFRlbXBCdWZmZXI7DQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4g K30NCj4gKw0KPiArLyoqDQo+ICsgIFJlYWQgYSBmaWxlLg0KPiArICBJZiBTY2FuRnMgaXMgRkxB U0UsIGl0IHdpbGwgdXNlIHRoaXMgVm9sIGFzIGRlZmF1bHQgRnMuDQo+ICsgIElmIFNjYW5GcyBp cyBUUlVFLCBpdCB3aWxsIHNjYW4gYWxsIEZTIGFuZCBjaGVjayB0aGUgZmlsZS4NCj4gKyAgICBJ ZiB0aGVyZSBpcyBvbmx5IG9uZSBmaWxlIG1hdGNoIHRoZSBuYW1lLCBpdCB3aWxsIGJlIHJlYWQu DQo+ICsgICAgSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBmaWxlIG1hdGNoIHRoZSBuYW1lLCBp dCB3aWxsIHJldHVybiBFcnJvci4NCj4gKw0KPiArICBAcGFyYW0gVGhpc1ZvbCAgICAgICAgIEZp bGUgU3lzdGVtIFZvbHVtZQ0KPiArICBAcGFyYW0gRmlsZU5hbWUgICAgICAgIFRoZSBmaWxlIHRv IGJlIHJlYWQuDQo+ICsgIEBwYXJhbSBCdWZmZXJTaXplICAgICAgVGhlIGZpbGUgYnVmZmVyIHNp emUNCj4gKyAgQHBhcmFtIEJ1ZmZlciAgICAgICAgICBUaGUgZmlsZSBidWZmZXINCj4gKyAgQHBh cmFtIFNjYW5GcyAgICAgICAgICBOZWVkIFNjYW4gYWxsIEZTDQo+ICsNCj4gKyAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICBSZWFkIGZpbGUgc3VjY2Vzc2Z1bGx5DQo+ICsgIEByZXR2YWwgRUZJX05P VF9GT1VORCAgRmlsZSBub3QgZm91bmQNCj4gKyAgQHJldHZhbCBFRklfTk9fTUFQUElORyBUaGVy ZSBpcyBkdXBsaWNhdGVkIGZpbGVzIGZvdW5kDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1Jl YWRGaWxlVG9CdWZmZXJFeCAoDQo+ICsgIElOIE9VVCBFRklfU0lNUExFX0ZJTEVfU1lTVEVNX1BS T1RPQ09MICAgKipUaGlzVm9sLA0KPiArICBJTiAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICpGaWxlTmFtZSwNCj4gKyAgT1VUIFVJTlROICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqQnVmZmVyU2l6ZSwNCj4gKyAgT1VUIFZPSUQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqKkJ1ZmZlciwNCj4gKyAgSU4gIEJPT0xFQU4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBTY2FuRnMNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAg ICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBFRklfU0lNUExFX0ZJTEVfU1lTVEVNX1BS T1RPQ09MICAgKlZvbDsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRl bXBCdWZmZXJTaXplOw0KPiArICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlRl bXBCdWZmZXI7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb0hhbmRs ZXM7DQo+ICsgIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAqSGFuZGxlQnVmZmVy Ow0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsNCj4g KyAgLy8NCj4gKyAgLy8gQ2hlY2sgcGFyYW1ldGVycw0KPiArICAvLw0KPiArICBpZiAoKEZpbGVO YW1lID09IE5VTEwpIHx8IChCdWZmZXIgPT0gTlVMTCkgfHwgKFRoaXNWb2wgPT0gTlVMTCkpIHsN Cj4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICB9DQo+ICsNCj4gKyAg Ly8NCj4gKyAgLy8gbm90IHNjYW4gZnMNCj4gKyAgLy8NCj4gKyAgaWYgKCFTY2FuRnMpIHsNCj4g KyAgICBpZiAoKlRoaXNWb2wgPT0gTlVMTCkgew0KPiArICAgICAgKlRoaXNWb2wgPSBHZXRNeVZv bCAoKTsNCj4gKyAgICAgIGlmICgqVGhpc1ZvbCA9PSBOVUxMKSB7DQo+ICsgICAgICAgIHJldHVy biBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArICAgIC8v DQo+ICsgICAgLy8gUmVhZCBmaWxlIGRpcmVjdGx5IGZyb20gVm9sDQo+ICsgICAgLy8NCj4gKyAg ICByZXR1cm4gUmVhZEZpbGVGcm9tVm9sICgqVGhpc1ZvbCwgRmlsZU5hbWUsIEJ1ZmZlclNpemUs IEJ1ZmZlcik7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBuZWVkIHNjYW4gZnMNCj4g KyAgLy8NCj4gKw0KPiArICAvLw0KPiArICAvLyBHZXQgYWxsIFZvbCBoYW5kbGUNCj4gKyAgLy8N Cj4gKyAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVIYW5kbGVCdWZmZXIgKA0KPiArICAgICAgICAgICAg ICAgICAgIEJ5UHJvdG9jb2wsDQo+ICsgICAgICAgICAgICAgICAgICAgJmdFZmlTaW1wbGVGaWxl U3lzdGVtUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ICsgICAg ICAgICAgICAgICAgICAgJk5vSGFuZGxlcywNCj4gKyAgICAgICAgICAgICAgICAgICAmSGFuZGxl QnVmZmVyDQo+ICsgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSAmJiAoTm9IYW5kbGVzID09IDApKSB7DQo+ICsgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7 DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBXYWxrIHRocm91Z2ggZWFjaCBWb2wNCj4g KyAgLy8NCj4gKyAgKlRoaXNWb2wgPSBOVUxMOw0KPiArICAqQnVmZmVyU2l6ZSA9IDA7DQo+ICsg ICpCdWZmZXIgICAgID0gTlVMTDsNCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgTm9IYW5k bGVzOyBJbmRleCsrKSB7DQo+ICsgICAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+ ICsgICAgICAgICAgICAgICAgICAgIEhhbmRsZUJ1ZmZlcltJbmRleF0sDQo+ICsgICAgICAgICAg ICAgICAgICAgICZnRWZpU2ltcGxlRmlsZVN5c3RlbVByb3RvY29sR3VpZCwNCj4gKyAgICAgICAg ICAgICAgICAgICAgKFZPSUQgKiopJlZvbA0KPiArICAgICAgICAgICAgICAgICAgICApOw0KPiAr ICAgIGlmIChFRklfRVJST1IoU3RhdHVzKSkgew0KPiArICAgICAgY29udGludWU7DQo+ICsgICAg fQ0KPiArDQo+ICsgICAgU3RhdHVzID0gUmVhZEZpbGVGcm9tVm9sIChWb2wsIEZpbGVOYW1lLCAm VGVtcEJ1ZmZlclNpemUsICZUZW1wQnVmZmVyKTsNCj4gKyAgICBpZiAoIUVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiArICAgICAgLy8NCj4gKyAgICAgIC8vIFJlYWQgZmlsZSBPSywgY2hlY2sgZHVw bGljYXRpb24NCj4gKyAgICAgIC8vDQo+ICsgICAgICBpZiAoKlRoaXNWb2wgIT0gTlVMTCkgew0K PiArICAgICAgICAvLw0KPiArICAgICAgICAvLyBGaW5kIHRoZSBkdXBsaWNhdGVkIGZpbGUNCj4g KyAgICAgICAgLy8NCj4gKyAgICAgICAgZ0JTLT5GcmVlUG9vbCAoVGVtcEJ1ZmZlcik7DQo+ICsg ICAgICAgIGdCUy0+RnJlZVBvb2wgKCpCdWZmZXIpOw0KPiArICAgICAgICBQcmludCAoTCJEdXBs aWNhdGVkIEZpbGVOYW1lIGZvdW5kIVxuIik7DQo+ICsgICAgICAgIHJldHVybiBFRklfTk9fTUFQ UElORzsNCj4gKyAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgIC8vDQo+ICsgICAgICAgIC8vIFJl Y29yZCB2YWx1ZQ0KPiArICAgICAgICAvLw0KPiArICAgICAgICAqVGhpc1ZvbCA9IFZvbDsNCj4g KyAgICAgICAgKkJ1ZmZlclNpemUgPSBUZW1wQnVmZmVyU2l6ZTsNCj4gKyAgICAgICAgKkJ1ZmZl ciAgICAgPSBUZW1wQnVmZmVyOw0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ ICsgIC8vDQo+ICsgIC8vIFNjYW4gRnMgZG9uZQ0KPiArICAvLw0KPiArICBpZiAoKlRoaXNWb2wg PT0gTlVMTCkgew0KPiArICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPiArICB9DQo+ICsNCj4g KyAgLy8NCj4gKyAgLy8gRG9uZQ0KPiArICAvLw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ ICt9DQo+ICsNCj4gKy8qKg0KPiArICBSZWFkIGEgZmlsZS4NCj4gKw0KPiArICBAcGFyYW0gRmls ZU5hbWUgICAgICAgIFRoZSBmaWxlIHRvIGJlIHJlYWQuDQo+ICsgIEBwYXJhbSBCdWZmZXJTaXpl ICAgICAgVGhlIGZpbGUgYnVmZmVyIHNpemUNCj4gKyAgQHBhcmFtIEJ1ZmZlciAgICAgICAgICBU aGUgZmlsZSBidWZmZXINCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgIFJlYWQgZmls ZSBzdWNjZXNzZnVsbHkNCj4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICBGaWxlIG5vdCBmb3Vu ZA0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtSZWFkRmlsZVRvQnVmZmVyICgNCj4gKyAgSU4g IENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqRmlsZU5hbWUsDQo+ICsgIE9V VCBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZlclNpemUsDQo+ICsg IE9VVCBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipCdWZmZXINCj4gKyAg KQ0KPiArew0KPiArICBFRklfU0lNUExFX0ZJTEVfU1lTVEVNX1BST1RPQ09MICAgKlZvbDsNCj4g KyAgVm9sID0gTlVMTDsNCj4gKyAgcmV0dXJuIFJlYWRGaWxlVG9CdWZmZXJFeCgmVm9sLCBGaWxl TmFtZSwgQnVmZmVyU2l6ZSwgQnVmZmVyLCBGQUxTRSk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiAr ICBXcml0ZSBhIGZpbGUuDQo+ICsNCj4gKyAgQHBhcmFtIEZpbGVOYW1lICAgICAgICBUaGUgZmls ZSB0byBiZSB3cml0dGVuLg0KPiArICBAcGFyYW0gQnVmZmVyU2l6ZSAgICAgIFRoZSBmaWxlIGJ1 ZmZlciBzaXplDQo+ICsgIEBwYXJhbSBCdWZmZXIgICAgICAgICAgVGhlIGZpbGUgYnVmZmVyDQo+ ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICBXcml0ZSBmaWxlIHN1Y2Nlc3NmdWxseQ0K PiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtXcml0ZUZpbGVGcm9tQnVmZmVyKA0KPiArICBJTiAg Q0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpGaWxlTmFtZSwNCj4gKyAgSU4g IFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJTaXplLA0KPiArICBJ TiAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpCdWZmZXINCj4gKyAgKQ0K PiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiAr ICBFRklfRklMRV9IQU5ETEUgICAgICAgICAgICAgICAgICAgUm9vdERpcjsNCj4gKyAgRUZJX0ZJ TEVfSEFORExFICAgICAgICAgICAgICAgICAgIEhhbmRsZTsNCj4gKyAgVUlOVE4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFRlbXBCdWZmZXJTaXplOw0KPiArICBFRklfU0lNUExFX0ZJTEVf U1lTVEVNX1BST1RPQ09MICAgKlZvbDsNCj4gKw0KPiArICBWb2wgPSBHZXRNeVZvbCgpOw0KPiAr DQo+ICsgIC8vDQo+ICsgIC8vIE9wZW4gdGhlIHJvb3QgZGlyZWN0b3J5DQo+ICsgIC8vDQo+ICsg IFN0YXR1cyA9IFZvbC0+T3BlblZvbHVtZSAoVm9sLCAmUm9vdERpcik7DQo+ICsgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4g KyAgLy8NCj4gKyAgLy8gT3BlbiB0aGUgZmlsZQ0KPiArICAvLw0KPiArICBTdGF0dXMgPSBSb290 RGlyLT5PcGVuICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICBSb290RGlyLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICZIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgRmlsZU5h bWUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgRUZJX0ZJTEVfTU9ERV9SRUFEIHwgRUZJX0ZJ TEVfTU9ERV9XUklURXwgRUZJX0ZJTEVfTU9ERV9DUkVBVEUsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgMA0KPiArICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4gKyAgICBSb290RGlyLT5DbG9zZSAoUm9vdERpcik7DQo+ICsgICAgcmV0 dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIERlbGV0ZSBmaWxlDQo+ ICsgIC8vDQo+ICsgIFN0YXR1cyA9IEhhbmRsZS0+RGVsZXRlKEhhbmRsZSk7DQo+ICsgIGlmIChF RklfRVJST1IoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0K PiArICAvLw0KPiArICAvLyBPcGVuIHRoZSBmaWxlIGFnYWluDQo+ICsgIC8vDQo+ICsgIFN0YXR1 cyA9IFJvb3REaXItPk9wZW4gKA0KPiArICAgICAgICAgICAgICAgICAgICAgIFJvb3REaXIsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgJkhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAg ICBGaWxlTmFtZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICBFRklfRklMRV9NT0RFX1JFQUQg fCBFRklfRklMRV9NT0RFX1dSSVRFfCBFRklfRklMRV9NT0RFX0NSRUFURSwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAwDQo+ICsgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIFJvb3REaXItPkNsb3NlIChSb290RGlyKTsNCj4g KyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgUm9vdERpci0+Q2xvc2UgKFJv b3REaXIpOw0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIFdyaXRlIHRoZSBmaWxlIGRhdGEgZnJvbSB0 aGUgYnVmZmVyDQo+ICsgIC8vDQo+ICsgIFRlbXBCdWZmZXJTaXplID0gQnVmZmVyU2l6ZTsNCj4g KyAgU3RhdHVzID0gSGFuZGxlLT5Xcml0ZSAoDQo+ICsgICAgICAgICAgICAgICAgICAgICBIYW5k bGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAmVGVtcEJ1ZmZlclNpemUsDQo+ICsgICAgICAg ICAgICAgICAgICAgICBCdWZmZXINCj4gKyAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBIYW5kbGUtPkNsb3NlIChIYW5kbGUpOw0K PiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBIYW5kbGUtPkNsb3NlIChI YW5kbGUpOw0KPiArDQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiBkaWZm IC0tZ2l0IGEvTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9uL0NhcHN1bGVBcHAvQ2Fwc3VsZUFwcC5j DQo+IGIvTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9uL0NhcHN1bGVBcHAvQ2Fwc3VsZUFwcC5jDQo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLjBhMjg1NTcNCj4gLS0tIC9k ZXYvbnVsbA0KPiArKysgYi9NZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3VsZUFwcC9DYXBz dWxlQXBwLmMNCj4gQEAgLTAsMCArMSwxMDQ3IEBADQo+ICsvKiogQGZpbGUNCj4gKyAgQSBzaGVs bCBhcHBsaWNhdGlvbiB0aGF0IHRyaWdnZXJzIGNhcHN1bGUgdXBkYXRlIHByb2Nlc3MuDQo+ICsN Cj4gKyAgQ29weXJpZ2h0IChjKSAyMDE2LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC48QlI+DQo+ICsgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRl cmlhbHMNCj4gKyAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVy bXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlDQo+ICsgIHdoaWNoIGFjY29tcGFu aWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkg YmUgZm91bmQgYXQNCj4gKyAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNl bnNlLnBocA0KPiArDQo+ICsgIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBC U0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0KPiArICBXSVRIT1VUIFdBUlJBTlRJRVMg T1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVE Lg0KPiArDQo+ICsqKi8NCj4gKw0KPiArI2luY2x1ZGUgPFVlZmkuaD4NCj4gKyNpbmNsdWRlIDxM aWJyYXJ5L0Jhc2VMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQo+ICsj aW5jbHVkZSA8TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9N ZW1vcnlBbGxvY2F0aW9uTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpQm9vdFNlcnZp Y2VzVGFibGVMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlSdW50aW1lU2VydmljZXNU YWJsZUxpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaUxpYi5oPg0KPiArI2luY2x1ZGUg PExpYnJhcnkvUHJpbnRMaWIuaD4NCj4gKyNpbmNsdWRlIDxQcm90b2NvbC9Mb2FkZWRJbWFnZS5o Pg0KPiArI2luY2x1ZGUgPFByb3RvY29sL1NpbXBsZUZpbGVTeXN0ZW0uaD4NCj4gKyNpbmNsdWRl IDxQcm90b2NvbC9HcmFwaGljc091dHB1dC5oPg0KPiArI2luY2x1ZGUgPEd1aWQvRmlsZUluZm8u aD4NCj4gKyNpbmNsdWRlIDxHdWlkL0dwdC5oPg0KPiArI2luY2x1ZGUgPEd1aWQvR2xvYmFsVmFy aWFibGUuaD4NCj4gKyNpbmNsdWRlIDxHdWlkL0NhcHN1bGVSZXBvcnQuaD4NCj4gKyNpbmNsdWRl IDxHdWlkL1N5c3RlbVJlc291cmNlVGFibGUuaD4NCj4gKyNpbmNsdWRlIDxHdWlkL0ZtcENhcHN1 bGUuaD4NCj4gKyNpbmNsdWRlIDxJbmR1c3RyeVN0YW5kYXJkL1dpbmRvd3NVeENhcHN1bGUuaD4N Cj4gKw0KPiArI2RlZmluZSBDQVBTVUxFX0hFQURFUl9TSVpFICAweDIwDQo+ICsNCj4gKyNkZWZp bmUgTkVTVEVEX0NBUFNVTEVfSEVBREVSX1NJWkUgIFNJWkVfNEtCDQo+ICsjZGVmaW5lIFNZU1RF TV9GSVJNV0FSRV9GTEFHIDB4NTAwMDANCj4gKyNkZWZpbmUgREVWSUNFX0ZJUk1XQVJFX0ZMQUcg MHg3ODAxMA0KPiArDQo+ICsjZGVmaW5lIEVGSV9DQVBTVUxFX0ZST01fRklMRV9ESVIgICAgICAg ICAgICAgICAgICAgICAgICAgICBMIlxcRUZJXFxVcGRhdGVDYXBzdWxlXFw8ZmlsZTovLy9cXEVG SVxVcGRhdGVDYXBzdWxlXD48ZmlsZTovL0VGSS9VcGRhdGVDYXBzdWxlLyUzY2ZpbGU6L0VGSS9V cGRhdGVDYXBzdWxlLyUzZT4iDQo+ICsjZGVmaW5lIEVGSV9PU19JTkRJQ0FUSU9OU19GSUxFX0NB UFNVTEVfREVMSVZFUllfU1VQUE9SVEVEICAweDAwMDAwMDAwMDAwMDAwMDQNCj4gKw0KPiArI2Rl ZmluZSBNQUpPUl9WRVJTSU9OICAgMQ0KPiArI2RlZmluZSBNSU5PUl9WRVJTSU9OICAgMA0KPiAr DQo+ICsjZGVmaW5lIE1BWF9BUkdfTlVNICAgICAxMQ0KPiArI2RlZmluZSBNQVhfQ0FQU1VMRV9O VU0gKE1BWF9BUkdfTlVNIC0gMSkNCj4gKw0KPiArZXh0ZXJuIFVJTlROICBBcmdjOw0KPiArZXh0 ZXJuIENIQVIxNiAqQXJndltdOw0KPiArDQo+ICsvLw0KPiArLy8gRGVmaW5lIGhvdyBtYW55IGJs b2NrIGRlc2NyaXB0b3JzIHdlIHdhbnQgdG8gdGVzdCB3aXRoLg0KPiArLy8NCj4gK1VJTlROICBO dW1iZXJPZkRlc2NyaXB0b3JzID0gMTsNCj4gK1VJTlROICBDYXBzdWxlRmlyc3RJbmRleDsNCj4g K1VJTlROICBDYXBzdWxlTGFzdEluZGV4Ow0KPiArDQo+ICsvKioNCj4gKyAgRHVtcCBjYXBzdWxl IGluZm9ybWF0aW9uDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRo ZSBjYXBzdWxlIGluZm9ybWF0aW9uIGlzIGR1bXBlZC4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQ T1JURUQgICAgICAgIElucHV0IHBhcmFtZXRlciBpcyBub3QgdmFsaWQuDQo+ICsqKi8NCj4gK0VG SV9TVEFUVVMNCj4gK0R1bXBDYXBzdWxlKA0KPiArICBWT0lEDQo+ICsgICk7DQo+ICsNCj4gKy8q Kg0KPiArICBEdW1wIGNhcHN1bGUgc3RhdHVzIHZhcmlhYmxlLg0KPiArDQo+ICsgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgY2Fwc3VsZSBzdGF0dXMgdmFyaWFibGUgaXMgZHVt cGVkLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgSW5wdXQgcGFyYW1ldGVy IGlzIG5vdCB2YWxpZC4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRG1wQ2Fwc3VsZVN0YXR1 c1ZhcmlhYmxlKA0KPiArICBWT0lEDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBEdW1wIEZN UCBwcm90b2NvbCBpbmZvLg0KPiArKiovDQo+ICtWT0lEDQo+ICtEdW1wRm1wRGF0YSgNCj4gKyAg Vk9JRA0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgRHVtcCBFU1JUIGluZm8uDQo+ICsqKi8N Cj4gK1ZPSUQNCj4gK0R1bXBFc3J0RGF0YSgNCj4gKyAgVk9JRA0KPiArICApOw0KPiArDQo+ICsv KioNCj4gKyAgUmVhZCBhIGZpbGUuDQo+ICsNCj4gKyAgQHBhcmFtIEZpbGVOYW1lICAgICAgICBU aGUgZmlsZSB0byBiZSByZWFkLg0KPiArICBAcGFyYW0gQnVmZmVyU2l6ZSAgICAgIFRoZSBmaWxl IGJ1ZmZlciBzaXplDQo+ICsgIEBwYXJhbSBCdWZmZXIgICAgICAgICAgVGhlIGZpbGUgYnVmZmVy DQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICBSZWFkIGZpbGUgc3VjY2Vzc2Z1bGx5 DQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgRmlsZSBub3QgZm91bmQNCj4gKyoqLw0KPiAr RUZJX1NUQVRVUw0KPiArUmVhZEZpbGVUb0J1ZmZlcigNCj4gKyAgSU4gIENIQVIxNiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqRmlsZU5hbWUsDQo+ICsgIE9VVCBVSU5UTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZlclNpemUsDQo+ICsgIE9VVCBWT0lEICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKipCdWZmZXINCj4gKyAgKTsNCj4gKw0KPiArLyoq DQo+ICsgIFdyaXRlIGEgZmlsZS4NCj4gKw0KPiArICBAcGFyYW0gRmlsZU5hbWUgICAgICAgIFRo ZSBmaWxlIHRvIGJlIHdyaXR0ZW4uDQo+ICsgIEBwYXJhbSBCdWZmZXJTaXplICAgICAgVGhlIGZp bGUgYnVmZmVyIHNpemUNCj4gKyAgQHBhcmFtIEJ1ZmZlciAgICAgICAgICBUaGUgZmlsZSBidWZm ZXINCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgIFdyaXRlIGZpbGUgc3VjY2Vzc2Z1 bGx5DQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1dyaXRlRmlsZUZyb21CdWZmZXIoDQo+ICsg IElOICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkZpbGVOYW1lLA0KPiAr ICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlclNpemUsDQo+ ICsgIElOICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZlcg0KPiAr ICApOw0KPiArDQo+ICsvKioNCj4gKw0KPiArICBUaGlzIGZ1bmN0aW9uIHBhcnNlIGFwcGxpY2F0 aW9uIEFSRy4NCj4gKw0KPiArICBAcmV0dXJuIFN0YXR1cw0KPiArKiovDQo+ICtFRklfU1RBVFVT DQo+ICtHZXRBcmcgKA0KPiArICBWT0lEDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBDbGVh ciBBUFAgQVJHLg0KPiArKiovDQo+ICtWT0lEDQo+ICtDbGVhbkFyZyAoDQo+ICsgIFZPSUQNCj4g KyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIENyZWF0ZSBVWCBjYXBzdWxlLg0KPiArDQo+ICsgIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgY2Fwc3VsZSBoZWFkZXIgaXMgYXBwZW5k ZWQuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICBJbnB1dCBwYXJhbWV0ZXIg aXMgbm90IHZhbGlkLg0KPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgTm8gZW5v dWdoIHJlc291cmNlIHRvIGNyZWF0ZSBVWCBjYXBzdWxlLg0KPiArKiovDQo+ICtFRklfU1RBVFVT DQo+ICtDcmVhdGVCbXBGbXAoDQo+ICsgIFZPSUQNCj4gKyAgKQ0KPiArew0KPiArICBDSEFSMTYg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKk91dHB1dENhcHN1bGVOYW1l Ow0KPiArICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkJt cEJ1ZmZlcjsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZpbGVTaXplOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKkJtcE5hbWU7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqRnVsbENhcHN1bGVCdWZmZXI7DQo+ICsgIFVJTlROICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdWxsQ2Fwc3VsZUJ1ZmZlclNpemU7DQo+ICsg IEVGSV9ESVNQTEFZX0NBUFNVTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAqRGlzcGxheUNh cHN1bGU7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBTdGF0dXM7DQo+ICsgIEVGSV9HUkFQSElDU19PVVRQVVRfUFJPVE9DT0wgICAgICAgICAgICAg ICAgICAqR29wOw0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+TG9jYXRlUHJvdG9jb2woJmdFZmlH cmFwaGljc091dHB1dFByb3RvY29sR3VpZCwgTlVMTCwgKFZPSUQgKiopJkdvcCk7DQo+ICsgIGlm IChFRklfRVJST1IoU3RhdHVzKSkgew0KPiArICAgIFByaW50KEwiQ2Fwc3VsZUFwcDogTk8gR09Q IGlzIGZvdW5kLlxuIik7DQo+ICsgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gKyAgfQ0K PiArICBQcmludChMIkN1cnJlbnQgR09QOiBNb2RlIC0gJWQsICIsIEdvcC0+TW9kZS0+TW9kZSk7 DQo+ICsgIFByaW50KEwiSG9yaXpvbnRhbFJlc29sdXRpb24gLSAlZCwgIiwgR29wLT5Nb2RlLT5J bmZvLT5Ib3Jpem9udGFsUmVzb2x1dGlvbik7DQo+ICsgIFByaW50KEwiVmVydGljYWxSZXNvbHV0 aW9uIC0gJWRcbiIsIEdvcC0+TW9kZS0+SW5mby0+VmVydGljYWxSZXNvbHV0aW9uKTsNCj4gKyAg Ly8gSG9yaXpvbnRhbFJlc29sdXRpb24gPj0gQk1QX0lNQUdFX0hFQURFUi5QaXhlbFdpZHRoDQo+ ICsgIC8vIFZlcnRpY2FsUmVzb2x1dGlvbiAgID49IEJNUF9JTUFHRV9IRUFERVIuUGl4ZWxIZWln aHQNCj4gKw0KPiArICBpZiAoQXJnYyAhPSA1KSB7DQo+ICsgICAgUHJpbnQoTCJDYXBzdWxlQXBw OiBJbnZhbGlkIFBhcmFtZXRlci5cbiIpOw0KPiArICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7 DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoU3RyQ21wKEFyZ3ZbM10sIEwiLU8iKSAhPSAwKSB7DQo+ ICsgICAgUHJpbnQoTCJDYXBzdWxlQXBwOiBOTyBvdXRwdXQgY2Fwc3VsZSBuYW1lLlxuIik7DQo+ ICsgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gKyAgfQ0KPiArICBPdXRwdXRDYXBzdWxl TmFtZSA9IEFyZ3ZbNF07DQo+ICsNCj4gKyAgQm1wQnVmZmVyID0gTlVMTDsNCj4gKyAgRmlsZVNp emUgPSAwOw0KPiArICBGdWxsQ2Fwc3VsZUJ1ZmZlciA9IE5VTEw7DQo+ICsNCj4gKyAgQm1wTmFt ZSA9IEFyZ3ZbMl07DQo+ICsgIFN0YXR1cyA9IFJlYWRGaWxlVG9CdWZmZXIoQm1wTmFtZSwgJkZp bGVTaXplLCAmQm1wQnVmZmVyKTsNCj4gKyAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsg ICAgUHJpbnQoTCJDYXBzdWxlQXBwOiBCTVAgaW1hZ2UgKCVzKSBpcyBub3QgZm91bmQuXG4iLCBC bXBOYW1lKTsNCj4gKyAgICBnb3RvIERvbmU7DQo+ICsgIH0NCj4gKw0KPiArICBGdWxsQ2Fwc3Vs ZUJ1ZmZlclNpemUgPSBzaXplb2YoRUZJX0RJU1BMQVlfQ0FQU1VMRSkgKyBGaWxlU2l6ZTsNCj4g KyAgRnVsbENhcHN1bGVCdWZmZXIgPSBBbGxvY2F0ZVBvb2woRnVsbENhcHN1bGVCdWZmZXJTaXpl KTsNCj4gKyAgaWYgKEZ1bGxDYXBzdWxlQnVmZmVyID09IE5VTEwpIHsNCj4gKyAgICBQcmludChM IkNhcHN1bGVBcHA6IENhcHN1bGUgQnVmZmVyIHNpemUgKDB4JXgpIHRvbyBiaWcuXG4iLA0KPiBG dWxsQ2Fwc3VsZUJ1ZmZlclNpemUpOw0KPiArICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VS Q0VTOw0KPiArICAgIGdvdG8gRG9uZTsNCj4gKyAgfQ0KPiArDQo+ICsgIERpc3BsYXlDYXBzdWxl ID0gKEVGSV9ESVNQTEFZX0NBUFNVTEUgKilGdWxsQ2Fwc3VsZUJ1ZmZlcjsNCj4gKyAgQ29weUd1 aWQoJkRpc3BsYXlDYXBzdWxlLT5DYXBzdWxlSGVhZGVyLkNhcHN1bGVHdWlkLCAmZ1dpbmRvd3NV eENhcHN1bGVHdWlkKTsNCj4gKyAgRGlzcGxheUNhcHN1bGUtPkNhcHN1bGVIZWFkZXIuSGVhZGVy U2l6ZSA9IHNpemVvZihEaXNwbGF5Q2Fwc3VsZS0+Q2Fwc3VsZUhlYWRlcik7DQo+ICsgIERpc3Bs YXlDYXBzdWxlLT5DYXBzdWxlSGVhZGVyLkZsYWdzID0gQ0FQU1VMRV9GTEFHU19QRVJTSVNUX0FD Uk9TU19SRVNFVDsNCj4gKyAgRGlzcGxheUNhcHN1bGUtPkNhcHN1bGVIZWFkZXIuQ2Fwc3VsZUlt YWdlU2l6ZSA9IChVSU5UMzIpRnVsbENhcHN1bGVCdWZmZXJTaXplOw0KPiArDQo+ICsgIERpc3Bs YXlDYXBzdWxlLT5JbWFnZVBheWxvYWQuVmVyc2lvbiA9IDE7DQo+ICsgIERpc3BsYXlDYXBzdWxl LT5JbWFnZVBheWxvYWQuQ2hlY2tzdW0gPSAwOw0KPiArICBEaXNwbGF5Q2Fwc3VsZS0+SW1hZ2VQ YXlsb2FkLkltYWdlVHlwZSA9IDA7IC8vIEJNUA0KPiArICBEaXNwbGF5Q2Fwc3VsZS0+SW1hZ2VQ YXlsb2FkLlJlc2VydmVkID0gMDsNCj4gKyAgRGlzcGxheUNhcHN1bGUtPkltYWdlUGF5bG9hZC5N b2RlID0gR29wLT5Nb2RlLT5Nb2RlOw0KPiArICBEaXNwbGF5Q2Fwc3VsZS0+SW1hZ2VQYXlsb2Fk Lk9mZnNldFggPSAwOw0KPiArICBEaXNwbGF5Q2Fwc3VsZS0+SW1hZ2VQYXlsb2FkLk9mZnNldFkg PSAwOw0KPiArDQo+ICsgIENvcHlNZW0oKERpc3BsYXlDYXBzdWxlICsgMSksIEJtcEJ1ZmZlciwg RmlsZVNpemUpOw0KPiArDQo+ICsgIERpc3BsYXlDYXBzdWxlLT5JbWFnZVBheWxvYWQuQ2hlY2tz dW0gPSBDYWxjdWxhdGVDaGVja1N1bTgoRnVsbENhcHN1bGVCdWZmZXIsDQo+IEZ1bGxDYXBzdWxl QnVmZmVyU2l6ZSk7DQo+ICsNCj4gKyAgU3RhdHVzID0gV3JpdGVGaWxlRnJvbUJ1ZmZlcihPdXRw dXRDYXBzdWxlTmFtZSwgRnVsbENhcHN1bGVCdWZmZXJTaXplLA0KPiBGdWxsQ2Fwc3VsZUJ1ZmZl cik7DQo+ICsgIFByaW50KEwiQ2Fwc3VsZUFwcDogV3JpdGUgJXMgJXJcbiIsIE91dHB1dENhcHN1 bGVOYW1lLCBTdGF0dXMpOw0KPiArDQo+ICtEb25lOg0KPiArICBpZiAoQm1wQnVmZmVyICE9IE5V TEwpIHsNCj4gKyAgICBGcmVlUG9vbChCbXBCdWZmZXIpOw0KPiArICB9DQo+ICsNCj4gKyAgaWYg KEZ1bGxDYXBzdWxlQnVmZmVyICE9IE5VTEwpIHsNCj4gKyAgICBGcmVlUG9vbChGdWxsQ2Fwc3Vs ZUJ1ZmZlcik7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ ICsvKioNCj4gKyAgR2V0IEltYWdlVHlwZUlkIGluIHRoZSBGTVAgY2Fwc3VsZSBoZWFkZXIuDQo+ ICsNCj4gKyAgQHBhcmFtIENhcHN1bGVIZWFkZXIgIFRoZSBGTVAgY2Fwc3VsZSBpbWFnZSBoZWFk ZXIuDQo+ICsNCj4gKyAgQHJldHVybiBJbWFnZVR5cGVJZA0KPiArKiovDQo+ICtFRklfR1VJRCAq DQo+ICtHZXRDYXBzdWxlSW1hZ2VUeXBlSWQoDQo+ICsgIElOIEVGSV9DQVBTVUxFX0hFQURFUiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqQ2Fwc3VsZUhlYWRlcg0KPiArICApDQo+ICt7DQo+ ICsgIEVGSV9GSVJNV0FSRV9NQU5BR0VNRU5UX0NBUFNVTEVfSEVBREVSICAgICAgICpGbXBDYXBz dWxlSGVhZGVyOw0KPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqSXRlbU9mZnNldExpc3Q7DQo+ICsgIEVGSV9GSVJNV0FSRV9NQU5BR0VNRU5UX0NBUFNV TEVfSU1BR0VfSEVBREVSICpJbWFnZUhlYWRlcjsNCj4gKw0KPiArICBGbXBDYXBzdWxlSGVhZGVy ID0gKEVGSV9GSVJNV0FSRV9NQU5BR0VNRU5UX0NBUFNVTEVfSEVBREVSICopKChVSU5UOCAqKUNh cHN1bGVIZWFkZXINCj4gKyBDYXBzdWxlSGVhZGVyLT5IZWFkZXJTaXplKTsNCj4gKyAgSXRlbU9m ZnNldExpc3QgPSAoVUlOVDY0ICopKEZtcENhcHN1bGVIZWFkZXIgKyAxKTsNCj4gKyAgaWYgKEZt cENhcHN1bGVIZWFkZXItPlBheWxvYWRJdGVtQ291bnQgPT0gMCkgew0KPiArICAgIHJldHVybiBO VUxMOw0KPiArICB9DQo+ICsgIEltYWdlSGVhZGVyID0gKEVGSV9GSVJNV0FSRV9NQU5BR0VNRU5U X0NBUFNVTEVfSU1BR0VfSEVBREVSICopKChVSU5UOA0KPiAqKUZtcENhcHN1bGVIZWFkZXIgKyBJ dGVtT2Zmc2V0TGlzdFtGbXBDYXBzdWxlSGVhZGVyLT5FbWJlZGRlZERyaXZlckNvdW50XSk7DQo+ ICsgIHJldHVybiAmSW1hZ2VIZWFkZXItPlVwZGF0ZUltYWdlVHlwZUlkOw0KPiArfQ0KPiArDQo+ ICsvKioNCj4gKyAgR2V0IEVTUlQgRndUeXBlIGFjY29yZGluZyB0byBJbWFnZVR5cGVJZA0KPiAr DQo+ICsgIEBwYXJhbSAgSW1hZ2VUeXBlSWQgICBJbWFnZVR5cGVJZCBvZiBhbiBGTVAgY2Fwc3Vs ZS4NCj4gKw0KPiArICBAcmV0dXJuIEVTUlQgRndUeXBlDQo+ICsqKi8NCj4gK1VJTlQzMg0KPiAr R2V0RXNydEZ3VHlwZSgNCj4gKyAgSU4gIEVGSV9HVUlEICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqSW1hZ2VUeXBlSWQNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVT ICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIEVGSV9TWVNURU1fUkVTT1VSQ0VfVEFCTEUg ICpFc3J0Ow0KPiArICBFRklfU1lTVEVNX1JFU09VUkNFX0VOVFJZICAqRXNydEVudHJ5Ow0KPiAr ICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gKw0KPiArICAvLw0KPiArICAv LyBDaGVjayBFU1JUDQo+ICsgIC8vDQo+ICsgIFN0YXR1cyA9IEVmaUdldFN5c3RlbUNvbmZpZ3Vy YXRpb25UYWJsZSgmZ0VmaVN5c3RlbVJlc291cmNlVGFibGVHdWlkLCAoVk9JRA0KPiAqKikmRXNy dCk7DQo+ICsgIGlmICghRUZJX0VSUk9SKFN0YXR1cykpIHsNCj4gKyAgICBFc3J0RW50cnkgPSAo Vk9JRCAqKShFc3J0ICsgMSk7DQo+ICsgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgRXNydC0+ RndSZXNvdXJjZUNvdW50OyBJbmRleCsrLCBFc3J0RW50cnkrKykgew0KPiArICAgICAgaWYgKENv bXBhcmVHdWlkKCZFc3J0RW50cnktPkZ3Q2xhc3MsIEltYWdlVHlwZUlkKSkgew0KPiArICAgICAg ICByZXR1cm4gRXNydEVudHJ5LT5Gd1R5cGU7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArICB9 DQo+ICsNCj4gKyAgcmV0dXJuIEVTUlRfRldfVFlQRV9VTktOT1dOOw0KPiArfQ0KPiArDQo+ICsv KioNCj4gKyAgQXBwZW5kIGEgY2Fwc3VsZSBoZWFkZXIgb24gdG9wIG9mIGN1cnJlbnQgaW1hZ2Uu DQo+ICsgIFRoaXMgZnVuY3Rpb24gZm9sbG93cyBXaW5kb3dzIFVFRkkgRmlybXdhcmUgVXBkYXRl IFBsYXRmb3JtIGRvY3VtZW50Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAg ICAgICBUaGUgY2Fwc3VsZSBoZWFkZXIgaXMgYXBwZW5kZWQuDQo+ICsgIEByZXR2YWwgRUZJX1VO U1VQUE9SVEVEICAgICAgICBJbnB1dCBwYXJhbWV0ZXIgaXMgbm90IHZhbGlkLg0KPiArICBAcmV0 dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgTm8gZW5vdWdoIHJlc291cmNlIHRvIGFwcGVuZCBj YXBzdWxlIGhlYWRlci4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArQ3JlYXRlTmVzdGVkRm1w KA0KPiArICBWT0lEDQo+ICsgICkNCj4gK3sNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICpPdXRwdXRDYXBzdWxlTmFtZTsNCj4gKyAgVk9JRCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpDYXBzdWxlQnVmZmVyOw0KPiAr ICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZVNpemU7 DQo+ICsgIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqQ2Fw c3VsZU5hbWU7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqRnVsbENhcHN1bGVCdWZmZXI7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGdWxsQ2Fwc3VsZUJ1ZmZlclNpemU7DQo+ICsgIEVGSV9DQVBT VUxFX0hFQURFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqTmVzdGVkQ2Fwc3VsZUhlYWRl cjsNCj4gKyAgRUZJX0dVSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpJ bWFnZVR5cGVJZDsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZ3VHlwZTsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFN0YXR1czsNCj4gKw0KPiArICBpZiAoQXJnYyAhPSA1KSB7DQo+ICsgICAgUHJp bnQoTCJDYXBzdWxlQXBwOiBJbnZhbGlkIFBhcmFtZXRlci5cbiIpOw0KPiArICAgIHJldHVybiBF RklfVU5TVVBQT1JURUQ7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoU3RyQ21wKEFyZ3ZbM10sIEwi LU8iKSAhPSAwKSB7DQo+ICsgICAgUHJpbnQoTCJDYXBzdWxlQXBwOiBOTyBvdXRwdXQgY2Fwc3Vs ZSBuYW1lLlxuIik7DQo+ICsgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gKyAgfQ0KPiAr ICBPdXRwdXRDYXBzdWxlTmFtZSA9IEFyZ3ZbNF07DQo+ICsNCj4gKyAgQ2Fwc3VsZUJ1ZmZlciA9 IE5VTEw7DQo+ICsgIEZpbGVTaXplID0gMDsNCj4gKyAgRnVsbENhcHN1bGVCdWZmZXIgPSBOVUxM Ow0KPiArDQo+ICsgIENhcHN1bGVOYW1lID0gQXJndlsyXTsNCj4gKyAgU3RhdHVzID0gUmVhZEZp bGVUb0J1ZmZlcihDYXBzdWxlTmFtZSwgJkZpbGVTaXplLCAmQ2Fwc3VsZUJ1ZmZlcik7DQo+ICsg IGlmIChFRklfRVJST1IoU3RhdHVzKSkgew0KPiArICAgIFByaW50KEwiQ2Fwc3VsZUFwcDogQ2Fw c3VsZSBpbWFnZSAoJXMpIGlzIG5vdCBmb3VuZC5cbiIsIENhcHN1bGVOYW1lKTsNCj4gKyAgICBn b3RvIERvbmU7DQo+ICsgIH0NCj4gKw0KPiArICBJbWFnZVR5cGVJZCA9IEdldENhcHN1bGVJbWFn ZVR5cGVJZChDYXBzdWxlQnVmZmVyKTsNCj4gKyAgaWYgKEltYWdlVHlwZUlkID09IE5VTEwpIHsN Cj4gKyAgICBQcmludChMIkNhcHN1bGVBcHA6IENhcHN1bGUgSW1hZ2VUeXBlSWQgaXMgbm90IGZv dW5kLlxuIik7DQo+ICsgICAgZ290byBEb25lOw0KPiArICB9DQo+ICsgIEZ3VHlwZSA9IEdldEVz cnRGd1R5cGUoSW1hZ2VUeXBlSWQpOw0KPiArICBpZiAoKEZ3VHlwZSAhPSBFU1JUX0ZXX1RZUEVf U1lTVEVNRklSTVdBUkUpICYmIChGd1R5cGUgIT0NCj4gRVNSVF9GV19UWVBFX0RFVklDRUZJUk1X QVJFKSkgew0KPiArICAgIFByaW50KEwiQ2Fwc3VsZUFwcDogQ2Fwc3VsZSBGd1R5cGUgaXMgaW52 YWxpZC5cbiIpOw0KPiArICAgIGdvdG8gRG9uZTsNCj4gKyAgfQ0KPiArDQo+ICsgIEZ1bGxDYXBz dWxlQnVmZmVyU2l6ZSA9IE5FU1RFRF9DQVBTVUxFX0hFQURFUl9TSVpFICsgRmlsZVNpemU7DQo+ ICsgIEZ1bGxDYXBzdWxlQnVmZmVyID0gQWxsb2NhdGVQb29sKEZ1bGxDYXBzdWxlQnVmZmVyU2l6 ZSk7DQo+ICsgIGlmIChGdWxsQ2Fwc3VsZUJ1ZmZlciA9PSBOVUxMKSB7DQo+ICsgICAgUHJpbnQo TCJDYXBzdWxlQXBwOiBDYXBzdWxlIEJ1ZmZlciBzaXplICgweCV4KSB0b28gYmlnLlxuIiwNCj4g RnVsbENhcHN1bGVCdWZmZXJTaXplKTsNCj4gKyAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09V UkNFUzsNCj4gKyAgICBnb3RvIERvbmU7DQo+ICsgIH0NCj4gKw0KPiArICBOZXN0ZWRDYXBzdWxl SGVhZGVyID0gKEVGSV9DQVBTVUxFX0hFQURFUiAqKUZ1bGxDYXBzdWxlQnVmZmVyOw0KPiArICBa ZXJvTWVtKE5lc3RlZENhcHN1bGVIZWFkZXIsIE5FU1RFRF9DQVBTVUxFX0hFQURFUl9TSVpFKTsN Cj4gKyAgQ29weUd1aWQoJk5lc3RlZENhcHN1bGVIZWFkZXItPkNhcHN1bGVHdWlkLCBJbWFnZVR5 cGVJZCk7DQo+ICsgIE5lc3RlZENhcHN1bGVIZWFkZXItPkhlYWRlclNpemUgPSBORVNURURfQ0FQ U1VMRV9IRUFERVJfU0laRTsNCj4gKyAgTmVzdGVkQ2Fwc3VsZUhlYWRlci0+RmxhZ3MgPSAoRndU eXBlID09IEVTUlRfRldfVFlQRV9ERVZJQ0VGSVJNV0FSRSkgPw0KPiBTWVNURU1fRklSTVdBUkVf RkxBRyA6IERFVklDRV9GSVJNV0FSRV9GTEFHOw0KPiArICBOZXN0ZWRDYXBzdWxlSGVhZGVyLT5D YXBzdWxlSW1hZ2VTaXplID0gKFVJTlQzMilGdWxsQ2Fwc3VsZUJ1ZmZlclNpemU7DQo+ICsNCj4g KyAgQ29weU1lbSgoVUlOVDggKilOZXN0ZWRDYXBzdWxlSGVhZGVyICsgTmVzdGVkQ2Fwc3VsZUhl YWRlci0+SGVhZGVyU2l6ZSwNCj4gQ2Fwc3VsZUJ1ZmZlciwgRmlsZVNpemUpOw0KPiArDQo+ICsg IFN0YXR1cyA9IFdyaXRlRmlsZUZyb21CdWZmZXIoT3V0cHV0Q2Fwc3VsZU5hbWUsIEZ1bGxDYXBz dWxlQnVmZmVyU2l6ZSwNCj4gRnVsbENhcHN1bGVCdWZmZXIpOw0KPiArICBQcmludChMIkNhcHN1 bGVBcHA6IFdyaXRlICVzICVyXG4iLCBPdXRwdXRDYXBzdWxlTmFtZSwgU3RhdHVzKTsNCj4gKw0K PiArRG9uZToNCj4gKyAgaWYgKENhcHN1bGVCdWZmZXIgIT0gTlVMTCkgew0KPiArICAgIEZyZWVQ b29sKENhcHN1bGVCdWZmZXIpOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKEZ1bGxDYXBzdWxlQnVm ZmVyICE9IE5VTEwpIHsNCj4gKyAgICBGcmVlUG9vbChGdWxsQ2Fwc3VsZUJ1ZmZlcik7DQo+ICsg IH0NCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsNCj4gKy8qKg0KPiAr ICBDbGVhciBjYXBzdWxlIHN0YXR1cyB2YXJpYWJsZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICAgICAgICAgVGhlIGNhcHN1bGUgc3RhdHVzIHZhcmlhYmxlIGlzIGNsZWFyZWQu DQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0NsZWFyQ2Fwc3VsZVN0YXR1c1ZhcmlhYmxlKA0K PiArICBWT0lEDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAg ICAgICAgICAgU3RhdHVzOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBJbmRleDsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2Fwc3Vs ZVZhck5hbWVbMjBdOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq VGVtcFZhck5hbWU7DQo+ICsNCj4gKyAgU3RyQ3B5UyAoQ2Fwc3VsZVZhck5hbWUsIHNpemVvZihD YXBzdWxlVmFyTmFtZSkvc2l6ZW9mKENhcHN1bGVWYXJOYW1lWzBdKSwNCj4gTCJDYXBzdWxlIik7 DQo+ICsgIFRlbXBWYXJOYW1lID0gQ2Fwc3VsZVZhck5hbWUgKyBTdHJMZW4gKENhcHN1bGVWYXJO YW1lKTsNCj4gKyAgSW5kZXggPSAwOw0KPiArDQo+ICsgIHdoaWxlIChUUlVFKSB7DQo+ICsgICAg VW5pY29kZVNQcmludCAoVGVtcFZhck5hbWUsIDUgKiBzaXplb2YoQ0hBUjE2KSwgTCIlMDR4Iiwg SW5kZXgpOw0KPiArDQo+ICsgICAgU3RhdHVzID0gZ1JULT5TZXRWYXJpYWJsZSAoDQo+ICsgICAg ICAgICAgICAgICAgICAgIENhcHN1bGVWYXJOYW1lLA0KPiArICAgICAgICAgICAgICAgICAgICAm Z0VmaUNhcHN1bGVSZXBvcnRHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgICBFRklfVkFSSUFC TEVfTk9OX1ZPTEFUSUxFIHwgRUZJX1ZBUklBQkxFX1JVTlRJTUVfQUNDRVNTIHwNCj4gRUZJX1ZB UklBQkxFX0JPT1RTRVJWSUNFX0FDQ0VTUywNCj4gKyAgICAgICAgICAgICAgICAgICAgMCwNCj4g KyAgICAgICAgICAgICAgICAgICAgKFZPSUQgKilOVUxMDQo+ICsgICAgICAgICAgICAgICAgICAg ICk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgICAvLw0KPiArICAg ICAgLy8gVGhlcmUgaXMgbm8gY2Fwc3VsZSB2YXJpYWJsZXMsIHF1aXQNCj4gKyAgICAgIC8vDQo+ ICsgICAgICBicmVhazsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBJbmRleCsrOw0KPiArICAgIGlm IChJbmRleCA+IDB4RkZGRikgew0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgfQ0KPiArICB9DQo+ ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgR2V0 IHRoZSBhY3RpdmUgVUVGSSBzeXN0ZW0gcGFydGl0aW9uIGZyb20gYm9vdG9wdGlvbiBsaXN0Lg0K PiArDQo+ICsgIEBwYXJhbVtvdXRdIEZzICAgIFNpbXBsZSBGaWxlIFN5c3RlbSBwcm90b2NvbCBv biB0aGUgYWN0aXZlIFVFRkkgc3lzdGVtIHBhcnRpdGlvbg0KPiArDQo+ICsgIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICBhY3RpdmUgVUVGSSBzeXN0ZW0gcGFydGl0aW9uIGZvdW5kDQo+ICsqKi8NCj4g K0VGSV9TVEFUVVMNCj4gK0dldEVmaVN5c1BhcnRpdGlvbigNCj4gKyAgT1VUIEVGSV9TSU1QTEVf RklMRV9TWVNURU1fUFJPVE9DT0wgKipGcw0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMg ICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX1NJTVBMRV9GSUxFX1NZU1RF TV9QUk9UT0NPTCAgKkZzVGVtcDsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgTm9IYW5kbGVzOw0KPiArICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICAgICAqSGFu ZGxlczsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsN Cj4gKyAgSGFuZGxlcyA9IE5VTEw7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gc2VhcmNoIGZvciBF Rkkgc3lzdGVtIHBhcnRpdGlvbiBwcm90b2NvbCBvbiBCb290IG9wdGlvbiBkZXZpY2UgcGF0aA0K PiArICAvLw0KPiArICBTdGF0dXMgPSBnQlMtPkxvY2F0ZUhhbmRsZUJ1ZmZlcihCeVByb3RvY29s LCAmZ0VmaVBhcnRUeXBlU3lzdGVtUGFydEd1aWQsIE5VTEwsDQo+ICZOb0hhbmRsZXMsICZIYW5k bGVzKTsNCj4gKyAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1 czsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIFNraXAgQm9vdE9wdGlvbnMgd2l0aGlu IEZWDQo+ICsgIC8vDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IE5vSGFuZGxlczsgSW5k ZXgrKykgew0KPiArICAgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKEhhbmRsZXNbSW5k ZXhdLCAmZ0VmaVNpbXBsZUZpbGVTeXN0ZW1Qcm90b2NvbEd1aWQsDQo+IChWT0lEICoqKSZGc1Rl bXApOw0KPiArICAgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKXsNCj4gKyAgICAgICpGcyA9IEZz VGVtcDsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArICByZXR1cm4gU3Rh dHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQ29weSBhIGxpc3Qgb2YgY2Fwc3VsZSBpbWFn ZXMgdG8gdGhlIGFjdGl2ZSBVRUZJIHN5c3RlbSBwYXJ0aXRpb24gZnJvbSBib290b3B0aW9uDQo+ IGxpc3QuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSBDYXBzdWxlQnVmZmVyICAgIEFuIGFycmF5IG9m IHBvaW50ZXIgdG8gY2Fwc3VsZSBpbWFnZXMNCj4gKyAgQHBhcmFtW2luXSBGaWxlU2l6ZSAgICAg ICAgIEFuIGFycmF5IG9mIFVJTlROIHRvIGNhcHN1bGUgaW1hZ2VzIHNpemUNCj4gKyAgQHBhcmFt W2luXSBDYXBzdWxlTnVtICAgICAgIFRoZSBjb3VudCBvZiBjYXBzdWxlIGltYWdlcw0KPiArDQo+ ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICBDYXBzdWxlIGltYWdlcyBhcmUgY29waWVkIHRvIHRo ZSBhY3RpdmUgVUVGSSBzeXN0ZW0gcGFydGl0aW9uDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4g K0NvcHlDYXBzdWxlVG9BY3RpdmVFZmlQYXJ0aXRpb24oDQo+ICsgIElOIFZPSUQgICAgICAgICAg ICAgICAgICAgICAgICAgICoqQ2Fwc3VsZUJ1ZmZlciwNCj4gKyAgSU4gVUlOVE4gICAgICAgICAg ICAgICAgICAgICAgICAgKkZpbGVTaXplLA0KPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAg ICAgICAgICBDYXBzdWxlTnVtDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAg ICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAg ICAgICAqQ2Fwc3VsZU5hbWU7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAg IEluZGV4Ow0KPiArICBFRklfU0lNUExFX0ZJTEVfU1lTVEVNX1BST1RPQ09MICAqRnM7DQo+ICsg IEVGSV9GSUxFX0hBTkRMRSAgICAgICAgICAgICAgICAgIFJvb3REaXI7DQo+ICsgIEVGSV9GSUxF X0hBTkRMRSAgICAgICAgICAgICAgICAgIENhcHN1bGVEaXI7DQo+ICsgIEVGSV9GSUxFX0hBTkRM RSAgICAgICAgICAgICAgICAgIERlc3RIYW5kbGU7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAg ICAgICAgICAgICAgIERhdGFTaXplOw0KPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAg ICAgICBPc0luZGljYXRpb247DQo+ICsNCj4gKyAgUm9vdERpciAgICAgID0gTlVMTDsNCj4gKyAg Q2Fwc3VsZURpciAgID0gTlVMTDsNCj4gKw0KPiArICBTdGF0dXMgPSBHZXRFZmlTeXNQYXJ0aXRp b24oJkZzKTsNCj4gKyAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgUHJpbnQgKEwi Q2FuIG5vdCBmaW5kIGFjdGl2ZSBVRUZJIFN5c3RlbSBQYXJ0aXRpb25cbiIpOw0KPiArICAgIHJl dHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBGcy0+T3BlblZvbHVtZShG cywgJlJvb3REaXIpOw0KPiArICBpZiAoRUZJX0VSUk9SKFN0YXR1cykpIHsNCj4gKyAgICBnb3Rv IEVYSVQ7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBSb290RGlyLT5PcGVuKA0KPiArICAg ICAgICAgICAgICAgICAgICAgIFJvb3REaXIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgJkNh cHN1bGVEaXIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgRUZJX0NBUFNVTEVfRlJPTV9GSUxF X0RJUiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICBFRklfRklMRV9NT0RFX1JFQUQgfCBFRklf RklMRV9NT0RFX1dSSVRFIHwgRUZJX0ZJTEVfTU9ERV9DUkVBVEUsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgRUZJX0ZJTEVfRElSRUNUT1JZDQo+ICsgICAgICAgICAgICAgICAgICAgICAgKTsN Cj4gKyAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgZ290byBFWElUOw0KPiArICB9 DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gUmVhZCB0aGUgaW5wdXQgZmlsZXMuDQo+ICsgIC8vDQo+ ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IENhcHN1bGVOdW07IEluZGV4KyspIHsNCj4gKyAg ICBDYXBzdWxlTmFtZSA9IEFyZ3ZbQ2Fwc3VsZUZpcnN0SW5kZXggKyBJbmRleF07DQo+ICsgICAg U3RhdHVzID0gQ2Fwc3VsZURpci0+T3BlbigNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg IENhcHN1bGVEaXIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAmRGVzdEhhbmRsZSwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENhcHN1bGVOYW1lLA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgRUZJX0ZJTEVfTU9ERV9SRUFEIHwgRUZJX0ZJTEVfTU9ERV9XUklU RSB8DQo+IEVGSV9GSUxFX01PREVfQ1JFQVRFLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgRUZJX0ZJTEVfQVJDSElWRQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4g KyAgICBpZiAoRUZJX0VSUk9SKFN0YXR1cykpIHsNCj4gKyAgICAgIFByaW50KEwiQ2Fwc3VsZUFw cDogJXMgb3BlbiBlcnJvciAtICVyXG4iLCBDYXBzdWxlTmFtZSwgU3RhdHVzKTsNCj4gKyAgICAg IGNvbnRpbnVlOw0KPiArICAgIH0NCj4gKw0KPiArICAgIERhdGFTaXplID0gRmlsZVNpemVbSW5k ZXhdOw0KPiArICAgIFN0YXR1cyA9IERlc3RIYW5kbGUtPldyaXRlKA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgRGVzdEhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICZEYXRhU2l6ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENhcHN1bGVCdWZmZXJb SW5kZXhdDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIERlc3RIYW5k bGUtPkNsb3NlKERlc3RIYW5kbGUpOw0KPiArICAgIGlmIChFRklfRVJST1IoU3RhdHVzKSkgew0K PiArICAgICAgUHJpbnQoTCJDYXBzdWxlQXBwOiAlcyB3cml0ZSBlcnJvciAtICVyLCBGaWxlU2l6 ZSAtIDB4JXhcbiIsIENhcHN1bGVOYW1lLA0KPiBTdGF0dXMsIEZpbGVTaXplW0luZGV4XSk7DQo+ ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gZ1JULT5HZXRWYXJpYWJsZSAoDQo+ ICsgICAgICAgICAgICAgICAgICBMIk9zSW5kaWNhdGlvbnMiLA0KPiArICAgICAgICAgICAgICAg ICAgJmdFZmlHbG9iYWxWYXJpYWJsZUd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICBOVUxMLA0K PiArICAgICAgICAgICAgICAgICAgJkRhdGFTaXplLA0KPiArICAgICAgICAgICAgICAgICAgKFZP SUQgKikgJk9zSW5kaWNhdGlvbg0KPiArICAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICBp ZiAoRUZJX0VSUk9SKFN0YXR1cykgfHwgRGF0YVNpemUgIT0gc2l6ZW9mKE9zSW5kaWNhdGlvbikp IHsNCj4gKyAgICBPc0luZGljYXRpb24gPSAwOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAg Ly8gU2V0IE9zSW5kaWNhdGlvbnMgVmFyaWFibGUgRUZJX09TX0lORElDQVRJT05TX0ZJTEVfQ0FQ U1VMRV9ERUxJVkVSWV9TVVBQT1JURUQgYml0DQo+ICsgIC8vDQo+ICsgIE9zSW5kaWNhdGlvbiB8 PSBFRklfT1NfSU5ESUNBVElPTlNfRklMRV9DQVBTVUxFX0RFTElWRVJZX1NVUFBPUlRFRDsNCj4g KyAgU3RhdHVzID0gZ1JULT5TZXRWYXJpYWJsZSAoDQo+ICsgICAgICAgICAgICAgICAgICBMIk9z SW5kaWNhdGlvbnMiLA0KPiArICAgICAgICAgICAgICAgICAgJmdFZmlHbG9iYWxWYXJpYWJsZUd1 aWQsDQo+ICsgICAgICAgICAgICAgICAgICBFRklfVkFSSUFCTEVfTk9OX1ZPTEFUSUxFIHwgRUZJ X1ZBUklBQkxFX1JVTlRJTUVfQUNDRVNTIHwNCj4gKyAgICAgICAgICAgICAgICAgIEVGSV9WQVJJ QUJMRV9CT09UU0VSVklDRV9BQ0NFU1MsDQo+ICsgICAgICAgICAgICAgICAgICBzaXplb2YoT3NJ bmRpY2F0aW9uKSwNCj4gKyAgICAgICAgICAgICAgICAgIChWT0lEICopJk9zSW5kaWNhdGlvbg0K PiArICAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArDQo+ICtFWElUOg0KPiArICBpZiAoUm9v dERpciAhPSBOVUxMKSB7DQo+ICsgICAgUm9vdERpci0+Q2xvc2UoUm9vdERpcik7DQo+ICsgIH0N Cj4gKw0KPiArICBpZiAoQ2Fwc3VsZURpciAhPSBOVUxMKSB7DQo+ICsgICAgQ2Fwc3VsZURpci0+ Q2xvc2UoQ2Fwc3VsZURpcik7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAgQnVpbGQgR2F0aGVyIGxpc3QgZm9yIGEgbGlzdCBvZiBjYXBz dWxlIGltYWdlcy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBDYXBzdWxlQnVmZmVyICAgIEFuIGFy cmF5IG9mIHBvaW50ZXIgdG8gY2Fwc3VsZSBpbWFnZXMNCj4gKyAgQHBhcmFtW2luXSAgRmlsZVNp emUgICAgICAgICBBbiBhcnJheSBvZiBVSU5UTiB0byBjYXBzdWxlIGltYWdlcyBzaXplDQo+ICsg IEBwYXJhbVtpbl0gIENhcHN1bGVOdW0gICAgICAgVGhlIGNvdW50IG9mIGNhcHN1bGUgaW1hZ2Vz DQo+ICsgIEBwYXJhbVtvdXRdIEJsb2NrRGVzY3JpcHRvcnMgVGhlIGJsb2NrIGRlc2NyaXB0b3Jz IGZvciB0aGUgY2Fwc3VsZSBpbWFnZXMNCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTIFRo ZSBibG9jayBkZXNjcmlwdG9ycyBmb3IgdGhlIGNhcHN1bGUgaW1hZ2VzIGFyZSBjb25zdHJ1Y3Rl ZC4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArQnVpbGRHYXRoZXJMaXN0KA0KPiArICBJTiBW T0lEICAgICAgICAgICAgICAgICAgICAgICAgICAqKkNhcHN1bGVCdWZmZXIsDQo+ICsgIElOIFVJ TlROICAgICAgICAgICAgICAgICAgICAgICAgICpGaWxlU2l6ZSwNCj4gKyAgSU4gVUlOVE4gICAg ICAgICAgICAgICAgICAgICAgICAgQ2Fwc3VsZU51bSwNCj4gKyAgT1VUIEVGSV9DQVBTVUxFX0JM T0NLX0RFU0NSSVBUT1IgKipCbG9ja0Rlc2NyaXB0b3JzDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJ X1NUQVRVUyAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBFRklfQ0FQU1VMRV9CTE9D S19ERVNDUklQVE9SICAqQmxvY2tEZXNjcmlwdG9yczE7DQo+ICsgIEVGSV9DQVBTVUxFX0JMT0NL X0RFU0NSSVBUT1IgICpCbG9ja0Rlc2NyaXB0b3JzMjsNCj4gKyAgRUZJX0NBUFNVTEVfQkxPQ0tf REVTQ1JJUFRPUiAgKkJsb2NrRGVzY3JpcHRvclByZTsNCj4gKyAgRUZJX0NBUFNVTEVfQkxPQ0tf REVTQ1JJUFRPUiAgKkJsb2NrRGVzY3JpcHRvcnNIZWFkZXI7DQo+ICsgIEVGSV9DQVBTVUxFX0JM T0NLX0RFU0NSSVBUT1IgICpUZW1wQmxvY2tQdHI7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAg ICAgICAgICAgICpUZW1wRGF0YVB0cjsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICAgU2l6ZUxlZnQ7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIFNpemU7DQo+ ICsgIElOVDMyICAgICAgICAgICAgICAgICAgICAgICAgIENvdW50Ow0KPiArICBJTlQzMiAgICAg ICAgICAgICAgICAgICAgICAgICBOdW1iZXI7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICAgIEluZGV4Ow0KPiArDQo+ICsgIFRlbXBCbG9ja1B0ciAgICAgICAgICAgPSBOVUxMOw0K PiArICBCbG9ja0Rlc2NyaXB0b3JzMSAgICAgID0gTlVMTDsNCj4gKyAgQmxvY2tEZXNjcmlwdG9y czIgICAgICA9IE5VTEw7DQo+ICsgIEJsb2NrRGVzY3JpcHRvclByZSAgICAgPSBOVUxMOw0KPiAr ICBCbG9ja0Rlc2NyaXB0b3JzSGVhZGVyID0gTlVMTDsNCj4gKw0KPiArICBmb3IgKEluZGV4ID0g MDsgSW5kZXggPCBDYXBzdWxlTnVtOyBJbmRleCsrKSB7DQo+ICsgICAgLy8NCj4gKyAgICAvLyBB bGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBkZXNjcmlwdG9ycy4NCj4gKyAgICAvLw0KPiArICAgIGlm IChOdW1iZXJPZkRlc2NyaXB0b3JzID09IDEpIHsNCj4gKyAgICAgIENvdW50ID0gMjsNCj4gKyAg ICB9IGVsc2Ugew0KPiArICAgICAgQ291bnQgPSAoSU5UMzIpKE51bWJlck9mRGVzY3JpcHRvcnMg KyAyKSAvIDI7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgU2l6ZSAgICAgICAgICAgICAgID0gQ291 bnQgKiBzaXplb2YgKEVGSV9DQVBTVUxFX0JMT0NLX0RFU0NSSVBUT1IpOw0KPiArICAgIEJsb2Nr RGVzY3JpcHRvcnMxICA9IEFsbG9jYXRlUnVudGltZVplcm9Qb29sIChTaXplKTsNCj4gKyAgICBp ZiAoQmxvY2tEZXNjcmlwdG9yczEgPT0gTlVMTCkgew0KPiArICAgICAgUHJpbnQgKEwiQ2Fwc3Vs ZUFwcDogZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgZGVzY3JpcHRvcnNcbiIpOw0KPiAr ICAgICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgICAgICBnb3RvIEVSUkVY SVQ7DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAgICAgIFByaW50IChMIkNhcHN1bGVBcHA6IGNyZWF0 aW5nIGNhcHN1bGUgZGVzY3JpcHRvcnMgYXQgMHglWFxuIiwgKFVJTlROKQ0KPiBCbG9ja0Rlc2Ny aXB0b3JzMSk7DQo+ICsgICAgICBQcmludCAoTCJDYXBzdWxlQXBwOiBjYXBzdWxlIGRhdGEgc3Rh cnRzICAgICAgICAgIGF0IDB4JVggd2l0aCBzaXplIDB4JVhcbiIsDQo+IChVSU5UTikgQ2Fwc3Vs ZUJ1ZmZlciwgRmlsZVNpemUpOw0KPiArICAgIH0NCj4gKw0KPiArICAgIC8vDQo+ICsgICAgLy8g UmVjb3JkIGRlc2NpcnB0b3IgaGVhZGVyDQo+ICsgICAgLy8NCj4gKyAgICBpZiAoSW5kZXggPT0g MCkgew0KPiArICAgICAgQmxvY2tEZXNjcmlwdG9yc0hlYWRlciA9IEJsb2NrRGVzY3JpcHRvcnMx Ow0KPiArICAgIH0NCj4gKw0KPiArICAgIGlmIChCbG9ja0Rlc2NyaXB0b3JQcmUgIT0gTlVMTCkg ew0KPiArICAgICAgQmxvY2tEZXNjcmlwdG9yUHJlLT5Vbmlvbi5Db250aW51YXRpb25Qb2ludGVy ID0gKFVJTlROKSBCbG9ja0Rlc2NyaXB0b3JzMTsNCj4gKyAgICAgIEJsb2NrRGVzY3JpcHRvclBy ZS0+TGVuZ3RoID0gMDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICAvLw0KPiArICAgIC8vIEZpbGwg dGhlbSBpbg0KPiArICAgIC8vDQo+ICsgICAgVGVtcEJsb2NrUHRyICA9IEJsb2NrRGVzY3JpcHRv cnMxOw0KPiArICAgIFRlbXBEYXRhUHRyICAgPSBDYXBzdWxlQnVmZmVyW0luZGV4XTsNCj4gKyAg ICBTaXplTGVmdCAgICAgID0gRmlsZVNpemVbSW5kZXhdOw0KPiArICAgIGZvciAoTnVtYmVyID0g MDsgKE51bWJlciA8IENvdW50IC0gMSkgJiYgKFNpemVMZWZ0ICE9IDApOyBOdW1iZXIrKykgew0K PiArICAgICAgLy8NCj4gKyAgICAgIC8vIERpdmlkZSByZW1haW5pbmcgZGF0YSBpbiBoYWxmDQo+ ICsgICAgICAvLw0KPiArICAgICAgaWYgKE51bWJlck9mRGVzY3JpcHRvcnMgIT0gMSkgew0KPiAr ICAgICAgICBpZiAoU2l6ZUxlZnQgPT0gMSkgew0KPiArICAgICAgICAgIFNpemUgPSAxOw0KPiAr ICAgICAgICB9IGVsc2Ugew0KPiArICAgICAgICAgIFNpemUgPSBTaXplTGVmdCAvIDI7DQo+ICsg ICAgICAgIH0NCj4gKyAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgIFNpemUgPSBTaXplTGVmdDsN Cj4gKyAgICAgIH0NCj4gKyAgICAgIFRlbXBCbG9ja1B0ci0+VW5pb24uRGF0YUJsb2NrICAgID0g KFVJTlROKVRlbXBEYXRhUHRyOw0KPiArICAgICAgVGVtcEJsb2NrUHRyLT5MZW5ndGggID0gU2l6 ZTsNCj4gKyAgICAgIFByaW50IChMIkNhcHN1bGVBcHA6IGNhcHN1bGUgYmxvY2svc2l6ZSAgICAg ICAgICAgICAgMHglWC8weCVYXG4iLCAoVUlOVE4pDQo+IFRlbXBEYXRhUHRyLCBTaXplKTsNCj4g KyAgICAgIFNpemVMZWZ0IC09IFNpemU7DQo+ICsgICAgICBUZW1wRGF0YVB0ciArPSBTaXplOw0K PiArICAgICAgVGVtcEJsb2NrUHRyKys7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgLy8NCj4gKyAg ICAvLyBBbGxvY2F0ZSB0aGUgc2Vjb25kIGxpc3QsIHBvaW50IHRoZSBmaXJzdCBibG9jaydzIGxh c3QgZW50cnkgdG8gcG9pbnQNCj4gKyAgICAvLyB0byB0aGlzIG9uZSwgYW5kIGZpbGwgdGhpcyBv bmUgaW4uIFdvcnN0IGNhc2UgaXMgdGhhdCB0aGUgcHJldmlvdXMNCj4gKyAgICAvLyBsaXN0IG9u bHkgaGFkIG9uZSBlbGVtZW50IHRoYXQgcG9pbnRlZCBoZXJlLCBzbyB3ZSBuZWVkIGF0IGxlYXN0 IHR3bw0KPiArICAgIC8vIGVsZW1lbnRzIC0tIG9uZSB0byBwb2ludCB0byBhbGwgdGhlIGRhdGEs IGFub3RoZXIgdG8gdGVybWluYXRlIHRoZSBsaXN0Lg0KPiArICAgIC8vDQo+ICsgICAgaWYgKChO dW1iZXJPZkRlc2NyaXB0b3JzICE9IDEpICYmIChTaXplTGVmdCAhPSAwKSkgew0KPiArICAgICAg Q291bnQgPSAoSU5UMzIpKE51bWJlck9mRGVzY3JpcHRvcnMgKyAyKSAtIENvdW50Ow0KPiArICAg ICAgaWYgKENvdW50ID09IDEpIHsNCj4gKyAgICAgICAgQ291bnQrKzsNCj4gKyAgICAgIH0NCj4g Kw0KPiArICAgICAgU2l6ZSAgICAgICAgICAgICAgPSBDb3VudCAqIHNpemVvZiAoRUZJX0NBUFNV TEVfQkxPQ0tfREVTQ1JJUFRPUik7DQo+ICsgICAgICBCbG9ja0Rlc2NyaXB0b3JzMiA9IEFsbG9j YXRlUnVudGltZVplcm9Qb29sIChTaXplKTsNCj4gKyAgICAgIGlmIChCbG9ja0Rlc2NyaXB0b3Jz MiA9PSBOVUxMKSB7DQo+ICsgICAgICAgIFByaW50IChMIkNhcHN1bGVBcHA6IGZhaWxlZCB0byBh bGxvY2F0ZSBtZW1vcnkgZm9yIGRlc2NyaXB0b3JzXG4iKTsNCj4gKyAgICAgICAgU3RhdHVzID0g RUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgICAgICAgIGdvdG8gRVJSRVhJVDsNCj4gKyAgICAg IH0NCj4gKw0KPiArICAgICAgLy8NCj4gKyAgICAgIC8vIFBvaW50IHRoZSBmaXJzdCBsaXN0J3Mg bGFzdCBlbGVtZW50IHRvIHBvaW50IHRvIHRoaXMgc2Vjb25kIGxpc3QuDQo+ICsgICAgICAvLw0K PiArICAgICAgVGVtcEJsb2NrUHRyLT5Vbmlvbi5Db250aW51YXRpb25Qb2ludGVyICAgPSAoVUlO VE4pIEJsb2NrRGVzY3JpcHRvcnMyOw0KPiArDQo+ICsgICAgICBUZW1wQmxvY2tQdHItPkxlbmd0 aCAgPSAwOw0KPiArICAgICAgVGVtcEJsb2NrUHRyID0gQmxvY2tEZXNjcmlwdG9yczI7DQo+ICsg ICAgICBmb3IgKE51bWJlciA9IDA7IE51bWJlciA8IENvdW50IC0gMTsgTnVtYmVyKyspIHsNCj4g KyAgICAgICAgLy8NCj4gKyAgICAgICAgLy8gSWYgc2Vjb25kLXRvLWxhc3Qgb25lLCB0aGVuIGR1 bXAgcmVzdCB0byB0aGlzIGVsZW1lbnQNCj4gKyAgICAgICAgLy8NCj4gKyAgICAgICAgaWYgKE51 bWJlciA9PSAoQ291bnQgLSAyKSkgew0KPiArICAgICAgICAgIFNpemUgPSBTaXplTGVmdDsNCj4g KyAgICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgICAvLw0KPiArICAgICAgICAgIC8vIERpdmlk ZSByZW1haW5pbmcgZGF0YSBpbiBoYWxmDQo+ICsgICAgICAgICAgLy8NCj4gKyAgICAgICAgICBp ZiAoU2l6ZUxlZnQgPT0gMSkgew0KPiArICAgICAgICAgICAgU2l6ZSA9IDE7DQo+ICsgICAgICAg ICAgfSBlbHNlIHsNCj4gKyAgICAgICAgICAgIFNpemUgPSBTaXplTGVmdCAvIDI7DQo+ICsgICAg ICAgICAgfQ0KPiArICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgVGVtcEJsb2NrUHRyLT5Vbmlv bi5EYXRhQmxvY2sgICAgPSAoVUlOVE4pVGVtcERhdGFQdHI7DQo+ICsgICAgICAgIFRlbXBCbG9j a1B0ci0+TGVuZ3RoICA9IFNpemU7DQo+ICsgICAgICAgIFByaW50IChMIkNhcHN1bGVBcHA6IGNh cHN1bGUgYmxvY2svc2l6ZSAgICAgICAgICAgICAgMHglWC8weCVYXG4iLCAoVUlOVE4pDQo+IFRl bXBEYXRhUHRyLCBTaXplKTsNCj4gKyAgICAgICAgU2l6ZUxlZnQgLT0gU2l6ZTsNCj4gKyAgICAg ICAgVGVtcERhdGFQdHIgKz0gU2l6ZTsNCj4gKyAgICAgICAgVGVtcEJsb2NrUHRyKys7DQo+ICsg ICAgICAgIGlmIChTaXplTGVmdCA9PSAwKSB7DQo+ICsgICAgICAgICAgYnJlYWs7DQo+ICsgICAg ICAgIH0NCj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ICsNCj4gKyAgICBCbG9ja0Rlc2NyaXB0b3JQ cmUgPSBUZW1wQmxvY2tQdHI7DQo+ICsgICAgQmxvY2tEZXNjcmlwdG9yczEgID0gTlVMTDsNCj4g KyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIE51bGwtdGVybWluYXRlLg0KPiArICAvLw0KPiAr ICBpZiAoVGVtcEJsb2NrUHRyICE9IE5VTEwpIHsNCj4gKyAgICBUZW1wQmxvY2tQdHItPlVuaW9u LkNvbnRpbnVhdGlvblBvaW50ZXIgICAgPSAoVUlOVE4pTlVMTDsNCj4gKyAgICBUZW1wQmxvY2tQ dHItPkxlbmd0aCAgPSAwOw0KPiArICAgICpCbG9ja0Rlc2NyaXB0b3JzID0gQmxvY2tEZXNjcmlw dG9yc0hlYWRlcjsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gKw0K PiArRVJSRVhJVDoNCj4gKyAgaWYgKEJsb2NrRGVzY3JpcHRvcnMxICE9IE5VTEwpIHsNCj4gKyAg ICBGcmVlUG9vbChCbG9ja0Rlc2NyaXB0b3JzMSk7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoQmxv Y2tEZXNjcmlwdG9yczIgIT0gTlVMTCkgew0KPiArICAgIEZyZWVQb29sKEJsb2NrRGVzY3JpcHRv cnMyKTsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8q Kg0KPiArICBDbGVhciB0aGUgR2F0aGVyIGxpc3QgZm9yIGEgbGlzdCBvZiBjYXBzdWxlIGltYWdl cy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBCbG9ja0Rlc2NyaXB0b3JzIFRoZSBibG9jayBkZXNj cmlwdG9ycyBmb3IgdGhlIGNhcHN1bGUgaW1hZ2VzDQo+ICsgIEBwYXJhbVtpbl0gIENhcHN1bGVO dW0gICAgICAgVGhlIGNvdW50IG9mIGNhcHN1bGUgaW1hZ2VzDQo+ICsqKi8NCj4gK1ZPSUQNCj4g K0NsZWFuR2F0aGVyTGlzdCgNCj4gKyAgSU4gRUZJX0NBUFNVTEVfQkxPQ0tfREVTQ1JJUFRPUiAg ICpCbG9ja0Rlc2NyaXB0b3JzLA0KPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAg ICAgQ2Fwc3VsZU51bQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9DQVBTVUxFX0JMT0NLX0RFU0NS SVBUT1IgICAqVGVtcEJsb2NrUHRyOw0KPiArICBFRklfQ0FQU1VMRV9CTE9DS19ERVNDUklQVE9S ICAgKlRlbXBCbG9ja1B0cjE7DQo+ICsgIEVGSV9DQVBTVUxFX0JMT0NLX0RFU0NSSVBUT1IgICAq VGVtcEJsb2NrUHRyMjsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4 Ow0KPiArDQo+ICsgIGlmIChCbG9ja0Rlc2NyaXB0b3JzICE9IE5VTEwpIHsNCj4gKyAgICBUZW1w QmxvY2tQdHIxID0gQmxvY2tEZXNjcmlwdG9yczsNCj4gKyAgICB3aGlsZSAoMSl7DQo+ICsgICAg ICBUZW1wQmxvY2tQdHIgPSBUZW1wQmxvY2tQdHIxOw0KPiArICAgICAgZm9yIChJbmRleCA9IDA7 IEluZGV4IDwgQ2Fwc3VsZU51bTsgSW5kZXgrKykgew0KPiArICAgICAgICBpZiAoVGVtcEJsb2Nr UHRyW0luZGV4XS5MZW5ndGggPT0gMCkgew0KPiArICAgICAgICAgIGJyZWFrOw0KPiArICAgICAg ICB9DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIGlmIChUZW1wQmxvY2tQdHJbSW5kZXhdLlVu aW9uLkNvbnRpbnVhdGlvblBvaW50ZXIgPT0gKFVJTlROKU5VTEwpIHsNCj4gKyAgICAgICAgYnJl YWs7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIFRlbXBCbG9ja1B0cjIgPSAoVk9JRCAqKSAo KFVJTlROKSBUZW1wQmxvY2tQdHItPlVuaW9uLkNvbnRpbnVhdGlvblBvaW50ZXIpOw0KPiArICAg ICAgRnJlZVBvb2woVGVtcEJsb2NrUHRyMSk7DQo+ICsgICAgICBUZW1wQmxvY2tQdHIxID0gVGVt cEJsb2NrUHRyMjsNCj4gKyAgICB9DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFBy aW50IEFQUCB1c2FnZS4NCj4gKyoqLw0KPiArVk9JRA0KPiArUHJpbnRVc2FnZSAoDQo+ICsgIFZP SUQNCj4gKyAgKQ0KPiArew0KPiArICBQcmludChMIkNhcHN1bGVBcHA6ICB1c2FnZVxuIik7DQo+ ICsgIFByaW50KEwiICBDYXBzdWxlQXBwIFstRl0gPENhcHN1bGUuLi4+IFstTlJdXG4iKTsNCj4g KyAgUHJpbnQoTCIgIENhcHN1bGVBcHAgLVNcbiIpOw0KPiArICBQcmludChMIiAgQ2Fwc3VsZUFw cCAtQ1xuIik7DQo+ICsgIFByaW50KEwiICBDYXBzdWxlQXBwIC1QXG4iKTsNCj4gKyAgUHJpbnQo TCIgIENhcHN1bGVBcHAgLUVcbiIpOw0KPiArICBQcmludChMIiAgQ2Fwc3VsZUFwcCAtRyA8Qk1Q PiAtTyA8Q2Fwc3VsZT5cbiIpOw0KPiArICBQcmludChMIiAgQ2Fwc3VsZUFwcCAtTiA8Q2Fwc3Vs ZT4gLU8gPE5lc3RlZENhcHN1bGU+XG4iKTsNCj4gKyAgUHJpbnQoTCIgIENhcHN1bGVBcHAgLUR8 LURTIDxDYXBzdWxlPlxuIik7DQo+ICsgIFByaW50KEwiUGFyYW1ldGVyOlxuIik7DQo+ICsgIFBy aW50KEwiICAtRjogIFB1dCBjYXBzdWxlIGZpbGUgdG8gZGlzay5cbiIpOw0KPiArICBQcmludChM IiAgICAgICBObyAtRiBtZWFucyB0byBwdXQgY2Fwc3VsZSBmaWxlIGluIG1lbW9yeS5cbiIpOw0K PiArICBQcmludChMIiAgLU5SOiBObyBSZXNldC5cbiIpOw0KPiArICBQcmludChMIiAgLVM6ICBE dW1wIGNhcHN1bGUgc3RhdHVzLlxuIik7DQo+ICsgIFByaW50KEwiICAtQzogIENsZWFyIGNhcHN1 bGUgc3RhdHVzLlxuIik7DQo+ICsgIFByaW50KEwiICAtUDogIER1bXAgRk1QIHByb3RvY29sIGlu Zm8uXG4iKTsNCj4gKyAgUHJpbnQoTCIgIC1FOiAgRHVtcCBFU1JUIHRhYmxlIGluZm8uXG4iKTsN Cj4gKyAgUHJpbnQoTCIgIC1HOiAgSW5wdXQgQk1QIGZpbGUgbmFtZVxuIik7DQo+ICsgIFByaW50 KEwiICAtTjogIEFwcGVuZCBDYXBzdWxlIEhlYWRlciBhY2Nyb2RpbmcgdG8gV2luZG93cyBGaXJt d2FyZSBVcGRhdGVcbiIpOw0KPiArICBQcmludChMIiAgLU86ICBPdXRwdXQgQ2Fwc3VsZSBmaWxl IG5hbWVcbiIpOw0KPiArICBQcmludChMIiAgLUQ6ICBEdW1wIENhcHN1bGVcbiIpOw0KPiArICBQ cmludChMIiAgLURTOiBEdW1wIENhcHN1bGUgd2l0aCBTeXN0ZW0gRk1QIGZvcm1hdFxuIik7DQo+ ICt9DQo+ICsNCj4gKy8qKg0KPiArICBVcGRhdGUgQ2Fwc3VsZSBpbWFnZS4NCj4gKw0KPiArICBA cGFyYW1baW5dICBJbWFnZUhhbmRsZSAgICAgVGhlIGltYWdlIGhhbmRsZS4NCj4gKyAgQHBhcmFt W2luXSAgU3lzdGVtVGFibGUgICAgIFRoZSBzeXN0ZW0gdGFibGUuDQo+ICsNCj4gKyAgQHJldHZh bCBFRklfU1VDQ0VTUyAgICAgICAgICAgIENvbW1hbmQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4N Cj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIENvbW1hbmQgdXNhZ2UgZXJyb3Iu DQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICBUaGUgaW5wdXQgZmlsZSBjYW4n dCBiZSBmb3VuZC4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtVZWZpTWFp biAoDQo+ICsgIElOIEVGSV9IQU5ETEUgICAgICAgIEltYWdlSGFuZGxlLA0KPiArICBJTiBFRklf U1lTVEVNX1RBQkxFICAqU3lzdGVtVGFibGUNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVT ICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICAgIEZpbGVTaXplW01BWF9DQVBTVUxFX05VTV07DQo+ICsgIFZPSUQgICAgICAgICAgICAg ICAgICAgICAgICAgICpDYXBzdWxlQnVmZmVyW01BWF9DQVBTVUxFX05VTV07DQo+ICsgIEVGSV9D QVBTVUxFX0JMT0NLX0RFU0NSSVBUT1IgICpCbG9ja0Rlc2NyaXB0b3JzOw0KPiArICBFRklfQ0FQ U1VMRV9IRUFERVIgICAgICAgICAgICAgKkNhcHN1bGVIZWFkZXJBcnJheVtNQVhfQ0FQU1VMRV9O VU0gKyAxXTsNCj4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgIE1heENhcHN1bGVT aXplOw0KPiArICBFRklfUkVTRVRfVFlQRSAgICAgICAgICAgICAgICAgUmVzZXRUeXBlOw0KPiAr ICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgTmVlZFJlc2V0Ow0KPiArICBCT09MRUFO ICAgICAgICAgICAgICAgICAgICAgICAgTm9SZXNldDsNCj4gKyAgQk9PTEVBTiAgICAgICAgICAg ICAgICAgICAgICAgIE5lZWRDb3B5T25EaXNrOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAg ICAgICAgICAgKkNhcHN1bGVOYW1lOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAg ICAgQ2Fwc3VsZU51bTsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4 Ow0KPiArDQo+ICsgIFN0YXR1cyA9IEdldEFyZygpOw0KPiArICBpZiAoRUZJX0VSUk9SKFN0YXR1 cykpIHsNCj4gKyAgICBQcmludFVzYWdlKCk7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAg fQ0KPiArICBpZiAoQXJnYyA8IDIpIHsNCj4gKyAgICBQcmludFVzYWdlKCk7DQo+ICsgICAgQ2xl YW5BcmcoKTsNCj4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICB9DQo+ ICsgIGlmICgoU3RyQ21wKEFyZ3ZbMV0sIEwiLUQiKSA9PSAwKSB8fA0KPiArICAgICAgKFN0ckNt cChBcmd2WzFdLCBMIi1EUyIpID09IDApKSB7DQo+ICsgICAgU3RhdHVzID0gRHVtcENhcHN1bGUo KTsNCj4gKyAgICBDbGVhbkFyZygpOw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4g KyAgaWYgKFN0ckNtcChBcmd2WzFdLCBMIi1HIikgPT0gMCkgew0KPiArICAgIFN0YXR1cyA9IENy ZWF0ZUJtcEZtcCgpOw0KPiArICAgIENsZWFuQXJnKCk7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsN Cj4gKyAgfQ0KPiArICBpZiAoU3RyQ21wKEFyZ3ZbMV0sIEwiLU4iKSA9PSAwKSB7DQo+ICsgICAg U3RhdHVzID0gQ3JlYXRlTmVzdGVkRm1wKCk7DQo+ICsgICAgQ2xlYW5BcmcoKTsNCj4gKyAgICBy ZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsgIGlmIChTdHJDbXAoQXJndlsxXSwgTCItUyIpID09 IDApIHsNCj4gKyAgICBTdGF0dXMgPSBEbXBDYXBzdWxlU3RhdHVzVmFyaWFibGUoKTsNCj4gKyAg ICBDbGVhbkFyZygpOw0KPiArICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gKyAgfQ0KPiArICBp ZiAoU3RyQ21wKEFyZ3ZbMV0sIEwiLUMiKSA9PSAwKSB7DQo+ICsgICAgU3RhdHVzID0gQ2xlYXJD YXBzdWxlU3RhdHVzVmFyaWFibGUoKTsNCj4gKyAgICBDbGVhbkFyZygpOw0KPiArICAgIHJldHVy biBTdGF0dXM7DQo+ICsgIH0NCj4gKyAgaWYgKFN0ckNtcChBcmd2WzFdLCBMIi1QIikgPT0gMCkg ew0KPiArICAgIER1bXBGbXBEYXRhKCk7DQo+ICsgICAgQ2xlYW5BcmcoKTsNCj4gKyAgICByZXR1 cm4gRUZJX1NVQ0NFU1M7DQo+ICsgIH0NCj4gKyAgaWYgKFN0ckNtcChBcmd2WzFdLCBMIi1FIikg PT0gMCkgew0KPiArICAgIER1bXBFc3J0RGF0YSgpOw0KPiArICAgIENsZWFuQXJnKCk7DQo+ICsg ICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArICB9DQo+ICsgIGlmIChTdHJDbXAoQXJndlsxXSwg TCItRiIpID09IDApIHsNCj4gKyAgICBOZWVkQ29weU9uRGlzayA9IFRSVUU7DQo+ICsgICAgQ2Fw c3VsZUZpcnN0SW5kZXggPSAyOw0KPiArICB9IGVsc2Ugew0KPiArICAgIE5lZWRDb3B5T25EaXNr ID0gRkFMU0U7DQo+ICsgICAgQ2Fwc3VsZUZpcnN0SW5kZXggPSAxOw0KPiArICB9DQo+ICsgIGlm IChTdHJDbXAoQXJndltBcmdjIC0gMV0sIEwiLU5SIikgPT0gMCkgew0KPiArICAgIE5vUmVzZXQg PSBUUlVFOw0KPiArICAgIENhcHN1bGVMYXN0SW5kZXggPSBBcmdjIC0gMjsNCj4gKyAgfSBlbHNl IHsNCj4gKyAgICBOb1Jlc2V0ID0gRkFMU0U7DQo+ICsgICAgQ2Fwc3VsZUxhc3RJbmRleCA9IEFy Z2MgLSAxOw0KPiArICB9DQo+ICsgIENhcHN1bGVOdW0gPSBDYXBzdWxlTGFzdEluZGV4IC0gQ2Fw c3VsZUZpcnN0SW5kZXggKyAxOw0KPiArDQo+ICsgIGlmIChDYXBzdWxlRmlyc3RJbmRleCA+IENh cHN1bGVMYXN0SW5kZXgpIHsNCj4gKyAgICBQcmludChMIkNhcHN1bGVBcHA6IE5PIGNhcHN1bGUg aW1hZ2UuXG4iKTsNCj4gKyAgICBDbGVhbkFyZygpOw0KPiArICAgIHJldHVybiBFRklfVU5TVVBQ T1JURUQ7DQo+ICsgIH0NCj4gKyAgaWYgKENhcHN1bGVOdW0gPiBNQVhfQ0FQU1VMRV9OVU0pIHsN Cj4gKyAgICBQcmludChMIkNhcHN1bGVBcHA6IFRvbyBtYW55IGNhcHN1bGUgaW1hZ2VzLlxuIik7 DQo+ICsgICAgQ2xlYW5BcmcoKTsNCj4gKyAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiAr ICB9DQo+ICsNCj4gKyAgWmVyb01lbSgmQ2Fwc3VsZUJ1ZmZlciwgc2l6ZW9mKENhcHN1bGVCdWZm ZXIpKTsNCj4gKyAgWmVyb01lbSgmRmlsZVNpemUsIHNpemVvZihGaWxlU2l6ZSkpOw0KPiArICBC bG9ja0Rlc2NyaXB0b3JzID0gTlVMTDsNCj4gKw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXgg PCBDYXBzdWxlTnVtOyBJbmRleCsrKSB7DQo+ICsgICAgQ2Fwc3VsZU5hbWUgPSBBcmd2W0NhcHN1 bGVGaXJzdEluZGV4ICsgSW5kZXhdOw0KPiArICAgIFN0YXR1cyA9IFJlYWRGaWxlVG9CdWZmZXIo Q2Fwc3VsZU5hbWUsICZGaWxlU2l6ZVtJbmRleF0sICZDYXBzdWxlQnVmZmVyW0luZGV4XSk7DQo+ ICsgICAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgICBQcmludChMIkNhcHN1bGVB cHA6IGNhcHN1bGUgaW1hZ2UgKCVzKSBpcyBub3QgZm91bmQuXG4iLCBDYXBzdWxlTmFtZSk7DQo+ ICsgICAgICBnb3RvIERvbmU7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE5lZWRD b3B5T25EaXNrKSB7DQo+ICsgICAgU3RhdHVzID0gQ29weUNhcHN1bGVUb0FjdGl2ZUVmaVBhcnRp dGlvbihDYXBzdWxlQnVmZmVyLCBGaWxlU2l6ZSwgQ2Fwc3VsZU51bSk7DQo+ICsgIH0gZWxzZSB7 DQo+ICsgICAgLy8NCj4gKyAgICAvLyBFdmVyeSBjYXBzdWxlIHVzZSAyIGRlc2NyaXB0b3IgMSBm b3IgZGF0YSAxIGZvciBlbmQNCj4gKyAgICAvLw0KPiArICAgIFN0YXR1cyA9IEJ1aWxkR2F0aGVy TGlzdChDYXBzdWxlQnVmZmVyLCBGaWxlU2l6ZSwgQ2Fwc3VsZU51bSwgJkJsb2NrRGVzY3JpcHRv cnMpOw0KPiArICB9DQo+ICsgIGlmIChFRklfRVJST1IoU3RhdHVzKSkgew0KPiArICAgIGdvdG8g RG9uZTsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIENhbGwgdGhlIHJ1bnRpbWUgc2Vy dmljZSBjYXBzdWxlLg0KPiArICAvLw0KPiArICBOZWVkUmVzZXQgPSBGQUxTRTsNCj4gKyAgZm9y IChJbmRleCA9IDA7IEluZGV4IDwgQ2Fwc3VsZU51bTsgSW5kZXgrKykgew0KPiArICAgIENhcHN1 bGVIZWFkZXJBcnJheVtJbmRleF0gPSAoRUZJX0NBUFNVTEVfSEVBREVSICopIENhcHN1bGVCdWZm ZXJbSW5kZXhdOw0KPiArICAgIGlmICgoQ2Fwc3VsZUhlYWRlckFycmF5W0luZGV4XS0+RmxhZ3Mg JiBDQVBTVUxFX0ZMQUdTX1BFUlNJU1RfQUNST1NTX1JFU0VUKSAhPSAwKQ0KPiB7DQo+ICsgICAg ICBOZWVkUmVzZXQgPSBUUlVFOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArICBDYXBzdWxlSGVhZGVy QXJyYXlbQ2Fwc3VsZU51bV0gPSBOVUxMOw0KPiArICBpZiAoTm9SZXNldCkgew0KPiArICAgIE5l ZWRSZXNldCA9IEZBTFNFOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gSW5xdWlyZSBw bGF0Zm9ybSBjYXBhYmlsaXR5IG9mIFVwZGF0ZUNhcHN1bGUuDQo+ICsgIC8vDQo+ICsgIFN0YXR1 cyA9IGdSVC0+UXVlcnlDYXBzdWxlQ2FwYWJpbGl0aWVzIChDYXBzdWxlSGVhZGVyQXJyYXksIENh cHN1bGVOdW0sDQo+ICZNYXhDYXBzdWxlU2l6ZSwgJlJlc2V0VHlwZSk7DQo+ICsgIGlmIChFRklf RVJST1IoU3RhdHVzKSkgew0KPiArICAgIFByaW50IChMIkNhcHN1bGVBcHA6IGZhaWxlZCB0byBx dWVyeSBjYXBzdWxlIGNhcGFiaWxpdHkgLSAlclxuIiwgU3RhdHVzKTsNCj4gKyAgICBnb3RvIERv bmU7DQo+ICsgIH0NCj4gKw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBDYXBzdWxlTnVt OyBJbmRleCsrKSB7DQo+ICsgICAgaWYgKEZpbGVTaXplW0luZGV4XSA+IE1heENhcHN1bGVTaXpl KSB7DQo+ICsgICAgICBQcmludCAoTCJDYXBzdWxlQXBwOiBjYXBzdWxlIGlzIHRvbyBsYXJnZSB0 byB1cGRhdGUsICVsZCBpcyBhbGxvd2VkXG4iLA0KPiBNYXhDYXBzdWxlU2l6ZSk7DQo+ICsgICAg ICBTdGF0dXMgPSBFRklfVU5TVVBQT1JURUQ7DQo+ICsgICAgICBnb3RvIERvbmU7DQo+ICsgICAg fQ0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gQ2hlY2sgd2hldGhlciB0aGUgaW5wdXQg Y2Fwc3VsZSBpbWFnZSBoYXMgdGhlIGZsYWcgb2YgcGVyc2lzdCBhY3Jvc3Mgc3lzdGVtDQo+IHJl c2V0Lg0KPiArICAvLw0KPiArICBpZiAoTmVlZFJlc2V0KSB7DQo+ICsgICAgU3RhdHVzID0gZ1JU LT5VcGRhdGVDYXBzdWxlKENhcHN1bGVIZWFkZXJBcnJheSxDYXBzdWxlTnVtLChVSU5UTikNCj4g QmxvY2tEZXNjcmlwdG9ycyk7DQo+ICsgICAgaWYgKFN0YXR1cyAhPSBFRklfU1VDQ0VTUykgew0K PiArICAgICAgUHJpbnQgKEwiQ2Fwc3VsZUFwcDogZmFpbGVkIHRvIHVwZGF0ZSBjYXBzdWxlIC0g JXJcbiIsIFN0YXR1cyk7DQo+ICsgICAgICBnb3RvIERvbmU7DQo+ICsgICAgfQ0KPiArICAgIC8v DQo+ICsgICAgLy8gRm9yIGNhcHN1bGUgd2hvIGhhcyByZXNldCBmbGFnLCBhZnRlciBjYWxsaW5n IFVwZGF0ZUNhcHN1bGUgc2VydmljZSx0cmlnZXIgYQ0KPiArICAgIC8vIHN5c3RlbSByZXNldCB0 byBwcm9jZXNzIGNhcHN1bGUgcGVyc2lzdCBhY3Jvc3MgYSBzeXN0ZW0gcmVzZXQuDQo+ICsgICAg Ly8NCj4gKyAgICBnUlQtPlJlc2V0U3lzdGVtIChSZXNldFR5cGUsIEVGSV9TVUNDRVNTLCAwLCBO VUxMKTsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICAvLw0KPiArICAgIC8vIEZvciBjYXBzdWxlIHdo byBoYXMgbm8gcmVzZXQgZmxhZywgb25seSBjYWxsIFVwZGF0ZUNhcHN1bGUgU2VydmljZSB3aXRo b3V0IGENCj4gKyAgICAvLyBzeXN0ZW0gcmVzZXQuIFRoZSBzZXJ2aWNlIHdpbGwgcHJvY2VzcyB0 aGUgY2Fwc3VsZSBpbW1lZGlhdGVseS4NCj4gKyAgICAvLw0KPiArICAgIFN0YXR1cyA9IGdSVC0+ VXBkYXRlQ2Fwc3VsZSAoQ2Fwc3VsZUhlYWRlckFycmF5LENhcHN1bGVOdW0sKFVJTlROKQ0KPiBC bG9ja0Rlc2NyaXB0b3JzKTsNCj4gKyAgICBpZiAoU3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7DQo+ ICsgICAgICBQcmludCAoTCJDYXBzdWxlQXBwOiBmYWlsZWQgdG8gdXBkYXRlIGNhcHN1bGUgLSAl clxuIiwgU3RhdHVzKTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBFRklf U1VDQ0VTUzsNCj4gKw0KPiArRG9uZToNCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgQ2Fw c3VsZU51bTsgSW5kZXgrKykgew0KPiArICAgIGlmIChDYXBzdWxlQnVmZmVyW0luZGV4XSAhPSBO VUxMKSB7DQo+ICsgICAgICBGcmVlUG9vbCAoQ2Fwc3VsZUJ1ZmZlcltJbmRleF0pOw0KPiArICAg IH0NCj4gKyAgfQ0KPiArDQo+ICsgIENsZWFuR2F0aGVyTGlzdChCbG9ja0Rlc2NyaXB0b3JzLCBD YXBzdWxlTnVtKTsNCj4gKyAgQ2xlYW5BcmcoKTsNCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0K PiArfQ0KPiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9uL0NhcHN1bGVBcHAv Q2Fwc3VsZUFwcC5pbmYNCj4gYi9NZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3VsZUFwcC9D YXBzdWxlQXBwLmluZg0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwLi43 ZWU0NGZjDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9u L0NhcHN1bGVBcHAvQ2Fwc3VsZUFwcC5pbmYNCj4gQEAgLTAsMCArMSw3MSBAQA0KPiArIyMgIEBm aWxlDQo+ICsjICBBIHNoZWxsIGFwcGxpY2F0aW9uIHRoYXQgdHJpZ2dlcnMgY2Fwc3VsZSB1cGRh dGUgcHJvY2Vzcy4NCj4gKyMNCj4gKyMgVGhpcyBhcHBsaWNhdGlvbiBjYW4gdHJpZ2dlciBjYXBz dWxlIHVwZGF0ZSBwcm9jZXNzLiBJdCBjYW4gYWxzbw0KPiArIyBnZW5lcmF0ZSBjYXBzdWxlIGlt YWdlLCBvciBkdW1wIGNhcHN1bGUgdmFyaWFibGUgaW5mb3JtYXRpb24uDQo+ICsjDQo+ICsjICBD b3B5cmlnaHQgKGMpIDIwMTYsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk LjxCUj4NCj4gKyMgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMN Cj4gKyMgIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFu ZCBjb25kaXRpb25zIG9mIHRoZSBCU0QgTGljZW5zZQ0KPiArIyAgd2hpY2ggYWNjb21wYW5pZXMg dGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZSBm b3VuZCBhdA0KPiArIyAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNl LnBocA0KPiArIw0KPiArIyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJT RCBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsDQo+ICsjICBXSVRIT1VUIFdBUlJBTlRJRVMg T1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVE Lg0KPiArIw0KPiArIyMNCj4gKw0KPiArW0RlZmluZXNdDQo+ICsgIElORl9WRVJTSU9OICAgICAg ICAgICAgICAgICAgICA9IDB4MDAwMTAwMDYNCj4gKyAgQkFTRV9OQU1FICAgICAgICAgICAgICAg ICAgICAgID0gQ2Fwc3VsZUFwcA0KPiArICBNT0RVTEVfVU5JX0ZJTEUgICAgICAgICAgICAgICAg PSBDYXBzdWxlQXBwLnVuaQ0KPiArICBGSUxFX0dVSUQgICAgICAgICAgICAgICAgICAgICAgPSA0 Q0VGMzFEQS04NjgyLTQyNzQtOUNDNC1BRUU3NTE2QTVFN0INCj4gKyAgTU9EVUxFX1RZUEUgICAg ICAgICAgICAgICAgICAgID0gVUVGSV9BUFBMSUNBVElPTg0KPiArICBWRVJTSU9OX1NUUklORyAg ICAgICAgICAgICAgICAgPSAxLjANCj4gKyAgRU5UUllfUE9JTlQgICAgICAgICAgICAgICAgICAg ID0gVWVmaU1haW4NCj4gKw0KPiArIw0KPiArIyBUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGlz IGZvciByZWZlcmVuY2Ugb25seSBhbmQgbm90IHJlcXVpcmVkIGJ5IHRoZSBidWlsZCB0b29scy4N Cj4gKyMNCj4gKyMgIFZBTElEX0FSQ0hJVEVDVFVSRVMgICAgICAgICAgID0gSUEzMiBYNjQNCj4g KyMNCj4gKw0KPiArW1NvdXJjZXNdDQo+ICsgIENhcHN1bGVBcHAuYw0KPiArICBDYXBzdWxlRHVt cC5jDQo+ICsgIEFwcFN1cHBvcnQuYw0KPiArDQo+ICtbUGFja2FnZXNdDQo+ICsgIE1kZVBrZy9N ZGVQa2cuZGVjDQo+ICsgIE1kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZGVjDQo+ICsNCj4gK1tH dWlkc10NCj4gKyAgZ0VmaUZpbGVJbmZvR3VpZA0KPiArICBnRWZpUGFydFR5cGVTeXN0ZW1QYXJ0 R3VpZA0KPiArICBnRWZpR2xvYmFsVmFyaWFibGVHdWlkDQo+ICsgIGdFZmlDYXBzdWxlUmVwb3J0 R3VpZA0KPiArICBnRWZpRm1wQ2Fwc3VsZUd1aWQNCj4gKyAgZ1dpbmRvd3NVeENhcHN1bGVHdWlk DQo+ICsgIGdFZmlDZXJ0VHlwZVJzYTIwNDhTaGEyNTZHdWlkDQo+ICsgIGdFZmlDZXJ0UGtjczdH dWlkDQo+ICsgIGdFZmlTeXN0ZW1SZXNvdXJjZVRhYmxlR3VpZA0KPiArDQo+ICtbUHJvdG9jb2xz XQ0KPiArICBnRWZpTG9hZGVkSW1hZ2VQcm90b2NvbEd1aWQNCj4gKyAgZ0VmaVNpbXBsZUZpbGVT eXN0ZW1Qcm90b2NvbEd1aWQNCj4gKyAgZ0VmaUdyYXBoaWNzT3V0cHV0UHJvdG9jb2xHdWlkDQo+ ICsgIGdFZmlGaXJtd2FyZU1hbmFnZW1lbnRQcm90b2NvbEd1aWQNCj4gKw0KPiArW0xpYnJhcnlD bGFzc2VzXQ0KPiArICBCYXNlTGliDQo+ICsgIFVlZmlBcHBsaWNhdGlvbkVudHJ5UG9pbnQNCj4g KyAgRGVidWdMaWINCj4gKyAgTWVtb3J5QWxsb2NhdGlvbkxpYg0KPiArICBVZWZpQm9vdFNlcnZp Y2VzVGFibGVMaWINCj4gKyAgVWVmaVJ1bnRpbWVTZXJ2aWNlc1RhYmxlTGliDQo+ICsgIFVlZmlM aWINCj4gKyAgUHJpbnRMaWINCj4gKyAgRWRraWlTeXN0ZW1DYXBzdWxlTGliDQo+ICsNCj4gK1tV c2VyRXh0ZW5zaW9ucy5UaWFub0NvcmUuIkV4dHJhRmlsZXMiXQ0KPiArICBDYXBzdWxlQXBwRXh0 cmEudW5pDQo+IGRpZmYgLS1naXQgYS9NZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3VsZUFw cC9DYXBzdWxlQXBwLnVuaQ0KPiBiL01kZU1vZHVsZVBrZy9BcHBsaWNhdGlvbi9DYXBzdWxlQXBw L0NhcHN1bGVBcHAudW5pDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAu LjU0ZDZlMTINCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9NZGVNb2R1bGVQa2cvQXBwbGljYXRp b24vQ2Fwc3VsZUFwcC9DYXBzdWxlQXBwLnVuaQ0KPiBAQCAtMCwwICsxLDIyIEBADQo+ICsvLyAv KiogQGZpbGUNCj4gKy8vIEEgc2hlbGwgYXBwbGljYXRpb24gdGhhdCB0cmlnZ2VycyBjYXBzdWxl IHVwZGF0ZSBwcm9jZXNzLg0KPiArLy8NCj4gKy8vIFRoaXMgYXBwbGljYXRpb24gY2FuIHRyaWdn ZXIgY2Fwc3VsZSB1cGRhdGUgcHJvY2Vzcy4gSXQgY2FuIGFsc28NCj4gKy8vIGdlbmVyYXRlIGNh cHN1bGUgaW1hZ2UsIG9yIGR1bXAgY2Fwc3VsZSB2YXJpYWJsZSBpbmZvcm1hdGlvbi4NCj4gKy8v DQo+ICsvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRz IHJlc2VydmVkLjxCUj4NCj4gKy8vDQo+ICsvLyBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBh bnlpbmcgbWF0ZXJpYWxzDQo+ICsvLyBhcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVu ZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEIExpY2Vuc2UNCj4gKy8vIHdo aWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBs aWNlbnNlIG1heSBiZSBmb3VuZCBhdA0KPiArLy8gaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vu c2VzL2JzZC1saWNlbnNlLnBocA0KPiArLy8gVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5E RVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsDQo+ICsvLyBXSVRIT1VUIFdB UlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBP UiBJTVBMSUVELg0KPiArLy8NCj4gKy8vICoqLw0KPiArDQo+ICsNCj4gKyNzdHJpbmcgU1RSX01P RFVMRV9BQlNUUkFDVCAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIkEgc2hlbGwgYXBwbGlj YXRpb24gdGhhdA0KPiB0cmlnZ2VycyBjYXBzdWxlIHVwZGF0ZSBwcm9jZXNzLiINCj4gKw0KPiAr I3N0cmluZyBTVFJfTU9EVUxFX0RFU0NSSVBUSU9OICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAi VGhpcyBhcHBsaWNhdGlvbiBjYW4gdHJpZ2dlcg0KPiBjYXBzdWxlIHVwZGF0ZSBwcm9jZXNzLiBJ dCBjYW4gYWxzbyBnZW5lcmF0ZSBjYXBzdWxlIGltYWdlLCBvciBkdW1wIGNhcHN1bGUgdmFyaWFi bGUNCj4gaW5mb3JtYXRpb24uIg0KPiArDQo+IGRpZmYgLS1naXQgYS9NZGVNb2R1bGVQa2cvQXBw bGljYXRpb24vQ2Fwc3VsZUFwcC9DYXBzdWxlQXBwRXh0cmEudW5pDQo+IGIvTWRlTW9kdWxlUGtn L0FwcGxpY2F0aW9uL0NhcHN1bGVBcHAvQ2Fwc3VsZUFwcEV4dHJhLnVuaQ0KPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwLi5iNWE4ODQwDQo+IC0tLSAvZGV2L251bGwNCj4g KysrIGIvTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9uL0NhcHN1bGVBcHAvQ2Fwc3VsZUFwcEV4dHJh LnVuaQ0KPiBAQCAtMCwwICsxLDE5IEBADQo+ICsvLyAvKiogQGZpbGUNCj4gKy8vIENhcHN1bGVB cHAgTG9jYWxpemVkIFN0cmluZ3MgYW5kIENvbnRlbnQNCj4gKy8vDQo+ICsvLyBDb3B5cmlnaHQg KGMpIDIwMTYsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4g Ky8vDQo+ICsvLyBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+ ICsvLyBhcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQg Y29uZGl0aW9ucyBvZiB0aGUgQlNEIExpY2Vuc2UNCj4gKy8vIHdoaWNoIGFjY29tcGFuaWVzIHRo aXMgZGlzdHJpYnV0aW9uLiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZSBmb3Vu ZCBhdA0KPiArLy8gaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBo cA0KPiArLy8gVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNF IE9OIEFOICJBUyBJUyIgQkFTSVMsDQo+ICsvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVT RU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELg0KPiArLy8N Cj4gKy8vICoqLw0KPiArDQo+ICsjc3RyaW5nIFNUUl9QUk9QRVJUSUVTX01PRFVMRV9OQU1FDQo+ ICsjbGFuZ3VhZ2UgZW4tVVMNCj4gKyJDYXBzdWxlIEFwcGxpY2F0aW9uIg0KPiArDQo+ICsNCj4g ZGlmZiAtLWdpdCBhL01kZU1vZHVsZVBrZy9BcHBsaWNhdGlvbi9DYXBzdWxlQXBwL0NhcHN1bGVE dW1wLmMNCj4gYi9NZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3VsZUFwcC9DYXBzdWxlRHVt cC5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLmM1NmY0MWYNCj4g LS0tIC9kZXYvbnVsbA0KPiArKysgYi9NZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3VsZUFw cC9DYXBzdWxlRHVtcC5jDQo+IEBAIC0wLDAgKzEsODQwIEBADQo+ICsvKiogQGZpbGUNCj4gKyAg RHVtcCBDYXBzdWxlIGltYWdlIGluZm9ybWF0aW9uLg0KPiArDQo+ICsgIENvcHlyaWdodCAoYykg MjAxNiwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArICBU aGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+ICsgIGFyZSBsaWNl bnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9m IHRoZSBCU0QgTGljZW5zZQ0KPiArICB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlv bi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlIGZvdW5kIGF0DQo+ICsgIGh0 dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4gKw0KPiArICBU SEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFT IElTIiBCQVNJUywNCj4gKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBP RiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRC4NCj4gKw0KPiArKiovDQo+ICsN Cj4gKyNpbmNsdWRlIDxQaUR4ZS5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZUxpYi5oPg0K PiArI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jh c2VNZW1vcnlMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIu aD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlCb290U2VydmljZXNUYWJsZUxpYi5oPg0KPiAr I2luY2x1ZGUgPExpYnJhcnkvVWVmaVJ1bnRpbWVTZXJ2aWNlc1RhYmxlTGliLmg+DQo+ICsjaW5j bHVkZSA8TGlicmFyeS9VZWZpTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9QcmludExpYi5o Pg0KPiArI2luY2x1ZGUgPExpYnJhcnkvRWRraWlTeXN0ZW1DYXBzdWxlTGliLmg+DQo+ICsjaW5j bHVkZSA8UHJvdG9jb2wvRmlybXdhcmVNYW5hZ2VtZW50Lmg+DQo+ICsjaW5jbHVkZSA8R3VpZC9J bWFnZUF1dGhlbnRpY2F0aW9uLmg+DQo+ICsjaW5jbHVkZSA8R3VpZC9FZGtpaVN5c3RlbUZtcENh cHN1bGUuaD4NCj4gKyNpbmNsdWRlIDxHdWlkL0NhcHN1bGVSZXBvcnQuaD4NCj4gKyNpbmNsdWRl IDxHdWlkL1N5c3RlbVJlc291cmNlVGFibGUuaD4NCj4gKyNpbmNsdWRlIDxHdWlkL0ZtcENhcHN1 bGUuaD4NCj4gKyNpbmNsdWRlIDxJbmR1c3RyeVN0YW5kYXJkL1dpbmRvd3NVeENhcHN1bGUuaD4N Cj4gKw0KPiArLyoqDQo+ICsgIFJlYWQgYSBmaWxlLg0KPiArDQo+ICsgIEBwYXJhbSBGaWxlTmFt ZSAgICAgICAgVGhlIGZpbGUgdG8gYmUgcmVhZC4NCj4gKyAgQHBhcmFtIEJ1ZmZlclNpemUgICAg ICBUaGUgZmlsZSBidWZmZXIgc2l6ZQ0KPiArICBAcGFyYW0gQnVmZmVyICAgICAgICAgIFRoZSBm aWxlIGJ1ZmZlcg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgUmVhZCBmaWxlIHN1 Y2Nlc3NmdWxseQ0KPiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgIEZpbGUgbm90IGZvdW5kDQo+ ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1JlYWRGaWxlVG9CdWZmZXIoDQo+ICsgIElOICBDSEFS MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkZpbGVOYW1lLA0KPiArICBPVVQgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpCdWZmZXJTaXplLA0KPiArICBPVVQg Vk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqQnVmZmVyDQo+ICsgICk7DQo+ ICsNCj4gK2V4dGVybiBVSU5UTiAgQXJnYzsNCj4gK2V4dGVybiBDSEFSMTYgKkFyZ3ZbXTsNCj4g Kw0KPiArLyoqDQo+ICsgIER1bXAgVVggY2Fwc3VsZSBpbmZvcm1hdGlvbi4NCj4gKw0KPiArICBA cGFyYW0gQ2Fwc3VsZUhlYWRlciAgICAgIFRoZSBVWCBjYXBzdWxlIGhlYWRlcg0KPiArKiovDQo+ ICtWT0lEDQo+ICtEdW1wVXhDYXBzdWxlKA0KPiArICBJTiBFRklfQ0FQU1VMRV9IRUFERVIgICpD YXBzdWxlSGVhZGVyDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX0RJU1BMQVlfQ0FQU1VMRSAgICAg ICAgICAgICAgICAgICAgICAgICAgICpEaXNwbGF5Q2Fwc3VsZTsNCj4gKyAgRGlzcGxheUNhcHN1 bGUgPSAoRUZJX0RJU1BMQVlfQ0FQU1VMRSAqKUNhcHN1bGVIZWFkZXI7DQo+ICsgIFByaW50KEwi W1V4Q2FwdXN1bGVdXG4iKTsNCj4gKyAgUHJpbnQoTCJDYXBzdWxlSGVhZGVyOlxuIik7DQo+ICsg IFByaW50KEwiICBDYXBzdWxlR3VpZCAgICAgIC0gJWdcbiIsICZEaXNwbGF5Q2Fwc3VsZS0+Q2Fw c3VsZUhlYWRlci5DYXBzdWxlR3VpZCk7DQo+ICsgIFByaW50KEwiICBIZWFkZXJTaXplICAgICAg IC0gMHgleFxuIiwgRGlzcGxheUNhcHN1bGUtPkNhcHN1bGVIZWFkZXIuSGVhZGVyU2l6ZSk7DQo+ ICsgIFByaW50KEwiICBGbGFncyAgICAgICAgICAgIC0gMHgleFxuIiwgRGlzcGxheUNhcHN1bGUt PkNhcHN1bGVIZWFkZXIuRmxhZ3MpOw0KPiArICBQcmludChMIiAgQ2Fwc3VsZUltYWdlU2l6ZSAt IDB4JXhcbiIsIERpc3BsYXlDYXBzdWxlLQ0KPiA+Q2Fwc3VsZUhlYWRlci5DYXBzdWxlSW1hZ2VT aXplKTsNCj4gKyAgUHJpbnQoTCJJbWFnZVBheWxvYWQ6XG4iKTsNCj4gKyAgUHJpbnQoTCIgIFZl cnNpb24gICAgICAgICAgLSAweCV4XG4iLCBEaXNwbGF5Q2Fwc3VsZS0+SW1hZ2VQYXlsb2FkLlZl cnNpb24pOw0KPiArICBQcmludChMIiAgQ2hlY2tzdW0gICAgICAgICAtIDB4JXhcbiIsIERpc3Bs YXlDYXBzdWxlLT5JbWFnZVBheWxvYWQuQ2hlY2tzdW0pOw0KPiArICBQcmludChMIiAgSW1hZ2VU eXBlICAgICAgICAtIDB4JXhcbiIsIERpc3BsYXlDYXBzdWxlLT5JbWFnZVBheWxvYWQuSW1hZ2VU eXBlKTsNCj4gKyAgUHJpbnQoTCIgIE1vZGUgICAgICAgICAgICAgLSAweCV4XG4iLCBEaXNwbGF5 Q2Fwc3VsZS0+SW1hZ2VQYXlsb2FkLk1vZGUpOw0KPiArICBQcmludChMIiAgT2Zmc2V0WCAgICAg ICAgICAtIDB4JXhcbiIsIERpc3BsYXlDYXBzdWxlLT5JbWFnZVBheWxvYWQuT2Zmc2V0WCk7DQo+ ICsgIFByaW50KEwiICBPZmZzZXRZICAgICAgICAgIC0gMHgleFxuIiwgRGlzcGxheUNhcHN1bGUt PkltYWdlUGF5bG9hZC5PZmZzZXRZKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIER1bXAgRk1Q IGltYWdlIGF1dGhlbnRpY2F0aW9uIGluZm9ybWF0aW9uLg0KPiArDQo+ICsgIEBwYXJhbSBJbWFn ZSAgICAgIFRoZSBGTVAgY2Fwc3VsZSBpbWFnZQ0KPiArICBAcGFyYW0gSW1hZ2VTaXplICBUaGUg c2l6ZSBvZiB0aGUgRk1QIGNhcHN1bGUgaW1hZ2UgaW4gYnl0ZXMuDQo+ICsNCj4gKyAgQHJldHVy biB0aGUgc2l6ZSBvZiBGTVAgYXV0aGVudGljYXRpb24uDQo+ICsqKi8NCj4gK1VJTlRODQo+ICtE dW1wSW1hZ2VBdXRoZW50aWNhdGlvbigNCj4gKyAgSU4gVk9JRCAgICpJbWFnZSwNCj4gKyAgSU4g VUlOVE4gIEltYWdlU2l6ZQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9GSVJNV0FSRV9JTUFHRV9B VVRIRU5USUNBVElPTiAgICAgICAgICAgICAqSW1hZ2VBdXRoZW50aWNhdGlvbjsNCj4gKw0KPiAr ICBJbWFnZUF1dGhlbnRpY2F0aW9uID0gSW1hZ2U7DQo+ICsgIGlmIChDb21wYXJlR3VpZCgmSW1h Z2VBdXRoZW50aWNhdGlvbi0+QXV0aEluZm8uQ2VydFR5cGUsICZnRWZpQ2VydFBrY3M3R3VpZCkg fHwNCj4gKyAgICAgIENvbXBhcmVHdWlkKCZJbWFnZUF1dGhlbnRpY2F0aW9uLT5BdXRoSW5mby5D ZXJ0VHlwZSwNCj4gJmdFZmlDZXJ0VHlwZVJzYTIwNDhTaGEyNTZHdWlkKSkgew0KPiArICAgIFBy aW50KEwiW0ltYWdlQXV0aGVudGljYXRpb25dXG4iKTsNCj4gKyAgICBQcmludChMIiAgTW9ub3Rv bmljQ291bnQgICAtIDB4JWx4XG4iLCBJbWFnZUF1dGhlbnRpY2F0aW9uLT5Nb25vdG9uaWNDb3Vu dCk7DQo+ICsgICAgUHJpbnQoTCJXSU5fQ0VSVElGSUNBVEU6XG4iKTsNCj4gKyAgICBQcmludChM IiAgZHdMZW5ndGggICAgICAgICAtIDB4JXhcbiIsIEltYWdlQXV0aGVudGljYXRpb24tPkF1dGhJ bmZvLkhkci5kd0xlbmd0aCk7DQo+ICsgICAgUHJpbnQoTCIgIHdSZXZpc2lvbiAgICAgICAgLSAw eCV4XG4iLCBJbWFnZUF1dGhlbnRpY2F0aW9uLQ0KPiA+QXV0aEluZm8uSGRyLndSZXZpc2lvbik7 DQo+ICsgICAgUHJpbnQoTCIgIHdDZXJ0aWZpY2F0ZVR5cGUgLSAweCV4XG4iLCBJbWFnZUF1dGhl bnRpY2F0aW9uLQ0KPiA+QXV0aEluZm8uSGRyLndDZXJ0aWZpY2F0ZVR5cGUpOw0KPiArICAgIFBy aW50KEwiICBDZXJ0VHlwZSAgICAgICAgIC0gJWdcbiIsICZJbWFnZUF1dGhlbnRpY2F0aW9uLT5B dXRoSW5mby5DZXJ0VHlwZSk7DQo+ICsgICAgcmV0dXJuIHNpemVvZihJbWFnZUF1dGhlbnRpY2F0 aW9uLT5Nb25vdG9uaWNDb3VudCkgKyBJbWFnZUF1dGhlbnRpY2F0aW9uLQ0KPiA+QXV0aEluZm8u SGRyLmR3TGVuZ3RoOw0KPiArICB9IGVsc2Ugew0KPiArICAgIHJldHVybiAwOw0KPiArICB9DQo+ ICt9DQo+ICsNCj4gKy8qKg0KPiArICBEdW1wIEVES0lJIHN5c3RlbSBGTVAgY2Fwc3VsZS4NCj4g Kw0KPiArICBAcGFyYW0gSW1hZ2UgICAgICBUaGUgRURLSUkgc3lzdGVtIEZNUCBjYXBzdWxlLg0K PiArICBAcGFyYW0gSW1hZ2VTaXplICBUaGUgc2l6ZSBvZiB0aGUgRURLSUkgc3lzdGVtIEZNUCBj YXBzdWxlIGluIGJ5dGVzLg0KPiArKiovDQo+ICtWT0lEDQo+ICtEdW1wRWRraWlTeXN0ZW1GbXBD YXBzdWxlKA0KPiArICBJTiBWT0lEICAgKkltYWdlLA0KPiArICBJTiBVSU5UTiAgSW1hZ2VTaXpl DQo+ICsgICkNCj4gK3sNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEltYWdlT2Zmc2V0Ow0KPiArICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKkJpb3NJbWFnZTsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEJpb3NJbWFnZVNpemU7DQo+ICsgIEJPT0xFQU4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHQ7DQo+ICsgIEVES0lJX1NZ U1RFTV9GSVJNV0FSRV9JTUFHRV9ERVNDUklQVE9SICAgICAgICAqVGVtcEltYWdlRm1wSW5mbzsN Cj4gKyAgRURLSUlfU1lTVEVNX0ZJUk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IgICAgICAgICpJbWFn ZUZtcEluZm87DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBJbWFnZUZtcEluZm9TaXplOw0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIFdlIGRvIG5vdCBr bm93IGlmIHRoZXJlIGlzIEVGSV9GSVJNV0FSRV9JTUFHRV9BVVRIRU5USUNBVElPTi4NCj4gKyAg Ly8gc28ganVzdCAqdHJ5KiB0byBwYXJzZSBpdA0KPiArICAvLw0KPiArICBJbWFnZU9mZnNldCA9 IER1bXBJbWFnZUF1dGhlbnRpY2F0aW9uKEltYWdlLCBJbWFnZVNpemUpOw0KPiArICBJbWFnZSA9 IChVSU5UOCAqKUltYWdlICsgSW1hZ2VPZmZzZXQ7DQo+ICsgIEltYWdlU2l6ZSAtPSBJbWFnZU9m ZnNldDsNCj4gKyAgUHJpbnQoTCJbSW1hZ2VdXG4iKTsNCj4gKyAgUHJpbnQoTCIgIEltYWdlU2l6 ZSAgIC0gMHgleFxuIiwgSW1hZ2VTaXplKTsNCj4gKw0KPiArICBSZXN1bHQgPSBFeHRyYWN0Q29u ZmlnSW1hZ2UoSW1hZ2UsIEltYWdlU2l6ZSwgJkJpb3NJbWFnZSwgJkJpb3NJbWFnZVNpemUpOw0K PiArICBpZiAoUmVzdWx0KSB7DQo+ICsgICAgUHJpbnQoTCIgIENvbmZpZ0ZpbGVTaXplICAtIDB4 JXhcbiIsIEJpb3NJbWFnZVNpemUpOw0KPiArICB9DQo+ICsgIFJlc3VsdCA9IEV4dHJhY3REcml2 ZXJGdkltYWdlKEltYWdlLCBJbWFnZVNpemUsICZCaW9zSW1hZ2UsICZCaW9zSW1hZ2VTaXplKTsN Cj4gKyAgaWYgKFJlc3VsdCkgew0KPiArICAgIFByaW50KEwiICBEcml2ZXJGdlNpemUgICAgLSAw eCV4XG4iLCBCaW9zSW1hZ2VTaXplKTsNCj4gKyAgfQ0KPiArICBSZXN1bHQgPSBFeHRyYWN0U3lz dGVtRmlybXdhcmVJbWFnZShJbWFnZSwgSW1hZ2VTaXplLCAmQmlvc0ltYWdlLCAmQmlvc0ltYWdl U2l6ZSk7DQo+ICsgIGlmIChSZXN1bHQpIHsNCj4gKyAgICBQcmludChMIiAgQmlvc0ltYWdlU2l6 ZSAgIC0gMHgleFxuIiwgQmlvc0ltYWdlU2l6ZSk7DQo+ICsgIH0NCj4gKyAgUmVzdWx0ID0gRXh0 cmFjdFN5c3RlbUZpcm13YXJlSW1hZ2VGbXBJbmZvKEJpb3NJbWFnZSwgQmlvc0ltYWdlU2l6ZSwN Cj4gJlRlbXBJbWFnZUZtcEluZm8sICZJbWFnZUZtcEluZm9TaXplKTsNCj4gKyAgaWYgKFJlc3Vs dCkgew0KPiArICAgIEltYWdlRm1wSW5mbyA9IEFsbG9jYXRlQ29weVBvb2woSW1hZ2VGbXBJbmZv U2l6ZSwgVGVtcEltYWdlRm1wSW5mbyk7DQo+ICsgICAgaWYgKEltYWdlRm1wSW5mbyAhPSBOVUxM KSB7DQo+ICsgICAgICBQcmludChMIltJbWFnZUZtcEluZm9dXG4iKTsNCj4gKyAgICAgIFByaW50 KEwiICBTaWduYXR1cmUgICAgICAgICAgICAgICAgICAgICAgLSAweCV4XG4iLCBJbWFnZUZtcElu Zm8tPlNpZ25hdHVyZSk7DQo+ICsgICAgICBQcmludChMIiAgSGVhZGVyTGVuZ3RoICAgICAgICAg ICAgICAgICAgIC0gMHgleFxuIiwgSW1hZ2VGbXBJbmZvLT5IZWFkZXJMZW5ndGgpOw0KPiArICAg ICAgUHJpbnQoTCIgIExlbmd0aCAgICAgICAgICAgICAgICAgICAgICAgICAtIDB4JXhcbiIsIElt YWdlRm1wSW5mby0+TGVuZ3RoKTsNCj4gKyAgICAgIFByaW50KEwiICBQYWNrYWdlVmVyc2lvbiAg ICAgICAgICAgICAgICAgLSAweCV4XG4iLCBJbWFnZUZtcEluZm8tDQo+ID5QYWNrYWdlVmVyc2lv bik7DQo+ICsgICAgICBQcmludChMIiAgUGFja2FnZVZlcnNpb25OYW1lU3RyaW5nT2Zmc2V0IC0g MHgleFxuIiwgSW1hZ2VGbXBJbmZvLQ0KPiA+UGFja2FnZVZlcnNpb25OYW1lU3RyaW5nT2Zmc2V0 KTsNCj4gKyAgICAgIGlmIChJbWFnZUZtcEluZm8tPlBhY2thZ2VWZXJzaW9uTmFtZVN0cmluZ09m ZnNldCAhPSAwKSB7DQo+ICsgICAgICAgIFByaW50KEwiICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLSAlc1xuIiwgKFVJTlQ4ICopSW1hZ2VGbXBJbmZvICsNCj4gSW1hZ2VGbXBJbmZv LT5QYWNrYWdlVmVyc2lvbk5hbWVTdHJpbmdPZmZzZXQpOw0KPiArICAgICAgfQ0KPiArICAgICAg UHJpbnQoTCIgIEltYWdlSW5kZXggICAgICAgICAgICAgICAgICAgICAtIDB4JXhcbiIsIEltYWdl Rm1wSW5mby0+SW1hZ2VJbmRleCk7DQo+ICsgICAgICBQcmludChMIiAgSW1hZ2VUeXBlSWQgICAg ICAgICAgICAgICAgICAgIC0gJWdcbiIsICZJbWFnZUZtcEluZm8tPkltYWdlVHlwZUlkKTsNCj4g KyAgICAgIFByaW50KEwiICBJbWFnZUlkICAgICAgICAgICAgICAgICAgICAgICAgLSAweCVseFxu IiwgSW1hZ2VGbXBJbmZvLT5JbWFnZUlkKTsNCj4gKyAgICAgIFByaW50KEwiICBJbWFnZUlkTmFt ZVN0cmluZ09mZnNldCAgICAgICAgLSAweCV4XG4iLCBJbWFnZUZtcEluZm8tDQo+ID5JbWFnZUlk TmFtZVN0cmluZ09mZnNldCk7DQo+ICsgICAgICBpZiAoSW1hZ2VGbXBJbmZvLT5JbWFnZUlkTmFt ZVN0cmluZ09mZnNldCAhPSAwKSB7DQo+ICsgICAgICAgIFByaW50KEwiICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLSAlc1xuIiwgKFVJTlQ4ICopSW1hZ2VGbXBJbmZvICsNCj4gSW1h Z2VGbXBJbmZvLT5JbWFnZUlkTmFtZVN0cmluZ09mZnNldCk7DQo+ICsgICAgICB9DQo+ICsgICAg ICBQcmludChMIiAgVmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgIC0gMHgleFxuIiwgSW1h Z2VGbXBJbmZvLT5WZXJzaW9uKTsNCj4gKyAgICAgIFByaW50KEwiICBWZXJzaW9uTmFtZVN0cmlu Z09mZnNldCAgICAgICAgLSAweCV4XG4iLCBJbWFnZUZtcEluZm8tDQo+ID5WZXJzaW9uTmFtZVN0 cmluZ09mZnNldCk7DQo+ICsgICAgICBpZiAoSW1hZ2VGbXBJbmZvLT5WZXJzaW9uTmFtZVN0cmlu Z09mZnNldCAhPSAwKSB7DQo+ICsgICAgICAgIFByaW50KEwiICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLSAlc1xuIiwgKFVJTlQ4ICopSW1hZ2VGbXBJbmZvICsNCj4gSW1hZ2VGbXBJ bmZvLT5WZXJzaW9uTmFtZVN0cmluZ09mZnNldCk7DQo+ICsgICAgICB9DQo+ICsgICAgICBQcmlu dChMIiAgU2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMHglbHhcbiIsIEltYWdlRm1w SW5mby0+U2l6ZSk7DQo+ICsgICAgICBQcmludChMIiAgQXR0cmlidXRlc1N1cHBvcnRlZCAgICAg ICAgICAgIC0gMHglbHhcbiIsIEltYWdlRm1wSW5mby0NCj4gPkF0dHJpYnV0ZXNTdXBwb3J0ZWQp Ow0KPiArICAgICAgUHJpbnQoTCIgIEF0dHJpYnV0ZXNTZXR0aW5nICAgICAgICAgICAgICAtIDB4 JWx4XG4iLCBJbWFnZUZtcEluZm8tDQo+ID5BdHRyaWJ1dGVzU2V0dGluZyk7DQo+ICsgICAgICBQ cmludChMIiAgQ29tcGF0aWJpbGl0aWVzICAgICAgICAgICAgICAgIC0gMHglbHhcbiIsIEltYWdl Rm1wSW5mby0NCj4gPkNvbXBhdGliaWxpdGllcyk7DQo+ICsgICAgICBQcmludChMIiAgTG93ZXN0 U3VwcG9ydGVkSW1hZ2VWZXJzaW9uICAgIC0gMHgleFxuIiwgSW1hZ2VGbXBJbmZvLQ0KPiA+TG93 ZXN0U3VwcG9ydGVkSW1hZ2VWZXJzaW9uKTsNCj4gKyAgICAgIFByaW50KEwiICBMYXN0QXR0ZW1w dFZlcnNpb24gICAgICAgICAgICAgLSAweCV4XG4iLCBJbWFnZUZtcEluZm8tDQo+ID5MYXN0QXR0 ZW1wdFZlcnNpb24pOw0KPiArICAgICAgUHJpbnQoTCIgIExhc3RBdHRlbXB0U3RhdHVzICAgICAg ICAgICAgICAtIDB4JXhcbiIsIEltYWdlRm1wSW5mby0NCj4gPkxhc3RBdHRlbXB0U3RhdHVzKTsN Cj4gKyAgICAgIFByaW50KEwiICBIYXJkd2FyZUluc3RhbmNlICAgICAgICAgICAgICAgLSAweCVs eFxuIiwgSW1hZ2VGbXBJbmZvLQ0KPiA+SGFyZHdhcmVJbnN0YW5jZSk7DQo+ICsgICAgICBQcmlu dChMIiAgVmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgIC0gMHgleFxuIiwgSW1hZ2VGbXBJ bmZvLT5WZXJzaW9uKTsNCj4gKyAgICAgIEZyZWVQb29sKEltYWdlRm1wSW5mbyk7DQo+ICsgICAg fQ0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBEdW1wIGEgbm9uLW5lc3RlZCBGTVAg Y2Fwc3VsZS4NCj4gKw0KPiArICBAcGFyYW0gIENhcHN1bGVIZWFkZXIgIEEgcG9pbnRlciB0byBD YXBzdWxlSGVhZGVyDQo+ICsgIEBwYXJhbSAgSXNTeXN0ZW1GbXAgICAgSWYgaXQgaXMgYSBzeXN0 ZW0gRk1QDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0R1bXBGbXBDYXBzdWxlKA0KPiArICBJTiBFRklf Q0FQU1VMRV9IRUFERVIgICpDYXBzdWxlSGVhZGVyLA0KPiArICBJTiBCT09MRUFOICAgICAgICAg ICAgIElzU3lzdGVtRm1wDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX0ZJUk1XQVJFX01BTkFHRU1F TlRfQ0FQU1VMRV9IRUFERVIgICAgICAgICpGbXBDYXBzdWxlSGVhZGVyOw0KPiArICBVSU5UNjQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkl0ZW1PZmZzZXRMaXN0Ow0K PiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7 DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3Vu dDsNCj4gKyAgRUZJX0ZJUk1XQVJFX01BTkFHRU1FTlRfQ0FQU1VMRV9JTUFHRV9IRUFERVIgICpG bXBJbWFnZUhlYWRlcjsNCj4gKyAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICpJbWFnZTsNCj4gKw0KPiArICBQcmludChMIltGbXBDYXB1c3VsZV1cbiIpOw0K PiArICBQcmludChMIkNhcHN1bGVIZWFkZXI6XG4iKTsNCj4gKyAgUHJpbnQoTCIgIENhcHN1bGVH dWlkICAgICAgLSAlZ1xuIiwgJkNhcHN1bGVIZWFkZXItPkNhcHN1bGVHdWlkKTsNCj4gKyAgUHJp bnQoTCIgIEhlYWRlclNpemUgICAgICAgLSAweCV4XG4iLCBDYXBzdWxlSGVhZGVyLT5IZWFkZXJT aXplKTsNCj4gKyAgUHJpbnQoTCIgIEZsYWdzICAgICAgICAgICAgLSAweCV4XG4iLCBDYXBzdWxl SGVhZGVyLT5GbGFncyk7DQo+ICsgIFByaW50KEwiICBDYXBzdWxlSW1hZ2VTaXplIC0gMHgleFxu IiwgQ2Fwc3VsZUhlYWRlci0+Q2Fwc3VsZUltYWdlU2l6ZSk7DQo+ICsNCj4gKyAgRm1wQ2Fwc3Vs ZUhlYWRlciA9IChFRklfRklSTVdBUkVfTUFOQUdFTUVOVF9DQVBTVUxFX0hFQURFUiAqKSgoVUlO VDggKilDYXBzdWxlSGVhZGVyDQo+ICsgQ2Fwc3VsZUhlYWRlci0+SGVhZGVyU2l6ZSk7DQo+ICsg IEl0ZW1PZmZzZXRMaXN0ID0gKFVJTlQ2NCAqKShGbXBDYXBzdWxlSGVhZGVyICsgMSk7DQo+ICsg IFByaW50KEwiRm1wSGVhZGVyOlxuIik7DQo+ICsgIFByaW50KEwiICBWZXJzaW9uICAgICAgICAg ICAgIC0gMHgleFxuIiwgRm1wQ2Fwc3VsZUhlYWRlci0+VmVyc2lvbik7DQo+ICsgIFByaW50KEwi ICBFbWJlZGRlZERyaXZlckNvdW50IC0gMHgleFxuIiwgRm1wQ2Fwc3VsZUhlYWRlci0+RW1iZWRk ZWREcml2ZXJDb3VudCk7DQo+ICsgIFByaW50KEwiICBQYXlsb2FkSXRlbUNvdW50ICAgIC0gMHgl eFxuIiwgRm1wQ2Fwc3VsZUhlYWRlci0+UGF5bG9hZEl0ZW1Db3VudCk7DQo+ICsgIENvdW50ID0g Rm1wQ2Fwc3VsZUhlYWRlci0+RW1iZWRkZWREcml2ZXJDb3VudCArIEZtcENhcHN1bGVIZWFkZXIt PlBheWxvYWRJdGVtQ291bnQ7DQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IENvdW50OyBJ bmRleCsrKSB7DQo+ICsgICAgUHJpbnQoTCIgIE9mZnNldFslZF0gICAgICAgICAgIC0gMHgleFxu IiwgSW5kZXgsIEl0ZW1PZmZzZXRMaXN0W0luZGV4XSk7DQo+ICsgIH0NCj4gKw0KPiArICBmb3Ig KEluZGV4ID0gRm1wQ2Fwc3VsZUhlYWRlci0+RW1iZWRkZWREcml2ZXJDb3VudDsgSW5kZXggPCBD b3VudDsgSW5kZXgrKykgew0KPiArICAgIFByaW50KEwiRm1wUGF5bG9hZFslZF0gSW1hZ2VIZWFk ZXI6XG4iLCBJbmRleCk7DQo+ICsgICAgRm1wSW1hZ2VIZWFkZXIgPSAoRUZJX0ZJUk1XQVJFX01B TkFHRU1FTlRfQ0FQU1VMRV9JTUFHRV9IRUFERVIgKikoKFVJTlQ4DQo+ICopRm1wQ2Fwc3VsZUhl YWRlciArIEl0ZW1PZmZzZXRMaXN0W0luZGV4XSk7DQo+ICsgICAgUHJpbnQoTCIgIFZlcnNpb24g ICAgICAgICAgICAgICAgLSAweCV4XG4iLCBGbXBJbWFnZUhlYWRlci0+VmVyc2lvbik7DQo+ICsg ICAgUHJpbnQoTCIgIFVwZGF0ZUltYWdlVHlwZUlkICAgICAgLSAlZ1xuIiwgJkZtcEltYWdlSGVh ZGVyLT5VcGRhdGVJbWFnZVR5cGVJZCk7DQo+ICsgICAgUHJpbnQoTCIgIFVwZGF0ZUltYWdlSW5k ZXggICAgICAgLSAweCV4XG4iLCBGbXBJbWFnZUhlYWRlci0+VXBkYXRlSW1hZ2VJbmRleCk7DQo+ ICsgICAgUHJpbnQoTCIgIFVwZGF0ZUltYWdlU2l6ZSAgICAgICAgLSAweCV4XG4iLCBGbXBJbWFn ZUhlYWRlci0+VXBkYXRlSW1hZ2VTaXplKTsNCj4gKyAgICBQcmludChMIiAgVXBkYXRlVmVuZG9y Q29kZVNpemUgICAtIDB4JXhcbiIsIEZtcEltYWdlSGVhZGVyLT5VcGRhdGVWZW5kb3JDb2RlU2l6 ZSk7DQo+ICsgICAgaWYgKEZtcEltYWdlSGVhZGVyLT5WZXJzaW9uID49DQo+IEVGSV9GSVJNV0FS RV9NQU5BR0VNRU5UX0NBUFNVTEVfSU1BR0VfSEVBREVSX0lOSVRfVkVSU0lPTikgew0KPiArICAg ICAgUHJpbnQoTCIgIFVwZGF0ZUhhcmR3YXJlSW5zdGFuY2UgLSAweCVseFxuIiwgRm1wSW1hZ2VI ZWFkZXItDQo+ID5VcGRhdGVIYXJkd2FyZUluc3RhbmNlKTsNCj4gKyAgICB9DQo+ICsgICAgaWYg KEZtcEltYWdlSGVhZGVyLT5WZXJzaW9uID49DQo+IEVGSV9GSVJNV0FSRV9NQU5BR0VNRU5UX0NB UFNVTEVfSU1BR0VfSEVBREVSX0lOSVRfVkVSU0lPTikgew0KPiArICAgICAgSW1hZ2UgPSAoVUlO VDggKikoRm1wSW1hZ2VIZWFkZXIgKyAxKTsNCj4gKyAgICB9ICBlbHNlIHsNCj4gKyAgICAgIElt YWdlID0gKFVJTlQ4ICopRm1wSW1hZ2VIZWFkZXIgKw0KPiBPRkZTRVRfT0YoRUZJX0ZJUk1XQVJF X01BTkFHRU1FTlRfQ0FQU1VMRV9JTUFHRV9IRUFERVIsIFVwZGF0ZUhhcmR3YXJlSW5zdGFuY2Up Ow0KPiArICAgIH0NCj4gKyAgICBpZiAoSXNTeXN0ZW1GbXApIHsNCj4gKyAgICAgIER1bXBFZGtp aVN5c3RlbUZtcENhcHN1bGUoSW1hZ2UsIEZtcEltYWdlSGVhZGVyLT5VcGRhdGVJbWFnZVNpemUp Ow0KPiArICAgIH0NCj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmV0dXJuIGlmIHRo ZXJlIGlzIGEgRk1QIGhlYWRlciBiZWxvdyBjYXBzdWxlIGhlYWRlci4NCj4gKw0KPiArICBAcGFy YW1baW5dIENhcHN1bGVIZWFkZXIgQSBwb2ludGVyIHRvIEVGSV9DQVBTVUxFX0hFQURFUg0KPiAr DQo+ICsgIEByZXR2YWwgVFJVRSAgVGhlcmUgaXMgYSBGTVAgaGVhZGVyIGJlbG93IGNhcHN1bGUg aGVhZGVyLg0KPiArICBAcmV0dmFsIEZBTFNFIFRoZXJlIGlzIG5vdCBhIEZNUCBoZWFkZXIgYmVs b3cgY2Fwc3VsZSBoZWFkZXINCj4gKyoqLw0KPiArQk9PTEVBTg0KPiArSXNOZXN0ZWRGbXBDYXBz dWxlKA0KPiArICBJTiBFRklfQ0FQU1VMRV9IRUFERVIgICAgICAgICAqQ2Fwc3VsZUhlYWRlcg0K PiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4g KyAgRUZJX1NZU1RFTV9SRVNPVVJDRV9UQUJMRSAgKkVzcnQ7DQo+ICsgIEVGSV9TWVNURU1fUkVT T1VSQ0VfRU5UUlkgICpFc3J0RW50cnk7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAg IEluZGV4Ow0KPiArICBCT09MRUFOICAgICAgICAgICAgICAgICAgICBFc3J0R3VpZEZvdW5kOw0K PiArICBFRklfQ0FQU1VMRV9IRUFERVIgICAgICAgICAqTmVzdGVkQ2Fwc3VsZUhlYWRlcjsNCj4g KyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgTmVzdGVkQ2Fwc3VsZVNpemU7DQo+ICsNCj4g KyAgLy8NCj4gKyAgLy8gQ2hlY2sgRVNSVA0KPiArICAvLw0KPiArICBFc3J0R3VpZEZvdW5kID0g RkFMU0U7DQo+ICsgIFN0YXR1cyA9IEVmaUdldFN5c3RlbUNvbmZpZ3VyYXRpb25UYWJsZSgmZ0Vm aVN5c3RlbVJlc291cmNlVGFibGVHdWlkLCAoVk9JRA0KPiAqKikmRXNydCk7DQo+ICsgIGlmICgh RUZJX0VSUk9SKFN0YXR1cykpIHsNCj4gKyAgICBFc3J0RW50cnkgPSAoVk9JRCAqKShFc3J0ICsg MSk7DQo+ICsgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgRXNydC0+RndSZXNvdXJjZUNvdW50 OyBJbmRleCsrLCBFc3J0RW50cnkrKykgew0KPiArICAgICAgaWYgKENvbXBhcmVHdWlkKCZFc3J0 RW50cnktPkZ3Q2xhc3MsICZDYXBzdWxlSGVhZGVyLT5DYXBzdWxlR3VpZCkpIHsNCj4gKyAgICAg ICAgRXNydEd1aWRGb3VuZCA9IFRSVUU7DQo+ICsgICAgICAgIGJyZWFrOw0KPiArICAgICAgfQ0K PiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIGlmICghRXNydEd1aWRGb3VuZCkgew0KPiArICAg IHJldHVybiBGQUxTRTsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIENoZWNrIG5lc3Rl ZCBjYXBzdWxlIGhlYWRlcg0KPiArICAvLyBGTVAgR1VJRCBhZnRlciBFU1JUIG9uZQ0KPiArICAv Lw0KPiArICBOZXN0ZWRDYXBzdWxlSGVhZGVyID0gKEVGSV9DQVBTVUxFX0hFQURFUiAqKSgoVUlO VDggKilDYXBzdWxlSGVhZGVyICsgQ2Fwc3VsZUhlYWRlci0NCj4gPkhlYWRlclNpemUpOw0KPiAr ICBOZXN0ZWRDYXBzdWxlU2l6ZSA9IChVSU5UTilDYXBzdWxlSGVhZGVyICsgQ2Fwc3VsZUhlYWRl ci0+SGVhZGVyU2l6ZSAtDQo+IChVSU5UTilOZXN0ZWRDYXBzdWxlSGVhZGVyOw0KPiArICBpZiAo TmVzdGVkQ2Fwc3VsZVNpemUgPCBzaXplb2YoRUZJX0NBUFNVTEVfSEVBREVSKSkgew0KPiArICAg IHJldHVybiBGQUxTRTsNCj4gKyAgfQ0KPiArICBpZiAoIUNvbXBhcmVHdWlkKCZOZXN0ZWRDYXBz dWxlSGVhZGVyLT5DYXBzdWxlR3VpZCwgJmdFZmlGbXBDYXBzdWxlR3VpZCkpIHsNCj4gKyAgICBy ZXR1cm4gRkFMU0U7DQo+ICsgIH0NCj4gKyAgcmV0dXJuIFRSVUU7DQo+ICt9DQo+ICsNCj4gKy8q Kg0KPiArICBEdW1wIGNhcHN1bGUgaW5mb3JtYXRpb24NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICAgICAgICAgVGhlIGNhcHN1bGUgaW5mb3JtYXRpb24gaXMgZHVtcGVkLg0KPiAr ICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgSW5wdXQgcGFyYW1ldGVyIGlzIG5vdCB2 YWxpZC4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRHVtcENhcHN1bGUoDQo+ICsgIFZPSUQN Cj4gKyAgKQ0KPiArew0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKkNhcHN1bGVOYW1lOw0KPiArICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKkJ1ZmZlcjsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZpbGVTaXplOw0KPiArICBCT09MRUFOICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSXNTeXN0ZW1GbXA7DQo+ICsgIEVGSV9DQVBTVUxF X0hFQURFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqQ2Fwc3VsZUhlYWRlcjsNCj4gKyAg RUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4g Kw0KPiArICBpZiAoQXJnYyAhPSAzKSB7DQo+ICsgICAgUHJpbnQoTCJDYXBzdWxlQXBwOiBJbnZh bGlkIFBhcmFtZXRlci5cbiIpOw0KPiArICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ICsg IH0NCj4gKw0KPiArICBJc1N5c3RlbUZtcCA9IEZBTFNFOw0KPiArICBpZiAoU3RyQ21wKEFyZ3Zb MV0sIEwiLURTIikgPT0gMCkgew0KPiArICAgIElzU3lzdGVtRm1wID0gVFJVRTsNCj4gKyAgfQ0K PiArDQo+ICsgIENhcHN1bGVOYW1lID0gQXJndlsyXTsNCj4gKyAgU3RhdHVzID0gUmVhZEZpbGVU b0J1ZmZlcihDYXBzdWxlTmFtZSwgJkZpbGVTaXplLCAmQnVmZmVyKTsNCj4gKyAgaWYgKEVGSV9F UlJPUihTdGF0dXMpKSB7DQo+ICsgICAgUHJpbnQoTCJDYXBzdWxlQXBwOiBDYXBzdWxlICglcykg aXMgbm90IGZvdW5kLlxuIiwgQ2Fwc3VsZU5hbWUpOw0KPiArICAgIGdvdG8gRG9uZTsNCj4gKyAg fQ0KPiArDQo+ICsgIENhcHN1bGVIZWFkZXIgPSBCdWZmZXI7DQo+ICsgIGlmIChDb21wYXJlR3Vp ZCgmQ2Fwc3VsZUhlYWRlci0+Q2Fwc3VsZUd1aWQsICZnV2luZG93c1V4Q2Fwc3VsZUd1aWQpKSB7 DQo+ICsgICAgRHVtcFV4Q2Fwc3VsZShDYXBzdWxlSGVhZGVyKTsNCj4gKyAgICBTdGF0dXMgPSBF RklfU1VDQ0VTUzsNCj4gKyAgICBnb3RvIERvbmU7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoQ29t cGFyZUd1aWQoJkNhcHN1bGVIZWFkZXItPkNhcHN1bGVHdWlkLCAmZ0VmaUZtcENhcHN1bGVHdWlk KSkgew0KPiArICAgIER1bXBGbXBDYXBzdWxlKENhcHN1bGVIZWFkZXIsIElzU3lzdGVtRm1wKTsN Cj4gKyAgfQ0KPiArICBpZiAoSXNOZXN0ZWRGbXBDYXBzdWxlKENhcHN1bGVIZWFkZXIpKSB7DQo+ ICsgICAgUHJpbnQoTCJbTmVzdGVkQ2FwdXN1bGVdXG4iKTsNCj4gKyAgICBQcmludChMIkNhcHN1 bGVIZWFkZXI6XG4iKTsNCj4gKyAgICBQcmludChMIiAgQ2Fwc3VsZUd1aWQgICAgICAtICVnXG4i LCAmQ2Fwc3VsZUhlYWRlci0+Q2Fwc3VsZUd1aWQpOw0KPiArICAgIFByaW50KEwiICBIZWFkZXJT aXplICAgICAgIC0gMHgleFxuIiwgQ2Fwc3VsZUhlYWRlci0+SGVhZGVyU2l6ZSk7DQo+ICsgICAg UHJpbnQoTCIgIEZsYWdzICAgICAgICAgICAgLSAweCV4XG4iLCBDYXBzdWxlSGVhZGVyLT5GbGFn cyk7DQo+ICsgICAgUHJpbnQoTCIgIENhcHN1bGVJbWFnZVNpemUgLSAweCV4XG4iLCBDYXBzdWxl SGVhZGVyLT5DYXBzdWxlSW1hZ2VTaXplKTsNCj4gKyAgICBEdW1wRm1wQ2Fwc3VsZSgoRUZJX0NB UFNVTEVfSEVBREVSICopKChVSU5UTilDYXBzdWxlSGVhZGVyICsgQ2Fwc3VsZUhlYWRlci0NCj4g PkhlYWRlclNpemUpLCBJc1N5c3RlbUZtcCk7DQo+ICsgIH0NCj4gKw0KPiArRG9uZToNCj4gKyAg RnJlZVBvb2woQnVmZmVyKTsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoq DQo+ICsgIER1bXAgY2Fwc3VsZSBzdGF0dXMgdmFyaWFibGUuDQo+ICsNCj4gKyAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBjYXBzdWxlIHN0YXR1cyB2YXJpYWJsZSBpcyBkdW1w ZWQuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICBJbnB1dCBwYXJhbWV0ZXIg aXMgbm90IHZhbGlkLg0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtEbXBDYXBzdWxlU3RhdHVz VmFyaWFibGUoDQo+ICsgIFZPSUQNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAg ICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEluZGV4Ow0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBDYXBzdWxlVmFyTmFtZVsyMF07DQo+ICsgIENIQVIxNiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICpUZW1wVmFyTmFtZTsNCj4gKyAgRUZJX0NBUFNVTEVfUkVTVUxUX1ZBUklBQkxF X0hFQURFUiAgKkNhcHN1bGVSZXN1bHQ7DQo+ICsgIEVGSV9DQVBTVUxFX1JFU1VMVF9WQVJJQUJM RV9GTVAgICAgICpDYXBzdWxlUmVzdWx0Rm1wOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBDYXBzdWxlRmlsZU5hbWVTaXplOw0KPiArICBDSEFSMTYgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBDYXBzdWxlSW5kZXhEYXRhWzEyXTsNCj4gKyAgQ0hBUjE2ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKkNhcHN1bGVJbmRleDsNCj4gKw0KPiArICBTdGF0 dXMgPSBHZXRWYXJpYWJsZTIoDQo+ICsgICAgICAgICAgICAgTCJDYXBzdWxlTWF4IiwNCj4gKyAg ICAgICAgICAgICAmZ0VmaUNhcHN1bGVSZXBvcnRHdWlkLA0KPiArICAgICAgICAgICAgIChWT0lE ICoqKSZDYXBzdWxlSW5kZXgsDQo+ICsgICAgICAgICAgICAgTlVMTA0KPiArICAgICAgICAgICAg ICk7DQo+ICsgIGlmICghRUZJX0VSUk9SKFN0YXR1cykpIHsNCj4gKyAgICBDb3B5TWVtKENhcHN1 bGVJbmRleERhdGEsIENhcHN1bGVJbmRleCwgMTEgKiBzaXplb2YoQ0hBUjE2KSk7DQo+ICsgICAg Q2Fwc3VsZUluZGV4RGF0YVsxMV0gPSAwOw0KPiArICAgIFByaW50KEwiQ2Fwc3VsZU1heCAtICVz XG4iLCBDYXBzdWxlSW5kZXhEYXRhKTsNCj4gKyAgICBGcmVlUG9vbChDYXBzdWxlSW5kZXgpOw0K PiArICB9DQo+ICsgIFN0YXR1cyA9IEdldFZhcmlhYmxlMigNCj4gKyAgICAgICAgICAgICBMIkNh cHN1bGVMYXN0IiwNCj4gKyAgICAgICAgICAgICAmZ0VmaUNhcHN1bGVSZXBvcnRHdWlkLA0KPiAr ICAgICAgICAgICAgIChWT0lEICoqKSZDYXBzdWxlSW5kZXgsDQo+ICsgICAgICAgICAgICAgTlVM TA0KPiArICAgICAgICAgICAgICk7DQo+ICsgIGlmICghRUZJX0VSUk9SKFN0YXR1cykpIHsNCj4g KyAgICBDb3B5TWVtKENhcHN1bGVJbmRleERhdGEsIENhcHN1bGVJbmRleCwgMTEgKiBzaXplb2Yo Q0hBUjE2KSk7DQo+ICsgICAgQ2Fwc3VsZUluZGV4RGF0YVsxMV0gPSAwOw0KPiArICAgIFByaW50 KEwiQ2Fwc3VsZUxhc3QgLSAlc1xuIiwgQ2Fwc3VsZUluZGV4RGF0YSk7DQo+ICsgICAgRnJlZVBv b2woQ2Fwc3VsZUluZGV4KTsNCj4gKyAgfQ0KPiArDQo+ICsNCj4gKyAgU3RyQ3B5UyAoQ2Fwc3Vs ZVZhck5hbWUsIHNpemVvZihDYXBzdWxlVmFyTmFtZSkvc2l6ZW9mKENhcHN1bGVWYXJOYW1lWzBd KSwNCj4gTCJDYXBzdWxlIik7DQo+ICsgIFRlbXBWYXJOYW1lID0gQ2Fwc3VsZVZhck5hbWUgKyBT dHJMZW4gKENhcHN1bGVWYXJOYW1lKTsNCj4gKyAgSW5kZXggPSAwOw0KPiArDQo+ICsgIHdoaWxl IChUUlVFKSB7DQo+ICsgICAgVW5pY29kZVNQcmludCAoVGVtcFZhck5hbWUsIDUgKiBzaXplb2Yo Q0hBUjE2KSwgTCIlMDR4IiwgSW5kZXgpOw0KPiArDQo+ICsgICAgU3RhdHVzID0gR2V0VmFyaWFi bGUyICgNCj4gKyAgICAgICAgICAgICAgIENhcHN1bGVWYXJOYW1lLA0KPiArICAgICAgICAgICAg ICAgJmdFZmlDYXBzdWxlUmVwb3J0R3VpZCwNCj4gKyAgICAgICAgICAgICAgIChWT0lEICoqKSAm Q2Fwc3VsZVJlc3VsdCwNCj4gKyAgICAgICAgICAgICAgIE5VTEwNCj4gKyAgICAgICAgICAgICAg ICk7DQo+ICsgICAgaWYgKFN0YXR1cyA9PSBFRklfTk9UX0ZPVU5EKSB7DQo+ICsgICAgICBicmVh azsNCj4gKyAgICB9IGVsc2UgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgICBjb250 aW51ZTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICAvLw0KPiArICAgIC8vIGRpc3BsYXkgY2Fwc3Vs ZSBwcm9jZXNzIHN0YXR1cw0KPiArICAgIC8vDQo+ICsgICAgaWYgKENhcHN1bGVSZXN1bHQtPlZh cmlhYmxlVG90YWxTaXplID49DQo+IHNpemVvZihFRklfQ0FQU1VMRV9SRVNVTFRfVkFSSUFCTEVf SEVBREVSKSkgew0KPiArICAgICAgUHJpbnQgKEwiQ2Fwc3VsZU5hbWU6ICVzXG4iLCBDYXBzdWxl VmFyTmFtZSk7DQo+ICsgICAgICBQcmludCAoTCIgIENhcHN1bGUgR3VpZDogJWdcbiIsICZDYXBz dWxlUmVzdWx0LT5DYXBzdWxlR3VpZCk7DQo+ICsgICAgICBQcmludCAoTCIgIENhcHN1bGUgUHJv Y2Vzc2VkVGltZTogJXRcbiIsICZDYXBzdWxlUmVzdWx0LT5DYXBzdWxlUHJvY2Vzc2VkKTsNCj4g KyAgICAgIFByaW50IChMIiAgQ2Fwc3VsZSBTdGF0dXM6ICVyXG4iLCBDYXBzdWxlUmVzdWx0LT5D YXBzdWxlU3RhdHVzKTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAoQ29tcGFyZUd1aWQoJkNh cHN1bGVSZXN1bHQtPkNhcHN1bGVHdWlkLCAmZ0VmaUZtcENhcHN1bGVHdWlkKSkgew0KPiArICAg ICAgaWYgKENhcHN1bGVSZXN1bHQtPlZhcmlhYmxlVG90YWxTaXplID49DQo+IHNpemVvZihFRklf Q0FQU1VMRV9SRVNVTFRfVkFSSUFCTEVfSEVBREVSKSArIHNpemVvZihFRklfQ0FQU1VMRV9SRVNV TFRfVkFSSUFCTEVfRk1QKSkgew0KPiArICAgICAgICBDYXBzdWxlUmVzdWx0Rm1wID0gKEVGSV9D QVBTVUxFX1JFU1VMVF9WQVJJQUJMRV9GTVAgKikoQ2Fwc3VsZVJlc3VsdCArIDEpOw0KPiArICAg ICAgICBQcmludChMIiAgQ2Fwc3VsZSBGTVAgVmVyc2lvbjogMHgleFxuIiwgQ2Fwc3VsZVJlc3Vs dEZtcC0+VmVyc2lvbik7DQo+ICsgICAgICAgIFByaW50KEwiICBDYXBzdWxlIEZNUCBQYXlsb2Fk SW5kZXg6IDB4JXhcbiIsIENhcHN1bGVSZXN1bHRGbXAtPlBheWxvYWRJbmRleCk7DQo+ICsgICAg ICAgIFByaW50KEwiICBDYXBzdWxlIEZNUCBVcGRhdGVJbWFnZUluZGV4OiAweCV4XG4iLCBDYXBz dWxlUmVzdWx0Rm1wLQ0KPiA+VXBkYXRlSW1hZ2VJbmRleCk7DQo+ICsgICAgICAgIFByaW50KEwi ICBDYXBzdWxlIEZNUCBVcGRhdGVJbWFnZVR5cGVJZDogJWdcbiIsICZDYXBzdWxlUmVzdWx0Rm1w LQ0KPiA+VXBkYXRlSW1hZ2VUeXBlSWQpOw0KPiArICAgICAgICBpZiAoQ2Fwc3VsZVJlc3VsdC0+ VmFyaWFibGVUb3RhbFNpemUgPg0KPiBzaXplb2YoRUZJX0NBUFNVTEVfUkVTVUxUX1ZBUklBQkxF X0hFQURFUikgKyBzaXplb2YoRUZJX0NBUFNVTEVfUkVTVUxUX1ZBUklBQkxFX0ZNUCkpIHsNCj4g KyAgICAgICAgICBQcmludChMIiAgQ2Fwc3VsZSBGTVAgQ2Fwc3VsZUZpbGVOYW1lOiAlc1xuIiwg KENhcHN1bGVSZXN1bHRGbXAgKyAxKSk7DQo+ICsgICAgICAgICAgQ2Fwc3VsZUZpbGVOYW1lU2l6 ZSA9IFN0clNpemUoKENIQVIxNiAqKShDYXBzdWxlUmVzdWx0Rm1wICsgMSkpOw0KPiArICAgICAg ICAgIGlmIChDYXBzdWxlUmVzdWx0LT5WYXJpYWJsZVRvdGFsU2l6ZSA+DQo+IHNpemVvZihFRklf Q0FQU1VMRV9SRVNVTFRfVkFSSUFCTEVfSEVBREVSKSArIHNpemVvZihFRklfQ0FQU1VMRV9SRVNV TFRfVkFSSUFCTEVfRk1QKSArDQo+IENhcHN1bGVGaWxlTmFtZVNpemUpIHsNCj4gKyAgICAgICAg ICAgIFByaW50KEwiICBDYXBzdWxlIEZNUCBDYXBzdWxlVGFyZ2V0OiAlc1xuIiwgKFVJTlQ4ICop KENhcHN1bGVSZXN1bHRGbXAgKw0KPiAxKSArIENhcHN1bGVGaWxlTmFtZVNpemUpOw0KPiArICAg ICAgICAgIH0NCj4gKyAgICAgICAgfQ0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKw0KPiArICAg IEZyZWVQb29sKENhcHN1bGVSZXN1bHQpOw0KPiArDQo+ICsgICAgSW5kZXgrKzsNCj4gKyAgICBp ZiAoSW5kZXggPiAweEZGRkYpIHsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIH0NCj4gKyAgfQ0K PiArDQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArQ0hBUjggKm1Gd1R5 cGVTdHJpbmdbXSA9IHsNCj4gKyAgIlVua25vd24iLA0KPiArICAiU3lzdGVtRmlybXdhcmUiLA0K PiArICAiRGV2aWNlRmlybXdhcmUiLA0KPiArICAiVWVmaURyaXZlciIsDQo+ICt9Ow0KPiArDQo+ ICtDSEFSOCAqbUxhc3RBdHRlbXB0U3RhdHVzU3RyaW5nW10gPSB7DQo+ICsgICJTdWNjZXNzIiwN Cj4gKyAgIkVycm9yOiBVbnN1Y2Nlc3NmdWwiLA0KPiArICAiRXJyb3I6IEluc3VmZmljaWVudCBS ZXNvdXJjZXMiLA0KPiArICAiRXJyb3I6IEluY29ycmVjdCBWZXJzaW9uIiwNCj4gKyAgIkVycm9y OiBJbnZhbGlkIEZvcm1hdCIsDQo+ICsgICJFcnJvcjogQXV0aCBFcnJvciIsDQo+ICsgICJFcnJv cjogUG93ZXIgRXZlbnQgQUMiLA0KPiArICAiRXJyb3I6IFBvd2VyIEV2ZW50IEJhdHRlcnkiLA0K PiArfTsNCj4gKw0KPiArLyoqDQo+ICsgIENvbnZlcnQgRndUeXBlIHRvIGEgc3RyaW5nLg0KPiAr DQo+ICsgIEBwYXJhbSBGd1R5cGUgIEZ3VHlwZSBpbiBFU1JUDQo+ICsNCj4gKyAgQHJldHVybiBh IHN0cmluZyBmb3IgRndUeXBlLg0KPiArKiovDQo+ICtDSEFSOCAqDQo+ICtGd1R5cGVUb1N0cmlu ZygNCj4gKyAgSU4gVUlOVDMyIEZ3VHlwZQ0KPiArICApDQo+ICt7DQo+ICsgIGlmIChGd1R5cGUg PCBzaXplb2YobUZ3VHlwZVN0cmluZykgLyBzaXplb2YobUZ3VHlwZVN0cmluZ1swXSkpIHsNCj4g KyAgICByZXR1cm4gbUZ3VHlwZVN0cmluZ1tGd1R5cGVdOw0KPiArICB9IGVsc2Ugew0KPiArICAg IHJldHVybiAiSW52YWxpZCI7DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENvbnZl cnQgTGFzdEF0dGVtcHRTdGF0dXMgdG8gYSBzdHJpbmcuDQo+ICsNCj4gKyAgQHBhcmFtIExhc3RB dHRlbXB0U3RhdHVzICBMYXN0QXR0ZW1wdFN0YXR1cyBpbiBGTVAgb3IgRVNSVA0KPiArDQo+ICsg IEByZXR1cm4gYSBzdHJpbmcgZm9yIExhc3RBdHRlbXB0U3RhdHVzLg0KPiArKiovDQo+ICtDSEFS OCAqDQo+ICtMYXN0QXR0ZW1wdFN0YXR1c1RvU3RyaW5nKA0KPiArICBJTiBVSU5UMzIgTGFzdEF0 dGVtcHRTdGF0dXMNCj4gKyAgKQ0KPiArew0KPiArICBpZiAoTGFzdEF0dGVtcHRTdGF0dXMgPCBz aXplb2YobUxhc3RBdHRlbXB0U3RhdHVzU3RyaW5nKSAvDQo+IHNpemVvZihtTGFzdEF0dGVtcHRT dGF0dXNTdHJpbmdbMF0pKSB7DQo+ICsgICAgcmV0dXJuIG1MYXN0QXR0ZW1wdFN0YXR1c1N0cmlu Z1tMYXN0QXR0ZW1wdFN0YXR1c107DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgcmV0dXJuICJFcnJv cjogVW5rbm93biI7DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIER1bXAgRVNSVCBl bnRyeS4NCj4gKw0KPiArICBAcGFyYW0gRXNydEVudHJ5ICBFU1JUIGVudHJ5DQo+ICsqKi8NCj4g K1ZPSUQNCj4gK0R1bXBFc3J0RW50cnkoDQo+ICsgIElOIEVGSV9TWVNURU1fUkVTT1VSQ0VfRU5U UlkgICpFc3J0RW50cnkNCj4gKyAgKQ0KPiArew0KPiArICBQcmludChMIiAgRndDbGFzcyAgICAg ICAgICAgICAgICAgIC0gJWdcbiIsICZFc3J0RW50cnktPkZ3Q2xhc3MpOw0KPiArICBQcmludChM IiAgRndUeXBlICAgICAgICAgICAgICAgICAgIC0gMHgleCAoJWEpXG4iLCBFc3J0RW50cnktPkZ3 VHlwZSwNCj4gRndUeXBlVG9TdHJpbmcoRXNydEVudHJ5LT5Gd1R5cGUpKTsNCj4gKyAgUHJpbnQo TCIgIEZ3VmVyc2lvbiAgICAgICAgICAgICAgICAtIDB4JXhcbiIsIEVzcnRFbnRyeS0+RndWZXJz aW9uKTsNCj4gKyAgUHJpbnQoTCIgIExvd2VzdFN1cHBvcnRlZEZ3VmVyc2lvbiAtIDB4JXhcbiIs IEVzcnRFbnRyeS0+TG93ZXN0U3VwcG9ydGVkRndWZXJzaW9uKTsNCj4gKyAgUHJpbnQoTCIgIENh cHN1bGVGbGFncyAgICAgICAgICAgICAtIDB4JXhcbiIsIEVzcnRFbnRyeS0+Q2Fwc3VsZUZsYWdz KTsNCj4gKyAgUHJpbnQoTCIgICAgUEVSU0lTVF9BQ1JPU1NfUkVTRVQgICAtIDB4JXhcbiIsIEVz cnRFbnRyeS0+Q2Fwc3VsZUZsYWdzICYNCj4gQ0FQU1VMRV9GTEFHU19QRVJTSVNUX0FDUk9TU19S RVNFVCk7DQo+ICsgIFByaW50KEwiICAgIFBPUFVMQVRFX1NZU1RFTV9UQUJMRSAgLSAweCV4XG4i LCBFc3J0RW50cnktPkNhcHN1bGVGbGFncyAmDQo+IENBUFNVTEVfRkxBR1NfUE9QVUxBVEVfU1lT VEVNX1RBQkxFKTsNCj4gKyAgUHJpbnQoTCIgICAgSU5JVElBVEVfUkVTRVQgICAgICAgICAtIDB4 JXhcbiIsIEVzcnRFbnRyeS0+Q2Fwc3VsZUZsYWdzICYNCj4gQ0FQU1VMRV9GTEFHU19JTklUSUFU RV9SRVNFVCk7DQo+ICsgIFByaW50KEwiICBMYXN0QXR0ZW1wdFZlcnNpb24gICAgICAgLSAweCV4 XG4iLCBFc3J0RW50cnktPkxhc3RBdHRlbXB0VmVyc2lvbik7DQo+ICsgIFByaW50KEwiICBMYXN0 QXR0ZW1wdFN0YXR1cyAgICAgICAgLSAweCV4ICglYSlcbiIsIEVzcnRFbnRyeS0+TGFzdEF0dGVt cHRTdGF0dXMsDQo+IExhc3RBdHRlbXB0U3RhdHVzVG9TdHJpbmcoRXNydEVudHJ5LT5MYXN0QXR0 ZW1wdFN0YXR1cykpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgRHVtcCBFU1JUIHRhYmxlLg0K PiArDQo+ICsgIEBwYXJhbSBFc3J0ICBFU1JUIHRhYmxlDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0R1 bXBFc3J0KA0KPiArICBJTiBFRklfU1lTVEVNX1JFU09VUkNFX1RBQkxFICAqRXNydA0KPiArICAp DQo+ICt7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiArICBFRklf U1lTVEVNX1JFU09VUkNFX0VOVFJZICAqRXNydEVudHJ5Ow0KPiArDQo+ICsgIFByaW50KEwiRUZJ X1NZU1RFTV9SRVNPVVJDRV9UQUJMRTpcbiIpOw0KPiArICBQcmludChMIkZ3UmVzb3VyY2VDb3Vu dCAgICAtIDB4JXhcbiIsIEVzcnQtPkZ3UmVzb3VyY2VDb3VudCk7DQo+ICsgIFByaW50KEwiRndS ZXNvdXJjZUNvdW50TWF4IC0gMHgleFxuIiwgRXNydC0+RndSZXNvdXJjZUNvdW50TWF4KTsNCj4g KyAgUHJpbnQoTCJGd1Jlc291cmNlVmVyc2lvbiAgLSAweCVseFxuIiwgRXNydC0+RndSZXNvdXJj ZVZlcnNpb24pOw0KPiArDQo+ICsgIEVzcnRFbnRyeSA9IChWT0lEICopKEVzcnQgKyAxKTsNCj4g KyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgRXNydC0+RndSZXNvdXJjZUNvdW50OyBJbmRleCsr KSB7DQo+ICsgICAgUHJpbnQoTCJFRklfU1lTVEVNX1JFU09VUkNFX0VOVFJZICglZCk6XG4iLCBJ bmRleCk7DQo+ICsgICAgRHVtcEVzcnRFbnRyeShFc3J0RW50cnkpOw0KPiArICAgIEVzcnRFbnRy eSsrOw0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBEdW1wIEVTUlQgaW5mby4NCj4g KyoqLw0KPiArVk9JRA0KPiArRHVtcEVzcnREYXRhICgNCj4gKyAgVk9JRA0KPiArICApDQo+ICt7 DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX1NZU1RF TV9SRVNPVVJDRV9UQUJMRSAgKkVzcnQ7DQo+ICsNCj4gKyAgUHJpbnQoTCIjIyMjIyMjIyMjIyMj I1xuIik7DQo+ICsgIFByaW50KEwiIyBFU1JUIFRBQkxFICNcbiIpOw0KPiArICBQcmludChMIiMj IyMjIyMjIyMjIyMjXG4iKTsNCj4gKw0KPiArICBTdGF0dXMgPSBFZmlHZXRTeXN0ZW1Db25maWd1 cmF0aW9uVGFibGUgKCZnRWZpU3lzdGVtUmVzb3VyY2VUYWJsZUd1aWQsIChWT0lEDQo+ICoqKSZF c3J0KTsNCj4gKyAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgUHJpbnQoTCJFU1JU IC0gJXJcbiIsIFN0YXR1cyk7DQo+ICsgICAgcmV0dXJuOw0KPiArICB9DQo+ICsgIER1bXBFc3J0 KEVzcnQpOw0KPiArICBQcmludChMIlxuIik7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBEdW1w IEZNUCBpbmZvcm1hdGlvbi4NCj4gKw0KPiArICBAcGFyYW0gSW1hZ2VJbmZvU2l6ZSAgICAgICBU aGUgc2l6ZSBvZiBJbWFnZUluZm8sIGluIGJ5dGVzLg0KPiArICBAcGFyYW0gSW1hZ2VJbmZvICAg ICAgICAgICBBIHBvaW50ZXIgdG8gRUZJX0ZJUk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IuDQo+ICsg IEBwYXJhbSBEZXNjcmlwdG9yVmVyc2lvbiAgIFRoZSB2ZXJzaW9uIG9mIEVGSV9GSVJNV0FSRV9J TUFHRV9ERVNDUklQVE9SLg0KPiArICBAcGFyYW0gRGVzY3JpcHRvckNvdW50ICAgICBUaGUgY291 bnQgb2YgRUZJX0ZJUk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IuDQo+ICsgIEBwYXJhbSBEZXNjcmlw dG9yU2l6ZSAgICAgIFRoZSBzaXplIG9mIGFuIGluZGl2aWR1YWwgRUZJX0ZJUk1XQVJFX0lNQUdF X0RFU0NSSVBUT1IsDQo+IGluIGJ5dGVzLg0KPiArICBAcGFyYW0gUGFja2FnZVZlcnNpb24gICAg ICBUaGUgdmVyc2lvbiBvZiBwYWNrYWdlLg0KPiArICBAcGFyYW0gUGFja2FnZVZlcnNpb25OYW1l ICBUaGUgdmVyc2lvbiBuYW1lIG9mIHBhY2thZ2UuDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0R1bXBG bXBJbWFnZUluZm8oDQo+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1h Z2VJbmZvU2l6ZSwNCj4gKyAgSU4gRUZJX0ZJUk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IgICAqSW1h Z2VJbmZvLA0KPiArICBJTiBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0 b3JWZXJzaW9uLA0KPiArICBJTiBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2Ny aXB0b3JDb3VudCwNCj4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNj cmlwdG9yU2l6ZSwNCj4gKyAgSU4gVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNr YWdlVmVyc2lvbiwNCj4gKyAgSU4gQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAqUGFj a2FnZVZlcnNpb25OYW1lDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX0ZJUk1XQVJFX0lNQUdFX0RF U0NSSVBUT1IgICAgICAgICAgICAgICAgICpDdXJyZW50SW1hZ2VJbmZvOw0KPiArICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsNCj4gKyAg UHJpbnQoTCIgIERlc2NyaXB0b3JWZXJzaW9uICAtIDB4JXhcbiIsIERlc2NyaXB0b3JWZXJzaW9u KTsNCj4gKyAgUHJpbnQoTCIgIERlc2NyaXB0b3JDb3VudCAgICAtIDB4JXhcbiIsIERlc2NyaXB0 b3JDb3VudCk7DQo+ICsgIFByaW50KEwiICBEZXNjcmlwdG9yU2l6ZSAgICAgLSAweCV4XG4iLCBE ZXNjcmlwdG9yU2l6ZSk7DQo+ICsgIFByaW50KEwiICBQYWNrYWdlVmVyc2lvbiAgICAgLSAweCV4 XG4iLCBQYWNrYWdlVmVyc2lvbik7DQo+ICsgIFByaW50KEwiICBQYWNrYWdlVmVyc2lvbk5hbWUg LSBcIiVzXCJcbiIsIFBhY2thZ2VWZXJzaW9uTmFtZSk7DQo+ICsgIEN1cnJlbnRJbWFnZUluZm8g PSBJbWFnZUluZm87DQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IERlc2NyaXB0b3JDb3Vu dDsgSW5kZXgrKykgew0KPiArICAgIFByaW50KEwiICBJbWFnZURlc2NyaXB0b3IgKCVkKVxuIiwg SW5kZXgpOw0KPiArICAgIFByaW50KEwiICAgIEltYWdlSW5kZXggICAgICAgICAgICAgICAgICAt IDB4JXhcbiIsIEN1cnJlbnRJbWFnZUluZm8tPkltYWdlSW5kZXgpOw0KPiArICAgIFByaW50KEwi ICAgIEltYWdlVHlwZUlkICAgICAgICAgICAgICAgICAtICVnXG4iLCAmQ3VycmVudEltYWdlSW5m by0+SW1hZ2VUeXBlSWQpOw0KPiArICAgIFByaW50KEwiICAgIEltYWdlSWQgICAgICAgICAgICAg ICAgICAgICAtIDB4JWx4XG4iLCBDdXJyZW50SW1hZ2VJbmZvLT5JbWFnZUlkKTsNCj4gKyAgICBQ cmludChMIiAgICBJbWFnZUlkTmFtZSAgICAgICAgICAgICAgICAgLSBcIiVzXCJcbiIsIEN1cnJl bnRJbWFnZUluZm8tDQo+ID5JbWFnZUlkTmFtZSk7DQo+ICsgICAgUHJpbnQoTCIgICAgVmVyc2lv biAgICAgICAgICAgICAgICAgICAgIC0gMHgleFxuIiwgQ3VycmVudEltYWdlSW5mby0+VmVyc2lv bik7DQo+ICsgICAgUHJpbnQoTCIgICAgVmVyc2lvbk5hbWUgICAgICAgICAgICAgICAgIC0gXCIl c1wiXG4iLCBDdXJyZW50SW1hZ2VJbmZvLQ0KPiA+VmVyc2lvbk5hbWUpOw0KPiArICAgIFByaW50 KEwiICAgIFNpemUgICAgICAgICAgICAgICAgICAgICAgICAtIDB4JXhcbiIsIEN1cnJlbnRJbWFn ZUluZm8tPlNpemUpOw0KPiArICAgIFByaW50KEwiICAgIEF0dHJpYnV0ZXNTdXBwb3J0ZWQgICAg ICAgICAtIDB4JWx4XG4iLCBDdXJyZW50SW1hZ2VJbmZvLQ0KPiA+QXR0cmlidXRlc1N1cHBvcnRl ZCk7DQo+ICsgICAgUHJpbnQoTCIgICAgICBJTUFHRV9VUERBVEFCTEUgICAgICAgICAgIC0gMHgl bHhcbiIsIEN1cnJlbnRJbWFnZUluZm8tDQo+ID5BdHRyaWJ1dGVzU3VwcG9ydGVkICYgSU1BR0Vf QVRUUklCVVRFX0lNQUdFX1VQREFUQUJMRSk7DQo+ICsgICAgUHJpbnQoTCIgICAgICBSRVNFVF9S RVFVSVJFRCAgICAgICAgICAgIC0gMHglbHhcbiIsIEN1cnJlbnRJbWFnZUluZm8tDQo+ID5BdHRy aWJ1dGVzU3VwcG9ydGVkICYgSU1BR0VfQVRUUklCVVRFX1JFU0VUX1JFUVVJUkVEKTsNCj4gKyAg ICBQcmludChMIiAgICAgIEFVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEICAgLSAweCVseFxuIiwgQ3Vy cmVudEltYWdlSW5mby0NCj4gPkF0dHJpYnV0ZXNTdXBwb3J0ZWQgJiBJTUFHRV9BVFRSSUJVVEVf QVVUSEVOVElDQVRJT05fUkVRVUlSRUQpOw0KPiArICAgIFByaW50KEwiICAgICAgSU5fVVNFICAg ICAgICAgICAgICAgICAgICAtIDB4JWx4XG4iLCBDdXJyZW50SW1hZ2VJbmZvLQ0KPiA+QXR0cmli dXRlc1N1cHBvcnRlZCAmIElNQUdFX0FUVFJJQlVURV9JTl9VU0UpOw0KPiArICAgIFByaW50KEwi ICAgICAgVUVGSV9JTUFHRSAgICAgICAgICAgICAgICAtIDB4JWx4XG4iLCBDdXJyZW50SW1hZ2VJ bmZvLQ0KPiA+QXR0cmlidXRlc1N1cHBvcnRlZCAmIElNQUdFX0FUVFJJQlVURV9VRUZJX0lNQUdF KTsNCj4gKyAgICBQcmludChMIiAgICBBdHRyaWJ1dGVzU2V0dGluZyAgICAgICAgICAgLSAweCVs eFxuIiwgQ3VycmVudEltYWdlSW5mby0NCj4gPkF0dHJpYnV0ZXNTZXR0aW5nKTsNCj4gKyAgICBQ cmludChMIiAgICAgIElNQUdFX1VQREFUQUJMRSAgICAgICAgICAgLSAweCVseFxuIiwgQ3VycmVu dEltYWdlSW5mby0NCj4gPkF0dHJpYnV0ZXNTZXR0aW5nICYgSU1BR0VfQVRUUklCVVRFX0lNQUdF X1VQREFUQUJMRSk7DQo+ICsgICAgUHJpbnQoTCIgICAgICBSRVNFVF9SRVFVSVJFRCAgICAgICAg ICAgIC0gMHglbHhcbiIsIEN1cnJlbnRJbWFnZUluZm8tDQo+ID5BdHRyaWJ1dGVzU2V0dGluZyAm IElNQUdFX0FUVFJJQlVURV9SRVNFVF9SRVFVSVJFRCk7DQo+ICsgICAgUHJpbnQoTCIgICAgICBB VVRIRU5USUNBVElPTl9SRVFVSVJFRCAgIC0gMHglbHhcbiIsIEN1cnJlbnRJbWFnZUluZm8tDQo+ ID5BdHRyaWJ1dGVzU2V0dGluZyAmIElNQUdFX0FUVFJJQlVURV9BVVRIRU5USUNBVElPTl9SRVFV SVJFRCk7DQo+ICsgICAgUHJpbnQoTCIgICAgICBJTl9VU0UgICAgICAgICAgICAgICAgICAgIC0g MHglbHhcbiIsIEN1cnJlbnRJbWFnZUluZm8tDQo+ID5BdHRyaWJ1dGVzU2V0dGluZyAmIElNQUdF X0FUVFJJQlVURV9JTl9VU0UpOw0KPiArICAgIFByaW50KEwiICAgICAgVUVGSV9JTUFHRSAgICAg ICAgICAgICAgICAtIDB4JWx4XG4iLCBDdXJyZW50SW1hZ2VJbmZvLQ0KPiA+QXR0cmlidXRlc1Nl dHRpbmcgJiBJTUFHRV9BVFRSSUJVVEVfVUVGSV9JTUFHRSk7DQo+ICsgICAgUHJpbnQoTCIgICAg Q29tcGF0aWJpbGl0aWVzICAgICAgICAgICAgIC0gMHglbHhcbiIsIEN1cnJlbnRJbWFnZUluZm8t DQo+ID5Db21wYXRpYmlsaXRpZXMpOw0KPiArICAgIFByaW50KEwiICAgICAgQ09NUEFUSUJfQ0hF Q0tfU1VQUE9SVEVEICAtIDB4JWx4XG4iLCBDdXJyZW50SW1hZ2VJbmZvLQ0KPiA+Q29tcGF0aWJp bGl0aWVzICYgSU1BR0VfQ09NUEFUSUJJTElUWV9DSEVDS19TVVBQT1JURUQpOw0KPiArICAgIGlm IChEZXNjcmlwdG9yVmVyc2lvbiA+IDEpIHsNCj4gKyAgICAgIFByaW50KEwiICAgIExvd2VzdFN1 cHBvcnRlZEltYWdlVmVyc2lvbiAtIDB4JXhcbiIsIEN1cnJlbnRJbWFnZUluZm8tDQo+ID5Mb3dl c3RTdXBwb3J0ZWRJbWFnZVZlcnNpb24pOw0KPiArICAgICAgaWYgKERlc2NyaXB0b3JWZXJzaW9u ID4gMikgew0KPiArICAgICAgICBQcmludChMIiAgICBMYXN0QXR0ZW1wdFZlcnNpb24gICAgICAg ICAgLSAweCV4XG4iLCBDdXJyZW50SW1hZ2VJbmZvLQ0KPiA+TGFzdEF0dGVtcHRWZXJzaW9uKTsN Cj4gKyAgICAgICAgUHJpbnQoTCIgICAgTGFzdEF0dGVtcHRTdGF0dXMgICAgICAgICAgIC0gMHgl eCAoJWEpXG4iLCBDdXJyZW50SW1hZ2VJbmZvLQ0KPiA+TGFzdEF0dGVtcHRTdGF0dXMsIExhc3RB dHRlbXB0U3RhdHVzVG9TdHJpbmcoQ3VycmVudEltYWdlSW5mby0+TGFzdEF0dGVtcHRTdGF0dXMp KTsNCj4gKyAgICAgICAgUHJpbnQoTCIgICAgSGFyZHdhcmVJbnN0YW5jZSAgICAgICAgICAgIC0g MHglbHhcbiIsIEN1cnJlbnRJbWFnZUluZm8tDQo+ID5IYXJkd2FyZUluc3RhbmNlKTsNCj4gKyAg ICAgIH0NCj4gKyAgICB9DQo+ICsgICAgLy8NCj4gKyAgICAvLyBVc2UgRGVzY3JpcHRvclNpemUg dG8gbW92ZSBJbWFnZUluZm8gUG9pbnRlciB0byBzdGF5IGNvbXBhdGlibGUgd2l0aCBkaWZmZXJl bnQNCj4gSW1hZ2VJbmZvIHZlcnNpb24NCj4gKyAgICAvLw0KPiArICAgIEN1cnJlbnRJbWFnZUlu Zm8gPSAoRUZJX0ZJUk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IgKikoKFVJTlQ4ICopQ3VycmVudElt YWdlSW5mbyArDQo+IERlc2NyaXB0b3JTaXplKTsNCj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsvKioN Cj4gKyAgRHVtcCBGTVAgcGFja2FnZSBpbmZvcm1hdGlvbi4NCj4gKw0KPiArICBAcGFyYW0gUGFj a2FnZVZlcnNpb24gICAgICAgICAgICAgVGhlIHZlcnNpb24gb2YgcGFja2FnZS4NCj4gKyAgQHBh cmFtIFBhY2thZ2VWZXJzaW9uTmFtZSAgICAgICAgIFRoZSB2ZXJzaW9uIG5hbWUgb2YgcGFja2Fn ZS4NCj4gKyAgQHBhcmFtIFBhY2thZ2VWZXJzaW9uTmFtZU1heExlbiAgIFRoZSBtYXhpbXVtIGxl bmd0aCBvZiBQYWNrYWdlVmVyc2lvbk5hbWUuDQo+ICsgIEBwYXJhbSBBdHRyaWJ1dGVzU3VwcG9y dGVkICAgICAgICBQYWNrYWdlIGF0dHJpYnV0ZXMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHRoaXMN Cj4gZGV2aWNlLg0KPiArICBAcGFyYW0gQXR0cmlidXRlc1NldHRpbmcgICAgICAgICAgUGFja2Fn ZSBhdHRyaWJ1dGVzLg0KPiArKiovDQo+ICtWT0lEDQo+ICtEdW1wRm1wUGFja2FnZUluZm8oDQo+ ICsgIElOIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VWZXJzaW9uLA0K PiArICBJTiBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAqUGFja2FnZVZlcnNpb25O YW1lLA0KPiArICBJTiBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlVmVy c2lvbk5hbWVNYXhMZW4sDQo+ICsgIElOIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAg IEF0dHJpYnV0ZXNTdXBwb3J0ZWQsDQo+ICsgIElOIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAg ICAgICAgIEF0dHJpYnV0ZXNTZXR0aW5nDQo+ICsgICkNCj4gK3sNCj4gKyAgUHJpbnQoTCIgIFBh Y2thZ2VWZXJzaW9uICAgICAgICAgICAgICAtIDB4JXhcbiIsIFBhY2thZ2VWZXJzaW9uKTsNCj4g KyAgUHJpbnQoTCIgIFBhY2thZ2VWZXJzaW9uTmFtZSAgICAgICAgICAtIFwiJXNcIlxuIiwgUGFj a2FnZVZlcnNpb25OYW1lKTsNCj4gKyAgUHJpbnQoTCIgIFBhY2thZ2VWZXJzaW9uTmFtZU1heExl biAgICAtIDB4JXhcbiIsIFBhY2thZ2VWZXJzaW9uTmFtZU1heExlbik7DQo+ICsgIFByaW50KEwi ICBBdHRyaWJ1dGVzU3VwcG9ydGVkICAgICAgICAgLSAweCVseFxuIiwgQXR0cmlidXRlc1N1cHBv cnRlZCk7DQo+ICsgIFByaW50KEwiICAgIElNQUdFX1VQREFUQUJMRSAgICAgICAgICAgLSAweCVs eFxuIiwgQXR0cmlidXRlc1N1cHBvcnRlZCAmDQo+IElNQUdFX0FUVFJJQlVURV9JTUFHRV9VUERB VEFCTEUpOw0KPiArICBQcmludChMIiAgICBSRVNFVF9SRVFVSVJFRCAgICAgICAgICAgIC0gMHgl bHhcbiIsIEF0dHJpYnV0ZXNTdXBwb3J0ZWQgJg0KPiBJTUFHRV9BVFRSSUJVVEVfUkVTRVRfUkVR VUlSRUQpOw0KPiArICBQcmludChMIiAgICBBVVRIRU5USUNBVElPTl9SRVFVSVJFRCAgIC0gMHgl bHhcbiIsIEF0dHJpYnV0ZXNTdXBwb3J0ZWQgJg0KPiBJTUFHRV9BVFRSSUJVVEVfQVVUSEVOVElD QVRJT05fUkVRVUlSRUQpOw0KPiArICBQcmludChMIiAgQXR0cmlidXRlc1NldHRpbmcgICAgICAg ICAgIC0gMHglbHhcbiIsIEF0dHJpYnV0ZXNTZXR0aW5nKTsNCj4gKyAgUHJpbnQoTCIgICAgSU1B R0VfVVBEQVRBQkxFICAgICAgICAgICAtIDB4JWx4XG4iLCBBdHRyaWJ1dGVzU2V0dGluZyAmDQo+ IElNQUdFX0FUVFJJQlVURV9JTUFHRV9VUERBVEFCTEUpOw0KPiArICBQcmludChMIiAgICBSRVNF VF9SRVFVSVJFRCAgICAgICAgICAgIC0gMHglbHhcbiIsIEF0dHJpYnV0ZXNTZXR0aW5nICYNCj4g SU1BR0VfQVRUUklCVVRFX1JFU0VUX1JFUVVJUkVEKTsNCj4gKyAgUHJpbnQoTCIgICAgQVVUSEVO VElDQVRJT05fUkVRVUlSRUQgICAtIDB4JWx4XG4iLCBBdHRyaWJ1dGVzU2V0dGluZyAmDQo+IElN QUdFX0FUVFJJQlVURV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRCk7DQo+ICt9DQo+ICsNCj4gKy8q Kg0KPiArICBEdW1wIEZNUCBwcm90b2NvbCBpbmZvLg0KPiArKiovDQo+ICtWT0lEDQo+ICtEdW1w Rm1wRGF0YSAoDQo+ICsgIFZPSUQNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBFRklfRklSTVdBUkVf TUFOQUdFTUVOVF9QUk9UT0NPTCAgICAgICAgICAgICAgKkZtcDsNCj4gKyAgRUZJX0hBTkRMRSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpIYW5kbGVCdWZmZXI7DQo+ICsgIFVJ TlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXJPZkhhbmRs ZXM7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ bmRleDsNCj4gKyAgRUZJX0ZJUk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IgICAgICAgICAgICAgICAg ICpGbXBJbWFnZUluZm9CdWY7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBJbWFnZUluZm9TaXplOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRm1wSW1hZ2VJbmZvRGVzY3JpcHRvclZlcjsNCj4gKyAg VUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZtcEltYWdlSW5m b0NvdW50Ow0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRGVzY3JpcHRvclNpemU7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQYWNrYWdlVmVyc2lvbjsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICpQYWNrYWdlVmVyc2lvbk5hbWU7DQo+ICsgIFVJTlQz MiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlVmVyc2lvbk5h bWVNYXhMZW47DQo+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBBdHRyaWJ1dGVzU3VwcG9ydGVkOw0KPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlc1NldHRpbmc7DQo+ICsNCj4gKyAgUHJpbnQo TCIjIyMjIyMjIyMjIyNcbiIpOw0KPiArICBQcmludChMIiMgRk1QIERBVEEgI1xuIik7DQo+ICsg IFByaW50KEwiIyMjIyMjIyMjIyMjXG4iKTsNCj4gKyAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVIYW5k bGVCdWZmZXIgKA0KPiArICAgICAgICAgICAgICAgICAgQnlQcm90b2NvbCwNCj4gKyAgICAgICAg ICAgICAgICAgICZnRWZpRmlybXdhcmVNYW5hZ2VtZW50UHJvdG9jb2xHdWlkLA0KPiArICAgICAg ICAgICAgICAgICAgTlVMTCwNCj4gKyAgICAgICAgICAgICAgICAgICZOdW1iZXJPZkhhbmRsZXMs DQo+ICsgICAgICAgICAgICAgICAgICAmSGFuZGxlQnVmZmVyDQo+ICsgICAgICAgICAgICAgICAg ICApOw0KPiArICBpZiAoRUZJX0VSUk9SKFN0YXR1cykpIHsNCj4gKyAgICBQcmludChMIkZNUCBw cm90b2NvbCAtICVyXG4iLCBFRklfTk9UX0ZPVU5EKTsNCj4gKyAgICByZXR1cm47DQo+ICsgIH0N Cj4gKw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBOdW1iZXJPZkhhbmRsZXM7IEluZGV4 KyspIHsNCj4gKyAgICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sKA0KPiArICAgICAgICAg ICAgICAgICAgICBIYW5kbGVCdWZmZXJbSW5kZXhdLA0KPiArICAgICAgICAgICAgICAgICAgICAm Z0VmaUZpcm13YXJlTWFuYWdlbWVudFByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAg ICAgKFZPSUQgKiopJkZtcA0KPiArICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIGlmIChF RklfRVJST1IoU3RhdHVzKSkgew0KPiArICAgICAgY29udGludWU7DQo+ICsgICAgfQ0KPiArDQo+ ICsgICAgSW1hZ2VJbmZvU2l6ZSA9IDA7DQo+ICsgICAgU3RhdHVzID0gRm1wLT5HZXRJbWFnZUlu Zm8gKA0KPiArICAgICAgICAgICAgICAgICAgICBGbXAsDQo+ICsgICAgICAgICAgICAgICAgICAg ICZJbWFnZUluZm9TaXplLA0KPiArICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPiArICAgICAg ICAgICAgICAgICAgICBOVUxMLA0KPiArICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPiArICAg ICAgICAgICAgICAgICAgICBOVUxMLA0KPiArICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPiAr ICAgICAgICAgICAgICAgICAgICBOVUxMDQo+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ICsg ICAgaWYgKFN0YXR1cyAhPSBFRklfQlVGRkVSX1RPT19TTUFMTCkgew0KPiArICAgICAgY29udGlu dWU7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgRm1wSW1hZ2VJbmZvQnVmID0gTlVMTDsNCj4gKyAg ICBGbXBJbWFnZUluZm9CdWYgPSBBbGxvY2F0ZVplcm9Qb29sIChJbWFnZUluZm9TaXplKTsNCj4g KyAgICBpZiAoRm1wSW1hZ2VJbmZvQnVmID09IE5VTEwpIHsNCj4gKyAgICAgIFN0YXR1cyA9IEVG SV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICAgICAgZ290byBFWElUOw0KPiArICAgIH0NCj4gKw0K PiArICAgIFBhY2thZ2VWZXJzaW9uTmFtZSA9IE5VTEw7DQo+ICsgICAgU3RhdHVzID0gRm1wLT5H ZXRJbWFnZUluZm8gKA0KPiArICAgICAgICAgICAgICAgICAgICBGbXAsDQo+ICsgICAgICAgICAg ICAgICAgICAgICZJbWFnZUluZm9TaXplLCAgICAgICAgICAgICAgIC8vIEltYWdlSW5mb1NpemUN Cj4gKyAgICAgICAgICAgICAgICAgICAgRm1wSW1hZ2VJbmZvQnVmLCAgICAgICAgICAgICAgLy8g SW1hZ2VJbmZvDQo+ICsgICAgICAgICAgICAgICAgICAgICZGbXBJbWFnZUluZm9EZXNjcmlwdG9y VmVyLCAgIC8vIERlc2NyaXB0b3JWZXJzaW9uDQo+ICsgICAgICAgICAgICAgICAgICAgICZGbXBJ bWFnZUluZm9Db3VudCwgICAgICAgICAgIC8vIERlc2NyaXB0b3JDb3VudA0KPiArICAgICAgICAg ICAgICAgICAgICAmRGVzY3JpcHRvclNpemUsICAgICAgICAgICAgICAvLyBEZXNjcmlwdG9yU2l6 ZQ0KPiArICAgICAgICAgICAgICAgICAgICAmUGFja2FnZVZlcnNpb24sICAgICAgICAgICAgICAv LyBQYWNrYWdlVmVyc2lvbg0KPiArICAgICAgICAgICAgICAgICAgICAmUGFja2FnZVZlcnNpb25O YW1lICAgICAgICAgICAvLyBQYWNrYWdlVmVyc2lvbk5hbWUNCj4gKyAgICAgICAgICAgICAgICAg ICAgKTsNCj4gKw0KPiArICAgIC8vDQo+ICsgICAgLy8gSWYgRk1QIEdldEluZm9ybWF0aW9uIGlu dGVyZmFjZSBmYWlsZWQsIHNraXAgdGhpcyByZXNvdXJjZQ0KPiArICAgIC8vDQo+ICsgICAgaWYg KEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgICBQcmludChMIkZNUCAoJWQpIEltYWdlSW5m byAtICVyXG4iLCBJbmRleCwgU3RhdHVzKTsNCj4gKyAgICAgIEZyZWVQb29sKEZtcEltYWdlSW5m b0J1Zik7DQo+ICsgICAgICBjb250aW51ZTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBQcmludChM IkZNUCAoJWQpIEltYWdlSW5mbzpcbiIsIEluZGV4KTsNCj4gKyAgICBEdW1wRm1wSW1hZ2VJbmZv KA0KPiArICAgICAgSW1hZ2VJbmZvU2l6ZSwgICAgICAgICAgICAgICAvLyBJbWFnZUluZm9TaXpl DQo+ICsgICAgICBGbXBJbWFnZUluZm9CdWYsICAgICAgICAgICAgIC8vIEltYWdlSW5mbw0KPiAr ICAgICAgRm1wSW1hZ2VJbmZvRGVzY3JpcHRvclZlciwgICAvLyBEZXNjcmlwdG9yVmVyc2lvbg0K PiArICAgICAgRm1wSW1hZ2VJbmZvQ291bnQsICAgICAgICAgICAvLyBEZXNjcmlwdG9yQ291bnQN Cj4gKyAgICAgIERlc2NyaXB0b3JTaXplLCAgICAgICAgICAgICAgLy8gRGVzY3JpcHRvclNpemUN Cj4gKyAgICAgIFBhY2thZ2VWZXJzaW9uLCAgICAgICAgICAgICAgLy8gUGFja2FnZVZlcnNpb24N Cj4gKyAgICAgIFBhY2thZ2VWZXJzaW9uTmFtZSAgICAgICAgICAgLy8gUGFja2FnZVZlcnNpb25O YW1lDQo+ICsgICAgICApOw0KPiArDQo+ICsgICAgaWYgKFBhY2thZ2VWZXJzaW9uTmFtZSAhPSBO VUxMKSB7DQo+ICsgICAgICBGcmVlUG9vbChQYWNrYWdlVmVyc2lvbk5hbWUpOw0KPiArICAgIH0N Cj4gKyAgICBGcmVlUG9vbChGbXBJbWFnZUluZm9CdWYpOw0KPiArDQo+ICsgICAgLy8NCj4gKyAg ICAvLyBHZXQgcGFja2FnZSBpbmZvDQo+ICsgICAgLy8NCj4gKyAgICBQYWNrYWdlVmVyc2lvbk5h bWUgPSBOVUxMOw0KPiArICAgIFN0YXR1cyA9IEZtcC0+R2V0UGFja2FnZUluZm8gKA0KPiArICAg ICAgICAgICAgICAgICAgICBGbXAsDQo+ICsgICAgICAgICAgICAgICAgICAgICZQYWNrYWdlVmVy c2lvbiwgICAgICAgICAgICAgIC8vIFBhY2thZ2VWZXJzaW9uDQo+ICsgICAgICAgICAgICAgICAg ICAgICZQYWNrYWdlVmVyc2lvbk5hbWUsICAgICAgICAgIC8vIFBhY2thZ2VWZXJzaW9uTmFtZQ0K PiArICAgICAgICAgICAgICAgICAgICAmUGFja2FnZVZlcnNpb25OYW1lTWF4TGVuLCAgICAvLyBQ YWNrYWdlVmVyc2lvbk5hbWVNYXhMZW4NCj4gKyAgICAgICAgICAgICAgICAgICAgJkF0dHJpYnV0 ZXNTdXBwb3J0ZWQsICAgICAgICAgLy8gQXR0cmlidXRlc1N1cHBvcnRlZA0KPiArICAgICAgICAg ICAgICAgICAgICAmQXR0cmlidXRlc1NldHRpbmcgICAgICAgICAgICAvLyBBdHRyaWJ1dGVzU2V0 dGluZw0KPiArICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIGlmIChFRklfRVJST1IoU3Rh dHVzKSkgew0KPiArICAgICAgUHJpbnQoTCJGTVAgKCVkKSBQYWNrYWdlSW5mbyAtICVyXG4iLCBJ bmRleCwgU3RhdHVzKTsNCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgUHJpbnQoTCJGTVAgKCVk KSBJbWFnZUluZm86XG4iLCBJbmRleCk7DQo+ICsgICAgICBEdW1wRm1wUGFja2FnZUluZm8oDQo+ ICsgICAgICAgIFBhY2thZ2VWZXJzaW9uLCAgICAgICAgICAgICAgLy8gUGFja2FnZVZlcnNpb24N Cj4gKyAgICAgICAgUGFja2FnZVZlcnNpb25OYW1lLCAgICAgICAgICAvLyBQYWNrYWdlVmVyc2lv bk5hbWUNCj4gKyAgICAgICAgUGFja2FnZVZlcnNpb25OYW1lTWF4TGVuLCAgICAvLyBQYWNrYWdl VmVyc2lvbk5hbWVNYXhMZW4NCj4gKyAgICAgICAgQXR0cmlidXRlc1N1cHBvcnRlZCwgICAgICAg ICAvLyBBdHRyaWJ1dGVzU3VwcG9ydGVkDQo+ICsgICAgICAgIEF0dHJpYnV0ZXNTZXR0aW5nICAg ICAgICAgICAgLy8gQXR0cmlidXRlc1NldHRpbmcNCj4gKyAgICAgICAgKTsNCj4gKw0KPiArICAg ICAgaWYgKFBhY2thZ2VWZXJzaW9uTmFtZSAhPSBOVUxMKSB7DQo+ICsgICAgICAgIEZyZWVQb29s KFBhY2thZ2VWZXJzaW9uTmFtZSk7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArICB9DQo+ICsg IFByaW50KEwiXG4iKTsNCj4gKw0KPiArRVhJVDoNCj4gKyAgRnJlZVBvb2woSGFuZGxlQnVmZmVy KTsNCj4gK30NCj4gLS0NCj4gMi43LjQud2luZG93cy4xDQpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXw0KZWRrMi1kZXZlbCBtYWlsaW5nIGxpc3QNCmVkazIt ZGV2ZWxAbGlzdHMuMDEub3JnPG1haWx0bzplZGsyLWRldmVsQGxpc3RzLjAxLm9yZz4NCmh0dHBz Oi8vbGlzdHMuMDEub3JnL21haWxtYW4vbGlzdGluZm8vZWRrMi1kZXZlbA0K