From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.120; helo=mga04.intel.com; envelope-from=star.zeng@intel.com; receiver=edk2-devel@lists.01.org Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) (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 9103D2115BE0F for ; Thu, 27 Sep 2018 20:05:47 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 27 Sep 2018 20:05:47 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.54,313,1534834800"; d="scan'208";a="92790635" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by fmsmga004.fm.intel.com with ESMTP; 27 Sep 2018 20:05:39 -0700 Received: from fmsmsx117.amr.corp.intel.com (10.18.116.17) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.319.2; Thu, 27 Sep 2018 20:05:39 -0700 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.319.2; Thu, 27 Sep 2018 20:05:39 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.140]) by SHSMSX103.ccr.corp.intel.com ([169.254.4.245]) with mapi id 14.03.0319.002; Fri, 28 Sep 2018 11:05:36 +0800 From: "Zeng, Star" To: "Kinney, Michael D" , Ard Biesheuvel CC: "edk2-devel@lists.01.org" , "Zimmer, Vincent" , "Richardson, Brian" , Andrew Fish , Leif Lindholm , "Dong, Eric" , "Ni, Ruiyu" , "Gao, Liming" , "Carsey, Jaben" , "Shi, Steven" , "Zeng, Star" Thread-Topic: [PATCH v3 1/7] MdeModulePkg: introduce PE/COFF image emulator protocol Thread-Index: AQHUVb7cRVFYbeiXpkin2nDWr1hK5KUDSyWAgAAlYwCAAE2hgIABRUSQ Date: Fri, 28 Sep 2018 03:05:35 +0000 Message-ID: <0C09AFA07DD0434D9E2A0C6AEB0483103BBF476E@shsmsx102.ccr.corp.intel.com> References: <20180920230145.7565-1-ard.biesheuvel@linaro.org> <20180920230145.7565-2-ard.biesheuvel@linaro.org> <0C09AFA07DD0434D9E2A0C6AEB0483103BBF0A34@shsmsx102.ccr.corp.intel.com> <0C09AFA07DD0434D9E2A0C6AEB0483103BBF1D27@shsmsx102.ccr.corp.intel.com> In-Reply-To: Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH v3 1/7] MdeModulePkg: introduce PE/COFF image emulator protocol 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: Fri, 28 Sep 2018 03:05:47 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 TWlrZSwNCg0KR29vZCBpZGVhLg0KWW91IHByZWZlciB0byBpbnRyb2R1Y2UgYSBuZXcgZmVhdHVy ZSBQQ0QgZm9yIHRoaXMgd2l0aCBkZWZhdWx0IHZhbHVlID0gVFJVRT8NCg0KQ291bGQgd2UgZ3Jv dXAgdGhlIGVtdWxhdG9yIEFQSXMgdG8gb25lIHN0cnVjdHVyZSBsaWtlIGJlbG93PyBBbmQgYWRk IGEgVmVyc2lvbiBmaWVsZCBmb3IgcG90ZW50aWFsIGZ1cnRoZXIgZXh0ZW5zaW9uPw0KDQp0eXBl ZGVmIHN0cnVjdCB7DQogIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFZlcnNpb247DQogIEVES0lJX1BFQ09GRl9JTUFHRV9FTVVMQVRPUl9JU19JTUFHRV9T VVBQT1JURUQgIElzSW1hZ2VTdXBwb3J0ZWQ7DQogIEVES0lJX1BFQ09GRl9JTUFHRV9FTVVMQVRP Ul9SRUdJU1RFUl9JTUFHRSAgICAgIFJlZ2lzdGVySW1hZ2U7DQogIEVES0lJX1BFQ09GRl9JTUFH RV9FTVVMQVRPUl9VTlJFR0lTVEVSX0lNQUdFICAgIFVucmVnaXN0ZXJJbWFnZTsNCn0gUEVDT0ZG X0lNQUdFX0VNVUxBVE9SOw0KDQoNClRoYW5rcywNClN0YXINCi0tLS0tT3JpZ2luYWwgTWVzc2Fn ZS0tLS0tDQpGcm9tOiBLaW5uZXksIE1pY2hhZWwgRCANClNlbnQ6IFRodXJzZGF5LCBTZXB0ZW1i ZXIgMjcsIDIwMTggMTE6MzcgUE0NClRvOiBBcmQgQmllc2hldXZlbCA8YXJkLmJpZXNoZXV2ZWxA bGluYXJvLm9yZz47IFplbmcsIFN0YXIgPHN0YXIuemVuZ0BpbnRlbC5jb20+OyBLaW5uZXksIE1p Y2hhZWwgRCA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+DQpDYzogZWRrMi1kZXZlbEBsaXN0 cy4wMS5vcmc7IFppbW1lciwgVmluY2VudCA8dmluY2VudC56aW1tZXJAaW50ZWwuY29tPjsgUmlj aGFyZHNvbiwgQnJpYW4gPGJyaWFuLnJpY2hhcmRzb25AaW50ZWwuY29tPjsgQW5kcmV3IEZpc2gg PGFmaXNoQGFwcGxlLmNvbT47IExlaWYgTGluZGhvbG0gPGxlaWYubGluZGhvbG1AbGluYXJvLm9y Zz47IERvbmcsIEVyaWMgPGVyaWMuZG9uZ0BpbnRlbC5jb20+OyBOaSwgUnVpeXUgPHJ1aXl1Lm5p QGludGVsLmNvbT47IEdhbywgTGltaW5nIDxsaW1pbmcuZ2FvQGludGVsLmNvbT47IENhcnNleSwg SmFiZW4gPGphYmVuLmNhcnNleUBpbnRlbC5jb20+OyBTaGksIFN0ZXZlbiA8c3RldmVuLnNoaUBp bnRlbC5jb20+DQpTdWJqZWN0OiBSRTogW1BBVENIIHYzIDEvN10gTWRlTW9kdWxlUGtnOiBpbnRy b2R1Y2UgUEUvQ09GRiBpbWFnZSBlbXVsYXRvciBwcm90b2NvbA0KDQpIaSBBcmQsDQoNClllcy4g IEkgdGhpbmsgaXQgaXMgc2ltcGxlciBpZiBhbiBlbXVsYXRvciBtb2R1bGUgcmVnaXN0ZXJzIG9u ZSBtYWNoaW5lIHR5cGUgYXQgYSB0aW1lLiAgSWYgYW4gZW11bGF0b3IgbW9kdWxlIHdhbnRzIHRv IGRvIGEgc2luZ2xlIHJlZ2lzdHJhdGlvbiBhbmQgdGhhdCByZWdpc3RyYXRpb24gc3VwcG9ydHMg bXVsdGlwbGUgbWFjaGluZSB0eXBlcywgdGhlbiB0aGUgZW11bGF0b3IgaW1wbGVtZW50YXRpb24g aXMgbW9yZSBjb21wbGV4LCBidXQgaXQgaXMgc3RpbGwgZmVhc2libGUuDQoNCkkgdGhpbmsgSSBz ZWUgd2hlcmUgdGhpbmdzIGdvdCBjb25mdXNlZC4gIFRoZSBwcm9wb3NhbCBmcm9tIFN0YXIgZm9y IGEgbmV3IHByb3RvY29sIHByb2R1Y2VkIGJ5IHRoZSBEWEUgQ29yZSBoYXMgc29tZSBpc3N1ZXMu DQpBIHJlZmluZWQgcHJvcG9zYWwgaXMgc2hvd24gYmVsb3cuICBJdCBhbHNvIHN1cHBvcnRzIHRo ZSBpZGVhIHRoYXQgYW4gZW11bGF0b3IgbW9kdWxlIGNhbiBiZSBsb2FkZWQgYW5kIHVubG9hZGVk IHRvIHN1cHBvcnQgdGVzdGluZyBmcm9tIGVudmlyb25tZW50cyBsaWtlIHRoZSBVRUZJIFNoZWxs IHRvIHNvZnQgbG9hZCBhbiBlbXVsYXRvciwgdGVzdCBzb21lIGltYWdlcywgYW5kIHVubG9hZCBp dC4NCg0KQWxzbywgYnkgaGF2aW5nIGEgcHJvdG9jb2wgcHJvZHVjZWQgYnkgdGhlIERYRSBDb3Jl LCB0aGUgZW11bGF0b3IgbW9kdWxlIGNhbiB0ZWxsIGlmIHRoZSBEWEUgQ29yZSBzdXBwb3J0cyBl bXVsYXRvcnMgb3Igbm90IGJ5IGNoZWNraW5nIGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhpcyBwcm90 b2NvbC4gIFRoZSBlbXVsYXRvciBtb2R1bGUgY2FuIGZhaWwgZ3JhY2VmdWxseSB3aXRoIHNvbWUg REVCVUcoKSBtZXNzYWdlIGFuZCB1bmxvYWQgaWYgRFhFIENvcmUgZG9lcyBub3Qgc3VwcG9ydCBl bXVsYXRvcnMuICBUaGlzIGFsc28gYWxsb3dzIHRoZSBvcHRpb24gdG8gdXBkYXRlIHRoZSBEWEUg Q29yZSBtb2R1bGUgdG8gb3B0aW9uYWxseSBzdXBwb3J0IGVtdWxhdG9ycyB1c2luZyBhIFBDRCBG ZWF0dXJlIEZsYWcgYW5kIHJlbW92ZSBzb21lIGxvZ2ljIGlmIGVtdWxhdG9ycyBhcmUgbm90IHJl cXVpcmVkIG9uIGEgc3BlY2lmaWMgcGxhdGZvcm0uDQoNCnR5cGVkZWYNCkVGSV9TVEFUVVMNCihF RklBUEkgKkVES0lJX1BFQ09GRl9JTUFHRV9FTVVMQVRPUl9BRERfRU1VTEFUT1IpICgNCiAgSU4g RURLSUlfUEVDT0ZGX0lNQUdFX0VNVUxBVE9SX1BST1RPQ09MICAgICAgICAgICAgKlRoaXMsDQog IElOIEVES0lJX1BFQ09GRl9JTUFHRV9FTVVMQVRPUl9JU19JTUFHRV9TVVBQT1JURUQgIElzSW1h Z2VTdXBwb3J0ZWQsDQogIElOIEVES0lJX1BFQ09GRl9JTUFHRV9FTVVMQVRPUl9SRUdJU1RFUl9J TUFHRSAgICAgIFJlZ2lzdGVySW1hZ2UsDQogIElOIEVES0lJX1BFQ09GRl9JTUFHRV9FTVVMQVRP Ul9VTlJFR0lTVEVSX0lNQUdFICAgIFVucmVnaXN0ZXJJbWFnZQ0KICApOw0KDQp0eXBlZGVmDQpF RklfU1RBVFVTDQooRUZJQVBJICpFREtJSV9QRUNPRkZfSU1BR0VfRU1VTEFUT1JfUkVNT1ZFX0VN VUxBVE9SKSAoDQogIElOIEVES0lJX1BFQ09GRl9JTUFHRV9FTVVMQVRPUl9QUk9UT0NPTCAgICAg ICAgICAgICpUaGlzLA0KICBJTiBFREtJSV9QRUNPRkZfSU1BR0VfRU1VTEFUT1JfSVNfSU1BR0Vf U1VQUE9SVEVEICBJc0ltYWdlU3VwcG9ydGVkLA0KICBJTiBFREtJSV9QRUNPRkZfSU1BR0VfRU1V TEFUT1JfUkVHSVNURVJfSU1BR0UgICAgICBSZWdpc3RlckltYWdlLA0KICBJTiBFREtJSV9QRUNP RkZfSU1BR0VfRU1VTEFUT1JfVU5SRUdJU1RFUl9JTUFHRSAgICBVbnJlZ2lzdGVySW1hZ2UNCiAg KTsNCg0KdHlwZWRlZiBzdHJ1Y3QgX0VES0lJX1BFQ09GRl9JTUFHRV9FTVVMQVRPUl9QUk9UT0NP TCB7DQogIEVES0lJX1BFQ09GRl9JTUFHRV9FTVVMQVRPUl9BRERfRU1VTEFUT1IgICAgIEFkZEVt dWxhdG9yOw0KICBFREtJSV9QRUNPRkZfSU1BR0VfRU1VTEFUT1JfUkVNT1ZFX0VNVUxBVE9SICBS ZW1vdmVFbXVsYXRvcjsgfSBFREtJSV9QRUNPRkZfSU1BR0VfRU1VTEFUT1JfUFJPVE9DT0wNCg0K VGhlIElzSW1hZ2VTdXBwb3J0ZWQoKSwgUmVnaXN0ZXJJbWFnZSgpLCBhbmQgVW5SZWdpc3Rlcklt YWdlKCkgYXJlIGFkZGVkIGluIGEgc2V0IGluIGEgc2luZ2xlIGNhbGwgdG8gQWRkRW11bGF0b3Io KSBmcm9tIHRoZSBlbXVsYXRvciBtb2R1bGUuICBJbiBMb2FkSW1hZ2UoKSwgaWYgSXNJbWFnZVN1 cHBvcnRlZCgpIHJldHVybnMgVFJVRSwgTG9hZEltYWdlKCkgdXNlcyB0aGUgUmVnaXN0ZXJJbWFn ZSgpIGFuZCBVblJlZ2lzdGVySW1hZ2UoKSBBUElzIHRoYXQgd2VyZSBhZGRlZCB3aXRoIHRoZSBJ c0ltYWdlU3VwcG9ydGVkKCkgQVBJIGluIHRoZSBjYWxsIHRvIEFkZEVtdWxhdG9yKCkuDQoNClRo YW5rcywNCg0KTWlrZQ0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEFy ZCBCaWVzaGV1dmVsIFttYWlsdG86YXJkLmJpZXNoZXV2ZWxAbGluYXJvLm9yZ10NCj4gU2VudDog VGh1cnNkYXksIFNlcHRlbWJlciAyNywgMjAxOCAzOjU5IEFNDQo+IFRvOiBaZW5nLCBTdGFyIDxz dGFyLnplbmdAaW50ZWwuY29tPg0KPiBDYzogS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5r aW5uZXlAaW50ZWwuY29tPjsgDQo+IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnOyBaaW1tZXIsIFZp bmNlbnQgPHZpbmNlbnQuemltbWVyQGludGVsLmNvbT47IA0KPiBSaWNoYXJkc29uLCBCcmlhbiA8 YnJpYW4ucmljaGFyZHNvbkBpbnRlbC5jb20+OyBBbmRyZXcgRmlzaCANCj4gPGFmaXNoQGFwcGxl LmNvbT47IExlaWYgTGluZGhvbG0gPGxlaWYubGluZGhvbG1AbGluYXJvLm9yZz47IERvbmcsIA0K PiBFcmljIDxlcmljLmRvbmdAaW50ZWwuY29tPjsgTmksIFJ1aXl1IDxydWl5dS5uaUBpbnRlbC5j b20+OyBHYW8sIA0KPiBMaW1pbmcgPGxpbWluZy5nYW9AaW50ZWwuY29tPjsgQ2Fyc2V5LCBKYWJl biA8amFiZW4uY2Fyc2V5QGludGVsLmNvbT47IA0KPiBTaGksIFN0ZXZlbiA8c3RldmVuLnNoaUBp bnRlbC5jb20+DQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjMgMS83XSBNZGVNb2R1bGVQa2c6IGlu dHJvZHVjZSBQRS9DT0ZGIGltYWdlIA0KPiBlbXVsYXRvciBwcm90b2NvbA0KPiANCj4gT24gMjcg U2VwdGVtYmVyIDIwMTggYXQgMDI6NDgsIFplbmcsIFN0YXIgPHN0YXIuemVuZ0BpbnRlbC5jb20+ IHdyb3RlOg0KPiA+IFllcy4gVGhpcyBpZGVhIGFsc28gY2FtZSB0byBteSBtaW5kIGxhc3Qgbmln aHQsIHRoZW4NCj4gbm8gbmVlZCBpbnRyb2R1Y2UgUGVDb2ZmRW11bGF0b3JEeGUgYW5kIG5vIHBs YXRmb3JtIGNoYW5nZSBpcyBuZWVkZWQuDQo+ID4NCj4gDQo+IFRoZSBvbmx5IHByb2JsZW0gd2l0 aCB0aGlzIGFwcHJvYWNoIGlzIHRoYXQgd2UgY2Fubm90IGtlZXAgdHJhY2sgb2YgDQo+IHdoaWNo IGVtdWxhdG9yIHJldHVybmVkIFRSVUUgZm9yIElzU3VwcG9ydGVkKCksIGFuZCBzbw0KPiBSZWdp c3RlckltYWdlKCkNCj4gYW5kIGFsc28gVW5yZWdpc3RlckltYWdlKCkgd2lsbCBoYXZlIHRvIGRv IHNvbWUgaW50ZXJuYWwgYm9va2tlZXBpbmcgDQo+IGluIHRoZSAnbWFuYWdlcicgcHJvdG9jb2wg aW1wbGVtZW50YXRpb24gdGhhdCBkdXBsaWNhdGVzIGNvZGUgaW4gdGhlIA0KPiBlbXVsYXRvcnMu DQo+IA0KPiBTbyBjb3VsZCB3ZSBmbGVzaCB0aGlzIG91dCBhIGJpdCBiZWZvcmUgSSBkaXZlIGlu dG8gdGhlIGNvZGUgYWdhaW4gYW5kIA0KPiB0dXJuIGV2ZXJ5dGhpbmcgdXBzaWRlIGRvd24/DQo+ IA0KPiAtIHRoZSBQQ0kgYnVzIGRyaXZlciBubyBsb25nZXIgY2hlY2tzIHRoZSBtYWNoaW5lIHR5 cGUNCj4gLSB0aGUgQkRTIG5vIGxvbmdlciBjaGVja3MgdGhlIG1hY2hpbmUgdHlwZSBmb3IgRHJp dmVyIyMjIyBpbWFnZXMNCj4gLSBDb3JlTG9hZEltYWdlKCkgY2hlY2tzIElzU3VwcG9ydGVkKCkg dG8gZXN0YWJsaXNoIHdoZXRoZXIgdGhlIA0KPiBlbXVsYXRvciBtYW5hZ2VyIGhhcyBhbiBlbXVs YXRvciBhdmFpbGFibGUgdGhhdCBpcyB3aWxsaW5nIHRvIHRha2UgDQo+IGNoYXJnZSBvZiB0aGUg aW1hZ2UNCj4gLSB3aGF0IGhhcHBlbnMgbmV4dD8gQ29yZUxvYWRJbWFnZSgpIGNhbGxzDQo+IFJl Z2lzdGVySW1hZ2UoKSBvbiB3aGF0Pw0KPiBTaG91bGQgSXNTdXBwb3J0ZWQoKSByZXR1cm4gc29t ZSBraW5kIG9mIGhhbmRsZT8NCj4gDQo+IEFsc28sIHBlcmhhcHMgd2Ugc2hvdWxkIHNpbXBseSBz dGljayB3aXRoIG9uZSBlbXVsYXRvciBwZXIgbWFjaGluZSANCj4gdHlwZSAod2hpY2ggZG9lc24n dCBwcmVjbHVkZSBhbiBpbXBsZW1lbnRhdGlvbiBmcm9tIHJlZ2lzdGVyaW5nIGl0c2VsZiANCj4g Zm9yIG11bHRpcGxlIG9uZXMpLiBUaGF0IHNpbXBsaWZpZXMgdGhlIElzU3VwcG9ydGVkIHZzIFJl Z2lzdGVySW1hZ2UgDQo+IGlzc3VlIGFib3ZlIGFzIHdlbGwgKGkuZS4sIGl0IGlzIHVuYW1iaWd1 b3VzICp3aGljaCoNCj4gUmVnaXN0ZXJJbWFnZSgpDQo+IHNob3VsZCBiZSBjYWxsZWQpDQo+IA0K PiANCj4gDQo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiBGcm9tOiBLaW5uZXks IE1pY2hhZWwgRA0KPiA+IFNlbnQ6IFRodXJzZGF5LCBTZXB0ZW1iZXIgMjcsIDIwMTggMTozMiBB TQ0KPiA+IFRvOiBBcmQgQmllc2hldXZlbCA8YXJkLmJpZXNoZXV2ZWxAbGluYXJvLm9yZz47IFpl bmcsDQo+IFN0YXIgPHN0YXIuemVuZ0BpbnRlbC5jb20+OyBLaW5uZXksIE1pY2hhZWwgRA0KPiA8 bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+DQo+ID4gQ2M6IGVkazItZGV2ZWxAbGlzdHMuMDEu b3JnOyBaaW1tZXIsIFZpbmNlbnQNCj4gPHZpbmNlbnQuemltbWVyQGludGVsLmNvbT47IFJpY2hh cmRzb24sIEJyaWFuDQo+IDxicmlhbi5yaWNoYXJkc29uQGludGVsLmNvbT47IEFuZHJldyBGaXNo DQo+IDxhZmlzaEBhcHBsZS5jb20+OyBMZWlmIExpbmRob2xtDQo+IDxsZWlmLmxpbmRob2xtQGxp bmFyby5vcmc+OyBEb25nLCBFcmljDQo+IDxlcmljLmRvbmdAaW50ZWwuY29tPjsgTmksIFJ1aXl1 IDxydWl5dS5uaUBpbnRlbC5jb20+Ow0KPiBHYW8sIExpbWluZyA8bGltaW5nLmdhb0BpbnRlbC5j b20+OyBDYXJzZXksIEphYmVuDQo+IDxqYWJlbi5jYXJzZXlAaW50ZWwuY29tPjsgU2hpLCBTdGV2 ZW4NCj4gPHN0ZXZlbi5zaGlAaW50ZWwuY29tPg0KPiA+IFN1YmplY3Q6IFJFOiBbUEFUQ0ggdjMg MS83XSBNZGVNb2R1bGVQa2c6IGludHJvZHVjZQ0KPiBQRS9DT0ZGIGltYWdlIGVtdWxhdG9yIHBy b3RvY29sDQo+ID4NCj4gPiBIaSBBcmQsDQo+ID4NCj4gPiBJIHRoaW5rIHRoaXMgcmVnaXN0cmF0 aW9uIHByb3RvY29sIHdvdWxkIGJlIGEgbmV3DQo+IHByb3RvY29sIGluIHRoZSBNZGVNb2R1bGVQ a2cgYW5kIHRoZSBwcm90b2NvbCB3b3VsZCBiZQ0KPiBwcm9kdWNlZCBieSB0aGUgRFhFIENvcmUu ICBUaGUgZW11bGF0aW9uIGRyaXZlcnMsDQo+IGluY2x1ZGluZyBFQkMgd291bGQgY29uc3VtZSB0 aGlzIHByb3RvY29sIHRvIHJlZ2lzdGVyDQo+IHRoZWlyIHNlcnZpY2VzLiAgVGhpcyByZW1vdmVz IHRoZSBuZWVkIGZvciB0aGUgRFhFIENvcmUNCj4gdG8gZG8gYSBSZWdpc3RlciBQcm90b2NvbCBO b3RpZnkgZXZlbnQgZm9yIHRoZSBlbXVsYXRvcg0KPiBwcm90b2NvbC4gIFRoZSBEWEUgQ29yZSB3 b3VsZCBidWlsZCBhIHRhYmxlIG9mDQo+IHJlZ2lzdGVyZWQgc2VydmljZXMsIHNvIGl0IGNhbiBx dWlja2x5IGxvb3AgdGhyb3VnaA0KPiB0aGVtIHRvIGNoZWNrIGlmIGFuIGVtdWxhdG9yIHN1cHBv cnRzIGEgc3BlY2lmaWMNCj4gUEUvQ09GRiBpbWFnZSBvciBub3QuDQo+ID4NCj4gPiBCZXN0IHJl Z2FyZHMsDQo+ID4NCj4gPiBNaWtlDQo+ID4NCj4gPj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0t LS0NCj4gPj4gRnJvbTogQXJkIEJpZXNoZXV2ZWwNCj4gW21haWx0bzphcmQuYmllc2hldXZlbEBs aW5hcm8ub3JnXQ0KPiA+PiBTZW50OiBXZWRuZXNkYXksIFNlcHRlbWJlciAyNiwgMjAxOCAzOjE0 IEFNDQo+ID4+IFRvOiBaZW5nLCBTdGFyIDxzdGFyLnplbmdAaW50ZWwuY29tPg0KPiA+PiBDYzog ZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc7IFppbW1lciwgVmluY2VudA0KPiA+PiA8dmluY2VudC56 aW1tZXJAaW50ZWwuY29tPjsgUmljaGFyZHNvbiwgQnJpYW4NCj4gPj4gPGJyaWFuLnJpY2hhcmRz b25AaW50ZWwuY29tPjsgS2lubmV5LCBNaWNoYWVsIEQNCj4gPj4gPG1pY2hhZWwuZC5raW5uZXlA aW50ZWwuY29tPjsgQW5kcmV3IEZpc2gNCj4gPGFmaXNoQGFwcGxlLmNvbT47IExlaWYNCj4gPj4g TGluZGhvbG0gPGxlaWYubGluZGhvbG1AbGluYXJvLm9yZz47IERvbmcsIEVyaWMNCj4gPGVyaWMu ZG9uZ0BpbnRlbC5jb20+Ow0KPiA+PiBOaSwgUnVpeXUgPHJ1aXl1Lm5pQGludGVsLmNvbT47IEdh bywgTGltaW5nDQo+IDxsaW1pbmcuZ2FvQGludGVsLmNvbT47DQo+ID4+IENhcnNleSwgSmFiZW4g PGphYmVuLmNhcnNleUBpbnRlbC5jb20+OyBTaGksIFN0ZXZlbg0KPiA+PiA8c3RldmVuLnNoaUBp bnRlbC5jb20+DQo+ID4+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjMgMS83XSBNZGVNb2R1bGVQa2c6 IGludHJvZHVjZQ0KPiBQRS9DT0ZGIGltYWdlDQo+ID4+IGVtdWxhdG9yIHByb3RvY29sDQo+ID4+ DQo+ID4+IE9uIFdlZCwgMjYgU2VwIDIwMTggYXQgMTI6MDcsIFplbmcsIFN0YXINCj4gPHN0YXIu emVuZ0BpbnRlbC5jb20+IHdyb3RlOg0KPiA+PiA+DQo+ID4+ID4gQSBsaXR0bGUgbGF0ZSBmZWVk YmFjay4gSnVzdCBhbiBpZGVhLg0KPiA+PiA+DQo+ID4+ID4gRG8geW91IHRoaW5rIHdoZXRoZXIg aXQgY2FuIG1ha2UgdGhlIGNvbnN1bWVyDQo+IHNpbXBsZXINCj4gPj4gbGlrZSBiZWxvdyBvciBu b3Q/DQo+ID4+ID4NCj4gPj4gPiBBZGQgYSBuZXcgQVBJIFJlZ2lzdGVySW50ZXJmYWNlcyBpbiB0 aGUgcHJvdG9jb2wNCj4gYW5kDQo+ID4+IGFkZCBhIHdyYXBwZXIgZHJpdmVyIFBlQ29mZkVtdWxh dG9yRHhlLg0KPiA+PiA+IFRoZSBlbXVsYXRvcnMgY2FuIGNhbGwgUmVnaXN0ZXJJbnRlcmZhY2Vz LCBhbmQNCj4gPj4gY29uc3VtZXIgd2lsbCBjYWxsIG90aGVyIEFQSXMgc2ltcGx5LA0KPiBQZUNv ZmZFbXVsYXRvckR4ZSB3aWxsIGJlIGENCj4gPj4gd3JhcHBlciBhcyBtYW5hZ2VyLg0KPiA+PiA+ DQo+ID4+ID4gdHlwZWRlZg0KPiA+PiA+IEVGSV9TVEFUVVMNCj4gPj4gPiAoRUZJQVBJDQo+ID4+ ICpFREtJSV9QRUNPRkZfSU1BR0VfRU1VTEFUT1JfUkVHSVNURVJfSU5URVJGQUNFUykgKA0KPiA+ PiA+ICAgSU4gRURLSUlfUEVDT0ZGX0lNQUdFX0VNVUxBVE9SX1BST1RPQ09MDQo+ICpUaGlzLA0K PiA+PiA+ICAgSU4NCj4gRURLSUlfUEVDT0ZGX0lNQUdFX0VNVUxBVE9SX0lTX0lNQUdFX1NVUFBP UlRFRA0KPiA+PiBJc0ltYWdlU3VwcG9ydGVkLA0KPiA+PiA+ICAgSU4gRURLSUlfUEVDT0ZGX0lN QUdFX0VNVUxBVE9SX1JFR0lTVEVSX0lNQUdFDQo+ID4+IFJlZ2lzdGVySW1hZ2UsDQo+ID4+ID4g ICBJTiBFREtJSV9QRUNPRkZfSU1BR0VfRU1VTEFUT1JfVU5SRUdJU1RFUl9JTUFHRQ0KPiA+PiBV bnJlZ2lzdGVySW1hZ2UNCj4gPj4gPiAgICk7DQo+ID4+ID4NCj4gPj4gPiB0eXBlZGVmIHN0cnVj dA0KPiBfRURLSUlfUEVDT0ZGX0lNQUdFX0VNVUxBVE9SX1BST1RPQ09MIHsNCj4gPj4gPiAgIEVE S0lJX1BFQ09GRl9JTUFHRV9FTVVMQVRPUl9SRUdJU1RFUl9JTlRFUkZBQ0VTDQo+ID4+IFJlZ2lz dGVySW50ZXJmYWNlczsNCj4gPj4gPiAgIEVES0lJX1BFQ09GRl9JTUFHRV9FTVVMQVRPUl9JU19J TUFHRV9TVVBQT1JURUQNCj4gPj4gSXNJbWFnZVN1cHBvcnRlZDsNCj4gPj4gPiAgIEVES0lJX1BF Q09GRl9JTUFHRV9FTVVMQVRPUl9SRUdJU1RFUl9JTUFHRQ0KPiA+PiBSZWdpc3RlckltYWdlOw0K PiA+PiA+ICAgRURLSUlfUEVDT0ZGX0lNQUdFX0VNVUxBVE9SX1VOUkVHSVNURVJfSU1BR0UNCj4g Pj4gVW5yZWdpc3RlckltYWdlOw0KPiA+PiA+IH0gRURLSUlfUEVDT0ZGX0lNQUdFX0VNVUxBVE9S X1BST1RPQ09MOw0KPiA+PiA+DQo+ID4+DQo+ID4+IEhpIFN0YXIsDQo+ID4+DQo+ID4+IFRoYW5r cyBmb3IgdGFraW5nIGEgbG9vay4NCj4gPj4NCj4gPj4gSSB0cmllZCB0byBhdm9pZCBpbnRyb2R1 Y2luZyBuZXcgZHJpdmVycyBvciBsaWJyYXJ5DQo+IGNsYXNzZXMgYmVjYXVzZSBpdA0KPiA+PiB3 aWxsIGJyZWFrIGV4aXN0aW5nIHBsYXRmb3JtcyB0aGF0IGluY29ycG9yYXRlDQo+IEViY0R4ZS4N Cj4gPj4gRG8geW91IHRoaW5rDQo+ID4+IHRoaXMgaXMgbm90IGFuIGlzc3VlPw0KPiA+Pg0KPiA+ PiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4+ID4gRnJvbTogQXJkIEJpZXNoZXV2 ZWwNCj4gPj4gW21haWx0bzphcmQuYmllc2hldXZlbEBsaW5hcm8ub3JnXQ0KPiA+PiA+IFNlbnQ6 IEZyaWRheSwgU2VwdGVtYmVyIDIxLCAyMDE4IDc6MDIgQU0NCj4gPj4gPiBUbzogZWRrMi1kZXZl bEBsaXN0cy4wMS5vcmcNCj4gPj4gPiBDYzogQXJkIEJpZXNoZXV2ZWwgPGFyZC5iaWVzaGV1dmVs QGxpbmFyby5vcmc+Ow0KPiA+PiBaaW1tZXIsIFZpbmNlbnQgPHZpbmNlbnQuemltbWVyQGludGVs LmNvbT47DQo+IFJpY2hhcmRzb24sIEJyaWFuDQo+ID4+IDxicmlhbi5yaWNoYXJkc29uQGludGVs LmNvbT47IEtpbm5leSwgTWljaGFlbCBEDQo+ID4+IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNv bT47IEFuZHJldyBGaXNoDQo+IDxhZmlzaEBhcHBsZS5jb20+OyBMZWlmDQo+ID4+IExpbmRob2xt IDxsZWlmLmxpbmRob2xtQGxpbmFyby5vcmc+OyBaZW5nLCBTdGFyDQo+IDxzdGFyLnplbmdAaW50 ZWwuY29tPjsNCj4gPj4gRG9uZywgRXJpYyA8ZXJpYy5kb25nQGludGVsLmNvbT47IE5pLCBSdWl5 dQ0KPiA8cnVpeXUubmlAaW50ZWwuY29tPjsgR2FvLA0KPiA+PiBMaW1pbmcgPGxpbWluZy5nYW9A aW50ZWwuY29tPjsgQ2Fyc2V5LCBKYWJlbg0KPiA8amFiZW4uY2Fyc2V5QGludGVsLmNvbT47DQo+ ID4+IFNoaSwgU3RldmVuIDxzdGV2ZW4uc2hpQGludGVsLmNvbT4NCj4gPj4gPiBTdWJqZWN0OiBb UEFUQ0ggdjMgMS83XSBNZGVNb2R1bGVQa2c6IGludHJvZHVjZQ0KPiA+PiBQRS9DT0ZGIGltYWdl IGVtdWxhdG9yIHByb3RvY29sDQo+ID4+ID4NCj4gPj4gPiBJbnRyb2R1Y2UgYSBwcm90b2NvbCB0 aGF0IGNhbiBiZSBpbnZva2VkIGJ5IHRoZQ0KPiBpbWFnZQ0KPiA+PiBsb2FkaW5nIHNlcnZpY2Vz IHRvIGV4ZWN1dGUgZm9yZWlnbiBhcmNoaXRlY3R1cmUNCj4gUEUvQ09GRiBpbWFnZXMgdmlhIGFu DQo+ID4+IGVtdWxhdG9yLg0KPiA+PiA+DQo+ID4+ID4gQ29udHJpYnV0ZWQtdW5kZXI6IFRpYW5v Q29yZSBDb250cmlidXRpb24NCj4gQWdyZWVtZW50DQo+ID4+IDEuMQ0KPiA+PiA+IFNpZ25lZC1v ZmYtYnk6IEFyZCBCaWVzaGV1dmVsDQo+ID4+IDxhcmQuYmllc2hldXZlbEBsaW5hcm8ub3JnPg0K PiA+PiA+IC0tLQ0KPiA+PiA+DQo+IE1kZU1vZHVsZVBrZy9JbmNsdWRlL1Byb3RvY29sL1BlQ29m ZkltYWdlRW11bGF0b3IuaCB8DQo+ID4+IDEwMiArKysrKysrKysrKysrKysrKysrKw0KPiA+PiA+ ICBNZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KPiB8DQo+ID4+IDQgKw0KPiA+PiA+ICAy IGZpbGVzIGNoYW5nZWQsIDEwNiBpbnNlcnRpb25zKCspDQo+ID4+ID4NCj4gPj4gPiBkaWZmIC0t Z2l0DQo+ID4+DQo+IGEvTWRlTW9kdWxlUGtnL0luY2x1ZGUvUHJvdG9jb2wvUGVDb2ZmSW1hZ2VF bXVsYXRvci5oDQo+ID4+DQo+IGIvTWRlTW9kdWxlUGtnL0luY2x1ZGUvUHJvdG9jb2wvUGVDb2Zm SW1hZ2VFbXVsYXRvci5oDQo+ID4+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPj4gPiBpbmRl eCAwMDAwMDAwMDAwMDAuLjI3YmFkNTU2MjA5Yw0KPiA+PiA+IC0tLSAvZGV2L251bGwNCj4gPj4g PiArKysNCj4gPj4NCj4gYi9NZGVNb2R1bGVQa2cvSW5jbHVkZS9Qcm90b2NvbC9QZUNvZmZJbWFn ZUVtdWxhdG9yLmgNCj4gPj4gPiBAQCAtMCwwICsxLDEwMiBAQA0KPiA+PiA+ICsvKiogQGZpbGUN Cj4gPj4gPiArICBDb3B5cmlnaHQgKGMpIDIwMTgsIExpbmFybywgTHRkLiBBbGwgcmlnaHRzDQo+ ID4+IHJlc2VydmVkLjxCUj4NCj4gPj4gPiArDQo+ID4+ID4gKyAgVGhpcyBwcm9ncmFtIGFuZCB0 aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUNCj4gPj4gbGljZW5zZWQgYW5kIG1hZGUNCj4g Pj4gPiArIGF2YWlsYWJsZSAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQ0K PiBCU0QNCj4gPj4gTGljZW5zZSB3aGljaA0KPiA+PiA+ICsgYWNjb21wYW5pZXMgdGhpcyAgZGlz dHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dA0KPiBvZg0KPiA+PiB0aGUgbGljZW5zZSBtYXkgYmUN Cj4gPj4gPiArIGZvdW5kIGF0ICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLQ0K PiA+PiBsaWNlbnNlLnBocA0KPiA+PiA+ICsNCj4gPj4gPiArICBUSEUgUFJPR1JBTSBJUyBESVNU UklCVVRFRCBVTkRFUiBUSEUgQlNEDQo+IExJQ0VOU0UgT04NCj4gPj4gQU4gIkFTIElTIiBCQVNJ UywNCj4gPj4gPiArIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5Z DQo+IEtJTkQsDQo+ID4+IEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQuDQo+ID4+ID4gKw0KPiA+ PiA+ICsqKi8NCj4gPj4gPiArDQo+ID4+ID4gKyNpZm5kZWYgUEVDT0ZGX0lNQUdFX0VNVUxBVE9S X1BST1RPQ09MX0dVSURfSA0KPiA+PiA+ICsjZGVmaW5lIFBFQ09GRl9JTUFHRV9FTVVMQVRPUl9Q Uk9UT0NPTF9HVUlEX0gNCj4gPj4gPiArDQo+ID4+ID4gKyNkZWZpbmUgRURLSUlfUEVDT0ZGX0lN QUdFX0VNVUxBVE9SX1BST1RPQ09MX0dVSUQNCj4gXA0KPiA+PiA+ICsgIHsgMHg5NkY0NjE1Mywg MHg5N0E3LCAweDQ3OTMsIHsgMHhBQywgMHhDMSwNCj4gMHhGQSwNCj4gPj4gMHgxOSwgMHhCRiwg MHg3OCwNCj4gPj4gPiArMHhFQSwgMHg5NyB9IH0NCj4gPj4gPiArDQo+ID4+ID4gK3R5cGVkZWYg c3RydWN0DQo+IF9FREtJSV9QRUNPRkZfSU1BR0VfRU1VTEFUT1JfUFJPVE9DT0wNCj4gPj4gPiAr RURLSUlfUEVDT0ZGX0lNQUdFX0VNVUxBVE9SX1BST1RPQ09MOw0KPiA+PiA+ICsNCj4gPj4gPiAr LyoqDQo+ID4+ID4gKyAgQ2hlY2sgd2hldGhlciB0aGUgZW11bGF0b3Igc3VwcG9ydHMgZXhlY3V0 aW5nIGENCj4gPj4gY2VydGFpbiBQRS9DT0ZGIGltYWdlDQo+ID4+ID4gKw0KPiA+PiA+ICsgIEBw YXJhbVtpbl0gVGhpcyAgICAgICAgIFRoaXMgcG9pbnRlciBmb3INCj4gPj4gRURLSUlfUEVDT0ZG X0lNQUdFX0VNVUxBVE9SX1BST1RPQ09MDQo+ID4+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0dXJlICBAcGFyYW1baW5dDQo+IE1hY2hpbmVUeXBlICBUaGUNCj4gPj4gPiArIG1h Y2hpbmUgdHlwZSBmb3Igd2hpY2gNCj4gPj4gdGhlIGltYWdlIHdhcyBidWlsdA0KPiA+PiA+ICsg IEBwYXJhbVtpbl0gSW1hZ2VUeXBlICAgIFdoZXRoZXIgdGhlIGltYWdlIGlzIGFuDQo+ID4+IGFw cGxpY2F0aW9uLCBhIGJvb3QgdGltZQ0KPiA+PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg IGRyaXZlciBvciBhIHJ1bnRpbWUNCj4gZHJpdmVyLg0KPiA+PiA+ICsgIEBwYXJhbVtpbl0gRGV2 aWNlUGF0aCAgIFBhdGggdG8gZGV2aWNlIHdoZXJlDQo+IHRoZQ0KPiA+PiBpbWFnZSBvcmlnaW5h dGVkDQo+ID4+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGUuZy4sIGEgUENJIG9wdGlv bg0KPiBST00pDQo+ID4+ID4gKw0KPiA+PiA+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICAgIFRo ZSBpbWFnZSBpcyBzdXBwb3J0ZWQNCj4gYnkNCj4gPj4gdGhlIGVtdWxhdG9yDQo+ID4+ID4gKyAg QHJldHZhbCBGQUxTRSAgICAgICAgICAgVGhlIGltYWdlIGlzIG5vdA0KPiBzdXBwb3J0ZWQNCj4g Pj4gYnkgdGhlIGVtdWxhdG9yLg0KPiA+PiA+ICsqKi8NCj4gPj4gPiArdHlwZWRlZg0KPiA+PiA+ ICtCT09MRUFODQo+ID4+ID4gKyhFRklBUEkNCj4gPj4gKkVES0lJX1BFQ09GRl9JTUFHRV9FTVVM QVRPUl9JU19JTUFHRV9TVVBQT1JURUQpICgNCj4gPj4gPiArICBJTiAgRURLSUlfUEVDT0ZGX0lN QUdFX0VNVUxBVE9SX1BST1RPQ09MDQo+ICpUaGlzLA0KPiA+PiA+ICsgIElOICBVSU5UMTYNCj4g Pj4gTWFjaGluZVR5cGUsDQo+ID4+ID4gKyAgSU4gIFVJTlQxNg0KPiA+PiBJbWFnZVR5cGUsDQo+ ID4+ID4gKyAgSU4gIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTA0KPiA+PiAqRGV2aWNlUGF0aCAg IE9QVElPTkFMDQo+ID4+ID4gKyAgKTsNCj4gPj4gPiArDQo+ID4+ID4gKy8qKg0KPiA+PiA+ICsg IFJlZ2lzdGVyIGEgc3VwcG9ydGVkIFBFL0NPRkYgaW1hZ2Ugd2l0aCB0aGUNCj4gPj4gZW11bGF0 b3IuIEFmdGVyIHRoaXMgY2FsbA0KPiA+PiA+ICsgIGNvbXBsZXRlcyBzdWNjZXNzZnVsbHksIHRo ZSBQRS9DT0ZGIGltYWdlIG1heQ0KPiBiZQ0KPiA+PiBzdGFydGVkIGFzIHVzdWFsLA0KPiA+PiA+ ICthbmQNCj4gPj4gPiArICBpdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGVtdWxhdG9y DQo+ID4+IGltcGxlbWVudGF0aW9uIHRoYXQgYW55DQo+ID4+ID4gK2JyYW5jaA0KPiA+PiA+ICsg IGludG8gdGhlIGNvZGUgc2VjdGlvbiBvZiB0aGUgaW1hZ2UgKGluY2x1ZGluZw0KPiA+PiByZXR1 cm5zIGZyb20gZnVuY3Rpb25zDQo+ID4+ID4gK2NhbGxlZA0KPiA+PiA+ICsgIGZyb20gdGhlIGZv cmVpZ24gY29kZSkgaXMgZXhlY3V0ZWQgYXMgaWYgaXQNCj4gd2VyZQ0KPiA+PiBydW5uaW5nIG9u IHRoZQ0KPiA+PiA+ICttYWNoaW5lDQo+ID4+ID4gKyAgdHlwZSBpdCB3YXMgYnVpbHQgZm9yLg0K PiA+PiA+ICsNCj4gPj4gPiArICBAcGFyYW1baW5dICAgICAgVGhpcyAgICAgICAgICBUaGlzIHBv aW50ZXIgZm9yDQo+ID4+ID4gKw0KPiA+PiBFREtJSV9QRUNPRkZfSU1BR0VfRU1VTEFUT1JfUFJP VE9DT0wgc3RydWN0dXJlDQo+ID4+ID4gKyAgQHBhcmFtW2luXSAgICAgIEltYWdlQmFzZSAgICAg VGhlIGJhc2UgYWRkcmVzcw0KPiBpbg0KPiA+PiBtZW1vcnkgb2YgdGhlIFBFL0NPRkYgaW1hZ2UN Cj4gPj4gPiArICBAcGFyYW1baW5dICAgICAgSW1hZ2VTaXplICAgICBUaGUgc2l6ZSBpbg0KPiBt ZW1vcnkgb2YNCj4gPj4gdGhlIFBFL0NPRkYgaW1hZ2UNCj4gPj4gPiArICBAcGFyYW1baW4sb3V0 XSAgRW50cnlQb2ludCAgICBUaGUgZW50cnkgcG9pbnQNCj4gb2YNCj4gPj4gdGhlIFBFL0NPRkYg aW1hZ2UuIFBhc3NlZCBieQ0KPiA+PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJlZmVyZW5jZSBzbyB0aGF0DQo+IHRoZQ0KPiA+PiBlbXVsYXRvciBtYXkgbW9kaWZ5IGl0Lg0K PiA+PiA+ICsNCj4gPj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgaW1h Z2Ugd2FzDQo+ID4+IHJlZ2lzdGVyZWQgd2l0aCB0aGUgZW11bGF0b3IgYW5kDQo+ID4+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuIGJlIHN0YXJ0ZWQgYXMNCj4gPj4gdXN1 YWwuDQo+ID4+ID4gKyAgQHJldHZhbCBvdGhlciAgICAgICAgICAgICAgICAgVGhlIGltYWdlIGNv dWxkDQo+IG5vdA0KPiA+PiBiZSByZWdpc3RlcmVkLg0KPiA+PiA+ICsNCj4gPj4gPiArICBJZiB0 aGUgUEUvQ09GRiBtYWNoaW5lIHR5cGUgb3IgaW1hZ2UgdHlwZSBhcmUNCj4gbm90DQo+ID4+IHN1 cHBvcnRlZCBieSB0aGUNCj4gPj4gPiArZW11bGF0b3IsDQo+ID4+ID4gKyAgdGhlbiBBU1NFUlQo KS4NCj4gPj4gPiArKiovDQo+ID4+ID4gK3R5cGVkZWYNCj4gPj4gPiArRUZJX1NUQVRVUw0KPiA+ PiA+ICsoRUZJQVBJDQo+ICpFREtJSV9QRUNPRkZfSU1BR0VfRU1VTEFUT1JfUkVHSVNURVJfSU1B R0UpDQo+ID4+ICgNCj4gPj4gPiArICBJTiAgICAgIEVES0lJX1BFQ09GRl9JTUFHRV9FTVVMQVRP Ul9QUk9UT0NPTA0KPiA+PiAqVGhpcywNCj4gPj4gPiArICBJTiAgICAgIEVGSV9QSFlTSUNBTF9B RERSRVNTDQo+ID4+IEltYWdlQmFzZSwNCj4gPj4gPiArICBJTiAgICAgIFVJTlQ2NA0KPiA+PiBJ bWFnZVNpemUsDQo+ID4+ID4gKyAgSU4gIE9VVCBFRklfSU1BR0VfRU5UUllfUE9JTlQNCj4gPj4g KkVudHJ5UG9pbnQNCj4gPj4gPiArICApOw0KPiA+PiA+ICsNCj4gPj4gPiArLyoqDQo+ID4+ID4g KyAgVW5yZWdpc3RlciBhIFBFL0NPRkYgaW1hZ2UgdGhhdCBoYXMgYmVlbg0KPiByZWdpc3RlcmVk DQo+ID4+IHdpdGggdGhlIGVtdWxhdG9yLg0KPiA+PiA+ICsgIFRoaXMgc2hvdWxkIGJlIGRvbmUg YmVmb3JlIHRoZSBpbWFnZSBpcw0KPiB1bmxvYWRlZA0KPiA+PiBmcm9tIG1lbW9yeS4NCj4gPj4g PiArDQo+ID4+ID4gKyAgQHBhcmFtW2luXSBUaGlzICAgICAgICAgVGhpcyBwb2ludGVyIGZvcg0K PiA+PiBFREtJSV9QRUNPRkZfSU1BR0VfRU1VTEFUT1JfUFJPVE9DT0wNCj4gPj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUNCj4gPj4gPiArICBAcGFyYW1baW5dIEltYWdl QmFzZSAgICBUaGUgYmFzZSBhZGRyZXNzIGluDQo+IG1lbW9yeQ0KPiA+PiBvZiB0aGUgUEUvQ09G RiBpbWFnZQ0KPiA+PiA+ICsNCj4gPj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICBUaGUg aW1hZ2Ugd2FzDQo+IHVucmVnaXN0ZXJlZA0KPiA+PiB3aXRoIHRoZSBlbXVsYXRvci4NCj4gPj4g PiArICBAcmV0dmFsIG90aGVyICAgICAgICAgICBJbWFnZSBjb3VsZCBub3QgYmUNCj4gPj4gdW5s b2FkZWQuDQo+ID4+ID4gKyoqLw0KPiA+PiA+ICt0eXBlZGVmDQo+ID4+ID4gK0VGSV9TVEFUVVMN Cj4gPj4gPiArKEVGSUFQSQ0KPiA+PiAqRURLSUlfUEVDT0ZGX0lNQUdFX0VNVUxBVE9SX1VOUkVH SVNURVJfSU1BR0UpICgNCj4gPj4gPiArICBJTiAgRURLSUlfUEVDT0ZGX0lNQUdFX0VNVUxBVE9S X1BST1RPQ09MDQo+ICpUaGlzLA0KPiA+PiA+ICsgIElOICBFRklfUEhZU0lDQUxfQUREUkVTUw0K PiA+PiBJbWFnZUJhc2UNCj4gPj4gPiArICApOw0KPiA+PiA+ICsNCj4gPj4gPiArdHlwZWRlZiBz dHJ1Y3QNCj4gX0VES0lJX1BFQ09GRl9JTUFHRV9FTVVMQVRPUl9QUk9UT0NPTA0KPiA+PiB7DQo+ ID4+ID4gKyAgRURLSUlfUEVDT0ZGX0lNQUdFX0VNVUxBVE9SX0lTX0lNQUdFX1NVUFBPUlRFRA0K PiA+PiBJc0ltYWdlU3VwcG9ydGVkOw0KPiA+PiA+ICsgIEVES0lJX1BFQ09GRl9JTUFHRV9FTVVM QVRPUl9SRUdJU1RFUl9JTUFHRQ0KPiA+PiBSZWdpc3RlckltYWdlOw0KPiA+PiA+ICsgIEVES0lJ X1BFQ09GRl9JTUFHRV9FTVVMQVRPUl9VTlJFR0lTVEVSX0lNQUdFDQo+ID4+IFVucmVnaXN0ZXJJ bWFnZTsNCj4gPj4gPiArfSBFREtJSV9QRUNPRkZfSU1BR0VfRU1VTEFUT1JfUFJPVE9DT0w7DQo+ ID4+ID4gKw0KPiA+PiA+ICtleHRlcm4gRUZJX0dVSUQNCj4gPj4gZ0Vka2lpUGVDb2ZmSW1hZ2VF bXVsYXRvclByb3RvY29sR3VpZDsNCj4gPj4gPiArDQo+ID4+ID4gKyNlbmRpZg0KPiA+PiA+IGRp ZmYgLS1naXQgYS9NZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KPiA+PiBiL01kZU1vZHVs ZVBrZy9NZGVNb2R1bGVQa2cuZGVjIGluZGV4DQo+ID4+IDZhNmQ5NjYwZWRjMi4uYmUzMDczMjlm OTAxIDEwMDY0NA0KPiA+PiA+IC0tLSBhL01kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZGVjDQo+ ID4+ID4gKysrIGIvTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5kZWMNCj4gPj4gPiBAQCAtNjE3 LDYgKzYxNywxMCBAQA0KPiA+PiA+DQo+ID4+ID4gICAgIyMgSW5jbHVkZS9Qcm90b2NvbC9BdGFB dGFwaVBvbGljeS5oDQo+ID4+ID4gICAgZ0Vka2lpQXRhQXRhcGlQb2xpY3lQcm90b2NvbEd1aWQg PSB7DQo+IDB4ZTU5Y2Q3NjksDQo+ID4+IDB4NTA4MywgMHg0ZjI2LHsgMHg5MCwgMHg5NCwgMHg2 YywgMHg5MSwgMHg5ZiwgMHg5MSwNCj4gMHg2YywgMHg0ZSB9IH0NCj4gPj4gPiArDQo+ID4+ID4g KyAgIyMgSW5jbHVkZS9Qcm90b2NvbC9QZUNvZmZJbWFnZUVtdWxhdG9yLmgNCj4gPj4gPiArICBn RWRraWlQZUNvZmZJbWFnZUVtdWxhdG9yUHJvdG9jb2xHdWlkID0gew0KPiA+PiAweDk2ZjQ2MTUz LCAweDk3YTcsIDB4NDc5MywNCj4gPj4gPiArIHsgMHhhYywgMHhjMSwgMHhmYSwgMHgxOSwgMHhi ZiwgMHg3OCwgMHhlYSwgMHg5Nw0KPiB9IH0NCj4gPj4gPiArDQo+ID4+ID4gICMNCj4gPj4gPiAg IyBbRXJyb3IuZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkXQ0KPiA+PiA+ICAjICAgMHg4 MDAwMDAwMSB8IEludmFsaWQgdmFsdWUgcHJvdmlkZWQuDQo+ID4+ID4gLS0NCj4gPj4gPiAyLjE3 LjENCj4gPj4gPg0K