From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) (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 1AF8A81FC4 for ; Thu, 15 Dec 2016 11:53:59 -0800 (PST) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga102.fm.intel.com with ESMTP; 15 Dec 2016 11:53:58 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.33,353,1477983600"; d="scan'208";a="1099693855" Received: from orsmsx109.amr.corp.intel.com ([10.22.240.7]) by fmsmga002.fm.intel.com with ESMTP; 15 Dec 2016 11:53:57 -0800 Received: from orsmsx112.amr.corp.intel.com (10.22.240.13) by ORSMSX109.amr.corp.intel.com (10.22.240.7) with Microsoft SMTP Server (TLS) id 14.3.248.2; Thu, 15 Dec 2016 11:53:57 -0800 Received: from orsmsx113.amr.corp.intel.com ([169.254.9.227]) by ORSMSX112.amr.corp.intel.com ([169.254.3.14]) with mapi id 14.03.0248.002; Thu, 15 Dec 2016 11:53:57 -0800 From: "Kinney, Michael D" To: "Yao, Jiewen" , "edk2-devel@lists.01.org" , "Kinney, Michael D" CC: Laszlo Ersek , "Fan, Jeff" Thread-Topic: [edk2] [PATCH] UefiCpuPkg/PiSmmCpu: Add SMM Comm Buffer Paging Protection. Thread-Index: AQHSUIkFqIFrpHI8K0uGBGrxgAoEw6EJcRRw Date: Thu, 15 Dec 2016 19:53:56 +0000 Message-ID: References: <1481115245-11880-1-git-send-email-jiewen.yao@intel.com> In-Reply-To: <1481115245-11880-1-git-send-email-jiewen.yao@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ctpclassification: CTP_IC x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMDg1MWE4ZmQtYWU1Zi00NzUxLWExMzMtYTk5Zjc3ZGU0MDkwIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE1LjkuNi42IiwiVHJ1c3RlZExhYmVsSGFzaCI6IlFCb1N4M3NHZDltNjlrRDdqZm40K1RJSGZ5QXA2RDhnRDcwQ2lKd0srSEk9In0= x-originating-ip: [10.22.254.138] MIME-Version: 1.0 Subject: Re: [PATCH] UefiCpuPkg/PiSmmCpu: Add SMM Comm Buffer Paging Protection. X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 15 Dec 2016 19:53:59 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Smlld2VuLA0KDQpTb21lIGNvbW1lbnRzIGluY2x1ZGVkIGJlbG93Lg0KDQpJIHNlZSB5b3UgaGF2 ZSBhZGRlZCBTb3J0TWVtb3J5TWFwKCkgZnJvbSBNZGVNb2R1bGVQa2dcQ29yZVxEeGVcTWlzY1xQ cm9wZXJ0aWVzVGFibGUuYy4NClRoYXQgc2FtZSBmaWxlIGhhcyBhIGZ1bmN0aW9uIGNhbGxlZCBN ZXJnZU1lbW9yeU1hcCgpIHRoYXQgcHJvZHVjZXMgYSBzbWFsbGVyIA0KdmVyc2lvbiBvZiB0aGUg bWVtb3J5IG1hcCBtZXJnaW5nIG1lbW9yeSBtYXAgZW50cmllcyB0b2dldGhlci4gIElmIHlvdSBh ZGRlZCANCmEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGF0IGZ1bmN0aW9uIHRoYXQgbWVyZ2VzIHRo ZSBjb250aWd1b3VzIHJlZ2lvbnMgd2l0aCANCnRoZSBtZW1vcnkgdHlwZXMgdGhpcyBwYXRjaCB3 YW50cyB0byBzZXQgYXMgbm90IHByZXNlbnQsIHRoZW4geW91IGNvdWxkIGhhdmUgYQ0Kc2ltcGxl ciBsb29wIG9uIHRoZSBzbWFsbGVyIG1lcmdlZCBtZW1vcnkgdG8gc2V0IHRoZSBwb2xpY3kgYW5k IHRoZSBjaGVjayBmb3INCmZvcmJpZGRlbiBhZGRyZXNzIHdvdWxkIGxvb3Agb24gYSBzbWFsbGVy IG51bWJlciBvZiBtZW1vcnkgbWFwIGVudHJpZXMuDQoNCkJlc3QgcmVnYXJkcywNCg0KTWlrZQ0K DQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IGVkazItZGV2ZWwgW21haWx0 bzplZGsyLWRldmVsLWJvdW5jZXNAbGlzdHMuMDEub3JnXSBPbiBCZWhhbGYgT2YgSmlld2VuIFlh bw0KPiBTZW50OiBXZWRuZXNkYXksIERlY2VtYmVyIDcsIDIwMTYgNDo1NCBBTQ0KPiBUbzogZWRr Mi1kZXZlbEBsaXN0cy4wMS5vcmcNCj4gQ2M6IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQu a2lubmV5QGludGVsLmNvbT47IExhc3psbyBFcnNlayA8bGVyc2VrQHJlZGhhdC5jb20+Ow0KPiBG YW4sIEplZmYgPGplZmYuZmFuQGludGVsLmNvbT4NCj4gU3ViamVjdDogW2VkazJdIFtQQVRDSF0g VWVmaUNwdVBrZy9QaVNtbUNwdTogQWRkIFNNTSBDb21tIEJ1ZmZlciBQYWdpbmcgUHJvdGVjdGlv bi4NCj4gDQo+IFRoaXMgcGF0Y2ggc2V0cyB0aGUgbm9ybWFsIE9TIGJ1ZmZlciBFZmlMb2FkZXJD b2RlL0RhdGEsDQo+IEVmaUJvb3RTZXJ2aWNlc0NvZGUvRGF0YSwgRWZpQ29udmVudGlvbmFsTWVt b3J5LCBFZmlBQ1BJUmVjbGFpbU1lbW9yeQ0KPiB0byBiZSBub3QgcHJlc2VudCBhZnRlciBTbW1S ZWFkeVRvTG9jay4NCj4gDQo+IFRvIGFjY2VzcyB0aGVzZSByZWdpb24gaW4gT1MgcnVudGltZSBw aGFzZSBpcyBub3QgYSBnb29kIHNvbHV0aW9uLg0KPiANCj4gUHJldmlvdXNseSwgd2UgZGlkIHNp bWlsYXIgY2hlY2sgaW4gU21tTWVtTGliIHRvIGhlbHAgU01JIGhhbmRsZXINCj4gZG8gdGhlIGNo ZWNrLiBCdXQgaWYgU01JIGhhbmRsZXIgZm9yZ2V0cyB0aGUgY2hlY2ssIGl0IGNhbiBzdGlsbA0K PiBhY2Nlc3MgdGhlc2UgT1MgcmVnaW9uIGFuZCBicmluZyByaXNrLg0KPiANCj4gU28gaGVyZSB3 ZSBlbmZvcmNlIHRoZSBwb2xpY3kgdG8gcHJldmVudCBpdCBoYXBwZW5pbmcuDQo+IA0KPiBDYzog SmVmZiBGYW4gPGplZmYuZmFuQGludGVsLmNvbT4NCj4gQ2M6IE1pY2hhZWwgRCBLaW5uZXkgPG1p Y2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPg0KPiBDYzogTGFzemxvIEVyc2VrIDxsZXJzZWtAcmVk aGF0LmNvbT4NCj4gQ29udHJpYnV0ZWQtdW5kZXI6IFRpYW5vQ29yZSBDb250cmlidXRpb24gQWdy ZWVtZW50IDEuMA0KPiBTaWduZWQtb2ZmLWJ5OiBKaWV3ZW4gWWFvIDxqaWV3ZW4ueWFvQGludGVs LmNvbT4NCj4gLS0tDQo+ICBVZWZpQ3B1UGtnL1BpU21tQ3B1RHhlU21tL0lhMzIvUGFnZVRibC5j ICAgICAgICAgICB8ICAgNyArDQo+ICBVZWZpQ3B1UGtnL1BpU21tQ3B1RHhlU21tL1BpU21tQ3B1 RHhlU21tLmMgICAgICAgICB8ICAyMyArLQ0KPiAgVWVmaUNwdVBrZy9QaVNtbUNwdUR4ZVNtbS9Q aVNtbUNwdUR4ZVNtbS5oICAgICAgICAgfCAgMjkgKysrDQo+ICBVZWZpQ3B1UGtnL1BpU21tQ3B1 RHhlU21tL1NtbUNwdU1lbW9yeU1hbmFnZW1lbnQuYyB8IDI0OCArKysrKysrKysrKysrKysrKysr Kw0KPiAgVWVmaUNwdVBrZy9QaVNtbUNwdUR4ZVNtbS9YNjQvUGFnZVRibC5jICAgICAgICAgICAg fCAgIDcgKw0KPiAgNSBmaWxlcyBjaGFuZ2VkLCAzMDIgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRp b25zKC0pDQo+IA0KPiBkaWZmIC0tZ2l0IGEvVWVmaUNwdVBrZy9QaVNtbUNwdUR4ZVNtbS9JYTMy L1BhZ2VUYmwuYw0KPiBiL1VlZmlDcHVQa2cvUGlTbW1DcHVEeGVTbW0vSWEzMi9QYWdlVGJsLmMN Cj4gaW5kZXggYmE3OTQ3Ny4uYzFmNGI3ZSAxMDA2NDQNCj4gLS0tIGEvVWVmaUNwdVBrZy9QaVNt bUNwdUR4ZVNtbS9JYTMyL1BhZ2VUYmwuYw0KPiArKysgYi9VZWZpQ3B1UGtnL1BpU21tQ3B1RHhl U21tL0lhMzIvUGFnZVRibC5jDQo+IEBAIC0xNDksNiArMTQ5LDEzIEBAIFNtaVBGSGFuZGxlciAo DQo+ICAgICAgICApOw0KPiAgICAgICAgQ3B1RGVhZExvb3AgKCk7DQo+ICAgICAgfQ0KPiArICAg IGlmIChJc1NtbUNvbW1CdWZmZXJGb3JiaWRkZW5BZGRyZXNzIChQRkFkZHJlc3MpKSB7DQo+ICsg ICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiQWNjZXNzIFNNTSBjb21tdW5pY2F0aW9uIGZvcmJp ZGRlbiBhZGRyZXNzICgweCV4KSFcbiIsDQo+IFBGQWRkcmVzcykpOw0KPiArICAgICAgREVCVUdf Q09ERSAoDQo+ICsgICAgICAgIER1bXBNb2R1bGVJbmZvQnlJcCAoKFVJTlROKVN5c3RlbUNvbnRl eHQuU3lzdGVtQ29udGV4dElhMzItPkVpcCk7DQo+ICsgICAgICApOw0KPiArICAgICAgQ3B1RGVh ZExvb3AgKCk7DQo+ICsgICAgfQ0KPiAgICB9DQo+IA0KPiAgICBpZiAoRmVhdHVyZVBjZEdldCAo UGNkQ3B1U21tUHJvZmlsZUVuYWJsZSkpIHsNCj4gZGlmZiAtLWdpdCBhL1VlZmlDcHVQa2cvUGlT bW1DcHVEeGVTbW0vUGlTbW1DcHVEeGVTbW0uYw0KPiBiL1VlZmlDcHVQa2cvUGlTbW1DcHVEeGVT bW0vUGlTbW1DcHVEeGVTbW0uYw0KPiBpbmRleCA0YmVmNjBhLi5mYzc3MTRhIDEwMDY0NA0KPiAt LS0gYS9VZWZpQ3B1UGtnL1BpU21tQ3B1RHhlU21tL1BpU21tQ3B1RHhlU21tLmMNCj4gKysrIGIv VWVmaUNwdVBrZy9QaVNtbUNwdUR4ZVNtbS9QaVNtbUNwdUR4ZVNtbS5jDQo+IEBAIC01MDQsNiAr NTA0LDExIEBAIFNtbVJlYWR5VG9Mb2NrRXZlbnROb3RpZnkgKA0KPiAgICBHZXRBY3BpQ3B1RGF0 YSAoKTsNCj4gDQo+ICAgIC8vDQo+ICsgIC8vIENhY2hlIGEgY29weSBvZiBVRUZJIG1lbW9yeSBt YXAgYmVmb3JlIHdlIHN0YXJ0IHByb2ZpbGluZyBmZWF0dXJlLg0KPiArICAvLw0KPiArICBHZXRV ZWZpTWVtb3J5TWFwICgpOw0KPiArDQo+ICsgIC8vDQo+ICAgIC8vIFNldCBTTU0gcmVhZHkgdG8g bG9jayBmbGFnIGFuZCByZXR1cm4NCj4gICAgLy8NCj4gICAgbVNtbVJlYWR5VG9Mb2NrID0gVFJV RTsNCj4gQEAgLTExNTQsMTcgKzExNTksNiBAQCBDb25maWdTbW1Db2RlQWNjZXNzQ2hlY2sgKA0K PiAgfQ0KPiANCj4gIC8qKg0KPiAtICBTZXQgY29kZSByZWdpb24gdG8gYmUgcmVhZCBvbmx5IGFu ZCBkYXRhIHJlZ2lvbiB0byBiZSBleGVjdXRlIGRpc2FibGUuDQo+IC0qKi8NCj4gLVZPSUQNCj4g LVNldFJlZ2lvbkF0dHJpYnV0ZXMgKA0KPiAtICBWT0lEDQo+IC0gICkNCj4gLXsNCj4gLSAgU2V0 TWVtTWFwQXR0cmlidXRlcyAoKTsNCj4gLX0NCj4gLQ0KPiAtLyoqDQo+ICAgIFRoaXMgQVBJIHBy b3ZpZGVzIGEgd2F5IHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgcGFnZSB0YWJsZS4NCj4gDQo+ICAg IFRoaXMgQVBJIGNhbiBiZSBjYWxsZWQgbW9yZSBvbmNlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3Ig cGFnZSB0YWJsZXMuDQo+IEBAIC0xMzIwLDcgKzEzMTQsMTIgQEAgUGVyZm9ybVJlbWFpbmluZ1Rh c2tzICgNCj4gICAgICAvLw0KPiAgICAgIC8vIE1hcmsgY3JpdGljYWwgcmVnaW9uIHRvIGJlIHJl YWQtb25seSBpbiBwYWdlIHRhYmxlDQo+ICAgICAgLy8NCj4gLSAgICBTZXRSZWdpb25BdHRyaWJ1 dGVzICgpOw0KPiArICAgIFNldE1lbU1hcEF0dHJpYnV0ZXMgKCk7DQo+ICsNCj4gKyAgICAvLw0K PiArICAgIC8vIEZvciBvdXRzaWRlIFNNUkFNLCB3ZSBvbmx5IG1hcCBTTU0gY29tbXVuaWNhdGlv biBidWZmZXIgb3IgTU1JTy4NCj4gKyAgICAvLw0KPiArICAgIFNldFVlZmlNZW1NYXBBdHRyaWJ1 dGVzICgpOw0KPiANCj4gICAgICAvLw0KPiAgICAgIC8vIFNldCBwYWdlIHRhYmxlIGl0c2VsZiB0 byBiZSByZWFkLW9ubHkNCj4gZGlmZiAtLWdpdCBhL1VlZmlDcHVQa2cvUGlTbW1DcHVEeGVTbW0v UGlTbW1DcHVEeGVTbW0uaA0KPiBiL1VlZmlDcHVQa2cvUGlTbW1DcHVEeGVTbW0vUGlTbW1DcHVE eGVTbW0uaA0KPiBpbmRleCA5MTYwZmE4Li42OWM1NGZiIDEwMDY0NA0KPiAtLS0gYS9VZWZpQ3B1 UGtnL1BpU21tQ3B1RHhlU21tL1BpU21tQ3B1RHhlU21tLmgNCj4gKysrIGIvVWVmaUNwdVBrZy9Q aVNtbUNwdUR4ZVNtbS9QaVNtbUNwdUR4ZVNtbS5oDQo+IEBAIC04MzksNiArODM5LDM1IEBAIFNl dE1lbU1hcEF0dHJpYnV0ZXMgKA0KPiAgICApOw0KPiANCj4gIC8qKg0KPiArICBUaGlzIGZ1bmN0 aW9uIHNldHMgVUVGSSBtZW1vcnkgYXR0cmlidXRlIGFjY29yZGluZyB0byBVRUZJIG1lbW9yeSBt YXAuDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK1NldFVlZmlNZW1NYXBBdHRyaWJ1dGVzICgNCj4gKyAg Vk9JRA0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgUmV0dXJuIGlmIHRoZSBBZGRyZXNzIGlz IGZvcmJpZGRlbiBhcyBTTU0gY29tbXVuaWNhdGlvbiBidWZmZXIuDQo+ICsNCj4gKyAgQHBhcmFt W2luXSBBZGRyZXNzIHRoZSBhZGRyZXNzIHRvIGJlIGNoZWNrZWQNCj4gKw0KPiArICBAcmV0dXJu IFRSVUUgIFRoZSBhZGRyZXNzIGlzIGZvcmJpZGRlbiBhcyBTTU0gY29tbXVuaWNhdGlvbiBidWZm ZXIuDQo+ICsgIEByZXR1cm4gRkFMU0UgVGhlIGFkZHJlc3MgaXMgYWxsb3dlZCBhcyBTTU0gY29t bXVuaWNhdGlvbiBidWZmZXIuDQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0lzU21tQ29tbUJ1ZmZl ckZvcmJpZGRlbkFkZHJlc3MgKA0KPiArICBJTiBVSU5UNjQgIEFkZHJlc3MNCj4gKyAgKTsNCj4g Kw0KPiArLyoqDQo+ICsgIFRoaXMgZnVuY3Rpb24gY2FjaGVzIHRoZSBVRUZJIG1lbW9yeSBtYXAg aW5mb3JtYXRpb24uDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0dldFVlZmlNZW1vcnlNYXAgKA0KPiAr ICBWT0lEDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiAgICBUaGlzIGZ1bmN0aW9uIHNldHMgbWVt b3J5IGF0dHJpYnV0ZSBmb3IgcGFnZSB0YWJsZS4NCj4gICoqLw0KPiAgVk9JRA0KPiBkaWZmIC0t Z2l0IGEvVWVmaUNwdVBrZy9QaVNtbUNwdUR4ZVNtbS9TbW1DcHVNZW1vcnlNYW5hZ2VtZW50LmMN Cj4gYi9VZWZpQ3B1UGtnL1BpU21tQ3B1RHhlU21tL1NtbUNwdU1lbW9yeU1hbmFnZW1lbnQuYw0K PiBpbmRleCA1ODhhYTI3Li45OTQyYzQzIDEwMDY0NA0KPiAtLS0gYS9VZWZpQ3B1UGtnL1BpU21t Q3B1RHhlU21tL1NtbUNwdU1lbW9yeU1hbmFnZW1lbnQuYw0KPiArKysgYi9VZWZpQ3B1UGtnL1Bp U21tQ3B1RHhlU21tL1NtbUNwdU1lbW9yeU1hbmFnZW1lbnQuYw0KPiBAQCAtMTYsNiArMTYsMTAg QEAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlU SEVSIEVYUFJFU1MNCj4gT1IgSU1QTElFRC4NCj4gICNkZWZpbmUgTkVYVF9NRU1PUllfREVTQ1JJ UFRPUihNZW1vcnlEZXNjcmlwdG9yLCBTaXplKSBcDQo+ICAgICgoRUZJX01FTU9SWV9ERVNDUklQ VE9SICopKChVSU5UOCAqKShNZW1vcnlEZXNjcmlwdG9yKSArIChTaXplKSkpDQo+IA0KPiArRUZJ X01FTU9SWV9ERVNDUklQVE9SICptVWVmaU1lbW9yeU1hcDsNCj4gK1VJTlROICAgICAgICAgICAg ICAgICBtVWVmaU1lbW9yeU1hcFNpemU7DQo+ICtVSU5UTiAgICAgICAgICAgICAgICAgbVVlZmlE ZXNjcmlwdG9yU2l6ZTsNCj4gKw0KPiAgUEFHRV9BVFRSSUJVVEVfVEFCTEUgbVBhZ2VBdHRyaWJ1 dGVUYWJsZVtdID0gew0KPiAgICB7UGFnZTRLLCAgU0laRV80S0IsIFBBR0lOR180S19BRERSRVNT X01BU0tfNjR9LA0KPiAgICB7UGFnZTJNLCAgU0laRV8yTUIsIFBBR0lOR18yTV9BRERSRVNTX01B U0tfNjR9LA0KPiBAQCAtODIzLDMgKzgyNywyNDcgQEAgU2V0TWVtTWFwQXR0cmlidXRlcyAoDQo+ IA0KPiAgICByZXR1cm4gOw0KPiAgfQ0KPiArDQo+ICsvKioNCj4gKyAgU29ydCBtZW1vcnkgbWFw IGVudHJpZXMgYmFzZWQgdXBvbiBQaHlzaWNhbFN0YXJ0LCBmcm9tIGxvdyB0byBoaWdoLg0KPiAr DQo+ICsgIEBwYXJhbSAgTWVtb3J5TWFwICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1 ZmZlciBpbiB3aGljaCBmaXJtd2FyZSBwbGFjZXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRoZSBjdXJyZW50IG1lbW9yeSBtYXAuDQo+ICsgIEBwYXJhbSAgTWVtb3J5TWFw U2l6ZSAgICAgICAgICBTaXplLCBpbiBieXRlcywgb2YgdGhlIE1lbW9yeU1hcCBidWZmZXIuDQo+ ICsgIEBwYXJhbSAgRGVzY3JpcHRvclNpemUgICAgICAgICBTaXplLCBpbiBieXRlcywgb2YgYW4g aW5kaXZpZHVhbA0KPiBFRklfTUVNT1JZX0RFU0NSSVBUT1IuDQo+ICsqKi8NCj4gK1NUQVRJQw0K PiArVk9JRA0KPiArU29ydE1lbW9yeU1hcCAoDQo+ICsgIElOIE9VVCBFRklfTUVNT1JZX0RFU0NS SVBUT1IgICpNZW1vcnlNYXAsDQo+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgICAgIE1l bW9yeU1hcFNpemUsDQo+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0 b3JTaXplDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX01FTU9SWV9ERVNDUklQVE9SICAgICAgICpN ZW1vcnlNYXBFbnRyeTsNCj4gKyAgRUZJX01FTU9SWV9ERVNDUklQVE9SICAgICAgICpOZXh0TWVt b3J5TWFwRW50cnk7DQo+ICsgIEVGSV9NRU1PUllfREVTQ1JJUFRPUiAgICAgICAqTWVtb3J5TWFw RW5kOw0KPiArICBFRklfTUVNT1JZX0RFU0NSSVBUT1IgICAgICAgVGVtcE1lbW9yeU1hcDsNCj4g Kw0KPiArICBNZW1vcnlNYXBFbnRyeSA9IE1lbW9yeU1hcDsNCj4gKyAgTmV4dE1lbW9yeU1hcEVu dHJ5ID0gTkVYVF9NRU1PUllfREVTQ1JJUFRPUiAoTWVtb3J5TWFwRW50cnksIERlc2NyaXB0b3JT aXplKTsNCj4gKyAgTWVtb3J5TWFwRW5kID0gKEVGSV9NRU1PUllfREVTQ1JJUFRPUiAqKSAoKFVJ TlQ4ICopIE1lbW9yeU1hcCArIE1lbW9yeU1hcFNpemUpOw0KPiArICB3aGlsZSAoTWVtb3J5TWFw RW50cnkgPCBNZW1vcnlNYXBFbmQpIHsNCj4gKyAgICB3aGlsZSAoTmV4dE1lbW9yeU1hcEVudHJ5 IDwgTWVtb3J5TWFwRW5kKSB7DQo+ICsgICAgICBpZiAoTWVtb3J5TWFwRW50cnktPlBoeXNpY2Fs U3RhcnQgPiBOZXh0TWVtb3J5TWFwRW50cnktPlBoeXNpY2FsU3RhcnQpIHsNCj4gKyAgICAgICAg Q29weU1lbSAoJlRlbXBNZW1vcnlNYXAsIE1lbW9yeU1hcEVudHJ5LCBzaXplb2YoRUZJX01FTU9S WV9ERVNDUklQVE9SKSk7DQo+ICsgICAgICAgIENvcHlNZW0gKE1lbW9yeU1hcEVudHJ5LCBOZXh0 TWVtb3J5TWFwRW50cnksIHNpemVvZihFRklfTUVNT1JZX0RFU0NSSVBUT1IpKTsNCj4gKyAgICAg ICAgQ29weU1lbSAoTmV4dE1lbW9yeU1hcEVudHJ5LCAmVGVtcE1lbW9yeU1hcCwgc2l6ZW9mKEVG SV9NRU1PUllfREVTQ1JJUFRPUikpOw0KPiArICAgICAgfQ0KPiArDQo+ICsgICAgICBOZXh0TWVt b3J5TWFwRW50cnkgPSBORVhUX01FTU9SWV9ERVNDUklQVE9SIChOZXh0TWVtb3J5TWFwRW50cnks DQo+IERlc2NyaXB0b3JTaXplKTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBNZW1vcnlNYXBFbnRy eSAgICAgID0gTkVYVF9NRU1PUllfREVTQ1JJUFRPUiAoTWVtb3J5TWFwRW50cnksIERlc2NyaXB0 b3JTaXplKTsNCj4gKyAgICBOZXh0TWVtb3J5TWFwRW50cnkgID0gTkVYVF9NRU1PUllfREVTQ1JJ UFRPUiAoTWVtb3J5TWFwRW50cnksIERlc2NyaXB0b3JTaXplKTsNCj4gKyAgfQ0KPiArDQo+ICsg IHJldHVybiA7DQoNClJlbW92ZSByZXR1cm4gc3RhdGVtZW50IGF0IGVuZCBvZiBmdW5jdGlvbi4N Cg0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyBmdW5jdGlvbiBjYWNoZXMgdGhlIFVFRkkg bWVtb3J5IG1hcCBpbmZvcm1hdGlvbi4NCj4gKyoqLw0KPiArVk9JRA0KPiArR2V0VWVmaU1lbW9y eU1hcCAoDQo+ICsgIFZPSUQNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAg ICAgU3RhdHVzOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgTWFwS2V5Ow0KPiArICBVSU5U MzIgICAgICAgICAgICAgICAgRGVzY3JpcHRvclZlcnNpb247DQo+ICsgIEVGSV9NRU1PUllfREVT Q1JJUFRPUiAqTWVtb3J5TWFwOw0KPiArDQo+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIkdldFVl ZmlNZW1vcnlNYXBcbiIpKTsNCj4gKw0KPiArICBtVWVmaU1lbW9yeU1hcFNpemUgPSAwOw0KPiAr ICBNZW1vcnlNYXAgPSBOVUxMOw0KPiArICBTdGF0dXMgPSBnQlMtPkdldE1lbW9yeU1hcCAoDQo+ ICsgICAgICAgICAgICAgICAgICAmbVVlZmlNZW1vcnlNYXBTaXplLA0KPiArICAgICAgICAgICAg ICAgICAgTWVtb3J5TWFwLA0KPiArICAgICAgICAgICAgICAgICAgJk1hcEtleSwNCj4gKyAgICAg ICAgICAgICAgICAgICZtVWVmaURlc2NyaXB0b3JTaXplLA0KPiArICAgICAgICAgICAgICAgICAg JkRlc2NyaXB0b3JWZXJzaW9uDQo+ICsgICAgICAgICAgICAgICAgICApOw0KPiArICBBU1NFUlQg KFN0YXR1cyA9PSBFRklfQlVGRkVSX1RPT19TTUFMTCk7DQo+ICsNCj4gKyAgZG8gew0KPiArICAg IFN0YXR1cyA9IGdCUy0+QWxsb2NhdGVQb29sIChFZmlCb290U2VydmljZXNEYXRhLCBtVWVmaU1l bW9yeU1hcFNpemUsIChWT0lEDQo+ICoqKSZNZW1vcnlNYXApOw0KPiArICAgIEFTU0VSVCAoTWVt b3J5TWFwICE9IE5VTEwpOw0KPiArICAgIGlmIChNZW1vcnlNYXAgPT0gTlVMTCkgew0KPiArICAg ICAgcmV0dXJuIDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBnQlMtPkdldE1lbW9y eU1hcCAoDQo+ICsgICAgICAgICAgICAgICAgICAgICZtVWVmaU1lbW9yeU1hcFNpemUsDQo+ICsg ICAgICAgICAgICAgICAgICAgIE1lbW9yeU1hcCwNCj4gKyAgICAgICAgICAgICAgICAgICAgJk1h cEtleSwNCj4gKyAgICAgICAgICAgICAgICAgICAgJm1VZWZpRGVzY3JpcHRvclNpemUsDQo+ICsg ICAgICAgICAgICAgICAgICAgICZEZXNjcmlwdG9yVmVyc2lvbg0KPiArICAgICAgICAgICAgICAg ICAgICApOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIGdCUy0+ RnJlZVBvb2wgKE1lbW9yeU1hcCk7DQo+ICsgICAgICBNZW1vcnlNYXAgPSBOVUxMOw0KPiArICAg IH0NCj4gKyAgfSB3aGlsZSAoU3RhdHVzID09IEVGSV9CVUZGRVJfVE9PX1NNQUxMKTsNCj4gKw0K PiArICBTb3J0TWVtb3J5TWFwIChNZW1vcnlNYXAsIG1VZWZpTWVtb3J5TWFwU2l6ZSwgbVVlZmlE ZXNjcmlwdG9yU2l6ZSk7DQo+ICsNCj4gKyAgbVVlZmlNZW1vcnlNYXAgPSBBbGxvY2F0ZUNvcHlQ b29sIChtVWVmaU1lbW9yeU1hcFNpemUsIE1lbW9yeU1hcCk7DQoNCldoeSBkbyB5b3UgZG8gYW5v dGhlciBhbGxvY2F0aW9uIGhlcmU/ICBDb3VsZG4ndCB5b3UgdXNlIEFsbG9jYXRlUG9vbC9GcmVl UG9vbA0KbGlicmFyeSBmdW5jdGlvbnMgZnJvbSBTTU0gbWVtb3J5IHdpdGggbVVlZmlNZW1vcnlN YXAgaW4gdGhlIGxvZ2ljIGFib3ZlIGFuZA0KcmVtb3ZlIHRoZSB1c2Ugb2YgdGhlIE1lbW9yeU1h cCBsb2NhbCB2YXJpYWJsZT8NCg0KPiArICBBU1NFUlQgKG1VZWZpTWVtb3J5TWFwICE9IE5VTEwp Ow0KPiArDQo+ICsgIGdCUy0+RnJlZVBvb2wgKE1lbW9yeU1hcCk7DQo+ICsNCj4gKyAgcmV0dXJu IDsNCg0KUmVtb3ZlIHJldHVybiBzdGF0ZW1lbnQgYXQgZW5kIG9mIGZ1bmN0aW9uLg0KDQo+ICt9 DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIGZ1bmN0aW9uIHNldHMgVUVGSSBtZW1vcnkgYXR0cmli dXRlIGFjY29yZGluZyB0byBVRUZJIG1lbW9yeSBtYXAuDQo+ICsNCj4gKyAgVGhlIG5vcm1hbCBt ZW1vcnkgcmVnaW9uIGlzIG1hcmtlZCBhcyBub3QgcHJlc2VudCwgc3VjaCBhcw0KPiArICBFZmlM b2FkZXJDb2RlL0RhdGEsIEVmaUJvb3RTZXJ2aWNlc0NvZGUvRGF0YSwgRWZpQ29udmVudGlvbmFs TWVtb3J5LA0KPiArICBFZmlBQ1BJUmVjbGFpbU1lbW9yeS4NCj4gKyoqLw0KPiArVk9JRA0KPiAr U2V0VWVmaU1lbU1hcEF0dHJpYnV0ZXMgKA0KPiArICBWT0lEDQo+ICsgICkNCj4gK3sNCj4gKyAg RUZJX01FTU9SWV9ERVNDUklQVE9SICpNZW1vcnlNYXA7DQo+ICsgIFVJTlROICAgICAgICAgICAg ICAgICBNZW1vcnlNYXBFbnRyeUNvdW50Ow0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgSW5k ZXg7DQo+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICBQcm90ZWN0ZWRNZW1vcnlCYXNlOw0KPiAr ICBVSU5UNjQgICAgICAgICAgICAgICAgUHJvdGVjdGVkTWVtb3J5U2l6ZTsNCj4gKw0KPiArICBE RUJVRyAoKERFQlVHX0lORk8sICJTZXRVZWZpTWVtTWFwQXR0cmlidXRlc1xuIikpOw0KPiArDQo+ ICsgIGlmIChtVWVmaU1lbW9yeU1hcCA9PSBOVUxMKSB7DQo+ICsgICAgREVCVUcgKChERUJVR19J TkZPLCAiVWVmaU1lbW9yeU1hcCAtIE5VTExcbiIpKTsNCj4gKyAgICByZXR1cm4gOw0KPiArICB9 DQo+ICsNCj4gKyAgUHJvdGVjdGVkTWVtb3J5QmFzZSA9IDA7DQo+ICsgIFByb3RlY3RlZE1lbW9y eVNpemUgPSAwOw0KPiArICBNZW1vcnlNYXBFbnRyeUNvdW50ID0gbVVlZmlNZW1vcnlNYXBTaXpl L21VZWZpRGVzY3JpcHRvclNpemU7DQo+ICsgIE1lbW9yeU1hcCA9IG1VZWZpTWVtb3J5TWFwOw0K PiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBNZW1vcnlNYXBFbnRyeUNvdW50OyBJbmRleCsr KSB7DQo+ICsgICAgc3dpdGNoIChNZW1vcnlNYXAtPlR5cGUpIHsNCj4gKyAgICBjYXNlIEVmaUxv YWRlckNvZGU6DQo+ICsgICAgY2FzZSBFZmlMb2FkZXJEYXRhOg0KPiArICAgIGNhc2UgRWZpQm9v dFNlcnZpY2VzQ29kZToNCj4gKyAgICBjYXNlIEVmaUJvb3RTZXJ2aWNlc0RhdGE6DQo+ICsgICAg Y2FzZSBFZmlDb252ZW50aW9uYWxNZW1vcnk6DQo+ICsgICAgY2FzZSBFZmlVbnVzYWJsZU1lbW9y eToNCj4gKyAgICBjYXNlIEVmaUFDUElSZWNsYWltTWVtb3J5Og0KPiArICAgICAgaWYgKFByb3Rl Y3RlZE1lbW9yeUJhc2UgKyBQcm90ZWN0ZWRNZW1vcnlTaXplID09IE1lbW9yeU1hcC0+UGh5c2lj YWxTdGFydCkgew0KPiArICAgICAgICAvLw0KPiArICAgICAgICAvLyBUaGlzIHJlY29yZCBjYW4g YmUgbWVyZ2VkIHRvIHByZXZpb3VzIHJlY29yZA0KPiArICAgICAgICAvLw0KPiArICAgICAgICBQ cm90ZWN0ZWRNZW1vcnlTaXplICs9IEVGSV9QQUdFU19UT19TSVpFKChVSU5UTilNZW1vcnlNYXAt Pk51bWJlck9mUGFnZXMpOw0KPiArICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgLy8NCj4gKyAg ICAgICAgLy8gVGhpcyByZWNvcmQgY2FuIG5vdCBiZSBtZXJnZWQgdG8gcHJldmlvdXMgcmVjb3Jk Lg0KPiArICAgICAgICAvLyBXZSBuZWVkIHNldCBhdHRyaWJ1dGUNCj4gKyAgICAgICAgLy8NCj4g KyAgICAgICAgaWYgKFByb3RlY3RlZE1lbW9yeVNpemUgIT0gMCkgew0KPiArICAgICAgICAgIERF QlVHICgoREVCVUdfSU5GTywgIlVlZmlNZW1vcnkgcHJvdGVjdGlvbjogMHglbHggLSAweCVseFxu IiwNCj4gUHJvdGVjdGVkTWVtb3J5QmFzZSwgUHJvdGVjdGVkTWVtb3J5QmFzZSArIFByb3RlY3Rl ZE1lbW9yeVNpemUpKTsNCj4gKyAgICAgICAgICBTbW1TZXRNZW1vcnlBdHRyaWJ1dGVzICgNCj4g KyAgICAgICAgICAgIFByb3RlY3RlZE1lbW9yeUJhc2UsDQo+ICsgICAgICAgICAgICBQcm90ZWN0 ZWRNZW1vcnlTaXplLA0KPiArICAgICAgICAgICAgRUZJX01FTU9SWV9SUA0KPiArICAgICAgICAg ICAgKTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICAvLw0KPiArICAgICAgICAvLyB0aGVuIHNl dCBhIG5ldyBQcm90ZWN0ZWRNZW1vcnlCYXNlDQo+ICsgICAgICAgIC8vDQo+ICsgICAgICAgIFBy b3RlY3RlZE1lbW9yeUJhc2UgPSBNZW1vcnlNYXAtPlBoeXNpY2FsU3RhcnQ7DQo+ICsgICAgICAg IFByb3RlY3RlZE1lbW9yeVNpemUgPSBFRklfUEFHRVNfVE9fU0laRSgoVUlOVE4pTWVtb3J5TWFw LT5OdW1iZXJPZlBhZ2VzKTsNCj4gKyAgICAgIH0NCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIGRl ZmF1bHQ6DQo+ICsgICAgICAvLw0KPiArICAgICAgLy8gVGhpcyByZWNvcmQgY2FuIG5vdCBiZSBt ZXJnZWQgdG8gcHJldmlvdXMgcmVjb3JkLg0KPiArICAgICAgLy8gV2UgbmVlZCBzZXQgYXR0cmli dXRlDQo+ICsgICAgICAvLw0KPiArICAgICAgaWYgKFByb3RlY3RlZE1lbW9yeVNpemUgIT0gMCkg ew0KPiArICAgICAgICBERUJVRyAoKERFQlVHX0lORk8sICJVZWZpTWVtb3J5IHByb3RlY3Rpb246 IDB4JWx4IC0gMHglbHhcbiIsDQo+IFByb3RlY3RlZE1lbW9yeUJhc2UsIFByb3RlY3RlZE1lbW9y eUJhc2UgKyBQcm90ZWN0ZWRNZW1vcnlTaXplKSk7DQo+ICsgICAgICAgIFNtbVNldE1lbW9yeUF0 dHJpYnV0ZXMgKA0KPiArICAgICAgICAgIFByb3RlY3RlZE1lbW9yeUJhc2UsDQo+ICsgICAgICAg ICAgUHJvdGVjdGVkTWVtb3J5U2l6ZSwNCj4gKyAgICAgICAgICBFRklfTUVNT1JZX1JQDQo+ICsg ICAgICAgICAgKTsNCj4gKyAgICAgIH0NCj4gKyAgICAgIC8vDQo+ICsgICAgICAvLyB0aGVuIHNl dCBhIG5ldyBQcm90ZWN0ZWRNZW1vcnlCYXNlDQo+ICsgICAgICAvLw0KPiArICAgICAgUHJvdGVj dGVkTWVtb3J5QmFzZSA9IE1lbW9yeU1hcC0+UGh5c2ljYWxTdGFydCArDQo+IEVGSV9QQUdFU19U T19TSVpFKChVSU5UTilNZW1vcnlNYXAtPk51bWJlck9mUGFnZXMpOw0KPiArICAgICAgUHJvdGVj dGVkTWVtb3J5U2l6ZSA9IDA7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICB9DQo+ICsgICAgTWVt b3J5TWFwID0gTkVYVF9NRU1PUllfREVTQ1JJUFRPUihNZW1vcnlNYXAsIG1VZWZpRGVzY3JpcHRv clNpemUpOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gV2UgbmVlZCBzZXQgYXR0cmli dXRlIGZvciBsYXN0IGl0ZW0uDQo+ICsgIC8vDQo+ICsgIGlmIChQcm90ZWN0ZWRNZW1vcnlTaXpl ICE9IDApIHsNCj4gKyAgICBERUJVRyAoKERFQlVHX0lORk8sICJVZWZpTWVtb3J5IHByb3RlY3Rp b246IDB4JWx4IC0gMHglbHhcbiIsDQo+IFByb3RlY3RlZE1lbW9yeUJhc2UsIFByb3RlY3RlZE1l bW9yeUJhc2UgKyBQcm90ZWN0ZWRNZW1vcnlTaXplKSk7DQo+ICsgICAgU21tU2V0TWVtb3J5QXR0 cmlidXRlcyAoDQo+ICsgICAgICBQcm90ZWN0ZWRNZW1vcnlCYXNlLA0KPiArICAgICAgUHJvdGVj dGVkTWVtb3J5U2l6ZSwNCj4gKyAgICAgIEVGSV9NRU1PUllfUlANCj4gKyAgICAgICk7DQo+ICsg IH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBEbyBmcmVlIG1VZWZpTWVtb3J5TWFw77+977+9IGl0 IHdpbGwgYmUgY2hlY2tlZCBpbg0KPiBJc1NtbUNvbW1CdWZmZXJGb3JiaWRkZW5BZGRyZXNzKCku DQo+ICsgIC8vDQoNCklzIHRoZXJlIGNvZGUgbWlzc2luZyBoZXJlIHRvIGZyZWUgbVVlZmlNZW1v cnlNYXAsIG9yIGlzIHRoaXMgYW4gZXh0cmEgDQpjb21tZW50IHRoYXQgc2hvdWxkIGJlIHJlbW92 ZWQ/DQoNCj4gKw0KPiArICByZXR1cm4gOw0KDQpSZW1vdmUgcmV0dXJuIHN0YXRlbWVudCBhdCBl bmQgb2YgZnVuY3Rpb24uDQoNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFJldHVybiBpZiB0aGUg QWRkcmVzcyBpcyBmb3JiaWRkZW4gYXMgU01NIGNvbW11bmljYXRpb24gYnVmZmVyLg0KPiArDQo+ ICsgIEBwYXJhbVtpbl0gQWRkcmVzcyB0aGUgYWRkcmVzcyB0byBiZSBjaGVja2VkDQo+ICsNCj4g KyAgQHJldHVybiBUUlVFICBUaGUgYWRkcmVzcyBpcyBmb3JiaWRkZW4gYXMgU01NIGNvbW11bmlj YXRpb24gYnVmZmVyLg0KPiArICBAcmV0dXJuIEZBTFNFIFRoZSBhZGRyZXNzIGlzIGFsbG93ZWQg YXMgU01NIGNvbW11bmljYXRpb24gYnVmZmVyLg0KPiArKiovDQo+ICtCT09MRUFODQo+ICtJc1Nt bUNvbW1CdWZmZXJGb3JiaWRkZW5BZGRyZXNzICgNCj4gKyAgSU4gVUlOVDY0ICBBZGRyZXNzDQo+ ICsgICkNCj4gK3sNCj4gKyAgRUZJX01FTU9SWV9ERVNDUklQVE9SICpNZW1vcnlNYXA7DQo+ICsg IFVJTlROICAgICAgICAgICAgICAgICBNZW1vcnlNYXBFbnRyeUNvdW50Ow0KPiArICBVSU5UTiAg ICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsNCj4gKyAgTWVtb3J5TWFwID0gbVVlZmlNZW1vcnlN YXA7DQo+ICsgIE1lbW9yeU1hcEVudHJ5Q291bnQgPSBtVWVmaU1lbW9yeU1hcFNpemUvbVVlZmlE ZXNjcmlwdG9yU2l6ZTsNCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgTWVtb3J5TWFwRW50 cnlDb3VudDsgSW5kZXgrKykgew0KPiArICAgIHN3aXRjaCAoTWVtb3J5TWFwLT5UeXBlKSB7DQo+ ICsgICAgY2FzZSBFZmlMb2FkZXJDb2RlOg0KPiArICAgIGNhc2UgRWZpTG9hZGVyRGF0YToNCj4g KyAgICBjYXNlIEVmaUJvb3RTZXJ2aWNlc0NvZGU6DQo+ICsgICAgY2FzZSBFZmlCb290U2Vydmlj ZXNEYXRhOg0KPiArICAgIGNhc2UgRWZpQ29udmVudGlvbmFsTWVtb3J5Og0KPiArICAgIGNhc2Ug RWZpVW51c2FibGVNZW1vcnk6DQo+ICsgICAgY2FzZSBFZmlBQ1BJUmVjbGFpbU1lbW9yeToNCj4g KyAgICAgIGlmICgoQWRkcmVzcyA+PSBNZW1vcnlNYXAtPlBoeXNpY2FsU3RhcnQpICYmDQo+ICsg ICAgICAgICAgKEFkZHJlc3MgPCBNZW1vcnlNYXAtPlBoeXNpY2FsU3RhcnQgKyBFRklfUEFHRVNf VE9fU0laRSgoVUlOVE4pTWVtb3J5TWFwLQ0KPiA+TnVtYmVyT2ZQYWdlcykpICkgew0KPiArICAg ICAgICByZXR1cm4gVFJVRTsNCj4gKyAgICAgIH0NCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIGRl ZmF1bHQ6DQo+ICsgICAgICBicmVhazsNCj4gKyAgICB9DQo+ICsgICAgTWVtb3J5TWFwID0gTkVY VF9NRU1PUllfREVTQ1JJUFRPUihNZW1vcnlNYXAsIG1VZWZpRGVzY3JpcHRvclNpemUpOw0KPiAr ICB9DQo+ICsgIHJldHVybiBGQUxTRTsNCj4gK30NCj4gZGlmZiAtLWdpdCBhL1VlZmlDcHVQa2cv UGlTbW1DcHVEeGVTbW0vWDY0L1BhZ2VUYmwuYw0KPiBiL1VlZmlDcHVQa2cvUGlTbW1DcHVEeGVT bW0vWDY0L1BhZ2VUYmwuYw0KPiBpbmRleCA3MjM3ZTU3Li4xN2IyZjRjIDEwMDY0NA0KPiAtLS0g YS9VZWZpQ3B1UGtnL1BpU21tQ3B1RHhlU21tL1g2NC9QYWdlVGJsLmMNCj4gKysrIGIvVWVmaUNw dVBrZy9QaVNtbUNwdUR4ZVNtbS9YNjQvUGFnZVRibC5jDQo+IEBAIC04NjcsNiArODY3LDEzIEBA IFNtaVBGSGFuZGxlciAoDQo+ICAgICAgICApOw0KPiAgICAgICAgQ3B1RGVhZExvb3AgKCk7DQo+ ICAgICAgfQ0KPiArICAgIGlmIChJc1NtbUNvbW1CdWZmZXJGb3JiaWRkZW5BZGRyZXNzIChQRkFk ZHJlc3MpKSB7DQo+ICsgICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiQWNjZXNzIFNNTSBjb21t dW5pY2F0aW9uIGZvcmJpZGRlbiBhZGRyZXNzICgweCVseCkhXG4iLA0KPiBQRkFkZHJlc3MpKTsN Cj4gKyAgICAgIERFQlVHX0NPREUgKA0KPiArICAgICAgICBEdW1wTW9kdWxlSW5mb0J5SXAgKChV SU5UTilTeXN0ZW1Db250ZXh0LlN5c3RlbUNvbnRleHRYNjQtPlJpcCk7DQo+ICsgICAgICApOw0K PiArICAgICAgQ3B1RGVhZExvb3AgKCk7DQo+ICsgICAgfQ0KPiAgICB9DQo+IA0KPiAgICBpZiAo RmVhdHVyZVBjZEdldCAoUGNkQ3B1U21tUHJvZmlsZUVuYWJsZSkpIHsNCj4gLS0NCj4gMi43LjQu d2luZG93cy4xDQoNCg==