From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.93; helo=mga11.intel.com; envelope-from=star.zeng@intel.com; receiver=edk2-devel@lists.01.org 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 D6ED8211D5055 for ; Mon, 11 Jun 2018 20:36:46 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 11 Jun 2018 20:36:46 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,213,1526367600"; d="scan'208";a="58456198" Received: from fmsmsx105.amr.corp.intel.com ([10.18.124.203]) by orsmga003.jf.intel.com with ESMTP; 11 Jun 2018 20:36:46 -0700 Received: from fmsmsx158.amr.corp.intel.com (10.18.116.75) by FMSMSX105.amr.corp.intel.com (10.18.124.203) with Microsoft SMTP Server (TLS) id 14.3.319.2; Mon, 11 Jun 2018 20:36:45 -0700 Received: from shsmsx103.ccr.corp.intel.com (10.239.4.69) by fmsmsx158.amr.corp.intel.com (10.18.116.75) with Microsoft SMTP Server (TLS) id 14.3.319.2; Mon, 11 Jun 2018 20:36:45 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.223]) by SHSMSX103.ccr.corp.intel.com ([169.254.4.51]) with mapi id 14.03.0319.002; Tue, 12 Jun 2018 11:36:43 +0800 From: "Zeng, Star" To: Laszlo Ersek , "Wang, Jian J" , "edk2-devel@lists.01.org" CC: "Ni, Ruiyu" , "Yao, Jiewen" , "Dong, Eric" , "Zeng, Star" Thread-Topic: [edk2] [PATCH 1/2] UefiCpuPkg/CpuDxe: allow accessing (DXE) page table in SMM mode Thread-Index: AQHUAVMaznh+wW0ajkeltKHpqqsiWKRac5uAgAGDraCAAAMCEA== Date: Tue, 12 Jun 2018 03:36:42 +0000 Message-ID: <0C09AFA07DD0434D9E2A0C6AEB0483103BB55B46@shsmsx102.ccr.corp.intel.com> References: <20180611070833.5440-1-jian.j.wang@intel.com> <20180611070833.5440-2-jian.j.wang@intel.com> <0C09AFA07DD0434D9E2A0C6AEB0483103BB55B2F@shsmsx102.ccr.corp.intel.com> In-Reply-To: <0C09AFA07DD0434D9E2A0C6AEB0483103BB55B2F@shsmsx102.ccr.corp.intel.com> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH 1/2] UefiCpuPkg/CpuDxe: allow accessing (DXE) page table in SMM mode X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 12 Jun 2018 03:36:47 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 U29ycnksIGZpeCB0eXBvLg0KDQpEWEUgPiAoU01NIGNvbW11bmNhdGlvbikgPiBJblNtbSA9IFRS VUUgPiBTTU0gZHJpdmVyIGRpc3BhdGNoZXIvU01NIGhhbmRsZXIgPiBJblNtbSA9IEZBTFNFID4g KGV4aXQgU01NIGNvbW11bmljYXRpb24pID4gRFhFDQoNCi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0t LS0tDQpGcm9tOiBaZW5nLCBTdGFyIA0KU2VudDogVHVlc2RheSwgSnVuZSAxMiwgMjAxOCAxMToz NSBBTQ0KVG86IExhc3psbyBFcnNlayA8bGVyc2VrQHJlZGhhdC5jb20+OyBXYW5nLCBKaWFuIEog PGppYW4uai53YW5nQGludGVsLmNvbT47IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnDQpDYzogTmks IFJ1aXl1IDxydWl5dS5uaUBpbnRlbC5jb20+OyBZYW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRl bC5jb20+OyBEb25nLCBFcmljIDxlcmljLmRvbmdAaW50ZWwuY29tPjsgWmVuZywgU3RhciA8c3Rh ci56ZW5nQGludGVsLmNvbT4NClN1YmplY3Q6IFJFOiBbZWRrMl0gW1BBVENIIDEvMl0gVWVmaUNw dVBrZy9DcHVEeGU6IGFsbG93IGFjY2Vzc2luZyAoRFhFKSBwYWdlIHRhYmxlIGluIFNNTSBtb2Rl DQoNClNoYXJlIHNvbWUgaW5mb3JtYXRpb24gaGVyZSBhY2NvcmRpbmcgdG8gbXkga25vd2xlZGdl Lg0KDQpUaGUgRUZJX1NNTV9CQVNFMl9QUk9UT0NPTC5JblNtbSBkZWZpbml0aW9uIGluIFBJIHNw ZWMgaXMgcmVhbGx5IHZlcnkgY29uZnVzaW9uLiBUaGUgbmFtaW5nIGZvciBpdCBhcmUgbm90IGNv bnNpc3RlbnQuDQpUaGUgaW50ZXJmYWNlIG5hbWU6IEluKlNtbSoNClRoZSB0eXBlZGVmIG5hbWUg b2YgSW5TbW06IEVGSV8qU01NX0lOU0lERV9PVVQqMiBUaGUgc2Vjb25kIHBhcmFtZXRlciBuYW1l IG9mIEluU21tOiBJbipTbXJhbSoNCiANCkluIHJlYWxpdHksIHRoZSBpbXBsZW1lbnRhdGlvbiBv ZiBFRklfU01NX0JBU0UyX1BST1RPQ09MLkluU21tIGluIFBpU21tSXBsIHJldHVybnMgdGhlIGlu Zm9ybWF0aW9uIHRoYXQgd2hldGhlciBjdXJyZW50IGV4ZWN1dGluZyBjb2RlIGlzIFNNTSBjb2Rl IG9yIGV4ZWN1dGVkIGZyb20gU01NIGNvZGUuDQoNCkRYRSA+IChTTU0gY29tbXVuY2F0aW9uKSA+ IEluU21tID0gVFJVRSA+IFNNTSBkcml2ZXIgZGlzcGF0Y2hlci9TTU0gaGFuZGxlciA+IChleGl0 IFNNTSBjb21tdW5pY2F0aW9uKSA+IEluU21tID0gRkFMU0UgPiBEWEUNCg0KDQpUaGFua3MsDQpT dGFyDQoNCi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBlZGsyLWRldmVsIFttYWls dG86ZWRrMi1kZXZlbC1ib3VuY2VzQGxpc3RzLjAxLm9yZ10gT24gQmVoYWxmIE9mIExhc3psbyBF cnNlaw0KU2VudDogTW9uZGF5LCBKdW5lIDExLCAyMDE4IDg6MTggUE0NClRvOiBXYW5nLCBKaWFu IEogPGppYW4uai53YW5nQGludGVsLmNvbT47IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnDQpDYzog TmksIFJ1aXl1IDxydWl5dS5uaUBpbnRlbC5jb20+OyBZYW8sIEppZXdlbiA8amlld2VuLnlhb0Bp bnRlbC5jb20+OyBEb25nLCBFcmljIDxlcmljLmRvbmdAaW50ZWwuY29tPg0KU3ViamVjdDogUmU6 IFtlZGsyXSBbUEFUQ0ggMS8yXSBVZWZpQ3B1UGtnL0NwdUR4ZTogYWxsb3cgYWNjZXNzaW5nIChE WEUpIHBhZ2UgdGFibGUgaW4gU01NIG1vZGUNCg0KSGkgSmlhbiwNCg0KT24gMDYvMTEvMTggMDk6 MDgsIEppYW4gSiBXYW5nIHdyb3RlOg0KPiBUaGUgU01NIHZlcnNpb24gb2YgTWVtb3J5QWxsb2Nh dGlvbkxpYiBhbGxvd3MgdG8gZnJlZSBtZW1vcnkgYWxsb2NhdGVkIA0KPiBpbiBEWEUgKGJlZm9y ZSBFbmRPZkR4ZSkuIFRoaXMgaXMgZG9uZSBieSBjaGVja2luZyB0aGUgbWVtb3J5IHJhbmdlIA0K PiBhbmQgY2FsbGluZyBnQlMgc2VydmljZXMgdG8gZG8gcmVhbCBvcGVyYXRpb24gaWYgdGhlIG1l bW9yeSB0byBmcmVlIGlzIA0KPiBvdXQgb2YgU01SQU0uIFRoaXMgd291bGQgY2F1c2UgcHJvYmxl bSBpZiBzb21lIG1lbW9yeSByZWxhdGVkIA0KPiBmZWF0dXJlcywgbGlrZSBIZWFwIEd1YXJkLCBo YXZlIHRvIHVwZGF0ZSBwYWdlIHRhYmxlIHRvIGNoYW5nZSBtZW1vcnkgYXR0cmlidXRlcy4NCj4g QmVjYXVzZSBwYWdlIHRhYmxlIGluIFNNTSBtb2RlIGlzIGRpZmZlcmVudCBmcm9tIERYRSBtb2Rl LCBnQlMgbWVtb3J5IA0KPiBzZXJ2aWNlcyBjYW5ub3QgZ2V0IHRoZSBjb3JyZWN0IGF0dHJpYnV0 ZXMgb2YgRFhFIG1lbW9yeSBmcm9tIFNNTSBwYWdlIA0KPiB0YWJsZSBhbmQgdGhlbiBjYXVzZSBp bmNvcnJlY3QgbWVtb3J5IG1hbmlwdWxhdGlvbnMuDQoNCigxKSBJIHRoaW5rIHRoaXMgZGVzY3Jp cHRpb24gbWFrZXMgc2Vuc2UsIGJ1dCBpdCBkb2VzIG5vdCBoaWdobGlnaHQgdGhlIGludm9sdmVt ZW50IG9mIENwdUR4ZS4NCg0KKDFhKSBQbGVhc2UgcmVmZXJlbmNlICJNZGVQa2cvTGlicmFyeS9T bW1NZW1vcnlBbGxvY2F0aW9uTGliIiBzcGVjaWZpY2FsbHkuDQoNCigxYikgVGhlIFNtbU1lbW9y eUFsbG9jYXRpb25MaWIgaW5zdGFuY2UgaW1wbGllcyB0aGF0IHRoZSBjYWxsIGNoYWluIHN0YXJ0 cyB3aXRoIGEgRFhFX1NNTV9EUklWRVIgY2FsbGluZyBGcmVlUG9vbCgpIG9yIEZyZWVQYWdlcygp Lg0KDQpEWEVfU01NX0RSSVZFUnMgY2FuIG9ubHkgY2FsbCBib290IHNlcnZpY2VzLCBhbmQgcHJv dG9jb2xzIGxvY2F0ZWQgd2l0aCBib290IHNlcnZpY2VzLCBpbiB0aGVpciBlbnRyeSBwb2ludCBm dW5jdGlvbnMuDQoNCkNwdUR4ZSBpcyBhIERYRV9EUklWRVIgYW5kIGl0IHByb3ZpZGVzIHRoZSBD UFUgYXJjaCBwcm90b2NvbCAoYW5kIHRoZSBNUCBzZXJ2aWNlcyBwcm90b2NvbCkuIFRodXMsIG91 ciBjYWxsIGNoYWluIGNhbiBvbmx5IG9jY3VyIGlmOg0KDQotIGEgRFhFX1NNTV9EUklWRVIgY2Fs bHMgdGhlIEZyZWVQb29sKCkgb3IgRnJlZVBhZ2VzKCkgbGlicmFyeSBBUEksDQoNCi0gaW4gaXRz IGVudHJ5IHBvaW50IGZ1bmN0aW9uLA0KDQotIHJlbGVhc2luZyBtZW1vcnkgdGhhdCdzIG5vdCBT TVJBTSwNCg0KLSBhbmQgdGhlIGhlYXAgZ3VhcmQgZmVhdHVyZSBpcyBlbmFibGVkLCBzbyB0aGUg RnJlZVBvb2woKSBvcg0KICBGcmVlUGFnZXMoKSBib290IHNlcnZpY2UgZW5kcyB1cCBjYWxsaW5n DQogIEVGSV9DUFVfQVJDSF9QUk9UT0NPTC5TZXRNZW1vcnlBdHRyaWJ1dGVzKCkuDQoNClBsZWFz ZSBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIGNvbW1pdCBtZXNzYWdlLg0KDQooMikg Q2FuIHlvdSByZW1pbmQgbWUgaG93IHRoZSBTTU0gcGFnZSB0YWJsZXMgbWFwIG5vbi1TTVJBTSBt ZW1vcnk/DQoNCkJlY2F1c2UsIEkgYXNzdW1lIHRoYXQsIGFmdGVyIGEgRnJlZVBhZ2VzKCkgbGli YXJ5IEFQSSBjYWxsLCB0aGUgZnJlZWQgbWVtb3J5IHNob3VsZCBub3QgYmUgYWNjZXNzaWJsZSB0 byBlaXRoZXIgU01NIGNvZGUgb3Igbm9ybWFsIERYRSBjb2RlLg0KVGhpcyBzZWVtcyB0byBpbXBs eSB0aGF0IGJvdGggc2V0cyBvZiBwYWdlIHRhYmxlcyBzaG91bGQgYmUgbW9kaWZpZWQuDQpXaGF0 IGFtIEkgbWlzc2luZz8NCg0KPiANCj4gVGhlIHNvbHV0aW9uIGluIHRoaXMgcGF0Y2ggaXMgdG8g c3RvcmUgdGhlIERYRSBwYWdlIHRhYmxlIGluZm9ybWF0aW9uIA0KPiAoZS5nLiB2YWx1ZSBvZiBD UjAsIENSMyByZWdpc3RlcnMsIGV0Yy4pIGluIGEgZ2xvYmFsIHZhcmlhYmxlIG9mIA0KPiBDcHVE eGUgZHJpdmVyLiBJZiBDcHVEeGUgZGV0ZWN0cyBpdCdzIGluIFNNTSBtb2RlLCBpdCB3aWxsIHVz ZSB0aGlzIA0KPiBnbG9iYWwgdmFyaWFibGUgdG8gYWNjZXNzIHBhZ2UgdGFibGUgaW5zdGVhZCBv ZiBjdXJyZW50IHByb2Nlc3NvciByZWdpc3RlcnMuDQo+IA0KPiBDaGFuZ2UtSWQ6IElmODEwYmIx ODI4MTYwYjhiZGQ4Y2I2MTZkODZkZjI4NTljNzQ5NzFmDQoNCigzKSBJIHRoaW5rIHRoaXMgY29t ZXMgZnJvbSBHZXJyaXQuIERvIHlvdSByZWFsbHkgbmVlZCB0aGUgIkNoYW5nZS1JZCINCnRhZyBp biB0aGUgY29tbWl0IG1lc3NhZ2U/IEl0IGRvZXNuJ3Qgc2F5IGFueXRoaW5nIHRvIHRoZSB1cHN0 cmVhbSBlZGsyIHVzZXJzLg0KDQpJZiB5b3UgcmVhbGx5IG5lZWQgaXQsIEkgZG9uJ3QgbWluZCBp dCB0aG91Z2g7IGp1c3QgcGxlYXNlIGxldCdzIG5vdCBhZGQgaXQgZHVlIHRvIG92ZXJzaWdodC4N Cg0KKDQpIFBsZWFzZSBtYWtlIHN1cmUgdGhhdCB5b3UgZG9uJ3QgKnB1c2gqIHRoZSBwYXRjaCB3 aXRoIEdlcnJpdC4gR2Vycml0IGRvZXMgYmFkIHRoaW5ncyB0byBnaXQgbWV0YWRhdGEuIFBsZWFz ZSBzZWUgPGh0dHA6Ly9taWQubWFpbC1hcmNoaXZlLmNvbS80QTg5RTJFRjNERkVEQjRDOEJGREU1 MTAxNEY2MDZBMTRFMjIzNDREQFNIU01TWDEwNC5jY3IuY29ycC5pbnRlbC5jb20+Lg0KDQo+IENj OiBFcmljIERvbmcgPGVyaWMuZG9uZ0BpbnRlbC5jb20+DQo+IENjOiBMYXN6bG8gRXJzZWsgPGxl cnNla0ByZWRoYXQuY29tPg0KPiBDYzogSmlld2VuIFlhbyA8amlld2VuLnlhb0BpbnRlbC5jb20+ DQo+IENjOiBSdWl5dSBOaSA8cnVpeXUubmlAaW50ZWwuY29tPg0KPiBDb250cmlidXRlZC11bmRl cjogVGlhbm9Db3JlIENvbnRyaWJ1dGlvbiBBZ3JlZW1lbnQgMS4xDQo+IFNpZ25lZC1vZmYtYnk6 IEppYW4gSiBXYW5nIDxqaWFuLmoud2FuZ0BpbnRlbC5jb20+DQo+IC0tLQ0KPiAgVWVmaUNwdVBr Zy9DcHVEeGUvQ3B1RHhlLmMgICAgICAgfCAgIDIgKy0NCj4gIFVlZmlDcHVQa2cvQ3B1RHhlL0Nw dUR4ZS5pbmYgICAgIHwgICAxICsNCj4gIFVlZmlDcHVQa2cvQ3B1RHhlL0NwdVBhZ2VUYWJsZS5j IHwgMTA4DQo+ICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLQ0KPiAgMyBm aWxlcyBjaGFuZ2VkLCA3NSBpbnNlcnRpb25zKCspLCAzNiBkZWxldGlvbnMoLSkNCj4gDQo+IGRp ZmYgLS1naXQgYS9VZWZpQ3B1UGtnL0NwdUR4ZS9DcHVEeGUuYyBiL1VlZmlDcHVQa2cvQ3B1RHhl L0NwdUR4ZS5jIA0KPiBpbmRleCA2YWUyZGNkMWM3Li4xZmQ5OTZmYzNmIDEwMDY0NA0KPiAtLS0g YS9VZWZpQ3B1UGtnL0NwdUR4ZS9DcHVEeGUuYw0KPiArKysgYi9VZWZpQ3B1UGtnL0NwdUR4ZS9D cHVEeGUuYw0KPiBAQCAtNDA0LDcgKzQwNCw3IEBAIENwdVNldE1lbW9yeUF0dHJpYnV0ZXMgKA0K PiAgICAvLyB0byBhdm9pZCB1bm5lY2Vzc2FyeSBjb21wdXRpbmcuDQo+ICAgIC8vDQo+ICAgIGlm IChtSXNGbHVzaGluZ0dDRCkgew0KPiAtICAgIERFQlVHKChERUJVR19JTkZPLCAiICBGbHVzaGlu ZyBHQ0RcbiIpKTsNCj4gKyAgICBERUJVRygoREVCVUdfR0NELCAiICBGbHVzaGluZyBHQ0RcbiIp KTsNCj4gICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICAgIH0NCg0KKDUpIEkgdGhpbmsgaXQg d291bGQgYmUgY2xlYW5lciBpZiB3ZSBmaXhlZCB0aGUgZGVidWcgbGV2ZWwgZm9yIHRoaXMgbWVz c2FnZSBpbiBhIHNlcGFyYXRlIHBhdGNoLiBZb3UgYXJlIG5vdCB0b3VjaGluZyAiQ3B1RHhlLmMi IGZvciBhbnkgb3RoZXIgcmVhc29uLg0KDQo+ICANCj4gZGlmZiAtLWdpdCBhL1VlZmlDcHVQa2cv Q3B1RHhlL0NwdUR4ZS5pbmYgDQo+IGIvVWVmaUNwdVBrZy9DcHVEeGUvQ3B1RHhlLmluZiBpbmRl eCAzYzkzOGNlZTUzLi44Yzg3NzNhZjkwIDEwMDY0NA0KPiAtLS0gYS9VZWZpQ3B1UGtnL0NwdUR4 ZS9DcHVEeGUuaW5mDQo+ICsrKyBiL1VlZmlDcHVQa2cvQ3B1RHhlL0NwdUR4ZS5pbmYNCj4gQEAg LTY2LDYgKzY2LDcgQEANCj4gIFtQcm90b2NvbHNdDQo+ICAgIGdFZmlDcHVBcmNoUHJvdG9jb2xH dWlkICAgICAgICAgICAgICAgICAgICAgICAjIyBQUk9EVUNFUw0KPiAgICBnRWZpTXBTZXJ2aWNl UHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgICAgICAgIyMgUFJPRFVDRVMNCj4gKyAgZ0VmaVNt bUJhc2UyUHJvdG9jb2xHdWlkDQoNCig2KSBwcm90b2NvbCB1c2FnZSBub3RlIGlzIG1pc3Npbmcg KHNob3VsZCBiZSAiIyMgU09NRVRJTUVTX0NPTlNVTUVTIiBJDQp0aGluay4pDQoNCj4gIA0KPiAg W0d1aWRzXQ0KPiAgICBnSWRsZUxvb3BFdmVudEd1aWQgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIyMgQ09OU1VNRVMgICAgICAgICAgICMjIEV2ZW50DQo+IGRpZmYgLS1naXQgYS9VZWZpQ3B1 UGtnL0NwdUR4ZS9DcHVQYWdlVGFibGUuYw0KPiBiL1VlZmlDcHVQa2cvQ3B1RHhlL0NwdVBhZ2VU YWJsZS5jDQo+IGluZGV4IGUyNTk1YjRkODkuLmJmNDIwZDM3OTIgMTAwNjQ0DQo+IC0tLSBhL1Vl ZmlDcHVQa2cvQ3B1RHhlL0NwdVBhZ2VUYWJsZS5jDQo+ICsrKyBiL1VlZmlDcHVQa2cvQ3B1RHhl L0NwdVBhZ2VUYWJsZS5jDQo+IEBAIC0yMyw2ICsyMyw3IEBADQo+ICAjaW5jbHVkZSA8TGlicmFy eS9EZWJ1Z0xpYi5oPg0KPiAgI2luY2x1ZGUgPExpYnJhcnkvVWVmaUJvb3RTZXJ2aWNlc1RhYmxl TGliLmg+DQo+ICAjaW5jbHVkZSA8UHJvdG9jb2wvTXBTZXJ2aWNlLmg+DQo+ICsjaW5jbHVkZSA8 UHJvdG9jb2wvU21tQmFzZTIuaD4NCj4gIA0KPiAgI2luY2x1ZGUgIkNwdUR4ZS5oIg0KPiAgI2lu Y2x1ZGUgIkNwdVBhZ2VUYWJsZS5oIg0KPiBAQCAtODcsNyArODgsMzMgQEAgUEFHRV9BVFRSSUJV VEVfVEFCTEUgbVBhZ2VBdHRyaWJ1dGVUYWJsZVtdID0gew0KPiAgICB7UGFnZTFHLCAgU0laRV8x R0IsIFBBR0lOR18xR19BRERSRVNTX01BU0tfNjR9LCAgfTsNCj4gIA0KPiAtUEFHRV9UQUJMRV9Q T09MICAgKm1QYWdlVGFibGVQb29sID0gTlVMTDsNCj4gK1BBR0VfVEFCTEVfUE9PTCAgICAgICAg ICAgICAgICAgICAqbVBhZ2VUYWJsZVBvb2wgPSBOVUxMOw0KPiArUEFHRV9UQUJMRV9MSUJfUEFH SU5HX0NPTlRFWFQgICAgIG1QYWdpbmdDb250ZXh0Ow0KPiArRUZJX1NNTV9CQVNFMl9QUk9UT0NP TCAgICAgICAgICAgICptU21tQmFzZTIgPSBOVUxMOw0KPiArDQo+ICtCT09MRUFODQo+ICtJc0lu U21tICgNCj4gKyAgVk9JRA0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAg ICAgIFN0YXR1czsNCj4gKyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgSW5TbW07DQo+ICsNCj4g KyAgSW5TbW0gPSBGQUxTRTsNCj4gKyAgaWYgKG1TbW1CYXNlMiA9PSBOVUxMKSB7DQo+ICsgICAg U3RhdHVzID0gZ0JTLT5Mb2NhdGVQcm90b2NvbCAoJmdFZmlTbW1CYXNlMlByb3RvY29sR3VpZCwg TlVMTCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmbVNt bUJhc2UyKTsNCg0KKDcpIEluZGVudGF0aW9uIGlzIGluY29ycmVjdC4NCg0KPiArICAgIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIG1TbW1CYXNlMiA9IE5VTEw7DQo+ICsgICAg fQ0KDQooOCkgSSB0aGluayB5b3UgY2FuIHNpbXBseSBkcm9wIHRoZSBFRklfRVJST1IgKFN0YXR1 cykgYnJhbmNoOyAibVNtbUJhc2UyIiB3aWxsIHNpbXBseSByZW1haW4gTlVMTC4NCg0KPiArICB9 DQo+ICsNCj4gKyAgaWYgKG1TbW1CYXNlMiAhPSBOVUxMKSB7DQo+ICsgICAgbVNtbUJhc2UyLT5J blNtbSAobVNtbUJhc2UyLCAmSW5TbW0pOyAgfQ0KPiArDQo+ICsgIHJldHVybiBJblNtbTsNCj4g K30NCg0KKDkpIEkgZG9uJ3QgdW5kZXJzdGFuZCBob3cgdGhlIEluU21tKCkgbWVtYmVyIGZ1bmN0 aW9uIGlzIHN1cHBvc2VkIHRvIHdvcmsuIEFjY29yZGluZyB0byB0aGUgUEkgc3BlYyAodjEuNik6 DQoNCiIiIg0KRUZJX01NX0JBU0VfUFJPVE9DT0wuSW5NbSgpDQpbLi4uXQ0KU2VydmljZSB0byBp bmRpY2F0ZSB3aGV0aGVyIHRoZSBkcml2ZXIgaXMgY3VycmVudGx5IGV4ZWN1dGluZyBpbiB0aGUg TU0gRHJpdmVyIEluaXRpYWxpemF0aW9uIHBoYXNlLg0KWy4uLl0NCkluTW1yYW0NClBvaW50ZXIg dG8gYSBCb29sZWFuIHdoaWNoLCBvbiByZXR1cm4sIGluZGljYXRlcyB0aGF0IHRoZSBkcml2ZXIg aXMgY3VycmVudGx5IGV4ZWN1dGluZyBpbnNpZGUgb2YgTU1SQU0gKFRSVUUpIG9yIG91dHNpZGUg b2YgTU1SQU0gKEZBTFNFKS4NClsuLi5dDQpUaGlzIHNlcnZpY2UgcmV0dXJucyB3aGV0aGVyIHRo ZSBjYWxsZXIgaXMgYmVpbmcgZXhlY3V0ZWQgaW4gdGhlIE1NIERyaXZlciBJbml0aWFsaXphdGlv biBwaGFzZS4gRm9yIE1NIERyaXZlcnMsIHRoaXMgd2lsbCByZXR1cm4gVFJVRSBpbiBJbk1tcmFt IHdoaWxlIGluc2lkZSB0aGUgZHJpdmVy4oCZcyBlbnRyeSBwb2ludCBhbmQgb3RoZXJ3aXNlIEZB TFNFLiBGb3IgY29tYmluYXRpb24gTU0vRFhFIGRyaXZlcnMsIHRoaXMgd2lsbCByZXR1cm4gRkFM U0UgaW4gdGhlIERYRSBsYXVuY2guDQpGb3IgdGhlIE1NIGxhdW5jaCwgaXQgYmVoYXZlcyBhcyBh biBNTSBEcml2ZXIuDQoiIiINCg0KRmlyc3Qgb2YgYWxsLCB0byBteSBrbm93bGVkZ2UsIHdlIGRv bid0IGhhdmUgYW55IGNvbWJpbmF0aW9uIE1NL0RYRSBkcml2ZXJzIGluIGVkazIgKHdpdGggZHVh bCBlbnRyeSBwb2ludCBsYXVuY2hlcywgYmluYXJ5IHR5cGUgMHgwQykuIFdlIGhhdmUgdHJhZGl0 aW9uYWwgTU0gZHJpdmVycyAoYmluYXJ5IHR5cGUgMHgwQSkgdGhhdCBhcmUgbGF1bmNoZWQgZGly ZWN0bHkgZnJvbSBTTVJBTS4gSG93ZXZlciwgaXQgaXMgbm90IGd1YXJhbnRlZWQgdGhhdCB0aGV5 IGFyZSBsYXVuY2hlZCB3aXRoIHRoZSBwcm9jZXNzb3Igb3BlcmF0aW5nIGluIFN5c3RlbSBNYW5h Z2VtZW50IE1vZGUuDQoNClNlY29uZGx5LCBmb2N1c2luZyBvbiB0cmFkaXRpb25hbCBNTSBkcml2 ZXJzLCB0aGUgSW5NbSgpIHNwZWNpZmljYXRpb24gZG9lc24ndCBzZWVtIHRvIHNheSBhbnl0aGlu ZyBhcyB0byB3aGV0aGVyIHRoZSBwcm9jZXNzb3IgaXMgcnVubmluZyBpbiBTTU0gKHN5c3RlbSBt YW5hZ2VtZW50IG1vZGUpIG9yIG5vcm1hbCBtb2RlLiBJbml0aWFsbHksIFNNUkFNIGlzIG9wZW4s IGFuZCB0aHVzIHRoZSBwcm9jZXNzb3IgY2FuIGV4ZWN1dGUgTU0gZHJpdmVyIGNvZGUgb3V0IG9m IGl0IHdpdGhvdXQgYWN0dWFsbHkgb3BlcmF0aW5nIGluIFNNTSAoc2VlIGFib3ZlKS4NCg0KRnVy dGhlcm1vcmUsIENwdUR4ZSBpcyBhIERYRV9EUklWRVIsIHRodXMgaXQgaXMgbmV2ZXIgbG9hZGVk IGludG8gU01SQU0uDQoNCkkgbm90aWNlIHRoYXQgeW91IGNhbGwgdGhlICJJbk1tcmFtIiBwYXJh bWV0ZXIgIkluU21tIi4gQXJlIHlvdSBzYXlpbmcgdGhhdCB0aGUgUEkgc3BlYyBpcyB3cm9uZywg YW5kIGVkazIgYWN0dWFsbHkgcmV0dXJucyB3aGV0aGVyIHRoZSBwcm9jZXNzb3IgaXMgZXhlY3V0 aW5nIENwdUR4ZSBjb2RlIGluIE1hbmFnZW1lbnQgTW9kZT8gKER1ZSB0byBhIGNhbGwgZnJvbSB0 aGUgZW50cnkgcG9pbnQgZnVuY3Rpb24gb2YgYSB0cmFkaXRpb25hbCBNTSBkcml2ZXI/KQ0KDQpU aGlyZCwgdGhlIHNwZWMgaXMgaW5jb25zaXN0ZW50IGV2ZW4gd2l0aCBpdHNlbGYuIFRoZSBnZW5l cmFsIGRlc2NyaXB0aW9uIHNheXMsICJGb3IgTU0gRHJpdmVycywgdGhpcyB3aWxsIHJldHVybiBU UlVFIGluIEluTW1yYW0gd2hpbGUgaW5zaWRlIHRoZSBkcml2ZXLigJlzIGVudHJ5IHBvaW50IGFu ZCBvdGhlcndpc2UgRkFMU0UiLiBCdXQgYSBEWEUgcHJvdG9jb2wgbXVzdCBub3QgZXZlbiBiZSBp bnZva2VkIGZyb20gYSB0cmFkaXRpb25hbCBNTSBkcml2ZXIgKmV4Y2VwdCogZnJvbSB0aGUgZW50 cnkgcG9pbnQhIFdoaWNoIHdvdWxkIGltcGx5IHRoYXQsIGZvciB0cmFkaXRpb25hbCBNTSBkcml2 ZXJzLCB0aGUgb3V0cHV0IHBhcmFtZXRlciBjb3VsZCBvbmx5IGJlIHNldCB0byBUUlVFLg0KDQpT byBiYXNpY2FsbHkgd2hhdCBJJ2QgbGlrZSB0byBzZWUgaGVyZSBpcyBldmlkZW5jZSB0aGF0DQoN Cig5YSkgdGhlIElzSW5TbW0oKSBoZWxwZXIgZnVuY3Rpb24gaXMgbmV2ZXIgY2FsbGVkIG91dHNp ZGUgb2YgdGhlIGVudHJ5DQogICAgIHBvaW50IG9mIGFuIE1NIGRyaXZlciwgZHVlIHRvIHRoZSBy ZXN0cmljdGlvbnMgb24NCiAgICAgZ0JTLT5Mb2NhdGVQcm90b2NvbCgpIGFuZCBtU21tQmFzZTIt PkluU21tKCksDQoNCig5YikgdGhlIG1TbW1CYXNlMi0+SW5TbW0oKSBwcm90b2NvbCBtZW1iZXIg ZGV0ZXJtaW5lcyB3aGV0aGVyIENwdUR4ZSBpcw0KICAgICBiZWluZyBleGVjdXRlZCBieSB0aGUg cHJvY2Vzc29yIGluIE1hbmFnZW1lbnQgTW9kZSwgYW5kICpub3QqDQogICAgIHdoZXRoZXIgdGhl IENwdUR4ZSBkcml2ZXIgaXMgYmVpbmcgZXhlY3V0ZWQgZnJvbSB3aXRoaW4gU01SQU0uDQoNCj4g IA0KPiAgLyoqDQo+ICAgIFJldHVybiBjdXJyZW50IHBhZ2luZyBjb250ZXh0Lg0KPiBAQCAtMTAy LDQyICsxMjksNDUgQEAgR2V0Q3VycmVudFBhZ2luZ0NvbnRleHQgKA0KPiAgICBVSU5UMzIgICAg ICAgICAgICAgICAgICAgICAgICAgUmVnRWF4Ow0KPiAgICBVSU5UMzIgICAgICAgICAgICAgICAg ICAgICAgICAgUmVnRWR4Ow0KPiAgDQo+IC0gIFplcm9NZW0oUGFnaW5nQ29udGV4dCwgc2l6ZW9m KCpQYWdpbmdDb250ZXh0KSk7DQo+IC0gIGlmIChzaXplb2YoVUlOVE4pID09IHNpemVvZihVSU5U NjQpKSB7DQo+IC0gICAgUGFnaW5nQ29udGV4dC0+TWFjaGluZVR5cGUgPSBJTUFHRV9GSUxFX01B Q0hJTkVfWDY0Ow0KPiAtICB9IGVsc2Ugew0KPiAtICAgIFBhZ2luZ0NvbnRleHQtPk1hY2hpbmVU eXBlID0gSU1BR0VfRklMRV9NQUNISU5FX0kzODY7DQo+IC0gIH0NCj4gLSAgaWYgKChBc21SZWFk Q3IwICgpICYgQklUMzEpICE9IDApIHsNCj4gLSAgICBQYWdpbmdDb250ZXh0LT5Db250ZXh0RGF0 YS5YNjQuUGFnZVRhYmxlQmFzZSA9IChBc21SZWFkQ3IzICgpICYgUEFHSU5HXzRLX0FERFJFU1Nf TUFTS182NCk7DQo+IC0gIH0gZWxzZSB7DQo+IC0gICAgUGFnaW5nQ29udGV4dC0+Q29udGV4dERh dGEuWDY0LlBhZ2VUYWJsZUJhc2UgPSAwOw0KPiAtICB9DQo+ICsgIGlmICghSXNJblNtbSAoKSkg ew0KPiArICAgIGlmIChzaXplb2YoVUlOVE4pID09IHNpemVvZihVSU5UNjQpKSB7DQo+ICsgICAg ICBtUGFnaW5nQ29udGV4dC5NYWNoaW5lVHlwZSA9IElNQUdFX0ZJTEVfTUFDSElORV9YNjQ7DQo+ ICsgICAgfSBlbHNlIHsNCj4gKyAgICAgIG1QYWdpbmdDb250ZXh0Lk1hY2hpbmVUeXBlID0gSU1B R0VfRklMRV9NQUNISU5FX0kzODY7DQo+ICsgICAgfQ0KPiArICAgIGlmICgoQXNtUmVhZENyMCAo KSAmIEJJVDMxKSAhPSAwKSB7DQo+ICsgICAgICBtUGFnaW5nQ29udGV4dC5Db250ZXh0RGF0YS5Y NjQuUGFnZVRhYmxlQmFzZSA9IChBc21SZWFkQ3IzICgpICYgUEFHSU5HXzRLX0FERFJFU1NfTUFT S182NCk7DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAgICAgIG1QYWdpbmdDb250ZXh0LkNvbnRleHRE YXRhLlg2NC5QYWdlVGFibGVCYXNlID0gMDsNCj4gKyAgICB9DQo+ICANCj4gLSAgaWYgKChBc21S ZWFkQ3I0ICgpICYgQklUNCkgIT0gMCkgew0KPiAtICAgIFBhZ2luZ0NvbnRleHQtPkNvbnRleHRE YXRhLklhMzIuQXR0cmlidXRlcyB8PSBQQUdFX1RBQkxFX0xJQl9QQUdJTkdfQ09OVEVYVF9JQTMy X1g2NF9BVFRSSUJVVEVTX1BTRTsNCj4gLSAgfQ0KPiAtICBpZiAoKEFzbVJlYWRDcjQgKCkgJiBC SVQ1KSAhPSAwKSB7DQo+IC0gICAgUGFnaW5nQ29udGV4dC0+Q29udGV4dERhdGEuSWEzMi5BdHRy aWJ1dGVzIHw9IFBBR0VfVEFCTEVfTElCX1BBR0lOR19DT05URVhUX0lBMzJfWDY0X0FUVFJJQlVU RVNfUEFFOw0KPiAtICB9DQo+IC0gIGlmICgoQXNtUmVhZENyMCAoKSAmIEJJVDE2KSAhPSAwKSB7 DQo+IC0gICAgUGFnaW5nQ29udGV4dC0+Q29udGV4dERhdGEuSWEzMi5BdHRyaWJ1dGVzIHw9IFBB R0VfVEFCTEVfTElCX1BBR0lOR19DT05URVhUX0lBMzJfWDY0X0FUVFJJQlVURVNfV1BfRU5BQkxF Ow0KPiAtICB9DQo+ICsgICAgaWYgKChBc21SZWFkQ3I0ICgpICYgQklUNCkgIT0gMCkgew0KPiAr ICAgICAgbVBhZ2luZ0NvbnRleHQuQ29udGV4dERhdGEuSWEzMi5BdHRyaWJ1dGVzIHw9IFBBR0Vf VEFCTEVfTElCX1BBR0lOR19DT05URVhUX0lBMzJfWDY0X0FUVFJJQlVURVNfUFNFOw0KPiArICAg IH0NCj4gKyAgICBpZiAoKEFzbVJlYWRDcjQgKCkgJiBCSVQ1KSAhPSAwKSB7DQo+ICsgICAgICBt UGFnaW5nQ29udGV4dC5Db250ZXh0RGF0YS5JYTMyLkF0dHJpYnV0ZXMgfD0gUEFHRV9UQUJMRV9M SUJfUEFHSU5HX0NPTlRFWFRfSUEzMl9YNjRfQVRUUklCVVRFU19QQUU7DQo+ICsgICAgfQ0KPiAr ICAgIGlmICgoQXNtUmVhZENyMCAoKSAmIEJJVDE2KSAhPSAwKSB7DQo+ICsgICAgICBtUGFnaW5n Q29udGV4dC5Db250ZXh0RGF0YS5JYTMyLkF0dHJpYnV0ZXMgfD0gUEFHRV9UQUJMRV9MSUJfUEFH SU5HX0NPTlRFWFRfSUEzMl9YNjRfQVRUUklCVVRFU19XUF9FTkFCTEU7DQo+ICsgICAgfQ0KPiAg DQo+IC0gIEFzbUNwdWlkICgweDgwMDAwMDAwLCAmUmVnRWF4LCBOVUxMLCBOVUxMLCBOVUxMKTsN Cj4gLSAgaWYgKFJlZ0VheCA+IDB4ODAwMDAwMDApIHsNCj4gLSAgICBBc21DcHVpZCAoMHg4MDAw MDAwMSwgTlVMTCwgTlVMTCwgTlVMTCwgJlJlZ0VkeCk7DQo+IC0gICAgaWYgKChSZWdFZHggJiBC SVQyMCkgIT0gMCkgew0KPiAtICAgICAgLy8gWEQgc3VwcG9ydGVkDQo+IC0gICAgICBpZiAoKEFz bVJlYWRNc3I2NCAoMHhDMDAwMDA4MCkgJiBCSVQxMSkgIT0gMCkgew0KPiAtICAgICAgICAvLyBY RCBhY3RpdmF0ZWQNCj4gLSAgICAgICAgUGFnaW5nQ29udGV4dC0+Q29udGV4dERhdGEuSWEzMi5B dHRyaWJ1dGVzIHw9IFBBR0VfVEFCTEVfTElCX1BBR0lOR19DT05URVhUX0lBMzJfWDY0X0FUVFJJ QlVURVNfWERfQUNUSVZBVEVEOw0KPiArICAgIEFzbUNwdWlkICgweDgwMDAwMDAwLCAmUmVnRWF4 LCBOVUxMLCBOVUxMLCBOVUxMKTsNCj4gKyAgICBpZiAoUmVnRWF4ID4gMHg4MDAwMDAwMCkgew0K PiArICAgICAgQXNtQ3B1aWQgKDB4ODAwMDAwMDEsIE5VTEwsIE5VTEwsIE5VTEwsICZSZWdFZHgp Ow0KPiArICAgICAgaWYgKChSZWdFZHggJiBCSVQyMCkgIT0gMCkgew0KPiArICAgICAgICAvLyBY RCBzdXBwb3J0ZWQNCj4gKyAgICAgICAgaWYgKChBc21SZWFkTXNyNjQgKDB4QzAwMDAwODApICYg QklUMTEpICE9IDApIHsNCj4gKyAgICAgICAgICAvLyBYRCBhY3RpdmF0ZWQNCj4gKyAgICAgICAg ICBtUGFnaW5nQ29udGV4dC5Db250ZXh0RGF0YS5JYTMyLkF0dHJpYnV0ZXMgfD0gUEFHRV9UQUJM RV9MSUJfUEFHSU5HX0NPTlRFWFRfSUEzMl9YNjRfQVRUUklCVVRFU19YRF9BQ1RJVkFURUQ7DQo+ ICsgICAgICAgIH0NCj4gKyAgICAgIH0NCj4gKyAgICAgIGlmICgoUmVnRWR4ICYgQklUMjYpICE9 IDApIHsNCj4gKyAgICAgICAgbVBhZ2luZ0NvbnRleHQuQ29udGV4dERhdGEuSWEzMi5BdHRyaWJ1 dGVzIHw9IA0KPiArIFBBR0VfVEFCTEVfTElCX1BBR0lOR19DT05URVhUX0lBMzJfWDY0X0FUVFJJ QlVURVNfUEFHRV8xR19TVVBQT1JUOw0KPiAgICAgICAgfQ0KPiAtICAgIH0NCj4gLSAgICBpZiAo KFJlZ0VkeCAmIEJJVDI2KSAhPSAwKSB7DQo+IC0gICAgICBQYWdpbmdDb250ZXh0LT5Db250ZXh0 RGF0YS5JYTMyLkF0dHJpYnV0ZXMgfD0gUEFHRV9UQUJMRV9MSUJfUEFHSU5HX0NPTlRFWFRfSUEz Ml9YNjRfQVRUUklCVVRFU19QQUdFXzFHX1NVUFBPUlQ7DQo+ICAgICAgfQ0KPiAgICB9DQo+ICsN Cj4gKyAgQ29weU1lbSAoUGFnaW5nQ29udGV4dCwgJm1QYWdpbmdDb250ZXh0LCBzaXplb2YgKG1Q YWdpbmdDb250ZXh0KSk7DQo+ICB9DQoNCigxMCkgRXZlbiBhc3N1bWluZyB0aGF0IElzSW5TbW0o KSBhbHdheXMgcmV0dXJucyBmYWxzZSAtLSBmb3IgZXhhbXBsZSBiZWNhdXNlIHRoZSBwbGF0Zm9y bSBkb2VzIG5vdCBpbmNsdWRlIHRoZSBTTU0gZHJpdmVycyAtLSwgdGhpcyBjaGFuZ2UgZG9lcyBu b3QgbG9vayBsaWtlIGEgbm8tb3AgdG8gbWUuDQoNClRoZSBaZXJvTWVtKCkgY2FsbCBhdCB0aGUg dG9wIGlzIHJlbW92ZWQgYnkgdGhlIHBhdGNoLCBidXQgYXR0cmlidXRlcyBsaWtlIFBTRSwgUEFF LCBXUF9FTkFCTEUsIFhEX0FDVElWQVRFRCBhbmQgMUdfU1VQUE9SVCBhcmUgbmV2ZXINCipjbGVh cmVkKiBpbiAibVBhZ2luZ0NvbnRleHQiLCBvbmNlIHRoZXkgYXJlIHNldC4NCg0KSSBndWVzcyB0 aGUgaWRlYSBpcyB0aGF0IGEgZmV3IChob3cgbWFueT8pIGluaXRpYWwgY2FsbHMgdG8NCkdldEN1 cnJlbnRQYWdpbmdDb250ZXh0KCkgc2V0IHVwICJtUGFnaW5nQ29udGV4dCIsIGFuZCBhZnRlciB0 aGF0LA0KR2V0Q3VycmVudFBhZ2luZ0NvbnRleHQoKSBqdXN0IGtlZXBzIHJldHVybmluZyB0aGUg bGFzdCBzZXQgY29udGV4dC4gQnV0IEkgZG9uJ3QgdGhpbmsgdGhhdCB0aG9zZSAiaW5pdGlhbCBj YWxscyIgd29yayBjb3JyZWN0bHkuDQoNCj4gIA0KPiAgLyoqDQo+IEBAIC01MDcsNyArNTM3LDEw IEBAIElzUmVhZE9ubHlQYWdlV3JpdGVQcm90ZWN0ZWQgKA0KPiAgICBWT0lEDQo+ICAgICkNCj4g IHsNCj4gLSAgcmV0dXJuICgoQXNtUmVhZENyMCAoKSAmIEJJVDE2KSAhPSAwKTsNCj4gKyAgaWYg KCFJc0luU21tICgpKSB7DQo+ICsgICAgcmV0dXJuICgoQXNtUmVhZENyMCAoKSAmIEJJVDE2KSAh PSAwKTsgIH0gIHJldHVybiBGQUxTRTsNCj4gIH0NCj4gIA0KPiAgLyoqDQo+IEBAIC01MTgsNyAr NTUxLDkgQEAgRGlzYWJsZVJlYWRPbmx5UGFnZVdyaXRlUHJvdGVjdCAoDQo+ICAgIFZPSUQNCj4g ICAgKQ0KPiAgew0KPiAtICBBc21Xcml0ZUNyMCAoQXNtUmVhZENyMCgpICYgfkJJVDE2KTsNCj4g KyAgaWYgKCFJc0luU21tICgpKSB7DQo+ICsgICAgQXNtV3JpdGVDcjAgKEFzbVJlYWRDcjAgKCkg JiB+QklUMTYpOyAgfQ0KPiAgfQ0KPiAgDQo+ICAvKioNCj4gQEAgLTUyOSw3ICs1NjQsOSBAQCBF bmFibGVSZWFkT25seVBhZ2VXcml0ZVByb3RlY3QgKA0KPiAgICBWT0lEDQo+ICAgICkNCj4gIHsN Cj4gLSAgQXNtV3JpdGVDcjAgKEFzbVJlYWRDcjAoKSB8IEJJVDE2KTsNCj4gKyAgaWYgKCFJc0lu U21tICgpKSB7DQo+ICsgICAgQXNtV3JpdGVDcjAgKEFzbVJlYWRDcjAgKCkgfCBCSVQxNik7ICB9 DQo+ICB9DQoNCigxMSkgSSBkb24ndCB1bmRlcnN0YW5kIHRoZXNlIGNoYW5nZXMgYXQgYWxsLiBX aHkgYXJlIHRoZXNlIGZ1bmN0aW9ucyBuby1vcHMgd2hlbiBDcHVEeGUgaXMgaW52b2tlZCBpbiBN YW5hZ2VtZW50IE1vZGU/DQoNClRoYW5rcw0KTGFzemxvDQoNCj4gIA0KPiAgLyoqDQo+IEBAIC0x MDU0LDYgKzEwOTEsNyBAQCBJbml0aWFsaXplUGFnZVRhYmxlTGliICggIHsNCj4gICAgUEFHRV9U QUJMRV9MSUJfUEFHSU5HX0NPTlRFWFQgICAgIEN1cnJlbnRQYWdpbmdDb250ZXh0Ow0KPiAgDQo+ ICsgIFplcm9NZW0gKCZtUGFnaW5nQ29udGV4dCwgc2l6ZW9mKG1QYWdpbmdDb250ZXh0KSk7DQo+ ICAgIEdldEN1cnJlbnRQYWdpbmdDb250ZXh0ICgmQ3VycmVudFBhZ2luZ0NvbnRleHQpOw0KPiAg DQo+ICAgIC8vDQo+IA0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXw0KZWRrMi1kZXZlbCBtYWlsaW5nIGxpc3QNCmVkazItZGV2ZWxAbGlzdHMuMDEub3Jn DQpodHRwczovL2xpc3RzLjAxLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2VkazItZGV2ZWwNCg==