From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55993) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cOeDW-0004eY-Ro for qemu-devel@nongnu.org; Wed, 04 Jan 2017 00:34:35 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cOeDR-00033r-Rd for qemu-devel@nongnu.org; Wed, 04 Jan 2017 00:34:30 -0500 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:38426 helo=mx0a-001b2d01.pphosted.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cOeDR-00033O-GK for qemu-devel@nongnu.org; Wed, 04 Jan 2017 00:34:25 -0500 Received: from pps.filterd (m0098419.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.17/8.16.0.17) with SMTP id v045YDxL085931 for ; Wed, 4 Jan 2017 00:34:23 -0500 Received: from e23smtp03.au.ibm.com (e23smtp03.au.ibm.com [202.81.31.145]) by mx0b-001b2d01.pphosted.com with ESMTP id 27rp1fhwhn-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Wed, 04 Jan 2017 00:34:22 -0500 Received: from localhost by e23smtp03.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 4 Jan 2017 15:34:19 +1000 From: "Alastair D'Silva" Date: Wed, 04 Jan 2017 16:34:16 +1100 In-Reply-To: <1483505971.22609.6.camel@aj.id.au> References: <20161215054812.12602-1-alastair@au1.ibm.com> <20161215054812.12602-7-alastair@au1.ibm.com> <1483505971.22609.6.camel@aj.id.au> Content-Type: text/plain; charset="UTF-8" Mime-Version: 1.0 Message-Id: <1483508056.13607.13.camel@au1.ibm.com> Content-Transfer-Encoding: base64 Subject: Re: [Qemu-devel] [PATCH v4 6/8] hw/timer: Add Epson RX8900 RTC support List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Andrew Jeffery , qemu-arm@nongnu.org Cc: qemu-devel@nongnu.org, Peter Maydell , =?ISO-8859-1?Q?C=E9dric?= Le Goater , Joel Stanley T24gV2VkLCAyMDE3LTAxLTA0IGF0IDE1OjI5ICsxMDMwLCBBbmRyZXcgSmVmZmVyeSB3cm90 ZToNCg0KPiBIaSBBbGFzdGFpciwNCj4gDQo+IEkgaGF2ZSBzb21lIG1vc3RseSBtaW5vciBj b21tZW50cyBiZWxvdy4NCg0KT2ssIEknbSByZW1vdmluZyBDaHJpcyBmcm9tIHRoZSBDQyBs aXN0IHNpbmNlIGhlJ3MgbGVmdCB0aGUgdGVhbS4NCg0KPiANCj4gT24gVGh1LCAyMDE2LTEy LTE1IGF0IDE2OjQ4ICsxMTAwLCBBbGFzdGFpciBEJ1NpbHZhIHdyb3RlOg0KPiA+ID4gRnJv bTogQWxhc3RhaXIgRCdTaWx2YSA8YWxhc3RhaXJAZC1zaWx2YS5vcmc+DQo+ID4gDQo+ID4g VGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBFcHNvbiBSWDg5MDAgSTJDIFJUQy4N Cj4gPiANCj4gPiBUaGUgZm9sbG93aW5nIGNoaXAgZmVhdHVyZXMgYXJlIGltcGxlbWVudGVk Og0KPiA+IMKgLSBSVEMgKHdhbGxjbG9jayBiYXNlZCwgcHRpbWVyIDEweCBvdmVyc2FtcGxp bmcgdG8gcGljayB1cA0KPiA+IMKgwqDCoMKgwqDCoMKgwqB3YWxsY2xvY2sgdHJhbnNpdGlv bnMpDQo+ID4gwqAtIFRpbWUgdXBkYXRlIGludGVycnVwdCAocGVyIHNlY29uZC9taW51dGUs IHdhbGxjbG9jayBiYXNlZCkNCj4gPiDCoC0gQWxhcm1zICh3YWxsY2xvY2sgYmFzZWQpDQo+ ID4gwqAtIFRlbXBlcmF0dXJlIChzZXQgdmlhIGEgcHJvcGVydHkpDQo+ID4gwqAtIENvdW50 ZG93biB0aW1lciAoZW11bGF0ZWQgY2xvY2sgdmlhIHB0aW1lcikNCj4gPiDCoC0gRk9VVCB2 aWEgR1BJTyAoZW11bGF0ZWQgY2xvY2sgdmlhIHB0aW1lcikNCj4gPiANCj4gPiBUaGUgZm9s bG93aW5nIGNoaXAgZmVhdHVyZXMgYXJlIHVuaW1wbGVtZW50ZWQ6DQo+ID4gwqAtIExvdyB2 b2x0YWdlIGRldGVjdGlvbg0KPiA+IMKgLSBpMmMgdGltZW91dA0KPiA+IA0KPiA+IFRoZSBp bXBsZW1lbnRhdGlvbiBleHBvcnRzIHRoZSBmb2xsb3dpbmcgbmFtZWQgR1BJT3M6DQo+ID4g cng4OTAwLWludGVycnVwdC1vdXQNCj4gPiByeDg5MDAtZm91dC1lbmFibGUNCj4gPiByeDg5 MDAtZm91dA0KPiA+IA0KPiA+ID4gU2lnbmVkLW9mZi1ieTogQWxhc3RhaXIgRCdTaWx2YSA8 YWxhc3RhaXJAZC1zaWx2YS5vcmc+DQo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBTbWFy dCA8Y2hyaXNAZGlzdHJvZ3V5LmNvbT4NCj4gPiANCj4gPiAtLS0NCj4gPiDCoGRlZmF1bHQt Y29uZmlncy9hcm0tc29mdG1tdS5tYWsgfMKgwqDCoDEgKw0KPiA+IMKgaHcvdGltZXIvTWFr ZWZpbGUub2Jqc8KgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqDCoDIgKw0KPiA+IMKgaHcvdGlt ZXIvcng4OTAwLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8IDkxMg0KPiA+ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gPiDCoGh3L3RpbWVy L3J4ODkwMF9yZWdzLmjCoMKgwqDCoMKgwqDCoMKgwqDCoHwgMTQxICsrKysrKysNCj4gPiDC oGh3L3RpbWVyL3RyYWNlLWV2ZW50c8KgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDMxICsr DQo+ID4gwqA1IGZpbGVzIGNoYW5nZWQsIDEwODcgaW5zZXJ0aW9ucygrKQ0KPiA+IMKgY3Jl YXRlIG1vZGUgMTAwNjQ0IGh3L3RpbWVyL3J4ODkwMC5jDQo+ID4gwqBjcmVhdGUgbW9kZSAx MDA2NDQgaHcvdGltZXIvcng4OTAwX3JlZ3MuaA0KPiA+IA0KPiA+IGRpZmYgLS1naXQgYS9k ZWZhdWx0LWNvbmZpZ3MvYXJtLXNvZnRtbXUubWFrIGIvZGVmYXVsdC1jb25maWdzL2FybS0N Cj4gPiBzb2Z0bW11Lm1haw0KPiA+IGluZGV4IDZkZTNlMTYuLmFkYjYwMGUgMTAwNjQ0DQo+ ID4gLS0tIGEvZGVmYXVsdC1jb25maWdzL2FybS1zb2Z0bW11Lm1haw0KPiA+ICsrKyBiL2Rl ZmF1bHQtY29uZmlncy9hcm0tc29mdG1tdS5tYWsNCj4gPiBAQCAtMjksNiArMjksNyBAQCBD T05GSUdfU01DOTFDMTExPXkNCj4gPiDCoENPTkZJR19BTExXSU5ORVJfRU1BQz15DQo+ID4g wqBDT05GSUdfSU1YX0ZFQz15DQo+ID4gwqBDT05GSUdfRFMxMzM4PXkNCj4gPiArQ09ORklH X1JYODkwMD15DQo+ID4gwqBDT05GSUdfUEZMQVNIX0NGSTAxPXkNCj4gPiDCoENPTkZJR19Q RkxBU0hfQ0ZJMDI9eQ0KPiA+IMKgQ09ORklHX01JQ1JPRFJJVkU9eQ0KPiA+IGRpZmYgLS1n aXQgYS9ody90aW1lci9NYWtlZmlsZS5vYmpzIGIvaHcvdGltZXIvTWFrZWZpbGUub2Jqcw0K PiA+IGluZGV4IDdiYThjMjMuLmZhMDI4YWMgMTAwNjQ0DQo+ID4gLS0tIGEvaHcvdGltZXIv TWFrZWZpbGUub2Jqcw0KPiA+ICsrKyBiL2h3L3RpbWVyL01ha2VmaWxlLm9ianMNCj4gPiBA QCAtMyw2ICszLDcgQEAgY29tbW9uLW9iai0kKENPTkZJR19BUk1fTVBUSU1FUikgKz0gYXJt X21wdGltZXIubw0KPiA+IMKgY29tbW9uLW9iai0kKENPTkZJR19BOV9HVElNRVIpICs9IGE5 Z3RpbWVyLm8NCj4gPiDCoGNvbW1vbi1vYmotJChDT05GSUdfQ0FERU5DRSkgKz0gY2FkZW5j ZV90dGMubw0KPiA+IMKgY29tbW9uLW9iai0kKENPTkZJR19EUzEzMzgpICs9IGRzMTMzOC5v DQo+ID4gK2NvbW1vbi1vYmotJChDT05GSUdfUlg4OTAwKSArPSByeDg5MDAubw0KPiA+IMKg Y29tbW9uLW9iai0kKENPTkZJR19IUEVUKSArPSBocGV0Lm8NCj4gPiDCoGNvbW1vbi1vYmot JChDT05GSUdfSTgyNTQpICs9IGk4MjU0X2NvbW1vbi5vIGk4MjU0Lm8NCj4gPiDCoGNvbW1v bi1vYmotJChDT05GSUdfTTQ4VDU5KSArPSBtNDh0NTkubw0KPiA+IEBAIC0xNyw2ICsxOCw3 IEBAIGNvbW1vbi1vYmotJChDT05GSUdfSU1YKSArPSBpbXhfZXBpdC5vDQo+ID4gwqBjb21t b24tb2JqLSQoQ09ORklHX0lNWCkgKz0gaW14X2dwdC5vDQo+ID4gwqBjb21tb24tb2JqLSQo Q09ORklHX0xNMzIpICs9IGxtMzJfdGltZXIubw0KPiA+IMKgY29tbW9uLW9iai0kKENPTkZJ R19NSUxLWU1JU1QpICs9IG1pbGt5bWlzdC1zeXNjdGwubw0KPiA+ICtjb21tb24tb2JqLSQo Q09ORklHX1JYODkwMCkgKz0gcng4OTAwLm8NCj4gPiDCoA0KPiA+IMKgb2JqLSQoQ09ORklH X0VYWU5PUzQpICs9IGV4eW5vczQyMTBfbWN0Lm8NCj4gPiDCoG9iai0kKENPTkZJR19FWFlO T1M0KSArPSBleHlub3M0MjEwX3B3bS5vDQo+ID4gZGlmZiAtLWdpdCBhL2h3L3RpbWVyL3J4 ODkwMC5jIGIvaHcvdGltZXIvcng4OTAwLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0K PiA+IGluZGV4IDAwMDAwMDAuLmNiMWEyYzgNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysr IGIvaHcvdGltZXIvcng4OTAwLmMNCj4gPiBAQCAtMCwwICsxLDkxMiBAQA0KPiA+ICsvKg0K PiA+ICsgKiBFcHNvbiBSWDg5MDBTQS9DRSBSZWFsdGltZSBDbG9jayBNb2R1bGUNCj4gPiAr ICoNCj4gPiArICogQ29weXJpZ2h0IChjKSAyMDE2IElCTSBDb3Jwb3JhdGlvbg0KPiA+ICsg KiBBdXRob3JzOg0KPiA+ID4gKyAqwqDCoEFsYXN0YWlyIEQnU2lsdmEgPGFsYXN0YWlyQGQt c2lsdmEub3JnPg0KPiA+ID4gKyAqwqDCoENocmlzIFNtYXJ0IDxjaHJpc0BkaXN0cm9ndXku Y29tPg0KPiA+IA0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIGNvZGUgaXMgbGljZW5zZWQgdW5k ZXIgdGhlIEdQTCB2ZXJzaW9uIDIgb3IgbGF0ZXIuwqDCoFNlZQ0KPiA+ICsgKiB0aGUgQ09Q WUlORyBmaWxlIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5Lg0KPiA+ICsgKg0KPiA+ICsg KiBEYXRhc2hlZXQgYXZhaWxhYmxlIGF0Og0KPiA+ICsgKsKgwqBodHRwczovL3N1cHBvcnQu ZXBzb24uYml6L3RkL2FwaS9kb2NfY2hlY2sucGhwP2RsPWFwcF9SWDg5MDBDRQ0KPiA+ICZs YW5nPWVuDQo+ID4gKyAqDQo+ID4gKyAqIE5vdCBpbXBsZW1lbnRlZDoNCj4gPiArICrCoMKg SW1wbGVtZW50IGkyYyB0aW1lb3V0DQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArI2luY2x1ZGUg InFlbXUvb3NkZXAuaCINCj4gPiArI2luY2x1ZGUgInFlbXUtY29tbW9uLmgiDQo+ID4gKyNp bmNsdWRlICJody9pMmMvaTJjLmgiDQo+ID4gKyNpbmNsdWRlICJody90aW1lci9yeDg5MDBf cmVncy5oIg0KPiA+ICsjaW5jbHVkZSAiaHcvcHRpbWVyLmgiDQo+ID4gKyNpbmNsdWRlICJx ZW11L21haW4tbG9vcC5oIg0KPiA+ICsjaW5jbHVkZSAicWVtdS9iY2QuaCINCj4gPiArI2lu Y2x1ZGUgInFlbXUvbG9nLmgiDQo+ID4gKyNpbmNsdWRlICJxYXBpL2Vycm9yLmgiDQo+ID4g KyNpbmNsdWRlICJxYXBpL3Zpc2l0b3IuaCINCj4gPiArI2luY2x1ZGUgInRyYWNlLmgiDQo+ ID4gKw0KPiA+ICsjZGVmaW5lIFRZUEVfUlg4OTAwICJyeDg5MDAiDQo+ID4gKyNkZWZpbmUg Ulg4OTAwKG9iaikgT0JKRUNUX0NIRUNLKFJYODkwMFN0YXRlLCAob2JqKSwgVFlQRV9SWDg5 MDApDQo+ID4gKw0KPiA+ICt0eXBlZGVmIHN0cnVjdCBSWDg5MDBTdGF0ZSB7DQo+ID4gK8Kg wqDCoMKgSTJDU2xhdmUgcGFyZW50X29iajsNCj4gPiArDQo+ID4gK8KgwqDCoMKgcHRpbWVy X3N0YXRlICpzZWNfdGltZXI7IC8qIHRyaWdnZXJlZCBvbmNlIHBlciBzZWNvbmQgKi8NCj4g PiArwqDCoMKgwqBwdGltZXJfc3RhdGUgKmZvdXRfdGltZXI7DQo+ID4gK8KgwqDCoMKgcHRp bWVyX3N0YXRlICpjb3VudGRvd25fdGltZXI7DQo+ID4gK8KgwqDCoMKgYm9vbCBmb3V0X3N0 YXRlOw0KPiA+ICvCoMKgwqDCoGludDY0X3Qgb2Zmc2V0Ow0KPiA+ICvCoMKgwqDCoHVpbnQ4 X3Qgd2Vla2RheTsgLyogU2F2ZWQgZm9yIGRlZmVycmVkIG9mZnNldCBjYWxjdWxhdGlvbiwg MC02IA0KPiA+ICovDQo+ID4gK8KgwqDCoMKgdWludDhfdCB3ZGF5X29mZnNldDsNCj4gPiAr wqDCoMKgwqB1aW50OF90IG52cmFtW1JYODkwMF9OVlJBTV9TSVpFXTsNCj4gPiArwqDCoMKg wqBpbnQzMl90IG52cmFtX29mZnNldDsgLyogV3JhcHBlZCB0byBzdGF5IHdpdGhpbg0KPiA+ IFJYODkwMF9OVlJBTV9TSVpFICovDQo+ID4gK8KgwqDCoMKgYm9vbCBhZGRyX2J5dGU7DQo+ ID4gK8KgwqDCoMKgdWludDhfdCBsYXN0X2ludGVycnVwdF9zZWNvbmRzOyAvKiBUaGUgbGFz dCB0aW1lIHRoZSBzZWNvbmQNCj4gPiB0aW1lciB0aWNrZWQgKi8NCj4gPiArwqDCoMKgwqAv KiB0aGUgbGFzdCBtaW51dGUgdGhlIHRpbWVyIHVwZGF0ZSBpbnRlcnJ1cHQgd2FzIHRyaWdn ZXJlZA0KPiA+IChpZiBlbmFibGVkKSAqLw0KPiA+ICvCoMKgwqDCoHVpbnQ4X3QgbGFzdF91 cGRhdGVfaW50ZXJydXB0X21pbnV0ZXM7DQo+ID4gK8KgwqDCoMKgZG91YmxlIHN1cHBseV92 b2x0YWdlOw0KPiA+ICvCoMKgwqDCoHFlbXVfaXJxIGludGVycnVwdF9waW47DQo+ID4gK8Kg wqDCoMKgcWVtdV9pcnEgZm91dF9waW47DQo+ID4gK30gUlg4OTAwU3RhdGU7DQo+ID4gKw0K PiA+ICtzdGF0aWMgY29uc3QgVk1TdGF0ZURlc2NyaXB0aW9uIHZtc3RhdGVfcng4OTAwID0g ew0KPiA+ICvCoMKgwqDCoC5uYW1lID0gInJ4ODkwMCIsDQo+ID4gK8KgwqDCoMKgLnZlcnNp b25faWQgPSAxLA0KPiA+ICvCoMKgwqDCoC5taW5pbXVtX3ZlcnNpb25faWQgPSAxLA0KPiA+ ICvCoMKgwqDCoC5maWVsZHMgPSAoVk1TdGF0ZUZpZWxkW10pIHsNCj4gPiArwqDCoMKgwqDC oMKgwqDCoFZNU1RBVEVfSTJDX1NMQVZFKHBhcmVudF9vYmosIFJYODkwMFN0YXRlKSwNCj4g PiArwqDCoMKgwqDCoMKgwqDCoFZNU1RBVEVfUFRJTUVSKHNlY190aW1lciwgUlg4OTAwU3Rh dGUpLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgVk1TVEFURV9QVElNRVIoZm91dF90aW1lciwg Ulg4OTAwU3RhdGUpLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgVk1TVEFURV9QVElNRVIoY291 bnRkb3duX3RpbWVyLCBSWDg5MDBTdGF0ZSksDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBWTVNU QVRFX0JPT0woZm91dF9zdGF0ZSwgUlg4OTAwU3RhdGUpLA0KPiA+ICvCoMKgwqDCoMKgwqDC oMKgVk1TVEFURV9JTlQ2NChvZmZzZXQsIFJYODkwMFN0YXRlKSwNCj4gPiArwqDCoMKgwqDC oMKgwqDCoFZNU1RBVEVfVUlOVDgod2Vla2RheSwgUlg4OTAwU3RhdGUpLA0KPiA+ICvCoMKg wqDCoMKgwqDCoMKgVk1TVEFURV9VSU5UOCh3ZGF5X29mZnNldCwgUlg4OTAwU3RhdGUpLA0K PiA+ICvCoMKgwqDCoMKgwqDCoMKgVk1TVEFURV9VSU5UOF9BUlJBWShudnJhbSwgUlg4OTAw U3RhdGUsDQo+ID4gUlg4OTAwX05WUkFNX1NJWkUpLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKg Vk1TVEFURV9JTlQzMihudnJhbV9vZmZzZXQsIFJYODkwMFN0YXRlKSwNCj4gPiArwqDCoMKg wqDCoMKgwqDCoFZNU1RBVEVfQk9PTChhZGRyX2J5dGUsIFJYODkwMFN0YXRlKSwNCj4gPiAr wqDCoMKgwqDCoMKgwqDCoFZNU1RBVEVfVUlOVDgobGFzdF9pbnRlcnJ1cHRfc2Vjb25kcywg Ulg4OTAwU3RhdGUpLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgVk1TVEFURV9VSU5UOChsYXN0 X3VwZGF0ZV9pbnRlcnJ1cHRfbWludXRlcywgUlg4OTAwU3RhdGUpLA0KPiA+ICvCoMKgwqDC oMKgwqDCoMKgVk1TVEFURV9FTkRfT0ZfTElTVCgpDQo+ID4gK8KgwqDCoMKgfQ0KPiA+ICt9 Ow0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgcng4OTAwX3Jlc2V0KERldmljZVN0YXRlICpk ZXYpOw0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgY2FwdHVyZV9jdXJyZW50X3RpbWUoUlg4 OTAwU3RhdGUgKnMpDQo+ID4gK3sNCj4gPiArwqDCoMKgwqAvKiBDYXB0dXJlIHRoZSBjdXJy ZW50IHRpbWUgaW50byB0aGUgc2Vjb25kYXJ5IHJlZ2lzdGVycw0KPiA+ICvCoMKgwqDCoMKg KiB3aGljaCB3aWxsIGJlIGFjdHVhbGx5IHJlYWQgYnkgdGhlIGRhdGEgdHJhbnNmZXIgb3Bl cmF0aW9uLg0KPiA+ICvCoMKgwqDCoMKgKi8NCj4gPiArwqDCoMKgwqBzdHJ1Y3QgdG0gbm93 Ow0KPiA+ICvCoMKgwqDCoHFlbXVfZ2V0X3RpbWVkYXRlKCZub3csIHMtPm9mZnNldCk7DQo+ ID4gK8KgwqDCoMKgcy0+bnZyYW1bU0VDT05EU10gPSB0b19iY2Qobm93LnRtX3NlYyk7DQo+ ID4gK8KgwqDCoMKgcy0+bnZyYW1bTUlOVVRFU10gPSB0b19iY2Qobm93LnRtX21pbik7DQo+ ID4gK8KgwqDCoMKgcy0+bnZyYW1bSE9VUlNdID0gdG9fYmNkKG5vdy50bV9ob3VyKTsNCj4g PiArDQo+ID4gK8KgwqDCoMKgcy0+bnZyYW1bV0VFS0RBWV0gPSAweDAxIDw8ICgobm93LnRt X3dkYXkgKyBzLT53ZGF5X29mZnNldCkgJQ0KPiA+IDcpOw0KPiA+ICvCoMKgwqDCoHMtPm52 cmFtW0RBWV0gPSB0b19iY2Qobm93LnRtX21kYXkpOw0KPiA+ICvCoMKgwqDCoHMtPm52cmFt W01PTlRIXSA9IHRvX2JjZChub3cudG1fbW9uICsgMSk7DQo+ID4gK8KgwqDCoMKgcy0+bnZy YW1bWUVBUl0gPSB0b19iY2Qobm93LnRtX3llYXIgJSAxMDApOw0KPiA+ICsNCj4gPiArwqDC oMKgwqBzLT5udnJhbVtFWFRfU0VDT05EU10gPSBzLT5udnJhbVtTRUNPTkRTXTsNCj4gPiAr wqDCoMKgwqBzLT5udnJhbVtFWFRfTUlOVVRFU10gPSBzLT5udnJhbVtNSU5VVEVTXTsNCj4g PiArwqDCoMKgwqBzLT5udnJhbVtFWFRfSE9VUlNdID0gcy0+bnZyYW1bSE9VUlNdOw0KPiA+ ICvCoMKgwqDCoHMtPm52cmFtW0VYVF9XRUVLREFZXSA9IHMtPm52cmFtW1dFRUtEQVldOw0K PiA+ICvCoMKgwqDCoHMtPm52cmFtW0VYVF9EQVldID0gcy0+bnZyYW1bREFZXTsNCj4gPiAr wqDCoMKgwqBzLT5udnJhbVtFWFRfTU9OVEhdID0gcy0+bnZyYW1bTU9OVEhdOw0KPiA+ICvC oMKgwqDCoHMtPm52cmFtW0VYVF9ZRUFSXSA9IHMtPm52cmFtW1lFQVJdOw0KPiANCj4gKw0K PiA+ICvCoMKgwqDCoHRyYWNlX3J4ODkwMF9jYXB0dXJlX2N1cnJlbnRfdGltZShub3cudG1f aG91ciwgbm93LnRtX21pbiwNCj4gPiBub3cudG1fc2VjLA0KPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAobm93LnRtX3dkYXkgKyBzLT53ZGF5X29mZnNldCkgJSA3LA0KPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBub3cudG1fbWRheSwgbm93LnRtX21vbiwgbm93LnRt X3llYXIgKyAxOTAwLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzLT5udnJhbVtI T1VSU10sIHMtPm52cmFtW01JTlVURVNdLCBzLT5udnJhbVtTRUNPTkRTXSwNCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcy0+bnZyYW1bV0VFS0RBWV0sIHMtPm52cmFtW0RBWV0s IHMtPm52cmFtW01PTlRIXSwgcy0NCj4gPiA+bnZyYW1bWUVBUl0pOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICsvKioNCj4gPiArICogSW5jcmVtZW50IHRoZSBpbnRlcm5hbCByZWdpc3RlciBw b2ludGVyLCBkZWFsaW5nIHdpdGggd3JhcHBpbmcNCj4gPiArICogQHBhcmFtIHMgdGhlIFJU QyB0byBvcGVyYXRlIG9uDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgdm9pZCBpbmNfcmVncHRy KFJYODkwMFN0YXRlICpzKQ0KPiA+ICt7DQo+ID4gK8KgwqDCoMKgLyogVGhlIHJlZ2lzdGVy IHBvaW50ZXIgd3JhcHMgYXJvdW5kIGFmdGVyIDB4MUYNCj4gPiArwqDCoMKgwqDCoCovDQo+ ID4gK8KgwqDCoMKgcy0+bnZyYW1fb2Zmc2V0ID0gKHMtPm52cmFtX29mZnNldCArIDEpICYg KFJYODkwMF9OVlJBTV9TSVpFIC0NCj4gPiAxKTsNCj4gPiArwqDCoMKgwqB0cmFjZV9yeDg5 MDBfcmVncHRyX3VwZGF0ZShzLT5udnJhbV9vZmZzZXQpOw0KPiA+ICsNCj4gPiArwqDCoMKg wqBpZiAocy0+bnZyYW1fb2Zmc2V0ID09IFNUQVJUX0FERFJFU1MpIHsNCj4gPiArwqDCoMKg wqDCoMKgwqDCoHRyYWNlX3J4ODkwMF9yZWdwdHJfb3ZlcmZsb3coKTsNCj4gPiArwqDCoMKg wqDCoMKgwqDCoGNhcHR1cmVfY3VycmVudF90aW1lKHMpOw0KPiA+ICvCoMKgwqDCoH0NCj4g PiArfQ0KPiA+ICsNCj4gPiArI2RlZmluZSBJTlZBTElEX1dFRUtEQVkgMHhmZg0KPiA+ICsN Cj4gPiArLyoqDQo+ID4gKyAqIFJlY2VpdmUgYW4gSTJDIEV2ZW50DQo+ID4gKyAqIEBwYXJh bSBpMmMgdGhlIGkyYyBkZXZpY2UgaW5zdGFuY2UNCj4gPiArICogQHBhcmFtIGV2ZW50IHRo ZSBldmVudCB0byBoYW5kbGUNCj4gPiArICovDQo+ID4gK3N0YXRpYyB2b2lkIHJ4ODkwMF9l dmVudChJMkNTbGF2ZSAqaTJjLCBlbnVtIGkyY19ldmVudCBldmVudCkNCj4gPiArew0KPiA+ ICvCoMKgwqDCoFJYODkwMFN0YXRlICpzID0gUlg4OTAwKGkyYyk7DQo+ID4gKw0KPiA+ICvC oMKgwqDCoHN3aXRjaCAoZXZlbnQpIHsNCj4gPiArwqDCoMKgwqBjYXNlIEkyQ19TVEFSVF9S RUNWOg0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgLyogSW4gaC93LCB0aW1lIGNhcHR1cmUgaGFw cGVucyBvbiBhbnkgU1RBUlQgY29uZGl0aW9uLA0KPiA+IG5vdCBqdXN0IGENCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgKiBTVEFSVF9SRUNWLiBGb3IgdGhlIGVtdWxhdGlvbiwgaXQgZG9l c24ndCBhY3R1YWxseQ0KPiA+IG1hdHRlciwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgKiBz aW5jZSBhIFNUQVJUX1JFQ1YgaGFzIHRvIG9jY3VyIGJlZm9yZSB0aGUgZGF0YSBjYW4gYmUN Cj4gPiByZWFkLg0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqAqLw0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgY2FwdHVyZV9jdXJyZW50X3RpbWUocyk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBi cmVhazsNCj4gPiArwqDCoMKgwqBjYXNlIEkyQ19TVEFSVF9TRU5EOg0KPiA+ICvCoMKgwqDC oMKgwqDCoMKgcy0+YWRkcl9ieXRlID0gdHJ1ZTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGJy ZWFrOw0KPiA+ICvCoMKgwqDCoGNhc2UgSTJDX0ZJTklTSDoNCj4gPiArwqDCoMKgwqDCoMKg wqDCoGlmIChzLT53ZWVrZGF5IDwgNykgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAvKiBXZSBkZWZlciB0aGUgd2Vla2RheSBjYWxjdWxhdGlvbiBhcyBpdCBpcyBoYW5kZWQg dG8NCj4gPiB1cyBiZWZvcmUNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqIHRo ZSBkYXRlIGhhcyBiZWVuIHVwZGF0ZWQuIElmIHdlIGNhbGN1bGF0ZSB0aGUNCj4gPiB3ZWVr ZGF5IG9mZnNldA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCogd2hlbiBpdCBp cyBwYXNzZWQgdG8gdXMsIHdlIHdpbGwgaW5jb3JyZWN0bHkNCj4gPiBkZXRlcm1pbmUgaXQN Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqIGJhc2VkIG9uIHRoZSBjdXJyZW50 IGVtdWxhdGVkIGRhdGUsIHJhdGhlciB0aGFuIHRoZQ0KPiA+IGRhdGUgdGhhdA0KPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCogaGFzIGJlZW4gd3JpdHRlbi4NCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqLw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBzdHJ1Y3QgdG0gbm93Ow0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBxZW11X2dl dF90aW1lZGF0ZSgmbm93LCBzLT5vZmZzZXQpOw0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcy0+d2RheV9vZmZzZXQgPSAocy0+d2Vla2RheSAtIG5vdy50bV93ZGF5 ICsgNykgJSA3Ow0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdHJhY2Vf cng4OTAwX2V2ZW50X3dlZWtkYXkocy0+d2Vla2RheSwgQklUKHMtDQo+ID4gPndlZWtkYXkp LA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcy0+d2Rh eV9vZmZzZXQpOw0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcy0+d2Vl a2RheSA9IElOVkFMSURfV0VFS0RBWTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoH0NCj4gPiAr wqDCoMKgwqDCoMKgwqDCoGJyZWFrOw0KPiA+ICsNCj4gPiArwqDCoMKgwqBkZWZhdWx0Og0K PiA+ICvCoMKgwqDCoMKgwqDCoMKgYnJlYWs7DQo+ID4gK8KgwqDCoMKgfQ0KPiA+ICt9DQo+ ID4gKw0KPiA+ICsvKioNCj4gPiArICogUGVyZm9ybSBhbiBpMmMgcmVjZWl2ZSBhY3Rpb24N Cj4gPiArICogQHBhcmFtIGkyYyB0aGUgaTJjIGRldmljZSBpbnN0YW5jZQ0KPiA+ICsgKiBA cmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCByZWdpc3Rlcg0KPiA+ICsgKiBAcG9z dCB0aGUgaW50ZXJuYWwgcmVnaXN0ZXIgcG9pbnRlciBpcyBpbmNyZW1lbnRlZA0KPiA+ICsg Ki8NCj4gPiArc3RhdGljIGludCByeDg5MDBfcmVjdihJMkNTbGF2ZSAqaTJjKQ0KPiA+ICt7 DQo+ID4gK8KgwqDCoMKgUlg4OTAwU3RhdGUgKnMgPSBSWDg5MDAoaTJjKTsNCj4gPiArwqDC oMKgwqB1aW50OF90IHJlcyA9IHMtPm52cmFtW3MtPm52cmFtX29mZnNldF07DQo+ID4gK8Kg wqDCoMKgdHJhY2Vfcng4OTAwX3JlYWRfcmVnaXN0ZXIocy0+bnZyYW1fb2Zmc2V0LCByZXMp Ow0KPiA+ICvCoMKgwqDCoGluY19yZWdwdHIocyk7DQo+ID4gK8KgwqDCoMKgcmV0dXJuIHJl czsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIERpc2FibGUgdGhlIGNvdW50 ZG93biB0aW1lcg0KPiA+ICsgKiBAcGFyYW0gcyB0aGUgUlRDIHRvIG9wZXJhdGUgb24NCj4g PiArICovDQo+ID4gK3N0YXRpYyB2b2lkIGRpc2FibGVfY291bnRkb3duX3RpbWVyKFJYODkw MFN0YXRlICpzKQ0KPiA+ICt7DQo+ID4gK8KgwqDCoMKgdHJhY2Vfcng4OTAwX2Rpc2FibGVf Y291bnRkb3duX3RpbWVyKCk7DQo+ID4gK8KgwqDCoMKgcHRpbWVyX3N0b3Aocy0+Y291bnRk b3duX3RpbWVyKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIEVuYWJsZSB0 aGUgY291bnRkb3duIHRpbWVyDQo+ID4gKyAqIEBwYXJhbSBzIHRoZSBSVEMgdG8gb3BlcmF0 ZSBvbg0KPiA+ICsgKi8NCj4gPiArc3RhdGljIHZvaWQgZW5hYmxlX2NvdW50ZG93bl90aW1l cihSWDg5MDBTdGF0ZSAqcykNCj4gPiArew0KPiA+ICvCoMKgwqDCoHRyYWNlX3J4ODkwMF9l bmFibGVfY291bnRkb3duX3RpbWVyKCk7DQo+ID4gK8KgwqDCoMKgcHRpbWVyX3J1bihzLT5j b3VudGRvd25fdGltZXIsIDApOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICog VGljayB0aGUgY291bnRkb3duIHRpbWVyDQo+ID4gKyAqIEBwYXJhbSBvcGFxdWUgdGhlIGRl dmljZSBpbnN0YW5jZQ0KPiA+ICsgKi8NCj4gPiArc3RhdGljIHZvaWQgcng4OTAwX2NvdW50 ZG93bl90aWNrKHZvaWQgKm9wYXF1ZSkNCj4gPiArew0KPiA+ICvCoMKgwqDCoFJYODkwMFN0 YXRlICpzID0gKFJYODkwMFN0YXRlICopb3BhcXVlOw0KPiA+ICsNCj4gPiArwqDCoMKgwqB1 aW50MTZfdCBjb3VudCA9IHMtPm52cmFtW1RJTUVSX0NPVU5URVJfMF0gfA0KPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAoKHMtPm52cmFtW1RJTUVSX0NPVU5URVJfMV0gJiAweDBG KSA8PCA4KTsNCj4gPiArwqDCoMKgwqB0cmFjZV9yeDg5MDBfY291bnRkb3duX3RpY2soY291 bnQpOw0KPiA+ICvCoMKgwqDCoGNvdW50LS07DQo+ID4gKw0KPiA+ICvCoMKgwqDCoHMtPm52 cmFtW1RJTUVSX0NPVU5URVJfMF0gPSAodWludDhfdCkoY291bnQgJiAweDAwZmYpOw0KPiA+ ICvCoMKgwqDCoHMtPm52cmFtW1RJTUVSX0NPVU5URVJfMV0gPSAodWludDhfdCkoKGNvdW50 ICYgMHgwZjAwKSA+PiA4KTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgaWYgKGNvdW50ID09IDAp IHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoHRyYWNlX3J4ODkwMF9jb3VudGRvd25fZWxhcHNl ZCgpOw0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGRpc2FibGVfY291bnRkb3duX3Rp bWVyKHMpOw0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoHMtPm52cmFtW0ZMQUdfUkVH SVNURVJdIHw9IEZMQUdfTUFTS19URjsNCj4gPiArDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBp ZiAocy0+bnZyYW1bQ09OVFJPTF9SRUdJU1RFUl0gJiBDVFJMX01BU0tfVElFKSB7DQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRyYWNlX3J4ODkwMF9maXJlX2ludGVycnVwdCgp Ow0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBxZW11X2lycV9wdWxzZShzLT5pbnRl cnJ1cHRfcGluKTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoH0NCj4gPiArwqDCoMKgwqB9DQo+ ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBEaXNhYmxlIHRoZSBwZXIgc2Vjb25k IHRpbWVyDQo+ID4gKyAqIEBwYXJhbSBzIHRoZSBSVEMgdG8gb3BlcmF0ZSBvbg0KPiA+ICsg Ki8NCj4gPiArc3RhdGljIHZvaWQgZGlzYWJsZV90aW1lcihSWDg5MDBTdGF0ZSAqcykNCj4g PiArew0KPiA+ICvCoMKgwqDCoHRyYWNlX3J4ODkwMF9kaXNhYmxlX3RpbWVyKCk7DQo+ID4g K8KgwqDCoMKgcHRpbWVyX3N0b3Aocy0+c2VjX3RpbWVyKTsNCj4gPiArfQ0KPiA+ICsNCj4g PiArLyoqDQo+ID4gKyAqIEVuYWJsZSB0aGUgcGVyIHNlY29uZCB0aW1lcg0KPiA+ICsgKiBA cGFyYW0gcyB0aGUgUlRDIHRvIG9wZXJhdGUgb24NCj4gPiArICovDQo+ID4gK3N0YXRpYyB2 b2lkIGVuYWJsZV90aW1lcihSWDg5MDBTdGF0ZSAqcykNCj4gPiArew0KPiA+ICvCoMKgwqDC oHRyYWNlX3J4ODkwMF9lbmFibGVfdGltZXIoKTsNCj4gPiArwqDCoMKgwqBwdGltZXJfcnVu KHMtPnNlY190aW1lciwgMCk7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBU aWNrIHRoZSBwZXIgc2Vjb25kIHRpbWVyIChjYW4gYmUgY2FsbGVkIG1vcmUgZnJlcXVlbnRs eSBhcyBpdA0KPiA+IGVhcmx5IGV4aXRzDQo+ID4gKyAqIGlmIHRoZSB3YWxsIGNsb2NrIGhh cyBub3QgcHJvZ3Jlc3NlZCkNCj4gPiArICogQHBhcmFtIG9wYXF1ZSB0aGUgUlRDIHRvIHRp Y2sNCj4gPiArICovDQo+ID4gK3N0YXRpYyB2b2lkIHJ4ODkwMF90aW1lcl90aWNrKHZvaWQg Km9wYXF1ZSkNCj4gPiArew0KPiA+ICvCoMKgwqDCoFJYODkwMFN0YXRlICpzID0gKFJYODkw MFN0YXRlICopb3BhcXVlOw0KPiA+ICvCoMKgwqDCoHN0cnVjdCB0bSBub3c7DQo+ID4gK8Kg wqDCoMKgYm9vbCBmaXJlX2ludGVycnVwdCA9IGZhbHNlOw0KPiA+ICvCoMKgwqDCoGJvb2wg YWxhcm1fd2Vla19kYXlfbWF0Y2hlczsNCj4gPiArDQo+ID4gK8KgwqDCoMKgcWVtdV9nZXRf dGltZWRhdGUoJm5vdywgcy0+b2Zmc2V0KTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgaWYgKG5v dy50bV9zZWMgPT0gcy0+bGFzdF9pbnRlcnJ1cHRfc2Vjb25kcykgew0KPiA+ICvCoMKgwqDC oMKgwqDCoMKgcmV0dXJuOw0KPiA+ICvCoMKgwqDCoH0NCj4gPiArDQo+ID4gK8KgwqDCoMKg cy0+bGFzdF9pbnRlcnJ1cHRfc2Vjb25kcyA9IG5vdy50bV9zZWM7DQo+ID4gKw0KPiA+ICvC oMKgwqDCoHRyYWNlX3J4ODkwMF90aWNrKCk7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoC8qIFVw ZGF0ZSB0aW1lciBpbnRlcnJ1cHQgKi8NCj4gPiArwqDCoMKgwqBpZiAocy0+bnZyYW1bQ09O VFJPTF9SRUdJU1RFUl0gJiBDVFJMX01BU0tfVUlFKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKg wqBpZiAoKHMtPm52cmFtW0VYVEVOU0lPTl9SRUdJU1RFUl0gJiBFWFRfTUFTS19VU0VMKSAm Jg0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG5vdy50bV9taW4gIT0g cy0+bGFzdF91cGRhdGVfaW50ZXJydXB0X21pbnV0ZXMpIHsNCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcy0+bGFzdF91cGRhdGVfaW50ZXJydXB0X21pbnV0ZXMgPSBub3cudG1f bWluOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzLT5udnJhbVtGTEFHX1JFR0lT VEVSXSB8PSBGTEFHX01BU0tfVUY7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZp cmVfaW50ZXJydXB0ID0gdHJ1ZTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoH0gZWxzZSBpZiAo IShzLT5udnJhbVtFWFRFTlNJT05fUkVHSVNURVJdICYNCj4gPiBFWFRfTUFTS19VU0VMKSkg ew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBwZXIgc2Vjb25kIHVwZGF0ZSBp bnRlcnJ1cHQgKi8NCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcy0+bnZyYW1bRkxB R19SRUdJU1RFUl0gfD0gRkxBR19NQVNLX1VGOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBmaXJlX2ludGVycnVwdCA9IHRydWU7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqB9DQo+ ID4gK8KgwqDCoMKgfQ0KPiA+ICsNCj4gPiArwqDCoMKgwqAvKiBBbGFybSBpbnRlcnJ1cHQg Ki8NCj4gPiArwqDCoMKgwqBpZiAoKHMtPm52cmFtW0VYVEVOU0lPTl9SRUdJU1RFUl0gJiBF WFRfTUFTS19XQURBKSkgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgYWxhcm1fd2Vla19kYXlf bWF0Y2hlcyA9DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHMtPm52cmFtW0FMQVJN X1dFRUtfREFZXSA9PSB0b19iY2Qobm93LnRtX21kYXkpOw0KPiA+ICvCoMKgwqDCoH0gZWxz ZSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBhbGFybV93ZWVrX2RheV9tYXRjaGVzID0NCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcy0+bnZyYW1bQUxBUk1fV0VFS19EQVldID09 DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgwMSA8PCAoKG5vdy50 bV93ZGF5ICsgcy0+d2RheV9vZmZzZXQpICUgNyk7DQo+ID4gK8KgwqDCoMKgfQ0KPiA+ICsN Cj4gPiArwqDCoMKgwqBpZiAoKHMtPm52cmFtW0NPTlRST0xfUkVHSVNURVJdICYgQ1RSTF9N QVNLX0FJRSkgJiYgbm93LnRtX3NlYw0KPiA+ID09IDAgJiYNCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcy0+bnZyYW1bQUxBUk1fTUlOVVRFXSA9PSB0b19iY2Qobm93LnRtX21p bikgJiYNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcy0+bnZyYW1bQUxBUk1fSE9V Ul0gPT0gdG9fYmNkKG5vdy50bV9ob3VyKSAmJg0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBhbGFybV93ZWVrX2RheV9tYXRjaGVzKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqB0 cmFjZV9yeDg5MDBfdHJpZ2dlcl9hbGFybSgpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgcy0+ bnZyYW1bRkxBR19SRUdJU1RFUl0gfD0gRkxBR19NQVNLX0FGOw0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgZmlyZV9pbnRlcnJ1cHQgPSB0cnVlOw0KPiA+ICvCoMKgwqDCoH0NCj4gPiArDQo+ ID4gK8KgwqDCoMKgaWYgKGZpcmVfaW50ZXJydXB0KSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKg wqB0cmFjZV9yeDg5MDBfZmlyZV9pbnRlcnJ1cHQoKTsNCj4gPiArwqDCoMKgwqDCoMKgwqDC oHFlbXVfaXJxX3B1bHNlKHMtPmludGVycnVwdF9waW4pOw0KPiA+ICvCoMKgwqDCoH0NCj4g PiArfQ0KPiA+ICsNCj4gPiArDQo+ID4gKyNkZWZpbmUgQ09VTlRET1dOX1RJTUVSX0ZSRVEg NDA5Ng0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIFZhbGlkYXRlIHRoZSBleHRlbnNpb24g cmVnaXN0ZXIgYW5kIHBlcmZvcm0gYWN0aW9ucyBiYXNlZCBvbg0KPiA+IHRoZSBiaXRzDQo+ ID4gKyAqIEBwYXJhbSBzIHRoZSBSVEMgdG8gb3BlcmF0ZSBvbg0KPiA+ICsgKiBAcGFyYW0g ZGF0YSB0aGUgbmV3IGRhdGEgZm9yIHRoZSBleHRlbnNpb24gcmVnaXN0ZXINCj4gPiArICov DQo+ID4gK3N0YXRpYyB2b2lkIHVwZGF0ZV9leHRlbnNpb25fcmVnaXN0ZXIoUlg4OTAwU3Rh dGUgKnMsIHVpbnQ4X3QNCj4gPiBkYXRhKQ0KPiA+ICt7DQo+ID4gK8KgwqDCoMKgaWYgKGRh dGEgJiBFWFRfTUFTS19URVNUKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBxZW11X2xvZ19t YXNrKExPR19HVUVTVF9FUlJPUiwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAiVGVzdCBiaXQgaXMgZW5hYmxlZCBidXQgaXMgZm9yYmlkZGVuIGJ5IHRoZQ0KPiA+ IG1hbnVmYWN0dXJlciIpOw0KPiA+ICvCoMKgwqDCoH0NCj4gPiArDQo+ID4gK8KgwqDCoMKg aWYgKChkYXRhIF4gcy0+bnZyYW1bRVhURU5TSU9OX1JFR0lTVEVSXSkgJg0KPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAoRVhUX01BU0tfRlNFTDAgfCBFWFRfTUFTS19GU0VMMSkp IHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoC8qIEZTRUx4IGhhcyBjaGFuZ2VkICovDQo+ID4g Kw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgc3dpdGNoIChkYXRhICYgKEVYVF9NQVNLX0ZTRUww IHwgRVhUX01BU0tfRlNFTDEpKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBjYXNlIEVYVF9N QVNLX0ZTRUwwOg0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0cmFjZV9yeDg5MDBf c2V0X2ZvdXQoMTAyNCk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHB0aW1lcl9z ZXRfbGltaXQocy0+Zm91dF90aW1lciwgMzIsIDEpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBicmVhazsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGNhc2UgRVhUX01BU0tfRlNF TDE6DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRyYWNlX3J4ODkwMF9zZXRfZm91 dCgxKTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHRpbWVyX3NldF9saW1pdChz LT5mb3V0X3RpbWVyLCAzMjc2OCwgMSk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGJyZWFrOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgY2FzZSAwOg0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgY2FzZSAoRVhUX01BU0tfRlNFTDAgfCBFWFRfTUFTS19GU0VMMSk6DQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRyYWNlX3J4ODkwMF9zZXRfZm91dCgzMjc2OCk7DQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHB0aW1lcl9zZXRfbGltaXQocy0+Zm91dF90 aW1lciwgMSwgMSk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOw0KPiA+ ICvCoMKgwqDCoMKgwqDCoMKgfQ0KPiA+ICvCoMKgwqDCoH0NCj4gPiArDQo+ID4gK8KgwqDC oMKgaWYgKChkYXRhIF4gcy0+bnZyYW1bRVhURU5TSU9OX1JFR0lTVEVSXSkgJg0KPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoRVhUX01BU0tfVFNFTDAgfCBFWFRfTUFTS19UU0VM MSkpIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoC8qIFRTRUx4IGhhcyBjaGFuZ2VkICovDQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqBzd2l0Y2ggKGRhdGEgJiAoRVhUX01BU0tfVFNFTDAgfCBF WFRfTUFTS19UU0VMMSkpIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGNhc2UgMDoNCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdHJhY2Vfcng4OTAwX3NldF9jb3VudGRvd25fdGlt ZXIoNjQpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwdGltZXJfc2V0X2xpbWl0 KHMtPmNvdW50ZG93bl90aW1lciwNCj4gPiBDT1VOVERPV05fVElNRVJfRlJFUSAvIDY0LCAx KTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7DQo+ID4gK8KgwqDCoMKg wqDCoMKgwqBjYXNlIEVYVF9NQVNLX1RTRUwwOg0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB0cmFjZV9yeDg5MDBfc2V0X2NvdW50ZG93bl90aW1lcigxKTsNCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcHRpbWVyX3NldF9saW1pdChzLT5jb3VudGRvd25fdGltZXIs DQo+ID4gQ09VTlRET1dOX1RJTUVSX0ZSRVEsIDEpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBicmVhazsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGNhc2UgRVhUX01BU0tfVFNF TDE6DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRyYWNlX3J4ODkwMF9zZXRfY291 bnRkb3duX3RpbWVyX3Blcl9taW51dGUoKTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcHRpbWVyX3NldF9saW1pdChzLT5jb3VudGRvd25fdGltZXIsDQo+ID4gQ09VTlRET1dO X1RJTUVSX0ZSRVEgKiA2MCwgMSk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJy ZWFrOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgY2FzZSAoRVhUX01BU0tfVFNFTDAgfCBFWFRf TUFTS19UU0VMMSk6DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRyYWNlX3J4ODkw MF9zZXRfY291bnRkb3duX3RpbWVyKENPVU5URE9XTl9USU1FUl9GUkVRKQ0KPiA+IDsNCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHRpbWVyX3NldF9saW1pdChzLT5jb3VudGRv d25fdGltZXIsIDEsIDEpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsN Cj4gPiArwqDCoMKgwqDCoMKgwqDCoH0NCj4gPiArwqDCoMKgwqB9DQo+ID4gKw0KPiA+ICvC oMKgwqDCoGlmIChkYXRhICYgRVhUX01BU0tfVEUpIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDC oGVuYWJsZV9jb3VudGRvd25fdGltZXIocyk7DQo+ID4gK8KgwqDCoMKgfQ0KPiA+ICsNCj4g PiArwqDCoMKgwqBzLT5udnJhbVtFWFRFTlNJT05fUkVHSVNURVJdID0gZGF0YTsNCj4gPiAr wqDCoMKgwqBzLT5udnJhbVtFWFRfRVhURU5TSU9OX1JFR0lTVEVSXSA9IGRhdGE7DQo+ID4g Kw0KPiA+ICt9DQo+ID4gKy8qKg0KPiA+ICsgKiBWYWxpZGF0ZSB0aGUgY29udHJvbCByZWdp c3RlciBhbmQgcGVyZm9ybSBhY3Rpb25zIGJhc2VkIG9uIHRoZQ0KPiA+IGJpdHMNCj4gPiAr ICogQHBhcmFtIHMgdGhlIFJUQyB0byBvcGVyYXRlIG9uDQo+ID4gKyAqIEBwYXJhbSBkYXRh IHRoZSBuZXcgdmFsdWUgZm9yIHRoZSBjb250cm9sIHJlZ2lzdGVyDQo+ID4gKyAqLw0KPiA+ ICsNCj4gPiArc3RhdGljIHZvaWQgdXBkYXRlX2NvbnRyb2xfcmVnaXN0ZXIoUlg4OTAwU3Rh dGUgKnMsIHVpbnQ4X3QgZGF0YSkNCj4gPiArew0KPiA+ICvCoMKgwqDCoHVpbnQ4X3QgZGlm Zm1hc2sgPSB+cy0+bnZyYW1bQ09OVFJPTF9SRUdJU1RFUl0gJiBkYXRhOw0KPiA+ICsNCj4g PiArwqDCoMKgwqBpZiAoZGlmZm1hc2sgJiBDVFJMX01BU0tfV1AwKSB7DQo+ID4gK8KgwqDC oMKgwqDCoMKgwqBkYXRhICY9IH5DVFJMX01BU0tfV1AwOw0KPiA+ICvCoMKgwqDCoMKgwqDC oMKgcWVtdV9sb2dfbWFzayhMT0dfR1VFU1RfRVJST1IsDQo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCJBdHRlbXB0IHRvIHdyaXRlIHRvIHdyaXRlIHByb3RlY3RlZCBiaXQgJWQg aW4gY29udHJvbA0KPiA+IHJlZ2lzdGVyIiwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgQ1RSTF9SRUdfV1AwKTsNCj4gPiArwqDCoMKgwqB9DQo+ID4gKw0KPiA+ICvCoMKgwqDC oGlmIChkaWZmbWFzayAmIENUUkxfTUFTS19XUDEpIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDC oGRhdGEgJj0gfkNUUkxfTUFTS19XUDE7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBxZW11X2xv Z19tYXNrKExPR19HVUVTVF9FUlJPUiwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IkF0dGVtcHQgdG8gd3JpdGUgdG8gd3JpdGUgcHJvdGVjdGVkIGJpdCAlZCBpbiBjb250cm9s DQo+ID4gcmVnaXN0ZXIiLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBDVFJMX1JF R19XUDEpOw0KPiA+ICvCoMKgwqDCoH0NCj4gPiArDQo+ID4gK8KgwqDCoMKgaWYgKGRhdGEg JiBDVFJMX01BU0tfUkVTRVQpIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGRhdGEgJj0gfkNU UkxfTUFTS19SRVNFVDsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoHJ4ODkwMF9yZXNldChERVZJ Q0UocykpOw0KPiA+ICvCoMKgwqDCoH0NCj4gPiArDQo+ID4gK8KgwqDCoMKgaWYgKGRpZmZt YXNrICYgQ1RSTF9NQVNLX1VJRSkgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgLyogVXBkYXRl IGludGVycnVwdHMgd2VyZSBvZmYgYW5kIGFyZSBub3cgb24gKi8NCj4gPiArwqDCoMKgwqDC oMKgwqDCoHN0cnVjdCB0bSBub3c7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgdHJh Y2Vfcng4OTAwX2VuYWJsZV91cGRhdGVfdGltZXIoKTsNCj4gPiArDQo+ID4gK8KgwqDCoMKg wqDCoMKgwqBxZW11X2dldF90aW1lZGF0ZSgmbm93LCBzLT5vZmZzZXQpOw0KPiA+ICsNCj4g PiArwqDCoMKgwqDCoMKgwqDCoHMtPmxhc3RfdXBkYXRlX2ludGVycnVwdF9taW51dGVzID0g bm93LnRtX21pbjsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoHMtPmxhc3RfaW50ZXJydXB0X3Nl Y29uZHMgPSBub3cudG1fc2VjOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgZW5hYmxlX3RpbWVy KHMpOw0KPiA+ICvCoMKgwqDCoH0NCj4gPiArDQo+ID4gK8KgwqDCoMKgaWYgKGRpZmZtYXNr ICYgQ1RSTF9NQVNLX0FJRSkgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgLyogQWxhcm0gaW50 ZXJydXB0cyB3ZXJlIG9mZiBhbmQgYXJlIG5vdyBvbiAqLw0KPiA+ICvCoMKgwqDCoMKgwqDC oMKgc3RydWN0IHRtIG5vdzsNCj4gPiArDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqB0cmFjZV9y eDg5MDBfZW5hYmxlX2FsYXJtKCk7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgcWVt dV9nZXRfdGltZWRhdGUoJm5vdywgcy0+b2Zmc2V0KTsNCj4gPiArDQo+ID4gK8KgwqDCoMKg wqDCoMKgwqBzLT5sYXN0X2ludGVycnVwdF9zZWNvbmRzID0gbm93LnRtX3NlYzsNCj4gPiAr wqDCoMKgwqDCoMKgwqDCoGVuYWJsZV90aW1lcihzKTsNCj4gPiArwqDCoMKgwqB9DQo+ID4g Kw0KPiA+ICvCoMKgwqDCoGlmICghKGRhdGEgJiAoQ1RSTF9NQVNLX1VJRSB8IENUUkxfTUFT S19BSUUpKSkgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgZGlzYWJsZV90aW1lcihzKTsNCj4g PiArwqDCoMKgwqB9DQo+ID4gKw0KPiA+ICvCoMKgwqDCoHMtPm52cmFtW0NPTlRST0xfUkVH SVNURVJdID0gZGF0YTsNCj4gPiArwqDCoMKgwqBzLT5udnJhbVtFWFRfQ09OVFJPTF9SRUdJ U1RFUl0gPSBkYXRhOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogVmFsaWRh dGUgdGhlIGZsYWcgcmVnaXN0ZXINCj4gPiArICogQHBhcmFtIHMgdGhlIFJUQyB0byBvcGVy YXRlIG9uDQo+ID4gKyAqIEBwYXJhbSBkYXRhIHRoZSBuZXcgdmFsdWUgZm9yIHRoZSBmbGFn IHJlZ2lzdGVyDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgdm9pZCB2YWxpZGF0ZV9mbGFnX3Jl Z2lzdGVyKFJYODkwMFN0YXRlICpzLCB1aW50OF90ICpkYXRhKQ0KPiA+ICt7DQo+ID4gK8Kg wqDCoMKgdWludDhfdCBkaWZmbWFzayA9IH5zLT5udnJhbVtGTEFHX1JFR0lTVEVSXSAmICpk YXRhOw0KPiA+ICsNCj4gPiArwqDCoMKgwqBpZiAoZGlmZm1hc2sgJiBGTEFHX01BU0tfVkRF VCkgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgKmRhdGEgJj0gfkZMQUdfTUFTS19WREVUOw0K PiA+ICvCoMKgwqDCoMKgwqDCoMKgcWVtdV9sb2dfbWFzayhMT0dfR1VFU1RfRVJST1IsDQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJPbmx5IDAgY2FuIGJlIHdyaXR0ZW4gdG8g VkRFVCBiaXQgJWQgaW4gdGhlIGZsYWcNCj4gPiByZWdpc3RlciIsDQo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoEZMQUdfUkVHX1ZERVQpOw0KPiA+ICvCoMKgwqDCoH0NCj4gPiAr DQo+ID4gK8KgwqDCoMKgaWYgKGRpZmZtYXNrICYgRkxBR19NQVNLX1ZMRikgew0KPiA+ICvC oMKgwqDCoMKgwqDCoMKgKmRhdGEgJj0gfkZMQUdfTUFTS19WTEY7DQo+ID4gK8KgwqDCoMKg wqDCoMKgwqBxZW11X2xvZ19tYXNrKExPR19HVUVTVF9FUlJPUiwNCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIk9ubHkgMCBjYW4gYmUgd3JpdHRlbiB0byBWTEYgYml0ICVkIGlu IHRoZSBmbGFnDQo+ID4gcmVnaXN0ZXIiLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBGTEFHX1JFR19WTEYpOw0KPiA+ICvCoMKgwqDCoH0NCj4gPiArDQo+ID4gK8KgwqDCoMKg aWYgKGRpZmZtYXNrICYgRkxBR19NQVNLX1VOVVNFRF8yKSB7DQo+ID4gK8KgwqDCoMKgwqDC oMKgwqAqZGF0YSAmPSB+RkxBR19NQVNLX1VOVVNFRF8yOw0KPiA+ICvCoMKgwqDCoMKgwqDC oMKgcWVtdV9sb2dfbWFzayhMT0dfR1VFU1RfRVJST1IsDQo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCJPbmx5IDAgY2FuIGJlIHdyaXR0ZW4gdG8gdW51c2VkIGJpdCAlZCBpbiB0 aGUgZmxhZw0KPiA+IHJlZ2lzdGVyIiwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg RkxBR19SRUdfVU5VU0VEXzIpOw0KPiA+ICvCoMKgwqDCoH0NCj4gPiArDQo+ID4gK8KgwqDC oMKgaWYgKGRpZmZtYXNrICYgRkxBR19NQVNLX1VOVVNFRF82KSB7DQo+ID4gK8KgwqDCoMKg wqDCoMKgwqAqZGF0YSAmPSB+RkxBR19NQVNLX1VOVVNFRF82Ow0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgcWVtdV9sb2dfbWFzayhMT0dfR1VFU1RfRVJST1IsDQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCJPbmx5IDAgY2FuIGJlIHdyaXR0ZW4gdG8gdW51c2VkIGJpdCAlZCBp biB0aGUgZmxhZw0KPiA+IHJlZ2lzdGVyIiwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgRkxBR19SRUdfVU5VU0VEXzYpOw0KPiA+ICvCoMKgwqDCoH0NCj4gPiArDQo+ID4gK8Kg wqDCoMKgaWYgKGRpZmZtYXNrICYgRkxBR19NQVNLX1VOVVNFRF83KSB7DQo+ID4gK8KgwqDC oMKgwqDCoMKgwqAqZGF0YSAmPSB+RkxBR19NQVNLX1VOVVNFRF83Ow0KPiA+ICvCoMKgwqDC oMKgwqDCoMKgcWVtdV9sb2dfbWFzayhMT0dfR1VFU1RfRVJST1IsDQo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCJPbmx5IDAgY2FuIGJlIHdyaXR0ZW4gdG8gdW51c2VkIGJpdCAl ZCBpbiB0aGUgZmxhZw0KPiA+IHJlZ2lzdGVyIiwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgRkxBR19SRUdfVU5VU0VEXzcpOw0KPiA+ICvCoMKgwqDCoH0NCj4gPiArfQ0KPiA+ ICsNCj4gPiArLyoqDQo+ID4gKyAqIEhhbmRsZSBGT1VUX0VOQUJMRSAoRk9FKSBsaW5lDQo+ ID4gKyAqIEVuYWJsZXMvZGlzYWJsZXMgdGhlIEZPVVQgbGluZQ0KPiA+ICsgKiBAcGFyYW0g b3BhcXVlIHRoZSBkZXZpY2UgaW5zdGFuY2UNCj4gPiArICogQHBhcmFtIG4gdGhlIElSUSBu dW1iZXINCj4gPiArICogQHBhcmFtIGxldmVsIHRydWUgaWYgdGhlIGxpbmUgaGFzIGJlZW4g cmFpc2VkDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgdm9pZCByeDg5MDBfZm91dF9lbmFibGVf aGFuZGxlcih2b2lkICpvcGFxdWUsIGludCBuLCBpbnQNCj4gPiBsZXZlbCkNCj4gPiArew0K PiA+ICvCoMKgwqDCoFJYODkwMFN0YXRlICpzID0gUlg4OTAwKG9wYXF1ZSk7DQo+ID4gKw0K PiA+ICvCoMKgwqDCoGlmIChsZXZlbCkgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgdHJhY2Vf cng4OTAwX2VuYWJsZV9mb3V0KCk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBwdGltZXJfcnVu KHMtPmZvdXRfdGltZXIsIDApOw0KPiA+ICvCoMKgwqDCoH0gZWxzZSB7DQo+ID4gK8KgwqDC oMKgwqDCoMKgwqAvKiBkaXNhYmxlIGZvdXQgKi8NCj4gPiArwqDCoMKgwqDCoMKgwqDCoHRy YWNlX3J4ODkwMF9kaXNhYmxlX2ZvdXQoKTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoHB0aW1l cl9zdG9wKHMtPmZvdXRfdGltZXIpOw0KPiA+ICvCoMKgwqDCoH0NCj4gPiArfQ0KPiA+ICsN Cj4gPiArLyoqDQo+ID4gKyAqIFRpY2sgdGhlIEZPVVQgdGltZXINCj4gPiArICogQHBhcmFt IG9wYXF1ZSB0aGUgZGV2aWNlIGluc3RhbmNlDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgdm9p ZCByeDg5MDBfZm91dF90aWNrKHZvaWQgKm9wYXF1ZSkNCj4gPiArew0KPiA+ICvCoMKgwqDC oFJYODkwMFN0YXRlICpzID0gKFJYODkwMFN0YXRlICopb3BhcXVlOw0KPiA+ICsNCj4gPiAr wqDCoMKgwqB0cmFjZV9yeDg5MDBfZm91dF90b2dnbGUoKTsNCj4gPiArwqDCoMKgwqBzLT5m b3V0X3N0YXRlID0gIXMtPmZvdXRfc3RhdGU7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoGlmIChz LT5mb3V0X3N0YXRlKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBxZW11X2lycV9yYWlzZShz LT5mb3V0X3Bpbik7DQo+ID4gK8KgwqDCoMKgfSBlbHNlIHsNCj4gPiArwqDCoMKgwqDCoMKg wqDCoHFlbXVfaXJxX2xvd2VyKHMtPmZvdXRfcGluKTsNCj4gPiArwqDCoMKgwqB9DQo+IA0K PiBXZSBjb3VsZCBqdXN0IHVzZSBxZW11X3NldF9pcnEoKSBoZXJlLg0KPiANCg0KT2sNCg0K PiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogVmVyaWZ5IHRoZSBjdXJyZW50IHZv bHRhZ2UgYW5kIHJhaXNlIGZsYWdzIGlmIGl0IGlzIGxvdw0KPiA+ICsgKiBAcGFyYW0gcyB0 aGUgUlRDIHRvIG9wZXJhdGUgb24NCj4gPiArICovDQo+ID4gK3N0YXRpYyB2b2lkIGNoZWNr X3ZvbHRhZ2UoUlg4OTAwU3RhdGUgKnMpDQo+ID4gK3sNCj4gPiArwqDCoMKgwqBpZiAoIShz LT5udnJhbVtCQUNLVVBfRlVOQ1RJT05dICYgQkFDS1VQX01BU0tfVkRFVE9GRikpIHsNCj4g PiArwqDCoMKgwqDCoMKgwqDCoGlmIChzLT5zdXBwbHlfdm9sdGFnZSA8IDIuMCkgew0KPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzLT5udnJhbVtGTEFHX1JFR0lTVEVSXSB8PSBG TEFHX01BU0tfVkRFVDsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoH0NCj4gPiArDQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqBpZiAocy0+c3VwcGx5X3ZvbHRhZ2UgPCAxLjYpIHsNCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcy0+bnZyYW1bRkxBR19SRUdJU1RFUl0gfD0gRkxBR19N QVNLX1ZMRjsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoH0NCj4gPiArwqDCoMKgwqB9DQo+ID4g K30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBSZWNlaXZlIGEgYnl0ZSBvZiBkYXRhIGZy b20gaTJjDQo+ID4gKyAqIEBwYXJhbSBpMmMgdGhlIGkyYyBkZXZpY2UgdGhhdCBpcyByZWNl aXZpbmcgZGF0YQ0KPiA+ICsgKiBAcGFyYW0gZGF0YSB0aGUgZGF0YSB0aGF0IHdhcyByZWNl aXZlZA0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCByeDg5MDBfc2VuZChJMkNTbGF2ZSAq aTJjLCB1aW50OF90IGRhdGEpDQo+ID4gK3sNCj4gPiArwqDCoMKgwqBSWDg5MDBTdGF0ZSAq cyA9IFJYODkwMChpMmMpOw0KPiA+ICvCoMKgwqDCoHN0cnVjdCB0bSBub3c7DQo+ID4gKw0K PiA+ICvCoMKgwqDCoHRyYWNlX3J4ODkwMF9pMmNfZGF0YV9yZWNlaXZlKGRhdGEpOw0KPiA+ ICsNCj4gPiArwqDCoMKgwqBpZiAocy0+YWRkcl9ieXRlKSB7DQo+ID4gK8KgwqDCoMKgwqDC oMKgwqBzLT5udnJhbV9vZmZzZXQgPSBkYXRhICYgKFJYODkwMF9OVlJBTV9TSVpFIC0gMSk7 DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqB0cmFjZV9yeDg5MDBfcmVncHRyX3VwZGF0ZShzLT5u dnJhbV9vZmZzZXQpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgcy0+YWRkcl9ieXRlID0gZmFs c2U7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsNCj4gPiArwqDCoMKgwqB9DQo+ ID4gKw0KPiA+ICvCoMKgwqDCoHRyYWNlX3J4ODkwMF9zZXRfcmVnaXN0ZXIocy0+bnZyYW1f b2Zmc2V0LCBkYXRhKTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgcWVtdV9nZXRfdGltZWRhdGUo Jm5vdywgcy0+b2Zmc2V0KTsNCj4gPiArwqDCoMKgwqBzd2l0Y2ggKHMtPm52cmFtX29mZnNl dCkgew0KPiA+ICvCoMKgwqDCoGNhc2UgU0VDT05EUzoNCj4gPiArwqDCoMKgwqBjYXNlIEVY VF9TRUNPTkRTOg0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgbm93LnRtX3NlYyA9IGZyb21fYmNk KGRhdGEgJiAweDdmKTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGlmIChub3cudG1fc2VjID4g NTkpIHsgLyogUlg4OTAwIGRvZXMgbm90IHN1cHBvcnQgbGVhcA0KPiA+IHNlY29uZHMgKi8N Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcWVtdV9sb2dfbWFzayhMT0dfR1VFU1Rf RVJST1IsDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIlJYODkwMCAt IHNlY29uZCBkYXRhICcleCcgaXMgb3V0IG9mIHJhbmdlLCAiDQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAidW5kZWZpbmVkIGJlaGF2aW9yIHdpbGwg cmVzdWx0IiwgZGF0YSk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqB9DQo+ID4gK8KgwqDCoMKg wqDCoMKgwqBzLT5vZmZzZXQgPSBxZW11X3RpbWVkYXRlX2RpZmYoJm5vdyk7DQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqBicmVhazsNCj4gPiArDQo+ID4gK8KgwqDCoMKgY2FzZSBNSU5VVEVT Og0KPiA+ICvCoMKgwqDCoGNhc2UgRVhUX01JTlVURVM6DQo+ID4gK8KgwqDCoMKgwqDCoMKg wqBub3cudG1fbWluID0gZnJvbV9iY2QoZGF0YSAmIDB4N2YpOw0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgaWYgKG5vdy50bV9taW4gPiA1OSkgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBxZW11X2xvZ19tYXNrKExPR19HVUVTVF9FUlJPUiwNCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAiUlg4OTAwIC0gbWludXRlIGRhdGEgJyV4JyBpcyBvdXQg b2YgcmFuZ2UsICINCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCJ1bmRlZmluZWQgYmVoYXZpb3Igd2lsbCByZXN1bHQiLCBkYXRhKTsNCj4gPiArwqDC oMKgwqDCoMKgwqDCoH0NCj4gPiArwqDCoMKgwqDCoMKgwqDCoHMtPm9mZnNldCA9IHFlbXVf dGltZWRhdGVfZGlmZigmbm93KTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGJyZWFrOw0KPiA+ ICsNCj4gPiArwqDCoMKgwqBjYXNlIEhPVVJTOg0KPiA+ICvCoMKgwqDCoGNhc2UgRVhUX0hP VVJTOg0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgbm93LnRtX2hvdXIgPSBmcm9tX2JjZChkYXRh ICYgMHgzZik7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBpZiAobm93LnRtX2hvdXIgPiAyNCkg ew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBxZW11X2xvZ19tYXNrKExPR19HVUVT VF9FUlJPUiwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiUlg4OTAw IC0gaG91ciBkYXRhICcleCcgaXMgb3V0IG9mIHJhbmdlLCAiDQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAidW5kZWZpbmVkIGJlaGF2aW9yIHdpbGwg cmVzdWx0IiwgZGF0YSk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqB9DQo+ID4gK8KgwqDCoMKg wqDCoMKgwqBzLT5vZmZzZXQgPSBxZW11X3RpbWVkYXRlX2RpZmYoJm5vdyk7DQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqBicmVhazsNCj4gPiArDQo+ID4gK8KgwqDCoMKgY2FzZSBXRUVLREFZ Og0KPiA+ICvCoMKgwqDCoGNhc2UgRVhUX1dFRUtEQVk6IHsNCj4gPiArwqDCoMKgwqDCoMKg wqDCoGludCB1c2VyX3dkYXkgPSBjdHozMihkYXRhKTsNCj4gPiArwqDCoMKgwqDCoMKgwqDC oC8qIFRoZSBkYXkgZmllbGQgaXMgc3VwcG9zZWQgdG8gY29udGFpbiBhIHZhbHVlIGluDQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoCogd2l0aCBvbmx5IDEgb2YgYml0cyAwLTYgc2V0LiBP dGhlcndpc2UgYmVoYXZpb3IgaXMNCj4gPiB1bmRlZmluZWQuDQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoCovDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBzd2l0Y2ggKGRhdGEpIHsNCj4gPiAr wqDCoMKgwqDCoMKgwqDCoGNhc2UgMHgwMToNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGNhc2Ug MHgwMjoNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGNhc2UgMHgwNDoNCj4gPiArwqDCoMKgwqDC oMKgwqDCoGNhc2UgMHgwODoNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGNhc2UgMHgxMDoNCj4g PiArwqDCoMKgwqDCoMKgwqDCoGNhc2UgMHgyMDoNCj4gPiArwqDCoMKgwqDCoMKgwqDCoGNh c2UgMHg0MDoNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7DQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqBkZWZhdWx0Og0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBx ZW11X2xvZ19tYXNrKExPR19HVUVTVF9FUlJPUiwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAiUlg4OTAwIC0gd2Vla2RheSBkYXRhICcleCcgaXMgb3V0IG9mIHJh bmdlLCAiDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCJ1bmRlZmluZWQgYmVoYXZpb3Igd2lsbCByZXN1bHQiLCBkYXRhKTsNCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqB9 DQo+IA0KPiBJIHRoaW5rIGl0IG1pZ2h0IGJlIGNsZWFyZXIgdG8gZG86DQo+IA0KPiDCoMKg wqDCoGlmIChkYXRhID09IDB4ODAgfHwgY3Rwb3A4KGRhdGEpICE9IDEpIHsNCj4gwqDCoMKg wqDCoMKgwqDCoHFlbXVfbG9nX21hc2soLi4uKTsNCj4gwqDCoMKgwqDCoMKgwqDCoGJyZWFr Ow0KPiDCoMKgwqDCoH0NCg0KT2ssIEkndmUgYWxzbyBmYWN0b3JlZCB0aGlzIG91dC4NCg0K PiA+ICvCoMKgwqDCoMKgwqDCoMKgcy0+d2Vla2RheSA9IHVzZXJfd2RheTsNCj4gPiArwqDC oMKgwqDCoMKgwqDCoGJyZWFrOw0KPiA+ICvCoMKgwqDCoH0NCj4gPiArDQo+ID4gK8KgwqDC oMKgY2FzZSBEQVk6DQo+ID4gK8KgwqDCoMKgY2FzZSBFWFRfREFZOg0KPiA+ICvCoMKgwqDC oMKgwqDCoMKgbm93LnRtX21kYXkgPSBmcm9tX2JjZChkYXRhICYgMHgzZik7DQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqBzLT5vZmZzZXQgPSBxZW11X3RpbWVkYXRlX2RpZmYoJm5vdyk7DQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqBicmVhazsNCj4gPiArDQo+ID4gK8KgwqDCoMKgY2FzZSBN T05USDoNCj4gPiArwqDCoMKgwqBjYXNlIEVYVF9NT05USDoNCj4gPiArwqDCoMKgwqDCoMKg wqDCoG5vdy50bV9tb24gPSBmcm9tX2JjZChkYXRhICYgMHgxZikgLSAxOw0KPiA+ICvCoMKg wqDCoMKgwqDCoMKgcy0+b2Zmc2V0ID0gcWVtdV90aW1lZGF0ZV9kaWZmKCZub3cpOw0KPiA+ ICvCoMKgwqDCoMKgwqDCoMKgYnJlYWs7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoGNhc2UgWUVB UjoNCj4gPiArwqDCoMKgwqBjYXNlIEVYVF9ZRUFSOg0KPiA+ICvCoMKgwqDCoMKgwqDCoMKg bm93LnRtX3llYXIgPSBmcm9tX2JjZChkYXRhKSArIDEwMDsNCj4gPiArwqDCoMKgwqDCoMKg wqDCoHMtPm9mZnNldCA9IHFlbXVfdGltZWRhdGVfZGlmZigmbm93KTsNCj4gPiArwqDCoMKg wqDCoMKgwqDCoGJyZWFrOw0KPiA+ICsNCj4gPiArwqDCoMKgwqBjYXNlIEVYVEVOU0lPTl9S RUdJU1RFUjoNCj4gPiArwqDCoMKgwqBjYXNlIEVYVF9FWFRFTlNJT05fUkVHSVNURVI6DQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqB1cGRhdGVfZXh0ZW5zaW9uX3JlZ2lzdGVyKHMsIGRhdGEp Ow0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgYnJlYWs7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoGNh c2UgRkxBR19SRUdJU1RFUjoNCj4gPiArwqDCoMKgwqBjYXNlIEVYVF9GTEFHX1JFR0lTVEVS Og0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgdmFsaWRhdGVfZmxhZ19yZWdpc3RlcihzLCAmZGF0 YSk7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgcy0+bnZyYW1bRkxBR19SRUdJU1RF Ul0gPSBkYXRhOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgcy0+bnZyYW1bRVhUX0ZMQUdfUkVH SVNURVJdID0gZGF0YTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBjaGVja192b2x0 YWdlKHMpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgYnJlYWs7DQo+ID4gKw0KPiA+ICvCoMKg wqDCoGNhc2UgQ09OVFJPTF9SRUdJU1RFUjoNCj4gPiArwqDCoMKgwqBjYXNlIEVYVF9DT05U Uk9MX1JFR0lTVEVSOg0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgdXBkYXRlX2NvbnRyb2xfcmVn aXN0ZXIocywgZGF0YSk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBicmVhazsNCj4gPiArDQo+ ID4gK8KgwqDCoMKgZGVmYXVsdDoNCj4gPiArwqDCoMKgwqDCoMKgwqDCoHMtPm52cmFtW3Mt Pm52cmFtX29mZnNldF0gPSBkYXRhOw0KPiA+ICvCoMKgwqDCoH0NCj4gPiArDQo+ID4gK8Kg wqDCoMKgaW5jX3JlZ3B0cihzKTsNCj4gPiArwqDCoMKgwqByZXR1cm4gMDsNCj4gPiArfQ0K PiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIEdldCB0aGUgZGV2aWNlIHRlbXBlcmF0dXJlIGlu IENlbHNpdXMgYXMgYSBwcm9wZXJ0eQ0KPiA+ICsgKiBAcGFyYW0gb2JqIHRoZSBkZXZpY2UN Cj4gPiArICogQHBhcmFtIHYNCj4gPiArICogQHBhcmFtIG5hbWUgdGhlIHByb3BlcnR5IG5h bWUNCj4gPiArICogQHBhcmFtIG9wYXF1ZQ0KPiA+ICsgKiBAcGFyYW0gZXJycCBhbiBlcnJv ciBvYmplY3QgdG8gcG9wdWxhdGUgb24gZmFpbHVyZQ0KPiA+ICsgKi8NCj4gPiArc3RhdGlj IHZvaWQgcng4OTAwX2dldF90ZW1wZXJhdHVyZShPYmplY3QgKm9iaiwgVmlzaXRvciAqdiwg Y29uc3QNCj4gPiBjaGFyICpuYW1lLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdm9pZCAqb3Bh cXVlLCBFcnJvciAqKmVycnApDQo+ID4gK3sNCj4gPiArwqDCoMKgwqBSWDg5MDBTdGF0ZSAq cyA9IFJYODkwMChvYmopOw0KPiA+ICvCoMKgwqDCoGRvdWJsZSB2YWx1ZSA9IChzLT5udnJh bVtURU1QRVJBVFVSRV0gKiAyLjAgLSAxODcuMSkgLyAzLjIxODsNCj4gDQo+IFlvdSBoYXZl IGVuY29kZV90ZW1wZXJhdHVyZSgpIGJlbG93LCBzaG91bGQgd2Ugbm90IGhhdmUNCj4gZGVj b2RlX3RlbXBlcmF0dXJlKCk/DQo+IA0KDQpUaGlzIHdhcyBmYWN0b3JlZCBvdXQgYXMgaXQg d2FzIG5lZWRlZCBpbiBtdWx0aXBsZSBwbGFjZXMsIHRoZSBkZWNvZGluZw0KaXMgb25seSBk b25lIGluIGEgc2luZ2xlIHBsYWNlLg0KDQo+ID4gKw0KPiA+ICvCoMKgwqDCoHRyYWNlX3J4 ODkwMF9nZXRfdGVtcGVyYXR1cmUocy0+bnZyYW1bVEVNUEVSQVRVUkVdLCB2YWx1ZSk7DQo+ ID4gKw0KPiA+ICvCoMKgwqDCoHZpc2l0X3R5cGVfbnVtYmVyKHYsIG5hbWUsICZ2YWx1ZSwg ZXJycCk7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBFbmNvZGUgYSB0ZW1w ZXJhdHVyZSBpbiBDZWxzaXVzDQo+ID4gKyAqIEBwYXJhbSBjZWxzaXVzIHRoZSB0ZW1wZXJh dHVyZQ0KPiA+ICsgKiBAcmV0dXJuIHRoZSBlbmNvZGVkIHRlbXBlcmF0dXJlDQo+ID4gKyAq Lw0KPiA+ICtzdGF0aWMgaW5saW5lIHVpbnQ4X3QgZW5jb2RlX3RlbXBlcmF0dXJlKGRvdWJs ZSBjZWxzaXVzKQ0KPiA+ICt7DQo+ID4gK8KgwqDCoMKgcmV0dXJuICh1aW50OF90KSAoKGNl bHNpdXMgKiAzLjIxOCArIDE4Ny4xOSkgLyAyKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoq DQo+ID4gKyAqIFNldCB0aGUgZGV2aWNlIHRlbXBlcmF0dXJlIGluIENlbHNpdXMgYXMgYSBw cm9wZXJ0eQ0KPiA+ICsgKiBAcGFyYW0gb2JqIHRoZSBkZXZpY2UNCj4gPiArICogQHBhcmFt IHYNCj4gPiArICogQHBhcmFtIG5hbWUgdGhlIHByb3BlcnR5IG5hbWUNCj4gPiArICogQHBh cmFtIG9wYXF1ZQ0KPiA+ICsgKiBAcGFyYW0gZXJycCBhbiBlcnJvciBvYmplY3QgdG8gcG9w dWxhdGUgb24gZmFpbHVyZQ0KPiA+ICsgKi8NCj4gPiArc3RhdGljIHZvaWQgcng4OTAwX3Nl dF90ZW1wZXJhdHVyZShPYmplY3QgKm9iaiwgVmlzaXRvciAqdiwgY29uc3QNCj4gPiBjaGFy ICpuYW1lLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdm9pZCAqb3BhcXVlLCBFcnJvciAqKmVy cnApDQo+ID4gK3sNCj4gPiArwqDCoMKgwqBSWDg5MDBTdGF0ZSAqcyA9IFJYODkwMChvYmop Ow0KPiA+ICvCoMKgwqDCoEVycm9yICpsb2NhbF9lcnIgPSBOVUxMOw0KPiA+ICvCoMKgwqDC oGRvdWJsZSB0ZW1wOyAvKiBkZWdyZWVzIENlbHNpdXMgKi8NCj4gPiArwqDCoMKgwqB2aXNp dF90eXBlX251bWJlcih2LCBuYW1lLCAmdGVtcCwgJmxvY2FsX2Vycik7DQo+ID4gK8KgwqDC oMKgaWYgKGxvY2FsX2Vycikgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgZXJyb3JfcHJvcGFn YXRlKGVycnAsIGxvY2FsX2Vycik7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqByZXR1cm47DQo+ ID4gK8KgwqDCoMKgfQ0KPiA+ICvCoMKgwqDCoGlmICh0ZW1wID49IDEwMCB8fCB0ZW1wIDwg LTU4KSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqBlcnJvcl9zZXRnKGVycnAsICJ2YWx1ZSAl ZkMgaXMgb3V0IG9mIHJhbmdlIiwgdGVtcCk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqByZXR1 cm47DQo+ID4gK8KgwqDCoMKgfQ0KPiA+ICsNCj4gPiArwqDCoMKgwqBzLT5udnJhbVtURU1Q RVJBVFVSRV0gPSBlbmNvZGVfdGVtcGVyYXR1cmUodGVtcCk7DQo+ID4gKw0KPiA+ICvCoMKg wqDCoHRyYWNlX3J4ODkwMF9zZXRfdGVtcGVyYXR1cmUocy0+bnZyYW1bVEVNUEVSQVRVUkVd LCB0ZW1wKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIEdldCB0aGUgZGV2 aWNlIHN1cHBseSB2b2x0YWdlIGFzIGEgcHJvcGVydHkNCj4gPiArICogQHBhcmFtIG9iaiB0 aGUgZGV2aWNlDQo+ID4gKyAqIEBwYXJhbSB2DQo+ID4gKyAqIEBwYXJhbSBuYW1lIHRoZSBw cm9wZXJ0eSBuYW1lDQo+ID4gKyAqIEBwYXJhbSBvcGFxdWUNCj4gPiArICogQHBhcmFtIGVy cnAgYW4gZXJyb3Igb2JqZWN0IHRvIHBvcHVsYXRlIG9uIGZhaWx1cmUNCj4gPiArICovDQo+ ID4gK3N0YXRpYyB2b2lkIHJ4ODkwMF9nZXRfdm9sdGFnZShPYmplY3QgKm9iaiwgVmlzaXRv ciAqdiwgY29uc3QgY2hhcg0KPiA+ICpuYW1lLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdm9p ZCAqb3BhcXVlLCBFcnJvciAqKmVycnApDQo+ID4gK3sNCj4gPiArwqDCoMKgwqBSWDg5MDBT dGF0ZSAqcyA9IFJYODkwMChvYmopOw0KPiA+ICsNCj4gPiArwqDCoMKgwqB2aXNpdF90eXBl X251bWJlcih2LCBuYW1lLCAmcy0+c3VwcGx5X3ZvbHRhZ2UsIGVycnApOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICsvKioNCj4gPiArICogU2V0IHRoZSBkZXZpY2Ugc3VwcGx5IHZvbHRhZ2Ug YXMgYSBwcm9wZXJ0eQ0KPiA+ICsgKiBAcGFyYW0gb2JqIHRoZSBkZXZpY2UNCj4gPiArICog QHBhcmFtIHYNCj4gPiArICogQHBhcmFtIG5hbWUgdGhlIHByb3BlcnR5IG5hbWUNCj4gPiAr ICogQHBhcmFtIG9wYXF1ZQ0KPiA+ICsgKiBAcGFyYW0gZXJycCBhbiBlcnJvciBvYmplY3Qg dG8gcG9wdWxhdGUgb24gZmFpbHVyZQ0KPiA+ICsgKi8NCj4gPiArc3RhdGljIHZvaWQgcng4 OTAwX3NldF92b2x0YWdlKE9iamVjdCAqb2JqLCBWaXNpdG9yICp2LCBjb25zdCBjaGFyDQo+ ID4gKm5hbWUsDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2b2lkICpvcGFxdWUsIEVycm9yICoq ZXJycCkNCj4gPiArew0KPiA+ICvCoMKgwqDCoFJYODkwMFN0YXRlICpzID0gUlg4OTAwKG9i aik7DQo+ID4gK8KgwqDCoMKgRXJyb3IgKmxvY2FsX2VyciA9IE5VTEw7DQo+ID4gK8KgwqDC oMKgZG91YmxlIHRlbXA7DQo+IA0KPiBNYXliZSB2b2x0YWdlPyBJdCdzIGFtYmlndW91cyBh cyB0byB3aGV0aGVyIGl0J3MgYSBjb3B5L3Bhc3RlIGVycm9yDQo+IGZyb20gJ3RlbXBlcmF0 dXJlJyBvciBpZiB5b3UgbWVhbiAndGVtcG9yYXJ5Jy4uLg0KDQpPaywgaXQgbWVhbnQgdGVt cG9yYXJ5LCBidXQgdm9sdGFnZSBpcyBtb3JlIG1lYW5pbmdmdWwuDQoNCj4gPiArwqDCoMKg wqB2aXNpdF90eXBlX251bWJlcih2LCBuYW1lLCAmdGVtcCwgJmxvY2FsX2Vycik7DQo+ID4g K8KgwqDCoMKgaWYgKGxvY2FsX2Vycikgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgZXJyb3Jf cHJvcGFnYXRlKGVycnAsIGxvY2FsX2Vycik7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqByZXR1 cm47DQo+ID4gK8KgwqDCoMKgfQ0KPiA+ICsNCj4gPiArwqDCoMKgwqBzLT5zdXBwbHlfdm9s dGFnZSA9IHRlbXA7DQo+IA0KPiAuLi4gYXMgdGhpcyBhbG1vc3QgbG9va3MgbGlrZSBhIGJ1 Zy4NCj4gDQo+ID4gK8KgwqDCoMKgdHJhY2Vfcng4OTAwX3NldF92b2x0YWdlKHMtPnN1cHBs eV92b2x0YWdlKTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgY2hlY2tfdm9sdGFnZShzKTsNCj4g PiArfQ0KPiA+ICsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBDb25maWd1cmUgZGV2aWNl IHByb3BlcnRpZXMNCj4gPiArICogQHBhcmFtIG9iaiB0aGUgZGV2aWNlDQo+ID4gKyAqLw0K PiA+ICtzdGF0aWMgdm9pZCByeDg5MDBfaW5pdGZuKE9iamVjdCAqb2JqKQ0KPiA+ICt7DQo+ ID4gK8KgwqDCoMKgb2JqZWN0X3Byb3BlcnR5X2FkZChvYmosICJ0ZW1wZXJhdHVyZSIsICJu dW1iZXIiLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqByeDg5MDBfZ2V0X3RlbXBlcmF0dXJlLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByeDg5MDBfc2V0X3RlbXBlcmF0dXJl LCBOVUxMLCBOVUxMLCBOVUxMKTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgb2JqZWN0X3Byb3Bl cnR5X2FkZChvYmosICJ2b2x0YWdlIiwgIm51bWJlciIsDQo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJ4ODkwMF9nZXRfdm9sdGFnZSwN Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cng4OTAwX3NldF92b2x0YWdlLCBOVUxMLCBOVUxMLCBOVUxMKTsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArLyoqDQo+ID4gKyAqIFJlc2V0IHRoZSBkZXZpY2UNCj4gPiArICogQHBhcmFtIGRl diB0aGUgUlg4OTAwIGRldmljZSB0byByZXNldA0KPiA+ICsgKi8NCj4gPiArc3RhdGljIHZv aWQgcng4OTAwX3Jlc2V0KERldmljZVN0YXRlICpkZXYpDQo+IA0KPiBJcyB0aGVyZSBhIHJl YXNvbiB3ZSBjYW4ndCBkZWZpbmUgcng4OTAwX3Jlc2V0KCkgZnVydGhlciB1cCB0aGUgZmls ZQ0KPiB0bw0KPiBhdm9pZCBmb3J3YXJkLWRlY2xhcmluZyBpdD8NCj4gDQoNCldlIGNvdWxk LCBidXQgSSB3YW50ZWQgdG8ga2VlcCBpdCBjbG9zZSB0byB0aGUgb3RoZXIgaW5pdCBjb2Rl Lg0KDQo+ID4gK3sNCj4gPiArwqDCoMKgwqBSWDg5MDBTdGF0ZSAqcyA9IFJYODkwMChkZXYp Ow0KPiA+ICsNCj4gPiArwqDCoMKgwqB0cmFjZV9yeDg5MDBfcmVzZXQoKTsNCj4gPiArDQo+ ID4gK8KgwqDCoMKgLyogVGhlIGNsb2NrIGlzIHJ1bm5pbmcgYW5kIHN5bmNocm9uaXplZCB3 aXRoIHRoZSBob3N0ICovDQo+ID4gK8KgwqDCoMKgcy0+b2Zmc2V0ID0gMDsNCj4gPiArwqDC oMKgwqBzLT53ZWVrZGF5ID0gNzsgLyogU2V0IHRvIGFuIGludmFsaWQgdmFsdWUgKi8NCj4g DQo+IENhbiB5b3UgZXhwbGFpbiB3aHkgd2UgZG8gdGhhdCByYXRoZXIgdGhhbiBqdXN0IHN0 YXRpbmcgdGhhdCA3IGlzDQo+IGludmFsaWQ/DQoNCkhtbSwgdGhhdCBzaG91bGQgaGF2ZSBi ZWVuIGEgI2RlZmluZS4NCg0KPiANCj4gPiArDQo+ID4gK8KgwqDCoMKgcy0+bnZyYW1bRVhU RU5TSU9OX1JFR0lTVEVSXSA9IEVYVF9NQVNLX1RTRUwxOw0KPiA+ICvCoMKgwqDCoHMtPm52 cmFtW0NPTlRST0xfUkVHSVNURVJdID0gQ1RSTF9NQVNLX0NTRUwwOw0KPiA+ICvCoMKgwqDC oHMtPm52cmFtW0ZMQUdfUkVHSVNURVJdICY9IEZMQUdfTUFTS19WREVUIHwgRkxBR19NQVNL X1ZMRjsNCj4gPiArDQo+ID4gK8KgwqDCoMKgcy0+bnZyYW1fb2Zmc2V0ID0gMDsNCj4gPiAr DQo+ID4gK8KgwqDCoMKgdHJhY2Vfcng4OTAwX3JlZ3B0cl91cGRhdGUocy0+bnZyYW1fb2Zm c2V0KTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgcy0+YWRkcl9ieXRlID0gZmFsc2U7DQo+ID4g K30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBSZWFsaXplIGFuIFJYODkwMCBkZXZpY2Ug aW5zdGFuY2UNCj4gPiArICogU2V0IHVwIHRpbWVycw0KPiA+ICsgKiBDb25maWd1cmUgR1BJ TyBsaW5lcw0KPiA+ICsgKiBAcGFyYW0gZGV2IHRoZSBkZXZpY2UgaW5zdGFuY2UgdG8gcmVh bGl6ZQ0KPiA+ICsgKiBAcGFyYW0gZXJycCBhbiBlcnJvciBvYmplY3QgdG8gcG9wdWxhdGUg b24gZXJyb3INCj4gPiArICovDQo+ID4gK3N0YXRpYyB2b2lkIHJ4ODkwMF9yZWFsaXplKERl dmljZVN0YXRlICpkZXYsIEVycm9yICoqZXJycCkNCj4gPiArew0KPiA+ICvCoMKgwqDCoFJY ODkwMFN0YXRlICpzID0gUlg4OTAwKGRldik7DQo+ID4gK8KgwqDCoMKgSTJDU2xhdmUgKmky YyA9IEkyQ19TTEFWRShkZXYpOw0KPiA+ICvCoMKgwqDCoFFFTVVCSCAqYmg7DQo+ID4gK8Kg wqDCoMKgY2hhciBuYW1lWzY0XTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgcy0+Zm91dF9zdGF0 ZSA9IGZhbHNlOw0KPiA+ICsNCj4gPiArwqDCoMKgwqBtZW1zZXQocy0+bnZyYW0sIDAsIFJY ODkwMF9OVlJBTV9TSVpFKTsNCj4gPiArwqDCoMKgwqAvKiBTZXQgdGhlIGluaXRpYWwgc3Rh dGUgdG8gMjUgZGVncmVlcyBDZWxzaXVzICovDQo+ID4gK8KgwqDCoMKgcy0+bnZyYW1bVEVN UEVSQVRVUkVdID0gZW5jb2RlX3RlbXBlcmF0dXJlKDI1LjApOw0KPiA+ICsNCj4gPiArwqDC oMKgwqAvKiBTZXQgdXAgdGltZXJzICovDQo+ID4gK8KgwqDCoMKgYmggPSBxZW11X2JoX25l dyhyeDg5MDBfdGltZXJfdGljaywgcyk7DQo+ID4gK8KgwqDCoMKgcy0+c2VjX3RpbWVyID0g cHRpbWVyX2luaXQoYmgsIFBUSU1FUl9QT0xJQ1lfREVGQVVMVCk7DQo+ID4gK8KgwqDCoMKg Lyogd2UgdHJpZ2dlciB0aGUgdGltZXIgYXQgMTBIeiBhbmQgY2hlY2sgZm9yIHJvbGxvdmVy LCBhcyB0aGUNCj4gPiBxZW11DQo+ID4gK8KgwqDCoMKgwqAqIGNsb2NrIGRvZXMgbm90IGFk dmFuY2UgaW4gcmVhbHRpbWUgaW4gdGhlIHRlc3QgZW52aXJvbm1lbnQsDQo+ID4gK8KgwqDC oMKgwqAqIGxlYWRpbmcgdG8gdW5zdGFibGUgdGVzdCByZXN1bHRzDQo+ID4gK8KgwqDCoMKg wqAqLw0KPiANCj4gSXQgc2VlbXMgdW5mb3J0dW5hdGUgdGhhdCBzb21lIG9mIHRoZSBjb2Rl IHNlZW1zIGRlZGljYXRlZCB0byB3b3JraW5nDQo+IGFyb3VuZCB0ZXN0IHN1aXRlIGlzc3Vl cyAoZS5nLiBlYXJseSByZXR1cm4gaW4gc29tZSBmdW5jdGlvbnMpLiBBaA0KPiB3ZWxsLg0K PiANCj4gPiArwqDCoMKgwqBwdGltZXJfc2V0X2ZyZXEocy0+c2VjX3RpbWVyLCAxMCk7DQo+ ID4gK8KgwqDCoMKgcHRpbWVyX3NldF9saW1pdChzLT5zZWNfdGltZXIsIDEsIDEpOw0KPiA+ ICsNCj4gPiArwqDCoMKgwqBiaCA9IHFlbXVfYmhfbmV3KHJ4ODkwMF9mb3V0X3RpY2ssIHMp Ow0KPiA+ICvCoMKgwqDCoHMtPmZvdXRfdGltZXIgPSBwdGltZXJfaW5pdChiaCwgUFRJTUVS X1BPTElDWV9ERUZBVUxUKTsNCj4gPiArwqDCoMKgwqAvKiBmcmVxdWVuY3kgZG91YmxlZCB0 byBnZW5lcmF0ZSA1MCUgZHV0eSBjeWNsZSBzcXVhcmUgd2F2ZSAqLw0KPiA+ICvCoMKgwqDC oHB0aW1lcl9zZXRfZnJlcShzLT5mb3V0X3RpbWVyLCAzMjc2OCAqIDIpOw0KPiA+ICvCoMKg wqDCoHB0aW1lcl9zZXRfbGltaXQocy0+Zm91dF90aW1lciwgMSwgMSk7DQo+ID4gKw0KPiA+ ICvCoMKgwqDCoGJoID0gcWVtdV9iaF9uZXcocng4OTAwX2NvdW50ZG93bl90aWNrLCBzKTsN Cj4gPiArwqDCoMKgwqBzLT5jb3VudGRvd25fdGltZXIgPSBwdGltZXJfaW5pdChiaCwgUFRJ TUVSX1BPTElDWV9ERUZBVUxUKTsNCj4gPiArwqDCoMKgwqBwdGltZXJfc2V0X2ZyZXEocy0+ Y291bnRkb3duX3RpbWVyLCBDT1VOVERPV05fVElNRVJfRlJFUSk7DQo+ID4gK8KgwqDCoMKg cHRpbWVyX3NldF9saW1pdChzLT5jb3VudGRvd25fdGltZXIsIENPVU5URE9XTl9USU1FUl9G UkVRLCAxKTsNCj4gPiArDQo+ID4gKw0KPiA+ICvCoMKgwqDCoC8qIHNldCB1cCBHUElPICov DQo+ID4gK8KgwqDCoMKgc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAicng4OTAwLWlu dGVycnVwdC1vdXQiKTsNCj4gDQo+IFdoeSB0aGUgc25wcmludGYoKXM/DQoNClRoZXNlIHdl cmUgY29uc3RydWN0ZWQgaW4gYW4gZWFybGllciB2ZXJzaW9uLCBidXQgaXQncyBub3QgbmVj ZXNzYXJ5DQpub3cuDQoNCj4gDQo+ID4gK8KgwqDCoMKgcWRldl9pbml0X2dwaW9fb3V0X25h bWVkKCZpMmMtPnFkZXYsICZzLT5pbnRlcnJ1cHRfcGluLCBuYW1lLA0KPiA+IDEpOw0KPiA+ ICvCoMKgwqDCoHRyYWNlX3J4ODkwMF9waW5fbmFtZSgiSW50ZXJydXB0IiwgbmFtZSk7DQo+ ID4gKw0KPiA+ICvCoMKgwqDCoHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgInJ4ODkw MC1mb3V0LWVuYWJsZSIpOw0KPiA+ICvCoMKgwqDCoHFkZXZfaW5pdF9ncGlvX2luX25hbWVk KCZpMmMtPnFkZXYsDQo+ID4gcng4OTAwX2ZvdXRfZW5hYmxlX2hhbmRsZXIsIG5hbWUsIDEp Ow0KPiA+ICvCoMKgwqDCoHRyYWNlX3J4ODkwMF9waW5fbmFtZSgiRm91dC1lbmFibGUiLCBu YW1lKTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUp LCAicng4OTAwLWZvdXQiKTsNCj4gPiArwqDCoMKgwqBxZGV2X2luaXRfZ3Bpb19vdXRfbmFt ZWQoJmkyYy0+cWRldiwgJnMtPmZvdXRfcGluLCBuYW1lLCAxKTsNCj4gPiArwqDCoMKgwqB0 cmFjZV9yeDg5MDBfcGluX25hbWUoIkZvdXQiLCBuYW1lKTsNCj4gPiArDQo+ID4gK8KgwqDC oMKgLyogU2V0IHVwIGRlZmF1bHQgdm9sdGFnZSAqLw0KPiA+ICvCoMKgwqDCoHMtPnN1cHBs eV92b2x0YWdlID0gMy4zZjsNCj4gPiArwqDCoMKgwqB0cmFjZV9yeDg5MDBfc2V0X3ZvbHRh Z2Uocy0+c3VwcGx5X3ZvbHRhZ2UpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiAr ICogU2V0IHVwIHRoZSBkZXZpY2UgY2FsbGJhY2tzDQo+ID4gKyAqIEBwYXJhbSBrbGFzcyB0 aGUgZGV2aWNlIGNsYXNzDQo+ID4gKyAqIEBwYXJhbSBkYXRhDQo+ID4gKyAqLw0KPiA+ICtz dGF0aWMgdm9pZCByeDg5MDBfY2xhc3NfaW5pdChPYmplY3RDbGFzcyAqa2xhc3MsIHZvaWQg KmRhdGEpDQo+ID4gK3sNCj4gPiArwqDCoMKgwqBEZXZpY2VDbGFzcyAqZGMgPSBERVZJQ0Vf Q0xBU1Moa2xhc3MpOw0KPiA+ICvCoMKgwqDCoEkyQ1NsYXZlQ2xhc3MgKmsgPSBJMkNfU0xB VkVfQ0xBU1Moa2xhc3MpOw0KPiA+ICsNCj4gPiArwqDCoMKgwqBrLT5ldmVudCA9IHJ4ODkw MF9ldmVudDsNCj4gPiArwqDCoMKgwqBrLT5yZWN2ID0gcng4OTAwX3JlY3Y7DQo+ID4gK8Kg wqDCoMKgay0+c2VuZCA9IHJ4ODkwMF9zZW5kOw0KPiA+ICvCoMKgwqDCoGRjLT5yZWFsaXpl ID0gcng4OTAwX3JlYWxpemU7DQo+ID4gK8KgwqDCoMKgZGMtPnJlc2V0ID0gcng4OTAwX3Jl c2V0Ow0KPiA+ICvCoMKgwqDCoGRjLT52bXNkID0gJnZtc3RhdGVfcng4OTAwOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3QgVHlwZUluZm8gcng4OTAwX2luZm8gPSB7DQo+ ID4gK8KgwqDCoMKgLm5hbWUgPSBUWVBFX1JYODkwMCwNCj4gPiArwqDCoMKgwqAucGFyZW50 ID0gVFlQRV9JMkNfU0xBVkUsDQo+ID4gK8KgwqDCoMKgLmluc3RhbmNlX3NpemUgPSBzaXpl b2YoUlg4OTAwU3RhdGUpLA0KPiA+ICvCoMKgwqDCoC5pbnN0YW5jZV9pbml0ID0gcng4OTAw X2luaXRmbiwNCj4gPiArwqDCoMKgwqAuY2xhc3NfaW5pdCA9IHJ4ODkwMF9jbGFzc19pbml0 LA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIFJlZ2lzdGVyIHRoZSBkZXZp Y2Ugd2l0aCBRRU1VDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgdm9pZCByeDg5MDBfcmVnaXN0 ZXJfdHlwZXModm9pZCkNCj4gPiArew0KPiA+ICvCoMKgwqDCoHR5cGVfcmVnaXN0ZXJfc3Rh dGljKCZyeDg5MDBfaW5mbyk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3R5cGVfaW5pdChyeDg5 MDBfcmVnaXN0ZXJfdHlwZXMpDQo+ID4gZGlmZiAtLWdpdCBhL2h3L3RpbWVyL3J4ODkwMF9y ZWdzLmggYi9ody90aW1lci9yeDg5MDBfcmVncy5oDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCj4gPiBpbmRleCAwMDAwMDAwLi4wYWFhOWEzDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ ICsrKyBiL2h3L3RpbWVyL3J4ODkwMF9yZWdzLmgNCj4gPiBAQCAtMCwwICsxLDE0MSBAQA0K PiA+ICsvKg0KPiA+ICsgKiBFcHNvbiBSWDg5MDBTQS9DRSBSZWFsdGltZSBDbG9jayBNb2R1 bGUNCj4gPiArICoNCj4gPiArICogQ29weXJpZ2h0IChjKSAyMDE2IElCTSBDb3Jwb3JhdGlv bg0KPiA+ICsgKiBBdXRob3JzOg0KPiA+ID4gKyAqwqDCoEFsYXN0YWlyIEQnU2lsdmEgPGFs YXN0YWlyQGQtc2lsdmEub3JnPg0KPiA+IA0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIGNvZGUg aXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTCB2ZXJzaW9uIDIgb3IgbGF0ZXIuwqDCoFNlZQ0K PiA+ICsgKiB0aGUgQ09QWUlORyBmaWxlIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5Lg0K PiA+ICsgKg0KPiA+ICsgKiBEYXRhc2hlZXQgYXZhaWxhYmxlIGF0Og0KPiA+ICsgKsKgwqBo dHRwczovL3N1cHBvcnQuZXBzb24uYml6L3RkL2FwaS9kb2NfY2hlY2sucGhwP2RsPWFwcF9S WDg5MDBDRQ0KPiA+ICZsYW5nPWVuDQo+ID4gKyAqDQo+ID4gKyAqLw0KPiA+ICsNCj4gPiAr I2lmbmRlZiBSWDg5MDBfUkVHU19IDQo+ID4gKyNkZWZpbmUgUlg4OTAwX1JFR1NfSA0KPiA+ ICsNCj4gPiArI2luY2x1ZGUgInFlbXUvYml0b3BzLmgiDQo+ID4gKw0KPiA+ICsjZGVmaW5l IFJYODkwMF9OVlJBTV9TSVpFIDB4MjANCj4gDQo+IERvIGFsbCB0aGUgZW51bXMgYmVsb3cg bmVlZCB0byBiZSBkZWZpbmVkIGluIHRoZSBoZWFkZXIgb3IgYXJlIHRoZXkNCj4gb25seSBy ZWxldmFudCB0byB0aGUgaW1wbGVtZW50YXRpb24/IElmIGl0J3MgdGhlIGxhdHRlciwgdGhl biB0aGV5DQo+IHNob3VsZCBnbyBpbiB0aGUgLmMgZmlsZS4NCj4gDQoNClRoZXkgYXJlIGFs c28gdXNlZCBpbiB0aGUgdGVzdC4NCg0KPiBBbHNvIEkgd291bGQndmUgcmVhY2hlZCBmb3Ig I2RlZmluZSBmb3IgYWxsIHRoZXNlIHZhbHVlcywgbm90IGVudW1zLA0KPiBidXQgdGhhdCBt aWdodCBiZSBhIHBlcnNvbmFsIHRoaW5nLg0KDQpJIHByZWZlciBlbnVtcyBhcyB0aGV5IGFk ZCB0eXBlIHNhZmV0eS4NCg0KPiA+ICsNCj4gPiArdHlwZWRlZiBlbnVtIFJYODkwMEFkZHJl c3NlcyB7DQo+ID4gK8KgwqDCoMKgU1RBUlRfQUREUkVTUyA9IDB4MDAsDQo+ID4gK8KgwqDC oMKgU0VDT05EUyA9IDB4MDAsDQo+ID4gK8KgwqDCoMKgTUlOVVRFUyA9IDB4MDEsDQo+ID4g K8KgwqDCoMKgSE9VUlMgPSAweDAyLA0KPiA+ICvCoMKgwqDCoFdFRUtEQVkgPSAweDAzLCAv KiBhIHdhbGtpbmcgYml0IHdpdGggYml0IDAgc2V0IGZvciBTdW5kYXksIDENCj4gPiBmb3Ig TW9uZGF5Li4uDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqA2IGZvciBTYXR1cmRheSwgc2VlIHRoZSBkYXRhc2hlZXQgZm9yDQo+ID4gZGV0 YWlscyAqLw0KPiA+ICvCoMKgwqDCoERBWSA9IDB4MDQsDQo+ID4gK8KgwqDCoMKgTU9OVEgg PSAweDA1LA0KPiA+ICvCoMKgwqDCoFlFQVIgPSAweDA2LA0KPiA+ICvCoMKgwqDCoFJBTSA9 IDB4MDcsDQo+ID4gK8KgwqDCoMKgQUxBUk1fTUlOVVRFID0gMHgwOCwNCj4gPiArwqDCoMKg wqBBTEFSTV9IT1VSID0gMHgwOSwNCj4gPiArwqDCoMKgwqBBTEFSTV9XRUVLX0RBWSA9IDB4 MEEsDQo+ID4gK8KgwqDCoMKgVElNRVJfQ09VTlRFUl8wID0gMHgwQiwNCj4gPiArwqDCoMKg wqBUSU1FUl9DT1VOVEVSXzEgPSAweDBDLA0KPiA+ICvCoMKgwqDCoEVYVEVOU0lPTl9SRUdJ U1RFUiA9IDB4MEQsDQo+ID4gK8KgwqDCoMKgRkxBR19SRUdJU1RFUiA9IDBYMEUsDQo+ID4g K8KgwqDCoMKgQ09OVFJPTF9SRUdJU1RFUiA9IDBYMEYsDQo+ID4gK8KgwqDCoMKgRVhUX1NF Q09ORFMgPSAweDAxMCwgLyogQWxpYXMgb2YgU0VDT05EUyAqLw0KPiA+ICvCoMKgwqDCoEVY VF9NSU5VVEVTID0gMHgxMSwgLyogQWxpYXMgb2YgTUlOVVRFUyAqLw0KPiA+ICvCoMKgwqDC oEVYVF9IT1VSUyA9IDB4MTIsIC8qIEFsaWFzIG9mIEhPVVJTICovDQo+ID4gK8KgwqDCoMKg RVhUX1dFRUtEQVkgPSAweDEzLCAvKiBBbGlhcyBvZiBXRUVLREFZICovDQo+ID4gK8KgwqDC oMKgRVhUX0RBWSA9IDB4MTQsIC8qIEFsaWFzIG9mIERBWSAqLw0KPiA+ICvCoMKgwqDCoEVY VF9NT05USCA9IDB4MTUsIC8qIEFsaWFzIG9mIE1PTlRIICovDQo+ID4gK8KgwqDCoMKgRVhU X1lFQVIgPSAweDE2LCAvKiBBbGlhcyBvZiBZRUFSICovDQo+ID4gK8KgwqDCoMKgVEVNUEVS QVRVUkUgPSAweDE3LA0KPiA+ICvCoMKgwqDCoEJBQ0tVUF9GVU5DVElPTiA9IDB4MTgsDQo+ ID4gK8KgwqDCoMKgTk9fVVNFXzEgPSAweDE5LA0KPiA+ICvCoMKgwqDCoE5PX1VTRV8yID0g MHgxQSwNCj4gPiArwqDCoMKgwqBFWFRfVElNRVJfQ09VTlRFUl8wID0gMHgxQiwgLyogQWxp YXMgb2YgVElNRVJfQ09VTlRFUl8wICovDQo+ID4gK8KgwqDCoMKgRVhUX1RJTUVSX0NPVU5U RVJfMSA9IDB4MUMsIC8qIEFsaWFzIG9mIFRJTUVSX0NPVU5URVJfMSAqLw0KPiA+ICvCoMKg wqDCoEVYVF9FWFRFTlNJT05fUkVHSVNURVIgPSAweDFELCAvKiBBbGlhcyBvZiBFWFRFTlNJ T05fUkVHSVNURVINCj4gPiAqLw0KPiA+ICvCoMKgwqDCoEVYVF9GTEFHX1JFR0lTVEVSID0g MFgxRSwgLyogQWxpYXMgb2YgRkxBR19SRUdJU1RFUiAqLw0KPiA+ICvCoMKgwqDCoEVYVF9D T05UUk9MX1JFR0lTVEVSID0gMFgxRiAvKiBBbGlhcyBvZiBDT05UUk9MX1JFR0lTVEVSICov DQo+ID4gK30gUlg4OTAwQWRkcmVzc2VzOw0KPiA+ICsNCj4gPiArdHlwZWRlZiBlbnVtIEV4 dFJlZ0JpdHMgew0KPiA+ICvCoMKgwqDCoEVYVF9SRUdfVFNFTDAgPSAwLA0KPiA+ICvCoMKg wqDCoEVYVF9SRUdfVFNFTDEgPSAxLA0KPiA+ICvCoMKgwqDCoEVYVF9SRUdfRlNFTDAgPSAy LA0KPiA+ICvCoMKgwqDCoEVYVF9SRUdfRlNFTDEgPSAzLA0KPiA+ICvCoMKgwqDCoEVYVF9S RUdfVEUgPSA0LA0KPiA+ICvCoMKgwqDCoEVYVF9SRUdfVVNFTCA9IDUsDQo+ID4gK8KgwqDC oMKgRVhUX1JFR19XQURBID0gNiwNCj4gPiArwqDCoMKgwqBFWFRfUkVHX1RFU1QgPSA3DQo+ ID4gK30gRXh0UmVnQml0czsNCj4gPiArDQo+ID4gK3R5cGVkZWYgZW51bSBFeHRSZWdNYXNr cyB7DQo+ID4gK8KgwqDCoMKgRVhUX01BU0tfVFNFTDAgPSBCSVQoMCksDQo+ID4gK8KgwqDC oMKgRVhUX01BU0tfVFNFTDEgPSBCSVQoMSksDQo+ID4gK8KgwqDCoMKgRVhUX01BU0tfRlNF TDAgPSBCSVQoMiksDQo+ID4gK8KgwqDCoMKgRVhUX01BU0tfRlNFTDEgPSBCSVQoMyksDQo+ ID4gK8KgwqDCoMKgRVhUX01BU0tfVEUgPSBCSVQoNCksDQo+ID4gK8KgwqDCoMKgRVhUX01B U0tfVVNFTCA9IEJJVCg1KSwNCj4gPiArwqDCoMKgwqBFWFRfTUFTS19XQURBID0gQklUKDYp LA0KPiA+ICvCoMKgwqDCoEVYVF9NQVNLX1RFU1QgPSBCSVQoNykNCj4gPiArfSBFeHRSZWdN YXNrczsNCj4gPiArDQo+ID4gK3R5cGVkZWYgZW51bSBDdHJsUmVnQml0cyB7DQo+ID4gK8Kg wqDCoMKgQ1RSTF9SRUdfUkVTRVQgPSAwLA0KPiA+ICvCoMKgwqDCoENUUkxfUkVHX1dQMCA9 IDEsDQo+ID4gK8KgwqDCoMKgQ1RSTF9SRUdfV1AxID0gMiwNCj4gPiArwqDCoMKgwqBDVFJM X1JFR19BSUUgPSAzLA0KPiA+ICvCoMKgwqDCoENUUkxfUkVHX1RJRSA9IDQsDQo+ID4gK8Kg wqDCoMKgQ1RSTF9SRUdfVUlFID0gNSwNCj4gPiArwqDCoMKgwqBDVFJMX1JFR19DU0VMMCA9 IDYsDQo+ID4gK8KgwqDCoMKgQ1RSTF9SRUdfQ1NFTDEgPSA3DQo+ID4gK30gQ3RybFJlZ0Jp dHM7DQo+ID4gKw0KPiA+ICt0eXBlZGVmIGVudW0gQ3RybFJlZ01hc2sgew0KPiA+ICvCoMKg wqDCoENUUkxfTUFTS19SRVNFVCA9IEJJVCgwKSwNCj4gPiArwqDCoMKgwqBDVFJMX01BU0tf V1AwID0gQklUKDEpLA0KPiA+ICvCoMKgwqDCoENUUkxfTUFTS19XUDEgPSBCSVQoMiksDQo+ ID4gK8KgwqDCoMKgQ1RSTF9NQVNLX0FJRSA9IEJJVCgzKSwNCj4gPiArwqDCoMKgwqBDVFJM X01BU0tfVElFID0gQklUKDQpLA0KPiA+ICvCoMKgwqDCoENUUkxfTUFTS19VSUUgPSBCSVQo NSksDQo+ID4gK8KgwqDCoMKgQ1RSTF9NQVNLX0NTRUwwID0gQklUKDYpLA0KPiA+ICvCoMKg wqDCoENUUkxfTUFTS19DU0VMMSA9IEJJVCg3KQ0KPiA+ICt9IEN0cmxSZWdNYXNrOw0KPiA+ ICsNCj4gPiArdHlwZWRlZiBlbnVtIEZsYWdSZWdCaXRzIHsNCj4gPiArwqDCoMKgwqBGTEFH X1JFR19WREVUID0gMCwNCj4gPiArwqDCoMKgwqBGTEFHX1JFR19WTEYgPSAxLA0KPiA+ICvC oMKgwqDCoEZMQUdfUkVHX1VOVVNFRF8yID0gMiwNCj4gPiArwqDCoMKgwqBGTEFHX1JFR19B RiA9IDMsDQo+ID4gK8KgwqDCoMKgRkxBR19SRUdfVEYgPSA0LA0KPiA+ICvCoMKgwqDCoEZM QUdfUkVHX1VGID0gNSwNCj4gPiArwqDCoMKgwqBGTEFHX1JFR19VTlVTRURfNiA9IDYsDQo+ ID4gK8KgwqDCoMKgRkxBR19SRUdfVU5VU0VEXzcgPSA3DQo+ID4gK30gRmxhZ1JlZ0JpdHM7 DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFJYODkwMF9JTlRFUlJVUFRfU09VUkNFUyA2DQo+ID4g K3R5cGVkZWYgZW51bSBGbGFnUmVnTWFzayB7DQo+ID4gK8KgwqDCoMKgRkxBR19NQVNLX1ZE RVQgPSBCSVQoMCksDQo+ID4gK8KgwqDCoMKgRkxBR19NQVNLX1ZMRiA9IEJJVCgxKSwNCj4g PiArwqDCoMKgwqBGTEFHX01BU0tfVU5VU0VEXzIgPSBCSVQoMiksDQo+ID4gK8KgwqDCoMKg RkxBR19NQVNLX0FGID0gQklUKDMpLA0KPiA+ICvCoMKgwqDCoEZMQUdfTUFTS19URiA9IEJJ VCg0KSwNCj4gPiArwqDCoMKgwqBGTEFHX01BU0tfVUYgPSBCSVQoNSksDQo+ID4gK8KgwqDC oMKgRkxBR19NQVNLX1VOVVNFRF82ID0gQklUKDYpLA0KPiA+ICvCoMKgwqDCoEZMQUdfTUFT S19VTlVTRURfNyA9IEJJVCg3KQ0KPiA+ICt9IEZsYWdSZWdNYXNrOw0KPiA+ICsNCj4gPiAr dHlwZWRlZiBlbnVtIEJhY2t1cFJlZ0JpdHMgew0KPiA+ICvCoMKgwqDCoEJBQ0tVUF9SRUdf QktTTVAwID0gMCwNCj4gPiArwqDCoMKgwqBCQUNLVVBfUkVHX0JLU01QMSA9IDEsDQo+ID4g K8KgwqDCoMKgQkFDS1VQX1JFR19TV09GRiA9IDIsDQo+ID4gK8KgwqDCoMKgQkFDS1VQX1JF R19WREVUT0ZGID0gMw0KPiA+ICt9IEJhY2t1cFJlZ0JpdHM7DQo+ID4gKw0KPiA+ICt0eXBl ZGVmIGVudW0gQmFja3VwUmVnTWFzayB7DQo+ID4gK8KgwqDCoMKgQkFDS1VQX01BU0tfQktT TVAwID0gQklUKDApLA0KPiA+ICvCoMKgwqDCoEJBQ0tVUF9NQVNLX0JLU01QMSA9IEJJVCgx KSwNCj4gPiArwqDCoMKgwqBCQUNLVVBfTUFTS19TV09GRiA9IEJJVCgyKSwNCj4gPiArwqDC oMKgwqBCQUNLVVBfTUFTS19WREVUT0ZGID0gQklUKDMpDQo+ID4gK30gQmFja3VwUmVnTWFz azsNCj4gPiArDQo+ID4gKyNlbmRpZg0KPiA+IGRpZmYgLS1naXQgYS9ody90aW1lci90cmFj ZS1ldmVudHMgYi9ody90aW1lci90cmFjZS1ldmVudHMNCj4gPiBpbmRleCAzNDk1YzQxLi44 ZjQ5NjliIDEwMDY0NA0KPiA+IC0tLSBhL2h3L3RpbWVyL3RyYWNlLWV2ZW50cw0KPiA+ICsr KyBiL2h3L3RpbWVyL3RyYWNlLWV2ZW50cw0KPiA+IEBAIC00OSwzICs0OSwzNCBAQCBhc3Bl ZWRfdGltZXJfY3RybF9wdWxzZV9lbmFibGUodWludDhfdCBpLCBib29sDQo+ID4gZW5hYmxl KSAiVGltZXIgJSIgUFJJdTggIjogJWQiDQo+ID4gwqBhc3BlZWRfdGltZXJfc2V0X2N0cmwy KHVpbnQzMl90IHZhbHVlKSAiVmFsdWU6IDB4JSIgUFJJeDMyDQo+ID4gwqBhc3BlZWRfdGlt ZXJfc2V0X3ZhbHVlKGludCB0aW1lciwgaW50IHJlZywgdWludDMyX3QgdmFsdWUpICJUaW1l cg0KPiA+ICVkIHJlZ2lzdGVyICVkOiAweCUiIFBSSXgzMg0KPiA+IMKgYXNwZWVkX3RpbWVy X3JlYWQodWludDY0X3Qgb2Zmc2V0LCB1bnNpZ25lZCBzaXplLCB1aW50NjRfdCB2YWx1ZSkN Cj4gPiAiRnJvbSAweCUiIFBSSXg2NCAiOiBvZiBzaXplICV1OiAweCUiIFBSSXg2NA0KPiA+ ICsNCj4gPiArIyBody90aW1lci9yeDg5MDAuYw0KPiA+ICtyeDg5MDBfY2FwdHVyZV9jdXJy ZW50X3RpbWUoaW50IGhvdXIsIGludCBtaW51dGUsIGludCBzZWNvbmQsIGludA0KPiA+IHdl ZWtkYXksIGludCBtZGF5LCBpbnQgbW9udGgsIGludCB5ZWFyLCBpbnQgcmF3X2hvdXJzLCBp bnQNCj4gPiByYXdfbWludXRlcywgaW50IHJhd19zZWNvbmRzLCBpbnQgcmF3X3dlZWtkYXks IGludCByYXdfZGF5LCBpbnQNCj4gPiByYXdfbW9udGgsIGludCByYXdfeWVhcikgIlVwZGF0 ZSBjdXJyZW50IHRpbWUgdG8gJTAyZDolMDJkOiUwMmQgJWQNCj4gPiAlZC8lZC8lZCAoMHgl MDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4KSINCj4gPiArcng4OTAwX3JlZ3B0cl91cGRh dGUodWludDMyX3QgcHRyKSAiT3BlcmF0aW5nIG9uIHJlZ2lzdGVyIDB4JTAyeCINCj4gPiAr cng4OTAwX3JlZ3B0cl9vdmVyZmxvdyh2b2lkKSAiUmVnaXN0ZXIgcG9pbnRlciBoYXMgb3Zl cmZsb3dlZCwNCj4gPiB3cmFwcGluZyB0byAwIg0KPiA+ICtyeDg5MDBfZXZlbnRfd2Vla2Rh eShpbnQgd2Vla2RheSwgaW50IHdlZWttYXNrLCBpbnQNCj4gPiB3ZWVrZGF5X29mZnNldCkg IlNldCB3ZWVrZGF5IHRvICVkICgweCUwMngpLCB3ZGF5X29mZnNldD0lZCINCj4gPiArcng4 OTAwX3JlYWRfcmVnaXN0ZXIoaW50IGFkZHJlc3MsIGludCB2YWwpICJSZWFkIHJlZ2lzdGVy IDB4JXggPQ0KPiA+IDB4JXgiDQo+ID4gK3J4ODkwMF9zZXRfZm91dChpbnQgaHopICJTZXR0 aW5nIGZvdXQgdG8gJWRIeiINCj4gPiArcng4OTAwX3NldF9jb3VudGRvd25fdGltZXIoaW50 IGh6KSAiU2V0dGluZyBjb3VudGRvd24gdGltZXIgdG8gJWQNCj4gPiBIeiINCj4gPiArcng4 OTAwX3NldF9jb3VudGRvd25fdGltZXJfcGVyX21pbnV0ZSh2b2lkKSAiU2V0dGluZyBjb3Vu dGRvd24NCj4gPiB0aW1lciB0byBwZXIgbWludXRlIHVwZGF0ZXMiDQo+ID4gK3J4ODkwMF9l bmFibGVfdXBkYXRlX3RpbWVyKHZvaWQpICIiDQo+ID4gK3J4ODkwMF9lbmFibGVfYWxhcm0o dm9pZCkgIiINCj4gPiArcng4OTAwX3RyaWdnZXJfYWxhcm0odm9pZCkgIiINCj4gPiArcng4 OTAwX3RpY2sodm9pZCkgIiINCj4gPiArcng4OTAwX2ZpcmVfaW50ZXJydXB0KHZvaWQpICIi DQo+ID4gK3J4ODkwMF9kaXNhYmxlX3RpbWVyKHZvaWQpICIiDQo+ID4gK3J4ODkwMF9lbmFi bGVfdGltZXIodm9pZCkgIiINCj4gPiArcng4OTAwX2Rpc2FibGVfZm91dCh2b2lkKSAiIg0K PiA+ICtyeDg5MDBfZW5hYmxlX2ZvdXQodm9pZCkgIiINCj4gPiArcng4OTAwX2ZvdXRfdG9n Z2xlKHZvaWQpICIiDQo+ID4gK3J4ODkwMF9kaXNhYmxlX2NvdW50ZG93bl90aW1lcih2b2lk KSAiIg0KPiA+ICtyeDg5MDBfZW5hYmxlX2NvdW50ZG93bl90aW1lcih2b2lkKSAiIg0KPiA+ ICtyeDg5MDBfY291bnRkb3duX3RpY2soaW50IGNvdW50KSAiQ291bnRkb3duIHRpY2ssIGNv dW50PSVkIg0KPiA+ICtyeDg5MDBfY291bnRkb3duX2VsYXBzZWQodm9pZCkgIiINCj4gPiAr cng4OTAwX2kyY19kYXRhX3JlY2VpdmUodWludDhfdCBkYXRhKSAiUmVjZWl2ZWQgSTJDIGRh dGEgMHglMDJ4Ig0KPiA+ICtyeDg5MDBfc2V0X3JlZ2lzdGVyKHVpbnQzMl90IGFkZHIsIHVp bnQ4X3QgZGF0YSkgIlNldCBkYXRhDQo+ID4gMHglMDJ4PTB4JTAyeCINCj4gPiArcng4OTAw X2dldF90ZW1wZXJhdHVyZSh1aW50OF90IHJhdywgZG91YmxlIHZhbCkgIjB4JXggPSAlZkMi DQo+ID4gK3J4ODkwMF9zZXRfdGVtcGVyYXR1cmUodWludDhfdCByYXcsIGRvdWJsZSB2YWwp ICIweCV4ID0gJWZDIg0KPiA+ICtyeDg5MDBfcmVzZXQodm9pZCkgIiINCj4gPiArcng4OTAw X3Bpbl9uYW1lKGNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKm5hbWUpICInJXMnIHBp biBpcw0KPiA+ICclcyciDQo+ID4gK3J4ODkwMF9zZXRfdm9sdGFnZShkb3VibGUgdm9sdGFn ZSkgIkRldmljZSB2b2x0YWdlIHNldCB0byAlZiINCj4gDQo+IElzIHRoZXJlIGEganVzdGlm aWNhdGlvbiBmb3IgYWxsIHRoZSBlbXB0eSB0cmFjZXM/DQoNClRoZXkgYXJlIHVzZWQgdG8g c2hvdyB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLg0KDQotLSANCkFsYXN0YWlyIEQnU2lsdmEN Ck9wZW4gU291cmNlIERldmVsb3Blcg0KTGludXggVGVjaG5vbG9neSBDZW50cmUsIElCTSBB dXN0cmFsaWENCm1vYjogMDQyMyA3NjIgODE5DQoNCg==