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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id BB244C30653 for ; Wed, 3 Jul 2024 09:23:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=2z7UaXBzSI//b5Jsdc4s/WXBGLQiFhVE3uxgu71Xrrk=; b=S9jP3Sa6qGoSsS 70CRxYg9ssPcBfwmxB9LK5J8G3TtycH76PoidoKc3jVvGvSg9tJKQGFpY1SAF//urhwUuodAXRv7a PTwDrX3WUZ0HXXIV7R/FUZldcRGkXxrRIJxvry7WmCUY48A/xVBk1HsmKzUwnxfNznKJk6PIzbjNC Lm1DxoAhU53wMLxOn7JfJh9VETleOpNMgKtHZprRy2Vvul19NDwIloZR3BWPm7PmBg/oYRykf5D32 KWnWL3UBB3LAJkAk5JwnJhNfLwSxcWFbJ3o7hwv9ul5PWGvkDnwzej5YHOenCq5arKgSm/IUWkA1B 94gU6NqJ08+vy67pQZrg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sOwDS-00000009YUJ-1ttX; Wed, 03 Jul 2024 09:23:54 +0000 Received: from madrid.collaboradmins.com ([2a00:1098:ed:100::25]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sOwDA-00000009YPu-3U4a; Wed, 03 Jul 2024 09:23:41 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1719998614; bh=3p4jCo07KorC/Q2s2wiGJUlf/uZd6/quP5XG15P2JuU=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=KFujur3dDxKT2tQJXDAsqhTEXFQyn3z6fizRWrLV9mBClub/Cq/nWX0d/3O4qqEZh 6RMpVoo6nKEB02R2t9Mu6a6lCHEmXsz7GRVbl3yu2ns6Ot2Di1+hAZK3v6pWol9PQx CLAeVBggxpZ9oq2JpScxGFX90LTVjhSMrSNHvjnwPIU5wRBGOCRShMXMr99Zyg9+FD m70iQ89UkopvcWWTySADAA1x8biTK+9c6f3ZWgC+1cp67bderiD6QmzVEUqbSRJtRy jjc+bf+gM/3JyNiLlHUHFFG6vJC8KNsEQkRrvknqMa0KkXm8tJNjoGQzixpHZFkG0g U2Xp/P3qK2zMg== Received: from [100.93.89.217] (cola.collaboradmins.com [195.201.22.229]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: benjamin.gaignard) by madrid.collaboradmins.com (Postfix) with ESMTPSA id E6D4937820A6; Wed, 3 Jul 2024 09:23:32 +0000 (UTC) Message-ID: Date: Wed, 3 Jul 2024 11:23:32 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v16 4/8] drm: bridge: Cadence: Add MHDP8501 DP/HDMI driver To: Sandor Yu , dmitry.baryshkov@linaro.org, andrzej.hajda@intel.com, neil.armstrong@linaro.org, Laurent.pinchart@ideasonboard.com, jonas@kwiboo.se, jernej.skrabec@gmail.com, airlied@gmail.com, daniel@ffwll.ch, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, shawnguo@kernel.org, s.hauer@pengutronix.de, festevam@gmail.com, vkoul@kernel.org, dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, mripard@kernel.org Cc: kernel@pengutronix.de, linux-imx@nxp.com, oliver.brown@nxp.com, alexander.stein@ew.tq-group.com, sam@ravnborg.org References: <359914108b879e995d4a39de32a33310009f0fab.1719903904.git.Sandor.yu@nxp.com> Content-Language: en-US From: Benjamin Gaignard In-Reply-To: <359914108b879e995d4a39de32a33310009f0fab.1719903904.git.Sandor.yu@nxp.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240703_022337_341169_FAC7E3FC X-CRM114-Status: GOOD ( 37.87 ) X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy Mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-phy" Errors-To: linux-phy-bounces+linux-phy=archiver.kernel.org@lists.infradead.org CkxlIDAyLzA3LzIwMjQgw6AgMTQ6MjIsIFNhbmRvciBZdSBhIMOpY3JpdMKgOgo+IEFkZCBhIG5l dyBEUk0gRGlzcGxheVBvcnQgYW5kIEhETUkgYnJpZGdlIGRyaXZlciBmb3IgQ2FuZGVuY2UgTUhE UDg1MDEKPiB1c2VkIGluIGkuTVg4TVEgU09DLiBNSERQODUwMSBjb3VsZCBzdXBwb3J0IEhETUkg b3IgRGlzcGxheVBvcnQKPiBzdGFuZGFyZHMgYWNjb3JkaW5nIGVtYmVkZGVkIEZpcm13YXJlIHJ1 bm5pbmcgaW4gdGhlIHVDUFUuCj4KPiBGb3IgaU1YOE1RIFNPQywgdGhlIERpc3BsYXlQb3J0L0hE TUkgRlcgd2FzIGxvYWRlZCBhbmQgYWN0aXZhdGVkIGJ5Cj4gU09DJ3MgUk9NIGNvZGUuIEJvb3Rs b2FkIGJpbmFyeSBpbmNsdWRlZCByZXNwZWN0aXZlIHNwZWNpZmljIGZpcm13YXJlCj4gaXMgcmVx dWlyZWQuCj4KPiBEcml2ZXIgd2lsbCBjaGVjayBkaXNwbGF5IGNvbm5lY3RvciB0eXBlIGFuZAo+ IHRoZW4gbG9hZCB0aGUgY29ycmVzcG9uZGluZyBkcml2ZXIuCj4KPiBTaWduZWQtb2ZmLWJ5OiBT YW5kb3IgWXUgPFNhbmRvci55dUBueHAuY29tPgo+IFRlc3RlZC1ieTogQWxleGFuZGVyIFN0ZWlu IDxhbGV4YW5kZXIuc3RlaW5AZXcudHEtZ3JvdXAuY29tPgo+IC0tLQo+IHYxNS0+djE2Ogo+IC0g cmViYXNlIHRoZSBwYXRjaHNldCBzaXRzIG9uIHRvcCBEbWl0cnkncwo+ICAgICAnbWFrZSB1c2Ug b2YgdGhlIEhETUkgY29ubmVjdG9yIGluZnJhc3RydWN0dXJlJyBwYXRjaHNldCAoWzJdKS4KPiAt IEFkZCBEUk1fQlJJREdFX09QX0hETUkgZmxhZ3MgZm9yIEhETUkgZHJpdmVyLAo+IC0gSW50cm9k dWNlIHRoZSBoZG1pIGluZm8gZnJhbWUgaGVscGVyIGZ1bmN0aW9ucywgYWRkZWQgaGRtaV9jbGVh cl9pbmZvZnJhbWUoKSwKPiAgICBoZG1pX3dyaXRlX2luZm9mcmFtZSgpIGFuZCBoZG1pX3RtZHNf Y2hhcl9yYXRlX3ZhbGlkKCkuCj4gLSBtb2RlX2ZpeHVwKCkgd2FzIHJlcGxhY2VkIGJ5IGF0b21p Y19jaGVjaygpLgo+IC0gRml4IHZpZGVvIG1vZGUgNEtwMzAgZGlkIG5vdCB3b3JrIG9uIHNvbWUg ZGlzcGxheXMgdGhhdCBzdXBwb3J0Cj4gICAgTFRFXzM0ME1jc2Nfc2NyYW1ibGUuCj4gLSB1cGRh dGVkIGZvciB0bWRzX2NoYXJfcmF0ZSBhZGRlZCBpbiBwYXRjaCAjMi4KPgo+IHYxMy0+djE0Ogo+ IC0gUmViYXNlIHRvIG5leHQtMjAyNDAyMTksIHJlcGxhY2UgZ2V0X2VkaWQgZnVuY3Rpb24gYnkg ZWRpZF9yZWFkCj4gICAgZnVuY3Rpb24uCj4KPiB2MTItPnYxMzoKPiAtIEV4cGxpY2l0bHkgaW5j bHVkZSBsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaCBmb3IgY2Rucy1taGRwODUwMS1jb3JlLmMKPiAt IEZpeCBidWlsZCB3YXJuaW5nCj4gLSBPcmRlciBiaXQgYnBjIGFuZCBjb2xvcl9zcGFjZSBpbiBk ZXNjZW5kaW5nIHNoaXQuCj4KPiB2MTEtPnYxMjoKPiAtIFJlcGxhY2UgRFJNX0lORk8gd2l0aCBk ZXZfaW5mbyBvciBkZXZfd2Fybi4KPiAtIFJlcGxhY2UgRFJNX0VSUk9SIHdpdGggZGV2X2Vyci4K PiAtIFJldHVybiByZXQgd2hlbiBjZG5zX21oZHBfZHBjZF9yZWFkIGZhaWxlZCBpbiBmdW5jdGlv biBjZG5zX2RwX2F1eF90cmFuc2ZlcmkoKS4KPiAtIFJlbW92ZSB1bnVzZWQgcGFybWV0ZXIgaW4g ZnVuY3Rpb24gY2Ruc19kcF9nZXRfbXNhX21pc2MKPiAgICBhbmQgdXNlIHR3byBzZXBhcmF0ZSB2 YXJpYWJsZXMgZm9yIGNvbG9yIHNwYWNlIGFuZCBicGMuCj4gLSBBZGQgeWVhciAyMDI0IHRvIGNv cHlyaWdodC4KPgo+ICAgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9jYWRlbmNlL0tjb25maWcgICAg ICAgIHwgIDE2ICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvY2FkZW5jZS9NYWtlZmlsZSAg ICAgICB8ICAgMiArCj4gICAuLi4vZHJtL2JyaWRnZS9jYWRlbmNlL2NkbnMtbWhkcDg1MDEtY29y ZS5jICAgfCAzMzAgKysrKysrKysrCj4gICAuLi4vZHJtL2JyaWRnZS9jYWRlbmNlL2NkbnMtbWhk cDg1MDEtY29yZS5oICAgfCAzNjcgKysrKysrKysrCj4gICAuLi4vZ3B1L2RybS9icmlkZ2UvY2Fk ZW5jZS9jZG5zLW1oZHA4NTAxLWRwLmMgfCA3MDAgKysrKysrKysrKysrKysrKysrCj4gICAuLi4v ZHJtL2JyaWRnZS9jYWRlbmNlL2NkbnMtbWhkcDg1MDEtaGRtaS5jICAgfCA1OTUgKysrKysrKysr KysrKysrCj4gICA2IGZpbGVzIGNoYW5nZWQsIDIwMTAgaW5zZXJ0aW9ucygrKQo+ICAgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvY2FkZW5jZS9jZG5zLW1oZHA4NTAx LWNvcmUuYwo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvY2Fk ZW5jZS9jZG5zLW1oZHA4NTAxLWNvcmUuaAo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9icmlkZ2UvY2FkZW5jZS9jZG5zLW1oZHA4NTAxLWRwLmMKPiAgIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2NhZGVuY2UvY2Rucy1taGRwODUwMS1oZG1p LmMKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2NhZGVuY2UvS2NvbmZp ZyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvY2FkZW5jZS9LY29uZmlnCj4gaW5kZXggZTA5NzMz MzllOWUzLi40NTg0OGU3NDFmNWYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRn ZS9jYWRlbmNlL0tjb25maWcKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2NhZGVuY2Uv S2NvbmZpZwo+IEBAIC01MSwzICs1MSwxOSBAQCBjb25maWcgRFJNX0NETlNfTUhEUDg1NDZfSjcy MUUKPiAgIAkgIGluaXRpYWxpemVzIHRoZSBKNzIxRSBEaXNwbGF5IFBvcnQgYW5kIHNldHMgdXAg dGhlCj4gICAJICBjbG9jayBhbmQgZGF0YSBtdXhlcy4KPiAgIGVuZGlmCj4gKwo+ICtjb25maWcg RFJNX0NETlNfTUhEUDg1MDEKPiArCXRyaXN0YXRlICJDYWRlbmNlIE1IRFA4NTAxIERQL0hETUkg YnJpZGdlIgo+ICsJc2VsZWN0IERSTV9LTVNfSEVMUEVSCj4gKwlzZWxlY3QgRFJNX1BBTkVMX0JS SURHRQo+ICsJc2VsZWN0IERSTV9ESVNQTEFZX0RQX0hFTFBFUgo+ICsJc2VsZWN0IERSTV9ESVNQ TEFZX0hFTFBFUgo+ICsJc2VsZWN0IENETlNfTUhEUF9IRUxQRVIKPiArCXNlbGVjdCBEUk1fQ0RO U19BVURJTwo+ICsJZGVwZW5kcyBvbiBPRgo+ICsJaGVscAo+ICsJICBTdXBwb3J0IENhZGVuY2Ug TUhEUDg1MDEgRGlzcGxheVBvcnQvSERNSSBicmlkZ2UuCj4gKwkgIENhZGVuY2UgTUhEUDg1MDEg c3VwcG9ydCBvbmUgb3IgbW9yZSBwcm90b2NvbHMsCj4gKwkgIGluY2x1ZGluZyBEaXNwbGF5UG9y dCBhbmQgSERNSS4KPiArCSAgVG8gdXNlIHRoZSBEUCBhbmQgSERNSSBkcml2ZXJzLCB0aGVpciBy ZXNwZWN0aXZlCj4gKwkgIHNwZWNpZmljIGZpcm13YXJlIGlzIHJlcXVpcmVkLgo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2NhZGVuY2UvTWFrZWZpbGUgYi9kcml2ZXJzL2dw dS9kcm0vYnJpZGdlL2NhZGVuY2UvTWFrZWZpbGUKPiBpbmRleCAwODdkYzA3NDgyMGQuLjAyYzFh OWYzY2Y2ZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2NhZGVuY2UvTWFr ZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2NhZGVuY2UvTWFrZWZpbGUKPiBA QCAtNiwzICs2LDUgQEAgb2JqLSQoQ09ORklHX0NETlNfTUhEUF9IRUxQRVIpICs9IGNkbnMtbWhk cC1oZWxwZXIubwo+ICAgb2JqLSQoQ09ORklHX0RSTV9DRE5TX01IRFA4NTQ2KSArPSBjZG5zLW1o ZHA4NTQ2Lm8KPiAgIGNkbnMtbWhkcDg1NDYteSA6PSBjZG5zLW1oZHA4NTQ2LWNvcmUubyBjZG5z LW1oZHA4NTQ2LWhkY3Aubwo+ICAgY2Rucy1taGRwODU0Ni0kKENPTkZJR19EUk1fQ0ROU19NSERQ ODU0Nl9KNzIxRSkgKz0gY2Rucy1taGRwODU0Ni1qNzIxZS5vCj4gK29iai0kKENPTkZJR19EUk1f Q0ROU19NSERQODUwMSkgKz0gY2Rucy1taGRwODUwMS5vCj4gK2NkbnMtbWhkcDg1MDEteSA6PSBj ZG5zLW1oZHA4NTAxLWNvcmUubyBjZG5zLW1oZHA4NTAxLWRwLm8gY2Rucy1taGRwODUwMS1oZG1p Lm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9jYWRlbmNlL2NkbnMtbWhk cDg1MDEtY29yZS5jIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9jYWRlbmNlL2NkbnMtbWhkcDg1 MDEtY29yZS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmMz MDZkYjk4MmI3Ngo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdl L2NhZGVuY2UvY2Rucy1taGRwODUwMS1jb3JlLmMKPiBAQCAtMCwwICsxLDMzMCBAQAo+ICsvLyBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Cj4gKy8qCj4gKyAqIENhZGVuY2Ug RGlzcGxheSBQb3J0IEludGVyZmFjZSAoRFApIGRyaXZlcgo+ICsgKgo+ICsgKiBDb3B5cmlnaHQg KEMpIDIwMjMsIDIwMjQgTlhQIFNlbWljb25kdWN0b3IsIEluYy4KPiArICoKPiArICovCj4gKyNp bmNsdWRlIDxkcm0vZHJtX29mLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX3ByaW50Lmg+Cj4gKyNp bmNsdWRlIDxsaW51eC9jbGsuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2lycS5oPgo+ICsjaW5jbHVk ZSA8bGludXgvbXV0ZXguaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgo+ICsjaW5j bHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9waHkvcGh5 Lmg+Cj4gKwo+ICsjaW5jbHVkZSAiY2Rucy1taGRwODUwMS1jb3JlLmgiCj4gKwo+ICtzdGF0aWMg aW50IGNkbnNfbWhkcDg1MDFfcmVhZF9ocGQoc3RydWN0IGNkbnNfbWhkcDg1MDFfZGV2aWNlICpt aGRwKQo+ICt7Cj4gKwl1OCBzdGF0dXM7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCW11dGV4X2xvY2so Jm1oZHAtPm1ib3hfbXV0ZXgpOwo+ICsKPiArCXJldCA9IGNkbnNfbWhkcF9tYWlsYm94X3NlbmQo Jm1oZHAtPmJhc2UsIE1CX01PRFVMRV9JRF9HRU5FUkFMLAo+ICsJCQkJICAgICBHRU5FUkFMX0dF VF9IUERfU1RBVEUsIDAsIE5VTEwpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGVycl9nZXRfaHBk Owo+ICsKPiArCXJldCA9IGNkbnNfbWhkcF9tYWlsYm94X3JlY3ZfaGVhZGVyKCZtaGRwLT5iYXNl LCBNQl9NT0RVTEVfSURfR0VORVJBTCwKPiArCQkJCQkgICAgR0VORVJBTF9HRVRfSFBEX1NUQVRF LAo+ICsJCQkJCSAgICBzaXplb2Yoc3RhdHVzKSk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZXJy X2dldF9ocGQ7Cj4gKwo+ICsJcmV0ID0gY2Ruc19taGRwX21haWxib3hfcmVjdl9kYXRhKCZtaGRw LT5iYXNlLCAmc3RhdHVzLCBzaXplb2Yoc3RhdHVzKSk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8g ZXJyX2dldF9ocGQ7Cj4gKwo+ICsJbXV0ZXhfdW5sb2NrKCZtaGRwLT5tYm94X211dGV4KTsKPiAr Cj4gKwlyZXR1cm4gc3RhdHVzOwo+ICsKPiArZXJyX2dldF9ocGQ6Cj4gKwlkZXZfZXJyKG1oZHAt PmRldiwgInJlYWQgaHBkICBmYWlsZWQ6ICVkXG4iLCByZXQpOwo+ICsJbXV0ZXhfdW5sb2NrKCZt aGRwLT5tYm94X211dGV4KTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtlbnVtIGRy bV9jb25uZWN0b3Jfc3RhdHVzIGNkbnNfbWhkcDg1MDFfZGV0ZWN0KHN0cnVjdCBjZG5zX21oZHA4 NTAxX2RldmljZSAqbWhkcCkKPiArewo+ICsJdTggaHBkID0gMHhmOwo+ICsKPiArCWhwZCA9IGNk bnNfbWhkcDg1MDFfcmVhZF9ocGQobWhkcCk7Cj4gKwlpZiAoaHBkID09IDEpCj4gKwkJcmV0dXJu IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwo+ICsJZWxzZSBpZiAoaHBkID09IDApCj4gKwkJ cmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwo+ICsKPiArCWRldl93YXJuKG1o ZHAtPmRldiwgIlVua25vd24gY2FibGUgc3RhdHVzLCBoZHA9JXVcbiIsIGhwZCk7Cj4gKwlyZXR1 cm4gY29ubmVjdG9yX3N0YXR1c191bmtub3duOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBob3Rw bHVnX3dvcmtfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gK3sKPiArCXN0cnVjdCBj ZG5zX21oZHA4NTAxX2RldmljZSAqbWhkcCA9IGNvbnRhaW5lcl9vZih3b3JrLAo+ICsJCQkJCQkg ICAgIHN0cnVjdCBjZG5zX21oZHA4NTAxX2RldmljZSwKPiArCQkJCQkJICAgICBob3RwbHVnX3dv cmsud29yayk7Cj4gKwllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHN0YXR1cyA9IGNkbnNfbWhk cDg1MDFfZGV0ZWN0KG1oZHApOwo+ICsKPiArCWRybV9icmlkZ2VfaHBkX25vdGlmeSgmbWhkcC0+ YnJpZGdlLCBzdGF0dXMpOwo+ICsKPiArCWlmIChzdGF0dXMgPT0gY29ubmVjdG9yX3N0YXR1c19j b25uZWN0ZWQpIHsKPiArCQkvKiBDYWJsZSBjb25uZWN0ZWQgICovCj4gKwkJRFJNX0lORk8oIkhE TUkvRFAgQ2FibGUgUGx1ZyBJblxuIik7Cj4gKwkJZW5hYmxlX2lycShtaGRwLT5pcnFbSVJRX09V VF0pOwo+ICsJfSBlbHNlIGlmIChzdGF0dXMgPT0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0 ZWQpIHsKPiArCQkvKiBDYWJsZSBEaXNjb25uZWN0ZWQgICovCj4gKwkJRFJNX0lORk8oIkhETUkv RFAgQ2FibGUgUGx1ZyBPdXRcbiIpOwo+ICsJCWVuYWJsZV9pcnEobWhkcC0+aXJxW0lSUV9JTl0p Owo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgaXJxcmV0dXJuX3QgY2Ruc19taGRwODUwMV9pcnFf dGhyZWFkKGludCBpcnEsIHZvaWQgKmRhdGEpCj4gK3sKPiArCXN0cnVjdCBjZG5zX21oZHA4NTAx X2RldmljZSAqbWhkcCA9IGRhdGE7Cj4gKwo+ICsJZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7Cj4g Kwo+ICsJbW9kX2RlbGF5ZWRfd29yayhzeXN0ZW1fd3EsICZtaGRwLT5ob3RwbHVnX3dvcmssCj4g KwkJCSBtc2Vjc190b19qaWZmaWVzKEhPVFBMVUdfREVCT1VOQ0VfTVMpKTsKPiArCj4gKwlyZXR1 cm4gSVJRX0hBTkRMRUQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgY2Ruc19taGRwODUwMV9kdF9w YXJzZShzdHJ1Y3QgY2Ruc19taGRwODUwMV9kZXZpY2UgKm1oZHAsCj4gKwkJCQkgIHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2 LT5kZXY7Cj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOwo+ICsJc3Ry dWN0IGRldmljZV9ub2RlICpyZW1vdGU7Cj4gKwo+ICsJcmVtb3RlID0gb2ZfZ3JhcGhfZ2V0X3Jl bW90ZV9ub2RlKG5wLCAxLCAwKTsKPiArCWlmICghcmVtb3RlKSB7Cj4gKwkJZGV2X2VycihkZXYs ICJmYWlsIHRvIGdldCByZW1vdGUgbm9kZVxuIik7Cj4gKwkJb2Zfbm9kZV9wdXQocmVtb3RlKTsK PiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwkvKiBnZXQgY29ubmVjdG9yIHR5cGUg Ki8KPiArCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShyZW1vdGUsICJoZG1pLWNvbm5lY3Rv ciIpKSB7Cj4gKwkJbWhkcC0+Y29ubmVjdG9yX3R5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfSERN SUE7Cj4gKwo+ICsJfSBlbHNlIGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShyZW1vdGUsICJk cC1jb25uZWN0b3IiKSkgewo+ICsJCW1oZHAtPmNvbm5lY3Rvcl90eXBlID0gRFJNX01PREVfQ09O TkVDVE9SX0Rpc3BsYXlQb3J0Owo+ICsKPiArCX0gZWxzZSB7Cj4gKwkJZGV2X2VycihkZXYsICJV bmtub3duIGNvbm5lY3RvciB0eXBlXG4iKTsKPiArCQlvZl9ub2RlX3B1dChyZW1vdGUpOwo+ICsJ CXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCW9mX25vZGVfcHV0KHJlbW90ZSk7Cj4gKwly ZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgY2Ruc19taGRwODUwMV9hZGRfYnJp ZGdlKHN0cnVjdCBjZG5zX21oZHA4NTAxX2RldmljZSAqbWhkcCkKPiArewo+ICsJbWhkcC0+YnJp ZGdlLnR5cGUgPSBtaGRwLT5jb25uZWN0b3JfdHlwZTsKPiArCW1oZHAtPmJyaWRnZS5kcml2ZXJf cHJpdmF0ZSA9IG1oZHA7Cj4gKwltaGRwLT5icmlkZ2Uub2Zfbm9kZSA9IG1oZHAtPmRldi0+b2Zf bm9kZTsKPiArCW1oZHAtPmJyaWRnZS52ZW5kb3IgPSAiTlhQIjsKPiArCW1oZHAtPmJyaWRnZS5w cm9kdWN0ID0gImkuTVg4IjsKPiArCW1oZHAtPmJyaWRnZS5vcHMgPSBEUk1fQlJJREdFX09QX0RF VEVDVCB8IERSTV9CUklER0VfT1BfRURJRCB8Cj4gKwkJCSAgIERSTV9CUklER0VfT1BfSFBEOwo+ ICsKPiArCWlmIChtaGRwLT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfSERN SUEpIHsKPiArCQltaGRwLT5icmlkZ2UuZnVuY3MgPSAmY2Ruc19oZG1pX2JyaWRnZV9mdW5jczsK PiArCQltaGRwLT5icmlkZ2Uub3BzIHw9IERSTV9CUklER0VfT1BfSERNSTsKPiArCX0gZWxzZSBp ZiAobWhkcC0+Y29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0 KSB7Cj4gKwkJbWhkcC0+YnJpZGdlLmZ1bmNzID0gJmNkbnNfZHBfYnJpZGdlX2Z1bmNzOwo+ICsJ fSBlbHNlIHsKPiArCQlkZXZfZXJyKG1oZHAtPmRldiwgIlVuc3VwcG9ydGVkIGNvbm5lY3RvciB0 eXBlIVxuIik7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWRybV9icmlkZ2VfYWRkKCZtaGRw LT5icmlkZ2UpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGNkbnNfbWhkcDg1MDFfcHJvYmUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0g JnBkZXYtPmRldjsKPiArCXN0cnVjdCBjZG5zX21oZHA4NTAxX2RldmljZSAqbWhkcDsKPiArCXN0 cnVjdCByZXNvdXJjZSAqcmVzOwo+ICsJZW51bSBwaHlfbW9kZSBwaHlfbW9kZTsKPiArCXUzMiBy ZWc7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCW1oZHAgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yo Km1oZHApLCBHRlBfS0VSTkVMKTsKPiArCWlmICghbWhkcCkKPiArCQlyZXR1cm4gLUVOT01FTTsK PiArCj4gKwltdXRleF9pbml0KCZtaGRwLT5tYm94X211dGV4KTsKPiArCW1oZHAtPmRldiA9IGRl djsKPiArCj4gKwlJTklUX0RFTEFZRURfV09SSygmbWhkcC0+aG90cGx1Z193b3JrLCBob3RwbHVn X3dvcmtfZnVuYyk7Cj4gKwo+ICsJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElP UkVTT1VSQ0VfTUVNLCAwKTsKPiArCWlmICghcmVzKQo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsK PiArCW1oZHAtPnJlZ3MgPSBkZXZtX2lvcmVtYXAoZGV2LCByZXMtPnN0YXJ0LCByZXNvdXJjZV9z aXplKHJlcykpOwo+ICsJaWYgKElTX0VSUihtaGRwLT5yZWdzKSkKPiArCQlyZXR1cm4gUFRSX0VS UihtaGRwLT5yZWdzKTsKPiArCj4gKwlyZXQgPSBjZG5zX21oZHA4NTAxX2R0X3BhcnNlKG1oZHAs IHBkZXYpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJbWhk cC0+cGh5ID0gZGV2bV9vZl9waHlfZ2V0X2J5X2luZGV4KGRldiwgcGRldi0+ZGV2Lm9mX25vZGUs IDApOwo+ICsJaWYgKElTX0VSUihtaGRwLT5waHkpKQo+ICsJCXJldHVybiBkZXZfZXJyX3Byb2Jl KGRldiwgUFRSX0VSUihtaGRwLT5waHkpLCAibm8gUEhZIGNvbmZpZ3VyZWRcbiIpOwo+ICsKPiAr CW1oZHAtPmlycVtJUlFfSU5dID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgInBsdWdf aW4iKTsKPiArCWlmIChtaGRwLT5pcnFbSVJRX0lOXSA8IDApCj4gKwkJcmV0dXJuIGRldl9lcnJf cHJvYmUoZGV2LCBtaGRwLT5pcnFbSVJRX0lOXSwgIk5vIHBsdWdfaW4gaXJxIG51bWJlclxuIik7 Cj4gKwo+ICsJbWhkcC0+aXJxW0lSUV9PVVRdID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRl diwgInBsdWdfb3V0Iik7Cj4gKwlpZiAobWhkcC0+aXJxW0lSUV9PVVRdIDwgMCkKPiArCQlyZXR1 cm4gZGV2X2Vycl9wcm9iZShkZXYsIG1oZHAtPmlycVtJUlFfT1VUXSwgIk5vIHBsdWdfb3V0IGly cSBudW1iZXJcbiIpOwo+ICsKPiArCWlycV9zZXRfc3RhdHVzX2ZsYWdzKG1oZHAtPmlycVtJUlFf SU5dLCBJUlFfTk9BVVRPRU4pOwo+ICsJcmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShk ZXYsIG1oZHAtPmlycVtJUlFfSU5dLAo+ICsJCQkJCU5VTEwsIGNkbnNfbWhkcDg1MDFfaXJxX3Ro cmVhZCwKPiArCQkJCQlJUlFGX09ORVNIT1QsIGRldl9uYW1lKGRldiksIG1oZHApOwo+ICsJaWYg KHJldCA8IDApIHsKPiArCQlkZXZfZXJyKGRldiwgImNhbid0IGNsYWltIGlycSAlZFxuIiwgbWhk cC0+aXJxW0lSUV9JTl0pOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCWlycV9z ZXRfc3RhdHVzX2ZsYWdzKG1oZHAtPmlycVtJUlFfT1VUXSwgSVJRX05PQVVUT0VOKTsKPiArCXJl dCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2LCBtaGRwLT5pcnFbSVJRX09VVF0sCj4g KwkJCQkJTlVMTCwgY2Ruc19taGRwODUwMV9pcnFfdGhyZWFkLAo+ICsJCQkJCUlSUUZfT05FU0hP VCwgZGV2X25hbWUoZGV2KSwgbWhkcCk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCWRldl9lcnIo ZGV2LCAiY2FuJ3QgY2xhaW0gaXJxICVkXG4iLCBtaGRwLT5pcnFbSVJRX09VVF0pOwo+ICsJCXJl dHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCS8qIHNldCBkZWZhdWx0IGxhbmUgbWFwcGluZyAq Lwo+ICsJbWhkcC0+bGFuZV9tYXBwaW5nID0gTEFORV9NQVBQSU5HX05PUk1BTDsKPiArCj4gKwkv KiBjZG5zX21oZHA4NTAxX2R0X3BhcnNlKCkgZW5zdXJlcyBjb25uZWN0b3JfdHlwZSBpcyB2YWxp ZCAqLwo+ICsJbWhkcC0+cGxhdF9kYXRhID0gb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7 Cj4gKwlpZiAobWhkcC0+Y29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0Rpc3Bs YXlQb3J0KSB7Cj4gKwkJbWhkcC0+bGFuZV9tYXBwaW5nID0gbWhkcC0+cGxhdF9kYXRhLT5kcF9s YW5lX21hcHBpbmc7Cj4gKwkJcGh5X21vZGUgPSBQSFlfTU9ERV9EUDsKPiArCX0gZWxzZSBpZiAo bWhkcC0+Y29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0hETUlBKSB7Cj4gKwkJ bWhkcC0+bGFuZV9tYXBwaW5nID0gbWhkcC0+cGxhdF9kYXRhLT5oZG1pX2xhbmVfbWFwcGluZzsK PiArCQlwaHlfbW9kZSA9IFBIWV9NT0RFX0hETUk7Cj4gKwl9CgpPbiBpbXg4bXEtemlpLXVsdHJh IGJvYXJkIGxhbmUgbWFwcGluZyBkb2Vzbid0IGZvbGxvdyB5b3VyIGRlZmF1bHQgc2V0dGluZy4K UGxlYXNlIGFkZCBhICJsYW5lLW1hcHBpbmciIHByb3BlcnR5IGluIHRoZSBEVCB0byBhbGxvdyB0 byBjdXN0b21pemVkIHRoaXMgc2V0dGluZyBmb3IgZWFjaCBib2FyZC4KWW91IGNhbiBtYWtlIGl0 IG9wdGlvbmFsIGFuZCBrZWVwIHRoZSBkZWZhdWx0IHZhbHVlIHdoZW4gdGhlIHByb3BlcnR5IGlz IG1pc3Npbmcgb24gdGhlIERUIG5vZGUuCgpSZWdhcmRzLApCZW5qYW1pbgoKPiArCj4gKwlkZXZf c2V0X2RydmRhdGEoZGV2LCBtaGRwKTsKPiArCj4gKwkvKiBpbml0IGJhc2Ugc3RydWN0IGZvciBh Y2Nlc3MgbWhkcCBtYWlsYm94ICovCj4gKwltaGRwLT5iYXNlLmRldiA9IG1oZHAtPmRldjsKPiAr CW1oZHAtPmJhc2UucmVncyA9IG1oZHAtPnJlZ3M7Cj4gKwltaGRwLT5iYXNlLm1ib3hfbXV0ZXgg PSAmbWhkcC0+bWJveF9tdXRleDsKPiArCj4gKwlpZiAobWhkcC0+Y29ubmVjdG9yX3R5cGUgPT0g RFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0KSB7Cj4gKwkJZHJtX2RwX2F1eF9pbml0KCZt aGRwLT5kcC5hdXgpOwo+ICsJCW1oZHAtPmRwLmF1eC5uYW1lID0gIm1oZHA4NTAxX2RwX2F1eCI7 Cj4gKwkJbWhkcC0+ZHAuYXV4LmRldiA9IGRldjsKPiArCQltaGRwLT5kcC5hdXgudHJhbnNmZXIg PSBjZG5zX2RwX2F1eF90cmFuc2ZlcjsKPiArCX0KPiArCj4gKwkvKiBFbmFibGUgQVBCIGNsb2Nr ICovCj4gKwltaGRwLT5hcGJfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgTlVMTCk7Cj4gKwlpZiAo SVNfRVJSKG1oZHAtPmFwYl9jbGspKQo+ICsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRS X0VSUihtaGRwLT5hcGJfY2xrKSwKPiArCQkJCSAgICAgImNvdWxkbid0IGdldCBhcGIgY2xrXG4i KTsKPiArCj4gKwljbGtfcHJlcGFyZV9lbmFibGUobWhkcC0+YXBiX2Nsayk7Cj4gKwo+ICsJLyoK PiArCSAqIFdhaXQgZm9yIHRoZSBLRUVQX0FMSVZFICJtZXNzYWdlIiBvbiB0aGUgZmlyc3QgOCBi aXRzLgo+ICsJICogVXBkYXRlZCBlYWNoIHNjaGVkICJ0aWNrIiAofjJtcykKPiArCSAqLwo+ICsJ cmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KG1oZHAtPnJlZ3MgKyBLRUVQX0FMSVZFLCByZWcsCj4g KwkJCQkgcmVnICYgQ0ROU19LRUVQX0FMSVZFX01BU0ssIDUwMCwKPiArCQkJCSBDRE5TX0tFRVBf QUxJVkVfVElNRU9VVCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2VycihkZXYsICJkZXZpY2Ug ZGlkbid0IGdpdmUgYW55IGxpZmUgc2lnbjogcmVnICVkXG4iLCByZWcpOwo+ICsJCWdvdG8gY2xr X2Rpc2FibGU7Cj4gKwl9Cj4gKwo+ICsJLyogTWFpbGJveCBwcm90ZWN0IGZvciBIRE1JIFBIWSBh Y2Nlc3MgKi8KPiArCW11dGV4X2xvY2soJm1oZHAtPm1ib3hfbXV0ZXgpOwo+ICsJcmV0ID0gcGh5 X2luaXQobWhkcC0+cGh5KTsKPiArCW11dGV4X3VubG9jaygmbWhkcC0+bWJveF9tdXRleCk7Cj4g KwlpZiAocmV0KSB7Cj4gKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBQSFk6 ICVkXG4iLCByZXQpOwo+ICsJCWdvdG8gY2xrX2Rpc2FibGU7Cj4gKwl9Cj4gKwo+ICsJLyogTWFp bGJveCBwcm90ZWN0IGZvciBIRE1JIFBIWSBhY2Nlc3MgKi8KPiArCW11dGV4X2xvY2soJm1oZHAt Pm1ib3hfbXV0ZXgpOwo+ICsJcmV0ID0gcGh5X3NldF9tb2RlKG1oZHAtPnBoeSwgcGh5X21vZGUp Owo+ICsJbXV0ZXhfdW5sb2NrKCZtaGRwLT5tYm94X211dGV4KTsKPiArCWlmIChyZXQpIHsKPiAr CQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBjb25maWd1cmUgUEhZOiAlZFxuIiwgcmV0KTsKPiAr CQlnb3RvIGNsa19kaXNhYmxlOwo+ICsJfQo+ICsKPiArCS8qIEVuYWJsZSBjYWJsZSBob3RwbHVn IGRldGVjdCAqLwo+ICsJaWYgKGNkbnNfbWhkcDg1MDFfcmVhZF9ocGQobWhkcCkpCj4gKwkJZW5h YmxlX2lycShtaGRwLT5pcnFbSVJRX09VVF0pOwo+ICsJZWxzZQo+ICsJCWVuYWJsZV9pcnEobWhk cC0+aXJxW0lSUV9JTl0pOwo+ICsKPiArCWNkbnNfbWhkcDg1MDFfYWRkX2JyaWRnZShtaGRwKTsK PiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK2Nsa19kaXNhYmxlOgo+ICsJY2xrX2Rpc2FibGVfdW5w cmVwYXJlKG1oZHAtPmFwYl9jbGspOwo+ICsKPiArCXJldHVybiAtRUlOVkFMOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBjZG5zX21oZHA4NTAxX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgY2Ruc19taGRwODUwMV9kZXZpY2UgKm1oZHAgPSBwbGF0 Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKPiArCj4gKwlpZiAobWhkcC0+Y29ubmVjdG9yX3R5cGUg PT0gRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0KQo+ICsJCWNkbnNfZHBfYXV4X2Rlc3Ry b3kobWhkcCk7Cj4gKwo+ICsJZHJtX2JyaWRnZV9yZW1vdmUoJm1oZHAtPmJyaWRnZSk7Cj4gKwlj bGtfZGlzYWJsZV91bnByZXBhcmUobWhkcC0+YXBiX2Nsayk7Cj4gK30KPiArCj4gK3N0YXRpYyBz dHJ1Y3QgbWhkcDg1MDFfcGxhdF9kYXRhIGlteDhtcV9taGRwX2Rydl9kYXRhID0gewo+ICsJLmhk bWlfbGFuZV9tYXBwaW5nID0gTEFORV9NQVBQSU5HX0ZMSVBQRUQsCj4gKwkuZHBfbGFuZV9tYXBw aW5nID0gTEFORV9NQVBQSU5HX0lNWDhNUV9EUCwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBz dHJ1Y3Qgb2ZfZGV2aWNlX2lkIGNkbnNfbWhkcDg1MDFfZHRfaWRzW10gPSB7Cj4gKwl7IC5jb21w YXRpYmxlID0gImZzbCxpbXg4bXEtbWhkcDg1MDEiLAo+ICsJICAuZGF0YSA9ICZpbXg4bXFfbWhk cF9kcnZfZGF0YQo+ICsJfSwKPiArCXsgfSwKPiArfTsKPiArTU9EVUxFX0RFVklDRV9UQUJMRShv ZiwgY2Ruc19taGRwODUwMV9kdF9pZHMpOwo+ICsKPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9k cml2ZXIgY2Ruc19taGRwODUwMV9kcml2ZXIgPSB7Cj4gKwkucHJvYmUgPSBjZG5zX21oZHA4NTAx X3Byb2JlLAo+ICsJLnJlbW92ZSA9IGNkbnNfbWhkcDg1MDFfcmVtb3ZlLAo+ICsJLmRyaXZlciA9 IHsKPiArCQkubmFtZSA9ICJjZG5zLW1oZHA4NTAxIiwKPiArCQkub2ZfbWF0Y2hfdGFibGUgPSBj ZG5zX21oZHA4NTAxX2R0X2lkcywKPiArCX0sCj4gK307Cj4gKwo+ICttb2R1bGVfcGxhdGZvcm1f ZHJpdmVyKGNkbnNfbWhkcDg1MDFfZHJpdmVyKTsKPiArCj4gK01PRFVMRV9BVVRIT1IoIlNhbmRv ciBZdSA8c2FuZG9yLnl1QG54cC5jb20+Iik7Cj4gK01PRFVMRV9ERVNDUklQVElPTigiQ2FkZW5j ZSBNSERQODUwMSBicmlkZ2UgZHJpdmVyIik7Cj4gK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9jYWRlbmNlL2NkbnMtbWhkcDg1MDEt Y29yZS5oIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9jYWRlbmNlL2NkbnMtbWhkcDg1MDEtY29y ZS5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjU5MzA3MWYz Njk5NQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2NhZGVu Y2UvY2Rucy1taGRwODUwMS1jb3JlLmgKPiBAQCAtMCwwICsxLDM2NyBAQAo+ICsvKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwo+ICsvKgo+ICsgKiBDYWRlbmNlIE1IRFAgODUw MSBDb21tb24gaGVhZCBmaWxlCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDI0IE5Y UCBTZW1pY29uZHVjdG9yLCBJbmMuCj4gKyAqCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfQ0ROU19N SERQODUwMV9DT1JFX0hfCj4gKyNkZWZpbmUgX0NETlNfTUhEUDg1MDFfQ09SRV9IXwo+ICsKPiAr I2luY2x1ZGUgPGRybS9icmlkZ2UvY2Rucy1taGRwLWhlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJt L2RybV9icmlkZ2UuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fY29ubmVjdG9yLmg+Cj4gKyNpbmNs dWRlIDxkcm0vZGlzcGxheS9kcm1fZHBfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9iaXRv cHMuaD4KPiArCj4gKyNkZWZpbmUgQUREUl9JTUVNCQkJMHgxMDAwMAo+ICsjZGVmaW5lIEFERFJf RE1FTQkJCTB4MjAwMDAKPiArCj4gKy8qIEFQQiBDRkcgYWRkciAqLwo+ICsjZGVmaW5lIEFQQl9D VFJMCQkJMAo+ICsjZGVmaW5lIFhUX0lOVF9DVFJMCQkJMHgwNAo+ICsjZGVmaW5lIE1BSUxCT1hf RlVMTF9BRERSCQkweDA4Cj4gKyNkZWZpbmUgTUFJTEJPWF9FTVBUWV9BRERSCQkweDBjCj4gKyNk ZWZpbmUgTUFJTEJPWDBfV1JfREFUQQkJMHgxMAo+ICsjZGVmaW5lIE1BSUxCT1gwX1JEX0RBVEEJ CTB4MTQKPiArI2RlZmluZSBLRUVQX0FMSVZFCQkJMHgxOAo+ICsjZGVmaW5lIFZFUl9MCQkJCTB4 MWMKPiArI2RlZmluZSBWRVJfSAkJCQkweDIwCj4gKyNkZWZpbmUgVkVSX0xJQl9MX0FERFIJCQkw eDI0Cj4gKyNkZWZpbmUgVkVSX0xJQl9IX0FERFIJCQkweDI4Cj4gKyNkZWZpbmUgU1dfREVCVUdf TAkJCTB4MmMKPiArI2RlZmluZSBTV19ERUJVR19ICQkJMHgzMAo+ICsjZGVmaW5lIE1BSUxCT1hf SU5UX01BU0sJCTB4MzQKPiArI2RlZmluZSBNQUlMQk9YX0lOVF9TVEFUVVMJCTB4MzgKPiArI2Rl ZmluZSBTV19DTEtfTAkJCTB4M2MKPiArI2RlZmluZSBTV19DTEtfSAkJCTB4NDAKPiArI2RlZmlu ZSBTV19FVkVOVFMwCQkJMHg0NAo+ICsjZGVmaW5lIFNXX0VWRU5UUzEJCQkweDQ4Cj4gKyNkZWZp bmUgU1dfRVZFTlRTMgkJCTB4NGMKPiArI2RlZmluZSBTV19FVkVOVFMzCQkJMHg1MAo+ICsjZGVm aW5lIFhUX09DRF9DVFJMCQkJMHg2MAo+ICsjZGVmaW5lIEFQQl9JTlRfTUFTSwkJCTB4NmMKPiAr I2RlZmluZSBBUEJfU1RBVFVTX01BU0sJCQkweDcwCj4gKwo+ICsvKiBTb3VyY2UgcGh5IGNvbXAg Ki8KPiArI2RlZmluZSBQSFlfREFUQV9TRUwJCQkweDA4MTgKPiArI2RlZmluZSBMQU5FU19DT05G SUcJCQkweDA4MTQKPiArCj4gKy8qIFNvdXJjZSBDQVIgQWRkciAqLwo+ICsjZGVmaW5lIFNPVVJD RV9IRFRYX0NBUgkJCTB4MDkwMAo+ICsjZGVmaW5lIFNPVVJDRV9EUFRYX0NBUgkJCTB4MDkwNAo+ ICsjZGVmaW5lIFNPVVJDRV9QSFlfQ0FSCQkJMHgwOTA4Cj4gKyNkZWZpbmUgU09VUkNFX0NFQ19D QVIJCQkweDA5MGMKPiArI2RlZmluZSBTT1VSQ0VfQ0JVU19DQVIJCQkweDA5MTAKPiArI2RlZmlu ZSBTT1VSQ0VfUEtUX0NBUgkJCTB4MDkxOAo+ICsjZGVmaW5lIFNPVVJDRV9BSUZfQ0FSCQkJMHgw OTFjCj4gKyNkZWZpbmUgU09VUkNFX0NJUEhFUl9DQVIJCTB4MDkyMAo+ICsjZGVmaW5lIFNPVVJD RV9DUllQVE9fQ0FSCQkweDA5MjQKPiArCj4gKy8qIGNsb2NrIG1ldGVycyBhZGRyICovCj4gKyNk ZWZpbmUgQ01fQ1RSTAkJCQkweDBhMDAKPiArI2RlZmluZSBDTV9JMlNfQ1RSTAkJCTB4MGEwNAo+ ICsjZGVmaW5lIENNX1NQRElGX0NUUkwJCQkweDBhMDgKPiArI2RlZmluZSBDTV9WSURfQ1RSTAkJ CTB4MGEwYwo+ICsjZGVmaW5lIENNX0xBTkVfQ1RSTAkJCTB4MGExMAo+ICsjZGVmaW5lIEkyU19O TV9TVEFCTEUJCQkweDBhMTQKPiArI2RlZmluZSBJMlNfTkNUU19TVEFCTEUJCQkweDBhMTgKPiAr I2RlZmluZSBTUERJRl9OTV9TVEFCTEUJCQkweDBhMWMKPiArI2RlZmluZSBTUERJRl9OQ1RTX1NU QUJMRQkJMHgwYTIwCj4gKyNkZWZpbmUgTk1WSURfTUVBU19TVEFCTEUJCTB4MGEyNAo+ICsjZGVm aW5lIEkyU19NRUFTCQkJMHgwYTQwCj4gKyNkZWZpbmUgU1BESUZfTUVBUwkJCTB4MGE4MAo+ICsj ZGVmaW5lIE5NVklEX01FQVMJCQkweDBhYzAKPiArCj4gKy8qIHNvdXJjZSB2aWYgYWRkciAqLwo+ ICsjZGVmaW5lIEJORF9IU1lOQzJWU1lOQwkJCTB4MGIwMAo+ICsjZGVmaW5lIEhTWU5DMlZTWU5D X0YxX0wxCQkweDBiMDQKPiArI2RlZmluZSBIU1lOQzJWU1lOQ19TVEFUVVMJCTB4MGIwYwo+ICsj ZGVmaW5lIEhTWU5DMlZTWU5DX1BPTF9DVFJMCQkweDBiMTAKPiArCj4gKy8qIE1IRFAgVFhfdG9w X2NvbXAgKi8KPiArI2RlZmluZSBTQ0hFRFVMRVJfSF9TSVpFCQkweDEwMDAKPiArI2RlZmluZSBT Q0hFRFVMRVJfVl9TSVpFCQkweDEwMDQKPiArI2RlZmluZSBIRFRYX1NJR05BTF9GUk9OVF9XSURU SAkJMHgxMDBjCj4gKyNkZWZpbmUgSERUWF9TSUdOQUxfU1lOQ19XSURUSAkJMHgxMDEwCj4gKyNk ZWZpbmUgSERUWF9TSUdOQUxfQkFDS19XSURUSAkJMHgxMDE0Cj4gKyNkZWZpbmUgSERUWF9DT05U Uk9MTEVSCQkJMHgxMDE4Cj4gKyNkZWZpbmUgSERUWF9IUEQJCQkweDEwMjAKPiArI2RlZmluZSBI RFRYX0NMT0NLX1JFR18wCQkweDEwMjQKPiArI2RlZmluZSBIRFRYX0NMT0NLX1JFR18xCQkweDEw MjgKPiArCj4gKy8qIERQVFggaHBkIGFkZHIgKi8KPiArI2RlZmluZSBIUERfSVJRX0RFVF9NSU5f VElNRVIJCTB4MjEwMAo+ICsjZGVmaW5lIEhQRF9JUlFfREVUX01BWF9USU1FUgkJMHgyMTA0Cj4g KyNkZWZpbmUgSFBEX1VOUExHRURfREVUX01JTl9USU1FUgkweDIxMDgKPiArI2RlZmluZSBIUERf U1RBQkxFX1RJTUVSCQkweDIxMGMKPiArI2RlZmluZSBIUERfRklMVEVSX1RJTUVSCQkweDIxMTAK PiArI2RlZmluZSBIUERfRVZFTlRfTUFTSwkJCTB4MjExYwo+ICsjZGVmaW5lIEhQRF9FVkVOVF9E RVQJCQkweDIxMjAKPiArCj4gKy8qIERQVFggZnJhbWVyIGFkZHIgKi8KPiArI2RlZmluZSBEUF9G UkFNRVJfR0xPQkFMX0NPTkZJRwkJMHgyMjAwCj4gKyNkZWZpbmUgRFBfU1dfUkVTRVQJCQkweDIy MDQKPiArI2RlZmluZSBEUF9GUkFNRVJfVFUJCQkweDIyMDgKPiArI2RlZmluZSBEUF9GUkFNRVJf UFhMX1JFUFIJCTB4MjIwYwo+ICsjZGVmaW5lIERQX0ZSQU1FUl9TUAkJCTB4MjIxMAo+ICsjZGVm aW5lIEFVRElPX1BBQ0tfQ09OVFJPTAkJMHgyMjE0Cj4gKyNkZWZpbmUgRFBfVkNfVEFCTEUoeCkJ CQkoMHgyMjE4ICsgKCh4KSA8PCAyKSkKPiArI2RlZmluZSBEUF9WQl9JRAkJCTB4MjI1OAo+ICsj ZGVmaW5lIERQX01UUEhfTFZQX0NPTlRST0wJCTB4MjI1Ywo+ICsjZGVmaW5lIERQX01UUEhfU1lN Qk9MX1ZBTFVFUwkJMHgyMjYwCj4gKyNkZWZpbmUgRFBfTVRQSF9FQ0ZfQ09OVFJPTAkJMHgyMjY0 Cj4gKyNkZWZpbmUgRFBfTVRQSF9BQ1RfQ09OVFJPTAkJMHgyMjY4Cj4gKyNkZWZpbmUgRFBfTVRQ SF9TVEFUVVMJCQkweDIyNmMKPiArI2RlZmluZSBEUF9JTlRFUlJVUFRfU09VUkNFCQkweDIyNzAK PiArI2RlZmluZSBEUF9JTlRFUlJVUFRfTUFTSwkJMHgyMjc0Cj4gKyNkZWZpbmUgRFBfRlJPTlRf QkFDS19QT1JDSAkJMHgyMjc4Cj4gKyNkZWZpbmUgRFBfQllURV9DT1VOVAkJCTB4MjI3Ywo+ICsK PiArLyogRFBUWCBzdHJlYW0gYWRkciAqLwo+ICsjZGVmaW5lIE1TQV9IT1JJWk9OVEFMXzAJCTB4 MjI4MAo+ICsjZGVmaW5lIE1TQV9IT1JJWk9OVEFMXzEJCTB4MjI4NAo+ICsjZGVmaW5lIE1TQV9W RVJUSUNBTF8wCQkJMHgyMjg4Cj4gKyNkZWZpbmUgTVNBX1ZFUlRJQ0FMXzEJCQkweDIyOGMKPiAr I2RlZmluZSBNU0FfTUlTQwkJCTB4MjI5MAo+ICsjZGVmaW5lIFNUUkVBTV9DT05GSUcJCQkweDIy OTQKPiArI2RlZmluZSBBVURJT19QQUNLX1NUQVRVUwkJMHgyMjk4Cj4gKyNkZWZpbmUgVklGX1NU QVRVUwkJCTB4MjI5Ywo+ICsjZGVmaW5lIFBDS19TVFVGRl9TVEFUVVNfMAkJMHgyMmEwCj4gKyNk ZWZpbmUgUENLX1NUVUZGX1NUQVRVU18xCQkweDIyYTQKPiArI2RlZmluZSBJTkZPX1BBQ0tfU1RB VFVTCQkweDIyYTgKPiArI2RlZmluZSBSQVRFX0dPVkVSTk9SX1NUQVRVUwkJMHgyMmFjCj4gKyNk ZWZpbmUgRFBfSE9SSVpPTlRBTAkJCTB4MjJiMAo+ICsjZGVmaW5lIERQX1ZFUlRJQ0FMXzAJCQkw eDIyYjQKPiArI2RlZmluZSBEUF9WRVJUSUNBTF8xCQkJMHgyMmI4Cj4gKyNkZWZpbmUgRFBfQkxP Q0tfU0RQCQkJMHgyMmJjCj4gKwo+ICsvKiBEUFRYIGdsYmwgYWRkciAqLwo+ICsjZGVmaW5lIERQ VFhfTEFORV9FTgkJCTB4MjMwMAo+ICsjZGVmaW5lIERQVFhfRU5ITkNECQkJMHgyMzA0Cj4gKyNk ZWZpbmUgRFBUWF9JTlRfTUFTSwkJCTB4MjMwOAo+ICsjZGVmaW5lIERQVFhfSU5UX1NUQVRVUwkJ CTB4MjMwYwo+ICsKPiArLyogRFAgQVVYIEFkZHIgKi8KPiArI2RlZmluZSBEUF9BVVhfSE9TVF9D T05UUk9MCQkweDI4MDAKPiArI2RlZmluZSBEUF9BVVhfSU5URVJSVVBUX1NPVVJDRQkJMHgyODA0 Cj4gKyNkZWZpbmUgRFBfQVVYX0lOVEVSUlVQVF9NQVNLCQkweDI4MDgKPiArI2RlZmluZSBEUF9B VVhfU1dBUF9JTlZFUlNJT05fQ09OVFJPTAkweDI4MGMKPiArI2RlZmluZSBEUF9BVVhfU0VORF9O QUNLX1RSQU5TQUNUSU9OCTB4MjgxMAo+ICsjZGVmaW5lIERQX0FVWF9DTEVBUl9SWAkJCTB4Mjgx NAo+ICsjZGVmaW5lIERQX0FVWF9DTEVBUl9UWAkJCTB4MjgxOAo+ICsjZGVmaW5lIERQX0FVWF9U SU1FUl9TVE9QCQkweDI4MWMKPiArI2RlZmluZSBEUF9BVVhfVElNRVJfQ0xFQVIJCTB4MjgyMAo+ ICsjZGVmaW5lIERQX0FVWF9SRVNFVF9TVwkJCTB4MjgyNAo+ICsjZGVmaW5lIERQX0FVWF9ESVZJ REVfMk0JCTB4MjgyOAo+ICsjZGVmaW5lIERQX0FVWF9UWF9QUkVBQ0hBUkdFX0xFTkdUSAkweDI4 MmMKPiArI2RlZmluZSBEUF9BVVhfRlJFUVVFTkNZXzFNX01BWAkJMHgyODMwCj4gKyNkZWZpbmUg RFBfQVVYX0ZSRVFVRU5DWV8xTV9NSU4JCTB4MjgzNAo+ICsjZGVmaW5lIERQX0FVWF9SWF9QUkVf TUlOCQkweDI4MzgKPiArI2RlZmluZSBEUF9BVVhfUlhfUFJFX01BWAkJMHgyODNjCj4gKyNkZWZp bmUgRFBfQVVYX1RJTUVSX1BSRVNFVAkJMHgyODQwCj4gKyNkZWZpbmUgRFBfQVVYX05BQ0tfRk9S TUFUCQkweDI4NDQKPiArI2RlZmluZSBEUF9BVVhfVFhfREFUQQkJCTB4Mjg0OAo+ICsjZGVmaW5l IERQX0FVWF9SWF9EQVRBCQkJMHgyODRjCj4gKyNkZWZpbmUgRFBfQVVYX1RYX1NUQVRVUwkJMHgy ODUwCj4gKyNkZWZpbmUgRFBfQVVYX1JYX1NUQVRVUwkJMHgyODU0Cj4gKyNkZWZpbmUgRFBfQVVY X1JYX0NZQ0xFX0NPVU5URVIJCTB4Mjg1OAo+ICsjZGVmaW5lIERQX0FVWF9NQUlOX1NUQVRFUwkJ MHgyODVjCj4gKyNkZWZpbmUgRFBfQVVYX01BSU5fVElNRVIJCTB4Mjg2MAo+ICsjZGVmaW5lIERQ X0FVWF9BRkVfT1VUCQkJMHgyODY0Cj4gKwo+ICsvKiBzb3VyY2UgcGlmIGFkZHIgKi8KPiArI2Rl ZmluZSBTT1VSQ0VfUElGX1dSX0FERFIJCTB4MzA4MDAKPiArI2RlZmluZSBTT1VSQ0VfUElGX1dS X1JFUQkJMHgzMDgwNAo+ICsjZGVmaW5lIFNPVVJDRV9QSUZfUkRfQUREUgkJMHgzMDgwOAo+ICsj ZGVmaW5lIFNPVVJDRV9QSUZfUkRfUkVRCQkweDMwODBjCj4gKyNkZWZpbmUgU09VUkNFX1BJRl9E QVRBX1dSCQkweDMwODEwCj4gKyNkZWZpbmUgU09VUkNFX1BJRl9EQVRBX1JECQkweDMwODE0Cj4g KyNkZWZpbmUgU09VUkNFX1BJRl9GSUZPMV9GTFVTSAkJMHgzMDgxOAo+ICsjZGVmaW5lIFNPVVJD RV9QSUZfRklGTzJfRkxVU0gJCTB4MzA4MWMKPiArI2RlZmluZSBTT1VSQ0VfUElGX1NUQVRVUwkJ MHgzMDgyMAo+ICsjZGVmaW5lIFNPVVJDRV9QSUZfSU5URVJSVVBUX1NPVVJDRQkweDMwODI0Cj4g KyNkZWZpbmUgU09VUkNFX1BJRl9JTlRFUlJVUFRfTUFTSwkweDMwODI4Cj4gKyNkZWZpbmUgU09V UkNFX1BJRl9QS1RfQUxMT0NfUkVHCTB4MzA4MmMKPiArI2RlZmluZSBTT1VSQ0VfUElGX1BLVF9B TExPQ19XUl9FTgkweDMwODMwCj4gKyNkZWZpbmUgU09VUkNFX1BJRl9TV19SRVNFVAkJMHgzMDgz NAo+ICsKPiArI2RlZmluZSBMSU5LX1RSQUlOSU5HX05PVF9BQ1RJVgkJMAo+ICsjZGVmaW5lIExJ TktfVFJBSU5JTkdfUlVOCQkxCj4gKyNkZWZpbmUgTElOS19UUkFJTklOR19SRVNUQVJUCQkyCj4g Kwo+ICsjZGVmaW5lIENPTlRST0xfVklERU9fSURMRQkJMAo+ICsjZGVmaW5lIENPTlRST0xfVklE RU9fVkFMSUQJCTEKPiArCj4gKyNkZWZpbmUgSU5URVJMQUNFX0ZNVF9ERVQJCUJJVCgxMikKPiAr I2RlZmluZSBWSUZfQllQQVNTX0lOVEVSTEFDRQkJQklUKDEzKQo+ICsjZGVmaW5lIFRVX0NOVF9S U1RfRU4JCQlCSVQoMTUpCj4gKyNkZWZpbmUgSU5URVJMQUNFX0RUQ1RfV0lOCQkweDIwCj4gKwo+ ICsjZGVmaW5lIERQX0ZSQU1FUl9TUF9JTlRFUkxBQ0VfRU4JQklUKDIpCj4gKyNkZWZpbmUgRFBf RlJBTUVSX1NQX0hTUAkJQklUKDEpCj4gKyNkZWZpbmUgRFBfRlJBTUVSX1NQX1ZTUAkJQklUKDAp Cj4gKwo+ICsvKiBDYXBhYmlsaXR5ICovCj4gKyNkZWZpbmUgQVVYX0hPU1RfSU5WRVJUCQkJMwo+ ICsjZGVmaW5lIEZBU1RfTFRfU1VQUE9SVAkJCTEKPiArI2RlZmluZSBGQVNUX0xUX05PVF9TVVBQ T1JUCQkwCj4gKyNkZWZpbmUgTEFORV9NQVBQSU5HX05PUk1BTAkJMHgxYgo+ICsjZGVmaW5lIExB TkVfTUFQUElOR19GTElQUEVECQkweGU0Cj4gKyNkZWZpbmUgTEFORV9NQVBQSU5HX0lNWDhNUV9E UAkJMHhjNgo+ICsjZGVmaW5lIEVOSEFOQ0VECQkJMQo+ICsjZGVmaW5lIFNDUkFNQkxFUl9FTgkJ CUJJVCg0KQo+ICsKPiArI2RlZmluZSBGVUxMX0xUX1NUQVJURUQJCQlCSVQoMCkKPiArI2RlZmlu ZSBGQVNFX0xUX1NUQVJURUQJCQlCSVQoMSkKPiArI2RlZmluZSBDTEtfUkVDT1ZFUllfRklOSVNI RUQJCUJJVCgyKQo+ICsjZGVmaW5lIEVRX1BIQVNFX0ZJTklTSEVECQlCSVQoMykKPiArI2RlZmlu ZSBGQVNFX0xUX1NUQVJUX0ZJTklTSEVECQlCSVQoNCkKPiArI2RlZmluZSBDTEtfUkVDT1ZFUllf RkFJTEVECQlCSVQoNSkKPiArI2RlZmluZSBFUV9QSEFTRV9GQUlMRUQJCQlCSVQoNikKPiArI2Rl ZmluZSBGQVNFX0xUX0ZBSUxFRAkJCUJJVCg3KQo+ICsKPiArI2RlZmluZSBUVV9TSVpFCQkJCTMw Cj4gKyNkZWZpbmUgQ0ROU19EUF9NQVhfTElOS19SQVRFCQk1NDAwMDAKPiArCj4gKyNkZWZpbmUg Rl9IRE1JX0VOQ09ESU5HKHgpICgoKHgpICYgKCgxIDw8IDIpIC0gMSkpIDw8IDE2KQo+ICsjZGVm aW5lIEZfVklGX0RBVEFfV0lEVEgoeCkgKCgoeCkgJiAoKDEgPDwgMikgLSAxKSkgPDwgMikKPiAr I2RlZmluZSBGX0hETUlfTU9ERSh4KSAoKCh4KSAmICgoMSA8PCAyKSAtIDEpKSA8PCAwKQo+ICsj ZGVmaW5lIEZfR0NQX0VOKHgpICgoKHgpICYgKCgxIDw8IDEpIC0gMSkpIDw8IDEyKQo+ICsjZGVm aW5lIEZfREFUQV9FTih4KSAoKCh4KSAmICgoMSA8PCAxKSAtIDEpKSA8PCAxNSkKPiArI2RlZmlu ZSBGX0NMRUFSX0FWTVVURSh4KSAoKCh4KSAmICgoMSA8PCAxKSAtIDEpKSA8PCAxNCkKPiArI2Rl ZmluZSBGX0hETUkyX1BSRUFNQkxFX0VOKHgpICgoKHgpICYgKCgxIDw8IDEpIC0gMSkpIDw8IDE4 KQo+ICsjZGVmaW5lIEZfUElDXzNEKHgpICgoKHgpICYgKCgxIDw8IDQpIC0gMSkpIDw8IDcpCj4g KyNkZWZpbmUgRl9CQ0hfRU4oeCkgKCgoeCkgJiAoKDEgPDwgMSkgLSAxKSkgPDwgMTEpCj4gKyNk ZWZpbmUgRl9TT1VSQ0VfUEhZX01IRFBfU0VMKHgpICgoKHgpICYgKCgxIDw8IDIpIC0gMSkpIDw8 IDMpCj4gKyNkZWZpbmUgRl9IUERfVkFMSURfV0lEVEgoeCkgKCgoeCkgJiAoKDEgPDwgMTIpIC0g MSkpIDw8IDApCj4gKyNkZWZpbmUgRl9IUERfR0xJVENIX1dJRFRIKHgpICgoKHgpICYgKCgxIDw8 IDgpIC0gMSkpIDw8IDEyKQo+ICsjZGVmaW5lIEZfSERNSTJfQ1RSTF9JTF9NT0RFKHgpICgoKHgp ICYgKCgxIDw8IDEpIC0gMSkpIDw8IDE5KQo+ICsjZGVmaW5lIEZfU09VUkNFX1BIWV9MQU5FMF9T V0FQKHgpICgoKHgpICYgKCgxIDw8IDIpIC0gMSkpIDw8IDApCj4gKyNkZWZpbmUgRl9TT1VSQ0Vf UEhZX0xBTkUxX1NXQVAoeCkgKCgoeCkgJiAoKDEgPDwgMikgLSAxKSkgPDwgMikKPiArI2RlZmlu ZSBGX1NPVVJDRV9QSFlfTEFORTJfU1dBUCh4KSAoKCh4KSAmICgoMSA8PCAyKSAtIDEpKSA8PCA0 KQo+ICsjZGVmaW5lIEZfU09VUkNFX1BIWV9MQU5FM19TV0FQKHgpICgoKHgpICYgKCgxIDw8IDIp IC0gMSkpIDw8IDYpCj4gKyNkZWZpbmUgRl9TT1VSQ0VfUEhZX0NPTUJfQllQQVNTKHgpICgoKHgp ICYgKCgxIDw8IDEpIC0gMSkpIDw8IDIxKQo+ICsjZGVmaW5lIEZfU09VUkNFX1BIWV8yMF8xMCh4 KSAoKCh4KSAmICgoMSA8PCAxKSAtIDEpKSA8PCAyMikKPiArI2RlZmluZSBGX1BLVF9BTExPQ19B RERSRVNTKHgpICgoKHgpICYgKCgxIDw8IDQpIC0gMSkpIDw8IDApCj4gKyNkZWZpbmUgRl9BQ1RJ VkVfSURMRV9UWVBFKHgpICgoKHgpICYgKCgxIDw8IDEpIC0gMSkpIDw8IDE3KQo+ICsjZGVmaW5l IEZfRklGTzFfRkxVU0goeCkgKCgoeCkgJiAoKDEgPDwgMSkgLSAxKSkgPDwgMCkKPiArI2RlZmlu ZSBGX1BLVF9BTExPQ19XUl9FTih4KSAoKCh4KSAmICgoMSA8PCAxKSAtIDEpKSA8PCAwKQo+ICsj ZGVmaW5lIEZfREFUQV9XUih4KSAoeCkKPiArI2RlZmluZSBGX1dSX0FERFIoeCkgKCgoeCkgJiAo KDEgPDwgNCkgLSAxKSkgPDwgMCkKPiArI2RlZmluZSBGX0hPU1RfV1IoeCkgKCgoeCkgJiAoKDEg PDwgMSkgLSAxKSkgPDwgMCkKPiArI2RlZmluZSBGX1RZUEVfVkFMSUQoeCkgKCgoeCkgJiAoKDEg PDwgMSkgLSAxKSkgPDwgMTYpCj4gKyNkZWZpbmUgRl9QQUNLRVRfVFlQRSh4KSAoKCh4KSAmICgo MSA8PCA4KSAtIDEpKSA8PCA4KQo+ICsKPiArLyogUmVmZXJlbmNlIGN5Y2xlcyB3aGVuIHVzaW5n IGxhbmUgY2xvY2sgYXMgcmVmZXJlbmNlICovCj4gKyNkZWZpbmUgTEFORV9SRUZfQ1lDCQkJMHg4 MDAwCj4gKwo+ICsvKiBIUEQgRGVib3VuY2UgKi8KPiArI2RlZmluZSBIT1RQTFVHX0RFQk9VTkNF X01TCQkyMDAKPiArCj4gKy8qIEhQRCBJUlEgSW5kZXggKi8KPiArI2RlZmluZSBJUlFfSU4gICAg MAo+ICsjZGVmaW5lIElSUV9PVVQgICAxCj4gKyNkZWZpbmUgSVJRX05VTSAgIDIKPiArCj4gKy8q IEZXIGNoZWNrIGFsaXZlIHRpbWVvdXQgKi8KPiArI2RlZmluZSBDRE5TX0tFRVBfQUxJVkVfVElN RU9VVAkJMjAwMAo+ICsjZGVmaW5lIENETlNfS0VFUF9BTElWRV9NQVNLCQlHRU5NQVNLKDcsIDAp Cj4gKwo+ICtlbnVtIHZvbHRhZ2Vfc3dpbmdfbGV2ZWwgewo+ICsJVk9MVEFHRV9MRVZFTF8wLAo+ ICsJVk9MVEFHRV9MRVZFTF8xLAo+ICsJVk9MVEFHRV9MRVZFTF8yLAo+ICsJVk9MVEFHRV9MRVZF TF8zLAo+ICt9Owo+ICsKPiArZW51bSBwcmVfZW1waGFzaXNfbGV2ZWwgewo+ICsJUFJFX0VNUEhB U0lTX0xFVkVMXzAsCj4gKwlQUkVfRU1QSEFTSVNfTEVWRUxfMSwKPiArCVBSRV9FTVBIQVNJU19M RVZFTF8yLAo+ICsJUFJFX0VNUEhBU0lTX0xFVkVMXzMsCj4gK307Cj4gKwo+ICtlbnVtIHBhdHRl cm5fc2V0IHsKPiArCVBUUzEgPSBCSVQoMCksCj4gKwlQVFMyID0gQklUKDEpLAo+ICsJUFRTMyA9 IEJJVCgyKSwKPiArCVBUUzQgPSBCSVQoMyksCj4gKwlEUF9OT05FCT0gQklUKDQpCj4gK307Cj4g Kwo+ICtlbnVtIHZpY19jb2xvcl9kZXB0aCB7Cj4gKwlCQ1NfNiA9IDB4MSwKPiArCUJDU184ID0g MHgyLAo+ICsJQkNTXzEwID0gMHg0LAo+ICsJQkNTXzEyID0gMHg4LAo+ICsJQkNTXzE2ID0gMHgx MCwKPiArfTsKPiArCj4gK2VudW0gdmljX2J0X3R5cGUgewo+ICsJQlRfNjAxID0gMHgwLAo+ICsJ QlRfNzA5ID0gMHgxLAo+ICt9Owo+ICsKPiArZW51bSB7Cj4gKwlNT0RFX0RWSSwKPiArCU1PREVf SERNSV8xXzQsCj4gKwlNT0RFX0hETUlfMl8wLAo+ICt9Owo+ICsKPiArc3RydWN0IHZpZGVvX2lu Zm8gewo+ICsJaW50IGJwYzsKPiArCWludCBjb2xvcl9mbXQ7Cj4gK307Cj4gKwo+ICtzdHJ1Y3Qg bWhkcDg1MDFfcGxhdF9kYXRhIHsKPiArCWludCBoZG1pX2xhbmVfbWFwcGluZzsKPiArCWludCBk cF9sYW5lX21hcHBpbmc7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgY2Ruc19taGRwODUwMV9kZXZpY2Ug ewo+ICsJc3RydWN0IGNkbnNfbWhkcF9iYXNlIGJhc2U7Cj4gKwo+ICsJc3RydWN0IGRldmljZSAq ZGV2Owo+ICsJdm9pZCBfX2lvbWVtICpyZWdzOwo+ICsJc3RydWN0IGRybV9jb25uZWN0b3IgKmN1 cnJfY29ubjsKPiArCXN0cnVjdCBkcm1fYnJpZGdlIGJyaWRnZTsKPiArCXN0cnVjdCBjbGsgKmFw Yl9jbGs7Cj4gKwlzdHJ1Y3QgcGh5ICpwaHk7Cj4gKwo+ICsJc3RydWN0IHZpZGVvX2luZm8gdmlk ZW9faW5mbzsKPiArCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIG1vZGU7Cj4gKwo+ICsJaW50IGly cVtJUlFfTlVNXTsKPiArCXN0cnVjdCBkZWxheWVkX3dvcmsgaG90cGx1Z193b3JrOwo+ICsJaW50 IGNvbm5lY3Rvcl90eXBlOwo+ICsJdTMyIGxhbmVfbWFwcGluZzsKPiArCj4gKwkvKiBwcm90ZWN0 IG1haWxib3ggY29tbXVuaWNhdGlvbnMgd2l0aCB0aGUgZmlybXdhcmUgKi8KPiArCXN0cnVjdCBt dXRleCBtYm94X211dGV4Owo+ICsKPiArCWNvbnN0IHN0cnVjdCBtaGRwODUwMV9wbGF0X2RhdGEg KnBsYXRfZGF0YTsKPiArCj4gKwl1bmlvbiB7Cj4gKwkJc3RydWN0IF9kcF9kYXRhIHsKPiArCQkJ dTMyIHJhdGU7Cj4gKwkJCXU4IG51bV9sYW5lczsKPiArCQkJc3RydWN0IGRybV9kcF9hdXggYXV4 Owo+ICsJCQl1OCBkcGNkW0RQX1JFQ0VJVkVSX0NBUF9TSVpFXTsKPiArCQl9IGRwOwo+ICsJCXN0 cnVjdCBfaGRtaV9kYXRhIHsKPiArCQkJdTMyIGhkbWlfdHlwZTsKPiArCQkJdW5zaWduZWQgbG9u ZyBsb25nIGNoYXJfcmF0ZTsKPiArCQl9IGhkbWk7Cj4gKwl9Owo+ICt9Owo+ICsKPiArZXh0ZXJu IGNvbnN0IHN0cnVjdCBkcm1fYnJpZGdlX2Z1bmNzIGNkbnNfZHBfYnJpZGdlX2Z1bmNzOwo+ICtl eHRlcm4gY29uc3Qgc3RydWN0IGRybV9icmlkZ2VfZnVuY3MgY2Ruc19oZG1pX2JyaWRnZV9mdW5j czsKPiArCj4gK3NzaXplX3QgY2Ruc19kcF9hdXhfdHJhbnNmZXIoc3RydWN0IGRybV9kcF9hdXgg KmF1eCwgc3RydWN0IGRybV9kcF9hdXhfbXNnICptc2cpOwo+ICtlbnVtIGRybV9jb25uZWN0b3Jf c3RhdHVzIGNkbnNfbWhkcDg1MDFfZGV0ZWN0KHN0cnVjdCBjZG5zX21oZHA4NTAxX2RldmljZSAq bWhkcCk7Cj4gK2ludCBjZG5zX2RwX2F1eF9kZXN0cm95KHN0cnVjdCBjZG5zX21oZHA4NTAxX2Rl dmljZSAqbWhkcCk7Cj4gKwo+ICsjZW5kaWYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2JyaWRnZS9jYWRlbmNlL2NkbnMtbWhkcDg1MDEtZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9icmlk Z2UvY2FkZW5jZS9jZG5zLW1oZHA4NTAxLWRwLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGlu ZGV4IDAwMDAwMDAwMDAwMC4uZDhjYzMxZGFmMzIyCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9icmlkZ2UvY2FkZW5jZS9jZG5zLW1oZHA4NTAxLWRwLmMKPiBAQCAtMCww ICsxLDcwMCBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Cj4g Ky8qCj4gKyAqIENhZGVuY2UgTUhEUDg1MDEgRGlzcGxheVBvcnQoRFApIGJyaWRnZSBkcml2ZXIK PiArICoKPiArICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjQgTlhQIFNlbWljb25kdWN0b3IsIElu Yy4KPiArICoKPiArICovCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KPiAr I2luY2x1ZGUgPGRybS9kcm1fZWRpZC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9wcmludC5oPgo+ ICsjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGh5L3BoeS1k cC5oPgo+ICsKPiArI2luY2x1ZGUgImNkbnMtbWhkcDg1MDEtY29yZS5oIgo+ICsKPiArI2RlZmlu ZSBMSU5LX1RSQUlOSU5HX1RJTUVPVVRfTVMJNTAwCj4gKyNkZWZpbmUgTElOS19UUkFJTklOR19S RVRSWV9NUwkJMjAKPiArCj4gK3NzaXplX3QgY2Ruc19kcF9hdXhfdHJhbnNmZXIoc3RydWN0IGRy bV9kcF9hdXggKmF1eCwKPiArCQkJICAgICBzdHJ1Y3QgZHJtX2RwX2F1eF9tc2cgKm1zZykKPiAr ewo+ICsJc3RydWN0IGNkbnNfbWhkcDg1MDFfZGV2aWNlICptaGRwID0gZGV2X2dldF9kcnZkYXRh KGF1eC0+ZGV2KTsKPiArCWJvb2wgbmF0aXZlID0gbXNnLT5yZXF1ZXN0ICYgKERQX0FVWF9OQVRJ VkVfV1JJVEUgJiBEUF9BVVhfTkFUSVZFX1JFQUQpOwo+ICsJaW50IHJldDsKPiArCj4gKwkvKiBJ Z25vcmUgYWRkcmVzcyBvbmx5IG1lc3NhZ2UgKi8KPiArCWlmICghbXNnLT5zaXplIHx8ICFtc2ct PmJ1ZmZlcikgewo+ICsJCW1zZy0+cmVwbHkgPSBuYXRpdmUgPwo+ICsJCQlEUF9BVVhfTkFUSVZF X1JFUExZX0FDSyA6IERQX0FVWF9JMkNfUkVQTFlfQUNLOwo+ICsJCXJldHVybiBtc2ctPnNpemU7 Cj4gKwl9Cj4gKwo+ICsJaWYgKCFuYXRpdmUpIHsKPiArCQlkZXZfZXJyKG1oZHAtPmRldiwgIiVz OiBvbmx5IG5hdGl2ZSBtZXNzYWdlcyBzdXBwb3J0ZWRcbiIsIF9fZnVuY19fKTsKPiArCQlyZXR1 cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwkvKiBtc2cgc2FuaXR5IGNoZWNrICovCj4gKwlpZiAo bXNnLT5zaXplID4gRFBfQVVYX01BWF9QQVlMT0FEX0JZVEVTKSB7Cj4gKwkJZGV2X2VycihtaGRw LT5kZXYsICIlczogaW52YWxpZCBtc2c6IHNpemUoJXp1KSwgcmVxdWVzdCgleClcbiIsCj4gKwkJ CV9fZnVuY19fLCBtc2ctPnNpemUsICh1bnNpZ25lZCBpbnQpbXNnLT5yZXF1ZXN0KTsKPiArCQly ZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlpZiAobXNnLT5yZXF1ZXN0ID09IERQX0FVWF9O QVRJVkVfV1JJVEUpIHsKPiArCQljb25zdCB1OCAqYnVmID0gbXNnLT5idWZmZXI7Cj4gKwkJaW50 IGk7Cj4gKwo+ICsJCWZvciAoaSA9IDA7IGkgPCBtc2ctPnNpemU7ICsraSkgewo+ICsJCQlyZXQg PSBjZG5zX21oZHBfZHBjZF93cml0ZSgmbWhkcC0+YmFzZSwKPiArCQkJCQkJICAgbXNnLT5hZGRy ZXNzICsgaSwgYnVmW2ldKTsKPiArCQkJaWYgKHJldCA8IDApIHsKPiArCQkJCWRldl9lcnIobWhk cC0+ZGV2LCAiRmFpbGVkIHRvIHdyaXRlIERQQ0RcbiIpOwo+ICsJCQkJcmV0dXJuIHJldDsKPiAr CQkJfQo+ICsJCX0KPiArCQltc2ctPnJlcGx5ID0gRFBfQVVYX05BVElWRV9SRVBMWV9BQ0s7Cj4g KwkJcmV0dXJuIG1zZy0+c2l6ZTsKPiArCX0KPiArCj4gKwlpZiAobXNnLT5yZXF1ZXN0ID09IERQ X0FVWF9OQVRJVkVfUkVBRCkgewo+ICsJCXJldCA9IGNkbnNfbWhkcF9kcGNkX3JlYWQoJm1oZHAt PmJhc2UsIG1zZy0+YWRkcmVzcywKPiArCQkJCQkgIG1zZy0+YnVmZmVyLCBtc2ctPnNpemUpOwo+ ICsJCWlmIChyZXQgPCAwKQo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJCW1zZy0+cmVwbHkgPSBEUF9B VVhfTkFUSVZFX1JFUExZX0FDSzsKPiArCQlyZXR1cm4gbXNnLT5zaXplOwo+ICsJfQo+ICsJcmV0 dXJuIDA7Cj4gK30KPiArCj4gK2ludCBjZG5zX2RwX2F1eF9kZXN0cm95KHN0cnVjdCBjZG5zX21o ZHA4NTAxX2RldmljZSAqbWhkcCkKPiArewo+ICsJZHJtX2RwX2F1eF91bnJlZ2lzdGVyKCZtaGRw LT5kcC5hdXgpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGNkbnNf ZHBfZ2V0X21zYV9taXNjKHN0cnVjdCB2aWRlb19pbmZvICp2aWRlbykKPiArewo+ICsJdTMyIG1z YV9taXNjOwo+ICsJdTggY29sb3Jfc3BhY2UgPSAwOwo+ICsJdTggYnBjID0gMDsKPiArCj4gKwlz d2l0Y2ggKHZpZGVvLT5jb2xvcl9mbXQpIHsKPiArCS8qIHNldCBZVVYgZGVmYXVsdCBjb2xvciBz cGFjZSBjb252ZXJzaW9uIHRvIEJUNjAxICovCj4gKwljYXNlIERSTV9DT0xPUl9GT1JNQVRfWUNC Q1I0NDQ6Cj4gKwkJY29sb3Jfc3BhY2UgPSA2ICsgQlRfNjAxICogODsKPiArCQlicmVhazsKPiAr CWNhc2UgRFJNX0NPTE9SX0ZPUk1BVF9ZQ0JDUjQyMjoKPiArCQljb2xvcl9zcGFjZSA9IDUgKyBC VF82MDEgKiA4Owo+ICsJCWJyZWFrOwo+ICsJY2FzZSBEUk1fQ09MT1JfRk9STUFUX1lDQkNSNDIw Ogo+ICsJCWNvbG9yX3NwYWNlID0gNTsKPiArCQlicmVhazsKPiArCWNhc2UgRFJNX0NPTE9SX0ZP Uk1BVF9SR0I0NDQ6Cj4gKwlkZWZhdWx0Ogo+ICsJCWNvbG9yX3NwYWNlID0gMDsKPiArCQlicmVh azsKPiArCX07Cj4gKwo+ICsJc3dpdGNoICh2aWRlby0+YnBjKSB7Cj4gKwljYXNlIDY6Cj4gKwkJ YnBjID0gMDsKPiArCQlicmVhazsKPiArCWNhc2UgMTA6Cj4gKwkJYnBjID0gMjsKPiArCQlicmVh azsKPiArCWNhc2UgMTI6Cj4gKwkJYnBjID0gMzsKPiArCQlicmVhazsKPiArCWNhc2UgMTY6Cj4g KwkJYnBjID0gNDsKPiArCQlicmVhazsKPiArCWNhc2UgODoKPiArCWRlZmF1bHQ6Cj4gKwkJYnBj ID0gMTsKPiArCQlicmVhazsKPiArCX07Cj4gKwo+ICsJbXNhX21pc2MgPSAoYnBjIDw8IDUpIHwg KGNvbG9yX3NwYWNlIDw8IDEpOwo+ICsKPiArCXJldHVybiBtc2FfbWlzYzsKPiArfQo+ICsKPiAr c3RhdGljIGludCBjZG5zX2RwX2NvbmZpZ192aWRlbyhzdHJ1Y3QgY2Ruc19taGRwODUwMV9kZXZp Y2UgKm1oZHApCj4gK3sKPiArCXN0cnVjdCB2aWRlb19pbmZvICp2aWRlbyA9ICZtaGRwLT52aWRl b19pbmZvOwo+ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSAmbWhkcC0+bW9kZTsK PiArCWJvb2wgaF9zeW5jX3BvbGFyaXR5LCB2X3N5bmNfcG9sYXJpdHk7Cj4gKwl1NjQgc3ltYm9s Owo+ICsJdTMyIHZhbCwgbGlua19yYXRlLCByZW07Cj4gKwl1OCBiaXRfcGVyX3BpeCwgdHVfc2l6 ZV9yZWcgPSBUVV9TSVpFOwo+ICsJaW50IHJldDsKPiArCj4gKwliaXRfcGVyX3BpeCA9ICh2aWRl by0+Y29sb3JfZm10ID09IERSTV9DT0xPUl9GT1JNQVRfWUNCQ1I0MjIpID8KPiArCQkgICAgICAo dmlkZW8tPmJwYyAqIDIpIDogKHZpZGVvLT5icGMgKiAzKTsKPiArCj4gKwlsaW5rX3JhdGUgPSBt aGRwLT5kcC5yYXRlIC8gMTAwMDsKPiArCj4gKwlyZXQgPSBjZG5zX21oZHBfcmVnX3dyaXRlKCZt aGRwLT5iYXNlLCBCTkRfSFNZTkMyVlNZTkMsIFZJRl9CWVBBU1NfSU5URVJMQUNFKTsKPiArCWlm IChyZXQpCj4gKwkJZ290byBlcnJfY29uZmlnX3ZpZGVvOwo+ICsKPiArCXJldCA9IGNkbnNfbWhk cF9yZWdfd3JpdGUoJm1oZHAtPmJhc2UsIEhTWU5DMlZTWU5DX1BPTF9DVFJMLCAwKTsKPiArCWlm IChyZXQpCj4gKwkJZ290byBlcnJfY29uZmlnX3ZpZGVvOwo+ICsKPiArCS8qCj4gKwkgKiBnZXQg YSBiZXN0IHR1X3NpemUgYW5kIHZhbGlkIHN5bWJvbDoKPiArCSAqIDEuIGNob3NlIExjbGsgZnJl cSgxNjJNaHosIDI3ME1oeiwgNTQwTWh6KSwgc2V0IFRVIHRvIDMyCj4gKwkgKiAyLiBjYWxjdWxh dGUgVlModmFsaWQgc3ltYm9sKSA9IFRVICogUGNsayAqIEJwcCAvIChMY2xrICogTGFuZXMpCj4g KwkgKiAzLiBpZiBWUyA+ICouODUgb3IgVlMgPCAqLjEgb3IgVlMgPCAyIG9yIFRVIDwgVlMgKyA0 LCB0aGVuIHNldAo+ICsJICogICAgVFUgKz0gMiBhbmQgcmVwZWF0IDJuZCBzdGVwLgo+ICsJICov Cj4gKwlkbyB7Cj4gKwkJdHVfc2l6ZV9yZWcgKz0gMjsKPiArCQlzeW1ib2wgPSB0dV9zaXplX3Jl ZyAqIG1vZGUtPmNsb2NrICogYml0X3Blcl9waXg7Cj4gKwkJZG9fZGl2KHN5bWJvbCwgbWhkcC0+ ZHAubnVtX2xhbmVzICogbGlua19yYXRlICogOCk7Cj4gKwkJcmVtID0gZG9fZGl2KHN5bWJvbCwg MTAwMCk7Cj4gKwkJaWYgKHR1X3NpemVfcmVnID4gNjQpIHsKPiArCQkJcmV0ID0gLUVJTlZBTDsK PiArCQkJZGV2X2VycihtaGRwLT5kZXYsICJ0dSBlcnJvciwgY2xrOiVkLCBsYW5lczolZCwgcmF0 ZTolZFxuIiwKPiArCQkJCW1vZGUtPmNsb2NrLCBtaGRwLT5kcC5udW1fbGFuZXMsIGxpbmtfcmF0 ZSk7Cj4gKwkJCWdvdG8gZXJyX2NvbmZpZ192aWRlbzsKPiArCQl9Cj4gKwl9IHdoaWxlICgoc3lt Ym9sIDw9IDEpIHx8ICh0dV9zaXplX3JlZyAtIHN5bWJvbCA8IDQpIHx8Cj4gKwkJIChyZW0gPiA4 NTApIHx8IChyZW0gPCAxMDApKTsKPiArCj4gKwl2YWwgPSBzeW1ib2wgKyAodHVfc2l6ZV9yZWcg PDwgOCk7Cj4gKwl2YWwgfD0gVFVfQ05UX1JTVF9FTjsKPiArCXJldCA9IGNkbnNfbWhkcF9yZWdf d3JpdGUoJm1oZHAtPmJhc2UsIERQX0ZSQU1FUl9UVSwgdmFsKTsKPiArCWlmIChyZXQpCj4gKwkJ Z290byBlcnJfY29uZmlnX3ZpZGVvOwo+ICsKPiArCS8qIHNldCB0aGUgRklGTyBCdWZmZXIgc2l6 ZSAqLwo+ICsJdmFsID0gZGl2X3U2NChtb2RlLT5jbG9jayAqIChzeW1ib2wgKyAxKSwgMTAwMCkg KyBsaW5rX3JhdGU7Cj4gKwl2YWwgLz0gKG1oZHAtPmRwLm51bV9sYW5lcyAqIGxpbmtfcmF0ZSk7 Cj4gKwl2YWwgPSBkaXZfdTY0KDggKiAoc3ltYm9sICsgMSksIGJpdF9wZXJfcGl4KSAtIHZhbDsK PiArCXZhbCArPSAyOwo+ICsJcmV0ID0gY2Ruc19taGRwX3JlZ193cml0ZSgmbWhkcC0+YmFzZSwg RFBfVkNfVEFCTEUoMTUpLCB2YWwpOwo+ICsKPiArCXN3aXRjaCAodmlkZW8tPmJwYykgewo+ICsJ Y2FzZSA2Ogo+ICsJCXZhbCA9IEJDU182Owo+ICsJCWJyZWFrOwo+ICsJY2FzZSAxMDoKPiArCQl2 YWwgPSBCQ1NfMTA7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDEyOgo+ICsJCXZhbCA9IEJDU18xMjsK PiArCQlicmVhazsKPiArCWNhc2UgMTY6Cj4gKwkJdmFsID0gQkNTXzE2Owo+ICsJCWJyZWFrOwo+ ICsJY2FzZSA4Ogo+ICsJZGVmYXVsdDoKPiArCQl2YWwgPSBCQ1NfODsKPiArCQlicmVhazsKPiAr CX07Cj4gKwo+ICsJdmFsICs9IHZpZGVvLT5jb2xvcl9mbXQgPDwgODsKPiArCXJldCA9IGNkbnNf bWhkcF9yZWdfd3JpdGUoJm1oZHAtPmJhc2UsIERQX0ZSQU1FUl9QWExfUkVQUiwgdmFsKTsKPiAr CWlmIChyZXQpCj4gKwkJZ290byBlcnJfY29uZmlnX3ZpZGVvOwo+ICsKPiArCXZfc3luY19wb2xh cml0eSA9ICEhKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OVlNZTkMpOwo+ICsJaF9zeW5j X3BvbGFyaXR5ID0gISEobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05IU1lOQyk7Cj4gKwo+ ICsJdmFsID0gaF9zeW5jX3BvbGFyaXR5ID8gRFBfRlJBTUVSX1NQX0hTUCA6IDA7Cj4gKwl2YWwg fD0gdl9zeW5jX3BvbGFyaXR5ID8gRFBfRlJBTUVSX1NQX1ZTUCA6IDA7Cj4gKwlyZXQgPSBjZG5z X21oZHBfcmVnX3dyaXRlKCZtaGRwLT5iYXNlLCBEUF9GUkFNRVJfU1AsIHZhbCk7Cj4gKwlpZiAo cmV0KQo+ICsJCWdvdG8gZXJyX2NvbmZpZ192aWRlbzsKPiArCj4gKwl2YWwgPSAobW9kZS0+aHN5 bmNfc3RhcnQgLSBtb2RlLT5oZGlzcGxheSkgPDwgMTY7Cj4gKwl2YWwgfD0gbW9kZS0+aHRvdGFs IC0gbW9kZS0+aHN5bmNfZW5kOwo+ICsJcmV0ID0gY2Ruc19taGRwX3JlZ193cml0ZSgmbWhkcC0+ YmFzZSwgRFBfRlJPTlRfQkFDS19QT1JDSCwgdmFsKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBl cnJfY29uZmlnX3ZpZGVvOwo+ICsKPiArCXZhbCA9IG1vZGUtPmhkaXNwbGF5ICogYml0X3Blcl9w aXggLyA4Owo+ICsJcmV0ID0gY2Ruc19taGRwX3JlZ193cml0ZSgmbWhkcC0+YmFzZSwgRFBfQllU RV9DT1VOVCwgdmFsKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBlcnJfY29uZmlnX3ZpZGVvOwo+ ICsKPiArCXZhbCA9IG1vZGUtPmh0b3RhbCB8ICgobW9kZS0+aHRvdGFsIC0gbW9kZS0+aHN5bmNf c3RhcnQpIDw8IDE2KTsKPiArCXJldCA9IGNkbnNfbWhkcF9yZWdfd3JpdGUoJm1oZHAtPmJhc2Us IE1TQV9IT1JJWk9OVEFMXzAsIHZhbCk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZXJyX2NvbmZp Z192aWRlbzsKPiArCj4gKwl2YWwgPSBtb2RlLT5oc3luY19lbmQgLSBtb2RlLT5oc3luY19zdGFy dDsKPiArCXZhbCB8PSAobW9kZS0+aGRpc3BsYXkgPDwgMTYpIHwgKGhfc3luY19wb2xhcml0eSA8 PCAxNSk7Cj4gKwlyZXQgPSBjZG5zX21oZHBfcmVnX3dyaXRlKCZtaGRwLT5iYXNlLCBNU0FfSE9S SVpPTlRBTF8xLCB2YWwpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGVycl9jb25maWdfdmlkZW87 Cj4gKwo+ICsJdmFsID0gbW9kZS0+dnRvdGFsOwo+ICsJdmFsIHw9IChtb2RlLT52dG90YWwgLSBt b2RlLT52c3luY19zdGFydCkgPDwgMTY7Cj4gKwlyZXQgPSBjZG5zX21oZHBfcmVnX3dyaXRlKCZt aGRwLT5iYXNlLCBNU0FfVkVSVElDQUxfMCwgdmFsKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBl cnJfY29uZmlnX3ZpZGVvOwo+ICsKPiArCXZhbCA9IG1vZGUtPnZzeW5jX2VuZCAtIG1vZGUtPnZz eW5jX3N0YXJ0Owo+ICsJdmFsIHw9IChtb2RlLT52ZGlzcGxheSA8PCAxNikgfCAodl9zeW5jX3Bv bGFyaXR5IDw8IDE1KTsKPiArCXJldCA9IGNkbnNfbWhkcF9yZWdfd3JpdGUoJm1oZHAtPmJhc2Us IE1TQV9WRVJUSUNBTF8xLCB2YWwpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGVycl9jb25maWdf dmlkZW87Cj4gKwo+ICsJdmFsID0gY2Ruc19kcF9nZXRfbXNhX21pc2ModmlkZW8pOwo+ICsJcmV0 ID0gY2Ruc19taGRwX3JlZ193cml0ZSgmbWhkcC0+YmFzZSwgTVNBX01JU0MsIHZhbCk7Cj4gKwlp ZiAocmV0KQo+ICsJCWdvdG8gZXJyX2NvbmZpZ192aWRlbzsKPiArCj4gKwlyZXQgPSBjZG5zX21o ZHBfcmVnX3dyaXRlKCZtaGRwLT5iYXNlLCBTVFJFQU1fQ09ORklHLCAxKTsKPiArCWlmIChyZXQp Cj4gKwkJZ290byBlcnJfY29uZmlnX3ZpZGVvOwo+ICsKPiArCXZhbCA9IG1vZGUtPmhzeW5jX2Vu ZCAtIG1vZGUtPmhzeW5jX3N0YXJ0Owo+ICsJdmFsIHw9IG1vZGUtPmhkaXNwbGF5IDw8IDE2Owo+ ICsJcmV0ID0gY2Ruc19taGRwX3JlZ193cml0ZSgmbWhkcC0+YmFzZSwgRFBfSE9SSVpPTlRBTCwg dmFsKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBlcnJfY29uZmlnX3ZpZGVvOwo+ICsKPiArCXZh bCA9IG1vZGUtPnZkaXNwbGF5Owo+ICsJdmFsIHw9IChtb2RlLT52dG90YWwgLSBtb2RlLT52c3lu Y19zdGFydCkgPDwgMTY7Cj4gKwlyZXQgPSBjZG5zX21oZHBfcmVnX3dyaXRlKCZtaGRwLT5iYXNl LCBEUF9WRVJUSUNBTF8wLCB2YWwpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGVycl9jb25maWdf dmlkZW87Cj4gKwo+ICsJdmFsID0gbW9kZS0+dnRvdGFsOwo+ICsJcmV0ID0gY2Ruc19taGRwX3Jl Z193cml0ZSgmbWhkcC0+YmFzZSwgRFBfVkVSVElDQUxfMSwgdmFsKTsKPiArCWlmIChyZXQpCj4g KwkJZ290byBlcnJfY29uZmlnX3ZpZGVvOwo+ICsKPiArCXJldCA9IGNkbnNfbWhkcF9kcF9yZWdf d3JpdGVfYml0KCZtaGRwLT5iYXNlLCBEUF9WQl9JRCwgMiwgMSwgMCk7Cj4gKwo+ICtlcnJfY29u ZmlnX3ZpZGVvOgo+ICsJaWYgKHJldCkKPiArCQlkZXZfZXJyKG1oZHAtPmRldiwgImNvbmZpZyB2 aWRlbyBmYWlsZWQ6ICVkXG4iLCByZXQpOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgY2Ruc19kcF9waXhlbF9jbGtfcmVzZXQoc3RydWN0IGNkbnNfbWhkcDg1MDFfZGV2 aWNlICptaGRwKQo+ICt7Cj4gKwl1MzIgdmFsOwo+ICsKPiArCS8qIHJlc2V0IHBpeGVsIGNsayAq Lwo+ICsJY2Ruc19taGRwX3JlZ19yZWFkKCZtaGRwLT5iYXNlLCBTT1VSQ0VfSERUWF9DQVIsICZ2 YWwpOwo+ICsJY2Ruc19taGRwX3JlZ193cml0ZSgmbWhkcC0+YmFzZSwgU09VUkNFX0hEVFhfQ0FS LCB2YWwgJiAweEZEKTsKPiArCWNkbnNfbWhkcF9yZWdfd3JpdGUoJm1oZHAtPmJhc2UsIFNPVVJD RV9IRFRYX0NBUiwgdmFsKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBjZG5zX2RwX3NldF92aWRl b19zdGF0dXMoc3RydWN0IGNkbnNfbWhkcDg1MDFfZGV2aWNlICptaGRwLCBpbnQgYWN0aXZlKQo+ ICt7Cj4gKwl1OCBtc2c7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCW1zZyA9ICEhYWN0aXZlOwo+ICsK PiArCW11dGV4X2xvY2soJm1oZHAtPm1ib3hfbXV0ZXgpOwo+ICsKPiArCXJldCA9IGNkbnNfbWhk cF9tYWlsYm94X3NlbmQoJm1oZHAtPmJhc2UsIE1CX01PRFVMRV9JRF9EUF9UWCwgRFBUWF9TRVRf VklERU8sCj4gKwkJCQkgICAgIHNpemVvZihtc2cpLCAmbXNnKTsKPiArCWlmIChyZXQpCj4gKwkJ ZGV2X2VycihtaGRwLT5kZXYsICJzZXQgdmlkZW8gc3RhdHVzIGZhaWxlZDogJWRcbiIsIHJldCk7 Cj4gKwo+ICsJbXV0ZXhfdW5sb2NrKCZtaGRwLT5tYm94X211dGV4KTsKPiArCj4gKwlyZXR1cm4g cmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGNkbnNfZHBfdHJhaW5pbmdfc3RhcnQoc3RydWN0 IGNkbnNfbWhkcDg1MDFfZGV2aWNlICptaGRwKQo+ICt7Cj4gKwl1bnNpZ25lZCBsb25nIHRpbWVv dXQ7Cj4gKwl1OCBtc2csIGV2ZW50WzJdOwo+ICsJaW50IHJldDsKPiArCj4gKwltc2cgPSBMSU5L X1RSQUlOSU5HX1JVTjsKPiArCj4gKwltdXRleF9sb2NrKCZtaGRwLT5tYm94X211dGV4KTsKPiAr Cj4gKwkvKiBzdGFydCB0cmFpbmluZyAqLwo+ICsJcmV0ID0gY2Ruc19taGRwX21haWxib3hfc2Vu ZCgmbWhkcC0+YmFzZSwgTUJfTU9EVUxFX0lEX0RQX1RYLAo+ICsJCQkJICAgICBEUFRYX1RSQUlO SU5HX0NPTlRST0wsIHNpemVvZihtc2cpLCAmbXNnKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBl cnJfdHJhaW5pbmdfc3RhcnQ7Cj4gKwo+ICsJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19q aWZmaWVzKExJTktfVFJBSU5JTkdfVElNRU9VVF9NUyk7Cj4gKwl3aGlsZSAodGltZV9iZWZvcmUo amlmZmllcywgdGltZW91dCkpIHsKPiArCQltc2xlZXAoTElOS19UUkFJTklOR19SRVRSWV9NUyk7 Cj4gKwkJcmV0ID0gY2Ruc19taGRwX21haWxib3hfc2VuZCgmbWhkcC0+YmFzZSwgTUJfTU9EVUxF X0lEX0RQX1RYLAo+ICsJCQkJCSAgICAgRFBUWF9SRUFEX0VWRU5ULCAwLCBOVUxMKTsKPiArCQlp ZiAocmV0KQo+ICsJCQlnb3RvIGVycl90cmFpbmluZ19zdGFydDsKPiArCj4gKwkJcmV0ID0gY2Ru c19taGRwX21haWxib3hfcmVjdl9oZWFkZXIoJm1oZHAtPmJhc2UsIE1CX01PRFVMRV9JRF9EUF9U WCwKPiArCQkJCQkJICAgIERQVFhfUkVBRF9FVkVOVCwgc2l6ZW9mKGV2ZW50KSk7Cj4gKwkJaWYg KHJldCkKPiArCQkJZ290byBlcnJfdHJhaW5pbmdfc3RhcnQ7Cj4gKwo+ICsJCXJldCA9IGNkbnNf bWhkcF9tYWlsYm94X3JlY3ZfZGF0YSgmbWhkcC0+YmFzZSwgZXZlbnQsIHNpemVvZihldmVudCkp Owo+ICsJCWlmIChyZXQpCj4gKwkJCWdvdG8gZXJyX3RyYWluaW5nX3N0YXJ0Owo+ICsKPiArCQlp ZiAoZXZlbnRbMV0gJiBDTEtfUkVDT1ZFUllfRkFJTEVEKSB7Cj4gKwkJCWRldl9lcnIobWhkcC0+ ZGV2LCAiY2xvY2sgcmVjb3ZlcnkgZmFpbGVkXG4iKTsKPiArCQl9IGVsc2UgaWYgKGV2ZW50WzFd ICYgRVFfUEhBU0VfRklOSVNIRUQpIHsKPiArCQkJbXV0ZXhfdW5sb2NrKCZtaGRwLT5tYm94X211 dGV4KTsKPiArCQkJcmV0dXJuIDA7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldCA9IC1FVElNRURP VVQ7Cj4gKwo+ICtlcnJfdHJhaW5pbmdfc3RhcnQ6Cj4gKwltdXRleF91bmxvY2soJm1oZHAtPm1i b3hfbXV0ZXgpOwo+ICsKPiArCWRldl9lcnIobWhkcC0+ZGV2LCAidHJhaW5pbmcgZmFpbGVkOiAl ZFxuIiwgcmV0KTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgY2Ruc19k cF9nZXRfdHJhaW5pbmdfc3RhdHVzKHN0cnVjdCBjZG5zX21oZHA4NTAxX2RldmljZSAqbWhkcCkK PiArewo+ICsJdTggc3RhdHVzWzEzXTsKPiArCWludCByZXQ7Cj4gKwo+ICsJbXV0ZXhfbG9jaygm bWhkcC0+bWJveF9tdXRleCk7Cj4gKwo+ICsJcmV0ID0gY2Ruc19taGRwX21haWxib3hfc2VuZCgm bWhkcC0+YmFzZSwgTUJfTU9EVUxFX0lEX0RQX1RYLAo+ICsJCQkJICAgICBEUFRYX1JFQURfTElO S19TVEFULCAwLCBOVUxMKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBlcnJfZ2V0X3RyYWluaW5n X3N0YXR1czsKPiArCj4gKwlyZXQgPSBjZG5zX21oZHBfbWFpbGJveF9yZWN2X2hlYWRlcigmbWhk cC0+YmFzZSwgTUJfTU9EVUxFX0lEX0RQX1RYLAo+ICsJCQkJCSAgICBEUFRYX1JFQURfTElOS19T VEFULAo+ICsJCQkJCSAgICBzaXplb2Yoc3RhdHVzKSk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8g ZXJyX2dldF90cmFpbmluZ19zdGF0dXM7Cj4gKwo+ICsJcmV0ID0gY2Ruc19taGRwX21haWxib3hf cmVjdl9kYXRhKCZtaGRwLT5iYXNlLCBzdGF0dXMsIHNpemVvZihzdGF0dXMpKTsKPiArCWlmIChy ZXQpCj4gKwkJZ290byBlcnJfZ2V0X3RyYWluaW5nX3N0YXR1czsKPiArCj4gKwltaGRwLT5kcC5y YXRlID0gZHJtX2RwX2J3X2NvZGVfdG9fbGlua19yYXRlKHN0YXR1c1swXSk7Cj4gKwltaGRwLT5k cC5udW1fbGFuZXMgPSBzdGF0dXNbMV07Cj4gKwo+ICtlcnJfZ2V0X3RyYWluaW5nX3N0YXR1czoK PiArCW11dGV4X3VubG9jaygmbWhkcC0+bWJveF9tdXRleCk7Cj4gKwo+ICsJaWYgKHJldCkKPiAr CQlkZXZfZXJyKG1oZHAtPmRldiwgImdldCB0cmFpbmluZyBzdGF0dXMgZmFpbGVkOiAlZFxuIiwg cmV0KTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgY2Ruc19kcF90cmFp bl9saW5rKHN0cnVjdCBjZG5zX21oZHA4NTAxX2RldmljZSAqbWhkcCkKPiArewo+ICsJaW50IHJl dDsKPiArCj4gKwlyZXQgPSBjZG5zX2RwX3RyYWluaW5nX3N0YXJ0KG1oZHApOwo+ICsJaWYgKHJl dCkgewo+ICsJCWRldl9lcnIobWhkcC0+ZGV2LCAiRmFpbGVkIHRvIHN0YXJ0IHRyYWluaW5nICVk XG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gY2Ruc19kcF9n ZXRfdHJhaW5pbmdfc3RhdHVzKG1oZHApOwo+ICsJaWYgKHJldCkgewo+ICsJCWRldl9lcnIobWhk cC0+ZGV2LCAiRmFpbGVkIHRvIGdldCB0cmFpbmluZyBzdGF0ICVkXG4iLCByZXQpOwo+ICsJCXJl dHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJZGV2X2RiZyhtaGRwLT5kZXYsICJyYXRlOjB4JXgsIGxh bmVzOiVkXG4iLCBtaGRwLT5kcC5yYXRlLAo+ICsJCW1oZHAtPmRwLm51bV9sYW5lcyk7Cj4gKwly ZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGNkbnNfZHBfc2V0X2hvc3RfY2FwKHN0 cnVjdCBjZG5zX21oZHA4NTAxX2RldmljZSAqbWhkcCkKPiArewo+ICsJdTggbXNnWzhdOwo+ICsJ aW50IHJldDsKPiArCj4gKwltc2dbMF0gPSBkcm1fZHBfbGlua19yYXRlX3RvX2J3X2NvZGUobWhk cC0+ZHAucmF0ZSk7Cj4gKwltc2dbMV0gPSBtaGRwLT5kcC5udW1fbGFuZXMgfCBTQ1JBTUJMRVJf RU47Cj4gKwltc2dbMl0gPSBWT0xUQUdFX0xFVkVMXzI7Cj4gKwltc2dbM10gPSBQUkVfRU1QSEFT SVNfTEVWRUxfMzsKPiArCW1zZ1s0XSA9IFBUUzEgfCBQVFMyIHwgUFRTMyB8IFBUUzQ7Cj4gKwlt c2dbNV0gPSBGQVNUX0xUX05PVF9TVVBQT1JUOwo+ICsJbXNnWzZdID0gbWhkcC0+bGFuZV9tYXBw aW5nOwo+ICsJbXNnWzddID0gRU5IQU5DRUQ7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmbWhkcC0+bWJv eF9tdXRleCk7Cj4gKwo+ICsJcmV0ID0gY2Ruc19taGRwX21haWxib3hfc2VuZCgmbWhkcC0+YmFz ZSwgTUJfTU9EVUxFX0lEX0RQX1RYLAo+ICsJCQkJICAgICBEUFRYX1NFVF9IT1NUX0NBUEFCSUxJ VElFUywKPiArCQkJCSAgICAgc2l6ZW9mKG1zZyksIG1zZyk7Cj4gKwo+ICsJbXV0ZXhfdW5sb2Nr KCZtaGRwLT5tYm94X211dGV4KTsKPiArCj4gKwlpZiAocmV0KQo+ICsJCWRldl9lcnIobWhkcC0+ ZGV2LCAic2V0IGhvc3QgY2FwIGZhaWxlZDogJWRcbiIsIHJldCk7Cj4gKwo+ICsJcmV0dXJuIHJl dDsKPiArfQo+ICsKPiArc3RhdGljIGludCBjZG5zX2RwX2dldF9lZGlkX2Jsb2NrKHZvaWQgKmRh dGEsIHU4ICplZGlkLAo+ICsJCQkJICB1bnNpZ25lZCBpbnQgYmxvY2ssIHNpemVfdCBsZW5ndGgp Cj4gK3sKPiArCXN0cnVjdCBjZG5zX21oZHA4NTAxX2RldmljZSAqbWhkcCA9IGRhdGE7Cj4gKwl1 OCBtc2dbMl0sIHJlZ1syXSwgaTsKPiArCWludCByZXQ7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmbWhk cC0+bWJveF9tdXRleCk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewo+ICsJCW1z Z1swXSA9IGJsb2NrIC8gMjsKPiArCQltc2dbMV0gPSBibG9jayAlIDI7Cj4gKwo+ICsJCXJldCA9 IGNkbnNfbWhkcF9tYWlsYm94X3NlbmQoJm1oZHAtPmJhc2UsIE1CX01PRFVMRV9JRF9EUF9UWCwK PiArCQkJCQkgICAgIERQVFhfR0VUX0VESUQsIHNpemVvZihtc2cpLCBtc2cpOwo+ICsJCWlmIChy ZXQpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlyZXQgPSBjZG5zX21oZHBfbWFpbGJveF9yZWN2 X2hlYWRlcigmbWhkcC0+YmFzZSwgTUJfTU9EVUxFX0lEX0RQX1RYLAo+ICsJCQkJCQkgICAgRFBU WF9HRVRfRURJRCwKPiArCQkJCQkJICAgIHNpemVvZihyZWcpICsgbGVuZ3RoKTsKPiArCQlpZiAo cmV0KQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJcmV0ID0gY2Ruc19taGRwX21haWxib3hfcmVj dl9kYXRhKCZtaGRwLT5iYXNlLCByZWcsIHNpemVvZihyZWcpKTsKPiArCQlpZiAocmV0KQo+ICsJ CQljb250aW51ZTsKPiArCj4gKwkJcmV0ID0gY2Ruc19taGRwX21haWxib3hfcmVjdl9kYXRhKCZt aGRwLT5iYXNlLCBlZGlkLCBsZW5ndGgpOwo+ICsJCWlmIChyZXQpCj4gKwkJCWNvbnRpbnVlOwo+ ICsKPiArCQlpZiAocmVnWzBdID09IGxlbmd0aCAmJiByZWdbMV0gPT0gYmxvY2sgLyAyKQo+ICsJ CQlicmVhazsKPiArCX0KPiArCj4gKwlpZiAocmV0KQo+ICsJCWRldl9lcnIobWhkcC0+ZGV2LCAi Z2V0IGJsb2NrWyVkXSBlZGlkIGZhaWxlZDogJWRcbiIsIGJsb2NrLCByZXQpOwo+ICsKPiArCW11 dGV4X3VubG9jaygmbWhkcC0+bWJveF9tdXRleCk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBjZG5zX2RwX21vZGVfc2V0KHN0cnVjdCBjZG5zX21oZHA4NTAxX2Rldmlj ZSAqbWhkcCkKPiArewo+ICsJdW5pb24gcGh5X2NvbmZpZ3VyZV9vcHRzIHBoeV9jZmc7Cj4gKwlp bnQgcmV0Owo+ICsKPiArCWNkbnNfZHBfcGl4ZWxfY2xrX3Jlc2V0KG1oZHApOwo+ICsKPiArCS8q IEdldCBEUCBDYXBzICAqLwo+ICsJcmV0ID0gZHJtX2RwX2RwY2RfcmVhZCgmbWhkcC0+ZHAuYXV4 LCBEUF9EUENEX1JFViwgbWhkcC0+ZHAuZHBjZCwKPiArCQkJICAgICAgIERQX1JFQ0VJVkVSX0NB UF9TSVpFKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJZGV2X2VycihtaGRwLT5kZXYsICJGYWls ZWQgdG8gZ2V0IGNhcHMgJWRcbiIsIHJldCk7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCW1o ZHAtPmRwLnJhdGUgPSBkcm1fZHBfbWF4X2xpbmtfcmF0ZShtaGRwLT5kcC5kcGNkKTsKPiArCW1o ZHAtPmRwLm51bV9sYW5lcyA9IGRybV9kcF9tYXhfbGFuZV9jb3VudChtaGRwLT5kcC5kcGNkKTsK PiArCj4gKwkvKiBjaGVjayB0aGUgbWF4IGxpbmsgcmF0ZSAqLwo+ICsJaWYgKG1oZHAtPmRwLnJh dGUgPiBDRE5TX0RQX01BWF9MSU5LX1JBVEUpCj4gKwkJbWhkcC0+ZHAucmF0ZSA9IENETlNfRFBf TUFYX0xJTktfUkFURTsKPiArCj4gKwlwaHlfY2ZnLmRwLmxhbmVzID0gbWhkcC0+ZHAubnVtX2xh bmVzOwo+ICsJcGh5X2NmZy5kcC5saW5rX3JhdGUgPSBtaGRwLT5kcC5yYXRlOwo+ICsJcGh5X2Nm Zy5kcC5zZXRfbGFuZXMgPSBmYWxzZTsKPiArCXBoeV9jZmcuZHAuc2V0X3JhdGUgPSBmYWxzZTsK PiArCXBoeV9jZmcuZHAuc2V0X3ZvbHRhZ2VzID0gdHJ1ZTsKPiArCj4gKwkvKiBNYWlsYm94IHBy b3RlY3QgZm9yIERQIFBIWSBhY2Nlc3MgKi8KPiArCW11dGV4X2xvY2soJm1oZHAtPm1ib3hfbXV0 ZXgpOwo+ICsJcmV0ID0gcGh5X2NvbmZpZ3VyZShtaGRwLT5waHksICZwaHlfY2ZnKTsKPiArCW11 dGV4X3VubG9jaygmbWhkcC0+bWJveF9tdXRleCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2Vy cihtaGRwLT5kZXYsICIlczogcGh5X2NvbmZpZ3VyZSgpIGZhaWxlZDogJWRcbiIsCj4gKwkJCV9f ZnVuY19fLCByZXQpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwkvKiBWaWRlbyBvZmYgKi8K PiArCXJldCA9IGNkbnNfZHBfc2V0X3ZpZGVvX3N0YXR1cyhtaGRwLCBDT05UUk9MX1ZJREVPX0lE TEUpOwo+ICsJaWYgKHJldCkgewo+ICsJCWRldl9lcnIobWhkcC0+ZGV2LCAiRmFpbGVkIHRvIHZh bGlkIHZpZGVvICVkXG4iLCByZXQpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwkvKiBMaW5l IHN3YXBwaW5nICovCj4gKwljZG5zX21oZHBfcmVnX3dyaXRlKCZtaGRwLT5iYXNlLCBMQU5FU19D T05GSUcsIDB4MDA0MDAwMDAgfCBtaGRwLT5sYW5lX21hcHBpbmcpOwo+ICsKPiArCS8qIFNldCBE UCBob3N0IGNhcGFiaWxpdHkgKi8KPiArCXJldCA9IGNkbnNfZHBfc2V0X2hvc3RfY2FwKG1oZHAp Owo+ICsJaWYgKHJldCkgewo+ICsJCWRldl9lcnIobWhkcC0+ZGV2LCAiRmFpbGVkIHRvIHNldCBo b3N0IGNhcCAlZFxuIiwgcmV0KTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gY2Ru c19taGRwX3JlZ193cml0ZSgmbWhkcC0+YmFzZSwgRFBfQVVYX1NXQVBfSU5WRVJTSU9OX0NPTlRS T0wsCj4gKwkJCQkgIEFVWF9IT1NUX0lOVkVSVCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2Vy cihtaGRwLT5kZXYsICJGYWlsZWQgdG8gc2V0IGhvc3QgaW52ZXJ0ICVkXG4iLCByZXQpOwo+ICsJ CXJldHVybjsKPiArCX0KPiArCj4gKwlyZXQgPSBjZG5zX2RwX2NvbmZpZ192aWRlbyhtaGRwKTsK PiArCWlmIChyZXQpCj4gKwkJZGV2X2VycihtaGRwLT5kZXYsICJGYWlsZWQgdG8gY29uZmlnIHZp ZGVvICVkXG4iLCByZXQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGNkbnNfZHBfYnJpZGdlX2F0 dGFjaChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+ICsJCQkJIGVudW0gZHJtX2JyaWRnZV9h dHRhY2hfZmxhZ3MgZmxhZ3MpCj4gK3sKPiArCXN0cnVjdCBjZG5zX21oZHA4NTAxX2RldmljZSAq bWhkcCA9IGJyaWRnZS0+ZHJpdmVyX3ByaXZhdGU7Cj4gKwo+ICsJaWYgKCEoZmxhZ3MgJiBEUk1f QlJJREdFX0FUVEFDSF9OT19DT05ORUNUT1IpKSB7Cj4gKwkJZGV2X2VycihtaGRwLT5kZXYsICJk byBub3Qgc3VwcG9ydCBjcmVhdGluZyBhIGRybV9jb25uZWN0b3JcbiIpOwo+ICsJCXJldHVybiAt RUlOVkFMOwo+ICsJfQo+ICsKPiArCW1oZHAtPmRwLmF1eC5kcm1fZGV2ID0gYnJpZGdlLT5kZXY7 Cj4gKwo+ICsJcmV0dXJuIGRybV9kcF9hdXhfcmVnaXN0ZXIoJm1oZHAtPmRwLmF1eCk7Cj4gK30K PiArCj4gK3N0YXRpYyBlbnVtIGRybV9tb2RlX3N0YXR1cwo+ICtjZG5zX2RwX2JyaWRnZV9tb2Rl X3ZhbGlkKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCj4gKwkJCSAgY29uc3Qgc3RydWN0IGRy bV9kaXNwbGF5X2luZm8gKmluZm8sCj4gKwkJCSAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKm1vZGUpCj4gK3sKPiArCWVudW0gZHJtX21vZGVfc3RhdHVzIG1vZGVfc3RhdHVzID0gTU9E RV9PSzsKPiArCj4gKwkvKiBXZSBkb24ndCBzdXBwb3J0IGRvdWJsZS1jbG9ja2VkIG1vZGVzICov Cj4gKwlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0RCTENMSyB8fAo+ICsJICAgIG1v ZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpCj4gKwkJcmV0dXJuIE1PREVfQkFE Owo+ICsKPiArCS8qIE1BWCBzdXBwb3J0IHBpeGVsIGNsb2NrIHJhdGUgNTk0TUh6ICovCj4gKwlp ZiAobW9kZS0+Y2xvY2sgPiA1OTQwMDApCj4gKwkJcmV0dXJuIE1PREVfQ0xPQ0tfSElHSDsKPiAr Cj4gKwlpZiAobW9kZS0+aGRpc3BsYXkgPiAzODQwKQo+ICsJCXJldHVybiBNT0RFX0JBRF9IVkFM VUU7Cj4gKwo+ICsJaWYgKG1vZGUtPnZkaXNwbGF5ID4gMjE2MCkKPiArCQlyZXR1cm4gTU9ERV9C QURfVlZBTFVFOwo+ICsKPiArCXJldHVybiBtb2RlX3N0YXR1czsKPiArfQo+ICsKPiArc3RhdGlj IGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKPiArY2Ruc19kcF9icmlkZ2VfZGV0ZWN0KHN0cnVj dCBkcm1fYnJpZGdlICpicmlkZ2UpCj4gK3sKPiArCXN0cnVjdCBjZG5zX21oZHA4NTAxX2Rldmlj ZSAqbWhkcCA9IGJyaWRnZS0+ZHJpdmVyX3ByaXZhdGU7Cj4gKwo+ICsJcmV0dXJuIGNkbnNfbWhk cDg1MDFfZGV0ZWN0KG1oZHApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9l ZGlkCj4gKypjZG5zX2RwX2JyaWRnZV9lZGlkX3JlYWQoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRn ZSwKPiArCQkJICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ICt7Cj4gKwlzdHJ1 Y3QgY2Ruc19taGRwODUwMV9kZXZpY2UgKm1oZHAgPSBicmlkZ2UtPmRyaXZlcl9wcml2YXRlOwo+ ICsKPiArCXJldHVybiBkcm1fZWRpZF9yZWFkX2N1c3RvbShjb25uZWN0b3IsIGNkbnNfZHBfZ2V0 X2VkaWRfYmxvY2ssIG1oZHApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBjZG5zX2RwX2JyaWRn ZV9hdG9taWNfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+ICsJCQkJCSAgc3Ry dWN0IGRybV9icmlkZ2Vfc3RhdGUgKm9sZF9zdGF0ZSkKPiArewo+ICsJc3RydWN0IGNkbnNfbWhk cDg1MDFfZGV2aWNlICptaGRwID0gYnJpZGdlLT5kcml2ZXJfcHJpdmF0ZTsKPiArCj4gKwljZG5z X2RwX3NldF92aWRlb19zdGF0dXMobWhkcCwgQ09OVFJPTF9WSURFT19JRExFKTsKPiArCW1oZHAt PmN1cnJfY29ubiA9IE5VTEw7Cj4gKwo+ICsJLyogTWFpbGJveCBwcm90ZWN0IGZvciBEUCBQSFkg YWNjZXNzICovCj4gKwltdXRleF9sb2NrKCZtaGRwLT5tYm94X211dGV4KTsKPiArCXBoeV9wb3dl cl9vZmYobWhkcC0+cGh5KTsKPiArCW11dGV4X3VubG9jaygmbWhkcC0+bWJveF9tdXRleCk7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIGNkbnNfZHBfYnJpZGdlX2F0b21pY19lbmFibGUoc3RydWN0 IGRybV9icmlkZ2UgKmJyaWRnZSwKPiArCQkJCQkgc3RydWN0IGRybV9icmlkZ2Vfc3RhdGUgKm9s ZF9zdGF0ZSkKPiArewo+ICsJc3RydWN0IGNkbnNfbWhkcDg1MDFfZGV2aWNlICptaGRwID0gYnJp ZGdlLT5kcml2ZXJfcHJpdmF0ZTsKPiArCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSA9 IG9sZF9zdGF0ZS0+YmFzZS5zdGF0ZTsKPiArCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3I7Cj4gKwlzdHJ1Y3QgdmlkZW9faW5mbyAqdmlkZW8gPSAmbWhkcC0+dmlkZW9faW5mbzsKPiAr CXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPiArCXN0cnVjdCBkcm1fY29ubmVj dG9yX3N0YXRlICpjb25uX3N0YXRlOwo+ICsJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUg Km1vZGU7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWNvbm5lY3RvciA9IGRybV9hdG9taWNfZ2V0X25l d19jb25uZWN0b3JfZm9yX2VuY29kZXIoc3RhdGUsCj4gKwkJCQkJCQkgICAgIGJyaWRnZS0+ZW5j b2Rlcik7Cj4gKwlpZiAoV0FSTl9PTighY29ubmVjdG9yKSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJ bWhkcC0+Y3Vycl9jb25uID0gY29ubmVjdG9yOwo+ICsKPiArCWNvbm5fc3RhdGUgPSBkcm1fYXRv bWljX2dldF9uZXdfY29ubmVjdG9yX3N0YXRlKHN0YXRlLCBjb25uZWN0b3IpOwo+ICsJaWYgKFdB Uk5fT04oIWNvbm5fc3RhdGUpKQo+ICsJCXJldHVybjsKPiArCj4gKwljcnRjX3N0YXRlID0gZHJt X2F0b21pY19nZXRfbmV3X2NydGNfc3RhdGUoc3RhdGUsIGNvbm5fc3RhdGUtPmNydGMpOwo+ICsJ aWYgKFdBUk5fT04oIWNydGNfc3RhdGUpKQo+ICsJCXJldHVybjsKPiArCj4gKwltb2RlID0gJmNy dGNfc3RhdGUtPmFkanVzdGVkX21vZGU7Cj4gKwo+ICsJc3dpdGNoIChjb25uZWN0b3ItPmRpc3Bs YXlfaW5mby5icGMpIHsKPiArCWNhc2UgMTA6Cj4gKwkJdmlkZW8tPmJwYyA9IDEwOwo+ICsJCWJy ZWFrOwo+ICsJY2FzZSA2Ogo+ICsJCXZpZGVvLT5icGMgPSA2Owo+ICsJCWJyZWFrOwo+ICsJZGVm YXVsdDoKPiArCQl2aWRlby0+YnBjID0gODsKPiArCQlicmVhazsKPiArCX0KPiArCj4gKwkvKiBU aGUgb25seSBjdXJyZW50bHkgc3VwcG9ydGVkIGZvcm1hdCAqLwo+ICsJdmlkZW8tPmNvbG9yX2Zt dCA9IERSTV9DT0xPUl9GT1JNQVRfUkdCNDQ0Owo+ICsKPiArCWRldl9kYmcobWhkcC0+ZGV2LCAi TW9kZTogJWR4JWRwJWRcbiIsCj4gKwkJbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5LCBt b2RlLT5jbG9jayk7Cj4gKwltZW1jcHkoJm1oZHAtPm1vZGUsIG1vZGUsIHNpemVvZihzdHJ1Y3Qg ZHJtX2Rpc3BsYXlfbW9kZSkpOwo+ICsKPiArCWNkbnNfZHBfbW9kZV9zZXQobWhkcCk7Cj4gKwo+ ICsJLyogTGluayB0cmFpbm5pbmcgKi8KPiArCXJldCA9IGNkbnNfZHBfdHJhaW5fbGluayhtaGRw KTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJyKG1oZHAtPmRldiwgIkZhaWxlZCBsaW5rIHRy YWluICVkXG4iLCByZXQpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlyZXQgPSBjZG5zX2Rw X3NldF92aWRlb19zdGF0dXMobWhkcCwgQ09OVFJPTF9WSURFT19WQUxJRCk7Cj4gKwlpZiAocmV0 KSB7Cj4gKwkJZGV2X2VycihtaGRwLT5kZXYsICJGYWlsZWQgdG8gdmFsaWQgdmlkZW8gJWRcbiIs IHJldCk7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICt9Cj4gKwo+ICtjb25zdCBzdHJ1Y3QgZHJtX2Jy aWRnZV9mdW5jcyBjZG5zX2RwX2JyaWRnZV9mdW5jcyA9IHsKPiArCS5hdHRhY2ggPSBjZG5zX2Rw X2JyaWRnZV9hdHRhY2gsCj4gKwkuZGV0ZWN0ID0gY2Ruc19kcF9icmlkZ2VfZGV0ZWN0LAo+ICsJ LmVkaWRfcmVhZCA9IGNkbnNfZHBfYnJpZGdlX2VkaWRfcmVhZCwKPiArCS5tb2RlX3ZhbGlkID0g Y2Ruc19kcF9icmlkZ2VfbW9kZV92YWxpZCwKPiArCS5hdG9taWNfZW5hYmxlID0gY2Ruc19kcF9i cmlkZ2VfYXRvbWljX2VuYWJsZSwKPiArCS5hdG9taWNfZGlzYWJsZSA9IGNkbnNfZHBfYnJpZGdl X2F0b21pY19kaXNhYmxlLAo+ICsJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRvbWlj X2hlbHBlcl9icmlkZ2VfZHVwbGljYXRlX3N0YXRlLAo+ICsJLmF0b21pY19kZXN0cm95X3N0YXRl ID0gZHJtX2F0b21pY19oZWxwZXJfYnJpZGdlX2Rlc3Ryb3lfc3RhdGUsCj4gKwkuYXRvbWljX3Jl c2V0ID0gZHJtX2F0b21pY19oZWxwZXJfYnJpZGdlX3Jlc2V0LAo+ICt9Owo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2NhZGVuY2UvY2Rucy1taGRwODUwMS1oZG1pLmMgYi9k cml2ZXJzL2dwdS9kcm0vYnJpZGdlL2NhZGVuY2UvY2Rucy1taGRwODUwMS1oZG1pLmMKPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uODM0Y2E5Nzg4YTVmCj4gLS0t IC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvY2FkZW5jZS9jZG5zLW1o ZHA4NTAxLWhkbWkuYwo+IEBAIC0wLDAgKzEsNTk1IEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wLW9ubHkKPiArLyoKPiArICogQ2FkZW5jZSBNSERQODUwMSBIRE1JIGJy aWRnZSBkcml2ZXIKPiArICoKPiArICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjQgTlhQIFNlbWlj b25kdWN0b3IsIEluYy4KPiArICoKPiArICovCj4gKyNpbmNsdWRlIDxkcm0vZGlzcGxheS9kcm1f aGRtaV9oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kaXNwbGF5L2RybV9oZG1pX3N0YXRlX2hl bHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2Rpc3BsYXkvZHJtX3NjZGNfaGVscGVyLmg+Cj4gKyNp bmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZWRp ZC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9wcmludC5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGh5 L3BoeS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGh5L3BoeS1oZG1pLmg+Cj4gKwo+ICsjaW5jbHVk ZSAiY2Rucy1taGRwODUwMS1jb3JlLmgiCj4gKwo+ICsvKioKPiArICogY2Ruc19oZG1pX2NvbmZp Z19pbmZvZnJhbWUoKSAtIGZpbGwgdGhlIEhETUkgaW5mb2ZyYW1lCj4gKyAqIEBtaGRwOiBwaGFu ZGxlIHRvIG1oZHAgZGV2aWNlLgo+ICsgKiBAZW50cnlfaWQ6IFRoZSBwYWNrZXQgbWVtb3J5IGFk ZHJlc3MgaW4gd2hpY2ggdGhlIGRhdGEgaXMgd3JpdHRlbi4KPiArICogQGxlbjogbGVuZ3RoIG9m IGluZm9mcmFtZS4KPiArICogQGJ1ZjogcG9pbnQgdG8gSW5mb0ZyYW1lIFBhY2tldC4KPiArICog QHR5cGU6IFBhY2tldCBUeXBlIG9mIEluZm9GcmFtZSBpbiBIRE1JIFNwZWNpZmljYXRpb24uCj4g KyAqCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBjZG5zX2hkbWlfY29uZmlnX2luZm9mcmFtZShzdHJ1 Y3QgY2Ruc19taGRwODUwMV9kZXZpY2UgKm1oZHAsCj4gKwkJCQkgICAgICAgdTggZW50cnlfaWQs IHU4IGxlbiwKPiArCQkJCSAgICAgICBjb25zdCB1OCAqYnVmLCB1OCB0eXBlKQo+ICt7Cj4gKwl1 OCBwYWNrZXRbMzJdLCBwYWNrZXRfbGVuID0gMzI7Cj4gKwl1MzIgcGFja2V0MzIsIGxlbjMyOwo+ ICsJdTMyIHZhbCwgaTsKPiArCj4gKwkvKgo+ICsJICogb25seSBzdXBwb3J0IDMyIGJ5dGVzIG5v dwo+ICsJICogcGFja2V0WzBdID0gMAo+ICsJICogcGFja2V0WzEtM10gPSBIQlswLTJdICBJbmZv RnJhbWUgUGFja2V0IEhlYWRlcgo+ICsJICogcGFja2V0WzQtMzEgPSBQQlswLTI3XSBJbmZvRnJh bWUgUGFja2V0IENvbnRlbnRzCj4gKwkgKi8KPiArCWlmIChsZW4gPj0gKHBhY2tldF9sZW4gLSAx KSkKPiArCQlyZXR1cm47Cj4gKwlwYWNrZXRbMF0gPSAwOwo+ICsJbWVtY3B5KHBhY2tldCArIDEs IGJ1ZiwgbGVuKTsKPiArCj4gKwkvKiBpbnZhbGlkYXRlIGVudHJ5ICovCj4gKwl2YWwgPSBGX0FD VElWRV9JRExFX1RZUEUoMSkgfCBGX1BLVF9BTExPQ19BRERSRVNTKGVudHJ5X2lkKTsKPiArCXdy aXRlbCh2YWwsIG1oZHAtPnJlZ3MgKyBTT1VSQ0VfUElGX1BLVF9BTExPQ19SRUcpOwo+ICsJd3Jp dGVsKEZfUEtUX0FMTE9DX1dSX0VOKDEpLCBtaGRwLT5yZWdzICsgU09VUkNFX1BJRl9QS1RfQUxM T0NfV1JfRU4pOwo+ICsKPiArCS8qIGZsdXNoIGZpZm8gMSAqLwo+ICsJd3JpdGVsKEZfRklGTzFf RkxVU0goMSksIG1oZHAtPnJlZ3MgKyBTT1VSQ0VfUElGX0ZJRk8xX0ZMVVNIKTsKPiArCj4gKwkv KiB3cml0ZSBwYWNrZXQgaW50byBtZW1vcnkgKi8KPiArCWxlbjMyID0gcGFja2V0X2xlbiAvIDQ7 Cj4gKwlmb3IgKGkgPSAwOyBpIDwgbGVuMzI7IGkrKykgewo+ICsJCXBhY2tldDMyID0gZ2V0X3Vu YWxpZ25lZF9sZTMyKHBhY2tldCArIDQgKiBpKTsKPiArCQl3cml0ZWwoRl9EQVRBX1dSKHBhY2tl dDMyKSwgbWhkcC0+cmVncyArIFNPVVJDRV9QSUZfREFUQV9XUik7Cj4gKwl9Cj4gKwo+ICsJLyog d3JpdGUgZW50cnkgaWQgKi8KPiArCXdyaXRlbChGX1dSX0FERFIoZW50cnlfaWQpLCBtaGRwLT5y ZWdzICsgU09VUkNFX1BJRl9XUl9BRERSKTsKPiArCj4gKwkvKiB3cml0ZSByZXF1ZXN0ICovCj4g Kwl3cml0ZWwoRl9IT1NUX1dSKDEpLCBtaGRwLT5yZWdzICsgU09VUkNFX1BJRl9XUl9SRVEpOwo+ ICsKPiArCS8qIHVwZGF0ZSBlbnRyeSAqLwo+ICsJdmFsID0gRl9BQ1RJVkVfSURMRV9UWVBFKDEp IHwgRl9UWVBFX1ZBTElEKDEpIHwKPiArCQlGX1BBQ0tFVF9UWVBFKHR5cGUpIHwgRl9QS1RfQUxM T0NfQUREUkVTUyhlbnRyeV9pZCk7Cj4gKwl3cml0ZWwodmFsLCBtaGRwLT5yZWdzICsgU09VUkNF X1BJRl9QS1RfQUxMT0NfUkVHKTsKPiArCj4gKwl3cml0ZWwoRl9QS1RfQUxMT0NfV1JfRU4oMSks IG1oZHAtPnJlZ3MgKyBTT1VSQ0VfUElGX1BLVF9BTExPQ19XUl9FTik7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgY2Ruc19oZG1pX2dldF9lZGlkX2Jsb2NrKHZvaWQgKmRhdGEsIHU4ICplZGlkLAo+ ICsJCQkJICAgIHUzMiBibG9jaywgc2l6ZV90IGxlbmd0aCkKPiArewo+ICsJc3RydWN0IGNkbnNf bWhkcDg1MDFfZGV2aWNlICptaGRwID0gZGF0YTsKPiArCXU4IG1zZ1syXSwgcmVnWzVdLCBpOwo+ ICsJaW50IHJldDsKPiArCj4gKwltdXRleF9sb2NrKCZtaGRwLT5tYm94X211dGV4KTsKPiArCj4g Kwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Cj4gKwkJbXNnWzBdID0gYmxvY2sgLyAyOwo+ICsJ CW1zZ1sxXSA9IGJsb2NrICUgMjsKPiArCj4gKwkJcmV0ID0gY2Ruc19taGRwX21haWxib3hfc2Vu ZCgmbWhkcC0+YmFzZSwgTUJfTU9EVUxFX0lEX0hETUlfVFgsIEhETUlfVFhfRURJRCwKPiArCQkJ CQkgICAgIHNpemVvZihtc2cpLCBtc2cpOwo+ICsJCWlmIChyZXQpCj4gKwkJCWNvbnRpbnVlOwo+ ICsKPiArCQlyZXQgPSBjZG5zX21oZHBfbWFpbGJveF9yZWN2X2hlYWRlcigmbWhkcC0+YmFzZSwg TUJfTU9EVUxFX0lEX0hETUlfVFgsCj4gKwkJCQkJCSAgICBIRE1JX1RYX0VESUQsIHNpemVvZihy ZWcpICsgbGVuZ3RoKTsKPiArCQlpZiAocmV0KQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJcmV0 ID0gY2Ruc19taGRwX21haWxib3hfcmVjdl9kYXRhKCZtaGRwLT5iYXNlLCByZWcsIHNpemVvZihy ZWcpKTsKPiArCQlpZiAocmV0KQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJcmV0ID0gY2Ruc19t aGRwX21haWxib3hfcmVjdl9kYXRhKCZtaGRwLT5iYXNlLCBlZGlkLCBsZW5ndGgpOwo+ICsJCWlm IChyZXQpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlpZiAoKHJlZ1szXSA8PCA4IHwgcmVnWzRd KSA9PSBsZW5ndGgpCj4gKwkJCWJyZWFrOwo+ICsJfQo+ICsKPiArCW11dGV4X3VubG9jaygmbWhk cC0+bWJveF9tdXRleCk7Cj4gKwo+ICsJaWYgKHJldCkKPiArCQlkZXZfZXJyKG1oZHAtPmRldiwg ImdldCBibG9ja1slZF0gZWRpZCBmYWlsZWQ6ICVkXG4iLCBibG9jaywgcmV0KTsKPiArCXJldHVy biByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgY2Ruc19oZG1pX3NjZGNfd3JpdGUoc3RydWN0 IGNkbnNfbWhkcDg1MDFfZGV2aWNlICptaGRwLCB1OCBhZGRyLCB1OCB2YWx1ZSkKPiArewo+ICsJ dTggbXNnWzVdLCByZWdbNV07Cj4gKwlpbnQgcmV0Owo+ICsKPiArCW1zZ1swXSA9IDB4NTQ7Cj4g Kwltc2dbMV0gPSBhZGRyOwo+ICsJbXNnWzJdID0gMDsKPiArCW1zZ1szXSA9IDE7Cj4gKwltc2db NF0gPSB2YWx1ZTsKPiArCj4gKwltdXRleF9sb2NrKCZtaGRwLT5tYm94X211dGV4KTsKPiArCj4g KwlyZXQgPSBjZG5zX21oZHBfbWFpbGJveF9zZW5kKCZtaGRwLT5iYXNlLCBNQl9NT0RVTEVfSURf SERNSV9UWCwgSERNSV9UWF9XUklURSwKPiArCQkJCSAgICAgc2l6ZW9mKG1zZyksIG1zZyk7Cj4g KwlpZiAocmV0KQo+ICsJCWdvdG8gZXJyX3NjZGNfd3JpdGU7Cj4gKwo+ICsJcmV0ID0gY2Ruc19t aGRwX21haWxib3hfcmVjdl9oZWFkZXIoJm1oZHAtPmJhc2UsIE1CX01PRFVMRV9JRF9IRE1JX1RY LAo+ICsJCQkJCSAgICBIRE1JX1RYX1dSSVRFLCBzaXplb2YocmVnKSk7Cj4gKwlpZiAocmV0KQo+ ICsJCWdvdG8gZXJyX3NjZGNfd3JpdGU7Cj4gKwo+ICsJcmV0ID0gY2Ruc19taGRwX21haWxib3hf cmVjdl9kYXRhKCZtaGRwLT5iYXNlLCByZWcsIHNpemVvZihyZWcpKTsKPiArCWlmIChyZXQpCj4g KwkJZ290byBlcnJfc2NkY193cml0ZTsKPiArCj4gKwlpZiAocmVnWzBdICE9IDApCj4gKwkJcmV0 ID0gLUVJTlZBTDsKPiArCj4gK2Vycl9zY2RjX3dyaXRlOgo+ICsKPiArCW11dGV4X3VubG9jaygm bWhkcC0+bWJveF9tdXRleCk7Cj4gKwo+ICsJaWYgKHJldCkKPiArCQlkZXZfZXJyKG1oZHAtPmRl diwgInNjZGMgd3JpdGUgZmFpbGVkOiAlZFxuIiwgcmV0KTsKPiArCXJldHVybiByZXQ7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgY2Ruc19oZG1pX2N0cmxfaW5pdChzdHJ1Y3QgY2Ruc19taGRwODUw MV9kZXZpY2UgKm1oZHApCj4gK3sKPiArCXVuc2lnbmVkIGxvbmcgbG9uZyBjaGFyX3JhdGUgPSBt aGRwLT5oZG1pLmNoYXJfcmF0ZTsKPiArCXUzMiBwcm90b2NvbCA9IG1oZHAtPmhkbWkuaGRtaV90 eXBlOwo+ICsJdTMyIHJlZzAsIHJlZzEsIHZhbDsKPiArCWludCByZXQ7Cj4gKwo+ICsJLyogU2V0 IFBIWSB0byBIRE1JIGRhdGEgKi8KPiArCXJldCA9IGNkbnNfbWhkcF9yZWdfd3JpdGUoJm1oZHAt PmJhc2UsIFBIWV9EQVRBX1NFTCwgRl9TT1VSQ0VfUEhZX01IRFBfU0VMKDEpKTsKPiArCWlmIChy ZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0ID0gY2Ruc19taGRwX3JlZ193cml0 ZSgmbWhkcC0+YmFzZSwgSERUWF9IUEQsCj4gKwkJCQkgIEZfSFBEX1ZBTElEX1dJRFRIKDQpIHwg Rl9IUERfR0xJVENIX1dJRFRIKDApKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7 Cj4gKwo+ICsJLyogb3BlbiBDQVJTICovCj4gKwlyZXQgPSBjZG5zX21oZHBfcmVnX3dyaXRlKCZt aGRwLT5iYXNlLCBTT1VSQ0VfUEhZX0NBUiwgMHhGKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJl dHVybiByZXQ7Cj4gKwlyZXQgPSBjZG5zX21oZHBfcmVnX3dyaXRlKCZtaGRwLT5iYXNlLCBTT1VS Q0VfSERUWF9DQVIsIDB4RkYpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJuIHJldDsKPiAr CXJldCA9IGNkbnNfbWhkcF9yZWdfd3JpdGUoJm1oZHAtPmJhc2UsIFNPVVJDRV9QS1RfQ0FSLCAw eEYpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJuIHJldDsKPiArCXJldCA9IGNkbnNfbWhk cF9yZWdfd3JpdGUoJm1oZHAtPmJhc2UsIFNPVVJDRV9BSUZfQ0FSLCAweEYpOwo+ICsJaWYgKHJl dCA8IDApCj4gKwkJcmV0dXJuIHJldDsKPiArCXJldCA9IGNkbnNfbWhkcF9yZWdfd3JpdGUoJm1o ZHAtPmJhc2UsIFNPVVJDRV9DSVBIRVJfQ0FSLCAweEYpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJ cmV0dXJuIHJldDsKPiArCXJldCA9IGNkbnNfbWhkcF9yZWdfd3JpdGUoJm1oZHAtPmJhc2UsIFNP VVJDRV9DUllQVE9fQ0FSLCAweEYpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJuIHJldDsK PiArCXJldCA9IGNkbnNfbWhkcF9yZWdfd3JpdGUoJm1oZHAtPmJhc2UsIFNPVVJDRV9DRUNfQ0FS LCAzKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmVnMCA9IDB4 N2MxZjsKPiArCXJlZzEgPSAweDdjMWY7Cj4gKwlpZiAocHJvdG9jb2wgPT0gTU9ERV9IRE1JXzJf MCAmJiBjaGFyX3JhdGUgPj0gMzQwMDAwMDAwKSB7Cj4gKwkJcmVnMCA9IDA7Cj4gKwkJcmVnMSA9 IDB4RkZGRkY7Cj4gKwl9Cj4gKwlyZXQgPSBjZG5zX21oZHBfcmVnX3dyaXRlKCZtaGRwLT5iYXNl LCBIRFRYX0NMT0NLX1JFR18wLCByZWcwKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiBy ZXQ7Cj4gKwlyZXQgPSBjZG5zX21oZHBfcmVnX3dyaXRlKCZtaGRwLT5iYXNlLCBIRFRYX0NMT0NL X1JFR18xLCByZWcxKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJ Lyogc2V0IEhETUkgbW9kZSBhbmQgcHJlZW1ibGUgbW9kZSBkYXRhIGVuYWJsZSAqLwo+ICsJdmFs ID0gRl9IRE1JX01PREUocHJvdG9jb2wpIHwgRl9IRE1JMl9QUkVBTUJMRV9FTigxKSB8Cj4gKwkg ICAgICBGX0RBVEFfRU4oMSkgfCBGX0hETUkyX0NUUkxfSUxfTU9ERSgxKSB8IEZfQkNIX0VOKDEp IHwKPiArCSAgICAgIEZfUElDXzNEKDBYRikgfCBGX0NMRUFSX0FWTVVURSgxKTsKPiArCXJldCA9 IGNkbnNfbWhkcF9yZWdfd3JpdGUoJm1oZHAtPmJhc2UsIEhEVFhfQ09OVFJPTExFUiwgdmFsKTsK PiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGNkbnNfaGRtaV9tb2Rl X2NvbmZpZyhzdHJ1Y3QgY2Ruc19taGRwODUwMV9kZXZpY2UgKm1oZHAsCj4gKwkJCQkgc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCj4gKwkJCQkgc3RydWN0IHZpZGVvX2luZm8gKnZpZGVv X2luZm8pCj4gK3sKPiArCXUzMiB2c3luY19saW5lcyA9IG1vZGUtPnZzeW5jX2VuZCAtIG1vZGUt PnZzeW5jX3N0YXJ0Owo+ICsJdTMyIGVvZl9saW5lcyA9IG1vZGUtPnZzeW5jX3N0YXJ0IC0gbW9k ZS0+dmRpc3BsYXk7Cj4gKwl1MzIgc29mX2xpbmVzID0gbW9kZS0+dnRvdGFsIC0gbW9kZS0+dnN5 bmNfZW5kOwo+ICsJdTMyIGhibGFuayA9IG1vZGUtPmh0b3RhbCAtIG1vZGUtPmhkaXNwbGF5Owo+ ICsJdTMyIGhhY3RpdmUgPSBtb2RlLT5oZGlzcGxheTsKPiArCXUzMiB2YmxhbmsgPSBtb2RlLT52 dG90YWwgLSBtb2RlLT52ZGlzcGxheTsKPiArCXUzMiB2YWN0aXZlID0gbW9kZS0+dmRpc3BsYXk7 Cj4gKwl1MzIgaGZyb250ID0gbW9kZS0+aHN5bmNfc3RhcnQgLSBtb2RlLT5oZGlzcGxheTsKPiAr CXUzMiBoYmFjayA9IG1vZGUtPmh0b3RhbCAtIG1vZGUtPmhzeW5jX2VuZDsKPiArCXUzMiB2ZnJv bnQgPSBlb2ZfbGluZXM7Cj4gKwl1MzIgaHN5bmMgPSBoYmxhbmsgLSBoZnJvbnQgLSBoYmFjazsK PiArCXUzMiB2c3luYyA9IHZzeW5jX2xpbmVzOwo+ICsJdTMyIHZiYWNrID0gc29mX2xpbmVzOwo+ ICsJdTMyIHZfaF9wb2xhcml0eSA9ICgobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05IU1lO QykgPyAwIDogMSkgKwo+ICsJCQkgICAoKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OVlNZ TkMpID8gMCA6IDIpOwo+ICsJaW50IHJldDsKPiArCXUzMiB2YWw7Cj4gKwo+ICsJcmV0ID0gY2Ru c19taGRwX3JlZ193cml0ZSgmbWhkcC0+YmFzZSwgU0NIRURVTEVSX0hfU0laRSwgKGhhY3RpdmUg PDwgMTYpICsgaGJsYW5rKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ ICsJcmV0ID0gY2Ruc19taGRwX3JlZ193cml0ZSgmbWhkcC0+YmFzZSwgU0NIRURVTEVSX1ZfU0la RSwgKHZhY3RpdmUgPDwgMTYpICsgdmJsYW5rKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVy biByZXQ7Cj4gKwo+ICsJcmV0ID0gY2Ruc19taGRwX3JlZ193cml0ZSgmbWhkcC0+YmFzZSwgSERU WF9TSUdOQUxfRlJPTlRfV0lEVEgsICh2ZnJvbnQgPDwgMTYpICsgaGZyb250KTsKPiArCWlmIChy ZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0ID0gY2Ruc19taGRwX3JlZ193cml0 ZSgmbWhkcC0+YmFzZSwgSERUWF9TSUdOQUxfU1lOQ19XSURUSCwgKHZzeW5jIDw8IDE2KSArIGhz eW5jKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0ID0gY2Ru c19taGRwX3JlZ193cml0ZSgmbWhkcC0+YmFzZSwgSERUWF9TSUdOQUxfQkFDS19XSURUSCwgKHZi YWNrIDw8IDE2KSArIGhiYWNrKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4g Kwo+ICsJcmV0ID0gY2Ruc19taGRwX3JlZ193cml0ZSgmbWhkcC0+YmFzZSwgSFNZTkMyVlNZTkNf UE9MX0NUUkwsIHZfaF9wb2xhcml0eSk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlyZXR1cm4gcmV0 Owo+ICsKPiArCS8qIFJlc2V0IERhdGEgRW5hYmxlICovCj4gKwljZG5zX21oZHBfcmVnX3JlYWQo Jm1oZHAtPmJhc2UsIEhEVFhfQ09OVFJPTExFUiwgJnZhbCk7Cj4gKwl2YWwgJj0gfkZfREFUQV9F TigxKTsKPiArCXJldCA9IGNkbnNfbWhkcF9yZWdfd3JpdGUoJm1oZHAtPmJhc2UsIEhEVFhfQ09O VFJPTExFUiwgdmFsKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJ LyogU2V0IGJwYyAqLwo+ICsJdmFsICY9IH5GX1ZJRl9EQVRBX1dJRFRIKDMpOwo+ICsJc3dpdGNo ICh2aWRlb19pbmZvLT5icGMpIHsKPiArCWNhc2UgMTA6Cj4gKwkJdmFsIHw9IEZfVklGX0RBVEFf V0lEVEgoMSk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDEyOgo+ICsJCXZhbCB8PSBGX1ZJRl9EQVRB X1dJRFRIKDIpOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSAxNjoKPiArCQl2YWwgfD0gRl9WSUZfREFU QV9XSURUSCgzKTsKPiArCQlicmVhazsKPiArCWNhc2UgODoKPiArCWRlZmF1bHQ6Cj4gKwkJdmFs IHw9IEZfVklGX0RBVEFfV0lEVEgoMCk7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJLyogc2Vs ZWN0IGNvbG9yIGVuY29kaW5nICovCj4gKwl2YWwgJj0gfkZfSERNSV9FTkNPRElORygzKTsKPiAr CXN3aXRjaCAodmlkZW9faW5mby0+Y29sb3JfZm10KSB7Cj4gKwljYXNlIEhETUlfQ09MT1JTUEFD RV9ZVVY0NDQ6Cj4gKwkJdmFsIHw9IEZfSERNSV9FTkNPRElORygyKTsKPiArCQlicmVhazsKPiAr CWNhc2UgSERNSV9DT0xPUlNQQUNFX1lVVjQyMjoKPiArCQl2YWwgfD0gRl9IRE1JX0VOQ09ESU5H KDEpOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBIRE1JX0NPTE9SU1BBQ0VfWVVWNDIwOgo+ICsJCXZh bCB8PSBGX0hETUlfRU5DT0RJTkcoMyk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEhETUlfQ09MT1JT UEFDRV9SR0I6Cj4gKwlkZWZhdWx0Ogo+ICsJCXZhbCB8PSBGX0hETUlfRU5DT0RJTkcoMCk7Cj4g KwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gY2Ruc19taGRwX3JlZ193cml0ZSgmbWhkcC0+ YmFzZSwgSERUWF9DT05UUk9MTEVSLCB2YWwpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJu IHJldDsKPiArCj4gKwkvKiBzZXQgZGF0YSBlbmFibGUgKi8KPiArCXZhbCB8PSBGX0RBVEFfRU4o MSk7Cj4gKwlyZXQgPSBjZG5zX21oZHBfcmVnX3dyaXRlKCZtaGRwLT5iYXNlLCBIRFRYX0NPTlRS T0xMRVIsIHZhbCk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBj ZG5zX2hkbWlfZGlzYWJsZV9nY3Aoc3RydWN0IGNkbnNfbWhkcDg1MDFfZGV2aWNlICptaGRwKQo+ ICt7Cj4gKwl1MzIgdmFsOwo+ICsKPiArCWNkbnNfbWhkcF9yZWdfcmVhZCgmbWhkcC0+YmFzZSwg SERUWF9DT05UUk9MTEVSLCAmdmFsKTsKPiArCXZhbCAmPSB+Rl9HQ1BfRU4oMSk7Cj4gKwo+ICsJ cmV0dXJuIGNkbnNfbWhkcF9yZWdfd3JpdGUoJm1oZHAtPmJhc2UsIEhEVFhfQ09OVFJPTExFUiwg dmFsKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBjZG5zX2hkbWlfZW5hYmxlX2djcChzdHJ1Y3Qg Y2Ruc19taGRwODUwMV9kZXZpY2UgKm1oZHApCj4gK3sKPiArCXUzMiB2YWw7Cj4gKwo+ICsJY2Ru c19taGRwX3JlZ19yZWFkKCZtaGRwLT5iYXNlLCBIRFRYX0NPTlRST0xMRVIsICZ2YWwpOwo+ICsJ dmFsIHw9IEZfR0NQX0VOKDEpOwo+ICsKPiArCXJldHVybiBjZG5zX21oZHBfcmVnX3dyaXRlKCZt aGRwLT5iYXNlLCBIRFRYX0NPTlRST0xMRVIsIHZhbCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IGNkbnNfaGRtaV9zaW5rX2NvbmZpZyhzdHJ1Y3QgY2Ruc19taGRwODUwMV9kZXZpY2UgKm1oZHAp Cj4gK3sKPiArCXN0cnVjdCBkcm1fc2NkYyAqc2NkYyA9ICZtaGRwLT5jdXJyX2Nvbm4tPmRpc3Bs YXlfaW5mby5oZG1pLnNjZGM7Cj4gKwl1OCBidWZmID0gMDsKPiArCj4gKwkvKiBEZWZhdWx0IHdv cmsgaW4gSERNSTEuNCAqLwo+ICsJbWhkcC0+aGRtaS5oZG1pX3R5cGUgPSBNT0RFX0hETUlfMV80 Owo+ICsKPiArCS8qIGNoZWNrIHNpbmsgc3VwcG9ydCBTQ0RDIG9yIG5vdCAqLwo+ICsJaWYgKCFz Y2RjLT5zdXBwb3J0ZWQpIHsKPiArCQlkZXZfaW5mbyhtaGRwLT5kZXYsICJTaW5rIE5vdCBTdXBw b3J0IFNDRENcbiIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlpZiAobWhkcC0+aGRtaS5j aGFyX3JhdGUgPiAzNDAwMDAwMDApIHsKPiArCQkvKgo+ICsJCSAqIFRNRFMgQ2hhcmFjdGVyIFJh dGUgYWJvdmUgMzQwTUh6IHNob3VsZCB3b3JraW5nIGluIEhETUkyLjAKPiArCQkgKiBFbmFibGUg c2NyYW1ibGluZyBhbmQgVE1EU19CaXRfQ2xvY2tfUmF0aW8KPiArCQkgKi8KPiArCQlidWZmID0g U0NEQ19UTURTX0JJVF9DTE9DS19SQVRJT19CWV80MCB8IFNDRENfU0NSQU1CTElOR19FTkFCTEU7 Cj4gKwkJbWhkcC0+aGRtaS5oZG1pX3R5cGUgPSBNT0RFX0hETUlfMl8wOwo+ICsJfSBlbHNlIGlm IChzY2RjLT5zY3JhbWJsaW5nLmxvd19yYXRlcykgewo+ICsJCS8qCj4gKwkJICogRW5hYmxlIHNj cmFtYmxpbmcgYW5kIEhETUkyLjAgd2hlbiBzY3JhbWJsaW5nIGNhcGFiaWxpdHkgb2Ygc2luawo+ ICsJCSAqIGJlIGluZGljYXRlZCBpbiB0aGUgSEYtVlNEQiBMVEVfMzQwTWNzY19zY3JhbWJsZSBi aXQKPiArCQkgKi8KPiArCQlidWZmID0gU0NEQ19TQ1JBTUJMSU5HX0VOQUJMRTsKPiArCQltaGRw LT5oZG1pLmhkbWlfdHlwZSA9IE1PREVfSERNSV8yXzA7Cj4gKwl9Cj4gKwo+ICsJLyogVE1EUyBj b25maWcgKi8KPiArCWNkbnNfaGRtaV9zY2RjX3dyaXRlKG1oZHAsIFNDRENfVE1EU19DT05GSUcs IGJ1ZmYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGNkbnNfaGRtaV9icmlkZ2VfYXR0YWNoKHN0 cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCj4gKwkJCQkgICBlbnVtIGRybV9icmlkZ2VfYXR0YWNo X2ZsYWdzIGZsYWdzKQo+ICt7Cj4gKwlzdHJ1Y3QgY2Ruc19taGRwODUwMV9kZXZpY2UgKm1oZHAg PSBicmlkZ2UtPmRyaXZlcl9wcml2YXRlOwo+ICsKPiArCWlmICghKGZsYWdzICYgRFJNX0JSSURH RV9BVFRBQ0hfTk9fQ09OTkVDVE9SKSkgewo+ICsJCWRldl9lcnIobWhkcC0+ZGV2LCAiZG8gbm90 IHN1cHBvcnQgY3JlYXRpbmcgYSBkcm1fY29ubmVjdG9yXG4iKTsKPiArCQlyZXR1cm4gLUVJTlZB TDsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGVudW0gZHJtX21v ZGVfc3RhdHVzCj4gK2NkbnNfaGRtaV90bWRzX2NoYXJfcmF0ZV92YWxpZChjb25zdCBzdHJ1Y3Qg ZHJtX2JyaWRnZSAqYnJpZGdlLAo+ICsJCQkgICAgICAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgKm1vZGUsCj4gKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdG1kc19yYXRlKQo+ ICt7Cj4gKwlzdHJ1Y3QgY2Ruc19taGRwODUwMV9kZXZpY2UgKm1oZHAgPSBicmlkZ2UtPmRyaXZl cl9wcml2YXRlOwo+ICsJdW5pb24gcGh5X2NvbmZpZ3VyZV9vcHRzIHBoeV9jZmc7Cj4gKwlpbnQg cmV0Owo+ICsKPiArCXBoeV9jZmcuaGRtaS50bWRzX2NoYXJfcmF0ZSA9IHRtZHNfcmF0ZTsKPiAr Cj4gKwkvKiBNYWlsYm94IHByb3RlY3QgZm9yIEhETUkgUEhZIGFjY2VzcyAqLwo+ICsJbXV0ZXhf bG9jaygmbWhkcC0+bWJveF9tdXRleCk7Cj4gKwlyZXQgPSBwaHlfdmFsaWRhdGUobWhkcC0+cGh5 LCBQSFlfTU9ERV9IRE1JLCAwLCAmcGh5X2NmZyk7Cj4gKwltdXRleF91bmxvY2soJm1oZHAtPm1i b3hfbXV0ZXgpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJuIE1PREVfQ0xPQ0tfUkFOR0U7 Cj4gKwo+ICsJcmV0dXJuIE1PREVfT0s7Cj4gK30KPiArCj4gK3N0YXRpYyBlbnVtIGRybV9tb2Rl X3N0YXR1cwo+ICtjZG5zX2hkbWlfYnJpZGdlX21vZGVfdmFsaWQoc3RydWN0IGRybV9icmlkZ2Ug KmJyaWRnZSwKPiArCQkJICAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9pbmZvICppbmZvLAo+ ICsJCQkgICAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCj4gK3sKPiArCXVu c2lnbmVkIGxvbmcgbG9uZyB0bWRzX3JhdGU7Cj4gKwo+ICsJLyogV2UgZG9uJ3Qgc3VwcG9ydCBk b3VibGUtY2xvY2tlZCBhbmQgSW50ZXJsYWNlZCBtb2RlcyAqLwo+ICsJaWYgKG1vZGUtPmZsYWdz ICYgRFJNX01PREVfRkxBR19EQkxDTEsgfHwKPiArCSAgICBtb2RlLT5mbGFncyAmIERSTV9NT0RF X0ZMQUdfSU5URVJMQUNFKQo+ICsJCXJldHVybiBNT0RFX0JBRDsKPiArCj4gKwkvKiBNQVggc3Vw cG9ydCBwaXhlbCBjbG9jayByYXRlIDU5NE1IeiAqLwo+ICsJaWYgKG1vZGUtPmNsb2NrID4gNTk0 MDAwKQo+ICsJCXJldHVybiBNT0RFX0NMT0NLX0hJR0g7Cj4gKwo+ICsJaWYgKG1vZGUtPmhkaXNw bGF5ID4gMzg0MCkKPiArCQlyZXR1cm4gTU9ERV9CQURfSFZBTFVFOwo+ICsKPiArCWlmIChtb2Rl LT52ZGlzcGxheSA+IDIxNjApCj4gKwkJcmV0dXJuIE1PREVfQkFEX1ZWQUxVRTsKPiArCj4gKwl0 bWRzX3JhdGUgPSBtb2RlLT5jbG9jayAqIDEwMDBVTEw7Cj4gKwlyZXR1cm4gY2Ruc19oZG1pX3Rt ZHNfY2hhcl9yYXRlX3ZhbGlkKGJyaWRnZSwgbW9kZSwgdG1kc19yYXRlKTsKPiArfQo+ICsKPiAr c3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKPiArY2Ruc19oZG1pX2JyaWRnZV9kZXRl Y3Qoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPiArewo+ICsJc3RydWN0IGNkbnNfbWhkcDg1 MDFfZGV2aWNlICptaGRwID0gYnJpZGdlLT5kcml2ZXJfcHJpdmF0ZTsKPiArCj4gKwlyZXR1cm4g Y2Ruc19taGRwODUwMV9kZXRlY3QobWhkcCk7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX2VkaWQKPiArKmNkbnNfaGRtaV9icmlkZ2VfZWRpZF9yZWFkKHN0cnVjdCBkcm1fYnJp ZGdlICpicmlkZ2UsCj4gKwkJCSAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ ICt7Cj4gKwlzdHJ1Y3QgY2Ruc19taGRwODUwMV9kZXZpY2UgKm1oZHAgPSBicmlkZ2UtPmRyaXZl cl9wcml2YXRlOwo+ICsKPiArCXJldHVybiBkcm1fZWRpZF9yZWFkX2N1c3RvbShjb25uZWN0b3Is IGNkbnNfaGRtaV9nZXRfZWRpZF9ibG9jaywgbWhkcCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IGNkbnNfaGRtaV9icmlkZ2VfYXRvbWljX2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRn ZSwKPiArCQkJCQkgICAgc3RydWN0IGRybV9icmlkZ2Vfc3RhdGUgKm9sZF9zdGF0ZSkKPiArewo+ ICsJc3RydWN0IGNkbnNfbWhkcDg1MDFfZGV2aWNlICptaGRwID0gYnJpZGdlLT5kcml2ZXJfcHJp dmF0ZTsKPiArCj4gKwltaGRwLT5jdXJyX2Nvbm4gPSBOVUxMOwo+ICsKPiArCS8qIE1haWxib3gg cHJvdGVjdCBmb3IgSERNSSBQSFkgYWNjZXNzICovCj4gKwltdXRleF9sb2NrKCZtaGRwLT5tYm94 X211dGV4KTsKPiArCXBoeV9wb3dlcl9vZmYobWhkcC0+cGh5KTsKPiArCW11dGV4X3VubG9jaygm bWhkcC0+bWJveF9tdXRleCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGNkbnNfaGRtaV9icmlk Z2VfYXRvbWljX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+ICsJCQkJCSAgIHN0 cnVjdCBkcm1fYnJpZGdlX3N0YXRlICpvbGRfc3RhdGUpCj4gK3sKPiArCXN0cnVjdCBjZG5zX21o ZHA4NTAxX2RldmljZSAqbWhkcCA9IGJyaWRnZS0+ZHJpdmVyX3ByaXZhdGU7Cj4gKwlzdHJ1Y3Qg ZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUgPSBvbGRfc3RhdGUtPmJhc2Uuc3RhdGU7Cj4gKwlzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwo+ICsJc3RydWN0IHZpZGVvX2luZm8gKnZpZGVv ID0gJm1oZHAtPnZpZGVvX2luZm87Cj4gKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3Rh dGU7Cj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZTsKPiArCXN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gJm1oZHAtPm1vZGU7Cj4gKwl1bmlvbiBwaHlfY29u ZmlndXJlX29wdHMgcGh5X2NmZzsKPiArCWludCByZXQ7Cj4gKwo+ICsJY29ubmVjdG9yID0gZHJt X2F0b21pY19nZXRfbmV3X2Nvbm5lY3Rvcl9mb3JfZW5jb2RlcihzdGF0ZSwKPiArCQkJCQkJCSAg ICAgYnJpZGdlLT5lbmNvZGVyKTsKPiArCWlmIChXQVJOX09OKCFjb25uZWN0b3IpKQo+ICsJCXJl dHVybjsKPiArCj4gKwltaGRwLT5jdXJyX2Nvbm4gPSBjb25uZWN0b3I7Cj4gKwo+ICsJY29ubl9z dGF0ZSA9IGRybV9hdG9taWNfZ2V0X25ld19jb25uZWN0b3Jfc3RhdGUoc3RhdGUsIGNvbm5lY3Rv cik7Cj4gKwlpZiAoV0FSTl9PTighY29ubl9zdGF0ZSkpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWNy dGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9uZXdfY3J0Y19zdGF0ZShzdGF0ZSwgY29ubl9zdGF0 ZS0+Y3J0Yyk7Cj4gKwlpZiAoV0FSTl9PTighY3J0Y19zdGF0ZSkpCj4gKwkJcmV0dXJuOwo+ICsK PiArCXZpZGVvLT5jb2xvcl9mbXQgPSBjb25uX3N0YXRlLT5oZG1pLm91dHB1dF9mb3JtYXQ7Cj4g Kwl2aWRlby0+YnBjID0gY29ubl9zdGF0ZS0+aGRtaS5vdXRwdXRfYnBjOwo+ICsKPiArCWRybV9t b2RlX2NvcHkoJm1oZHAtPm1vZGUsICZjcnRjX3N0YXRlLT5hZGp1c3RlZF9tb2RlKTsKPiArCj4g KwkvKiB2aWRlbyBtb2RlIGNoZWNrICovCj4gKwlpZiAobW9kZS0+Y2xvY2sgPT0gMCB8fCBtb2Rl LT5oZGlzcGxheSA9PSAwIHx8IG1vZGUtPnZkaXNwbGF5ID09IDApCj4gKwkJcmV0dXJuOwo+ICsK PiArCWRldl9kYmcobWhkcC0+ZGV2LCAiTW9kZTogJWR4JWRwJWRcbiIsCj4gKwkJbW9kZS0+aGRp c3BsYXksIG1vZGUtPnZkaXNwbGF5LCBtb2RlLT5jbG9jayk7Cj4gKwo+ICsJZHJtX2F0b21pY19o ZWxwZXJfY29ubmVjdG9yX2hkbWlfdXBkYXRlX2luZm9mcmFtZXMoY29ubmVjdG9yLCBzdGF0ZSk7 Cj4gKwo+ICsJLyogTGluZSBzd2FwcGluZyAqLwo+ICsJY2Ruc19taGRwX3JlZ193cml0ZSgmbWhk cC0+YmFzZSwgTEFORVNfQ09ORklHLCAweDAwNDAwMDAwIHwgbWhkcC0+bGFuZV9tYXBwaW5nKTsK PiArCj4gKwltaGRwLT5oZG1pLmNoYXJfcmF0ZSA9IGRybV9oZG1pX2NvbXB1dGVfbW9kZV9jbG9j ayhtb2RlLAo+ICsJCQkJCQkJICAgbWhkcC0+dmlkZW9faW5mby5icGMsCj4gKwkJCQkJCQkgICBt aGRwLT52aWRlb19pbmZvLmNvbG9yX2ZtdCk7Cj4gKwlwaHlfY2ZnLmhkbWkudG1kc19jaGFyX3Jh dGUgPSBtaGRwLT5oZG1pLmNoYXJfcmF0ZTsKPiArCj4gKwkvKiBNYWlsYm94IHByb3RlY3QgZm9y IEhETUkgUEhZIGFjY2VzcyAqLwo+ICsJbXV0ZXhfbG9jaygmbWhkcC0+bWJveF9tdXRleCk7Cj4g KwlyZXQgPSBwaHlfY29uZmlndXJlKG1oZHAtPnBoeSwgJnBoeV9jZmcpOwo+ICsJbXV0ZXhfdW5s b2NrKCZtaGRwLT5tYm94X211dGV4KTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJyKG1oZHAt PmRldiwgIiVzOiBwaHlfY29uZmlndXJlKCkgZmFpbGVkOiAlZFxuIiwKPiArCQkJX19mdW5jX18s IHJldCk7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWNkbnNfaGRtaV9zaW5rX2NvbmZpZyht aGRwKTsKPiArCj4gKwlyZXQgPSBjZG5zX2hkbWlfY3RybF9pbml0KG1oZHApOwo+ICsJaWYgKHJl dCA8IDApIHsKPiArCQlkZXZfZXJyKG1oZHAtPmRldiwgIiVzLCByZXQgPSAlZFxuIiwgX19mdW5j X18sIHJldCk7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCS8qIENvbmZpZyBHQ1AgKi8KPiAr CWlmIChtaGRwLT52aWRlb19pbmZvLmJwYyA9PSA4KQo+ICsJCWNkbnNfaGRtaV9kaXNhYmxlX2dj cChtaGRwKTsKPiArCWVsc2UKPiArCQljZG5zX2hkbWlfZW5hYmxlX2djcChtaGRwKTsKPiArCj4g KwlyZXQgPSBjZG5zX2hkbWlfbW9kZV9jb25maWcobWhkcCwgbW9kZSwgJm1oZHAtPnZpZGVvX2lu Zm8pOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlkZXZfZXJyKG1oZHAtPmRldiwgIkNETl9BUElf SERNSVRYX1NldFZpY19ibG9ja2luZyByZXQgPSAlZFxuIiwgcmV0KTsKPiArCQlyZXR1cm47Cj4g Kwl9Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgY2Ruc19oZG1pX2JyaWRnZV9jbGVhcl9pbmZvZnJh bWUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKPiArCQkJCQkgICAgZW51bSBoZG1pX2luZm9m cmFtZV90eXBlIHR5cGUpCj4gK3sKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IGNkbnNfaGRtaV9icmlkZ2Vfd3JpdGVfaW5mb2ZyYW1lKHN0cnVjdCBkcm1fYnJpZGdlICpicmlk Z2UsCj4gKwkJCQkJICAgIGVudW0gaGRtaV9pbmZvZnJhbWVfdHlwZSB0eXBlLAo+ICsJCQkJCSAg ICBjb25zdCB1OCAqYnVmZmVyLCBzaXplX3QgbGVuKQo+ICt7Cj4gKwlzdHJ1Y3QgY2Ruc19taGRw ODUwMV9kZXZpY2UgKm1oZHAgPSBicmlkZ2UtPmRyaXZlcl9wcml2YXRlOwo+ICsKPiArCXN3aXRj aCAodHlwZSkgewo+ICsJY2FzZSBIRE1JX0lORk9GUkFNRV9UWVBFX0FWSToKPiArCQljZG5zX2hk bWlfY29uZmlnX2luZm9mcmFtZShtaGRwLCAwLCBsZW4sIGJ1ZmZlciwgSERNSV9JTkZPRlJBTUVf VFlQRV9BVkkpOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBIRE1JX0lORk9GUkFNRV9UWVBFX1NQRDoK PiArCQljZG5zX2hkbWlfY29uZmlnX2luZm9mcmFtZShtaGRwLCAxLCBsZW4sIGJ1ZmZlciwgSERN SV9JTkZPRlJBTUVfVFlQRV9TUEQpOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBIRE1JX0lORk9GUkFN RV9UWVBFX1ZFTkRPUjoKPiArCQljZG5zX2hkbWlfY29uZmlnX2luZm9mcmFtZShtaGRwLCAyLCBs ZW4sIGJ1ZmZlciwgSERNSV9JTkZPRlJBTUVfVFlQRV9WRU5ET1IpOwo+ICsJCWJyZWFrOwo+ICsJ ZGVmYXVsdDoKPiArCQlkZXZfZGJnKG1oZHAtPmRldiwgIlVuc3VwcG9ydGVkIGluZm9mcmFtZSB0 eXBlICV4XG4iLCB0eXBlKTsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3Rh dGljIGludCBjZG5zX2hkbWlfYnJpZGdlX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2JyaWRnZSAq YnJpZGdlLAo+ICsJCQkJCSBzdHJ1Y3QgZHJtX2JyaWRnZV9zdGF0ZSAqYnJpZGdlX3N0YXRlLAo+ ICsJCQkJCSBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gKwkJCQkJIHN0cnVj dCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlKQo+ICt7Cj4gKwlyZXR1cm4gZHJtX2F0 b21pY19oZWxwZXJfY29ubmVjdG9yX2hkbWlfY2hlY2soY29ubl9zdGF0ZS0+Y29ubmVjdG9yLCBj b25uX3N0YXRlLT5zdGF0ZSk7Cj4gK30KPiArCj4gK2NvbnN0IHN0cnVjdCBkcm1fYnJpZGdlX2Z1 bmNzIGNkbnNfaGRtaV9icmlkZ2VfZnVuY3MgPSB7Cj4gKwkuYXR0YWNoID0gY2Ruc19oZG1pX2Jy aWRnZV9hdHRhY2gsCj4gKwkuZGV0ZWN0ID0gY2Ruc19oZG1pX2JyaWRnZV9kZXRlY3QsCj4gKwku ZWRpZF9yZWFkID0gY2Ruc19oZG1pX2JyaWRnZV9lZGlkX3JlYWQsCj4gKwkubW9kZV92YWxpZCA9 IGNkbnNfaGRtaV9icmlkZ2VfbW9kZV92YWxpZCwKPiArCS5hdG9taWNfZW5hYmxlID0gY2Ruc19o ZG1pX2JyaWRnZV9hdG9taWNfZW5hYmxlLAo+ICsJLmF0b21pY19kaXNhYmxlID0gY2Ruc19oZG1p X2JyaWRnZV9hdG9taWNfZGlzYWJsZSwKPiArCS5hdG9taWNfY2hlY2sgPSBjZG5zX2hkbWlfYnJp ZGdlX2F0b21pY19jaGVjaywKPiArCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21p Y19oZWxwZXJfYnJpZGdlX2R1cGxpY2F0ZV9zdGF0ZSwKPiArCS5hdG9taWNfZGVzdHJveV9zdGF0 ZSA9IGRybV9hdG9taWNfaGVscGVyX2JyaWRnZV9kZXN0cm95X3N0YXRlLAo+ICsJLmF0b21pY19y ZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2JyaWRnZV9yZXNldCwKPiArCS5oZG1pX2NsZWFyX2lu Zm9mcmFtZSA9IGNkbnNfaGRtaV9icmlkZ2VfY2xlYXJfaW5mb2ZyYW1lLAo+ICsJLmhkbWlfd3Jp dGVfaW5mb2ZyYW1lID0gY2Ruc19oZG1pX2JyaWRnZV93cml0ZV9pbmZvZnJhbWUsCj4gKwkuaGRt aV90bWRzX2NoYXJfcmF0ZV92YWxpZCA9IGNkbnNfaGRtaV90bWRzX2NoYXJfcmF0ZV92YWxpZCwK PiArfTsKCi0tIApsaW51eC1waHkgbWFpbGluZyBsaXN0CmxpbnV4LXBoeUBsaXN0cy5pbmZyYWRl YWQub3JnCmh0dHBzOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4 LXBoeQo=