From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by mx.groups.io with SMTP id smtpd.web10.8201.1582089631823204395 for ; Tue, 18 Feb 2020 21:20:32 -0800 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 134.134.136.20, mailfrom: siyuan.fu@intel.com) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 18 Feb 2020 21:20:31 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.70,459,1574150400"; d="scan'208";a="382689938" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by orsmga004.jf.intel.com with ESMTP; 18 Feb 2020 21:20:31 -0800 Received: from fmsmsx123.amr.corp.intel.com (10.18.125.38) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 18 Feb 2020 21:20:30 -0800 Received: from shsmsx104.ccr.corp.intel.com (10.239.4.70) by fmsmsx123.amr.corp.intel.com (10.18.125.38) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 18 Feb 2020 21:20:30 -0800 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.196]) by SHSMSX104.ccr.corp.intel.com ([169.254.5.5]) with mapi id 14.03.0439.000; Wed, 19 Feb 2020 13:20:27 +0800 From: "Siyuan, Fu" To: "Ni, Ray" , "devel@edk2.groups.io" CC: "Kinney, Michael D" , "Chaganty, Rangasai V" Subject: Re: [PATCH v5] IntelSiliconPkg: FIT based shadow microcode PPI support. Thread-Topic: [PATCH v5] IntelSiliconPkg: FIT based shadow microcode PPI support. Thread-Index: AQHV5TO5wKdfnQrH0kyeS1PkhFkvO6ghydPggAAz0uA= Date: Wed, 19 Feb 2020 05:20:26 +0000 Message-ID: References: <2f87cb365f721e89057a5f2eb598bb1221c73ddd.1581903801.git.siyuan.fu@intel.com> <734D49CCEBEEF84792F5B80ED585239D5C44414F@SHSMSX104.ccr.corp.intel.com> In-Reply-To: <734D49CCEBEEF84792F5B80ED585239D5C44414F@SHSMSX104.ccr.corp.intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ctpclassification: CTP_NT x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMzc0NTEyZDEtZmZjNC00YzAzLWE0YTktMjlhNmQ1ZjZhZTRlIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiN0tPcDduVitzc3Z4d1lcL201bnVLcmR1SVpXSnArS1REUVBQRWtIdElTWHpyQnkzOUxXYjBhclc2cmIxblhuNkQifQ== 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 SGksIFJheQ0KDQpUaGUgIiBKdXN0IG9uZSBUeXBlIDAgZW50cnkgaW4gRklUICIgd2lsbCBiZSBj b3ZlcmVkIGJ5IGJlbG93IGNvZGUgd2hlbiBjYWxjdWxhdGluZyB0aGUgbWljcm9jb2RlIGVudHJ5 IG51bWJlci4gSSB3aWxsIHVwZGF0ZSB0aGUgcGF0Y2ggdG8gYWRkcmVzcyB5b3VyIG90aGVyIGNv bW1lbnRzLiBUaGFua3MgZm9yIHRoZSByZXZpZXcuDQoNCiAgLy8NCiAgLy8gQ2FsY3VsYXRlIG1p Y3JvY29kZSBlbnRyeSBudW1iZXINCiAgLy8NCiAgTWF4UGF0Y2hOdW1iZXIgPSAwOw0KICBmb3Ig KEluZGV4ID0gMDsgSW5kZXggPCBFbnRyeU51bTsgSW5kZXgrKykgew0KICAgIGlmIChGaXRFbnRy eVtJbmRleF0uVHlwZSA9PSBGSVRfVFlQRV8wMV9NSUNST0NPREUpIHsNCiAgICAgIE1heFBhdGNo TnVtYmVyKys7DQogICAgfQ0KICB9DQogIGlmIChNYXhQYXRjaE51bWJlciA9PSAwKSB7DQogICAg cmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQogIH0NCg0KQmVzdCBSZWdhcmRzDQpTaXl1YW4gDQoNCj4g LS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTmksIFJheSA8cmF5Lm5pQGludGVs LmNvbT4NCj4gU2VudDogMjAyMMTqMtTCMTnI1SAxMDozMQ0KPiBUbzogRnUsIFNpeXVhbiA8c2l5 dWFuLmZ1QGludGVsLmNvbT47IGRldmVsQGVkazIuZ3JvdXBzLmlvDQo+IENjOiBLaW5uZXksIE1p Y2hhZWwgRCA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+OyBDaGFnYW50eSwgUmFuZ2FzYWkg Vg0KPiA8cmFuZ2FzYWkudi5jaGFnYW50eUBpbnRlbC5jb20+DQo+IFN1YmplY3Q6IFJFOiBbUEFU Q0ggdjVdIEludGVsU2lsaWNvblBrZzogRklUIGJhc2VkIHNoYWRvdyBtaWNyb2NvZGUgUFBJDQo+ IHN1cHBvcnQuDQo+IA0KPiAxLiBFRklBUEkgaXMgbWlzc2luZyBmb3IgU2hhZG93TWljcm9jb2Rl KCkNCj4gMi4gV2hhdCdzIHRoZSByZWFzb24gb2YgY3JlYXRpbmcgYSBzZXBhcmF0ZSBmdW5jdGlv bg0KPiBTaGFkb3dNaWNyb2NvZGVQYXRjaEJ5Rml0ICgpPyBJcyB0aGF0IGJlY2F1c2UgeW91IHRo aW5rIHRoaXMgUEVJTSBtYXkNCj4gc3VwcG9ydCBvdGhlciB1Q29kZSBsb2FkIG1lY2hhbmlzbSB0 aGFuIEZJVD8gSWYgbm8sIGNhbiB5b3UgbWVyZ2UgdGhlDQo+ICpCeUZpdCgpIHRvIFNoYWRvd01p Y3JvY29kZSgpPw0KPiAzLiAiSW52YWxpZCBGSVQgcG9pbnQiIC0+ICJJbnZhbGlkIEZJVCBwb2lu dGVyIg0KPiA0LiBBY2NvcmRpbmcgdG8gRklUIHNwZWMsIEkgdGhpbmsgeW91IG1pc3NlZCB0aHJl ZSBhZGRpdGlvbmFsIGNoZWNrcyBvbiB0aGUgRklUDQo+IEhlYWRlcjoNCj4gICAgIGEpLiBKdXN0 IG9uZSBUeXBlIDAgZW50cnkgaW4gRklUDQo+ICAgICBiKS4gSWYgQ19WIGlzIHNldCwgRklUIHRh YmxlIGNoZWNrc3VtIG11c3QgYmUgMC4NCj4gICAgIGMpLiBWZXJzaW9uIHNob3VsZCBiZSAweDAx MDAuDQo+ICAgICBNb3JlIGNoZWNrcyBjYW4gbWFrZSBzdXJlIHRoYXQgd2UgYXJlIHZpc2l0aW5n IHRoZSByZWFsIEZJVC4gQmVjYXVzZSBmcm9tDQo+IHRoZSBzcGVjLCB3ZSBoYXZlIG5vIG90aGVy IHdheSB0byBrbm93IHdoZXRoZXIgYSBGSVQgcmVhbGx5IGV4aXN0cyBmcm9tIGRhdGENCj4gbm90 IGZyb20gRklUIGl0c2VsZi4NCj4gDQo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4g PiBGcm9tOiBGdSwgU2l5dWFuIDxzaXl1YW4uZnVAaW50ZWwuY29tPg0KPiA+IFNlbnQ6IE1vbmRh eSwgRmVicnVhcnkgMTcsIDIwMjAgOTo0NCBBTQ0KPiA+IFRvOiBkZXZlbEBlZGsyLmdyb3Vwcy5p bw0KPiA+IENjOiBLaW5uZXksIE1pY2hhZWwgRCA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+ OyBOaSwgUmF5DQo+IDxyYXkubmlAaW50ZWwuY29tPjsgQ2hhZ2FudHksIFJhbmdhc2FpIFYNCj4g PiA8cmFuZ2FzYWkudi5jaGFnYW50eUBpbnRlbC5jb20+DQo+ID4gU3ViamVjdDogW1BBVENIIHY1 XSBJbnRlbFNpbGljb25Qa2c6IEZJVCBiYXNlZCBzaGFkb3cgbWljcm9jb2RlIFBQSQ0KPiBzdXBw b3J0Lg0KPiA+DQo+ID4gVjUgQ2hhbmdlczoNCj4gPiBBZGQgRklUIGFkZHJlc3MgY2hlY2sgdG8g c2VlIGlmIGl0J3MgaW4gdmFsaWQgZmlybXdhcmUgcmVnaW9uLg0KPiA+IFY0IENoYW5nZXM6DQo+ ID4gQWRqdXN0IEVES0lJX01JQ1JPQ09ERV9TSEFET1dfSU5GT19IT0Igc3RydWN0dXJlIGRlZmlu aXRpb24gZm9yDQo+ID4gYmV0dGVyIGFsaWdubWVudCBhbmQgdW5kZXJzdGFuZGluZy4NCj4gPiBB ZGQgRUZJX01JQ1JPQ09ERV9TVE9SQUdFX1RZUEVfRkxBU0hfQ09OVEVYVCBzdHJ1Y3R1cmUNCj4g ZGVmaW5pdGlvbi4NCj4gPiBGaXggYSB0eXBvIGluIEVGSV9NSUNST0NPREVfU1RPUkFHRV9UWVBF X0ZMQVNIX0dVSUQuDQo+ID4gTWVyZ2UgU2hhZG93TWljcm9jb2RlUGVpLmggaGVhZGVyIGludG8g YyBmaWxlLg0KPiA+IENvcnJlY3QgZmlsZSBoZWFkZXIgZGVzY3JpcHRpb24gYW5kIGNvcHkgcmln aHQgeWVhci4NCj4gPiBWMyBDaGFuZ2VzOg0KPiA+IFJlbW92ZSB0aGUgZmVhdHVyZSBQQ0QgUGNk Q3B1U2hhZG93TWljcm9jb2RlQnlGaXQgYmVjYXVzZSB0aGUNCj4gPiB3aG9sZSBGSVQgbWljcm9j b2RlIHNoYWRvdyBjb2RlIGlzIG1vdmVkIHRvIHRoaXMgUEVJTSBzbyBwbGF0Zm9ybQ0KPiA+IGNv dWxkIGRpc2FibGUgdGhpcyBmZWF0dXJlIGJ5IG5vdCBpbmNsdWRlIFBFSU0gbm93Lg0KPiA+IFYy IENoYW5nZXM6DQo+ID4gUmVuYW1lIEVES0lJX1BFSV9DUFVfTUlDUk9DT0RFX0lEIHRvIEVES0lJ X1BFSV9NSUNST0NPREVfQ1BVX0lELg0KPiA+DQo+ID4gVGhpcyBwYXRjaCBhZGRzIGEgcGxhdGZv cm0gUEVJTSBmb3IgRklUIGJhc2VkIHNoYWRvdyBtaWNyb2NvZGUgUFBJDQo+ID4gc3VwcG9ydC4g QSBkZXRhaWxlZCBkZXNpZ24gZG9jIGNhbiBiZSBmb3VuZCBoZXJlOg0KPiA+IGh0dHBzOi8vZWRr Mi5ncm91cHMuaW8vZy9kZXZlbC9maWxlcy9EZXNpZ25zLzIwMjAvMDIxNC9TdXBwb3J0JTIwDQo+ ID4gdGhlJTIwMm5kJTIwTWljcm9jb2RlJTIwRlYlMjBGbGFzaCUyMFJlZ2lvbi5wZGYNCj4gPg0K PiA+IFRFU1Q6IFRlc3RlZCBvbiBGSVQgZW5hYmxlZCBwbGF0Zm9ybS4NCj4gPiBCWjogaHR0cHM6 Ly90aWFub2NvcmUuYWNnbXVsdGltZWRpYS5jb20vc2hvd19idWcuY2dpP2lkPTI0NDkNCj4gPg0K PiA+IENjOiBNaWNoYWVsIEQgS2lubmV5IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4NCj4g PiBDYzogUmF5IE5pIDxyYXkubmlAaW50ZWwuY29tPg0KPiA+IENjOiBSYW5nYXNhaSBWIENoYWdh bnR5IDxyYW5nYXNhaS52LmNoYWdhbnR5QGludGVsLmNvbT4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBT aXl1YW4gRnUgPHNpeXVhbi5mdUBpbnRlbC5jb20+DQo+ID4gLS0tDQo+ID4gIC4uLi9TaGFkb3dN aWNyb2NvZGUvU2hhZG93TWljcm9jb2RlUGVpLmMgICAgICB8IDQ0Ng0KPiArKysrKysrKysrKysr KysrKysNCj4gPiAgLi4uL1NoYWRvd01pY3JvY29kZS9TaGFkb3dNaWNyb2NvZGVQZWkuaW5mICAg IHwgIDQzICsrDQo+ID4gIC4uLi9JbmNsdWRlL0d1aWQvTWljcm9jb2RlU2hhZG93SW5mb0hvYi5o ICAgICB8ICA2NCArKysNCj4gPiAgLi4uL0ludGVsL0ludGVsU2lsaWNvblBrZy9JbnRlbFNpbGlj b25Qa2cuZGVjIHwgICA4ICstDQo+ID4gIC4uLi9JbnRlbC9JbnRlbFNpbGljb25Qa2cvSW50ZWxT aWxpY29uUGtnLmRzYyB8ICAgMyArLQ0KPiA+ICA1IGZpbGVzIGNoYW5nZWQsIDU2MiBpbnNlcnRp b25zKCspLCAyIGRlbGV0aW9ucygtKQ0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4gU2lsaWNv bi9JbnRlbC9JbnRlbFNpbGljb25Qa2cvRmVhdHVyZS9TaGFkb3dNaWNyb2NvZGUvU2hhZG93TWlj cm9jb2RlUA0KPiBlaS5jDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiBTaWxpY29uL0ludGVs L0ludGVsU2lsaWNvblBrZy9GZWF0dXJlL1NoYWRvd01pY3JvY29kZS9TaGFkb3dNaWNyb2NvZGVQ DQo+IGVpLmluZg0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4gU2lsaWNvbi9JbnRlbC9JbnRl bFNpbGljb25Qa2cvSW5jbHVkZS9HdWlkL01pY3JvY29kZVNoYWRvd0luZm9Ib2IuaA0KPiA+DQo+ ID4gZGlmZiAtLWdpdA0KPiBhL1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUv U2hhZG93TWljcm9jb2RlL1NoYWRvd01pY3JvY29kDQo+IGVQZWkuYw0KPiA+DQo+IGIvU2lsaWNv bi9JbnRlbC9JbnRlbFNpbGljb25Qa2cvRmVhdHVyZS9TaGFkb3dNaWNyb2NvZGUvU2hhZG93TWlj cm9jb2QNCj4gZVBlaS5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAw MDAwMDAwLi5lMTMwZjYxZmIwDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKw0KPiBiL1NpbGlj b24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUvU2hhZG93TWljcm9jb2RlL1NoYWRvd01p Y3JvY29kDQo+IGVQZWkuYw0KPiA+IEBAIC0wLDAgKzEsNDQ2IEBADQo+ID4gKy8qKiBAZmlsZQ0K PiA+ICsgIEZJVCBiYXNlZCBtaWNyb2NvZGUgc2hhZG93IFBFSU0uDQo+ID4gKw0KPiA+ICtDb3B5 cmlnaHQgKGMpIDIwMjAsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxC Uj4NCj4gPiArU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4g PiArDQo+ID4gKyoqLw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPFBpUGVpLmg+DQo+ID4gKyNpbmNs dWRlIDxQcGkvU2hhZG93TWljcm9jb2RlLmg+DQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L1BlaVNl cnZpY2VzTGliLmg+DQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0hvYkxpYi5oPg0KPiA+ICsjaW5j bHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNlTWVt b3J5TGliLmg+DQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIuaD4N Cj4gPiArI2luY2x1ZGUgPEluZHVzdHJ5U3RhbmRhcmQvRmlybXdhcmVJbnRlcmZhY2VUYWJsZS5o Pg0KPiA+ICsjaW5jbHVkZSA8UmVnaXN0ZXIvSW50ZWwvTWljcm9jb2RlLmg+DQo+ID4gKyNpbmNs dWRlIDxSZWdpc3Rlci9JbnRlbC9DcHVpZC5oPg0KPiA+ICsjaW5jbHVkZSA8R3VpZC9NaWNyb2Nv ZGVTaGFkb3dJbmZvSG9iLmg+DQo+ID4gKy8vDQo+ID4gKy8vIERhdGEgc3RydWN0dXJlIGZvciBt aWNyb2NvZGUgcGF0Y2ggaW5mb3JtYXRpb24NCj4gPiArLy8NCj4gPiArdHlwZWRlZiBzdHJ1Y3Qg ew0KPiA+ICsgIFVJTlROICAgIEFkZHJlc3M7DQo+ID4gKyAgVUlOVE4gICAgU2l6ZTsNCj4gPiAr fSBNSUNST0NPREVfUEFUQ0hfSU5GTzsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFNoYWRvdyBt aWNyb2NvZGUgdXBkYXRlIHBhdGNoZXMgdG8gbWVtb3J5Lg0KPiA+ICsNCj4gPiArICBUaGUgZnVu Y3Rpb24gaXMgdXNlZCBmb3Igc2hhZG93aW5nIG1pY3JvY29kZSB1cGRhdGUgcGF0Y2hlcyB0byBh DQo+IGNvbnRpbnVvdXMgbWVtb3J5Lg0KPiA+ICsgIEl0IHNoYWxsIGFsbG9jYXRlIG1lbW9yeSBi dWZmZXIgYW5kIG9ubHkgc2hhZG93IHRoZSBtaWNyb2NvZGUgcGF0Y2hlcw0KPiBmb3IgdGhvc2UN Cj4gPiArICBwcm9jZXNzb3JzIHNwZWNpZmllZCBieSBNaWNyb2NvZGVDcHVJZCBhcnJheS4gVGhl IGNoZWNrc3VtIHZlcmlmaWNhdGlvbg0KPiBtYXkgYmUNCj4gPiArICBza2lwZWQgaW4gdGhpcyBm dW5jdGlvbiBzbyB0aGUgY2FsbGVyIG11c3QgcGVyZm9ybSBjaGVja3N1bSB2ZXJpZmljYXRpb24N Cj4gYmVmb3JlDQo+ID4gKyAgdXNpbmcgdGhlIG1pY3JvY29kZSBwYXRjaGVzIGluIHJldHVybmVk IG1lbW9yeSBidWZmZXIuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgICAg ICAgICAgIFRoZSBQUEkgaW5zdGFuY2UgcG9pbnRlci4NCj4gPiArICBAcGFyYW1baW5dICBDcHVJ ZENvdW50ICAgICAgICAgICBOdW1iZXIgb2YgZWxlbWVudHMgaW4gTWljcm9jb2RlQ3B1SWQNCj4g YXJyYXkuDQo+ID4gKyAgQHBhcmFtW2luXSAgTWljcm9jb2RlQ3B1SWQgICAgICAgQSBwb2ludGVy IHRvIGFuIGFycmF5IG9mDQo+IEVES0lJX1BFSV9NSUNST0NPREVfQ1BVX0lEDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlcy4NCj4gPiArICBAcGFyYW1b b3V0XSBCdWZmZXJTaXplICAgICAgICAgICBQb2ludGVyIHRvIHJlY2VpdmUgdGhlIHRvdGFsIHNp emUgb2YgQnVmZmVyLg0KPiA+ICsgIEBwYXJhbVtvdXRdIEJ1ZmZlciAgICAgICAgICAgICAgIFBv aW50ZXIgdG8gcmVjZWl2ZSBhZGRyZXNzIG9mIGFsbG9jYXRlZA0KPiBtZW1vcnkNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIG1pY3JvY29kZSBwYXRjaGVzIGRh dGEgaW4gaXQuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAg IFRoZSBtaWNyb2NvZGUgaGFzIGJlZW4gc2hhZG93ZWQgdG8NCj4gbWVtb3J5Lg0KPiA+ICsgIEBy ZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgICAgIFRoZSBvcGVyYXRpb24gZmFpbHMgZHVlIHRv IGxhY2sgb2YNCj4gcmVzb3VyY2VzLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMN Cj4gPiArU2hhZG93TWljcm9jb2RlICgNCj4gPiArICBJTiAgRURLSUlfUEVJX1NIQURPV19NSUNS T0NPREVfUFBJICAgICAgICAqVGhpcywNCj4gPiArICBJTiAgVUlOVE4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBDcHVJZENvdW50LA0KPiA+ICsgIElOICBFREtJSV9QRUlfTUlDUk9D T0RFX0NQVV9JRCAgICAgICAgICAgICpNaWNyb2NvZGVDcHVJZCwNCj4gPiArICBPVVQgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqQnVmZmVyU2l6ZSwNCj4gPiArICBPVVQg Vk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKkJ1ZmZlcg0KPiA+ICsgICk7 DQo+ID4gKw0KPiA+ICsNCj4gPiArRURLSUlfUEVJX1NIQURPV19NSUNST0NPREVfUFBJICAgbVBl aVNoYWRvd01pY3JvY29kZVBwaSA9IHsNCj4gPiArICBTaGFkb3dNaWNyb2NvZGUNCj4gPiArfTsN Cj4gPiArDQo+ID4gKw0KPiA+ICtFRklfUEVJX1BQSV9ERVNDUklQVE9SICAgICAgICAgICBtUGVp U2hhZG93TWljcm9jb2RlUHBpTGlzdFtdID0gew0KPiA+ICsgIHsNCj4gPiArICAgIEVGSV9QRUlf UFBJX0RFU0NSSVBUT1JfUFBJIHwNCj4gRUZJX1BFSV9QUElfREVTQ1JJUFRPUl9URVJNSU5BVEVf TElTVCwNCj4gPiArICAgICZnRWRraWlQZWlTaGFkb3dNaWNyb2NvZGVQcGlHdWlkLA0KPiA+ICsg ICAgJm1QZWlTaGFkb3dNaWNyb2NvZGVQcGkNCj4gPiArICB9DQo+ID4gK307DQo+ID4gKw0KPiA+ ICsvKioNCj4gPiArICBEZXRlcm1pbmUgaWYgYSBtaWNyb2NvZGUgcGF0Y2ggbWF0Y2hzIHRoZSBz cGVjaWZpYyBwcm9jZXNzb3Igc2lnbmF0dXJlDQo+IGFuZCBmbGFnLg0KPiA+ICsNCj4gPiArICBA cGFyYW1baW5dICBDcHVJZENvdW50ICAgICAgICAgICAgTnVtYmVyIG9mIGVsZW1lbnRzIGluIE1p Y3JvY29kZUNwdUlkDQo+IGFycmF5Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIE1pY3JvY29kZUNwdUlk ICAgICAgICBBIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YNCj4gRURLSUlfUEVJX01JQ1JPQ09ERV9D UFVfSUQNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJl cy4NCj4gPiArICBAcGFyYW1baW5dICBQcm9jZXNzb3JTaWduYXR1cmUgICAgVGhlIHByb2Nlc3Nv ciBzaWduYXR1cmUgZmllbGQgdmFsdWUNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3VwcG9ydGVkIGJ5IGEgbWljcm9jb2RlIHBhdGNoLg0KPiA+ICsgIEBwYXJhbVtp bl0gIFByb2Nlc3NvckZsYWdzICAgICAgICBUaGUgcHJjZXNzb3IgZmxhZ3MgZmllbGQgdmFsdWUg c3VwcG9ydGVkDQo+IGJ5DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGEgbWljcm9jb2RlIHBhdGNoLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIFRSVUUgICAgIFRoZSBz cGVjaWZpZWQgbWljcm9jb2RlIHBhdGNoIHdpbGwgYmUgbG9hZGVkLg0KPiA+ICsgIEByZXR2YWwg RkFMU0UgICAgVGhlIHNwZWNpZmllZCBtaWNyb2NvZGUgcGF0Y2ggd2lsbCBub3QgYmUgbG9hZGVk Lg0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ICtJc1Byb2Nlc3Nvck1hdGNoZWRNaWNyb2Nv ZGVQYXRjaCAoDQo+ID4gKyAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3B1 SWRDb3VudCwNCj4gPiArICBJTiAgRURLSUlfUEVJX01JQ1JPQ09ERV9DUFVfSUQgICAgICAqTWlj cm9jb2RlQ3B1SWQsDQo+ID4gKyAgSU4gVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAg UHJvY2Vzc29yU2lnbmF0dXJlLA0KPiA+ICsgIElOIFVJTlQzMiAgICAgICAgICAgICAgICAgICAg ICAgICAgIFByb2Nlc3NvckZsYWdzDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgVUlOVE4gICAg ICAgICAgSW5kZXg7DQo+ID4gKw0KPiA+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IENwdUlk Q291bnQ7IEluZGV4KyspIHsNCj4gPiArICAgIGlmICgoUHJvY2Vzc29yU2lnbmF0dXJlID09IE1p Y3JvY29kZUNwdUlkW0luZGV4XS5Qcm9jZXNzb3JTaWduYXR1cmUpDQo+ICYmDQo+ID4gKyAgICAg ICAgKFByb2Nlc3NvckZsYWdzICYgKDEgPDwgTWljcm9jb2RlQ3B1SWRbSW5kZXhdLlBsYXRmb3Jt SWQpKSAhPSAwKSB7DQo+ID4gKyAgICAgIHJldHVybiBUUlVFOw0KPiA+ICsgICAgfQ0KPiA+ICsg IH0NCj4gPiArDQo+ID4gKyAgcmV0dXJuIEZBTFNFOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioN Cj4gPiArICBDaGVjayB0aGUgJ1Byb2Nlc3NvclNpZ25hdHVyZScgYW5kICdQcm9jZXNzb3JGbGFn cycgb2YgdGhlIG1pY3JvY29kZQ0KPiA+ICsgIHBhdGNoIGhlYWRlciB3aXRoIHRoZSBDUFVJRCBh bmQgUGxhdGZvcm1JRCBvZiB0aGUgcHJvY2Vzc29ycyB3aXRoaW4NCj4gPiArICBzeXN0ZW0gdG8g ZGVjaWRlIGlmIGl0IHdpbGwgYmUgY29waWVkIGludG8gbWVtb3J5Lg0KPiA+ICsNCj4gPiArICBA cGFyYW1baW5dICBDcHVJZENvdW50ICAgICAgICAgICAgTnVtYmVyIG9mIGVsZW1lbnRzIGluIE1p Y3JvY29kZUNwdUlkDQo+IGFycmF5Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIE1pY3JvY29kZUNwdUlk ICAgICAgICBBIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YNCj4gRURLSUlfUEVJX01JQ1JPQ09ERV9D UFVfSUQNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJl cy4NCj4gPiArICBAcGFyYW1baW5dICBNaWNyb2NvZGVFbnRyeVBvaW50ICAgVGhlIHBvaW50ZXIg dG8gdGhlIG1pY3JvY29kZSBwYXRjaA0KPiBoZWFkZXIuDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwg VFJVRSAgICAgVGhlIHNwZWNpZmllZCBtaWNyb2NvZGUgcGF0Y2ggbmVlZCB0byBiZSBsb2FkZWQu DQo+ID4gKyAgQHJldHZhbCBGQUxTRSAgICBUaGUgc3BlY2lmaWVkIG1pY3JvY29kZSBwYXRjaCBk b3Nlbid0IG5lZWQgdG8gYmUNCj4gbG9hZGVkLg0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ ICtJc01pY3JvY29kZVBhdGNoTmVlZExvYWQgKA0KPiA+ICsgIElOICBVSU5UTiAgICAgICAgICAg ICAgICAgICAgICAgICBDcHVJZENvdW50LA0KPiA+ICsgIElOICBFREtJSV9QRUlfTUlDUk9DT0RF X0NQVV9JRCAgICAqTWljcm9jb2RlQ3B1SWQsDQo+ID4gKyAgQ1BVX01JQ1JPQ09ERV9IRUFERVIg ICAgICAgICAgICAgICpNaWNyb2NvZGVFbnRyeVBvaW50DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4g KyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmVlZExvYWQ7DQo+ID4g KyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YVNpemU7DQo+ID4g KyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG90YWxTaXplOw0KPiA+ ICsgIENQVV9NSUNST0NPREVfRVhURU5ERURfVEFCTEVfSEVBREVSICAgICpFeHRlbmRlZFRhYmxl SGVhZGVyOw0KPiA+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4 dGVuZGVkVGFibGVDb3VudDsNCj4gPiArICBDUFVfTUlDUk9DT0RFX0VYVEVOREVEX1RBQkxFICAg ICAgICAgICAqRXh0ZW5kZWRUYWJsZTsNCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBJbmRleDsNCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBDaGVjayB0 aGUgJ1Byb2Nlc3NvclNpZ25hdHVyZScgYW5kICdQcm9jZXNzb3JGbGFncycgaW4gbWljcm9jb2Rl DQo+IHBhdGNoIGhlYWRlci4NCj4gPiArICAvLw0KPiA+ICsgIE5lZWRMb2FkID0gSXNQcm9jZXNz b3JNYXRjaGVkTWljcm9jb2RlUGF0Y2ggKA0KPiA+ICsgICAgICAgICAgICAgICBDcHVJZENvdW50 LA0KPiA+ICsgICAgICAgICAgICAgICBNaWNyb2NvZGVDcHVJZCwNCj4gPiArICAgICAgICAgICAg ICAgTWljcm9jb2RlRW50cnlQb2ludC0+UHJvY2Vzc29yU2lnbmF0dXJlLlVpbnQzMiwNCj4gPiAr ICAgICAgICAgICAgICAgTWljcm9jb2RlRW50cnlQb2ludC0+UHJvY2Vzc29yRmxhZ3MNCj4gPiAr ICAgICAgICAgICAgICAgKTsNCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBJZiB0aGUgRXh0 ZW5kZWQgU2lnbmF0dXJlIFRhYmxlIGV4aXN0cywgY2hlY2sgaWYgdGhlIHByb2Nlc3NvciBpcyBp biB0aGUNCj4gPiArICAvLyBzdXBwb3J0IGxpc3QNCj4gPiArICAvLw0KPiA+ICsgIERhdGFTaXpl ICA9IE1pY3JvY29kZUVudHJ5UG9pbnQtPkRhdGFTaXplOw0KPiA+ICsgIFRvdGFsU2l6ZSA9IChE YXRhU2l6ZSA9PSAwKSA/IDIwNDggOiBNaWNyb2NvZGVFbnRyeVBvaW50LT5Ub3RhbFNpemU7DQo+ ID4gKyAgaWYgKCghTmVlZExvYWQpICYmIChEYXRhU2l6ZSAhPSAwKSAmJg0KPiA+ICsgICAgICAo VG90YWxTaXplIC0gRGF0YVNpemUgPiBzaXplb2YgKENQVV9NSUNST0NPREVfSEVBREVSKSArDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoQ1BVX01JQ1JPQ09ERV9F WFRFTkRFRF9UQUJMRV9IRUFERVIpKSkNCj4gew0KPiA+ICsgICAgRXh0ZW5kZWRUYWJsZUhlYWRl ciA9IChDUFVfTUlDUk9DT0RFX0VYVEVOREVEX1RBQkxFX0hFQURFUg0KPiAqKSAoKFVJTlQ4ICop IChNaWNyb2NvZGVFbnRyeVBvaW50KQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg KyBEYXRhU2l6ZSArIHNpemVvZiAoQ1BVX01JQ1JPQ09ERV9IRUFERVIpKTsNCj4gPiArICAgIEV4 dGVuZGVkVGFibGVDb3VudCAgPSBFeHRlbmRlZFRhYmxlSGVhZGVyLT5FeHRlbmRlZFNpZ25hdHVy ZUNvdW50Ow0KPiA+ICsgICAgRXh0ZW5kZWRUYWJsZSAgICAgICA9IChDUFVfTUlDUk9DT0RFX0VY VEVOREVEX1RBQkxFICopDQo+IChFeHRlbmRlZFRhYmxlSGVhZGVyICsgMSk7DQo+ID4gKw0KPiA+ ICsgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgRXh0ZW5kZWRUYWJsZUNvdW50OyBJbmRleCAr Kykgew0KPiA+ICsgICAgICAvLw0KPiA+ICsgICAgICAvLyBDaGVjayB0aGUgJ1Byb2Nlc3NvclNp Z25hdHVyZScgYW5kICdQcm9jZXNzb3JGbGFnJyBvZiB0aGUgRXh0ZW5kZWQNCj4gPiArICAgICAg Ly8gU2lnbmF0dXJlIFRhYmxlIGVudHJ5IHdpdGggdGhlIENQVUlEIGFuZCBQbGF0Zm9ybUlEIG9m IHRoZQ0KPiBwcm9jZXNzb3JzDQo+ID4gKyAgICAgIC8vIHdpdGhpbiBzeXN0ZW0gdG8gZGVjaWRl IGlmIGl0IHdpbGwgYmUgY29waWVkIGludG8gbWVtb3J5DQo+ID4gKyAgICAgIC8vDQo+ID4gKyAg ICAgIE5lZWRMb2FkID0gSXNQcm9jZXNzb3JNYXRjaGVkTWljcm9jb2RlUGF0Y2ggKA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgQ3B1SWRDb3VudCwNCj4gPiArICAgICAgICAgICAgICAgICAgIE1p Y3JvY29kZUNwdUlkLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgRXh0ZW5kZWRUYWJsZS0+UHJv Y2Vzc29yU2lnbmF0dXJlLlVpbnQzMiwNCj4gPiArICAgICAgICAgICAgICAgICAgIEV4dGVuZGVk VGFibGUtPlByb2Nlc3NvckZsYWcNCj4gPiArICAgICAgICAgICAgICAgICAgICk7DQo+ID4gKyAg ICAgIGlmIChOZWVkTG9hZCkgew0KPiA+ICsgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICB9DQo+ ID4gKyAgICAgIEV4dGVuZGVkVGFibGUgKys7DQo+ID4gKyAgICB9DQo+ID4gKyAgfQ0KPiA+ICsN Cj4gPiArICByZXR1cm4gTmVlZExvYWQ7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsg IEFjdHVhbCB3b3JrZXIgZnVuY3Rpb24gdGhhdCBzaGFkb3dzIHRoZSByZXF1aXJlZCBtaWNyb2Nv ZGUgcGF0Y2hlcw0KPiBpbnRvIG1lbW9yeS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgICAg ICBQYXRjaGVzICAgICAgICAgIFRoZSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIGluZm9ybWF0aW9u IG9uDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtaWNyb2Nv ZGUgcGF0Y2hlcyB0aGF0IHdpbGwgYmUgbG9hZGVkDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludG8gbWVtb3J5Lg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgICAgUGF0 Y2hDb3VudCAgICAgICBUaGUgbnVtYmVyIG9mIG1pY3JvY29kZSBwYXRjaGVzIHRoYXQNCj4gd2ls bA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBsb2FkZWQgaW50 byBtZW1vcnkuDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgICBUb3RhbExvYWRTaXplICAgIFRoZSB0 b3RhbCBzaXplIG9mIGFsbCB0aGUgbWljcm9jb2RlDQo+IHBhdGNoZXMNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmUgbG9hZGVkLg0KPiA+ICsgIEBwYXJhbVtv dXRdIEJ1ZmZlclNpemUgICAgICAgICAgICBQb2ludGVyIHRvIHJlY2VpdmUgdGhlIHRvdGFsIHNp emUgb2YgQnVmZmVyLg0KPiA+ICsgIEBwYXJhbVtvdXRdIEJ1ZmZlciAgICAgICAgICAgICAgICBQ b2ludGVyIHRvIHJlY2VpdmUgYWRkcmVzcyBvZiBhbGxvY2F0ZWQNCj4gbWVtb3J5DQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggbWljcm9jb2RlIHBhdGNoZXMg ZGF0YSBpbiBpdC4NCj4gPiArKiovDQo+ID4gK1ZPSUQNCj4gPiArU2hhZG93TWljcm9jb2RlUGF0 Y2hXb3JrZXIgKA0KPiA+ICsgIElOICBNSUNST0NPREVfUEFUQ0hfSU5GTyAgICAgICAqUGF0Y2hl cywNCj4gPiArICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgUGF0Y2hDb3VudCwNCj4g PiArICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgVG90YWxMb2FkU2l6ZSwNCj4gPiAr ICBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZlclNpemUsDQo+ID4gKyAgT1VU IFZPSUQgICAgICAgICAgICAgICAgICAgICAgICoqQnVmZmVyDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ ID4gKyAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKk1pY3JvY29k ZVBhdGNoSW5SYW07DQo+ID4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKldhbGtlcjsNCj4gPiArICBFREtJSV9NSUNST0NPREVfU0hBRE9XX0lORk9fSE9CICAg ICAgICAgICAqTWljcm9jb2RlU2hhZG93SG9iOw0KPiA+ICsgIFVJTlROICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEhvYkRhdGFMZW5ndGg7DQo+ID4gKyAgVUlOVDY0ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKk1pY3JvY29kZUFkZHJlc3NJbk1lbW9yeTsN Cj4gPiArICBFRklfTUlDUk9DT0RFX1NUT1JBR0VfVFlQRV9GTEFTSF9DT05URVhUICAqRmxhc2hj b250ZXh0Ow0KPiA+ICsNCj4gPiArICBBU1NFUlQgKChQYXRjaGVzICE9IE5VTEwpICYmIChQYXRj aENvdW50ICE9IDApKTsNCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBJbml0IG1pY3JvY29k ZSBzaGFkb3cgaW5mbyBIT0IgY29udGVudC4NCj4gPiArICAvLw0KPiA+ICsgIEhvYkRhdGFMZW5n dGggPSBzaXplb2YgKEVES0lJX01JQ1JPQ09ERV9TSEFET1dfSU5GT19IT0IpICsNCj4gPiArICAg ICAgICAgICAgICAgICAgc2l6ZW9mIChVSU5UNjQpICogUGF0Y2hDb3VudCAqIDI7DQo+ID4gKyAg TWljcm9jb2RlU2hhZG93SG9iICA9IEFsbG9jYXRlUG9vbCAoSG9iRGF0YUxlbmd0aCk7DQo+ID4g KyAgaWYgKE1pY3JvY29kZVNoYWRvd0hvYiA9PSBOVUxMKSB7DQo+ID4gKyAgICBBU1NFUlQgKEZB TFNFKTsNCj4gPiArICAgIHJldHVybjsNCj4gPiArICB9DQo+ID4gKyAgTWljcm9jb2RlU2hhZG93 SG9iLT5NaWNyb2NvZGVDb3VudCA9IFBhdGNoQ291bnQ7DQo+ID4gKyAgQ29weUd1aWQgKA0KPiA+ ICsgICAgJk1pY3JvY29kZVNoYWRvd0hvYi0+U3RvcmFnZVR5cGUsDQo+ID4gKyAgICAmZ0Vka2lp TWljcm9jb2RlU3RvcmFnZVR5cGVGbGFzaEd1aWQNCj4gPiArICAgICk7DQo+ID4gKyAgTWljcm9j b2RlQWRkcmVzc0luTWVtb3J5ID0gKFVJTlQ2NCAqKSAoTWljcm9jb2RlU2hhZG93SG9iICsgMSk7 DQo+ID4gKyAgRmxhc2hjb250ZXh0ID0gKEVGSV9NSUNST0NPREVfU1RPUkFHRV9UWVBFX0ZMQVNI X0NPTlRFWFQgKikNCj4gKE1pY3JvY29kZUFkZHJlc3NJbk1lbW9yeSArIFBhdGNoQ291bnQpOw0K PiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIEFsbG9jYXRlIG1lbW9yeSBmb3IgbWljcm9jb2Rl IHNoYWRvdyBvcGVyYXRpb24uDQo+ID4gKyAgLy8NCj4gPiArICBNaWNyb2NvZGVQYXRjaEluUmFt ID0gQWxsb2NhdGVQYWdlcyAoRUZJX1NJWkVfVE9fUEFHRVMNCj4gKFRvdGFsTG9hZFNpemUpKTsN Cj4gPiArICBpZiAoTWljcm9jb2RlUGF0Y2hJblJhbSA9PSBOVUxMKSB7DQo+ID4gKyAgICBBU1NF UlQgKEZBTFNFKTsNCj4gPiArICAgIHJldHVybjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8v DQo+ID4gKyAgLy8gU2hhZG93IGFsbCB0aGUgcmVxdWlyZWQgbWljcm9jb2RlIHBhdGNoZXMgaW50 byBtZW1vcnkNCj4gPiArICAvLw0KPiA+ICsgIGZvciAoV2Fsa2VyID0gTWljcm9jb2RlUGF0Y2hJ blJhbSwgSW5kZXggPSAwOyBJbmRleCA8IFBhdGNoQ291bnQ7DQo+IEluZGV4KyspIHsNCj4gPiAr ICAgIENvcHlNZW0gKA0KPiA+ICsgICAgICBXYWxrZXIsDQo+ID4gKyAgICAgIChWT0lEICopIFBh dGNoZXNbSW5kZXhdLkFkZHJlc3MsDQo+ID4gKyAgICAgIFBhdGNoZXNbSW5kZXhdLlNpemUNCj4g PiArICAgICAgKTsNCj4gPiArICAgIE1pY3JvY29kZUFkZHJlc3NJbk1lbW9yeVtJbmRleF0gPSAo VUlOVDY0KSBXYWxrZXI7DQo+ID4gKyAgICBGbGFzaGNvbnRleHQtPk1pY3JvY29kZUFkZHJlc3NJ bkZsYXNoW0luZGV4XSAgPSAoVUlOVDY0KQ0KPiBQYXRjaGVzW0luZGV4XS5BZGRyZXNzOw0KPiA+ ICsgICAgV2Fsa2VyICs9IFBhdGNoZXNbSW5kZXhdLlNpemU7DQo+ID4gKyAgfQ0KPiA+ICsNCj4g PiArICAvLw0KPiA+ICsgIC8vIFVwZGF0ZSB0aGUgbWljcm9jb2RlIHBhdGNoIHJlbGF0ZWQgZmll bGRzIGluIENwdU1wRGF0YQ0KPiA+ICsgIC8vDQo+ID4gKyAgKkJ1ZmZlciAgICAgPSAoVk9JRCAq KSAoVUlOVE4pIE1pY3JvY29kZVBhdGNoSW5SYW07DQo+ID4gKyAgKkJ1ZmZlclNpemUgPSBUb3Rh bExvYWRTaXplOw0KPiA+ICsNCj4gPiArICBCdWlsZEd1aWREYXRhSG9iICgNCj4gPiArICAgICZn RWRraWlNaWNyb2NvZGVTaGFkb3dJbmZvSG9iR3VpZCwNCj4gPiArICAgIE1pY3JvY29kZVNoYWRv d0hvYiwNCj4gPiArICAgIEhvYkRhdGFMZW5ndGgNCj4gPiArICAgICk7DQo+ID4gKw0KPiA+ICsg IERFQlVHICgoDQo+ID4gKyAgICBERUJVR19JTkZPLA0KPiA+ICsgICAgIiVhOiBSZXF1aXJlZCBt aWNyb2NvZGUgcGF0Y2hlcyBoYXZlIGJlZW4gbG9hZGVkIGF0IDB4JWx4LCB3aXRoIHNpemUNCj4g MHglbHguXG4iLA0KPiA+ICsgICAgX19GVU5DVElPTl9fLCAqQnVmZmVyLCAqQnVmZmVyU2l6ZQ0K PiA+ICsgICAgKSk7DQo+ID4gKw0KPiA+ICsgIHJldHVybjsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr LyoqDQo+ID4gKyAgU2hhZG93IHRoZSByZXF1aXJlZCBtaWNyb2NvZGUgcGF0Y2hlcyBkYXRhIGlu dG8gbWVtb3J5IGFjY29yZGluZw0KPiA+ICsgIHRvIEZJVCBtaWNyb2NvZGUgZW50cnkuDQo+ID4g Kw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtTaGFkb3dNaWNyb2NvZGVQYXRjaEJ5 Rml0ICgNCj4gPiArICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD cHVJZENvdW50LA0KPiA+ICsgIElOICBFREtJSV9QRUlfTUlDUk9DT0RFX0NQVV9JRCAgICAgICAg ICAgICpNaWNyb2NvZGVDcHVJZCwNCj4gPiArICBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqQnVmZmVyU2l6ZSwNCj4gPiArICBPVVQgVk9JRCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqKkJ1ZmZlcg0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIFVJ TlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXRQb2ludGVyOw0KPiA+ICsgIFVJTlQ2 NCAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXRFbmRpbmc7DQo+ID4gKyAgRklSTVdBUkVf SU5URVJGQUNFX1RBQkxFX0VOVFJZICAgICpGaXRFbnRyeTsNCj4gPiArICBVSU5UMzIgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRW50cnlOdW07DQo+ID4gKyAgVUlOVDMyICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEluZGV4Ow0KPiA+ICsgIE1JQ1JPQ09ERV9QQVRDSF9JTkZPICAgICAg ICAgICAgICAqUGF0Y2hJbmZvQnVmZmVyOw0KPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBNYXhQYXRjaE51bWJlcjsNCj4gPiArICBDUFVfTUlDUk9DT0RFX0hFQURFUiAg ICAgICAgICAgICAgKk1pY3JvY29kZUVudHJ5UG9pbnQ7DQo+ID4gKyAgVUlOVE4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFBhdGNoQ291bnQ7DQo+ID4gKyAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFRvdGFsU2l6ZTsNCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVG90YWxMb2FkU2l6ZTsNCj4gPiArDQo+ID4gKyAgRml0UG9pbnRlciA9ICoo VUlOVDY0ICopIChVSU5UTikgRklUX1BPSU5URVJfQUREUkVTUzsNCj4gPiArDQo+ID4gKyAgLy8N Cj4gPiArICAvLyBUaGUgZW50aXJlIEZJVCB0YWJsZSBtdXN0IHJlc2lkZSB3aXRoIGluIHRoZSBm aXJtd2FyZSBhZGRyZXNzIHJhbmdlDQo+ID4gKyAgLy8gb2YgKDRHQi0xNk1CKSB0byAoNEdCLTQw aCkuDQo+ID4gKyAgLy8NCj4gPiArICBpZiAoKEZpdFBvaW50ZXIgPCAoU0laRV80R0IgLSBTSVpF XzE2TUIpKSB8fCAoRml0UG9pbnRlciA+PSAoU0laRV80R0IgLQ0KPiAweDQwKSkpIHsNCj4gPiAr ICAgIC8vDQo+ID4gKyAgICAvLyBJbnZhbGlkIEZJVCBhZGRyZXNzLCB0cmVhdCBpdCBhcyBubyBG SVQgdGFibGUuDQo+ID4gKyAgICAvLw0KPiA+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkVy cm9yOiBJbnZhbGlkIEZJVCBwb2ludCAweCVwLlxuIiwgRml0UG9pbnRlcikpOw0KPiA+ICsgICAg cmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+ID4gKyAgfQ0KPiA+ICsgIEZpdEVudHJ5ID0gKEZJUk1X QVJFX0lOVEVSRkFDRV9UQUJMRV9FTlRSWSAqKSAoVUlOVE4pIEZpdFBvaW50ZXI7DQo+ID4gKyAg aWYgKChGaXRFbnRyeVswXS5UeXBlICE9IEZJVF9UWVBFXzAwX0hFQURFUikgfHwNCj4gPiArICAg ICAgKEZpdEVudHJ5WzBdLkFkZHJlc3MgIT0gRklUX1RZUEVfMDBfU0lHTkFUVVJFKSkgew0KPiA+ ICsgICAgLy8NCj4gPiArICAgIC8vIEludmFsaWQgRklUIGhlYWRlciwgdHJlYXQgaXQgYXMgbm8g RklUIHRhYmxlLg0KPiA+ICsgICAgLy8NCj4gPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICJF cnJvcjogSW52YWxpZCBGSVQgaGVhZGVyLlxuIikpOw0KPiA+ICsgICAgcmV0dXJuIEVGSV9OT1Rf Rk9VTkQ7DQo+ID4gKyAgfQ0KPiA+ICsgIEVudHJ5TnVtID0gKihVSU5UMzIgKikoJkZpdEVudHJ5 WzBdLlNpemVbMF0pICYgMHhGRkZGRkY7DQo+ID4gKyAgRml0RW5kaW5nID0gRml0UG9pbnRlciAr IHNpemVvZiAoRklSTVdBUkVfSU5URVJGQUNFX1RBQkxFX0VOVFJZKSAqDQo+IEVudHJ5TnVtOw0K PiA+ICsgIGlmIChGaXRFbmRpbmcgID4gKFNJWkVfNEdCIC0gMHg0MCkpIHsNCj4gPiArICAgIC8v DQo+ID4gKyAgICAvLyBJbnZhbGlkIEZJVCBlbmRpbmcgYWRkcmVzcywgdHJlYXQgaXQgYXMgbm8g RklUIHRhYmxlLg0KPiA+ICsgICAgLy8NCj4gPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICJF cnJvcjogRklUIHRhYmxlIGV4Y2VlZHMgdmFsaWQgcmFuZ2UuXG4iKSk7DQo+ID4gKyAgICByZXR1 cm4gRUZJX05PVF9GT1VORDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8g Q2FsY3VsYXRlIG1pY3JvY29kZSBlbnRyeSBudW1iZXINCj4gPiArICAvLw0KPiA+ICsgIE1heFBh dGNoTnVtYmVyID0gMDsNCj4gPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBFbnRyeU51bTsg SW5kZXgrKykgew0KPiA+ICsgICAgaWYgKEZpdEVudHJ5W0luZGV4XS5UeXBlID09IEZJVF9UWVBF XzAxX01JQ1JPQ09ERSkgew0KPiA+ICsgICAgICBNYXhQYXRjaE51bWJlcisrOw0KPiA+ICsgICAg fQ0KPiA+ICsgIH0NCj4gPiArICBpZiAoTWF4UGF0Y2hOdW1iZXIgPT0gMCkgew0KPiA+ICsgICAg cmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBQYXRjaEluZm9C dWZmZXIgPSBBbGxvY2F0ZVBvb2wgKE1heFBhdGNoTnVtYmVyICogc2l6ZW9mDQo+IChNSUNST0NP REVfUEFUQ0hfSU5GTykpOw0KPiA+ICsgIGlmIChQYXRjaEluZm9CdWZmZXIgPT0gTlVMTCkgew0K PiA+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ICsgIH0NCj4gPiArDQo+ ID4gKyAgLy8NCj4gPiArICAvLyBGaWxsIHVwIG1pY3JvY29kZSBwYXRjaCBpbmZvIGJ1ZmZlciBh Y2NvcmRpbmcgdG8gRklUIHRhYmxlLg0KPiA+ICsgIC8vDQo+ID4gKyAgUGF0Y2hDb3VudCA9IDA7 DQo+ID4gKyAgVG90YWxMb2FkU2l6ZSA9IDA7DQo+ID4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4 IDwgRW50cnlOdW07IEluZGV4KyspIHsNCj4gPiArICAgIGlmIChGaXRFbnRyeVtJbmRleF0uVHlw ZSA9PSBGSVRfVFlQRV8wMV9NSUNST0NPREUpIHsNCj4gPiArICAgICAgTWljcm9jb2RlRW50cnlQ b2ludCA9IChDUFVfTUlDUk9DT0RFX0hFQURFUiAqKSAoVUlOVE4pDQo+IEZpdEVudHJ5W0luZGV4 XS5BZGRyZXNzOw0KPiA+ICsgICAgICBUb3RhbFNpemUgPSAoTWljcm9jb2RlRW50cnlQb2ludC0+ RGF0YVNpemUgPT0gMCkgPyAyMDQ4IDoNCj4gTWljcm9jb2RlRW50cnlQb2ludC0+VG90YWxTaXpl Ow0KPiA+ICsgICAgICBpZiAoSXNNaWNyb2NvZGVQYXRjaE5lZWRMb2FkIChDcHVJZENvdW50LCBN aWNyb2NvZGVDcHVJZCwNCj4gTWljcm9jb2RlRW50cnlQb2ludCkpIHsNCj4gPiArICAgICAgICBQ YXRjaEluZm9CdWZmZXJbUGF0Y2hDb3VudF0uQWRkcmVzcyAgICAgPSAoVUlOVE4pDQo+IE1pY3Jv Y29kZUVudHJ5UG9pbnQ7DQo+ID4gKyAgICAgICAgUGF0Y2hJbmZvQnVmZmVyW1BhdGNoQ291bnRd LlNpemUgICAgICAgID0gVG90YWxTaXplOw0KPiA+ICsgICAgICAgIFRvdGFsTG9hZFNpemUgKz0g VG90YWxTaXplOw0KPiA+ICsgICAgICAgIFBhdGNoQ291bnQrKzsNCj4gPiArICAgICAgfQ0KPiA+ ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKFBhdGNoQ291bnQgIT0gMCkgew0K PiA+ICsgICAgREVCVUcgKCgNCj4gPiArICAgICAgREVCVUdfSU5GTywNCj4gPiArICAgICAgIiVh OiAweCV4IG1pY3JvY29kZSBwYXRjaGVzIHdpbGwgYmUgbG9hZGVkIGludG8gbWVtb3J5LCB3aXRo IHNpemUNCj4gMHgleC5cbiIsDQo+ID4gKyAgICAgIF9fRlVOQ1RJT05fXywgUGF0Y2hDb3VudCwg VG90YWxMb2FkU2l6ZQ0KPiA+ICsgICAgICApKTsNCj4gPiArDQo+ID4gKyAgICBTaGFkb3dNaWNy b2NvZGVQYXRjaFdvcmtlciAoUGF0Y2hJbmZvQnVmZmVyLCBQYXRjaENvdW50LA0KPiBUb3RhbExv YWRTaXplLCBCdWZmZXJTaXplLCBCdWZmZXIpOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgRnJl ZVBvb2wgKFBhdGNoSW5mb0J1ZmZlcik7DQo+ID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgU2hhZG93IG1pY3JvY29kZSB1cGRh dGUgcGF0Y2hlcyB0byBtZW1vcnkuDQo+ID4gKw0KPiA+ICsgIFRoZSBmdW5jdGlvbiBpcyB1c2Vk IGZvciBzaGFkb3dpbmcgbWljcm9jb2RlIHVwZGF0ZSBwYXRjaGVzIHRvIGENCj4gY29udGludW91 cyBtZW1vcnkuDQo+ID4gKyAgSXQgc2hhbGwgYWxsb2NhdGUgbWVtb3J5IGJ1ZmZlciBhbmQgb25s eSBzaGFkb3cgdGhlIG1pY3JvY29kZSBwYXRjaGVzDQo+IGZvciB0aG9zZQ0KPiA+ICsgIHByb2Nl c3NvcnMgc3BlY2lmaWVkIGJ5IE1pY3JvY29kZUNwdUlkIGFycmF5LiBUaGUgY2hlY2tzdW0gdmVy aWZpY2F0aW9uDQo+IG1heSBiZQ0KPiA+ICsgIHNraXBlZCBpbiB0aGlzIGZ1bmN0aW9uIHNvIHRo ZSBjYWxsZXIgbXVzdCBwZXJmb3JtIGNoZWNrc3VtIHZlcmlmaWNhdGlvbg0KPiBiZWZvcmUNCj4g PiArICB1c2luZyB0aGUgbWljcm9jb2RlIHBhdGNoZXMgaW4gcmV0dXJuZWQgbWVtb3J5IGJ1ZmZl ci4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgICAgICAgVGhlIFBQ SSBpbnN0YW5jZSBwb2ludGVyLg0KPiA+ICsgIEBwYXJhbVtpbl0gIENwdUlkQ291bnQgICAgICAg ICAgIE51bWJlciBvZiBlbGVtZW50cyBpbiBNaWNyb2NvZGVDcHVJZA0KPiBhcnJheS4NCj4gPiAr ICBAcGFyYW1baW5dICBNaWNyb2NvZGVDcHVJZCAgICAgICBBIHBvaW50ZXIgdG8gYW4gYXJyYXkg b2YNCj4gRURLSUlfUEVJX01JQ1JPQ09ERV9DUFVfSUQNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVzLg0KPiA+ICsgIEBwYXJhbVtvdXRdIEJ1ZmZlclNp emUgICAgICAgICAgIFBvaW50ZXIgdG8gcmVjZWl2ZSB0aGUgdG90YWwgc2l6ZSBvZiBCdWZmZXIu DQo+ID4gKyAgQHBhcmFtW291dF0gQnVmZmVyICAgICAgICAgICAgICAgUG9pbnRlciB0byByZWNl aXZlIGFkZHJlc3Mgb2YgYWxsb2NhdGVkDQo+IG1lbW9yeQ0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHdpdGggbWljcm9jb2RlIHBhdGNoZXMgZGF0YSBpbiBpdC4NCj4g PiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgVGhlIG1pY3JvY29k ZSBoYXMgYmVlbiBzaGFkb3dlZCB0bw0KPiBtZW1vcnkuDQo+ID4gKyAgQHJldHZhbCBFRklfT1VU X09GX1JFU09VUkNFUyAgICAgVGhlIG9wZXJhdGlvbiBmYWlscyBkdWUgdG8gbGFjayBvZg0KPiBy ZXNvdXJjZXMuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtTaGFkb3dN aWNyb2NvZGUgKA0KPiA+ICsgIElOICBFREtJSV9QRUlfU0hBRE9XX01JQ1JPQ09ERV9QUEkgICAg ICAgICpUaGlzLA0KPiA+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIENwdUlkQ291bnQsDQo+ID4gKyAgSU4gIEVES0lJX1BFSV9NSUNST0NPREVfQ1BVX0lEICAg ICAgICAgICAgKk1pY3JvY29kZUNwdUlkLA0KPiA+ICsgIE9VVCBVSU5UTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICpCdWZmZXJTaXplLA0KPiA+ICsgIE9VVCBWT0lEICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICoqQnVmZmVyDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4g KyAgaWYgKEJ1ZmZlclNpemUgPT0gTlVMTCB8fCBCdWZmZXIgPT0gTlVMTCkgew0KPiA+ICsgICAg cmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIHJl dHVybiBTaGFkb3dNaWNyb2NvZGVQYXRjaEJ5Rml0IChDcHVJZENvdW50LCBNaWNyb2NvZGVDcHVJ ZCwNCj4gQnVmZmVyU2l6ZSwgQnVmZmVyKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgIFBsYXRmb3JtIEluaXQgUEVJIG1vZHVsZSBlbnRyeSBwb2ludA0KPiA+ICsNCj4g PiArICBAcGFyYW1baW5dICBGaWxlSGFuZGxlICAgICAgICAgICBOb3QgdXNlZC4NCj4gPiArICBA cGFyYW1baW5dICBQZWlTZXJ2aWNlcyAgICAgICAgICBHZW5lcmFsIHB1cnBvc2Ugc2VydmljZXMg YXZhaWxhYmxlIHRvDQo+IGV2ZXJ5IFBFSU0uDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgICAgIEVG SV9TVUNDRVNTICAgICAgICAgIFRoZSBmdW5jdGlvbiBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5DQo+ ID4gKyAgQHJldHZhbCAgICAgRUZJX09VVF9PRl9SRVNPVVJDRVMgSW5zdWZmaWNpZW50IHJlc291 cmNlcyB0byBjcmVhdGUNCj4gZGF0YWJhc2UNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4g PiArRUZJQVBJDQo+ID4gK1NoYWRvd01pY3JvY29kZVBlaW1Jbml0ICgNCj4gPiArICBJTiAgICAg ICBFRklfUEVJX0ZJTEVfSEFORExFICBGaWxlSGFuZGxlLA0KPiA+ICsgIElOIENPTlNUIEVGSV9Q RUlfU0VSVklDRVMgICAgICoqUGVpU2VydmljZXMNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBF RklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4gKw0KPiA+ICsgIC8v DQo+ID4gKyAgLy8gSW5zdGFsbCBFREtJSSBTaGFkb3cgTWljcm9jb2RlIFBQSQ0KPiA+ICsgIC8v DQo+ID4gKyAgU3RhdHVzID0gUGVpU2VydmljZXNJbnN0YWxsUHBpKG1QZWlTaGFkb3dNaWNyb2Nv ZGVQcGlMaXN0KTsNCj4gPiArICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+ICsNCj4g PiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICt9DQo+ID4gZGlmZiAtLWdpdA0KPiBhL1NpbGljb24v SW50ZWwvSW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUvU2hhZG93TWljcm9jb2RlL1NoYWRvd01pY3Jv Y29kDQo+IGVQZWkuaW5mDQo+ID4NCj4gYi9TaWxpY29uL0ludGVsL0ludGVsU2lsaWNvblBrZy9G ZWF0dXJlL1NoYWRvd01pY3JvY29kZS9TaGFkb3dNaWNyb2NvZA0KPiBlUGVpLmluZg0KPiA+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMC4uMDE5NDAwYWIzMQ0KPiA+ IC0tLSAvZGV2L251bGwNCj4gPiArKysNCj4gYi9TaWxpY29uL0ludGVsL0ludGVsU2lsaWNvblBr Zy9GZWF0dXJlL1NoYWRvd01pY3JvY29kZS9TaGFkb3dNaWNyb2NvZA0KPiBlUGVpLmluZg0KPiA+ IEBAIC0wLDAgKzEsNDMgQEANCj4gPiArIyMjIEBmaWxlDQo+ID4gKyMgRklUIGJhc2VkIG1pY3Jv Y29kZSBzaGFkb3cgUEVJTS4NCj4gPiArIw0KPiA+ICsjIENvcHlyaWdodCAoYykgMjAyMCwgSW50 ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ICsjDQo+ID4gKyMg U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gPiArIw0KPiA+ ICsjIyMNCj4gPiArDQo+ID4gK1tEZWZpbmVzXQ0KPiA+ICsgIElORl9WRVJTSU9OICAgICAgICAg ICAgICAgICAgICA9IDB4MDAwMTAwMTcNCj4gPiArICBCQVNFX05BTUUgICAgICAgICAgICAgICAg ICAgICAgPSBTaGFkb3dNaWNyb2NvZGVQZWkNCj4gPiArICBGSUxFX0dVSUQgICAgICAgICAgICAg ICAgICAgICAgPSA4YWY0Y2Y2OC1lYmU0LTRiMjEtYTAwOC0wY2IzZGEyNzdiZTUNCj4gPiArICBW RVJTSU9OX1NUUklORyAgICAgICAgICAgICAgICAgPSAxLjANCj4gPiArICBNT0RVTEVfVFlQRSAg ICAgICAgICAgICAgICAgICAgPSBQRUlNDQo+ID4gKyAgRU5UUllfUE9JTlQgICAgICAgICAgICAg ICAgICAgID0gU2hhZG93TWljcm9jb2RlUGVpbUluaXQNCj4gPiArDQo+ID4gK1tTb3VyY2VzXQ0K PiA+ICsgIFNoYWRvd01pY3JvY29kZVBlaS5jDQo+ID4gKw0KPiA+ICtbTGlicmFyeUNsYXNzZXNd DQo+ID4gKyAgUGVpbUVudHJ5UG9pbnQNCj4gPiArICBEZWJ1Z0xpYg0KPiA+ICsgIE1lbW9yeUFs bG9jYXRpb25MaWINCj4gPiArICBCYXNlTWVtb3J5TGliDQo+ID4gKyAgSG9iTGliDQo+ID4gKyAg UGVpU2VydmljZXNMaWINCj4gPiArDQo+ID4gK1tQYWNrYWdlc10NCj4gPiArICBNZGVQa2cvTWRl UGtnLmRlYw0KPiA+ICsgIE1kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZGVjDQo+ID4gKyAgVWVm aUNwdVBrZy9VZWZpQ3B1UGtnLmRlYw0KPiA+ICsgIEludGVsU2lsaWNvblBrZy9JbnRlbFNpbGlj b25Qa2cuZGVjDQo+ID4gKw0KPiA+ICtbUHBpc10NCj4gPiArICBnRWRraWlQZWlTaGFkb3dNaWNy b2NvZGVQcGlHdWlkICAgICAgICAgICAgICAgICAgICAgIyMgUFJPRFVDRVMNCj4gPiArDQo+ID4g K1tHdWlkc10NCj4gPiArICBnRWRraWlNaWNyb2NvZGVTaGFkb3dJbmZvSG9iR3VpZA0KPiA+ICsg IGdFZGtpaU1pY3JvY29kZVN0b3JhZ2VUeXBlRmxhc2hHdWlkDQo+ID4gKw0KPiA+ICtbRGVwZXhd DQo+ID4gKyAgVFJVRQ0KPiA+IGRpZmYgLS1naXQNCj4gYS9TaWxpY29uL0ludGVsL0ludGVsU2ls aWNvblBrZy9JbmNsdWRlL0d1aWQvTWljcm9jb2RlU2hhZG93SW5mb0hvYi5oDQo+ID4gYi9TaWxp Y29uL0ludGVsL0ludGVsU2lsaWNvblBrZy9JbmNsdWRlL0d1aWQvTWljcm9jb2RlU2hhZG93SW5m b0hvYi5oDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwLi5k MWE5ZDc5YTUxDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKw0KPiBiL1NpbGljb24vSW50ZWwv SW50ZWxTaWxpY29uUGtnL0luY2x1ZGUvR3VpZC9NaWNyb2NvZGVTaGFkb3dJbmZvSG9iLmgNCj4g PiBAQCAtMCwwICsxLDY0IEBADQo+ID4gKy8qKiBAZmlsZQ0KPiA+ICsgIFRoZSBkZWZpbml0aW9u IGZvciBNaWNyb2NvZGUgU2hhZG93IEluZm8gSG9iLg0KPiA+ICsNCj4gPiArICBDb3B5cmlnaHQg KGMpIDIwMTksIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4g PiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ICsq Ki8NCj4gPiArDQo+ID4gKw0KPiA+ICsjaWZuZGVmIF9NSUNST0NPREVfU0hBRE9XX0lORk9fSE9C X0hfDQo+ID4gKyNkZWZpbmUgX01JQ1JPQ09ERV9TSEFET1dfSU5GT19IT0JfSF8NCj4gPiArDQo+ ID4gKy8vLw0KPiA+ICsvLy8gVGhlIEdsb2JhbCBJRCBvZiBhIEdVSURlZCBIT0IgdXNlZCB0byBw YXNzIG1pY3JvY29kZSBzaGFkb3cgaW5mbyB0bw0KPiBEWEUgRHJpdmVyLg0KPiA+ICsvLy8NCj4g PiArI2RlZmluZSBFREtJSV9NSUNST0NPREVfU0hBRE9XX0lORk9fSE9CX0dVSUQgXA0KPiA+ICsg IHsgXA0KPiA+ICsgICAgMHg2NTg5MDNmOSwgMHhkYTY2LCAweDQ2MGQsIHsgMHg4YiwgMHhiMCwg MHg5ZCwgMHgyZCwgMHhkZiwgMHg2NSwNCj4gMHg0NCwgMHg1OSB9IFwNCj4gPiArICB9DQo+ID4g Kw0KPiA+ICtleHRlcm4gRUZJX0dVSUQgZ0Vka2lpTWljcm9jb2RlU2hhZG93SW5mb0hvYkd1aWQ7 DQo+ID4gKw0KPiA+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ID4gKyAgLy8NCj4gPiArICAvLyBBbiBF RklfR1VJRCB0aGF0IGRlZmluZXMgdGhlIGNvbnRlbnRzIG9mIFN0b3JhZ2VDb250ZXh0Lg0KPiA+ ICsgIC8vDQo+ID4gKyAgR1VJRCAgICAgIFN0b3JhZ2VUeXBlOw0KPiA+ICsgIC8vDQo+ID4gKyAg Ly8gTnVtYmVyIG9mIHRoZSBtaWNyb2NvZGUgcGF0Y2hlcyB3aGljaCBoYXZlIGJlZW4NCj4gPiAr ICAvLyByZWxvY2F0ZWQgdG8gbWVtb3J5Lg0KPiA+ICsgIC8vDQo+ID4gKyAgVUlOVDY0ICAgIE1p Y3JvY29kZUNvdW50Ow0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gQW4gYXJyYXkgd2l0aCBNaWNyb2Nv ZGVDb3VudCBlbGVtZW50cyB0aGF0IHN0b3Jlcw0KPiA+ICsgIC8vIHRoZSBzaGFkb3dlZCBtaWNy b2NvZGUgcGF0Y2ggYWRkcmVzcyBpbiBtZW1vcnkuDQo+ID4gKyAgLy8NCj4gPiArICBVSU5UNjQg ICAgTWljcm9jb2RlQWRkckluTWVtb3J5W107DQo+ID4gKyAgLy8NCj4gPiArICAvLyBBIGJ1ZmZl ciB3aGljaCBjb250YWlucyBkZXRhaWxzIGFib3V0IHRoZSBzdG9yYWdlIGluZm9ybWF0aW9uDQo+ ID4gKyAgLy8gc3BlY2lmaWMgdG8gU3RvcmFnZVR5cGUuDQo+ID4gKyAgLy8NCj4gPiArICAvLyBV SU5UOCAgU3RvcmFnZUNvbnRleHRbXTsNCj4gPiArfSBFREtJSV9NSUNST0NPREVfU0hBRE9XX0lO Rk9fSE9COw0KPiA+ICsNCj4gPiArLy8NCj4gPiArLy8gQW4gRURLSUlfTUlDUk9DT0RFX1NIQURP V19JTkZPX0hPQiB3aXRoIFN0b3JhZ2VUeXBlIHNldCB0bw0KPiBiZWxvdyBHVUlEIHdpbGwgaGF2 ZQ0KPiA+ICsvLyB0aGUgU3RvcmFnZUNvbnRleHQgb2YgYQ0KPiBFRklfTUlDUk9DT0RFX1NUT1JB R0VfVFlQRV9GTEFTSF9DT05URVhUIHN0cnVjdXRyZS4NCj4gPiArLy8NCj4gPiArI2RlZmluZSBF RklfTUlDUk9DT0RFX1NUT1JBR0VfVFlQRV9GTEFTSF9HVUlEIFwNCj4gPiArICB7IFwNCj4gPiAr ICAgIDB4MmNiYTAxYjMsIDB4ZDM5MSwgMHg0NTk4LCB7IDB4OGQsIDB4ODksIDB4YjcsIDB4ZmMs IDB4MzksIDB4MjIsDQo+IDB4ZmQsIDB4NzEgfSBcDQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArZXh0 ZXJuIEVGSV9HVUlEIGdFZGtpaU1pY3JvY29kZVN0b3JhZ2VUeXBlRmxhc2hHdWlkOw0KPiA+ICsN Cj4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gQW4gYXJyYXkgd2l0 aCBNaWNyb2NvZGVDb3VudCBlbGVtZW50cyB0aGF0IHN0b3JlcyB0aGUgb3JpZ2luYWwNCj4gPiAr ICAvLyBtaWNyb2NvZGUgcGF0Y2ggYWRkcmVzcyBvbiBmbGFzaC4gVGhlIGFkZHJlc3MgaXMgcGxh Y2VkIGluIHNhbWUNCj4gPiArICAvLyBvcmRlciBhcyB0aGUgbWljcm9jb2RlIHBhdGNoZXMgaW4g TWljcm9jb2RlQWRkckluTWVtb3J5Lg0KPiA+ICsgIC8vDQo+ID4gKyAgVUlOVDY0ICBNaWNyb2Nv ZGVBZGRyZXNzSW5GbGFzaFtdOw0KPiA+ICt9IEVGSV9NSUNST0NPREVfU1RPUkFHRV9UWVBFX0ZM QVNIX0NPTlRFWFQ7DQo+ID4gKw0KPiA+ICsjZW5kaWYNCj4gPiBkaWZmIC0tZ2l0IGEvU2lsaWNv bi9JbnRlbC9JbnRlbFNpbGljb25Qa2cvSW50ZWxTaWxpY29uUGtnLmRlYw0KPiBiL1NpbGljb24v SW50ZWwvSW50ZWxTaWxpY29uUGtnL0ludGVsU2lsaWNvblBrZy5kZWMNCj4gPiBpbmRleCAyMmVi ZjE5YzRlLi4zYzQ5ZmIyODljIDEwMDY0NA0KPiA+IC0tLSBhL1NpbGljb24vSW50ZWwvSW50ZWxT aWxpY29uUGtnL0ludGVsU2lsaWNvblBrZy5kZWMNCj4gPiArKysgYi9TaWxpY29uL0ludGVsL0lu dGVsU2lsaWNvblBrZy9JbnRlbFNpbGljb25Qa2cuZGVjDQo+ID4gQEAgLTMsNyArMyw3IEBADQo+ ID4gICMNCj4gPiAgIyBUaGlzIHBhY2thZ2UgcHJvdmlkZXMgY29tbW9uIG9wZW4gc291cmNlIElu dGVsIHNpbGljb24gbW9kdWxlcy4NCj4gPiAgIw0KPiA+IC0jIENvcHlyaWdodCAoYykgMjAxNiAt IDIwMTksIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPiAr IyBDb3B5cmlnaHQgKGMpIDIwMTYgLSAyMDIwLCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0 cyByZXNlcnZlZC48QlI+DQo+ID4gICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNs YXVzZS1QYXRlbnQNCj4gPiAgIw0KPiA+ICAjIw0KPiA+IEBAIC00OCw2ICs0OCwxMiBAQA0KPiA+ ICAgICMjIEhPQiBHVUlEIHRvIGdldCBtZW1vcnkgaW5mb3JtYXRpb24gYWZ0ZXIgTVJDIGlzIGRv bmUuIFRoZSBob2IgZGF0YQ0KPiB3aWxsIGJlIHVzZWQgdG8gc2V0IHRoZSBQTVIgcmFuZ2VzDQo+ ID4gICAgZ1Z0ZFBtckluZm9EYXRhSG9iR3VpZCA9IHsweDZmYjYxNjQ1LCAweGYxNjgsIDB4NDZi ZSwgeyAweDgwLCAweGVjLA0KPiAweGI1LCAweDAyLCAweDM4LCAweDVlLCAweGU3LCAweGU3IH0g fQ0KPiA+DQo+ID4gKyAgIyMgSW5jbHVkZS9HdWlkL01pY3JvY29kZVNoYWRvd0luZm9Ib2IuaA0K PiA+ICsgIGdFZGtpaU1pY3JvY29kZVNoYWRvd0luZm9Ib2JHdWlkID0geyAweDY1ODkwM2Y5LCAw eGRhNjYsIDB4NDYwZCwNCj4geyAweDhiLCAweGIwLCAweDlkLCAweDJkLCAweGRmLCAweDY1LCAw eDQ0LCAweDU5IH0gfQ0KPiA+ICsNCj4gPiArICAjIyBJbmNsdWRlL0d1aWQvTWljcm9jb2RlU2hh ZG93SW5mb0hvYi5oDQo+ID4gKyAgZ0Vka2lpTWljcm9jb2RlU3RvcmFnZVR5cGVGbGFzaEd1aWQg PSB7IDB4MmNiYTAxYjMsIDB4ZDM5MSwgMHg0NTk4LA0KPiB7IDB4OGQsIDB4ODksIDB4YjcsIDB4 ZmMsIDB4MzksIDB4MjIsIDB4ZmQsIDB4NzEgfSB9DQo+ID4gKw0KPiA+ICBbUHBpc10NCj4gPiAg ICBnRWRraWlWVGRJbmZvUHBpR3VpZCA9IHsgMHg4YTU5ZmNiMywgMHhmMTkxLCAweDQwMGMsIHsg MHg5NywgMHg2NywgMHg2NywNCj4gMHhhZiwgMHgyYiwgMHgyNSwgMHg2OCwgMHg0YSB9IH0NCj4g Pg0KPiA+IGRpZmYgLS1naXQgYS9TaWxpY29uL0ludGVsL0ludGVsU2lsaWNvblBrZy9JbnRlbFNp bGljb25Qa2cuZHNjDQo+IGIvU2lsaWNvbi9JbnRlbC9JbnRlbFNpbGljb25Qa2cvSW50ZWxTaWxp Y29uUGtnLmRzYw0KPiA+IGluZGV4IDBhNjUwOWQ4YjMuLmY5OTU4ODM2OTEgMTAwNjQ0DQo+ID4g LS0tIGEvU2lsaWNvbi9JbnRlbC9JbnRlbFNpbGljb25Qa2cvSW50ZWxTaWxpY29uUGtnLmRzYw0K PiA+ICsrKyBiL1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0ludGVsU2lsaWNvblBrZy5k c2MNCj4gPiBAQCAtMSw3ICsxLDcgQEANCj4gPiAgIyMgQGZpbGUNCj4gPiAgIyBUaGlzIHBhY2th Z2UgcHJvdmlkZXMgY29tbW9uIG9wZW4gc291cmNlIEludGVsIHNpbGljb24gbW9kdWxlcy4NCj4g PiAgIw0KPiA+IC0jIENvcHlyaWdodCAoYykgMjAxNyAtIDIwMTksIEludGVsIENvcnBvcmF0aW9u LiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPiArIyBDb3B5cmlnaHQgKGMpIDIwMTcgLSAy MDIwLCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4gICMN Cj4gPiAgIyAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0K PiA+ICAjDQo+ID4gQEAgLTg0LDYgKzg0LDcgQEANCj4gPg0KPiBJbnRlbFNpbGljb25Qa2cvRmVh dHVyZS9WVGQvUGxhdGZvcm1WVGRJbmZvU2FtcGxlUGVpL1BsYXRmb3JtVlRkSW5mb1NhDQo+IG1w bGVQZWkuaW5mDQo+ID4NCj4gSW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUvQ2Fwc3VsZS9NaWNyb2Nv ZGVVcGRhdGVEeGUvTWljcm9jb2RlVXBkYXRlRHhlDQo+IC5pbmYNCj4gPg0KPiBJbnRlbFNpbGlj b25Qa2cvRmVhdHVyZS9DYXBzdWxlL0xpYnJhcnkvTWljcm9jb2RlRmxhc2hBY2Nlc3NMaWJOdWxs L01pY3JvDQo+IGNvZGVGbGFzaEFjY2Vzc0xpYk51bGwuaW5mDQo+ID4gKyAgSW50ZWxTaWxpY29u UGtnL0ZlYXR1cmUvU2hhZG93TWljcm9jb2RlL1NoYWRvd01pY3JvY29kZVBlaS5pbmYNCj4gPg0K PiBJbnRlbFNpbGljb25Qa2cvTGlicmFyeS9QZWlEeGVTbW1Cb290TWVkaWFMaWIvUGVpRmlybXdh cmVCb290TWVkaWFMaWINCj4gLmluZg0KPiA+DQo+IEludGVsU2lsaWNvblBrZy9MaWJyYXJ5L1Bl aUR4ZVNtbUJvb3RNZWRpYUxpYi9EeGVTbW1GaXJtd2FyZUJvb3RNZQ0KPiBkaWFMaWIuaW5mDQo+ ID4NCj4gPiAtLQ0KPiA+IDIuMTkuMS53aW5kb3dzLjENCg0K