From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 134.134.136.100, mailfrom: eric.dong@intel.com) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by groups.io with SMTP; Mon, 12 Aug 2019 01:37:13 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga105.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 12 Aug 2019 01:37:12 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,376,1559545200"; d="scan'208";a="175819362" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by fmsmga008.fm.intel.com with ESMTP; 12 Aug 2019 01:37:12 -0700 Received: from fmsmsx608.amr.corp.intel.com (10.18.126.88) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.439.0; Mon, 12 Aug 2019 01:37:11 -0700 Received: from fmsmsx608.amr.corp.intel.com (10.18.126.88) by fmsmsx608.amr.corp.intel.com (10.18.126.88) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 12 Aug 2019 01:37:11 -0700 Received: from shsmsx105.ccr.corp.intel.com (10.239.4.158) by fmsmsx608.amr.corp.intel.com (10.18.126.88) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.1713.5 via Frontend Transport; Mon, 12 Aug 2019 01:37:11 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.19]) by SHSMSX105.ccr.corp.intel.com ([169.254.11.15]) with mapi id 14.03.0439.000; Mon, 12 Aug 2019 16:37:09 +0800 From: "Dong, Eric" To: "devel@edk2.groups.io" , "lersek@redhat.com" CC: "Ni, Ray" Subject: Re: [edk2-devel] [Patch 3/4] UefiCpuPkg/PiSmmCpuDxeSmm: Supports detect before set new value logic. Thread-Topic: [edk2-devel] [Patch 3/4] UefiCpuPkg/PiSmmCpuDxeSmm: Supports detect before set new value logic. Thread-Index: AQHVTsdld+XBxfKw3U+U+kAPMJAG8qb3J2Kw Date: Mon, 12 Aug 2019 08:37:08 +0000 Message-ID: References: <20190809061159.40248-1-eric.dong@intel.com> <20190809061159.40248-4-eric.dong@intel.com> <0aefcf17-4050-e3fb-86a2-f721feb67760@redhat.com> In-Reply-To: <0aefcf17-4050-e3fb-86a2-f721feb67760@redhat.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Return-Path: eric.dong@intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgTGFzemxvLA0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IGRldmVs QGVkazIuZ3JvdXBzLmlvIFttYWlsdG86ZGV2ZWxAZWRrMi5ncm91cHMuaW9dIE9uIEJlaGFsZiBP Zg0KPiBMYXN6bG8gRXJzZWsNCj4gU2VudDogRnJpZGF5LCBBdWd1c3QgOSwgMjAxOSAxMTozMSBQ TQ0KPiBUbzogRG9uZywgRXJpYyA8ZXJpYy5kb25nQGludGVsLmNvbT47IGRldmVsQGVkazIuZ3Jv dXBzLmlvDQo+IENjOiBOaSwgUmF5IDxyYXkubmlAaW50ZWwuY29tPg0KPiBTdWJqZWN0OiBSZTog W2VkazItZGV2ZWxdIFtQYXRjaCAzLzRdIFVlZmlDcHVQa2cvUGlTbW1DcHVEeGVTbW06DQo+IFN1 cHBvcnRzIGRldGVjdCBiZWZvcmUgc2V0IG5ldyB2YWx1ZSBsb2dpYy4NCj4gDQo+IE9uIDA4LzA5 LzE5IDA4OjExLCBFcmljIERvbmcgd3JvdGU6DQo+ID4gUkVGOiBodHRwczovL2J1Z3ppbGxhLnRp YW5vY29yZS5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDANCj4gPg0KPiA+IFN1cHBvcnRzIG5ldyBs b2dpYyB3aGljaCBkZXRlY3QgY3VycmVudCB2YWx1ZSBiZWZvcmUgc2V0IG5ldyB2YWx1ZS4NCj4g PiBPbmx5IHNldCBuZXcgdmFsdWUgd2hlbiBjdXJyZW50IHZhbHVlIG5vdCBzYW1lIGFzIG5ldyB2 YWx1ZS4NCj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6IEVyaWMgRG9uZyA8ZXJpYy5kb25nQGludGVs LmNvbT4NCj4gPiBDYzogUmF5IE5pIDxyYXkubmlAaW50ZWwuY29tPg0KPiA+IENjOiBMYXN6bG8g RXJzZWsgPGxlcnNla0ByZWRoYXQuY29tPg0KPiA+IC0tLQ0KPiA+ICBVZWZpQ3B1UGtnL1BpU21t Q3B1RHhlU21tL0NwdVMzLmMgfCAxMzUNCj4gPiArKysrKysrKysrKysrKysrKysrKy0tLS0tLS0t LS0NCj4gPiAgMSBmaWxlIGNoYW5nZWQsIDkyIGluc2VydGlvbnMoKyksIDQzIGRlbGV0aW9ucygt KQ0KPiANCj4gSSBoYXZlIG9ubHkgc3VwZXJmaWNpYWwgY29tbWVudHMsIGFzIG15IHVuZGVyc3Rh bmRpbmcgaXMgdGhhdA0KPiAiVWVmaUNwdVBrZy9DcHVTM0RhdGFEeGUiLCB3aGljaCBpcyB3aGF0 IE9WTUYgdXNlcywgZG9lc24ndCBzZXQgdXAgYW55DQo+IHJlZ2lzdGVyIHByb2dyYW1taW5nIGZv ciBTMyByZXN1bWUuDQo+IA0KPiA+IGRpZmYgLS1naXQgYS9VZWZpQ3B1UGtnL1BpU21tQ3B1RHhl U21tL0NwdVMzLmMNCj4gPiBiL1VlZmlDcHVQa2cvUGlTbW1DcHVEeGVTbW0vQ3B1UzMuYw0KPiA+ IGluZGV4IGQ4YzZiMTllYWQuLjk1N2YyODk2ZWIgMTAwNjQ0DQo+ID4gLS0tIGEvVWVmaUNwdVBr Zy9QaVNtbUNwdUR4ZVNtbS9DcHVTMy5jDQo+ID4gKysrIGIvVWVmaUNwdVBrZy9QaVNtbUNwdUR4 ZVNtbS9DcHVTMy5jDQo+ID4gQEAgLTE1OSw2ICsxNTksNTggQEAgUzNXYWl0Rm9yU2VtYXBob3Jl ICgNCj4gPiAgICAgICAgICAgICAgICkgIT0gVmFsdWUpOw0KPiA+ICB9DQo+ID4NCj4gPiArLyoq DQo+ID4gKyAgUmVhZCAvIHdyaXRlIENSIHZhbHVlLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5d ICAgICAgQ3JJbmRleCAgICAgICAgIFRoZSBDUiBpbmRleCB3aGljaCBuZWVkIHRvIHJlYWQvd3Jp dGUuDQo+ID4gKyAgQHBhcmFtW2luXSAgICAgIFJlYWQgICAgICAgICAgICBSZWFkIG9yIHdyaXRl LiBUUlVFIGlzIHJlYWQuDQo+ID4gKyAgQHBhcmFtW2luLG91dF0gIENyVmFsdWUgICAgICAgICBD UiB2YWx1ZS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCAgICBFRklfU1VDQ0VTUyBtZWFucyByZWFk L3dyaXRlIHN1Y2Nlc3MsIGVsc2UgcmV0dXJuDQo+IEVGSV9VTlNVUFBPUlRFRC4NCj4gPiArKiov DQo+ID4gK1VJTlRODQo+ID4gK1JlYWRXcml0ZUNyICgNCj4gPiArICBJTiAgICAgVUlOVDMyICAg ICAgIENySW5kZXgsDQo+ID4gKyAgSU4gICAgIEJPT0xFQU4gICAgICBSZWFkLA0KPiA+ICsgIElO IE9VVCBVSU5UTiAgICAgICAgKkNyVmFsdWUNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBzd2l0 Y2ggKENySW5kZXgpIHsNCj4gPiArICBjYXNlIDA6DQo+ID4gKyAgICBpZiAoUmVhZCkgew0KPiA+ ICsgICAgICAqQ3JWYWx1ZSA9IEFzbVJlYWRDcjAgKCk7DQo+ID4gKyAgICB9IGVsc2Ugew0KPiA+ ICsgICAgICBBc21Xcml0ZUNyMCAoKkNyVmFsdWUpOw0KPiA+ICsgICAgfQ0KPiA+ICsgICAgYnJl YWs7DQo+ID4gKyAgY2FzZSAyOg0KPiA+ICsgICAgaWYgKFJlYWQpIHsNCj4gPiArICAgICAgKkNy VmFsdWUgPSBBc21SZWFkQ3IyICgpOw0KPiA+ICsgICAgfSBlbHNlIHsNCj4gPiArICAgICAgQXNt V3JpdGVDcjIgKCpDclZhbHVlKTsNCj4gPiArICAgIH0NCj4gPiArICAgIGJyZWFrOw0KPiA+ICsg IGNhc2UgMzoNCj4gPiArICAgIGlmIChSZWFkKSB7DQo+ID4gKyAgICAgICpDclZhbHVlID0gQXNt UmVhZENyMyAoKTsNCj4gPiArICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgIEFzbVdyaXRlQ3IzICgq Q3JWYWx1ZSk7DQo+ID4gKyAgICB9DQo+ID4gKyAgICBicmVhazsNCj4gPiArICBjYXNlIDQ6DQo+ ID4gKyAgICBpZiAoUmVhZCkgew0KPiA+ICsgICAgICAqQ3JWYWx1ZSA9IEFzbVJlYWRDcjQgKCk7 DQo+ID4gKyAgICB9IGVsc2Ugew0KPiA+ICsgICAgICBBc21Xcml0ZUNyNCAoKkNyVmFsdWUpOw0K PiA+ICsgICAgfQ0KPiA+ICsgICAgYnJlYWs7DQo+ID4gKyAgZGVmYXVsdDoNCj4gPiArICAgIHJl dHVybiBFRklfVU5TVVBQT1JURUQ7Ow0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgcmV0dXJuIEVG SV9TVUNDRVNTOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICAvKioNCj4gPiAgICBJbml0aWFsaXplIHRo ZSBDUFUgcmVnaXN0ZXJzIGZyb20gYSByZWdpc3RlciB0YWJsZS4NCj4gPg0KPiA+IEBAIC0xODgs NiArMjQwLDggQEAgUHJvZ3JhbVByb2Nlc3NvclJlZ2lzdGVyICgNCj4gPiAgICBVSU5UTiAgICAg ICAgICAgICAgICAgICAgIFByb2Nlc3NvckluZGV4Ow0KPiA+ICAgIFVJTlROICAgICAgICAgICAg ICAgICAgICAgVmFsaWRUaHJlYWRDb3VudDsNCj4gPiAgICBVSU5UMzIgICAgICAgICAgICAgICAg ICAgICpWYWxpZENvcmVDb3VudFBlclBhY2thZ2U7DQo+ID4gKyAgRUZJX1NUQVRVUyAgICAgICAg ICAgICAgICBTdGF0dXM7DQo+ID4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICBDdXJyZW50 VmFsdWU7DQo+ID4NCj4gPiAgICAvLw0KPiA+ICAgIC8vIFRyYXZlcnNlIFJlZ2lzdGVyIFRhYmxl IG9mIHRoaXMgbG9naWNhbCBwcm9jZXNzb3IgQEAgLTIwNiw1NQ0KPiA+ICsyNjAsNTAgQEAgUHJv Z3JhbVByb2Nlc3NvclJlZ2lzdGVyICgNCj4gPiAgICAgIC8vIFRoZSBzcGVjaWZpZWQgcmVnaXN0 ZXIgaXMgQ29udHJvbCBSZWdpc3Rlcg0KPiA+ICAgICAgLy8NCj4gPiAgICAgIGNhc2UgQ29udHJv bFJlZ2lzdGVyOg0KPiA+IC0gICAgICBzd2l0Y2ggKFJlZ2lzdGVyVGFibGVFbnRyeS0+SW5kZXgp IHsNCj4gPiAtICAgICAgY2FzZSAwOg0KPiA+IC0gICAgICAgIFZhbHVlID0gQXNtUmVhZENyMCAo KTsNCj4gPiAtICAgICAgICBWYWx1ZSA9IChVSU5UTikgQml0RmllbGRXcml0ZTY0ICgNCj4gPiAt ICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSwNCj4gPiAtICAgICAgICAgICAgICAgICAg ICAgICAgICBSZWdpc3RlclRhYmxlRW50cnktPlZhbGlkQml0U3RhcnQsDQo+ID4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgUmVnaXN0ZXJUYWJsZUVudHJ5LT5WYWxpZEJpdFN0YXJ0ICsgUmVn aXN0ZXJUYWJsZUVudHJ5LQ0KPiA+VmFsaWRCaXRMZW5ndGggLSAxLA0KPiA+IC0gICAgICAgICAg ICAgICAgICAgICAgICAgIChVSU5UTikgUmVnaXN0ZXJUYWJsZUVudHJ5LT5WYWx1ZQ0KPiA+IC0g ICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ID4gLSAgICAgICAgQXNtV3JpdGVDcjAgKFZh bHVlKTsNCj4gPiAtICAgICAgICBicmVhazsNCj4gPiAtICAgICAgY2FzZSAyOg0KPiA+IC0gICAg ICAgIFZhbHVlID0gQXNtUmVhZENyMiAoKTsNCj4gPiAtICAgICAgICBWYWx1ZSA9IChVSU5UTikg Qml0RmllbGRXcml0ZTY0ICgNCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSwN Cj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlclRhYmxlRW50cnktPlZhbGlk Qml0U3RhcnQsDQo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXJUYWJsZUVu dHJ5LT5WYWxpZEJpdFN0YXJ0ICsgUmVnaXN0ZXJUYWJsZUVudHJ5LQ0KPiA+VmFsaWRCaXRMZW5n dGggLSAxLA0KPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgIChVSU5UTikgUmVnaXN0ZXJU YWJsZUVudHJ5LT5WYWx1ZQ0KPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ID4g LSAgICAgICAgQXNtV3JpdGVDcjIgKFZhbHVlKTsNCj4gPiAtICAgICAgICBicmVhazsNCj4gPiAt ICAgICAgY2FzZSAzOg0KPiA+IC0gICAgICAgIFZhbHVlID0gQXNtUmVhZENyMyAoKTsNCj4gPiAt ICAgICAgICBWYWx1ZSA9IChVSU5UTikgQml0RmllbGRXcml0ZTY0ICgNCj4gPiAtICAgICAgICAg ICAgICAgICAgICAgICAgICBWYWx1ZSwNCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICBS ZWdpc3RlclRhYmxlRW50cnktPlZhbGlkQml0U3RhcnQsDQo+ID4gLSAgICAgICAgICAgICAgICAg ICAgICAgICAgUmVnaXN0ZXJUYWJsZUVudHJ5LT5WYWxpZEJpdFN0YXJ0ICsgUmVnaXN0ZXJUYWJs ZUVudHJ5LQ0KPiA+VmFsaWRCaXRMZW5ndGggLSAxLA0KPiA+IC0gICAgICAgICAgICAgICAgICAg ICAgICAgIChVSU5UTikgUmVnaXN0ZXJUYWJsZUVudHJ5LT5WYWx1ZQ0KPiA+IC0gICAgICAgICAg ICAgICAgICAgICAgICAgICk7DQo+ID4gLSAgICAgICAgQXNtV3JpdGVDcjMgKFZhbHVlKTsNCj4g PiAtICAgICAgICBicmVhazsNCj4gPiAtICAgICAgY2FzZSA0Og0KPiA+IC0gICAgICAgIFZhbHVl ID0gQXNtUmVhZENyNCAoKTsNCj4gPiAtICAgICAgICBWYWx1ZSA9IChVSU5UTikgQml0RmllbGRX cml0ZTY0ICgNCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSwNCj4gPiAtICAg ICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlclRhYmxlRW50cnktPlZhbGlkQml0U3RhcnQs DQo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXJUYWJsZUVudHJ5LT5WYWxp ZEJpdFN0YXJ0ICsgUmVnaXN0ZXJUYWJsZUVudHJ5LQ0KPiA+VmFsaWRCaXRMZW5ndGggLSAxLA0K PiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgIChVSU5UTikgUmVnaXN0ZXJUYWJsZUVudHJ5 LT5WYWx1ZQ0KPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ID4gLSAgICAgICAg QXNtV3JpdGVDcjQgKFZhbHVlKTsNCj4gPiAtICAgICAgICBicmVhazsNCj4gPiAtICAgICAgZGVm YXVsdDoNCj4gPiAtICAgICAgICBicmVhazsNCj4gPiArICAgICAgU3RhdHVzID0gUmVhZFdyaXRl Q3IoUmVnaXN0ZXJUYWJsZUVudHJ5LT5JbmRleCwgVFJVRSwgJlZhbHVlKTsNCj4gDQo+ICgxKSBT cGFjZSBtaXNzaW5nIHJpZ2h0IGFmdGVyICJSZWFkV3JpdGVDciIuDQoNCjEuIFdpbGwgZml4IGl0 IGluIG15IG5leHQgdmVyc2lvbiBjaGFuZ2UuDQoNCj4gDQo+ID4gKyAgICAgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gPiArICAgICAgICByZXR1cm47DQo+ID4gKyAgICAgIH0NCj4gDQo+ ICgyKSBUaGlzIGNoYW5nZXMgdGhlIGNvbnRyb2wgZmxvdy4NCj4gDQo+IFByZXZpb3VzbHksIGEg Q1IgcmVmZXJlbmNlIGRpZmZlcmVudCBmcm9tIENSMCwgQ1IyLCBDUjMsIGFuZCBDUjQgd291bGQg YWxsb3cNCj4gdGhlIGxvb3AgdG8gcHJvY2VzcyBmdXJ0aGVyIGVudHJpZXMgZnJvbSB0aGUgcmVn aXN0ZXIgdGFibGUuDQo+IA0KPiBUaGlzIGNoYW5nZSBjb3VsZCBiZSBqdXN0aWZpZWQsIGJ1dCB0 aGVuIGl0IG5lZWRzIHRvIGJlIGluIGEgc2VwYXJhdGUgcGF0Y2guDQoNCjIuIEdvb2QgY2F0Y2gs IHRoaXMgaXMgbm90IGFuIGV4cGVjdCBjaGFuZ2UuIFNob3VsZCB1c2UgImNvbnRpbnVlIiBmb3Ig aXQuIFdpbGwgdXBkYXRlIGl0IGluIG15IG5leHQgY2hhbmdlLg0KDQo+IA0KPiA+ICsgICAgICBp ZiAoUmVnaXN0ZXJUYWJsZUVudHJ5LT5EZXRlY3RJdCkgew0KPiA+ICsgICAgICAgIEN1cnJlbnRW YWx1ZSA9IEJpdEZpZWxkUmVhZDY0KA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgVmFs dWUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlclRhYmxlRW50cnktPlZh bGlkQml0U3RhcnQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlclRhYmxl RW50cnktPlZhbGlkQml0U3RhcnQgKyBSZWdpc3RlclRhYmxlRW50cnktDQo+ID5WYWxpZEJpdExl bmd0aCAtIDENCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ID4gKyAgICAgICAg aWYgKEN1cnJlbnRWYWx1ZSA9PSBSZWdpc3RlclRhYmxlRW50cnktPlZhbHVlKSB7DQo+ID4gKyAg ICAgICAgICByZXR1cm47DQo+ID4gKyAgICAgICAgfQ0KPiANCj4gKDMpIFNhbWUgY29tbWVudCBo ZXJlIC0tIGlmIHRoZSB2YWx1ZSByZXRyaWV2ZWQgZnJvbSB0aGUgcmVjb2duaXplZCByZWdpc3Rl cg0KPiBkaXZlcmdlcyBmcm9tIHRoZSBleHBlY3RlZCB2YWx1ZSwgaXMgdGhhdCBncm91bmRzIGVu b3VnaCBmb3IgdGVybWluYXRpbmcNCj4gdGhlIHByb2Nlc3Npbmc/DQoNCjMuIEdvb2QgY2F0Y2gs IGhlcmUgc2hvdWxkIGFsc28gdXNlICJjb250aW51ZSIuIFdpbGwgdXBkYXRlIGl0IGluIG15IG5l eHQgcGF0Y2guDQoNCj4gDQo+IEknZCBzdWdnZXN0IHNwbGl0dGluZyB1cCB0aGlzIHBhdGNoLg0K PiANCj4gLSBPbmUgcGF0Y2ggY291bGQgYmUgZmFjdG9yaW5nIG91dCBSZWFkV3JpdGVDcigpLCB3 aXRob3V0IGNoYW5nZXMgaW4NCj4gZnVuY3Rpb25hbGl0eS4NCj4gDQo+IC0gQW5vdGhlciBwYXRj aCBjb3VsZCBiZSB0aGUgZWFybHkgcmV0dXJuLCBpZiB0aGF0IGlzIG5vdCBhIGJ1ZyBpbiB0aGUg cHJlc2VudA0KPiBwYXRjaCwgYnV0IGFuIGludGVuZGVkIGNoYW5nZS4NCj4gDQo+IC0gQW5vdGhl ciBwYXRjaCBjb3VsZCBiZSB0aGUgQ29tcGFyZS1BbmQtU2V0IGxvZ2ljLg0KDQo0LiBJIHdpbGwg Z2VuZXJhdGUgdGhlIGZhY3RvcmluZyBvdXQgb2YgUmVhZFdyaXRlQ3IgY2hhbmdlIHRvIGEgc2Vw YXJhdGUgb25lIGluIG15IG5leHQgdmVyc2lvbiBjaGFuZ2VzLg0KDQo+IA0KPiA+ICAgICAgICB9 DQo+ID4gKyAgICAgIFZhbHVlID0gKFVJTlROKSBCaXRGaWVsZFdyaXRlNjQgKA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICBWYWx1ZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg UmVnaXN0ZXJUYWJsZUVudHJ5LT5WYWxpZEJpdFN0YXJ0LA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICBSZWdpc3RlclRhYmxlRW50cnktPlZhbGlkQml0U3RhcnQgKyBSZWdpc3RlclRhYmxl RW50cnktDQo+ID5WYWxpZEJpdExlbmd0aCAtIDEsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgIFJlZ2lzdGVyVGFibGVFbnRyeS0+VmFsdWUNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgKTsNCj4gPiArICAgICAgUmVhZFdyaXRlQ3IgKFJlZ2lzdGVyVGFibGVFbnRyeS0+SW5kZXgs IEZBTFNFLCAmVmFsdWUpOw0KPiA+ICAgICAgICBicmVhazsNCj4gPiAgICAgIC8vDQo+ID4gICAg ICAvLyBUaGUgc3BlY2lmaWVkIHJlZ2lzdGVyIGlzIE1vZGVsIFNwZWNpZmljIFJlZ2lzdGVyDQo+ ID4gICAgICAvLw0KPiA+ICAgICAgY2FzZSBNc3I6DQo+ID4gKyAgICAgIGlmIChSZWdpc3RlclRh YmxlRW50cnktPkRldGVjdEl0KSB7DQo+ID4gKyAgICAgICAgVmFsdWUgPSAoVUlOVE4pQXNtUmVh ZE1zcjY0IChSZWdpc3RlclRhYmxlRW50cnktPkluZGV4KTsNCj4gPiArICAgICAgICBpZiAoUmVn aXN0ZXJUYWJsZUVudHJ5LT5WYWxpZEJpdExlbmd0aCA+PSA2NCkgew0KPiA+ICsgICAgICAgICAg aWYgKFZhbHVlID09IFJlZ2lzdGVyVGFibGVFbnRyeS0+VmFsdWUpIHsNCj4gPiArICAgICAgICAg ICAgcmV0dXJuOw0KPiA+ICsgICAgICAgICAgfQ0KPiA+ICsgICAgICAgIH0gZWxzZSB7DQo+ID4g KyAgICAgICAgICBDdXJyZW50VmFsdWUgPSBCaXRGaWVsZFJlYWQ2NCgNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgVmFsdWUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg IFJlZ2lzdGVyVGFibGVFbnRyeS0+VmFsaWRCaXRTdGFydCwNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgUmVnaXN0ZXJUYWJsZUVudHJ5LT5WYWxpZEJpdFN0YXJ0ICsgUmVnaXN0ZXJU YWJsZUVudHJ5LQ0KPiA+VmFsaWRCaXRMZW5ndGggLSAxDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7DQo+ID4gKyAgICAgICAgICBpZiAoQ3VycmVudFZhbHVlID09IFJlZ2lzdGVy VGFibGVFbnRyeS0+VmFsdWUpIHsNCj4gPiArICAgICAgICAgICAgcmV0dXJuOw0KPiA+ICsgICAg ICAgICAgfQ0KPiA+ICsgICAgICAgIH0NCj4gPiArICAgICAgfQ0KPiA+ICsNCj4gPiAgICAgICAg Ly8NCj4gPiAgICAgICAgLy8gSWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gcmVzdG9yZSBy ZWdpc3RlciBzZXR0aW5nIGFmdGVyIElOSVQgc2lnbmFsLA0KPiA+ICAgICAgICAvLyB0aGVyZSBp cyBubyBuZWVkIHRvIHJlc3RvcmUgTVNScyBpbiByZWdpc3RlciB0YWJsZS4NCj4gPg0KPiANCj4g KDQpICJlYXJseSByZXR1cm4iIGlzc3VlIGFnYWluIC0tIGlmIHRoZSBNU1IgaGFzIHRoZSBpbnRl bmRlZCB2YWx1ZSBhbHJlYWR5LA0KPiB0aGF0J3MgbGlrZWx5IG5vIHJlYXNvbiBmb3IgaWdub3Jp bmcgdGhlIHJlc3Qgb2YgdGhlIHJlZ2lzdGVyIHRhYmxlLiBJIGd1ZXNzIHRoZQ0KPiAiY29udGlu dWUiIHN0YXRlbWVudCBjb3VsZCBiZSB1c2VmdWwuDQogDQo1LiB5ZXMsIGl0IHNob3VsZCB1c2Ug ImNvbnRpbnVlIiBmb3IgdGhpcyBjYXNlLCB3aWxsIHVwZGF0ZSBpdCBpbiBteSBuZXh0IHZlcnNp b24gY2hhbmdlLg0KDQo+IA0KPiAoNSkgSSB3b3VsZCBzdWdnZXN0IHNwbGl0dGluZyB0aGUgTVNS IHVwZGF0ZSB0byBhIHNlcGFyYXRlIHBhdGNoIGFzIHdlbGwuDQoNCjYuIFRoZSBsb2dpYyBzaG91 bGQgdXNlICJjb250aW51ZSIgaW5zdGVhZCBvZiAicmV0dXJuIi4gVGhpcyBpcyBmb2xsb3cgdGhl IG9yaWdpbmFsIGxvZ2ljLiBTbyBJIHdpbGwgbm90IHNlcGFyYXRlIHRoZSBjaGFuZ2UgdG8gZGlm ZmVyZW50IHBhdGNoZXMuDQoNClRoYW5rcywNCkVyaWMNCj4gDQo+IFRoYW5rcw0KPiBMYXN6bG8N Cj4gDQo+IA0KDQo=