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 84410C433F5 for ; Wed, 11 May 2022 12:23:27 +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-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:References:In-Reply-To:From: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=hwp8n4B0RKdNwpuU8/OqMWOVbNxRiyLu0PuKY+Eu2WA=; b=CPPcJHGWWT0Gkg +EArx7NR1iGtsHH7a8IyLdNozsoxi7Bec2HHRHyQ64R3+GrqIruez1wK5CYpM/a9n79nuRFD/tyAY S4/Yjls3I1jaMKYjBWhScsRqxpfpPgyzDllQZDVIwchfk56KYIV/7U5ch5WgRCI+qAncJWRV/wMZf lDWdtloDiWrKo6b+yHZvwAO5Ezf7jkFpOAC+iuG/sea56j7b61mXZfoT865r5GzY2d5YNp1HrnDry w674Xjg/IpXmeKLLFKO8XSQh3ExHslC2BbC7Mq1GRNn9Hx7EhEnjuhEUE9YiWZ8FhNGk3PUkSnFuc Lm7029lR9LmJPUaVXwxQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nolLg-006izx-I4; Wed, 11 May 2022 12:21:48 +0000 Received: from mailout2.w1.samsung.com ([210.118.77.12]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nolLY-006ixE-Q5 for linux-arm-kernel@lists.infradead.org; Wed, 11 May 2022 12:21:47 +0000 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20220511122134euoutp026bd1e7a6f6834b8f29baa5162affc8ff~uDFoxNYMU1714617146euoutp027 for ; Wed, 11 May 2022 12:21:34 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20220511122134euoutp026bd1e7a6f6834b8f29baa5162affc8ff~uDFoxNYMU1714617146euoutp027 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1652271694; bh=ToPPrn0ywVgbC3aCpJDWuvWJJkSJlDT6q2Qj28iExR0=; h=Date:Subject:To:Cc:From:In-Reply-To:References:From; b=IogG9XC/SrlBa9xiOuxeXcLRACh6pLaExQ9RoQiDUYp1Y5N0+XsEqoisSlbpZNWRz 1ybdPKd9hg/b5tFF+m3zbM18OTMbtad3JOIRCedq0vqtowMEUKvch94iTXxbf4xNty eohcSWDo0ORnCUZRP2UH4reHRgnm8t8vM1oa+SIo= Received: from eusmges2new.samsung.com (unknown [203.254.199.244]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20220511122134eucas1p1a40400ea1fa1003ec1ea4e1f9a4ce974~uDFoQ5YWa2241322413eucas1p1A; Wed, 11 May 2022 12:21:34 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges2new.samsung.com (EUCPMTA) with SMTP id 87.8C.09887.E4AAB726; Wed, 11 May 2022 13:21:34 +0100 (BST) Received: from eusmtrp1.samsung.com (unknown [182.198.249.138]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20220511122133eucas1p1247bc384fbd49ff498630eec63ce4c83~uDFnti5V22237722377eucas1p19; Wed, 11 May 2022 12:21:33 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp1.samsung.com (KnoxPortal) with ESMTP id 20220511122133eusmtrp17caab0a06ca252d7024f083d59330755~uDFnsfmiO2225022250eusmtrp1j; Wed, 11 May 2022 12:21:33 +0000 (GMT) X-AuditID: cbfec7f4-471ff7000000269f-5a-627baa4e1e9a Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 50.9F.09404.D4AAB726; Wed, 11 May 2022 13:21:33 +0100 (BST) Received: from [106.210.134.192] (unknown [106.210.134.192]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20220511122132eusmtip2c52ba383cfe0ec4bf6cf1be2b6cafe7f~uDFmlIOGV2776427764eusmtip2l; Wed, 11 May 2022 12:21:32 +0000 (GMT) Message-ID: Date: Wed, 11 May 2022 14:21:32 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.9.0 Subject: Re: [PATCH v2 01/12] drm: bridge: Add Samsung DSIM bridge driver Content-Language: en-US To: Jagan Teki , Andrzej Hajda , Inki Dae , Joonyoung Shim , Seung-Woo Kim , Kyungmin Park , Frieder Schrempf , Fancy Fang , Tim Harvey , Michael Nazzareno Trimarchi , Adam Ford , Neil Armstrong , Robert Foss , Laurent Pinchart , Tommaso Merciai Cc: Matteo Lisi , dri-devel@lists.freedesktop.org, linux-samsung-soc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, NXP Linux Team , linux-amarula From: Marek Szyprowski In-Reply-To: <20220504114021.33265-2-jagan@amarulasolutions.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFupnk+LIzCtJLcpLzFFi42LZduznOV2/VdVJBqf2cFncuX2a2eL+4s8s Fq9vr2CzuPL1PZtF79JzrBaT7k9gsfiyaQKbxYt7F1kszja9YbfonLiE3WL5hH1sFpseX2O1 6Pq1ktlixvl9TBanH61ntjjV2Mpicagv2uLTrIdA8ckv2SwunvjEbPH991lmB1GPtR/vs3q8 v9HK7jHlxBFWj3M9d9k8ds66y+4xu2Mmq8fiPS+ZPI5cXczqcefaHjaP+93HmTw2L6n32Phu B5NH35ZVjB6fN8kF8EVx2aSk5mSWpRbp2yVwZXw49IyxoHMKc0X/+n9MDYxrDjN1MXJySAiY SLzq28XexcjFISSwglHi0q/DjBDOF0aJmZe3Q2U+M0qcfDefBablw56HzBCJ5YwSB3Z8Z4Jw PjJK3J/6iRmkilfATuLWvwtgHSwCqhJXHn6AigtKnJz5BCwuKpAk8ebNVaA4B4ewgKfE+03s IGFmAXGJW0/mg90nIjCJVaLpizjIfGaQ+T0/HoLNYRMwlOh628UGYnMKOEhc3/YPqlleonnr bLDrJATauCQOHJrLCHG2i8TsY13sELawxKvjW6BsGYnTk3tYQI6QEMiX+DvDGCJcIXHt9Rpm CNta4s65X2wgJcwCmhLrd+lDhB0ltu76B9XJJ3HjrSDEBXwSk7ZNZ4YI80p0tAlBVKtJzDq+ Dm7nwQuXmCcwKs1CCpNZSJ6fheSXWQh7FzCyrGIUTy0tzk1PLTbKSy3XK07MLS7NS9dLzs/d xAhMs6f/Hf+yg3H5q496hxiZOBgPMUpwMCuJ8O7vq0gS4k1JrKxKLcqPLyrNSS0+xCjNwaIk zpucuSFRSCA9sSQ1OzW1ILUIJsvEwSnVwBR7/8fbL0mrlI6I3ov5PVvWu+7dZzf3pXYlRtOY m1UsdzTXTvfLt9+UEj05MceF+a/G/8oVqz22pfvpxhtn3DhetOTB0rlv582Osd10rvhNWmq8 Q3Om8JdzUeeuPJYM8FRpts2cee+mdNX1K/nPS2rjlmyUUdWvWsK3qzrRmUfqWP7qtTbr9JJv XIqx/N39qinp8qbCP97VaxzM2X7Pz+09o6Fm3rznmHbdncfhrreFb14+6r58k5fkTv53nNNT ilft7D3aoxK6caJn/Tr/1YVVeY17561f2VSkrn8qaO1+ta0M7FP0l97Tr2au91hR/4ihe5be 5LjvBY/Wvvq2Q3jq9YKtJk5ey23X/zr5hkuJpTgj0VCLuag4EQDY3Sa2IgQAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrMKsWRmVeSWpSXmKPExsVy+t/xe7q+q6qTDG7NVbC4c/s0s8X9xZ9Z LF7fXsFmceXrezaL3qXnWC0m3Z/AYvFl0wQ2ixf3LrJYnG16w27ROXEJu8XyCfvYLDY9vsZq 0fVrJbPFjPP7mCxOP1rPbHGqsZXF4lBftMWnWQ+B4pNfsllcPPGJ2eL777PMDqIeaz/eZ/V4 f6OV3WPKiSOsHud67rJ57Jx1l91jdsdMVo/Fe14yeRy5upjV4861PWwe97uPM3lsXlLvsfHd DiaPvi2rGD0+b5IL4IvSsynKLy1JVcjILy6xVYo2tDDSM7S00DMysdQzNDaPtTIyVdK3s0lJ zcksSy3St0vQy/hw6BljQecU5or+9f+YGhjXHGbqYuTkkBAwkfiw5yEziC0ksJRR4kObLURc RuLktAZWCFtY4s+1LrYuRi6gmveMEqeWnmUDSfAK2Enc+neBBcRmEVCVuPLwAzNEXFDi5Mwn QHEODlGBJIkjh/lBTGEBT4n3m9hBKpgFxCVuPZnPBDJSRGAaq8S9t1/B5jMLfGSUuDR5CzvE spOMEuc+PgNbxiZgKNH1tgvM5hRwkLi+7R/UKDOJrq1djBC2vETz1tnMExiFZiG5YxaSjbOQ tMxC0rKAkWUVo0hqaXFuem6xkV5xYm5xaV66XnJ+7iZGYGrZduznlh2MK1991DvEyMTBeIhR goNZSYR3f19FkhBvSmJlVWpRfnxRaU5q8SFGU2BgTGSWEk3OBya3vJJ4QzMDU0MTM0sDU0sz YyVxXs+CjkQhgfTEktTs1NSC1CKYPiYOTqkGpiVqfJeutf94E/47frp502Jem7gLP3aGdL6x 617TtXCuyYty0YtMB2Xt3ks7H3xUYKpyf7Xs7x5Zvpzi7RWR3Yck9khWdWh9l7zW/DjLuD+8 ePX9zkRJmWk5+gE8hxzKSuUk87Z03+dP/rtIg6Hw+7aZ7efjr5rtK7crW+n6L/aIlH5wTJuY ZpP3yZB4/UOxL6xCFO86mL3cN+fp7qcTuu+8VLsooLXN0qAmiaFX6PuX73HyAQvfmm9PSTH1 aJkv07+H+aDuIdmzxo4TJTd75G6YKrjGLIFZhvVT7vPyPvPOR2kW2RLXs/mUzr1MbHTjCEsw 5vRcmfj0t7TApZ2X1uy0frjQbmnjj2mrQ2KUWIozEg21mIuKEwE+/BVJtgMAAA== X-CMS-MailID: 20220511122133eucas1p1247bc384fbd49ff498630eec63ce4c83 X-Msg-Generator: CA X-RootMTR: 20220504114058eucas1p1363bdee5cb1bf8d38dd33810a729d28b X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20220504114058eucas1p1363bdee5cb1bf8d38dd33810a729d28b References: <20220504114021.33265-1-jagan@amarulasolutions.com> <20220504114021.33265-2-jagan@amarulasolutions.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220511_052141_302361_3D0C6097 X-CRM114-Status: GOOD ( 24.70 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gMDQuMDUuMjAyMiAxMzo0MCwgSmFnYW4gVGVraSB3cm90ZToKPiBTYW1zdW5nIE1JUEkgRFNJ TSBjb250cm9sbGVyIGlzIGNvbW1vbiBEU0kgSVAgdGhhdCBjYW4gYmUgdXNlZCBpbiB2YXJpb3Vz Cj4gU29DcyBsaWtlIEV4eW5vcywgaS5NWDhNIE1pbmkvTmFuby4KPgo+IEluIG9yZGVyIHRvIGFj Y2VzcyB0aGlzIERTSSBjb250cm9sbGVyIGJldHdlZW4gdmFyaW91cyBwbGF0Zm9ybSBTb0NzLAo+ IHRoZSBpZGVhbCB3YXkgdG8gaW5jb3Jwb3JhdGUgdGhpcyBpbiB0aGUgZHJtIHN0YWNrIGlzIHZp YSB0aGUgZHJtIGJyaWRnZQo+IGRyaXZlci4KPgo+IFRoaXMgcGF0Y2ggaXMgdHJ5aW5nIHRvIGRp ZmZlcmVudGlhdGUgcGxhdGZvcm0tc3BlY2lmaWMgYW5kIGJyaWRnZSBkcml2ZXIKPiBjb2RlIGFu ZCBrZWVwIG1haW50YWluaW5nIHRoZSBleHlub3NfZHJtX2RzaS5jIGNvZGUgYXMgcGxhdGZvcm0t c3BlY2lmaWMKPiBnbHVlIGNvZGUgYW5kIHNhbXN1bmctZHNpbS5jIGFzIGEgY29tbW9uIGJyaWRn ZSBkcml2ZXIgY29kZS4KPgo+IC0gRXh5bm9zIHNwZWNpZmljIGdsdWUgY29kZSBpcyBleHlub3Mg c3BlY2lmaWMgdGVfaXJxLCBob3N0X2F0dGFjaCwgYW5kCj4gICAgZGV0YWNoIGNvZGUgYWxvbmcg d2l0aCBjb252ZW50aW9uYWwgY29tcG9uZW50X29wcy4KPgo+IC0gU2Ftc3VuZyBEU0lNIGlzIGEg YnJpZGdlIGRyaXZlciB3aGljaCBpcyBjb21tb24gYWNyb3NzIGFsbCBwbGF0Zm9ybXMgYW5kCj4g ICAgdGhlIHJlc3BlY3RpdmUgcGxhdGZvcm0tc3BlY2lmaWMgZ2x1ZSB3aWxsIGluaXRpYWxpemUg YXQgdGhlIGVuZCBvZiB0aGUKPiAgICBwcm9iZS4gVGhlIHBsYXRmb3JtLXNwZWNpZmljIG9wZXJh dGlvbnMgYW5kIG90aGVyIGdsdWUgY2FsbHPCoHdpbGwgaW52b2tlCj4gICAgb24gYXNzb2NpYXRl IGNvZGUgYXJlYXMuCj4KPiB2MjoKPiAqIGZpeGVkIGV4eW5vcyBkc2kgZHJpdmVyIGNvbnZlcnNp b24gKE1hcmVrIFN6eXByb3dza2kpCj4gKiB1cGRhdGVkIGNvbW1pdCBtZXNzYWdlCj4gKiB1cGRh dGVkIE1BSU5UQUlORVJTIGZpbGUKPgo+IHYxOgo+ICogRG9uJ3QgbWFpbnRhaW4gY29tcG9uZW50 X29wcyBpbiBicmlkZ2UgZHJpdmVyCj4gKiBEb24ndCBtYWludGFpbiBwbGF0Zm9ybSBnbHVlIGNv ZGUgaW4gYnJpZGdlIGRyaXZlcgo+ICogQWRkIHBsYXRmb3JtLXNwZWNpZmljIGdsdWUgY29kZSBh bmQgbWFrZSBhIGNvbW1vbiBicmlkZ2UKPgo+IFNpZ25lZC1vZmYtYnk6IE1hcmVrIFN6eXByb3dz a2kgPG0uc3p5cHJvd3NraUBzYW1zdW5nLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBKYWdhbiBUZWtp IDxqYWdhbkBhbWFydWxhc29sdXRpb25zLmNvbT4KPiAtLS0KPiAgIE1BSU5UQUlORVJTICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDggKwo+ICAgZHJpdmVycy9ncHUvZHJtL2JyaWRn ZS9LY29uZmlnICAgICAgICAgIHwgICAxMiArCj4gICBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01h a2VmaWxlICAgICAgICAgfCAgICAxICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc2Ftc3Vu Zy1kc2ltLmMgICB8IDE2ODcgKysrKysrKysrKysrKysrKysrKysrKwo+ICAgZHJpdmVycy9ncHUv ZHJtL2V4eW5vcy9LY29uZmlnICAgICAgICAgIHwgICAgMSArCj4gICBkcml2ZXJzL2dwdS9kcm0v ZXh5bm9zL2V4eW5vc19kcm1fZHNpLmMgfCAxNzI0ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4g ICBpbmNsdWRlL2RybS9icmlkZ2Uvc2Ftc3VuZy1kc2ltLmggICAgICAgfCAgIDk3ICsrCj4gICA3 IGZpbGVzIGNoYW5nZWQsIDE4NjkgaW5zZXJ0aW9ucygrKSwgMTY2MSBkZWxldGlvbnMoLSkKPiAg IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3NhbXN1bmctZHNpbS5j Cj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9kcm0vYnJpZGdlL3NhbXN1bmctZHNpbS5o Cj4KPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3NhbXN1bmctZHNpbS5j IGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zYW1zdW5nLWRzaW0uYwo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi43NzQ1OTAyZjNmMWUKPiAtLS0gL2Rldi9udWxs Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zYW1zdW5nLWRzaW0uYwo+IEBAIC0wLDAg KzEsMTY4NyBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Cj4g Ky8qCj4gKyAqIFNhbXN1bmcgTUlQSSBEU0lNIGJyaWRnZSBkcml2ZXIuCj4gKyAqCj4gKyAqIENv cHlyaWdodCAoQykgMjAyMSBBbWFydWxhIFNvbHV0aW9ucyhJbmRpYSkKPiArICogQ29weXJpZ2h0 IChjKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQKPiArICogQXV0aG9yOiBKYWdh biBUZWtpIDxqYWdhbkBhbWFydWxhc29sdXRpb25zLmNvbT4KPiArICoKPiArICogQmFzZWQgb24g ZXh5bm9zX2RybV9kc2kgZnJvbQo+ICsgKiBUb21hc3ogRmlnYSA8dC5maWdhQHNhbXN1bmcuY29t Pgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+Cj4gKwo+ICsjaW5jbHVk ZSA8ZHJtL2JyaWRnZS9zYW1zdW5nLWRzaW0uaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fcGFuZWwu aD4KPiArI2luY2x1ZGUgPGRybS9kcm1fcHJpbnQuaD4KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9j bGsuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pcnEu aD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGh5 L3BoeS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+Cj4gKwo+ICsj aW5jbHVkZSA8dmlkZW8vbWlwaV9kaXNwbGF5Lmg+Cj4gKwo+ICsvKiByZXR1cm5zIHRydWUgaWZm IGJvdGggYXJndW1lbnRzIGxvZ2ljYWxseSBkaWZmZXJzICovCj4gKyNkZWZpbmUgTkVRVihhLCBi KSAoIShhKSBeICEoYikpCj4gKwo+ICsvKiBEU0lNX1NUQVRVUyAqLwo+ICsjZGVmaW5lIERTSU1f U1RPUF9TVEFURV9EQVQoeCkJCSgoKHgpICYgMHhmKSA8PCAwKQo+ICsjZGVmaW5lIERTSU1fU1RP UF9TVEFURV9DTEsJCSgxIDw8IDgpCj4gKyNkZWZpbmUgRFNJTV9UWF9SRUFEWV9IU19DTEsJCSgx IDw8IDEwKQo+ICsjZGVmaW5lIERTSU1fUExMX1NUQUJMRQkJCSgxIDw8IDMxKQo+ICsKPiArLyog RFNJTV9TV1JTVCAqLwo+ICsjZGVmaW5lIERTSU1fRlVOQ1JTVAkJCSgxIDw8IDE2KQo+ICsjZGVm aW5lIERTSU1fU1dSU1QJCQkoMSA8PCAwKQo+ICsKPiArLyogRFNJTV9USU1FT1VUICovCj4gKyNk ZWZpbmUgRFNJTV9MUERSX1RJTUVPVVQoeCkJCSgoeCkgPDwgMCkKPiArI2RlZmluZSBEU0lNX0JU QV9USU1FT1VUKHgpCQkoKHgpIDw8IDE2KQo+ICsKPiArLyogRFNJTV9DTEtDVFJMICovCj4gKyNk ZWZpbmUgRFNJTV9FU0NfUFJFU0NBTEVSKHgpCQkoKCh4KSAmIDB4ZmZmZikgPDwgMCkKPiArI2Rl ZmluZSBEU0lNX0VTQ19QUkVTQ0FMRVJfTUFTSwkJKDB4ZmZmZiA8PCAwKQo+ICsjZGVmaW5lIERT SU1fTEFORV9FU0NfQ0xLX0VOX0NMSwkoMSA8PCAxOSkKPiArI2RlZmluZSBEU0lNX0xBTkVfRVND X0NMS19FTl9EQVRBKHgpCSgoKHgpICYgMHhmKSA8PCAyMCkKPiArI2RlZmluZSBEU0lNX0xBTkVf RVNDX0NMS19FTl9EQVRBX01BU0sJKDB4ZiA8PCAyMCkKPiArI2RlZmluZSBEU0lNX0JZVEVfQ0xL RU4JCQkoMSA8PCAyNCkKPiArI2RlZmluZSBEU0lNX0JZVEVfQ0xLX1NSQyh4KQkJKCgoeCkgJiAw eDMpIDw8IDI1KQo+ICsjZGVmaW5lIERTSU1fQllURV9DTEtfU1JDX01BU0sJCSgweDMgPDwgMjUp Cj4gKyNkZWZpbmUgRFNJTV9QTExfQllQQVNTCQkJKDEgPDwgMjcpCj4gKyNkZWZpbmUgRFNJTV9F U0NfQ0xLRU4JCQkoMSA8PCAyOCkKPiArI2RlZmluZSBEU0lNX1RYX1JFUVVFU1RfSFNDTEsJCSgx IDw8IDMxKQo+ICsKPiArLyogRFNJTV9DT05GSUcgKi8KPiArI2RlZmluZSBEU0lNX0xBTkVfRU5f Q0xLCQkoMSA8PCAwKQo+ICsjZGVmaW5lIERTSU1fTEFORV9FTih4KQkJCSgoKHgpICYgMHhmKSA8 PCAxKQo+ICsjZGVmaW5lIERTSU1fTlVNX09GX0RBVEFfTEFORSh4KQkoKCh4KSAmIDB4MykgPDwg NSkKPiArI2RlZmluZSBEU0lNX1NVQl9QSVhfRk9STUFUKHgpCQkoKCh4KSAmIDB4NykgPDwgOCkK PiArI2RlZmluZSBEU0lNX01BSU5fUElYX0ZPUk1BVF9NQVNLCSgweDcgPDwgMTIpCj4gKyNkZWZp bmUgRFNJTV9NQUlOX1BJWF9GT1JNQVRfUkdCODg4CSgweDcgPDwgMTIpCj4gKyNkZWZpbmUgRFNJ TV9NQUlOX1BJWF9GT1JNQVRfUkdCNjY2CSgweDYgPDwgMTIpCj4gKyNkZWZpbmUgRFNJTV9NQUlO X1BJWF9GT1JNQVRfUkdCNjY2X1AJKDB4NSA8PCAxMikKPiArI2RlZmluZSBEU0lNX01BSU5fUElY X0ZPUk1BVF9SR0I1NjUJKDB4NCA8PCAxMikKPiArI2RlZmluZSBEU0lNX1NVQl9WQwkJCSgoKHgp ICYgMHgzKSA8PCAxNikKPiArI2RlZmluZSBEU0lNX01BSU5fVkMJCQkoKCh4KSAmIDB4MykgPDwg MTgpCj4gKyNkZWZpbmUgRFNJTV9IU0FfTU9ERQkJCSgxIDw8IDIwKQo+ICsjZGVmaW5lIERTSU1f SEJQX01PREUJCQkoMSA8PCAyMSkKPiArI2RlZmluZSBEU0lNX0hGUF9NT0RFCQkJKDEgPDwgMjIp Cj4gKyNkZWZpbmUgRFNJTV9IU0VfTU9ERQkJCSgxIDw8IDIzKQo+ICsjZGVmaW5lIERTSU1fQVVU T19NT0RFCQkJKDEgPDwgMjQpCj4gKyNkZWZpbmUgRFNJTV9WSURFT19NT0RFCQkJKDEgPDwgMjUp Cj4gKyNkZWZpbmUgRFNJTV9CVVJTVF9NT0RFCQkJKDEgPDwgMjYpCj4gKyNkZWZpbmUgRFNJTV9T WU5DX0lORk9STQkJKDEgPDwgMjcpCj4gKyNkZWZpbmUgRFNJTV9FT1RfRElTQUJMRQkJKDEgPDwg MjgpCj4gKyNkZWZpbmUgRFNJTV9NRkxVU0hfVlMJCQkoMSA8PCAyOSkKPiArLyogVGhpcyBmbGFn IGlzIHZhbGlkIG9ubHkgZm9yIGV4eW5vczMyNTAvMzQ3Mi81MjYwLzU0MzAgKi8KPiArI2RlZmlu ZSBEU0lNX0NMS0xBTkVfU1RPUAkJKDEgPDwgMzApCj4gKwo+ICsvKiBEU0lNX0VTQ01PREUgKi8K PiArI2RlZmluZSBEU0lNX1RYX1RSSUdHRVJfUlNUCQkoMSA8PCA0KQo+ICsjZGVmaW5lIERTSU1f VFhfTFBEVF9MUAkJCSgxIDw8IDYpCj4gKyNkZWZpbmUgRFNJTV9DTURfTFBEVF9MUAkJKDEgPDwg NykKPiArI2RlZmluZSBEU0lNX0ZPUkNFX0JUQQkJCSgxIDw8IDE2KQo+ICsjZGVmaW5lIERTSU1f Rk9SQ0VfU1RPUF9TVEFURQkJKDEgPDwgMjApCj4gKyNkZWZpbmUgRFNJTV9TVE9QX1NUQVRFX0NO VCh4KQkJKCgoeCkgJiAweDdmZikgPDwgMjEpCj4gKyNkZWZpbmUgRFNJTV9TVE9QX1NUQVRFX0NO VF9NQVNLCSgweDdmZiA8PCAyMSkKPiArCj4gKy8qIERTSU1fTURSRVNPTCAqLwo+ICsjZGVmaW5l IERTSU1fTUFJTl9TVEFORF9CWQkJKDEgPDwgMzEpCj4gKyNkZWZpbmUgRFNJTV9NQUlOX1ZSRVNP TCh4LCBudW1fYml0cykJKCgoeCkgJiAoKDEgPDwgKG51bV9iaXRzKSkgLSAxKSkgPDwgMTYpCj4g KyNkZWZpbmUgRFNJTV9NQUlOX0hSRVNPTCh4LCBudW1fYml0cykJKCgoeCkgJiAoKDEgPDwgKG51 bV9iaXRzKSkgLSAxKSkgPDwgMCkKPiArCj4gKy8qIERTSU1fTVZQT1JDSCAqLwo+ICsjZGVmaW5l IERTSU1fQ01EX0FMTE9XKHgpCQkoKHgpIDw8IDI4KQo+ICsjZGVmaW5lIERTSU1fU1RBQkxFX1ZG UCh4KQkJKCh4KSA8PCAxNikKPiArI2RlZmluZSBEU0lNX01BSU5fVkJQKHgpCQkoKHgpIDw8IDAp Cj4gKyNkZWZpbmUgRFNJTV9DTURfQUxMT1dfTUFTSwkJKDB4ZiA8PCAyOCkKPiArI2RlZmluZSBE U0lNX1NUQUJMRV9WRlBfTUFTSwkJKDB4N2ZmIDw8IDE2KQo+ICsjZGVmaW5lIERTSU1fTUFJTl9W QlBfTUFTSwkJKDB4N2ZmIDw8IDApCj4gKwo+ICsvKiBEU0lNX01IUE9SQ0ggKi8KPiArI2RlZmlu ZSBEU0lNX01BSU5fSEZQKHgpCQkoKHgpIDw8IDE2KQo+ICsjZGVmaW5lIERTSU1fTUFJTl9IQlAo eCkJCSgoeCkgPDwgMCkKPiArI2RlZmluZSBEU0lNX01BSU5fSEZQX01BU0sJCSgoMHhmZmZmKSA8 PCAxNikKPiArI2RlZmluZSBEU0lNX01BSU5fSEJQX01BU0sJCSgoMHhmZmZmKSA8PCAwKQo+ICsK PiArLyogRFNJTV9NU1lOQyAqLwo+ICsjZGVmaW5lIERTSU1fTUFJTl9WU0EoeCkJCSgoeCkgPDwg MjIpCj4gKyNkZWZpbmUgRFNJTV9NQUlOX0hTQSh4KQkJKCh4KSA8PCAwKQo+ICsjZGVmaW5lIERT SU1fTUFJTl9WU0FfTUFTSwkJKCgweDNmZikgPDwgMjIpCj4gKyNkZWZpbmUgRFNJTV9NQUlOX0hT QV9NQVNLCQkoKDB4ZmZmZikgPDwgMCkKPiArCj4gKy8qIERTSU1fU0RSRVNPTCAqLwo+ICsjZGVm aW5lIERTSU1fU1VCX1NUQU5EWSh4KQkJKCh4KSA8PCAzMSkKPiArI2RlZmluZSBEU0lNX1NVQl9W UkVTT0woeCkJCSgoeCkgPDwgMTYpCj4gKyNkZWZpbmUgRFNJTV9TVUJfSFJFU09MKHgpCQkoKHgp IDw8IDApCj4gKyNkZWZpbmUgRFNJTV9TVUJfU1RBTkRZX01BU0sJCSgoMHgxKSA8PCAzMSkKPiAr I2RlZmluZSBEU0lNX1NVQl9WUkVTT0xfTUFTSwkJKCgweDdmZikgPDwgMTYpCj4gKyNkZWZpbmUg RFNJTV9TVUJfSFJFU09MX01BU0sJCSgoMHg3ZmYpIDw8IDApCj4gKwo+ICsvKiBEU0lNX0lOVFNS QyAqLwo+ICsjZGVmaW5lIERTSU1fSU5UX1BMTF9TVEFCTEUJCSgxIDw8IDMxKQo+ICsjZGVmaW5l IERTSU1fSU5UX1NXX1JTVF9SRUxFQVNFCQkoMSA8PCAzMCkKPiArI2RlZmluZSBEU0lNX0lOVF9T RlJfRklGT19FTVBUWQkJKDEgPDwgMjkpCj4gKyNkZWZpbmUgRFNJTV9JTlRfU0ZSX0hEUl9GSUZP X0VNUFRZCSgxIDw8IDI4KQo+ICsjZGVmaW5lIERTSU1fSU5UX0JUQQkJCSgxIDw8IDI1KQo+ICsj ZGVmaW5lIERTSU1fSU5UX0ZSQU1FX0RPTkUJCSgxIDw8IDI0KQo+ICsjZGVmaW5lIERTSU1fSU5U X1JYX1RJTUVPVVQJCSgxIDw8IDIxKQo+ICsjZGVmaW5lIERTSU1fSU5UX0JUQV9USU1FT1VUCQko MSA8PCAyMCkKPiArI2RlZmluZSBEU0lNX0lOVF9SWF9ET05FCQkoMSA8PCAxOCkKPiArI2RlZmlu ZSBEU0lNX0lOVF9SWF9URQkJCSgxIDw8IDE3KQo+ICsjZGVmaW5lIERTSU1fSU5UX1JYX0FDSwkJ CSgxIDw8IDE2KQo+ICsjZGVmaW5lIERTSU1fSU5UX1JYX0VDQ19FUlIJCSgxIDw8IDE1KQo+ICsj ZGVmaW5lIERTSU1fSU5UX1JYX0NSQ19FUlIJCSgxIDw8IDE0KQo+ICsKPiArLyogRFNJTV9GSUZP Q1RSTCAqLwo+ICsjZGVmaW5lIERTSU1fUlhfREFUQV9GVUxMCQkoMSA8PCAyNSkKPiArI2RlZmlu ZSBEU0lNX1JYX0RBVEFfRU1QVFkJCSgxIDw8IDI0KQo+ICsjZGVmaW5lIERTSU1fU0ZSX0hFQURF Ul9GVUxMCQkoMSA8PCAyMykKPiArI2RlZmluZSBEU0lNX1NGUl9IRUFERVJfRU1QVFkJCSgxIDw8 IDIyKQo+ICsjZGVmaW5lIERTSU1fU0ZSX1BBWUxPQURfRlVMTAkJKDEgPDwgMjEpCj4gKyNkZWZp bmUgRFNJTV9TRlJfUEFZTE9BRF9FTVBUWQkJKDEgPDwgMjApCj4gKyNkZWZpbmUgRFNJTV9JODBf SEVBREVSX0ZVTEwJCSgxIDw8IDE5KQo+ICsjZGVmaW5lIERTSU1fSTgwX0hFQURFUl9FTVBUWQkJ KDEgPDwgMTgpCj4gKyNkZWZpbmUgRFNJTV9JODBfUEFZTE9BRF9GVUxMCQkoMSA8PCAxNykKPiAr I2RlZmluZSBEU0lNX0k4MF9QQVlMT0FEX0VNUFRZCQkoMSA8PCAxNikKPiArI2RlZmluZSBEU0lN X1NEX0hFQURFUl9GVUxMCQkoMSA8PCAxNSkKPiArI2RlZmluZSBEU0lNX1NEX0hFQURFUl9FTVBU WQkJKDEgPDwgMTQpCj4gKyNkZWZpbmUgRFNJTV9TRF9QQVlMT0FEX0ZVTEwJCSgxIDw8IDEzKQo+ ICsjZGVmaW5lIERTSU1fU0RfUEFZTE9BRF9FTVBUWQkJKDEgPDwgMTIpCj4gKyNkZWZpbmUgRFNJ TV9NRF9IRUFERVJfRlVMTAkJKDEgPDwgMTEpCj4gKyNkZWZpbmUgRFNJTV9NRF9IRUFERVJfRU1Q VFkJCSgxIDw8IDEwKQo+ICsjZGVmaW5lIERTSU1fTURfUEFZTE9BRF9GVUxMCQkoMSA8PCA5KQo+ ICsjZGVmaW5lIERTSU1fTURfUEFZTE9BRF9FTVBUWQkJKDEgPDwgOCkKPiArI2RlZmluZSBEU0lN X1JYX0ZJRk8JCQkoMSA8PCA0KQo+ICsjZGVmaW5lIERTSU1fU0ZSX0ZJRk8JCQkoMSA8PCAzKQo+ ICsjZGVmaW5lIERTSU1fSTgwX0ZJRk8JCQkoMSA8PCAyKQo+ICsjZGVmaW5lIERTSU1fU0RfRklG TwkJCSgxIDw8IDEpCj4gKyNkZWZpbmUgRFNJTV9NRF9GSUZPCQkJKDEgPDwgMCkKPiArCj4gKy8q IERTSU1fUEhZQUNDSFIgKi8KPiArI2RlZmluZSBEU0lNX0FGQ19FTgkJCSgxIDw8IDE0KQo+ICsj ZGVmaW5lIERTSU1fQUZDX0NUTCh4KQkJCSgoKHgpICYgMHg3KSA8PCA1KQo+ICsKPiArLyogRFNJ TV9QTExDVFJMICovCj4gKyNkZWZpbmUgRFNJTV9GUkVRX0JBTkQoeCkJCSgoeCkgPDwgMjQpCj4g KyNkZWZpbmUgRFNJTV9QTExfRU4JCQkoMSA8PCAyMykKPiArI2RlZmluZSBEU0lNX1BMTF9QKHgp CQkJKCh4KSA8PCAxMykKPiArI2RlZmluZSBEU0lNX1BMTF9NKHgpCQkJKCh4KSA8PCA0KQo+ICsj ZGVmaW5lIERTSU1fUExMX1MoeCkJCQkoKHgpIDw8IDEpCj4gKwo+ICsvKiBEU0lNX1BIWUNUUkwg Ki8KPiArI2RlZmluZSBEU0lNX1BIWUNUUkxfVUxQU19FWElUKHgpCSgoKHgpICYgMHgxZmYpIDw8 IDApCj4gKyNkZWZpbmUgRFNJTV9QSFlDVFJMX0JfRFBIWUNUTF9WUkVHX0xQCSgxIDw8IDMwKQo+ ICsjZGVmaW5lIERTSU1fUEhZQ1RSTF9CX0RQSFlDVExfU0xFV19VUAkoMSA8PCAxNCkKPiArCj4g Ky8qIERTSU1fUEhZVElNSU5HICovCj4gKyNkZWZpbmUgRFNJTV9QSFlUSU1JTkdfTFBYKHgpCQko KHgpIDw8IDgpCj4gKyNkZWZpbmUgRFNJTV9QSFlUSU1JTkdfSFNfRVhJVCh4KQkoKHgpIDw8IDAp Cj4gKwo+ICsvKiBEU0lNX1BIWVRJTUlORzEgKi8KPiArI2RlZmluZSBEU0lNX1BIWVRJTUlORzFf Q0xLX1BSRVBBUkUoeCkJKCh4KSA8PCAyNCkKPiArI2RlZmluZSBEU0lNX1BIWVRJTUlORzFfQ0xL X1pFUk8oeCkJKCh4KSA8PCAxNikKPiArI2RlZmluZSBEU0lNX1BIWVRJTUlORzFfQ0xLX1BPU1Qo eCkJKCh4KSA8PCA4KQo+ICsjZGVmaW5lIERTSU1fUEhZVElNSU5HMV9DTEtfVFJBSUwoeCkJKCh4 KSA8PCAwKQo+ICsKPiArLyogRFNJTV9QSFlUSU1JTkcyICovCj4gKyNkZWZpbmUgRFNJTV9QSFlU SU1JTkcyX0hTX1BSRVBBUkUoeCkJKCh4KSA8PCAxNikKPiArI2RlZmluZSBEU0lNX1BIWVRJTUlO RzJfSFNfWkVSTyh4KQkoKHgpIDw8IDgpCj4gKyNkZWZpbmUgRFNJTV9QSFlUSU1JTkcyX0hTX1RS QUlMKHgpCSgoeCkgPDwgMCkKPiArCj4gKyNkZWZpbmUgRFNJX01BWF9CVVNfV0lEVEgJCTQKPiAr I2RlZmluZSBEU0lfTlVNX1ZJUlRVQUxfQ0hBTk5FTFMJNAo+ICsjZGVmaW5lIERTSV9UWF9GSUZP X1NJWkUJCTIwNDgKPiArI2RlZmluZSBEU0lfUlhfRklGT19TSVpFCQkyNTYKPiArI2RlZmluZSBE U0lfWEZFUl9USU1FT1VUX01TCQkxMDAKPiArI2RlZmluZSBEU0lfUlhfRklGT19FTVBUWQkJMHgz MDgwMDAwMgo+ICsKPiArI2RlZmluZSBPTERfU0NMS19NSVBJX0NMS19OQU1FCQkicGxsX2NsayIK PiArCj4gK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBjbGtfbmFtZXNbNV0gPSB7Cj4gKwkiYnVz X2NsayIsCj4gKwkic2Nsa19taXBpIiwKPiArCSJwaHljbGtfbWlwaWRwaHkwX2JpdGNsa2Rpdjgi LAo+ICsJInBoeWNsa19taXBpZHBoeTBfcnhjbGtlc2MwIiwKPiArCSJzY2xrX3JnYl92Y2xrX3Rv X2RzaW0wIgo+ICt9Owo+ICsKPiArZW51bSBzYW1zdW5nX2RzaW1fdHJhbnNmZXJfdHlwZSB7Cj4g KwlFWFlOT1NfRFNJX1RYLAo+ICsJRVhZTk9TX0RTSV9SWCwKPiArfTsKPiArCj4gK2VudW0gcmVn X2lkeCB7Cj4gKwlEU0lNX1NUQVRVU19SRUcsCS8qIFN0YXR1cyByZWdpc3RlciAqLwo+ICsJRFNJ TV9TV1JTVF9SRUcsCQkvKiBTb2Z0d2FyZSByZXNldCByZWdpc3RlciAqLwo+ICsJRFNJTV9DTEtD VFJMX1JFRywJLyogQ2xvY2sgY29udHJvbCByZWdpc3RlciAqLwo+ICsJRFNJTV9USU1FT1VUX1JF RywJLyogVGltZSBvdXQgcmVnaXN0ZXIgKi8KPiArCURTSU1fQ09ORklHX1JFRywJLyogQ29uZmln dXJhdGlvbiByZWdpc3RlciAqLwo+ICsJRFNJTV9FU0NNT0RFX1JFRywJLyogRXNjYXBlIG1vZGUg cmVnaXN0ZXIgKi8KPiArCURTSU1fTURSRVNPTF9SRUcsCj4gKwlEU0lNX01WUE9SQ0hfUkVHLAkv KiBNYWluIGRpc3BsYXkgVnBvcmNoIHJlZ2lzdGVyICovCj4gKwlEU0lNX01IUE9SQ0hfUkVHLAkv KiBNYWluIGRpc3BsYXkgSHBvcmNoIHJlZ2lzdGVyICovCj4gKwlEU0lNX01TWU5DX1JFRywJCS8q IE1haW4gZGlzcGxheSBzeW5jIGFyZWEgcmVnaXN0ZXIgKi8KPiArCURTSU1fSU5UU1JDX1JFRywJ LyogSW50ZXJydXB0IHNvdXJjZSByZWdpc3RlciAqLwo+ICsJRFNJTV9JTlRNU0tfUkVHLAkvKiBJ bnRlcnJ1cHQgbWFzayByZWdpc3RlciAqLwo+ICsJRFNJTV9QS1RIRFJfUkVHLAkvKiBQYWNrZXQg SGVhZGVyIEZJRk8gcmVnaXN0ZXIgKi8KPiArCURTSU1fUEFZTE9BRF9SRUcsCS8qIFBheWxvYWQg RklGTyByZWdpc3RlciAqLwo+ICsJRFNJTV9SWEZJRk9fUkVHLAkvKiBSZWFkIEZJRk8gcmVnaXN0 ZXIgKi8KPiArCURTSU1fRklGT0NUUkxfUkVHLAkvKiBGSUZPIHN0YXR1cyBhbmQgY29udHJvbCBy ZWdpc3RlciAqLwo+ICsJRFNJTV9QTExDVFJMX1JFRywJLyogUExMIGNvbnRyb2wgcmVnaXN0ZXIg Ki8KPiArCURTSU1fUEhZQ1RSTF9SRUcsCj4gKwlEU0lNX1BIWVRJTUlOR19SRUcsCj4gKwlEU0lN X1BIWVRJTUlORzFfUkVHLAo+ICsJRFNJTV9QSFlUSU1JTkcyX1JFRywKPiArCU5VTV9SRUdTCj4g K307Cj4gKwo+ICtzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGV4eW5vc19yZWdfb2ZzW10gPSB7 Cj4gKwlbRFNJTV9TVEFUVVNfUkVHXSA9ICAweDAwLAo+ICsJW0RTSU1fU1dSU1RfUkVHXSA9ICAw eDA0LAo+ICsJW0RTSU1fQ0xLQ1RSTF9SRUddID0gIDB4MDgsCj4gKwlbRFNJTV9USU1FT1VUX1JF R10gPSAgMHgwYywKPiArCVtEU0lNX0NPTkZJR19SRUddID0gIDB4MTAsCj4gKwlbRFNJTV9FU0NN T0RFX1JFR10gPSAgMHgxNCwKPiArCVtEU0lNX01EUkVTT0xfUkVHXSA9ICAweDE4LAo+ICsJW0RT SU1fTVZQT1JDSF9SRUddID0gIDB4MWMsCj4gKwlbRFNJTV9NSFBPUkNIX1JFR10gPSAgMHgyMCwK PiArCVtEU0lNX01TWU5DX1JFR10gPSAgMHgyNCwKPiArCVtEU0lNX0lOVFNSQ19SRUddID0gIDB4 MmMsCj4gKwlbRFNJTV9JTlRNU0tfUkVHXSA9ICAweDMwLAo+ICsJW0RTSU1fUEtUSERSX1JFR10g PSAgMHgzNCwKPiArCVtEU0lNX1BBWUxPQURfUkVHXSA9ICAweDM4LAo+ICsJW0RTSU1fUlhGSUZP X1JFR10gPSAgMHgzYywKPiArCVtEU0lNX0ZJRk9DVFJMX1JFR10gPSAgMHg0NCwKPiArCVtEU0lN X1BMTENUUkxfUkVHXSA9ICAweDRjLAo+ICsJW0RTSU1fUEhZQ1RSTF9SRUddID0gIDB4NWMsCj4g KwlbRFNJTV9QSFlUSU1JTkdfUkVHXSA9ICAweDY0LAo+ICsJW0RTSU1fUEhZVElNSU5HMV9SRUdd ID0gIDB4NjgsCj4gKwlbRFNJTV9QSFlUSU1JTkcyX1JFR10gPSAgMHg2YywKPiArfTsKPiArCj4g K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZXh5bm9zNTQzM19yZWdfb2ZzW10gPSB7Cj4gKwlb RFNJTV9TVEFUVVNfUkVHXSA9IDB4MDQsCj4gKwlbRFNJTV9TV1JTVF9SRUddID0gMHgwQywKPiAr CVtEU0lNX0NMS0NUUkxfUkVHXSA9IDB4MTAsCj4gKwlbRFNJTV9USU1FT1VUX1JFR10gPSAweDE0 LAo+ICsJW0RTSU1fQ09ORklHX1JFR10gPSAweDE4LAo+ICsJW0RTSU1fRVNDTU9ERV9SRUddID0g MHgxQywKPiArCVtEU0lNX01EUkVTT0xfUkVHXSA9IDB4MjAsCj4gKwlbRFNJTV9NVlBPUkNIX1JF R10gPSAweDI0LAo+ICsJW0RTSU1fTUhQT1JDSF9SRUddID0gMHgyOCwKPiArCVtEU0lNX01TWU5D X1JFR10gPSAweDJDLAo+ICsJW0RTSU1fSU5UU1JDX1JFR10gPSAweDM0LAo+ICsJW0RTSU1fSU5U TVNLX1JFR10gPSAweDM4LAo+ICsJW0RTSU1fUEtUSERSX1JFR10gPSAweDNDLAo+ICsJW0RTSU1f UEFZTE9BRF9SRUddID0gMHg0MCwKPiArCVtEU0lNX1JYRklGT19SRUddID0gMHg0NCwKPiArCVtE U0lNX0ZJRk9DVFJMX1JFR10gPSAweDRDLAo+ICsJW0RTSU1fUExMQ1RSTF9SRUddID0gMHg5NCwK PiArCVtEU0lNX1BIWUNUUkxfUkVHXSA9IDB4QTQsCj4gKwlbRFNJTV9QSFlUSU1JTkdfUkVHXSA9 IDB4QjQsCj4gKwlbRFNJTV9QSFlUSU1JTkcxX1JFR10gPSAweEI4LAo+ICsJW0RTSU1fUEhZVElN SU5HMl9SRUddID0gMHhCQywKPiArfTsKPiArCj4gK2VudW0gcmVnX3ZhbHVlX2lkeCB7Cj4gKwlS RVNFVF9UWVBFLAo+ICsJUExMX1RJTUVSLAo+ICsJU1RPUF9TVEFURV9DTlQsCj4gKwlQSFlDVFJM X1VMUFNfRVhJVCwKPiArCVBIWUNUUkxfVlJFR19MUCwKPiArCVBIWUNUUkxfU0xFV19VUCwKPiAr CVBIWVRJTUlOR19MUFgsCj4gKwlQSFlUSU1JTkdfSFNfRVhJVCwKPiArCVBIWVRJTUlOR19DTEtf UFJFUEFSRSwKPiArCVBIWVRJTUlOR19DTEtfWkVSTywKPiArCVBIWVRJTUlOR19DTEtfUE9TVCwK PiArCVBIWVRJTUlOR19DTEtfVFJBSUwsCj4gKwlQSFlUSU1JTkdfSFNfUFJFUEFSRSwKPiArCVBI WVRJTUlOR19IU19aRVJPLAo+ICsJUEhZVElNSU5HX0hTX1RSQUlMCj4gK307Cj4gKwo+ICtzdGF0 aWMgY29uc3QgdW5zaWduZWQgaW50IHJlZ192YWx1ZXNbXSA9IHsKPiArCVtSRVNFVF9UWVBFXSA9 IERTSU1fU1dSU1QsCj4gKwlbUExMX1RJTUVSXSA9IDUwMCwKPiArCVtTVE9QX1NUQVRFX0NOVF0g PSAweGYsCj4gKwlbUEhZQ1RSTF9VTFBTX0VYSVRdID0gRFNJTV9QSFlDVFJMX1VMUFNfRVhJVCgw eDBhZiksCj4gKwlbUEhZQ1RSTF9WUkVHX0xQXSA9IDAsCj4gKwlbUEhZQ1RSTF9TTEVXX1VQXSA9 IDAsCj4gKwlbUEhZVElNSU5HX0xQWF0gPSBEU0lNX1BIWVRJTUlOR19MUFgoMHgwNiksCj4gKwlb UEhZVElNSU5HX0hTX0VYSVRdID0gRFNJTV9QSFlUSU1JTkdfSFNfRVhJVCgweDBiKSwKPiArCVtQ SFlUSU1JTkdfQ0xLX1BSRVBBUkVdID0gRFNJTV9QSFlUSU1JTkcxX0NMS19QUkVQQVJFKDB4MDcp LAo+ICsJW1BIWVRJTUlOR19DTEtfWkVST10gPSBEU0lNX1BIWVRJTUlORzFfQ0xLX1pFUk8oMHgy NyksCj4gKwlbUEhZVElNSU5HX0NMS19QT1NUXSA9IERTSU1fUEhZVElNSU5HMV9DTEtfUE9TVCgw eDBkKSwKPiArCVtQSFlUSU1JTkdfQ0xLX1RSQUlMXSA9IERTSU1fUEhZVElNSU5HMV9DTEtfVFJB SUwoMHgwOCksCj4gKwlbUEhZVElNSU5HX0hTX1BSRVBBUkVdID0gRFNJTV9QSFlUSU1JTkcyX0hT X1BSRVBBUkUoMHgwOSksCj4gKwlbUEhZVElNSU5HX0hTX1pFUk9dID0gRFNJTV9QSFlUSU1JTkcy X0hTX1pFUk8oMHgwZCksCj4gKwlbUEhZVElNSU5HX0hTX1RSQUlMXSA9IERTSU1fUEhZVElNSU5H Ml9IU19UUkFJTCgweDBiKSwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQg ZXh5bm9zNTQyMl9yZWdfdmFsdWVzW10gPSB7Cj4gKwlbUkVTRVRfVFlQRV0gPSBEU0lNX1NXUlNU LAo+ICsJW1BMTF9USU1FUl0gPSA1MDAsCj4gKwlbU1RPUF9TVEFURV9DTlRdID0gMHhmLAo+ICsJ W1BIWUNUUkxfVUxQU19FWElUXSA9IERTSU1fUEhZQ1RSTF9VTFBTX0VYSVQoMHhhZiksCj4gKwlb UEhZQ1RSTF9WUkVHX0xQXSA9IDAsCj4gKwlbUEhZQ1RSTF9TTEVXX1VQXSA9IDAsCj4gKwlbUEhZ VElNSU5HX0xQWF0gPSBEU0lNX1BIWVRJTUlOR19MUFgoMHgwOCksCj4gKwlbUEhZVElNSU5HX0hT X0VYSVRdID0gRFNJTV9QSFlUSU1JTkdfSFNfRVhJVCgweDBkKSwKPiArCVtQSFlUSU1JTkdfQ0xL X1BSRVBBUkVdID0gRFNJTV9QSFlUSU1JTkcxX0NMS19QUkVQQVJFKDB4MDkpLAo+ICsJW1BIWVRJ TUlOR19DTEtfWkVST10gPSBEU0lNX1BIWVRJTUlORzFfQ0xLX1pFUk8oMHgzMCksCj4gKwlbUEhZ VElNSU5HX0NMS19QT1NUXSA9IERTSU1fUEhZVElNSU5HMV9DTEtfUE9TVCgweDBlKSwKPiArCVtQ SFlUSU1JTkdfQ0xLX1RSQUlMXSA9IERTSU1fUEhZVElNSU5HMV9DTEtfVFJBSUwoMHgwYSksCj4g KwlbUEhZVElNSU5HX0hTX1BSRVBBUkVdID0gRFNJTV9QSFlUSU1JTkcyX0hTX1BSRVBBUkUoMHgw YyksCj4gKwlbUEhZVElNSU5HX0hTX1pFUk9dID0gRFNJTV9QSFlUSU1JTkcyX0hTX1pFUk8oMHgx MSksCj4gKwlbUEhZVElNSU5HX0hTX1RSQUlMXSA9IERTSU1fUEhZVElNSU5HMl9IU19UUkFJTCgw eDBkKSwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZXh5bm9zNTQzM19y ZWdfdmFsdWVzW10gPSB7Cj4gKwlbUkVTRVRfVFlQRV0gPSBEU0lNX0ZVTkNSU1QsCj4gKwlbUExM X1RJTUVSXSA9IDIyMjAwLAo+ICsJW1NUT1BfU1RBVEVfQ05UXSA9IDB4YSwKPiArCVtQSFlDVFJM X1VMUFNfRVhJVF0gPSBEU0lNX1BIWUNUUkxfVUxQU19FWElUKDB4MTkwKSwKPiArCVtQSFlDVFJM X1ZSRUdfTFBdID0gRFNJTV9QSFlDVFJMX0JfRFBIWUNUTF9WUkVHX0xQLAo+ICsJW1BIWUNUUkxf U0xFV19VUF0gPSBEU0lNX1BIWUNUUkxfQl9EUEhZQ1RMX1NMRVdfVVAsCj4gKwlbUEhZVElNSU5H X0xQWF0gPSBEU0lNX1BIWVRJTUlOR19MUFgoMHgwNyksCj4gKwlbUEhZVElNSU5HX0hTX0VYSVRd ID0gRFNJTV9QSFlUSU1JTkdfSFNfRVhJVCgweDBjKSwKPiArCVtQSFlUSU1JTkdfQ0xLX1BSRVBB UkVdID0gRFNJTV9QSFlUSU1JTkcxX0NMS19QUkVQQVJFKDB4MDkpLAo+ICsJW1BIWVRJTUlOR19D TEtfWkVST10gPSBEU0lNX1BIWVRJTUlORzFfQ0xLX1pFUk8oMHgyZCksCj4gKwlbUEhZVElNSU5H X0NMS19QT1NUXSA9IERTSU1fUEhZVElNSU5HMV9DTEtfUE9TVCgweDBlKSwKPiArCVtQSFlUSU1J TkdfQ0xLX1RSQUlMXSA9IERTSU1fUEhZVElNSU5HMV9DTEtfVFJBSUwoMHgwOSksCj4gKwlbUEhZ VElNSU5HX0hTX1BSRVBBUkVdID0gRFNJTV9QSFlUSU1JTkcyX0hTX1BSRVBBUkUoMHgwYiksCj4g KwlbUEhZVElNSU5HX0hTX1pFUk9dID0gRFNJTV9QSFlUSU1JTkcyX0hTX1pFUk8oMHgxMCksCj4g KwlbUEhZVElNSU5HX0hTX1RSQUlMXSA9IERTSU1fUEhZVElNSU5HMl9IU19UUkFJTCgweDBjKSwK PiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2Ftc3VuZ19kc2ltX2RyaXZlcl9kYXRh IGV4eW5vczNfZHNpX2RyaXZlcl9kYXRhID0gewo+ICsJLnJlZ19vZnMgPSBleHlub3NfcmVnX29m cywKPiArCS5wbGx0bXJfcmVnID0gMHg1MCwKPiArCS5oYXNfZnJlcWJhbmQgPSAxLAo+ICsJLmhh c19jbGtsYW5lX3N0b3AgPSAxLAo+ICsJLm51bV9jbGtzID0gMiwKPiArCS5tYXhfZnJlcSA9IDEw MDAsCj4gKwkud2FpdF9mb3JfcmVzZXQgPSAxLAo+ICsJLm51bV9iaXRzX3Jlc29sID0gMTEsCj4g KwkucmVnX3ZhbHVlcyA9IHJlZ192YWx1ZXMsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IHNhbXN1bmdfZHNpbV9kcml2ZXJfZGF0YSBleHlub3M0X2RzaV9kcml2ZXJfZGF0YSA9IHsK PiArCS5yZWdfb2ZzID0gZXh5bm9zX3JlZ19vZnMsCj4gKwkucGxsdG1yX3JlZyA9IDB4NTAsCj4g KwkuaGFzX2ZyZXFiYW5kID0gMSwKPiArCS5oYXNfY2xrbGFuZV9zdG9wID0gMSwKPiArCS5udW1f Y2xrcyA9IDIsCj4gKwkubWF4X2ZyZXEgPSAxMDAwLAo+ICsJLndhaXRfZm9yX3Jlc2V0ID0gMSwK PiArCS5udW1fYml0c19yZXNvbCA9IDExLAo+ICsJLnJlZ192YWx1ZXMgPSByZWdfdmFsdWVzLAo+ ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBzYW1zdW5nX2RzaW1fZHJpdmVyX2RhdGEg ZXh5bm9zNV9kc2lfZHJpdmVyX2RhdGEgPSB7Cj4gKwkucmVnX29mcyA9IGV4eW5vc19yZWdfb2Zz LAo+ICsJLnBsbHRtcl9yZWcgPSAweDU4LAo+ICsJLm51bV9jbGtzID0gMiwKPiArCS5tYXhfZnJl cSA9IDEwMDAsCj4gKwkud2FpdF9mb3JfcmVzZXQgPSAxLAo+ICsJLm51bV9iaXRzX3Jlc29sID0g MTEsCj4gKwkucmVnX3ZhbHVlcyA9IHJlZ192YWx1ZXMsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29u c3Qgc3RydWN0IHNhbXN1bmdfZHNpbV9kcml2ZXJfZGF0YSBleHlub3M1NDMzX2RzaV9kcml2ZXJf ZGF0YSA9IHsKPiArCS5yZWdfb2ZzID0gZXh5bm9zNTQzM19yZWdfb2ZzLAo+ICsJLnBsbHRtcl9y ZWcgPSAweGEwLAo+ICsJLmhhc19jbGtsYW5lX3N0b3AgPSAxLAo+ICsJLm51bV9jbGtzID0gNSwK PiArCS5tYXhfZnJlcSA9IDE1MDAsCj4gKwkud2FpdF9mb3JfcmVzZXQgPSAwLAo+ICsJLm51bV9i aXRzX3Jlc29sID0gMTIsCj4gKwkucmVnX3ZhbHVlcyA9IGV4eW5vczU0MzNfcmVnX3ZhbHVlcywK PiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2Ftc3VuZ19kc2ltX2RyaXZlcl9kYXRh IGV4eW5vczU0MjJfZHNpX2RyaXZlcl9kYXRhID0gewo+ICsJLnJlZ19vZnMgPSBleHlub3M1NDMz X3JlZ19vZnMsCj4gKwkucGxsdG1yX3JlZyA9IDB4YTAsCj4gKwkuaGFzX2Nsa2xhbmVfc3RvcCA9 IDEsCj4gKwkubnVtX2Nsa3MgPSAyLAo+ICsJLm1heF9mcmVxID0gMTUwMCwKPiArCS53YWl0X2Zv cl9yZXNldCA9IDEsCj4gKwkubnVtX2JpdHNfcmVzb2wgPSAxMiwKPiArCS5yZWdfdmFsdWVzID0g ZXh5bm9zNTQyMl9yZWdfdmFsdWVzLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBv Zl9kZXZpY2VfaWQgc2Ftc3VuZ19kc2ltX29mX21hdGNoW10gPSB7Cj4gKwl7Cj4gKwkJLmNvbXBh dGlibGUgPSAic2Ftc3VuZyxleHlub3MzMjUwLW1pcGktZHNpIiwKPiArCQkuZGF0YSA9ICZleHlu b3MzX2RzaV9kcml2ZXJfZGF0YQo+ICsJfSwKPiArCXsKPiArCQkuY29tcGF0aWJsZSA9ICJzYW1z dW5nLGV4eW5vczQyMTAtbWlwaS1kc2kiLAo+ICsJCS5kYXRhID0gJmV4eW5vczRfZHNpX2RyaXZl cl9kYXRhCj4gKwl9LAo+ICsJewo+ICsJCS5jb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNTQx MC1taXBpLWRzaSIsCj4gKwkJLmRhdGEgPSAmZXh5bm9zNV9kc2lfZHJpdmVyX2RhdGEKPiArCX0s Cj4gKwl7Cj4gKwkJLmNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1NDIyLW1pcGktZHNpIiwK PiArCQkuZGF0YSA9ICZleHlub3M1NDIyX2RzaV9kcml2ZXJfZGF0YQo+ICsJfSwKPiArCXsKPiAr CQkuY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczU0MzMtbWlwaS1kc2kiLAo+ICsJCS5kYXRh ID0gJmV4eW5vczU0MzNfZHNpX2RyaXZlcl9kYXRhCj4gKwl9LAo+ICsJeyAvKiBzZW50aW5lbC4g Ki8gfQo+ICt9Owo+ICsKPiArc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2Ftc3VuZ19kc2ltICpob3N0 X3RvX2RzaShzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaCkKPiArewo+ICsJcmV0dXJuIGNvbnRhaW5l cl9vZihoLCBzdHJ1Y3Qgc2Ftc3VuZ19kc2ltLCBkc2lfaG9zdCk7Cj4gK30KPiArCj4gK3N0YXRp YyBpbmxpbmUgc3RydWN0IHNhbXN1bmdfZHNpbSAqYnJpZGdlX3RvX2RzaShzdHJ1Y3QgZHJtX2Jy aWRnZSAqYikKPiArewo+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihiLCBzdHJ1Y3Qgc2Ftc3VuZ19k c2ltLCBicmlkZ2UpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgc2Ftc3VuZ19kc2lt X3dyaXRlKHN0cnVjdCBzYW1zdW5nX2RzaW0gKmRzaSwKPiArCQkJCSAgICAgIGVudW0gcmVnX2lk eCBpZHgsIHUzMiB2YWwpCj4gK3sKPiArCXdyaXRlbCh2YWwsIGRzaS0+cmVnX2Jhc2UgKyBkc2kt PmRyaXZlcl9kYXRhLT5yZWdfb2ZzW2lkeF0pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHUz MiBzYW1zdW5nX2RzaW1fcmVhZChzdHJ1Y3Qgc2Ftc3VuZ19kc2ltICpkc2ksIGVudW0gcmVnX2lk eCBpZHgpCj4gK3sKPiArCXJldHVybiByZWFkbChkc2ktPnJlZ19iYXNlICsgZHNpLT5kcml2ZXJf ZGF0YS0+cmVnX29mc1tpZHhdKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc2Ftc3VuZ19kc2lt X3dhaXRfZm9yX3Jlc2V0KHN0cnVjdCBzYW1zdW5nX2RzaW0gKmRzaSkKPiArewo+ICsJaWYgKHdh aXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmZHNpLT5jb21wbGV0ZWQsIG1zZWNzX3RvX2ppZmZp ZXMoMzAwKSkpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWRldl9lcnIoZHNpLT5kZXYsICJ0aW1lb3V0 IHdhaXRpbmcgZm9yIHJlc2V0XG4iKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc2Ftc3VuZ19k c2ltX3Jlc2V0KHN0cnVjdCBzYW1zdW5nX2RzaW0gKmRzaSkKPiArewo+ICsJdTMyIHJlc2V0X3Zh bCA9IGRzaS0+ZHJpdmVyX2RhdGEtPnJlZ192YWx1ZXNbUkVTRVRfVFlQRV07Cj4gKwo+ICsJcmVp bml0X2NvbXBsZXRpb24oJmRzaS0+Y29tcGxldGVkKTsKPiArCXNhbXN1bmdfZHNpbV93cml0ZShk c2ksIERTSU1fU1dSU1RfUkVHLCByZXNldF92YWwpOwo+ICt9Cj4gKwo+ICsjaWZuZGVmIE1IWgo+ ICsjZGVmaW5lIE1IWgkoMTAwMCoxMDAwKQo+ICsjZW5kaWYKPiArCj4gK3N0YXRpYyB1bnNpZ25l ZCBsb25nIHNhbXN1bmdfZHNpbV9wbGxfZmluZF9wbXMoc3RydWN0IHNhbXN1bmdfZHNpbSAqZHNp LAo+ICsJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGZpbiwKPiArCQkJCQkgICAgICAgdW5zaWdu ZWQgbG9uZyBmb3V0LAo+ICsJCQkJCSAgICAgICB1OCAqcCwgdTE2ICptLCB1OCAqcykKPiArewo+ ICsJY29uc3Qgc3RydWN0IHNhbXN1bmdfZHNpbV9kcml2ZXJfZGF0YSAqZHJpdmVyX2RhdGEgPSBk c2ktPmRyaXZlcl9kYXRhOwo+ICsJdW5zaWduZWQgbG9uZyBiZXN0X2ZyZXEgPSAwOwo+ICsJdTMy IG1pbl9kZWx0YSA9IDB4ZmZmZmZmZmY7Cj4gKwl1OCBwX21pbiwgcF9tYXg7Cj4gKwl1OCBfcCwg YmVzdF9wOwo+ICsJdTE2IF9tLCBiZXN0X207Cj4gKwl1OCBfcywgYmVzdF9zOwo+ICsKPiArCXBf bWluID0gRElWX1JPVU5EX1VQKGZpbiwgKDEyICogTUhaKSk7Cj4gKwlwX21heCA9IGZpbiAvICg2 ICogTUhaKTsKPiArCj4gKwlmb3IgKF9wID0gcF9taW47IF9wIDw9IHBfbWF4OyArK19wKSB7Cj4g KwkJZm9yIChfcyA9IDA7IF9zIDw9IDU7ICsrX3MpIHsKPiArCQkJdTY0IHRtcDsKPiArCQkJdTMy IGRlbHRhOwo+ICsKPiArCQkJdG1wID0gKHU2NClmb3V0ICogKF9wIDw8IF9zKTsKPiArCQkJZG9f ZGl2KHRtcCwgZmluKTsKPiArCQkJX20gPSB0bXA7Cj4gKwkJCWlmIChfbSA8IDQxIHx8IF9tID4g MTI1KQo+ICsJCQkJY29udGludWU7Cj4gKwo+ICsJCQl0bXAgPSAodTY0KV9tICogZmluOwo+ICsJ CQlkb19kaXYodG1wLCBfcCk7Cj4gKwkJCWlmICh0bXAgPCA1MDAgKiBNSFogfHwKPiArCQkJCQl0 bXAgPiBkcml2ZXJfZGF0YS0+bWF4X2ZyZXEgKiBNSFopCj4gKwkJCQljb250aW51ZTsKPiArCj4g KwkJCXRtcCA9ICh1NjQpX20gKiBmaW47Cj4gKwkJCWRvX2Rpdih0bXAsIF9wIDw8IF9zKTsKPiAr Cj4gKwkJCWRlbHRhID0gYWJzKGZvdXQgLSB0bXApOwo+ICsJCQlpZiAoZGVsdGEgPCBtaW5fZGVs dGEpIHsKPiArCQkJCWJlc3RfcCA9IF9wOwo+ICsJCQkJYmVzdF9tID0gX207Cj4gKwkJCQliZXN0 X3MgPSBfczsKPiArCQkJCW1pbl9kZWx0YSA9IGRlbHRhOwo+ICsJCQkJYmVzdF9mcmVxID0gdG1w Owo+ICsJCQl9Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWlmIChiZXN0X2ZyZXEpIHsKPiArCQkqcCA9 IGJlc3RfcDsKPiArCQkqbSA9IGJlc3RfbTsKPiArCQkqcyA9IGJlc3RfczsKPiArCX0KPiArCj4g KwlyZXR1cm4gYmVzdF9mcmVxOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdW5zaWduZWQgbG9uZyBzYW1z dW5nX2RzaW1fc2V0X3BsbChzdHJ1Y3Qgc2Ftc3VuZ19kc2ltICpkc2ksCj4gKwkJCQkJICB1bnNp Z25lZCBsb25nIGZyZXEpCj4gK3sKPiArCWNvbnN0IHN0cnVjdCBzYW1zdW5nX2RzaW1fZHJpdmVy X2RhdGEgKmRyaXZlcl9kYXRhID0gZHNpLT5kcml2ZXJfZGF0YTsKPiArCXVuc2lnbmVkIGxvbmcg ZmluLCBmb3V0Owo+ICsJaW50IHRpbWVvdXQ7Cj4gKwl1OCBwLCBzOwo+ICsJdTE2IG07Cj4gKwl1 MzIgcmVnOwo+ICsKPiArCWZpbiA9IGRzaS0+cGxsX2Nsa19yYXRlOwo+ICsJZm91dCA9IHNhbXN1 bmdfZHNpbV9wbGxfZmluZF9wbXMoZHNpLCBmaW4sIGZyZXEsICZwLCAmbSwgJnMpOwo+ICsJaWYg KCFmb3V0KSB7Cj4gKwkJZGV2X2Vycihkc2ktPmRldiwKPiArCQkJImZhaWxlZCB0byBmaW5kIFBM TCBQTVMgZm9yIHJlcXVlc3RlZCBmcmVxdWVuY3lcbiIpOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ ICsJZGV2X2RiZyhkc2ktPmRldiwgIlBMTCBmcmVxICVsdSwgKHAgJWQsIG0gJWQsIHMgJWQpXG4i LCBmb3V0LCBwLCBtLCBzKTsKPiArCj4gKwl3cml0ZWwoZHJpdmVyX2RhdGEtPnJlZ192YWx1ZXNb UExMX1RJTUVSXSwKPiArCQkJZHNpLT5yZWdfYmFzZSArIGRyaXZlcl9kYXRhLT5wbGx0bXJfcmVn KTsKPiArCj4gKwlyZWcgPSBEU0lNX1BMTF9FTiB8IERTSU1fUExMX1AocCkgfCBEU0lNX1BMTF9N KG0pIHwgRFNJTV9QTExfUyhzKTsKPiArCj4gKwlpZiAoZHJpdmVyX2RhdGEtPmhhc19mcmVxYmFu ZCkgewo+ICsJCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGZyZXFfYmFuZHNbXSA9IHsKPiAr CQkJMTAwICogTUhaLCAxMjAgKiBNSFosIDE2MCAqIE1IWiwgMjAwICogTUhaLAo+ICsJCQkyNzAg KiBNSFosIDMyMCAqIE1IWiwgMzkwICogTUhaLCA0NTAgKiBNSFosCj4gKwkJCTUxMCAqIE1IWiwg NTYwICogTUhaLCA2NDAgKiBNSFosIDY5MCAqIE1IWiwKPiArCQkJNzcwICogTUhaLCA4NzAgKiBN SFosIDk1MCAqIE1IWiwKPiArCQl9Owo+ICsJCWludCBiYW5kOwo+ICsKPiArCQlmb3IgKGJhbmQg PSAwOyBiYW5kIDwgQVJSQVlfU0laRShmcmVxX2JhbmRzKTsgKytiYW5kKQo+ICsJCQlpZiAoZm91 dCA8IGZyZXFfYmFuZHNbYmFuZF0pCj4gKwkJCQlicmVhazsKPiArCj4gKwkJZGV2X2RiZyhkc2kt PmRldiwgImJhbmQgJWRcbiIsIGJhbmQpOwo+ICsKPiArCQlyZWcgfD0gRFNJTV9GUkVRX0JBTkQo YmFuZCk7Cj4gKwl9Cj4gKwo+ICsJc2Ftc3VuZ19kc2ltX3dyaXRlKGRzaSwgRFNJTV9QTExDVFJM X1JFRywgcmVnKTsKPiArCj4gKwl0aW1lb3V0ID0gMTAwMDsKPiArCWRvIHsKPiArCQlpZiAodGlt ZW91dC0tID09IDApIHsKPiArCQkJZGV2X2Vycihkc2ktPmRldiwgIlBMTCBmYWlsZWQgdG8gc3Rh YmlsaXplXG4iKTsKPiArCQkJcmV0dXJuIDA7Cj4gKwkJfQo+ICsJCXJlZyA9IHNhbXN1bmdfZHNp bV9yZWFkKGRzaSwgRFNJTV9TVEFUVVNfUkVHKTsKPiArCX0gd2hpbGUgKChyZWcgJiBEU0lNX1BM TF9TVEFCTEUpID09IDApOwo+ICsKPiArCXJldHVybiBmb3V0Owo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IHNhbXN1bmdfZHNpbV9lbmFibGVfY2xvY2soc3RydWN0IHNhbXN1bmdfZHNpbSAqZHNpKQo+ ICt7Cj4gKwl1bnNpZ25lZCBsb25nIGhzX2NsaywgYnl0ZV9jbGssIGVzY19jbGs7Cj4gKwl1bnNp Z25lZCBsb25nIGVzY19kaXY7Cj4gKwl1MzIgcmVnOwo+ICsKPiArCWhzX2NsayA9IHNhbXN1bmdf ZHNpbV9zZXRfcGxsKGRzaSwgZHNpLT5idXJzdF9jbGtfcmF0ZSk7Cj4gKwlpZiAoIWhzX2Nsaykg ewo+ICsJCWRldl9lcnIoZHNpLT5kZXYsICJmYWlsZWQgdG8gY29uZmlndXJlIERTSSBQTExcbiIp Owo+ICsJCXJldHVybiAtRUZBVUxUOwo+ICsJfQo+ICsKPiArCWJ5dGVfY2xrID0gaHNfY2xrIC8g ODsKPiArCWVzY19kaXYgPSBESVZfUk9VTkRfVVAoYnl0ZV9jbGssIGRzaS0+ZXNjX2Nsa19yYXRl KTsKPiArCWVzY19jbGsgPSBieXRlX2NsayAvIGVzY19kaXY7Cj4gKwo+ICsJaWYgKGVzY19jbGsg PiAyMCAqIE1IWikgewo+ICsJCSsrZXNjX2RpdjsKPiArCQllc2NfY2xrID0gYnl0ZV9jbGsgLyBl c2NfZGl2Owo+ICsJfQo+ICsKPiArCWRldl9kYmcoZHNpLT5kZXYsICJoc19jbGsgPSAlbHUsIGJ5 dGVfY2xrID0gJWx1LCBlc2NfY2xrID0gJWx1XG4iLAo+ICsJCWhzX2NsaywgYnl0ZV9jbGssIGVz Y19jbGspOwo+ICsKPiArCXJlZyA9IHNhbXN1bmdfZHNpbV9yZWFkKGRzaSwgRFNJTV9DTEtDVFJM X1JFRyk7Cj4gKwlyZWcgJj0gfihEU0lNX0VTQ19QUkVTQ0FMRVJfTUFTSyB8IERTSU1fTEFORV9F U0NfQ0xLX0VOX0NMSwo+ICsJCQl8IERTSU1fTEFORV9FU0NfQ0xLX0VOX0RBVEFfTUFTSyB8IERT SU1fUExMX0JZUEFTUwo+ICsJCQl8IERTSU1fQllURV9DTEtfU1JDX01BU0spOwo+ICsJcmVnIHw9 IERTSU1fRVNDX0NMS0VOIHwgRFNJTV9CWVRFX0NMS0VOCj4gKwkJCXwgRFNJTV9FU0NfUFJFU0NB TEVSKGVzY19kaXYpCj4gKwkJCXwgRFNJTV9MQU5FX0VTQ19DTEtfRU5fQ0xLCj4gKwkJCXwgRFNJ TV9MQU5FX0VTQ19DTEtfRU5fREFUQShCSVQoZHNpLT5sYW5lcykgLSAxKQo+ICsJCQl8IERTSU1f QllURV9DTEtfU1JDKDApCj4gKwkJCXwgRFNJTV9UWF9SRVFVRVNUX0hTQ0xLOwo+ICsJc2Ftc3Vu Z19kc2ltX3dyaXRlKGRzaSwgRFNJTV9DTEtDVFJMX1JFRywgcmVnKTsKPiArCj4gKwlyZXR1cm4g MDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc2Ftc3VuZ19kc2ltX3NldF9waHlfY3RybChzdHJ1 Y3Qgc2Ftc3VuZ19kc2ltICpkc2kpCj4gK3sKPiArCWNvbnN0IHN0cnVjdCBzYW1zdW5nX2RzaW1f ZHJpdmVyX2RhdGEgKmRyaXZlcl9kYXRhID0gZHNpLT5kcml2ZXJfZGF0YTsKPiArCWNvbnN0IHVu c2lnbmVkIGludCAqcmVnX3ZhbHVlcyA9IGRyaXZlcl9kYXRhLT5yZWdfdmFsdWVzOwo+ICsJdTMy IHJlZzsKPiArCj4gKwlpZiAoZHJpdmVyX2RhdGEtPmhhc19mcmVxYmFuZCkKPiArCQlyZXR1cm47 Cj4gKwo+ICsJLyogQiBELVBIWTogRC1QSFkgTWFzdGVyICYgU2xhdmUgQW5hbG9nIEJsb2NrIGNv bnRyb2wgKi8KPiArCXJlZyA9IHJlZ192YWx1ZXNbUEhZQ1RSTF9VTFBTX0VYSVRdIHwgcmVnX3Zh bHVlc1tQSFlDVFJMX1ZSRUdfTFBdIHwKPiArCQlyZWdfdmFsdWVzW1BIWUNUUkxfU0xFV19VUF07 Cj4gKwlzYW1zdW5nX2RzaW1fd3JpdGUoZHNpLCBEU0lNX1BIWUNUUkxfUkVHLCByZWcpOwo+ICsK PiArCS8qCj4gKwkgKiBUIExQWDogVHJhbnNtaXR0ZWQgbGVuZ3RoIG9mIGFueSBMb3ctUG93ZXIg c3RhdGUgcGVyaW9kCj4gKwkgKiBUIEhTLUVYSVQ6IFRpbWUgdGhhdCB0aGUgdHJhbnNtaXR0ZXIg ZHJpdmVzIExQLTExIGZvbGxvd2luZyBhIEhTCj4gKwkgKglidXJzdAo+ICsJICovCj4gKwlyZWcg PSByZWdfdmFsdWVzW1BIWVRJTUlOR19MUFhdIHwgcmVnX3ZhbHVlc1tQSFlUSU1JTkdfSFNfRVhJ VF07Cj4gKwlzYW1zdW5nX2RzaW1fd3JpdGUoZHNpLCBEU0lNX1BIWVRJTUlOR19SRUcsIHJlZyk7 Cj4gKwo+ICsJLyoKPiArCSAqIFQgQ0xLLVBSRVBBUkU6IFRpbWUgdGhhdCB0aGUgdHJhbnNtaXR0 ZXIgZHJpdmVzIHRoZSBDbG9jayBMYW5lIExQLTAwCj4gKwkgKglMaW5lIHN0YXRlIGltbWVkaWF0 ZWx5IGJlZm9yZSB0aGUgSFMtMCBMaW5lIHN0YXRlIHN0YXJ0aW5nIHRoZQo+ICsJICoJSFMgdHJh bnNtaXNzaW9uCj4gKwkgKiBUIENMSy1aRVJPOiBUaW1lIHRoYXQgdGhlIHRyYW5zbWl0dGVyIGRy aXZlcyB0aGUgSFMtMCBzdGF0ZSBwcmlvciB0bwo+ICsJICoJdHJhbnNtaXR0aW5nIHRoZSBDbG9j ay4KPiArCSAqIFQgQ0xLX1BPU1Q6IFRpbWUgdGhhdCB0aGUgdHJhbnNtaXR0ZXIgY29udGludWVz IHRvIHNlbmQgSFMgY2xvY2sKPiArCSAqCWFmdGVyIHRoZSBsYXN0IGFzc29jaWF0ZWQgRGF0YSBM YW5lIGhhcyB0cmFuc2l0aW9uZWQgdG8gTFAgTW9kZQo+ICsJICoJSW50ZXJ2YWwgaXMgZGVmaW5l ZCBhcyB0aGUgcGVyaW9kIGZyb20gdGhlIGVuZCBvZiBUIEhTLVRSQUlMIHRvCj4gKwkgKgl0aGUg YmVnaW5uaW5nIG9mIFQgQ0xLLVRSQUlMCj4gKwkgKiBUIENMSy1UUkFJTDogVGltZSB0aGF0IHRo ZSB0cmFuc21pdHRlciBkcml2ZXMgdGhlIEhTLTAgc3RhdGUgYWZ0ZXIKPiArCSAqCXRoZSBsYXN0 IHBheWxvYWQgY2xvY2sgYml0IG9mIGEgSFMgdHJhbnNtaXNzaW9uIGJ1cnN0Cj4gKwkgKi8KPiAr CXJlZyA9IHJlZ192YWx1ZXNbUEhZVElNSU5HX0NMS19QUkVQQVJFXSB8Cj4gKwkJcmVnX3ZhbHVl c1tQSFlUSU1JTkdfQ0xLX1pFUk9dIHwKPiArCQlyZWdfdmFsdWVzW1BIWVRJTUlOR19DTEtfUE9T VF0gfAo+ICsJCXJlZ192YWx1ZXNbUEhZVElNSU5HX0NMS19UUkFJTF07Cj4gKwo+ICsJc2Ftc3Vu Z19kc2ltX3dyaXRlKGRzaSwgRFNJTV9QSFlUSU1JTkcxX1JFRywgcmVnKTsKPiArCj4gKwkvKgo+ ICsJICogVCBIUy1QUkVQQVJFOiBUaW1lIHRoYXQgdGhlIHRyYW5zbWl0dGVyIGRyaXZlcyB0aGUg RGF0YSBMYW5lIExQLTAwCj4gKwkgKglMaW5lIHN0YXRlIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUg SFMtMCBMaW5lIHN0YXRlIHN0YXJ0aW5nIHRoZQo+ICsJICoJSFMgdHJhbnNtaXNzaW9uCj4gKwkg KiBUIEhTLVpFUk86IFRpbWUgdGhhdCB0aGUgdHJhbnNtaXR0ZXIgZHJpdmVzIHRoZSBIUy0wIHN0 YXRlIHByaW9yIHRvCj4gKwkgKgl0cmFuc21pdHRpbmcgdGhlIFN5bmMgc2VxdWVuY2UuCj4gKwkg KiBUIEhTLVRSQUlMOiBUaW1lIHRoYXQgdGhlIHRyYW5zbWl0dGVyIGRyaXZlcyB0aGUgZmxpcHBl ZCBkaWZmZXJlbnRpYWwKPiArCSAqCXN0YXRlIGFmdGVyIGxhc3QgcGF5bG9hZCBkYXRhIGJpdCBv ZiBhIEhTIHRyYW5zbWlzc2lvbiBidXJzdAo+ICsJICovCj4gKwlyZWcgPSByZWdfdmFsdWVzW1BI WVRJTUlOR19IU19QUkVQQVJFXSB8IHJlZ192YWx1ZXNbUEhZVElNSU5HX0hTX1pFUk9dIHwKPiAr CQlyZWdfdmFsdWVzW1BIWVRJTUlOR19IU19UUkFJTF07Cj4gKwlzYW1zdW5nX2RzaW1fd3JpdGUo ZHNpLCBEU0lNX1BIWVRJTUlORzJfUkVHLCByZWcpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBz YW1zdW5nX2RzaW1fZGlzYWJsZV9jbG9jayhzdHJ1Y3Qgc2Ftc3VuZ19kc2ltICpkc2kpCj4gK3sK PiArCXUzMiByZWc7Cj4gKwo+ICsJcmVnID0gc2Ftc3VuZ19kc2ltX3JlYWQoZHNpLCBEU0lNX0NM S0NUUkxfUkVHKTsKPiArCXJlZyAmPSB+KERTSU1fTEFORV9FU0NfQ0xLX0VOX0NMSyB8IERTSU1f TEFORV9FU0NfQ0xLX0VOX0RBVEFfTUFTSwo+ICsJCQl8IERTSU1fRVNDX0NMS0VOIHwgRFNJTV9C WVRFX0NMS0VOKTsKPiArCXNhbXN1bmdfZHNpbV93cml0ZShkc2ksIERTSU1fQ0xLQ1RSTF9SRUcs IHJlZyk7Cj4gKwo+ICsJcmVnID0gc2Ftc3VuZ19kc2ltX3JlYWQoZHNpLCBEU0lNX1BMTENUUkxf UkVHKTsKPiArCXJlZyAmPSB+RFNJTV9QTExfRU47Cj4gKwlzYW1zdW5nX2RzaW1fd3JpdGUoZHNp LCBEU0lNX1BMTENUUkxfUkVHLCByZWcpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBzYW1zdW5n X2RzaW1fZW5hYmxlX2xhbmUoc3RydWN0IHNhbXN1bmdfZHNpbSAqZHNpLCB1MzIgbGFuZSkKPiAr ewo+ICsJdTMyIHJlZyA9IHNhbXN1bmdfZHNpbV9yZWFkKGRzaSwgRFNJTV9DT05GSUdfUkVHKTsK PiArCj4gKwlyZWcgfD0gKERTSU1fTlVNX09GX0RBVEFfTEFORShkc2ktPmxhbmVzIC0gMSkgfCBE U0lNX0xBTkVfRU5fQ0xLIHwKPiArCQkJRFNJTV9MQU5FX0VOKGxhbmUpKTsKPiArCXNhbXN1bmdf ZHNpbV93cml0ZShkc2ksIERTSU1fQ09ORklHX1JFRywgcmVnKTsKPiArfQo+ICsKPiArc3RhdGlj IGludCBzYW1zdW5nX2RzaW1faW5pdF9saW5rKHN0cnVjdCBzYW1zdW5nX2RzaW0gKmRzaSkKPiAr ewo+ICsJY29uc3Qgc3RydWN0IHNhbXN1bmdfZHNpbV9kcml2ZXJfZGF0YSAqZHJpdmVyX2RhdGEg PSBkc2ktPmRyaXZlcl9kYXRhOwo+ICsJaW50IHRpbWVvdXQ7Cj4gKwl1MzIgcmVnOwo+ICsJdTMy IGxhbmVzX21hc2s7Cj4gKwo+ICsJLyogSW5pdGlhbGl6ZSBGSUZPIHBvaW50ZXJzICovCj4gKwly ZWcgPSBzYW1zdW5nX2RzaW1fcmVhZChkc2ksIERTSU1fRklGT0NUUkxfUkVHKTsKPiArCXJlZyAm PSB+MHgxZjsKPiArCXNhbXN1bmdfZHNpbV93cml0ZShkc2ksIERTSU1fRklGT0NUUkxfUkVHLCBy ZWcpOwo+ICsKPiArCXVzbGVlcF9yYW5nZSg5MDAwLCAxMTAwMCk7Cj4gKwo+ICsJcmVnIHw9IDB4 MWY7Cj4gKwlzYW1zdW5nX2RzaW1fd3JpdGUoZHNpLCBEU0lNX0ZJRk9DVFJMX1JFRywgcmVnKTsK PiArCXVzbGVlcF9yYW5nZSg5MDAwLCAxMTAwMCk7Cj4gKwo+ICsJLyogRFNJIGNvbmZpZ3VyYXRp b24gKi8KPiArCXJlZyA9IDA7Cj4gKwo+ICsJLyoKPiArCSAqIFRoZSBmaXJzdCBiaXQgb2YgbW9k ZV9mbGFncyBzcGVjaWZpZXMgZGlzcGxheSBjb25maWd1cmF0aW9uLgo+ICsJICogSWYgdGhpcyBi aXQgaXMgc2V0Wz0gTUlQSV9EU0lfTU9ERV9WSURFT10sIGRzaSB3aWxsIHN1cHBvcnQgdmlkZW8K PiArCSAqIG1vZGUsIG90aGVyd2lzZSBpdCB3aWxsIHN1cHBvcnQgY29tbWFuZCBtb2RlLgo+ICsJ ICovCj4gKwlpZiAoZHNpLT5tb2RlX2ZsYWdzICYgTUlQSV9EU0lfTU9ERV9WSURFTykgewo+ICsJ CXJlZyB8PSBEU0lNX1ZJREVPX01PREU7Cj4gKwo+ICsJCS8qCj4gKwkJICogVGhlIHVzZXIgbWFu dWFsIGRlc2NyaWJlcyB0aGF0IGZvbGxvd2luZyBiaXRzIGFyZSBpZ25vcmVkIGluCj4gKwkJICog Y29tbWFuZCBtb2RlLgo+ICsJCSAqLwo+ICsJCWlmICghKGRzaS0+bW9kZV9mbGFncyAmIE1JUElf RFNJX01PREVfVlNZTkNfRkxVU0gpKQo+ICsJCQlyZWcgfD0gRFNJTV9NRkxVU0hfVlM7Cj4gKwkJ aWYgKGRzaS0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU9fU1lOQ19QVUxTRSkKPiAr CQkJcmVnIHw9IERTSU1fU1lOQ19JTkZPUk07Cj4gKwkJaWYgKGRzaS0+bW9kZV9mbGFncyAmIE1J UElfRFNJX01PREVfVklERU9fQlVSU1QpCj4gKwkJCXJlZyB8PSBEU0lNX0JVUlNUX01PREU7Cj4g KwkJaWYgKGRzaS0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU9fQVVUT19WRVJUKQo+ ICsJCQlyZWcgfD0gRFNJTV9BVVRPX01PREU7Cj4gKwkJaWYgKGRzaS0+bW9kZV9mbGFncyAmIE1J UElfRFNJX01PREVfVklERU9fSFNFKQo+ICsJCQlyZWcgfD0gRFNJTV9IU0VfTU9ERTsKPiArCQlp ZiAoIShkc2ktPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX05PX0hGUCkpCj4gKwkJ CXJlZyB8PSBEU0lNX0hGUF9NT0RFOwo+ICsJCWlmICghKGRzaS0+bW9kZV9mbGFncyAmIE1JUElf RFNJX01PREVfVklERU9fTk9fSEJQKSkKPiArCQkJcmVnIHw9IERTSU1fSEJQX01PREU7Cj4gKwkJ aWYgKCEoZHNpLT5tb2RlX2ZsYWdzICYgTUlQSV9EU0lfTU9ERV9WSURFT19OT19IU0EpKQo+ICsJ CQlyZWcgfD0gRFNJTV9IU0FfTU9ERTsKPiArCX0KPiArCj4gKwlpZiAoIShkc2ktPm1vZGVfZmxh Z3MgJiBNSVBJX0RTSV9NT0RFX05PX0VPVF9QQUNLRVQpKQo+ICsJCXJlZyB8PSBEU0lNX0VPVF9E SVNBQkxFOwo+ICsKPiArCXN3aXRjaCAoZHNpLT5mb3JtYXQpIHsKPiArCWNhc2UgTUlQSV9EU0lf Rk1UX1JHQjg4ODoKPiArCQlyZWcgfD0gRFNJTV9NQUlOX1BJWF9GT1JNQVRfUkdCODg4Owo+ICsJ CWJyZWFrOwo+ICsJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNjY2Ogo+ICsJCXJlZyB8PSBEU0lNX01B SU5fUElYX0ZPUk1BVF9SR0I2NjY7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIE1JUElfRFNJX0ZNVF9S R0I2NjZfUEFDS0VEOgo+ICsJCXJlZyB8PSBEU0lNX01BSU5fUElYX0ZPUk1BVF9SR0I2NjZfUDsK PiArCQlicmVhazsKPiArCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjU2NToKPiArCQlyZWcgfD0gRFNJ TV9NQUlOX1BJWF9GT1JNQVRfUkdCNTY1Owo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQlk ZXZfZXJyKGRzaS0+ZGV2LCAiaW52YWxpZCBwaXhlbCBmb3JtYXRcbiIpOwo+ICsJCXJldHVybiAt RUlOVkFMOwo+ICsJfQo+ICsKPiArCS8qCj4gKwkgKiBVc2Ugbm9uLWNvbnRpbnVvdXMgY2xvY2sg bW9kZSBpZiB0aGUgcGVyaXBhcmFsIHdhbnRzIGFuZAo+ICsJICogaG9zdCBjb250cm9sbGVyIHN1 cHBvcnRzCj4gKwkgKgo+ICsJICogSW4gbm9uLWNvbnRpbm91cyBjbG9jayBtb2RlLCBob3N0IGNv bnRyb2xsZXIgd2lsbCB0dXJuIG9mZgo+ICsJICogdGhlIEhTIGNsb2NrIGJldHdlZW4gaGlnaC1z cGVlZCB0cmFuc21pc3Npb25zIHRvIHJlZHVjZQo+ICsJICogcG93ZXIgY29uc3VtcHRpb24uCj4g KwkgKi8KPiArCWlmIChkcml2ZXJfZGF0YS0+aGFzX2Nsa2xhbmVfc3RvcCAmJgo+ICsJCQlkc2kt Pm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9DTE9DS19OT05fQ09OVElOVU9VUykgewo+ICsJCXJlZyB8 PSBEU0lNX0NMS0xBTkVfU1RPUDsKPiArCX0KPiArCXNhbXN1bmdfZHNpbV93cml0ZShkc2ksIERT SU1fQ09ORklHX1JFRywgcmVnKTsKPiArCj4gKwlsYW5lc19tYXNrID0gQklUKGRzaS0+bGFuZXMp IC0gMTsKPiArCXNhbXN1bmdfZHNpbV9lbmFibGVfbGFuZShkc2ksIGxhbmVzX21hc2spOwo+ICsK PiArCS8qIENoZWNrIGNsb2NrIGFuZCBkYXRhIGxhbmUgc3RhdGUgYXJlIHN0b3Agc3RhdGUgKi8K PiArCXRpbWVvdXQgPSAxMDA7Cj4gKwlkbyB7Cj4gKwkJaWYgKHRpbWVvdXQtLSA9PSAwKSB7Cj4g KwkJCWRldl9lcnIoZHNpLT5kZXYsICJ3YWl0aW5nIGZvciBidXMgbGFuZXMgdGltZWQgb3V0XG4i KTsKPiArCQkJcmV0dXJuIC1FRkFVTFQ7Cj4gKwkJfQo+ICsKPiArCQlyZWcgPSBzYW1zdW5nX2Rz aW1fcmVhZChkc2ksIERTSU1fU1RBVFVTX1JFRyk7Cj4gKwkJaWYgKChyZWcgJiBEU0lNX1NUT1Bf U1RBVEVfREFUKGxhbmVzX21hc2spKQo+ICsJCSAgICAhPSBEU0lNX1NUT1BfU1RBVEVfREFUKGxh bmVzX21hc2spKQo+ICsJCQljb250aW51ZTsKPiArCX0gd2hpbGUgKCEocmVnICYgKERTSU1fU1RP UF9TVEFURV9DTEsgfCBEU0lNX1RYX1JFQURZX0hTX0NMSykpKTsKPiArCj4gKwlyZWcgPSBzYW1z dW5nX2RzaW1fcmVhZChkc2ksIERTSU1fRVNDTU9ERV9SRUcpOwo+ICsJcmVnICY9IH5EU0lNX1NU T1BfU1RBVEVfQ05UX01BU0s7Cj4gKwlyZWcgfD0gRFNJTV9TVE9QX1NUQVRFX0NOVChkcml2ZXJf ZGF0YS0+cmVnX3ZhbHVlc1tTVE9QX1NUQVRFX0NOVF0pOwo+ICsJc2Ftc3VuZ19kc2ltX3dyaXRl KGRzaSwgRFNJTV9FU0NNT0RFX1JFRywgcmVnKTsKPiArCj4gKwlyZWcgPSBEU0lNX0JUQV9USU1F T1VUKDB4ZmYpIHwgRFNJTV9MUERSX1RJTUVPVVQoMHhmZmZmKTsKPiArCXNhbXN1bmdfZHNpbV93 cml0ZShkc2ksIERTSU1fVElNRU9VVF9SRUcsIHJlZyk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIHNhbXN1bmdfZHNpbV9zZXRfZGlzcGxheV9tb2RlKHN0cnVjdCBz YW1zdW5nX2RzaW0gKmRzaSkKPiArewo+ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm0gPSAm ZHNpLT5tb2RlOwo+ICsJdW5zaWduZWQgaW50IG51bV9iaXRzX3Jlc29sID0gZHNpLT5kcml2ZXJf ZGF0YS0+bnVtX2JpdHNfcmVzb2w7Cj4gKwl1MzIgcmVnOwo+ICsKPiArCWlmIChkc2ktPm1vZGVf ZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPKSB7Cj4gKwkJcmVnID0gRFNJTV9DTURfQUxMT1co MHhmKQo+ICsJCQl8IERTSU1fU1RBQkxFX1ZGUChtLT52c3luY19zdGFydCAtIG0tPnZkaXNwbGF5 KQo+ICsJCQl8IERTSU1fTUFJTl9WQlAobS0+dnRvdGFsIC0gbS0+dnN5bmNfZW5kKTsKPiArCQlz YW1zdW5nX2RzaW1fd3JpdGUoZHNpLCBEU0lNX01WUE9SQ0hfUkVHLCByZWcpOwo+ICsKPiArCQly ZWcgPSBEU0lNX01BSU5fSEZQKG0tPmhzeW5jX3N0YXJ0IC0gbS0+aGRpc3BsYXkpCj4gKwkJCXwg RFNJTV9NQUlOX0hCUChtLT5odG90YWwgLSBtLT5oc3luY19lbmQpOwo+ICsJCXNhbXN1bmdfZHNp bV93cml0ZShkc2ksIERTSU1fTUhQT1JDSF9SRUcsIHJlZyk7Cj4gKwo+ICsJCXJlZyA9IERTSU1f TUFJTl9WU0EobS0+dnN5bmNfZW5kIC0gbS0+dnN5bmNfc3RhcnQpCj4gKwkJCXwgRFNJTV9NQUlO X0hTQShtLT5oc3luY19lbmQgLSBtLT5oc3luY19zdGFydCk7Cj4gKwkJc2Ftc3VuZ19kc2ltX3dy aXRlKGRzaSwgRFNJTV9NU1lOQ19SRUcsIHJlZyk7Cj4gKwl9Cj4gKwlyZWcgPSAgRFNJTV9NQUlO X0hSRVNPTChtLT5oZGlzcGxheSwgbnVtX2JpdHNfcmVzb2wpIHwKPiArCQlEU0lNX01BSU5fVlJF U09MKG0tPnZkaXNwbGF5LCBudW1fYml0c19yZXNvbCk7Cj4gKwo+ICsJc2Ftc3VuZ19kc2ltX3dy aXRlKGRzaSwgRFNJTV9NRFJFU09MX1JFRywgcmVnKTsKPiArCj4gKwlkZXZfZGJnKGRzaS0+ZGV2 LCAiTENEIHNpemUgPSAlZHglZFxuIiwgbS0+aGRpc3BsYXksIG0tPnZkaXNwbGF5KTsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgc2Ftc3VuZ19kc2ltX3NldF9kaXNwbGF5X2VuYWJsZShzdHJ1Y3Qg c2Ftc3VuZ19kc2ltICpkc2ksIGJvb2wgZW5hYmxlKQo+ICt7Cj4gKwl1MzIgcmVnOwo+ICsKPiAr CXJlZyA9IHNhbXN1bmdfZHNpbV9yZWFkKGRzaSwgRFNJTV9NRFJFU09MX1JFRyk7Cj4gKwlpZiAo ZW5hYmxlKQo+ICsJCXJlZyB8PSBEU0lNX01BSU5fU1RBTkRfQlk7Cj4gKwllbHNlCj4gKwkJcmVn ICY9IH5EU0lNX01BSU5fU1RBTkRfQlk7Cj4gKwlzYW1zdW5nX2RzaW1fd3JpdGUoZHNpLCBEU0lN X01EUkVTT0xfUkVHLCByZWcpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHNhbXN1bmdfZHNpbV93 YWl0X2Zvcl9oZHJfZmlmbyhzdHJ1Y3Qgc2Ftc3VuZ19kc2ltICpkc2kpCj4gK3sKPiArCWludCB0 aW1lb3V0ID0gMjAwMDsKPiArCj4gKwlkbyB7Cj4gKwkJdTMyIHJlZyA9IHNhbXN1bmdfZHNpbV9y ZWFkKGRzaSwgRFNJTV9GSUZPQ1RSTF9SRUcpOwo+ICsKPiArCQlpZiAoIShyZWcgJiBEU0lNX1NG Ul9IRUFERVJfRlVMTCkpCj4gKwkJCXJldHVybiAwOwo+ICsKPiArCQlpZiAoIWNvbmRfcmVzY2hl ZCgpKQo+ICsJCQl1c2xlZXBfcmFuZ2UoOTUwLCAxMDUwKTsKPiArCX0gd2hpbGUgKC0tdGltZW91 dCk7Cj4gKwo+ICsJcmV0dXJuIC1FVElNRURPVVQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHNh bXN1bmdfZHNpbV9zZXRfY21kX2xwbShzdHJ1Y3Qgc2Ftc3VuZ19kc2ltICpkc2ksIGJvb2wgbHBt KQo+ICt7Cj4gKwl1MzIgdiA9IHNhbXN1bmdfZHNpbV9yZWFkKGRzaSwgRFNJTV9FU0NNT0RFX1JF Ryk7Cj4gKwo+ICsJaWYgKGxwbSkKPiArCQl2IHw9IERTSU1fQ01EX0xQRFRfTFA7Cj4gKwllbHNl Cj4gKwkJdiAmPSB+RFNJTV9DTURfTFBEVF9MUDsKPiArCj4gKwlzYW1zdW5nX2RzaW1fd3JpdGUo ZHNpLCBEU0lNX0VTQ01PREVfUkVHLCB2KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc2Ftc3Vu Z19kc2ltX2ZvcmNlX2J0YShzdHJ1Y3Qgc2Ftc3VuZ19kc2ltICpkc2kpCj4gK3sKPiArCXUzMiB2 ID0gc2Ftc3VuZ19kc2ltX3JlYWQoZHNpLCBEU0lNX0VTQ01PREVfUkVHKTsKPiArCj4gKwl2IHw9 IERTSU1fRk9SQ0VfQlRBOwo+ICsJc2Ftc3VuZ19kc2ltX3dyaXRlKGRzaSwgRFNJTV9FU0NNT0RF X1JFRywgdik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHNhbXN1bmdfZHNpbV9zZW5kX3RvX2Zp Zm8oc3RydWN0IHNhbXN1bmdfZHNpbSAqZHNpLAo+ICsJCQkJICAgICAgc3RydWN0IHNhbXN1bmdf ZHNpbV90cmFuc2ZlciAqeGZlcikKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gZHNpLT5k ZXY7Cj4gKwlzdHJ1Y3QgbWlwaV9kc2lfcGFja2V0ICpwa3QgPSAmeGZlci0+cGFja2V0Owo+ICsJ Y29uc3QgdTggKnBheWxvYWQgPSBwa3QtPnBheWxvYWQgKyB4ZmVyLT50eF9kb25lOwo+ICsJdTE2 IGxlbmd0aCA9IHBrdC0+cGF5bG9hZF9sZW5ndGggLSB4ZmVyLT50eF9kb25lOwo+ICsJYm9vbCBm aXJzdCA9ICF4ZmVyLT50eF9kb25lOwo+ICsJdTMyIHJlZzsKPiArCj4gKwlkZXZfZGJnKGRldiwg IjwgeGZlciAlcEs6IHR4IGxlbiAldSwgZG9uZSAldSwgcnggbGVuICV1LCBkb25lICV1XG4iLAo+ ICsJCXhmZXIsIGxlbmd0aCwgeGZlci0+dHhfZG9uZSwgeGZlci0+cnhfbGVuLCB4ZmVyLT5yeF9k b25lKTsKPiArCj4gKwlpZiAobGVuZ3RoID4gRFNJX1RYX0ZJRk9fU0laRSkKPiArCQlsZW5ndGgg PSBEU0lfVFhfRklGT19TSVpFOwo+ICsKPiArCXhmZXItPnR4X2RvbmUgKz0gbGVuZ3RoOwo+ICsK PiArCS8qIFNlbmQgcGF5bG9hZCAqLwo+ICsJd2hpbGUgKGxlbmd0aCA+PSA0KSB7Cj4gKwkJcmVn ID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHBheWxvYWQpOwo+ICsJCXNhbXN1bmdfZHNpbV93cml0ZShk c2ksIERTSU1fUEFZTE9BRF9SRUcsIHJlZyk7Cj4gKwkJcGF5bG9hZCArPSA0Owo+ICsJCWxlbmd0 aCAtPSA0Owo+ICsJfQo+ICsKPiArCXJlZyA9IDA7Cj4gKwlzd2l0Y2ggKGxlbmd0aCkgewo+ICsJ Y2FzZSAzOgo+ICsJCXJlZyB8PSBwYXlsb2FkWzJdIDw8IDE2Owo+ICsJCWZhbGx0aHJvdWdoOwo+ ICsJY2FzZSAyOgo+ICsJCXJlZyB8PSBwYXlsb2FkWzFdIDw8IDg7Cj4gKwkJZmFsbHRocm91Z2g7 Cj4gKwljYXNlIDE6Cj4gKwkJcmVnIHw9IHBheWxvYWRbMF07Cj4gKwkJc2Ftc3VuZ19kc2ltX3dy aXRlKGRzaSwgRFNJTV9QQVlMT0FEX1JFRywgcmVnKTsKPiArCQlicmVhazsKPiArCX0KPiArCj4g KwkvKiBTZW5kIHBhY2tldCBoZWFkZXIgKi8KPiArCWlmICghZmlyc3QpCj4gKwkJcmV0dXJuOwo+ ICsKPiArCXJlZyA9IGdldF91bmFsaWduZWRfbGUzMihwa3QtPmhlYWRlcik7Cj4gKwlpZiAoc2Ft c3VuZ19kc2ltX3dhaXRfZm9yX2hkcl9maWZvKGRzaSkpIHsKPiArCQlkZXZfZXJyKGRldiwgIndh aXRpbmcgZm9yIGhlYWRlciBGSUZPIHRpbWVkIG91dFxuIik7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ ICsKPiArCWlmIChORVFWKHhmZXItPmZsYWdzICYgTUlQSV9EU0lfTVNHX1VTRV9MUE0sCj4gKwkJ IGRzaS0+c3RhdGUgJiBEU0lNX1NUQVRFX0NNRF9MUE0pKSB7Cj4gKwkJc2Ftc3VuZ19kc2ltX3Nl dF9jbWRfbHBtKGRzaSwgeGZlci0+ZmxhZ3MgJiBNSVBJX0RTSV9NU0dfVVNFX0xQTSk7Cj4gKwkJ ZHNpLT5zdGF0ZSBePSBEU0lNX1NUQVRFX0NNRF9MUE07Cj4gKwl9Cj4gKwo+ICsJc2Ftc3VuZ19k c2ltX3dyaXRlKGRzaSwgRFNJTV9QS1RIRFJfUkVHLCByZWcpOwo+ICsKPiArCWlmICh4ZmVyLT5m bGFncyAmIE1JUElfRFNJX01TR19SRVFfQUNLKQo+ICsJCXNhbXN1bmdfZHNpbV9mb3JjZV9idGEo ZHNpKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc2Ftc3VuZ19kc2ltX3JlYWRfZnJvbV9maWZv KHN0cnVjdCBzYW1zdW5nX2RzaW0gKmRzaSwKPiArCQkJCQlzdHJ1Y3Qgc2Ftc3VuZ19kc2ltX3Ry YW5zZmVyICp4ZmVyKQo+ICt7Cj4gKwl1OCAqcGF5bG9hZCA9IHhmZXItPnJ4X3BheWxvYWQgKyB4 ZmVyLT5yeF9kb25lOwo+ICsJYm9vbCBmaXJzdCA9ICF4ZmVyLT5yeF9kb25lOwo+ICsJc3RydWN0 IGRldmljZSAqZGV2ID0gZHNpLT5kZXY7Cj4gKwl1MTYgbGVuZ3RoOwo+ICsJdTMyIHJlZzsKPiAr Cj4gKwlpZiAoZmlyc3QpIHsKPiArCQlyZWcgPSBzYW1zdW5nX2RzaW1fcmVhZChkc2ksIERTSU1f UlhGSUZPX1JFRyk7Cj4gKwo+ICsJCXN3aXRjaCAocmVnICYgMHgzZikgewo+ICsJCWNhc2UgTUlQ SV9EU0lfUlhfR0VORVJJQ19TSE9SVF9SRUFEX1JFU1BPTlNFXzJCWVRFOgo+ICsJCWNhc2UgTUlQ SV9EU0lfUlhfRENTX1NIT1JUX1JFQURfUkVTUE9OU0VfMkJZVEU6Cj4gKwkJCWlmICh4ZmVyLT5y eF9sZW4gPj0gMikgewo+ICsJCQkJcGF5bG9hZFsxXSA9IHJlZyA+PiAxNjsKPiArCQkJCSsreGZl ci0+cnhfZG9uZTsKPiArCQkJfQo+ICsJCQlmYWxsdGhyb3VnaDsKPiArCQljYXNlIE1JUElfRFNJ X1JYX0dFTkVSSUNfU0hPUlRfUkVBRF9SRVNQT05TRV8xQllURToKPiArCQljYXNlIE1JUElfRFNJ X1JYX0RDU19TSE9SVF9SRUFEX1JFU1BPTlNFXzFCWVRFOgo+ICsJCQlwYXlsb2FkWzBdID0gcmVn ID4+IDg7Cj4gKwkJCSsreGZlci0+cnhfZG9uZTsKPiArCQkJeGZlci0+cnhfbGVuID0geGZlci0+ cnhfZG9uZTsKPiArCQkJeGZlci0+cmVzdWx0ID0gMDsKPiArCQkJZ290byBjbGVhcl9maWZvOwo+ ICsJCWNhc2UgTUlQSV9EU0lfUlhfQUNLTk9XTEVER0VfQU5EX0VSUk9SX1JFUE9SVDoKPiArCQkJ ZGV2X2VycihkZXYsICJEU0kgRXJyb3IgUmVwb3J0OiAweCUwNHhcbiIsIChyZWcgPj4gOCkgJiAw eGZmZmYpOwo+ICsJCQl4ZmVyLT5yZXN1bHQgPSAwOwo+ICsJCQlnb3RvIGNsZWFyX2ZpZm87Cj4g KwkJfQo+ICsKPiArCQlsZW5ndGggPSAocmVnID4+IDgpICYgMHhmZmZmOwo+ICsJCWlmIChsZW5n dGggPiB4ZmVyLT5yeF9sZW4pIHsKPiArCQkJZGV2X2VycihkZXYsCj4gKwkJCQkicmVzcG9uc2Ug dG9vIGxvbmcgKCV1ID4gJXUgYnl0ZXMpLCBzdHJpcHBpbmdcbiIsCj4gKwkJCQl4ZmVyLT5yeF9s ZW4sIGxlbmd0aCk7Cj4gKwkJCWxlbmd0aCA9IHhmZXItPnJ4X2xlbjsKPiArCQl9IGVsc2UgaWYg KGxlbmd0aCA8IHhmZXItPnJ4X2xlbikKPiArCQkJeGZlci0+cnhfbGVuID0gbGVuZ3RoOwo+ICsJ fQo+ICsKPiArCWxlbmd0aCA9IHhmZXItPnJ4X2xlbiAtIHhmZXItPnJ4X2RvbmU7Cj4gKwl4ZmVy LT5yeF9kb25lICs9IGxlbmd0aDsKPiArCj4gKwkvKiBSZWNlaXZlIHBheWxvYWQgKi8KPiArCXdo aWxlIChsZW5ndGggPj0gNCkgewo+ICsJCXJlZyA9IHNhbXN1bmdfZHNpbV9yZWFkKGRzaSwgRFNJ TV9SWEZJRk9fUkVHKTsKPiArCQlwYXlsb2FkWzBdID0gKHJlZyA+PiAgMCkgJiAweGZmOwo+ICsJ CXBheWxvYWRbMV0gPSAocmVnID4+ICA4KSAmIDB4ZmY7Cj4gKwkJcGF5bG9hZFsyXSA9IChyZWcg Pj4gMTYpICYgMHhmZjsKPiArCQlwYXlsb2FkWzNdID0gKHJlZyA+PiAyNCkgJiAweGZmOwo+ICsJ CXBheWxvYWQgKz0gNDsKPiArCQlsZW5ndGggLT0gNDsKPiArCX0KPiArCj4gKwlpZiAobGVuZ3Ro KSB7Cj4gKwkJcmVnID0gc2Ftc3VuZ19kc2ltX3JlYWQoZHNpLCBEU0lNX1JYRklGT19SRUcpOwo+ ICsJCXN3aXRjaCAobGVuZ3RoKSB7Cj4gKwkJY2FzZSAzOgo+ICsJCQlwYXlsb2FkWzJdID0gKHJl ZyA+PiAxNikgJiAweGZmOwo+ICsJCQlmYWxsdGhyb3VnaDsKPiArCQljYXNlIDI6Cj4gKwkJCXBh eWxvYWRbMV0gPSAocmVnID4+IDgpICYgMHhmZjsKPiArCQkJZmFsbHRocm91Z2g7Cj4gKwkJY2Fz ZSAxOgo+ICsJCQlwYXlsb2FkWzBdID0gcmVnICYgMHhmZjsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJ aWYgKHhmZXItPnJ4X2RvbmUgPT0geGZlci0+cnhfbGVuKQo+ICsJCXhmZXItPnJlc3VsdCA9IDA7 Cj4gKwo+ICtjbGVhcl9maWZvOgo+ICsJbGVuZ3RoID0gRFNJX1JYX0ZJRk9fU0laRSAvIDQ7Cj4g KwlkbyB7Cj4gKwkJcmVnID0gc2Ftc3VuZ19kc2ltX3JlYWQoZHNpLCBEU0lNX1JYRklGT19SRUcp Owo+ICsJCWlmIChyZWcgPT0gRFNJX1JYX0ZJRk9fRU1QVFkpCj4gKwkJCWJyZWFrOwo+ICsJfSB3 aGlsZSAoLS1sZW5ndGgpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBzYW1zdW5nX2RzaW1fdHJh bnNmZXJfc3RhcnQoc3RydWN0IHNhbXN1bmdfZHNpbSAqZHNpKQo+ICt7Cj4gKwl1bnNpZ25lZCBs b25nIGZsYWdzOwo+ICsJc3RydWN0IHNhbXN1bmdfZHNpbV90cmFuc2ZlciAqeGZlcjsKPiArCWJv b2wgc3RhcnQgPSBmYWxzZTsKPiArCj4gK2FnYWluOgo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmRz aS0+dHJhbnNmZXJfbG9jaywgZmxhZ3MpOwo+ICsKPiArCWlmIChsaXN0X2VtcHR5KCZkc2ktPnRy YW5zZmVyX2xpc3QpKSB7Cj4gKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHNpLT50cmFuc2Zl cl9sb2NrLCBmbGFncyk7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCXhmZXIgPSBsaXN0X2Zp cnN0X2VudHJ5KCZkc2ktPnRyYW5zZmVyX2xpc3QsCj4gKwkJCQlzdHJ1Y3Qgc2Ftc3VuZ19kc2lt X3RyYW5zZmVyLCBsaXN0KTsKPiArCj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkc2ktPnRy YW5zZmVyX2xvY2ssIGZsYWdzKTsKPiArCj4gKwlpZiAoeGZlci0+cGFja2V0LnBheWxvYWRfbGVu Z3RoICYmCj4gKwkgICAgeGZlci0+dHhfZG9uZSA9PSB4ZmVyLT5wYWNrZXQucGF5bG9hZF9sZW5n dGgpCj4gKwkJLyogd2FpdGluZyBmb3IgUlggKi8KPiArCQlyZXR1cm47Cj4gKwo+ICsJc2Ftc3Vu Z19kc2ltX3NlbmRfdG9fZmlmbyhkc2ksIHhmZXIpOwo+ICsKPiArCWlmICh4ZmVyLT5wYWNrZXQu cGF5bG9hZF9sZW5ndGggfHwgeGZlci0+cnhfbGVuKQo+ICsJCXJldHVybjsKPiArCj4gKwl4ZmVy LT5yZXN1bHQgPSAwOwo+ICsJY29tcGxldGUoJnhmZXItPmNvbXBsZXRlZCk7Cj4gKwo+ICsJc3Bp bl9sb2NrX2lycXNhdmUoJmRzaS0+dHJhbnNmZXJfbG9jaywgZmxhZ3MpOwo+ICsKPiArCWxpc3Rf ZGVsX2luaXQoJnhmZXItPmxpc3QpOwo+ICsJc3RhcnQgPSAhbGlzdF9lbXB0eSgmZHNpLT50cmFu c2Zlcl9saXN0KTsKPiArCj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkc2ktPnRyYW5zZmVy X2xvY2ssIGZsYWdzKTsKPiArCj4gKwlpZiAoc3RhcnQpCj4gKwkJZ290byBhZ2FpbjsKPiArfQo+ ICsKPiArc3RhdGljIGJvb2wgc2Ftc3VuZ19kc2ltX3RyYW5zZmVyX2ZpbmlzaChzdHJ1Y3Qgc2Ft c3VuZ19kc2ltICpkc2kpCj4gK3sKPiArCXN0cnVjdCBzYW1zdW5nX2RzaW1fdHJhbnNmZXIgKnhm ZXI7Cj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsJYm9vbCBzdGFydCA9IHRydWU7Cj4gKwo+ ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmRzaS0+dHJhbnNmZXJfbG9jaywgZmxhZ3MpOwo+ICsKPiAr CWlmIChsaXN0X2VtcHR5KCZkc2ktPnRyYW5zZmVyX2xpc3QpKSB7Cj4gKwkJc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmZHNpLT50cmFuc2Zlcl9sb2NrLCBmbGFncyk7Cj4gKwkJcmV0dXJuIGZhbHNl Owo+ICsJfQo+ICsKPiArCXhmZXIgPSBsaXN0X2ZpcnN0X2VudHJ5KCZkc2ktPnRyYW5zZmVyX2xp c3QsCj4gKwkJCQlzdHJ1Y3Qgc2Ftc3VuZ19kc2ltX3RyYW5zZmVyLCBsaXN0KTsKPiArCj4gKwlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZkc2ktPnRyYW5zZmVyX2xvY2ssIGZsYWdzKTsKPiArCj4g KwlkZXZfZGJnKGRzaS0+ZGV2LAo+ICsJCSI+IHhmZXIgJXBLLCB0eF9sZW4gJXp1LCB0eF9kb25l ICV1LCByeF9sZW4gJXUsIHJ4X2RvbmUgJXVcbiIsCj4gKwkJeGZlciwgeGZlci0+cGFja2V0LnBh eWxvYWRfbGVuZ3RoLCB4ZmVyLT50eF9kb25lLCB4ZmVyLT5yeF9sZW4sCj4gKwkJeGZlci0+cnhf ZG9uZSk7Cj4gKwo+ICsJaWYgKHhmZXItPnR4X2RvbmUgIT0geGZlci0+cGFja2V0LnBheWxvYWRf bGVuZ3RoKQo+ICsJCXJldHVybiB0cnVlOwo+ICsKPiArCWlmICh4ZmVyLT5yeF9kb25lICE9IHhm ZXItPnJ4X2xlbikKPiArCQlzYW1zdW5nX2RzaW1fcmVhZF9mcm9tX2ZpZm8oZHNpLCB4ZmVyKTsK PiArCj4gKwlpZiAoeGZlci0+cnhfZG9uZSAhPSB4ZmVyLT5yeF9sZW4pCj4gKwkJcmV0dXJuIHRy dWU7Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmRzaS0+dHJhbnNmZXJfbG9jaywgZmxhZ3Mp Owo+ICsKPiArCWxpc3RfZGVsX2luaXQoJnhmZXItPmxpc3QpOwo+ICsJc3RhcnQgPSAhbGlzdF9l bXB0eSgmZHNpLT50cmFuc2Zlcl9saXN0KTsKPiArCj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZkc2ktPnRyYW5zZmVyX2xvY2ssIGZsYWdzKTsKPiArCj4gKwlpZiAoIXhmZXItPnJ4X2xlbikK PiArCQl4ZmVyLT5yZXN1bHQgPSAwOwo+ICsJY29tcGxldGUoJnhmZXItPmNvbXBsZXRlZCk7Cj4g Kwo+ICsJcmV0dXJuIHN0YXJ0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBzYW1zdW5nX2RzaW1f cmVtb3ZlX3RyYW5zZmVyKHN0cnVjdCBzYW1zdW5nX2RzaW0gKmRzaSwKPiArCQkJCQkgc3RydWN0 IHNhbXN1bmdfZHNpbV90cmFuc2ZlciAqeGZlcikKPiArewo+ICsJdW5zaWduZWQgbG9uZyBmbGFn czsKPiArCWJvb2wgc3RhcnQ7Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmRzaS0+dHJhbnNm ZXJfbG9jaywgZmxhZ3MpOwo+ICsKPiArCWlmICghbGlzdF9lbXB0eSgmZHNpLT50cmFuc2Zlcl9s aXN0KSAmJgo+ICsJICAgIHhmZXIgPT0gbGlzdF9maXJzdF9lbnRyeSgmZHNpLT50cmFuc2Zlcl9s aXN0LAo+ICsJCQkJICAgICBzdHJ1Y3Qgc2Ftc3VuZ19kc2ltX3RyYW5zZmVyLCBsaXN0KSkgewo+ ICsJCWxpc3RfZGVsX2luaXQoJnhmZXItPmxpc3QpOwo+ICsJCXN0YXJ0ID0gIWxpc3RfZW1wdHko JmRzaS0+dHJhbnNmZXJfbGlzdCk7Cj4gKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHNpLT50 cmFuc2Zlcl9sb2NrLCBmbGFncyk7Cj4gKwkJaWYgKHN0YXJ0KQo+ICsJCQlzYW1zdW5nX2RzaW1f dHJhbnNmZXJfc3RhcnQoZHNpKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJbGlzdF9kZWxf aW5pdCgmeGZlci0+bGlzdCk7Cj4gKwo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHNpLT50 cmFuc2Zlcl9sb2NrLCBmbGFncyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgc2Ftc3VuZ19kc2lt X3RyYW5zZmVyKHN0cnVjdCBzYW1zdW5nX2RzaW0gKmRzaSwKPiArCQkJCSBzdHJ1Y3Qgc2Ftc3Vu Z19kc2ltX3RyYW5zZmVyICp4ZmVyKQo+ICt7Cj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsJ Ym9vbCBzdG9wcGVkOwo+ICsKPiArCXhmZXItPnR4X2RvbmUgPSAwOwo+ICsJeGZlci0+cnhfZG9u ZSA9IDA7Cj4gKwl4ZmVyLT5yZXN1bHQgPSAtRVRJTUVET1VUOwo+ICsJaW5pdF9jb21wbGV0aW9u KCZ4ZmVyLT5jb21wbGV0ZWQpOwo+ICsKPiArCXNwaW5fbG9ja19pcnFzYXZlKCZkc2ktPnRyYW5z ZmVyX2xvY2ssIGZsYWdzKTsKPiArCj4gKwlzdG9wcGVkID0gbGlzdF9lbXB0eSgmZHNpLT50cmFu c2Zlcl9saXN0KTsKPiArCWxpc3RfYWRkX3RhaWwoJnhmZXItPmxpc3QsICZkc2ktPnRyYW5zZmVy X2xpc3QpOwo+ICsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRzaS0+dHJhbnNmZXJfbG9j aywgZmxhZ3MpOwo+ICsKPiArCWlmIChzdG9wcGVkKQo+ICsJCXNhbXN1bmdfZHNpbV90cmFuc2Zl cl9zdGFydChkc2kpOwo+ICsKPiArCXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmeGZlci0+ Y29tcGxldGVkLAo+ICsJCQkJICAgIG1zZWNzX3RvX2ppZmZpZXMoRFNJX1hGRVJfVElNRU9VVF9N UykpOwo+ICsJaWYgKHhmZXItPnJlc3VsdCA9PSAtRVRJTUVET1VUKSB7Cj4gKwkJc3RydWN0IG1p cGlfZHNpX3BhY2tldCAqcGt0ID0gJnhmZXItPnBhY2tldDsKPiArCj4gKwkJc2Ftc3VuZ19kc2lt X3JlbW92ZV90cmFuc2Zlcihkc2ksIHhmZXIpOwo+ICsJCWRldl9lcnIoZHNpLT5kZXYsICJ4ZmVy IHRpbWVkIG91dDogJSpwaCAlKnBoXG4iLCA0LCBwa3QtPmhlYWRlciwKPiArCQkJKGludClwa3Qt PnBheWxvYWRfbGVuZ3RoLCBwa3QtPnBheWxvYWQpOwo+ICsJCXJldHVybiAtRVRJTUVET1VUOwo+ ICsJfQo+ICsKPiArCS8qIEFsc28gY292ZXJzIGhhcmR3YXJlIHRpbWVvdXQgY29uZGl0aW9uICov Cj4gKwlyZXR1cm4geGZlci0+cmVzdWx0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaXJxcmV0dXJuX3Qg c2Ftc3VuZ19kc2ltX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCj4gK3sKPiArCXN0cnVjdCBz YW1zdW5nX2RzaW0gKmRzaSA9IGRldl9pZDsKPiArCXUzMiBzdGF0dXM7Cj4gKwo+ICsJc3RhdHVz ID0gc2Ftc3VuZ19kc2ltX3JlYWQoZHNpLCBEU0lNX0lOVFNSQ19SRUcpOwo+ICsJaWYgKCFzdGF0 dXMpIHsKPiArCQlzdGF0aWMgdW5zaWduZWQgbG9uZyBqOwo+ICsKPiArCQlpZiAocHJpbnRrX3Rp bWVkX3JhdGVsaW1pdCgmaiwgNTAwKSkKPiArCQkJZGV2X3dhcm4oZHNpLT5kZXYsICJzcHVyaW91 cyBpbnRlcnJ1cHRcbiIpOwo+ICsJCXJldHVybiBJUlFfSEFORExFRDsKPiArCX0KPiArCXNhbXN1 bmdfZHNpbV93cml0ZShkc2ksIERTSU1fSU5UU1JDX1JFRywgc3RhdHVzKTsKPiArCj4gKwlpZiAo c3RhdHVzICYgRFNJTV9JTlRfU1dfUlNUX1JFTEVBU0UpIHsKPiArCQl1MzIgbWFzayA9IH4oRFNJ TV9JTlRfUlhfRE9ORSB8IERTSU1fSU5UX1NGUl9GSUZPX0VNUFRZIHwKPiArCQkJRFNJTV9JTlRf U0ZSX0hEUl9GSUZPX0VNUFRZIHwgRFNJTV9JTlRfUlhfRUNDX0VSUiB8Cj4gKwkJCURTSU1fSU5U X1NXX1JTVF9SRUxFQVNFKTsKPiArCQlzYW1zdW5nX2RzaW1fd3JpdGUoZHNpLCBEU0lNX0lOVE1T S19SRUcsIG1hc2spOwo+ICsJCWNvbXBsZXRlKCZkc2ktPmNvbXBsZXRlZCk7Cj4gKwkJcmV0dXJu IElSUV9IQU5ETEVEOwo+ICsJfQo+ICsKPiArCWlmICghKHN0YXR1cyAmIChEU0lNX0lOVF9SWF9E T05FIHwgRFNJTV9JTlRfU0ZSX0ZJRk9fRU1QVFkgfAo+ICsJCQlEU0lNX0lOVF9QTExfU1RBQkxF KSkpCj4gKwkJcmV0dXJuIElSUV9IQU5ETEVEOwo+ICsKPiArCWlmIChzYW1zdW5nX2RzaW1fdHJh bnNmZXJfZmluaXNoKGRzaSkpCj4gKwkJc2Ftc3VuZ19kc2ltX3RyYW5zZmVyX3N0YXJ0KGRzaSk7 Cj4gKwo+ICsJcmV0dXJuIElSUV9IQU5ETEVEOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBzYW1z dW5nX2RzaW1fZW5hYmxlX2lycShzdHJ1Y3Qgc2Ftc3VuZ19kc2ltICpkc2kpCj4gK3sKPiArCWNv bnN0IHN0cnVjdCBzYW1zdW5nX2RzaW1fcGxhdF9kYXRhICpwZGF0YSA9IGRzaS0+cGxhdF9kYXRh Owo+ICsKPiArCWVuYWJsZV9pcnEoZHNpLT5pcnEpOwo+ICsKPiArCWlmIChwZGF0YSAmJiBwZGF0 YS0+aXJxX29wcyAmJiBwZGF0YS0+aXJxX29wcy0+ZW5hYmxlKQo+ICsJCXBkYXRhLT5pcnFfb3Bz LT5lbmFibGUoZHNpKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc2Ftc3VuZ19kc2ltX2Rpc2Fi bGVfaXJxKHN0cnVjdCBzYW1zdW5nX2RzaW0gKmRzaSkKPiArewo+ICsJY29uc3Qgc3RydWN0IHNh bXN1bmdfZHNpbV9wbGF0X2RhdGEgKnBkYXRhID0gZHNpLT5wbGF0X2RhdGE7Cj4gKwo+ICsJaWYg KHBkYXRhICYmIHBkYXRhLT5pcnFfb3BzICYmIHBkYXRhLT5pcnFfb3BzLT5kaXNhYmxlKQo+ICsJ CXBkYXRhLT5pcnFfb3BzLT5kaXNhYmxlKGRzaSk7Cj4gKwo+ICsJZGlzYWJsZV9pcnEoZHNpLT5p cnEpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHNhbXN1bmdfZHNpbV9pbml0KHN0cnVjdCBzYW1z dW5nX2RzaW0gKmRzaSkKPiArewo+ICsJY29uc3Qgc3RydWN0IHNhbXN1bmdfZHNpbV9kcml2ZXJf ZGF0YSAqZHJpdmVyX2RhdGEgPSBkc2ktPmRyaXZlcl9kYXRhOwo+ICsKPiArCXNhbXN1bmdfZHNp bV9yZXNldChkc2kpOwo+ICsJc2Ftc3VuZ19kc2ltX2VuYWJsZV9pcnEoZHNpKTsKPiArCj4gKwlp ZiAoZHJpdmVyX2RhdGEtPnJlZ192YWx1ZXNbUkVTRVRfVFlQRV0gPT0gRFNJTV9GVU5DUlNUKQo+ ICsJCXNhbXN1bmdfZHNpbV9lbmFibGVfbGFuZShkc2ksIEJJVChkc2ktPmxhbmVzKSAtIDEpOwo+ ICsKPiArCXNhbXN1bmdfZHNpbV9lbmFibGVfY2xvY2soZHNpKTsKPiArCWlmIChkcml2ZXJfZGF0 YS0+d2FpdF9mb3JfcmVzZXQpCj4gKwkJc2Ftc3VuZ19kc2ltX3dhaXRfZm9yX3Jlc2V0KGRzaSk7 Cj4gKwlzYW1zdW5nX2RzaW1fc2V0X3BoeV9jdHJsKGRzaSk7Cj4gKwlzYW1zdW5nX2RzaW1faW5p dF9saW5rKGRzaSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHNh bXN1bmdfZHNpbV9hdG9taWNfcHJlX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+ ICsJCQkJCSAgIHN0cnVjdCBkcm1fYnJpZGdlX3N0YXRlICpvbGRfYnJpZGdlX3N0YXRlKQo+ICt7 Cj4gKwlzdHJ1Y3Qgc2Ftc3VuZ19kc2ltICpkc2kgPSBicmlkZ2VfdG9fZHNpKGJyaWRnZSk7Cj4g KwlpbnQgcmV0Owo+ICsKPiArCWlmIChkc2ktPnN0YXRlICYgRFNJTV9TVEFURV9FTkFCTEVEKQo+ ICsJCXJldHVybjsKPiArCj4gKwlyZXQgPSBwbV9ydW50aW1lX3Jlc3VtZV9hbmRfZ2V0KGRzaS0+ ZGV2KTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJZGV2X2Vycihkc2ktPmRldiwgImZhaWxlZCB0 byBlbmFibGUgRFNJIGRldmljZS5cbiIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlkc2kt PnN0YXRlIHw9IERTSU1fU1RBVEVfRU5BQkxFRDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc2Ft c3VuZ19kc2ltX2F0b21pY19lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKPiArCQkJ CSAgICAgICBzdHJ1Y3QgZHJtX2JyaWRnZV9zdGF0ZSAqb2xkX2JyaWRnZV9zdGF0ZSkKPiArewo+ ICsJc3RydWN0IHNhbXN1bmdfZHNpbSAqZHNpID0gYnJpZGdlX3RvX2RzaShicmlkZ2UpOwo+ICsK PiArCXNhbXN1bmdfZHNpbV9zZXRfZGlzcGxheV9tb2RlKGRzaSk7Cj4gKwlzYW1zdW5nX2RzaW1f c2V0X2Rpc3BsYXlfZW5hYmxlKGRzaSwgdHJ1ZSk7Cj4gKwo+ICsJZHNpLT5zdGF0ZSB8PSBEU0lN X1NUQVRFX1ZJRE9VVF9BVkFJTEFCTEU7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHNhbXN1bmdf ZHNpbV9hdG9taWNfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+ICsJCQkJCXN0 cnVjdCBkcm1fYnJpZGdlX3N0YXRlICpvbGRfYnJpZGdlX3N0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3Qg c2Ftc3VuZ19kc2ltICpkc2kgPSBicmlkZ2VfdG9fZHNpKGJyaWRnZSk7Cj4gKwo+ICsJaWYgKCEo ZHNpLT5zdGF0ZSAmIERTSU1fU1RBVEVfRU5BQkxFRCkpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWRz aS0+c3RhdGUgJj0gfkRTSU1fU1RBVEVfVklET1VUX0FWQUlMQUJMRTsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgc2Ftc3VuZ19kc2ltX2F0b21pY19wb3N0X2Rpc2FibGUoc3RydWN0IGRybV9icmlk Z2UgKmJyaWRnZSwKPiArCQkJCQkgICAgIHN0cnVjdCBkcm1fYnJpZGdlX3N0YXRlICpvbGRfYnJp ZGdlX3N0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3Qgc2Ftc3VuZ19kc2ltICpkc2kgPSBicmlkZ2VfdG9f ZHNpKGJyaWRnZSk7Cj4gKwo+ICsJc2Ftc3VuZ19kc2ltX3NldF9kaXNwbGF5X2VuYWJsZShkc2ks IGZhbHNlKTsKPiArCj4gKwlkc2ktPnN0YXRlICY9IH5EU0lNX1NUQVRFX0VOQUJMRUQ7Cj4gKwlw bV9ydW50aW1lX3B1dF9zeW5jKGRzaS0+ZGV2KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc2Ft c3VuZ19kc2ltX21vZGVfc2V0KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCj4gKwkJCQkgIGNv bnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAo+ICsJCQkJICBjb25zdCBzdHJ1Y3Qg ZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKPiArewo+ICsJc3RydWN0IHNhbXN1bmdf ZHNpbSAqZHNpID0gYnJpZGdlX3RvX2RzaShicmlkZ2UpOwo+ICsKPiArCWRybV9tb2RlX2NvcHko JmRzaS0+bW9kZSwgYWRqdXN0ZWRfbW9kZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgc2Ftc3Vu Z19kc2ltX2F0dGFjaChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+ICsJCQkgICAgICAgZW51 bSBkcm1fYnJpZGdlX2F0dGFjaF9mbGFncyBmbGFncykKPiArewo+ICsJc3RydWN0IHNhbXN1bmdf ZHNpbSAqZHNpID0gYnJpZGdlX3RvX2RzaShicmlkZ2UpOwo+ICsKPiArCXJldHVybiBkcm1fYnJp ZGdlX2F0dGFjaChicmlkZ2UtPmVuY29kZXIsIGRzaS0+b3V0X2JyaWRnZSwgTlVMTCwgZmxhZ3Mp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9icmlkZ2VfZnVuY3Mgc2Ftc3Vu Z19kc2ltX2JyaWRnZV9mdW5jcyA9IHsKPiArCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlCQk9IGRy bV9hdG9taWNfaGVscGVyX2JyaWRnZV9kdXBsaWNhdGVfc3RhdGUsCj4gKwkuYXRvbWljX2Rlc3Ry b3lfc3RhdGUJCT0gZHJtX2F0b21pY19oZWxwZXJfYnJpZGdlX2Rlc3Ryb3lfc3RhdGUsCj4gKwku YXRvbWljX3Jlc2V0CQkJPSBkcm1fYXRvbWljX2hlbHBlcl9icmlkZ2VfcmVzZXQsCj4gKwkuYXRv bWljX3ByZV9lbmFibGUJCT0gc2Ftc3VuZ19kc2ltX2F0b21pY19wcmVfZW5hYmxlLAo+ICsJLmF0 b21pY19lbmFibGUJCQk9IHNhbXN1bmdfZHNpbV9hdG9taWNfZW5hYmxlLAo+ICsJLmF0b21pY19k aXNhYmxlCQkJPSBzYW1zdW5nX2RzaW1fYXRvbWljX2Rpc2FibGUsCj4gKwkuYXRvbWljX3Bvc3Rf ZGlzYWJsZQkJPSBzYW1zdW5nX2RzaW1fYXRvbWljX3Bvc3RfZGlzYWJsZSwKPiArCS5tb2RlX3Nl dAkJCT0gc2Ftc3VuZ19kc2ltX21vZGVfc2V0LAo+ICsJLmF0dGFjaAkJCQk9IHNhbXN1bmdfZHNp bV9hdHRhY2gsCj4gK307Cj4gKwo+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBzYW1zdW5nX2Rz aW1fb2ZfbWF0Y2gpOwo+ICsKPiArc3RhdGljIGludCBzYW1zdW5nX2RzaW1faG9zdF9hdHRhY2go c3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCj4gKwkJCQkgICAgc3RydWN0IG1pcGlfZHNpX2Rl dmljZSAqZGV2aWNlKQo+ICt7Cj4gKwlzdHJ1Y3Qgc2Ftc3VuZ19kc2ltICpkc2kgPSBob3N0X3Rv X2RzaShob3N0KTsKPiArCWNvbnN0IHN0cnVjdCBzYW1zdW5nX2RzaW1fcGxhdF9kYXRhICpwZGF0 YSA9IGRzaS0+cGxhdF9kYXRhOwo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gZHNpLT5kZXY7Cj4g KwlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbDsKPiArCWludCByZXQ7Cj4gKwo+ICsJcGFuZWwgPSBv Zl9kcm1fZmluZF9wYW5lbChkZXZpY2UtPmRldi5vZl9ub2RlKTsKPiArCWlmICghSVNfRVJSKHBh bmVsKSkgewo+ICsJCWRzaS0+b3V0X2JyaWRnZSA9IGRldm1fZHJtX3BhbmVsX2JyaWRnZV9hZGQo ZGV2LCBwYW5lbCk7Cj4gKwl9IGVsc2Ugewo+ICsJCWRzaS0+b3V0X2JyaWRnZSA9IG9mX2RybV9m aW5kX2JyaWRnZShkZXZpY2UtPmRldi5vZl9ub2RlKTsKPiArCQlpZiAoIWRzaS0+b3V0X2JyaWRn ZSkKPiArCQkJZHNpLT5vdXRfYnJpZGdlID0gRVJSX1BUUigtRUlOVkFMKTsKPiArCX0KPiArCj4g KwlpZiAoSVNfRVJSKGRzaS0+b3V0X2JyaWRnZSkpIHsKPiArCQlyZXQgPSBQVFJfRVJSKGRzaS0+ b3V0X2JyaWRnZSk7Cj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJmYWlsZWQgdG8gZmluZCB0aGUg YnJpZGdlOiAlZFxuIiwgcmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCURSTV9E RVZfSU5GTyhkZXYsICJBdHRhY2hlZCAlcyBkZXZpY2VcbiIsIGRldmljZS0+bmFtZSk7Cj4gKwo+ ICsJZHJtX2JyaWRnZV9hZGQoJmRzaS0+YnJpZGdlKTsKPiArCj4gKwlpZiAocGRhdGEgJiYgcGRh dGEtPmhvc3Rfb3BzICYmIHBkYXRhLT5ob3N0X29wcy0+YXR0YWNoKSB7Cj4gKwkJcmV0ID0gcGRh dGEtPmhvc3Rfb3BzLT5hdHRhY2goZHNpLCBkZXZpY2UpOwo+ICsJCWlmIChyZXQgPCAwKQo+ICsJ CQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCWRzaS0+bGFuZXMgPSBkZXZpY2UtPmxhbmVzOwo+ ICsJZHNpLT5mb3JtYXQgPSBkZXZpY2UtPmZvcm1hdDsKPiArCWRzaS0+bW9kZV9mbGFncyA9IGRl dmljZS0+bW9kZV9mbGFnczsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGlu dCBzYW1zdW5nX2RzaW1faG9zdF9kZXRhY2goc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCj4g KwkJCQkgICAgc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZGV2aWNlKQo+ICt7Cj4gKwlzdHJ1Y3Qg c2Ftc3VuZ19kc2ltICpkc2kgPSBob3N0X3RvX2RzaShob3N0KTsKPiArCWNvbnN0IHN0cnVjdCBz YW1zdW5nX2RzaW1fcGxhdF9kYXRhICpwZGF0YSA9IGRzaS0+cGxhdF9kYXRhOwo+ICsJaW50IHJl dDsKPiArCj4gKwlpZiAoZHNpLT5vdXRfYnJpZGdlLT5mdW5jcy0+ZGV0YWNoKQo+ICsJCWRzaS0+ b3V0X2JyaWRnZS0+ZnVuY3MtPmRldGFjaChkc2ktPm91dF9icmlkZ2UpOwo+ICsKPiArCWRzaS0+ b3V0X2JyaWRnZSA9IE5VTEw7Cj4gKwo+ICsJaWYgKHBkYXRhICYmIHBkYXRhLT5ob3N0X29wcyAm JiBwZGF0YS0+aG9zdF9vcHMtPmRldGFjaCkgewo+ICsJCXJldCA9IHBkYXRhLT5ob3N0X29wcy0+ ZGV0YWNoKGRzaSwgZGV2aWNlKTsKPiArCQlpZiAocmV0IDwgMCkKPiArCQkJcmV0dXJuIHJldDsK PiArCX0KPiArCj4gKwlkcm1fYnJpZGdlX3JlbW92ZSgmZHNpLT5icmlkZ2UpOwo+ICsKPiArCXJl dHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3NpemVfdCBzYW1zdW5nX2RzaW1faG9zdF90cmFu c2ZlcihzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKPiArCQkJCQkgIGNvbnN0IHN0cnVjdCBt aXBpX2RzaV9tc2cgKm1zZykKPiArewo+ICsJc3RydWN0IHNhbXN1bmdfZHNpbSAqZHNpID0gaG9z dF90b19kc2koaG9zdCk7Cj4gKwlzdHJ1Y3Qgc2Ftc3VuZ19kc2ltX3RyYW5zZmVyIHhmZXI7Cj4g KwlpbnQgcmV0Owo+ICsKPiArCWlmICghKGRzaS0+c3RhdGUgJiBEU0lNX1NUQVRFX0VOQUJMRUQp KQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWlmICghKGRzaS0+c3RhdGUgJiBEU0lNX1NU QVRFX0lOSVRJQUxJWkVEKSkgewo+ICsJCXJldCA9IHNhbXN1bmdfZHNpbV9pbml0KGRzaSk7Cj4g KwkJaWYgKHJldCkKPiArCQkJcmV0dXJuIHJldDsKPiArCQlkc2ktPnN0YXRlIHw9IERTSU1fU1RB VEVfSU5JVElBTElaRUQ7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gbWlwaV9kc2lfY3JlYXRlX3BhY2tl dCgmeGZlci5wYWNrZXQsIG1zZyk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlyZXR1cm4gcmV0Owo+ ICsKPiArCXhmZXIucnhfbGVuID0gbXNnLT5yeF9sZW47Cj4gKwl4ZmVyLnJ4X3BheWxvYWQgPSBt c2ctPnJ4X2J1ZjsKPiArCXhmZXIuZmxhZ3MgPSBtc2ctPmZsYWdzOwo+ICsKPiArCXJldCA9IHNh bXN1bmdfZHNpbV90cmFuc2Zlcihkc2ksICZ4ZmVyKTsKPiArCXJldHVybiAocmV0IDwgMCkgPyBy ZXQgOiB4ZmVyLnJ4X2RvbmU7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWlwaV9k c2lfaG9zdF9vcHMgc2Ftc3VuZ19kc2ltX29wcyA9IHsKPiArCS5hdHRhY2ggPSBzYW1zdW5nX2Rz aW1faG9zdF9hdHRhY2gsCj4gKwkuZGV0YWNoID0gc2Ftc3VuZ19kc2ltX2hvc3RfZGV0YWNoLAo+ ICsJLnRyYW5zZmVyID0gc2Ftc3VuZ19kc2ltX2hvc3RfdHJhbnNmZXIsCj4gK307Cj4gKwo+ICtz dGF0aWMgaW50IHNhbXN1bmdfZHNpbV9vZl9yZWFkX3UzMihjb25zdCBzdHJ1Y3QgZGV2aWNlX25v ZGUgKm5wLAo+ICsJCQkJICAgIGNvbnN0IGNoYXIgKnByb3BuYW1lLCB1MzIgKm91dF92YWx1ZSkK PiArewo+ICsJaW50IHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCBwcm9wbmFtZSwgb3V0 X3ZhbHVlKTsKPiArCj4gKwlpZiAocmV0IDwgMCkKPiArCQlwcl9lcnIoIiVwT0Y6IGZhaWxlZCB0 byBnZXQgJyVzJyBwcm9wZXJ0eVxuIiwgbnAsIHByb3BuYW1lKTsKPiArCj4gKwlyZXR1cm4gcmV0 Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHNhbXN1bmdfZHNpbV9wYXJzZV9kdChzdHJ1Y3Qgc2Ft c3VuZ19kc2ltICpkc2kpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRzaS0+ZGV2Owo+ ICsJc3RydWN0IGRldmljZV9ub2RlICpub2RlID0gZGV2LT5vZl9ub2RlOwo+ICsJaW50IHJldDsK PiArCj4gKwlyZXQgPSBzYW1zdW5nX2RzaW1fb2ZfcmVhZF91MzIobm9kZSwgInNhbXN1bmcscGxs LWNsb2NrLWZyZXF1ZW5jeSIsCj4gKwkJCQkgICAgICAgJmRzaS0+cGxsX2Nsa19yYXRlKTsKPiAr CWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0ID0gc2Ftc3VuZ19kc2lt X29mX3JlYWRfdTMyKG5vZGUsICJzYW1zdW5nLGJ1cnN0LWNsb2NrLWZyZXF1ZW5jeSIsCj4gKwkJ CQkgICAgICAgJmRzaS0+YnVyc3RfY2xrX3JhdGUpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0 dXJuIHJldDsKPiArCj4gKwlyZXQgPSBzYW1zdW5nX2RzaW1fb2ZfcmVhZF91MzIobm9kZSwgInNh bXN1bmcsZXNjLWNsb2NrLWZyZXF1ZW5jeSIsCj4gKwkJCQkgICAgICAgJmRzaS0+ZXNjX2Nsa19y YXRlKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0dXJuIDA7 Cj4gK30KPiArCj4gK19fd2VhayBjb25zdCBzdHJ1Y3Qgc2Ftc3VuZ19kc2ltX3BsYXRfZGF0YSAq Cj4gK3NhbXN1bmdfZHNpbV9wbGF0X3Byb2JlKHN0cnVjdCBzYW1zdW5nX2RzaW0gKnByaXYpCj4g K3sKPiArCXJldHVybiBOVUxMOwo+ICt9Cj4gKwo+ICtfX3dlYWsgdm9pZCBzYW1zdW5nX2RzaW1f cGxhdF9yZW1vdmUoc3RydWN0IHNhbXN1bmdfZHNpbSAqcHJpdikKPiArewo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IHNhbXN1bmdfZHNpbV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 KQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owo+ICsJc3RydWN0IHNh bXN1bmdfZHNpbSAqZHNpOwo+ICsJaW50IHJldCwgaTsKPiArCj4gKwlkc2kgPSBkZXZtX2t6YWxs b2MoZGV2LCBzaXplb2YoKmRzaSksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFkc2kpCj4gKwkJcmV0 dXJuIC1FTk9NRU07Cj4gKwo+ICsJaW5pdF9jb21wbGV0aW9uKCZkc2ktPmNvbXBsZXRlZCk7Cj4g KwlzcGluX2xvY2tfaW5pdCgmZHNpLT50cmFuc2Zlcl9sb2NrKTsKPiArCUlOSVRfTElTVF9IRUFE KCZkc2ktPnRyYW5zZmVyX2xpc3QpOwo+ICsKPiArCWRzaS0+ZHNpX2hvc3Qub3BzID0gJnNhbXN1 bmdfZHNpbV9vcHM7Cj4gKwlkc2ktPmRzaV9ob3N0LmRldiA9IGRldjsKPiArCj4gKwlkc2ktPmRl diA9IGRldjsKPiArCWRzaS0+ZHJpdmVyX2RhdGEgPSBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEo ZGV2KTsKPiArCj4gKwlkc2ktPnN1cHBsaWVzWzBdLnN1cHBseSA9ICJ2ZGRjb3JlIjsKPiArCWRz aS0+c3VwcGxpZXNbMV0uc3VwcGx5ID0gInZkZGlvIjsKPiArCXJldCA9IGRldm1fcmVndWxhdG9y X2J1bGtfZ2V0KGRldiwgQVJSQVlfU0laRShkc2ktPnN1cHBsaWVzKSwKPiArCQkJCSAgICAgIGRz aS0+c3VwcGxpZXMpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYs IHJldCwgImZhaWxlZCB0byBnZXQgcmVndWxhdG9yc1xuIik7Cj4gKwo+ICsJZHNpLT5jbGtzID0g ZGV2bV9rY2FsbG9jKGRldiwgZHNpLT5kcml2ZXJfZGF0YS0+bnVtX2Nsa3MsCj4gKwkJCQkgc2l6 ZW9mKCpkc2ktPmNsa3MpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghZHNpLT5jbGtzKQo+ICsJCXJl dHVybiAtRU5PTUVNOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBkc2ktPmRyaXZlcl9kYXRhLT5u dW1fY2xrczsgaSsrKSB7Cj4gKwkJZHNpLT5jbGtzW2ldID0gZGV2bV9jbGtfZ2V0KGRldiwgY2xr X25hbWVzW2ldKTsKPiArCQlpZiAoSVNfRVJSKGRzaS0+Y2xrc1tpXSkpIHsKPiArCQkJaWYgKHN0 cmNtcChjbGtfbmFtZXNbaV0sICJzY2xrX21pcGkiKSA9PSAwKSB7Cj4gKwkJCQlkc2ktPmNsa3Nb aV0gPSBkZXZtX2Nsa19nZXQoZGV2LCBPTERfU0NMS19NSVBJX0NMS19OQU1FKTsKPiArCQkJCWlm ICghSVNfRVJSKGRzaS0+Y2xrc1tpXSkpCj4gKwkJCQkJY29udGludWU7Cj4gKwkJCX0KPiArCj4g KwkJCWRldl9pbmZvKGRldiwgImZhaWxlZCB0byBnZXQgdGhlIGNsb2NrOiAlc1xuIiwgY2xrX25h bWVzW2ldKTsKPiArCQkJcmV0dXJuIFBUUl9FUlIoZHNpLT5jbGtzW2ldKTsKPiArCQl9Cj4gKwl9 Cj4gKwo+ICsJZHNpLT5yZWdfYmFzZSA9IGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZShw ZGV2LCAwKTsKPiArCWlmIChJU19FUlIoZHNpLT5yZWdfYmFzZSkpCj4gKwkJcmV0dXJuIFBUUl9F UlIoZHNpLT5yZWdfYmFzZSk7Cj4gKwo+ICsJZHNpLT5waHkgPSBkZXZtX3BoeV9nZXQoZGV2LCAi ZHNpbSIpOwo+ICsJaWYgKElTX0VSUihkc2ktPnBoeSkpIHsKPiArCQlkZXZfaW5mbyhkZXYsICJm YWlsZWQgdG8gZ2V0IGRzaW0gcGh5XG4iKTsKPiArCQlyZXR1cm4gUFRSX0VSUihkc2ktPnBoeSk7 Cj4gKwl9Cj4gKwo+ICsJZHNpLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwo+ICsJ aWYgKGRzaS0+aXJxIDwgMCkKPiArCQlyZXR1cm4gZHNpLT5pcnE7Cj4gKwo+ICsJcmV0ID0gZGV2 bV9yZXF1ZXN0X3RocmVhZGVkX2lycShkZXYsIGRzaS0+aXJxLCBOVUxMLAo+ICsJCQkJCXNhbXN1 bmdfZHNpbV9pcnEsCj4gKwkJCQkJSVJRRl9PTkVTSE9UIHwgSVJRRl9OT19BVVRPRU4sCj4gKwkJ CQkJZGV2X25hbWUoZGV2KSwgZHNpKTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJyKGRldiwg ImZhaWxlZCB0byByZXF1ZXN0IGRzaSBpcnFcbiIpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4g Kwo+ICsJcmV0ID0gc2Ftc3VuZ19kc2ltX3BhcnNlX2R0KGRzaSk7Cj4gKwlpZiAocmV0KQo+ICsJ CXJldHVybiByZXQ7Cj4gKwo+ICsJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHNpKTsKPiAr Cj4gKwlwbV9ydW50aW1lX2VuYWJsZShkZXYpOwo+ICsKPiArCWRzaS0+YnJpZGdlLmZ1bmNzID0g JnNhbXN1bmdfZHNpbV9icmlkZ2VfZnVuY3M7Cj4gKwlkc2ktPmJyaWRnZS5vZl9ub2RlID0gZGV2 LT5vZl9ub2RlOwo+ICsJZHNpLT5icmlkZ2UudHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9EU0k7 Cj4gKwo+ICsJZHNpLT5wbGF0X2RhdGEgPSBzYW1zdW5nX2RzaW1fcGxhdF9wcm9iZShkc2kpOwoK VGhlIGFib3ZlIGl0IGEgc291cmNlIG9mIHRoZSBmdW5ueSByYWNlLiBzYW1zdW5nX2RzaW1fcGxh dF9wcm9iZSgpIGNhbGxzIApjb21wb25lbnRfYWRkKCkuIElmIERTSSBpcyB0aGUgbGFzdCBuZWVk ZWQgZGV2aWNlIG9mIHRoZSBjb21wb25lbnQgZHJtIApkZXZpY2UsIHRoZW4gdGhpcyB3aWxsIGlt bWVkaWF0ZWx5IGNhbGwgYmluZCgpLCB3aGF0IGNhdXNlcyB0byBlbnRlciAKZXh5bm9zX2RzaV9i aW5kKCkgd2l0aCBkc2ktPnBsYXRfZGF0YSBiZWluZyBOVUxMLiBJdCBtdXN0IGJlIGFzc2lnbmVk IAppbnNpZGUgc2Ftc3VuZ19kc2ltX3BsYXRfcHJvYmUoKSwgYmVmb3JlIGNhbGxpbmcgY29tcG9u ZW50X2FkZCgpCgogPiAuLi4KCkJlc3QgcmVnYXJkcwotLSAKTWFyZWsgU3p5cHJvd3NraSwgUGhE ClNhbXN1bmcgUiZEIEluc3RpdHV0ZSBQb2xhbmQKCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51 eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5v cmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==