From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com. [192.55.52.88]) by gmr-mx.google.com with ESMTP id t69si6935463pfi.1.2016.01.06.08.57.17 for ; Wed, 06 Jan 2016 08:57:17 -0800 (PST) From: "Jiang, Dave" Subject: Re: [PATCH] ntb: ntb perf tool Date: Wed, 6 Jan 2016 16:57:15 +0000 Message-ID: <1452099434.3983.21.camel@intel.com> References: <20160105233732.148863.67802.stgit@djiang5-desk3.ch.intel.com> In-Reply-To: Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 Return-Path: dave.jiang@intel.com To: "jdmason@kudzu.us" Cc: "allen.hubbe@emc.com" , "linux-ntb@googlegroups.com" List-ID: T24gV2VkLCAyMDE2LTAxLTA2IGF0IDEwOjA1IC0wNTAwLCBKb24gTWFzb24gd3JvdGU6DQo+IE9u IFR1ZSwgSmFuIDUsIDIwMTYgYXQgNjozNyBQTSwgRGF2ZSBKaWFuZyA8ZGF2ZS5qaWFuZ0BpbnRl bC5jb20+DQo+IHdyb3RlOg0KPiA+IFByb3ZpZGluZyByYXcgcGVyZm9ybWFuY2UgZGF0YSB2aWEg YSB0b29sIHRoYXQgZGlyZWN0bHkgYWNjZXNzIGRhdGENCj4gPiBmcm9tDQo+ID4gTlRCIHcvbyBh bnkgc29mdHdhcmUgb3ZlcmhlYWQuIFRoaXMgYWxsb3dzIG1lYXN1cmVtZW50IG9mIHRoZQ0KPiA+ IGhhcmR3YXJlDQo+ID4gcGVyZm9ybWFuY2UgbGltaXQuIEluIHJldmlzaW9uIG9uZSB3ZSBhcmUg b25seSBkb2luZyBzaW5nbGUNCj4gPiBkaXJlY3Rpb24NCj4gPiBDUFUgYW5kIERNQSB3cml0ZXMu IEV2ZW50dWFsbHkgd2Ugd2lsbCBwcm92aWRlIGJpLWRpcmVjdGlvbmFsDQo+ID4gd3JpdGVzLg0K PiA+IA0KPiA+IFRoZSBtZWFzdXJlbWVudCB1c2luZyBETUEgZW5naW5lIGZvciBOVEIgcGVyZm9y bWFuY2UgbWVhc3VyZSBkb2VzDQo+ID4gbm90IG1lYXN1cmUgdGhlIHJhdyBwZXJmb3JtYW5jZSBv ZiBETUEgZW5naW5lIG92ZXIgTlRCIGR1ZSB0bw0KPiA+IHNvZnR3YXJlDQo+ID4gb3ZlcmhlYWQu IEJ1dCBpdCBzaG91bGQgcHJvdmlkZSB0aGUgcGVhayBwZXJmb3JtYW5jZSB0aHJvdWdoIHRoZQ0K PiA+IExpbnV4IERNQQ0KPiA+IGRyaXZlci4NCj4gPiANCj4gPiBTaWduZWQtb2ZmLWJ5OiBEYXZl IEppYW5nIDxkYXZlLmppYW5nQGludGVsLmNvbT4NCj4gPiAtLS0NCj4gPiAgZHJpdmVycy9udGIv dGVzdC9LY29uZmlnICAgIHwgICAgOA0KPiA+ICBkcml2ZXJzL250Yi90ZXN0L01ha2VmaWxlICAg fCAgICAxDQo+ID4gIGRyaXZlcnMvbnRiL3Rlc3QvbnRiX3BlcmYuYyB8ICA3NTUNCj4gPiArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ID4gIDMgZmlsZXMgY2hh bmdlZCwgNzY0IGluc2VydGlvbnMoKykNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv bnRiL3Rlc3QvbnRiX3BlcmYuYw0KPiA+IA0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL250Yi90 ZXN0L0tjb25maWcgYi9kcml2ZXJzL250Yi90ZXN0L0tjb25maWcNCj4gPiBpbmRleCAwMTg1MmY5 Li5hYWQ1OThhIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZw0KPiA+ ICsrKyBiL2RyaXZlcnMvbnRiL3Rlc3QvS2NvbmZpZw0KPiA+IEBAIC0xNywzICsxNywxMSBAQCBj b25maWcgTlRCX1RPT0wNCj4gPiAgICAgICAgICBmdW5jdGlvbmluZyBhdCBhIGJhc2ljIGxldmVs Lg0KPiA+IA0KPiA+ICAgICAgICAgIElmIHVuc3VyZSwgc2F5IE4uDQo+ID4gKw0KPiA+ICtjb25m aWcgTlRCX1BFUkYNCj4gPiArICAgICAgIHRyaXN0YXRlICJOVEIgUkFXIFBlcmYgTWVhc3VyaW5n IFRvb2wiDQo+ID4gKyAgICAgICBoZWxwDQo+ID4gKyAgICAgICAgVGhpcyBpcyBhIHRvb2wgdG8g bWVhc3VyZSByYXcgTlRCIHBlcmZvcm1hbmNlIGJ5DQo+ID4gdHJhbnNmZXJpbmcgZGF0YQ0KPiA+ ICsgICAgICAgIHRvIGFuZCBmcm9tIHRoZSB3aW5kb3cgd2l0aG91dCBhZGRpdGlvbmFsIHNvZnR3 YXJlDQo+ID4gaW50ZXJhY3Rpb24uDQo+ID4gKw0KPiA+ICsgICAgICAgIElmIHVuc3VyZSwgc2F5 IE4uDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnRiL3Rlc3QvTWFrZWZpbGUgYi9kcml2ZXJz L250Yi90ZXN0L01ha2VmaWxlDQo+ID4gaW5kZXggMGVhMzJhMy4uOWU3N2UwYiAxMDA2NDQNCj4g PiAtLS0gYS9kcml2ZXJzL250Yi90ZXN0L01ha2VmaWxlDQo+ID4gKysrIGIvZHJpdmVycy9udGIv dGVzdC9NYWtlZmlsZQ0KPiA+IEBAIC0xLDIgKzEsMyBAQA0KPiA+ICBvYmotJChDT05GSUdfTlRC X1BJTkdQT05HKSArPSBudGJfcGluZ3Bvbmcubw0KPiA+ICBvYmotJChDT05GSUdfTlRCX1RPT0wp ICs9IG50Yl90b29sLm8NCj4gPiArb2JqLSQoQ09ORklHX05UQl9QRVJGKSArPSBudGJfcGVyZi5v DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnRiL3Rlc3QvbnRiX3BlcmYuYw0KPiA+IGIvZHJp dmVycy9udGIvdGVzdC9udGJfcGVyZi5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBp bmRleCAwMDAwMDAwLi5mZTBmMTNjDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZl cnMvbnRiL3Rlc3QvbnRiX3BlcmYuYw0KPiA+IEBAIC0wLDAgKzEsNzU1IEBADQo+ID4gKy8qDQo+ ID4gKyAqIFRoaXMgZmlsZSBpcyBwcm92aWRlZCB1bmRlciBhIGR1YWwgQlNEL0dQTHYyIGxpY2Vu c2UuICBXaGVuDQo+ID4gdXNpbmcgb3INCj4gPiArICogICByZWRpc3RyaWJ1dGluZyB0aGlzIGZp bGUsIHlvdSBtYXkgZG8gc28gdW5kZXIgZWl0aGVyIGxpY2Vuc2UuDQo+ID4gKyAqDQo+ID4gKyAq ICAgR1BMIExJQ0VOU0UgU1VNTUFSWQ0KPiA+ICsgKg0KPiA+ICsgKiAgIENvcHlyaWdodChjKSAy MDE1IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPiA+ICsgKg0KPiA+ ICsgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3INCj4gPiBtb2RpZnkNCj4gPiArICogICBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCj4gPiBMaWNlbnNlIGFzDQo+ID4g KyAqICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uDQo+ID4gKyAq DQo+ID4gKyAqICAgQlNEIExJQ0VOU0UNCj4gPiArICoNCj4gPiArICogICBDb3B5cmlnaHQoYykg MjAxNSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gPiArICoNCj4g PiArICogICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z LCB3aXRoIG9yDQo+ID4gd2l0aG91dA0KPiA+ICsgKiAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcNCj4gPiBjb25kaXRpb25zDQo+ID4gKyAq ICAgYXJlIG1ldDoNCj4gPiArICoNCj4gPiArICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQ0KPiA+IGNvcHlyaWdodA0KPiA+ICsgKiAg ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nDQo+ ID4gZGlzY2xhaW1lci4NCj4gPiArICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQ0KPiA+IGNvcHkNCj4gPiArICogICAgICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZw0KPiA+IGRpc2Ns YWltZXIgaW4NCj4gPiArICogICAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h dGVyaWFscyBwcm92aWRlZCB3aXRoDQo+ID4gdGhlDQo+ID4gKyAqICAgICAgIGRpc3RyaWJ1dGlv bi4NCj4gPiArICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBu b3IgdGhlIG5hbWVzIG9mDQo+ID4gaXRzDQo+ID4gKyAqICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkg YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMNCj4gPiBkZXJpdmVkDQo+ID4g KyAqICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0 ZW4NCj4gPiBwZXJtaXNzaW9uLg0KPiA+ICsgKg0KPiA+ICsgKiAgIFRISVMgU09GVFdBUkUgSVMg UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORA0KPiA+IENPTlRSSUJVVE9SUw0K PiA+ICsgKiAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQNCj4gPiBOT1QNCj4gPiArICogICBMSU1JVEVEIFRPLCBUSEUgSU1QTElF RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQNCj4gPiBGSVRORVNTIEZPUg0KPiA+ ICsgKiAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT SEFMTCBUSEUNCj4gPiBDT1BZUklHSFQNCj4gPiArICogICBPV05FUiBPUiBDT05UUklCVVRPUlMg QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwNCj4gPiBJTkNJREVOVEFMLA0KPiA+ ICsgKiAgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM VURJTkcsIEJVVA0KPiA+IE5PVA0KPiA+ICsgKiAgIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MNCj4gPiBPRiBVU0UsDQo+ID4gKyAq ICAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB VVNFRA0KPiA+IEFORCBPTiBBTlkNCj4gPiArICogICBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLA0KPiA+IE9SIFRPUlQNCj4gPiArICog ICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg T1VUIE9GDQo+ID4gVEhFIFVTRQ0KPiA+ICsgKiAgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSA0KPiA+IERBTUFHRS4NCj4gPiArICoN Cj4gPiArICogICBQQ0llIE5UQiBQZXJmIExpbnV4IGRyaXZlcg0KPiA+ICsgKi8NCj4gPiArDQo+ ID4gKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwu aD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgv a3RocmVhZC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvdGltZS5oPg0KPiA+ICsjaW5jbHVkZSA8 bGludXgvdGltZXIuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+DQo+ID4g KyNpbmNsdWRlIDxsaW51eC9wY2kuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4NCj4g PiArI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9kZWJ1 Z2ZzLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4NCj4gPiArI2luY2x1ZGUg PGxpbnV4L2RlbGF5Lmg+DQo+ID4gKw0KPiANCj4gbml0LCByZW1vdmUgdGhlIG5ldyBsaW5lIGFi b3ZlDQo+IA0KPiA+ICsjaW5jbHVkZSA8bGludXgvbnRiLmg+DQo+ID4gKw0KPiA+ICsjZGVmaW5l IERSSVZFUl9OQU1FICAgICAgICAgICAgIm50Yl9wZXJmIg0KPiA+ICsjZGVmaW5lIERSSVZFUl9E RVNDUklQVElPTiAgICAgIlBDSWUgTlRCIFBlcmZvcm1hbmNlIE1lYXN1cmVtZW50DQo+ID4gVG9v bCINCj4gPiArDQo+ID4gKyNkZWZpbmUgRFJJVkVSX0xJQ0VOU0UgICAgICAgICAiRHVhbCBCU0Qv R1BMIg0KPiA+ICsjZGVmaW5lIERSSVZFUl9WRVJTSU9OICAgICAgICAgIjEuMCINCj4gPiArI2Rl ZmluZSBEUklWRVJfQVVUSE9SICAgICAgICAgICJEYXZlIEppYW5nIDxkYXZlLmppYW5nQGludGVs LmNvbT4iDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBFUkZfTElOS19ET1dOX1RJTUVPVVQgMTANCj4g PiArI2RlZmluZSBQRVJGX1ZFUlNJT04gICAgICAgICAgIDB4ZmZmZjAwMDENCj4gPiArI2RlZmlu ZSBNQVhfVEhSRUFEUyAgICAgICAgICAgIDMyDQo+ID4gKyNkZWZpbmUgTUFYX1RFU1RfU0laRSAg ICAgICAgICAxMDI0KjEwMjQgICAgICAgLyogMU0gKi8NCj4gDQo+IHVzaW5nIFNaXzFNIHdvdWxk IGJlIGJldHRlciB0aGFuIGRlZmluaW5nIGl0IGhlcmUuDQo+IA0KPiA+ICsjZGVmaW5lIE1BWF9T UkNTICAgICAgICAgICAgICAgMzINCj4gDQo+IElzIHRoaXMgcmVsYXRlZCB0byBtYXggdGhyZWFk cyBhYm92ZT8gIElmIHNvLCBtYWtlIGl0IG1vdmUgb2J2aW91cw0KPiBhbmQNCj4gdGllIHRoZW0g dG9nZXRoZXIuDQoNCk5vIHRoZXNlIGFyZSBhcmJpdHJhcnkgYW5kIG5vdCByZWxhdGVkLg0KDQoN Cj4gDQo+ID4gKyNkZWZpbmUgRE1BX09VVF9SRVNPVVJDRV9UTyAgICA1MA0KPiA+ICsjZGVmaW5l IERNQV9SRVRSSUVTICAgICAgICAgICAgMjANCj4gPiArDQo+ID4gK01PRFVMRV9MSUNFTlNFKERS SVZFUl9MSUNFTlNFKTsNCj4gPiArTU9EVUxFX1ZFUlNJT04oRFJJVkVSX1ZFUlNJT04pOw0KPiA+ ICtNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOw0KPiA+ICtNT0RVTEVfREVTQ1JJUFRJT04o RFJJVkVSX0RFU0NSSVBUSU9OKTsNCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpw ZXJmX2RlYnVnZnNfZGlyOw0KPiA+ICsNCj4gPiArc3RhdGljIHVuc2lnbmVkIGludCBzZWdfb3Jk ZXIgPSAxOTsgLyogNTEySyAqLw0KPiA+ICttb2R1bGVfcGFyYW0oc2VnX29yZGVyLCB1aW50LCAw NjQ0KTsNCj4gPiArTU9EVUxFX1BBUk1fREVTQyhzZWdfb3JkZXIsICJzaXplIG9yZGVyIFtuXjJd IG9mIGJ1ZmZlciBzZWdtZW50DQo+ID4gZm9yIHRlc3RpbmciKTsNCj4gPiArDQo+ID4gK3N0YXRp YyB1bnNpZ25lZCBpbnQgcnVuX29yZGVyID0gMzI7IC8qIDRHICovDQo+ID4gK21vZHVsZV9wYXJh bShydW5fb3JkZXIsIHVpbnQsIDA2NDQpOw0KPiA+ICtNT0RVTEVfUEFSTV9ERVNDKHJ1bl9vcmRl ciwgInNpemUgb3JkZXIgW25eMl0gb2YgdG90YWwgZGF0YSB0bw0KPiA+IHRyYW5zZmVyIik7DQo+ ID4gKw0KPiA+ICtzdGF0aWMgYm9vbCB1c2VfZG1hID0gZmFsc2U7DQo+ID4gK21vZHVsZV9wYXJh bSh1c2VfZG1hLCBib29sLCAwNjQ0KTsNCj4gPiArTU9EVUxFX1BBUk1fREVTQyh1c2VfZG1hLCAi VXNpbmcgRE1BIGVuZ2luZSB0byBtZWFzdXJlDQo+ID4gcGVyZm9ybWFuY2UiKTsNCj4gPiArDQo+ ID4gK3N0cnVjdCBwZXJmX213IHsNCj4gPiArICAgICAgIHBoeXNfYWRkcl90ICAgICBwaHlzX2Fk ZHI7DQo+ID4gKyAgICAgICByZXNvdXJjZV9zaXplX3QgcGh5c19zaXplOw0KPiA+ICsgICAgICAg cmVzb3VyY2Vfc2l6ZV90IHhsYXRfYWxpZ247DQo+ID4gKyAgICAgICByZXNvdXJjZV9zaXplX3Qg eGxhdF9hbGlnbl9zaXplOw0KPiA+ICsgICAgICAgdm9pZCBfX2lvbWVtICAgICp2YmFzZTsNCj4g PiArICAgICAgIHNpemVfdCAgICAgICAgICB4bGF0X3NpemU7DQo+ID4gKyAgICAgICBzaXplX3Qg ICAgICAgICAgYnVmX3NpemU7DQo+ID4gKyAgICAgICB2b2lkICAgICAgICAgICAgKnZpcnRfYWRk cjsNCj4gPiArICAgICAgIGRtYV9hZGRyX3QgICAgICBkbWFfYWRkcjsNCj4gPiArfTsNCj4gPiAr DQo+ID4gK3N0cnVjdCBwZXJmX2N0eDsNCj4gPiArDQo+ID4gK3N0cnVjdCBwdGhyX2N0eCB7DQo+ ID4gKyAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgICAgICAqdGhyZWFkOw0KPiA+ICsgICAgICAg c3RydWN0IHBlcmZfY3R4ICAgICAgICAgKnBlcmY7DQo+ID4gKyAgICAgICBhdG9taWNfdCAgICAg ICAgICAgICAgICBkbWFfc3luYzsNCj4gPiArICAgICAgIHN0cnVjdCBkbWFfY2hhbiAgICAgICAg ICpkbWFfY2hhbjsNCj4gPiArICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgIGRtYV9wcmVw X2VycjsNCj4gPiArICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgIHNyY19pZHg7DQo+ID4g KyAgICAgICB2b2lkICAgICAgICAgICAgICAgICAgICAqc3Jjc1tNQVhfU1JDU107DQo+ID4gK307 DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgcGVyZl9jdHggew0KPiA+ICsgICAgICAgc3RydWN0IG50Yl9k ZXYgICAgICAgICAgKm50YjsNCj4gPiArICAgICAgIHNwaW5sb2NrX3QgICAgICAgICAgICAgIGRi X2xvY2s7DQo+ID4gKyAgICAgICBzdHJ1Y3QgcGVyZl9tdyAgICAgICAgICBtdzsNCj4gPiArICAg ICAgIGJvb2wgICAgICAgICAgICAgICAgICAgIGxpbmtfaXNfdXA7DQo+ID4gKyAgICAgICBzdHJ1 Y3Qgd29ya19zdHJ1Y3QgICAgICBsaW5rX2NsZWFudXA7DQo+ID4gKyAgICAgICBzdHJ1Y3QgZGVs YXllZF93b3JrICAgICBsaW5rX3dvcms7DQo+ID4gKyAgICAgICBzdHJ1Y3QgZGVudHJ5ICAgICAg ICAgICAqZGVidWdmc19ub2RlX2RpcjsNCj4gPiArICAgICAgIHN0cnVjdCBkZW50cnkgICAgICAg ICAgICpkZWJ1Z2ZzX3J1bjsNCj4gPiArICAgICAgIHN0cnVjdCBkZW50cnkgICAgICAgICAgICpk ZWJ1Z2ZzX3RocmVhZHM7DQo+ID4gKyAgICAgICB1OCAgICAgICAgICAgICAgICAgICAgICBwZXJm X3RocmVhZHM7DQo+ID4gKyAgICAgICBib29sICAgICAgICAgICAgICAgICAgICBydW47DQo+ID4g KyAgICAgICBzdHJ1Y3QgcHRocl9jdHggICAgICAgICBwdGhyX2N0eFtNQVhfVEhSRUFEU107DQo+ ID4gKyAgICAgICBhdG9taWNfdCAgICAgICAgICAgICAgICB0c3luYzsNCj4gPiArfTsNCj4gPiAr DQo+ID4gK2VudW0gew0KPiA+ICsgICAgICAgVkVSU0lPTiA9IDAsDQo+ID4gKyAgICAgICBNV19T Wl9ISUdILA0KPiA+ICsgICAgICAgTVdfU1pfTE9XLA0KPiA+ICsgICAgICAgU1BBRF9NU0csDQo+ ID4gKyAgICAgICBTUEFEX0FDSywNCj4gPiArICAgICAgIE1BWF9TUEFEDQo+ID4gK307DQo+ID4g Kw0KPiA+ICtzdGF0aWMgdm9pZCBwZXJmX2xpbmtfZXZlbnQodm9pZCAqY3R4KQ0KPiA+ICt7DQo+ ID4gKyAgICAgICBzdHJ1Y3QgcGVyZl9jdHggKnBlcmYgPSBjdHg7DQo+ID4gKw0KPiA+ICsgICAg ICAgaWYgKG50Yl9saW5rX2lzX3VwKHBlcmYtPm50YiwgTlVMTCwgTlVMTCkgPT0gMSkNCj4gDQo+ IFRoZSBjb21wYXJpc29uIHRvIG9uZSBzZWVtcyB1bm5lY2Vzc2FyeQ0KPiANCj4gPiArICAgICAg ICAgICAgICAgc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwZXJmLT5saW5rX3dvcmssIDApOw0KPiA+ ICsgICAgICAgZWxzZQ0KPiA+ICsgICAgICAgICAgICAgICBzY2hlZHVsZV93b3JrKCZwZXJmLT5s aW5rX2NsZWFudXApOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBwZXJmX2RiX2V2 ZW50KHZvaWQgKmN0eCwgaW50IHZlYykNCj4gPiArew0KPiA+ICsgICAgICAgc3RydWN0IHBlcmZf Y3R4ICpwZXJmID0gY3R4Ow0KPiA+ICsgICAgICAgdTY0IGRiX2JpdHMsIGRiX21hc2s7DQo+ID4g Kw0KPiA+ICsgICAgICAgZGJfbWFzayA9IG50Yl9kYl92ZWN0b3JfbWFzayhwZXJmLT5udGIsIHZl Yyk7DQo+ID4gKyAgICAgICBkYl9iaXRzID0gbnRiX2RiX3JlYWQocGVyZi0+bnRiKTsNCj4gPiAr DQo+ID4gKyAgICAgICBkZXZfZGJnKCZwZXJmLT5udGItPmRldiwgImRvb3JiZWxsIHZlYyAlZCBt YXNrICUjbGx4IGJpdHMNCj4gPiAlI2xseFxuIiwNCj4gPiArICAgICAgICAgICAgICAgdmVjLCBk Yl9tYXNrLCBkYl9iaXRzKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVj dCBudGJfY3R4X29wcyBwZXJmX29wcyA9IHsNCj4gPiArICAgICAgIC5saW5rX2V2ZW50ID0gcGVy Zl9saW5rX2V2ZW50LA0KPiA+ICsgICAgICAgLmRiX2V2ZW50ID0gcGVyZl9kYl9ldmVudCwNCj4g PiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHBlcmZfY29weV9jYWxsYmFjayh2b2lkICpk YXRhKQ0KPiA+ICt7DQo+ID4gKyAgICAgICBzdHJ1Y3QgcHRocl9jdHggKnBjdHggPSBkYXRhOw0K PiA+ICsNCj4gPiArICAgICAgIGF0b21pY19kZWMoJnBjdHgtPmRtYV9zeW5jKTsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIHNzaXplX3QgcGVyZl9jb3B5KHN0cnVjdCBwdGhyX2N0eCAqcGN0 eCwgY2hhciAqZHN0LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpzcmMsIHNp emVfdCBzaXplKQ0KPiA+ICt7DQo+ID4gKyAgICAgICBzdHJ1Y3QgcGVyZl9jdHggKnBlcmYgPSBw Y3R4LT5wZXJmOw0KPiA+ICsgICAgICAgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0 eGQ7DQo+ID4gKyAgICAgICBzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4gPSBwY3R4LT5kbWFfY2hhbjsN Cj4gPiArICAgICAgIHN0cnVjdCBkbWFfZGV2aWNlICpkZXZpY2U7DQo+ID4gKyAgICAgICBzdHJ1 Y3QgZG1hZW5naW5lX3VubWFwX2RhdGEgKnVubWFwOw0KPiA+ICsgICAgICAgZG1hX2Nvb2tpZV90 IGNvb2tpZTsNCj4gPiArICAgICAgIHNpemVfdCBzcmNfb2ZmLCBkc3Rfb2ZmOw0KPiA+ICsgICAg ICAgc3RydWN0IHBlcmZfbXcgKm13ID0gJnBlcmYtPm13Ow0KPiA+ICsgICAgICAgdTY0IHZiYXNl LCBkc3RfdmFkZHI7DQo+ID4gKyAgICAgICBkbWFfYWRkcl90IGRzdF9waHlzOw0KPiA+ICsgICAg ICAgaW50IHJldHJpZXMgPSAwOw0KPiA+ICsNCj4gPiArICAgICAgIGlmICghdXNlX2RtYSkgew0K PiA+ICsgICAgICAgICAgICAgICBtZW1jcHlfdG9pbyhkc3QsIHNyYywgc2l6ZSk7DQo+ID4gKyAg ICAgICAgICAgICAgIHJldHVybiBzaXplOw0KPiA+ICsgICAgICAgfQ0KPiA+ICsNCj4gPiArICAg ICAgIGlmICghY2hhbikgew0KPiA+ICsgICAgICAgICAgICAgICBkZXZfZXJyKCZwZXJmLT5udGIt PmRldiwgIkRNQSBlbmdpbmUgZG9lcyBub3QNCj4gPiBleGlzdFxuIik7DQo+ID4gKyAgICAgICAg ICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAg IGRldmljZSA9IGNoYW4tPmRldmljZTsNCj4gPiArICAgICAgIHNyY19vZmYgPSAoc2l6ZV90KXNy YyAmIH5QQUdFX01BU0s7DQo+ID4gKyAgICAgICBkc3Rfb2ZmID0gKHNpemVfdClkc3QgJiB+UEFH RV9NQVNLOw0KPiA+ICsNCj4gPiArICAgICAgIGlmICghaXNfZG1hX2NvcHlfYWxpZ25lZChkZXZp Y2UsIHNyY19vZmYsIGRzdF9vZmYsIHNpemUpKQ0KPiA+ICsgICAgICAgICAgICAgICByZXR1cm4g LUVOT0RFVjsNCj4gPiArDQo+ID4gKyAgICAgICB2YmFzZSA9ICh1NjQpKHU2NCAqKW13LT52YmFz ZTsNCj4gPiArICAgICAgIGRzdF92YWRkciA9ICh1NjQpKHU2NCAqKWRzdDsNCj4gPiArICAgICAg IGRzdF9waHlzID0gbXctPnBoeXNfYWRkciArIChkc3RfdmFkZHIgLSB2YmFzZSk7DQo+ID4gKw0K PiA+ICsgICAgICAgdW5tYXAgPSBkbWFlbmdpbmVfZ2V0X3VubWFwX2RhdGEoZGV2aWNlLT5kZXYs IDEsDQo+ID4gR0ZQX05PV0FJVCk7DQo+ID4gKyAgICAgICBpZiAoIXVubWFwKQ0KPiA+ICsgICAg ICAgICAgICAgICByZXR1cm4gLUVOT01FTTsNCj4gPiArDQo+ID4gKyAgICAgICB1bm1hcC0+bGVu ID0gc2l6ZTsNCj4gPiArICAgICAgIHVubWFwLT5hZGRyWzBdID0gZG1hX21hcF9wYWdlKGRldmlj ZS0+ZGV2LA0KPiA+IHZpcnRfdG9fcGFnZShzcmMpLA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3JjX29mZiwgc2l6ZSwNCj4gPiBETUFfVE9fREVWSUNFKTsNCj4g PiArICAgICAgIGlmIChkbWFfbWFwcGluZ19lcnJvcihkZXZpY2UtPmRldiwgdW5tYXAtPmFkZHJb MF0pKQ0KPiA+ICsgICAgICAgICAgICAgICBnb3RvIGVycl9nZXRfdW5tYXA7DQo+ID4gKw0KPiA+ ICsgICAgICAgdW5tYXAtPnRvX2NudCA9IDE7DQo+ID4gKw0KPiA+ICsgICAgICAgZG8gew0KPiA+ ICsgICAgICAgICAgICAgICB0eGQgPSBkZXZpY2UtPmRldmljZV9wcmVwX2RtYV9tZW1jcHkoY2hh biwNCj4gPiBkc3RfcGh5cywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVubWFwDQo+ID4gLT5hZGRyWzBdLA0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSwNCj4gPiBETUFf UFJFUF9JTlRFUlJVUFQpOw0KPiA+ICsgICAgICAgICAgICAgICBpZiAoIXR4ZCkgew0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgIHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJM RSk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVfdGltZW91dChETUFfT1VU X1JFU09VUkNFX1RPKTsNCj4gPiArICAgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgfSB3aGls ZSAoIXR4ZCAmJiAoKytyZXRyaWVzIDwgRE1BX1JFVFJJRVMpKTsNCj4gPiArDQo+ID4gKyAgICAg ICBpZiAoIXR4ZCkgew0KPiA+ICsgICAgICAgICAgICAgICBwY3R4LT5kbWFfcHJlcF9lcnIrKzsN Cj4gPiArICAgICAgICAgICAgICAgZ290byBlcnJfZ2V0X3VubWFwOw0KPiA+ICsgICAgICAgfQ0K PiA+ICsNCj4gPiArICAgICAgIHR4ZC0+Y2FsbGJhY2sgPSBwZXJmX2NvcHlfY2FsbGJhY2s7DQo+ ID4gKyAgICAgICB0eGQtPmNhbGxiYWNrX3BhcmFtID0gcGN0eDsNCj4gPiArICAgICAgIGRtYV9z ZXRfdW5tYXAodHhkLCB1bm1hcCk7DQo+ID4gKw0KPiA+ICsgICAgICAgY29va2llID0gZG1hZW5n aW5lX3N1Ym1pdCh0eGQpOw0KPiA+ICsgICAgICAgaWYgKGRtYV9zdWJtaXRfZXJyb3IoY29va2ll KSkNCj4gPiArICAgICAgICAgICAgICAgZ290byBlcnJfc2V0X3VubWFwOw0KPiA+ICsNCj4gPiAr ICAgICAgIGF0b21pY19pbmMoJnBjdHgtPmRtYV9zeW5jKTsNCj4gPiArICAgICAgIGRtYV9hc3lu Y19pc3N1ZV9wZW5kaW5nKGNoYW4pOw0KPiA+ICsNCj4gPiArICAgICAgIHJldHVybiBzaXplOw0K PiA+ICsNCj4gPiArZXJyX3NldF91bm1hcDoNCj4gPiArICAgICAgIGRtYWVuZ2luZV91bm1hcF9w dXQodW5tYXApOw0KPiA+ICtlcnJfZ2V0X3VubWFwOg0KPiA+ICsgICAgICAgZG1hZW5naW5lX3Vu bWFwX3B1dCh1bm1hcCk7DQo+ID4gKyAgICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4g PiArc3RhdGljIGludCBwZXJmX21vdmVfZGF0YShzdHJ1Y3QgcHRocl9jdHggKnBjdHgsIGNoYXIg KmRzdCwgY2hhcg0KPiA+ICpzcmMsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICB1NjQg YnVmX3NpemUsIHU2NCB3aW5fc2l6ZSwgdTY0IHRvdGFsKQ0KPiA+ICt7DQo+ID4gKyAgICAgICBp bnQgY2h1bmtzLCB0b3RhbF9jaHVua3MsIGk7DQo+ID4gKyAgICAgICBpbnQgY29waWVkX2NodW5r cyA9IDA7DQo+ID4gKyAgICAgICB1NjQgY29waWVkID0gMCwgcmVzdWx0Ow0KPiA+ICsgICAgICAg Y2hhciAqdG1wID0gZHN0Ow0KPiA+ICsgICAgICAgdTY0IHBlcmYsIGRpZmZfdXM7DQo+ID4gKyAg ICAgICBrdGltZV90IGtzdGFydCwga3N0b3AsIGtkaWZmOw0KPiA+ICsNCj4gPiArICAgICAgIGNo dW5rcyA9IHdpbl9zaXplIC8gYnVmX3NpemU7DQo+ID4gKyAgICAgICB0b3RhbF9jaHVua3MgPSB0 b3RhbCAvIGJ1Zl9zaXplOw0KPiA+ICsgICAgICAga3N0YXJ0ID0ga3RpbWVfZ2V0KCk7DQo+ID4g Kw0KPiA+ICsgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsX2NodW5rczsgaSsrKSB7DQo+ID4g KyAgICAgICAgICAgICAgIHJlc3VsdCA9IHBlcmZfY29weShwY3R4LCB0bXAsIHNyYywgYnVmX3Np emUpOw0KPiA+ICsgICAgICAgICAgICAgICBjb3BpZWQgKz0gcmVzdWx0Ow0KPiA+ICsgICAgICAg ICAgICAgICBjb3BpZWRfY2h1bmtzKys7DQo+ID4gKyAgICAgICAgICAgICAgIGlmIChjb3BpZWRf Y2h1bmtzID09IGNodW5rcykgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IGRz dDsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBjb3BpZWRfY2h1bmtzID0gMDsNCj4gPiAr ICAgICAgICAgICAgICAgfSBlbHNlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgdG1wICs9 IGJ1Zl9zaXplOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgLyogcHJvYmFibHkgc2hvdWxk IHNjaGVkdWxlIGV2ZXJ5IDRHQj8gKi8NCj4gPiArICAgICAgICAgICAgICAgaWYgKCgoY29waWVk ICUgKDFVTEwgPDwgMzIpKSA9PSAwKSAmJiAhdXNlX2RtYSkgew0KPiANCj4gSSdkIHByZWZlciB5 b3UgI2RlZmluZSBTWl80RyBhbmQgdXNlIGl0IGFib3ZlDQo+IA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgIHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7DQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGUoKTsNCj4gPiArICAgICAgICAgICAgICAgfQ0K PiA+ICsgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgIGlmICh1c2VfZG1hKQ0KPiA+ICsgICAg ICAgICAgICAgICBwcl9pbmZvKCIlczogQWxsIERNQSBkZXNjcmlwdG9ycyBzdWJtaXR0ZWRcbiIs DQo+ID4gY3VycmVudC0+Y29tbSk7DQo+ID4gKw0KPiA+ICsgICAgICAgd2hpbGUgKGF0b21pY19y ZWFkKCZwY3R4LT5kbWFfc3luYykgIT0gMCkNCj4gPiArICAgICAgICAgICAgICAgbXNsZWVwKDEp Ow0KPiA+ICsNCj4gPiArICAgICAgIGtzdG9wID0ga3RpbWVfZ2V0KCk7DQo+ID4gKyAgICAgICBr ZGlmZiA9IGt0aW1lX3N1Yihrc3RvcCwga3N0YXJ0KTsNCj4gPiArICAgICAgIGRpZmZfdXMgPSBr dGltZV90b191cyhrZGlmZik7DQo+ID4gKw0KPiA+ICsgICAgICAgcHJfaW5mbygiJXM6IGNvcGll ZCAlTHUgYnl0ZXNcbiIsIGN1cnJlbnQtPmNvbW0sIGNvcGllZCk7DQo+ID4gKw0KPiA+ICsgICAg ICAgcHJfaW5mbygiJXM6IGxhc3RlZCAlTHUgdXNlY3NcbiIsIGN1cnJlbnQtPmNvbW0sIGRpZmZf dXMpOw0KPiA+ICsNCj4gPiArICAgICAgIHBlcmYgPSBjb3BpZWQgLyBkaWZmX3VzOw0KPiA+ICsN Cj4gPiArICAgICAgIHByX2luZm8oIiVzOiBNQnl0ZXMvczogJUx1XG4iLCBjdXJyZW50LT5jb21t LCBwZXJmKTsNCj4gPiArDQo+ID4gKyAgICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4g PiArc3RhdGljIGJvb2wgcGVyZl9kbWFfZmlsdGVyX2ZuKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwg dm9pZCAqbm9kZSkNCj4gPiArew0KPiA+ICsgICAgICAgcmV0dXJuIGRldl90b19ub2RlKCZjaGFu LT5kZXYtPmRldmljZSkgPT0gKGludCkodW5zaWduZWQNCj4gPiBsb25nKW5vZGU7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbnRiX3BlcmZfdGhyZWFkKHZvaWQgKmRhdGEpDQo+ID4g K3sNCj4gPiArICAgICAgIHN0cnVjdCBwdGhyX2N0eCAqcGN0eCA9IGRhdGE7DQo+ID4gKyAgICAg ICBzdHJ1Y3QgcGVyZl9jdHggKnBlcmYgPSBwY3R4LT5wZXJmOw0KPiA+ICsgICAgICAgc3RydWN0 IHBjaV9kZXYgKnBkZXYgPSBwZXJmLT5udGItPnBkZXY7DQo+ID4gKyAgICAgICBzdHJ1Y3QgcGVy Zl9tdyAqbXcgPSAmcGVyZi0+bXc7DQo+ID4gKyAgICAgICBjaGFyICpkc3Q7DQo+ID4gKyAgICAg ICB1NjQgd2luX3NpemUsIGJ1Zl9zaXplLCB0b3RhbDsNCj4gPiArICAgICAgIHZvaWQgKnNyYzsN Cj4gPiArICAgICAgIGludCByYywgbm9kZSwgaTsNCj4gPiArICAgICAgIHN0cnVjdCBkbWFfY2hh biAqZG1hX2NoYW4gPSBOVUxMOw0KPiA+ICsNCj4gPiArICAgICAgIHByX2luZm8oImt0aHJlYWQg JXMgc3RhcnRpbmcuLi5cbiIsIGN1cnJlbnQtPmNvbW0pOw0KPiA+ICsNCj4gPiArICAgICAgIG5v ZGUgPSBkZXZfdG9fbm9kZSgmcGRldi0+ZGV2KTsNCj4gPiArDQo+ID4gKyAgICAgICBpZiAodXNl X2RtYSAmJiAhcGN0eC0+ZG1hX2NoYW4pIHsNCj4gPiArICAgICAgICAgICAgICAgZG1hX2NhcF9t YXNrX3QgZG1hX21hc2s7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICBkbWFfY2FwX3plcm8o ZG1hX21hc2spOw0KPiA+ICsgICAgICAgICAgICAgICBkbWFfY2FwX3NldChETUFfTUVNQ1BZLCBk bWFfbWFzayk7DQo+ID4gKyAgICAgICAgICAgICAgIGRtYV9jaGFuID0gZG1hX3JlcXVlc3RfY2hh bm5lbChkbWFfbWFzaywNCj4gPiBwZXJmX2RtYV9maWx0ZXJfZm4sDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSh1bnNpZ25lZA0KPiA+ IGxvbmcpbm9kZSk7DQo+ID4gKyAgICAgICAgICAgICAgIGlmICghZG1hX2NoYW4pIHsNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICBwcl93YXJuKCIlczogY2Fubm90IGFjcXVpcmUgRE1BIGNo YW5uZWwsDQo+ID4gcXVpdHRpbmdcbiIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjdXJyZW50LT5jb21tKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g LUVOT0RFVjsNCj4gPiArICAgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgICAgICBwY3R4 LT5kbWFfY2hhbiA9IGRtYV9jaGFuOw0KPiA+ICsgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAg IGZvciAoaSA9IDA7IGkgPCBNQVhfU1JDUzsgaSsrKSB7DQo+ID4gKyAgICAgICAgICAgICAgIHBj dHgtPnNyY3NbaV0gPSBrbWFsbG9jX25vZGUoTUFYX1RFU1RfU0laRSwNCj4gPiBHRlBfS0VSTkVM LCBub2RlKTsNCj4gPiArICAgICAgICAgICAgICAgaWYgKCFwY3R4LT5zcmNzW2ldKSB7DQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgcmMgPSAtRU5PTUVNOw0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgIGdvdG8gZXJyOw0KPiA+ICsgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICB9 DQo+ID4gKw0KPiA+ICsgICAgICAgd2luX3NpemUgPSBtdy0+cGh5c19zaXplOw0KPiA+ICsgICAg ICAgYnVmX3NpemUgPSAxVUxMIDw8IHNlZ19vcmRlcjsNCj4gPiArICAgICAgIHRvdGFsID0gMVVM TCA8PCBydW5fb3JkZXI7DQo+ID4gKw0KPiA+ICsgICAgICAgaWYgKGJ1Zl9zaXplID4gTUFYX1RF U1RfU0laRSkNCj4gPiArICAgICAgICAgICAgICAgYnVmX3NpemUgPSBNQVhfVEVTVF9TSVpFOw0K PiA+ICsNCj4gPiArICAgICAgIGRzdCA9IChjaGFyICopbXctPnZiYXNlOw0KPiA+ICsNCj4gPiAr ICAgICAgIGF0b21pY19pbmMoJnBlcmYtPnRzeW5jKTsNCj4gPiArICAgICAgIHdoaWxlIChhdG9t aWNfcmVhZCgmcGVyZi0+dHN5bmMpICE9IHBlcmYtPnBlcmZfdGhyZWFkcykNCj4gPiArICAgICAg ICAgICAgICAgc2NoZWR1bGUoKTsNCj4gPiArDQo+ID4gKyAgICAgICBzcmMgPSBwY3R4LT5zcmNz W3BjdHgtPnNyY19pZHhdOw0KPiA+ICsgICAgICAgcGN0eC0+c3JjX2lkeCA9IChwY3R4LT5zcmNf aWR4ICsgMSkgJiAoTUFYX1NSQ1MgLSAxKTsNCj4gPiArDQo+ID4gKyAgICAgICByYyA9IHBlcmZf bW92ZV9kYXRhKHBjdHgsIGRzdCwgc3JjLCBidWZfc2l6ZSwgd2luX3NpemUsDQo+ID4gdG90YWwp Ow0KPiA+ICsNCj4gPiArICAgICAgIGF0b21pY19kZWMoJnBlcmYtPnRzeW5jKTsNCj4gPiArDQo+ ID4gKyAgICAgICBpZiAocmMgPCAwKSB7DQo+ID4gKyAgICAgICAgICAgICAgIHByX2VycigiJXM6 IGZhaWxlZFxuIiwgY3VycmVudC0+Y29tbSk7DQo+ID4gKyAgICAgICAgICAgICAgIHJjID0gLUVO WElPOw0KPiA+ICsgICAgICAgICAgICAgICBnb3RvIGVycjsNCj4gPiArICAgICAgIH0NCj4gPiAr DQo+ID4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgTUFYX1NSQ1M7IGkrKykgew0KPiA+ICsgICAg ICAgICAgICAgICBpZiAocGN0eC0+c3Jjc1tpXSkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgIGtmcmVlKHBjdHgtPnNyY3NbaV0pOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHBj dHgtPnNyY3NbaV0gPSBOVUxMOw0KPiA+ICsgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICB9 DQo+ID4gKw0KPiA+ICsgICAgICAgcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICtlcnI6DQo+ID4gKyAg ICAgICBmb3IgKGkgPSAwOyBpIDwgTUFYX1NSQ1M7IGkrKykgew0KPiA+ICsgICAgICAgICAgICAg ICBpZiAocGN0eC0+c3Jjc1tpXSkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGtmcmVl KHBjdHgtPnNyY3NbaV0pOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHBjdHgtPnNyY3Nb aV0gPSBOVUxMOw0KPiA+ICsgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICB9DQo+ID4gKw0K PiA+ICsgICAgICAgaWYgKGRtYV9jaGFuKSB7DQo+ID4gKyAgICAgICAgICAgICAgIGRtYV9yZWxl YXNlX2NoYW5uZWwoZG1hX2NoYW4pOw0KPiA+ICsgICAgICAgICAgICAgICBwY3R4LT5kbWFfY2hh biA9IE5VTEw7DQo+ID4gKyAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgcmV0dXJuIHJjOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBwZXJmX2ZyZWVfbXcoc3RydWN0IHBlcmZf Y3R4ICpwZXJmKQ0KPiA+ICt7DQo+ID4gKyAgICAgICBzdHJ1Y3QgcGVyZl9tdyAqbXcgPSAmcGVy Zi0+bXc7DQo+ID4gKyAgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHBlcmYtPm50Yi0+cGRl djsNCj4gPiArDQo+ID4gKyAgICAgICBpZiAoIW13LT52aXJ0X2FkZHIpDQo+ID4gKyAgICAgICAg ICAgICAgIHJldHVybjsNCj4gPiArDQo+ID4gKyAgICAgICBudGJfbXdfY2xlYXJfdHJhbnMocGVy Zi0+bnRiLCAwKTsNCj4gPiArICAgICAgIGRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIG13 LT5idWZfc2l6ZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIG13LT52aXJ0X2FkZHIs IG13LT5kbWFfYWRkcik7DQo+ID4gKyAgICAgICBtdy0+eGxhdF9zaXplID0gMDsNCj4gPiArICAg ICAgIG13LT5idWZfc2l6ZSA9IDA7DQo+ID4gKyAgICAgICBtdy0+dmlydF9hZGRyID0gTlVMTDsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBwZXJmX3NldF9tdyhzdHJ1Y3QgcGVyZl9j dHggKnBlcmYsIHJlc291cmNlX3NpemVfdA0KPiA+IHNpemUpDQo+ID4gK3sNCj4gPiArICAgICAg IHN0cnVjdCBwZXJmX213ICptdyA9ICZwZXJmLT5tdzsNCj4gPiArICAgICAgIHNpemVfdCB4bGF0 X3NpemUsIGJ1Zl9zaXplOw0KPiA+ICsNCj4gPiArICAgICAgIGlmICghc2l6ZSkNCj4gPiArICAg ICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsgICAgICAgeGxhdF9zaXpl ID0gcm91bmRfdXAoc2l6ZSwgbXctPnhsYXRfYWxpZ25fc2l6ZSk7DQo+ID4gKyAgICAgICBidWZf c2l6ZSA9IHJvdW5kX3VwKHNpemUsIG13LT54bGF0X2FsaWduKTsNCj4gPiArDQo+ID4gKyAgICAg ICBpZiAobXctPnhsYXRfc2l6ZSA9PSB4bGF0X3NpemUpDQo+ID4gKyAgICAgICAgICAgICAgIHJl dHVybiAwOw0KPiA+ICsNCj4gPiArICAgICAgIGlmIChtdy0+YnVmX3NpemUpDQo+ID4gKyAgICAg ICAgICAgICAgIHBlcmZfZnJlZV9tdyhwZXJmKTsNCj4gPiArDQo+ID4gKyAgICAgICBtdy0+eGxh dF9zaXplID0geGxhdF9zaXplOw0KPiA+ICsgICAgICAgbXctPmJ1Zl9zaXplID0gYnVmX3NpemU7 DQo+ID4gKw0KPiA+ICsgICAgICAgbXctPnZpcnRfYWRkciA9IGRtYV9hbGxvY19jb2hlcmVudCgm cGVyZi0+bnRiLT5wZGV2LT5kZXYsDQo+ID4gYnVmX3NpemUsDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtdy0+ZG1hX2FkZHIsDQo+ID4gR0ZQX0tFUk5F TCk7DQo+ID4gKyAgICAgICBpZiAoIW13LT52aXJ0X2FkZHIpIHsNCj4gPiArICAgICAgICAgICAg ICAgbXctPnhsYXRfc2l6ZSA9IDA7DQo+ID4gKyAgICAgICAgICAgICAgIG13LT5idWZfc2l6ZSA9 IDA7DQo+ID4gKyAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgcmV0dXJuIDA7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHBlcmZfbGlua193b3JrKHN0cnVjdCB3b3JrX3N0cnVj dCAqd29yaykNCj4gPiArew0KPiA+ICsgICAgICAgc3RydWN0IHBlcmZfY3R4ICpwZXJmID0NCj4g PiArICAgICAgICAgICAgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwZXJmX2N0eCwNCj4g PiBsaW5rX3dvcmsud29yayk7DQo+ID4gKyAgICAgICBzdHJ1Y3QgbnRiX2RldiAqbmRldiA9IHBl cmYtPm50YjsNCj4gPiArICAgICAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gbmRldi0+cGRldjsN Cj4gPiArICAgICAgIHUzMiB2YWw7DQo+ID4gKyAgICAgICB1NjQgc2l6ZTsNCj4gPiArICAgICAg IGludCByYzsNCj4gPiArDQo+ID4gKyAgICAgICBkZXZfZGJnKCZwZXJmLT5udGItPnBkZXYtPmRl diwgIiVzIGNhbGxlZFxuIiwgX19mdW5jX18pOw0KPiA+ICsNCj4gPiArICAgICAgIHNpemUgPSBw ZXJmLT5tdy5waHlzX3NpemU7DQo+ID4gKyAgICAgICBudGJfcGVlcl9zcGFkX3dyaXRlKG5kZXYs IE1XX1NaX0hJR0gsICh1MzIpKHNpemUgPj4gMzIpKTsNCj4gDQo+IFBsZWFzZSB1c2UgdXBwZXJf MzJfYml0cyhuKQ0KPiANCj4gPiArICAgICAgIG50Yl9wZWVyX3NwYWRfd3JpdGUobmRldiwgTVdf U1pfTE9XLCAodTMyKXNpemUpOw0KPiANCj4gUGxlYXNlIHVzZSBsb3dlcl8zMl9iaXRzKG4pDQo+ IA0KPiA+ICsgICAgICAgbnRiX3BlZXJfc3BhZF93cml0ZShuZGV2LCBWRVJTSU9OLCBQRVJGX1ZF UlNJT04pOw0KPiA+ICsNCj4gPiArICAgICAgIC8qIG5vdyByZWFkIHdoYXQgcGVlciB3cm90ZSAq Lw0KPiA+ICsgICAgICAgdmFsID0gbnRiX3NwYWRfcmVhZChuZGV2LCBWRVJTSU9OKTsNCj4gPiAr ICAgICAgIGRldl9kYmcoJnBkZXYtPmRldiwgIlJlbW90ZSB2ZXJzaW9uID0gJSN4XG4iLCB2YWwp Ow0KPiA+ICsgICAgICAgaWYgKHZhbCAhPSBQRVJGX1ZFUlNJT04pDQo+IA0KPiBJdCBtaWdodCBi ZSBiZXR0ZXIgdG8gbXkgdGhlIGRlYnVnIGNvbXBhcmlzb24gYmVsb3cgdGhlIGlmIGNoZWNrIGFu ZA0KPiBtYWtlIGl0IGFuIGVycm9yL3dhcm5pbmcuICBUaGF0IHdheSBpdCBiZWNvbWVzIG1vcmUg b2J2aW91cyBpZiB0aGlzDQo+IGlzDQo+IGV2ZXIgdHJpZ2dlcmVkLg0KDQpZb3UnbGwgZmxvb2Qg dGhlIGRtZXNnIGlmIHlvdSBkbyB0aGF0IGJlY2F1c2UgaXQncyBjaGVja2VkIGNvbnRpbnVvdXNs eQ0KdW50aWwgYm90aCBzaWRlcyBzeW5jIHVwLiBJIG1vdmVkIGl0IHVuZGVyIHRoZSBpZiBjaGVj ayBhbmQga2VwdCBpdCBhcw0KZGV2X2RiZygpLiANCg0KDQo+IA0KPiA+ICsgICAgICAgICAgICAg ICBnb3RvIG91dDsNCj4gPiArDQo+ID4gKyAgICAgICB2YWwgPSBudGJfc3BhZF9yZWFkKG5kZXYs IE1XX1NaX0hJR0gpOw0KPiA+ICsgICAgICAgc2l6ZSA9ICh1NjQpdmFsIDw8IDMyOw0KPiA+ICsN Cj4gPiArICAgICAgIHZhbCA9IG50Yl9zcGFkX3JlYWQobmRldiwgTVdfU1pfTE9XKTsNCj4gPiAr ICAgICAgIHNpemUgfD0gdmFsOw0KPiA+ICsNCj4gPiArICAgICAgIGRldl9kYmcoJnBkZXYtPmRl diwgIlJlbW90ZSBNVyBzaXplID0gJSNsbHhcbiIsIHNpemUpOw0KPiA+ICsNCj4gPiArICAgICAg IHJjID0gcGVyZl9zZXRfbXcocGVyZiwgc2l6ZSk7DQo+ID4gKyAgICAgICBpZiAocmMpDQo+ID4g KyAgICAgICAgICAgICAgIGdvdG8gb3V0MTsNCj4gPiArDQo+ID4gKyAgICAgICBwZXJmLT5saW5r X2lzX3VwID0gdHJ1ZTsNCj4gPiArDQo+ID4gKyAgICAgICByZXR1cm47DQo+ID4gKw0KPiA+ICtv dXQxOg0KPiA+ICsgICAgICAgcGVyZl9mcmVlX213KHBlcmYpOw0KPiA+ICsNCj4gPiArb3V0Og0K PiA+ICsgICAgICAgaWYgKG50Yl9saW5rX2lzX3VwKG5kZXYsIE5VTEwsIE5VTEwpID09IDEpDQo+ ID4gKyAgICAgICAgICAgICAgIHNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcGVyZi0+bGlua193b3Jr LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCj4gPiAgbXNlY3Nf dG9famlmZmllcyhQRVJGX0xJTktfRE9XTl9USU1FT1VUKSk7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyB2b2lkIHBlcmZfbGlua19jbGVhbnVwKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykN Cj4gPiArew0KPiA+ICsgICAgICAgc3RydWN0IHBlcmZfY3R4ICpwZXJmID0gY29udGFpbmVyX29m KHdvcmssDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IHBlcmZfY3R4LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxpbmtfY2xlYW51cCk7DQo+ID4gKyAgICAgICBpbnQgaTsNCj4gPiArDQo+ID4g KyAgICAgICBkZXZfZGJnKCZwZXJmLT5udGItPnBkZXYtPmRldiwgIiVzIGNhbGxlZFxuIiwgX19m dW5jX18pOw0KPiA+ICsNCj4gPiArICAgICAgIGlmICghcGVyZi0+bGlua19pc191cCkNCj4gPiAr ICAgICAgICAgICAgICAgY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwZXJmLT5saW5rX3dvcmsp Ow0KPiA+ICsNCj4gPiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBNQVhfU1BBRDsgaSsrKQ0KPiAN Cj4gQ29tcGxldGUgYXNpZGUgaGVyZSwgYnV0IHdlIG1pZ2h0IG5lZWQgdG8gYWRkIGxvZ2ljIHRv IHRoZSBjb3JlIE5UQg0KPiBjb2RlIHRvIHF1ZXJ5IHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIFNQ QURzIGFuZCBlcnJvciBvdXQgb2Ygd2UgdHJ5DQo+IHRvDQo+IGdldCBtb3JlIHRoYW4gdGhhdC4N Cj4gDQo+ID4gKyAgICAgICAgICAgICAgIG50Yl9zcGFkX3dyaXRlKHBlcmYtPm50YiwgaSwgMCk7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgcGVyZl9zZXR1cF9tdyhzdHJ1Y3QgbnRi X2RldiAqbnRiLCBzdHJ1Y3QgcGVyZl9jdHgNCj4gPiAqcGVyZikNCj4gPiArew0KPiA+ICsgICAg ICAgc3RydWN0IHBlcmZfbXcgKm13Ow0KPiA+ICsgICAgICAgaW50IHJjOw0KPiA+ICsNCj4gPiAr ICAgICAgIG13ID0gJnBlcmYtPm13Ow0KPiA+ICsNCj4gPiArICAgICAgIHJjID0gbnRiX213X2dl dF9yYW5nZShudGIsIDAsICZtdy0+cGh5c19hZGRyLCAmbXcNCj4gPiAtPnBoeXNfc2l6ZSwNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbXctPnhsYXRfYWxpZ24sICZtdw0KPiA+ IC0+eGxhdF9hbGlnbl9zaXplKTsNCj4gPiArICAgICAgIGlmIChyYykNCj4gPiArICAgICAgICAg ICAgICAgcmV0dXJuIHJjOw0KPiA+ICsNCj4gPiArICAgICAgIHBlcmYtPm13LnZiYXNlID0gaW9y ZW1hcF93Yyhtdy0+cGh5c19hZGRyLCBtdy0+cGh5c19zaXplKTsNCj4gPiArICAgICAgIGlmICgh bXctPnZiYXNlKQ0KPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsNCj4gPiArDQo+ ID4gKyAgICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHNzaXplX3Qg ZGVidWdmc19ydW5fcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXINCj4gPiAqdWJ1 ZiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBjb3VudCwgbG9m Zl90ICpvZmZwKQ0KPiA+ICt7DQo+ID4gKyAgICAgICBzdHJ1Y3QgcGVyZl9jdHggKnBlcmYgPSBm aWxwLT5wcml2YXRlX2RhdGE7DQo+ID4gKyAgICAgICBjaGFyICpidWY7DQo+ID4gKyAgICAgICBz c2l6ZV90IHJldCwgb3V0X29mZnNldDsNCj4gPiArDQo+ID4gKyAgICAgICBpZiAoIXBlcmYpDQo+ ID4gKyAgICAgICAgICAgICAgIHJldHVybiAwOw0KPiA+ICsNCj4gPiArICAgICAgIGJ1ZiA9IGtt YWxsb2MoNjQsIEdGUF9LRVJORUwpOw0KPiA+ICsgICAgICAgb3V0X29mZnNldCA9IHNucHJpbnRm KGJ1ZiwgNjQsICIlZFxuIiwgcGVyZi0+cnVuKTsNCj4gPiArICAgICAgIHJldCA9IHNpbXBsZV9y ZWFkX2Zyb21fYnVmZmVyKHVidWYsIGNvdW50LCBvZmZwLCBidWYsDQo+ID4gb3V0X29mZnNldCk7 DQo+ID4gKyAgICAgICBrZnJlZShidWYpOw0KPiA+ICsNCj4gPiArICAgICAgIHJldHVybiByZXQ7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBzc2l6ZV90IGRlYnVnZnNfcnVuX3dyaXRlKHN0 cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyDQo+ID4gX191c2VyICp1YnVmLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmZwKQ0K PiA+ICt7DQo+ID4gKyAgICAgICBzdHJ1Y3QgcGVyZl9jdHggKnBlcmYgPSBmaWxwLT5wcml2YXRl X2RhdGE7DQo+ID4gKyAgICAgICBpbnQgbm9kZSwgaTsNCj4gPiArDQo+ID4gKyAgICAgICBpZiAo cGVyZi0+bGlua19pc191cCA9PSBmYWxzZSkNCj4gDQo+IFN0eWxlIHN1Z2dlc3Rpb24sICFwZXJm LT5saW5rX2lzX3VwDQo+IA0KPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiArDQo+ ID4gKyAgICAgICBpZiAocGVyZi0+cGVyZl90aHJlYWRzID09IDApDQo+ID4gKyAgICAgICAgICAg ICAgIHJldHVybiAwOw0KPiA+ICsNCj4gPiArICAgICAgIGlmIChhdG9taWNfcmVhZCgmcGVyZi0+ dHN5bmMpID09IDApDQo+ID4gKyAgICAgICAgICAgICAgIHBlcmYtPnJ1biA9IGZhbHNlOw0KPiA+ ICsNCj4gPiArICAgICAgIGlmIChwZXJmLT5ydW4gPT0gdHJ1ZSkgew0KPiANCj4gU3R5bGUgc3Vn Z2VzdGlvbiwgImlmIChwZXJmLT5ydW4pIHsiDQo+IA0KPiA+ICsgICAgICAgICAgICAgICAvKiBs ZXRzIHN0b3AgdGhlIHRocmVhZHMgKi8NCj4gPiArICAgICAgICAgICAgICAgcGVyZi0+cnVuID0g ZmFsc2U7DQo+ID4gKyAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBNQVhfVEhSRUFEUzsg aSsrKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlcmYtPnB0aHJfY3R4W2ld LnRocmVhZCkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3RocmVhZF9z dG9wKHBlcmYNCj4gPiAtPnB0aHJfY3R4W2ldLnRocmVhZCk7DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwZXJmLT5wdGhyX2N0eFtpXS50aHJlYWQgPSBOVUxMOw0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiArICAgICAgIH0gZWxz ZSB7DQo+ID4gKyAgICAgICAgICAgICAgIHBlcmYtPnJ1biA9IHRydWU7DQo+ID4gKw0KPiA+ICsg ICAgICAgICAgICAgICBpZiAocGVyZi0+cGVyZl90aHJlYWRzID4gTUFYX1RIUkVBRFMpIHsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICBwZXJmLT5wZXJmX3RocmVhZHMgPSBNQVhfVEhSRUFE UzsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBwcl9pbmZvKCJSZXNldCB0b3RhbCB0aHJl YWRzIHRvOiAldVxuIiwNCj4gPiBNQVhfVEhSRUFEUyk7DQo+ID4gKyAgICAgICAgICAgICAgIH0N Cj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIC8qIG5vIGdyZWF0ZXIgdGhhbiAxTSAqLw0KPiA+ ICsgICAgICAgICAgICAgICBpZiAoc2VnX29yZGVyID4gMjApIHsNCj4gDQo+IFNaXzFNIC8gc2Vn IHNpemU/DQo+IA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHNlZ19vcmRlciA9IDIwOw0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHByX2luZm8oIkZpeCBzZWdfb3JkZXIgdG8gJXVc biIsDQo+ID4gc2VnX29yZGVyKTsNCj4gPiArICAgICAgICAgICAgICAgfQ0KPiA+ICsNCj4gPiAr ICAgICAgICAgICAgICAgaWYgKHJ1bl9vcmRlciA8IHNlZ19vcmRlcikgew0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgIHJ1bl9vcmRlciA9IHNlZ19vcmRlcjsNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICBwcl9pbmZvKCJGaXggcnVuX29yZGVyIHRvICV1XG4iLA0KPiA+IHJ1bl9vcmRl cik7DQo+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIG5v ZGUgPSBkZXZfdG9fbm9kZSgmcGVyZi0+bnRiLT5kZXYpOw0KPiA+ICsgICAgICAgICAgICAgICAv KiBsYXVuY2gga2VybmVsIHRocmVhZCAqLw0KPiA+ICsgICAgICAgICAgICAgICBmb3IgKGkgPSAw OyBpIDwgcGVyZi0+cGVyZl90aHJlYWRzOyBpKyspIHsNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgcHRocl9jdHggKnBjdHg7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgIHBjdHggPSAmcGVyZi0+cHRocl9jdHhbaV07DQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgYXRvbWljX3NldCgmcGN0eC0+ZG1hX3N5bmMsIDApOw0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgIHBjdHgtPnBlcmYgPSBwZXJmOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg IHBjdHgtPnRocmVhZCA9DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KPiA+ ICBrdGhyZWFkX2NyZWF0ZV9vbl9ub2RlKG50Yl9wZXJmX3RocmVhZCwNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQNCj4gPiAq KXBjdHgsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG5vZGUsDQo+ID4gIm50Yl9wZXJmICVkIiwgaSk7DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgaWYgKHBjdHgtPnRocmVhZCkNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHdha2VfdXBfcHJvY2VzcyhwY3R4LT50aHJlYWQpOw0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgIGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cGVyZi0+cnVuID0gZmFsc2U7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm b3IgKGkgPSAwOyBpIDwgTUFYX1RIUkVBRFM7IGkrKykgew0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpZiAocGN0eC0+dGhyZWFkKSB7DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3RocmVhZF9zdG9wKHBjdHgN Cj4gPiAtPnRocmVhZCk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcGN0eC0+dGhyZWFkID0NCj4gPiBOVUxMOw0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gDQo+IEl0IG1pZ2h0IGJlIHNp bXBsZXIgdG8gc2ltcGx5IHJ1biB0aHJvdWdoIHRoZW0gYWxsIGFuZCBzdG9wIHRoZW0NCj4gKGlu c3RlYWQgb2YgY2hlY2tpbmcgZm9yIHRoZSBmaXJzdCBlbXB0eSBhbmQgcXVpdHRpbmcpDQo+IA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlcmYt PnJ1biA9PSBmYWxzZSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biAtRU5YSU87DQo+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICB9DQo+ ID4gKw0KPiA+ICsgICAgICAgcmV0dXJuIGNvdW50Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBudGJfcGVyZl9kZWJ1Z2ZzX3J1biA9IHsN Cj4gPiArICAgICAgIC5vd25lciA9IFRISVNfTU9EVUxFLA0KPiA+ICsgICAgICAgLm9wZW4gPSBz aW1wbGVfb3BlbiwNCj4gPiArICAgICAgIC5yZWFkID0gZGVidWdmc19ydW5fcmVhZCwNCj4gPiAr ICAgICAgIC53cml0ZSA9IGRlYnVnZnNfcnVuX3dyaXRlLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiAr c3RhdGljIGludCBwZXJmX2RlYnVnZnNfc2V0dXAoc3RydWN0IHBlcmZfY3R4ICpwZXJmKQ0KPiA+ ICt7DQo+ID4gKyAgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHBlcmYtPm50Yi0+cGRldjsN Cj4gPiArDQo+ID4gKyAgICAgICBpZiAoIXBlcmZfZGVidWdmc19kaXIpDQo+ID4gKyAgICAgICAg ICAgICAgIHJldHVybiAtRU5PREVWOw0KPiA+ICsNCj4gPiArICAgICAgIHBlcmYtPmRlYnVnZnNf bm9kZV9kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIocGNpX25hbWUocGRldiksDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQo+ID4gIHBlcmZf ZGVidWdmc19kaXIpOw0KPiA+ICsgICAgICAgaWYgKCFwZXJmLT5kZWJ1Z2ZzX25vZGVfZGlyKQ0K PiA+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsNCj4gPiArDQo+ID4gKyAgICAgICBw ZXJmLT5kZWJ1Z2ZzX3J1biA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInJ1biIsIFNfSVJVU1IgfA0K PiA+IFNfSVdVU1IsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGVyZg0KPiA+IC0+ZGVidWdmc19ub2RlX2RpciwgcGVyZiwNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KPiA+ICAmbnRiX3BlcmZf ZGVidWdmc19ydW4pOw0KPiA+ICsgICAgICAgaWYgKCFwZXJmLT5kZWJ1Z2ZzX3J1bikNCj4gPiAr ICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7DQo+ID4gKw0KPiA+ICsgICAgICAgcGVyZi0+ ZGVidWdmc190aHJlYWRzID0gZGVidWdmc19jcmVhdGVfdTgoInRocmVhZHMiLA0KPiA+IFNfSVJV U1IgfCBTX0lXVVNSLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcGVyZg0KPiA+IC0+ZGVidWdmc19ub2RlX2RpciwNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwZXJmDQo+ID4gLT5wZXJm X3RocmVhZHMpOw0KPiA+ICsgICAgICAgaWYgKCFwZXJmLT5kZWJ1Z2ZzX3RocmVhZHMpDQo+ID4g KyAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOw0KPiA+ICsNCj4gPiArICAgICAgIHJldHVy biAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHBlcmZfcHJvYmUoc3RydWN0IG50 Yl9jbGllbnQgKmNsaWVudCwgc3RydWN0IG50Yl9kZXYNCj4gPiAqbnRiKQ0KPiA+ICt7DQo+ID4g KyAgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IG50Yi0+cGRldjsNCj4gPiArICAgICAgIHN0 cnVjdCBwZXJmX2N0eCAqcGVyZjsNCj4gPiArICAgICAgIGludCBub2RlOw0KPiA+ICsgICAgICAg aW50IHJjID0gMDsNCj4gPiArDQo+ID4gKyAgICAgICBub2RlID0gZGV2X3RvX25vZGUoJnBkZXYt PmRldik7DQo+ID4gKw0KPiA+ICsgICAgICAgcGVyZiA9IGt6YWxsb2Nfbm9kZShzaXplb2YoKnBl cmYpLCBHRlBfS0VSTkVMLCBub2RlKTsNCj4gPiArICAgICAgIGlmICghcGVyZikgew0KPiA+ICsg ICAgICAgICAgICAgICByYyA9IC1FTk9NRU07DQo+ID4gKyAgICAgICAgICAgICAgIGdvdG8gZXJy X3BlcmY7DQo+ID4gKyAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgcGVyZi0+bnRiID0gbnRi Ow0KPiA+ICsgICAgICAgcGVyZi0+cGVyZl90aHJlYWRzID0gMTsNCj4gPiArICAgICAgIGF0b21p Y19zZXQoJnBlcmYtPnRzeW5jLCAwKTsNCj4gPiArICAgICAgIHBlcmYtPnJ1biA9IGZhbHNlOw0K PiA+ICsgICAgICAgc3Bpbl9sb2NrX2luaXQoJnBlcmYtPmRiX2xvY2spOw0KPiA+ICsgICAgICAg cGVyZl9zZXR1cF9tdyhudGIsIHBlcmYpOw0KPiA+ICsgICAgICAgSU5JVF9ERUxBWUVEX1dPUkso JnBlcmYtPmxpbmtfd29yaywgcGVyZl9saW5rX3dvcmspOw0KPiA+ICsgICAgICAgSU5JVF9XT1JL KCZwZXJmLT5saW5rX2NsZWFudXAsIHBlcmZfbGlua19jbGVhbnVwKTsNCj4gPiArDQo+ID4gKyAg ICAgICByYyA9IG50Yl9zZXRfY3R4KG50YiwgcGVyZiwgJnBlcmZfb3BzKTsNCj4gPiArICAgICAg IGlmIChyYykNCj4gPiArICAgICAgICAgICAgICAgZ290byBlcnJfY3R4Ow0KPiA+ICsNCj4gPiAr ICAgICAgIHBlcmYtPmxpbmtfaXNfdXAgPSBmYWxzZTsNCj4gPiArICAgICAgIG50Yl9saW5rX2Vu YWJsZShudGIsIE5UQl9TUEVFRF9BVVRPLCBOVEJfV0lEVEhfQVVUTyk7DQo+ID4gKyAgICAgICBu dGJfbGlua19ldmVudChudGIpOw0KPiA+ICsNCj4gPiArICAgICAgIGlmIChkZWJ1Z2ZzX2luaXRp YWxpemVkKCkgJiYgIXBlcmZfZGVidWdmc19kaXIpIHsNCj4gPiArICAgICAgICAgICAgICAgcGVy Zl9kZWJ1Z2ZzX2RpciA9DQo+ID4gZGVidWdmc19jcmVhdGVfZGlyKEtCVUlMRF9NT0ROQU1FLCBO VUxMKTsNCj4gPiArICAgICAgICAgICAgICAgaWYgKCFwZXJmX2RlYnVnZnNfZGlyKQ0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyX2N0eDsNCj4gPiArDQo+ID4gKyAgICAgICAg ICAgICAgIHJjID0gcGVyZl9kZWJ1Z2ZzX3NldHVwKHBlcmYpOw0KPiA+ICsgICAgICAgICAgICAg ICBpZiAocmMpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJfY3R4Ow0KPiA+ ICsgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgIHJldHVybiAwOw0KPiA+ICsNCj4gPiArZXJy X2N0eDoNCj4gPiArICAgICAgIGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcGVyZi0+bGlua193 b3JrKTsNCj4gPiArICAgICAgIGNhbmNlbF93b3JrX3N5bmMoJnBlcmYtPmxpbmtfY2xlYW51cCk7 DQo+ID4gKyAgICAgICBrZnJlZShwZXJmKTsNCj4gPiArZXJyX3BlcmY6DQo+ID4gKyAgICAgICBy ZXR1cm4gcmM7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHBlcmZfcmVtb3ZlKHN0 cnVjdCBudGJfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBudGJfZGV2DQo+ID4gKm50YikNCj4gPiAr ew0KPiA+ICsgICAgICAgc3RydWN0IHBlcmZfY3R4ICpwZXJmID0gbnRiLT5jdHg7DQo+ID4gKyAg ICAgICBpbnQgaTsNCj4gPiArDQo+ID4gKyAgICAgICBkZXZfZGJnKCZwZXJmLT5udGItPmRldiwg IiVzIGNhbGxlZFxuIiwgX19mdW5jX18pOw0KPiA+ICsNCj4gPiArICAgICAgIGNhbmNlbF9kZWxh eWVkX3dvcmtfc3luYygmcGVyZi0+bGlua193b3JrKTsNCj4gPiArICAgICAgIGNhbmNlbF93b3Jr X3N5bmMoJnBlcmYtPmxpbmtfY2xlYW51cCk7DQo+ID4gKw0KPiA+ICsgICAgICAgbnRiX2NsZWFy X2N0eChudGIpOw0KPiA+ICsgICAgICAgbnRiX2xpbmtfZGlzYWJsZShudGIpOw0KPiA+ICsNCj4g PiArICAgICAgIGlmIChwZXJmX2RlYnVnZnNfZGlyKSB7DQo+ID4gKyAgICAgICAgICAgICAgIGRl YnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShwZXJmX2RlYnVnZnNfZGlyKTsNCj4gPiArICAgICAgICAg ICAgICAgcGVyZl9kZWJ1Z2ZzX2RpciA9IE5VTEw7DQo+ID4gKyAgICAgICB9DQo+ID4gKw0KPiA+ ICsgICAgICAgaWYgKHVzZV9kbWEpIHsNCj4gPiArICAgICAgICAgICAgICAgZm9yIChpID0gMDsg aSA8IE1BWF9USFJFQURTOyBpKyspIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgcHRocl9jdHggKnBjdHggPSAmcGVyZi0+cHRocl9jdHhbaV07DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgaWYgKHBjdHgtPmRtYV9jaGFuKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZG1hX3JlbGVhc2VfY2hhbm5lbChwY3R4DQo+ID4gLT5kbWFfY2hhbik7DQo+ ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiArICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICBr ZnJlZShwZXJmKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCBudGJfY2xpZW50 IHBlcmZfY2xpZW50ID0gew0KPiA+ICsgICAgICAgLm9wcyA9IHsNCj4gPiArICAgICAgICAgICAg ICAgLnByb2JlID0gcGVyZl9wcm9iZSwNCj4gPiArICAgICAgICAgICAgICAgLnJlbW92ZSA9IHBl cmZfcmVtb3ZlLA0KPiA+ICsgICAgICAgfSwNCj4gPiArfTsNCj4gPiArbW9kdWxlX250Yl9jbGll bnQocGVyZl9jbGllbnQpOw0KPiANCj4gQSBmZXcgbWlub3IgdGhpbmdzLCBidXQgb3ZlcmFsbCBs b29rcyBnb29kLiAgUGxlYXNlIGZpeCB0aGVtIHVwIGFuZA0KPiByZXN1Ym1pdC4NCj4gDQo+IFRo YW5rcywNCj4gSm9uDQo+IA==