From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-eopbgr50058.outbound.protection.outlook.com ([40.107.5.58]:36783 "EHLO EUR03-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751632AbeCVWdy (ORCPT ); Thu, 22 Mar 2018 18:33:54 -0400 From: Saeed Mahameed To: "ktkhai@virtuozzo.com" , "davem@davemloft.net" CC: "netdev@vger.kernel.org" , "davejwatson@fb.com" , Boris Pismenny , Aviad Yehezkel , Ilya Lesokhin Subject: Re: [PATCH V2 net-next 06/14] net/tls: Add generic NIC offload infrastructure Date: Thu, 22 Mar 2018 22:33:44 +0000 Message-ID: <1521758021.8756.70.camel@mellanox.com> References: <20180321210146.22537-1-saeedm@mellanox.com> <20180321210146.22537-7-saeedm@mellanox.com> <123d0772-d469-d20d-7a4a-a27f1371bbcf@virtuozzo.com> In-Reply-To: <123d0772-d469-d20d-7a4a-a27f1371bbcf@virtuozzo.com> Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org List-ID: T24gVGh1LCAyMDE4LTAzLTIyIGF0IDAxOjI3ICswMzAwLCBLaXJpbGwgVGtoYWkgd3JvdGU6DQo+ IEhpLCBTYWVlZCwNCj4gDQo+IHRoYW5rcyBmb3IgZml4aW5nIHNvbWUgb2YgbXkgcmVtYXJrcywg YnV0IEkndmUgZGl2ZWQgaW50byB0aGUgY29kZQ0KPiBtb3JlIGRlZXBseSwgYW5kIGZvdW5kIHdp dGggYSBzYWRuZXNzLCB0aGUgcGF0Y2ggbGFja3MgdGhlDQo+IHJlYWRhYmlsaXR5Lg0KPiANCj4g SXQgdG9vIGJpZyBhbmQgbm90IGZpdCBrZXJuZWwgY29kaW5nIHN0eWxlLiBQbGVhc2UsIHNlZSBz b21lIGNvbW1lbnRzDQo+IGJlbG93Lg0KPiANCg0KSGkgS2lyaWxsLA0KDQpJIGRvbid0IHNlZSBh bnkgcmVhc29uIGZvciB0aGlzLCB0aGVyZSBhcmUgdHdvIG1ham9yIGZpbGVzLCB0aGV5IGFyZQ0K bm90IHRoYXQgYmlnIGFuZCB0aGUgY29kZSBpcyByZWFsbHkgc3RyYWlnaHQgZm9yd2FyZC4NCg0K bmV0L3Rscy90bHNfZGV2aWNlLmMgKHRscyBuZXRkZXZpY2Ugb2ZmbG9hZCkNCm5ldC90bHMvdGxz X2RldmljZV9mYWxsYmFjay5jICAodGxzIHNvZnR3YXJlIG9mZmxvYWQpDQoNCnRoZXkgYXJlIG5p Y2VseSBkZWNvdXBsZWQgYW5kIGFuZCB5b3UgY2FuIHJldmlldyBlYWNoIGZpbGUgc2VwYXJhdGVs eS4NCg0KSXMgaXQgcmVhbGx5IGJvdGhlcmluZyB5b3UgdGhhdCBtdWNoID8NCg0KDQpBbnl3YXkg SSB3aWxsIHN1Ym1pdCB2MyB3aXRoIHRoZSBmaXhlcyAoZnJvbSBCb3Jpcykgb2YgdGhlIGJlbG93 DQpjb21tZW50cy4NCg0KPiBDYW4gd2UgZG8gc29tZXRoaW5nIHdpdGggcGF0Y2ggbGVuZ3RoPyBJ cyB0aGVyZSBhIHdheSB0byBzcGxpdCBpdCBpbg0KPiBzZXZlcmFsIHNtYWxsIHBhdGNoZXM/IEl0 J3MgZGlmZmljdWx0IHRvIHJldmlldyB0aGUgbG9naWMgb2YgY2hhbmdlcy4NCj4gDQo+IE9uIDIy LjAzLjIwMTggMDA6MDEsIFNhZWVkIE1haGFtZWVkIHdyb3RlOg0KPiA+IEZyb206IElseWEgTGVz b2toaW4gPGlseWFsQG1lbGxhbm94LmNvbT4NCj4gPiANCj4gPiBUaGlzIHBhdGNoIGFkZHMgYSBn ZW5lcmljIGluZnJhc3RydWN0dXJlIHRvIG9mZmxvYWQgVExTIGNyeXB0byB0byBhDQo+ID4gbmV0 d29yayBkZXZpY2VzLiBJdCBlbmFibGVzIHRoZSBrZXJuZWwgVExTIHNvY2tldCB0byBza2lwDQo+ ID4gZW5jcnlwdGlvbg0KPiA+IGFuZCBhdXRoZW50aWNhdGlvbiBvcGVyYXRpb25zIG9uIHRoZSB0 cmFuc21pdCBzaWRlIG9mIHRoZSBkYXRhDQo+ID4gcGF0aC4NCj4gPiBMZWF2aW5nIHRob3NlIGNv bXB1dGF0aW9uYWxseSBleHBlbnNpdmUgb3BlcmF0aW9ucyB0byB0aGUgTklDLg0KPiA+IA0KPiA+ IFRoZSBOSUMgb2ZmbG9hZCBpbmZyYXN0cnVjdHVyZSBidWlsZHMgVExTIHJlY29yZHMgYW5kIHB1 c2hlcyB0aGVtDQo+ID4gdG8NCj4gPiB0aGUgVENQIGxheWVyIGp1c3QgbGlrZSB0aGUgU1cgS1RM UyBpbXBsZW1lbnRhdGlvbiBhbmQgdXNpbmcgdGhlDQo+ID4gc2FtZSBBUEkuDQo+ID4gVENQIHNl Z21lbnRhdGlvbiBpcyBtb3N0bHkgdW5hZmZlY3RlZC4gQ3VycmVudGx5IHRoZSBvbmx5IGV4Y2Vw dGlvbg0KPiA+IGlzDQo+ID4gdGhhdCB3ZSBwcmV2ZW50IG1peGVkIFNLQnMgd2hlcmUgb25seSBw YXJ0IG9mIHRoZSBwYXlsb2FkIHJlcXVpcmVzDQo+ID4gb2ZmbG9hZC4gSW4gdGhlIGZ1dHVyZSB3 ZSBhcmUgbGlrZWx5IHRvIGFkZCBhIHNpbWlsYXIgcmVzdHJpY3Rpb24NCj4gPiBmb2xsb3dpbmcg YSBjaGFuZ2UgY2lwaGVyIHNwZWMgcmVjb3JkLg0KPiA+IA0KPiA+IFRoZSBub3RhYmxlIGRpZmZl cmVuY2VzIGJldHdlZW4gU1cgS1RMUyBhbmQgTklDIG9mZmxvYWRlZCBUTFMNCj4gPiBpbXBsZW1l bnRhdGlvbnMgYXJlIGFzIGZvbGxvd3M6DQo+ID4gMS4gVGhlIG9mZmxvYWRlZCBpbXBsZW1lbnRh dGlvbiBidWlsZHMgInBsYWludGV4dCBUTFMgcmVjb3JkIiwNCj4gPiB0aG9zZQ0KPiA+IHJlY29y ZHMgY29udGFpbiBwbGFpbnRleHQgaW5zdGVhZCBvZiBjaXBoZXJ0ZXh0IGFuZCBwbGFjZSBob2xk ZXINCj4gPiBieXRlcw0KPiA+IGluc3RlYWQgb2YgYXV0aGVudGljYXRpb24gdGFncy4NCj4gPiAy LiBUaGUgb2ZmbG9hZGVkIGltcGxlbWVudGF0aW9uIG1haW50YWlucyBhIG1hcHBpbmcgZnJvbSBU Q1ANCj4gPiBzZXF1ZW5jZQ0KPiA+IG51bWJlciB0byBUTFMgcmVjb3Jkcy4gVGh1cyBnaXZlbiBh IFRDUCBTS0Igc2VudCBmcm9tIGEgTklDDQo+ID4gb2ZmbG9hZGVkDQo+ID4gVExTIHNvY2tldCwg d2UgY2FuIHVzZSB0aGUgdGxzIE5JQyBvZmZsb2FkIGluZnJhc3RydWN0dXJlIHRvIG9idGFpbg0K PiA+IGVub3VnaCBjb250ZXh0IHRvIGVuY3J5cHQgdGhlIHBheWxvYWQgb2YgdGhlIFNLQi4NCj4g PiBBIFRMUyByZWNvcmQgaXMgcmVsZWFzZWQgd2hlbiB0aGUgbGFzdCBieXRlIG9mIHRoZSByZWNv cmQgaXMNCj4gPiBhY2snZWQsDQo+ID4gdGhpcyBpcyBkb25lIHRocm91Z2ggdGhlIG5ldyBpY3Nr X2NsZWFuX2Fja2VkIGNhbGxiYWNrLg0KPiA+IA0KPiA+IFRoZSBpbmZyYXN0cnVjdHVyZSBzaG91 bGQgYmUgZXh0ZW5kYWJsZSB0byBzdXBwb3J0IHZhcmlvdXMgTklDDQo+ID4gb2ZmbG9hZA0KPiA+ IGltcGxlbWVudGF0aW9ucy4gIEhvd2V2ZXIgaXQgaXMgY3VycmVudGx5IHdyaXR0ZW4gd2l0aCB0 aGUNCj4gPiBpbXBsZW1lbnRhdGlvbiBiZWxvdyBpbiBtaW5kOg0KPiA+IFRoZSBOSUMgYXNzdW1l cyB0aGF0IHBhY2tldHMgZnJvbSBlYWNoIG9mZmxvYWRlZCBzdHJlYW0gYXJlIHNlbnQgYXMNCj4g PiBwbGFpbnRleHQgYW5kIGluLW9yZGVyLiBJdCBrZWVwcyB0cmFjayBvZiB0aGUgVExTIHJlY29y ZHMgaW4gdGhlDQo+ID4gVENQDQo+ID4gc3RyZWFtLiBXaGVuIGEgcGFja2V0IG1hcmtlZCBmb3Ig b2ZmbG9hZCBpcyB0cmFuc21pdHRlZCwgdGhlIE5JQw0KPiA+IGVuY3J5cHRzIHRoZSBwYXlsb2Fk IGluLXBsYWNlIGFuZCBwdXRzIGF1dGhlbnRpY2F0aW9uIHRhZ3MgaW4gdGhlDQo+ID4gcmVsZXZh bnQgcGxhY2UgaG9sZGVycy4NCj4gPiANCj4gPiBUaGUgcmVzcG9uc2liaWxpdHkgZm9yIGhhbmRs aW5nIG91dC1vZi1vcmRlciBwYWNrZXRzIChpLmUuIFRDUA0KPiA+IHJldHJhbnNtaXNzaW9uLCBx ZGlzYyBkcm9wcykgZmFsbHMgb24gdGhlIG5ldGRldiBkcml2ZXIuDQo+ID4gDQo+ID4gVGhlIG5l dGRldiBkcml2ZXIga2VlcHMgdHJhY2sgb2YgdGhlIGV4cGVjdGVkIFRDUCBTTiBmcm9tIHRoZSBO SUMncw0KPiA+IHBlcnNwZWN0aXZlLiAgSWYgdGhlIG5leHQgcGFja2V0IHRvIHRyYW5zbWl0IG1h dGNoZXMgdGhlIGV4cGVjdGVkDQo+ID4gVENQDQo+ID4gU04sIHRoZSBkcml2ZXIgYWR2YW5jZXMg dGhlIGV4cGVjdGVkIFRDUCBTTiwgYW5kIHRyYW5zbWl0cyB0aGUNCj4gPiBwYWNrZXQNCj4gPiB3 aXRoIFRMUyBvZmZsb2FkIGluZGljYXRpb24uDQo+ID4gDQo+ID4gSWYgdGhlIG5leHQgcGFja2V0 IHRvIHRyYW5zbWl0IGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBUQ1AgU04uDQo+ID4gVGhl DQo+ID4gZHJpdmVyIGNhbGxzIHRoZSBUTFMgbGF5ZXIgdG8gb2J0YWluIHRoZSBUTFMgcmVjb3Jk IHRoYXQgaW5jbHVkZXMNCj4gPiB0aGUNCj4gPiBUQ1Agb2YgdGhlIHBhY2tldCBmb3IgdHJhbnNt aXNzaW9uLiBVc2luZyB0aGlzIFRMUyByZWNvcmQsIHRoZQ0KPiA+IGRyaXZlcg0KPiA+IHBvc3Rz IGEgd29yayBlbnRyeSBvbiB0aGUgdHJhbnNtaXQgcXVldWUgdG8gcmVjb25zdHJ1Y3QgdGhlIE5J QyBUTFMNCj4gPiBzdGF0ZSByZXF1aXJlZCBmb3IgdGhlIG9mZmxvYWQgb2YgdGhlIG91dC1vZi1v cmRlciBwYWNrZXQuIEl0DQo+ID4gdXBkYXRlcw0KPiA+IHRoZSBleHBlY3RlZCBUQ1AgU04gYWNj b3JkaW5nbHkgYW5kIHRyYW5zbWl0IHRoZSBub3cgaW4tb3JkZXINCj4gPiBwYWNrZXQuDQo+ID4g VGhlIHNhbWUgcXVldWUgaXMgdXNlZCBmb3IgcGFja2V0IHRyYW5zbWlzc2lvbiBhbmQgVExTIGNv bnRleHQNCj4gPiByZWNvbnN0cnVjdGlvbiB0byBhdm9pZCB0aGUgbmVlZCBmb3IgZmx1c2hpbmcg dGhlIHRyYW5zbWl0IHF1ZXVlDQo+ID4gYmVmb3JlDQo+ID4gaXNzdWluZyB0aGUgY29udGV4dCBy ZWNvbnN0cnVjdGlvbiByZXF1ZXN0Lg0KPiA+IA0KPiA+IFNpZ25lZC1vZmYtYnk6IElseWEgTGVz b2toaW4gPGlseWFsQG1lbGxhbm94LmNvbT4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBCb3JpcyBQaXNt ZW5ueSA8Ym9yaXNwQG1lbGxhbm94LmNvbT4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBBdmlhZCBZZWhl emtlbCA8YXZpYWR5ZUBtZWxsYW5veC5jb20+DQo+ID4gU2lnbmVkLW9mZi1ieTogU2FlZWQgTWFo YW1lZWQgPHNhZWVkbUBtZWxsYW5veC5jb20+DQo+ID4gLS0tDQo+ID4gIGluY2x1ZGUvbmV0L3Rs cy5oICAgICAgICAgICAgIHwgIDc0ICsrKy0NCj4gPiAgbmV0L3Rscy9LY29uZmlnICAgICAgICAg ICAgICAgfCAgMTAgKw0KPiA+ICBuZXQvdGxzL01ha2VmaWxlICAgICAgICAgICAgICB8ICAgMiAr DQo+ID4gIG5ldC90bHMvdGxzX2RldmljZS5jICAgICAgICAgIHwgNzkzDQo+ID4gKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ID4gIG5ldC90bHMvdGxzX2Rldmlj ZV9mYWxsYmFjay5jIHwgNDE1ICsrKysrKysrKysrKysrKysrKysrKysNCj4gPiAgbmV0L3Rscy90 bHNfbWFpbi5jICAgICAgICAgICAgfCAgMzMgKy0NCj4gPiAgNiBmaWxlcyBjaGFuZ2VkLCAxMzIw IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBu ZXQvdGxzL3Rsc19kZXZpY2UuYw0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbmV0L3Rscy90bHNf ZGV2aWNlX2ZhbGxiYWNrLmMNCj4gPiANCj4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGxz LmggYi9pbmNsdWRlL25ldC90bHMuaA0KPiA+IGluZGV4IDQ5MTM0MzBhYjgwNy4uMGJmYjFiMGEx NTZhIDEwMDY0NA0KPiA+IC0tLSBhL2luY2x1ZGUvbmV0L3Rscy5oDQo+ID4gKysrIGIvaW5jbHVk ZS9uZXQvdGxzLmgNCj4gPiBAQCAtNzcsNiArNzcsMzcgQEAgc3RydWN0IHRsc19zd19jb250ZXh0 IHsNCj4gPiAgCXN0cnVjdCBzY2F0dGVybGlzdCBzZ19hZWFkX291dFsyXTsNCj4gPiAgfTsNCj4g PiAgDQo+ID4gK3N0cnVjdCB0bHNfcmVjb3JkX2luZm8gew0KPiA+ICsJc3RydWN0IGxpc3RfaGVh ZCBsaXN0Ow0KPiA+ICsJdTMyIGVuZF9zZXE7DQo+ID4gKwlpbnQgbGVuOw0KPiA+ICsJaW50IG51 bV9mcmFnczsNCj4gPiArCXNrYl9mcmFnX3QgZnJhZ3NbTUFYX1NLQl9GUkFHU107DQo+ID4gK307 DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dCB7DQo+ID4gKwlzdHJ1Y3Qg Y3J5cHRvX2FlYWQgKmFlYWRfc2VuZDsNCj4gPiArCXNwaW5sb2NrX3QgbG9jazsJLyogcHJvdGVj dHMgcmVjb3JkcyBsaXN0ICovDQo+ID4gKwlzdHJ1Y3QgbGlzdF9oZWFkIHJlY29yZHNfbGlzdDsN Cj4gPiArCXN0cnVjdCB0bHNfcmVjb3JkX2luZm8gKm9wZW5fcmVjb3JkOw0KPiA+ICsJc3RydWN0 IHRsc19yZWNvcmRfaW5mbyAqcmV0cmFuc21pdF9oaW50Ow0KPiA+ICsJdTY0IGhpbnRfcmVjb3Jk X3NuOw0KPiA+ICsJdTY0IHVuYWNrZWRfcmVjb3JkX3NuOw0KPiA+ICsNCj4gPiArCXN0cnVjdCBz Y2F0dGVybGlzdCBzZ190eF9kYXRhW01BWF9TS0JfRlJBR1NdOw0KPiA+ICsJdm9pZCAoKnNrX2Rl c3RydWN0KShzdHJ1Y3Qgc29jayAqc2spOw0KPiA+ICsJdTggZHJpdmVyX3N0YXRlW107DQo+ID4g KwkvKiBUaGUgVExTIGxheWVyIHJlc2VydmVzIHJvb20gZm9yIGRyaXZlciBzcGVjaWZpYyBzdGF0 ZQ0KPiA+ICsJICogQ3VycmVudGx5IHRoZSBiZWxpZWYgaXMgdGhhdCB0aGVyZSBpcyBub3QgZW5v dWdoDQo+ID4gKwkgKiBkcml2ZXIgc3BlY2lmaWMgc3RhdGUgdG8ganVzdGlmeSBhbm90aGVyIGxh eWVyIG9mDQo+ID4gaW5kaXJlY3Rpb24NCj4gPiArCSAqLw0KPiA+ICsjZGVmaW5lIFRMU19EUklW RVJfU1RBVEVfU0laRSAobWF4X3Qoc2l6ZV90LCA4LCBzaXplb2Yodm9pZCAqKSkpDQo+ID4gK307 DQo+ID4gKw0KPiA+ICsjZGVmaW5lDQo+ID4gVExTX09GRkxPQURfQ09OVEVYVF9TSVpFICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KPiA+ICAgICBcDQo+ID4gKwko QUxJR04oc2l6ZW9mKHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0KSwgc2l6ZW9mKHZvaWQgKikp DQo+ID4gKyAgICAgICAgICAgXA0KPiA+ICsJIFRMU19EUklWRVJfU1RBVEVfU0laRSkNCj4gPiAr DQo+ID4gIGVudW0gew0KPiA+ICAJVExTX1BFTkRJTkdfQ0xPU0VEX1JFQ09SRA0KPiA+ICB9Ow0K PiA+IEBAIC04Nyw2ICsxMTgsMTAgQEAgc3RydWN0IHRsc19jb250ZXh0IHsNCj4gPiAgCQlzdHJ1 Y3QgdGxzMTJfY3J5cHRvX2luZm9fYWVzX2djbV8xMjgNCj4gPiBjcnlwdG9fc2VuZF9hZXNfZ2Nt XzEyODsNCj4gPiAgCX07DQo+ID4gIA0KPiA+ICsJc3RydWN0IGxpc3RfaGVhZCBsaXN0Ow0KPiA+ ICsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsNCj4gPiArCXJlZmNvdW50X3QgcmVmY291bnQ7 DQo+ID4gKw0KPiA+ICAJdm9pZCAqcHJpdl9jdHg7DQo+ID4gIA0KPiA+ICAJdTggdHhfY29uZjoy Ow0KPiA+IEBAIC0xMzEsOSArMTY2LDI5IEBAIGludCB0bHNfc3dfc2VuZHBhZ2Uoc3RydWN0IHNv Y2sgKnNrLCBzdHJ1Y3QNCj4gPiBwYWdlICpwYWdlLA0KPiA+ICB2b2lkIHRsc19zd19jbG9zZShz dHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dCk7DQo+ID4gIHZvaWQgdGxzX3N3X2ZyZWVfdHhf cmVzb3VyY2VzKHN0cnVjdCBzb2NrICpzayk7DQo+ID4gIA0KPiA+IC12b2lkIHRsc19za19kZXN0 cnVjdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfY29udGV4dCAqY3R4KTsNCj4gPiAtdm9p ZCB0bHNfaWNza19jbGVhbl9hY2tlZChzdHJ1Y3Qgc29jayAqc2spOw0KPiA+ICt2b2lkIHRsc19j bGVhcl9kZXZpY2Vfb2ZmbG9hZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfY29udGV4dA0K PiA+ICpjdHgpOw0KPiA+ICtpbnQgdGxzX3NldF9kZXZpY2Vfb2ZmbG9hZChzdHJ1Y3Qgc29jayAq c2ssIHN0cnVjdCB0bHNfY29udGV4dA0KPiA+ICpjdHgpOw0KPiA+ICtpbnQgdGxzX2RldmljZV9z ZW5kbXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QNCj4gPiBz aXplKTsNCj4gPiAraW50IHRsc19kZXZpY2Vfc2VuZHBhZ2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1 Y3QgcGFnZSAqcGFnZSwNCj4gPiArCQkJaW50IG9mZnNldCwgc2l6ZV90IHNpemUsIGludCBmbGFn cyk7DQo+ID4gK3ZvaWQgdGxzX2RldmljZV9za19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spOw0K PiA+ICt2b2lkIHRsc19kZXZpY2VfaW5pdCh2b2lkKTsNCj4gPiArdm9pZCB0bHNfZGV2aWNlX2Ns ZWFudXAodm9pZCk7DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvICp0bHNfZ2V0 X3JlY29yZChzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dA0KPiA+ICpjb250ZXh0LA0KPiA+ICsJ CQkJICAgICAgIHUzMiBzZXEsIHU2NCAqcF9yZWNvcmRfc24pOw0KPiA+ICsNCj4gPiArc3RhdGlj IGlubGluZSBib29sIHRsc19yZWNvcmRfaXNfc3RhcnRfbWFya2VyKHN0cnVjdA0KPiA+IHRsc19y ZWNvcmRfaW5mbyAqcmVjKQ0KPiA+ICt7DQo+ID4gKwlyZXR1cm4gcmVjLT5sZW4gPT0gMDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSB1MzIgdGxzX3JlY29yZF9zdGFydF9zZXEo c3RydWN0IHRsc19yZWNvcmRfaW5mbw0KPiA+ICpyZWMpDQo+ID4gK3sNCj4gPiArCXJldHVybiBy ZWMtPmVuZF9zZXEgLSByZWMtPmxlbjsNCj4gPiArfQ0KPiA+ICANCj4gPiArdm9pZCB0bHNfc2tf ZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCk7DQo+ID4g IGludCB0bHNfcHVzaF9zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfY29udGV4dCAqY3R4 LA0KPiA+ICAJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHUxNiBmaXJzdF9vZmZzZXQsDQo+ID4g IAkJaW50IGZsYWdzKTsNCj4gPiBAQCAtMTcwLDYgKzIyNSwxMyBAQCBzdGF0aWMgaW5saW5lIGJv b2wNCj4gPiB0bHNfaXNfcGVuZGluZ19vcGVuX3JlY29yZChzdHJ1Y3QgdGxzX2NvbnRleHQgKnRs c19jdHgpDQo+ID4gIAlyZXR1cm4gdGxzX2N0eC0+cGVuZGluZ19vcGVuX3JlY29yZF9mcmFnczsN Cj4gPiAgfQ0KPiA+ICANCj4gPiArc3RhdGljIGlubGluZSBib29sIHRsc19pc19za190eF9kZXZp Y2Vfb2ZmbG9hZGVkKHN0cnVjdCBzb2NrICpzaykNCj4gPiArew0KPiA+ICsJcmV0dXJuIHNrX2Z1 bGxzb2NrKHNrKSAmJg0KPiA+ICsJICAgICAgIC8qIG1hdGNoZXMgc21wX3N0b3JlX3JlbGVhc2Ug aW4NCj4gPiB0bHNfc2V0X2RldmljZV9vZmZsb2FkICovDQo+ID4gKwkgICAgICAgc21wX2xvYWRf YWNxdWlyZSgmc2stPnNrX2Rlc3RydWN0KSA9PQ0KPiA+ICZ0bHNfZGV2aWNlX3NrX2Rlc3RydWN0 Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICBzdGF0aWMgaW5saW5lIHZvaWQgdGxzX2Vycl9hYm9ydChz dHJ1Y3Qgc29jayAqc2spDQo+ID4gIHsNCj4gPiAgCXNrLT5za19lcnIgPSBFQkFETVNHOw0KPiA+ IEBAIC0yNTcsNCArMzE5LDEyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRsc19vZmZsb2FkX2Nv bnRleHQNCj4gPiAqdGxzX29mZmxvYWRfY3R4KA0KPiA+ICBpbnQgdGxzX3Byb2NjZXNzX2Ntc2co c3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csDQo+ID4gIAkJICAgICAgdW5zaWdu ZWQgY2hhciAqcmVjb3JkX3R5cGUpOw0KPiA+ICANCj4gPiArc3RydWN0IHNrX2J1ZmYgKnRsc192 YWxpZGF0ZV94bWl0X3NrYihzdHJ1Y3Qgc29jayAqc2ssDQo+ID4gKwkJCQkgICAgICBzdHJ1Y3Qg bmV0X2RldmljZSAqZGV2LA0KPiA+ICsJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7DQo+ ID4gKw0KPiA+ICtpbnQgdGxzX3N3X2ZhbGxiYWNrX2luaXQoc3RydWN0IHNvY2sgKnNrLA0KPiA+ ICsJCQkgc3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHQgKm9mZmxvYWRfY3R4LA0KPiA+ICsJCQkg c3RydWN0IHRsc19jcnlwdG9faW5mbyAqY3J5cHRvX2luZm8pOw0KPiA+ICsNCj4gPiAgI2VuZGlm IC8qIF9UTFNfT0ZGTE9BRF9IICovDQo+ID4gZGlmZiAtLWdpdCBhL25ldC90bHMvS2NvbmZpZyBi L25ldC90bHMvS2NvbmZpZw0KPiA+IGluZGV4IGViNTgzMDM4YzY3ZS4uOWQzZWY4MjBiYjE2IDEw MDY0NA0KPiA+IC0tLSBhL25ldC90bHMvS2NvbmZpZw0KPiA+ICsrKyBiL25ldC90bHMvS2NvbmZp Zw0KPiA+IEBAIC0xMywzICsxMywxMyBAQCBjb25maWcgVExTDQo+ID4gIAllbmNyeXB0aW9uIGhh bmRsaW5nIG9mIHRoZSBUTFMgcHJvdG9jb2wgdG8gYmUgZG9uZSBpbi0NCj4gPiBrZXJuZWwuDQo+ ID4gIA0KPiA+ICAJSWYgdW5zdXJlLCBzYXkgTi4NCj4gPiArDQo+ID4gK2NvbmZpZyBUTFNfREVW SUNFDQo+ID4gKwlib29sICJUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgSFcgb2ZmbG9hZCINCj4g PiArCWRlcGVuZHMgb24gVExTDQo+ID4gKwlzZWxlY3QgU09DS19WQUxJREFURV9YTUlUDQo+ID4g KwlkZWZhdWx0IG4NCj4gPiArCS0tLWhlbHAtLS0NCj4gPiArCUVuYWJsZSBrZXJuZWwgc3VwcG9y dCBmb3IgSFcgb2ZmbG9hZCBvZiB0aGUgVExTIHByb3RvY29sLg0KPiA+ICsNCj4gPiArCUlmIHVu c3VyZSwgc2F5IE4uDQo+ID4gZGlmZiAtLWdpdCBhL25ldC90bHMvTWFrZWZpbGUgYi9uZXQvdGxz L01ha2VmaWxlDQo+ID4gaW5kZXggYTkzMGZkMWM0ZjdiLi40ZDZiNzI4YTY3ZDAgMTAwNjQ0DQo+ ID4gLS0tIGEvbmV0L3Rscy9NYWtlZmlsZQ0KPiA+ICsrKyBiL25ldC90bHMvTWFrZWZpbGUNCj4g PiBAQCAtNSwzICs1LDUgQEANCj4gPiAgb2JqLSQoQ09ORklHX1RMUykgKz0gdGxzLm8NCj4gPiAg DQo+ID4gIHRscy15IDo9IHRsc19tYWluLm8gdGxzX3N3Lm8NCj4gPiArDQo+ID4gK3Rscy0kKENP TkZJR19UTFNfREVWSUNFKSArPSB0bHNfZGV2aWNlLm8gdGxzX2RldmljZV9mYWxsYmFjay5vDQo+ ID4gZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX2RldmljZS5jIGIvbmV0L3Rscy90bHNfZGV2aWNl LmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uZTYy MzI4MGVhMDE5DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL25ldC90bHMvdGxzX2Rldmlj ZS5jDQo+ID4gQEAgLTAsMCArMSw3OTMgQEANCj4gPiArLyogQ29weXJpZ2h0IChjKSAyMDE4LCBN ZWxsYW5veCBUZWNobm9sb2dpZXMgQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gPiArICoNCj4gPiAr ICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9u ZSBvZiB0d28NCj4gPiArICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNl ZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlDQo+ID4gR05VDQo+ID4gKyAqIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQ0KPiA+ICsg KiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0 aGUNCj4gPiArICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoNCj4gPiArICoNCj4gPiAr ICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs IHdpdGggb3INCj4gPiArICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlDQo+ID4gZm9sbG93aW5nDQo+ID4gKyAqICAgICBjb25kaXRpb25z IGFyZSBtZXQ6DQo+ID4gKyAqDQo+ID4gKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291 cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlDQo+ID4gKyAqICAgICAgICBjb3B5cmlnaHQg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlDQo+ID4gZm9sbG93aW5nDQo+ ID4gKyAqICAgICAgICBkaXNjbGFpbWVyLg0KPiA+ICsgKg0KPiA+ICsgKiAgICAgIC0gUmVkaXN0 cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQ0KPiA+ICsg KiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZQ0KPiA+IGZvbGxvd2luZw0KPiA+ICsgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1l bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzDQo+ID4gKyAqICAgICAgICBwcm92aWRlZCB3 aXRoIHRoZSBkaXN0cmlidXRpb24uDQo+ID4gKyAqDQo+ID4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELA0KPiA+ICsgKiBF WFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB TlRJRVMNCj4gPiBPRg0KPiA+ICsgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFIEFORA0KPiA+ICsgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVA0KPiA+IEhPTERFUlMNCj4gPiArICogQkUg TElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVS IElODQo+ID4gQU4NCj4gPiArICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lT RSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1INCj4gPiBJTg0KPiA+ICsgKiBDT05ORUNUSU9OIFdJ VEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4NCj4gPiBUSEUN Cj4gPiArICogU09GVFdBUkUuDQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPGxpbnV4 L21vZHVsZS5oPg0KPiA+ICsjaW5jbHVkZSA8bmV0L3RjcC5oPg0KPiA+ICsjaW5jbHVkZSA8bmV0 L2luZXRfY29tbW9uLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+DQo+ID4gKyNp bmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxuZXQvdGxz Lmg+DQo+ID4gKyNpbmNsdWRlIDxjcnlwdG8vYWVhZC5oPg0KPiA+ICsNCj4gPiArLyogZGV2aWNl X29mZmxvYWRfbG9jayBpcyB1c2VkIHRvIHN5bmNocm9uaXplIHRsc19kZXZfYWRkDQo+ID4gKyAq IGFnYWluc3QgTkVUREVWX0RPV04gbm90aWZpY2F0aW9ucy4NCj4gPiArICovDQo+ID4gK3N0YXRp YyBERUNMQVJFX1JXU0VNKGRldmljZV9vZmZsb2FkX2xvY2spOw0KPiA+ICsNCj4gPiArc3RhdGlj IHZvaWQgdGxzX2RldmljZV9nY190YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7DQo+ID4g Kw0KPiA+ICtzdGF0aWMgREVDTEFSRV9XT1JLKHRsc19kZXZpY2VfZ2Nfd29yaywgdGxzX2Rldmlj ZV9nY190YXNrKTsNCj4gPiArc3RhdGljIExJU1RfSEVBRCh0bHNfZGV2aWNlX2djX2xpc3QpOw0K PiA+ICtzdGF0aWMgTElTVF9IRUFEKHRsc19kZXZpY2VfbGlzdCk7DQo+ID4gK3N0YXRpYyBERUZJ TkVfU1BJTkxPQ0sodGxzX2RldmljZV9sb2NrKTsNCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHRs c19kZXZpY2VfZnJlZV9jdHgoc3RydWN0IHRsc19jb250ZXh0ICpjdHgpDQo+ID4gK3sNCj4gPiAr CXN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0ICpvZmZsYWRfY3R4ID0NCj4gPiB0bHNfb2ZmbG9h ZF9jdHgoY3R4KTsNCj4gPiArDQo+ID4gKwlrZnJlZShvZmZsYWRfY3R4KTsNCj4gPiArCWtmcmVl KGN0eCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHRsc19kZXZpY2VfZ2NfdGFz ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQo+ID4gK3sNCj4gPiArCXN0cnVjdCB0bHNfY29u dGV4dCAqY3R4LCAqdG1wOw0KPiA+ICsJc3RydWN0IGxpc3RfaGVhZCBnY19saXN0Ow0KPiA+ICsJ dW5zaWduZWQgbG9uZyBmbGFnczsNCj4gPiArDQo+ID4gKwlJTklUX0xJU1RfSEVBRCgmZ2NfbGlz dCk7DQo+IA0KPiBZb3Ugc2hvdWxkIGp1c3QgZGVjbGFyZSB0aGUgbGlzdCBhcw0KPiANCj4gTElT VF9IRUFEKGdjX2xpc3QpOw0KPiANCj4gSSd2ZSBhbHJlYWR5IHBvaW50ZWQgdGhpcyBpbiBjb21t ZW50YXJ5IHRvIHYxLg0KPiANCj4gPiArDQo+ID4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGxzX2Rl dmljZV9sb2NrLCBmbGFncyk7DQo+ID4gKwlsaXN0X3NwbGljZV9pbml0KCZ0bHNfZGV2aWNlX2dj X2xpc3QsICZnY19saXN0KTsNCj4gPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRsc19kZXZp Y2VfbG9jaywgZmxhZ3MpOw0KPiA+ICsNCj4gPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShj dHgsIHRtcCwgJmdjX2xpc3QsIGxpc3QpIHsNCj4gPiArCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0 ZGV2ID0gY3R4LT5uZXRkZXY7DQo+ID4gKw0KPiA+ICsJCWlmIChuZXRkZXYpIHsNCj4gPiArCQkJ bmV0ZGV2LT50bHNkZXZfb3BzLT50bHNfZGV2X2RlbChuZXRkZXYsDQo+ID4gY3R4LA0KPiA+ICsJ CQkJCQkJVExTX09GRkxPQQ0KPiA+IERfQ1RYX0RJUl9UWCk7DQo+ID4gKwkJCWRldl9wdXQobmV0 ZGV2KTsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCWxpc3RfZGVsKCZjdHgtPmxpc3QpOw0KPiA+ ICsJCXRsc19kZXZpY2VfZnJlZV9jdHgoY3R4KTsNCj4gPiArCX0NCj4gPiArfQ0KPiA+ICsNCj4g PiArc3RhdGljIHZvaWQgdGxzX2RldmljZV9xdWV1ZV9jdHhfZGVzdHJ1Y3Rpb24oc3RydWN0IHRs c19jb250ZXh0DQo+ID4gKmN0eCkNCj4gPiArew0KPiA+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsN Cj4gPiArDQo+ID4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGxzX2RldmljZV9sb2NrLCBmbGFncyk7 DQo+ID4gKwlsaXN0X21vdmVfdGFpbCgmY3R4LT5saXN0LCAmdGxzX2RldmljZV9nY19saXN0KTsN Cj4gPiArDQo+ID4gKwkvKiBzY2hlZHVsZV93b3JrIGluc2lkZSB0aGUgc3BpbmxvY2sNCj4gPiAr CSAqIHRvIG1ha2Ugc3VyZSB0bHNfZGV2aWNlX2Rvd24gd2FpdHMgZm9yIHRoYXQgd29yay4NCj4g PiArCSAqLw0KPiA+ICsJc2NoZWR1bGVfd29yaygmdGxzX2RldmljZV9nY193b3JrKTsNCj4gPiAr DQo+ID4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0bHNfZGV2aWNlX2xvY2ssIGZsYWdzKTsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArLyogV2UgYXNzdW1lIHRoYXQgdGhlIHNvY2tldCBpcyBhbHJl YWR5IGNvbm5lY3RlZCAqLw0KPiA+ICtzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmdldF9uZXRk ZXZfZm9yX3NvY2soc3RydWN0IHNvY2sgKnNrKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgaW5ldF9z b2NrICppbmV0ID0gaW5ldF9zayhzayk7DQo+ID4gKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2 ID0gTlVMTDsNCj4gPiArDQo+ID4gKwluZXRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KHNvY2tfbmV0 KHNrKSwgaW5ldC0NCj4gPiA+Y29yay5mbC5mbG93aV9vaWYpOw0KPiA+ICsNCj4gPiArCXJldHVy biBuZXRkZXY7DQo+IA0KPiBXaHkgY2FuJ3Qgd2UganVzdCByZXR1cm4NCj4gDQo+IAlyZXR1cm4g ZGV2X2dldF9ieV9pbmRleChzb2NrX25ldChzayksIGluZXQtPmNvcmsuZmwuZmxvd2lfb2lmKTsN Cj4gPw0KPiANCj4gV2hhdCBmb3Igd2UgbmVlZCB0aGlzIG5ldGRldiBkZWNsYXJhdGlvbj8gVGhl IGRpcmVjdCByZXR1cm4gbWFrZXMgdGhlDQo+IGxpbmUNCj4gZXZlbiBzaG9ydGVyLg0KDQpJbiB0 aGUgbmV4dCBwYXRjaCB0aGlzIGZ1bmN0aW9uIHdpbGwgY2hhbmdlIHRvIHN1cHBvcnQgSVB2Ni4N Cg0KPiANCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBhdHRhY2hfc29ja190b19uZXRk ZXYoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QNCj4gPiBuZXRfZGV2aWNlICpuZXRkZXYsDQo+ID4g KwkJCQkgc3RydWN0IHRsc19jb250ZXh0ICpjdHgpDQo+ID4gK3sNCj4gPiArCWludCByYzsNCj4g PiArDQo+ID4gKwlyYyA9IG5ldGRldi0+dGxzZGV2X29wcy0+dGxzX2Rldl9hZGQobmV0ZGV2LCBz aywNCj4gPiBUTFNfT0ZGTE9BRF9DVFhfRElSX1RYLA0KPiA+ICsJCQkJCSAgICAgJmN0eC0+Y3J5 cHRvX3NlbmQsDQo+ID4gKwkJCQkJICAgICB0Y3Bfc2soc2spLQ0KPiA+ID53cml0ZV9zZXEpOw0K PiA+ICsJaWYgKHJjKSB7DQo+ID4gKwkJcHJfZXJyX3JhdGVsaW1pdGVkKCJUaGUgbmV0ZGV2IGhh cyByZWZ1c2VkIHRvDQo+ID4gb2ZmbG9hZCB0aGlzIHNvY2tldFxuIik7DQo+ID4gKwkJZ290byBv dXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmMgPSAwOw0KPiA+ICtvdXQ6DQo+ID4gKwlyZXR1 cm4gcmM7DQo+IA0KPiANCj4gVG9vIG1hbnkgbm90IGZ1bmN0aW9uYWwvdXNlbGVzcyBsaW5lcy4g V2hhdCBmb3IgaXMgdGhpcyBvdXQgbGFiZWw/Pz8NCj4gVGhpcyBoYXMgdG8gYmU6DQo+IA0KPiAJ cmMgPSBuZXRkZXYtPnRsc2Rldl9vcHMtPnRsc19kZXZfYWRkKG5ldGRldiwgc2ssDQo+IFRMU19P RkZMT0FEX0NUWF9ESVJfVFgsDQo+IAkJCQkJICAgICAmY3R4LT5jcnlwdG9fc2VuZCwNCj4gCQkJ CQkgICAgIHRjcF9zayhzayktPndyaXRlX3NlcSk7DQo+IAlpZiAocmMpDQo+IAkJcHJfZXJyX3Jh dGVsaW1pdGVkKCJUaGUgbmV0ZGV2IGhhcyByZWZ1c2VkIHRvIG9mZmxvYWQNCj4gdGhpcyBzb2Nr ZXRcbiIpOw0KPiANCj4gCXJldHVybiByYzsNCj4gDQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyB2b2lkIGRlc3Ryb3lfcmVjb3JkKHN0cnVjdCB0bHNfcmVjb3JkX2luZm8gKnJlY29yZCkNCj4g PiArew0KPiA+ICsJc2tiX2ZyYWdfdCAqZnJhZzsNCj4gPiArCWludCBucl9mcmFncyA9IHJlY29y ZC0+bnVtX2ZyYWdzOw0KPiA+ICsNCj4gPiArCXdoaWxlIChucl9mcmFncyA+IDApIHsNCj4gPiAr CQlmcmFnID0gJnJlY29yZC0+ZnJhZ3NbbnJfZnJhZ3MgLSAxXTsNCj4gPiArCQlfX3NrYl9mcmFn X3VucmVmKGZyYWcpOw0KPiA+ICsJCS0tbnJfZnJhZ3M7DQo+IA0KPiBXaHkganVzdCBub3QgdG8g d3JpdGUgdGhlIGJlbG93IGluc3RlYWQ/DQo+IA0KPiAJd2hpbGUgKG5yX2ZyYWdzLS0gPiAwKSB7 DQo+IAkJZnJhZyA9ICZyZWNvcmQtPmZyYWdzW25yX2ZyYWdzXTsNCj4gCQlfX3NrYl9mcmFnX3Vu cmVmKGZyYWcpOw0KPiAJfQ0KPiANCj4gPiArCX0NCj4gPiArCWtmcmVlKHJlY29yZCk7DQo+ID4g K30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIGRlbGV0ZV9hbGxfcmVjb3JkcyhzdHJ1Y3QgdGxz X29mZmxvYWRfY29udGV4dA0KPiA+ICpvZmZsb2FkX2N0eCkNCj4gPiArew0KPiA+ICsJc3RydWN0 IHRsc19yZWNvcmRfaW5mbyAqaW5mbywgKnRlbXA7DQo+ID4gKw0KPiA+ICsJbGlzdF9mb3JfZWFj aF9lbnRyeV9zYWZlKGluZm8sIHRlbXAsICZvZmZsb2FkX2N0eC0NCj4gPiA+cmVjb3Jkc19saXN0 LCBsaXN0KSB7DQo+ID4gKwkJbGlzdF9kZWwoJmluZm8tPmxpc3QpOw0KPiA+ICsJCWRlc3Ryb3lf cmVjb3JkKGluZm8pOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCW9mZmxvYWRfY3R4LT5yZXRyYW5z bWl0X2hpbnQgPSBOVUxMOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB0bHNfaWNz a19jbGVhbl9hY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBhY2tlZF9zZXEpDQo+ID4gK3sNCj4g PiArCXN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eCA9IHRsc19nZXRfY3R4KHNrKTsNCj4gPiAr CXN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0ICpjdHg7DQo+ID4gKwlzdHJ1Y3QgdGxzX3JlY29y ZF9pbmZvICppbmZvLCAqdGVtcDsNCj4gPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ID4gKwl1 NjQgZGVsZXRlZF9yZWNvcmRzID0gMDsNCj4gPiArDQo+ID4gKwlpZiAoIXRsc19jdHgpDQo+ID4g KwkJcmV0dXJuOw0KPiA+ICsNCj4gPiArCWN0eCA9IHRsc19vZmZsb2FkX2N0eCh0bHNfY3R4KTsN Cj4gPiArDQo+ID4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3R4LT5sb2NrLCBmbGFncyk7DQo+ID4g KwlpbmZvID0gY3R4LT5yZXRyYW5zbWl0X2hpbnQ7DQo+ID4gKwlpZiAoaW5mbyAmJiAhYmVmb3Jl KGFja2VkX3NlcSwgaW5mby0+ZW5kX3NlcSkpIHsNCj4gPiArCQljdHgtPnJldHJhbnNtaXRfaGlu dCA9IE5VTEw7DQo+ID4gKwkJbGlzdF9kZWwoJmluZm8tPmxpc3QpOw0KPiA+ICsJCWRlc3Ryb3lf cmVjb3JkKGluZm8pOw0KPiA+ICsJCWRlbGV0ZWRfcmVjb3JkcysrOw0KPiA+ICsJfQ0KPiA+ICsN Cj4gPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpbmZvLCB0ZW1wLCAmY3R4LT5yZWNvcmRz X2xpc3QsDQo+ID4gbGlzdCkgew0KPiA+ICsJCWlmIChiZWZvcmUoYWNrZWRfc2VxLCBpbmZvLT5l bmRfc2VxKSkNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJbGlzdF9kZWwoJmluZm8tPmxpc3QpOw0K PiA+ICsNCj4gPiArCQlkZXN0cm95X3JlY29yZChpbmZvKTsNCj4gPiArCQlkZWxldGVkX3JlY29y ZHMrKzsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwljdHgtPnVuYWNrZWRfcmVjb3JkX3NuICs9IGRl bGV0ZWRfcmVjb3JkczsNCj4gPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0eC0+bG9jaywg ZmxhZ3MpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiBBdCB0aGlzIHBvaW50LCB0aGVyZSBzaG91 bGQgYmUgbm8gcmVmZXJlbmNlcyBvbiB0aGlzDQo+ID4gKyAqIHNvY2tldCBhbmQgbm8gaW4tZmxp Z2h0IFNLQnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMNCj4gPiArICogc29ja2V0LCBzbyBpdCBpcyBz YWZlIHRvIGZyZWUgYWxsIHRoZSByZXNvdXJjZXMuDQo+ID4gKyAqLw0KPiA+ICt2b2lkIHRsc19k ZXZpY2Vfc2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3Qg dGxzX2NvbnRleHQgKnRsc19jdHggPSB0bHNfZ2V0X2N0eChzayk7DQo+ID4gKwlzdHJ1Y3QgdGxz X29mZmxvYWRfY29udGV4dCAqY3R4ID0NCj4gPiB0bHNfb2ZmbG9hZF9jdHgodGxzX2N0eCk7DQo+ ID4gKw0KPiA+ICsJaWYgKGN0eC0+b3Blbl9yZWNvcmQpDQo+ID4gKwkJZGVzdHJveV9yZWNvcmQo Y3R4LT5vcGVuX3JlY29yZCk7DQo+ID4gKw0KPiA+ICsJZGVsZXRlX2FsbF9yZWNvcmRzKGN0eCk7 DQo+ID4gKwljcnlwdG9fZnJlZV9hZWFkKGN0eC0+YWVhZF9zZW5kKTsNCj4gPiArCWN0eC0+c2tf ZGVzdHJ1Y3Qoc2spOw0KPiA+ICsJc3RhdGljX2JyYW5jaF9kZWMoJmNsZWFuX2Fja2VkX2RhdGFf ZW5hYmxlZCk7DQo+ID4gKw0KPiA+ICsJaWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdCgmdGxzX2N0 eC0+cmVmY291bnQpKQ0KPiA+ICsJCXRsc19kZXZpY2VfcXVldWVfY3R4X2Rlc3RydWN0aW9uKHRs c19jdHgpOw0KPiA+ICt9DQo+ID4gK0VYUE9SVF9TWU1CT0wodGxzX2RldmljZV9za19kZXN0cnVj dCk7DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgdGxzX2FwcGVuZF9mcmFnKHN0cnVj dCB0bHNfcmVjb3JkX2luZm8gKnJlY29yZCwNCj4gPiArCQkJCSAgIHN0cnVjdCBwYWdlX2ZyYWcg KnBmcmFnLA0KPiA+ICsJCQkJICAgaW50IHNpemUpDQo+ID4gK3sNCj4gPiArCXNrYl9mcmFnX3Qg KmZyYWc7DQo+ID4gKw0KPiA+ICsJZnJhZyA9ICZyZWNvcmQtPmZyYWdzW3JlY29yZC0+bnVtX2Zy YWdzIC0gMV07DQo+ID4gKwlpZiAoZnJhZy0+cGFnZS5wID09IHBmcmFnLT5wYWdlICYmDQo+ID4g KwkgICAgZnJhZy0+cGFnZV9vZmZzZXQgKyBmcmFnLT5zaXplID09IHBmcmFnLT5vZmZzZXQpIHsN Cj4gPiArCQlmcmFnLT5zaXplICs9IHNpemU7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCSsrZnJh ZzsNCj4gPiArCQlmcmFnLT5wYWdlLnAgPSBwZnJhZy0+cGFnZTsNCj4gPiArCQlmcmFnLT5wYWdl X29mZnNldCA9IHBmcmFnLT5vZmZzZXQ7DQo+ID4gKwkJZnJhZy0+c2l6ZSA9IHNpemU7DQo+ID4g KwkJKytyZWNvcmQtPm51bV9mcmFnczsNCj4gPiArCQlnZXRfcGFnZShwZnJhZy0+cGFnZSk7DQo+ ID4gKwl9DQo+ID4gKw0KPiA+ICsJcGZyYWctPm9mZnNldCArPSBzaXplOw0KPiA+ICsJcmVjb3Jk LT5sZW4gKz0gc2l6ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSBpbnQgdGxz X3B1c2hfcmVjb3JkKHN0cnVjdCBzb2NrICpzaywNCj4gPiArCQkJCSAgc3RydWN0IHRsc19jb250 ZXh0ICpjdHgsDQo+ID4gKwkJCQkgIHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0DQo+ID4gKm9m ZmxvYWRfY3R4LA0KPiA+ICsJCQkJICBzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvICpyZWNvcmQsDQo+ ID4gKwkJCQkgIHN0cnVjdCBwYWdlX2ZyYWcgKnBmcmFnLA0KPiA+ICsJCQkJICBpbnQgZmxhZ3Ms DQo+ID4gKwkJCQkgIHVuc2lnbmVkIGNoYXIgcmVjb3JkX3R5cGUpDQo+ID4gK3sNCj4gPiArCXNr Yl9mcmFnX3QgKmZyYWc7DQo+ID4gKwlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsN Cj4gPiArCXN0cnVjdCBwYWdlX2ZyYWcgZmFsbGJhY2tfZnJhZzsNCj4gPiArCXN0cnVjdCBwYWdl X2ZyYWcgICp0YWdfcGZyYWcgPSBwZnJhZzsNCj4gPiArCWludCBpOw0KPiA+ICsNCj4gPiArCS8q IGZpbGwgcHJlcGFuZCAqLw0KPiA+ICsJZnJhZyA9ICZyZWNvcmQtPmZyYWdzWzBdOw0KPiA+ICsJ dGxzX2ZpbGxfcHJlcGVuZChjdHgsDQo+ID4gKwkJCSBza2JfZnJhZ19hZGRyZXNzKGZyYWcpLA0K PiA+ICsJCQkgcmVjb3JkLT5sZW4gLSBjdHgtPnByZXBlbmRfc2l6ZSwNCj4gPiArCQkJIHJlY29y ZF90eXBlKTsNCj4gPiArDQo+ID4gKwlpZiAodW5saWtlbHkoIXNrYl9wYWdlX2ZyYWdfcmVmaWxs KGN0eC0+dGFnX3NpemUsIHBmcmFnLA0KPiA+IEdGUF9LRVJORUwpKSkgew0KPiA+ICsJCS8qIEhX IGRvZXNuJ3QgY2FyZSBhYm91dCB0aGUgZGF0YSBpbiB0aGUgdGFnDQo+ID4gKwkJICogc28gaW4g Y2FzZSBwZnJhZyBoYXMgbm8gcm9vbQ0KPiA+ICsJCSAqIGZvciBhIHRhZyBhbmQgd2UgY2FuJ3Qg YWxsb2NhdGUgYSBuZXcgcGZyYWcNCj4gPiArCQkgKiBqdXN0IHVzZSB0aGUgcGFnZSBpbiB0aGUg Zmlyc3QgZnJhZw0KPiA+ICsJCSAqIHJhdGhlciB0aGVuIHdyaXRlIGEgY29tcGxpY2F0ZWQgZmFs bCBiYWNrIGNvZGUuDQo+ID4gKwkJICovDQo+ID4gKwkJdGFnX3BmcmFnID0gJmZhbGxiYWNrX2Zy YWc7DQo+ID4gKwkJdGFnX3BmcmFnLT5wYWdlID0gc2tiX2ZyYWdfcGFnZShmcmFnKTsNCj4gPiAr CQl0YWdfcGZyYWctPm9mZnNldCA9IDA7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJdGxzX2FwcGVu ZF9mcmFnKHJlY29yZCwgdGFnX3BmcmFnLCBjdHgtPnRhZ19zaXplKTsNCj4gPiArCXJlY29yZC0+ ZW5kX3NlcSA9IHRwLT53cml0ZV9zZXEgKyByZWNvcmQtPmxlbjsNCj4gPiArCXNwaW5fbG9ja19p cnEoJm9mZmxvYWRfY3R4LT5sb2NrKTsNCj4gPiArCWxpc3RfYWRkX3RhaWwoJnJlY29yZC0+bGlz dCwgJm9mZmxvYWRfY3R4LT5yZWNvcmRzX2xpc3QpOw0KPiA+ICsJc3Bpbl91bmxvY2tfaXJxKCZv ZmZsb2FkX2N0eC0+bG9jayk7DQo+ID4gKwlvZmZsb2FkX2N0eC0+b3Blbl9yZWNvcmQgPSBOVUxM Ow0KPiA+ICsJc2V0X2JpdChUTFNfUEVORElOR19DTE9TRURfUkVDT1JELCAmY3R4LT5mbGFncyk7 DQo+ID4gKwl0bHNfYWR2YW5jZV9yZWNvcmRfc24oc2ssIGN0eCk7DQo+ID4gKw0KPiA+ICsJZm9y IChpID0gMDsgaSA8IHJlY29yZC0+bnVtX2ZyYWdzOyBpKyspIHsNCj4gPiArCQlmcmFnID0gJnJl Y29yZC0+ZnJhZ3NbaV07DQo+ID4gKwkJc2dfdW5tYXJrX2VuZCgmb2ZmbG9hZF9jdHgtPnNnX3R4 X2RhdGFbaV0pOw0KPiA+ICsJCXNnX3NldF9wYWdlKCZvZmZsb2FkX2N0eC0+c2dfdHhfZGF0YVtp XSwNCj4gPiBza2JfZnJhZ19wYWdlKGZyYWcpLA0KPiA+ICsJCQkgICAgZnJhZy0+c2l6ZSwgZnJh Zy0+cGFnZV9vZmZzZXQpOw0KPiA+ICsJCXNrX21lbV9jaGFyZ2Uoc2ssIGZyYWctPnNpemUpOw0K PiA+ICsJCWdldF9wYWdlKHNrYl9mcmFnX3BhZ2UoZnJhZykpOw0KPiA+ICsJfQ0KPiA+ICsJc2df bWFya19lbmQoJm9mZmxvYWRfY3R4LT5zZ190eF9kYXRhW3JlY29yZC0+bnVtX2ZyYWdzIC0NCj4g PiAxXSk7DQo+ID4gKw0KPiA+ICsJLyogYWxsIHJlYWR5LCBzZW5kICovDQo+ID4gKwlyZXR1cm4g dGxzX3B1c2hfc2coc2ssIGN0eCwgb2ZmbG9hZF9jdHgtPnNnX3R4X2RhdGEsIDAsDQo+ID4gZmxh Z3MpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIGludCB0bHNfY3JlYXRlX25l d19yZWNvcmQoc3RydWN0IHRsc19vZmZsb2FkX2NvbnRleHQNCj4gPiAqb2ZmbG9hZF9jdHgsDQo+ ID4gKwkJCQkJc3RydWN0IHBhZ2VfZnJhZyAqcGZyYWcsDQo+ID4gKwkJCQkJc2l6ZV90IHByZXBl bmRfc2l6ZSkNCj4gPiArew0KPiA+ICsJc2tiX2ZyYWdfdCAqZnJhZzsNCj4gPiArCXN0cnVjdCB0 bHNfcmVjb3JkX2luZm8gKnJlY29yZDsNCj4gPiArDQo+ID4gKwlyZWNvcmQgPSBrbWFsbG9jKHNp emVvZigqcmVjb3JkKSwgR0ZQX0tFUk5FTCk7DQo+ID4gKwlpZiAoIXJlY29yZCkNCj4gPiArCQly ZXR1cm4gLUVOT01FTTsNCj4gPiArDQo+ID4gKwlmcmFnID0gJnJlY29yZC0+ZnJhZ3NbMF07DQo+ ID4gKwlfX3NrYl9mcmFnX3NldF9wYWdlKGZyYWcsIHBmcmFnLT5wYWdlKTsNCj4gPiArCWZyYWct PnBhZ2Vfb2Zmc2V0ID0gcGZyYWctPm9mZnNldDsNCj4gPiArCXNrYl9mcmFnX3NpemVfc2V0KGZy YWcsIHByZXBlbmRfc2l6ZSk7DQo+ID4gKw0KPiA+ICsJZ2V0X3BhZ2UocGZyYWctPnBhZ2UpOw0K PiA+ICsJcGZyYWctPm9mZnNldCArPSBwcmVwZW5kX3NpemU7DQo+ID4gKw0KPiA+ICsJcmVjb3Jk LT5udW1fZnJhZ3MgPSAxOw0KPiA+ICsJcmVjb3JkLT5sZW4gPSBwcmVwZW5kX3NpemU7DQo+ID4g KwlvZmZsb2FkX2N0eC0+b3Blbl9yZWNvcmQgPSByZWNvcmQ7DQo+ID4gKwlyZXR1cm4gMDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSBpbnQgdGxzX2RvX2FsbG9jYXRpb24oc3Ry dWN0IHNvY2sgKnNrLA0KPiA+ICsJCQkJICAgIHN0cnVjdCB0bHNfb2ZmbG9hZF9jb250ZXh0DQo+ ID4gKm9mZmxvYWRfY3R4LA0KPiA+ICsJCQkJICAgIHN0cnVjdCBwYWdlX2ZyYWcgKnBmcmFnLA0K PiA+ICsJCQkJICAgIHNpemVfdCBwcmVwZW5kX3NpemUpDQo+ID4gK3sNCj4gPiArCWludCByZXQ7 DQo+ID4gKw0KPiA+ICsJaWYgKCFvZmZsb2FkX2N0eC0+b3Blbl9yZWNvcmQpIHsNCj4gPiArCQlp ZiAodW5saWtlbHkoIXNrYl9wYWdlX2ZyYWdfcmVmaWxsKHByZXBlbmRfc2l6ZSwNCj4gPiBwZnJh ZywNCj4gPiArCQkJCQkJICAgc2stDQo+ID4gPnNrX2FsbG9jYXRpb24pKSkgew0KPiA+ICsJCQlz ay0+c2tfcHJvdC0+ZW50ZXJfbWVtb3J5X3ByZXNzdXJlKHNrKTsNCj4gPiArCQkJc2tfc3RyZWFt X21vZGVyYXRlX3NuZGJ1Zihzayk7DQo+ID4gKwkJCXJldHVybiAtRU5PTUVNOw0KPiA+ICsJCX0N Cj4gPiArDQo+ID4gKwkJcmV0ID0gdGxzX2NyZWF0ZV9uZXdfcmVjb3JkKG9mZmxvYWRfY3R4LCBw ZnJhZywNCj4gPiBwcmVwZW5kX3NpemUpOw0KPiA+ICsJCWlmIChyZXQpDQo+ID4gKwkJCXJldHVy biByZXQ7DQo+ID4gKw0KPiA+ICsJCWlmIChwZnJhZy0+c2l6ZSA+IHBmcmFnLT5vZmZzZXQpDQo+ ID4gKwkJCXJldHVybiAwOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmICghc2tfcGFnZV9mcmFn X3JlZmlsbChzaywgcGZyYWcpKQ0KPiA+ICsJCXJldHVybiAtRU5PTUVNOw0KPiA+ICsNCj4gPiAr CXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHRsc19wdXNoX2RhdGEo c3RydWN0IHNvY2sgKnNrLA0KPiA+ICsJCQkgc3RydWN0IGlvdl9pdGVyICptc2dfaXRlciwNCj4g PiArCQkJIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MsDQo+ID4gKwkJCSB1bnNpZ25lZCBjaGFyIHJl Y29yZF90eXBlKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHggPSB0 bHNfZ2V0X2N0eChzayk7DQo+ID4gKwlzdHJ1Y3QgdGxzX29mZmxvYWRfY29udGV4dCAqY3R4ID0N Cj4gPiB0bHNfb2ZmbG9hZF9jdHgodGxzX2N0eCk7DQo+ID4gKwlzdHJ1Y3QgdGxzX3JlY29yZF9p bmZvICpyZWNvcmQgPSBjdHgtPm9wZW5fcmVjb3JkOw0KPiA+ICsJc3RydWN0IHBhZ2VfZnJhZyAq cGZyYWc7DQo+ID4gKwlpbnQgY29weSwgcmMgPSAwOw0KPiA+ICsJc2l6ZV90IG9yaWdfc2l6ZSA9 IHNpemU7DQo+ID4gKwl1MzIgbWF4X29wZW5fcmVjb3JkX2xlbjsNCj4gPiArCWxvbmcgdGltZW87 DQo+ID4gKwlpbnQgbW9yZSA9IGZsYWdzICYgKE1TR19TRU5EUEFHRV9OT1RMQVNUIHwgTVNHX01P UkUpOw0KPiA+ICsJaW50IHRsc19wdXNoX3JlY29yZF9mbGFncyA9IGZsYWdzIHwgTVNHX1NFTkRQ QUdFX05PVExBU1Q7DQo+ID4gKwlib29sIGRvbmUgPSBmYWxzZTsNCj4gDQo+IEFzIERhdmlkIHNh eXMsIHZhcmlhYmxlcyBoYXZlIHRvIGJlIGRlY2xhcmVkIGluIHJldmVyc2Ug0KFocmlzdG1hcw0K PiB0cmVlIG9yZGVyLg0KPiANCj4gPiArDQo+ID4gKwlpZiAoZmxhZ3MgJg0KPiA+ICsJICAgIH4o TVNHX01PUkUgfCBNU0dfRE9OVFdBSVQgfCBNU0dfTk9TSUdOQUwgfA0KPiA+IE1TR19TRU5EUEFH RV9OT1RMQVNUKSkNCj4gPiArCQlyZXR1cm4gLUVOT1RTVVBQOw0KPiA+ICsNCj4gPiArCWlmIChz ay0+c2tfZXJyKQ0KPiA+ICsJCXJldHVybiAtc2stPnNrX2VycjsNCj4gPiArDQo+ID4gKwl0aW1l byA9IHNvY2tfc25kdGltZW8oc2ssIGZsYWdzICYgTVNHX0RPTlRXQUlUKTsNCj4gPiArCXJjID0g dGxzX2NvbXBsZXRlX3BlbmRpbmdfd29yayhzaywgdGxzX2N0eCwgZmxhZ3MsDQo+ID4gJnRpbWVv KTsNCj4gPiArCWlmIChyYyA8IDApDQo+ID4gKwkJcmV0dXJuIHJjOw0KPiA+ICsNCj4gPiArCXBm cmFnID0gc2tfcGFnZV9mcmFnKHNrKTsNCj4gPiArDQo+ID4gKwkvKiBUTFNfVExTX0hFQURFUl9T SVpFIGlzIG5vdCBjb3VudGVkIGFzIHBhcnQgb2YgdGhlIFRMUw0KPiA+IHJlY29yZCwgYW5kDQo+ ID4gKwkgKiB3ZSBuZWVkIHRvIGxlYXZlIHJvb20gZm9yIGFuIGF1dGhlbnRpY2F0aW9uIHRhZy4N Cj4gPiArCSAqLw0KPiA+ICsJbWF4X29wZW5fcmVjb3JkX2xlbiA9IFRMU19NQVhfUEFZTE9BRF9T SVpFICsNCj4gPiArCQkJICAgICAgdGxzX2N0eC0+cHJlcGVuZF9zaXplOw0KPiA+ICsJZG8gew0K PiA+ICsJCWlmICh0bHNfZG9fYWxsb2NhdGlvbihzaywgY3R4LCBwZnJhZywNCj4gPiArCQkJCSAg ICAgIHRsc19jdHgtPnByZXBlbmRfc2l6ZSkpIHsNCj4gPiArCQkJcmMgPSBza19zdHJlYW1fd2Fp dF9tZW1vcnkoc2ssICZ0aW1lbyk7DQo+ID4gKwkJCWlmICghcmMpDQo+ID4gKwkJCQljb250aW51 ZTsNCj4gPiArDQo+ID4gKwkJCXJlY29yZCA9IGN0eC0+b3Blbl9yZWNvcmQ7DQo+ID4gKwkJCWlm ICghcmVjb3JkKQ0KPiA+ICsJCQkJYnJlYWs7DQo+ID4gK2hhbmRsZV9lcnJvcjoNCj4gPiArCQkJ aWYgKHJlY29yZF90eXBlICE9IFRMU19SRUNPUkRfVFlQRV9EQVRBKSB7DQo+ID4gKwkJCQkvKiBh dm9pZCBzZW5kaW5nIHBhcnRpYWwNCj4gPiArCQkJCSAqIHJlY29yZCB3aXRoIHR5cGUgIT0NCj4g PiArCQkJCSAqIGFwcGxpY2F0aW9uX2RhdGENCj4gPiArCQkJCSAqLw0KPiA+ICsJCQkJc2l6ZSA9 IG9yaWdfc2l6ZTsNCj4gPiArCQkJCWRlc3Ryb3lfcmVjb3JkKHJlY29yZCk7DQo+ID4gKwkJCQlj dHgtPm9wZW5fcmVjb3JkID0gTlVMTDsNCj4gPiArCQkJfSBlbHNlIGlmIChyZWNvcmQtPmxlbiA+ IHRsc19jdHgtDQo+ID4gPnByZXBlbmRfc2l6ZSkgew0KPiA+ICsJCQkJZ290byBsYXN0X3JlY29y ZDsNCj4gPiArCQkJfQ0KPiA+ICsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJfQ0KPiA+ICsNCj4g PiArCQlyZWNvcmQgPSBjdHgtPm9wZW5fcmVjb3JkOw0KPiA+ICsJCWNvcHkgPSBtaW5fdChzaXpl X3QsIHNpemUsIChwZnJhZy0+c2l6ZSAtIHBmcmFnLQ0KPiA+ID5vZmZzZXQpKTsNCj4gPiArCQlj b3B5ID0gbWluX3Qoc2l6ZV90LCBjb3B5LCAobWF4X29wZW5fcmVjb3JkX2xlbiAtDQo+ID4gcmVj b3JkLT5sZW4pKTsNCj4gPiArDQo+ID4gKwkJaWYgKGNvcHlfZnJvbV9pdGVyX25vY2FjaGUocGFn ZV9hZGRyZXNzKHBmcmFnLQ0KPiA+ID5wYWdlKSArDQo+ID4gKwkJCQkJICAgICAgIHBmcmFnLT5v ZmZzZXQsDQo+ID4gKwkJCQkJICAgY29weSwgbXNnX2l0ZXIpICE9DQo+ID4gY29weSkgew0KPiA+ ICsJCQlyYyA9IC1FRkFVTFQ7DQo+ID4gKwkJCWdvdG8gaGFuZGxlX2Vycm9yOw0KPiA+ICsJCX0N Cj4gPiArCQl0bHNfYXBwZW5kX2ZyYWcocmVjb3JkLCBwZnJhZywgY29weSk7DQo+ID4gKw0KPiA+ ICsJCXNpemUgLT0gY29weTsNCj4gPiArCQlpZiAoIXNpemUpIHsNCj4gPiArbGFzdF9yZWNvcmQ6 DQo+ID4gKwkJCXRsc19wdXNoX3JlY29yZF9mbGFncyA9IGZsYWdzOw0KPiA+ICsJCQlpZiAobW9y ZSkgew0KPiA+ICsJCQkJdGxzX2N0eC0+cGVuZGluZ19vcGVuX3JlY29yZF9mcmFncyANCj4gPiA9 DQo+ID4gKwkJCQkJCXJlY29yZC0+bnVtX2ZyYWdzOw0KPiA+ICsJCQkJYnJlYWs7DQo+ID4gKwkJ CX0NCj4gPiArDQo+ID4gKwkJCWRvbmUgPSB0cnVlOw0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJ aWYgKChkb25lKSB8fCByZWNvcmQtPmxlbiA+PSBtYXhfb3Blbl9yZWNvcmRfbGVuDQo+ID4gfHwN Cj4gPiArCQkgICAgKHJlY29yZC0+bnVtX2ZyYWdzID49IE1BWF9TS0JfRlJBR1MgLSAxKSkgew0K PiA+ICsJCQlyYyA9IHRsc19wdXNoX3JlY29yZChzaywNCj4gPiArCQkJCQkgICAgIHRsc19jdHgs DQo+ID4gKwkJCQkJICAgICBjdHgsDQo+ID4gKwkJCQkJICAgICByZWNvcmQsDQo+ID4gKwkJCQkJ ICAgICBwZnJhZywNCj4gPiArCQkJCQkgICAgIHRsc19wdXNoX3JlY29yZF9mbGFncw0KPiA+ICwN Cj4gPiArCQkJCQkgICAgIHJlY29yZF90eXBlKTsNCj4gPiArCQkJaWYgKHJjIDwgMCkNCj4gPiAr CQkJCWJyZWFrOw0KPiA+ICsJCX0NCj4gPiArCX0gd2hpbGUgKCFkb25lKTsNCj4gPiArDQo+ID4g KwlpZiAob3JpZ19zaXplIC0gc2l6ZSA+IDApDQo+ID4gKwkJcmMgPSBvcmlnX3NpemUgLSBzaXpl Ow0KPiA+ICsNCj4gPiArCXJldHVybiByYzsNCj4gPiArfQ0KPiA+ICsNCj4gPiAraW50IHRsc19k ZXZpY2Vfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90 DQo+ID4gc2l6ZSkNCj4gPiArew0KPiA+ICsJdW5zaWduZWQgY2hhciByZWNvcmRfdHlwZSA9IFRM U19SRUNPUkRfVFlQRV9EQVRBOw0KPiA+ICsJaW50IHJjID0gMDsNCj4gPiArDQo+ID4gKwlsb2Nr X3NvY2soc2spOw0KPiA+ICsNCj4gPiArCWlmICh1bmxpa2VseShtc2ctPm1zZ19jb250cm9sbGVu KSkgew0KPiA+ICsJCXJjID0gdGxzX3Byb2NjZXNzX2Ntc2coc2ssIG1zZywgJnJlY29yZF90eXBl KTsNCj4gPiArCQlpZiAocmMpDQo+ID4gKwkJCWdvdG8gb3V0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4g PiArCXJjID0gdGxzX3B1c2hfZGF0YShzaywgJm1zZy0+bXNnX2l0ZXIsIHNpemUsDQo+ID4gKwkJ CSAgIG1zZy0+bXNnX2ZsYWdzLCByZWNvcmRfdHlwZSk7DQo+ID4gKw0KPiA+ICtvdXQ6DQo+ID4g KwlyZWxlYXNlX3NvY2soc2spOw0KPiA+ICsJcmV0dXJuIHJjOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtpbnQgdGxzX2RldmljZV9zZW5kcGFnZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwYWdlICpw YWdlLA0KPiA+ICsJCQlpbnQgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQ0KPiA+ICt7 DQo+ID4gKwlzdHJ1Y3QgaW92X2l0ZXIJbXNnX2l0ZXI7DQo+ID4gKwlzdHJ1Y3Qga3ZlYyBpb3Y7 DQo+ID4gKwljaGFyICprYWRkciA9IGttYXAocGFnZSk7DQo+ID4gKwlpbnQgcmMgPSAwOw0KPiA+ ICsNCj4gPiArCWlmIChmbGFncyAmIE1TR19TRU5EUEFHRV9OT1RMQVNUKQ0KPiA+ICsJCWZsYWdz IHw9IE1TR19NT1JFOw0KPiA+ICsNCj4gPiArCWxvY2tfc29jayhzayk7DQo+ID4gKw0KPiA+ICsJ aWYgKGZsYWdzICYgTVNHX09PQikgew0KPiA+ICsJCXJjID0gLUVOT1RTVVBQOw0KPiA+ICsJCWdv dG8gb3V0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlvdi5pb3ZfYmFzZSA9IGthZGRyICsgb2Zm c2V0Ow0KPiA+ICsJaW92Lmlvdl9sZW4gPSBzaXplOw0KPiA+ICsJaW92X2l0ZXJfa3ZlYygmbXNn X2l0ZXIsIFdSSVRFIHwgSVRFUl9LVkVDLCAmaW92LCAxLA0KPiA+IHNpemUpOw0KPiA+ICsJcmMg PSB0bHNfcHVzaF9kYXRhKHNrLCAmbXNnX2l0ZXIsIHNpemUsDQo+ID4gKwkJCSAgIGZsYWdzLCBU TFNfUkVDT1JEX1RZUEVfREFUQSk7DQo+ID4gKwlrdW5tYXAocGFnZSk7DQo+ID4gKw0KPiA+ICtv dXQ6DQo+ID4gKwlyZWxlYXNlX3NvY2soc2spOw0KPiA+ICsJcmV0dXJuIHJjOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvICp0bHNfZ2V0X3JlY29yZChzdHJ1Y3Qg dGxzX29mZmxvYWRfY29udGV4dA0KPiA+ICpjb250ZXh0LA0KPiA+ICsJCQkJICAgICAgIHUzMiBz ZXEsIHU2NCAqcF9yZWNvcmRfc24pDQo+ID4gK3sNCj4gPiArCXN0cnVjdCB0bHNfcmVjb3JkX2lu Zm8gKmluZm87DQo+ID4gKwl1NjQgcmVjb3JkX3NuID0gY29udGV4dC0+aGludF9yZWNvcmRfc247 DQo+ID4gKw0KPiA+ICsJaW5mbyA9IGNvbnRleHQtPnJldHJhbnNtaXRfaGludDsNCj4gPiArCWlm ICghaW5mbyB8fA0KPiA+ICsJICAgIGJlZm9yZShzZXEsIGluZm8tPmVuZF9zZXEgLSBpbmZvLT5s ZW4pKSB7DQo+ID4gKwkJLyogaWYgcmV0cmFuc21pdF9oaW50IGlzIGlycmVsZXZhbnQgc3RhcnQN Cj4gPiArCQkgKiBmcm9tIHRoZSBiZWdnaW5nIG9mIHRoZSBsaXN0DQo+ID4gKwkJICovDQo+ID4g KwkJaW5mbyA9IGxpc3RfZmlyc3RfZW50cnkoJmNvbnRleHQtPnJlY29yZHNfbGlzdCwNCj4gPiAr CQkJCQlzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvLA0KPiA+IGxpc3QpOw0KPiA+ICsJCXJlY29yZF9z biA9IGNvbnRleHQtPnVuYWNrZWRfcmVjb3JkX3NuOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWxp c3RfZm9yX2VhY2hfZW50cnlfZnJvbShpbmZvLCAmY29udGV4dC0+cmVjb3Jkc19saXN0LA0KPiA+ IGxpc3QpIHsNCj4gPiArCQlpZiAoYmVmb3JlKHNlcSwgaW5mby0+ZW5kX3NlcSkpIHsNCj4gPiAr CQkJaWYgKCFjb250ZXh0LT5yZXRyYW5zbWl0X2hpbnQgfHwNCj4gPiArCQkJICAgIGFmdGVyKGlu Zm8tPmVuZF9zZXEsDQo+ID4gKwkJCQkgIGNvbnRleHQtPnJldHJhbnNtaXRfaGludC0NCj4gPiA+ ZW5kX3NlcSkpIHsNCj4gPiArCQkJCWNvbnRleHQtPmhpbnRfcmVjb3JkX3NuID0NCj4gPiByZWNv cmRfc247DQo+ID4gKwkJCQljb250ZXh0LT5yZXRyYW5zbWl0X2hpbnQgPSBpbmZvOw0KPiA+ICsJ CQl9DQo+ID4gKwkJCSpwX3JlY29yZF9zbiA9IHJlY29yZF9zbjsNCj4gPiArCQkJcmV0dXJuIGlu Zm87DQo+ID4gKwkJfQ0KPiA+ICsJCXJlY29yZF9zbisrOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAr CXJldHVybiBOVUxMOw0KPiA+ICt9DQo+ID4gK0VYUE9SVF9TWU1CT0wodGxzX2dldF9yZWNvcmQp Ow0KPiA+ICsNCj4gPiArc3RhdGljIGludCB0bHNfZGV2aWNlX3B1c2hfcGVuZGluZ19yZWNvcmQo c3RydWN0IHNvY2sgKnNrLCBpbnQNCj4gPiBmbGFncykNCj4gPiArew0KPiA+ICsJc3RydWN0IGlv dl9pdGVyCW1zZ19pdGVyOw0KPiA+ICsNCj4gPiArCWlvdl9pdGVyX2t2ZWMoJm1zZ19pdGVyLCBX UklURSB8IElURVJfS1ZFQywgTlVMTCwgMCwgMCk7DQo+ID4gKwlyZXR1cm4gdGxzX3B1c2hfZGF0 YShzaywgJm1zZ19pdGVyLCAwLCBmbGFncywNCj4gPiBUTFNfUkVDT1JEX1RZUEVfREFUQSk7DQo+ ID4gK30NCj4gPiArDQo+ID4gK2ludCB0bHNfc2V0X2RldmljZV9vZmZsb2FkKHN0cnVjdCBzb2Nr ICpzaywgc3RydWN0IHRsc19jb250ZXh0DQo+ID4gKmN0eCkNCj4gPiArew0KPiA+ICsJdTE2IG5v bmVjZV9zaXplLCB0YWdfc2l6ZSwgaXZfc2l6ZSwgcmVjX3NlcV9zaXplOw0KPiA+ICsJc3RydWN0 IHRsc19yZWNvcmRfaW5mbyAqc3RhcnRfbWFya2VyX3JlY29yZDsNCj4gPiArCXN0cnVjdCB0bHNf b2ZmbG9hZF9jb250ZXh0ICpvZmZsb2FkX2N0eDsNCj4gPiArCXN0cnVjdCB0bHNfY3J5cHRvX2lu Zm8gKmNyeXB0b19pbmZvOw0KPiA+ICsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsNCj4gPiAr CWNoYXIgKml2LCAqcmVjX3NlcTsNCj4gPiArCXN0cnVjdCBza19idWZmICpza2I7DQo+ID4gKwlp bnQgcmMgPSAtRUlOVkFMOw0KPiA+ICsJX19iZTY0IHJjZF9zbjsNCj4gPiArDQo+ID4gKwlpZiAo IWN0eCkNCj4gPiArCQlnb3RvIG91dDsNCj4gPiArDQo+ID4gKwlpZiAoY3R4LT5wcml2X2N0eCkg ew0KPiA+ICsJCXJjID0gLUVFWElTVDsNCj4gPiArCQlnb3RvIG91dDsNCj4gPiArCX0NCj4gPiAr DQo+ID4gKwlzdGFydF9tYXJrZXJfcmVjb3JkID0NCj4gPiBrbWFsbG9jKHNpemVvZigqc3RhcnRf bWFya2VyX3JlY29yZCksIEdGUF9LRVJORUwpOw0KPiA+ICsJaWYgKCFzdGFydF9tYXJrZXJfcmVj b3JkKSB7DQo+ID4gKwkJcmMgPSAtRU5PTUVNOw0KPiA+ICsJCWdvdG8gb3V0Ow0KPiA+ICsJfQ0K PiA+ICsNCj4gPiArCW9mZmxvYWRfY3R4ID0ga3phbGxvYyhUTFNfT0ZGTE9BRF9DT05URVhUX1NJ WkUsDQo+ID4gR0ZQX0tFUk5FTCk7DQo+ID4gKwlpZiAoIW9mZmxvYWRfY3R4KSB7DQo+ID4gKwkJ cmMgPSAtRU5PTUVNOw0KPiA+ICsJCWdvdG8gZnJlZV9tYXJrZXJfcmVjb3JkOw0KPiA+ICsJfQ0K PiA+ICsNCj4gPiArCWNyeXB0b19pbmZvID0gJmN0eC0+Y3J5cHRvX3NlbmQ7DQo+ID4gKwlzd2l0 Y2ggKGNyeXB0b19pbmZvLT5jaXBoZXJfdHlwZSkgew0KPiA+ICsJY2FzZSBUTFNfQ0lQSEVSX0FF U19HQ01fMTI4OiB7DQo+ID4gKwkJbm9uZWNlX3NpemUgPSBUTFNfQ0lQSEVSX0FFU19HQ01fMTI4 X0lWX1NJWkU7DQo+ID4gKwkJdGFnX3NpemUgPSBUTFNfQ0lQSEVSX0FFU19HQ01fMTI4X1RBR19T SVpFOw0KPiA+ICsJCWl2X3NpemUgPSBUTFNfQ0lQSEVSX0FFU19HQ01fMTI4X0lWX1NJWkU7DQo+ ID4gKwkJaXYgPSAoKHN0cnVjdCB0bHMxMl9jcnlwdG9faW5mb19hZXNfZ2NtXzEyOA0KPiA+ICop Y3J5cHRvX2luZm8pLT5pdjsNCj4gPiArCQlyZWNfc2VxX3NpemUgPQ0KPiA+IFRMU19DSVBIRVJf QUVTX0dDTV8xMjhfUkVDX1NFUV9TSVpFOw0KPiA+ICsJCXJlY19zZXEgPQ0KPiA+ICsJCSAoKHN0 cnVjdCB0bHMxMl9jcnlwdG9faW5mb19hZXNfZ2NtXzEyOA0KPiA+ICopY3J5cHRvX2luZm8pLT5y ZWNfc2VxOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJfQ0KPiA+ICsJZGVmYXVsdDoNCj4gPiArCQly YyA9IC1FSU5WQUw7DQo+ID4gKwkJZ290byBmcmVlX29mZmxvYWRfY3R4Ow0KPiA+ICsJfQ0KPiA+ ICsNCj4gPiArCWN0eC0+cHJlcGVuZF9zaXplID0gVExTX0hFQURFUl9TSVpFICsgbm9uZWNlX3Np emU7DQo+ID4gKwljdHgtPnRhZ19zaXplID0gdGFnX3NpemU7DQo+ID4gKwljdHgtPml2X3NpemUg PSBpdl9zaXplOw0KPiA+ICsJY3R4LT5pdiA9IGttYWxsb2MoaXZfc2l6ZSArDQo+ID4gVExTX0NJ UEhFUl9BRVNfR0NNXzEyOF9TQUxUX1NJWkUsDQo+ID4gKwkJCSAgR0ZQX0tFUk5FTCk7DQo+ID4g KwlpZiAoIWN0eC0+aXYpIHsNCj4gPiArCQlyYyA9IC1FTk9NRU07DQo+ID4gKwkJZ290byBmcmVl X29mZmxvYWRfY3R4Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCW1lbWNweShjdHgtPml2ICsgVExT X0NJUEhFUl9BRVNfR0NNXzEyOF9TQUxUX1NJWkUsIGl2LA0KPiA+IGl2X3NpemUpOw0KPiA+ICsN Cj4gPiArCWN0eC0+cmVjX3NlcV9zaXplID0gcmVjX3NlcV9zaXplOw0KPiA+ICsJY3R4LT5yZWNf c2VxID0ga21hbGxvYyhyZWNfc2VxX3NpemUsIEdGUF9LRVJORUwpOw0KPiA+ICsJaWYgKCFjdHgt PnJlY19zZXEpIHsNCj4gPiArCQlyYyA9IC1FTk9NRU07DQo+ID4gKwkJZ290byBmcmVlX2l2Ow0K PiA+ICsJfQ0KPiA+ICsJbWVtY3B5KGN0eC0+cmVjX3NlcSwgcmVjX3NlcSwgcmVjX3NlcV9zaXpl KTsNCj4gPiArDQo+ID4gKwlyYyA9IHRsc19zd19mYWxsYmFja19pbml0KHNrLCBvZmZsb2FkX2N0 eCwgY3J5cHRvX2luZm8pOw0KPiA+ICsJaWYgKHJjKQ0KPiA+ICsJCWdvdG8gZnJlZV9yZWNfc2Vx Ow0KPiA+ICsNCj4gPiArCS8qIHN0YXJ0IGF0IHJlY19zZXEgLSAxIHRvIGFjY291bnQgZm9yIHRo ZSBzdGFydCBtYXJrZXINCj4gPiByZWNvcmQgKi8NCj4gPiArCW1lbWNweSgmcmNkX3NuLCBjdHgt PnJlY19zZXEsIHNpemVvZihyY2Rfc24pKTsNCj4gPiArCW9mZmxvYWRfY3R4LT51bmFja2VkX3Jl Y29yZF9zbiA9IGJlNjRfdG9fY3B1KHJjZF9zbikgLSAxOw0KPiA+ICsNCj4gPiArCXN0YXJ0X21h cmtlcl9yZWNvcmQtPmVuZF9zZXEgPSB0Y3Bfc2soc2spLT53cml0ZV9zZXE7DQo+ID4gKwlzdGFy dF9tYXJrZXJfcmVjb3JkLT5sZW4gPSAwOw0KPiA+ICsJc3RhcnRfbWFya2VyX3JlY29yZC0+bnVt X2ZyYWdzID0gMDsNCj4gPiArDQo+ID4gKwlJTklUX0xJU1RfSEVBRCgmb2ZmbG9hZF9jdHgtPnJl Y29yZHNfbGlzdCk7DQo+ID4gKwlsaXN0X2FkZF90YWlsKCZzdGFydF9tYXJrZXJfcmVjb3JkLT5s aXN0LCAmb2ZmbG9hZF9jdHgtDQo+ID4gPnJlY29yZHNfbGlzdCk7DQo+ID4gKwlzcGluX2xvY2tf aW5pdCgmb2ZmbG9hZF9jdHgtPmxvY2spOw0KPiA+ICsNCj4gPiArCXN0YXRpY19icmFuY2hfaW5j KCZjbGVhbl9hY2tlZF9kYXRhX2VuYWJsZWQpOw0KPiA+ICsJaW5ldF9jc2soc2spLT5pY3NrX2Ns ZWFuX2Fja2VkID0gJnRsc19pY3NrX2NsZWFuX2Fja2VkOw0KPiA+ICsJY3R4LT5wdXNoX3BlbmRp bmdfcmVjb3JkID0gdGxzX2RldmljZV9wdXNoX3BlbmRpbmdfcmVjb3JkOw0KPiA+ICsJb2ZmbG9h ZF9jdHgtPnNrX2Rlc3RydWN0ID0gc2stPnNrX2Rlc3RydWN0Ow0KPiA+ICsNCj4gPiArCS8qIFRM UyBvZmZsb2FkIGlzIGdyZWF0bHkgc2ltcGxpZmllZCBpZiB3ZSBkb24ndCBzZW5kDQo+ID4gKwkg KiBTS0JzIHdoZXJlIG9ubHkgcGFydCBvZiB0aGUgcGF5bG9hZCBuZWVkcyB0byBiZQ0KPiA+IGVu Y3J5cHRlZC4NCj4gPiArCSAqIFNvIG1hcmsgdGhlIGxhc3Qgc2tiIGluIHRoZSB3cml0ZSBxdWV1 ZSBhcyBlbmQgb2YNCj4gPiByZWNvcmQuDQo+ID4gKwkgKi8NCj4gPiArCXNrYiA9IHRjcF93cml0 ZV9xdWV1ZV90YWlsKHNrKTsNCj4gPiArCWlmIChza2IpDQo+ID4gKwkJVENQX1NLQl9DQihza2Ip LT5lb3IgPSAxOw0KPiA+ICsNCj4gPiArCXJlZmNvdW50X3NldCgmY3R4LT5yZWZjb3VudCwgMSk7 DQo+ID4gKw0KPiA+ICsJLyogV2Ugc3VwcG9ydCBzdGFydGluZyBvZmZsb2FkIG9uIG11bHRpcGxl IHNvY2tldHMNCj4gPiArCSAqIGNvbmN1cnJlbnRseSwgc28gd2Ugb25seSBuZWVkIGEgcmVhZCBs b2NrIGhlcmUuDQo+ID4gKwkgKiBUaGlzIGxvY2sgbXVzdCBwcmVjZWVkIGdldF9uZXRkZXZfZm9y X3NvY2sgdG8gcHJldmVudA0KPiA+IHJhY2VzIGJldHdlZW4NCj4gPiArCSAqIE5FVERFVl9ET1dO IGFuZCBzZXRzb2Nrb3B0Lg0KPiA+ICsJICovDQo+ID4gKwlkb3duX3JlYWQoJmRldmljZV9vZmZs b2FkX2xvY2spOw0KPiA+ICsJbmV0ZGV2ID0gZ2V0X25ldGRldl9mb3Jfc29jayhzayk7DQo+ID4g KwlpZiAoIW5ldGRldikgew0KPiA+ICsJCXByX2Vycl9yYXRlbGltaXRlZCgiJXM6IG5ldGRldiBu b3QgZm91bmRcbiIsDQo+ID4gX19mdW5jX18pOw0KPiA+ICsJCXJjID0gLUVJTlZBTDsNCj4gPiAr CQlnb3RvIHJlbGVhc2VfbG9jazsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAoIShuZXRkZXYt PmZlYXR1cmVzICYgTkVUSUZfRl9IV19UTFNfVFgpKSB7DQo+ID4gKwkJcmMgPSAtRU5PVFNVUFA7 DQo+ID4gKwkJZ290byByZWxlYXNlX25ldGRldjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBB dm9pZCBvZmZsb2FkaW5nIGlmIHRoZSBkZXZpY2UgaXMgZG93bg0KPiA+ICsJICogV2UgZG9uJ3Qg d2FudCB0byBvZmZsb2FkIG5ldyBmbG93cyBhZnRlcg0KPiA+ICsJICogdGhlIE5FVERFVl9ET1dO IGV2ZW50DQo+ID4gKwkgKi8NCj4gPiArCWlmICghKG5ldGRldi0+ZmxhZ3MgJiBJRkZfVVApKSB7 DQo+ID4gKwkJcmMgPSAtRUlOVkFMOw0KPiA+ICsJCWdvdG8gcmVsZWFzZV9uZXRkZXY7DQo+ID4g Kwl9DQo+ID4gKw0KPiA+ICsJY3R4LT5wcml2X2N0eCA9IG9mZmxvYWRfY3R4Ow0KPiA+ICsJcmMg PSBhdHRhY2hfc29ja190b19uZXRkZXYoc2ssIG5ldGRldiwgY3R4KTsNCj4gPiArCWlmIChyYykN Cj4gPiArCQlnb3RvIHJlbGVhc2VfbmV0ZGV2Ow0KPiA+ICsNCj4gPiArCWN0eC0+bmV0ZGV2ID0g bmV0ZGV2Ow0KPiA+ICsNCj4gPiArCXNwaW5fbG9ja19pcnEoJnRsc19kZXZpY2VfbG9jayk7DQo+ ID4gKwlsaXN0X2FkZF90YWlsKCZjdHgtPmxpc3QsICZ0bHNfZGV2aWNlX2xpc3QpOw0KPiA+ICsJ c3Bpbl91bmxvY2tfaXJxKCZ0bHNfZGV2aWNlX2xvY2spOw0KPiA+ICsNCj4gPiArCXNrLT5za192 YWxpZGF0ZV94bWl0X3NrYiA9IHRsc192YWxpZGF0ZV94bWl0X3NrYjsNCj4gPiArCS8qIGZvbGxv d2luZyB0aGlzIGFzc2lnbm1lbnQgdGxzX2lzX3NrX3R4X2RldmljZV9vZmZsb2FkZWQNCj4gPiAr CSAqIHdpbGwgcmV0dXJuIHRydWUgYW5kIHRoZSBjb250ZXh0IG1pZ2h0IGJlIGFjY2Vzc2VkDQo+ ID4gKwkgKiBieSB0aGUgbmV0ZGV2J3MgeG1pdCBmdW5jdGlvbi4NCj4gPiArCSAqLw0KPiA+ICsJ c21wX3N0b3JlX3JlbGVhc2UoJnNrLT5za19kZXN0cnVjdCwNCj4gPiArCQkJICAmdGxzX2Rldmlj ZV9za19kZXN0cnVjdCk7DQo+ID4gKwl1cF9yZWFkKCZkZXZpY2Vfb2ZmbG9hZF9sb2NrKTsNCj4g PiArCWdvdG8gb3V0Ow0KPiA+ICsNCj4gPiArcmVsZWFzZV9uZXRkZXY6DQo+ID4gKwlkZXZfcHV0 KG5ldGRldik7DQo+ID4gK3JlbGVhc2VfbG9jazoNCj4gPiArCXVwX3JlYWQoJmRldmljZV9vZmZs b2FkX2xvY2spOw0KPiA+ICsJc3RhdGljX2JyYW5jaF9kZWMoJmNsZWFuX2Fja2VkX2RhdGFfZW5h YmxlZCk7DQo+ID4gKwljcnlwdG9fZnJlZV9hZWFkKG9mZmxvYWRfY3R4LT5hZWFkX3NlbmQpOw0K PiA+ICtmcmVlX3JlY19zZXE6DQo+ID4gKwlrZnJlZShjdHgtPnJlY19zZXEpOw0KPiA+ICtmcmVl X2l2Og0KPiA+ICsJa2ZyZWUoY3R4LT5pdik7DQo+ID4gK2ZyZWVfb2ZmbG9hZF9jdHg6DQo+ID4g KwlrZnJlZShvZmZsb2FkX2N0eCk7DQo+ID4gKwljdHgtPnByaXZfY3R4ID0gTlVMTDsNCj4gPiAr ZnJlZV9tYXJrZXJfcmVjb3JkOg0KPiA+ICsJa2ZyZWUoc3RhcnRfbWFya2VyX3JlY29yZCk7DQo+ ID4gK291dDoNCj4gPiArCXJldHVybiByYzsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlu dCB0bHNfZGV2aWNlX2FwaV9jaGVjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQ0KPiA+ICt7DQo+ ID4gKwlpZiAoKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX1RMU19UWCkgJiYgIWRldi0NCj4g PiA+dGxzZGV2X29wcykNCj4gPiArCQlyZXR1cm4gTk9USUZZX0JBRDsNCj4gDQo+IFlvdSBoYXZl IGFsbW9zdCB0aGUgc2FtZSBjaGVjayBpbiB0bHNfZGV2aWNlX2Rvd24oKS4NCj4gDQo+IFdoeSBj YW4ndCBqdXN0IGZpbHRlciBhbGwgIShkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9IV19UTFNfVFgp DQo+IGRldmljZXMNCj4gaW4gdGxzX2Rldl9ldmVudCgpPw0KPiANCj4gSSBnYXZlIHRoZSBjb2Rl IGV4YW1wbGUgaW4gY29tbWVudCB0byBwcmV2aW91cyBwYXRjaC4NCj4gDQo+ID4gKw0KPiA+ICsJ cmV0dXJuIE5PVElGWV9ET05FOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHRsc19k ZXZpY2VfZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1 Y3QgdGxzX2NvbnRleHQgKmN0eCwgKnRtcDsNCj4gPiArCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsN Cj4gPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ID4gKw0KPiA+ICsJaWYgKCEobmV0ZGV2LT5m ZWF0dXJlcyAmIE5FVElGX0ZfSFdfVExTX1RYKSkNCj4gPiArCQlyZXR1cm4gTk9USUZZX0RPTkU7 DQo+ID4gKw0KPiA+ICsJSU5JVF9MSVNUX0hFQUQoJmxpc3QpOw0KPiANCj4gVGhpcyBzaG91bGQg anVzdCBiZSBkZWNsYXJhdGVkIGFzOg0KPiANCj4gCUxJU1RfSEVBRChsaXN0KTsNCj4gDQo+IFRo aXMgd2lsbCBzYXZlIHVzIDIgbGluZXMuDQo+IA0KPiA+ICsNCj4gPiArCS8qIFJlcXVlc3QgYSB3 cml0ZSBsb2NrIHRvIGJsb2NrIG5ldyBvZmZsb2FkIGF0dGVtcHRzDQo+ID4gKwkgKi8NCj4gPiAr CWRvd25fd3JpdGUoJmRldmljZV9vZmZsb2FkX2xvY2spOw0KPiA+ICsNCj4gPiArCXNwaW5fbG9j a19pcnFzYXZlKCZ0bHNfZGV2aWNlX2xvY2ssIGZsYWdzKTsNCj4gPiArCWxpc3RfZm9yX2VhY2hf ZW50cnlfc2FmZShjdHgsIHRtcCwgJnRsc19kZXZpY2VfbGlzdCwgbGlzdCkNCj4gPiB7DQo+ID4g KwkJaWYgKGN0eC0+bmV0ZGV2ICE9IG5ldGRldiB8fA0KPiA+ICsJCSAgICAhcmVmY291bnRfaW5j X25vdF96ZXJvKCZjdHgtPnJlZmNvdW50KSkNCj4gPiArCQkJY29udGludWU7DQo+ID4gKw0KPiA+ ICsJCWxpc3RfbW92ZSgmY3R4LT5saXN0LCAmbGlzdCk7DQo+ID4gKwl9DQo+ID4gKwlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZ0bHNfZGV2aWNlX2xvY2ssIGZsYWdzKTsNCj4gPiArDQo+ID4gKwls aXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY3R4LCB0bXAsICZsaXN0LCBsaXN0KQl7DQo+ID4gKwkJ bmV0ZGV2LT50bHNkZXZfb3BzLT50bHNfZGV2X2RlbChuZXRkZXYsIGN0eCwNCj4gPiArCQkJCQkJ VExTX09GRkxPQURfQ1RYX0RJDQo+ID4gUl9UWCk7DQo+ID4gKwkJY3R4LT5uZXRkZXYgPSBOVUxM Ow0KPiA+ICsJCWRldl9wdXQobmV0ZGV2KTsNCj4gPiArCQlsaXN0X2RlbF9pbml0KCZjdHgtPmxp c3QpOw0KPiA+ICsNCj4gPiArCQlpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KCZjdHgtPnJlZmNv dW50KSkNCj4gPiArCQkJdGxzX2RldmljZV9mcmVlX2N0eChjdHgpOw0KPiA+ICsJfQ0KPiA+ICsN Cj4gPiArCXVwX3dyaXRlKCZkZXZpY2Vfb2ZmbG9hZF9sb2NrKTsNCj4gPiArDQo+ID4gKwlmbHVz aF93b3JrKCZ0bHNfZGV2aWNlX2djX3dvcmspOw0KPiA+ICsNCj4gPiArCXJldHVybiBOT1RJRllf RE9ORTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB0bHNfZGV2X2V2ZW50KHN0cnVj dCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQNCj4gPiBsb25nIGV2ZW50LA0KPiA+ICsJ CQkgdm9pZCAqcHRyKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0 ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7DQo+ID4gKw0KPiA+ICsJc3dpdGNoIChldmVu dCkgew0KPiA+ICsJY2FzZSBORVRERVZfUkVHSVNURVI6DQo+ID4gKwljYXNlIE5FVERFVl9GRUFU X0NIQU5HRToNCj4gPiArCQlyZXR1cm4gdGxzX2RldmljZV9hcGlfY2hlY2soZGV2KTsNCj4gPiAr CWNhc2UgTkVUREVWX0RPV046DQo+ID4gKwkJcmV0dXJuIHRsc19kZXZpY2VfZG93bihkZXYpOw0K PiA+ICsJfQ0KPiA+ICsJcmV0dXJuIE5PVElGWV9ET05FOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHRsc19kZXZfbm90aWZpZXIgPSB7DQo+ID4gKwku bm90aWZpZXJfY2FsbAk9IHRsc19kZXZfZXZlbnQsDQo+ID4gK307DQo+ID4gKw0KPiA+ICt2b2lk IF9faW5pdCB0bHNfZGV2aWNlX2luaXQodm9pZCkNCj4gPiArew0KPiA+ICsJcmVnaXN0ZXJfbmV0 ZGV2aWNlX25vdGlmaWVyKCZ0bHNfZGV2X25vdGlmaWVyKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr dm9pZCBfX2V4aXQgdGxzX2RldmljZV9jbGVhbnVwKHZvaWQpDQo+ID4gK3sNCj4gPiArCXVucmVn aXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZ0bHNfZGV2X25vdGlmaWVyKTsNCj4gPiArCWZsdXNo X3dvcmsoJnRsc19kZXZpY2VfZ2Nfd29yayk7DQo+ID4gK30NCj4gPiBkaWZmIC0tZ2l0IGEvbmV0 L3Rscy90bHNfZGV2aWNlX2ZhbGxiYWNrLmMNCj4gPiBiL25ldC90bHMvdGxzX2RldmljZV9mYWxs YmFjay5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAu Ljg0M2M3MzMxY2ZjNA0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9uZXQvdGxzL3Rsc19k ZXZpY2VfZmFsbGJhY2suYw0KPiA+IEBAIC0wLDAgKzEsNDE1IEBADQo+ID4gKy8qIENvcHlyaWdo dCAoYykgMjAxOCwgTWVsbGFub3ggVGVjaG5vbG9naWVzIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo+ ID4gKyAqDQo+ID4gKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBh IGNob2ljZSBvZiBvbmUgb2YgdHdvDQo+ID4gKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2Ug dG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQ0KPiA+IEdOVQ0KPiA+ICsgKiBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhl IGZpbGUNCj4gPiArICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3Vy Y2UgdHJlZSwgb3IgdGhlDQo+ID4gKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6DQo+ ID4gKyAqDQo+ID4gKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yDQo+ID4gKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZQ0KPiA+IGZvbGxvd2luZw0KPiA+ICsgKiAg ICAgY29uZGl0aW9ucyBhcmUgbWV0Og0KPiA+ICsgKg0KPiA+ICsgKiAgICAgIC0gUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQ0KPiA+ICsgKiAgICAg ICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZQ0KPiA+ IGZvbGxvd2luZw0KPiA+ICsgKiAgICAgICAgZGlzY2xhaW1lci4NCj4gPiArICoNCj4gPiArICog ICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg YWJvdmUNCj4gPiArICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUNCj4gPiBmb2xsb3dpbmcNCj4gPiArICogICAgICAgIGRpc2NsYWltZXIg aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscw0KPiA+ICsgKiAgICAg ICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KPiA+ICsgKg0KPiA+ICsgKiBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwNCj4gPiArICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVE IFRPIFRIRSBXQVJSQU5USUVTDQo+ID4gT0YNCj4gPiArICogTUVSQ0hBTlRBQklMSVRZLCBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQNCj4gPiArICogTk9OSU5GUklOR0VNRU5U LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQNCj4gPiBIT0xERVJT DQo+ID4gKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJ TElUWSwgV0hFVEhFUiBJTg0KPiA+IEFODQo+ID4gKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9S VCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SDQo+ID4gSU4NCj4gPiArICog Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdT IElODQo+ID4gVEhFDQo+ID4gKyAqIFNPRlRXQVJFLg0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNp bmNsdWRlIDxuZXQvdGxzLmg+DQo+ID4gKyNpbmNsdWRlIDxjcnlwdG8vYWVhZC5oPg0KPiA+ICsj aW5jbHVkZSA8Y3J5cHRvL3NjYXR0ZXJ3YWxrLmg+DQo+ID4gKyNpbmNsdWRlIDxuZXQvaXA2X2No ZWNrc3VtLmg+DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBjaGFpbl90b193YWxrKHN0cnVjdCBz Y2F0dGVybGlzdCAqc2csIHN0cnVjdA0KPiA+IHNjYXR0ZXJfd2FsayAqd2FsaykNCj4gPiArew0K PiA+ICsJc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMgPSB3YWxrLT5zZzsNCj4gPiArCWludCBkaWZm ID0gd2Fsay0+b2Zmc2V0IC0gc3JjLT5vZmZzZXQ7DQo+ID4gKw0KPiA+ICsJc2dfc2V0X3BhZ2Uo c2csIHNnX3BhZ2Uoc3JjKSwNCj4gPiArCQkgICAgc3JjLT5sZW5ndGggLSBkaWZmLCB3YWxrLT5v ZmZzZXQpOw0KPiA+ICsNCj4gPiArCXNjYXR0ZXJ3YWxrX2NyeXB0b19jaGFpbihzZywgc2dfbmV4 dChzcmMpLCAwLCAyKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB0bHNfZW5jX3Jl Y29yZChzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICphZWFkX3JlcSwNCj4gPiArCQkJICBzdHJ1Y3QgY3J5 cHRvX2FlYWQgKmFlYWQsIGNoYXIgKmFhZCwNCj4gPiBjaGFyICppdiwNCj4gPiArCQkJICBfX2Jl NjQgcmNkX3NuLCBzdHJ1Y3Qgc2NhdHRlcl93YWxrICppbiwNCj4gPiArCQkJICBzdHJ1Y3Qgc2Nh dHRlcl93YWxrICpvdXQsIGludCAqaW5fbGVuKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3Qgc2NhdHRl cmxpc3Qgc2dfaW5bM107DQo+ID4gKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dfb3V0WzNdOw0KPiA+ ICsJdW5zaWduZWQgY2hhciBidWZbVExTX0hFQURFUl9TSVpFICsNCj4gPiBUTFNfQ0lQSEVSX0FF U19HQ01fMTI4X0lWX1NJWkVdOw0KPiANCj4gUmV2ZXJzZSBDaHJpc3RtYXMgdHJlZS4NCj4gDQo+ ID4gKwl1MTYgbGVuOw0KPiA+ICsJaW50IHJjOw0KPiA+ICsNCj4gPiArCWxlbiA9IG1pbl90KGlu dCwgKmluX2xlbiwgQVJSQVlfU0laRShidWYpKTsNCj4gPiArDQo+ID4gKwlzY2F0dGVyd2Fsa19j b3B5Y2h1bmtzKGJ1ZiwgaW4sIGxlbiwgMCk7DQo+ID4gKwlzY2F0dGVyd2Fsa19jb3B5Y2h1bmtz KGJ1Ziwgb3V0LCBsZW4sIDEpOw0KPiA+ICsNCj4gPiArCSppbl9sZW4gLT0gbGVuOw0KPiA+ICsJ aWYgKCEqaW5fbGVuKQ0KPiA+ICsJCXJldHVybiAwOw0KPiA+ICsNCj4gPiArCXNjYXR0ZXJ3YWxr X3BhZ2Vkb25lKGluLCAwLCAxKTsNCj4gPiArCXNjYXR0ZXJ3YWxrX3BhZ2Vkb25lKG91dCwgMSwg MSk7DQo+ID4gKw0KPiA+ICsJbGVuID0gYnVmWzRdIHwgKGJ1ZlszXSA8PCA4KTsNCj4gPiArCWxl biAtPSBUTFNfQ0lQSEVSX0FFU19HQ01fMTI4X0lWX1NJWkU7DQo+ID4gKw0KPiA+ICsJdGxzX21h a2VfYWFkKGFhZCwgbGVuIC0gVExTX0NJUEhFUl9BRVNfR0NNXzEyOF9UQUdfU0laRSwNCj4gPiAr CQkgICAgIChjaGFyICopJnJjZF9zbiwgc2l6ZW9mKHJjZF9zbiksIGJ1ZlswXSk7DQo+ID4gKw0K PiA+ICsJbWVtY3B5KGl2ICsgVExTX0NJUEhFUl9BRVNfR0NNXzEyOF9TQUxUX1NJWkUsIGJ1ZiAr DQo+ID4gVExTX0hFQURFUl9TSVpFLA0KPiA+ICsJICAgICAgIFRMU19DSVBIRVJfQUVTX0dDTV8x MjhfSVZfU0laRSk7DQo+ID4gKw0KPiA+ICsJc2dfaW5pdF90YWJsZShzZ19pbiwgQVJSQVlfU0la RShzZ19pbikpOw0KPiA+ICsJc2dfaW5pdF90YWJsZShzZ19vdXQsIEFSUkFZX1NJWkUoc2dfb3V0 KSk7DQo+ID4gKwlzZ19zZXRfYnVmKHNnX2luLCBhYWQsIFRMU19BQURfU1BBQ0VfU0laRSk7DQo+ ID4gKwlzZ19zZXRfYnVmKHNnX291dCwgYWFkLCBUTFNfQUFEX1NQQUNFX1NJWkUpOw0KPiA+ICsJ Y2hhaW5fdG9fd2FsayhzZ19pbiArIDEsIGluKTsNCj4gPiArCWNoYWluX3RvX3dhbGsoc2dfb3V0 ICsgMSwgb3V0KTsNCj4gPiArDQo+ID4gKwkqaW5fbGVuIC09IGxlbjsNCj4gPiArCWlmICgqaW5f bGVuIDwgMCkgew0KPiA+ICsJCSppbl9sZW4gKz0gVExTX0NJUEhFUl9BRVNfR0NNXzEyOF9UQUdf U0laRTsNCj4gPiArCQlpZiAoKmluX2xlbiA8IDApDQo+ID4gKwkJLyogdGhlIGlucHV0IGJ1ZmZl ciBkb2Vzbid0IGNvbnRhaW4gdGhlIGVudGlyZQ0KPiA+IHJlY29yZC4NCj4gPiArCQkgKiB0cmlt IGxlbiBhY2NvcmRpbmdseS4gVGhlIHJlc3VsdGluZw0KPiA+IGF1dGhlbnRpY2F0aW9uIHRhZw0K PiA+ICsJCSAqIHdpbGwgY29udGFpbiBnYXJiYWdlLiBidXQgd2UgZG9uJ3QgY2FyZSBhcyB3ZQ0K PiA+IHdvbid0DQo+ID4gKwkJICogaW5jbHVkZSBhbnkgb2YgaXQgaW4gdGhlIG91dHB1dCBza2IN Cj4gPiArCQkgKiBOb3RlIHRoYXQgd2UgYXNzdW1lIHRoZSBvdXRwdXQgYnVmZmVyIGxlbmd0aA0K PiA+ICsJCSAqIGlzIGxhcmdlciB0aGVuIGlucHV0IGJ1ZmZlciBsZW5ndGggKyB0YWcgc2l6ZQ0K PiA+ICsJCSAqLw0KPiA+ICsJCQlsZW4gKz0gKmluX2xlbjsNCj4gPiArDQo+ID4gKwkJKmluX2xl biA9IDA7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKCppbl9sZW4pIHsNCj4gPiArCQlzY2F0 dGVyd2Fsa19jb3B5Y2h1bmtzKE5VTEwsIGluLCBsZW4sIDIpOw0KPiA+ICsJCXNjYXR0ZXJ3YWxr X3BhZ2Vkb25lKGluLCAwLCAxKTsNCj4gPiArCQlzY2F0dGVyd2Fsa19jb3B5Y2h1bmtzKE5VTEws IG91dCwgbGVuLCAyKTsNCj4gPiArCQlzY2F0dGVyd2Fsa19wYWdlZG9uZShvdXQsIDEsIDEpOw0K PiA+ICsJfQ0KPiA+ICsNCj4gPiArCWxlbiAtPSBUTFNfQ0lQSEVSX0FFU19HQ01fMTI4X1RBR19T SVpFOw0KPiA+ICsJYWVhZF9yZXF1ZXN0X3NldF9jcnlwdChhZWFkX3JlcSwgc2dfaW4sIHNnX291 dCwgbGVuLCBpdik7DQo+ID4gKw0KPiA+ICsJcmMgPSBjcnlwdG9fYWVhZF9lbmNyeXB0KGFlYWRf cmVxKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gcmM7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyB2b2lkIHRsc19pbml0X2FlYWRfcmVxdWVzdChzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICphZWFkX3Jl cSwNCj4gPiArCQkJCSAgc3RydWN0IGNyeXB0b19hZWFkICphZWFkKQ0KPiA+ICt7DQo+ID4gKwlh ZWFkX3JlcXVlc3Rfc2V0X3RmbShhZWFkX3JlcSwgYWVhZCk7DQo+ID4gKwlhZWFkX3JlcXVlc3Rf c2V0X2FkKGFlYWRfcmVxLCBUTFNfQUFEX1NQQUNFX1NJWkUpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtzdGF0aWMgc3RydWN0IGFlYWRfcmVxdWVzdCAqdGxzX2FsbG9jX2FlYWRfcmVxdWVzdChzdHJ1 Y3QNCj4gPiBjcnlwdG9fYWVhZCAqYWVhZCwNCj4gPiArCQkJCQkJICAgZ2ZwX3QgZmxhZ3MpDQo+ ID4gK3sNCj4gPiArCXVuc2lnbmVkIGludCByZXFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYWVhZF9y ZXF1ZXN0KSArDQo+ID4gKwkJY3J5cHRvX2FlYWRfcmVxc2l6ZShhZWFkKTsNCj4gPiArCXN0cnVj dCBhZWFkX3JlcXVlc3QgKmFlYWRfcmVxOw0KPiA+ICsNCj4gPiArCWFlYWRfcmVxID0ga3phbGxv YyhyZXFfc2l6ZSwgZmxhZ3MpOw0KPiA+ICsJaWYgKCFhZWFkX3JlcSkNCj4gPiArCQlyZXR1cm4g TlVMTDsNCj4gPiArDQo+ID4gKwl0bHNfaW5pdF9hZWFkX3JlcXVlc3QoYWVhZF9yZXEsIGFlYWQp Ow0KPiA+ICsJcmV0dXJuIGFlYWRfcmVxOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50 IHRsc19lbmNfcmVjb3JkcyhzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICphZWFkX3JlcSwNCj4gPiArCQkJ ICAgc3RydWN0IGNyeXB0b19hZWFkICphZWFkLCBzdHJ1Y3QNCj4gPiBzY2F0dGVybGlzdCAqc2df aW4sDQo+ID4gKwkJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dfb3V0LCBjaGFyICphYWQsDQo+ ID4gY2hhciAqaXYsDQo+ID4gKwkJCSAgIHU2NCByY2Rfc24sIGludCBsZW4pDQo+ID4gK3sNCj4g PiArCXN0cnVjdCBzY2F0dGVyX3dhbGsgaW47DQo+ID4gKwlzdHJ1Y3Qgc2NhdHRlcl93YWxrIG91 dDsNCj4gDQo+IFdoeSBkbyBub3QgZGVjbGFyZSB0aGVtIGJvdGggaW4gYSBzaW5nbGUgbGluZT8N Cj4gDQo+ID4gKwlpbnQgcmM7DQo+ID4gKw0KPiA+ICsJc2NhdHRlcndhbGtfc3RhcnQoJmluLCBz Z19pbik7DQo+ID4gKwlzY2F0dGVyd2Fsa19zdGFydCgmb3V0LCBzZ19vdXQpOw0KPiA+ICsNCj4g PiArCWRvIHsNCj4gPiArCQlyYyA9IHRsc19lbmNfcmVjb3JkKGFlYWRfcmVxLCBhZWFkLCBhYWQs IGl2LA0KPiA+ICsJCQkJICAgIGNwdV90b19iZTY0KHJjZF9zbiksICZpbiwNCj4gPiAmb3V0LCAm bGVuKTsNCj4gPiArCQlyY2Rfc24rKzsNCj4gPiArDQo+ID4gKwl9IHdoaWxlIChyYyA9PSAwICYm IGxlbik7DQo+ID4gKw0KPiA+ICsJc2NhdHRlcndhbGtfZG9uZSgmaW4sIDAsIDApOw0KPiA+ICsJ c2NhdHRlcndhbGtfZG9uZSgmb3V0LCAxLCAwKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gcmM7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfY2hrc3VtKHN0cnVj dCBza19idWZmICpza2IsIGludCBoZWFkbG4pDQo+ID4gK3sNCj4gPiArCS8qIENhbid0IHVzZSBp Y3NrLT5pY3NrX2FmX29wcy0+c2VuZF9jaGVjayBoZXJlIGJlY2F1c2UNCj4gPiB0aGUgaXAgYWRk cmVzc2VzDQo+ID4gKwkgKiBtaWdodCBoYXZlIGJlZW4gY2hhbmdlZCBieSBOQVQuDQo+ID4gKwkg Ki8NCj4gPiArDQo+ID4gKwljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaXB2Nmg7DQo+ID4gKwljb25z dCBzdHJ1Y3QgaXBoZHIgKmlwaDsNCj4gPiArCXN0cnVjdCB0Y3BoZHIgKnRoID0gdGNwX2hkcihz a2IpOw0KPiA+ICsJaW50IGRhdGFsZW4gPSBza2ItPmxlbiAtIGhlYWRsbjsNCj4gPiArDQo+ID4g KwkvKiBXZSBvbmx5IGNoYW5nZWQgdGhlIHBheWxvYWQgc28gaWYgd2UgYXJlIHVzaW5nIHBhcnRp YWwNCj4gPiB3ZSBkb24ndA0KPiA+ICsJICogbmVlZCB0byB1cGRhdGUgYW55dGhpbmcuDQo+ID4g KwkgKi8NCj4gPiArCWlmIChsaWtlbHkoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElB TCkpDQo+ID4gKwkJcmV0dXJuOw0KPiA+ICsNCj4gPiArCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tT VU1fUEFSVElBTDsNCj4gPiArCXNrYi0+Y3N1bV9zdGFydCA9IHNrYl90cmFuc3BvcnRfaGVhZGVy KHNrYikgLSBza2ItPmhlYWQ7DQo+ID4gKwlza2ItPmNzdW1fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3Ry dWN0IHRjcGhkciwgY2hlY2spOw0KPiA+ICsNCj4gPiArCWlmIChza2ItPnNrLT5za19mYW1pbHkg PT0gQUZfSU5FVDYpIHsNCj4gPiArCQlpcHY2aCA9IGlwdjZfaGRyKHNrYik7DQo+ID4gKwkJdGgt PmNoZWNrID0gfmNzdW1faXB2Nl9tYWdpYygmaXB2NmgtPnNhZGRyLA0KPiA+ICZpcHY2aC0+ZGFk ZHIsDQo+ID4gKwkJCQkJICAgICBkYXRhbGVuLCBJUFBST1RPX1RDUCwNCj4gPiAwKTsNCj4gPiAr CX0gZWxzZSB7DQo+ID4gKwkJaXBoID0gaXBfaGRyKHNrYik7DQo+ID4gKwkJdGgtPmNoZWNrID0g fmNzdW1fdGNwdWRwX21hZ2ljKGlwaC0+c2FkZHIsIGlwaC0NCj4gPiA+ZGFkZHIsIGRhdGFsZW4s DQo+ID4gKwkJCQkJICAgICAgIElQUFJPVE9fVENQLCAwKTsNCj4gPiArCX0NCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIHZvaWQgY29tcGxldGVfc2tiKHN0cnVjdCBza19idWZmICpuc2tiLCBz dHJ1Y3Qgc2tfYnVmZg0KPiA+ICpza2IsIGludCBoZWFkbG4pDQo+ID4gK3sNCj4gPiArCXNrYl9j b3B5X2hlYWRlcihuc2tiLCBza2IpOw0KPiA+ICsNCj4gPiArCXNrYl9wdXQobnNrYiwgc2tiLT5s ZW4pOw0KPiA+ICsJbWVtY3B5KG5za2ItPmRhdGEsIHNrYi0+ZGF0YSwgaGVhZGxuKTsNCj4gPiAr CXVwZGF0ZV9jaGtzdW0obnNrYiwgaGVhZGxuKTsNCj4gPiArDQo+ID4gKwluc2tiLT5kZXN0cnVj dG9yID0gc2tiLT5kZXN0cnVjdG9yOw0KPiA+ICsJbnNrYi0+c2sgPSBza2ItPnNrOw0KPiA+ICsJ c2tiLT5kZXN0cnVjdG9yID0gTlVMTDsNCj4gPiArCXNrYi0+c2sgPSBOVUxMOw0KPiA+ICsJcmVm Y291bnRfYWRkKG5za2ItPnRydWVzaXplIC0gc2tiLT50cnVlc2l6ZSwNCj4gPiArCQkgICAgICZu c2tiLT5zay0+c2tfd21lbV9hbGxvYyk7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIFRoaXMgZnVu Y3Rpb24gbWF5IGJlIGNhbGxlZCBhZnRlciB0aGUgdXNlciBzb2NrZXQgaXMgYWxyZWFkeQ0KPiA+ ICsgKiBjbG9zZWQgc28gbWFrZSBzdXJlIHdlIGRvbid0IHVzZSBhbnl0aGluZyBmcmVlZCBkdXJp bmcNCj4gPiArICogdGxzX3NrX3Byb3RvX2Nsb3NlIGhlcmUNCj4gPiArICovDQo+ID4gK3N0YXRp YyBzdHJ1Y3Qgc2tfYnVmZiAqdGxzX3N3X2ZhbGxiYWNrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0 DQo+ID4gc2tfYnVmZiAqc2tiKQ0KPiA+ICt7DQo+ID4gKwlpbnQgdGNwX2hlYWRlcl9zaXplID0g dGNwX2hkcmxlbihza2IpOw0KPiA+ICsJaW50IHRjcF9wYXlsb2FkX29mZnNldCA9IHNrYl90cmFu c3BvcnRfb2Zmc2V0KHNrYikgKw0KPiA+IHRjcF9oZWFkZXJfc2l6ZTsNCj4gPiArCWludCBwYXls b2FkX2xlbiA9IHNrYi0+bGVuIC0gdGNwX3BheWxvYWRfb2Zmc2V0Ow0KPiA+ICsJc3RydWN0IHRs c19jb250ZXh0ICp0bHNfY3R4ID0gdGxzX2dldF9jdHgoc2spOw0KPiA+ICsJc3RydWN0IHRsc19v ZmZsb2FkX2NvbnRleHQgKmN0eCA9DQo+ID4gdGxzX29mZmxvYWRfY3R4KHRsc19jdHgpOw0KPiA+ ICsJaW50IHJlbWFpbmluZywgYnVmX2xlbiwgcmVzeW5jX3NncywgcmMsIGkgPSAwOw0KPiA+ICsJ dm9pZCAqYnVmLCAqZHVtbXlfYnVmLCAqaXYsICphYWQ7DQo+ID4gKwlzdHJ1Y3Qgc2NhdHRlcmxp c3QgKnNnX2luOw0KPiA+ICsJc3RydWN0IHNjYXR0ZXJsaXN0IHNnX291dFszXTsNCj4gPiArCXUz MiB0Y3Bfc2VxID0gbnRvaGwodGNwX2hkcihza2IpLT5zZXEpOw0KPiA+ICsJc3RydWN0IGFlYWRf cmVxdWVzdCAqYWVhZF9yZXE7DQo+ID4gKwlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IE5VTEw7DQo+ ID4gKwlzdHJ1Y3QgdGxzX3JlY29yZF9pbmZvICpyZWNvcmQ7DQo+ID4gKwl1bnNpZ25lZCBsb25n IGZsYWdzOw0KPiA+ICsJczMyIHN5bmNfc2l6ZTsNCj4gPiArCXU2NCByY2Rfc247DQo+IA0KPiBJ IGRvbid0IHJlbWVtYmVyIEkndmUgc2VlbiBhIGZ1bmN0aW9uIHdpdGggc28gbWFueSBudW1iZXIg b2YgbG9jYWwNCj4gdmFyaWFibGVzLg0KPiBDYW4gd2UgZG8gc29tZXRoaW5nIHRvIGltcHJvdmUg dGhlIHJlYWRhYmlsaXR5IG9mIHRoaXM/DQo+IA0KPiA+ICsJLyogd29yc3QgY2FzZSBpczoNCj4g PiArCSAqIE1BWF9TS0JfRlJBR1MgaW4gdGxzX3JlY29yZF9pbmZvDQo+ID4gKwkgKiBNQVhfU0tC X0ZSQUdTICsgMSBpbiBTS0IgaGVhZCBhbmQgZnJhZ3MuDQo+ID4gKwkgKi8NCj4gPiArCWludCBz Z19pbl9tYXhfZWxlbWVudHMgPSAyICogTUFYX1NLQl9GUkFHUyArIDE7DQo+ID4gKw0KPiA+ICsJ aWYgKCFwYXlsb2FkX2xlbikNCj4gPiArCQlyZXR1cm4gc2tiOw0KPiA+ICsNCj4gPiArCXNnX2lu ID0ga21hbGxvY19hcnJheShzZ19pbl9tYXhfZWxlbWVudHMsIHNpemVvZigqc2dfaW4pLA0KPiA+ IEdGUF9BVE9NSUMpOw0KPiA+ICsJaWYgKCFzZ19pbikNCj4gPiArCQlnb3RvIGZyZWVfb3JpZzsN Cj4gPiArDQo+ID4gKwlzZ19pbml0X3RhYmxlKHNnX2luLCBzZ19pbl9tYXhfZWxlbWVudHMpOw0K PiA+ICsJc2dfaW5pdF90YWJsZShzZ19vdXQsIEFSUkFZX1NJWkUoc2dfb3V0KSk7DQo+ID4gKw0K PiA+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmN0eC0+bG9jaywgZmxhZ3MpOw0KPiA+ICsJcmVjb3Jk ID0gdGxzX2dldF9yZWNvcmQoY3R4LCB0Y3Bfc2VxLCAmcmNkX3NuKTsNCj4gPiArCWlmICghcmVj b3JkKSB7DQo+ID4gKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3R4LT5sb2NrLCBmbGFncyk7 DQo+ID4gKwkJV0FSTigxLCAiUmVjb3JkIG5vdCBmb3VuZCBmb3Igc2VxICV1XG4iLCB0Y3Bfc2Vx KTsNCj4gPiArCQlnb3RvIGZyZWVfc2c7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJc3luY19zaXpl ID0gdGNwX3NlcSAtIHRsc19yZWNvcmRfc3RhcnRfc2VxKHJlY29yZCk7DQo+ID4gKwlpZiAoc3lu Y19zaXplIDwgMCkgew0KPiA+ICsJCWludCBpc19zdGFydF9tYXJrZXIgPQ0KPiA+IHRsc19yZWNv cmRfaXNfc3RhcnRfbWFya2VyKHJlY29yZCk7DQo+ID4gKw0KPiA+ICsJCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJmN0eC0+bG9jaywgZmxhZ3MpOw0KPiA+ICsJCWlmICghaXNfc3RhcnRfbWFya2Vy KQ0KPiA+ICsJCS8qIFRoaXMgc2hvdWxkIG9ubHkgb2NjdXIgaWYgdGhlIHJlbGV2YW50IHJlY29y ZA0KPiA+IHdhcw0KPiA+ICsJCSAqIGFscmVhZHkgYWNrZWQuIEluIHRoYXQgY2FzZSBpdCBzaG91 bGQgYmUgb2sNCj4gPiArCQkgKiB0byBkcm9wIHRoZSBwYWNrZXQgYW5kIGF2b2lkIHJldHJhbnNt aXNzaW9uLg0KPiA+ICsJCSAqDQo+ID4gKwkJICogVGhlcmUgaXMgYSBjb3JuZXIgY2FzZSB3aGVy ZSB0aGUgcGFja2V0DQo+ID4gY29udGFpbnMNCj4gPiArCQkgKiBib3RoIGFuIGFja2VkIGFuZCBh IG5vbi1hY2tlZCByZWNvcmQuDQo+ID4gKwkJICogV2UgY3VycmVudGx5IGRvbid0IGhhbmRsZSB0 aGF0IGNhc2UgYW5kIHJlbHkNCj4gPiArCQkgKiBvbiBUQ1AgdG8gcmV0cmFubWl0IGEgcGFja2V0 IHRoYXQgZG9lc24ndA0KPiA+IGNvbnRhaW4NCj4gPiArCQkgKiBhbHJlYWR5IGFja2VkIHBheWxv YWQuDQo+ID4gKwkJICovDQo+ID4gKwkJCWdvdG8gZnJlZV9vcmlnOw0KPiA+ICsNCj4gPiArCQlp ZiAocGF5bG9hZF9sZW4gPiAtc3luY19zaXplKSB7DQo+ID4gKwkJCVdBUk4oMSwgIkZhbGxiYWNr IG9mIHBhcnRpYWxseSBvZmZsb2FkZWQNCj4gPiBwYWNrZXRzIGlzIG5vdCBzdXBwb3J0ZWRcbiIp Ow0KPiA+ICsJCQlnb3RvIGZyZWVfc2c7DQo+ID4gKwkJfSBlbHNlIHsNCj4gPiArCQkJcmV0dXJu IHNrYjsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmVtYWluaW5nID0gc3luY19z aXplOw0KPiA+ICsJd2hpbGUgKHJlbWFpbmluZyA+IDApIHsNCj4gPiArCQlza2JfZnJhZ190ICpm cmFnID0gJnJlY29yZC0+ZnJhZ3NbaV07DQo+ID4gKw0KPiA+ICsJCV9fc2tiX2ZyYWdfcmVmKGZy YWcpOw0KPiA+ICsJCXNnX3NldF9wYWdlKHNnX2luICsgaSwgc2tiX2ZyYWdfcGFnZShmcmFnKSwN Cj4gPiArCQkJICAgIHNrYl9mcmFnX3NpemUoZnJhZyksIGZyYWctDQo+ID4gPnBhZ2Vfb2Zmc2V0 KTsNCj4gPiArDQo+ID4gKwkJcmVtYWluaW5nIC09IHNrYl9mcmFnX3NpemUoZnJhZyk7DQo+ID4g Kw0KPiA+ICsJCWlmIChyZW1haW5pbmcgPCAwKQ0KPiA+ICsJCQlzZ19pbltpXS5sZW5ndGggKz0g cmVtYWluaW5nOw0KPiA+ICsNCj4gPiArCQlpKys7DQo+ID4gKwl9DQo+ID4gKwlzcGluX3VubG9j a19pcnFyZXN0b3JlKCZjdHgtPmxvY2ssIGZsYWdzKTsNCj4gPiArCXJlc3luY19zZ3MgPSBpOw0K PiA+ICsNCj4gPiArCWFlYWRfcmVxID0gdGxzX2FsbG9jX2FlYWRfcmVxdWVzdChjdHgtPmFlYWRf c2VuZCwNCj4gPiBHRlBfQVRPTUlDKTsNCj4gPiArCWlmICghYWVhZF9yZXEpDQo+ID4gKwkJZ290 byBwdXRfc2c7DQo+ID4gKw0KPiA+ICsJYnVmX2xlbiA9IFRMU19DSVBIRVJfQUVTX0dDTV8xMjhf U0FMVF9TSVpFICsNCj4gPiArCQkgIFRMU19DSVBIRVJfQUVTX0dDTV8xMjhfSVZfU0laRSArDQo+ ID4gKwkJICBUTFNfQUFEX1NQQUNFX1NJWkUgKw0KPiA+ICsJCSAgc3luY19zaXplICsNCj4gPiAr CQkgIHRsc19jdHgtPnRhZ19zaXplOw0KPiA+ICsJYnVmID0ga21hbGxvYyhidWZfbGVuLCBHRlBf QVRPTUlDKTsNCj4gPiArCWlmICghYnVmKQ0KPiA+ICsJCWdvdG8gZnJlZV9yZXE7DQo+ID4gKw0K PiA+ICsJbnNrYiA9IGFsbG9jX3NrYihza2JfaGVhZHJvb20oc2tiKSArIHNrYi0+bGVuLA0KPiA+ IEdGUF9BVE9NSUMpOw0KPiA+ICsJaWYgKCFuc2tiKQ0KPiA+ICsJCWdvdG8gZnJlZV9idWY7DQo+ ID4gKw0KPiA+ICsJc2tiX3Jlc2VydmUobnNrYiwgc2tiX2hlYWRyb29tKHNrYikpOw0KPiA+ICsN Cj4gPiArCWl2ID0gYnVmOw0KPiA+ICsNCj4gPiArCW1lbWNweShpdiwgdGxzX2N0eC0+Y3J5cHRv X3NlbmRfYWVzX2djbV8xMjguc2FsdCwNCj4gPiArCSAgICAgICBUTFNfQ0lQSEVSX0FFU19HQ01f MTI4X1NBTFRfU0laRSk7DQo+ID4gKwlhYWQgPSBidWYgKyBUTFNfQ0lQSEVSX0FFU19HQ01fMTI4 X1NBTFRfU0laRSArDQo+ID4gKwkgICAgICBUTFNfQ0lQSEVSX0FFU19HQ01fMTI4X0lWX1NJWkU7 DQo+ID4gKwlkdW1teV9idWYgPSBhYWQgKyBUTFNfQUFEX1NQQUNFX1NJWkU7DQo+ID4gKw0KPiA+ ICsJc2dfc2V0X2J1Zigmc2dfb3V0WzBdLCBkdW1teV9idWYsIHN5bmNfc2l6ZSk7DQo+ID4gKwlz Z19zZXRfYnVmKCZzZ19vdXRbMV0sIG5za2ItPmRhdGEgKyB0Y3BfcGF5bG9hZF9vZmZzZXQsDQo+ ID4gKwkJICAgcGF5bG9hZF9sZW4pOw0KPiA+ICsJLyogQWRkIHJvb20gZm9yIGF1dGhlbnRpY2F0 aW9uIHRhZyBwcm9kdWNlZCBieSBjcnlwdG8gKi8NCj4gPiArCWR1bW15X2J1ZiArPSBzeW5jX3Np emU7DQo+ID4gKwlzZ19zZXRfYnVmKCZzZ19vdXRbMl0sIGR1bW15X2J1ZiwgdGxzX2N0eC0+dGFn X3NpemUpOw0KPiA+ICsJcmMgPSBza2JfdG9fc2d2ZWMoc2tiLCAmc2dfaW5baV0sIHRjcF9wYXls b2FkX29mZnNldCwNCj4gPiArCQkJICBwYXlsb2FkX2xlbik7DQo+ID4gKwlpZiAocmMgPCAwKQ0K PiA+ICsJCWdvdG8gZnJlZV9uc2tiOw0KPiA+ICsNCj4gPiArCXJjID0gdGxzX2VuY19yZWNvcmRz KGFlYWRfcmVxLCBjdHgtPmFlYWRfc2VuZCwgc2dfaW4sDQo+ID4gc2dfb3V0LCBhYWQsIGl2LA0K PiA+ICsJCQkgICAgIHJjZF9zbiwgc3luY19zaXplICsgcGF5bG9hZF9sZW4pOw0KPiA+ICsJaWYg KHJjIDwgMCkNCj4gPiArCQlnb3RvIGZyZWVfbnNrYjsNCj4gPiArDQo+ID4gKwljb21wbGV0ZV9z a2IobnNrYiwgc2tiLCB0Y3BfcGF5bG9hZF9vZmZzZXQpOw0KPiA+ICsNCj4gPiArCS8qIHZhbGlk YXRlX3htaXRfc2tiX2xpc3QgYXNzdW1lcyB0aGF0IGlmIHRoZSBza2Igd2Fzbid0DQo+ID4gc2Vn bWVudGVkDQo+ID4gKwkgKiBuc2tiLT5wcmV2IHdpbGwgcG9pbnQgdG8gdGhlIHNrYiBpdHNlbGYN Cj4gPiArCSAqLw0KPiA+ICsJbnNrYi0+cHJldiA9IG5za2I7DQo+ID4gK2ZyZWVfYnVmOg0KPiA+ ICsJa2ZyZWUoYnVmKTsNCj4gPiArZnJlZV9yZXE6DQo+ID4gKwlrZnJlZShhZWFkX3JlcSk7DQo+ ID4gK3B1dF9zZzoNCj4gPiArCWZvciAoaSA9IDA7IGkgPCByZXN5bmNfc2dzOyBpKyspDQo+ID4g KwkJcHV0X3BhZ2Uoc2dfcGFnZSgmc2dfaW5baV0pKTsNCj4gPiArZnJlZV9zZzoNCj4gPiArCWtm cmVlKHNnX2luKTsNCj4gPiArZnJlZV9vcmlnOg0KPiA+ICsJa2ZyZWVfc2tiKHNrYik7DQo+ID4g KwlyZXR1cm4gbnNrYjsNCj4gPiArDQo+ID4gK2ZyZWVfbnNrYjoNCj4gPiArCWtmcmVlX3NrYihu c2tiKTsNCj4gPiArCW5za2IgPSBOVUxMOw0KPiA+ICsJZ290byBmcmVlX2J1ZjsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RydWN0IHNrX2J1ZmYgKnRsc192YWxpZGF0ZV94bWl0X3NrYihzdHJ1Y3Qg c29jayAqc2ssDQo+ID4gKwkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LA0KPiA+ICsJ CQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikNCj4gPiArew0KPiA+ICsJaWYgKGRldiA9PSB0 bHNfZ2V0X2N0eChzayktPm5ldGRldikNCj4gPiArCQlyZXR1cm4gc2tiOw0KPiA+ICsNCj4gPiAr CXJldHVybiB0bHNfc3dfZmFsbGJhY2soc2ssIHNrYik7DQo+ID4gK30NCj4gPiArDQo+ID4gK2lu dCB0bHNfc3dfZmFsbGJhY2tfaW5pdChzdHJ1Y3Qgc29jayAqc2ssDQo+ID4gKwkJCSBzdHJ1Y3Qg dGxzX29mZmxvYWRfY29udGV4dCAqb2ZmbG9hZF9jdHgsDQo+ID4gKwkJCSBzdHJ1Y3QgdGxzX2Ny eXB0b19pbmZvICpjcnlwdG9faW5mbykNCj4gPiArew0KPiA+ICsJaW50IHJjOw0KPiA+ICsJY29u c3QgdTggKmtleTsNCj4gDQo+IFJldmVyc2UgQ2hyaXN0bWFzIHRyZWUuDQo+IA0KPiA+ICsNCj4g PiArCW9mZmxvYWRfY3R4LT5hZWFkX3NlbmQgPQ0KPiA+ICsJICAgIGNyeXB0b19hbGxvY19hZWFk KCJnY20oYWVzKSIsIDAsIENSWVBUT19BTEdfQVNZTkMpOw0KPiA+ICsJaWYgKElTX0VSUihvZmZs b2FkX2N0eC0+YWVhZF9zZW5kKSkgew0KPiA+ICsJCXJjID0gUFRSX0VSUihvZmZsb2FkX2N0eC0+ YWVhZF9zZW5kKTsNCj4gPiArCQlwcl9lcnJfcmF0ZWxpbWl0ZWQoImNyeXB0b19hbGxvY19hZWFk IGZhaWxlZA0KPiA+IHJjPSVkXG4iLCByYyk7DQo+ID4gKwkJb2ZmbG9hZF9jdHgtPmFlYWRfc2Vu ZCA9IE5VTEw7DQo+ID4gKwkJZ290byBlcnJfb3V0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWtl eSA9ICgoc3RydWN0IHRsczEyX2NyeXB0b19pbmZvX2Flc19nY21fMTI4DQo+ID4gKiljcnlwdG9f aW5mbyktPmtleTsNCj4gPiArDQo+ID4gKwlyYyA9IGNyeXB0b19hZWFkX3NldGtleShvZmZsb2Fk X2N0eC0+YWVhZF9zZW5kLCBrZXksDQo+ID4gKwkJCQlUTFNfQ0lQSEVSX0FFU19HQ01fMTI4X0tF WV9TSVpFKTsNCj4gPiArCWlmIChyYykNCj4gPiArCQlnb3RvIGZyZWVfYWVhZDsNCj4gPiArDQo+ ID4gKwlyYyA9IGNyeXB0b19hZWFkX3NldGF1dGhzaXplKG9mZmxvYWRfY3R4LT5hZWFkX3NlbmQs DQo+ID4gKwkJCQkgICAgIFRMU19DSVBIRVJfQUVTX0dDTV8xMjhfVEFHX1NJDQo+ID4gWkUpOw0K PiA+ICsJaWYgKHJjKQ0KPiA+ICsJCWdvdG8gZnJlZV9hZWFkOw0KPiA+ICsNCj4gPiArCXJldHVy biAwOw0KPiA+ICtmcmVlX2FlYWQ6DQo+ID4gKwljcnlwdG9fZnJlZV9hZWFkKG9mZmxvYWRfY3R4 LT5hZWFkX3NlbmQpOw0KPiA+ICtlcnJfb3V0Og0KPiA+ICsJcmV0dXJuIHJjOw0KPiA+ICt9DQo+ ID4gZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX21haW4uYyBiL25ldC90bHMvdGxzX21haW4uYw0K PiA+IGluZGV4IGQ4MjRkNTQ4NDQ3ZS4uZTBkZmFjZTMzMDE3IDEwMDY0NA0KPiA+IC0tLSBhL25l dC90bHMvdGxzX21haW4uYw0KPiA+ICsrKyBiL25ldC90bHMvdGxzX21haW4uYw0KPiA+IEBAIC01 NCw2ICs1NCw5IEBAIGVudW0gew0KPiA+ICBlbnVtIHsNCj4gPiAgCVRMU19CQVNFX1RYLA0KPiA+ ICAJVExTX1NXX1RYLA0KPiA+ICsjaWZkZWYgQ09ORklHX1RMU19ERVZJQ0UNCj4gPiArCVRMU19I V19UWCwNCj4gPiArI2VuZGlmDQo+ID4gIAlUTFNfTlVNX0NPTkZJRywNCj4gPiAgfTsNCj4gPiAg DQo+ID4gQEAgLTQxNiwxMSArNDE5LDE5IEBAIHN0YXRpYyBpbnQgZG9fdGxzX3NldHNvY2tvcHRf dHgoc3RydWN0IHNvY2sNCj4gPiAqc2ssIGNoYXIgX191c2VyICpvcHR2YWwsDQo+ID4gIAkJZ290 byBlcnJfY3J5cHRvX2luZm87DQo+ID4gIAl9DQo+ID4gIA0KPiA+IC0JLyogY3VycmVudGx5IFNX IGlzIGRlZmF1bHQsIHdlIHdpbGwgaGF2ZSBldGh0b29sIGluIGZ1dHVyZQ0KPiA+ICovDQo+ID4g LQlyYyA9IHRsc19zZXRfc3dfb2ZmbG9hZChzaywgY3R4KTsNCj4gPiAtCXR4X2NvbmYgPSBUTFNf U1dfVFg7DQo+ID4gLQlpZiAocmMpDQo+ID4gLQkJZ290byBlcnJfY3J5cHRvX2luZm87DQo+ID4g KyNpZmRlZiBDT05GSUdfVExTX0RFVklDRQ0KPiA+ICsJcmMgPSB0bHNfc2V0X2RldmljZV9vZmZs b2FkKHNrLCBjdHgpOw0KPiA+ICsJdHhfY29uZiA9IFRMU19IV19UWDsNCj4gPiArCWlmIChyYykg ew0KPiA+ICsjZWxzZQ0KPiA+ICsJew0KPiA+ICsjZW5kaWYNCj4gPiArCQkvKiBpZiBIVyBvZmZs b2FkIGZhaWxzIGZhbGxiYWNrIHRvIFNXICovDQo+ID4gKwkJcmMgPSB0bHNfc2V0X3N3X29mZmxv YWQoc2ssIGN0eCk7DQo+ID4gKwkJdHhfY29uZiA9IFRMU19TV19UWDsNCj4gPiArCQlpZiAocmMp DQo+ID4gKwkJCWdvdG8gZXJyX2NyeXB0b19pbmZvOw0KPiA+ICsJfQ0KPiA+ICANCj4gPiAgCWN0 eC0+dHhfY29uZiA9IHR4X2NvbmY7DQo+ID4gIAl1cGRhdGVfc2tfcHJvdChzaywgY3R4KTsNCj4g PiBAQCAtNDczLDYgKzQ4NCwxMiBAQCBzdGF0aWMgdm9pZCBidWlsZF9wcm90b3Moc3RydWN0IHBy b3RvICpwcm90LA0KPiA+IHN0cnVjdCBwcm90byAqYmFzZSkNCj4gPiAgCXByb3RbVExTX1NXX1RY XSA9IHByb3RbVExTX0JBU0VfVFhdOw0KPiA+ICAJcHJvdFtUTFNfU1dfVFhdLnNlbmRtc2cJCT0g dGxzX3N3X3NlbmRtc2c7DQo+ID4gIAlwcm90W1RMU19TV19UWF0uc2VuZHBhZ2UJPSB0bHNfc3df c2VuZHBhZ2U7DQo+ID4gKw0KPiA+ICsjaWZkZWYgQ09ORklHX1RMU19ERVZJQ0UNCj4gPiArCXBy b3RbVExTX0hXX1RYXSA9IHByb3RbVExTX1NXX1RYXTsNCj4gPiArCXByb3RbVExTX0hXX1RYXS5z ZW5kbXNnCQk9DQo+ID4gdGxzX2RldmljZV9zZW5kbXNnOw0KPiA+ICsJcHJvdFtUTFNfSFdfVFhd LnNlbmRwYWdlCT0gdGxzX2RldmljZV9zZW5kcGFnZTsNCj4gPiArI2VuZGlmDQo+ID4gIH0NCj4g PiAgDQo+ID4gIHN0YXRpYyBpbnQgdGxzX2luaXQoc3RydWN0IHNvY2sgKnNrKQ0KPiA+IEBAIC01 MzEsNiArNTQ4LDkgQEAgc3RhdGljIGludCBfX2luaXQgdGxzX3JlZ2lzdGVyKHZvaWQpDQo+ID4g IHsNCj4gPiAgCWJ1aWxkX3Byb3Rvcyh0bHNfcHJvdHNbVExTVjRdLCAmdGNwX3Byb3QpOw0KPiA+ ICANCj4gPiArI2lmZGVmIENPTkZJR19UTFNfREVWSUNFDQo+ID4gKwl0bHNfZGV2aWNlX2luaXQo KTsNCj4gPiArI2VuZGlmDQo+ID4gIAl0Y3BfcmVnaXN0ZXJfdWxwKCZ0Y3BfdGxzX3VscF9vcHMp Ow0KPiA+ICANCj4gPiAgCXJldHVybiAwOw0KPiA+IEBAIC01MzksNiArNTU5LDkgQEAgc3RhdGlj IGludCBfX2luaXQgdGxzX3JlZ2lzdGVyKHZvaWQpDQo+ID4gIHN0YXRpYyB2b2lkIF9fZXhpdCB0 bHNfdW5yZWdpc3Rlcih2b2lkKQ0KPiA+ICB7DQo+ID4gIAl0Y3BfdW5yZWdpc3Rlcl91bHAoJnRj cF90bHNfdWxwX29wcyk7DQo+ID4gKyNpZmRlZiBDT05GSUdfVExTX0RFVklDRQ0KPiA+ICsJdGxz X2RldmljZV9jbGVhbnVwKCk7DQo+ID4gKyNlbmRpZg0KPiA+ICB9DQo+ID4gIA0KPiA+ICBtb2R1 bGVfaW5pdCh0bHNfcmVnaXN0ZXIpOw0KPiANCj4gVGhhbmtzLA0KPiBLaXJpbGw=