From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by mx.groups.io with SMTP id smtpd.web09.222.1581640425812015685 for ; Thu, 13 Feb 2020 16:33:46 -0800 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 134.134.136.65, mailfrom: siyuan.fu@intel.com) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 13 Feb 2020 16:33:45 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.70,438,1574150400"; d="scan'208";a="313908552" Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by orsmga001.jf.intel.com with ESMTP; 13 Feb 2020 16:33:44 -0800 Received: from fmsmsx124.amr.corp.intel.com (10.18.125.39) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 13 Feb 2020 16:33:44 -0800 Received: from shsmsx154.ccr.corp.intel.com (10.239.6.54) by fmsmsx124.amr.corp.intel.com (10.18.125.39) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 13 Feb 2020 16:33:44 -0800 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.196]) by SHSMSX154.ccr.corp.intel.com ([169.254.7.141]) with mapi id 14.03.0439.000; Fri, 14 Feb 2020 08:33:40 +0800 From: "Siyuan, Fu" To: "Kinney, Michael D" , "devel@edk2.groups.io" CC: "Ni, Ray" , "Chaganty, Rangasai V" Subject: Re: [edk2-devel] [PATCH v3] IntelSiliconPkg: FIT based shadow microcode PPI support. Thread-Topic: [edk2-devel] [PATCH v3] IntelSiliconPkg: FIT based shadow microcode PPI support. Thread-Index: AQHV4T45Bh6YCeSru0+aVr0AkZ8zGqgYRB6ggAGV+WA= Date: Fri, 14 Feb 2020 00:33:40 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ctpclassification: CTP_NT x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMWE2ODllNzUtM2Y5OC00NGRkLWFlMzEtYzQ1MmRlYTdhYTZkIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiYkRrcWlEQ1NhZ0JxZis3Uk1CXC8yWEZSeHRsOXc4c1haejdLSmdWNjUyTGZRMHNpYTQ2aWJodGdTcVRUSUtnZloifQ== dlp-product: dlpe-windows dlp-version: 11.2.0.6 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Return-Path: siyuan.fu@intel.com Content-Language: en-US Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 SGksIE1pa2UNCg0KVGhhbmtzIGZvciB5b3VyIGNvbW1lbnRzLCBJIHdpbGwgdXBkYXRlIHBhdGNo IGFjY29yZGluZ2x5IGFuZCBzZW5kIGEgVjQgZm9yIHRoaXMuDQoNCkJlc3QgUmVnYXJkcw0KU2l5 dWFuIA0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEtpbm5leSwgTWlj aGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4NCj4gU2VudDogMjAyMMTqMtTCMTPI 1SA4OjU4DQo+IFRvOiBkZXZlbEBlZGsyLmdyb3Vwcy5pbzsgRnUsIFNpeXVhbiA8c2l5dWFuLmZ1 QGludGVsLmNvbT47IEtpbm5leSwgTWljaGFlbA0KPiBEIDxtaWNoYWVsLmQua2lubmV5QGludGVs LmNvbT4NCj4gQ2M6IE5pLCBSYXkgPHJheS5uaUBpbnRlbC5jb20+OyBDaGFnYW50eSwgUmFuZ2Fz YWkgVg0KPiA8cmFuZ2FzYWkudi5jaGFnYW50eUBpbnRlbC5jb20+DQo+IFN1YmplY3Q6IFJFOiBb ZWRrMi1kZXZlbF0gW1BBVENIIHYzXSBJbnRlbFNpbGljb25Qa2c6IEZJVCBiYXNlZCBzaGFkb3cN Cj4gbWljcm9jb2RlIFBQSSBzdXBwb3J0Lg0KPiANCj4gU2l5dWFuLA0KPiANCj4gSW50ZWxTaWxp Y29uUGtnL0ZlYXR1cmUvU2hhZG93TWljcm9jb2RlOg0KPiANCj4gRm9yIHNpbXBsZSBtb2R1bGVz IHRoYXQgb25seSBoYXZlIGEgc2luZ2xlIC5jIGZpbGUsIHRoZXJlDQo+IElzIG5vdCBuZWVkIHRv IHNwbGl0IG91dCBhIC5oIGZpbGUuICBQbGVhc2UgbWVyZ2UgdGhlIC5oDQo+IEZpbGUgY29udGVu dCBpbnRvIHRoZSAuYyBmaWxlIGFuZCBkZWxldGUgdGhlIC5oIGZpbGUuDQo+IA0KPiBNb3JlIGNv bW1lbnRzIGlubGluZSBiZWxvdy4NCj4gDQo+IE1pa2UNCj4gDQo+ID4gLS0tLS1PcmlnaW5hbCBN ZXNzYWdlLS0tLS0NCj4gPiBGcm9tOiBkZXZlbEBlZGsyLmdyb3Vwcy5pbyA8ZGV2ZWxAZWRrMi5n cm91cHMuaW8+IE9uDQo+ID4gQmVoYWxmIE9mIFNpeXVhbiwgRnUNCj4gPiBTZW50OiBUdWVzZGF5 LCBGZWJydWFyeSAxMSwgMjAyMCA0OjQ4IFBNDQo+ID4gVG86IGRldmVsQGVkazIuZ3JvdXBzLmlv DQo+ID4gQ2M6IE5pLCBSYXkgPHJheS5uaUBpbnRlbC5jb20+OyBDaGFnYW50eSwgUmFuZ2FzYWkg Vg0KPiA+IDxyYW5nYXNhaS52LmNoYWdhbnR5QGludGVsLmNvbT4NCj4gPiBTdWJqZWN0OiBbZWRr Mi1kZXZlbF0gW1BBVENIIHYzXSBJbnRlbFNpbGljb25Qa2c6IEZJVA0KPiA+IGJhc2VkIHNoYWRv dyBtaWNyb2NvZGUgUFBJIHN1cHBvcnQuDQo+ID4NCj4gPiBWMyBDaGFuZ2VzOg0KPiA+IFJlbW92 ZSB0aGUgZmVhdHVyZSBQQ0QgUGNkQ3B1U2hhZG93TWljcm9jb2RlQnlGaXQNCj4gPiBiZWNhdXNl IHRoZSB3aG9sZSBGSVQgbWljcm9jb2RlIHNoYWRvdyBjb2RlIGlzIG1vdmVkIHRvDQo+ID4gdGhp cyBQRUlNIHNvIHBsYXRmb3JtIGNvdWxkIGRpc2FibGUgdGhpcyBmZWF0dXJlIGJ5IG5vdA0KPiA+ IGluY2x1ZGUgUEVJTSBub3cuDQo+ID4NCj4gPiBWMiBDaGFuZ2VzOg0KPiA+IFJlbmFtZSBFREtJ SV9QRUlfQ1BVX01JQ1JPQ09ERV9JRCB0bw0KPiA+IEVES0lJX1BFSV9NSUNST0NPREVfQ1BVX0lE Lg0KPiA+DQo+ID4gVGhpcyBwYXRjaCBhZGRzIGEgcGxhdGZvcm0gUEVJTSBmb3IgRklUIGJhc2Vk IHNoYWRvdw0KPiA+IG1pY3JvY29kZSBQUEkgc3VwcG9ydC4gQSBkZXRhaWxlZCBkZXNpZ24gZG9j IGNhbiBiZQ0KPiA+IGZvdW5kIGhlcmU6DQo+ID4gaHR0cHM6Ly9lZGsyLmdyb3Vwcy5pby9nL2Rl dmVsL2ZpbGVzL0Rlc2lnbnMvMjAyMC8wMjE0Lw0KPiA+IFN1cHBvcnQlMjANCj4gPiB0aGUlMjAy bmQlMjBNaWNyb2NvZGUlMjBGViUyMEZsYXNoJTIwUmVnaW9uLnBkZg0KPiA+DQo+ID4gVEVTVDog VGVzdGVkIG9uIEZJVCBlbmFibGVkIHBsYXRmb3JtLg0KPiA+IEJaOg0KPiA+IGh0dHBzOi8vdGlh bm9jb3JlLmFjZ211bHRpbWVkaWEuY29tL3Nob3dfYnVnLmNnaT9pZD0yNDQNCj4gPiA5DQo+ID4N Cj4gPiBDYzogUmF5IE5pIDxyYXkubmlAaW50ZWwuY29tPg0KPiA+IENjOiBSYW5nYXNhaSBWIENo YWdhbnR5IDxyYW5nYXNhaS52LmNoYWdhbnR5QGludGVsLmNvbT4NCj4gPiBTaWduZWQtb2ZmLWJ5 OiBTaXl1YW4gRnUgPHNpeXVhbi5mdUBpbnRlbC5jb20+DQo+ID4gLS0tDQo+ID4gIC4uLi9TaGFk b3dNaWNyb2NvZGUvU2hhZG93TWljcm9jb2RlUGVpLmMgICAgICB8IDM4Nw0KPiA+ICsrKysrKysr KysrKysrKysrKw0KPiA+ICAuLi4vU2hhZG93TWljcm9jb2RlL1NoYWRvd01pY3JvY29kZVBlaS5o ICAgICAgfCAgNjINCj4gPiArKysNCj4gPiAgLi4uL1NoYWRvd01pY3JvY29kZS9TaGFkb3dNaWNy b2NvZGVQZWkuaW5mICAgIHwgIDQ0ICsrDQo+ID4gIC4uLi9JbmNsdWRlL0d1aWQvTWljcm9jb2Rl U2hhZG93SW5mb0hvYi5oICAgICB8ICA1Nw0KPiA+ICsrKw0KPiA+ICAuLi4vSW50ZWwvSW50ZWxT aWxpY29uUGtnL0ludGVsU2lsaWNvblBrZy5kZWMgfCAgIDYgKw0KPiA+ICAuLi4vSW50ZWwvSW50 ZWxTaWxpY29uUGtnL0ludGVsU2lsaWNvblBrZy5kc2MgfCAgIDMgKy0NCj4gPiAgNiBmaWxlcyBj aGFuZ2VkLCA1NTggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQ0KPiA+IGNyZWF0ZSBtb2Rl IDEwMDY0NA0KPiA+IFNpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUvU2hhZG93 TWljcm9jb2RlL1MNCj4gPiBoYWRvd01pY3JvY29kZVBlaS5jDQo+ID4gIGNyZWF0ZSBtb2RlIDEw MDY0NA0KPiA+IFNpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUvU2hhZG93TWlj cm9jb2RlL1MNCj4gPiBoYWRvd01pY3JvY29kZVBlaS5oDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0 NA0KPiA+IFNpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUvU2hhZG93TWljcm9j b2RlL1MNCj4gPiBoYWRvd01pY3JvY29kZVBlaS5pbmYNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 DQo+ID4gU2lsaWNvbi9JbnRlbC9JbnRlbFNpbGljb25Qa2cvSW5jbHVkZS9HdWlkL01pY3JvY29k ZVNoYQ0KPiA+IGRvd0luZm9Ib2IuaA0KPiA+DQo+ID4gZGlmZiAtLWdpdA0KPiA+IGEvU2lsaWNv bi9JbnRlbC9JbnRlbFNpbGljb25Qa2cvRmVhdHVyZS9TaGFkb3dNaWNyb2NvZGUNCj4gPiAvU2hh ZG93TWljcm9jb2RlUGVpLmMNCj4gPiBiL1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0Zl YXR1cmUvU2hhZG93TWljcm9jb2RlDQo+ID4gL1NoYWRvd01pY3JvY29kZVBlaS5jDQo+ID4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwLi5jNzU0NTI0ZjQxDQo+ID4g LS0tIC9kZXYvbnVsbA0KPiA+ICsrKw0KPiA+IGIvU2lsaWNvbi9JbnRlbC9JbnRlbFNpbGljb25Q a2cvRmVhdHVyZS9TaGFkb3dNaWNyb2NvZGUNCj4gPiAvU2hhZG93TWljcm9jDQo+ID4gKysrIG9k ZVBlaS5jDQo+ID4gQEAgLTAsMCArMSwzODcgQEANCj4gPiArLyoqIEBmaWxlDQo+ID4gKyAgU291 cmNlIGNvZGUgZmlsZSBmb3IgUGxhdGZvcm0gSW5pdCBQRUkgbW9kdWxlDQo+IA0KPiBUaGlzIGRl c2NyaXB0aW9uIGRvZXMgbm90IG1hdGNoIHRoZSBjb250ZW50DQo+IA0KPiA+ICsNCj4gPiArQ29w eXJpZ2h0IChjKSAyMDE3IC0gMjAxOSwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbA0KPiA+IHJpZ2h0 cyByZXNlcnZlZC48QlI+DQo+ID4gK1NQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1 c2UtUGF0ZW50DQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArDQo+ID4gKyNpbmNsdWRlICJTaGFkb3dN aWNyb2NvZGVQZWkuaCINCj4gPiArDQo+ID4gK0VES0lJX1BFSV9TSEFET1dfTUlDUk9DT0RFX1BQ SQ0KPiA+IG1QZWlTaGFkb3dNaWNyb2NvZGVQcGkgPSB7DQo+ID4gKyAgU2hhZG93TWljcm9jb2Rl DQo+ID4gK307DQo+ID4gKw0KPiA+ICsNCj4gPiArRUZJX1BFSV9QUElfREVTQ1JJUFRPUg0KPiA+ IG1QZWlTaGFkb3dNaWNyb2NvZGVQcGlMaXN0W10gPSB7DQo+ID4gKyAgew0KPiA+ICsgICAgRUZJ X1BFSV9QUElfREVTQ1JJUFRPUl9QUEkgfA0KPiA+IEVGSV9QRUlfUFBJX0RFU0NSSVBUT1JfVEVS TUlOQVRFX0xJU1QsDQo+ID4gKyAgICAmZ0Vka2lpUGVpU2hhZG93TWljcm9jb2RlUHBpR3VpZCwN Cj4gPiArICAgICZtUGVpU2hhZG93TWljcm9jb2RlUHBpDQo+ID4gKyAgfQ0KPiA+ICt9Ow0KPiA+ ICsNCj4gPiArLyoqDQo+ID4gKyAgRGV0ZXJtaW5lIGlmIGEgbWljcm9jb2RlIHBhdGNoIG1hdGNo cyB0aGUgc3BlY2lmaWMNCj4gPiBwcm9jZXNzb3Igc2lnbmF0dXJlIGFuZCBmbGFnLg0KPiA+ICsN Cj4gPiArICBAcGFyYW1baW5dICBDcHVJZENvdW50ICAgICAgICAgICAgTnVtYmVyIG9mIGVsZW1l bnRzDQo+ID4gaW4gTWljcm9jb2RlQ3B1SWQgYXJyYXkuDQo+ID4gKyAgQHBhcmFtW2luXSAgTWlj cm9jb2RlQ3B1SWQgICAgICAgIEEgcG9pbnRlciB0byBhbg0KPiA+IGFycmF5IG9mIEVES0lJX1BF SV9NSUNST0NPREVfQ1BVX0lEDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdHVyZXMuDQo+ID4gKyAgQHBhcmFtW2luXSAgUHJvY2Vzc29yU2lnbmF0dXJlICAg IFRoZSBwcm9jZXNzb3INCj4gPiBzaWduYXR1cmUgZmllbGQgdmFsdWUNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkIGJ5IGENCj4gPiBtaWNyb2NvZGUg cGF0Y2guDQo+ID4gKyAgQHBhcmFtW2luXSAgUHJvY2Vzc29yRmxhZ3MgICAgICAgIFRoZSBwcmNl c3NvciBmbGFncw0KPiA+IGZpZWxkIHZhbHVlIHN1cHBvcnRlZCBieQ0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBhIG1pY3JvY29kZSBwYXRjaC4NCj4gPiArDQo+ID4g KyAgQHJldHZhbCBUUlVFICAgICBUaGUgc3BlY2lmaWVkIG1pY3JvY29kZSBwYXRjaCB3aWxsDQo+ ID4gYmUgbG9hZGVkLg0KPiA+ICsgIEByZXR2YWwgRkFMU0UgICAgVGhlIHNwZWNpZmllZCBtaWNy b2NvZGUgcGF0Y2ggd2lsbA0KPiA+IG5vdCBiZSBsb2FkZWQuDQo+ID4gKyoqLw0KPiA+ICtCT09M RUFODQo+ID4gK0lzUHJvY2Vzc29yTWF0Y2hlZE1pY3JvY29kZVBhdGNoICgNCj4gPiArICBJTiAg VUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICBDcHVJZENvdW50LA0KPiA+ICsgIElOICBF REtJSV9QRUlfTUlDUk9DT0RFX0NQVV9JRCAgICAgICpNaWNyb2NvZGVDcHVJZCwNCj4gPiArICBJ TiBVSU5UMzINCj4gPiBQcm9jZXNzb3JTaWduYXR1cmUsDQo+ID4gKyAgSU4gVUlOVDMyICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHJvY2Vzc29yRmxhZ3MNCj4gPiArICApDQo+ID4gK3sNCj4g PiArICBVSU5UTiAgICAgICAgICBJbmRleDsNCj4gPiArDQo+ID4gKyAgZm9yIChJbmRleCA9IDA7 IEluZGV4IDwgQ3B1SWRDb3VudDsgSW5kZXgrKykgew0KPiA+ICsgICAgaWYgKChQcm9jZXNzb3JT aWduYXR1cmUgPT0NCj4gPiBNaWNyb2NvZGVDcHVJZFtJbmRleF0uUHJvY2Vzc29yU2lnbmF0dXJl KSAmJg0KPiA+ICsgICAgICAgIChQcm9jZXNzb3JGbGFncyAmICgxIDw8DQo+ID4gTWljcm9jb2Rl Q3B1SWRbSW5kZXhdLlBsYXRmb3JtSWQpKSAhPSAwKSB7DQo+ID4gKyAgICAgIHJldHVybiBUUlVF Ow0KPiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgcmV0dXJuIEZBTFNFOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBDaGVjayB0aGUgJ1Byb2Nlc3NvclNpZ25hdHVy ZScgYW5kICdQcm9jZXNzb3JGbGFncycNCj4gPiBvZiB0aGUgbWljcm9jb2RlDQo+ID4gKyAgcGF0 Y2ggaGVhZGVyIHdpdGggdGhlIENQVUlEIGFuZCBQbGF0Zm9ybUlEIG9mIHRoZQ0KPiA+IHByb2Nl c3NvcnMgd2l0aGluDQo+ID4gKyAgc3lzdGVtIHRvIGRlY2lkZSBpZiBpdCB3aWxsIGJlIGNvcGll ZCBpbnRvIG1lbW9yeS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgQ3B1SWRDb3VudCAgICAg ICAgICAgIE51bWJlciBvZiBlbGVtZW50cw0KPiA+IGluIE1pY3JvY29kZUNwdUlkIGFycmF5Lg0K PiA+ICsgIEBwYXJhbVtpbl0gIE1pY3JvY29kZUNwdUlkICAgICAgICBBIHBvaW50ZXIgdG8gYW4N Cj4gPiBhcnJheSBvZiBFREtJSV9QRUlfTUlDUk9DT0RFX0NQVV9JRA0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVzLg0KPiA+ICsgIEBwYXJhbVtpbl0g IE1pY3JvY29kZUVudHJ5UG9pbnQgICBUaGUgcG9pbnRlciB0byB0aGUNCj4gPiBtaWNyb2NvZGUg cGF0Y2ggaGVhZGVyLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIFRSVUUgICAgIFRoZSBzcGVjaWZp ZWQgbWljcm9jb2RlIHBhdGNoIG5lZWQNCj4gPiB0byBiZSBsb2FkZWQuDQo+ID4gKyAgQHJldHZh bCBGQUxTRSAgICBUaGUgc3BlY2lmaWVkIG1pY3JvY29kZSBwYXRjaA0KPiA+IGRvc2VuJ3QgbmVl ZCB0byBiZSBsb2FkZWQuDQo+ID4gKyoqLw0KPiA+ICtCT09MRUFODQo+ID4gK0lzTWljcm9jb2Rl UGF0Y2hOZWVkTG9hZCAoDQo+ID4gKyAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAg IENwdUlkQ291bnQsDQo+ID4gKyAgSU4gIEVES0lJX1BFSV9NSUNST0NPREVfQ1BVX0lEICAgICpN aWNyb2NvZGVDcHVJZCwNCj4gPiArICBDUFVfTUlDUk9DT0RFX0hFQURFUg0KPiA+ICpNaWNyb2Nv ZGVFbnRyeVBvaW50DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgQk9PTEVBTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTmVlZExvYWQ7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRGF0YVNpemU7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVG90YWxTaXplOw0KPiA+ICsgIENQVV9NSUNST0NPREVfRVhU RU5ERURfVEFCTEVfSEVBREVSDQo+ID4gKkV4dGVuZGVkVGFibGVIZWFkZXI7DQo+ID4gKyAgVUlO VDMyDQo+ID4gRXh0ZW5kZWRUYWJsZUNvdW50Ow0KPiA+ICsgIENQVV9NSUNST0NPREVfRVhURU5E RURfVEFCTEUNCj4gPiAqRXh0ZW5kZWRUYWJsZTsNCj4gPiArICBVSU5UTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBD aGVjayB0aGUgJ1Byb2Nlc3NvclNpZ25hdHVyZScgYW5kDQo+ID4gJ1Byb2Nlc3NvckZsYWdzJyBp biBtaWNyb2NvZGUgcGF0Y2ggaGVhZGVyLg0KPiA+ICsgIC8vDQo+ID4gKyAgTmVlZExvYWQgPSBJ c1Byb2Nlc3Nvck1hdGNoZWRNaWNyb2NvZGVQYXRjaCAoDQo+ID4gKyAgICAgICAgICAgICAgIENw dUlkQ291bnQsDQo+ID4gKyAgICAgICAgICAgICAgIE1pY3JvY29kZUNwdUlkLA0KPiA+ICsgICAg ICAgICAgICAgICBNaWNyb2NvZGVFbnRyeVBvaW50LQ0KPiA+ID5Qcm9jZXNzb3JTaWduYXR1cmUu VWludDMyLA0KPiA+ICsgICAgICAgICAgICAgICBNaWNyb2NvZGVFbnRyeVBvaW50LT5Qcm9jZXNz b3JGbGFncw0KPiA+ICsgICAgICAgICAgICAgICApOw0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsg IC8vIElmIHRoZSBFeHRlbmRlZCBTaWduYXR1cmUgVGFibGUgZXhpc3RzLCBjaGVjayBpZg0KPiA+ IHRoZSBwcm9jZXNzb3IgaXMNCj4gPiArIGluIHRoZSAgLy8gc3VwcG9ydCBsaXN0ICAvLyAgRGF0 YVNpemUgID0NCj4gPiArIE1pY3JvY29kZUVudHJ5UG9pbnQtPkRhdGFTaXplOyAgVG90YWxTaXpl ID0gKERhdGFTaXplDQo+ID4gPT0gMCkgPyAyMDQ4IDoNCj4gPiArIE1pY3JvY29kZUVudHJ5UG9p bnQtPlRvdGFsU2l6ZTsgIGlmICgoIU5lZWRMb2FkKSAmJg0KPiA+IChEYXRhU2l6ZSAhPSAwKSAm Jg0KPiA+ICsgICAgICAoVG90YWxTaXplIC0gRGF0YVNpemUgPiBzaXplb2YNCj4gPiAoQ1BVX01J Q1JPQ09ERV9IRUFERVIpICsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZW9mDQo+ID4gKENQVV9NSUNST0NPREVfRVhURU5ERURfVEFCTEVfSEVBREVSKSkpIHsNCj4gPiAr ICAgIEV4dGVuZGVkVGFibGVIZWFkZXIgPQ0KPiA+IChDUFVfTUlDUk9DT0RFX0VYVEVOREVEX1RB QkxFX0hFQURFUiAqKSAoKFVJTlQ4ICopDQo+ID4gKE1pY3JvY29kZUVudHJ5UG9pbnQpDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIERhdGFTaXplICsgc2l6ZW9mDQo+ID4gKENQ VV9NSUNST0NPREVfSEVBREVSKSk7DQo+ID4gKyAgICBFeHRlbmRlZFRhYmxlQ291bnQgID0gRXh0 ZW5kZWRUYWJsZUhlYWRlci0NCj4gPiA+RXh0ZW5kZWRTaWduYXR1cmVDb3VudDsNCj4gPiArICAg IEV4dGVuZGVkVGFibGUgICAgICAgPQ0KPiA+IChDUFVfTUlDUk9DT0RFX0VYVEVOREVEX1RBQkxF ICopIChFeHRlbmRlZFRhYmxlSGVhZGVyICsNCj4gPiAxKTsNCj4gPiArDQo+ID4gKyAgICBmb3Ig KEluZGV4ID0gMDsgSW5kZXggPCBFeHRlbmRlZFRhYmxlQ291bnQ7IEluZGV4DQo+ID4gKyspIHsN Cj4gPiArICAgICAgLy8NCj4gPiArICAgICAgLy8gQ2hlY2sgdGhlICdQcm9jZXNzb3JTaWduYXR1 cmUnIGFuZA0KPiA+ICdQcm9jZXNzb3JGbGFnJyBvZiB0aGUgRXh0ZW5kZWQNCj4gPiArICAgICAg Ly8gU2lnbmF0dXJlIFRhYmxlIGVudHJ5IHdpdGggdGhlIENQVUlEIGFuZA0KPiA+IFBsYXRmb3Jt SUQgb2YgdGhlIHByb2Nlc3NvcnMNCj4gPiArICAgICAgLy8gd2l0aGluIHN5c3RlbSB0byBkZWNp ZGUgaWYgaXQgd2lsbCBiZSBjb3BpZWQNCj4gPiBpbnRvIG1lbW9yeQ0KPiA+ICsgICAgICAvLw0K PiA+ICsgICAgICBOZWVkTG9hZCA9IElzUHJvY2Vzc29yTWF0Y2hlZE1pY3JvY29kZVBhdGNoICgN Cj4gPiArICAgICAgICAgICAgICAgICAgIENwdUlkQ291bnQsDQo+ID4gKyAgICAgICAgICAgICAg ICAgICBNaWNyb2NvZGVDcHVJZCwNCj4gPiArICAgICAgICAgICAgICAgICAgIEV4dGVuZGVkVGFi bGUtDQo+ID4gPlByb2Nlc3NvclNpZ25hdHVyZS5VaW50MzIsDQo+ID4gKyAgICAgICAgICAgICAg ICAgICBFeHRlbmRlZFRhYmxlLT5Qcm9jZXNzb3JGbGFnDQo+ID4gKyAgICAgICAgICAgICAgICAg ICApOw0KPiA+ICsgICAgICBpZiAoTmVlZExvYWQpIHsNCj4gPiArICAgICAgICBicmVhazsNCj4g PiArICAgICAgfQ0KPiA+ICsgICAgICBFeHRlbmRlZFRhYmxlICsrOw0KPiA+ICsgICAgfQ0KPiA+ ICsgIH0NCj4gPiArDQo+ID4gKyAgcmV0dXJuIE5lZWRMb2FkOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICsvKioNCj4gPiArICBBY3R1YWwgd29ya2VyIGZ1bmN0aW9uIHRoYXQgc2hhZG93cyB0aGUgcmVx dWlyZWQNCj4gPiBtaWNyb2NvZGUgcGF0Y2hlcyBpbnRvIG1lbW9yeS4NCj4gPiArDQo+ID4gKyAg QHBhcmFtW2luXSAgICAgICBQYXRjaGVzICAgICAgICAgIFRoZSBwb2ludGVyIHRvIGFuDQo+ID4g YXJyYXkgb2YgaW5mb3JtYXRpb24gb24NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGhlIG1pY3JvY29kZQ0KPiA+IHBhdGNoZXMgdGhhdCB3aWxsIGJlIGxvYWRlZA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRvIG1lbW9yeS4NCj4g PiArICBAcGFyYW1baW5dICAgICAgIFBhdGNoQ291bnQgICAgICAgVGhlIG51bWJlciBvZg0KPiA+ IG1pY3JvY29kZSBwYXRjaGVzIHRoYXQgd2lsbA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBiZSBsb2FkZWQgaW50bw0KPiA+IG1lbW9yeS4NCj4gPiArICBAcGFyYW1b aW5dICAgICAgIFRvdGFsTG9hZFNpemUgICAgVGhlIHRvdGFsIHNpemUgb2YNCj4gPiBhbGwgdGhl IG1pY3JvY29kZSBwYXRjaGVzDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRvIGJlIGxvYWRlZC4NCj4gPiArICBAcGFyYW1bb3V0XSBCdWZmZXJTaXplICAgICAgICAg ICAgUG9pbnRlciB0byByZWNlaXZlDQo+ID4gdGhlIHRvdGFsIHNpemUgb2YgQnVmZmVyLg0KPiA+ ICsgIEBwYXJhbVtvdXRdIEJ1ZmZlciAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHJlY2VpdmUN Cj4gPiBhZGRyZXNzIG9mIGFsbG9jYXRlZCBtZW1vcnkNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgd2l0aCBtaWNyb2NvZGUNCj4gPiBwYXRjaGVzIGRhdGEgaW4gaXQu DQo+ID4gKyoqLw0KPiA+ICtWT0lEDQo+ID4gK1NoYWRvd01pY3JvY29kZVBhdGNoV29ya2VyICgN Cj4gPiArICBJTiAgTUlDUk9DT0RFX1BBVENIX0lORk8gICAgICAgKlBhdGNoZXMsDQo+ID4gKyAg SU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgIFBhdGNoQ291bnQsDQo+ID4gKyAgSU4gIFVJ TlROICAgICAgICAgICAgICAgICAgICAgIFRvdGFsTG9hZFNpemUsDQo+ID4gKyAgT1VUIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICpCdWZmZXJTaXplLA0KPiA+ICsgIE9VVCBWT0lEICAgICAg ICAgICAgICAgICAgICAgICAqKkJ1ZmZlcg0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ID4gKyAgVk9JRA0KPiA+ICpN aWNyb2NvZGVQYXRjaEluUmFtOw0KPiA+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKldhbGtlcjsNCj4gPiArICBFREtJSV9NSUNST0NPREVfU0hBRE9XX0lORk9fSE9CDQo+ ID4gKk1pY3JvY29kZVNoYWRvd0hvYjsNCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEhvYkRhdGFMZW5ndGg7DQo+ID4gKyAgVUlOVDY0DQo+ID4gKk1pY3JvY29kZUFk ZHJJbk1lbW9yeTsNCj4gDQo+IERvIG5vdCBhYmJyZXZpYXRpb24gIkFkZHIiLiAgRXhwYW5kIHRv ICJBZGRyZXNzIi4NCj4gU2FtZSBjb21tZW50IGFwcGxpZXMgdG8gZW50aXJlIHBhdGNoLg0KPiAN Cj4gPiArICBVSU5UNjQNCj4gPiAqTWljcm9jb2RlQWRkckluRmxhc2g7DQo+ID4gKw0KPiA+ICsg IEFTU0VSVCAoKFBhdGNoZXMgIT0gTlVMTCkgJiYgKFBhdGNoQ291bnQgIT0gMCkpOw0KPiA+ICsN Cj4gPiArICAvLw0KPiA+ICsgIC8vIEluaXQgbWljcm9jb2RlIHNoYWRvdyBpbmZvIEhPQiBjb250 ZW50Lg0KPiA+ICsgIC8vDQo+ID4gKyAgSG9iRGF0YUxlbmd0aCA9IHNpemVvZg0KPiA+IChFREtJ SV9NSUNST0NPREVfU0hBRE9XX0lORk9fSE9CKSArDQo+ID4gKyAgICAgICAgICAgICAgICAgIHNp emVvZiAoVUlOVDY0KSAqIFBhdGNoQ291bnQgKiAyOw0KPiA+IE1pY3JvY29kZVNoYWRvd0hvYg0K PiA+ICsgPSBBbGxvY2F0ZVBvb2wgKEhvYkRhdGFMZW5ndGgpOyAgaWYNCj4gPiAoTWljcm9jb2Rl U2hhZG93SG9iID09IE5VTEwpIHsNCj4gPiArICAgIEFTU0VSVCAoRkFMU0UpOw0KPiA+ICsgICAg cmV0dXJuOw0KPiA+ICsgIH0NCj4gPiArICBNaWNyb2NvZGVTaGFkb3dIb2ItPk1pY3JvY29kZUNv dW50ID0gUGF0Y2hDb3VudDsNCj4gPiBDb3B5R3VpZCAoDQo+ID4gKyAgICAmTWljcm9jb2RlU2hh ZG93SG9iLT5TdG9yYWdlVHlwZSwNCj4gPiArICAgICZnRWRraWlNaWNyb2NvZGVTdG9yYWdlVHlw ZUZsYXNoR3VpZA0KPiA+ICsgICAgKTsNCj4gPiArICBNaWNyb2NvZGVBZGRySW5NZW1vcnkgPSAo VUlOVDY0ICopDQo+ID4gKE1pY3JvY29kZVNoYWRvd0hvYiArIDEpOw0KPiA+ICsgTWljcm9jb2Rl QWRkckluRmxhc2ggID0gTWljcm9jb2RlQWRkckluTWVtb3J5ICsNCj4gPiBQYXRjaENvdW50Ow0K PiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIEFsbG9jYXRlIG1lbW9yeSBmb3IgbWljcm9jb2Rl IHNoYWRvdyBvcGVyYXRpb24uDQo+ID4gKyAgLy8NCj4gPiArICBNaWNyb2NvZGVQYXRjaEluUmFt ID0gQWxsb2NhdGVQYWdlcw0KPiA+IChFRklfU0laRV9UT19QQUdFUw0KPiA+ICsgKFRvdGFsTG9h ZFNpemUpKTsgIGlmIChNaWNyb2NvZGVQYXRjaEluUmFtID09IE5VTEwpIHsNCj4gPiArICAgIEFT U0VSVCAoRkFMU0UpOw0KPiA+ICsgICAgcmV0dXJuOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAg Ly8NCj4gPiArICAvLyBTaGFkb3cgYWxsIHRoZSByZXF1aXJlZCBtaWNyb2NvZGUgcGF0Y2hlcyBp bnRvDQo+ID4gbWVtb3J5ICAvLyAgZm9yDQo+ID4gKyAoV2Fsa2VyID0gTWljcm9jb2RlUGF0Y2hJ blJhbSwgSW5kZXggPSAwOyBJbmRleCA8DQo+ID4gUGF0Y2hDb3VudDsgSW5kZXgrKykgew0KPiA+ ICsgICAgQ29weU1lbSAoDQo+ID4gKyAgICAgIFdhbGtlciwNCj4gPiArICAgICAgKFZPSUQgKikg UGF0Y2hlc1tJbmRleF0uQWRkcmVzcywNCj4gPiArICAgICAgUGF0Y2hlc1tJbmRleF0uU2l6ZQ0K PiA+ICsgICAgICApOw0KPiA+ICsgICAgTWljcm9jb2RlQWRkckluTWVtb3J5W0luZGV4XSA9IChV SU5UNjQpIFdhbGtlcjsNCj4gPiArICAgIE1pY3JvY29kZUFkZHJJbkZsYXNoW0luZGV4XSAgPSAo VUlOVDY0KQ0KPiA+IFBhdGNoZXNbSW5kZXhdLkFkZHJlc3M7DQo+ID4gKyAgICBXYWxrZXIgKz0g UGF0Y2hlc1tJbmRleF0uU2l6ZTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAg Ly8gVXBkYXRlIHRoZSBtaWNyb2NvZGUgcGF0Y2ggcmVsYXRlZCBmaWVsZHMgaW4NCj4gPiBDcHVN cERhdGEgIC8vDQo+ID4gKyAgKkJ1ZmZlciAgICAgPSAoVk9JRCAqKSAoVUlOVE4pIE1pY3JvY29k ZVBhdGNoSW5SYW07DQo+ID4gKyAgKkJ1ZmZlclNpemUgPSBUb3RhbExvYWRTaXplOw0KPiA+ICsN Cj4gPiArICBCdWlsZEd1aWREYXRhSG9iICgNCj4gPiArICAgICZnRWRraWlNaWNyb2NvZGVTaGFk b3dJbmZvSG9iR3VpZCwNCj4gPiArICAgIE1pY3JvY29kZVNoYWRvd0hvYiwNCj4gPiArICAgIEhv YkRhdGFMZW5ndGgNCj4gPiArICAgICk7DQo+ID4gKw0KPiA+ICsgIERFQlVHICgoDQo+ID4gKyAg ICBERUJVR19JTkZPLA0KPiA+ICsgICAgIiVhOiBSZXF1aXJlZCBtaWNyb2NvZGUgcGF0Y2hlcyBo YXZlIGJlZW4gbG9hZGVkDQo+ID4gYXQgMHglbHgsIHdpdGggc2l6ZSAweCVseC5cbiIsDQo+ID4g KyAgICBfX0ZVTkNUSU9OX18sICpCdWZmZXIsICpCdWZmZXJTaXplDQo+ID4gKyAgICApKTsNCj4g PiArDQo+ID4gKyAgcmV0dXJuOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBTaGFk b3cgdGhlIHJlcXVpcmVkIG1pY3JvY29kZSBwYXRjaGVzIGRhdGEgaW50bw0KPiA+IG1lbW9yeSBh Y2NvcmRpbmcNCj4gPiArICB0byBGSVQgbWljcm9jb2RlIGVudHJ5Lg0KPiA+ICsNCj4gPiArKiov DQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArU2hhZG93TWljcm9jb2RlUGF0Y2hCeUZpdCAoDQo+ID4g KyAgSU4gIFVJTlRODQo+ID4gQ3B1SWRDb3VudCwNCj4gPiArICBJTiAgRURLSUlfUEVJX01JQ1JP Q09ERV9DUFVfSUQNCj4gPiAqTWljcm9jb2RlQ3B1SWQsDQo+ID4gKyAgT1VUIFVJTlRODQo+ID4g KkJ1ZmZlclNpemUsDQo+ID4gKyAgT1VUIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKipCdWZmZXINCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBVSU5UNjQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRml0UG9pbnRlcjsNCj4gPiArICBGSVJNV0FSRV9JTlRFUkZBQ0Vf VEFCTEVfRU5UUlkgICAgKkZpdEVudHJ5Ow0KPiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBFbnRyeU51bTsNCj4gPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAg ICAgICAgSW5kZXg7DQo+ID4gKyAgTUlDUk9DT0RFX1BBVENIX0lORk8gICAgICAgICAgICAgICpQ YXRjaEluZm9CdWZmZXI7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAg IE1heFBhdGNoTnVtYmVyOw0KPiA+ICsgIENQVV9NSUNST0NPREVfSEVBREVSDQo+ID4gKk1pY3Jv Y29kZUVudHJ5UG9pbnQ7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAg IFBhdGNoQ291bnQ7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRv dGFsU2l6ZTsNCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG90YWxM b2FkU2l6ZTsNCj4gPiArDQo+ID4gKyAgRml0UG9pbnRlciA9ICooVUlOVDY0ICopIChVSU5UTikN Cj4gPiBGSVRfUE9JTlRFUl9BRERSRVNTOyAgaWYNCj4gPiArICgoRml0UG9pbnRlciA9PSAwKSB8 fA0KPiA+ICsgICAgICAoRml0UG9pbnRlciA9PSAweEZGRkZGRkZGRkZGRkZGRkYpIHx8DQo+ID4g KyAgICAgIChGaXRQb2ludGVyID09IDB4RUVFRUVFRUVFRUVFRUVFRSkpIHsNCj4gDQo+IEFyZSB0 aGVzZSBjb25zdGFudHMgZGVmaW5lZCBpbiB0aGUgRklUIGluY2x1ZGUgZmlsZT8NCj4gV291bGQg YmUgYmV0dGVyIGlmIHRoZXkgYXJlICNkZWZpbmVzIGZyb20gRklUIGluY2x1ZGUNCj4gZmlsZSBv ciBpbiB0aGlzIG1vZHVsZS4NCj4gDQo+ID4gKyAgICAvLw0KPiA+ICsgICAgLy8gTm8gRklUIHRh YmxlLg0KPiA+ICsgICAgLy8NCj4gPiArICAgIEFTU0VSVCAoRkFMU0UpOw0KPiANCj4gSXMgaXQg YXBwcm9wcmlhdGUgdG8gQVNTRVJUKCkgaGVyZT8gIENhbiB0aGlzIGJlIHJlbW92ZWQ/DQo+IFdv dWxkIGEgREVCVUdfRVJST1IgbWVzc2FnZSBiZSBiZXR0ZXI/DQo+IA0KPiA+ICsgICAgcmV0dXJu IEVGSV9OT1RfRk9VTkQ7DQo+ID4gKyAgfQ0KPiA+ICsgIEZpdEVudHJ5ID0gKEZJUk1XQVJFX0lO VEVSRkFDRV9UQUJMRV9FTlRSWSAqKQ0KPiA+IChVSU5UTikgRml0UG9pbnRlcjsgIGlmDQo+ID4g KyAoKEZpdEVudHJ5WzBdLlR5cGUgIT0gRklUX1RZUEVfMDBfSEVBREVSKSB8fA0KPiA+ICsgICAg ICAoRml0RW50cnlbMF0uQWRkcmVzcyAhPSBGSVRfVFlQRV8wMF9TSUdOQVRVUkUpKQ0KPiA+IHsN Cj4gPiArICAgIC8vDQo+ID4gKyAgICAvLyBJbnZhbGlkIEZJVCB0YWJsZSwgdHJlYXQgaXQgYXMg bm8gRklUIHRhYmxlLg0KPiA+ICsgICAgLy8NCj4gPiArICAgIEFTU0VSVCAoRkFMU0UpOw0KPiAN Cj4gSXMgaXQgYXBwcm9wcmlhdGUgdG8gQVNTRVJUKCkgaGVyZT8gIENhbiB0aGlzIGJlIHJlbW92 ZWQ/DQo+IFdvdWxkIGEgREVCVUdfRVJST1IgbWVzc2FnZSBiZSBiZXR0ZXI/DQo+IA0KPiA+ICsg ICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBFbnRyeU51 bSA9ICooVUlOVDMyICopKCZGaXRFbnRyeVswXS5TaXplWzBdKSAmDQo+ID4gMHhGRkZGRkY7DQo+ ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gQ2FsY3VsYXRlIG1pY3JvY29kZSBlbnRyeSBudW1i ZXINCj4gPiArICAvLw0KPiA+ICsgIE1heFBhdGNoTnVtYmVyID0gMDsNCj4gPiArICBmb3IgKElu ZGV4ID0gMDsgSW5kZXggPCBFbnRyeU51bTsgSW5kZXgrKykgew0KPiA+ICsgICAgaWYgKEZpdEVu dHJ5W0luZGV4XS5UeXBlID09IEZJVF9UWVBFXzAxX01JQ1JPQ09ERSkNCj4gPiB7DQo+ID4gKyAg ICAgIE1heFBhdGNoTnVtYmVyKys7DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0KPiA+ICsgIGlmIChN YXhQYXRjaE51bWJlciA9PSAwKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4g PiArICB9DQo+ID4gKw0KPiA+ICsgIFBhdGNoSW5mb0J1ZmZlciA9IEFsbG9jYXRlUG9vbCAoTWF4 UGF0Y2hOdW1iZXIgKg0KPiA+IHNpemVvZg0KPiA+ICsgKE1JQ1JPQ09ERV9QQVRDSF9JTkZPKSk7 ICBpZiAoUGF0Y2hJbmZvQnVmZmVyID09DQo+ID4gTlVMTCkgew0KPiA+ICsgICAgcmV0dXJuIEVG SV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAv LyBGaWxsIHVwIG1pY3JvY29kZSBwYXRjaCBpbmZvIGJ1ZmZlciBhY2NvcmRpbmcgdG8NCj4gPiBG SVQgdGFibGUuDQo+ID4gKyAgLy8NCj4gPiArICBQYXRjaENvdW50ID0gMDsNCj4gPiArICBUb3Rh bExvYWRTaXplID0gMDsNCj4gPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBFbnRyeU51bTsg SW5kZXgrKykgew0KPiA+ICsgICAgaWYgKEZpdEVudHJ5W0luZGV4XS5UeXBlID09IEZJVF9UWVBF XzAxX01JQ1JPQ09ERSkNCj4gPiB7DQo+ID4gKyAgICAgIE1pY3JvY29kZUVudHJ5UG9pbnQgPSAo Q1BVX01JQ1JPQ09ERV9IRUFERVIgKikNCj4gPiAoVUlOVE4pIEZpdEVudHJ5W0luZGV4XS5BZGRy ZXNzOw0KPiA+ICsgICAgICBUb3RhbFNpemUgPSAoTWljcm9jb2RlRW50cnlQb2ludC0+RGF0YVNp emUgPT0gMCkNCj4gPiA/IDIwNDggOiBNaWNyb2NvZGVFbnRyeVBvaW50LT5Ub3RhbFNpemU7DQo+ ID4gKyAgICAgIGlmIChJc01pY3JvY29kZVBhdGNoTmVlZExvYWQgKENwdUlkQ291bnQsDQo+ID4g TWljcm9jb2RlQ3B1SWQsIE1pY3JvY29kZUVudHJ5UG9pbnQpKSB7DQo+ID4gKyAgICAgICAgUGF0 Y2hJbmZvQnVmZmVyW1BhdGNoQ291bnRdLkFkZHJlc3MgICAgID0NCj4gPiAoVUlOVE4pIE1pY3Jv Y29kZUVudHJ5UG9pbnQ7DQo+ID4gKyAgICAgICAgUGF0Y2hJbmZvQnVmZmVyW1BhdGNoQ291bnRd LlNpemUgICAgICAgID0NCj4gPiBUb3RhbFNpemU7DQo+ID4gKyAgICAgICAgVG90YWxMb2FkU2l6 ZSArPSBUb3RhbFNpemU7DQo+ID4gKyAgICAgICAgUGF0Y2hDb3VudCsrOw0KPiA+ICsgICAgICB9 DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBpZiAoUGF0Y2hDb3VudCAhPSAw KSB7DQo+ID4gKyAgICBERUJVRyAoKA0KPiA+ICsgICAgICBERUJVR19JTkZPLA0KPiA+ICsgICAg ICAiJWE6IDB4JXggbWljcm9jb2RlIHBhdGNoZXMgd2lsbCBiZSBsb2FkZWQgaW50bw0KPiA+IG1l bW9yeSwgd2l0aCBzaXplIDB4JXguXG4iLA0KPiA+ICsgICAgICBfX0ZVTkNUSU9OX18sIFBhdGNo Q291bnQsIFRvdGFsTG9hZFNpemUNCj4gPiArICAgICAgKSk7DQo+ID4gKw0KPiA+ICsgICAgU2hh ZG93TWljcm9jb2RlUGF0Y2hXb3JrZXIgKFBhdGNoSW5mb0J1ZmZlciwNCj4gPiBQYXRjaENvdW50 LA0KPiA+ICsgVG90YWxMb2FkU2l6ZSwgQnVmZmVyU2l6ZSwgQnVmZmVyKTsgIH0NCj4gPiArDQo+ ID4gKyAgRnJlZVBvb2wgKFBhdGNoSW5mb0J1ZmZlcik7DQo+ID4gKyAgcmV0dXJuIEVGSV9TVUND RVNTOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgU2hhZG93IG1pY3Jv Y29kZSB1cGRhdGUgcGF0Y2hlcyB0byBtZW1vcnkuDQo+ID4gKw0KPiA+ICsgIFRoZSBmdW5jdGlv biBpcyB1c2VkIGZvciBzaGFkb3dpbmcgbWljcm9jb2RlIHVwZGF0ZQ0KPiA+IHBhdGNoZXMgdG8g YSBjb250aW51b3VzIG1lbW9yeS4NCj4gPiArICBJdCBzaGFsbCBhbGxvY2F0ZSBtZW1vcnkgYnVm ZmVyIGFuZCBvbmx5IHNoYWRvdyB0aGUNCj4gPiBtaWNyb2NvZGUgcGF0Y2hlcw0KPiA+ICsgZm9y IHRob3NlICBwcm9jZXNzb3JzIHNwZWNpZmllZCBieSBNaWNyb2NvZGVDcHVJZA0KPiA+IGFycmF5 LiBUaGUgY2hlY2tzdW0NCj4gPiArIHZlcmlmaWNhdGlvbiBtYXkgYmUgIHNraXBlZCBpbiB0aGlz IGZ1bmN0aW9uIHNvIHRoZQ0KPiA+IGNhbGxlciBtdXN0DQo+ID4gKyBwZXJmb3JtIGNoZWNrc3Vt IHZlcmlmaWNhdGlvbiBiZWZvcmUgIHVzaW5nIHRoZQ0KPiA+IG1pY3JvY29kZSBwYXRjaGVzIGlu IHJldHVybmVkIG1lbW9yeSBidWZmZXIuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIFRoaXMg ICAgICAgICAgICAgICAgIFRoZSBQUEkgaW5zdGFuY2UNCj4gPiBwb2ludGVyLg0KPiA+ICsgIEBw YXJhbVtpbl0gIENwdUlkQ291bnQgICAgICAgICAgIE51bWJlciBvZiBlbGVtZW50cw0KPiA+IGlu IE1pY3JvY29kZUNwdUlkIGFycmF5Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIE1pY3JvY29kZUNwdUlk ICAgICAgIEEgcG9pbnRlciB0byBhbg0KPiA+IGFycmF5IG9mIEVES0lJX1BFSV9NSUNST0NPREVf Q1BVX0lEDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJl cy4NCj4gPiArICBAcGFyYW1bb3V0XSBCdWZmZXJTaXplICAgICAgICAgICBQb2ludGVyIHRvIHJl Y2VpdmUNCj4gPiB0aGUgdG90YWwgc2l6ZSBvZiBCdWZmZXIuDQo+ID4gKyAgQHBhcmFtW291dF0g QnVmZmVyICAgICAgICAgICAgICAgUG9pbnRlciB0byByZWNlaXZlDQo+ID4gYWRkcmVzcyBvZiBh bGxvY2F0ZWQgbWVtb3J5DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg d2l0aCBtaWNyb2NvZGUNCj4gPiBwYXRjaGVzIGRhdGEgaW4gaXQuDQo+ID4gKw0KPiA+ICsgIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgIFRoZSBtaWNyb2NvZGUgaGFzDQo+ID4gYmVl biBzaGFkb3dlZCB0byBtZW1vcnkuDQo+ID4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNF UyAgICAgVGhlIG9wZXJhdGlvbiBmYWlscw0KPiA+IGR1ZSB0byBsYWNrIG9mIHJlc291cmNlcy4N Cj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK1NoYWRvd01pY3JvY29kZSAo DQo+ID4gKyAgSU4gIEVES0lJX1BFSV9TSEFET1dfTUlDUk9DT0RFX1BQSSAgICAgICAgKlRoaXMs DQo+ID4gKyAgSU4gIFVJTlRODQo+ID4gQ3B1SWRDb3VudCwNCj4gPiArICBJTiAgRURLSUlfUEVJ X01JQ1JPQ09ERV9DUFVfSUQNCj4gPiAqTWljcm9jb2RlQ3B1SWQsDQo+ID4gKyAgT1VUIFVJTlRO DQo+ID4gKkJ1ZmZlclNpemUsDQo+ID4gKyAgT1VUIFZPSUQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKipCdWZmZXINCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBpZiAoQnVmZmVy U2l6ZSA9PSBOVUxMIHx8IEJ1ZmZlciA9PSBOVUxMKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX0lO VkFMSURfUEFSQU1FVEVSOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgcmV0dXJuIFNoYWRvd01p Y3JvY29kZVBhdGNoQnlGaXQgKENwdUlkQ291bnQsDQo+ID4gTWljcm9jb2RlQ3B1SWQsDQo+ID4g K0J1ZmZlclNpemUsIEJ1ZmZlcik7IH0NCj4gPiArDQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBQ bGF0Zm9ybSBJbml0IFBFSSBtb2R1bGUgZW50cnkgcG9pbnQNCj4gPiArDQo+ID4gKyAgQHBhcmFt W2luXSAgRmlsZUhhbmRsZSAgICAgICAgICAgTm90IHVzZWQuDQo+ID4gKyAgQHBhcmFtW2luXSAg UGVpU2VydmljZXMgICAgICAgICAgR2VuZXJhbCBwdXJwb3NlDQo+ID4gc2VydmljZXMgYXZhaWxh YmxlIHRvIGV2ZXJ5IFBFSU0uDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgICAgIEVGSV9TVUNDRVNT ICAgICAgICAgIFRoZSBmdW5jdGlvbg0KPiA+IGNvbXBsZXRlcyBzdWNjZXNzZnVsbHkNCj4gPiAr ICBAcmV0dmFsICAgICBFRklfT1VUX09GX1JFU09VUkNFUyBJbnN1ZmZpY2llbnQNCj4gPiByZXNv dXJjZXMgdG8gY3JlYXRlIGRhdGFiYXNlDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4g K0VGSUFQSQ0KPiA+ICtTaGFkb3dNaWNyb2NvZGVQZWltSW5pdCAoDQo+ID4gKyAgSU4gICAgICAg RUZJX1BFSV9GSUxFX0hBTkRMRSAgRmlsZUhhbmRsZSwNCj4gPiArICBJTiBDT05TVCBFRklfUEVJ X1NFUlZJQ0VTICAgICAqKlBlaVNlcnZpY2VzDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJ X1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ICsNCj4gPiArICAvLw0K PiA+ICsgIC8vIEluc3RhbGwgRURLSUkgU2hhZG93IE1pY3JvY29kZSBQUEkgIC8vICBTdGF0dXMg PQ0KPiA+ICsgUGVpU2VydmljZXNJbnN0YWxsUHBpKG1QZWlTaGFkb3dNaWNyb2NvZGVQcGlMaXN0 KTsNCj4gPiArICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+ICsNCj4gPiArICByZXR1 cm4gU3RhdHVzOw0KPiA+ICt9DQo+ID4gZGlmZiAtLWdpdA0KPiA+IGEvU2lsaWNvbi9JbnRlbC9J bnRlbFNpbGljb25Qa2cvRmVhdHVyZS9TaGFkb3dNaWNyb2NvZGUNCj4gPiAvU2hhZG93TWljcm9j b2RlUGVpLmgNCj4gPiBiL1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUvU2hh ZG93TWljcm9jb2RlDQo+ID4gL1NoYWRvd01pY3JvY29kZVBlaS5oDQo+ID4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwLi4wNGZlN2NiZmQzDQo+ID4gLS0tIC9kZXYv bnVsbA0KPiA+ICsrKw0KPiA+IGIvU2lsaWNvbi9JbnRlbC9JbnRlbFNpbGljb25Qa2cvRmVhdHVy ZS9TaGFkb3dNaWNyb2NvZGUNCj4gPiAvU2hhZG93TWljcm9jDQo+ID4gKysrIG9kZVBlaS5oDQo+ ID4gQEAgLTAsMCArMSw2MiBAQA0KPiA+ICsvKiogQGZpbGUNCj4gPiArICBTb3VyY2UgY29kZSBm aWxlIGZvciBQbGF0Zm9ybSBJbml0IFBFSSBtb2R1bGUNCj4gDQo+IFRoaXMgZGVzY3JpcHRpb24g ZG9lcyBub3QgbWF0Y2ggdGhlIGNvbnRlbnQNCj4gDQo+ID4gKw0KPiA+ICtDb3B5cmlnaHQgKGMp IDIwMjAsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzDQo+ID4gcmVzZXJ2ZWQuPEJSPg0K PiA+ICtTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ICsN Cj4gPiArKiovDQo+ID4gKw0KPiA+ICsjaWZuZGVmIF9fU0hBRE9XX01JQ1JPQ09ERV9QRUlfSF9f DQo+ID4gKyNkZWZpbmUgX19TSEFET1dfTUlDUk9DT0RFX1BFSV9IX18NCj4gPiArDQo+ID4gKw0K PiA+ICsjaW5jbHVkZSA8UGlQZWkuaD4NCj4gPiArI2luY2x1ZGUgPFBwaS9TaGFkb3dNaWNyb2Nv ZGUuaD4NCj4gPiArI2luY2x1ZGUgPExpYnJhcnkvUGVpU2VydmljZXNMaWIuaD4NCj4gPiArI2lu Y2x1ZGUgPExpYnJhcnkvSG9iTGliLmg+DQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGli Lmg+DQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaD4NCj4gPiArI2luY2x1 ZGUgPExpYnJhcnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5oPiAjaW5jbHVkZQ0KPiA+ICs8SW5kdXN0 cnlTdGFuZGFyZC9GaXJtd2FyZUludGVyZmFjZVRhYmxlLmg+DQo+ID4gKyNpbmNsdWRlIDxSZWdp c3Rlci9JbnRlbC9NaWNyb2NvZGUuaD4NCj4gPiArI2luY2x1ZGUgPFJlZ2lzdGVyL0ludGVsL0Nw dWlkLmg+DQo+ID4gKyNpbmNsdWRlIDxHdWlkL01pY3JvY29kZVNoYWRvd0luZm9Ib2IuaD4gLy8g Ly8gRGF0YQ0KPiA+IHN0cnVjdHVyZSBmb3INCj4gPiArbWljcm9jb2RlIHBhdGNoIGluZm9ybWF0 aW9uIC8vIHR5cGVkZWYgc3RydWN0IHsNCj4gPiArICBVSU5UTiAgICBBZGRyZXNzOw0KPiA+ICsg IFVJTlROICAgIFNpemU7DQo+ID4gK30gTUlDUk9DT0RFX1BBVENIX0lORk87DQo+ID4gKw0KPiA+ ICsvKioNCj4gPiArICBTaGFkb3cgbWljcm9jb2RlIHVwZGF0ZSBwYXRjaGVzIHRvIG1lbW9yeS4N Cj4gPiArDQo+ID4gKyAgVGhlIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIHNoYWRvd2luZyBtaWNyb2Nv ZGUgdXBkYXRlDQo+ID4gcGF0Y2hlcyB0byBhIGNvbnRpbnVvdXMgbWVtb3J5Lg0KPiA+ICsgIEl0 IHNoYWxsIGFsbG9jYXRlIG1lbW9yeSBidWZmZXIgYW5kIG9ubHkgc2hhZG93IHRoZQ0KPiA+IG1p Y3JvY29kZSBwYXRjaGVzDQo+ID4gKyBmb3IgdGhvc2UgIHByb2Nlc3NvcnMgc3BlY2lmaWVkIGJ5 IE1pY3JvY29kZUNwdUlkDQo+ID4gYXJyYXkuIFRoZSBjaGVja3N1bQ0KPiA+ICsgdmVyaWZpY2F0 aW9uIG1heSBiZSAgc2tpcGVkIGluIHRoaXMgZnVuY3Rpb24gc28gdGhlDQo+ID4gY2FsbGVyIG11 c3QNCj4gPiArIHBlcmZvcm0gY2hlY2tzdW0gdmVyaWZpY2F0aW9uIGJlZm9yZSAgdXNpbmcgdGhl DQo+ID4gbWljcm9jb2RlIHBhdGNoZXMgaW4gcmV0dXJuZWQgbWVtb3J5IGJ1ZmZlci4NCj4gPiAr DQo+ID4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAgVGhlIFBQSSBpbnN0YW5j ZQ0KPiA+IHBvaW50ZXIuDQo+ID4gKyAgQHBhcmFtW2luXSAgQ3B1SWRDb3VudCAgICAgICAgICAg TnVtYmVyIG9mIGVsZW1lbnRzDQo+ID4gaW4gTWljcm9jb2RlQ3B1SWQgYXJyYXkuDQo+ID4gKyAg QHBhcmFtW2luXSAgTWljcm9jb2RlQ3B1SWQgICAgICAgQSBwb2ludGVyIHRvIGFuDQo+ID4gYXJy YXkgb2YgRURLSUlfUEVJX01JQ1JPQ09ERV9DUFVfSUQNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVzLg0KPiA+ICsgIEBwYXJhbVtvdXRdIEJ1ZmZlclNp emUgICAgICAgICAgIFBvaW50ZXIgdG8gcmVjZWl2ZQ0KPiA+IHRoZSB0b3RhbCBzaXplIG9mIEJ1 ZmZlci4NCj4gPiArICBAcGFyYW1bb3V0XSBCdWZmZXIgICAgICAgICAgICAgICBQb2ludGVyIHRv IHJlY2VpdmUNCj4gPiBhZGRyZXNzIG9mIGFsbG9jYXRlZCBtZW1vcnkNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIG1pY3JvY29kZQ0KPiA+IHBhdGNoZXMgZGF0 YSBpbiBpdC4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAg VGhlIG1pY3JvY29kZSBoYXMNCj4gPiBiZWVuIHNoYWRvd2VkIHRvIG1lbW9yeS4NCj4gPiArICBA cmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgICBUaGUgb3BlcmF0aW9uIGZhaWxzDQo+ID4g ZHVlIHRvIGxhY2sgb2YgcmVzb3VyY2VzLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFU VVMNCj4gPiArU2hhZG93TWljcm9jb2RlICgNCj4gPiArICBJTiAgRURLSUlfUEVJX1NIQURPV19N SUNST0NPREVfUFBJICAgICAgICAqVGhpcywNCj4gPiArICBJTiAgVUlOVE4NCj4gPiBDcHVJZENv dW50LA0KPiA+ICsgIElOICBFREtJSV9QRUlfTUlDUk9DT0RFX0NQVV9JRA0KPiA+ICpNaWNyb2Nv ZGVDcHVJZCwNCj4gPiArICBPVVQgVUlOVE4NCj4gPiAqQnVmZmVyU2l6ZSwNCj4gPiArICBPVVQg Vk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKkJ1ZmZlcg0KPiA+ICsgICk7 DQo+ID4gKw0KPiA+ICsjZW5kaWYNCj4gPiBkaWZmIC0tZ2l0DQo+ID4gYS9TaWxpY29uL0ludGVs L0ludGVsU2lsaWNvblBrZy9GZWF0dXJlL1NoYWRvd01pY3JvY29kZQ0KPiA+IC9TaGFkb3dNaWNy b2NvZGVQZWkuaW5mDQo+ID4gYi9TaWxpY29uL0ludGVsL0ludGVsU2lsaWNvblBrZy9GZWF0dXJl L1NoYWRvd01pY3JvY29kZQ0KPiA+IC9TaGFkb3dNaWNyb2NvZGVQZWkuaW5mDQo+ID4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwLi5iMjc3Mzk5OGNlDQo+ID4gLS0t IC9kZXYvbnVsbA0KPiA+ICsrKw0KPiA+IGIvU2lsaWNvbi9JbnRlbC9JbnRlbFNpbGljb25Qa2cv RmVhdHVyZS9TaGFkb3dNaWNyb2NvZGUNCj4gPiAvU2hhZG93TWljcm9jDQo+ID4gKysrIG9kZVBl aS5pbmYNCj4gPiBAQCAtMCwwICsxLDQ0IEBADQo+ID4gKyMjIyBAZmlsZQ0KPiA+ICsjIENvbXBv bmVudCBpbmZvcm1hdGlvbiBmaWxlIGZvciB0aGUgUGxhdGZvcm0gSW5pdCBQRUkNCj4gPiBtb2R1 bGUuDQo+IA0KPiBUaGlzIGRlc2NyaXB0aW9uIGRvZXMgbm90IG1hdGNoIHRoZSBmaWxlIGNvbnRl bnRzLg0KPiANCj4gPiArIw0KPiA+ICsjIENvcHlyaWdodCAoYykgMjAyMCwgSW50ZWwgQ29ycG9y YXRpb24uIEFsbCByaWdodHMNCj4gPiByZXNlcnZlZC48QlI+ICMgIw0KPiA+ICtTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudCAjICMjIw0KPiA+ICsNCj4gPiArW0Rl ZmluZXNdDQo+ID4gKyAgSU5GX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgID0gMHgwMDAxMDAx Nw0KPiA+ICsgIEJBU0VfTkFNRSAgICAgICAgICAgICAgICAgICAgICA9IFNoYWRvd01pY3JvY29k ZVBlaQ0KPiA+ICsgIEZJTEVfR1VJRCAgICAgICAgICAgICAgICAgICAgICA9IDhhZjRjZjY4LWVi ZTQtNGIyMS0NCj4gPiBhMDA4LTBjYjNkYTI3N2JlNQ0KPiA+ICsgIFZFUlNJT05fU1RSSU5HICAg ICAgICAgICAgICAgICA9IDEuMA0KPiA+ICsgIE1PRFVMRV9UWVBFICAgICAgICAgICAgICAgICAg ICA9IFBFSU0NCj4gPiArICBFTlRSWV9QT0lOVCAgICAgICAgICAgICAgICAgICAgPQ0KPiA+IFNo YWRvd01pY3JvY29kZVBlaW1Jbml0DQo+ID4gKw0KPiA+ICtbU291cmNlc10NCj4gPiArICBTaGFk b3dNaWNyb2NvZGVQZWkuYw0KPiA+ICsgIFNoYWRvd01pY3JvY29kZVBlaS5oDQo+ID4gKw0KPiA+ ICtbTGlicmFyeUNsYXNzZXNdDQo+ID4gKyAgUGVpbUVudHJ5UG9pbnQNCj4gPiArICBEZWJ1Z0xp Yg0KPiA+ICsgIE1lbW9yeUFsbG9jYXRpb25MaWINCj4gPiArICBCYXNlTWVtb3J5TGliDQo+ID4g KyAgSG9iTGliDQo+ID4gKyAgUGVpU2VydmljZXNMaWINCj4gPiArDQo+ID4gK1tQYWNrYWdlc10N Cj4gPiArICBNZGVQa2cvTWRlUGtnLmRlYw0KPiA+ICsgIE1kZU1vZHVsZVBrZy9NZGVNb2R1bGVQ a2cuZGVjDQo+ID4gKyAgVWVmaUNwdVBrZy9VZWZpQ3B1UGtnLmRlYw0KPiA+ICsgIEludGVsU2ls aWNvblBrZy9JbnRlbFNpbGljb25Qa2cuZGVjDQo+ID4gKw0KPiA+ICtbUHBpc10NCj4gPiArICBn RWRraWlQZWlTaGFkb3dNaWNyb2NvZGVQcGlHdWlkDQo+ID4gIyMgUFJPRFVDRVMNCj4gPiArDQo+ ID4gK1tHdWlkc10NCj4gPiArICBnRWRraWlNaWNyb2NvZGVTaGFkb3dJbmZvSG9iR3VpZA0KPiA+ ICsgIGdFZGtpaU1pY3JvY29kZVN0b3JhZ2VUeXBlRmxhc2hHdWlkDQo+ID4gKw0KPiA+ICtbRGVw ZXhdDQo+ID4gKyAgVFJVRQ0KPiA+IGRpZmYgLS1naXQNCj4gPiBhL1NpbGljb24vSW50ZWwvSW50 ZWxTaWxpY29uUGtnL0luY2x1ZGUvR3VpZC9NaWNyb2NvZGVTDQo+ID4gaGFkb3dJbmZvSG9iLmgN Cj4gPiBiL1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0luY2x1ZGUvR3VpZC9NaWNyb2Nv ZGVTDQo+ID4gaGFkb3dJbmZvSG9iLmgNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGlu ZGV4IDAwMDAwMDAwMDAuLjU5YTM4Y2VlNzQNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrDQo+ ID4gYi9TaWxpY29uL0ludGVsL0ludGVsU2lsaWNvblBrZy9JbmNsdWRlL0d1aWQvTWljcm9jb2Rl Uw0KPiA+IGhhZG93SW5mb0hvYi4NCj4gPiArKysgaA0KPiA+IEBAIC0wLDAgKzEsNTcgQEANCj4g PiArLyoqIEBmaWxlDQo+ID4gKyAgVGhlIGRlZmluaXRpb24gZm9yIFZURCBQTVIgUmVnaW9ucyBJ bmZvcm1hdGlvbiBIb2IuDQo+IA0KPiBUaGlzIGRlc2NyaXB0aW9uIGRvZXMgbm90IG1hdGNoIHRo ZSBjb250ZW50DQo+IA0KPiA+ICsNCj4gPiArICBDb3B5cmlnaHQgKGMpIDIwMTksIEludGVsIENv cnBvcmF0aW9uLiBBbGwgcmlnaHRzDQo+ID4gcmVzZXJ2ZWQuPEJSPg0KPiA+ICsgIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50ICoqLw0KPiA+ICsNCj4gPiArDQo+ ID4gKyNpZm5kZWYgX01JQ1JPQ09ERV9TSEFET1dfSU5GT19IT0JfSF8NCj4gPiArI2RlZmluZSBf TUlDUk9DT0RFX1NIQURPV19JTkZPX0hPQl9IXw0KPiA+ICsNCj4gPiArLy8vDQo+ID4gKy8vLyBU aGUgR2xvYmFsIElEIG9mIGEgR1VJRGVkIEhPQiB1c2VkIHRvIHBhc3MNCj4gPiBtaWNyb2NvZGUg c2hhZG93IGluZm8gdG8gRFhFIERyaXZlci4NCj4gPiArLy8vDQo+ID4gKyNkZWZpbmUgRURLSUlf TUlDUk9DT0RFX1NIQURPV19JTkZPX0hPQl9HVUlEIFwNCj4gPiArICB7IFwNCj4gPiArICAgIDB4 NjU4OTAzZjksIDB4ZGE2NiwgMHg0NjBkLCB7IDB4OGIsIDB4YjAsIDB4OWQsDQo+ID4gMHgyZCwg MHhkZiwgMHg2NSwNCj4gPiArMHg0NCwgMHg1OSB9IFwNCj4gPiArICB9DQo+ID4gKw0KPiA+ICtl eHRlcm4gRUZJX0dVSUQgZ0Vka2lpTWljcm9jb2RlU2hhZG93SW5mb0hvYkd1aWQ7DQo+ID4gKw0K PiA+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ID4gKyAgLy8NCj4gPiArICAvLyBOdW1iZXIgb2YgdGhl IG1pY3JvY29kZSBwYXRjaGVzIHdoaWNoIGhhdmUgYmVlbg0KPiA+ICsgIC8vIHJlbG9jYXRlZCB0 byBtZW1vcnkuDQo+ID4gKyAgLy8NCj4gPiArICBVSU5UNjQgICAgTWljcm9jb2RlQ291bnQ7DQo+ ID4gKyAgLy8NCj4gPiArICAvLyBBbiBFRklfR1VJRCB0aGF0IGRlZmluZXMgdGhlIGNvbnRlbnRz IG9mDQo+ID4gU3RvcmFnZUNvbnRleHQuDQo+ID4gKyAgLy8NCj4gPiArICBHVUlEICAgICAgU3Rv cmFnZVR5cGU7DQo+ID4gKyAgLy8NCj4gPiArICAvLyBBbiBhcnJheSB3aXRoIE1pY3JvY29kZUNv dW50IGVsZW1lbnRzIHRoYXQgc3RvcmVzDQo+ID4gKyAgLy8gdGhlIHNoYWRvd2VkIG1pY3JvY29k ZSBwYXRjaCBhZGRyZXNzIGluIG1lbW9yeS4NCj4gPiArICAvLw0KPiA+ICsgIFVJTlQ2NCAgICBN aWNyb2NvZGVBZGRySW5NZW1vcnlbMF07DQo+IA0KPiBTaW5jZSB0aGlzIGlzIHRoZSBsYXN0IGZp ZWxkIGluIHRoZSBzdHJ1Y3R1cmUgdmlzaWJsZSB0byB0aGUNCj4gQyBjb21waWxlciwgeW91IGNh biB1c2UgW10gaW5zdGVhZCBvZiBbMF0gc28gaXQgaXMgaW50ZXJwcmV0ZWQNCj4gYnkgdGhlIGNv bXBpbGVyIGFzIGEgZmxleGlibGUgYXJyYXkgbWVtYmVyLiBUaGlzIGNhbiBtYWtlDQo+IGNvZGUg dGhhdCB1c2VzIHRoaXMgc3RydWN0dXJlIGVhc2llciB0byByZWFkLg0KPiANCj4gaHR0cHM6Ly9l bi53aWtpcGVkaWEub3JnL3dpa2kvRmxleGlibGVfYXJyYXlfbWVtYmVyDQo+IA0KPiANCj4gPiAr ICAvLw0KPiA+ICsgIC8vIEEgYnVmZmVyIHdoaWNoIGNvbnRhaW5zIGRldGFpbHMgYWJvdXQgdGhl IHN0b3JhZ2UNCj4gPiBpbmZvcm1hdGlvbg0KPiA+ICsgIC8vIHNwZWNpZmljIHRvIFN0b3JhZ2VU eXBlLg0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gVUlOVDggIFN0b3JhZ2VDb250ZXh0W107DQo+ID4g K30gRURLSUlfTUlDUk9DT0RFX1NIQURPV19JTkZPX0hPQjsNCj4gPiArDQo+ID4gKy8vDQo+ID4g Ky8vIEFuIEVES0lJX01JQ1JPQ09ERV9TSEFET1dfSU5GT19IT0Igd2l0aCBTdG9yYWdlVHlwZQ0K PiA+IHNldCB0byBiZWxvdw0KPiA+ICtHVUlEIHdpbGwgLy8gaGF2ZSB0aGUgU3RvcmFnZUNvbnRl eHQgb2YgYW4gYXJyYXkgd2l0aA0KPiA+IE1pY3JvY29kZUNvdW50IG9mDQo+ID4gK1VJTlQ2NCBl bGVtZW50cyAvLyB0aGF0IHN0b3JlcyB0aGUgb3JpZ2luYWwgbWljcm9jb2RlDQo+ID4gcGF0Y2gg YWRkcmVzcyBvbg0KPiA+ICtmbGFzaC4gVGhpcyBhZGRyZXNzIGlzIC8vIHBsYWNlZCBpbiBzYW1l IG9yZGVyIGFzIHRoZQ0KPiA+IG1pY3JvY29kZSBwYXRjaGVzIGluIE1pY3JvY29kZUFkZHJJbk1l bW9yeS4NCj4gPiArLy8NCj4gPiArI2RlZmluZSBFRklfTUlDUk9DT0RFX1NUT1JBR0VfVFBZRV9G TEFTSF9HVUlEIFwNCj4gDQo+IFR5cG8uICAiVFBZRSIgc2hvdWxkIGJlICJUWVBFIi4NCj4gDQo+ IA0KPiBTaG91bGQgYSBkYXRhIHN0cnVjdHVyZSBiZSBhZGRlZCB0aGF0IGlzIGFzc29jaWF0ZWQg d2l0aA0KPiBFRklfTUlDUk9DT0RFX1NUT1JBR0VfVFlQRV9GTEFTSF9HVUlEIHNvIGl0IGNhbiBi ZSB1c2VkDQo+IHRvIGludGVycHJldCBTdG9yYWdlQ29udGV4dCBmaWVsZCB3aGVuIFN0b3JhZ2VU eXBlIG1hdGNoZXMNCj4gdGhpcyBHVUlEIHZhbHVlPyAgVGhpcyB3YXksIHRoZSB0ZXh0IGluIHRo ZSBjb21tZW50cyBpcw0KPiBub3QgcmVxdWlyZWQgdG8ga25vdyB0aGUgbGF5b3V0IG9mIFN0b3Jh Z2VDb250ZXh0Lg0KPiANCj4gICB0eXBlZGVmIHN0cnVjdCB7DQo+ICAgICBVSU5UNjQgIE1pY3Jv Y29kZUFkZHJlc3NJbkZsYXNoW107DQo+ICAgfSBFRklfTUlDUk9DT0RFX1NUT1JBR0VfVFlQRV9G TEFTSF9DT05URVhUOw0KPiANCj4gSW4gb3JkZXIgdG8gbWFrZSBldmVyeXRoaW5nIGFsaWduZWQg YmV0dGVyIHNob3VsZCB0aGUNCj4gU3RvcmFnZUd1aWQgYmUgbGlzdGVkIGJlZm9yZSBNaWNyb2Nv ZGVDb3VudCwgc28gdGhlIG9yZGVyDQo+IGlzIGZyb20gbGFyZ2VzdCB0byBzbWFsbGVzdC4gIFRo aXMgYWxzbyBndWFyYW50ZWVzIHRoYXQNCj4gU3RvcmFnZUNvbnRleHQgaXMgYWxpZ25lZCBvbiBh biA4LWJ5dGUgYm91bmRhcnkgd2hpY2ggaXMNCj4gY29tcGF0aWJsZSB3aXRoIGEgdHlwZWNhc3Qg dG8gYSBTdG9yYWdlVHlwZSBzcGVjaWZpYyBzdHJ1Y3R1cmUuDQo+IA0KPiA+ICsgIHsgXA0KPiA+ ICsgICAgMHgyY2JhMDFiMywgMHhkMzkxLCAweDQ1OTgsIHsgMHg4ZCwgMHg4OSwgMHhiNywNCj4g PiAweGZjLCAweDM5LCAweDIyLA0KPiA+ICsweGZkLCAweDcxIH0gXA0KPiA+ICsgIH0NCj4gPiAr DQo+ID4gK2V4dGVybiBFRklfR1VJRCBnRWRraWlNaWNyb2NvZGVTdG9yYWdlVHlwZUZsYXNoR3Vp ZDsNCj4gPiArDQo+ID4gKyNlbmRpZg0KPiA+IGRpZmYgLS1naXQNCj4gPiBhL1NpbGljb24vSW50 ZWwvSW50ZWxTaWxpY29uUGtnL0ludGVsU2lsaWNvblBrZy5kZWMNCj4gPiBiL1NpbGljb24vSW50 ZWwvSW50ZWxTaWxpY29uUGtnL0ludGVsU2lsaWNvblBrZy5kZWMNCj4gPiBpbmRleCAyMmViZjE5 YzRlLi4yZDhlNDBmMGI4IDEwMDY0NA0KPiA+IC0tLSBhL1NpbGljb24vSW50ZWwvSW50ZWxTaWxp Y29uUGtnL0ludGVsU2lsaWNvblBrZy5kZWMNCj4gPiArKysgYi9TaWxpY29uL0ludGVsL0ludGVs U2lsaWNvblBrZy8gSW50ZWxTaWxpY29uUGtnLmRlYw0KPiA+IEBAIC00OCw2ICs0OCwxMiBAQA0K PiANCj4gSGVhZGVyIG9mIEludGVsU2lsaWNvblBrZy5kZWMgbmVlZHMgdG8gaGF2ZSBjb3B5cmln aHQgdXBkYXRlZA0KPiB0byAyMDIwLg0KPiANCj4gPiAgICAjIyBIT0IgR1VJRCB0byBnZXQgbWVt b3J5IGluZm9ybWF0aW9uIGFmdGVyIE1SQyBpcw0KPiA+IGRvbmUuIFRoZSBob2IgZGF0YSB3aWxs IGJlIHVzZWQgdG8gc2V0IHRoZSBQTVIgcmFuZ2VzDQo+ID4gICAgZ1Z0ZFBtckluZm9EYXRhSG9i R3VpZCA9IHsweDZmYjYxNjQ1LCAweGYxNjgsDQo+ID4gMHg0NmJlLCB7IDB4ODAsIDB4ZWMsIDB4 YjUsIDB4MDIsIDB4MzgsIDB4NWUsIDB4ZTcsDQo+ID4gMHhlNyB9IH0NCj4gPg0KPiA+ICsgICMj IEluY2x1ZGUvR3VpZC9NaWNyb2NvZGVTaGFkb3dJbmZvSG9iLmgNCj4gPiArICBnRWRraWlNaWNy b2NvZGVTaGFkb3dJbmZvSG9iR3VpZCA9IHsgMHg2NTg5MDNmOSwNCj4gPiAweGRhNjYsIDB4NDYw ZCwgew0KPiA+ICsgMHg4YiwgMHhiMCwgMHg5ZCwgMHgyZCwgMHhkZiwgMHg2NSwgMHg0NCwgMHg1 OSB9IH0NCj4gPiArDQo+ID4gKyAgIyMgSW5jbHVkZS9HdWlkL01pY3JvY29kZVNoYWRvd0luZm9I b2IuaA0KPiA+ICsgIGdFZGtpaU1pY3JvY29kZVN0b3JhZ2VUeXBlRmxhc2hHdWlkID0geyAweDJj YmEwMWIzLA0KPiA+IDB4ZDM5MSwgMHg0NTk4LCB7DQo+ID4gKyAweDhkLCAweDg5LCAweGI3LCAw eGZjLCAweDM5LCAweDIyLCAweGZkLCAweDcxIH0gfQ0KPiA+ICsNCj4gPiAgW1BwaXNdDQo+ID4g ICAgZ0Vka2lpVlRkSW5mb1BwaUd1aWQgPSB7IDB4OGE1OWZjYjMsIDB4ZjE5MSwgMHg0MDBjLA0K PiA+IHsgMHg5NywgMHg2NywgMHg2NywgMHhhZiwgMHgyYiwgMHgyNSwgMHg2OCwgMHg0YSB9IH0N Cj4gPg0KPiA+IGRpZmYgLS1naXQNCj4gPiBhL1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtn L0ludGVsU2lsaWNvblBrZy5kc2MNCj4gPiBiL1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtn L0ludGVsU2lsaWNvblBrZy5kc2MNCj4gPiBpbmRleCAwYTY1MDlkOGIzLi5mOTk1ODgzNjkxIDEw MDY0NA0KPiA+IC0tLSBhL1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0ludGVsU2lsaWNv blBrZy5kc2MNCj4gPiArKysgYi9TaWxpY29uL0ludGVsL0ludGVsU2lsaWNvblBrZy9JbnRlbFNp bGljb25Qa2cuZHNjDQo+ID4gQEAgLTEsNyArMSw3IEBADQo+ID4gICMjIEBmaWxlDQo+ID4gICMg VGhpcyBwYWNrYWdlIHByb3ZpZGVzIGNvbW1vbiBvcGVuIHNvdXJjZSBJbnRlbA0KPiA+IHNpbGlj b24gbW9kdWxlcy4NCj4gPiAgIw0KPiA+IC0jIENvcHlyaWdodCAoYykgMjAxNyAtIDIwMTksIElu dGVsIENvcnBvcmF0aW9uLiBBbGwNCj4gPiByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ICsjIENv cHlyaWdodCAoYykgMjAxNyAtIDIwMjAsIEludGVsIENvcnBvcmF0aW9uLiBBbGwNCj4gPiByaWdo dHMNCj4gPiArcmVzZXJ2ZWQuPEJSPg0KPiA+ICAjDQo+ID4gICMgICAgU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gPiAgIw0KPiA+IEBAIC04NCw2ICs4NCw3 IEBADQo+ID4NCj4gPiBJbnRlbFNpbGljb25Qa2cvRmVhdHVyZS9WVGQvUGxhdGZvcm1WVGRJbmZv U2FtcGxlUGVpL1BsDQo+ID4gYXRmb3JtVlRkSW5mb1NhbXBsZVBlaS5pbmYNCj4gPg0KPiA+IElu dGVsU2lsaWNvblBrZy9GZWF0dXJlL0NhcHN1bGUvTWljcm9jb2RlVXBkYXRlRHhlL01pY3INCj4g PiBvY29kZVVwZGF0ZUR4ZS5pbmYNCj4gPg0KPiA+IEludGVsU2lsaWNvblBrZy9GZWF0dXJlL0Nh cHN1bGUvTGlicmFyeS9NaWNyb2NvZGVGbGFzaEENCj4gPiBjY2Vzc0xpYk51bGwvTWljcm9jb2Rl Rmxhc2hBY2Nlc3NMaWJOdWxsLmluZg0KPiA+ICsNCj4gPiBJbnRlbFNpbGljb25Qa2cvRmVhdHVy ZS9TaGFkb3dNaWNyb2NvZGUvU2hhZG93TWljcm9jb2RlDQo+ID4gUGVpLmluZg0KPiA+DQo+ID4g SW50ZWxTaWxpY29uUGtnL0xpYnJhcnkvUGVpRHhlU21tQm9vdE1lZGlhTGliL1BlaUZpcm13YQ0K PiA+IHJlQm9vdE1lZGlhTGliLmluZg0KPiA+DQo+ID4gSW50ZWxTaWxpY29uUGtnL0xpYnJhcnkv UGVpRHhlU21tQm9vdE1lZGlhTGliL0R4ZVNtbUZpcg0KPiA+IG13YXJlQm9vdE1lZGlhTGliLmlu Zg0KPiA+DQo+ID4gLS0NCj4gPiAyLjE5LjEud2luZG93cy4xDQo+ID4NCj4gPg0KPiA+IA0KDQo=