From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 192.55.52.93, mailfrom: michael.d.kinney@intel.com) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by groups.io with SMTP; Tue, 23 Jul 2019 16:54:04 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 23 Jul 2019 16:54:03 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,300,1559545200"; d="scan'208";a="180915038" Received: from orsmsx107.amr.corp.intel.com ([10.22.240.5]) by orsmga002.jf.intel.com with ESMTP; 23 Jul 2019 16:54:03 -0700 Received: from orsmsx154.amr.corp.intel.com (10.22.226.12) by ORSMSX107.amr.corp.intel.com (10.22.240.5) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 23 Jul 2019 16:54:03 -0700 Received: from orsmsx113.amr.corp.intel.com ([169.254.9.177]) by ORSMSX154.amr.corp.intel.com ([169.254.11.96]) with mapi id 14.03.0439.000; Tue, 23 Jul 2019 16:54:02 -0700 From: "Michael D Kinney" To: "devel@edk2.groups.io" , "lersek@redhat.com" , "Ni, Ray" , "Kinney, Michael D" CC: "Dong, Eric" Subject: Re: [edk2-devel] [PATCH 4/4] MdeModulePkg/DxeIpl: Create 5-level page table for long mode Thread-Topic: [edk2-devel] [PATCH 4/4] MdeModulePkg/DxeIpl: Create 5-level page table for long mode Thread-Index: AQHVQGXO/ISS1sDguk6Bmu/Lttxw/KbYa3kAgABf9wCAAEBggP//1Xcg Date: Tue, 23 Jul 2019 23:54:02 +0000 Message-ID: References: <20190722081547.56100-1-ray.ni@intel.com> <20190722081547.56100-5-ray.ni@intel.com> <734D49CCEBEEF84792F5B80ED585239D5C2417DB@SHSMSX104.ccr.corp.intel.com> <6cc63718-a546-8b80-022d-d1a76cff081d@redhat.com> In-Reply-To: <6cc63718-a546-8b80-022d-d1a76cff081d@redhat.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.0.600.7 dlp-reaction: no-action x-originating-ip: [10.22.254.139] MIME-Version: 1.0 Return-Path: michael.d.kinney@intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 TGFzemxvLA0KDQpUaGVyZSBhbHJlYWR5IGEgZmV3IGV4YW1wbGVzIGluIE1kZVBrZy9JbmNsdWRl L0xpYnJhcnkvQmFzZUxpYi5oLg0KRm9yIGV4YW1wbGUsIHRoZSBiaXQgZmllbGQgc3RydWN0dXJl cyBmb3IgQ1IwLCBDUjQsIEVGTEFHUywNCmFuZCBhIHNlZ21lbnQgZGVzY3JpcHRvciBhcmUgaW4g dGhhdCAuaCBmaWxlLiAgVGhlc2UgYXJlIGFsbA0Kd2l0aGluOg0KDQojaWYgZGVmaW5lZCAoTURF X0NQVV9JQTMyKSB8fCBkZWZpbmVkIChNREVfQ1BVX1g2NCkNCi4gLiAuIA0KI2VuZGlmDQoNCldl IGhhdmUgc2luY2UgdXNlZCBhIHN0YW5kYXJkIHdheSB0byBwcm92aWRlIC5oIGZpbGVzIGZvcg0K cmVnaXN0ZXJzLiAgQmVzdCBleGFtcGxlIGlzIGluIFVlZmlDcHVQa2cvSW5jbHVkZS9SZWdpc3Rl ci4NCg0KSXQgbWF5IG1ha2Ugc2Vuc2UgdG8gcHV0IHRoZSByZWdpc3RlciBkZWZpbml0aW9ucyBy ZXF1aXJlZA0KYnkgTWRlUGtnIGFuZCBNZGVNb2R1bGVQa2cgaW4gTWRlUGtnL0luY2x1ZGUvUmVn aXN0ZXIsIGFuZA0KZmlsZXMgdGhhdCB1c2UgdGhvc2UgcmVnaXN0ZXIgdHlwZXMgY2FuIGluY2x1 ZGUgdGhlDQpyZXF1aXJlZCByZWdpc3RlciBkZWZpbml0aW9uIGluY2x1ZGUgZmlsZXMuDQoNCkJl c3QgcmVnYXJkcywNCg0KTWlrZQ0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZy b206IGRldmVsQGVkazIuZ3JvdXBzLmlvDQo+IFttYWlsdG86ZGV2ZWxAZWRrMi5ncm91cHMuaW9d IE9uIEJlaGFsZiBPZiBMYXN6bG8gRXJzZWsNCj4gU2VudDogVHVlc2RheSwgSnVseSAyMywgMjAx OSAxMjoyMCBQTQ0KPiBUbzogTmksIFJheSA8cmF5Lm5pQGludGVsLmNvbT47IGRldmVsQGVkazIu Z3JvdXBzLmlvDQo+IENjOiBEb25nLCBFcmljIDxlcmljLmRvbmdAaW50ZWwuY29tPg0KPiBTdWJq ZWN0OiBSZTogW2VkazItZGV2ZWxdIFtQQVRDSCA0LzRdDQo+IE1kZU1vZHVsZVBrZy9EeGVJcGw6 IENyZWF0ZSA1LWxldmVsIHBhZ2UgdGFibGUgZm9yIGxvbmcNCj4gbW9kZQ0KPiANCj4gT24gMDcv MjMvMTkgMTc6MjksIE5pLCBSYXkgd3JvdGU6DQo+ID4NCj4gPg0KPiA+PiAtLS0tLU9yaWdpbmFs IE1lc3NhZ2UtLS0tLQ0KPiA+PiBGcm9tOiBkZXZlbEBlZGsyLmdyb3Vwcy5pbyA8ZGV2ZWxAZWRr Mi5ncm91cHMuaW8+IE9uDQo+IEJlaGFsZiBPZiBMYXN6bG8NCj4gPj4gRXJzZWsNCj4gPj4gU2Vu dDogVHVlc2RheSwgSnVseSAyMywgMjAxOSA1OjQ2IFBNDQo+ID4+IFRvOiBkZXZlbEBlZGsyLmdy b3Vwcy5pbzsgTmksIFJheSA8cmF5Lm5pQGludGVsLmNvbT4NCj4gPj4gQ2M6IERvbmcsIEVyaWMg PGVyaWMuZG9uZ0BpbnRlbC5jb20+DQo+ID4+IFN1YmplY3Q6IFJlOiBbZWRrMi1kZXZlbF0gW1BB VENIIDQvNF0NCj4gTWRlTW9kdWxlUGtnL0R4ZUlwbDogQ3JlYXRlDQo+ID4+IDUtbGV2ZWwgcGFn ZSB0YWJsZSBmb3IgbG9uZyBtb2RlDQo+ID4+DQo+ID4+IE9uIDA3LzIyLzE5IDEwOjE1LCBOaSwg UmF5IHdyb3RlOg0KPiA+Pj4gUkVGOg0KPiBodHRwczovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcv c2hvd19idWcuY2dpP2lkPTIwMDgNCj4gPj4+DQo+ID4+PiBEeGVJcGwgaXMgcmVzcG9uc2libGUg dG8gY3JlYXRlIHBhZ2UgdGFibGUgZm9yIERYRQ0KPiBwaGFzZSBydW5uaW5nDQo+ID4+PiBlaXRo ZXIgaW4gbG9uZyBtb2RlIG9yIGluIDMyYml0IG1vZGUgd2l0aCBjZXJ0YWluDQo+IHByb3RlY3Rp b24NCj4gPj4+IG1lY2hhbmlzbSBlbmFibGVkIChyZWZlciB0byBUb0J1aWxkUGFnZVRhYmxlKCkp Lg0KPiA+Pj4NCj4gPj4+IFRoZSBwYXRjaCB1cGRhdGVzIER4ZUlwbCB0byBjcmVhdGUgNS1sZXZl bCBwYWdlDQo+IHRhYmxlIGZvciBEWEUgcGhhc2UNCj4gPj4+IHJ1bm5pbmcgaW4gbG9uZyBtb2Rl IHdoZW4gUGNkVXNlNUxldmVsUGFnZVRhYmxlIGlzDQo+IFRSVUUgYW5kIENQVQ0KPiA+Pj4gc3Vw cG9ydHMgNS1sZXZlbCBwYWdlIHRhYmxlLg0KPiA+Pj4NCj4gPj4+IFNpZ25lZC1vZmYtYnk6IFJh eSBOaSA8cmF5Lm5pQGludGVsLmNvbT4NCj4gPj4+IENjOiBFcmljIERvbmcgPGVyaWMuZG9uZ0Bp bnRlbC5jb20+DQo+ID4+PiBDYzogTGFzemxvIEVyc2VrIDxsZXJzZWtAcmVkaGF0LmNvbT4NCj4g Pj4+IC0tLQ0KPiA+Pj4gIE1kZU1vZHVsZVBrZy9Db3JlL0R4ZUlwbFBlaW0vRHhlSXBsLmluZiAg ICAgICB8DQo+IDEgKw0KPiA+Pj4gIC4uLi9Db3JlL0R4ZUlwbFBlaW0vWDY0L1ZpcnR1YWxNZW1v cnkuYyAgICAgICB8DQo+IDIyNyArKysrKysrKysrKystLS0tLS0NCj4gPj4+ICAyIGZpbGVzIGNo YW5nZWQsIDE1MSBpbnNlcnRpb25zKCspLCA3NyBkZWxldGlvbnMoLQ0KPiApDQo+ID4+Pg0KPiA+ Pj4gZGlmZiAtLWdpdA0KPiBhL01kZU1vZHVsZVBrZy9Db3JlL0R4ZUlwbFBlaW0vRHhlSXBsLmlu Zg0KPiA+Pj4gYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGVJcGxQZWltL0R4ZUlwbC5pbmYNCj4gPj4+ IGluZGV4IGFiYzMyMTdiMDEuLjk4YmMxN2ZjOWQgMTAwNjQ0DQo+ID4+PiAtLS0gYS9NZGVNb2R1 bGVQa2cvQ29yZS9EeGVJcGxQZWltL0R4ZUlwbC5pbmYNCj4gPj4+ICsrKyBiL01kZU1vZHVsZVBr Zy9Db3JlL0R4ZUlwbFBlaW0vRHhlSXBsLmluZg0KPiA+Pj4gQEAgLTExMCw2ICsxMTAsNyBAQCBb UGNkLklBMzIsUGNkLlg2NF0NCj4gPj4+DQo+IGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3Vp ZC5QY2ROdWxsUG9pbnRlckRldGVjdGlvblANCj4gcm9wZXJ0eU1hc2sgICAgIyMgQ09OU1VNRVMN Cj4gPj4+DQo+IGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RIZWFwR3VhcmRQcm9w ZXJ0eU1hc2sNCj4gIyMgQ09OU1VNRVMNCj4gPj4+ICAgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNw YWNlR3VpZC5QY2RDcHVTdGFja0d1YXJkDQo+ICMjIENPTlNVTUVTDQo+ID4+PiArDQo+IGdFZmlN ZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RVc2U1TGV2ZWxQYWdlVGFibGUNCj4gIyMgU09N RVRJTUVTX0NPTlNVTUVTDQo+ID4+Pg0KPiA+Pj4gIFtQY2QuSUEzMixQY2QuWDY0LFBjZC5BUk0s UGNkLkFBUkNINjRdDQo+ID4+PiAgICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNk U2V0TnhGb3JTdGFjaw0KPiAjIyBTT01FVElNRVNfQ09OU1VNRVMNCj4gPj4+IGRpZmYgLS1naXQN Cj4gYS9NZGVNb2R1bGVQa2cvQ29yZS9EeGVJcGxQZWltL1g2NC9WaXJ0dWFsTWVtb3J5LmMNCj4g Pj4+IGIvTWRlTW9kdWxlUGtnL0NvcmUvRHhlSXBsUGVpbS9YNjQvVmlydHVhbE1lbW9yeS5jDQo+ ID4+PiBpbmRleCBlZGMzOGU0NTI1Li5hNWJjZGNjNzM0IDEwMDY0NA0KPiA+Pj4gLS0tDQo+IGEv TWRlTW9kdWxlUGtnL0NvcmUvRHhlSXBsUGVpbS9YNjQvVmlydHVhbE1lbW9yeS5jDQo+ID4+PiAr KysNCj4gYi9NZGVNb2R1bGVQa2cvQ29yZS9EeGVJcGxQZWltL1g2NC9WaXJ0dWFsTWVtb3J5LmMN Cj4gPj4+IEBAIC0xNSw3ICsxNSw3IEBADQo+ID4+PiAgICAgIDIpIElBLTMyIEludGVsKFIpIEFy Y2hpdGVjdHVyZSBTb2Z0d2FyZQ0KPiBEZXZlbG9wZXIncyBNYW51YWwgVm9sdW1lIDI6SW5zdHJ1 Y3Rpb24gU2V0IFJlZmVyZW5jZSwNCj4gSW50ZWwNCj4gPj4+ICAgICAgMykgSUEtMzIgSW50ZWwo UikgQXJjaGl0ZWN0dXJlIFNvZnR3YXJlDQo+IERldmVsb3BlcidzIE1hbnVhbA0KPiA+Pj4gVm9s dW1lIDM6U3lzdGVtIFByb2dyYW1tZXIncyBHdWlkZSwgSW50ZWwNCj4gPj4+DQo+ID4+PiAtQ29w eXJpZ2h0IChjKSAyMDA2IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbA0KPiByaWdodHMN Cj4gPj4+IHJlc2VydmVkLjxCUj4NCj4gPj4+ICtDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDE5LCBJ bnRlbCBDb3Jwb3JhdGlvbi4gQWxsDQo+IHJpZ2h0cw0KPiA+Pj4gK3Jlc2VydmVkLjxCUj4NCj4g Pj4+ICBDb3B5cmlnaHQgKGMpIDIwMTcsIEFNRCBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMNCj4g cmVzZXJ2ZWQuPEJSPg0KPiA+Pj4NCj4gPj4+ICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNE LTItQ2xhdXNlLVBhdGVudCBAQCAtDQo+IDYyNiwxNCArNjI2LDE5IEBADQo+ID4+PiBDcmVhdGVJ ZGVudGl0eU1hcHBpbmdQYWdlVGFibGVzICgNCj4gPj4+ICAgICkNCj4gPj4+ICB7DQo+ID4+PiAg ICBVSU5UMzINCj4gUmVnRWF4Ow0KPiA+Pj4gKyAgVUlOVDMyDQo+IFJlZ0VieDsNCj4gPj4+ICsg IFVJTlQzMg0KPiBSZWdFY3g7DQo+ID4+PiAgICBVSU5UMzINCj4gUmVnRWR4Ow0KPiA+Pj4gICAg VUlOVDgNCj4gUGh5c2ljYWxBZGRyZXNzQml0czsNCj4gPj4+ICAgIEVGSV9QSFlTSUNBTF9BRERS RVNTDQo+IFBhZ2VBZGRyZXNzOw0KPiA+Pj4gKyAgVUlOVE4NCj4gSW5kZXhPZlBtbDVFbnRyaWVz Ow0KPiA+Pj4gICAgVUlOVE4NCj4gSW5kZXhPZlBtbDRFbnRyaWVzOw0KPiA+Pj4gICAgVUlOVE4N Cj4gSW5kZXhPZlBkcEVudHJpZXM7DQo+ID4+PiAgICBVSU5UTg0KPiBJbmRleE9mUGFnZURpcmVj dG9yeUVudHJpZXM7DQo+ID4+PiArICBVSU5UMzINCj4gTnVtYmVyT2ZQbWw1RW50cmllc05lZWRl ZDsNCj4gPj4+ICAgIFVJTlQzMg0KPiBOdW1iZXJPZlBtbDRFbnRyaWVzTmVlZGVkOw0KPiA+Pj4g ICAgVUlOVDMyDQo+IE51bWJlck9mUGRwRW50cmllc05lZWRlZDsNCj4gPj4+ICsgIFBBR0VfTUFQ X0FORF9ESVJFQ1RPUllfUE9JTlRFUg0KPiAqUGFnZU1hcExldmVsNUVudHJ5Ow0KPiA+Pj4gICAg UEFHRV9NQVBfQU5EX0RJUkVDVE9SWV9QT0lOVEVSDQo+ICpQYWdlTWFwTGV2ZWw0RW50cnk7DQo+ ID4+PiAgICBQQUdFX01BUF9BTkRfRElSRUNUT1JZX1BPSU5URVINCj4gKlBhZ2VNYXA7DQo+ID4+ PiAgICBQQUdFX01BUF9BTkRfRElSRUNUT1JZX1BPSU5URVINCj4gKlBhZ2VEaXJlY3RvcnlQb2lu dGVyRW50cnk7DQo+ID4+PiBAQCAtNjQxLDkgKzY0NiwxMSBAQA0KPiBDcmVhdGVJZGVudGl0eU1h cHBpbmdQYWdlVGFibGVzICgNCj4gPj4+ICAgIFVJTlRODQo+IFRvdGFsUGFnZXNOdW07DQo+ID4+ PiAgICBVSU5UTg0KPiBCaWdQYWdlQWRkcmVzczsNCj4gPj4+ICAgIFZPSUQNCj4gKkhvYjsNCj4g Pj4+ICsgIEJPT0xFQU4NCj4gUGFnZTVMZXZlbFN1cHBvcnQ7DQo+ID4+PiAgICBCT09MRUFODQo+ IFBhZ2UxR1N1cHBvcnQ7DQo+ID4+PiAgICBQQUdFX1RBQkxFXzFHX0VOVFJZDQo+ICpQYWdlRGly ZWN0b3J5MUdFbnRyeTsNCj4gPj4+ICAgIFVJTlQ2NA0KPiBBZGRyZXNzRW5jTWFzazsNCj4gPj4+ ICsgIElBMzJfQ1I0DQo+IENyNDsNCj4gPj4+DQo+ID4+PiAgICAvLw0KPiA+Pj4gICAgLy8gTWFr ZSBzdXJlIEFkZHJlc3NFbmNNYXNrIGlzIGNvbnRhaW5lZCB0bw0KPiBzbWFsbGVzdCBzdXBwb3J0 ZWQNCj4gPj4+IGFkZHJlc3MgZmllbGQgQEAgLTY3NywzMyArNjg0LDY2IEBADQo+IENyZWF0ZUlk ZW50aXR5TWFwcGluZ1BhZ2VUYWJsZXMgKA0KPiA+Pj4gICAgICB9DQo+ID4+PiAgICB9DQo+ID4+ Pg0KPiA+Pj4gKyAgUGFnZTVMZXZlbFN1cHBvcnQgPSBGQUxTRTsNCj4gPj4+ICsgIGlmIChQY2RH ZXRCb29sIChQY2RVc2U1TGV2ZWxQYWdlVGFibGUpKSB7DQo+ID4+PiArICAgIEFzbUNwdWlkRXgg KDB4NywgMCwgJlJlZ0VheCwgJlJlZ0VieCwgJlJlZ0VjeCwNCj4gJlJlZ0VkeCk7DQo+ID4+PiAr ICAgIERFQlVHICgoREVCVUdfSU5GTywgIkNwdWlkKDcvMCk6DQo+ICUwOHgvJTA4eC8lMDh4LyUw OHhcbiIsIFJlZ0VheCwgUmVnRWJ4LCBSZWdFY3gsDQo+IFJlZ0VkeCkpOw0KPiA+Pj4gKyAgICBp ZiAoKFJlZ0VjeCAmIEJJVDE2KSAhPSAwKSB7DQo+ID4+DQo+ID4+ICgxKSBXb3VsZCBpdCBiZSBw b3NzaWJsZSB0byB1c2UgbWFjcm8gbmFtZXMgaGVyZSwNCj4gZm9yIEluZGV4IGFuZA0KPiA+PiBT dWJJbmRleCBpbiBBc21DcHVpZEV4KCksIGFuZCBhICJiZXR0ZXIiIG1hY3JvIG5hbWUNCj4gdGhh biBCSVQxNiwgaW4gdGhlIFJlZ0VjeCBjaGVjaz8NCj4gPg0KPiA+IFRoZXJlIGFyZSBtYWNyb3Mg d2hpY2ggYXJlIGRlZmluZWQgaW4gVWVmaUNwdVBrZyBmb3INCj4gdGhlIENQVUlEIGxlYWYNCj4g PiBmdW5jdGlvbnMgYW5kIHN0cnVjdHVyZXMgZm9yIHRoZSBDUFVJRCBvdXRwdXQgZGF0YS4NCj4g PiBCdXQgc2luY2UgdGhlcmUgaXMgcnVsZSB0aGF0IE1kZU1vZHVsZVBrZyBjYW5ub3QNCj4gZGVw ZW5kIG9uIFVlZmlDcHVQa2cNCj4gPiBzbyB0aGUgY29kZSBjYW5ub3QgdXNlIHRob3NlIG1hY3Jv cy9zdHJ1Y3R1cmVzLg0KPiA+DQo+ID4gSSBhbSB0aGlua2luZyBvZiBhIG5ldyBydWxlIHRoYXQg VWVmaUNwdVBrZyBhbmQNCj4gTWRlTW9kdWxlUGtnIGNhbiBkZXBlbmQgb24gZWFjaCBvdGhlci4N Cj4gPiBJIGhhdmVuJ3QgdGFsa2VkIHdpdGggTWlrZSBvbiB0aGlzLiBOb3Qgc3VyZSBpZiBoZSBp cw0KPiBvayBvbiB0aGlzLg0KPiA+IEZvciB0aGlzIGNhc2UsIHllcyBJIGNhbiB0ZW1wb3Jhcnkg ZGVmaW5lIDIgbWFjcm9zOg0KPiBvbmUgZm9yIDB4NywgdGhlIG90aGVyIGZvciBCSVQxNi4NCj4g DQo+IEknbSBhd2FyZSBvZiB0aGlzIHJlc3RyaWN0aW9uLiBJIHRoaW5rIGl0J3MgYSBnb29kIG9u ZTsNCj4gcGVyc29uYWxseSBJIHdvdWxkbid0IGxpa2UgTWRlTW9kdWxlUGtnIHRvIGRlcGVuZCBv bg0KPiBVZWZpQ3B1UGtnLiBGb3IgZXhhbXBsZSwgd2hpbGUgTWRlTW9kdWxlUGtnIGlzIHZlcnkN Cj4gbmVjZXNzYXJ5IGZvciBBQVJDSDY0IHBsYXRmb3JtcywgVWVmaUNwdVBrZyBkb2Vzbid0DQo+ IGFwcGVhciBuZWNlc3NhcnkgZm9yIEFBUkNINjQgcGxhdGZvcm1zLg0KPiANCj4gSWYgYm90aCBN ZGVNb2R1bGVQa2cgYW5kIFVlZmlDcHVQa2cgZGVwZW5kIG9uIHN1Y2gNCj4gbWFjcm9zLCB0aGVu IHRoZSBtYWNyb3Mgc2hvdWxkIGFyZ3VhYmx5IGJlIGRlZmluZWQgaW4NCj4gIk1kZU1vZHVsZVBr Zy9JbmNsdWRlL0luZHVzdHJ5U3RhbmRhcmQiLCBvciBldmVuDQo+ICJNZGVQa2cvSW5jbHVkZS9J bmR1c3RyeVN0YW5kYXJkIi4gVGhlIHJlZ2lzdGVycyBhbmQNCj4gYml0LWZpZWxkcyBjb21lIGZy b20gcHVibGlzaGVkIGluZHVzdHJ5IHNwZWNpZmljYXRpb25zLg0KPiAoUHVibGlzaGVkIGJ5IElu dGVsIDopICkNCj4gDQo+ID4+PiArICAgICAgUGFnZTVMZXZlbFN1cHBvcnQgPSBUUlVFOw0KPiA+ Pj4gKyAgICB9DQo+ID4+PiArICB9DQo+ID4+PiArDQo+ID4+PiArICBERUJVRyAoKERFQlVHX0lO Rk8sDQo+ICJBZGRyZXNzQml0cy81TGV2ZWxQYWdpbmcvMUdQYWdlID0NCj4gPj4+ICsgJWQvJWQv JWRcbiIsIFBoeXNpY2FsQWRkcmVzc0JpdHMsDQo+IFBhZ2U1TGV2ZWxTdXBwb3J0LA0KPiA+PiBQ YWdlMUdTdXBwb3J0KSk7DQo+ID4+PiArDQo+ID4+DQo+ID4+ICgyKSBDYW4gd2UgZm9ybWF0IHRo aXMgbG9nIG1lc3NhZ2UgYXM6DQo+ID4+DQo+ID4+ICAgQWRkcmVzc0JpdHM9JWQgNUxldmVsUGFn aW5nPSVkIDFHUGFnZT0lZA0KPiA+DQo+ID4gb2suDQo+ID4NCj4gPj4NCj4gPj4gPw0KPiA+Pg0K PiA+Pj4gICAgLy8NCj4gPj4+IC0gIC8vIElBLTMyZSBwYWdpbmcgdHJhbnNsYXRlcyA0OC1iaXQg bGluZWFyDQo+IGFkZHJlc3NlcyB0byA1Mi1iaXQgcGh5c2ljYWwgYWRkcmVzc2VzLg0KPiA+Pj4g KyAgLy8gSUEtMzJlIHBhZ2luZyB0cmFuc2xhdGVzIDQ4LWJpdCBsaW5lYXINCj4gYWRkcmVzc2Vz IHRvIDUyLWJpdA0KPiA+Pj4gKyBwaHlzaWNhbCBhZGRyZXNzZXMgIC8vICB3aGVuIDUtTGV2ZWwg UGFnaW5nIGlzDQo+IGRpc2FibGVkLCAgLy8gIGR1ZQ0KPiA+Pj4gKyB0byBlaXRoZXIgdW5zdXBw b3J0ZWQgYnkgSFcsIG9yIGRpc2FibGVkIGJ5IFBDRC4NCj4gPj4+ICAgIC8vDQo+ID4+PiAgICBB U1NFUlQgKFBoeXNpY2FsQWRkcmVzc0JpdHMgPD0gNTIpOw0KPiA+Pj4gLSAgaWYgKFBoeXNpY2Fs QWRkcmVzc0JpdHMgPiA0OCkgew0KPiA+Pj4gKyAgaWYgKCFQYWdlNUxldmVsU3VwcG9ydCAmJiBQ aHlzaWNhbEFkZHJlc3NCaXRzID4NCj4gNDgpIHsNCj4gPj4+ICAgICAgUGh5c2ljYWxBZGRyZXNz Qml0cyA9IDQ4Ow0KPiA+Pj4gICAgfQ0KPiA+Pj4NCj4gPj4+ICAgIC8vDQo+ID4+PiAgICAvLyBD YWxjdWxhdGUgdGhlIHRhYmxlIGVudHJpZXMgbmVlZGVkLg0KPiA+Pj4gICAgLy8NCj4gPj4+IC0g IGlmIChQaHlzaWNhbEFkZHJlc3NCaXRzIDw9IDM5ICkgew0KPiA+Pj4gLSAgICBOdW1iZXJPZlBt bDRFbnRyaWVzTmVlZGVkID0gMTsNCj4gPj4+IC0gICAgTnVtYmVyT2ZQZHBFbnRyaWVzTmVlZGVk ID0gKFVJTlQzMilMU2hpZnRVNjQNCj4gKDEsIChQaHlzaWNhbEFkZHJlc3NCaXRzIC0gMzApKTsN Cj4gPj4+IC0gIH0gZWxzZSB7DQo+ID4+PiAtICAgIE51bWJlck9mUG1sNEVudHJpZXNOZWVkZWQg PSAoVUlOVDMyKUxTaGlmdFU2NA0KPiAoMSwgKFBoeXNpY2FsQWRkcmVzc0JpdHMgLSAzOSkpOw0K PiA+Pj4gLSAgICBOdW1iZXJPZlBkcEVudHJpZXNOZWVkZWQgPSA1MTI7DQo+ID4+PiArICBOdW1i ZXJPZlBtbDVFbnRyaWVzTmVlZGVkID0gMTsNCj4gPj4+ICsgIGlmIChQaHlzaWNhbEFkZHJlc3NC aXRzID4gNDgpIHsNCj4gPj4+ICsgICAgTnVtYmVyT2ZQbWw1RW50cmllc05lZWRlZCA9IChVSU5U MzIpIExTaGlmdFU2NA0KPiAoMSwgUGh5c2ljYWxBZGRyZXNzQml0cyAtIDQ4KTsNCj4gPj4+ICsg ICAgUGh5c2ljYWxBZGRyZXNzQml0cyA9IDQ4Ow0KPiA+Pj4gICAgfQ0KPiA+Pj4NCj4gPj4+ICsg IE51bWJlck9mUG1sNEVudHJpZXNOZWVkZWQgPSAxOw0KPiA+Pj4gKyAgaWYgKFBoeXNpY2FsQWRk cmVzc0JpdHMgPiAzOSkgew0KPiA+Pj4gKyAgICBOdW1iZXJPZlBtbDRFbnRyaWVzTmVlZGVkID0g KFVJTlQzMikgTFNoaWZ0VTY0DQo+ICgxLCBQaHlzaWNhbEFkZHJlc3NCaXRzIC0gMzkpOw0KPiA+ Pj4gKyAgICBQaHlzaWNhbEFkZHJlc3NCaXRzID0gMzk7DQo+ID4+PiArICB9DQo+ID4+PiArDQo+ ID4+PiArICBOdW1iZXJPZlBkcEVudHJpZXNOZWVkZWQgPSAxOw0KPiA+Pj4gKyAgQVNTRVJUIChQ aHlzaWNhbEFkZHJlc3NCaXRzID4gMzApOw0KPiBOdW1iZXJPZlBkcEVudHJpZXNOZWVkZWQgPQ0K PiA+Pj4gKyAoVUlOVDMyKSBMU2hpZnRVNjQgKDEsIFBoeXNpY2FsQWRkcmVzc0JpdHMgLSAzMCk7 DQo+ID4+PiArDQo+ID4+PiAgICAvLw0KPiA+Pj4gICAgLy8gUHJlLWFsbG9jYXRlIGJpZyBwYWdl cyB0byBhdm9pZCBsYXRlcg0KPiBhbGxvY2F0aW9ucy4NCj4gPj4+ICAgIC8vDQo+ID4+PiAgICBp ZiAoIVBhZ2UxR1N1cHBvcnQpIHsNCj4gPj4+IC0gICAgVG90YWxQYWdlc051bSA9IChOdW1iZXJP ZlBkcEVudHJpZXNOZWVkZWQgKyAxKQ0KPiAqIE51bWJlck9mUG1sNEVudHJpZXNOZWVkZWQgKyAx Ow0KPiA+Pj4gKyAgICBUb3RhbFBhZ2VzTnVtID0gKChOdW1iZXJPZlBkcEVudHJpZXNOZWVkZWQg Kw0KPiAxKSAqDQo+ID4+PiArIE51bWJlck9mUG1sNEVudHJpZXNOZWVkZWQgKyAxKSAqDQo+IE51 bWJlck9mUG1sNUVudHJpZXNOZWVkZWQNCj4gPj4gKyAxOw0KPiA+Pj4gICAgfSBlbHNlIHsNCj4g Pj4+IC0gICAgVG90YWxQYWdlc051bSA9IE51bWJlck9mUG1sNEVudHJpZXNOZWVkZWQgKyAxOw0K PiA+Pj4gKyAgICBUb3RhbFBhZ2VzTnVtID0gKE51bWJlck9mUG1sNEVudHJpZXNOZWVkZWQgKw0K PiAxKSAqDQo+ID4+PiArIE51bWJlck9mUG1sNUVudHJpZXNOZWVkZWQgKyAxOyAgfQ0KPiA+Pj4g Kw0KPiA+Pj4gKyAgLy8NCj4gPj4+ICsgIC8vIFN1YnN0cmFjdCB0aGUgb25lIHBhZ2Ugb2NjdXBp ZWQgYnkgUE1MNQ0KPiBlbnRyaWVzIGlmIDUtTGV2ZWwgUGFnaW5nIGlzIGRpc2FibGVkLg0KPiA+ Pj4gKyAgLy8NCj4gPj4+ICsgIGlmICghUGFnZTVMZXZlbFN1cHBvcnQpIHsNCj4gPj4+ICsgICAg VG90YWxQYWdlc051bS0tOw0KPiA+Pj4gICAgfQ0KPiA+Pj4gKw0KPiA+Pj4gKyAgREVCVUcgKChE RUJVR19JTkZPLCAiUG1sNS9QbWw0L1BkcC9Ub3RhbFBhZ2UgPQ0KPiAlZC8lZC8lZC8lZFxuIiwN Cj4gPj4+ICsgICAgTnVtYmVyT2ZQbWw1RW50cmllc05lZWRlZCwNCj4gTnVtYmVyT2ZQbWw0RW50 cmllc05lZWRlZCwNCj4gPj4+ICsgICAgTnVtYmVyT2ZQZHBFbnRyaWVzTmVlZGVkLCBUb3RhbFBh Z2VzTnVtKSk7DQo+ID4+PiArDQo+ID4+DQo+ID4+ICgzKSBTYW1lIGNvbW1lbnQgYWJvdXQgbG9n IG1lc3NhZ2UgZm9ybWF0dGluZyBhcyBpbg0KPiAoMikuDQo+ID4+DQo+ID4+ICg0KSBQbGVhc2Ug bG9nIFVJTlQzMiB2YWx1ZXMgd2l0aCAldSwgbm90ICVkLg0KPiA+Pg0KPiA+PiAoNSkgUGxlYXNl IGxvZyBVSU5UTiB2YWx1ZXMgd2l0aCAlTHUgKGFuZCBjYXN0IHRoZW0NCj4gdG8gVUlOVDY0IGZp cnN0KS4NCj4gPg0KPiA+DQo+ID4gb2sgdG8gYWJvdmUgMywgNCwgNS4NCj4gPg0KPiA+Pg0KPiA+ PiAoNikgTW9yZSBnZW5lcmFsbHksIGNhbiB3ZSBwbGVhc2UgcmVwbGFjZSB0aGlzIHBhdGNoDQo+ IHdpdGggdGhyZWUNCj4gPj4gcGF0Y2hlcywgaW4gdGhlIHNlcmllcz8NCj4gPj4NCj4gPj4gLSB0 aGUgZmlyc3QgcGF0Y2ggc2hvdWxkIGV4dHJhY3QgdGhlIFRvdGFsUGFnZXNOdW0NCj4gY2FsY3Vs YXRpb24gdG8gYQ0KPiA+PiBzZXBhcmF0ZSAqbGlicmFyeSogZnVuY3Rpb24gKGl0IHNob3VsZCBi ZSBhIHB1YmxpYw0KPiBmdW5jdGlvbiBpbiBhIEJBU0UNCj4gPj4gb3IgUEVJTSBsaWJyYXJ5KQ0K PiA+Pg0KPiA+PiAtIHRoZSBzZWNvbmQgcGF0Y2ggc2hvdWxkIGV4dGVuZCB0aGUgVG90YWxQYWdl c051bQ0KPiBjYWxjdWxhdGlvbiBpbiB0aGUNCj4gPj4gbGlicmFyeSBmdW5jdGlvbiB0byA1LWxl dmVsIHBhZ2luZw0KPiA+Pg0KPiA+PiAtIHRoZSB0aGlyZCBwYXRjaCBzaG91bGQgYmUgdGhlIHJl bWFpbmluZyBjb2RlIGZyb20NCj4gdGhlIHByZXNlbnQgcGF0Y2guDQo+ID4+DQo+ID4+IEhlcmUn cyB3aHk6IGluIE92bWZQa2cvUGxhdGZvcm1QZWksIHRoZQ0KPiBHZXRQZWlNZW1vcnlDYXAoKSBm dW5jdGlvbg0KPiA+PiBkdXBsaWNhdGVzIHRoaXMgY2FsY3VsYXRpb24uIEluIE9WTUYsIFBFSS1w aGFzZQ0KPiBtZW1vcnkgYWxsb2NhdGlvbnMNCj4gPj4gY2FuIGJlIGRvbWluYXRlZCBieSB0aGUg cGFnZSB0YWJsZXMgYnVpbHQgZm9yIDY0LWJpdA0KPiBEWEUsIGFuZCBzbw0KPiA+PiBPdm1mUGtn L1BsYXRmb3JtUGVpIG11c3Qga25vdywgZm9yIHNpemluZyB0aGUNCj4gcGVybWFuZW50IFBFSSBS QU0sIGhvdw0KPiA+PiBtdWNoIFJBTSB0aGUgRFhFIElQTCBQRUlNIHdpbGwgbmVlZCBmb3IgdGhv c2UgcGFnZQ0KPiB0YWJsZXMuDQo+ID4+DQo+ID4+IEkgd291bGQgKnJlYWxseSogZGlzbGlrZSBj b3B5aW5nIHRoaXMgdXBkYXRlIChmb3IgNS0NCj4gbGV2ZWwgcGFnaW5nKQ0KPiA+PiBmcm9tDQo+ ID4+IENyZWF0ZUlkZW50aXR5TWFwcGluZ1BhZ2VUYWJsZXMoKSB0bw0KPiBHZXRQZWlNZW1vcnlD YXAoKS4gSW5zdGVhZCwgdGhlDQo+ID4+IGNhbGN1bGF0aW9uIHNob3VsZCBiZSBleHRyYWN0ZWQg dG8gYSBsaWJyYXJ5DQo+IGZ1bmN0aW9uLCBhbmQgdGhlbiBPVk1GDQo+ID4+IChhbmQgYWxsIG90 aGVyIHBsYXRmb3JtcyBhZmZlY3RlZCBzaW1pbGFybHkpIGNvdWxkDQo+IGNhbGwgdGhlIG5ldyBm dW5jdGlvbi4NCj4gPj4NCj4gPj4gSWYgdGhpcyBpcyBub3QgZmVhc2libGUgb3IgdmVyeSBtdWNo IG91dCBvZiBzY29wZSwNCj4gdGhlbiBJIGd1ZXNzIHdlJ2xsDQo+ID4+IGp1c3Qga2VlcCB0aGUg UENEIGFzIEZBTFNFIGluIE9WTUYsIGZvciB0aGUgdGltZQ0KPiBiZWluZy4NCj4gPj4NCj4gPg0K PiA+IEJaIGh0dHBzOi8vYnVnemlsbGEudGlhbm9jb3JlLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQ3 DQo+IG1heSBiZSB3aGF0IHlvdQ0KPiA+IG5lZWQuDQo+IA0KPiBPaCwgaW5kZWVkLiBJJ20gc3Vi c2NyaWJlZCB0byB0aGlzIEJaLCBidXQgdGhlIGxhc3QNCj4gdXBkYXRlIHdhcyBpbiBKYW4NCj4g MjAxOCA6KQ0KPiANCj4gPiBFeHRyYWN0aW5nIGEgbGlicmFyeSBBUEkgdG8gcmV0dXJuIGhvdyBt YW55IHBhZ2VzIGFyZQ0KPiBuZWVkZWQgZm9yIHBhZ2UNCj4gPiB0YWJsZXMgbmVlZHMgdG8gY29u c2lkZXIgc2V2ZXJhbCBjYXNlczoNCj4gPiAxLiA0SyBvciAyTSBvciAxRyBwYWdlIHNpemUgaXMg dXNlZC4NCj4gPiAyLiByYW5nZSBvZiBwaHlzaWNhbCBtZW1vcnkNCj4gPiAzLiBwYWdlIHRhYmxl IGxldmVsDQo+ID4NCj4gPiBCdXQgcmlnaHQgbm93LCB0aGlzIGlzIG5vdCBpbiB0aGUgaGlnaCBw cmlvcml0eSBpbiBteQ0KPiB0by1kbyBsaXN0Lg0KPiA+IEkgY2FuIGhlbHAgdG8gY2hhbmdlIEdl dFBlaU1lbW9yeUNhcCgpIGZvciBzaG9ydC10ZXJtDQo+IG5lZWRzLg0KPiA+IEFyZSB5b3Ugb2sg d2l0aCB0aGlzPw0KPiANCj4gTm8sIEknbSBub3QuDQo+IA0KPiBPYnZpb3VzbHksIEknbSBub3Qg dHJ5aW5nIHRvIGZvcmNlIHlvdSB0byBhYnN0cmFjdCBvdXQNCj4gdGhlIGxpYnJhcnkgaW4gcXVl c3Rpb24sIGp1c3QgZm9yIE9WTUYncyBzYWtlLiBXaGF0IEknbQ0KPiBzYXlpbmcgaXMgdGhhdCBJ IHN0cm9uZ2x5IHByZWZlciBkZWxheWluZyA1LWxldmVsDQo+IHBhZ2luZyBzdXBwb3J0IGluIE9W TUYgdW50aWwgdGhpcyBsaWJyYXJ5IGJlY29tZXMNCj4gYXZhaWxhYmxlLCBvdmVyIGR1cGxpY2F0 aW5nIHlldCBtb3JlIGNvZGUgKGFuZCBjb21wbGV4DQo+IGNvZGUsIGF0DQo+IHRoYXQpIGZyb20g b3RoZXIgUGFja2FnZXMgdG8gT3ZtZlBrZy4gRnJvbSB0aGF0DQo+IHBlcnNwZWN0aXZlLCBJIGFw cHJlY2lhdGUgdGhlIG5ldyBQQ0QgdmVyeSBtdWNoLA0KPiBiZWNhdXNlIGl0IHNob3VsZCBtYWtl IHRoaXMgcG9zdHBvbmluZyBlYXN5Lg0KPiANCj4gSW4gb3RoZXIgd29yZHMsIHRoZXJlIGlzIG5v IHNob3J0LXRlcm0gbmVlZC4NCj4gDQo+IFRoYW5rIHlvdSENCj4gTGFzemxvDQo+IA0KPiANCg0K