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 6D13EC433F5 for ; Wed, 2 Feb 2022 17:08:49 +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=fG6rETaZVvkQLLCMDkngtP83tgnqVbP9bG7QqDfj6GY=; b=3ZD0ixe9qtBAdr Hlb3z7zP4E1qx/+bVdxtZa2FaEC1Dji3gALNgoCUUyBoyFSF2O29ixg3SX4ieFYAGNma6v1qgmp6I PGXm/0beJruGGsbmbXTFCGya3je0qGIMldwTCdw6KCV+4obGGBxYMMsguncVvnAdRoX6x1j4rdYHv Vj8I7uLwnPSdYESIGau+8of9yB87ySvq4WwDOEyp8rO9GwN4Fj+LmN9I6wPtgjzFJZeWnEE+nxT77 VnZnnzISHH4I0xADrMQ3cNxrAyQPbKvNhkVt7ZNRF8s77ROs2dW0RbtHH9KMCs/mJXgKtX5ejXmP2 WO8EEOb680LpmuuFwRAw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nFJ7U-00GMgP-Vl; Wed, 02 Feb 2022 17:08:37 +0000 Received: from bhuna.collabora.co.uk ([46.235.227.227]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nFJ7N-00GMfZ-NT; Wed, 02 Feb 2022 17:08:35 +0000 Received: from [IPV6:2a01:e0a:120:3210:3185:7f74:37d4:845b] (unknown [IPv6:2a01:e0a:120:3210:3185:7f74:37d4:845b]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: benjamin.gaignard) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id EBC6B1F443AC; Wed, 2 Feb 2022 17:08:24 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1643821705; bh=oNitQz7ZEaP/oKK1oHgMBTSWmk0+EkBzimlbxR3pGmI=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=G0zkbb7VN3X6VdvfZ/0hd2xLihhjy0XCfDMw50R9oXy84EXWnna3ct+W5gLlHM82B JE0jaCSf+6ByaqVjLjf06I7+77vjFW0L2ecIzSJ2DkSXEc766RKOPmrJiR1OPHsNVI 4J8QhXrZM+ZTpoGbvthZcnGPCHBlAHlmw70ZXXQL2texsxN0pTYxQSDX5tZ6fQZnLt QJZlOUL0/X6sEqGuYnt2g0Vuuc8jBBKgIGiELiggOVfdOpL2roLCIzacxSSXL2e23R IJ+n/3W19a0Me7VhCqHoEQLvCg6QwA5ZueK2JFaaKMCtL+pkGc8YbYwAPFbHScGZHl gbPgJ5MwJyl8Q== Message-ID: Date: Wed, 2 Feb 2022 18:08:22 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0 Subject: Re: [PATCH v11 3/3] media: platform: mtk-mdp3: add Mediatek MDP3 driver Content-Language: en-US To: Moudy Ho , Mauro Carvalho Chehab , Rob Herring , Matthias Brugger , Hans Verkuil , Jernej Skrabec Cc: Chun-Kuang Hu , Geert Uytterhoeven , Rob Landley , Laurent Pinchart , linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org, Alexandre Courbot , tfiga@chromium.org, drinkcat@chromium.org, pihsun@chromium.org, hsinyi@google.com, AngeloGioacchino Del Regno , Maoguang Meng , daoyuan huang , Ping-Hsun Wu , menghui.lin@mediatek.com, sj.huang@mediatek.com, allen-kh.cheng@mediatek.com, randy.wu@mediatek.com, jason-jh.lin@mediatek.com, roy-cw.yeh@mediatek.com, river.cheng@mediatek.com, srv_heupstream@mediatek.com References: <20220105093758.6850-1-moudy.ho@mediatek.com> <20220105093758.6850-4-moudy.ho@mediatek.com> From: Benjamin Gaignard In-Reply-To: <20220105093758.6850-4-moudy.ho@mediatek.com> X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: 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-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org CkxlIDA1LzAxLzIwMjIgw6AgMTA6MzcsIE1vdWR5IEhvIGEgw6ljcml0wqA6Cj4gVGhpcyBwYXRj aCBhZGRzIGRyaXZlciBmb3IgTWVkaWF0ZWsncyBNZWRpYSBEYXRhIFBhdGggdmVyLjMgKE1EUDMp Lgo+IEl0IHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgo+ICAgIGNvbG9yIHRyYW5z Zm9ybSwgZm9ybWF0IGNvbnZlcnNpb24sIHJlc2l6ZSwgY3JvcCwgcm90YXRlLCBmbGlwCj4gICAg YW5kIGFkZGl0aW9uYWwgaW1hZ2UgcXVhbGl0eSBlbmhhbmNlbWVudC4KPgo+IFRoZSBNRFAzIGRy aXZlciBpcyBtYWlubHkgdXNlZCBmb3IgR29vZ2xlIENocm9tZWJvb2sgcHJvZHVjdHMgdG8KPiBp bXBvcnQgdGhlIG5ldyBhcmNoaXRlY3R1cmUgdG8gc2V0IHRoZSBIVyBzZXR0aW5ncyBhcyBzaG93 biBiZWxvdzoKPiAgICBVc2VyIC0+IFY0TDIgZnJhbWV3b3JrCj4gICAgICAtPiBNRFAzIGRyaXZl ciAtPiBTQ1AgKHNldHRpbmcgY2FsY3VsYXRpb25zKQo+ICAgICAgICAtPiBNRFAzIGRyaXZlciAt PiBDTURRIChHQ0UgZHJpdmVyKSAtPiBIVwo+Cj4gRWFjaCBtb2R1bGVzJyByZWxhdGVkIG9wZXJh dGlvbiBjb250cm9sIGlzIHNpdGVkIGluIG10ay1tZHAzLWNvbXAuYwo+IEVhY2ggbW9kdWxlcycg cmVnaXN0ZXIgdGFibGUgaXMgZGVmaW5lZCBpbiBmaWxlIHdpdGggIm1kcF9yZWdfIiBwcmVmaXgK PiBHQ0UgcmVsYXRlZCBBUEksIG9wZXJhdGlvbiBjb250cm9sICBzaXRlZCBpbiBtdGstbWRwMy1j bWRxLmMKPiBWNEwyIG0ybSBkZXZpY2UgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBpbiBtdGst bWRwMy1tMm0uYwo+IFByb2JlLCBwb3dlciwgc3VzcGVuZC9yZXN1bWUsIHN5c3RlbSBsZXZlbCBm dW5jdGlvbnMgYXJlIGRlZmluZWQgaW4KPiBtdGstbWRwMy1jb3JlLmMKPgo+IFNpZ25lZC1vZmYt Ynk6IFBpbmctSHN1biBXdSA8cGluZy1oc3VuLnd1QG1lZGlhdGVrLmNvbT4KPiBTaWduZWQtb2Zm LWJ5OiBkYW95dWFuIGh1YW5nIDxkYW95dWFuLmh1YW5nQG1lZGlhdGVrLmNvbT4KPiBTaWduZWQt b2ZmLWJ5OiBNb3VkeSBIbyA8bW91ZHkuaG9AbWVkaWF0ZWsuY29tPgo+IFJlcG9ydGVkLWJ5OiBr ZXJuZWwgdGVzdCByb2JvdCA8bGtwQGludGVsLmNvbT4KPiAtLS0KPiBEZXBlbmQgb246Cj4gWzFd aHR0cHM6Ly9wYXRjaHdvcmsua2VybmVsLm9yZy9wcm9qZWN0L2xpbnV4LW1lZGlhdGVrL3BhdGNo LzIwMjIwMTA0MDkxNzEyLjI1NjcwLTItbW91ZHkuaG9AbWVkaWF0ZWsuY29tLwo+IFsyXWh0dHBz Oi8vcGF0Y2h3b3JrLmtlcm5lbC5vcmcvcHJvamVjdC9saW51eC1tZWRpYXRlay9wYXRjaC8yMDIy MDEwNDA5MTcxMi4yNTY3MC0zLW1vdWR5LmhvQG1lZGlhdGVrLmNvbS8KPiBbM11odHRwczovL3Bh dGNod29yay5rZXJuZWwub3JnL3Byb2plY3QvbGludXgtbWVkaWF0ZWsvcGF0Y2gvMjAyMjAxMDQw OTE3MTIuMjU2NzAtNC1tb3VkeS5ob0BtZWRpYXRlay5jb20vCj4gWzRdaHR0cHM6Ly9wYXRjaHdv cmsua2VybmVsLm9yZy9wcm9qZWN0L2xpbnV4LW1lZGlhdGVrL3BhdGNoLzIwMjIwMTA0MDkxNzEy LjI1NjcwLTUtbW91ZHkuaG9AbWVkaWF0ZWsuY29tLwo+IC0tLQo+ICAgZHJpdmVycy9tZWRpYS9w bGF0Zm9ybS9LY29uZmlnICAgICAgICAgICAgICAgIHwgICAyMCArCj4gICBkcml2ZXJzL21lZGlh L3BsYXRmb3JtL01ha2VmaWxlICAgICAgICAgICAgICAgfCAgICAyICsKPiAgIGRyaXZlcnMvbWVk aWEvcGxhdGZvcm0vbXRrLW1kcDMvTWFrZWZpbGUgICAgICB8ICAgIDYgKwo+ICAgLi4uL21lZGlh L3BsYXRmb3JtL210ay1tZHAzL21kcF9yZWdfY2NvcnIuaCAgIHwgICAxOSArCj4gICBkcml2ZXJz L21lZGlhL3BsYXRmb3JtL210ay1tZHAzL21kcF9yZWdfaXNwLmggfCAgIDI3ICsKPiAgIC4uLi9t ZWRpYS9wbGF0Zm9ybS9tdGstbWRwMy9tZHBfcmVnX3JkbWEuaCAgICB8ICAgNjUgKwo+ICAgZHJp dmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstbWRwMy9tZHBfcmVnX3Jzei5oIHwgICAzOSArCj4gICAu Li4vbWVkaWEvcGxhdGZvcm0vbXRrLW1kcDMvbWRwX3JlZ193ZG1hLmggICAgfCAgIDQ3ICsKPiAg IC4uLi9tZWRpYS9wbGF0Zm9ybS9tdGstbWRwMy9tZHBfcmVnX3dyb3QuaCAgICB8ICAgNTUgKwo+ ICAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstbWRwMy9tdGstaW1nLWlwaS5oIHwgIDI4MCAr KysrCj4gICAuLi4vbWVkaWEvcGxhdGZvcm0vbXRrLW1kcDMvbXRrLW1kcDMtY21kcS5jICAgfCAg NTE1ICsrKysrKysKPiAgIC4uLi9tZWRpYS9wbGF0Zm9ybS9tdGstbWRwMy9tdGstbWRwMy1jbWRx LmggICB8ICAgNDYgKwo+ICAgLi4uL21lZGlhL3BsYXRmb3JtL210ay1tZHAzL210ay1tZHAzLWNv bXAuYyAgIHwgMTIyOCArKysrKysrKysrKysrKysrKwo+ICAgLi4uL21lZGlhL3BsYXRmb3JtL210 ay1tZHAzL210ay1tZHAzLWNvbXAuaCAgIHwgIDE0NyArKwo+ICAgLi4uL21lZGlhL3BsYXRmb3Jt L210ay1tZHAzL210ay1tZHAzLWNvcmUuYyAgIHwgIDMzOCArKysrKwo+ICAgLi4uL21lZGlhL3Bs YXRmb3JtL210ay1tZHAzL210ay1tZHAzLWNvcmUuaCAgIHwgICA3NiArCj4gICAuLi4vbWVkaWEv cGxhdGZvcm0vbXRrLW1kcDMvbXRrLW1kcDMtbTJtLmMgICAgfCAgNzg5ICsrKysrKysrKysrCj4g ICAuLi4vbWVkaWEvcGxhdGZvcm0vbXRrLW1kcDMvbXRrLW1kcDMtbTJtLmggICAgfCAgIDQ5ICsK PiAgIC4uLi9tZWRpYS9wbGF0Zm9ybS9tdGstbWRwMy9tdGstbWRwMy1yZWdzLmMgICB8ICA3Mzcg KysrKysrKysrKwo+ICAgLi4uL21lZGlhL3BsYXRmb3JtL210ay1tZHAzL210ay1tZHAzLXJlZ3Mu aCAgIHwgIDM3MiArKysrKwo+ICAgLi4uL21lZGlhL3BsYXRmb3JtL210ay1tZHAzL210ay1tZHAz LXZwdS5jICAgIHwgIDMxMiArKysrKwo+ICAgLi4uL21lZGlhL3BsYXRmb3JtL210ay1tZHAzL210 ay1tZHAzLXZwdS5oICAgIHwgICA3OCArKwo+ICAgMjIgZmlsZXMgY2hhbmdlZCwgNTI0NyBpbnNl cnRpb25zKCspCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9t dGstbWRwMy9NYWtlZmlsZQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxh dGZvcm0vbXRrLW1kcDMvbWRwX3JlZ19jY29yci5oCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstbWRwMy9tZHBfcmVnX2lzcC5oCj4gICBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstbWRwMy9tZHBfcmVnX3JkbWEuaAo+ ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLW1kcDMvbWRw X3JlZ19yc3ouaAo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0v bXRrLW1kcDMvbWRwX3JlZ193ZG1hLmgKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21l ZGlhL3BsYXRmb3JtL210ay1tZHAzL21kcF9yZWdfd3JvdC5oCj4gICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstbWRwMy9tdGstaW1nLWlwaS5oCj4gICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstbWRwMy9tdGstbWRwMy1j bWRxLmMKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1t ZHAzL210ay1tZHAzLWNtZHEuaAo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEv cGxhdGZvcm0vbXRrLW1kcDMvbXRrLW1kcDMtY29tcC5jCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstbWRwMy9tdGstbWRwMy1jb21wLmgKPiAgIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1tZHAzL210ay1tZHAzLWNv cmUuYwo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLW1k cDMvbXRrLW1kcDMtY29yZS5oCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9w bGF0Zm9ybS9tdGstbWRwMy9tdGstbWRwMy1tMm0uYwo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLW1kcDMvbXRrLW1kcDMtbTJtLmgKPiAgIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1tZHAzL210ay1tZHAzLXJlZ3Mu Ywo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLW1kcDMv bXRrLW1kcDMtcmVncy5oCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0 Zm9ybS9tdGstbWRwMy9tdGstbWRwMy12cHUuYwo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvbWVkaWEvcGxhdGZvcm0vbXRrLW1kcDMvbXRrLW1kcDMtdnB1LmgKPgo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3Jt L0tjb25maWcKPiBpbmRleCBjZjRhZGM2NGM5NTMuLmY4NzliOTNhNjIzYiAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL0tjb25maWcKPiArKysgYi9kcml2ZXJzL21lZGlhL3Bs YXRmb3JtL0tjb25maWcKPiBAQCAtMzE1LDYgKzMxNSwyNiBAQCBjb25maWcgVklERU9fTUVESUFU RUtfTURQCj4gICAJICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29z ZSBNIGhlcmU6IHRoZQo+ICAgCSAgICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbXRrLW1kcC4KPiAg IAo+ICtjb25maWcgVklERU9fTUVESUFURUtfTURQMwo+ICsJdHJpc3RhdGUgIk1lZGlhdGVrIE1E UCB2MyBkcml2ZXIiCj4gKwlkZXBlbmRzIG9uIE1US19JT01NVSB8fCBDT01QTElFX1RFU1QKPiAr CWRlcGVuZHMgb24gVklERU9fREVWICYmIFZJREVPX1Y0TDIKPiArCWRlcGVuZHMgb24gQVJDSF9N RURJQVRFSyB8fCBDT01QSUxFX1RFU1QKPiArCWRlcGVuZHMgb24gTVRLX01NU1lTCj4gKwlkZXBl bmRzIG9uIEhBU19ETUEKPiArCXNlbGVjdCBWSURFT0JVRjJfRE1BX0NPTlRJRwo+ICsJc2VsZWN0 IFY0TDJfTUVNMk1FTV9ERVYKPiArCXNlbGVjdCBWSURFT19NRURJQVRFS19WUFUKPiArCXNlbGVj dCBNVEtfQ01EUQo+ICsJc2VsZWN0IE1US19TQ1AKPiArCWRlZmF1bHQgbgo+ICsJaGVscAo+ICsJ ICAgIEl0IGlzIGEgdjRsMiBkcml2ZXIgYW5kIHByZXNlbnQgaW4gTWVkaWF0ZWsgTVQ4MTgzIFNv Qy4KPiArCSAgICBUaGUgZHJpdmVyIHN1cHBvcnRzIGZvciBzY2FsaW5nIGFuZCBjb2xvciBzcGFj ZSBjb252ZXJzaW9uLgo+ICsKPiArCSAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9k dWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKPiArCSAgICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbXRr LW1kcDMuCj4gKwo+ICAgY29uZmlnIFZJREVPX01FRElBVEVLX1ZDT0RFQwo+ICAgCXRyaXN0YXRl ICJNZWRpYXRlayBWaWRlbyBDb2RlYyBkcml2ZXIiCj4gICAJZGVwZW5kcyBvbiBNVEtfSU9NTVUg fHwgQ09NUElMRV9URVNUCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vTWFr ZWZpbGUgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL01ha2VmaWxlCj4gaW5kZXggYTE0ODU1M2Jh YmZjLi4yOWJkZmE5MmEwOWEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9N YWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vTWFrZWZpbGUKPiBAQCAtNzgs NiArNzgsOCBAQCBvYmotJChDT05GSUdfVklERU9fTUVESUFURUtfVkNPREVDKQkrPSBtdGstdmNv ZGVjLwo+ICAgCj4gICBvYmotJChDT05GSUdfVklERU9fTUVESUFURUtfTURQKQkrPSBtdGstbWRw Lwo+ICAgCj4gK29iai0kKENPTkZJR19WSURFT19NRURJQVRFS19NRFAzKQkrPSBtdGstbWRwMy8K PiArCj4gICBvYmotJChDT05GSUdfVklERU9fTUVESUFURUtfSlBFRykJKz0gbXRrLWpwZWcvCj4g ICAKPiAgIG9iai0kKENPTkZJR19WSURFT19RQ09NX0NBTVNTKQkJKz0gcWNvbS9jYW1zcy8KPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstbWRwMy9NYWtlZmlsZSBiL2Ry aXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLW1kcDMvTWFrZWZpbGUKPiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uODc3MmY1YWMyODY3Cj4gLS0tIC9kZXYvbnVsbAo+ ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLW1kcDMvTWFrZWZpbGUKPiBAQCAtMCww ICsxLDYgQEAKPiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Cj4gK210 ay1tZHAzLXkgKz0gbXRrLW1kcDMtY29yZS5vIG10ay1tZHAzLXZwdS5vIG10ay1tZHAzLXJlZ3Mu bwo+ICttdGstbWRwMy15ICs9IG10ay1tZHAzLW0ybS5vCj4gK210ay1tZHAzLXkgKz0gbXRrLW1k cDMtY29tcC5vIG10ay1tZHAzLWNtZHEubwo+ICsKPiArb2JqLSQoQ09ORklHX1ZJREVPX01FRElB VEVLX01EUDMpICs9IG10ay1tZHAzLm8KPiBcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstbWRwMy9tZHBfcmVnX2Njb3Jy LmggYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1tZHAzL21kcF9yZWdfY2NvcnIuaAo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi40NjgwNGQ5N2RiMWYKPiAt LS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstbWRwMy9tZHBf cmVnX2Njb3JyLmgKPiBAQCAtMCwwICsxLDE5IEBACj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wLW9ubHkgKi8KPiArLyoKPiArICogQ29weXJpZ2h0IChjKSAyMDIxIE1lZGlh VGVrIEluYy4KPiArICogQXV0aG9yOiBQaW5nLUhzdW4gV3UgPHBpbmctaHN1bi53dUBtZWRpYXRl ay5jb20+Cj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfX01EUF9SRUdfQ0NPUlJfSF9fCj4gKyNkZWZp bmUgX19NRFBfUkVHX0NDT1JSX0hfXwo+ICsKPiArI2RlZmluZSBNRFBfQ0NPUlJfRU4gICAgICAg ICAgICAgICAgMHgwMDAKPiArI2RlZmluZSBNRFBfQ0NPUlJfQ0ZHICAgICAgICAgICAgICAgMHgw MjAKPiArI2RlZmluZSBNRFBfQ0NPUlJfU0laRSAgICAgICAgICAgICAgMHgwMzAKPiArCj4gKy8q IE1BU0sgKi8KPiArI2RlZmluZSBNRFBfQ0NPUlJfRU5fTUFTSyAgICAgICAgICAgMHgwMDAwMDAw MQo+ICsjZGVmaW5lIE1EUF9DQ09SUl9DRkdfTUFTSyAgICAgICAgICAweDcwMDAxMzE3Cj4gKyNk ZWZpbmUgTURQX0NDT1JSX1NJWkVfTUFTSyAgICAgICAgIDB4MWZmZjFmZmYKPiArCj4gKyNlbmRp ZiAgLy8gX19NRFBfUkVHX0NDT1JSX0hfXwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3Bs YXRmb3JtL210ay1tZHAzL21kcF9yZWdfaXNwLmggYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210 ay1tZHAzL21kcF9yZWdfaXNwLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAw MDAwMDAwMC4uNTMzNGNkOTMyYjU1Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvbWVk aWEvcGxhdGZvcm0vbXRrLW1kcDMvbWRwX3JlZ19pc3AuaAo+IEBAIC0wLDAgKzEsMjcgQEAKPiAr LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwo+ICsvKgo+ICsgKiBD b3B5cmlnaHQgKGMpIDIwMjEgTWVkaWFUZWsgSW5jLgo+ICsgKiBBdXRob3I6IFBpbmctSHN1biBX dSA8cGluZy1oc3VuLnd1QG1lZGlhdGVrLmNvbT4KPiArICovCj4gKwo+ICsjaWZuZGVmIF9fSVNQ X1JFR19IX18KPiArI2RlZmluZSBfX0lTUF9SRUdfSF9fCj4gKwo+ICtlbnVtIGlzcF9kaXBfY3Eg ewo+ICsJSVNQX0RSVl9ESVBfQ1FfVEhSRTAgPSAwLAo+ICsJSVNQX0RSVl9ESVBfQ1FfVEhSRTEs Cj4gKwlJU1BfRFJWX0RJUF9DUV9USFJFMiwKPiArCUlTUF9EUlZfRElQX0NRX1RIUkUzLAo+ICsJ SVNQX0RSVl9ESVBfQ1FfVEhSRTQsCj4gKwlJU1BfRFJWX0RJUF9DUV9USFJFNSwKPiArCUlTUF9E UlZfRElQX0NRX1RIUkU2LAo+ICsJSVNQX0RSVl9ESVBfQ1FfVEhSRTcsCj4gKwlJU1BfRFJWX0RJ UF9DUV9USFJFOCwKPiArCUlTUF9EUlZfRElQX0NRX1RIUkU5LAo+ICsJSVNQX0RSVl9ESVBfQ1Ff VEhSRTEwLAo+ICsJSVNQX0RSVl9ESVBfQ1FfVEhSRTExLAo+ICsJSVNQX0RSVl9ESVBfQ1FfTlVN LAo+ICsJSVNQX0RSVl9ESVBfQ1FfTk9ORSwKPiArfTsKPiArCj4gKyNlbmRpZiAgLy8gX19JU1Bf UkVHX0hfXwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1tZHAzL21k cF9yZWdfcmRtYS5oIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstbWRwMy9tZHBfcmVnX3Jk bWEuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi41OWQ5YWFl NDBiZTYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGst bWRwMy9tZHBfcmVnX3JkbWEuaAo+IEBAIC0wLDAgKzEsNjUgQEAKPiArLyogU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIw MjEgTWVkaWFUZWsgSW5jLgo+ICsgKiBBdXRob3I6IFBpbmctSHN1biBXdSA8cGluZy1oc3VuLnd1 QG1lZGlhdGVrLmNvbT4KPiArICovCj4gKwo+ICsjaWZuZGVmIF9fTURQX1JFR19SRE1BX0hfXwo+ ICsjZGVmaW5lIF9fTURQX1JFR19SRE1BX0hfXwo+ICsKPiArI2RlZmluZSBNRFBfUkRNQV9FTiAg ICAgICAgICAgICAgICAgICAgIDB4MDAwCj4gKyNkZWZpbmUgTURQX1JETUFfUkVTRVQgICAgICAg ICAgICAgICAgICAweDAwOAo+ICsjZGVmaW5lIE1EUF9SRE1BX0NPTiAgICAgICAgICAgICAgICAg ICAgMHgwMjAKPiArI2RlZmluZSBNRFBfUkRNQV9HTUNJRl9DT04gICAgICAgICAgICAgIDB4MDI4 Cj4gKyNkZWZpbmUgTURQX1JETUFfU1JDX0NPTiAgICAgICAgICAgICAgICAweDAzMAo+ICsjZGVm aW5lIE1EUF9SRE1BX01GX0JLR0RfU0laRV9JTl9CWVRFICAgMHgwNjAKPiArI2RlZmluZSBNRFBf UkRNQV9NRl9CS0dEX1NJWkVfSU5fUFhMICAgIDB4MDY4Cj4gKyNkZWZpbmUgTURQX1JETUFfTUZf U1JDX1NJWkUgICAgICAgICAgICAweDA3MAo+ICsjZGVmaW5lIE1EUF9SRE1BX01GX0NMSVBfU0la RSAgICAgICAgICAgMHgwNzgKPiArI2RlZmluZSBNRFBfUkRNQV9NRl9PRkZTRVRfMSAgICAgICAg ICAgIDB4MDgwCj4gKyNkZWZpbmUgTURQX1JETUFfU0ZfQktHRF9TSVpFX0lOX0JZVEUgICAweDA5 MAo+ICsjZGVmaW5lIE1EUF9SRE1BX1NSQ19FTkRfMCAgICAgICAgICAgICAgMHgxMDAKPiArI2Rl ZmluZSBNRFBfUkRNQV9TUkNfRU5EXzEgICAgICAgICAgICAgIDB4MTA4Cj4gKyNkZWZpbmUgTURQ X1JETUFfU1JDX0VORF8yICAgICAgICAgICAgICAweDExMAo+ICsjZGVmaW5lIE1EUF9SRE1BX1NS Q19PRkZTRVRfMCAgICAgICAgICAgMHgxMTgKPiArI2RlZmluZSBNRFBfUkRNQV9TUkNfT0ZGU0VU XzEgICAgICAgICAgIDB4MTIwCj4gKyNkZWZpbmUgTURQX1JETUFfU1JDX09GRlNFVF8yICAgICAg ICAgICAweDEyOAo+ICsjZGVmaW5lIE1EUF9SRE1BX1NSQ19PRkZTRVRfMF9QICAgICAgICAgMHgx NDgKPiArI2RlZmluZSBNRFBfUkRNQV9UUkFOU0ZPUk1fMCAgICAgICAgICAgIDB4MjAwCj4gKyNk ZWZpbmUgTURQX1JETUFfUkVTVl9EVU1NWV8wICAgICAgICAgICAweDJhMAo+ICsjZGVmaW5lIE1E UF9SRE1BX01PTl9TVEFfMSAgICAgICAgICAgICAgMHg0MDgKPiArI2RlZmluZSBNRFBfUkRNQV9T UkNfQkFTRV8wICAgICAgICAgICAgIDB4ZjAwCj4gKyNkZWZpbmUgTURQX1JETUFfU1JDX0JBU0Vf MSAgICAgICAgICAgICAweGYwOAo+ICsjZGVmaW5lIE1EUF9SRE1BX1NSQ19CQVNFXzIgICAgICAg ICAgICAgMHhmMTAKPiArI2RlZmluZSBNRFBfUkRNQV9VRk9fREVDX0xFTkdUSF9CQVNFX1kgIDB4 ZjIwCj4gKyNkZWZpbmUgTURQX1JETUFfVUZPX0RFQ19MRU5HVEhfQkFTRV9DICAweGYyOAo+ICsK PiArLyogTUFTSyAqLwo+ICsjZGVmaW5lIE1EUF9SRE1BX0VOX01BU0sgICAgICAgICAgICAgICAg ICAgIDB4MDAwMDAwMDEKPiArI2RlZmluZSBNRFBfUkRNQV9SRVNFVF9NQVNLICAgICAgICAgICAg ICAgICAweDAwMDAwMDAxCj4gKyNkZWZpbmUgTURQX1JETUFfQ09OX01BU0sgICAgICAgICAgICAg ICAgICAgMHgwMDAwMTExMAo+ICsjZGVmaW5lIE1EUF9SRE1BX0dNQ0lGX0NPTl9NQVNLICAgICAg ICAgICAgIDB4ZmZmYjM3NzEKPiArI2RlZmluZSBNRFBfUkRNQV9TUkNfQ09OX01BU0sgICAgICAg ICAgICAgICAweGYzZmZmZmZmCj4gKyNkZWZpbmUgTURQX1JETUFfTUZfQktHRF9TSVpFX0lOX0JZ VEVfTUFTSyAgMHgwMDFmZmZmZgo+ICsjZGVmaW5lIE1EUF9SRE1BX01GX0JLR0RfU0laRV9JTl9Q WExfTUFTSyAgIDB4MDAxZmZmZmYKPiArI2RlZmluZSBNRFBfUkRNQV9NRl9TUkNfU0laRV9NQVNL ICAgICAgICAgICAweDFmZmYxZmZmCj4gKyNkZWZpbmUgTURQX1JETUFfTUZfQ0xJUF9TSVpFX01B U0sgICAgICAgICAgMHgxZmZmMWZmZgo+ICsjZGVmaW5lIE1EUF9SRE1BX01GX09GRlNFVF8xX01B U0sgICAgICAgICAgIDB4MDAzZjAwMWYKPiArI2RlZmluZSBNRFBfUkRNQV9TRl9CS0dEX1NJWkVf SU5fQllURV9NQVNLICAweDAwMWZmZmZmCj4gKyNkZWZpbmUgTURQX1JETUFfU1JDX0VORF8wX01B U0sgICAgICAgICAgICAgMHhmZmZmZmZmZgo+ICsjZGVmaW5lIE1EUF9SRE1BX1NSQ19FTkRfMV9N QVNLICAgICAgICAgICAgIDB4ZmZmZmZmZmYKPiArI2RlZmluZSBNRFBfUkRNQV9TUkNfRU5EXzJf TUFTSyAgICAgICAgICAgICAweGZmZmZmZmZmCj4gKyNkZWZpbmUgTURQX1JETUFfU1JDX09GRlNF VF8wX01BU0sgICAgICAgICAgMHhmZmZmZmZmZgo+ICsjZGVmaW5lIE1EUF9SRE1BX1NSQ19PRkZT RVRfMV9NQVNLICAgICAgICAgIDB4ZmZmZmZmZmYKPiArI2RlZmluZSBNRFBfUkRNQV9TUkNfT0ZG U0VUXzJfTUFTSyAgICAgICAgICAweGZmZmZmZmZmCj4gKyNkZWZpbmUgTURQX1JETUFfU1JDX09G RlNFVF8wX1BfTUFTSyAgICAgICAgMHhmZmZmZmZmZgo+ICsjZGVmaW5lIE1EUF9SRE1BX1RSQU5T Rk9STV8wX01BU0sgICAgICAgICAgIDB4ZmYxMTA3NzcKPiArI2RlZmluZSBNRFBfUkRNQV9SRVNW X0RVTU1ZXzBfTUFTSyAgICAgICAgICAweGZmZmZmZmZmCj4gKyNkZWZpbmUgTURQX1JETUFfTU9O X1NUQV8xX01BU0sgICAgICAgICAgICAgMHhmZmZmZmZmZgo+ICsjZGVmaW5lIE1EUF9SRE1BX1NS Q19CQVNFXzBfTUFTSyAgICAgICAgICAgIDB4ZmZmZmZmZmYKPiArI2RlZmluZSBNRFBfUkRNQV9T UkNfQkFTRV8xX01BU0sgICAgICAgICAgICAweGZmZmZmZmZmCj4gKyNkZWZpbmUgTURQX1JETUFf U1JDX0JBU0VfMl9NQVNLICAgICAgICAgICAgMHhmZmZmZmZmZgo+ICsjZGVmaW5lIE1EUF9SRE1B X1VGT19ERUNfTEVOR1RIX0JBU0VfWV9NQVNLIDB4ZmZmZmZmZmYKPiArI2RlZmluZSBNRFBfUkRN QV9VRk9fREVDX0xFTkdUSF9CQVNFX0NfTUFTSyAweGZmZmZmZmZmCj4gKwo+ICsjZW5kaWYgIC8v IF9fTURQX1JFR19SRE1BX0hfXwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3Jt L210ay1tZHAzL21kcF9yZWdfcnN6LmggYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1tZHAz L21kcF9yZWdfcnN6LmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAw MC4uMDUxZmRiMDIwNzQxCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxh dGZvcm0vbXRrLW1kcDMvbWRwX3JlZ19yc3ouaAo+IEBAIC0wLDAgKzEsMzkgQEAKPiArLyogU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwo+ICsvKgo+ICsgKiBDb3B5cmln aHQgKGMpIDIwMjEgTWVkaWFUZWsgSW5jLgo+ICsgKiBBdXRob3I6IFBpbmctSHN1biBXdSA8cGlu Zy1oc3VuLnd1QG1lZGlhdGVrLmNvbT4KPiArICovCj4gKwo+ICsjaWZuZGVmIF9fTURQX1JFR19S U1pfSF9fCj4gKyNkZWZpbmUgX19NRFBfUkVHX1JTWl9IX18KPiArCj4gKyNkZWZpbmUgUFJaX0VO QUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMAo+ICsjZGVm aW5lIFBSWl9DT05UUk9MXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw MDQKPiArI2RlZmluZSBQUlpfQ09OVFJPTF8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDB4MDA4Cj4gKyNkZWZpbmUgUFJaX0lOUFVUX0lNQUdFICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAweDAxMAo+ICsjZGVmaW5lIFBSWl9PVVRQVVRfSU1BR0UgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTQKPiArI2RlZmluZSBQUlpfSE9SSVpPTlRB TF9DT0VGRl9TVEVQICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDE4Cj4gKyNkZWZpbmUgUFJa X1ZFUlRJQ0FMX0NPRUZGX1NURVAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxYwo+ICsj ZGVmaW5lIFBSWl9MVU1BX0hPUklaT05UQUxfSU5URUdFUl9PRkZTRVQgICAgICAgICAgICAgICAg MHgwMjAKPiArI2RlZmluZSBQUlpfTFVNQV9IT1JJWk9OVEFMX1NVQlBJWEVMX09GRlNFVCAgICAg ICAgICAgICAgIDB4MDI0Cj4gKyNkZWZpbmUgUFJaX0xVTUFfVkVSVElDQUxfSU5URUdFUl9PRkZT RVQgICAgICAgICAgICAgICAgICAweDAyOAo+ICsjZGVmaW5lIFBSWl9MVU1BX1ZFUlRJQ0FMX1NV QlBJWEVMX09GRlNFVCAgICAgICAgICAgICAgICAgMHgwMmMKPiArI2RlZmluZSBQUlpfQ0hST01B X0hPUklaT05UQUxfSU5URUdFUl9PRkZTRVQgICAgICAgICAgICAgIDB4MDMwCj4gKyNkZWZpbmUg UFJaX0NIUk9NQV9IT1JJWk9OVEFMX1NVQlBJWEVMX09GRlNFVCAgICAgICAgICAgICAweDAzNAo+ ICsKPiArLyogTUFTSyAqLwo+ICsjZGVmaW5lIFBSWl9FTkFCTEVfTUFTSyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMQo+ICsjZGVmaW5lIFBSWl9DT05UUk9MXzFf TUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZmZmZmZmMwo+ICsjZGVmaW5l IFBSWl9DT05UUk9MXzJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwZmZm ZmFmZgo+ICsjZGVmaW5lIFBSWl9JTlBVVF9JTUFHRV9NQVNLICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMHhmZmZmZmZmZgo+ICsjZGVmaW5lIFBSWl9PVVRQVVRfSU1BR0VfTUFTSyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMHhmZmZmZmZmZgo+ICsjZGVmaW5lIFBSWl9IT1JJWk9O VEFMX0NPRUZGX1NURVBfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDdmZmZmZgo+ICsjZGVm aW5lIFBSWl9WRVJUSUNBTF9DT0VGRl9TVEVQX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgw MDdmZmZmZgo+ICsjZGVmaW5lIFBSWl9MVU1BX0hPUklaT05UQUxfSU5URUdFUl9PRkZTRVRfTUFT SyAgICAgICAgICAgMHgwMDAwZmZmZgo+ICsjZGVmaW5lIFBSWl9MVU1BX0hPUklaT05UQUxfU1VC UElYRUxfT0ZGU0VUX01BU0sgICAgICAgICAgMHgwMDFmZmZmZgo+ICsjZGVmaW5lIFBSWl9MVU1B X1ZFUlRJQ0FMX0lOVEVHRVJfT0ZGU0VUX01BU0sgICAgICAgICAgICAgMHgwMDAwZmZmZgo+ICsj ZGVmaW5lIFBSWl9MVU1BX1ZFUlRJQ0FMX1NVQlBJWEVMX09GRlNFVF9NQVNLICAgICAgICAgICAg MHgwMDFmZmZmZgo+ICsjZGVmaW5lIFBSWl9DSFJPTUFfSE9SSVpPTlRBTF9JTlRFR0VSX09GRlNF VF9NQVNLICAgICAgICAgMHgwMDAwZmZmZgo+ICsjZGVmaW5lIFBSWl9DSFJPTUFfSE9SSVpPTlRB TF9TVUJQSVhFTF9PRkZTRVRfTUFTSyAgICAgICAgMHgwMDFmZmZmZgo+ICsKPiArI2VuZGlmIC8v IF9fTURQX1JFR19SU1pfSF9fCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0v bXRrLW1kcDMvbWRwX3JlZ193ZG1hLmggYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1tZHAz L21kcF9yZWdfd2RtYS5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAw MDAuLjRkYzU0MGYxZmI1Zgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL21lZGlhL3Bs YXRmb3JtL210ay1tZHAzL21kcF9yZWdfd2RtYS5oCj4gQEAgLTAsMCArMSw0NyBAQAo+ICsvKiBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCj4gKy8qCj4gKyAqIENvcHly aWdodCAoYykgMjAyMSBNZWRpYVRlayBJbmMuCj4gKyAqIEF1dGhvcjogUGluZy1Ic3VuIFd1IDxw aW5nLWhzdW4ud3VAbWVkaWF0ZWsuY29tPgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX19NRFBfUkVH X1dETUFfSF9fCj4gKyNkZWZpbmUgX19NRFBfUkVHX1dETUFfSF9fCj4gKwo+ICsjZGVmaW5lIFdE TUFfRU4gICAgICAgICAgICAgICAgIDB4MDA4Cj4gKyNkZWZpbmUgV0RNQV9SU1QgICAgICAgICAg ICAgICAgMHgwMGMKPiArI2RlZmluZSBXRE1BX0NGRyAgICAgICAgICAgICAgICAweDAxNAo+ICsj ZGVmaW5lIFdETUFfU1JDX1NJWkUgICAgICAgICAgIDB4MDE4Cj4gKyNkZWZpbmUgV0RNQV9DTElQ X1NJWkUgICAgICAgICAgMHgwMWMKPiArI2RlZmluZSBXRE1BX0NMSVBfQ09PUkQgICAgICAgICAw eDAyMAo+ICsjZGVmaW5lIFdETUFfRFNUX1dfSU5fQllURSAgICAgIDB4MDI4Cj4gKyNkZWZpbmUg V0RNQV9BTFBIQSAgICAgICAgICAgICAgMHgwMmMKPiArI2RlZmluZSBXRE1BX0JVRl9DT04yICAg ICAgICAgICAweDAzYwo+ICsjZGVmaW5lIFdETUFfRFNUX1VWX1BJVENIICAgICAgIDB4MDc4Cj4g KyNkZWZpbmUgV0RNQV9EU1RfQUREUl9PRkZTRVQgICAgMHgwODAKPiArI2RlZmluZSBXRE1BX0RT VF9VX0FERFJfT0ZGU0VUICAweDA4NAo+ICsjZGVmaW5lIFdETUFfRFNUX1ZfQUREUl9PRkZTRVQg IDB4MDg4Cj4gKyNkZWZpbmUgV0RNQV9GTE9XX0NUUkxfREJHICAgICAgMHgwYTAKPiArI2RlZmlu ZSBXRE1BX0RTVF9BRERSICAgICAgICAgICAweGYwMAo+ICsjZGVmaW5lIFdETUFfRFNUX1VfQURE UiAgICAgICAgIDB4ZjA0Cj4gKyNkZWZpbmUgV0RNQV9EU1RfVl9BRERSICAgICAgICAgMHhmMDgK PiArCj4gKy8qIE1BU0sgKi8KPiArI2RlZmluZSBXRE1BX0VOX01BU0sgICAgICAgICAgICAgICAg MHgwMDAwMDAwMQo+ICsjZGVmaW5lIFdETUFfUlNUX01BU0sgICAgICAgICAgICAgICAweDAwMDAw MDAxCj4gKyNkZWZpbmUgV0RNQV9DRkdfTUFTSyAgICAgICAgICAgICAgIDB4ZmYwM2JmZjAKPiAr I2RlZmluZSBXRE1BX1NSQ19TSVpFX01BU0sgICAgICAgICAgMHgzZmZmM2ZmZgo+ICsjZGVmaW5l IFdETUFfQ0xJUF9TSVpFX01BU0sgICAgICAgICAweDNmZmYzZmZmCj4gKyNkZWZpbmUgV0RNQV9D TElQX0NPT1JEX01BU0sgICAgICAgIDB4M2ZmZjNmZmYKPiArI2RlZmluZSBXRE1BX0RTVF9XX0lO X0JZVEVfTUFTSyAgICAgMHgwMDAwZmZmZgo+ICsjZGVmaW5lIFdETUFfQUxQSEFfTUFTSyAgICAg ICAgICAgICAweDgwMDAwMGZmCj4gKyNkZWZpbmUgV0RNQV9CVUZfQ09OMl9NQVNLICAgICAgICAg IDB4ZmZmZmZmZmYKPiArI2RlZmluZSBXRE1BX0RTVF9VVl9QSVRDSF9NQVNLICAgICAgMHgwMDAw ZmZmZgo+ICsjZGVmaW5lIFdETUFfRFNUX0FERFJfT0ZGU0VUX01BU0sgICAweDBmZmZmZmZmCj4g KyNkZWZpbmUgV0RNQV9EU1RfVV9BRERSX09GRlNFVF9NQVNLIDB4MGZmZmZmZmYKPiArI2RlZmlu ZSBXRE1BX0RTVF9WX0FERFJfT0ZGU0VUX01BU0sgMHgwZmZmZmZmZgo+ICsjZGVmaW5lIFdETUFf RkxPV19DVFJMX0RCR19NQVNLICAgICAweDAwMDBmM2ZmCj4gKyNkZWZpbmUgV0RNQV9EU1RfQURE Ul9NQVNLICAgICAgICAgIDB4ZmZmZmZmZmYKPiArI2RlZmluZSBXRE1BX0RTVF9VX0FERFJfTUFT SyAgICAgICAgMHhmZmZmZmZmZgo+ICsjZGVmaW5lIFdETUFfRFNUX1ZfQUREUl9NQVNLICAgICAg ICAweGZmZmZmZmZmCj4gKwo+ICsjZW5kaWYgIC8vIF9fTURQX1JFR19XRE1BX0hfXwo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1tZHAzL21kcF9yZWdfd3JvdC5oIGIv ZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstbWRwMy9tZHBfcmVnX3dyb3QuaAo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi4zOWI4Nzg1Zjg5ZWIKPiAtLS0gL2Rl di9udWxsCj4gKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstbWRwMy9tZHBfcmVnX3dy b3QuaAo+IEBAIC0wLDAgKzEsNTUgQEAKPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjAtb25seSAqLwo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjEgTWVkaWFUZWsgSW5j Lgo+ICsgKiBBdXRob3I6IFBpbmctSHN1biBXdSA8cGluZy1oc3VuLnd1QG1lZGlhdGVrLmNvbT4K PiArICovCj4gKwo+ICsjaWZuZGVmIF9fTURQX1JFR19XUk9UX0hfXwo+ICsjZGVmaW5lIF9fTURQ X1JFR19XUk9UX0hfXwo+ICsKPiArI2RlZmluZSBWSURPX0NUUkwgICAgICAgICAgICAgICAgICAg MHgwMDAKPiArI2RlZmluZSBWSURPX01BSU5fQlVGX1NJWkUgICAgICAgICAgMHgwMDgKPiArI2Rl ZmluZSBWSURPX1NPRlRfUlNUICAgICAgICAgICAgICAgMHgwMTAKPiArI2RlZmluZSBWSURPX1NP RlRfUlNUX1NUQVQgICAgICAgICAgMHgwMTQKPiArI2RlZmluZSBWSURPX0NST1BfT0ZTVCAgICAg ICAgICAgICAgMHgwMjAKPiArI2RlZmluZSBWSURPX1RBUl9TSVpFICAgICAgICAgICAgICAgMHgw MjQKPiArI2RlZmluZSBWSURPX09GU1RfQUREUiAgICAgICAgICAgICAgMHgwMmMKPiArI2RlZmlu ZSBWSURPX1NUUklERSAgICAgICAgICAgICAgICAgMHgwMzAKPiArI2RlZmluZSBWSURPX09GU1Rf QUREUl9DICAgICAgICAgICAgMHgwMzgKPiArI2RlZmluZSBWSURPX1NUUklERV9DICAgICAgICAg ICAgICAgMHgwM2MKPiArI2RlZmluZSBWSURPX0RJVEhFUiAgICAgICAgICAgICAgICAgMHgwNTQK PiArI2RlZmluZSBWSURPX1NUUklERV9WICAgICAgICAgICAgICAgMHgwNmMKPiArI2RlZmluZSBW SURPX09GU1RfQUREUl9WICAgICAgICAgICAgMHgwNjgKPiArI2RlZmluZSBWSURPX1JTVl8xICAg ICAgICAgICAgICAgICAgMHgwNzAKPiArI2RlZmluZSBWSURPX0lOX1NJWkUgICAgICAgICAgICAg ICAgMHgwNzgKPiArI2RlZmluZSBWSURPX1JPVF9FTiAgICAgICAgICAgICAgICAgMHgwN2MKPiAr I2RlZmluZSBWSURPX0ZJRk9fVEVTVCAgICAgICAgICAgICAgMHgwODAKPiArI2RlZmluZSBWSURP X01BVF9DVFJMICAgICAgICAgICAgICAgMHgwODQKPiArI2RlZmluZSBWSURPX0JBU0VfQUREUiAg ICAgICAgICAgICAgMHhmMDAKPiArI2RlZmluZSBWSURPX0JBU0VfQUREUl9DICAgICAgICAgICAg MHhmMDQKPiArI2RlZmluZSBWSURPX0JBU0VfQUREUl9WICAgICAgICAgICAgMHhmMDgKPiArCj4g Ky8qIE1BU0sgKi8KPiArI2RlZmluZSBWSURPX0NUUkxfTUFTSyAgICAgICAgICAgICAgICAgIDB4 ZjUzMDcxMWYKPiArI2RlZmluZSBWSURPX01BSU5fQlVGX1NJWkVfTUFTSyAgICAgICAgIDB4MWZm ZjdmNzcKPiArI2RlZmluZSBWSURPX1NPRlRfUlNUX01BU0sgICAgICAgICAgICAgIDB4MDAwMDAw MDEKPiArI2RlZmluZSBWSURPX1NPRlRfUlNUX1NUQVRfTUFTSyAgICAgICAgIDB4MDAwMDAwMDEK PiArI2RlZmluZSBWSURPX1RBUl9TSVpFX01BU0sgICAgICAgICAgICAgIDB4MWZmZjFmZmYKPiAr I2RlZmluZSBWSURPX0NST1BfT0ZTVF9NQVNLICAgICAgICAgICAgIDB4MWZmZjFmZmYKPiArI2Rl ZmluZSBWSURPX09GU1RfQUREUl9NQVNLICAgICAgICAgICAgIDB4MGZmZmZmZmYKPiArI2RlZmlu ZSBWSURPX1NUUklERV9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMGZmZmYKPiArI2RlZmluZSBW SURPX09GU1RfQUREUl9DX01BU0sgICAgICAgICAgIDB4MGZmZmZmZmYKPiArI2RlZmluZSBWSURP X1NUUklERV9DX01BU0sgICAgICAgICAgICAgIDB4MDAwMGZmZmYKPiArI2RlZmluZSBWSURPX0RJ VEhFUl9NQVNLICAgICAgICAgICAgICAgIDB4ZmYwMDAwMDEKPiArI2RlZmluZSBWSURPX1NUUklE RV9WX01BU0sgICAgICAgICAgICAgIDB4MDAwMGZmZmYKPiArI2RlZmluZSBWSURPX09GU1RfQURE Ul9WX01BU0sgICAgICAgICAgIDB4MGZmZmZmZmYKPiArI2RlZmluZSBWSURPX1JTVl8xX01BU0sg ICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmYKPiArI2RlZmluZSBWSURPX0lOX1NJWkVfTUFTSyAg ICAgICAgICAgICAgIDB4MWZmZjFmZmYKPiArI2RlZmluZSBWSURPX1JPVF9FTl9NQVNLICAgICAg ICAgICAgICAgIDB4MDAwMDAwMDEKPiArI2RlZmluZSBWSURPX0ZJRk9fVEVTVF9NQVNLICAgICAg ICAgICAgIDB4MDAwMDBmZmYKPiArI2RlZmluZSBWSURPX01BVF9DVFJMX01BU0sgICAgICAgICAg ICAgIDB4MDAwMDAwZjMKPiArI2RlZmluZSBWSURPX0JBU0VfQUREUl9NQVNLICAgICAgICAgICAg IDB4ZmZmZmZmZmYKPiArI2RlZmluZSBWSURPX0JBU0VfQUREUl9DX01BU0sgICAgICAgICAgIDB4 ZmZmZmZmZmYKPiArI2RlZmluZSBWSURPX0JBU0VfQUREUl9WX01BU0sgICAgICAgICAgIDB4ZmZm ZmZmZmYKPiArCj4gKyNlbmRpZiAgLy8gX19NRFBfUkVHX1dST1RfSF9fCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLW1kcDMvbXRrLWltZy1pcGkuaCBiL2RyaXZlcnMv bWVkaWEvcGxhdGZvcm0vbXRrLW1kcDMvbXRrLWltZy1pcGkuaAo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5mODU2MGRhZDg3ZGEKPiAtLS0gL2Rldi9udWxsCj4g KysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstbWRwMy9tdGstaW1nLWlwaS5oCj4gQEAg LTAsMCArMSwyODAgQEAKPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25s eSAqLwo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjEgTWVkaWFUZWsgSW5jLgo+ICsgKiBB dXRob3I6IEhvbG1lcyBDaGlvdSA8aG9sbWVzLmNoaW91QG1lZGlhdGVrLmNvbT4KPiArICogICAg ICAgICBQaW5nLUhzdW4gV3UgPHBpbmctaHN1bi53dUBtZWRpYXRlay5jb20+Cj4gKyAqLwo+ICsK PiArI2lmbmRlZiBfX01US19JTUdfSVBJX0hfXwo+ICsjZGVmaW5lIF9fTVRLX0lNR19JUElfSF9f Cj4gKwo+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KPiArCj4gKy8qIElTUC1NRFAgZ2VuZXJp YyBpbnB1dCBpbmZvcm1hdGlvbiAqLwo+ICsKPiArI2RlZmluZSBJTUdfTUFYX0hXX0lOUFVUUwkz Cj4gKwo+ICsjZGVmaW5lIElNR19NQVhfSFdfT1VUUFVUUwk0Cj4gKwo+ICsjZGVmaW5lIElNR19N QVhfUExBTkVTCQkzCj4gKwo+ICsjZGVmaW5lIElNR19JUElfSU5JVCAgICAxCj4gKyNkZWZpbmUg SU1HX0lQSV9ERUlOSVQgIDIKPiArI2RlZmluZSBJTUdfSVBJX0ZSQU1FICAgMwo+ICsjZGVmaW5l IElNR19JUElfREVCVUcgICA0Cj4gKwo+ICtzdHJ1Y3QgaW1nX2FkZHIgewo+ICsJdTY0IHZhOyAv KiBVc2VkIGZvciBMaW51eCBPUyBhY2Nlc3MgKi8KPiArCXUzMiBwYTsgLyogVXNlZCBmb3IgQ000 IGFjY2VzcyAqLwo+ICsJdTMyIGlvdmE7IC8qIFVzZWQgZm9yIElPTU1VIEhXIGFjY2VzcyAqLwo+ ICt9IF9fcGFja2VkOwo+ICsKPiArc3RydWN0IHR1bmluZ19hZGRyIHsKPiArCXU2NAlwcmVzZW50 Owo+ICsJdTMyCXBhOwkvKiBVc2VkIGZvciBDTTQgYWNjZXNzICovCj4gKwl1MzIJaW92YTsJLyog VXNlZCBmb3IgSU9NTVUgSFcgYWNjZXNzICovCj4gK30gX19wYWNrZWQ7Cj4gKwo+ICtzdHJ1Y3Qg aW1nX3N3X2FkZHIgewo+ICsJdTY0IHZhOyAvKiBVc2VkIGZvciBBUE1DVSBhY2Nlc3MgKi8KPiAr CXUzMiBwYTsgLyogVXNlZCBmb3IgQ000IGFjY2VzcyAqLwo+ICt9IF9fcGFja2VkOwo+ICsKPiAr c3RydWN0IGltZ19wbGFuZV9mb3JtYXQgewo+ICsJdTMyIHNpemU7Cj4gKwl1MTYgc3RyaWRlOwo+ ICt9IF9fcGFja2VkOwo+ICsKPiArc3RydWN0IGltZ19waXhfZm9ybWF0IHsKPiArCXUxNiB3aWR0 aDsKPiArCXUxNiBoZWlnaHQ7Cj4gKwl1MzIgY29sb3Jmb3JtYXQ7IC8qIGVudW0gbWRwX2NvbG9y ICovCj4gKwl1MTYgeWNiY3JfcHJvZjsgLyogZW51bSBtZHBfeWNiY3JfcHJvZmlsZSAqLwo+ICsJ c3RydWN0IGltZ19wbGFuZV9mb3JtYXQgcGxhbmVfZm10W0lNR19NQVhfUExBTkVTXTsKPiArfSBf X3BhY2tlZDsKPiArCj4gK3N0cnVjdCBpbWdfaW1hZ2VfYnVmZmVyIHsKPiArCXN0cnVjdCBpbWdf cGl4X2Zvcm1hdCBmb3JtYXQ7Cj4gKwl1MzIgaW92YVtJTUdfTUFYX1BMQU5FU107Cj4gKwkvKiBl bnVtIG1kcF9idWZmZXJfdXNhZ2UsIEZEIG9yIGFkdmFuY2VkIElTUCB1c2FnZXMgKi8KPiArCXUz MiB1c2FnZTsKPiArfSBfX3BhY2tlZDsKPiArCj4gKyNkZWZpbmUgSU1HX1NVQlBJWEVMX1NISUZU CTIwCj4gKwo+ICtzdHJ1Y3QgaW1nX2Nyb3Agewo+ICsJczE2IGxlZnQ7Cj4gKwlzMTYgdG9wOwo+ ICsJdTE2IHdpZHRoOwo+ICsJdTE2IGhlaWdodDsKPiArCXUzMiBsZWZ0X3N1YnBpeDsKPiArCXUz MiB0b3Bfc3VicGl4Owo+ICsJdTMyIHdpZHRoX3N1YnBpeDsKPiArCXUzMiBoZWlnaHRfc3VicGl4 Owo+ICt9IF9fcGFja2VkOwo+ICsKPiArI2RlZmluZSBJTUdfQ1RSTF9GTEFHX0hGTElQCUJJVCgw KQo+ICsjZGVmaW5lIElNR19DVFJMX0ZMQUdfRElUSEVSCUJJVCgxKQo+ICsjZGVmaW5lIElNR19D VFJMX0ZMQUdfU0hBUlBORVNTCUJJVCg0KQo+ICsjZGVmaW5lIElNR19DVFJMX0ZMQUdfSERSCUJJ VCg1KQo+ICsjZGVmaW5lIElNR19DVFJMX0ZMQUdfRFJFCUJJVCg2KQo+ICsKPiArc3RydWN0IGlt Z19pbnB1dCB7Cj4gKwlzdHJ1Y3QgaW1nX2ltYWdlX2J1ZmZlciBidWZmZXI7Cj4gKwl1MTYgZmxh Z3M7IC8qIEhEUiwgRFJFLCBkaXRoZXIgKi8KPiArfSBfX3BhY2tlZDsKPiArCj4gK3N0cnVjdCBp bWdfb3V0cHV0IHsKPiArCXN0cnVjdCBpbWdfaW1hZ2VfYnVmZmVyIGJ1ZmZlcjsKPiArCXN0cnVj dCBpbWdfY3JvcCBjcm9wOwo+ICsJczE2IHJvdGF0aW9uOwo+ICsJdTE2IGZsYWdzOyAvKiBILWZs aXAsIHNoYXJwbmVzcywgZGl0aGVyICovCj4gK30gX19wYWNrZWQ7Cj4gKwo+ICtzdHJ1Y3QgaW1n X2lwaV9mcmFtZXBhcmFtIHsKPiArCXUzMiBpbmRleDsKPiArCXUzMiBmcmFtZV9ubzsKPiArCXU2 NCB0aW1lc3RhbXA7Cj4gKwl1OCB0eXBlOyAvKiBlbnVtIG1kcF9zdHJlYW1fdHlwZSAqLwo+ICsJ dTggc3RhdGU7Cj4gKwl1OCBudW1faW5wdXRzOwo+ICsJdTggbnVtX291dHB1dHM7Cj4gKwl1NjQg ZHJ2X2RhdGE7Cj4gKwlzdHJ1Y3QgaW1nX2lucHV0IGlucHV0c1tJTUdfTUFYX0hXX0lOUFVUU107 Cj4gKwlzdHJ1Y3QgaW1nX291dHB1dCBvdXRwdXRzW0lNR19NQVhfSFdfT1VUUFVUU107Cj4gKwlz dHJ1Y3QgdHVuaW5nX2FkZHIgdHVuaW5nX2RhdGE7Cj4gKwlzdHJ1Y3QgaW1nX2FkZHIgc3ViZnJt X2RhdGE7Cj4gKwlzdHJ1Y3QgaW1nX3N3X2FkZHIgY29uZmlnX2RhdGE7Cj4gKwlzdHJ1Y3QgaW1n X3N3X2FkZHIgc2VsZl9kYXRhOwo+ICt9IF9fcGFja2VkOwo+ICsKPiArc3RydWN0IGltZ19zd19i dWZmZXIgewo+ICsJdTY0CWhhbmRsZTsJCS8qIFVzZWQgZm9yIEFQTUNVIGFjY2VzcyAqLwo+ICsJ dTMyCXNjcF9hZGRyOwkvKiBVc2VkIGZvciBDTTQgYWNjZXNzICovCj4gK30gX19wYWNrZWQ7Cj4g Kwo+ICtzdHJ1Y3QgaW1nX2lwaV9wYXJhbSB7Cj4gKwl1OCB1c2FnZTsKPiArCXN0cnVjdCBpbWdf c3dfYnVmZmVyIGZybV9wYXJhbTsKPiArfSBfX3BhY2tlZDsKPiArCj4gK3N0cnVjdCBpbWdfZnJh bWVwYXJhbSB7Cj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3RfZW50cnk7Cj4gKwlzdHJ1Y3QgaW1n X2lwaV9mcmFtZXBhcmFtIGZyYW1lcGFyYW07Cj4gK307Cj4gKwo+ICsvKiBJU1AtTURQIGdlbmVy aWMgb3V0cHV0IGluZm9ybWF0aW9uICovCj4gKwo+ICtzdHJ1Y3QgaW1nX2NvbXBfZnJhbWUgewo+ ICsJdTMyIG91dHB1dF9kaXNhYmxlOjE7Cj4gKwl1MzIgYnlwYXNzOjE7Cj4gKwl1MTYgaW5fd2lk dGg7Cj4gKwl1MTYgaW5faGVpZ2h0Owo+ICsJdTE2IG91dF93aWR0aDsKPiArCXUxNiBvdXRfaGVp Z2h0Owo+ICsJc3RydWN0IGltZ19jcm9wIGNyb3A7Cj4gKwl1MTYgaW5fdG90YWxfd2lkdGg7Cj4g Kwl1MTYgb3V0X3RvdGFsX3dpZHRoOwo+ICt9IF9fcGFja2VkOwo+ICsKPiArc3RydWN0IGltZ19y ZWdpb24gewo+ICsJczE2IGxlZnQ7Cj4gKwlzMTYgcmlnaHQ7Cj4gKwlzMTYgdG9wOwo+ICsJczE2 IGJvdHRvbTsKPiArfSBfX3BhY2tlZDsKPiArCj4gK3N0cnVjdCBpbWdfb2Zmc2V0IHsKPiArCXMx NiBsZWZ0Owo+ICsJczE2IHRvcDsKPiArCXUzMiBsZWZ0X3N1YnBpeDsKPiArCXUzMiB0b3Bfc3Vi cGl4Owo+ICt9IF9fcGFja2VkOwo+ICsKPiArc3RydWN0IGltZ19jb21wX3N1YmZybSB7Cj4gKwl1 MzIgdGlsZV9kaXNhYmxlOjE7Cj4gKwlzdHJ1Y3QgaW1nX3JlZ2lvbiBpbjsKPiArCXN0cnVjdCBp bWdfcmVnaW9uIG91dDsKPiArCXN0cnVjdCBpbWdfb2Zmc2V0IGx1bWE7Cj4gKwlzdHJ1Y3QgaW1n X29mZnNldCBjaHJvbWE7Cj4gKwlzMTYgb3V0X3ZlcnRpY2FsOyAvKiBPdXRwdXQgdmVydGljYWwg aW5kZXggKi8KPiArCXMxNiBvdXRfaG9yaXpvbnRhbDsgLyogT3V0cHV0IGhvcml6b250YWwgaW5k ZXggKi8KPiArfSBfX3BhY2tlZDsKPiArCj4gKyNkZWZpbmUgSU1HX01BWF9TVUJGUkFNRVMJMTQK PiArCj4gK3N0cnVjdCBtZHBfcmRtYV9zdWJmcm0gewo+ICsJdTMyIG9mZnNldFtJTUdfTUFYX1BM QU5FU107Cj4gKwl1MzIgb2Zmc2V0XzBfcDsKPiArCXUzMiBzcmM7Cj4gKwl1MzIgY2xpcDsKPiAr CXUzMiBjbGlwX29mc3Q7Cj4gK30gX19wYWNrZWQ7Cj4gKwo+ICtzdHJ1Y3QgbWRwX3JkbWFfZGF0 YSB7Cj4gKwl1MzIgc3JjX2N0cmw7Cj4gKwl1MzIgY29udHJvbDsKPiArCXUzMiBpb3ZhW0lNR19N QVhfUExBTkVTXTsKPiArCXUzMiBpb3ZhX2VuZFtJTUdfTUFYX1BMQU5FU107Cj4gKwl1MzIgbWZf YmtnZDsKPiArCXUzMiBtZl9ia2dkX2luX3B4bDsKPiArCXUzMiBzZl9ia2dkOwo+ICsJdTMyIHVm b19kZWNfeTsKPiArCXUzMiB1Zm9fZGVjX2M7Cj4gKwl1MzIgdHJhbnNmb3JtOwo+ICsJc3RydWN0 IG1kcF9yZG1hX3N1YmZybSBzdWJmcm1zW0lNR19NQVhfU1VCRlJBTUVTXTsKPiArfSBfX3BhY2tl ZDsKPiArCj4gK3N0cnVjdCBtZHBfcnN6X3N1YmZybSB7Cj4gKwl1MzIgY29udHJvbDI7Cj4gKwl1 MzIgc3JjOwo+ICsJdTMyIGNsaXA7Cj4gK30gX19wYWNrZWQ7Cj4gKwo+ICtzdHJ1Y3QgbWRwX3Jz el9kYXRhIHsKPiArCXUzMiBjb2VmZl9zdGVwX3g7Cj4gKwl1MzIgY29lZmZfc3RlcF95Owo+ICsJ dTMyIGNvbnRyb2wxOwo+ICsJdTMyIGNvbnRyb2wyOwo+ICsJc3RydWN0IG1kcF9yc3pfc3ViZnJt IHN1YmZybXNbSU1HX01BWF9TVUJGUkFNRVNdOwo+ICt9IF9fcGFja2VkOwo+ICsKPiArc3RydWN0 IG1kcF93cm90X3N1YmZybSB7Cj4gKwl1MzIgb2Zmc2V0W0lNR19NQVhfUExBTkVTXTsKPiArCXUz MiBzcmM7Cj4gKwl1MzIgY2xpcDsKPiArCXUzMiBjbGlwX29mc3Q7Cj4gKwl1MzIgbWFpbl9idWY7 Cj4gK30gX19wYWNrZWQ7Cj4gKwo+ICtzdHJ1Y3QgbWRwX3dyb3RfZGF0YSB7Cj4gKwl1MzIgaW92 YVtJTUdfTUFYX1BMQU5FU107Cj4gKwl1MzIgY29udHJvbDsKPiArCXUzMiBzdHJpZGVbSU1HX01B WF9QTEFORVNdOwo+ICsJdTMyIG1hdF9jdHJsOwo+ICsJdTMyIGZpZm9fdGVzdDsKPiArCXUzMiBm aWx0ZXI7Cj4gKwlzdHJ1Y3QgbWRwX3dyb3Rfc3ViZnJtIHN1YmZybXNbSU1HX01BWF9TVUJGUkFN RVNdOwo+ICt9IF9fcGFja2VkOwo+ICsKPiArc3RydWN0IG1kcF93ZG1hX3N1YmZybSB7Cj4gKwl1 MzIgb2Zmc2V0W0lNR19NQVhfUExBTkVTXTsKPiArCXUzMiBzcmM7Cj4gKwl1MzIgY2xpcDsKPiAr CXUzMiBjbGlwX29mc3Q7Cj4gK30gX19wYWNrZWQ7Cj4gKwo+ICtzdHJ1Y3QgbWRwX3dkbWFfZGF0 YSB7Cj4gKwl1MzIgd2RtYV9jZmc7Cj4gKwl1MzIgaW92YVtJTUdfTUFYX1BMQU5FU107Cj4gKwl1 MzIgd19pbl9ieXRlOwo+ICsJdTMyIHV2X3N0cmlkZTsKPiArCXN0cnVjdCBtZHBfd2RtYV9zdWJm cm0gc3ViZnJtc1tJTUdfTUFYX1NVQkZSQU1FU107Cj4gK30gX19wYWNrZWQ7Cj4gKwo+ICtzdHJ1 Y3QgaXNwX2RhdGEgewo+ICsJdTY0IGRsX2ZsYWdzOyAvKiAxIDw8IChlbnVtIG1kcF9jb21wX3R5 cGUpICovCj4gKwl1MzIgc214aV9pb3ZhWzRdOwo+ICsJdTMyIGNxX2lkeDsKPiArCXUzMiBjcV9p b3ZhOwo+ICsJdTMyIHRwaXBlX2lvdmFbSU1HX01BWF9TVUJGUkFNRVNdOwo+ICt9IF9fcGFja2Vk Owo+ICsKPiArc3RydWN0IGltZ19jb21wcGFyYW0gewo+ICsJdTE2IHR5cGU7IC8qIGVudW0gbWRw X2NvbXBfdHlwZSAqLwo+ICsJdTE2IGlkOyAvKiBlbnVtIG10a19tZHBfY29tcF9pZCAqLwo+ICsJ dTMyIGlucHV0Owo+ICsJdTMyIG91dHB1dHNbSU1HX01BWF9IV19PVVRQVVRTXTsKPiArCXUzMiBu dW1fb3V0cHV0czsKPiArCXN0cnVjdCBpbWdfY29tcF9mcmFtZSBmcmFtZTsKPiArCXN0cnVjdCBp bWdfY29tcF9zdWJmcm0gc3ViZnJtc1tJTUdfTUFYX1NVQkZSQU1FU107Cj4gKwl1MzIgbnVtX3N1 YmZybXM7Cj4gKwl1bmlvbiB7Cj4gKwkJc3RydWN0IG1kcF9yZG1hX2RhdGEgcmRtYTsKPiArCQlz dHJ1Y3QgbWRwX3Jzel9kYXRhIHJzejsKPiArCQlzdHJ1Y3QgbWRwX3dyb3RfZGF0YSB3cm90Owo+ ICsJCXN0cnVjdCBtZHBfd2RtYV9kYXRhIHdkbWE7Cj4gKwkJc3RydWN0IGlzcF9kYXRhIGlzcDsK PiArCX07Cj4gK30gX19wYWNrZWQ7Cj4gKwo+ICsjZGVmaW5lIElNR19NQVhfQ09NUE9ORU5UUwky MAo+ICsKPiArc3RydWN0IGltZ19tdXggewo+ICsJdTMyIHJlZzsKPiArCXUzMiB2YWx1ZTsKPiAr fTsKPiArCj4gK3N0cnVjdCBpbWdfbW1zeXNfY3RybCB7Cj4gKwlzdHJ1Y3QgaW1nX211eCBzZXRz W0lNR19NQVhfQ09NUE9ORU5UUyAqIDJdOwo+ICsJdTMyIG51bV9zZXRzOwo+ICt9Owo+ICsKPiAr c3RydWN0IGltZ19jb25maWcgewo+ICsJc3RydWN0IGltZ19jb21wcGFyYW0gY29tcG9uZW50c1tJ TUdfTUFYX0NPTVBPTkVOVFNdOwo+ICsJdTMyIG51bV9jb21wb25lbnRzOwo+ICsJc3RydWN0IGlt Z19tbXN5c19jdHJsIGN0cmxzW0lNR19NQVhfU1VCRlJBTUVTXTsKPiArCXUzMiBudW1fc3ViZnJt czsKPiArfSBfX3BhY2tlZDsKPiArCj4gKyNlbmRpZiAgLyogX19NVEtfSU1HX0lQSV9IX18gKi8K PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstbWRwMy9tdGstbWRwMy1j bWRxLmMgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1tZHAzL210ay1tZHAzLWNtZHEuYwo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi40YTA4NTAyOTUyZDYK PiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstbWRwMy9t dGstbWRwMy1jbWRxLmMKPiBAQCAtMCwwICsxLDUxNSBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMC1vbmx5Cj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAyMSBNZWRp YVRlayBJbmMuCj4gKyAqIEF1dGhvcjogUGluZy1Ic3VuIFd1IDxwaW5nLWhzdW4ud3VAbWVkaWF0 ZWsuY29tPgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4K PiArI2luY2x1ZGUgIm10ay1tZHAzLWNtZHEuaCIKPiArI2luY2x1ZGUgIm10ay1tZHAzLWNvbXAu aCIKPiArI2luY2x1ZGUgIm10ay1tZHAzLWNvcmUuaCIKPiArI2luY2x1ZGUgIm10ay1tZHAzLW0y bS5oIgo+ICsKPiArI2RlZmluZSBNRFBfUEFUSF9NQVhfQ09NUFMJSU1HX01BWF9DT01QT05FTlRT Cj4gKwo+ICtzdHJ1Y3QgbWRwX3BhdGggewo+ICsJc3RydWN0IG1kcF9kZXYJCSptZHBfZGV2Owo+ ICsJc3RydWN0IG1kcF9jb21wX2N0eAljb21wc1tNRFBfUEFUSF9NQVhfQ09NUFNdOwo+ICsJdTMy CQkJbnVtX2NvbXBzOwo+ICsJY29uc3Qgc3RydWN0IGltZ19jb25maWcJKmNvbmZpZzsKPiArCWNv bnN0IHN0cnVjdCBpbWdfaXBpX2ZyYW1lcGFyYW0gKnBhcmFtOwo+ICsJY29uc3Qgc3RydWN0IHY0 bDJfcmVjdAkqY29tcG9zZXNbSU1HX01BWF9IV19PVVRQVVRTXTsKPiArCXN0cnVjdCB2NGwyX3Jl Y3QJYm91bmRzW0lNR19NQVhfSFdfT1VUUFVUU107Cj4gK307Cj4gKwo+ICsjZGVmaW5lIGhhc19v cChjdHgsIG9wKSBcCj4gKwkoKGN0eCktPmNvbXAtPm9wcyAmJiAoY3R4KS0+Y29tcC0+b3BzLT5v cCkKPiArI2RlZmluZSBjYWxsX29wKGN0eCwgb3AsIC4uLikgXAo+ICsJKGhhc19vcChjdHgsIG9w KSA/IChjdHgpLT5jb21wLT5vcHMtPm9wKGN0eCwgIyNfX1ZBX0FSR1NfXykgOiAwKQo+ICsKPiAr c3RydWN0IG1kcF9wYXRoX3N1YmZybSB7Cj4gKwlzMzIJbXV0ZXhfaWQ7Cj4gKwl1MzIJbXV0ZXhf bW9kOwo+ICsJczMyCXNvZnNbTURQX1BBVEhfTUFYX0NPTVBTXTsKPiArCXUzMgludW1fc29mczsK PiArfTsKPiArCj4gK3N0YXRpYyBib29sIGlzX291dHB1dF9kaXNhYmxlKGNvbnN0IHN0cnVjdCBp bWdfY29tcHBhcmFtICpwYXJhbSwgdTMyIGNvdW50KQo+ICt7Cj4gKwlyZXR1cm4gKGNvdW50IDwg cGFyYW0tPm51bV9zdWJmcm1zKSA/Cj4gKwkJKHBhcmFtLT5mcmFtZS5vdXRwdXRfZGlzYWJsZSB8 fAo+ICsJCXBhcmFtLT5zdWJmcm1zW2NvdW50XS50aWxlX2Rpc2FibGUpIDoKPiArCQl0cnVlOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG1kcF9wYXRoX3N1YmZybV9yZXF1aXJlKHN0cnVjdCBtZHBf cGF0aF9zdWJmcm0gKnN1YmZybSwKPiArCQkJCSAgIGNvbnN0IHN0cnVjdCBtZHBfcGF0aCAqcGF0 aCwKPiArCQkJCSAgIHN0cnVjdCBtbXN5c19jbWRxX2NtZCAqY21kLCB1MzIgY291bnQpCj4gK3sK PiArCWNvbnN0IHN0cnVjdCBpbWdfY29uZmlnICpjb25maWcgPSBwYXRoLT5jb25maWc7Cj4gKwlj b25zdCBzdHJ1Y3QgbWRwX2NvbXBfY3R4ICpjdHg7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAm cGF0aC0+bWRwX2Rldi0+cGRldi0+ZGV2Owo+ICsJc3RydWN0IG10a19tdXRleCAqKm11dGV4ID0g cGF0aC0+bWRwX2Rldi0+bWRwX211dGV4Owo+ICsJczMyIG11dGV4X2lkID0gLTE7Cj4gKwl1MzIg bXV0ZXhfYml0ID0gMDsKPiArCWludCBpbmRleCwgaWQ7Cj4gKwo+ICsJLyogRGVmYXVsdCB2YWx1 ZSAqLwo+ICsJbWVtc2V0KHN1YmZybSwgMCwgc2l6ZW9mKCpzdWJmcm0pKTsKPiArCj4gKwkvKiBE ZWNpZGUgd2hpY2ggbXV0ZXggdG8gdXNlIGJhc2VkIG9uIHRoZSBjdXJyZW50IHBpcGVsaW5lICov Cj4gKwlzd2l0Y2ggKHBhdGgtPmNvbXBzWzBdLmNvbXAtPmlkKSB7Cj4gKwljYXNlIE1EUF9DT01Q X1JETUEwOgo+ICsJCW11dGV4X2lkID0gTURQX1BJUEVfUkRNQTA7Cj4gKwkJYnJlYWs7Cj4gKwlj YXNlIE1EUF9DT01QX0lTUF9JTUdJOgo+ICsJCW11dGV4X2lkID0gTURQX1BJUEVfSU1HSTsKPiAr CQlicmVhazsKPiArCWNhc2UgTURQX0NPTVBfV1BFSToKPiArCQltdXRleF9pZCA9IE1EUF9QSVBF X1dQRUk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIE1EUF9DT01QX1dQRUkyOgo+ICsJCW11dGV4X2lk ID0gTURQX1BJUEVfV1BFSTI7Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCWRldl9lcnIo ZGV2LCAiVW5rbm93biBwaXBlbGluZSBhbmQgbm8gbXV0ZXggaXMgYXNzaWduZWQiKTsKPiArCQly ZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCXN1YmZybS0+bXV0ZXhfaWQgPSBtdXRleF9pZDsKPiAr Cj4gKwkvKiBTZXQgbXV0ZXggbW9kICovCj4gKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBjb25m aWctPm51bV9jb21wb25lbnRzOyBpbmRleCsrKSB7Cj4gKwkJY3R4ID0gJnBhdGgtPmNvbXBzW2lu ZGV4XTsKPiArCQlpZiAoaXNfb3V0cHV0X2Rpc2FibGUoY3R4LT5wYXJhbSwgY291bnQpKQo+ICsJ CQljb250aW51ZTsKPiArCQlpZCA9IGN0eC0+Y29tcC0+aWQ7Cj4gKwkJc3dpdGNoIChpZCkgewo+ ICsJCWNhc2UgTURQX0NPTVBfQUFMMDoKPiArCQljYXNlIE1EUF9DT01QX0NDT1JSMDoKPiArCQlj YXNlIE1EUF9DT01QX1dETUE6Cj4gKwkJY2FzZSBNRFBfQ09NUF9XUk9UMDoKPiArCQljYXNlIE1E UF9DT01QX1REU0hQMDoKPiArCQljYXNlIE1EUF9DT01QX1JTWjE6Cj4gKwkJY2FzZSBNRFBfQ09N UF9SU1owOgo+ICsJCWNhc2UgTURQX0NPTVBfUkRNQTA6Cj4gKwkJCW11dGV4X2JpdCA9IG10a19t dXRleF9nZXRfbWRwX21vZChtdXRleFttdXRleF9pZF0sIGlkKTsKPiArCQkJc3ViZnJtLT5tdXRl eF9tb2QgfD0gbXV0ZXhfYml0Owo+ICsJCQlicmVhazsKPiArCQlkZWZhdWx0Ogo+ICsJCQlicmVh azsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJaWYgKHN1YmZybS0+bXV0ZXhfbW9kKQo+ICsJCW10a19t dXRleF9hZGRfbW9kX2J5X2NtZHEobXV0ZXhbbXV0ZXhfaWRdLCBzdWJmcm0tPm11dGV4X21vZCwg Y21kKTsKPiArCj4gKwkvKiBTZXQgU09GICovCj4gKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBj b25maWctPm51bV9jb21wb25lbnRzOyBpbmRleCsrKSB7Cj4gKwkJY3R4ID0gJnBhdGgtPmNvbXBz W2luZGV4XTsKPiArCQlpZiAoaXNfb3V0cHV0X2Rpc2FibGUoY3R4LT5wYXJhbSwgY291bnQpKQo+ ICsJCQljb250aW51ZTsKPiArCQlpZCA9IGN0eC0+Y29tcC0+aWQ7Cj4gKwkJc3dpdGNoIChpZCkg ewo+ICsJCWNhc2UgTURQX0NPTVBfV0RNQToKPiArCQljYXNlIE1EUF9DT01QX1dST1QwOgo+ICsJ CWNhc2UgTURQX0NPTVBfVERTSFAwOgo+ICsJCWNhc2UgTURQX0NPTVBfUlNaMToKPiArCQljYXNl IE1EUF9DT01QX1JTWjA6Cj4gKwkJY2FzZSBNRFBfQ09NUF9SRE1BMDoKPiArCQkJc3ViZnJtLT5z b2ZzW3N1YmZybS0+bnVtX3NvZnMrK10gPSBpZDsKPiArCQkJYnJlYWs7Cj4gKwkJZGVmYXVsdDoK PiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IG1kcF9wYXRoX3N1YmZybV9ydW4oY29uc3Qgc3RydWN0IG1kcF9wYXRoX3N1YmZy bSAqc3ViZnJtLAo+ICsJCQkgICAgICAgY29uc3Qgc3RydWN0IG1kcF9wYXRoICpwYXRoLAo+ICsJ CQkgICAgICAgc3RydWN0IG1tc3lzX2NtZHFfY21kICpjbWQpCj4gK3sKPiArCXN0cnVjdCBkZXZp Y2UgKmRldiA9ICZwYXRoLT5tZHBfZGV2LT5wZGV2LT5kZXY7Cj4gKwlzdHJ1Y3QgbXRrX211dGV4 ICoqbXV0ZXggPSBwYXRoLT5tZHBfZGV2LT5tZHBfbXV0ZXg7Cj4gKwlzMzIgbXV0ZXhfaWQgPSBz dWJmcm0tPm11dGV4X2lkOwo+ICsKPiArCWlmICgtMSA9PSBtdXRleF9pZCkgewo+ICsJCWRldl9l cnIoZGV2LCAiSW5jb3JyZWN0IG11dGV4IGlkIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9 Cj4gKwo+ICsJaWYgKHN1YmZybS0+bXV0ZXhfbW9kKSB7Cj4gKwkJaW50IGluZGV4Owo+ICsKPiAr CQkvKiBXYWl0IFdST1QgU1JBTSBzaGFyZWQgdG8gRElTUCBSRE1BICovCj4gKwkJLyogQ2xlYXIg U09GIGV2ZW50IGZvciBlYWNoIGVuZ2luZSAqLwo+ICsJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8 IHN1YmZybS0+bnVtX3NvZnM7IGluZGV4KyspIHsKPiArCQkJc3dpdGNoIChzdWJmcm0tPnNvZnNb aW5kZXhdKSB7Cj4gKwkJCWNhc2UgTURQX0NPTVBfUkRNQTA6Cj4gKwkJCQlNTV9SRUdfQ0xFQVIo Y21kLCBSRE1BMF9TT0YpOwo+ICsJCQkJYnJlYWs7Cj4gKwkJCWNhc2UgTURQX0NPTVBfVERTSFAw Ogo+ICsJCQkJTU1fUkVHX0NMRUFSKGNtZCwgVERTSFAwX1NPRik7Cj4gKwkJCQlicmVhazsKPiAr CQkJY2FzZSBNRFBfQ09NUF9SU1owOgo+ICsJCQkJTU1fUkVHX0NMRUFSKGNtZCwgUlNaMF9TT0Yp Owo+ICsJCQkJYnJlYWs7Cj4gKwkJCWNhc2UgTURQX0NPTVBfUlNaMToKPiArCQkJCU1NX1JFR19D TEVBUihjbWQsIFJTWjFfU09GKTsKPiArCQkJCWJyZWFrOwo+ICsJCQljYXNlIE1EUF9DT01QX1dE TUE6Cj4gKwkJCQlNTV9SRUdfQ0xFQVIoY21kLCBXRE1BMF9TT0YpOwo+ICsJCQkJYnJlYWs7Cj4g KwkJCWNhc2UgTURQX0NPTVBfV1JPVDA6Cj4gKwkJCQlNTV9SRUdfQ0xFQVIoY21kLCBXUk9UMF9T T0YpOwo+ICsJCQkJYnJlYWs7Cj4gKwkJCWRlZmF1bHQ6Cj4gKwkJCQlicmVhazsKPiArCQkJfQo+ ICsJCX0KPiArCj4gKwkJLyogRW5hYmxlIHRoZSBtdXRleCAqLwo+ICsJCW10a19tdXRleF9lbmFi bGVfYnlfY21kcShtdXRleFttdXRleF9pZF0sIGNtZCk7Cj4gKwo+ICsJCS8qIFdhaXQgU09GIGV2 ZW50cyBhbmQgY2xlYXIgbXV0ZXggbW9kdWxlcyAob3B0aW9uYWwpICovCj4gKwkJZm9yIChpbmRl eCA9IDA7IGluZGV4IDwgc3ViZnJtLT5udW1fc29mczsgaW5kZXgrKykgewo+ICsJCQlzd2l0Y2gg KHN1YmZybS0+c29mc1tpbmRleF0pIHsKPiArCQkJY2FzZSBNRFBfQ09NUF9SRE1BMDoKPiArCQkJ CU1NX1JFR19XQUlUKGNtZCwgUkRNQTBfU09GKTsKPiArCQkJCWJyZWFrOwo+ICsJCQljYXNlIE1E UF9DT01QX1REU0hQMDoKPiArCQkJCU1NX1JFR19XQUlUKGNtZCwgVERTSFAwX1NPRik7Cj4gKwkJ CQlicmVhazsKPiArCQkJY2FzZSBNRFBfQ09NUF9SU1owOgo+ICsJCQkJTU1fUkVHX1dBSVQoY21k LCBSU1owX1NPRik7Cj4gKwkJCQlicmVhazsKPiArCQkJY2FzZSBNRFBfQ09NUF9SU1oxOgo+ICsJ CQkJTU1fUkVHX1dBSVQoY21kLCBSU1oxX1NPRik7Cj4gKwkJCQlicmVhazsKPiArCQkJY2FzZSBN RFBfQ09NUF9XRE1BOgo+ICsJCQkJTU1fUkVHX1dBSVQoY21kLCBXRE1BMF9TT0YpOwo+ICsJCQkJ YnJlYWs7Cj4gKwkJCWNhc2UgTURQX0NPTVBfV1JPVDA6Cj4gKwkJCQlNTV9SRUdfV0FJVChjbWQs IFdST1QwX1NPRik7Cj4gKwkJCQlicmVhazsKPiArCQkJZGVmYXVsdDoKPiArCQkJCWJyZWFrOwo+ ICsJCQl9Cj4gKwkJfQo+ICsJfQo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg bWRwX3BhdGhfY3R4X2luaXQoc3RydWN0IG1kcF9kZXYgKm1kcCwgc3RydWN0IG1kcF9wYXRoICpw YXRoKQo+ICt7Cj4gKwljb25zdCBzdHJ1Y3QgaW1nX2NvbmZpZyAqY29uZmlnID0gcGF0aC0+Y29u ZmlnOwo+ICsJaW50IGluZGV4LCByZXQ7Cj4gKwo+ICsJaWYgKGNvbmZpZy0+bnVtX2NvbXBvbmVu dHMgPCAxKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWZvciAoaW5kZXggPSAwOyBpbmRl eCA8IGNvbmZpZy0+bnVtX2NvbXBvbmVudHM7IGluZGV4KyspIHsKPiArCQlyZXQgPSBtZHBfY29t cF9jdHhfaW5pdChtZHAsICZwYXRoLT5jb21wc1tpbmRleF0sCj4gKwkJCQkJJmNvbmZpZy0+Y29t cG9uZW50c1tpbmRleF0sCj4gKwkJCQkJcGF0aC0+cGFyYW0pOwo+ICsJCWlmIChyZXQpCj4gKwkJ CXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQgbWRwX3BhdGhfY29uZmlnX3N1YmZybShzdHJ1Y3QgbW1zeXNfY21kcV9jbWQgKmNtZCwKPiAr CQkJCSAgc3RydWN0IG1kcF9wYXRoICpwYXRoLCB1MzIgY291bnQpCj4gK3sKPiArCXN0cnVjdCBt ZHBfcGF0aF9zdWJmcm0gc3ViZnJtOwo+ICsJY29uc3Qgc3RydWN0IGltZ19jb25maWcgKmNvbmZp ZyA9IHBhdGgtPmNvbmZpZzsKPiArCWNvbnN0IHN0cnVjdCBpbWdfbW1zeXNfY3RybCAqY3RybCA9 ICZjb25maWctPmN0cmxzW2NvdW50XTsKPiArCWNvbnN0IHN0cnVjdCBpbWdfbXV4ICpzZXQ7Cj4g KwlzdHJ1Y3QgZGV2aWNlICptbXN5c19kZXYgPSBwYXRoLT5tZHBfZGV2LT5tZHBfbW1zeXM7Cj4g KwlzdHJ1Y3QgbWRwX2NvbXBfY3R4ICpjdHg7Cj4gKwlpbnQgaW5kZXgsIHJldDsKPiArCj4gKwkv KiBBY3F1aXJlIGNvbXBvbmVudHMgKi8KPiArCXJldCA9IG1kcF9wYXRoX3N1YmZybV9yZXF1aXJl KCZzdWJmcm0sIHBhdGgsIGNtZCwgY291bnQpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0 Owo+ICsJLyogRW5hYmxlIG11eCBzZXR0aW5ncyAqLwo+ICsJZm9yIChpbmRleCA9IDA7IGluZGV4 IDwgY3RybC0+bnVtX3NldHM7IGluZGV4KyspIHsKPiArCQlzZXQgPSAmY3RybC0+c2V0c1tpbmRl eF07Cj4gKwkJbW1zeXNfZGV2ID0gcGF0aC0+bWRwX2Rldi0+bWRwX21tc3lzOwo+ICsKPiArCQlt dGtfbW1zeXNfd3JpdGVfcmVnX2J5X2NtZHEobW1zeXNfZGV2LCBjbWQsCj4gKwkJCQkJICAgIHNl dC0+cmVnLCBzZXQtPnZhbHVlLCAweEZGRkZGRkZGKTsKPiArCX0KPiArCS8qIENvbmZpZyBzdWIt ZnJhbWUgaW5mb3JtYXRpb24gKi8KPiArCWZvciAoaW5kZXggPSAoY29uZmlnLT5udW1fY29tcG9u ZW50cyAtIDEpOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7Cj4gKwkJY3R4ID0gJnBhdGgtPmNvbXBz W2luZGV4XTsKPiArCQlpZiAoaXNfb3V0cHV0X2Rpc2FibGUoY3R4LT5wYXJhbSwgY291bnQpKQo+ ICsJCQljb250aW51ZTsKPiArCQlyZXQgPSBjYWxsX29wKGN0eCwgY29uZmlnX3N1YmZybSwgY21k LCBjb3VudCk7Cj4gKwkJaWYgKHJldCkKPiArCQkJcmV0dXJuIHJldDsKPiArCX0KPiArCS8qIFJ1 biBjb21wb25lbnRzICovCj4gKwlyZXQgPSBtZHBfcGF0aF9zdWJmcm1fcnVuKCZzdWJmcm0sIHBh dGgsIGNtZCk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwkvKiBXYWl0IGNvbXBv bmVudHMgZG9uZSAqLwo+ICsJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgY29uZmlnLT5udW1fY29t cG9uZW50czsgaW5kZXgrKykgewo+ICsJCWN0eCA9ICZwYXRoLT5jb21wc1tpbmRleF07Cj4gKwkJ aWYgKGlzX291dHB1dF9kaXNhYmxlKGN0eC0+cGFyYW0sIGNvdW50KSkKPiArCQkJY29udGludWU7 Cj4gKwkJcmV0ID0gY2FsbF9vcChjdHgsIHdhaXRfY29tcF9ldmVudCwgY21kKTsKPiArCQlpZiAo cmV0KQo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsJLyogQWR2YW5jZSB0byB0aGUgbmV4dCBz dWItZnJhbWUgKi8KPiArCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGNvbmZpZy0+bnVtX2NvbXBv bmVudHM7IGluZGV4KyspIHsKPiArCQljdHggPSAmcGF0aC0+Y29tcHNbaW5kZXhdOwo+ICsJCXJl dCA9IGNhbGxfb3AoY3R4LCBhZHZhbmNlX3N1YmZybSwgY21kLCBjb3VudCk7Cj4gKwkJaWYgKHJl dCkKPiArCQkJcmV0dXJuIHJldDsKPiArCX0KPiArCS8qIERpc2FibGUgbXV4IHNldHRpbmdzICov Cj4gKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBjdHJsLT5udW1fc2V0czsgaW5kZXgrKykgewo+ ICsJCXNldCA9ICZjdHJsLT5zZXRzW2luZGV4XTsKPiArCQltbXN5c19kZXYgPSBwYXRoLT5tZHBf ZGV2LT5tZHBfbW1zeXM7Cj4gKwo+ICsJCW10a19tbXN5c193cml0ZV9yZWdfYnlfY21kcShtbXN5 c19kZXYsIGNtZCwKPiArCQkJCQkgICAgc2V0LT5yZWcsIDAsIDB4RkZGRkZGRkYpOwo+ICsJfQo+ ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG1kcF9wYXRoX2NvbmZpZyhz dHJ1Y3QgbWRwX2RldiAqbWRwLCBzdHJ1Y3QgbW1zeXNfY21kcV9jbWQgKmNtZCwKPiArCQkJICAg c3RydWN0IG1kcF9wYXRoICpwYXRoKQo+ICt7Cj4gKwljb25zdCBzdHJ1Y3QgaW1nX2NvbmZpZyAq Y29uZmlnID0gcGF0aC0+Y29uZmlnOwo+ICsJc3RydWN0IG1kcF9jb21wX2N0eCAqY3R4Owo+ICsJ aW50IGluZGV4LCBjb3VudCwgcmV0Owo+ICsKPiArCS8qIENvbmZpZyBwYXRoIGZyYW1lICovCj4g KwkvKiBSZXNldCBjb21wb25lbnRzICovCj4gKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBjb25m aWctPm51bV9jb21wb25lbnRzOyBpbmRleCsrKSB7Cj4gKwkJY3R4ID0gJnBhdGgtPmNvbXBzW2lu ZGV4XTsKPiArCQlyZXQgPSBjYWxsX29wKGN0eCwgaW5pdF9jb21wLCBjbWQpOwo+ICsJCWlmIChy ZXQpCj4gKwkJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwkvKiBDb25maWcgZnJhbWUgbW9kZSAqLwo+ ICsJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgY29uZmlnLT5udW1fY29tcG9uZW50czsgaW5kZXgr Kykgewo+ICsJCWNvbnN0IHN0cnVjdCB2NGwyX3JlY3QgKmNvbXBvc2UgPQo+ICsJCQlwYXRoLT5j b21wb3Nlc1tjdHgtPnBhcmFtLT5vdXRwdXRzWzBdXTsKPiArCj4gKwkJY3R4ID0gJnBhdGgtPmNv bXBzW2luZGV4XTsKPiArCQlyZXQgPSBjYWxsX29wKGN0eCwgY29uZmlnX2ZyYW1lLCBjbWQsIGNv bXBvc2UpOwo+ICsJCWlmIChyZXQpCj4gKwkJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJLyog Q29uZmlnIHBhdGggc3ViLWZyYW1lcyAqLwo+ICsJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgY29u ZmlnLT5udW1fc3ViZnJtczsgY291bnQrKykgewo+ICsJCXJldCA9IG1kcF9wYXRoX2NvbmZpZ19z dWJmcm0oY21kLCBwYXRoLCBjb3VudCk7Cj4gKwkJaWYgKHJldCkKPiArCQkJcmV0dXJuIHJldDsK PiArCX0KPiArCS8qIFBvc3QgcHJvY2Vzc2luZyBpbmZvcm1hdGlvbiAqLwo+ICsJZm9yIChpbmRl eCA9IDA7IGluZGV4IDwgY29uZmlnLT5udW1fY29tcG9uZW50czsgaW5kZXgrKykgewo+ICsJCWN0 eCA9ICZwYXRoLT5jb21wc1tpbmRleF07Cj4gKwkJcmV0ID0gY2FsbF9vcChjdHgsIHBvc3RfcHJv Y2VzcywgY21kKTsKPiArCQlpZiAocmV0KQo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsJcmV0 dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG1kcF9hdXRvX3JlbGVhc2Vfd29yayhzdHJ1 Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gK3sKPiArCXN0cnVjdCBtZHBfY21kcV9jYl9wYXJhbSAq Y2JfcGFyYW07Cj4gKwlzdHJ1Y3QgbWRwX2RldiAqbWRwOwo+ICsKPiArCWNiX3BhcmFtID0gY29u dGFpbmVyX29mKHdvcmssIHN0cnVjdCBtZHBfY21kcV9jYl9wYXJhbSwKPiArCQkJCWF1dG9fcmVs ZWFzZV93b3JrKTsKPiArCW1kcCA9IGNiX3BhcmFtLT5tZHA7Cj4gKwo+ICsJbXRrX211dGV4X3Vu cHJlcGFyZShtZHAtPm1kcF9tdXRleFtNRFBfUElQRV9SRE1BMF0pOwo+ICsJbWRwX2NvbXBfY2xv Y2tzX29mZigmbWRwLT5wZGV2LT5kZXYsIGNiX3BhcmFtLT5jb21wcywKPiArCQkJICAgIGNiX3Bh cmFtLT5udW1fY29tcHMpOwo+ICsKPiArCWtmcmVlKGNiX3BhcmFtLT5jb21wcyk7Cj4gKwlrZnJl ZShjYl9wYXJhbSk7Cj4gKwo+ICsJYXRvbWljX2RlYygmbWRwLT5qb2JfY291bnQpOwo+ICsJd2Fr ZV91cCgmbWRwLT5jYWxsYmFja193cSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG1kcF9oYW5k bGVfY21kcV9jYWxsYmFjayhzdHJ1Y3QgY21kcV9jYl9kYXRhIGRhdGEpCj4gK3sKPiArCXN0cnVj dCBtZHBfY21kcV9jYl9wYXJhbSAqY2JfcGFyYW07Cj4gKwlzdHJ1Y3QgbWRwX2RldiAqbWRwOwo+ ICsJc3RydWN0IGRldmljZSAqZGV2Owo+ICsKPiArCWlmICghZGF0YS5kYXRhKSB7Cj4gKwkJcHJf aW5mbygiJXM6bm8gY2FsbGJhY2sgZGF0YVxuIiwgX19mdW5jX18pOwo+ICsJCXJldHVybjsKPiAr CX0KPiArCj4gKwljYl9wYXJhbSA9IChzdHJ1Y3QgbWRwX2NtZHFfY2JfcGFyYW0gKilkYXRhLmRh dGE7Cj4gKwltZHAgPSBjYl9wYXJhbS0+bWRwOwo+ICsJZGV2ID0gJm1kcC0+cGRldi0+ZGV2Owo+ ICsKPiArCWlmIChjYl9wYXJhbS0+bWRwX2N0eCkKPiArCQltZHBfbTJtX2pvYl9maW5pc2goY2Jf cGFyYW0tPm1kcF9jdHgpOwo+ICsKPiArCWlmIChjYl9wYXJhbS0+dXNlcl9jbWRxX2NiKSB7Cj4g KwkJc3RydWN0IGNtZHFfY2JfZGF0YSB1c2VyX2NiX2RhdGE7Cj4gKwo+ICsJCXVzZXJfY2JfZGF0 YS5zdGEgPSBkYXRhLnN0YTsKPiArCQl1c2VyX2NiX2RhdGEuZGF0YSA9IGNiX3BhcmFtLT51c2Vy X2NiX2RhdGE7Cj4gKwkJY2JfcGFyYW0tPnVzZXJfY21kcV9jYih1c2VyX2NiX2RhdGEpOwo+ICsJ fQo+ICsKPiArCWNtZHFfcGt0X2Rlc3Ryb3koY2JfcGFyYW0tPnBrdCk7Cj4gKwlJTklUX1dPUkso JmNiX3BhcmFtLT5hdXRvX3JlbGVhc2Vfd29yaywgbWRwX2F1dG9fcmVsZWFzZV93b3JrKTsKPiAr CWlmICghcXVldWVfd29yayhtZHAtPmNsb2NrX3dxLCAmY2JfcGFyYW0tPmF1dG9fcmVsZWFzZV93 b3JrKSkgewo+ICsJCWRldl9lcnIoZGV2LCAiJXM6cXVldWVfd29yayBmYWlsIVxuIiwgX19mdW5j X18pOwo+ICsJCW10a19tdXRleF91bnByZXBhcmUobWRwLT5tZHBfbXV0ZXhbTURQX1BJUEVfUkRN QTBdKTsKPiArCQltZHBfY29tcF9jbG9ja3Nfb2ZmKCZtZHAtPnBkZXYtPmRldiwgY2JfcGFyYW0t PmNvbXBzLAo+ICsJCQkJICAgIGNiX3BhcmFtLT5udW1fY29tcHMpOwo+ICsKPiArCQlrZnJlZShj Yl9wYXJhbS0+Y29tcHMpOwo+ICsJCWtmcmVlKGNiX3BhcmFtKTsKPiArCj4gKwkJYXRvbWljX2Rl YygmbWRwLT5qb2JfY291bnQpOwo+ICsJCXdha2VfdXAoJm1kcC0+Y2FsbGJhY2tfd3EpOwo+ICsJ fQo+ICt9Cj4gKwo+ICtpbnQgbWRwX2NtZHFfc2VuZChzdHJ1Y3QgbWRwX2RldiAqbWRwLCBzdHJ1 Y3QgbWRwX2NtZHFfcGFyYW0gKnBhcmFtKQo+ICt7Cj4gKwlzdHJ1Y3QgbW1zeXNfY21kcV9jbWQg Y21kOwo+ICsJc3RydWN0IG1kcF9wYXRoICpwYXRoID0gTlVMTDsKPiArCXN0cnVjdCBtZHBfY21k cV9jYl9wYXJhbSAqY2JfcGFyYW0gPSBOVUxMOwo+ICsJc3RydWN0IG1kcF9jb21wICpjb21wcyA9 IE5VTEw7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmbWRwLT5wZGV2LT5kZXY7Cj4gKwlpbnQg aSwgcmV0Owo+ICsKPiArCWlmIChhdG9taWNfcmVhZCgmbWRwLT5zdXNwZW5kZWQpKQo+ICsJCXJl dHVybiAtRUNBTkNFTEVEOwo+ICsKPiArCWF0b21pY19pbmMoJm1kcC0+am9iX2NvdW50KTsKPiAr Cj4gKwljbWQucGt0ID0gY21kcV9wa3RfY3JlYXRlKG1kcC0+Y21kcV9jbHQsIFNaXzE2Syk7Cj4g KwlpZiAoSVNfRVJSKGNtZC5wa3QpKSB7Cj4gKwkJYXRvbWljX2RlYygmbWRwLT5qb2JfY291bnQp Owo+ICsJCXdha2VfdXAoJm1kcC0+Y2FsbGJhY2tfd3EpOwo+ICsJCXJldHVybiBQVFJfRVJSKGNt ZC5wa3QpOwo+ICsJfQo+ICsJY21kLmV2ZW50ID0gJm1kcC0+ZXZlbnRbMF07Cj4gKwo+ICsJcGF0 aCA9IGt6YWxsb2Moc2l6ZW9mKCpwYXRoKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXBhdGgpIHsK PiArCQlyZXQgPSAtRU5PTUVNOwo+ICsJCWdvdG8gZXJyX2Rlc3Ryb3lfcGt0Owo+ICsJfQo+ICsK PiArCXBhdGgtPm1kcF9kZXYgPSBtZHA7Cj4gKwlwYXRoLT5jb25maWcgPSBwYXJhbS0+Y29uZmln Owo+ICsJcGF0aC0+cGFyYW0gPSBwYXJhbS0+cGFyYW07Cj4gKwlmb3IgKGkgPSAwOyBpIDwgcGFy YW0tPnBhcmFtLT5udW1fb3V0cHV0czsgaSsrKSB7Cj4gKwkJcGF0aC0+Ym91bmRzW2ldLmxlZnQg PSAwOwo+ICsJCXBhdGgtPmJvdW5kc1tpXS50b3AgPSAwOwo+ICsJCXBhdGgtPmJvdW5kc1tpXS53 aWR0aCA9Cj4gKwkJCXBhcmFtLT5wYXJhbS0+b3V0cHV0c1tpXS5idWZmZXIuZm9ybWF0LndpZHRo Owo+ICsJCXBhdGgtPmJvdW5kc1tpXS5oZWlnaHQgPQo+ICsJCQlwYXJhbS0+cGFyYW0tPm91dHB1 dHNbaV0uYnVmZmVyLmZvcm1hdC5oZWlnaHQ7Cj4gKwkJcGF0aC0+Y29tcG9zZXNbaV0gPSBwYXJh bS0+Y29tcG9zZXNbaV0gPwo+ICsJCQlwYXJhbS0+Y29tcG9zZXNbaV0gOiAmcGF0aC0+Ym91bmRz W2ldOwo+ICsJfQo+ICsKPiArCXJldCA9IG1kcF9wYXRoX2N0eF9pbml0KG1kcCwgcGF0aCk7Cj4g KwlpZiAocmV0KSB7Cj4gKwkJZGV2X2VycihkZXYsICJtZHBfcGF0aF9jdHhfaW5pdCBlcnJvclxu Iik7Cj4gKwkJZ290byBlcnJfZGVzdHJveV9wa3Q7Cj4gKwl9Cj4gKwo+ICsJbXRrX211dGV4X3By ZXBhcmUobWRwLT5tZHBfbXV0ZXhbTURQX1BJUEVfUkRNQTBdKTsKPiArCWZvciAoaSA9IDA7IGkg PCBwYXJhbS0+Y29uZmlnLT5udW1fY29tcG9uZW50czsgaSsrKQo+ICsJCW1kcF9jb21wX2Nsb2Nr X29uKCZtZHAtPnBkZXYtPmRldiwgcGF0aC0+Y29tcHNbaV0uY29tcCk7Cj4gKwo+ICsJcmV0ID0g bWRwX3BhdGhfY29uZmlnKG1kcCwgJmNtZCwgcGF0aCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2 X2VycihkZXYsICJtZHBfcGF0aF9jb25maWcgZXJyb3JcbiIpOwo+ICsJCWdvdG8gZXJyX2Rlc3Ry b3lfcGt0Owo+ICsJfQo+ICsKPiArCWNiX3BhcmFtID0ga3phbGxvYyhzaXplb2YoKmNiX3BhcmFt KSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWNiX3BhcmFtKSB7Cj4gKwkJcmV0ID0gLUVOT01FTTsK PiArCQlnb3RvIGVycl9kZXN0cm95X3BrdDsKPiArCX0KPiArCj4gKwljb21wcyA9IGtjYWxsb2Mo cGFyYW0tPmNvbmZpZy0+bnVtX2NvbXBvbmVudHMsIHNpemVvZigqY29tcHMpLAo+ICsJCQlHRlBf S0VSTkVMKTsKPiArCWlmICghY29tcHMpIHsKPiArCQlyZXQgPSAtRU5PTUVNOwo+ICsJCWdvdG8g ZXJyX2Rlc3Ryb3lfcGt0Owo+ICsJfQo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBwYXJhbS0+Y29u ZmlnLT5udW1fY29tcG9uZW50czsgaSsrKQo+ICsJCW1lbWNweSgmY29tcHNbaV0sIHBhdGgtPmNv bXBzW2ldLmNvbXAsCj4gKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgbWRwX2NvbXApKTsKPiArCWNi X3BhcmFtLT5tZHAgPSBtZHA7Cj4gKwljYl9wYXJhbS0+dXNlcl9jbWRxX2NiID0gcGFyYW0tPmNt ZHFfY2I7Cj4gKwljYl9wYXJhbS0+dXNlcl9jYl9kYXRhID0gcGFyYW0tPmNiX2RhdGE7Cj4gKwlj Yl9wYXJhbS0+cGt0ID0gY21kLnBrdDsKPiArCWNiX3BhcmFtLT5jb21wcyA9IGNvbXBzOwo+ICsJ Y2JfcGFyYW0tPm51bV9jb21wcyA9IHBhcmFtLT5jb25maWctPm51bV9jb21wb25lbnRzOwo+ICsJ Y2JfcGFyYW0tPm1kcF9jdHggPSBwYXJhbS0+bWRwX2N0eDsKPiArCj4gKwljbWRxX3BrdF9maW5h bGl6ZShjbWQucGt0KTsKPiArCXJldCA9IGNtZHFfcGt0X2ZsdXNoX2FzeW5jKGNtZC5wa3QsCj4g KwkJCQkgICBtZHBfaGFuZGxlX2NtZHFfY2FsbGJhY2ssCj4gKwkJCQkgICAodm9pZCAqKWNiX3Bh cmFtKTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJyKGRldiwgImNtZHFfcGt0X2ZsdXNoX2Fz eW5jIGZhaWwhXG4iKTsKPiArCQlnb3RvIGVycl9jbG9ja19vZmY7Cj4gKwl9Cj4gKwlrZnJlZShw YXRoKTsKPiArCXJldHVybiAwOwo+ICsKPiArZXJyX2Nsb2NrX29mZjoKPiArCW10a19tdXRleF91 bnByZXBhcmUobWRwLT5tZHBfbXV0ZXhbTURQX1BJUEVfUkRNQTBdKTsKPiArCW1kcF9jb21wX2Ns b2Nrc19vZmYoJm1kcC0+cGRldi0+ZGV2LCBjYl9wYXJhbS0+Y29tcHMsCj4gKwkJCSAgICBjYl9w YXJhbS0+bnVtX2NvbXBzKTsKPiArZXJyX2Rlc3Ryb3lfcGt0Ogo+ICsJY21kcV9wa3RfZGVzdHJv eShjbWQucGt0KTsKPiArCWF0b21pY19kZWMoJm1kcC0+am9iX2NvdW50KTsKPiArCXdha2VfdXAo Jm1kcC0+Y2FsbGJhY2tfd3EpOwo+ICsJa2ZyZWUoY29tcHMpOwo+ICsJa2ZyZWUoY2JfcGFyYW0p Owo+ICsJa2ZyZWUocGF0aCk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiAraW50IG1k cF9jbWRxX3NlbmR0YXNrKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBpbWdf Y29uZmlnICpjb25maWcsCj4gKwkJICAgICAgc3RydWN0IGltZ19pcGlfZnJhbWVwYXJhbSAqcGFy YW0sCj4gKwkJICAgICAgc3RydWN0IHY0bDJfcmVjdCAqY29tcG9zZSwKPiArCQkgICAgICB2b2lk ICgqY21kcV9jYikoc3RydWN0IGNtZHFfY2JfZGF0YSBkYXRhKSwgdm9pZCAqY2JfZGF0YSkKPiAr ewo+ICsJc3RydWN0IG1kcF9kZXYgKm1kcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwo+ ICsJc3RydWN0IG1kcF9jbWRxX3BhcmFtIHRhc2sgPSB7Cj4gKwkJLmNvbmZpZyA9IGNvbmZpZywK PiArCQkucGFyYW0gPSBwYXJhbSwKPiArCQkuY29tcG9zZXNbMF0gPSBjb21wb3NlLAo+ICsJCS5j bWRxX2NiID0gY21kcV9jYiwKPiArCQkuY2JfZGF0YSA9IGNiX2RhdGEsCj4gKwl9Owo+ICsKPiAr CXJldHVybiBtZHBfY21kcV9zZW5kKG1kcCwgJnRhc2spOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xf R1BMKG1kcF9jbWRxX3NlbmR0YXNrKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0 Zm9ybS9tdGstbWRwMy9tdGstbWRwMy1jbWRxLmggYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210 ay1tZHAzL210ay1tZHAzLWNtZHEuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAw MDAwMDAwMDAwLi4xNjkzMzUwNzMzM2IKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9t ZWRpYS9wbGF0Zm9ybS9tdGstbWRwMy9tdGstbWRwMy1jbWRxLmgKPiBAQCAtMCwwICsxLDQ2IEBA Cj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KPiArLyoKPiAr ICogQ29weXJpZ2h0IChjKSAyMDIxIE1lZGlhVGVrIEluYy4KPiArICogQXV0aG9yOiBQaW5nLUhz dW4gV3UgPHBpbmctaHN1bi53dUBtZWRpYXRlay5jb20+Cj4gKyAqLwo+ICsKPiArI2lmbmRlZiBf X01US19NRFAzX0NNRFFfSF9fCj4gKyNkZWZpbmUgX19NVEtfTURQM19DTURRX0hfXwo+ICsKPiAr I2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvdmlk ZW9kZXYyLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zb2MvbWVkaWF0ZWsvbXRrLWNtZHEuaD4KPiAr I2luY2x1ZGUgIm10ay1pbWctaXBpLmgiCj4gKwo+ICtzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpt ZHBfZ2V0X3BsYXRfZGV2aWNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwo+ICsKPiAr aW50IG1kcF9jbWRxX3NlbmR0YXNrKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVj dCBpbWdfY29uZmlnICpjb25maWcsCj4gKwkJICAgICAgc3RydWN0IGltZ19pcGlfZnJhbWVwYXJh bSAqcGFyYW0sIHN0cnVjdCB2NGwyX3JlY3QgKmNvbXBvc2UsCj4gKwkJICAgICAgdm9pZCAoKmNt ZHFfY2IpKHN0cnVjdCBjbWRxX2NiX2RhdGEgZGF0YSksIHZvaWQgKmNiX2RhdGEpOwo+ICsKPiAr c3RydWN0IG1kcF9jbWRxX3BhcmFtIHsKPiArCXN0cnVjdCBpbWdfY29uZmlnICpjb25maWc7Cj4g KwlzdHJ1Y3QgaW1nX2lwaV9mcmFtZXBhcmFtICpwYXJhbTsKPiArCWNvbnN0IHN0cnVjdCB2NGwy X3JlY3QgKmNvbXBvc2VzW0lNR19NQVhfSFdfT1VUUFVUU107Cj4gKwo+ICsJdm9pZCAoKmNtZHFf Y2IpKHN0cnVjdCBjbWRxX2NiX2RhdGEgZGF0YSk7Cj4gKwl2b2lkICpjYl9kYXRhOwo+ICsJdm9p ZCAqbWRwX2N0eDsKPiArfTsKPiArCj4gK3N0cnVjdCBtZHBfY21kcV9jYl9wYXJhbSB7Cj4gKwlz dHJ1Y3Qgd29ya19zdHJ1Y3QgYXV0b19yZWxlYXNlX3dvcms7Cj4gKwlzdHJ1Y3QgbWRwX2RldiAq bWRwOwo+ICsJdm9pZCAoKnVzZXJfY21kcV9jYikoc3RydWN0IGNtZHFfY2JfZGF0YSBkYXRhKTsK PiArCXZvaWQgKnVzZXJfY2JfZGF0YTsKPiArCXN0cnVjdCBjbWRxX3BrdCAqcGt0Owo+ICsJc3Ry dWN0IG1kcF9jb21wICpjb21wczsKPiArCXU4IG51bV9jb21wczsKPiArCXZvaWQgKm1kcF9jdHg7 Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgbWRwX2RldjsKPiArCj4gK2ludCBtZHBfY21kcV9zZW5kKHN0 cnVjdCBtZHBfZGV2ICptZHAsIHN0cnVjdCBtZHBfY21kcV9wYXJhbSAqcGFyYW0pOwo+ICsKPiAr I2VuZGlmICAvKiBfX01US19NRFAzX0NNRFFfSF9fICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv bWVkaWEvcGxhdGZvcm0vbXRrLW1kcDMvbXRrLW1kcDMtY29tcC5jIGIvZHJpdmVycy9tZWRpYS9w bGF0Zm9ybS9tdGstbWRwMy9tdGstbWRwMy1jb21wLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ IGluZGV4IDAwMDAwMDAwMDAwMC4uNjIyOTAwZDIxNTJjCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBi L2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLW1kcDMvbXRrLW1kcDMtY29tcC5jCj4gQEAgLTAs MCArMSwxMjI4IEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkK PiArLyoKPiArICogQ29weXJpZ2h0IChjKSAyMDIxIE1lZGlhVGVrIEluYy4KPiArICogQXV0aG9y OiBQaW5nLUhzdW4gV3UgPHBpbmctaHN1bi53dUBtZWRpYXRlay5jb20+Cj4gKyAqLwo+ICsKPiAr I2luY2x1ZGUgPGxpbnV4L2Nsay5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4K PiArI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BtX3J1 bnRpbWUuaD4KPiArI2luY2x1ZGUgIm10ay1tZHAzLWNvbXAuaCIKPiArI2luY2x1ZGUgIm10ay1t ZHAzLWNvcmUuaCIKPiArI2luY2x1ZGUgIm10ay1tZHAzLXJlZ3MuaCIKPiArCj4gKyNpbmNsdWRl ICJtZHBfcmVnX3JkbWEuaCIKPiArI2luY2x1ZGUgIm1kcF9yZWdfY2NvcnIuaCIKPiArI2luY2x1 ZGUgIm1kcF9yZWdfcnN6LmgiCj4gKyNpbmNsdWRlICJtZHBfcmVnX3dyb3QuaCIKPiArI2luY2x1 ZGUgIm1kcF9yZWdfd2RtYS5oIgo+ICsjaW5jbHVkZSAibWRwX3JlZ19pc3AuaCIKPiArCj4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgbWRwX3BsYXRmb3JtX2NvbmZpZyAqX19nZXRfcGxhdF9jZmcoY29u c3Qgc3RydWN0IG1kcF9jb21wX2N0eCAqY3R4KQo+ICt7Cj4gKwlpZiAoIWN0eCkKPiArCQlyZXR1 cm4gTlVMTDsKPiArCj4gKwlyZXR1cm4gY3R4LT5jb21wLT5tZHBfZGV2LT5tZHBfZGF0YS0+bWRw X2NmZzsKPiArfQo+ICsKPiArc3RhdGljIHM2NCBnZXRfY29tcF9mbGFnKGNvbnN0IHN0cnVjdCBt ZHBfY29tcF9jdHggKmN0eCkKPiArewo+ICsJY29uc3Qgc3RydWN0IG1kcF9wbGF0Zm9ybV9jb25m aWcgKm1kcF9jZmcgPSBfX2dldF9wbGF0X2NmZyhjdHgpOwo+ICsKPiArCWlmIChtZHBfY2ZnICYm IG1kcF9jZmctPnJkbWFfcnN6MV9zcmFtX3NoYXJpbmcpCj4gKwkJaWYgKGN0eC0+Y29tcC0+aWQg PT0gTURQX0NPTVBfUkRNQTApCj4gKwkJCXJldHVybiBCSVQoTURQX0NPTVBfUkRNQTApIHwgQklU KE1EUF9DT01QX1JTWjEpOwo+ICsKPiArCXJldHVybiBCSVQoY3R4LT5jb21wLT5pZCk7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgaW5pdF9yZG1hKHN0cnVjdCBtZHBfY29tcF9jdHggKmN0eCwgc3Ry dWN0IG1tc3lzX2NtZHFfY21kICpjbWQpCj4gK3sKPiArCWNvbnN0IHN0cnVjdCBtZHBfcGxhdGZv cm1fY29uZmlnICptZHBfY2ZnID0gX19nZXRfcGxhdF9jZmcoY3R4KTsKPiArCXBoeXNfYWRkcl90 IGJhc2UgPSBjdHgtPmNvbXAtPnJlZ19iYXNlOwo+ICsJdTggc3Vic3lzX2lkID0gY3R4LT5jb21w LT5zdWJzeXNfaWQ7Cj4gKwo+ICsJaWYgKG1kcF9jZmcgJiYgbWRwX2NmZy0+cmRtYV9zdXBwb3J0 XzEwYml0KSB7Cj4gKwkJc3RydWN0IG1kcF9jb21wICpwcnoxID0gY3R4LT5jb21wLT5tZHBfZGV2 LT5jb21wW01EUF9DT01QX1JTWjFdOwo+ICsKPiArCQkvKiBEaXNhYmxlIFJTWjEgKi8KPiArCQlp ZiAoY3R4LT5jb21wLT5pZCA9PSBNRFBfQ09NUF9SRE1BMCAmJiBwcnoxKQo+ICsJCQlNTV9SRUdf V1JJVEUoY21kLCBzdWJzeXNfaWQsIHByejEtPnJlZ19iYXNlLCBQUlpfRU5BQkxFLAo+ICsJCQkJ ICAgICAweDAsIEJJVCgwKSk7Cj4gKwl9Cj4gKwo+ICsJLyogUmVzZXQgUkRNQSAqLwo+ICsJTU1f UkVHX1dSSVRFKGNtZCwgc3Vic3lzX2lkLCBiYXNlLCBNRFBfUkRNQV9SRVNFVCwgQklUKDApLCBC SVQoMCkpOwo+ICsJTU1fUkVHX1BPTEwoY21kLCBzdWJzeXNfaWQsIGJhc2UsIE1EUF9SRE1BX01P Tl9TVEFfMSwgQklUKDgpLCBCSVQoOCkpOwo+ICsJTU1fUkVHX1dSSVRFKGNtZCwgc3Vic3lzX2lk LCBiYXNlLCBNRFBfUkRNQV9SRVNFVCwgMHgwLCBCSVQoMCkpOwo+ICsJcmV0dXJuIDA7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgY29uZmlnX3JkbWFfZnJhbWUoc3RydWN0IG1kcF9jb21wX2N0eCAq Y3R4LAo+ICsJCQkgICAgIHN0cnVjdCBtbXN5c19jbWRxX2NtZCAqY21kLAo+ICsJCQkgICAgIGNv bnN0IHN0cnVjdCB2NGwyX3JlY3QgKmNvbXBvc2UpCj4gK3sKPiArCWNvbnN0IHN0cnVjdCBtZHBf cmRtYV9kYXRhICpyZG1hID0gJmN0eC0+cGFyYW0tPnJkbWE7Cj4gKwljb25zdCBzdHJ1Y3QgbWRw X3BsYXRmb3JtX2NvbmZpZyAqbWRwX2NmZyA9IF9fZ2V0X3BsYXRfY2ZnKGN0eCk7Cj4gKwl1MzIg Y29sb3Jmb3JtYXQgPSBjdHgtPmlucHV0LT5idWZmZXIuZm9ybWF0LmNvbG9yZm9ybWF0Owo+ICsJ Ym9vbCBibG9jazEwYml0ID0gTURQX0NPTE9SX0lTXzEwQklUX1BBQ0tFRChjb2xvcmZvcm1hdCk7 Cj4gKwlib29sIGVuX3VmbyA9IE1EUF9DT0xPUl9JU19VRlAoY29sb3Jmb3JtYXQpOwo+ICsJcGh5 c19hZGRyX3QgYmFzZSA9IGN0eC0+Y29tcC0+cmVnX2Jhc2U7Cj4gKwl1OCBzdWJzeXNfaWQgPSBj dHgtPmNvbXAtPnN1YnN5c19pZDsKPiArCj4gKwlpZiAobWRwX2NmZyAmJiBtZHBfY2ZnLT5yZG1h X3N1cHBvcnRfMTBiaXQpIHsKPiArCQlpZiAoYmxvY2sxMGJpdCkKPiArCQkJTU1fUkVHX1dSSVRF KGNtZCwgc3Vic3lzX2lkLCBiYXNlLAo+ICsJCQkJICAgICBNRFBfUkRNQV9SRVNWX0RVTU1ZXzAs IDB4NywgMHg3KTsKPiArCQllbHNlCj4gKwkJCU1NX1JFR19XUklURShjbWQsIHN1YnN5c19pZCwg YmFzZSwKPiArCQkJCSAgICAgTURQX1JETUFfUkVTVl9EVU1NWV8wLCAweDAsIDB4Nyk7Cj4gKwl9 Cj4gKwo+ICsJLyogU2V0dXAgc21pIGNvbnRyb2wgKi8KPiArCU1NX1JFR19XUklURShjbWQsIHN1 YnN5c19pZCwgYmFzZSwgTURQX1JETUFfR01DSUZfQ09OLAo+ICsJCSAgICAgKDcgPDwgIDQpICsg Ly9idXJzdCB0eXBlIHRvIDgKPiArCQkgICAgICgxIDw8IDE2KSwgIC8vZW5hYmxlIHByZS11bHRy YQo+ICsJCSAgICAgMHgwMDAzMDA3MSk7Cj4gKwo+ICsJLyogU2V0dXAgc291cmNlIGZyYW1lIGlu Zm8gKi8KPiArCU1NX1JFR19XUklURShjbWQsIHN1YnN5c19pZCwgYmFzZSwgTURQX1JETUFfU1JD X0NPTiwgcmRtYS0+c3JjX2N0cmwsCj4gKwkJICAgICAweDAzQzhGRTBGKTsKPiArCj4gKwlpZiAo bWRwX2NmZykKPiArCQlpZiAobWRwX2NmZy0+cmRtYV9zdXBwb3J0XzEwYml0ICYmIGVuX3Vmbykg ewo+ICsJCQkvKiBTZXR1cCBzb3VyY2UgYnVmZmVyIGJhc2UgKi8KPiArCQkJTU1fUkVHX1dSSVRF KGNtZCwgc3Vic3lzX2lkLAo+ICsJCQkJICAgICBiYXNlLCBNRFBfUkRNQV9VRk9fREVDX0xFTkdU SF9CQVNFX1ksCj4gKwkJCQkgICAgIHJkbWEtPnVmb19kZWNfeSwgMHhGRkZGRkZGRik7Cj4gKwkJ CU1NX1JFR19XUklURShjbWQsIHN1YnN5c19pZCwKPiArCQkJCSAgICAgYmFzZSwgTURQX1JETUFf VUZPX0RFQ19MRU5HVEhfQkFTRV9DLAo+ICsJCQkJICAgICByZG1hLT51Zm9fZGVjX2MsIDB4RkZG RkZGRkYpOwo+ICsJCQkvKiBTZXQgMTBiaXQgc291cmNlIGZyYW1lIHBpdGNoICovCj4gKwkJCWlm IChibG9jazEwYml0KQo+ICsJCQkJTU1fUkVHX1dSSVRFKGNtZCwgc3Vic3lzX2lkLAo+ICsJCQkJ CSAgICAgYmFzZSwgTURQX1JETUFfTUZfQktHRF9TSVpFX0lOX1BYTCwKPiArCQkJCQkgICAgIHJk bWEtPm1mX2JrZ2RfaW5fcHhsLCAweDAwMUZGRkZGKTsKPiArCQl9Cj4gKwo+ICsJTU1fUkVHX1dS SVRFKGNtZCwgc3Vic3lzX2lkLCBiYXNlLCBNRFBfUkRNQV9DT04sIHJkbWEtPmNvbnRyb2wsCj4g KwkJICAgICAweDExMTApOwo+ICsJLyogU2V0dXAgc291cmNlIGJ1ZmZlciBiYXNlICovCj4gKwlN TV9SRUdfV1JJVEUoY21kLCBzdWJzeXNfaWQsIGJhc2UsIE1EUF9SRE1BX1NSQ19CQVNFXzAsIHJk bWEtPmlvdmFbMF0sCj4gKwkJICAgICAweEZGRkZGRkZGKTsKPiArCU1NX1JFR19XUklURShjbWQs IHN1YnN5c19pZCwgYmFzZSwgTURQX1JETUFfU1JDX0JBU0VfMSwgcmRtYS0+aW92YVsxXSwKPiAr CQkgICAgIDB4RkZGRkZGRkYpOwo+ICsJTU1fUkVHX1dSSVRFKGNtZCwgc3Vic3lzX2lkLCBiYXNl LCBNRFBfUkRNQV9TUkNfQkFTRV8yLCByZG1hLT5pb3ZhWzJdLAo+ICsJCSAgICAgMHhGRkZGRkZG Rik7Cj4gKwkvKiBTZXR1cCBzb3VyY2UgYnVmZmVyIGVuZCAqLwo+ICsJTU1fUkVHX1dSSVRFKGNt ZCwgc3Vic3lzX2lkLCBiYXNlLCBNRFBfUkRNQV9TUkNfRU5EXzAsCj4gKwkJICAgICByZG1hLT5p b3ZhX2VuZFswXSwgMHhGRkZGRkZGRik7Cj4gKwlNTV9SRUdfV1JJVEUoY21kLCBzdWJzeXNfaWQs IGJhc2UsIE1EUF9SRE1BX1NSQ19FTkRfMSwKPiArCQkgICAgIHJkbWEtPmlvdmFfZW5kWzFdLCAw eEZGRkZGRkZGKTsKPiArCU1NX1JFR19XUklURShjbWQsIHN1YnN5c19pZCwgYmFzZSwgTURQX1JE TUFfU1JDX0VORF8yLAo+ICsJCSAgICAgcmRtYS0+aW92YV9lbmRbMl0sIDB4RkZGRkZGRkYpOwo+ ICsJLyogU2V0dXAgc291cmNlIGZyYW1lIHBpdGNoICovCj4gKwlNTV9SRUdfV1JJVEUoY21kLCBz dWJzeXNfaWQsIGJhc2UsIE1EUF9SRE1BX01GX0JLR0RfU0laRV9JTl9CWVRFLAo+ICsJCSAgICAg cmRtYS0+bWZfYmtnZCwgMHgwMDFGRkZGRik7Cj4gKwlNTV9SRUdfV1JJVEUoY21kLCBzdWJzeXNf aWQsIGJhc2UsIE1EUF9SRE1BX1NGX0JLR0RfU0laRV9JTl9CWVRFLAo+ICsJCSAgICAgcmRtYS0+ c2ZfYmtnZCwgMHgwMDFGRkZGRik7Cj4gKwkvKiBTZXR1cCBjb2xvciB0cmFuc2Zvcm0gKi8KPiAr CU1NX1JFR19XUklURShjbWQsIHN1YnN5c19pZCwgYmFzZSwgTURQX1JETUFfVFJBTlNGT1JNXzAs Cj4gKwkJICAgICByZG1hLT50cmFuc2Zvcm0sIDB4MEYxMTAwMDApOwo+ICsKPiArCXJldHVybiAw Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGNvbmZpZ19yZG1hX3N1YmZybShzdHJ1Y3QgbWRwX2Nv bXBfY3R4ICpjdHgsCj4gKwkJCSAgICAgIHN0cnVjdCBtbXN5c19jbWRxX2NtZCAqY21kLCB1MzIg aW5kZXgpCj4gK3sKPiArCWNvbnN0IHN0cnVjdCBtZHBfcmRtYV9zdWJmcm0gKnN1YmZybSA9ICZj dHgtPnBhcmFtLT5yZG1hLnN1YmZybXNbaW5kZXhdOwo+ICsJY29uc3Qgc3RydWN0IGltZ19jb21w X3N1YmZybSAqY3NmID0gJmN0eC0+cGFyYW0tPnN1YmZybXNbaW5kZXhdOwo+ICsJY29uc3Qgc3Ry dWN0IG1kcF9wbGF0Zm9ybV9jb25maWcgKm1kcF9jZmcgPSBfX2dldF9wbGF0X2NmZyhjdHgpOwo+ ICsJdTMyIGNvbG9yZm9ybWF0ID0gY3R4LT5pbnB1dC0+YnVmZmVyLmZvcm1hdC5jb2xvcmZvcm1h dDsKPiArCWJvb2wgYmxvY2sxMGJpdCA9IE1EUF9DT0xPUl9JU18xMEJJVF9QQUNLRUQoY29sb3Jm b3JtYXQpOwo+ICsJYm9vbCBlbl91Zm8gPSBNRFBfQ09MT1JfSVNfVUZQKGNvbG9yZm9ybWF0KTsK PiArCXBoeXNfYWRkcl90IGJhc2UgPSBjdHgtPmNvbXAtPnJlZ19iYXNlOwo+ICsJdTggc3Vic3lz X2lkID0gY3R4LT5jb21wLT5zdWJzeXNfaWQ7Cj4gKwo+ICsJLyogRW5hYmxlIFJETUEgKi8KPiAr CU1NX1JFR19XUklURShjbWQsIHN1YnN5c19pZCwgYmFzZSwgTURQX1JETUFfRU4sIEJJVCgwKSwg QklUKDApKTsKPiArCj4gKwkvKiBTZXQgWSBwaXhlbCBvZmZzZXQgKi8KPiArCU1NX1JFR19XUklU RShjbWQsIHN1YnN5c19pZCwgYmFzZSwgTURQX1JETUFfU1JDX09GRlNFVF8wLAo+ICsJCSAgICAg c3ViZnJtLT5vZmZzZXRbMF0sIDB4RkZGRkZGRkYpOwo+ICsKPiArCS8qIFNldCAxMGJpdCBVRk8g bW9kZSAqLwo+ICsJaWYgKG1kcF9jZmcpCj4gKwkJaWYgKG1kcF9jZmctPnJkbWFfc3VwcG9ydF8x MGJpdCAmJiBibG9jazEwYml0ICYmIGVuX3VmbykKPiArCQkJTU1fUkVHX1dSSVRFKGNtZCwgc3Vi c3lzX2lkLCBiYXNlLAo+ICsJCQkJICAgICBNRFBfUkRNQV9TUkNfT0ZGU0VUXzBfUCwKPiArCQkJ CSAgICAgc3ViZnJtLT5vZmZzZXRfMF9wLCAweEZGRkZGRkZGKTsKPiArCj4gKwkvKiBTZXQgVSBw aXhlbCBvZmZzZXQgKi8KPiArCU1NX1JFR19XUklURShjbWQsIHN1YnN5c19pZCwgYmFzZSwgTURQ X1JETUFfU1JDX09GRlNFVF8xLAo+ICsJCSAgICAgc3ViZnJtLT5vZmZzZXRbMV0sIDB4RkZGRkZG RkYpOwo+ICsJLyogU2V0IFYgcGl4ZWwgb2Zmc2V0ICovCj4gKwlNTV9SRUdfV1JJVEUoY21kLCBz dWJzeXNfaWQsIGJhc2UsIE1EUF9SRE1BX1NSQ19PRkZTRVRfMiwKPiArCQkgICAgIHN1YmZybS0+ b2Zmc2V0WzJdLCAweEZGRkZGRkZGKTsKPiArCS8qIFNldCBzb3VyY2Ugc2l6ZSAqLwo+ICsJTU1f UkVHX1dSSVRFKGNtZCwgc3Vic3lzX2lkLCBiYXNlLCBNRFBfUkRNQV9NRl9TUkNfU0laRSwgc3Vi ZnJtLT5zcmMsCj4gKwkJICAgICAweDFGRkYxRkZGKTsKPiArCS8qIFNldCB0YXJnZXQgc2l6ZSAq Lwo+ICsJTU1fUkVHX1dSSVRFKGNtZCwgc3Vic3lzX2lkLCBiYXNlLCBNRFBfUkRNQV9NRl9DTElQ X1NJWkUsCj4gKwkJICAgICBzdWJmcm0tPmNsaXAsIDB4MUZGRjFGRkYpOwo+ICsJLyogU2V0IGNy b3Agb2Zmc2V0ICovCj4gKwlNTV9SRUdfV1JJVEUoY21kLCBzdWJzeXNfaWQsIGJhc2UsIE1EUF9S RE1BX01GX09GRlNFVF8xLAo+ICsJCSAgICAgc3ViZnJtLT5jbGlwX29mc3QsIDB4MDAzRjAwMUYp Owo+ICsKPiArCWlmIChtZHBfY2ZnICYmIG1kcF9jZmctPnJkbWFfdXBzYW1wbGVfcmVwZWF0X29u bHkpCj4gKwkJaWYgKChjc2YtPmluLnJpZ2h0IC0gY3NmLT5pbi5sZWZ0ICsgMSkgPiAzMjApCj4g KwkJCU1NX1JFR19XUklURShjbWQsIHN1YnN5c19pZCwgYmFzZSwKPiArCQkJCSAgICAgTURQX1JE TUFfUkVTVl9EVU1NWV8wLCBCSVQoMiksIEJJVCgyKSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgd2FpdF9yZG1hX2V2ZW50KHN0cnVjdCBtZHBfY29tcF9jdHggKmN0 eCwgc3RydWN0IG1tc3lzX2NtZHFfY21kICpjbWQpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRl diA9ICZjdHgtPmNvbXAtPm1kcF9kZXYtPnBkZXYtPmRldjsKPiArCXBoeXNfYWRkcl90IGJhc2Ug PSBjdHgtPmNvbXAtPnJlZ19iYXNlOwo+ICsJdTggc3Vic3lzX2lkID0gY3R4LT5jb21wLT5zdWJz eXNfaWQ7Cj4gKwo+ICsJaWYgKGN0eC0+Y29tcC0+YWxpYXNfaWQgPT0gMCkKPiArCQlNTV9SRUdf V0FJVChjbWQsIFJETUEwX0RPTkUpOwo+ICsJZWxzZQo+ICsJCWRldl9lcnIoZGV2LCAiRG8gbm90 IHN1cHBvcnQgUkRNQTFfRE9ORSBldmVudFxuIik7Cj4gKwo+ICsJLyogRGlzYWJsZSBSRE1BICov Cj4gKwlNTV9SRUdfV1JJVEUoY21kLCBzdWJzeXNfaWQsIGJhc2UsIE1EUF9SRE1BX0VOLCAweDAs IEJJVCgwKSk7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBt ZHBfY29tcF9vcHMgcmRtYV9vcHMgPSB7Cj4gKwkuZ2V0X2NvbXBfZmxhZyA9IGdldF9jb21wX2Zs YWcsCj4gKwkuaW5pdF9jb21wID0gaW5pdF9yZG1hLAo+ICsJLmNvbmZpZ19mcmFtZSA9IGNvbmZp Z19yZG1hX2ZyYW1lLAo+ICsJLmNvbmZpZ19zdWJmcm0gPSBjb25maWdfcmRtYV9zdWJmcm0sCj4g Kwkud2FpdF9jb21wX2V2ZW50ID0gd2FpdF9yZG1hX2V2ZW50LAo+ICsJLmFkdmFuY2Vfc3ViZnJt ID0gTlVMTCwKPiArCS5wb3N0X3Byb2Nlc3MgPSBOVUxMLAo+ICt9Owo+ICsKPiArc3RhdGljIGlu dCBpbml0X3JzeihzdHJ1Y3QgbWRwX2NvbXBfY3R4ICpjdHgsIHN0cnVjdCBtbXN5c19jbWRxX2Nt ZCAqY21kKQo+ICt7Cj4gKwlwaHlzX2FkZHJfdCBiYXNlID0gY3R4LT5jb21wLT5yZWdfYmFzZTsK PiArCXU4IHN1YnN5c19pZCA9IGN0eC0+Y29tcC0+c3Vic3lzX2lkOwo+ICsKPiArCS8qIFJlc2V0 IFJTWiAqLwo+ICsJTU1fUkVHX1dSSVRFKGNtZCwgc3Vic3lzX2lkLCBiYXNlLCBQUlpfRU5BQkxF LCAweDEwMDAwLCBCSVQoMTYpKTsKPiArCU1NX1JFR19XUklURShjbWQsIHN1YnN5c19pZCwgYmFz ZSwgUFJaX0VOQUJMRSwgMHgwLCBCSVQoMTYpKTsKPiArCS8qIEVuYWJsZSBSU1ogKi8KPiArCU1N X1JFR19XUklURShjbWQsIHN1YnN5c19pZCwgYmFzZSwgUFJaX0VOQUJMRSwgQklUKDApLCBCSVQo MCkpOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgY29uZmlnX3Jzel9mcmFt ZShzdHJ1Y3QgbWRwX2NvbXBfY3R4ICpjdHgsCj4gKwkJCSAgICBzdHJ1Y3QgbW1zeXNfY21kcV9j bWQgKmNtZCwKPiArCQkJICAgIGNvbnN0IHN0cnVjdCB2NGwyX3JlY3QgKmNvbXBvc2UpCj4gK3sK PiArCWNvbnN0IHN0cnVjdCBtZHBfcnN6X2RhdGEgKnJzeiA9ICZjdHgtPnBhcmFtLT5yc3o7Cj4g KwlwaHlzX2FkZHJfdCBiYXNlID0gY3R4LT5jb21wLT5yZWdfYmFzZTsKPiArCXU4IHN1YnN5c19p ZCA9IGN0eC0+Y29tcC0+c3Vic3lzX2lkOwo+ICsKPiArCWlmIChjdHgtPnBhcmFtLT5mcmFtZS5i eXBhc3MpIHsKPiArCQkvKiBEaXNhYmxlIFJTWiAqLwo+ICsJCU1NX1JFR19XUklURShjbWQsIHN1 YnN5c19pZCwgYmFzZSwgUFJaX0VOQUJMRSwgMHgwLCBCSVQoMCkpOwo+ICsJCXJldHVybiAwOwo+ ICsJfQo+ICsKPiArCU1NX1JFR19XUklURShjbWQsIHN1YnN5c19pZCwgYmFzZSwgUFJaX0NPTlRS T0xfMSwgcnN6LT5jb250cm9sMSwKPiArCQkgICAgIDB4MDNGRkZERjMpOwo+ICsJTU1fUkVHX1dS SVRFKGNtZCwgc3Vic3lzX2lkLCBiYXNlLCBQUlpfQ09OVFJPTF8yLCByc3otPmNvbnRyb2wyLAo+ ICsJCSAgICAgMHgwRkZGQzI5MCk7Cj4gKwlNTV9SRUdfV1JJVEUoY21kLCBzdWJzeXNfaWQsIGJh c2UsIFBSWl9IT1JJWk9OVEFMX0NPRUZGX1NURVAsCj4gKwkJICAgICByc3otPmNvZWZmX3N0ZXBf eCwgMHgwMDdGRkZGRik7Cj4gKwlNTV9SRUdfV1JJVEUoY21kLCBzdWJzeXNfaWQsIGJhc2UsIFBS Wl9WRVJUSUNBTF9DT0VGRl9TVEVQLAo+ICsJCSAgICAgcnN6LT5jb2VmZl9zdGVwX3ksIDB4MDA3 RkZGRkYpOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgY29uZmlnX3Jzel9z dWJmcm0oc3RydWN0IG1kcF9jb21wX2N0eCAqY3R4LAo+ICsJCQkgICAgIHN0cnVjdCBtbXN5c19j bWRxX2NtZCAqY21kLCB1MzIgaW5kZXgpCj4gK3sKPiArCWNvbnN0IHN0cnVjdCBtZHBfcnN6X3N1 YmZybSAqc3ViZnJtID0gJmN0eC0+cGFyYW0tPnJzei5zdWJmcm1zW2luZGV4XTsKPiArCWNvbnN0 IHN0cnVjdCBpbWdfY29tcF9zdWJmcm0gKmNzZiA9ICZjdHgtPnBhcmFtLT5zdWJmcm1zW2luZGV4 XTsKPiArCWNvbnN0IHN0cnVjdCBtZHBfcGxhdGZvcm1fY29uZmlnICptZHBfY2ZnID0gX19nZXRf cGxhdF9jZmcoY3R4KTsKPiArCXBoeXNfYWRkcl90IGJhc2UgPSBjdHgtPmNvbXAtPnJlZ19iYXNl Owo+ICsJdTggc3Vic3lzX2lkID0gY3R4LT5jb21wLT5zdWJzeXNfaWQ7Cj4gKwo+ICsJTU1fUkVH X1dSSVRFKGNtZCwgc3Vic3lzX2lkLCBiYXNlLCBQUlpfQ09OVFJPTF8yLCBzdWJmcm0tPmNvbnRy b2wyLAo+ICsJCSAgICAgMHgwMDAwMzgwMCk7Cj4gKwlNTV9SRUdfV1JJVEUoY21kLCBzdWJzeXNf aWQsIGJhc2UsIFBSWl9JTlBVVF9JTUFHRSwgc3ViZnJtLT5zcmMsCj4gKwkJICAgICAweEZGRkZG RkZGKTsKPiArCj4gKwlpZiAobWRwX2NmZyAmJiBtZHBfY2ZnLT5yc3pfZGlzYWJsZV9kY21fc21h bGxfc2FtcGxlKQo+ICsJCWlmICgoY3NmLT5pbi5yaWdodCAtIGNzZi0+aW4ubGVmdCArIDEpIDw9 IDE2KQo+ICsJCQlNTV9SRUdfV1JJVEUoY21kLCBzdWJzeXNfaWQsIGJhc2UsIFBSWl9DT05UUk9M XzEsCj4gKwkJCQkgICAgIEJJVCgyNyksIEJJVCgyNykpOwo+ICsKPiArCU1NX1JFR19XUklURShj bWQsIHN1YnN5c19pZCwgYmFzZSwgUFJaX0xVTUFfSE9SSVpPTlRBTF9JTlRFR0VSX09GRlNFVCwK PiArCQkgICAgIGNzZi0+bHVtYS5sZWZ0LCAweEZGRkYpOwo+ICsJTU1fUkVHX1dSSVRFKGNtZCwg c3Vic3lzX2lkLAo+ICsJCSAgICAgYmFzZSwgUFJaX0xVTUFfSE9SSVpPTlRBTF9TVUJQSVhFTF9P RkZTRVQsCj4gKwkJICAgICBjc2YtPmx1bWEubGVmdF9zdWJwaXgsIDB4MUZGRkZGKTsKPiArCU1N X1JFR19XUklURShjbWQsIHN1YnN5c19pZCwgYmFzZSwgUFJaX0xVTUFfVkVSVElDQUxfSU5URUdF Ul9PRkZTRVQsCj4gKwkJICAgICBjc2YtPmx1bWEudG9wLCAweEZGRkYpOwo+ICsJTU1fUkVHX1dS SVRFKGNtZCwgc3Vic3lzX2lkLCBiYXNlLCBQUlpfTFVNQV9WRVJUSUNBTF9TVUJQSVhFTF9PRkZT RVQsCj4gKwkJICAgICBjc2YtPmx1bWEudG9wX3N1YnBpeCwgMHgxRkZGRkYpOwo+ICsJTU1fUkVH X1dSSVRFKGNtZCwgc3Vic3lzX2lkLAo+ICsJCSAgICAgYmFzZSwgUFJaX0NIUk9NQV9IT1JJWk9O VEFMX0lOVEVHRVJfT0ZGU0VULAo+ICsJCSAgICAgY3NmLT5jaHJvbWEubGVmdCwgMHhGRkZGKTsK PiArCU1NX1JFR19XUklURShjbWQsIHN1YnN5c19pZCwKPiArCQkgICAgIGJhc2UsIFBSWl9DSFJP TUFfSE9SSVpPTlRBTF9TVUJQSVhFTF9PRkZTRVQsCj4gKwkJICAgICBjc2YtPmNocm9tYS5sZWZ0 X3N1YnBpeCwgMHgxRkZGRkYpOwo+ICsKPiArCU1NX1JFR19XUklURShjbWQsIHN1YnN5c19pZCwg YmFzZSwgUFJaX09VVFBVVF9JTUFHRSwgc3ViZnJtLT5jbGlwLAo+ICsJCSAgICAgMHhGRkZGRkZG Rik7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYWR2YW5jZV9yc3pf c3ViZnJtKHN0cnVjdCBtZHBfY29tcF9jdHggKmN0eCwKPiArCQkJICAgICAgc3RydWN0IG1tc3lz X2NtZHFfY21kICpjbWQsIHUzMiBpbmRleCkKPiArewo+ICsJY29uc3Qgc3RydWN0IG1kcF9wbGF0 Zm9ybV9jb25maWcgKm1kcF9jZmcgPSBfX2dldF9wbGF0X2NmZyhjdHgpOwo+ICsKPiArCWlmICht ZHBfY2ZnICYmIG1kcF9jZmctPnJzel9kaXNhYmxlX2RjbV9zbWFsbF9zYW1wbGUpIHsKPiArCQlj b25zdCBzdHJ1Y3QgaW1nX2NvbXBfc3ViZnJtICpjc2YgPSAmY3R4LT5wYXJhbS0+c3ViZnJtc1tp bmRleF07Cj4gKwkJcGh5c19hZGRyX3QgYmFzZSA9IGN0eC0+Y29tcC0+cmVnX2Jhc2U7Cj4gKwkJ dTggc3Vic3lzX2lkID0gY3R4LT5jb21wLT5zdWJzeXNfaWQ7Cj4gKwo+ICsJCWlmICgoY3NmLT5p bi5yaWdodCAtIGNzZi0+aW4ubGVmdCArIDEpIDw9IDE2KQo+ICsJCQlNTV9SRUdfV1JJVEUoY21k LCBzdWJzeXNfaWQsIGJhc2UsIFBSWl9DT05UUk9MXzEsIDB4MCwKPiArCQkJCSAgICAgQklUKDI3 KSk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgbWRwX2NvbXBfb3BzIHJzel9vcHMgPSB7Cj4gKwkuZ2V0X2NvbXBfZmxhZyA9IGdldF9jb21w X2ZsYWcsCj4gKwkuaW5pdF9jb21wID0gaW5pdF9yc3osCj4gKwkuY29uZmlnX2ZyYW1lID0gY29u ZmlnX3Jzel9mcmFtZSwKPiArCS5jb25maWdfc3ViZnJtID0gY29uZmlnX3Jzel9zdWJmcm0sCj4g Kwkud2FpdF9jb21wX2V2ZW50ID0gTlVMTCwKPiArCS5hZHZhbmNlX3N1YmZybSA9IGFkdmFuY2Vf cnN6X3N1YmZybSwKPiArCS5wb3N0X3Byb2Nlc3MgPSBOVUxMLAo+ICt9Owo+ICsKPiArc3RhdGlj IGludCBpbml0X3dyb3Qoc3RydWN0IG1kcF9jb21wX2N0eCAqY3R4LCBzdHJ1Y3QgbW1zeXNfY21k cV9jbWQgKmNtZCkKPiArewo+ICsJcGh5c19hZGRyX3QgYmFzZSA9IGN0eC0+Y29tcC0+cmVnX2Jh c2U7Cj4gKwl1OCBzdWJzeXNfaWQgPSBjdHgtPmNvbXAtPnN1YnN5c19pZDsKPiArCj4gKwkvKiBS ZXNldCBXUk9UICovCj4gKwlNTV9SRUdfV1JJVEUoY21kLCBzdWJzeXNfaWQsIGJhc2UsIFZJRE9f U09GVF9SU1QsIEJJVCgwKSwgQklUKDApKTsKPiArCU1NX1JFR19QT0xMKGNtZCwgc3Vic3lzX2lk LCBiYXNlLCBWSURPX1NPRlRfUlNUX1NUQVQsIEJJVCgwKSwgQklUKDApKTsKPiArCU1NX1JFR19X UklURShjbWQsIHN1YnN5c19pZCwgYmFzZSwgVklET19TT0ZUX1JTVCwgMHgwLCBCSVQoMCkpOwo+ ICsJTU1fUkVHX1BPTEwoY21kLCBzdWJzeXNfaWQsIGJhc2UsIFZJRE9fU09GVF9SU1RfU1RBVCwg MHgwLCBCSVQoMCkpOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgY29uZmln X3dyb3RfZnJhbWUoc3RydWN0IG1kcF9jb21wX2N0eCAqY3R4LAo+ICsJCQkgICAgIHN0cnVjdCBt bXN5c19jbWRxX2NtZCAqY21kLAo+ICsJCQkgICAgIGNvbnN0IHN0cnVjdCB2NGwyX3JlY3QgKmNv bXBvc2UpCj4gK3sKPiArCWNvbnN0IHN0cnVjdCBtZHBfd3JvdF9kYXRhICp3cm90ID0gJmN0eC0+ cGFyYW0tPndyb3Q7Cj4gKwljb25zdCBzdHJ1Y3QgbWRwX3BsYXRmb3JtX2NvbmZpZyAqbWRwX2Nm ZyA9IF9fZ2V0X3BsYXRfY2ZnKGN0eCk7Cj4gKwlwaHlzX2FkZHJfdCBiYXNlID0gY3R4LT5jb21w LT5yZWdfYmFzZTsKPiArCXU4IHN1YnN5c19pZCA9IGN0eC0+Y29tcC0+c3Vic3lzX2lkOwo+ICsK PiArCS8qIFdyaXRlIGZyYW1lIGJhc2UgYWRkcmVzcyAqLwo+ICsJTU1fUkVHX1dSSVRFKGNtZCwg c3Vic3lzX2lkLCBiYXNlLCBWSURPX0JBU0VfQUREUiwgd3JvdC0+aW92YVswXSwKPiArCQkgICAg IDB4RkZGRkZGRkYpOwo+ICsJTU1fUkVHX1dSSVRFKGNtZCwgc3Vic3lzX2lkLCBiYXNlLCBWSURP X0JBU0VfQUREUl9DLCB3cm90LT5pb3ZhWzFdLAo+ICsJCSAgICAgMHhGRkZGRkZGRik7Cj4gKwlN TV9SRUdfV1JJVEUoY21kLCBzdWJzeXNfaWQsIGJhc2UsIFZJRE9fQkFTRV9BRERSX1YsIHdyb3Qt PmlvdmFbMl0sCj4gKwkJICAgICAweEZGRkZGRkZGKTsKPiArCS8qIFdyaXRlIGZyYW1lIHJlbGF0 ZWQgcmVnaXN0ZXJzICovCj4gKwlNTV9SRUdfV1JJVEUoY21kLCBzdWJzeXNfaWQsIGJhc2UsIFZJ RE9fQ1RSTCwgd3JvdC0+Y29udHJvbCwKPiArCQkgICAgIDB4RjEzMTUxMEYpOwo+ICsJLyogV3Jp dGUgZnJhbWUgWSBwaXRjaCAqLwo+ICsJTU1fUkVHX1dSSVRFKGNtZCwgc3Vic3lzX2lkLCBiYXNl LCBWSURPX1NUUklERSwgd3JvdC0+c3RyaWRlWzBdLAo+ICsJCSAgICAgMHgwMDAwRkZGRik7Cj4g KwkvKiBXcml0ZSBmcmFtZSBVViBwaXRjaCAqLwo+ICsJTU1fUkVHX1dSSVRFKGNtZCwgc3Vic3lz X2lkLCBiYXNlLCBWSURPX1NUUklERV9DLCB3cm90LT5zdHJpZGVbMV0sCj4gKwkJICAgICAweEZG RkYpOwo+ICsJTU1fUkVHX1dSSVRFKGNtZCwgc3Vic3lzX2lkLCBiYXNlLCBWSURPX1NUUklERV9W LCB3cm90LT5zdHJpZGVbMl0sCj4gKwkJICAgICAweEZGRkYpOwo+ICsJLyogV3JpdGUgbWF0cml4 IGNvbnRyb2wgKi8KPiArCU1NX1JFR19XUklURShjbWQsIHN1YnN5c19pZCwgYmFzZSwgVklET19N QVRfQ1RSTCwgd3JvdC0+bWF0X2N0cmwsIDB4RjMpOwo+ICsKPiArCS8qIFNldCB0aGUgZml4ZWQg QUxQSEEgYXMgMHhGRiAqLwo+ICsJTU1fUkVHX1dSSVRFKGNtZCwgc3Vic3lzX2lkLCBiYXNlLCBW SURPX0RJVEhFUiwgMHhGRjAwMDAwMCwKPiArCQkgICAgIDB4RkYwMDAwMDApOwo+ICsJLyogU2V0 IFZJRE9fRU9MX1NFTCAqLwo+ICsJTU1fUkVHX1dSSVRFKGNtZCwgc3Vic3lzX2lkLCBiYXNlLCBW SURPX1JTVl8xLCBCSVQoMzEpLCBCSVQoMzEpKTsKPiArCS8qIFNldCBWSURPX0ZJRk9fVEVTVCAq Lwo+ICsJaWYgKHdyb3QtPmZpZm9fdGVzdCAhPSAwKQo+ICsJCU1NX1JFR19XUklURShjbWQsIHN1 YnN5c19pZCwgYmFzZSwgVklET19GSUZPX1RFU1QsCj4gKwkJCSAgICAgd3JvdC0+Zmlmb190ZXN0 LCAweEZGRik7Cj4gKwkvKiBGaWx0ZXIgZW5hYmxlICovCj4gKwlpZiAobWRwX2NmZyAmJiBtZHBf Y2ZnLT53cm90X2ZpbHRlcl9jb25zdHJhaW50KQo+ICsJCU1NX1JFR19XUklURShjbWQsIHN1YnN5 c19pZCwgYmFzZSwgVklET19NQUlOX0JVRl9TSVpFLAo+ICsJCQkgICAgIHdyb3QtPmZpbHRlciwg MHg3Nyk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgY29uZmlnX3dy b3Rfc3ViZnJtKHN0cnVjdCBtZHBfY29tcF9jdHggKmN0eCwKPiArCQkJICAgICAgc3RydWN0IG1t c3lzX2NtZHFfY21kICpjbWQsIHUzMiBpbmRleCkKPiArewo+ICsJY29uc3Qgc3RydWN0IG1kcF93 cm90X3N1YmZybSAqc3ViZnJtID0gJmN0eC0+cGFyYW0tPndyb3Quc3ViZnJtc1tpbmRleF07Cj4g KwlwaHlzX2FkZHJfdCBiYXNlID0gY3R4LT5jb21wLT5yZWdfYmFzZTsKPiArCXU4IHN1YnN5c19p ZCA9IGN0eC0+Y29tcC0+c3Vic3lzX2lkOwo+ICsKPiArCS8qIFdyaXRlIFkgcGl4ZWwgb2Zmc2V0 ICovCj4gKwlNTV9SRUdfV1JJVEUoY21kLCBzdWJzeXNfaWQsIGJhc2UsIFZJRE9fT0ZTVF9BRERS LAo+ICsJCSAgICAgc3ViZnJtLT5vZmZzZXRbMF0sIDB4MEZGRkZGRkYpOwo+ICsJLyogV3JpdGUg VSBwaXhlbCBvZmZzZXQgKi8KPiArCU1NX1JFR19XUklURShjbWQsIHN1YnN5c19pZCwgYmFzZSwg VklET19PRlNUX0FERFJfQywKPiArCQkgICAgIHN1YmZybS0+b2Zmc2V0WzFdLCAweDBGRkZGRkZG KTsKPiArCS8qIFdyaXRlIFYgcGl4ZWwgb2Zmc2V0ICovCj4gKwlNTV9SRUdfV1JJVEUoY21kLCBz dWJzeXNfaWQsIGJhc2UsIFZJRE9fT0ZTVF9BRERSX1YsCj4gKwkJICAgICBzdWJmcm0tPm9mZnNl dFsyXSwgMHgwRkZGRkZGRik7Cj4gKwkvKiBXcml0ZSBzb3VyY2Ugc2l6ZSAqLwo+ICsJTU1fUkVH X1dSSVRFKGNtZCwgc3Vic3lzX2lkLCBiYXNlLCBWSURPX0lOX1NJWkUsIHN1YmZybS0+c3JjLAo+ ICsJCSAgICAgMHgxRkZGMUZGRik7Cj4gKwkvKiBXcml0ZSB0YXJnZXQgc2l6ZSAqLwo+ICsJTU1f UkVHX1dSSVRFKGNtZCwgc3Vic3lzX2lkLCBiYXNlLCBWSURPX1RBUl9TSVpFLCBzdWJmcm0tPmNs aXAsCj4gKwkJICAgICAweDFGRkYxRkZGKTsKPiArCU1NX1JFR19XUklURShjbWQsIHN1YnN5c19p ZCwgYmFzZSwgVklET19DUk9QX09GU1QsIHN1YmZybS0+Y2xpcF9vZnN0LAo+ICsJCSAgICAgMHgx RkZGMUZGRik7Cj4gKwo+ICsJTU1fUkVHX1dSSVRFKGNtZCwgc3Vic3lzX2lkLCBiYXNlLCBWSURP X01BSU5fQlVGX1NJWkUsCj4gKwkJICAgICBzdWJmcm0tPm1haW5fYnVmLCAweDFGRkY3RjAwKTsK PiArCj4gKwkvKiBFbmFibGUgV1JPVCAqLwo+ICsJTU1fUkVHX1dSSVRFKGNtZCwgc3Vic3lzX2lk LCBiYXNlLCBWSURPX1JPVF9FTiwgQklUKDApLCBCSVQoMCkpOwo+ICsKPiArCXJldHVybiAwOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHdhaXRfd3JvdF9ldmVudChzdHJ1Y3QgbWRwX2NvbXBfY3R4 ICpjdHgsIHN0cnVjdCBtbXN5c19jbWRxX2NtZCAqY21kKQo+ICt7Cj4gKwljb25zdCBzdHJ1Y3Qg bWRwX3BsYXRmb3JtX2NvbmZpZyAqbWRwX2NmZyA9IF9fZ2V0X3BsYXRfY2ZnKGN0eCk7Cj4gKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSAmY3R4LT5jb21wLT5tZHBfZGV2LT5wZGV2LT5kZXY7Cj4gKwlw aHlzX2FkZHJfdCBiYXNlID0gY3R4LT5jb21wLT5yZWdfYmFzZTsKPiArCXU4IHN1YnN5c19pZCA9 IGN0eC0+Y29tcC0+c3Vic3lzX2lkOwo+ICsKPiArCWlmIChjdHgtPmNvbXAtPmFsaWFzX2lkID09 IDApCj4gKwkJTU1fUkVHX1dBSVQoY21kLCBXUk9UMF9ET05FKTsKPiArCWVsc2UKPiArCQlkZXZf ZXJyKGRldiwgIkRvIG5vdCBzdXBwb3J0IFdST1QxX0RPTkUgZXZlbnRcbiIpOwo+ICsKPiArCWlm IChtZHBfY2ZnICYmIG1kcF9jZmctPndyb3RfZmlsdGVyX2NvbnN0cmFpbnQpCj4gKwkJTU1fUkVH X1dSSVRFKGNtZCwgc3Vic3lzX2lkLCBiYXNlLCBWSURPX01BSU5fQlVGX1NJWkUsIDB4MCwKPiAr CQkJICAgICAweDc3KTsKPiArCj4gKwkvKiBEaXNhYmxlIFdST1QgKi8KPiArCU1NX1JFR19XUklU RShjbWQsIHN1YnN5c19pZCwgYmFzZSwgVklET19ST1RfRU4sIDB4MCwgQklUKDApKTsKPiArCj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBtZHBfY29tcF9vcHMg d3JvdF9vcHMgPSB7Cj4gKwkuZ2V0X2NvbXBfZmxhZyA9IGdldF9jb21wX2ZsYWcsCj4gKwkuaW5p dF9jb21wID0gaW5pdF93cm90LAo+ICsJLmNvbmZpZ19mcmFtZSA9IGNvbmZpZ193cm90X2ZyYW1l LAo+ICsJLmNvbmZpZ19zdWJmcm0gPSBjb25maWdfd3JvdF9zdWJmcm0sCj4gKwkud2FpdF9jb21w X2V2ZW50ID0gd2FpdF93cm90X2V2ZW50LAo+ICsJLmFkdmFuY2Vfc3ViZnJtID0gTlVMTCwKPiAr CS5wb3N0X3Byb2Nlc3MgPSBOVUxMLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBpbml0X3dkbWEo c3RydWN0IG1kcF9jb21wX2N0eCAqY3R4LCBzdHJ1Y3QgbW1zeXNfY21kcV9jbWQgKmNtZCkKPiAr ewo+ICsJcGh5c19hZGRyX3QgYmFzZSA9IGN0eC0+Y29tcC0+cmVnX2Jhc2U7Cj4gKwl1OCBzdWJz eXNfaWQgPSBjdHgtPmNvbXAtPnN1YnN5c19pZDsKPiArCj4gKwkvKiBSZXNldCBXRE1BICovCj4g KwlNTV9SRUdfV1JJVEUoY21kLCBzdWJzeXNfaWQsIGJhc2UsIFdETUFfUlNULCBCSVQoMCksIEJJ VCgwKSk7Cj4gKwlNTV9SRUdfUE9MTChjbWQsIHN1YnN5c19pZCwgYmFzZSwgV0RNQV9GTE9XX0NU UkxfREJHLCBCSVQoMCksIEJJVCgwKSk7Cj4gKwlNTV9SRUdfV1JJVEUoY21kLCBzdWJzeXNfaWQs IGJhc2UsIFdETUFfUlNULCAweDAsIEJJVCgwKSk7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAr c3RhdGljIGludCBjb25maWdfd2RtYV9mcmFtZShzdHJ1Y3QgbWRwX2NvbXBfY3R4ICpjdHgsCj4g KwkJCSAgICAgc3RydWN0IG1tc3lzX2NtZHFfY21kICpjbWQsCj4gKwkJCSAgICAgY29uc3Qgc3Ry dWN0IHY0bDJfcmVjdCAqY29tcG9zZSkKPiArewo+ICsJY29uc3Qgc3RydWN0IG1kcF93ZG1hX2Rh dGEgKndkbWEgPSAmY3R4LT5wYXJhbS0+d2RtYTsKPiArCXBoeXNfYWRkcl90IGJhc2UgPSBjdHgt PmNvbXAtPnJlZ19iYXNlOwo+ICsJdTggc3Vic3lzX2lkID0gY3R4LT5jb21wLT5zdWJzeXNfaWQ7 Cj4gKwo+ICsJTU1fUkVHX1dSSVRFKGNtZCwgc3Vic3lzX2lkLCBiYXNlLCBXRE1BX0JVRl9DT04y LCAweDEwMTAxMDUwLAo+ICsJCSAgICAgMHhGRkZGRkZGRik7Cj4gKwo+ICsJLyogU2V0dXAgZnJh bWUgaW5mb3JtYXRpb24gKi8KPiArCU1NX1JFR19XUklURShjbWQsIHN1YnN5c19pZCwgYmFzZSwg V0RNQV9DRkcsIHdkbWEtPndkbWFfY2ZnLAo+ICsJCSAgICAgMHgwRjAxQjhGMCk7Cj4gKwkvKiBT ZXR1cCBmcmFtZSBiYXNlIGFkZHJlc3MgKi8KPiArCU1NX1JFR19XUklURShjbWQsIHN1YnN5c19p ZCwgYmFzZSwgV0RNQV9EU1RfQUREUiwgICB3ZG1hLT5pb3ZhWzBdLAo+ICsJCSAgICAgMHhGRkZG RkZGRik7Cj4gKwlNTV9SRUdfV1JJVEUoY21kLCBzdWJzeXNfaWQsIGJhc2UsIFdETUFfRFNUX1Vf QUREUiwgd2RtYS0+aW92YVsxXSwKPiArCQkgICAgIDB4RkZGRkZGRkYpOwo+ICsJTU1fUkVHX1dS SVRFKGNtZCwgc3Vic3lzX2lkLCBiYXNlLCBXRE1BX0RTVF9WX0FERFIsIHdkbWEtPmlvdmFbMl0s Cj4gKwkJICAgICAweEZGRkZGRkZGKTsKPiArCS8qIFNldHVwIFkgcGl0Y2ggKi8KPiArCU1NX1JF R19XUklURShjbWQsIHN1YnN5c19pZCwgYmFzZSwgV0RNQV9EU1RfV19JTl9CWVRFLAo+ICsJCSAg ICAgd2RtYS0+d19pbl9ieXRlLCAweDAwMDBGRkZGKTsKPiArCS8qIFNldHVwIFVWIHBpdGNoICov Cj4gKwlNTV9SRUdfV1JJVEUoY21kLCBzdWJzeXNfaWQsIGJhc2UsIFdETUFfRFNUX1VWX1BJVENI LAo+ICsJCSAgICAgd2RtYS0+dXZfc3RyaWRlLCAweDAwMDBGRkZGKTsKPiArCS8qIFNldCB0aGUg Zml4ZWQgQUxQSEEgYXMgMHhGRiAqLwo+ICsJTU1fUkVHX1dSSVRFKGNtZCwgc3Vic3lzX2lkLCBi YXNlLCBXRE1BX0FMUEhBLCAweDgwMDAwMEZGLAo+ICsJCSAgICAgMHg4MDAwMDBGRik7Cj4gKwo+ ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgY29uZmlnX3dkbWFfc3ViZnJtKHN0 cnVjdCBtZHBfY29tcF9jdHggKmN0eCwKPiArCQkJICAgICAgc3RydWN0IG1tc3lzX2NtZHFfY21k ICpjbWQsIHUzMiBpbmRleCkKPiArewo+ICsJY29uc3Qgc3RydWN0IG1kcF93ZG1hX3N1YmZybSAq c3ViZnJtID0gJmN0eC0+cGFyYW0tPndkbWEuc3ViZnJtc1tpbmRleF07Cj4gKwlwaHlzX2FkZHJf dCBiYXNlID0gY3R4LT5jb21wLT5yZWdfYmFzZTsKPiArCXU4IHN1YnN5c19pZCA9IGN0eC0+Y29t cC0+c3Vic3lzX2lkOwo+ICsKPiArCS8qIFdyaXRlIFkgcGl4ZWwgb2Zmc2V0ICovCj4gKwlNTV9S RUdfV1JJVEUoY21kLCBzdWJzeXNfaWQsIGJhc2UsIFdETUFfRFNUX0FERFJfT0ZGU0VULAo+ICsJ CSAgICAgc3ViZnJtLT5vZmZzZXRbMF0sIDB4MEZGRkZGRkYpOwo+ICsJLyogV3JpdGUgVSBwaXhl bCBvZmZzZXQgKi8KPiArCU1NX1JFR19XUklURShjbWQsIHN1YnN5c19pZCwgYmFzZSwgV0RNQV9E U1RfVV9BRERSX09GRlNFVCwKPiArCQkgICAgIHN1YmZybS0+b2Zmc2V0WzFdLCAweDBGRkZGRkZG KTsKPiArCS8qIFdyaXRlIFYgcGl4ZWwgb2Zmc2V0ICovCj4gKwlNTV9SRUdfV1JJVEUoY21kLCBz dWJzeXNfaWQsIGJhc2UsIFdETUFfRFNUX1ZfQUREUl9PRkZTRVQsCj4gKwkJICAgICBzdWJmcm0t Pm9mZnNldFsyXSwgMHgwRkZGRkZGRik7Cj4gKwkvKiBXcml0ZSBzb3VyY2Ugc2l6ZSAqLwo+ICsJ TU1fUkVHX1dSSVRFKGNtZCwgc3Vic3lzX2lkLCBiYXNlLCBXRE1BX1NSQ19TSVpFLCBzdWJmcm0t PnNyYywKPiArCQkgICAgIDB4M0ZGRjNGRkYpOwo+ICsJLyogV3JpdGUgdGFyZ2V0IHNpemUgKi8K PiArCU1NX1JFR19XUklURShjbWQsIHN1YnN5c19pZCwgYmFzZSwgV0RNQV9DTElQX1NJWkUsIHN1 YmZybS0+Y2xpcCwKPiArCQkgICAgIDB4M0ZGRjNGRkYpOwo+ICsJLyogV3JpdGUgY2xpcCBvZmZz ZXQgKi8KPiArCU1NX1JFR19XUklURShjbWQsIHN1YnN5c19pZCwgYmFzZSwgV0RNQV9DTElQX0NP T1JELCBzdWJmcm0tPmNsaXBfb2ZzdCwKPiArCQkgICAgIDB4M0ZGRjNGRkYpOwo+ICsKPiArCS8q IEVuYWJsZSBXRE1BICovCj4gKwlNTV9SRUdfV1JJVEUoY21kLCBzdWJzeXNfaWQsIGJhc2UsIFdE TUFfRU4sIEJJVCgwKSwgQklUKDApKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3Rh dGljIGludCB3YWl0X3dkbWFfZXZlbnQoc3RydWN0IG1kcF9jb21wX2N0eCAqY3R4LCBzdHJ1Y3Qg bW1zeXNfY21kcV9jbWQgKmNtZCkKPiArewo+ICsJcGh5c19hZGRyX3QgYmFzZSA9IGN0eC0+Y29t cC0+cmVnX2Jhc2U7Cj4gKwl1OCBzdWJzeXNfaWQgPSBjdHgtPmNvbXAtPnN1YnN5c19pZDsKPiAr Cj4gKwlNTV9SRUdfV0FJVChjbWQsIFdETUEwX0RPTkUpOwo+ICsJLyogRGlzYWJsZSBXRE1BICov Cj4gKwlNTV9SRUdfV1JJVEUoY21kLCBzdWJzeXNfaWQsIGJhc2UsIFdETUFfRU4sIDB4MCwgQklU KDApKTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG1kcF9j b21wX29wcyB3ZG1hX29wcyA9IHsKPiArCS5nZXRfY29tcF9mbGFnID0gZ2V0X2NvbXBfZmxhZywK PiArCS5pbml0X2NvbXAgPSBpbml0X3dkbWEsCj4gKwkuY29uZmlnX2ZyYW1lID0gY29uZmlnX3dk bWFfZnJhbWUsCj4gKwkuY29uZmlnX3N1YmZybSA9IGNvbmZpZ193ZG1hX3N1YmZybSwKPiArCS53 YWl0X2NvbXBfZXZlbnQgPSB3YWl0X3dkbWFfZXZlbnQsCj4gKwkuYWR2YW5jZV9zdWJmcm0gPSBO VUxMLAo+ICsJLnBvc3RfcHJvY2VzcyA9IE5VTEwsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IGlu aXRfY2NvcnIoc3RydWN0IG1kcF9jb21wX2N0eCAqY3R4LCBzdHJ1Y3QgbW1zeXNfY21kcV9jbWQg KmNtZCkKPiArewo+ICsJcGh5c19hZGRyX3QgYmFzZSA9IGN0eC0+Y29tcC0+cmVnX2Jhc2U7Cj4g Kwl1OCBzdWJzeXNfaWQgPSBjdHgtPmNvbXAtPnN1YnN5c19pZDsKPiArCj4gKwkvKiBDQ09SUiBl bmFibGUgKi8KPiArCU1NX1JFR19XUklURShjbWQsIHN1YnN5c19pZCwgYmFzZSwgTURQX0NDT1JS X0VOLCBCSVQoMCksIEJJVCgwKSk7Cj4gKwkvKiBSZWxheSBtb2RlICovCj4gKwlNTV9SRUdfV1JJ VEUoY21kLCBzdWJzeXNfaWQsIGJhc2UsIE1EUF9DQ09SUl9DRkcsIEJJVCgwKSwgQklUKDApKTsK PiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGNvbmZpZ19jY29ycl9mcmFtZShz dHJ1Y3QgbWRwX2NvbXBfY3R4ICpjdHgsCj4gKwkJCSAgICAgIHN0cnVjdCBtbXN5c19jbWRxX2Nt ZCAqY21kLAo+ICsJCQkgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9yZWN0ICpjb21wb3NlKQo+ICt7 Cj4gKwkvKiBEaXNhYmxlZCBmdW5jdGlvbiAqLwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgY29uZmlnX2Njb3JyX3N1YmZybShzdHJ1Y3QgbWRwX2NvbXBfY3R4ICpjdHgsCj4g KwkJCSAgICAgICBzdHJ1Y3QgbW1zeXNfY21kcV9jbWQgKmNtZCwgdTMyIGluZGV4KQo+ICt7Cj4g Kwljb25zdCBzdHJ1Y3QgaW1nX2NvbXBfc3ViZnJtICpjc2YgPSAmY3R4LT5wYXJhbS0+c3ViZnJt c1tpbmRleF07Cj4gKwlwaHlzX2FkZHJfdCBiYXNlID0gY3R4LT5jb21wLT5yZWdfYmFzZTsKPiAr CXU4IHN1YnN5c19pZCA9IGN0eC0+Y29tcC0+c3Vic3lzX2lkOwo+ICsJdTMyIGhzaXplLCB2c2l6 ZTsKPiArCj4gKwloc2l6ZSA9IGNzZi0+aW4ucmlnaHQgLSBjc2YtPmluLmxlZnQgKyAxOwo+ICsJ dnNpemUgPSBjc2YtPmluLmJvdHRvbSAtIGNzZi0+aW4udG9wICsgMTsKPiArCU1NX1JFR19XUklU RShjbWQsIHN1YnN5c19pZCwgYmFzZSwgTURQX0NDT1JSX1NJWkUsCj4gKwkJICAgICAoaHNpemUg PDwgMTYpICsgKHZzaXplIDw8ICAwKSwgMHgxRkZGMUZGRik7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBtZHBfY29tcF9vcHMgY2NvcnJfb3BzID0gewo+ICsJ LmdldF9jb21wX2ZsYWcgPSBnZXRfY29tcF9mbGFnLAo+ICsJLmluaXRfY29tcCA9IGluaXRfY2Nv cnIsCj4gKwkuY29uZmlnX2ZyYW1lID0gY29uZmlnX2Njb3JyX2ZyYW1lLAo+ICsJLmNvbmZpZ19z dWJmcm0gPSBjb25maWdfY2NvcnJfc3ViZnJtLAo+ICsJLndhaXRfY29tcF9ldmVudCA9IE5VTEws Cj4gKwkuYWR2YW5jZV9zdWJmcm0gPSBOVUxMLAo+ICsJLnBvc3RfcHJvY2VzcyA9IE5VTEwsCj4g K307Cj4gKwo+ICtzdGF0aWMgaW50IGluaXRfaXNwKHN0cnVjdCBtZHBfY29tcF9jdHggKmN0eCwg c3RydWN0IG1tc3lzX2NtZHFfY21kICpjbWQpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9 IGN0eC0+Y29tcC0+bWRwX2Rldi0+bWRwX21tc3lzOwo+ICsJY29uc3Qgc3RydWN0IGlzcF9kYXRh ICppc3AgPSAmY3R4LT5wYXJhbS0+aXNwOwo+ICsKPiArCS8qIERpcmVjdCBsaW5rICovCj4gKwlp ZiAoaXNwLT5kbF9mbGFncyAmIEJJVChNRFBfQ09NUF9DQU1JTikpIHsKPiArCQlkZXZfZGJnKGRl diwgIlNXX1JTVCBBU1lOQyIpOwo+ICsJCW10a19tbXN5c19tZHBfaXNwX2N0cmwoZGV2LCBjbWQs IE1EUF9DT01QX0NBTUlOKTsKPiArCX0KPiArCj4gKwlpZiAoaXNwLT5kbF9mbGFncyAmIEJJVChN RFBfQ09NUF9DQU1JTjIpKSB7Cj4gKwkJZGV2X2RiZyhkZXYsICJTV19SU1QgQVNZTkMyIik7Cj4g KwkJbXRrX21tc3lzX21kcF9pc3BfY3RybChkZXYsIGNtZCwgTURQX0NPTVBfQ0FNSU4yKTsKPiAr CX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBjb25maWdfaXNwX2Zy YW1lKHN0cnVjdCBtZHBfY29tcF9jdHggKmN0eCwKPiArCQkJICAgIHN0cnVjdCBtbXN5c19jbWRx X2NtZCAqY21kLAo+ICsJCQkgICAgY29uc3Qgc3RydWN0IHY0bDJfcmVjdCAqY29tcG9zZSkKPiAr ewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJmN0eC0+Y29tcC0+bWRwX2Rldi0+cGRldi0+ZGV2 Owo+ICsJY29uc3Qgc3RydWN0IGlzcF9kYXRhICppc3AgPSAmY3R4LT5wYXJhbS0+aXNwOwo+ICsJ cGh5c19hZGRyX3QgYmFzZSA9IGN0eC0+Y29tcC0+cmVnX2Jhc2U7Cj4gKwl1OCBzdWJzeXNfaWQg PSBjdHgtPmNvbXAtPnN1YnN5c19pZDsKPiArCj4gKwkvKiBESVBfWF9TTVgxSV9CQVNFX0FERFIs IERJUF9YX1NNWDFPX0JBU0VfQUREUiAqLwo+ICsJTU1fUkVHX1dSSVRFX01BU0soY21kLCBzdWJz eXNfaWQsIGJhc2UsIDB4Mjg5MCwgaXNwLT5zbXhpX2lvdmFbMF0sCj4gKwkJCSAgMHhGRkZGRkZG Rik7Cj4gKwlNTV9SRUdfV1JJVEVfTUFTSyhjbWQsIHN1YnN5c19pZCwgYmFzZSwgMHgyN0QwLCBp c3AtPnNteGlfaW92YVswXSwKPiArCQkJICAweEZGRkZGRkZGKTsKPiArCS8qIERJUF9YX1NNWDJJ X0JBU0VfQUREUiwgRElQX1hfU01YMk9fQkFTRV9BRERSICovCj4gKwlNTV9SRUdfV1JJVEVfTUFT SyhjbWQsIHN1YnN5c19pZCwgYmFzZSwgMHgyOEMwLCBpc3AtPnNteGlfaW92YVsxXSwKPiArCQkJ ICAweEZGRkZGRkZGKTsKPiArCU1NX1JFR19XUklURV9NQVNLKGNtZCwgc3Vic3lzX2lkLCBiYXNl LCAweDI4MDAsIGlzcC0+c214aV9pb3ZhWzFdLAo+ICsJCQkgIDB4RkZGRkZGRkYpOwo+ICsJLyog RElQX1hfU01YM0lfQkFTRV9BRERSLCBESVBfWF9TTVgzT19CQVNFX0FERFIgKi8KPiArCU1NX1JF R19XUklURV9NQVNLKGNtZCwgc3Vic3lzX2lkLCBiYXNlLCAweDI4RjAsIGlzcC0+c214aV9pb3Zh WzJdLAo+ICsJCQkgIDB4RkZGRkZGRkYpOwo+ICsJTU1fUkVHX1dSSVRFX01BU0soY21kLCBzdWJz eXNfaWQsIGJhc2UsIDB4MjgzMCwgaXNwLT5zbXhpX2lvdmFbMl0sCj4gKwkJCSAgMHhGRkZGRkZG Rik7Cj4gKwkvKiBESVBfWF9TTVg0SV9CQVNFX0FERFIsIERJUF9YX1NNWDRPX0JBU0VfQUREUiAq Lwo+ICsJTU1fUkVHX1dSSVRFX01BU0soY21kLCBzdWJzeXNfaWQsIGJhc2UsIDB4MjkyMCwgaXNw LT5zbXhpX2lvdmFbM10sCj4gKwkJCSAgMHhGRkZGRkZGRik7Cj4gKwlNTV9SRUdfV1JJVEVfTUFT SyhjbWQsIHN1YnN5c19pZCwgYmFzZSwgMHgyODYwLCBpc3AtPnNteGlfaW92YVszXSwKPiArCQkJ ICAweEZGRkZGRkZGKTsKPiArCj4gKwlzd2l0Y2ggKGlzcC0+Y3FfaWR4KSB7Cj4gKwljYXNlIElT UF9EUlZfRElQX0NRX1RIUkUwOgo+ICsJCU1NX1JFR19XUklURV9NQVNLKGNtZCwgc3Vic3lzX2lk LCBiYXNlLCAweDIyMDgsCj4gKwkJCQkgIGlzcC0+Y3FfaW92YSwgMHhGRkZGRkZGRik7Cj4gKwkJ YnJlYWs7Cj4gKwljYXNlIElTUF9EUlZfRElQX0NRX1RIUkUxOgo+ICsJCU1NX1JFR19XUklURV9N QVNLKGNtZCwgc3Vic3lzX2lkLCBiYXNlLCAweDIyMTQsCj4gKwkJCQkgIGlzcC0+Y3FfaW92YSwg MHhGRkZGRkZGRik7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIElTUF9EUlZfRElQX0NRX1RIUkUyOgo+ ICsJCU1NX1JFR19XUklURV9NQVNLKGNtZCwgc3Vic3lzX2lkLCBiYXNlLCAweDIyMjAsCj4gKwkJ CQkgIGlzcC0+Y3FfaW92YSwgMHhGRkZGRkZGRik7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIElTUF9E UlZfRElQX0NRX1RIUkUzOgo+ICsJCU1NX1JFR19XUklURV9NQVNLKGNtZCwgc3Vic3lzX2lkLCBi YXNlLCAweDIyMkMsCj4gKwkJCQkgIGlzcC0+Y3FfaW92YSwgMHhGRkZGRkZGRik7Cj4gKwkJYnJl YWs7Cj4gKwljYXNlIElTUF9EUlZfRElQX0NRX1RIUkU0Ogo+ICsJCU1NX1JFR19XUklURV9NQVNL KGNtZCwgc3Vic3lzX2lkLCBiYXNlLCAweDIyMzgsCj4gKwkJCQkgIGlzcC0+Y3FfaW92YSwgMHhG RkZGRkZGRik7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIElTUF9EUlZfRElQX0NRX1RIUkU1Ogo+ICsJ CU1NX1JFR19XUklURV9NQVNLKGNtZCwgc3Vic3lzX2lkLCBiYXNlLCAweDIyNDQsCj4gKwkJCQkg IGlzcC0+Y3FfaW92YSwgMHhGRkZGRkZGRik7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIElTUF9EUlZf RElQX0NRX1RIUkU2Ogo+ICsJCU1NX1JFR19XUklURV9NQVNLKGNtZCwgc3Vic3lzX2lkLCBiYXNl LCAweDIyNTAsCj4gKwkJCQkgIGlzcC0+Y3FfaW92YSwgMHhGRkZGRkZGRik7Cj4gKwkJYnJlYWs7 Cj4gKwljYXNlIElTUF9EUlZfRElQX0NRX1RIUkU3Ogo+ICsJCU1NX1JFR19XUklURV9NQVNLKGNt ZCwgc3Vic3lzX2lkLCBiYXNlLCAweDIyNUMsCj4gKwkJCQkgIGlzcC0+Y3FfaW92YSwgMHhGRkZG RkZGRik7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIElTUF9EUlZfRElQX0NRX1RIUkU4Ogo+ICsJCU1N X1JFR19XUklURV9NQVNLKGNtZCwgc3Vic3lzX2lkLCBiYXNlLCAweDIyNjgsCj4gKwkJCQkgIGlz cC0+Y3FfaW92YSwgMHhGRkZGRkZGRik7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIElTUF9EUlZfRElQ X0NRX1RIUkU5Ogo+ICsJCU1NX1JFR19XUklURV9NQVNLKGNtZCwgc3Vic3lzX2lkLCBiYXNlLCAw eDIyNzQsCj4gKwkJCQkgIGlzcC0+Y3FfaW92YSwgMHhGRkZGRkZGRik7Cj4gKwkJYnJlYWs7Cj4g KwljYXNlIElTUF9EUlZfRElQX0NRX1RIUkUxMDoKPiArCQlNTV9SRUdfV1JJVEVfTUFTSyhjbWQs IHN1YnN5c19pZCwgYmFzZSwgMHgyMjgwLAo+ICsJCQkJICBpc3AtPmNxX2lvdmEsIDB4RkZGRkZG RkYpOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBJU1BfRFJWX0RJUF9DUV9USFJFMTE6Cj4gKwkJTU1f UkVHX1dSSVRFX01BU0soY21kLCBzdWJzeXNfaWQsIGJhc2UsIDB4MjI4QywKPiArCQkJCSAgaXNw LT5jcV9pb3ZhLCAweEZGRkZGRkZGKTsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJZGV2 X2VycihkZXYsICJEbyBub3Qgc3VwcG9ydCB0aGlzIGNxICglZCkiLCBpc3AtPmNxX2lkeCk7Cj4g KwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgY29uZmlnX2lzcF9zdWJmcm0oc3RydWN0IG1kcF9jb21wX2N0eCAqY3R4LAo+ICsJ CQkgICAgIHN0cnVjdCBtbXN5c19jbWRxX2NtZCAqY21kLCB1MzIgaW5kZXgpCj4gK3sKPiArCXBo eXNfYWRkcl90IGJhc2UgPSBjdHgtPmNvbXAtPnJlZ19iYXNlOwo+ICsJdTggc3Vic3lzX2lkID0g Y3R4LT5jb21wLT5zdWJzeXNfaWQ7Cj4gKwo+ICsJTU1fUkVHX1dSSVRFX01BU0soY21kLCBzdWJz eXNfaWQsIGJhc2UsIDB4MjMwNCwKPiArCQkJICBjdHgtPnBhcmFtLT5pc3AudHBpcGVfaW92YVtp bmRleF0sIDB4RkZGRkZGRkYpOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg d2FpdF9pc3BfZXZlbnQoc3RydWN0IG1kcF9jb21wX2N0eCAqY3R4LCBzdHJ1Y3QgbW1zeXNfY21k cV9jbWQgKmNtZCkKPiArewo+ICsJY29uc3Qgc3RydWN0IGlzcF9kYXRhICppc3AgPSAmY3R4LT5w YXJhbS0+aXNwOwo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJmN0eC0+Y29tcC0+bWRwX2Rldi0+ cGRldi0+ZGV2Owo+ICsJcGh5c19hZGRyX3QgYmFzZSA9IGN0eC0+Y29tcC0+cmVnX2Jhc2U7Cj4g Kwl1OCBzdWJzeXNfaWQgPSBjdHgtPmNvbXAtPnN1YnN5c19pZDsKPiArCj4gKwkvKiBNRFBfRExf U0VMOiBzZWxlY3QgTURQX0NST1AgKi8KPiArCWlmIChpc3AtPmRsX2ZsYWdzICYgQklUKE1EUF9D T01QX0NBTUlOKSkKPiArCQlNTV9SRUdfV1JJVEVfTUFTSyhjbWQsIHN1YnN5c19pZCwgYmFzZSwg MHgzMCwgMHgwLCBCSVQoOSkpOwo+ICsJLyogTURQMl9ETF9TRUw6IHNlbGVjdCBNRFBfQ1JPUDIg Ki8KPiArCWlmIChpc3AtPmRsX2ZsYWdzICYgQklUKE1EUF9DT01QX0NBTUlOMikpCj4gKwkJTU1f UkVHX1dSSVRFX01BU0soY21kLCBzdWJzeXNfaWQsIGJhc2UsIDB4MzAsIDB4MCwKPiArCQkJCSAg QklUKDEwKSB8IEJJVCgxMSkpOwo+ICsKPiArCXN3aXRjaCAoaXNwLT5jcV9pZHgpIHsKPiArCWNh c2UgSVNQX0RSVl9ESVBfQ1FfVEhSRTA6Cj4gKwkJTU1fUkVHX1dSSVRFX01BU0soY21kLCBzdWJz eXNfaWQsIGJhc2UsIDB4MjAwMCwgQklUKDApLCBCSVQoMCkpOwo+ICsJCU1NX1JFR19XQUlUKGNt ZCwgSVNQX1AyXzBfRE9ORSk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIElTUF9EUlZfRElQX0NRX1RI UkUxOgo+ICsJCU1NX1JFR19XUklURV9NQVNLKGNtZCwgc3Vic3lzX2lkLCBiYXNlLCAweDIwMDAs IEJJVCgxKSwgQklUKDEpKTsKPiArCQlNTV9SRUdfV0FJVChjbWQsIElTUF9QMl8xX0RPTkUpOwo+ ICsJCWJyZWFrOwo+ICsJY2FzZSBJU1BfRFJWX0RJUF9DUV9USFJFMjoKPiArCQlNTV9SRUdfV1JJ VEVfTUFTSyhjbWQsIHN1YnN5c19pZCwgYmFzZSwgMHgyMDAwLCBCSVQoMiksIEJJVCgyKSk7Cj4g KwkJTU1fUkVHX1dBSVQoY21kLCBJU1BfUDJfMl9ET05FKTsKPiArCQlicmVhazsKPiArCWNhc2Ug SVNQX0RSVl9ESVBfQ1FfVEhSRTM6Cj4gKwkJTU1fUkVHX1dSSVRFX01BU0soY21kLCBzdWJzeXNf aWQsIGJhc2UsIDB4MjAwMCwgQklUKDMpLCBCSVQoMykpOwo+ICsJCU1NX1JFR19XQUlUKGNtZCwg SVNQX1AyXzNfRE9ORSk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIElTUF9EUlZfRElQX0NRX1RIUkU0 Ogo+ICsJCU1NX1JFR19XUklURV9NQVNLKGNtZCwgc3Vic3lzX2lkLCBiYXNlLCAweDIwMDAsIEJJ VCg0KSwgQklUKDQpKTsKPiArCQlNTV9SRUdfV0FJVChjbWQsIElTUF9QMl80X0RPTkUpOwo+ICsJ CWJyZWFrOwo+ICsJY2FzZSBJU1BfRFJWX0RJUF9DUV9USFJFNToKPiArCQlNTV9SRUdfV1JJVEVf TUFTSyhjbWQsIHN1YnN5c19pZCwgYmFzZSwgMHgyMDAwLCBCSVQoNSksIEJJVCg1KSk7Cj4gKwkJ TU1fUkVHX1dBSVQoY21kLCBJU1BfUDJfNV9ET05FKTsKPiArCQlicmVhazsKPiArCWNhc2UgSVNQ X0RSVl9ESVBfQ1FfVEhSRTY6Cj4gKwkJTU1fUkVHX1dSSVRFX01BU0soY21kLCBzdWJzeXNfaWQs IGJhc2UsIDB4MjAwMCwgQklUKDYpLCBCSVQoNikpOwo+ICsJCU1NX1JFR19XQUlUKGNtZCwgSVNQ X1AyXzZfRE9ORSk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIElTUF9EUlZfRElQX0NRX1RIUkU3Ogo+ ICsJCU1NX1JFR19XUklURV9NQVNLKGNtZCwgc3Vic3lzX2lkLCBiYXNlLCAweDIwMDAsIEJJVCg3 KSwgQklUKDcpKTsKPiArCQlNTV9SRUdfV0FJVChjbWQsIElTUF9QMl83X0RPTkUpOwo+ICsJCWJy ZWFrOwo+ICsJY2FzZSBJU1BfRFJWX0RJUF9DUV9USFJFODoKPiArCQlNTV9SRUdfV1JJVEVfTUFT SyhjbWQsIHN1YnN5c19pZCwgYmFzZSwgMHgyMDAwLCBCSVQoOCksIEJJVCg4KSk7Cj4gKwkJTU1f UkVHX1dBSVQoY21kLCBJU1BfUDJfOF9ET05FKTsKPiArCQlicmVhazsKPiArCWNhc2UgSVNQX0RS Vl9ESVBfQ1FfVEhSRTk6Cj4gKwkJTU1fUkVHX1dSSVRFX01BU0soY21kLCBzdWJzeXNfaWQsIGJh c2UsIDB4MjAwMCwgQklUKDkpLCBCSVQoOSkpOwo+ICsJCU1NX1JFR19XQUlUKGNtZCwgSVNQX1Ay XzlfRE9ORSk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIElTUF9EUlZfRElQX0NRX1RIUkUxMDoKPiAr CQlNTV9SRUdfV1JJVEVfTUFTSyhjbWQsIHN1YnN5c19pZCwgYmFzZSwgMHgyMDAwLCBCSVQoMTAp LCBCSVQoMTApKTsKPiArCQlNTV9SRUdfV0FJVChjbWQsIElTUF9QMl8xMF9ET05FKTsKPiArCQli cmVhazsKPiArCWNhc2UgSVNQX0RSVl9ESVBfQ1FfVEhSRTExOgo+ICsJCU1NX1JFR19XUklURV9N QVNLKGNtZCwgc3Vic3lzX2lkLCBiYXNlLCAweDIwMDAsIEJJVCgxMSksIEJJVCgxMSkpOwo+ICsJ CU1NX1JFR19XQUlUKGNtZCwgSVNQX1AyXzExX0RPTkUpOwo+ICsJCWJyZWFrOwo+ICsJZGVmYXVs dDoKPiArCQlkZXZfZXJyKGRldiwgIkRvIG5vdCBzdXBwb3J0IHRoaXMgY3EgKCVkKSIsIGlzcC0+ Y3FfaWR4KTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiAr fQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBtZHBfY29tcF9vcHMgaW1naV9vcHMgPSB7Cj4g KwkuZ2V0X2NvbXBfZmxhZyA9IGdldF9jb21wX2ZsYWcsCj4gKwkuaW5pdF9jb21wID0gaW5pdF9p c3AsCj4gKwkuY29uZmlnX2ZyYW1lID0gY29uZmlnX2lzcF9mcmFtZSwKPiArCS5jb25maWdfc3Vi ZnJtID0gY29uZmlnX2lzcF9zdWJmcm0sCj4gKwkud2FpdF9jb21wX2V2ZW50ID0gd2FpdF9pc3Bf ZXZlbnQsCj4gKwkuYWR2YW5jZV9zdWJmcm0gPSBOVUxMLAo+ICsJLnBvc3RfcHJvY2VzcyA9IE5V TEwsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IGNvbmZpZ19jYW1pbl9zdWJmcm0oc3RydWN0IG1k cF9jb21wX2N0eCAqY3R4LAo+ICsJCQkgICAgICAgc3RydWN0IG1tc3lzX2NtZHFfY21kICpjbWQs IHUzMiBpbmRleCkKPiArewo+ICsJY29uc3Qgc3RydWN0IGltZ19jb21wX3N1YmZybSAqY3NmID0g JmN0eC0+cGFyYW0tPnN1YmZybXNbaW5kZXhdOwo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gY3R4 LT5jb21wLT5tZHBfZGV2LT5tZHBfbW1zeXM7Cj4gKwl1MzIgY2FtaW5fdywgY2FtaW5faDsKPiAr Cj4gKwljYW1pbl93ID0gY3NmLT5pbi5yaWdodCAtIGNzZi0+aW4ubGVmdCArIDE7Cj4gKwljYW1p bl9oID0gY3NmLT5pbi5ib3R0b20gLSBjc2YtPmluLnRvcCArIDE7Cj4gKwo+ICsJLyogQ29uZmln IGZvciBkaXJlY3QgbGluayAqLwo+ICsJaWYgKGN0eC0+Y29tcC0+YWxpYXNfaWQgPT0gMCkKPiAr CQltdGtfbW1zeXNfbWRwX2NhbWluX2N0cmwoZGV2LCBjbWQsIE1EUF9DT01QX0NBTUlOLAo+ICsJ CQkJCSBjYW1pbl93LCBjYW1pbl9oKTsKPiArCWlmIChjdHgtPmNvbXAtPmFsaWFzX2lkID09IDEp Cj4gKwkJbXRrX21tc3lzX21kcF9jYW1pbl9jdHJsKGRldiwgY21kLCBNRFBfQ09NUF9DQU1JTjIs Cj4gKwkJCQkJIGNhbWluX3csIGNhbWluX2gpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IG1kcF9jb21wX29wcyBjYW1pbl9vcHMgPSB7Cj4gKwkuZ2V0 X2NvbXBfZmxhZyA9IGdldF9jb21wX2ZsYWcsCj4gKwkuaW5pdF9jb21wID0gTlVMTCwKPiArCS5j b25maWdfZnJhbWUgPSBOVUxMLAo+ICsJLmNvbmZpZ19zdWJmcm0gPSBjb25maWdfY2FtaW5fc3Vi ZnJtLAo+ICsJLndhaXRfY29tcF9ldmVudCA9IE5VTEwsCj4gKwkuYWR2YW5jZV9zdWJmcm0gPSBO VUxMLAo+ICsJLnBvc3RfcHJvY2VzcyA9IE5VTEwsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qg c3RydWN0IG1kcF9jb21wX29wcyAqbWRwX2NvbXBfb3BzW01EUF9DT01QX1RZUEVfQ09VTlRdID0g ewo+ICsJW01EUF9DT01QX1RZUEVfUkRNQV0gPQkJJnJkbWFfb3BzLAo+ICsJW01EUF9DT01QX1RZ UEVfUlNaXSA9CQkmcnN6X29wcywKPiArCVtNRFBfQ09NUF9UWVBFX1dST1RdID0JCSZ3cm90X29w cywKPiArCVtNRFBfQ09NUF9UWVBFX1dETUFdID0JCSZ3ZG1hX29wcywKPiArCVtNRFBfQ09NUF9U WVBFX1BBVEgxXSA9CQlOVUxMLAo+ICsJW01EUF9DT01QX1RZUEVfUEFUSDJdID0JCU5VTEwsCj4g KwlbTURQX0NPTVBfVFlQRV9DQ09SUl0gPQkJJmNjb3JyX29wcywKPiArCVtNRFBfQ09NUF9UWVBF X0lNR0ldID0JCSZpbWdpX29wcywKPiArCVtNRFBfQ09NUF9UWVBFX0VYVE9dID0JCU5VTEwsCj4g KwlbTURQX0NPTVBfVFlQRV9ETF9QQVRIMV0gPQkmY2FtaW5fb3BzLAo+ICsJW01EUF9DT01QX1RZ UEVfRExfUEFUSDJdID0JJmNhbWluX29wcywKPiArfTsKPiArCj4gK3N0cnVjdCBtZHBfY29tcF9t YXRjaCB7Cj4gKwllbnVtIG10a19tZHBfY29tcF9pZCBpZDsKPiArCWVudW0gbWRwX2NvbXBfdHlw ZQl0eXBlOwo+ICsJdTMyCQkJYWxpYXNfaWQ7Cj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IG1kcF9jb21wX21hdGNoIG1kcF9jb21wX21hdGNoZXNbTURQX01BWF9DT01QX0NPVU5UXSA9 IHsKPiArCVtNRFBfQ09NUF9XUEVJXSA9CXsgTURQX0NPTVBfV1BFSSwgTURQX0NPTVBfVFlQRV9X UEVJLCAwIH0sCj4gKwlbTURQX0NPTVBfV1BFT10gPQl7IE1EUF9DT01QX1dQRU8sIE1EUF9DT01Q X1RZUEVfRVhUTywgMiB9LAo+ICsJW01EUF9DT01QX1dQRUkyXSA9CXsgTURQX0NPTVBfV1BFSTIs IE1EUF9DT01QX1RZUEVfV1BFSSwgMSB9LAo+ICsJW01EUF9DT01QX1dQRU8yXSA9CXsgTURQX0NP TVBfV1BFTzIsIE1EUF9DT01QX1RZUEVfRVhUTywgMyB9LAo+ICsJW01EUF9DT01QX0lTUF9JTUdJ XSA9CXsgTURQX0NPTVBfSVNQX0lNR0ksIE1EUF9DT01QX1RZUEVfSU1HSSwgMCB9LAo+ICsJW01E UF9DT01QX0lTUF9JTUdPXSA9CXsgTURQX0NPTVBfSVNQX0lNR08sIE1EUF9DT01QX1RZUEVfRVhU TywgMCB9LAo+ICsJW01EUF9DT01QX0lTUF9JTUcyT10gPQl7IE1EUF9DT01QX0lTUF9JTUcyTywg TURQX0NPTVBfVFlQRV9FWFRPLCAxIH0sCj4gKwo+ICsJW01EUF9DT01QX0NBTUlOXSA9CXsgTURQ X0NPTVBfQ0FNSU4sIE1EUF9DT01QX1RZUEVfRExfUEFUSDEsIDAgfSwKPiArCVtNRFBfQ09NUF9D QU1JTjJdID0JeyBNRFBfQ09NUF9DQU1JTjIsIE1EUF9DT01QX1RZUEVfRExfUEFUSDIsIDEgfSwK PiArCVtNRFBfQ09NUF9SRE1BMF0gPQl7IE1EUF9DT01QX1JETUEwLCBNRFBfQ09NUF9UWVBFX1JE TUEsIDAgfSwKPiArCVtNRFBfQ09NUF9DQ09SUjBdID0JeyBNRFBfQ09NUF9DQ09SUjAsIE1EUF9D T01QX1RZUEVfQ0NPUlIsIDAgfSwKPiArCVtNRFBfQ09NUF9SU1owXSA9CXsgTURQX0NPTVBfUlNa MCwgTURQX0NPTVBfVFlQRV9SU1osIDAgfSwKPiArCVtNRFBfQ09NUF9SU1oxXSA9CXsgTURQX0NP TVBfUlNaMSwgTURQX0NPTVBfVFlQRV9SU1osIDEgfSwKPiArCVtNRFBfQ09NUF9QQVRIMF9TT1VU XSA9CXsgTURQX0NPTVBfUEFUSDBfU09VVCwgTURQX0NPTVBfVFlQRV9QQVRIMSwgMCB9LAo+ICsJ W01EUF9DT01QX1BBVEgxX1NPVVRdID0JeyBNRFBfQ09NUF9QQVRIMV9TT1VULCBNRFBfQ09NUF9U WVBFX1BBVEgyLCAxIH0sCj4gKwlbTURQX0NPTVBfV1JPVDBdID0JeyBNRFBfQ09NUF9XUk9UMCwg TURQX0NPTVBfVFlQRV9XUk9ULCAwIH0sCj4gKwlbTURQX0NPTVBfV0RNQV0gPQl7IE1EUF9DT01Q X1dETUEsIE1EUF9DT01QX1RZUEVfV0RNQSwgMCB9LAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0 IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWRwX2NvbXBfZHRfaWRzW10gPSB7Cj4gKwl7Cj4gKwkJLmNv bXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTgzLW1kcDMtcmRtYTAiLAo+ICsJCS5kYXRhID0gJm1k cF9jb21wX21hdGNoZXNbTURQX0NPTVBfUkRNQTBdLAo+ICsJfSwgewo+ICsJCS5jb21wYXRpYmxl ID0gIm1lZGlhdGVrLG10ODE4My1tZHAzLWNjb3JyIiwKPiArCQkuZGF0YSA9ICZtZHBfY29tcF9t YXRjaGVzW01EUF9DT01QX0NDT1JSMF0sCj4gKwl9LCB7Cj4gKwkJLmNvbXBhdGlibGUgPSAibWVk aWF0ZWssbXQ4MTgzLW1kcDMtcnN6MCIsCj4gKwkJLmRhdGEgPSAmbWRwX2NvbXBfbWF0Y2hlc1tN RFBfQ09NUF9SU1owXSwKPiArCX0sIHsKPiArCQkuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgx ODMtbWRwMy1yc3oxIiwKPiArCQkuZGF0YSA9ICZtZHBfY29tcF9tYXRjaGVzW01EUF9DT01QX1JT WjFdLAo+ICsJfSwgewo+ICsJCS5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE4My1tZHAzLXdy b3QwIiwKPiArCQkuZGF0YSA9ICZtZHBfY29tcF9tYXRjaGVzW01EUF9DT01QX1dST1QwXSwKPiAr CX0sIHsKPiArCQkuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxODMtbWRwMy13ZG1hIiwKPiAr CQkuZGF0YSA9ICZtZHBfY29tcF9tYXRjaGVzW01EUF9DT01QX1dETUFdLAo+ICsJfSwKPiArCXt9 Cj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtZHBfc3ViX2Nv bXBfZHRfaWRzW10gPSB7Cj4gKwl7Cj4gKwkJLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTgz LW1kcDMtcGF0aDEiLAo+ICsJCS5kYXRhID0gJm1kcF9jb21wX21hdGNoZXNbTURQX0NPTVBfUEFU SDBfU09VVF0sCj4gKwl9LCB7Cj4gKwkJLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTgzLW1k cDMtcGF0aDIiLAo+ICsJCS5kYXRhID0gJm1kcF9jb21wX21hdGNoZXNbTURQX0NPTVBfUEFUSDFf U09VVF0sCj4gKwl9LCB7Cj4gKwkJLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTgzLW1kcDMt aW1naSIsCj4gKwkJLmRhdGEgPSAmbWRwX2NvbXBfbWF0Y2hlc1tNRFBfQ09NUF9JU1BfSU1HSV0s Cj4gKwl9LCB7Cj4gKwkJLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTgzLW1kcDMtZXh0byIs Cj4gKwkJLmRhdGEgPSAmbWRwX2NvbXBfbWF0Y2hlc1tNRFBfQ09NUF9JU1BfSU1HT10sCj4gKwl9 LCB7Cj4gKwkJLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTgzLW1kcDMtZGwxIiwKPiArCQku ZGF0YSA9ICZtZHBfY29tcF9tYXRjaGVzW01EUF9DT01QX0NBTUlOXSwKPiArCX0sIHsKPiArCQku Y29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxODMtbWRwMy1kbDIiLAo+ICsJCS5kYXRhID0gJm1k cF9jb21wX21hdGNoZXNbTURQX0NPTVBfQ0FNSU4yXSwKPiArCX0sCj4gKwl7fQo+ICt9Owo+ICsK PiArLyogVXNlZCB0byBkZXNjcmliZSB0aGUgaXRlbSBvcmRlciBpbiBNRFAgcHJvcGVydHkgKi8K PiArc3RydWN0IG1kcF9jb21wX2luZm8gewo+ICsJdTMyCWNsa19udW07Cj4gKwl1MzIJY2xrX29m c3Q7Cj4gKwl1MzIJZHRzX3JlZ19vZnN0Owo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVj dCBtZHBfY29tcF9pbmZvIG1kcF9jb21wX2R0X2luZm9bTURQX0NPTVBfVFlQRV9DT1VOVF0gPSB7 Cj4gKwlbTURQX0NPTVBfVFlQRV9SRE1BXQkJPSB7MiwgMCwgMH0sCj4gKwlbTURQX0NPTVBfVFlQ RV9SU1pdCQk9IHsxLCAwLCAwfSwKPiArCVtNRFBfQ09NUF9UWVBFX1dST1RdCQk9IHsxLCAwLCAw fSwKPiArCVtNRFBfQ09NUF9UWVBFX1dETUFdCQk9IHsxLCAwLCAwfSwKPiArCVtNRFBfQ09NUF9U WVBFX1BBVEgxXQkJPSB7MCwgMCwgMn0sCj4gKwlbTURQX0NPTVBfVFlQRV9QQVRIMl0JCT0gezAs IDAsIDN9LAo+ICsJW01EUF9DT01QX1RZUEVfQ0NPUlJdCQk9IHsxLCAwLCAwfSwKPiArCVtNRFBf Q09NUF9UWVBFX0lNR0ldCQk9IHswLCAwLCA0fSwKPiArCVtNRFBfQ09NUF9UWVBFX0VYVE9dCQk9 IHswLCAwLCA0fSwKPiArCVtNRFBfQ09NUF9UWVBFX0RMX1BBVEgxXQk9IHsyLCAyLCAxfSwKPiAr CVtNRFBfQ09NUF9UWVBFX0RMX1BBVEgyXQk9IHsyLCA0LCAxfSwKPiArfTsKPiArCj4gK3ZvaWQg bWRwX2NvbXBfY2xvY2tfb24oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgbWRwX2NvbXAgKmNv bXApCj4gK3sKPiArCWludCBpLCBlcnI7Cj4gKwo+ICsJaWYgKGNvbXAtPmNvbXBfZGV2KSB7Cj4g KwkJZXJyID0gcG1fcnVudGltZV9nZXRfc3luYyhjb21wLT5jb21wX2Rldik7Cj4gKwkJaWYgKGVy ciA8IDApCj4gKwkJCWRldl9lcnIoZGV2LAo+ICsJCQkJIkZhaWxlZCB0byBnZXQgcG93ZXIsIGVy ciAlZC4gdHlwZTolZCBpZDolZFxuIiwKPiArCQkJCWVyciwgY29tcC0+dHlwZSwgY29tcC0+aWQp Owo+ICsJfQo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvbXAtPmNsa3MpOyBp KyspIHsKPiArCQlpZiAoSVNfRVJSKGNvbXAtPmNsa3NbaV0pKQo+ICsJCQlicmVhazsKPiArCQll cnIgPSBjbGtfcHJlcGFyZV9lbmFibGUoY29tcC0+Y2xrc1tpXSk7Cj4gKwkJaWYgKGVycikKPiAr CQkJZGV2X2VycihkZXYsCj4gKwkJCQkiRmFpbGVkIHRvIGVuYWJsZSBjbGsgJWQuIHR5cGU6JWQg aWQ6JWRcbiIsCj4gKwkJCQlpLCBjb21wLT50eXBlLCBjb21wLT5pZCk7Cj4gKwl9Cj4gK30KPiAr Cj4gK3ZvaWQgbWRwX2NvbXBfY2xvY2tfb2ZmKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG1k cF9jb21wICpjb21wKQo+ICt7Cj4gKwlpbnQgaTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJS QVlfU0laRShjb21wLT5jbGtzKTsgaSsrKSB7Cj4gKwkJaWYgKElTX0VSUihjb21wLT5jbGtzW2ld KSkKPiArCQkJYnJlYWs7Cj4gKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNvbXAtPmNsa3NbaV0p Owo+ICsJfQo+ICsKPiArCWlmIChjb21wLT5jb21wX2RldikKPiArCQlwbV9ydW50aW1lX3B1dChj b21wLT5jb21wX2Rldik7Cj4gK30KPiArCj4gK3ZvaWQgbWRwX2NvbXBfY2xvY2tzX29uKHN0cnVj dCBkZXZpY2UgKmRldiwgc3RydWN0IG1kcF9jb21wICpjb21wcywgaW50IG51bSkKPiArewo+ICsJ aW50IGk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKQo+ICsJCW1kcF9jb21wX2Ns b2NrX29uKGRldiwgJmNvbXBzW2ldKTsKPiArfQo+ICsKPiArdm9pZCBtZHBfY29tcF9jbG9ja3Nf b2ZmKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG1kcF9jb21wICpjb21wcywgaW50IG51bSkK PiArewo+ICsJaW50IGk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKQo+ICsJCW1k cF9jb21wX2Nsb2NrX29mZihkZXYsICZjb21wc1tpXSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg bWRwX2dldF9zdWJzeXNfaWQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUg Km5vZGUsCj4gKwkJCSAgICAgc3RydWN0IG1kcF9jb21wICpjb21wKQo+ICt7Cj4gKwlzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpjb21wX3BkZXY7Cj4gKwlzdHJ1Y3QgY21kcV9jbGllbnRfcmVnICBj bWRxX3JlZzsKPiArCWludCByZXQgPSAwOwo+ICsJaW50IGluZGV4ID0gMDsKPiArCj4gKwlpZiAo IWRldiB8fCAhbm9kZSB8fCAhY29tcCkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwljb21w X3BkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKG5vZGUpOwo+ICsKPiArCWlmICghY29tcF9w ZGV2KSB7Cj4gKwkJZGV2X2VycihkZXYsICJnZXQgY29tcF9wZGV2IGZhaWwhIGNvbXAgaWQ9JWQg dHlwZT0lZFxuIiwKPiArCQkJY29tcC0+aWQsIGNvbXAtPnR5cGUpOwo+ICsJCXJldHVybiAtRU5P REVWOwo+ICsJfQo+ICsKPiArCWluZGV4ID0gbWRwX2NvbXBfZHRfaW5mb1tjb21wLT50eXBlXS5k dHNfcmVnX29mc3Q7Cj4gKwlyZXQgPSBjbWRxX2Rldl9nZXRfY2xpZW50X3JlZygmY29tcF9wZGV2 LT5kZXYsICZjbWRxX3JlZywgaW5kZXgpOwo+ICsJaWYgKHJldCAhPSAwKSB7Cj4gKwkJZGV2X2Vy cigmY29tcF9wZGV2LT5kZXYsICJjbWRxX2Rldl9nZXRfc3Vic3lzIGZhaWwhXG4iKTsKPiArCQly ZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwljb21wLT5zdWJzeXNfaWQgPSBjbWRxX3JlZy5z dWJzeXM7Cj4gKwlkZXZfZGJnKCZjb21wX3BkZXYtPmRldiwgInN1YnN5cyBpZD0lZFxuIiwgY21k cV9yZWcuc3Vic3lzKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQg X19tZHBfY29tcF9pbml0KHN0cnVjdCBtZHBfZGV2ICptZHAsIHN0cnVjdCBkZXZpY2Vfbm9kZSAq bm9kZSwKPiArCQkJICAgIHN0cnVjdCBtZHBfY29tcCAqY29tcCkKPiArewo+ICsJc3RydWN0IHJl c291cmNlIHJlczsKPiArCXBoeXNfYWRkcl90IGJhc2U7Cj4gKwlpbnQgaW5kZXggPSBtZHBfY29t cF9kdF9pbmZvW2NvbXAtPnR5cGVdLmR0c19yZWdfb2ZzdDsKPiArCj4gKwlpZiAob2ZfYWRkcmVz c190b19yZXNvdXJjZShub2RlLCBpbmRleCwgJnJlcykgPCAwKQo+ICsJCWJhc2UgPSAwTDsKPiAr CWVsc2UKPiArCQliYXNlID0gcmVzLnN0YXJ0Owo+ICsKPiArCWNvbXAtPm1kcF9kZXYgPSBtZHA7 Cj4gKwljb21wLT5yZWdzID0gb2ZfaW9tYXAobm9kZSwgMCk7Cj4gKwljb21wLT5yZWdfYmFzZSA9 IGJhc2U7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbWRwX2NvbXBfaW5pdChzdHJ1Y3QgbWRwX2Rl diAqbWRwLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCj4gKwkJCSBzdHJ1Y3QgbWRwX2NvbXAg KmNvbXAsIGVudW0gbXRrX21kcF9jb21wX2lkIGlkKQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpk ZXYgPSAmbWRwLT5wZGV2LT5kZXY7Cj4gKwlpbnQgY2xrX251bTsKPiArCWludCBjbGtfb2ZzdDsK PiArCWludCBpOwo+ICsKPiArCWlmIChpZCA8IDAgfHwgaWQgPj0gTURQX01BWF9DT01QX0NPVU5U KSB7Cj4gKwkJZGV2X2VycihkZXYsICJJbnZhbGlkIGNvbXBvbmVudCBpZCAlZFxuIiwgaWQpOwo+ ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCWNvbXAtPnR5cGUgPSBtZHBfY29tcF9t YXRjaGVzW2lkXS50eXBlOwo+ICsJY29tcC0+aWQgPSBtZHBfY29tcF9tYXRjaGVzW2lkXS5pZDsK PiArCWNvbXAtPmFsaWFzX2lkID0gbWRwX2NvbXBfbWF0Y2hlc1tpZF0uYWxpYXNfaWQ7Cj4gKwlj b21wLT5vcHMgPSBtZHBfY29tcF9vcHNbY29tcC0+dHlwZV07Cj4gKwlfX21kcF9jb21wX2luaXQo bWRwLCBub2RlLCBjb21wKTsKPiArCj4gKwljbGtfbnVtID0gbWRwX2NvbXBfZHRfaW5mb1tjb21w LT50eXBlXS5jbGtfbnVtOwo+ICsJY2xrX29mc3QgPSBtZHBfY29tcF9kdF9pbmZvW2NvbXAtPnR5 cGVdLmNsa19vZnN0Owo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBjbGtfbnVtOyBpKyspIHsKPiAr CQljb21wLT5jbGtzW2ldID0gb2ZfY2xrX2dldChub2RlLCBpICsgY2xrX29mc3QpOwo+ICsJCWlm IChJU19FUlIoY29tcC0+Y2xrc1tpXSkpCj4gKwkJCWJyZWFrOwo+ICsJfQo+ICsKPiArCW1kcF9n ZXRfc3Vic3lzX2lkKGRldiwgbm9kZSwgY29tcCk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyBzdHJ1Y3QgbWRwX2NvbXAgKm1kcF9jb21wX2NyZWF0ZShzdHJ1Y3QgbWRwX2Rl diAqbWRwLAo+ICsJCQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKPiArCQkJCQllbnVtIG10 a19tZHBfY29tcF9pZCBpZCkKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJm1kcC0+cGRl di0+ZGV2Owo+ICsJc3RydWN0IG1kcF9jb21wICpjb21wOwo+ICsJaW50IHJldDsKPiArCj4gKwlp ZiAobWRwLT5jb21wW2lkXSkKPiArCQlyZXR1cm4gRVJSX1BUUigtRUVYSVNUKTsKPiArCj4gKwlj b21wID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpjb21wKSwgR0ZQX0tFUk5FTCk7Cj4gKwlp ZiAoIWNvbXApCj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gKwo+ICsJcmV0ID0gbWRw X2NvbXBfaW5pdChtZHAsIG5vZGUsIGNvbXAsIGlkKTsKPiArCWlmIChyZXQpIHsKPiArCQlrZnJl ZShjb21wKTsKPiArCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICsJfQo+ICsJbWRwLT5jb21wW2lk XSA9IGNvbXA7Cj4gKwltZHAtPmNvbXBbaWRdLT5tZHBfZGV2ID0gbWRwOwo+ICsKPiArCWRldl9p bmZvKGRldiwgIiVzIHR5cGU6JWQgYWxpYXM6JWQgaWQ6JWQgYmFzZTolI3ggcmVnczolcFxuIiwK PiArCQkgZGV2LT5vZl9ub2RlLT5uYW1lLCBjb21wLT50eXBlLCBjb21wLT5hbGlhc19pZCwgaWQs Cj4gKwkJICh1MzIpY29tcC0+cmVnX2Jhc2UsIGNvbXAtPnJlZ3MpOwo+ICsJcmV0dXJuIGNvbXA7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbWRwX3N1Yl9jb21wc19jcmVhdGUoc3RydWN0IG1kcF9k ZXYgKm1kcCwgc3RydWN0IGRldmljZV9ub2RlICpub2RlKQo+ICt7Cj4gKwlzdHJ1Y3QgcHJvcGVy dHkgKnByb3A7Cj4gKwljb25zdCBjaGFyICpuYW1lOwo+ICsJaW50IGluZGV4ID0gMDsKPiArCj4g KwlvZl9wcm9wZXJ0eV9mb3JfZWFjaF9zdHJpbmcobm9kZSwgIm1lZGlhdGVrLG1kcDMtY29tcHMi LCBwcm9wLCBuYW1lKSB7Cj4gKwkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbGlzdCA9IG1k cF9zdWJfY29tcF9kdF9pZHM7Cj4gKwkJc3RydWN0IG1kcF9jb21wX21hdGNoICptYXRjaCA9IE5V TEw7Cj4gKwkJc3RydWN0IG1kcF9jb21wICpjb21wOwo+ICsKPiArCQlmb3IgKDsgbGlzdC0+Y29t cGF0aWJsZVswXTsgbGlzdCsrKSB7Cj4gKwkJCWlmIChvZl9jb21wYXRfY21wKG5hbWUsIGxpc3Qt PmNvbXBhdGlibGUsCj4gKwkJCQkJICBzdHJsZW4obGlzdC0+Y29tcGF0aWJsZSkpID09IDApIHsK PiArCQkJCW1hdGNoID0gKHN0cnVjdCBtZHBfY29tcF9tYXRjaCAqKWxpc3QtPmRhdGE7Cj4gKwkJ CQlicmVhazsKPiArCQkJfQo+ICsJCX0KPiArCj4gKwkJaWYgKG1hdGNoKQo+ICsJCQljb21wID0g bWRwX2NvbXBfY3JlYXRlKG1kcCwgbm9kZSwgbWF0Y2gtPmlkKTsKPiArCj4gKwkJaWYgKElTX0VS Uihjb21wKSkKPiArCQkJcmV0dXJuIFBUUl9FUlIoY29tcCk7Cj4gKwo+ICsJCWluZGV4Kys7Cj4g Kwl9Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbWRwX2NvbXBfZGVpbml0 KHN0cnVjdCBtZHBfY29tcCAqY29tcCkKPiArewo+ICsJaWYgKCFjb21wKQo+ICsJCXJldHVybjsK PiArCj4gKwlpZiAoY29tcC0+cmVncykKPiArCQlpb3VubWFwKGNvbXAtPnJlZ3MpOwo+ICt9Cj4g Kwo+ICt2b2lkIG1kcF9jb21wb25lbnRfZGVpbml0KHN0cnVjdCBtZHBfZGV2ICptZHApCj4gK3sK PiArCWludCBpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBNRFBfUElQRV9NQVg7IGkrKykKPiAr CQltdGtfbXV0ZXhfcHV0KG1kcC0+bWRwX211dGV4W2ldKTsKPiArCj4gKwlmb3IgKGkgPSAwOyBp IDwgQVJSQVlfU0laRShtZHAtPmNvbXApOyBpKyspIHsKPiArCQlpZiAobWRwLT5jb21wW2ldKSB7 Cj4gKwkJCXBtX3J1bnRpbWVfZGlzYWJsZShtZHAtPmNvbXBbaV0tPmNvbXBfZGV2KTsKPiArCQkJ bWRwX2NvbXBfZGVpbml0KG1kcC0+Y29tcFtpXSk7Cj4gKwkJCWtmcmVlKG1kcC0+Y29tcFtpXSk7 Cj4gKwkJfQo+ICsJfQo+ICt9Cj4gKwo+ICtpbnQgbWRwX2NvbXBvbmVudF9pbml0KHN0cnVjdCBt ZHBfZGV2ICptZHApCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZtZHAtPnBkZXYtPmRl djsKPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwgKnBhcmVudDsKPiArCXN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXY7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXBhcmVudCA9IGRldi0+b2Zf bm9kZS0+cGFyZW50Owo+ICsJLyogSXRlcmF0ZSBvdmVyIHNpYmxpbmcgTURQIGZ1bmN0aW9uIGJs b2NrcyAqLwo+ICsJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShwYXJlbnQsIG5vZGUpIHsKPiArCQlj b25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9pZDsKPiArCQlzdHJ1Y3QgbWRwX2NvbXBfbWF0 Y2ggKm1hdGNoOwo+ICsJCXN0cnVjdCBtZHBfY29tcCAqY29tcDsKPiArCj4gKwkJb2ZfaWQgPSBv Zl9tYXRjaF9ub2RlKG1kcF9jb21wX2R0X2lkcywgbm9kZSk7Cj4gKwkJaWYgKCFvZl9pZCkKPiAr CQkJY29udGludWU7Cj4gKwo+ICsJCWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShub2RlKSkg ewo+ICsJCQlkZXZfaW5mbyhkZXYsICJTa2lwcGluZyBkaXNhYmxlZCBjb21wb25lbnQgJXBPRlxu Iiwgbm9kZSk7Cj4gKwkJCWNvbnRpbnVlOwo+ICsJCX0KPiArCj4gKwkJbWF0Y2ggPSAoc3RydWN0 IG1kcF9jb21wX21hdGNoICopb2ZfaWQtPmRhdGE7Cj4gKwo+ICsJCWNvbXAgPSBtZHBfY29tcF9j cmVhdGUobWRwLCBub2RlLCBtYXRjaC0+aWQpOwo+ICsJCWlmIChJU19FUlIoY29tcCkpCj4gKwkJ CWdvdG8gZXJyX2luaXRfY29tcHM7Cj4gKwo+ICsJCXJldCA9IG1kcF9zdWJfY29tcHNfY3JlYXRl KG1kcCwgbm9kZSk7Cj4gKwkJaWYgKHJldCkKPiArCQkJZ290byBlcnJfaW5pdF9jb21wczsKPiAr Cj4gKwkJLyogT25seSBETUEgY2FwYWJsZSBjb21wb25lbnRzIG5lZWQgdGhlIHBtIGNvbnRyb2wg Ki8KPiArCQljb21wLT5jb21wX2RldiA9IE5VTEw7Cj4gKwkJaWYgKGNvbXAtPnR5cGUgIT0gTURQ X0NPTVBfVFlQRV9SRE1BICYmCj4gKwkJICAgIGNvbXAtPnR5cGUgIT0gTURQX0NPTVBfVFlQRV9X Uk9UICYmCj4gKwkJICAgIGNvbXAtPnR5cGUgIT0gTURQX0NPTVBfVFlQRV9XRE1BKQo+ICsJCQlj b250aW51ZTsKPiArCj4gKwkJcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUobm9kZSk7Cj4g KwkJaWYgKCFwZGV2KSB7Cj4gKwkJCWRldl93YXJuKGRldiwgImNhbid0IGZpbmQgcGxhdGZvcm0g ZGV2aWNlIG9mIG5vZGU6JXNcbiIsCj4gKwkJCQkgbm9kZS0+bmFtZSk7Cj4gKwkJCXJldHVybiAt RU5PREVWOwo+ICsJCX0KPiArCj4gKwkJY29tcC0+Y29tcF9kZXYgPSAmcGRldi0+ZGV2Owo+ICsJ CXBtX3J1bnRpbWVfZW5hYmxlKGNvbXAtPmNvbXBfZGV2KTsKPiArCX0KPiArCXJldHVybiAwOwo+ ICsKPiArZXJyX2luaXRfY29tcHM6Cj4gKwltZHBfY29tcG9uZW50X2RlaW5pdChtZHApOwo+ICsJ cmV0dXJuIHJldDsKPiArfQo+ICsKPiAraW50IG1kcF9jb21wX2N0eF9pbml0KHN0cnVjdCBtZHBf ZGV2ICptZHAsIHN0cnVjdCBtZHBfY29tcF9jdHggKmN0eCwKPiArCQkgICAgICBjb25zdCBzdHJ1 Y3QgaW1nX2NvbXBwYXJhbSAqcGFyYW0sCj4gKwljb25zdCBzdHJ1Y3QgaW1nX2lwaV9mcmFtZXBh cmFtICpmcmFtZSkKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJm1kcC0+cGRldi0+ZGV2 Owo+ICsJaW50IGk7Cj4gKwo+ICsJaWYgKHBhcmFtLT50eXBlIDwgMCB8fCBwYXJhbS0+dHlwZSA+ PSBNRFBfTUFYX0NPTVBfQ09VTlQpIHsKPiArCQlkZXZfZXJyKGRldiwgIkludmFsaWQgY29tcG9u ZW50IGlkICVkIiwgcGFyYW0tPnR5cGUpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsK PiArCWN0eC0+Y29tcCA9IG1kcC0+Y29tcFtwYXJhbS0+dHlwZV07Cj4gKwlpZiAoIWN0eC0+Y29t cCkgewo+ICsJCWRldl9lcnIoZGV2LCAiVW5pbml0IGNvbXBvbmVudCBpZCAlZCIsIHBhcmFtLT50 eXBlKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwljdHgtPnBhcmFtID0gcGFy YW07Cj4gKwljdHgtPmlucHV0ID0gJmZyYW1lLT5pbnB1dHNbcGFyYW0tPmlucHV0XTsKPiArCWZv ciAoaSA9IDA7IGkgPCBwYXJhbS0+bnVtX291dHB1dHM7IGkrKykKPiArCQljdHgtPm91dHB1dHNb aV0gPSAmZnJhbWUtPm91dHB1dHNbcGFyYW0tPm91dHB1dHNbaV1dOwo+ICsJcmV0dXJuIDA7Cj4g K30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstbWRwMy9tdGstbWRw My1jb21wLmggYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1tZHAzL210ay1tZHAzLWNvbXAu aAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi43YjM0ZjljNDI0 MTAKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstbWRw My9tdGstbWRwMy1jb21wLmgKPiBAQCAtMCwwICsxLDE0NyBAQAo+ICsvKiBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAy MSBNZWRpYVRlayBJbmMuCj4gKyAqIEF1dGhvcjogUGluZy1Ic3VuIFd1IDxwaW5nLWhzdW4ud3VA bWVkaWF0ZWsuY29tPgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX19NVEtfTURQM19DT01QX0hfXwo+ ICsjZGVmaW5lIF9fTVRLX01EUDNfQ09NUF9IX18KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9zb2Mv bWVkaWF0ZWsvbXRrLW1tc3lzLmg+Cj4gKyNpbmNsdWRlICJtdGstbWRwMy1jbWRxLmgiCj4gKwo+ ICsjZGVmaW5lIE1NX1JFR19XUklURV9NQVNLKGNtZCwgaWQsIGJhc2UsIG9mc3QsIHZhbCwgbWFz aywgLi4uKSBcCj4gKwljbWRxX3BrdF93cml0ZV9tYXNrKChjbWQpLT5wa3QsIGlkLCBcCj4gKwkJ KGJhc2UpICsgKG9mc3QpLCAodmFsKSwgKG1hc2spLCAjI19fVkFfQVJHU19fKQo+ICsjZGVmaW5l IE1NX1JFR19XUklURShjbWQsIGlkLCBiYXNlLCBvZnN0LCB2YWwsIG1hc2ssIC4uLikgXAo+ICsJ TU1fUkVHX1dSSVRFX01BU0soY21kLCBpZCwgYmFzZSwgb2ZzdCwgdmFsLCBcCj4gKwkJKCgobWFz aykgJiAob2ZzdCMjX01BU0spKSA9PSAob2ZzdCMjX01BU0spKSA/IFwKPiArCQkJKDB4ZmZmZmZm ZmYpIDogKG1hc2spLCAjI19fVkFfQVJHU19fKQo+ICsKPiArI2RlZmluZSBNTV9SRUdfV0FJVChj bWQsIGV2dCkgXAo+ICsJY21kcV9wa3Rfd2ZlKChjbWQpLT5wa3QsIChjbWQpLT5ldmVudFsoZXZ0 KV0sIHRydWUpCj4gKwo+ICsjZGVmaW5lIE1NX1JFR19XQUlUX05PX0NMRUFSKGNtZCwgZXZ0KSBc Cj4gKwljbWRxX3BrdF93ZmUoKGNtZCktPnBrdCwgKGNtZCktPmV2ZW50WyhldnQpXSwgZmFsc2Up Cj4gKwo+ICsjZGVmaW5lIE1NX1JFR19DTEVBUihjbWQsIGV2dCkgXAo+ICsJY21kcV9wa3RfY2xl YXJfZXZlbnQoKGNtZCktPnBrdCwgKGNtZCktPmV2ZW50WyhldnQpXSkKPiArCj4gKyNkZWZpbmUg TU1fUkVHX1NFVF9FVkVOVChjbWQsIGV2dCkgXAo+ICsJY21kcV9wa3Rfc2V0X2V2ZW50KChjbWQp LT5wa3QsIChjbWQpLT5ldmVudFsoZXZ0KV0pCj4gKwo+ICsjZGVmaW5lIE1NX1JFR19QT0xMX01B U0soY21kLCBpZCwgYmFzZSwgb2ZzdCwgdmFsLCBtYXNrLCAuLi4pIFwKPiArCWNtZHFfcGt0X3Bv bGxfbWFzaygoY21kKS0+cGt0LCBpZCwgXAo+ICsJCShiYXNlKSArIChvZnN0KSwgKHZhbCksICht YXNrKSwgIyNfX1ZBX0FSR1NfXykKPiArI2RlZmluZSBNTV9SRUdfUE9MTChjbWQsIGlkLCBiYXNl LCBvZnN0LCB2YWwsIG1hc2ssIC4uLikgXAo+ICsJTU1fUkVHX1BPTExfTUFTSygoY21kKSwgaWQs IGJhc2UsIG9mc3QsIHZhbCwgXAo+ICsJCSgoKG1hc2spICYgKG9mc3QjI19NQVNLKSkgPT0gKG9m c3QjI19NQVNLKSkgPyBcCj4gKwkJCSgweGZmZmZmZmZmKSA6IChtYXNrKSwgIyNfX1ZBX0FSR1Nf XykKPiArCj4gK2VudW0gbWRwX2NvbXBfdHlwZSB7Cj4gKwlNRFBfQ09NUF9UWVBFX0lOVkFMSUQg PSAwLAo+ICsKPiArCU1EUF9DT01QX1RZUEVfUkRNQSwKPiArCU1EUF9DT01QX1RZUEVfUlNaLAo+ ICsJTURQX0NPTVBfVFlQRV9XUk9ULAo+ICsJTURQX0NPTVBfVFlQRV9XRE1BLAo+ICsJTURQX0NP TVBfVFlQRV9QQVRIMSwKPiArCU1EUF9DT01QX1RZUEVfUEFUSDIsCj4gKwo+ICsJTURQX0NPTVBf VFlQRV9URFNIUCwKPiArCU1EUF9DT01QX1RZUEVfQ09MT1IsCj4gKwlNRFBfQ09NUF9UWVBFX0RS RSwKPiArCU1EUF9DT01QX1RZUEVfQ0NPUlIsCj4gKwlNRFBfQ09NUF9UWVBFX0hEUiwKPiArCj4g KwlNRFBfQ09NUF9UWVBFX0lNR0ksCj4gKwlNRFBfQ09NUF9UWVBFX1dQRUksCj4gKwlNRFBfQ09N UF9UWVBFX0VYVE8sCS8qIEV4dGVybmFsIHBhdGggKi8KPiArCU1EUF9DT01QX1RZUEVfRExfUEFU SDEsIC8qIERpcmVjdC1saW5rIHBhdGgxICovCj4gKwlNRFBfQ09NUF9UWVBFX0RMX1BBVEgyLCAv KiBEaXJlY3QtbGluayBwYXRoMiAqLwo+ICsKPiArCU1EUF9DT01QX1RZUEVfQ09VTlQJLyogQUxX QVlTIGtlZXAgYXQgdGhlIGVuZCAqLwo+ICt9Owo+ICsKPiArZW51bSBtZHBfY29tcF9ldmVudCB7 Cj4gKwlSRE1BMF9TT0YsCj4gKwlSRE1BMF9ET05FLAo+ICsJUlNaMF9TT0YsCj4gKwlSU1oxX1NP RiwKPiArCVREU0hQMF9TT0YsCj4gKwlXUk9UMF9TT0YsCj4gKwlXUk9UMF9ET05FLAo+ICsJV0RN QTBfU09GLAo+ICsJV0RNQTBfRE9ORSwKPiArCj4gKwlJU1BfUDJfMF9ET05FLAo+ICsJSVNQX1Ay XzFfRE9ORSwKPiArCUlTUF9QMl8yX0RPTkUsCj4gKwlJU1BfUDJfM19ET05FLAo+ICsJSVNQX1Ay XzRfRE9ORSwKPiArCUlTUF9QMl81X0RPTkUsCj4gKwlJU1BfUDJfNl9ET05FLAo+ICsJSVNQX1Ay XzdfRE9ORSwKPiArCUlTUF9QMl84X0RPTkUsCj4gKwlJU1BfUDJfOV9ET05FLAo+ICsJSVNQX1Ay XzEwX0RPTkUsCj4gKwlJU1BfUDJfMTFfRE9ORSwKPiArCUlTUF9QMl8xMl9ET05FLAo+ICsJSVNQ X1AyXzEzX0RPTkUsCj4gKwlJU1BfUDJfMTRfRE9ORSwKPiArCj4gKwlXUEVfRE9ORSwKPiArCVdQ RV9CX0RPTkUsCj4gKwo+ICsJTURQX01BWF9FVkVOVF9DT1VOVAkvKiBBTFdBWVMga2VlcCBhdCB0 aGUgZW5kICovCj4gK307Cj4gKwo+ICtzdHJ1Y3QgbWRwX2NvbXBfb3BzOwo+ICsKPiArc3RydWN0 IG1kcF9jb21wIHsKPiArCXN0cnVjdCBtZHBfZGV2CQkJKm1kcF9kZXY7Cj4gKwl2b2lkIF9faW9t ZW0JCQkqcmVnczsKPiArCXBoeXNfYWRkcl90CQkJcmVnX2Jhc2U7Cj4gKwl1OAkJCQlzdWJzeXNf aWQ7Cj4gKwlzdHJ1Y3QgY2xrCQkJKmNsa3NbNl07Cj4gKwlzdHJ1Y3QgZGV2aWNlCQkJKmNvbXBf ZGV2Owo+ICsJZW51bSBtZHBfY29tcF90eXBlCQl0eXBlOwo+ICsJZW51bSBtdGtfbWRwX2NvbXBf aWQJCWlkOwo+ICsJdTMyCQkJCWFsaWFzX2lkOwo+ICsJY29uc3Qgc3RydWN0IG1kcF9jb21wX29w cwkqb3BzOwo+ICt9Owo+ICsKPiArc3RydWN0IG1kcF9jb21wX2N0eCB7Cj4gKwlzdHJ1Y3QgbWRw X2NvbXAJCQkqY29tcDsKPiArCWNvbnN0IHN0cnVjdCBpbWdfY29tcHBhcmFtCSpwYXJhbTsKPiAr CWNvbnN0IHN0cnVjdCBpbWdfaW5wdXQJCSppbnB1dDsKPiArCWNvbnN0IHN0cnVjdCBpbWdfb3V0 cHV0CQkqb3V0cHV0c1tJTUdfTUFYX0hXX09VVFBVVFNdOwo+ICt9Owo+ICsKPiArc3RydWN0IG1k cF9jb21wX29wcyB7Cj4gKwlzNjQgKCpnZXRfY29tcF9mbGFnKShjb25zdCBzdHJ1Y3QgbWRwX2Nv bXBfY3R4ICpjdHgpOwo+ICsJaW50ICgqaW5pdF9jb21wKShzdHJ1Y3QgbWRwX2NvbXBfY3R4ICpj dHgsIHN0cnVjdCBtbXN5c19jbWRxX2NtZCAqY21kKTsKPiArCWludCAoKmNvbmZpZ19mcmFtZSko c3RydWN0IG1kcF9jb21wX2N0eCAqY3R4LCBzdHJ1Y3QgbW1zeXNfY21kcV9jbWQgKmNtZCwKPiAr CQkJICAgIGNvbnN0IHN0cnVjdCB2NGwyX3JlY3QgKmNvbXBvc2UpOwo+ICsJaW50ICgqY29uZmln X3N1YmZybSkoc3RydWN0IG1kcF9jb21wX2N0eCAqY3R4LAo+ICsJCQkgICAgIHN0cnVjdCBtbXN5 c19jbWRxX2NtZCAqY21kLCB1MzIgaW5kZXgpOwo+ICsJaW50ICgqd2FpdF9jb21wX2V2ZW50KShz dHJ1Y3QgbWRwX2NvbXBfY3R4ICpjdHgsCj4gKwkJCSAgICAgICBzdHJ1Y3QgbW1zeXNfY21kcV9j bWQgKmNtZCk7Cj4gKwlpbnQgKCphZHZhbmNlX3N1YmZybSkoc3RydWN0IG1kcF9jb21wX2N0eCAq Y3R4LAo+ICsJCQkgICAgICBzdHJ1Y3QgbW1zeXNfY21kcV9jbWQgKmNtZCwgdTMyIGluZGV4KTsK PiArCWludCAoKnBvc3RfcHJvY2Vzcykoc3RydWN0IG1kcF9jb21wX2N0eCAqY3R4LCBzdHJ1Y3Qg bW1zeXNfY21kcV9jbWQgKmNtZCk7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgbWRwX2RldjsKPiArCj4g K2ludCBtZHBfY29tcG9uZW50X2luaXQoc3RydWN0IG1kcF9kZXYgKm1kcCk7Cj4gK3ZvaWQgbWRw X2NvbXBvbmVudF9kZWluaXQoc3RydWN0IG1kcF9kZXYgKm1kcCk7Cj4gK3ZvaWQgbWRwX2NvbXBf Y2xvY2tfb24oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgbWRwX2NvbXAgKmNvbXApOwo+ICt2 b2lkIG1kcF9jb21wX2Nsb2NrX29mZihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBtZHBfY29t cCAqY29tcCk7Cj4gK3ZvaWQgbWRwX2NvbXBfY2xvY2tzX29uKHN0cnVjdCBkZXZpY2UgKmRldiwg c3RydWN0IG1kcF9jb21wICpjb21wcywgaW50IG51bSk7Cj4gK3ZvaWQgbWRwX2NvbXBfY2xvY2tz X29mZihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBtZHBfY29tcCAqY29tcHMsIGludCBudW0p Owo+ICtpbnQgbWRwX2NvbXBfY3R4X2luaXQoc3RydWN0IG1kcF9kZXYgKm1kcCwgc3RydWN0IG1k cF9jb21wX2N0eCAqY3R4LAo+ICsJCSAgICAgIGNvbnN0IHN0cnVjdCBpbWdfY29tcHBhcmFtICpw YXJhbSwKPiArCWNvbnN0IHN0cnVjdCBpbWdfaXBpX2ZyYW1lcGFyYW0gKmZyYW1lKTsKPiArCj4g KyNlbmRpZiAgLyogX19NVEtfTURQM19DT01QX0hfXyAqLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L21lZGlhL3BsYXRmb3JtL210ay1tZHAzL210ay1tZHAzLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEv cGxhdGZvcm0vbXRrLW1kcDMvbXRrLW1kcDMtY29yZS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK PiBpbmRleCAwMDAwMDAwMDAwMDAuLjUzNWE5YjUxZWU4OAo+IC0tLSAvZGV2L251bGwKPiArKysg Yi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1tZHAzL210ay1tZHAzLWNvcmUuYwo+IEBAIC0w LDAgKzEsMzM4IEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkK PiArLyoKPiArICogQ29weXJpZ2h0IChjKSAyMDIxIE1lZGlhVGVrIEluYy4KPiArICogQXV0aG9y OiBQaW5nLUhzdW4gV3UgPHBpbmctaHN1bi53dUBtZWRpYXRlay5jb20+Cj4gKyAqLwo+ICsKPiAr I2luY2x1ZGUgPGxpbnV4L2Nsay5oPgo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNp bmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1f ZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+Cj4gKyNpbmNsdWRlIDxs aW51eC9yZW1vdGVwcm9jLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9yZW1vdGVwcm9jL210a19zY3Au aD4KPiArI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmMi1kbWEtY29udGlnLmg+Cj4gKyNpbmNsdWRl ICJtdGstbWRwMy1jb3JlLmgiCj4gKyNpbmNsdWRlICJtdGstbWRwMy1tMm0uaCIKPiArCj4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgbWRwX3BsYXRmb3JtX2NvbmZpZyBtdDgxODNfcGxhdF9jZmcgPSB7 Cj4gKwkucmRtYV9zdXBwb3J0XzEwYml0CQk9IHRydWUsCj4gKwkucmRtYV9yc3oxX3NyYW1fc2hh cmluZwkJPSB0cnVlLAo+ICsJLnJkbWFfdXBzYW1wbGVfcmVwZWF0X29ubHkJPSB0cnVlLAo+ICsJ LnJzel9kaXNhYmxlX2RjbV9zbWFsbF9zYW1wbGUJPSBmYWxzZSwKPiArCS53cm90X2ZpbHRlcl9j b25zdHJhaW50CQk9IGZhbHNlLAo+ICsJLmdjZV9ldmVudF9vZmZzZXQJCT0gMiwKPiArfTsKPiAr Cj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX21kcF9kcml2ZXJfZGF0YSBtdDgxODNfbWRwX2Ry aXZlcl9kYXRhID0gewo+ICsJLm1kcF9jZmcgPSAmbXQ4MTgzX3BsYXRfY2ZnLAo+ICt9Owo+ICsK PiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWRwX29mX2lkc1tdID0gewo+ICsJ eyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxODMtbWRwMyIsCj4gKwkgIC5kYXRhID0gJm10 ODE4M19tZHBfZHJpdmVyX2RhdGEsCj4gKwl9LAo+ICsJe30sCj4gK307Cj4gK01PRFVMRV9ERVZJ Q0VfVEFCTEUob2YsIG1kcF9vZl9pZHMpOwo+ICsKPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKl9fZ2V0X3BkZXZfYnlfbmFtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAo+ ICsJCQkJCQkgIGNoYXIgKnJlZl9uYW1lKQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAm cGRldi0+ZGV2Owo+ICsJc3RydWN0IGRldmljZV9ub2RlICptZHBfbm9kZTsKPiArCXN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKm1kcF9wZGV2Owo+ICsKPiArCW1kcF9ub2RlID0gb2ZfcGFyc2VfcGhh bmRsZShkZXYtPm9mX25vZGUsIHJlZl9uYW1lLCAwKTsKPiArCWlmICghbWRwX25vZGUpIHsKPiAr CQlkZXZfZXJyKGRldiwgImNhbid0IGdldCBub2RlICVzXG4iLCByZWZfbmFtZSk7Cj4gKwkJcmV0 dXJuIE5VTEw7Cj4gKwl9Cj4gKwo+ICsJbWRwX3BkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2Rl KG1kcF9ub2RlKTsKPiArCW9mX25vZGVfcHV0KG1kcF9ub2RlKTsKPiArCWlmIChXQVJOX09OKCFt ZHBfcGRldikpIHsKPiArCQlkZXZfZXJyKGRldiwgImZpbmQgJXMgcGRldiBmYWlsZWRcbiIsIHJl Zl9uYW1lKTsKPiArCQlyZXR1cm4gTlVMTDsKPiArCX0KPiArCj4gKwlyZXR1cm4gbWRwX3BkZXY7 Cj4gK30KPiArCj4gK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1kcF9nZXRfcGxhdF9kZXZpY2Uo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJaWYgKCFwZGV2KQo+ICsJCXJl dHVybiBOVUxMOwo+ICsKPiArCXJldHVybiBfX2dldF9wZGV2X2J5X25hbWUocGRldiwgIm1lZGlh dGVrLG1kcDMiKTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChtZHBfZ2V0X3BsYXRfZGV2aWNl KTsKPiArCj4gK2ludCBtZHBfdnB1X2dldF9sb2NrZWQoc3RydWN0IG1kcF9kZXYgKm1kcCkKPiAr ewo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJaWYgKG1kcC0+dnB1X2NvdW50KysgPT0gMCkgewo+ ICsJCXJldCA9IHJwcm9jX2Jvb3QobWRwLT5ycHJvY19oYW5kbGUpOwo+ICsJCWlmIChyZXQpIHsK PiArCQkJZGV2X2VycigmbWRwLT5wZGV2LT5kZXYsCj4gKwkJCQkidnB1X2xvYWRfZmlybXdhcmUg ZmFpbGVkICVkXG4iLCByZXQpOwo+ICsJCQlnb3RvIGVycl9sb2FkX3ZwdTsKPiArCQl9Cj4gKwkJ cmV0ID0gbWRwX3ZwdV9yZWdpc3RlcihtZHApOwo+ICsJCWlmIChyZXQpIHsKPiArCQkJZGV2X2Vy cigmbWRwLT5wZGV2LT5kZXYsCj4gKwkJCQkibWRwX3ZwdSByZWdpc3RlciBmYWlsZWQgJWRcbiIs IHJldCk7Cj4gKwkJCWdvdG8gZXJyX3JlZ192cHU7Cj4gKwkJfQo+ICsJCXJldCA9IG1kcF92cHVf ZGV2X2luaXQoJm1kcC0+dnB1LCBtZHAtPnNjcCwgJm1kcC0+dnB1X2xvY2spOwo+ICsJCWlmIChy ZXQpIHsKPiArCQkJZGV2X2VycigmbWRwLT5wZGV2LT5kZXYsCj4gKwkJCQkibWRwX3ZwdSBkZXZp Y2UgaW5pdCBmYWlsZWQgJWRcbiIsIHJldCk7Cj4gKwkJCWdvdG8gZXJyX2luaXRfdnB1Owo+ICsJ CX0KPiArCX0KPiArCXJldHVybiAwOwo+ICsKPiArZXJyX2luaXRfdnB1Ogo+ICsJbWRwX3ZwdV91 bnJlZ2lzdGVyKG1kcCk7Cj4gK2Vycl9yZWdfdnB1Ogo+ICtlcnJfbG9hZF92cHU6Cj4gKwltZHAt PnZwdV9jb3VudC0tOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArdm9pZCBtZHBfdnB1X3B1 dF9sb2NrZWQoc3RydWN0IG1kcF9kZXYgKm1kcCkKPiArewo+ICsJaWYgKC0tbWRwLT52cHVfY291 bnQgPT0gMCkgewo+ICsJCW1kcF92cHVfZGV2X2RlaW5pdCgmbWRwLT52cHUpOwo+ICsJCW1kcF92 cHVfdW5yZWdpc3RlcihtZHApOwo+ICsJfQo+ICt9Cj4gKwo+ICt2b2lkIG1kcF92aWRlb19kZXZp Y2VfcmVsZWFzZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgbWRw X2RldiAqbWRwID0gKHN0cnVjdCBtZHBfZGV2ICopdmlkZW9fZ2V0X2RydmRhdGEodmRldik7Cj4g Kwo+ICsJc2NwX3B1dChtZHAtPnNjcCk7Cj4gKwo+ICsJZGVzdHJveV93b3JrcXVldWUobWRwLT5q b2Jfd3EpOwo+ICsJZGVzdHJveV93b3JrcXVldWUobWRwLT5jbG9ja193cSk7Cj4gKwo+ICsJcG1f cnVudGltZV9kaXNhYmxlKCZtZHAtPnBkZXYtPmRldik7Cj4gKwo+ICsJdmIyX2RtYV9jb250aWdf Y2xlYXJfbWF4X3NlZ19zaXplKCZtZHAtPnBkZXYtPmRldik7Cj4gKwltZHBfY29tcG9uZW50X2Rl aW5pdChtZHApOwo+ICsKPiArI2lmZGVmIE1EUF9ERUJVRwo+ICsJbWRwX2RlYnVnX2RlaW5pdCgp Owo+ICsjZW5kaWYKPiArCj4gKwltZHBfdnB1X3NoYXJlZF9tZW1fZnJlZSgmbWRwLT52cHUpOwo+ ICsJdjRsMl9tMm1fcmVsZWFzZShtZHAtPm0ybV9kZXYpOwo+ICsJa2ZyZWUobWRwKTsKPiArfQo+ ICsKPiArc3RhdGljIGludCBtZHBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikK PiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKPiArCXN0cnVjdCBtZHBf ZGV2ICptZHA7Cj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm1kcF9ub2RlOwo+ICsJc3RydWN0IHBs YXRmb3JtX2RldmljZSAqbW1fcGRldjsKPiArCXUzMiBldmVudF9vZnN0Owo+ICsJaW50IHJldCwg aTsKPiArCj4gKwltZHAgPSBremFsbG9jKHNpemVvZigqbWRwKSwgR0ZQX0tFUk5FTCk7Cj4gKwlp ZiAoIW1kcCkgewo+ICsJCXJldCA9IC1FTk9NRU07Cj4gKwkJZ290byBlcnJfcmV0dXJuOwo+ICsJ fQo+ICsKPiArCW1kcC0+cGRldiA9IHBkZXY7Cj4gKwltZHAtPm1kcF9kYXRhID0gb2ZfZGV2aWNl X2dldF9tYXRjaF9kYXRhKCZwZGV2LT5kZXYpOwo+ICsJbW1fcGRldiA9IF9fZ2V0X3BkZXZfYnlf bmFtZShwZGV2LCAibWVkaWF0ZWssbW1zeXMiKTsKPiArCWlmICghbW1fcGRldikgewo+ICsJCXJl dCA9IC1FTk9ERVY7Cj4gKwkJZ290byBlcnJfcmV0dXJuOwo+ICsJfQo+ICsJbWRwLT5tZHBfbW1z eXMgPSAmbW1fcGRldi0+ZGV2Owo+ICsKPiArCW1kcF9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShw ZGV2LT5kZXYub2Zfbm9kZSwgIm1lZGlhdGVrLG1tLW11dGV4IiwgMCk7Cj4gKwlpZiAoIW1kcF9u b2RlKSB7Cj4gKwkJcmV0ID0gLUVOT0RFVjsKPiArCQlnb3RvIGVycl9yZXR1cm47Cj4gKwl9Cj4g Kwo+ICsJZXZlbnRfb2ZzdCA9IG1kcC0+bWRwX2RhdGEtPm1kcF9jZmctPmdjZV9ldmVudF9vZmZz ZXQ7Cj4gKwlmb3IgKGkgPSBSRE1BMF9TT0Y7IGkgPCBNRFBfTUFYX0VWRU5UX0NPVU5UOyBpKysp IHsKPiArCQlzMzIgZXZlbnRfaWQ7Cj4gKwo+ICsJCWlmICghZGV2KQo+ICsJCQlyZXR1cm4gLUVJ TlZBTDsKPiArCj4gKwkJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyX2luZGV4KG1kcF9ub2RlLAo+ ICsJCQkJCSAgICAgICAibWVkaWF0ZWssZ2NlLWV2ZW50cyIsCj4gKwkJCQkJICAgICAgIGkgKyBl dmVudF9vZnN0LCAmZXZlbnRfaWQpKSB7Cj4gKwkJCWRldl9lcnIoZGV2LCAiY2FuJ3QgcGFyc2Ug Z2NlLWV2ZW50cyBwcm9wZXJ0eSIpOwo+ICsKPiArCQkJcmV0dXJuIC1FTk9ERVY7Cj4gKwkJfQo+ ICsJCW1kcC0+ZXZlbnRbaV0gPSAoZXZlbnRfaWQgPCAwKSA/IC1pIDogZXZlbnRfaWQ7Cj4gKwkJ ZGV2X2RiZyhkZXYsICJHZXQgZXZlbnQgaWQ6JWRcbiIsIG1kcC0+ZXZlbnRbaV0pOwo+ICsJfQo+ ICsKPiArCW1tX3BkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKG1kcF9ub2RlKTsKPiArCW9m X25vZGVfcHV0KG1kcF9ub2RlKTsKPiArCWlmIChXQVJOX09OKCFtbV9wZGV2KSkgewo+ICsJCXJl dCA9IC1FTk9ERVY7Cj4gKwkJZ290byBlcnJfcmV0dXJuOwo+ICsJfQo+ICsKPiArCWZvciAoaSA9 IDA7IGkgPCBNRFBfUElQRV9NQVg7IGkrKykgewo+ICsJCW1kcC0+bWRwX211dGV4W2ldID0gbXRr X211dGV4X21kcF9nZXQoJm1tX3BkZXYtPmRldiwgaSk7Cj4gKwkJaWYgKCFtZHAtPm1kcF9tdXRl eFtpXSkgewo+ICsJCQlyZXQgPSAtRU5PREVWOwo+ICsJCQlnb3RvIGVycl9yZXR1cm47Cj4gKwkJ fQo+ICsJfQo+ICsKPiArCXJldCA9IG1kcF9jb21wb25lbnRfaW5pdChtZHApOwo+ICsJaWYgKHJl dCkgewo+ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgbWRwIGNvbXBvbmVu dHNcbiIpOwo+ICsJCWdvdG8gZXJyX3JldHVybjsKPiArCX0KPiArCj4gKwltZHAtPmpvYl93cSA9 IGFsbG9jX3dvcmtxdWV1ZShNRFBfTU9EVUxFX05BTUUsIFdRX0ZSRUVaQUJMRSwgMCk7Cj4gKwlp ZiAoIW1kcC0+am9iX3dxKSB7Cj4gKwkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gY3JlYXRlIGpv YiB3b3JrcXVldWVcbiIpOwo+ICsJCXJldCA9IC1FTk9NRU07Cj4gKwkJZ290byBlcnJfZGVpbml0 X2NvbXA7Cj4gKwl9Cj4gKwo+ICsJbWRwLT5jbG9ja193cSA9IGFsbG9jX3dvcmtxdWV1ZShNRFBf TU9EVUxFX05BTUUgIi1jbG9jayIsIFdRX0ZSRUVaQUJMRSwKPiArCQkJCQkwKTsKPiArCWlmICgh bWRwLT5jbG9ja193cSkgewo+ICsJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIGNyZWF0ZSBjbG9j ayB3b3JrcXVldWVcbiIpOwo+ICsJCXJldCA9IC1FTk9NRU07Cj4gKwkJZ290byBlcnJfZGVzdHJv eV9qb2Jfd3E7Cj4gKwl9Cj4gKwo+ICsJbWRwLT5zY3AgPSBzY3BfZ2V0KHBkZXYpOwo+ICsJaWYg KCFtZHAtPnNjcCkgewo+ICsJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvdWxkIG5vdCBnZXQgc2Nw IGRldmljZVxuIik7Cj4gKwkJcmV0ID0gLUVOT0RFVjsKPiArCQlnb3RvIGVycl9kZXN0cm95X2Ns b2NrX3dxOwo+ICsJfQo+ICsKPiArCW1kcC0+cnByb2NfaGFuZGxlID0gc2NwX2dldF9ycHJvYyht ZHAtPnNjcCk7Cj4gKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJNRFAgcnByb2NfaGFuZGxlOiAlcEsi LCBtZHAtPnJwcm9jX2hhbmRsZSk7Cj4gKwo+ICsJbXV0ZXhfaW5pdCgmbWRwLT52cHVfbG9jayk7 Cj4gKwltdXRleF9pbml0KCZtZHAtPm0ybV9sb2NrKTsKPiArCj4gKwltZHAtPmNtZHFfY2x0ID0g Y21kcV9tYm94X2NyZWF0ZShkZXYsIDApOwo+ICsJaWYgKElTX0VSUihtZHAtPmNtZHFfY2x0KSkg ewo+ICsJCXJldCA9IFBUUl9FUlIobWRwLT5jbWRxX2NsdCk7Cj4gKwkJZ290byBlcnJfcHV0X3Nj cDsKPiArCX0KPiArCj4gKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZtZHAtPmNhbGxiYWNrX3dxKTsK PiArCWlkYV9pbml0KCZtZHAtPm1kcF9pZGEpOwo+ICsJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRl diwgbWRwKTsKPiArCj4gKwl2YjJfZG1hX2NvbnRpZ19zZXRfbWF4X3NlZ19zaXplKCZwZGV2LT5k ZXYsIERNQV9CSVRfTUFTSygzMikpOwo+ICsKPiArCXJldCA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVy KGRldiwgJm1kcC0+djRsMl9kZXYpOwo+ICsJaWYgKHJldCkgewo+ICsJCWRldl9lcnIoZGV2LCAi RmFpbGVkIHRvIHJlZ2lzdGVyIHY0bDIgZGV2aWNlXG4iKTsKPiArCQlyZXQgPSAtRUlOVkFMOwo+ ICsJCWdvdG8gZXJyX21ib3hfZGVzdHJveTsKPiArCX0KPiArCj4gKwlyZXQgPSBtZHBfbTJtX2Rl dmljZV9yZWdpc3RlcihtZHApOwo+ICsJaWYgKHJldCkgewo+ICsJCXY0bDJfZXJyKCZtZHAtPnY0 bDJfZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIG0ybSBkZXZpY2VcbiIpOwo+ICsJCWdvdG8gZXJy X3VucmVnaXN0ZXJfZGV2aWNlOwo+ICsJfQo+ICsKPiArCWRldl9kYmcoZGV2LCAibWRwLSVkIHJl Z2lzdGVyZWQgc3VjY2Vzc2Z1bGx5XG4iLCBwZGV2LT5pZCk7Cj4gKwlyZXR1cm4gMDsKPiArCj4g K2Vycl91bnJlZ2lzdGVyX2RldmljZToKPiArCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJm1kcC0+ djRsMl9kZXYpOwo+ICtlcnJfbWJveF9kZXN0cm95Ogo+ICsJY21kcV9tYm94X2Rlc3Ryb3kobWRw LT5jbWRxX2NsdCk7Cj4gK2Vycl9wdXRfc2NwOgo+ICsJc2NwX3B1dChtZHAtPnNjcCk7Cj4gK2Vy cl9kZXN0cm95X2Nsb2NrX3dxOgo+ICsJZGVzdHJveV93b3JrcXVldWUobWRwLT5jbG9ja193cSk7 Cj4gK2Vycl9kZXN0cm95X2pvYl93cToKPiArCWRlc3Ryb3lfd29ya3F1ZXVlKG1kcC0+am9iX3dx KTsKPiArZXJyX2RlaW5pdF9jb21wOgo+ICsJbWRwX2NvbXBvbmVudF9kZWluaXQobWRwKTsKPiAr ZXJyX3JldHVybjoKPiArCWtmcmVlKG1kcCk7Cj4gKwlkZXZfZGJnKGRldiwgIkVycm5vICVkXG4i LCByZXQpOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBtZHBfcmVtb3Zl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXN0cnVjdCBtZHBfZGV2ICpt ZHAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKPiArCj4gKwl2NGwyX2RldmljZV91bnJl Z2lzdGVyKCZtZHAtPnY0bDJfZGV2KTsKPiArCj4gKwlkZXZfZGJnKCZwZGV2LT5kZXYsICIlcyBk cml2ZXIgdW5sb2FkZWRcbiIsIHBkZXYtPm5hbWUpOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgbWRwX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2 KQo+ICt7Cj4gKwlzdHJ1Y3QgbWRwX2RldiAqbWRwID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4g KwlpbnQgcmV0Owo+ICsKPiArCWF0b21pY19zZXQoJm1kcC0+c3VzcGVuZGVkLCAxKTsKPiArCj4g KwlpZiAoYXRvbWljX3JlYWQoJm1kcC0+am9iX2NvdW50KSkgewo+ICsJCXJldCA9IHdhaXRfZXZl bnRfdGltZW91dChtZHAtPmNhbGxiYWNrX3dxLAo+ICsJCQkJCSAhYXRvbWljX3JlYWQoJm1kcC0+ am9iX2NvdW50KSwKPiArCQkJCQkgMiAqIEhaKTsKPiArCQlpZiAocmV0ID09IDApIHsKPiArCQkJ ZGV2X2VycihkZXYsCj4gKwkJCQkiJXM6Zmx1c2hlZCBjbWRxIHRhc2sgaW5jb21wbGV0ZSwgY291 bnQ9JWRcbiIsCj4gKwkJCQlfX2Z1bmNfXywgYXRvbWljX3JlYWQoJm1kcC0+am9iX2NvdW50KSk7 Cj4gKwkJCXJldHVybiAtRUJVU1k7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIG1kcF9yZXN1bWUoc3RydWN0IGRldmlj ZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgbWRwX2RldiAqbWRwID0gZGV2X2dldF9kcnZkYXRhKGRl dik7Cj4gKwo+ICsJYXRvbWljX3NldCgmbWRwLT5zdXNwZW5kZWQsIDApOwo+ICsKPiArCXJldHVy biAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgbWRwX3BtX29w cyA9IHsKPiArCVNFVF9TWVNURU1fU0xFRVBfUE1fT1BTKG1kcF9zdXNwZW5kLCBtZHBfcmVzdW1l KQo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWRwX2RyaXZlciA9 IHsKPiArCS5wcm9iZQkJPSBtZHBfcHJvYmUsCj4gKwkucmVtb3ZlCQk9IG1kcF9yZW1vdmUsCj4g KwkuZHJpdmVyID0gewo+ICsJCS5uYW1lCT0gTURQX01PRFVMRV9OQU1FLAo+ICsJCS5wbQk9ICZt ZHBfcG1fb3BzLAo+ICsJCS5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihtZHBfb2ZfaWRz KSwKPiArCX0sCj4gK307Cj4gKwo+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG1kcF9kcml2ZXIp Owo+ICsKPiArTU9EVUxFX0FVVEhPUigiUGluZy1Ic3VuIFd1IDxwaW5nLWhzdW4ud3VAbWVkaWF0 ZWsuY29tPiIpOwo+ICtNT0RVTEVfREVTQ1JJUFRJT04oIk1lZGlhdGVrIGltYWdlIHByb2Nlc3Nv ciAzIGRyaXZlciIpOwo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Cj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLW1kcDMvbXRrLW1kcDMtY29yZS5oIGIvZHJpdmVy cy9tZWRpYS9wbGF0Zm9ybS9tdGstbWRwMy9tdGstbWRwMy1jb3JlLmgKPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZDY4ODA3MWIwYmYxCj4gLS0tIC9kZXYvbnVs bAo+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLW1kcDMvbXRrLW1kcDMtY29yZS5o Cj4gQEAgLTAsMCArMSw3NiBAQAo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MC1vbmx5ICovCj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAyMSBNZWRpYVRlayBJbmMuCj4g KyAqIEF1dGhvcjogUGluZy1Ic3VuIFd1IDxwaW5nLWhzdW4ud3VAbWVkaWF0ZWsuY29tPgo+ICsg Ki8KPiArCj4gKyNpZm5kZWYgX19NVEtfTURQM19DT1JFX0hfXwo+ICsjZGVmaW5lIF9fTVRLX01E UDNfQ09SRV9IX18KPiArCj4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgo+ICsjaW5j bHVkZSA8bWVkaWEvdjRsMi1tZW0ybWVtLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zb2MvbWVkaWF0 ZWsvbXRrLW1tc3lzLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zb2MvbWVkaWF0ZWsvbXRrLW11dGV4 Lmg+Cj4gKyNpbmNsdWRlICJtdGstbWRwMy1jb21wLmgiCj4gKyNpbmNsdWRlICJtdGstbWRwMy12 cHUuaCIKPiArCj4gKyNkZWZpbmUgTURQX01PRFVMRV9OQU1FCSJtdGstbWRwMyIKPiArCj4gK2Vu dW0gbWRwX2J1ZmZlcl91c2FnZSB7Cj4gKwlNRFBfQlVGRkVSX1VTQUdFX0hXX1JFQUQsCj4gKwlN RFBfQlVGRkVSX1VTQUdFX01EUCwKPiArCU1EUF9CVUZGRVJfVVNBR0VfTURQMiwKPiArCU1EUF9C VUZGRVJfVVNBR0VfSVNQLAo+ICsJTURQX0JVRkZFUl9VU0FHRV9XUEUsCj4gK307Cj4gKwo+ICtz dHJ1Y3QgbWRwX3BsYXRmb3JtX2NvbmZpZyB7Cj4gKwlib29sCXJkbWFfc3VwcG9ydF8xMGJpdDsK PiArCWJvb2wJcmRtYV9yc3oxX3NyYW1fc2hhcmluZzsKPiArCWJvb2wJcmRtYV91cHNhbXBsZV9y ZXBlYXRfb25seTsKPiArCWJvb2wJcnN6X2Rpc2FibGVfZGNtX3NtYWxsX3NhbXBsZTsKPiArCWJv b2wJd3JvdF9maWx0ZXJfY29uc3RyYWludDsKPiArCXUzMglnY2VfZXZlbnRfb2Zmc2V0Owo+ICt9 Owo+ICsKPiArc3RydWN0IG10a19tZHBfZHJpdmVyX2RhdGEgewo+ICsJY29uc3Qgc3RydWN0IG1k cF9wbGF0Zm9ybV9jb25maWcgKm1kcF9jZmc7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgbWRwX2RldiB7 Cj4gKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCQkJKnBkZXY7Cj4gKwlzdHJ1Y3QgZGV2aWNlCQkJ CSptZHBfbW1zeXM7Cj4gKwlzdHJ1Y3QgbXRrX211dGV4CQkJKm1kcF9tdXRleFtNRFBfUElQRV9N QVhdOwo+ICsJc3RydWN0IG1kcF9jb21wCQkJCSpjb21wW01EUF9NQVhfQ09NUF9DT1VOVF07Cj4g Kwljb25zdCBzdHJ1Y3QgbXRrX21kcF9kcml2ZXJfZGF0YQkqbWRwX2RhdGE7Cj4gKwlzMzIJCQkJ CWV2ZW50W01EUF9NQVhfRVZFTlRfQ09VTlRdOwo+ICsKPiArCXN0cnVjdCB3b3JrcXVldWVfc3Ry dWN0CQkJKmpvYl93cTsKPiArCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0CQkJKmNsb2NrX3dxOwo+ ICsJc3RydWN0IG1kcF92cHVfZGV2CQkJdnB1Owo+ICsJc3RydWN0IG10a19zY3AJCQkJKnNjcDsK PiArCXN0cnVjdCBycHJvYwkJCQkqcnByb2NfaGFuZGxlOwo+ICsJLyogc3luY2hyb25pemF0aW9u IHByb3RlY3QgZm9yIGFjY2Vzc2luZyB2cHUgd29ya2luZyBidWZmZXIgaW5mbyAqLwo+ICsJc3Ry dWN0IG11dGV4CQkJCXZwdV9sb2NrOwo+ICsJczMyCQkJCQl2cHVfY291bnQ7Cj4gKwl1MzIJCQkJ CWlkX2NvdW50Owo+ICsJc3RydWN0IGlkYQkJCQltZHBfaWRhOwo+ICsJc3RydWN0IGNtZHFfY2xp ZW50CQkJKmNtZHFfY2x0Owo+ICsJd2FpdF9xdWV1ZV9oZWFkX3QJCQljYWxsYmFja193cTsKPiAr Cj4gKwlzdHJ1Y3QgdjRsMl9kZXZpY2UJCQl2NGwyX2RldjsKPiArCXN0cnVjdCB2aWRlb19kZXZp Y2UJCQkqbTJtX3ZkZXY7Cj4gKwlzdHJ1Y3QgdjRsMl9tMm1fZGV2CQkJKm0ybV9kZXY7Cj4gKwkv KiBzeW5jaHJvbml6YXRpb24gcHJvdGVjdCBmb3IgbTJtIGRldmljZSBvcGVyYXRpb24gKi8KPiAr CXN0cnVjdCBtdXRleAkJCQltMm1fbG9jazsKPiArCWF0b21pY190CQkJCXN1c3BlbmRlZDsKPiAr CWF0b21pY190CQkJCWpvYl9jb3VudDsKPiArfTsKPiArCj4gK2ludCBtZHBfdnB1X2dldF9sb2Nr ZWQoc3RydWN0IG1kcF9kZXYgKm1kcCk7Cj4gK3ZvaWQgbWRwX3ZwdV9wdXRfbG9ja2VkKHN0cnVj dCBtZHBfZGV2ICptZHApOwo+ICtpbnQgbWRwX3ZwdV9yZWdpc3RlcihzdHJ1Y3QgbWRwX2RldiAq bWRwKTsKPiArdm9pZCBtZHBfdnB1X3VucmVnaXN0ZXIoc3RydWN0IG1kcF9kZXYgKm1kcCk7Cj4g K3ZvaWQgbWRwX3ZpZGVvX2RldmljZV9yZWxlYXNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYp Owo+ICsKPiArI2VuZGlmICAvKiBfX01US19NRFAzX0NPUkVfSF9fICovCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLW1kcDMvbXRrLW1kcDMtbTJtLmMgYi9kcml2ZXJz L21lZGlhL3BsYXRmb3JtL210ay1tZHAzL210ay1tZHAzLW0ybS5jCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjliM2Q5YTU5YWU0OAo+IC0tLSAvZGV2L251bGwK PiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1tZHAzL210ay1tZHAzLW0ybS5jCj4g QEAgLTAsMCArMSw3ODkgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAt b25seQo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjEgTWVkaWFUZWsgSW5jLgo+ICsgKiBB dXRob3I6IFBpbmctSHN1biBXdSA8cGluZy1oc3VuLnd1QG1lZGlhdGVrLmNvbT4KPiArICovCj4g Kwo+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxtZWRp YS92NGwyLWlvY3RsLmg+Cj4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLWV2ZW50Lmg+Cj4gKyNpbmNs dWRlIDxtZWRpYS92aWRlb2J1ZjItZG1hLWNvbnRpZy5oPgo+ICsjaW5jbHVkZSAibXRrLW1kcDMt bTJtLmgiCj4gKwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBtZHBfbTJtX2N0eCAqZmhfdG9fY3R4 KHN0cnVjdCB2NGwyX2ZoICpmaCkKPiArewo+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihmaCwgc3Ry dWN0IG1kcF9tMm1fY3R4LCBmaCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1k cF9tMm1fY3R4ICpjdHJsX3RvX2N0eChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKQo+ICt7Cj4gKwly ZXR1cm4gY29udGFpbmVyX29mKGN0cmwtPmhhbmRsZXIsIHN0cnVjdCBtZHBfbTJtX2N0eCwgY3Ry bF9oYW5kbGVyKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgbWRwX2ZyYW1lICpj dHhfZ2V0X2ZyYW1lKHN0cnVjdCBtZHBfbTJtX2N0eCAqY3R4LAo+ICsJCQkJCSAgICAgIGVudW0g djRsMl9idWZfdHlwZSB0eXBlKQo+ICt7Cj4gKwlpZiAoVjRMMl9UWVBFX0lTX09VVFBVVCh0eXBl KSkKPiArCQlyZXR1cm4gJmN0eC0+Y3Vycl9wYXJhbS5vdXRwdXQ7Cj4gKwllbHNlCj4gKwkJcmV0 dXJuICZjdHgtPmN1cnJfcGFyYW0uY2FwdHVyZXNbMF07Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IG1kcF9tMm1fY3R4X3NldF9zdGF0ZShzdHJ1Y3QgbWRwX20ybV9jdHggKmN0eCwgdTMyIHN0YXRl KQo+ICt7Cj4gKwltdXRleF9sb2NrKCZjdHgtPmN1cnJfcGFyYW0uc3RhdGVfbG9jayk7Cj4gKwlj dHgtPmN1cnJfcGFyYW0uc3RhdGUgfD0gc3RhdGU7Cj4gKwltdXRleF91bmxvY2soJmN0eC0+Y3Vy cl9wYXJhbS5zdGF0ZV9sb2NrKTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgbWRwX20ybV9jdHhf aXNfc3RhdGVfc2V0KHN0cnVjdCBtZHBfbTJtX2N0eCAqY3R4LCB1MzIgbWFzaykKPiArewo+ICsJ Ym9vbCByZXQ7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmY3R4LT5jdXJyX3BhcmFtLnN0YXRlX2xvY2sp Owo+ICsJcmV0ID0gKGN0eC0+Y3Vycl9wYXJhbS5zdGF0ZSAmIG1hc2spID09IG1hc2s7Cj4gKwlt dXRleF91bmxvY2soJmN0eC0+Y3Vycl9wYXJhbS5zdGF0ZV9sb2NrKTsKPiArCXJldHVybiByZXQ7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG1kcF9tMm1fam9iX2Fib3J0KHZvaWQgKnByaXYpCj4g K3sKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbWRwX20ybV9wcm9jZXNzX2RvbmUodm9pZCAqcHJp diwgaW50IHZiX3N0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgbWRwX20ybV9jdHggKmN0eCA9IHByaXY7 Cj4gKwlzdHJ1Y3QgdmIyX3Y0bDJfYnVmZmVyICpzcmNfdmJ1ZiwgKmRzdF92YnVmOwo+ICsKPiAr CXNyY192YnVmID0gKHN0cnVjdCB2YjJfdjRsMl9idWZmZXIgKikKPiArCQkJdjRsMl9tMm1fc3Jj X2J1Zl9yZW1vdmUoY3R4LT5tMm1fY3R4KTsKPiArCWRzdF92YnVmID0gKHN0cnVjdCB2YjJfdjRs Ml9idWZmZXIgKikKPiArCQkJdjRsMl9tMm1fZHN0X2J1Zl9yZW1vdmUoY3R4LT5tMm1fY3R4KTsK PiArCXNyY192YnVmLT5zZXF1ZW5jZSA9IGN0eC0+ZnJhbWVfY291bnRbTURQX00yTV9TUkNdKys7 Cj4gKwlkc3RfdmJ1Zi0+c2VxdWVuY2UgPSBjdHgtPmZyYW1lX2NvdW50W01EUF9NMk1fRFNUXSsr Owo+ICsJdjRsMl9tMm1fYnVmX2NvcHlfbWV0YWRhdGEoc3JjX3ZidWYsIGRzdF92YnVmLCB0cnVl KTsKPiArCj4gKwl2NGwyX20ybV9idWZfZG9uZShzcmNfdmJ1ZiwgdmJfc3RhdGUpOwo+ICsJdjRs Ml9tMm1fYnVmX2RvbmUoZHN0X3ZidWYsIHZiX3N0YXRlKTsKPiArCXY0bDJfbTJtX2pvYl9maW5p c2goY3R4LT5tZHBfZGV2LT5tMm1fZGV2LCBjdHgtPm0ybV9jdHgpOwo+ICsKPiArCWN0eC0+Y3Vy cl9wYXJhbS5mcmFtZV9ubyA9IGN0eC0+ZnJhbWVfY291bnRbTURQX00yTV9TUkNdOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCBtZHBfbTJtX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmsp Cj4gK3sKPiArCXN0cnVjdCBtZHBfbTJtX2N0eCAqY3R4ID0gY29udGFpbmVyX29mKHdvcmssIHN0 cnVjdCBtZHBfbTJtX2N0eCwgd29yayk7Cj4gKwlzdHJ1Y3QgbWRwX2ZyYW1lICpmcmFtZTsKPiAr CXN0cnVjdCB2YjJfdjRsMl9idWZmZXIgKnNyY192YiwgKmRzdF92YjsKPiArCXN0cnVjdCBpbWdf aXBpX2ZyYW1lcGFyYW0gcGFyYW0gPSB7MH07Cj4gKwlzdHJ1Y3QgbWRwX2NtZHFfcGFyYW0gdGFz ayA9IHswfTsKPiArCWVudW0gdmIyX2J1ZmZlcl9zdGF0ZSB2Yl9zdGF0ZSA9IFZCMl9CVUZfU1RB VEVfRVJST1I7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlmIChtZHBfbTJtX2N0eF9pc19zdGF0ZV9z ZXQoY3R4LCBNRFBfTTJNX0NUWF9FUlJPUikpIHsKPiArCQlkZXZfZXJyKCZjdHgtPm1kcF9kZXYt PnBkZXYtPmRldiwKPiArCQkJIm1kcF9tMm1fY3R4IGlzIGluIGVycm9yIHN0YXRlXG4iKTsKPiAr CQlnb3RvIHdvcmtlcl9lbmQ7Cj4gKwl9Cj4gKwo+ICsJcGFyYW0uZnJhbWVfbm8gPSBjdHgtPmN1 cnJfcGFyYW0uZnJhbWVfbm87Cj4gKwlwYXJhbS50eXBlID0gY3R4LT5jdXJyX3BhcmFtLnR5cGU7 Cj4gKwlwYXJhbS5udW1faW5wdXRzID0gMTsKPiArCXBhcmFtLm51bV9vdXRwdXRzID0gMTsKPiAr Cj4gKwlmcmFtZSA9IGN0eF9nZXRfZnJhbWUoY3R4LCBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBV VF9NUExBTkUpOwo+ICsJc3JjX3ZiID0gdjRsMl9tMm1fbmV4dF9zcmNfYnVmKGN0eC0+bTJtX2N0 eCk7Cj4gKwltZHBfc2V0X3NyY19jb25maWcoJnBhcmFtLmlucHV0c1swXSwgZnJhbWUsICZzcmNf dmItPnZiMl9idWYpOwo+ICsKPiArCWZyYW1lID0gY3R4X2dldF9mcmFtZShjdHgsIFY0TDJfQlVG X1RZUEVfVklERU9fQ0FQVFVSRV9NUExBTkUpOwo+ICsJZHN0X3ZiID0gdjRsMl9tMm1fbmV4dF9k c3RfYnVmKGN0eC0+bTJtX2N0eCk7Cj4gKwltZHBfc2V0X2RzdF9jb25maWcoJnBhcmFtLm91dHB1 dHNbMF0sIGZyYW1lLCAmZHN0X3ZiLT52YjJfYnVmKTsKPiArCj4gKwlwYXJhbS50aW1lc3RhbXAg PSBzcmNfdmItPnZiMl9idWYudGltZXN0YW1wOwo+ICsKPiArCXJldCA9IG1kcF92cHVfcHJvY2Vz cygmY3R4LT52cHUsICZwYXJhbSk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2VycigmY3R4LT5t ZHBfZGV2LT5wZGV2LT5kZXYsCj4gKwkJCSJWUFUgTURQIHByb2Nlc3MgZmFpbGVkOiAlZFxuIiwg cmV0KTsKPiArCQlnb3RvIHdvcmtlcl9lbmQ7Cj4gKwl9Cj4gKwo+ICsJdGFzay5jb25maWcgPSBj dHgtPnZwdS5jb25maWc7Cj4gKwl0YXNrLnBhcmFtID0gJnBhcmFtOwo+ICsJdGFzay5jb21wb3Nl c1swXSA9ICZmcmFtZS0+Y29tcG9zZTsKPiArCXRhc2suY21kcV9jYiA9IE5VTEw7Cj4gKwl0YXNr LmNiX2RhdGEgPSBOVUxMOwo+ICsJdGFzay5tZHBfY3R4ID0gY3R4Owo+ICsKPiArCXJldCA9IG1k cF9jbWRxX3NlbmQoY3R4LT5tZHBfZGV2LCAmdGFzayk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2 X2VycigmY3R4LT5tZHBfZGV2LT5wZGV2LT5kZXYsCj4gKwkJCSJDTURRIHNlbmR0YXNrIGZhaWxl ZDogJWRcbiIsIHJldCk7Cj4gKwkJZ290byB3b3JrZXJfZW5kOwo+ICsJfQo+ICsKPiArCXJldHVy bjsKPiArCj4gK3dvcmtlcl9lbmQ6Cj4gKwltZHBfbTJtX3Byb2Nlc3NfZG9uZShjdHgsIHZiX3N0 YXRlKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbWRwX20ybV9kZXZpY2VfcnVuKHZvaWQgKnBy aXYpCj4gK3sKPiArCXN0cnVjdCBtZHBfbTJtX2N0eCAqY3R4ID0gcHJpdjsKPiArCj4gKwlxdWV1 ZV93b3JrKGN0eC0+bWRwX2Rldi0+am9iX3dxLCAmY3R4LT53b3JrKTsKPiArfQo+ICsKPiArc3Rh dGljIGludCBtZHBfbTJtX3N0YXJ0X3N0cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICpxLCB1bnNp Z25lZCBpbnQgY291bnQpCj4gK3sKPiArCXN0cnVjdCBtZHBfbTJtX2N0eCAqY3R4ID0gdmIyX2dl dF9kcnZfcHJpdihxKTsKPiArCj4gKwljdHgtPmZyYW1lX2NvdW50W01EUF9NMk1fU1JDXSA9IDA7 Cj4gKwljdHgtPmZyYW1lX2NvdW50W01EUF9NMk1fRFNUXSA9IDA7Cj4gKwo+ICsJcmV0dXJuIDA7 Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgdmIyX3Y0bDJfYnVmZmVyICptZHBfbTJtX2J1Zl9y ZW1vdmUoc3RydWN0IG1kcF9tMm1fY3R4ICpjdHgsCj4gKwkJCQkJCSAgdW5zaWduZWQgaW50IHR5 cGUpCj4gK3sKPiArCWlmIChWNEwyX1RZUEVfSVNfT1VUUFVUKHR5cGUpKQo+ICsJCXJldHVybiAo c3RydWN0IHZiMl92NGwyX2J1ZmZlciAqKQo+ICsJCQl2NGwyX20ybV9zcmNfYnVmX3JlbW92ZShj dHgtPm0ybV9jdHgpOwo+ICsJZWxzZQo+ICsJCXJldHVybiAoc3RydWN0IHZiMl92NGwyX2J1ZmZl ciAqKQo+ICsJCQl2NGwyX20ybV9kc3RfYnVmX3JlbW92ZShjdHgtPm0ybV9jdHgpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCBtZHBfbTJtX3N0b3Bfc3RyZWFtaW5nKHN0cnVjdCB2YjJfcXVldWUg KnEpCj4gK3sKPiArCXN0cnVjdCBtZHBfbTJtX2N0eCAqY3R4ID0gdmIyX2dldF9kcnZfcHJpdihx KTsKPiArCXN0cnVjdCB2YjJfdjRsMl9idWZmZXIgKnZiOwo+ICsKPiArCXZiID0gbWRwX20ybV9i dWZfcmVtb3ZlKGN0eCwgcS0+dHlwZSk7Cj4gKwl3aGlsZSAodmIpIHsKPiArCQl2NGwyX20ybV9i dWZfZG9uZSh2YiwgVkIyX0JVRl9TVEFURV9FUlJPUik7Cj4gKwkJdmIgPSBtZHBfbTJtX2J1Zl9y ZW1vdmUoY3R4LCBxLT50eXBlKTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGludCBtZHBfbTJt X3F1ZXVlX3NldHVwKHN0cnVjdCB2YjJfcXVldWUgKnEsCj4gKwkJCSAgICAgICB1bnNpZ25lZCBp bnQgKm51bV9idWZmZXJzLAo+ICsJCQkgICAgICAgdW5zaWduZWQgaW50ICpudW1fcGxhbmVzLCB1 bnNpZ25lZCBpbnQgc2l6ZXNbXSwKPiArCQkJICAgICAgIHN0cnVjdCBkZXZpY2UgKmFsbG9jX2Rl dnNbXSkKPiArewo+ICsJc3RydWN0IG1kcF9tMm1fY3R4ICpjdHggPSB2YjJfZ2V0X2Rydl9wcml2 KHEpOwo+ICsJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdF9tcGxhbmUgKnBpeF9tcDsKPiArCXN0cnVj dCBkZXZpY2UgKmRldiA9ICZjdHgtPm1kcF9kZXYtPnBkZXYtPmRldjsKPiArCXUzMiBpOwo+ICsK PiArCXBpeF9tcCA9ICZjdHhfZ2V0X2ZyYW1lKGN0eCwgcS0+dHlwZSktPmZvcm1hdC5mbXQucGl4 X21wOwo+ICsKPiArCS8qIGZyb20gVklESU9DX0NSRUFURV9CVUZTICovCj4gKwlpZiAoKm51bV9w bGFuZXMpIHsKPiArCQlpZiAoKm51bV9wbGFuZXMgIT0gcGl4X21wLT5udW1fcGxhbmVzKQo+ICsJ CQlyZXR1cm4gLUVJTlZBTDsKPiArCQlmb3IgKGkgPSAwOyBpIDwgcGl4X21wLT5udW1fcGxhbmVz OyArK2kpCj4gKwkJCWlmIChzaXplc1tpXSA8IHBpeF9tcC0+cGxhbmVfZm10W2ldLnNpemVpbWFn ZSkKPiArCQkJCXJldHVybiAtRUlOVkFMOwo+ICsJfSBlbHNlIHsvKiBmcm9tIFZJRElPQ19SRVFC VUZTICovCj4gKwkJKm51bV9wbGFuZXMgPSBwaXhfbXAtPm51bV9wbGFuZXM7Cj4gKwkJZm9yIChp ID0gMDsgaSA8IHBpeF9tcC0+bnVtX3BsYW5lczsgKytpKQo+ICsJCQlzaXplc1tpXSA9IHBpeF9t cC0+cGxhbmVfZm10W2ldLnNpemVpbWFnZTsKPiArCX0KPiArCj4gKwlkZXZfaW5mbyhkZXYsICJb JWRdIHR5cGU6JWQsIHBsYW5lczoldSwgYnVmZmVyczoldSwgc2l6ZToldSwldSwldSIsCj4gKwkJ IGN0eC0+aWQsIHEtPnR5cGUsICpudW1fcGxhbmVzLCAqbnVtX2J1ZmZlcnMsCj4gKwkJIHNpemVz WzBdLCBzaXplc1sxXSwgc2l6ZXNbMl0pOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgbWRwX20ybV9idWZfcHJlcGFyZShzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIpCj4gK3sKPiAr CXN0cnVjdCBtZHBfbTJtX2N0eCAqY3R4ID0gdmIyX2dldF9kcnZfcHJpdih2Yi0+dmIyX3F1ZXVl KTsKPiArCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXRfbXBsYW5lICpwaXhfbXA7Cj4gKwlzdHJ1Y3Qg dmIyX3Y0bDJfYnVmZmVyICp2NGwyX2J1ZiA9IHRvX3ZiMl92NGwyX2J1ZmZlcih2Yik7Cj4gKwl1 MzIgaTsKPiArCj4gKwl2NGwyX2J1Zi0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7Cj4gKwo+ICsJ aWYgKCFWNEwyX1RZUEVfSVNfT1VUUFVUKHZiLT50eXBlKSkgewo+ICsJCXBpeF9tcCA9ICZjdHhf Z2V0X2ZyYW1lKGN0eCwgdmItPnR5cGUpLT5mb3JtYXQuZm10LnBpeF9tcDsKPiArCQlmb3IgKGkg PSAwOyBpIDwgcGl4X21wLT5udW1fcGxhbmVzOyArK2kpIHsKPiArCQkJdmIyX3NldF9wbGFuZV9w YXlsb2FkKHZiLCBpLAo+ICsJCQkJCSAgICAgIHBpeF9tcC0+cGxhbmVfZm10W2ldLnNpemVpbWFn ZSk7Cj4gKwkJfQo+ICsJfQo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbWRw X20ybV9idWZfb3V0X3ZhbGlkYXRlKHN0cnVjdCB2YjJfYnVmZmVyICp2YikKPiArewo+ICsJc3Ry dWN0IHZiMl92NGwyX2J1ZmZlciAqdjRsMl9idWYgPSB0b192YjJfdjRsMl9idWZmZXIodmIpOwo+ ICsKPiArCXY0bDJfYnVmLT5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKPiArCj4gKwlyZXR1cm4g MDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbWRwX20ybV9idWZfcXVldWUoc3RydWN0IHZiMl9i dWZmZXIgKnZiKQo+ICt7Cj4gKwlzdHJ1Y3QgbWRwX20ybV9jdHggKmN0eCA9IHZiMl9nZXRfZHJ2 X3ByaXYodmItPnZiMl9xdWV1ZSk7Cj4gKwlzdHJ1Y3QgdmIyX3Y0bDJfYnVmZmVyICp2NGwyX2J1 ZiA9IHRvX3ZiMl92NGwyX2J1ZmZlcih2Yik7Cj4gKwo+ICsJdjRsMl9idWYtPmZpZWxkID0gVjRM Ml9GSUVMRF9OT05FOwo+ICsKPiArCXY0bDJfbTJtX2J1Zl9xdWV1ZShjdHgtPm0ybV9jdHgsIHRv X3ZiMl92NGwyX2J1ZmZlcih2YikpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHZi Ml9vcHMgbWRwX20ybV9xb3BzID0gewo+ICsJLnF1ZXVlX3NldHVwCT0gbWRwX20ybV9xdWV1ZV9z ZXR1cCwKPiArCS53YWl0X3ByZXBhcmUJPSB2YjJfb3BzX3dhaXRfcHJlcGFyZSwKPiArCS53YWl0 X2ZpbmlzaAk9IHZiMl9vcHNfd2FpdF9maW5pc2gsCj4gKwkuYnVmX3ByZXBhcmUJPSBtZHBfbTJt X2J1Zl9wcmVwYXJlLAo+ICsJLnN0YXJ0X3N0cmVhbWluZyA9IG1kcF9tMm1fc3RhcnRfc3RyZWFt aW5nLAo+ICsJLnN0b3Bfc3RyZWFtaW5nCT0gbWRwX20ybV9zdG9wX3N0cmVhbWluZywKPiArCS5i dWZfcXVldWUJPSBtZHBfbTJtX2J1Zl9xdWV1ZSwKPiArCS5idWZfb3V0X3ZhbGlkYXRlID0gbWRw X20ybV9idWZfb3V0X3ZhbGlkYXRlLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBtZHBfbTJtX3F1 ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKPiArCQkJICAgIHN0cnVjdCB2NGwy X2NhcGFiaWxpdHkgKmNhcCkKPiArewo+ICsJc3RydWN0IG1kcF9tMm1fY3R4ICpjdHggPSBmaF90 b19jdHgoZmgpOwo+ICsKPiArCXN0cnNjcHkoY2FwLT5kcml2ZXIsIE1EUF9NT0RVTEVfTkFNRSwg c2l6ZW9mKGNhcC0+ZHJpdmVyKSk7Cj4gKwlzdHJzY3B5KGNhcC0+Y2FyZCwgY3R4LT5tZHBfZGV2 LT5wZGV2LT5uYW1lLCBzaXplb2YoY2FwLT5jYXJkKSk7Cj4gKwlzdHJzY3B5KGNhcC0+YnVzX2lu Zm8sICJwbGF0Zm9ybTptdGstbWRwMyIsIHNpemVvZihjYXAtPmJ1c19pbmZvKSk7Cj4gKwo+ICsJ cmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbWRwX20ybV9lbnVtX2ZtdF9tcGxhbmUo c3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAo+ICsJCQkJICAgc3RydWN0IHY0bDJfZm10ZGVz YyAqZikKPiArewo+ICsJcmV0dXJuIG1kcF9lbnVtX2ZtdF9tcGxhbmUoZik7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgbWRwX20ybV9nX2ZtdF9tcGxhbmUoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQg KmZoLAo+ICsJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQo+ICt7Cj4gKwlzdHJ1Y3QgbWRwX20y bV9jdHggKmN0eCA9IGZoX3RvX2N0eChmaCk7Cj4gKwlzdHJ1Y3QgbWRwX2ZyYW1lICpmcmFtZTsK PiArCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXRfbXBsYW5lICpwaXhfbXA7Cj4gKwlzdHJ1Y3QgZGV2 aWNlICpkZXYgPSAmY3R4LT5tZHBfZGV2LT5wZGV2LT5kZXY7Cj4gKwo+ICsJZnJhbWUgPSBjdHhf Z2V0X2ZyYW1lKGN0eCwgZi0+dHlwZSk7Cj4gKwkqZiA9IGZyYW1lLT5mb3JtYXQ7Cj4gKwlwaXhf bXAgPSAmZi0+Zm10LnBpeF9tcDsKPiArCXBpeF9tcC0+Y29sb3JzcGFjZSA9IGN0eC0+Y3Vycl9w YXJhbS5jb2xvcnNwYWNlOwo+ICsJcGl4X21wLT54ZmVyX2Z1bmMgPSBjdHgtPmN1cnJfcGFyYW0u eGZlcl9mdW5jOwo+ICsJcGl4X21wLT55Y2Jjcl9lbmMgPSBjdHgtPmN1cnJfcGFyYW0ueWNiY3Jf ZW5jOwo+ICsJcGl4X21wLT5xdWFudGl6YXRpb24gPSBjdHgtPmN1cnJfcGFyYW0ucXVhbnQ7Cj4g Kwo+ICsJZGV2X2luZm8oZGV2LCAiWyVkXSB0eXBlOiVkLCBmcmFtZToldXgldSBjb2xvcnNwYWNl PSVkIiwgY3R4LT5pZCwgZi0+dHlwZSwKPiArCQkgZi0+Zm10LnBpeF9tcC53aWR0aCwgZi0+Zm10 LnBpeF9tcC5oZWlnaHQsCj4gKwkJIGYtPmZtdC5waXhfbXAuY29sb3JzcGFjZSk7Cj4gKwlyZXR1 cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBtZHBfbTJtX3NfZm10X21wbGFuZShzdHJ1Y3Qg ZmlsZSAqZmlsZSwgdm9pZCAqZmgsCj4gKwkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCj4gK3sK PiArCXN0cnVjdCBtZHBfbTJtX2N0eCAqY3R4ID0gZmhfdG9fY3R4KGZoKTsKPiArCXN0cnVjdCBt ZHBfZnJhbWUgKmZyYW1lID0gY3R4X2dldF9mcmFtZShjdHgsIGYtPnR5cGUpOwo+ICsJc3RydWN0 IG1kcF9mcmFtZSAqY2FwdHVyZTsKPiArCWNvbnN0IHN0cnVjdCBtZHBfZm9ybWF0ICpmbXQ7Cj4g KwlzdHJ1Y3QgdmIyX3F1ZXVlICp2cTsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjdHgtPm1k cF9kZXYtPnBkZXYtPmRldjsKPiArCj4gKwlkZXZfaW5mbyhkZXYsICJbJWRdIHR5cGU6JWQiLCBj dHgtPmlkLCBmLT50eXBlKTsKPiArCj4gKwlmbXQgPSBtZHBfdHJ5X2ZtdF9tcGxhbmUoZiwgJmN0 eC0+Y3Vycl9wYXJhbSwgY3R4LT5pZCk7Cj4gKwlpZiAoIWZtdCkgewo+ICsJCWRldl9pbmZvKGRl diwgIlslZF0gdHJ5X2ZtdCBmYWlsZWQsIHR5cGU6JWQiLCBjdHgtPmlkLCBmLT50eXBlKTsKPiAr CQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwl2cSA9IHY0bDJfbTJtX2dldF92cShjdHgt Pm0ybV9jdHgsIGYtPnR5cGUpOwo+ICsJaWYgKHZiMl9pc19zdHJlYW1pbmcodnEpKSB7Cj4gKwkJ ZGV2X2luZm8oJmN0eC0+bWRwX2Rldi0+cGRldi0+ZGV2LCAiUXVldWUgJWQgYnVzeVxuIiwgZi0+ dHlwZSk7Cj4gKwkJcmV0dXJuIC1FQlVTWTsKPiArCX0KPiArCj4gKwlmcmFtZS0+Zm9ybWF0ID0g KmY7Cj4gKwlmcmFtZS0+bWRwX2ZtdCA9IGZtdDsKPiArCWZyYW1lLT55Y2Jjcl9wcm9mID0gbWRw X21hcF95Y2Jjcl9wcm9mX21wbGFuZShmLCBmbXQtPm1kcF9jb2xvcik7Cj4gKwlmcmFtZS0+dXNh Z2UgPSBWNEwyX1RZUEVfSVNfT1VUUFVUKGYtPnR5cGUpID8KPiArCQlNRFBfQlVGRkVSX1VTQUdF X0hXX1JFQUQgOiBNRFBfQlVGRkVSX1VTQUdFX01EUDsKPiArCj4gKwljYXB0dXJlID0gY3R4X2dl dF9mcmFtZShjdHgsIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRV9NUExBTkUpOwo+ICsJaWYg KFY0TDJfVFlQRV9JU19PVVRQVVQoZi0+dHlwZSkpIHsKPiArCQljYXB0dXJlLT5jcm9wLmMubGVm dCA9IDA7Cj4gKwkJY2FwdHVyZS0+Y3JvcC5jLnRvcCA9IDA7Cj4gKwkJY2FwdHVyZS0+Y3JvcC5j LndpZHRoID0gZi0+Zm10LnBpeF9tcC53aWR0aDsKPiArCQljYXB0dXJlLT5jcm9wLmMuaGVpZ2h0 ID0gZi0+Zm10LnBpeF9tcC5oZWlnaHQ7Cj4gKwkJY3R4LT5jdXJyX3BhcmFtLmNvbG9yc3BhY2Ug PSBmLT5mbXQucGl4X21wLmNvbG9yc3BhY2U7Cj4gKwkJY3R4LT5jdXJyX3BhcmFtLnljYmNyX2Vu YyA9IGYtPmZtdC5waXhfbXAueWNiY3JfZW5jOwo+ICsJCWN0eC0+Y3Vycl9wYXJhbS5xdWFudCA9 IGYtPmZtdC5waXhfbXAucXVhbnRpemF0aW9uOwo+ICsJCWN0eC0+Y3Vycl9wYXJhbS54ZmVyX2Z1 bmMgPSBmLT5mbXQucGl4X21wLnhmZXJfZnVuYzsKPiArCX0gZWxzZSB7Cj4gKwkJY2FwdHVyZS0+ Y29tcG9zZS5sZWZ0ID0gMDsKPiArCQljYXB0dXJlLT5jb21wb3NlLnRvcCA9IDA7Cj4gKwkJY2Fw dHVyZS0+Y29tcG9zZS53aWR0aCA9IGYtPmZtdC5waXhfbXAud2lkdGg7Cj4gKwkJY2FwdHVyZS0+ Y29tcG9zZS5oZWlnaHQgPSBmLT5mbXQucGl4X21wLmhlaWdodDsKPiArCX0KPiArCj4gKwljdHgt PmZyYW1lX2NvdW50W01EUF9NMk1fU1JDXSA9IDA7Cj4gKwljdHgtPmZyYW1lX2NvdW50W01EUF9N Mk1fRFNUXSA9IDA7Cj4gKwo+ICsJZGV2X2luZm8oZGV2LCAiWyVkXSB0eXBlOiVkLCBmcmFtZTol dXgldSIsIGN0eC0+aWQsIGYtPnR5cGUsCj4gKwkJIGYtPmZtdC5waXhfbXAud2lkdGgsIGYtPmZt dC5waXhfbXAuaGVpZ2h0KTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG1k cF9tMm1fdHJ5X2ZtdF9tcGxhbmUoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAo+ICsJCQkJ ICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCj4gK3sKPiArCXN0cnVjdCBtZHBfbTJtX2N0eCAqY3R4 ID0gZmhfdG9fY3R4KGZoKTsKPiArCj4gKwlpZiAoIW1kcF90cnlfZm10X21wbGFuZShmLCAmY3R4 LT5jdXJyX3BhcmFtLCBjdHgtPmlkKSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlyZXR1 cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBtZHBfbTJtX3N0cmVhbW9uKHN0cnVjdCBmaWxl ICpmaWxlLCB2b2lkICpmaCwKPiArCQkJICAgIGVudW0gdjRsMl9idWZfdHlwZSB0eXBlKQo+ICt7 Cj4gKwlzdHJ1Y3QgbWRwX20ybV9jdHggKmN0eCA9IGZoX3RvX2N0eChmaCk7Cj4gKwlzdHJ1Y3Qg bWRwX2ZyYW1lICpjYXB0dXJlOwo+ICsJaW50IHJldDsKPiArCWJvb2wgb3V0X3N0cmVhbWluZywg Y2FwX3N0cmVhbWluZzsKPiArCj4gKwljYXB0dXJlID0gY3R4X2dldF9mcmFtZShjdHgsIFY0TDJf QlVGX1RZUEVfVklERU9fQ0FQVFVSRV9NUExBTkUpOwo+ICsJb3V0X3N0cmVhbWluZyA9IGN0eC0+ bTJtX2N0eC0+b3V0X3FfY3R4LnEuc3RyZWFtaW5nOwo+ICsJY2FwX3N0cmVhbWluZyA9IGN0eC0+ bTJtX2N0eC0+Y2FwX3FfY3R4LnEuc3RyZWFtaW5nOwo+ICsKPiArCS8qIENoZWNrIHRvIHNlZSBp ZiBzY2FsaW5nIHJhdGlvIGlzIHdpdGhpbiBzdXBwb3J0ZWQgcmFuZ2UgKi8KPiArCWlmICgoVjRM Ml9UWVBFX0lTX09VVFBVVCh0eXBlKSAmJiBjYXBfc3RyZWFtaW5nKSB8fAo+ICsJICAgICghVjRM Ml9UWVBFX0lTX09VVFBVVCh0eXBlKSAmJiBvdXRfc3RyZWFtaW5nKSkgewo+ICsJCXJldCA9IG1k cF9jaGVja19zY2FsaW5nX3JhdGlvKCZjYXB0dXJlLT5jcm9wLmMsCj4gKwkJCQkJICAgICAgJmNh cHR1cmUtPmNvbXBvc2UsCj4gKwkJCQkJICAgICAgY2FwdHVyZS0+cm90YXRpb24sCj4gKwkJCQkJ ICAgICAgY3R4LT5jdXJyX3BhcmFtLmxpbWl0KTsKPiArCQlpZiAocmV0KSB7Cj4gKwkJCWRldl9p bmZvKCZjdHgtPm1kcF9kZXYtPnBkZXYtPmRldiwKPiArCQkJCSAiT3V0IG9mIHNjYWxpbmcgcmFu Z2VcbiIpOwo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJCX0KPiArCX0KPiArCj4gKwlpZiAoIW1kcF9t Mm1fY3R4X2lzX3N0YXRlX3NldChjdHgsIE1EUF9WUFVfSU5JVCkpIHsKPiArCQlyZXQgPSBtZHBf dnB1X2dldF9sb2NrZWQoY3R4LT5tZHBfZGV2KTsKPiArCQlpZiAocmV0KQo+ICsJCQlyZXR1cm4g cmV0Owo+ICsKPiArCQlyZXQgPSBtZHBfdnB1X2N0eF9pbml0KCZjdHgtPnZwdSwgJmN0eC0+bWRw X2Rldi0+dnB1LAo+ICsJCQkJICAgICAgIE1EUF9ERVZfTTJNKTsKPiArCQlpZiAocmV0KSB7Cj4g KwkJCWRldl9lcnIoJmN0eC0+bWRwX2Rldi0+cGRldi0+ZGV2LAo+ICsJCQkJIlZQVSBpbml0IGZh aWxlZCAlZFxuIiwgcmV0KTsKPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwkJfQo+ICsJCW1kcF9t Mm1fY3R4X3NldF9zdGF0ZShjdHgsIE1EUF9WUFVfSU5JVCk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJu IHY0bDJfbTJtX3N0cmVhbW9uKGZpbGUsIGN0eC0+bTJtX2N0eCwgdHlwZSk7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgbWRwX20ybV9nX3NlbGVjdGlvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAq ZmgsCj4gKwkJCSAgICAgICBzdHJ1Y3QgdjRsMl9zZWxlY3Rpb24gKnMpCj4gK3sKPiArCXN0cnVj dCBtZHBfbTJtX2N0eCAqY3R4ID0gZmhfdG9fY3R4KGZoKTsKPiArCXN0cnVjdCBtZHBfZnJhbWUg KmZyYW1lOwo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJmN0eC0+bWRwX2Rldi0+cGRldi0+ZGV2 Owo+ICsJYm9vbCB2YWxpZCA9IGZhbHNlOwo+ICsKPiArCWlmIChzLT50eXBlID09IFY0TDJfQlVG X1RZUEVfVklERU9fT1VUUFVUKQo+ICsJCXZhbGlkID0gbWRwX3RhcmdldF9pc19jcm9wKHMtPnRh cmdldCk7Cj4gKwllbHNlIGlmIChzLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVS RSkKPiArCQl2YWxpZCA9IG1kcF90YXJnZXRfaXNfY29tcG9zZShzLT50YXJnZXQpOwo+ICsKPiAr CWlmICghdmFsaWQpIHsKPiArCQlkZXZfZXJyKGRldiwgIlslczolZF0gaW52YWxpZCB0eXBlOiV1 IHRhcmdldDoldSIsIF9fZnVuY19fLCBjdHgtPmlkLAo+ICsJCQlzLT50eXBlLCBzLT50YXJnZXQp Owo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCXN3aXRjaCAocy0+dGFyZ2V0KSB7 Cj4gKwljYXNlIFY0TDJfU0VMX1RHVF9DUk9QOgo+ICsJCWlmIChzLT50eXBlID09IFY0TDJfQlVG X1RZUEVfVklERU9fT1VUUFVUKSB7Cj4gKwkJCWZyYW1lID0gY3R4X2dldF9mcmFtZShjdHgsIFY0 TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRV9NUExBTkUpOwo+ICsJCQlzLT5yID0gZnJhbWUtPmNy b3AuYzsKPiArCQkJcmV0dXJuIDA7Cj4gKwkJfQo+ICsJCWJyZWFrOwo+ICsJY2FzZSBWNEwyX1NF TF9UR1RfQ09NUE9TRToKPiArCQlpZiAocy0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NB UFRVUkUpIHsKPiArCQkJZnJhbWUgPSBjdHhfZ2V0X2ZyYW1lKGN0eCwgVjRMMl9CVUZfVFlQRV9W SURFT19DQVBUVVJFX01QTEFORSk7Cj4gKwkJCXMtPnIgPSBmcmFtZS0+Y29tcG9zZTsKPiArCQkJ cmV0dXJuIDA7Cj4gKwkJfQo+ICsJCWJyZWFrOwo+ICsJY2FzZSBWNEwyX1NFTF9UR1RfQ1JPUF9E RUZBVUxUOgo+ICsJY2FzZSBWNEwyX1NFTF9UR1RfQ1JPUF9CT1VORFM6Cj4gKwkJaWYgKHMtPnR5 cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQpIHsKPiArCQkJZnJhbWUgPSBjdHhfZ2V0 X2ZyYW1lKGN0eCwgcy0+dHlwZSk7Cj4gKwkJCXMtPnIubGVmdCA9IDA7Cj4gKwkJCXMtPnIudG9w ID0gMDsKPiArCQkJcy0+ci53aWR0aCA9IGZyYW1lLT5mb3JtYXQuZm10LnBpeF9tcC53aWR0aDsK PiArCQkJcy0+ci5oZWlnaHQgPSBmcmFtZS0+Zm9ybWF0LmZtdC5waXhfbXAuaGVpZ2h0Owo+ICsJ CQlyZXR1cm4gMDsKPiArCQl9Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIFY0TDJfU0VMX1RHVF9DT01Q T1NFX0RFRkFVTFQ6Cj4gKwljYXNlIFY0TDJfU0VMX1RHVF9DT01QT1NFX0JPVU5EUzoKPiArCQlp ZiAocy0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKPiArCQkJZnJhbWUg PSBjdHhfZ2V0X2ZyYW1lKGN0eCwgcy0+dHlwZSk7Cj4gKwkJCXMtPnIubGVmdCA9IDA7Cj4gKwkJ CXMtPnIudG9wID0gMDsKPiArCQkJcy0+ci53aWR0aCA9IGZyYW1lLT5mb3JtYXQuZm10LnBpeF9t cC53aWR0aDsKPiArCQkJcy0+ci5oZWlnaHQgPSBmcmFtZS0+Zm9ybWF0LmZtdC5waXhfbXAuaGVp Z2h0Owo+ICsJCQlyZXR1cm4gMDsKPiArCQl9Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwlyZXR1cm4g LUVJTlZBTDsKPiArfQo+ICsKPiArc3RhdGljIGludCBtZHBfbTJtX3Nfc2VsZWN0aW9uKHN0cnVj dCBmaWxlICpmaWxlLCB2b2lkICpmaCwKPiArCQkJICAgICAgIHN0cnVjdCB2NGwyX3NlbGVjdGlv biAqcykKPiArewo+ICsJc3RydWN0IG1kcF9tMm1fY3R4ICpjdHggPSBmaF90b19jdHgoZmgpOwo+ ICsJc3RydWN0IG1kcF9mcmFtZSAqZnJhbWUgPSBjdHhfZ2V0X2ZyYW1lKGN0eCwgcy0+dHlwZSk7 Cj4gKwlzdHJ1Y3QgbWRwX2ZyYW1lICpjYXB0dXJlOwo+ICsJc3RydWN0IHY0bDJfcmVjdCByOwo+ ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJmN0eC0+bWRwX2Rldi0+cGRldi0+ZGV2Owo+ICsJYm9v bCB2YWxpZCA9IGZhbHNlOwo+ICsJaW50IHJldDsKPiArCj4gKwlpZiAocy0+dHlwZSA9PSBWNEwy X0JVRl9UWVBFX1ZJREVPX09VVFBVVCkKPiArCQl2YWxpZCA9IChzLT50YXJnZXQgPT0gVjRMMl9T RUxfVEdUX0NST1ApOwo+ICsJZWxzZSBpZiAocy0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVP X0NBUFRVUkUpCj4gKwkJdmFsaWQgPSAocy0+dGFyZ2V0ID09IFY0TDJfU0VMX1RHVF9DT01QT1NF KTsKPiArCj4gKwlpZiAoIXZhbGlkKSB7Cj4gKwkJZGV2X2VycihkZXYsICJbJXM6JWRdIGludmFs aWQgdHlwZToldSB0YXJnZXQ6JXUiLCBfX2Z1bmNfXywgY3R4LT5pZCwKPiArCQkJcy0+dHlwZSwg cy0+dGFyZ2V0KTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlyZXQgPSBtZHBf dHJ5X2Nyb3AoY3R4LCAmciwgcywgZnJhbWUpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0 Owo+ICsJY2FwdHVyZSA9IGN0eF9nZXRfZnJhbWUoY3R4LCBWNEwyX0JVRl9UWVBFX1ZJREVPX0NB UFRVUkVfTVBMQU5FKTsKPiArCj4gKwlpZiAobWRwX3RhcmdldF9pc19jcm9wKHMtPnRhcmdldCkp Cj4gKwkJY2FwdHVyZS0+Y3JvcC5jID0gcjsKPiArCWVsc2UKPiArCQljYXB0dXJlLT5jb21wb3Nl ID0gcjsKPiArCj4gKwlzLT5yID0gcjsKPiArCW1lbXNldChzLT5yZXNlcnZlZCwgMCwgc2l6ZW9m KHMtPnJlc2VydmVkKSk7Cj4gKwo+ICsJY3R4LT5mcmFtZV9jb3VudFtNRFBfTTJNX1NSQ10gPSAw Owo+ICsJY3R4LT5mcmFtZV9jb3VudFtNRFBfTTJNX0RTVF0gPSAwOwo+ICsJcmV0dXJuIDA7Cj4g K30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgbWRwX20ybV9pb2N0 bF9vcHMgPSB7Cj4gKwkudmlkaW9jX3F1ZXJ5Y2FwCQk9IG1kcF9tMm1fcXVlcnljYXAsCj4gKwku dmlkaW9jX2VudW1fZm10X3ZpZF9jYXAJPSBtZHBfbTJtX2VudW1fZm10X21wbGFuZSwKPiArCS52 aWRpb2NfZW51bV9mbXRfdmlkX291dAk9IG1kcF9tMm1fZW51bV9mbXRfbXBsYW5lLAo+ICsJLnZp ZGlvY19nX2ZtdF92aWRfY2FwX21wbGFuZQk9IG1kcF9tMm1fZ19mbXRfbXBsYW5lLAo+ICsJLnZp ZGlvY19nX2ZtdF92aWRfb3V0X21wbGFuZQk9IG1kcF9tMm1fZ19mbXRfbXBsYW5lLAo+ICsJLnZp ZGlvY19zX2ZtdF92aWRfY2FwX21wbGFuZQk9IG1kcF9tMm1fc19mbXRfbXBsYW5lLAo+ICsJLnZp ZGlvY19zX2ZtdF92aWRfb3V0X21wbGFuZQk9IG1kcF9tMm1fc19mbXRfbXBsYW5lLAo+ICsJLnZp ZGlvY190cnlfZm10X3ZpZF9jYXBfbXBsYW5lCT0gbWRwX20ybV90cnlfZm10X21wbGFuZSwKPiAr CS52aWRpb2NfdHJ5X2ZtdF92aWRfb3V0X21wbGFuZQk9IG1kcF9tMm1fdHJ5X2ZtdF9tcGxhbmUs Cj4gKwkudmlkaW9jX3JlcWJ1ZnMJCQk9IHY0bDJfbTJtX2lvY3RsX3JlcWJ1ZnMsCj4gKwkudmlk aW9jX3F1ZXJ5YnVmCQk9IHY0bDJfbTJtX2lvY3RsX3F1ZXJ5YnVmLAo+ICsJLnZpZGlvY19xYnVm CQkJPSB2NGwyX20ybV9pb2N0bF9xYnVmLAo+ICsJLnZpZGlvY19leHBidWYJCQk9IHY0bDJfbTJt X2lvY3RsX2V4cGJ1ZiwKPiArCS52aWRpb2NfZHFidWYJCQk9IHY0bDJfbTJtX2lvY3RsX2RxYnVm LAo+ICsJLnZpZGlvY19jcmVhdGVfYnVmcwkJPSB2NGwyX20ybV9pb2N0bF9jcmVhdGVfYnVmcywK PiArCS52aWRpb2Nfc3RyZWFtb24JCT0gbWRwX20ybV9zdHJlYW1vbiwKPiArCS52aWRpb2Nfc3Ry ZWFtb2ZmCQk9IHY0bDJfbTJtX2lvY3RsX3N0cmVhbW9mZiwKPiArCS52aWRpb2NfZ19zZWxlY3Rp b24JCT0gbWRwX20ybV9nX3NlbGVjdGlvbiwKPiArCS52aWRpb2Nfc19zZWxlY3Rpb24JCT0gbWRw X20ybV9zX3NlbGVjdGlvbiwKPiArCS52aWRpb2Nfc3Vic2NyaWJlX2V2ZW50CQk9IHY0bDJfY3Ry bF9zdWJzY3JpYmVfZXZlbnQsCj4gKwkudmlkaW9jX3Vuc3Vic2NyaWJlX2V2ZW50CT0gdjRsMl9l dmVudF91bnN1YnNjcmliZSwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgbWRwX20ybV9xdWV1ZV9p bml0KHZvaWQgKnByaXYsCj4gKwkJCSAgICAgIHN0cnVjdCB2YjJfcXVldWUgKnNyY192cSwKPiAr CQkJICAgICAgc3RydWN0IHZiMl9xdWV1ZSAqZHN0X3ZxKQo+ICt7Cj4gKwlzdHJ1Y3QgbWRwX20y bV9jdHggKmN0eCA9IHByaXY7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXNyY192cS0+dHlwZSA9IFY0 TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX01QTEFORTsKPiArCXNyY192cS0+aW9fbW9kZXMgPSBW QjJfTU1BUCB8IFZCMl9ETUFCVUY7Cj4gKwlzcmNfdnEtPm9wcyA9ICZtZHBfbTJtX3FvcHM7Cj4g KwlzcmNfdnEtPm1lbV9vcHMgPSAmdmIyX2RtYV9jb250aWdfbWVtb3BzOwo+ICsJc3JjX3ZxLT5k cnZfcHJpdiA9IGN0eDsKPiArCXNyY192cS0+YnVmX3N0cnVjdF9zaXplID0gc2l6ZW9mKHN0cnVj dCB2NGwyX20ybV9idWZmZXIpOwo+ICsJc3JjX3ZxLT50aW1lc3RhbXBfZmxhZ3MgPSBWNEwyX0JV Rl9GTEFHX1RJTUVTVEFNUF9DT1BZOwo+ICsJc3JjX3ZxLT5kZXYgPSAmY3R4LT5tZHBfZGV2LT5w ZGV2LT5kZXY7Cj4gKwlzcmNfdnEtPmxvY2sgPSAmY3R4LT5jdHhfbG9jazsKPiArCj4gKwlyZXQg PSB2YjJfcXVldWVfaW5pdChzcmNfdnEpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ ICsKPiArCWRzdF92cS0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRV9NUExBTkU7 Cj4gKwlkc3RfdnEtPmlvX21vZGVzID0gVkIyX01NQVAgfCBWQjJfRE1BQlVGOwo+ICsJZHN0X3Zx LT5vcHMgPSAmbWRwX20ybV9xb3BzOwo+ICsJZHN0X3ZxLT5tZW1fb3BzID0gJnZiMl9kbWFfY29u dGlnX21lbW9wczsKPiArCWRzdF92cS0+ZHJ2X3ByaXYgPSBjdHg7Cj4gKwlkc3RfdnEtPmJ1Zl9z dHJ1Y3Rfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdjRsMl9tMm1fYnVmZmVyKTsKPiArCWRzdF92cS0+ dGltZXN0YW1wX2ZsYWdzID0gVjRMMl9CVUZfRkxBR19USU1FU1RBTVBfQ09QWTsKPiArCWRzdF92 cS0+ZGV2ID0gJmN0eC0+bWRwX2Rldi0+cGRldi0+ZGV2Owo+ICsJZHN0X3ZxLT5sb2NrID0gJmN0 eC0+Y3R4X2xvY2s7Cj4gKwo+ICsJcmV0dXJuIHZiMl9xdWV1ZV9pbml0KGRzdF92cSk7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgbWRwX20ybV9zX2N0cmwoc3RydWN0IHY0bDJfY3RybCAqY3RybCkK PiArewo+ICsJc3RydWN0IG1kcF9tMm1fY3R4ICpjdHggPSBjdHJsX3RvX2N0eChjdHJsKTsKPiAr CXN0cnVjdCBtZHBfZnJhbWUgKmNhcHR1cmU7Cj4gKwo+ICsJaWYgKGN0cmwtPmZsYWdzICYgVjRM Ml9DVFJMX0ZMQUdfSU5BQ1RJVkUpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJY2FwdHVyZSA9IGN0 eF9nZXRfZnJhbWUoY3R4LCBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkVfTVBMQU5FKTsKPiAr CXN3aXRjaCAoY3RybC0+aWQpIHsKPiArCWNhc2UgVjRMMl9DSURfSEZMSVA6Cj4gKwkJY2FwdHVy ZS0+aGZsaXAgPSBjdHJsLT52YWw7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIFY0TDJfQ0lEX1ZGTElQ Ogo+ICsJCWNhcHR1cmUtPnZmbGlwID0gY3RybC0+dmFsOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBW NEwyX0NJRF9ST1RBVEU6Cj4gKwkJY2FwdHVyZS0+cm90YXRpb24gPSBjdHJsLT52YWw7Cj4gKwkJ YnJlYWs7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBz dHJ1Y3QgdjRsMl9jdHJsX29wcyBtZHBfbTJtX2N0cmxfb3BzID0gewo+ICsJLnNfY3RybAk9IG1k cF9tMm1fc19jdHJsLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBtZHBfbTJtX2N0cmxzX2NyZWF0 ZShzdHJ1Y3QgbWRwX20ybV9jdHggKmN0eCkKPiArewo+ICsJdjRsMl9jdHJsX2hhbmRsZXJfaW5p dCgmY3R4LT5jdHJsX2hhbmRsZXIsIE1EUF9NQVhfQ1RSTFMpOwo+ICsJY3R4LT5jdHJscy5oZmxp cCA9IHY0bDJfY3RybF9uZXdfc3RkKCZjdHgtPmN0cmxfaGFuZGxlciwKPiArCQkJCQkgICAgICZt ZHBfbTJtX2N0cmxfb3BzLCBWNEwyX0NJRF9IRkxJUCwKPiArCQkJCQkgICAgIDAsIDEsIDEsIDAp Owo+ICsJY3R4LT5jdHJscy52ZmxpcCA9IHY0bDJfY3RybF9uZXdfc3RkKCZjdHgtPmN0cmxfaGFu ZGxlciwKPiArCQkJCQkgICAgICZtZHBfbTJtX2N0cmxfb3BzLCBWNEwyX0NJRF9WRkxJUCwKPiAr CQkJCQkgICAgIDAsIDEsIDEsIDApOwo+ICsJY3R4LT5jdHJscy5yb3RhdGUgPSB2NGwyX2N0cmxf bmV3X3N0ZCgmY3R4LT5jdHJsX2hhbmRsZXIsCj4gKwkJCQkJICAgICAgJm1kcF9tMm1fY3RybF9v cHMsCj4gKwkJCQkJICAgICAgVjRMMl9DSURfUk9UQVRFLCAwLCAyNzAsIDkwLCAwKTsKPiArCj4g KwlpZiAoY3R4LT5jdHJsX2hhbmRsZXIuZXJyb3IpIHsKPiArCQlpbnQgZXJyID0gY3R4LT5jdHJs X2hhbmRsZXIuZXJyb3I7Cj4gKwo+ICsJCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoJmN0eC0+Y3Ry bF9oYW5kbGVyKTsKPiArCQlkZXZfZXJyKCZjdHgtPm1kcF9kZXYtPnBkZXYtPmRldiwKPiArCQkJ IkZhaWxlZCB0byByZWdpc3RlciBjb250cm9sc1xuIik7Cj4gKwkJcmV0dXJuIGVycjsKPiArCX0K PiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG1kcF9tMm1fb3BlbihzdHJ1Y3Qg ZmlsZSAqZmlsZSkKPiArewo+ICsJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2Rl dmRhdGEoZmlsZSk7Cj4gKwlzdHJ1Y3QgbWRwX2RldiAqbWRwID0gdmlkZW9fZ2V0X2RydmRhdGEo dmRldik7Cj4gKwlzdHJ1Y3QgbWRwX20ybV9jdHggKmN0eDsKPiArCXN0cnVjdCBkZXZpY2UgKmRl diA9ICZtZHAtPnBkZXYtPmRldjsKPiArCWludCByZXQ7Cj4gKwlzdHJ1Y3QgdjRsMl9mb3JtYXQg ZGVmYXVsdF9mb3JtYXQ7Cj4gKwo+ICsJY3R4ID0ga3phbGxvYyhzaXplb2YoKmN0eCksIEdGUF9L RVJORUwpOwo+ICsJaWYgKCFjdHgpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJaWYgKG11 dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmbWRwLT5tMm1fbG9jaykpIHsKPiArCQlyZXQgPSAtRVJF U1RBUlRTWVM7Cj4gKwkJZ290byBlcnJfZnJlZV9jdHg7Cj4gKwl9Cj4gKwo+ICsJY3R4LT5pZCA9 IGlkYV9hbGxvYygmbWRwLT5tZHBfaWRhLCBHRlBfS0VSTkVMKTsKPiArCWN0eC0+bWRwX2RldiA9 IG1kcDsKPiArCj4gKwl2NGwyX2ZoX2luaXQoJmN0eC0+ZmgsIHZkZXYpOwo+ICsJdmRldi0+ZGV2 aWNlX2NhcHMgPSBWNEwyX0NBUF9WSURFT19NMk1fTVBMQU5FIHwgVjRMMl9DQVBfU1RSRUFNSU5H Owo+ICsJZmlsZS0+cHJpdmF0ZV9kYXRhID0gJmN0eC0+Zmg7Cj4gKwlyZXQgPSBtZHBfbTJtX2N0 cmxzX2NyZWF0ZShjdHgpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGVycl9leGl0X2ZoOwo+ICsK PiArCS8qIFVzZSBzZXBhcmF0ZSBjb250cm9sIGhhbmRsZXIgcGVyIGZpbGUgaGFuZGxlICovCj4g KwljdHgtPmZoLmN0cmxfaGFuZGxlciA9ICZjdHgtPmN0cmxfaGFuZGxlcjsKPiArCXY0bDJfZmhf YWRkKCZjdHgtPmZoKTsKPiArCj4gKwltdXRleF9pbml0KCZjdHgtPmN0eF9sb2NrKTsKPiArCWN0 eC0+bTJtX2N0eCA9IHY0bDJfbTJtX2N0eF9pbml0KG1kcC0+bTJtX2RldiwgY3R4LCBtZHBfbTJt X3F1ZXVlX2luaXQpOwo+ICsJaWYgKElTX0VSUihjdHgtPm0ybV9jdHgpKSB7Cj4gKwkJZGV2X2Vy cihkZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBtMm0gY29udGV4dFxuIik7Cj4gKwkJcmV0ID0g UFRSX0VSUihjdHgtPm0ybV9jdHgpOwo+ICsJCWdvdG8gZXJyX3JlbGVhc2VfaGFuZGxlcjsKPiAr CX0KPiArCWN0eC0+ZmgubTJtX2N0eCA9IGN0eC0+bTJtX2N0eDsKPiArCj4gKwlJTklUX1dPUkso JmN0eC0+d29yaywgbWRwX20ybV93b3JrZXIpOwo+ICsKPiArCWN0eC0+Y3Vycl9wYXJhbS5jdHgg PSBjdHg7Cj4gKwlyZXQgPSBtZHBfZnJhbWVwYXJhbV9pbml0KCZjdHgtPmN1cnJfcGFyYW0pOwo+ ICsJaWYgKHJldCkgewo+ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgbWRw IHBhcmFtZXRlclxuIik7Cj4gKwkJZ290byBlcnJfcmVsZWFzZV9tMm1fY3R4Owo+ICsJfQo+ICsK PiArCW11dGV4X3VubG9jaygmbWRwLT5tMm1fbG9jayk7Cj4gKwo+ICsJLyogRGVmYXVsdCBmb3Jt YXQgKi8KPiArCW1lbXNldCgmZGVmYXVsdF9mb3JtYXQsIDAsIHNpemVvZihkZWZhdWx0X2Zvcm1h dCkpOwo+ICsJZGVmYXVsdF9mb3JtYXQudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVU X01QTEFORTsKPiArCWRlZmF1bHRfZm9ybWF0LmZtdC5waXhfbXAud2lkdGggPSAzMjsKPiArCWRl ZmF1bHRfZm9ybWF0LmZtdC5waXhfbXAuaGVpZ2h0ID0gMzI7Cj4gKwlkZWZhdWx0X2Zvcm1hdC5m bXQucGl4X21wLnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1lVVjQyME07Cj4gKwltZHBfbTJt X3NfZm10X21wbGFuZShmaWxlLCAmY3R4LT5maCwgJmRlZmF1bHRfZm9ybWF0KTsKPiArCWRlZmF1 bHRfZm9ybWF0LnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkVfTVBMQU5FOwo+ICsJ bWRwX20ybV9zX2ZtdF9tcGxhbmUoZmlsZSwgJmN0eC0+ZmgsICZkZWZhdWx0X2Zvcm1hdCk7Cj4g Kwo+ICsJZGV2X2RiZyhkZXYsICIlczpbJWRdIiwgX19mdW5jX18sIGN0eC0+aWQpOwo+ICsKPiAr CXJldHVybiAwOwo+ICsKPiArZXJyX3JlbGVhc2VfbTJtX2N0eDoKPiArCXY0bDJfbTJtX2N0eF9y ZWxlYXNlKGN0eC0+bTJtX2N0eCk7Cj4gK2Vycl9yZWxlYXNlX2hhbmRsZXI6Cj4gKwl2NGwyX2N0 cmxfaGFuZGxlcl9mcmVlKCZjdHgtPmN0cmxfaGFuZGxlcik7Cj4gKwl2NGwyX2ZoX2RlbCgmY3R4 LT5maCk7Cj4gK2Vycl9leGl0X2ZoOgo+ICsJdjRsMl9maF9leGl0KCZjdHgtPmZoKTsKPiArCW11 dGV4X3VubG9jaygmbWRwLT5tMm1fbG9jayk7Cj4gK2Vycl9mcmVlX2N0eDoKPiArCWtmcmVlKGN0 eCk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBtZHBfbTJtX3Jl bGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCj4gK3sKPiArCXN0cnVjdCBtZHBfbTJtX2N0eCAqY3R4 ID0gZmhfdG9fY3R4KGZpbGUtPnByaXZhdGVfZGF0YSk7Cj4gKwlzdHJ1Y3QgbWRwX2RldiAqbWRw ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZtZHAtPnBk ZXYtPmRldjsKPiArCj4gKwltdXRleF9sb2NrKCZtZHAtPm0ybV9sb2NrKTsKPiArCXY0bDJfbTJt X2N0eF9yZWxlYXNlKGN0eC0+bTJtX2N0eCk7Cj4gKwlpZiAobWRwX20ybV9jdHhfaXNfc3RhdGVf c2V0KGN0eCwgTURQX1ZQVV9JTklUKSkgewo+ICsJCW1kcF92cHVfY3R4X2RlaW5pdCgmY3R4LT52 cHUpOwo+ICsJCW1kcF92cHVfcHV0X2xvY2tlZChtZHApOwo+ICsJfQo+ICsKPiArCXY0bDJfY3Ry bF9oYW5kbGVyX2ZyZWUoJmN0eC0+Y3RybF9oYW5kbGVyKTsKPiArCXY0bDJfZmhfZGVsKCZjdHgt PmZoKTsKPiArCXY0bDJfZmhfZXhpdCgmY3R4LT5maCk7Cj4gKwlpZGFfZnJlZSgmbWRwLT5tZHBf aWRhLCBjdHgtPmlkKTsKPiArCW11dGV4X3VubG9jaygmbWRwLT5tMm1fbG9jayk7Cj4gKwo+ICsJ ZGV2X2RiZyhkZXYsICIlczpbJWRdIiwgX19mdW5jX18sIGN0eC0+aWQpOwo+ICsJa2ZyZWUoY3R4 KTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwy X2ZpbGVfb3BlcmF0aW9ucyBtZHBfbTJtX2ZvcHMgPSB7Cj4gKwkub3duZXIJCT0gVEhJU19NT0RV TEUsCj4gKwkucG9sbAkJPSB2NGwyX20ybV9mb3BfcG9sbCwKPiArCS51bmxvY2tlZF9pb2N0bAk9 IHZpZGVvX2lvY3RsMiwKPiArCS5tbWFwCQk9IHY0bDJfbTJtX2ZvcF9tbWFwLAo+ICsJLm9wZW4J CT0gbWRwX20ybV9vcGVuLAo+ICsJLnJlbGVhc2UJPSBtZHBfbTJtX3JlbGVhc2UsCj4gK307Cj4g Kwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfbTJtX29wcyBtZHBfbTJtX29wcyA9IHsKPiAr CS5kZXZpY2VfcnVuCT0gbWRwX20ybV9kZXZpY2VfcnVuLAo+ICsJLmpvYl9hYm9ydAk9IG1kcF9t Mm1fam9iX2Fib3J0LAo+ICt9Owo+ICsKPiAraW50IG1kcF9tMm1fZGV2aWNlX3JlZ2lzdGVyKHN0 cnVjdCBtZHBfZGV2ICptZHApCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZtZHAtPnBk ZXYtPmRldjsKPiArCWludCByZXQgPSAwOwo+ICsKPiArCW1kcC0+bTJtX3ZkZXYgPSB2aWRlb19k ZXZpY2VfYWxsb2MoKTsKPiArCWlmICghbWRwLT5tMm1fdmRldikgewo+ICsJCWRldl9lcnIoZGV2 LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHZpZGVvIGRldmljZVxuIik7Cj4gKwkJcmV0ID0gLUVOT01F TTsKPiArCQlnb3RvIGVycl92aWRlb19hbGxvYzsKPiArCX0KPiArCW1kcC0+bTJtX3ZkZXYtPmRl dmljZV9jYXBzID0gVjRMMl9DQVBfVklERU9fTTJNX01QTEFORSB8Cj4gKwkJVjRMMl9DQVBfU1RS RUFNSU5HOwo+ICsJbWRwLT5tMm1fdmRldi0+Zm9wcyA9ICZtZHBfbTJtX2ZvcHM7Cj4gKwltZHAt Pm0ybV92ZGV2LT5pb2N0bF9vcHMgPSAmbWRwX20ybV9pb2N0bF9vcHM7Cj4gKwltZHAtPm0ybV92 ZGV2LT5yZWxlYXNlID0gbWRwX3ZpZGVvX2RldmljZV9yZWxlYXNlOwo+ICsJbWRwLT5tMm1fdmRl di0+bG9jayA9ICZtZHAtPm0ybV9sb2NrOwo+ICsJbWRwLT5tMm1fdmRldi0+dmZsX2RpciA9IFZG TF9ESVJfTTJNOwo+ICsJbWRwLT5tMm1fdmRldi0+djRsMl9kZXYgPSAmbWRwLT52NGwyX2RldjsK PiArCXNucHJpbnRmKG1kcC0+bTJtX3ZkZXYtPm5hbWUsIHNpemVvZihtZHAtPm0ybV92ZGV2LT5u YW1lKSwgIiVzOm0ybSIsCj4gKwkJIE1EUF9NT0RVTEVfTkFNRSk7Cj4gKwl2aWRlb19zZXRfZHJ2 ZGF0YShtZHAtPm0ybV92ZGV2LCBtZHApOwo+ICsKPiArCW1kcC0+bTJtX2RldiA9IHY0bDJfbTJt X2luaXQoJm1kcF9tMm1fb3BzKTsKPiArCWlmIChJU19FUlIobWRwLT5tMm1fZGV2KSkgewo+ICsJ CWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgdjRsMi1tMm0gZGV2aWNlXG4iKTsK PiArCQlyZXQgPSBQVFJfRVJSKG1kcC0+bTJtX2Rldik7Cj4gKwkJZ290byBlcnJfbTJtX2luaXQ7 Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKG1kcC0+bTJtX3ZkZXYs IFZGTF9UWVBFX1ZJREVPLCAyKTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJyKGRldiwgIkZh aWxlZCB0byByZWdpc3RlciB2aWRlbyBkZXZpY2VcbiIpOwo+ICsJCWdvdG8gZXJyX3ZpZGVvX3Jl Z2lzdGVyOwo+ICsJfQo+ICsKPiArCXY0bDJfaW5mbygmbWRwLT52NGwyX2RldiwgIkRyaXZlciBy ZWdpc3RlcmVkIGFzIC9kZXYvdmlkZW8lZCIsCj4gKwkJICBtZHAtPm0ybV92ZGV2LT5udW0pOwo+ ICsJcmV0dXJuIDA7Cj4gKwo+ICtlcnJfdmlkZW9fcmVnaXN0ZXI6Cj4gKwl2NGwyX20ybV9yZWxl YXNlKG1kcC0+bTJtX2Rldik7Cj4gK2Vycl9tMm1faW5pdDoKPiArCXZpZGVvX2RldmljZV9yZWxl YXNlKG1kcC0+bTJtX3ZkZXYpOwo+ICtlcnJfdmlkZW9fYWxsb2M6Cj4gKwo+ICsJcmV0dXJuIHJl dDsKPiArfQo+ICsKPiArdm9pZCBtZHBfbTJtX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBtZHBf ZGV2ICptZHApCj4gK3sKPiArCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKG1kcC0+bTJtX3ZkZXYp Owo+ICt9Cj4gKwo+ICt2b2lkIG1kcF9tMm1fam9iX2ZpbmlzaChzdHJ1Y3QgbWRwX20ybV9jdHgg KmN0eCkKPiArewo+ICsJZW51bSB2YjJfYnVmZmVyX3N0YXRlIHZiX3N0YXRlID0gVkIyX0JVRl9T VEFURV9ET05FOwo+ICsKPiArCW1kcF9tMm1fcHJvY2Vzc19kb25lKGN0eCwgdmJfc3RhdGUpOwo+ ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLW1kcDMvbXRrLW1k cDMtbTJtLmggYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1tZHAzL210ay1tZHAzLW0ybS5o Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmZmYWI1OWFjOWRj Nwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1tZHAz L210ay1tZHAzLW0ybS5oCj4gQEAgLTAsMCArMSw0OSBAQAo+ICsvKiBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMC1vbmx5ICovCj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAyMSBN ZWRpYVRlayBJbmMuCj4gKyAqIEF1dGhvcjogUGluZy1Ic3VuIFd1IDxwaW5nLWhzdW4ud3VAbWVk aWF0ZWsuY29tPgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX19NVEtfTURQM19NMk1fSF9fCj4gKyNk ZWZpbmUgX19NVEtfTURQM19NMk1fSF9fCj4gKwo+ICsjaW5jbHVkZSA8bWVkaWEvdjRsMi1jdHJs cy5oPgo+ICsjaW5jbHVkZSAibXRrLW1kcDMtY29yZS5oIgo+ICsjaW5jbHVkZSAibXRrLW1kcDMt dnB1LmgiCj4gKyNpbmNsdWRlICJtdGstbWRwMy1yZWdzLmgiCj4gKwo+ICsjZGVmaW5lIE1EUF9N QVhfQ1RSTFMJMTAKPiArCj4gK2VudW0gewo+ICsJTURQX00yTV9TUkMgPSAwLAo+ICsJTURQX00y TV9EU1QgPSAxLAo+ICsJTURQX00yTV9NQVgsCj4gK307Cj4gKwo+ICtzdHJ1Y3QgbWRwX20ybV9j dHJscyB7Cj4gKwlzdHJ1Y3QgdjRsMl9jdHJsCSpoZmxpcDsKPiArCXN0cnVjdCB2NGwyX2N0cmwJ KnZmbGlwOwo+ICsJc3RydWN0IHY0bDJfY3RybAkqcm90YXRlOwo+ICt9Owo+ICsKPiArc3RydWN0 IG1kcF9tMm1fY3R4IHsKPiArCXUzMgkJCQlpZDsKPiArCXN0cnVjdCBtZHBfZGV2CQkJKm1kcF9k ZXY7Cj4gKwlzdHJ1Y3QgdjRsMl9maAkJCWZoOwo+ICsJc3RydWN0IHY0bDJfY3RybF9oYW5kbGVy CWN0cmxfaGFuZGxlcjsKPiArCXN0cnVjdCBtZHBfbTJtX2N0cmxzCQljdHJsczsKPiArCXN0cnVj dCB2NGwyX20ybV9jdHgJCSptMm1fY3R4Owo+ICsJc3RydWN0IG1kcF92cHVfY3R4CQl2cHU7Cj4g KwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCXdvcms7Cj4gKwl1MzIJCQkJZnJhbWVfY291bnRbTURQX00y TV9NQVhdOwo+ICsKPiArCXN0cnVjdCBtZHBfZnJhbWVwYXJhbQkJY3Vycl9wYXJhbTsKPiArCS8q IHN5bmNocm9uaXphdGlvbiBwcm90ZWN0IGZvciBtZHAgbTJtIGNvbnRleHQgKi8KPiArCXN0cnVj dCBtdXRleAkJCWN0eF9sb2NrOwo+ICt9Owo+ICsKPiAraW50IG1kcF9tMm1fZGV2aWNlX3JlZ2lz dGVyKHN0cnVjdCBtZHBfZGV2ICptZHApOwo+ICt2b2lkIG1kcF9tMm1fZGV2aWNlX3VucmVnaXN0 ZXIoc3RydWN0IG1kcF9kZXYgKm1kcCk7Cj4gK3ZvaWQgbWRwX20ybV9qb2JfZmluaXNoKHN0cnVj dCBtZHBfbTJtX2N0eCAqY3R4KTsKPiArCj4gKyNlbmRpZiAgLyogX19NVEtfTURQM19NMk1fSF9f ICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLW1kcDMvbXRrLW1k cDMtcmVncy5jIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstbWRwMy9tdGstbWRwMy1yZWdz LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uNDM5NzExMjk4 ODY3Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLW1k cDMvbXRrLW1kcDMtcmVncy5jCj4gQEAgLTAsMCArMSw3MzcgQEAKPiArLy8gU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjEg TWVkaWFUZWsgSW5jLgo+ICsgKiBBdXRob3I6IFBpbmctSHN1biBXdSA8cGluZy1oc3VuLnd1QG1l ZGlhdGVrLmNvbT4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4K PiArI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmMi12NGwyLmg+Cj4gKyNpbmNsdWRlIDxtZWRpYS92 aWRlb2J1ZjItZG1hLWNvbnRpZy5oPgo+ICsjaW5jbHVkZSAibXRrLW1kcDMtY29yZS5oIgo+ICsj aW5jbHVkZSAibXRrLW1kcDMtcmVncy5oIgo+ICsjaW5jbHVkZSAibXRrLW1kcDMtbTJtLmgiCj4g Kwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG1kcF9mb3JtYXQgbWRwX2Zvcm1hdHNbXSA9IHsKPiAr CXsKPiArCQkucGl4ZWxmb3JtYXQJPSBWNEwyX1BJWF9GTVRfR1JFWSwKPiArCQkubWRwX2NvbG9y CT0gTURQX0NPTE9SX0dSRVksCj4gKwkJLmRlcHRoCQk9IHsgOCB9LAo+ICsJCS5yb3dfZGVwdGgJ PSB7IDggfSwKPiArCQkubnVtX3BsYW5lcwk9IDEsCj4gKwkJLmZsYWdzCQk9IE1EUF9GTVRfRkxB R19PVVRQVVQgfCBNRFBfRk1UX0ZMQUdfQ0FQVFVSRSwKPiArCX0sIHsKPiArCQkucGl4ZWxmb3Jt YXQJPSBWNEwyX1BJWF9GTVRfUkdCNTY1WCwKPiArCQkubWRwX2NvbG9yCT0gTURQX0NPTE9SX1JH QjU2NSwKPiArCQkuZGVwdGgJCT0geyAxNiB9LAo+ICsJCS5yb3dfZGVwdGgJPSB7IDE2IH0sCj4g KwkJLm51bV9wbGFuZXMJPSAxLAo+ICsJCS5mbGFncwkJPSBNRFBfRk1UX0ZMQUdfT1VUUFVUIHwg TURQX0ZNVF9GTEFHX0NBUFRVUkUsCj4gKwl9LCB7Cj4gKwkJLnBpeGVsZm9ybWF0CT0gVjRMMl9Q SVhfRk1UX1JHQjU2NSwKPiArCQkubWRwX2NvbG9yCT0gTURQX0NPTE9SX0JHUjU2NSwKCkhlbGxv IE1vdWR5LAoKV2hlbiB0ZXN0aW5nIE1EUDMgd2l0aCBHU3RyZWFtZXIgcGlwZWxpbmUgSSBub3Rp Y2UgUiBhbmQgQiBjb21wb25lbnQgc3dhcCB3aGVuIHVzaW5nClJHQjE2IHBpeGVsIGZvcm1hdC4K VjRMMl9QSVhfRk1UX1JHQjU2NSBzaG91bGQgYmUgbWFwcGVkIG9uIE1EUF9DT0xPUl9SR0I1NjUg dG8gYXZvaWQgdGhpcyBwcm9ibGVtLgoKUmVnYXJkcywKQmVuamFtaW4KCj4gKwkJLmRlcHRoCQk9 IHsgMTYgfSwKPiArCQkucm93X2RlcHRoCT0geyAxNiB9LAo+ICsJCS5udW1fcGxhbmVzCT0gMSwK PiArCQkuZmxhZ3MJCT0gTURQX0ZNVF9GTEFHX09VVFBVVCB8IE1EUF9GTVRfRkxBR19DQVBUVVJF LAo+ICsJfSwgewo+ICsJCS5waXhlbGZvcm1hdAk9IFY0TDJfUElYX0ZNVF9SR0IyNCwKPiArCQku bWRwX2NvbG9yCT0gTURQX0NPTE9SX1JHQjg4OCwKPiArCQkuZGVwdGgJCT0geyAyNCB9LAo+ICsJ CS5yb3dfZGVwdGgJPSB7IDI0IH0sCj4gKwkJLm51bV9wbGFuZXMJPSAxLAo+ICsJCS5mbGFncwkJ PSBNRFBfRk1UX0ZMQUdfT1VUUFVUIHwgTURQX0ZNVF9GTEFHX0NBUFRVUkUsCj4gKwl9LCB7Cj4g KwkJLnBpeGVsZm9ybWF0CT0gVjRMMl9QSVhfRk1UX0JHUjI0LAo+ICsJCS5tZHBfY29sb3IJPSBN RFBfQ09MT1JfQkdSODg4LAo+ICsJCS5kZXB0aAkJPSB7IDI0IH0sCj4gKwkJLnJvd19kZXB0aAk9 IHsgMjQgfSwKPiArCQkubnVtX3BsYW5lcwk9IDEsCj4gKwkJLmZsYWdzCQk9IE1EUF9GTVRfRkxB R19PVVRQVVQgfCBNRFBfRk1UX0ZMQUdfQ0FQVFVSRSwKPiArCX0sIHsKPiArCQkucGl4ZWxmb3Jt YXQJPSBWNEwyX1BJWF9GTVRfQUJHUjMyLAo+ICsJCS5tZHBfY29sb3IJPSBNRFBfQ09MT1JfQkdS QTg4ODgsCj4gKwkJLmRlcHRoCQk9IHsgMzIgfSwKPiArCQkucm93X2RlcHRoCT0geyAzMiB9LAo+ ICsJCS5udW1fcGxhbmVzCT0gMSwKPiArCQkuZmxhZ3MJCT0gTURQX0ZNVF9GTEFHX09VVFBVVCB8 IE1EUF9GTVRfRkxBR19DQVBUVVJFLAo+ICsJfSwgewo+ICsJCS5waXhlbGZvcm1hdAk9IFY0TDJf UElYX0ZNVF9BUkdCMzIsCj4gKwkJLm1kcF9jb2xvcgk9IE1EUF9DT0xPUl9BUkdCODg4OCwKPiAr CQkuZGVwdGgJCT0geyAzMiB9LAo+ICsJCS5yb3dfZGVwdGgJPSB7IDMyIH0sCj4gKwkJLm51bV9w bGFuZXMJPSAxLAo+ICsJCS5mbGFncwkJPSBNRFBfRk1UX0ZMQUdfT1VUUFVUIHwgTURQX0ZNVF9G TEFHX0NBUFRVUkUsCj4gKwl9LCB7Cj4gKwkJLnBpeGVsZm9ybWF0CT0gVjRMMl9QSVhfRk1UX1VZ VlksCj4gKwkJLm1kcF9jb2xvcgk9IE1EUF9DT0xPUl9VWVZZLAo+ICsJCS5kZXB0aAkJPSB7IDE2 IH0sCj4gKwkJLnJvd19kZXB0aAk9IHsgMTYgfSwKPiArCQkubnVtX3BsYW5lcwk9IDEsCj4gKwkJ LndhbGlnbgkJPSAxLAo+ICsJCS5mbGFncwkJPSBNRFBfRk1UX0ZMQUdfT1VUUFVUIHwgTURQX0ZN VF9GTEFHX0NBUFRVUkUsCj4gKwl9LCB7Cj4gKwkJLnBpeGVsZm9ybWF0CT0gVjRMMl9QSVhfRk1U X1ZZVVksCj4gKwkJLm1kcF9jb2xvcgk9IE1EUF9DT0xPUl9WWVVZLAo+ICsJCS5kZXB0aAkJPSB7 IDE2IH0sCj4gKwkJLnJvd19kZXB0aAk9IHsgMTYgfSwKPiArCQkubnVtX3BsYW5lcwk9IDEsCj4g KwkJLndhbGlnbgkJPSAxLAo+ICsJCS5mbGFncwkJPSBNRFBfRk1UX0ZMQUdfT1VUUFVUIHwgTURQ X0ZNVF9GTEFHX0NBUFRVUkUsCj4gKwl9LCB7Cj4gKwkJLnBpeGVsZm9ybWF0CT0gVjRMMl9QSVhf Rk1UX1lVWVYsCj4gKwkJLm1kcF9jb2xvcgk9IE1EUF9DT0xPUl9ZVVlWLAo+ICsJCS5kZXB0aAkJ PSB7IDE2IH0sCj4gKwkJLnJvd19kZXB0aAk9IHsgMTYgfSwKPiArCQkubnVtX3BsYW5lcwk9IDEs Cj4gKwkJLndhbGlnbgkJPSAxLAo+ICsJCS5mbGFncwkJPSBNRFBfRk1UX0ZMQUdfT1VUUFVUIHwg TURQX0ZNVF9GTEFHX0NBUFRVUkUsCj4gKwl9LCB7Cj4gKwkJLnBpeGVsZm9ybWF0CT0gVjRMMl9Q SVhfRk1UX1lWWVUsCj4gKwkJLm1kcF9jb2xvcgk9IE1EUF9DT0xPUl9ZVllVLAo+ICsJCS5kZXB0 aAkJPSB7IDE2IH0sCj4gKwkJLnJvd19kZXB0aAk9IHsgMTYgfSwKPiArCQkubnVtX3BsYW5lcwk9 IDEsCj4gKwkJLndhbGlnbgkJPSAxLAo+ICsJCS5mbGFncwkJPSBNRFBfRk1UX0ZMQUdfT1VUUFVU IHwgTURQX0ZNVF9GTEFHX0NBUFRVUkUsCj4gKwl9LCB7Cj4gKwkJLnBpeGVsZm9ybWF0CT0gVjRM Ml9QSVhfRk1UX1lVVjQyMCwKPiArCQkubWRwX2NvbG9yCT0gTURQX0NPTE9SX0k0MjAsCj4gKwkJ LmRlcHRoCQk9IHsgMTIgfSwKPiArCQkucm93X2RlcHRoCT0geyA4IH0sCj4gKwkJLm51bV9wbGFu ZXMJPSAxLAo+ICsJCS53YWxpZ24JCT0gMSwKPiArCQkuaGFsaWduCQk9IDEsCj4gKwkJLmZsYWdz CQk9IE1EUF9GTVRfRkxBR19PVVRQVVQgfCBNRFBfRk1UX0ZMQUdfQ0FQVFVSRSwKPiArCX0sIHsK PiArCQkucGl4ZWxmb3JtYXQJPSBWNEwyX1BJWF9GTVRfWVZVNDIwLAo+ICsJCS5tZHBfY29sb3IJ PSBNRFBfQ09MT1JfWVYxMiwKPiArCQkuZGVwdGgJCT0geyAxMiB9LAo+ICsJCS5yb3dfZGVwdGgJ PSB7IDggfSwKPiArCQkubnVtX3BsYW5lcwk9IDEsCj4gKwkJLndhbGlnbgkJPSAxLAo+ICsJCS5o YWxpZ24JCT0gMSwKPiArCQkuZmxhZ3MJCT0gTURQX0ZNVF9GTEFHX09VVFBVVCB8IE1EUF9GTVRf RkxBR19DQVBUVVJFLAo+ICsJfSwgewo+ICsJCS5waXhlbGZvcm1hdAk9IFY0TDJfUElYX0ZNVF9O VjEyLAo+ICsJCS5tZHBfY29sb3IJPSBNRFBfQ09MT1JfTlYxMiwKPiArCQkuZGVwdGgJCT0geyAx MiB9LAo+ICsJCS5yb3dfZGVwdGgJPSB7IDggfSwKPiArCQkubnVtX3BsYW5lcwk9IDEsCj4gKwkJ LndhbGlnbgkJPSAxLAo+ICsJCS5oYWxpZ24JCT0gMSwKPiArCQkuZmxhZ3MJCT0gTURQX0ZNVF9G TEFHX09VVFBVVCB8IE1EUF9GTVRfRkxBR19DQVBUVVJFLAo+ICsJfSwgewo+ICsJCS5waXhlbGZv cm1hdAk9IFY0TDJfUElYX0ZNVF9OVjIxLAo+ICsJCS5tZHBfY29sb3IJPSBNRFBfQ09MT1JfTlYy MSwKPiArCQkuZGVwdGgJCT0geyAxMiB9LAo+ICsJCS5yb3dfZGVwdGgJPSB7IDggfSwKPiArCQku bnVtX3BsYW5lcwk9IDEsCj4gKwkJLndhbGlnbgkJPSAxLAo+ICsJCS5oYWxpZ24JCT0gMSwKPiAr CQkuZmxhZ3MJCT0gTURQX0ZNVF9GTEFHX09VVFBVVCB8IE1EUF9GTVRfRkxBR19DQVBUVVJFLAo+ ICsJfSwgewo+ICsJCS5waXhlbGZvcm1hdAk9IFY0TDJfUElYX0ZNVF9OVjE2LAo+ICsJCS5tZHBf Y29sb3IJPSBNRFBfQ09MT1JfTlYxNiwKPiArCQkuZGVwdGgJCT0geyAxNiB9LAo+ICsJCS5yb3df ZGVwdGgJPSB7IDggfSwKPiArCQkubnVtX3BsYW5lcwk9IDEsCj4gKwkJLndhbGlnbgkJPSAxLAo+ ICsJCS5mbGFncwkJPSBNRFBfRk1UX0ZMQUdfT1VUUFVULAo+ICsJfSwgewo+ICsJCS5waXhlbGZv cm1hdAk9IFY0TDJfUElYX0ZNVF9OVjYxLAo+ICsJCS5tZHBfY29sb3IJPSBNRFBfQ09MT1JfTlY2 MSwKPiArCQkuZGVwdGgJCT0geyAxNiB9LAo+ICsJCS5yb3dfZGVwdGgJPSB7IDggfSwKPiArCQku bnVtX3BsYW5lcwk9IDEsCj4gKwkJLndhbGlnbgkJPSAxLAo+ICsJCS5mbGFncwkJPSBNRFBfRk1U X0ZMQUdfT1VUUFVULAo+ICsJfSwgewo+ICsJCS5waXhlbGZvcm1hdAk9IFY0TDJfUElYX0ZNVF9O VjI0LAo+ICsJCS5tZHBfY29sb3IJPSBNRFBfQ09MT1JfTlYyNCwKPiArCQkuZGVwdGgJCT0geyAy NCB9LAo+ICsJCS5yb3dfZGVwdGgJPSB7IDggfSwKPiArCQkubnVtX3BsYW5lcwk9IDEsCj4gKwkJ LmZsYWdzCQk9IE1EUF9GTVRfRkxBR19PVVRQVVQsCj4gKwl9LCB7Cj4gKwkJLnBpeGVsZm9ybWF0 CT0gVjRMMl9QSVhfRk1UX05WNDIsCj4gKwkJLm1kcF9jb2xvcgk9IE1EUF9DT0xPUl9OVjQyLAo+ ICsJCS5kZXB0aAkJPSB7IDI0IH0sCj4gKwkJLnJvd19kZXB0aAk9IHsgOCB9LAo+ICsJCS5udW1f cGxhbmVzCT0gMSwKPiArCQkuZmxhZ3MJCT0gTURQX0ZNVF9GTEFHX09VVFBVVCwKPiArCX0sIHsK PiArCQkucGl4ZWxmb3JtYXQJPSBWNEwyX1BJWF9GTVRfTVQyMUMsCj4gKwkJLm1kcF9jb2xvcgk9 IE1EUF9DT0xPUl80MjBfQkxLX1VGTywKPiArCQkuZGVwdGgJCT0geyA4LCA0IH0sCj4gKwkJLnJv d19kZXB0aAk9IHsgOCwgOCB9LAo+ICsJCS5udW1fcGxhbmVzCT0gMiwKPiArCQkud2FsaWduCQk9 IDQsCj4gKwkJLmhhbGlnbgkJPSA1LAo+ICsJCS5mbGFncwkJPSBNRFBfRk1UX0ZMQUdfT1VUUFVU LAo+ICsJfSwgewo+ICsJCS5waXhlbGZvcm1hdAk9IFY0TDJfUElYX0ZNVF9NTTIxLAo+ICsJCS5t ZHBfY29sb3IJPSBNRFBfQ09MT1JfNDIwX0JMSywKPiArCQkuZGVwdGgJCT0geyA4LCA0IH0sCj4g KwkJLnJvd19kZXB0aAk9IHsgOCwgOCB9LAo+ICsJCS5udW1fcGxhbmVzCT0gMiwKPiArCQkud2Fs aWduCQk9IDQsCj4gKwkJLmhhbGlnbgkJPSA1LAo+ICsJCS5mbGFncwkJPSBNRFBfRk1UX0ZMQUdf T1VUUFVULAo+ICsJfSwgewo+ICsJCS5waXhlbGZvcm1hdAk9IFY0TDJfUElYX0ZNVF9OVjEyTSwK PiArCQkubWRwX2NvbG9yCT0gTURQX0NPTE9SX05WMTIsCj4gKwkJLmRlcHRoCQk9IHsgOCwgNCB9 LAo+ICsJCS5yb3dfZGVwdGgJPSB7IDgsIDggfSwKPiArCQkubnVtX3BsYW5lcwk9IDIsCj4gKwkJ LndhbGlnbgkJPSAxLAo+ICsJCS5oYWxpZ24JCT0gMSwKPiArCQkuZmxhZ3MJCT0gTURQX0ZNVF9G TEFHX09VVFBVVCB8IE1EUF9GTVRfRkxBR19DQVBUVVJFLAo+ICsJfSwgewo+ICsJCS5waXhlbGZv cm1hdAk9IFY0TDJfUElYX0ZNVF9OVjIxTSwKPiArCQkubWRwX2NvbG9yCT0gTURQX0NPTE9SX05W MjEsCj4gKwkJLmRlcHRoCQk9IHsgOCwgNCB9LAo+ICsJCS5yb3dfZGVwdGgJPSB7IDgsIDggfSwK PiArCQkubnVtX3BsYW5lcwk9IDIsCj4gKwkJLndhbGlnbgkJPSAxLAo+ICsJCS5oYWxpZ24JCT0g MSwKPiArCQkuZmxhZ3MJCT0gTURQX0ZNVF9GTEFHX09VVFBVVCB8IE1EUF9GTVRfRkxBR19DQVBU VVJFLAo+ICsJfSwgewo+ICsJCS5waXhlbGZvcm1hdAk9IFY0TDJfUElYX0ZNVF9OVjE2TSwKPiAr CQkubWRwX2NvbG9yCT0gTURQX0NPTE9SX05WMTYsCj4gKwkJLmRlcHRoCQk9IHsgOCwgOCB9LAo+ ICsJCS5yb3dfZGVwdGgJPSB7IDgsIDggfSwKPiArCQkubnVtX3BsYW5lcwk9IDIsCj4gKwkJLndh bGlnbgkJPSAxLAo+ICsJCS5mbGFncwkJPSBNRFBfRk1UX0ZMQUdfT1VUUFVULAo+ICsJfSwgewo+ ICsJCS5waXhlbGZvcm1hdAk9IFY0TDJfUElYX0ZNVF9OVjYxTSwKPiArCQkubWRwX2NvbG9yCT0g TURQX0NPTE9SX05WNjEsCj4gKwkJLmRlcHRoCQk9IHsgOCwgOCB9LAo+ICsJCS5yb3dfZGVwdGgJ PSB7IDgsIDggfSwKPiArCQkubnVtX3BsYW5lcwk9IDIsCj4gKwkJLndhbGlnbgkJPSAxLAo+ICsJ CS5mbGFncwkJPSBNRFBfRk1UX0ZMQUdfT1VUUFVULAo+ICsJfSwgewo+ICsJCS5waXhlbGZvcm1h dAk9IFY0TDJfUElYX0ZNVF9ZVVY0MjBNLAo+ICsJCS5tZHBfY29sb3IJPSBNRFBfQ09MT1JfSTQy MCwKPiArCQkuZGVwdGgJCT0geyA4LCAyLCAyIH0sCj4gKwkJLnJvd19kZXB0aAk9IHsgOCwgNCwg NCB9LAo+ICsJCS5udW1fcGxhbmVzCT0gMywKPiArCQkud2FsaWduCQk9IDEsCj4gKwkJLmhhbGln bgkJPSAxLAo+ICsJCS5mbGFncwkJPSBNRFBfRk1UX0ZMQUdfT1VUUFVUIHwgTURQX0ZNVF9GTEFH X0NBUFRVUkUsCj4gKwl9LCB7Cj4gKwkJLnBpeGVsZm9ybWF0CT0gVjRMMl9QSVhfRk1UX1lWVTQy ME0sCj4gKwkJLm1kcF9jb2xvcgk9IE1EUF9DT0xPUl9ZVjEyLAo+ICsJCS5kZXB0aAkJPSB7IDgs IDIsIDIgfSwKPiArCQkucm93X2RlcHRoCT0geyA4LCA0LCA0IH0sCj4gKwkJLm51bV9wbGFuZXMJ PSAzLAo+ICsJCS53YWxpZ24JCT0gMSwKPiArCQkuaGFsaWduCQk9IDEsCj4gKwkJLmZsYWdzCQk9 IE1EUF9GTVRfRkxBR19PVVRQVVQgfCBNRFBfRk1UX0ZMQUdfQ0FQVFVSRSwKPiArCX0KPiArfTsK PiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWRwX2xpbWl0IG1kcF9kZWZfbGltaXQgPSB7Cj4g Kwkub3V0X2xpbWl0ID0gewo+ICsJCS53bWluCT0gMTYsCj4gKwkJLmhtaW4JPSAxNiwKPiArCQku d21heAk9IDgxNzYsCj4gKwkJLmhtYXgJPSA4MTc2LAo+ICsJfSwKPiArCS5jYXBfbGltaXQgPSB7 Cj4gKwkJLndtaW4JPSAyLAo+ICsJCS5obWluCT0gMiwKPiArCQkud21heAk9IDgxNzYsCj4gKwkJ LmhtYXgJPSA4MTc2LAo+ICsJfSwKPiArCS5oX3NjYWxlX3VwX21heCA9IDMyLAo+ICsJLnZfc2Nh bGVfdXBfbWF4ID0gMzIsCj4gKwkuaF9zY2FsZV9kb3duX21heCA9IDIwLAo+ICsJLnZfc2NhbGVf ZG93bl9tYXggPSAxMjgsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG1kcF9mb3Jt YXQgKm1kcF9maW5kX2ZtdCh1MzIgcGl4ZWxmb3JtYXQsIHUzMiB0eXBlKQo+ICt7Cj4gKwl1MzIg aSwgZmxhZzsKPiArCj4gKwlmbGFnID0gVjRMMl9UWVBFX0lTX09VVFBVVCh0eXBlKSA/IE1EUF9G TVRfRkxBR19PVVRQVVQgOgo+ICsJCQkJCU1EUF9GTVRfRkxBR19DQVBUVVJFOwo+ICsJZm9yIChp ID0gMDsgaSA8IEFSUkFZX1NJWkUobWRwX2Zvcm1hdHMpOyArK2kpIHsKPiArCQlpZiAoIShtZHBf Zm9ybWF0c1tpXS5mbGFncyAmIGZsYWcpKQo+ICsJCQljb250aW51ZTsKPiArCQlpZiAobWRwX2Zv cm1hdHNbaV0ucGl4ZWxmb3JtYXQgPT0gcGl4ZWxmb3JtYXQpCj4gKwkJCXJldHVybiAmbWRwX2Zv cm1hdHNbaV07Cj4gKwl9Cj4gKwlyZXR1cm4gTlVMTDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0 IHN0cnVjdCBtZHBfZm9ybWF0ICptZHBfZmluZF9mbXRfYnlfaW5kZXgodTMyIGluZGV4LCB1MzIg dHlwZSkKPiArewo+ICsJdTMyIGksIGZsYWcsIG51bSA9IDA7Cj4gKwo+ICsJZmxhZyA9IFY0TDJf VFlQRV9JU19PVVRQVVQodHlwZSkgPyBNRFBfRk1UX0ZMQUdfT1VUUFVUIDoKPiArCQkJCQlNRFBf Rk1UX0ZMQUdfQ0FQVFVSRTsKPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1kcF9mb3Jt YXRzKTsgKytpKSB7Cj4gKwkJaWYgKCEobWRwX2Zvcm1hdHNbaV0uZmxhZ3MgJiBmbGFnKSkKPiAr CQkJY29udGludWU7Cj4gKwkJaWYgKGluZGV4ID09IG51bSkKPiArCQkJcmV0dXJuICZtZHBfZm9y bWF0c1tpXTsKPiArCQludW0rKzsKPiArCX0KPiArCXJldHVybiBOVUxMOwo+ICt9Cj4gKwo+ICtl bnVtIG1kcF95Y2Jjcl9wcm9maWxlIG1kcF9tYXBfeWNiY3JfcHJvZl9tcGxhbmUoc3RydWN0IHY0 bDJfZm9ybWF0ICpmLAo+ICsJCQkJCQkgdTMyIG1kcF9jb2xvcikKPiArewo+ICsJc3RydWN0IHY0 bDJfcGl4X2Zvcm1hdF9tcGxhbmUgKnBpeF9tcCA9ICZmLT5mbXQucGl4X21wOwo+ICsKPiArCWlm IChNRFBfQ09MT1JfSVNfUkdCKG1kcF9jb2xvcikpCj4gKwkJcmV0dXJuIE1EUF9ZQ0JDUl9QUk9G SUxFX0ZVTExfQlQ2MDE7Cj4gKwo+ICsJc3dpdGNoIChwaXhfbXAtPmNvbG9yc3BhY2UpIHsKPiAr CWNhc2UgVjRMMl9DT0xPUlNQQUNFX0pQRUc6Cj4gKwkJcmV0dXJuIE1EUF9ZQ0JDUl9QUk9GSUxF X0pQRUc7Cj4gKwljYXNlIFY0TDJfQ09MT1JTUEFDRV9SRUM3MDk6Cj4gKwljYXNlIFY0TDJfQ09M T1JTUEFDRV9EQ0lfUDM6Cj4gKwkJaWYgKHBpeF9tcC0+cXVhbnRpemF0aW9uID09IFY0TDJfUVVB TlRJWkFUSU9OX0ZVTExfUkFOR0UpCj4gKwkJCXJldHVybiBNRFBfWUNCQ1JfUFJPRklMRV9GVUxM X0JUNzA5Owo+ICsJCXJldHVybiBNRFBfWUNCQ1JfUFJPRklMRV9CVDcwOTsKPiArCWNhc2UgVjRM Ml9DT0xPUlNQQUNFX0JUMjAyMDoKPiArCQlpZiAocGl4X21wLT5xdWFudGl6YXRpb24gPT0gVjRM Ml9RVUFOVElaQVRJT05fRlVMTF9SQU5HRSkKPiArCQkJcmV0dXJuIE1EUF9ZQ0JDUl9QUk9GSUxF X0ZVTExfQlQyMDIwOwo+ICsJCXJldHVybiBNRFBfWUNCQ1JfUFJPRklMRV9CVDIwMjA7Cj4gKwlk ZWZhdWx0Ogo+ICsJCWlmIChwaXhfbXAtPnF1YW50aXphdGlvbiA9PSBWNEwyX1FVQU5USVpBVElP Tl9GVUxMX1JBTkdFKQo+ICsJCQlyZXR1cm4gTURQX1lDQkNSX1BST0ZJTEVfRlVMTF9CVDYwMTsK PiArCQlyZXR1cm4gTURQX1lDQkNSX1BST0ZJTEVfQlQ2MDE7Cj4gKwl9Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIG1kcF9ib3VuZF9hbGlnbl9pbWFnZSh1MzIgKncsIHVuc2lnbmVkIGludCB3bWlu LCB1bnNpZ25lZCBpbnQgd21heCwKPiArCQkJCSAgdW5zaWduZWQgaW50IHdhbGlnbiwKPiArCQkJ CSAgdTMyICpoLCB1bnNpZ25lZCBpbnQgaG1pbiwgdW5zaWduZWQgaW50IGhtYXgsCj4gKwkJCQkg IHVuc2lnbmVkIGludCBoYWxpZ24sIHVuc2lnbmVkIGludCBzYWxpZ24pCj4gK3sKPiArCXVuc2ln bmVkIGludCBvcmdfdywgb3JnX2gsIHdzdGVwLCBoc3RlcDsKPiArCj4gKwlvcmdfdyA9ICp3Owo+ ICsJb3JnX2ggPSAqaDsKPiArCXY0bF9ib3VuZF9hbGlnbl9pbWFnZSh3LCB3bWluLCB3bWF4LCB3 YWxpZ24sIGgsIGhtaW4sIGhtYXgsIGhhbGlnbiwKPiArCQkJICAgICAgc2FsaWduKTsKPiArCj4g Kwl3c3RlcCA9IDEgPDwgd2FsaWduOwo+ICsJaHN0ZXAgPSAxIDw8IGhhbGlnbjsKPiArCWlmICgq dyA8IG9yZ193ICYmICgqdyArIHdzdGVwKSA8PSB3bWF4KQo+ICsJCSp3ICs9IHdzdGVwOwo+ICsJ aWYgKCpoIDwgb3JnX2ggJiYgKCpoICsgaHN0ZXApIDw9IGhtYXgpCj4gKwkJKmggKz0gaHN0ZXA7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbWRwX2NsYW1wX2FsaWduKHMzMiAqeCwgaW50IG1pbiwg aW50IG1heCwgdW5zaWduZWQgaW50IGFsaWduKQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQgbWFzazsK PiArCj4gKwlpZiAobWluIDwgMCB8fCBtYXggPCAwKQo+ICsJCXJldHVybiAtRVJBTkdFOwo+ICsK PiArCS8qIEJpdHMgdGhhdCBtdXN0IGJlIHplcm8gdG8gYmUgYWxpZ25lZCAqLwo+ICsJbWFzayA9 IH4oKDEgPDwgYWxpZ24pIC0gMSk7Cj4gKwo+ICsJbWluID0gMCA/IDAgOiAoKG1pbiArIH5tYXNr KSAmIG1hc2spOwo+ICsJbWF4ID0gbWF4ICYgbWFzazsKPiArCWlmICgodW5zaWduZWQgaW50KW1p biA+ICh1bnNpZ25lZCBpbnQpbWF4KQo+ICsJCXJldHVybiAtRVJBTkdFOwo+ICsKPiArCS8qIENs YW1wIHRvIGFsaWduZWQgbWluIGFuZCBtYXggKi8KPiArCSp4ID0gY2xhbXAoKngsIG1pbiwgbWF4 KTsKPiArCj4gKwkvKiBSb3VuZCB0byBuZWFyZXN0IGFsaWduZWQgdmFsdWUgKi8KPiArCWlmIChh bGlnbikKPiArCQkqeCA9ICgqeCArICgxIDw8IChhbGlnbiAtIDEpKSkgJiBtYXNrOwo+ICsJcmV0 dXJuIDA7Cj4gK30KPiArCj4gK2ludCBtZHBfZW51bV9mbXRfbXBsYW5lKHN0cnVjdCB2NGwyX2Zt dGRlc2MgKmYpCj4gK3sKPiArCWNvbnN0IHN0cnVjdCBtZHBfZm9ybWF0ICpmbXQ7Cj4gKwo+ICsJ Zm10ID0gbWRwX2ZpbmRfZm10X2J5X2luZGV4KGYtPmluZGV4LCBmLT50eXBlKTsKPiArCWlmICgh Zm10KQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWYtPnBpeGVsZm9ybWF0ID0gZm10LT5w aXhlbGZvcm1hdDsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtjb25zdCBzdHJ1Y3QgbWRwX2Zv cm1hdCAqbWRwX3RyeV9mbXRfbXBsYW5lKHN0cnVjdCB2NGwyX2Zvcm1hdCAqZiwKPiArCQkJCQkg ICAgc3RydWN0IG1kcF9mcmFtZXBhcmFtICpwYXJhbSwKPiArCQkJCQkgICAgdTMyIGN0eF9pZCkK PiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJnBhcmFtLT5jdHgtPm1kcF9kZXYtPnBkZXYt PmRldjsKPiArCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXRfbXBsYW5lICpwaXhfbXAgPSAmZi0+Zm10 LnBpeF9tcDsKPiArCWNvbnN0IHN0cnVjdCBtZHBfZm9ybWF0ICpmbXQ7Cj4gKwljb25zdCBzdHJ1 Y3QgbWRwX3BpeF9saW1pdCAqcGl4X2xpbWl0Owo+ICsJdTMyIHdtaW4sIHdtYXgsIGhtaW4sIGht YXgsIG9yZ193LCBvcmdfaDsKPiArCXVuc2lnbmVkIGludCBpOwo+ICsKPiArCWZtdCA9IG1kcF9m aW5kX2ZtdChwaXhfbXAtPnBpeGVsZm9ybWF0LCBmLT50eXBlKTsKPiArCWlmICghZm10KSB7Cj4g KwkJZm10ID0gbWRwX2ZpbmRfZm10X2J5X2luZGV4KDAsIGYtPnR5cGUpOwo+ICsJCWlmICghZm10 KSB7Cj4gKwkJCWRldl9kYmcoZGV2LCAiJWQ6IHBpeGVsZm9ybWF0ICVjJWMlYyVjIGludmFsaWQi LCBjdHhfaWQsCj4gKwkJCQkocGl4X21wLT5waXhlbGZvcm1hdCAmIDB4ZmYpLAo+ICsJCQkJKHBp eF9tcC0+cGl4ZWxmb3JtYXQgPj4gIDgpICYgMHhmZiwKPiArCQkJCShwaXhfbXAtPnBpeGVsZm9y bWF0ID4+IDE2KSAmIDB4ZmYsCj4gKwkJCQkocGl4X21wLT5waXhlbGZvcm1hdCA+PiAyNCkgJiAw eGZmKTsKPiArCQkJcmV0dXJuIE5VTEw7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXBpeF9tcC0+Zmll bGQgPSBWNEwyX0ZJRUxEX05PTkU7Cj4gKwlwaXhfbXAtPmZsYWdzID0gMDsKPiArCXBpeF9tcC0+ cGl4ZWxmb3JtYXQgPSBmbXQtPnBpeGVsZm9ybWF0Owo+ICsJaWYgKCFWNEwyX1RZUEVfSVNfT1VU UFVUKGYtPnR5cGUpKSB7Cj4gKwkJcGl4X21wLT5jb2xvcnNwYWNlID0gcGFyYW0tPmNvbG9yc3Bh Y2U7Cj4gKwkJcGl4X21wLT54ZmVyX2Z1bmMgPSBwYXJhbS0+eGZlcl9mdW5jOwo+ICsJCXBpeF9t cC0+eWNiY3JfZW5jID0gcGFyYW0tPnljYmNyX2VuYzsKPiArCQlwaXhfbXAtPnF1YW50aXphdGlv biA9IHBhcmFtLT5xdWFudDsKPiArCX0KPiArCj4gKwlwaXhfbGltaXQgPSBWNEwyX1RZUEVfSVNf T1VUUFVUKGYtPnR5cGUpID8gJnBhcmFtLT5saW1pdC0+b3V0X2xpbWl0IDoKPiArCQkJCQkJJnBh cmFtLT5saW1pdC0+Y2FwX2xpbWl0Owo+ICsJd21pbiA9IHBpeF9saW1pdC0+d21pbjsKPiArCXdt YXggPSBwaXhfbGltaXQtPndtYXg7Cj4gKwlobWluID0gcGl4X2xpbWl0LT5obWluOwo+ICsJaG1h eCA9IHBpeF9saW1pdC0+aG1heDsKPiArCW9yZ193ID0gcGl4X21wLT53aWR0aDsKPiArCW9yZ19o ID0gcGl4X21wLT5oZWlnaHQ7Cj4gKwo+ICsJbWRwX2JvdW5kX2FsaWduX2ltYWdlKCZwaXhfbXAt PndpZHRoLCB3bWluLCB3bWF4LCBmbXQtPndhbGlnbiwKPiArCQkJICAgICAgJnBpeF9tcC0+aGVp Z2h0LCBobWluLCBobWF4LCBmbXQtPmhhbGlnbiwKPiArCQkJICAgICAgZm10LT5zYWxpZ24pOwo+ ICsJaWYgKG9yZ193ICE9IHBpeF9tcC0+d2lkdGggfHwgb3JnX2ggIT0gcGl4X21wLT5oZWlnaHQp Cj4gKwkJZGV2X2RiZyhkZXYsICIlZDogc2l6ZSBjaGFuZ2U6ICV1eCV1IHRvICV1eCV1IiwgY3R4 X2lkLAo+ICsJCQlvcmdfdywgb3JnX2gsIHBpeF9tcC0+d2lkdGgsIHBpeF9tcC0+aGVpZ2h0KTsK PiArCj4gKwlpZiAocGl4X21wLT5udW1fcGxhbmVzICYmIHBpeF9tcC0+bnVtX3BsYW5lcyAhPSBm bXQtPm51bV9wbGFuZXMpCj4gKwkJZGV2X2RiZyhkZXYsICIlZCBudW0gb2YgcGxhbmVzIGNoYW5n ZTogJXUgdG8gJXUiLCBjdHhfaWQsCj4gKwkJCXBpeF9tcC0+bnVtX3BsYW5lcywgZm10LT5udW1f cGxhbmVzKTsKPiArCXBpeF9tcC0+bnVtX3BsYW5lcyA9IGZtdC0+bnVtX3BsYW5lczsKPiArCj4g Kwlmb3IgKGkgPSAwOyBpIDwgcGl4X21wLT5udW1fcGxhbmVzOyArK2kpIHsKPiArCQl1MzIgbWlu X2JwbCA9IChwaXhfbXAtPndpZHRoICogZm10LT5yb3dfZGVwdGhbaV0pIC8gODsKPiArCQl1MzIg YnBsID0gcGl4X21wLT5wbGFuZV9mbXRbaV0uYnl0ZXNwZXJsaW5lOwo+ICsJCXUzMiBzaTsKPiAr Cj4gKwkJaWYgKGJwbCA8IG1pbl9icGwpCj4gKwkJCWJwbCA9IG1pbl9icGw7Cj4gKwkJc2kgPSAo YnBsICogcGl4X21wLT5oZWlnaHQgKiBmbXQtPmRlcHRoW2ldKSAvIGZtdC0+cm93X2RlcHRoW2ld Owo+ICsKPiArCQlwaXhfbXAtPnBsYW5lX2ZtdFtpXS5ieXRlc3BlcmxpbmUgPSBicGw7Cj4gKwkJ aWYgKHBpeF9tcC0+cGxhbmVfZm10W2ldLnNpemVpbWFnZSA8IHNpKQo+ICsJCQlwaXhfbXAtPnBs YW5lX2ZtdFtpXS5zaXplaW1hZ2UgPSBzaTsKPiArCQlkZXZfZGJnKGRldiwgIiVkOiBwJXUsIGJw bDoldSAoJXUpLCBzaXplaW1hZ2U6JXUgKCV1KSIsIGN0eF9pZCwKPiArCQkJaSwgYnBsLCBtaW5f YnBsLCBwaXhfbXAtPnBsYW5lX2ZtdFtpXS5zaXplaW1hZ2UsIHNpKTsKPiArCX0KPiArCj4gKwly ZXR1cm4gZm10Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG1kcF9jbGFtcF9zdGFydChzMzIgKngs IGludCBtaW4sIGludCBtYXgsIHVuc2lnbmVkIGludCBhbGlnbiwKPiArCQkJICAgdTMyIGZsYWdz KQo+ICt7Cj4gKwlpZiAoZmxhZ3MgJiBWNEwyX1NFTF9GTEFHX0dFKQo+ICsJCW1heCA9ICp4Owo+ ICsJaWYgKGZsYWdzICYgVjRMMl9TRUxfRkxBR19MRSkKPiArCQltaW4gPSAqeDsKPiArCXJldHVy biBtZHBfY2xhbXBfYWxpZ24oeCwgbWluLCBtYXgsIGFsaWduKTsKPiArfQo+ICsKPiArc3RhdGlj IGludCBtZHBfY2xhbXBfZW5kKHMzMiAqeCwgaW50IG1pbiwgaW50IG1heCwgdW5zaWduZWQgaW50 IGFsaWduLAo+ICsJCQkgdTMyIGZsYWdzKQo+ICt7Cj4gKwlpZiAoZmxhZ3MgJiBWNEwyX1NFTF9G TEFHX0dFKQo+ICsJCW1pbiA9ICp4Owo+ICsJaWYgKGZsYWdzICYgVjRMMl9TRUxfRkxBR19MRSkK PiArCQltYXggPSAqeDsKPiArCXJldHVybiBtZHBfY2xhbXBfYWxpZ24oeCwgbWluLCBtYXgsIGFs aWduKTsKPiArfQo+ICsKPiAraW50IG1kcF90cnlfY3JvcChzdHJ1Y3QgbWRwX20ybV9jdHggKmN0 eCwgc3RydWN0IHY0bDJfcmVjdCAqciwKPiArCQkgY29uc3Qgc3RydWN0IHY0bDJfc2VsZWN0aW9u ICpzLCBzdHJ1Y3QgbWRwX2ZyYW1lICpmcmFtZSkKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2 ID0gJmN0eC0+bWRwX2Rldi0+cGRldi0+ZGV2Owo+ICsJczMyIGxlZnQsIHRvcCwgcmlnaHQsIGJv dHRvbTsKPiArCXUzMiBmcmFtZXcsIGZyYW1laCwgd2FsaWduLCBoYWxpZ247Cj4gKwlpbnQgcmV0 Owo+ICsKPiArCWRldl9kYmcoZGV2LCAiJWQgdGFyZ2V0OiVkLCBzZXQ6KCVkLCVkKSAldXgldSIs IGN0eC0+aWQsCj4gKwkJcy0+dGFyZ2V0LCBzLT5yLmxlZnQsIHMtPnIudG9wLCBzLT5yLndpZHRo LCBzLT5yLmhlaWdodCk7Cj4gKwo+ICsJbGVmdCA9IHMtPnIubGVmdDsKPiArCXRvcCA9IHMtPnIu dG9wOwo+ICsJcmlnaHQgPSBzLT5yLmxlZnQgKyBzLT5yLndpZHRoOwo+ICsJYm90dG9tID0gcy0+ ci50b3AgKyBzLT5yLmhlaWdodDsKPiArCWZyYW1ldyA9IGZyYW1lLT5mb3JtYXQuZm10LnBpeF9t cC53aWR0aDsKPiArCWZyYW1laCA9IGZyYW1lLT5mb3JtYXQuZm10LnBpeF9tcC5oZWlnaHQ7Cj4g Kwo+ICsJaWYgKG1kcF90YXJnZXRfaXNfY3JvcChzLT50YXJnZXQpKSB7Cj4gKwkJd2FsaWduID0g MTsKPiArCQloYWxpZ24gPSAxOwo+ICsJfSBlbHNlIHsKPiArCQl3YWxpZ24gPSBmcmFtZS0+bWRw X2ZtdC0+d2FsaWduOwo+ICsJCWhhbGlnbiA9IGZyYW1lLT5tZHBfZm10LT5oYWxpZ247Cj4gKwl9 Cj4gKwo+ICsJZGV2X2RiZyhkZXYsICIlZCBhbGlnbjoldSwldSwgYm91bmQ6JXV4JXUiLCBjdHgt PmlkLAo+ICsJCXdhbGlnbiwgaGFsaWduLCBmcmFtZXcsIGZyYW1laCk7Cj4gKwo+ICsJcmV0ID0g bWRwX2NsYW1wX3N0YXJ0KCZsZWZ0LCAwLCByaWdodCwgd2FsaWduLCBzLT5mbGFncyk7Cj4gKwlp ZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwlyZXQgPSBtZHBfY2xhbXBfc3RhcnQoJnRvcCwg MCwgYm90dG9tLCBoYWxpZ24sIHMtPmZsYWdzKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJl dDsKPiArCXJldCA9IG1kcF9jbGFtcF9lbmQoJnJpZ2h0LCBsZWZ0LCBmcmFtZXcsIHdhbGlnbiwg cy0+ZmxhZ3MpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsJcmV0ID0gbWRwX2Ns YW1wX2VuZCgmYm90dG9tLCB0b3AsIGZyYW1laCwgaGFsaWduLCBzLT5mbGFncyk7Cj4gKwlpZiAo cmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJci0+bGVmdCA9IGxlZnQ7Cj4gKwlyLT50b3Ag PSB0b3A7Cj4gKwlyLT53aWR0aCA9IHJpZ2h0IC0gbGVmdDsKPiArCXItPmhlaWdodCA9IGJvdHRv bSAtIHRvcDsKPiArCj4gKwlkZXZfZGJnKGRldiwgIiVkIGNyb3A6KCVkLCVkKSAldXgldSIsIGN0 eC0+aWQsCj4gKwkJci0+bGVmdCwgci0+dG9wLCByLT53aWR0aCwgci0+aGVpZ2h0KTsKPiArCXJl dHVybiAwOwo+ICt9Cj4gKwo+ICtpbnQgbWRwX2NoZWNrX3NjYWxpbmdfcmF0aW8oY29uc3Qgc3Ry dWN0IHY0bDJfcmVjdCAqY3JvcCwKPiArCQkJICAgIGNvbnN0IHN0cnVjdCB2NGwyX3JlY3QgKmNv bXBvc2UsIHMzMiByb3RhdGlvbiwKPiArCWNvbnN0IHN0cnVjdCBtZHBfbGltaXQgKmxpbWl0KQo+ ICt7Cj4gKwl1MzIgY3JvcF93LCBjcm9wX2gsIGNvbXBfdywgY29tcF9oOwo+ICsKPiArCWNyb3Bf dyA9IGNyb3AtPndpZHRoOwo+ICsJY3JvcF9oID0gY3JvcC0+aGVpZ2h0Owo+ICsJaWYgKDkwID09 IHJvdGF0aW9uIHx8IDI3MCA9PSByb3RhdGlvbikgewo+ICsJCWNvbXBfdyA9IGNvbXBvc2UtPmhl aWdodDsKPiArCQljb21wX2ggPSBjb21wb3NlLT53aWR0aDsKPiArCX0gZWxzZSB7Cj4gKwkJY29t cF93ID0gY29tcG9zZS0+d2lkdGg7Cj4gKwkJY29tcF9oID0gY29tcG9zZS0+aGVpZ2h0Owo+ICsJ fQo+ICsKPiArCWlmICgoY3JvcF93IC8gY29tcF93KSA+IGxpbWl0LT5oX3NjYWxlX2Rvd25fbWF4 IHx8Cj4gKwkgICAgKGNyb3BfaCAvIGNvbXBfaCkgPiBsaW1pdC0+dl9zY2FsZV9kb3duX21heCB8 fAo+ICsJICAgIChjb21wX3cgLyBjcm9wX3cpID4gbGltaXQtPmhfc2NhbGVfdXBfbWF4IHx8Cj4g KwkgICAgKGNvbXBfaCAvIGNyb3BfaCkgPiBsaW1pdC0+dl9zY2FsZV91cF9tYXgpCj4gKwkJcmV0 dXJuIC1FUkFOR0U7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArLyogU3RyaWRlIHRoYXQgaXMg YWNjZXB0ZWQgYnkgTURQIEhXICovCj4gK3N0YXRpYyB1MzIgbWRwX2ZtdF9nZXRfc3RyaWRlKGNv bnN0IHN0cnVjdCBtZHBfZm9ybWF0ICpmbXQsCj4gKwkJCSAgICAgIHUzMiBieXRlc3BlcmxpbmUs IHVuc2lnbmVkIGludCBwbGFuZSkKPiArewo+ICsJZW51bSBtZHBfY29sb3IgYyA9IGZtdC0+bWRw X2NvbG9yOwo+ICsJdTMyIHN0cmlkZTsKPiArCj4gKwlzdHJpZGUgPSAoYnl0ZXNwZXJsaW5lICog TURQX0NPTE9SX0JJVFNfUEVSX1BJWEVMKGMpKQo+ICsJCS8gZm10LT5yb3dfZGVwdGhbMF07Cj4g KwlpZiAocGxhbmUgPT0gMCkKPiArCQlyZXR1cm4gc3RyaWRlOwo+ICsJaWYgKHBsYW5lIDwgTURQ X0NPTE9SX0dFVF9QTEFORV9DT1VOVChjKSkgewo+ICsJCWlmIChNRFBfQ09MT1JfSVNfQkxPQ0tf TU9ERShjKSkKPiArCQkJc3RyaWRlID0gc3RyaWRlIC8gMjsKPiArCQlyZXR1cm4gc3RyaWRlOwo+ ICsJfQo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gKy8qIFN0cmlkZSB0aGF0IGlzIGFjY2VwdGVk IGJ5IE1EUCBIVyBvZiBmb3JtYXQgd2l0aCBjb250aWd1b3VzIHBsYW5lcyAqLwo+ICtzdGF0aWMg dTMyIG1kcF9mbXRfZ2V0X3N0cmlkZV9jb250aWcoY29uc3Qgc3RydWN0IG1kcF9mb3JtYXQgKmZt dCwKPiArCQkJCSAgICAgdTMyIHBpeF9zdHJpZGUsIHVuc2lnbmVkIGludCBwbGFuZSkKPiArewo+ ICsJZW51bSBtZHBfY29sb3IgYyA9IGZtdC0+bWRwX2NvbG9yOwo+ICsJdTMyIHN0cmlkZSA9IHBp eF9zdHJpZGU7Cj4gKwo+ICsJaWYgKHBsYW5lID09IDApCj4gKwkJcmV0dXJuIHN0cmlkZTsKPiAr CWlmIChwbGFuZSA8IE1EUF9DT0xPUl9HRVRfUExBTkVfQ09VTlQoYykpIHsKPiArCQlzdHJpZGUg PSBzdHJpZGUgPj4gTURQX0NPTE9SX0dFVF9IX1NVQlNBTVBMRShjKTsKPiArCQlpZiAoTURQX0NP TE9SX0lTX1VWX0NPUExBTkUoYykgJiYgIU1EUF9DT0xPUl9JU19CTE9DS19NT0RFKGMpKQo+ICsJ CQlzdHJpZGUgPSBzdHJpZGUgKiAyOwo+ICsJCXJldHVybiBzdHJpZGU7Cj4gKwl9Cj4gKwlyZXR1 cm4gMDsKPiArfQo+ICsKPiArLyogUGxhbmUgc2l6ZSB0aGF0IGlzIGFjY2VwdGVkIGJ5IE1EUCBI VyAqLwo+ICtzdGF0aWMgdTMyIG1kcF9mbXRfZ2V0X3BsYW5lX3NpemUoY29uc3Qgc3RydWN0IG1k cF9mb3JtYXQgKmZtdCwKPiArCQkJCSAgdTMyIHN0cmlkZSwgdTMyIGhlaWdodCwgdW5zaWduZWQg aW50IHBsYW5lKQo+ICt7Cj4gKwllbnVtIG1kcF9jb2xvciBjID0gZm10LT5tZHBfY29sb3I7Cj4g Kwl1MzIgYnl0ZXNwZXJsaW5lOwo+ICsKPiArCWJ5dGVzcGVybGluZSA9IChzdHJpZGUgKiBmbXQt PnJvd19kZXB0aFswXSkKPiArCQkvIE1EUF9DT0xPUl9CSVRTX1BFUl9QSVhFTChjKTsKPiArCWlm IChwbGFuZSA9PSAwKQo+ICsJCXJldHVybiBieXRlc3BlcmxpbmUgKiBoZWlnaHQ7Cj4gKwlpZiAo cGxhbmUgPCBNRFBfQ09MT1JfR0VUX1BMQU5FX0NPVU5UKGMpKSB7Cj4gKwkJaGVpZ2h0ID0gaGVp Z2h0ID4+IE1EUF9DT0xPUl9HRVRfVl9TVUJTQU1QTEUoYyk7Cj4gKwkJaWYgKE1EUF9DT0xPUl9J U19CTE9DS19NT0RFKGMpKQo+ICsJCQlieXRlc3BlcmxpbmUgPSBieXRlc3BlcmxpbmUgKiAyOwo+ ICsJCXJldHVybiBieXRlc3BlcmxpbmUgKiBoZWlnaHQ7Cj4gKwl9Cj4gKwlyZXR1cm4gMDsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgbWRwX3ByZXBhcmVfYnVmZmVyKHN0cnVjdCBpbWdfaW1hZ2Vf YnVmZmVyICpiLAo+ICsJCQkgICAgICAgc3RydWN0IG1kcF9mcmFtZSAqZnJhbWUsIHN0cnVjdCB2 YjJfYnVmZmVyICp2YikKPiArewo+ICsJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdF9tcGxhbmUgKnBp eF9tcCA9ICZmcmFtZS0+Zm9ybWF0LmZtdC5waXhfbXA7Cj4gKwl1bnNpZ25lZCBpbnQgaTsKPiAr Cj4gKwliLT5mb3JtYXQuY29sb3Jmb3JtYXQgPSBmcmFtZS0+bWRwX2ZtdC0+bWRwX2NvbG9yOwo+ ICsJYi0+Zm9ybWF0LnljYmNyX3Byb2YgPSBmcmFtZS0+eWNiY3JfcHJvZjsKPiArCWZvciAoaSA9 IDA7IGkgPCBwaXhfbXAtPm51bV9wbGFuZXM7ICsraSkgewo+ICsJCXUzMiBzdHJpZGUgPSBtZHBf Zm10X2dldF9zdHJpZGUoZnJhbWUtPm1kcF9mbXQsCj4gKwkJCXBpeF9tcC0+cGxhbmVfZm10W2ld LmJ5dGVzcGVybGluZSwgaSk7Cj4gKwo+ICsJCWItPmZvcm1hdC5wbGFuZV9mbXRbaV0uc3RyaWRl ID0gc3RyaWRlOwo+ICsJCS8qCj4gKwkJICogVE9ETyA6IFRoZSB3YXkgdG8gcGFzcyBhbiBvZmZz ZXQgd2l0aGluIGEgRE1BLWJ1Zgo+ICsJCSAqIGlzIG5vdCBkZWZpbmVkIGluIFY0TDIgc3BlY2lm aWNhdGlvbiwgc28gd2UgYWJ1c2UKPiArCQkgKiBkYXRhX29mZnNldCBmb3Igbm93LiBGaXggaXQg d2hlbiB3ZSBoYXZlIHRoZSByaWdodCBpbnRlcmZhY2UsCj4gKwkJICogaW5jbHVkaW5nIGFueSBu ZWNlc3NhcnkgdmFsaWRhdGlvbiBhbmQgcG90ZW50aWFsIGFsaWdubWVudAo+ICsJCSAqIGlzc3Vl cy4KPiArCQkgKi8KPiArCQliLT5mb3JtYXQucGxhbmVfZm10W2ldLnNpemUgPQo+ICsJCQltZHBf Zm10X2dldF9wbGFuZV9zaXplKGZyYW1lLT5tZHBfZm10LCBzdHJpZGUsCj4gKwkJCQkJICAgICAg IHBpeF9tcC0+aGVpZ2h0LCBpKSAtCj4gKwkJCQkJICAgICAgIHZiLT5wbGFuZXNbaV0uZGF0YV9v ZmZzZXQ7Cj4gKwkJYi0+aW92YVtpXSA9IHZiMl9kbWFfY29udGlnX3BsYW5lX2RtYV9hZGRyKHZi LCBpKSArCj4gKwkJCSAgICAgdmItPnBsYW5lc1tpXS5kYXRhX29mZnNldDsKPiArCX0KPiArCWZv ciAoOyBpIDwgTURQX0NPTE9SX0dFVF9QTEFORV9DT1VOVChiLT5mb3JtYXQuY29sb3Jmb3JtYXQp OyArK2kpIHsKPiArCQl1MzIgc3RyaWRlID0gbWRwX2ZtdF9nZXRfc3RyaWRlX2NvbnRpZyhmcmFt ZS0+bWRwX2ZtdCwKPiArCQkJYi0+Zm9ybWF0LnBsYW5lX2ZtdFswXS5zdHJpZGUsIGkpOwo+ICsK PiArCQliLT5mb3JtYXQucGxhbmVfZm10W2ldLnN0cmlkZSA9IHN0cmlkZTsKPiArCQliLT5mb3Jt YXQucGxhbmVfZm10W2ldLnNpemUgPQo+ICsJCQltZHBfZm10X2dldF9wbGFuZV9zaXplKGZyYW1l LT5tZHBfZm10LCBzdHJpZGUsCj4gKwkJCQkJICAgICAgIHBpeF9tcC0+aGVpZ2h0LCBpKTsKPiAr CQliLT5pb3ZhW2ldID0gYi0+aW92YVtpIC0gMV0gKyBiLT5mb3JtYXQucGxhbmVfZm10W2kgLSAx XS5zaXplOwo+ICsJfQo+ICsJYi0+dXNhZ2UgPSBmcmFtZS0+dXNhZ2U7Cj4gK30KPiArCj4gK3Zv aWQgbWRwX3NldF9zcmNfY29uZmlnKHN0cnVjdCBpbWdfaW5wdXQgKmluLAo+ICsJCQlzdHJ1Y3Qg bWRwX2ZyYW1lICpmcmFtZSwgc3RydWN0IHZiMl9idWZmZXIgKnZiKQo+ICt7Cj4gKwlpbi0+YnVm ZmVyLmZvcm1hdC53aWR0aCA9IGZyYW1lLT5mb3JtYXQuZm10LnBpeF9tcC53aWR0aDsKPiArCWlu LT5idWZmZXIuZm9ybWF0LmhlaWdodCA9IGZyYW1lLT5mb3JtYXQuZm10LnBpeF9tcC5oZWlnaHQ7 Cj4gKwltZHBfcHJlcGFyZV9idWZmZXIoJmluLT5idWZmZXIsIGZyYW1lLCB2Yik7Cj4gK30KPiAr Cj4gK3N0YXRpYyB1MzIgbWRwX3RvX2ZpeGVkKHUzMiAqciwgc3RydWN0IHY0bDJfZnJhY3QgKmYp Cj4gK3sKPiArCXUzMiBxOwo+ICsKPiArCWlmIChmLT5kZW5vbWluYXRvciA9PSAwKSB7Cj4gKwkJ KnIgPSAwOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICsKPiArCXEgPSBmLT5udW1lcmF0b3IgLyBm LT5kZW5vbWluYXRvcjsKPiArCSpyID0gZGl2X3U2NCgoKHU2NClmLT5udW1lcmF0b3IgLSBxICog Zi0+ZGVub21pbmF0b3IpIDw8Cj4gKwkJICAgICBJTUdfU1VCUElYRUxfU0hJRlQsIGYtPmRlbm9t aW5hdG9yKTsKPiArCXJldHVybiBxOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtZHBfc2V0X3Ny Y19jcm9wKHN0cnVjdCBpbWdfY3JvcCAqYywgc3RydWN0IG1kcF9jcm9wICpjcm9wKQo+ICt7Cj4g KwljLT5sZWZ0ID0gY3JvcC0+Yy5sZWZ0Cj4gKwkJKyBtZHBfdG9fZml4ZWQoJmMtPmxlZnRfc3Vi cGl4LCAmY3JvcC0+bGVmdF9zdWJwaXgpOwo+ICsJYy0+dG9wID0gY3JvcC0+Yy50b3AKPiArCQkr IG1kcF90b19maXhlZCgmYy0+dG9wX3N1YnBpeCwgJmNyb3AtPnRvcF9zdWJwaXgpOwo+ICsJYy0+ d2lkdGggPSBjcm9wLT5jLndpZHRoCj4gKwkJKyBtZHBfdG9fZml4ZWQoJmMtPndpZHRoX3N1YnBp eCwgJmNyb3AtPndpZHRoX3N1YnBpeCk7Cj4gKwljLT5oZWlnaHQgPSBjcm9wLT5jLmhlaWdodAo+ ICsJCSsgbWRwX3RvX2ZpeGVkKCZjLT5oZWlnaHRfc3VicGl4LCAmY3JvcC0+aGVpZ2h0X3N1YnBp eCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG1kcF9zZXRfb3JpZW50YXRpb24oc3RydWN0IGlt Z19vdXRwdXQgKm91dCwKPiArCQkJCXMzMiByb3RhdGlvbiwgYm9vbCBoZmxpcCwgYm9vbCB2Zmxp cCkKPiArewo+ICsJdTggZmxpcCA9IDA7Cj4gKwo+ICsJaWYgKGhmbGlwKQo+ICsJCWZsaXAgXj0g MTsKPiArCWlmICh2ZmxpcCkgewo+ICsJCS8qCj4gKwkJICogQSB2ZXJ0aWNhbCBmbGlwIGlzIGVx dWl2YWxlbnQgdG8KPiArCQkgKiBhIDE4MC1kZWdyZWUgcm90YXRpb24gd2l0aCBhIGhvcml6b250 YWwgZmxpcAo+ICsJCSAqLwo+ICsJCXJvdGF0aW9uICs9IDE4MDsKPiArCQlmbGlwIF49IDE7Cj4g Kwl9Cj4gKwo+ICsJb3V0LT5yb3RhdGlvbiA9IHJvdGF0aW9uICUgMzYwOwo+ICsJaWYgKGZsaXAg IT0gMCkKPiArCQlvdXQtPmZsYWdzIHw9IElNR19DVFJMX0ZMQUdfSEZMSVA7Cj4gKwllbHNlCj4g KwkJb3V0LT5mbGFncyAmPSB+SU1HX0NUUkxfRkxBR19IRkxJUDsKPiArfQo+ICsKPiArdm9pZCBt ZHBfc2V0X2RzdF9jb25maWcoc3RydWN0IGltZ19vdXRwdXQgKm91dCwKPiArCQkJc3RydWN0IG1k cF9mcmFtZSAqZnJhbWUsIHN0cnVjdCB2YjJfYnVmZmVyICp2YikKPiArewo+ICsJb3V0LT5idWZm ZXIuZm9ybWF0LndpZHRoID0gZnJhbWUtPmNvbXBvc2Uud2lkdGg7Cj4gKwlvdXQtPmJ1ZmZlci5m b3JtYXQuaGVpZ2h0ID0gZnJhbWUtPmNvbXBvc2UuaGVpZ2h0Owo+ICsJbWRwX3ByZXBhcmVfYnVm ZmVyKCZvdXQtPmJ1ZmZlciwgZnJhbWUsIHZiKTsKPiArCW1kcF9zZXRfc3JjX2Nyb3AoJm91dC0+ Y3JvcCwgJmZyYW1lLT5jcm9wKTsKPiArCW1kcF9zZXRfb3JpZW50YXRpb24ob3V0LCBmcmFtZS0+ cm90YXRpb24sIGZyYW1lLT5oZmxpcCwgZnJhbWUtPnZmbGlwKTsKPiArfQo+ICsKPiAraW50IG1k cF9mcmFtZXBhcmFtX2luaXQoc3RydWN0IG1kcF9mcmFtZXBhcmFtICpwYXJhbSkKPiArewo+ICsJ c3RydWN0IG1kcF9mcmFtZSAqZnJhbWU7Cj4gKwo+ICsJaWYgKCFwYXJhbSkKPiArCQlyZXR1cm4g LUVJTlZBTDsKPiArCj4gKwlJTklUX0xJU1RfSEVBRCgmcGFyYW0tPmxpc3QpOwo+ICsJbXV0ZXhf aW5pdCgmcGFyYW0tPnN0YXRlX2xvY2spOwo+ICsJcGFyYW0tPmxpbWl0ID0gJm1kcF9kZWZfbGlt aXQ7Cj4gKwlwYXJhbS0+dHlwZSA9IE1EUF9TVFJFQU1fVFlQRV9CSVRCTFQ7Cj4gKwo+ICsJZnJh bWUgPSAmcGFyYW0tPm91dHB1dDsKPiArCWZyYW1lLT5mb3JtYXQudHlwZSA9IFY0TDJfQlVGX1RZ UEVfVklERU9fT1VUUFVUX01QTEFORTsKPiArCWZyYW1lLT5tZHBfZm10ID0gbWRwX3RyeV9mbXRf bXBsYW5lKCZmcmFtZS0+Zm9ybWF0LCBwYXJhbSwgMCk7Cj4gKwlmcmFtZS0+eWNiY3JfcHJvZiA9 Cj4gKwkJbWRwX21hcF95Y2Jjcl9wcm9mX21wbGFuZSgmZnJhbWUtPmZvcm1hdCwKPiArCQkJCQkg IGZyYW1lLT5tZHBfZm10LT5tZHBfY29sb3IpOwo+ICsJZnJhbWUtPnVzYWdlID0gTURQX0JVRkZF Ul9VU0FHRV9IV19SRUFEOwo+ICsKPiArCXBhcmFtLT5udW1fY2FwdHVyZXMgPSAxOwo+ICsJZnJh bWUgPSAmcGFyYW0tPmNhcHR1cmVzWzBdOwo+ICsJZnJhbWUtPmZvcm1hdC50eXBlID0gVjRMMl9C VUZfVFlQRV9WSURFT19DQVBUVVJFX01QTEFORTsKPiArCWZyYW1lLT5tZHBfZm10ID0gbWRwX3Ry eV9mbXRfbXBsYW5lKCZmcmFtZS0+Zm9ybWF0LCBwYXJhbSwgMCk7Cj4gKwlmcmFtZS0+eWNiY3Jf cHJvZiA9Cj4gKwkJbWRwX21hcF95Y2Jjcl9wcm9mX21wbGFuZSgmZnJhbWUtPmZvcm1hdCwKPiAr CQkJCQkgIGZyYW1lLT5tZHBfZm10LT5tZHBfY29sb3IpOwo+ICsJZnJhbWUtPnVzYWdlID0gTURQ X0JVRkZFUl9VU0FHRV9NRFA7Cj4gKwlmcmFtZS0+Y3JvcC5jLndpZHRoID0gcGFyYW0tPm91dHB1 dC5mb3JtYXQuZm10LnBpeF9tcC53aWR0aDsKPiArCWZyYW1lLT5jcm9wLmMuaGVpZ2h0ID0gcGFy YW0tPm91dHB1dC5mb3JtYXQuZm10LnBpeF9tcC5oZWlnaHQ7Cj4gKwlmcmFtZS0+Y29tcG9zZS53 aWR0aCA9IGZyYW1lLT5mb3JtYXQuZm10LnBpeF9tcC53aWR0aDsKPiArCWZyYW1lLT5jb21wb3Nl LmhlaWdodCA9IGZyYW1lLT5mb3JtYXQuZm10LnBpeF9tcC5oZWlnaHQ7Cj4gKwo+ICsJcmV0dXJu IDA7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstbWRwMy9t dGstbWRwMy1yZWdzLmggYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1tZHAzL210ay1tZHAz LXJlZ3MuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi4zZmY3 ODRhYTM3MmIKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9t dGstbWRwMy9tdGstbWRwMy1yZWdzLmgKPiBAQCAtMCwwICsxLDM3MiBAQAo+ICsvKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCj4gKy8qCj4gKyAqIENvcHlyaWdodCAo YykgMjAyMSBNZWRpYVRlayBJbmMuCj4gKyAqIEF1dGhvcjogUGluZy1Ic3VuIFd1IDxwaW5nLWhz dW4ud3VAbWVkaWF0ZWsuY29tPgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX19NVEtfTURQM19SRUdT X0hfXwo+ICsjZGVmaW5lIF9fTVRLX01EUDNfUkVHU19IX18KPiArCj4gKyNpbmNsdWRlIDxsaW51 eC92aWRlb2RldjIuaD4KPiArI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmMi1jb3JlLmg+Cj4gKyNp bmNsdWRlICJtdGstaW1nLWlwaS5oIgo+ICsKPiArLyoKPiArICogTURQIG5hdGl2ZSBjb2xvciBj b2RlCj4gKyAqIFBsYW5lIGNvdW50OiAxLCAyLCAzCj4gKyAqIEgtc3Vic2FtcGxlOiAwLCAxLCAy Cj4gKyAqIFYtc3Vic2FtcGxlOiAwLCAxCj4gKyAqIENvbG9yIGdyb3VwOiAwLVJHQiwgMS1ZVVYs IDItcmF3Cj4gKyAqLwo+ICsjZGVmaW5lIE1EUF9DT0xPUihQQUNLRUQsIExPT1NFLCBWSURFTywg UExBTkUsIEhGLCBWRiwgQklUUywgR1JPVVAsIFNXQVAsIElEKVwKPiArCSgoKFBBQ0tFRCkgPDwg MjcpIHwgKChMT09TRSkgPDwgMjYpIHwgKChWSURFTykgPDwgMjMpIHxcCj4gKwkgKChQTEFORSkg PDwgMjEpIHwgKChIRikgPDwgMTkpIHwgKChWRikgPDwgMTgpIHwgKChCSVRTKSA8PCA4KSB8XAo+ ICsJICgoR1JPVVApIDw8IDYpIHwgKChTV0FQKSA8PCA1KSB8ICgoSUQpIDw8IDApKQo+ICsKPiAr I2RlZmluZSBNRFBfQ09MT1JfSVNfMTBCSVRfUEFDS0VEKGMpCSgoMHgwODAwMDAwMCAmIChjKSkg Pj4gMjcpCj4gKyNkZWZpbmUgTURQX0NPTE9SX0lTXzEwQklUX0xPT1NFKGMpCSgoKDB4MGMwMDAw MDAgJiAoYykpID4+IDI2KSA9PSAxKQo+ICsjZGVmaW5lIE1EUF9DT0xPUl9JU18xMEJJVF9USUxF KGMpCSgoKDB4MGMwMDAwMDAgJiAoYykpID4+IDI2KSA9PSAzKQo+ICsjZGVmaW5lIE1EUF9DT0xP Ul9JU19VRlAoYykJCSgoMHgwMjAwMDAwMCAmIChjKSkgPj4gMjUpCj4gKyNkZWZpbmUgTURQX0NP TE9SX0lTX0lOVEVSTEFDRUQoYykJKCgweDAxMDAwMDAwICYgKGMpKSA+PiAyNCkKPiArI2RlZmlu ZSBNRFBfQ09MT1JfSVNfQkxPQ0tfTU9ERShjKQkoKDB4MDA4MDAwMDAgJiAoYykpID4+IDIzKQo+ ICsjZGVmaW5lIE1EUF9DT0xPUl9HRVRfUExBTkVfQ09VTlQoYykJKCgweDAwNjAwMDAwICYgKGMp KSA+PiAyMSkKPiArI2RlZmluZSBNRFBfQ09MT1JfR0VUX0hfU1VCU0FNUExFKGMpCSgoMHgwMDE4 MDAwMCAmIChjKSkgPj4gMTkpCj4gKyNkZWZpbmUgTURQX0NPTE9SX0dFVF9WX1NVQlNBTVBMRShj KQkoKDB4MDAwNDAwMDAgJiAoYykpID4+IDE4KQo+ICsjZGVmaW5lIE1EUF9DT0xPUl9CSVRTX1BF Ul9QSVhFTChjKQkoKDB4MDAwM2ZmMDAgJiAoYykpID4+ICA4KQo+ICsjZGVmaW5lIE1EUF9DT0xP Ul9HRVRfR1JPVVAoYykJCSgoMHgwMDAwMDBjMCAmIChjKSkgPj4gIDYpCj4gKyNkZWZpbmUgTURQ X0NPTE9SX0lTX1NXQVBQRUQoYykJCSgoMHgwMDAwMDAyMCAmIChjKSkgPj4gIDUpCj4gKyNkZWZp bmUgTURQX0NPTE9SX0dFVF9VTklRVUVfSUQoYykJKCgweDAwMDAwMDFmICYgKGMpKSA+PiAgMCkK PiArI2RlZmluZSBNRFBfQ09MT1JfR0VUX0hXX0ZPUk1BVChjKQkoKDB4MDAwMDAwMWYgJiAoYykp ID4+ICAwKQo+ICsKPiArI2RlZmluZSBNRFBfQ09MT1JfSVNfUkdCKGMpCQkoTURQX0NPTE9SX0dF VF9HUk9VUChjKSA9PSAwKQo+ICsjZGVmaW5lIE1EUF9DT0xPUl9JU19ZVVYoYykJCShNRFBfQ09M T1JfR0VUX0dST1VQKGMpID09IDEpCj4gKyNkZWZpbmUgTURQX0NPTE9SX0lTX1VWX0NPUExBTkUo YykJKChNRFBfQ09MT1JfR0VUX1BMQU5FX0NPVU5UKGMpID09IDIpICYmXAo+ICsJCQkJCSBNRFBf Q09MT1JfSVNfWVVWKGMpKQo+ICsKPiArZW51bSBtZHBfY29sb3Igewo+ICsJTURQX0NPTE9SX1VO S05PV04JPSAwLAo+ICsKPiArCS8vTURQX0NPTE9SX0ZVTExHOCwKPiArCU1EUF9DT0xPUl9GVUxM RzhfUkdHQgk9IE1EUF9DT0xPUigwLCAwLCAwLCAxLCAwLCAwLCAgOCwgMiwgIDAsIDIxKSwKPiAr CU1EUF9DT0xPUl9GVUxMRzhfR1JCRwk9IE1EUF9DT0xPUigwLCAwLCAwLCAxLCAwLCAxLCAgOCwg MiwgIDAsIDIxKSwKPiArCU1EUF9DT0xPUl9GVUxMRzhfR0JSRwk9IE1EUF9DT0xPUigwLCAwLCAw LCAxLCAxLCAwLCAgOCwgMiwgIDAsIDIxKSwKPiArCU1EUF9DT0xPUl9GVUxMRzhfQkdHUgk9IE1E UF9DT0xPUigwLCAwLCAwLCAxLCAxLCAxLCAgOCwgMiwgIDAsIDIxKSwKPiArCU1EUF9DT0xPUl9G VUxMRzgJPSBNRFBfQ09MT1JfRlVMTEc4X0JHR1IsCj4gKwo+ICsJLy9NRFBfQ09MT1JfRlVMTEcx MCwKPiArCU1EUF9DT0xPUl9GVUxMRzEwX1JHR0IJPSBNRFBfQ09MT1IoMCwgMCwgMCwgMSwgMCwg MCwgMTAsIDIsICAwLCAyMSksCj4gKwlNRFBfQ09MT1JfRlVMTEcxMF9HUkJHCT0gTURQX0NPTE9S KDAsIDAsIDAsIDEsIDAsIDEsIDEwLCAyLCAgMCwgMjEpLAo+ICsJTURQX0NPTE9SX0ZVTExHMTBf R0JSRwk9IE1EUF9DT0xPUigwLCAwLCAwLCAxLCAxLCAwLCAxMCwgMiwgIDAsIDIxKSwKPiArCU1E UF9DT0xPUl9GVUxMRzEwX0JHR1IJPSBNRFBfQ09MT1IoMCwgMCwgMCwgMSwgMSwgMSwgMTAsIDIs ICAwLCAyMSksCj4gKwlNRFBfQ09MT1JfRlVMTEcxMAk9IE1EUF9DT0xPUl9GVUxMRzEwX0JHR1Is Cj4gKwo+ICsJLy9NRFBfQ09MT1JfRlVMTEcxMiwKPiArCU1EUF9DT0xPUl9GVUxMRzEyX1JHR0IJ PSBNRFBfQ09MT1IoMCwgMCwgMCwgMSwgMCwgMCwgMTIsIDIsICAwLCAyMSksCj4gKwlNRFBfQ09M T1JfRlVMTEcxMl9HUkJHCT0gTURQX0NPTE9SKDAsIDAsIDAsIDEsIDAsIDEsIDEyLCAyLCAgMCwg MjEpLAo+ICsJTURQX0NPTE9SX0ZVTExHMTJfR0JSRwk9IE1EUF9DT0xPUigwLCAwLCAwLCAxLCAx LCAwLCAxMiwgMiwgIDAsIDIxKSwKPiArCU1EUF9DT0xPUl9GVUxMRzEyX0JHR1IJPSBNRFBfQ09M T1IoMCwgMCwgMCwgMSwgMSwgMSwgMTIsIDIsICAwLCAyMSksCj4gKwlNRFBfQ09MT1JfRlVMTEcx Mgk9IE1EUF9DT0xPUl9GVUxMRzEyX0JHR1IsCj4gKwo+ICsJLy9NRFBfQ09MT1JfRlVMTEcxNCwK PiArCU1EUF9DT0xPUl9GVUxMRzE0X1JHR0IJPSBNRFBfQ09MT1IoMCwgMCwgMCwgMSwgMCwgMCwg MTQsIDIsICAwLCAyMSksCj4gKwlNRFBfQ09MT1JfRlVMTEcxNF9HUkJHCT0gTURQX0NPTE9SKDAs IDAsIDAsIDEsIDAsIDEsIDE0LCAyLCAgMCwgMjEpLAo+ICsJTURQX0NPTE9SX0ZVTExHMTRfR0JS Rwk9IE1EUF9DT0xPUigwLCAwLCAwLCAxLCAxLCAwLCAxNCwgMiwgIDAsIDIxKSwKPiArCU1EUF9D T0xPUl9GVUxMRzE0X0JHR1IJPSBNRFBfQ09MT1IoMCwgMCwgMCwgMSwgMSwgMSwgMTQsIDIsICAw LCAyMSksCj4gKwlNRFBfQ09MT1JfRlVMTEcxNAk9IE1EUF9DT0xPUl9GVUxMRzE0X0JHR1IsCj4g Kwo+ICsJTURQX0NPTE9SX1VGTzEwCQk9IE1EUF9DT0xPUigwLCAwLCAwLCAxLCAwLCAwLCAxMCwg MiwgIDAsIDI0KSwKPiArCj4gKwkvL01EUF9DT0xPUl9CQVlFUjgsCj4gKwlNRFBfQ09MT1JfQkFZ RVI4X1JHR0IJPSBNRFBfQ09MT1IoMCwgMCwgMCwgMSwgMCwgMCwgIDgsIDIsICAwLCAyMCksCj4g KwlNRFBfQ09MT1JfQkFZRVI4X0dSQkcJPSBNRFBfQ09MT1IoMCwgMCwgMCwgMSwgMCwgMSwgIDgs IDIsICAwLCAyMCksCj4gKwlNRFBfQ09MT1JfQkFZRVI4X0dCUkcJPSBNRFBfQ09MT1IoMCwgMCwg MCwgMSwgMSwgMCwgIDgsIDIsICAwLCAyMCksCj4gKwlNRFBfQ09MT1JfQkFZRVI4X0JHR1IJPSBN RFBfQ09MT1IoMCwgMCwgMCwgMSwgMSwgMSwgIDgsIDIsICAwLCAyMCksCj4gKwlNRFBfQ09MT1Jf QkFZRVI4CT0gTURQX0NPTE9SX0JBWUVSOF9CR0dSLAo+ICsKPiArCS8vTURQX0NPTE9SX0JBWUVS MTAsCj4gKwlNRFBfQ09MT1JfQkFZRVIxMF9SR0dCCT0gTURQX0NPTE9SKDAsIDAsIDAsIDEsIDAs IDAsIDEwLCAyLCAgMCwgMjApLAo+ICsJTURQX0NPTE9SX0JBWUVSMTBfR1JCRwk9IE1EUF9DT0xP UigwLCAwLCAwLCAxLCAwLCAxLCAxMCwgMiwgIDAsIDIwKSwKPiArCU1EUF9DT0xPUl9CQVlFUjEw X0dCUkcJPSBNRFBfQ09MT1IoMCwgMCwgMCwgMSwgMSwgMCwgMTAsIDIsICAwLCAyMCksCj4gKwlN RFBfQ09MT1JfQkFZRVIxMF9CR0dSCT0gTURQX0NPTE9SKDAsIDAsIDAsIDEsIDEsIDEsIDEwLCAy LCAgMCwgMjApLAo+ICsJTURQX0NPTE9SX0JBWUVSMTAJPSBNRFBfQ09MT1JfQkFZRVIxMF9CR0dS LAo+ICsKPiArCS8vTURQX0NPTE9SX0JBWUVSMTIsCj4gKwlNRFBfQ09MT1JfQkFZRVIxMl9SR0dC CT0gTURQX0NPTE9SKDAsIDAsIDAsIDEsIDAsIDAsIDEyLCAyLCAgMCwgMjApLAo+ICsJTURQX0NP TE9SX0JBWUVSMTJfR1JCRwk9IE1EUF9DT0xPUigwLCAwLCAwLCAxLCAwLCAxLCAxMiwgMiwgIDAs IDIwKSwKPiArCU1EUF9DT0xPUl9CQVlFUjEyX0dCUkcJPSBNRFBfQ09MT1IoMCwgMCwgMCwgMSwg MSwgMCwgMTIsIDIsICAwLCAyMCksCj4gKwlNRFBfQ09MT1JfQkFZRVIxMl9CR0dSCT0gTURQX0NP TE9SKDAsIDAsIDAsIDEsIDEsIDEsIDEyLCAyLCAgMCwgMjApLAo+ICsJTURQX0NPTE9SX0JBWUVS MTIJPSBNRFBfQ09MT1JfQkFZRVIxMl9CR0dSLAo+ICsKPiArCS8vTURQX0NPTE9SX0JBWUVSMTQs Cj4gKwlNRFBfQ09MT1JfQkFZRVIxNF9SR0dCCT0gTURQX0NPTE9SKDAsIDAsIDAsIDEsIDAsIDAs IDE0LCAyLCAgMCwgMjApLAo+ICsJTURQX0NPTE9SX0JBWUVSMTRfR1JCRwk9IE1EUF9DT0xPUigw LCAwLCAwLCAxLCAwLCAxLCAxNCwgMiwgIDAsIDIwKSwKPiArCU1EUF9DT0xPUl9CQVlFUjE0X0dC UkcJPSBNRFBfQ09MT1IoMCwgMCwgMCwgMSwgMSwgMCwgMTQsIDIsICAwLCAyMCksCj4gKwlNRFBf Q09MT1JfQkFZRVIxNF9CR0dSCT0gTURQX0NPTE9SKDAsIDAsIDAsIDEsIDEsIDEsIDE0LCAyLCAg MCwgMjApLAo+ICsJTURQX0NPTE9SX0JBWUVSMTQJPSBNRFBfQ09MT1JfQkFZRVIxNF9CR0dSLAo+ ICsKPiArCU1EUF9DT0xPUl9SR0I0OAkJPSBNRFBfQ09MT1IoMCwgMCwgMCwgMSwgMCwgMCwgNDgs IDAsICAwLCAyMyksCj4gKwkvKiBGb3IgYmF5ZXIrbW9ubyByYXctMTYgKi8KPiArCU1EUF9DT0xP Ul9SR0I1NjVfUkFXCT0gTURQX0NPTE9SKDAsIDAsIDAsIDEsIDAsIDAsIDE2LCAyLCAgMCwgMCks Cj4gKwo+ICsJTURQX0NPTE9SX0JBWUVSOF9VTlBBSwk9IE1EUF9DT0xPUigwLCAwLCAwLCAxLCAw LCAwLCAgOCwgMiwgIDAsIDIyKSwKPiArCU1EUF9DT0xPUl9CQVlFUjEwX1VOUEFLCT0gTURQX0NP TE9SKDAsIDAsIDAsIDEsIDAsIDAsIDEwLCAyLCAgMCwgMjIpLAo+ICsJTURQX0NPTE9SX0JBWUVS MTJfVU5QQUsJPSBNRFBfQ09MT1IoMCwgMCwgMCwgMSwgMCwgMCwgMTIsIDIsICAwLCAyMiksCj4g KwlNRFBfQ09MT1JfQkFZRVIxNF9VTlBBSwk9IE1EUF9DT0xPUigwLCAwLCAwLCAxLCAwLCAwLCAx NCwgMiwgIDAsIDIyKSwKPiArCj4gKwkvKiBVbmlmaWVkIGZvcm1hdHMgKi8KPiArCU1EUF9DT0xP Ul9HUkVZCQk9IE1EUF9DT0xPUigwLCAwLCAwLCAxLCAwLCAwLCAgOCwgMSwgIDAsIDcpLAo+ICsK PiArCU1EUF9DT0xPUl9SR0I1NjUJPSBNRFBfQ09MT1IoMCwgMCwgMCwgMSwgMCwgMCwgMTYsIDAs ICAwLCAwKSwKPiArCU1EUF9DT0xPUl9CR1I1NjUJPSBNRFBfQ09MT1IoMCwgMCwgMCwgMSwgMCwg MCwgMTYsIDAsICAxLCAwKSwKPiArCU1EUF9DT0xPUl9SR0I4ODgJPSBNRFBfQ09MT1IoMCwgMCwg MCwgMSwgMCwgMCwgMjQsIDAsICAxLCAxKSwKPiArCU1EUF9DT0xPUl9CR1I4ODgJPSBNRFBfQ09M T1IoMCwgMCwgMCwgMSwgMCwgMCwgMjQsIDAsICAwLCAxKSwKPiArCU1EUF9DT0xPUl9SR0JBODg4 OAk9IE1EUF9DT0xPUigwLCAwLCAwLCAxLCAwLCAwLCAzMiwgMCwgIDEsIDIpLAo+ICsJTURQX0NP TE9SX0JHUkE4ODg4CT0gTURQX0NPTE9SKDAsIDAsIDAsIDEsIDAsIDAsIDMyLCAwLCAgMCwgMiks Cj4gKwlNRFBfQ09MT1JfQVJHQjg4ODgJPSBNRFBfQ09MT1IoMCwgMCwgMCwgMSwgMCwgMCwgMzIs IDAsICAxLCAzKSwKPiArCU1EUF9DT0xPUl9BQkdSODg4OAk9IE1EUF9DT0xPUigwLCAwLCAwLCAx LCAwLCAwLCAzMiwgMCwgIDAsIDMpLAo+ICsKPiArCU1EUF9DT0xPUl9VWVZZCQk9IE1EUF9DT0xP UigwLCAwLCAwLCAxLCAxLCAwLCAxNiwgMSwgIDAsIDQpLAo+ICsJTURQX0NPTE9SX1ZZVVkJCT0g TURQX0NPTE9SKDAsIDAsIDAsIDEsIDEsIDAsIDE2LCAxLCAgMSwgNCksCj4gKwlNRFBfQ09MT1Jf WVVZVgkJPSBNRFBfQ09MT1IoMCwgMCwgMCwgMSwgMSwgMCwgMTYsIDEsICAwLCA1KSwKPiArCU1E UF9DT0xPUl9ZVllVCQk9IE1EUF9DT0xPUigwLCAwLCAwLCAxLCAxLCAwLCAxNiwgMSwgIDEsIDUp LAo+ICsKPiArCU1EUF9DT0xPUl9JNDIwCQk9IE1EUF9DT0xPUigwLCAwLCAwLCAzLCAxLCAxLCAg OCwgMSwgIDAsIDgpLAo+ICsJTURQX0NPTE9SX1lWMTIJCT0gTURQX0NPTE9SKDAsIDAsIDAsIDMs IDEsIDEsICA4LCAxLCAgMSwgOCksCj4gKwlNRFBfQ09MT1JfSTQyMgkJPSBNRFBfQ09MT1IoMCwg MCwgMCwgMywgMSwgMCwgIDgsIDEsICAwLCA5KSwKPiArCU1EUF9DT0xPUl9ZVjE2CQk9IE1EUF9D T0xPUigwLCAwLCAwLCAzLCAxLCAwLCAgOCwgMSwgIDEsIDkpLAo+ICsJTURQX0NPTE9SX0k0NDQJ CT0gTURQX0NPTE9SKDAsIDAsIDAsIDMsIDAsIDAsICA4LCAxLCAgMCwgMTApLAo+ICsJTURQX0NP TE9SX1lWMjQJCT0gTURQX0NPTE9SKDAsIDAsIDAsIDMsIDAsIDAsICA4LCAxLCAgMSwgMTApLAo+ ICsKPiArCU1EUF9DT0xPUl9OVjEyCQk9IE1EUF9DT0xPUigwLCAwLCAwLCAyLCAxLCAxLCAgOCwg MSwgIDAsIDEyKSwKPiArCU1EUF9DT0xPUl9OVjIxCQk9IE1EUF9DT0xPUigwLCAwLCAwLCAyLCAx LCAxLCAgOCwgMSwgIDEsIDEyKSwKPiArCU1EUF9DT0xPUl9OVjE2CQk9IE1EUF9DT0xPUigwLCAw LCAwLCAyLCAxLCAwLCAgOCwgMSwgIDAsIDEzKSwKPiArCU1EUF9DT0xPUl9OVjYxCQk9IE1EUF9D T0xPUigwLCAwLCAwLCAyLCAxLCAwLCAgOCwgMSwgIDEsIDEzKSwKPiArCU1EUF9DT0xPUl9OVjI0 CQk9IE1EUF9DT0xPUigwLCAwLCAwLCAyLCAwLCAwLCAgOCwgMSwgIDAsIDE0KSwKPiArCU1EUF9D T0xPUl9OVjQyCQk9IE1EUF9DT0xPUigwLCAwLCAwLCAyLCAwLCAwLCAgOCwgMSwgIDEsIDE0KSwK PiArCj4gKwkvKiBNZWRpYXRlayBwcm9wcmlldGFyeSBmb3JtYXRzICovCj4gKwkvKiBVRk8gZW5j b2RlZCBibG9jayBtb2RlICovCj4gKwlNRFBfQ09MT1JfNDIwX0JMS19VRk8JPSBNRFBfQ09MT1Io MCwgMCwgNSwgMiwgMSwgMSwgMjU2LCAxLCAwLCAxMiksCj4gKwkvKiBCbG9jayBtb2RlICovCj4g KwlNRFBfQ09MT1JfNDIwX0JMSwk9IE1EUF9DT0xPUigwLCAwLCAxLCAyLCAxLCAxLCAyNTYsIDEs IDAsIDEyKSwKPiArCS8qIEJsb2NrIG1vZGUgKyBmaWVsZCBtb2RlICovCj4gKwlNRFBfQ09MT1Jf NDIwX0JMS0kJPSBNRFBfQ09MT1IoMCwgMCwgMywgMiwgMSwgMSwgMjU2LCAxLCAwLCAxMiksCj4g KwkvKiBCbG9jayBtb2RlICovCj4gKwlNRFBfQ09MT1JfNDIyX0JMSwk9IE1EUF9DT0xPUigwLCAw LCAxLCAxLCAxLCAwLCA1MTIsIDEsIDAsIDQpLAo+ICsKPiArCU1EUF9DT0xPUl9JWVUyCQk9IE1E UF9DT0xPUigwLCAwLCAwLCAxLCAwLCAwLCAyNCwgIDEsIDAsIDI1KSwKPiArCU1EUF9DT0xPUl9Z VVY0NDQJPSBNRFBfQ09MT1IoMCwgMCwgMCwgMSwgMCwgMCwgMjQsICAxLCAwLCAzMCksCj4gKwo+ ICsJLyogUGFja2VkIDEwLWJpdCBmb3JtYXRzICovCj4gKwlNRFBfQ09MT1JfUkdCQTEwMTAxMDIJ PSBNRFBfQ09MT1IoMSwgMCwgMCwgMSwgMCwgMCwgMzIsICAwLCAxLCAyKSwKPiArCU1EUF9DT0xP Ul9CR1JBMTAxMDEwMgk9IE1EUF9DT0xPUigxLCAwLCAwLCAxLCAwLCAwLCAzMiwgIDAsIDAsIDIp LAo+ICsJLyogUGFja2VkIDEwLWJpdCBVWVZZICovCj4gKwlNRFBfQ09MT1JfVVlWWV8xMFAJPSBN RFBfQ09MT1IoMSwgMCwgMCwgMSwgMSwgMCwgMjAsICAxLCAwLCA0KSwKPiArCS8qIFBhY2tlZCAx MC1iaXQgTlYyMSAqLwo+ICsJTURQX0NPTE9SX05WMjFfMTBQCT0gTURQX0NPTE9SKDEsIDAsIDAs IDIsIDEsIDEsIDEwLCAgMSwgMSwgMTIpLAo+ICsJLyogMTAtYml0IGJsb2NrIG1vZGUgKi8KPiAr CU1EUF9DT0xPUl80MjBfQkxLXzEwX0gJPSBNRFBfQ09MT1IoMSwgMCwgMSwgMiwgMSwgMSwgMzIw LCAxLCAwLCAxMiksCj4gKwkvKiAxMC1iaXQgSEVWQyB0aWxlIG1vZGUgKi8KPiArCU1EUF9DT0xP Ul80MjBfQkxLXzEwX1YJPSBNRFBfQ09MT1IoMSwgMSwgMSwgMiwgMSwgMSwgMzIwLCAxLCAwLCAx MiksCj4gKwkvKiBVRk8gZW5jb2RlZCAxMC1iaXQgYmxvY2sgbW9kZSAqLwo+ICsJTURQX0NPTE9S XzQyMF9CTEtfVTEwX0gJPSBNRFBfQ09MT1IoMSwgMCwgNSwgMiwgMSwgMSwgMzIwLCAxLCAwLCAx MiksCj4gKwkvKiBVRk8gZW5jb2RlZCAxMC1iaXQgSEVWQyB0aWxlIG1vZGUgKi8KPiArCU1EUF9D T0xPUl80MjBfQkxLX1UxMF9WCT0gTURQX0NPTE9SKDEsIDEsIDUsIDIsIDEsIDEsIDMyMCwgMSwg MCwgMTIpLAo+ICsKPiArCS8qIExvb3NlIDEwLWJpdCBmb3JtYXRzICovCj4gKwlNRFBfQ09MT1Jf VVlWWV8xMEwJPSBNRFBfQ09MT1IoMCwgMSwgMCwgMSwgMSwgMCwgMjAsICAxLCAwLCA0KSwKPiAr CU1EUF9DT0xPUl9WWVVZXzEwTAk9IE1EUF9DT0xPUigwLCAxLCAwLCAxLCAxLCAwLCAyMCwgIDEs IDEsIDQpLAo+ICsJTURQX0NPTE9SX1lVWVZfMTBMCT0gTURQX0NPTE9SKDAsIDEsIDAsIDEsIDEs IDAsIDIwLCAgMSwgMCwgNSksCj4gKwlNRFBfQ09MT1JfWVZZVV8xMEwJPSBNRFBfQ09MT1IoMCwg MSwgMCwgMSwgMSwgMCwgMjAsICAxLCAxLCA1KSwKPiArCU1EUF9DT0xPUl9OVjEyXzEwTAk9IE1E UF9DT0xPUigwLCAxLCAwLCAyLCAxLCAxLCAxMCwgIDEsIDAsIDEyKSwKPiArCU1EUF9DT0xPUl9O VjIxXzEwTAk9IE1EUF9DT0xPUigwLCAxLCAwLCAyLCAxLCAxLCAxMCwgIDEsIDEsIDEyKSwKPiAr CU1EUF9DT0xPUl9OVjE2XzEwTAk9IE1EUF9DT0xPUigwLCAxLCAwLCAyLCAxLCAwLCAxMCwgIDEs IDAsIDEzKSwKPiArCU1EUF9DT0xPUl9OVjYxXzEwTAk9IE1EUF9DT0xPUigwLCAxLCAwLCAyLCAx LCAwLCAxMCwgIDEsIDEsIDEzKSwKPiArCU1EUF9DT0xPUl9ZVjEyXzEwTAk9IE1EUF9DT0xPUigw LCAxLCAwLCAzLCAxLCAxLCAxMCwgIDEsIDEsIDgpLAo+ICsJTURQX0NPTE9SX0k0MjBfMTBMCT0g TURQX0NPTE9SKDAsIDEsIDAsIDMsIDEsIDEsIDEwLCAgMSwgMCwgOCksCj4gK307Cj4gKwo+ICsv KiBNaW5pbXVtIFkgc3RyaWRlIHRoYXQgaXMgYWNjZXB0ZWQgYnkgTURQIEhXICovCj4gK3N0YXRp YyBpbmxpbmUgdTMyIG1kcF9jb2xvcl9nZXRfbWluX3lfc3RyaWRlKGVudW0gbWRwX2NvbG9yIGMs IHUzMiB3aWR0aCkKPiArewo+ICsJcmV0dXJuICgoTURQX0NPTE9SX0JJVFNfUEVSX1BJWEVMKGMp ICogd2lkdGgpICsgNCkgPj4gMzsKPiArfQo+ICsKPiArLyogTWluaW11bSBVViBzdHJpZGUgdGhh dCBpcyBhY2NlcHRlZCBieSBNRFAgSFcgKi8KPiArc3RhdGljIGlubGluZSB1MzIgbWRwX2NvbG9y X2dldF9taW5fdXZfc3RyaWRlKGVudW0gbWRwX2NvbG9yIGMsIHUzMiB3aWR0aCkKPiArewo+ICsJ dTMyIG1pbl9zdHJpZGU7Cj4gKwo+ICsJaWYgKE1EUF9DT0xPUl9HRVRfUExBTkVfQ09VTlQoYykg PT0gMSkKPiArCQlyZXR1cm4gMDsKPiArCW1pbl9zdHJpZGUgPSBtZHBfY29sb3JfZ2V0X21pbl95 X3N0cmlkZShjLCB3aWR0aCkKPiArCQk+PiBNRFBfQ09MT1JfR0VUX0hfU1VCU0FNUExFKGMpOwo+ ICsJaWYgKE1EUF9DT0xPUl9JU19VVl9DT1BMQU5FKGMpICYmICFNRFBfQ09MT1JfSVNfQkxPQ0tf TU9ERShjKSkKPiArCQltaW5fc3RyaWRlID0gbWluX3N0cmlkZSAqIDI7Cj4gKwlyZXR1cm4gbWlu X3N0cmlkZTsKPiArfQo+ICsKPiArLyogTWluaW11bSBZIHBsYW5lIHNpemUgdGhhdCBpcyBuZWNl c3NhcnkgaW4gYnVmZmVyICovCj4gK3N0YXRpYyBpbmxpbmUgdTMyIG1kcF9jb2xvcl9nZXRfbWlu X3lfc2l6ZShlbnVtIG1kcF9jb2xvciBjLAo+ICsJCQkJCSAgIHUzMiB3aWR0aCwgdTMyIGhlaWdo dCkKPiArewo+ICsJaWYgKE1EUF9DT0xPUl9JU19CTE9DS19NT0RFKGMpKQo+ICsJCXJldHVybiAo KE1EUF9DT0xPUl9CSVRTX1BFUl9QSVhFTChjKSAqIHdpZHRoKSA+PiA4KSAqIGhlaWdodDsKPiAr CXJldHVybiBtZHBfY29sb3JfZ2V0X21pbl95X3N0cmlkZShjLCB3aWR0aCkgKiBoZWlnaHQ7Cj4g K30KPiArCj4gKy8qIE1pbmltdW0gVVYgcGxhbmUgc2l6ZSB0aGF0IGlzIG5lY2Vzc2FyeSBpbiBi dWZmZXIgKi8KPiArc3RhdGljIGlubGluZSB1MzIgbWRwX2NvbG9yX2dldF9taW5fdXZfc2l6ZShl bnVtIG1kcF9jb2xvciBjLAo+ICsJCQkJCSAgICB1MzIgd2lkdGgsIHUzMiBoZWlnaHQpCj4gK3sK PiArCWhlaWdodCA9IGhlaWdodCA+PiBNRFBfQ09MT1JfR0VUX1ZfU1VCU0FNUExFKGMpOwo+ICsJ aWYgKE1EUF9DT0xPUl9JU19CTE9DS19NT0RFKGMpICYmIChNRFBfQ09MT1JfR0VUX1BMQU5FX0NP VU5UKGMpID4gMSkpCj4gKwkJcmV0dXJuICgoTURQX0NPTE9SX0JJVFNfUEVSX1BJWEVMKGMpICog d2lkdGgpID4+IDgpICogaGVpZ2h0Owo+ICsJcmV0dXJuIG1kcF9jb2xvcl9nZXRfbWluX3V2X3N0 cmlkZShjLCB3aWR0aCkgKiBoZWlnaHQ7Cj4gK30KPiArCj4gKy8qIENvbWJpbmUgY29sb3JzcGFj ZSwgeGZlcl9mdW5jLCB5Y2Jjcl9lbmNvZGluZywgYW5kIHF1YW50aXphdGlvbiAqLwo+ICtlbnVt IG1kcF95Y2Jjcl9wcm9maWxlIHsKPiArCS8qIFY0TDJfWUNCQ1JfRU5DXzYwMSBhbmQgVjRMMl9R VUFOVElaQVRJT05fTElNX1JBTkdFICovCj4gKwlNRFBfWUNCQ1JfUFJPRklMRV9CVDYwMSwKPiAr CS8qIFY0TDJfWUNCQ1JfRU5DXzcwOSBhbmQgVjRMMl9RVUFOVElaQVRJT05fTElNX1JBTkdFICov Cj4gKwlNRFBfWUNCQ1JfUFJPRklMRV9CVDcwOSwKPiArCS8qIFY0TDJfWUNCQ1JfRU5DXzYwMSBh bmQgVjRMMl9RVUFOVElaQVRJT05fRlVMTF9SQU5HRSAqLwo+ICsJTURQX1lDQkNSX1BST0ZJTEVf SlBFRywKPiArCU1EUF9ZQ0JDUl9QUk9GSUxFX0ZVTExfQlQ2MDEgPSBNRFBfWUNCQ1JfUFJPRklM RV9KUEVHLAo+ICsKPiArCS8qIENvbG9yc3BhY2VzIG5vdCBzdXBwb3J0IGZvciBjYXB0dXJlICov Cj4gKwkvKiBWNEwyX1lDQkNSX0VOQ19CVDIwMjAgYW5kIFY0TDJfUVVBTlRJWkFUSU9OX0xJTV9S QU5HRSAqLwo+ICsJTURQX1lDQkNSX1BST0ZJTEVfQlQyMDIwLAo+ICsJLyogVjRMMl9ZQ0JDUl9F TkNfNzA5IGFuZCBWNEwyX1FVQU5USVpBVElPTl9GVUxMX1JBTkdFICovCj4gKwlNRFBfWUNCQ1Jf UFJPRklMRV9GVUxMX0JUNzA5LAo+ICsJLyogVjRMMl9ZQ0JDUl9FTkNfQlQyMDIwIGFuZCBWNEwy X1FVQU5USVpBVElPTl9GVUxMX1JBTkdFICovCj4gKwlNRFBfWUNCQ1JfUFJPRklMRV9GVUxMX0JU MjAyMCwKPiArfTsKPiArCj4gKyNkZWZpbmUgTURQX0ZNVF9GTEFHX09VVFBVVAlCSVQoMCkKPiAr I2RlZmluZSBNRFBfRk1UX0ZMQUdfQ0FQVFVSRQlCSVQoMSkKPiArCj4gK3N0cnVjdCBtZHBfZm9y bWF0IHsKPiArCXUzMglwaXhlbGZvcm1hdDsKPiArCXUzMgltZHBfY29sb3I7Cj4gKwl1OAlkZXB0 aFtWSURFT19NQVhfUExBTkVTXTsKPiArCXU4CXJvd19kZXB0aFtWSURFT19NQVhfUExBTkVTXTsK PiArCXU4CW51bV9wbGFuZXM7Cj4gKwl1OAl3YWxpZ247Cj4gKwl1OAloYWxpZ247Cj4gKwl1OAlz YWxpZ247Cj4gKwl1MzIJZmxhZ3M7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgbWRwX3BpeF9saW1pdCB7 Cj4gKwl1MzIJd21pbjsKPiArCXUzMglobWluOwo+ICsJdTMyCXdtYXg7Cj4gKwl1MzIJaG1heDsK PiArfTsKPiArCj4gK3N0cnVjdCBtZHBfbGltaXQgewo+ICsJc3RydWN0IG1kcF9waXhfbGltaXQJ b3V0X2xpbWl0Owo+ICsJc3RydWN0IG1kcF9waXhfbGltaXQJY2FwX2xpbWl0Owo+ICsJdTMyCQkJ aF9zY2FsZV91cF9tYXg7Cj4gKwl1MzIJCQl2X3NjYWxlX3VwX21heDsKPiArCXUzMgkJCWhfc2Nh bGVfZG93bl9tYXg7Cj4gKwl1MzIJCQl2X3NjYWxlX2Rvd25fbWF4Owo+ICt9Owo+ICsKPiArZW51 bSBtZHBfc3RyZWFtX3R5cGUgewo+ICsJTURQX1NUUkVBTV9UWVBFX1VOS05PV04sCj4gKwlNRFBf U1RSRUFNX1RZUEVfQklUQkxULAo+ICsJTURQX1NUUkVBTV9UWVBFX0dQVV9CSVRCTFQsCj4gKwlN RFBfU1RSRUFNX1RZUEVfRFVBTF9CSVRCTFQsCj4gKwlNRFBfU1RSRUFNX1RZUEVfMk5EX0JJVEJM VCwKPiArCU1EUF9TVFJFQU1fVFlQRV9JU1BfSUMsCj4gKwlNRFBfU1RSRUFNX1RZUEVfSVNQX1ZS LAo+ICsJTURQX1NUUkVBTV9UWVBFX0lTUF9aU0QsCj4gKwlNRFBfU1RSRUFNX1RZUEVfSVNQX0lQ LAo+ICsJTURQX1NUUkVBTV9UWVBFX0lTUF9WU1MsCj4gKwlNRFBfU1RSRUFNX1RZUEVfSVNQX1pT RF9TTE9XLAo+ICsJTURQX1NUUkVBTV9UWVBFX1dQRSwKPiArCU1EUF9TVFJFQU1fVFlQRV9XUEUy LAo+ICt9Owo+ICsKPiArc3RydWN0IG1kcF9jcm9wIHsKPiArCXN0cnVjdCB2NGwyX3JlY3QJYzsK PiArCXN0cnVjdCB2NGwyX2ZyYWN0CWxlZnRfc3VicGl4Owo+ICsJc3RydWN0IHY0bDJfZnJhY3QJ dG9wX3N1YnBpeDsKPiArCXN0cnVjdCB2NGwyX2ZyYWN0CXdpZHRoX3N1YnBpeDsKPiArCXN0cnVj dCB2NGwyX2ZyYWN0CWhlaWdodF9zdWJwaXg7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgbWRwX2ZyYW1l IHsKPiArCXN0cnVjdCB2NGwyX2Zvcm1hdAlmb3JtYXQ7Cj4gKwljb25zdCBzdHJ1Y3QgbWRwX2Zv cm1hdAkqbWRwX2ZtdDsKPiArCXUzMgkJCXljYmNyX3Byb2Y7CS8qIGVudW0gbWRwX3ljYmNyX3By b2ZpbGUgKi8KPiArCXUzMgkJCXVzYWdlOwkJLyogZW51bSBtZHBfYnVmZmVyX3VzYWdlICovCj4g KwlzdHJ1Y3QgbWRwX2Nyb3AJCWNyb3A7Cj4gKwlzdHJ1Y3QgdjRsMl9yZWN0CWNvbXBvc2U7Cj4g KwlzMzIJCQlyb3RhdGlvbjsKPiArCXUzMgkJCWhmbGlwOjE7Cj4gKwl1MzIJCQl2ZmxpcDoxOwo+ ICsJdTMyCQkJaGRyOjE7Cj4gKwl1MzIJCQlkcmU6MTsKPiArCXUzMgkJCXNoYXJwbmVzczoxOwo+ ICsJdTMyCQkJZGl0aGVyOjE7Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW5saW5lIGJvb2wgbWRwX3Rh cmdldF9pc19jcm9wKHUzMiB0YXJnZXQpCj4gK3sKPiArCXJldHVybiAodGFyZ2V0ID09IFY0TDJf U0VMX1RHVF9DUk9QKSB8fAo+ICsJCSh0YXJnZXQgPT0gVjRMMl9TRUxfVEdUX0NST1BfREVGQVVM VCkgfHwKPiArCQkodGFyZ2V0ID09IFY0TDJfU0VMX1RHVF9DUk9QX0JPVU5EUyk7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBtZHBfdGFyZ2V0X2lzX2NvbXBvc2UodTMyIHRhcmdldCkK PiArewo+ICsJcmV0dXJuICh0YXJnZXQgPT0gVjRMMl9TRUxfVEdUX0NPTVBPU0UpIHx8Cj4gKwkJ KHRhcmdldCA9PSBWNEwyX1NFTF9UR1RfQ09NUE9TRV9ERUZBVUxUKSB8fAo+ICsJCSh0YXJnZXQg PT0gVjRMMl9TRUxfVEdUX0NPTVBPU0VfQk9VTkRTKTsKPiArfQo+ICsKPiArI2RlZmluZSBNRFBf TUFYX0NBUFRVUkVTCUlNR19NQVhfSFdfT1VUUFVUUwo+ICsKPiArI2RlZmluZSBNRFBfVlBVX0lO SVQJCUJJVCgwKQo+ICsjZGVmaW5lIE1EUF9NMk1fQ1RYX0VSUk9SCUJJVCgxKQo+ICsKPiArc3Ry dWN0IG1kcF9mcmFtZXBhcmFtIHsKPiArCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKPiArCXN0cnVj dCBtZHBfbTJtX2N0eAkqY3R4Owo+ICsJLyogc3luY2hyb25pemF0aW9uIHByb3RlY3QgZm9yIG0y bSBjb250ZXh0IHN0YXRlICovCj4gKwlzdHJ1Y3QgbXV0ZXgJCXN0YXRlX2xvY2s7Cj4gKwl1MzIJ CQlzdGF0ZTsKPiArCWNvbnN0IHN0cnVjdCBtZHBfbGltaXQJKmxpbWl0Owo+ICsJdTMyCQkJdHlw ZTsJLyogZW51bSBtZHBfc3RyZWFtX3R5cGUgKi8KPiArCXUzMgkJCWZyYW1lX25vOwo+ICsJc3Ry dWN0IG1kcF9mcmFtZQlvdXRwdXQ7Cj4gKwlzdHJ1Y3QgbWRwX2ZyYW1lCWNhcHR1cmVzW01EUF9N QVhfQ0FQVFVSRVNdOwo+ICsJdTMyCQkJbnVtX2NhcHR1cmVzOwo+ICsJZW51bSB2NGwyX2NvbG9y c3BhY2UJCWNvbG9yc3BhY2U7Cj4gKwllbnVtIHY0bDJfeWNiY3JfZW5jb2RpbmcJeWNiY3JfZW5j Owo+ICsJZW51bSB2NGwyX3hmZXJfZnVuYwkJeGZlcl9mdW5jOwo+ICsJZW51bSB2NGwyX3F1YW50 aXphdGlvbgkJcXVhbnQ7Cj4gK307Cj4gKwo+ICtpbnQgbWRwX2VudW1fZm10X21wbGFuZShzdHJ1 Y3QgdjRsMl9mbXRkZXNjICpmKTsKPiArY29uc3Qgc3RydWN0IG1kcF9mb3JtYXQgKm1kcF90cnlf Zm10X21wbGFuZShzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYsCj4gKwkJCQkJICAgIHN0cnVjdCBtZHBf ZnJhbWVwYXJhbSAqcGFyYW0sCj4gKwkJCQkJICAgIHUzMiBjdHhfaWQpOwo+ICtlbnVtIG1kcF95 Y2Jjcl9wcm9maWxlIG1kcF9tYXBfeWNiY3JfcHJvZl9tcGxhbmUoc3RydWN0IHY0bDJfZm9ybWF0 ICpmLAo+ICsJCQkJCQkgdTMyIG1kcF9jb2xvcik7Cj4gK2ludCBtZHBfdHJ5X2Nyb3Aoc3RydWN0 IG1kcF9tMm1fY3R4ICpjdHgsIHN0cnVjdCB2NGwyX3JlY3QgKnIsCj4gKwkJIGNvbnN0IHN0cnVj dCB2NGwyX3NlbGVjdGlvbiAqcywgc3RydWN0IG1kcF9mcmFtZSAqZnJhbWUpOwo+ICtpbnQgbWRw X2NoZWNrX3NjYWxpbmdfcmF0aW8oY29uc3Qgc3RydWN0IHY0bDJfcmVjdCAqY3JvcCwKPiArCQkJ ICAgIGNvbnN0IHN0cnVjdCB2NGwyX3JlY3QgKmNvbXBvc2UsIHMzMiByb3RhdGlvbiwKPiArCWNv bnN0IHN0cnVjdCBtZHBfbGltaXQgKmxpbWl0KTsKPiArdm9pZCBtZHBfc2V0X3NyY19jb25maWco c3RydWN0IGltZ19pbnB1dCAqaW4sCj4gKwkJCXN0cnVjdCBtZHBfZnJhbWUgKmZyYW1lLCBzdHJ1 Y3QgdmIyX2J1ZmZlciAqdmIpOwo+ICt2b2lkIG1kcF9zZXRfZHN0X2NvbmZpZyhzdHJ1Y3QgaW1n X291dHB1dCAqb3V0LAo+ICsJCQlzdHJ1Y3QgbWRwX2ZyYW1lICpmcmFtZSwgc3RydWN0IHZiMl9i dWZmZXIgKnZiKTsKPiAraW50IG1kcF9mcmFtZXBhcmFtX2luaXQoc3RydWN0IG1kcF9mcmFtZXBh cmFtICpwYXJhbSk7Cj4gKwo+ICsjZW5kaWYgIC8qIF9fTVRLX01EUDNfUkVHU19IX18gKi8KPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstbWRwMy9tdGstbWRwMy12cHUu YyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLW1kcDMvbXRrLW1kcDMtdnB1LmMKPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZmMwMDhkOTZjN2MwCj4gLS0t IC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLW1kcDMvbXRrLW1k cDMtdnB1LmMKPiBAQCAtMCwwICsxLDMxMiBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMC1vbmx5Cj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAyMSBNZWRpYVRlayBJ bmMuCj4gKyAqIEF1dGhvcjogUGluZy1Ic3VuIFd1IDxwaW5nLWhzdW4ud3VAbWVkaWF0ZWsuY29t Pgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9yZW1vdGVwcm9jLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC9yZW1vdGVwcm9jL210a19zY3AuaD4KPiArI2luY2x1ZGUgIm10ay1tZHAzLXZwdS5o Igo+ICsjaW5jbHVkZSAibXRrLW1kcDMtY29yZS5oIgo+ICsKPiArI2RlZmluZSBNRFBfVlBVX01F U1NBR0VfVElNRU9VVCA1MDBVCj4gKyNkZWZpbmUgdnB1X2FsbG9jX3NpemUJCTB4NjAwMDAwCj4g Kwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBtZHBfZGV2ICp2cHVfdG9fbWRwKHN0cnVjdCBtZHBf dnB1X2RldiAqdnB1KQo+ICt7Cj4gKwlyZXR1cm4gY29udGFpbmVyX29mKHZwdSwgc3RydWN0IG1k cF9kZXYsIHZwdSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbWRwX3ZwdV9zaGFyZWRfbWVtX2Fs bG9jKHN0cnVjdCBtZHBfdnB1X2RldiAqdnB1KQo+ICt7Cj4gKwlpZiAodnB1LT53b3JrICYmIHZw dS0+d29ya19hZGRyKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXZwdS0+d29yayA9IGRtYV9hbGxv Y19jb2hlcmVudChzY3BfZ2V0X2RldmljZSh2cHUtPnNjcCksIHZwdV9hbGxvY19zaXplLAo+ICsJ CQkJICAgICAgICZ2cHUtPndvcmtfYWRkciwgR0ZQX0tFUk5FTCk7Cj4gKwo+ICsJaWYgKCF2cHUt PndvcmspCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwllbHNlCj4gKwkJcmV0dXJuIDA7Cj4gK30K PiArCj4gK3ZvaWQgbWRwX3ZwdV9zaGFyZWRfbWVtX2ZyZWUoc3RydWN0IG1kcF92cHVfZGV2ICp2 cHUpCj4gK3sKPiArCWlmICh2cHUtPndvcmsgJiYgdnB1LT53b3JrX2FkZHIpCj4gKwkJZG1hX2Zy ZWVfY29oZXJlbnQoc2NwX2dldF9kZXZpY2UodnB1LT5zY3ApLCB2cHVfYWxsb2Nfc2l6ZSwKPiAr CQkJCSAgdnB1LT53b3JrLCB2cHUtPndvcmtfYWRkcik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IG1kcF92cHVfaXBpX2hhbmRsZV9pbml0X2Fjayh2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVu LAo+ICsJCQkJCXZvaWQgKnByaXYpCj4gK3sKPiArCXN0cnVjdCBtZHBfaXBpX2luaXRfbXNnICpt c2cgPSAoc3RydWN0IG1kcF9pcGlfaW5pdF9tc2cgKilkYXRhOwo+ICsJc3RydWN0IG1kcF92cHVf ZGV2ICp2cHUgPQo+ICsJCShzdHJ1Y3QgbWRwX3ZwdV9kZXYgKikodW5zaWduZWQgbG9uZyltc2ct PmRydl9kYXRhOwo+ICsKPiArCWlmICghdnB1LT53b3JrX3NpemUpCj4gKwkJdnB1LT53b3JrX3Np emUgPSBtc2ctPndvcmtfc2l6ZTsKPiArCj4gKwl2cHUtPnN0YXR1cyA9IG1zZy0+c3RhdHVzOwo+ ICsJY29tcGxldGUoJnZwdS0+aXBpX2Fja2VkKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbWRw X3ZwdV9pcGlfaGFuZGxlX2RlaW5pdF9hY2sodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbiwK PiArCQkJCQkgIHZvaWQgKnByaXYpCj4gK3sKPiArCXN0cnVjdCBtZHBfaXBpX2RlaW5pdF9tc2cg Km1zZyA9IChzdHJ1Y3QgbWRwX2lwaV9kZWluaXRfbXNnICopZGF0YTsKPiArCXN0cnVjdCBtZHBf dnB1X2RldiAqdnB1ID0KPiArCQkoc3RydWN0IG1kcF92cHVfZGV2ICopKHVuc2lnbmVkIGxvbmcp bXNnLT5kcnZfZGF0YTsKPiArCj4gKwl2cHUtPnN0YXR1cyA9IG1zZy0+c3RhdHVzOwo+ICsJY29t cGxldGUoJnZwdS0+aXBpX2Fja2VkKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbWRwX3ZwdV9p cGlfaGFuZGxlX2ZyYW1lX2Fjayh2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuLAo+ICsJCQkJ CSB2b2lkICpwcml2KQo+ICt7Cj4gKwlzdHJ1Y3QgaW1nX3N3X2FkZHIgKmFkZHIgPSAoc3RydWN0 IGltZ19zd19hZGRyICopZGF0YTsKPiArCXN0cnVjdCBpbWdfaXBpX2ZyYW1lcGFyYW0gKnBhcmFt ID0KPiArCQkoc3RydWN0IGltZ19pcGlfZnJhbWVwYXJhbSAqKSh1bnNpZ25lZCBsb25nKWFkZHIt PnZhOwo+ICsJc3RydWN0IG1kcF92cHVfY3R4ICpjdHggPQo+ICsJCShzdHJ1Y3QgbWRwX3ZwdV9j dHggKikodW5zaWduZWQgbG9uZylwYXJhbS0+ZHJ2X2RhdGE7Cj4gKwo+ICsJaWYgKHBhcmFtLT5z dGF0ZSkgewo+ICsJCXN0cnVjdCBtZHBfZGV2ICptZHAgPSB2cHVfdG9fbWRwKGN0eC0+dnB1X2Rl dik7Cj4gKwo+ICsJCWRldl9lcnIoJm1kcC0+cGRldi0+ZGV2LCAiVlBVIE1EUCBmYWlsdXJlOiVk XG4iLCBwYXJhbS0+c3RhdGUpOwo+ICsJfQo+ICsJY29tcGxldGUoJmN0eC0+dnB1X2Rldi0+aXBp X2Fja2VkKTsKPiArfQo+ICsKPiAraW50IG1kcF92cHVfcmVnaXN0ZXIoc3RydWN0IG1kcF9kZXYg Km1kcCkKPiArewo+ICsJaW50IGVycjsKPiArCXN0cnVjdCBtdGtfc2NwICpzY3AgPSBtZHAtPnNj cDsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZtZHAtPnBkZXYtPmRldjsKPiArCj4gKwllcnIg PSBzY3BfaXBpX3JlZ2lzdGVyKHNjcCwgU0NQX0lQSV9NRFBfSU5JVCwKPiArCQkJICAgICAgIG1k cF92cHVfaXBpX2hhbmRsZV9pbml0X2FjaywgTlVMTCk7Cj4gKwlpZiAoZXJyKSB7Cj4gKwkJZGV2 X2VycihkZXYsICJzY3BfaXBpX3JlZ2lzdGVyIGZhaWxlZCAlZFxuIiwgZXJyKTsKPiArCQlnb3Rv IGVycl9pcGlfaW5pdDsKPiArCX0KPiArCWVyciA9IHNjcF9pcGlfcmVnaXN0ZXIoc2NwLCBTQ1Bf SVBJX01EUF9ERUlOSVQsCj4gKwkJCSAgICAgICBtZHBfdnB1X2lwaV9oYW5kbGVfZGVpbml0X2Fj aywgTlVMTCk7Cj4gKwlpZiAoZXJyKSB7Cj4gKwkJZGV2X2VycihkZXYsICJzY3BfaXBpX3JlZ2lz dGVyIGZhaWxlZCAlZFxuIiwgZXJyKTsKPiArCQlnb3RvIGVycl9pcGlfZGVpbml0Owo+ICsJfQo+ ICsJZXJyID0gc2NwX2lwaV9yZWdpc3RlcihzY3AsIFNDUF9JUElfTURQX0ZSQU1FLAo+ICsJCQkg ICAgICAgbWRwX3ZwdV9pcGlfaGFuZGxlX2ZyYW1lX2FjaywgTlVMTCk7Cj4gKwlpZiAoZXJyKSB7 Cj4gKwkJZGV2X2VycihkZXYsICJzY3BfaXBpX3JlZ2lzdGVyIGZhaWxlZCAlZFxuIiwgZXJyKTsK PiArCQlnb3RvIGVycl9pcGlfZnJhbWU7Cj4gKwl9Cj4gKwlyZXR1cm4gMDsKPiArCj4gK2Vycl9p cGlfZnJhbWU6Cj4gKwlzY3BfaXBpX3VucmVnaXN0ZXIoc2NwLCBTQ1BfSVBJX01EUF9ERUlOSVQp Owo+ICtlcnJfaXBpX2RlaW5pdDoKPiArCXNjcF9pcGlfdW5yZWdpc3RlcihzY3AsIFNDUF9JUElf TURQX0lOSVQpOwo+ICtlcnJfaXBpX2luaXQ6Cj4gKwo+ICsJcmV0dXJuIGVycjsKPiArfQo+ICsK PiArdm9pZCBtZHBfdnB1X3VucmVnaXN0ZXIoc3RydWN0IG1kcF9kZXYgKm1kcCkKPiArewo+ICsJ c2NwX2lwaV91bnJlZ2lzdGVyKG1kcC0+c2NwLCBTQ1BfSVBJX01EUF9JTklUKTsKPiArCXNjcF9p cGlfdW5yZWdpc3RlcihtZHAtPnNjcCwgU0NQX0lQSV9NRFBfREVJTklUKTsKPiArCXNjcF9pcGlf dW5yZWdpc3RlcihtZHAtPnNjcCwgU0NQX0lQSV9NRFBfRlJBTUUpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IG1kcF92cHVfc2VuZG1zZyhzdHJ1Y3QgbWRwX3ZwdV9kZXYgKnZwdSwgZW51bSBzY3Bf aXBpX2lkIGlkLAo+ICsJCQkgICB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCj4gK3sKPiAr CXN0cnVjdCBtZHBfZGV2ICptZHAgPSB2cHVfdG9fbWRwKHZwdSk7Cj4gKwl1bnNpZ25lZCBpbnQg dCA9IE1EUF9WUFVfTUVTU0FHRV9USU1FT1VUOwo+ICsJaW50IHJldDsKPiArCj4gKwlpZiAoIXZw dS0+c2NwKSB7Cj4gKwkJZGV2X2RiZygmbWRwLT5wZGV2LT5kZXYsICJ2cHUgc2NwIGlzIE5VTEwi KTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCXJldCA9IHNjcF9pcGlfc2VuZCh2cHUt PnNjcCwgaWQsIGJ1ZiwgbGVuLCAyMDAwKTsKPiArCj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2Vy cigmbWRwLT5wZGV2LT5kZXYsICJzY3BfaXBpX3NlbmQgZmFpbGVkICVkXG4iLCByZXQpOwo+ICsJ CXJldHVybiAtRVBFUk07Cj4gKwl9Cj4gKwlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVv dXQoJnZwdS0+aXBpX2Fja2VkLAo+ICsJCQkJCSAgbXNlY3NfdG9famlmZmllcyh0KSk7Cj4gKwlp ZiAoIXJldCkKPiArCQlyZXQgPSAtRVRJTUU7Cj4gKwllbHNlIGlmICh2cHUtPnN0YXR1cykKPiAr CQlyZXQgPSAtRUlOVkFMOwo+ICsJZWxzZQo+ICsJCXJldCA9IDA7Cj4gKwlyZXR1cm4gcmV0Owo+ ICt9Cj4gKwo+ICtpbnQgbWRwX3ZwdV9kZXZfaW5pdChzdHJ1Y3QgbWRwX3ZwdV9kZXYgKnZwdSwg c3RydWN0IG10a19zY3AgKnNjcCwKPiArCQkgICAgIHN0cnVjdCBtdXRleCAqbG9jaykKPiArewo+ ICsJc3RydWN0IG1kcF9pcGlfaW5pdF9tc2cgbXNnID0gewo+ICsJCS5kcnZfZGF0YSA9ICh1bnNp Z25lZCBsb25nKXZwdSwKPiArCX07Cj4gKwlzaXplX3QgbWVtX3NpemU7Cj4gKwlwaHlzX2FkZHJf dCBwb29sOwo+ICsJY29uc3Qgc2l6ZV90IHBvb2xfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbWRwX2Nv bmZpZ19wb29sKTsKPiArCXN0cnVjdCBtZHBfZGV2ICptZHAgPSB2cHVfdG9fbWRwKHZwdSk7Cj4g KwlpbnQgZXJyOwo+ICsKPiArCWluaXRfY29tcGxldGlvbigmdnB1LT5pcGlfYWNrZWQpOwo+ICsJ dnB1LT5zY3AgPSBzY3A7Cj4gKwl2cHUtPmxvY2sgPSBsb2NrOwo+ICsJdnB1LT53b3JrX3NpemUg PSAwOwo+ICsJZXJyID0gbWRwX3ZwdV9zZW5kbXNnKHZwdSwgU0NQX0lQSV9NRFBfSU5JVCwgJm1z Zywgc2l6ZW9mKG1zZykpOwo+ICsJaWYgKGVycikKPiArCQlnb3RvIGVycl93b3JrX3NpemU7Cj4g KwkvKiB2cHUgd29ya19zaXplIHdhcyBzZXQgaW4gbWRwX3ZwdV9pcGlfaGFuZGxlX2luaXRfYWNr ICovCj4gKwo+ICsJbWVtX3NpemUgPSB2cHVfYWxsb2Nfc2l6ZTsKPiArCWlmIChtZHBfdnB1X3No YXJlZF9tZW1fYWxsb2ModnB1KSkgewo+ICsJCWRldl9lcnIoJm1kcC0+cGRldi0+ZGV2LCAiVlBV IG1lbW9yeSBhbGxvYyBmYWlsISIpOwo+ICsJCWdvdG8gZXJyX21lbV9hbGxvYzsKPiArCX0KPiAr Cj4gKwlwb29sID0gQUxJR04oKHVpbnRwdHJfdCl2cHUtPndvcmsgKyB2cHUtPndvcmtfc2l6ZSwg OCk7Cj4gKwlpZiAocG9vbCArIHBvb2xfc2l6ZSAtICh1aW50cHRyX3QpdnB1LT53b3JrID4gbWVt X3NpemUpIHsKPiArCQlkZXZfZXJyKCZtZHAtPnBkZXYtPmRldiwKPiArCQkJIlZQVSBtZW1vcnkg aW5zdWZmaWNpZW50OiAlenggKyAlenggPiAlengiLAo+ICsJCQl2cHUtPndvcmtfc2l6ZSwgcG9v bF9zaXplLCBtZW1fc2l6ZSk7Cj4gKwkJZXJyID0gLUVOT01FTTsKPiArCQlnb3RvIGVycl9tZW1f c2l6ZTsKPiArCX0KPiArCj4gKwlkZXZfZGJnKCZtZHAtPnBkZXYtPmRldiwKPiArCQkiVlBVIHdv cms6JXBLIHBhOiVwYWQgc3o6JXp4IHBvb2w6JXBhIHN6OiV6eCAobWVtIHN6OiV6eCkiLAo+ICsJ CXZwdS0+d29yaywgJnZwdS0+d29ya19hZGRyLCB2cHUtPndvcmtfc2l6ZSwKPiArCQkmcG9vbCwg cG9vbF9zaXplLCBtZW1fc2l6ZSk7Cj4gKwl2cHUtPnBvb2wgPSAoc3RydWN0IG1kcF9jb25maWdf cG9vbCAqKSh1aW50cHRyX3QpcG9vbDsKPiArCW1zZy53b3JrX2FkZHIgPSB2cHUtPndvcmtfYWRk cjsKPiArCW1zZy53b3JrX3NpemUgPSB2cHUtPndvcmtfc2l6ZTsKPiArCWVyciA9IG1kcF92cHVf c2VuZG1zZyh2cHUsIFNDUF9JUElfTURQX0lOSVQsICZtc2csIHNpemVvZihtc2cpKTsKPiArCWlm IChlcnIpCj4gKwkJZ290byBlcnJfd29ya19zaXplOwo+ICsKPiArCW1lbXNldCh2cHUtPnBvb2ws IDAsIHNpemVvZigqdnB1LT5wb29sKSk7Cj4gKwlyZXR1cm4gMDsKPiArCj4gK2Vycl93b3JrX3Np emU6Cj4gKwlzd2l0Y2ggKHZwdS0+c3RhdHVzKSB7Cj4gKwljYXNlIC1NRFBfSVBJX0VCVVNZOgo+ ICsJCWVyciA9IC1FQlVTWTsKPiArCQlicmVhazsKPiArCWNhc2UgLU1EUF9JUElfRU5PTUVNOgo+ ICsJCWVyciA9IC1FTk9TUEM7CS8qIC1FTk9NRU0gKi8KPiArCQlicmVhazsKPiArCX0KPiArCXJl dHVybiBlcnI7Cj4gK2Vycl9tZW1fc2l6ZToKPiArZXJyX21lbV9hbGxvYzoKPiArCXJldHVybiBl cnI7Cj4gK30KPiArCj4gK2ludCBtZHBfdnB1X2Rldl9kZWluaXQoc3RydWN0IG1kcF92cHVfZGV2 ICp2cHUpCj4gK3sKPiArCXN0cnVjdCBtZHBfaXBpX2RlaW5pdF9tc2cgbXNnID0gewo+ICsJCS5k cnZfZGF0YSA9ICh1bnNpZ25lZCBsb25nKXZwdSwKPiArCQkud29ya19hZGRyID0gdnB1LT53b3Jr X2FkZHIsCj4gKwl9Owo+ICsKPiArCXJldHVybiBtZHBfdnB1X3NlbmRtc2codnB1LCBTQ1BfSVBJ X01EUF9ERUlOSVQsICZtc2csIHNpemVvZihtc2cpKTsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVj dCBpbWdfY29uZmlnICptZHBfY29uZmlnX2dldChzdHJ1Y3QgbWRwX3ZwdV9kZXYgKnZwdSwKPiAr CQkJCQkgZW51bSBtZHBfY29uZmlnX2lkIGlkLCB1aW50MzJfdCAqYWRkcikKPiArewo+ICsJc3Ry dWN0IGltZ19jb25maWcgKmNvbmZpZzsKPiArCj4gKwlpZiAoaWQgPCAwIHx8IGlkID49IE1EUF9D T05GSUdfUE9PTF9TSVpFKQo+ICsJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwo+ICsKPiArCW11 dGV4X2xvY2sodnB1LT5sb2NrKTsKPiArCXZwdS0+cG9vbC0+Y2ZnX2NvdW50W2lkXSsrOwo+ICsJ Y29uZmlnID0gJnZwdS0+cG9vbC0+Y29uZmlnc1tpZF07Cj4gKwkqYWRkciA9IHZwdS0+d29ya19h ZGRyICsgKCh1aW50cHRyX3QpY29uZmlnIC0gKHVpbnRwdHJfdCl2cHUtPndvcmspOwo+ICsJbXV0 ZXhfdW5sb2NrKHZwdS0+bG9jayk7Cj4gKwo+ICsJcmV0dXJuIGNvbmZpZzsKPiArfQo+ICsKPiAr c3RhdGljIGludCBtZHBfY29uZmlnX3B1dChzdHJ1Y3QgbWRwX3ZwdV9kZXYgKnZwdSwKPiArCQkJ ICBlbnVtIG1kcF9jb25maWdfaWQgaWQsCj4gKwkJCSAgY29uc3Qgc3RydWN0IGltZ19jb25maWcg KmNvbmZpZykKPiArewo+ICsJaW50IGVyciA9IDA7Cj4gKwo+ICsJaWYgKGlkIDwgMCB8fCBpZCA+ PSBNRFBfQ09ORklHX1BPT0xfU0laRSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCWlmICh2cHUt PmxvY2spCj4gKwkJbXV0ZXhfbG9jayh2cHUtPmxvY2spOwo+ICsJaWYgKCF2cHUtPnBvb2wtPmNm Z19jb3VudFtpZF0gfHwgY29uZmlnICE9ICZ2cHUtPnBvb2wtPmNvbmZpZ3NbaWRdKQo+ICsJCWVy ciA9IC1FSU5WQUw7Cj4gKwllbHNlCj4gKwkJdnB1LT5wb29sLT5jZmdfY291bnRbaWRdLS07Cj4g KwlpZiAodnB1LT5sb2NrKQo+ICsJCW11dGV4X3VubG9jayh2cHUtPmxvY2spOwo+ICsJcmV0dXJu IGVycjsKPiArfQo+ICsKPiAraW50IG1kcF92cHVfY3R4X2luaXQoc3RydWN0IG1kcF92cHVfY3R4 ICpjdHgsIHN0cnVjdCBtZHBfdnB1X2RldiAqdnB1LAo+ICsJCSAgICAgZW51bSBtZHBfY29uZmln X2lkIGlkKQo+ICt7Cj4gKwljdHgtPmNvbmZpZyA9IG1kcF9jb25maWdfZ2V0KHZwdSwgaWQsICZj dHgtPmluc3RfYWRkcik7Cj4gKwlpZiAoSVNfRVJSKGN0eC0+Y29uZmlnKSkgewo+ICsJCWludCBl cnIgPSBQVFJfRVJSKGN0eC0+Y29uZmlnKTsKPiArCj4gKwkJY3R4LT5jb25maWcgPSBOVUxMOwo+ ICsJCXJldHVybiBlcnI7Cj4gKwl9Cj4gKwljdHgtPmNvbmZpZ19pZCA9IGlkOwo+ICsJY3R4LT52 cHVfZGV2ID0gdnB1Owo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK2ludCBtZHBfdnB1X2N0eF9k ZWluaXQoc3RydWN0IG1kcF92cHVfY3R4ICpjdHgpCj4gK3sKPiArCWludCBlcnIgPSBtZHBfY29u ZmlnX3B1dChjdHgtPnZwdV9kZXYsIGN0eC0+Y29uZmlnX2lkLCBjdHgtPmNvbmZpZyk7Cj4gKwo+ ICsJY3R4LT5jb25maWdfaWQgPSAwOwo+ICsJY3R4LT5jb25maWcgPSBOVUxMOwo+ICsJY3R4LT5p bnN0X2FkZHIgPSAwOwo+ICsJcmV0dXJuIGVycjsKPiArfQo+ICsKPiAraW50IG1kcF92cHVfcHJv Y2VzcyhzdHJ1Y3QgbWRwX3ZwdV9jdHggKmN0eCwgc3RydWN0IGltZ19pcGlfZnJhbWVwYXJhbSAq cGFyYW0pCj4gK3sKPiArCXN0cnVjdCBtZHBfdnB1X2RldiAqdnB1ID0gY3R4LT52cHVfZGV2Owo+ ICsJc3RydWN0IG1kcF9kZXYgKm1kcCA9IHZwdV90b19tZHAodnB1KTsKPiArCXN0cnVjdCBpbWdf c3dfYWRkciBhZGRyOwo+ICsKPiArCWlmICghY3R4LT52cHVfZGV2LT53b3JrIHx8ICFjdHgtPnZw dV9kZXYtPndvcmtfYWRkcikgewo+ICsJCWlmIChtZHBfdnB1X3NoYXJlZF9tZW1fYWxsb2ModnB1 KSkgewo+ICsJCQlkZXZfZXJyKCZtZHAtPnBkZXYtPmRldiwgIlZQVSBtZW1vcnkgYWxsb2MgZmFp bCEiKTsKPiArCQkJcmV0dXJuIC1FTk9NRU07Cj4gKwkJfQo+ICsJfQo+ICsJbWVtc2V0KCh2b2lk ICopY3R4LT52cHVfZGV2LT53b3JrLCAwLCBjdHgtPnZwdV9kZXYtPndvcmtfc2l6ZSk7Cj4gKwlt ZW1zZXQoY3R4LT5jb25maWcsIDAsIHNpemVvZigqY3R4LT5jb25maWcpKTsKPiArCXBhcmFtLT5j b25maWdfZGF0YS52YSA9ICh1bnNpZ25lZCBsb25nKWN0eC0+Y29uZmlnOwo+ICsJcGFyYW0tPmNv bmZpZ19kYXRhLnBhID0gY3R4LT5pbnN0X2FkZHI7Cj4gKwlwYXJhbS0+ZHJ2X2RhdGEgPSAodW5z aWduZWQgbG9uZyljdHg7Cj4gKwo+ICsJbWVtY3B5KCh2b2lkICopY3R4LT52cHVfZGV2LT53b3Jr LCBwYXJhbSwgc2l6ZW9mKCpwYXJhbSkpOwo+ICsJYWRkci5wYSA9IGN0eC0+dnB1X2Rldi0+d29y a19hZGRyOwo+ICsJYWRkci52YSA9ICh1aW50cHRyX3QpY3R4LT52cHVfZGV2LT53b3JrOwo+ICsJ cmV0dXJuIG1kcF92cHVfc2VuZG1zZyhjdHgtPnZwdV9kZXYsIFNDUF9JUElfTURQX0ZSQU1FLAo+ ICsJCSZhZGRyLCBzaXplb2YoYWRkcikpOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVk aWEvcGxhdGZvcm0vbXRrLW1kcDMvbXRrLW1kcDMtdnB1LmggYi9kcml2ZXJzL21lZGlhL3BsYXRm b3JtL210ay1tZHAzL210ay1tZHAzLXZwdS5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwMDAwMDAuLmU4MzEwNzBiNDRkMAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2 ZXJzL21lZGlhL3BsYXRmb3JtL210ay1tZHAzL210ay1tZHAzLXZwdS5oCj4gQEAgLTAsMCArMSw3 OCBAQAo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCj4gKy8q Cj4gKyAqIENvcHlyaWdodCAoYykgMjAyMSBNZWRpYVRlayBJbmMuCj4gKyAqIEF1dGhvcjogUGlu Zy1Ic3VuIFd1IDxwaW5nLWhzdW4ud3VAbWVkaWF0ZWsuY29tPgo+ICsgKi8KPiArCj4gKyNpZm5k ZWYgX19NVEtfTURQM19WUFVfSF9fCj4gKyNkZWZpbmUgX19NVEtfTURQM19WUFVfSF9fCj4gKwo+ ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gKyNpbmNsdWRlICJtdGstaW1n LWlwaS5oIgo+ICsKPiArZW51bSBtZHBfaXBpX3Jlc3VsdCB7Cj4gKwlNRFBfSVBJX1NVQ0NFU1MJ PSAwLAo+ICsJTURQX0lQSV9FTk9NRU0JPSAxMiwKPiArCU1EUF9JUElfRUJVU1kJPSAxNiwKPiAr CU1EUF9JUElfRUlOVkFMCT0gMjIsCj4gKwlNRFBfSVBJX0VNSU5TVAk9IDI0LAo+ICsJTURQX0lQ SV9FUkFOR0UJPSAzNCwKPiArCU1EUF9JUElfTlJfRVJSTk8sCj4gKwo+ICsJTURQX0lQSV9FT1RI RVIJPSBNRFBfSVBJX05SX0VSUk5PLAo+ICsJTURQX0lQSV9QQVRIX0NBTlRfTUVSR0UsCj4gKwlN RFBfSVBJX09QX0ZBSUwsCj4gK307Cj4gKwo+ICtzdHJ1Y3QgbWRwX2lwaV9pbml0X21zZyB7Cj4g Kwl1MzIJc3RhdHVzOwo+ICsJdTY0CWRydl9kYXRhOwo+ICsJdTMyCXdvcmtfYWRkcjsJLyogW2lu XSB3b3JraW5nIGJ1ZmZlciBhZGRyZXNzICovCj4gKwl1MzIJd29ya19zaXplOwkvKiBbaW5dIHdv cmtpbmcgYnVmZmVyIHNpemUgKi8KPiArfSBfX3BhY2tlZDsKPiArCj4gK3N0cnVjdCBtZHBfaXBp X2RlaW5pdF9tc2cgewo+ICsJdTMyCXN0YXR1czsKPiArCXU2NAlkcnZfZGF0YTsKPiArCXUzMgl3 b3JrX2FkZHI7Cj4gK30gX19wYWNrZWQ7Cj4gKwo+ICtlbnVtIG1kcF9jb25maWdfaWQgewo+ICsJ TURQX0RFVl9NMk0gPSAwLAo+ICsJTURQX0NPTkZJR19QT09MX1NJWkUJLyogQUxXQVlTIGtlZXAg YXQgdGhlIGVuZCAqLwo+ICt9Owo+ICsKPiArc3RydWN0IG1kcF9jb25maWdfcG9vbCB7Cj4gKwl1 NjQJCQljZmdfY291bnRbTURQX0NPTkZJR19QT09MX1NJWkVdOwo+ICsJc3RydWN0IGltZ19jb25m aWcJY29uZmlnc1tNRFBfQ09ORklHX1BPT0xfU0laRV07Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgbWRw X3ZwdV9kZXYgewo+ICsJLyogc3luY2hyb25pemF0aW9uIHByb3RlY3QgZm9yIGFjY2Vzc2luZyB2 cHUgd29ya2luZyBidWZmZXIgaW5mbyAqLwo+ICsJc3RydWN0IG11dGV4CQkqbG9jazsKPiArCXN0 cnVjdCBtdGtfc2NwCQkqc2NwOwo+ICsJc3RydWN0IGNvbXBsZXRpb24JaXBpX2Fja2VkOwo+ICsJ dm9pZAkJCSp3b3JrOwo+ICsJZG1hX2FkZHJfdAkJd29ya19hZGRyOwo+ICsJc2l6ZV90CQkJd29y a19zaXplOwo+ICsJc3RydWN0IG1kcF9jb25maWdfcG9vbAkqcG9vbDsKPiArCXUzMgkJCXN0YXR1 czsKPiArfTsKPiArCj4gK3N0cnVjdCBtZHBfdnB1X2N0eCB7Cj4gKwlzdHJ1Y3QgbWRwX3ZwdV9k ZXYJKnZwdV9kZXY7Cj4gKwl1MzIJCQljb25maWdfaWQ7Cj4gKwlzdHJ1Y3QgaW1nX2NvbmZpZwkq Y29uZmlnOwo+ICsJdTMyCQkJaW5zdF9hZGRyOwo+ICt9Owo+ICsKPiArdm9pZCBtZHBfdnB1X3No YXJlZF9tZW1fZnJlZShzdHJ1Y3QgbWRwX3ZwdV9kZXYgKnZwdSk7Cj4gK2ludCBtZHBfdnB1X2Rl dl9pbml0KHN0cnVjdCBtZHBfdnB1X2RldiAqdnB1LCBzdHJ1Y3QgbXRrX3NjcCAqc2NwLAo+ICsJ CSAgICAgc3RydWN0IG11dGV4ICpsb2NrIC8qIGZvciBzeW5jICovKTsKPiAraW50IG1kcF92cHVf ZGV2X2RlaW5pdChzdHJ1Y3QgbWRwX3ZwdV9kZXYgKnZwdSk7Cj4gK2ludCBtZHBfdnB1X2N0eF9p bml0KHN0cnVjdCBtZHBfdnB1X2N0eCAqY3R4LCBzdHJ1Y3QgbWRwX3ZwdV9kZXYgKnZwdSwKPiAr CQkgICAgIGVudW0gbWRwX2NvbmZpZ19pZCBpZCk7Cj4gK2ludCBtZHBfdnB1X2N0eF9kZWluaXQo c3RydWN0IG1kcF92cHVfY3R4ICpjdHgpOwo+ICtpbnQgbWRwX3ZwdV9wcm9jZXNzKHN0cnVjdCBt ZHBfdnB1X2N0eCAqdnB1LCBzdHJ1Y3QgaW1nX2lwaV9mcmFtZXBhcmFtICpwYXJhbSk7Cj4gKwo+ ICsjZW5kaWYgIC8qIF9fTVRLX01EUDNfVlBVX0hfXyAqLwoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXgtbWVkaWF0ZWsgbWFpbGluZyBsaXN0Ckxp bnV4LW1lZGlhdGVrQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5v cmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1tZWRpYXRlawo=