From mboxrd@z Thu Jan 1 00:00:00 1970 From: Subject: Re: [PATCH 2/5] clocksource/drivers/timer-microchip-pit64b: add Microchip PIT64B support Date: Mon, 1 Apr 2019 08:40:50 +0000 Message-ID: References: <1552580772-8499-1-git-send-email-claudiu.beznea@microchip.com> <1552580772-8499-3-git-send-email-claudiu.beznea@microchip.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1552580772-8499-3-git-send-email-claudiu.beznea@microchip.com> Content-Language: en-US Content-ID: <15E5A9593D1C314BAB17B2C4F628D660@namprd11.prod.outlook.com> Sender: linux-kernel-owner@vger.kernel.org To: Claudiu.Beznea@microchip.com, robh+dt@kernel.org, mark.rutland@arm.com, alexandre.belloni@bootlin.com, Ludovic.Desroches@microchip.com, daniel.lezcano@linaro.org, tglx@linutronix.de Cc: devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org List-Id: devicetree@vger.kernel.org T24gMTQvMDMvMjAxOSBhdCAxNzoyNiwgQ2xhdWRpdSBCZXpuZWEgLSBNMTgwNjMgd3JvdGU6DQo+ IEZyb206IENsYXVkaXUgQmV6bmVhIDxjbGF1ZGl1LmJlem5lYUBtaWNyb2NoaXAuY29tPg0KPiAN Cj4gQWRkIGRyaXZlciBmb3IgTWljcm9jaGlwIFBJVDY0QiB0aW1lci4gVGltZXIgY291bGQgYmUg dXNlZCBpbiBjb250aW51b3VzDQo+IG1vZGUgb3Igb25lc2hvdCBtb2RlLiBUaGUgaGFyZHdhcmUg aGFzIDJ4MzIgYml0IHJlZ2lzdGVycyBmb3IgcGVyaW9kDQo+IGVtdWxhdGluZyBhIDY0IGJpdCB0 aW1lci4gVGhlIExTQl9QUiBhbmQgTVNCX1BSIHJlZ2lzdGVycyBhcmUgdXNlZCB0byBzZXQNCj4g dGhlIHBlcmlvZCB2YWx1ZSAoY29tcGFyZSB2YWx1ZSkuIFRMU0IgYW5kIFRNU0Iga2VlcHMgdGhl IGN1cnJlbnQgdmFsdWUNCj4gb2YgdGhlIGNvdW50ZXIuIEFmdGVyIGEgY29tcGFyZSB0aGUgVExT QiBhbmQgVE1TQiByZWdpc3RlciByZXNldHMuIEFwYXJ0DQo+IGZyb20gdGhpcyB0aGUgaGFyZHdh cmUgaGFzIFNNT0QgYml0IGluIG1vZGUgcmVnaXN0ZXIgdGhhdCBhbGxvdyB0bw0KPiByZWNvbmZp Z3VyZSB0aGUgdGltZXIgd2l0aG91dCByZXNldCBhbmQgc3RhcnQgY29tbWFuZHMgKHN0YXJ0IGNv bW1hbmQNCj4gd2hpbGUgdGltZXIgaXMgYWN0aXZlIGlzIGlnbm9yZWQpLg0KPiBUaGUgZHJpdmVy IHVzZXMgUElUNjRCIHRpbWVyIGFzIGNsb2Nrc291cmNlIG9yIGNsb2NrZXZlbnQuIEZpcnN0IHJl cXVlc3RlZA0KPiB0aW1lciB3b3VsZCBiZSByZWdpc3RlcmVkIGFzIGNsb2NrZXZlbnQsIHNlY29u ZCBvbmUgd291bGQgYmUgcmVnaXN0ZXJlZCBhcw0KPiBjbG9ja3NvdXJjZS4gSW5kaXZpZHVhbCBQ SVQ2NEIgaGFyZHdhcmUgcmVzb3VyY2VzIHdlcmUgdXNlZCBmb3IgY2xvY2tzb3VyY2UNCj4gYW5k IGNsb2NrZXZlbnQgdG8gYmUgYWJsZSB0byBzdXBwb3J0IGhpZ2ggcmVzb2x1dGlvbiB0aW1lcnMg d2l0aCB0aGlzDQo+IGhhcmR3YXJlIGltcGxlbWVudGF0aW9uLg0KPiANCj4gU2lnbmVkLW9mZi1i eTogQ2xhdWRpdSBCZXpuZWEgPGNsYXVkaXUuYmV6bmVhQG1pY3JvY2hpcC5jb20+DQoNCkxvb2sg Z29vZCB0byBtZToNCkFja2VkLWJ5OiBOaWNvbGFzIEZlcnJlIDxuaWNvbGFzLmZlcnJlQG1pY3Jv Y2hpcC5jb20+DQoNCg0KPiAtLS0NCj4gICBkcml2ZXJzL2Nsb2Nrc291cmNlL0tjb25maWcgICAg ICAgICAgICAgICAgICB8ICAgNiArDQo+ICAgZHJpdmVycy9jbG9ja3NvdXJjZS9NYWtlZmlsZSAg ICAgICAgICAgICAgICAgfCAgIDEgKw0KPiAgIGRyaXZlcnMvY2xvY2tzb3VyY2UvdGltZXItbWlj cm9jaGlwLXBpdDY0Yi5jIHwgNDY0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiAgIDMg ZmlsZXMgY2hhbmdlZCwgNDcxIGluc2VydGlvbnMoKykNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9jbG9ja3NvdXJjZS90aW1lci1taWNyb2NoaXAtcGl0NjRiLmMNCj4gDQo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL0tjb25maWcgYi9kcml2ZXJzL2Nsb2Nrc291cmNl L0tjb25maWcNCj4gaW5kZXggNWQ5M2U1ODBlNWRjLi4yYWQ2Zjg4MWEwYmIgMTAwNjQ0DQo+IC0t LSBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvS2NvbmZpZw0KPiArKysgYi9kcml2ZXJzL2Nsb2Nrc291 cmNlL0tjb25maWcNCj4gQEAgLTQ0OCw2ICs0NDgsMTIgQEAgY29uZmlnIE9YTkFTX1JQU19USU1F Ug0KPiAgIGNvbmZpZyBTWVNfU1VQUE9SVFNfU0hfQ01UDQo+ICAgICAgICAgICBib29sDQo+ICAg DQo+ICtjb25maWcgTUlDUk9DSElQX1BJVDY0Qg0KPiArCWJvb2wgIk1pY3JvY2hpcCBQSVQ2NEIg c3VwcG9ydCINCj4gKwlkZXBlbmRzIG9uIE9GIHx8IENPTVBJTEVfVEVTVA0KPiArCWhlbHANCj4g KwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgTWljcm9jaGlwIFBJVDY0QiB0aW1lci4NCj4gKw0KPiAg IGNvbmZpZyBNVEtfVElNRVINCj4gICAJYm9vbCAiTWVkaWF0ZWsgdGltZXIgZHJpdmVyIiBpZiBD T01QSUxFX1RFU1QNCj4gICAJZGVwZW5kcyBvbiBIQVNfSU9NRU0NCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvY2xvY2tzb3VyY2UvTWFrZWZpbGUgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL01ha2VmaWxl DQo+IGluZGV4IGM0YThlOWVmOTMyYS4uYzUzZmExMmI5Yjk0IDEwMDY0NA0KPiAtLS0gYS9kcml2 ZXJzL2Nsb2Nrc291cmNlL01ha2VmaWxlDQo+ICsrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvTWFr ZWZpbGUNCj4gQEAgLTM1LDYgKzM1LDcgQEAgb2JqLSQoQ09ORklHX1UzMDBfVElNRVIpCSs9IHRp bWVyLXUzMDAubw0KPiAgIG9iai0kKENPTkZJR19TVU40SV9USU1FUikJKz0gdGltZXItc3VuNGku bw0KPiAgIG9iai0kKENPTkZJR19TVU41SV9IU1RJTUVSKQkrPSB0aW1lci1zdW41aS5vDQo+ICAg b2JqLSQoQ09ORklHX01FU09ONl9USU1FUikJKz0gdGltZXItbWVzb242Lm8NCj4gK29iai0kKENP TkZJR19NSUNST0NISVBfUElUNjRCKQkrPSB0aW1lci1taWNyb2NoaXAtcGl0NjRiLm8NCj4gICBv YmotJChDT05GSUdfVEVHUkFfVElNRVIpCSs9IHRpbWVyLXRlZ3JhMjAubw0KPiAgIG9iai0kKENP TkZJR19WVDg1MDBfVElNRVIpCSs9IHRpbWVyLXZ0ODUwMC5vDQo+ICAgb2JqLSQoQ09ORklHX05T UElSRV9USU1FUikJKz0gdGltZXItemV2aW8ubw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9j a3NvdXJjZS90aW1lci1taWNyb2NoaXAtcGl0NjRiLmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL3Rp bWVyLW1pY3JvY2hpcC1waXQ2NGIuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAw MDAwMDAwMDAwMDAuLjY3ODdhYTk4ZWYwMQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2RyaXZl cnMvY2xvY2tzb3VyY2UvdGltZXItbWljcm9jaGlwLXBpdDY0Yi5jDQo+IEBAIC0wLDAgKzEsNDY0 IEBADQo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPiArLy8NCj4gKy8v IENvcHlyaWdodCAoQykgMjAxOSBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuDQo+ICsvLyBDb3B5 cmlnaHQgKEMpIDIwMTkgQ2xhdWRpdSBCZXpuZWEgKGNsYXVkaXUuYmV6bmVhQG1pY3JvY2hpcC5j b20pDQo+ICsNCj4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9j bG9ja2NoaXBzLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQo+ICsjaW5jbHVk ZSA8bGludXgvb2ZfYWRkcmVzcy5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPg0KPiAr I2luY2x1ZGUgPGxpbnV4L3NjaGVkX2Nsb2NrLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5o Pg0KPiArDQo+ICsjZGVmaW5lIE1DSFBfUElUNjRCX0NSCQkweDAwCS8qIENvbnRyb2wgUmVnaXN0 ZXIgKi8NCj4gKyNkZWZpbmUgTUNIUF9QSVQ2NEJfQ1JfU1RBUlQJQklUKDApDQo+ICsjZGVmaW5l IE1DSFBfUElUNjRCX0NSX1NXUlNUCUJJVCg4KQ0KPiArDQo+ICsjZGVmaW5lIE1DSFBfUElUNjRC X01SCQkweDA0CS8qIE1vZGUgUmVnaXN0ZXIgKi8NCj4gKyNkZWZpbmUgTUNIUF9QSVQ2NEJfTVJf Q09OVAlCSVQoMCkNCj4gKyNkZWZpbmUgTUNIUF9QSVQ2NEJfTVJfU0dDTEsJQklUKDMpDQo+ICsj ZGVmaW5lIE1DSFBfUElUNjRCX01SX1NNT0QJQklUKDQpDQo+ICsjZGVmaW5lIE1DSFBfUElUNjRC X01SX1BSRVMJR0VOTUFTSygxMSwgOCkNCj4gKw0KPiArI2RlZmluZSBNQ0hQX1BJVDY0Ql9MU0Jf UFIJMHgwOAkvKiBMU0IgUGVyaW9kIFJlZ2lzdGVyICovDQo+ICsNCj4gKyNkZWZpbmUgTUNIUF9Q SVQ2NEJfTVNCX1BSCTB4MEMJLyogTVNCIFBlcmlvZCBSZWdpc3RlciAqLw0KPiArDQo+ICsjZGVm aW5lIE1DSFBfUElUNjRCX0lFUgkJMHgxMAkvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICov DQo+ICsjZGVmaW5lIE1DSFBfUElUNjRCX0lFUl9QRVJJT0QJQklUKDApDQo+ICsNCj4gKyNkZWZp bmUgTUNIUF9QSVQ2NEJfSVNSCQkweDFDCS8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8N Cj4gKyNkZWZpbmUgTUNIUF9QSVQ2NEJfSVNSX1BFUklPRAlCSVQoMCkNCj4gKw0KPiArI2RlZmlu ZSBNQ0hQX1BJVDY0Ql9UTFNCUgkweDIwCS8qIFRpbWVyIExTQiBSZWdpc3RlciAqLw0KPiArDQo+ ICsjZGVmaW5lIE1DSFBfUElUNjRCX1RNU0JSCTB4MjQJLyogVGltZXIgTVNCIFJlZ2lzdGVyICov DQo+ICsNCj4gKyNkZWZpbmUgTUNIUF9QSVQ2NEJfUFJFU19NQVgJMHgxMA0KPiArI2RlZmluZSBN Q0hQX1BJVDY0Ql9ERUZfRlJFUQkyNTAwMDAwVUwJLyogMi41IE1IeiAqLw0KPiArI2RlZmluZSBN Q0hQX1BJVDY0Ql9MU0JNQVNLCUdFTk1BU0tfVUxMKDMxLCAwKQ0KPiArI2RlZmluZSBNQ0hQX1BJ VDY0Ql9QUkVTQ0FMRVIocCkJKE1DSFBfUElUNjRCX01SX1BSRVMgJiAoKHApIDw8IDgpKQ0KPiAr DQo+ICsjZGVmaW5lIE1DSFBfUElUNjRCX05BTUUJInBpdDY0YiINCj4gKw0KPiArc3RydWN0IG1j aHBfcGl0NjRiX2NvbW1vbl9kYXRhIHsNCj4gKwl2b2lkIF9faW9tZW0gKmJhc2U7DQo+ICsJc3Ry dWN0IGNsayAqcGNsazsNCj4gKwlzdHJ1Y3QgY2xrICpnY2xrOw0KPiArCXU2NCBjeWNsZXM7DQo+ ICsJdTggcHJlczsNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBtY2hwX3BpdDY0Yl9jbGtzcmNfZGF0 YSB7DQo+ICsJc3RydWN0IGNsb2Nrc291cmNlICpjbGtzcmM7DQo+ICsJc3RydWN0IG1jaHBfcGl0 NjRiX2NvbW1vbl9kYXRhICpjZDsNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBtY2hwX3BpdDY0Yl9j bGtldnRfZGF0YSB7DQo+ICsJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2xrZXZ0Ow0KPiAr CXN0cnVjdCBtY2hwX3BpdDY0Yl9jb21tb25fZGF0YSAqY2Q7DQo+ICt9Ow0KPiArDQo+ICtzdGF0 aWMgc3RydWN0IG1jaHBfcGl0NjRiX2RhdGEgew0KPiArCXN0cnVjdCBtY2hwX3BpdDY0Yl9jbGtz cmNfZGF0YSAqY3NkOw0KPiArCXN0cnVjdCBtY2hwX3BpdDY0Yl9jbGtldnRfZGF0YSAqY2VkOw0K PiArfSBkYXRhOw0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHUzMiBtY2hwX3BpdDY0Yl9yZWFkKHZv aWQgX19pb21lbSAqYmFzZSwgdTMyIG9mZnNldCkNCj4gK3sNCj4gKwlyZXR1cm4gcmVhZGxfcmVs YXhlZChiYXNlICsgb2Zmc2V0KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSB2b2lkIG1j aHBfcGl0NjRiX3dyaXRlKHZvaWQgX19pb21lbSAqYmFzZSwgdTMyIG9mZnNldCwgdTMyIHZhbCkN Cj4gK3sNCj4gKwl3cml0ZWxfcmVsYXhlZCh2YWwsIGJhc2UgKyBvZmZzZXQpOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgaW5saW5lIHU2NCBtY2hwX3BpdDY0Yl9nZXRfcGVyaW9kKHZvaWQgX19pb21l bSAqYmFzZSkNCj4gK3sNCj4gKwl1MzIgbHNiLCBtc2I7DQo+ICsNCj4gKwkvKiBMU0IgbXVzdCBi ZSByZWFkIGZpcnN0IHRvIGd1YXJhbnRlZSBhbiBhdG9taWMgcmVhZCBvZiB0aGUgNjQgYml0DQo+ ICsJICogdGltZXIuDQo+ICsJICovDQo+ICsJbHNiID0gbWNocF9waXQ2NGJfcmVhZChiYXNlLCBN Q0hQX1BJVDY0Ql9UTFNCUik7DQo+ICsJbXNiID0gbWNocF9waXQ2NGJfcmVhZChiYXNlLCBNQ0hQ X1BJVDY0Ql9UTVNCUik7DQo+ICsNCj4gKwlyZXR1cm4gKCgodTY0KW1zYiA8PCAzMikgfCBsc2Ip Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHZvaWQgbWNocF9waXQ2NGJfc2V0X3Blcmlv ZCh2b2lkIF9faW9tZW0gKmJhc2UsIHU2NCBjeWNsZXMpDQo+ICt7DQo+ICsJdTMyIGxzYiwgbXNi Ow0KPiArDQo+ICsJbHNiID0gY3ljbGVzICYgTUNIUF9QSVQ2NEJfTFNCTUFTSzsNCj4gKwltc2Ig PSBjeWNsZXMgPj4gMzI7DQo+ICsNCj4gKwkvKiBMU0IgbXVzdCBiZSB3cml0ZSBsYXN0IHRvIGd1 YXJhbnRlZSBhbiBhdG9taWMgdXBkYXRlIG9mIHRoZSB0aW1lcg0KPiArCSAqIGV2ZW4gd2hlbiBT TU9EPTEuDQo+ICsJICovDQo+ICsJbWNocF9waXQ2NGJfd3JpdGUoYmFzZSwgTUNIUF9QSVQ2NEJf TVNCX1BSLCBtc2IpOw0KPiArCW1jaHBfcGl0NjRiX3dyaXRlKGJhc2UsIE1DSFBfUElUNjRCX0xT Ql9QUiwgbHNiKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSB2b2lkIG1jaHBfcGl0NjRi X3Jlc2V0KHN0cnVjdCBtY2hwX3BpdDY0Yl9jb21tb25fZGF0YSAqZGF0YSwNCj4gKwkJCQkgICAg IHUzMiBtb2RlLCBib29sIGlycV9lbmEpDQo+ICt7DQo+ICsJbW9kZSB8PSBNQ0hQX1BJVDY0Ql9Q UkVTQ0FMRVIoZGF0YS0+cHJlcyk7DQo+ICsJaWYgKGRhdGEtPmdjbGspDQo+ICsJCW1vZGUgfD0g TUNIUF9QSVQ2NEJfTVJfU0dDTEs7DQo+ICsNCj4gKwltY2hwX3BpdDY0Yl93cml0ZShkYXRhLT5i YXNlLCBNQ0hQX1BJVDY0Ql9DUiwgTUNIUF9QSVQ2NEJfQ1JfU1dSU1QpOw0KPiArCW1jaHBfcGl0 NjRiX3dyaXRlKGRhdGEtPmJhc2UsIE1DSFBfUElUNjRCX01SLCBtb2RlKTsNCj4gKwltY2hwX3Bp dDY0Yl9zZXRfcGVyaW9kKGRhdGEtPmJhc2UsIGRhdGEtPmN5Y2xlcyk7DQo+ICsJaWYgKGlycV9l bmEpDQo+ICsJCW1jaHBfcGl0NjRiX3dyaXRlKGRhdGEtPmJhc2UsIE1DSFBfUElUNjRCX0lFUiwN Cj4gKwkJCQkgIE1DSFBfUElUNjRCX0lFUl9QRVJJT0QpOw0KPiArCW1jaHBfcGl0NjRiX3dyaXRl KGRhdGEtPmJhc2UsIE1DSFBfUElUNjRCX0NSLCBNQ0hQX1BJVDY0Ql9DUl9TVEFSVCk7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyB1NjQgbWNocF9waXQ2NGJfcmVhZF9jbGsoc3RydWN0IGNsb2Nrc291 cmNlICpjcykNCj4gK3sNCj4gKwlyZXR1cm4gbWNocF9waXQ2NGJfZ2V0X3BlcmlvZChkYXRhLmNz ZC0+Y2QtPmJhc2UpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdTY0IG1jaHBfc2NoZWRfcmVhZF9j bGsodm9pZCkNCj4gK3sNCj4gKwlyZXR1cm4gbWNocF9waXQ2NGJfZ2V0X3BlcmlvZChkYXRhLmNz ZC0+Y2QtPmJhc2UpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlIG1j aHBfcGl0NjRiX2Nsa3NyYyA9IHsNCj4gKwkubmFtZSA9IE1DSFBfUElUNjRCX05BTUUsDQo+ICsJ Lm1hc2sgPSBDTE9DS1NPVVJDRV9NQVNLKDY0KSwNCj4gKwkuZmxhZ3MgPSBDTE9DS19TT1VSQ0Vf SVNfQ09OVElOVU9VUywNCj4gKwkucmF0aW5nID0gMjEwLA0KPiArCS5yZWFkID0gbWNocF9waXQ2 NGJfcmVhZF9jbGssDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgaW50IG1jaHBfcGl0NjRiX2Nsa2V2 dF9zaHV0ZG93bihzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZWRldikNCj4gK3sNCj4gKwlt Y2hwX3BpdDY0Yl93cml0ZShkYXRhLmNlZC0+Y2QtPmJhc2UsIE1DSFBfUElUNjRCX0NSLA0KPiAr CQkJICBNQ0hQX1BJVDY0Ql9DUl9TV1JTVCk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4g Kw0KPiArc3RhdGljIGludCBtY2hwX3BpdDY0Yl9jbGtldnRfc2V0X3BlcmlvZGljKHN0cnVjdCBj bG9ja19ldmVudF9kZXZpY2UgKmNlZGV2KQ0KPiArew0KPiArCW1jaHBfcGl0NjRiX3Jlc2V0KGRh dGEuY2VkLT5jZCwgTUNIUF9QSVQ2NEJfTVJfQ09OVCwgdHJ1ZSk7DQo+ICsNCj4gKwlyZXR1cm4g MDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBtY2hwX3BpdDY0Yl9jbGtldnRfc2V0X29uZXNo b3Qoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2VkZXYpDQo+ICt7DQo+ICsJbWNocF9waXQ2 NGJfcmVzZXQoZGF0YS5jZWQtPmNkLCBNQ0hQX1BJVDY0Ql9NUl9TTU9ELCB0cnVlKTsNCj4gKw0K PiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IG1jaHBfcGl0NjRiX2Nsa2V2 dF9zZXRfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIGV2dCwNCj4gKwkJCQkJICAgICBzdHJ1Y3Qg Y2xvY2tfZXZlbnRfZGV2aWNlICpjZWRldikNCj4gK3sNCj4gKwltY2hwX3BpdDY0Yl9zZXRfcGVy aW9kKGRhdGEuY2VkLT5jZC0+YmFzZSwgZXZ0KTsNCj4gKwltY2hwX3BpdDY0Yl93cml0ZShkYXRh LmNlZC0+Y2QtPmJhc2UsIE1DSFBfUElUNjRCX0NSLA0KPiArCQkJICBNQ0hQX1BJVDY0Ql9DUl9T VEFSVCk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgbWNo cF9waXQ2NGJfY2xrZXZ0X3N1c3BlbmQoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2VkZXYp DQo+ICt7DQo+ICsJbWNocF9waXQ2NGJfd3JpdGUoZGF0YS5jZWQtPmNkLT5iYXNlLCBNQ0hQX1BJ VDY0Ql9DUiwNCj4gKwkJCSAgTUNIUF9QSVQ2NEJfQ1JfU1dSU1QpOw0KPiArCWlmIChkYXRhLmNl ZC0+Y2QtPmdjbGspDQo+ICsJCWNsa19kaXNhYmxlX3VucHJlcGFyZShkYXRhLmNlZC0+Y2QtPmdj bGspOw0KPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShkYXRhLmNlZC0+Y2QtPnBjbGspOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBtY2hwX3BpdDY0Yl9jbGtldnRfcmVzdW1lKHN0cnVjdCBj bG9ja19ldmVudF9kZXZpY2UgKmNlZGV2KQ0KPiArew0KPiArCXUzMiBtb2RlID0gTUNIUF9QSVQ2 NEJfTVJfU01PRDsNCj4gKw0KPiArCWNsa19wcmVwYXJlX2VuYWJsZShkYXRhLmNlZC0+Y2QtPnBj bGspOw0KPiArCWlmIChkYXRhLmNlZC0+Y2QtPmdjbGspDQo+ICsJCWNsa19wcmVwYXJlX2VuYWJs ZShkYXRhLmNlZC0+Y2QtPmdjbGspOw0KPiArDQo+ICsJaWYgKGNsb2NrZXZlbnRfc3RhdGVfcGVy aW9kaWMoZGF0YS5jZWQtPmNsa2V2dCkpDQo+ICsJCW1vZGUgPSBNQ0hQX1BJVDY0Ql9NUl9DT05U Ow0KPiArDQo+ICsJbWNocF9waXQ2NGJfcmVzZXQoZGF0YS5jZWQtPmNkLCBtb2RlLCB0cnVlKTsN Cj4gK30NCj4gKw0KPiArc3RhdGljIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgbWNocF9waXQ2 NGJfY2xrZXZ0ID0gew0KPiArCS5uYW1lID0gTUNIUF9QSVQ2NEJfTkFNRSwNCj4gKwkuZmVhdHVy ZXMgPSBDTE9DS19FVlRfRkVBVF9PTkVTSE9UIHwgQ0xPQ0tfRVZUX0ZFQVRfUEVSSU9ESUMsDQo+ ICsJLnJhdGluZyA9IDE1MCwNCj4gKwkuc2V0X3N0YXRlX3NodXRkb3duID0gbWNocF9waXQ2NGJf Y2xrZXZ0X3NodXRkb3duLA0KPiArCS5zZXRfc3RhdGVfcGVyaW9kaWMgPSBtY2hwX3BpdDY0Yl9j bGtldnRfc2V0X3BlcmlvZGljLA0KPiArCS5zZXRfc3RhdGVfb25lc2hvdCA9IG1jaHBfcGl0NjRi X2Nsa2V2dF9zZXRfb25lc2hvdCwNCj4gKwkuc2V0X25leHRfZXZlbnQgPSBtY2hwX3BpdDY0Yl9j bGtldnRfc2V0X25leHRfZXZlbnQsDQo+ICsJLnN1c3BlbmQgPSBtY2hwX3BpdDY0Yl9jbGtldnRf c3VzcGVuZCwNCj4gKwkucmVzdW1lID0gbWNocF9waXQ2NGJfY2xrZXZ0X3Jlc3VtZSwNCj4gK307 DQo+ICsNCj4gK3N0YXRpYyBpcnFyZXR1cm5fdCBtY2hwX3BpdDY0Yl9pbnRlcnJ1cHQoaW50IGly cSwgdm9pZCAqZGV2X2lkKQ0KPiArew0KPiArCXN0cnVjdCBtY2hwX3BpdDY0Yl9jbGtldnRfZGF0 YSAqaXJxX2RhdGEgPSBkZXZfaWQ7DQo+ICsNCj4gKwlpZiAoZGF0YS5jZWQgIT0gaXJxX2RhdGEp DQo+ICsJCXJldHVybiBJUlFfTk9ORTsNCj4gKw0KPiArCWlmIChtY2hwX3BpdDY0Yl9yZWFkKGly cV9kYXRhLT5jZC0+YmFzZSwgTUNIUF9QSVQ2NEJfSVNSKSAmDQo+ICsJICAgIE1DSFBfUElUNjRC X0lTUl9QRVJJT0QpIHsNCj4gKwkJaXJxX2RhdGEtPmNsa2V2dC0+ZXZlbnRfaGFuZGxlcihpcnFf ZGF0YS0+Y2xrZXZ0KTsNCj4gKwkJcmV0dXJuIElSUV9IQU5ETEVEOw0KPiArCX0NCj4gKw0KPiAr CXJldHVybiBJUlFfTk9ORTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBfX2luaXQgbWNocF9w aXQ2NGJfcHJlc19jb21wdXRlKHUzMiAqcHJlcywgdTMyIGNsa19yYXRlLA0KPiArCQkJCQkgICB1 MzIgbWF4X3JhdGUpDQo+ICt7DQo+ICsJdTMyIHRtcDsNCj4gKw0KPiArCWZvciAoKnByZXMgPSAw OyAqcHJlcyA8IE1DSFBfUElUNjRCX1BSRVNfTUFYOyAoKnByZXMpKyspIHsNCj4gKwkJdG1wID0g Y2xrX3JhdGUgLyAoKnByZXMgKyAxKTsNCj4gKwkJaWYgKHRtcCA8PSBtYXhfcmF0ZSkNCj4gKwkJ CWJyZWFrOw0KPiArCX0NCj4gKw0KPiArCWlmICgqcHJlcyA9PSBNQ0hQX1BJVDY0Ql9QUkVTX01B WCkNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0K PiArc3RhdGljIGludCBfX2luaXQgbWNocF9waXQ2NGJfcHJlc19wcmVwYXJlKHN0cnVjdCBtY2hw X3BpdDY0Yl9jb21tb25fZGF0YSAqY2QsDQo+ICsJCQkJCSAgIHVuc2lnbmVkIGxvbmcgbWF4X3Jh dGUpDQo+ICt7DQo+ICsJdW5zaWduZWQgbG9uZyBwY2xrX3JhdGUsIGRpZmYgPSAwLCBiZXN0X2Rp ZmYgPSBVTE9OR19NQVg7DQo+ICsJbG9uZyBnY2xrX3JvdW5kID0gMDsNCj4gKwl1MzIgcHJlcywg YmVzdF9wcmVzOw0KPiArCWludCByZXQgPSAwOw0KPiArDQo+ICsJcGNsa19yYXRlID0gY2xrX2dl dF9yYXRlKGNkLT5wY2xrKTsNCj4gKwlpZiAoIXBjbGtfcmF0ZSkNCj4gKwkJcmV0dXJuIC1FSU5W QUw7DQo+ICsNCj4gKwlpZiAoY2QtPmdjbGspIHsNCj4gKwkJZ2Nsa19yb3VuZCA9IGNsa19yb3Vu ZF9yYXRlKGNkLT5nY2xrLCBtYXhfcmF0ZSk7DQo+ICsJCWlmIChnY2xrX3JvdW5kIDwgMCkNCj4g KwkJCWdvdG8gcGNsazsNCj4gKw0KPiArCQlpZiAocGNsa19yYXRlIC8gZ2Nsa19yb3VuZCA8IDMp DQo+ICsJCQlnb3RvIHBjbGs7DQo+ICsNCj4gKwkJcmV0ID0gbWNocF9waXQ2NGJfcHJlc19jb21w dXRlKCZwcmVzLCBnY2xrX3JvdW5kLCBtYXhfcmF0ZSk7DQo+ICsJCWlmIChyZXQpDQo+ICsJCQli ZXN0X2RpZmYgPSBhYnMoZ2Nsa19yb3VuZCAtIG1heF9yYXRlKTsNCj4gKwkJZWxzZQ0KPiArCQkJ YmVzdF9kaWZmID0gYWJzKGdjbGtfcm91bmQgLyAocHJlcyArIDEpIC0gbWF4X3JhdGUpOw0KPiAr CQliZXN0X3ByZXMgPSBwcmVzOw0KPiArCX0NCj4gKw0KPiArcGNsazoNCj4gKwkvKiBDaGVjayBp ZiByZXF1ZXN0ZWQgcmF0ZSBjb3VsZCBiZSBvYnRhaW5lZCB1c2luZyBQQ0xLLiAqLw0KPiArCXJl dCA9IG1jaHBfcGl0NjRiX3ByZXNfY29tcHV0ZSgmcHJlcywgcGNsa19yYXRlLCBtYXhfcmF0ZSk7 DQo+ICsJaWYgKHJldCkNCj4gKwkJZGlmZiA9IGFicyhwY2xrX3JhdGUgLSBtYXhfcmF0ZSk7DQo+ ICsJZWxzZQ0KPiArCQlkaWZmID0gYWJzKHBjbGtfcmF0ZSAvIChwcmVzICsgMSkgLSBtYXhfcmF0 ZSk7DQo+ICsNCj4gKwlpZiAoYmVzdF9kaWZmID4gZGlmZikgew0KPiArCQkvKiBVc2UgUENMSy4g Ki8NCj4gKwkJY2QtPmdjbGsgPSBOVUxMOw0KPiArCQliZXN0X3ByZXMgPSBwcmVzOw0KPiArCX0g ZWxzZSB7DQo+ICsJCWNsa19zZXRfcmF0ZShjZC0+Z2NsaywgZ2Nsa19yb3VuZCk7DQo+ICsJfQ0K PiArDQo+ICsJY2QtPnByZXMgPSBiZXN0X3ByZXM7DQo+ICsNCj4gKwlwcl9pbmZvKCJQSVQ2NEI6 IHVzaW5nIGNsaz0lcyB3aXRoIHByZXNjYWxlciAldSwgZnJlcT0lbHUgW0h6XVxuIiwNCj4gKwkJ Y2QtPmdjbGsgPyAiZ2NsayIgOiAicGNsayIsIGNkLT5wcmVzLA0KPiArCQljZC0+Z2NsayA/IGdj bGtfcm91bmQgLyAoY2QtPnByZXMgKyAxKQ0KPiArCQkJIDogcGNsa19yYXRlIC8gKGNkLT5wcmVz ICsgMSkpOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgX19p bml0IG1jaHBfcGl0NjRiX2R0X2luaXRfY2xrc3JjKHN0cnVjdCBtY2hwX3BpdDY0Yl9jb21tb25f ZGF0YSAqY2QpDQo+ICt7DQo+ICsJc3RydWN0IG1jaHBfcGl0NjRiX2Nsa3NyY19kYXRhICpjc2Q7 DQo+ICsJdW5zaWduZWQgbG9uZyBjbGtfcmF0ZTsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJY3Nk ID0ga3phbGxvYyhzaXplb2YoKmNzZCksIEdGUF9LRVJORUwpOw0KPiArCWlmICghY3NkKQ0KPiAr CQlyZXR1cm4gLUVOT01FTTsNCj4gKw0KPiArCWNzZC0+Y2QgPSBjZDsNCj4gKw0KPiArCWlmIChj c2QtPmNkLT5nY2xrKQ0KPiArCQljbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShjc2QtPmNkLT5nY2xr KTsNCj4gKwllbHNlDQo+ICsJCWNsa19yYXRlID0gY2xrX2dldF9yYXRlKGNzZC0+Y2QtPnBjbGsp Ow0KPiArDQo+ICsJY2xrX3JhdGUgPSBjbGtfcmF0ZSAvIChjZC0+cHJlcyArIDEpOw0KPiArCWNz ZC0+Y2QtPmN5Y2xlcyA9IFVMTE9OR19NQVg7DQo+ICsJbWNocF9waXQ2NGJfcmVzZXQoY3NkLT5j ZCwgTUNIUF9QSVQ2NEJfTVJfQ09OVCwgZmFsc2UpOw0KPiArDQo+ICsJZGF0YS5jc2QgPSBjc2Q7 DQo+ICsNCj4gKwljc2QtPmNsa3NyYyA9ICZtY2hwX3BpdDY0Yl9jbGtzcmM7DQo+ICsNCj4gKwly ZXQgPSBjbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeihjc2QtPmNsa3NyYywgY2xrX3JhdGUpOw0KPiAr CWlmIChyZXQpIHsNCj4gKwkJcHJfZGVidWcoImNsa3NyYzogRmFpbGVkIHRvIHJlZ2lzdGVyIFBJ VDY0QiBjbG9ja3NvdXJjZSFcbiIpOw0KPiArCQlnb3RvIGZyZWU7DQo+ICsJfQ0KPiArDQo+ICsJ c2NoZWRfY2xvY2tfcmVnaXN0ZXIobWNocF9zY2hlZF9yZWFkX2NsaywgNjQsIGNsa19yYXRlKTsN Cj4gKw0KPiArCXJldHVybiAwOw0KPiArDQo+ICtmcmVlOg0KPiArCWtmcmVlKGNzZCk7DQo+ICsJ ZGF0YS5jc2QgPSBOVUxMOw0KPiArDQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArc3Rh dGljIGludCBfX2luaXQgbWNocF9waXQ2NGJfZHRfaW5pdF9jbGtldnQoc3RydWN0IG1jaHBfcGl0 NjRiX2NvbW1vbl9kYXRhICpjZCwNCj4gKwkJCQkJICAgICB1MzIgaXJxKQ0KPiArew0KPiArCXN0 cnVjdCBtY2hwX3BpdDY0Yl9jbGtldnRfZGF0YSAqY2VkOw0KPiArCXVuc2lnbmVkIGxvbmcgY2xr X3JhdGU7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCWNlZCA9IGt6YWxsb2Moc2l6ZW9mKCpjZWQp LCBHRlBfS0VSTkVMKTsNCj4gKwlpZiAoIWNlZCkNCj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ICsN Cj4gKwljZWQtPmNkID0gY2Q7DQo+ICsNCj4gKwlpZiAoY2VkLT5jZC0+Z2NsaykNCj4gKwkJY2xr X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2VkLT5jZC0+Z2Nsayk7DQo+ICsJZWxzZQ0KPiArCQljbGtf cmF0ZSA9IGNsa19nZXRfcmF0ZShjZWQtPmNkLT5wY2xrKTsNCj4gKw0KPiArCWNsa19yYXRlID0g Y2xrX3JhdGUgLyAoY2VkLT5jZC0+cHJlcyArIDEpOw0KPiArCWNlZC0+Y2QtPmN5Y2xlcyA9IERJ Vl9ST1VORF9DTE9TRVNUKGNsa19yYXRlLCBIWik7DQo+ICsNCj4gKwlyZXQgPSByZXF1ZXN0X2ly cShpcnEsIG1jaHBfcGl0NjRiX2ludGVycnVwdCwgSVJRRl9USU1FUiwgInBpdDY0Yl90aWNrIiwN Cj4gKwkJCSAgY2VkKTsNCj4gKwlpZiAocmV0KSB7DQo+ICsJCXByX2RlYnVnKCJjbGtldnQ6IEZh aWxlZCB0byBzZXR1cCBQSVQ2NEIgSVJRXG4iKTsNCj4gKwkJZ290byBmcmVlOw0KPiArCX0NCj4g Kw0KPiArCWRhdGEuY2VkID0gY2VkOw0KPiArDQo+ICsJLyogU2V0IHVwIGFuZCByZWdpc3RlciBj bG9ja2V2ZW50cy4gKi8NCj4gKwljZWQtPmNsa2V2dCA9ICZtY2hwX3BpdDY0Yl9jbGtldnQ7DQo+ ICsJY2VkLT5jbGtldnQtPmNwdW1hc2sgPSBjcHVtYXNrX29mKDApOw0KPiArCWNlZC0+Y2xrZXZ0 LT5pcnEgPSBpcnE7DQo+ICsJY2xvY2tldmVudHNfY29uZmlnX2FuZF9yZWdpc3RlcihjZWQtPmNs a2V2dCwgY2xrX3JhdGUsIDEsIFVMT05HX01BWCk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gKw0K PiArZnJlZToNCj4gKwlrZnJlZShjZWQpOw0KPiArCWRhdGEuY2VkID0gTlVMTDsNCj4gKw0KPiAr CXJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgX19pbml0IG1jaHBfcGl0NjRi X2R0X2luaXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQ0KPiArew0KPiArCXN0cnVjdCBtY2hw X3BpdDY0Yl9jb21tb25fZGF0YSAqY2Q7DQo+ICsJdTMyIGlycSwgZnJlcSA9IE1DSFBfUElUNjRC X0RFRl9GUkVROw0KPiArCWludCByZXQ7DQo+ICsNCj4gKwlpZiAoZGF0YS5jc2QgJiYgZGF0YS5j ZWQpDQo+ICsJCXJldHVybiAtRUJVU1k7DQo+ICsNCj4gKwljZCA9IGt6YWxsb2Moc2l6ZW9mKCpj ZCksIEdGUF9LRVJORUwpOw0KPiArCWlmICghY2QpDQo+ICsJCXJldHVybiAtRU5PTUVNOw0KPiAr DQo+ICsJY2QtPnBjbGsgPSBvZl9jbGtfZ2V0X2J5X25hbWUobm9kZSwgInBjbGsiKTsNCj4gKwlp ZiAoSVNfRVJSKGNkLT5wY2xrKSkgew0KPiArCQlyZXQgPSBQVFJfRVJSKGNkLT5wY2xrKTsNCj4g KwkJZ290byBmcmVlOw0KPiArCX0NCj4gKw0KPiArCWNkLT5nY2xrID0gb2ZfY2xrX2dldF9ieV9u YW1lKG5vZGUsICJnY2xrIik7DQo+ICsJaWYgKElTX0VSUihjZC0+Z2NsaykpDQo+ICsJCWNkLT5n Y2xrID0gTlVMTDsNCj4gKw0KPiArCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJj bG9jay1mcmVxdWVuY3kiLCAmZnJlcSk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcHJfZGVidWcoIlBJ VDY0QjogZmFpbGVkIHRvIHJlYWQgY2xvY2sgZnJlcXVlbmN5LiBVc2luZyBkZWZhdWx0IVxuIik7 DQo+ICsNCj4gKwlyZXQgPSBtY2hwX3BpdDY0Yl9wcmVzX3ByZXBhcmUoY2QsIGZyZXEpOw0KPiAr CWlmIChyZXQpDQo+ICsJCWdvdG8gZnJlZTsNCj4gKw0KPiArCWNkLT5iYXNlID0gb2ZfaW9tYXAo bm9kZSwgMCk7DQo+ICsJaWYgKCFjZC0+YmFzZSkgew0KPiArCQlwcl9kZWJ1ZygiJXM6IENvdWxk IG5vdCBtYXAgUElUNjRCIGFkZHJlc3MhXG4iLA0KPiArCQkJIE1DSFBfUElUNjRCX05BTUUpOw0K PiArCQlyZXQgPSAtRU5YSU87DQo+ICsJCWdvdG8gZnJlZTsNCj4gKwl9DQo+ICsNCj4gKwlyZXQg PSBjbGtfcHJlcGFyZV9lbmFibGUoY2QtPnBjbGspOw0KPiArCWlmIChyZXQpDQo+ICsJCWdvdG8g dW5tYXA7DQo+ICsNCj4gKwlpZiAoY2QtPmdjbGspIHsNCj4gKwkJcmV0ID0gY2xrX3ByZXBhcmVf ZW5hYmxlKGNkLT5nY2xrKTsNCj4gKwkJaWYgKHJldCkNCj4gKwkJCWdvdG8gcGNsa191bnByZXBh cmU7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKCFkYXRhLmNlZCkgew0KPiArCQlpcnEgPSBpcnFfb2Zf cGFyc2VfYW5kX21hcChub2RlLCAwKTsNCj4gKwkJaWYgKCFpcnEpIHsNCj4gKwkJCXByX2RlYnVn KCIlczogRmFpbGVkIHRvIGdldCBQSVQ2NEIgY2xvY2tldmVudCBJUlEhXG4iLA0KPiArCQkJCSBN Q0hQX1BJVDY0Ql9OQU1FKTsNCj4gKwkJCXJldCA9IC1FTk9ERVY7DQo+ICsJCQlnb3RvIGdjbGtf dW5wcmVwYXJlOw0KPiArCQl9DQo+ICsJCXJldCA9IG1jaHBfcGl0NjRiX2R0X2luaXRfY2xrZXZ0 KGNkLCBpcnEpOw0KPiArCQlpZiAocmV0KQ0KPiArCQkJZ290byBpcnFfdW5tYXA7DQo+ICsJfSBl bHNlIHsNCj4gKwkJcmV0ID0gbWNocF9waXQ2NGJfZHRfaW5pdF9jbGtzcmMoY2QpOw0KPiArCQlp ZiAocmV0KQ0KPiArCQkJZ290byBnY2xrX3VucHJlcGFyZTsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1 cm4gMDsNCj4gKw0KPiAraXJxX3VubWFwOg0KPiArCWlycV9kaXNwb3NlX21hcHBpbmcoaXJxKTsN Cj4gK2djbGtfdW5wcmVwYXJlOg0KPiArCWlmIChjZC0+Z2NsaykNCj4gKwkJY2xrX2Rpc2FibGVf dW5wcmVwYXJlKGNkLT5nY2xrKTsNCj4gK3BjbGtfdW5wcmVwYXJlOg0KPiArCWNsa19kaXNhYmxl X3VucHJlcGFyZShjZC0+cGNsayk7DQo+ICt1bm1hcDoNCj4gKwlpb3VubWFwKGNkLT5iYXNlKTsN Cj4gK2ZyZWU6DQo+ICsJa2ZyZWUoY2QpOw0KPiArDQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4g Kw0KPiArVElNRVJfT0ZfREVDTEFSRShtY2hwX3BpdDY0Yl9jbGtzcmMsICJtaWNyb2NoaXAsc2Ft OXg2MC1waXQ2NGIiLA0KPiArCQkgbWNocF9waXQ2NGJfZHRfaW5pdCk7DQo+IA0KDQoNCi0tIA0K Tmljb2xhcyBGZXJyZQ0K