From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.24; helo=mga09.intel.com; envelope-from=eric.dong@intel.com; receiver=edk2-devel@lists.01.org Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) (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 5AD3720988777 for ; Tue, 17 Jul 2018 19:50:51 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 17 Jul 2018 19:50:51 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,368,1526367600"; d="scan'208";a="57714604" Received: from fmsmsx104.amr.corp.intel.com ([10.18.124.202]) by orsmga008.jf.intel.com with ESMTP; 17 Jul 2018 19:50:44 -0700 Received: from fmsmsx126.amr.corp.intel.com (10.18.125.43) by fmsmsx104.amr.corp.intel.com (10.18.124.202) with Microsoft SMTP Server (TLS) id 14.3.319.2; Tue, 17 Jul 2018 19:50:43 -0700 Received: from shsmsx152.ccr.corp.intel.com (10.239.6.52) by FMSMSX126.amr.corp.intel.com (10.18.125.43) with Microsoft SMTP Server (TLS) id 14.3.319.2; Tue, 17 Jul 2018 19:50:43 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.124]) by SHSMSX152.ccr.corp.intel.com ([169.254.6.173]) with mapi id 14.03.0319.002; Wed, 18 Jul 2018 10:50:41 +0800 From: "Dong, Eric" To: "Dong, Eric" , "Yao, Jiewen" , Laszlo Ersek , Fan Jeff , "edk2-devel@lists.01.org" CC: "Ni, Ruiyu" Thread-Topic: =?utf-8?B?W2VkazJdIOetlOWkjTogW1BhdGNoXSBVZWZpQ3B1UGtnL01wSW5pdExpYjog?= =?utf-8?Q?Optimize_get_processor_number_performance.?= Thread-Index: AQHUE3rmDFOShawv6UKSeDwsvBHbsKSAFEKAgAYl3lCAADZdYIACuKAAgADEssCACm7GIA== Date: Wed, 18 Jul 2018 02:50:41 +0000 Message-ID: References: <20180704083736.9272-1-eric.dong@intel.com> <58bddde7-da02-1a73-f738-70c58c10b60a@redhat.com> <74D8A39837DF1E4DA445A8C0B3885C503AC9B858@shsmsx102.ccr.corp.intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: =?UTF-8?B?UmU6IOetlOWkjTogW1BhdGNoXSBVZWZpQ3B1UGtnL01wSW5pdExpYjogT3B0aW1pemUgZ2V0IHByb2Nlc3NvciBudW1iZXIgcGVyZm9ybWFuY2Uu?= X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.27 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 18 Jul 2018 02:50:51 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgQWxsLA0KDQpBcyBzdGFjayBtYXliZSBvdmVyZmxvdyBpbiBzb21lIGNhc2UgYW5kIGl0IHdp bGwgY2F1c2VkIGVycm9yIEFQIGluZGV4IGJlZW4gcmV0dXJuZWQuIEFsc28gSSBkb24ndCBmaW5k IGFueSByZWdpc3RlciB3aWxsIGJlIHVzZWQgZGlmZmVyZW50IGluIGVhY2ggQXBzLiBTbyBJIHdp bGwgdXBkYXRlIG15IHBhdGNoIHRvIG9ubHkgYmFzZSBvbiBBUElDIElEIHRvIGdldCB0aGUgQVAu DQoNClRoYW5rcywNCkVyaWMNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9t OiBlZGsyLWRldmVsIFttYWlsdG86ZWRrMi1kZXZlbC1ib3VuY2VzQGxpc3RzLjAxLm9yZ10gT24g QmVoYWxmIE9mDQo+IERvbmcsIEVyaWMNCj4gU2VudDogV2VkbmVzZGF5LCBKdWx5IDExLCAyMDE4 IDc6MzIgUE0NCj4gVG86IFlhbywgSmlld2VuIDxqaWV3ZW4ueWFvQGludGVsLmNvbT47IExhc3ps byBFcnNlayA8bGVyc2VrQHJlZGhhdC5jb20+Ow0KPiBGYW4gSmVmZiA8dmFuamVmZl85MTlAaG90 bWFpbC5jb20+OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZw0KPiBDYzogTmksIFJ1aXl1IDxydWl5 dS5uaUBpbnRlbC5jb20+DQo+IFN1YmplY3Q6IFJlOiBbZWRrMl0g562U5aSNOiBbUGF0Y2hdIFVl ZmlDcHVQa2cvTXBJbml0TGliOiBPcHRpbWl6ZSBnZXQNCj4gcHJvY2Vzc29yIG51bWJlciBwZXJm b3JtYW5jZS4NCj4gDQo+IEhpIEppZXdlbiwNCj4gDQo+IEkgY2hlY2tlZCB0aGUgY29kZSwgZm91 bmQgaW4gdGhlIEFQIGZ1bmN0aW9uIChBcFdha2V1cEZ1bmN0aW9uKSwgaXQgdXBkYXRlZA0KPiB0 aGUgR0RUIHZhbHVlIHdpdGggdGhlIHNhdmVkIEdEVCB2YWx1ZSBmcm9tIEJTUC4gU28gSSB0aGlu ayB3ZSBjYW4ndCB1c2UgR0RUDQo+IGluIHRoaXMgY2FzZS4gUmlnaHQ/DQo+IA0KPiAgICAgICAv Lw0KPiAgICAgICAvLyBTeW5jIEJTUCdzIENvbnRyb2wgcmVnaXN0ZXJzIHRvIEFQcw0KPiAgICAg ICAvLw0KPiAgICAgICBSZXN0b3JlVm9sYXRpbGVSZWdpc3RlcnMgKCZDcHVNcERhdGEtPkNwdURh dGFbMF0uVm9sYXRpbGVSZWdpc3RlcnMsDQo+IEZBTFNFKTsNCj4gDQo+IFRoYW5rcywNCj4gRXJp Yw0KPiANCj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+IEZyb206IFlhbywgSmll d2VuDQo+ID4gU2VudDogV2VkbmVzZGF5LCBKdWx5IDExLCAyMDE4IDM6NDUgUE0NCj4gPiBUbzog RG9uZywgRXJpYyA8ZXJpYy5kb25nQGludGVsLmNvbT47IERvbmcsIEVyaWMNCj4gPiA8ZXJpYy5k b25nQGludGVsLmNvbT47IExhc3psbyBFcnNlayA8bGVyc2VrQHJlZGhhdC5jb20+OyBGYW4gSmVm Zg0KPiA+IDx2YW5qZWZmXzkxOUBob3RtYWlsLmNvbT47IGVkazItZGV2ZWxAbGlzdHMuMDEub3Jn DQo+ID4gQ2M6IE5pLCBSdWl5dSA8cnVpeXUubmlAaW50ZWwuY29tPg0KPiA+IFN1YmplY3Q6IFJF OiBbZWRrMl0g562U5aSNOiBbUGF0Y2hdIFVlZmlDcHVQa2cvTXBJbml0TGliOiBPcHRpbWl6ZSBn ZXQNCj4gPiBwcm9jZXNzb3IgbnVtYmVyIHBlcmZvcm1hbmNlLg0KPiA+DQo+ID4gSGkNCj4gPiBJ IGJlbGlldmUgdXNpbmcgc3RhY2sgcG9pbnRlciBpcyBub3QgYSByb2J1c3Qgd2F5IGlmIHRoZSBz dGFjayBndWFyZA0KPiA+IGZlYXR1cmUgaXMgbm90IGVuYWJsZWQuIFN0YWNrIHBvaW50ZXIgbWF5 IG92ZXJmbG93Lg0KPiA+DQo+ID4gQ2FuIHdlIHVzZSBHRFQ/IEVhY2ggQVAgaGFzIGl0cyBvd24g R0RULg0KPiA+DQo+ID4gVGhhbmsgeW91DQo+ID4gWWFvIEppZXdlbg0KPiA+DQo+ID4NCj4gPiA+ IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiBGcm9tOiBlZGsyLWRldmVsIFttYWls dG86ZWRrMi1kZXZlbC1ib3VuY2VzQGxpc3RzLjAxLm9yZ10gT24gQmVoYWxmDQo+ID4gPiBPZiBE b25nLCBFcmljDQo+ID4gPiBTZW50OiBNb25kYXksIEp1bHkgOSwgMjAxOCAyOjEzIFBNDQo+ID4g PiBUbzogRG9uZywgRXJpYyA8ZXJpYy5kb25nQGludGVsLmNvbT47IExhc3psbyBFcnNlaw0KPiA+ ID4gPGxlcnNla0ByZWRoYXQuY29tPjsgRmFuIEplZmYgPHZhbmplZmZfOTE5QGhvdG1haWwuY29t PjsNCj4gPiA+IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnDQo+ID4gPiBDYzogTmksIFJ1aXl1IDxy dWl5dS5uaUBpbnRlbC5jb20+DQo+ID4gPiBTdWJqZWN0OiBSZTogW2VkazJdIOetlOWkjTogW1Bh dGNoXSBVZWZpQ3B1UGtnL01wSW5pdExpYjogT3B0aW1pemUgZ2V0DQo+ID4gPiBwcm9jZXNzb3Ig bnVtYmVyIHBlcmZvcm1hbmNlLg0KPiA+ID4NCj4gPiA+IEhpIExhc3psbywNCj4gPiA+DQo+ID4g PiBJIGhhdmUgY3JlYXRlZCBodHRwczovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcvc2hvd19idWcu Y2dpP2lkPTEwMDINCj4gPiA+IHRvIHJlcXVlc3QgdG8gYWRkIEFzbVJlYWRFc3AoKSAvIEFzbVJl YWRSc3AoKS4NCj4gPiA+DQo+ID4gPiBUaGFua3MsDQo+ID4gPiBFcmljDQo+ID4gPg0KPiA+ID4g PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gPiBGcm9tOiBlZGsyLWRldmVsIFtt YWlsdG86ZWRrMi1kZXZlbC1ib3VuY2VzQGxpc3RzLjAxLm9yZ10gT24NCj4gPiA+ID4gQmVoYWxm IE9mIERvbmcsIEVyaWMNCj4gPiA+ID4gU2VudDogTW9uZGF5LCBKdWx5IDksIDIwMTggMTE6MDQg QU0NCj4gPiA+ID4gVG86IExhc3psbyBFcnNlayA8bGVyc2VrQHJlZGhhdC5jb20+OyBGYW4gSmVm Zg0KPiA+ID4gPiA8dmFuamVmZl85MTlAaG90bWFpbC5jb20+OyBlZGsyLWRldmVsQGxpc3RzLjAx Lm9yZw0KPiA+ID4gPiBDYzogTmksIFJ1aXl1IDxydWl5dS5uaUBpbnRlbC5jb20+DQo+ID4gPiA+ IFN1YmplY3Q6IFJlOiBbZWRrMl0g562U5aSNOiBbUGF0Y2hdIFVlZmlDcHVQa2cvTXBJbml0TGli OiBPcHRpbWl6ZSBnZXQNCj4gPiA+ID4gcHJvY2Vzc29yIG51bWJlciBwZXJmb3JtYW5jZS4NCj4g PiA+ID4NCj4gPiA+ID4gSGkgTGFzemxvLA0KPiA+ID4gPg0KPiA+ID4gPiA+IC0tLS0tT3JpZ2lu YWwgTWVzc2FnZS0tLS0tDQo+ID4gPiA+ID4gRnJvbTogTGFzemxvIEVyc2VrIFttYWlsdG86bGVy c2VrQHJlZGhhdC5jb21dDQo+ID4gPiA+ID4gU2VudDogVGh1cnNkYXksIEp1bHkgNSwgMjAxOCA5 OjA0IFBNDQo+ID4gPiA+ID4gVG86IEZhbiBKZWZmIDx2YW5qZWZmXzkxOUBob3RtYWlsLmNvbT47 IERvbmcsIEVyaWMNCj4gPiA+ID4gPiA8ZXJpYy5kb25nQGludGVsLmNvbT47IGVkazItZGV2ZWxA bGlzdHMuMDEub3JnDQo+ID4gPiA+ID4gQ2M6IE5pLCBSdWl5dSA8cnVpeXUubmlAaW50ZWwuY29t Pg0KPiA+ID4gPiA+IFN1YmplY3Q6IFJlOiBbZWRrMl0g562U5aSNOiBbUGF0Y2hdIFVlZmlDcHVQ a2cvTXBJbml0TGliOiBPcHRpbWl6ZQ0KPiA+ID4gPiA+IGdldCBwcm9jZXNzb3IgbnVtYmVyIHBl cmZvcm1hbmNlLg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gSGkgSmVmZiwNCj4gPiA+ID4gPg0KPiA+ ID4gPiA+IE9uIDA3LzA0LzE4IDExOjM5LCBGYW4gSmVmZiB3cm90ZToNCj4gPiA+ID4gPiA+IEVy aWMsDQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gQ3VycmVudCBpbXBsZW1lbnRhdGlvbiBkb2Vz IG5vdCBjYWxsIEdldEFwaWNpZCgpIG1hbnkgdGltZXMsDQo+ID4gPiA+ID4gPiBQbGVhc2UNCj4g PiA+ID4gPiBjb3JyZWN0IHlvdSBjb21taXQgbWVzc2FnZS4gWW91ciBmaXggaXMgdG8gaW1wcm92 ZSB0aGUNCj4gPiA+ID4gPiBwZXJmb3JtYW5jZSBhZ2FpbnN0IHRoZSBjdXJyZW50IGltcGxlbWVu dGF0aW9uLg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gSSB0aGluayB0aGUgb3JpZ2luYWwgY29tbWl0 IG1lc3NhZ2UgZG9lcyBtYWtlIHNlbnNlLiBXaXRob3V0IHRoZQ0KPiA+ID4gPiA+IHBhdGNoLA0K PiA+ID4gPiA+IEdldFByb2Nlc3Nvck51bWJlcigpIG1heSBjYWxsIEdldEFwaWNJZCgpIHVwIHRv DQo+ID4gPiA+ID4gVG90YWxQcm9jZXNzb3JOdW1iZXIgdGltZXMuIFdpdGggdGhlIHBhdGNoLCBl dmVuIGlmIHdlIHNraXAgdGhlDQo+ID4gPiA+ID4gc3RhY2sgcmFuZ2Ugc2VhcmNoLA0KPiA+ID4g PiA+IEdldFByb2Nlc3Nvck51bWJlcigpIHdpbGwgY2FsbCBHZXRBcGljSWQoKSBqdXN0IG9uY2Uu DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBbLi4uXQ0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gU29tZSBt b3JlIHF1ZXN0aW9ucyBiZWxvdywgZm9yIHRoZSBwYXRjaDoNCj4gPiA+ID4gPg0KPiA+ID4gPiA+ ID4g5Y+R5Lu25Lq6OiBFcmljIERvbmcgPGVyaWMuZG9uZ0BpbnRlbC5jb20+DQo+ID4gPiA+ID4g PiDlj5HpgIHml7bpl7Q6IFdlZG5lc2RheSwgSnVseSA0LCAyMDE4IDQ6Mzc6MzYgUE0NCj4gPiA+ ID4gPiA+IOaUtuS7tuS6ujogZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmcNCj4gPiA+ID4gPiA+IOaK hOmAgTogUnVpeXUgTmk7IEplZmYgRmFuOyBMYXN6bG8gRXJzZWsNCj4gPiA+ID4gPiA+IOS4u+mi mDogW1BhdGNoXSBVZWZpQ3B1UGtnL01wSW5pdExpYjogT3B0aW1pemUgZ2V0IHByb2Nlc3Nvcg0K PiA+ID4gPiA+ID4gbnVtYmVyDQo+ID4gPiA+ID4gcGVyZm9ybWFuY2UuDQo+ID4gPiA+ID4gPg0K PiA+ID4gPiA+ID4gQ3VycmVudCBmdW5jdGlvbiBoYXMgbG93IHBlcmZvcm1hbmNlIGJlY2F1c2Ug aXQgY2FsbHMNCj4gPiA+ID4gPiA+IEdldEFwaWNJZCBtYW55IHRpbWVzLg0KPiA+ID4gPiA+ID4N Cj4gPiA+ID4gPiA+IE5ldyBsb2dpYyBmaXJzdCB0cnkgdG8gYmFzZSBvbiB0aGUgc3RhY2sgcmFu Z2UgdXNlZCBieSBBUCB0bw0KPiA+ID4gPiA+ID4gZmluZCB0aGUgcHJvY2Vzc29yIG51bWJlci4g SWYgdGhpcyBzb2x1dGlvbiBmYWlsZWQsIHRoZW4gY2FsbA0KPiA+ID4gPiA+ID4gR2V0QXBpY0lk IG9uY2UgYW5kIGJhc2Ugb24gdGhpcyB2YWx1ZSB0byBzZWFyY2ggdGhlIHByb2Nlc3Nvci4NCj4g PiA+ID4gPiA+DQo+ID4gPiA+ID4gPiBDYzogUnVpeXUgTmkgPHJ1aXl1Lm5pQGludGVsLmNvbT4N Cj4gPiA+ID4gPiA+IENjOiBKZWZmIEZhbiA8dmFuamVmZl85MTlAaG90bWFpbC5jb20+DQo+ID4g PiA+ID4gPiBDYzogTGFzemxvIEVyc2VrIDxsZXJzZWtAcmVkaGF0LmNvbT4NCj4gPiA+ID4gPiA+ IENvbnRyaWJ1dGVkLXVuZGVyOiBUaWFub0NvcmUgQ29udHJpYnV0aW9uIEFncmVlbWVudCAxLjEN Cj4gPiA+ID4gPiA+IFNpZ25lZC1vZmYtYnk6IEVyaWMgRG9uZyA8ZXJpYy5kb25nQGludGVsLmNv bT4NCj4gPiA+ID4gPiA+IC0tLQ0KPiA+ID4gPiA+ID4gIFVlZmlDcHVQa2cvTGlicmFyeS9NcElu aXRMaWIvTXBMaWIuYyB8IDI1DQo+ID4gPiArKysrKysrKysrKysrKysrKysrKysrLS0tDQo+ID4g PiA+ID4gPiAgMSBmaWxlIGNoYW5nZWQsIDIyIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0p DQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL1VlZmlDcHVQa2cvTGlicmFy eS9NcEluaXRMaWIvTXBMaWIuYw0KPiA+ID4gPiA+ID4gYi9VZWZpQ3B1UGtnL0xpYnJhcnkvTXBJ bml0TGliL01wTGliLmMNCj4gPiA+ID4gPiA+IGluZGV4IGViMjc2NTkxMGMuLmFiZDY1YmVlMWEg MTAwNjQ0DQo+ID4gPiA+ID4gPiAtLS0gYS9VZWZpQ3B1UGtnL0xpYnJhcnkvTXBJbml0TGliL01w TGliLmMNCj4gPiA+ID4gPiA+ICsrKyBiL1VlZmlDcHVQa2cvTGlicmFyeS9NcEluaXRMaWIvTXBM aWIuYw0KPiA+ID4gPiA+ID4gQEAgLTQxOCw3ICs0MTgsOCBAQCBBcEluaXRpYWxpemVTeW5jICgg IH0NCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiAgLyoqDQo+ID4gPiA+ID4gPiAtICBGaW5kIHRo ZSBjdXJyZW50IFByb2Nlc3NvciBudW1iZXIgYnkgQVBJQyBJRC4NCj4gPiA+ID4gPiA+ICsgIEZp cnN0IHRyeSB0byBmaW5kIHRoZSBjdXJyZW50IFByb2Nlc3NvciBudW1iZXIgYnkgc3RhY2sNCj4g PiA+ID4gPiA+ICsgYWRkcmVzcywgaWYgaXQgZmFpbGVkLCB0aGVuIGJhc2Ugb24gQVBJQyBJRC4N Cj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiAgICBAcGFyYW1baW5dICBDcHVNcERhdGEgICAgICAg ICBQb2ludGVyIHRvIFBFSSBDUFUgTVAgRGF0YQ0KPiA+ID4gPiA+ID4gICAgQHBhcmFtW291dF0g UHJvY2Vzc29yTnVtYmVyICAgUmV0dXJuIHRoZSBwb2Nlc3NvciBudW1iZXINCj4gZm91bmQNCj4g PiA+ID4gPiA+IEBAIC00MzUsMTYgKzQzNiwzNCBAQCBHZXRQcm9jZXNzb3JOdW1iZXIgKA0KPiA+ ID4gPiA+ID4gICAgVUlOVE4gICAgICAgICAgICAgICAgICAgVG90YWxQcm9jZXNzb3JOdW1iZXI7 DQo+ID4gPiA+ID4gPiAgICBVSU5UTiAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gPiA+ID4g PiA+ICAgIENQVV9JTkZPX0lOX0hPQiAgICAgICAgICpDcHVJbmZvSW5Ib2I7DQo+ID4gPiA+ID4g PiArICBVSU5UMzIgICAgICAgICAgICAgICAgICBDdXJyZW50QXBpY0lkOw0KPiA+ID4gPiA+ID4N Cj4gPiA+ID4gPiA+ICsgIFRvdGFsUHJvY2Vzc29yTnVtYmVyID0gQ3B1TXBEYXRhLT5DcHVDb3Vu dDsNCj4gPiA+ID4gPiA+ICAgIENwdUluZm9JbkhvYiA9IChDUFVfSU5GT19JTl9IT0IgKikgKFVJ TlROKSBDcHVNcERhdGEtDQo+ID4gPiA+ID4gPkNwdUluZm9JbkhvYjsNCj4gPiA+ID4gPiA+DQo+ ID4gPiA+ID4gPiAtICBUb3RhbFByb2Nlc3Nvck51bWJlciA9IENwdU1wRGF0YS0+Q3B1Q291bnQ7 DQo+ID4gPiA+ID4gPiArICAvLw0KPiA+ID4gPiA+ID4gKyAgLy8gRmlyc3QgdHJ5IHRvIGJhc2Ug b24gY3VycmVudCBzdGFjayBhZGRyZXNzIHRvIGZpbmQgdGhlIEFQIGluZGV4Lg0KPiA+ID4gPiA+ ID4gKyAgLy8gJlRvdGFsUHJvY2Vzc29yTnVtYmVyIHZhbHVlIGxvY2F0ZWQgaW4gdGhlIHN0YWNr IHJhbmdlLg0KPiA+ID4gPiA+ID4gKyAgLy8NCj4gPiA+ID4gPiA+ICAgIGZvciAoSW5kZXggPSAw OyBJbmRleCA8IFRvdGFsUHJvY2Vzc29yTnVtYmVyOyBJbmRleCArKykgew0KPiA+ID4gPiA+ID4g LSAgICBpZiAoQ3B1SW5mb0luSG9iW0luZGV4XS5BcGljSWQgPT0gR2V0QXBpY0lkICgpKSB7DQo+ ID4gPiA+ID4gPiArICAgIGlmICgoQ3B1SW5mb0luSG9iW0luZGV4XS5BcFRvcE9mU3RhY2sgPiAo VUlOVE4pDQo+ID4gPiA+ID4gKCZUb3RhbFByb2Nlc3Nvck51bWJlcikpICYmDQo+ID4gPiA+ID4g PiArICAgICAgICAoQ3B1SW5mb0luSG9iW0luZGV4XS5BcFRvcE9mU3RhY2sgLQ0KPiA+ID4gPiA+ ID4gKyBDcHVNcERhdGEtPkNwdUFwU3RhY2tTaXplIDwgKFVJTlROKQ0KPiA+ID4gPiA+ID4gKyBD cHVNcERhdGEtPigmVG90YWxQcm9jZXNzb3JOdW1iZXIpKSkgew0KPiA+ID4gPiA+ID4gICAgICAg ICpQcm9jZXNzb3JOdW1iZXIgPSBJbmRleDsNCj4gPiA+ID4gPiA+ICAgICAgICByZXR1cm4gRUZJ X1NVQ0NFU1M7DQo+ID4gPiA+ID4gPiAgICAgIH0NCj4gPiA+ID4gPiA+ICAgIH0NCj4gPiA+ID4g Pg0KPiA+ID4gPiA+ICgxKSBJZiBJIHVuZGVyc3RhbmQgY29ycmVjdGx5LCBBcFRvcE9mU3RhY2sg aXMgdGhlIGV4Y2x1c2l2ZSBlbmQNCj4gPiA+ID4gPiAoaGlnaGVzdA0KPiA+ID4gPiA+IGFkZHJl c3MpIG9mIHRoZSBBUCBzdGFjaywgc28gYW55IGxvY2FsIHZhcmlhYmxlIGlzIHN1cHBvc2VkIHRv DQo+ID4gPiA+ID4gc3RhcnQgc3RyaWN0bHkgYmVsb3cgaXQgKHRoZSBzdGFjayBncm93cyBkb3du KS4gVGhpcyBzZWVtcyB0bw0KPiA+ID4gPiA+IGp1c3RpZnkgdGhlICI+IiByZWxhdGlvbmFsIG9w ZXJhdG9yLCBpbiB0aGUgZmlyc3Qgc3ViY29uZGl0aW9uOyBPSy4NCj4gPiA+ID4gPg0KPiA+ID4g PiA+IEhvd2V2ZXIsIHdoYXQgZ3VhcmFudGVlcyB0aGF0IHRoZSBUb3RhbFByb2Nlc3Nvck51bWJl ciBsb2NhbA0KPiA+ID4gPiA+IHZhcmlhYmxlIGlzIG5vdCBsb2NhdGVkIGV4YWN0bHkgYXQgdGhl IChpbmNsdXNpdmUpIGJhc2Ugb2YgdGhlIEFQIHN0YWNrPw0KPiA+IElPVywgd2h5IGlzICI8Ig0K PiA+ID4gPiA+IGNvcnJlY3QsIGluIHRoZSBzZWNvbmQgc3ViY29uZGl0aW9uLCByYXRoZXIgdGhh biAiPD0iPw0KPiA+ID4gPiA+DQo+ID4gPiA+DQo+ID4gPiA+IFtFcmljXSAgVG90YWxQcm9jZXNz b3JOdW1iZXIgaXMgdGhlIGZpcnN0IGxvY2FsIHZhcmlhYmxlIGluIHRoaXMNCj4gPiA+ID4gZnVu Y3Rpb24sIGFsc28gZXhpc3Qgb3RoZXIgbG9jYWwgdmFyaWFibGVzIGluIHRoaXMgZnVuY3Rpb24s IHNvIEkganVzdCB1c2UgIjwiDQo+ID4gaGVyZS4NCj4gPiA+ID4NCj4gPiA+ID4gPg0KPiA+ID4g PiA+ICgyKSBJJ20gZ2VuZXJhbGx5IHVuaGFwcHkgYWJvdXQgdGFraW5nIHRoZSBhZGRyZXNzIG9m IGxvY2FsDQo+ID4gPiA+ID4gdmFyaWFibGVzLCBpbiBvcmRlciB0byBkZXRlcm1pbmUgc3RhY2sg bG9jYXRpb24gaW4gQyBsYW5ndWFnZS4NCj4gPiA+ID4gPiBJbnN0ZWFkLCBJIHRoaW5rIHdlIHNo b3VsZCBoYXZlDQo+ID4gPiA+ID4gQXNtUmVhZEVzcCgpIC8gQXNtUmVhZFJzcCgpIGZ1bmN0aW9u cyAtLSB3ZSB1c2VkIHRvIGhhdmUNCj4gPiA+ID4gPiBBc21SZWFkU3AoKSBmb3IgSXRhbml1bS4g UGxlYXNlIHNlZSB0aGUgZm9sbG93aW5nIHN1Yi10aHJlYWQsDQo+ID4gPiA+ID4gd2hlcmUgSm9y ZGFuIG9yaWdpbmFsbHkgc3VnZ2VzdGVkIEFzbVJlYWRFc3AoKSAvIEFzbVJlYWRSc3AoKToNCj4g PiA+ID4gPg0KPiA+ID4gPiA+IGh0dHA6Ly9taWQubWFpbC0NCj4gPiA+ID4gPiBhcmNoaXZlLmNv bS8xNTEwNTY0MTA4NjcuMTU4MDkuNjU5NzAxODk0MjI2Njg3NTQzQGpsanVzdGVuLXNrbA0KPiA+ ID4gPiA+DQo+ID4gPiA+ID4gaHR0cDovL21pZC5tYWlsLQ0KPiA+ID4gPiA+IGFyY2hpdmUuY29t LzE1MTA1OTYyNzI1OC4yMDYxNC4xNjUwNTc2NjE5MTQxNTAwNTgwMkBqbGp1c3Rlbi0NCj4gc2ts DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBTaG91bGQgSSBmaWxlIGEgRmVhdHVyZSBSZXF1ZXN0IGZv ciBCYXNlTGliLCBhYm91dCBhZGRpbmcNCj4gPiA+ID4gPiBBc21SZWFkRXNwKCkgLyBBc21SZWFk UnNwKCk/DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBJJ20gbm90IHN1Z2dlc3RpbmcgdGhhdCB3ZSBi bG9jayB0aGlzIHBhdGNoIHdpdGggdGhhdCBmZWF0dXJlDQo+ID4gPiA+ID4gcmVxdWVzdCwgYnV0 IHBlcmhhcHMgd2Ugc2hvdWxkIGJsb2NrIHRoZSAqbmV4dCogcGF0Y2guDQo+ID4gPiA+ID4NCj4g PiA+ID4NCj4gPiA+ID4gW0VyaWNdIFllcywgSSB0cmllcyB0byB1c2UgdGhlIGZ1bmN0aW9uIHlv dSBzdWdnZXN0ZWQgYnV0IHdlIGRvbid0DQo+ID4gPiA+IGZpbmQgaXQsIHNvIEkgdXNlIGxvY2Fs IHZhcmlhYmxlIGhlcmUuICBJIGFncmVlIHdpdGggeW91ciBzdWdnZXN0DQo+ID4gPiA+IHRoYXQg d2Ugc2hvdWxkIGFkZCB0aGlzIEFQSSBmb3IgbGF0ZXIgdXNhZ2UuIEkgd2lsbCBmb2xsb3cgdXAg dG8NCj4gPiA+ID4gYWRkIHRoaXMgbmV3DQo+ID4gQVBJIGFuZCB1cGRhdGUgdGhpcyBwYXRjaCB0 byBWMi4NCj4gPiA+ID4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IEZvciB0aGUgcHJlc2VudCBwYXRj aCwgSSdsbCBmb2xsb3cgdXAgd2l0aCB0ZXN0IHJlc3VsdHMgc2VwYXJhdGVseS4NCj4gPiA+ID4g Pg0KPiA+ID4gPiA+IFRoYW5rcywNCj4gPiA+ID4gPiBMYXN6bG8NCj4gPiA+ID4gPg0KPiA+ID4g PiA+ID4gKw0KPiA+ID4gPiA+ID4gKyAgLy8NCj4gPiA+ID4gPiA+ICsgIC8vIElmIGNhbid0IGJh c2Ugb24gc3RhY2sgdG8gZmluZCB0aGUgQVAgaW5kZXgsIHVzZSB0aGUgQVBJQyBJRC4NCj4gPiA+ ID4gPiA+ICsgIC8vDQo+ID4gPiA+ID4gPiArICBDdXJyZW50QXBpY0lkID0gR2V0QXBpY0lkICgp OyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwNCj4gPiA+ID4gPiA+ICsgVG90YWxQcm9jZXNzb3JO dW1iZXI7IEluZGV4ICsrKSB7DQo+ID4gPiA+ID4gPiArICAgIGlmIChDcHVJbmZvSW5Ib2JbSW5k ZXhdLkFwaWNJZCA9PSBDdXJyZW50QXBpY0lkKSB7DQo+ID4gPiA+ID4gPiArICAgICAgKlByb2Nl c3Nvck51bWJlciA9IEluZGV4Ow0KPiA+ID4gPiA+ID4gKyAgICAgIHJldHVybiBFRklfU1VDQ0VT UzsNCj4gPiA+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiA+ID4gKyAgfQ0KPiA+ID4gPiA+ID4gKw0K PiA+ID4gPiA+ID4gICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+ID4gPiA+ID4gPiAgfQ0KPiA+ ID4gPiA+ID4NCj4gPiA+ID4gPiA+IC0tDQo+ID4gPiA+ID4gPiAyLjE1LjAud2luZG93cy4xDQo+ ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18NCj4gPiA+ID4gPiA+IGVkazItZGV2ZWwgbWFpbGluZyBsaXN0DQo+ID4g PiA+ID4gPiBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZw0KPiA+ID4gPiA+ID4gaHR0cHM6Ly9saXN0 cy4wMS5vcmcvbWFpbG1hbi9saXN0aW5mby9lZGsyLWRldmVsDQo+ID4gPiA+ID4gPg0KPiA+ID4g Pg0KPiA+ID4gPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Xw0KPiA+ID4gPiBlZGsyLWRldmVsIG1haWxpbmcgbGlzdA0KPiA+ID4gPiBlZGsyLWRldmVsQGxp c3RzLjAxLm9yZw0KPiA+ID4gPiBodHRwczovL2xpc3RzLjAxLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2VkazItZGV2ZWwNCj4gPiA+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fDQo+ID4gPiBlZGsyLWRldmVsIG1haWxpbmcgbGlzdA0KPiA+ID4gZWRrMi1kZXZl bEBsaXN0cy4wMS5vcmcNCj4gPiA+IGh0dHBzOi8vbGlzdHMuMDEub3JnL21haWxtYW4vbGlzdGlu Zm8vZWRrMi1kZXZlbA0KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXw0KPiBlZGsyLWRldmVsIG1haWxpbmcgbGlzdA0KPiBlZGsyLWRldmVsQGxpc3RzLjAx Lm9yZw0KPiBodHRwczovL2xpc3RzLjAxLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2VkazItZGV2ZWwN Cg==