Return-path: Received: from mx0a-0016f401.pphosted.com ([67.231.148.174]:22811 "EHLO mx0a-0016f401.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751356AbbLOHxN (ORCPT ); Tue, 15 Dec 2015 02:53:13 -0500 From: David Lin To: Emmanuel Grumbach CC: Kalle Valo , Johannes Berg , "linux-wireless@vger.kernel.org" , Chor Teck Law , "Pete Hsieh" Subject: RE: [PATCH v7] Add new mac80211 driver mwlwifi. Date: Tue, 15 Dec 2015 07:53:07 +0000 Message-ID: <4b7b97c2b37c4a77be3b2f93c536fd34@SC-EXCH02.marvell.com> (sfid-20151215_085345_764281_043E8A1C) References: In-Reply-To: Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Sender: linux-wireless-owner@vger.kernel.org List-ID: PiBFbW1hbnVlbCBHcnVtYmFjaCBbbWFpbHRvOmVncnVtYmFjaEBnbWFpbC5jb21dIHdyb3RlOg0K PiANCj4gSGksDQo+IA0KPiBJIHdhcyBpbnRlcmVzdGVkIGluIHRoZSBjaGVja2luZyB0aGUgQS1N U0RVIGltcGxlbWVudGF0aW9uIG9ubHksIHNvIEkNCj4gcmV2aWV3ZWQgb25seSB0aGF0Lg0KPiAN Cj4gSSBhbSBub3Qgc3VyZSBJIHJlYWxseSBmb2xsb3dlZCB5b3VyIGltcGxlbWVudGF0aW9uIHRo b3VnaC4NCj4gSW4gaXdsd2lmaSBJIGNob3NlIHRoZSBMU08gbWVjaGFuaXNtIHRvIGltcGxlbWVu dCBBLU1TRFUuIEkgdW5kZXJzdGFuZCB0aGF0DQo+IGZvciBhbiBBUCBpdCBtYWtlcyBsZXNzIHNl bnNlIHNpbmNlIHlvdSBkb24ndCByZWFsbHkgaGF2ZSBsb2NhbGx5IGdlbmVyYXRlZA0KPiB0cmFm ZmljIGFuZCBMU08gd29uJ3Qgd29yayB3ZWxsIHdpdGggcGFja2V0cyBmb3J3YXJkZWQgYnkgdGhl IElQIGxheWVyLg0KPiBTbyB5b3Ugc2VlbSB0byBoYXZlIGFkZGVkIGEgdGltZW91dCBtZWNoYW5p c20gaW5zaWRlIHRoZSBkcml2ZXIgdGhhdA0KPiBhY2N1bXVsYXRlcyB0aGUgcGFja2V0IGZvciBh IGNlcnRhaW4gcGVyaW9kIG9mIHRpbWUgYW5kIHNlbmQgdGhlbSBhbGwgd2hlbg0KPiB0aGUgbWF4 IG51bWJlciBvZiBwYWNrZXRzIGhhcyBiZWVuIHJlYWNoZWQ/DQo+IEJ1dCBJIGRpZG4ndCBzZWUg YW55IHRpbWVyIHRoZXJlLCBzbyB0aGF0IGlmIHlvdSBzdGFydCBhbiBBLU1TRFUgYW5kIHRoZW4N Cj4gc3VkZGVubHkgc3RvcCByZWNlaXZpbmcgcGFja2V0cyBmb3IgdHJhbnNtaXNzaW9uLCB0aGUg cGFja2V0IGFscmVhZHkgaW4gdGhlDQo+IGJ1ZmZlciB3aWxsIHN0YXkgc3RhbGU/DQo+DQoNClRo ZSBmbHVzaCBtZWNoYW5pc20gaXMgaG9va2VkIG9uIHF1ZXVlIGVtcHR5IGludGVycnVwdC4NCg0K PiBBIGZldyBtb3JlIGNvbW1lbnRzIGJlbG93Lg0KPiANCj4gT24gVGh1LCBOb3YgMTIsIDIwMTUg YXQgNTo1MSBBTSwgRGF2aWQgTGluIDxkbGluQG1hcnZlbGwuY29tPiB3cm90ZToNCj4gPiBUaGlz IHBhdGNoIHByb3ZpZGVzIHRoZSBtd2x3aWZpIGRyaXZlciBmb3IgTWFydmVsbCA4ODYzLCA4ODY0 IGFuZCA4ODk3DQo+ID4gY2hpcHNldHMuDQo+ID4gVGhpcyBkcml2ZXIgd2FzIGRldmVsb3BlZCBh cyBwYXJ0IG9mIHRoZSBvcGVud3J0Lm9yZyBwcm9qZWN0IHRvDQo+ID4gc3VwcG9ydCBMaW5rc3lz IFdSVDE5MDBBQyBhbmQgaXMgbWFpbnRhaW5lZCBvbg0KPiBodHRwczovL2dpdGh1Yi5jb20va2Fs b3ovbXdsd2lmaS4NCj4gPg0KPiA+IFRoZSBtd2x3aWZpIGRyaXZlciBkaWZmZXJzIGZyb20gZXhp c3RpbmcgbXdpZmlleCBkcml2ZXI6DQo+ID4gbyBtd2x3aWZpIGlzIGEgInNvZnRtYWMgZHJpdmVy IiB1c2luZyB0aGUga2VybmVsP+6ogyBtYWM4MDIuMTEgc3Vic3lzdGVtDQo+ID4gdG8gcHJvdmlk ZSBmdWxsIEFQL1dpcmVsZXNzIEJyaWRnZSBmdW5jdGlvbmFsaXR5IChyb3V0ZXJzKS4NCj4gPiBv IG13aWZpZXggaXMgYSAiZnVsbG1hYyBkcml2ZXIiIHdoaWNoIHByb3ZpZGVzIGEgY29tcHJlaGVu c2l2ZSBzZXQgb2YNCj4gPiBjbGllbnQgZnVuY3Rpb25zIChsYXB0b3BzL2VtYmVkZGVkIGRldmlj ZXMpIG8gb25seSBtd2x3aWZpIHN1cHBvcnRzDQo+ID4gTWFydmVsbCBBUCBjaGlwIDg4Nlggc2Vy aWVzDQo+ID4NCj4gDQo+IFtzbmlwXQ0KPiANCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbXdsX21h YzgwMjExX2FtcGR1X2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bQ0KPiBpZWVlODAy MTFfYW1wZHVfbWxtZV9hY3Rpb24gYWN0aW9uLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLA0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgdGlkLCB1MTYgKnNzbiwgdTggYnVmX3NpemUs DQo+ID4gK2Jvb2wgYW1zZHUpIHsNCj4gPiArICAgICAgIGludCByYyA9IDA7DQo+ID4gKyAgICAg ICBzdHJ1Y3QgbXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsNCj4gPiArICAgICAgIHN0cnVjdCBt d2xfYW1wZHVfc3RyZWFtICpzdHJlYW07DQo+ID4gKyAgICAgICB1OCAqYWRkciA9IHN0YS0+YWRk ciwgaWR4Ow0KPiA+ICsgICAgICAgc3RydWN0IG13bF9zdGEgKnN0YV9pbmZvOw0KPiA+ICsNCj4g PiArICAgICAgIHN0YV9pbmZvID0gbXdsX2Rldl9nZXRfc3RhKHN0YSk7DQo+ID4gKw0KPiA+ICsg ICAgICAgc3Bpbl9sb2NrX2JoKCZwcml2LT5zdHJlYW1fbG9jayk7DQo+ID4gKw0KPiA+ICsgICAg ICAgc3RyZWFtID0gbXdsX2Z3Y21kX2xvb2t1cF9zdHJlYW0oaHcsIGFkZHIsIHRpZCk7DQo+ID4g Kw0KPiA+ICsgICAgICAgc3dpdGNoIChhY3Rpb24pIHsNCj4gPiArICAgICAgIGNhc2UgSUVFRTgw MjExX0FNUERVX1JYX1NUQVJUOg0KPiA+ICsgICAgICAgY2FzZSBJRUVFODAyMTFfQU1QRFVfUlhf U1RPUDoNCj4gPiArICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgICBjYXNlIElFRUU4 MDIxMV9BTVBEVV9UWF9TVEFSVDoNCj4gPiArICAgICAgICAgICAgICAgaWYgKCFzdGFfaW5mby0+ aXNfYW1wZHVfYWxsb3dlZCkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHdpcGh5X3dh cm4oaHctPndpcGh5LCAiYW1wZHUgbm90DQo+IGFsbG93ZWRcbiIpOw0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgIHJjID0gLUVQRVJNOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOw0KPiA+ICsgICAgICAgICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICBp ZiAoIXN0cmVhbSkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9IG13bF9m d2NtZF9hZGRfc3RyZWFtKGh3LCBzdGEsDQo+IHRpZCk7DQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgaWYgKCFzdHJlYW0pIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHdpcGh5X3dhcm4oaHctPndpcGh5LCAibm8gc3RyZWFtDQo+IGZvdW5kXG4iKTsNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gLUVQRVJNOw0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg fQ0KPiA+ICsgICAgICAgICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICBzcGlu X3VubG9ja19iaCgmcHJpdi0+c3RyZWFtX2xvY2spOw0KPiA+ICsgICAgICAgICAgICAgICByYyA9 IG13bF9md2NtZF9jaGVja19iYShodywgc3RyZWFtLCB2aWYpOw0KPiA+ICsgICAgICAgICAgICAg ICBzcGluX2xvY2tfYmgoJnByaXYtPnN0cmVhbV9sb2NrKTsNCj4gPiArICAgICAgICAgICAgICAg aWYgKHJjKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgbXdsX2Z3Y21kX3JlbW92ZV9z dHJlYW0oaHcsIHN0cmVhbSk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgd2lwaHlfZXJy KGh3LT53aXBoeSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFtcGR1 IHN0YXJ0IGVycm9yIGNvZGU6ICVkXG4iLA0KPiByYyk7DQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgcmMgPSAtRVBFUk07DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiArICAgICAgICAgICAgICAgc3RyZWFtLT5zdGF0ZSA9 IEFNUERVX1NUUkVBTV9JTl9QUk9HUkVTUzsNCj4gPiArICAgICAgICAgICAgICAgKnNzbiA9IDA7 DQo+ID4gKyAgICAgICAgICAgICAgIGllZWU4MDIxMV9zdGFydF90eF9iYV9jYl9pcnFzYWZlKHZp ZiwgYWRkciwgdGlkKTsNCj4gDQo+IFRoaXMgaXMgd2h5IHlvdSBoYXZlIHRoZSByYWNlIHlvdSBt ZW50aW9uIGJlbG93LiBXaGF0IHlvdSBzaG91bGQgcmVhbGx5IGJlDQo+IGRvaW5nIGlzIHRvIHdh aXQgdW50aWwgdGhlIGFsbCB0aGUgcGFja2V0cyBmb3IgdGhhdCBSQSAvIFRJRCBhcmUgc2VudCBm cm9tIGFsbCB0aGUNCj4gSFcgVHggcXVldWVzIChvbmx5IG9uZSByZWFsaXN0aWNhbGx5KSwgYW5k IG9ubHkgdGhlbiBjYWxsIHRoZSBfY2IuIFRoaXMgd2lsbA0KPiBhbGxvdyB5b3UgdG8gc2VuZCB0 aGUgQUREQkEgcmVxIG9uIHRoZSBWTyBxdWV1ZSBhcyBpdCBzaG91bGQgYmUgYWNjb3JkaW5nIHRv DQo+IHNwZWMuDQo+IA0KPiBbc25pcF0NCj4gDQo+ID4gKw0KPiA+ICt2b2lkIG13bF9yeF9yZWN2 KHVuc2lnbmVkIGxvbmcgZGF0YSkNCj4gPiArew0KPiANCj4gW3NuaXBdDQo+IA0KPiA+ICsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICBpZg0KPiAodW5saWtlbHkoaWVlZTgwMjExX2lzX2Fj dGlvbih3aC0+ZnJhbWVfY29udHJvbCkgJiYNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkgPT0NCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgV0xBTl9DQVRFR09SWV9CQUNLICYmDQo+ID4gKw0KPiBt Z210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3AuYWN0aW9uX2NvZGUgPT0NCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgV0xBTl9BQ1RJT05fQUREQkFfUkVTUCkpDQo+IHsN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcGFiID0NCj4gbWdtdC0+dS5h Y3Rpb24udS5hZGRiYV9yZXNwLmNhcGFiOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKGxlMTZfdG9fY3B1KGNhcGFiKSAmIDEpDQo+ID4gKw0KPiBtd2xfcnhfZW5hYmxl X3N0YV9hbXNkdShwcml2LA0KPiA+ICsgbWdtdC0+c2EpOw0KPiANCj4gZXJyLi4uIG5vLiBtYWM4 MDIxMSBrbm93cyBob3cgdG8gZG8gdGhhdCB0b2RheS4gSm9oYW5uZXMgYWxyZWFkeSByZXBvcnRl ZCBhDQo+IHNpbWlsYXIgaXNzdWUgc29tZXdoZXJlIGVsc2UgaW4geW91ciBjb2RlLg0KDQpZZXMu IFRoZSBwYXRjaCBpcyByZWFkeSBvbiAyMDE1LzkuDQoNCj4gDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgICAg ICAgICBpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKHdoLT5mcmFtZV9jb250cm9sKSAmJg0KPiA+ ICsgICAgICAgICAgICAgICAgICAgaWVlZTgwMjExX2hhc19hNCh3aC0+ZnJhbWVfY29udHJvbCkp IHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICB1OCAqcWMgPSBpZWVlODAyMTFfZ2V0X3Fv c19jdGwod2gpOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBpZiAoKnFjICYN Cj4gSUVFRTgwMjExX1FPU19DVExfQV9NU0RVX1BSRVNFTlQpDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpZg0KPiAobXdsX3J4X3Byb2Nlc3NfbWVzaF9hbXNkdShwcml2LCBw cnhfc2tiLA0KPiA+ICsNCj4gPiArICZzdGF0dXMpKQ0KPiANCj4gVGhpcyBzb3VuZHMgdG8gYmUg c29tZXRoaW5nIHlvdSB3YW50IHRvIHRlYWNoIG1hYzgwMjExIGFib3V0Lg0KPiANCj4gW3NuaXBd DQo+IA0KPiA+ICsNCj4gPiArI2RlZmluZSBTWVNBRFBUX0FNU0RVX0ZXX01BWF9TSVpFICAgICAg MzMwMA0KPiA+ICsNCj4gPiArI2RlZmluZSBTWVNBRFBUX0FNU0RVXzRLX01BWF9TSVpFDQo+IFNZ U0FEUFRfQU1TRFVfRldfTUFYX1NJWkUNCj4gPiArDQo+ID4gKyNkZWZpbmUgU1lTQURQVF9BTVNE VV84S19NQVhfU0laRQ0KPiBTWVNBRFBUX0FNU0RVX0ZXX01BWF9TSVpFDQo+IA0KPiBJbiBjYXNl IHRoZSBGVyB3aWxsIGdyb3cgbGF0ZXI/DQo+IA0KPiA+ICsNCj4gPiArI2RlZmluZSBTWVNBRFBU X0FNU0RVX0FMTE9XX1NJWkUgICAgICAgMTYwMA0KPiA+ICsNCj4gPiArI2RlZmluZSBTWVNBRFBU X0FNU0RVX0ZMVVNIX1RJTUUgICAgICAgNTAwDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFNZU0FEUFRf QU1TRFVfUEFDS0VUX1RIUkVTSE9MRCAxMA0KPiA+ICsNCj4gPiArI2RlZmluZSBTWVNBRFBUX01B WF9USUQgICAgICAgICAgICAgICAgOA0KPiA+ICsNCj4gPiArI2VuZGlmIC8qIF9td2xfc3lzYWRw dF9oXyAqLw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213 bHdpZmkvdHguYw0KPiA+IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL3R4 LmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAuLjY4YTk5NGQN Cj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVs bC9td2x3aWZpL3R4LmMNCj4gPiBAQCAtMCwwICsxLDEyNTEgQEANCj4gPiArLyoNCj4gPiArICog Q29weXJpZ2h0IChDKSAyMDA2LTIwMTUsIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuDQo+ID4g KyAqDQo+ID4gKyAqIFRoaXMgc29mdHdhcmUgZmlsZSAodGhlICJGaWxlIikgaXMgZGlzdHJpYnV0 ZWQgYnkgTWFydmVsbA0KPiA+ICtJbnRlcm5hdGlvbmFsDQo+ID4gKyAqIEx0ZC4gdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsDQo+ID4g K0p1bmUgMTk5MQ0KPiA+ICsgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0 cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcw0KPiA+ICtGaWxlIGluDQo+ID4gKyAqIGFjY29yZGFu Y2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2UsIGEgY29weSBv Zg0KPiA+ICt3aGljaA0KPiA+ICsgKiBpcyBhdmFpbGFibGUgYnkgd3JpdGluZyB0byB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuDQo+ID4gKyAqDQo+ID4gKyAqIFRIRSBGSUxFIElT IERJU1RSSUJVVEVEIEFTLUlTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQNCj4g PiArVEhFDQo+ID4gKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1Ig RklUTkVTUyBGT1IgQQ0KPiBQQVJUSUNVTEFSDQo+ID4gK1BVUlBPU0UNCj4gPiArICogQVJFIEVY UFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRh aWxzDQo+ID4gK2Fib3V0DQo+ID4gKyAqIHRoaXMgd2FycmFudHkgZGlzY2xhaW1lci4NCj4gPiAr ICovDQo+ID4gKw0KPiA+ICsvKiBEZXNjcmlwdGlvbjogIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRy YW5zbWl0IHJlbGF0ZWQgZnVuY3Rpb25zLiAqLw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPGxpbnV4 L2V0aGVyZGV2aWNlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4NCj4gPiArDQo+ ID4gKyNpbmNsdWRlICJzeXNhZHB0LmgiDQo+ID4gKyNpbmNsdWRlICJkZXYuaCINCj4gPiArI2lu Y2x1ZGUgImZ3Y21kLmgiDQo+ID4gKyNpbmNsdWRlICJ0eC5oIg0KPiA+ICsNCj4gPiArI2RlZmlu ZSBNQVhfTlVNX1RYX1JJTkdfQllURVMgIChTWVNBRFBUX01BWF9OVU1fVFhfREVTQyAqIFwNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgbXdsX3R4X2Rl c2MpKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBNQVhfTlVNX1RYX0hORExfQllURVMgICAoU1lTQURQ VF9NQVhfTlVNX1RYX0RFU0MgKg0KPiBcDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplb2Yoc3RydWN0IG13bF90eF9obmRsKSkNCj4gPiArDQo+ID4gKyNkZWZpbmUgRUFH TEVfVFhEX1hNSVRDVFJMX1VTRV9NQ19SQVRFICAgICAweDggICAgIC8qIFVzZQ0KPiBtdWx0aWNh c3QgZGF0YSByYXRlICovDQo+ID4gKw0KPiA+ICsjZGVmaW5lIE1XTF9RT1NfQUNLX1BPTElDWV9N QVNLICAgICAgICAgICAgICAgICAgIDB4MDA2MA0KPiA+ICsjZGVmaW5lIE1XTF9RT1NfQUNLX1BP TElDWV9OT1JNQUwgICAgICAgICAgMHgwMDAwDQo+ID4gKyNkZWZpbmUgTVdMX1FPU19BQ0tfUE9M SUNZX0JMT0NLQUNLICAgICAgICAweDAwNjANCj4gPiArDQo+ID4gKyNkZWZpbmUgRVhUX0lWICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwDQo+ID4gKyNkZWZpbmUgSU5DUkVBU0VfSVYo aXYxNiwgaXYzMikgXA0KPiA+ICt7IFwNCj4gPiArICAgICAgIChpdjE2KSsrOyBcDQo+ID4gKyAg ICAgICBpZiAoKGl2MTYpID09IDApIFwNCj4gPiArICAgICAgICAgICAgICAgKGl2MzIpKys7IFwN Cj4gPiArfQ0KPiA+ICsNCj4gPiArLyogVHJhbnNtaXQgcmF0ZSBpbmZvcm1hdGlvbiBjb25zdGFu dHMgKi8NCj4gPiArI2RlZmluZSBUWF9SQVRFX0ZPUk1BVF9MRUdBQ1kgICAgICAgICAwDQo+ID4g KyNkZWZpbmUgVFhfUkFURV9GT1JNQVRfMTFOICAgICAgICAgICAgMQ0KPiA+ICsjZGVmaW5lIFRY X1JBVEVfRk9STUFUXzExQUMgICAgICAgICAgIDINCj4gPiArDQo+ID4gKyNkZWZpbmUgVFhfUkFU RV9CQU5EV0lEVEhfMjAgICAgICAgICAgMA0KPiA+ICsjZGVmaW5lIFRYX1JBVEVfQkFORFdJRFRI XzQwICAgICAgICAgIDENCj4gPiArI2RlZmluZSBUWF9SQVRFX0JBTkRXSURUSF84MCAgICAgICAg ICAyDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFRYX1JBVEVfSU5GT19TVERfR0kgICAgICAgICAgIDAN Cj4gPiArI2RlZmluZSBUWF9SQVRFX0lORk9fU0hPUlRfR0kgICAgICAgICAxDQo+ID4gKw0KPiA+ ICtlbnVtIHsNCj4gPiArICAgICAgIElFRUVfVFlQRV9NQU5BR0VNRU5UID0gMCwNCj4gPiArICAg ICAgIElFRUVfVFlQRV9DT05UUk9MLA0KPiA+ICsgICAgICAgSUVFRV9UWVBFX0RBVEENCj4gPiAr fTsNCj4gPiArDQo+ID4gK3N0cnVjdCBjY21wX2hkciB7DQo+ID4gKyAgICAgICBfX2xlMTYgaXYx NjsNCj4gPiArICAgICAgIHU4IHJzdmQ7DQo+ID4gKyAgICAgICB1OCBrZXlfaWQ7DQo+ID4gKyAg ICAgICBfX2xlMzIgaXYzMjsNCj4gPiArfSBfX3BhY2tlZDsNCj4gPiArDQo+ID4gK3N0YXRpYyBp bnQgbXdsX3R4X3JpbmdfYWxsb2Moc3RydWN0IG13bF9wcml2ICpwcml2KSB7DQo+ID4gKyAgICAg ICBzdHJ1Y3QgbXdsX2Rlc2NfZGF0YSAqZGVzYzsNCj4gPiArICAgICAgIGludCBudW07DQo+ID4g KyAgICAgICB1OCAqbWVtOw0KPiA+ICsNCj4gPiArICAgICAgIGRlc2MgPSAmcHJpdi0+ZGVzY19k YXRhWzBdOw0KPiA+ICsNCj4gPiArICAgICAgIG1lbSA9IGRtYV9hbGxvY19jb2hlcmVudCgmcHJp di0+cGRldi0+ZGV2LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BWF9O VU1fVFhfUklOR19CWVRFUyAqDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg U1lTQURQVF9OVU1fT0ZfREVTQ19EQVRBLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZkZXNjLT5wcGh5c190eF9yaW5nLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEdGUF9LRVJORUwpOw0KPiA+ICsNCj4gPiArICAgICAgIGlmICghbWVtKSB7DQo+ ID4gKyAgICAgICAgICAgICAgIHdpcGh5X2Vycihwcml2LT5ody0+d2lwaHksICJjYW5ub3QgYWxs b2MgbWVtXG4iKTsNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07DQo+ID4gKyAg ICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgZm9yIChudW0gPSAwOyBudW0gPCBTWVNBRFBUX05V TV9PRl9ERVNDX0RBVEE7IG51bSsrKSB7DQo+ID4gKyAgICAgICAgICAgICAgIGRlc2MgPSAmcHJp di0+ZGVzY19kYXRhW251bV07DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICBkZXNjLT5wdHhf cmluZyA9IChzdHJ1Y3QgbXdsX3R4X2Rlc2MgKikNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAobWVtICsgbnVtICogTUFYX05VTV9UWF9SSU5HX0JZVEVTKTsNCj4gPiArDQo+ID4gKyAgICAg ICAgICAgICAgIGRlc2MtPnBwaHlzX3R4X3JpbmcgPSAoZG1hX2FkZHJfdCkNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAoKHUzMilwcml2LT5kZXNjX2RhdGFbMF0ucHBoeXNfdHhfcmluZyAr DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgbnVtICogTUFYX05VTV9UWF9SSU5HX0JZVEVT KTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIG1lbXNldChkZXNjLT5wdHhfcmluZywgMHgw MCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIE1BWF9OVU1fVFhfUklOR19CWVRFUyk7DQo+ ID4gKyAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgbWVtID0ga21hbGxvYyhNQVhfTlVNX1RY X0hORExfQllURVMgKg0KPiBTWVNBRFBUX05VTV9PRl9ERVNDX0RBVEEsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgIEdGUF9LRVJORUwpOw0KPiA+ICsNCj4gPiArICAgICAgIGlmICghbWVtKSB7 DQo+ID4gKyAgICAgICAgICAgICAgIHdpcGh5X2Vycihwcml2LT5ody0+d2lwaHksICJjYW5ub3Qg YWxsb2MgbWVtXG4iKTsNCj4gPiArICAgICAgICAgICAgICAgZG1hX2ZyZWVfY29oZXJlbnQoJnBy aXYtPnBkZXYtPmRldiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFY X05VTV9UWF9SSU5HX0JZVEVTICoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgU1lTQURQVF9OVU1fT0ZfREVTQ19EQVRBLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwcml2LT5kZXNjX2RhdGFbMF0ucHR4X3JpbmcsDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHByaXYtPmRlc2NfZGF0YVswXS5wcGh5c190eF9yaW5nKTsN Cj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07DQo+ID4gKyAgICAgICB9DQo+ID4g Kw0KPiA+ICsgICAgICAgZm9yIChudW0gPSAwOyBudW0gPCBTWVNBRFBUX05VTV9PRl9ERVNDX0RB VEE7IG51bSsrKSB7DQo+ID4gKyAgICAgICAgICAgICAgIGRlc2MgPSAmcHJpdi0+ZGVzY19kYXRh W251bV07DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICBkZXNjLT50eF9obmRsID0gKHN0cnVj dCBtd2xfdHhfaG5kbCAqKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIChtZW0gKyBudW0g KiBNQVhfTlVNX1RYX0hORExfQllURVMpOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgbWVt c2V0KGRlc2MtPnR4X2huZGwsIDB4MDAsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICBNQVhf TlVNX1RYX0hORExfQllURVMpOw0KPiA+ICsgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgIHJl dHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG13bF90eF9yaW5nX2luaXQo c3RydWN0IG13bF9wcml2ICpwcml2KSB7DQo+ID4gKyAgICAgICBpbnQgbnVtLCBpOw0KPiA+ICsg ICAgICAgc3RydWN0IG13bF9kZXNjX2RhdGEgKmRlc2M7DQo+ID4gKw0KPiA+ICsgICAgICAgZm9y IChudW0gPSAwOyBudW0gPCBTWVNBRFBUX05VTV9PRl9ERVNDX0RBVEE7IG51bSsrKSB7DQo+ID4g KyAgICAgICAgICAgICAgIHNrYl9xdWV1ZV9oZWFkX2luaXQoJnByaXYtPnR4cVtudW1dKTsNCj4g PiArICAgICAgICAgICAgICAgcHJpdi0+ZndfZGVzY19jbnRbbnVtXSA9IDA7DQo+ID4gKw0KPiA+ ICsgICAgICAgICAgICAgICBkZXNjID0gJnByaXYtPmRlc2NfZGF0YVtudW1dOw0KPiA+ICsNCj4g PiArICAgICAgICAgICAgICAgaWYgKGRlc2MtPnB0eF9yaW5nKSB7DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IFNZU0FEUFRfTUFYX05VTV9UWF9ERVNDOw0KPiBp KyspIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MtPnB0eF9yaW5n W2ldLnN0YXR1cyA9DQo+ID4gKw0KPiBjcHVfdG9fbGUzMihFQUdMRV9UWERfU1RBVFVTX0lETEUp Ow0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYy0+cHR4X3JpbmdbaV0u cHBoeXNfbmV4dCA9DQo+ID4gKw0KPiBjcHVfdG9fbGUzMigodTMyKWRlc2MtPnBwaHlzX3R4X3Jp bmcgKw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGkgKyAx KSAqIHNpemVvZihzdHJ1Y3QNCj4gbXdsX3R4X2Rlc2MpKSk7DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkZXNjLT50eF9obmRsW2ldLnBkZXNjID0NCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRlc2MtPnB0eF9yaW5nW2ldOw0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBTWVNBRFBUX01BWF9OVU1fVFhf REVTQw0KPiAtIDEpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRlc2MtPnR4X2huZGxbaV0ucG5leHQgPQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZkZXNjLT50eF9obmRsW2kNCj4gKyAxXTsNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZGVzYy0+ cHR4X3JpbmdbU1lTQURQVF9NQVhfTlVNX1RYX0RFU0MNCj4gLSAxXS5wcGh5c19uZXh0ID0NCj4g PiArDQo+IGNwdV90b19sZTMyKCh1MzIpZGVzYy0+cHBoeXNfdHhfcmluZyk7DQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgZGVzYy0+dHhfaG5kbFtTWVNBRFBUX01BWF9OVU1fVFhfREVTQyAt DQo+IDFdLnBuZXh0ID0NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkZXNj LT50eF9obmRsWzBdOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBkZXNjLT5w c3RhbGVfdHhfaG5kbCA9ICZkZXNjLT50eF9obmRsWzBdOw0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgIGRlc2MtPnBuZXh0X3R4X2huZGwgID0gJmRlc2MtPnR4X2huZGxbMF07DQo+ID4gKyAg ICAgICAgICAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgd2lwaHlf ZXJyKHByaXYtPmh3LT53aXBoeSwgIm5vIHZhbGlkIFRYDQo+IG1lbVxuIik7DQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07DQo+ID4gKyAgICAgICAgICAgICAgIH0N Cj4gPiArICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIHZvaWQgbXdsX3R4X3JpbmdfY2xlYW51cChzdHJ1Y3QgbXdsX3ByaXYg KnByaXYpIHsNCj4gPiArICAgICAgIGludCBjbGVhbmVkX3R4X2Rlc2MgPSAwOw0KPiA+ICsgICAg ICAgaW50IG51bSwgaTsNCj4gPiArICAgICAgIHN0cnVjdCBtd2xfZGVzY19kYXRhICpkZXNjOw0K PiA+ICsNCj4gPiArICAgICAgIGZvciAobnVtID0gMDsgbnVtIDwgU1lTQURQVF9OVU1fT0ZfREVT Q19EQVRBOyBudW0rKykgew0KPiA+ICsgICAgICAgICAgICAgICBza2JfcXVldWVfcHVyZ2UoJnBy aXYtPnR4cVtudW1dKTsNCj4gPiArICAgICAgICAgICAgICAgcHJpdi0+ZndfZGVzY19jbnRbbnVt XSA9IDA7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICBkZXNjID0gJnByaXYtPmRlc2NfZGF0 YVtudW1dOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgaWYgKGRlc2MtPnB0eF9yaW5nKSB7 DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IFNZU0FEUFRfTUFY X05VTV9UWF9ERVNDOw0KPiBpKyspIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlmICghZGVzYy0+dHhfaG5kbFtpXS5wc2tfYnVmZikNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQo+ID4gKw0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgd2lwaHlfaW5mbyhwcml2LT5ody0+d2lwaHksDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bm1hcHBlZCBhbmQgZnJl ZSdkDQo+ICVpIDB4JXAgMHgleFxuIiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaSwNCj4gPiArDQo+IGRlc2MtPnR4X2huZGxbaV0ucHNrX2J1ZmYtPmRh dGEsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlMzJf dG9fY3B1KA0KPiA+ICsNCj4gZGVzYy0+cHR4X3JpbmdbaV0ucGt0X3B0cikpOw0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpX3VubWFwX3NpbmdsZShwcml2LT5wZGV2LA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZTMy X3RvX2NwdSgNCj4gPiArDQo+IGRlc2MtPnB0eF9yaW5nW2ldLnBrdF9wdHIpLA0KPiA+ICsNCj4g ZGVzYy0+dHhfaG5kbFtpXS5wc2tfYnVmZi0+bGVuLA0KPiA+ICsNCj4gUENJX0RNQV9UT0RFVklD RSk7DQo+ID4gKw0KPiBkZXZfa2ZyZWVfc2tiX2FueShkZXNjLT50eF9obmRsW2ldLnBza19idWZm KTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MtPnB0eF9yaW5nW2ld LnN0YXR1cyA9DQo+ID4gKw0KPiBjcHVfdG9fbGUzMihFQUdMRV9UWERfU1RBVFVTX0lETEUpOw0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYy0+cHR4X3JpbmdbaV0ucGt0 X3B0ciA9IDA7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjLT5wdHhf cmluZ1tpXS5wa3RfbGVuID0gMDsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRlc2MtPnR4X2huZGxbaV0ucHNrX2J1ZmYgPSBOVUxMOw0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2xlYW5lZF90eF9kZXNjKys7DQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgfQ0KPiA+ICsgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICB9DQo+ID4gKw0KPiA+ ICsgICAgICAgd2lwaHlfaW5mbyhwcml2LT5ody0+d2lwaHksICJjbGVhbmVkICVpIFRYIGRlc2Ny XG4iLA0KPiA+ICtjbGVhbmVkX3R4X2Rlc2MpOyB9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBt d2xfdHhfcmluZ19mcmVlKHN0cnVjdCBtd2xfcHJpdiAqcHJpdikgew0KPiA+ICsgICAgICAgaW50 IG51bTsNCj4gPiArDQo+ID4gKyAgICAgICBpZiAocHJpdi0+ZGVzY19kYXRhWzBdLnB0eF9yaW5n KSB7DQo+ID4gKyAgICAgICAgICAgICAgIGRtYV9mcmVlX2NvaGVyZW50KCZwcml2LT5wZGV2LT5k ZXYsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BWF9OVU1fVFhfUklO R19CWVRFUyAqDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNZU0FEUFRf TlVNX09GX0RFU0NfREFUQSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cHJpdi0+ZGVzY19kYXRhWzBdLnB0eF9yaW5nLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwcml2LT5kZXNjX2RhdGFbMF0ucHBoeXNfdHhfcmluZyk7DQo+ID4gKyAgICAg ICB9DQo+ID4gKw0KPiA+ICsgICAgICAgZm9yIChudW0gPSAwOyBudW0gPCBTWVNBRFBUX05VTV9P Rl9ERVNDX0RBVEE7IG51bSsrKSB7DQo+ID4gKyAgICAgICAgICAgICAgIGlmIChwcml2LT5kZXNj X2RhdGFbbnVtXS5wdHhfcmluZykNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5k ZXNjX2RhdGFbbnVtXS5wdHhfcmluZyA9IE5VTEw7DQo+ID4gKyAgICAgICAgICAgICAgIHByaXYt PmRlc2NfZGF0YVtudW1dLnBzdGFsZV90eF9obmRsID0gTlVMTDsNCj4gPiArICAgICAgICAgICAg ICAgcHJpdi0+ZGVzY19kYXRhW251bV0ucG5leHRfdHhfaG5kbCA9IE5VTEw7DQo+ID4gKyAgICAg ICB9DQo+ID4gKw0KPiA+ICsgICAgICAga2ZyZWUocHJpdi0+ZGVzY19kYXRhWzBdLnR4X2huZGwp Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgbXdsX3R4X2FkZF9kbWFf aGVhZGVyKHN0cnVjdCBtd2xfcHJpdiAqcHJpdiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpza2IsDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGVhZF9wYWQsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFpbF9wYWQpIHsNCj4gPiArICAg ICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICp3aDsNCj4gPiArICAgICAgIGludCBoZHJsZW47DQo+ ID4gKyAgICAgICBpbnQgcmVxZF9oZHJsZW47DQo+ID4gKyAgICAgICBzdHJ1Y3QgbXdsX2RtYV9k YXRhICp0cjsNCj4gPiArDQo+ID4gKyAgICAgICAvKiBBZGQgYSBmaXJtd2FyZSBETUEgaGVhZGVy OyB0aGUgZmlybXdhcmUgcmVxdWlyZXMgdGhhdCB3ZQ0KPiA+ICsgICAgICAgICogcHJlc2VudCBh IDItYnl0ZSBwYXlsb2FkIGxlbmd0aCBmb2xsb3dlZCBieSBhIDQtYWRkcmVzcw0KPiA+ICsgICAg ICAgICogaGVhZGVyICh3aXRob3V0IFFvUyBmaWVsZCksIGZvbGxvd2VkIChvcHRpb25hbGx5KSBi eSBhbnkNCj4gPiArICAgICAgICAqIFdFUC9FeHRJViBoZWFkZXIgKGJ1dCBvbmx5IGZpbGxlZCBp biBmb3IgQ0NNUCkuDQo+ID4gKyAgICAgICAgKi8NCj4gPiArICAgICAgIHdoID0gKHN0cnVjdCBp ZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOw0KPiA+ICsNCj4gPiArICAgICAgIGhkcmxlbiA9IGll ZWU4MDIxMV9oZHJsZW4od2gtPmZyYW1lX2NvbnRyb2wpOw0KPiA+ICsNCj4gPiArICAgICAgIHJl cWRfaGRybGVuID0gc2l6ZW9mKCp0cikgKyBoZWFkX3BhZDsNCj4gPiArDQo+ID4gKyAgICAgICBp ZiAoaGRybGVuICE9IHJlcWRfaGRybGVuKQ0KPiA+ICsgICAgICAgICAgICAgICBza2JfcHVzaChz a2IsIHJlcWRfaGRybGVuIC0gaGRybGVuKTsNCj4gPiArDQo+ID4gKyAgICAgICBpZiAoaWVlZTgw MjExX2lzX2RhdGFfcW9zKHdoLT5mcmFtZV9jb250cm9sKSkNCj4gPiArICAgICAgICAgICAgICAg aGRybGVuIC09IElFRUU4MDIxMV9RT1NfQ1RMX0xFTjsNCj4gPiArDQo+ID4gKyAgICAgICB0ciA9 IChzdHJ1Y3QgbXdsX2RtYV9kYXRhICopc2tiLT5kYXRhOw0KPiA+ICsNCj4gPiArICAgICAgIGlm ICh3aCAhPSAmdHItPndoKQ0KPiA+ICsgICAgICAgICAgICAgICBtZW1tb3ZlKCZ0ci0+d2gsIHdo LCBoZHJsZW4pOw0KPiA+ICsNCj4gPiArICAgICAgIGlmIChoZHJsZW4gIT0gc2l6ZW9mKHRyLT53 aCkpDQo+ID4gKyAgICAgICAgICAgICAgIG1lbXNldCgoKHZvaWQgKikmdHItPndoKSArIGhkcmxl biwgMCwgc2l6ZW9mKHRyLT53aCkgLQ0KPiA+ICsgaGRybGVuKTsNCj4gPiArDQo+ID4gKyAgICAg ICAvKiBGaXJtd2FyZSBsZW5ndGggaXMgdGhlIGxlbmd0aCBvZiB0aGUgZnVsbHkgZm9ybWVkICI4 MDIuMTENCj4gPiArICAgICAgICAqIHBheWxvYWQiLiAgVGhhdCBpcywgZXZlcnl0aGluZyBleGNl cHQgZm9yIHRoZSA4MDIuMTEgaGVhZGVyLg0KPiA+ICsgICAgICAgICogVGhpcyBpbmNsdWRlcyBh bGwgY3J5cHRvIG1hdGVyaWFsIGluY2x1ZGluZyB0aGUgTUlDLg0KPiA+ICsgICAgICAgICovDQo+ ID4gKyAgICAgICB0ci0+ZndsZW4gPSBjcHVfdG9fbGUxNihza2ItPmxlbiAtIHNpemVvZigqdHIp ICsgdGFpbF9wYWQpOyB9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgbXdsX3R4X2Vu Y2Fwc3VsYXRlX2ZyYW1lKHN0cnVjdCBtd2xfcHJpdiAqcHJpdiwNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpza2IsDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QNCj4gaWVl ZTgwMjExX2tleV9jb25mICprX2NvbmYsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBib29sICpjY21wKSB7DQo+ID4gKyAgICAgICBpbnQgaGVhZF9wYWQg PSAwOw0KPiA+ICsgICAgICAgaW50IGRhdGFfcGFkID0gMDsNCj4gPiArDQo+ID4gKyAgICAgICAv KiBNYWtlIHN1cmUgdGhlIHBhY2tldCBoZWFkZXIgaXMgaW4gdGhlIERNQSBoZWFkZXIgZm9ybWF0 DQo+ICg0LWFkZHJlc3MNCj4gPiArICAgICAgICAqIHdpdGhvdXQgUW9TKSwgYW5kIGFkZCBoZWFk ICYgdGFpbCBwYWRkaW5nIHdoZW4gSFcgY3J5cHRvIGlzDQo+IGVuYWJsZWQuDQo+ID4gKyAgICAg ICAgKg0KPiA+ICsgICAgICAgICogV2UgaGF2ZSB0aGUgZm9sbG93aW5nIHRyYWlsZXIgcGFkZGlu ZyByZXF1aXJlbWVudHM6DQo+ID4gKyAgICAgICAgKiAtIFdFUDogNCB0cmFpbGVyIGJ5dGVzIChJ Q1YpDQo+ID4gKyAgICAgICAgKiAtIFRLSVA6IDEyIHRyYWlsZXIgYnl0ZXMgKDggTUlDICsgNCBJ Q1YpDQo+ID4gKyAgICAgICAgKiAtIENDTVA6IDggdHJhaWxlciBieXRlcyAoTUlDKQ0KPiA+ICsg ICAgICAgICovDQo+ID4gKw0KPiA+ICsgICAgICAgaWYgKGtfY29uZikgew0KPiA+ICsgICAgICAg ICAgICAgICBoZWFkX3BhZCA9IGtfY29uZi0+aXZfbGVuOw0KPiA+ICsNCj4gPiArICAgICAgICAg ICAgICAgc3dpdGNoIChrX2NvbmYtPmNpcGhlcikgew0KPiA+ICsgICAgICAgICAgICAgICBjYXNl IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwOg0KPiA+ICsgICAgICAgICAgICAgICBjYXNlIFdMQU5f Q0lQSEVSX1NVSVRFX1dFUDEwNDoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3Bh ZCA9IDQ7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgICAg ICAgICAgIGNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfVEtJUDoNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICBkYXRhX3BhZCA9IDEyOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr Ow0KPiA+ICsgICAgICAgICAgICAgICBjYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVA6DQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9wYWQgPSA4Ow0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICpjY21wID0gdHJ1ZTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBicmVh azsNCj4gPiArICAgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgfQ0KPiA+ICsNCj4gPiArICAg ICAgIG13bF90eF9hZGRfZG1hX2hlYWRlcihwcml2LCBza2IsIGhlYWRfcGFkLCBkYXRhX3BhZCk7 IH0NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCBtd2xfdHhfaW5zZXJ0X2NjbXBfaGRy KHU4ICpwY2NtcF9oZHIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdTgga2V5X2lkLCB1MTYgaXYxNiwgdTMyDQo+ID4gK2l2MzIpIHsNCj4gPiArICAgICAg IHN0cnVjdCBjY21wX2hkciAqY2NtcF9oID0gKHN0cnVjdCBjY21wX2hkciAqKXBjY21wX2hkcjsN Cj4gPiArDQo+ID4gKyAgICAgICBjY21wX2gtPml2MTYgPSBjcHVfdG9fbGUxNihpdjE2KTsNCj4g PiArICAgICAgIGNjbXBfaC0+cnN2ZCA9IDA7DQo+ID4gKyAgICAgICBjY21wX2gtPmtleV9pZCA9 IEVYVF9JViB8IChrZXlfaWQgPDwgNik7DQo+ID4gKyAgICAgICBjY21wX2gtPml2MzIgPSBjcHVf dG9fbGUzMihpdjMyKTsgfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSBpbnQgbXdsX3R4X3Rp ZF9xdWV1ZV9tYXBwaW5nKHU4IHRpZCkgew0KPiA+ICsgICAgICAgc3dpdGNoICh0aWQpIHsNCj4g PiArICAgICAgIGNhc2UgMDoNCj4gPiArICAgICAgIGNhc2UgMzoNCj4gPiArICAgICAgICAgICAg ICAgcmV0dXJuIElFRUU4MDIxMV9BQ19CRTsNCj4gPiArICAgICAgIGNhc2UgMToNCj4gPiArICAg ICAgIGNhc2UgMjoNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIElFRUU4MDIxMV9BQ19CSzsN Cj4gPiArICAgICAgIGNhc2UgNDoNCj4gPiArICAgICAgIGNhc2UgNToNCj4gPiArICAgICAgICAg ICAgICAgcmV0dXJuIElFRUU4MDIxMV9BQ19WSTsNCj4gPiArICAgICAgIGNhc2UgNjoNCj4gPiAr ICAgICAgIGNhc2UgNzoNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIElFRUU4MDIxMV9BQ19W TzsNCj4gPiArICAgICAgIGRlZmF1bHQ6DQo+ID4gKyAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ ICsgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgIHJldHVybiAtMTsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIGlubGluZSB2b2lkIG13bF90eF9jb3VudF9wYWNrZXQoc3RydWN0IGllZWU4 MDIxMV9zdGEgKnN0YSwgdTgNCj4gPiArdGlkKSB7DQo+ID4gKyAgICAgICBzdHJ1Y3QgbXdsX3N0 YSAqc3RhX2luZm87DQo+ID4gKyAgICAgICBzdHJ1Y3QgbXdsX3R4X2luZm8gKnR4X3N0YXRzOw0K PiA+ICsNCj4gPiArICAgICAgIGlmIChXQVJOX09OKHRpZCA+PSBTWVNBRFBUX01BWF9USUQpKQ0K PiA+ICsgICAgICAgICAgICAgICByZXR1cm47DQo+ID4gKw0KPiA+ICsgICAgICAgc3RhX2luZm8g PSBtd2xfZGV2X2dldF9zdGEoc3RhKTsNCj4gPiArDQo+ID4gKyAgICAgICB0eF9zdGF0cyA9ICZz dGFfaW5mby0+dHhfc3RhdHNbdGlkXTsNCj4gPiArDQo+ID4gKyAgICAgICBpZiAodHhfc3RhdHMt PnN0YXJ0X3RpbWUgPT0gMCkNCj4gPiArICAgICAgICAgICAgICAgdHhfc3RhdHMtPnN0YXJ0X3Rp bWUgPSBqaWZmaWVzOw0KPiA+ICsNCj4gPiArICAgICAgIC8qIHJlc2V0IHRoZSBwYWNrZXQgY291 bnQgYWZ0ZXIgZWFjaCBzZWNvbmQgZWxhcHNlcy4gIElmIHRoZQ0KPiBudW1iZXIgb2YNCj4gPiAr ICAgICAgICAqIHBhY2tldHMgZXZlciBleGNlZWRzIHRoZSBhbXBkdV9taW5fdHJhZmZpYyB0aHJl c2hvbGQsIHdlIHdpbGwNCj4gYWxsb3cNCj4gPiArICAgICAgICAqIGFuIGFtcGR1IHN0cmVhbSB0 byBiZSBzdGFydGVkLg0KPiA+ICsgICAgICAgICovDQo+ID4gKyAgICAgICBpZiAoamlmZmllcyAt IHR4X3N0YXRzLT5zdGFydF90aW1lID4gSFopIHsNCj4gPiArICAgICAgICAgICAgICAgdHhfc3Rh dHMtPnBrdHMgPSAwOw0KPiA+ICsgICAgICAgICAgICAgICB0eF9zdGF0cy0+c3RhcnRfdGltZSA9 IDA7DQo+ID4gKyAgICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAgICB0eF9zdGF0cy0+ cGt0cysrOw0KPiA+ICsgICAgICAgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5l IGJvb2wgbXdsX3R4X2F2YWlsYWJsZShzdHJ1Y3QgbXdsX3ByaXYgKnByaXYsIGludA0KPiA+ICtk ZXNjX251bSkgew0KPiA+ICsgICAgICAgc3RydWN0IG13bF90eF9obmRsICp0eF9obmRsOw0KPiA+ ICsNCj4gPiArICAgICAgIHR4X2huZGwgPSBwcml2LT5kZXNjX2RhdGFbZGVzY19udW1dLnBuZXh0 X3R4X2huZGw7DQo+ID4gKw0KPiA+ICsgICAgICAgaWYgKCF0eF9obmRsLT5wZGVzYykNCj4gPiAr ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gPiArICAgICAgIGlmICh0eF9o bmRsLT5wZGVzYy0+c3RhdHVzICE9IEVBR0xFX1RYRF9TVEFUVVNfSURMRSkgew0KPiA+ICsgICAg ICAgICAgICAgICAvKiBJbnRlcnJ1cHQgRi9XIGFueXdheSAqLw0KPiA+ICsgICAgICAgICAgICAg ICBpZiAodHhfaG5kbC0+cGRlc2MtPnN0YXR1cyAmDQo+ID4gKyAgICAgICAgICAgICAgICAgICBj cHVfdG9fbGUzMihFQUdMRV9UWERfU1RBVFVTX0ZXX09XTkVEKSkNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICB3cml0ZWwoTUFDUkVHX0gyQVJJQ19CSVRfUFBBX1JFQURZLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5pb2Jhc2UxICsNCj4gPiArDQo+IE1BQ1JF R19SRUdfSDJBX0lOVEVSUlVQVF9FVkVOVFMpOw0KPiA+ICsgICAgICAgICAgICAgICByZXR1cm4g ZmFsc2U7DQo+ID4gKyAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgcmV0dXJuIHRydWU7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCBtd2xfdHhfc2tiKHN0cnVjdCBt d2xfcHJpdiAqcHJpdiwgaW50IGRlc2NfbnVtLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBza19idWZmICp0eF9za2IpIHsNCj4gPiArICAgICAgIHN0cnVjdCBpZWVl ODAyMTFfdHhfaW5mbyAqdHhfaW5mbzsNCj4gPiArICAgICAgIHN0cnVjdCBtd2xfdHhfY3RybCAq dHhfY3RybDsNCj4gPiArICAgICAgIHN0cnVjdCBtd2xfdHhfaG5kbCAqdHhfaG5kbDsNCj4gPiAr ICAgICAgIHN0cnVjdCBtd2xfdHhfZGVzYyAqdHhfZGVzYzsNCj4gPiArICAgICAgIHN0cnVjdCBp ZWVlODAyMTFfc3RhICpzdGE7DQo+ID4gKyAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlm Ow0KPiA+ICsgICAgICAgc3RydWN0IG13bF92aWYgKm13bF92aWY7DQo+ID4gKyAgICAgICBzdHJ1 Y3QgaWVlZTgwMjExX2tleV9jb25mICprX2NvbmY7DQo+ID4gKyAgICAgICBib29sIGNjbXAgPSBm YWxzZTsNCj4gPiArICAgICAgIHN0cnVjdCBtd2xfZG1hX2RhdGEgKmRtYV9kYXRhOw0KPiA+ICsg ICAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKndoOw0KPiA+ICsgICAgICAgZG1hX2FkZHJfdCBk bWE7DQo+ID4gKw0KPiA+ICsgICAgICAgaWYgKFdBUk5fT04oIXR4X3NrYikpDQo+ID4gKyAgICAg ICAgICAgICAgIHJldHVybjsNCj4gPiArDQo+ID4gKyAgICAgICB0eF9pbmZvID0gSUVFRTgwMjEx X1NLQl9DQih0eF9za2IpOw0KPiA+ICsgICAgICAgdHhfY3RybCA9IChzdHJ1Y3QgbXdsX3R4X2N0 cmwgKikmdHhfaW5mby0+c3RhdHVzOw0KPiA+ICsgICAgICAgc3RhID0gKHN0cnVjdCBpZWVlODAy MTFfc3RhICopdHhfY3RybC0+c3RhOw0KPiA+ICsgICAgICAgdmlmID0gKHN0cnVjdCBpZWVlODAy MTFfdmlmICopdHhfY3RybC0+dmlmOw0KPiA+ICsgICAgICAgbXdsX3ZpZiA9IG13bF9kZXZfZ2V0 X3ZpZih2aWYpOw0KPiA+ICsgICAgICAga19jb25mID0gKHN0cnVjdCBpZWVlODAyMTFfa2V5X2Nv bmYgKil0eF9jdHJsLT5rX2NvbmY7DQo+ID4gKw0KPiA+ICsgICAgICAgbXdsX3R4X2VuY2Fwc3Vs YXRlX2ZyYW1lKHByaXYsIHR4X3NrYiwga19jb25mLCAmY2NtcCk7DQo+ID4gKw0KPiA+ICsgICAg ICAgZG1hX2RhdGEgPSAoc3RydWN0IG13bF9kbWFfZGF0YSAqKXR4X3NrYi0+ZGF0YTsNCj4gPiAr ICAgICAgIHdoID0gJmRtYV9kYXRhLT53aDsNCj4gPiArDQo+ID4gKyAgICAgICBpZiAoaWVlZTgw MjExX2lzX2RhdGEod2gtPmZyYW1lX2NvbnRyb2wpKSB7DQo+ID4gKyAgICAgICAgICAgICAgIGlm IChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcih3aC0+YWRkcjEpKSB7DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgaWYgKGNjbXApIHsNCj4gPiArDQo+IG13bF90eF9pbnNlcnRfY2NtcF9oZHIo ZG1hX2RhdGEtPmRhdGEsDQo+ID4gKw0KPiBtd2xfdmlmLT5rZXlpZHgsDQo+ID4gKw0KPiBtd2xf dmlmLT5pdjE2LA0KPiA+ICsNCj4gbXdsX3ZpZi0+aXYzMik7DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBJTkNSRUFTRV9JVihtd2xfdmlmLT5pdjE2LA0KPiBtd2xfdmlmLT5p djMyKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgICAg IH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNjbXApIHsNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2aWYtPnR5cGUgPT0NCj4gTkw4MDIx MV9JRlRZUEVfU1RBVElPTikgew0KPiA+ICsNCj4gbXdsX3R4X2luc2VydF9jY21wX2hkcihkbWFf ZGF0YS0+ZGF0YSwNCj4gPiArDQo+IG13bF92aWYtPmtleWlkeCwNCj4gPiArDQo+IG13bF92aWYt Pml2MTYsDQo+ID4gKw0KPiBtd2xfdmlmLT5pdjMyKTsNCj4gPiArDQo+IElOQ1JFQVNFX0lWKG13 bF92aWYtPml2MTYsDQo+ID4gKw0KPiBtd2xfdmlmLT5pdjMyKTsNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBtd2xfc3RhICpzdGFfaW5mbzsNCj4gPiArDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YV9pbmZvID0NCj4gPiArIG13 bF9kZXZfZ2V0X3N0YShzdGEpOw0KPiA+ICsNCj4gPiArDQo+IG13bF90eF9pbnNlcnRfY2NtcF9o ZHIoZG1hX2RhdGEtPmRhdGEsDQo+ID4gKw0KPiAwLA0KPiA+ICsNCj4gc3RhX2luZm8tPml2MTYs DQo+ID4gKw0KPiBzdGFfaW5mby0+aXYzMik7DQo+ID4gKw0KPiBJTkNSRUFTRV9JVihzdGFfaW5m by0+aXYxNiwNCj4gPiArDQo+IHN0YV9pbmZvLT5pdjMyKTsNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICB9DQo+ID4gKyAg ICAgICAgICAgICAgIH0NCj4gPiArICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICB0eF9obmRs ID0gcHJpdi0+ZGVzY19kYXRhW2Rlc2NfbnVtXS5wbmV4dF90eF9obmRsOw0KPiA+ICsgICAgICAg dHhfaG5kbC0+cHNrX2J1ZmYgPSB0eF9za2I7DQo+ID4gKyAgICAgICB0eF9kZXNjID0gdHhfaG5k bC0+cGRlc2M7DQo+ID4gKyAgICAgICB0eF9kZXNjLT50eF9wcmlvcml0eSA9IHR4X2N0cmwtPnR4 X3ByaW9yaXR5Ow0KPiA+ICsgICAgICAgdHhfZGVzYy0+cW9zX2N0cmwgPSBjcHVfdG9fbGUxNih0 eF9jdHJsLT5xb3NfY3RybCk7DQo+ID4gKyAgICAgICB0eF9kZXNjLT5wa3RfbGVuID0gY3B1X3Rv X2xlMTYodHhfc2tiLT5sZW4pOw0KPiA+ICsgICAgICAgdHhfZGVzYy0+cGFja2V0X2luZm8gPSAw Ow0KPiA+ICsgICAgICAgdHhfZGVzYy0+ZGF0YV9yYXRlID0gMDsNCj4gPiArICAgICAgIHR4X2Rl c2MtPnR5cGUgPSB0eF9jdHJsLT50eXBlOw0KPiA+ICsgICAgICAgdHhfZGVzYy0+eG1pdF9jb250 cm9sID0gdHhfY3RybC0+eG1pdF9jb250cm9sOw0KPiA+ICsgICAgICAgdHhfZGVzYy0+c2FwX3Br dF9pbmZvID0gMDsNCj4gPiArICAgICAgIGRtYSA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBkZXYs IHR4X3NrYi0+ZGF0YSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4X3NrYi0+ bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsNCj4gPiArICAgICAgIGlmIChwY2lfZG1hX21hcHBpbmdf ZXJyb3IocHJpdi0+cGRldiwgZG1hKSkgew0KPiA+ICsgICAgICAgICAgICAgICBkZXZfa2ZyZWVf c2tiX2FueSh0eF9za2IpOw0KPiA+ICsgICAgICAgICAgICAgICB3aXBoeV9lcnIocHJpdi0+aHct PndpcGh5LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZCB0byBtYXAgcGNp IG1lbW9yeSFcbiIpOw0KPiA+ICsgICAgICAgICAgICAgICByZXR1cm47DQo+ID4gKyAgICAgICB9 DQo+ID4gKyAgICAgICB0eF9kZXNjLT5wa3RfcHRyID0gY3B1X3RvX2xlMzIoZG1hKTsNCj4gPiAr ICAgICAgIHR4X2Rlc2MtPnN0YXR1cyA9IGNwdV90b19sZTMyKEVBR0xFX1RYRF9TVEFUVVNfRldf T1dORUQpOw0KPiA+ICsgICAgICAgLyogbWFrZSBzdXJlIGFsbCB0aGUgbWVtb3J5IHRyYW5zYWN0 aW9ucyBkb25lIGJ5IGNwdSB3ZXJlDQo+IGNvbXBsZXRlZCAqLw0KPiA+ICsgICAgICAgd21iKCk7 ICAvKkRhdGEgTWVtb3J5IEJhcnJpZXIqLw0KPiA+ICsgICAgICAgd3JpdGVsKE1BQ1JFR19IMkFS SUNfQklUX1BQQV9SRUFEWSwNCj4gPiArICAgICAgICAgICAgICBwcml2LT5pb2Jhc2UxICsNCj4g TUFDUkVHX1JFR19IMkFfSU5URVJSVVBUX0VWRU5UUyk7DQo+ID4gKyAgICAgICBwcml2LT5kZXNj X2RhdGFbZGVzY19udW1dLnBuZXh0X3R4X2huZGwgPSB0eF9obmRsLT5wbmV4dDsNCj4gPiArICAg ICAgIHByaXYtPmZ3X2Rlc2NfY250W2Rlc2NfbnVtXSsrOyB9DQo+ID4gKw0KPiA+ICtzdGF0aWMg aW5saW5lIHN0cnVjdCBza19idWZmICptd2xfdHhfZG9fYW1zZHUoc3RydWN0IG13bF9wcml2ICpw cml2LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgZGVzY19udW0sDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBza19idWZmDQo+ICp0eF9za2IsDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdA0KPiBpZWVlODAyMTFfdHhfaW5mbw0K PiA+ICsqdHhfaW5mbykgew0KPiA+ICsgICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsN Cj4gPiArICAgICAgIHN0cnVjdCBtd2xfc3RhICpzdGFfaW5mbzsNCj4gPiArICAgICAgIHN0cnVj dCBtd2xfdHhfY3RybCAqdHhfY3RybCA9IChzdHJ1Y3QgbXdsX3R4X2N0cmwNCj4gKikmdHhfaW5m by0+c3RhdHVzOw0KPiA+ICsgICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICphbXNkdV9p bmZvOw0KPiA+ICsgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqYW1zZHVfcGt0czsNCj4gPiAr ICAgICAgIHN0cnVjdCBtd2xfYW1zZHVfZnJhZyAqYW1zZHU7DQo+ID4gKyAgICAgICBpbnQgYW1z ZHVfYWxsb3dfc2l6ZTsNCj4gPiArICAgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICp3aDsNCj4g PiArICAgICAgIGludCB3aF9sZW47DQo+ID4gKyAgICAgICB1MTYgbGVuOw0KPiA+ICsgICAgICAg dTggKmRhdGE7DQo+ID4gKw0KPiA+ICsgICAgICAgc3RhID0gKHN0cnVjdCBpZWVlODAyMTFfc3Rh ICopdHhfY3RybC0+c3RhOw0KPiA+ICsgICAgICAgc3RhX2luZm8gPSBtd2xfZGV2X2dldF9zdGEo c3RhKTsNCj4gPiArDQo+ID4gKyAgICAgICBpZiAoIXN0YV9pbmZvLT5pc19hbXNkdV9hbGxvd2Vk KQ0KPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gdHhfc2tiOw0KPiA+ICsNCj4gPiArICAgICAg IHdoID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopdHhfc2tiLT5kYXRhOw0KPiA+ICsgICAgICAg aWYgKHN0YV9pbmZvLT5pc19tZXNoX25vZGUgJiYNCj4gaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIo d2gtPmFkZHIzKSkNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIHR4X3NrYjsNCj4gPiArDQo+ ID4gKyAgICAgICBpZiAoc3RhX2luZm8tPmFtc2R1X2N0cmwuY2FwID09IE1XTF9BTVNEVV9TSVpF XzRLKQ0KPiA+ICsgICAgICAgICAgICAgICBhbXNkdV9hbGxvd19zaXplID0gU1lTQURQVF9BTVNE VV80S19NQVhfU0laRTsNCj4gPiArICAgICAgIGVsc2UgaWYgKHN0YV9pbmZvLT5hbXNkdV9jdHJs LmNhcCA9PSBNV0xfQU1TRFVfU0laRV84SykNCj4gPiArICAgICAgICAgICAgICAgYW1zZHVfYWxs b3dfc2l6ZSA9IFNZU0FEUFRfQU1TRFVfOEtfTUFYX1NJWkU7DQo+ID4gKyAgICAgICBlbHNlDQo+ ID4gKyAgICAgICAgICAgICAgIHJldHVybiB0eF9za2I7DQo+ID4gKw0KPiA+ICsgICAgICAgc3Bp bl9sb2NrX2JoKCZzdGFfaW5mby0+YW1zZHVfbG9jayk7DQo+ID4gKyAgICAgICBhbXNkdSA9ICZz dGFfaW5mby0+YW1zZHVfY3RybC5mcmFnW2Rlc2NfbnVtXTsNCj4gPiArDQo+ID4gKyAgICAgICBp ZiAodHhfc2tiLT5sZW4gPiBTWVNBRFBUX0FNU0RVX0FMTE9XX1NJWkUpIHsNCj4gPiArICAgICAg ICAgICAgICAgaWYgKGFtc2R1LT5udW0pIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBt d2xfdHhfc2tiKHByaXYsIGRlc2NfbnVtLCBhbXNkdS0+c2tiKTsNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICBhbXNkdS0+bnVtID0gMDsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBh bXNkdS0+Y3VyX3BvcyA9IE5VTEw7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg IGlmICghbXdsX3R4X2F2YWlsYWJsZShwcml2LCBkZXNjX251bSkpIHsNCj4gPiArDQo+IHNrYl9x dWV1ZV9oZWFkKCZwcml2LT50eHFbZGVzY19udW1dLCB0eF9za2IpOw0KPiA+ICsNCj4gc3Bpbl91 bmxvY2tfYmgoJnN0YV9pbmZvLT5hbXNkdV9sb2NrKTsNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiBOVUxMOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIH0N Cj4gPiArICAgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgICAgICBzcGluX3VubG9ja19i aCgmc3RhX2luZm8tPmFtc2R1X2xvY2spOw0KPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gdHhf c2tiOw0KPiA+ICsgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgIC8qIHBvdGVudGlhbCBhbXNk dSBzaXplLCBzaG91bGQgYWRkIGFtc2R1IGhlYWRlciAxNCBieXRlcyArDQo+ID4gKyAgICAgICAg KiBtYXhpbXVtIHBhZGRpbmcgMy4NCj4gPiArICAgICAgICAqLw0KPiA+ICsgICAgICAgd2hfbGVu ID0gaWVlZTgwMjExX2hkcmxlbih3aC0+ZnJhbWVfY29udHJvbCk7DQo+ID4gKyAgICAgICBsZW4g PSB0eF9za2ItPmxlbiAtIHdoX2xlbiArIDE3Ow0KPiA+ICsNCj4gPiArICAgICAgIGlmIChhbXNk dS0+bnVtKSB7DQo+ID4gKyAgICAgICAgICAgICAgIGlmICgoYW1zZHUtPnNrYi0+bGVuICsgbGVu KSA+IGFtc2R1X2FsbG93X3NpemUpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBtd2xf dHhfc2tiKHByaXYsIGRlc2NfbnVtLCBhbXNkdS0+c2tiKTsNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICBhbXNkdS0+bnVtID0gMDsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBhbXNk dS0+Y3VyX3BvcyA9IE5VTEw7DQo+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiArICAgICAgIH0N Cj4gPiArDQo+ID4gKyAgICAgICBhbXNkdS0+amlmZmllcyA9IGppZmZpZXM7DQo+ID4gKyAgICAg ICBsZW4gPSB0eF9za2ItPmxlbiAtIHdoX2xlbjsNCj4gPiArDQo+ID4gKyAgICAgICBpZiAoYW1z ZHUtPm51bSA9PSAwKSB7DQo+ID4gKyAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpuZXdz a2I7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICBhbXNkdV9wa3RzID0gKHN0cnVjdCBza19i dWZmX2hlYWQgKikNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBrbWFsbG9jKHNpemVvZigq YW1zZHVfcGt0cyksIEdGUF9LRVJORUwpOw0KPiA+ICsgICAgICAgICAgICAgICBpZiAoIWFtc2R1 X3BrdHMpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBzcGluX3VubG9ja19iaCgmc3Rh X2luZm8tPmFtc2R1X2xvY2spOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0 eF9za2I7DQo+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiArICAgICAgICAgICAgICAgbmV3c2ti ID0gZGV2X2FsbG9jX3NrYihhbXNkdV9hbGxvd19zaXplICsNCj4gPiArDQo+IFNZU0FEUFRfTUlO X0JZVEVTX0hFQURST09NKTsNCj4gPiArICAgICAgICAgICAgICAgaWYgKCFuZXdza2IpIHsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICBzcGluX3VubG9ja19iaCgmc3RhX2luZm8tPmFtc2R1 X2xvY2spOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGtmcmVlKGFtc2R1X3BrdHMpOw0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eF9za2I7DQo+ID4gKyAgICAgICAg ICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIGRhdGEgPSBuZXdza2ItPmRhdGE7 DQo+ID4gKyAgICAgICAgICAgICAgIG1lbWNweShkYXRhLCB0eF9za2ItPmRhdGEsIHdoX2xlbik7 DQo+ID4gKyAgICAgICAgICAgICAgIGlmIChzdGFfaW5mby0+aXNfbWVzaF9ub2RlKSB7DQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJfYWRkcl9jb3B5KGRhdGEgKyB3aF9sZW4sIHdo LT5hZGRyMyk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJfYWRkcl9jb3B5KGRh dGEgKyB3aF9sZW4gKyBFVEhfQUxFTiwNCj4gd2gtPmFkZHI0KTsNCj4gPiArICAgICAgICAgICAg ICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBldGhlcl9hZGRyX2NvcHko ZGF0YSArIHdoX2xlbiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWVlZTgwMjExX2dldF9EQSh3aCkpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGV0 aGVyX2FkZHJfY29weShkYXRhICsgd2hfbGVuICsgRVRIX0FMRU4sDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGllZWU4MDIxMV9nZXRfU0Eod2gpKTsNCj4gPiAr ICAgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgICAgICAqKHU4ICopKGRhdGEgKyB3aF9s ZW4gKyBFVEhfSExFTiAtIDEpID0gbGVuICYgMHhmZjsNCj4gPiArICAgICAgICAgICAgICAgKih1 OCAqKShkYXRhICsgd2hfbGVuICsgRVRIX0hMRU4gLSAyKSA9IChsZW4gPj4gOCkgJg0KPiA+ICsg MHhmZjsNCj4gDQo+IFRoZXNlIGJpdCBvZXByYXRpb25zIGFyZSBub3QgbmVlZGVkLiBUaGUgcG9p bnRlciBtdXN0IGJlIFdPUkQgYWxpZ25lZCwNCj4gcmlnaHQ/DQo+IFRoaXMgaXMgd2h5IHlvdSBo YXZlIHBhZGRpbmcgYWZ0ZXIgYWxsLCB1bmxlc3MgeW91IGhhdmUgc29tZSB3ZWlyZCBETUENCj4g Z2FtZXM/DQo+IFlvdSBzZWVtIHRvIGJlIGFzc3VtaW5nIHRoaXMgYWxpZ25tZW50IGFueXdheSBi ZWNhdXNlIHlvdSB1c2UNCj4gZXRoZXJfYWRkcl9jb3B5IGFib3ZlLg0KPiANCj4gPiArDQo+ID4g KyAgICAgICAvKiBRdWV1ZSBBRERCQSByZXF1ZXN0IGluIHRoZSByZXNwZWN0aXZlIGRhdGEgcXVl dWUuICBXaGlsZQ0KPiBzZXR0aW5nIHVwDQo+ID4gKyAgICAgICAgKiB0aGUgYW1wZHUgc3RyZWFt LCBtYWM4MDIxMSBxdWV1ZXMgZnVydGhlciBwYWNrZXRzIGZvciB0aGF0DQo+ID4gKyAgICAgICAg KiBwYXJ0aWN1bGFyIHJhL3RpZCBwYWlyLiAgSG93ZXZlciwgcGFja2V0cyBwaWxlZCB1cCBpbiB0 aGUNCj4gaGFyZHdhcmUNCj4gPiArICAgICAgICAqIGZvciB0aGF0IHJhL3RpZCBwYWlyIHdpbGwg c3RpbGwgZ28gb3V0LiBBRERCQSByZXF1ZXN0IGFuZCB0aGUNCj4gPiArICAgICAgICAqIHJlbGF0 ZWQgZGF0YSBwYWNrZXRzIGdvaW5nIG91dCBmcm9tIGRpZmZlcmVudCBxdWV1ZXMNCj4gYXN5bmNo cm9ub3VzbHkNCj4gPiArICAgICAgICAqIHdpbGwgY2F1c2UgYSBzaGlmdCBpbiB0aGUgcmVjZWl2 ZXIgd2luZG93IHdoaWNoIG1pZ2h0IHJlc3VsdCBpbg0KPiA+ICsgICAgICAgICogYW1wZHUgcGFj a2V0cyBnZXR0aW5nIGRyb3BwZWQgYXQgdGhlIHJlY2VpdmVyIGFmdGVyIHRoZSBzdHJlYW0NCj4g aGFzDQo+ID4gKyAgICAgICAgKiBiZWVuIHNldHVwLg0KPiA+ICsgICAgICAgICovDQo+IA0KPiBI ZXJlIGlzIHRoZSByYWNlIHlvdSBhcmUgZmFjaW5nIGFuZCB0aGF0IHJhY2UgY2FuIGJlIGF2b2lk ZWQgYnkgdGhlIHByb3Blcg0KPiB1c2FnZSBvZiB0aGUgX2NiDQo+IA0KPiA+ICsgICAgICAgaWYg KG1nbXRmcmFtZSkgew0KPiA+ICsgICAgICAgICAgICAgICB1MTYgY2FwYWI7DQo+ID4gKw0KPiA+ ICsgICAgICAgICAgICAgICBpZiAodW5saWtlbHkoaWVlZTgwMjExX2lzX2FjdGlvbih3aC0+ZnJh bWVfY29udHJvbCkgJiYNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1nbXQtPnUu YWN0aW9uLmNhdGVnb3J5ID09DQo+IFdMQU5fQ0FURUdPUllfQkFDSyAmJg0KPiA+ICsNCj4gbWdt dC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuYWN0aW9uX2NvZGUgPT0NCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFdMQU5fQUNUSU9OX0FEREJBX1JFUSkpIHsNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICBjYXBhYiA9DQo+IGxlMTZfdG9fY3B1KG1nbXQtPnUuYWN0aW9uLnUuYWRk YmFfcmVxLmNhcGFiKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICB0aWQgPSAoY2FwYWIg Jg0KPiBJRUVFODAyMTFfQUREQkFfUEFSQU1fVElEX01BU0spID4+IDI7DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgaW5kZXggPSBtd2xfdHhfdGlkX3F1ZXVlX21hcHBpbmcodGlkKTsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICBjYXBhYiB8PSAxOw0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgIG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLmNhcGFiID0NCj4gY3B1X3RvX2xl MTYoY2FwYWIpOw0KPiA+ICsgICAgICAgICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgICAg ICAgICBpZiAodW5saWtlbHkoaWVlZTgwMjExX2lzX2FjdGlvbih3aC0+ZnJhbWVfY29udHJvbCkg JiYNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1nbXQtPnUuYWN0aW9uLmNhdGVn b3J5ID09DQo+IFdMQU5fQ0FURUdPUllfQkFDSyAmJg0KPiA+ICsNCj4gbWdtdC0+dS5hY3Rpb24u dS5hZGRiYV9yZXNwLmFjdGlvbl9jb2RlID09DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBXTEFOX0FDVElPTl9BRERCQV9SRVNQKSkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgIGNhcGFiID0NCj4gbGUxNl90b19jcHUobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLmNh cGFiKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBjYXBhYiB8PSAxOw0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgIG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcC5jYXBhYiA9DQo+ IGNwdV90b19sZTE2KGNhcGFiKTsNCj4gPiArICAgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAg fQ0KPiA+ICsNCj4gPiArICAgICAgIGluZGV4ID0gU1lTQURQVF9UWF9XTU1fUVVFVUVTIC0gaW5k ZXggLSAxOw0KPiA+ICsgICAgICAgdHhwcmlvcml0eSA9IGluZGV4Ow0KPiA+ICsNCj4gPiArICAg ICAgIGlmIChzdGEgJiYgc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkICYmICFlYXBvbF9mcmFtZSAm Jg0KPiA+ICsgICAgICAgICAgIGllZWU4MDIxMV9pc19kYXRhX3Fvcyh3aC0+ZnJhbWVfY29udHJv bCkpIHsNCj4gPiArICAgICAgICAgICAgICAgdGlkID0gcW9zICYgMHhmOw0KPiA+ICsgICAgICAg ICAgICAgICBtd2xfdHhfY291bnRfcGFja2V0KHN0YSwgdGlkKTsNCj4gPiArDQo+ID4gKyAgICAg ICAgICAgICAgIHNwaW5fbG9ja19iaCgmcHJpdi0+c3RyZWFtX2xvY2spOw0KPiA+ICsgICAgICAg ICAgICAgICBzdHJlYW0gPSBtd2xfZndjbWRfbG9va3VwX3N0cmVhbShodywgc3RhLT5hZGRyLCB0 aWQpOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgaWYgKHN0cmVhbSkgew0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0tPnN0YXRlID09IEFNUERVX1NUUkVBTV9BQ1RJ VkUpDQo+IHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChXQVJOX09O KCEocW9zICYNCj4gPiArDQo+IE1XTF9RT1NfQUNLX1BPTElDWV9CTE9DS0FDSykpKSB7DQo+ID4g Kw0KPiBzcGluX3VubG9ja19iaCgmcHJpdi0+c3RyZWFtX2xvY2spOw0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2FueShza2IpOw0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47DQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdHhwcmlvcml0eSA9DQo+ID4gKw0KPiAoU1lTQURQVF9UWF9XTU1f UVVFVUVTICsgc3RyZWFtLT5pZHgpICUNCj4gPiArDQo+IFNZU0FEUFRfVE9UQUxfSFdfUVVFVUVT Ow0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLT5zdGF0ZSA9 PQ0KPiBBTVBEVV9TVFJFQU1fTkVXKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBXZSBnZXQgaGVyZSBpZiB0aGUgZHJpdmVyIHNlbmRzIHVzDQo+IHBhY2tldHMNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGFmdGVyIHdlJ3ZlIGluaXRpYXRl ZCBhIHN0cmVhbSwgYnV0DQo+IGJlZm9yZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICogb3VyIGFtcGR1X2FjdGlvbiByb3V0aW5lIGhhcw0KPiBiZWVuIGNhbGxlZA0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogd2l0aA0KPiBJRUVFODAyMTFfQU1Q RFVfVFhfU1RBUlQgdG8gZ2V0IHRoZSBTU04NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqIGZvciB0aGUgQUREQkEgcmVxdWVzdC4gIFNvIHRoaXMNCj4gcGFja2V0IGNhbg0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZ28gb3V0IHdpdGggbm8gcmlz ayBvZiBzZXF1ZW5jZQ0KPiBudW1iZXINCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqIG1pc21hdGNoLiAgTm8gc3BlY2lhbCBoYW5kbGluZyBpcw0KPiByZXF1aXJlZC4NCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBEcm9wIHBhY2tldHMgdGhhdCB3b3VsZCBnbyBvdXQNCj4gYWZ0ZXIgdGhlDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBBRERCQSByZXF1ZXN0IHdhcyBzZW50IGJ1dA0K PiBiZWZvcmUgdGhlIEFEREJBDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KiByZXNwb25zZSBpcyByZWNlaXZlZC4gIElmIHdlIGRvbid0DQo+IGRvIHRoaXMsDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGUgcmVjaXBpZW50IHdvdWxkIHByb2Jh Ymx5DQo+IHJlY2VpdmUgaXQNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq IGFmdGVyIHRoZSBBRERCQSByZXF1ZXN0IHdpdGggU1NODQo+IDAuICBUaGlzDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB3aWxsIGNhdXNlIHRoZSByZWNpcGllbnQncyBC QQ0KPiByZWNlaXZlIHdpbmRvdw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICogdG8gc2hpZnQsIHdoaWNoIHdvdWxkIGNhdXNlIHRoZQ0KPiBzdWJzZXF1ZW50DQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBwYWNrZXRzIGluIHRoZSBCQSBzdHJlYW0g dG8gYmUNCj4gZGlzY2FyZGVkLg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICogbWFjODAyMTEgcXVldWVzIG91ciBwYWNrZXRzIGZvcg0KPiB1cyBpbiB0aGlzDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBjYXNlLCBzbyB0aGlzIGlzIHJlYWxseSBq dXN0IGEgc2FmZXR5DQo+IGNoZWNrLg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICovDQo+IA0KPiBXZWxsLi4uIEkgdGhpbmsgeW91IGNhbiByZWFsbHkgYXZvaWQgdGhhdC4N Cg0KQU1QRFUgcmVsYXRlZCBjb2RlIHdpbGwgYmUgY2hlY2tlZCBiYXNlZCBvbiB5b3VyIHN1Z2dl c3Rpb25zIGxhdGVyLg0K