From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.100; helo=mga07.intel.com; envelope-from=songpeng.li@intel.com; receiver=edk2-devel@lists.01.org Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) (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 053DF211B738C for ; Mon, 14 Jan 2019 00:07:17 -0800 (PST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga105.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 14 Jan 2019 00:07:17 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,476,1539673200"; d="scan'208";a="291349127" Received: from fmsmsx105.amr.corp.intel.com ([10.18.124.203]) by orsmga005.jf.intel.com with ESMTP; 14 Jan 2019 00:07:16 -0800 Received: from fmsmsx117.amr.corp.intel.com (10.18.116.17) by FMSMSX105.amr.corp.intel.com (10.18.124.203) with Microsoft SMTP Server (TLS) id 14.3.408.0; Mon, 14 Jan 2019 00:07:16 -0800 Received: from shsmsx103.ccr.corp.intel.com (10.239.4.69) by fmsmsx117.amr.corp.intel.com (10.18.116.17) with Microsoft SMTP Server (TLS) id 14.3.408.0; Mon, 14 Jan 2019 00:07:16 -0800 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.63]) by SHSMSX103.ccr.corp.intel.com ([169.254.4.150]) with mapi id 14.03.0415.000; Mon, 14 Jan 2019 16:07:15 +0800 From: "Li, Songpeng" To: Laszlo Ersek , "edk2-devel@lists.01.org" CC: "Carsey, Jaben" , "Ni, Ray" , "Wu, Jiaxin" Thread-Topic: [edk2] [PATCH v2] ShellPkg/TftpDynamicCommand: Change file writing method in tftp Thread-Index: AQHUqZffDvyx0VWFeU+/E+q0z1qPr6WuZYEA Date: Mon, 14 Jan 2019 08:07:14 +0000 Message-ID: References: <20190110025415.41056-1-songpeng.li@intel.com> <168d2e88-e1e4-730d-ac39-474670c10bc6@redhat.com> In-Reply-To: <168d2e88-e1e4-730d-ac39-474670c10bc6@redhat.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH v2] ShellPkg/TftpDynamicCommand: Change file writing method in tftp X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 14 Jan 2019 08:07:18 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgTGFzemxvLA0KDQpUaGFuayB5b3UgZm9yIHRoZSBjb21tZW50cy4NCg0KRm9yIHlvdXIgcXVl c3Rpb25zIGJlbG93Og0KDQo+IEJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBzaGVsbCB3b3VsZCB3cml0 ZSB0aGUgZW50aXJlIGZpbGUgaW4gIm9uZSBnbyIuDQo+IA0KPiBJbiB0aGlzIHBhcnRpY3VsYXIg Y2FzZSwgSSdtIG5vdCBpbnRlcmVzdGVkIGluIHRoZSBtZW1vcnkgYWxsb2NhdGlvbg0KPiBzaXpl LCBidXQgdGhlIHRyYW5zZmVyIGJsb2NrIHNpemUgdGhhdCB0aGUgc2hlbGwgd291bGQgdWx0aW1h dGVseSB1c2UNCj4gd2l0aCBFRklfRklMRV9XUklURS4gSSBmaW5kIGl0IGludGVyZXN0aW5nIGJl Y2F1c2Ugc29tZSBsb3dlci1sZXZlbA0KPiBzdG9yYWdlIGRyaXZlcnMgbWF5IGhhdmUgbGltaXRh dGlvbnMgdGhlbXNlbHZlcyAoZm9yIGV4YW1wbGUsIGEgc2luZ2xlDQo+IFNDU0kgdHJhbnNmZXIg bWlnaHQgbm90IGJlIGxhcmdlciB0aGFuIDFHQikuIFdoYXQgbGF5ZXIgd291bGQgaGFuZGxlDQo+ IChzcGxpdCkgYSBkb3dubG9hZGVkIGZpbGUgbGFyZ2VyIHRoYW4gdGhhdCBpbnRvIHNtYWxsZXIg Y2h1bmtzPyBNYXliZQ0KPiB0aGUgRlMgKEZBVCkgZHJpdmVyPw0KDQpBbHRob3VnaCB1bmRlcmx5 aW5nIGRyaXZlciBjYW4gaGFuZGxlIHNwbGl0IHdyaXRpbmcsICB3ZSBzdGlsbCBuZWVkIHNwbGl0 IHdyaXRpbmcgaW4gYXBwbGljYXRpb24gbGF5ZXIgYmVjYXVzZToNCjEuIFRvIGltcHJvdmUgdXNl ciBleHBlcmllbmNlcyAtLSBpZiB3cml0ZSB0aGUgZW50aXJlIGZpbGUgaW4gIm9uZSBnbyIgd2F5 LCB0aGUgc2hlbGwgbG9va3MgbGlrZSBoYW5nZWQgYWZ0ZXIgZG93bmxvYWQgZmluaXNoZWQuIA0K ICAgICBBZnRlciB0aGlzIHBhdGNoLCBzaGVsbCBwcm9tcHQgd2lsbCBzaG93IHVwIGltbWVkaWF0 ZWx5IGFmdGVyIHRoZSBkb3dubG9hZGluZyBwcm9ncmVzcyBiYXIgZmluaXNoZWQuDQoyLiBCZWZv cmUgdGhpcyBwYXRjaCwgaWYgdGhlIGZpbGUgc2l6ZSBpcyBsYXJnZXIgdGhhbiBwaHlzaWNhbCBt ZW1vcnkgc2l6ZSwgd2UgY2Fubm90IGRvd25sb2FkIHRoZSBmaWxlLiANCg0KPiBBbmQsIGFmdGVy IHRoZSBwYXRjaCwgd2UncmUgbm93IHdyaXRpbmcgVEZUUCBwYWNrZXQtc2l6ZWQgY2h1bmtzIHRv IHRoZQ0KPiBmaWxlLiBJcyB0aGlzIG5vdCBhIHBlcmZvcm1hbmNlIHByb2JsZW0gZm9yIHRyYWRp dGlvbmFsIHNwaW5kbGUgZGlza3MNCj4gKCJzcGlubmluZyBydXN0Iik/IElmIG5laXRoZXIgdGhl IHJlc3Qgb2YgdGhlIGRyaXZlciBzdGFjaywgbm9yIHRoZSBkaXNrDQo+IGNvbnRyb2xsZXIgaXRz ZWxmLCBzdXBwb3J0IHNvbWUgZm9ybSBvZiB3cml0ZSBjYWNoaW5nLCB0aGVuIHdyaXRpbmcgb3V0 DQo+IGV2ZXJ5IFRGVFAgcGFja2V0IGluIGlzb2xhdGlvbiAoZXNwZWNpYWxseSBmb3IgYSBtdWx0 aS1HQiBmaWxlKSBjb3VsZCBiZQ0KPiBkZXRyaW1lbnRhbCB0byBwZXJmb3JtYW5jZSAoYW5kIG1h eWJlIHRvIHRoZSBoZWFsdGggb2YgdGhlIHNwaW5kbGUgZGlzaykuDQo+IA0KPiBDdXJyZW50bHkg SSdtIG5vdCBhZmZlY3RlZCBieSB0aGlzIHVzZSBjYXNlIGVpdGhlciB3YXksIHNvIGZlZWwgZnJl ZSB0bw0KPiBpZ25vcmUsIGJ1dCBpdCBtaWdodCBtYWtlIHNlbnNlIHRvIGltcGxlbWVudCBzb21l IGxhcmdlciBjaHVua2luZyBoZXJlLA0KPiBsaWtlIDY0S0Igb3IgMTI4S0IgLS0gbGF0ZXIsIGFz IGEgc2VwYXJhdGUgRmVhdHVyZSBCWi4NCg0KV2UgYWdyZWUgd2l0aCB0aGlzIGNvbW1lbnQuIEl0 IGlzIGEgcGVyZm9ybWFuY2UgcHJvYmxlbSBhbmQgd2lsbCBiZSBmaXhlZC4gDQoNCkJlc3QsDQpT b25ncGVuZw0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IExhc3psbyBF cnNlayBbbWFpbHRvOmxlcnNla0ByZWRoYXQuY29tXQ0KPiBTZW50OiBGcmlkYXksIEphbnVhcnkg MTEsIDIwMTkgNjoyNSBQTQ0KPiBUbzogTGksIFNvbmdwZW5nIDxzb25ncGVuZy5saUBpbnRlbC5j b20+OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZw0KPiBDYzogQ2Fyc2V5LCBKYWJlbiA8amFiZW4u Y2Fyc2V5QGludGVsLmNvbT47IE5pLCBSYXkgPHJheS5uaUBpbnRlbC5jb20+Ow0KPiBXdSwgSmlh eGluIDxqaWF4aW4ud3VAaW50ZWwuY29tPg0KPiBTdWJqZWN0OiBSZTogW2VkazJdIFtQQVRDSCB2 Ml0gU2hlbGxQa2cvVGZ0cER5bmFtaWNDb21tYW5kOiBDaGFuZ2UgZmlsZQ0KPiB3cml0aW5nIG1l dGhvZCBpbiB0ZnRwDQo+IA0KPiBPbiAwMS8xMC8xOSAwMzo1NCwgU29uZ3BlbmcgTGkgd3JvdGU6 DQo+ID4gUkVGOiBodHRwczovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcvc2hvd19idWcuY2dpP2lk PTE0MzMNCj4gPg0KPiA+IHYyOiBSZW1vdmUgYW4gdW51c2VkIHZhcmlhYmxlLg0KPiA+DQo+ID4g Q3VycmVudCBsb2dpYyBvZiBzaGVsbCB0ZnRwIGRvd25sb2FkIHdhcyB3cml0aW5nIGZpbGUgYWZ0 ZXIgdGZ0cA0KPiA+IGRvd25sb2FkIGZpbmlzaGVkLCB3aGVuIHRoZSBmaWxlIGlzIGxhcmdlLCBp dCBsb29rcyBsaWtlIHRoZSBzaGVsbA0KPiA+IHRmdHAgY29tbWFuZCBoYW5nZWQgYWZ0ZXIgZG93 bmxvYWQgd2FzIGZpbmlzaGVkLiBUbyBpbXByb3ZlDQo+ID4gZW5kLXVzZXIgZXhwZXJpZW5jZSwg dGhlIHNvbHV0aW9uIGlzIHVzaW5nIHNwbGl0IGZpbGUgd3JpdGluZw0KPiA+IGluc3RlYWQuDQo+ ID4NCj4gPiBUaGlzIHBhdGNoIHVwZGF0ZSB0aGUgY29kZSB0byBvcGVuIGFuZCBjbG9zZSBmaWxl IGluc2lkZQ0KPiA+IERvd25sb2FkRmlsZSgpLCBhbmQgc2F2ZSBlYWNoIHBhY2tldCB0byBmaWxl IHdpdGhpbiBjYWxsYmFjaw0KPiA+IGZ1bmN0aW9uIENoZWNrUGFja2V0KCkuDQo+IA0KPiBJIGhh dmUgc29tZSBxdWVzdGlvbnMsIGp1c3Qgb3V0IG9mIGN1cmlvc2l0eToNCj4gDQo+ID4NCj4gPiBT aW5jZSBBbGxvY2F0ZVBhZ2UoKSBpcyBuby1sb25nZXIgbmVlZGVkLCBUaGlzIHBhdGNoIGNhbiBh bHNvDQo+ID4gcmVtb3ZlIHRoZSBtZW1vcnkgbGltaXRhdGlvbi4gVGhlIGRvd25sb2FkIGZpbGUg Y2FuIGJlIGxhcmdlcg0KPiA+IHRoYW4gc3lzdGVtIGZyZWUgbWVtb3J5IG5vdy4NCj4gPg0KPiA+ IENjOiBKYWJlbiBDYXJzZXkgPGphYmVuLmNhcnNleUBpbnRlbC5jb20+DQo+ID4gQ2M6IFJ1aXl1 IE5pIDxydWl5dS5uaUBpbnRlbC5jb20+DQo+ID4gQ2M6IFd1IEppYXhpbiA8amlheGluLnd1QGlu dGVsLmNvbT4NCj4gPiBDb250cmlidXRlZC11bmRlcjogVGlhbm9Db3JlIENvbnRyaWJ1dGlvbiBB Z3JlZW1lbnQgMS4xDQo+ID4gU2lnbmVkLW9mZi1ieTogU29uZ3BlbmcgTGkgPHNvbmdwZW5nLmxp QGludGVsLmNvbT4NCj4gPiAtLS0NCj4gPiAgU2hlbGxQa2cvRHluYW1pY0NvbW1hbmQvVGZ0cER5 bmFtaWNDb21tYW5kL1RmdHAuYyB8IDE1NA0KPiArKysrKysrKy0tLS0tLS0tLS0tLQ0KPiA+ICAx IGZpbGUgY2hhbmdlZCwgNjQgaW5zZXJ0aW9ucygrKSwgOTAgZGVsZXRpb25zKC0pDQo+ID4NCj4g PiBkaWZmIC0tZ2l0IGEvU2hlbGxQa2cvRHluYW1pY0NvbW1hbmQvVGZ0cER5bmFtaWNDb21tYW5k L1RmdHAuYw0KPiBiL1NoZWxsUGtnL0R5bmFtaWNDb21tYW5kL1RmdHBEeW5hbWljQ29tbWFuZC9U ZnRwLmMNCj4gPiBpbmRleCBlZDA4MWI1YmFkN2MuLmJhNzUzYTI3OWIwMCAxMDA2NDQNCj4gPiAt LS0gYS9TaGVsbFBrZy9EeW5hbWljQ29tbWFuZC9UZnRwRHluYW1pY0NvbW1hbmQvVGZ0cC5jDQo+ ID4gKysrIGIvU2hlbGxQa2cvRHluYW1pY0NvbW1hbmQvVGZ0cER5bmFtaWNDb21tYW5kL1RmdHAu Yw0KPiA+IEBAIC00MSw2ICs0MSwxMiBAQCBTVEFUSUMgQ09OU1QgQ0hBUjE2IG1UZnRwUHJvZ3Jl c3NGcmFtZVtdID0gTCJbDQo+ID4gIC8vIChURlRQX1BST0dSRVNTX01FU1NBR0VfU0laRS0xKSAn XGInDQo+ID4gIFNUQVRJQyBDT05TVCBDSEFSMTYgbVRmdHBQcm9ncmVzc0RlbGV0ZVtdID0NCj4g TCJcYlxiXGJcYlxiXGJcYlxiXGJcYlxiXGJcYlxiXGJcYlxiXGJcYlxiXGJcYlxiXGJcYlxiXGJc YlxiXGJcYlxiXA0KPiBiXGJcYlxiXGJcYlxiXGJcYlxiXGJcYlxiXGJcYlxiXGJcYlxiXGJcYiI7 DQo+ID4NCj4gPiArLy8gTG9jYWwgRmlsZSBIYW5kbGUNCj4gPiArU0hFTExfRklMRV9IQU5ETEUg ICAgIG1GaWxlSGFuZGxlOw0KPiA+ICsNCj4gPiArLy8gUGF0aCBvZiB0aGUgbG9jYWwgZmlsZSwg VW5pY29kZSBlbmNvZGVkDQo+ID4gK0NPTlNUIENIQVIxNiAgICAgICAgICptTG9jYWxGaWxlUGF0 aDsNCj4gPiArDQo+ID4gIC8qKg0KPiA+ICAgIENoZWNrIGFuZCBjb252ZXJ0IHRoZSBVSU5UMTYg b3B0aW9uIHZhbHVlcyBvZiB0aGUgJ3RmdHAnIGNvbW1hbmQNCj4gPg0KPiA+IEBAIC0xNjYsOSAr MTcyLDYgQEAgR2V0RmlsZVNpemUgKA0KPiA+ICAgIEBwYXJhbVtpbl0gICBGaWxlU2l6ZSAgICAg ICBTaXplIG9mIHRoZSBmaWxlIGluIG51bWJlciBvZiBieXRlcw0KPiA+ICAgIEBwYXJhbVtpbl0g ICBCbG9ja1NpemUgICAgICBWYWx1ZSBvZiB0aGUgVEZUUCBibGtzaXplIG9wdGlvbg0KPiA+ICAg IEBwYXJhbVtpbl0gICBXaW5kb3dTaXplICAgICBWYWx1ZSBvZiB0aGUgVEZUUCB3aW5kb3cgc2l6 ZSBvcHRpb24NCj4gPiAtICBAcGFyYW1bb3V0XSAgRGF0YSAgICAgICAgICAgQWRkcmVzcyB3aGVy ZSB0byBzdG9yZSB0aGUgYWRkcmVzcyBvZiB0aGUNCj4gYnVmZmVyDQo+ID4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHdoZXJlIHRoZSBkYXRhIG9mIHRoZSBmaWxlIHdlcmUgZG93bmxv YWRlZCBpbg0KPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIG9mIHN1Y2Nl c3MuDQo+ID4NCj4gPiAgICBAcmV0dmFsICBFRklfU1VDQ0VTUyAgICAgICAgICAgVGhlIGZpbGUg d2FzIGRvd25sb2FkZWQuDQo+ID4gICAgQHJldHZhbCAgRUZJX09VVF9PRl9SRVNPVVJDRVMgIEEg bWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLg0KPiA+IEBAIC0xODQsOCArMTg3LDcgQEAgRG93bmxv YWRGaWxlICgNCj4gPiAgICBJTiAgIENPTlNUIENIQVI4ICAgICAgICAgICpBc2NpaUZpbGVQYXRo LA0KPiA+ICAgIElOICAgVUlOVE4gICAgICAgICAgICAgICAgRmlsZVNpemUsDQo+ID4gICAgSU4g ICBVSU5UMTYgICAgICAgICAgICAgICBCbG9ja1NpemUsDQo+ID4gLSAgSU4gICBVSU5UMTYgICAg ICAgICAgICAgICBXaW5kb3dTaXplLA0KPiA+IC0gIE9VVCAgVk9JRCAgICAgICAgICAgICAgICAg KipEYXRhDQo+ID4gKyAgSU4gICBVSU5UMTYgICAgICAgICAgICAgICBXaW5kb3dTaXplDQo+ID4g ICAgKTsNCj4gPg0KPiA+ICAvKioNCj4gPiBAQCAtMjg3LDcgKzI4OSw2IEBAIFJ1blRmdHAgKA0K PiA+ICAgIENIQVI4ICAgICAgICAgICAgICAgICAgICpBc2NpaVJlbW90ZUZpbGVQYXRoOw0KPiA+ ICAgIFVJTlROICAgICAgICAgICAgICAgICAgIEZpbGVQYXRoU2l6ZTsNCj4gPiAgICBDT05TVCBD SEFSMTYgICAgICAgICAgICAqV2Fsa2VyOw0KPiA+IC0gIENPTlNUIENIQVIxNiAgICAgICAgICAg ICpMb2NhbEZpbGVQYXRoOw0KPiA+ICAgIEVGSV9NVEZUUDRfQ09ORklHX0RBVEEgIE10ZnRwNENv bmZpZ0RhdGE7DQo+ID4gICAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgKkhhbmRsZXM7DQo+ID4g ICAgVUlOVE4gICAgICAgICAgICAgICAgICAgSGFuZGxlQ291bnQ7DQo+ID4gQEAgLTI5Nyw5ICsy OTgsNiBAQCBSdW5UZnRwICgNCj4gPiAgICBFRklfSEFORExFICAgICAgICAgICAgICBNdGZ0cDRD aGlsZEhhbmRsZTsNCj4gPiAgICBFRklfTVRGVFA0X1BST1RPQ09MICAgICAqTXRmdHA0Ow0KPiA+ ICAgIFVJTlROICAgICAgICAgICAgICAgICAgIEZpbGVTaXplOw0KPiA+IC0gIFVJTlROICAgICAg ICAgICAgICAgICAgIERhdGFTaXplOw0KPiA+IC0gIFZPSUQgICAgICAgICAgICAgICAgICAgICpE YXRhOw0KPiA+IC0gIFNIRUxMX0ZJTEVfSEFORExFICAgICAgIEZpbGVIYW5kbGU7DQo+ID4gICAg VUlOVDE2ICAgICAgICAgICAgICAgICAgQmxvY2tTaXplOw0KPiA+ICAgIFVJTlQxNiAgICAgICAg ICAgICAgICAgIFdpbmRvd1NpemU7DQo+ID4NCj4gPiBAQCAtMzA5LDcgKzMwNyw2IEBAIFJ1blRm dHAgKA0KPiA+ICAgIEFzY2lpUmVtb3RlRmlsZVBhdGggPSBOVUxMOw0KPiA+ICAgIEhhbmRsZXMg ICAgICAgICAgICAgPSBOVUxMOw0KPiA+ICAgIEZpbGVTaXplICAgICAgICAgICAgPSAwOw0KPiA+ IC0gIERhdGFTaXplICAgICAgICAgICAgPSAwOw0KPiA+ICAgIEJsb2NrU2l6ZSAgICAgICAgICAg PSBNVEZUUF9ERUZBVUxUX0JMS1NJWkU7DQo+ID4gICAgV2luZG93U2l6ZSAgICAgICAgICA9IE1U RlRQX0RFRkFVTFRfV0lORE9XU0laRTsNCj4gPg0KPiA+IEBAIC0zODUsNyArMzgyLDcgQEAgUnVu VGZ0cCAoDQo+ID4gICAgVW5pY29kZVN0clRvQXNjaWlTdHJTIChSZW1vdGVGaWxlUGF0aCwgQXNj aWlSZW1vdGVGaWxlUGF0aCwNCj4gRmlsZVBhdGhTaXplKTsNCj4gPg0KPiA+ICAgIGlmIChQYXJh bUNvdW50ID09IDQpIHsNCj4gPiAtICAgIExvY2FsRmlsZVBhdGggPSBTaGVsbENvbW1hbmRMaW5l R2V0UmF3VmFsdWUgKENoZWNrUGFja2FnZSwgMyk7DQo+ID4gKyAgICBtTG9jYWxGaWxlUGF0aCA9 IFNoZWxsQ29tbWFuZExpbmVHZXRSYXdWYWx1ZSAoQ2hlY2tQYWNrYWdlLCAzKTsNCj4gPiAgICB9 IGVsc2Ugew0KPiA+ICAgICAgV2Fsa2VyID0gUmVtb3RlRmlsZVBhdGggKyBTdHJMZW4gKFJlbW90 ZUZpbGVQYXRoKTsNCj4gPiAgICAgIHdoaWxlICgoLS1XYWxrZXIpID49IFJlbW90ZUZpbGVQYXRo KSB7DQo+ID4gQEAgLTM5NCw3ICszOTEsNyBAQCBSdW5UZnRwICgNCj4gPiAgICAgICAgICBicmVh azsNCj4gPiAgICAgICAgfQ0KPiA+ICAgICAgfQ0KPiA+IC0gICAgTG9jYWxGaWxlUGF0aCA9IFdh bGtlciArIDE7DQo+ID4gKyAgICBtTG9jYWxGaWxlUGF0aCA9IFdhbGtlciArIDE7DQo+ID4gICAg fQ0KPiA+DQo+ID4gICAgLy8NCj4gPiBAQCAtNDkyLDcgKzQ4OSw2IEBAIFJ1blRmdHAgKA0KPiA+ ICAgICAgICAgKE5pY051bWJlciA8IEhhbmRsZUNvdW50KSAmJiAoU2hlbGxTdGF0dXMgIT0gU0hF TExfU1VDQ0VTUyk7DQo+ID4gICAgICAgICBOaWNOdW1iZXIrKykgew0KPiA+ICAgICAgQ29udHJv bGxlckhhbmRsZSA9IEhhbmRsZXNbTmljTnVtYmVyXTsNCj4gPiAtICAgIERhdGEgPSBOVUxMOw0K PiA+DQo+ID4gICAgICBTdGF0dXMgPSBHZXROaWNOYW1lIChDb250cm9sbGVySGFuZGxlLCBOaWNO dW1iZXIsIE5pY05hbWUpOw0KPiA+ICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ IEBAIC01NDMsNyArNTM5LDcgQEAgUnVuVGZ0cCAoDQo+ID4gICAgICAgIGdvdG8gTmV4dEhhbmRs ZTsNCj4gPiAgICAgIH0NCj4gPg0KPiA+IC0gICAgU3RhdHVzID0gRG93bmxvYWRGaWxlIChNdGZ0 cDQsIFJlbW90ZUZpbGVQYXRoLCBBc2NpaVJlbW90ZUZpbGVQYXRoLA0KPiBGaWxlU2l6ZSwgQmxv Y2tTaXplLCBXaW5kb3dTaXplLCAmRGF0YSk7DQo+ID4gKyAgICBTdGF0dXMgPSBEb3dubG9hZEZp bGUgKE10ZnRwNCwgUmVtb3RlRmlsZVBhdGgsIEFzY2lpUmVtb3RlRmlsZVBhdGgsDQo+IEZpbGVT aXplLCBCbG9ja1NpemUsIFdpbmRvd1NpemUpOw0KPiA+ICAgICAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiA+ICAgICAgICBTaGVsbFByaW50SGlpRXggKA0KPiA+ICAgICAgICAgIC0xLCAt MSwgTlVMTCwgU1RSSU5HX1RPS0VOIChTVFJfVEZUUF9FUlJfRE9XTkxPQUQpLA0KPiA+IEBAIC01 NTIsNDUgKzU0OCw4IEBAIFJ1blRmdHAgKA0KPiA+ICAgICAgICBnb3RvIE5leHRIYW5kbGU7DQo+ ID4gICAgICB9DQo+ID4NCj4gPiAtICAgIERhdGFTaXplID0gRmlsZVNpemU7DQo+ID4gLQ0KPiA+ IC0gICAgaWYgKCFFRklfRVJST1IgKFNoZWxsRmlsZUV4aXN0cyAoTG9jYWxGaWxlUGF0aCkpKSB7 DQo+ID4gLSAgICAgIFNoZWxsRGVsZXRlRmlsZUJ5TmFtZSAoTG9jYWxGaWxlUGF0aCk7DQo+ID4g LSAgICB9DQo+ID4gLQ0KPiA+IC0gICAgU3RhdHVzID0gU2hlbGxPcGVuRmlsZUJ5TmFtZSAoDQo+ ID4gLSAgICAgICAgICAgICAgIExvY2FsRmlsZVBhdGgsDQo+ID4gLSAgICAgICAgICAgICAgICZG aWxlSGFuZGxlLA0KPiA+IC0gICAgICAgICAgICAgICBFRklfRklMRV9NT0RFX0NSRUFURSB8DQo+ ID4gLSAgICAgICAgICAgICAgIEVGSV9GSUxFX01PREVfV1JJVEUgIHwNCj4gPiAtICAgICAgICAg ICAgICAgRUZJX0ZJTEVfTU9ERV9SRUFELA0KPiA+IC0gICAgICAgICAgICAgICAwDQo+ID4gLSAg ICAgICAgICAgICAgICk7DQo+ID4gLSAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4g LSAgICAgIFNoZWxsUHJpbnRIaWlFeCAoDQo+ID4gLSAgICAgICAgLTEsIC0xLCBOVUxMLCBTVFJJ TkdfVE9LRU4gKFNUUl9HRU5fRklMRV9PUEVOX0ZBSUwpLA0KPiA+IC0gICAgICAgIG1UZnRwSGlp SGFuZGxlLCBMInRmdHAiLCBMb2NhbEZpbGVQYXRoDQo+ID4gLSAgICAgICk7DQo+ID4gLSAgICAg IGdvdG8gTmV4dEhhbmRsZTsNCj4gPiAtICAgIH0NCj4gPiAtDQo+ID4gLSAgICBTdGF0dXMgPSBT aGVsbFdyaXRlRmlsZSAoRmlsZUhhbmRsZSwgJkZpbGVTaXplLCBEYXRhKTsNCj4gDQo+IEJlZm9y ZSB0aGUgcGF0Y2gsIHRoZSBzaGVsbCB3b3VsZCB3cml0ZSB0aGUgZW50aXJlIGZpbGUgaW4gIm9u ZSBnbyIuDQo+IA0KPiBJbiB0aGlzIHBhcnRpY3VsYXIgY2FzZSwgSSdtIG5vdCBpbnRlcmVzdGVk IGluIHRoZSBtZW1vcnkgYWxsb2NhdGlvbg0KPiBzaXplLCBidXQgdGhlIHRyYW5zZmVyIGJsb2Nr IHNpemUgdGhhdCB0aGUgc2hlbGwgd291bGQgdWx0aW1hdGVseSB1c2UNCj4gd2l0aCBFRklfRklM RV9XUklURS4gSSBmaW5kIGl0IGludGVyZXN0aW5nIGJlY2F1c2Ugc29tZSBsb3dlci1sZXZlbA0K PiBzdG9yYWdlIGRyaXZlcnMgbWF5IGhhdmUgbGltaXRhdGlvbnMgdGhlbXNlbHZlcyAoZm9yIGV4 YW1wbGUsIGEgc2luZ2xlDQo+IFNDU0kgdHJhbnNmZXIgbWlnaHQgbm90IGJlIGxhcmdlciB0aGFu IDFHQikuIFdoYXQgbGF5ZXIgd291bGQgaGFuZGxlDQo+IChzcGxpdCkgYSBkb3dubG9hZGVkIGZp bGUgbGFyZ2VyIHRoYW4gdGhhdCBpbnRvIHNtYWxsZXIgY2h1bmtzPyBNYXliZQ0KPiB0aGUgRlMg KEZBVCkgZHJpdmVyPw0KPiANCj4gDQo+ID4gLSAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPiA+IC0gICAgICBTaGVsbFN0YXR1cyA9IFNIRUxMX1NVQ0NFU1M7DQo+ID4gLSAgICB9IGVs c2Ugew0KPiA+IC0gICAgICBTaGVsbFByaW50SGlpRXggKA0KPiA+IC0gICAgICAgIC0xLCAtMSwg TlVMTCwgU1RSSU5HX1RPS0VOIChTVFJfVEZUUF9FUlJfV1JJVEUpLA0KPiA+IC0gICAgICAgIG1U ZnRwSGlpSGFuZGxlLCBMb2NhbEZpbGVQYXRoLCBTdGF0dXMNCj4gPiAtICAgICAgKTsNCj4gPiAt ICAgIH0NCj4gPiAtICAgIFNoZWxsQ2xvc2VGaWxlICgmRmlsZUhhbmRsZSk7DQo+ID4gLQ0KPiA+ ICAgICAgTmV4dEhhbmRsZToNCj4gPg0KPiA+IC0gICAgaWYgKERhdGEgIT0gTlVMTCkgew0KPiA+ IC0gICAgICBnQlMtPkZyZWVQYWdlcyAoKEVGSV9QSFlTSUNBTF9BRERSRVNTKShVSU5UTilEYXRh LA0KPiBFRklfU0laRV9UT19QQUdFUyAoRGF0YVNpemUpKTsNCj4gPiAtICAgIH0NCj4gPiAtDQo+ ID4gICAgICBDbG9zZVByb3RvY29sQW5kRGVzdHJveVNlcnZpY2VDaGlsZCAoDQo+ID4gICAgICAg IENvbnRyb2xsZXJIYW5kbGUsDQo+ID4gICAgICAgICZnRWZpTXRmdHA0U2VydmljZUJpbmRpbmdQ cm90b2NvbEd1aWQsDQo+ID4gQEAgLTkxMiw5ICs4NzEsNiBAQCBFcnJvciA6DQo+ID4gICAgQHBh cmFtW2luXSAgIEZpbGVTaXplICAgICAgIFNpemUgb2YgdGhlIGZpbGUgaW4gbnVtYmVyIG9mIGJ5 dGVzDQo+ID4gICAgQHBhcmFtW2luXSAgIEJsb2NrU2l6ZSAgICAgIFZhbHVlIG9mIHRoZSBURlRQ IGJsa3NpemUgb3B0aW9uDQo+ID4gICAgQHBhcmFtW2luXSAgIFdpbmRvd1NpemUgICAgIFZhbHVl IG9mIHRoZSBURlRQIHdpbmRvdyBzaXplIG9wdGlvbg0KPiA+IC0gIEBwYXJhbVtvdXRdICBEYXRh ICAgICAgICAgICBBZGRyZXNzIHdoZXJlIHRvIHN0b3JlIHRoZSBhZGRyZXNzIG9mIHRoZQ0KPiBi dWZmZXINCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgdGhlIGRhdGEg b2YgdGhlIGZpbGUgd2VyZSBkb3dubG9hZGVkIGluDQo+ID4gLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNhc2Ugb2Ygc3VjY2Vzcy4NCj4gPg0KPiA+ICAgIEByZXR2YWwgIEVGSV9TVUND RVNTICAgICAgICAgICBUaGUgZmlsZSB3YXMgZG93bmxvYWRlZC4NCj4gPiAgICBAcmV0dmFsICBF RklfT1VUX09GX1JFU09VUkNFUyAgQSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuDQo+ID4gQEAg LTkzMCwxMyArODg2LDEwIEBAIERvd25sb2FkRmlsZSAoDQo+ID4gICAgSU4gICBDT05TVCBDSEFS OCAgICAgICAgICAqQXNjaWlGaWxlUGF0aCwNCj4gPiAgICBJTiAgIFVJTlROICAgICAgICAgICAg ICAgIEZpbGVTaXplLA0KPiA+ICAgIElOICAgVUlOVDE2ICAgICAgICAgICAgICAgQmxvY2tTaXpl LA0KPiA+IC0gIElOICAgVUlOVDE2ICAgICAgICAgICAgICAgV2luZG93U2l6ZSwNCj4gPiAtICBP VVQgIFZPSUQgICAgICAgICAgICAgICAgICoqRGF0YQ0KPiA+ICsgIElOICAgVUlOVDE2ICAgICAg ICAgICAgICAgV2luZG93U2l6ZQ0KPiA+ICAgICkNCj4gPiAgew0KPiA+ICAgIEVGSV9TVEFUVVMg ICAgICAgICAgICBTdGF0dXM7DQo+ID4gLSAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgIFBhZ2VzQWRk cmVzczsNCj4gPiAtICBWT0lEICAgICAgICAgICAgICAgICAgKkJ1ZmZlcjsNCj4gPiAgICBET1dO TE9BRF9DT05URVhUICAgICAgKlRmdHBDb250ZXh0Ow0KPiA+ICAgIEVGSV9NVEZUUDRfVE9LRU4g ICAgICBNdGZ0cDRUb2tlbjsNCj4gPiAgICBVSU5UOCAgICAgICAgICAgICAgICAgQmxrc2l6ZUJ1 ZlsxMF07DQo+ID4gQEAgLTk0NCwyMiArODk3LDYgQEAgRG93bmxvYWRGaWxlICgNCj4gPg0KPiA+ ICAgIFplcm9NZW0gKCZNdGZ0cDRUb2tlbiwgc2l6ZW9mIChFRklfTVRGVFA0X1RPS0VOKSk7DQo+ ID4NCj4gPiAtICAvLyBEb3dubG9hZGVkIGZpbGUgY2FuIGJlIGxhcmdlLiBCUy5BbGxvY2F0ZVBh Z2VzKCkgaXMgbW9yZSBmYXN0ZXINCj4gPiAtICAvLyB0aGFuIEFsbG9jYXRlUG9vbCgpIGFuZCBh dm9pZCBmcmFnbWVudGF0aW9uLg0KPiA+IC0gIC8vIFRoZSBkb3dubG9hZGVkIGZpbGUgY291bGQg YmUgYW4gRUZJIGFwcGxpY2F0aW9uLiBNYXJraW5nIHRoZQ0KPiA+IC0gIC8vIGFsbG9jYXRlZCBw YWdlIGFzIEVmaUJvb3RTZXJ2aWNlc0NvZGUgd291bGQgYWxsb3cgdG8gZXhlY3V0ZSBhDQo+ID4g LSAgLy8gcG90ZW50aWFsIGRvd25sb2FkZWQgRUZJIGFwcGxpY2F0aW9uLg0KPiA+IC0gIFN0YXR1 cyA9IGdCUy0+QWxsb2NhdGVQYWdlcyAoDQo+ID4gLSAgICAgICAgICAgICAgICAgICBBbGxvY2F0 ZUFueVBhZ2VzLA0KPiA+IC0gICAgICAgICAgICAgICAgICAgRWZpQm9vdFNlcnZpY2VzQ29kZSwN Cj4gPiAtICAgICAgICAgICAgICAgICAgIEVGSV9TSVpFX1RPX1BBR0VTIChGaWxlU2l6ZSksDQo+ ID4gLSAgICAgICAgICAgICAgICAgICAmUGFnZXNBZGRyZXNzDQo+ID4gLSAgICAgICAgICAgICAg ICAgICApOw0KPiA+IC0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiAtICAgIHJldHVy biBTdGF0dXM7DQo+ID4gLSAgfQ0KPiA+IC0NCj4gPiAtICBCdWZmZXIgPSAoVk9JRCopKFVJTlRO KVBhZ2VzQWRkcmVzczsNCj4gPiAgICBUZnRwQ29udGV4dCA9IEFsbG9jYXRlUG9vbCAoc2l6ZW9m IChET1dOTE9BRF9DT05URVhUKSk7DQo+ID4gICAgaWYgKFRmdHBDb250ZXh0ID09IE5VTEwpIHsN Cj4gPiAgICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+IEBAIC05NzAsOCAr OTA3LDYgQEAgRG93bmxvYWRGaWxlICgNCj4gPiAgICBUZnRwQ29udGV4dC0+TGFzdFJlcG9ydGVk TmJPZkJ5dGVzID0gMDsNCj4gPg0KPiA+ICAgIE10ZnRwNFRva2VuLkZpbGVuYW1lICAgID0gKFVJ TlQ4KilBc2NpaUZpbGVQYXRoOw0KPiA+IC0gIE10ZnRwNFRva2VuLkJ1ZmZlclNpemUgID0gRmls ZVNpemU7DQo+ID4gLSAgTXRmdHA0VG9rZW4uQnVmZmVyICAgICAgPSBCdWZmZXI7DQo+ID4gICAg TXRmdHA0VG9rZW4uQ2hlY2tQYWNrZXQgPSBDaGVja1BhY2tldDsNCj4gPiAgICBNdGZ0cDRUb2tl bi5Db250ZXh0ICAgICA9IChWT0lEKilUZnRwQ29udGV4dDsNCj4gPiAgICBNdGZ0cDRUb2tlbi5P cHRpb25Db3VudCA9IDA7DQo+ID4gQEAgLTEwMDAsMTQgKzkzNSw0MSBAQCBEb3dubG9hZEZpbGUg KA0KPiA+ICAgICAgbVRmdHBIaWlIYW5kbGUsIEZpbGVQYXRoDQo+ID4gICAgICApOw0KPiA+DQo+ ID4gKyAgLy8NCj4gPiArICAvLyBPUEVOIEZJTEUNCj4gPiArICAvLw0KPiA+ICsgIGlmICghRUZJ X0VSUk9SIChTaGVsbEZpbGVFeGlzdHMgKG1Mb2NhbEZpbGVQYXRoKSkpIHsNCj4gPiArICAgIFNo ZWxsRGVsZXRlRmlsZUJ5TmFtZSAobUxvY2FsRmlsZVBhdGgpOw0KPiA+ICsgIH0NCj4gPiArDQo+ ID4gKyAgU3RhdHVzID0gU2hlbGxPcGVuRmlsZUJ5TmFtZSAoDQo+ID4gKyAgICAgICAgICAgICAg bUxvY2FsRmlsZVBhdGgsDQo+ID4gKyAgICAgICAgICAgICAgJm1GaWxlSGFuZGxlLA0KPiA+ICsg ICAgICAgICAgICAgIEVGSV9GSUxFX01PREVfQ1JFQVRFIHwNCj4gPiArICAgICAgICAgICAgICBF RklfRklMRV9NT0RFX1dSSVRFICB8DQo+ID4gKyAgICAgICAgICAgICAgRUZJX0ZJTEVfTU9ERV9S RUFELA0KPiA+ICsgICAgICAgICAgICAgIDANCj4gPiArICAgICAgICAgICAgICApOw0KPiA+ICsg IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIFNoZWxsUHJpbnRIaWlFeCAoDQo+ ID4gKyAgICAgIC0xLCAtMSwgTlVMTCwgU1RSSU5HX1RPS0VOIChTVFJfR0VOX0ZJTEVfT1BFTl9G QUlMKSwNCj4gPiArICAgICAgbVRmdHBIaWlIYW5kbGUsIEwidGZ0cCIsIG1Mb2NhbEZpbGVQYXRo DQo+ID4gKyAgICApOw0KPiA+ICsgICAgZ290byBFcnJvcjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ ICAgIFN0YXR1cyA9IE10ZnRwNC0+UmVhZEZpbGUgKE10ZnRwNCwgJk10ZnRwNFRva2VuKTsNCj4g PiAgICBTaGVsbFByaW50SGlpRXggKA0KPiA+ICAgICAgLTEsIC0xLCBOVUxMLCBTVFJJTkdfVE9L RU4gKFNUUl9HRU5fQ1JMRiksDQo+ID4gICAgICBtVGZ0cEhpaUhhbmRsZQ0KPiA+ICAgICAgKTsN Cj4gPg0KPiA+IC1FcnJvciA6DQo+ID4gKyAgLy8NCj4gPiArICAvLyBDTE9TRSBGSUxFDQo+ID4g KyAgLy8NCj4gPiArICBTaGVsbENsb3NlRmlsZSAoJm1GaWxlSGFuZGxlKTsNCj4gPg0KPiA+ICtF cnJvciA6DQo+ID4gICAgaWYgKFRmdHBDb250ZXh0ICE9IE5VTEwpIHsNCj4gPiAgICAgIEZyZWVQ b29sIChUZnRwQ29udGV4dCk7DQo+ID4gICAgfQ0KPiA+IEBAIC0xMDE2LDE0ICs5NzgsNyBAQCBF cnJvciA6DQo+ID4gICAgICBGcmVlUG9vbCAoTXRmdHA0VG9rZW4uT3B0aW9uTGlzdCk7DQo+ID4g ICAgfQ0KPiA+DQo+ID4gLSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+IC0gICAgZ0JT LT5GcmVlUGFnZXMgKFBhZ2VzQWRkcmVzcywgRUZJX1NJWkVfVE9fUEFHRVMgKEZpbGVTaXplKSk7 DQo+ID4gLSAgICByZXR1cm4gU3RhdHVzOw0KPiA+IC0gIH0NCj4gPiAtDQo+ID4gLSAgKkRhdGEg PSBCdWZmZXI7DQo+ID4gLQ0KPiA+IC0gIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiArICByZXR1 cm4gU3RhdHVzOw0KPiA+ICB9DQo+ID4NCj4gPiAgLyoqDQo+ID4gQEAgLTEwNTQsNiArMTAwOSw3 IEBAIENoZWNrUGFja2V0ICgNCj4gPiAgICBVSU5UTiAgICAgICAgICAgICBJbmRleDsNCj4gPiAg ICBVSU5UTiAgICAgICAgICAgICBMYXN0U3RlcDsNCj4gPiAgICBVSU5UTiAgICAgICAgICAgICBT dGVwOw0KPiA+ICsgIFVJTlROICAgICAgICAgICAgIERvd25sb2FkTGVuOw0KPiA+ICAgIEVGSV9T VEFUVVMgICAgICAgIFN0YXR1czsNCj4gPg0KPiA+ICAgIGlmICgoTlRPSFMgKFBhY2tldC0+T3BD b2RlKSkgIT0gRUZJX01URlRQNF9PUENPREVfREFUQSkgew0KPiA+IEBAIC0xMDYxLDE3ICsxMDE3 LDM1IEBAIENoZWNrUGFja2V0ICgNCj4gPiAgICB9DQo+ID4NCj4gPiAgICBDb250ZXh0ID0gKERP V05MT0FEX0NPTlRFWFQqKVRva2VuLT5Db250ZXh0Ow0KPiA+IC0gIGlmIChDb250ZXh0LT5Eb3du bG9hZGVkTmJPZkJ5dGVzID09IDApIHsNCj4gPiAtICAgIFNoZWxsUHJpbnRFeCAoLTEsIC0xLCBM IiVzICAgICAgIDAgS2IiLCBtVGZ0cFByb2dyZXNzRnJhbWUpOw0KPiA+IC0gIH0NCj4gPg0KPiA+ ICAgIC8vDQo+ID4gICAgLy8gVGhlIGRhdGEgaW4gdGhlIHBhY2tldCBhcmUgcHJlcGVuZGVkIHdp dGggdHdvIFVJTlQxNiA6DQo+ID4gICAgLy8gLiBPcENvZGUgPSBFRklfTVRGVFA0X09QQ09ERV9E QVRBDQo+ID4gICAgLy8gLiBCbG9jayAgPSB0aGUgbnVtYmVyIG9mIHRoaXMgYmxvY2sgb2YgZGF0 YQ0KPiA+ICAgIC8vDQo+ID4gLSAgQ29udGV4dC0+RG93bmxvYWRlZE5iT2ZCeXRlcyArPSBQYWNr ZXRMZW4gLSBzaXplb2YgKFBhY2tldC0NCj4gPk9wQ29kZSkNCj4gPiAtICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHNpemVvZiAoUGFja2V0LT5EYXRhLkJsb2Nr KTsNCj4gPiArICBEb3dubG9hZExlbiA9IChVSU5UTilQYWNrZXRMZW4gLSBzaXplb2YgKFBhY2tl dC0+T3BDb2RlKSAtIHNpemVvZg0KPiAoUGFja2V0LT5EYXRhLkJsb2NrKTsNCj4gPiArDQo+ID4g KyAgU2hlbGxTZXRGaWxlUG9zaXRpb24obUZpbGVIYW5kbGUsIENvbnRleHQtPkRvd25sb2FkZWRO Yk9mQnl0ZXMpOw0KPiA+ICsgIFN0YXR1cyA9IFNoZWxsV3JpdGVGaWxlIChtRmlsZUhhbmRsZSwg JkRvd25sb2FkTGVuLCBQYWNrZXQtDQo+ID5EYXRhLkRhdGEpOw0KPiANCj4gQW5kLCBhZnRlciB0 aGUgcGF0Y2gsIHdlJ3JlIG5vdyB3cml0aW5nIFRGVFAgcGFja2V0LXNpemVkIGNodW5rcyB0byB0 aGUNCj4gZmlsZS4gSXMgdGhpcyBub3QgYSBwZXJmb3JtYW5jZSBwcm9ibGVtIGZvciB0cmFkaXRp b25hbCBzcGluZGxlIGRpc2tzDQo+ICgic3Bpbm5pbmcgcnVzdCIpPyBJZiBuZWl0aGVyIHRoZSBy ZXN0IG9mIHRoZSBkcml2ZXIgc3RhY2ssIG5vciB0aGUgZGlzaw0KPiBjb250cm9sbGVyIGl0c2Vs Ziwgc3VwcG9ydCBzb21lIGZvcm0gb2Ygd3JpdGUgY2FjaGluZywgdGhlbiB3cml0aW5nIG91dA0K PiBldmVyeSBURlRQIHBhY2tldCBpbiBpc29sYXRpb24gKGVzcGVjaWFsbHkgZm9yIGEgbXVsdGkt R0IgZmlsZSkgY291bGQgYmUNCj4gZGV0cmltZW50YWwgdG8gcGVyZm9ybWFuY2UgKGFuZCBtYXli ZSB0byB0aGUgaGVhbHRoIG9mIHRoZSBzcGluZGxlIGRpc2spLg0KPiANCj4gQ3VycmVudGx5IEkn bSBub3QgYWZmZWN0ZWQgYnkgdGhpcyB1c2UgY2FzZSBlaXRoZXIgd2F5LCBzbyBmZWVsIGZyZWUg dG8NCj4gaWdub3JlLCBidXQgaXQgbWlnaHQgbWFrZSBzZW5zZSB0byBpbXBsZW1lbnQgc29tZSBs YXJnZXIgY2h1bmtpbmcgaGVyZSwNCj4gbGlrZSA2NEtCIG9yIDEyOEtCIC0tIGxhdGVyLCBhcyBh IHNlcGFyYXRlIEZlYXR1cmUgQlouDQo+IA0KPiBUaGFua3MsDQo+IExhc3psbw0KPiANCj4gDQo+ ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgaWYgKENvbnRleHQtPkRv d25sb2FkZWROYk9mQnl0ZXMgPiAwKSB7DQo+ID4gKyAgICAgIFNoZWxsUHJpbnRIaWlFeCAoDQo+ ID4gKyAgICAgICAgLTEsIC0xLCBOVUxMLCBTVFJJTkdfVE9LRU4gKFNUUl9HRU5fQ1JMRiksDQo+ ID4gKyAgICAgICAgbVRmdHBIaWlIYW5kbGUNCj4gPiArICAgICAgKTsNCj4gPiArICAgIH0NCj4g PiArICAgIFNoZWxsUHJpbnRIaWlFeCAoDQo+ID4gKyAgICAgIC0xLCAtMSwgTlVMTCwgU1RSSU5H X1RPS0VOIChTVFJfVEZUUF9FUlJfV1JJVEUpLA0KPiA+ICsgICAgICBtVGZ0cEhpaUhhbmRsZSwg bUxvY2FsRmlsZVBhdGgsIFN0YXR1cw0KPiA+ICsgICAgKTsNCj4gPiArICAgIHJldHVybiBTdGF0 dXM7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoQ29udGV4dC0+RG93bmxvYWRlZE5iT2ZC eXRlcyA9PSAwKSB7DQo+ID4gKyAgICBTaGVsbFByaW50RXggKC0xLCAtMSwgTCIlcyAgICAgICAw IEtiIiwgbVRmdHBQcm9ncmVzc0ZyYW1lKTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIENvbnRl eHQtPkRvd25sb2FkZWROYk9mQnl0ZXMgKz0gRG93bmxvYWRMZW47DQo+ID4gICAgTmJPZktiID0g Q29udGV4dC0+RG93bmxvYWRlZE5iT2ZCeXRlcyAvIDEwMjQ7DQo+ID4NCj4gPiAgICBQcm9ncmVz c1swXSA9IEwnXDAnOw0KPiA+DQoNCg==