From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v4 2/2] drm/xen-front: Add support for Xen PV display frontend Date: Wed, 28 Mar 2018 09:42:51 +0200 Message-ID: <20180328074251.GE14155@phenom.ffwll.local> References: <1522219661-26827-1-git-send-email-andr2000@gmail.com> <1522219661-26827-3-git-send-email-andr2000@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x242.google.com (mail-wm0-x242.google.com [IPv6:2a00:1450:400c:c09::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id 61E336E086 for ; Wed, 28 Mar 2018 07:42:57 +0000 (UTC) Received: by mail-wm0-x242.google.com with SMTP id v21so3041725wmc.1 for ; Wed, 28 Mar 2018 00:42:57 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1522219661-26827-3-git-send-email-andr2000@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Oleksandr Andrushchenko Cc: jgross@suse.com, konrad.wilk@oracle.com, airlied@linux.ie, Oleksandr Andrushchenko , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, daniel.vetter@intel.com, xen-devel@lists.xenproject.org, boris.ostrovsky@oracle.com List-Id: dri-devel@lists.freedesktop.org T24gV2VkLCBNYXIgMjgsIDIwMTggYXQgMDk6NDc6NDFBTSArMDMwMCwgT2xla3NhbmRyIEFuZHJ1 c2hjaGVua28gd3JvdGU6Cj4gRnJvbTogT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtzYW5k cl9hbmRydXNoY2hlbmtvQGVwYW0uY29tPgo+IAo+IEFkZCBzdXBwb3J0IGZvciBYZW4gcGFyYS12 aXJ0dWFsaXplZCBmcm9udGVuZCBkaXNwbGF5IGRyaXZlci4KPiBBY2NvbXBhbnlpbmcgYmFja2Vu ZCBbMV0gaXMgaW1wbGVtZW50ZWQgYXMgYSB1c2VyLXNwYWNlIGFwcGxpY2F0aW9uCj4gYW5kIGl0 cyBoZWxwZXIgbGlicmFyeSBbMl0sIGNhcGFibGUgb2YgcnVubmluZyBhcyBhIFdlc3RvbiBjbGll bnQKPiBvciBEUk0gbWFzdGVyLgo+IENvbmZpZ3VyYXRpb24gb2YgYm90aCBiYWNrZW5kIGFuZCBm cm9udGVuZCBpcyBkb25lIHZpYQo+IFhlbiBndWVzdCBkb21haW4gY29uZmlndXJhdGlvbiBvcHRp b25zIFszXS4KPiAKPiBEcml2ZXIgbGltaXRhdGlvbnM6Cj4gIDEuIE9ubHkgcHJpbWFyeSBwbGFu ZSB3aXRob3V0IGFkZGl0aW9uYWwgcHJvcGVydGllcyBpcyBzdXBwb3J0ZWQuCj4gIDIuIE9ubHkg b25lIHZpZGVvIG1vZGUgc3VwcG9ydGVkIHdoaWNoIHJlc29sdXRpb24gaXMgY29uZmlndXJlZCB2 aWEgWGVuU3RvcmUuCj4gIDMuIEFsbCBDUlRDcyBvcGVyYXRlIGF0IGZpeGVkIGZyZXF1ZW5jeSBv ZiA2MEh6Lgo+IAo+IDEuIEltcGxlbWVudCBYZW4gYnVzIHN0YXRlIG1hY2hpbmUgZm9yIHRoZSBm cm9udGVuZCBkcml2ZXIgYWNjb3JkaW5nIHRvCj4gdGhlIHN0YXRlIGRpYWdyYW0gYW5kIHJlY292 ZXJ5IGZsb3cgZnJvbSBkaXNwbGF5IHBhcmEtdmlydHVhbGl6ZWQKPiBwcm90b2NvbDogeGVuL2lu dGVyZmFjZS9pby9kaXNwbGlmLmguCj4gCj4gMi4gUmVhZCBjb25maWd1cmF0aW9uIHZhbHVlcyBm cm9tIFhlbiBzdG9yZSBhY2NvcmRpbmcKPiB0byB4ZW4vaW50ZXJmYWNlL2lvL2Rpc3BsaWYuaCBw cm90b2NvbDoKPiAgIC0gcmVhZCBjb25uZWN0b3IocykgY29uZmlndXJhdGlvbgo+ICAgLSByZWFk IGJ1ZmZlciBhbGxvY2F0aW9uIG1vZGUgKGJhY2tlbmQvZnJvbnRlbmQpCj4gCj4gMy4gSGFuZGxl IFhlbiBldmVudCBjaGFubmVsczoKPiAgIC0gY3JlYXRlIGZvciBhbGwgY29uZmlndXJlZCBjb25u ZWN0b3JzIGFuZCBwdWJsaXNoCj4gICAgIGNvcnJlc3BvbmRpbmcgcmluZyByZWZlcmVuY2VzIGFu ZCBldmVudCBjaGFubmVscyBpbiBYZW4gc3RvcmUsCj4gICAgIHNvIGJhY2tlbmQgY2FuIGNvbm5l Y3QKPiAgIC0gaW1wbGVtZW50IGV2ZW50IGNoYW5uZWxzIGludGVycnVwdCBoYW5kbGVycwo+ICAg LSBjcmVhdGUgYW5kIGRlc3Ryb3kgZXZlbnQgY2hhbm5lbHMgd2l0aCByZXNwZWN0IHRvIFhlbiBi dXMgc3RhdGUKPiAKPiA0LiBJbXBsZW1lbnQgc2hhcmVkIGJ1ZmZlciBoYW5kbGluZyBhY2NvcmRp bmcgdG8gdGhlCj4gcGFyYS12aXJ0dWFsaXplZCBkaXNwbGF5IGRldmljZSBwcm90b2NvbCBhdCB4 ZW4vaW50ZXJmYWNlL2lvL2Rpc3BsaWYuaDoKPiAgIC0gaGFuZGxlIHBhZ2UgZGlyZWN0b3JpZXMg YWNjb3JkaW5nIHRvIGRpc3BsaWYgcHJvdG9jb2w6Cj4gICAgIC0gYWxsb2NhdGUgYW5kIHNoYXJl IHBhZ2UgZGlyZWN0b3JpZXMKPiAgICAgLSBncmFudCByZWZlcmVuY2VzIHRvIHRoZSByZXF1aXJl ZCBzZXQgb2YgcGFnZXMgZm9yIHRoZQo+ICAgICAgIHBhZ2UgZGlyZWN0b3J5Cj4gICAtIGFsbG9j YXRlIHhlbiBiYWxsbG9vbmVkIHBhZ2VzIHZpYSBYZW4gYmFsbG9vbiBkcml2ZXIKPiAgICAgd2l0 aCBhbGxvY194ZW5iYWxsb29uZWRfcGFnZXMvZnJlZV94ZW5iYWxsb29uZWRfcGFnZXMKPiAgIC0g Z3JhbnQgcmVmZXJlbmNlcyB0byB0aGUgcmVxdWlyZWQgc2V0IG9mIHBhZ2VzIGZvciB0aGUKPiAg ICAgc2hhcmVkIGJ1ZmZlciBpdHNlbGYKPiAgIC0gaW1wbGVtZW50IHBhZ2VzIG1hcC91bm1hcCBm b3IgdGhlIGJ1ZmZlcnMgYWxsb2NhdGVkIGJ5IHRoZQo+ICAgICBiYWNrZW5kIChnbnR0YWJfbWFw X3JlZnMvZ250dGFiX3VubWFwX3JlZnMpCj4gCj4gNS4gSW1wbGVtZW50IGtlcm5lbCBtb2Rlc2V0 aWluZy9jb25uZWN0b3IgaGFuZGxpbmcgdXNpbmcKPiBEUk0gc2ltcGxlIEtNUyBoZWxwZXIgcGlw ZWxpbmU6Cj4gCj4gLSBpbXBsZW1lbnQgS01TIHBhcnQgb2YgdGhlIGRyaXZlciB3aXRoIHRoZSBo ZWxwIG9mIERSTQo+ICAgc2ltcGxlIHBpcGVwbGluZSBoZWxwZXIgd2hpY2ggaXMgcG9zc2libGUg ZHVlIHRvIHRoZSBmYWN0Cj4gICB0aGF0IHRoZSBwYXJhLXZpcnR1YWxpemVkIGRyaXZlciBvbmx5 IHN1cHBvcnRzIGEgc2luZ2xlCj4gICAocHJpbWFyeSkgcGxhbmU6Cj4gICAtIGluaXRpYWxpemUg Y29ubmVjdG9ycyBhY2NvcmRpbmcgdG8gWGVuU3RvcmUgY29uZmlndXJhdGlvbgo+ICAgLSBoYW5k bGUgZnJhbWUgZG9uZSBldmVudHMgZnJvbSB0aGUgYmFja2VuZAo+ICAgLSBjcmVhdGUgYW5kIGRl c3Ryb3kgZnJhbWUgYnVmZmVycyBhbmQgcHJvcGFnYXRlIHRob3NlCj4gICAgIHRvIHRoZSBiYWNr ZW5kCj4gICAtIHByb3BhZ2F0ZSBzZXQvcmVzZXQgbW9kZSBjb25maWd1cmF0aW9uIHRvIHRoZSBi YWNrZW5kIG9uIGRpc3BsYXkKPiAgICAgZW5hYmxlL2Rpc2FibGUgY2FsbGJhY2tzCj4gICAtIHNl bmQgcGFnZSBmbGlwIHJlcXVlc3QgdG8gdGhlIGJhY2tlbmQgYW5kIGltcGxlbWVudCBsb2dpYyBm b3IKPiAgICAgcmVwb3J0aW5nIGJhY2tlbmQgSU8gZXJyb3JzIG9uIHByZXBhcmUgZmIgY2FsbGJh Y2sKPiAKPiAtIGltcGxlbWVudCB2aXJ0dWFsIGNvbm5lY3RvciBoYW5kbGluZzoKPiAgIC0gc3Vw cG9ydCBvbmx5IHBpeGVsIGZvcm1hdHMgc3VpdGFibGUgZm9yIHNpbmdsZSBwbGFuZSBtb2Rlcwo+ ICAgLSBtYWtlIHN1cmUgdGhlIGNvbm5lY3RvciBpcyBhbHdheXMgY29ubmVjdGVkCj4gICAtIHN1 cHBvcnQgYSBzaW5nbGUgdmlkZW8gbW9kZSBhcyBwZXIgcGFyYS12aXJ0dWFsaXplZCBkcml2ZXIK PiAgICAgY29uZmlndXJhdGlvbgo+IAo+IDYuIEltcGxlbWVudCBHRU0gaGFuZGxpbmcgZGVwZW5k aW5nIG9uIGRyaXZlciBtb2RlIG9mIG9wZXJhdGlvbjoKPiBkZXBlbmRpbmcgb24gdGhlIHJlcXVp cmVtZW50cyBmb3IgdGhlIHBhcmEtdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIG5hbWVseQo+IHJl cXVpcmVtZW50cyBkaWN0YXRlZCBieSB0aGUgYWNjb21wYW55aW5nIERSTS8odilHUFUgZHJpdmVy cyBydW5uaW5nIGluIGJvdGgKPiBob3N0IGFuZCBndWVzdCBlbnZpcm9ubWVudHMsIG51bWJlciBv ZiBvcGVyYXRpbmcgbW9kZXMgb2YgcGFyYS12aXJ0dWFsaXplZAo+IGRpc3BsYXkgZHJpdmVyIGFy ZSBzdXBwb3J0ZWQ6Cj4gIC0gZGlzcGxheSBidWZmZXJzIGNhbiBiZSBhbGxvY2F0ZWQgYnkgZWl0 aGVyIGZyb250ZW5kIGRyaXZlciBvciBiYWNrZW5kCj4gIC0gZGlzcGxheSBidWZmZXJzIGNhbiBi ZSBhbGxvY2F0ZWQgdG8gYmUgY29udGlndW91cyBpbiBtZW1vcnkgb3Igbm90Cj4gCj4gTm90ZSEg RnJvbnRlbmQgZHJpdmVyIGl0c2VsZiBoYXMgbm8gZGVwZW5kZW5jeSBvbiBjb250aWd1b3VzIG1l bW9yeSBmb3IKPiBpdHMgb3BlcmF0aW9uLgo+IAo+IDYuMS4gQnVmZmVycyBhbGxvY2F0ZWQgYnkg dGhlIGZyb250ZW5kIGRyaXZlci4KPiAKPiBUaGUgYmVsb3cgbW9kZXMgb2Ygb3BlcmF0aW9uIGFy ZSBjb25maWd1cmVkIGF0IGNvbXBpbGUtdGltZSB2aWEKPiBmcm9udGVuZCBkcml2ZXIncyBrZXJu ZWwgY29uZmlndXJhdGlvbi4KPiAKPiA2LjEuMS4gRnJvbnQgZHJpdmVyIGNvbmZpZ3VyZWQgdG8g dXNlIEdFTSBDTUEgaGVscGVycwo+ICAgICAgVGhpcyB1c2UtY2FzZSBpcyB1c2VmdWwgd2hlbiB1 c2VkIHdpdGggYWNjb21wYW55aW5nIERSTS92R1BVIGRyaXZlciBpbgo+ICAgICAgZ3Vlc3QgZG9t YWluIHdoaWNoIHdhcyBkZXNpZ25lZCB0byBvbmx5IHdvcmsgd2l0aCBjb250aWd1b3VzIGJ1ZmZl cnMsCj4gICAgICBlLmcuIERSTSBkcml2ZXIgYmFzZWQgb24gR0VNIENNQSBoZWxwZXJzOiBzdWNo IGRyaXZlcnMgY2FuIG9ubHkgaW1wb3J0Cj4gICAgICBjb250aWd1b3VzIFBSSU1FIGJ1ZmZlcnMs IHRodXMgcmVxdWlyaW5nIGZyb250ZW5kIGRyaXZlciB0byBwcm92aWRlCj4gICAgICBzdWNoLiBJ biBvcmRlciB0byBpbXBsZW1lbnQgdGhpcyBtb2RlIG9mIG9wZXJhdGlvbiBwYXJhLXZpcnR1YWxp emVkCj4gICAgICBmcm9udGVuZCBkcml2ZXIgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gdXNlIEdFTSBD TUEgaGVscGVycy4KPiAKPiA2LjEuMi4gRnJvbnQgZHJpdmVyIGRvZXNuJ3QgdXNlIEdFTSBDTUEK PiAgICAgIElmIGFjY29tcGFueWluZyBkcml2ZXJzIGNhbiBjb3BlIHdpdGggbm9uLWNvbnRpZ3Vv dXMgbWVtb3J5IHRoZW4sIHRvCj4gICAgICBsb3dlciBwcmVzc3VyZSBvbiBDTUEgc3Vic3lzdGVt IG9mIHRoZSBrZXJuZWwsIGRyaXZlciBjYW4gYWxsb2NhdGUKPiAgICAgIGJ1ZmZlcnMgZnJvbSBz eXN0ZW0gbWVtb3J5Lgo+IAo+IE5vdGUhIElmIHVzZWQgd2l0aCBhY2NvbXBhbnlpbmcgRFJNLyh2 KUdQVSBkcml2ZXJzIHRoaXMgbW9kZSBvZiBvcGVyYXRpb24KPiBtYXkgcmVxdWlyZSBJT01NVSBz dXBwb3J0IG9uIHRoZSBwbGF0Zm9ybSwgc28gYWNjb21wYW55aW5nIERSTS92R1BVCj4gaGFyZHdh cmUgY2FuIHN0aWxsIHJlYWNoIGRpc3BsYXkgYnVmZmVyIG1lbW9yeSB3aGlsZSBpbXBvcnRpbmcg UFJJTUUKPiBidWZmZXJzIGZyb20gdGhlIGZyb250ZW5kIGRyaXZlci4KPiAKPiA2LjIuIEJ1ZmZl cnMgYWxsb2NhdGVkIGJ5IHRoZSBiYWNrZW5kCj4gCj4gVGhpcyBtb2RlIG9mIG9wZXJhdGlvbiBp cyBydW4tdGltZSBjb25maWd1cmVkIHZpYSBndWVzdCBkb21haW4gY29uZmlndXJhdGlvbgo+IHRo cm91Z2ggWGVuU3RvcmUgZW50cmllcy4KPiAKPiBGb3Igc3lzdGVtcyB3aGljaCBkbyBub3QgcHJv dmlkZSBJT01NVSBzdXBwb3J0LCBidXQgaGF2aW5nIHNwZWNpZmljCj4gcmVxdWlyZW1lbnRzIGZv ciBkaXNwbGF5IGJ1ZmZlcnMgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgc3VjaCBidWZmZXJz Cj4gYXQgYmFja2VuZCBzaWRlIGFuZCBzaGFyZSB0aG9zZSB3aXRoIHRoZSBmcm9udGVuZC4KPiBG b3IgZXhhbXBsZSwgaWYgaG9zdCBkb21haW4gaXMgMToxIG1hcHBlZCBhbmQgaGFzIERSTS9HUFUg aGFyZHdhcmUgZXhwZWN0aW5nCj4gcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeSwgdGhpcyBh bGxvd3MgaW1wbGVtZW50aW5nIHplcm8tY29weWluZwo+IHVzZS1jYXNlcy4KPiAKPiBOb3RlLCB3 aGlsZSB1c2luZyB0aGlzIHNjZW5hcmlvIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlIGNvbnNpZGVy ZWQ6Cj4gICBhKSBJZiBndWVzdCBkb21haW4gZGllcyB0aGVuIHBhZ2VzL2dyYW50cyByZWNlaXZl ZCBmcm9tIHRoZSBiYWNrZW5kCj4gICAgICBjYW5ub3QgYmUgY2xhaW1lZCBiYWNrCj4gICBiKSBN aXNiZWhhdmluZyBndWVzdCBtYXkgc2VuZCB0b28gbWFueSByZXF1ZXN0cyB0byB0aGUKPiAgICAg IGJhY2tlbmQgZXhoYXVzdGluZyBpdHMgZ3JhbnQgcmVmZXJlbmNlcyBhbmQgbWVtb3J5Cj4gICAg ICAoY29uc2lkZXIgdGhpcyBmcm9tIHNlY3VyaXR5IFBPVikuCj4gCj4gTm90ZSEgQ29uZmlndXJh dGlvbiBvcHRpb25zIDEuMSAoY29udGlndW91cyBkaXNwbGF5IGJ1ZmZlcnMpIGFuZCAyIChiYWNr ZW5kCj4gYWxsb2NhdGVkIGJ1ZmZlcnMpIGFyZSBub3Qgc3VwcG9ydGVkIGF0IHRoZSBzYW1lIHRp bWUuCj4gCj4gNy4gSGFuZGxlIGNvbW11bmljYXRpb24gd2l0aCB0aGUgYmFja2VuZDoKPiAgLSBz ZW5kIHJlcXVlc3RzIGFuZCB3YWl0IGZvciB0aGUgcmVzcG9uc2VzIGFjY29yZGluZwo+ICAgIHRv IHRoZSBkaXNwbGlmIHByb3RvY29sCj4gIC0gc2VyaWFsaXplIGFjY2VzcyB0byB0aGUgY29tbXVu aWNhdGlvbiBjaGFubmVsCj4gIC0gdGltZS1vdXQgdXNlZCBmb3IgYmFja2VuZCBjb21tdW5pY2F0 aW9uIGlzIHNldCB0byAzMDAwIG1zCj4gIC0gbWFuYWdlIGRpc3BsYXkgYnVmZmVycyBzaGFyZWQg d2l0aCB0aGUgYmFja2VuZAo+IAo+IFsxXSBodHRwczovL2dpdGh1Yi5jb20veGVuLXRyb29wcy9k aXNwbF9iZQo+IFsyXSBodHRwczovL2dpdGh1Yi5jb20veGVuLXRyb29wcy9saWJ4ZW5iZQo+IFsz XSBodHRwczovL3hlbmJpdHMueGVuLm9yZy9naXR3ZWIvP3A9eGVuLmdpdDthPWJsb2I7Zj1kb2Nz L21hbi94bC5jZmcucG9kLjUuaW47aD1hNjk5MzY3Nzc5ZTJhZTEyMTJmZjhmNjM4ZWZmMDIwNmVj MWExY2M5O2hiPXJlZnMvaGVhZHMvbWFzdGVyI2wxMjU3Cj4gCj4gU2lnbmVkLW9mZi1ieTogT2xl a3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtzYW5kcl9hbmRydXNoY2hlbmtvQGVwYW0uY29tPgo+ IFJldmlld2VkLWJ5OiBCb3JpcyBPc3Ryb3Zza3kgPGJvcmlzLm9zdHJvdnNreUBvcmFjbGUuY29t PgoKa21zIHNpZGUgbG9va3MgZ29vZCBub3cgdG9vLgoKUmV2aWV3ZWQtYnk6IERhbmllbCBWZXR0 ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+Cgo+IC0tLQo+ICBEb2N1bWVudGF0aW9uL2dwdS9k cml2ZXJzLnJzdCAgICAgICAgICAgICAgIHwgICAxICsKPiAgRG9jdW1lbnRhdGlvbi9ncHUveGVu LWZyb250LnJzdCAgICAgICAgICAgICB8ICA0MyArKwo+ICBkcml2ZXJzL2dwdS9kcm0vS2NvbmZp ZyAgICAgICAgICAgICAgICAgICAgIHwgICAyICsKPiAgZHJpdmVycy9ncHUvZHJtL01ha2VmaWxl ICAgICAgICAgICAgICAgICAgICB8ICAgMSArCj4gIGRyaXZlcnMvZ3B1L2RybS94ZW4vS2NvbmZp ZyAgICAgICAgICAgICAgICAgfCAgMzAgKwo+ICBkcml2ZXJzL2dwdS9kcm0veGVuL01ha2VmaWxl ICAgICAgICAgICAgICAgIHwgIDE2ICsKPiAgZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zy b250LmMgICAgICAgICB8IDg4MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIGRyaXZl cnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udC5oICAgICAgICAgfCAxODkgKysrKysrCj4gIGRy aXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9jZmcuYyAgICAgfCAgNzcgKysrCj4gIGRy aXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9jZmcuaCAgICAgfCAgMzcgKysKPiAgZHJp dmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2Nvbm4uYyAgICB8IDExNSArKysrCj4gIGRy aXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9jb25uLmggICAgfCAgMjcgKwo+ICBkcml2 ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZXZ0Y2hubC5jIHwgMzgyICsrKysrKysrKysr Kwo+ICBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZXZ0Y2hubC5oIHwgIDgxICsr Kwo+ICBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtLmMgICAgIHwgMzA5ICsr KysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5oICAgICB8 ICA0MSArKwo+ICBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtX2NtYS5jIHwg IDc4ICsrKwo+ICBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfa21zLmMgICAgIHwg MzcxICsrKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfa21z LmggICAgIHwgIDI3ICsKPiAgZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X3NoYnVm LmMgICB8IDQzMiArKysrKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1f ZnJvbnRfc2hidWYuaCAgIHwgIDcyICsrKwo+ICAyMSBmaWxlcyBjaGFuZ2VkLCAzMjExIGluc2Vy dGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IERvY3VtZW50YXRpb24vZ3B1L3hlbi1mcm9u dC5yc3QKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94ZW4vS2NvbmZpZwo+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hlbi9NYWtlZmlsZQo+ICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250LmMKPiAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udC5oCj4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfY2ZnLmMK PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9j ZmcuaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zy b250X2Nvbm4uYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5f ZHJtX2Zyb250X2Nvbm4uaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hl bi94ZW5fZHJtX2Zyb250X2V2dGNobmwuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2V2dGNobmwuaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5jCj4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtLmgKPiAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW1fY21hLmMKPiAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9rbXMu Ywo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250 X2ttcy5oCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1f ZnJvbnRfc2hidWYuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hlbi94 ZW5fZHJtX2Zyb250X3NoYnVmLmgKPiAKPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ncHUv ZHJpdmVycy5yc3QgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcml2ZXJzLnJzdAo+IGluZGV4IGU4Yzg0 NDE5YTJhMS4uZDNhYjZhYmFlODM4IDEwMDY0NAo+IC0tLSBhL0RvY3VtZW50YXRpb24vZ3B1L2Ry aXZlcnMucnN0Cj4gKysrIGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJpdmVycy5yc3QKPiBAQCAtMTIs NiArMTIsNyBAQCBHUFUgRHJpdmVyIERvY3VtZW50YXRpb24KPiAgICAgdHZlMjAwCj4gICAgIHZj NAo+ICAgICBicmlkZ2UvZHctaGRtaQo+ICsgICB4ZW4tZnJvbnQKPiAgCj4gIC4uIG9ubHk6OiAg c3VicHJvamVjdCBhbmQgaHRtbAo+ICAKPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ncHUv eGVuLWZyb250LnJzdCBiL0RvY3VtZW50YXRpb24vZ3B1L3hlbi1mcm9udC5yc3QKPiBuZXcgZmls ZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uODE4OGUwM2M5ZDIzCj4gLS0tIC9k ZXYvbnVsbAo+ICsrKyBiL0RvY3VtZW50YXRpb24vZ3B1L3hlbi1mcm9udC5yc3QKPiBAQCAtMCww ICsxLDQzIEBACj4gKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+ICtYZW4g cGFyYS12aXJ0dWFsaXplZCBmcm9udGVuZCBkcml2ZXIKPiArPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Cj4gKwo+ICtUaGlzIGZyb250ZW5kIGRyaXZlciBpbXBsZW1lbnRzIFhl biBwYXJhLXZpcnR1YWxpemVkIGRpc3BsYXkKPiArYWNjb3JkaW5nIHRvIHRoZSBkaXNwbGF5IHBy b3RvY29sIGRlc2NyaWJlZCBhdAo+ICtpbmNsdWRlL3hlbi9pbnRlcmZhY2UvaW8vZGlzcGxpZi5o Cj4gKwo+ICtEcml2ZXIgbW9kZXMgb2Ygb3BlcmF0aW9uIGluIHRlcm1zIG9mIGRpc3BsYXkgYnVm ZmVycyB1c2VkCj4gKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KPiArCj4gKy4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0veGVu L3hlbl9kcm1fZnJvbnQuaAo+ICsgICA6ZG9jOiBEcml2ZXIgbW9kZXMgb2Ygb3BlcmF0aW9uIGlu IHRlcm1zIG9mIGRpc3BsYXkgYnVmZmVycyB1c2VkCj4gKwo+ICtCdWZmZXJzIGFsbG9jYXRlZCBi eSB0aGUgZnJvbnRlbmQgZHJpdmVyCj4gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KPiArCj4gKy4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9k cm1fZnJvbnQuaAo+ICsgICA6ZG9jOiBCdWZmZXJzIGFsbG9jYXRlZCBieSB0aGUgZnJvbnRlbmQg ZHJpdmVyCj4gKwo+ICtXaXRoIEdFTSBDTUEgaGVscGVycwo+ICt+fn5+fn5+fn5+fn5+fn5+fn5+ fgo+ICsKPiArLi4ga2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9u dC5oCj4gKyAgIDpkb2M6IFdpdGggR0VNIENNQSBoZWxwZXJzCj4gKwo+ICtXaXRob3V0IEdFTSBD TUEgaGVscGVycwo+ICt+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgo+ICsKPiArLi4ga2VybmVsLWRv Yzo6IGRyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udC5oCj4gKyAgIDpkb2M6IFdpdGhv dXQgR0VNIENNQSBoZWxwZXJzCj4gKwo+ICtCdWZmZXJzIGFsbG9jYXRlZCBieSB0aGUgYmFja2Vu ZAo+ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICsKPiArLi4ga2VybmVsLWRv Yzo6IGRyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udC5oCj4gKyAgIDpkb2M6IEJ1ZmZl cnMgYWxsb2NhdGVkIGJ5IHRoZSBiYWNrZW5kCj4gKwo+ICtEcml2ZXIgbGltaXRhdGlvbnMKPiAr PT09PT09PT09PT09PT09PT09Cj4gKwo+ICsuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJt L3hlbi94ZW5fZHJtX2Zyb250LmgKPiArICAgOmRvYzogRHJpdmVyIGxpbWl0YXRpb25zCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tjb25m aWcKPiBpbmRleCBkZWVlZmE3YTE3NzMuLjc1NzgyNWFjNjBkZiAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCj4gQEAg LTI4OSw2ICsyODksOCBAQCBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9wbDExMS9LY29uZmlnIgo+ ICAKPiAgc291cmNlICJkcml2ZXJzL2dwdS9kcm0vdHZlMjAwL0tjb25maWciCj4gIAo+ICtzb3Vy Y2UgImRyaXZlcnMvZ3B1L2RybS94ZW4vS2NvbmZpZyIKPiArCj4gICMgS2VlcCBsZWdhY3kgZHJp dmVycyBsYXN0Cj4gIAo+ICBtZW51Y29uZmlnIERSTV9MRUdBQ1kKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCj4gaW5kZXgg NTAwOTNmZjQ0NzliLi45ZDY2NjU3ZWExMTcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCj4gQEAgLTEwMywzICsx MDMsNCBAQCBvYmotJChDT05GSUdfRFJNX01YU0ZCKQkrPSBteHNmYi8KPiAgb2JqLSQoQ09ORklH X0RSTV9USU5ZRFJNKSArPSB0aW55ZHJtLwo+ICBvYmotJChDT05GSUdfRFJNX1BMMTExKSArPSBw bDExMS8KPiAgb2JqLSQoQ09ORklHX0RSTV9UVkUyMDApICs9IHR2ZTIwMC8KPiArb2JqLSQoQ09O RklHX0RSTV9YRU4pICs9IHhlbi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlbi9L Y29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL3hlbi9LY29uZmlnCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjRmNGFiYzkxZjNiNgo+IC0tLSAvZGV2L251bGwKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0veGVuL0tjb25maWcKPiBAQCAtMCwwICsxLDMwIEBACj4gK2Nv bmZpZyBEUk1fWEVOCj4gKwlib29sICJEUk0gU3VwcG9ydCBmb3IgWGVuIGd1ZXN0IE9TIgo+ICsJ ZGVwZW5kcyBvbiBYRU4KPiArCWhlbHAKPiArCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSB3 YW50IHRvIGVuYWJsZSBEUk0gc3VwcG9ydAo+ICsJICBmb3IgWGVuLgo+ICsKPiArY29uZmlnIERS TV9YRU5fRlJPTlRFTkQKPiArCXRyaXN0YXRlICJQYXJhLXZpcnR1YWxpemVkIGZyb250ZW5kIGRy aXZlciBmb3IgWGVuIGd1ZXN0IE9TIgo+ICsJZGVwZW5kcyBvbiBEUk1fWEVOCj4gKwlkZXBlbmRz IG9uIERSTQo+ICsJc2VsZWN0IERSTV9LTVNfSEVMUEVSCj4gKwlzZWxlY3QgVklERU9NT0RFX0hF TFBFUlMKPiArCXNlbGVjdCBYRU5fWEVOQlVTX0ZST05URU5ECj4gKwloZWxwCj4gKwkgIENob29z ZSB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBlbmFibGUgYSBwYXJhLXZpcnR1YWxpemVkCj4g KwkgIGZyb250ZW5kIERSTS9LTVMgZHJpdmVyIGZvciBYZW4gZ3Vlc3QgT1Nlcy4KPiArCj4gK2Nv bmZpZyBEUk1fWEVOX0ZST05URU5EX0NNQQo+ICsJYm9vbCAiVXNlIERSTSBDTUEgdG8gYWxsb2Nh dGUgZHVtYiBidWZmZXJzIgo+ICsJZGVwZW5kcyBvbiBEUk1fWEVOX0ZST05URU5ECj4gKwlzZWxl Y3QgRFJNX0tNU19DTUFfSEVMUEVSCj4gKwlzZWxlY3QgRFJNX0dFTV9DTUFfSEVMUEVSCj4gKwlo ZWxwCj4gKwkgIFVzZSBEUk0gQ01BIGhlbHBlcnMgdG8gYWxsb2NhdGUgZGlzcGxheSBidWZmZXJz Lgo+ICsJICBUaGlzIGlzIHVzZWZ1bCBmb3IgdGhlIHVzZS1jYXNlcyB3aGVuIGd1ZXN0IGRyaXZl ciBuZWVkcyB0bwo+ICsJICBzaGFyZSBvciBleHBvcnQgYnVmZmVycyB0byBvdGhlciBkcml2ZXJz IHdoaWNoIG9ubHkgZXhwZWN0Cj4gKwkgIGNvbnRpZ3VvdXMgYnVmZmVycy4KPiArCSAgTm90ZTog aW4gdGhpcyBtb2RlIGRyaXZlciBjYW5ub3QgdXNlIGJ1ZmZlcnMgYWxsb2NhdGVkCj4gKwkgIGJ5 IHRoZSBiYWNrZW5kLgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGVuL01ha2VmaWxl IGIvZHJpdmVycy9ncHUvZHJtL3hlbi9NYWtlZmlsZQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggMDAwMDAwMDAwMDAwLi4zNTI3MzBkYzZjMTMKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL3hlbi9NYWtlZmlsZQo+IEBAIC0wLDAgKzEsMTYgQEAKPiArIyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBNSVQKPiArCj4gK2RybV94ZW5fZnJvbnQt b2JqcyA6PSB4ZW5fZHJtX2Zyb250Lm8gXAo+ICsJCSAgICAgIHhlbl9kcm1fZnJvbnRfa21zLm8g XAo+ICsJCSAgICAgIHhlbl9kcm1fZnJvbnRfY29ubi5vIFwKPiArCQkgICAgICB4ZW5fZHJtX2Zy b250X2V2dGNobmwubyBcCj4gKwkJICAgICAgeGVuX2RybV9mcm9udF9zaGJ1Zi5vIFwKPiArCQkg ICAgICB4ZW5fZHJtX2Zyb250X2NmZy5vCj4gKwo+ICtpZmVxICgkKENPTkZJR19EUk1fWEVOX0ZS T05URU5EX0NNQSkseSkKPiArCWRybV94ZW5fZnJvbnQtb2JqcyArPSB4ZW5fZHJtX2Zyb250X2dl bV9jbWEubwo+ICtlbHNlCj4gKwlkcm1feGVuX2Zyb250LW9ianMgKz0geGVuX2RybV9mcm9udF9n ZW0ubwo+ICtlbmRpZgo+ICsKPiArb2JqLSQoQ09ORklHX0RSTV9YRU5fRlJPTlRFTkQpICs9IGRy bV94ZW5fZnJvbnQubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1f ZnJvbnQuYyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udC5jCj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmIwODgxN2U1ZTM1Ywo+IC0tLSAvZGV2 L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnQuYwo+IEBAIC0w LDAgKzEsODgwIEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1J VAo+ICsKPiArLyoKPiArICogIFhlbiBwYXJhLXZpcnR1YWwgRFJNIGRldmljZQo+ICsgKgo+ICsg KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBFUEFNIFN5c3RlbXMgSW5jLgo+ICsgKgo+ICsgKiBB dXRob3I6IE9sZWtzYW5kciBBbmRydXNoY2hlbmtvIDxvbGVrc2FuZHJfYW5kcnVzaGNoZW5rb0Bl cGFtLmNvbT4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiArI2luY2x1ZGUg PGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBl ci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZ2Vt X2NtYV9oZWxwZXIuaD4KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KPiArCj4g KyNpbmNsdWRlIDx4ZW4vcGxhdGZvcm1fcGNpLmg+Cj4gKyNpbmNsdWRlIDx4ZW4veGVuLmg+Cj4g KyNpbmNsdWRlIDx4ZW4veGVuYnVzLmg+Cj4gKwo+ICsjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9p by9kaXNwbGlmLmg+Cj4gKwo+ICsjaW5jbHVkZSAieGVuX2RybV9mcm9udC5oIgo+ICsjaW5jbHVk ZSAieGVuX2RybV9mcm9udF9jZmcuaCIKPiArI2luY2x1ZGUgInhlbl9kcm1fZnJvbnRfZXZ0Y2hu bC5oIgo+ICsjaW5jbHVkZSAieGVuX2RybV9mcm9udF9nZW0uaCIKPiArI2luY2x1ZGUgInhlbl9k cm1fZnJvbnRfa21zLmgiCj4gKyNpbmNsdWRlICJ4ZW5fZHJtX2Zyb250X3NoYnVmLmgiCj4gKwo+ ICtzdHJ1Y3QgeGVuX2RybV9mcm9udF9kYnVmIHsKPiArCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsK PiArCXVpbnQ2NF90IGRidWZfY29va2llOwo+ICsJdWludDY0X3QgZmJfY29va2llOwo+ICsJc3Ry dWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgKnNoYnVmOwo+ICt9Owo+ICsKPiArc3RhdGljIGludCBk YnVmX2FkZF90b19saXN0KHN0cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2luZm8sCj4g KwkJc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgKnNoYnVmLCB1aW50NjRfdCBkYnVmX2Nvb2tp ZSkKPiArewo+ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfZGJ1ZiAqZGJ1ZjsKPiArCj4gKwlkYnVm ID0ga3phbGxvYyhzaXplb2YoKmRidWYpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghZGJ1ZikKPiAr CQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlkYnVmLT5kYnVmX2Nvb2tpZSA9IGRidWZfY29va2ll Owo+ICsJZGJ1Zi0+c2hidWYgPSBzaGJ1ZjsKPiArCWxpc3RfYWRkKCZkYnVmLT5saXN0LCAmZnJv bnRfaW5mby0+ZGJ1Zl9saXN0KTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3Ry dWN0IHhlbl9kcm1fZnJvbnRfZGJ1ZiAqZGJ1Zl9nZXQoc3RydWN0IGxpc3RfaGVhZCAqZGJ1Zl9s aXN0LAo+ICsJCXVpbnQ2NF90IGRidWZfY29va2llKQo+ICt7Cj4gKwlzdHJ1Y3QgeGVuX2RybV9m cm9udF9kYnVmICpidWYsICpxOwo+ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShidWYs IHEsIGRidWZfbGlzdCwgbGlzdCkKPiArCQlpZiAoYnVmLT5kYnVmX2Nvb2tpZSA9PSBkYnVmX2Nv b2tpZSkKPiArCQkJcmV0dXJuIGJ1ZjsKPiArCj4gKwlyZXR1cm4gTlVMTDsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgZGJ1Zl9mbHVzaF9mYihzdHJ1Y3QgbGlzdF9oZWFkICpkYnVmX2xpc3QsIHVp bnQ2NF90IGZiX2Nvb2tpZSkKPiArewo+ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfZGJ1ZiAqYnVm LCAqcTsKPiArCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYnVmLCBxLCBkYnVmX2xpc3Qs IGxpc3QpCj4gKwkJaWYgKGJ1Zi0+ZmJfY29va2llID09IGZiX2Nvb2tpZSkKPiArCQkJeGVuX2Ry bV9mcm9udF9zaGJ1Zl9mbHVzaChidWYtPnNoYnVmKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQg ZGJ1Zl9mcmVlKHN0cnVjdCBsaXN0X2hlYWQgKmRidWZfbGlzdCwgdWludDY0X3QgZGJ1Zl9jb29r aWUpCj4gK3sKPiArCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2RidWYgKmJ1ZiwgKnE7Cj4gKwo+ICsJ bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJ1ZiwgcSwgZGJ1Zl9saXN0LCBsaXN0KQo+ICsJCWlm IChidWYtPmRidWZfY29va2llID09IGRidWZfY29va2llKSB7Cj4gKwkJCWxpc3RfZGVsKCZidWYt Pmxpc3QpOwo+ICsJCQl4ZW5fZHJtX2Zyb250X3NoYnVmX3VubWFwKGJ1Zi0+c2hidWYpOwo+ICsJ CQl4ZW5fZHJtX2Zyb250X3NoYnVmX2ZyZWUoYnVmLT5zaGJ1Zik7Cj4gKwkJCWtmcmVlKGJ1Zik7 Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZGJ1Zl9mcmVlX2Fs bChzdHJ1Y3QgbGlzdF9oZWFkICpkYnVmX2xpc3QpCj4gK3sKPiArCXN0cnVjdCB4ZW5fZHJtX2Zy b250X2RidWYgKmJ1ZiwgKnE7Cj4gKwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJ1Ziwg cSwgZGJ1Zl9saXN0LCBsaXN0KSB7Cj4gKwkJbGlzdF9kZWwoJmJ1Zi0+bGlzdCk7Cj4gKwkJeGVu X2RybV9mcm9udF9zaGJ1Zl91bm1hcChidWYtPnNoYnVmKTsKPiArCQl4ZW5fZHJtX2Zyb250X3No YnVmX2ZyZWUoYnVmLT5zaGJ1Zik7Cj4gKwkJa2ZyZWUoYnVmKTsKPiArCX0KPiArfQo+ICsKPiAr c3RhdGljIHN0cnVjdCB4ZW5kaXNwbF9yZXEgKmJlX3ByZXBhcmVfcmVxKAo+ICsJCXN0cnVjdCB4 ZW5fZHJtX2Zyb250X2V2dGNobmwgKmV2dGNobmwsIHVpbnQ4X3Qgb3BlcmF0aW9uKQo+ICt7Cj4g KwlzdHJ1Y3QgeGVuZGlzcGxfcmVxICpyZXE7Cj4gKwo+ICsJcmVxID0gUklOR19HRVRfUkVRVUVT VCgmZXZ0Y2hubC0+dS5yZXEucmluZywKPiArCQkJZXZ0Y2hubC0+dS5yZXEucmluZy5yZXFfcHJv ZF9wdnQpOwo+ICsJcmVxLT5vcGVyYXRpb24gPSBvcGVyYXRpb247Cj4gKwlyZXEtPmlkID0gZXZ0 Y2hubC0+ZXZ0X25leHRfaWQrKzsKPiArCWV2dGNobmwtPmV2dF9pZCA9IHJlcS0+aWQ7Cj4gKwly ZXR1cm4gcmVxOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGJlX3N0cmVhbV9kb19pbyhzdHJ1Y3Qg eGVuX2RybV9mcm9udF9ldnRjaG5sICpldnRjaG5sLAo+ICsJCXN0cnVjdCB4ZW5kaXNwbF9yZXEg KnJlcSkKPiArewo+ICsJcmVpbml0X2NvbXBsZXRpb24oJmV2dGNobmwtPnUucmVxLmNvbXBsZXRp b24pOwo+ICsJaWYgKHVubGlrZWx5KGV2dGNobmwtPnN0YXRlICE9IEVWVENITkxfU1RBVEVfQ09O TkVDVEVEKSkKPiArCQlyZXR1cm4gLUVJTzsKPiArCj4gKwl4ZW5fZHJtX2Zyb250X2V2dGNobmxf Zmx1c2goZXZ0Y2hubCk7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBiZV9z dHJlYW1fd2FpdF9pbyhzdHJ1Y3QgeGVuX2RybV9mcm9udF9ldnRjaG5sICpldnRjaG5sKQo+ICt7 Cj4gKwlpZiAod2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZldnRjaG5sLT51LnJlcS5jb21w bGV0aW9uLAo+ICsJCQltc2Vjc190b19qaWZmaWVzKFhFTl9EUk1fRlJPTlRfV0FJVF9CQUNLX01T KSkgPD0gMCkKPiArCQlyZXR1cm4gLUVUSU1FRE9VVDsKPiArCj4gKwlyZXR1cm4gZXZ0Y2hubC0+ dS5yZXEucmVzcF9zdGF0dXM7Cj4gK30KPiArCj4gK2ludCB4ZW5fZHJtX2Zyb250X21vZGVfc2V0 KHN0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9waXBlbGluZSAqcGlwZWxpbmUsCj4gKwkJdWludDMy X3QgeCwgdWludDMyX3QgeSwgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwKPiArCQl1 aW50MzJfdCBicHAsIHVpbnQ2NF90IGZiX2Nvb2tpZSkKPiArewo+ICsJc3RydWN0IHhlbl9kcm1f ZnJvbnRfZXZ0Y2hubCAqZXZ0Y2hubDsKPiArCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZy b250X2luZm87Cj4gKwlzdHJ1Y3QgeGVuZGlzcGxfcmVxICpyZXE7Cj4gKwl1bnNpZ25lZCBsb25n IGZsYWdzOwo+ICsJaW50IHJldDsKPiArCj4gKwlmcm9udF9pbmZvID0gcGlwZWxpbmUtPmRybV9p bmZvLT5mcm9udF9pbmZvOwo+ICsJZXZ0Y2hubCA9ICZmcm9udF9pbmZvLT5ldnRfcGFpcnNbcGlw ZWxpbmUtPmluZGV4XS5yZXE7Cj4gKwlpZiAodW5saWtlbHkoIWV2dGNobmwpKQo+ICsJCXJldHVy biAtRUlPOwo+ICsKPiArCW11dGV4X2xvY2soJmV2dGNobmwtPnUucmVxLnJlcV9pb19sb2NrKTsK PiArCj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmZnJvbnRfaW5mby0+aW9fbG9jaywgZmxhZ3MpOwo+ ICsJcmVxID0gYmVfcHJlcGFyZV9yZXEoZXZ0Y2hubCwgWEVORElTUExfT1BfU0VUX0NPTkZJRyk7 Cj4gKwlyZXEtPm9wLnNldF9jb25maWcueCA9IHg7Cj4gKwlyZXEtPm9wLnNldF9jb25maWcueSA9 IHk7Cj4gKwlyZXEtPm9wLnNldF9jb25maWcud2lkdGggPSB3aWR0aDsKPiArCXJlcS0+b3Auc2V0 X2NvbmZpZy5oZWlnaHQgPSBoZWlnaHQ7Cj4gKwlyZXEtPm9wLnNldF9jb25maWcuYnBwID0gYnBw Owo+ICsJcmVxLT5vcC5zZXRfY29uZmlnLmZiX2Nvb2tpZSA9IGZiX2Nvb2tpZTsKPiArCj4gKwly ZXQgPSBiZV9zdHJlYW1fZG9faW8oZXZ0Y2hubCwgcmVxKTsKPiArCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJmZyb250X2luZm8tPmlvX2xvY2ssIGZsYWdzKTsKPiArCj4gKwlpZiAocmV0ID09IDAp Cj4gKwkJcmV0ID0gYmVfc3RyZWFtX3dhaXRfaW8oZXZ0Y2hubCk7Cj4gKwo+ICsJbXV0ZXhfdW5s b2NrKCZldnRjaG5sLT51LnJlcS5yZXFfaW9fbG9jayk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IGJlX2RidWZfY3JlYXRlX2ludChzdHJ1Y3QgeGVuX2RybV9mcm9udF9p bmZvICpmcm9udF9pbmZvLAo+ICsJCXVpbnQ2NF90IGRidWZfY29va2llLCB1aW50MzJfdCB3aWR0 aCwgdWludDMyX3QgaGVpZ2h0LAo+ICsJCXVpbnQzMl90IGJwcCwgdWludDY0X3Qgc2l6ZSwgc3Ry dWN0IHBhZ2UgKipwYWdlcywKPiArCQlzdHJ1Y3Qgc2dfdGFibGUgKnNndCkKPiArewo+ICsJc3Ry dWN0IHhlbl9kcm1fZnJvbnRfZXZ0Y2hubCAqZXZ0Y2hubDsKPiArCXN0cnVjdCB4ZW5fZHJtX2Zy b250X3NoYnVmICpzaGJ1ZjsKPiArCXN0cnVjdCB4ZW5kaXNwbF9yZXEgKnJlcTsKPiArCXN0cnVj dCB4ZW5fZHJtX2Zyb250X3NoYnVmX2NmZyBidWZfY2ZnOwo+ICsJdW5zaWduZWQgbG9uZyBmbGFn czsKPiArCWludCByZXQ7Cj4gKwo+ICsJZXZ0Y2hubCA9ICZmcm9udF9pbmZvLT5ldnRfcGFpcnNb R0VORVJJQ19PUF9FVlRfQ0hOTF0ucmVxOwo+ICsJaWYgKHVubGlrZWx5KCFldnRjaG5sKSkKPiAr CQlyZXR1cm4gLUVJTzsKPiArCj4gKwltZW1zZXQoJmJ1Zl9jZmcsIDAsIHNpemVvZihidWZfY2Zn KSk7Cj4gKwlidWZfY2ZnLnhiX2RldiA9IGZyb250X2luZm8tPnhiX2RldjsKPiArCWJ1Zl9jZmcu cGFnZXMgPSBwYWdlczsKPiArCWJ1Zl9jZmcuc2l6ZSA9IHNpemU7Cj4gKwlidWZfY2ZnLnNndCA9 IHNndDsKPiArCWJ1Zl9jZmcuYmVfYWxsb2MgPSBmcm9udF9pbmZvLT5jZmcuYmVfYWxsb2M7Cj4g Kwo+ICsJc2hidWYgPSB4ZW5fZHJtX2Zyb250X3NoYnVmX2FsbG9jKCZidWZfY2ZnKTsKPiArCWlm ICghc2hidWYpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJcmV0ID0gZGJ1Zl9hZGRfdG9f bGlzdChmcm9udF9pbmZvLCBzaGJ1ZiwgZGJ1Zl9jb29raWUpOwo+ICsJaWYgKHJldCA8IDApIHsK PiArCQl4ZW5fZHJtX2Zyb250X3NoYnVmX2ZyZWUoc2hidWYpOwo+ICsJCXJldHVybiByZXQ7Cj4g Kwl9Cj4gKwo+ICsJbXV0ZXhfbG9jaygmZXZ0Y2hubC0+dS5yZXEucmVxX2lvX2xvY2spOwo+ICsK PiArCXNwaW5fbG9ja19pcnFzYXZlKCZmcm9udF9pbmZvLT5pb19sb2NrLCBmbGFncyk7Cj4gKwly ZXEgPSBiZV9wcmVwYXJlX3JlcShldnRjaG5sLCBYRU5ESVNQTF9PUF9EQlVGX0NSRUFURSk7Cj4g KwlyZXEtPm9wLmRidWZfY3JlYXRlLmdyZWZfZGlyZWN0b3J5ID0KPiArCQkJeGVuX2RybV9mcm9u dF9zaGJ1Zl9nZXRfZGlyX3N0YXJ0KHNoYnVmKTsKPiArCXJlcS0+b3AuZGJ1Zl9jcmVhdGUuYnVm ZmVyX3N6ID0gc2l6ZTsKPiArCXJlcS0+b3AuZGJ1Zl9jcmVhdGUuZGJ1Zl9jb29raWUgPSBkYnVm X2Nvb2tpZTsKPiArCXJlcS0+b3AuZGJ1Zl9jcmVhdGUud2lkdGggPSB3aWR0aDsKPiArCXJlcS0+ b3AuZGJ1Zl9jcmVhdGUuaGVpZ2h0ID0gaGVpZ2h0Owo+ICsJcmVxLT5vcC5kYnVmX2NyZWF0ZS5i cHAgPSBicHA7Cj4gKwlpZiAoYnVmX2NmZy5iZV9hbGxvYykKPiArCQlyZXEtPm9wLmRidWZfY3Jl YXRlLmZsYWdzIHw9IFhFTkRJU1BMX0RCVUZfRkxHX1JFUV9BTExPQzsKPiArCj4gKwlyZXQgPSBi ZV9zdHJlYW1fZG9faW8oZXZ0Y2hubCwgcmVxKTsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JmZyb250X2luZm8tPmlvX2xvY2ssIGZsYWdzKTsKPiArCj4gKwlpZiAocmV0IDwgMCkKPiArCQln b3RvIGZhaWw7Cj4gKwo+ICsJcmV0ID0gYmVfc3RyZWFtX3dhaXRfaW8oZXZ0Y2hubCk7Cj4gKwlp ZiAocmV0IDwgMCkKPiArCQlnb3RvIGZhaWw7Cj4gKwo+ICsJcmV0ID0geGVuX2RybV9mcm9udF9z aGJ1Zl9tYXAoc2hidWYpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJZ290byBmYWlsOwo+ICsKPiAr CW11dGV4X3VubG9jaygmZXZ0Y2hubC0+dS5yZXEucmVxX2lvX2xvY2spOwo+ICsJcmV0dXJuIDA7 Cj4gKwo+ICtmYWlsOgo+ICsJbXV0ZXhfdW5sb2NrKCZldnRjaG5sLT51LnJlcS5yZXFfaW9fbG9j ayk7Cj4gKwlkYnVmX2ZyZWUoJmZyb250X2luZm8tPmRidWZfbGlzdCwgZGJ1Zl9jb29raWUpOwo+ ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiAraW50IHhlbl9kcm1fZnJvbnRfZGJ1Zl9jcmVhdGVf ZnJvbV9zZ3Qoc3RydWN0IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5mbywKPiArCQl1aW50 NjRfdCBkYnVmX2Nvb2tpZSwgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwKPiArCQl1 aW50MzJfdCBicHAsIHVpbnQ2NF90IHNpemUsIHN0cnVjdCBzZ190YWJsZSAqc2d0KQo+ICt7Cj4g KwlyZXR1cm4gYmVfZGJ1Zl9jcmVhdGVfaW50KGZyb250X2luZm8sIGRidWZfY29va2llLCB3aWR0 aCwgaGVpZ2h0LAo+ICsJCQlicHAsIHNpemUsIE5VTEwsIHNndCk7Cj4gK30KPiArCj4gK2ludCB4 ZW5fZHJtX2Zyb250X2RidWZfY3JlYXRlX2Zyb21fcGFnZXMoc3RydWN0IHhlbl9kcm1fZnJvbnRf aW5mbyAqZnJvbnRfaW5mbywKPiArCQl1aW50NjRfdCBkYnVmX2Nvb2tpZSwgdWludDMyX3Qgd2lk dGgsIHVpbnQzMl90IGhlaWdodCwKPiArCQl1aW50MzJfdCBicHAsIHVpbnQ2NF90IHNpemUsIHN0 cnVjdCBwYWdlICoqcGFnZXMpCj4gK3sKPiArCXJldHVybiBiZV9kYnVmX2NyZWF0ZV9pbnQoZnJv bnRfaW5mbywgZGJ1Zl9jb29raWUsIHdpZHRoLCBoZWlnaHQsCj4gKwkJCWJwcCwgc2l6ZSwgcGFn ZXMsIE5VTEwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHhlbl9kcm1fZnJvbnRfZGJ1Zl9kZXN0 cm95KHN0cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2luZm8sCj4gKwkJdWludDY0X3Qg ZGJ1Zl9jb29raWUpCj4gK3sKPiArCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2V2dGNobmwgKmV2dGNo bmw7Cj4gKwlzdHJ1Y3QgeGVuZGlzcGxfcmVxICpyZXE7Cj4gKwl1bnNpZ25lZCBsb25nIGZsYWdz Owo+ICsJYm9vbCBiZV9hbGxvYzsKPiArCWludCByZXQ7Cj4gKwo+ICsJZXZ0Y2hubCA9ICZmcm9u dF9pbmZvLT5ldnRfcGFpcnNbR0VORVJJQ19PUF9FVlRfQ0hOTF0ucmVxOwo+ICsJaWYgKHVubGlr ZWx5KCFldnRjaG5sKSkKPiArCQlyZXR1cm4gLUVJTzsKPiArCj4gKwliZV9hbGxvYyA9IGZyb250 X2luZm8tPmNmZy5iZV9hbGxvYzsKPiArCj4gKwkvKgo+ICsJICogRm9yIHRoZSBiYWNrZW5kIGFs bG9jYXRlZCBidWZmZXIgcmVsZWFzZSByZWZlcmVuY2VzIG5vdywgc28gYmFja2VuZAo+ICsJICog Y2FuIGZyZWUgdGhlIGJ1ZmZlci4KPiArCSAqLwo+ICsJaWYgKGJlX2FsbG9jKQo+ICsJCWRidWZf ZnJlZSgmZnJvbnRfaW5mby0+ZGJ1Zl9saXN0LCBkYnVmX2Nvb2tpZSk7Cj4gKwo+ICsJbXV0ZXhf bG9jaygmZXZ0Y2hubC0+dS5yZXEucmVxX2lvX2xvY2spOwo+ICsKPiArCXNwaW5fbG9ja19pcnFz YXZlKCZmcm9udF9pbmZvLT5pb19sb2NrLCBmbGFncyk7Cj4gKwlyZXEgPSBiZV9wcmVwYXJlX3Jl cShldnRjaG5sLCBYRU5ESVNQTF9PUF9EQlVGX0RFU1RST1kpOwo+ICsJcmVxLT5vcC5kYnVmX2Rl c3Ryb3kuZGJ1Zl9jb29raWUgPSBkYnVmX2Nvb2tpZTsKPiArCj4gKwlyZXQgPSBiZV9zdHJlYW1f ZG9faW8oZXZ0Y2hubCwgcmVxKTsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZyb250X2lu Zm8tPmlvX2xvY2ssIGZsYWdzKTsKPiArCj4gKwlpZiAocmV0ID09IDApCj4gKwkJcmV0ID0gYmVf c3RyZWFtX3dhaXRfaW8oZXZ0Y2hubCk7Cj4gKwo+ICsJLyoKPiArCSAqIERvIHRoaXMgcmVnYXJk bGVzcyBvZiBjb21tdW5pY2F0aW9uIHN0YXR1cyB3aXRoIHRoZSBiYWNrZW5kOgo+ICsJICogaWYg d2UgY2Fubm90IHJlbW92ZSByZW1vdGUgcmVzb3VyY2VzIHJlbW92ZSB3aGF0IHdlIGNhbiBsb2Nh bGx5Lgo+ICsJICovCj4gKwlpZiAoIWJlX2FsbG9jKQo+ICsJCWRidWZfZnJlZSgmZnJvbnRfaW5m by0+ZGJ1Zl9saXN0LCBkYnVmX2Nvb2tpZSk7Cj4gKwo+ICsJbXV0ZXhfdW5sb2NrKCZldnRjaG5s LT51LnJlcS5yZXFfaW9fbG9jayk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtpbnQgeGVu X2RybV9mcm9udF9mYl9hdHRhY2goc3RydWN0IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5m bywKPiArCQl1aW50NjRfdCBkYnVmX2Nvb2tpZSwgdWludDY0X3QgZmJfY29va2llLCB1aW50MzJf dCB3aWR0aCwKPiArCQl1aW50MzJfdCBoZWlnaHQsIHVpbnQzMl90IHBpeGVsX2Zvcm1hdCkKPiAr ewo+ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfZXZ0Y2hubCAqZXZ0Y2hubDsKPiArCXN0cnVjdCB4 ZW5fZHJtX2Zyb250X2RidWYgKmJ1ZjsKPiArCXN0cnVjdCB4ZW5kaXNwbF9yZXEgKnJlcTsKPiAr CXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWV2dGNobmwgPSAmZnJv bnRfaW5mby0+ZXZ0X3BhaXJzW0dFTkVSSUNfT1BfRVZUX0NITkxdLnJlcTsKPiArCWlmICh1bmxp a2VseSghZXZ0Y2hubCkpCj4gKwkJcmV0dXJuIC1FSU87Cj4gKwo+ICsJYnVmID0gZGJ1Zl9nZXQo JmZyb250X2luZm8tPmRidWZfbGlzdCwgZGJ1Zl9jb29raWUpOwo+ICsJaWYgKCFidWYpCj4gKwkJ cmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJYnVmLT5mYl9jb29raWUgPSBmYl9jb29raWU7Cj4gKwo+ ICsJbXV0ZXhfbG9jaygmZXZ0Y2hubC0+dS5yZXEucmVxX2lvX2xvY2spOwo+ICsKPiArCXNwaW5f bG9ja19pcnFzYXZlKCZmcm9udF9pbmZvLT5pb19sb2NrLCBmbGFncyk7Cj4gKwlyZXEgPSBiZV9w cmVwYXJlX3JlcShldnRjaG5sLCBYRU5ESVNQTF9PUF9GQl9BVFRBQ0gpOwo+ICsJcmVxLT5vcC5m Yl9hdHRhY2guZGJ1Zl9jb29raWUgPSBkYnVmX2Nvb2tpZTsKPiArCXJlcS0+b3AuZmJfYXR0YWNo LmZiX2Nvb2tpZSA9IGZiX2Nvb2tpZTsKPiArCXJlcS0+b3AuZmJfYXR0YWNoLndpZHRoID0gd2lk dGg7Cj4gKwlyZXEtPm9wLmZiX2F0dGFjaC5oZWlnaHQgPSBoZWlnaHQ7Cj4gKwlyZXEtPm9wLmZi X2F0dGFjaC5waXhlbF9mb3JtYXQgPSBwaXhlbF9mb3JtYXQ7Cj4gKwo+ICsJcmV0ID0gYmVfc3Ry ZWFtX2RvX2lvKGV2dGNobmwsIHJlcSk7Cj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmcm9u dF9pbmZvLT5pb19sb2NrLCBmbGFncyk7Cj4gKwo+ICsJaWYgKHJldCA9PSAwKQo+ICsJCXJldCA9 IGJlX3N0cmVhbV93YWl0X2lvKGV2dGNobmwpOwo+ICsKPiArCW11dGV4X3VubG9jaygmZXZ0Y2hu bC0+dS5yZXEucmVxX2lvX2xvY2spOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiAraW50IHhl bl9kcm1fZnJvbnRfZmJfZGV0YWNoKHN0cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2lu Zm8sCj4gKwkJdWludDY0X3QgZmJfY29va2llKQo+ICt7Cj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9u dF9ldnRjaG5sICpldnRjaG5sOwo+ICsJc3RydWN0IHhlbmRpc3BsX3JlcSAqcmVxOwo+ICsJdW5z aWduZWQgbG9uZyBmbGFnczsKPiArCWludCByZXQ7Cj4gKwo+ICsJZXZ0Y2hubCA9ICZmcm9udF9p bmZvLT5ldnRfcGFpcnNbR0VORVJJQ19PUF9FVlRfQ0hOTF0ucmVxOwo+ICsJaWYgKHVubGlrZWx5 KCFldnRjaG5sKSkKPiArCQlyZXR1cm4gLUVJTzsKPiArCj4gKwltdXRleF9sb2NrKCZldnRjaG5s LT51LnJlcS5yZXFfaW9fbG9jayk7Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmZyb250X2lu Zm8tPmlvX2xvY2ssIGZsYWdzKTsKPiArCXJlcSA9IGJlX3ByZXBhcmVfcmVxKGV2dGNobmwsIFhF TkRJU1BMX09QX0ZCX0RFVEFDSCk7Cj4gKwlyZXEtPm9wLmZiX2RldGFjaC5mYl9jb29raWUgPSBm Yl9jb29raWU7Cj4gKwo+ICsJcmV0ID0gYmVfc3RyZWFtX2RvX2lvKGV2dGNobmwsIHJlcSk7Cj4g KwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmcm9udF9pbmZvLT5pb19sb2NrLCBmbGFncyk7Cj4g Kwo+ICsJaWYgKHJldCA9PSAwKQo+ICsJCXJldCA9IGJlX3N0cmVhbV93YWl0X2lvKGV2dGNobmwp Owo+ICsKPiArCW11dGV4X3VubG9jaygmZXZ0Y2hubC0+dS5yZXEucmVxX2lvX2xvY2spOwo+ICsJ cmV0dXJuIHJldDsKPiArfQo+ICsKPiAraW50IHhlbl9kcm1fZnJvbnRfcGFnZV9mbGlwKHN0cnVj dCB4ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2luZm8sCj4gKwkJaW50IGNvbm5faWR4LCB1aW50 NjRfdCBmYl9jb29raWUpCj4gK3sKPiArCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2V2dGNobmwgKmV2 dGNobmw7Cj4gKwlzdHJ1Y3QgeGVuZGlzcGxfcmVxICpyZXE7Cj4gKwl1bnNpZ25lZCBsb25nIGZs YWdzOwo+ICsJaW50IHJldDsKPiArCj4gKwlpZiAodW5saWtlbHkoY29ubl9pZHggPj0gZnJvbnRf aW5mby0+bnVtX2V2dF9wYWlycykpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJZGJ1Zl9m bHVzaF9mYigmZnJvbnRfaW5mby0+ZGJ1Zl9saXN0LCBmYl9jb29raWUpOwo+ICsJZXZ0Y2hubCA9 ICZmcm9udF9pbmZvLT5ldnRfcGFpcnNbY29ubl9pZHhdLnJlcTsKPiArCj4gKwltdXRleF9sb2Nr KCZldnRjaG5sLT51LnJlcS5yZXFfaW9fbG9jayk7Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycXNhdmUo JmZyb250X2luZm8tPmlvX2xvY2ssIGZsYWdzKTsKPiArCXJlcSA9IGJlX3ByZXBhcmVfcmVxKGV2 dGNobmwsIFhFTkRJU1BMX09QX1BHX0ZMSVApOwo+ICsJcmVxLT5vcC5wZ19mbGlwLmZiX2Nvb2tp ZSA9IGZiX2Nvb2tpZTsKPiArCj4gKwlyZXQgPSBiZV9zdHJlYW1fZG9faW8oZXZ0Y2hubCwgcmVx KTsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZyb250X2luZm8tPmlvX2xvY2ssIGZsYWdz KTsKPiArCj4gKwlpZiAocmV0ID09IDApCj4gKwkJcmV0ID0gYmVfc3RyZWFtX3dhaXRfaW8oZXZ0 Y2hubCk7Cj4gKwo+ICsJbXV0ZXhfdW5sb2NrKCZldnRjaG5sLT51LnJlcS5yZXFfaW9fbG9jayk7 Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICt2b2lkIHhlbl9kcm1fZnJvbnRfb25fZnJhbWVf ZG9uZShzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvICpmcm9udF9pbmZvLAo+ICsJCWludCBjb25u X2lkeCwgdWludDY0X3QgZmJfY29va2llKQo+ICt7Cj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9k cm1faW5mbyAqZHJtX2luZm8gPSBmcm9udF9pbmZvLT5kcm1faW5mbzsKPiArCj4gKwlpZiAodW5s aWtlbHkoY29ubl9pZHggPj0gZnJvbnRfaW5mby0+Y2ZnLm51bV9jb25uZWN0b3JzKSkKPiArCQly ZXR1cm47Cj4gKwo+ICsJeGVuX2RybV9mcm9udF9rbXNfb25fZnJhbWVfZG9uZSgmZHJtX2luZm8t PnBpcGVsaW5lW2Nvbm5faWR4XSwKPiArCQkJZmJfY29va2llKTsKPiArfQo+ICsKPiArc3RhdGlj IGludCB4ZW5fZHJtX2Rydl9kdW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbHAsCj4gKwkJ c3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9tb2RlX2NyZWF0ZV9kdW1iICphcmdz KQo+ICt7Cj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1faW5mbyAqZHJtX2luZm8gPSBkZXYt PmRldl9wcml2YXRlOwo+ICsJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Cj4gKwlpbnQgcmV0 Owo+ICsKPiArCS8qCj4gKwkgKiBEdW1iIGNyZWF0aW9uIGlzIGEgdHdvIHN0YWdlIHByb2Nlc3M6 IGZpcnN0IHdlIGNyZWF0ZSBhIGZ1bGx5Cj4gKwkgKiBjb25zdHJ1Y3RlZCBHRU0gb2JqZWN0IHdo aWNoIGlzIGNvbW11bmljYXRlZCB0byB0aGUgYmFja2VuZCwgYW5kCj4gKwkgKiBvbmx5IGFmdGVy IHRoYXQgd2UgY2FuIGNyZWF0ZSBHRU0ncyBoYW5kbGUuIFRoaXMgaXMgZG9uZSBzbywKPiArCSAq IGJlY2F1c2Ugb2YgdGhlIHBvc3NpYmxlIHJhY2VzOiBvbmNlIHlvdSBjcmVhdGUgYSBoYW5kbGUg aXQgYmVjb21lcwo+ICsJICogaW1tZWRpYXRlbHkgdmlzaWJsZSB0byB1c2VyLXNwYWNlLCBzbyB0 aGUgbGF0dGVyIGNhbiB0cnkgYWNjZXNzaW5nCj4gKwkgKiBvYmplY3Qgd2l0aG91dCBwYWdlcyBl dGMuCj4gKwkgKiBGb3IgZGV0YWlscyBhbHNvIHNlZSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUKPiAr CSAqLwo+ICsJYXJncy0+cGl0Y2ggPSBESVZfUk9VTkRfVVAoYXJncy0+d2lkdGggKiBhcmdzLT5i cHAsIDgpOwo+ICsJYXJncy0+c2l6ZSA9IGFyZ3MtPnBpdGNoICogYXJncy0+aGVpZ2h0Owo+ICsK PiArCW9iaiA9IHhlbl9kcm1fZnJvbnRfZ2VtX2NyZWF0ZShkZXYsIGFyZ3MtPnNpemUpOwo+ICsJ aWYgKElTX0VSUl9PUl9OVUxMKG9iaikpIHsKPiArCQlyZXQgPSBQVFJfRVJSKG9iaik7Cj4gKwkJ Z290byBmYWlsOwo+ICsJfQo+ICsKPiArCS8qCj4gKwkgKiBJbiBjYXNlIG9mIENPTkZJR19EUk1f WEVOX0ZST05URU5EX0NNQSBnZW1fb2JqIGlzIGNvbnN0cnVjdGVkCj4gKwkgKiB2aWEgRFJNIENN QSBoZWxwZXJzIGFuZCBkb2Vzbid0IGhhdmUgLT5wYWdlcyBhbGxvY2F0ZWQKPiArCSAqICh4ZW5k cm1fZ2VtX2dldF9wYWdlcyB3aWxsIHJldHVybiBOVUxMKSwgYnV0IGluc3RlYWQgY2FuIHByb3Zp ZGUKPiArCSAqIHNnIHRhYmxlCj4gKwkgKi8KPiArCWlmICh4ZW5fZHJtX2Zyb250X2dlbV9nZXRf cGFnZXMob2JqKSkKPiArCQlyZXQgPSB4ZW5fZHJtX2Zyb250X2RidWZfY3JlYXRlX2Zyb21fcGFn ZXMoCj4gKwkJCQlkcm1faW5mby0+ZnJvbnRfaW5mbywKPiArCQkJCXhlbl9kcm1fZnJvbnRfZGJ1 Zl90b19jb29raWUob2JqKSwKPiArCQkJCWFyZ3MtPndpZHRoLCBhcmdzLT5oZWlnaHQsIGFyZ3Mt PmJwcCwKPiArCQkJCWFyZ3MtPnNpemUsCj4gKwkJCQl4ZW5fZHJtX2Zyb250X2dlbV9nZXRfcGFn ZXMob2JqKSk7Cj4gKwllbHNlCj4gKwkJcmV0ID0geGVuX2RybV9mcm9udF9kYnVmX2NyZWF0ZV9m cm9tX3NndCgKPiArCQkJCWRybV9pbmZvLT5mcm9udF9pbmZvLAo+ICsJCQkJeGVuX2RybV9mcm9u dF9kYnVmX3RvX2Nvb2tpZShvYmopLAo+ICsJCQkJYXJncy0+d2lkdGgsIGFyZ3MtPmhlaWdodCwg YXJncy0+YnBwLAo+ICsJCQkJYXJncy0+c2l6ZSwKPiArCQkJCXhlbl9kcm1fZnJvbnRfZ2VtX2dl dF9zZ190YWJsZShvYmopKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBmYWlsX2JhY2tlbmQ7Cj4g Kwo+ICsJLyogVGhpcyBpcyB0aGUgdGFpbCBvZiBHRU0gb2JqZWN0IGNyZWF0aW9uICovCj4gKwly ZXQgPSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoZmlscCwgb2JqLCAmYXJncy0+aGFuZGxlKTsKPiAr CWlmIChyZXQpCj4gKwkJZ290byBmYWlsX2hhbmRsZTsKPiArCj4gKwkvKiBEcm9wIHJlZmVyZW5j ZSBmcm9tIGFsbG9jYXRlIC0gaGFuZGxlIGhvbGRzIGl0IG5vdyAqLwo+ICsJZHJtX2dlbV9vYmpl Y3RfcHV0X3VubG9ja2VkKG9iaik7Cj4gKwlyZXR1cm4gMDsKPiArCj4gK2ZhaWxfaGFuZGxlOgo+ ICsJeGVuX2RybV9mcm9udF9kYnVmX2Rlc3Ryb3koZHJtX2luZm8tPmZyb250X2luZm8sCj4gKwkJ eGVuX2RybV9mcm9udF9kYnVmX3RvX2Nvb2tpZShvYmopKTsKPiArZmFpbF9iYWNrZW5kOgo+ICsJ LyogZHJvcCByZWZlcmVuY2UgZnJvbSBhbGxvY2F0ZSAqLwo+ICsJZHJtX2dlbV9vYmplY3RfcHV0 X3VubG9ja2VkKG9iaik7Cj4gK2ZhaWw6Cj4gKwlEUk1fRVJST1IoIkZhaWxlZCB0byBjcmVhdGUg ZHVtYiBidWZmZXI6ICVkXG4iLCByZXQpOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgeGVuX2RybV9kcnZfZnJlZV9vYmplY3RfdW5sb2NrZWQoc3RydWN0IGRybV9nZW1f b2JqZWN0ICpvYmopCj4gK3sKPiArCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9pbmZvICpkcm1f aW5mbyA9IG9iai0+ZGV2LT5kZXZfcHJpdmF0ZTsKPiArCWludCBpZHg7Cj4gKwo+ICsJaWYgKGRy bV9kZXZfZW50ZXIob2JqLT5kZXYsICZpZHgpKSB7Cj4gKwkJeGVuX2RybV9mcm9udF9kYnVmX2Rl c3Ryb3koZHJtX2luZm8tPmZyb250X2luZm8sCj4gKwkJCQl4ZW5fZHJtX2Zyb250X2RidWZfdG9f Y29va2llKG9iaikpOwo+ICsJCWRybV9kZXZfZXhpdChpZHgpOwo+ICsJfSBlbHNlCj4gKwkJZGJ1 Zl9mcmVlKCZkcm1faW5mby0+ZnJvbnRfaW5mby0+ZGJ1Zl9saXN0LAo+ICsJCQkJeGVuX2RybV9m cm9udF9kYnVmX3RvX2Nvb2tpZShvYmopKTsKPiArCj4gKwl4ZW5fZHJtX2Zyb250X2dlbV9mcmVl X29iamVjdF91bmxvY2tlZChvYmopOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB4ZW5fZHJtX2Ry dl9yZWxlYXNlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCB4ZW5fZHJt X2Zyb250X2RybV9pbmZvICpkcm1faW5mbyA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3Qg eGVuX2RybV9mcm9udF9pbmZvICpmcm9udF9pbmZvID0gZHJtX2luZm8tPmZyb250X2luZm87Cj4g Kwo+ICsJeGVuX2RybV9mcm9udF9rbXNfZmluaShkcm1faW5mbyk7Cj4gKwo+ICsJZHJtX2F0b21p Y19oZWxwZXJfc2h1dGRvd24oZGV2KTsKPiArCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRldik7 Cj4gKwo+ICsJZHJtX2Rldl9maW5pKGRldik7Cj4gKwlrZnJlZShkZXYpOwo+ICsKPiArCWlmIChm cm9udF9pbmZvLT5jZmcuYmVfYWxsb2MpCj4gKwkJeGVuYnVzX3N3aXRjaF9zdGF0ZShmcm9udF9p bmZvLT54Yl9kZXYsCj4gKwkJCQlYZW5idXNTdGF0ZUluaXRpYWxpc2luZyk7Cj4gKwo+ICsJa2Zy ZWUoZHJtX2luZm8pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0 aW9ucyB4ZW5fZHJtX2Rldl9mb3BzID0gewo+ICsJLm93bmVyICAgICAgICAgID0gVEhJU19NT0RV TEUsCj4gKwkub3BlbiAgICAgICAgICAgPSBkcm1fb3BlbiwKPiArCS5yZWxlYXNlICAgICAgICA9 IGRybV9yZWxlYXNlLAo+ICsJLnVubG9ja2VkX2lvY3RsID0gZHJtX2lvY3RsLAo+ICsjaWZkZWYg Q09ORklHX0NPTVBBVAo+ICsJLmNvbXBhdF9pb2N0bCAgID0gZHJtX2NvbXBhdF9pb2N0bCwKPiAr I2VuZGlmCj4gKwkucG9sbCAgICAgICAgICAgPSBkcm1fcG9sbCwKPiArCS5yZWFkICAgICAgICAg ICA9IGRybV9yZWFkLAo+ICsJLmxsc2VlayAgICAgICAgID0gbm9fbGxzZWVrLAo+ICsjaWZkZWYg Q09ORklHX0RSTV9YRU5fRlJPTlRFTkRfQ01BCj4gKwkubW1hcCAgICAgICAgICAgPSBkcm1fZ2Vt X2NtYV9tbWFwLAo+ICsjZWxzZQo+ICsJLm1tYXAgICAgICAgICAgID0geGVuX2RybV9mcm9udF9n ZW1fbW1hcCwKPiArI2VuZGlmCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29w ZXJhdGlvbnNfc3RydWN0IHhlbl9kcm1fZHJ2X3ZtX29wcyA9IHsKPiArCS5vcGVuICAgICAgICAg ICA9IGRybV9nZW1fdm1fb3BlbiwKPiArCS5jbG9zZSAgICAgICAgICA9IGRybV9nZW1fdm1fY2xv c2UsCj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgeGVuX2RybV9kcml2ZXIg PSB7Cj4gKwkuZHJpdmVyX2ZlYXR1cmVzICAgICAgICAgICA9IERSSVZFUl9HRU0gfCBEUklWRVJf TU9ERVNFVCB8Cj4gKwkJCQkgICAgIERSSVZFUl9QUklNRSB8IERSSVZFUl9BVE9NSUMsCj4gKwku cmVsZWFzZSAgICAgICAgICAgICAgICAgICA9IHhlbl9kcm1fZHJ2X3JlbGVhc2UsCj4gKwkuZ2Vt X3ZtX29wcyAgICAgICAgICAgICAgICA9ICZ4ZW5fZHJtX2Rydl92bV9vcHMsCj4gKwkuZ2VtX2Zy ZWVfb2JqZWN0X3VubG9ja2VkICA9IHhlbl9kcm1fZHJ2X2ZyZWVfb2JqZWN0X3VubG9ja2VkLAo+ ICsJLnByaW1lX2hhbmRsZV90b19mZCAgICAgICAgPSBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90b19m ZCwKPiArCS5wcmltZV9mZF90b19oYW5kbGUgICAgICAgID0gZHJtX2dlbV9wcmltZV9mZF90b19o YW5kbGUsCj4gKwkuZ2VtX3ByaW1lX2ltcG9ydCAgICAgICAgICA9IGRybV9nZW1fcHJpbWVfaW1w b3J0LAo+ICsJLmdlbV9wcmltZV9leHBvcnQgICAgICAgICAgPSBkcm1fZ2VtX3ByaW1lX2V4cG9y dCwKPiArCS5nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlID0geGVuX2RybV9mcm9udF9nZW1faW1w b3J0X3NnX3RhYmxlLAo+ICsJLmdlbV9wcmltZV9nZXRfc2dfdGFibGUgICAgPSB4ZW5fZHJtX2Zy b250X2dlbV9nZXRfc2dfdGFibGUsCj4gKwkuZHVtYl9jcmVhdGUgICAgICAgICAgICAgICA9IHhl bl9kcm1fZHJ2X2R1bWJfY3JlYXRlLAo+ICsJLmZvcHMgICAgICAgICAgICAgICAgICAgICAgPSAm eGVuX2RybV9kZXZfZm9wcywKPiArCS5uYW1lICAgICAgICAgICAgICAgICAgICAgID0gInhlbmRy bS1kdSIsCj4gKwkuZGVzYyAgICAgICAgICAgICAgICAgICAgICA9ICJYZW4gUFYgRFJNIERpc3Bs YXkgVW5pdCIsCj4gKwkuZGF0ZSAgICAgICAgICAgICAgICAgICAgICA9ICIyMDE4MDIyMSIsCj4g KwkubWFqb3IgICAgICAgICAgICAgICAgICAgICA9IDEsCj4gKwkubWlub3IgICAgICAgICAgICAg ICAgICAgICA9IDAsCj4gKwo+ICsjaWZkZWYgQ09ORklHX0RSTV9YRU5fRlJPTlRFTkRfQ01BCj4g KwkuZ2VtX3ByaW1lX3ZtYXAgICAgICAgICAgICA9IGRybV9nZW1fY21hX3ByaW1lX3ZtYXAsCj4g KwkuZ2VtX3ByaW1lX3Z1bm1hcCAgICAgICAgICA9IGRybV9nZW1fY21hX3ByaW1lX3Z1bm1hcCwK PiArCS5nZW1fcHJpbWVfbW1hcCAgICAgICAgICAgID0gZHJtX2dlbV9jbWFfcHJpbWVfbW1hcCwK PiArI2Vsc2UKPiArCS5nZW1fcHJpbWVfdm1hcCAgICAgICAgICAgID0geGVuX2RybV9mcm9udF9n ZW1fcHJpbWVfdm1hcCwKPiArCS5nZW1fcHJpbWVfdnVubWFwICAgICAgICAgID0geGVuX2RybV9m cm9udF9nZW1fcHJpbWVfdnVubWFwLAo+ICsJLmdlbV9wcmltZV9tbWFwICAgICAgICAgICAgPSB4 ZW5fZHJtX2Zyb250X2dlbV9wcmltZV9tbWFwLAo+ICsjZW5kaWYKPiArfTsKPiArCj4gK3N0YXRp YyBpbnQgeGVuX2RybV9kcnZfaW5pdChzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvICpmcm9udF9p bmZvKQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZnJvbnRfaW5mby0+eGJfZGV2LT5k ZXY7Cj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1faW5mbyAqZHJtX2luZm87Cj4gKwlzdHJ1 Y3QgZHJtX2RldmljZSAqZHJtX2RldjsKPiArCWludCByZXQ7Cj4gKwo+ICsJRFJNX0lORk8oIkNy ZWF0aW5nICVzXG4iLCB4ZW5fZHJtX2RyaXZlci5kZXNjKTsKPiArCj4gKwlkcm1faW5mbyA9IGt6 YWxsb2Moc2l6ZW9mKCpkcm1faW5mbyksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFkcm1faW5mbykg ewo+ICsJCXJldCA9IC1FTk9NRU07Cj4gKwkJZ290byBmYWlsOwo+ICsJfQo+ICsKPiArCWRybV9p bmZvLT5mcm9udF9pbmZvID0gZnJvbnRfaW5mbzsKPiArCWZyb250X2luZm8tPmRybV9pbmZvID0g ZHJtX2luZm87Cj4gKwo+ICsJZHJtX2RldiA9IGRybV9kZXZfYWxsb2MoJnhlbl9kcm1fZHJpdmVy LCBkZXYpOwo+ICsJaWYgKCFkcm1fZGV2KSB7Cj4gKwkJcmV0ID0gLUVOT01FTTsKPiArCQlnb3Rv IGZhaWw7Cj4gKwl9Cj4gKwo+ICsJZHJtX2luZm8tPmRybV9kZXYgPSBkcm1fZGV2Owo+ICsKPiAr CWRybV9kZXYtPmRldl9wcml2YXRlID0gZHJtX2luZm87Cj4gKwo+ICsJcmV0ID0geGVuX2RybV9m cm9udF9rbXNfaW5pdChkcm1faW5mbyk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0VSUk9SKCJG YWlsZWQgdG8gaW5pdGlhbGl6ZSBEUk0vS01TLCByZXQgJWRcbiIsIHJldCk7Cj4gKwkJZ290byBm YWlsX21vZGVzZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gZHJtX2Rldl9yZWdpc3Rlcihkcm1fZGV2 LCAwKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBmYWlsX3JlZ2lzdGVyOwo+ICsKPiArCURSTV9J TkZPKCJJbml0aWFsaXplZCAlcyAlZC4lZC4lZCAlcyBvbiBtaW5vciAlZFxuIiwKPiArCQkJeGVu X2RybV9kcml2ZXIubmFtZSwgeGVuX2RybV9kcml2ZXIubWFqb3IsCj4gKwkJCXhlbl9kcm1fZHJp dmVyLm1pbm9yLCB4ZW5fZHJtX2RyaXZlci5wYXRjaGxldmVsLAo+ICsJCQl4ZW5fZHJtX2RyaXZl ci5kYXRlLCBkcm1fZGV2LT5wcmltYXJ5LT5pbmRleCk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ ICtmYWlsX3JlZ2lzdGVyOgo+ICsJZHJtX2Rldl91bnJlZ2lzdGVyKGRybV9kZXYpOwo+ICtmYWls X21vZGVzZXQ6Cj4gKwlkcm1fa21zX2hlbHBlcl9wb2xsX2ZpbmkoZHJtX2Rldik7Cj4gKwlkcm1f bW9kZV9jb25maWdfY2xlYW51cChkcm1fZGV2KTsKPiArZmFpbDoKPiArCWtmcmVlKGRybV9pbmZv KTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHhlbl9kcm1fZHJ2X2Zp bmkoc3RydWN0IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5mbykKPiArewo+ICsJc3RydWN0 IHhlbl9kcm1fZnJvbnRfZHJtX2luZm8gKmRybV9pbmZvID0gZnJvbnRfaW5mby0+ZHJtX2luZm87 Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2Owo+ICsKPiArCWlmICghZHJtX2luZm8pCj4gKwkJ cmV0dXJuOwo+ICsKPiArCWRldiA9IGRybV9pbmZvLT5kcm1fZGV2Owo+ICsJaWYgKCFkZXYpCj4g KwkJcmV0dXJuOwo+ICsKPiArCS8qIE5vdGhpbmcgdG8gZG8gaWYgZGV2aWNlIGlzIGFscmVhZHkg dW5wbHVnZ2VkICovCj4gKwlpZiAoZHJtX2Rldl9pc191bnBsdWdnZWQoZGV2KSkKPiArCQlyZXR1 cm47Cj4gKwo+ICsJZHJtX2ttc19oZWxwZXJfcG9sbF9maW5pKGRldik7Cj4gKwlkcm1fZGV2X3Vu cGx1ZyhkZXYpOwo+ICsKPiArCWZyb250X2luZm8tPmRybV9pbmZvID0gTlVMTDsKPiArCj4gKwl4 ZW5fZHJtX2Zyb250X2V2dGNobmxfZnJlZV9hbGwoZnJvbnRfaW5mbyk7Cj4gKwlkYnVmX2ZyZWVf YWxsKCZmcm9udF9pbmZvLT5kYnVmX2xpc3QpOwo+ICsKPiArCS8qCj4gKwkgKiBJZiB3ZSBhcmUg bm90IHVzaW5nIGJhY2tlbmQgYWxsb2NhdGVkIGJ1ZmZlcnMsIHRoZW4gdGVsbCB0aGUKPiArCSAq IGJhY2tlbmQgd2UgYXJlIHJlYWR5IHRvIChyZSlpbml0aWFsaXplLiBPdGhlcndpc2UsIHdhaXQg Zm9yCj4gKwkgKiBkcm1fZHJpdmVyLnJlbGVhc2UuCj4gKwkgKi8KPiArCWlmICghZnJvbnRfaW5m by0+Y2ZnLmJlX2FsbG9jKQo+ICsJCXhlbmJ1c19zd2l0Y2hfc3RhdGUoZnJvbnRfaW5mby0+eGJf ZGV2LAo+ICsJCQkJWGVuYnVzU3RhdGVJbml0aWFsaXNpbmcpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IGRpc3BsYmFja19pbml0d2FpdChzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvICpmcm9udF9p bmZvKQo+ICt7Cj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9jZmcgKmNmZyA9ICZmcm9udF9pbmZv LT5jZmc7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWNmZy0+ZnJvbnRfaW5mbyA9IGZyb250X2luZm87 Cj4gKwlyZXQgPSB4ZW5fZHJtX2Zyb250X2NmZ19jYXJkKGZyb250X2luZm8sIGNmZyk7Cj4gKwlp ZiAocmV0IDwgMCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCURSTV9JTkZPKCJIYXZlICVkIGNv bmVjdG9yKHMpXG4iLCBjZmctPm51bV9jb25uZWN0b3JzKTsKPiArCS8qIENyZWF0ZSBldmVudCBj aGFubmVscyBmb3IgYWxsIGNvbm5lY3RvcnMgYW5kIHB1Ymxpc2ggKi8KPiArCXJldCA9IHhlbl9k cm1fZnJvbnRfZXZ0Y2hubF9jcmVhdGVfYWxsKGZyb250X2luZm8pOwo+ICsJaWYgKHJldCA8IDAp Cj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlyZXR1cm4geGVuX2RybV9mcm9udF9ldnRjaG5sX3B1 Ymxpc2hfYWxsKGZyb250X2luZm8pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRpc3BsYmFja19j b25uZWN0KHN0cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2luZm8pCj4gK3sKPiArCXhl bl9kcm1fZnJvbnRfZXZ0Y2hubF9zZXRfc3RhdGUoZnJvbnRfaW5mbywgRVZUQ0hOTF9TVEFURV9D T05ORUNURUQpOwo+ICsJcmV0dXJuIHhlbl9kcm1fZHJ2X2luaXQoZnJvbnRfaW5mbyk7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIGRpc3BsYmFja19kaXNjb25uZWN0KHN0cnVjdCB4ZW5fZHJtX2Zy b250X2luZm8gKmZyb250X2luZm8pCj4gK3sKPiArCWlmICghZnJvbnRfaW5mby0+ZHJtX2luZm8p Cj4gKwkJcmV0dXJuOwo+ICsKPiArCS8qIFRlbGwgdGhlIGJhY2tlbmQgdG8gd2FpdCB1bnRpbCB3 ZSByZWxlYXNlIHRoZSBEUk0gZHJpdmVyLiAqLwo+ICsJeGVuYnVzX3N3aXRjaF9zdGF0ZShmcm9u dF9pbmZvLT54Yl9kZXYsIFhlbmJ1c1N0YXRlUmVjb25maWd1cmluZyk7Cj4gKwo+ICsJeGVuX2Ry bV9kcnZfZmluaShmcm9udF9pbmZvKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZGlzcGxiYWNr X2NoYW5nZWQoc3RydWN0IHhlbmJ1c19kZXZpY2UgKnhiX2RldiwKPiArCQllbnVtIHhlbmJ1c19z dGF0ZSBiYWNrZW5kX3N0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvICpm cm9udF9pbmZvID0gZGV2X2dldF9kcnZkYXRhKCZ4Yl9kZXYtPmRldik7Cj4gKwlpbnQgcmV0Owo+ ICsKPiArCURSTV9ERUJVRygiQmFja2VuZCBzdGF0ZSBpcyAlcywgZnJvbnQgaXMgJXNcbiIsCj4g KwkJCXhlbmJ1c19zdHJzdGF0ZShiYWNrZW5kX3N0YXRlKSwKPiArCQkJeGVuYnVzX3N0cnN0YXRl KHhiX2Rldi0+c3RhdGUpKTsKPiArCj4gKwlzd2l0Y2ggKGJhY2tlbmRfc3RhdGUpIHsKPiArCWNh c2UgWGVuYnVzU3RhdGVSZWNvbmZpZ3VyaW5nOgo+ICsJCS8qIGZhbGwgdGhyb3VnaCAqLwo+ICsJ Y2FzZSBYZW5idXNTdGF0ZVJlY29uZmlndXJlZDoKPiArCQkvKiBmYWxsIHRocm91Z2ggKi8KPiAr CWNhc2UgWGVuYnVzU3RhdGVJbml0aWFsaXNlZDoKPiArCQlicmVhazsKPiArCj4gKwljYXNlIFhl bmJ1c1N0YXRlSW5pdGlhbGlzaW5nOgo+ICsJCWlmICh4Yl9kZXYtPnN0YXRlID09IFhlbmJ1c1N0 YXRlUmVjb25maWd1cmluZykKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCS8qIHJlY292ZXJpbmcgYWZ0 ZXIgYmFja2VuZCB1bmV4cGVjdGVkIGNsb3N1cmUgKi8KPiArCQlkaXNwbGJhY2tfZGlzY29ubmVj dChmcm9udF9pbmZvKTsKPiArCQlicmVhazsKPiArCj4gKwljYXNlIFhlbmJ1c1N0YXRlSW5pdFdh aXQ6Cj4gKwkJaWYgKHhiX2Rldi0+c3RhdGUgPT0gWGVuYnVzU3RhdGVSZWNvbmZpZ3VyaW5nKQo+ ICsJCQlicmVhazsKPiArCj4gKwkJLyogcmVjb3ZlcmluZyBhZnRlciBiYWNrZW5kIHVuZXhwZWN0 ZWQgY2xvc3VyZSAqLwo+ICsJCWRpc3BsYmFja19kaXNjb25uZWN0KGZyb250X2luZm8pOwo+ICsJ CWlmICh4Yl9kZXYtPnN0YXRlICE9IFhlbmJ1c1N0YXRlSW5pdGlhbGlzaW5nKQo+ICsJCQlicmVh azsKPiArCj4gKwkJcmV0ID0gZGlzcGxiYWNrX2luaXR3YWl0KGZyb250X2luZm8pOwo+ICsJCWlm IChyZXQgPCAwKQo+ICsJCQl4ZW5idXNfZGV2X2ZhdGFsKHhiX2RldiwgcmV0LAo+ICsJCQkJCSJp bml0aWFsaXppbmcgZnJvbnRlbmQiKTsKPiArCQllbHNlCj4gKwkJCXhlbmJ1c19zd2l0Y2hfc3Rh dGUoeGJfZGV2LCBYZW5idXNTdGF0ZUluaXRpYWxpc2VkKTsKPiArCQlicmVhazsKPiArCj4gKwlj YXNlIFhlbmJ1c1N0YXRlQ29ubmVjdGVkOgo+ICsJCWlmICh4Yl9kZXYtPnN0YXRlICE9IFhlbmJ1 c1N0YXRlSW5pdGlhbGlzZWQpCj4gKwkJCWJyZWFrOwo+ICsKPiArCQlyZXQgPSBkaXNwbGJhY2tf Y29ubmVjdChmcm9udF9pbmZvKTsKPiArCQlpZiAocmV0IDwgMCkgewo+ICsJCQlkaXNwbGJhY2tf ZGlzY29ubmVjdChmcm9udF9pbmZvKTsKPiArCQkJeGVuYnVzX2Rldl9mYXRhbCh4Yl9kZXYsIHJl dCwKPiArCQkJCQkiaW5pdGlhbGl6aW5nIERSTSBkcml2ZXIiKTsKPiArCQl9IGVsc2UKPiArCQkJ eGVuYnVzX3N3aXRjaF9zdGF0ZSh4Yl9kZXYsIFhlbmJ1c1N0YXRlQ29ubmVjdGVkKTsKPiArCQli cmVhazsKPiArCj4gKwljYXNlIFhlbmJ1c1N0YXRlQ2xvc2luZzoKPiArCQkvKgo+ICsJCSAqIGlu IHRoaXMgc3RhdGUgYmFja2VuZCBzdGFydHMgZnJlZWluZyByZXNvdXJjZXMsCj4gKwkJICogc28g bGV0IGl0IGdvIGludG8gY2xvc2VkIHN0YXRlLCBzbyB3ZSBjYW4gYWxzbwo+ICsJCSAqIHJlbW92 ZSBvdXJzCj4gKwkJICovCj4gKwkJYnJlYWs7Cj4gKwo+ICsJY2FzZSBYZW5idXNTdGF0ZVVua25v d246Cj4gKwkJLyogZmFsbCB0aHJvdWdoICovCj4gKwljYXNlIFhlbmJ1c1N0YXRlQ2xvc2VkOgo+ ICsJCWlmICh4Yl9kZXYtPnN0YXRlID09IFhlbmJ1c1N0YXRlQ2xvc2VkKQo+ICsJCQlicmVhazsK PiArCj4gKwkJZGlzcGxiYWNrX2Rpc2Nvbm5lY3QoZnJvbnRfaW5mbyk7Cj4gKwkJYnJlYWs7Cj4g Kwl9Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgeGVuX2Rydl9wcm9iZShzdHJ1Y3QgeGVuYnVzX2Rl dmljZSAqeGJfZGV2LAo+ICsJCWNvbnN0IHN0cnVjdCB4ZW5idXNfZGV2aWNlX2lkICppZCkKPiAr ewo+ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5mbzsKPiArCXN0cnVjdCBk ZXZpY2UgKmRldiA9ICZ4Yl9kZXYtPmRldjsKPiArCWludCByZXQ7Cj4gKwo+ICsJLyoKPiArCSAq IFRoZSBkZXZpY2UgaXMgbm90IHNwYXduIGZyb20gYSBkZXZpY2UgdHJlZSwgc28gYXJjaF9zZXR1 cF9kbWFfb3BzCj4gKwkgKiBpcyBub3QgY2FsbGVkLCB0aHVzIGxlYXZpbmcgdGhlIGRldmljZSB3 aXRoIGR1bW15IERNQSBvcHMuCj4gKwkgKiBUaGlzIG1ha2VzIHRoZSBkZXZpY2UgcmV0dXJuIGVy cm9yIG9uIFBSSU1FIGJ1ZmZlciBpbXBvcnQsIHdoaWNoCj4gKwkgKiBpcyBub3QgY29ycmVjdDog dG8gZml4IHRoaXMgY2FsbCBvZl9kbWFfY29uZmlndXJlKCkgd2l0aCBhIE5VTEwKPiArCSAqIG5v ZGUgdG8gc2V0IGRlZmF1bHQgRE1BIG9wcy4KPiArCSAqLwo+ICsJZGV2LT5idXMtPmZvcmNlX2Rt YSA9IHRydWU7Cj4gKwlkZXYtPmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsK PiArCXJldCA9IG9mX2RtYV9jb25maWd1cmUoZGV2LCBOVUxMKTsKPiArCWlmIChyZXQgPCAwKSB7 Cj4gKwkJRFJNX0VSUk9SKCJDYW5ub3Qgc2V0dXAgRE1BIG9wcywgcmV0ICVkIiwgcmV0KTsKPiAr CQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCWZyb250X2luZm8gPSBkZXZtX2t6YWxsb2MoJnhi X2Rldi0+ZGV2LAo+ICsJCQlzaXplb2YoKmZyb250X2luZm8pLCBHRlBfS0VSTkVMKTsKPiArCWlm ICghZnJvbnRfaW5mbykKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlmcm9udF9pbmZvLT54 Yl9kZXYgPSB4Yl9kZXY7Cj4gKwlzcGluX2xvY2tfaW5pdCgmZnJvbnRfaW5mby0+aW9fbG9jayk7 Cj4gKwlJTklUX0xJU1RfSEVBRCgmZnJvbnRfaW5mby0+ZGJ1Zl9saXN0KTsKPiArCWRldl9zZXRf ZHJ2ZGF0YSgmeGJfZGV2LT5kZXYsIGZyb250X2luZm8pOwo+ICsKPiArCXJldHVybiB4ZW5idXNf c3dpdGNoX3N0YXRlKHhiX2RldiwgWGVuYnVzU3RhdGVJbml0aWFsaXNpbmcpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IHhlbl9kcnZfcmVtb3ZlKHN0cnVjdCB4ZW5idXNfZGV2aWNlICpkZXYpCj4g K3sKPiArCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2luZm8gPSBkZXZfZ2V0X2Ry dmRhdGEoJmRldi0+ZGV2KTsKPiArCWludCB0byA9IDEwMDsKPiArCj4gKwl4ZW5idXNfc3dpdGNo X3N0YXRlKGRldiwgWGVuYnVzU3RhdGVDbG9zaW5nKTsKPiArCj4gKwkvKgo+ICsJICogT24gZHJp dmVyIHJlbW92YWwgaXQgaXMgZGlzY29ubmVjdGVkIGZyb20gWGVuQnVzLAo+ICsJICogc28gbm8g YmFja2VuZCBzdGF0ZSBjaGFuZ2UgZXZlbnRzIGNvbWUgdmlhIC5vdGhlcmVuZF9jaGFuZ2VkCj4g KwkgKiBjYWxsYmFjay4gVGhpcyBwcmV2ZW50cyB1cyBmcm9tIGV4aXRpbmcgZ3JhY2VmdWxseSwg ZS5nLgo+ICsJICogc2lnbmFsaW5nIHRoZSBiYWNrZW5kIHRvIGZyZWUgZXZlbnQgY2hhbm5lbHMs IHdhaXRpbmcgZm9yIGl0cwo+ICsJICogc3RhdGUgdG8gY2hhbmdlIHRvIFhlbmJ1c1N0YXRlQ2xv c2VkIGFuZCBjbGVhbmluZyBhdCBvdXIgZW5kLgo+ICsJICogTm9ybWFsbHkgd2hlbiBmcm9udCBk cml2ZXIgcmVtb3ZlZCBiYWNrZW5kIHdpbGwgZmluYWxseSBnbyBpbnRvCj4gKwkgKiBYZW5idXNT dGF0ZUluaXRXYWl0IHN0YXRlLgo+ICsJICoKPiArCSAqIFdvcmthcm91bmQ6IHJlYWQgYmFja2Vu ZCdzIHN0YXRlIG1hbnVhbGx5IGFuZCB3YWl0IHdpdGggdGltZS1vdXQuCj4gKwkgKi8KPiArCXdo aWxlICgoeGVuYnVzX3JlYWRfdW5zaWduZWQoZnJvbnRfaW5mby0+eGJfZGV2LT5vdGhlcmVuZCwK PiArCQkJInN0YXRlIiwgWGVuYnVzU3RhdGVVbmtub3duKSAhPSBYZW5idXNTdGF0ZUluaXRXYWl0 KSAmJgo+ICsJCQl0by0tKQo+ICsJCW1zbGVlcCgxMCk7Cj4gKwo+ICsJaWYgKCF0bykKPiArCQlE Uk1fRVJST1IoIkJhY2tlbmQgc3RhdGUgaXMgJXMgd2hpbGUgcmVtb3ZpbmcgZHJpdmVyXG4iLAo+ ICsJCQl4ZW5idXNfc3Ryc3RhdGUoeGVuYnVzX3JlYWRfdW5zaWduZWQoCj4gKwkJCQkJZnJvbnRf aW5mby0+eGJfZGV2LT5vdGhlcmVuZCwKPiArCQkJCQkic3RhdGUiLCBYZW5idXNTdGF0ZVVua25v d24pKSk7Cj4gKwo+ICsJeGVuX2RybV9kcnZfZmluaShmcm9udF9pbmZvKTsKPiArCXhlbmJ1c19m cm9udGVuZF9jbG9zZWQoZGV2KTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29u c3Qgc3RydWN0IHhlbmJ1c19kZXZpY2VfaWQgeGVuX2RyaXZlcl9pZHNbXSA9IHsKPiArCXsgWEVO RElTUExfRFJJVkVSX05BTUUgfSwKPiArCXsgIiIgfQo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVj dCB4ZW5idXNfZHJpdmVyIHhlbl9kcml2ZXIgPSB7Cj4gKwkuaWRzID0geGVuX2RyaXZlcl9pZHMs Cj4gKwkucHJvYmUgPSB4ZW5fZHJ2X3Byb2JlLAo+ICsJLnJlbW92ZSA9IHhlbl9kcnZfcmVtb3Zl LAo+ICsJLm90aGVyZW5kX2NoYW5nZWQgPSBkaXNwbGJhY2tfY2hhbmdlZCwKPiArfTsKPiArCj4g K3N0YXRpYyBpbnQgX19pbml0IHhlbl9kcnZfaW5pdCh2b2lkKQo+ICt7Cj4gKwkvKiBBdCB0aGUg bW9tZW50IHdlIG9ubHkgc3VwcG9ydCBjYXNlIHdpdGggWEVOX1BBR0VfU0laRSA9PSBQQUdFX1NJ WkUgKi8KPiArCWlmIChYRU5fUEFHRV9TSVpFICE9IFBBR0VfU0laRSkgewo+ICsJCURSTV9FUlJP UihYRU5ESVNQTF9EUklWRVJfTkFNRSAiOiBkaWZmZXJlbnQga2VybmVsIGFuZCBYZW4gcGFnZSBz aXplcyBhcmUgbm90IHN1cHBvcnRlZDogWEVOX1BBR0VfU0laRSAoJWx1KSAhPSBQQUdFX1NJWkUg KCVsdSlcbiIsCj4gKwkJCQlYRU5fUEFHRV9TSVpFLCBQQUdFX1NJWkUpOwo+ICsJCXJldHVybiAt RU5PREVWOwo+ICsJfQo+ICsKPiArCWlmICgheGVuX2RvbWFpbigpKQo+ICsJCXJldHVybiAtRU5P REVWOwo+ICsKPiArCWlmICgheGVuX2hhc19wdl9kZXZpY2VzKCkpCj4gKwkJcmV0dXJuIC1FTk9E RVY7Cj4gKwo+ICsJRFJNX0lORk8oIlJlZ2lzdGVyaW5nIFhFTiBQViAiIFhFTkRJU1BMX0RSSVZF Ul9OQU1FICJcbiIpOwo+ICsJcmV0dXJuIHhlbmJ1c19yZWdpc3Rlcl9mcm9udGVuZCgmeGVuX2Ry aXZlcik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIF9fZXhpdCB4ZW5fZHJ2X2Zpbmkodm9pZCkK PiArewo+ICsJRFJNX0lORk8oIlVucmVnaXN0ZXJpbmcgWEVOIFBWICIgWEVORElTUExfRFJJVkVS X05BTUUgIlxuIik7Cj4gKwl4ZW5idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJnhlbl9kcml2ZXIpOwo+ ICt9Cj4gKwo+ICttb2R1bGVfaW5pdCh4ZW5fZHJ2X2luaXQpOwo+ICttb2R1bGVfZXhpdCh4ZW5f ZHJ2X2ZpbmkpOwo+ICsKPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJYZW4gcGFyYS12aXJ0dWFsaXpl ZCBkaXNwbGF5IGRldmljZSBmcm9udGVuZCIpOwo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7Cj4g K01PRFVMRV9BTElBUygieGVuOiJYRU5ESVNQTF9EUklWRVJfTkFNRSk7Cj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udC5oIGIvZHJpdmVycy9ncHUvZHJtL3hl bi94ZW5fZHJtX2Zyb250LmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAw MDAwMC4uMmQwM2RlMjg4Zjk2Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS94ZW4veGVuX2RybV9mcm9udC5oCj4gQEAgLTAsMCArMSwxODkgQEAKPiArLyogU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUICovCj4gKwo+ICsvKgo+ICsgKiAgWGVuIHBh cmEtdmlydHVhbCBEUk0gZGV2aWNlCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4 IEVQQU0gU3lzdGVtcyBJbmMuCj4gKyAqCj4gKyAqIEF1dGhvcjogT2xla3NhbmRyIEFuZHJ1c2hj aGVua28gPG9sZWtzYW5kcl9hbmRydXNoY2hlbmtvQGVwYW0uY29tPgo+ICsgKi8KPiArCj4gKyNp Zm5kZWYgX19YRU5fRFJNX0ZST05UX0hfCj4gKyNkZWZpbmUgX19YRU5fRFJNX0ZST05UX0hfCj4g Kwo+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fc2ltcGxlX2tt c19oZWxwZXIuaD4KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgo+ICsKPiAr I2luY2x1ZGUgInhlbl9kcm1fZnJvbnRfY2ZnLmgiCj4gKwo+ICsvKioKPiArICogRE9DOiBEcml2 ZXIgbW9kZXMgb2Ygb3BlcmF0aW9uIGluIHRlcm1zIG9mIGRpc3BsYXkgYnVmZmVycyB1c2VkCj4g KyAqCj4gKyAqIERlcGVuZGluZyBvbiB0aGUgcmVxdWlyZW1lbnRzIGZvciB0aGUgcGFyYS12aXJ0 dWFsaXplZCBlbnZpcm9ubWVudCwgbmFtZWx5Cj4gKyAqIHJlcXVpcmVtZW50cyBkaWN0YXRlZCBi eSB0aGUgYWNjb21wYW55aW5nIERSTS8odilHUFUgZHJpdmVycyBydW5uaW5nIGluIGJvdGgKPiAr ICogaG9zdCBhbmQgZ3Vlc3QgZW52aXJvbm1lbnRzLCBudW1iZXIgb2Ygb3BlcmF0aW5nIG1vZGVz IG9mIHBhcmEtdmlydHVhbGl6ZWQKPiArICogZGlzcGxheSBkcml2ZXIgYXJlIHN1cHBvcnRlZDoK PiArICoKPiArICogLSBkaXNwbGF5IGJ1ZmZlcnMgY2FuIGJlIGFsbG9jYXRlZCBieSBlaXRoZXIg ZnJvbnRlbmQgZHJpdmVyIG9yIGJhY2tlbmQKPiArICogLSBkaXNwbGF5IGJ1ZmZlcnMgY2FuIGJl IGFsbG9jYXRlZCB0byBiZSBjb250aWd1b3VzIGluIG1lbW9yeSBvciBub3QKPiArICoKPiArICog Tm90ZSEgRnJvbnRlbmQgZHJpdmVyIGl0c2VsZiBoYXMgbm8gZGVwZW5kZW5jeSBvbiBjb250aWd1 b3VzIG1lbW9yeSBmb3IKPiArICogaXRzIG9wZXJhdGlvbi4KPiArICovCj4gKwo+ICsvKioKPiAr ICogRE9DOiBCdWZmZXJzIGFsbG9jYXRlZCBieSB0aGUgZnJvbnRlbmQgZHJpdmVyCj4gKyAqCj4g KyAqIFRoZSBiZWxvdyBtb2RlcyBvZiBvcGVyYXRpb24gYXJlIGNvbmZpZ3VyZWQgYXQgY29tcGls ZS10aW1lIHZpYQo+ICsgKiBmcm9udGVuZCBkcml2ZXIncyBrZXJuZWwgY29uZmlndXJhdGlvbjoK PiArICovCj4gKwo+ICsvKioKPiArICogRE9DOiBXaXRoIEdFTSBDTUEgaGVscGVycwo+ICsgKgo+ ICsgKiBUaGlzIHVzZS1jYXNlIGlzIHVzZWZ1bCB3aGVuIHVzZWQgd2l0aCBhY2NvbXBhbnlpbmcg RFJNL3ZHUFUgZHJpdmVyIGluCj4gKyAqIGd1ZXN0IGRvbWFpbiB3aGljaCB3YXMgZGVzaWduZWQg dG8gb25seSB3b3JrIHdpdGggY29udGlndW91cyBidWZmZXJzLAo+ICsgKiBlLmcuIERSTSBkcml2 ZXIgYmFzZWQgb24gR0VNIENNQSBoZWxwZXJzOiBzdWNoIGRyaXZlcnMgY2FuIG9ubHkgaW1wb3J0 Cj4gKyAqIGNvbnRpZ3VvdXMgUFJJTUUgYnVmZmVycywgdGh1cyByZXF1aXJpbmcgZnJvbnRlbmQg ZHJpdmVyIHRvIHByb3ZpZGUKPiArICogc3VjaC4gSW4gb3JkZXIgdG8gaW1wbGVtZW50IHRoaXMg bW9kZSBvZiBvcGVyYXRpb24gcGFyYS12aXJ0dWFsaXplZAo+ICsgKiBmcm9udGVuZCBkcml2ZXIg Y2FuIGJlIGNvbmZpZ3VyZWQgdG8gdXNlIEdFTSBDTUEgaGVscGVycy4KPiArICovCj4gKwo+ICsv KioKPiArICogRE9DOiBXaXRob3V0IEdFTSBDTUEgaGVscGVycwo+ICsgKgo+ICsgKiBJZiBhY2Nv bXBhbnlpbmcgZHJpdmVycyBjYW4gY29wZSB3aXRoIG5vbi1jb250aWd1b3VzIG1lbW9yeSB0aGVu LCB0bwo+ICsgKiBsb3dlciBwcmVzc3VyZSBvbiBDTUEgc3Vic3lzdGVtIG9mIHRoZSBrZXJuZWws IGRyaXZlciBjYW4gYWxsb2NhdGUKPiArICogYnVmZmVycyBmcm9tIHN5c3RlbSBtZW1vcnkuCj4g KyAqCj4gKyAqIE5vdGUhIElmIHVzZWQgd2l0aCBhY2NvbXBhbnlpbmcgRFJNLyh2KUdQVSBkcml2 ZXJzIHRoaXMgbW9kZSBvZiBvcGVyYXRpb24KPiArICogbWF5IHJlcXVpcmUgSU9NTVUgc3VwcG9y dCBvbiB0aGUgcGxhdGZvcm0sIHNvIGFjY29tcGFueWluZyBEUk0vdkdQVQo+ICsgKiBoYXJkd2Fy ZSBjYW4gc3RpbGwgcmVhY2ggZGlzcGxheSBidWZmZXIgbWVtb3J5IHdoaWxlIGltcG9ydGluZyBQ UklNRQo+ICsgKiBidWZmZXJzIGZyb20gdGhlIGZyb250ZW5kIGRyaXZlci4KPiArICovCj4gKwo+ ICsvKioKPiArICogRE9DOiBCdWZmZXJzIGFsbG9jYXRlZCBieSB0aGUgYmFja2VuZAo+ICsgKgo+ ICsgKiBUaGlzIG1vZGUgb2Ygb3BlcmF0aW9uIGlzIHJ1bi10aW1lIGNvbmZpZ3VyZWQgdmlhIGd1 ZXN0IGRvbWFpbiBjb25maWd1cmF0aW9uCj4gKyAqIHRocm91Z2ggWGVuU3RvcmUgZW50cmllcy4K PiArICoKPiArICogRm9yIHN5c3RlbXMgd2hpY2ggZG8gbm90IHByb3ZpZGUgSU9NTVUgc3VwcG9y dCwgYnV0IGhhdmluZyBzcGVjaWZpYwo+ICsgKiByZXF1aXJlbWVudHMgZm9yIGRpc3BsYXkgYnVm ZmVycyBpdCBpcyBwb3NzaWJsZSB0byBhbGxvY2F0ZSBzdWNoIGJ1ZmZlcnMKPiArICogYXQgYmFj a2VuZCBzaWRlIGFuZCBzaGFyZSB0aG9zZSB3aXRoIHRoZSBmcm9udGVuZC4KPiArICogRm9yIGV4 YW1wbGUsIGlmIGhvc3QgZG9tYWluIGlzIDE6MSBtYXBwZWQgYW5kIGhhcyBEUk0vR1BVIGhhcmR3 YXJlIGV4cGVjdGluZwo+ICsgKiBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5LCB0aGlzIGFs bG93cyBpbXBsZW1lbnRpbmcgemVyby1jb3B5aW5nCj4gKyAqIHVzZS1jYXNlcy4KPiArICoKPiAr ICogTm90ZSwgd2hpbGUgdXNpbmcgdGhpcyBzY2VuYXJpbyB0aGUgZm9sbG93aW5nIHNob3VsZCBi ZSBjb25zaWRlcmVkOgo+ICsgKgo+ICsgKiAjLiBJZiBndWVzdCBkb21haW4gZGllcyB0aGVuIHBh Z2VzL2dyYW50cyByZWNlaXZlZCBmcm9tIHRoZSBiYWNrZW5kCj4gKyAqICAgIGNhbm5vdCBiZSBj bGFpbWVkIGJhY2sKPiArICoKPiArICogIy4gTWlzYmVoYXZpbmcgZ3Vlc3QgbWF5IHNlbmQgdG9v IG1hbnkgcmVxdWVzdHMgdG8gdGhlCj4gKyAqICAgIGJhY2tlbmQgZXhoYXVzdGluZyBpdHMgZ3Jh bnQgcmVmZXJlbmNlcyBhbmQgbWVtb3J5Cj4gKyAqICAgIChjb25zaWRlciB0aGlzIGZyb20gc2Vj dXJpdHkgUE9WKQo+ICsgKi8KPiArCj4gKy8qKgo+ICsgKiBET0M6IERyaXZlciBsaW1pdGF0aW9u cwo+ICsgKgo+ICsgKiAjLiBPbmx5IHByaW1hcnkgcGxhbmUgd2l0aG91dCBhZGRpdGlvbmFsIHBy b3BlcnRpZXMgaXMgc3VwcG9ydGVkLgo+ICsgKgo+ICsgKiAjLiBPbmx5IG9uZSB2aWRlbyBtb2Rl IHBlciBjb25uZWN0b3Igc3VwcG9ydGVkIHdoaWNoIGlzIGNvbmZpZ3VyZWQgdmlhIFhlblN0b3Jl Lgo+ICsgKgo+ICsgKiAjLiBBbGwgQ1JUQ3Mgb3BlcmF0ZSBhdCBmaXhlZCBmcmVxdWVuY3kgb2Yg NjBIei4KPiArICovCj4gKwo+ICsvKiB0aW1lb3V0IGluIG1zIHRvIHdhaXQgZm9yIGJhY2tlbmQg dG8gcmVzcG9uZCAqLwo+ICsjZGVmaW5lIFhFTl9EUk1fRlJPTlRfV0FJVF9CQUNLX01TCTMwMDAK PiArCj4gKyNpZm5kZWYgR1JBTlRfSU5WQUxJRF9SRUYKPiArLyoKPiArICogTm90ZSBvbiB1c2Fn ZSBvZiBncmFudCByZWZlcmVuY2UgMCBhcyBpbnZhbGlkIGdyYW50IHJlZmVyZW5jZToKPiArICog Z3JhbnQgcmVmZXJlbmNlIDAgaXMgdmFsaWQsIGJ1dCBuZXZlciBleHBvc2VkIHRvIGEgUFYgZHJp dmVyLAo+ICsgKiBiZWNhdXNlIG9mIHRoZSBmYWN0IGl0IGlzIGFscmVhZHkgaW4gdXNlL3Jlc2Vy dmVkIGJ5IHRoZSBQViBjb25zb2xlLgo+ICsgKi8KPiArI2RlZmluZSBHUkFOVF9JTlZBTElEX1JF RgkwCj4gKyNlbmRpZgo+ICsKPiArc3RydWN0IHhlbl9kcm1fZnJvbnRfaW5mbyB7Cj4gKwlzdHJ1 Y3QgeGVuYnVzX2RldmljZSAqeGJfZGV2Owo+ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX2lu Zm8gKmRybV9pbmZvOwo+ICsKPiArCS8qIHRvIHByb3RlY3QgZGF0YSBiZXR3ZWVuIGJhY2tlbmQg SU8gY29kZSBhbmQgaW50ZXJydXB0IGhhbmRsZXIgKi8KPiArCXNwaW5sb2NrX3QgaW9fbG9jazsK PiArCj4gKwlpbnQgbnVtX2V2dF9wYWlyczsKPiArCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2V2dGNo bmxfcGFpciAqZXZ0X3BhaXJzOwo+ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfY2ZnIGNmZzsKPiAr Cj4gKwkvKiBkaXNwbGF5IGJ1ZmZlcnMgKi8KPiArCXN0cnVjdCBsaXN0X2hlYWQgZGJ1Zl9saXN0 Owo+ICt9Owo+ICsKPiArc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX3BpcGVsaW5lIHsKPiArCXN0 cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9pbmZvICpkcm1faW5mbzsKPiArCj4gKwlpbnQgaW5kZXg7 Cj4gKwo+ICsJc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlIHBpcGU7Cj4gKwo+ICsJc3Ry dWN0IGRybV9jb25uZWN0b3IgY29ubjsKPiArCS8qIFRoZXNlIGFyZSBvbmx5IGZvciBjb25uZWN0 b3IgbW9kZSBjaGVja2luZyAqLwo+ICsJaW50IHdpZHRoLCBoZWlnaHQ7Cj4gKwo+ICsJc3RydWN0 IGRybV9wZW5kaW5nX3ZibGFua19ldmVudCAqcGVuZGluZ19ldmVudDsKPiArCj4gKwlzdHJ1Y3Qg ZGVsYXllZF93b3JrIHBmbGlwX3RvX3dvcmtlcjsKPiArCj4gKwlib29sIGNvbm5fY29ubmVjdGVk Owo+ICt9Owo+ICsKPiArc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX2luZm8gewo+ICsJc3RydWN0 IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5mbzsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpk cm1fZGV2Owo+ICsKPiArCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9waXBlbGluZSBwaXBlbGlu ZVtYRU5fRFJNX0ZST05UX01BWF9DUlRDU107Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHVp bnQ2NF90IHhlbl9kcm1fZnJvbnRfZmJfdG9fY29va2llKAo+ICsJCXN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiKQo+ICt7Cj4gKwlyZXR1cm4gKHVpbnQ2NF90KWZiOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW5saW5lIHVpbnQ2NF90IHhlbl9kcm1fZnJvbnRfZGJ1Zl90b19jb29raWUoCj4gKwkJc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqKQo+ICt7Cj4gKwlyZXR1cm4gKHVpbnQ2NF90KWdl bV9vYmo7Cj4gK30KPiArCj4gK2ludCB4ZW5fZHJtX2Zyb250X21vZGVfc2V0KHN0cnVjdCB4ZW5f ZHJtX2Zyb250X2RybV9waXBlbGluZSAqcGlwZWxpbmUsCj4gKwkJdWludDMyX3QgeCwgdWludDMy X3QgeSwgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwKPiArCQl1aW50MzJfdCBicHAs IHVpbnQ2NF90IGZiX2Nvb2tpZSk7Cj4gKwo+ICtpbnQgeGVuX2RybV9mcm9udF9kYnVmX2NyZWF0 ZV9mcm9tX3NndChzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvICpmcm9udF9pbmZvLAo+ICsJCXVp bnQ2NF90IGRidWZfY29va2llLCB1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0LAo+ICsJ CXVpbnQzMl90IGJwcCwgdWludDY0X3Qgc2l6ZSwgc3RydWN0IHNnX3RhYmxlICpzZ3QpOwo+ICsK PiAraW50IHhlbl9kcm1fZnJvbnRfZGJ1Zl9jcmVhdGVfZnJvbV9wYWdlcyhzdHJ1Y3QgeGVuX2Ry bV9mcm9udF9pbmZvICpmcm9udF9pbmZvLAo+ICsJCXVpbnQ2NF90IGRidWZfY29va2llLCB1aW50 MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0LAo+ICsJCXVpbnQzMl90IGJwcCwgdWludDY0X3Qg c2l6ZSwgc3RydWN0IHBhZ2UgKipwYWdlcyk7Cj4gKwo+ICtpbnQgeGVuX2RybV9mcm9udF9mYl9h dHRhY2goc3RydWN0IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5mbywKPiArCQl1aW50NjRf dCBkYnVmX2Nvb2tpZSwgdWludDY0X3QgZmJfY29va2llLCB1aW50MzJfdCB3aWR0aCwKPiArCQl1 aW50MzJfdCBoZWlnaHQsIHVpbnQzMl90IHBpeGVsX2Zvcm1hdCk7Cj4gKwo+ICtpbnQgeGVuX2Ry bV9mcm9udF9mYl9kZXRhY2goc3RydWN0IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5mbywK PiArCQl1aW50NjRfdCBmYl9jb29raWUpOwo+ICsKPiAraW50IHhlbl9kcm1fZnJvbnRfcGFnZV9m bGlwKHN0cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2luZm8sCj4gKwkJaW50IGNvbm5f aWR4LCB1aW50NjRfdCBmYl9jb29raWUpOwo+ICsKPiArdm9pZCB4ZW5fZHJtX2Zyb250X29uX2Zy YW1lX2RvbmUoc3RydWN0IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5mbywKPiArCQlpbnQg Y29ubl9pZHgsIHVpbnQ2NF90IGZiX2Nvb2tpZSk7Cj4gKwo+ICsjZW5kaWYgLyogX19YRU5fRFJN X0ZST05UX0hfICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9m cm9udF9jZmcuYyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9jZmcuYwo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi45YTBiMmI4ZTYxNjkKPiAt LS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2Nm Zy5jCj4gQEAgLTAsMCArMSw3NyBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMCBPUiBNSVQKPiArCj4gKy8qCj4gKyAqICBYZW4gcGFyYS12aXJ0dWFsIERSTSBkZXZpY2UK PiArICoKPiArICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggRVBBTSBTeXN0ZW1zIEluYy4KPiAr ICoKPiArICogQXV0aG9yOiBPbGVrc2FuZHIgQW5kcnVzaGNoZW5rbyA8b2xla3NhbmRyX2FuZHJ1 c2hjaGVua29AZXBhbS5jb20+Cj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4g Kwo+ICsjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Cj4gKwo+ICsjaW5jbHVkZSA8eGVuL2ludGVy ZmFjZS9pby9kaXNwbGlmLmg+Cj4gKyNpbmNsdWRlIDx4ZW4veGVuYnVzLmg+Cj4gKwo+ICsjaW5j bHVkZSAieGVuX2RybV9mcm9udC5oIgo+ICsjaW5jbHVkZSAieGVuX2RybV9mcm9udF9jZmcuaCIK PiArCj4gK3N0YXRpYyBpbnQgY2ZnX2Nvbm5lY3RvcihzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZv ICpmcm9udF9pbmZvLAo+ICsJCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2NmZ19jb25uZWN0b3IgKmNv bm5lY3RvciwKPiArCQljb25zdCBjaGFyICpwYXRoLCBpbnQgaW5kZXgpCj4gK3sKPiArCWNoYXIg KmNvbm5lY3Rvcl9wYXRoOwo+ICsKPiArCWNvbm5lY3Rvcl9wYXRoID0gZGV2bV9rYXNwcmludGYo JmZyb250X2luZm8tPnhiX2Rldi0+ZGV2LAo+ICsJCQlHRlBfS0VSTkVMLCAiJXMvJWQiLCBwYXRo LCBpbmRleCk7Cj4gKwlpZiAoIWNvbm5lY3Rvcl9wYXRoKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ ICsKPiArCWlmICh4ZW5idXNfc2NhbmYoWEJUX05JTCwgY29ubmVjdG9yX3BhdGgsIFhFTkRJU1BM X0ZJRUxEX1JFU09MVVRJT04sCj4gKwkJCSIlZCIgWEVORElTUExfUkVTT0xVVElPTl9TRVBBUkFU T1IgIiVkIiwKPiArCQkJJmNvbm5lY3Rvci0+d2lkdGgsICZjb25uZWN0b3ItPmhlaWdodCkgPCAw KSB7Cj4gKwkJLyogZWl0aGVyIG5vIGVudHJ5IGNvbmZpZ3VyZWQgb3Igd3JvbmcgcmVzb2x1dGlv biBzZXQgKi8KPiArCQljb25uZWN0b3ItPndpZHRoID0gMDsKPiArCQljb25uZWN0b3ItPmhlaWdo dCA9IDA7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJY29ubmVjdG9yLT54ZW5z dG9yZV9wYXRoID0gY29ubmVjdG9yX3BhdGg7Cj4gKwo+ICsJRFJNX0lORk8oIkNvbm5lY3RvciAl czogcmVzb2x1dGlvbiAlZHglZFxuIiwKPiArCQkJY29ubmVjdG9yX3BhdGgsIGNvbm5lY3Rvci0+ d2lkdGgsIGNvbm5lY3Rvci0+aGVpZ2h0KTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtpbnQg eGVuX2RybV9mcm9udF9jZmdfY2FyZChzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvICpmcm9udF9p bmZvLAo+ICsJCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2NmZyAqY2ZnKQo+ICt7Cj4gKwlzdHJ1Y3Qg eGVuYnVzX2RldmljZSAqeGJfZGV2ID0gZnJvbnRfaW5mby0+eGJfZGV2Owo+ICsJaW50IHJldCwg aTsKPiArCj4gKwlpZiAoeGVuYnVzX3JlYWRfdW5zaWduZWQoZnJvbnRfaW5mby0+eGJfZGV2LT5u b2RlbmFtZSwKPiArCQkJWEVORElTUExfRklFTERfQkVfQUxMT0MsIDApKSB7Cj4gKwkJRFJNX0lO Rk8oIkJhY2tlbmQgY2FuIHByb3ZpZGUgZGlzcGxheSBidWZmZXJzXG4iKTsKPiArCQljZmctPmJl X2FsbG9jID0gdHJ1ZTsKPiArCX0KPiArCj4gKwljZmctPm51bV9jb25uZWN0b3JzID0gMDsKPiAr CWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNmZy0+Y29ubmVjdG9ycyk7IGkrKykgewo+ICsJ CXJldCA9IGNmZ19jb25uZWN0b3IoZnJvbnRfaW5mbywKPiArCQkJCSZjZmctPmNvbm5lY3RvcnNb aV0sIHhiX2Rldi0+bm9kZW5hbWUsIGkpOwo+ICsJCWlmIChyZXQgPCAwKQo+ICsJCQlicmVhazsK PiArCQljZmctPm51bV9jb25uZWN0b3JzKys7Cj4gKwl9Cj4gKwo+ICsJaWYgKCFjZmctPm51bV9j b25uZWN0b3JzKSB7Cj4gKwkJRFJNX0VSUk9SKCJObyBjb25uZWN0b3IocykgY29uZmlndXJlZCBh dCAlc1xuIiwKPiArCQkJCXhiX2Rldi0+bm9kZW5hbWUpOwo+ICsJCXJldHVybiAtRU5PREVWOwo+ ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfY2ZnLmggYi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9k cm1fZnJvbnRfY2ZnLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAw MC4uNmU3YWY2NzBmOGNkCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94 ZW4veGVuX2RybV9mcm9udF9jZmcuaAo+IEBAIC0wLDAgKzEsMzcgQEAKPiArLyogU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUICovCj4gKwo+ICsvKgo+ICsgKiAgWGVuIHBh cmEtdmlydHVhbCBEUk0gZGV2aWNlCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4 IEVQQU0gU3lzdGVtcyBJbmMuCj4gKyAqCj4gKyAqIEF1dGhvcjogT2xla3NhbmRyIEFuZHJ1c2hj aGVua28gPG9sZWtzYW5kcl9hbmRydXNoY2hlbmtvQGVwYW0uY29tPgo+ICsgKi8KPiArCj4gKyNp Zm5kZWYgX19YRU5fRFJNX0ZST05UX0NGR19IXwo+ICsjZGVmaW5lIF9fWEVOX0RSTV9GUk9OVF9D RkdfSF8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ICsKPiArI2RlZmluZSBYRU5f RFJNX0ZST05UX01BWF9DUlRDUwk0Cj4gKwo+ICtzdHJ1Y3QgeGVuX2RybV9mcm9udF9jZmdfY29u bmVjdG9yIHsKPiArCWludCB3aWR0aDsKPiArCWludCBoZWlnaHQ7Cj4gKwljaGFyICp4ZW5zdG9y ZV9wYXRoOwo+ICt9Owo+ICsKPiArc3RydWN0IHhlbl9kcm1fZnJvbnRfY2ZnIHsKPiArCXN0cnVj dCB4ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2luZm87Cj4gKwkvKiBudW1iZXIgb2YgY29ubmVj dG9ycyBpbiB0aGlzIGNvbmZpZ3VyYXRpb24gKi8KPiArCWludCBudW1fY29ubmVjdG9yczsKPiAr CS8qIGNvbm5lY3RvciBjb25maWd1cmF0aW9ucyAqLwo+ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRf Y2ZnX2Nvbm5lY3RvciBjb25uZWN0b3JzW1hFTl9EUk1fRlJPTlRfTUFYX0NSVENTXTsKPiArCS8q IHNldCBpZiBkdW1iIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCBleHRlcm5hbGx5IG9uIGJhY2tlbmQg c2lkZSAqLwo+ICsJYm9vbCBiZV9hbGxvYzsKPiArfTsKPiArCj4gK2ludCB4ZW5fZHJtX2Zyb250 X2NmZ19jYXJkKHN0cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2luZm8sCj4gKwkJc3Ry dWN0IHhlbl9kcm1fZnJvbnRfY2ZnICpjZmcpOwo+ICsKPiArI2VuZGlmIC8qIF9fWEVOX0RSTV9G Uk9OVF9DRkdfSF8gKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJt X2Zyb250X2Nvbm4uYyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9jb25uLmMK PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uYjVkMGIyNzk4M2I4 Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9u dF9jb25uLmMKPiBAQCAtMCwwICsxLDExNSBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMCBPUiBNSVQKPiArCj4gKy8qCj4gKyAqICBYZW4gcGFyYS12aXJ0dWFsIERSTSBk ZXZpY2UKPiArICoKPiArICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggRVBBTSBTeXN0ZW1zIElu Yy4KPiArICoKPiArICogQXV0aG9yOiBPbGVrc2FuZHIgQW5kcnVzaGNoZW5rbyA8b2xla3NhbmRy X2FuZHJ1c2hjaGVua29AZXBhbS5jb20+Cj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1f YXRvbWljX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgo+ICsK PiArI2luY2x1ZGUgPHZpZGVvL3ZpZGVvbW9kZS5oPgo+ICsKPiArI2luY2x1ZGUgInhlbl9kcm1f ZnJvbnQuaCIKPiArI2luY2x1ZGUgInhlbl9kcm1fZnJvbnRfY29ubi5oIgo+ICsjaW5jbHVkZSAi eGVuX2RybV9mcm9udF9rbXMuaCIKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgeGVuX2RybV9mcm9udF9k cm1fcGlwZWxpbmUgKgo+ICt0b194ZW5fZHJtX3BpcGVsaW5lKHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IpCj4gK3sKPiArCXJldHVybiBjb250YWluZXJfb2YoY29ubmVjdG9yLCBzdHJ1 Y3QgeGVuX2RybV9mcm9udF9kcm1fcGlwZWxpbmUsIGNvbm4pOwo+ICt9Cj4gKwo+ICtzdGF0aWMg Y29uc3QgdWludDMyX3QgcGxhbmVfZm9ybWF0c1tdID0gewo+ICsJRFJNX0ZPUk1BVF9SR0I1NjUs Cj4gKwlEUk1fRk9STUFUX1JHQjg4OCwKPiArCURSTV9GT1JNQVRfWFJHQjg4ODgsCj4gKwlEUk1f Rk9STUFUX0FSR0I4ODg4LAo+ICsJRFJNX0ZPUk1BVF9YUkdCNDQ0NCwKPiArCURSTV9GT1JNQVRf QVJHQjQ0NDQsCj4gKwlEUk1fRk9STUFUX1hSR0IxNTU1LAo+ICsJRFJNX0ZPUk1BVF9BUkdCMTU1 NSwKPiArfTsKPiArCj4gK2NvbnN0IHVpbnQzMl90ICp4ZW5fZHJtX2Zyb250X2Nvbm5fZ2V0X2Zv cm1hdHMoaW50ICpmb3JtYXRfY291bnQpCj4gK3sKPiArCSpmb3JtYXRfY291bnQgPSBBUlJBWV9T SVpFKHBsYW5lX2Zvcm1hdHMpOwo+ICsJcmV0dXJuIHBsYW5lX2Zvcm1hdHM7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgY29ubmVjdG9yX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yLAo+ICsJCXN0cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0eCAqY3R4LAo+ICsJCWJvb2wg Zm9yY2UpCj4gK3sKPiArCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9waXBlbGluZSAqcGlwZWxp bmUgPQo+ICsJCQl0b194ZW5fZHJtX3BpcGVsaW5lKGNvbm5lY3Rvcik7Cj4gKwo+ICsJaWYgKGRy bV9kZXZfaXNfdW5wbHVnZ2VkKGNvbm5lY3Rvci0+ZGV2KSkKPiArCQlwaXBlbGluZS0+Y29ubl9j b25uZWN0ZWQgPSBmYWxzZTsKPiArCj4gKwlyZXR1cm4gcGlwZWxpbmUtPmNvbm5fY29ubmVjdGVk ID8gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQgOgo+ICsJCQljb25uZWN0b3Jfc3RhdHVzX2Rp c2Nvbm5lY3RlZDsKPiArfQo+ICsKPiArI2RlZmluZSBYRU5fRFJNX0NSVENfVlJFRlJFU0hfSFoJ NjAKPiArCj4gK3N0YXRpYyBpbnQgY29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubmVjdG9yKQo+ICt7Cj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1fcGlwZWxp bmUgKnBpcGVsaW5lID0KPiArCQkJdG9feGVuX2RybV9waXBlbGluZShjb25uZWN0b3IpOwo+ICsJ c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7Cj4gKwlzdHJ1Y3QgdmlkZW9tb2RlIHZpZGVv bW9kZTsKPiArCWludCB3aWR0aCwgaGVpZ2h0Owo+ICsKPiArCW1vZGUgPSBkcm1fbW9kZV9jcmVh dGUoY29ubmVjdG9yLT5kZXYpOwo+ICsJaWYgKCFtb2RlKQo+ICsJCXJldHVybiAwOwo+ICsKPiAr CW1lbXNldCgmdmlkZW9tb2RlLCAwLCBzaXplb2YodmlkZW9tb2RlKSk7Cj4gKwl2aWRlb21vZGUu aGFjdGl2ZSA9IHBpcGVsaW5lLT53aWR0aDsKPiArCXZpZGVvbW9kZS52YWN0aXZlID0gcGlwZWxp bmUtPmhlaWdodDsKPiArCXdpZHRoID0gdmlkZW9tb2RlLmhhY3RpdmUgKyB2aWRlb21vZGUuaGZy b250X3BvcmNoICsKPiArCQkJdmlkZW9tb2RlLmhiYWNrX3BvcmNoICsgdmlkZW9tb2RlLmhzeW5j X2xlbjsKPiArCWhlaWdodCA9IHZpZGVvbW9kZS52YWN0aXZlICsgdmlkZW9tb2RlLnZmcm9udF9w b3JjaCArCj4gKwkJCXZpZGVvbW9kZS52YmFja19wb3JjaCArIHZpZGVvbW9kZS52c3luY19sZW47 Cj4gKwl2aWRlb21vZGUucGl4ZWxjbG9jayA9IHdpZHRoICogaGVpZ2h0ICogWEVOX0RSTV9DUlRD X1ZSRUZSRVNIX0haOwo+ICsJbW9kZS0+dHlwZSA9IERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEIHwg RFJNX01PREVfVFlQRV9EUklWRVI7Cj4gKwo+ICsJZHJtX2Rpc3BsYXlfbW9kZV9mcm9tX3ZpZGVv bW9kZSgmdmlkZW9tb2RlLCBtb2RlKTsKPiArCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9y LCBtb2RlKTsKPiArCXJldHVybiAxOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRy bV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIGNvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7Cj4gKwku Z2V0X21vZGVzID0gY29ubmVjdG9yX2dldF9tb2RlcywKPiArCS5kZXRlY3RfY3R4ID0gY29ubmVj dG9yX2RldGVjdCwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rv cl9mdW5jcyBjb25uZWN0b3JfZnVuY3MgPSB7Cj4gKwkuZHBtcyA9IGRybV9oZWxwZXJfY29ubmVj dG9yX2RwbXMsCj4gKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5l Y3Rvcl9tb2RlcywKPiArCS5kZXN0cm95ID0gZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwLAo+ICsJLnJl c2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0LAo+ICsJLmF0b21pY19kdXBs aWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0YXRl LAo+ICsJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9y X2Rlc3Ryb3lfc3RhdGUsCj4gK307Cj4gKwo+ICtpbnQgeGVuX2RybV9mcm9udF9jb25uX2luaXQo c3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX2luZm8gKmRybV9pbmZvLAo+ICsJCXN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IpCj4gK3sKPiArCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9w aXBlbGluZSAqcGlwZWxpbmUgPQo+ICsJCQl0b194ZW5fZHJtX3BpcGVsaW5lKGNvbm5lY3Rvcik7 Cj4gKwo+ICsJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5lY3RvciwgJmNvbm5lY3Rvcl9o ZWxwZXJfZnVuY3MpOwo+ICsKPiArCXBpcGVsaW5lLT5jb25uX2Nvbm5lY3RlZCA9IHRydWU7Cj4g Kwo+ICsJY29ubmVjdG9yLT5wb2xsZWQgPSBEUk1fQ09OTkVDVE9SX1BPTExfQ09OTkVDVCB8Cj4g KwkJCURSTV9DT05ORUNUT1JfUE9MTF9ESVNDT05ORUNUOwo+ICsKPiArCXJldHVybiBkcm1fY29u bmVjdG9yX2luaXQoZHJtX2luZm8tPmRybV9kZXYsIGNvbm5lY3RvciwKPiArCQkmY29ubmVjdG9y X2Z1bmNzLCBEUk1fTU9ERV9DT05ORUNUT1JfVklSVFVBTCk7Cj4gK30KPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2Nvbm4uaCBiL2RyaXZlcnMvZ3B1L2Ry bS94ZW4veGVuX2RybV9mcm9udF9jb25uLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4 IDAwMDAwMDAwMDAwMC4uZjM4YzRiNmRiNWRmCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9jb25uLmgKPiBAQCAtMCwwICsxLDI3IEBACj4g Ky8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVCAqLwo+ICsKPiArLyoK PiArICogIFhlbiBwYXJhLXZpcnR1YWwgRFJNIGRldmljZQo+ICsgKgo+ICsgKiBDb3B5cmlnaHQg KEMpIDIwMTYtMjAxOCBFUEFNIFN5c3RlbXMgSW5jLgo+ICsgKgo+ICsgKiBBdXRob3I6IE9sZWtz YW5kciBBbmRydXNoY2hlbmtvIDxvbGVrc2FuZHJfYW5kcnVzaGNoZW5rb0BlcGFtLmNvbT4KPiAr ICovCj4gKwo+ICsjaWZuZGVmIF9fWEVOX0RSTV9GUk9OVF9DT05OX0hfCj4gKyNkZWZpbmUgX19Y RU5fRFJNX0ZST05UX0NPTk5fSF8KPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5j bHVkZSA8ZHJtL2RybV9jcnRjLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2VuY29kZXIuaD4KPiAr Cj4gKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Cj4gKwo+ICtzdHJ1Y3QgeGVuX2RybV9mcm9udF9k cm1faW5mbzsKPiArCj4gK2ludCB4ZW5fZHJtX2Zyb250X2Nvbm5faW5pdChzdHJ1Y3QgeGVuX2Ry bV9mcm9udF9kcm1faW5mbyAqZHJtX2luZm8sCj4gKwkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3Rvcik7Cj4gKwo+ICtjb25zdCB1aW50MzJfdCAqeGVuX2RybV9mcm9udF9jb25uX2dldF9m b3JtYXRzKGludCAqZm9ybWF0X2NvdW50KTsKPiArCj4gKyNlbmRpZiAvKiBfX1hFTl9EUk1fRlJP TlRfQ09OTl9IXyAqLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1f ZnJvbnRfZXZ0Y2hubC5jIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2V2dGNo bmwuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5lNTIxNzg1 ZmQyMmIKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJt X2Zyb250X2V2dGNobmwuYwo+IEBAIC0wLDAgKzEsMzgyIEBACj4gKy8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVAo+ICsKPiArLyoKPiArICogIFhlbiBwYXJhLXZpcnR1 YWwgRFJNIGRldmljZQo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBFUEFNIFN5 c3RlbXMgSW5jLgo+ICsgKgo+ICsgKiBBdXRob3I6IE9sZWtzYW5kciBBbmRydXNoY2hlbmtvIDxv bGVrc2FuZHJfYW5kcnVzaGNoZW5rb0BlcGFtLmNvbT4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8 ZHJtL2RybVAuaD4KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgo+ICsjaW5jbHVkZSA8 bGludXgvaXJxLmg+Cj4gKwo+ICsjaW5jbHVkZSA8eGVuL3hlbmJ1cy5oPgo+ICsjaW5jbHVkZSA8 eGVuL2V2ZW50cy5oPgo+ICsjaW5jbHVkZSA8eGVuL2dyYW50X3RhYmxlLmg+Cj4gKwo+ICsjaW5j bHVkZSAieGVuX2RybV9mcm9udC5oIgo+ICsjaW5jbHVkZSAieGVuX2RybV9mcm9udF9ldnRjaG5s LmgiCj4gKwo+ICtzdGF0aWMgaXJxcmV0dXJuX3QgZXZ0Y2hubF9pbnRlcnJ1cHRfY3RybChpbnQg aXJxLCB2b2lkICpkZXZfaWQpCj4gK3sKPiArCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2V2dGNobmwg KmV2dGNobmwgPSBkZXZfaWQ7Cj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvICpmcm9udF9p bmZvID0gZXZ0Y2hubC0+ZnJvbnRfaW5mbzsKPiArCXN0cnVjdCB4ZW5kaXNwbF9yZXNwICpyZXNw Owo+ICsJUklOR19JRFggaSwgcnA7Cj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsKPiArCWlm ICh1bmxpa2VseShldnRjaG5sLT5zdGF0ZSAhPSBFVlRDSE5MX1NUQVRFX0NPTk5FQ1RFRCkpCj4g KwkJcmV0dXJuIElSUV9IQU5ETEVEOwo+ICsKPiArCXNwaW5fbG9ja19pcnFzYXZlKCZmcm9udF9p bmZvLT5pb19sb2NrLCBmbGFncyk7Cj4gKwo+ICthZ2FpbjoKPiArCXJwID0gZXZ0Y2hubC0+dS5y ZXEucmluZy5zcmluZy0+cnNwX3Byb2Q7Cj4gKwkvKiBlbnN1cmUgd2Ugc2VlIHF1ZXVlZCByZXNw b25zZXMgdXAgdG8gcnAgKi8KPiArCXZpcnRfcm1iKCk7Cj4gKwo+ICsJZm9yIChpID0gZXZ0Y2hu bC0+dS5yZXEucmluZy5yc3BfY29uczsgaSAhPSBycDsgaSsrKSB7Cj4gKwkJcmVzcCA9IFJJTkdf R0VUX1JFU1BPTlNFKCZldnRjaG5sLT51LnJlcS5yaW5nLCBpKTsKPiArCQlpZiAodW5saWtlbHko cmVzcC0+aWQgIT0gZXZ0Y2hubC0+ZXZ0X2lkKSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCXN3 aXRjaCAocmVzcC0+b3BlcmF0aW9uKSB7Cj4gKwkJY2FzZSBYRU5ESVNQTF9PUF9QR19GTElQOgo+ ICsJCWNhc2UgWEVORElTUExfT1BfRkJfQVRUQUNIOgo+ICsJCWNhc2UgWEVORElTUExfT1BfRkJf REVUQUNIOgo+ICsJCWNhc2UgWEVORElTUExfT1BfREJVRl9DUkVBVEU6Cj4gKwkJY2FzZSBYRU5E SVNQTF9PUF9EQlVGX0RFU1RST1k6Cj4gKwkJY2FzZSBYRU5ESVNQTF9PUF9TRVRfQ09ORklHOgo+ ICsJCQlldnRjaG5sLT51LnJlcS5yZXNwX3N0YXR1cyA9IHJlc3AtPnN0YXR1czsKPiArCQkJY29t cGxldGUoJmV2dGNobmwtPnUucmVxLmNvbXBsZXRpb24pOwo+ICsJCQlicmVhazsKPiArCj4gKwkJ ZGVmYXVsdDoKPiArCQkJRFJNX0VSUk9SKCJPcGVyYXRpb24gJWQgaXMgbm90IHN1cHBvcnRlZFxu IiwKPiArCQkJCXJlc3AtPm9wZXJhdGlvbik7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCX0KPiAr Cj4gKwlldnRjaG5sLT51LnJlcS5yaW5nLnJzcF9jb25zID0gaTsKPiArCj4gKwlpZiAoaSAhPSBl dnRjaG5sLT51LnJlcS5yaW5nLnJlcV9wcm9kX3B2dCkgewo+ICsJCWludCBtb3JlX3RvX2RvOwo+ ICsKPiArCQlSSU5HX0ZJTkFMX0NIRUNLX0ZPUl9SRVNQT05TRVMoJmV2dGNobmwtPnUucmVxLnJp bmcsCj4gKwkJCQltb3JlX3RvX2RvKTsKPiArCQlpZiAobW9yZV90b19kbykKPiArCQkJZ290byBh Z2FpbjsKPiArCX0gZWxzZQo+ICsJCWV2dGNobmwtPnUucmVxLnJpbmcuc3JpbmctPnJzcF9ldmVu dCA9IGkgKyAxOwo+ICsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZyb250X2luZm8tPmlv X2xvY2ssIGZsYWdzKTsKPiArCXJldHVybiBJUlFfSEFORExFRDsKPiArfQo+ICsKPiArc3RhdGlj IGlycXJldHVybl90IGV2dGNobmxfaW50ZXJydXB0X2V2dChpbnQgaXJxLCB2b2lkICpkZXZfaWQp Cj4gK3sKPiArCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2V2dGNobmwgKmV2dGNobmwgPSBkZXZfaWQ7 Cj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvICpmcm9udF9pbmZvID0gZXZ0Y2hubC0+ZnJv bnRfaW5mbzsKPiArCXN0cnVjdCB4ZW5kaXNwbF9ldmVudF9wYWdlICpwYWdlID0gZXZ0Y2hubC0+ dS5ldnQucGFnZTsKPiArCXVpbnQzMl90IGNvbnMsIHByb2Q7Cj4gKwl1bnNpZ25lZCBsb25nIGZs YWdzOwo+ICsKPiArCWlmICh1bmxpa2VseShldnRjaG5sLT5zdGF0ZSAhPSBFVlRDSE5MX1NUQVRF X0NPTk5FQ1RFRCkpCj4gKwkJcmV0dXJuIElSUV9IQU5ETEVEOwo+ICsKPiArCXNwaW5fbG9ja19p cnFzYXZlKCZmcm9udF9pbmZvLT5pb19sb2NrLCBmbGFncyk7Cj4gKwo+ICsJcHJvZCA9IHBhZ2Ut PmluX3Byb2Q7Cj4gKwkvKiBlbnN1cmUgd2Ugc2VlIHJpbmcgY29udGVudHMgdXAgdG8gcHJvZCAq Lwo+ICsJdmlydF9ybWIoKTsKPiArCWlmIChwcm9kID09IHBhZ2UtPmluX2NvbnMpCj4gKwkJZ290 byBvdXQ7Cj4gKwo+ICsJZm9yIChjb25zID0gcGFnZS0+aW5fY29uczsgY29ucyAhPSBwcm9kOyBj b25zKyspIHsKPiArCQlzdHJ1Y3QgeGVuZGlzcGxfZXZ0ICpldmVudDsKPiArCj4gKwkJZXZlbnQg PSAmWEVORElTUExfSU5fUklOR19SRUYocGFnZSwgY29ucyk7Cj4gKwkJaWYgKHVubGlrZWx5KGV2 ZW50LT5pZCAhPSBldnRjaG5sLT5ldnRfaWQrKykpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlz d2l0Y2ggKGV2ZW50LT50eXBlKSB7Cj4gKwkJY2FzZSBYRU5ESVNQTF9FVlRfUEdfRkxJUDoKPiAr CQkJeGVuX2RybV9mcm9udF9vbl9mcmFtZV9kb25lKGZyb250X2luZm8sIGV2dGNobmwtPmluZGV4 LAo+ICsJCQkJCWV2ZW50LT5vcC5wZ19mbGlwLmZiX2Nvb2tpZSk7Cj4gKwkJCWJyZWFrOwo+ICsJ CX0KPiArCX0KPiArCXBhZ2UtPmluX2NvbnMgPSBjb25zOwo+ICsJLyogZW5zdXJlIHJpbmcgY29u dGVudHMgKi8KPiArCXZpcnRfd21iKCk7Cj4gKwo+ICtvdXQ6Cj4gKwlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZmcm9udF9pbmZvLT5pb19sb2NrLCBmbGFncyk7Cj4gKwlyZXR1cm4gSVJRX0hBTkRM RUQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGV2dGNobmxfZnJlZShzdHJ1Y3QgeGVuX2RybV9m cm9udF9pbmZvICpmcm9udF9pbmZvLAo+ICsJCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2V2dGNobmwg KmV2dGNobmwpCj4gK3sKPiArCXVuc2lnbmVkIGxvbmcgcGFnZSA9IDA7Cj4gKwo+ICsJaWYgKGV2 dGNobmwtPnR5cGUgPT0gRVZUQ0hOTF9UWVBFX1JFUSkKPiArCQlwYWdlID0gKHVuc2lnbmVkIGxv bmcpZXZ0Y2hubC0+dS5yZXEucmluZy5zcmluZzsKPiArCWVsc2UgaWYgKGV2dGNobmwtPnR5cGUg PT0gRVZUQ0hOTF9UWVBFX0VWVCkKPiArCQlwYWdlID0gKHVuc2lnbmVkIGxvbmcpZXZ0Y2hubC0+ dS5ldnQucGFnZTsKPiArCWlmICghcGFnZSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJZXZ0Y2hubC0+ c3RhdGUgPSBFVlRDSE5MX1NUQVRFX0RJU0NPTk5FQ1RFRDsKPiArCj4gKwlpZiAoZXZ0Y2hubC0+ dHlwZSA9PSBFVlRDSE5MX1RZUEVfUkVRKSB7Cj4gKwkJLyogcmVsZWFzZSBhbGwgd2hvIHN0aWxs IHdhaXRzIGZvciByZXNwb25zZSBpZiBhbnkgKi8KPiArCQlldnRjaG5sLT51LnJlcS5yZXNwX3N0 YXR1cyA9IC1FSU87Cj4gKwkJY29tcGxldGVfYWxsKCZldnRjaG5sLT51LnJlcS5jb21wbGV0aW9u KTsKPiArCX0KPiArCj4gKwlpZiAoZXZ0Y2hubC0+aXJxKQo+ICsJCXVuYmluZF9mcm9tX2lycWhh bmRsZXIoZXZ0Y2hubC0+aXJxLCBldnRjaG5sKTsKPiArCj4gKwlpZiAoZXZ0Y2hubC0+cG9ydCkK PiArCQl4ZW5idXNfZnJlZV9ldnRjaG4oZnJvbnRfaW5mby0+eGJfZGV2LCBldnRjaG5sLT5wb3J0 KTsKPiArCj4gKwkvKiBlbmQgYWNjZXNzIGFuZCBmcmVlIHRoZSBwYWdlICovCj4gKwlpZiAoZXZ0 Y2hubC0+Z3JlZiAhPSBHUkFOVF9JTlZBTElEX1JFRikKPiArCQlnbnR0YWJfZW5kX2ZvcmVpZ25f YWNjZXNzKGV2dGNobmwtPmdyZWYsIDAsIHBhZ2UpOwo+ICsKPiArCW1lbXNldChldnRjaG5sLCAw LCBzaXplb2YoKmV2dGNobmwpKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBldnRjaG5sX2FsbG9j KHN0cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2luZm8sIGludCBpbmRleCwKPiArCQlz dHJ1Y3QgeGVuX2RybV9mcm9udF9ldnRjaG5sICpldnRjaG5sLAo+ICsJCWVudW0geGVuX2RybV9m cm9udF9ldnRjaG5sX3R5cGUgdHlwZSkKPiArewo+ICsJc3RydWN0IHhlbmJ1c19kZXZpY2UgKnhi X2RldiA9IGZyb250X2luZm8tPnhiX2RldjsKPiArCXVuc2lnbmVkIGxvbmcgcGFnZTsKPiArCWdy YW50X3JlZl90IGdyZWY7Cj4gKwlpcnFfaGFuZGxlcl90IGhhbmRsZXI7Cj4gKwlpbnQgcmV0Owo+ ICsKPiArCW1lbXNldChldnRjaG5sLCAwLCBzaXplb2YoKmV2dGNobmwpKTsKPiArCWV2dGNobmwt PnR5cGUgPSB0eXBlOwo+ICsJZXZ0Y2hubC0+aW5kZXggPSBpbmRleDsKPiArCWV2dGNobmwtPmZy b250X2luZm8gPSBmcm9udF9pbmZvOwo+ICsJZXZ0Y2hubC0+c3RhdGUgPSBFVlRDSE5MX1NUQVRF X0RJU0NPTk5FQ1RFRDsKPiArCWV2dGNobmwtPmdyZWYgPSBHUkFOVF9JTlZBTElEX1JFRjsKPiAr Cj4gKwlwYWdlID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9OT0lPIHwgX19HRlBfSElHSCk7Cj4gKwlp ZiAoIXBhZ2UpIHsKPiArCQlyZXQgPSAtRU5PTUVNOwo+ICsJCWdvdG8gZmFpbDsKPiArCX0KPiAr Cj4gKwlpZiAodHlwZSA9PSBFVlRDSE5MX1RZUEVfUkVRKSB7Cj4gKwkJc3RydWN0IHhlbl9kaXNw bGlmX3NyaW5nICpzcmluZzsKPiArCj4gKwkJaW5pdF9jb21wbGV0aW9uKCZldnRjaG5sLT51LnJl cS5jb21wbGV0aW9uKTsKPiArCQltdXRleF9pbml0KCZldnRjaG5sLT51LnJlcS5yZXFfaW9fbG9j ayk7Cj4gKwkJc3JpbmcgPSAoc3RydWN0IHhlbl9kaXNwbGlmX3NyaW5nICopcGFnZTsKPiArCQlT SEFSRURfUklOR19JTklUKHNyaW5nKTsKPiArCQlGUk9OVF9SSU5HX0lOSVQoJmV2dGNobmwtPnUu cmVxLnJpbmcsCj4gKwkJCQlzcmluZywgWEVOX1BBR0VfU0laRSk7Cj4gKwo+ICsJCXJldCA9IHhl bmJ1c19ncmFudF9yaW5nKHhiX2Rldiwgc3JpbmcsIDEsICZncmVmKTsKPiArCQlpZiAocmV0IDwg MCkKPiArCQkJZ290byBmYWlsOwo+ICsKPiArCQloYW5kbGVyID0gZXZ0Y2hubF9pbnRlcnJ1cHRf Y3RybDsKPiArCX0gZWxzZSB7Cj4gKwkJZXZ0Y2hubC0+dS5ldnQucGFnZSA9IChzdHJ1Y3QgeGVu ZGlzcGxfZXZlbnRfcGFnZSAqKXBhZ2U7Cj4gKwo+ICsJCXJldCA9IGdudHRhYl9ncmFudF9mb3Jl aWduX2FjY2Vzcyh4Yl9kZXYtPm90aGVyZW5kX2lkLAo+ICsJCQkJdmlydF90b19nZm4oKHZvaWQg KilwYWdlKSwgMCk7Cj4gKwkJaWYgKHJldCA8IDApCj4gKwkJCWdvdG8gZmFpbDsKPiArCj4gKwkJ Z3JlZiA9IHJldDsKPiArCQloYW5kbGVyID0gZXZ0Y2hubF9pbnRlcnJ1cHRfZXZ0Owo+ICsJfQo+ ICsJZXZ0Y2hubC0+Z3JlZiA9IGdyZWY7Cj4gKwo+ICsJcmV0ID0geGVuYnVzX2FsbG9jX2V2dGNo bih4Yl9kZXYsICZldnRjaG5sLT5wb3J0KTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCWdvdG8gZmFp bDsKPiArCj4gKwlyZXQgPSBiaW5kX2V2dGNobl90b19pcnFoYW5kbGVyKGV2dGNobmwtPnBvcnQs Cj4gKwkJCWhhbmRsZXIsIDAsIHhiX2Rldi0+ZGV2aWNldHlwZSwgZXZ0Y2hubCk7Cj4gKwlpZiAo cmV0IDwgMCkKPiArCQlnb3RvIGZhaWw7Cj4gKwo+ICsJZXZ0Y2hubC0+aXJxID0gcmV0Owo+ICsJ cmV0dXJuIDA7Cj4gKwo+ICtmYWlsOgo+ICsJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUg cmluZzogJWRcbiIsIHJldCk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtpbnQgeGVuX2Ry bV9mcm9udF9ldnRjaG5sX2NyZWF0ZV9hbGwoc3RydWN0IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJv bnRfaW5mbykKPiArewo+ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfY2ZnICpjZmc7Cj4gKwlpbnQg cmV0LCBjb25uOwo+ICsKPiArCWNmZyA9ICZmcm9udF9pbmZvLT5jZmc7Cj4gKwo+ICsJZnJvbnRf aW5mby0+ZXZ0X3BhaXJzID0ga2NhbGxvYyhjZmctPm51bV9jb25uZWN0b3JzLAo+ICsJCQlzaXpl b2Yoc3RydWN0IHhlbl9kcm1fZnJvbnRfZXZ0Y2hubF9wYWlyKSwgR0ZQX0tFUk5FTCk7Cj4gKwlp ZiAoIWZyb250X2luZm8tPmV2dF9wYWlycykgewo+ICsJCXJldCA9IC1FTk9NRU07Cj4gKwkJZ290 byBmYWlsOwo+ICsJfQo+ICsKPiArCWZvciAoY29ubiA9IDA7IGNvbm4gPCBjZmctPm51bV9jb25u ZWN0b3JzOyBjb25uKyspIHsKPiArCQlyZXQgPSBldnRjaG5sX2FsbG9jKGZyb250X2luZm8sIGNv bm4sCj4gKwkJCQkmZnJvbnRfaW5mby0+ZXZ0X3BhaXJzW2Nvbm5dLnJlcSwKPiArCQkJCUVWVENI TkxfVFlQRV9SRVEpOwo+ICsJCWlmIChyZXQgPCAwKSB7Cj4gKwkJCURSTV9FUlJPUigiRXJyb3Ig YWxsb2NhdGluZyBjb250cm9sIGNoYW5uZWxcbiIpOwo+ICsJCQlnb3RvIGZhaWw7Cj4gKwkJfQo+ ICsKPiArCQlyZXQgPSBldnRjaG5sX2FsbG9jKGZyb250X2luZm8sIGNvbm4sCj4gKwkJCQkmZnJv bnRfaW5mby0+ZXZ0X3BhaXJzW2Nvbm5dLmV2dCwKPiArCQkJCUVWVENITkxfVFlQRV9FVlQpOwo+ ICsJCWlmIChyZXQgPCAwKSB7Cj4gKwkJCURSTV9FUlJPUigiRXJyb3IgYWxsb2NhdGluZyBpbi1l dmVudCBjaGFubmVsXG4iKTsKPiArCQkJZ290byBmYWlsOwo+ICsJCX0KPiArCX0KPiArCWZyb250 X2luZm8tPm51bV9ldnRfcGFpcnMgPSBjZmctPm51bV9jb25uZWN0b3JzOwo+ICsJcmV0dXJuIDA7 Cj4gKwo+ICtmYWlsOgo+ICsJeGVuX2RybV9mcm9udF9ldnRjaG5sX2ZyZWVfYWxsKGZyb250X2lu Zm8pOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBldnRjaG5sX3B1Ymxp c2goc3RydWN0IHhlbmJ1c190cmFuc2FjdGlvbiB4YnQsCj4gKwkJc3RydWN0IHhlbl9kcm1fZnJv bnRfZXZ0Y2hubCAqZXZ0Y2hubCwgY29uc3QgY2hhciAqcGF0aCwKPiArCQljb25zdCBjaGFyICpu b2RlX3JpbmcsIGNvbnN0IGNoYXIgKm5vZGVfY2hubCkKPiArewo+ICsJc3RydWN0IHhlbmJ1c19k ZXZpY2UgKnhiX2RldiA9IGV2dGNobmwtPmZyb250X2luZm8tPnhiX2RldjsKPiArCWludCByZXQ7 Cj4gKwo+ICsJLyogd3JpdGUgY29udHJvbCBjaGFubmVsIHJpbmcgcmVmZXJlbmNlICovCj4gKwly ZXQgPSB4ZW5idXNfcHJpbnRmKHhidCwgcGF0aCwgbm9kZV9yaW5nLCAiJXUiLCBldnRjaG5sLT5n cmVmKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJeGVuYnVzX2Rldl9lcnJvcih4Yl9kZXYsIHJl dCwgIndyaXRpbmcgcmluZy1yZWYiKTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCS8q IHdyaXRlIGV2ZW50IGNoYW5uZWwgcmluZyByZWZlcmVuY2UgKi8KPiArCXJldCA9IHhlbmJ1c19w cmludGYoeGJ0LCBwYXRoLCBub2RlX2NobmwsICIldSIsIGV2dGNobmwtPnBvcnQpOwo+ICsJaWYg KHJldCA8IDApIHsKPiArCQl4ZW5idXNfZGV2X2Vycm9yKHhiX2RldiwgcmV0LCAid3JpdGluZyBl dmVudCBjaGFubmVsIik7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsK PiArfQo+ICsKPiAraW50IHhlbl9kcm1fZnJvbnRfZXZ0Y2hubF9wdWJsaXNoX2FsbChzdHJ1Y3Qg eGVuX2RybV9mcm9udF9pbmZvICpmcm9udF9pbmZvKQo+ICt7Cj4gKwlzdHJ1Y3QgeGVuYnVzX3Ry YW5zYWN0aW9uIHhidDsKPiArCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2NmZyAqcGxhdF9kYXRhOwo+ ICsJaW50IHJldCwgY29ubjsKPiArCj4gKwlwbGF0X2RhdGEgPSAmZnJvbnRfaW5mby0+Y2ZnOwo+ ICsKPiArYWdhaW46Cj4gKwlyZXQgPSB4ZW5idXNfdHJhbnNhY3Rpb25fc3RhcnQoJnhidCk7Cj4g KwlpZiAocmV0IDwgMCkgewo+ICsJCXhlbmJ1c19kZXZfZmF0YWwoZnJvbnRfaW5mby0+eGJfZGV2 LCByZXQsCj4gKwkJCQkic3RhcnRpbmcgdHJhbnNhY3Rpb24iKTsKPiArCQlyZXR1cm4gcmV0Owo+ ICsJfQo+ICsKPiArCWZvciAoY29ubiA9IDA7IGNvbm4gPCBwbGF0X2RhdGEtPm51bV9jb25uZWN0 b3JzOyBjb25uKyspIHsKPiArCQlyZXQgPSBldnRjaG5sX3B1Ymxpc2goeGJ0LAo+ICsJCQkJJmZy b250X2luZm8tPmV2dF9wYWlyc1tjb25uXS5yZXEsCj4gKwkJCQlwbGF0X2RhdGEtPmNvbm5lY3Rv cnNbY29ubl0ueGVuc3RvcmVfcGF0aCwKPiArCQkJCVhFTkRJU1BMX0ZJRUxEX1JFUV9SSU5HX1JF RiwKPiArCQkJCVhFTkRJU1BMX0ZJRUxEX1JFUV9DSEFOTkVMKTsKPiArCQlpZiAocmV0IDwgMCkK PiArCQkJZ290byBmYWlsOwo+ICsKPiArCQlyZXQgPSBldnRjaG5sX3B1Ymxpc2goeGJ0LAo+ICsJ CQkJJmZyb250X2luZm8tPmV2dF9wYWlyc1tjb25uXS5ldnQsCj4gKwkJCQlwbGF0X2RhdGEtPmNv bm5lY3RvcnNbY29ubl0ueGVuc3RvcmVfcGF0aCwKPiArCQkJCVhFTkRJU1BMX0ZJRUxEX0VWVF9S SU5HX1JFRiwKPiArCQkJCVhFTkRJU1BMX0ZJRUxEX0VWVF9DSEFOTkVMKTsKPiArCQlpZiAocmV0 IDwgMCkKPiArCQkJZ290byBmYWlsOwo+ICsJfQo+ICsKPiArCXJldCA9IHhlbmJ1c190cmFuc2Fj dGlvbl9lbmQoeGJ0LCAwKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJaWYgKHJldCA9PSAtRUFH QUlOKQo+ICsJCQlnb3RvIGFnYWluOwo+ICsKPiArCQl4ZW5idXNfZGV2X2ZhdGFsKGZyb250X2lu Zm8tPnhiX2RldiwgcmV0LAo+ICsJCQkJImNvbXBsZXRpbmcgdHJhbnNhY3Rpb24iKTsKPiArCQln b3RvIGZhaWxfdG9fZW5kOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArZmFpbDoKPiAr CXhlbmJ1c190cmFuc2FjdGlvbl9lbmQoeGJ0LCAxKTsKPiArCj4gK2ZhaWxfdG9fZW5kOgo+ICsJ eGVuYnVzX2Rldl9mYXRhbChmcm9udF9pbmZvLT54Yl9kZXYsIHJldCwgIndyaXRpbmcgWGVuIHN0 b3JlIik7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICt2b2lkIHhlbl9kcm1fZnJvbnRfZXZ0 Y2hubF9mbHVzaChzdHJ1Y3QgeGVuX2RybV9mcm9udF9ldnRjaG5sICpldnRjaG5sKQo+ICt7Cj4g KwlpbnQgbm90aWZ5Owo+ICsKPiArCWV2dGNobmwtPnUucmVxLnJpbmcucmVxX3Byb2RfcHZ0Kys7 Cj4gKwlSSU5HX1BVU0hfUkVRVUVTVFNfQU5EX0NIRUNLX05PVElGWSgmZXZ0Y2hubC0+dS5yZXEu cmluZywgbm90aWZ5KTsKPiArCWlmIChub3RpZnkpCj4gKwkJbm90aWZ5X3JlbW90ZV92aWFfaXJx KGV2dGNobmwtPmlycSk7Cj4gK30KPiArCj4gK3ZvaWQgeGVuX2RybV9mcm9udF9ldnRjaG5sX3Nl dF9zdGF0ZShzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvICpmcm9udF9pbmZvLAo+ICsJCWVudW0g eGVuX2RybV9mcm9udF9ldnRjaG5sX3N0YXRlIHN0YXRlKQo+ICt7Cj4gKwl1bnNpZ25lZCBsb25n IGZsYWdzOwo+ICsJaW50IGk7Cj4gKwo+ICsJaWYgKCFmcm9udF9pbmZvLT5ldnRfcGFpcnMpCj4g KwkJcmV0dXJuOwo+ICsKPiArCXNwaW5fbG9ja19pcnFzYXZlKCZmcm9udF9pbmZvLT5pb19sb2Nr LCBmbGFncyk7Cj4gKwlmb3IgKGkgPSAwOyBpIDwgZnJvbnRfaW5mby0+bnVtX2V2dF9wYWlyczsg aSsrKSB7Cj4gKwkJZnJvbnRfaW5mby0+ZXZ0X3BhaXJzW2ldLnJlcS5zdGF0ZSA9IHN0YXRlOwo+ ICsJCWZyb250X2luZm8tPmV2dF9wYWlyc1tpXS5ldnQuc3RhdGUgPSBzdGF0ZTsKPiArCX0KPiAr CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZyb250X2luZm8tPmlvX2xvY2ssIGZsYWdzKTsKPiAr Cj4gK30KPiArCj4gK3ZvaWQgeGVuX2RybV9mcm9udF9ldnRjaG5sX2ZyZWVfYWxsKHN0cnVjdCB4 ZW5fZHJtX2Zyb250X2luZm8gKmZyb250X2luZm8pCj4gK3sKPiArCWludCBpOwo+ICsKPiArCWlm ICghZnJvbnRfaW5mby0+ZXZ0X3BhaXJzKQo+ICsJCXJldHVybjsKPiArCj4gKwlmb3IgKGkgPSAw OyBpIDwgZnJvbnRfaW5mby0+bnVtX2V2dF9wYWlyczsgaSsrKSB7Cj4gKwkJZXZ0Y2hubF9mcmVl KGZyb250X2luZm8sICZmcm9udF9pbmZvLT5ldnRfcGFpcnNbaV0ucmVxKTsKPiArCQlldnRjaG5s X2ZyZWUoZnJvbnRfaW5mbywgJmZyb250X2luZm8tPmV2dF9wYWlyc1tpXS5ldnQpOwo+ICsJfQo+ ICsKPiArCWtmcmVlKGZyb250X2luZm8tPmV2dF9wYWlycyk7Cj4gKwlmcm9udF9pbmZvLT5ldnRf cGFpcnMgPSBOVUxMOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVu X2RybV9mcm9udF9ldnRjaG5sLmggYi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRf ZXZ0Y2hubC5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjM4 Y2VhY2I4ZTljMQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGVuL3hl bl9kcm1fZnJvbnRfZXZ0Y2hubC5oCj4gQEAgLTAsMCArMSw4MSBAQAo+ICsvKiBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBNSVQgKi8KPiArCj4gKy8qCj4gKyAqICBYZW4gcGFy YS12aXJ0dWFsIERSTSBkZXZpY2UKPiArICoKPiArICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTgg RVBBTSBTeXN0ZW1zIEluYy4KPiArICoKPiArICogQXV0aG9yOiBPbGVrc2FuZHIgQW5kcnVzaGNo ZW5rbyA8b2xla3NhbmRyX2FuZHJ1c2hjaGVua29AZXBhbS5jb20+Cj4gKyAqLwo+ICsKPiArI2lm bmRlZiBfX1hFTl9EUk1fRlJPTlRfRVZUQ0hOTF9IXwo+ICsjZGVmaW5lIF9fWEVOX0RSTV9GUk9O VF9FVlRDSE5MX0hfCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgo+ICsjaW5j bHVkZSA8bGludXgvdHlwZXMuaD4KPiArCj4gKyNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL2lvL3Jp bmcuaD4KPiArI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvaW8vZGlzcGxpZi5oPgo+ICsKPiArLyoK PiArICogQWxsIG9wZXJhdGlvbnMgd2hpY2ggYXJlIG5vdCBjb25uZWN0b3Igb3JpZW50ZWQgdXNl IHRoaXMgY3RybCBldmVudCBjaGFubmVsLAo+ICsgKiBlLmcuIGZiX2F0dGFjaC9kZXN0cm95IHdo aWNoIGJlbG9uZyB0byBhIERSTSBkZXZpY2UsIG5vdCB0byBhIENSVEMuCj4gKyAqLwo+ICsjZGVm aW5lIEdFTkVSSUNfT1BfRVZUX0NITkwJMAo+ICsKPiArZW51bSB4ZW5fZHJtX2Zyb250X2V2dGNo bmxfc3RhdGUgewo+ICsJRVZUQ0hOTF9TVEFURV9ESVNDT05ORUNURUQsCj4gKwlFVlRDSE5MX1NU QVRFX0NPTk5FQ1RFRCwKPiArfTsKPiArCj4gK2VudW0geGVuX2RybV9mcm9udF9ldnRjaG5sX3R5 cGUgewo+ICsJRVZUQ0hOTF9UWVBFX1JFUSwKPiArCUVWVENITkxfVFlQRV9FVlQsCj4gK307Cj4g Kwo+ICtzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1faW5mbzsKPiArCj4gK3N0cnVjdCB4ZW5fZHJt X2Zyb250X2V2dGNobmwgewo+ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5m bzsKPiArCWludCBncmVmOwo+ICsJaW50IHBvcnQ7Cj4gKwlpbnQgaXJxOwo+ICsJaW50IGluZGV4 Owo+ICsJZW51bSB4ZW5fZHJtX2Zyb250X2V2dGNobmxfc3RhdGUgc3RhdGU7Cj4gKwllbnVtIHhl bl9kcm1fZnJvbnRfZXZ0Y2hubF90eXBlIHR5cGU7Cj4gKwkvKiBlaXRoZXIgcmVzcG9uc2UgaWQg b3IgaW5jb21pbmcgZXZlbnQgaWQgKi8KPiArCXVpbnQxNl90IGV2dF9pZDsKPiArCS8qIG5leHQg cmVxdWVzdCBpZCBvciBuZXh0IGV4cGVjdGVkIGV2ZW50IGlkICovCj4gKwl1aW50MTZfdCBldnRf bmV4dF9pZDsKPiArCXVuaW9uIHsKPiArCQlzdHJ1Y3Qgewo+ICsJCQlzdHJ1Y3QgeGVuX2Rpc3Bs aWZfZnJvbnRfcmluZyByaW5nOwo+ICsJCQlzdHJ1Y3QgY29tcGxldGlvbiBjb21wbGV0aW9uOwo+ ICsJCQkvKiBsYXRlc3QgcmVzcG9uc2Ugc3RhdHVzICovCj4gKwkJCWludCByZXNwX3N0YXR1czsK PiArCQkJLyogc2VyaWFsaXplciBmb3IgYmFja2VuZCBJTzogcmVxdWVzdC9yZXNwb25zZSAqLwo+ ICsJCQlzdHJ1Y3QgbXV0ZXggcmVxX2lvX2xvY2s7Cj4gKwkJfSByZXE7Cj4gKwkJc3RydWN0IHsK PiArCQkJc3RydWN0IHhlbmRpc3BsX2V2ZW50X3BhZ2UgKnBhZ2U7Cj4gKwkJfSBldnQ7Cj4gKwl9 IHU7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgeGVuX2RybV9mcm9udF9ldnRjaG5sX3BhaXIgewo+ICsJ c3RydWN0IHhlbl9kcm1fZnJvbnRfZXZ0Y2hubCByZXE7Cj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9u dF9ldnRjaG5sIGV2dDsKPiArfTsKPiArCj4gK2ludCB4ZW5fZHJtX2Zyb250X2V2dGNobmxfY3Jl YXRlX2FsbChzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvICpmcm9udF9pbmZvKTsKPiArCj4gK2lu dCB4ZW5fZHJtX2Zyb250X2V2dGNobmxfcHVibGlzaF9hbGwoc3RydWN0IHhlbl9kcm1fZnJvbnRf aW5mbyAqZnJvbnRfaW5mbyk7Cj4gKwo+ICt2b2lkIHhlbl9kcm1fZnJvbnRfZXZ0Y2hubF9mbHVz aChzdHJ1Y3QgeGVuX2RybV9mcm9udF9ldnRjaG5sICpldnRjaG5sKTsKPiArCj4gK3ZvaWQgeGVu X2RybV9mcm9udF9ldnRjaG5sX3NldF9zdGF0ZShzdHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvICpm cm9udF9pbmZvLAo+ICsJCWVudW0geGVuX2RybV9mcm9udF9ldnRjaG5sX3N0YXRlIHN0YXRlKTsK PiArCj4gK3ZvaWQgeGVuX2RybV9mcm9udF9ldnRjaG5sX2ZyZWVfYWxsKHN0cnVjdCB4ZW5fZHJt X2Zyb250X2luZm8gKmZyb250X2luZm8pOwo+ICsKPiArI2VuZGlmIC8qIF9fWEVOX0RSTV9GUk9O VF9FVlRDSE5MX0hfICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2Ry bV9mcm9udF9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uYwo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5hZDNjNmZlNGFmYTMK PiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250 X2dlbS5jCj4gQEAgLTAsMCArMSwzMDkgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAgT1IgTUlUCj4gKwo+ICsvKgo+ICsgKiAgWGVuIHBhcmEtdmlydHVhbCBEUk0gZGV2 aWNlCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEVQQU0gU3lzdGVtcyBJbmMu Cj4gKyAqCj4gKyAqIEF1dGhvcjogT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtzYW5kcl9h bmRydXNoY2hlbmtvQGVwYW0uY29tPgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlICJ4ZW5fZHJtX2Zy b250X2dlbS5oIgo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKyNpbmNsdWRlIDxkcm0v ZHJtX2NydGNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgo+ICsj aW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLmg+ Cj4gKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgo+ICsjaW5jbHVkZSA8bGludXgvc2ht ZW1fZnMuaD4KPiArCj4gKyNpbmNsdWRlIDx4ZW4vYmFsbG9vbi5oPgo+ICsKPiArI2luY2x1ZGUg Inhlbl9kcm1fZnJvbnQuaCIKPiArI2luY2x1ZGUgInhlbl9kcm1fZnJvbnRfc2hidWYuaCIKPiAr Cj4gK3N0cnVjdCB4ZW5fZ2VtX29iamVjdCB7Cj4gKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgYmFz ZTsKPiArCj4gKwlzaXplX3QgbnVtX3BhZ2VzOwo+ICsJc3RydWN0IHBhZ2UgKipwYWdlczsKPiAr Cj4gKwkvKiBzZXQgZm9yIGJ1ZmZlcnMgYWxsb2NhdGVkIGJ5IHRoZSBiYWNrZW5kICovCj4gKwli b29sIGJlX2FsbG9jOwo+ICsKPiArCS8qIHRoaXMgaXMgZm9yIGltcG9ydGVkIFBSSU1FIGJ1ZmZl ciAqLwo+ICsJc3RydWN0IHNnX3RhYmxlICpzZ3RfaW1wb3J0ZWQ7Cj4gK307Cj4gKwo+ICtzdGF0 aWMgaW5saW5lIHN0cnVjdCB4ZW5fZ2VtX29iamVjdCAqdG9feGVuX2dlbV9vYmooCj4gKwkJc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqKQo+ICt7Cj4gKwlyZXR1cm4gY29udGFpbmVyX29m KGdlbV9vYmosIHN0cnVjdCB4ZW5fZ2VtX29iamVjdCwgYmFzZSk7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgZ2VtX2FsbG9jX3BhZ2VzX2FycmF5KHN0cnVjdCB4ZW5fZ2VtX29iamVjdCAqeGVuX29i aiwKPiArCQlzaXplX3QgYnVmX3NpemUpCj4gK3sKPiArCXhlbl9vYmotPm51bV9wYWdlcyA9IERJ Vl9ST1VORF9VUChidWZfc2l6ZSwgUEFHRV9TSVpFKTsKPiArCXhlbl9vYmotPnBhZ2VzID0ga3Zt YWxsb2NfYXJyYXkoeGVuX29iai0+bnVtX3BhZ2VzLAo+ICsJCQlzaXplb2Yoc3RydWN0IHBhZ2Ug KiksIEdGUF9LRVJORUwpOwo+ICsJcmV0dXJuIHhlbl9vYmotPnBhZ2VzID09IE5VTEwgPyAtRU5P TUVNIDogMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZ2VtX2ZyZWVfcGFnZXNfYXJyYXkoc3Ry dWN0IHhlbl9nZW1fb2JqZWN0ICp4ZW5fb2JqKQo+ICt7Cj4gKwlrdmZyZWUoeGVuX29iai0+cGFn ZXMpOwo+ICsJeGVuX29iai0+cGFnZXMgPSBOVUxMOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0 IHhlbl9nZW1fb2JqZWN0ICpnZW1fY3JlYXRlX29iaihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ ICsJc2l6ZV90IHNpemUpCj4gK3sKPiArCXN0cnVjdCB4ZW5fZ2VtX29iamVjdCAqeGVuX29iajsK PiArCWludCByZXQ7Cj4gKwo+ICsJeGVuX29iaiA9IGt6YWxsb2Moc2l6ZW9mKCp4ZW5fb2JqKSwg R0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXhlbl9vYmopCj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01F TSk7Cj4gKwo+ICsJcmV0ID0gZHJtX2dlbV9vYmplY3RfaW5pdChkZXYsICZ4ZW5fb2JqLT5iYXNl LCBzaXplKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJa2ZyZWUoeGVuX29iaik7Cj4gKwkJcmV0 dXJuIEVSUl9QVFIocmV0KTsKPiArCX0KPiArCj4gKwlyZXR1cm4geGVuX29iajsKPiArfQo+ICsK PiArc3RhdGljIHN0cnVjdCB4ZW5fZ2VtX29iamVjdCAqZ2VtX2NyZWF0ZShzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCBzaXplX3Qgc2l6ZSkKPiArewo+ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJt X2luZm8gKmRybV9pbmZvID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiArCXN0cnVjdCB4ZW5fZ2VtX29i amVjdCAqeGVuX29iajsKPiArCWludCByZXQ7Cj4gKwo+ICsJc2l6ZSA9IHJvdW5kX3VwKHNpemUs IFBBR0VfU0laRSk7Cj4gKwl4ZW5fb2JqID0gZ2VtX2NyZWF0ZV9vYmooZGV2LCBzaXplKTsKPiAr CWlmIChJU19FUlJfT1JfTlVMTCh4ZW5fb2JqKSkKPiArCQlyZXR1cm4geGVuX29iajsKPiArCj4g KwlpZiAoZHJtX2luZm8tPmZyb250X2luZm8tPmNmZy5iZV9hbGxvYykgewo+ICsJCS8qCj4gKwkJ ICogYmFja2VuZCB3aWxsIGFsbG9jYXRlIHNwYWNlIGZvciB0aGlzIGJ1ZmZlciwgc28KPiArCQkg KiBvbmx5IGFsbG9jYXRlIGFycmF5IG9mIHBvaW50ZXJzIHRvIHBhZ2VzCj4gKwkJICovCj4gKwkJ cmV0ID0gZ2VtX2FsbG9jX3BhZ2VzX2FycmF5KHhlbl9vYmosIHNpemUpOwo+ICsJCWlmIChyZXQg PCAwKQo+ICsJCQlnb3RvIGZhaWw7Cj4gKwo+ICsJCS8qCj4gKwkJICogYWxsb2NhdGUgYmFsbG9v bmVkIHBhZ2VzIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBtYXAKPiArCQkgKiBncmFudCByZWZlcmVu Y2VzIHByb3ZpZGVkIGJ5IHRoZSBiYWNrZW5kCj4gKwkJICovCj4gKwkJcmV0ID0gYWxsb2NfeGVu YmFsbG9vbmVkX3BhZ2VzKHhlbl9vYmotPm51bV9wYWdlcywKPiArCQkJCXhlbl9vYmotPnBhZ2Vz KTsKPiArCQlpZiAocmV0IDwgMCkgewo+ICsJCQlEUk1fRVJST1IoIkNhbm5vdCBhbGxvY2F0ZSAl enUgYmFsbG9vbmVkIHBhZ2VzOiAlZFxuIiwKPiArCQkJCQl4ZW5fb2JqLT5udW1fcGFnZXMsIHJl dCk7Cj4gKwkJCWdlbV9mcmVlX3BhZ2VzX2FycmF5KHhlbl9vYmopOwo+ICsJCQlnb3RvIGZhaWw7 Cj4gKwkJfQo+ICsKPiArCQl4ZW5fb2JqLT5iZV9hbGxvYyA9IHRydWU7Cj4gKwkJcmV0dXJuIHhl bl9vYmo7Cj4gKwl9Cj4gKwkvKgo+ICsJICogbmVlZCB0byBhbGxvY2F0ZSBiYWNraW5nIHBhZ2Vz IG5vdywgc28gd2UgY2FuIHNoYXJlIHRob3NlCj4gKwkgKiB3aXRoIHRoZSBiYWNrZW5kCj4gKwkg Ki8KPiArCXhlbl9vYmotPm51bV9wYWdlcyA9IERJVl9ST1VORF9VUChzaXplLCBQQUdFX1NJWkUp Owo+ICsJeGVuX29iai0+cGFnZXMgPSBkcm1fZ2VtX2dldF9wYWdlcygmeGVuX29iai0+YmFzZSk7 Cj4gKwlpZiAoSVNfRVJSX09SX05VTEwoeGVuX29iai0+cGFnZXMpKSB7Cj4gKwkJcmV0ID0gUFRS X0VSUih4ZW5fb2JqLT5wYWdlcyk7Cj4gKwkJeGVuX29iai0+cGFnZXMgPSBOVUxMOwo+ICsJCWdv dG8gZmFpbDsKPiArCX0KPiArCj4gKwlyZXR1cm4geGVuX29iajsKPiArCj4gK2ZhaWw6Cj4gKwlE Uk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgd2l0aCBzaXplICV6dVxuIiwgc2l6 ZSk7Cj4gKwlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICt9Cj4gKwo+ICtzdHJ1Y3QgZHJtX2dlbV9v YmplY3QgKnhlbl9kcm1fZnJvbnRfZ2VtX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ ICsJCXNpemVfdCBzaXplKQo+ICt7Cj4gKwlzdHJ1Y3QgeGVuX2dlbV9vYmplY3QgKnhlbl9vYmo7 Cj4gKwo+ICsJeGVuX29iaiA9IGdlbV9jcmVhdGUoZGV2LCBzaXplKTsKPiArCWlmIChJU19FUlJf T1JfTlVMTCh4ZW5fb2JqKSkKPiArCQlyZXR1cm4gRVJSX0NBU1QoeGVuX29iaik7Cj4gKwo+ICsJ cmV0dXJuICZ4ZW5fb2JqLT5iYXNlOwo+ICt9Cj4gKwo+ICt2b2lkIHhlbl9kcm1fZnJvbnRfZ2Vt X2ZyZWVfb2JqZWN0X3VubG9ja2VkKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtX29iaikKPiAr ewo+ICsJc3RydWN0IHhlbl9nZW1fb2JqZWN0ICp4ZW5fb2JqID0gdG9feGVuX2dlbV9vYmooZ2Vt X29iaik7Cj4gKwo+ICsJaWYgKHhlbl9vYmotPmJhc2UuaW1wb3J0X2F0dGFjaCkgewo+ICsJCWRy bV9wcmltZV9nZW1fZGVzdHJveSgmeGVuX29iai0+YmFzZSwgeGVuX29iai0+c2d0X2ltcG9ydGVk KTsKPiArCQlnZW1fZnJlZV9wYWdlc19hcnJheSh4ZW5fb2JqKTsKPiArCX0gZWxzZSB7Cj4gKwkJ aWYgKHhlbl9vYmotPnBhZ2VzKSB7Cj4gKwkJCWlmICh4ZW5fb2JqLT5iZV9hbGxvYykgewo+ICsJ CQkJZnJlZV94ZW5iYWxsb29uZWRfcGFnZXMoeGVuX29iai0+bnVtX3BhZ2VzLAo+ICsJCQkJCQl4 ZW5fb2JqLT5wYWdlcyk7Cj4gKwkJCQlnZW1fZnJlZV9wYWdlc19hcnJheSh4ZW5fb2JqKTsKPiAr CQkJfSBlbHNlCj4gKwkJCQlkcm1fZ2VtX3B1dF9wYWdlcygmeGVuX29iai0+YmFzZSwKPiArCQkJ CQkJeGVuX29iai0+cGFnZXMsIHRydWUsIGZhbHNlKTsKPiArCQl9Cj4gKwl9Cj4gKwlkcm1fZ2Vt X29iamVjdF9yZWxlYXNlKGdlbV9vYmopOwo+ICsJa2ZyZWUoeGVuX29iaik7Cj4gK30KPiArCj4g K3N0cnVjdCBwYWdlICoqeGVuX2RybV9mcm9udF9nZW1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqZ2VtX29iaikKPiArewo+ICsJc3RydWN0IHhlbl9nZW1fb2JqZWN0ICp4ZW5fb2Jq ID0gdG9feGVuX2dlbV9vYmooZ2VtX29iaik7Cj4gKwo+ICsJcmV0dXJuIHhlbl9vYmotPnBhZ2Vz Owo+ICt9Cj4gKwo+ICtzdHJ1Y3Qgc2dfdGFibGUgKnhlbl9kcm1fZnJvbnRfZ2VtX2dldF9zZ190 YWJsZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmopCj4gK3sKPiArCXN0cnVjdCB4ZW5f Z2VtX29iamVjdCAqeGVuX29iaiA9IHRvX3hlbl9nZW1fb2JqKGdlbV9vYmopOwo+ICsKPiArCWlm ICgheGVuX29iai0+cGFnZXMpCj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwo+ICsJcmV0dXJuIGRybV9w cmltZV9wYWdlc190b19zZyh4ZW5fb2JqLT5wYWdlcywgeGVuX29iai0+bnVtX3BhZ2VzKTsKPiAr fQo+ICsKPiArc3RydWN0IGRybV9nZW1fb2JqZWN0ICp4ZW5fZHJtX2Zyb250X2dlbV9pbXBvcnRf c2dfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiArCQlzdHJ1Y3QgZG1hX2J1Zl9hdHRh Y2htZW50ICphdHRhY2gsIHN0cnVjdCBzZ190YWJsZSAqc2d0KQo+ICt7Cj4gKwlzdHJ1Y3QgeGVu X2RybV9mcm9udF9kcm1faW5mbyAqZHJtX2luZm8gPSBkZXYtPmRldl9wcml2YXRlOwo+ICsJc3Ry dWN0IHhlbl9nZW1fb2JqZWN0ICp4ZW5fb2JqOwo+ICsJc2l6ZV90IHNpemU7Cj4gKwlpbnQgcmV0 Owo+ICsKPiArCXNpemUgPSBhdHRhY2gtPmRtYWJ1Zi0+c2l6ZTsKPiArCXhlbl9vYmogPSBnZW1f Y3JlYXRlX29iaihkZXYsIHNpemUpOwo+ICsJaWYgKElTX0VSUl9PUl9OVUxMKHhlbl9vYmopKQo+ ICsJCXJldHVybiBFUlJfQ0FTVCh4ZW5fb2JqKTsKPiArCj4gKwlyZXQgPSBnZW1fYWxsb2NfcGFn ZXNfYXJyYXkoeGVuX29iaiwgc2l6ZSk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlyZXR1cm4gRVJS X1BUUihyZXQpOwo+ICsKPiArCXhlbl9vYmotPnNndF9pbXBvcnRlZCA9IHNndDsKPiArCj4gKwly ZXQgPSBkcm1fcHJpbWVfc2dfdG9fcGFnZV9hZGRyX2FycmF5cyhzZ3QsIHhlbl9vYmotPnBhZ2Vz LAo+ICsJCQlOVUxMLCB4ZW5fb2JqLT5udW1fcGFnZXMpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJ cmV0dXJuIEVSUl9QVFIocmV0KTsKPiArCj4gKwkvKgo+ICsJICogTi5CLiBBbHRob3VnaCB3ZSBo YXZlIGFuIEFQSSB0byBjcmVhdGUgZGlzcGxheSBidWZmZXIgZnJvbSBzZ3QKPiArCSAqIHdlIHVz ZSBwYWdlcyBBUEksIGJlY2F1c2Ugd2Ugc3RpbGwgbmVlZCB0aG9zZSBmb3IgR0VNIGhhbmRsaW5n LAo+ICsJICogZS5nLiBmb3IgbWFwcGluZyBldGMuCj4gKwkgKi8KPiArCXJldCA9IHhlbl9kcm1f ZnJvbnRfZGJ1Zl9jcmVhdGVfZnJvbV9wYWdlcyhkcm1faW5mby0+ZnJvbnRfaW5mbywKPiArCQkJ eGVuX2RybV9mcm9udF9kYnVmX3RvX2Nvb2tpZSgmeGVuX29iai0+YmFzZSksCj4gKwkJCTAsIDAs IDAsIHNpemUsIHhlbl9vYmotPnBhZ2VzKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiBF UlJfUFRSKHJldCk7Cj4gKwo+ICsJRFJNX0RFQlVHKCJJbXBvcnRlZCBidWZmZXIgb2Ygc2l6ZSAl enUgd2l0aCBuZW50cyAldVxuIiwKPiArCQlzaXplLCBzZ3QtPm5lbnRzKTsKPiArCj4gKwlyZXR1 cm4gJnhlbl9vYmotPmJhc2U7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZ2VtX21tYXBfb2JqKHN0 cnVjdCB4ZW5fZ2VtX29iamVjdCAqeGVuX29iaiwKPiArCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qg KnZtYSkKPiArewo+ICsJdW5zaWduZWQgbG9uZyBhZGRyID0gdm1hLT52bV9zdGFydDsKPiArCWlu dCBpOwo+ICsKPiArCS8qCj4gKwkgKiBjbGVhciB0aGUgVk1fUEZOTUFQIGZsYWcgdGhhdCB3YXMg c2V0IGJ5IGRybV9nZW1fbW1hcCgpLCBhbmQgc2V0IHRoZQo+ICsJICogdm1fcGdvZmYgKHVzZWQg YXMgYSBmYWtlIGJ1ZmZlciBvZmZzZXQgYnkgRFJNKSB0byAwIGFzIHdlIHdhbnQgdG8gbWFwCj4g KwkgKiB0aGUgd2hvbGUgYnVmZmVyLgo+ICsJICovCj4gKwl2bWEtPnZtX2ZsYWdzICY9IH5WTV9Q Rk5NQVA7Cj4gKwl2bWEtPnZtX2ZsYWdzIHw9IFZNX01JWEVETUFQOwo+ICsJdm1hLT52bV9wZ29m ZiA9IDA7Cj4gKwl2bWEtPnZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1fZ2V0 X3BhZ2VfcHJvdCh2bWEtPnZtX2ZsYWdzKSk7Cj4gKwo+ICsJLyoKPiArCSAqIHZtX29wZXJhdGlv bnNfc3RydWN0LmZhdWx0IGhhbmRsZXIgd2lsbCBiZSBjYWxsZWQgaWYgQ1BVIGFjY2Vzcwo+ICsJ ICogdG8gVk0gaXMgaGVyZS4gRm9yIEdQVXMgdGhpcyBpc24ndCB0aGUgY2FzZSwgYmVjYXVzZSBD UFUKPiArCSAqIGRvZXNuJ3QgdG91Y2ggdGhlIG1lbW9yeS4gSW5zZXJ0IHBhZ2VzIG5vdywgc28g Ym90aCBDUFUgYW5kIEdQVSBhcmUKPiArCSAqIGhhcHB5Lgo+ICsJICogRklYTUU6IGFzIHdlIGlu c2VydCBhbGwgdGhlIHBhZ2VzIG5vdyB0aGVuIG5vIC5mYXVsdCBoYW5kbGVyIG11c3QKPiArCSAq IGJlIGNhbGxlZCwgc28gZG9uJ3QgcHJvdmlkZSBvbmUKPiArCSAqLwo+ICsJZm9yIChpID0gMDsg aSA8IHhlbl9vYmotPm51bV9wYWdlczsgaSsrKSB7Cj4gKwkJaW50IHJldDsKPiArCj4gKwkJcmV0 ID0gdm1faW5zZXJ0X3BhZ2Uodm1hLCBhZGRyLCB4ZW5fb2JqLT5wYWdlc1tpXSk7Cj4gKwkJaWYg KHJldCA8IDApIHsKPiArCQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gaW5zZXJ0IHBhZ2VzIGludG8g dm1hOiAlZFxuIiwgcmV0KTsKPiArCQkJcmV0dXJuIHJldDsKPiArCQl9Cj4gKwo+ICsJCWFkZHIg Kz0gUEFHRV9TSVpFOwo+ICsJfQo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK2ludCB4ZW5fZHJt X2Zyb250X2dlbV9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qg KnZtYSkKPiArewo+ICsJc3RydWN0IHhlbl9nZW1fb2JqZWN0ICp4ZW5fb2JqOwo+ICsJc3RydWN0 IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqOwo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBkcm1f Z2VtX21tYXAoZmlscCwgdm1hKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4g Kwo+ICsJZ2VtX29iaiA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOwo+ICsJeGVuX29iaiA9IHRvX3hl bl9nZW1fb2JqKGdlbV9vYmopOwo+ICsJcmV0dXJuIGdlbV9tbWFwX29iaih4ZW5fb2JqLCB2bWEp Owo+ICt9Cj4gKwo+ICt2b2lkICp4ZW5fZHJtX2Zyb250X2dlbV9wcmltZV92bWFwKHN0cnVjdCBk cm1fZ2VtX29iamVjdCAqZ2VtX29iaikKPiArewo+ICsJc3RydWN0IHhlbl9nZW1fb2JqZWN0ICp4 ZW5fb2JqID0gdG9feGVuX2dlbV9vYmooZ2VtX29iaik7Cj4gKwo+ICsJaWYgKCF4ZW5fb2JqLT5w YWdlcykKPiArCQlyZXR1cm4gTlVMTDsKPiArCj4gKwlyZXR1cm4gdm1hcCh4ZW5fb2JqLT5wYWdl cywgeGVuX29iai0+bnVtX3BhZ2VzLAo+ICsJCQlWTV9NQVAsIHBncHJvdF93cml0ZWNvbWJpbmUo UEFHRV9LRVJORUwpKTsKPiArfQo+ICsKPiArdm9pZCB4ZW5fZHJtX2Zyb250X2dlbV9wcmltZV92 dW5tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqLAo+ICsJCXZvaWQgKnZhZGRyKQo+ ICt7Cj4gKwl2dW5tYXAodmFkZHIpOwo+ICt9Cj4gKwo+ICtpbnQgeGVuX2RybV9mcm9udF9nZW1f cHJpbWVfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmosCj4gKwkJc3RydWN0IHZt X2FyZWFfc3RydWN0ICp2bWEpCj4gK3sKPiArCXN0cnVjdCB4ZW5fZ2VtX29iamVjdCAqeGVuX29i ajsKPiArCWludCByZXQ7Cj4gKwo+ICsJcmV0ID0gZHJtX2dlbV9tbWFwX29iaihnZW1fb2JqLCBn ZW1fb2JqLT5zaXplLCB2bWEpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJuIHJldDsKPiAr Cj4gKwl4ZW5fb2JqID0gdG9feGVuX2dlbV9vYmooZ2VtX29iaik7Cj4gKwlyZXR1cm4gZ2VtX21t YXBfb2JqKHhlbl9vYmosIHZtYSk7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L3hlbi94ZW5fZHJtX2Zyb250X2dlbS5oIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zy b250X2dlbS5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmE5 NDEzMGExZDczZQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGVuL3hl bl9kcm1fZnJvbnRfZ2VtLmgKPiBAQCAtMCwwICsxLDQxIEBACj4gKy8qIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVCAqLwo+ICsKPiArLyoKPiArICogIFhlbiBwYXJhLXZp cnR1YWwgRFJNIGRldmljZQo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBFUEFN IFN5c3RlbXMgSW5jLgo+ICsgKgo+ICsgKiBBdXRob3I6IE9sZWtzYW5kciBBbmRydXNoY2hlbmtv IDxvbGVrc2FuZHJfYW5kcnVzaGNoZW5rb0BlcGFtLmNvbT4KPiArICovCj4gKwo+ICsjaWZuZGVm IF9fWEVOX0RSTV9GUk9OVF9HRU1fSAo+ICsjZGVmaW5lIF9fWEVOX0RSTV9GUk9OVF9HRU1fSAo+ ICsKPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKwo+ICtzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Knhlbl9kcm1fZnJvbnRfZ2VtX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsJCXNp emVfdCBzaXplKTsKPiArCj4gK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqeGVuX2RybV9mcm9udF9n ZW1faW1wb3J0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJc3RydWN0IGRt YV9idWZfYXR0YWNobWVudCAqYXR0YWNoLCBzdHJ1Y3Qgc2dfdGFibGUgKnNndCk7Cj4gKwo+ICtz dHJ1Y3Qgc2dfdGFibGUgKnhlbl9kcm1fZnJvbnRfZ2VtX2dldF9zZ190YWJsZShzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKmdlbV9vYmopOwo+ICsKPiArc3RydWN0IHBhZ2UgKip4ZW5fZHJtX2Zyb250 X2dlbV9nZXRfcGFnZXMoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwo+ICsKPiArdm9pZCB4 ZW5fZHJtX2Zyb250X2dlbV9mcmVlX29iamVjdF91bmxvY2tlZChzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKmdlbV9vYmopOwo+ICsKPiArI2lmbmRlZiBDT05GSUdfRFJNX1hFTl9GUk9OVEVORF9DTUEK PiArCj4gK2ludCB4ZW5fZHJtX2Zyb250X2dlbV9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1 Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7Cj4gKwo+ICt2b2lkICp4ZW5fZHJtX2Zyb250X2dlbV9w cmltZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtX29iaik7Cj4gKwo+ICt2b2lkIHhl bl9kcm1fZnJvbnRfZ2VtX3ByaW1lX3Z1bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9v YmosCj4gKwkJdm9pZCAqdmFkZHIpOwo+ICsKPiAraW50IHhlbl9kcm1fZnJvbnRfZ2VtX3ByaW1l X21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqLAo+ICsJCXN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1hKTsKPiArI2VuZGlmCj4gKwo+ICsjZW5kaWYgLyogX19YRU5fRFJNX0ZST05U X0dFTV9IICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9u dF9nZW1fY21hLmMgYi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfZ2VtX2NtYS5j Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmUwY2ExZTExM2Rm OQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJv bnRfZ2VtX2NtYS5jCj4gQEAgLTAsMCArMSw3OCBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMCBPUiBNSVQKPiArCj4gKy8qCj4gKyAqICBYZW4gcGFyYS12aXJ0dWFsIERS TSBkZXZpY2UKPiArICoKPiArICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggRVBBTSBTeXN0ZW1z IEluYy4KPiArICoKPiArICogQXV0aG9yOiBPbGVrc2FuZHIgQW5kcnVzaGNoZW5rbyA8b2xla3Nh bmRyX2FuZHJ1c2hjaGVua29AZXBhbS5jb20+Cj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGRybS9k cm1QLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2dlbS5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9m Yl9jbWFfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVyLmg+Cj4g Kwo+ICsjaW5jbHVkZSAieGVuX2RybV9mcm9udC5oIgo+ICsjaW5jbHVkZSAieGVuX2RybV9mcm9u dF9nZW0uaCIKPiArCj4gK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqeGVuX2RybV9mcm9udF9nZW1f aW1wb3J0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJc3RydWN0IGRtYV9i dWZfYXR0YWNobWVudCAqYXR0YWNoLCBzdHJ1Y3Qgc2dfdGFibGUgKnNndCkKPiArewo+ICsJc3Ry dWN0IHhlbl9kcm1fZnJvbnRfZHJtX2luZm8gKmRybV9pbmZvID0gZGV2LT5kZXZfcHJpdmF0ZTsK PiArCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtX29iajsKPiArCXN0cnVjdCBkcm1fZ2VtX2Nt YV9vYmplY3QgKmNtYV9vYmo7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWdlbV9vYmogPSBkcm1fZ2Vt X2NtYV9wcmltZV9pbXBvcnRfc2dfdGFibGUoZGV2LCBhdHRhY2gsIHNndCk7Cj4gKwlpZiAoSVNf RVJSX09SX05VTEwoZ2VtX29iaikpCj4gKwkJcmV0dXJuIGdlbV9vYmo7Cj4gKwo+ICsJY21hX29i aiA9IHRvX2RybV9nZW1fY21hX29iaihnZW1fb2JqKTsKPiArCj4gKwlyZXQgPSB4ZW5fZHJtX2Zy b250X2RidWZfY3JlYXRlX2Zyb21fc2d0KAo+ICsJCQlkcm1faW5mby0+ZnJvbnRfaW5mbywKPiAr CQkJeGVuX2RybV9mcm9udF9kYnVmX3RvX2Nvb2tpZShnZW1fb2JqKSwKPiArCQkJMCwgMCwgMCwg Z2VtX29iai0+c2l6ZSwKPiArCQkJZHJtX2dlbV9jbWFfcHJpbWVfZ2V0X3NnX3RhYmxlKGdlbV9v YmopKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gKwo+ICsJ RFJNX0RFQlVHKCJJbXBvcnRlZCBDTUEgYnVmZmVyIG9mIHNpemUgJXp1XG4iLCBnZW1fb2JqLT5z aXplKTsKPiArCj4gKwlyZXR1cm4gZ2VtX29iajsKPiArfQo+ICsKPiArc3RydWN0IHNnX3RhYmxl ICp4ZW5fZHJtX2Zyb250X2dlbV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpn ZW1fb2JqKQo+ICt7Cj4gKwlyZXR1cm4gZHJtX2dlbV9jbWFfcHJpbWVfZ2V0X3NnX3RhYmxlKGdl bV9vYmopOwo+ICt9Cj4gKwo+ICtzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKnhlbl9kcm1fZnJvbnRf Z2VtX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICsJCXNpemVfdCBzaXplKQo+ICt7 Cj4gKwlzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1faW5mbyAqZHJtX2luZm8gPSBkZXYtPmRldl9w cml2YXRlOwo+ICsJc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqY21hX29iajsKPiArCj4gKwlp ZiAoZHJtX2luZm8tPmZyb250X2luZm8tPmNmZy5iZV9hbGxvYykgewo+ICsJCS8qIFRoaXMgdXNl LWNhc2UgaXMgbm90IHlldCBzdXBwb3J0ZWQgYW5kIHByb2JhYmx5IHdvbid0IGJlICovCj4gKwkJ RFJNX0VSUk9SKCJCYWNrZW5kIGFsbG9jYXRlZCBidWZmZXJzIGFuZCBDTUEgaGVscGVycyBhcmUg bm90IHN1cHBvcnRlZCBhdCB0aGUgc2FtZSB0aW1lXG4iKTsKPiArCQlyZXR1cm4gRVJSX1BUUigt RUlOVkFMKTsKPiArCX0KPiArCj4gKwljbWFfb2JqID0gZHJtX2dlbV9jbWFfY3JlYXRlKGRldiwg c2l6ZSk7Cj4gKwlpZiAoSVNfRVJSX09SX05VTEwoY21hX29iaikpCj4gKwkJcmV0dXJuIEVSUl9D QVNUKGNtYV9vYmopOwo+ICsKPiArCXJldHVybiAmY21hX29iai0+YmFzZTsKPiArfQo+ICsKPiAr dm9pZCB4ZW5fZHJtX2Zyb250X2dlbV9mcmVlX29iamVjdF91bmxvY2tlZChzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKmdlbV9vYmopCj4gK3sKPiArCWRybV9nZW1fY21hX2ZyZWVfb2JqZWN0KGdlbV9v YmopOwo+ICt9Cj4gKwo+ICtzdHJ1Y3QgcGFnZSAqKnhlbl9kcm1fZnJvbnRfZ2VtX2dldF9wYWdl cyhzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmopCj4gK3sKPiArCXJldHVybiBOVUxMOwo+ ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9rbXMu YyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9rbXMuYwo+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi41NDUwNDlkZmFmMGEKPiAtLS0gL2Rldi9u dWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2ttcy5jCj4gQEAg LTAsMCArMSwzNzEgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1Ig TUlUCj4gKwo+ICsvKgo+ICsgKiAgWGVuIHBhcmEtdmlydHVhbCBEUk0gZGV2aWNlCj4gKyAqCj4g KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEVQQU0gU3lzdGVtcyBJbmMuCj4gKyAqCj4gKyAq IEF1dGhvcjogT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtzYW5kcl9hbmRydXNoY2hlbmtv QGVwYW0uY29tPgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlICJ4ZW5fZHJtX2Zyb250X2ttcy5oIgo+ ICsKPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5o Pgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0v ZHJtX2NydGNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2dlbS5oPgo+ICsjaW5jbHVk ZSA8ZHJtL2RybV9nZW1fZnJhbWVidWZmZXJfaGVscGVyLmg+Cj4gKwo+ICsjaW5jbHVkZSAieGVu X2RybV9mcm9udC5oIgo+ICsjaW5jbHVkZSAieGVuX2RybV9mcm9udF9jb25uLmgiCj4gKwo+ICsv Kgo+ICsgKiBUaW1lb3V0IGluIG1zIHRvIHdhaXQgZm9yIGZyYW1lIGRvbmUgZXZlbnQgZnJvbSB0 aGUgYmFja2VuZDoKPiArICogbXVzdCBiZSBhIGJpdCBtb3JlIHRoYW4gSU8gdGltZS1vdXQKPiAr ICovCj4gKyNkZWZpbmUgRlJBTUVfRE9ORV9UT19NUwkoWEVOX0RSTV9GUk9OVF9XQUlUX0JBQ0tf TVMgKyAxMDApCj4gKwo+ICtzdGF0aWMgc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX3BpcGVsaW5l ICoKPiArdG9feGVuX2RybV9waXBlbGluZShzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUg KnBpcGUpCj4gK3sKPiArCXJldHVybiBjb250YWluZXJfb2YocGlwZSwgc3RydWN0IHhlbl9kcm1f ZnJvbnRfZHJtX3BpcGVsaW5lLCBwaXBlKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZmJfZGVz dHJveShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKPiArewo+ICsJc3RydWN0IHhlbl9kcm1f ZnJvbnRfZHJtX2luZm8gKmRybV9pbmZvID0gZmItPmRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlpbnQg aWR4Owo+ICsKPiArCWlmIChkcm1fZGV2X2VudGVyKGZiLT5kZXYsICZpZHgpKSB7Cj4gKwkJeGVu X2RybV9mcm9udF9mYl9kZXRhY2goZHJtX2luZm8tPmZyb250X2luZm8sCj4gKwkJCQl4ZW5fZHJt X2Zyb250X2ZiX3RvX2Nvb2tpZShmYikpOwo+ICsJCWRybV9kZXZfZXhpdChpZHgpOwo+ICsJfQo+ ICsJZHJtX2dlbV9mYl9kZXN0cm95KGZiKTsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBkcm1f ZnJhbWVidWZmZXJfZnVuY3MgZmJfZnVuY3MgPSB7Cj4gKwkuZGVzdHJveSA9IGZiX2Rlc3Ryb3ks Cj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmJfY3JlYXRlKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJc3RydWN0IGRybV9maWxlICpmaWxwLCBjb25zdCBz dHJ1Y3QgZHJtX21vZGVfZmJfY21kMiAqbW9kZV9jbWQpCj4gK3sKPiArCXN0cnVjdCB4ZW5fZHJt X2Zyb250X2RybV9pbmZvICpkcm1faW5mbyA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlzdGF0aWMg c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7Cj4gKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdl bV9vYmo7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWZiID0gZHJtX2dlbV9mYl9jcmVhdGVfd2l0aF9m dW5jcyhkZXYsIGZpbHAsIG1vZGVfY21kLCAmZmJfZnVuY3MpOwo+ICsJaWYgKElTX0VSUl9PUl9O VUxMKGZiKSkKPiArCQlyZXR1cm4gZmI7Cj4gKwo+ICsJZ2VtX29iaiA9IGRybV9nZW1fb2JqZWN0 X2xvb2t1cChmaWxwLCBtb2RlX2NtZC0+aGFuZGxlc1swXSk7Cj4gKwlpZiAoIWdlbV9vYmopIHsK PiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byBsb29rdXAgR0VNIG9iamVjdFxuIik7Cj4gKwkJcmV0 ID0gLUVOT0VOVDsKPiArCQlnb3RvIGZhaWw7Cj4gKwl9Cj4gKwo+ICsJZHJtX2dlbV9vYmplY3Rf cHV0X3VubG9ja2VkKGdlbV9vYmopOwo+ICsKPiArCXJldCA9IHhlbl9kcm1fZnJvbnRfZmJfYXR0 YWNoKAo+ICsJCQlkcm1faW5mby0+ZnJvbnRfaW5mbywKPiArCQkJeGVuX2RybV9mcm9udF9kYnVm X3RvX2Nvb2tpZShnZW1fb2JqKSwKPiArCQkJeGVuX2RybV9mcm9udF9mYl90b19jb29raWUoZmIp LAo+ICsJCQlmYi0+d2lkdGgsIGZiLT5oZWlnaHQsIGZiLT5mb3JtYXQtPmZvcm1hdCk7Cj4gKwlp ZiAocmV0IDwgMCkgewo+ICsJCURSTV9FUlJPUigiQmFjayBmYWlsZWQgdG8gYXR0YWNoIEZCICVw OiAlZFxuIiwgZmIsIHJldCk7Cj4gKwkJZ290byBmYWlsOwo+ICsJfQo+ICsKPiArCXJldHVybiBm YjsKPiArCj4gK2ZhaWw6Cj4gKwlkcm1fZ2VtX2ZiX2Rlc3Ryb3koZmIpOwo+ICsJcmV0dXJuIEVS Ul9QVFIocmV0KTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9jb25m aWdfZnVuY3MgbW9kZV9jb25maWdfZnVuY3MgPSB7Cj4gKwkuZmJfY3JlYXRlID0gZmJfY3JlYXRl LAo+ICsJLmF0b21pY19jaGVjayA9IGRybV9hdG9taWNfaGVscGVyX2NoZWNrLAo+ICsJLmF0b21p Y19jb21taXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jb21taXQsCj4gK307Cj4gKwo+ICtzdGF0aWMg dm9pZCBzZW5kX3BlbmRpbmdfZXZlbnQoc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX3BpcGVsaW5l ICpwaXBlbGluZSkKPiArewo+ICsJc3RydWN0IGRybV9jcnRjICpjcnRjID0gJnBpcGVsaW5lLT5w aXBlLmNydGM7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2Owo+ICsJdW5z aWduZWQgbG9uZyBmbGFnczsKPiArCj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5ldmVudF9s b2NrLCBmbGFncyk7Cj4gKwlpZiAocGlwZWxpbmUtPnBlbmRpbmdfZXZlbnQpCj4gKwkJZHJtX2Ny dGNfc2VuZF92YmxhbmtfZXZlbnQoY3J0YywgcGlwZWxpbmUtPnBlbmRpbmdfZXZlbnQpOwo+ICsJ cGlwZWxpbmUtPnBlbmRpbmdfZXZlbnQgPSBOVUxMOwo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGRpc3Bs YXlfZW5hYmxlKHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAqcGlwZSwKPiArCQlzdHJ1 Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCj4gK3sKPiArCXN0cnVjdCB4ZW5fZHJtX2Zy b250X2RybV9waXBlbGluZSAqcGlwZWxpbmUgPQo+ICsJCQl0b194ZW5fZHJtX3BpcGVsaW5lKHBp cGUpOwo+ICsJc3RydWN0IGRybV9jcnRjICpjcnRjID0gJnBpcGUtPmNydGM7Cj4gKwlzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBpcGUtPnBsYW5lLnN0YXRlLT5mYjsKPiArCWludCByZXQs IGlkeDsKPiArCj4gKwlpZiAoIWRybV9kZXZfZW50ZXIocGlwZS0+Y3J0Yy5kZXYsICZpZHgpKQo+ ICsJCXJldHVybjsKPiArCj4gKwlyZXQgPSB4ZW5fZHJtX2Zyb250X21vZGVfc2V0KHBpcGVsaW5l LAo+ICsJCQljcnRjLT54LCBjcnRjLT55LCBmYi0+d2lkdGgsIGZiLT5oZWlnaHQsCj4gKwkJCWZi LT5mb3JtYXQtPmNwcFswXSAqIDgsCj4gKwkJCXhlbl9kcm1fZnJvbnRfZmJfdG9fY29va2llKGZi KSk7Cj4gKwo+ICsJaWYgKHJldCkgewo+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvIGVuYWJsZSBk aXNwbGF5OiAlZFxuIiwgcmV0KTsKPiArCQlwaXBlbGluZS0+Y29ubl9jb25uZWN0ZWQgPSBmYWxz ZTsKPiArCX0KPiArCj4gKwlkcm1fZGV2X2V4aXQoaWR4KTsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgZGlzcGxheV9kaXNhYmxlKHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAqcGlwZSkK PiArewo+ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX3BpcGVsaW5lICpwaXBlbGluZSA9Cj4g KwkJCXRvX3hlbl9kcm1fcGlwZWxpbmUocGlwZSk7Cj4gKwlpbnQgcmV0ID0gMCwgaWR4Owo+ICsK PiArCWlmIChkcm1fZGV2X2VudGVyKHBpcGUtPmNydGMuZGV2LCAmaWR4KSkgewo+ICsJCXJldCA9 IHhlbl9kcm1fZnJvbnRfbW9kZV9zZXQocGlwZWxpbmUsIDAsIDAsIDAsIDAsIDAsCj4gKwkJCQl4 ZW5fZHJtX2Zyb250X2ZiX3RvX2Nvb2tpZShOVUxMKSk7Cj4gKwkJZHJtX2Rldl9leGl0KGlkeCk7 Cj4gKwl9Cj4gKwlpZiAocmV0KQo+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvIGRpc2FibGUgZGlz cGxheTogJWRcbiIsIHJldCk7Cj4gKwo+ICsJLyogTWFrZSBzdXJlIHdlIGNhbiByZXN0YXJ0IHdp dGggZW5hYmxlZCBjb25uZWN0b3IgbmV4dCB0aW1lICovCj4gKwlwaXBlbGluZS0+Y29ubl9jb25u ZWN0ZWQgPSB0cnVlOwo+ICsKPiArCS8qIHJlbGVhc2Ugc3RhbGxlZCBldmVudCBpZiBhbnkgKi8K PiArCXNlbmRfcGVuZGluZ19ldmVudChwaXBlbGluZSk7Cj4gK30KPiArCj4gK3ZvaWQgeGVuX2Ry bV9mcm9udF9rbXNfb25fZnJhbWVfZG9uZSgKPiArCQlzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1f cGlwZWxpbmUgKnBpcGVsaW5lLAo+ICsJCXVpbnQ2NF90IGZiX2Nvb2tpZSkKPiArewo+ICsJLyoK PiArCSAqIFRoaXMgcnVucyBpbiBpbnRlcnJ1cHQgY29udGV4dCwgZS5nLiB1bmRlcgo+ICsJICog ZHJtX2luZm8tPmZyb250X2luZm8tPmlvX2xvY2ssIHNvIHdlIGNhbm5vdCBjYWxsIF9zeW5jIHZl cnNpb24KPiArCSAqIHRvIGNhbmNlbCB0aGUgd29yawo+ICsJICovCj4gKwljYW5jZWxfZGVsYXll ZF93b3JrKCZwaXBlbGluZS0+cGZsaXBfdG9fd29ya2VyKTsKPiArCj4gKwlzZW5kX3BlbmRpbmdf ZXZlbnQocGlwZWxpbmUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBwZmxpcF90b193b3JrZXIo c3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+ICt7Cj4gKwlzdHJ1Y3QgZGVsYXllZF93b3JrICpk ZWxheWVkX3dvcmsgPSB0b19kZWxheWVkX3dvcmsod29yayk7Cj4gKwlzdHJ1Y3QgeGVuX2RybV9m cm9udF9kcm1fcGlwZWxpbmUgKnBpcGVsaW5lID0KPiArCQkJY29udGFpbmVyX29mKGRlbGF5ZWRf d29yaywKPiArCQkJCQlzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1fcGlwZWxpbmUsCj4gKwkJCQkJ cGZsaXBfdG9fd29ya2VyKTsKPiArCj4gKwlEUk1fRVJST1IoIkZyYW1lIGRvbmUgdGltZWQtb3V0 LCByZWxlYXNpbmciKTsKPiArCXNlbmRfcGVuZGluZ19ldmVudChwaXBlbGluZSk7Cj4gK30KPiAr Cj4gK3N0YXRpYyBib29sIGRpc3BsYXlfc2VuZF9wYWdlX2ZsaXAoc3RydWN0IGRybV9zaW1wbGVf ZGlzcGxheV9waXBlICpwaXBlLAo+ICsJCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9wbGFu ZV9zdGF0ZSkKPiArewo+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUgPSBk cm1fYXRvbWljX2dldF9uZXdfcGxhbmVfc3RhdGUoCj4gKwkJCW9sZF9wbGFuZV9zdGF0ZS0+c3Rh dGUsICZwaXBlLT5wbGFuZSk7Cj4gKwo+ICsJLyoKPiArCSAqIElmIG9sZF9wbGFuZV9zdGF0ZS0+ ZmIgaXMgTlVMTCBhbmQgcGxhbmVfc3RhdGUtPmZiIGlzIG5vdCwKPiArCSAqIHRoZW4gdGhpcyBp cyBhbiBhdG9taWMgY29tbWl0IHdoaWNoIHdpbGwgZW5hYmxlIGRpc3BsYXkuCj4gKwkgKiBJZiBv bGRfcGxhbmVfc3RhdGUtPmZiIGlzIG5vdCBOVUxMIGFuZCBwbGFuZV9zdGF0ZS0+ZmIgaXMsCj4g KwkgKiB0aGVuIHRoaXMgaXMgYW4gYXRvbWljIGNvbW1pdCB3aGljaCB3aWxsIGRpc2FibGUgZGlz cGxheS4KPiArCSAqIElnbm9yZSB0aGVzZSBhbmQgZG8gbm90IHNlbmQgcGFnZSBmbGlwIGFzIHRo aXMgZnJhbWVidWZmZXIgd2lsbCBiZQo+ICsJICogc2VudCB0byB0aGUgYmFja2VuZCBhcyBhIHBh cnQgb2YgZGlzcGxheV9zZXRfY29uZmlnIGNhbGwuCj4gKwkgKi8KPiArCWlmIChvbGRfcGxhbmVf c3RhdGUtPmZiICYmIHBsYW5lX3N0YXRlLT5mYikgewo+ICsJCXN0cnVjdCB4ZW5fZHJtX2Zyb250 X2RybV9waXBlbGluZSAqcGlwZWxpbmUgPQo+ICsJCQkJdG9feGVuX2RybV9waXBlbGluZShwaXBl KTsKPiArCQlzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1faW5mbyAqZHJtX2luZm8gPSBwaXBlbGlu ZS0+ZHJtX2luZm87Cj4gKwkJaW50IHJldDsKPiArCj4gKwkJc2NoZWR1bGVfZGVsYXllZF93b3Jr KCZwaXBlbGluZS0+cGZsaXBfdG9fd29ya2VyLAo+ICsJCQkJbXNlY3NfdG9famlmZmllcyhGUkFN RV9ET05FX1RPX01TKSk7Cj4gKwo+ICsJCXJldCA9IHhlbl9kcm1fZnJvbnRfcGFnZV9mbGlwKGRy bV9pbmZvLT5mcm9udF9pbmZvLAo+ICsJCQkJcGlwZWxpbmUtPmluZGV4LAo+ICsJCQkJeGVuX2Ry bV9mcm9udF9mYl90b19jb29raWUocGxhbmVfc3RhdGUtPmZiKSk7Cj4gKwkJaWYgKHJldCkgewo+ ICsJCQlEUk1fRVJST1IoIkZhaWxlZCB0byBzZW5kIHBhZ2UgZmxpcCByZXF1ZXN0IHRvIGJhY2tl bmQ6ICVkXG4iLCByZXQpOwo+ICsKPiArCQkJcGlwZWxpbmUtPmNvbm5fY29ubmVjdGVkID0gZmFs c2U7Cj4gKwkJCS8qCj4gKwkJCSAqIFJlcG9ydCB0aGUgZmxpcCBub3QgaGFuZGxlZCwgc28gcGVu ZGluZyBldmVudCBpcwo+ICsJCQkgKiBzZW50LCB1bmJsb2NraW5nIHVzZXItc3BhY2UuCj4gKwkJ CSAqLwo+ICsJCQlyZXR1cm4gZmFsc2U7Cj4gKwkJfQo+ICsJCS8qCj4gKwkJICogU2lnbmFsIHRo YXQgcGFnZSBmbGlwIHdhcyBoYW5kbGVkLCBwZW5kaW5nIGV2ZW50IHdpbGwgYmUgc2VudAo+ICsJ CSAqIG9uIGZyYW1lIGRvbmUgZXZlbnQgZnJvbSB0aGUgYmFja2VuZC4KPiArCQkgKi8KPiArCQly ZXR1cm4gdHJ1ZTsKPiArCX0KPiArCj4gKwlyZXR1cm4gZmFsc2U7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgZGlzcGxheV9wcmVwYXJlX2ZiKHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAq cGlwZSwKPiArCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPiArewo+ICsJ cmV0dXJuIGRybV9nZW1fZmJfcHJlcGFyZV9mYigmcGlwZS0+cGxhbmUsIHBsYW5lX3N0YXRlKTsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgZGlzcGxheV91cGRhdGUoc3RydWN0IGRybV9zaW1wbGVf ZGlzcGxheV9waXBlICpwaXBlLAo+ICsJCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9wbGFu ZV9zdGF0ZSkKPiArewo+ICsJc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX3BpcGVsaW5lICpwaXBl bGluZSA9Cj4gKwkJCXRvX3hlbl9kcm1fcGlwZWxpbmUocGlwZSk7Cj4gKwlzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMgPSAmcGlwZS0+Y3J0YzsKPiArCXN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZl bnQgKmV2ZW50Owo+ICsJaW50IGlkeDsKPiArCj4gKwlldmVudCA9IGNydGMtPnN0YXRlLT5ldmVu dDsKPiArCWlmIChldmVudCkgewo+ICsJCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5k ZXY7Cj4gKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCj4gKwkJV0FSTl9PTihwaXBlbGluZS0+ cGVuZGluZ19ldmVudCk7Cj4gKwo+ICsJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmV2ZW50X2xv Y2ssIGZsYWdzKTsKPiArCQljcnRjLT5zdGF0ZS0+ZXZlbnQgPSBOVUxMOwo+ICsKPiArCQlwaXBl bGluZS0+cGVuZGluZ19ldmVudCA9IGV2ZW50Owo+ICsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOwo+ICsKPiArCX0KPiArCj4gKwlpZiAoIWRybV9kZXZf ZW50ZXIocGlwZS0+Y3J0Yy5kZXYsICZpZHgpKSB7Cj4gKwkJc2VuZF9wZW5kaW5nX2V2ZW50KHBp cGVsaW5lKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJLyoKPiArCSAqIFNlbmQgcGFnZSBm bGlwIHJlcXVlc3QgdG8gdGhlIGJhY2tlbmQgKmFmdGVyKiB3ZSBoYXZlIGV2ZW50IGNhY2hlZAo+ ICsJICogYWJvdmUsIHNvIG9uIHBhZ2UgZmxpcCBkb25lIGV2ZW50IGZyb20gdGhlIGJhY2tlbmQg d2UgY2FuCj4gKwkgKiBkZWxpdmVyIGl0IGFuZCB0aGVyZSBpcyBubyByYWNlIGNvbmRpdGlvbiBi ZXR3ZWVuIHRoaXMgY29kZSBhbmQKPiArCSAqIGV2ZW50IGZyb20gdGhlIGJhY2tlbmQuCj4gKwkg KiBJZiB0aGlzIGlzIG5vdCBhIHBhZ2UgZmxpcCwgZS5nLiBubyBmbGlwIGRvbmUgZXZlbnQgZnJv bSB0aGUgYmFja2VuZAo+ICsJICogaXMgZXhwZWN0ZWQsIHRoZW4gc2VuZCBub3cuCj4gKwkgKi8K PiArCWlmICghZGlzcGxheV9zZW5kX3BhZ2VfZmxpcChwaXBlLCBvbGRfcGxhbmVfc3RhdGUpKQo+ ICsJCXNlbmRfcGVuZGluZ19ldmVudChwaXBlbGluZSk7Cj4gKwo+ICsJZHJtX2Rldl9leGl0KGlk eCk7Cj4gK30KPiArCj4gK2VudW0gZHJtX21vZGVfc3RhdHVzIGRpc3BsYXlfbW9kZV92YWxpZChz dHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gKwkJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUg Km1vZGUpCj4gK3sKPiArCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9waXBlbGluZSAqcGlwZWxp bmUgPQo+ICsJCQljb250YWluZXJfb2YoY3J0YywKPiArCQkJCQlzdHJ1Y3QgeGVuX2RybV9mcm9u dF9kcm1fcGlwZWxpbmUsCj4gKwkJCQkJcGlwZS5jcnRjKTsKPiArCj4gKwlpZiAobW9kZS0+aGRp c3BsYXkgIT0gcGlwZWxpbmUtPndpZHRoKQo+ICsJCXJldHVybiBNT0RFX0VSUk9SOwo+ICsKPiAr CWlmIChtb2RlLT52ZGlzcGxheSAhPSBwaXBlbGluZS0+aGVpZ2h0KQo+ICsJCXJldHVybiBNT0RF X0VSUk9SOwo+ICsKPiArCXJldHVybiBNT0RFX09LOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qg c3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlX2Z1bmNzIGRpc3BsYXlfZnVuY3MgPSB7Cj4g KwkubW9kZV92YWxpZCA9IGRpc3BsYXlfbW9kZV92YWxpZCwKPiArCS5lbmFibGUgPSBkaXNwbGF5 X2VuYWJsZSwKPiArCS5kaXNhYmxlID0gZGlzcGxheV9kaXNhYmxlLAo+ICsJLnByZXBhcmVfZmIg PSBkaXNwbGF5X3ByZXBhcmVfZmIsCj4gKwkudXBkYXRlID0gZGlzcGxheV91cGRhdGUsCj4gK307 Cj4gKwo+ICtzdGF0aWMgaW50IGRpc3BsYXlfcGlwZV9pbml0KHN0cnVjdCB4ZW5fZHJtX2Zyb250 X2RybV9pbmZvICpkcm1faW5mbywKPiArCQlpbnQgaW5kZXgsIHN0cnVjdCB4ZW5fZHJtX2Zyb250 X2NmZ19jb25uZWN0b3IgKmNmZywKPiArCQlzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1fcGlwZWxp bmUgKnBpcGVsaW5lKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZHJtX2luZm8t PmRybV9kZXY7Cj4gKwljb25zdCB1aW50MzJfdCAqZm9ybWF0czsKPiArCWludCBmb3JtYXRfY291 bnQ7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXBpcGVsaW5lLT5kcm1faW5mbyA9IGRybV9pbmZvOwo+ ICsJcGlwZWxpbmUtPmluZGV4ID0gaW5kZXg7Cj4gKwlwaXBlbGluZS0+aGVpZ2h0ID0gY2ZnLT5o ZWlnaHQ7Cj4gKwlwaXBlbGluZS0+d2lkdGggPSBjZmctPndpZHRoOwo+ICsKPiArCUlOSVRfREVM QVlFRF9XT1JLKCZwaXBlbGluZS0+cGZsaXBfdG9fd29ya2VyLCBwZmxpcF90b193b3JrZXIpOwo+ ICsKPiArCXJldCA9IHhlbl9kcm1fZnJvbnRfY29ubl9pbml0KGRybV9pbmZvLCAmcGlwZWxpbmUt PmNvbm4pOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCWZvcm1hdHMgPSB4 ZW5fZHJtX2Zyb250X2Nvbm5fZ2V0X2Zvcm1hdHMoJmZvcm1hdF9jb3VudCk7Cj4gKwo+ICsJcmV0 dXJuIGRybV9zaW1wbGVfZGlzcGxheV9waXBlX2luaXQoZGV2LCAmcGlwZWxpbmUtPnBpcGUsCj4g KwkJCSZkaXNwbGF5X2Z1bmNzLCBmb3JtYXRzLCBmb3JtYXRfY291bnQsCj4gKwkJCU5VTEwsICZw aXBlbGluZS0+Y29ubik7Cj4gK30KPiArCj4gK2ludCB4ZW5fZHJtX2Zyb250X2ttc19pbml0KHN0 cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9pbmZvICpkcm1faW5mbykKPiArewo+ICsJc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IGRybV9pbmZvLT5kcm1fZGV2Owo+ICsJaW50IGksIHJldDsKPiArCj4g Kwlkcm1fbW9kZV9jb25maWdfaW5pdChkZXYpOwo+ICsKPiArCWRldi0+bW9kZV9jb25maWcubWlu X3dpZHRoID0gMDsKPiArCWRldi0+bW9kZV9jb25maWcubWluX2hlaWdodCA9IDA7Cj4gKwlkZXYt Pm1vZGVfY29uZmlnLm1heF93aWR0aCA9IDQwOTU7Cj4gKwlkZXYtPm1vZGVfY29uZmlnLm1heF9o ZWlnaHQgPSAyMDQ3Owo+ICsJZGV2LT5tb2RlX2NvbmZpZy5mdW5jcyA9ICZtb2RlX2NvbmZpZ19m dW5jczsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgZHJtX2luZm8tPmZyb250X2luZm8tPmNmZy5u dW1fY29ubmVjdG9yczsgaSsrKSB7Cj4gKwkJc3RydWN0IHhlbl9kcm1fZnJvbnRfY2ZnX2Nvbm5l Y3RvciAqY2ZnID0KPiArCQkJCSZkcm1faW5mby0+ZnJvbnRfaW5mby0+Y2ZnLmNvbm5lY3RvcnNb aV07Cj4gKwkJc3RydWN0IHhlbl9kcm1fZnJvbnRfZHJtX3BpcGVsaW5lICpwaXBlbGluZSA9Cj4g KwkJCQkmZHJtX2luZm8tPnBpcGVsaW5lW2ldOwo+ICsKPiArCQlyZXQgPSBkaXNwbGF5X3BpcGVf aW5pdChkcm1faW5mbywgaSwgY2ZnLCBwaXBlbGluZSk7Cj4gKwkJaWYgKHJldCkgewo+ICsJCQlk cm1fbW9kZV9jb25maWdfY2xlYW51cChkZXYpOwo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJCX0KPiAr CX0KPiArCj4gKwlkcm1fbW9kZV9jb25maWdfcmVzZXQoZGV2KTsKPiArCWRybV9rbXNfaGVscGVy X3BvbGxfaW5pdChkZXYpOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3ZvaWQgeGVuX2RybV9m cm9udF9rbXNfZmluaShzdHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1faW5mbyAqZHJtX2luZm8pCj4g K3sKPiArCWludCBpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBkcm1faW5mby0+ZnJvbnRfaW5m by0+Y2ZnLm51bV9jb25uZWN0b3JzOyBpKyspIHsKPiArCQlzdHJ1Y3QgeGVuX2RybV9mcm9udF9k cm1fcGlwZWxpbmUgKnBpcGVsaW5lID0KPiArCQkJCSZkcm1faW5mby0+cGlwZWxpbmVbaV07Cj4g Kwo+ICsJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcGlwZWxpbmUtPnBmbGlwX3RvX3dvcmtl cik7Cj4gKwo+ICsJCXNlbmRfcGVuZGluZ19ldmVudChwaXBlbGluZSk7Cj4gKwl9Cj4gK30KPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2ttcy5oIGIvZHJp dmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2ttcy5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjFjM2E2NGMzNmRiYgo+IC0tLSAvZGV2L251bGwKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfa21zLmgKPiBAQCAtMCwwICsx LDI3IEBACj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVCAqLwo+ ICsKPiArLyoKPiArICogIFhlbiBwYXJhLXZpcnR1YWwgRFJNIGRldmljZQo+ICsgKgo+ICsgKiBD b3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBFUEFNIFN5c3RlbXMgSW5jLgo+ICsgKgo+ICsgKiBBdXRo b3I6IE9sZWtzYW5kciBBbmRydXNoY2hlbmtvIDxvbGVrc2FuZHJfYW5kcnVzaGNoZW5rb0BlcGFt LmNvbT4KPiArICovCj4gKwo+ICsjaWZuZGVmIF9fWEVOX0RSTV9GUk9OVF9LTVNfSF8KPiArI2Rl ZmluZSBfX1hFTl9EUk1fRlJPTlRfS01TX0hfCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMu aD4KPiArCj4gK3N0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9pbmZvOwo+ICtzdHJ1Y3QgeGVuX2Ry bV9mcm9udF9kcm1fcGlwZWxpbmU7Cj4gKwo+ICtpbnQgeGVuX2RybV9mcm9udF9rbXNfaW5pdChz dHJ1Y3QgeGVuX2RybV9mcm9udF9kcm1faW5mbyAqZHJtX2luZm8pOwo+ICsKPiArdm9pZCB4ZW5f ZHJtX2Zyb250X2ttc19maW5pKHN0cnVjdCB4ZW5fZHJtX2Zyb250X2RybV9pbmZvICpkcm1faW5m byk7Cj4gKwo+ICt2b2lkIHhlbl9kcm1fZnJvbnRfa21zX29uX2ZyYW1lX2RvbmUoCj4gKwkJc3Ry dWN0IHhlbl9kcm1fZnJvbnRfZHJtX3BpcGVsaW5lICpwaXBlbGluZSwKPiArCQl1aW50NjRfdCBm Yl9jb29raWUpOwo+ICsKPiArI2VuZGlmIC8qIF9fWEVOX0RSTV9GUk9OVF9LTVNfSF8gKi8KPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X3NoYnVmLmMgYi9k cml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfc2hidWYuYwo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi4wZmRlMmQ4Zjc3MDYKPiAtLS0gL2Rldi9udWxs Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X3NoYnVmLmMKPiBAQCAt MCwwICsxLDQzMiBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBN SVQKPiArCj4gKy8qCj4gKyAqICBYZW4gcGFyYS12aXJ0dWFsIERSTSBkZXZpY2UKPiArICoKPiAr ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggRVBBTSBTeXN0ZW1zIEluYy4KPiArICoKPiArICog QXV0aG9yOiBPbGVrc2FuZHIgQW5kcnVzaGNoZW5rbyA8b2xla3NhbmRyX2FuZHJ1c2hjaGVua29A ZXBhbS5jb20+Cj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKwo+ICsjaWYg ZGVmaW5lZChDT05GSUdfWDg2KQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jYWNoZS5oPgo+ICsjZW5k aWYKPiArI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tbS5oPgo+ ICsKPiArI2luY2x1ZGUgPGFzbS94ZW4vaHlwZXJ2aXNvci5oPgo+ICsjaW5jbHVkZSA8eGVuL2Jh bGxvb24uaD4KPiArI2luY2x1ZGUgPHhlbi94ZW4uaD4KPiArI2luY2x1ZGUgPHhlbi94ZW5idXMu aD4KPiArI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvaW8vcmluZy5oPgo+ICsjaW5jbHVkZSA8eGVu L2ludGVyZmFjZS9pby9kaXNwbGlmLmg+Cj4gKwo+ICsjaW5jbHVkZSAieGVuX2RybV9mcm9udC5o Igo+ICsjaW5jbHVkZSAieGVuX2RybV9mcm9udF9zaGJ1Zi5oIgo+ICsKPiArc3RydWN0IHhlbl9k cm1fZnJvbnRfc2hidWZfb3BzIHsKPiArCS8qCj4gKwkgKiBDYWxjdWxhdGUgbnVtYmVyIG9mIGdy ZWZzIHJlcXVpcmVkIHRvIGhhbmRsZSB0aGlzIGJ1ZmZlciwKPiArCSAqIGUuZy4gaWYgZ3JlZnMg YXJlIHJlcXVpcmVkIGZvciBwYWdlIGRpcmVjdG9yeSBvbmx5IG9yIHRoZSBidWZmZXIKPiArCSAq IHBhZ2VzIGFzIHdlbGwuCj4gKwkgKi8KPiArCXZvaWQgKCpjYWxjX251bV9ncmVmcykoc3RydWN0 IHhlbl9kcm1fZnJvbnRfc2hidWYgKmJ1Zik7Cj4gKwkvKiBGaWxsIHBhZ2UgZGlyZWN0b3J5IGFj Y29yZGluZyB0byBwYXJhLXZpcnR1YWwgZGlzcGxheSBwcm90b2NvbC4gKi8KPiArCXZvaWQgKCpm aWxsX3BhZ2VfZGlyKShzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAqYnVmKTsKPiArCS8qIENs YWltIGdyYW50IHJlZmVyZW5jZXMgZm9yIHRoZSBwYWdlcyBvZiB0aGUgYnVmZmVyLiAqLwo+ICsJ aW50ICgqZ3JhbnRfcmVmc19mb3JfYnVmZmVyKShzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAq YnVmLAo+ICsJCQlncmFudF9yZWZfdCAqcHJpdl9ncmVmX2hlYWQsIGludCBncmVmX2lkeCk7Cj4g KwkvKiBNYXAgZ3JhbnQgcmVmZXJlbmNlcyBvZiB0aGUgYnVmZmVyLiAqLwo+ICsJaW50ICgqbWFw KShzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAqYnVmKTsKPiArCS8qIFVubWFwIGdyYW50IHJl ZmVyZW5jZXMgb2YgdGhlIGJ1ZmZlci4gKi8KPiArCWludCAoKnVubWFwKShzdHJ1Y3QgeGVuX2Ry bV9mcm9udF9zaGJ1ZiAqYnVmKTsKPiArfTsKPiArCj4gK2dyYW50X3JlZl90IHhlbl9kcm1fZnJv bnRfc2hidWZfZ2V0X2Rpcl9zdGFydChzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAqYnVmKQo+ ICt7Cj4gKwlpZiAoIWJ1Zi0+Z3JlZnMpCj4gKwkJcmV0dXJuIEdSQU5UX0lOVkFMSURfUkVGOwo+ ICsKPiArCXJldHVybiBidWYtPmdyZWZzWzBdOwo+ICt9Cj4gKwo+ICtpbnQgeGVuX2RybV9mcm9u dF9zaGJ1Zl9tYXAoc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgKmJ1ZikKPiArewo+ICsJaWYg KGJ1Zi0+b3BzLT5tYXApCj4gKwkJcmV0dXJuIGJ1Zi0+b3BzLT5tYXAoYnVmKTsKPiArCj4gKwkv KiBubyBuZWVkIHRvIG1hcCBvd24gZ3JhbnQgcmVmZXJlbmNlcyAqLwo+ICsJcmV0dXJuIDA7Cj4g K30KPiArCj4gK2ludCB4ZW5fZHJtX2Zyb250X3NoYnVmX3VubWFwKHN0cnVjdCB4ZW5fZHJtX2Zy b250X3NoYnVmICpidWYpCj4gK3sKPiArCWlmIChidWYtPm9wcy0+dW5tYXApCj4gKwkJcmV0dXJu IGJ1Zi0+b3BzLT51bm1hcChidWYpOwo+ICsKPiArCS8qIG5vIG5lZWQgdG8gdW5tYXAgb3duIGdy YW50IHJlZmVyZW5jZXMgKi8KPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICt2b2lkIHhlbl9kcm1f ZnJvbnRfc2hidWZfZmx1c2goc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgKmJ1ZikKPiArewo+ ICsjaWYgZGVmaW5lZChDT05GSUdfWDg2KQo+ICsJZHJtX2NsZmx1c2hfcGFnZXMoYnVmLT5wYWdl cywgYnVmLT5udW1fcGFnZXMpOwo+ICsjZW5kaWYKPiArfQo+ICsKPiArdm9pZCB4ZW5fZHJtX2Zy b250X3NoYnVmX2ZyZWUoc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgKmJ1ZikKPiArewo+ICsJ aWYgKGJ1Zi0+Z3JlZnMpIHsKPiArCQlpbnQgaTsKPiArCj4gKwkJZm9yIChpID0gMDsgaSA8IGJ1 Zi0+bnVtX2dyZWZzOyBpKyspCj4gKwkJCWlmIChidWYtPmdyZWZzW2ldICE9IEdSQU5UX0lOVkFM SURfUkVGKQo+ICsJCQkJZ250dGFiX2VuZF9mb3JlaWduX2FjY2VzcyhidWYtPmdyZWZzW2ldLAo+ ICsJCQkJCTAsIDBVTCk7Cj4gKwl9Cj4gKwlrZnJlZShidWYtPmdyZWZzKTsKPiArCWtmcmVlKGJ1 Zi0+ZGlyZWN0b3J5KTsKPiArCWlmIChidWYtPnNndCkgewo+ICsJCXNnX2ZyZWVfdGFibGUoYnVm LT5zZ3QpOwo+ICsJCWt2ZnJlZShidWYtPnBhZ2VzKTsKPiArCX0KPiArCWtmcmVlKGJ1Zik7Cj4g K30KPiArCj4gKy8qCj4gKyAqIG51bWJlciBvZiBncmVmcyBhIHBhZ2UgY2FuIGhvbGQgd2l0aCBy ZXNwZWN0IHRvIHRoZQo+ICsgKiBzdHJ1Y3QgeGVuZGlzcGxfcGFnZV9kaXJlY3RvcnkgaGVhZGVy Cj4gKyAqLwo+ICsjZGVmaW5lIFhFTl9EUk1fTlVNX0dSRUZTX1BFUl9QQUdFICgoUEFHRV9TSVpF IC0gXAo+ICsJb2Zmc2V0b2Yoc3RydWN0IHhlbmRpc3BsX3BhZ2VfZGlyZWN0b3J5LCBncmVmKSkg LyBcCj4gKwlzaXplb2YoZ3JhbnRfcmVmX3QpKQo+ICsKPiArc3RhdGljIGludCBnZXRfbnVtX3Bh Z2VzX2RpcihzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAqYnVmKQo+ICt7Cj4gKwkvKiBudW1i ZXIgb2YgcGFnZXMgdGhlIHBhZ2UgZGlyZWN0b3J5IGNvbnN1bWVzIGl0c2VsZiAqLwo+ICsJcmV0 dXJuIERJVl9ST1VORF9VUChidWYtPm51bV9wYWdlcywgWEVOX0RSTV9OVU1fR1JFRlNfUEVSX1BB R0UpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBiYWNrZW5kX2NhbGNfbnVtX2dyZWZzKHN0cnVj dCB4ZW5fZHJtX2Zyb250X3NoYnVmICpidWYpCj4gK3sKPiArCS8qIG9ubHkgZm9yIHBhZ2VzIHRo ZSBwYWdlIGRpcmVjdG9yeSBjb25zdW1lcyBpdHNlbGYgKi8KPiArCWJ1Zi0+bnVtX2dyZWZzID0g Z2V0X251bV9wYWdlc19kaXIoYnVmKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZ3Vlc3RfY2Fs Y19udW1fZ3JlZnMoc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgKmJ1ZikKPiArewo+ICsJLyoK PiArCSAqIG51bWJlciBvZiBwYWdlcyB0aGUgcGFnZSBkaXJlY3RvcnkgY29uc3VtZXMgaXRzZWxm Cj4gKwkgKiBwbHVzIGdyZWZzIGZvciB0aGUgYnVmZmVyIHBhZ2VzCj4gKwkgKi8KPiArCWJ1Zi0+ bnVtX2dyZWZzID0gZ2V0X251bV9wYWdlc19kaXIoYnVmKSArIGJ1Zi0+bnVtX3BhZ2VzOwo+ICt9 Cj4gKwo+ICsjZGVmaW5lIHhlbl9wYWdlX3RvX3ZhZGRyKHBhZ2UpIFwKPiArCQkoKHBoeXNfYWRk cl90KXBmbl90b19rYWRkcihwYWdlX3RvX3hlbl9wZm4ocGFnZSkpKQo+ICsKPiArc3RhdGljIGlu dCBiYWNrZW5kX3VubWFwKHN0cnVjdCB4ZW5fZHJtX2Zyb250X3NoYnVmICpidWYpCj4gK3sKPiAr CXN0cnVjdCBnbnR0YWJfdW5tYXBfZ3JhbnRfcmVmICp1bm1hcF9vcHM7Cj4gKwlpbnQgaSwgcmV0 Owo+ICsKPiArCWlmICghYnVmLT5wYWdlcyB8fCAhYnVmLT5iYWNrZW5kX21hcF9oYW5kbGVzIHx8 ICFidWYtPmdyZWZzKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXVubWFwX29wcyA9IGtjYWxsb2Mo YnVmLT5udW1fcGFnZXMsIHNpemVvZigqdW5tYXBfb3BzKSwKPiArCQlHRlBfS0VSTkVMKTsKPiAr CWlmICghdW5tYXBfb3BzKSB7Cj4gKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZ2V0IG1lbW9yeSB3 aGlsZSB1bm1hcHBpbmdcbiIpOwo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsJfQo+ICsKPiArCWZv ciAoaSA9IDA7IGkgPCBidWYtPm51bV9wYWdlczsgaSsrKSB7Cj4gKwkJcGh5c19hZGRyX3QgYWRk cjsKPiArCj4gKwkJYWRkciA9IHhlbl9wYWdlX3RvX3ZhZGRyKGJ1Zi0+cGFnZXNbaV0pOwo+ICsJ CWdudHRhYl9zZXRfdW5tYXBfb3AoJnVubWFwX29wc1tpXSwgYWRkciwgR05UTUFQX2hvc3RfbWFw LAo+ICsJCQkJYnVmLT5iYWNrZW5kX21hcF9oYW5kbGVzW2ldKTsKPiArCX0KPiArCj4gKwlyZXQg PSBnbnR0YWJfdW5tYXBfcmVmcyh1bm1hcF9vcHMsIE5VTEwsIGJ1Zi0+cGFnZXMsCj4gKwkJCWJ1 Zi0+bnVtX3BhZ2VzKTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgYnVmLT5udW1fcGFnZXM7IGkr Kykgewo+ICsJCWlmICh1bmxpa2VseSh1bm1hcF9vcHNbaV0uc3RhdHVzICE9IEdOVFNUX29rYXkp KQo+ICsJCQlEUk1fRVJST1IoIkZhaWxlZCB0byB1bm1hcCBwYWdlICVkOiAlZFxuIiwKPiArCQkJ CQlpLCB1bm1hcF9vcHNbaV0uc3RhdHVzKTsKPiArCX0KPiArCj4gKwlpZiAocmV0KQo+ICsJCURS TV9FUlJPUigiRmFpbGVkIHRvIHVubWFwIGdyYW50IHJlZmVyZW5jZXMsIHJldCAlZCIsIHJldCk7 Cj4gKwo+ICsJa2ZyZWUodW5tYXBfb3BzKTsKPiArCWtmcmVlKGJ1Zi0+YmFja2VuZF9tYXBfaGFu ZGxlcyk7Cj4gKwlidWYtPmJhY2tlbmRfbWFwX2hhbmRsZXMgPSBOVUxMOwo+ICsJcmV0dXJuIHJl dDsKPiArfQo+ICsKPiArc3RhdGljIGludCBiYWNrZW5kX21hcChzdHJ1Y3QgeGVuX2RybV9mcm9u dF9zaGJ1ZiAqYnVmKQo+ICt7Cj4gKwlzdHJ1Y3QgZ250dGFiX21hcF9ncmFudF9yZWYgKm1hcF9v cHMgPSBOVUxMOwo+ICsJdW5zaWduZWQgY2hhciAqcHRyOwo+ICsJaW50IHJldCwgY3VyX2dyZWYs IGN1cl9kaXJfcGFnZSwgY3VyX3BhZ2UsIGdyZWZzX2xlZnQ7Cj4gKwo+ICsJbWFwX29wcyA9IGtj YWxsb2MoYnVmLT5udW1fcGFnZXMsIHNpemVvZigqbWFwX29wcyksIEdGUF9LRVJORUwpOwo+ICsJ aWYgKCFtYXBfb3BzKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWJ1Zi0+YmFja2VuZF9t YXBfaGFuZGxlcyA9IGtjYWxsb2MoYnVmLT5udW1fcGFnZXMsCj4gKwkJCXNpemVvZigqYnVmLT5i YWNrZW5kX21hcF9oYW5kbGVzKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWJ1Zi0+YmFja2VuZF9t YXBfaGFuZGxlcykgewo+ICsJCWtmcmVlKG1hcF9vcHMpOwo+ICsJCXJldHVybiAtRU5PTUVNOwo+ ICsJfQo+ICsKPiArCS8qCj4gKwkgKiByZWFkIHBhZ2UgZGlyZWN0b3J5IHRvIGdldCBncmVmcyBm cm9tIHRoZSBiYWNrZW5kOiBmb3IgZXh0ZXJuYWwKPiArCSAqIGJ1ZmZlciB3ZSBvbmx5IGFsbG9j YXRlIGJ1Zi0+Z3JlZnMgZm9yIHRoZSBwYWdlIGRpcmVjdG9yeSwKPiArCSAqIHNvIGJ1Zi0+bnVt X2dyZWZzIGhhcyBudW1iZXIgb2YgcGFnZXMgaW4gdGhlIHBhZ2UgZGlyZWN0b3J5IGl0c2VsZgo+ ICsJICovCj4gKwlwdHIgPSBidWYtPmRpcmVjdG9yeTsKPiArCWdyZWZzX2xlZnQgPSBidWYtPm51 bV9wYWdlczsKPiArCWN1cl9wYWdlID0gMDsKPiArCWZvciAoY3VyX2Rpcl9wYWdlID0gMDsgY3Vy X2Rpcl9wYWdlIDwgYnVmLT5udW1fZ3JlZnM7IGN1cl9kaXJfcGFnZSsrKSB7Cj4gKwkJc3RydWN0 IHhlbmRpc3BsX3BhZ2VfZGlyZWN0b3J5ICpwYWdlX2RpciA9Cj4gKwkJCQkoc3RydWN0IHhlbmRp c3BsX3BhZ2VfZGlyZWN0b3J5ICopcHRyOwo+ICsJCWludCB0b19jb3B5ID0gWEVOX0RSTV9OVU1f R1JFRlNfUEVSX1BBR0U7Cj4gKwo+ICsJCWlmICh0b19jb3B5ID4gZ3JlZnNfbGVmdCkKPiArCQkJ dG9fY29weSA9IGdyZWZzX2xlZnQ7Cj4gKwo+ICsJCWZvciAoY3VyX2dyZWYgPSAwOyBjdXJfZ3Jl ZiA8IHRvX2NvcHk7IGN1cl9ncmVmKyspIHsKPiArCQkJcGh5c19hZGRyX3QgYWRkcjsKPiArCj4g KwkJCWFkZHIgPSB4ZW5fcGFnZV90b192YWRkcihidWYtPnBhZ2VzW2N1cl9wYWdlXSk7Cj4gKwkJ CWdudHRhYl9zZXRfbWFwX29wKCZtYXBfb3BzW2N1cl9wYWdlXSwgYWRkciwKPiArCQkJCQlHTlRN QVBfaG9zdF9tYXAsCj4gKwkJCQkJcGFnZV9kaXItPmdyZWZbY3VyX2dyZWZdLAo+ICsJCQkJCWJ1 Zi0+eGJfZGV2LT5vdGhlcmVuZF9pZCk7Cj4gKwkJCWN1cl9wYWdlKys7Cj4gKwkJfQo+ICsKPiAr CQlncmVmc19sZWZ0IC09IHRvX2NvcHk7Cj4gKwkJcHRyICs9IFBBR0VfU0laRTsKPiArCX0KPiAr CXJldCA9IGdudHRhYl9tYXBfcmVmcyhtYXBfb3BzLCBOVUxMLCBidWYtPnBhZ2VzLCBidWYtPm51 bV9wYWdlcyk7Cj4gKwo+ICsJLyogc2F2ZSBoYW5kbGVzIGV2ZW4gaWYgZXJyb3IsIHNvIHdlIGNh biB1bm1hcCAqLwo+ICsJZm9yIChjdXJfcGFnZSA9IDA7IGN1cl9wYWdlIDwgYnVmLT5udW1fcGFn ZXM7IGN1cl9wYWdlKyspIHsKPiArCQlidWYtPmJhY2tlbmRfbWFwX2hhbmRsZXNbY3VyX3BhZ2Vd ID0gbWFwX29wc1tjdXJfcGFnZV0uaGFuZGxlOwo+ICsJCWlmICh1bmxpa2VseShtYXBfb3BzW2N1 cl9wYWdlXS5zdGF0dXMgIT0gR05UU1Rfb2theSkpCj4gKwkJCURSTV9FUlJPUigiRmFpbGVkIHRv IG1hcCBwYWdlICVkOiAlZFxuIiwKPiArCQkJCQljdXJfcGFnZSwgbWFwX29wc1tjdXJfcGFnZV0u c3RhdHVzKTsKPiArCX0KPiArCj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0VSUk9SKCJGYWlsZWQg dG8gbWFwIGdyYW50IHJlZmVyZW5jZXMsIHJldCAlZCIsIHJldCk7Cj4gKwkJYmFja2VuZF91bm1h cChidWYpOwo+ICsJfQo+ICsKPiArCWtmcmVlKG1hcF9vcHMpOwo+ICsJcmV0dXJuIHJldDsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgYmFja2VuZF9maWxsX3BhZ2VfZGlyKHN0cnVjdCB4ZW5fZHJt X2Zyb250X3NoYnVmICpidWYpCj4gK3sKPiArCXN0cnVjdCB4ZW5kaXNwbF9wYWdlX2RpcmVjdG9y eSAqcGFnZV9kaXI7Cj4gKwl1bnNpZ25lZCBjaGFyICpwdHI7Cj4gKwlpbnQgaSwgbnVtX3BhZ2Vz X2RpcjsKPiArCj4gKwlwdHIgPSBidWYtPmRpcmVjdG9yeTsKPiArCW51bV9wYWdlc19kaXIgPSBn ZXRfbnVtX3BhZ2VzX2RpcihidWYpOwo+ICsKPiArCS8qIGZpbGwgb25seSBncmVmcyBmb3IgdGhl IHBhZ2UgZGlyZWN0b3J5IGl0c2VsZiAqLwo+ICsJZm9yIChpID0gMDsgaSA8IG51bV9wYWdlc19k aXIgLSAxOyBpKyspIHsKPiArCQlwYWdlX2RpciA9IChzdHJ1Y3QgeGVuZGlzcGxfcGFnZV9kaXJl Y3RvcnkgKilwdHI7Cj4gKwo+ICsJCXBhZ2VfZGlyLT5ncmVmX2Rpcl9uZXh0X3BhZ2UgPSBidWYt PmdyZWZzW2kgKyAxXTsKPiArCQlwdHIgKz0gUEFHRV9TSVpFOwo+ICsJfQo+ICsJLyogbGFzdCBw YWdlIG11c3Qgc2F5IHRoZXJlIGlzIG5vIG1vcmUgcGFnZXMgKi8KPiArCXBhZ2VfZGlyID0gKHN0 cnVjdCB4ZW5kaXNwbF9wYWdlX2RpcmVjdG9yeSAqKXB0cjsKPiArCXBhZ2VfZGlyLT5ncmVmX2Rp cl9uZXh0X3BhZ2UgPSBHUkFOVF9JTlZBTElEX1JFRjsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQg Z3Vlc3RfZmlsbF9wYWdlX2RpcihzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAqYnVmKQo+ICt7 Cj4gKwl1bnNpZ25lZCBjaGFyICpwdHI7Cj4gKwlpbnQgY3VyX2dyZWYsIGdyZWZzX2xlZnQsIHRv X2NvcHksIGksIG51bV9wYWdlc19kaXI7Cj4gKwo+ICsJcHRyID0gYnVmLT5kaXJlY3Rvcnk7Cj4g KwludW1fcGFnZXNfZGlyID0gZ2V0X251bV9wYWdlc19kaXIoYnVmKTsKPiArCj4gKwkvKgo+ICsJ ICogd2hpbGUgY29weWluZywgc2tpcCBncmVmcyBhdCBzdGFydCwgdGhleSBhcmUgZm9yIHBhZ2Vz Cj4gKwkgKiBncmFudGVkIGZvciB0aGUgcGFnZSBkaXJlY3RvcnkgaXRzZWxmCj4gKwkgKi8KPiAr CWN1cl9ncmVmID0gbnVtX3BhZ2VzX2RpcjsKPiArCWdyZWZzX2xlZnQgPSBidWYtPm51bV9wYWdl czsKPiArCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXNfZGlyOyBpKyspIHsKPiArCQlzdHJ1Y3Qg eGVuZGlzcGxfcGFnZV9kaXJlY3RvcnkgKnBhZ2VfZGlyID0KPiArCQkJCShzdHJ1Y3QgeGVuZGlz cGxfcGFnZV9kaXJlY3RvcnkgKilwdHI7Cj4gKwo+ICsJCWlmIChncmVmc19sZWZ0IDw9IFhFTl9E Uk1fTlVNX0dSRUZTX1BFUl9QQUdFKSB7Cj4gKwkJCXRvX2NvcHkgPSBncmVmc19sZWZ0Owo+ICsJ CQlwYWdlX2Rpci0+Z3JlZl9kaXJfbmV4dF9wYWdlID0gR1JBTlRfSU5WQUxJRF9SRUY7Cj4gKwkJ fSBlbHNlIHsKPiArCQkJdG9fY29weSA9IFhFTl9EUk1fTlVNX0dSRUZTX1BFUl9QQUdFOwo+ICsJ CQlwYWdlX2Rpci0+Z3JlZl9kaXJfbmV4dF9wYWdlID0gYnVmLT5ncmVmc1tpICsgMV07Cj4gKwkJ fQo+ICsJCW1lbWNweSgmcGFnZV9kaXItPmdyZWYsICZidWYtPmdyZWZzW2N1cl9ncmVmXSwKPiAr CQkJCXRvX2NvcHkgKiBzaXplb2YoZ3JhbnRfcmVmX3QpKTsKPiArCQlwdHIgKz0gUEFHRV9TSVpF Owo+ICsJCWdyZWZzX2xlZnQgLT0gdG9fY29weTsKPiArCQljdXJfZ3JlZiArPSB0b19jb3B5Owo+ ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGd1ZXN0X2dyYW50X3JlZnNfZm9yX2J1ZmZlcihz dHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAqYnVmLAo+ICsJCWdyYW50X3JlZl90ICpwcml2X2dy ZWZfaGVhZCwgaW50IGdyZWZfaWR4KQo+ICt7Cj4gKwlpbnQgaSwgY3VyX3JlZiwgb3RoZXJlbmRf aWQ7Cj4gKwo+ICsJb3RoZXJlbmRfaWQgPSBidWYtPnhiX2Rldi0+b3RoZXJlbmRfaWQ7Cj4gKwlm b3IgKGkgPSAwOyBpIDwgYnVmLT5udW1fcGFnZXM7IGkrKykgewo+ICsJCWN1cl9yZWYgPSBnbnR0 YWJfY2xhaW1fZ3JhbnRfcmVmZXJlbmNlKHByaXZfZ3JlZl9oZWFkKTsKPiArCQlpZiAoY3VyX3Jl ZiA8IDApCj4gKwkJCXJldHVybiBjdXJfcmVmOwo+ICsJCWdudHRhYl9ncmFudF9mb3JlaWduX2Fj Y2Vzc19yZWYoY3VyX3JlZiwgb3RoZXJlbmRfaWQsCj4gKwkJCQl4ZW5fcGFnZV90b19nZm4oYnVm LT5wYWdlc1tpXSksIDApOwo+ICsJCWJ1Zi0+Z3JlZnNbZ3JlZl9pZHgrK10gPSBjdXJfcmVmOwo+ ICsJfQo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZ3JhbnRfcmVmZXJlbmNl cyhzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAqYnVmKQo+ICt7Cj4gKwlncmFudF9yZWZfdCBw cml2X2dyZWZfaGVhZDsKPiArCWludCByZXQsIGksIGosIGN1cl9yZWY7Cj4gKwlpbnQgb3RoZXJl bmRfaWQsIG51bV9wYWdlc19kaXI7Cj4gKwo+ICsJcmV0ID0gZ250dGFiX2FsbG9jX2dyYW50X3Jl ZmVyZW5jZXMoYnVmLT5udW1fZ3JlZnMsICZwcml2X2dyZWZfaGVhZCk7Cj4gKwlpZiAocmV0IDwg MCkgewo+ICsJCURSTV9FUlJPUigiQ2Fubm90IGFsbG9jYXRlIGdyYW50IHJlZmVyZW5jZXNcbiIp Owo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwlvdGhlcmVuZF9pZCA9IGJ1Zi0+eGJfZGV2LT5v dGhlcmVuZF9pZDsKPiArCWogPSAwOwo+ICsJbnVtX3BhZ2VzX2RpciA9IGdldF9udW1fcGFnZXNf ZGlyKGJ1Zik7Cj4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzX2RpcjsgaSsrKSB7Cj4gKwkJ dW5zaWduZWQgbG9uZyBmcmFtZTsKPiArCj4gKwkJY3VyX3JlZiA9IGdudHRhYl9jbGFpbV9ncmFu dF9yZWZlcmVuY2UoJnByaXZfZ3JlZl9oZWFkKTsKPiArCQlpZiAoY3VyX3JlZiA8IDApCj4gKwkJ CXJldHVybiBjdXJfcmVmOwo+ICsKPiArCQlmcmFtZSA9IHhlbl9wYWdlX3RvX2dmbih2aXJ0X3Rv X3BhZ2UoYnVmLT5kaXJlY3RvcnkgKwo+ICsJCQkJUEFHRV9TSVpFICogaSkpOwo+ICsJCWdudHRh Yl9ncmFudF9mb3JlaWduX2FjY2Vzc19yZWYoY3VyX3JlZiwgb3RoZXJlbmRfaWQsCj4gKwkJCQlm cmFtZSwgMCk7Cj4gKwkJYnVmLT5ncmVmc1tqKytdID0gY3VyX3JlZjsKPiArCX0KPiArCj4gKwlp ZiAoYnVmLT5vcHMtPmdyYW50X3JlZnNfZm9yX2J1ZmZlcikgewo+ICsJCXJldCA9IGJ1Zi0+b3Bz LT5ncmFudF9yZWZzX2Zvcl9idWZmZXIoYnVmLCAmcHJpdl9ncmVmX2hlYWQsIGopOwo+ICsJCWlm IChyZXQpCj4gKwkJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJZ250dGFiX2ZyZWVfZ3JhbnRf cmVmZXJlbmNlcyhwcml2X2dyZWZfaGVhZCk7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3Rh dGljIGludCBhbGxvY19zdG9yYWdlKHN0cnVjdCB4ZW5fZHJtX2Zyb250X3NoYnVmICpidWYpCj4g K3sKPiArCWlmIChidWYtPnNndCkgewo+ICsJCWJ1Zi0+cGFnZXMgPSBrdm1hbGxvY19hcnJheShi dWYtPm51bV9wYWdlcywKPiArCQkJCXNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgR0ZQX0tFUk5FTCk7 Cj4gKwkJaWYgKCFidWYtPnBhZ2VzKQo+ICsJCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwkJaWYg KGRybV9wcmltZV9zZ190b19wYWdlX2FkZHJfYXJyYXlzKGJ1Zi0+c2d0LCBidWYtPnBhZ2VzLAo+ ICsJCQkJTlVMTCwgYnVmLT5udW1fcGFnZXMpIDwgMCkKPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4g Kwl9Cj4gKwo+ICsJYnVmLT5ncmVmcyA9IGtjYWxsb2MoYnVmLT5udW1fZ3JlZnMsIHNpemVvZigq YnVmLT5ncmVmcyksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFidWYtPmdyZWZzKQo+ICsJCXJldHVy biAtRU5PTUVNOwo+ICsKPiArCWJ1Zi0+ZGlyZWN0b3J5ID0ga2NhbGxvYyhnZXRfbnVtX3BhZ2Vz X2RpcihidWYpLCBQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFidWYtPmRpcmVjdG9y eSkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArLyoK PiArICogRm9yIGJlIGFsbG9jYXRlZCBidWZmZXJzIHdlIGRvbid0IG5lZWQgZ3JhbnRfcmVmc19m b3JfYnVmZmVyIGFzIHRob3NlCj4gKyAqIGdyYW50IHJlZmVyZW5jZXMgYXJlIGFsbG9jYXRlZCBh dCBiYWNrZW5kIHNpZGUKPiArICovCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeGVuX2RybV9mcm9u dF9zaGJ1Zl9vcHMgYmFja2VuZF9vcHMgPSB7Cj4gKwkuY2FsY19udW1fZ3JlZnMgPSBiYWNrZW5k X2NhbGNfbnVtX2dyZWZzLAo+ICsJLmZpbGxfcGFnZV9kaXIgPSBiYWNrZW5kX2ZpbGxfcGFnZV9k aXIsCj4gKwkubWFwID0gYmFja2VuZF9tYXAsCj4gKwkudW5tYXAgPSBiYWNrZW5kX3VubWFwCj4g K307Cj4gKwo+ICsvKiBGb3IgbG9jYWxseSBncmFudGVkIHJlZmVyZW5jZXMgd2UgZG8gbm90IG5l ZWQgdG8gbWFwL3VubWFwIHRoZSByZWZlcmVuY2VzICovCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg eGVuX2RybV9mcm9udF9zaGJ1Zl9vcHMgbG9jYWxfb3BzID0gewo+ICsJLmNhbGNfbnVtX2dyZWZz ID0gZ3Vlc3RfY2FsY19udW1fZ3JlZnMsCj4gKwkuZmlsbF9wYWdlX2RpciA9IGd1ZXN0X2ZpbGxf cGFnZV9kaXIsCj4gKwkuZ3JhbnRfcmVmc19mb3JfYnVmZmVyID0gZ3Vlc3RfZ3JhbnRfcmVmc19m b3JfYnVmZmVyLAo+ICt9Owo+ICsKPiArc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgKnhlbl9k cm1fZnJvbnRfc2hidWZfYWxsb2MoCj4gKwkJc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWZfY2Zn ICpjZmcpCj4gK3sKPiArCXN0cnVjdCB4ZW5fZHJtX2Zyb250X3NoYnVmICpidWY7Cj4gKwlpbnQg cmV0Owo+ICsKPiArCS8qIGVpdGhlciBwYWdlcyBvciBzZ3QsIG5vdCBib3RoICovCj4gKwlpZiAo dW5saWtlbHkoY2ZnLT5wYWdlcyAmJiBjZmctPnNndCkpIHsKPiArCQlEUk1fRVJST1IoIkNhbm5v dCBoYW5kbGUgYnVmZmVyIGFsbG9jYXRpb24gd2l0aCBib3RoIHBhZ2VzIGFuZCBzZyB0YWJsZSBw cm92aWRlZFxuIik7Cj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwl9Cj4gKwo+ICsJYnVmID0ga3phbGxv YyhzaXplb2YoKmJ1ZiksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFidWYpCj4gKwkJcmV0dXJuIE5V TEw7Cj4gKwo+ICsJaWYgKGNmZy0+YmVfYWxsb2MpCj4gKwkJYnVmLT5vcHMgPSAmYmFja2VuZF9v cHM7Cj4gKwllbHNlCj4gKwkJYnVmLT5vcHMgPSAmbG9jYWxfb3BzOwo+ICsKPiArCWJ1Zi0+eGJf ZGV2ID0gY2ZnLT54Yl9kZXY7Cj4gKwlidWYtPm51bV9wYWdlcyA9IERJVl9ST1VORF9VUChjZmct PnNpemUsIFBBR0VfU0laRSk7Cj4gKwlidWYtPnNndCA9IGNmZy0+c2d0Owo+ICsJYnVmLT5wYWdl cyA9IGNmZy0+cGFnZXM7Cj4gKwo+ICsJYnVmLT5vcHMtPmNhbGNfbnVtX2dyZWZzKGJ1Zik7Cj4g Kwo+ICsJcmV0ID0gYWxsb2Nfc3RvcmFnZShidWYpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGZh aWw7Cj4gKwo+ICsJcmV0ID0gZ3JhbnRfcmVmZXJlbmNlcyhidWYpOwo+ICsJaWYgKHJldCkKPiAr CQlnb3RvIGZhaWw7Cj4gKwo+ICsJYnVmLT5vcHMtPmZpbGxfcGFnZV9kaXIoYnVmKTsKPiArCj4g KwlyZXR1cm4gYnVmOwo+ICsKPiArZmFpbDoKPiArCXhlbl9kcm1fZnJvbnRfc2hidWZfZnJlZShi dWYpOwo+ICsJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfc2hidWYuaCBiL2RyaXZlcnMvZ3B1L2RybS94ZW4v eGVuX2RybV9mcm9udF9zaGJ1Zi5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAw MDAwMDAwMDAuLjZjNGZiYzY4ZjMyOAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfc2hidWYuaAo+IEBAIC0wLDAgKzEsNzIgQEAKPiArLyog U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUICovCj4gKwo+ICsvKgo+ICsg KiAgWGVuIHBhcmEtdmlydHVhbCBEUk0gZGV2aWNlCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykg MjAxNi0yMDE4IEVQQU0gU3lzdGVtcyBJbmMuCj4gKyAqCj4gKyAqIEF1dGhvcjogT2xla3NhbmRy IEFuZHJ1c2hjaGVua28gPG9sZWtzYW5kcl9hbmRydXNoY2hlbmtvQGVwYW0uY29tPgo+ICsgKi8K PiArCj4gKyNpZm5kZWYgX19YRU5fRFJNX0ZST05UX1NIQlVGX0hfCj4gKyNkZWZpbmUgX19YRU5f RFJNX0ZST05UX1NIQlVGX0hfCj4gKwo+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gKyNp bmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgo+ICsKPiArI2luY2x1ZGUgPHhlbi9ncmFudF90 YWJsZS5oPgo+ICsKPiArc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgewo+ICsJLyoKPiArCSAq IG51bWJlciBvZiByZWZlcmVuY2VzIGdyYW50ZWQgZm9yIHRoZSBiYWNrZW5kIHVzZToKPiArCSAq ICAtIGZvciBhbGxvY2F0ZWQvaW1wb3J0ZWQgZG1hLWJ1ZidzIHRoaXMgaG9sZHMgbnVtYmVyIG9m IGdyYW50Cj4gKwkgKiAgICByZWZlcmVuY2VzIGZvciB0aGUgcGFnZSBkaXJlY3RvcnkgYW5kIHBh Z2VzIG9mIHRoZSBidWZmZXIKPiArCSAqICAtIGZvciB0aGUgYnVmZmVyIHByb3ZpZGVkIGJ5IHRo ZSBiYWNrZW5kIHRoaXMgaG9sZHMgbnVtYmVyIG9mCj4gKwkgKiAgICBncmFudCByZWZlcmVuY2Vz IGZvciB0aGUgcGFnZSBkaXJlY3RvcnkgYXMgZ3JhbnQgcmVmZXJlbmNlcyBmb3IKPiArCSAqICAg IHRoZSBidWZmZXIgd2lsbCBiZSBwcm92aWRlZCBieSB0aGUgYmFja2VuZAo+ICsJICovCj4gKwlp bnQgbnVtX2dyZWZzOwo+ICsJZ3JhbnRfcmVmX3QgKmdyZWZzOwo+ICsJdW5zaWduZWQgY2hhciAq ZGlyZWN0b3J5Owo+ICsKPiArCS8qCj4gKwkgKiB0aGVyZSBhcmUgMiB3YXlzIHRvIHByb3ZpZGUg YmFja2luZyBzdG9yYWdlIGZvciB0aGlzIHNoYXJlZCBidWZmZXI6Cj4gKwkgKiBlaXRoZXIgcGFn ZXMgb3Igc2d0LiBpZiBidWZmZXIgY3JlYXRlZCBmcm9tIHNndCB0aGVuIHdlIG93bgo+ICsJICog dGhlIHBhZ2VzIGFuZCBtdXN0IGZyZWUgdGhvc2Ugb3Vyc2VsdmVzIG9uIGNsb3N1cmUKPiArCSAq Lwo+ICsJaW50IG51bV9wYWdlczsKPiArCXN0cnVjdCBwYWdlICoqcGFnZXM7Cj4gKwo+ICsJc3Ry dWN0IHNnX3RhYmxlICpzZ3Q7Cj4gKwo+ICsJc3RydWN0IHhlbmJ1c19kZXZpY2UgKnhiX2RldjsK PiArCj4gKwkvKiB0aGVzZSBhcmUgdGhlIG9wcyB1c2VkIGludGVybmFsbHkgZGVwZW5kaW5nIG9u IGJlX2FsbG9jIG1vZGUgKi8KPiArCWNvbnN0IHN0cnVjdCB4ZW5fZHJtX2Zyb250X3NoYnVmX29w cyAqb3BzOwo+ICsKPiArCS8qIFhlbiBtYXAgaGFuZGxlcyBmb3IgdGhlIGJ1ZmZlciBhbGxvY2F0 ZWQgYnkgdGhlIGJhY2tlbmQgKi8KPiArCWdyYW50X2hhbmRsZV90ICpiYWNrZW5kX21hcF9oYW5k bGVzOwo+ICt9Owo+ICsKPiArc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWZfY2ZnIHsKPiArCXN0 cnVjdCB4ZW5idXNfZGV2aWNlICp4Yl9kZXY7Cj4gKwlzaXplX3Qgc2l6ZTsKPiArCXN0cnVjdCBw YWdlICoqcGFnZXM7Cj4gKwlzdHJ1Y3Qgc2dfdGFibGUgKnNndDsKPiArCWJvb2wgYmVfYWxsb2M7 Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAqeGVuX2RybV9mcm9udF9z aGJ1Zl9hbGxvYygKPiArCQlzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1Zl9jZmcgKmNmZyk7Cj4g Kwo+ICtncmFudF9yZWZfdCB4ZW5fZHJtX2Zyb250X3NoYnVmX2dldF9kaXJfc3RhcnQoc3RydWN0 IHhlbl9kcm1fZnJvbnRfc2hidWYgKmJ1Zik7Cj4gKwo+ICtpbnQgeGVuX2RybV9mcm9udF9zaGJ1 Zl9tYXAoc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgKmJ1Zik7Cj4gKwo+ICtpbnQgeGVuX2Ry bV9mcm9udF9zaGJ1Zl91bm1hcChzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAqYnVmKTsKPiAr Cj4gK3ZvaWQgeGVuX2RybV9mcm9udF9zaGJ1Zl9mbHVzaChzdHJ1Y3QgeGVuX2RybV9mcm9udF9z aGJ1ZiAqYnVmKTsKPiArCj4gK3ZvaWQgeGVuX2RybV9mcm9udF9zaGJ1Zl9mcmVlKHN0cnVjdCB4 ZW5fZHJtX2Zyb250X3NoYnVmICpidWYpOwo+ICsKPiArI2VuZGlmIC8qIF9fWEVOX0RSTV9GUk9O VF9TSEJVRl9IXyAqLwo+IC0tIAo+IDIuNy40Cj4gCj4gX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KPiBkcmktZGV2ZWwgbWFpbGluZyBsaXN0Cj4gZHJpLWRl dmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCgotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBF bmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcg bGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==