From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.8 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 12E07C433DB for ; Tue, 22 Dec 2020 16:20:11 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 88E0223103 for ; Tue, 22 Dec 2020 16:20:10 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 88E0223103 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References:Message-ID: Subject:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=8eU6oMxWJVk7gkf8cQ4lktS9iZU3pWUdx6C2KNeugY8=; b=VSXFvHjCnL+fhWD6mGedtOUzr P6tzhwU3BwqIINMbmYBzgyggYshpVmrt4+QTwMKtBQ4FGwSCGZd0coWtaboaA1LLKH9X8mjMlrmSe 2Srdr/OLWsAVFmh8RNcf6Q1n9iFgLe2irw6UW0oLca0H6N0GJLi0VauF0GwKVSpmGPMTUTTa6fSFp Ud7w6F+FLKIjsUgztmYECi2OGiIp6vvx1NU6ax8WHYwtocv1sitn65a/1JeHoMfxCMwNOhFqlbu6C y3+UGCvvdFnKxQOF3Mq2rdb8LRoTlfne7CBOOG1jJWxIvjioXoek9qBy1hNCzHsZRC0KGrIS0HZfz M1ZPI63EQ==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1krkO9-0001ZF-O9; Tue, 22 Dec 2020 16:19:53 +0000 Received: from perceval.ideasonboard.com ([213.167.242.64]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1krkO3-0001YC-SD; Tue, 22 Dec 2020 16:19:50 +0000 Received: from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi [62.78.145.57]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 7983C2CF; Tue, 22 Dec 2020 17:19:44 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1608653984; bh=R99MruceAVx7kY/8LfEhixrEGfCcxkdXJMIwuY28BZ0=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=fWV1X1/cwocSqt/q1VimCNii2YETA9cbfXNEYtON6H9bZbUEc+MsoRsFSO4pAL0PV EfQd6qCwBHJ/EcHzUAn7i96m2BGPQsoGXamljB9rvDaOnsu7WotcYvLrnYFssl7JqV sCw/yl56HLOOhzcPn+ZVbJknieZMynwEx3nTobRs= Date: Tue, 22 Dec 2020 18:19:36 +0200 From: Laurent Pinchart To: allen.chen@ite.com.tw Subject: Re: [PATCH v6] drm/bridge: add it6505 driver Message-ID: References: <20201208105808.78029-1-allen.chen@ite.com.tw> <734036b1c57f4fb89d6cf68e54337ee7@ite.com.tw> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <734036b1c57f4fb89d6cf68e54337ee7@ite.com.tw> X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kenneth.Hung@ite.com.tw, jitao.shi@mediatek.com, daniel@ffwll.ch, Jau-Chih.Tseng@ite.com.tw, yllin@google.com, airlied@linux.ie, narmstrong@baylibre.com, jernej.skrabec@siol.net, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, a.hajda@samsung.com, Hermes.Wu@ite.com.tw, linux-mediatek@lists.infradead.org, pihsun@chromium.org, matthias.bgg@gmail.com, linux-arm-kernel@lists.infradead.org, jonas@kwiboo.se Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org SGkgQWxsZW4sCgpPbiBUdWUsIERlYyAyMiwgMjAyMCBhdCAxMToyOTozNEFNICswMDAwLCBhbGxl bi5jaGVuQGl0ZS5jb20udHcgd3JvdGU6Cj4gSGkKPiAKPiBJdCBoYXMgYmVlbiBhYm91dCB0d28g d2Vla3Mgc2luY2UgSSBwb3N0ZWQgdjYgYW5kIGhhdmVuJ3QgaGVhcmQgYW55dGhpbmcuCj4gQ29u c2lkZXIgdGhpcyBhIGdlbnRsZSBwaW5nLgo+IAo+IEp1c3Qgd29uZGVyaW5nIGlmIHRoZSBzZXQg bmVlZHMgYWRkaXRpb25hbCB3b3JrIGFuZCBJIHdpbGwgZml4IGFuZAo+IHVwc3RyZWFtIGFnYWlu LgoKSSdtIGFmcmFpZCBJIGRvbid0IGhhdmUgZW5vdWdoIGJhbmR3aWR0aCB0aGVzZSBkYXlzIHRv IHJldmlldyBhbGwgbmV3CmJyaWRnZSBkcml2ZXJzIDotUyBNYXliZSBvbmUgb2YgdGhlIERSTSBi cmlkZ2UgbWFpbnRhaW5lcnMgd291bGQgaGF2ZQptb3JlIHRpbWUgdG8gc3BlbmQgPwoKPiAtLS0t LU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+IEZyb206IEFsbGVuIENoZW4gKOmZs+afj+WuhykgCj4g U2VudDogVHVlc2RheSwgRGVjZW1iZXIgMDgsIDIwMjAgNjo1OCBQTQo+IENjOiBKYXUtQ2hpaCBU c2VuZyAo5pu+5pit5pm6KTsgSGVybWVzIFd1ICjlkLPkvbPlro8pOyBLZW5uZXRoIEh1bmcgKOa0 quWutuWAqyk7IEFsbGVuIENoZW4gKOmZs+afj+Wuhyk7IFBpLUhzdW4gU2hpaDsgSml0YW8gU2hp OyBZaWx1biBMaW47IEhlcm1lcyBXdSAo5ZCz5L2z5a6PKTsgQW5kcnplaiBIYWpkYTsgTmVpbCBB cm1zdHJvbmc7IExhdXJlbnQgUGluY2hhcnQ7IEpvbmFzIEthcmxtYW47IEplcm5laiBTa3JhYmVj OyBEYXZpZCBBaXJsaWU7IERhbmllbCBWZXR0ZXI7IE1hdHRoaWFzIEJydWdnZXI7IG9wZW4gbGlz dDsgb3BlbiBsaXN0OkRSTSBEUklWRVJTOyBtb2RlcmF0ZWQgbGlzdDpBUk0vTWVkaWF0ZWsgU29D IHN1cHBvcnQ7IG1vZGVyYXRlZCBsaXN0OkFSTS9NZWRpYXRlayBTb0Mgc3VwcG9ydAo+IFN1Ympl Y3Q6IFtQQVRDSCB2Nl0gZHJtL2JyaWRnZTogYWRkIGl0NjUwNSBkcml2ZXIKPiAKPiBUaGlzIGFk ZHMgc3VwcG9ydCBmb3IgdGhlIGlURSBJVDY1MDUuCj4gVGhpcyBkZXZpY2UgY2FuIGNvbnZlcnQg RFBJIHNpZ25hbCB0byBEUCBvdXRwdXQuCj4gCj4gRnJvbTogQWxsZW4gQ2hlbiA8YWxsZW4uY2hl bkBpdGUuY29tLnR3Pgo+IFNpZ25lZC1vZmYtYnk6IEppdGFvIFNoaSA8aml0YW8uc2hpQG1lZGlh dGVrLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBQaS1Ic3VuIFNoaWggPHBpaHN1bkBjaHJvbWl1bS5v cmc+Cj4gU2lnbmVkLW9mZi1ieTogWWlsdW4gTGluIDx5bGxpbkBnb29nbGUuY29tPgo+IFNpZ25l ZC1vZmYtYnk6IEhlcm1lcyBXdSA8aGVybWVzLnd1QGl0ZS5jb20udHc+Cj4gU2lnbmVkLW9mZi1i eTogQWxsZW4gQ2hlbiA8YWxsZW4uY2hlbkBpdGUuY29tLnR3Pgo+IC0tLQo+ICBkcml2ZXJzL2dw dS9kcm0vYnJpZGdlL0tjb25maWcgICAgICB8ICAgIDcgKwo+ICBkcml2ZXJzL2dwdS9kcm0vYnJp ZGdlL01ha2VmaWxlICAgICB8ICAgIDEgKwo+ICBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2l0ZS1p dDY1MDUuYyB8IDMzNDMgKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIDMgZmlsZXMgY2hh bmdlZCwgMzM1MSBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vYnJpZGdlL2l0ZS1pdDY1MDUuYwo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vYnJpZGdlL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcKPiBpbmRl eCBlNDExMGQ2Y2E3YjNjLi4yNWQzNGQ3MTk2MDA0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9icmlkZ2UvS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZp Zwo+IEBAIC03NCw2ICs3NCwxMyBAQCBjb25maWcgRFJNX0xPTlRJVU1fTFQ5NjExVVhDCj4gIAkg IEhETUkgc2lnbmFscwo+ICAJICBQbGVhc2Ugc2F5IFkgaWYgeW91IGhhdmUgc3VjaCBoYXJkd2Fy ZS4KPiAgCj4gK2NvbmZpZyBEUk1fSVRFX0lUNjUwNQo+ICsJdHJpc3RhdGUgIklURSBJVDY1MDUg RGlzcGxheVBvcnQgYnJpZGdlIgo+ICsJZGVwZW5kcyBvbiBPRgo+ICsJc2VsZWN0IERSTV9LTVNf SEVMUEVSCj4gKwloZWxwCj4gKwkgIElURSBJVDY1MDUgRGlzcGxheVBvcnQgYnJpZGdlIGNoaXAg ZHJpdmVyLgo+ICsKPiAgY29uZmlnIERSTV9MVkRTX0NPREVDCj4gIAl0cmlzdGF0ZSAiVHJhbnNw YXJlbnQgTFZEUyBlbmNvZGVycyBhbmQgZGVjb2RlcnMgc3VwcG9ydCIKPiAgCWRlcGVuZHMgb24g T0YKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZSBiL2RyaXZl cnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUKPiBpbmRleCA4NmU3YWNjNzZmOGQ2Li4yYjJmOGYw YjViMGZhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlCj4gQEAgLTQsNiArNCw3IEBAIG9i ai0kKENPTkZJR19EUk1fQ0hST05URUxfQ0g3MDMzKSArPSBjaHJvbnRlbC1jaDcwMzMubwo+ICBv YmotJChDT05GSUdfRFJNX0RJU1BMQVlfQ09OTkVDVE9SKSArPSBkaXNwbGF5LWNvbm5lY3Rvci5v Cj4gIG9iai0kKENPTkZJR19EUk1fTE9OVElVTV9MVDk2MTEpICs9IGxvbnRpdW0tbHQ5NjExLm8K PiAgb2JqLSQoQ09ORklHX0RSTV9MT05USVVNX0xUOTYxMVVYQykgKz0gbG9udGl1bS1sdDk2MTF1 eGMubwo+ICtvYmotJChDT05GSUdfRFJNX0lURV9JVDY1MDUpICs9IGl0ZS1pdDY1MDUubwo+ICBv YmotJChDT05GSUdfRFJNX0xWRFNfQ09ERUMpICs9IGx2ZHMtY29kZWMubwo+ICBvYmotJChDT05G SUdfRFJNX01FR0FDSElQU19TVERQWFhYWF9HRV9CODUwVjNfRlcpICs9IG1lZ2FjaGlwcy1zdGRw eHh4eC1nZS1iODUwdjMtZncubwo+ICBvYmotJChDT05GSUdfRFJNX05YUF9QVE4zNDYwKSArPSBu eHAtcHRuMzQ2MC5vCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvaXRlLWl0 NjUwNS5jIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2NTA1LmMKPiBuZXcgZmlsZSBt b2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMDAuLjVlNzY3MTlhNTFhNGEKPiAtLS0gL2Rl di9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9pdGUtaXQ2NTA1LmMKPiBAQCAt MCwwICsxLDMzNDMgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9u bHkgT1IgQlNELTItQ2xhdXNlKQo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjAsIFRoZSBM aW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsgKi8KPiArI2luY2x1ZGUg PGxpbnV4L2JpdHMuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Cj4gKyNpbmNsdWRlIDxs aW51eC9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvZXh0Y29uLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9mcy5oPgo+ICsjaW5jbHVkZSA8bGludXgv Z3Bpby9jb25zdW1lci5oPgo+ICsjaW5jbHVkZSA8bGludXgvaTJjLmg+Cj4gKyNpbmNsdWRlIDxs aW51eC9pbnRlcnJ1cHQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ICsjaW5jbHVk ZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+Cj4gKyNp bmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25z dW1lci5oPgo+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3dh aXQuaD4KPiArCj4gKyNpbmNsdWRlIDxjcnlwdG8vaGFzaC5oPgo+ICsKPiArI2luY2x1ZGUgPGRy bS9kcm1fYXRvbWljX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9icmlkZ2UuaD4KPiAr I2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBl ci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9kcF9oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9k cm1fZWRpZC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9oZGNwLmg+Cj4gKyNpbmNsdWRlIDxkcm0v ZHJtX3ByaW50Lmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX3Byb2JlX2hlbHBlci5oPgo+ICsKPiAr I2luY2x1ZGUgPHNvdW5kL2hkbWktY29kZWMuaD4KPiArCj4gKyNkZWZpbmUgUkVHX0lDX1ZFUiAw eDA0Cj4gKwo+ICsjZGVmaW5lIFJFR19SRVNFVF9DVFJMIDB4MDUKPiArI2RlZmluZSBWSURFT19S RVNFVCBCSVQoMCkKPiArI2RlZmluZSBBVURJT19SRVNFVCBCSVQoMSkKPiArI2RlZmluZSBBTExf TE9HSUNfUkVTRVQgQklUKDIpCj4gKyNkZWZpbmUgQVVYX1JFU0VUIEJJVCgzKQo+ICsjZGVmaW5l IEhEQ1BfUkVTRVQgQklUKDQpCj4gKwo+ICsjZGVmaW5lIElOVF9TVEFUVVNfMDEgMHgwNgo+ICsj ZGVmaW5lIElOVF9NQVNLXzAxIDB4MDkKPiArI2RlZmluZSBJTlRfSFBEX0NIQU5HRSBCSVQoMCkK PiArI2RlZmluZSBJTlRfUkVDRUlWRV9IUERfSVJRIEJJVCgxKQo+ICsjZGVmaW5lIElOVF9TQ0RU X0NIQU5HRSBCSVQoMikKPiArI2RlZmluZSBJTlRfSERDUF9GQUlMIEJJVCgzKQo+ICsjZGVmaW5l IElOVF9IRENQX0RPTkUgQklUKDQpCj4gKwo+ICsjZGVmaW5lIElOVF9TVEFUVVNfMDIgMHgwNwo+ ICsjZGVmaW5lIElOVF9NQVNLXzAyIDB4MEEKPiArI2RlZmluZSBJTlRfQVVYX0NNRF9GQUlMIEJJ VCgwKQo+ICsjZGVmaW5lIElOVF9IRENQX0tTVl9DSEVDSyBCSVQoMSkKPiArI2RlZmluZSBJTlRf QVVESU9fRklGT19FUlJPUiBCSVQoMikKPiArCj4gKyNkZWZpbmUgSU5UX1NUQVRVU18wMyAweDA4 Cj4gKyNkZWZpbmUgSU5UX01BU0tfMDMgMHgwQgo+ICsjZGVmaW5lIElOVF9MSU5LX1RSQUlOX0ZB SUwgQklUKDQpCj4gKyNkZWZpbmUgSU5UX1ZJRF9GSUZPX0VSUk9SIEJJVCg1KQo+ICsjZGVmaW5l IElOVF9JT19MQVRDSF9GSUZPX09WRVJGTE9XIEJJVCg3KQo+ICsKPiArI2RlZmluZSBSRUdfU1lT VEVNX1NUUyAweDBECj4gKyNkZWZpbmUgSU5UX1NUUyBCSVQoMCkKPiArI2RlZmluZSBIUERfU1RT IEJJVCgxKQo+ICsjZGVmaW5lIFZJREVPX1NUQiBCSVQoMikKPiArCj4gKyNkZWZpbmUgUkVHX0xJ TktfVFJBSU5fU1RTIDB4MEUKPiArI2RlZmluZSBMSU5LX1NUQVRFX0NSIEJJVCgyKQo+ICsjZGVm aW5lIExJTktfU1RBVEVfRVEgQklUKDMpCj4gKyNkZWZpbmUgTElOS19TVEFURV9OT1JQIEJJVCg0 KQo+ICsKPiArI2RlZmluZSBSRUdfQkFOS19TRUwgMHgwRgo+ICsjZGVmaW5lIFJFR19DTEtfQ1RS TDAgMHgxMAo+ICsjZGVmaW5lIE1fUENMS19ERUxBWSAweDAzCj4gKwo+ICsjZGVmaW5lIFJFR19B VVhfT1BUIDB4MTEKPiArI2RlZmluZSBBVVhfQVVUT19SU1QgQklUKDApCj4gKyNkZWZpbmUgQVVY X0ZJWF9GUkVRIEJJVCgzKQo+ICsKPiArI2RlZmluZSBSRUdfREFUQV9DVFJMMCAweDEyCj4gKyNk ZWZpbmUgVklERU9fTEFUQ0hfRURHRSBCSVQoNCkKPiArI2RlZmluZSBFTkFCTEVfUENMS19DT1VO VEVSIEJJVCg3KQo+ICsKPiArI2RlZmluZSBSRUdfUENMS19DT1VOVEVSX1ZBTFVFIDB4MTMKPiAr Cj4gKyNkZWZpbmUgUkVHXzUwMV9GSUZPX0NUUkwgMHgxNQo+ICsjZGVmaW5lIFJTVF81MDFfRklG TyBCSVQoMSkKPiArCj4gKyNkZWZpbmUgUkVHX1RSQUlOX0NUUkwwIDB4MTYKPiArI2RlZmluZSBG T1JDRV9MQlIgQklUKDApCj4gKyNkZWZpbmUgTEFORV9DT1VOVF9NQVNLIDB4MDYKPiArI2RlZmlu ZSBMQU5FX1NXQVAgQklUKDMpCj4gKyNkZWZpbmUgU1BSRUFEX0FNUF81IEJJVCg0KQo+ICsjZGVm aW5lIEZPUkNFX0NSX0RPTkUgQklUKDUpCj4gKyNkZWZpbmUgRk9SQ0VfRVFfRE9ORSBCSVQoNikK PiArCj4gKyNkZWZpbmUgUkVHX1RSQUlOX0NUUkwxIDB4MTcKPiArI2RlZmluZSBBVVRPX1RSQUlO IEJJVCgwKQo+ICsjZGVmaW5lIE1BTlVBTF9UUkFJTiBCSVQoMSkKPiArI2RlZmluZSBGT1JDRV9S RVRSQUlOIEJJVCgyKQo+ICsKPiArI2RlZmluZSBSRUdfQVVYX0NUUkwgMHgyMwo+ICsjZGVmaW5l IENMUl9FRElEX0ZJRk8gQklUKDApCj4gKyNkZWZpbmUgQVVYX1VTRVJfTU9ERSBCSVQoMSkKPiAr I2RlZmluZSBBVVhfTk9fU0VHTUVOVF9XUiBCSVQoNikKPiArI2RlZmluZSBBVVhfRU5fRklGT19S RUFEIEJJVCg3KQo+ICsKPiArI2RlZmluZSBSRUdfQVVYX0FEUl8wXzcgMHgyNAo+ICsjZGVmaW5l IFJFR19BVVhfQURSXzhfMTUgMHgyNQo+ICsjZGVmaW5lIFJFR19BVVhfQURSXzE2XzE5IDB4MjYK PiArI2RlZmluZSBSRUdfQVVYX09VVF9EQVRBMCAweDI3Cj4gKwo+ICsjZGVmaW5lIFJFR19BVVhf Q01EX1JFUSAweDJCCj4gKyNkZWZpbmUgQVVYX0JVU1kgQklUKDUpCj4gKwo+ICsjZGVmaW5lIFJF R19BVVhfREFUQV8wXzcgMHgyQwo+ICsjZGVmaW5lIFJFR19BVVhfREFUQV84XzE1IDB4MkQKPiAr I2RlZmluZSBSRUdfQVVYX0RBVEFfMTZfMjMgMHgyRQo+ICsjZGVmaW5lIFJFR19BVVhfREFUQV8y NF8zMSAweDJGCj4gKwo+ICsjZGVmaW5lIFJFR19BVVhfREFUQV9GSUZPIDB4MkYKPiArCj4gKyNk ZWZpbmUgUkVHX0FVWF9FUlJPUl9TVFMgMHg5Rgo+ICsjZGVmaW5lIE1fQVVYX1JFUV9GQUlMIDB4 MDMKPiArCj4gKyNkZWZpbmUgUkVHX0hEQ1BfQ1RSTDEgMHgzOAo+ICsjZGVmaW5lIEhEQ1BfQ1Bf RU5BQkxFIEJJVCgwKQo+ICsKPiArI2RlZmluZSBSRUdfSERDUF9UUklHR0VSIDB4MzkKPiArI2Rl ZmluZSBIRENQX1RSSUdHRVJfU1RBUlQgIEJJVCgwKQo+ICsjZGVmaW5lIEhEQ1BfVFJJR0dFUl9D UElSUSAgQklUKDEpCj4gKyNkZWZpbmUgSERDUF9UUklHR0VSX0tTVl9ET05FICBCSVQoNCkKPiAr I2RlZmluZSBIRENQX1RSSUdHRVJfS1NWX0ZBSUwgQklUKDUpCj4gKwo+ICsjZGVmaW5lIFJFR19I RENQX0NUUkwyIDB4M0EKPiArI2RlZmluZSBIRENQX0FOX1NFTCBCSVQoMCkKPiArI2RlZmluZSBI RENQX0FOX0dFTiBCSVQoMSkKPiArI2RlZmluZSBIRENQX0hXX0hQRElSUV9BQ1QgQklUKDIpCj4g KyNkZWZpbmUgSERDUF9FTl9NMF9SRUFEIEJJVCg1KQo+ICsKPiArI2RlZmluZSBSRUdfTTBfMF83 IDB4NEMKPiArI2RlZmluZSBSRUdfQU5fMF83IDB4NEMKPiArI2RlZmluZSBSRUdfU1BfQ1RSTDAg MHg1OAo+ICsjZGVmaW5lIFJFR19JUF9DVFJMMSAweDU5Cj4gKyNkZWZpbmUgUkVHX0lQX0NUUkwy IDB4NUEKPiArCj4gKyNkZWZpbmUgUkVHX0xJTktfRFJWIDB4NUMKPiArI2RlZmluZSBEUlZfSFMg QklUKDEpCj4gKwo+ICsjZGVmaW5lIFJFR19EUlZfTE5fREFUQV9TRUwgMHg1RAo+ICsKPiArI2Rl ZmluZSBSRUdfQVVYIDB4NUUKPiArCj4gKyNkZWZpbmUgUkVHX1ZJRF9CVVNfQ1RSTDAgMHg2MAo+ ICsjZGVmaW5lIElOX0REUiBCSVQoMikKPiArI2RlZmluZSBERFJfQ0QgKDB4MDEgPDwgNikKPiAr Cj4gKyNkZWZpbmUgUkVHX1ZJRF9CVVNfQ1RSTDEgMHg2MQo+ICsjZGVmaW5lIFRYX0ZJRk9fUkVT RVQgQklUKDEpCj4gKwo+ICsjZGVmaW5lIFJFR19JTlBVVF9DVFJMIDB4QTAKPiArI2RlZmluZSBJ TlBVVF9IU1lOQ19QT0wgQklUKDApCj4gKyNkZWZpbmUgSU5QVVRfVlNZTkNfUE9MIEJJVCgyKQo+ ICsjZGVmaW5lIElOUFVUX0lOVEVSTEFDRUQgQklUKDQpCj4gKwo+ICsjZGVmaW5lIFJFR19JTlBV VF9IVE9UQUwgMHhBMQo+ICsjZGVmaW5lIFJFR19JTlBVVF9IQUNUSVZFX1NUQVJUIDB4QTMKPiAr I2RlZmluZSBSRUdfSU5QVVRfSEFDVElWRV9XSURUSCAweEE1Cj4gKyNkZWZpbmUgUkVHX0lOUFVU X0hGUk9OVF9QT1JDSCAweEE3Cj4gKyNkZWZpbmUgUkVHX0lOUFVUX0hTWU5DX1dJRFRIIDB4QTkK PiArI2RlZmluZSBSRUdfSU5QVVRfVlRPVEFMIDB4QUIKPiArI2RlZmluZSBSRUdfSU5QVVRfVkFD VElWRV9TVEFSVCAweEFECj4gKyNkZWZpbmUgUkVHX0lOUFVUX1ZBQ1RJVkVfV0lEVEggMHhBRgo+ ICsjZGVmaW5lIFJFR19JTlBVVF9WRlJPTlRfUE9SQ0ggMHhCMQo+ICsjZGVmaW5lIFJFR19JTlBV VF9WU1lOQ19XSURUSCAweEIzCj4gKwo+ICsjZGVmaW5lIFJFR19BVURJT19TUkNfQ1RSTCAweEI4 Cj4gKyNkZWZpbmUgTV9BVURJT19JMlNfRU4gMHgwRgo+ICsjZGVmaW5lIEVOX0kyUzAgQklUKDAp Cj4gKyNkZWZpbmUgRU5fSTJTMSBCSVQoMSkKPiArI2RlZmluZSBFTl9JMlMyIEJJVCgyKQo+ICsj ZGVmaW5lIEVOX0kyUzMgQklUKDMpCj4gKyNkZWZpbmUgQVVESU9fRklGT19SRVNFVCBCSVQoNykK PiArCj4gKyNkZWZpbmUgUkVHX0FVRElPX0ZNVCAweEI5Cj4gKyNkZWZpbmUgUkVHX0FVRElPX0ZJ Rk9fU0VMIDB4QkEKPiArCj4gKyNkZWZpbmUgUkVHX0FVRElPX0NUUkwwIDB4QkIKPiArI2RlZmlu ZSBBVURJT19GVUxMX1BLVCBCSVQoNCkKPiArI2RlZmluZSBBVURJT18xNkJfQk9VTkQgQklUKDUp Cj4gKwo+ICsjZGVmaW5lIFJFR19BVURJT19DVFJMMSAweEJDCj4gKyNkZWZpbmUgUkVHX0FVRElP X0lOUFVUX0ZSRVEgMHhCRQo+ICsKPiArI2RlZmluZSBSRUdfSUVDOTU4X1NUUzAgMHhCRgo+ICsj ZGVmaW5lIFJFR19JRUM5NThfU1RTMSAweEMwCj4gKyNkZWZpbmUgUkVHX0lFQzk1OF9TVFMyIDB4 QzEKPiArI2RlZmluZSBSRUdfSUVDOTU4X1NUUzMgMHhDMgo+ICsjZGVmaW5lIFJFR19JRUM5NThf U1RTNCAweEMzCj4gKwo+ICsjZGVmaW5lIFJFR19IUERfSVJRX1RJTUUgMHhDOQo+ICsjZGVmaW5l IFJFR19BVVhfREVCVUdfTU9ERSAweENBCj4gKyNkZWZpbmUgUkVHX0FVWF9PUFQyIDB4Q0IKPiAr I2RlZmluZSBSRUdfSERDUF9PUFQgMHhDRQo+ICsjZGVmaW5lIFJFR19VU0VSX0RSVl9QUkUgMHhD Rgo+ICsKPiArI2RlZmluZSBSRUdfREFUQV9NVVRFX0NUUkwgMHhEMwo+ICsjZGVmaW5lIEVOQUJM RV9FTkhBTkNFRF9GUkFNRSBCSVQoMCkKPiArI2RlZmluZSBFTkFCTEVfQVVUT19WSURFT19GSUZP X1JFU0VUIEJJVCgxKQo+ICsjZGVmaW5lIEVOX1ZJRF9NVVRFIEJJVCg0KQo+ICsjZGVmaW5lIEVO X0FVRF9NVVRFIEJJVCg1KQo+ICsKPiArI2RlZmluZSBSRUdfVElNRV9TVE1QX0NUUkwgMHhENAo+ ICsjZGVmaW5lIEVOX0VOSEFOQ0VfVklEX1NUTVAgQklUKDApCj4gKyNkZWZpbmUgRU5fRU5IQU5D RV9BVURfU1RNUCBCSVQoMikKPiArI2RlZmluZSBNX1NUQU1QX1NURVAgMHgzMAo+ICsjZGVmaW5l IEVOX1NTQ19HQVQgQklUKDYpCj4gKwo+ICsjZGVmaW5lIFJFR19JTkZPRlJBTUVfQ1RSTCAweEU4 Cj4gKyNkZWZpbmUgRU5fQVZJX1BLVCBCSVQoMCkKPiArI2RlZmluZSBFTl9BVURfUEtUIEJJVCgx KQo+ICsjZGVmaW5lIEVOX01QR19QS1QgQklUKDIpCj4gKyNkZWZpbmUgRU5fR0VOX1BLVCBCSVQo MykKPiArI2RlZmluZSBFTl9WSURfVElNRV9TVE1QIEJJVCg0KQo+ICsjZGVmaW5lIEVOX0FVRF9U SU1FX1NUTVAgQklUKDUpCj4gKyNkZWZpbmUgRU5fVklEX0NUUkxfUEtUIChFTl9BVklfUEtUIHwg RU5fVklEX1RJTUVfU1RNUCkKPiArI2RlZmluZSBFTl9BVURfQ1RSTF9QS1QgKEVOX0FVRF9QS1Qg fCBFTl9BVURfVElNRV9TVE1QKQo+ICsKPiArI2RlZmluZSBSRUdfQVVESU9fTl8wXzcgMHhERQo+ ICsjZGVmaW5lIFJFR19BVURJT19OXzhfMTUgMHhERgo+ICsjZGVmaW5lIFJFR19BVURJT19OXzE2 XzIzIDB4RTAKPiArCj4gKyNkZWZpbmUgUkVHX0FWSV9JTkZPX0RCMSAweEU5Cj4gKyNkZWZpbmUg UkVHX0FWSV9JTkZPX0RCMiAweEVBCj4gKyNkZWZpbmUgUkVHX0FWSV9JTkZPX0RCMyAweEVCCj4g KyNkZWZpbmUgUkVHX0FWSV9JTkZPX0RCNCAweEVDCj4gKyNkZWZpbmUgUkVHX0FWSV9JTkZPX0RC NSAweEVECj4gKyNkZWZpbmUgUkVHX0FWSV9JTkZPX1NVTSAweEY2Cj4gKwo+ICsjZGVmaW5lIFJF R19BVURfSU5GT0ZSQU1fREIxIDB4RjcKPiArI2RlZmluZSBSRUdfQVVEX0lORk9GUkFNX0RCMiAw eEY4Cj4gKyNkZWZpbmUgUkVHX0FVRF9JTkZPRlJBTV9EQjMgMHhGOQo+ICsjZGVmaW5lIFJFR19B VURfSU5GT0ZSQU1fREI0IDB4RkEKPiArI2RlZmluZSBSRUdfQVVEX0lORk9GUkFNX1NVTSAweEZC Cj4gKwo+ICsvKiB0aGUgZm9sbG93aW5nIHNpeCByZWdpc3RlcnMgYXJlIGluIGJhbmsxICovCj4g KyNkZWZpbmUgUkVHX0RSVl8wX0RCXzgwMF9NViAweDdFCj4gKyNkZWZpbmUgUkVHX1BSRV8wX0RC XzgwMF9NViAweDdGCj4gKyNkZWZpbmUgUkVHX1BSRV8zUDVfREJfODAwX01WIDB4ODEKPiArI2Rl ZmluZSBSRUdfU1NDX0NUUkwwIDB4ODgKPiArI2RlZmluZSBSRUdfU1NDX0NUUkwxIDB4ODkKPiAr I2RlZmluZSBSRUdfU1NDX0NUUkwyIDB4OEEKPiArCj4gKyNkZWZpbmUgUkJSIERQX0xJTktfQldf MV82Mgo+ICsjZGVmaW5lIEhCUiBEUF9MSU5LX0JXXzJfNwo+ICsjZGVmaW5lIEhCUjIgRFBfTElO S19CV181XzQKPiArI2RlZmluZSBIQlIzIERQX0xJTktfQldfOF8xCj4gKwo+ICsvKiBWZW5kb3Ig b3B0aW9uICovCj4gKyNkZWZpbmUgSERDUF9ERVNJUkVEIDEKPiArI2RlZmluZSBNQVhfTEFORV9D T1VOVCA0Cj4gKyNkZWZpbmUgTUFYX0xJTktfUkFURSBIQlIKPiArI2RlZmluZSBBVVRPX1RSQUlO X1JFVFJZIDMKPiArI2RlZmluZSBNQVhfSERDUF9ET1dOX1NUUkVBTV9DT1VOVCAxMAo+ICsjZGVm aW5lIE1BWF9DUl9MRVZFTCAweDAzCj4gKyNkZWZpbmUgTUFYX0VRX0xFVkVMIDB4MDMKPiArI2Rl ZmluZSBBVVhfV0FJVF9USU1FT1VUX01TIDE1Cj4gKyNkZWZpbmUgQVVYX0ZJRk9fTUFYX1NJWkUg MzIKPiArI2RlZmluZSBQSVhFTF9DTEtfREVMQVkgMQo+ICsjZGVmaW5lIFBJWEVMX0NMS19JTlZF UlNFIDAKPiArI2RlZmluZSBBREpVU1RfUEhBU0VfVEhSRVNIT0xEIDgwMDAwCj4gKyNkZWZpbmUg RFBJX1BJWEVMX0NMS19NQVggOTUwMDAKPiArI2RlZmluZSBIRENQX1NIQTFfRklGT19MRU4gKE1B WF9IRENQX0RPV05fU1RSRUFNX0NPVU5UICogNSArIDEwKQo+ICsjZGVmaW5lIERFRkFVTFRfUFdS X09OIDAKPiArI2RlZmluZSBERUZBVUxUX0RSVl9IT0xEIDAKPiArCj4gKyNkZWZpbmUgQVVESU9f U0VMRUNUIEkyUwo+ICsjZGVmaW5lIEFVRElPX1RZUEUgTFBDTQo+ICsjZGVmaW5lIEFVRElPX1NB TVBMRV9SQVRFIFNBTVBMRV9SQVRFXzQ4Swo+ICsjZGVmaW5lIEFVRElPX0NIQU5ORUxfQ09VTlQg Mgo+ICsKPiArLyoKPiArICogMDogU3RhbmRhcmQgSTJTCj4gKyAqIDE6IDMyYml0IEkyUwo+ICsg Ki8KPiArI2RlZmluZSBJMlNfSU5QVVRfRk9STUFUIDEKPiArCj4gKy8qCj4gKyAqIDA6IExlZnQt anVzdGlmaWVkCj4gKyAqIDE6IFJpZ2h0LWp1c3RpZmllZAo+ICsgKi8KPiArI2RlZmluZSBJMlNf SlVTVElGSUVEIDAKPiArCj4gKy8qCj4gKyAqIDA6IERhdGEgZGVsYXkgMVQgY29ycmVzcG9uZCB0 byBXUwo+ICsgKiAxOiBObyBkYXRhIGRlbGF5IGNvcnJlc3BvbmQgdG8gV1MKPiArICovCj4gKyNk ZWZpbmUgSTJTX0RBVEFfREVMQVkgMAo+ICsKPiArLyoKPiArICogMDogTGVmdCBjaGFubmVsCj4g KyAqIDE6IFJpZ2h0IGNoYW5uZWwKPiArICovCj4gKyNkZWZpbmUgSTJTX1dTX0NIQU5ORUwgMAo+ ICsKPiArLyoKPiArICogMDogTVNCIHNoaWZ0IGZpcnN0Cj4gKyAqIDE6IExTQiBzaGlmdCBmaXJz dAo+ICsgKi8KPiArI2RlZmluZSBJMlNfREFUQV9TRVFVRU5DRSAwCj4gKwo+ICsvKgo+ICsgKiBB dWRpbyBTYW1wbGUgV29yZCBMZW5ndGgKPiArICogV09SRF9MRU5HVEhfMTZCSVQKPiArICogV09S RF9MRU5HVEhfMThCSVQKPiArICogV09SRF9MRU5HVEhfMjBCSVQKPiArICogV09SRF9MRU5HVEhf MjRCSVQKPiArICovCj4gKyNkZWZpbmUgQVVESU9fV09SRF9MRU5HVEggV09SRF9MRU5HVEhfMjRC SVQKPiArCj4gK2VudW0gYXV4X2NtZF90eXBlIHsKPiArCUNNRF9BVVhfTkFUSVZFX1JFQUQgPSAw eDAsCj4gKwlDTURfQVVYX05BVElWRV9XUklURSA9IDB4NSwKPiArCUNNRF9BVVhfSTJDX0VESURf UkVBRCA9IDB4QiwKPiArfTsKPiArCj4gK2VudW0gYXV4X2NtZF9yZXBseSB7Cj4gKwlSRVBMWV9B Q0ssCj4gKwlSRVBMWV9OQUNLLAo+ICsJUkVQTFlfREVGRVIsCj4gK307Cj4gKwo+ICtlbnVtIGxp bmtfdHJhaW5fc3RhdHVzIHsKPiArCUxJTktfSURMRSwKPiArCUxJTktfQlVTWSwKPiArCUxJTktf T0ssCj4gK307Cj4gKwo+ICtlbnVtIGhkY3Bfc3RhdGUgewo+ICsJSERDUF9BVVRIX0lETEUsCj4g KwlIRENQX0FVVEhfR09JTkcsCj4gKwlIRENQX0FVVEhfRE9ORSwKPiArfTsKPiArCj4gK3N0cnVj dCBpdDY1MDVfcGxhdGZvcm1fZGF0YSB7Cj4gKwlzdHJ1Y3QgcmVndWxhdG9yICpwd3IxODsKPiAr CXN0cnVjdCByZWd1bGF0b3IgKm92ZGQ7Cj4gKwlzdHJ1Y3QgZ3Bpb19kZXNjICpncGlvZF9yZXNl dDsKPiArfTsKPiArCj4gK2VudW0gaXQ2NTA1X2F1ZGlvX3NlbGVjdCB7Cj4gKwlJMlMgPSAwLAo+ ICsJU1BESUYsCj4gK307Cj4gKwo+ICtlbnVtIGl0NjUwNV9hdWRpb19zYW1wbGVfcmF0ZSB7Cj4g KwlTQU1QTEVfUkFURV8yNEsgPSAweDYsCj4gKwlTQU1QTEVfUkFURV8zMksgPSAweDMsCj4gKwlT QU1QTEVfUkFURV80OEsgPSAweDIsCj4gKwlTQU1QTEVfUkFURV85NksgPSAweEEsCj4gKwlTQU1Q TEVfUkFURV8xOTJLID0gMHhFLAo+ICsJU0FNUExFX1JBVEVfNDRfMUsgPSAweDAsCj4gKwlTQU1Q TEVfUkFURV84OF8ySyA9IDB4OCwKPiArCVNBTVBMRV9SQVRFXzE3Nl80SyA9IDB4QywKPiArfTsK PiArCj4gK2VudW0gaXQ2NTA1X2F1ZGlvX3R5cGUgewo+ICsJTFBDTSA9IDAsCj4gKwlOTFBDTSwK PiArCURTUywKPiArfTsKPiArCj4gK2VudW0gaXQ2NTA1X2F1ZGlvX3dvcmRfbGVuZ3RoIHsKPiAr CVdPUkRfTEVOR1RIXzE2QklUID0gMCwKPiArCVdPUkRfTEVOR1RIXzE4QklULAo+ICsJV09SRF9M RU5HVEhfMjBCSVQsCj4gKwlXT1JEX0xFTkdUSF8yNEJJVCwKPiArfTsKPiArCj4gK3N0cnVjdCBp dDY1MDVfYXVkaW9fZGF0YSB7Cj4gKwllbnVtIGl0NjUwNV9hdWRpb19zZWxlY3Qgc2VsZWN0Owo+ ICsJZW51bSBpdDY1MDVfYXVkaW9fc2FtcGxlX3JhdGUgc2FtcGxlX3JhdGU7Cj4gKwllbnVtIGl0 NjUwNV9hdWRpb190eXBlIHR5cGU7Cj4gKwllbnVtIGl0NjUwNV9hdWRpb193b3JkX2xlbmd0aCB3 b3JkX2xlbmd0aDsKPiArCXU4IGNoYW5uZWxfY291bnQ7Cj4gKwl1OCBpMnNfaW5wdXRfZm9ybWF0 Owo+ICsJdTggaTJzX2p1c3RpZmllZDsKPiArCXU4IGkyc19kYXRhX2RlbGF5Owo+ICsJdTggaTJz X3dzX2NoYW5uZWw7Cj4gKwl1OCBpMnNfZGF0YV9zZXF1ZW5jZTsKPiArfTsKPiArCj4gK3N0cnVj dCBpdDY1MDVfYXVkaW9fc2FtcGxlX3JhdGVfbWFwIHsKPiArCWVudW0gaXQ2NTA1X2F1ZGlvX3Nh bXBsZV9yYXRlIHJhdGU7Cj4gKwlpbnQgc2FtcGxlX3JhdGVfdmFsdWU7Cj4gK307Cj4gKwo+ICtz dHJ1Y3QgaXQ2NTA1X2RybV9kcF9saW5rIHsKPiArCXVuc2lnbmVkIGNoYXIgcmV2aXNpb247Cj4g Kwl1bnNpZ25lZCBpbnQgcmF0ZTsKPiArCXVuc2lnbmVkIGludCBudW1fbGFuZXM7Cj4gKwl1bnNp Z25lZCBsb25nIGNhcGFiaWxpdGllczsKPiArfTsKPiArCj4gK3N0cnVjdCBpdDY1MDUgewo+ICsJ c3RydWN0IGRybV9kcF9hdXggYXV4Owo+ICsJc3RydWN0IGRybV9icmlkZ2UgYnJpZGdlOwo+ICsJ c3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKPiArCXN0cnVjdCBlZGlkICplZGlkOwo+ICsJc3Ry dWN0IGRybV9jb25uZWN0b3IgY29ubmVjdG9yOwo+ICsJc3RydWN0IGl0NjUwNV9kcm1fZHBfbGlu ayBsaW5rOwo+ICsJc3RydWN0IGl0NjUwNV9wbGF0Zm9ybV9kYXRhIHBkYXRhOwo+ICsJc3RydWN0 IG11dGV4IGV4dGNvbl9sb2NrOwo+ICsJc3RydWN0IG11dGV4IG1vZGVfbG9jazsKPiArCXN0cnVj dCBtdXRleCBhdXhfbG9jazsKPiArCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKPiArCXN0cnVjdCBk cm1fZGlzcGxheV9tb2RlIHZpZGVvX2luZm87Cj4gKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZXZl bnRfbmI7Cj4gKwlzdHJ1Y3QgZXh0Y29uX2RldiAqZXh0Y29uOwo+ICsJc3RydWN0IHdvcmtfc3Ry dWN0IGV4dGNvbl93cTsKPiArCWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgY29ubmVjdG9yX3N0 YXR1czsKPiArCWVudW0gbGlua190cmFpbl9zdGF0dXMgbGlua19zdGF0ZTsKPiArCXN0cnVjdCB3 b3JrX3N0cnVjdCBsaW5rX3dvcmtzOwo+ICsJdTggZHBjZFtEUF9SRUNFSVZFUl9DQVBfU0laRV07 Cj4gKwl1OCBsYW5lX2NvdW50Owo+ICsJdTggbGlua19yYXRlX2J3X2NvZGU7Cj4gKwl1OCBzaW5r X2NvdW50Owo+ICsJYm9vbCBzdGVwX3RyYWluOwo+ICsJYm9vbCBicmFuY2hfZGV2aWNlOwo+ICsJ Ym9vbCBlbmFibGVfc3NjOwo+ICsJYm9vbCBsYW5lX3N3YXBfZGlzYWJsZWQ7Cj4gKwlib29sIGxh bmVfc3dhcDsKPiArCWJvb2wgcG93ZXJlZDsKPiArCXUzMiBhZmVfc2V0dGluZzsKPiArCWVudW0g aGRjcF9zdGF0ZSBoZGNwX3N0YXR1czsKPiArCXN0cnVjdCBkZWxheWVkX3dvcmsgaGRjcF93b3Jr Owo+ICsJc3RydWN0IHdvcmtfc3RydWN0IGhkY3Bfd2FpdF9rc3ZfbGlzdDsKPiArCXN0cnVjdCBj b21wbGV0aW9uIHdhaXRfZWRpZF9jb21wbGV0ZTsKPiArCXU4IGF1dG9fdHJhaW5fcmV0cnk7Cj4g Kwlib29sIGhkY3BfZGVzaXJlZDsKPiArCWJvb2wgaXNfcmVwZWF0ZXI7Cj4gKwl1OCBoZGNwX2Rv d25fc3RyZWFtX2NvdW50Owo+ICsJdTggYmtzdnNbRFJNX0hEQ1BfS1NWX0xFTl07Cj4gKwl1OCBz aGExX2lucHV0W0hEQ1BfU0hBMV9GSUZPX0xFTl07Cj4gKwlib29sIGVuYWJsZV9lbmhhbmNlZF9m cmFtZTsKPiArCWhkbWlfY29kZWNfcGx1Z2dlZF9jYiBwbHVnZ2VkX2NiOwo+ICsJc3RydWN0IGRl dmljZSAqY29kZWNfZGV2Owo+ICsJc3RydWN0IGRlbGF5ZWRfd29yayBkZWxheWVkX2F1ZGlvOwo+ ICsJc3RydWN0IGl0NjUwNV9hdWRpb19kYXRhIGF1ZGlvOwo+ICsKPiArCS8qIGl0NjUwNSBkcml2 ZXIgaG9sZCBvcHRpb24gKi8KPiArCWJvb2wgZW5hYmxlX2Rydl9ob2xkOwo+ICt9Owo+ICsKPiAr c3RydWN0IGl0NjUwNV9zdGVwX3RyYWluX3BhcmEgewo+ICsJdTggdm9sdGFnZV9zd2luZ1tNQVhf TEFORV9DT1VOVF07Cj4gKwl1OCBwcmVfZW1waGFzaXNbTUFYX0xBTkVfQ09VTlRdOwo+ICt9Owo+ ICsKPiArLyoKPiArICogVmVuZG9yIG9wdGlvbiBhZmUgc2V0dGluZ3MgZm9yIGRpZmZlcmVudCBw bGF0Zm9ybXMKPiArICogMDogd2l0aG91dCBGUEMgY2FibGUKPiArICogMTogd2l0aCBGUEMgY2Fi bGUKPiArICovCj4gKwo+ICtzdGF0aWMgdTggY29uc3QgYWZlX3NldHRpbmdfdGFibGVbXVszXSA9 IHsKPiArCXsweDgyLCAweDAwLCAweDQ1fSwKPiArCXsweDkzLCAweDJBLCAweDg1fQo+ICt9Owo+ ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBpdDY1MDVfYXVkaW9fc2FtcGxlX3JhdGVfbWFwIGF1 ZGlvX3NhbXBsZV9yYXRlX21hcFtdID0gewo+ICsJe1NBTVBMRV9SQVRFXzI0SywgMjQwMDB9LAo+ ICsJe1NBTVBMRV9SQVRFXzMySywgMzIwMDB9LAo+ICsJe1NBTVBMRV9SQVRFXzQ4SywgNDgwMDB9 LAo+ICsJe1NBTVBMRV9SQVRFXzk2SywgOTYwMDB9LAo+ICsJe1NBTVBMRV9SQVRFXzE5MkssIDE5 MjAwMH0sCj4gKwl7U0FNUExFX1JBVEVfNDRfMUssIDQ0MTAwfSwKPiArCXtTQU1QTEVfUkFURV84 OF8ySywgODgyMDB9LAo+ICsJe1NBTVBMRV9SQVRFXzE3Nl80SywgMTc2NDAwfSwKPiArfTsKPiAr Cj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX3JhbmdlIGl0NjUwNV9icmlkZ2Vfdm9sYXRp bGVfcmFuZ2VzW10gPSB7Cj4gKwl7IC5yYW5nZV9taW4gPSAwLCAucmFuZ2VfbWF4ID0gMHhGRiB9 LAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfYWNjZXNzX3RhYmxlIGl0 NjUwNV9icmlkZ2Vfdm9sYXRpbGVfdGFibGUgPSB7Cj4gKwkueWVzX3JhbmdlcyA9IGl0NjUwNV9i cmlkZ2Vfdm9sYXRpbGVfcmFuZ2VzLAo+ICsJLm5feWVzX3JhbmdlcyA9IEFSUkFZX1NJWkUoaXQ2 NTA1X2JyaWRnZV92b2xhdGlsZV9yYW5nZXMpLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0 cnVjdCByZWdtYXBfY29uZmlnIGl0NjUwNV9yZWdtYXBfY29uZmlnID0gewo+ICsJLnJlZ19iaXRz ID0gOCwKPiArCS52YWxfYml0cyA9IDgsCj4gKwkudm9sYXRpbGVfdGFibGUgPSAmaXQ2NTA1X2Jy aWRnZV92b2xhdGlsZV90YWJsZSwKPiArCS5jYWNoZV90eXBlID0gUkVHQ0FDSEVfTk9ORSwKPiAr fTsKPiArCj4gK3N0YXRpYyBpbnQgaXQ2NTA1X3JlYWQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1LCB1 bnNpZ25lZCBpbnQgcmVnX2FkZHIpCj4gK3sKPiArCXVuc2lnbmVkIGludCB2YWx1ZTsKPiArCWlu dCBlcnI7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsKPiAr Cj4gKwllcnIgPSByZWdtYXBfcmVhZChpdDY1MDUtPnJlZ21hcCwgcmVnX2FkZHIsICZ2YWx1ZSk7 Cj4gKwlpZiAoZXJyIDwgMCkgewo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAicmVhZCBmYWlsZWQg cmVnWzB4JXhdIGVycjogJWQiLCByZWdfYWRkciwKPiArCQkJICAgICAgZXJyKTsKPiArCQlyZXR1 cm4gZXJyOwo+ICsJfQo+ICsKPiArCXJldHVybiB2YWx1ZTsKPiArfQo+ICsKPiArc3RhdGljIGlu dCBpdDY1MDVfd3JpdGUoc3RydWN0IGl0NjUwNSAqaXQ2NTA1LCB1bnNpZ25lZCBpbnQgcmVnX2Fk ZHIsCj4gKwkJICAgICAgdW5zaWduZWQgaW50IHJlZ192YWwpCj4gK3sKPiArCWludCBlcnI7Cj4g KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsKPiArCj4gKwllcnIg PSByZWdtYXBfd3JpdGUoaXQ2NTA1LT5yZWdtYXAsIHJlZ19hZGRyLCByZWdfdmFsKTsKPiArCj4g KwlpZiAoZXJyIDwgMCkgewo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAid3JpdGUgZmFpbGVkIHJl Z1sweCV4XSA9IDB4JXggZXJyID0gJWQiLAo+ICsJCQkgICAgICByZWdfYWRkciwgcmVnX3ZhbCwg ZXJyKTsKPiArCQlyZXR1cm4gZXJyOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IGl0NjUwNV9zZXRfYml0cyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUsIHVuc2ln bmVkIGludCByZWcsCj4gKwkJCSB1bnNpZ25lZCBpbnQgbWFzaywgdW5zaWduZWQgaW50IHZhbHVl KQo+ICt7Cj4gKwlpbnQgZXJyOwo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xp ZW50LT5kZXY7Cj4gKwo+ICsJZXJyID0gcmVnbWFwX3VwZGF0ZV9iaXRzKGl0NjUwNS0+cmVnbWFw LCByZWcsIG1hc2ssIHZhbHVlKTsKPiArCWlmIChlcnIgPCAwKSB7Cj4gKwkJRFJNX0RFVl9FUlJP UigKPiArCQkJZGV2LCAid3JpdGUgcmVnWzB4JXhdID0gMHgleCBtYXNrID0gMHgleCBmYWlsZWQg ZXJyICVkIiwKPiArCQkJcmVnLCB2YWx1ZSwgbWFzaywgZXJyKTsKPiArCQlyZXR1cm4gZXJyOwo+ ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfZGVi dWdfcHJpbnQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1LCB1bnNpZ25lZCBpbnQgcmVnLAo+ICsJCQkg ICAgIGNvbnN0IGNoYXIgKnByZWZpeCkKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0 NjUwNS0+Y2xpZW50LT5kZXY7Cj4gKwlpbnQgdmFsOwo+ICsKPiArCWlmIChsaWtlbHkoIShfX2Ry bV9kZWJ1ZyAmIERSTV9VVF9EUklWRVIpKSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJdmFsID0gaXQ2 NTA1X3JlYWQoaXQ2NTA1LCByZWcpOwo+ICsJaWYgKHZhbCA8IDApCj4gKwkJRFJNX0RFVl9ERUJV R19EUklWRVIoZGV2LCAiJXMgcmVnWyUwMnhdIHJlYWQgZXJyb3IgKCVkKSIsCj4gKwkJCQkgICAg IHByZWZpeCwgcmVnLCB2YWwpOwo+ICsJZWxzZQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRl diwgIiVzIHJlZ1slMDJ4XSA9IDB4JTAyeCIsIHByZWZpeCwgcmVnLAo+ICsJCQkJICAgICB2YWwp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGl0NjUwNV9kcGNkX3JlYWQoc3RydWN0IGl0NjUwNSAq aXQ2NTA1LCB1bnNpZ25lZCBsb25nIG9mZnNldCkKPiArewo+ICsJdTggdmFsdWU7Cj4gKwlpbnQg cmV0Owo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7Cj4gKwo+ ICsJcmV0ID0gZHJtX2RwX2RwY2RfcmVhZGIoJml0NjUwNS0+YXV4LCBvZmZzZXQsICZ2YWx1ZSk7 Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiRFBDRCByZWFkIGZh aWxlZCBbMHglbHhdIHJldDogJWQiLCBvZmZzZXQsCj4gKwkJCSAgICAgIHJldCk7Cj4gKwkJcmV0 dXJuIHJldDsKPiArCX0KPiArCXJldHVybiB2YWx1ZTsKPiArfQo+ICsKPiArc3RhdGljIGludCBp dDY1MDVfZHBjZF93cml0ZShzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUsIHVuc2lnbmVkIGxvbmcgb2Zm c2V0LAo+ICsJCQkgICAgIHVuc2lnbmVkIGxvbmcgZGF0YWluKQo+ICt7Cj4gKwlpbnQgcmV0Owo+ ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7Cj4gKwo+ICsJcmV0 ID0gZHJtX2RwX2RwY2Rfd3JpdGViKCZpdDY1MDUtPmF1eCwgb2Zmc2V0LCBkYXRhaW4pOwo+ICsJ aWYgKHJldCA8IDApIHsKPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIkRQQ0Qgd3JpdGUgZmFpbGVk IFsweCVseF0gcmV0OiAlZCIsIG9mZnNldCwKPiArCQkJICAgICAgcmV0KTsKPiArCQlyZXR1cm4g cmV0Owo+ICsJfQo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaXQ2NTA1X2dl dF9kcGNkKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwgaW50IG9mZnNldCwgdTggKmRwY2QsIGludCBu dW0pCj4gK3sKPiArCWludCByZXQ7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5j bGllbnQtPmRldjsKPiArCj4gKwlyZXQgPSBkcm1fZHBfZHBjZF9yZWFkKCZpdDY1MDUtPmF1eCwg b2Zmc2V0LCBkcGNkLCBudW0pOwo+ICsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7 Cj4gKwo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAicmV0ID0gJWQgRFBDRFsweCV4XSA9 IDB4JSpwaCIsIHJldCwgb2Zmc2V0LAo+ICsJCQkgICAgIG51bSwgZHBjZCk7Cj4gKwo+ICsJcmV0 dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9kdW1wKHN0cnVjdCBpdDY1MDUg Kml0NjUwNSkKPiArewo+ICsJdW5zaWduZWQgaW50IGksIGo7Cj4gKwl1OCByZWdzWzE2XTsKPiAr CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Owo+ICsKPiArCWZvciAo aSA9IDA7IGkgPD0gMHhmZjsgaSArPSAxNikgewo+ICsJCWZvciAoaiA9IDA7IGogPCAxNjsgaisr KQo+ICsJCQlyZWdzW2pdID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBpICsgaik7Cj4gKwo+ICsJCURS TV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIlsweCUwMnhdID0gJTE2cGgiLCBpLCByZWdzKTsKPiAr CX0KPiArfQo+ICsKPiArc3RhdGljIGJvb2wgaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMoc3Ry dWN0IGl0NjUwNSAqaXQ2NTA1KQo+ICt7Cj4gKwlpbnQgcmVnXzBkOwo+ICsKPiArCXJlZ18wZCA9 IGl0NjUwNV9yZWFkKGl0NjUwNSwgUkVHX1NZU1RFTV9TVFMpOwo+ICsKPiArCWlmIChyZWdfMGQg PCAwKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwlyZXR1cm4gISEocmVnXzBkICYgSFBEX1NU Uyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaXQ2NTA1X3JlYWRfd29yZChzdHJ1Y3QgaXQ2NTA1 ICppdDY1MDUsIHVuc2lnbmVkIGludCByZWcpCj4gK3sKPiArCWludCB2YWwwLCB2YWwxOwo+ICsK PiArCXZhbDAgPSBpdDY1MDVfcmVhZChpdDY1MDUsIHJlZyk7Cj4gKwlpZiAodmFsMCA8IDApCj4g KwkJcmV0dXJuIHZhbDA7Cj4gKwo+ICsJdmFsMSA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgcmVnICsg MSk7Cj4gKwlpZiAodmFsMSA8IDApCj4gKwkJcmV0dXJuIHZhbDE7Cj4gKwo+ICsJcmV0dXJuICh2 YWwxIDw8IDgpIHwgdmFsMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaXQ2NTA1X2NhbGNfdmlk ZW9faW5mbyhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRl diA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Owo+ICsJaW50IGhzeW5jX3BvbCwgdnN5bmNfcG9sLCBp bnRlcmxhY2VkOwo+ICsJaW50IGh0b3RhbCwgaGRlcywgaGRldywgaGZwaCwgaHN5bmN3Owo+ICsJ aW50IHZ0b3RhbCwgdmRlcywgdmRldywgdmZwaCwgdnN5bmN3Owo+ICsJaW50IHJkZGF0YSwgaSwg cGNsaywgc3VtID0gMDsKPiArCj4gKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDE1MDAwKTsKPiArCWl0 NjUwNV93cml0ZShpdDY1MDUsIFJFR19CQU5LX1NFTCwgMHgwMCk7Cj4gKwlyZGRhdGEgPSBpdDY1 MDVfcmVhZChpdDY1MDUsIFJFR19JTlBVVF9DVFJMKTsKPiArCWhzeW5jX3BvbCA9IHJkZGF0YSAm IElOUFVUX0hTWU5DX1BPTDsKPiArCXZzeW5jX3BvbCA9IChyZGRhdGEgJiBJTlBVVF9WU1lOQ19Q T0wpID4+IDI7Cj4gKwlpbnRlcmxhY2VkID0gKHJkZGF0YSAmIElOUFVUX0lOVEVSTEFDRUQpID4+ IDQ7Cj4gKwo+ICsJaHRvdGFsID0gaXQ2NTA1X3JlYWRfd29yZChpdDY1MDUsIFJFR19JTlBVVF9I VE9UQUwpICYgMHgxRkZGOwo+ICsJaGRlcyA9IGl0NjUwNV9yZWFkX3dvcmQoaXQ2NTA1LCBSRUdf SU5QVVRfSEFDVElWRV9TVEFSVCkgJiAweDFGRkY7Cj4gKwloZGV3ID0gaXQ2NTA1X3JlYWRfd29y ZChpdDY1MDUsIFJFR19JTlBVVF9IQUNUSVZFX1dJRFRIKSAmIDB4MUZGRjsKPiArCWhmcGggPSBp dDY1MDVfcmVhZF93b3JkKGl0NjUwNSwgUkVHX0lOUFVUX0hGUk9OVF9QT1JDSCkgJiAweDFGRkY7 Cj4gKwloc3luY3cgPSBpdDY1MDVfcmVhZF93b3JkKGl0NjUwNSwgUkVHX0lOUFVUX0hTWU5DX1dJ RFRIKSAmIDB4MUZGRjsKPiArCj4gKwl2dG90YWwgPSBpdDY1MDVfcmVhZF93b3JkKGl0NjUwNSwg UkVHX0lOUFVUX1ZUT1RBTCkgJiAweEZGRjsKPiArCXZkZXMgPSBpdDY1MDVfcmVhZF93b3JkKGl0 NjUwNSwgUkVHX0lOUFVUX1ZBQ1RJVkVfU1RBUlQpICYgMHhGRkY7Cj4gKwl2ZGV3ID0gaXQ2NTA1 X3JlYWRfd29yZChpdDY1MDUsIFJFR19JTlBVVF9WQUNUSVZFX1dJRFRIKSAmIDB4RkZGOwo+ICsJ dmZwaCA9IGl0NjUwNV9yZWFkX3dvcmQoaXQ2NTA1LCBSRUdfSU5QVVRfVkZST05UX1BPUkNIKSAm IDB4RkZGOwo+ICsJdnN5bmN3ID0gaXQ2NTA1X3JlYWRfd29yZChpdDY1MDUsIFJFR19JTlBVVF9W U1lOQ19XSURUSCkgJiAweEZGRjsKPiArCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJo c3luY19wb2w6JWQsIHZzeW5jX3BvbDolZCwgaW50ZXJsYWNlZDolZCIsCj4gKwkJCSAgICAgaHN5 bmNfcG9sLCB2c3luY19wb2wsIGludGVybGFjZWQpOwo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIo ZGV2LCAiaGFjdGl2ZV9zdGFydDolZCwgdmFjdGl2ZV9zdGFydDolZCIsCj4gKwkJCSAgICAgaGRl cywgdmRlcyk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKPiArCQlpdDY1MDVf c2V0X2JpdHMoaXQ2NTA1LCBSRUdfREFUQV9DVFJMMCwgRU5BQkxFX1BDTEtfQ09VTlRFUiwKPiAr CQkJCUVOQUJMRV9QQ0xLX0NPVU5URVIpOwo+ICsJCXVzbGVlcF9yYW5nZSgxMDAwMCwgMTUwMDAp Owo+ICsJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EQVRBX0NUUkwwLCBFTkFCTEVfUENM S19DT1VOVEVSLAo+ICsJCQkJMHgwMCk7Cj4gKwkJcmRkYXRhID0gaXQ2NTA1X3JlYWRfd29yZChp dDY1MDUsIFJFR19QQ0xLX0NPVU5URVJfVkFMVUUpICYKPiArCQkJIDB4RkZGOwo+ICsKPiArCQlz dW0gKz0gcmRkYXRhOwo+ICsJfQo+ICsKPiArCWlmIChzdW0gPT0gMCkgewo+ICsJCURSTV9ERVZf REVCVUdfRFJJVkVSKGRldiwgImNhbGMgdmlkZW8gdGltaW5nIGVycm9yIik7Cj4gKwkJcmV0dXJu Owo+ICsJfQo+ICsKPiArCXN1bSAvPSAxMDsKPiArCXBjbGsgPSAxMzUwMCAqIDIwNDggLyBzdW07 Cj4gKwlpdDY1MDUtPnZpZGVvX2luZm8uY2xvY2sgPSBwY2xrOwo+ICsJaXQ2NTA1LT52aWRlb19p bmZvLmhkaXNwbGF5ID0gaGRldzsKPiArCWl0NjUwNS0+dmlkZW9faW5mby5oc3luY19zdGFydCA9 IGhkZXcgKyBoZnBoOwo+ICsJaXQ2NTA1LT52aWRlb19pbmZvLmhzeW5jX2VuZCA9IGhkZXcgKyBo ZnBoICsgaHN5bmN3Owo+ICsJaXQ2NTA1LT52aWRlb19pbmZvLmh0b3RhbCA9IGh0b3RhbDsKPiAr CWl0NjUwNS0+dmlkZW9faW5mby52ZGlzcGxheSA9IHZkZXc7Cj4gKwlpdDY1MDUtPnZpZGVvX2lu Zm8udnN5bmNfc3RhcnQgPSB2ZGV3ICsgdmZwaDsKPiArCWl0NjUwNS0+dmlkZW9faW5mby52c3lu Y19lbmQgPSB2ZGV3ICsgdmZwaCArIHZzeW5jdzsKPiArCWl0NjUwNS0+dmlkZW9faW5mby52dG90 YWwgPSB2dG90YWw7Cj4gKwo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCBEUk1fTU9ERV9G TVQsCj4gKwkJCSAgICAgRFJNX01PREVfQVJHKCZpdDY1MDUtPnZpZGVvX2luZm8pKTsKPiArfQo+ ICsKPiArc3RhdGljIGludCBpdDY1MDVfZHJtX2RwX2xpbmtfcHJvYmUoc3RydWN0IGRybV9kcF9h dXggKmF1eCwKPiArCQkJCSAgICBzdHJ1Y3QgaXQ2NTA1X2RybV9kcF9saW5rICpsaW5rKQo+ICt7 Cj4gKwl1OCB2YWx1ZXNbM107Cj4gKwlpbnQgZXJyOwo+ICsKPiArCW1lbXNldChsaW5rLCAwLCBz aXplb2YoKmxpbmspKTsKPiArCj4gKwllcnIgPSBkcm1fZHBfZHBjZF9yZWFkKGF1eCwgRFBfRFBD RF9SRVYsIHZhbHVlcywgc2l6ZW9mKHZhbHVlcykpOwo+ICsJaWYgKGVyciA8IDApCj4gKwkJcmV0 dXJuIGVycjsKPiArCj4gKwlsaW5rLT5yZXZpc2lvbiA9IHZhbHVlc1swXTsKPiArCWxpbmstPnJh dGUgPSBkcm1fZHBfYndfY29kZV90b19saW5rX3JhdGUodmFsdWVzWzFdKTsKPiArCWxpbmstPm51 bV9sYW5lcyA9IHZhbHVlc1syXSAmIERQX01BWF9MQU5FX0NPVU5UX01BU0s7Cj4gKwo+ICsJaWYg KHZhbHVlc1syXSAmIERQX0VOSEFOQ0VEX0ZSQU1FX0NBUCkKPiArCQlsaW5rLT5jYXBhYmlsaXRp ZXMgPSAxOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGl0NjUwNV9k cm1fZHBfbGlua19wb3dlcl91cChzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LAo+ICsJCQkJICAgICAg IHN0cnVjdCBpdDY1MDVfZHJtX2RwX2xpbmsgKmxpbmspCj4gK3sKPiArCXU4IHZhbHVlOwo+ICsJ aW50IGVycjsKPiArCj4gKwkvKiBEUF9TRVRfUE9XRVIgcmVnaXN0ZXIgaXMgb25seSBhdmFpbGFi bGUgb24gRFBDRCB2MS4xIGFuZCBsYXRlciAqLwo+ICsJaWYgKGxpbmstPnJldmlzaW9uIDwgMHgx MSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwllcnIgPSBkcm1fZHBfZHBjZF9yZWFkYihhdXgsIERQ X1NFVF9QT1dFUiwgJnZhbHVlKTsKPiArCWlmIChlcnIgPCAwKQo+ICsJCXJldHVybiBlcnI7Cj4g Kwo+ICsJdmFsdWUgJj0gfkRQX1NFVF9QT1dFUl9NQVNLOwo+ICsJdmFsdWUgfD0gRFBfU0VUX1BP V0VSX0QwOwo+ICsKPiArCWVyciA9IGRybV9kcF9kcGNkX3dyaXRlYihhdXgsIERQX1NFVF9QT1dF UiwgdmFsdWUpOwo+ICsJaWYgKGVyciA8IDApCj4gKwkJcmV0dXJuIGVycjsKPiArCj4gKwkvKgo+ ICsJICogQWNjb3JkaW5nIHRvIHRoZSBEUCAxLjEgc3BlY2lmaWNhdGlvbiwgYSAiU2luayBEZXZp Y2UgbXVzdCBleGl0IHRoZQo+ICsJICogcG93ZXIgc2F2aW5nIHN0YXRlIHdpdGhpbiAxIG1zIiAo U2VjdGlvbiAyLjUuMy4xLCBUYWJsZSA1LTUyLCAiU2luawo+ICsJICogQ29udHJvbCBGaWVsZCIg KHJlZ2lzdGVyIDB4NjAwKS4KPiArCSAqLwo+ICsJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwo+ ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfY2xlYXJfaW50 KHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKPiArewo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVH X0JBTktfU0VMLCAweDAwKTsKPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIElOVF9TVEFUVVNfMDEs IDB4RkYpOwo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5UX1NUQVRVU18wMiwgMHhGRik7Cj4g KwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBJTlRfU1RBVFVTXzAzLCAweEZGKTsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgaXQ2NTA1X2ludF9tYXNrX2VuYWJsZShzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUp Cj4gK3sKPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19CQU5LX1NFTCwgMHgwMCk7Cj4gKwlp dDY1MDVfd3JpdGUoaXQ2NTA1LCBJTlRfTUFTS18wMSwgMHgxRik7Cj4gKwlpdDY1MDVfd3JpdGUo aXQ2NTA1LCBJTlRfTUFTS18wMiwgMHgwNyk7Cj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBJTlRf TUFTS18wMywgMHhCMCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9pbnRfbWFza19k aXNhYmxlKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKPiArewo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUw NSwgUkVHX0JBTktfU0VMLCAweDAwKTsKPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIElOVF9NQVNL XzAxLCAweDAwKTsKPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIElOVF9NQVNLXzAyLCAweDAwKTsK PiArCWl0NjUwNV93cml0ZShpdDY1MDUsIElOVF9NQVNLXzAzLCAweDAwKTsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgaXQ2NTA1X2xhbmVfdGVybWluYXRpb25fb24oc3RydWN0IGl0NjUwNSAqaXQ2 NTA1KQo+ICt7Cj4gKwlpbnQgcmVnY2Y7Cj4gKwo+ICsJcmVnY2YgPSBpdDY1MDVfcmVhZChpdDY1 MDUsIFJFR19VU0VSX0RSVl9QUkUpOwo+ICsKPiArCWlmIChyZWdjZiA9PSAweEYwKQo+ICsJCWl0 NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EUlZfTE5fREFUQV9TRUwsIDB4ODAsIDB4MDApOwo+ ICsKPiArCWlmIChyZWdjZiA9PSAweDcwKSB7Cj4gKwkJaWYgKGl0NjUwNS0+bGFuZV9zd2FwKSB7 Cj4gKwkJCXN3aXRjaCAoaXQ2NTA1LT5sYW5lX2NvdW50KSB7Cj4gKwkJCWNhc2UgMToKPiArCQkJ Y2FzZSAyOgo+ICsJCQkJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RSVl9MTl9EQVRBX1NF TCwKPiArCQkJCQkJMHgwQywgMHgwOCk7Cj4gKwkJCQlicmVhazsKPiArCQkJZGVmYXVsdDoKPiAr CQkJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EUlZfTE5fREFUQV9TRUwsCj4gKwkJCQkJ CTB4MEMsIDB4MEMpOwo+ICsJCQkJYnJlYWs7Cj4gKwkJCX0KPiArCQl9IGVsc2Ugewo+ICsJCQlz d2l0Y2ggKGl0NjUwNS0+bGFuZV9jb3VudCkgewo+ICsJCQljYXNlIDE6Cj4gKwkJCWNhc2UgMjoK PiArCQkJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EUlZfTE5fREFUQV9TRUwsCj4gKwkJ CQkJCTB4MEMsIDB4MDQpOwo+ICsJCQkJYnJlYWs7Cj4gKwkJCWRlZmF1bHQ6Cj4gKwkJCQlpdDY1 MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfRFJWX0xOX0RBVEFfU0VMLAo+ICsJCQkJCQkweDBDLCAw eDBDKTsKPiArCQkJCWJyZWFrOwo+ICsJCQl9Cj4gKwkJfQo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBpdDY1MDVfbGFuZV90ZXJtaW5hdGlvbl9vZmYoc3RydWN0IGl0NjUwNSAqaXQ2NTA1 KQo+ICt7Cj4gKwlpbnQgcmVnY2Y7Cj4gKwo+ICsJcmVnY2YgPSBpdDY1MDVfcmVhZChpdDY1MDUs IFJFR19VU0VSX0RSVl9QUkUpOwo+ICsKPiArCWlmIChyZWdjZiA9PSAweEYwKQo+ICsJCWl0NjUw NV9zZXRfYml0cyhpdDY1MDUsIFJFR19EUlZfTE5fREFUQV9TRUwsIDB4ODAsIDB4ODApOwo+ICsK PiArCWlmIChyZWdjZiA9PSAweDcwKQo+ICsJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19E UlZfTE5fREFUQV9TRUwsIDB4MEMsIDB4MDApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpdDY1 MDVfbGFuZV9wb3dlcl9vbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpCj4gK3sKPiArCWl0NjUwNV9z ZXRfYml0cyhpdDY1MDUsIFJFR19MSU5LX0RSViwgMHhGMSwKPiArCQkJKGl0NjUwNS0+bGFuZV9z d2FwID8KPiArCQkJCSBHRU5NQVNLKDcsIDggLSBpdDY1MDUtPmxhbmVfY291bnQpIDoKPiArCQkJ CSBHRU5NQVNLKDMgKyBpdDY1MDUtPmxhbmVfY291bnQsIDQpKSB8Cj4gKwkJCQkweDAxKTsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgaXQ2NTA1X2xhbmVfcG93ZXJfb2ZmKHN0cnVjdCBpdDY1MDUg Kml0NjUwNSkKPiArewo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0xJTktfRFJWLCAw eEYwLCAweDAwKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaXQ2NTA1X2xhbmVfb2ZmKHN0cnVj dCBpdDY1MDUgKml0NjUwNSkKPiArewo+ICsJaXQ2NTA1X2xhbmVfcG93ZXJfb2ZmKGl0NjUwNSk7 Cj4gKwlpdDY1MDVfbGFuZV90ZXJtaW5hdGlvbl9vZmYoaXQ2NTA1KTsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgaXQ2NTA1X2F1eF90ZXJtaW5hdGlvbl9vbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUp Cj4gK3sKPiArCWludCByZWdjZjsKPiArCj4gKwlyZWdjZiA9IGl0NjUwNV9yZWFkKGl0NjUwNSwg UkVHX1VTRVJfRFJWX1BSRSk7Cj4gKwo+ICsJaWYgKHJlZ2NmID09IDB4RjApCj4gKwkJaXQ2NTA1 X2xhbmVfdGVybWluYXRpb25fb24oaXQ2NTA1KTsKPiArCj4gKwlpZiAocmVnY2YgPT0gMHg3MCkK PiArCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfRFJWX0xOX0RBVEFfU0VMLCAweDgwLCAw eDgwKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaXQ2NTA1X2F1eF9wb3dlcl9vbihzdHJ1Y3Qg aXQ2NTA1ICppdDY1MDUpCj4gK3sKPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19BVVgs IDB4MDIsIDB4MDIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfYXV4X29uKHN0cnVj dCBpdDY1MDUgKml0NjUwNSkKPiArewo+ICsJaXQ2NTA1X2F1eF9wb3dlcl9vbihpdDY1MDUpOwo+ ICsJaXQ2NTA1X2F1eF90ZXJtaW5hdGlvbl9vbihpdDY1MDUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBpdDY1MDVfYXV4X3Jlc2V0KHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKPiArewo+ICsJaXQ2 NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1JFU0VUX0NUUkwsIEFVWF9SRVNFVCwgQVVYX1JFU0VU KTsKPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19SRVNFVF9DVFJMLCBBVVhfUkVTRVQs IDB4MDApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfcmVzZXRfbG9naWMoc3RydWN0 IGl0NjUwNSAqaXQ2NTA1KQo+ICt7Cj4gKwlyZWdtYXBfd3JpdGUoaXQ2NTA1LT5yZWdtYXAsIFJF R19SRVNFVF9DVFJMLCBBTExfTE9HSUNfUkVTRVQpOwo+ICsJdXNsZWVwX3JhbmdlKDEwMDAsIDE1 MDApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBpdDY1MDVfYXV4X29wX2ZpbmlzaGVkKHN0cnVj dCBpdDY1MDUgKml0NjUwNSkKPiArewo+ICsJaW50IHJlZzJiID0gaXQ2NTA1X3JlYWQoaXQ2NTA1 LCBSRUdfQVVYX0NNRF9SRVEpOwo+ICsKPiArCWlmIChyZWcyYiA8IDApCj4gKwkJcmV0dXJuIGZh bHNlOwo+ICsKPiArCXJldHVybiAocmVnMmIgJiBBVVhfQlVTWSkgPT0gMDsKPiArfQo+ICsKPiAr c3RhdGljIGludCBpdDY1MDVfYXV4X3dhaXQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQo+ICt7Cj4g KwlpbnQgc3RhdHVzOwo+ICsJdW5zaWduZWQgbG9uZyB0aW1lb3V0Owo+ICsJc3RydWN0IGRldmlj ZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7Cj4gKwo+ICsJdGltZW91dCA9IGppZmZpZXMg KyBtc2Vjc190b19qaWZmaWVzKEFVWF9XQUlUX1RJTUVPVVRfTVMpICsgMTsKPiArCj4gKwl3aGls ZSAoIWl0NjUwNV9hdXhfb3BfZmluaXNoZWQoaXQ2NTA1KSkgewo+ICsJCWlmICh0aW1lX2FmdGVy KGppZmZpZXMsIHRpbWVvdXQpKSB7Cj4gKwkJCURSTV9ERVZfRVJST1IoZGV2LCAiVGltZWQgb3V0 IHdhaXRpbmcgQVVYIHRvIGZpbmlzaCIpOwo+ICsJCQlyZXR1cm4gLUVUSU1FRE9VVDsKPiArCQl9 Cj4gKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwo+ICsJfQo+ICsKPiArCXN0YXR1cyA9IGl0 NjUwNV9yZWFkKGl0NjUwNSwgUkVHX0FVWF9FUlJPUl9TVFMpOwo+ICsJaWYgKHN0YXR1cyA8IDAp IHsKPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byByZWFkIEFVWCBjaGFubmVsOiAl ZCIsIHN0YXR1cyk7Cj4gKwkJcmV0dXJuIHN0YXR1czsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsK PiArfQo+ICsKPiArc3RhdGljIHNzaXplX3QgaXQ2NTA1X2F1eF9vcGVyYXRpb24oc3RydWN0IGl0 NjUwNSAqaXQ2NTA1LAo+ICsJCQkJICAgIGVudW0gYXV4X2NtZF90eXBlIGNtZCwKPiArCQkJCSAg ICB1bnNpZ25lZCBpbnQgYWRkcmVzcywgdTggKmJ1ZmZlciwKPiArCQkJCSAgICBzaXplX3Qgc2l6 ZSwgZW51bSBhdXhfY21kX3JlcGx5ICpyZXBseSkKPiArewo+ICsJaW50IGksIHJldDsKPiArCWJv b2wgYXV4X3dyaXRlX2NoZWNrID0gZmFsc2U7Cj4gKwo+ICsJaWYgKCFpdDY1MDVfZ2V0X3Npbmtf aHBkX3N0YXR1cyhpdDY1MDUpKQo+ICsJCXJldHVybiAtRUlPOwo+ICsKPiArCS8qIHNldCBBVVgg dXNlciBtb2RlICovCj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfQVVYX0NUUkwsIEFV WF9VU0VSX01PREUsIEFVWF9VU0VSX01PREUpOwo+ICsKPiArYXV4X29wX3N0YXJ0Ogo+ICsJaWYg KGNtZCA9PSBDTURfQVVYX0kyQ19FRElEX1JFQUQpIHsKPiArCQkvKiBBVVggRURJRCBGSUZPIGhh cyBtYXggbGVuZ3RoIG9mIEFVWF9GSUZPX01BWF9TSVpFIGJ5dGVzLiAqLwo+ICsJCXNpemUgPSBt aW5fdChzaXplX3QsIHNpemUsIEFVWF9GSUZPX01BWF9TSVpFKTsKPiArCQkvKiBFbmFibGUgQVVY IEZJRk8gcmVhZCBiYWNrIGFuZCBjbGVhciBGSUZPICovCj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0 NjUwNSwgUkVHX0FVWF9DVFJMLAo+ICsJCQkJQVVYX0VOX0ZJRk9fUkVBRCB8IENMUl9FRElEX0ZJ Rk8sCj4gKwkJCQlBVVhfRU5fRklGT19SRUFEIHwgQ0xSX0VESURfRklGTyk7Cj4gKwo+ICsJCWl0 NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19BVVhfQ1RSTCwKPiArCQkJCUFVWF9FTl9GSUZPX1JF QUQgfCBDTFJfRURJRF9GSUZPLAo+ICsJCQkJQVVYX0VOX0ZJRk9fUkVBRCk7Cj4gKwl9IGVsc2Ug ewo+ICsJCS8qIFRoZSBEUCBBVVggdHJhbnNtaXQgYnVmZmVyIGhhcyA0IGJ5dGVzLiAqLwo+ICsJ CXNpemUgPSBtaW5fdChzaXplX3QsIHNpemUsIDQpOwo+ICsJCWl0NjUwNV9zZXRfYml0cyhpdDY1 MDUsIFJFR19BVVhfQ1RSTCwgQVVYX05PX1NFR01FTlRfV1IsCj4gKwkJCQlBVVhfTk9fU0VHTUVO VF9XUik7Cj4gKwl9Cj4gKwo+ICsJLyogU3RhcnQgQWRkcmVzc1s3OjBdICovCj4gKwlpdDY1MDVf d3JpdGUoaXQ2NTA1LCBSRUdfQVVYX0FEUl8wXzcsIChhZGRyZXNzID4+IDApICYgMHhGRik7Cj4g KwkvKiBTdGFydCBBZGRyZXNzWzE1OjhdICovCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdf QVVYX0FEUl84XzE1LCAoYWRkcmVzcyA+PiA4KSAmIDB4RkYpOwo+ICsJLyogV3JpdGVOdW1bMzow XStTdGFydEFkclsxOToxNl0gKi8KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVVhfQURS XzE2XzE5LAo+ICsJCSAgICAgKChhZGRyZXNzID4+IDE2KSAmIDB4MEYpIHwgKChzaXplIC0gMSkg PDwgNCkpOwo+ICsKPiArCWlmIChjbWQgPT0gQ01EX0FVWF9OQVRJVkVfV1JJVEUpCj4gKwkJcmVn bWFwX2J1bGtfd3JpdGUoaXQ2NTA1LT5yZWdtYXAsIFJFR19BVVhfT1VUX0RBVEEwLCBidWZmZXIs Cj4gKwkJCQkgIHNpemUpOwo+ICsKPiArCS8qIEF1eCBGaXJlICovCj4gKwlpdDY1MDVfd3JpdGUo aXQ2NTA1LCBSRUdfQVVYX0NNRF9SRVEsIGNtZCk7Cj4gKwo+ICsJcmV0ID0gaXQ2NTA1X2F1eF93 YWl0KGl0NjUwNSk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlnb3RvIGF1eF9vcF9lcnI7Cj4gKwo+ ICsJcmV0ID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBSRUdfQVVYX0VSUk9SX1NUUyk7Cj4gKwlpZiAo cmV0IDwgMCkKPiArCQlnb3RvIGF1eF9vcF9lcnI7Cj4gKwo+ICsJc3dpdGNoICgocmV0ID4+IDYp ICYgMHgzKSB7Cj4gKwljYXNlIDA6Cj4gKwkJKnJlcGx5ID0gUkVQTFlfQUNLOwo+ICsJCWJyZWFr Owo+ICsJY2FzZSAxOgo+ICsJCSpyZXBseSA9IFJFUExZX0RFRkVSOwo+ICsJCXJldCA9IC1FQUdB SU47Cj4gKwkJZ290byBhdXhfb3BfZXJyOwo+ICsJY2FzZSAyOgo+ICsJCSpyZXBseSA9IFJFUExZ X05BQ0s7Cj4gKwkJcmV0ID0gLUVJTzsKPiArCQlnb3RvIGF1eF9vcF9lcnI7Cj4gKwljYXNlIDM6 Cj4gKwkJcmV0ID0gLUVUSU1FRE9VVDsKPiArCQlnb3RvIGF1eF9vcF9lcnI7Cj4gKwl9Cj4gKwo+ ICsJLyogUmVhZCBiYWNrIE5hdGl2ZSBXcml0ZSBkYXRhICovCj4gKwlpZiAoY21kID09IENNRF9B VVhfTkFUSVZFX1dSSVRFKSB7Cj4gKwkJYXV4X3dyaXRlX2NoZWNrID0gdHJ1ZTsKPiArCQljbWQg PSBDTURfQVVYX05BVElWRV9SRUFEOwo+ICsJCWdvdG8gYXV4X29wX3N0YXJ0Owo+ICsJfQo+ICsK PiArCWlmIChjbWQgPT0gQ01EX0FVWF9JMkNfRURJRF9SRUFEKSB7Cj4gKwkJZm9yIChpID0gMDsg aSA8IHNpemU7IGkrKykgewo+ICsJCQlyZXQgPSBpdDY1MDVfcmVhZChpdDY1MDUsIFJFR19BVVhf REFUQV9GSUZPKTsKPiArCQkJaWYgKHJldCA8IDApCj4gKwkJCQlnb3RvIGF1eF9vcF9lcnI7Cj4g KwkJCWJ1ZmZlcltpXSA9IHJldDsKPiArCQl9Cj4gKwl9IGVsc2Ugewo+ICsJCWZvciAoaSA9IDA7 IGkgPCBzaXplOyBpKyspIHsKPiArCQkJcmV0ID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBSRUdfQVVY X0RBVEFfMF83ICsgaSk7Cj4gKwkJCWlmIChyZXQgPCAwKQo+ICsJCQkJZ290byBhdXhfb3BfZXJy Owo+ICsKPiArCQkJaWYgKGF1eF93cml0ZV9jaGVjayAmJiBidWZmZXJbc2l6ZSAtIDEgLSBpXSAh PSByZXQpIHsKPiArCQkJCXJldCA9IC1FSU5WQUw7Cj4gKwkJCQlnb3RvIGF1eF9vcF9lcnI7Cj4g KwkJCX0KPiArCj4gKwkJCWJ1ZmZlcltzaXplIC0gMSAtIGldID0gcmV0Owo+ICsJCX0KPiArCX0K PiArCj4gKwlyZXQgPSBpOwo+ICsKPiArYXV4X29wX2VycjoKPiArCWlmIChjbWQgPT0gQ01EX0FV WF9JMkNfRURJRF9SRUFEKSB7Cj4gKwkJLyogY2xlYXIgQVVYIEZJRk8gKi8KPiArCQlpdDY1MDVf c2V0X2JpdHMoaXQ2NTA1LCBSRUdfQVVYX0NUUkwsCj4gKwkJCQlBVVhfRU5fRklGT19SRUFEIHwg Q0xSX0VESURfRklGTywKPiArCQkJCUFVWF9FTl9GSUZPX1JFQUQgfCBDTFJfRURJRF9GSUZPKTsK PiArCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfQVVYX0NUUkwsCj4gKwkJCQlBVVhfRU5f RklGT19SRUFEIHwgQ0xSX0VESURfRklGTywgMHgwMCk7Cj4gKwl9Cj4gKwo+ICsJLyogTGVhdmUg QVVYIHVzZXIgbW9kZSAqLwo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0FVWF9DVFJM LCBBVVhfVVNFUl9NT0RFLCAwKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0 aWMgc3NpemVfdCBpdDY1MDVfYXV4X2RvX3RyYW5zZmVyKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwK PiArCQkJCSAgICAgIGVudW0gYXV4X2NtZF90eXBlIGNtZCwKPiArCQkJCSAgICAgIHVuc2lnbmVk IGludCBhZGRyZXNzLCB1OCAqYnVmZmVyLAo+ICsJCQkJICAgICAgc2l6ZV90IHNpemUsIGVudW0g YXV4X2NtZF9yZXBseSAqcmVwbHkpCj4gK3sKPiArCWludCBpLCByZXRfc2l6ZSwgcmV0ID0gMCwg cmVxdWVzdF9zaXplOwo+ICsKPiArCW11dGV4X2xvY2soJml0NjUwNS0+YXV4X2xvY2spOwo+ICsJ Zm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gNCkgewo+ICsJCXJlcXVlc3Rfc2l6ZSA9IG1pbigo aW50KXNpemUgLSBpLCA0KTsKPiArCQlyZXRfc2l6ZSA9IGl0NjUwNV9hdXhfb3BlcmF0aW9uKGl0 NjUwNSwgY21kLCBhZGRyZXNzICsgaSwKPiArCQkJCQkJYnVmZmVyICsgaSwgcmVxdWVzdF9zaXpl LAo+ICsJCQkJCQlyZXBseSk7Cj4gKwkJaWYgKHJldF9zaXplIDwgMCkgewo+ICsJCQlyZXQgPSBy ZXRfc2l6ZTsKPiArCQkJZ290byBhdXhfb3BfZXJyOwo+ICsJCX0KPiArCj4gKwkJcmV0ICs9IHJl dF9zaXplOwo+ICsJfQo+ICsKPiArYXV4X29wX2VycjoKPiArCW11dGV4X3VubG9jaygmaXQ2NTA1 LT5hdXhfbG9jayk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgc3NpemVfdCBp dDY1MDVfYXV4X3RyYW5zZmVyKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgsCj4gKwkJCQkgICBzdHJ1 Y3QgZHJtX2RwX2F1eF9tc2cgKm1zZykKPiArewo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0g Y29udGFpbmVyX29mKGF1eCwgc3RydWN0IGl0NjUwNSwgYXV4KTsKPiArCXU4IGNtZDsKPiArCWJv b2wgaXNfaTJjID0gIShtc2ctPnJlcXVlc3QgJiBEUF9BVVhfTkFUSVZFX1dSSVRFKTsKPiArCWlu dCByZXQ7Cj4gKwllbnVtIGF1eF9jbWRfcmVwbHkgcmVwbHk7Cj4gKwo+ICsJLyogSVQ2NTA1IGRv ZXNuJ3Qgc3VwcG9ydCBhcmJpdHJhcnkgSTJDIHJlYWQgLyB3cml0ZS4gKi8KPiArCWlmIChpc19p MmMpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJc3dpdGNoIChtc2ctPnJlcXVlc3QpIHsK PiArCWNhc2UgRFBfQVVYX05BVElWRV9SRUFEOgo+ICsJCWNtZCA9IENNRF9BVVhfTkFUSVZFX1JF QUQ7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIERQX0FVWF9OQVRJVkVfV1JJVEU6Cj4gKwkJY21kID0g Q01EX0FVWF9OQVRJVkVfV1JJVEU7Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCXJldHVy biAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCXJldCA9IGl0NjUwNV9hdXhfZG9fdHJhbnNmZXIoaXQ2 NTA1LCBjbWQsIG1zZy0+YWRkcmVzcywgbXNnLT5idWZmZXIsCj4gKwkJCQkgICAgIG1zZy0+c2l6 ZSwgJnJlcGx5KTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJc3dp dGNoIChyZXBseSkgewo+ICsJY2FzZSBSRVBMWV9BQ0s6Cj4gKwkJbXNnLT5yZXBseSA9IERQX0FV WF9OQVRJVkVfUkVQTFlfQUNLOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBSRVBMWV9OQUNLOgo+ICsJ CW1zZy0+cmVwbHkgPSBEUF9BVVhfTkFUSVZFX1JFUExZX05BQ0s7Cj4gKwkJYnJlYWs7Cj4gKwlj YXNlIFJFUExZX0RFRkVSOgo+ICsJCW1zZy0+cmVwbHkgPSBEUF9BVVhfTkFUSVZFX1JFUExZX0RF RkVSOwo+ICsJCWJyZWFrOwo+ICsJfQo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgaXQ2NTA1X2dldF9lZGlkX2Jsb2NrKHZvaWQgKmRhdGEsIHU4ICpidWYsIHVuc2ln bmVkIGludCBibG9jaywKPiArCQkJCSBzaXplX3QgbGVuKQo+ICt7Cj4gKwlzdHJ1Y3QgaXQ2NTA1 ICppdDY1MDUgPSBkYXRhOwo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50 LT5kZXY7Cj4gKwllbnVtIGF1eF9jbWRfcmVwbHkgcmVwbHk7Cj4gKwlpbnQgb2Zmc2V0LCByZXQs IGF1eF9yZXRyeSA9IDEwMDsKPiArCj4gKwlpdDY1MDVfYXV4X3Jlc2V0KGl0NjUwNSk7Cj4gKwlE Uk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJibG9jayBudW1iZXIgPSAlZCIsIGJsb2NrKTsKPiAr Cj4gKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IEVESURfTEVOR1RIOykgewo+ICsJCXJldCA9 IGl0NjUwNV9hdXhfZG9fdHJhbnNmZXIoaXQ2NTA1LCBDTURfQVVYX0kyQ19FRElEX1JFQUQsCj4g KwkJCQkJICAgICBibG9jayAqIEVESURfTEVOR1RIICsgb2Zmc2V0LAo+ICsJCQkJCSAgICAgYnVm ICsgb2Zmc2V0LCA4LCAmcmVwbHkpOwo+ICsKPiArCQlpZiAocmV0IDwgMCAmJiByZXQgIT0gLUVB R0FJTikKPiArCQkJcmV0dXJuIHJldDsKPiArCj4gKwkJc3dpdGNoIChyZXBseSkgewo+ICsJCWNh c2UgUkVQTFlfQUNLOgo+ICsJCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJbMHglMDJ4XTog JThwaCIsIG9mZnNldCwKPiArCQkJCQkgICAgIGJ1ZiArIG9mZnNldCk7Cj4gKwkJCW9mZnNldCAr PSA4Owo+ICsJCQlhdXhfcmV0cnkgPSAxMDA7Cj4gKwkJCWJyZWFrOwo+ICsJCWNhc2UgUkVQTFlf TkFDSzoKPiArCQkJcmV0dXJuIC1FSU87Cj4gKwkJY2FzZSBSRVBMWV9ERUZFUjoKPiArCQkJbXNs ZWVwKDIwKTsKPiArCQkJaWYgKCEoLS1hdXhfcmV0cnkpKQo+ICsJCQkJcmV0dXJuIC1FSU87Cj4g KwkJfQo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpdDY1 MDVfdmFyaWFibGVfY29uZmlnKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKPiArewo+ICsJaXQ2NTA1 LT5saW5rX3JhdGVfYndfY29kZSA9IEhCUjsKPiArCWl0NjUwNS0+bGFuZV9jb3VudCA9IE1BWF9M QU5FX0NPVU5UOwo+ICsJaXQ2NTA1LT5saW5rX3N0YXRlID0gTElOS19JRExFOwo+ICsJaXQ2NTA1 LT5oZGNwX2Rlc2lyZWQgPSBIRENQX0RFU0lSRUQ7Cj4gKwlpdDY1MDUtPmF1dG9fdHJhaW5fcmV0 cnkgPSBBVVRPX1RSQUlOX1JFVFJZOwo+ICsJaXQ2NTA1LT5hdWRpby5zZWxlY3QgPSBBVURJT19T RUxFQ1Q7Cj4gKwlpdDY1MDUtPmF1ZGlvLnNhbXBsZV9yYXRlID0gQVVESU9fU0FNUExFX1JBVEU7 Cj4gKwlpdDY1MDUtPmF1ZGlvLmNoYW5uZWxfY291bnQgPSBBVURJT19DSEFOTkVMX0NPVU5UOwo+ ICsJaXQ2NTA1LT5hdWRpby50eXBlID0gQVVESU9fVFlQRTsKPiArCWl0NjUwNS0+YXVkaW8uaTJz X2lucHV0X2Zvcm1hdCA9IEkyU19JTlBVVF9GT1JNQVQ7Cj4gKwlpdDY1MDUtPmF1ZGlvLmkyc19q dXN0aWZpZWQgPSBJMlNfSlVTVElGSUVEOwo+ICsJaXQ2NTA1LT5hdWRpby5pMnNfZGF0YV9kZWxh eSA9IEkyU19EQVRBX0RFTEFZOwo+ICsJaXQ2NTA1LT5hdWRpby5pMnNfd3NfY2hhbm5lbCA9IEky U19XU19DSEFOTkVMOwo+ICsJaXQ2NTA1LT5hdWRpby5pMnNfZGF0YV9zZXF1ZW5jZSA9IEkyU19E QVRBX1NFUVVFTkNFOwo+ICsJaXQ2NTA1LT5hdWRpby53b3JkX2xlbmd0aCA9IEFVRElPX1dPUkRf TEVOR1RIOwo+ICsJbWVtc2V0KGl0NjUwNS0+c2hhMV9pbnB1dCwgMCwgc2l6ZW9mKGl0NjUwNS0+ c2hhMV9pbnB1dCkpOwo+ICsJbWVtc2V0KGl0NjUwNS0+YmtzdnMsIDAsIHNpemVvZihpdDY1MDUt PmJrc3ZzKSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaXQ2NTA1X3NlbmRfdmlkZW9faW5mb2Zy YW1lKHN0cnVjdCBpdDY1MDUgKml0NjUwNSwKPiArCQkJCSAgICAgICBzdHJ1Y3QgaGRtaV9hdmlf aW5mb2ZyYW1lICpmcmFtZSkKPiArewo+ICsJdTggYnVmZmVyW0hETUlfSU5GT0ZSQU1FX0hFQURF Ul9TSVpFICsgSERNSV9BVklfSU5GT0ZSQU1FX1NJWkVdOwo+ICsJaW50IGVycjsKPiArCXN0cnVj dCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Owo+ICsKPiArCWVyciA9IGhkbWlf YXZpX2luZm9mcmFtZV9wYWNrKGZyYW1lLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKPiArCWlm IChlcnIgPCAwKSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gcGFjayBBVkkg aW5mb2ZyYW1lOiAlZCIsIGVycik7Cj4gKwkJcmV0dXJuIGVycjsKPiArCX0KPiArCj4gKwllcnIg PSBpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfSU5GT0ZSQU1FX0NUUkwsIEVOX0FWSV9QS1Qs IDB4MDApOwo+ICsJaWYgKGVycikKPiArCQlyZXR1cm4gZXJyOwo+ICsKPiArCWVyciA9IHJlZ21h cF9idWxrX3dyaXRlKGl0NjUwNS0+cmVnbWFwLCBSRUdfQVZJX0lORk9fREIxLAo+ICsJCQkJYnVm ZmVyICsgSERNSV9JTkZPRlJBTUVfSEVBREVSX1NJWkUsCj4gKwkJCQlmcmFtZS0+bGVuZ3RoKTsK PiArCWlmIChlcnIpCj4gKwkJcmV0dXJuIGVycjsKPiArCj4gKwllcnIgPSBpdDY1MDVfc2V0X2Jp dHMoaXQ2NTA1LCBSRUdfSU5GT0ZSQU1FX0NUUkwsIEVOX0FWSV9QS1QsCj4gKwkJCSAgICAgIEVO X0FWSV9QS1QpOwo+ICsJaWYgKGVycikKPiArCQlyZXR1cm4gZXJyOwo+ICsKPiArCXJldHVybiAw Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfZ2V0X2V4dGNvbl9wcm9wZXJ0eShzdHJ1 Y3QgaXQ2NTA1ICppdDY1MDUpCj4gK3sKPiArCWludCBlcnI7Cj4gKwl1bmlvbiBleHRjb25fcHJv cGVydHlfdmFsdWUgcHJvcGVydHk7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5j bGllbnQtPmRldjsKPiArCj4gKwlpZiAoaXQ2NTA1LT5leHRjb24gJiYgIWl0NjUwNS0+bGFuZV9z d2FwX2Rpc2FibGVkKSB7Cj4gKwkJZXJyID0gZXh0Y29uX2dldF9wcm9wZXJ0eShpdDY1MDUtPmV4 dGNvbiwgRVhUQ09OX0RJU1BfRFAsCj4gKwkJCQkJICBFWFRDT05fUFJPUF9VU0JfVFlQRUNfUE9M QVJJVFksCj4gKwkJCQkJICAmcHJvcGVydHkpOwo+ICsJCWlmIChlcnIpIHsKPiArCQkJRFJNX0RF Vl9FUlJPUihkZXYsICJnZXQgcHJvcGVydHkgZmFpbCEiKTsKPiArCQkJcmV0dXJuOwo+ICsJCX0K PiArCQlpdDY1MDUtPmxhbmVfc3dhcCA9IHByb3BlcnR5LmludHZhbDsKPiArCX0KPiArfQo+ICsK PiArc3RhdGljIHZvaWQgaXQ2NTA1X2Nsa19waGFzZV9hZGp1c3RtZW50KHN0cnVjdCBpdDY1MDUg Kml0NjUwNSwKPiArCQkJCQljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKPiAr ewo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0NMS19DVFJMMCwgTV9QQ0xLX0RFTEFZ LAo+ICsJCW1vZGUtPmNsb2NrIDwgQURKVVNUX1BIQVNFX1RIUkVTSE9MRCA/IFBJWEVMX0NMS19E RUxBWSA6IDApOwo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RBVEFfQ1RSTDAsIFZJ REVPX0xBVENIX0VER0UsCj4gKwkJCVBJWEVMX0NMS19JTlZFUlNFIDw8IDQpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBpdDY1MDVfaW5pdChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpCj4gK3sKPiAr CWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19CQU5LX1NFTCwgMHgwMCk7Cj4gKwlpdDY1MDVfd3Jp dGUoaXQ2NTA1LCBSRUdfQVVYX09QVCwgQVVYX0FVVE9fUlNUIHwgQVVYX0ZJWF9GUkVRKTsKPiAr CWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVVhfQ1RSTCwgQVVYX05PX1NFR01FTlRfV1IpOwo+ ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0hEQ1BfQ1RSTDIsIEhEQ1BfQU5fU0VMIHwgSERD UF9IV19IUERJUlFfQUNUKTsKPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19WSURfQlVTX0NU UkwwLCBJTl9ERFIgfCBERFJfQ0QpOwo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX1ZJRF9C VVNfQ1RSTDEsIDB4MDEpOwo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRElPX0NUUkww LCBBVURJT18xNkJfQk9VTkQpOwo+ICsKPiArCS8qIGNoaXAgaW50ZXJuYWwgc2V0dGluZywgZG9u J3QgbW9kaWZ5ICovCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfSFBEX0lSUV9USU1FLCAw eEY1KTsKPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVVhfREVCVUdfTU9ERSwgMHg0RCk7 Cj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVYX09QVDIsIDB4MTcpOwo+ICsJaXQ2NTA1 X3dyaXRlKGl0NjUwNSwgUkVHX0hEQ1BfT1BULCAweDYwKTsKPiArCWl0NjUwNV93cml0ZShpdDY1 MDUsIFJFR19EQVRBX01VVEVfQ1RSTCwKPiArCQkgICAgIEVOX1ZJRF9NVVRFIHwgRU5fQVVEX01V VEUgfCBFTkFCTEVfQVVUT19WSURFT19GSUZPX1JFU0VUKTsKPiArCWl0NjUwNV93cml0ZShpdDY1 MDUsIFJFR19USU1FX1NUTVBfQ1RSTCwKPiArCQkgICAgIEVOX1NTQ19HQVQgfCBFTl9FTkhBTkNF X1ZJRF9TVE1QIHwgRU5fRU5IQU5DRV9BVURfU1RNUCk7Cj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1 LCBSRUdfSU5GT0ZSQU1FX0NUUkwsIDB4MDApOwo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVH X0JBTktfU0VMLCAweDAxKTsKPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19EUlZfMF9EQl84 MDBfTVYsCj4gKwkJICAgICBhZmVfc2V0dGluZ190YWJsZVtpdDY1MDUtPmFmZV9zZXR0aW5nXVsw XSk7Cj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfUFJFXzBfREJfODAwX01WLAo+ICsJCSAg ICAgYWZlX3NldHRpbmdfdGFibGVbaXQ2NTA1LT5hZmVfc2V0dGluZ11bMV0pOwo+ICsJaXQ2NTA1 X3dyaXRlKGl0NjUwNSwgUkVHX1BSRV8zUDVfREJfODAwX01WLAo+ICsJCSAgICAgYWZlX3NldHRp bmdfdGFibGVbaXQ2NTA1LT5hZmVfc2V0dGluZ11bMl0pOwo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUw NSwgUkVHX1NTQ19DVFJMMCwgMHg5RSk7Cj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfU1ND X0NUUkwxLCAweDFDKTsKPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19TU0NfQ1RSTDIsIDB4 NDIpOwo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0JBTktfU0VMLCAweDAwKTsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgaXQ2NTA1X3ZpZGVvX2Rpc2FibGUoc3RydWN0IGl0NjUwNSAqaXQ2 NTA1KQo+ICt7Cj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfREFUQV9NVVRFX0NUUkws IEVOX1ZJRF9NVVRFLCBFTl9WSURfTVVURSk7Cj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBS RUdfSU5GT0ZSQU1FX0NUUkwsIEVOX1ZJRF9DVFJMX1BLVCwgMHgwMCk7Cj4gKwlpdDY1MDVfc2V0 X2JpdHMoaXQ2NTA1LCBSRUdfUkVTRVRfQ1RSTCwgVklERU9fUkVTRVQsIFZJREVPX1JFU0VUKTsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgaXQ2NTA1X3ZpZGVvX3Jlc2V0KHN0cnVjdCBpdDY1MDUg Kml0NjUwNSkKPiArewo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0RBVEFfTVVURV9D VFJMLCBFTl9WSURfTVVURSwgRU5fVklEX01VVEUpOwo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUw NSwgUkVHX0lORk9GUkFNRV9DVFJMLCBFTl9WSURfQ1RSTF9QS1QsIDB4MDApOwo+ICsJaXQ2NTA1 X3NldF9iaXRzKGl0NjUwNSwgUkVHX1JFU0VUX0NUUkwsIFZJREVPX1JFU0VULCBWSURFT19SRVNF VCk7Cj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfNTAxX0ZJRk9fQ1RSTCwgUlNUXzUw MV9GSUZPLCBSU1RfNTAxX0ZJRk8pOwo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHXzUw MV9GSUZPX0NUUkwsIFJTVF81MDFfRklGTywgMHgwMCk7Cj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2 NTA1LCBSRUdfUkVTRVRfQ1RSTCwgVklERU9fUkVTRVQsIDB4MDApOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBpdDY1MDVfdXBkYXRlX3ZpZGVvX3BhcmFtZXRlcihzdHJ1Y3QgaXQ2NTA1ICppdDY1 MDUsCj4gKwkJCQkJICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKPiArewo+ ICsJaXQ2NTA1X2Nsa19waGFzZV9hZGp1c3RtZW50KGl0NjUwNSwgbW9kZSk7Cj4gKwlpdDY1MDVf dmlkZW9fZGlzYWJsZShpdDY1MDUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBpdDY1MDVfYXVk aW9faW5wdXQoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQo+ICt7Cj4gKwlpbnQgcmVnMDUsIHJlZ2Jl Owo+ICsKPiArCXJlZzA1ID0gaXQ2NTA1X3JlYWQoaXQ2NTA1LCBSRUdfUkVTRVRfQ1RSTCk7Cj4g KwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfUkVTRVRfQ1RSTCwgQVVESU9fUkVTRVQsIDB4 MDApOwo+ICsJdXNsZWVwX3JhbmdlKDMwMDAsIDQwMDApOwo+ICsJcmVnYmUgPSBpdDY1MDVfcmVh ZChpdDY1MDUsIFJFR19BVURJT19JTlBVVF9GUkVRKTsKPiArCWl0NjUwNV93cml0ZShpdDY1MDUs IFJFR19SRVNFVF9DVFJMLCByZWcwNSk7Cj4gKwo+ICsJcmV0dXJuIHJlZ2JlICE9IDB4RkY7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9zZXR1cF9hdWRpb19jaGFubmVsX3N0YXR1cyhz dHJ1Y3QgaXQ2NTA1ICppdDY1MDUpCj4gK3sKPiArCWVudW0gaXQ2NTA1X2F1ZGlvX3NhbXBsZV9y YXRlIHNhbXBsZV9yYXRlID0gaXQ2NTA1LT5hdWRpby5zYW1wbGVfcmF0ZTsKPiArCXU4IGF1ZGlv X3dvcmRfbGVuZ3RoX21hcFtdID0geyAweDAyLCAweDA0LCAweDAzLCAweDBCIH07Cj4gKwo+ICsJ LyogQ2hhbm5lbCBTdGF0dXMgKi8KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19JRUM5NThf U1RTMCwgaXQ2NTA1LT5hdWRpby50eXBlIDw8IDEpOwo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwg UkVHX0lFQzk1OF9TVFMxLCAweDAwKTsKPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19JRUM5 NThfU1RTMiwgMHgwMCk7Cj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfSUVDOTU4X1NUUzMs IHNhbXBsZV9yYXRlKTsKPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19JRUM5NThfU1RTNCwg KH5zYW1wbGVfcmF0ZSA8PCA0KSB8Cj4gKwkJICAgICBhdWRpb193b3JkX2xlbmd0aF9tYXBbaXQ2 NTA1LT5hdWRpby53b3JkX2xlbmd0aF0pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpdDY1MDVf c2V0dXBfYXVkaW9fZm9ybWF0KHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKPiArewo+ICsJLyogSTJT IE1PREUgKi8KPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURJT19GTVQsCj4gKwkJICAg ICAoaXQ2NTA1LT5hdWRpby53b3JkX2xlbmd0aCA8PCA1KSB8Cj4gKwkJICAgICAoaXQ2NTA1LT5h dWRpby5pMnNfZGF0YV9zZXF1ZW5jZSA8PCA0KSB8Cj4gKwkJICAgICAoaXQ2NTA1LT5hdWRpby5p MnNfd3NfY2hhbm5lbCA8PCAzKSB8Cj4gKwkJICAgICAoaXQ2NTA1LT5hdWRpby5pMnNfZGF0YV9k ZWxheSA8PCAyKSB8Cj4gKwkJICAgICAoaXQ2NTA1LT5hdWRpby5pMnNfanVzdGlmaWVkIDw8IDEp IHwKPiArCQkgICAgIGl0NjUwNS0+YXVkaW8uaTJzX2lucHV0X2Zvcm1hdCk7Cj4gKwlpZiAoaXQ2 NTA1LT5hdWRpby5zZWxlY3QgPT0gU1BESUYpIHsKPiArCQlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBS RUdfQVVESU9fRklGT19TRUwsIDB4MDApOwo+ICsJCS8qIDB4MzAgPSAxMjgqRlMgKi8KPiArCQlp dDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfQVVYX09QVCwgMHhGMCwgMHgzMCk7Cj4gKwl9IGVs c2Ugewo+ICsJCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURJT19GSUZPX1NFTCwgMHhFNCk7 Cj4gKwl9Cj4gKwo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRElPX0NUUkwwLCAweDIw KTsKPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURJT19DVFJMMSwgMHgwMCk7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9lbmFibGVfYXVkaW9fc291cmNlKHN0cnVjdCBpdDY1 MDUgKml0NjUwNSkKPiArewo+ICsJdW5zaWduZWQgaW50IGF1ZGlvX3NvdXJjZV9jb3VudDsKPiAr Cj4gKwlhdWRpb19zb3VyY2VfY291bnQgPSBCSVQoRElWX1JPVU5EX1VQKGl0NjUwNS0+YXVkaW8u Y2hhbm5lbF9jb3VudCwgMikpCj4gKwkJCQkgLSAxOwo+ICsKPiArCWF1ZGlvX3NvdXJjZV9jb3Vu dCB8PSBpdDY1MDUtPmF1ZGlvLnNlbGVjdCA8PCA0Owo+ICsKPiArCWl0NjUwNV93cml0ZShpdDY1 MDUsIFJFR19BVURJT19TUkNfQ1RSTCwgYXVkaW9fc291cmNlX2NvdW50KTsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgaXQ2NTA1X2VuYWJsZV9hdWRpb19pbmZvZnJhbWUoc3RydWN0IGl0NjUwNSAq aXQ2NTA1KQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRl djsKPiArCXU4IGF1ZGlvX2luZm9fY2FbXSA9IHsgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMywgMHgw NywgMHgwQiwgMHgwRiwgMHgxRiB9Owo+ICsKPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwg ImluZm9mcmFtZSBjaGFubmVsX2FsbG9jYXRpb246MHglMDJ4IiwKPiArCQkJICAgICBhdWRpb19p bmZvX2NhW2l0NjUwNS0+YXVkaW8uY2hhbm5lbF9jb3VudCAtIDFdKTsKPiArCj4gKwlpdDY1MDVf d3JpdGUoaXQ2NTA1LCBSRUdfQVVEX0lORk9GUkFNX0RCMSwgaXQ2NTA1LT5hdWRpby5jaGFubmVs X2NvdW50Cj4gKwkJICAgICAtIDEpOwo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRF9J TkZPRlJBTV9EQjIsIDB4MDApOwo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRF9JTkZP RlJBTV9EQjMsCj4gKwkJICAgICBhdWRpb19pbmZvX2NhW2l0NjUwNS0+YXVkaW8uY2hhbm5lbF9j b3VudCAtIDFdKTsKPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURfSU5GT0ZSQU1fREI0 LCAweDAwKTsKPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJFR19BVURfSU5GT0ZSQU1fU1VNLCAw eDAwKTsKPiArCj4gKwkvKiBFbmFibGUgQXVkaW8gSW5mb0ZyYW1lICovCj4gKwlpdDY1MDVfc2V0 X2JpdHMoaXQ2NTA1LCBSRUdfSU5GT0ZSQU1FX0NUUkwsIEVOX0FVRF9DVFJMX1BLVCwKPiArCQkJ RU5fQVVEX0NUUkxfUEtUKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaXQ2NTA1X2Rpc2FibGVf YXVkaW8oc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQo+ICt7Cj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2 NTA1LCBSRUdfREFUQV9NVVRFX0NUUkwsIEVOX0FVRF9NVVRFLCBFTl9BVURfTVVURSk7Cj4gKwlp dDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfQVVESU9fU1JDX0NUUkwsIE1fQVVESU9fSTJTX0VO LCAweDAwKTsKPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19JTkZPRlJBTUVfQ1RSTCwg RU5fQVVEX0NUUkxfUEtULCAweDAwKTsKPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19S RVNFVF9DVFJMLCBBVURJT19SRVNFVCwgQVVESU9fUkVTRVQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBpdDY1MDVfZW5hYmxlX2F1ZGlvKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKPiArewo+ICsJ c3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7Cj4gKwlpbnQgcmVnYmU7 Cj4gKwo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAic3RhcnQiKTsKPiArCWl0NjUwNV9k aXNhYmxlX2F1ZGlvKGl0NjUwNSk7Cj4gKwo+ICsJaXQ2NTA1X3NldHVwX2F1ZGlvX2NoYW5uZWxf c3RhdHVzKGl0NjUwNSk7Cj4gKwlpdDY1MDVfc2V0dXBfYXVkaW9fZm9ybWF0KGl0NjUwNSk7Cj4g KwlpdDY1MDVfZW5hYmxlX2F1ZGlvX3NvdXJjZShpdDY1MDUpOwo+ICsJaXQ2NTA1X2VuYWJsZV9h dWRpb19pbmZvZnJhbWUoaXQ2NTA1KTsKPiArCj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdf QVVESU9fTl8wXzcsIDB4MDApOwo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgUkVHX0FVRElPX05f OF8xNSwgMHg4MCk7Cj4gKwlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQVVESU9fTl8xNl8yMywg MHgwMCk7Cj4gKwo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0FVRElPX1NSQ19DVFJM LCBBVURJT19GSUZPX1JFU0VULAo+ICsJCQlBVURJT19GSUZPX1JFU0VUKTsKPiArCWl0NjUwNV9z ZXRfYml0cyhpdDY1MDUsIFJFR19BVURJT19TUkNfQ1RSTCwgQVVESU9fRklGT19SRVNFVCwgMHgw MCk7Cj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfUkVTRVRfQ1RSTCwgQVVESU9fUkVT RVQsIDB4MDApOwo+ICsJcmVnYmUgPSBpdDY1MDVfcmVhZChpdDY1MDUsIFJFR19BVURJT19JTlBV VF9GUkVRKTsKPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInJlZ2JlOjB4JTAyeCBhdWRp byBpbnB1dCBmczogJWQuJWQga0h6IiwKPiArCQkJICAgICByZWdiZSwgNjc1MCAvIHJlZ2JlLCAo Njc1MCAlIHJlZ2JlKSAqIDEwIC8gcmVnYmUpOwo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwg UkVHX0RBVEFfTVVURV9DVFJMLCBFTl9BVURfTVVURSwgMHgwMCk7Cj4gK30KPiArCj4gK3N0YXRp YyBib29sIGl0NjUwNV91c2Vfc3RlcF90cmFpbl9jaGVjayhzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUp Cj4gK3sKPiArCWlmIChpdDY1MDUtPmxpbmsucmV2aXNpb24gPj0gMHgxMikKPiArCQlyZXR1cm4g aXQ2NTA1LT5kcGNkW0RQX1RSQUlOSU5HX0FVWF9SRF9JTlRFUlZBTF0gPj0gMHgwMTsKPiArCj4g KwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaXQ2NTA1X3BhcnNlX2xpbmtf Y2FwYWJpbGl0aWVzKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKPiArewo+ICsJc3RydWN0IGRldmlj ZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7Cj4gKwlzdHJ1Y3QgaXQ2NTA1X2RybV9kcF9s aW5rICpsaW5rID0gJml0NjUwNS0+bGluazsKPiArCWludCBiY2FwczsKPiArCj4gKwlpZiAoaXQ2 NTA1LT5kcGNkWzBdID09IDApIHsKPiArCQlpdDY1MDVfYXV4X29uKGl0NjUwNSk7Cj4gKwkJaXQ2 NTA1X2dldF9kcGNkKGl0NjUwNSwgRFBfRFBDRF9SRVYsIGl0NjUwNS0+ZHBjZCwKPiArCQkJCUFS UkFZX1NJWkUoaXQ2NTA1LT5kcGNkKSk7Cj4gKwl9Cj4gKwo+ICsJRFJNX0RFVl9ERUJVR19EUklW RVIoZGV2LCAiRFBDRCBSZXYuOiAlZC4lZCIsCj4gKwkJCSAgICAgbGluay0+cmV2aXNpb24gPj4g NCwgbGluay0+cmV2aXNpb24gJiAweDBGKTsKPiArCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihk ZXYsICJTaW5rIG1heCBsaW5rIHJhdGU6ICVkLiUwMmQgR2JwcyBwZXIgbGFuZSIsCj4gKwkJCSAg ICAgbGluay0+cmF0ZSAvIDEwMDAwMCwgbGluay0+cmF0ZSAvIDEwMDAgJSAxMDApOwo+ICsKPiAr CWl0NjUwNS0+bGlua19yYXRlX2J3X2NvZGUgPSBkcm1fZHBfbGlua19yYXRlX3RvX2J3X2NvZGUo bGluay0+cmF0ZSk7Cj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJsaW5rIHJhdGUgYncg Y29kZToweCUwMngiLAo+ICsJCQkgICAgIGl0NjUwNS0+bGlua19yYXRlX2J3X2NvZGUpOwo+ICsJ aXQ2NTA1LT5saW5rX3JhdGVfYndfY29kZSA9IG1pbigoaW50KWl0NjUwNS0+bGlua19yYXRlX2J3 X2NvZGUsCj4gKwkJCQkJTUFYX0xJTktfUkFURSk7Cj4gKwo+ICsJaXQ2NTA1LT5sYW5lX2NvdW50 ID0gbGluay0+bnVtX2xhbmVzOwo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiU2luayBz dXBwb3J0ICVkIGxhbmVzIHRyYWluaW5nIiwKPiArCQkJICAgICBpdDY1MDUtPmxhbmVfY291bnQp Owo+ICsJaXQ2NTA1LT5sYW5lX2NvdW50ID0gbWluKChpbnQpaXQ2NTA1LT5sYW5lX2NvdW50LCBN QVhfTEFORV9DT1VOVCk7Cj4gKwo+ICsJaXQ2NTA1LT5icmFuY2hfZGV2aWNlID0gZHJtX2RwX2lz X2JyYW5jaChpdDY1MDUtPmRwY2QpOwo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiU2lu ayAlc2JyYW5jaCBkZXZpY2UiLAo+ICsJCQkgICAgIGl0NjUwNS0+YnJhbmNoX2RldmljZSA/ICIi IDogIk5vdCAiKTsKPiArCj4gKwlpdDY1MDUtPmVuYWJsZV9lbmhhbmNlZF9mcmFtZSA9ICEhbGlu ay0+Y2FwYWJpbGl0aWVzOwo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiU2luayAlc1N1 cHBvcnQgRW5oYW5jZWQgRnJhbWluZyIsCj4gKwkJCSAgICAgaXQ2NTA1LT5lbmFibGVfZW5oYW5j ZWRfZnJhbWUgPyAiIiA6ICJOb3QgIik7Cj4gKwo+ICsJaXQ2NTA1LT5lbmFibGVfc3NjID0gISEo aXQ2NTA1LT5kcGNkW0RQX01BWF9ET1dOU1BSRUFEXSAmCj4gKwkJCQlEUF9NQVhfRE9XTlNQUkVB RF8wXzUpOwo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiTWF4aW11bSBEb3duLVNwcmVh ZDogJXMsICVzc3VwcG9ydCBTU0MhIiwKPiArCQkJICAgICBpdDY1MDUtPmVuYWJsZV9zc2MgPyAi MC41IiA6ICIwIiwKPiArCQkJICAgICBpdDY1MDUtPmVuYWJsZV9zc2MgPyAiIiA6ICJOb3QgIik7 Cj4gKwo+ICsJaXQ2NTA1LT5zdGVwX3RyYWluID0gaXQ2NTA1X3VzZV9zdGVwX3RyYWluX2NoZWNr KGl0NjUwNSk7Cj4gKwlpZiAoaXQ2NTA1LT5zdGVwX3RyYWluKQo+ICsJCURSTV9ERVZfREVCVUdf RFJJVkVSKGRldiwgImF1dG8gdHJhaW4gZmFpbCwgd2lsbCBzdGVwIHRyYWluIik7Cj4gKwo+ICsJ YmNhcHMgPSBpdDY1MDVfZHBjZF9yZWFkKGl0NjUwNSwgRFBfQVVYX0hEQ1BfQkNBUFMpOwo+ICsJ RFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiYmNhcHM6MHglMDJ4IiwgYmNhcHMpOwo+ICsJaWYg KGJjYXBzICYgRFBfQkNBUFNfSERDUF9DQVBBQkxFKSB7Cj4gKwkJaXQ2NTA1LT5pc19yZXBlYXRl ciA9ICEhKGJjYXBzICYgRFBfQkNBUFNfUkVQRUFURVJfUFJFU0VOVCk7Cj4gKwkJRFJNX0RFVl9E RUJVR19EUklWRVIoZGV2LCAiU3VwcG9ydCBIRENQISBEb3duc3RyZWFtIGlzICVzISIsCj4gKwkJ CQkgICAgIGl0NjUwNS0+aXNfcmVwZWF0ZXIgPyAicmVwZWF0ZXIiIDoKPiArCQkJCSAgICAgInJl Y2VpdmVyIik7Cj4gKwl9IGVsc2Ugewo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIlNp bmsgbm90IHN1cHBvcnQgSERDUCEiKTsKPiArCQlpdDY1MDUtPmhkY3BfZGVzaXJlZCA9IGZhbHNl Owo+ICsJfQo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiSERDUCAlcyIsCj4gKwkJCSAg ICAgaXQ2NTA1LT5oZGNwX2Rlc2lyZWQgPyAiZGVzaXJlZCIgOiAidW5kZXNpcmVkIik7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9zZXR1cF9zc2Moc3RydWN0IGl0NjUwNSAqaXQ2NTA1 KQo+ICt7Cj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfVFJBSU5fQ1RSTDAsIFNQUkVB RF9BTVBfNSwKPiArCQkJaXQ2NTA1LT5lbmFibGVfc3NjID8gU1BSRUFEX0FNUF81IDogMHgwMCk7 Cj4gKwlpZiAoaXQ2NTA1LT5lbmFibGVfc3NjKSB7Cj4gKwkJaXQ2NTA1X3dyaXRlKGl0NjUwNSwg UkVHX0JBTktfU0VMLCAweDAxKTsKPiArCQlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfU1NDX0NU UkwwLCAweDlFKTsKPiArCQlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfU1NDX0NUUkwxLCAweDFD KTsKPiArCQlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfU1NDX0NUUkwyLCAweDQyKTsKPiArCQlp dDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfQkFOS19TRUwsIDB4MDApOwo+ICsJCWl0NjUwNV93cml0 ZShpdDY1MDUsIFJFR19TUF9DVFJMMCwgMHgwNyk7Cj4gKwkJaXQ2NTA1X3dyaXRlKGl0NjUwNSwg UkVHX0lQX0NUUkwxLCAweDI5KTsKPiArCQlpdDY1MDVfd3JpdGUoaXQ2NTA1LCBSRUdfSVBfQ1RS TDIsIDB4MDMpOwo+ICsJCS8qIFN0YW1wIEludGVycnVwdCBTdGVwICovCj4gKwkJaXQ2NTA1X3Nl dF9iaXRzKGl0NjUwNSwgUkVHX1RJTUVfU1RNUF9DVFJMLCBNX1NUQU1QX1NURVAsCj4gKwkJCQkw eDEwKTsKPiArCQlpdDY1MDVfZHBjZF93cml0ZShpdDY1MDUsIERQX0RPV05TUFJFQURfQ1RSTCwK PiArCQkJCSAgRFBfU1BSRUFEX0FNUF8wXzUpOwo+ICsJfSBlbHNlIHsKPiArCQlpdDY1MDVfZHBj ZF93cml0ZShpdDY1MDUsIERQX0RPV05TUFJFQURfQ1RSTCwgMHgwMCk7Cj4gKwkJaXQ2NTA1X3Nl dF9iaXRzKGl0NjUwNSwgUkVHX1RJTUVfU1RNUF9DVFJMLCBNX1NUQU1QX1NURVAsCj4gKwkJCQkw eDAwKTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkIGl0NjUwNV9saW5rX3Jh dGVfc2V0dXAoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQo+ICt7Cj4gKwlpdDY1MDVfc2V0X2JpdHMo aXQ2NTA1LCBSRUdfVFJBSU5fQ1RSTDAsIEZPUkNFX0xCUiwKPiArCQkJKGl0NjUwNS0+bGlua19y YXRlX2J3X2NvZGUgPT0gUkJSKSA/IEZPUkNFX0xCUiA6IDB4MDApOwo+ICsJaXQ2NTA1X3NldF9i aXRzKGl0NjUwNSwgUkVHX0xJTktfRFJWLCBEUlZfSFMsCj4gKwkJCShpdDY1MDUtPmxpbmtfcmF0 ZV9id19jb2RlID09IFJCUikgPyAweDAwIDogRFJWX0hTKTsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgaXQ2NTA1X2xhbmVfY291bnRfc2V0dXAoc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQo+ICt7Cj4g KwlpdDY1MDVfZ2V0X2V4dGNvbl9wcm9wZXJ0eShpdDY1MDUpOwo+ICsJaXQ2NTA1X3NldF9iaXRz KGl0NjUwNSwgUkVHX1RSQUlOX0NUUkwwLCBMQU5FX1NXQVAsCj4gKwkJCWl0NjUwNS0+bGFuZV9z d2FwID8gTEFORV9TV0FQIDogMHgwMCk7Cj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdf VFJBSU5fQ1RSTDAsIExBTkVfQ09VTlRfTUFTSywKPiArCQkJKGl0NjUwNS0+bGFuZV9jb3VudCAt IDEpIDw8IDEpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfbGlua190cmFpbmluZ19z ZXR1cChzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9 ICZpdDY1MDUtPmNsaWVudC0+ZGV2Owo+ICsKPiArCWlmIChpdDY1MDUtPmVuYWJsZV9lbmhhbmNl ZF9mcmFtZSkKPiArCQlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1LCBSRUdfREFUQV9NVVRFX0NUUkws Cj4gKwkJCQlFTkFCTEVfRU5IQU5DRURfRlJBTUUsIEVOQUJMRV9FTkhBTkNFRF9GUkFNRSk7Cj4g Kwo+ICsJaXQ2NTA1X2xpbmtfcmF0ZV9zZXR1cChpdDY1MDUpOwo+ICsJaXQ2NTA1X2xhbmVfY291 bnRfc2V0dXAoaXQ2NTA1KTsKPiArCWl0NjUwNV9zZXR1cF9zc2MoaXQ2NTA1KTsKPiArCURSTV9E RVZfREVCVUdfRFJJVkVSKGRldiwKPiArCQkJICAgICAiJXMsICVkIGxhbmVzLCAlc2FibGUgc3Nj LCAlc2FibGUgZW5oYW5jZWQgZnJhbWUiLAo+ICsJCQkgICAgIGl0NjUwNS0+bGlua19yYXRlX2J3 X2NvZGUgIT0gUkJSID8gIkhCUiIgOiAiUkJSIiwKPiArCQkJICAgICBpdDY1MDUtPmxhbmVfY291 bnQsCj4gKwkJCSAgICAgaXQ2NTA1LT5lbmFibGVfc3NjID8gImVuIiA6ICJkaXMiLAo+ICsJCQkg ICAgIGl0NjUwNS0+ZW5hYmxlX2VuaGFuY2VkX2ZyYW1lID8gImVuIiA6ICJkaXMiKTsKPiArfQo+ ICsKPiArc3RhdGljIGJvb2wgaXQ2NTA1X2xpbmtfc3RhcnRfYXV0b190cmFpbihzdHJ1Y3QgaXQ2 NTA1ICppdDY1MDUpCj4gK3sKPiArCWludCB0aW1lb3V0ID0gNTAwLCBsaW5rX3RyYWluaW5nX3N0 YXRlOwo+ICsJYm9vbCBzdGF0ZSA9IGZhbHNlOwo+ICsKPiArCW11dGV4X2xvY2soJml0NjUwNS0+ YXV4X2xvY2spOwo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX1RSQUlOX0NUUkwwLAo+ ICsJCQkJRk9SQ0VfQ1JfRE9ORSB8IEZPUkNFX0VRX0RPTkUsIDB4MDApOwo+ICsJaXQ2NTA1X3dy aXRlKGl0NjUwNSwgUkVHX1RSQUlOX0NUUkwxLCBGT1JDRV9SRVRSQUlOKTsKPiArCWl0NjUwNV93 cml0ZShpdDY1MDUsIFJFR19UUkFJTl9DVFJMMSwgQVVUT19UUkFJTik7Cj4gKwo+ICsJd2hpbGUg KHRpbWVvdXQgPiAwKSB7Cj4gKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwo+ICsJCWxpbmtf dHJhaW5pbmdfc3RhdGUgPSBpdDY1MDVfcmVhZChpdDY1MDUsIFJFR19MSU5LX1RSQUlOX1NUUyk7 Cj4gKwo+ICsJCWlmICgobGlua190cmFpbmluZ19zdGF0ZSA+IDApICYmCj4gKwkJICAgIChsaW5r X3RyYWluaW5nX3N0YXRlICYgTElOS19TVEFURV9OT1JQKSkgewo+ICsJCQlzdGF0ZSA9IHRydWU7 Cj4gKwkJCWdvdG8gdW5sb2NrOwo+ICsJCX0KPiArCj4gKwkJdGltZW91dC0tOwo+ICsJfQo+ICt1 bmxvY2s6Cj4gKwltdXRleF91bmxvY2soJml0NjUwNS0+YXV4X2xvY2spOwo+ICsKPiArCXJldHVy biBzdGF0ZTsKPiArfQo+ICsKPiArc3RhdGljIGludCBpdDY1MDVfZHJtX2RwX2xpbmtfY29uZmln dXJlKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKPiArewo+ICsJdTggdmFsdWVzWzJdOwo+ICsJaW50 IGVycjsKPiArCXN0cnVjdCBkcm1fZHBfYXV4ICphdXggPSAmaXQ2NTA1LT5hdXg7Cj4gKwo+ICsJ dmFsdWVzWzBdID0gaXQ2NTA1LT5saW5rX3JhdGVfYndfY29kZTsKPiArCXZhbHVlc1sxXSA9IGl0 NjUwNS0+bGFuZV9jb3VudDsKPiArCj4gKwlpZiAoaXQ2NTA1LT5lbmFibGVfZW5oYW5jZWRfZnJh bWUpCj4gKwkJdmFsdWVzWzFdIHw9IERQX0xBTkVfQ09VTlRfRU5IQU5DRURfRlJBTUVfRU47Cj4g Kwo+ICsJZXJyID0gZHJtX2RwX2RwY2Rfd3JpdGUoYXV4LCBEUF9MSU5LX0JXX1NFVCwgdmFsdWVz LCBzaXplb2YodmFsdWVzKSk7Cj4gKwlpZiAoZXJyIDwgMCkKPiArCQlyZXR1cm4gZXJyOwo+ICsK PiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBpdDY1MDVfY2hlY2tfdm9sdGFn ZV9zd2luZ19tYXgodTggbGFuZV92b2x0YWdlX3N3aW5nX3ByZV9lbXBoYXNpcykKPiArewo+ICsJ cmV0dXJuICgobGFuZV92b2x0YWdlX3N3aW5nX3ByZV9lbXBoYXNpcyAmIDB4MDMpID09IE1BWF9D Ul9MRVZFTCk7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGl0NjUwNV9jaGVja19wcmVfZW1waGFz aXNfbWF4KHU4IGxhbmVfdm9sdGFnZV9zd2luZ19wcmVfZW1waGFzaXMpCj4gK3sKPiArCXJldHVy biAoKGxhbmVfdm9sdGFnZV9zd2luZ19wcmVfZW1waGFzaXMgJiAweDAzKSA9PSBNQVhfRVFfTEVW RUwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBpdDY1MDVfY2hlY2tfbWF4X3ZvbHRhZ2Vfc3dp bmdfcmVhY2hlZCh1OCAqbGFuZV92b2x0YWdlX3N3aW5nLAo+ICsJCQkJCQkgICB1OCBsYW5lX2Nv dW50KQo+ICt7Cj4gKwl1OCBpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBsYW5lX2NvdW50OyBp KyspIHsKPiArCQlpZiAobGFuZV92b2x0YWdlX3N3aW5nW2ldICYgRFBfVFJBSU5fTUFYX1NXSU5H X1JFQUNIRUQpCj4gKwkJCXJldHVybiB0cnVlOwo+ICsJfQo+ICsKPiArCXJldHVybiBmYWxzZTsK PiArfQo+ICsKPiArc3RhdGljIGJvb2wgaXQ2NTA1X3N0ZXBfdHJhaW5fbGFuZV92b2x0YWdlX3By ZV9lbXBoYXNpc19zZXQoCj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUsCj4gKwlzdHJ1Y3QgaXQ2 NTA1X3N0ZXBfdHJhaW5fcGFyYSAqbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcywKPiArCXU4ICps YW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzX3NldCkKPiArewo+ICsJdTggaTsKPiArCj4gKwlmb3Ig KGkgPSAwOyBpIDwgaXQ2NTA1LT5sYW5lX2NvdW50OyBpKyspIHsKPiArCQlsYW5lX3ZvbHRhZ2Vf cHJlX2VtcGhhc2lzLT52b2x0YWdlX3N3aW5nW2ldICY9IDB4MDM7Cj4gKwkJbGFuZV92b2x0YWdl X3ByZV9lbXBoYXNpc19zZXRbaV0gPQo+ICsJCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzLT52 b2x0YWdlX3N3aW5nW2ldOwo+ICsJCWlmIChpdDY1MDVfY2hlY2tfdm9sdGFnZV9zd2luZ19tYXgo Cj4gKwkJCSAgICBsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzLT52b2x0YWdlX3N3aW5nW2ldKSkK PiArCQkJbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpc19zZXRbaV0gfD0KPiArCQkJCURQX1RSQUlO X01BWF9TV0lOR19SRUFDSEVEOwo+ICsKPiArCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzLT5w cmVfZW1waGFzaXNbaV0gJj0gMHgwMzsKPiArCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzX3Nl dFtpXSB8PQo+ICsJCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzLT5wcmVfZW1waGFzaXNbaV0K PiArCQkJPDwgRFBfVFJBSU5fUFJFX0VNUEhBU0lTX1NISUZUOwo+ICsJCWlmIChpdDY1MDVfY2hl Y2tfcHJlX2VtcGhhc2lzX21heCgKPiArCQkJICAgIGxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMt PnByZV9lbXBoYXNpc1tpXSkpCj4gKwkJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXNfc2V0W2ld IHw9Cj4gKwkJCQlEUF9UUkFJTl9NQVhfUFJFX0VNUEhBU0lTX1JFQUNIRUQ7Cj4gKwkJaXQ2NTA1 X2RwY2Rfd3JpdGUoaXQ2NTA1LCBEUF9UUkFJTklOR19MQU5FMF9TRVQgKyBpLAo+ICsJCQkJICBs YW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzX3NldFtpXSk7Cj4gKwo+ICsJCWlmIChsYW5lX3ZvbHRh Z2VfcHJlX2VtcGhhc2lzX3NldFtpXSAhPQo+ICsJCSAgICBpdDY1MDVfZHBjZF9yZWFkKGl0NjUw NSwgRFBfVFJBSU5JTkdfTEFORTBfU0VUICsgaSkpCj4gKwkJCXJldHVybiBmYWxzZTsKPiArCX0K PiArCj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wKPiAraXQ2NTA1X3N0 ZXBfY3JfdHJhaW4oc3RydWN0IGl0NjUwNSAqaXQ2NTA1LAo+ICsJCSAgICAgc3RydWN0IGl0NjUw NV9zdGVwX3RyYWluX3BhcmEgKmxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMpCj4gK3sKPiArCXU4 IGxvb3BfY291bnQgPSAwLCBpID0gMCwgajsKPiArCXU4IGxpbmtfc3RhdHVzW0RQX0xJTktfU1RB VFVTX1NJWkVdID0geyAwIH07Cj4gKwl1OCBsYW5lX2xldmVsX2NvbmZpZ1tNQVhfTEFORV9DT1VO VF0gPSB7IDAgfTsKPiArCWludCBwcmVfZW1waGFzaXNfYWRqdXN0ID0gLTEsIHZvbHRhZ2Vfc3dp bmdfYWRqdXN0ID0gLTE7Cj4gKwo+ICsJaXQ2NTA1X2RwY2Rfd3JpdGUoaXQ2NTA1LCBEUF9ET1dO U1BSRUFEX0NUUkwsCj4gKwkJCSAgaXQ2NTA1LT5lbmFibGVfc3NjID8gRFBfU1BSRUFEX0FNUF8w XzUgOiAweDAwKTsKPiArCWl0NjUwNV9kcGNkX3dyaXRlKGl0NjUwNSwgRFBfVFJBSU5JTkdfUEFU VEVSTl9TRVQsCj4gKwkJCSAgRFBfVFJBSU5JTkdfUEFUVEVSTl8xKTsKPiArCj4gKwl3aGlsZSAo bG9vcF9jb3VudCA8IDUgJiYgaSA8IDEwKSB7Cj4gKwkJaSsrOwo+ICsJCWlmICghaXQ2NTA1X3N0 ZXBfdHJhaW5fbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpc19zZXQoCj4gKwkJCSAgICBpdDY1MDUs IGxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMsCj4gKwkJCSAgICBsYW5lX2xldmVsX2NvbmZpZykp Cj4gKwkJCWNvbnRpbnVlOwo+ICsJCWRybV9kcF9saW5rX3RyYWluX2Nsb2NrX3JlY292ZXJ5X2Rl bGF5KGl0NjUwNS0+ZHBjZCk7Cj4gKwkJZHJtX2RwX2RwY2RfcmVhZF9saW5rX3N0YXR1cygmaXQ2 NTA1LT5hdXgsIGxpbmtfc3RhdHVzKTsKPiArCj4gKwkJaWYgKGRybV9kcF9jbG9ja19yZWNvdmVy eV9vayhsaW5rX3N0YXR1cywgaXQ2NTA1LT5sYW5lX2NvdW50KSkgewo+ICsJCQlpdDY1MDVfc2V0 X2JpdHMoaXQ2NTA1LCBSRUdfVFJBSU5fQ1RSTDAsIEZPUkNFX0NSX0RPTkUsCj4gKwkJCQkJRk9S Q0VfQ1JfRE9ORSk7Cj4gKwkJCXJldHVybiB0cnVlOwo+ICsJCX0KPiArCQlEUk1fREVWX0RFQlVH X0RSSVZFUigmaXQ2NTA1LT5jbGllbnQtPmRldiwgImNyIG5vdCBkb25lIik7Cj4gKwo+ICsJCWlm IChpdDY1MDVfY2hlY2tfbWF4X3ZvbHRhZ2Vfc3dpbmdfcmVhY2hlZChsYW5lX2xldmVsX2NvbmZp ZywKPiArCQkJCQkJCSAgIGl0NjUwNS0+bGFuZV9jb3VudCkpCj4gKwkJCWdvdG8gY3JfdHJhaW5f ZmFpbDsKPiArCj4gKwkJZm9yIChqID0gMDsgaiA8IGl0NjUwNS0+bGFuZV9jb3VudDsgaisrKSB7 Cj4gKwkJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnZvbHRhZ2Vfc3dpbmdbal0gPQo+ICsJ CQkJZHJtX2RwX2dldF9hZGp1c3RfcmVxdWVzdF92b2x0YWdlKGxpbmtfc3RhdHVzLAo+ICsJCQkJ CQkJCSAgaikgPj4KPiArCQkJCURQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfU0hJRlQ7Cj4gKwkJCWxh bmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnByZV9lbXBoYXNpc1tqXSA9Cj4gKwkJCQlkcm1fZHBf Z2V0X2FkanVzdF9yZXF1ZXN0X3ByZV9lbXBoYXNpcygKPiArCQkJCQlsaW5rX3N0YXR1cywgaikg Pj4KPiArCQkJCURQX1RSQUlOX1BSRV9FTVBIQVNJU19TSElGVDsKPiArCQkJaWYgKCh2b2x0YWdl X3N3aW5nX2FkanVzdCA9PQo+ICsJCQkgICAgIGxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnZv bHRhZ2Vfc3dpbmdbal0pICYmCj4gKwkJCSAgICAocHJlX2VtcGhhc2lzX2FkanVzdCA9PQo+ICsJ CQkgICAgIGxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnByZV9lbXBoYXNpc1tqXSkpIHsKPiAr CQkJCWxvb3BfY291bnQrKzsKPiArCQkJCWNvbnRpbnVlOwo+ICsJCQl9Cj4gKwo+ICsJCQl2b2x0 YWdlX3N3aW5nX2FkanVzdCA9Cj4gKwkJCQlsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzLT52b2x0 YWdlX3N3aW5nW2pdOwo+ICsJCQlwcmVfZW1waGFzaXNfYWRqdXN0ID0KPiArCQkJCWxhbmVfdm9s dGFnZV9wcmVfZW1waGFzaXMtPnByZV9lbXBoYXNpc1tqXTsKPiArCQkJbG9vcF9jb3VudCA9IDA7 Cj4gKwo+ICsJCQlpZiAodm9sdGFnZV9zd2luZ19hZGp1c3QgKyBwcmVfZW1waGFzaXNfYWRqdXN0 ID4KPiArCQkJICAgIE1BWF9FUV9MRVZFTCkKPiArCQkJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFz aXMtPnZvbHRhZ2Vfc3dpbmdbal0gPQo+ICsJCQkJCU1BWF9FUV9MRVZFTCAtCj4gKwkJCQkJbGFu ZV92b2x0YWdlX3ByZV9lbXBoYXNpcwo+ICsJCQkJCQktPnByZV9lbXBoYXNpc1tqXTsKPiArCQl9 Cj4gKwl9Cj4gKwo+ICtjcl90cmFpbl9mYWlsOgo+ICsJaXQ2NTA1X2RwY2Rfd3JpdGUoaXQ2NTA1 LCBEUF9UUkFJTklOR19QQVRURVJOX1NFVCwKPiArCQkJICBEUF9UUkFJTklOR19QQVRURVJOX0RJ U0FCTEUpOwo+ICsKPiArCXJldHVybiBmYWxzZTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wKPiAr aXQ2NTA1X3N0ZXBfZXFfdHJhaW4oc3RydWN0IGl0NjUwNSAqaXQ2NTA1LAo+ICsJCSAgICAgc3Ry dWN0IGl0NjUwNV9zdGVwX3RyYWluX3BhcmEgKmxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMpCj4g K3sKPiArCXU4IGxvb3BfY291bnQgPSAwLCBpLCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19T SVpFXSA9IHsgMCB9Owo+ICsJdTggbGFuZV9sZXZlbF9jb25maWdbTUFYX0xBTkVfQ09VTlRdID0g eyAwIH07Cj4gKwo+ICsJaXQ2NTA1X2RwY2Rfd3JpdGUoaXQ2NTA1LCBEUF9UUkFJTklOR19QQVRU RVJOX1NFVCwKPiArCQkJICBEUF9UUkFJTklOR19QQVRURVJOXzIpOwo+ICsKPiArCXdoaWxlIChs b29wX2NvdW50IDwgNikgewo+ICsJCWxvb3BfY291bnQrKzsKPiArCj4gKwkJaWYgKCFpdDY1MDVf c3RlcF90cmFpbl9sYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzX3NldCgKPiArCQkJICAgIGl0NjUw NSwgbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcywKPiArCQkJICAgIGxhbmVfbGV2ZWxfY29uZmln KSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCWRybV9kcF9saW5rX3RyYWluX2NoYW5uZWxfZXFf ZGVsYXkoaXQ2NTA1LT5kcGNkKTsKPiArCQlkcm1fZHBfZHBjZF9yZWFkX2xpbmtfc3RhdHVzKCZp dDY1MDUtPmF1eCwgbGlua19zdGF0dXMpOwo+ICsKPiArCQlpZiAoIWRybV9kcF9jbG9ja19yZWNv dmVyeV9vayhsaW5rX3N0YXR1cywgaXQ2NTA1LT5sYW5lX2NvdW50KSkKPiArCQkJZ290byBlcV90 cmFpbl9mYWlsOwo+ICsKPiArCQlpZiAoZHJtX2RwX2NoYW5uZWxfZXFfb2sobGlua19zdGF0dXMs IGl0NjUwNS0+bGFuZV9jb3VudCkpIHsKPiArCQkJaXQ2NTA1X2RwY2Rfd3JpdGUoaXQ2NTA1LCBE UF9UUkFJTklOR19QQVRURVJOX1NFVCwKPiArCQkJCQkgIERQX1RSQUlOSU5HX1BBVFRFUk5fRElT QUJMRSk7Cj4gKwkJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19UUkFJTl9DVFJMMCwgRk9S Q0VfRVFfRE9ORSwKPiArCQkJCQlGT1JDRV9FUV9ET05FKTsKPiArCQkJcmV0dXJuIHRydWU7Cj4g KwkJfQo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKCZpdDY1MDUtPmNsaWVudC0+ZGV2LCAiZXEg bm90IGRvbmUiKTsKPiArCj4gKwkJZm9yIChpID0gMDsgaSA8IGl0NjUwNS0+bGFuZV9jb3VudDsg aSsrKSB7Cj4gKwkJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnZvbHRhZ2Vfc3dpbmdbaV0g PQo+ICsJCQkJZHJtX2RwX2dldF9hZGp1c3RfcmVxdWVzdF92b2x0YWdlKGxpbmtfc3RhdHVzLAo+ ICsJCQkJCQkJCSAgaSkgPj4KPiArCQkJCURQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfU0hJRlQ7Cj4g KwkJCWxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMtPnByZV9lbXBoYXNpc1tpXSA9Cj4gKwkJCQlk cm1fZHBfZ2V0X2FkanVzdF9yZXF1ZXN0X3ByZV9lbXBoYXNpcygKPiArCQkJCQlsaW5rX3N0YXR1 cywgaSkgPj4KPiArCQkJCURQX1RSQUlOX1BSRV9FTVBIQVNJU19TSElGVDsKPiArCj4gKwkJCWlm IChsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzLT52b2x0YWdlX3N3aW5nW2ldICsKPiArCQkJCSAg ICBsYW5lX3ZvbHRhZ2VfcHJlX2VtcGhhc2lzLT5wcmVfZW1waGFzaXNbaV0gPgo+ICsJCQkgICAg TUFYX0VRX0xFVkVMKQo+ICsJCQkJbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcy0+dm9sdGFnZV9z d2luZ1tpXSA9Cj4gKwkJCQkJMHgwMyAtIGxhbmVfdm9sdGFnZV9wcmVfZW1waGFzaXMKPiArCQkJ CQkJICAgICAgIC0+cHJlX2VtcGhhc2lzW2ldOwo+ICsJCX0KPiArCX0KPiArCj4gK2VxX3RyYWlu X2ZhaWw6Cj4gKwlpdDY1MDVfZHBjZF93cml0ZShpdDY1MDUsIERQX1RSQUlOSU5HX1BBVFRFUk5f U0VULAo+ICsJCQkgIERQX1RSQUlOSU5HX1BBVFRFUk5fRElTQUJMRSk7Cj4gKwlyZXR1cm4gZmFs c2U7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGl0NjUwNV9saW5rX3N0YXJ0X3N0ZXBfdHJhaW4o c3RydWN0IGl0NjUwNSAqaXQ2NTA1KQo+ICt7Cj4gKwlpbnQgZXJyOwo+ICsJc3RydWN0IGl0NjUw NV9zdGVwX3RyYWluX3BhcmEgbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcyA9IHsKPiArCQkudm9s dGFnZV9zd2luZyA9IHsgMCB9LAo+ICsJCS5wcmVfZW1waGFzaXMgPSB7IDAgfSwKPiArCX07Cj4g Kwo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoJml0NjUwNS0+Y2xpZW50LT5kZXYsICJzdGFydCIp Owo+ICsJZXJyID0gaXQ2NTA1X2RybV9kcF9saW5rX2NvbmZpZ3VyZShpdDY1MDUpOwo+ICsKPiAr CWlmIChlcnIgPCAwKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCWlmICghaXQ2NTA1X3N0ZXBfY3Jf dHJhaW4oaXQ2NTA1LCAmbGFuZV92b2x0YWdlX3ByZV9lbXBoYXNpcykpCj4gKwkJcmV0dXJuIGZh bHNlOwo+ICsJaWYgKCFpdDY1MDVfc3RlcF9lcV90cmFpbihpdDY1MDUsICZsYW5lX3ZvbHRhZ2Vf cHJlX2VtcGhhc2lzKSkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ ICsKPiArc3RhdGljIGJvb2wgaXQ2NTA1X2dldF92aWRlb19zdGF0dXMoc3RydWN0IGl0NjUwNSAq aXQ2NTA1KQo+ICt7Cj4gKwlpbnQgcmVnXzBkOwo+ICsKPiArCXJlZ18wZCA9IGl0NjUwNV9yZWFk KGl0NjUwNSwgUkVHX1NZU1RFTV9TVFMpOwo+ICsKPiArCWlmIChyZWdfMGQgPCAwKQo+ICsJCXJl dHVybiBmYWxzZTsKPiArCj4gKwlyZXR1cm4gISEocmVnXzBkICYgVklERU9fU1RCKTsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgaXQ2NTA1X3Jlc2V0X2hkY3Aoc3RydWN0IGl0NjUwNSAqaXQ2NTA1 KQo+ICt7Cj4gKwlpdDY1MDUtPmhkY3Bfc3RhdHVzID0gSERDUF9BVVRIX0lETEU7Cj4gKwkvKiBE aXNhYmxlIENQX0Rlc2lyZWQgKi8KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQ X0NUUkwxLCBIRENQX0NQX0VOQUJMRSwgMHgwMCk7Cj4gKwlpdDY1MDVfc2V0X2JpdHMoaXQ2NTA1 LCBSRUdfUkVTRVRfQ1RSTCwgSERDUF9SRVNFVCwgSERDUF9SRVNFVCk7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIGl0NjUwNV9zdGFydF9oZGNwKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKPiArewo+ ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7Cj4gKwo+ICsJRFJN X0RFVl9ERUJVR19EUklWRVIoZGV2LCAic3RhcnQiKTsKPiArCWl0NjUwNV9yZXNldF9oZGNwKGl0 NjUwNSk7Cj4gKwlxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX3dxLCAmaXQ2NTA1LT5oZGNwX3dv cmssCj4gKwkJCSAgIG1zZWNzX3RvX2ppZmZpZXMoMjQwMCkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBpdDY1MDVfc3RvcF9oZGNwKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKPiArewo+ICsJaXQ2 NTA1X3Jlc2V0X2hkY3AoaXQ2NTA1KTsKPiArCWNhbmNlbF9kZWxheWVkX3dvcmsoJml0NjUwNS0+ aGRjcF93b3JrKTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgaXQ2NTA1X2hkY3BfaXNfa3N2X3Zh bGlkKHU4ICprc3YpCj4gK3sKPiArCWludCBpLCBvbmVzID0gMDsKPiArCj4gKwkvKiBLU1YgaGFz IDIwIDEncyBhbmQgMjAgMCdzICovCj4gKwlmb3IgKGkgPSAwOyBpIDwgRFJNX0hEQ1BfS1NWX0xF TjsgaSsrKQo+ICsJCW9uZXMgKz0gaHdlaWdodDgoa3N2W2ldKTsKPiArCWlmIChvbmVzICE9IDIw KQo+ICsJCXJldHVybiBmYWxzZTsKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBpdDY1MDVfaGRjcF9wYXJ0MV9hdXRoKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKPiArewo+ ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7Cj4gKwl1OCBoZGNw X2JjYXBzOwo+ICsKPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19SRVNFVF9DVFJMLCBI RENQX1JFU0VULCAweDAwKTsKPiArCS8qIERpc2FibGUgQ1BfRGVzaXJlZCAqLwo+ICsJaXQ2NTA1 X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfQ1RSTDEsIEhEQ1BfQ1BfRU5BQkxFLCAweDAwKTsK PiArCj4gKwl1c2xlZXBfcmFuZ2UoMTAwMCwgMTUwMCk7Cj4gKwloZGNwX2JjYXBzID0gaXQ2NTA1 X2RwY2RfcmVhZChpdDY1MDUsIERQX0FVWF9IRENQX0JDQVBTKTsKPiArCURSTV9ERVZfREVCVUdf RFJJVkVSKGRldiwgIkRQQ0RbMHg2ODAyOF06IDB4JTAyeCIsCj4gKwkJCSAgICAgaGRjcF9iY2Fw cyk7Cj4gKwo+ICsJaWYgKCFoZGNwX2JjYXBzKQo+ICsJCXJldHVybjsKPiArCj4gKwkvKiBjbGVh ciB0aGUgcmVwZWF0ZXIgTGlzdCBDaGsgRG9uZSBhbmQgZmFpbCBiaXQgKi8KPiArCWl0NjUwNV9z ZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX1RSSUdHRVIsCj4gKwkJCUhEQ1BfVFJJR0dFUl9LU1Zf RE9ORSB8IEhEQ1BfVFJJR0dFUl9LU1ZfRkFJTCwKPiArCQkJMHgwMCk7Cj4gKwo+ICsJLyogRW5h YmxlIEFuIEdlbmVyYXRvciAqLwo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1Bf Q1RSTDIsIEhEQ1BfQU5fR0VOLCBIRENQX0FOX0dFTik7Cj4gKwkvKiBkZWxheTFtcygxMCk7Ki8K PiArCXVzbGVlcF9yYW5nZSgxMDAwMCwgMTUwMDApOwo+ICsJLyogU3RvcCBBbiBHZW5lcmF0b3Ig Ki8KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX0NUUkwyLCBIRENQX0FOX0dF TiwgMHgwMCk7Cj4gKwo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfQ1RSTDEs IEhEQ1BfQ1BfRU5BQkxFLCBIRENQX0NQX0VOQUJMRSk7Cj4gKwo+ICsJaXQ2NTA1X3NldF9iaXRz KGl0NjUwNSwgUkVHX0hEQ1BfVFJJR0dFUiwgSERDUF9UUklHR0VSX1NUQVJULAo+ICsJCQlIRENQ X1RSSUdHRVJfU1RBUlQpOwo+ICsKPiArCWl0NjUwNS0+aGRjcF9zdGF0dXMgPSBIRENQX0FVVEhf R09JTkc7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaXQ2NTA1X3NoYTFfZGlnZXN0KHN0cnVjdCBp dDY1MDUgKml0NjUwNSwgdTggKnNoYTFfaW5wdXQsCj4gKwkJCSAgICAgIHVuc2lnbmVkIGludCBz aXplLCB1OCAqb3V0cHV0X2F2KQo+ICt7Cj4gKwlzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYzsKPiAr CXN0cnVjdCBjcnlwdG9fc2hhc2ggKnRmbTsKPiArCWludCBlcnI7Cj4gKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsKPiArCj4gKwl0Zm0gPSBjcnlwdG9fYWxsb2Nf c2hhc2goInNoYTEiLCAwLCAwKTsKPiArCWlmIChJU19FUlIodGZtKSkgewo+ICsJCURSTV9ERVZf RVJST1IoZGV2LCAiY3J5cHRvX2FsbG9jX3NoYXNoIHNoYTEgZmFpbGVkIik7Cj4gKwkJcmV0dXJu IFBUUl9FUlIodGZtKTsKPiArCX0KPiArCWRlc2MgPSBremFsbG9jKHNpemVvZigqZGVzYykgKyBj cnlwdG9fc2hhc2hfZGVzY3NpemUodGZtKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWRlc2MpIHsK PiArCQljcnlwdG9fZnJlZV9zaGFzaCh0Zm0pOwo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsJfQo+ ICsKPiArCWRlc2MtPnRmbSA9IHRmbTsKPiArCWVyciA9IGNyeXB0b19zaGFzaF9kaWdlc3QoZGVz Yywgc2hhMV9pbnB1dCwgc2l6ZSwgb3V0cHV0X2F2KTsKPiArCWlmIChlcnIpCj4gKwkJRFJNX0RF Vl9FUlJPUihkZXYsICJjcnlwdG9fc2hhc2hfZGlnZXN0IHNoYTEgZmFpbGVkIik7Cj4gKwo+ICsJ Y3J5cHRvX2ZyZWVfc2hhc2godGZtKTsKPiArCWtmcmVlKGRlc2MpOwo+ICsJcmV0dXJuIGVycjsK PiArfQo+ICsKPiArc3RhdGljIGludCBpdDY1MDVfc2V0dXBfc2hhMV9pbnB1dChzdHJ1Y3QgaXQ2 NTA1ICppdDY1MDUsIHU4ICpzaGExX2lucHV0KQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYg PSAmaXQ2NTA1LT5jbGllbnQtPmRldjsKPiArCXU4IGJpbmZvWzJdOwo+ICsJaW50IGRvd25fc3Ry ZWFtX2NvdW50LCBpLCBlcnIsIG1zZ19jb3VudCA9IDA7Cj4gKwo+ICsJZXJyID0gaXQ2NTA1X2dl dF9kcGNkKGl0NjUwNSwgRFBfQVVYX0hEQ1BfQklORk8sIGJpbmZvLAo+ICsJCQkgICAgICBBUlJB WV9TSVpFKGJpbmZvKSk7Cj4gKwo+ICsJaWYgKGVyciA8IDApIHsKPiArCQlEUk1fREVWX0VSUk9S KGRldiwgIlJlYWQgYmluZm8gdmFsdWUgRmFpbCIpOwo+ICsJCXJldHVybiBlcnI7Cj4gKwl9Cj4g Kwo+ICsJZG93bl9zdHJlYW1fY291bnQgPSBiaW5mb1swXSAmIDB4N0Y7Cj4gKwlEUk1fREVWX0RF QlVHX0RSSVZFUihkZXYsICJiaW5mbzoweCUqcGgiLCAoaW50KUFSUkFZX1NJWkUoYmluZm8pLAo+ ICsJCQkgICAgIGJpbmZvKTsKPiArCj4gKwlpZiAoKGJpbmZvWzBdICYgQklUKDcpKSB8fCAoYmlu Zm9bMV0gJiBCSVQoMykpKSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJIRENQIG1heCBjYXNj YWRlIGRldmljZSBleGNlZWQiKTsKPiArCQlyZXR1cm4gMDsKPiArCX0KPiArCj4gKwlpZiAoIWRv d25fc3RyZWFtX2NvdW50IHx8Cj4gKwkgICAgKGRvd25fc3RyZWFtX2NvdW50ID4gTUFYX0hEQ1Bf RE9XTl9TVFJFQU1fQ09VTlQpKSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJIRENQIGRvd24g c3RyZWFtIGNvdW50IEVycm9yICVkIiwKPiArCQkJICAgICAgZG93bl9zdHJlYW1fY291bnQpOwo+ ICsJCXJldHVybiAwOwo+ICsJfQo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBkb3duX3N0cmVhbV9j b3VudDsgaSsrKSB7Cj4gKwkJZXJyID0gaXQ2NTA1X2dldF9kcGNkKGl0NjUwNSwgRFBfQVVYX0hE Q1BfS1NWX0ZJRk8gKwo+ICsJCQkJICAgICAgKGkgJSAzKSAqIERSTV9IRENQX0tTVl9MRU4sCj4g KwkJCQkgICAgICBzaGExX2lucHV0ICsgbXNnX2NvdW50LAo+ICsJCQkJICAgICAgRFJNX0hEQ1Bf S1NWX0xFTik7Cj4gKwo+ICsJCWlmIChlcnIgPCAwKQo+ICsJCQlyZXR1cm4gZXJyOwo+ICsKPiAr CQltc2dfY291bnQgKz0gNTsKPiArCX0KPiArCj4gKwlpdDY1MDUtPmhkY3BfZG93bl9zdHJlYW1f Y291bnQgPSBkb3duX3N0cmVhbV9jb3VudDsKPiArCXNoYTFfaW5wdXRbbXNnX2NvdW50KytdID0g YmluZm9bMF07Cj4gKwlzaGExX2lucHV0W21zZ19jb3VudCsrXSA9IGJpbmZvWzFdOwo+ICsKPiAr CWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX0NUUkwyLCBIRENQX0VOX00wX1JFQUQs Cj4gKwkJCUhEQ1BfRU5fTTBfUkVBRCk7Cj4gKwo+ICsJZXJyID0gcmVnbWFwX2J1bGtfcmVhZChp dDY1MDUtPnJlZ21hcCwgUkVHX00wXzBfNywKPiArCQkJICAgICAgIHNoYTFfaW5wdXQgKyBtc2df Y291bnQsIDgpOwo+ICsKPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19IRENQX0NUUkwy LCBIRENQX0VOX00wX1JFQUQsIDB4MDApOwo+ICsKPiArCWlmIChlcnIgPCAwKSB7Cj4gKwkJRFJN X0RFVl9FUlJPUihkZXYsICIgV2FybmluZywgUmVhZCBNIHZhbHVlIEZhaWwiKTsKPiArCQlyZXR1 cm4gZXJyOwo+ICsJfQo+ICsKPiArCW1zZ19jb3VudCArPSA4Owo+ICsKPiArCXJldHVybiBtc2df Y291bnQ7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGl0NjUwNV9oZGNwX3BhcnQyX2tzdmxpc3Rf Y2hlY2soc3RydWN0IGl0NjUwNSAqaXQ2NTA1KQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYg PSAmaXQ2NTA1LT5jbGllbnQtPmRldjsKPiArCXU4IGF2WzVdWzRdLCBidls1XVs0XTsKPiArCWlu dCBpLCBlcnI7Cj4gKwo+ICsJaSA9IGl0NjUwNV9zZXR1cF9zaGExX2lucHV0KGl0NjUwNSwgaXQ2 NTA1LT5zaGExX2lucHV0KTsKPiArCWlmIChpIDw9IDApIHsKPiArCQlEUk1fREVWX0VSUk9SKGRl diwgIlNIQS0xIElucHV0IGxlbmd0aCBlcnJvciAlZCIsIGkpOwo+ICsJCXJldHVybiBmYWxzZTsK PiArCX0KPiArCj4gKwlpdDY1MDVfc2hhMV9kaWdlc3QoaXQ2NTA1LCBpdDY1MDUtPnNoYTFfaW5w dXQsIGksICh1OCAqKWF2KTsKPiArCj4gKwllcnIgPSBpdDY1MDVfZ2V0X2RwY2QoaXQ2NTA1LCBE UF9BVVhfSERDUF9WX1BSSU1FKDApLCAodTggKilidiwKPiArCQkJICAgICAgc2l6ZW9mKGJ2KSk7 Cj4gKwo+ICsJaWYgKGVyciA8IDApIHsKPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIlJlYWQgVicg dmFsdWUgRmFpbCIpOwo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiArCj4gKwlmb3IgKGkgPSAw OyBpIDwgNTsgaSsrKQo+ICsJCWlmICgoYnZbaV1bM10gIT0gYXZbaV1bMF0pIHx8IChidltpXVsy XSAhPSBhdltpXVsxXSkgfHwKPiArCQkgICAgKGJ2W2ldWzFdICE9IGF2W2ldWzJdKSB8fCAoYnZb aV1bMF0gIT0gYXZbaV1bM10pKQo+ICsJCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJRFJNX0RFVl9E RUJVR19EUklWRVIoZGV2LCAiVicgYWxsIG1hdGNoISEiKTsKPiArCXJldHVybiB0cnVlOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfaGRjcF93YWl0X2tzdl9saXN0KHN0cnVjdCB3b3Jr X3N0cnVjdCAqd29yaykKPiArewo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gY29udGFpbmVy X29mKHdvcmssIHN0cnVjdCBpdDY1MDUsCj4gKwkJCQkJICAgICBoZGNwX3dhaXRfa3N2X2xpc3Qp Owo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7Cj4gKwl1bnNp Z25lZCBpbnQgdGltZW91dCA9IDUwMDA7Cj4gKwl1OCBic3RhdHVzID0gMDsKPiArCWJvb2wga3N2 X2xpc3RfY2hlY2s7Cj4gKwo+ICsJdGltZW91dCAvPSAyMDsKPiArCXdoaWxlICh0aW1lb3V0ID4g MCkgewo+ICsJCWlmICghaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMoaXQ2NTA1KSkKPiArCQkJ cmV0dXJuOwo+ICsKPiArCQlic3RhdHVzID0gaXQ2NTA1X2RwY2RfcmVhZChpdDY1MDUsIERQX0FV WF9IRENQX0JTVEFUVVMpOwo+ICsKPiArCQlpZiAoYnN0YXR1cyAmIERQX0JTVEFUVVNfUkVBRFkp Cj4gKwkJCWJyZWFrOwo+ICsKPiArCQltc2xlZXAoMjApOwo+ICsJCXRpbWVvdXQtLTsKPiArCX0K PiArCj4gKwlpZiAodGltZW91dCA9PSAwKSB7Cj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2 LCAidGltZW91dCBhbmQga3N2IGxpc3Qgd2FpdCBmYWlsZWQiKTsKPiArCQlnb3RvIHRpbWVvdXQ7 Cj4gKwl9Cj4gKwo+ICsJa3N2X2xpc3RfY2hlY2sgPSBpdDY1MDVfaGRjcF9wYXJ0Ml9rc3ZsaXN0 X2NoZWNrKGl0NjUwNSk7Cj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJrc3YgbGlzdCBy ZWFkeSwga3N2IGxpc3QgY2hlY2sgJXMiLAo+ICsJCQkgICAgIGtzdl9saXN0X2NoZWNrID8gInBh c3MiIDogImZhaWwiKTsKPiArCWlmIChrc3ZfbGlzdF9jaGVjaykgewo+ICsJCWl0NjUwNV9zZXRf Yml0cyhpdDY1MDUsIFJFR19IRENQX1RSSUdHRVIsCj4gKwkJCQlIRENQX1RSSUdHRVJfS1NWX0RP TkUsIEhEQ1BfVFJJR0dFUl9LU1ZfRE9ORSk7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICt0aW1lb3V0 Ogo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0hEQ1BfVFJJR0dFUiwKPiArCQkJSERD UF9UUklHR0VSX0tTVl9ET05FIHwgSERDUF9UUklHR0VSX0tTVl9GQUlMLAo+ICsJCQlIRENQX1RS SUdHRVJfS1NWX0RPTkUgfCBIRENQX1RSSUdHRVJfS1NWX0ZBSUwpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBpdDY1MDVfaGRjcF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiArewo+ ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpdDY1 MDUsCj4gKwkJCQkJICAgICBoZGNwX3dvcmsud29yayk7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYg PSAmaXQ2NTA1LT5jbGllbnQtPmRldjsKPiArCWludCByZXQ7Cj4gKwl1OCBsaW5rX3N0YXR1c1tE UF9MSU5LX1NUQVRVU19TSVpFXSA9IHsgMCB9Owo+ICsKPiArCURSTV9ERVZfREVCVUdfRFJJVkVS KGRldiwgInN0YXJ0Iik7Cj4gKwo+ICsJaWYgKCFpdDY1MDVfZ2V0X3NpbmtfaHBkX3N0YXR1cyhp dDY1MDUpKQo+ICsJCXJldHVybjsKPiArCj4gKwlyZXQgPSBkcm1fZHBfZHBjZF9yZWFkX2xpbmtf c3RhdHVzKCZpdDY1MDUtPmF1eCwgbGlua19zdGF0dXMpOwo+ICsJRFJNX0RFVl9ERUJVR19EUklW RVIoZGV2LCAicmV0OiAlZCBsaW5rX3N0YXR1czogJSpwaCIsIHJldCwKPiArCQkJICAgICAoaW50 KXNpemVvZihsaW5rX3N0YXR1cyksIGxpbmtfc3RhdHVzKTsKPiArCj4gKwlpZiAoKHJldCA8IDAp IHx8ICFkcm1fZHBfY2hhbm5lbF9lcV9vayhsaW5rX3N0YXR1cywgaXQ2NTA1LT5sYW5lX2NvdW50 KQo+ICsJICAgIHx8ICFpdDY1MDVfZ2V0X3ZpZGVvX3N0YXR1cyhpdDY1MDUpKSB7Cj4gKwkJRFJN X0RFVl9ERUJVR19EUklWRVIoZGV2LCAibGluayB0cmFpbiBub3QgZG9uZSBvciBubyB2aWRlbyIp Owo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlyZXQgPSBpdDY1MDVfZ2V0X2RwY2QoaXQ2NTA1 LCBEUF9BVVhfSERDUF9CS1NWLCBpdDY1MDUtPmJrc3ZzLAo+ICsJCQkgICAgICBBUlJBWV9TSVpF KGl0NjUwNS0+YmtzdnMpKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihk ZXYsICJmYWlsIHRvIGdldCBia3N2ICByZXQ6ICVkIiwgcmV0KTsKPiArCQlpdDY1MDVfc2V0X2Jp dHMoaXQ2NTA1LCBSRUdfSERDUF9UUklHR0VSLAo+ICsJCQkJSERDUF9UUklHR0VSX0tTVl9GQUlM LCBIRENQX1RSSUdHRVJfS1NWX0ZBSUwpOwo+ICsJfQo+ICsKPiArCURSTV9ERVZfREVCVUdfRFJJ VkVSKGRldiwgImJrc3YgPSAweCUqcGgiLAo+ICsJCQkgICAgIChpbnQpQVJSQVlfU0laRShpdDY1 MDUtPmJrc3ZzKSwgaXQ2NTA1LT5ia3N2cyk7Cj4gKwo+ICsJaWYgKCFpdDY1MDVfaGRjcF9pc19r c3ZfdmFsaWQoaXQ2NTA1LT5ia3N2cykpIHsKPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIkRpc3Bs YXkgUG9ydCBia3N2IG5vdCB2YWxpZCIpOwo+ICsJCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJF R19IRENQX1RSSUdHRVIsCj4gKwkJCQlIRENQX1RSSUdHRVJfS1NWX0ZBSUwsIEhEQ1BfVFJJR0dF Ul9LU1ZfRkFJTCk7Cj4gKwl9Cj4gKwo+ICsJaXQ2NTA1X2hkY3BfcGFydDFfYXV0aChpdDY1MDUp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfc2hvd19oZGNwX2luZm8oc3RydWN0IGl0 NjUwNSAqaXQ2NTA1KQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGll bnQtPmRldjsKPiArCWludCBpOwo+ICsJdTggKnNoYTEgPSBpdDY1MDUtPnNoYTFfaW5wdXQ7Cj4g Kwo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiaGRjcF9zdGF0dXM6ICVkIGlzX3JlcGVh dGVyOiAlZCIsCj4gKwkJCSAgICAgaXQ2NTA1LT5oZGNwX3N0YXR1cywgaXQ2NTA1LT5pc19yZXBl YXRlcik7Cj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJia3N2ID0gMHglKnBoIiwKPiAr CQkJICAgICAoaW50KUFSUkFZX1NJWkUoaXQ2NTA1LT5ia3N2cyksIGl0NjUwNS0+YmtzdnMpOwo+ ICsKPiArCWlmIChpdDY1MDUtPmlzX3JlcGVhdGVyKSB7Cj4gKwkJRFJNX0RFVl9ERUJVR19EUklW RVIoZGV2LCAiaGRjcF9kb3duX3N0cmVhbV9jb3VudDogJWQiLAo+ICsJCQkJICAgICBpdDY1MDUt PmhkY3BfZG93bl9zdHJlYW1fY291bnQpOwo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwg InNoYTFfaW5wdXQ6IDB4JSpwaCIsCj4gKwkJCQkgICAgIChpbnQpQVJSQVlfU0laRShpdDY1MDUt PnNoYTFfaW5wdXQpLAo+ICsJCQkJICAgICBpdDY1MDUtPnNoYTFfaW5wdXQpOwo+ICsJCWZvciAo aSA9IDA7IGkgPCBpdDY1MDUtPmhkY3BfZG93bl9zdHJlYW1fY291bnQ7IGkrKykgewo+ICsJCQlE Uk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJLU1ZfJWQgPSAweCUqcGgiLCBpLAo+ICsJCQkJCSAg ICAgRFJNX0hEQ1BfS1NWX0xFTiwgc2hhMSk7Cj4gKwkJCXNoYTEgKz0gRFJNX0hEQ1BfS1NWX0xF TjsKPiArCQl9Cj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiYmluZm86IDB4JTJwaCBN MDogMHglOHBoIiwKPiArCQkJCSAgICAgc2hhMSwgc2hhMSArIDIpOwo+ICsJfQo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBpdDY1MDVfc3RvcF9saW5rX3RyYWluKHN0cnVjdCBpdDY1MDUgKml0NjUw NSkKPiArewo+ICsJaXQ2NTA1LT5saW5rX3N0YXRlID0gTElOS19JRExFOwo+ICsJY2FuY2VsX3dv cmtfc3luYygmaXQ2NTA1LT5saW5rX3dvcmtzKTsKPiArCWl0NjUwNV93cml0ZShpdDY1MDUsIFJF R19UUkFJTl9DVFJMMSwgRk9SQ0VfUkVUUkFJTik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGl0 NjUwNV9saW5rX3RyYWluX29rKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKPiArewo+ICsJc3RydWN0 IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7Cj4gKwo+ICsJaXQ2NTA1LT5saW5r X3N0YXRlID0gTElOS19PSzsKPiArCS8qIGRpc2FsYmUgbXV0ZSBlbmFibGUgYXZpIGluZm8gZnJh bWUgKi8KPiArCWl0NjUwNV9zZXRfYml0cyhpdDY1MDUsIFJFR19EQVRBX01VVEVfQ1RSTCwgRU5f VklEX01VVEUsIDB4MDApOwo+ICsJaXQ2NTA1X3NldF9iaXRzKGl0NjUwNSwgUkVHX0lORk9GUkFN RV9DVFJMLAo+ICsJCQlFTl9WSURfQ1RSTF9QS1QsIEVOX1ZJRF9DVFJMX1BLVCk7Cj4gKwo+ICsJ aWYgKGl0NjUwNV9hdWRpb19pbnB1dChpdDY1MDUpKSB7Cj4gKwkJRFJNX0RFVl9ERUJVR19EUklW RVIoZGV2LCAiRW5hYmxlIGF1ZGlvISIpOwo+ICsJCWl0NjUwNV9lbmFibGVfYXVkaW8oaXQ2NTA1 KTsKPiArCX0KPiArCj4gKwlpZiAoaXQ2NTA1LT5oZGNwX2Rlc2lyZWQpCj4gKwkJaXQ2NTA1X3N0 YXJ0X2hkY3AoaXQ2NTA1KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaXQ2NTA1X2xpbmtfc3Rl cF90cmFpbl9wcm9jZXNzKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKPiArewo+ICsJc3RydWN0IGRl dmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7Cj4gKwlpbnQgcmV0LCBpLCBzdGVwX3Jl dHJ5ID0gMzsKPiArCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJTdGFydCBzdGVwIHRy YWluIik7Cj4gKwo+ICsJaWYgKGl0NjUwNS0+c2lua19jb3VudCA9PSAwKSB7Cj4gKwkJRFJNX0RF Vl9ERUJVR19EUklWRVIoZGV2LCAiaXQ2NTA1LT5zaW5rX2NvdW50OiVkLCBmb3JjZSBlcSIsCj4g KwkJCQkgICAgIGl0NjUwNS0+c2lua19jb3VudCk7Cj4gKwkJaXQ2NTA1X3NldF9iaXRzKGl0NjUw NSwJUkVHX1RSQUlOX0NUUkwwLCBGT1JDRV9FUV9ET05FLAo+ICsJCQkJRk9SQ0VfRVFfRE9ORSk7 Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWlmICghaXQ2NTA1LT5zdGVwX3RyYWluKSB7Cj4g KwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAibm90IHN1cHBvcnQgc3RlcCB0cmFpbiIpOwo+ ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwkvKiBzZXRwIHRyYWluaW5nIHN0YXJ0IGhlcmUgKi8K PiArCWZvciAoaSA9IDA7IGkgPCBzdGVwX3JldHJ5OyBpKyspIHsKPiArCQlpdDY1MDVfc2V0X2Jp dHMoaXQ2NTA1LCBSRUdfVFJBSU5fQ1RSTDAsCj4gKwkJCQlGT1JDRV9DUl9ET05FIHwgRk9SQ0Vf RVFfRE9ORSwgMHgwMCk7Cj4gKwkJaXQ2NTA1X2RwY2Rfd3JpdGUoaXQ2NTA1LCBEUF9UUkFJTklO R19QQVRURVJOX1NFVCwKPiArCQkJCSAgRFBfVFJBSU5JTkdfUEFUVEVSTl9ESVNBQkxFKTsKPiAr CQlyZXQgPSBpdDY1MDVfbGlua19zdGFydF9zdGVwX3RyYWluKGl0NjUwNSk7Cj4gKwkJRFJNX0RF Vl9ERUJVR19EUklWRVIoZGV2LCAic3RlcCB0cmFpbiAlcywgcmV0cnk6JWQgdGltZXMiLAo+ICsJ CQkJICAgICByZXQgPyAicGFzcyIgOiAiZmFpbGVkIiwgaSArIDEpOwo+ICsJCWlmIChyZXQpIHsK PiArCQkJaXQ2NTA1X2xpbmtfdHJhaW5fb2soaXQ2NTA1KTsKPiArCQkJcmV0dXJuOwo+ICsJCX0K PiArCX0KPiArCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJ0cmFpbmluZyBmYWlsIik7 Cj4gKwlpdDY1MDUtPmxpbmtfc3RhdGUgPSBMSU5LX0lETEU7Cj4gKwlpdDY1MDVfdmlkZW9fcmVz ZXQoaXQ2NTA1KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaXQ2NTA1X2xpbmtfdHJhaW5pbmdf d29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gK3sKPiArCXN0cnVjdCBpdDY1MDUgKml0 NjUwNSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXQ2NTA1LCBsaW5rX3dvcmtzKTsKPiAr CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Owo+ICsJaW50IHJldDsK PiArCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJpdDY1MDUtPnNpbmtfY291bnQ6ICVk IiwKPiArCQkJICAgICBpdDY1MDUtPnNpbmtfY291bnQpOwo+ICsKPiArCWlmICghaXQ2NTA1X2dl dF9zaW5rX2hwZF9zdGF0dXMoaXQ2NTA1KSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJaXQ2NTA1X2xp bmtfdHJhaW5pbmdfc2V0dXAoaXQ2NTA1KTsKPiArCWl0NjUwNV9yZXNldF9oZGNwKGl0NjUwNSk7 Cj4gKwlpdDY1MDVfYXV4X3Jlc2V0KGl0NjUwNSk7Cj4gKwo+ICsJaWYgKGl0NjUwNS0+YXV0b190 cmFpbl9yZXRyeSA8IDEpIHsKPiArCQlpdDY1MDVfbGlua19zdGVwX3RyYWluX3Byb2Nlc3MoaXQ2 NTA1KTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gaXQ2NTA1X2xpbmtfc3RhcnRf YXV0b190cmFpbihpdDY1MDUpOwo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiYXV0byB0 cmFpbiAlcywgYXV0b190cmFpbl9yZXRyeTogJWQiLAo+ICsJCQkgICAgIHJldCA/ICJwYXNzIiA6 ICJmYWlsZWQiLCBpdDY1MDUtPmF1dG9fdHJhaW5fcmV0cnkpOwo+ICsJaXQ2NTA1LT5hdXRvX3Ry YWluX3JldHJ5LS07Cj4gKwo+ICsJaWYgKHJldCkgewo+ICsJCWl0NjUwNV9saW5rX3RyYWluX29r KGl0NjUwNSk7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWl0NjUwNV9kdW1wKGl0NjUwNSk7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9wbHVnZ2VkX3N0YXR1c190b19jb2RlYyhz dHJ1Y3QgaXQ2NTA1ICppdDY1MDUpCj4gK3sKPiArCWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMg c3RhdHVzID0gaXQ2NTA1LT5jb25uZWN0b3Jfc3RhdHVzOwo+ICsKPiArCWlmIChpdDY1MDUtPnBs dWdnZWRfY2IgJiYgaXQ2NTA1LT5jb2RlY19kZXYpCj4gKwkJaXQ2NTA1LT5wbHVnZ2VkX2NiKGl0 NjUwNS0+Y29kZWNfZGV2LAo+ICsJCQkJICAgc3RhdHVzID09IGNvbm5lY3Rvcl9zdGF0dXNfY29u bmVjdGVkKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBpdDY1MDVfcHJvY2Vzc19ocGRfaXJxKHN0 cnVjdCBpdDY1MDUgKml0NjUwNSkKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUw NS0+Y2xpZW50LT5kZXY7Cj4gKwlpbnQgcmV0LCBkcGNkX3NpbmtfY291bnQsIGRwX2lycV92ZWN0 b3IsIGJzdGF0dXM7Cj4gKwl1OCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXTsKPiAr Cj4gKwlpZiAoIWl0NjUwNV9nZXRfc2lua19ocGRfc3RhdHVzKGl0NjUwNSkpIHsKPiArCQlEUk1f REVWX0RFQlVHX0RSSVZFUihkZXYsICJIUERfSVJRIEhQRCBsb3ciKTsKPiArCQlpdDY1MDUtPnNp bmtfY291bnQgPSAwOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICsKPiArCXJldCA9IGl0NjUwNV9k cGNkX3JlYWQoaXQ2NTA1LCBEUF9TSU5LX0NPVU5UKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJl dHVybiByZXQ7Cj4gKwo+ICsJZHBjZF9zaW5rX2NvdW50ID0gRFBfR0VUX1NJTktfQ09VTlQocmV0 KTsKPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImRwY2Rfc2lua19jb3VudDogJWQgaXQ2 NTA1LT5zaW5rX2NvdW50OiVkIiwKPiArCQkJICAgICBkcGNkX3NpbmtfY291bnQsIGl0NjUwNS0+ c2lua19jb3VudCk7Cj4gKwo+ICsJaWYgKGl0NjUwNS0+YnJhbmNoX2RldmljZSAmJiBkcGNkX3Np bmtfY291bnQgIT0gaXQ2NTA1LT5zaW5rX2NvdW50KSB7Cj4gKwkJbWVtc2V0KGl0NjUwNS0+ZHBj ZCwgMCwgc2l6ZW9mKGl0NjUwNS0+ZHBjZCkpOwo+ICsJCWl0NjUwNS0+c2lua19jb3VudCA9IGRw Y2Rfc2lua19jb3VudDsKPiArCQlrZnJlZShpdDY1MDUtPmVkaWQpOwo+ICsJCWl0NjUwNS0+ZWRp ZCA9IE5VTEw7Cj4gKwkJaXQ2NTA1X3Jlc2V0X2xvZ2ljKGl0NjUwNSk7Cj4gKwkJaXQ2NTA1X2lu dF9tYXNrX2VuYWJsZShpdDY1MDUpOwo+ICsJCWl0NjUwNV9pbml0KGl0NjUwNSk7Cj4gKwkJcmV0 dXJuIDA7Cj4gKwl9Cj4gKwo+ICsJZHBfaXJxX3ZlY3RvciA9IGl0NjUwNV9kcGNkX3JlYWQoaXQ2 NTA1LCBEUF9ERVZJQ0VfU0VSVklDRV9JUlFfVkVDVE9SKTsKPiArCWlmIChkcF9pcnFfdmVjdG9y IDwgMCkKPiArCQlyZXR1cm4gZHBfaXJxX3ZlY3RvcjsKPiArCj4gKwlEUk1fREVWX0RFQlVHX0RS SVZFUihkZXYsICJkcF9pcnFfdmVjdG9yID0gMHglMDJ4IiwgZHBfaXJxX3ZlY3Rvcik7Cj4gKwo+ ICsJaWYgKGRwX2lycV92ZWN0b3IgJiBEUF9DUF9JUlEpIHsKPiArCQlpdDY1MDVfc2V0X2JpdHMo aXQ2NTA1LCBSRUdfSERDUF9UUklHR0VSLCBIRENQX1RSSUdHRVJfQ1BJUlEsCj4gKwkJCQlIRENQ X1RSSUdHRVJfQ1BJUlEpOwo+ICsKPiArCQlic3RhdHVzID0gaXQ2NTA1X2RwY2RfcmVhZChpdDY1 MDUsIERQX0FVWF9IRENQX0JTVEFUVVMpOwo+ICsJCWlmIChic3RhdHVzIDwgMCkKPiArCQkJcmV0 dXJuIGJzdGF0dXM7Cj4gKwo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIkJzdGF0dXMg PSAweCUwMngiLCBic3RhdHVzKTsKPiArCX0KPiArCj4gKwlyZXQgPSBkcm1fZHBfZHBjZF9yZWFk X2xpbmtfc3RhdHVzKCZpdDY1MDUtPmF1eCwgbGlua19zdGF0dXMpOwo+ICsJaWYgKHJldCA8IDAp IHsKPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWwgdG8gcmVhZCBsaW5rIHN0YXR1cyByZXQ6 ICVkIiwKPiArCQkJICAgICAgcmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCURS TV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImxpbmsgc3RhdHVzID0gMHglKnBoIiwKPiArCQkJICAg ICAoaW50KUFSUkFZX1NJWkUobGlua19zdGF0dXMpLCBsaW5rX3N0YXR1cyk7Cj4gKwo+ICsJaWYg KCFkcm1fZHBfY2hhbm5lbF9lcV9vayhsaW5rX3N0YXR1cywgaXQ2NTA1LT5sYW5lX2NvdW50KSkg ewo+ICsJCWl0NjUwNS0+YXV0b190cmFpbl9yZXRyeSA9IEFVVE9fVFJBSU5fUkVUUlk7Cj4gKwkJ aXQ2NTA1X3ZpZGVvX3Jlc2V0KGl0NjUwNSk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9jaGVja19yZWcwNihzdHJ1Y3QgaXQ2NTA1ICppdDY1 MDUsIHVuc2lnbmVkIGludCByZWcwNikKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0 NjUwNS0+Y2xpZW50LT5kZXY7Cj4gKwlib29sIGRhdGE7Cj4gKwo+ICsJaWYgKHJlZzA2ICYgSU5U X0hQRF9DSEFOR0UpIHsKPiArCQlkYXRhID0gaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMoaXQ2 NTA1KTsKPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJocGQgY2hhbmdlIGludGVycnVw dCwgY2hhbmdlIHRvICVzIiwKPiArCQkJCSAgICAgZGF0YSA/ICJoaWdoIiA6ICJsb3ciKTsKPiAr CQlpZiAoaXQ2NTA1LT5jb25uZWN0b3IuZGV2KQo+ICsJCQlkcm1faGVscGVyX2hwZF9pcnFfZXZl bnQoaXQ2NTA1LT5jb25uZWN0b3IuZGV2KTsKPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYs ICJpdDY1MDUtPnNpbmtfY291bnQ6ICVkIiwKPiArCQkJCSAgICAgaXQ2NTA1LT5zaW5rX2NvdW50 KTsKPiArCj4gKwkJaWYgKGRhdGEpIHsKPiArCQkJd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0 KCZpdDY1MDUtPndhaXRfZWRpZF9jb21wbGV0ZSwKPiArCQkJCQkJICAgIG1zZWNzX3RvX2ppZmZp ZXMoNjAwMCkpOwo+ICsJCQlpdDY1MDVfbGFuZV90ZXJtaW5hdGlvbl9vbihpdDY1MDUpOwo+ICsJ CQlpdDY1MDVfbGFuZV9wb3dlcl9vbihpdDY1MDUpOwo+ICsKPiArCQkJLyoKPiArCQkJICogZm9y IHNvbWUgZG9uZ2xlIHdoaWNoIGlzc3VlIEhQRF9pcnEKPiArCQkJICogd2hlbiBzaW5rIGNvdW50 IGNoYW5nZSBmcm9tICAwLT4xCj4gKwkJCSAqIGl0NjUwNSBub3QgYWJsZSB0byByZWNlaXZlIEhQ RF9JUlEKPiArCQkJICogaWYgSFcgbmV2ZXIgZ28gaW50byB0cmFpbmlnIGRvbmUKPiArCQkJICov Cj4gKwo+ICsJCQlpZiAoaXQ2NTA1LT5icmFuY2hfZGV2aWNlICYmIGl0NjUwNS0+c2lua19jb3Vu dCA9PSAwKQo+ICsJCQkJc2NoZWR1bGVfd29yaygmaXQ2NTA1LT5saW5rX3dvcmtzKTsKPiArCj4g KwkJCWlmICghaXQ2NTA1X2dldF92aWRlb19zdGF0dXMoaXQ2NTA1KSkKPiArCQkJCWl0NjUwNV92 aWRlb19yZXNldChpdDY1MDUpOwo+ICsKPiArCQkJaXQ2NTA1X2NhbGNfdmlkZW9faW5mbyhpdDY1 MDUpOwo+ICsJCX0gZWxzZSB7Cj4gKwkJCWtmcmVlKGl0NjUwNS0+ZWRpZCk7Cj4gKwkJCWl0NjUw NS0+ZWRpZCA9IE5VTEw7Cj4gKwkJCW1lbXNldChpdDY1MDUtPmRwY2QsIDAsIHNpemVvZihpdDY1 MDUtPmRwY2QpKTsKPiArCj4gKwkJCWlmIChpdDY1MDUtPmhkY3BfZGVzaXJlZCkKPiArCQkJCWl0 NjUwNV9zdG9wX2hkY3AoaXQ2NTA1KTsKPiArCj4gKwkJCWl0NjUwNV92aWRlb19kaXNhYmxlKGl0 NjUwNSk7Cj4gKwkJCWl0NjUwNV9kaXNhYmxlX2F1ZGlvKGl0NjUwNSk7Cj4gKwkJCWl0NjUwNV9z dG9wX2xpbmtfdHJhaW4oaXQ2NTA1KTsKPiArCQkJaXQ2NTA1X2xhbmVfb2ZmKGl0NjUwNSk7Cj4g KwkJCXJldHVybjsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJaWYgKHJlZzA2ICYgSU5UX1JFQ0VJVkVf SFBEX0lSUSkgewo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImhwZF9pcnEgaW50ZXJy dXB0Iik7Cj4gKwo+ICsJCWlmIChpdDY1MDVfcHJvY2Vzc19ocGRfaXJxKGl0NjUwNSkgPCAwKQo+ ICsJCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJwcm9jZXNzIGhwZF9pcnEgZmFpbCEiKTsK PiArCX0KPiArCj4gKwlpZiAocmVnMDYgJiBJTlRfU0NEVF9DSEFOR0UpIHsKPiArCQlkYXRhID0g aXQ2NTA1X2dldF92aWRlb19zdGF0dXMoaXQ2NTA1KTsKPiArCQlEUk1fREVWX0RFQlVHX0RSSVZF UihkZXYsICJ2aWRlbyBzdGFibGUgY2hhbmdlIGludGVycnVwdCwgJXMiLAo+ICsJCQkJICAgICBk YXRhID8gInN0YWJsZSIgOiAidW5zdGFibGUiKTsKPiArCQlpdDY1MDVfY2FsY192aWRlb19pbmZv KGl0NjUwNSk7Cj4gKwo+ICsJCWlmIChkYXRhKQo+ICsJCQlzY2hlZHVsZV93b3JrKCZpdDY1MDUt Pmxpbmtfd29ya3MpOwo+ICsJfQo+ICsKPiArCWlmIChyZWcwNiAmIElOVF9IRENQX0RPTkUpIHsK PiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJoZGNwIGRvbmUgaW50ZXJydXB0Iik7Cj4g KwkJaXQ2NTA1LT5oZGNwX3N0YXR1cyA9IEhEQ1BfQVVUSF9ET05FOwo+ICsJCWl0NjUwNV9zaG93 X2hkY3BfaW5mbyhpdDY1MDUpOwo+ICsJfQo+ICsKPiArCWlmIChyZWcwNiAmIElOVF9IRENQX0ZB SUwpIHsKPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJoZGNwIGZhaWwgaW50ZXJydXB0 Iik7Cj4gKwkJaXQ2NTA1LT5oZGNwX3N0YXR1cyA9IEhEQ1BfQVVUSF9JRExFOwo+ICsJCWl0NjUw NV9zaG93X2hkY3BfaW5mbyhpdDY1MDUpOwo+ICsJCWl0NjUwNV9zdGFydF9oZGNwKGl0NjUwNSk7 Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGl0NjUwNV9jaGVja19yZWcwNyhzdHJ1Y3Qg aXQ2NTA1ICppdDY1MDUsIHVuc2lnbmVkIGludCByZWcwNykKPiArewo+ICsJc3RydWN0IGRldmlj ZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7Cj4gKwo+ICsJaWYgKHJlZzA3ICYgSU5UX0FV WF9DTURfRkFJTCkKPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJBVVggUEMgUmVxdWVz dCBGYWlsIEludGVycnVwdCIpOwo+ICsKPiArCWlmIChyZWcwNyAmIElOVF9IRENQX0tTVl9DSEVD Sykgewo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIkhEQ1AgZXZlbnQgSW50ZXJydXB0 Iik7Cj4gKwkJc2NoZWR1bGVfd29yaygmaXQ2NTA1LT5oZGNwX3dhaXRfa3N2X2xpc3QpOwo+ICsJ fQo+ICsKPiArCWlmIChyZWcwNyAmIElOVF9BVURJT19GSUZPX0VSUk9SKSB7Cj4gKwkJRFJNX0RF Vl9ERUJVR19EUklWRVIoZGV2LCAiYXVkaW8gZmlmbyBlcnJvciBJbnRlcnJ1cHQiKTsKPiArCj4g KwkJaWYgKGl0NjUwNV9hdWRpb19pbnB1dChpdDY1MDUpKQo+ICsJCQlpdDY1MDVfZW5hYmxlX2F1 ZGlvKGl0NjUwNSk7Cj4gKwl9Cj4gKwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfY2hl Y2tfcmVnMDgoc3RydWN0IGl0NjUwNSAqaXQ2NTA1LCB1bnNpZ25lZCBpbnQgcmVnMDgpCj4gK3sK PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Owo+ICsKPiArCWlm IChyZWcwOCAmIElOVF9MSU5LX1RSQUlOX0ZBSUwpIHsKPiArCQlEUk1fREVWX0RFQlVHX0RSSVZF UihkZXYsICJsaW5rIHRyYWluaW5nIGZhaWwgaW50ZXJydXB0Iik7Cj4gKwkJc2NoZWR1bGVfd29y aygmaXQ2NTA1LT5saW5rX3dvcmtzKTsKPiArCX0KPiArCj4gKwlpZiAocmVnMDggJiBJTlRfVklE X0ZJRk9fRVJST1IpIHsKPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJ2aWRlbyBmaWZv IG92ZXJmbG93IGludGVycnVwdCIpOwo+ICsJCWl0NjUwNS0+YXV0b190cmFpbl9yZXRyeSA9IEFV VE9fVFJBSU5fUkVUUlk7Cj4gKwkJZmx1c2hfd29yaygmaXQ2NTA1LT5saW5rX3dvcmtzKTsKPiAr CQlpdDY1MDVfc3RvcF9oZGNwKGl0NjUwNSk7Cj4gKwkJaXQ2NTA1X3ZpZGVvX3Jlc2V0KGl0NjUw NSk7Cj4gKwl9Cj4gKwo+ICsJaWYgKHJlZzA4ICYgSU5UX0lPX0xBVENIX0ZJRk9fT1ZFUkZMT1cp IHsKPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJJTyBsYXRjaCBmaWZvIG92ZXJmbG93 IGludGVycnVwdCIpOwo+ICsJCWl0NjUwNS0+YXV0b190cmFpbl9yZXRyeSA9IEFVVE9fVFJBSU5f UkVUUlk7Cj4gKwkJZmx1c2hfd29yaygmaXQ2NTA1LT5saW5rX3dvcmtzKTsKPiArCQlpdDY1MDVf c3RvcF9oZGNwKGl0NjUwNSk7Cj4gKwkJaXQ2NTA1X3ZpZGVvX3Jlc2V0KGl0NjUwNSk7Cj4gKwl9 Cj4gK30KPiArCj4gK3N0YXRpYyBpcnFyZXR1cm5fdCBpdDY1MDVfaW50X3RocmVhZGVkX2hhbmRs ZXIoaW50IHVudXNlZCwgdm9pZCAqZGF0YSkKPiArewo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1 ID0gZGF0YTsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Owo+ ICsJaW50IHJlZzA2LCByZWcwNywgcmVnMDg7Cj4gKwo+ICsJbXNsZWVwKDEwMCk7Cj4gKwltdXRl eF9sb2NrKCZpdDY1MDUtPmV4dGNvbl9sb2NrKTsKPiArCj4gKwlpZiAoaXQ2NTA1LT5lbmFibGVf ZHJ2X2hvbGQgfHwgIWl0NjUwNS0+cG93ZXJlZCkKPiArCQlnb3RvIHVubG9jazsKPiArCj4gKwly ZWcwNiA9IGl0NjUwNV9yZWFkKGl0NjUwNSwgSU5UX1NUQVRVU18wMSk7Cj4gKwlyZWcwNyA9IGl0 NjUwNV9yZWFkKGl0NjUwNSwgSU5UX1NUQVRVU18wMik7Cj4gKwlyZWcwOCA9IGl0NjUwNV9yZWFk KGl0NjUwNSwgSU5UX1NUQVRVU18wMyk7Cj4gKwo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5U X1NUQVRVU18wMSwgcmVnMDYpOwo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5UX1NUQVRVU18w MiwgcmVnMDcpOwo+ICsJaXQ2NTA1X3dyaXRlKGl0NjUwNSwgSU5UX1NUQVRVU18wMywgcmVnMDgp Owo+ICsKPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgInJlZzA2ID0gMHglMDJ4IiwgcmVn MDYpOwo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAicmVnMDcgPSAweCUwMngiLCByZWcw Nyk7Cj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJyZWcwOCA9IDB4JTAyeCIsIHJlZzA4 KTsKPiArCWl0NjUwNV9kZWJ1Z19wcmludChpdDY1MDUsIFJFR19TWVNURU1fU1RTLCAiIik7Cj4g Kwo+ICsJaWYgKHJlZzA2ICE9IDApCj4gKwkJaXQ2NTA1X2NoZWNrX3JlZzA2KGl0NjUwNSwgcmVn MDYpOwo+ICsKPiArCWlmIChyZWcwNyAhPSAwKQo+ICsJCWl0NjUwNV9jaGVja19yZWcwNyhpdDY1 MDUsIHJlZzA3KTsKPiArCj4gKwlpZiAocmVnMDggIT0gMCkKPiArCQlpdDY1MDVfY2hlY2tfcmVn MDgoaXQ2NTA1LCByZWcwOCk7Cj4gKwo+ICt1bmxvY2s6Cj4gKwltdXRleF91bmxvY2soJml0NjUw NS0+ZXh0Y29uX2xvY2spOwo+ICsKPiArCXJldHVybiBJUlFfSEFORExFRDsKPiArfQo+ICsKPiAr c3RhdGljIGludCBpdDY1MDVfcG93ZXJvbihzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpCj4gK3sKPiAr CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Owo+ICsJc3RydWN0IGl0 NjUwNV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9ICZpdDY1MDUtPnBkYXRhOwo+ICsJaW50IGVycjsK PiArCj4gKwlpZiAoaXQ2NTA1LT5wb3dlcmVkKSB7Cj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIo ZGV2LCAiaXQ2NTA1IGFscmVhZHkgcG93ZXJlZCBvbiIpOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ ICsKPiArCWlmIChwZGF0YS0+cHdyMTgpIHsKPiArCQllcnIgPSByZWd1bGF0b3JfZW5hYmxlKHBk YXRhLT5wd3IxOCk7Cj4gKwkJaWYgKGVycikgewo+ICsJCQlEUk1fREVWX0RFQlVHX0RSSVZFUihk ZXYsICJGYWlsZWQgdG8gZW5hYmxlIFZERDE4OiAlZCIsCj4gKwkJCQkJICAgICBlcnIpOwo+ICsJ CQlyZXR1cm4gZXJyOwo+ICsJCX0KPiArCX0KPiArCj4gKwlpZiAocGRhdGEtPm92ZGQpIHsKPiAr CQkvKiB0aW1lIGludGVydmFsIGJldHdlZW4gSVZERCBhbmQgT1ZERCBhdCBsZWFzdCBiZSAxbXMg Ki8KPiArCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7Cj4gKwkJZXJyID0gcmVndWxhdG9yX2Vu YWJsZShwZGF0YS0+b3ZkZCk7Cj4gKwkJaWYgKGVycikgewo+ICsJCQlyZWd1bGF0b3JfZGlzYWJs ZShwZGF0YS0+cHdyMTgpOwo+ICsJCQlyZXR1cm4gZXJyOwo+ICsJCX0KPiArCX0KPiArCS8qIHRp bWUgaW50ZXJ2YWwgYmV0d2VlbiBPVkREIGFuZCBTWVNSU1ROIGF0IGxlYXN0IGJlIDEwbXMgKi8K PiArCWlmIChwZGF0YS0+Z3Bpb2RfcmVzZXQpIHsKPiArCQl1c2xlZXBfcmFuZ2UoMTAwMDAsIDIw MDAwKTsKPiArCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAocGRhdGEtPmdwaW9kX3Jlc2V0LCAw KTsKPiArCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7Cj4gKwkJZ3Bpb2Rfc2V0X3ZhbHVlX2Nh bnNsZWVwKHBkYXRhLT5ncGlvZF9yZXNldCwgMSk7Cj4gKwkJdXNsZWVwX3JhbmdlKDEwMDAwLCAy MDAwMCk7Cj4gKwl9Cj4gKwo+ICsJaXQ2NTA1X3Jlc2V0X2xvZ2ljKGl0NjUwNSk7Cj4gKwlpdDY1 MDVfaW50X21hc2tfZW5hYmxlKGl0NjUwNSk7Cj4gKwlpdDY1MDVfaW5pdChpdDY1MDUpOwo+ICsJ aXQ2NTA1X2xhbmVfb2ZmKGl0NjUwNSk7Cj4gKwo+ICsJaXQ2NTA1LT5wb3dlcmVkID0gdHJ1ZTsK PiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBpdDY1MDVfcG93ZXJvZmYo c3RydWN0IGl0NjUwNSAqaXQ2NTA1KQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2 NTA1LT5jbGllbnQtPmRldjsKPiArCXN0cnVjdCBpdDY1MDVfcGxhdGZvcm1fZGF0YSAqcGRhdGEg PSAmaXQ2NTA1LT5wZGF0YTsKPiArCWludCBlcnI7Cj4gKwo+ICsJaWYgKCFpdDY1MDUtPnBvd2Vy ZWQpIHsKPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJwb3dlciBoYWQgYmVlbiBhbHJl YWR5IG9mZiIpOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICsKPiArCWlmIChwZGF0YS0+Z3Bpb2Rf cmVzZXQpCj4gKwkJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHBkYXRhLT5ncGlvZF9yZXNldCwg MCk7Cj4gKwo+ICsJaWYgKHBkYXRhLT5wd3IxOCkgewo+ICsJCWVyciA9IHJlZ3VsYXRvcl9kaXNh YmxlKHBkYXRhLT5wd3IxOCk7Cj4gKwkJaWYgKGVycikKPiArCQkJcmV0dXJuIGVycjsKPiArCX0K PiArCj4gKwlpZiAocGRhdGEtPm92ZGQpIHsKPiArCQllcnIgPSByZWd1bGF0b3JfZGlzYWJsZShw ZGF0YS0+b3ZkZCk7Cj4gKwkJaWYgKGVycikKPiArCQkJcmV0dXJuIGVycjsKPiArCX0KPiArCj4g KwlpdDY1MDUtPnBvd2VyZWQgPSBmYWxzZTsKPiArCWtmcmVlKGl0NjUwNS0+ZWRpZCk7Cj4gKwlp dDY1MDUtPmVkaWQgPSBOVUxMOwo+ICsJaXQ2NTA1LT5zaW5rX2NvdW50ID0gMDsKPiArCj4gKwly ZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgaXQ2NTA1ICpjb25uZWN0 b3JfdG9faXQ2NTA1KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjKQo+ICt7Cj4gKwlyZXR1cm4gY29u dGFpbmVyX29mKGMsIHN0cnVjdCBpdDY1MDUsIGNvbm5lY3Rvcik7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgaXQ2NTA1X2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ ICt7Cj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBjb25uZWN0b3JfdG9faXQ2NTA1KGNvbm5l Y3Rvcik7Cj4gKwlpbnQgZXJyLCBudW1fbW9kZXMgPSAwLCBpOwo+ICsJc3RydWN0IGRldmljZSAq ZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7Cj4gKwo+ICsJaWYgKGl0NjUwNS0+ZWRpZCkKPiAr CQlyZXR1cm4gZHJtX2FkZF9lZGlkX21vZGVzKGNvbm5lY3RvciwgaXQ2NTA1LT5lZGlkKTsKPiAr Cj4gKwltdXRleF9sb2NrKCZpdDY1MDUtPm1vZGVfbG9jayk7Cj4gKwlyZWluaXRfY29tcGxldGlv bigmaXQ2NTA1LT53YWl0X2VkaWRfY29tcGxldGUpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCAz OyBpKyspIHsKPiArCQlpZiAoIWl0NjUwNV9nZXRfc2lua19ocGRfc3RhdHVzKGl0NjUwNSkpCj4g KwkJCWdvdG8gdW5sb2NrOwo+ICsKPiArCQlpdDY1MDUtPmVkaWQgPSBkcm1fZG9fZ2V0X2VkaWQo Jml0NjUwNS0+Y29ubmVjdG9yLAo+ICsJCQkJCSAgICAgICBpdDY1MDVfZ2V0X2VkaWRfYmxvY2ss IGl0NjUwNSk7Cj4gKwo+ICsJCWlmIChpdDY1MDUtPmVkaWQpCj4gKwkJCWJyZWFrOwo+ICsJfQo+ ICsJaWYgKCFpdDY1MDUtPmVkaWQpIHsKPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0 byByZWFkIEVESUQiKTsKPiArCQludW1fbW9kZXMgPSAtRUlPOwo+ICsJCWdvdG8gdW5sb2NrOwo+ ICsJfQo+ICsKPiArCWVyciA9IGRybV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoY29u bmVjdG9yLCBpdDY1MDUtPmVkaWQpOwo+ICsJaWYgKGVycikgewo+ICsJCURSTV9ERVZfRVJST1Io ZGV2LCAiRmFpbGVkIHRvIHVwZGF0ZSBFRElEIHByb3BlcnR5OiAlZCIsIGVycik7Cj4gKwkJbnVt X21vZGVzID0gZXJyOwo+ICsJCWdvdG8gdW5sb2NrOwo+ICsJfQo+ICsKPiArCW51bV9tb2RlcyA9 IGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0b3IsIGl0NjUwNS0+ZWRpZCk7Cj4gKwo+ICt1bmxv Y2s6Cj4gKwljb21wbGV0ZSgmaXQ2NTA1LT53YWl0X2VkaWRfY29tcGxldGUpOwo+ICsJbXV0ZXhf dW5sb2NrKCZpdDY1MDUtPm1vZGVfbG9jayk7Cj4gKwo+ICsJcmV0dXJuIG51bV9tb2RlczsKPiAr fQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyBp dDY1MDVfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKPiArCS5nZXRfbW9kZXMgPSBpdDY1MDVf Z2V0X21vZGVzLAo+ICt9Owo+ICsKPiArc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMg aXQ2NTA1X2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ICsJCQkJCSAg ICAgICBib29sIGZvcmNlKQo+ICt7Cj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBjb25uZWN0 b3JfdG9faXQ2NTA1KGNvbm5lY3Rvcik7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaXQ2NTA1 LT5jbGllbnQtPmRldjsKPiArCWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgc3RhdHVzID0gY29u bmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7Cj4gKwo+ICsJRFJNX0RFVl9ERUJVR19EUklWRVIo ZGV2LCAiaXQ2NTA1LT5zaW5rX2NvdW50OiVkIHBvd2VyZWQ6JWQiLAo+ICsJCQkgICAgIGl0NjUw NS0+c2lua19jb3VudCwgaXQ2NTA1LT5wb3dlcmVkKTsKPiArCj4gKwltdXRleF9sb2NrKCZpdDY1 MDUtPm1vZGVfbG9jayk7Cj4gKwo+ICsJaWYgKCFpdDY1MDUtPnBvd2VyZWQpCj4gKwkJZ290byB1 bmxvY2s7Cj4gKwo+ICsJaWYgKGl0NjUwNS0+ZW5hYmxlX2Rydl9ob2xkKSB7Cj4gKwkJc3RhdHVz ID0gaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMoaXQ2NTA1KSA/Cj4gKwkJCQkJY29ubmVjdG9y X3N0YXR1c19jb25uZWN0ZWQgOgo+ICsJCQkJCWNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVk Owo+ICsJCWdvdG8gdW5sb2NrOwo+ICsJfQo+ICsKPiArCWlmIChpdDY1MDVfZ2V0X3NpbmtfaHBk X3N0YXR1cyhpdDY1MDUpKSB7Cj4gKwkJaXQ2NTA1X2F1eF9vbihpdDY1MDUpOwo+ICsJCWl0NjUw NV9kcm1fZHBfbGlua19wcm9iZSgmaXQ2NTA1LT5hdXgsICZpdDY1MDUtPmxpbmspOwo+ICsJCWl0 NjUwNV9kcm1fZHBfbGlua19wb3dlcl91cCgmaXQ2NTA1LT5hdXgsICZpdDY1MDUtPmxpbmspOwo+ ICsJCWl0NjUwNS0+YXV0b190cmFpbl9yZXRyeSA9IEFVVE9fVFJBSU5fUkVUUlk7Cj4gKwo+ICsJ CWlmIChpdDY1MDUtPmRwY2RbMF0gPT0gMCkgewo+ICsJCQlpdDY1MDVfZ2V0X2RwY2QoaXQ2NTA1 LCBEUF9EUENEX1JFViwgaXQ2NTA1LT5kcGNkLAo+ICsJCQkJCUFSUkFZX1NJWkUoaXQ2NTA1LT5k cGNkKSk7Cj4gKwkJCWl0NjUwNV92YXJpYWJsZV9jb25maWcoaXQ2NTA1KTsKPiArCQkJaXQ2NTA1 X3BhcnNlX2xpbmtfY2FwYWJpbGl0aWVzKGl0NjUwNSk7Cj4gKwkJfQo+ICsKPiArCQlpdDY1MDUt PnNpbmtfY291bnQgPSBEUF9HRVRfU0lOS19DT1VOVChpdDY1MDVfZHBjZF9yZWFkKGl0NjUwNSwK PiArCQkJCQkJICAgICAgIERQX1NJTktfQ09VTlQpKTsKPiArCQlEUk1fREVWX0RFQlVHX0RSSVZF UihkZXYsICJpdDY1MDUtPnNpbmtfY291bnQ6JWQgYnJhbmNoOiVkIiwKPiArCQkJCSAgICAgaXQ2 NTA1LT5zaW5rX2NvdW50LCBpdDY1MDUtPmJyYW5jaF9kZXZpY2UpOwo+ICsKPiArCQlpZiAoaXQ2 NTA1LT5icmFuY2hfZGV2aWNlKSB7Cj4gKwkJCXN0YXR1cyA9IChpdDY1MDUtPnNpbmtfY291bnQg IT0gMCkgPwo+ICsJCQkJIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkIDoKPiArCQkJCSBjb25u ZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKPiArCQl9IGVsc2Ugewo+ICsJCQlzdGF0dXMgPSBj b25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKPiArCQl9Cj4gKwl9IGVsc2Ugewo+ICsJCWl0NjUw NS0+c2lua19jb3VudCA9IDA7Cj4gKwkJbWVtc2V0KGl0NjUwNS0+ZHBjZCwgMCwgc2l6ZW9mKGl0 NjUwNS0+ZHBjZCkpOwo+ICsJfQo+ICsKPiArdW5sb2NrOgo+ICsJaWYgKGl0NjUwNS0+Y29ubmVj dG9yX3N0YXR1cyAhPSBzdGF0dXMpIHsKPiArCQlpdDY1MDUtPmNvbm5lY3Rvcl9zdGF0dXMgPSBz dGF0dXM7Cj4gKwkJaXQ2NTA1X3BsdWdnZWRfc3RhdHVzX3RvX2NvZGVjKGl0NjUwNSk7Cj4gKwl9 Cj4gKwo+ICsJbXV0ZXhfdW5sb2NrKCZpdDY1MDUtPm1vZGVfbG9jayk7Cj4gKwo+ICsJcmV0dXJu IHN0YXR1czsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1 bmNzIGl0NjUwNV9jb25uZWN0b3JfZnVuY3MgPSB7Cj4gKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxw ZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKPiArCS5kZXRlY3QgPSBpdDY1MDVfZGV0 ZWN0LAo+ICsJLmRlc3Ryb3kgPSBkcm1fY29ubmVjdG9yX2NsZWFudXAsCj4gKwkucmVzZXQgPSBk cm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQsCj4gKwkuYXRvbWljX2R1cGxpY2F0ZV9z dGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCj4gKwku YXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJv eV9zdGF0ZSwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgaXQ2NTA1X2V4dGNvbl9ub3RpZmllcihz dHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCj4gKwkJCQkgIHVuc2lnbmVkIGxvbmcgZXZlbnQs IHZvaWQgKnB0cikKPiArewo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gY29udGFpbmVyX29m KHNlbGYsIHN0cnVjdCBpdDY1MDUsIGV2ZW50X25iKTsKPiArCj4gKwlzY2hlZHVsZV93b3JrKCZp dDY1MDUtPmV4dGNvbl93cSk7Cj4gKwlyZXR1cm4gTk9USUZZX0RPTkU7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIGl0NjUwNV9leHRjb25fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4g K3sKPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qg aXQ2NTA1LCBleHRjb25fd3EpOwo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0NjUwNS0+Y2xp ZW50LT5kZXY7Cj4gKwlpbnQgc3RhdGUgPSBleHRjb25fZ2V0X3N0YXRlKGl0NjUwNS0+ZXh0Y29u LCBFWFRDT05fRElTUF9EUCk7Cj4gKwl1bnNpZ25lZCBpbnQgcHdyb2ZmcmV0cnkgPSAwOwo+ICsK PiArCWlmIChpdDY1MDUtPmVuYWJsZV9kcnZfaG9sZCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJbXV0 ZXhfbG9jaygmaXQ2NTA1LT5leHRjb25fbG9jayk7Cj4gKwo+ICsJRFJNX0RFVl9ERUJVR19EUklW RVIoZGV2LCAiRVhUQ09OX0RJU1BfRFAgPSAweCUwMngiLCBzdGF0ZSk7Cj4gKwlpZiAoc3RhdGUg PiAwKSB7Cj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAic3RhcnQgdG8gcG93ZXIgb24i KTsKPiArCQltc2xlZXAoMTAwKTsKPiArCQlpdDY1MDVfcG93ZXJvbihpdDY1MDUpOwo+ICsJfSBl bHNlIHsKPiArCQlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJzdGFydCB0byBwb3dlciBvZmYi KTsKPiArCQl3aGlsZSAoaXQ2NTA1X3Bvd2Vyb2ZmKGl0NjUwNSkgJiYgcHdyb2ZmcmV0cnkrKyA8 IDUpIHsKPiArCQkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAicG93ZXIgb2ZmIGZhaWwgJWQg dGltZXMiLAo+ICsJCQkJCSAgICAgcHdyb2ZmcmV0cnkpOwo+ICsJCX0KPiArCj4gKwkJZHJtX2hl bHBlcl9ocGRfaXJxX2V2ZW50KGl0NjUwNS0+Y29ubmVjdG9yLmRldik7Cj4gKwkJbWVtc2V0KGl0 NjUwNS0+ZHBjZCwgMCwgc2l6ZW9mKGl0NjUwNS0+ZHBjZCkpOwo+ICsJCURSTV9ERVZfREVCVUdf RFJJVkVSKGRldiwgInBvd2VyIG9mZiBpdDY1MDUgc3VjY2VzcyEiKTsKPiArCX0KPiArCj4gKwlt dXRleF91bmxvY2soJml0NjUwNS0+ZXh0Y29uX2xvY2spOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IGl0NjUwNV91c2Vfbm90aWZpZXJfbW9kdWxlKHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKPiArewo+ ICsJaW50IHJldDsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2 Owo+ICsKPiArCWl0NjUwNS0+ZXZlbnRfbmIubm90aWZpZXJfY2FsbCA9IGl0NjUwNV9leHRjb25f bm90aWZpZXI7Cj4gKwlJTklUX1dPUksoJml0NjUwNS0+ZXh0Y29uX3dxLCBpdDY1MDVfZXh0Y29u X3dvcmspOwo+ICsJcmV0ID0gZGV2bV9leHRjb25fcmVnaXN0ZXJfbm90aWZpZXIoJml0NjUwNS0+ Y2xpZW50LT5kZXYsCj4gKwkJCQkJICAgIGl0NjUwNS0+ZXh0Y29uLCBFWFRDT05fRElTUF9EUCwK PiArCQkJCQkgICAgJml0NjUwNS0+ZXZlbnRfbmIpOwo+ICsJaWYgKHJldCkgewo+ICsJCURSTV9E RVZfRVJST1IoZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIG5vdGlmaWVyIGZvciBEUCIpOwo+ICsJ CXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJc2NoZWR1bGVfd29yaygmaXQ2NTA1LT5leHRjb25f d3EpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfcmVt b3ZlX25vdGlmaWVyX21vZHVsZShzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUpCj4gK3sKPiArCWlmIChp dDY1MDUtPmV4dGNvbikgewo+ICsJCWRldm1fZXh0Y29uX3VucmVnaXN0ZXJfbm90aWZpZXIoJml0 NjUwNS0+Y2xpZW50LT5kZXYsCj4gKwkJCQkJCWl0NjUwNS0+ZXh0Y29uLAlFWFRDT05fRElTUF9E UCwKPiArCQkJCQkJJml0NjUwNS0+ZXZlbnRfbmIpOwo+ICsKPiArCQlmbHVzaF93b3JrKCZpdDY1 MDUtPmV4dGNvbl93cSk7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIF9fbWF5YmVfdW51 c2VkIGl0NjUwNV9kZWxheWVkX2F1ZGlvKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiArewo+ ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpdDY1 MDUsCj4gKwkJCQkJICAgICBkZWxheWVkX2F1ZGlvLndvcmspOwo+ICsKPiArCURSTV9ERVZfREVC VUdfRFJJVkVSKCZpdDY1MDUtPmNsaWVudC0+ZGV2LCAic3RhcnQiKTsKPiArCj4gKwlpZiAoIWl0 NjUwNS0+cG93ZXJlZCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJaWYgKCFpdDY1MDUtPmVuYWJsZV9k cnZfaG9sZCkKPiArCQlpdDY1MDVfZW5hYmxlX2F1ZGlvKGl0NjUwNSk7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgX19tYXliZV91bnVzZWQgaXQ2NTA1X2F1ZGlvX3NldHVwX2h3X3BhcmFtcyhzdHJ1 Y3QgaXQ2NTA1ICppdDY1MDUsCj4gKwkJCQkJc3RydWN0IGhkbWlfY29kZWNfcGFyYW1zICpwYXJh bXMpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Owo+ ICsJaW50IGkgPSAwOwo+ICsKPiArCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIiVzICVkIEh6 LCAlZCBiaXQsICVkIGNoYW5uZWxzXG4iLCBfX2Z1bmNfXywKPiArCQkJICAgICBwYXJhbXMtPnNh bXBsZV9yYXRlLCBwYXJhbXMtPnNhbXBsZV93aWR0aCwKPiArCQkJICAgICBwYXJhbXMtPmNlYS5j aGFubmVscyk7Cj4gKwo+ICsJaWYgKCFpdDY1MDUtPmJyaWRnZS5lbmNvZGVyKQo+ICsJCXJldHVy biAtRU5PREVWOwo+ICsKPiArCWlmIChwYXJhbXMtPmNlYS5jaGFubmVscyA8PSAxIHx8IHBhcmFt cy0+Y2VhLmNoYW5uZWxzID4gOCkgewo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgImNo YW5uZWwgbnVtYmVyOiAlZCBub3Qgc3VwcG9ydCIsCj4gKwkJCQkgICAgIGl0NjUwNS0+YXVkaW8u Y2hhbm5lbF9jb3VudCk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJaXQ2NTA1 LT5hdWRpby5jaGFubmVsX2NvdW50ID0gcGFyYW1zLT5jZWEuY2hhbm5lbHM7Cj4gKwo+ICsJd2hp bGUgKGkgPCBBUlJBWV9TSVpFKGF1ZGlvX3NhbXBsZV9yYXRlX21hcCkgJiYKPiArCSAgICAgICBw YXJhbXMtPnNhbXBsZV9yYXRlICE9Cj4gKwkJICAgICAgIGF1ZGlvX3NhbXBsZV9yYXRlX21hcFtp XS5zYW1wbGVfcmF0ZV92YWx1ZSkgewo+ICsJCWkrKzsKPiArCX0KPiArCWlmIChpID09IEFSUkFZ X1NJWkUoYXVkaW9fc2FtcGxlX3JhdGVfbWFwKSkgewo+ICsJCURSTV9ERVZfREVCVUdfRFJJVkVS KGRldiwgInNhbXBsZSByYXRlOiAlZCBIeiBub3Qgc3VwcG9ydCIsCj4gKwkJCQkgICAgIHBhcmFt cy0+c2FtcGxlX3JhdGUpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsJaXQ2NTA1LT5h dWRpby5zYW1wbGVfcmF0ZSA9IGF1ZGlvX3NhbXBsZV9yYXRlX21hcFtpXS5yYXRlOwo+ICsKPiAr CXN3aXRjaCAocGFyYW1zLT5zYW1wbGVfd2lkdGgpIHsKPiArCWNhc2UgMTY6Cj4gKwkJaXQ2NTA1 LT5hdWRpby53b3JkX2xlbmd0aCA9IFdPUkRfTEVOR1RIXzE2QklUOwo+ICsJCWJyZWFrOwo+ICsJ Y2FzZSAxODoKPiArCQlpdDY1MDUtPmF1ZGlvLndvcmRfbGVuZ3RoID0gV09SRF9MRU5HVEhfMThC SVQ7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDIwOgo+ICsJCWl0NjUwNS0+YXVkaW8ud29yZF9sZW5n dGggPSBXT1JEX0xFTkdUSF8yMEJJVDsKPiArCQlicmVhazsKPiArCWNhc2UgMjQ6Cj4gKwljYXNl IDMyOgo+ICsJCWl0NjUwNS0+YXVkaW8ud29yZF9sZW5ndGggPSBXT1JEX0xFTkdUSF8yNEJJVDsK PiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAi d29yZGxlbmd0aDogJWQgYml0IG5vdCBzdXBwb3J0IiwKPiArCQkJCSAgICAgcGFyYW1zLT5zYW1w bGVfd2lkdGgpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBfX21heWJlX3VudXNlZCBpdDY1MDVfYXVkaW9fc2h1dGRv d24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgaXQ2NTA1 ICppdDY1MDUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiArCj4gKwlpZiAoaXQ2NTA1LT5wb3dl cmVkKQo+ICsJCWl0NjUwNV9kaXNhYmxlX2F1ZGlvKGl0NjUwNSk7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgX19tYXliZV91bnVzZWQgaXQ2NTA1X2F1ZGlvX2hvb2tfcGx1Z2dlZF9jYihzdHJ1Y3Qg ZGV2aWNlICpkZXYsCj4gKwkJCQkJCSAgICAgICB2b2lkICpkYXRhLAo+ICsJCQkJCQkgICAgICAg aGRtaV9jb2RlY19wbHVnZ2VkX2NiIGZuLAo+ICsJCQkJCQkgICAgICAgc3RydWN0IGRldmljZSAq Y29kZWNfZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBkYXRhOwo+ICsKPiAr CWl0NjUwNS0+cGx1Z2dlZF9jYiA9IGZuOwo+ICsJaXQ2NTA1LT5jb2RlY19kZXYgPSBjb2RlY19k ZXY7Cj4gKwlpdDY1MDVfcGx1Z2dlZF9zdGF0dXNfdG9fY29kZWMoaXQ2NTA1KTsKPiArCj4gKwly ZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgaXQ2NTA1ICpicmlkZ2Vf dG9faXQ2NTA1KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCj4gK3sKPiArCXJldHVybiBjb250 YWluZXJfb2YoYnJpZGdlLCBzdHJ1Y3QgaXQ2NTA1LCBicmlkZ2UpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBpdDY1MDVfYnJpZGdlX21vZGVfc2V0KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2Us Cj4gKwkJCQkgICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKPiArCQkJCSAg IGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQo+ICt7Cj4gKwlz dHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBicmlkZ2VfdG9faXQ2NTA1KGJyaWRnZSk7Cj4gKwlzdHJ1 Y3QgaGRtaV9hdmlfaW5mb2ZyYW1lIGZyYW1lOwo+ICsJaW50IGVycjsKPiArCXN0cnVjdCBkZXZp Y2UgKmRldiA9ICZpdDY1MDUtPmNsaWVudC0+ZGV2Owo+ICsKPiArCWlmIChXQVJOX09OKCFpdDY1 MDUtPnBvd2VyZWQpKQo+ICsJCXJldHVybjsKPiArCj4gKwltdXRleF9sb2NrKCZpdDY1MDUtPm1v ZGVfbG9jayk7Cj4gKwo+ICsJZXJyID0gZHJtX2hkbWlfYXZpX2luZm9mcmFtZV9mcm9tX2Rpc3Bs YXlfbW9kZSgmZnJhbWUsCj4gKwkJCQkJCSAgICAgICAmaXQ2NTA1LT5jb25uZWN0b3IsCj4gKwkJ CQkJCSAgICAgICBhZGp1c3RlZF9tb2RlKTsKPiArCWlmIChlcnIpIHsKPiArCQlEUk1fREVWX0VS Uk9SKGRldiwgIkZhaWxlZCB0byBzZXR1cCBBVkkgaW5mb2ZyYW1lOiAlZCIsIGVycik7Cj4gKwkJ Z290byB1bmxvY2s7Cj4gKwl9Cj4gKwo+ICsJaXQ2NTA1X3VwZGF0ZV92aWRlb19wYXJhbWV0ZXIo aXQ2NTA1LCBhZGp1c3RlZF9tb2RlKTsKPiArCj4gKwllcnIgPSBpdDY1MDVfc2VuZF92aWRlb19p bmZvZnJhbWUoaXQ2NTA1LCAmZnJhbWUpOwo+ICsJaWYgKGVycikKPiArCQlEUk1fREVWX0VSUk9S KGRldiwgIkZhaWxlZCB0byBzZW5kIEFWSSBpbmZvZnJhbWU6ICVkIiwgZXJyKTsKPiArCj4gK3Vu bG9jazoKPiArCW11dGV4X3VubG9jaygmaXQ2NTA1LT5tb2RlX2xvY2spOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IGl0NjUwNV9icmlkZ2VfYXR0YWNoKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2Us Cj4gKwkJCQllbnVtIGRybV9icmlkZ2VfYXR0YWNoX2ZsYWdzIGZsYWdzKQo+ICt7Cj4gKwlzdHJ1 Y3QgaXQ2NTA1ICppdDY1MDUgPSBicmlkZ2VfdG9faXQ2NTA1KGJyaWRnZSk7Cj4gKwlzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSAmaXQ2NTA1LT5jbGllbnQtPmRldjsKPiArCWludCBlcnI7Cj4gKwo+ICsJ aWYgKGZsYWdzICYgRFJNX0JSSURHRV9BVFRBQ0hfTk9fQ09OTkVDVE9SKSB7Cj4gKwkJRFJNX0VS Uk9SKCJGaXggYnJpZGdlIGRyaXZlciB0byBtYWtlIGNvbm5lY3RvciBvcHRpb25hbCEiKTsKPiAr CQlyZXR1cm4gMDsKPiArCX0KPiArCj4gKwlpZiAoIWJyaWRnZS0+ZW5jb2Rlcikgewo+ICsJCURS TV9ERVZfRVJST1IoZGV2LCAiUGFyZW50IGVuY29kZXIgb2JqZWN0IG5vdCBmb3VuZCIpOwo+ICsJ CXJldHVybiAtRU5PREVWOwo+ICsJfQo+ICsKPiArCWVyciA9IGRybV9jb25uZWN0b3JfaW5pdChi cmlkZ2UtPmRldiwgJml0NjUwNS0+Y29ubmVjdG9yLAo+ICsJCQkJICZpdDY1MDVfY29ubmVjdG9y X2Z1bmNzLAo+ICsJCQkJIERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCk7Cj4gKwlpZiAo ZXJyIDwgMCkgewo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUg Y29ubmVjdG9yOiAlZCIsIGVycik7Cj4gKwkJcmV0dXJuIGVycjsKPiArCX0KPiArCj4gKwlkcm1f Y29ubmVjdG9yX2hlbHBlcl9hZGQoJml0NjUwNS0+Y29ubmVjdG9yLAo+ICsJCQkJICZpdDY1MDVf Y29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7Cj4gKwo+ICsJaXQ2NTA1LT5jb25uZWN0b3IucG9sbGVk ID0gRFJNX0NPTk5FQ1RPUl9QT0xMX0hQRDsKPiArCj4gKwllcnIgPSBkcm1fY29ubmVjdG9yX2F0 dGFjaF9lbmNvZGVyKCZpdDY1MDUtPmNvbm5lY3RvciwgYnJpZGdlLT5lbmNvZGVyKTsKPiArCWlm IChlcnIgPCAwKSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gbGluayB1cCBj b25uZWN0b3IgdG8gZW5jb2RlcjogJWQiLAo+ICsJCQkgICAgICBlcnIpOwo+ICsJCWdvdG8gY2xl YW51cF9jb25uZWN0b3I7Cj4gKwl9Cj4gKwo+ICsJZXJyID0gZHJtX2Nvbm5lY3Rvcl9yZWdpc3Rl cigmaXQ2NTA1LT5jb25uZWN0b3IpOwo+ICsJaWYgKGVyciA8IDApIHsKPiArCQlEUk1fREVWX0VS Uk9SKGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb25uZWN0b3I6ICVkIiwgZXJyKTsKPiArCQln b3RvIGNsZWFudXBfY29ubmVjdG9yOwo+ICsJfQo+ICsKPiArCWlmIChpdDY1MDUtPmV4dGNvbikg ewo+ICsJCWVyciA9IGl0NjUwNV91c2Vfbm90aWZpZXJfbW9kdWxlKGl0NjUwNSk7Cj4gKwkJaWYg KGVyciA8IDApIHsKPiArCQkJZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKCZpdDY1MDUtPmNvbm5l Y3Rvcik7Cj4gKwkJCWdvdG8gY2xlYW51cF9jb25uZWN0b3I7Cj4gKwkJfQo+ICsJfQo+ICsKPiAr CXJldHVybiAwOwo+ICsKPiArY2xlYW51cF9jb25uZWN0b3I6Cj4gKwlkcm1fY29ubmVjdG9yX2Ns ZWFudXAoJml0NjUwNS0+Y29ubmVjdG9yKTsKPiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIGl0NjUwNV9icmlkZ2VfZGV0YWNoKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2Up Cj4gK3sKPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGJyaWRnZV90b19pdDY1MDUoYnJpZGdl KTsKPiArCj4gKwlmbHVzaF93b3JrKCZpdDY1MDUtPmxpbmtfd29ya3MpOwo+ICsJaXQ2NTA1X3Jl bW92ZV9ub3RpZmllcl9tb2R1bGUoaXQ2NTA1KTsKPiArCWRybV9jb25uZWN0b3JfdW5yZWdpc3Rl cigmaXQ2NTA1LT5jb25uZWN0b3IpOwo+ICsJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKCZpdDY1MDUt PmNvbm5lY3Rvcik7Cj4gK30KPiArCj4gK3N0YXRpYyBlbnVtIGRybV9tb2RlX3N0YXR1cwo+ICtp dDY1MDVfYnJpZGdlX21vZGVfdmFsaWQoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKPiArCQkJ IGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9pbmZvICppbmZvLAo+ICsJCQkgY29uc3Qgc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCj4gK3sKPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9 IGJyaWRnZV90b19pdDY1MDUoYnJpZGdlKTsKPiArCj4gKwlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1f TU9ERV9GTEFHX0lOVEVSTEFDRSkKPiArCQlyZXR1cm4gTU9ERV9OT19JTlRFUkxBQ0U7Cj4gKwo+ ICsJaWYgKG1vZGUtPmNsb2NrID4gRFBJX1BJWEVMX0NMS19NQVgpCj4gKwkJcmV0dXJuIE1PREVf Q0xPQ0tfSElHSDsKPiArCj4gKwlpdDY1MDUtPnZpZGVvX2luZm8uY2xvY2sgPSBtb2RlLT5jbG9j azsKPiArCj4gKwlyZXR1cm4gTU9ERV9PSzsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaXQ2NTA1 X2JyaWRnZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPiArewo+ICsJc3RydWN0 IGl0NjUwNSAqaXQ2NTA1ID0gYnJpZGdlX3RvX2l0NjUwNShicmlkZ2UpOwo+ICsKPiArCWl0NjUw NV9pbnRfbWFza19lbmFibGUoaXQ2NTA1KTsKPiArCWl0NjUwNV92aWRlb19yZXNldChpdDY1MDUp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpdDY1MDVfYnJpZGdlX2Rpc2FibGUoc3RydWN0IGRy bV9icmlkZ2UgKmJyaWRnZSkKPiArewo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gYnJpZGdl X3RvX2l0NjUwNShicmlkZ2UpOwo+ICsKPiArCWlmIChpdDY1MDUtPnBvd2VyZWQpCj4gKwkJaXQ2 NTA1X3ZpZGVvX2Rpc2FibGUoaXQ2NTA1KTsKPiArfQo+ICsKPiArc3RhdGljIGVudW0gZHJtX2Nv bm5lY3Rvcl9zdGF0dXMKPiAraXQ2NTA1X2JyaWRnZV9kZXRlY3Qoc3RydWN0IGRybV9icmlkZ2Ug KmJyaWRnZSkKPiArewo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gYnJpZGdlX3RvX2l0NjUw NShicmlkZ2UpOwo+ICsKPiArCXJldHVybiBpdDY1MDVfZGV0ZWN0KCZpdDY1MDUtPmNvbm5lY3Rv ciwgMCk7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZWRpZCAqaXQ2NTA1X2JyaWRnZV9nZXRf ZWRpZChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+ICsJCQkJCSAgIHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IpCj4gK3sKPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGJyaWRn ZV90b19pdDY1MDUoYnJpZGdlKTsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpdDY1MDUtPmNs aWVudC0+ZGV2Owo+ICsJc3RydWN0IGVkaWQgKmVkaWQ7Cj4gKwo+ICsJZWRpZCA9IGRybV9kb19n ZXRfZWRpZCgmaXQ2NTA1LT5jb25uZWN0b3IsIGl0NjUwNV9nZXRfZWRpZF9ibG9jaywKPiArCQkJ ICAgICAgIGl0NjUwNSk7Cj4gKwo+ICsJaWYgKCFlZGlkKSB7Cj4gKwkJRFJNX0RFVl9ERUJVR19E UklWRVIoZGV2LCAiZmFpbGVkIHRvIGdldCBlZGlkISIpOwo+ICsJCXJldHVybiBOVUxMOwo+ICsJ fQo+ICsKPiArCXJldHVybiBlZGlkOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRy bV9icmlkZ2VfZnVuY3MgaXQ2NTA1X2JyaWRnZV9mdW5jcyA9IHsKPiArCS5hdHRhY2ggPSBpdDY1 MDVfYnJpZGdlX2F0dGFjaCwKPiArCS5kZXRhY2ggPSBpdDY1MDVfYnJpZGdlX2RldGFjaCwKPiAr CS5tb2RlX3ZhbGlkID0gaXQ2NTA1X2JyaWRnZV9tb2RlX3ZhbGlkLAo+ICsJLm1vZGVfc2V0ID0g aXQ2NTA1X2JyaWRnZV9tb2RlX3NldCwKPiArCS5lbmFibGUgPSBpdDY1MDVfYnJpZGdlX2VuYWJs ZSwKPiArCS5kaXNhYmxlID0gaXQ2NTA1X2JyaWRnZV9kaXNhYmxlLAo+ICsJLmRldGVjdCA9IGl0 NjUwNV9icmlkZ2VfZGV0ZWN0LAo+ICsJLmdldF9lZGlkID0gaXQ2NTA1X2JyaWRnZV9nZXRfZWRp ZCwKPiArfTsKPiArCj4gKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKPiArCj4gK3N0YXRpYyBpbnQg aXQ2NTA1X2JyaWRnZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3Qg aXQ2NTA1ICppdDY1MDUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiArCj4gKwlyZXR1cm4gaXQ2 NTA1X3Bvd2Vyb24oaXQ2NTA1KTsKPiArfQo+ICsKPiArc3RhdGljIGludCBpdDY1MDVfYnJpZGdl X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1 MDUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiArCj4gKwlyZXR1cm4gaXQ2NTA1X3Bvd2Vyb2Zm KGl0NjUwNSk7Cj4gK30KPiArCj4gK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhpdDY1MDVfYnJp ZGdlX3BtX29wcywgaXQ2NTA1X2JyaWRnZV9zdXNwZW5kLAo+ICsJCQkgaXQ2NTA1X2JyaWRnZV9y ZXN1bWUpOwo+ICsKPiArI2VuZGlmCj4gKwo+ICtzdGF0aWMgaW50IGl0NjUwNV9pbml0X3BkYXRh KHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKPiArewo+ICsJc3RydWN0IGl0NjUwNV9wbGF0Zm9ybV9k YXRhICpwZGF0YSA9ICZpdDY1MDUtPnBkYXRhOwo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJml0 NjUwNS0+Y2xpZW50LT5kZXY7Cj4gKwo+ICsJLyogMS4wViBkaWdpdGFsIGNvcmUgcG93ZXIgcmVn dWxhdG9yICAqLwo+ICsJcGRhdGEtPnB3cjE4ID0gZGV2bV9yZWd1bGF0b3JfZ2V0KGRldiwgInB3 cjE4Iik7Cj4gKwlpZiAoSVNfRVJSKHBkYXRhLT5wd3IxOCkpIHsKPiArCQlEUk1fREVWX0VSUk9S KGRldiwgInB3cjE4IHJlZ3VsYXRvciBub3QgZm91bmQiKTsKPiArCQlyZXR1cm4gUFRSX0VSUihw ZGF0YS0+cHdyMTgpOwo+ICsJfQo+ICsKPiArCXBkYXRhLT5vdmRkID0gZGV2bV9yZWd1bGF0b3Jf Z2V0KGRldiwgIm92ZGQiKTsKPiArCWlmIChJU19FUlIocGRhdGEtPm92ZGQpKSB7Cj4gKwkJRFJN X0RFVl9FUlJPUihkZXYsICJvdmRkIHJlZ3VsYXRvciBub3QgZm91bmQiKTsKPiArCQlyZXR1cm4g UFRSX0VSUihwZGF0YS0+b3ZkZCk7Cj4gKwl9Cj4gKwo+ICsJcGRhdGEtPmdwaW9kX3Jlc2V0ID0g ZGV2bV9ncGlvZF9nZXQoZGV2LCAicmVzZXQiLCBHUElPRF9PVVRfSElHSCk7Cj4gKwlpZiAoSVNf RVJSKHBkYXRhLT5ncGlvZF9yZXNldCkpIHsKPiArCQlEUk1fREVWX0VSUk9SKGRldiwgImdwaW9k X3Jlc2V0IGdwaW8gbm90IGZvdW5kIik7Cj4gKwkJcmV0dXJuIFBUUl9FUlIocGRhdGEtPmdwaW9k X3Jlc2V0KTsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQg aXQ2NTA1X3BhcnNlX2R0KHN0cnVjdCBpdDY1MDUgKml0NjUwNSkKPiArewo+ICsJc3RydWN0IGRl dmljZSAqZGV2ID0gJml0NjUwNS0+Y2xpZW50LT5kZXY7Cj4gKwl1MzIgKmFmZV9zZXR0aW5nID0g Jml0NjUwNS0+YWZlX3NldHRpbmc7Cj4gKwo+ICsJaXQ2NTA1LT5sYW5lX3N3YXBfZGlzYWJsZWQg PQo+ICsJCWRldmljZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZGV2LCAibm8tbGFuZXN3YXAiKTsKPiAr Cj4gKwlpZiAoaXQ2NTA1LT5sYW5lX3N3YXBfZGlzYWJsZWQpCj4gKwkJaXQ2NTA1LT5sYW5lX3N3 YXAgPSBmYWxzZTsKPiArCj4gKwlpZiAoZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgImFm ZS1zZXR0aW5nIiwgYWZlX3NldHRpbmcpID09IDApIHsKPiArCQlpZiAoKmFmZV9zZXR0aW5nID49 IEFSUkFZX1NJWkUoYWZlX3NldHRpbmdfdGFibGUpKSB7Cj4gKwkJCURSTV9ERVZfRVJST1IoZGV2 LCAiYWZlIHNldHRpbmcgZXJyb3IsIHVzZSBkZWZhdWx0Iik7Cj4gKwkJCSphZmVfc2V0dGluZyA9 IDA7Cj4gKwkJfQo+ICsJfSBlbHNlIHsKPiArCQkqYWZlX3NldHRpbmcgPSAwOwo+ICsJfQo+ICsJ RFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAidXNpbmcgYWZlX3NldHRpbmc6ICVkIiwgKmFmZV9z ZXR0aW5nKTsKPiArfQo+ICsKPiArc3RhdGljIHNzaXplX3QgcHJpbnRfdGltaW5nX3Nob3coc3Ry dWN0IGRldmljZSAqZGV2LAo+ICsJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBj aGFyICpidWYpCj4gK3sKPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNSA9IGRldl9nZXRfZHJ2ZGF0 YShkZXYpOwo+ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKnZpZCA9ICZpdDY1MDUtPnZpZGVv X2luZm87Cj4gKwljaGFyICpzdHIgPSBidWYsICplbmQgPSBidWYgKyBQQUdFX1NJWkU7Cj4gKwo+ ICsJaXQ2NTA1X2NhbGNfdmlkZW9faW5mbyhpdDY1MDUpOwo+ICsJc3RyICs9IHNjbnByaW50Zihz dHIsIGVuZCAtIHN0ciwgIi0tLXZpZGVvIHRpbWluZy0tLVxuIik7Cj4gKwlzdHIgKz0gc2NucHJp bnRmKHN0ciwgZW5kIC0gc3RyLCAiUENMSzolZC4lMDNkTUh6XG4iLAo+ICsJCQkgdmlkLT5jbG9j ayAvIDEwMDAsIHZpZC0+Y2xvY2sgJSAxMDAwKTsKPiArCXN0ciArPSBzY25wcmludGYoc3RyLCBl bmQgLSBzdHIsICJIVG90YWw6JWRcbiIsIHZpZC0+aHRvdGFsKTsKPiArCXN0ciArPSBzY25wcmlu dGYoc3RyLCBlbmQgLSBzdHIsICJIQWN0aXZlOiVkXG4iLCB2aWQtPmhkaXNwbGF5KTsKPiArCXN0 ciArPSBzY25wcmludGYoc3RyLCBlbmQgLSBzdHIsICJIRnJvbnRQb3JjaDolZFxuIiwKPiArCQkJ IHZpZC0+aHN5bmNfc3RhcnQgLSB2aWQtPmhkaXNwbGF5KTsKPiArCXN0ciArPSBzY25wcmludGYo c3RyLCBlbmQgLSBzdHIsICJIU3luY1dpZHRoOiVkXG4iLAo+ICsJCQkgdmlkLT5oc3luY19lbmQg LSB2aWQtPmhzeW5jX3N0YXJ0KTsKPiArCXN0ciArPSBzY25wcmludGYoc3RyLCBlbmQgLSBzdHIs ICJIQmFja1BvcmNoOiVkXG4iLAo+ICsJCQkgdmlkLT5odG90YWwgLSB2aWQtPmhzeW5jX2VuZCk7 Cj4gKwlzdHIgKz0gc2NucHJpbnRmKHN0ciwgZW5kIC0gc3RyLCAiVlRvdGFsOiVkXG4iLCB2aWQt PnZ0b3RhbCk7Cj4gKwlzdHIgKz0gc2NucHJpbnRmKHN0ciwgZW5kIC0gc3RyLCAiVkFjdGl2ZTol ZFxuIiwgdmlkLT52ZGlzcGxheSk7Cj4gKwlzdHIgKz0gc2NucHJpbnRmKHN0ciwgZW5kIC0gc3Ry LCAiVkZyb250UG9yY2g6JWRcbiIsCj4gKwkJCSB2aWQtPnZzeW5jX3N0YXJ0IC0gdmlkLT52ZGlz cGxheSk7Cj4gKwlzdHIgKz0gc2NucHJpbnRmKHN0ciwgZW5kIC0gc3RyLCAiVlN5bmNXaWR0aDol ZFxuIiwKPiArCQkJIHZpZC0+dnN5bmNfZW5kIC0gdmlkLT52c3luY19zdGFydCk7Cj4gKwlzdHIg Kz0gc2NucHJpbnRmKHN0ciwgZW5kIC0gc3RyLCAiVkJhY2tQb3JjaDolZFxuIiwKPiArCQkJIHZp ZC0+dnRvdGFsIC0gdmlkLT52c3luY19lbmQpOwo+ICsKPiArCXJldHVybiBzdHIgLSBidWY7Cj4g K30KPiArCj4gK3N0YXRpYyBzc2l6ZV90IGZvcmNlX3B3cm9ub2ZmX3N0b3JlKHN0cnVjdCBkZXZp Y2UgKmRldiwKPiArCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKPiArCQkJ CSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKPiArewo+ICsJc3RydWN0IGl0NjUw NSAqaXQ2NTA1ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gKwlpbnQgcHdyOwo+ICsKPiArCWlm IChrc3RydG9pbnQoYnVmLCAxMCwgJnB3cikgPCAwKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsK PiArCWlmIChwd3IpCj4gKwkJaXQ2NTA1X3Bvd2Vyb24oaXQ2NTA1KTsKPiArCWVsc2UKPiArCQlp dDY1MDVfcG93ZXJvZmYoaXQ2NTA1KTsKPiArCj4gKwlyZXR1cm4gY291bnQ7Cj4gK30KPiArCj4g K3N0YXRpYyBzc2l6ZV90IGVuYWJsZV9kcnZfaG9sZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwK PiArCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQo+ICt7 Cj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiArCj4g KwlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIGl0NjUwNS0+ZW5hYmxl X2Rydl9ob2xkKTsKPiArfQo+ICsKPiArc3RhdGljIHNzaXplX3QgZW5hYmxlX2Rydl9ob2xkX3N0 b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKPiArCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1 dGUgKmF0dHIsCj4gKwkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQo+ICt7 Cj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiArCXVu c2lnbmVkIGludCBkcnZfaG9sZDsKPiArCj4gKwlpZiAoa3N0cnRvaW50KGJ1ZiwgMTAsICZkcnZf aG9sZCkgPCAwKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWl0NjUwNS0+ZW5hYmxlX2Ry dl9ob2xkID0gISFkcnZfaG9sZDsKPiArCj4gKwlpZiAoaXQ2NTA1LT5lbmFibGVfZHJ2X2hvbGQp IHsKPiArCQlpdDY1MDVfaW50X21hc2tfZGlzYWJsZShpdDY1MDUpOwo+ICsJfSBlbHNlIHsKPiAr CQlpdDY1MDVfY2xlYXJfaW50KGl0NjUwNSk7Cj4gKwkJaXQ2NTA1X2ludF9tYXNrX2VuYWJsZShp dDY1MDUpOwo+ICsKPiArCQlpZiAoaXQ2NTA1LT5wb3dlcmVkKSB7Cj4gKwkJCWl0NjUwNS0+Y29u bmVjdG9yX3N0YXR1cyA9Cj4gKwkJCQkJaXQ2NTA1X2dldF9zaW5rX2hwZF9zdGF0dXMoaXQ2NTA1 KSA/Cj4gKwkJCQkJY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQgOgo+ICsJCQkJCWNvbm5lY3Rv cl9zdGF0dXNfZGlzY29ubmVjdGVkOwo+ICsJCX0gZWxzZSB7Cj4gKwkJCWl0NjUwNS0+Y29ubmVj dG9yX3N0YXR1cyA9Cj4gKwkJCQkJY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7Cj4gKwkJ fQo+ICsJfQo+ICsJcmV0dXJuIGNvdW50Owo+ICt9Cj4gKwo+ICtzdGF0aWMgREVWSUNFX0FUVFJf Uk8ocHJpbnRfdGltaW5nKTsKPiArc3RhdGljIERFVklDRV9BVFRSX1dPKGZvcmNlX3B3cm9ub2Zm KTsKPiArc3RhdGljIERFVklDRV9BVFRSX1JXKGVuYWJsZV9kcnZfaG9sZCk7Cj4gKwo+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqaXQ2NTA1X2F0dHJzW10gPSB7Cj4gKwkmZGV2X2F0 dHJfcHJpbnRfdGltaW5nLmF0dHIsCj4gKwkmZGV2X2F0dHJfZm9yY2VfcHdyb25vZmYuYXR0ciwK PiArCSZkZXZfYXR0cl9lbmFibGVfZHJ2X2hvbGQuYXR0ciwKPiArCU5VTEwsCj4gK307Cj4gKwo+ ICtzdGF0aWMgdm9pZCBpdDY1MDVfc2h1dGRvd24oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkK PiArewo+ICsJc3RydWN0IGl0NjUwNSAqaXQ2NTA1ID0gZGV2X2dldF9kcnZkYXRhKCZjbGllbnQt PmRldik7Cj4gKwo+ICsJa2ZyZWUoaXQ2NTA1LT5lZGlkKTsKPiArCWl0NjUwNS0+ZWRpZCA9IE5V TEw7Cj4gKwo+ICsJaWYgKGl0NjUwNS0+cG93ZXJlZCkKPiArCQlpdDY1MDVfbGFuZV9vZmYoaXQ2 NTA1KTsKPiArfQo+ICsKPiArc3RhdGljIGludCBpdDY1MDVfaTJjX3Byb2JlKHN0cnVjdCBpMmNf Y2xpZW50ICpjbGllbnQsCj4gKwkJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQp Cj4gK3sKPiArCXN0cnVjdCBpdDY1MDUgKml0NjUwNTsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9 ICZjbGllbnQtPmRldjsKPiArCXN0cnVjdCBleHRjb25fZGV2ICpleHRjb247Cj4gKwlpbnQgZXJy LCBpbnRwX2lycTsKPiArCj4gKwlpdDY1MDUgPSBkZXZtX2t6YWxsb2MoJmNsaWVudC0+ZGV2LCBz aXplb2YoKml0NjUwNSksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFpdDY1MDUpCj4gKwkJcmV0dXJu IC1FTk9NRU07Cj4gKwo+ICsJbXV0ZXhfaW5pdCgmaXQ2NTA1LT5leHRjb25fbG9jayk7Cj4gKwlt dXRleF9pbml0KCZpdDY1MDUtPm1vZGVfbG9jayk7Cj4gKwltdXRleF9pbml0KCZpdDY1MDUtPmF1 eF9sb2NrKTsKPiArCj4gKwlpdDY1MDUtPmJyaWRnZS5vZl9ub2RlID0gY2xpZW50LT5kZXYub2Zf bm9kZTsKPiArCWl0NjUwNS0+Y29ubmVjdG9yX3N0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlz Y29ubmVjdGVkOwo+ICsJaXQ2NTA1LT5jbGllbnQgPSBjbGllbnQ7Cj4gKwlpMmNfc2V0X2NsaWVu dGRhdGEoY2xpZW50LCBpdDY1MDUpOwo+ICsKPiArCS8qIGdldCBleHRjb24gZGV2aWNlIGZyb20g RFRTICovCj4gKwlleHRjb24gPSBleHRjb25fZ2V0X2VkZXZfYnlfcGhhbmRsZShkZXYsIDApOwo+ ICsJaWYgKFBUUl9FUlIoZXh0Y29uKSA9PSAtRVBST0JFX0RFRkVSKQo+ICsJCXJldHVybiAtRVBS T0JFX0RFRkVSOwo+ICsJaWYgKElTX0VSUihleHRjb24pKSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihk ZXYsICJjYW4gbm90IGdldCBleHRjb24gZGV2aWNlISIpOwo+ICsJCXJldHVybiBQVFJfRVJSKGV4 dGNvbik7Cj4gKwl9Cj4gKwo+ICsJaXQ2NTA1LT5leHRjb24gPSBleHRjb247Cj4gKwo+ICsJaXQ2 NTA1LT5yZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGllbnQsICZpdDY1MDVfcmVnbWFw X2NvbmZpZyk7Cj4gKwlpZiAoSVNfRVJSKGl0NjUwNS0+cmVnbWFwKSkgewo+ICsJCURSTV9ERVZf RVJST1IoZGV2LCAicmVnbWFwIGkyYyBpbml0IGZhaWxlZCIpOwo+ICsJCWVyciA9IFBUUl9FUlIo aXQ2NTA1LT5yZWdtYXApOwo+ICsJCXJldHVybiBlcnI7Cj4gKwl9Cj4gKwo+ICsJZXJyID0gaXQ2 NTA1X2luaXRfcGRhdGEoaXQ2NTA1KTsKPiArCWlmIChlcnIpIHsKPiArCQlEUk1fREVWX0VSUk9S KGRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIHBkYXRhOiAlZCIsIGVycik7Cj4gKwkJcmV0dXJu IGVycjsKPiArCX0KPiArCj4gKwlpdDY1MDVfcGFyc2VfZHQoaXQ2NTA1KTsKPiArCj4gKwlpbnRw X2lycSA9IGNsaWVudC0+aXJxOwo+ICsKPiArCWlmICghaW50cF9pcnEpIHsKPiArCQlEUk1fREVW X0VSUk9SKGRldiwgIkZhaWxlZCB0byBnZXQgSU5UUCBJUlEiKTsKPiArCQllcnIgPSAtRU5PREVW Owo+ICsJCXJldHVybiBlcnI7Cj4gKwl9Cj4gKwo+ICsJZXJyID0gZGV2bV9yZXF1ZXN0X3RocmVh ZGVkX2lycSgmY2xpZW50LT5kZXYsIGludHBfaXJxLCBOVUxMLAo+ICsJCQkJCWl0NjUwNV9pbnRf dGhyZWFkZWRfaGFuZGxlciwKPiArCQkJCQlJUlFGX1RSSUdHRVJfTE9XIHwgSVJRRl9PTkVTSE9U LAo+ICsJCQkJCSJpdDY1MDUtaW50cCIsIGl0NjUwNSk7Cj4gKwlpZiAoZXJyKSB7Cj4gKwkJRFJN X0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBJTlRQIHRocmVhZGVkIElSUTogJWQi LAo+ICsJCQkgICAgICBlcnIpOwo+ICsJCXJldHVybiBlcnI7Cj4gKwl9Cj4gKwo+ICsJLyogUmVn aXN0ZXIgYXV4IGNoYW5uZWwgKi8KPiArCWl0NjUwNS0+YXV4Lm5hbWUgPSAiRFAtQVVYIjsKPiAr CWl0NjUwNS0+YXV4LmRldiA9IGRldjsKPiArCWl0NjUwNS0+YXV4LnRyYW5zZmVyID0gaXQ2NTA1 X2F1eF90cmFuc2ZlcjsKPiArCj4gKwllcnIgPSBkcm1fZHBfYXV4X3JlZ2lzdGVyKCZpdDY1MDUt PmF1eCk7Cj4gKwlpZiAoZXJyIDwgMCkgewo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVk IHRvIHJlZ2lzdGVyIGF1eDogJWQiLCBlcnIpOwo+ICsJCXJldHVybiBlcnI7Cj4gKwl9Cj4gKwo+ ICsJSU5JVF9XT1JLKCZpdDY1MDUtPmxpbmtfd29ya3MsIGl0NjUwNV9saW5rX3RyYWluaW5nX3dv cmspOwo+ICsJSU5JVF9XT1JLKCZpdDY1MDUtPmhkY3Bfd2FpdF9rc3ZfbGlzdCwgaXQ2NTA1X2hk Y3Bfd2FpdF9rc3ZfbGlzdCk7Cj4gKwlJTklUX0RFTEFZRURfV09SSygmaXQ2NTA1LT5oZGNwX3dv cmssIGl0NjUwNV9oZGNwX3dvcmspOwo+ICsJaW5pdF9jb21wbGV0aW9uKCZpdDY1MDUtPndhaXRf ZWRpZF9jb21wbGV0ZSk7Cj4gKwltZW1zZXQoaXQ2NTA1LT5kcGNkLCAwLCBzaXplb2YoaXQ2NTA1 LT5kcGNkKSk7Cj4gKwlpdDY1MDUtPnBvd2VyZWQgPSBmYWxzZTsKPiArCWl0NjUwNS0+ZW5hYmxl X2Rydl9ob2xkID0gREVGQVVMVF9EUlZfSE9MRDsKPiArCj4gKwlpZiAoREVGQVVMVF9QV1JfT04p Cj4gKwkJaXQ2NTA1X3Bvd2Vyb24oaXQ2NTA1KTsKPiArCj4gKwllcnIgPSBzeXNmc19jcmVhdGVf ZmlsZXMoJmNsaWVudC0+ZGV2LmtvYmosIGl0NjUwNV9hdHRycyk7Cj4gKwlpZiAoZXJyKSB7Cj4g KwkJZHJtX2RwX2F1eF91bnJlZ2lzdGVyKCZpdDY1MDUtPmF1eCk7Cj4gKwkJcmV0dXJuIGVycjsK PiArCX0KPiArCj4gKwlpdDY1MDUtPmJyaWRnZS5mdW5jcyA9ICZpdDY1MDVfYnJpZGdlX2Z1bmNz Owo+ICsJZHJtX2JyaWRnZV9hZGQoJml0NjUwNS0+YnJpZGdlKTsKPiArCj4gKwlyZXR1cm4gMDsK PiArfQo+ICsKPiArc3RhdGljIGludCBpdDY1MDVfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVu dCAqY2xpZW50KQo+ICt7Cj4gKwlzdHJ1Y3QgaXQ2NTA1ICppdDY1MDUgPSBpMmNfZ2V0X2NsaWVu dGRhdGEoY2xpZW50KTsKPiArCj4gKwlkcm1fY29ubmVjdG9yX3VucmVnaXN0ZXIoJml0NjUwNS0+ Y29ubmVjdG9yKTsKPiArCWRybV9jb25uZWN0b3JfY2xlYW51cCgmaXQ2NTA1LT5jb25uZWN0b3Ip Owo+ICsJZHJtX2JyaWRnZV9yZW1vdmUoJml0NjUwNS0+YnJpZGdlKTsKPiArCWRybV9kcF9hdXhf dW5yZWdpc3RlcigmaXQ2NTA1LT5hdXgpOwo+ICsJc3lzZnNfcmVtb3ZlX2ZpbGVzKCZjbGllbnQt PmRldi5rb2JqLCBpdDY1MDVfYXR0cnMpOwo+ICsJaXQ2NTA1X3Bvd2Vyb2ZmKGl0NjUwNSk7Cj4g Kwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2Rldmlj ZV9pZCBpdDY1MDVfaWRbXSA9IHsKPiArCXsgIml0NjUwNSIsIDAgfSwKPiArCXsgfQo+ICt9Owo+ ICsKPiArTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGl0NjUwNV9pZCk7Cj4gKwo+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBpdDY1MDVfb2ZfbWF0Y2hbXSA9IHsKPiArCXsgLmNv bXBhdGlibGUgPSAiaXRlLGl0NjUwNSIgfSwKPiArCXsgfQo+ICt9Owo+ICsKPiArc3RhdGljIHN0 cnVjdCBpMmNfZHJpdmVyIGl0NjUwNV9pMmNfZHJpdmVyID0gewo+ICsJLmRyaXZlciA9IHsKPiAr CQkubmFtZSA9ICJpdDY1MDUiLAo+ICsJCS5vZl9tYXRjaF90YWJsZSA9IGl0NjUwNV9vZl9tYXRj aCwKPiArI2lmZGVmIENPTkZJR19QTV9TTEVFUAo+ICsJCS5wbSA9ICZpdDY1MDVfYnJpZGdlX3Bt X29wcywKPiArI2VuZGlmCj4gKwl9LAo+ICsJLnByb2JlID0gaXQ2NTA1X2kyY19wcm9iZSwKPiAr CS5yZW1vdmUgPSBpdDY1MDVfaTJjX3JlbW92ZSwKPiArCS5zaHV0ZG93biA9IGl0NjUwNV9zaHV0 ZG93biwKPiArCS5pZF90YWJsZSA9IGl0NjUwNV9pZCwKPiArfTsKPiArCj4gK21vZHVsZV9pMmNf ZHJpdmVyKGl0NjUwNV9pMmNfZHJpdmVyKTsKPiArCj4gK01PRFVMRV9BVVRIT1IoIkFsbGVuIENo ZW4gPGFsbGVuLmNoZW5AaXRlLmNvbS50dz4iKTsKPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJJVDY1 MDUgRGlzcGxheVBvcnQgVHJhbnNtaXR0ZXIgZHJpdmVyIik7Cj4gK01PRFVMRV9MSUNFTlNFKCJH UEwgdjIiKTsKCi0tIApSZWdhcmRzLAoKTGF1cmVudCBQaW5jaGFydAoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXgtbWVkaWF0ZWsgbWFpbGluZyBs aXN0CkxpbnV4LW1lZGlhdGVrQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJh ZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1tZWRpYXRlawo=