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.65; helo=mga03.intel.com; envelope-from=jian.j.wang@intel.com; receiver=edk2-devel@lists.01.org Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) (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 BC1352217CE21 for ; Wed, 6 Dec 2017 04:34:08 -0800 (PST) Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 06 Dec 2017 04:38:40 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.45,368,1508828400"; d="scan'208";a="364885" Received: from fmsmsx105.amr.corp.intel.com ([10.18.124.203]) by fmsmga007.fm.intel.com with ESMTP; 06 Dec 2017 04:38:39 -0800 Received: from fmsmsx120.amr.corp.intel.com (10.18.124.208) by FMSMSX105.amr.corp.intel.com (10.18.124.203) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 6 Dec 2017 04:38:39 -0800 Received: from shsmsx101.ccr.corp.intel.com (10.239.4.153) by fmsmsx120.amr.corp.intel.com (10.18.124.208) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 6 Dec 2017 04:38:39 -0800 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.213]) by SHSMSX101.ccr.corp.intel.com ([169.254.1.159]) with mapi id 14.03.0319.002; Wed, 6 Dec 2017 20:38:38 +0800 From: "Wang, Jian J" To: "Ni, Ruiyu" , "edk2-devel@lists.01.org" CC: "Kinney, Michael D" , "Gao, Liming" Thread-Topic: [edk2] [PATCH 2/3] IntelFrameworkModulePkg/LegacyBiosDxe: Use macro to enable/disable page 0 Thread-Index: AQHTbmRVSaxqkuRkmk+hrY7X9zQLdqM1h14AgAC5srA= Date: Wed, 6 Dec 2017 12:38:38 +0000 Message-ID: References: <20171206073120.2248-1-jian.j.wang@intel.com> <20171206073120.2248-3-jian.j.wang@intel.com> <8504df95-2c80-bc7b-c928-084021649a90@Intel.com> In-Reply-To: <8504df95-2c80-bc7b-c928-084021649a90@Intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMGZiOWNhMjQtNTk2ZS00MGVkLTg1OWItOGExNzZjZmU1ODRmIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjIuNS4xOCIsIlRydXN0ZWRMYWJlbEhhc2giOiJCcmlCTERoSHdDVXRCUzlacUl2SnhHVmNDYTh4bmVNbE1WVlhZMlJSNlJrZVdaVVdGS2JtMjlZdjB0ekd5eDdoIn0= x-ctpclassification: CTP_IC dlp-product: dlpe-windows dlp-version: 11.0.0.116 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH 2/3] IntelFrameworkModulePkg/LegacyBiosDxe: Use macro to enable/disable page 0 X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 06 Dec 2017 12:34:08 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 WW91J3JlIHJpZ2h0IHRoYXQge30gYXJlIG5vdCBuZWNlc3NhcnkuIEknbSB3b25kZXJpbmcgd2h5 IEkgY2FuJ3QgcGFzcyBidWlsZCB3aXRob3V0IHRoZW0gYmVmb3JlLg0KVGhleSdsbCBiZSByZW1v dmVkIGluIHYyLg0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IE5pLCBS dWl5dQ0KPiBTZW50OiBXZWRuZXNkYXksIERlY2VtYmVyIDA2LCAyMDE3IDU6MzIgUE0NCj4gVG86 IFdhbmcsIEppYW4gSiA8amlhbi5qLndhbmdAaW50ZWwuY29tPjsgZWRrMi1kZXZlbEBsaXN0cy4w MS5vcmcNCj4gQ2M6IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNv bT47IEdhbywgTGltaW5nDQo+IDxsaW1pbmcuZ2FvQGludGVsLmNvbT4NCj4gU3ViamVjdDogUmU6 IFtlZGsyXSBbUEFUQ0ggMi8zXSBJbnRlbEZyYW1ld29ya01vZHVsZVBrZy9MZWdhY3lCaW9zRHhl OiBVc2UNCj4gbWFjcm8gdG8gZW5hYmxlL2Rpc2FibGUgcGFnZSAwDQo+IA0KPiBPbiAxMi82LzIw MTcgMzozMSBQTSwgSmlhbiBKIFdhbmcgd3JvdGU6DQo+ID4gQ3VycmVudCBpbXBsZW1lbnRhdGlv biB1c2VzIGZvbGxvd2luZyB0d28gbWV0aG9kcw0KPiA+DQo+ID4gICAgICBFbmFibGVOdWxsRGV0 ZWN0aW9uKCkNCj4gPiAgICAgIERpc2FibGVOdWxsRGV0ZWN0aW9uKCkNCj4gPg0KPiA+IHRvIGVu YWJsZS9kaXNhYmxlIHBhZ2UgMC4gVGhlc2UgdHdvIG1ldGhvZHMgd2lsbCBjaGVjayBQQ0QNCj4g PiBQY2ROdWxsUG9pbnRlckRldGVjdGlvblByb3BlcnR5TWFzayB0byBrbm93IGlmIHRoZSBwYWdl IDAgaXMgZGlzYWJsZWQgb3Igbm90Lg0KPiA+IFRoaXMgaXMgZHVlIHRvIHRoZSBmYWN0IHRoYXQg b2xkIEdDRCBzZXJ2aWNlIGRvZXNuJ3QgcHJvdmlkZSBwYWdpbmcgcmVsYXRlZA0KPiA+IGF0dHJp YnV0ZXMgb2YgbWVtb3J5IGJsb2NrLiBTaW5jZSB0aGlzIGlzc3VlIGhhcyBiZWVuIGZpeGVkLCBH Q0Qgc2VydmljZXMNCj4gPiBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHBhZ2luZyBzdGF0 dXMgb2YgcGFnZSAwLiBUaGlzIGlzIGFsc28gbWFrZSBpdA0KPiA+IHBvc3NpYmxlIHRvIGp1c3Qg dXNlIGEgbmV3IG1hY3JvDQo+ID4NCj4gPiAgICAgIEFDQ0VTU19QQUdFMF9DT0RFKA0KPiA+ICAg ICAgICB7DQo+ID4gICAgICAgICAgICA8Y29kZSBhY2Nlc3NpbmcgcGFnZSAwPg0KPiA+ICAgICAg ICB9DQo+ID4gICAgICApOw0KPiA+DQo+ID4gdG8gcmVwbGFjZSBhYm92ZSBtZXRob2RzIHRvIGRv IHRoZSBzYW1lIGpvYiwgd2hpY2ggYWxzbyBtYWtlcyBjb2RlIG1vcmUNCj4gPiByZWFkYWJpbGl0 eS4NCj4gPg0KPiA+IENjOiBMaW1pbmcgR2FvIDxsaW1pbmcuZ2FvQGludGVsLmNvbT4NCj4gPiBD YzogTWljaGFlbCBEIEtpbm5leSA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+DQo+ID4gQ29u dHJpYnV0ZWQtdW5kZXI6IFRpYW5vQ29yZSBDb250cmlidXRpb24gQWdyZWVtZW50IDEuMQ0KPiA+ IFNpZ25lZC1vZmYtYnk6IEppYW4gSiBXYW5nIDxqaWFuLmoud2FuZ0BpbnRlbC5jb20+DQo+ID4g LS0tDQo+ID4gICAuLi4vQ3NtL0xlZ2FjeUJpb3NEeGUvTGVnYWN5QmRhLmMgICAgICAgICAgICAg ICAgICB8ICA1MyArKysrLS0tLQ0KPiA+ICAgLi4uL0NzbS9MZWdhY3lCaW9zRHhlL0xlZ2FjeUJp b3MuYyAgICAgICAgICAgICAgICAgfCAxMzUgKystLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4gICAu Li4vQ3NtL0xlZ2FjeUJpb3NEeGUvTGVnYWN5Qmlvc0R4ZS5pbmYgICAgICAgICAgICB8ICAgMSAt DQo+ID4gICAuLi4vQ3NtL0xlZ2FjeUJpb3NEeGUvTGVnYWN5Qmlvc0ludGVyZmFjZS5oICAgICAg ICB8ICAxNiAtLS0NCj4gPiAgIC4uLi9Dc20vTGVnYWN5Qmlvc0R4ZS9MZWdhY3lCb290U3VwcG9y dC5jICAgICAgICAgIHwgIDgwICsrKysrKy0tLS0tLQ0KPiA+ICAgLi4uL0NzbS9MZWdhY3lCaW9z RHhlL0xlZ2FjeVBjaS5jICAgICAgICAgICAgICAgICAgfCAgNzIgKysrKysrLS0tLS0NCj4gPiAg IEludGVsRnJhbWV3b3JrTW9kdWxlUGtnL0NzbS9MZWdhY3lCaW9zRHhlL1RodW5rLmMgIHwgIDUx ICsrKystLS0tDQo+ID4gICA3IGZpbGVzIGNoYW5nZWQsIDEzNSBpbnNlcnRpb25zKCspLCAyNzMg ZGVsZXRpb25zKC0pDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvSW50ZWxGcmFtZXdvcmtNb2R1bGVQ a2cvQ3NtL0xlZ2FjeUJpb3NEeGUvTGVnYWN5QmRhLmMNCj4gYi9JbnRlbEZyYW1ld29ya01vZHVs ZVBrZy9Dc20vTGVnYWN5Qmlvc0R4ZS9MZWdhY3lCZGEuYw0KPiA+IGluZGV4IGM2NjcwZmViZWUu Ljk2NjdkYzJhMGYgMTAwNjQ0DQo+ID4gLS0tIGEvSW50ZWxGcmFtZXdvcmtNb2R1bGVQa2cvQ3Nt L0xlZ2FjeUJpb3NEeGUvTGVnYWN5QmRhLmMNCj4gPiArKysgYi9JbnRlbEZyYW1ld29ya01vZHVs ZVBrZy9Dc20vTGVnYWN5Qmlvc0R4ZS9MZWdhY3lCZGEuYw0KPiA+IEBAIC0zNCwzNyArMzQsMzYg QEAgTGVnYWN5Qmlvc0luaXRCZGEgKA0KPiA+ICAgICBCREFfU1RSVUMgKkJkYTsNCj4gPiAgICAg VUlOVDggICAgICpFYmRhOw0KPiA+DQo+ID4gLSAgRGlzYWJsZU51bGxEZXRlY3Rpb24gKCk7DQo+ ID4gLQ0KPiA+ICAgICBCZGEgICA9IChCREFfU1RSVUMgKikgKChVSU5UTikgMHg0MDApOw0KPiA+ ICAgICBFYmRhICA9IChVSU5UOCAqKSAoKFVJTlROKSAweDlmYzAwKTsNCj4gPg0KPiA+IC0gIFpl cm9NZW0gKEJkYSwgMHgxMDApOw0KPiA+ICsgIEFDQ0VTU19QQUdFMF9DT0RFICh7DQo+ID4gKyAg ICBaZXJvTWVtIChCZGEsIDB4MTAwKTsNCj4gPiArICAgIC8vDQo+ID4gKyAgICAvLyA2NDBrLTFr IGZvciBFQkRBDQo+ID4gKyAgICAvLw0KPiA+ICsgICAgQmRhLT5NZW1TaXplICAgICAgICA9IDB4 MjdmOw0KPiA+ICsgICAgQmRhLT5LZXlIZWFkICAgICAgICA9IDB4MWU7DQo+ID4gKyAgICBCZGEt PktleVRhaWwgICAgICAgID0gMHgxZTsNCj4gPiArICAgIEJkYS0+RmxvcHB5RGF0YSAgICAgPSAw eDAwOw0KPiA+ICsgICAgQmRhLT5GbG9wcHlUaW1lb3V0ICA9IDB4ZmY7DQo+ID4gKw0KPiA+ICsg ICAgQmRhLT5LZXlTdGFydCAgICAgICA9IDB4MDAxRTsNCj4gPiArICAgIEJkYS0+S2V5RW5kICAg ICAgICAgPSAweDAwM0U7DQo+ID4gKyAgICBCZGEtPktleWJvYXJkU3RhdHVzID0gMHgxMDsNCj4g PiArICAgIEJkYS0+RWJkYSAgICAgICAgICAgPSAweDlmYzA7DQo+ID4gKw0KPiA+ICsgICAgLy8N Cj4gPiArICAgIC8vIE1vdmUgTFBUIHRpbWUgb3V0IGhlcmUgYW5kIHplcm8gb3V0IExQVDQgc2lu Y2Ugc29tZSBTQ1NJIE9QUk9NUw0KPiA+ICsgICAgLy8gdXNlIHRoaXMgYXMgc2NyYXRjaCBwYWQg KExQVDQgaXMgUmVzZXJ2ZWQpDQo+ID4gKyAgICAvLw0KPiA+ICsgICAgQmRhLT5McHQxXzJUaW1l b3V0ICA9IDB4MTQxNDsNCj4gPiArICAgIEJkYS0+THB0M180VGltZW91dCAgPSAweDE0MDA7DQo+ ID4gKw0KPiA+ICsgIH0pOw0KPiA+ICsNCj4gPiAgICAgWmVyb01lbSAoRWJkYSwgMHg0MDApOw0K PiA+IC0gIC8vDQo+ID4gLSAgLy8gNjQway0xayBmb3IgRUJEQQ0KPiA+IC0gIC8vDQo+ID4gLSAg QmRhLT5NZW1TaXplICAgICAgICA9IDB4MjdmOw0KPiA+IC0gIEJkYS0+S2V5SGVhZCAgICAgICAg PSAweDFlOw0KPiA+IC0gIEJkYS0+S2V5VGFpbCAgICAgICAgPSAweDFlOw0KPiA+IC0gIEJkYS0+ RmxvcHB5RGF0YSAgICAgPSAweDAwOw0KPiA+IC0gIEJkYS0+RmxvcHB5VGltZW91dCAgPSAweGZm Ow0KPiA+IC0NCj4gPiAtICBCZGEtPktleVN0YXJ0ICAgICAgID0gMHgwMDFFOw0KPiA+IC0gIEJk YS0+S2V5RW5kICAgICAgICAgPSAweDAwM0U7DQo+ID4gLSAgQmRhLT5LZXlib2FyZFN0YXR1cyA9 IDB4MTA7DQo+ID4gLSAgQmRhLT5FYmRhICAgICAgICAgICA9IDB4OWZjMDsNCj4gPiAtDQo+ID4g LSAgLy8NCj4gPiAtICAvLyBNb3ZlIExQVCB0aW1lIG91dCBoZXJlIGFuZCB6ZXJvIG91dCBMUFQ0 IHNpbmNlIHNvbWUgU0NTSSBPUFJPTVMNCj4gPiAtICAvLyB1c2UgdGhpcyBhcyBzY3JhdGNoIHBh ZCAoTFBUNCBpcyBSZXNlcnZlZCkNCj4gPiAtICAvLw0KPiA+IC0gIEJkYS0+THB0MV8yVGltZW91 dCAgPSAweDE0MTQ7DQo+ID4gLSAgQmRhLT5McHQzXzRUaW1lb3V0ICA9IDB4MTQwMDsNCj4gPiAt DQo+ID4gLSAgKkViZGEgICAgICAgICAgICAgICA9IDB4MDE7DQo+ID4gLQ0KPiA+IC0gIEVuYWJs ZU51bGxEZXRlY3Rpb24gKCk7DQo+ID4gKyAgKkViZGEgPSAweDAxOw0KPiA+DQo+ID4gICAgIHJl dHVybiBFRklfU1VDQ0VTUzsNCj4gPiAgIH0NCj4gPiBkaWZmIC0tZ2l0IGEvSW50ZWxGcmFtZXdv cmtNb2R1bGVQa2cvQ3NtL0xlZ2FjeUJpb3NEeGUvTGVnYWN5Qmlvcy5jDQo+IGIvSW50ZWxGcmFt ZXdvcmtNb2R1bGVQa2cvQ3NtL0xlZ2FjeUJpb3NEeGUvTGVnYWN5Qmlvcy5jDQo+ID4gaW5kZXgg YzY0NjFmNTU0Ny4uZDUwYzE1ZWFjYiAxMDA2NDQNCj4gPiAtLS0gYS9JbnRlbEZyYW1ld29ya01v ZHVsZVBrZy9Dc20vTGVnYWN5Qmlvc0R4ZS9MZWdhY3lCaW9zLmMNCj4gPiArKysgYi9JbnRlbEZy YW1ld29ya01vZHVsZVBrZy9Dc20vTGVnYWN5Qmlvc0R4ZS9MZWdhY3lCaW9zLmMNCj4gPiBAQCAt Nzg2LDExNSArNzg2LDYgQEAgVG9nZ2xlRW5kT2ZEeGVTdGF0dXMgKA0KPiA+ICAgICByZXR1cm47 DQo+ID4gICB9DQo+ID4NCj4gPiAtLy8NCj4gPiAtLy8gTGVnYWN5IEJJT1MgbmVlZHMgdG8gYWNj ZXNzIG1lbW9yeSBiZXR3ZWVuIDAtNDA5NSwgd2hpY2ggd2lsbCBjYXVzZQ0KPiBwYWdlDQo+ID4g LS8vIGZhdWx0IGV4Y2VwdGlvbiBpZiBOVUxMIHBvaW50ZXIgZGV0ZWN0aW9uIG1lY2hhbmlzbSBp cyBlbmFibGVkLiBGb2xsb3dpbmcNCj4gPiAtLy8gZnVuY3Rpb25zIGNhbiBiZSB1c2VkIHRvIGRp c2FibGUvZW5hYmxlIE5VTEwgcG9pbnRlciBkZXRlY3Rpb24NCj4gYmVmb3JlL2FmdGVyDQo+ID4g LS8vIGFjY2Vzc2luZyB0aG9zZSBtZW1vcnkuDQo+ID4gLS8vDQo+ID4gLQ0KPiA+IC0vKioNCj4g PiAtICAgRW5hYmxlIE5VTEwgcG9pbnRlciBkZXRlY3Rpb24uDQo+ID4gLSoqLw0KPiA+IC1WT0lE DQo+ID4gLUVuYWJsZU51bGxEZXRlY3Rpb24gKA0KPiA+IC0gIFZPSUQNCj4gPiAtICApDQo+ID4g LXsNCj4gPiAtICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsN Cj4gPiAtICBFRklfR0NEX01FTU9SWV9TUEFDRV9ERVNDUklQVE9SICAgICAgIERlc2M7DQo+ID4g LQ0KPiA+IC0gIGlmICgoKFBjZEdldDggKFBjZE51bGxQb2ludGVyRGV0ZWN0aW9uUHJvcGVydHlN YXNrKSAmIEJJVDApID09IDApDQo+ID4gLSAgICAgIHx8DQo+ID4gLSAgICAgICgobUVuZE9mRHhl KSAgJiYNCj4gPiAtICAgICAgICgoUGNkR2V0OCAoUGNkTnVsbFBvaW50ZXJEZXRlY3Rpb25Qcm9w ZXJ0eU1hc2spICYgKEJJVDd8QklUMCkpDQo+ID4gLSAgICAgICAgPT0gKEJJVDd8QklUMCkpKQ0K PiA+IC0gICAgICkgew0KPiA+IC0gICAgcmV0dXJuOw0KPiA+IC0gIH0NCj4gPiAtDQo+ID4gLSAg Ly8NCj4gPiAtICAvLyBDaGVjayBjdXJyZW50IGNhcGFiaWxpdGllcyBhbmQgYXR0cmlidXRlcw0K PiA+IC0gIC8vDQo+ID4gLSAgU3RhdHVzID0gZ0RTLT5HZXRNZW1vcnlTcGFjZURlc2NyaXB0b3Ig KDAsICZEZXNjKTsNCj4gPiAtICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+IC0NCj4g PiAtICAvLw0KPiA+IC0gIC8vIFRyeSB0byBhZGQgRUZJX01FTU9SWV9SUCBzdXBwb3J0IGlmIG5l Y2Vzc2FyeQ0KPiA+IC0gIC8vDQo+ID4gLSAgaWYgKChEZXNjLkNhcGFiaWxpdGllcyAmIEVGSV9N RU1PUllfUlApID09IDApIHsNCj4gPiAtICAgIERlc2MuQ2FwYWJpbGl0aWVzIHw9IEVGSV9NRU1P UllfUlA7DQo+ID4gLSAgICBTdGF0dXMgPSBnRFMtPlNldE1lbW9yeVNwYWNlQ2FwYWJpbGl0aWVz ICgwLCBFRklfUEFHRVNfVE9fU0laRSgxKSwNCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIERlc2MuQ2FwYWJpbGl0aWVzKTsNCj4gPiAtICAgIEFTU0VS VF9FRklfRVJST1IgKFN0YXR1cyk7DQo+ID4gLSAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+ID4gLSAgICAgIHJldHVybjsNCj4gPiAtICAgIH0NCj4gPiAtICB9DQo+ID4gLQ0KPiA+IC0g IC8vDQo+ID4gLSAgLy8gRG9uJ3QgYm90aGVyIGlmIEVGSV9NRU1PUllfUlAgaXMgYWxyZWFkeSBz ZXQuDQo+ID4gLSAgLy8NCj4gPiAtICBpZiAoKERlc2MuQXR0cmlidXRlcyAmIEVGSV9NRU1PUllf UlApID09IDApIHsNCj4gPiAtICAgIERlc2MuQXR0cmlidXRlcyB8PSBFRklfTUVNT1JZX1JQOw0K PiA+IC0gICAgU3RhdHVzID0gZ0RTLT5TZXRNZW1vcnlTcGFjZUF0dHJpYnV0ZXMgKDAsIEVGSV9Q QUdFU19UT19TSVpFKDEpLA0KPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIERlc2MuQXR0cmlidXRlcyk7DQo+ID4gLSAgICBBU1NFUlRfRUZJX0VSUk9SIChT dGF0dXMpOw0KPiA+IC0gIH0NCj4gPiAtfQ0KPiA+IC0NCj4gPiAtLyoqDQo+ID4gLSAgIERpc2Fi bGUgTlVMTCBwb2ludGVyIGRldGVjdGlvbi4NCj4gPiAtKiovDQo+ID4gLVZPSUQNCj4gPiAtRGlz YWJsZU51bGxEZXRlY3Rpb24gKA0KPiA+IC0gIFZPSUQNCj4gPiAtICApDQo+ID4gLXsNCj4gPiAt ICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gPiAtICBF RklfR0NEX01FTU9SWV9TUEFDRV9ERVNDUklQVE9SICAgICAgIERlc2M7DQo+ID4gLQ0KPiA+IC0g IGlmICgoKFBjZEdldDggKFBjZE51bGxQb2ludGVyRGV0ZWN0aW9uUHJvcGVydHlNYXNrKSAmIEJJ VDApID09IDApDQo+ID4gLSAgICAgIHx8DQo+ID4gLSAgICAgICgobUVuZE9mRHhlKSAgJiYNCj4g PiAtICAgICAgICgoUGNkR2V0OCAoUGNkTnVsbFBvaW50ZXJEZXRlY3Rpb25Qcm9wZXJ0eU1hc2sp ICYgKEJJVDd8QklUMCkpDQo+ID4gLSAgICAgICAgPT0gKEJJVDd8QklUMCkpKQ0KPiA+IC0gICAg ICkgew0KPiA+IC0gICAgcmV0dXJuOw0KPiA+IC0gIH0NCj4gPiAtDQo+ID4gLSAgLy8NCj4gPiAt ICAvLyBDaGVjayBjdXJyZW50IGNhcGFiaWxpdGllcyBhbmQgYXR0cmlidXRlcw0KPiA+IC0gIC8v DQo+ID4gLSAgU3RhdHVzID0gZ0RTLT5HZXRNZW1vcnlTcGFjZURlc2NyaXB0b3IgKDAsICZEZXNj KTsNCj4gPiAtICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+IC0NCj4gPiAtICAvLw0K PiA+IC0gIC8vIFRyeSB0byBhZGQgRUZJX01FTU9SWV9SUCBzdXBwb3J0IGlmIG5lY2Vzc2FyeQ0K PiA+IC0gIC8vDQo+ID4gLSAgaWYgKChEZXNjLkNhcGFiaWxpdGllcyAmIEVGSV9NRU1PUllfUlAp ID09IDApIHsNCj4gPiAtICAgIERlc2MuQ2FwYWJpbGl0aWVzIHw9IEVGSV9NRU1PUllfUlA7DQo+ ID4gLSAgICBTdGF0dXMgPSBnRFMtPlNldE1lbW9yeVNwYWNlQ2FwYWJpbGl0aWVzICgwLCBFRklf UEFHRVNfVE9fU0laRSgxKSwNCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIERlc2MuQ2FwYWJpbGl0aWVzKTsNCj4gPiAtICAgIEFTU0VSVF9FRklfRVJS T1IgKFN0YXR1cyk7DQo+ID4gLSAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gLSAg ICAgIHJldHVybjsNCj4gPiAtICAgIH0NCj4gPiAtICB9DQo+ID4gLQ0KPiA+IC0gIC8vDQo+ID4g LSAgLy8gRG9uJ3QgYm90aGVyIGlmIEVGSV9NRU1PUllfUlAgaXMgYWxyZWFkeSBjbGVhcmVkLg0K PiA+IC0gIC8vDQo+ID4gLSAgaWYgKChEZXNjLkF0dHJpYnV0ZXMgJiBFRklfTUVNT1JZX1JQKSAh PSAwKSB7DQo+ID4gLSAgICBEZXNjLkF0dHJpYnV0ZXMgJj0gfkVGSV9NRU1PUllfUlA7DQo+ID4g LSAgICBTdGF0dXMgPSBnRFMtPlNldE1lbW9yeVNwYWNlQXR0cmlidXRlcyAoMCwgRUZJX1BBR0VT X1RPX1NJWkUoMSksDQo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRGVzYy5BdHRyaWJ1dGVzKTsNCj4gPiAtICAgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1 cyk7DQo+ID4gLSAgfSBlbHNlIHsNCj4gPiAtICAgIERFQlVHICgoREVCVUdfV0FSTiwgIiEhISBQ YWdlIDAgaXMgc3VwcG9zZWQgdG8gYmUgZGlzYWJsZWQgISEhXHJcbiIpKTsNCj4gPiAtICB9DQo+ ID4gLX0NCj4gPiAtDQo+ID4gICAvKioNCj4gPiAgICAgSW5zdGFsbCBEcml2ZXIgdG8gcHJvZHVj ZSBMZWdhY3kgQklPUyBwcm90b2NvbC4NCj4gPg0KPiA+IEBAIC0xMDk1LDEwICs5ODYsMTAgQEAg TGVnYWN5Qmlvc0luc3RhbGwgKA0KPiA+ICAgICAvLyBJbml0aWFsaXplIHJlZ2lvbiBmcm9tIDB4 MDAwMCB0byA0ay4gVGhpcyBpbml0aWFsaXplcyBpbnRlcnJ1cHQgdmVjdG9yDQo+ID4gICAgIC8v IHJhbmdlLg0KPiA+ICAgICAvLw0KPiA+IC0gIERpc2FibGVOdWxsRGV0ZWN0aW9uICgpOw0KPiA+ IC0gIGdCUy0+U2V0TWVtICgoVk9JRCAqKSBDbGVhclB0ciwgMHg0MDAsIElOSVRJQUxfVkFMVUVf QkVMT1dfMUspOw0KPiA+IC0gIFplcm9NZW0gKChWT0lEICopICgoVUlOVE4pQ2xlYXJQdHIgKyAw eDQwMCksIDB4QzAwKTsNCj4gPiAtICBFbmFibGVOdWxsRGV0ZWN0aW9uICgpOw0KPiA+ICsgIEFD Q0VTU19QQUdFMF9DT0RFICh7DQo+ID4gKyAgICBnQlMtPlNldE1lbSAoKFZPSUQgKikgQ2xlYXJQ dHIsIDB4NDAwLCBJTklUSUFMX1ZBTFVFX0JFTE9XXzFLKTsNCj4gPiArICAgIFplcm9NZW0gKChW T0lEICopICgoVUlOVE4pQ2xlYXJQdHIgKyAweDQwMCksIDB4QzAwKTsNCj4gPiArICB9KTsNCj4g Pg0KPiA+ICAgICAvLw0KPiA+ICAgICAvLyBBbGxvY2F0ZSBwYWdlcyBmb3IgT1BST00gdXNhZ2UN Cj4gPiBAQCAtMTIzNywxNiArMTEyOCwxNCBAQCBMZWdhY3lCaW9zSW5zdGFsbCAoDQo+ID4gICAg IC8vDQo+ID4gICAgIC8vIFNhdmUgVW5leHBlY3RlZCBpbnRlcnJ1cHQgdmVjdG9yIHNvIGNhbiBy ZXN0b3JlIGl0IGp1c3QgcHJpb3IgdG8gYm9vdA0KPiA+ICAgICAvLw0KPiA+IC0gIERpc2FibGVO dWxsRGV0ZWN0aW9uICgpOw0KPiA+IC0NCj4gPiAtICBCYXNlVmVjdG9yTWFzdGVyID0gKFVJTlQz MiAqKSAoc2l6ZW9mIChVSU5UMzIpICoNCj4gUFJPVEVDVEVEX01PREVfQkFTRV9WRUNUT1JfTUFT VEVSKTsNCj4gPiAtICBQcml2YXRlLT5CaW9zVW5leHBlY3RlZEludCA9IEJhc2VWZWN0b3JNYXN0 ZXJbMF07DQo+ID4gLSAgSW50UmVkaXJDb2RlID0gKFVJTlQzMikgKFVJTlROKSBQcml2YXRlLT5J bnRUaHVuay0NCj4gPkludGVycnVwdFJlZGlyZWN0aW9uQ29kZTsNCj4gPiAtICBmb3IgKEluZGV4 ID0gMDsgSW5kZXggPCA4OyBJbmRleCsrKSB7DQo+ID4gLSAgICBCYXNlVmVjdG9yTWFzdGVyW0lu ZGV4XSA9IChFRklfU0VHTUVOVCAoSW50UmVkaXJDb2RlICsgSW5kZXggKiA0KSA8PCAxNikNCj4g fCBFRklfT0ZGU0VUIChJbnRSZWRpckNvZGUgKyBJbmRleCAqIDQpOw0KPiA+IC0gIH0NCj4gPiAt DQo+ID4gLSAgRW5hYmxlTnVsbERldGVjdGlvbiAoKTsNCj4gPiArICBBQ0NFU1NfUEFHRTBfQ09E RSAoew0KPiA+ICsgICAgQmFzZVZlY3Rvck1hc3RlciA9IChVSU5UMzIgKikgKHNpemVvZiAoVUlO VDMyKSAqDQo+IFBST1RFQ1RFRF9NT0RFX0JBU0VfVkVDVE9SX01BU1RFUik7DQo+ID4gKyAgICBQ cml2YXRlLT5CaW9zVW5leHBlY3RlZEludCA9IEJhc2VWZWN0b3JNYXN0ZXJbMF07DQo+ID4gKyAg ICBJbnRSZWRpckNvZGUgPSAoVUlOVDMyKSAoVUlOVE4pIFByaXZhdGUtPkludFRodW5rLQ0KPiA+ SW50ZXJydXB0UmVkaXJlY3Rpb25Db2RlOw0KPiA+ICsgICAgZm9yIChJbmRleCA9IDA7IEluZGV4 IDwgODsgSW5kZXgrKykgew0KPiA+ICsgICAgICBCYXNlVmVjdG9yTWFzdGVyW0luZGV4XSA9IChF RklfU0VHTUVOVCAoSW50UmVkaXJDb2RlICsgSW5kZXggKiA0KSA8PA0KPiAxNikgfCBFRklfT0ZG U0VUIChJbnRSZWRpckNvZGUgKyBJbmRleCAqIDQpOw0KPiA+ICsgICAgfQ0KPiA+ICsgIH0pOw0K PiA+DQo+ID4gICAgIC8vDQo+ID4gICAgIC8vIFNhdmUgRUZJIHZhbHVlDQo+ID4gZGlmZiAtLWdp dCBhL0ludGVsRnJhbWV3b3JrTW9kdWxlUGtnL0NzbS9MZWdhY3lCaW9zRHhlL0xlZ2FjeUJpb3NE eGUuaW5mDQo+IGIvSW50ZWxGcmFtZXdvcmtNb2R1bGVQa2cvQ3NtL0xlZ2FjeUJpb3NEeGUvTGVn YWN5Qmlvc0R4ZS5pbmYNCj4gPiBpbmRleCA2ZWZjN2YzNmFlLi4xODBjMThlM2ZjIDEwMDY0NA0K PiA+IC0tLSBhL0ludGVsRnJhbWV3b3JrTW9kdWxlUGtnL0NzbS9MZWdhY3lCaW9zRHhlL0xlZ2Fj eUJpb3NEeGUuaW5mDQo+ID4gKysrIGIvSW50ZWxGcmFtZXdvcmtNb2R1bGVQa2cvQ3NtL0xlZ2Fj eUJpb3NEeGUvTGVnYWN5Qmlvc0R4ZS5pbmYNCj4gPiBAQCAtMTQ4LDcgKzE0OCw2IEBADQo+ID4g ICAgIGdFZmlJbnRlbEZyYW1ld29ya01vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZEhpZ2hQbW1N ZW1vcnlTaXplDQo+ICMjIENPTlNVTUVTDQo+ID4NCj4gZ0VmaUludGVsRnJhbWV3b3JrTW9kdWxl UGtnVG9rZW5TcGFjZUd1aWQuUGNkT3Byb21SZXNlcnZlZE1lbW9yeUJhcw0KPiBlICAgICAgIyMg Q09OU1VNRVMNCj4gPg0KPiBnRWZpSW50ZWxGcmFtZXdvcmtNb2R1bGVQa2dUb2tlblNwYWNlR3Vp ZC5QY2RPcHJvbVJlc2VydmVkTWVtb3J5U2l6ZQ0KPiAjIyBDT05TVU1FUw0KPiA+IC0gIGdFZmlN ZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2ROdWxsUG9pbnRlckRldGVjdGlvblByb3BlcnR5 TWFzaw0KPiAjIyBDT05TVU1FUw0KPiA+DQo+ID4gICBbRGVwZXhdDQo+ID4gICAgIGdFZmlMZWdh Y3lSZWdpb24yUHJvdG9jb2xHdWlkIEFORCBnRWZpTGVnYWN5SW50ZXJydXB0UHJvdG9jb2xHdWlk IEFORA0KPiBnRWZpTGVnYWN5Qmlvc1BsYXRmb3JtUHJvdG9jb2xHdWlkIEFORCBnRWZpTGVnYWN5 ODI1OVByb3RvY29sR3VpZCBBTkQNCj4gZ0VmaUdlbmVyaWNNZW1UZXN0UHJvdG9jb2xHdWlkIEFO RCBnRWZpQ3B1QXJjaFByb3RvY29sR3VpZCBBTkQNCj4gZ0VmaVRpbWVyQXJjaFByb3RvY29sR3Vp ZCBBTkQgZ0VmaVZhcmlhYmxlV3JpdGVBcmNoUHJvdG9jb2xHdWlkDQo+ID4gZGlmZiAtLWdpdA0K PiBhL0ludGVsRnJhbWV3b3JrTW9kdWxlUGtnL0NzbS9MZWdhY3lCaW9zRHhlL0xlZ2FjeUJpb3NJ bnRlcmZhY2UuaA0KPiBiL0ludGVsRnJhbWV3b3JrTW9kdWxlUGtnL0NzbS9MZWdhY3lCaW9zRHhl L0xlZ2FjeUJpb3NJbnRlcmZhY2UuaA0KPiA+IGluZGV4IDg2YTNiMDkwODAuLmNjMmZjOWZjMTMg MTAwNjQ0DQo+ID4gLS0tIGEvSW50ZWxGcmFtZXdvcmtNb2R1bGVQa2cvQ3NtL0xlZ2FjeUJpb3NE eGUvTGVnYWN5Qmlvc0ludGVyZmFjZS5oDQo+ID4gKysrIGIvSW50ZWxGcmFtZXdvcmtNb2R1bGVQ a2cvQ3NtL0xlZ2FjeUJpb3NEeGUvTGVnYWN5Qmlvc0ludGVyZmFjZS5oDQo+ID4gQEAgLTE1NDQs MjAgKzE1NDQsNCBAQCBMZWdhY3lCaW9zSW5zdGFsbFZnYVJvbSAoDQo+ID4gICAgIElOICBMRUdB Q1lfQklPU19JTlNUQU5DRSAgICAgICAgICAgICpQcml2YXRlDQo+ID4gICAgICk7DQo+ID4NCj4g PiAtLyoqDQo+ID4gLSAgIEVuYWJsZSBOVUxMIHBvaW50ZXIgZGV0ZWN0aW9uLg0KPiA+IC0qKi8N Cj4gPiAtVk9JRA0KPiA+IC1FbmFibGVOdWxsRGV0ZWN0aW9uICgNCj4gPiAtICBWT0lEDQo+ID4g LSAgKTsNCj4gPiAtDQo+ID4gLS8qKg0KPiA+IC0gICBEaXNhYmxlIE5VTEwgcG9pbnRlciBkZXRl Y3Rpb24uDQo+ID4gLSoqLw0KPiA+IC1WT0lEDQo+ID4gLURpc2FibGVOdWxsRGV0ZWN0aW9uICgN Cj4gPiAtICBWT0lEDQo+ID4gLSAgKTsNCj4gPiAtDQo+ID4gICAjZW5kaWYNCj4gPiBkaWZmIC0t Z2l0DQo+IGEvSW50ZWxGcmFtZXdvcmtNb2R1bGVQa2cvQ3NtL0xlZ2FjeUJpb3NEeGUvTGVnYWN5 Qm9vdFN1cHBvcnQuYw0KPiBiL0ludGVsRnJhbWV3b3JrTW9kdWxlUGtnL0NzbS9MZWdhY3lCaW9z RHhlL0xlZ2FjeUJvb3RTdXBwb3J0LmMNCj4gPiBpbmRleCBjMmFjNjljZTY5Li5kNjVhNzUxZmU3 IDEwMDY0NA0KPiA+IC0tLSBhL0ludGVsRnJhbWV3b3JrTW9kdWxlUGtnL0NzbS9MZWdhY3lCaW9z RHhlL0xlZ2FjeUJvb3RTdXBwb3J0LmMNCj4gPiArKysgYi9JbnRlbEZyYW1ld29ya01vZHVsZVBr Zy9Dc20vTGVnYWN5Qmlvc0R4ZS9MZWdhY3lCb290U3VwcG9ydC5jDQo+ID4gQEAgLTEwNDEsNyAr MTA0MSw5IEBAIEdlbmVyaWNMZWdhY3lCb290ICgNCj4gPiAgICAgLy8NCj4gPiAgICAgLy8gU2V0 dXAgQkRBIGFuZCBFQkRBIHN0YW5kYXJkIGFyZWFzIGJlZm9yZSBMZWdhY3kgQm9vdA0KPiA+ICAg ICAvLw0KPiA+IC0gIExlZ2FjeUJpb3NDb21wbGV0ZUJkYUJlZm9yZUJvb3QgKFByaXZhdGUpOw0K PiA+ICsgIEFDQ0VTU19QQUdFMF9DT0RFICh7DQo+ID4gKyAgICBMZWdhY3lCaW9zQ29tcGxldGVC ZGFCZWZvcmVCb290IChQcml2YXRlKTsNCj4gPiArICB9KTsNCj4gPiAgICAgTGVnYWN5Qmlvc0Nv bXBsZXRlU3RhbmRhcmRDbW9zQmVmb3JlQm9vdCAoUHJpdmF0ZSk7DQo+ID4NCj4gPiAgICAgLy8N Cj4gPiBAQCAtMTA3MywxMCArMTA3NSwxMCBAQCBHZW5lcmljTGVnYWN5Qm9vdCAoDQo+ID4gICAg IC8vIFVzZSAxODIvMTAgdG8gYXZvaWQgZmxvYXRpbmcgcG9pbnQgbWF0aC4NCj4gPiAgICAgLy8N Cj4gPiAgICAgTG9jYWxUaW1lID0gKExvY2FsVGltZSAqIDE4MikgLyAxMDsNCj4gPiAtICBEaXNh YmxlTnVsbERldGVjdGlvbiAoKTsNCj4gPiAtICBCZGFQdHIgICAgPSAoVUlOVDMyICopIChVSU5U TikweDQ2QzsNCj4gPiAtICAqQmRhUHRyICAgPSBMb2NhbFRpbWU7DQo+ID4gLSAgRW5hYmxlTnVs bERldGVjdGlvbiAoKTsNCj4gPiArICBBQ0NFU1NfUEFHRTBfQ09ERSAoew0KPiA+ICsgICAgQmRh UHRyICAgID0gKFVJTlQzMiAqKSAoVUlOVE4pMHg0NkM7DQo+ID4gKyAgICAqQmRhUHRyICAgPSBM b2NhbFRpbWU7DQo+ID4gKyAgfSk7DQo+ID4NCj4gPiAgICAgLy8NCj4gPiAgICAgLy8gU2hhZG93 IFBDSSBST01zLiBXZSBtdXN0IGRvIHRoaXMgbmVhciB0aGUgZW5kIHNpbmNlIHRoaXMgd2lsbCBr aWNrDQo+ID4gQEAgLTEzMjIsMTUgKzEzMjQsMTUgQEAgR2VuZXJpY0xlZ2FjeUJvb3QgKA0KPiA+ ICAgICAgIC8vICAgICAgICAgIHNldCBvZiBUSUFOTyB2ZWN0b3JzKSBvciB0YWtlcyBpdCBvdmVy Lg0KPiA+ICAgICAgIC8vDQo+ID4gICAgICAgLy8NCj4gPiAtICAgIERpc2FibGVOdWxsRGV0ZWN0 aW9uICgpOw0KPiA+IC0gICAgQmFzZVZlY3Rvck1hc3RlciA9IChVSU5UMzIgKikgKHNpemVvZiAo VUlOVDMyKSAqDQo+IFBST1RFQ1RFRF9NT0RFX0JBU0VfVkVDVE9SX01BU1RFUik7DQo+ID4gLSAg ICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCA4OyBJbmRleCsrKSB7DQo+ID4gLSAgICAgIFByaXZh dGUtPlRodW5rU2F2ZWRJbnRbSW5kZXhdID0gQmFzZVZlY3Rvck1hc3RlcltJbmRleF07DQo+ID4g LSAgICAgIGlmIChQcml2YXRlLT5UaHVua1NlZyA9PSAoVUlOVDE2KSAoQmFzZVZlY3Rvck1hc3Rl cltJbmRleF0gPj4gMTYpKSB7DQo+ID4gLSAgICAgICAgQmFzZVZlY3Rvck1hc3RlcltJbmRleF0g PSAoVUlOVDMyKSAoUHJpdmF0ZS0+Qmlvc1VuZXhwZWN0ZWRJbnQpOw0KPiA+ICsgICAgQUNDRVNT X1BBR0UwX0NPREUgKHsNCj4gPiArICAgICAgQmFzZVZlY3Rvck1hc3RlciA9IChVSU5UMzIgKikg KHNpemVvZiAoVUlOVDMyKSAqDQo+IFBST1RFQ1RFRF9NT0RFX0JBU0VfVkVDVE9SX01BU1RFUik7 DQo+ID4gKyAgICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IDg7IEluZGV4KyspIHsNCj4gPiAr ICAgICAgICBQcml2YXRlLT5UaHVua1NhdmVkSW50W0luZGV4XSA9IEJhc2VWZWN0b3JNYXN0ZXJb SW5kZXhdOw0KPiA+ICsgICAgICAgIGlmIChQcml2YXRlLT5UaHVua1NlZyA9PSAoVUlOVDE2KSAo QmFzZVZlY3Rvck1hc3RlcltJbmRleF0gPj4gMTYpKSB7DQo+ID4gKyAgICAgICAgICBCYXNlVmVj dG9yTWFzdGVyW0luZGV4XSA9IChVSU5UMzIpIChQcml2YXRlLT5CaW9zVW5leHBlY3RlZEludCk7 DQo+ID4gKyAgICAgICAgfQ0KPiA+ICAgICAgICAgfQ0KPiA+IC0gICAgfQ0KPiA+IC0gICAgRW5h YmxlTnVsbERldGVjdGlvbiAoKTsNCj4gPiArICAgIH0pOw0KPiA+DQo+ID4gICAgICAgWmVyb01l bSAoJlJlZ3MsIHNpemVvZiAoRUZJX0lBMzJfUkVHSVNURVJfU0VUKSk7DQo+ID4gICAgICAgUmVn cy5YLkFYID0gTGVnYWN5MTZCb290Ow0KPiA+IEBAIC0xMzQ0LDEyICsxMzQ2LDEyIEBAIEdlbmVy aWNMZWdhY3lCb290ICgNCj4gPiAgICAgICAgIDANCj4gPiAgICAgICAgICk7DQo+ID4NCj4gPiAt ICAgIERpc2FibGVOdWxsRGV0ZWN0aW9uICgpOw0KPiA+IC0gICAgQmFzZVZlY3Rvck1hc3RlciA9 IChVSU5UMzIgKikgKHNpemVvZiAoVUlOVDMyKSAqDQo+IFBST1RFQ1RFRF9NT0RFX0JBU0VfVkVD VE9SX01BU1RFUik7DQo+ID4gLSAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCA4OyBJbmRleCsr KSB7DQo+ID4gLSAgICAgIEJhc2VWZWN0b3JNYXN0ZXJbSW5kZXhdID0gUHJpdmF0ZS0+VGh1bmtT YXZlZEludFtJbmRleF07DQo+ID4gLSAgICB9DQo+ID4gLSAgICBFbmFibGVOdWxsRGV0ZWN0aW9u ICgpOw0KPiA+ICsgICAgQUNDRVNTX1BBR0UwX0NPREUgKHsNCj4gPiArICAgICAgQmFzZVZlY3Rv ck1hc3RlciA9IChVSU5UMzIgKikgKHNpemVvZiAoVUlOVDMyKSAqDQo+IFBST1RFQ1RFRF9NT0RF X0JBU0VfVkVDVE9SX01BU1RFUik7DQo+ID4gKyAgICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8 IDg7IEluZGV4KyspIHsNCj4gPiArICAgICAgICBCYXNlVmVjdG9yTWFzdGVyW0luZGV4XSA9IFBy aXZhdGUtPlRodW5rU2F2ZWRJbnRbSW5kZXhdOw0KPiA+ICsgICAgICB9DQo+ID4gKyAgICB9KTsN Cj4gPiAgICAgfQ0KPiA+ICAgICBQcml2YXRlLT5MZWdhY3lCb290RW50ZXJlZCA9IFRSVUU7DQo+ ID4gICAgIGlmICgobUJvb3RNb2RlID09IEJPT1RfTEVHQUNZX09TKSB8fCAobUJvb3RNb2RlID09 DQo+IEJPT1RfVU5DT05WRU5USU9OQUxfREVWSUNFKSkgew0KPiA+IEBAIC0xNzM3LDExICsxNzM5 LDExIEBAIExlZ2FjeUJpb3NCdWlsZEU4MjAgKA0KPiA+ICAgICAvLw0KPiA+ICAgICAvLyBGaXJz dCBlbnRyeSBpcyAwIHRvICg2NDBrIC0gRUJEQSkNCj4gPiAgICAgLy8NCj4gPiAtICBEaXNhYmxl TnVsbERldGVjdGlvbiAoKTsNCj4gPiAtICBFODIwVGFibGVbMF0uQmFzZUFkZHIgID0gMDsNCj4g PiAtICBFODIwVGFibGVbMF0uTGVuZ3RoICAgID0gKFVJTlQ2NCkgKCgqKFVJTlQxNiAqKSAoVUlO VE4pMHg0MEUpIDw8IDQpOw0KPiA+IC0gIEU4MjBUYWJsZVswXS5UeXBlICAgICAgPSBFZmlBY3Bp QWRkcmVzc1JhbmdlTWVtb3J5Ow0KPiA+IC0gIEVuYWJsZU51bGxEZXRlY3Rpb24gKCk7DQo+ID4g KyAgQUNDRVNTX1BBR0UwX0NPREUgKHsNCj4gPiArICAgIEU4MjBUYWJsZVswXS5CYXNlQWRkciAg PSAwOw0KPiA+ICsgICAgRTgyMFRhYmxlWzBdLkxlbmd0aCAgICA9IChVSU5UNjQpICgoKihVSU5U MTYgKikgKFVJTlROKTB4NDBFKSA8PCA0KTsNCj4gPiArICAgIEU4MjBUYWJsZVswXS5UeXBlICAg ICAgPSBFZmlBY3BpQWRkcmVzc1JhbmdlTWVtb3J5Ow0KPiA+ICsgIH0pOw0KPiA+DQo+ID4gICAg IC8vDQo+ID4gICAgIC8vIFNlY29uZCBlbnRyeSBpcyAoNjQwayAtIEVCREEpIHRvIDY0MGsNCj4g PiBAQCAtMTk3NSw4ICsxOTc3LDYgQEAgTGVnYWN5Qmlvc0NvbXBsZXRlQmRhQmVmb3JlQm9vdCAo DQo+ID4gICAgIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICBNYWNoaW5lQ29uZmlnOw0KPiA+ ICAgICBERVZJQ0VfUFJPRFVDRVJfREFUQV9IRUFERVIgKlNpb1B0cjsNCj4gPg0KPiA+IC0gIERp c2FibGVOdWxsRGV0ZWN0aW9uICgpOw0KPiA+IC0NCj4gPiAgICAgQmRhICAgICAgICAgICA9IChC REFfU1RSVUMgKikgKChVSU5UTikgMHg0MDApOw0KPiA+ICAgICBNYWNoaW5lQ29uZmlnID0gMDsN Cj4gPg0KPiA+IEBAIC0yMDM1LDggKzIwMzUsNiBAQCBMZWdhY3lCaW9zQ29tcGxldGVCZGFCZWZv cmVCb290ICgNCj4gPiAgICAgTWFjaGluZUNvbmZpZyAgICAgICA9IChVSU5UMTYpIChNYWNoaW5l Q29uZmlnICsgMHgwMCArIDB4MDIgKyAoU2lvUHRyLQ0KPiA+TW91c2VQcmVzZW50ICogMHgwNCkp Ow0KPiA+ICAgICBCZGEtPk1hY2hpbmVDb25maWcgID0gTWFjaGluZUNvbmZpZzsNCj4gPg0KPiA+ IC0gIEVuYWJsZU51bGxEZXRlY3Rpb24gKCk7DQo+ID4gLQ0KPiA+ICAgICByZXR1cm4gRUZJX1NV Q0NFU1M7DQo+ID4gICB9DQo+ID4NCj4gPiBAQCAtMjA2MywxNyArMjA2MSwxNSBAQCBMZWdhY3lC aW9zVXBkYXRlS2V5Ym9hcmRMZWRTdGF0dXMgKA0KPiA+DQo+ID4gICAgIFByaXZhdGUgICAgICAg ICAgICAgPSBMRUdBQ1lfQklPU19JTlNUQU5DRV9GUk9NX1RISVMgKFRoaXMpOw0KPiA+DQo+ID4g LSAgRGlzYWJsZU51bGxEZXRlY3Rpb24gKCk7DQo+ID4gLQ0KPiA+IC0gIEJkYSAgICAgICAgICAg ICAgICAgPSAoQkRBX1NUUlVDICopICgoVUlOVE4pIDB4NDAwKTsNCj4gPiAtICBMb2NhbExlZHMg ICAgICAgICAgID0gTGVkczsNCj4gPiAtICBCZGEtPkxlZFN0YXR1cyAgICAgID0gKFVJTlQ4KSAo KEJkYS0+TGVkU3RhdHVzICZ+MHgwNykgfCBMb2NhbExlZHMpOw0KPiA+IC0gIExvY2FsTGVkcyAg ICAgICAgICAgPSAoVUlOVDgpIChMb2NhbExlZHMgPDwgNCk7DQo+ID4gLSAgQmRhLT5TaGlmdFN0 YXR1cyAgICA9IChVSU5UOCkgKChCZGEtPlNoaWZ0U3RhdHVzICZ+MHg3MCkgfCBMb2NhbExlZHMp Ow0KPiA+IC0gIExvY2FsTGVkcyAgICAgICAgICAgPSAoVUlOVDgpIChMZWRzICYgMHgyMCk7DQo+ ID4gLSAgQmRhLT5LZXlib2FyZFN0YXR1cyA9IChVSU5UOCkgKChCZGEtPktleWJvYXJkU3RhdHVz ICZ+MHgyMCkgfCBMb2NhbExlZHMpOw0KPiA+IC0NCj4gPiAtICBFbmFibGVOdWxsRGV0ZWN0aW9u ICgpOw0KPiA+ICsgIEFDQ0VTU19QQUdFMF9DT0RFICh7DQo+ID4gKyAgICBCZGEgICAgICAgICAg ICAgICAgID0gKEJEQV9TVFJVQyAqKSAoKFVJTlROKSAweDQwMCk7DQo+ID4gKyAgICBMb2NhbExl ZHMgICAgICAgICAgID0gTGVkczsNCj4gPiArICAgIEJkYS0+TGVkU3RhdHVzICAgICAgPSAoVUlO VDgpICgoQmRhLT5MZWRTdGF0dXMgJn4weDA3KSB8IExvY2FsTGVkcyk7DQo+ID4gKyAgICBMb2Nh bExlZHMgICAgICAgICAgID0gKFVJTlQ4KSAoTG9jYWxMZWRzIDw8IDQpOw0KPiA+ICsgICAgQmRh LT5TaGlmdFN0YXR1cyAgICA9IChVSU5UOCkgKChCZGEtPlNoaWZ0U3RhdHVzICZ+MHg3MCkgfCBM b2NhbExlZHMpOw0KPiA+ICsgICAgTG9jYWxMZWRzICAgICAgICAgICA9IChVSU5UOCkgKExlZHMg JiAweDIwKTsNCj4gPiArICAgIEJkYS0+S2V5Ym9hcmRTdGF0dXMgPSAoVUlOVDgpICgoQmRhLT5L ZXlib2FyZFN0YXR1cyAmfjB4MjApIHwNCj4gTG9jYWxMZWRzKTsNCj4gPiArICB9KTsNCj4gPg0K PiA+ICAgICAvLw0KPiA+ICAgICAvLyBDYWxsIGludG8gTGVnYWN5MTYgY29kZSB0byBhbGxvdyBp dCB0byBkbyBhbnkgcHJvY2Vzc2luZw0KPiA+IEBAIC0yMTE5LDkgKzIxMTUsOSBAQCBMZWdhY3lC aW9zQ29tcGxldGVTdGFuZGFyZENtb3NCZWZvcmVCb290ICgNCj4gPiAgICAgLy8gICAgICAgICAg ICB0byBsYXJnZSBjYXBhY2l0eSBkcml2ZXMNCj4gPiAgICAgLy8gQ01PUyAxNCA9IEJEQSA0MDox MCBwbHVzIGJpdCAzKGRpc3BsYXkgZW5hYmxlZCkNCj4gPiAgICAgLy8NCj4gPiAtICBEaXNhYmxl TnVsbERldGVjdGlvbiAoKTsNCj4gPiAtICBCZGEgPSAoVUlOVDgpKCooKFVJTlQ4ICopKChVSU5U TikweDQxMCkpIHwgQklUMyk7DQo+ID4gLSAgRW5hYmxlTnVsbERldGVjdGlvbiAoKTsNCj4gPiAr ICBBQ0NFU1NfUEFHRTBfQ09ERSAoew0KPiA+ICsgICAgQmRhID0gKFVJTlQ4KSgqKChVSU5UOCAq KSgoVUlOVE4pMHg0MTApKSB8IEJJVDMpOw0KPiA+ICsgIH0pOw0KPiA+DQo+ID4gICAgIC8vDQo+ ID4gICAgIC8vIEZvcmNlIGRpc3BsYXkgZW5hYmxlZA0KPiA+IGRpZmYgLS1naXQgYS9JbnRlbEZy YW1ld29ya01vZHVsZVBrZy9Dc20vTGVnYWN5Qmlvc0R4ZS9MZWdhY3lQY2kuYw0KPiBiL0ludGVs RnJhbWV3b3JrTW9kdWxlUGtnL0NzbS9MZWdhY3lCaW9zRHhlL0xlZ2FjeVBjaS5jDQo+ID4gaW5k ZXggZDM4Y2VmM2UzMy4uYzMxN2QyMTA1NSAxMDA2NDQNCj4gPiAtLS0gYS9JbnRlbEZyYW1ld29y a01vZHVsZVBrZy9Dc20vTGVnYWN5Qmlvc0R4ZS9MZWdhY3lQY2kuYw0KPiA+ICsrKyBiL0ludGVs RnJhbWV3b3JrTW9kdWxlUGtnL0NzbS9MZWdhY3lCaW9zRHhlL0xlZ2FjeVBjaS5jDQo+ID4gQEAg LTI0MDMsMzUgKzI0MDMsMzMgQEAgTGVnYWN5Qmlvc0luc3RhbGxSb20gKA0KPiA+ICAgICAvLyAy LiBCQlMgY29tcGxpYW50cyBkcml2ZXMgd2lsbCBub3QgY2hhbmdlIDQwOjc1IHVudGlsIGJvb3Qg dGltZS4NCj4gPiAgICAgLy8gMy4gT25ib2FyZCBJREUgY29udHJvbGxlcnMgd2lsbCBjaGFuZ2Ug NDA6NzUNCj4gPiAgICAgLy8NCj4gPiAtICBEaXNhYmxlTnVsbERldGVjdGlvbiAoKTsNCj4gPiAt DQo+ID4gLSAgTG9jYWxEaXNrU3RhcnQgPSAoVUlOVDgpICgoKihVSU5UOCAqKSAoKFVJTlROKSAw eDQ3NSkpICsgMHg4MCk7DQo+ID4gLSAgaWYgKChQcml2YXRlLT5EaXNrNDA3NSArIDB4ODApIDwg TG9jYWxEaXNrU3RhcnQpIHsNCj4gPiAtICAgIC8vDQo+ID4gLSAgICAvLyBVcGRhdGUgdGFibGUg c2luY2Ugb25ib2FyZCBJREUgZHJpdmVzIGZvdW5kDQo+ID4gLSAgICAvLw0KPiA+IC0gICAgUHJp dmF0ZS0+TGVnYWN5RWZpSGRkVGFibGVbUHJpdmF0ZS0+TGVnYWN5RWZpSGRkVGFibGVJbmRleF0u UGNpU2VnbWVudA0KPiA9IDB4ZmY7DQo+ID4gLSAgICBQcml2YXRlLT5MZWdhY3lFZmlIZGRUYWJs ZVtQcml2YXRlLT5MZWdhY3lFZmlIZGRUYWJsZUluZGV4XS5QY2lCdXMNCj4gPSAweGZmOw0KPiA+ IC0gICAgUHJpdmF0ZS0+TGVnYWN5RWZpSGRkVGFibGVbUHJpdmF0ZS0+TGVnYWN5RWZpSGRkVGFi bGVJbmRleF0uUGNpRGV2aWNlDQo+ID0gMHhmZjsNCj4gPiAtICAgIFByaXZhdGUtPkxlZ2FjeUVm aUhkZFRhYmxlW1ByaXZhdGUtPkxlZ2FjeUVmaUhkZFRhYmxlSW5kZXhdLlBjaUZ1bmN0aW9uDQo+ ID0gMHhmZjsNCj4gPiAtICAgIFByaXZhdGUtPkxlZ2FjeUVmaUhkZFRhYmxlW1ByaXZhdGUtDQo+ ID5MZWdhY3lFZmlIZGRUYWJsZUluZGV4XS5TdGFydERyaXZlTnVtYmVyICA9IChVSU5UOCkgKFBy aXZhdGUtPkRpc2s0MDc1ICsNCj4gMHg4MCk7DQo+ID4gLSAgICBQcml2YXRlLT5MZWdhY3lFZmlI ZGRUYWJsZVtQcml2YXRlLQ0KPiA+TGVnYWN5RWZpSGRkVGFibGVJbmRleF0uRW5kRHJpdmVOdW1i ZXIgICAgPSBMb2NhbERpc2tTdGFydDsNCj4gPiAtICAgIFByaXZhdGUtPkxlZ2FjeUVmaUhkZFRh YmxlSW5kZXggKys7DQo+ID4gLSAgICBQcml2YXRlLT5EaXNrNDA3NSA9IChVSU5UOCkgKExvY2Fs RGlza1N0YXJ0ICYgMHg3Zik7DQo+ID4gLSAgICBQcml2YXRlLT5EaXNrRW5kICA9IExvY2FsRGlz a1N0YXJ0Ow0KPiA+IC0gIH0NCj4gPiAtDQo+ID4gLSAgaWYgKFBjaUhhbmRsZSAhPSBtVmdhSGFu ZGxlKSB7DQo+ID4gKyAgQUNDRVNTX1BBR0UwX0NPREUgKHsNCj4gPiArICAgIExvY2FsRGlza1N0 YXJ0ID0gKFVJTlQ4KSAoKCooVUlOVDggKikgKChVSU5UTikgMHg0NzUpKSArIDB4ODApOw0KPiA+ ICsgICAgaWYgKChQcml2YXRlLT5EaXNrNDA3NSArIDB4ODApIDwgTG9jYWxEaXNrU3RhcnQpIHsN Cj4gPiArICAgICAgLy8NCj4gPiArICAgICAgLy8gVXBkYXRlIHRhYmxlIHNpbmNlIG9uYm9hcmQg SURFIGRyaXZlcyBmb3VuZA0KPiA+ICsgICAgICAvLw0KPiA+ICsgICAgICBQcml2YXRlLT5MZWdh Y3lFZmlIZGRUYWJsZVtQcml2YXRlLQ0KPiA+TGVnYWN5RWZpSGRkVGFibGVJbmRleF0uUGNpU2Vn bWVudCAgICAgICAgPSAweGZmOw0KPiA+ICsgICAgICBQcml2YXRlLT5MZWdhY3lFZmlIZGRUYWJs ZVtQcml2YXRlLT5MZWdhY3lFZmlIZGRUYWJsZUluZGV4XS5QY2lCdXMNCj4gPSAweGZmOw0KPiA+ ICsgICAgICBQcml2YXRlLT5MZWdhY3lFZmlIZGRUYWJsZVtQcml2YXRlLT5MZWdhY3lFZmlIZGRU YWJsZUluZGV4XS5QY2lEZXZpY2UNCj4gPSAweGZmOw0KPiA+ICsgICAgICBQcml2YXRlLT5MZWdh Y3lFZmlIZGRUYWJsZVtQcml2YXRlLQ0KPiA+TGVnYWN5RWZpSGRkVGFibGVJbmRleF0uUGNpRnVu Y3Rpb24gICAgICAgPSAweGZmOw0KPiA+ICsgICAgICBQcml2YXRlLT5MZWdhY3lFZmlIZGRUYWJs ZVtQcml2YXRlLQ0KPiA+TGVnYWN5RWZpSGRkVGFibGVJbmRleF0uU3RhcnREcml2ZU51bWJlciAg PSAoVUlOVDgpIChQcml2YXRlLT5EaXNrNDA3NSArDQo+IDB4ODApOw0KPiA+ICsgICAgICBQcml2 YXRlLT5MZWdhY3lFZmlIZGRUYWJsZVtQcml2YXRlLQ0KPiA+TGVnYWN5RWZpSGRkVGFibGVJbmRl eF0uRW5kRHJpdmVOdW1iZXIgICAgPSBMb2NhbERpc2tTdGFydDsNCj4gPiArICAgICAgUHJpdmF0 ZS0+TGVnYWN5RWZpSGRkVGFibGVJbmRleCArKzsNCj4gPiArICAgICAgUHJpdmF0ZS0+RGlzazQw NzUgPSAoVUlOVDgpIChMb2NhbERpc2tTdGFydCAmIDB4N2YpOw0KPiA+ICsgICAgICBQcml2YXRl LT5EaXNrRW5kICA9IExvY2FsRGlza1N0YXJ0Ow0KPiA+ICsgICAgfQ0KPiA+DQo+ID4gLSAgICBF bmFibGVQczJLZXlib2FyZCAoKTsNCj4gPiArICAgIGlmIChQY2lIYW5kbGUgIT0gbVZnYUhhbmRs ZSkgew0KPiA+DQo+ID4gLSAgICAvLw0KPiA+IC0gICAgLy8gU3RvcmUgY3VycmVudCBtb2RlIHNl dHRpbmdzIHNpbmNlIFByZXBhcmVUb1NjYW5Sb20gbWF5IGNoYW5nZSBtb2RlLg0KPiA+IC0gICAg Ly8NCj4gPiAtICAgIFZpZGVvTW9kZSA9ICooVUlOVDggKikgKChVSU5UTikgKDB4NDAwICsgQkRB X1ZJREVPX01PREUpKTsNCj4gPiAtICB9DQo+ID4gKyAgICAgIEVuYWJsZVBzMktleWJvYXJkICgp Ow0KPiA+DQo+ID4gLSAgRW5hYmxlTnVsbERldGVjdGlvbiAoKTsNCj4gPiArICAgICAgLy8NCj4g PiArICAgICAgLy8gU3RvcmUgY3VycmVudCBtb2RlIHNldHRpbmdzIHNpbmNlIFByZXBhcmVUb1Nj YW5Sb20gbWF5IGNoYW5nZQ0KPiBtb2RlLg0KPiA+ICsgICAgICAvLw0KPiA+ICsgICAgICBWaWRl b01vZGUgPSAqKFVJTlQ4ICopICgoVUlOVE4pICgweDQwMCArIEJEQV9WSURFT19NT0RFKSk7DQo+ ID4gKyAgICB9DQo+ID4gKyAgfSk7DQo+ID4NCj4gPiAgICAgLy8NCj4gPiAgICAgLy8gTm90aWZ5 IHRoZSBwbGF0Zm9ybSB0aGF0IHdlIGFyZSBhYm91dCB0byBzY2FuIHRoZSBST00NCj4gPiBAQCAt MjQ3MywxMSArMjQ3MSwxMSBAQCBMZWdhY3lCaW9zSW5zdGFsbFJvbSAoDQo+ID4gICAgIC8vIE11 bHRpcGx5IHJlc3VsdCBieSAxOC4yIGZvciBudW1iZXIgb2YgdGlja3Mgc2luY2UgbWlkbmlnaHQu DQo+ID4gICAgIC8vIFVzZSAxODIvMTAgdG8gYXZvaWQgZmxvYXRpbmcgcG9pbnQgbWF0aC4NCj4g PiAgICAgLy8NCj4gPiAtICBEaXNhYmxlTnVsbERldGVjdGlvbiAoKTsNCj4gPiAtICBMb2NhbFRp bWUgPSAoTG9jYWxUaW1lICogMTgyKSAvIDEwOw0KPiA+IC0gIEJkYVB0ciAgICA9IChVSU5UMzIg KikgKChVSU5UTikgMHg0NkMpOw0KPiA+IC0gICpCZGFQdHIgICA9IExvY2FsVGltZTsNCj4gPiAt ICBFbmFibGVOdWxsRGV0ZWN0aW9uICgpOw0KPiA+ICsgIEFDQ0VTU19QQUdFMF9DT0RFICh7DQo+ ID4gKyAgICBMb2NhbFRpbWUgPSAoTG9jYWxUaW1lICogMTgyKSAvIDEwOw0KPiA+ICsgICAgQmRh UHRyICAgID0gKFVJTlQzMiAqKSAoKFVJTlROKSAweDQ2Qyk7DQo+ID4gKyAgICAqQmRhUHRyICAg PSBMb2NhbFRpbWU7DQo+ID4gKyAgfSk7DQo+ID4NCj4gPiAgICAgLy8NCj4gPiAgICAgLy8gUGFz cyBpbiBoYW5kb2ZmIGRhdGENCj4gPiBAQCAtMjU3Myw5ICsyNTcxLDkgQEAgTGVnYWN5Qmlvc0lu c3RhbGxSb20gKA0KPiA+ICAgICAgIC8vDQo+ID4gICAgICAgLy8gU2V0IG1vZGUgc2V0dGluZ3Mg c2luY2UgUHJlcGFyZVRvU2NhblJvbSBtYXkgY2hhbmdlIG1vZGUNCj4gPiAgICAgICAvLw0KPiA+ IC0gICAgRGlzYWJsZU51bGxEZXRlY3Rpb24gKCk7DQo+ID4gLSAgICBPbGRWaWRlb01vZGUgPSAq KFVJTlQ4ICopICgoVUlOVE4pICgweDQwMCArIEJEQV9WSURFT19NT0RFKSk7DQo+ID4gLSAgICBF bmFibGVOdWxsRGV0ZWN0aW9uICgpOw0KPiA+ICsgICAgQUNDRVNTX1BBR0UwX0NPREUgKHsNCj4g PiArICAgICAgT2xkVmlkZW9Nb2RlID0gKihVSU5UOCAqKSAoKFVJTlROKSAoMHg0MDAgKyBCREFf VklERU9fTU9ERSkpOw0KPiA+ICsgICAgfSk7DQo+ID4NCj4gPiAgICAgICBpZiAoVmlkZW9Nb2Rl ICE9IE9sZFZpZGVvTW9kZSkgew0KPiA+ICAgICAgICAgLy8NCj4gPiBAQCAtMjYxNyw5ICsyNjE1 LDkgQEAgTGVnYWN5Qmlvc0luc3RhbGxSb20gKA0KPiA+ICAgICAgIH0NCj4gPiAgICAgfQ0KPiA+ DQo+ID4gLSAgRGlzYWJsZU51bGxEZXRlY3Rpb24gKCk7DQo+ID4gLSAgTG9jYWxEaXNrRW5kID0g KFVJTlQ4KSAoKCooVUlOVDggKikgKChVSU5UTikgMHg0NzUpKSArIDB4ODApOw0KPiA+IC0gIEVu YWJsZU51bGxEZXRlY3Rpb24gKCk7DQo+ID4gKyAgQUNDRVNTX1BBR0UwX0NPREUgKHsNCj4gPiAr ICAgIExvY2FsRGlza0VuZCA9IChVSU5UOCkgKCgqKFVJTlQ4ICopICgoVUlOVE4pIDB4NDc1KSkg KyAweDgwKTsNCj4gPiArICB9KTsNCj4gPg0KPiA+ICAgICAvLw0KPiA+ICAgICAvLyBBbGxvdyBw bGF0Zm9ybSB0byBwZXJmb3JtIGFueSByZXF1aXJlZCBhY3Rpb25zIGFmdGVyIHRoZQ0KPiA+IGRp ZmYgLS1naXQgYS9JbnRlbEZyYW1ld29ya01vZHVsZVBrZy9Dc20vTGVnYWN5Qmlvc0R4ZS9UaHVu ay5jDQo+IGIvSW50ZWxGcmFtZXdvcmtNb2R1bGVQa2cvQ3NtL0xlZ2FjeUJpb3NEeGUvVGh1bmsu Yw0KPiA+IGluZGV4IGQyNDk0NzljNTYuLmQ5NzVkOTRlNzAgMTAwNjQ0DQo+ID4gLS0tIGEvSW50 ZWxGcmFtZXdvcmtNb2R1bGVQa2cvQ3NtL0xlZ2FjeUJpb3NEeGUvVGh1bmsuYw0KPiA+ICsrKyBi L0ludGVsRnJhbWV3b3JrTW9kdWxlUGtnL0NzbS9MZWdhY3lCaW9zRHhlL1RodW5rLmMNCj4gPiBA QCAtNzMsMTAgKzczLDEwIEBAIExlZ2FjeUJpb3NJbnQ4NiAoDQo+ID4gICAgIC8vIFRoZSBiYXNl IGFkZHJlc3Mgb2YgbGVnYWN5IGludGVycnVwdCB2ZWN0b3IgdGFibGUgaXMgMC4NCj4gPiAgICAg Ly8gV2UgdXNlIHRoaXMgYmFzZSBhZGRyZXNzIHRvIGdldCB0aGUgbGVnYWN5IGludGVycnVwdCBo YW5kbGVyLg0KPiA+ICAgICAvLw0KPiA+IC0gIERpc2FibGVOdWxsRGV0ZWN0aW9uICgpOw0KPiA+ IC0gIFNlZ21lbnQgICAgICAgICAgICAgICA9IChVSU5UMTYpKCgoVUlOVDMyICopMClbQmlvc0lu dF0gPj4gMTYpOw0KPiA+IC0gIE9mZnNldCAgICAgICAgICAgICAgICA9IChVSU5UMTYpKChVSU5U MzIgKikwKVtCaW9zSW50XTsNCj4gPiAtICBFbmFibGVOdWxsRGV0ZWN0aW9uICgpOw0KPiA+ICsg IEFDQ0VTU19QQUdFMF9DT0RFICh7DQo+IA0KPiB7fSBpcyBub3QgbmVlZGVkLCByaWdodD8NCj4g DQo+ID4gKyAgICBTZWdtZW50ICAgICAgICAgICAgICAgPSAoVUlOVDE2KSgoKFVJTlQzMiAqKTAp W0Jpb3NJbnRdID4+IDE2KTsNCj4gPiArICAgIE9mZnNldCAgICAgICAgICAgICAgICA9IChVSU5U MTYpKChVSU5UMzIgKikwKVtCaW9zSW50XTsNCj4gPiArICB9KTsNCj4gPg0KPiA+ICAgICByZXR1 cm4gSW50ZXJuYWxMZWdhY3lCaW9zRmFyQ2FsbCAoDQo+ID4gICAgICAgICAgICAgIFRoaXMsDQo+ ID4gQEAgLTI4NiwyOSArMjg2LDYgQEAgSW50ZXJuYWxMZWdhY3lCaW9zRmFyQ2FsbCAoDQo+ID4N Cj4gPiAgICAgQXNtVGh1bmsxNiAoJm1UaHVua0NvbnRleHQpOw0KPiA+DQo+ID4gLSAgLy8NCj4g PiAtICAvLyBPUFJPTSBtYXkgYWxsb2NhdGUgRUJEQSByYW5nZSBieSBpdHNlbGYgYW5kIGNoYW5n ZSBFQkRBIGJhc2UgYW5kDQo+IEVCREEgc2l6ZS4NCj4gPiAtICAvLyBHZXQgdGhlIGN1cnJlbnQg RUJEQSBiYXNlIGFkZHJlc3MsIGFuZCBjb21wYXJlZCB3aXRoIHByZS1hbGxvY2F0ZQ0KPiBtaW5p bXVtDQo+ID4gLSAgLy8gRUJEQSBiYXNlIGFkZHJlc3MsIGlmIHRoZSBjdXJyZW50IEVCREEgYmFz ZSBhZGRyZXNzIGlzIHNtYWxsZXIsIGl0DQo+IGluZGljYXRlcw0KPiA+IC0gIC8vIFBjZEViZGFS ZXNlcnZlZE1lbW9yeVNpemUgc2hvdWxkIGJlIGFkanVzdGVkIHRvIGxhcmdlciBmb3IgbW9yZQ0K PiBPUFJPTXMuDQo+ID4gLSAgLy8NCj4gPiAtICBERUJVR19DT0RFICgNCj4gPiAtICAgIHsNCj4g PiAtICAgICAgVUlOVE4gICAgICAgICAgICAgICAgIEViZGFCYXNlQWRkcmVzczsNCj4gPiAtICAg ICAgVUlOVE4gICAgICAgICAgICAgICAgIFJlc2VydmVkRWJkYUJhc2VBZGRyZXNzOw0KPiA+IC0N Cj4gPiAtICAgICAgLy8NCj4gPiAtICAgICAgLy8gU2tpcCB0aGlzIHBhcnQgb2YgZGVidWcgY29k ZSBpZiBOVUxMIHBvaW50ZXIgZGV0ZWN0aW9uIGlzIGVuYWJsZWQNCj4gPiAtICAgICAgLy8NCj4g PiAtICAgICAgaWYgKChQY2RHZXQ4IChQY2ROdWxsUG9pbnRlckRldGVjdGlvblByb3BlcnR5TWFz aykgJiBCSVQwKSA9PSAwKSB7DQo+ID4gLSAgICAgICAgRWJkYUJhc2VBZGRyZXNzID0gKCooVUlO VDE2ICopIChVSU5UTikgMHg0MEUpIDw8IDQ7DQo+ID4gLSAgICAgICAgUmVzZXJ2ZWRFYmRhQmFz ZUFkZHJlc3MgPSBDT05WRU5USU9OQUxfTUVNT1JZX1RPUA0KPiA+IC0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLSBQY2RHZXQzMiAoUGNkRWJkYVJlc2VydmVkTWVtb3J5U2l6ZSk7 DQo+ID4gLSAgICAgICAgQVNTRVJUIChSZXNlcnZlZEViZGFCYXNlQWRkcmVzcyA8PSBFYmRhQmFz ZUFkZHJlc3MpOw0KPiA+IC0gICAgICB9DQo+ID4gLSAgICB9DQo+ID4gLSAgKTsNCj4gPiAtDQo+ ID4gICAgIGlmIChTdGFjayAhPSBOVUxMICYmIFN0YWNrU2l6ZSAhPSAwKSB7DQo+ID4gICAgICAg Ly8NCj4gPiAgICAgICAvLyBDb3B5IGxvdyBtZW1vcnkgc3RhY2sgdG8gU3RhY2sNCj4gPiBAQCAt MzM0LDYgKzMxMSwyNiBAQCBJbnRlcm5hbExlZ2FjeUJpb3NGYXJDYWxsICgNCj4gPiAgICAgLy8N Cj4gPiAgICAgZ0JTLT5SZXN0b3JlVFBMIChPcmlnaW5hbFRwbCk7DQo+ID4NCj4gPiArICAvLw0K PiA+ICsgIC8vIE9QUk9NIG1heSBhbGxvY2F0ZSBFQkRBIHJhbmdlIGJ5IGl0c2VsZiBhbmQgY2hh bmdlIEVCREEgYmFzZSBhbmQNCj4gRUJEQSBzaXplLg0KPiA+ICsgIC8vIEdldCB0aGUgY3VycmVu dCBFQkRBIGJhc2UgYWRkcmVzcywgYW5kIGNvbXBhcmVkIHdpdGggcHJlLWFsbG9jYXRlDQo+IG1p bmltdW0NCj4gPiArICAvLyBFQkRBIGJhc2UgYWRkcmVzcywgaWYgdGhlIGN1cnJlbnQgRUJEQSBi YXNlIGFkZHJlc3MgaXMgc21hbGxlciwgaXQNCj4gaW5kaWNhdGVzDQo+ID4gKyAgLy8gUGNkRWJk YVJlc2VydmVkTWVtb3J5U2l6ZSBzaG91bGQgYmUgYWRqdXN0ZWQgdG8gbGFyZ2VyIGZvciBtb3Jl DQo+IE9QUk9Ncy4NCj4gPiArICAvLw0KPiA+ICsgIERFQlVHX0NPREUgKA0KPiA+ICsgICAgew0K PiA+ICsgICAgICBVSU5UTiAgICAgICAgICAgICAgICAgRWJkYUJhc2VBZGRyZXNzOw0KPiA+ICsg ICAgICBVSU5UTiAgICAgICAgICAgICAgICAgUmVzZXJ2ZWRFYmRhQmFzZUFkZHJlc3M7DQo+ID4g Kw0KPiA+ICsgICAgICBBQ0NFU1NfUEFHRTBfQ09ERSAoew0KPiA+ICsgICAgICAgIEViZGFCYXNl QWRkcmVzcyA9ICgqKFVJTlQxNiAqKSAoVUlOVE4pIDB4NDBFKSA8PCA0Ow0KPiA+ICsgICAgICAg IFJlc2VydmVkRWJkYUJhc2VBZGRyZXNzID0gQ09OVkVOVElPTkFMX01FTU9SWV9UT1ANCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gUGNkR2V0MzIgKFBjZEViZGFSZXNl cnZlZE1lbW9yeVNpemUpOw0KPiA+ICsgICAgICAgIEFTU0VSVCAoUmVzZXJ2ZWRFYmRhQmFzZUFk ZHJlc3MgPD0gRWJkYUJhc2VBZGRyZXNzKTsNCj4gPiArICAgICAgfSk7DQo+ID4gKyAgICB9DQo+ ID4gKyAgKTsNCj4gPiArDQo+ID4gICAgIC8vDQo+ID4gICAgIC8vIFJlc3RvcmUgaW50ZXJydXB0 IG9mIGRlYnVnIHRpbWVyDQo+ID4gICAgIC8vDQo+ID4NCj4gDQo+IA0KPiAtLQ0KPiBUaGFua3Ms DQo+IFJheQ0K