From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-x542.google.com (mail-ed1-x542.google.com [IPv6:2a00:1450:4864:20::542]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0F04489801 for ; Mon, 6 May 2019 09:22:03 +0000 (UTC) Received: by mail-ed1-x542.google.com with SMTP id w11so14553269edl.5 for ; Mon, 06 May 2019 02:22:02 -0700 (PDT) Date: Mon, 6 May 2019 11:21:58 +0200 From: Daniel Vetter Message-ID: <20190506092158.GF17751@phenom.ffwll.local> References: <20190430112915.16889-1-janusz.krzysztofik@linux.intel.com> <20190430112915.16889-2-janusz.krzysztofik@linux.intel.com> <20190430150548.GB3271@phenom.ffwll.local> <6087541.rnYAh7yUL0@jkrzyszt-desk.ger.corp.intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <6087541.rnYAh7yUL0@jkrzyszt-desk.ger.corp.intel.com> Subject: Re: [igt-dev] [PATCH v8 1/1 i-g-t] tests: Add a new test for driver/device hot reload 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: Janusz Krzysztofik Cc: Janusz Krzysztofik , Petri Latvala , igt-dev@lists.freedesktop.org, Daniel Vetter List-ID: T24gTW9uLCBNYXkgMDYsIDIwMTkgYXQgMTA6NDQ6MTFBTSArMDIwMCwgSmFudXN6IEtyenlzenRv ZmlrIHdyb3RlOgo+IEhpIERhbmllbCwKPiAKPiBPbiBUdWVzZGF5LCBBcHJpbCAzMCwgMjAxOSA1 OjA1OjQ4IFBNIENFU1QgRGFuaWVsIFZldHRlciB3cm90ZToKPiA+IE9uIFR1ZSwgQXByIDMwLCAy MDE5IGF0IDAxOjI5OjE1UE0gKzAyMDAsIEphbnVzeiBLcnp5c3p0b2ZpayB3cm90ZToKPiA+ID4g RnJvbTogSmFudXN6IEtyenlzenRvZmlrIDxqYW51c3oua3J6eXN6dG9maWtAaW50ZWwuY29tPgo+ ID4gPiAKPiA+ID4gUHV0IHNvbWUgd29ya2xvYWQgb24gYSBkZXZpY2UsIHRoZW4gdHJ5IHRvIGVp dGhlciByZW1vdmUgKHVucGx1ZykgdGhlCj4gPiA+IGRldmljZSBmcm9tIGl0cyBidXMsIG9yIHVu YmluZCB0aGUgZGV2aWNlJ3MgZHJpdmVyIGZyb20gaXQsIHBvc3NpYmx5Cj4gPiA+IGZvbGxvd2Vk IGJ5IG1vZHVsZSB1bmxvYWQsIGRlcGVuZGluZyBvbiB3aGljaCBzcGVjaWZpYyBzdWJ0ZXN0IGhh cyBiZWVuCj4gPiA+IHNlbGVjdGVkLiAgSWYgc3VjY2VlZGVkLCByZXNjYW4gdGhlIGRldmljZSdz IGJ1cyBpZiBuZWVkZWQgYW5kIHBlcmZvcm0KPiA+ID4gaGVhbHRoIGNoZWNrcyBvbiB0aGUgZGV2 aWNlIHdpdGggdGhlIGRyaXZlciBwb3NzaWJseSBsb2FkZWQgYmFjay4KPiA+ID4gCj4gPiA+IElm IG1vZHVsZSB1bmxvYWQgaXMgcmVxdWVzdGVkLCB0aGUgd29ya2xvYWQgaXMgcnVuIGluIGEgc3Vi LXByb2Nlc3MsCj4gPiA+IG5vdCBkaXJlY3RseSBmcm9tIHRoZSB0ZXN0LCBhcyBpdCBpcyBleHBl Y3RlZCB0byBjcmFzaCB3aGlsZSBzdGlsbAo+ID4gPiBrZWVwaW5nIHRoZSBkZXZpY2Ugb3BlbiBm b3IgYXMgbG9uZyBhcyBpdHMgcHJvY2VzcyBoYXMgbm90IGV4aXRlZC4KPiA+ID4gCj4gPiA+IFRo ZSBkcml2ZXIgaG90IHVuYmluZCAvIGRldmljZSBob3QgdW5wbHVnIG9wZXJhdGlvbiBpcyBleHBl Y3RlZCB0bwo+ID4gPiBzdWNjZWVkIGFuZCB0aGUgYmFja2dyb3VuZCB3b3JrbG9hZCBzdWItcHJv Y2VzcyB0byBjcmFzaCBpbiBhCj4gPiA+IHJlYXNvbmFibGUgdGltZSwgaG93ZXZlciBsb25nIHRp bWVvdXRzIGFyZSB1c2VkIHRvIGxldCBrZXJuZWwgbGV2ZWwKPiA+ID4gdGltZW91dHMgcG9wIHVw IGZpcnN0IGlmIGhpdCBieSBhIGJ1Zy4KPiA+ID4gCj4gPiA+IFRoZSBkcml2ZXIgaXMgcmVhZHkg Zm9yIGV4dGVuZGluZyBpdCB3aXRoIGFuIGFyYml0cmFyeSB3b3JrbG9hZAo+ID4gPiBmdW5jdGlv bnMgYXMgbmVlZGVkLiAgRm9yIG5vdywgYSB3b3JrbG9hZCBiYXNlZCBvbiBpZ3RfZHVtbXlsb2Fk IGlzCj4gPiA+IGltcGxlbWVudGVkLCBoZW5jZSBzdWJ0ZXN0cyB3b3JrIG9ubHkgb24gaTkxNSBk cml2ZXIgYW5kIGFyZSBza2lwcGVkIG9uCj4gPiA+IG90aGVyIGhhcmR3YXJlLCB1bmxlc3MgdGhl eSBwcm92aWRlIHRoZWlyIGltcGxlbWVudGF0aW9uIG9mCj4gPiA+IGlndF9zcGluX25ldygpIGFu ZCBmcmllbmRzLCBvciBvdGhlciB3b3JrbG9hZHMgYXJlIGltcGxlbWVudGVkLgo+ID4gPiAKPiA+ ID4gU2lnbmVkLW9mZi1ieTogSmFudXN6IEtyenlzenRvZmlrIDxqYW51c3oua3J6eXN6dG9maWtA aW50ZWwuY29tPgo+ID4gCj4gPiBIaWdoIGxldmVsIGNvbW1lbnRzIGFuZCBhcG9sb2dpZXMgdGhh dCBJIGRpZG4ndCBsb29rIGF0IHYyLXY3IGluIGJldHdlZW4uCj4gPiAKPiA+IFRoaXMgYWxsIHNl ZW1zIGV4dHJlbWVseSBjb21wbGV4IGZvciBhIHNpbXBsZSBiYXRjaCBzcGlubmVyIHN1YnRlc3Qg Li4uCj4gCj4gTXkgaW5pdGlhbCBpbnRlbnRpb24gd2FzIHRvIGJ1aWxkIGEgc2ltcGxlIGhvdCB1 bnBsdWcvdW5iaW5kIG9ubHkgdGVzdC4gSSAKPiBwcm9wb3NlZCB0byB1c2UgYW4gYXJiaXRyYXJ5 IGV4dGVybmFsIGNvbW1hbmQgYXMgYSB3b3JrbG9hZC4gIFRoZW4sIG9uIAo+IEFudG9uaW8ncyBh ZHZpY2UsIEkgc3dpdGNoZWQgdG8gdGhlIHNwaW5uZXIgYmFzZWQgaW50ZXJuYWwgd29ya2xvYWQg YW5kIEkgCj4gYWdyZWUgdGhhdCB3YXMgYSBnb29kIG1vdmUuICBUaGVuLCBQZXRyaSBhbmQgeW91 LCBEYW5pZWwsIHJlcXVlc3RlZCB0byBleHRlbmQgCj4gdGhlIHNjb3BlIG9mIHRoZSB0ZXN0IHdp dGggZGV2aWNlIHJlY292ZXJ5IGFuZCBoZWFsdGggY2hlY2tpbmcuICBBbHNvLCBhIGZldyAKPiBw ZW9wbGUsIGluY2x1ZGluZyB5b3UsIERhbmllbCwgcmVxdWVzdGVkIGF2YWlsYWJpbGl0eSBvZiBt b3JlIHdvcmtsb2FkIHR5cGUgCj4gb3B0aW9ucy4gIEFzIGEgcmVzdWx0LCBJJ3ZlIGRlY2lkZWQg dG8gYnVpbGQgYSAqZnJhbWV3b3JrKiBmb3IgdGVzdGluZyBkcml2ZXIgCj4gdW5iaW5kICsgcmVi aW5kIC8gZGV2aWNlIHVucGx1ZyArIGJ1cyByZXNjYW4gYmVoYXZpb3IgdW5kZXIgZGlmZmVyZW50 IHdvcmtsb2FkIAo+IHR5cGVzLCBlYXNpbHkgZXh0ZW5kYWJsZSB3aXRoIG1vcmUgd29ya2xvYWQg b3B0aW9ucyBhcyBuZWVkZWQsIHdpdGggb25lIAo+IGV4YW1wbGUgd29ya2xvYWQgdHlwZSAtIGR1 bW15IGxvYWQgb3Igc3BpbiBiYXRjaCAtIGluaXRpYWxseSBpbXBsZW1lbnRlZC4gIAo+IFRoYXQg d2FzIGF0IGxlYXN0IG15IGludGVudGlvbiBmb3IgdjYtOC4gIEkgd291bGRuJ3QgY2FsbCBpdCBh IHNpbXBsZSBiYXRjaCAKPiBzcGlubmVyIHN1YnRlc3QgYW55IGxvbmdlci4KCk1heWJlIG15IHJl dmlldyBnb3Qgd3JvbmcsIGJ1dCBJIGp1c3QgbWVhbnQgdGhhdCB0aGVyZSdzIG1vcmUgdGVzdHMg dG8Kd3JpdGUgaGVyZS4gR2VuZXJhbGx5IEkgdGhpbmsgaGF2aW5nIHRoZSBmcmFtZXdvcmsvZ2Vu ZXJpYyBzb2x1dGlvbiBiZWZvcmUKeW91IGhhdmUgYWxsIHRoZSBhcHBsaWNhdGlvbnMgaXMgdGhl IHdyb25nIHdheSB0byBidWlsZCBzb21ldGhpbmcuIFVzdWFsbHkKaXQgcmVzdWx0cyBpbiBzb21l dGhpbmcgd2hpY2ggaXMgZ2VuZXJpYyBpbiBhbGwgdGhlIHdyb25nIHdheXMsIGJ1dCBub3QgaW4K dGhlIG9uZXMgeW91IHdpbGwgYWN0dWFsbHkgbmVlZC4gU28gY29tcGxleGl0eSB3aXRoIG5vIGdh aW4uIEJldHRlciB0bwotIGFkZCBhIGZldyB0ZXN0cyBmaXJzdCB3aXRoIGNvcHlwYXN0aW5nL21p bmltYWwgY2hhbmdlcwotIHJlZmFjdG9yIGhlbHBlcnMgb25jZSB5b3Ugc2VlIHRoZSByZWFsIHBh dHRlcm5zCi0gbm8gZnJhbWV3b3JrLCB0aGF0J3MgdGhlIG1pZGxheWVyIG1pc3Rha2UsIHNlZQog IGh0dHBzOi8vYmxvZy5mZndsbC5jaC8yMDE2LzEyL21pZGxheWVycy1vbmNlLW1vcmUtd2l0aC1m ZWVsaW5nLmh0bWwgYW5kCiAgYWxsIHRoZSBhcnRpY2xlcyBsaW5rZWQgZnJvbSB0aGVyZS4KCj4g PiBkbyB3ZSByZWFsbHkgbmVlZCBhbGwgdGhhdCBjb21wbGV4aXR5IHdpdGggMm5kIHByb2Nlc3Mg Cj4gCj4gSWYgd2UgZHJvcCBtb2R1bGUgdW5sb2FkIG9wdGlvbiB0aGVuIG5vLCB3ZSBkb24ndCBu ZWVkIDJuZCBwcm9jZXNzLiAgCgpXaHkgZG9lcyBtb2R1bGUgdW5sb2FkIHJlcXVpcmUgYSAybmQg cHJvY2Vzcz8gV2UgZG9uJ3QgbmVlZCBhIDJuZCBwcm9jZXNzCmluIG91ciBvdGhlciBtb2R1bGUg dW5sb2FkIHRlc3RzIGVpdGhlci4KCj4gPiBhbmQgd2F0Y2hlcnMgCj4gCj4gVGhhdCB3YXMgcHJp bWFyaWx5IG5lZWRlZCBmb3Igc3VjY2Vzc2Z1bCBtb2R1bGUgdW5sb2FkLiAgSWYgd2UgZHJvcCB0 aGF0IAo+IG9wdGlvbiBhbmQgeW91IHRoaW5rIGRyaXZlciByZWJpbmQgLyBidXMgcmVzY2FuIG9w ZXJhdGlvbnMgY2FuIGJlIHBlcmZvcm1lZCAKPiBibGluZGx5LCB3aXRob3V0IGNoZWNraW5nIGZv ciBjb21wbGV0aW9uIG9mIGJhY2tncm91bmQgd29ya2xvYWQsIHRoZW4gSSBjYW4gCj4gZHJvcCB0 aGUgd2F0Y2hlcnMuCgpXZWxsIHdlIF9oYXZlXyB0byBkbyB1bmJpbmRzIHdpdGhvdXQgY2hlY2tp bmcgdGhlIGJhY2tncm91bmQgd29ya2xvYWQgaGFzCmNvbXBsZXRlZC4gVGhhdCdzIHRoZSBlbnRp cmUgcG9pbnQgb2YgdGVzdGluZyBob3R1bnBsdWcuIEl0J3MgYWxzbyB3aHkKdGhlcmUncyBsb3Rz IG9mIHdvcmsgdG8gZG8gaGVyZSwgYmVjYXVzZSB0aGUga2VybmVsIGlzIHRvdGFsbHkgbm90IHJl YWR5CmZvciB0aGlzLgoKRmlyc3Qgc3RvcHBpbmcgZXZlcnl0aGluZyBhbmQgdGhlbiB1bmxvYWRp bmcgaXNuJ3QgYW4gaW50ZXJlc3RpbmcgdGVzdCwKdGhhdCdzIG1vcmUgb3IgbGVzcyBleGFjdGx5 IHdoYXQgb3VyIHZhcmlvdXMgbW9kdWxlIHVubG9hZCB0ZXN0cyBhcmUKZG9pbmcgYWxyZWFkeS4K Cj4gPiBhbmQgYSBidW5jaCBvZiBjYWxsYmFja3MgYW5kIGV2ZXJ5dGhpbmcsIGp1c3QgZG8gdG8g YSBob3RyZW1vdmUgdGVzdGNhc2U/Cj4gCj4gSSBjYW4gc3RpbGwgZHJvcCB0aGUgZnJhbWV3b3Jr IGFuZCBzd2l0Y2ggYmFjayB0byB0aGUgaW5pdGlhbCBzaW1wbGUgc3RydWN0dXJlIAo+IHdpdGgg b25lIG9yIHR3byBmaXhlZCBzdWJ0ZXN0cyBpZiB5b3UgZG9uJ3QgbGlrZSBteSBzdHJ1Y3R1cmFs IGFwcHJvYWNoLgoKU2VlIGFib3ZlIGZvciB3aHksIEkgdGhpbmsgdGhhdCB3aWxsIHJlc3VsdCBp biBiZXR0ZXIgY29kZSBpbiB0aGUgZW5kLgoKPiA+IFZlcnkgZmlyc3QgcGF0Y2ggbG9va2VkIG11 Y2ggbW9yZSByZWFzb25hYmxlLCBhc2lkZSBmcm9tIHRoYXQgaXQgYnJva2UgQ0kKPiA+IHNpbmNl IGl0IGRpZG4ndCByZWJpbmQgdGhlIGRyaXZlci4gCj4gCj4gU29ycnksIG15IHVuZGVyc3RhbmRp bmcgb2YgeW91ciBhbmQgUGV0cmkncyBjb21tZW50cyB3YXMgYSBiaXQgZGlmZmVyZW50LCBJIAo+ IHRob3VnaHQgdGhhdCBieSBtb3JlIHRoYW4gYmVzdCBlZmZvcnQgeW91IG1lYW50IGRvaW5nIGV2 ZXJ5dGhpbmcgcG9zc2libGUgdG8gCj4gcmVzdG9yZSB0aGUgZGV2aWNlIHRvIGJlIHJlYWR5IGZv ciBuZXh0IHRlc3Qgd2l0aG91dCByZWJvb3QsIGFuZCBtb2R1bGUgdW5sb2FkIAo+IGFuZCByZWxv YWQgc2VlbWVkIHRoZSBtb3N0IHJlbGlhYmxlIG9wdGlvbiB0byBtZS4gIE5vdyBJIGNhbiBzZWUg dGhhdCB0aGVyZSAKPiB3ZXJlIHByb2JhYmx5IHR3byBkaWZmZXJlbnQgcmVxdWlyZW1lbnRzLiAg WW91IHdlcmUgY29uc2lkZXJpbmcgdGhlIHRlc3QgCj4gaW5jb21wbGV0ZSBiZWNhdXNlIGl0IHdh cyBwZXJmb3JtaW5nIG9ubHkgdGhlIHVuYmluZC91bnBsdWcgcGFydCBhbmQgbm90IAo+IHJlYmlu ZC9yZXNjYW4sIHdoaWxlIFBldHJpIHdhcyBwcm9iYWJseSBpbnRlcmVzdGVkIG1vc3RseSBpbiB0 aGUgZGV2aWNlIGJlaW5nIAo+IHJlYWR5IGZvciBuZXh0IHRlc3RzIHdpdGhvdXQgcmVib290LCBu byBtYXR0ZXIgd2hpY2ggd2F5LgoKV2VsbCBpdCdzIHRoZSBzYW1lIHJlcXVlc3QsIGFuZCByZWJp bmQvcmVzY2FuIC9zaG91bGQvIHJlc3VsdCBpbiBhIHdvcmtpbmcKZGV2aWNlIGFnYWluLiBJZiBu b3QsIHRoZW4gSSBndWVzcyB3ZSBhbHNvIGhhdmUgYSBidWcgb24gb3VyIGhvdHJlcGx1Zwpjb2Rl LiBXaGljaCBhZ2FpbiBpcyB3b3J0aCB0ZXN0aW5nIGZvci4KCj4gPiBXZSBjYW4gYWx3YXlzIGFk ZCBjb21wbGV4aXR5IGxhdGVyIG9uCj4gPiBvbmNlIHdlIGhhdmUgZG1hLWJ1Zi9kbWEtZmVuY2Uv a21zL3doYXRldmVyIGVsc2Ugc3Vic3Rlc3RzIGhlcmUuCj4gCj4gT0ssIGFzIHlvdSB3aXNoLgo+ IAo+ID4gQWxzbywgSSB0aGluayB3ZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCBvbmUgaG90cmVtb3Zl LW9ubHktbm90aGluZy1zcGVjaWFsCj4gPiBzdWJ0ZXN0IGhlcmUsIGkuZS4gd2l0aG91dCBldmVu IHRoZSBidXN5IGJhdGNoLgo+IAo+IFRoYXQgc2VlbXMgdHJpdmlhbCB0byBhZGp1c3QgdGhlIGZy YW1ld29yayBzbyBpdCBhY2NlcHRlZCBOVUxMIHdvcmtsb2FkLCBpZiAKPiB0aGUgZnJhbWV3b3Jr IHN1cnZpdmVkLiBBbnl3YXksIEknbGwgZG8gdGhhdC4gIFNob3VsZCBJIHB1dCBpdCBpbiBhIHNl cGFyYXRlIAo+IE5VTEwgd29ya2xvYWQgc3VidGVzdCBmdW5jdGlvbiB0byBiZSBjYWxsZWQgZnJv bSBpZ3RfbWFpbj8gIE9yIGFkZCBpdCB0byB0aGUgCj4gc3BpbiB3b3JrbG9hZCBzdWJ0ZXN0IGZ1 bmN0aW9uIHNwZWNpZmljYWxseSBhcyBhbiBvcHRpb24/CgpTZXBhcmF0ZSB0ZXN0IGFzIHRoZSBm aXJzdCBzdWJ0ZXN0LiBNYXliZSBldmVuIGluY2x1ZGUgdGhlICJzaHV0CmV2ZXJ5dGhpbmcgb2Zm IGZpcnN0IiBsb2dpYyBmcm9tIG1vZHVsZSB1bmxvYWQsIHRvIGhhdmUgdGhlIG1vc3QgYmFzZWxp bmUKdGVzdCBwb3NzaWJsZS4KCj4gPiBJJ20gYWxzbyBub3Qgc3VyZSB3aHkgd2UgYWxzbyBwdXQg bW9kdWxlIHVubG9hZCB0ZXN0cyBpbiB0aGVyZS4gCj4gCj4gQXMgSSB0cmllZCB0byBleHBsYWlu IGFib3ZlLCBJIGludHJvZHVjZWQgbW9kdWxlIHVubG9hZCBpbiBvcmRlciB0byBzYXRpc2Z5IAo+ IHRoZSBDSSByZXF1aXJlbWVudCBvbiB0aGUgZGV2aWNlIGJlaW5nIHJlYWR5IGZvciBuZXh0IHRl c3Qgd2l0aG91dCByZWJvb3QgYXMgCj4gbXVjaCBhcyBwb3NzaWJsZS4KCkhtLCBidXQgd2h5PyBX aGF0IGRvZXMgbW9kdWxlIHJlbG9hZCBoZWxwIGluIHRoaXMgcmVnYXJkIHRoYXQgYSByZWJpbmQK Y2FuJ3QgZG8/IEFzaWRlIGZyb20gdGVzdGluZyBtb2R1bGUgcmVsb2FkLCB3aGljaCBpcyBhIGRl dmVsb3BlciBmZWF0dXJlCmFuZCBhbHJlYWR5IHRlc3RlZCBlbHNld2hlcmUuCgpJJ20gYWxzbyBu b3Qgc2VlaW5nIG11Y2ggaW50ZXJhY3Rpb25zIGJldHdlZW4gaG90dW5wbHVnIGFuZCBtb2R1bGUg dW5sb2FkLgoKVGhlIG9uZSBpbnRlcmVzdGluZyB0ZXN0Y2FzZSBJIHNlZSBpcyB0cnlpbmcgdG8g dW5sb2FkIHRoZSBtb2R1bGUgYWZ0ZXIgd2UKaG90dW5wbHVnZ2VkLCB3aGlsZSB0aGUgZHJpdmVy IGlzIHN0aWxsIGluIHVzZSBzb21ld2hlcmUgKG9wZW4gZHJtIGZkLApvcGVuIGRtYS1idWYgZmQs IG9wZW4gZG1hLWZlbmNlIGZkKS4gVGhhdCBzaG91bGQgcmVzdWx0IGluIGEgZmFpbHVyZSwgYW5k Cml0J3MgdXNlZnVsIHRvIHZhbGlkYXRlIHRoYXQgdGhlIGtlcm5lbCBpcyBoYW5kbGluZyB0aGUg bW9kdWxlIHJlZmNvdW50aW5nCmNvcnJlY3RseSBpbiBhbGwgdGhlc2UgY2FzZXMuIEJ1dCB0aGF0 J3MgYSBzcGVjaWZpYyBuZWdhdGl2ZSB0ZXN0Y2FzZSAoYW5kCmFjdHVhbGx5IGJlaW5nIGFibGUg dG8gdW5sb2FkIHdvdWxkIGJlIGEgZmFpbHVyZSBhbmQgbGlrZWx5IHJlc3VsdCBpbiBhCmtlcm5l bCBvb3BzKSwgSSdtIG5vdCBzZWVpbmcgdGhlIGJlbmVmaXQgb2YgcmVsb2FkaW5nIHRoZSBtb2R1 bGUuCgo+ID4gQ29tcGFyZWQKPiA+IHRvIGhvdHVucGx1ZyBvZiBhIGRpc2NyZXRlIGdmeCBjYXJk IChleHRlcm5hbCBvbmUgb3ZlciB1c2Igb3IgdGh1bmRlcmJvbHQKPiA+IG9yIHdoYXRldmVyKSwg d2hpY2ggaXMgc29tZXRoaW5nIHVzZXJzIGNhbiBkbywgbW9kdWxlIHVubG9hZCBpcyBleHBsaWNp dGx5IGEgCj4gPiBkZXZlbG9wZXIgb25seSBmZWF0dXJlLgo+IAo+IE15IGFwcHJvYWNoIHdhcyB0 byBiZSBhYmxlIHRvIHRlc3QgZHJpdmVyIGJlaGF2aW9yIHVuZGVyIGFueSBob3QgdW5sb2FkIAo+ IG9wZXJhdGlvbiBhdmFpbGFibGUgdG8gYSB1c2VyLCBubyBtYXR0ZXIgaWYgZGV2ZWxvcGVyIG9y aWVudGVkIG9yIG5vdCwgc28gd2UgCj4gY2FuIG1ha2UgdGhlIGRyaXZlciByZXNpc3RhbnQgdG8g dXNlcnMgcGVyZm9ybWluZyBwb3RlbnRpYWxseSBkYW5nZXJvdXMgaG90IAo+IHVuYmluZC91bnBs dWcgb3BlcmF0aW9ucyBhdmFpbGFibGUgdG8gdGhlbSwgaW50ZW50aW9uYWxseSBvciBub3QuCgpZ ZXMgSSBhZ3JlZSB3aXRoIHRoYXQsIHdlIG5lZWQgdG8gdGVzdCBob3R1bnBsdWcuCgpidHcgdGhl IHJlYWwgZnVuIGlzbid0IHRoZSB1bmJpbmQgaW4gc3lzZnMsIGJ1dCBwaHlzaWNhbGx5IHVucGx1 Z2dpbmcgYQpwY2ktZSBvciB0aHVuZGVyYm9sdC91c2ItYyBnZnggY2FyZC4gSW1vIHRoYXQncyB3 aHkgd2UgbmVlZCB0byBoYXZlIHRoaXMsCmFuZCB0aGUgYmVzdCB3YXkgdG8gdGVzdCB0aGF0IGhv dHVucGx1ZyBpcyB0aHJvdWdoIHRoZSBzeXNmcyB1bmJpbmQKc3VwcG9ydCAoaXQncyBub3QgZXhh Y3RseSB0aGUgc2FtZSBzaW5jZSB0aGlzIHdheSB3ZSdsbCBuZXZlciBzZWUgZmFpbGluZwpwY2kg dHJhbnNhY3Rpb25zLCB3aGljaCBhcmUgYW4gZW50aXJlbHkgZGlmZmVyZW50IGtpbmQgb2YgZnVu KS4KCj4gPiBXZSBkbyBub3QgZXhwZWN0IG1vZHVsZSB1bmxvYWQgdG8gd29yayB1bmRlciBhbGwK PiA+IHBvc3NpYmxlIGNvbmRpdGlvbnMgKGl0IGRvZXNuJ3QpLiAKPiAKPiBEbyB5b3UgdGhpbmsg dGhhdCBkcml2ZXIgcmViaW5kIG9wZXJhdGlvbiBoYXMgbW9yZSBjaGFuY2VzIHRvIHN1Y2NlZWQs IAo+IGVzcGVjaWFsbHkgb24gYSBkZXZpY2Ugb24gd2hpY2ggYSBidXMgdW5wbHVnIG9wZXJhdGlv biB3YXMgbm90IGFjdHVhbGx5IAo+IHBlcmZvcm1lZCBidXQgb25seSBzaW11bGF0ZWQgdmlhIHN5 c2ZzLCBvbiBhIGRldmljZSB3aGljaCB0aGVuIGhhcyBiZWVuIGxlZnQgCj4gaW4gYW4gdW5wcmVk aWN0YWJsZSBzdGF0ZSBhbmQgaGFzbid0IHVuZGVyZ29uZSBhIGhhcmR3YXJlIHBvd2VyLW9uIHJl c2V0IG9uIAo+IHBoeXNpY2FsIGJ1cyByZS1wbHVnPwoKVGhlcmUncyBkZWZpbml0ZWx5IHBvdGVu dGlhbCBmb3IgYnVncywgYnV0IEkgZG9uJ3Qgc2VlIGhvdyBtb2R1bGUgcmVsb2FkCmhlbHBzLiBN b2R1bGUgcmVsb2FkIGlzIGVzc2VudGlhbGx5OgoKLSB1bmJpbmQgZGV2aWNlcwotIHVubG9hZCBt b2R1bGUKLSByZWxvYWQgbW9kdWxlCi0gcmViaW5kIGFsbCBkZXZpY2VzCgpUaGUgb25seSBhZGRp dGlvbmFsIG1hZ2ljIHRoYXQgbW9kdWxlIHVubG9hZCBjYW4gcGFwZXIgb3ZlciBpcyB0aGF0IGl0 J3MKZGlzYWxsb3dlZCB3aGlsZSBhbnlvbmUgaXMgc3RpbGwgdXNpbmcgYW55IGRldmljZXMgKGFz c3VtaW5nIHRoZSBtb2R1bGUKcmVmY291bnQgY29kZSBpcyBjb3JyZWN0KS4gVGhhdCdzIG5vdCB0 aGUgY2FzZSBmb3IgdW5iaW5kL2hvdHVucGx1Zy4gQnV0CnRoYXQncyBpdCwgdGhlcmUncyBubyBh ZGRpdGlvbmFsIG1hZ2ljIGNvZGUgYmVpbmcgcnVuIHdoZW4geW91IHVubG9hZCB0aGUKbW9kdWxl LiBIZW5jZSB3aHkgSSBkb24ndCB1bmRlcnN0YW5kIHdoeSB5b3Ugd2FudCB0byBkbyB0aGF0LgoK PiA+IEknZCBkcm9wIHRoYXQgcGFydCBhbmQgZm9jdXMgY29tcGxldGVseQo+ID4gb24gdGhlIGhv dHJlbW92ZS91bmJpbmQgdGVzdGNhc2UgaGVyZS4KPiAKPiBEcml2ZXIgdW5iaW5kIC8gZGV2aWNl IHVucGx1ZyB2aWEgc3lzZnMgY2FuIGFsc28gYmUgY29uc2lkZXJlZCBkZXZlbG9wZXIgb25seSAK PiBmZWF0dXJlcy4gRG8geW91IHRoaW5rIHdlIHNob3VsZCBkcm9wIGRyaXZlciB1bmJpbmQgb3B0 aW9uLCBsZWF2aW5nIG9ubHkgCj4gZGV2aWNlIHVucGx1ZyB2aWEgc3lzZnMgZm9yIHdoaWNoIHdl IG1heSBoYXZlIG5vIGdvb2Qgbm9uLWRldmVsb3BlciAKPiBhbHRlcm5hdGl2ZT8KCllhbmtpbmcg dGhlIGNhYmxlIGZvciBlLmcuIHVzYi1jL3RodW5kZXJib2x0IGV4dGVybmFsIGdwdSBpcyB2ZXJ5 IG11Y2ggYQp1c2VyIGFjdGlvbi4gVGhhdCdzIHdoeSB3ZSBjYXJlLgoKV2UgZGlkbid0IGNhcmUg Zm9yIHVuYmluZCAoSSB3b250Zml4IGNsb3NlZCBhbGwgdGhlIGJ1Z3MgbXlzZWxmKSB3aGlsZQpp bnRlbCBvbmx5IGNyZWF0ZWQgYnVpbHQtaW4gZ3B1cyBiZWNhdXNlIGl0J3MgaW5kZWVkIGZhaXJs eSBwb2ludGxlc3MgdG8KdW5iaW5kIHRoZXNlLgoKT3RoZXIgYml0IEkgZG9uJ3QgcXVpdGUgZ2V0 OiBXaGF0J3MgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB1bmJpbmQgYW5kCnVucGx1Zz8KLURhbmll bAoKPiAKPiBUaGFua3MsCj4gSmFudXN6Cj4gCj4gCj4gPiAtRGFuaWVsCj4gPiAKPiA+ID4gLS0t Cj4gPiA+ICB0ZXN0cy9NYWtlZmlsZS5zb3VyY2VzICB8ICAgMSArCj4gPiA+ICB0ZXN0cy9jb3Jl X2hvdF9yZWxvYWQuYyB8IDQwOCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCj4gPiA+ICB0ZXN0cy9tZXNvbi5idWlsZCAgICAgICB8ICAgMSArCj4gPiA+ICAzIGZpbGVz IGNoYW5nZWQsIDQxMCBpbnNlcnRpb25zKCspCj4gPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgdGVz dHMvY29yZV9ob3RfcmVsb2FkLmMKPiA+ID4gCj4gPiA+IGRpZmYgLS1naXQgYS90ZXN0cy9NYWtl ZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ID4gPiBpbmRleCA3ZjkyMWY2 Yy4uNDUyZDhlZDcgMTAwNjQ0Cj4gPiA+IC0tLSBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiA+ ID4gKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ID4gPiBAQCAtMTYsNiArMTYsNyBAQCBU RVNUU19wcm9ncyA9IFwKPiA+ID4gIAljb3JlX2dldGNsaWVudCBcCj4gPiA+ICAJY29yZV9nZXRz dGF0cyBcCj4gPiA+ICAJY29yZV9nZXR2ZXJzaW9uIFwKPiA+ID4gKwljb3JlX2hvdF9yZWxvYWQg XAo+ID4gPiAgCWNvcmVfc2V0bWFzdGVyX3ZzX2F1dGggXAo+ID4gPiAgCWRlYnVnZnNfdGVzdCBc Cj4gPiA+ICAJZHJtX2ltcG9ydF9leHBvcnQgXAo+ID4gPiBkaWZmIC0tZ2l0IGEvdGVzdHMvY29y ZV9ob3RfcmVsb2FkLmMgYi90ZXN0cy9jb3JlX2hvdF9yZWxvYWQuYwo+ID4gPiBuZXcgZmlsZSBt b2RlIDEwMDY0NAo+ID4gPiBpbmRleCAwMDAwMDAwMC4uNjY3M2Y1NWMKPiA+ID4gLS0tIC9kZXYv bnVsbAo+ID4gPiArKysgYi90ZXN0cy9jb3JlX2hvdF9yZWxvYWQuYwo+ID4gPiBAQCAtMCwwICsx LDQwOCBAQAo+ID4gPiArLyoKPiA+ID4gKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBv cmF0aW9uCj4gPiA+ICsgKgo+ID4gPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIAo+IGEKPiA+ID4gKyAqIGNv cHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0 aGUgCj4gIlNvZnR3YXJlIiksCj4gPiA+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCAKPiBsaW1pdGF0aW9uCj4gPiA+ICsg KiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp YnV0ZSwgCj4gc3VibGljZW5zZSwKPiA+ID4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUg U29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ID4gPiArICogU29m dHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9uczoKPiA+ID4gKyAqCj4gPiA+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBh bmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSAKPiBuZXh0Cj4gPiA+ICsg KiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRp YWwgcG9ydGlvbnMgb2YgCj4gdGhlCj4gPiA+ICsgKiBTb2Z0d2FyZS4KPiA+ID4gKyAqCj4gPiA+ ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBP RiBBTlkgS0lORCwgCj4gRVhQUkVTUyBPUgo+ID4gPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJV VCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiAKPiBNRVJDSEFOVEFCSUxJVFksCj4g PiA+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiAgSU4gTk8gRVZFTlQgCj4gU0hBTEwKPiA+ID4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlS SUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIAo+IE9USEVS Cj4gPiA+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBU T1JUIE9SIE9USEVSV0lTRSwgCj4gQVJJU0lORwo+ID4gPiArICogRlJPTSwgT1VUIE9GIE9SIElO IENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiAKPiBERUFM SU5HUwo+ID4gPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ID4gPiArICovCj4gPiA+ICsKPiA+ID4g KyNpbmNsdWRlICJpZ3QuaCIKPiA+ID4gKyNpbmNsdWRlICJpZ3RfZGV2aWNlLmgiCj4gPiA+ICsj aW5jbHVkZSAiaWd0X2R1bW15bG9hZC5oIgo+ID4gPiArI2luY2x1ZGUgImlndF9rbW9kLmgiCj4g PiA+ICsjaW5jbHVkZSAiaWd0X3N5c2ZzLmgiCj4gPiA+ICsKPiA+ID4gKyNpbmNsdWRlIDxnZXRv cHQuaD4KPiA+ID4gKyNpbmNsdWRlIDxsaW1pdHMuaD4KPiA+ID4gKyNpbmNsdWRlIDxzdHJpbmcu aD4KPiA+ID4gKyNpbmNsdWRlIDx1bmlzdGQuaD4KPiA+ID4gKwo+ID4gPiArI2luY2x1ZGUgPHN5 cy90eXBlcy5oPgo+ID4gPiArI2luY2x1ZGUgPHN5cy93YWl0Lmg+Cj4gPiA+ICsKPiA+ID4gKy8q Kgo+ID4gPiArICogQSBwb3N0LWFjdGlvbiBkZXZpY2UgcmVjb3ZlcnkgZnVuY3Rpb246Cj4gPiA+ ICsgKiBAcHJpdjogYSBwb2ludGVyIHRvIHByaXZhdGUgZGF0YSByZXF1aXJlZCBmb3IgZGV2aWNl IHJlY292ZXJ5Cj4gPiA+ICsgKgo+ID4gPiArICogTWFrZSB0aGUgZGV2aWNlIHJlLWFwcGVhcgo+ ID4gPiArICovCj4gPiA+ICt0eXBlZGVmIHZvaWQgKCpyZWNvdmVyX3QpKGNvbnN0IHZvaWQgKnBy aXYpOwo+ID4gPiArCj4gPiA+ICsvKioKPiA+ID4gKyAqIEEgdGVzdCBhY3Rpb24gZnVuY3Rpb246 Cj4gPiA+ICsgKiBAZGlyOiBmaWxlIGRlc2NyaXB0b3Igb2YgYW4gb3BlbiBkZXZpY2Ugc3lzZnMg ZGlyZWN0b3J5Cj4gPiA+ICsgKiBAbW9kdWxlOiBtb2R1bGUgbmFtZSwgbm9uLU5VTEwgaW5kaWNh dGVzIHBvc3QtYWN0aW9uIG1vZHVsZSB1bmxvYWQgCj4gcmVxdWVzdGVkCj4gPiA+ICsgKiBAcmVj b3ZlcjogZm9yIHJldHVybmluZyBhIHBvaW50ZXIgdG8gYSBwb3N0LWFjdGlvbiBkZXZpY2UgcmVj b3ZlcnkgCj4gZnVuY3Rpb24KPiA+ID4gKyAqIEBwcml2OiBmb3IgcmV0dXJuaW5nIGEgcG9pbnRl ciB0byBkYXRhIHRvIGJlIHBhc3NlZCB0byBAcmVjb3Zlcgo+ID4gPiArICoKPiA+ID4gKyAqIE1h a2UgdGhlIGRldmljZSBkaXNhcHBlYXIKPiA+ID4gKyAqLwo+ID4gPiArdHlwZWRlZiB2b2lkICgq YWN0aW9uX3QpKGludCBkZXZpY2UsIGNvbnN0IGNoYXIgKm1vZHVsZSwKPiA+ID4gKwkJCSByZWNv dmVyX3QgKnJlY292ZXIsIGNvbnN0IHZvaWQgKipwcml2KTsKPiA+ID4gKwo+ID4gPiArLyoqCj4g PiA+ICsgKiBBIHdvcmtsb2FkIGNvbXBsZXRpb24gd2FpdCBmdW5jdGlvbjoKPiA+ID4gKyAqIEBk ZXZpY2U6IG9wZW4gZGV2aWNlIGZpbGUgZGVzY3JpcHRvcgo+ID4gPiArICogQHByaXY6IGEgcG9p bnRlciB0byBwcml2YXRlIGRhdGEgcmVxdWlyZWQgYnkgdGhlIHdhaXQgZnVuY3Rpb24KPiA+ID4g KyAqCj4gPiA+ICsgKiBXYWl0IGZvciBjb21wbGV0aW9uIG9mIGJhY2tncm91bmQgd29ya2xvYWQK PiA+ID4gKyAqLwo+ID4gPiArdHlwZWRlZiB2b2lkICgqd29ya2xvYWRfd2FpdF90KShpbnQgZGV2 aWNlLCB2b2lkICpwcml2KTsKPiA+ID4gKwo+ID4gPiArLyoqCj4gPiA+ICsgKiBBIHdvcmtsb2Fk IGZ1bmN0aW9uOgo+ID4gPiArICogQGRldmljZTogb3BlbiBkZXZpY2UgZmlsZSBkZXNjcmlwdG9y Cj4gPiA+ICsgKiBAYXJnOiBhIG9wdGlvbmFsIHN0cmluZyBhcmd1bWVudCBwYXNzZWQgdG8gdGhl IHdvcmtsb2FkIGZ1bmN0aW9uCj4gPiA+ICsgKiBAd29ya2xvYWRfd2FpdDogZm9yIHJldHVybmlu ZyBhIHBvaW50ZXIgdG8gd29ya2xvYWQgY29tcGxldGlvbiB3YWl0IAo+IGZ1bmN0aW9uCj4gPiA+ ICsgKiBAcHJpdjogZm9yIHJldHVybmluZyBhIHBvaW50ZXIgdG8gZGF0YSB0byBiZSBwYXNzZWQg dG8gQHdvcmtsb2FkX3dhaXQKPiA+ID4gKyAqCj4gPiA+ICsgKiBQdXQgc29tZSBsb25nIGxhc3Rp bmcgbG9hZCBvbiB0aGUgZGV2aWNlCj4gPiA+ICsgKi8KPiA+ID4gK3R5cGVkZWYgdm9pZCAoKndv cmtsb2FkX3QpKGludCBkZXZpY2UsIGNvbnN0IGNoYXIgKmFyZywKPiA+ID4gKwkJCSAgIHdvcmts b2FkX3dhaXRfdCAqd29ya2xvYWRfd2FpdCwgdm9pZCAKPiAqKnByaXYpOwo+ID4gPiArCj4gPiA+ ICsvKioKPiA+ID4gKyAqIFBhaXJzIG9mIHRlc3QgYWN0aW9uIC8gZGV2aWNlIHJlY292ZXJ5IGZ1 bmN0aW9ucwo+ID4gPiArICovCj4gPiA+ICsKPiA+ID4gKy8qIFVuYmluZCAvIHJlLWJpbmQgKi8K PiA+ID4gKwo+ID4gPiArc3RydWN0IHJlYmluZF9kYXRhIHsKPiA+ID4gKwlpbnQgZHJpdmVyOwkv KiBvcGVuIGZpbGUgZGVzY3JpcHRvciBvZiBkcml2ZXIgc3lzZnMgZGlyZWN0b3J5ICovCj4gPiA+ ICsJY2hhciAqZGV2aWNlOwkvKiBidXMgc3BlY2lmaWMgZGV2aWNlIGFkZHJlc3MgYXMgc3RyaW5n ICovCj4gPiA+ICt9Owo+ID4gPiArCj4gPiA+ICsvKiBSZS1iaW5kIHRoZSBkcml2ZXIgdG8gdGhl IGRldmljZSAqLwo+ID4gPiArc3RhdGljIHZvaWQgZHJpdmVyX2JpbmQoY29uc3Qgdm9pZCAqcHJp dikKPiA+ID4gK3sKPiA+ID4gKwljb25zdCBzdHJ1Y3QgcmViaW5kX2RhdGEgKmRhdGEgPSBwcml2 Owo+ID4gPiArCj4gPiA+ICsJaWd0X3NldF90aW1lb3V0KDYwLCAiRHJpdmVyIHJlLWJpbmQgdGlt ZW91dCEiKTsKPiA+ID4gKwlpZ3Rfc3lzZnNfc2V0KGRhdGEtPmRyaXZlciwgImJpbmQiLCBkYXRh LT5kZXZpY2UpOwo+ID4gPiArCj4gPiA+ICsJY2xvc2UoZGF0YS0+ZHJpdmVyKTsKPiA+ID4gK30K PiA+ID4gKwo+ID4gPiArLyogVW5iaW5kIHRoZSBkcml2ZXIgZnJvbSB0aGUgZGV2aWNlICovCj4g PiA+ICtzdGF0aWMgdm9pZCBkcml2ZXJfdW5iaW5kKGludCBkZXZpY2UsIGNvbnN0IGNoYXIgKm1v ZHVsZSwKPiA+ID4gKwkJCSAgcmVjb3Zlcl90ICpyZWNvdmVyLCBjb25zdCB2b2lkICoqcHJpdikK PiA+ID4gK3sKPiA+ID4gKwlzdGF0aWMgY2hhciBwYXRoW1BBVEhfTUFYXTsKPiA+ID4gKwlzdGF0 aWMgc3RydWN0IHJlYmluZF9kYXRhIGRhdGE7Cj4gPiA+ICsJaW50IGxlbjsKPiA+ID4gKwo+ID4g PiArCS8qIGNvbGxlY3QgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIGRyaXZlciBiaW5kL3VuYmlu ZCAqLwo+ID4gPiArCWRhdGEuZHJpdmVyID0gb3BlbmF0KGRldmljZSwgImRldmljZS9kcml2ZXIi LCBPX0RJUkVDVE9SWSk7Cj4gPiA+ICsJaWd0X2Fzc2VydChkYXRhLmRyaXZlciA+PSAwKTsKPiA+ ID4gKwo+ID4gPiArCWxlbiA9IHJlYWRsaW5rYXQoZGV2aWNlLCAiZGV2aWNlIiwgcGF0aCwgc2l6 ZW9mKHBhdGgpIC0gMSk7Cj4gPiA+ICsJcGF0aFtsZW5dID0gJ1wwJzsKPiA+ID4gKwlkYXRhLmRl dmljZSA9IHN0cnJjaHIocGF0aCwgJy8nKSArIDE7Cj4gPiA+ICsKPiA+ID4gKwkvKiB1bmJpbmQg dGhlIGRyaXZlciAqLwo+ID4gPiArCWlndF9zZXRfdGltZW91dCg2MCwgIkRyaXZlciB1bmJpbmQg dGltZW91dCEiKTsKPiA+ID4gKwlpZ3Rfc3lzZnNfc2V0KGRhdGEuZHJpdmVyLCAidW5iaW5kIiwg ZGF0YS5kZXZpY2UpOwo+ID4gPiArCj4gPiA+ICsJLyogcGFzcyBiYWNrIGluZm8gb24gaG93IHRv IHJlY292ZXIgdGhlIGRldmljZSAqLwo+ID4gPiArCWlmIChtb2R1bGUpIHsKPiA+ID4gKwkJLyog ZG9uJ3QgdHJ5IHRvIHJlYmluZCBpZiBtb2R1bGUgd2lsbCBiZSB1bmxvYWRlZCAqLwo+ID4gPiAr CQkqcmVjb3ZlciA9IE5VTEw7Cj4gPiA+ICsJfSBlbHNlIHsKPiA+ID4gKwkJKnJlY292ZXIgPSBk cml2ZXJfYmluZDsKPiA+ID4gKwkJKnByaXYgPSAmZGF0YTsKPiA+ID4gKwl9Cj4gPiA+ICt9Cj4g PiA+ICsKPiA+ID4gKy8qIFVucGx1ZyAvIHJlLXBsdWcgKi8KPiA+ID4gKwo+ID4gPiArLyogUmUt ZGlzY292ZXIgdGhlIGRldmljZSBieSByZXNjYW5uaW5nIGl0cyBidXMgKi8KPiA+ID4gK3N0YXRp YyB2b2lkIGJ1c19yZXNjYW4oY29uc3Qgdm9pZCAqcHJpdikKPiA+ID4gK3sKPiA+ID4gKwljb25z dCBpbnQgKmJ1cyA9IHByaXY7Cj4gPiA+ICsKPiA+ID4gKwlpZ3Rfc2V0X3RpbWVvdXQoNjAsICJC dXMgcmVzY2FuIHRpbWVvdXQhIik7Cj4gPiA+ICsJaWd0X3N5c2ZzX3NldCgqYnVzLCAicmVzY2Fu IiwgIjEiKTsKPiA+ID4gKwo+ID4gPiArCWNsb3NlKCpidXMpOwo+ID4gPiArfQo+ID4gPiArCj4g PiA+ICsvKiBSZW1vdmUgKHZpcnR1YWxseSB1bnBsdWcpIHRoZSBkZXZpY2UgZnJvbSBpdHMgYnVz ICovCj4gPiA+ICtzdGF0aWMgdm9pZCBkZXZpY2VfdW5wbHVnKGludCBkZXZpY2UsIGNvbnN0IGNo YXIgKm1vZHVsZSwKPiA+ID4gKwkJCSAgcmVjb3Zlcl90ICpyZWNvdmVyLCBjb25zdCB2b2lkICoq cHJpdikKPiA+ID4gK3sKPiA+ID4gKwlzdGF0aWMgaW50IGJ1czsKPiA+ID4gKwo+ID4gPiArCS8q IGNvbGxlY3QgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIGJ1cyByZXNjYW4gKi8KPiA+ID4gKwli dXMgPSBvcGVuYXQoZGV2aWNlLCAiZGV2aWNlL3N1YnN5c3RlbSIsIE9fRElSRUNUT1JZKTsKPiA+ ID4gKwlpZ3RfYXNzZXJ0KGJ1cyA+PSAwKTsKPiA+ID4gKwo+ID4gPiArCS8qIHJlbW92ZSB0aGUg ZGV2aWNlICovCj4gPiA+ICsJaWd0X3NldF90aW1lb3V0KDYwLCAiRGV2aWNlIHVucGx1ZyB0aW1l b3V0ISIpOwo+ID4gPiArCWlndF9zeXNmc19zZXQoZGV2aWNlLCAiZGV2aWNlL3JlbW92ZSIsICIx Iik7Cj4gPiA+ICsKPiA+ID4gKwkvKiBwYXNzIGJhY2sgaW5mbyBvbiBob3cgdG8gcmVjb3ZlciB0 aGUgZGV2aWNlICovCj4gPiA+ICsJKnJlY292ZXIgPSBidXNfcmVzY2FuOwo+ID4gPiArCSpwcml2 ID0gJmJ1czsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArLyogRWFjaCB0ZXN0IGFjdGlvbiBmdW5j dGlvbiBtdXN0IGJlIHJlZ2lzdGVyZWQgaW4gdGhlIGZvbGxvd2luZyB0YWJsZSAqLwo+ID4gPiAr c3RhdGljIGNvbnN0IHN0cnVjdCB7Cj4gPiA+ICsJY29uc3QgY2hhciAqbmFtZTsJLyogdW5pcXVl IHRlc3QgYWN0aW9uIG5hbWUgdXNlZCBpbiB0ZXN0IAo+IG5hbWVzICovCj4gPiA+ICsJYWN0aW9u X3QgZnVuY3Rpb247CS8qIHRlc3QgYWN0aW9uIGZ1bmN0aW9uIHBvaW50ZXIgKi8KPiA+ID4gK30g YWN0aW9uc1tdID0gewo+ID4gPiArCXsgInVuYmluZCIsIGRyaXZlcl91bmJpbmQsIH0sCj4gPiA+ ICsJeyAidW5wbHVnIiwgZGV2aWNlX3VucGx1ZywgfSwKPiA+ID4gK307Cj4gPiA+ICsKPiA+ID4g Ky8qKgo+ID4gPiArICogUGFpcnMgb2Ygd29ya2xvYWQgLyB3YWl0IGNvbXBsZXRpb24gZnVuY3Rp b25zCj4gPiA+ICsgKi8KPiA+ID4gKwo+ID4gPiArLyogQSB3b3JrbG9hZCB1c2luZyBpZ3Rfc3Bp bl9ydW4oKSAqLwo+ID4gPiArCj4gPiA+ICsvKiBXYWl0IGZvciBjb21wbGV0YWlvbiBvZiBkdW1t eSBsb2FkICovCj4gPiA+ICtzdGF0aWMgdm9pZCBkdW1teV93YWl0KGludCBkZXZpY2UsIHZvaWQg KnByaXYpCj4gPiA+ICt7Cj4gPiA+ICsJaWd0X3NwaW5fdCAqc3BpbiA9IHByaXY7Cj4gPiA+ICsK PiA+ID4gKwkvKiB3YWl0IHVudGlsIHRoZSBzcGluIG5vIGxvbmdlciBydW5zLCBkb24ndCBmYWls IG9uIGVycm9yICovCj4gPiA+ICsJaWYgKGdlbV93YWl0KGRldmljZSwgc3Bpbi0+aGFuZGxlLCBO VUxMKSkKPiA+ID4gKwkJX19nZW1fc2V0X2RvbWFpbihkZXZpY2UsIHNwaW4tPmhhbmRsZSwKPiA+ ID4gKwkJCQkgSTkxNV9HRU1fRE9NQUlOX0dUVCwgCj4gSTkxNV9HRU1fRE9NQUlOX0dUVCk7Cj4g PiA+ICt9Cj4gPiA+ICsKPiA+ID4gKy8qIFJ1biBkdW1teSBsb2FkICovCj4gPiA+ICtzdGF0aWMg dm9pZCBkdW1teV9sb2FkKGludCBkZXZpY2UsIGNvbnN0IGNoYXIgKmFyZywKPiA+ID4gKwkJICAg ICAgIHdvcmtsb2FkX3dhaXRfdCAqd29ya2xvYWRfd2FpdCwgdm9pZCAqKnByaXYpCj4gPiA+ICt7 Cj4gPiA+ICsJaWd0X3NwaW5fdCAqc3BpbjsKPiA+ID4gKwo+ID4gPiArCS8qIHN1Ym1pdCBhIGpv YiAqLwo+ID4gPiArCXNwaW4gPSBpZ3Rfc3Bpbl9uZXcoZGV2aWNlKTsKPiA+ID4gKwo+ID4gPiAr CSp3b3JrbG9hZF93YWl0ID0gZHVtbXlfd2FpdDsKPiA+ID4gKwkqcHJpdiA9IHNwaW47Cj4gPiA+ ICt9Cj4gPiA+ICsKPiA+ID4gKy8qKgo+ID4gPiArICogRWFjaCB3b3JrbG9hZCBmdW5jdGlvbiBt dXN0IGJlIHJlZ2lzdGVyZWQgaW4gdGhlIGZvbGxvd2luZyB0YWJsZS4KPiA+ID4gKyAqIEEgZnVu Y3Rpb24gbWF5IGJlIHJlZ2lzdGVyZWQgbW9yZSB0aGFuIG9uY2UgdW5kZXIgZGlmZmVyZW50IHdv cmtsb2FkIAo+IG5hbWVzLAo+ID4gPiArICogdGhhdCBtYWtlcyBzZW5zZSBhcyBsb25nIGFzIGEg ZGlmZmVyZW50IGFyZ3VtZW50IGlzIHNwZWNpZmllZCBmb3IgZWFjaCAKPiBuYW1lLgo+ID4gPiAr ICovCj4gPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHsKPiA+ID4gKwljb25zdCBjaGFyICpuYW1l OwkvKiB1bmlxdWUgd29ya2xvYWQgbmFtZSB1c2VkIGluIHRlc3QgbmFtZXMgCj4gKi8KPiA+ID4g Kwl3b3JrbG9hZF90IGZ1bmN0aW9uOwkvKiB3b3JrbG9hZCBmdW5jdGlvbiBwb2ludGVyICovCj4g PiA+ICsJY29uc3QgY2hhciAqYXJnOwkvKiBvcHRpb25hbCBjb25zdGFudCBzdHJpbmcgYXJndW1l bnQgKi8KPiA+ID4gK30gd29ya2xvYWRzW10gPSB7Cj4gPiA+ICsJeyAic3BpbiIsIGR1bW15X2xv YWQsIE5VTEwsIH0sCj4gPiA+ICt9Owo+ID4gPiArCj4gPiA+ICsvKioKPiA+ID4gKyAqIEZyYW1l d29yawo+ID4gPiArICovCj4gPiA+ICsKPiA+ID4gK3N0YXRpYyB2b2lkIGhlYWx0aGNoZWNrKGlu dCBjaGlwc2V0KQo+ID4gPiArewo+ID4gPiArCWludCBkZXZpY2U7Cj4gPiA+ICsKPiA+ID4gKwlk ZXZpY2UgPSBfX2RybV9vcGVuX2RyaXZlcihjaGlwc2V0KTsKPiA+ID4gKwlpZ3RfYXNzZXJ0KGRl dmljZSA+PSAwKTsKPiA+ID4gKwo+ID4gPiArCWlmIChjaGlwc2V0ID09IERSSVZFUl9JTlRFTCkK PiA+ID4gKwkJZ2VtX3Rlc3RfZW5naW5lKGRldmljZSwgQUxMX0VOR0lORVMpOwo+ID4gPiArCj4g PiA+ICsJY2xvc2UoZGV2aWNlKTsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIHZvaWQg bW9kdWxlX3VubG9hZChpbnQgY2hpcHNldCwgY29uc3QgY2hhciAqbW9kdWxlKQo+ID4gPiArewo+ ID4gPiArCWlmIChjaGlwc2V0ID09IERSSVZFUl9JTlRFTCkKPiA+ID4gKwkJaWd0X2Fzc2VydChp Z3RfaTkxNV9kcml2ZXJfdW5sb2FkKCkgPT0gCj4gSUdUX0VYSVRfU1VDQ0VTUyk7Cj4gPiA+ICsJ ZWxzZQo+ID4gPiArCQlpZ3RfYXNzZXJ0KGlndF9rbW9kX3VubG9hZChtb2R1bGUsIDApID09IDAp Owo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgdm9pZCBydW5fYWN0aW9uKGludCBkZXZp Y2UsIGFjdGlvbl90IGFjdGlvbiwgY29uc3QgY2hhciAqbW9kdWxlLAo+ID4gPiArCQkgICAgICBy ZWNvdmVyX3QgKnJlY292ZXIsIGNvbnN0IHZvaWQgKipwcml2KQo+ID4gPiArewo+ID4gPiArCWlu dCBkaXI7Cj4gPiA+ICsKPiA+ID4gKwlkaXIgPSBpZ3Rfc3lzZnNfb3BlbihkZXZpY2UpOwo+ID4g PiArCWlndF9hc3NlcnQoZGlyID49IDApOwo+ID4gPiArCj4gPiA+ICsJYWN0aW9uKGRpciwgbW9k dWxlLCByZWNvdmVyLCBwcml2KTsKPiA+ID4gKwo+ID4gPiArCWNsb3NlKGRpcik7Cj4gPiA+ICt9 Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyB2b2lkIHdhaXRfaGVscGVyKGludCBkZXZpY2UsIHZvaWQg KnByaXYpCj4gPiA+ICt7Cj4gPiA+ICsJc3RydWN0IGlndF9oZWxwZXJfcHJvY2VzcyAqcHJvYyA9 IHByaXY7Cj4gPiA+ICsKPiA+ID4gKwkvKiB3YWl0IHVudGlsIHRoZSB3b3JrbG9hZCBzdWJwcm9j ZXNzIGhhcyBjb21wbGV0ZWQgKi8KPiA+ID4gKwlpZ3RfaWdub3JlX3dhcm4oaWd0X3dhaXRfaGVs cGVyKHByb2MpKTsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIHZvaWQgcnVuX3dvcmts b2FkKGludCBkZXZpY2UsIHdvcmtsb2FkX3Qgd29ya2xvYWQsIGNvbnN0IGNoYXIgCj4gKmFyZywK PiA+ID4gKwkJCSBjb25zdCBjaGFyICptb2R1bGUsIHdvcmtsb2FkX3dhaXRfdCAKPiAqd29ya2xv YWRfd2FpdCwKPiA+ID4gKwkJCSB2b2lkICoqcHJpdikKPiA+ID4gK3sKPiA+ID4gKwlpZiAobW9k dWxlKSB7Cj4gPiA+ICsJCS8qIHJ1biB3b3JrbG9hZCBpbiBhIHN1YnByb2Nlc3Mgc28gdGhlIG1v ZHVsZSBpcyBwdXQgb24gCj4gY3Jhc2ggKi8KPiA+ID4gKwkJc3RhdGljIHN0cnVjdCBpZ3RfaGVs cGVyX3Byb2Nlc3MgcHJvYzsKPiA+ID4gKwkJaW50IHdzdGF0dXMsIHJldDsKPiA+ID4gKwo+ID4g PiArCQliemVybygmcHJvYywgc2l6ZW9mKHByb2MpKTsKPiA+ID4gKwo+ID4gPiArCQlpZ3RfZm9y a19oZWxwZXIoJnByb2MpIHsKPiA+ID4gKwkJCS8qIHN1cHByZXNzIGlndF9sb2cgbWVzc2FnZXMg Ki8KPiA+ID4gKwkJCWlndF9sb2dfbGV2ZWwgPSBJR1RfTE9HX05PTkU7Cj4gPiA+ICsKPiA+ID4g KwkJCS8qIGludGVyY2VwdCBpZ3RfZmFpbC9za2lwKCkgbG9uZyBqdW1wcyAqLwo+ID4gPiArCQkJ aWYgKHNpZ3NldGptcChpZ3Rfc3VidGVzdF9qbXBidWYsIDEpID09IDApIAo+IHsKPiA+ID4gKwkJ CQl3b3JrbG9hZChkZXZpY2UsIGFyZywgCj4gd29ya2xvYWRfd2FpdCwgcHJpdik7Cj4gPiA+ICsK PiA+ID4gKwkJCQkoKndvcmtsb2FkX3dhaXQpKGRldmljZSwgCj4gKnByaXYpOwo+ID4gPiArCj4g PiA+ICsJCQkJLyogc3VjY2VzcyBpZiBub3QgZGl2ZXJ0ZWQgYnkgCj4gaWd0X2ZhaWwvc2tpcCgp ICovCj4gPiA+ICsJCQkJaWd0X3N1Y2Nlc3MoKTsKPiA+ID4gKwkJCX0KPiA+ID4gKwo+ID4gPiAr CQkJLyogcGFzcyBleGl0IGNvZGUgYmFjayB0byB0aGUgY2FsbGVyICovCj4gPiA+ICsJCQlpZ3Rf ZXhpdCgpOwo+ID4gPiArCQl9Cj4gPiA+ICsJCS8qIGxldCB0aGUgYmFja2dyb3VuZCBwcm9jZXNz IHN0YXJ0IGRvaW5nIGl0cyBqb2Igb3IgCj4gZmFpbCAqLwo+ID4gPiArCQlzbGVlcCgyKTsKPiA+ ID4gKwkJLyogZmFpbCBvciBza2lwIG9uIHdvcmtsb2FkIHByZW1hdHVyZSBjb21wbGV0aW9uICov Cj4gPiA+ICsJCXJldCA9IHdhaXRwaWQocHJvYy5waWQsICZ3c3RhdHVzLCBXTk9IQU5HKTsKPiA+ ID4gKwkJaWYgKHJldCA8IDApCj4gPiA+ICsJCQlpZ3RfZmFpbChJR1RfRVhJVF9JTlZBTElEKTsK PiA+ID4gKwkJaWYgKHJldCkgewo+ID4gPiArCQkJaWYgKCFXSUZFWElURUQod3N0YXR1cykpCj4g PiA+ICsJCQkJaWd0X2ZhaWwoSUdUX0VYSVRfSU5WQUxJRCk7Cj4gPiA+ICsJCQlpZiAoV0VYSVRT VEFUVVMod3N0YXR1cykgPT0gCj4gSUdUX0VYSVRfU1VDQ0VTUykKPiA+ID4gKwkJCQlpZ3RfZmFp bChJR1RfRVhJVF9JTlZBTElEKTsKPiA+ID4gKwkJCWlmIChXRVhJVFNUQVRVUyh3c3RhdHVzKSA9 PSBJR1RfRVhJVF9TS0lQKQo+ID4gPiArCQkJCWlndF9za2lwKE5VTEwpOwo+ID4gPiArCQkJaWd0 X2ZhaWwoV0VYSVRTVEFUVVMod3N0YXR1cykpOwo+ID4gPiArCQl9Cj4gPiA+ICsKPiA+ID4gKwkJ LyogcGFzcyBiYWNrIGluZm8gb24gaG93IHRvIHdhaXQgZm9yIGhlbHBlciBjb21wbGV0aW9uIAo+ ICovCj4gPiA+ICsJCSp3b3JrbG9hZF93YWl0ID0gd2FpdF9oZWxwZXI7Cj4gPiA+ICsJCSpwcml2 ID0gJnByb2M7Cj4gPiA+ICsJfSBlbHNlIHsKPiA+ID4gKwkJLyogcnVuIHRoZSByZXF1ZXN0ZWQg d29ya2xvYWQgZGlyZWN0bHkgKi8KPiA+ID4gKwkJd29ya2xvYWQoZGV2aWNlLCBhcmcsIHdvcmts b2FkX3dhaXQsIHByaXYpOwo+ID4gPiArCX0KPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGlj IHZvaWQgcnVuX3N1YnRlc3QoaW50IGNoaXBzZXQsIGludCB3b3JrbG9hZCwgaW50IGFjdGlvbiwK PiA+ID4gKwkJCWNvbnN0IGNoYXIgKm1vZHVsZSkKPiA+ID4gK3sKPiA+ID4gKwl3b3JrbG9hZF93 YWl0X3Qgd29ya2xvYWRfd2FpdDsKPiA+ID4gKwl2b2lkICp3b3JrbG9hZF9wcml2Owo+ID4gPiAr CXJlY292ZXJfdCByZWNvdmVyOwo+ID4gPiArCWNvbnN0IHZvaWQgKnJlY292ZXJfcHJpdjsKPiA+ ID4gKwlpbnQgZGV2aWNlOwo+ID4gPiArCj4gPiA+ICsJaWd0X3N1YnRlc3RfZigiJXMtJXMlcyIs IHdvcmtsb2Fkc1t3b3JrbG9hZF0ubmFtZSwgCj4gYWN0aW9uc1thY3Rpb25dLm5hbWUsCj4gPiA+ ICsJCSAgICAgIG1vZHVsZSA/ICItdW5sb2FkIiA6ICIiKSB7Cj4gPiA+ICsJCWRldmljZSA9IF9f ZHJtX29wZW5fZHJpdmVyKGNoaXBzZXQpOwo+ID4gPiArCQlpZ3RfYXNzZXJ0KGRldmljZSA+PSAw KTsKPiA+ID4gKwo+ID4gPiArCQkvKiBzcGF3biB0aGUgcmVxdWVzdGVkIHdvcmtsb2FkICovCj4g PiA+ICsJCWlndF9kZWJ1Zygic3Bhd25pbmcgYmFja2dyb3VuZCB3b3JrbG9hZFxuIik7Cj4gPiA+ ICsJCXJ1bl93b3JrbG9hZChkZXZpY2UsIHdvcmtsb2Fkc1t3b3JrbG9hZF0uZnVuY3Rpb24sCj4g PiA+ICsJCQkgICAgIHdvcmtsb2Fkc1t3b3JrbG9hZF0uYXJnLCBtb2R1bGUsCj4gPiA+ICsJCQkg ICAgICZ3b3JrbG9hZF93YWl0LCAmd29ya2xvYWRfcHJpdik7Cj4gPiA+ICsKPiA+ID4gKwkJLyog cnVuIHRoZSByZXF1ZXN0ZWQgdGVzdCBhY3Rpb24gKi8KPiA+ID4gKwkJaWd0X2RlYnVnKCJydW5u aW5nIHRlc3QgYWN0aW9uXG4iKTsKPiA+ID4gKwkJcnVuX2FjdGlvbihkZXZpY2UsIGFjdGlvbnNb YWN0aW9uXS5mdW5jdGlvbiwgbW9kdWxlLAo+ID4gPiArCQkJICAgJnJlY292ZXIsICZyZWNvdmVy X3ByaXYpOwo+ID4gPiArCj4gPiA+ICsJCWlmICh3b3JrbG9hZF93YWl0KSB7Cj4gPiA+ICsJCQlp Z3RfZGVidWcoIndhaXRpbmcgZm9yIHdvcmtsb2FkIAo+IGNvbXBsZXRpb25cbiIpOwo+ID4gPiAr CQkJd29ya2xvYWRfd2FpdChkZXZpY2UsIHdvcmtsb2FkX3ByaXYpOwo+ID4gPiArCQl9Cj4gPiA+ ICsKPiA+ID4gKwkJY2xvc2UoZGV2aWNlKTsKPiA+ID4gKwo+ID4gPiArCQlpZiAobW9kdWxlKSB7 Cj4gPiA+ICsJCQlpZ3RfZGVidWcoInVubG9hZGluZyAlc1xuIiwgbW9kdWxlKTsKPiA+ID4gKwkJ CW1vZHVsZV91bmxvYWQoY2hpcHNldCwgbW9kdWxlKTsKPiA+ID4gKwkJfQo+ID4gPiArCj4gPiA+ ICsJCWlmIChyZWNvdmVyKSB7Cj4gPiA+ICsJCQlpZ3RfZGVidWcoInJlY292ZXJpbmcgZGV2aWNl XG4iKTsKPiA+ID4gKwkJCXJlY292ZXIocmVjb3Zlcl9wcml2KTsKPiA+ID4gKwkJCWlndF9yZXNl dF90aW1lb3V0KCk7Cj4gPiA+ICsJCX0KPiA+ID4gKwo+ID4gPiArCQlpZ3RfZGVidWcoInJ1bm5p bmcgaGVhbHRoY2hlY2tcbiIpOwo+ID4gPiArCQloZWFsdGhjaGVjayhjaGlwc2V0KTsKPiA+ID4g Kwl9Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK2lndF9tYWluIHsKPiA+ID4gKwlpbnQgZGV2aWNl LCBjaGlwc2V0Owo+ID4gPiArCWNoYXIgKm1vZHVsZTsKPiA+ID4gKwlpbnQgaSwgajsKPiA+ID4g Kwo+ID4gPiArCWlndF9maXh0dXJlIHsKPiA+ID4gKwkJY2hhciBwYXRoW1BBVEhfTUFYXTsKPiA+ ID4gKwkJaW50IGRpciwgbGVuOwo+ID4gPiArCj4gPiA+ICsJCS8qKgo+ID4gPiArCQkgKiBTaW5j ZSBzb21lIHN1YnRlc3RzIGRlcGVuZCBvbiBzdWNjZXNzZnVsIHVubG9hZCBvZiBhIAo+IGRyaXZl cgo+ID4gPiArCQkgKiBtb2R1bGUsIGRvbid0IHVzZSBkcm1fb3Blbl9kcml2ZXIoKSBhcyBpdCBr ZWVwcyBhIAo+IGRldmljZSBmaWxlCj4gPiA+ICsJCSAqIGRlc2NyaXB0b3Igb3BlbiBmb3IgZXhp dCBoYW5kbGVyIHVzZSBhbmQgdGhhdCAKPiBlZmZlY3RpdmVseQo+ID4gPiArCQkgKiBwcmV2ZW50 cyB0aGUgbW9kdWxlIGZyb20gYmVpbmcgdW5sb2FkZWQuCj4gPiA+ICsJCSAqLwo+ID4gPiArCQlk ZXZpY2UgPSBfX2RybV9vcGVuX2RyaXZlcihEUklWRVJfQU5ZKTsKPiA+ID4gKwkJaWd0X2Fzc2Vy dChkZXZpY2UgPj0gMCk7Cj4gPiA+ICsKPiA+ID4gKwkJaWYgKGlzX2k5MTVfZGV2aWNlKGRldmlj ZSkpIHsKPiA+ID4gKwkJCWNoaXBzZXQgPSBEUklWRVJfSU5URUw7Cj4gPiA+ICsJCQltb2R1bGUg PSBzdHJkdXAoImk5MTUiKTsKPiA+ID4gKwkJfSBlbHNlIHsKPiA+ID4gKwkJCWNoaXBzZXQgPSBE UklWRVJfQU5ZOwo+ID4gPiArCj4gPiA+ICsJCQkvKiBDYXB0dXJlIG1vZHVsZSBuYW1lIHRvIGJl IHVubG9hZGVkICovCj4gPiA+ICsJCQlkaXIgPSBpZ3Rfc3lzZnNfb3BlbihkZXZpY2UpOwo+ID4g PiArCQkJbGVuID0gcmVhZGxpbmthdChkaXIsICJkZXZpY2UvZHJpdmVyLwo+IG1vZHVsZSIsIHBh dGgsCj4gPiA+ICsJCQkJCSBzaXplb2YocGF0aCkgLSAxKTsKPiA+ID4gKwkJCWNsb3NlKGRpcik7 Cj4gPiA+ICsJCQlwYXRoW2xlbl0gPSAnXDAnOwo+ID4gPiArCQkJbW9kdWxlID0gc3RyZHVwKHN0 cnJjaHIocGF0aCwgJy8nKSArIDEpOwo+ID4gPiArCQl9Cj4gPiA+ICsJCWNsb3NlKGRldmljZSk7 Cj4gPiA+ICsKPiA+ID4gKwkJaWd0X2luZm8oIlJ1bm5pbmcgdGhlIHRlc3Qgb24gZHJpdmVyIFwi JXNcIiwgY2hpcHNldCAKPiBtYXNrICUjMHhcbiIsCj4gPiA+ICsJCQkgbW9kdWxlLCBjaGlwc2V0 KTsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHdvcmts b2FkcykgLyBzaXplb2YoKndvcmtsb2Fkcyk7IGkrKykgewo+ID4gPiArCQlmb3IgKGogPSAwOyBq IDwgc2l6ZW9mKGFjdGlvbnMpIC8gc2l6ZW9mKCphY3Rpb25zKTsgaisKPiArKSB7Cj4gPiA+ICsJ CQkvKiB3aXRoIG1vZHVsZSB1bmxvYWQgKi8KPiA+ID4gKwkJCXJ1bl9zdWJ0ZXN0KGNoaXBzZXQs IGksIGosIG1vZHVsZSk7Cj4gPiA+ICsJCQkvKiB3aXRob3V0IG1vZHVsZSB1bmxvYWQgKi8KPiA+ ID4gKwkJCXJ1bl9zdWJ0ZXN0KGNoaXBzZXQsIGksIGosIE5VTEwpOwo+ID4gPiArCQl9Cj4gPiA+ ICsJfQo+ID4gPiArfQo+ID4gPiBkaWZmIC0tZ2l0IGEvdGVzdHMvbWVzb24uYnVpbGQgYi90ZXN0 cy9tZXNvbi5idWlsZAo+ID4gPiBpbmRleCA3MTE5NzliNC4uMGQ0MTgwMzUgMTAwNjQ0Cj4gPiA+ IC0tLSBhL3Rlc3RzL21lc29uLmJ1aWxkCj4gPiA+ICsrKyBiL3Rlc3RzL21lc29uLmJ1aWxkCj4g PiA+IEBAIC0zLDYgKzMsNyBAQCB0ZXN0X3Byb2dzID0gWwo+ID4gPiAgCSdjb3JlX2dldGNsaWVu dCcsCj4gPiA+ICAJJ2NvcmVfZ2V0c3RhdHMnLAo+ID4gPiAgCSdjb3JlX2dldHZlcnNpb24nLAo+ ID4gPiArCSdjb3JlX2hvdF9yZWxvYWQnLAo+ID4gPiAgCSdjb3JlX3NldG1hc3Rlcl92c19hdXRo JywKPiA+ID4gIAknZGVidWdmc190ZXN0JywKPiA+ID4gIAknZHJtX2ltcG9ydF9leHBvcnQnLAo+ ID4gCj4gPiAKPiAKPiAKPiAKPiAKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVy LCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3Qt ZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=