From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8F4F189EF7 for ; Wed, 21 Aug 2019 11:04:36 +0000 (UTC) Date: Wed, 21 Aug 2019 13:04:30 +0200 From: Katarzyna Dec Message-ID: <20190821110430.GB21194@kdec5-desk.ger.corp.intel.com> References: <20190812084718.9999-1-zbigniew.kempczynski@intel.com> <20190812084718.9999-2-zbigniew.kempczynski@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20190812084718.9999-2-zbigniew.kempczynski@intel.com> Subject: Re: [igt-dev] [PATCH i-g-t v4 1/2] Introduce multi-device selection API List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Zbigniew =?utf-8?Q?Kempczy=C5=84ski?= Cc: igt-dev@lists.freedesktop.org, Petri Latvala , Daniel Vetter List-ID: T24gTW9uLCBBdWcgMTIsIDIwMTkgYXQgMTA6NDc6MTdBTSArMDIwMCwgWmJpZ25pZXcgS2VtcGN6 ecWEc2tpIHdyb3RlOgoKWmJ5c3prdSwgSSBzYXcgdGhhdCBBcmVrIGhhcyBjb21tZW50ZWQgeW91 ciBjaGFuZ2VzLCBidXQgSSBkaWQgbm90IHJlYWQgaXQgaW4KZGV0YWlscywgc28gc29tZSBvZiBt eSBjb21tZW50cyBjYW4gYmUgc2ltaWxhciB0byBoaXMuIEkgd2FudGVkIHRvIGhhdmUgY2xlYXIK aGVhZCBzdGFydGluZyB0aGlzIHJldmlldyA6KS4KCj4gQ2hhbmdlIGFkZHMgZGV2aWNlIHNlbGVj dGlvbiBiYXNlZCBvbiBzY2FubmluZyBkcm0gc3Vic3lzdGVtCj4gdXNpbmcgdWRldiBsaWJyYXJ5 Lgo+IAo+IFRvb2wgJ2xzZ3B1JyB3aGljaCB1c2VzIGRldmljZSBzY2FubmluZyBhbmQgc2VsZWN0 aW9uIGZlYXR1cmUgd2FzIGFkZGVkLgo+IAo+IFNpZ25lZC1vZmYtYnk6IFpiaWduaWV3IEtlbXBj ennFhHNraSA8emJpZ25pZXcua2VtcGN6eW5za2lAaW50ZWwuY29tPgo+IENjOiBBcmthZGl1c3og SGlsZXIgPGFya2FkaXVzei5oaWxlckBpbnRlbC5jb20+Cj4gQ2M6IERhbmllbCBWZXR0ZXIgPGRh bmllbEBmZndsbC5jaD4KPiBDYzogUGV0cmkgTGF0dmFsYSA8cGV0cmkubGF0dmFsYUBpbnRlbC5j b20+Cj4gLS0tCj4gIC4uLi9pZ3QtZ3B1LXRvb2xzL2lndC1ncHUtdG9vbHMtZG9jcy54bWwgICAg ICB8ICAgIDEgKwo+ICBsaWIvTWFrZWZpbGUuc291cmNlcyAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgICAyICsKPiAgbGliL2lndF9kZXZpY2Vfc2Nhbi5jICAgICAgICAgICAgICAgICAgICAg ICAgIHwgMTMxOCArKysrKysrKysrKysrKysrKwo+ICBsaWIvaWd0X2RldmljZV9zY2FuLmggICAg ICAgICAgICAgICAgICAgICAgICAgfCAgIDY5ICsKPiAgbGliL21lc29uLmJ1aWxkICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSArCj4gIHRvb2xzL01ha2VmaWxlLnNvdXJjZXMg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwo+ICB0b29scy9sc2dwdS5jICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTgzICsrKwo+ICB0b29scy9tZXNvbi5idWlsZCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAxICsKPiAgOCBmaWxlcyBjaGFuZ2VkLCAx NTc2IGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pZ3RfZGV2aWNlX3Nj YW4uYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2lndF9kZXZpY2Vfc2Nhbi5oCj4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCB0b29scy9sc2dwdS5jCj4gCj4gZGlmZiAtLWdpdCBhL2RvY3MvcmVmZXJl bmNlL2lndC1ncHUtdG9vbHMvaWd0LWdwdS10b29scy1kb2NzLnhtbCBiL2RvY3MvcmVmZXJlbmNl L2lndC1ncHUtdG9vbHMvaWd0LWdwdS10b29scy1kb2NzLnhtbAo+IGluZGV4IGFjODMyNzJmLi40 YjNjMzhhZiAxMDA2NDQKPiAtLS0gYS9kb2NzL3JlZmVyZW5jZS9pZ3QtZ3B1LXRvb2xzL2lndC1n cHUtdG9vbHMtZG9jcy54bWwKPiArKysgYi9kb2NzL3JlZmVyZW5jZS9pZ3QtZ3B1LXRvb2xzL2ln dC1ncHUtdG9vbHMtZG9jcy54bWwKPiBAQCAtMjMsNiArMjMsNyBAQAo+ICAgICAgPHhpOmluY2x1 ZGUgaHJlZj0ieG1sL2lndF9jb3JlLnhtbCIvPgo+ICAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1s L2lndF9kZWJ1Z2ZzLnhtbCIvPgo+ICAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2lndF9kZXZp Y2UueG1sIi8+Cj4gKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvaWd0X2RldmljZV9zY2FuLnht bCIvPgo+ICAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2lndF9kcmF3LnhtbCIvPgo+ICAgICAg PHhpOmluY2x1ZGUgaHJlZj0ieG1sL2lndF9kdW1teWxvYWQueG1sIi8+Cj4gICAgICA8eGk6aW5j bHVkZSBocmVmPSJ4bWwvaWd0X2ZiLnhtbCIvPgo+IGRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUu c291cmNlcyBiL2xpYi9NYWtlZmlsZS5zb3VyY2VzCj4gaW5kZXggZTE2ZGU4NmUuLmMzODNhODE3 IDEwMDY0NAo+IC0tLSBhL2xpYi9NYWtlZmlsZS5zb3VyY2VzCj4gKysrIGIvbGliL01ha2VmaWxl LnNvdXJjZXMKPiBAQCAtMjUsNiArMjUsOCBAQCBsaWJfc291cmNlX2xpc3QgPQkgCVwKPiAgCWln dF9kZWJ1Z2ZzLmgJCVwKPiAgCWlndF9kZXZpY2UuYwkJXAo+ICAJaWd0X2RldmljZS5oCQlcCj4g KwlpZ3RfZGV2aWNlX3NjYW4uYwlcCj4gKwlpZ3RfZGV2aWNlX3NjYW4uaAlcCj4gIAlpZ3RfYXV4 LmMJCVwKPiAgCWlndF9hdXguaAkJXAo+ICAJaWd0X2NvbG9yX2VuY29kaW5nLmMJXAo+IGRpZmYg LS1naXQgYS9saWIvaWd0X2RldmljZV9zY2FuLmMgYi9saWIvaWd0X2RldmljZV9zY2FuLmMKPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwLi40ZmMxNjViMgo+IC0tLSAvZGV2 L251bGwKPiArKysgYi9saWIvaWd0X2RldmljZV9zY2FuLmMKPiBAQCAtMCwwICsxLDEzMTggQEAK PiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiAr ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBw ZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lh dGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBp biB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGlt aXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVi bGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9m IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNv ZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlz IHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBz aGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9m IHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVE ICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICog SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO RCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBP UiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBP VEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBU T1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVD VElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAq IElOIFRIRSBTT0ZUV0FSRS4KPiArICoKPiArICovCj4gKwo+ICsjaW5jbHVkZSAiaWd0LmgiCj4g KyNpbmNsdWRlICJpZ3Rfc3lzZnMuaCIKPiArI2luY2x1ZGUgImlndF9kZXZpY2UuaCIKPiArI2lu Y2x1ZGUgImlndF9kZXZpY2Vfc2Nhbi5oIgo+ICsjaW5jbHVkZSA8Z2xpYi5oPgo+ICsjaW5jbHVk ZSA8bGlidWRldi5oPgo+ICsjaW5jbHVkZSA8bGludXgvbGltaXRzLmg+Cj4gKyNpbmNsdWRlIDxz eXMvc3RhdC5oPgo+ICsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cj4gKyNpbmNsdWRlIDxkaXJlbnQu aD4KPiArI2luY2x1ZGUgPGZjbnRsLmg+Cj4gKwo+ICsvKioKPiArICogU0VDVElPTjppZ3RfZGV2 aWNlX3NjYW4KPiArICogQHNob3J0X2Rlc2NyaXB0aW9uOiBNdWx0aS1kZXZpY2Ugc2Nhbm5pbmcg YW5kIHNlbGVjdGlvbgo+ICsgKiBAdGl0bGU6IE11bHRpLWRldmljZSBzZWxlY3Rpb24KPiArICog QGluY2x1ZGU6IGlndC5oCj4gKyAqCj4gKyAqICMgRGV2aWNlIHNjYW5uaW5nCj4gKyAqCj4gKyAq IERldmljZSBzY2FubmluZyBpdGVyYXRlcyBvdmVyIGRybSBzdWJzeXN0ZW0gdXNpbmcgdWRldiBs aWJyYXJ5Cj4gKyAqIHRvIGFjcXVpcmUgZHJtIGRldmljZXMuCj4gKyAqIEZvciBlYWNoIGRybSBk ZXZpY2Ugd2UgYWxzbyBnZXQgYW5kIHN0b3JlIGl0cyBwYXJlbnQgaW4gYSBkZXZpY2UgYXJyYXkK PiArICogdG8gYWxsb3cgZGV2aWNlIHNlbGVjdGlvbiBpbiBtb3JlIGNvbnRleHR1YWwgd2F5Lgo+ ICsgKgo+ICsgKiBQYXJlbnQgZGV2aWNlcyBhcmUgYnVzIGRldmljZXMgKGxpa2UgcGNpLCBwbGF0 Zm9ybSwgZXRjLikgYW5kIGNvbnRhaW4gYSBsb3QKPiArICogb2YgdXNhYmxlIGluZm9ybWF0aW9u IGNvbXBhcmluZyB0byBkcm0gZGV2aWNlLgo+ICsgKgo+ICsgKiBVZGV2IGtlZXBzIHByb3BlcnRp ZXMgYW5kIHN5c2F0dHJzIGZvciB0aGUgZGV2aWNlIGFzIGEgbGlzdCB3aGF0IGlzIG5vdAo+ICsg KiBjb252aW5pZW50IGZvciBrZXkvdmFsdWUgc2VhcmNoaW5nLiBTbyB1ZGV2IGRldmljZSBwcm9w ZXJ0aWVzIGFuZCBzeXNhdHRycwo+ICsgKiBhcmUgcmV3cml0dGVuIHRvIGludGVybmFsIGhhc2gg dGFibGVzIGluIGlndF9kZXZpY2Ugc3RydWN0dXJlLgo+ICsgKgo+ICsgKiAjIEZpbHRlcnMKPiAr ICoKPiArICogRGV2aWNlIHNlbGVjdGlvbiBjYW4gYmUgZG9uZSB1c2luZyBmaWx0ZXJzLiBGaWx0 ZXJzIGFsbG93cyBzb3BoaXN0aWNhdGVkCnMvYWxsb3dzL2FsbG93IDopCj4gKyAqIGRldmljZSBt YXRjaGluZyBhbmQgc2VsZWN0aW9uLiBQcmV2aW91c2x5IG1lbnRpb25lZCBwcm9wZXJ0aWVzIGFu ZCBzeXNhdHRycwo+ICsgKiBjb2xsZWN0ZWQgaW4gaWd0X2RldmljZSBoYXNoIHRhYmxlcyBzaW1w bGlmeSB3cml0aW5nIGZpbHRlciBpbXBsZW1lbnRhdGlvbi4KPiArICoKPiArICogRGlyZWN0IGRl dmljZSBzZWxlY3Rpb24gZmlsdGVyCj4gKyAqIGlzIHNwZWNpYWwgZmlsdGVyIGFuZCBpdCBpcyBj aGVja2VkIGZpcnN0LiBUaGVuIGNvbnRleHR1YWwgZmlsdGVyIGlzIGNob3Nlbgo+ICsgKiBkZXBl bmRpbmcgb24gZmlsdGVyIG5hbWUuCj4gKyAqCj4gKyAqIERpcmVjdCBkZXZpY2Ugc2VsZWN0aW9u IGZpbHRlciBtdXN0IGJlOgo+ICsgKgo+ICsgKiB8WzwhLS0gbGFuZ3VhZ2U9InBsYWluIiAtLT4K PiArICogc3Vic3lzdGVtOi9zeXMKPiArICogXXwKPiArICoKPiArICogU28sIHdoZW4gdXNlciBw YXNzZXMgZmlsdGVyIHdoaWNoIGxvb2tzIGxpa2UgZm9sbG93czoKPiArICogfFs8IS0tIGxhbmd1 YWdlPSJwbGFpbiIgLS0+Cj4gKyAqIC0gZHJtOi9zeXMvZGV2aWNlcy9wY2kwMDAwOjAwLzAwMDA6 MDA6MDIuMC9kcm0vY2FyZDAKPiArICogLSBwY2k6L3N5cy9kZXZpY2VzL3BjaTAwMDA6MDAvMDAw MDowMDowMi4wCj4gKyAqIC0gcGxhdGZvcm06L3N5cy9kZXZpY2VzL3BsYXRmb3JtL3ZnZW0KPiAr ICogXXwKSSB0cmllZCB0aGlzIG9uZSBsb2NhbGx5IGFuZCB3aGF0IHNlZW1zIHRvIGJlIG1pc3Np bmcgaXMgY2xlYXIgbWVzc2FnZSB0aGF0CmRldmljZSBpcyBub3QgdGhlcmUuIEZvciBub3cgd2Ug aGF2ZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBmb3IgZXhpc3RpbmcgZGV2aWNlCmFuZCBlbXB0eSBo ZWFkbGluZXMgZm9yIG5vbi1leGlzdGluZy4gSSB3b3VsZCBhZGQgc29tZSB3YXJuaW5nLCBlLmcu ICdEZXZpY2Ugbm90CmZvdW5kJy4KPiArICoKPiArICogZGV2aWNlIGZyb20gYXJyYXkgd2hpY2gg aGFzIHN1YnN5c3RlbSBhbmQgc3lzIHBhdGggd2lsbCBiZSByZXR1cm5lZC4KPiArICoKPiArICog V2hlbiAvc3lzIGlzIG5vdCBzcGVjaWZpZWQgYWZ0ZXIgY29sb24gY29udGV4dHVhbCBmaWx0ZXJz IGFyZSB0YWtlbgo+ICsgKiBpbnRvIGFjY291bnQuIERybSBkZXZpY2Ugb2NjdXJzIGluIHRoZSBz eXN0ZW0gd2hlbiBhcHByb3ByaWF0ZSBtb2R1bGUKPiArICogaXMgbG9hZGVkIGFuZCBkZXZpY2Ug aXMgZGV0ZWN0ZWQgKG9yIGV4cG9zZWQgZm9yIHBsYXRmb3JtIGRldmljZXMpLiBMb2FkaW5nCj4g KyAqIGRyaXZlcnMgaW4gZGlmZmVyZW50IG9yZGVyIGNhbiBiZSBwcm9ibGVtYXRpYyBmcm9tIENJ IHBvaW50IG9mIHZpZXcsIHdoZXJlCj4gKyAqIGV4cGVjdGF0aW9uIGlzIHRvIGdldCBzYW1lIGRl dmljZSBlc3BlY2lhbGx5IHdoZW4gbXVsdGlwbGUgZ3B1IGRldmljZXMKPiArICogZXhpc3RzIGlu IHRoZSBzeXN0ZW0uIEZvciBzdWNoIGRldmljZXMgaXRzIHBhcmVudCBsb2NhdGlvbiBvbiBwY2kg YnVzCj4gKyAqIGlzIGNvbnN0YW50IGFuZCBhbGxvd3MgYXBwcm9wcmlhdGUgZGV2aWNlIHNlbGVj dGlvbiB1c2luZyBmb3IgZXhhbXBsZQo+ICsgKiB2ZW5kb3IgLyBkZXZpY2UgaWRzLgo+ICsgKgo+ ICsgKiBGb3IgdGVzdHMgd2hpY2ggb3BlbnMgbW9yZSB0aGFuIG9uZSBkZXZpY2UgZGV2aWNlIGZp bHRlciBjb2xsZWN0aW9uIEFQSQo+ICsgKiBjYW4gYmUgdXNlZC4gWW91IGNhbiBhZGQgZmlsdGVy IHRvIHRoZSBhcnJheSB1c2luZyBpZ3RfZGV2aWNlX2ZpbHRlcl9hZGQoKSwKPiArICogZ2V0IG50 aCBmaWx0ZXIgc3RvcmVkIHVzaW5nIGlndF9kZXZpY2VfZmlsdGVyX2dldCgpIGFuZCByZXR1cm4K PiArICogI2lndF9kZXZpY2VfY2FyZCB1c2luZyBmaWx0ZXIgaW4gaWd0X2RldmljZV9jYXJkX21h dGNoKCkuCj4gKyAqCj4gKyAqIEltcGxlbWVudGVkIGZpbHRlcnM6Cj4gKyAqCj4gKyAqIC0gZHJt OiBnZXQgZHJtIC9kZXYvZHJpLy4uLiBkZXZpY2UgZGlyZWN0bHkKPiArICoKPiArICogICB8Wzwh LS0gbGFuZ3VhZ2U9InBsYWluIiAtLT4KPiArICogICBkcm06L2Rldi9kcmkvLi4uCj4gKyAqICAg XXwKPiArICoKPiArICogLSBwY2k6IHNlbGVjdCBkZXZpY2UgdXNpbmcgcGNpIHByb3BlcnRpZXMK PiArICogICB8WzwhLS0gbGFuZ3VhZ2U9InBsYWluIiAtLT4KPiArICogICBwY2k6W3ZlbmRvcj0l MDR4L25hbWVdWyxkZXZpY2U9JTA0eF1bLGNhcmQ9JWRdCj4gKyAqICAgXXwKPiArICoKPiArICog ICBGaWx0ZXIgYWxsb3dzIGRldmljZSBzZWxlY3Rpb24gdXNpbmcgdmVuZG9yIChoZXggb3IgbmFt ZSksIGRldmljZSBpZAo+ICsgKiAgIChoZXgpIGFuZCBudGgtY2FyZCBmcm9tIGFsbCBtYXRjaGVz LiBGb3IgZXhhbXBsZSBpZiB0aGVyZSdyZSA0IHBjaQo+ICsgKiAgIGNhcmRzIGluc3RhbGxlZCAo bGV0IHR3byBjYXJkcyBoYXZlIDEyMzQgYW5kIG90aGVyIHR3byAxMjM1IGRldmljZSBpZCwKPiAr ICogICBhbGwgb2YgdGhlbSBvZiB2ZW5kb3IgSW50ZWwpIHlvdSBjYW4gc2VsZWN0IG9uZSB1c2lu ZzoKPiArICoKPiArICogICB8WzwhLS0gbGFuZ3VhZ2U9InBsYWluIiAtLT4KPiArICogICBwY2k6 dmVuZG9yPUludGVsLGRldmljZT0xMjM0LGNhcmQ9MAo+ICsgKiAgIF18Cj4gKyAqCj4gKyAqICAg b3IKPiArICoKPiArICogICB8WzwhLS0gbGFuZ3VhZ2U9InBsYWluIiAtLT4KPiArICogICBwY2k6 dmVuZG9yPTgwODYsZGV2aWNlPTEyMzQsY2FyZD0wCj4gKyAqICAgXXwKPiArICoKPiArICogICBU aGlzIHRha2VzIGZpcnN0IGRldmljZSB3aXRoIDEyMzQgaWQgZm9yIEludGVsIHZlbmRvciAoODA4 NikuCj4gKyAqCj4gKyAqICAgfFs8IS0tIGxhbmd1YWdlPSJwbGFpbiIgLS0+Cj4gKyAqICAgcGNp OnZlbmRvcj1JbnRlbCxkZXZpY2U9MTIzNCxjYXJkPTEKPiArICogICBdfAo+ICsgKgo+ICsgKiAg IG9yCj4gKyAqCj4gKyAqICAgfFs8IS0tIGxhbmd1YWdlPSJwbGFpbiIgLS0+Cj4gKyAqICAgcGNp OnZlbmRvcj04MDg2LGRldmljZT0xMjM0LGNhcmQ9MQo+ICsgKiAgIF18Cj4gKyAqCj4gKyAqICAg SXQgc2VsZWN0cyBzZWNvbmQgb25lLgo+ICsgKgo+ICsgKiAgIEFzIG9yZGVyIG9uIHBjaSBidXMg ZG9lc24ndCBjaGFuZ2UgKHVubGVzcyB5b3UnbGwgYWRkIG5ldyBkZXZpY2Ugb3IKPiArICogICBy ZW9yZGVyIGV4aXN0aW5nIG9uZSkgZGV2aWNlIHNlbGVjdGlvbiB1c2luZyB0aGlzIGZpbHRlciB3 aWxsIGFsd2F5cwo+ICsgKiAgIHJldHVybiB5b3Ugc2FtZSBkZXZpY2UgcmVnYXJkbGVzcyBtb2R1 bGUgbG9hZGluZyB0aW1lLgo+ICsgKgo+ICsgKiAtIHZnZW06IHNlbGVjdCB2aXJ0dWFsIGdlbSBk ZXZpY2UKPiArICoKPiArICogICB8WzwhLS0gbGFuZ3VhZ2U9InBsYWluIiAtLT4KPiArICogICB2 Z2VtOltjYXJkPSVkXQo+ICsgKiAgIF18Cj4gKyAqCj4gKyAqICAgRm9yIGV4YW1wbGU6Cj4gKyAq Cj4gKyAqICAgfFs8IS0tIGxhbmd1YWdlPSJwbGFpbiIgLS0+Cj4gKyAqICAgdmdlbToKPiArICog ICB2Z2VtOmNhcmQ9MAo+ICsgKiAgIF18Cj4gKyAqCj4gKyAqICAgQm90aCBzZWxlY3RzIGZpcnN0 IHZnZW0gZGV2aWNlIChubyBpZGVhIGlmIG1vcmUgdGhhbiBvbmUgZGV2aWNlIHdpbGwKPiArICog ICBiZSB2aXNpYmxlLCBpZiB5ZXMgdXNlIGNhcmQ9IGFyZ3VtZW50IHRvIHBvaW50IHJpZ2h0IG9u ZSkuCj4gKyAqCj4gKyAqIC0gdmttczogc2VsZWN0IHZpcnR1YWwga21zIGRldmljZQo+ICsgKgo+ ICsgKiAgIHxbPCEtLSBsYW5ndWFnZT0icGxhaW4iIC0tPgo+ICsgKiAgIHZrbXM6W2NhcmQ9JWRd Cj4gKyAqICAgXXwKPiArICoKPiArICogICBGb3IgZXhhbXBsZToKPiArICoKPiArICogICB8Wzwh LS0gbGFuZ3VhZ2U9InBsYWluIiAtLT4KPiArICogICB2a21zOgo+ICsgKiAgIHZrbXM6Y2FyZD0w Cj4gKyAqICAgXXwKPiArICoKPiArICogICBCb3RoIHNlbGVjdHMgZmlyc3QgdmttcyBkZXZpY2Uu IFNhbWUgYXMgZm9yIHZnZW0gSSBhc3N1bWUgbW9yZSB0aGFuCj4gKyAqICAgb25lIGRldmljZSBj YW4gYXBwZWFyIGluIHRoZSBmdXR1cmUuCj4gKyAqCj4gKyAqIC0gdmM0OiBzZWxlY3QgVkM0IGRl dmljZQo+ICsgKgo+ICsgKiAgIHxbPCEtLSBsYW5ndWFnZT0icGxhaW4iIC0tPgo+ICsgKiAgIHZj NDpbY2FyZD0lZF0KPiArICogICBdfAo+ICsgKgo+ICsgKiAgIEZvciBleGFtcGxlOgo+ICsgKgo+ ICsgKiAgIHxbPCEtLSBsYW5ndWFnZT0icGxhaW4iIC0tPgo+ICsgKiAgIHZjNDoKPiArICogICB2 YzQ6Y2FyZD0wCj4gKyAqICAgXXwKPiArICoKPiArICogICBCb3RoIHNlbGVjdHMgZmlyc3QgVkM0 IGRldmljZS4gQXQgdGhlIG1vbWVudCBSYXNwZXJyeSBQSSBoYXMgb25seQo+ICsgKiAgIG9uZSBn cHUsIGJ1dCBmaWx0ZXIgaXMgcmVhZHkgaWYgdGhlcmUgd2lsbCBiZSBtb3JlLgo+ICsgKgo+ICsg KiAjIGxzZ3B1Cj4gKyAqCj4gKyAqIFNjYW5uZWQgZGV2aWNlcyBjYW4gYmUgZGlzcGxheWVkIHVz aW5nICdsc2dwdScgdG9vbC4gVG9vbCBhbHNvIGRpc3BsYXlzCj4gKyAqIHByb3BlcnRpZXMgYW5k IHN5c2F0dHJzICgtRCBzd2l0Y2gsIG1lYW5zIGRldGFpbCkgd2hpY2ggY2FuIGJlIHVzZWQgZHVy aW5nCj4gKyAqIGZpbHRlciBpbXBsZW1lbnRhdGlvbi4KPiArICoKPiArICogVG9vbCBjYW4gYWxz byBiZSB1c2VkIHRvIGNoZWNrIGRvZXMgdGhlIGltcGxlbWVudGVkIGZpbHRlciB3b3JrcyBhcyBl eHBlY3RlZC4KPiArICogVG8gc2VsZWN0IGRldmljZSB1c2luZyBmaWx0ZXIgdXNlICctZCcgb3Ig Jy0tZGV2aWNlJyBhcmd1bWVudCBsaWtlOgo+ICsgKgo+ICsgKiB8WzwhLS0gbGFuZ3VhZ2U9InBs YWluIiAtLT4KPiArICogLi9sc2dwdSAtZCAncGNpOnZlbmRvcj1JbnRlbCcKPiArICogPT09IERl dmljZSBmaWx0ZXIgbGlzdCA9PT0KPiArICogWyAwXTogcGNpOnZlbmRvcj1JbnRlbAo+ICsKPiAr ICogPT09IFRlc3RpbmcgZGV2aWNlIG9wZW4gPT09Cj4gKyAqIHN1YnN5c3RlbSAgIDogcGNpCj4g KyAqIGNoaXBzZXQgICAgIDogMQo+ICsgKiBkcm0gY2FyZCAgICA6IC9kZXYvZHJpL2NhcmQwCj4g KyAqIGRybSByZW5kZXIgIDogL2Rldi9kcmkvcmVuZGVyRDEyOAo+ICsgKiBEZXZpY2UgL2Rldi9k cmkvY2FyZDAgc3VjY2Vzc2Z1bGx5IG9wZW5lZAo+ICsgKiBEZXZpY2UgL2Rldi9kcmkvcmVuZGVy RDEyOCBzdWNjZXNzZnVsbHkgb3BlbmVkCj4gKyAqIF18Cj4gKyAqCj4gKyAqIEFwYXJ0IG9mIHNl bGVjdGluZyBkZXZpY2UgbHNncHUgdHJ5IHRvIG9wZW4gY2FyZCBhbmQgcmVuZGVyIG5vZGVzLgpJ IGRpZCBub3Qgc2VlIGZ1bGwgcGljdHVyZSB5ZXQsIHNvIG1heWJlIHRoZSBhbnN3ZXIgaXQgc29t ZXdoZXJlIGFscmVhZHksCmFueXdheToKV2hhdCBjYW4gSSBkbyB3aXRoIHRoaXMgZGV2aWNlIG9w ZW5lZCBhbmQgcmV0dXJuZWQ/IE9yIHRoaXMgaXMganVzdCBhbgppbmZvcm1hdGlvbiB0aGF0IGl0 IGV4aXN0cyBhbmQgY2FuIGJlIHVzZWQgYnkgdGVzdC9maWx0ZXI/Cgo+ICsqLwpeIEVuZCBvZiBj b21tZW50IHNlY3Rpb24gaXMgbm90IGFsaWduZWQsIGJ1dCB0aGlzIGlzIHJlYWxseSBtaW5vciBp c3N1ZS4KQWxsIHNpbWlsYXIgaXNzdWVzIGNhbiBiZSBmb3VuZCBieSB1c2luZyBjaGVja3BhdGNo LnBsIHNjcmlwdCA6KS4KTG9va2luZyBmdXJodGVyIGluIHRoaXMgZmlsZSB0aGVyZSBpcyBhIGxv dCBvZiBjb2RlIHN0eWxlIHdhcm5pbmdzIHRoYXQgYXJlCndvcnRoIGZpeGluZy4KPiArCj4gKy8v I2RlZmluZSBERUJVR19ERVZJQ0VfU0NBTgpXaHkgXiB0aGlzIGxpbmUgaXMgY29tbWVudGVkPwo+ ICsjaWZkZWYgREVCVUdfREVWSUNFX1NDQU4KPiArI2RlZmluZSBEQkcoLi4uKSBcCj4gK3sgXAo+ ICsJc3RydWN0IHRpbWV2YWwgdG07IFwKPiArCWdldHRpbWVvZmRheSgmdG0sIE5VTEwpOyBcCj4g KwlwcmludGYoIiUxMGxkLiUwM2xkOiAiLCB0bS50dl9zZWMsIHRtLnR2X3VzZWMpOyBcCj4gKwlw cmludGYoX19WQV9BUkdTX18pOyBcCj4gKwl9Cj4gKwo+ICsjZWxzZQo+ICsjZGVmaW5lIERCRygu Li4pIHt9Cj4gKyNlbmRpZgo+ICsKPiArI2RlZmluZSBzdHJlcXVhbCh4LCB5KSAoKHgpICYmICh5 KSAmJiAhc3RyY21wKCh4KSwgKHkpKSkKPiArI2RlZmluZSBJR1RfRFJNX1BBVEggIi9kZXYvZHJp Igo+ICsKPiArc3RhdGljIEdIYXNoVGFibGUgKnN5c2F0dHJzX2JsYWNrbGlzdF9odDsgIC8vc3lz YXR0cnMgd2UgZG9uJ3Qgd2FudCB0byByZWFkCj4gK3N0YXRpYyBHSGFzaFRhYmxlICpncHVfdmVu ZG9yX2h0OyAgICAgICAgICAvL3NlYXJjaCBpZCAtPiB2ZW5kb3Jfc3BlYyBtYXBwaW5nCj4gK3N0 YXRpYyBHSGFzaFRhYmxlICpmaWx0ZXJfZGVmaW5pdGlvbl9odDsgICAvL3N1cHBvcnRlZCBmaWx0 ZXJzIChwY2k9Li4uLCBldGMuKQo+ICsKPiArLyogR2VuZXJpYyBuYW1lLT52YWx1ZSBzdHJ1Y3Qg Ki8KPiArc3RydWN0IG5hbWVfdmFsdWUgewo+ICsJY29uc3QgY2hhciAqbmFtZTsKPiArCWdwb2lu dGVyICp2YWx1ZTsKPiArfTsKPiArCj4gKy8qIFZlbmRvciBzcGVjaWZpYyBkYXRhICovCj4gK3N0 cnVjdCB2ZW5kb3Jfc3BlYyB7Cj4gKwljb25zdCBjaGFyICp2ZW5kb3I7Cj4gKwljb25zdCBjaGFy ICptYXRjaDsKPiArCWludCBjaGlwc2V0Owo+ICt9Owo+ICsKPiArc3RydWN0IGlndF9kZXZpY2Ug ewo+ICsJLyogRmlsbGVkIGZvciBkcm0gZGV2aWNlcyAqLwo+ICsJc3RydWN0IGlndF9kZXZpY2Ug KnBhcmVudDsKPiArCj4gKwkvKiBQb2ludCB0byB2ZW5kb3Igc3BlYyBpZiBjYW4gYmUgZm91bmQg Ki8KPiArCXN0cnVjdCB2ZW5kb3Jfc3BlYyAqdnM7Cj4gKwo+ICsJLyogUHJvcGVydGllcyAvIHN5 c2F0dHJzIHJld3JpdGVuIGZyb20gdWRldiBsaXN0cyAqLwo+ICsJR0hhc2hUYWJsZSAqcHJvcHNf aHQ7Cj4gKwlHSGFzaFRhYmxlICphdHRyc19odDsKPiArCj4gKwkvKiBNb3N0IHVzYWJsZSB2YXJp YWJsZXMgZnJvbSB1ZGV2IGRldmljZSAqLwo+ICsJY2hhciAqc3Vic3lzdGVtOwo+ICsJY2hhciAq c3lzcGF0aDsKPiArCWNoYXIgKmRldm5vZGU7Cj4gKwo+ICsJLyogL2Rldi9kcmkvLi4uIHBhdGhz ICovCj4gKwljaGFyICpkcm1fY2FyZDsKPiArCWNoYXIgKmRybV9yZW5kZXI7Cj4gKwo+ICsJLyog Rm9yIHBjaSBzdWJzeXN0ZW0gKi8KPiArCWNoYXIgKnZlbmRvcjsKPiArCWNoYXIgKmRldmljZTsK PiArfTsKPiArCj4gKy8qIFNjYW5uZWQgZGV2aWNlcyAqLwo+ICtzdHJ1Y3QgaWd0X2RldmljZXMg ewo+ICsJR1B0ckFycmF5ICpkZXZzOwkJLy9hbGwgZGV2aWNlcwo+ICsJR1B0ckFycmF5ICp2aWV3 OwkJLy9maWx0ZXJlZCB2aWV3Cj4gKwlib29sIGRldnNfc2Nhbm5lZDsKPiArfTsKPiArCj4gKy8q IFNjYW5uZWQgZGV2aWNlcyBob2xkZXIgKi8KPiArc3RhdGljIHN0cnVjdCBpZ3RfZGV2aWNlcyBp Z3RfZGV2czsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgdmVuZG9yX3NwZWMgdl9pbnRlbCAgPSB7IC52 ZW5kb3IgPSAiSW50ZWwiLAo+ICsJCQkJICAgICAgIC5jaGlwc2V0ID0gRFJJVkVSX0lOVEVMCj4g KwkJCQkgICAgIH07Cj4gK3N0YXRpYyBzdHJ1Y3QgdmVuZG9yX3NwZWMgdl9hbWQgICAgPSB7IC52 ZW5kb3IgPSAiQU1EIiwKPiArCQkJCSAgICAgICAuY2hpcHNldCA9IERSSVZFUl9BTURHUFUKPiAr CQkJCSAgICAgfTsKPiArc3RhdGljIHN0cnVjdCB2ZW5kb3Jfc3BlYyB2X3ZnZW0gICA9IHsgLnZl bmRvciA9ICJWaXJ0dWFsLUdFTSIsCj4gKwkJCQkgICAgICAgLmNoaXBzZXQgPSBEUklWRVJfVkdF TQo+ICsJCQkJICAgICB9Owo+ICtzdGF0aWMgc3RydWN0IHZlbmRvcl9zcGVjIHZfdmM0ICAgID0g eyAudmVuZG9yID0gIkJyb2FkY29tIiwKPiArCQkJCSAgICAgICAuY2hpcHNldCA9IERSSVZFUl9W QzQKPiArCQkJCSAgICAgfTsKPiArCj4gKy8qIE1hcHBpbmcgdmVuZG9yIGlkID0+IHZlbmRvcl9z cGVjIHNob3VsZCBiZSB1bmlxdWUgKHZlbmRvciBzdHJpbmcgbWF0Y2hpbmcKPiArICogaXMgd3Jp dHRlbiBhcm91bmQgdGhpcykuCj4gKyAqCj4gKyAqIEtleXMgbXVzdCBiZSBkZWZpbmVkIGFzIGZv bGxvd3M6Cj4gKyAqIFBDSSBkZXZpY2VzOiBQQ0lfU0xPVF9JRCAtPiB2ZW5kb3Jfc3BlYy4KPiAr Ki8KPiArc3RydWN0IG5hbWVfdmFsdWUgZ3B1X3ZlbmRvcl9saXN0W10gPSB7Cj4gKwl7ICI4MDg2 IiwgKGdwb2ludGVyKSAmdl9pbnRlbCB9LAo+ICsJeyAiMTAwMiIsIChncG9pbnRlcikgJnZfYW1k IH0sCj4gKwl7IE5VTEwsIH0sCj4gK307Cj4gKwo+ICsvKiBHZW5lcmljIGhhc2ggdGFibGUgZmls bCBmdW5jdGlvbiwgcmVxdWlyZXMgbmFtZSAvIHZhbHVlIHB0cnMgYXJyYXkgKi8KPiArc3RhdGlj IHZvaWQgZmlsbF9odChHSGFzaFRhYmxlICoqaHQsIHN0cnVjdCBuYW1lX3ZhbHVlICpkYXRhKQo+ ICt7Cj4gKwlpZiAoKmh0KQo+ICsJCXJldHVybjsKPiArCj4gKwkqaHQgPSBnX2hhc2hfdGFibGVf bmV3KGdfc3RyX2hhc2gsIGdfc3RyX2VxdWFsKTsKPiArCWlndF9hc3NlcnQoKmh0KTsKPiArCj4g Kwl3aGlsZSAoZGF0YS0+bmFtZSkgewo+ICsJCWdfaGFzaF90YWJsZV9pbnNlcnQoKmh0LAo+ICsJ CQkJICAgIChncG9pbnRlcikgZGF0YS0+bmFtZSwKPiArCQkJCSAgICBkYXRhLT52YWx1ZSk7Cj4g KwkJZGF0YSsrOwo+ICsJfQo+ICt9Cj4gKwo+ICsjZGVmaW5lIGdldF92ZW5kb3Jfc3BlYyhwcm9w KSBcCj4gKwlnX2hhc2hfdGFibGVfbG9va3VwKGdwdV92ZW5kb3JfaHQsIHByb3ApCj4gKwo+ICsv KiBHbyB0aHJvdWdoIHdob2xlIHZlbmRvciBsaXN0IGFuZCBjb21wYXJlIGFnYWluc3QgdmVuZG9y IGZpZWxkLgo+ICsgKiBVc2VkIG1vc3RseSB3aXRoIHZlbmRvcj0uLi4gZmlsdGVyIHBhcmFtZXRl ciB3aGVuIFBDSSBpZCBpcyBub3QgbWF0Y2hlZC4KPiArKi8KPiArc3RhdGljIGNvbnN0IGNoYXIg KmdldF9wY2lfdmVuZG9yX2lkX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSkKPiArewo+ICsJc3Ry dWN0IG5hbWVfdmFsdWUgKmRhdGEgPSAmZ3B1X3ZlbmRvcl9saXN0WzBdOwo+ICsKPiArCXdoaWxl IChkYXRhLT5uYW1lKSB7Cj4gKwkJc3RydWN0IHZlbmRvcl9zcGVjICp2cyA9IChzdHJ1Y3QgdmVu ZG9yX3NwZWMgKikgZGF0YS0+dmFsdWU7Cj4gKwkJaWYgKCFzdHJjYXNlY21wKG5hbWUsIHZzLT52 ZW5kb3IpKQo+ICsJCQlyZXR1cm4gZGF0YS0+bmFtZTsKPiArCQlkYXRhKys7Cj4gKwl9Cj4gKwo+ ICsJcmV0dXJuIE5VTEw7Cj4gK30KPiArCj4gKy8qIFJlYWRpbmcgc3lzYXR0ciB2YWx1ZXMgY2Fu IHRha2UgdGltZSAoZXZlbiBzZWNvbmRzKSwKPiArICogd2Ugd2FudCB0byBhdm9pZCByZWFkaW5n IHN1Y2gga2V5cy4KPiArKi8KPiArc3RhdGljIHZvaWQgcG9wdWxhdGVfYmxhY2tsaXN0X2tleXMo dm9pZCkKPiArewo+ICsJY29uc3QgY2hhciAqa2V5c1tdID0geyAiY29uZmlnIiwgIm1vZGFsaWFz IiwgIm1vZGVzIiwKPiArCQkJICAgICAgICJyZXNvdXJjZSIsCj4gKwkJCSAgICAgICAicmVzb3Vy Y2UwIiwgInJlc291cmNlMSIsICJyZXNvdXJjZTIiLAo+ICsJCQkgICAgICAgInJlc291cmNlMyIs ICJyZXNvdXJjZTQiLCAicmVzb3VyY2U1IiwKPiArCQkJICAgICAgICJyZXNvdXJjZTBfd2MiLCAi cmVzb3VyY2UxX3djIiwgInJlc291cmNlMl93YyIsCj4gKwkJCSAgICAgICAicmVzb3VyY2UzX3dj IiwgInJlc291cmNlNF93YyIsICJyZXNvdXJjZTVfd2MiLAo+ICsJCQkgICAgICAgImRyaXZlciIs Cj4gKwkJCSAgICAgICAidWV2ZW50IiwgTlVMTH07Cj4gKwljb25zdCBjaGFyICprZXk7Cj4gKwlp bnQgaSA9IDA7Cj4gKwo+ICsJaWYgKHN5c2F0dHJzX2JsYWNrbGlzdF9odCkKPiArCQlyZXR1cm47 Cj4gKwo+ICsJc3lzYXR0cnNfYmxhY2tsaXN0X2h0ID0gZ19oYXNoX3RhYmxlX25ldyhnX3N0cl9o YXNoLCBnX3N0cl9lcXVhbCk7Cj4gKwlpZ3RfYXNzZXJ0KHN5c2F0dHJzX2JsYWNrbGlzdF9odCk7 Cj4gKwo+ICsJd2hpbGUgKChrZXkgPSBrZXlzW2krK10pKQo+ICsJCWdfaGFzaF90YWJsZV9hZGQo c3lzYXR0cnNfYmxhY2tsaXN0X2h0LCAoZ3BvaW50ZXIpIGtleSk7Cj4gK30KPiArCj4gKyNkZWZp bmUgaXNfb25fYmxhY2tsaXN0KGtleSkgXAo+ICsJZ19oYXNoX3RhYmxlX2NvbnRhaW5zKHN5c2F0 dHJzX2JsYWNrbGlzdF9odCwga2V5KQo+ICsKPiArc3RhdGljIHN0cnVjdCBpZ3RfZGV2aWNlICpp Z3RfZGV2aWNlX25ldyh2b2lkKQo+ICt7Cj4gKwlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2Owo+ICsJ ZGV2ID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgaWd0X2RldmljZSkpOwo+ICsJaWYgKCFkZXYp Cj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwo+ICsJZGV2LT5hdHRyc19odCA9IGdfaGFzaF90YWJsZV9u ZXdfZnVsbChnX3N0cl9oYXNoLCBnX3N0cl9lcXVhbCwKPiArCQkJCQkgICAgICBmcmVlLCBmcmVl KTsKPiArCWRldi0+cHJvcHNfaHQgPSBnX2hhc2hfdGFibGVfbmV3X2Z1bGwoZ19zdHJfaGFzaCwg Z19zdHJfZXF1YWwsCj4gKwkJCQkJICAgICAgZnJlZSwgZnJlZSk7Cj4gKwo+ICsJaWYgKGRldi0+ YXR0cnNfaHQgJiYgZGV2LT5wcm9wc19odCkKPiArCQlyZXR1cm4gZGV2Owo+ICsKPiArCXJldHVy biBOVUxMOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpZ3RfZGV2aWNlX2FkZF9wcm9wKHN0cnVj dCBpZ3RfZGV2aWNlICpkZXYsCj4gKwkJCQljb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZh bHVlKQo+ICt7Cj4gKwlpZiAoIWtleSB8fCAhdmFsdWUpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWdf aGFzaF90YWJsZV9pbnNlcnQoZGV2LT5wcm9wc19odCwgc3RyZHVwKGtleSksIHN0cmR1cCh2YWx1 ZSkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpZ3RfZGV2aWNlX2FkZF9hdHRyKHN0cnVjdCBp Z3RfZGV2aWNlICpkZXYsCj4gKwkJCQljb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVl KQo+ICt7Cj4gKwljb25zdCBjaGFyICp2ID0gdmFsdWU7Cj4gKwo+ICsJaWYgKCFrZXkpCj4gKwkJ cmV0dXJuOwo+ICsKPiArCS8qIEl0J3MgcG9zc2libGUgd2UgaGF2ZSBzeW1saW5rIGF0IGtleSBm aWxlbmFtZSwgYnV0IHVkZXYKPiArCSAqIGxpYnJhcnkgcmVzb2x2ZXMgb25seSBmZXcgb2YgdGhl bSAqLwo+ICsJaWYgKCF2KSB7Cj4gKwkJc3RydWN0IHN0YXQgc3Q7Cj4gKwkJY2hhciBwYXRoW1BB VEhfTUFYXTsKPiArCQljaGFyIGxpbmt0b1tQQVRIX01BWF07Cj4gKwkJaW50IGxlbjsKPiArCj4g KwkJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiJXMvJXMiLCBkZXYtPnN5c3BhdGgsIGtl eSk7Cj4gKwkJaWYgKGxzdGF0KHBhdGgsICZzdCkgIT0gMCkKPiArCQkJcmV0dXJuOwo+ICsKPiAr CQlsZW4gPSByZWFkbGluayhwYXRoLCBsaW5rdG8sIHNpemVvZihsaW5rdG8pKTsKPiArCQlpZiAo bGVuIDw9IDAgfHwgbGVuID09IChzc2l6ZV90KSBzaXplb2YobGlua3RvKSkKPiArCQkJcmV0dXJu Owo+ICsJCWxpbmt0b1tsZW5dID0gJ1wwJzsKPiArCQl2ID0gc3RycmNocihsaW5rdG8sICcvJyk7 Cj4gKwkJaWYgKHYgPT0gTlVMTCkKPiArCQkJcmV0dXJuOwo+ICsJCXYrKzsKPiArCX0KPiArCj4g KwlnX2hhc2hfdGFibGVfaW5zZXJ0KGRldi0+YXR0cnNfaHQsIHN0cmR1cChrZXkpLCBzdHJkdXAo dikpOwo+ICt9Cj4gKwo+ICsvKiBJdGVyYXRlIG92ZXIgdWRldiBwcm9wZXJ0aWVzIGxpc3QgYW5k IHJld3JpdGUgaXQgdG8gaWd0X2RldmljZSBwcm9wZXJ0aWVzCj4gKyAqIGhhc2ggdGFibGUgZm9y IGluc3RhbnQgYWNjZXNzLgo+ICsgKi8KPiArc3RhdGljIHZvaWQgZ2V0X3Byb3BzKHN0cnVjdCB1 ZGV2X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWd0X2RldmljZSAqaWRldikKPiArewo+ICsJc3RydWN0 IHVkZXZfbGlzdF9lbnRyeSAqZW50cnk7Cj4gKwo+ICsJZW50cnkgPSB1ZGV2X2RldmljZV9nZXRf cHJvcGVydGllc19saXN0X2VudHJ5KGRldik7Cj4gKwl3aGlsZSAoZW50cnkpIHsKPiArCQljb25z dCBjaGFyICpuYW1lID0gdWRldl9saXN0X2VudHJ5X2dldF9uYW1lKGVudHJ5KTsKPiArCQljb25z dCBjaGFyICp2YWx1ZSA9IHVkZXZfbGlzdF9lbnRyeV9nZXRfdmFsdWUoZW50cnkpOwo+ICsJCWln dF9kZXZpY2VfYWRkX3Byb3AoaWRldiwgbmFtZSwgdmFsdWUpOwo+ICsJCWVudHJ5ID0gdWRldl9s aXN0X2VudHJ5X2dldF9uZXh0KGVudHJ5KTsKPiArCQlEQkcoInByb3A6ICVzLCB2YWw6ICVzXG4i LCBuYW1lLCB2YWx1ZSk7Cj4gKwl9Cj4gK30KPiArCj4gKy8qIFNhbWUgYXMgZ2V0X3Byb3BzKCks IGJ1dCByZXdyaXRlcyBzeXNhdHRycy4gUmVzb2x2ZXMgc3ltYm9saWMgbGlua3MKPiArICogbm90 IGhhbmRsZWQgYnkgdWRldiBnZXRfc3lzYXR0cl92YWx1ZSgpLgo+ICsgKiBGdW5jdGlvbiBza2lw cyBzeXNhdHRycyBmcm9tIGJsYWNrbGlzdCBodCAoYWNxdWlyaW5nIHNvbWUgdmFsdWVzIGNhbiB0 YWtlCj4gKyAqIHNlY29uZHMpLgo+ICsgKi8KPiArc3RhdGljIHZvaWQgZ2V0X2F0dHJzKHN0cnVj dCB1ZGV2X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWd0X2RldmljZSAqaWRldikKPiArewo+ICsJc3Ry dWN0IHVkZXZfbGlzdF9lbnRyeSAqZW50cnk7Cj4gKwo+ICsJZW50cnkgPSB1ZGV2X2RldmljZV9n ZXRfc3lzYXR0cl9saXN0X2VudHJ5KGRldik7Cj4gKwl3aGlsZSAoZW50cnkpIHsKPiArCQljb25z dCBjaGFyICprZXkgPSB1ZGV2X2xpc3RfZW50cnlfZ2V0X25hbWUoZW50cnkpOwo+ICsJCWNvbnN0 IGNoYXIgKnZhbHVlOwo+ICsKPiArCQlpZiAoaXNfb25fYmxhY2tsaXN0KGtleSkpIHsKPiArCQkJ ZW50cnkgPSB1ZGV2X2xpc3RfZW50cnlfZ2V0X25leHQoZW50cnkpOwo+ICsJCQljb250aW51ZTsK PiArCQl9Cj4gKwo+ICsJCXZhbHVlID0gdWRldl9kZXZpY2VfZ2V0X3N5c2F0dHJfdmFsdWUoZGV2 LCBrZXkpOwo+ICsJCWlndF9kZXZpY2VfYWRkX2F0dHIoaWRldiwga2V5LCB2YWx1ZSk7Cj4gKwkJ ZW50cnkgPSB1ZGV2X2xpc3RfZW50cnlfZ2V0X25leHQoZW50cnkpOwo+ICsJCURCRygiYXR0cjog JXMsIHZhbDogJXNcbiIsIGtleSwgdmFsdWUpOwo+ICsJfQo+ICt9Cj4gKwo+ICsjZGVmaW5lIGdl dF9wcm9wKGRldiwgcHJvcCkgKGNoYXIgKikgZ19oYXNoX3RhYmxlX2xvb2t1cChkZXYtPnByb3Bz X2h0LCBwcm9wKQo+ICsjZGVmaW5lIGdldF9hdHRyKGRldiwgYXR0cikgKGNoYXIgKikgZ19oYXNo X3RhYmxlX2xvb2t1cChkZXYtPmF0dHJzX2h0LCBhdHRyKQpJIHdvdWxkIGFkZCBwYXJlbnRoZXNl cyB0byB0aGVzZSAyIG1hY3JvcyBeXiAtIGl0IHdpbGwgYmUgbW9yZSB2aXNpYmxlIHdoZXJlCico Y2hhciAqKScgYmVsb25ncy4gSXQgaXMgb2J2aW91cyBidXQgYW55d2F5IDopCgo+ICsjZGVmaW5l IGdldF9wcm9wX3N1YnN5c3RlbShkZXYpIGdldF9wcm9wKGRldiwgIlNVQlNZU1RFTSIpCj4gKyNk ZWZpbmUgaXNfZHJtX3N1YnN5c3RlbShkZXYpICAgKCFzdHJjbXAoZ2V0X3Byb3Bfc3Vic3lzdGVt KGRldiksICJkcm0iKSkKPiArI2RlZmluZSBpc19wY2lfc3Vic3lzdGVtKGRldikgICAoIXN0cmNt cChnZXRfcHJvcF9zdWJzeXN0ZW0oZGV2KSwgInBjaSIpKQo+ICsjZGVmaW5lIGlzX3BsYXRmb3Jt X3N1YnN5c3RlbShkZXYpICghc3RyY21wKGdldF9wcm9wX3N1YnN5c3RlbShkZXYpLCAicGxhdGZv cm0iKSkKPiArCj4gKy8qIEdldHMgUENJX0lEIHByb3BlcnR5LCBzcGxpdHMgdG8geHh4eDp5eXl5 IGFuZCBzdG9yZXMKPiArICogeHh4eCB0byBkZXYtPnZlbmRvciBhbmQgeXl5eSB0byBkZXYtPmRl dmljZSBmb3IKPiArICogZmFzdGVyIGFjY2Vzcy4KPiArICovCj4gK3N0YXRpYyB2b2lkIHNldF92 ZW5kb3JfZGV2aWNlKHN0cnVjdCBpZ3RfZGV2aWNlICpkZXYpCj4gK3sKPiArCWNvbnN0IGNoYXIg KnBjaV9pZCA9IGdldF9wcm9wKGRldiwgIlBDSV9JRCIpOwo+ICsJaWYgKCFwY2lfaWQgfHwgc3Ry bGVuKHBjaV9pZCkgIT0gOSkKPiArCQlyZXR1cm47Cj4gKwlkZXYtPnZlbmRvciA9IHN0cm5kdXAo cGNpX2lkLCA0KTsKPiArCWRldi0+ZGV2aWNlID0gc3RybmR1cChwY2lfaWQgKyA1LCA0KTsKPiAr fQo+ICsKPiArLyogQWxsb2NhdGUgYXJyYXlzIGZvciBrZWVwaW5nIHNjYW5uZWQgZGV2aWNlcyAq LwpTdHlsZSBjb21tZW50OiBwcmV2aW91cyBkb2MgaGVhZGVycyBzdGFydGVkIHdpdGggR2V0cy9T ZXRzIChhcyAnRnVuY3Rpb24nIGdldHMpLgpUaGlzIG9uZSBzdGFydHMgd2l0aG91dCAncycuIExl dCdzIHVuaWZ5IHRoYXQgOikKCj4gK3N0YXRpYyBib29sIHByZXBhcmVfc2Nhbih2b2lkKQo+ICt7 Cj4gKwlpZiAoIWlndF9kZXZzLmRldnMpCj4gKwkJaWd0X2RldnMuZGV2cyA9IGdfcHRyX2FycmF5 X3NpemVkX25ldyg0KTsKPiArCWlmICghaWd0X2RldnMudmlldykKPiArCQlpZ3RfZGV2cy52aWV3 ID0gZ19wdHJfYXJyYXlfc2l6ZWRfbmV3KDQpOwo+ICsKPiArCWlmICghaWd0X2RldnMuZGV2cyB8 fCAhaWd0X2RldnMudmlldykKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJcmV0dXJuIHRydWU7 Cj4gK30KPiArCj4gKy8qIENyZWF0ZSBuZXcgaWd0X2RldmljZSBmcm9tIHVkZXYgZGV2aWNlLgo+ ICsgICBGaWxscyBzdHJ1Y3R1cmUgd2l0aCBtb3N0IHVzYWJsZSB1ZGV2IGRldmljZSB2YXJpYWJs ZXMsIHByb3BlcnRpZXMKPiArICAgYW5kIHN5c2F0dHJzLgo+ICsqLwo+ICtzdGF0aWMgc3RydWN0 IGlndF9kZXZpY2UgKmlndF9kZXZpY2VfbmV3X2Zyb21fdWRldihzdHJ1Y3QgdWRldl9kZXZpY2Ug KmRldikKPiArewo+ICsJc3RydWN0IGlndF9kZXZpY2UgKmlkZXYgPSBpZ3RfZGV2aWNlX25ldygp Owo+ICsJaWd0X2Fzc2VydChpZGV2KTsKPiArCj4gKwlpZGV2LT5zeXNwYXRoID0gZ19zdHJkdXAo dWRldl9kZXZpY2VfZ2V0X3N5c3BhdGgoZGV2KSk7Cj4gKwlpZGV2LT5zdWJzeXN0ZW0gPSBnX3N0 cmR1cCh1ZGV2X2RldmljZV9nZXRfc3Vic3lzdGVtKGRldikpOwo+ICsJaWRldi0+ZGV2bm9kZSA9 IGdfc3RyZHVwKHVkZXZfZGV2aWNlX2dldF9kZXZub2RlKGRldikpOwo+ICsKPiArCWlmIChpZGV2 LT5kZXZub2RlICYmIHN0cnN0cihpZGV2LT5kZXZub2RlLCAiL2Rldi9kcmkvY2FyZCIpKQo+ICsJ CWlkZXYtPmRybV9jYXJkID0gZ19zdHJkdXAoaWRldi0+ZGV2bm9kZSk7Cj4gKwllbHNlIGlmIChp ZGV2LT5kZXZub2RlICYmIHN0cnN0cihpZGV2LT5kZXZub2RlLCAiL2Rldi9kcmkvcmVuZGVyIikp Cj4gKwkJaWRldi0+ZHJtX3JlbmRlciA9IGdfc3RyZHVwKGlkZXYtPmRldm5vZGUpOwo+ICsKPiAr CWdldF9wcm9wcyhkZXYsIGlkZXYpOwo+ICsJZ2V0X2F0dHJzKGRldiwgaWRldik7Cj4gKwo+ICsJ cmV0dXJuIGlkZXY7Cj4gK30KPiArCj4gKy8qIEl0ZXJhdGUgb3ZlciBhbGwgaWd0X2RldmljZXMg YXJyYXkgYW5kIGZpbmQgb25lIG1hdGNoZWQgdG8KPiArICogc3Vic3lzdGVtIGFuZCBzeXNwYXRo Lgo+ICsqLwo+ICtzdGF0aWMgc3RydWN0IGlndF9kZXZpY2UgKmlndF9kZXZpY2VfZmluZChjb25z dCBjaGFyICpzdWJzeXN0ZW0sCj4gKwkJCQkJICBjb25zdCBjaGFyICpzeXNwYXRoKQo+ICt7Cj4g KwlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2Owo+ICsKPiArCWZvciAoaW50IGkgPSAwOyBpIDwgaWd0 X2RldnMuZGV2cy0+bGVuOyBpKyspIHsKPiArCQlkZXYgPSBnX3B0cl9hcnJheV9pbmRleChpZ3Rf ZGV2cy5kZXZzLCBpKTsKPiArCQlpZiAoIXN0cmNtcChkZXYtPnN1YnN5c3RlbSwgc3Vic3lzdGVt KSAmJgo+ICsJCQkhc3RyY21wKGRldi0+c3lzcGF0aCwgc3lzcGF0aCkpCj4gKwkJCXJldHVybiBk ZXY7Cj4gKwl9Cj4gKwlyZXR1cm4gTlVMTDsKPiArfQo+ICsKPiArLyogRm9yIGVhY2ggZHJtIGln dF9kZXZpY2UgYWRkIG9yIHVwZGF0ZSBpdHMgcGFyZW50IGlndF9kZXZpY2UgdG8gdGhlIGFycmF5 Lgo+ICsgICBBcyBjYXJkL3JlbmRlciBkcm0gZGV2aWNlcyBtb3N0bHkgaGF2ZSBzYW1lIHBhcmVu dCAodmttcyBpcyBhbiBleGNlcHRpb24pCj4gKyAgIGxpbmsgdG8gaXQgYW5kIHVwZGF0ZSBjb3Jy ZXNwb25kaW5nIGRybV9jYXJkIC8gZHJtX3JlbmRlciBmaWVsZHMuCj4gKyovCj4gK3N0YXRpYyB2 b2lkIHVwZGF0ZV9vcl9hZGRfcGFyZW50KHN0cnVjdCB1ZGV2X2RldmljZSAqZGV2LAo+ICsJCQkJ IHN0cnVjdCBpZ3RfZGV2aWNlICppZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgdWRldl9kZXZpY2UgKnBh cmVudF9kZXY7Cj4gKwlzdHJ1Y3QgaWd0X2RldmljZSAqcGFyZW50X2lkZXY7Cj4gKwljb25zdCBj aGFyICpzdWJzeXN0ZW0sICpzeXNwYXRoLCAqZGV2bmFtZTsKPiArCj4gKwlwYXJlbnRfZGV2ID0g dWRldl9kZXZpY2VfZ2V0X3BhcmVudChkZXYpOwo+ICsJaWd0X2Fzc2VydChwYXJlbnRfZGV2KTsK PiArCj4gKwlzdWJzeXN0ZW0gPSB1ZGV2X2RldmljZV9nZXRfc3Vic3lzdGVtKHBhcmVudF9kZXYp Owo+ICsJc3lzcGF0aCA9IHVkZXZfZGV2aWNlX2dldF9zeXNwYXRoKHBhcmVudF9kZXYpOwo+ICsK PiArCXBhcmVudF9pZGV2ID0gaWd0X2RldmljZV9maW5kKHN1YnN5c3RlbSwgc3lzcGF0aCk7Cj4g KwlpZiAoIXBhcmVudF9pZGV2KSB7Cj4gKwkJcGFyZW50X2lkZXYgPSBpZ3RfZGV2aWNlX25ld19m cm9tX3VkZXYocGFyZW50X2Rldik7Cj4gKwkJaWYgKGlzX3BjaV9zdWJzeXN0ZW0ocGFyZW50X2lk ZXYpKSB7Cj4gKwkJCXNldF92ZW5kb3JfZGV2aWNlKHBhcmVudF9pZGV2KTsKPiArCQkJcGFyZW50 X2lkZXYtPnZzID0gZ2V0X3ZlbmRvcl9zcGVjKHBhcmVudF9pZGV2LT52ZW5kb3IpOwo+ICsJCX0K PiArCQlnX3B0cl9hcnJheV9hZGQoaWd0X2RldnMuZGV2cywgcGFyZW50X2lkZXYpOwo+ICsJfQo+ ICsJZGV2bmFtZSA9IHVkZXZfZGV2aWNlX2dldF9kZXZub2RlKGRldik7Cj4gKwlpZiAoc3Ryc3Ry KGRldm5hbWUsICIvZGV2L2RyaS9jYXJkIikpCj4gKwkJcGFyZW50X2lkZXYtPmRybV9jYXJkID0g Z19zdHJkdXAoZGV2bmFtZSk7Cj4gKwllbHNlIGlmIChzdHJzdHIoZGV2bmFtZSwgIi9kZXYvZHJp L3JlbmRlciIpKQo+ICsJCXBhcmVudF9pZGV2LT5kcm1fcmVuZGVyPSBnX3N0cmR1cChkZXZuYW1l KTsKPiArCj4gKwlpZGV2LT5wYXJlbnQgPSBwYXJlbnRfaWRldjsKPiArfQo+ICsKPiArc3RhdGlj IGdpbnQgZGV2c19jb21wYXJlKGdjb25zdHBvaW50ZXIgYSwgZ2NvbnN0cG9pbnRlciBiKQo+ICt7 Cj4gKwlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2MSwgKmRldjI7Cj4gKwlpbnQgcmV0Owo+ICsKPiAr CWRldjEgPSAqKHN0cnVjdCBpZ3RfZGV2aWNlICoqKSBhOwo+ICsJZGV2MiA9ICooc3RydWN0IGln dF9kZXZpY2UgKiopIGI7Cj4gKwlyZXQgPSBzdHJjbXAoZGV2MS0+c3Vic3lzdGVtLCBkZXYyLT5z dWJzeXN0ZW0pOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCXJldHVybiBz dHJjbXAoZGV2MS0+c3lzcGF0aCwgZGV2Mi0+c3lzcGF0aCk7Cj4gK30KPiArCj4gKy8qIENvcmUg c2Nhbm5pbmcgZnVuY3Rpb24uCj4gKyAqCj4gKyAqIEFsbCBzY2FubmVkIGRldmljZXMgYXJlIGtl cHQgaW5zaWRlIGlndF9kZXZzLmRldnMgcG9pbnRlciBhcnJheS4KPiArICogRWFjaCBhZGRlZCBk ZXZpY2UgaXMgaWd0X2RldmljZSBzdHJ1Y3R1cmUsIHdoaWNoIGNvbnRyYXJ5IHRvIHVkZXYgZGV2 aWNlCj4gKyAqIGhhcyBwcm9wZXJ0aWVzIC8gc3lzYXR0cnMgc3RvcmVkIGluc2lkZSBoYXNoIHRh YmxlIGluc3RlYWQgb2YgbGlzdC4KPiArICoKPiArICogRnVuY3Rpb24gaXRlcmF0ZXMgb3ZlciBk ZXZpY2VzIG9uICdkcm0nIHN1YnN5c3RlbS4gRm9yIGVhY2ggZHJtIGRldmljZQo+ICsgKiBpdHMg cGFyZW50IGlzIHRha2VuIChidXMgZGV2aWNlKSBhbmQgc3RvcmVkIGluc2lkZSBzYW1lIGFycmF5 Lgo+ICsgKiBGdW5jdGlvbiBzb3J0cyBhbGwgZm91bmQgZGV2aWNlcyB0byBrZWVwIHNhbWUgb3Jk ZXIgb2YgYnVzIGRldmljZXMKPiArICogZm9yIHByb3ZpZGluZyBwcmVkaWN0YWJsZSBzZWFyY2gu Cj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBzY2FuX2RybV9kZXZpY2VzKHZvaWQpCj4gK3sKPiArCXN0 cnVjdCB1ZGV2ICp1ZGV2Owo+ICsJc3RydWN0IHVkZXZfZW51bWVyYXRlICplbnVtZXJhdGU7Cj4g KwlzdHJ1Y3QgdWRldl9saXN0X2VudHJ5ICpkZXZpY2VzLCAqZGV2X2xpc3RfZW50cnk7Cj4gKwlp bnQgcmV0Owo+ICsKPiArCXVkZXYgPSB1ZGV2X25ldygpOwo+ICsJaWd0X2Fzc2VydCh1ZGV2KTsK PiArCj4gKwllbnVtZXJhdGUgPSB1ZGV2X2VudW1lcmF0ZV9uZXcodWRldik7Cj4gKwlpZ3RfYXNz ZXJ0KGVudW1lcmF0ZSk7Cj4gKwo+ICsJREJHKCJTY2FubmluZyBkcm0gc3Vic3lzdGVtXG4iKTsK PiArCXJldCA9IHVkZXZfZW51bWVyYXRlX2FkZF9tYXRjaF9zdWJzeXN0ZW0oZW51bWVyYXRlLCAi ZHJtIik7Cj4gKwlpZ3RfYXNzZXJ0KCFyZXQpOwo+ICsKPiArCXVkZXZfZW51bWVyYXRlX2FkZF9t YXRjaF9wcm9wZXJ0eShlbnVtZXJhdGUsICJERVZOQU1FIiwgIi9kZXYvZHJpLyoiKTsKPiArCWln dF9hc3NlcnQoIXJldCk7Cj4gKwo+ICsJcmV0ID0gdWRldl9lbnVtZXJhdGVfc2Nhbl9kZXZpY2Vz KGVudW1lcmF0ZSk7Cj4gKwlpZ3RfYXNzZXJ0KCFyZXQpOwo+ICsKPiArCWRldmljZXMgPSB1ZGV2 X2VudW1lcmF0ZV9nZXRfbGlzdF9lbnRyeShlbnVtZXJhdGUpOwo+ICsJaWYgKCFkZXZpY2VzKQo+ ICsJCXJldHVybjsKPiArCj4gKwl1ZGV2X2xpc3RfZW50cnlfZm9yZWFjaChkZXZfbGlzdF9lbnRy eSwgZGV2aWNlcykgewo+ICsJCWNvbnN0IGNoYXIgKnBhdGg7Cj4gKwkJc3RydWN0IHVkZXZfZGV2 aWNlICpkZXY7Cj4gKwkJc3RydWN0IGlndF9kZXZpY2UgKmlkZXY7Cj4gKwo+ICsJCXBhdGggPSB1 ZGV2X2xpc3RfZW50cnlfZ2V0X25hbWUoZGV2X2xpc3RfZW50cnkpOwo+ICsJCWRldiA9IHVkZXZf ZGV2aWNlX25ld19mcm9tX3N5c3BhdGgodWRldiwgcGF0aCk7Cj4gKwkJaWRldiA9IGlndF9kZXZp Y2VfbmV3X2Zyb21fdWRldihkZXYpOwo+ICsJCXVwZGF0ZV9vcl9hZGRfcGFyZW50KGRldiwgaWRl dik7Cj4gKwkJZ19wdHJfYXJyYXlfYWRkKGlndF9kZXZzLmRldnMsIGlkZXYpOwo+ICsKPiArCQl1 ZGV2X2RldmljZV91bnJlZihkZXYpOwo+ICsJfQo+ICsJdWRldl9lbnVtZXJhdGVfdW5yZWYoZW51 bWVyYXRlKTsKPiArCXVkZXZfdW5yZWYodWRldik7Cj4gKwo+ICsJZ19wdHJfYXJyYXlfc29ydChp Z3RfZGV2cy5kZXZzLCBkZXZzX2NvbXBhcmUpOwo+ICsJZm9yIChpbnQgaSA9IDA7IGkgPCBpZ3Rf ZGV2cy5kZXZzLT5sZW47IGkrKykgewo+ICsJCWdfcHRyX2FycmF5X2FkZChpZ3RfZGV2cy52aWV3 LAo+ICsJCQkJZ19wdHJfYXJyYXlfaW5kZXgoaWd0X2RldnMuZGV2cywgaSkpOwo+ICsJfQo+ICt9 Cj4gKwo+ICtzdHJ1Y3QgbmFtZV92YWx1ZSBmaWx0ZXJfZGVmaW5pdGlvbl9saXN0W107Cj4gK3N0 YXRpYyB2b2lkIHBvcHVsYXRlX2dwdV9kYXRhKHZvaWQpCj4gK3sKPiArCWZpbGxfaHQoJmdwdV92 ZW5kb3JfaHQsICZncHVfdmVuZG9yX2xpc3RbMF0pOwo+ICsJZmlsbF9odCgmZmlsdGVyX2RlZmlu aXRpb25faHQsICZmaWx0ZXJfZGVmaW5pdGlvbl9saXN0WzBdKTsKPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgaWd0X2RldmljZV9mcmVlKHN0cnVjdCBpZ3RfZGV2aWNlICpkZXYpCj4gK3sKPiArCWZy ZWUoZGV2LT5kZXZub2RlKTsKPiArCWZyZWUoZGV2LT5zdWJzeXN0ZW0pOwo+ICsJZnJlZShkZXYt PnN5c3BhdGgpOwo+ICsJZnJlZShkZXYtPmRybV9jYXJkKTsKPiArCWZyZWUoZGV2LT5kcm1fcmVu ZGVyKTsKPiArCWZyZWUoZGV2LT52ZW5kb3IpOwo+ICsJZnJlZShkZXYtPmRldmljZSk7Cj4gKwln X2hhc2hfdGFibGVfZGVzdHJveShkZXYtPmF0dHJzX2h0KTsKPiArCWdfaGFzaF90YWJsZV9kZXN0 cm95KGRldi0+cHJvcHNfaHQpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogaWd0X2RldmljZXNfc2Nh bgo+ICsgKiBAZm9yY2U6IGVuZm9yY2Ugc2Nhbm5pbmcgZGV2aWNlcwo+ICsgKgo+ICsgKiBGdW5j dGlvbiBzY2FucyB1ZGV2IGluIHNlYXJjaCBvZiBncHUgZGV2aWNlcy4gRm9yIGZpcnN0IHJ1biBp dCBjYW4gYmUKPiArICogY2FsbGVkIHdpdGggQGZvcmNlID0gZmFsc2UuIElmIHNvbWV0aGluZyBj aGFuZ2VzIGR1cmluZyB0aGUgdGhlIHRlc3QKPiArICogb3IgdGVzdCBkb2VzIHNvbWUgbW9kdWxl IGxvYWRpbmcgKG5ldyBkcm0gZGV2aWNlcyBvY2N1cnMgZHVyaW5nIGV4ZWN1dGlvbikKPiArICog ZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYWdhaW4gd2l0aCBAZm9yY2UgPSB0cnVlIHRvIHJlZnJl c2ggZGV2aWNlIGFycmF5Lgo+ICsgKi8KPiArdm9pZCBpZ3RfZGV2aWNlc19zY2FuKGJvb2wgZm9y Y2UpCj4gK3sKPiArCWlmIChmb3JjZSAmJiBpZ3RfZGV2cy5kZXZzX3NjYW5uZWQpIHsKPiArCQlm b3IgKGludCBpID0gMDsgaSA8IGlndF9kZXZzLmRldnMtPmxlbjsgaSsrKSB7Cj4gKwkJCXN0cnVj dCBpZ3RfZGV2aWNlICpkZXYgPQo+ICsJCQkJCWdfcHRyX2FycmF5X2luZGV4KGlndF9kZXZzLmRl dnMsIGkpOwo+ICsJCQlpZ3RfZGV2aWNlX2ZyZWUoZGV2KTsKPiArCQkJZnJlZShkZXYpOwo+ICsJ CX0KPiArCQlpZ3RfZGV2cy5kZXZzX3NjYW5uZWQgPSBmYWxzZTsKPiArCQlnX3B0cl9hcnJheV9m cmVlKGlndF9kZXZzLnZpZXcsIHRydWUpOwo+ICsJCWdfcHRyX2FycmF5X2ZyZWUoaWd0X2RldnMu ZGV2cywgdHJ1ZSk7Cj4gKwkJaWd0X2RldnMudmlldyA9IE5VTEw7Cj4gKwkJaWd0X2RldnMuZGV2 cyA9IE5VTEw7Cj4gKwl9Cj4gKwo+ICsJaWYgKGlndF9kZXZzLmRldnNfc2Nhbm5lZCkKPiArCQly ZXR1cm47Cj4gKwo+ICsJcG9wdWxhdGVfYmxhY2tsaXN0X2tleXMoKTsgICAgICAvL2tleXMgZnJv bSBzeXNhdHRyIHdlIHNraXAKPiArCXBvcHVsYXRlX2dwdV9kYXRhKCk7Cj4gKwo+ICsJcHJlcGFy ZV9zY2FuKCk7Cj4gKwlzY2FuX2RybV9kZXZpY2VzKCk7Cj4gKwo+ICsJaWd0X2RldnMuZGV2c19z Y2FubmVkID0gdHJ1ZTsKPiArfQo+ICsKPiArI2RlZmluZSBwcl9zaW1wbGUoaywgdikgcHJpbnRm KCIgICAgJS0xNnM6ICVzXG4iLCBrLCB2KQo+ICsjZGVmaW5lIHByX3NpbXBsZTIoaywgdjEsIHYy KSBwcmludGYoIiAgICAlLTE2czogJXM6JXNcbiIsIGssIHYxLCB2MikKPiArI2RlZmluZSBwcl9z aW1wbGVfcHJvcChkZXYsIGtleSkgcHJfc2ltcGxlKGtleSwgZ2V0X3Byb3AoZGV2LCBrZXkpKQo+ ICsjZGVmaW5lIHByX3NpbXBsZV9hdHRyKGRldiwga2V5KSBwcl9zaW1wbGUoa2V5LCBnZXRfYXR0 cihkZXYsIGtleSkpCj4gKwo+ICtzdGF0aWMgdm9pZCBpZ3RfZGV2c19wcmludF9zaW1wbGUoR1B0 ckFycmF5ICp2aWV3KQo+ICt7Cj4gKwlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2Owo+ICsJaW50IGk7 Cj4gKwo+ICsJaWYgKCF2aWV3KQo+ICsJCXJldHVybjsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwg dmlldy0+bGVuOyBpKyspIHsKPiArCQlkZXYgPSBnX3B0cl9hcnJheV9pbmRleCh2aWV3LCBpKTsK PiArCQlwcmludGYoIiVzOiVzXG4iLCBkZXYtPnN1YnN5c3RlbSwgZGV2LT5zeXNwYXRoKTsKPiAr CQlpZiAoZGV2LT5kcm1fY2FyZCkKPiArCQkJcHJfc2ltcGxlKCJkcm0gY2FyZCIsIGRldi0+ZHJt X2NhcmQpOwo+ICsJCWlmIChkZXYtPmRybV9yZW5kZXIpCj4gKwkJCXByX3NpbXBsZSgiZHJtIHJl bmRlciIsIGRldi0+ZHJtX3JlbmRlcik7Cj4gKwkJaWYgKGlzX2RybV9zdWJzeXN0ZW0oZGV2KSkg ewo+ICsJCQlwcl9zaW1wbGUyKCJwYXJlbnQiLCBkZXYtPnBhcmVudC0+c3Vic3lzdGVtLAo+ICsJ CQkJICAgZGV2LT5wYXJlbnQtPnN5c3BhdGgpOwo+ICsJCX0gZWxzZSB7Cj4gKwkJCWlmIChpc19w Y2lfc3Vic3lzdGVtKGRldikpIHsKPiArCQkJCXByX3NpbXBsZSgidmVuZG9yIiwgZGV2LT52ZW5k b3IpOwo+ICsJCQkJcHJfc2ltcGxlKCJkZXZpY2UiLCBkZXYtPmRldmljZSk7Cj4gKwkJCX0KPiAr CQl9Cj4gKwkJcHJpbnRmKCJcbiIpOwo+ICsJfQo+ICt9ClBsYXlpbmcgYXJvdW5kIHdpdGggdXNh Z2Ugb2YgdGhpcyBjb2RlIHNob3dzIHRoYXQgd2UgcHJpbnQgJ25vdGhpbmcnIHdoZW4Kbm90aGlu ZyBpcyBmb3VuZCwgd2hhdCBpcyBnb29kIDopIGJ1dCB3ZSBhbHNvIGRvIG5vdCBwcmludCBhbnkg aW5mb3JtYXRpb24gdGhhdApkZXZpY2UgZG8gbm90IGV4aXN0LCBlLmcuIHdhcmluaW5nLgoKPiAr Cj4gKyNkZWZpbmUgcHJfZGV0YWlsKGssIHYpIHByaW50ZigiJS0zMnM6ICVzXG4iLCBrLCB2KQo+ ICsKPiArc3RhdGljIHZvaWQgcHJpbnRfaHQoR0hhc2hUYWJsZSAqaHQpCj4gK3sKPiArCUdMaXN0 ICprZXlzID0gZ19oYXNoX3RhYmxlX2dldF9rZXlzKGh0KTsKPiArCWtleXMgPSBnX2xpc3Rfc29y dChrZXlzLCAoR0NvbXBhcmVGdW5jKSBzdHJjbXApOwo+ICsJd2hpbGUgKGtleXMpIHsKPiArCQlj aGFyICprID0gKGNoYXIgKikga2V5cy0+ZGF0YTsKPiArCQljaGFyICp2ID0gZ19oYXNoX3RhYmxl X2xvb2t1cChodCwgayk7Cj4gKwkJcHJfZGV0YWlsKGssIHYpOwo+ICsJCWtleXMgPSBnX2xpc3Rf bmV4dChrZXlzKTsKPiArCX0KPiArCWdfbGlzdF9mcmVlKGtleXMpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBpZ3RfZGV2c19wcmludF9kZXRhaWwoR1B0ckFycmF5ICp2aWV3KQo+ICt7Cj4gKwlz dHJ1Y3QgaWd0X2RldmljZSAqZGV2Owo+ICsJaW50IGk7Cj4gKwo+ICsJaWYgKCF2aWV3KQo+ICsJ CXJldHVybjsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgdmlldy0+bGVuOyBpKyspIHsKPiArCQlk ZXYgPSBnX3B0cl9hcnJheV9pbmRleCh2aWV3LCBpKTsKPiArCQlwcmludGYoIj09PT09PT09PT0g JXM6JXMgPT09PT09PT09PVxuIiwKPiArCQkgICAgICAgZGV2LT5zdWJzeXN0ZW0sIGRldi0+c3lz cGF0aCk7Cj4gKwkJaWYgKCFpc19kcm1fc3Vic3lzdGVtKGRldikpIHsKPiArCQkJcHJfZGV0YWls KCJjYXJkIGRldmljZSIsIGRldi0+ZHJtX2NhcmQpOwo+ICsJCQlwcl9kZXRhaWwoInJlbmRlciBk ZXZpY2UiLCBkZXYtPmRybV9yZW5kZXIpOwo+ICsJCX0KPiArCj4gKwkJcHJpbnRmKCJcbltwcm9w ZXJ0aWVzXVxuIik7Cj4gKwkJcHJpbnRfaHQoZGV2LT5wcm9wc19odCk7Cj4gKwkJcHJpbnRmKCJc blthdHRyaWJ1dGVzXVxuIik7Cj4gKwkJcHJpbnRfaHQoZGV2LT5hdHRyc19odCk7Cj4gKwkJcHJp bnRmKCJcbiIpOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHByaW50X2Z1bmMgewo+ ICsJdm9pZCAoKnBybikoR1B0ckFycmF5ICopOwpEbyB3ZSB3YW50IHRvIGhhdmUgYSBuYW1lIGhl cmUgXj8KCj4gK30gcHJpbnRfZnVuY3Rpb25zW10gPSB7Cj4gKwlbSUdUX1BSSU5UX1NJTVBMRV0g PSB7IC5wcm4gPSBpZ3RfZGV2c19wcmludF9zaW1wbGUgfSwKPiArCVtJR1RfUFJJTlRfREVUQUlM XSA9IHsgLnBybiA9IGlndF9kZXZzX3ByaW50X2RldGFpbCB9LAo+ICt9Owo+ICsKPiArLyoqCj4g KyAqIGlndF9kZXZpY2VzX3ByaW50Cj4gKyAqIEBwcmludHR5cGU6IElHVF9QUklOVF9TSU1QTEUg b3IgSUdUX1BSSU5UX0RFVEFJTAo+ICsgKgo+ICsgKiBGdW5jdGlvbiBpcyB1c2VkIGJ5ICdsc2dw dScgdG9vbCB0byBwcmludCBkZXZpY2UgYXJyYXkgaW4gc2ltcGxlIG9yIGRldGFpbGVkCj4gKyAq IGZvcm0uIFRoaXMgZnVuY3Rpb24gaXMgYWRkZWQgaGVyZSBpbnN0ZWFkIGluICdsc2dwdScgdG8g YXZvaWQgZXhwb3NpbmcKPiArICogaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGF0YSBzdHJ1Y3R1 cmVzLgo+ICsgKi8KPiArdm9pZCBpZ3RfZGV2aWNlc19wcmludChlbnVtIGlndF9kZXZpY2VzX3By aW50X3R5cGUgcHJpbnR0eXBlKQo+ICt7Cj4gKwlwcmludF9mdW5jdGlvbnNbcHJpbnR0eXBlXS5w cm4oaWd0X2RldnMudmlldyk7Cj4gK30KU2hvdWxkIGl0IGJlIHBvc3NpYmxlIHRvIGRvIHNvbWV0 aGluZyBsaWtlOgonbHNncHUgLUQgcGNpOi9zeXMvZGV2aWNlcy9wY2kwMDAwOjAwLzAwMDA6MDA6 MDIuMCcgdG8gc2hvdyBvbmx5IHRoaXMgcGFydGljdWxhcgpkZXZpY2U/IEN1cnJlbnRseSBhbnl0 aGluZyBhZGRlZCBhZnRlciAnLUQnIHBhcmFtZXRlciBpcyBpZ25vcmVkLgoKV3JpdGluZyB0aGlz IGNvbW1lbnQgSSByZWFsaXplZCB0aGF0IHBhcmFtZXRlcnMgJy1kJyBhbmQgJy1EJyBjYW4gYmUg ZWFzaWx5Cm1pc3Rha2VuLiBNYXliZSB3ZSBzaG91bGQgcmV0aGluayB0aGUgbmFtaW5nPwoKPiAr Cj4gKy8qKgo+ICsgKiBpZ3RfZGV2aWNlc19wcmludF92ZW5kb3JzCj4gKyAqCj4gKyAqIFByaW50 IHBjaSBpZCAtPiB2ZW5kb3IgbWFwcGluZ3MuIFZlbmRvciBuYW1lcyBwcmludGVkIGJ5IHRoaXMg ZnVuY3Rpb24KPiArICogY2FuIGJlIHVzZWQgZm9yIGZpbHRlcnMgbGlrZSBwY2kgd2hpY2ggYWxs b3dzIHBhc3NpbmcgdmVuZG9yIC0gbGlrZQo+ICsgKiB2ZW5kb3IgaWQgKDgwODYpIG9yIGFzIGEg c3RyaW5nIChJbnRlbCkuCj4gKyAqLwo+ICt2b2lkIGlndF9kZXZpY2VzX3ByaW50X3ZlbmRvcnMo dm9pZCkKPiArewo+ICsJc3RydWN0IG5hbWVfdmFsdWUgKmxpc3QgPSAmZ3B1X3ZlbmRvcl9saXN0 WzBdOwo+ICsJcHJpbnRmKCJSZWNvZ25pemVkIHZlbmRvcnM6XG4iKTsKPiArCj4gKwlwcmludGYo IiUtOHMgJS0xNnNcbiIsICJQQ0kgSUQiLCAidmVuZG9yIik7Cj4gKwl3aGlsZSAobGlzdC0+bmFt ZSkgewo+ICsJCXN0cnVjdCB2ZW5kb3Jfc3BlYyAqdnMgPSAoc3RydWN0IHZlbmRvcl9zcGVjICop IGxpc3QtPnZhbHVlOwo+ICsJCWlmICh2cykKPiArCQkJcHJpbnRmKCIlLThzICUtMTZzXG4iLCBs aXN0LT5uYW1lLCB2cy0+dmVuZG9yKTsKPiArCQlsaXN0Kys7Cj4gKwl9Cj4gK30KPiArCj4gKy8q IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0gKi8KPiArI2RlZmluZSBGSUxURVJfU1BFQ19OQU1FX0xFTiAzMgo+ ICsjZGVmaW5lIEZJTFRFUl9TUEVDX0RBVEFfTEVOIDI1Ngo+ICtzdHJ1Y3QgZmlsdGVyX3NwZWMg ewo+ICsJY2hhciBuYW1lW0ZJTFRFUl9TUEVDX05BTUVfTEVOXTsKPiArCWNoYXIgZGF0YVtGSUxU RVJfU1BFQ19EQVRBX0xFTl07Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgZmlsdGVyX2Z1bmMgewo+ICsJ R1B0ckFycmF5ICooKmZpbHRlcl9mdW5jdGlvbikoc3RydWN0IGZpbHRlcl9zcGVjICpmc3BlYywK PiArCQkJCSAgICAgIHN0cnVjdCBmaWx0ZXJfZnVuYyAqZmZ1bmMpOwo+ICsJY29uc3QgY2hhciAq aGVscDsKPiArCWNvbnN0IGNoYXIgKmRldGFpbDsKPiArCj4gKwljb25zdCBjaGFyICpwcm9wZXJ0 eTsKPiArCWNvbnN0IGNoYXIgKnZhbHVlOwo+ICt9Owo+ICsKPiArc3RydWN0IGZpbHRlcl9kYXRh IHsKPiArCWNoYXIgKnZlbmRvcjsKPiArCWNoYXIgKmRldmljZTsKPiArCWNoYXIgKmNhcmQ7Cj4g KwljaGFyICpkcm07Cj4gK307Cj4gKwo+ICtzdGF0aWMgR0hhc2hUYWJsZSAqc3BsaXRfZmlsdGVy X2RhdGEoY29uc3QgY2hhciAqZGF0YSkKPiArewo+ICsJR0hhc2hUYWJsZSAqaHQgPSBnX2hhc2hf dGFibGVfbmV3X2Z1bGwoZ19zdHJfaGFzaCwgZ19zdHJfZXF1YWwsCj4gKwkJCQkJICAgICAgIGZy ZWUsIGZyZWUpOwo+ICsJZ2NoYXIgKipzOwo+ICsJZ2NoYXIgKipzdHJ2ID0gZ19zdHJzcGxpdChk YXRhLCAiLCIsIC0xKTsKPiArCj4gKwlzID0gc3RydjsKPiArCXdoaWxlICgqcykgewo+ICsJCWNo YXIgKmssICp2Owo+ICsJCXYgPSBzdHJjaHIoKnMsICc9Jyk7Cj4gKwkJaWYgKCF2KSB7Cj4gKwkJ CXMrKzsKPiArCQkJY29udGludWU7Cj4gKwkJfQo+ICsJCWsgPSBzdHJuZHVwKCpzLCB2IC0gKCpz KSk7Cj4gKwkJdiA9IHN0cmR1cCh2ICsgMSk7Cj4gKwkJZ19oYXNoX3RhYmxlX2luc2VydChodCwg aywgdik7Ckp1c3QgYSBxdWVzdGlvbiBoZXJlIF4gLSB3b3VsZCBjaGVja2luZyB0aGF0IGsgYW5k IHYgYmUgdG9vIG11Y2ggaGVyZT8gLT4gYXJlIHdlCnN1cmUgdGhhdCB2YWx1ZSBzaG91bGQgYmUg dmFsaWQgb3IgZ19oYXNoX3RhYmxlX2luc2VydCBpcyBkZWFsaW5nIHdpdGggdGhhdD8KCj4gKwkJ cysrOwo+ICsJfQo+ICsJZ19zdHJmcmVldihzdHJ2KTsKPiArCj4gKwlyZXR1cm4gaHQ7Cj4gK30K PiArCj4gK3N0YXRpYyBib29sIGdldF9maWx0ZXJfc3BlYyhjb25zdCBjaGFyICpmaWx0ZXIsIHN0 cnVjdCBmaWx0ZXJfc3BlYyAqc3BlYykKPiArewo+ICsJaWYgKCFmaWx0ZXIpCj4gKwkJcmV0dXJu IGZhbHNlOwo+ICsKPiArCWlmIChzc2NhbmYoZmlsdGVyLCAiJTMxW146XTolMjU1cyIsIHNwZWMt Pm5hbWUsIHNwZWMtPmRhdGEpID49IDEpCj4gKwkJcmV0dXJuIHRydWU7Cj4gKwo+ICsJcmV0dXJu IGZhbHNlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBpc192ZW5kb3JfbWF0Y2hlZChzdHJ1Y3Qg aWd0X2RldmljZSAqZGV2LCBjb25zdCBjaGFyICp2ZW5kb3IpCj4gK3sKPiArCWNvbnN0IGNoYXIg KnZlbmRvcl9pZDsKPiArCj4gKwlpZiAoIWRldi0+dmVuZG9yIHx8ICF2ZW5kb3IpCj4gKwkJcmV0 dXJuIGZhbHNlOwo+ICsKPiArCS8qIEZpcnN0IHdlIGNvbXBhcmUgdmVuZG9yIGlkLCBsaWtlIDgw ODYgKi8KPiArCWlmICghc3RyY2FzZWNtcChkZXYtPnZlbmRvciwgdmVuZG9yKSkKPiArCQlyZXR1 cm4gdHJ1ZTsKPiArCj4gKwkvKiBMaWtlbHkgd2UgaGF2ZSB2ZW5kb3Igc3RyaW5nIGluc3RlYWQg b2YgaWQgKi8KPiArCXZlbmRvcl9pZCA9IGdldF9wY2lfdmVuZG9yX2lkX2J5X25hbWUodmVuZG9y KTsKPiArCWlmICghdmVuZG9yX2lkKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwlyZXR1cm4g IXN0cmNhc2VjbXAoZGV2LT52ZW5kb3IsIHZlbmRvcl9pZCk7Cj4gK30KPiArCj4gKy8qIEZpbHRl ciB3aGljaCBtYXRjaGVzIHN1YnN5c3RlbTovc3lzLy4uLiBwYXRoLgo+ICsgKiBVc2VkIGFzIGZp cnN0IGZpbHRlciBpbiBjaGFpbi4KPiArICovCj4gK3N0YXRpYyBHUHRyQXJyYXkgKmZpbHRlcl9z eXMoc3RydWN0IGZpbHRlcl9zcGVjICpmc3BlYywKPiArCQkJICAgICBzdHJ1Y3QgZmlsdGVyX2Z1 bmMgKmZmdW5jKQo+ICt7Cj4gKwkodm9pZCkgZmZ1bmM7Cj4gKwo+ICsJREJHKCJmaWx0ZXIgc3lz XG4iKTsKPiArCWlmICghc3RybGVuKGZzcGVjLT5kYXRhKSkKPiArCQlyZXR1cm4gaWd0X2RldnMu dmlldzsKPiArCj4gKwlmb3IgKGludCBpID0gMDsgaSA8IGlndF9kZXZzLmRldnMtPmxlbjsgaSsr KSB7Cj4gKwkJc3RydWN0IGlndF9kZXZpY2UgKmRldiA9IGdfcHRyX2FycmF5X2luZGV4KGlndF9k ZXZzLmRldnMsIGkpOwo+ICsKPiArCQlpZiAoc3RyZXF1YWwoZGV2LT5zdWJzeXN0ZW0sIGZzcGVj LT5uYW1lKSAmJgo+ICsJCQlzdHJlcXVhbChkZXYtPnN5c3BhdGgsIGZzcGVjLT5kYXRhKSkgewo+ ICsJCQlnX3B0cl9hcnJheV9hZGQoaWd0X2RldnMudmlldywgZGV2KTsKPiArCQkJYnJlYWs7Cj4g KwkJfQo+ICsJfQo+ICsKPiArCURCRygiRmlsdGVyIHN5cyB2aWV3IHNpemU6ICVkXG4iLCBpZ3Rf ZGV2cy52aWV3LT5sZW4pOwo+ICsKPiArCXJldHVybiBpZ3RfZGV2cy52aWV3Owo+ICt9Cj4gKwo+ ICsvKiBGaW5kIGRybSBkZXZpY2UgdXNpbmcgZGlyZWN0IHBhdGggdG8gL2Rldi9kcmkvLgo+ICsg KiBJdCBleHRlbmRzIGZpbHRlcl9zeXMgdG8gYWxsb3cgdXNpbmcgZHJtOi9kZXYvZHJpL2NhcmRY IGFuZAo+ICsgKiBkcm06L2Rldi9kcmkvcmVuZGVyRFggZmlsdGVyIHN5bnRheC4KPiArICovCj4g K3N0YXRpYyBHUHRyQXJyYXkgKmZpbHRlcl9kcm0oc3RydWN0IGZpbHRlcl9zcGVjICpmc3BlYywK PiArCQkJICAgICBzdHJ1Y3QgZmlsdGVyX2Z1bmMgKmZmdW5jKQo+ICt7Cj4gKwkodm9pZCkgZmZ1 bmM7Cj4gKwo+ICsJREJHKCJmaWx0ZXIgZHJtXG4iKTsKPiArCWlmICghc3RybGVuKGZzcGVjLT5k YXRhKSkKPiArCQlyZXR1cm4gaWd0X2RldnMudmlldzsKPiArCj4gKwlmb3IgKGludCBpID0gMDsg aSA8IGlndF9kZXZzLmRldnMtPmxlbjsgaSsrKSB7Cj4gKwkJc3RydWN0IGlndF9kZXZpY2UgKmRl diA9IGdfcHRyX2FycmF5X2luZGV4KGlndF9kZXZzLmRldnMsIGkpOwo+ICsJCWlmICghaXNfZHJt X3N1YnN5c3RlbShkZXYpKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJaWYgKHN0cmVxdWFsKGRl di0+c3lzcGF0aCwgZnNwZWMtPmRhdGEpIHx8Cj4gKwkJCXN0cmVxdWFsKGRldi0+ZHJtX2NhcmQs IGZzcGVjLT5kYXRhKSB8fAo+ICsJCQlzdHJlcXVhbChkZXYtPmRybV9yZW5kZXIsIGZzcGVjLT5k YXRhKSkgewo+ICsJCQlnX3B0cl9hcnJheV9hZGQoaWd0X2RldnMudmlldywgZGV2KTsKPiArCQkJ YnJlYWs7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCURCRygiRmlsdGVyIGRybSB2aWV3IHNpemU6ICVk XG4iLCBpZ3RfZGV2cy52aWV3LT5sZW4pOwo+ICsKPiArCXJldHVybiBpZ3RfZGV2cy52aWV3Owo+ ICt9Cj4gKwo+ICsvKiBGaW5kIGFwcHJvcHJpYXRlIHBjaSBkZXZpY2UgbWF0Y2hpbmcgdmVuZG9y L2RldmljZS9jYXJkIGZpbHRlciBhcmd1bWVudHMKPiArKi8KPiArc3RhdGljIEdQdHJBcnJheSAq ZmlsdGVyX3BjaShzdHJ1Y3QgZmlsdGVyX3NwZWMgKmZzcGVjLAo+ICsJCQkgICAgIHN0cnVjdCBm aWx0ZXJfZnVuYyAqZmZ1bmMpCj4gK3sKPiArCUdIYXNoVGFibGUgKmh0Owo+ICsJc3RydWN0IGZp bHRlcl9kYXRhIGZkYXRhOwo+ICsJaW50IGNhcmQgPSAtMTsKPiArCSh2b2lkKSBmZnVuYzsKPiAr Cj4gKwlEQkcoImZpbHRlciBwY2lcbiIpOwo+ICsKPiArCWh0ID0gc3BsaXRfZmlsdGVyX2RhdGEo ZnNwZWMtPmRhdGEpOwo+ICsJZmRhdGEudmVuZG9yID0gZ19oYXNoX3RhYmxlX2xvb2t1cChodCwg InZlbmRvciIpOwo+ICsJZmRhdGEuZGV2aWNlID0gZ19oYXNoX3RhYmxlX2xvb2t1cChodCwgImRl dmljZSIpOwo+ICsJZmRhdGEuY2FyZCA9IGdfaGFzaF90YWJsZV9sb29rdXAoaHQsICJjYXJkIik7 Cj4gKwo+ICsJaWYgKGZkYXRhLmNhcmQpIHsKPiArCQlzc2NhbmYoZmRhdGEuY2FyZCwgIiVkIiwg JmNhcmQpOwpQcm9iYWJseSB3ZSBuZWVkIHRvIGNoZWNrIHNzY2FuZiByZXN1bHQgaGVyZT8KPiAr CQlpZiAoY2FyZCA8IDApIHsKPiArCQkJZ19oYXNoX3RhYmxlX2Rlc3Ryb3koaHQpOwo+ICsJCQly ZXR1cm4gaWd0X2RldnMudmlldzsKPiArCQl9Cj4gKwl9IGVsc2Ugewo+ICsJCWNhcmQgPSAwOwo+ ICsJfQo+ICsKPiArCWZvciAoaW50IGkgPSAwOyBpIDwgaWd0X2RldnMuZGV2cy0+bGVuOyBpKysp IHsKPiArCQlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2ID0gZ19wdHJfYXJyYXlfaW5kZXgoaWd0X2Rl dnMuZGV2cywgaSk7Cj4gKwo+ICsJCWlmICghaXNfcGNpX3N1YnN5c3RlbShkZXYpKQo+ICsJCQlj b250aW51ZTsKPiArCj4gKwkJLyogU2tpcCBpZiAndmVuZG9yJyBkb2Vzbid0IG1hdGNoIChoZXgg b3IgbmFtZSkgKi8KPiArCQlpZiAoZmRhdGEudmVuZG9yICYmICFpc192ZW5kb3JfbWF0Y2hlZChk ZXYsIGZkYXRhLnZlbmRvcikpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQkvKiBTa2lwIGlmICdk ZXZpY2UnIGRvZXNuJ3QgbWF0Y2ggKi8KPiArCQlpZiAoZmRhdGEuZGV2aWNlICYmIHN0cmNhc2Vj bXAoZmRhdGEuZGV2aWNlLCBkZXYtPmRldmljZSkpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQkv KiBXZSBnZXQgbi10aCBjYXJkICovCj4gKwkJaWYgKCFjYXJkKSB7Cj4gKwkJCWdfcHRyX2FycmF5 X2FkZChpZ3RfZGV2cy52aWV3LCBkZXYpOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwkJY2FyZC0t Owo+ICsJfQo+ICsKPiArCURCRygiRmlsdGVyIHBjaSB2aWV3IHNpemU6ICVkXG4iLCBpZ3RfZGV2 cy52aWV3LT5sZW4pOwo+ICsKPiArCWdfaGFzaF90YWJsZV9kZXN0cm95KGh0KTsKPiArCj4gKwly ZXR1cm4gaWd0X2RldnMudmlldzsKPiArfQo+ICsKPiArLyogSGVscGVyIGZvciBmaW5kaW5nIGZp cnN0IGRldmljZSBtYXRjaGluZyBwcm9wZXJ0eTp2YWx1ZS4KPiArKi8KPiArc3RhdGljIEdQdHJB cnJheSAqZmlsdGVyX3Byb3BlcnR5KHN0cnVjdCBmaWx0ZXJfc3BlYyAqZnNwZWMsCj4gKwkJCQkg IHN0cnVjdCBmaWx0ZXJfZnVuYyAqZmZ1bmMpCj4gK3sKPiArCUdIYXNoVGFibGUgKmh0Owo+ICsJ c3RydWN0IGZpbHRlcl9kYXRhIGZkYXRhOwo+ICsJaW50IGNhcmQgPSAtMTsKPiArCWNvbnN0IGNo YXIgKnByb3BlcnR5ID0gZmZ1bmMtPnByb3BlcnR5Owo+ICsJY29uc3QgY2hhciAqdmFsdWUgPSBm ZnVuYy0+dmFsdWU7Cj4gKwo+ICsJaWYgKCFwcm9wZXJ0eSB8fCAhdmFsdWUpCj4gKwkJcmV0dXJu IGlndF9kZXZzLnZpZXc7Cj4gKwo+ICsJREJHKCJmaWx0ZXIgcHJvcGVydHkvdmFsdWUgWyVzLyVz XVxuIiwgcHJvcGVydHksIHZhbHVlKTsKPiArCj4gKwlodCA9IHNwbGl0X2ZpbHRlcl9kYXRhKGZz cGVjLT5kYXRhKTsKPiArCWZkYXRhLmNhcmQgPSBnX2hhc2hfdGFibGVfbG9va3VwKGh0LCAiY2Fy ZCIpOwo+ICsKPiArCWlmIChmZGF0YS5jYXJkKSB7Cj4gKwkJc3NjYW5mKGZkYXRhLmNhcmQsICIl ZCIsICZjYXJkKTsKPiArCQlpZiAoY2FyZCA8IDApIHsKPiArCQkJZ19oYXNoX3RhYmxlX2Rlc3Ry b3koaHQpOwo+ICsJCQlyZXR1cm4gaWd0X2RldnMudmlldzsKPiArCQl9Cj4gKwl9IGVsc2Ugewo+ ICsJCWNhcmQgPSAwOwo+ICsJfQo+ICsKPiArCWZvciAoaW50IGkgPSAwOyBpIDwgaWd0X2RldnMu ZGV2cy0+bGVuOyBpKyspIHsKPiArCQljb25zdCBjaGFyICpwcm9wX3ZhbHVlOwo+ICsJCXN0cnVj dCBpZ3RfZGV2aWNlICpkZXYgPSBnX3B0cl9hcnJheV9pbmRleChpZ3RfZGV2cy5kZXZzLCBpKTsK PiArCj4gKwkJcHJvcF92YWx1ZSA9IGdldF9wcm9wKGRldiwgcHJvcGVydHkpOwo+ICsJCWlmIChw cm9wX3ZhbHVlICYmICFzdHJjbXAocHJvcF92YWx1ZSwgdmFsdWUpKSB7Cj4gKwkJCWlmICghY2Fy ZCkgewo+ICsJCQkJZ19wdHJfYXJyYXlfYWRkKGlndF9kZXZzLnZpZXcsIGRldik7Cj4gKwkJCQli cmVhazsKPiArCQkJfQo+ICsJCQljYXJkLS07Cj4gKwkJfQo+ICsJfQo+ICsKPiArCURCRygiRmls dGVyIHZpZXcgc2l6ZTogJWRcbiIsIGlndF9kZXZzLnZpZXctPmxlbik7Cj4gKwo+ICsJZ19oYXNo X3RhYmxlX2Rlc3Ryb3koaHQpOwo+ICsKPiArCXJldHVybiBpZ3RfZGV2cy52aWV3Owo+ICt9Cj4g Kwo+ICtzdGF0aWMgR1B0ckFycmF5ICpmaWx0ZXJfdmdlbShzdHJ1Y3QgZmlsdGVyX3NwZWMgKmZz cGVjLAo+ICsJCQkgICAgICBzdHJ1Y3QgZmlsdGVyX2Z1bmMgKmZmdW5jKQo+ICt7Cj4gKwlHUHRy QXJyYXkgKnZpZXcgPSBmaWx0ZXJfcHJvcGVydHkoZnNwZWMsIGZmdW5jKTsKPiArCWlmICh2aWV3 KSB7Cj4gKwkJc3RydWN0IGlndF9kZXZpY2UgKmRldiA9IGdfcHRyX2FycmF5X2luZGV4KHZpZXcs IDApOwo+ICsJCWRldi0+dnMgPSAmdl92Z2VtOwo+ICsJfQo+ICsJcmV0dXJuIHZpZXc7Cj4gK30K PiArCj4gK3N0YXRpYyBHUHRyQXJyYXkgKmZpbHRlcl92a21zKHN0cnVjdCBmaWx0ZXJfc3BlYyAq ZnNwZWMsCj4gKwkJCSAgICAgIHN0cnVjdCBmaWx0ZXJfZnVuYyAqZmZ1bmMpCj4gK3sKPiArCXJl dHVybiBmaWx0ZXJfcHJvcGVydHkoZnNwZWMsIGZmdW5jKTsKPiArfQo+ICsKPiArc3RhdGljIEdQ dHJBcnJheSAqZmlsdGVyX3ZjNChzdHJ1Y3QgZmlsdGVyX3NwZWMgKmZzcGVjLAo+ICsJCQkgICAg IHN0cnVjdCBmaWx0ZXJfZnVuYyAqZmZ1bmMpCj4gK3sKPiArCUdQdHJBcnJheSAqdmlldyA9IGZp bHRlcl9wcm9wZXJ0eShmc3BlYywgZmZ1bmMpOwo+ICsJaWYgKHZpZXcpIHsKPiArCQlzdHJ1Y3Qg aWd0X2RldmljZSAqZGV2ID0gZ19wdHJfYXJyYXlfaW5kZXgodmlldywgMCk7Cj4gKwkJZGV2LT52 cyA9ICZ2X3ZjNDsKPiArCX0KPiArCXJldHVybiBmaWx0ZXJfcHJvcGVydHkoZnNwZWMsIGZmdW5j KTsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBmaWx0ZXJfZnVuYyBmX2RybSA9IHsgLmZpbHRl cl9mdW5jdGlvbiA9IGZpbHRlcl9kcm0sCj4gKwkJCQkgICAgLmhlbHAgPSAiZHJtOi9kZXYvZHJp LyogcGF0aCIsCj4gKwkJCQkgICAgLmRldGFpbCA9ICJmaW5kIGRybSBkZXZpY2UgYnkgL2Rldi9k cmkvKiBub2RlXG4iLAo+ICsJCQkJICB9Owo+ICsKPiArc3RhdGljIHN0cnVjdCBmaWx0ZXJfZnVu YyBmX3BjaSA9IHsgLmZpbHRlcl9mdW5jdGlvbiA9IGZpbHRlcl9wY2ksCj4gKwkJCQkgICAgLmhl bHAgPSAicGNpOlt2ZW5kb3I9JTA0eC9uYW1lXVssZGV2aWNlPSUwNHhdWyxjYXJkPSVkXSIsCj4g KwkJCQkgICAgLmRldGFpbCA9ICJ2ZW5kb3IgaXMgaGV4IG51bWJlciBvciB2ZW5kb3IgbmFtZVxu IiwKPiArCQkJCSAgfTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZmlsdGVyX2Z1bmMgZl92Z2VtID0g eyAuZmlsdGVyX2Z1bmN0aW9uID0gZmlsdGVyX3ZnZW0sCj4gKwkJCQkgICAgIC5oZWxwID0gInZn ZW06W2NhcmQ9JWRdIiwKPiArCQkJCSAgICAgLmRldGFpbCA9ICJjYXJkIGlzIG4tdGggdmdlbSBj YXJkIG51bWJlclxuIiwKPiArCQkJCSAgICAgLnByb3BlcnR5ID0gIk1PREFMSUFTIiwKPiArCQkJ CSAgICAgLnZhbHVlID0gInBsYXRmb3JtOnZnZW0iLAo+ICsJCQkJICAgfTsKPiArCj4gK3N0YXRp YyBzdHJ1Y3QgZmlsdGVyX2Z1bmMgZl92a21zID0geyAuZmlsdGVyX2Z1bmN0aW9uID0gZmlsdGVy X3ZrbXMsCj4gKwkJCQkgICAgIC5oZWxwID0gInZrbXM6W2NhcmQ9JWRdIiwKPiArCQkJCSAgICAg LmRldGFpbCA9ICJjYXJkIGlzIG4tdGggdmttcyBjYXJkIG51bWJlclxuIiwKPiArCQkJCSAgICAg LnByb3BlcnR5ID0gIk1PREFMSUFTIiwKPiArCQkJCSAgICAgLnZhbHVlID0gInBsYXRmb3JtOnZr bXMiLAo+ICsJCQkJICAgfTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZmlsdGVyX2Z1bmMgZl92YzQg PSB7IC5maWx0ZXJfZnVuY3Rpb24gPSBmaWx0ZXJfdmM0LAo+ICsJCQkJICAgIC5oZWxwID0gInZj NDpbY2FyZD0lZF0iLAo+ICsJCQkJICAgIC5kZXRhaWwgPSAiY2FyZCBpcyBuLXRoIHZjNCBjYXJk IG51bWJlclxuIiwKPiArCQkJCSAgICAucHJvcGVydHkgPSAiT0ZfQ09NUEFUSUJMRV8wIiwKPiAr CQkJCSAgICAudmFsdWUgPSAiYnJjbSxiY20yODM1LXZjNCIsCj4gKwkJCQkgIH07Cj4gKwo+ICtz dHJ1Y3QgbmFtZV92YWx1ZSBmaWx0ZXJfZGVmaW5pdGlvbl9saXN0W10gPSB7Cj4gKwl7ICJkcm0i LCAgICAgKGdwb2ludGVyKSAmZl9kcm0gfSwKPiArCXsgInBjaSIsICAgICAoZ3BvaW50ZXIpICZm X3BjaSB9LAo+ICsJeyAidmdlbSIsICAgIChncG9pbnRlcikgJmZfdmdlbSB9LAo+ICsJeyAidmtt cyIsICAgIChncG9pbnRlcikgJmZfdmttcyB9LAo+ICsJeyAidmM0IiwgICAgIChncG9pbnRlcikg JmZfdmM0IH0sCj4gKwl7IE5VTEwsIH0sCj4gK307Cj4gKwo+ICsvKioKPiArICogQGlndF9kZXZp Y2VfcHJpbnRfZmlsdGVyX3R5cGVzCj4gKyAqCj4gKyAqIFByaW50IGFsbCBmaWx0ZXJzIHN5bnRh eCBmb3IgZGV2aWNlIHNlbGVjdGlvbi4KPiArICovCj4gK3ZvaWQgaWd0X2RldmljZV9wcmludF9m aWx0ZXJfdHlwZXModm9pZCkKPiArewo+ICsJc3RydWN0IG5hbWVfdmFsdWUgKmxpc3QgPSAmZmls dGVyX2RlZmluaXRpb25fbGlzdFswXTsKPiArCXByaW50ZigiRmlsdGVyIHR5cGVzOlxuLS0tXG4i KTsKPiArCXByaW50ZigiJS0xMnMgICVzXG4tLS1cbiIsICJmaWx0ZXIiLCAic3ludGF4Iik7Cj4g Kwo+ICsJcHJpbnRmKCIlLTEycyAgJXNcbiIsICIiLCAiZGlyZWN0IHN1YnN5c3RlbTovc3lzLy4u LiBwYXRoIHNlbGVjdGlvblxuIik7Cj4gKwlwcmludGYoIiUtMTJzICAlc1xuIiwgIiIsCj4gKwkg ICAgICAgImV4OiBkcm06L3N5cy9kZXZpY2VzL3BjaTAwMDA6MDAvMDAwMDowMDowMi4wL2RybS9j YXJkMCIpOwo+ICsJcHJpbnRmKCIlLTEycyAgJXNcbiIsICIiLAo+ICsJICAgICAgICIgICAgcGNp Oi9zeXMvZGV2aWNlcy9wY2kwMDAwOjAwLzAwMDA6MDA6MDIuMCIpOwo+ICsJcHJpbnRmKCIlLTEy cyAgJXNcbiIsICIiLAo+ICsJICAgICAgICIgICAgcGxhdGZvcm06L3N5cy9kZXZpY2VzL3BsYXRm b3JtL3ZnZW1cbiIpOwo+ICsKPiArCXdoaWxlIChsaXN0LT5uYW1lKSB7Cj4gKwkJc3RydWN0IGZp bHRlcl9mdW5jICp2ID0gKHN0cnVjdCBmaWx0ZXJfZnVuYyAqKSBsaXN0LT52YWx1ZTsKPiArCQlw cmludGYoIiUtMTJzICAlc1xuIiwgbGlzdC0+bmFtZSwgdi0+aGVscCk7Cj4gKwkJcHJpbnRmKCIl LTEycyAgJXNcbiIsICIiLCB2LT5kZXRhaWwpOwo+ICsJCWxpc3QrKzsKPiArCX0KPiArfQo+ICsK PiArc3RhdGljIEdQdHJBcnJheSAqZGV2aWNlX2ZpbHRlcnMgPSBOVUxMOwpJIHdvbmRlciB3aHkg Y2hlY2hwYXRjaCByZXR1cm5zIGVycm9yIGhlcmUgXi4gSXQgaXMgbm90IGlsbGVnYWwsIG1heWJl IGl0IHNob3V0cwpiZWNhc3VlIGl0IGlzIGRvbmUgYnkgZGVmYXVsdD8KPiArCj4gKyNkZWZpbmUg REVWSUNFX0ZJTFRFUl9DSEVDS19BTExPQygpIFwKPiArCWRvIHsgXAo+ICsJCWlmICghZGV2aWNl X2ZpbHRlcnMpIFwKPiArCQkJZGV2aWNlX2ZpbHRlcnMgPSBnX3B0cl9hcnJheV9uZXdfZnVsbCgy LCBmcmVlKTsgXAo+ICsJCWlndF9hc3NlcnQoZGV2aWNlX2ZpbHRlcnMpOyBcCj4gKwl9IHdoaWxl KDApCj4gKwo+ICsvKioKPiArICogaWd0X2RldmljZV9maWx0ZXJfY291bnQKPiArICoKPiArICog UmV0dXJucyBudW1iZXIgb2YgZmlsdGVycyBjb2xsZWN0ZWQgaW4gdGhlIGZpbHRlciBhcnJheS4K PiArICovCj4gK2ludCBpZ3RfZGV2aWNlX2ZpbHRlcl9jb3VudCh2b2lkKQo+ICt7Cj4gKwlERVZJ Q0VfRklMVEVSX0NIRUNLX0FMTE9DKCk7Cj4gKwo+ICsJcmV0dXJuIGRldmljZV9maWx0ZXJzLT5s ZW47Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBpZ3RfZGV2aWNlX2ZpbHRlcl9hZGQKPiArICogQGZp bHRlcjogZmlsdGVyIHRvIGJlIHN0b3JlZCBpbiBmaWx0ZXIgYXJyYXkKPiArICoKPiArICogRnVu Y3Rpb24gYWxsb3dzIHBhc3Npbmcgc2luZ2xlIG9yIG1vcmUgZmlsdGVycyB3aXRoaW4gb25lIHN0 cmluZy4gVGhpcyBpcwo+ICsgKiBmb3IgQ0kgd2hlbiBpdCBjYW4gZXh0cmFjdCBmaWx0ZXIgZnJv bSBlbnZpcm9ubWVudCB2YXJpYWJsZSAoYW5kIGl0IG11c3QKPiArICogYmUgc2luZ2xlIHN0cmlu ZykuIFNvIGlmIEBmaWx0ZXIgY29udGFpbnMgc2VtaWNvbG9uICc7JyBpdCB0cmVhdHMKPiArICog ZWFjaCBwYXJ0IGFzIHNlcGFyYXRlIGZpbHRlciBhbmQgYWRkcyB0byB0aGUgZmlsdGVyIGFycmF5 Lgo+ICsgKgo+ICsgKiBSZXR1cm5zIG51bWJlciBvZiBmaWx0ZXJzIGFkZGVkIHRvIGZpbHRlciBh cnJheS4gQ2FuIGJlIGdyZWF0ZXIgdGhhbgo+ICsgKiAxIGlmIEBmaWx0ZXIgY29udGFpbnMgbW9y ZSB0aGFuIG9uZSBmaWx0ZXIgc2VwYXJhdGVkIGJ5IHNlbWljb2xvbi4KPiArICovCj4gK2ludCBp Z3RfZGV2aWNlX2ZpbHRlcl9hZGQoY29uc3QgY2hhciAqZmlsdGVyKQo+ICt7Cj4gKwlnY2hhciAq KnN0cnYsICoqczsKPiArCWludCBjID0gMDsKPiArCj4gKwlERVZJQ0VfRklMVEVSX0NIRUNLX0FM TE9DKCk7Cj4gKwo+ICsJc3RydiA9IGdfc3Ryc3BsaXQoZmlsdGVyLCAiOyIsIC0xKTsKPiArCj4g KwlzID0gc3RydjsKPiArCXdoaWxlICgqcykgewo+ICsJCWdfcHRyX2FycmF5X2FkZChkZXZpY2Vf ZmlsdGVycywgc3RyZHVwKCpzKSk7Cj4gKwkJcysrOwo+ICsJfQo+ICsJZ19zdHJmcmVldihzdHJ2 KTsKPiArCj4gKwlyZXR1cm4gYzsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGlndF9kZXZpY2VfZmls dGVyX2dldAo+ICsgKiBAbnVtOiBOdW1iZXIgb2YgZmlsdGVyIGZyb20gZmlsdGVyIGFycmF5Cj4g KyAqCj4gKyAqIFJldHVybnMgZmlsdGVyIHN0cmluZyBvciBOVUxMIGlmIEBudW0gaXMgb3V0IG9m IHJhbmdlIG9mIGZpbHRlciBhcnJheS4KPiArKi8KPiArY29uc3QgY2hhciAqaWd0X2RldmljZV9m aWx0ZXJfZ2V0KGludCBudW0pCj4gK3sKPiArCURFVklDRV9GSUxURVJfQ0hFQ0tfQUxMT0MoKTsK PiArCj4gKwlpZiAobnVtIDwgMCB8fCBudW0gPj0gZGV2aWNlX2ZpbHRlcnMtPmxlbikKPiArCQly ZXR1cm4gTlVMTDsKPiArCj4gKwlyZXR1cm4gZ19wdHJfYXJyYXlfaW5kZXgoZGV2aWNlX2ZpbHRl cnMsIG51bSk7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGlndF9kZXZpY2VfZmlsdGVyX2FwcGx5 KGNvbnN0IGNoYXIgKmZpbHRlcikKPiArewo+ICsJc3RydWN0IGZpbHRlcl9zcGVjIGZzcGVjOwo+ ICsJYm9vbCByZXQ7Cj4gKwo+ICsJaWYgKCFmaWx0ZXIpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsK PiArCW1lbXNldCgmZnNwZWMsIDAsIHNpemVvZihmc3BlYykpOwo+ICsJcmV0ID0gZ2V0X2ZpbHRl cl9zcGVjKGZpbHRlciwgJmZzcGVjKTsKPiArCWlmICghcmV0KSB7Cj4gKwkJaWd0X3dhcm4oIkNh bid0IHNwbGl0IGZpbHRlciBbJXNdXG4iLCBmaWx0ZXIpOwo+ICsJCXJldHVybiBmYWxzZTsKPiAr CX0KPiArCj4gKwkvKiBDbGVhbiB2aWV3ICovCj4gKwlnX3B0cl9hcnJheV9yZW1vdmVfcmFuZ2Uo aWd0X2RldnMudmlldywgMCwgaWd0X2RldnMudmlldy0+bGVuKTsKPiArCj4gKwkvKiBJZiBmc3Bl Yy5kYXRhIGNvbnRhaW5zICIvc3lzIiB1c2UgZGlyZWN0IHBhdGggaW5zdGVhZAo+ICsJICogY29u dGV4dHVhbCBmaWx0ZXIgKi8KPiArCWlmICghc3RybmNtcChmc3BlYy5kYXRhLCAiL3N5cyIsIDQp KQo+ICsJCWZpbHRlcl9zeXMoJmZzcGVjLCBOVUxMKTsKPiArCWVsc2Ugewo+ICsJCXN0cnVjdCBm aWx0ZXJfZnVuYyAqZmZ1bmM7Cj4gKwkJZmZ1bmMgPSBnX2hhc2hfdGFibGVfbG9va3VwKGZpbHRl cl9kZWZpbml0aW9uX2h0LCBmc3BlYy5uYW1lKTsKPiArCQlpZiAoIWZmdW5jKSB7Cj4gKwkJCWln dF93YXJuKCJObyBmaWx0ZXIgd2l0aCBuYW1lIFslc11cbiIsIGZzcGVjLm5hbWUpOwo+ICsJCQly ZXR1cm4gZmFsc2U7Cj4gKwkJfQo+ICsJCWZmdW5jLT5maWx0ZXJfZnVuY3Rpb24oJmZzcGVjLCBm ZnVuYyk7Cj4gKwl9Cj4gKwpTaG91bGQgd2UgZnJlZShmc3BlYykgYXQgdGhlIGVuZD8gT3IgaXQg aXMgZG9uZSBzb21ld2hlcmUgZWxzZT8gCj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArI2Rl ZmluZSBzYWZlX3N0cm5jcHkoZHN0LCBzcmMsIHNpemUpIFwKPiArCWlmICgoZHN0KSAmJiAoc3Jj KSkgc3RybmNweSgoZHN0KSwgKHNyYyksIChzaXplKSkKPiArCj4gKy8qKgo+ICsgKiBpZ3RfZGV2 aWNlX2NhcmRfbWF0Y2gKPiArICogQGZpbHRlcjogZmlsdGVyIHN0cmluZwo+ICsgKiBAY2FyZDog cG9pbnRlciB0byBpZ3RfZGV2aWNlX2NhcmQgc3RydWN0Cj4gKyAqCj4gKyAqIEZ1bmN0aW9uIGFw cGxpZXMgZmlsdGVyIHRvIG1hdGNoIGRldmljZSBmcm9tIGRldmljZSBhcnJheS4KPiArICoKPiAr ICogUmV0dXJuczoKPiArICogZmFsc2UgLSBubyBjYXJkIHBvaW50ZXIgd2FzIHBhc3NlZCBvciBj YXJkIHdhc24ndCBtYXRjaGVkLAo+ICsgKiB0cnVlIC0gY2FyZCBtYXRjaGVkIGFuZCByZXR1cm5l ZC4KPiArICovCj4gK2Jvb2wgaWd0X2RldmljZV9jYXJkX21hdGNoKGNvbnN0IGNoYXIgKmZpbHRl ciwgc3RydWN0IGlndF9kZXZpY2VfY2FyZCAqY2FyZCkKPiArewo+ICsJc3RydWN0IGlndF9kZXZp Y2UgKmRldiA9IE5VTEw7Cj4gKwo+ICsJaWYgKCFjYXJkKQo+ICsJCXJldHVybiBmYWxzZTsKPiAr CW1lbXNldChjYXJkLCAwLCBzaXplb2YoKmNhcmQpKTsKPiArCj4gKwlpZ3RfZGV2aWNlc19zY2Fu KGZhbHNlKTsKPiArCj4gKwlpZiAoaWd0X2RldmljZV9maWx0ZXJfYXBwbHkoZmlsdGVyKSA9PSBm YWxzZSkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJaWYgKCFpZ3RfZGV2cy52aWV3LT5sZW4p Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCS8qIFdlIHRha2UgZmlyc3Qgb25lIGlmIG1vcmUg dGhhbiBvbmUgY2FyZCBtYXRjaGVzIGZpbHRlciAqLwo+ICsJZGV2ID0gZ19wdHJfYXJyYXlfaW5k ZXgoaWd0X2RldnMudmlldywgMCk7Cj4gKwljYXJkLT5jaGlwc2V0ID0gRFJJVkVSX0FOWTsKPiAr CWlmIChkZXYtPnZzKQo+ICsJCWNhcmQtPmNoaXBzZXQgPSBkZXYtPnZzLT5jaGlwc2V0Owo+ICsK PiArCXNhZmVfc3RybmNweShjYXJkLT5zdWJzeXN0ZW0sIGRldi0+c3Vic3lzdGVtLCBOQU1FX01B WCk7Cj4gKwlzYWZlX3N0cm5jcHkoY2FyZC0+Y2FyZCwgZGV2LT5kcm1fY2FyZCwgTkFNRV9NQVgp Owo+ICsJc2FmZV9zdHJuY3B5KGNhcmQtPnJlbmRlciwgZGV2LT5kcm1fcmVuZGVyLCBOQU1FX01B WCk7ClRoaXMgbWFjcm8gaXMgcmV0dXJpbmcgdHJ1ZS9mYWxzZSwgZG8gd2UgY2hlY2sgdGhlIHJl c3VsdHM/IEl0IGxvb2tzIGxpa2UgbWFnaWMKdG8gbWUgOikKPiArCj4gKwlyZXR1cm4gdHJ1ZTsK PiArfQo+IGRpZmYgLS1naXQgYS9saWIvaWd0X2RldmljZV9zY2FuLmggYi9saWIvaWd0X2Rldmlj ZV9zY2FuLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwLi42MmY3ZjM5 YQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9saWIvaWd0X2RldmljZV9zY2FuLmgKPiBAQCAtMCww ICsxLDY5IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9u Cj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAq IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3 aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwg bWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxs IGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRo ZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZv bGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBh cmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBw b3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJ UyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNT IE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhF IEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERB TUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBD T05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9S IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFM SU5HUwo+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gKyAqCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBf X0lHVF9ERVZJQ0VfU0NBTl9IX18KPiArI2RlZmluZSBfX0lHVF9ERVZJQ0VfU0NBTl9IX18KPiAr Cj4gKyNpbmNsdWRlIDxsaW1pdHMuaD4KPiArI2luY2x1ZGUgPGlndC5oPgo+ICsKPiArZW51bSBp Z3RfZGV2aWNlc19wcmludF90eXBlIHsKPiArCUlHVF9QUklOVF9TSU1QTEUsCj4gKwlJR1RfUFJJ TlRfREVUQUlMLAo+ICt9Owo+ICsKPiArc3RydWN0IGlndF9kZXZpY2VfY2FyZCB7Cj4gKwlpbnQg Y2hpcHNldDsKPiArCWNoYXIgc3Vic3lzdGVtW05BTUVfTUFYXTsKPiArCWNoYXIgY2FyZFtOQU1F X01BWF07Cj4gKwljaGFyIHJlbmRlcltOQU1FX01BWF07Cj4gK307Cj4gKwo+ICsvKiBTY2FuIHVk ZXYgc3Vic3lzdGVtcy4gRG8gaXQgb25jZSB1bmxlc3MgZm9yY2UgaXMgdHJ1ZSwgd2hhdCByZXNj YW5zCj4gKyAqIGRldmljZXMgYWdhaW4gKi8KPiArdm9pZCBpZ3RfZGV2aWNlc19zY2FuKGJvb2wg Zm9yY2UpOwo+ICsKPiArdm9pZCBpZ3RfZGV2aWNlc19wcmludChlbnVtIGlndF9kZXZpY2VzX3By aW50X3R5cGUgcHJpbnR0eXBlKTsKPiArdm9pZCBpZ3RfZGV2aWNlc19wcmludF92ZW5kb3JzKHZv aWQpOwo+ICt2b2lkIGlndF9kZXZpY2VfcHJpbnRfZmlsdGVyX3R5cGVzKHZvaWQpOwo+ICsKPiAr LyoKPiArICogSGFuZGxlIGRldmljZSBmaWx0ZXIgY29sbGVjdGlvbiBhcnJheS4KPiArICogSUdU IGNhbiBzdG9yZS9yZXRyaWV2ZSBmaWx0ZXJzIHBhc3NlZCBieSB1c2VyIHVzaW5nICctLWRldmlj ZScgYXJncy4KPiArKi8KVGhpcyBjb21tZW50IF5eIGlzIGEgZ2VuZXJhbCBvbmUgZm9yIHdoYXQg aXMgYmVsb3c/IElmIHllcyAtIGl0IGlzIG5vdCBvYnZpb3VzCjovCj4gKwo+ICsvKiBSZXR1cm4g bnVtYmVyIG9mIGZpbHRlcnMgY29sbGVjdGVkICovCj4gK2ludCBpZ3RfZGV2aWNlX2ZpbHRlcl9j b3VudCh2b2lkKTsKPiArCj4gKy8qIEFkZCBmaWx0ZXIocykgdG8gdGhlIGFycmF5LiBSZXR1cm5z IG51bWJlciBvZiBmaWx0ZXJzIGFkZGVkICg+MSBpZgo+ICsgKiB1c2VyIHBhc3NlcyBtb3JlIHRo YW4gb25lIGZpbHRlciBzZXBhcmF0aW5lZCBieSAnOycpICovCj4gK2ludCBpZ3RfZGV2aWNlX2Zp bHRlcl9hZGQoY29uc3QgY2hhciAqZmlsdGVyKTsKPiArCj4gKy8qIEdldCBuLXRoIGZpbHRlciBz dG9yZWQgaW4gdGhlIGFycmF5IG9yIE5VTEwgKi8KPiArY29uc3QgY2hhciAqaWd0X2RldmljZV9m aWx0ZXJfZ2V0KGludCBudW0pOwo+ICsKPiArLyogVXNlIGZpbHRlciB0byBtYXRjaCB0aGUgZGV2 aWNlIGFuZCBmaWxsIGNhcmQgc3RydWN0dXJlICovCj4gK2Jvb2wgaWd0X2RldmljZV9jYXJkX21h dGNoKGNvbnN0IGNoYXIgKmZpbHRlciwgc3RydWN0IGlndF9kZXZpY2VfY2FyZCAqY2FyZCk7Cj4g Kwo+ICsjZW5kaWYgLyogX19JR1RfREVWSUNFX1NDQU5fSF9fICovCj4gZGlmZiAtLWdpdCBhL2xp Yi9tZXNvbi5idWlsZCBiL2xpYi9tZXNvbi5idWlsZAo+IGluZGV4IDE1NzYyNGU3Li44MjZlYmJl MyAxMDA2NDQKPiAtLS0gYS9saWIvbWVzb24uYnVpbGQKPiArKysgYi9saWIvbWVzb24uYnVpbGQK PiBAQCAtMTAsNiArMTAsNyBAQCBsaWJfc291cmNlcyA9IFsKPiAgCSdpZ3RfY29sb3JfZW5jb2Rp bmcuYycsCj4gIAknaWd0X2RlYnVnZnMuYycsCj4gIAknaWd0X2RldmljZS5jJywKPiArCSdpZ3Rf ZGV2aWNlX3NjYW4uYycsCj4gIAknaWd0X2F1eC5jJywKPiAgCSdpZ3RfZ3B1X3Bvd2VyLmMnLAo+ ICAJJ2lndF9ndC5jJywKPiBkaWZmIC0tZ2l0IGEvdG9vbHMvTWFrZWZpbGUuc291cmNlcyBiL3Rv b2xzL01ha2VmaWxlLnNvdXJjZXMKPiBpbmRleCA1MDcwNmY0MS4uMGU2N2I2NTQgMTAwNjQ0Cj4g LS0tIGEvdG9vbHMvTWFrZWZpbGUuc291cmNlcwo+ICsrKyBiL3Rvb2xzL01ha2VmaWxlLnNvdXJj ZXMKPiBAQCAtMzMsNiArMzMsNyBAQCB0b29sc19wcm9nX2xpc3RzID0JCVwKPiAgCWludGVsX3dh dGVybWFyawkJXAo+ICAJaW50ZWxfZ2VtX2luZm8JCVwKPiAgCWludGVsX2d2dGdfdGVzdCAgICAg XAo+ICsJbHNncHUJCQlcCj4gIAkkKE5VTEwpCj4gIAo+ICBkaXN0X2Jpbl9TQ1JJUFRTID0gaW50 ZWxfZ3B1X2FicnQKPiBkaWZmIC0tZ2l0IGEvdG9vbHMvbHNncHUuYyBiL3Rvb2xzL2xzZ3B1LmMK PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwLi5lNzIzZjBiMgo+IC0tLSAv ZGV2L251bGwKPiArKysgYi90b29scy9sc2dwdS5jCj4gQEAgLTAsMCArMSwxODMgQEAKPiArLyoK PiArICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVy bWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24g b2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUg U29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlv bgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwg ZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBT b2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJl IGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBi ZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJ UyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElF RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05J TkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZ UklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S IE9USEVSV0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBX SVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRI RSBTT0ZUV0FSRS4KPiArICoKPiArICovCj4gKwo+ICsjaW5jbHVkZSAiaWd0X2RldmljZV9zY2Fu LmgiCj4gKyNpbmNsdWRlICJpZ3QuaCIKPiArI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgo+ICsjaW5j bHVkZSA8ZmNudGwuaD4KPiArI2luY2x1ZGUgPGVycm5vLmg+Cj4gKyNpbmNsdWRlIDxzdHJpbmcu aD4KPiArI2luY2x1ZGUgPHNpZ25hbC5oPgo+ICsKPiArZW51bSB7Cj4gKwlPUFRfUFJJTlRfREVU QUlMICAgPSAnRCcsCj4gKwlPUFRfTElTVF9WRU5ET1JTICAgPSAndicsCj4gKwlPUFRfTElTVF9G SUxURVJTICAgPSAnbCcsCj4gKwlPUFRfREVWSUNFICAgICAgICAgPSAnZCcsCj4gKwlPUFRfSEVM UCAgICAgICAgICAgPSAnaCcKPiArfTsKPiArCj4gK2Jvb2wgZ19zaG93X3ZlbmRvcnM7Cj4gK2Jv b2wgZ19saXN0X2ZpbHRlcnM7Cj4gK2Jvb2wgZ19kZXZpY2U7Cj4gK2Jvb2wgZ19oZWxwOwo+ICsK PiArc3RhdGljIGNvbnN0IGNoYXIgKnVzYWdlX3N0ciA9Cj4gKwkidXNhZ2U6IGxzZ3B1IFtvcHRp b25zXVxuXG4iCkkgd291bGQgYWRkIDEgc2VudGVuY2UgYWJvdXQgd2hhdCBwcmV0dHkgY29vbCBz dHVmZiB0aGlzIHRvb2wgY2FuIGRvIDopCj4gKwkiT3B0aW9uczpcbiIKPiArCSIgIC1ELCAtLXBy aW50LWRldGFpbHMgICAgICAgICBQcmludCBkZXZpY2VzIHdpdGggZGV0YWlsc1xuIgpBcyBJIHdy b3RlIGFib3ZlICctRCcgYW5kICctZCcgY2FuIGJlIGVhc2lseSBtaXN0YWtlbiwgbm90aGluZyB3 aWxsIGJsb3cgdXAsIGJ1dAptYXliZSB3ZSBjYW4gdXNlIGRpZmZlcmVudCBsZXR0ZXIgaGVyZT8g SXQgaXQgaWYgZm9yIHByaW50aW5nIHRoZW4gbWF5YmUKJy1QJy8nLXAnPwo+ICsJIiAgLXYsIC0t bGlzdC12ZW5kb3JzICAgICAgICAgIExpc3QgcmVjb2duaXplZCB2ZW5kb3JzXG4iCj4gKwkiICAt bCwgLS1saXN0LWZpbHRlci10eXBlcyAgICAgTGlzdCByZWdpc3RlcmVkIGRldmljZSBmaWx0ZXJz IHR5cGVzXG4iCj4gKwkiICAtZCwgLS1kZXZpY2UgZmlsdGVyICAgICAgICAgRGV2aWNlIGZpbHRl ciwgY2FuIGJlIGdpdmVuIG11bHRpcGxlIHRpbWVzXG4iCj4gKwkiICAtaCwgLS1oZWxwICAgICAg ICAgICAgICAgICAgU2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdFxuIjsKPiArCj4gK3N0 YXRpYyB2b2lkIHRlc3RfZGV2aWNlX29wZW4oc3RydWN0IGlndF9kZXZpY2VfY2FyZCAqY2FyZCkK PiArewo+ICsJaW50IGZkOwo+ICsKPiArCWlmICghY2FyZCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJ ZmQgPSBkcm1fb3Blbl9jYXJkKGNhcmQpOwo+ICsJaWYgKGZkID49IDApIHsKPiArCQlwcmludGYo IkRldmljZSAlcyBzdWNjZXNzZnVsbHkgb3BlbmVkXG4iLCBjYXJkLT5jYXJkKTsKPiArCQljbG9z ZShmZCk7Cj4gKwl9IGVsc2Ugewo+ICsJCWlmIChzdHJsZW4oY2FyZC0+Y2FyZCkpCj4gKwkJCXBy aW50ZigiQ2Fubm90IG9wZW4gY2FyZCAlcyBkZXZpY2VcbiIsIGNhcmQtPmNhcmQpOwo+ICsJCWVs c2UKPiArCQkJcHJpbnRmKCJDYW5ub3Qgb3BlbiBjYXJkIGRldmljZSwgZW1wdHkgbmFtZVxuIik7 Cj4gKwl9Cj4gKwo+ICsJZmQgPSBkcm1fb3Blbl9yZW5kZXIoY2FyZCk7Cj4gKwlpZiAoZmQgPj0g MCkgewo+ICsJCXByaW50ZigiRGV2aWNlICVzIHN1Y2Nlc3NmdWxseSBvcGVuZWRcbiIsIGNhcmQt PnJlbmRlcik7Cj4gKwkJY2xvc2UoZmQpOwo+ICsJfSBlbHNlIHsKPiArCQlpZiAoc3RybGVuKGNh cmQtPnJlbmRlcikpCj4gKwkJCXByaW50ZigiQ2Fubm90IG9wZW4gcmVuZGVyICVzIGRldmljZVxu IiwgY2FyZC0+cmVuZGVyKTsKPiArCQllbHNlCj4gKwkJCXByaW50ZigiQ2Fubm90IG9wZW4gcmVu ZGVyIGRldmljZSwgZW1wdHkgbmFtZVxuIik7Cj4gKwl9CldlIGRvIG5vdCBnZXQgYW55IHdhcm5p bmcgd2hlbiBub24tZXhpc3RpbmcgZGV2aWNlIGlzIHVzZWQsIGlzIGl0IG9rPwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBwcmludF9jYXJkKHN0cnVjdCBpZ3RfZGV2aWNlX2NhcmQgKmNhcmQpCj4g K3sKPiArCWlmICghY2FyZCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJcHJpbnRmKCJzdWJzeXN0ZW0g ICA6ICVzXG4iLCBjYXJkLT5zdWJzeXN0ZW0pOwo+ICsJcHJpbnRmKCJjaGlwc2V0ICAgICA6ICV4 XG4iLCBjYXJkLT5jaGlwc2V0KTsKPiArCXByaW50ZigiZHJtIGNhcmQgICAgOiAlc1xuIiwgY2Fy ZC0+Y2FyZCk7Cj4gKwlwcmludGYoImRybSByZW5kZXIgIDogJXNcbiIsIGNhcmQtPnJlbmRlcik7 Cj4gK30KPiArCj4gK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gK3sKPiArCXN0 YXRpYyBzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0aW9uc1tdID0gewo+ICsJCXsicHJpbnQtZGV0YWls IiwgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgT1BUX1BSSU5UX0RFVEFJTH0sCj4gKwkJ eyJsaXN0LXZlbmRvcnMiLCAgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBPUFRfTElTVF9W RU5ET1JTfSwKPiArCQl7Imxpc3QtZmlsdGVyLXR5cGVzIiwgbm9fYXJndW1lbnQsICAgICAgIE5V TEwsIE9QVF9MSVNUX0ZJTFRFUlN9LAo+ICsJCXsiZGV2aWNlIiwgICAgICAgICAgICByZXF1aXJl ZF9hcmd1bWVudCwgTlVMTCwgT1BUX0RFVklDRX0sCj4gKwkJeyJoZWxwIiwgICAgICAgICAgICAg IG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBPUFRfSEVMUH0sCj4gKwkJezAsIDAsIDAsIDB9Cj4g Kwl9Owo+ICsJaW50IGMsIGluZGV4ID0gMDsKPiArCWNvbnN0IGNoYXIgKmVudjsKPiArCWVudW0g aWd0X2RldmljZXNfcHJpbnRfdHlwZSBwcmludHR5cGUgPSBJR1RfUFJJTlRfU0lNUExFOwo+ICsK PiArCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJEdmxkOmgiLAo+ICsJCQkJ bG9uZ19vcHRpb25zLCAmaW5kZXgpKSAhPSAtMSkgewo+ICsJCXN3aXRjaChjKSB7Cj4gKwo+ICsJ CWNhc2UgT1BUX1BSSU5UX0RFVEFJTDoKPiArCQkJcHJpbnR0eXBlID0gSUdUX1BSSU5UX0RFVEFJ TDsKPiArCQkJYnJlYWs7Cj4gKwkJY2FzZSBPUFRfTElTVF9WRU5ET1JTOgo+ICsJCQlnX3Nob3df dmVuZG9ycyA9IHRydWU7Cj4gKwkJCWJyZWFrOwo+ICsJCWNhc2UgT1BUX0xJU1RfRklMVEVSUzoK PiArCQkJZ19saXN0X2ZpbHRlcnMgPSB0cnVlOwo+ICsJCQlicmVhazsKPiArCQljYXNlIE9QVF9E RVZJQ0U6Cj4gKwkJCWdfZGV2aWNlID0gdHJ1ZTsKPiArCQkJaWd0X2RldmljZV9maWx0ZXJfYWRk KG9wdGFyZyk7Cj4gKwkJCWJyZWFrOwo+ICsJCWNhc2UgT1BUX0hFTFA6Cj4gKwkJCWdfaGVscCA9 IHRydWU7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCX0KPiArCj4gKwlpZiAoZ19oZWxwKSB7Cj4g KwkJcHJpbnRmKCIlc1xuIiwgdXNhZ2Vfc3RyKTsKPiArCQlleGl0KDApOwo+ICsJfQo+ICsKPiAr CWVudiA9IGdldGVudigiSUdUX0RFVklDRSIpOwo+ICsJaWYgKGVudikgewo+ICsJCWlndF9kZXZp Y2VfZmlsdGVyX2FkZChlbnYpOwo+ICsJCWdfZGV2aWNlID0gdHJ1ZTsKPiArCX0KPiArCj4gKwlp ZiAoZ19zaG93X3ZlbmRvcnMpIHsKPiArCQlpZ3RfZGV2aWNlc19wcmludF92ZW5kb3JzKCk7Cj4g KwkJcmV0dXJuIDA7Cj4gKwl9Cj4gKwo+ICsJaWYgKGdfbGlzdF9maWx0ZXJzKSB7Cj4gKwkJaWd0 X2RldmljZV9wcmludF9maWx0ZXJfdHlwZXMoKTsKPiArCQlyZXR1cm4gMDsKPiArCX0KPiArCj4g KwlpZ3RfZGV2aWNlc19zY2FuKGZhbHNlKTsKPiArCj4gKwlpZiAoZ19kZXZpY2UpIHsKPiArCQlp bnQgbiA9IGlndF9kZXZpY2VfZmlsdGVyX2NvdW50KCk7Cj4gKwkJcHJpbnRmKCI9PT0gRGV2aWNl IGZpbHRlciBsaXN0ID09PVxuIik7Cj4gKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsK PiArCQkJcHJpbnRmKCJbJTJkXTogJXNcbiIsIGksCj4gKwkJCSAgICAgICBpZ3RfZGV2aWNlX2Zp bHRlcl9nZXQoaSkpOwo+ICsJCX0KPiArCQlwcmludGYoIlxuIik7Cj4gKwo+ICsJCXByaW50Zigi PT09IFRlc3RpbmcgZGV2aWNlIG9wZW4gPT09XG4iKTsKPiArCQlmb3IgKGludCBpID0gMDsgaSA8 IG47IGkrKykgewo+ICsJCQlzdHJ1Y3QgaWd0X2RldmljZV9jYXJkIGNhcmQ7Cj4gKwkJCWNvbnN0 IGNoYXIgKmZpbHRlciA9IGlndF9kZXZpY2VfZmlsdGVyX2dldChpKTsKPiArCj4gKwkJCWlmICgh aWd0X2RldmljZV9jYXJkX21hdGNoKGZpbHRlciwgJmNhcmQpKQo+ICsJCQkJY29udGludWU7Cj4g KwkJCXByaW50X2NhcmQoJmNhcmQpOwo+ICsJCQl0ZXN0X2RldmljZV9vcGVuKCZjYXJkKTsKPiAr CQkJcHJpbnRmKCItLS1cbiIpOwo+ICsJCX0KPiArCj4gKwkJcmV0dXJuIDA7Cj4gKwl9Cj4gKwo+ ICsJaWd0X2RldmljZXNfcHJpbnQocHJpbnR0eXBlKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ IGRpZmYgLS1naXQgYS90b29scy9tZXNvbi5idWlsZCBiL3Rvb2xzL21lc29uLmJ1aWxkCj4gaW5k ZXggNmU3MmIyNjMuLjliM2EyYTY5IDEwMDY0NAo+IC0tLSBhL3Rvb2xzL21lc29uLmJ1aWxkCj4g KysrIGIvdG9vbHMvbWVzb24uYnVpbGQKPiBAQCAtMzYsNiArMzYsNyBAQCB0b29sc19wcm9ncyA9 IFsKPiAgCSdpbnRlbF9nZW1faW5mbycsCj4gIAknaW50ZWxfZ3Z0Z190ZXN0JywKPiAgCSdkcGNk X3JlZycsCj4gKwknbHNncHUnLAo+ICBdCj4gIHRvb2xfZGVwcyA9IGlndF9kZXBzCgpaYnlzemVr L0FyZWsgLSBpcyB0aGVyZSBhbnkgZGVjaXNpb24gYWJvdXQgSUdUIGRvY3VtZW50YXRpb24/IFNo b3VsZCB3ZSBmb2xsb3cgc29tZQpzdGFuZGFyZHM/IEkgYW0gYXNraW5nIGJlY2F1c2UgZG9jIHNl Y3Rpb25zIGluIHRoaXMgbGlicmFyeSBhcmUgaW4gdmFyaW91cyBzdHlsZXMuIEkKa25vdyB0aGF0 IGRvY3VtZW50aW5nIHN0dWZmIGlzIGJvcmluZywgYnV0IGZ1dHVyZXByb29mIDopIFNob3VsZCB3 ZSB1bmlmeSBkb2MKc2VjdGlvbnMgaGVyZT8KV2hhdCBJIG1lYW4gaXM6IHNob3VsZCB3ZSBoYXZl IHNvbWV0aGluZyBsaWtlOgoKLyoqCiAqIGZ1bmN0aW9uX25hbWU6CiAqIEBwYXJhbTE6CiAqIEBw YXJhbVg6CiAqCiAqIERlc2NyaXB0aW9uLi4uLgogKiBSZXR1cm4gdmFsdWUKICovCgphbHNvIGhl cmU/IE9uY2Ugc2VudGVuY2UgZG9jIGlzIGJldGVyIHRoZW4gbm8gZG9jLCBidXQuLi4KClpieXN6 a3UgLSBodWdlIHdvcmsgZG9uZSEKS2FzaWEKCj4gIAo+IC0tIAo+IDIuMjEuMAo+IAo+IF9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gaWd0LWRldiBtYWls aW5nIGxpc3QKPiBpZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3Qt ZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=