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 448F9C433F5 for ; Tue, 30 Nov 2021 08:06:38 +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=pNCFRmJKtwAHn8NiTx8OP7SM7xe4fQaI5lc2Cz9Fz7Y=; b=kqdyPT8kYXWnSC fWSVK1QyBPKtEFXu3abk+i1uqmdum8lOMuC7yhqyEo3Jk9Ot0QgtFqH4Mnji5BeNLJiREgRKqTA2u Uwssso5QnWw+w2ZluBTVWyJu5BsIS8rWtKNG1zgqIycQO/8qQObvGsprL02mAYTpb8ISUSziCpS6J 7qKX/xlkFEA/kiSKTWvl5r0+1+KdI4yHFS1Z4qy9U5b8P+vDD1Zwu8fxYmbT9/XjrcC9WsQ1EO0Oy cR0LIDUnA5CKfY1A1ygwdWnhuqX7d7A+7x8QHdqYu9XxSIwtnyi62BfYmzYYZrQA3nS//5NDQw7V+ 7u6xyAIY+PD4EgVt07Vg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mry74-0042oY-Do; Tue, 30 Nov 2021 08:03:44 +0000 Received: from mail-dm6nam10on2078.outbound.protection.outlook.com ([40.107.93.78] helo=NAM10-DM6-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mry5H-0041zA-P9 for linux-arm-kernel@lists.infradead.org; Tue, 30 Nov 2021 08:01:56 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=irMVWIB/GNUx2yCq8B/vPpaTY7Seb3ZACcZIpK57KoSY9MTxFHqYxLaQlvCCpobe4kZVW0kPcitJlJlIbWofAm0pXwYgOSv4jnidyHhtOJOuBNQxa07bJSmhX+glenuBXIrMhe+TPgCwNVd2U9M4Oj9itTuEO07sLIBQrcPyCfvV9LWdqYj66x25MDgb+Cy5PfnJMOhBMgndd3A8wtWwxAf4SekE9Fa5FpaLPDt7TKPyQCAXvlYefXCth6X2/QhjUZihep3Jk7ZLfABGtGXdT8iqV9N98qpMWfoPl+EYNwYL9wP8EAG23m8XDL8DYBRZc/uiAQA6cXOL/GB1KSBFsw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=kNOtGP2b7fBmy4ycog4ADAy0wI911/dTzmabgb44rN8=; b=Z8PfRuYDamLvRwvnk3nvEaoObBWMnWp5aOKfPy3fZQq9a/EOYqAgyFMmBNFhpeEu5pJlkJYVwC5wM/tdnWBTGztpJoMmmQy5GLDZTITR3JEzFD4KrFctOZXUMGngKX4EhAwny/SaYWZDBoCVIKVlPlqMb9gfDAvSim5UdpEDS+TAYWMS/8IAS3OKuudyi6ItyZLh/u8x1Do7bfIC+Pq5L/9o5LvvO3eBoxJj1Pb5dQ4/gWowXO2cRNiH3ft+hiq0XUQijS6zfEUVtYVoJDlFadcxp1nKJhdn8Zrk3dqJOZGCLsyr/X9t8bDCMdByRXl+Pdfa67WFJoHLXZPKu8Ba0g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 149.199.80.198) smtp.rcpttodomain=linaro.org smtp.mailfrom=xilinx.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=xilinx.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xilinx.onmicrosoft.com; s=selector2-xilinx-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=kNOtGP2b7fBmy4ycog4ADAy0wI911/dTzmabgb44rN8=; b=ZXeQeB+a2JIoOTtCcmPCnt/S/MY19pBzNSyQ7lxI/Bix6fN6SuAxqM8IiLeXTr1LyVW9a3kaYsiPTFvbjmnk7PYtevdmoAncQUDTD+G4/bXBoau5DrTM0YQkV5PMPDJAvwJunEm364GfxHSb11yML00Z3juNiBhvzL3ldMh1oMY= Received: from SN7PR04CA0053.namprd04.prod.outlook.com (2603:10b6:806:120::28) by SA0PR02MB7337.namprd02.prod.outlook.com (2603:10b6:806:ed::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4734.23; Tue, 30 Nov 2021 08:01:46 +0000 Received: from SN1NAM02FT0052.eop-nam02.prod.protection.outlook.com (2603:10b6:806:120:cafe::d1) by SN7PR04CA0053.outlook.office365.com (2603:10b6:806:120::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4734.23 via Frontend Transport; Tue, 30 Nov 2021 08:01:46 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 149.199.80.198) smtp.mailfrom=xilinx.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=xilinx.com; Received-SPF: Pass (protection.outlook.com: domain of xilinx.com designates 149.199.80.198 as permitted sender) receiver=protection.outlook.com; client-ip=149.199.80.198; helo=xir-pvapexch02.xlnx.xilinx.com; Received: from xir-pvapexch02.xlnx.xilinx.com (149.199.80.198) by SN1NAM02FT0052.mail.protection.outlook.com (10.97.5.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.4734.20 via Frontend Transport; Tue, 30 Nov 2021 08:01:46 +0000 Received: from xir-pvapexch01.xlnx.xilinx.com (172.21.17.15) by xir-pvapexch02.xlnx.xilinx.com (172.21.17.17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.14; Tue, 30 Nov 2021 08:01:44 +0000 Received: from smtp.xilinx.com (172.21.105.197) by xir-pvapexch01.xlnx.xilinx.com (172.21.17.15) with Microsoft SMTP Server id 15.1.2176.14 via Frontend Transport; Tue, 30 Nov 2021 08:01:44 +0000 Received: from [10.71.116.9] (port=2046) by smtp.xilinx.com with esmtp (Exim 4.90) (envelope-from ) id 1mry59-0005CK-0u; Tue, 30 Nov 2021 08:01:44 +0000 Message-ID: <3d0b7062-12d4-bc58-9b37-931921881a1f@xilinx.com> Date: Tue, 30 Nov 2021 13:31:38 +0530 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.3.2 Subject: Re: [PATCH v2 6/6] drivers: remoteproc: Add Xilinx r5 remoteproc driver Content-Language: en-US To: Mathieu Poirier CC: Bjorn Andersson , Rob Herring , Michal Simek , "Laurent Pinchart" , Ben Levinsky , Bill Mills , "Sergei Korneichuk" , , , , References: <20211123062050.1442712-1-tanmay.shah@xilinx.com> <20211123062050.1442712-7-tanmay.shah@xilinx.com> <20211129184219.GC676889@p14s> From: Tanmay Shah In-Reply-To: <20211129184219.GC676889@p14s> X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ff785ede-ad44-4d4d-2cf0-08d9b3d7a7ba X-MS-TrafficTypeDiagnostic: SA0PR02MB7337: X-Microsoft-Antispam-PRVS: X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-MS-Oob-TLC-OOBClassifiers: OLM:7219; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Gs64iUZF9fhEIF630XXYaSoZo9GIbGg+Et8mXSPZhM9Dgp2zCgMdKUMgpnABb1TScHHGDICZCVHLUNwukM0idtbkz1f8+Xc8FL8ABmeCQjTqTjxCK+5+85+GWMij/Mp6Na2QryfTjNb/FgTZauJ//sGbg5QhWCIwZ8BQ5mRR++GDbWgRWqV8IMR16YoN/I/pdzltTWv/2hEmgKkEvgWDD5P7EQWAtm1DPTFUmMJvxeGz+c2W/dUo901f0+VQig2fJWCy11KoRURQ3ZfM6G3L8vLVl9WVBbArSSjhcqs+bFbokdSOHShZ6SdlW7G09UhiPmVLteTr9luCGY0mzmMIe+Gtt1Dtl0Vs0xg7k1nVDqbjoae6ngSzBu7L0I+ojCGHv47imwv2i/mmmJYRAIdbbij0OlUaHNmRU//nBQllUi5vkQ7NpXj609vgI47Ob9zyaxXbPgOF5hyqo+oasVeLeu+99g5/hFxTLvjxj506pi5dMFC0YSRqBOU4kZRhun4VHdsNAqSMyvRhs/jtk61Tv3h367Bs6XZtgMF+dmTfiSyAHLjd0wkWZy+kCQrS4xUw6lai4fiWmLLjJ/iQs5jzBjlIRZpH65cvy3uWeb4fYZQ0U6NfNkYYNjNUris0XeMmJEbuY1/twM31L3iJed9A/yjlMkpysP/0viB6aEy+hp6C8hmebzcD5QcUFR9FIY9+XVN3gQxRn7Pr4KHvaPTFbAVnewSTbBHI/VHFbwPKEJzQFDatlzaPmtYtiPfIA4ZZvqqr26SiUw2lj40GDSg6ZQqSG1sCISb6a1auSWg85IWWl6K55tq8wJ3/cSUNl6HrlT1tEsrMy4X+E4K8aTF55Jp0pBUCjE7sAmsjdnKN9oypPGsYPsy1VIIXqL4Hkt2+ X-Forefront-Antispam-Report: CIP:149.199.80.198; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:xir-pvapexch02.xlnx.xilinx.com; PTR:unknown-80-198.xilinx.com; CAT:NONE; SFS:(36840700001)(46966006)(186003)(82310400004)(70206006)(8676002)(53546011)(8936002)(70586007)(31696002)(6666004)(426003)(2906002)(44832011)(26005)(966005)(508600001)(31686004)(356005)(36756003)(2616005)(7636003)(30864003)(4326008)(36860700001)(336012)(6916009)(316002)(9786002)(47076005)(83380400001)(5660300002)(54906003)(50156003)(43740500002); DIR:OUT; SFP:1101; X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Nov 2021 08:01:46.0284 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ff785ede-ad44-4d4d-2cf0-08d9b3d7a7ba X-MS-Exchange-CrossTenant-Id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=657af505-d5df-48d0-8300-c31994686c5c; Ip=[149.199.80.198]; Helo=[xir-pvapexch02.xlnx.xilinx.com] X-MS-Exchange-CrossTenant-AuthSource: SN1NAM02FT0052.eop-nam02.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR02MB7337 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211130_000152_042276_87FF94D8 X-CRM114-Status: GOOD ( 31.76 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Ck9uIDExLzMwLzIxIDEyOjEyIEFNLCBNYXRoaWV1IFBvaXJpZXIgd3JvdGU6Cj4gT24gTW9uLCBO b3YgMjIsIDIwMjEgYXQgMTA6MjA6NTBQTSAtMDgwMCwgVGFubWF5IFNoYWggd3JvdGU6Cj4+IFRo aXMgZHJpdmVyIGVuYWJsZXMgcjVmIGR1YWwgY29yZSBSZWFsIHRpbWUgUHJvY2Vzc2luZyBVbml0 IHN1YnN5c3RlbQo+PiBhdmFpbGFibGUgb24gWGlsaW54IFp5bnEgVWx0cmFzY2FsZSBNUFNvQyBQ bGF0Zm9ybS4gUlBVIHN1YnN5c3RlbQo+PiAoY2x1c3RlcikgY2FuIGJlIGNvbmZpZ3VyZWQgaW4g ZGlmZmVyZW50IG1vZGVzIGUuZy4gc3BsaXQgbW9kZSBpbiB3aGljaAo+PiB0d28gcjVmIGNvcmVz IHdvcmsgaW5kZXBlbmRlbnQgb2YgZWFjaCBvdGhlciBhbmQgbG9jay1zdGVwIG1vZGUgaW4gd2hp Y2gKPj4gYm90aCByNWYgY29yZXMgZXhlY3V0ZSBzYW1lIGNvZGUgY2xvY2stZm9yLWNsb2NrIGFu ZCBub3RpZnkgaWYgdGhlCj4+IHJlc3VsdCBpcyBkaWZmZXJlbnQuCj4+Cj4+IFRoZSBYaWxpbngg cjUgUmVtb3RlcHJvYyBEcml2ZXIgYm9vdHMgdGhlIFJQVSBjb3JlcyB2aWEgY2FsbHMgdG8gdGhl IFhpbGlueAo+PiBQbGF0Zm9ybSBNYW5hZ2VtZW50IFVuaXQgdGhhdCBoYW5kbGVzIHRoZSBSNSBj b25maWd1cmF0aW9uLCBtZW1vcnkgYWNjZXNzCj4+IGFuZCBSNSBsaWZlY3ljbGUgbWFuYWdlbWVu dC4gVGhlIGludGVyZmFjZSB0byB0aGlzIG1hbmFnZXIgaXMgZG9uZSBpbiB0aGlzCj4+IGRyaXZl ciB2aWEgenlucW1wX3BtXyogZnVuY3Rpb24gY2FsbHMuCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IEJl biBMZXZpbnNreSA8YmVuLmxldmluc2t5QHhpbGlueC5jb20+Cj4+IFNpZ25lZC1vZmYtYnk6IFRh bm1heSBTaGFoIDx0YW5tYXkuc2hhaEB4aWxpbnguY29tPgo+PiAtLS0KPj4gICBkcml2ZXJzL3Jl bW90ZXByb2MvS2NvbmZpZyAgICAgICAgICAgICAgfCAgMTIgKwo+PiAgIGRyaXZlcnMvcmVtb3Rl cHJvYy9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgMSArCj4+ICAgZHJpdmVycy9yZW1vdGVwcm9j L3hsbnhfcjVfcmVtb3RlcHJvYy5jIHwgOTU5ICsrKysrKysrKysrKysrKysrKysrKysrKwo+PiAg IDMgZmlsZXMgY2hhbmdlZCwgOTcyIGluc2VydGlvbnMoKykKPj4gICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9yZW1vdGVwcm9jL3hsbnhfcjVfcmVtb3RlcHJvYy5jCj4gLi4uYW5kIHRoaXMg cGF0Y2ggZ2l2ZXMgbWUgY29tcGxhdGlvbiB3YXJuaW5nczoKPgo+ICAgIENDICAgICAgZHJpdmVy cy9yZW1vdGVwcm9jL3hsbnhfcjVfcmVtb3RlcHJvYy5vCj4ga2VybmVsLXJldmlldy9kcml2ZXJz L3JlbW90ZXByb2MveGxueF9yNV9yZW1vdGVwcm9jLmM6IEluIGZ1bmN0aW9uIOKAmGFkZF90Y21f Y2FydmVvdXRfbG9ja3N0ZXBfbW9kZeKAmToKPiBrZXJuZWwtcmV2aWV3L2RyaXZlcnMvcmVtb3Rl cHJvYy94bG54X3I1X3JlbW90ZXByb2MuYzo0MTI6Mjg6IHdhcm5pbmc6IHVudXNlZCB2YXJpYWJs ZSDigJhjbHVzdGVy4oCZIFstV3VudXNlZC12YXJpYWJsZV0KPiAgICA0MTIgfCAgc3RydWN0IHp5 bnFtcF9yNV9jbHVzdGVyICpjbHVzdGVyOwo+ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF5+fn5+fn4KPiBrZXJuZWwtcmV2aWV3L2RyaXZlcnMvcmVtb3RlcHJvYy94bG54X3I1 X3JlbW90ZXByb2MuYzo0MTE6MjY6IHdhcm5pbmc6IHVudXNlZCB2YXJpYWJsZSDigJhwYXJlbnRf cGRlduKAmSBbLVd1bnVzZWQtdmFyaWFibGVdCj4gICAgNDExIHwgIHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBhcmVudF9wZGV2Owo+ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICBe fn5+fn5+fn5+fgo+Cj4gVGhlIGFib3ZlIGxlYWRzIG1lIHRvIGJlbGlldmUgdGhpcyBwYXRjaHNl dCB3YXMgbm90IGNvbXBpbGVkIGJlZm9yZSBpdCB3YXMgc2VudAo+IG91dC4KClBsZWFzZSBkb24n dCBhc3N1bWUgdGhhdCB0aGlzIHBhdGNoLXNldCB3YXMgbm90IGNvbXBpbGVkLsKgIFRoaXMgZHJp dmVyIAp3YXMgY29tcGlsZWQgYW5kIHRlc3RlZCBvbiBYaWxpbnggUUVNVSBhbmQgenlucW1wIHBs YXRmb3JtIGZvciBpdHMgCmZ1bmN0aW9uYWxpdHkuCgpUaGlzIGRyaXZlciB3ZW50IHRocm91Z2gg bXVsdGlwbGUgaW50ZXJuYWwgcmV2aWV3cyBhbmQgSSBoYWQgdG8gCnJlLWFyY2hpdGVjdHVyZSBp dCBtdWx0aXBsZSB0aW1lcy4KCkkgc2ltcGx5IG1pc3NlZCB0byBmaXggYWJvdmUgd2FybmluZ3Mg YmVmb3JlIHN1Ym1pdHRpbmcgZHJpdmVyLiBJIGhhdmUgCmNvbXBpbGVkIGRyaXZlciB3aXRoIGZv bGxvd2luZyBjb21tYW5kOgoKLy9tYWtlIEFSQ0g9YXJtNjQgVz0xIEM9MSBDUk9TU19DT01QSUxF PSJhYXJjaDY0LWxpbnV4LWdudS0iIC1qMzIgLVJyIApPPSR6eW5xbXBfa2VybmVsX2J1aWxkL3Jw cm9jLW5leHQKCkkgZGlkIG15IGJlc3QgdG8gbWFrZSBzdXJlIGRyaXZlciBzdGF5cyB3YXJuaW5n IGZyZWUsIGhvd2V2ZXIgZmV3IAp3YXJuaW5ncyB3ZXJlIHN0aWxsIG1pc3NlZC4gVGhhdCBpcyBu b3QgaW50ZW50aW9uYWwgYW5kIGJ5IG1pc3Rha2UuIEkgCmZ1bGx5IGludGVuZCB0byBjb21wbHkg d2l0aCBMaW51eCBLZXJuZWwgY29tbXVuaXR5IGd1aWRlbGluZSBhbmQgCmNoZWNrbGlzdCBiZWZv cmUgc3VibWl0dGluZyBwYXRjaGVzLgoKQXBhcnQgZnJvbSBhYm92ZSB3YXJuaW5ncywgdHdvIG1v cmUgd2FybmluZ3MgYXJlIHRoZXJlIGluIHYyIGkuZS4gZHVlIHRvIAp0eXBlY2FzdCBpc3N1ZSBi ZXR3ZWVuICh2b2lkIF9faW9tZW0gKikgYW5kICh2b2lkICopLiBCdXQsIEkgaGFkIG5vdCAKc29s dXRpb24gYmVmb3JlLiBBbHNvIHRoZXkgd2VyZSB1c2VkIGJlZm9yZSBpbiBkaWZmZXJlbnQgZHJp dmVyIHNvLCBJIApjaG9zZSB0byB1c2UgdGhlbSBhbnl3YXkuCgpJIGp1c3QgZm91bmQgdGhhdCB1 c2luZyBtZW1yZW1hcCBzZXQgb2YgZnVuY3Rpb25zIHdpbGwgZml4IHRoZW0uIEkgd2lsbCAKdXNl IHRob3NlIGZ1bmN0aW9ucyBpbiBuZXh0IHBhdGNoIHNldCBpbnN0ZWFkIG9mIGlvcmVtYXBfd2Mg YXMgZXhwbGFpbmVkIAppbiB0aGlzIGFydGljbGU6IGh0dHBzOi8vbHduLm5ldC9BcnRpY2xlcy82 NTM1ODUvCgo+IEJlaW5nIG5ldyB0byB0aGlzIEkgY2FuIHVuZGVyc3RhbmQgdGhhdCBjaGVja3Bh dGNoLnBsIHdhcyBvbWl0dGVkIChhbGJlaXQgYW1wbHkKPiBkb2N1bWVudGVkKSBidXQgb2J2aW91 cyBjb21waWxhdGlvbiB3YXJuaW5ncyBjYW4ndCBiZSBleGN1c2VkLiAgQXMgc3VjaCBJCj4gYW0g ZHJvcHBpbmcgdGhpcyBzZXQgYW5kIHdpbGwgbm90IHJldmlldyBhbm90aGVyIHZlcnNpb24gdW50 aWwgSmFudWFyeS4KCgpJIHVuZGVyc3RhbmQgaGF2aW5nIHdhcm5pbmdzIGluIGRyaXZlciBtYXkg bGVhZCB0byBmcnVzdHJhdGlvbiBhbmQgbWF5IApjYXVzZSB0cnVzdCBpc3N1ZXMgZm9yIHRoZSBy ZXN0IG9mIHRoZSBjb2RlIGFuZCBpdCBjYW4ndCBiZSBleGN1c2VkIGF0IGFsbC4KCkkgYW0gYXdh cmUgb2YgZ3VpZGVsaW5lcyBvZiBzZW5kaW5nIHBhdGNoZXMgdXBzdHJlYW0gCihodHRwczovL3d3 dy5rZXJuZWwub3JnL2RvYy9odG1sL2xhdGVzdC9wcm9jZXNzL3N1Ym1pdHRpbmctcGF0Y2hlcy5o dG1sKSAKYW5kIGZ1bGx5IGludGVuZCB0byBjb21wbHkgd2l0aCB0aGF0IGFuZCBsaWtlIEkgc2Fp ZCwgaWYgSSBtaXNzIApzb21ldGhpbmcgaXQgaXMgbm90IGJ5IGludGVudGlvbiBidXQgaHVtYW4g ZXJyb3IuCgpJIGNvbnN0YW50bHkgdHJ5IHRvIGltcHJvdmUgcHJvY2Vzc2VzIHRvIHVwc3RyZWFt IHBhdGNoZXMgc28gd2UgZG9uJ3QgCmZhY2UgYWJvdmUgdHlwZSBvZiBpc3N1ZXMuCgpJIGRpZCBy dW4gY2hlY2twYXRjaC5wbCBhcyBwZXIgYmVzdCBvZiBteSBrbm93bGVkZ2UgYW5kIGZpeGVkIGxv dCBvZiAKc3R5bGUgcmVsYXRlZCB3YXJuaW5ncyByZXBvcnRlZCBieSBpdC4gQWxzbyBJIGVuYWJs ZWQgVz0xIG9wdGlvbiBpbiBteSAKY29tcGlsYXRpb24gY29tbWFuZCBhbmQgZml4ZWQgbG90cyBv ZiB3YXJuaW5ncyByZXBvcnRlZCBieSBjb21waWxlciB0b28uIApBcyBJIGV4cGxhaW5lZCBlYXJs aWVyLCBJIHdhc24ndCBhd2FyZSBvZiB1bnVzZWQtdmFyaWFibGUgd2FybmluZ3MsIGFuZCAKc28g SSBtaXNzZWQgdG8gZml4IHRoZW0uCgpXaXRoIHRoaXMsIEkgcmVxdWVzdCB0byByZXZpZXcgZHJp dmVyIGZyb20gZnVuY3Rpb25hbGl0eSBwb2ludCBvZiB2aWV3IAphcyB3ZWxsIGFsb25nIHdpdGgg c3R5bGUgZXJyb3JzLiBTbywgSSBjYW4gYWRkcmVzcyBtb3JlIG51bWJlciBvZiAKY29tbWVudHMg LyBjb25jZXJucyBpbiBsZXNzIG51bWJlciBvZiBwYXRjaGVzLiBJZiB5b3Ugd2FudCB0aGVzZSAK d2FybmluZ3MgdG8gYmUgZml4ZWQsIEkgd2lsbCBzZW5kIHYzIGFuZCB5b3UgY2FuIHB1dCBtb3Jl IGNvbW1lbnRzIG9uIAp2My4gSG93ZXZlciwgSSBoaWdobHkgYXBwcmVjaWF0ZSBpZiB3ZSBjYW4g Y29udGludWUgcmV2aWV3cyBhbmQgbm90IApwb3N0cG9uZSB0aWxsIEphbnVhcnkuIFBsZWFzZSBs ZXQgbWUga25vdyB5b3VyIHRob3VnaHRzLgoKClRoYW5rcywKClRhbm1heQoKCj4gTWF0aGlldQoK Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZyBiL2RyaXZlcnMvcmVt b3RlcHJvYy9LY29uZmlnCj4+IGluZGV4IGYzMGQwMGEzYWFiZS4uMjdmNjY5MTBkOGQzIDEwMDY0 NAo+PiAtLS0gYS9kcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZwo+PiArKysgYi9kcml2ZXJzL3Jl bW90ZXByb2MvS2NvbmZpZwo+PiBAQCAtMzE1LDYgKzMxNSwxOCBAQCBjb25maWcgVElfSzNfUjVf UkVNT1RFUFJPQwo+PiAgIAkgIEl0J3Mgc2FmZSB0byBzYXkgTiBoZXJlIGlmIHlvdSdyZSBub3Qg aW50ZXJlc3RlZCBpbiB1dGlsaXppbmcKPj4gICAJICBhIHNsYXZlIHByb2Nlc3Nvci4KPj4gICAK Pj4gK2NvbmZpZyBYTE5YX1I1X1JFTU9URVBST0MKPj4gKwl0cmlzdGF0ZSAiWGlsaW54IFI1IHJl bW90ZXByb2Mgc3VwcG9ydCIKPj4gKwlkZXBlbmRzIG9uIFBNICYmIEFSQ0hfWllOUU1QCj4+ICsJ ZGVwZW5kcyBvbiBaWU5RTVBfRklSTVdBUkUKPj4gKwlzZWxlY3QgUlBNU0dfVklSVElPCj4+ICsJ c2VsZWN0IFpZTlFNUF9JUElfTUJPWAo+PiArCWhlbHAKPj4gKwkgIFNheSB5IG9yIG0gaGVyZSB0 byBzdXBwb3J0IFhpbGlueCBSNSByZW1vdGUgcHJvY2Vzc29ycyB2aWEgdGhlIHJlbW90ZQo+PiAr CSAgcHJvY2Vzc29yIGZyYW1ld29yay4KPj4gKwo+PiArCSAgSXQncyBzYWZlIHRvIHNheSBOIGlm IG5vdCBpbnRlcmVzdGVkIGluIHVzaW5nIFJQVSByNWYgY29yZXMuCj4+ICsKPj4gICBlbmRpZiAj IFJFTU9URVBST0MKPj4gICAKPj4gICBlbmRtZW51Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3Jl bW90ZXByb2MvTWFrZWZpbGUgYi9kcml2ZXJzL3JlbW90ZXByb2MvTWFrZWZpbGUKPj4gaW5kZXgg YmIyNmM5ZTRlZjljLi4zMzRhOGJlZDRjMTQgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvcmVtb3Rl cHJvYy9NYWtlZmlsZQo+PiArKysgYi9kcml2ZXJzL3JlbW90ZXByb2MvTWFrZWZpbGUKPj4gQEAg LTM1LDMgKzM1LDQgQEAgb2JqLSQoQ09ORklHX1NUX1NMSU1fUkVNT1RFUFJPQykJKz0gc3Rfc2xp bV9ycHJvYy5vCj4+ICAgb2JqLSQoQ09ORklHX1NUTTMyX1JQUk9DKQkJKz0gc3RtMzJfcnByb2Mu bwo+PiAgIG9iai0kKENPTkZJR19USV9LM19EU1BfUkVNT1RFUFJPQykJKz0gdGlfazNfZHNwX3Jl bW90ZXByb2Mubwo+PiAgIG9iai0kKENPTkZJR19USV9LM19SNV9SRU1PVEVQUk9DKQkrPSB0aV9r M19yNV9yZW1vdGVwcm9jLm8KPj4gK29iai0kKENPTkZJR19YTE5YX1I1X1JFTU9URVBST0MpCSs9 IHhsbnhfcjVfcmVtb3RlcHJvYy5vCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3JlbW90ZXByb2Mv eGxueF9yNV9yZW1vdGVwcm9jLmMgYi9kcml2ZXJzL3JlbW90ZXByb2MveGxueF9yNV9yZW1vdGVw cm9jLmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMDAwMDAwLi5jMjE2 N2ZkMzg2OWQKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9kcml2ZXJzL3JlbW90ZXByb2MveGxu eF9yNV9yZW1vdGVwcm9jLmMKPj4gQEAgLTAsMCArMSw5NTkgQEAKPj4gKy8vIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4+ICsvKgo+PiArICogWnlucU1QIFI1IFJlbW90ZSBQcm9j ZXNzb3IgZHJpdmVyCj4+ICsgKgo+PiArICovCj4+ICsKPj4gKyNpbmNsdWRlIDxkdC1iaW5kaW5n cy9wb3dlci94bG54LXp5bnFtcC1wb3dlci5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJl L3hsbngtenlucW1wLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Cj4+ICsjaW5j bHVkZSA8bGludXgva2VybmVsLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvbGlzdC5oPgo+PiArI2lu Y2x1ZGUgPGxpbnV4L21haWxib3hfY2xpZW50Lmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvbWFpbGJv eC96eW5xbXAtaXBpLW1lc3NhZ2UuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPj4g KyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvb2ZfcGxh dGZvcm0uaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9vZl9yZXNlcnZlZF9tZW0uaD4KPj4gKyNpbmNs dWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9yZW1vdGVw cm9jLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgv c3lzZnMuaD4KPj4gKwo+PiArI2luY2x1ZGUgInJlbW90ZXByb2NfaW50ZXJuYWwuaCIKPj4gKwo+ PiArLyogc2V0dGluZ3MgZm9yIFJQVSBjbHVzdGVyIG1vZGUgKi8KPj4gK2VudW0genlucW1wX3I1 X2NsdXN0ZXJfbW9kZSB7Cj4+ICsJU1BMSVRfTU9ERSA9IDAsIC8vIFJQVSBjbHVzdGVyIG1vZGUg d2hlbiBjb3JlcyBydW4gYXMgc2VwYXJhdGUgcHJvY2Vzc29yCj4+ICsJTE9DS1NURVBfTU9ERSA9 IDEsIC8vIGNvcmVzIGV4ZWN1dGUgc2FtZSBjb2RlIGluIGxvY2tzdGVwLGNsay1mb3ItY2xrCj4+ ICsJU0lOR0xFX0NQVV9NT0RFID0gMiwgLy8gY29yZTAgaXMgaGVsZCBpbiByZXNldCBhbmQgb25s eSBjb3JlMSBydW5zCj4+ICt9Owo+PiArCj4+ICsvKioKPj4gKyAqIHN0cnVjdCBtZW1fYmFua19k YXRhIC0gTWVtb3J5IEJhbmsgZGVzY3JpcHRpb24KPj4gKyAqCj4+ICsgKiBAYWRkcjogU3RhcnQg YWRkcmVzcyBvZiBtZW1vcnkgYmFuawo+PiArICogQHNpemU6IFNpemUgb2YgTWVtb3J5IGJhbmsK Pj4gKyAqIEBwbV9kb21haW5faWQ6IFBvd2VyLWRvbWFpbnMgaWQgb2YgbWVtb3J5IGJhbmsgZm9y IGZpcm13YXJlIHRvIHR1cm4gb24vb2ZmCj4+ICsgKiBAYmFua19uYW1lOiBuYW1lIG9mIHRoZSBi YW5rIGZvciByZW1vdGVwcm9jIGZyYW1ld29yawo+PiArICovCj4+ICtzdHJ1Y3QgbWVtX2Jhbmtf ZGF0YSB7Cj4+ICsJcGh5c19hZGRyX3QgYWRkcjsKPj4gKwlzaXplX3Qgc2l6ZTsKPj4gKwllbnVt IHBtX25vZGVfaWQgcG1fZG9tYWluX2lkOwo+PiArCWNoYXIgKmJhbmtfbmFtZTsKPj4gK307Cj4+ ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtX2JhbmtfZGF0YSB6eW5xbXBfdGNtX2Jhbmtz W10gPSB7Cj4+ICsJezB4ZmZlMDAwMDBVTCwgMHgxMDAwMFVMLCBQRF9SNV8wX0FUQ00sICJhdGNt MCJ9LCAvKiBUQ00gNjRLQiBlYWNoICovCj4+ICsJezB4ZmZlMjAwMDBVTCwgMHgxMDAwMFVMLCBQ RF9SNV8wX0JUQ00sICJidGNtMCJ9LAo+PiArCXsweGZmZTkwMDAwVUwsIDB4MTAwMDBVTCwgUERf UjVfMV9BVENNLCAiYXRjbTEifSwKPj4gKwl7MHhmZmViMDAwMFVMLCAweDEwMDAwVUwsIFBEX1I1 XzFfQlRDTSwgImJ0Y20xIn0sCj4+ICt9Owo+PiArCj4+ICsvKioKPj4gKyAqIHN0cnVjdCB6eW5x bXBfcjVfY29yZSAtIFp5bnFNUCBSNSBjb3JlIHN0cnVjdHVyZQo+PiArICoKPj4gKyAqIEBkZXY6 IGRldmljZSBvZiBSUFUgaW5zdGFuY2UKPj4gKyAqIEBucDogZGV2aWNlIG5vZGUgb2YgUlBVIGlu c3RhbmNlCj4+ICsgKiBAdGNtX2JhbmtfY291bnQ6IG51bWJlciBUQ00gYmFua3MgYWNjZXNzaWJs ZSB0byB0aGlzIFJQVQo+PiArICogQHRjbV9iYW5rczogYXJyYXkgb2YgZWFjaCBUQ00gYmFuayBk YXRhCj4+ICsgKiBAcmVzX21lbV9jb3VudDogbnVtYmVyIG9mIFJlc2VydmVkIE1lbW9yeSByZWdp b25zIHBlciBjb3JlCj4+ICsgKiBAcmVzX21lbTogYXJyYXkgb2YgcmVzZXJ2ZWQgbWVtb3J5IHJl Z2lvbnMKPj4gKyAqIEBycHJvYzogcnByb2MgaGFuZGxlCj4+ICsgKiBAcG1fZG9tYWluX2lkOiBS UFUgQ1BVIHBvd2VyIGRvbWFpbiBpZAo+PiArICovCj4+ICtzdHJ1Y3QgenlucW1wX3I1X2NvcmUg ewo+PiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwo+ PiArCWludCB0Y21fYmFua19jb3VudDsKPj4gKwlzdHJ1Y3QgbWVtX2JhbmtfZGF0YSAqdGNtX2Jh bmtzOwo+PiArCWludCByZXNfbWVtX2NvdW50Owo+PiArCXN0cnVjdCByZXNlcnZlZF9tZW0gKnJl c19tZW07Cj4+ICsJc3RydWN0IHJwcm9jICpycHJvYzsKPj4gKwllbnVtIHBtX25vZGVfaWQgcG1f ZG9tYWluX2lkOwo+PiArfTsKPj4gKwo+PiArLyoqCj4+ICsgKiBzdHJ1Y3QgenlucW1wX3I1X2Ns dXN0ZXIgLSBaeW5xTVAgUjUgY2x1c3RlciBzdHJ1Y3R1cmUKPj4gKyAqCj4+ICsgKiBAZGV2OiBy NWYgc3Vic3lzdGVtIGNsdXN0ZXIgZGV2aWNlIG5vZGUKPj4gKyAqIEBtb2RlOiBjbHVzdGVyIG1v ZGUgb2YgdHlwZSB6eW5xbXBfcjVfY2x1c3Rlcl9tb2RlCj4+ICsgKiBAY29yZV9jb3VudDogbnVt YmVyIG9mIHI1IGNvcmVzIHVzZWQgZm9yIHRoaXMgY2x1c3RlciBtb2RlCj4+ICsgKiBAcjVfY29y ZXM6IEFycmF5IG9mIHI1IGNvcmVzIG9mIHR5cGUgc3RydWN0IHp5bnFtcF9yNV9jb3JlCj4+ICsg Ki8KPj4gK3N0cnVjdCB6eW5xbXBfcjVfY2x1c3RlciB7Cj4+ICsJc3RydWN0IGRldmljZSAqZGV2 Owo+PiArCWVudW0gIHp5bnFtcF9yNV9jbHVzdGVyX21vZGUgbW9kZTsKPj4gKwlpbnQgY29yZV9j b3VudDsKPj4gKwlzdHJ1Y3QgenlucW1wX3I1X2NvcmUgKnI1X2NvcmVzOwo+PiArfTsKPj4gKwo+ PiArLyoKPj4gKyAqIHp5bnFtcF9yNV9zZXRfbW9kZSAtIHNldCBSUFUgb3BlcmF0aW9uIG1vZGUK Pj4gKyAqCj4+ICsgKiBzZXQgUlBVIG9wZXJhdGlvbiBtb2RlCj4+ICsgKgo+PiArICogUmV0dXJu OiAwIGZvciBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBmb3IgZmFpbHVyZQo+PiArICovCj4+ICtz dGF0aWMgaW50IHp5bnFtcF9yNV9zZXRfbW9kZShzdHJ1Y3QgenlucW1wX3I1X2NvcmUgKnI1X2Nv cmUsCj4+ICsJCQkgICAgICBlbnVtIHp5bnFtcF9yNV9jbHVzdGVyX21vZGUgcnB1X21vZGUpCj4+ ICt7Cj4+ICsJZW51bSBycHVfdGNtX2NvbWIgdGNtX21vZGU7Cj4+ICsJaW50IHJldCwgcmVnX3Zh bDsKPj4gKwo+PiArCXJlZ192YWwgPSAocnB1X21vZGUgPT0gTE9DS1NURVBfTU9ERSA/IDAgOiAx KTsKPj4gKwo+PiArCXJldCA9IHp5bnFtcF9wbV9zZXRfcnB1X21vZGUocjVfY29yZS0+cG1fZG9t YWluX2lkLCByZWdfdmFsKTsKPj4gKwlpZiAocmV0IDwgMCkgewo+PiArCQlwcl9lcnIoImZhaWxl ZCB0byBzZXQgUlBVIG1vZGVcbiIpOwo+PiArCQlyZXR1cm4gcmV0Owo+PiArCX0KPj4gKwo+PiAr CXRjbV9tb2RlID0gKHJwdV9tb2RlID09IExPQ0tTVEVQX01PREUpID8KPj4gKwkJICAgIFBNX1JQ VV9UQ01fQ09NQiA6IFBNX1JQVV9UQ01fU1BMSVQ7Cj4+ICsJcmV0ID0genlucW1wX3BtX3NldF90 Y21fY29uZmlnKHI1X2NvcmUtPnBtX2RvbWFpbl9pZCwgdGNtX21vZGUpOwo+PiArCWlmIChyZXQg PCAwKQo+PiArCQlwcl9lcnIoImZhaWxlZCB0byBjb25maWd1cmUgVENNXG4iKTsKPj4gKwo+PiAr CXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gKy8qCj4+ICsgKiB6eW5xbXBfcjVfcnByb2Nfc3Rh cnQKPj4gKyAqIEBycHJvYzogc2luZ2xlIFI1IGNvcmUncyBjb3JyZXNwb25kaW5nIHJwcm9jIGlu c3RhbmNlCj4+ICsgKgo+PiArICogU3RhcnQgUjUgQ29yZSBmcm9tIGRlc2lnbmF0ZWQgYm9vdCBh ZGRyZXNzLgo+PiArICoKPj4gKyAqIHJldHVybiAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBub24t emVybyB2YWx1ZSBvbiBmYWlsdXJlCj4+ICsgKi8KPj4gK3N0YXRpYyBpbnQgenlucW1wX3I1X3Jw cm9jX3N0YXJ0KHN0cnVjdCBycHJvYyAqcnByb2MpCj4+ICt7Cj4+ICsJc3RydWN0IHp5bnFtcF9y NV9jb3JlICpyNV9jb3JlID0gcnByb2MtPnByaXY7Cj4+ICsJZW51bSBycHVfYm9vdF9tZW0gYm9v dG1lbTsKPj4gKwlpbnQgcmV0Owo+PiArCj4+ICsJaWYgKCFyNV9jb3JlKSB7Cj4+ICsJCXByX2Vy cigiY2FuJ3QgZ2V0IHI1IGNvcmVcbiIpOwo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwl9Cj4+ ICsKPj4gKwlib290bWVtID0gKHJwcm9jLT5ib290YWRkciA+PSAweEZGRkMwMDAwKSA/Cj4+ICsJ CSAgIFBNX1JQVV9CT09UTUVNX0hJVkVDIDogUE1fUlBVX0JPT1RNRU1fTE9WRUM7Cj4+ICsKPj4g KwlkZXZfZGJnKHI1X2NvcmUtPmRldiwgIlJQVSBib290IGFkZHIgMHglbGx4IGZyb20gJXMuIiwg cnByb2MtPmJvb3RhZGRyLAo+PiArCQlib290bWVtID09IFBNX1JQVV9CT09UTUVNX0hJVkVDID8g Ik9DTSIgOiAiVENNIik7Cj4+ICsKPj4gKwlyZXQgPSB6eW5xbXBfcG1fcmVxdWVzdF93YWtlKHI1 X2NvcmUtPnBtX2RvbWFpbl9pZCwgMSwKPj4gKwkJCQkgICAgIGJvb3RtZW0sIFpZTlFNUF9QTV9S RVFVRVNUX0FDS19OTyk7Cj4+ICsJaWYgKHJldCkKPj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8gc3Rh cnQgUlBVID0gJWRcbiIsIHI1X2NvcmUtPnBtX2RvbWFpbl9pZCk7Cj4+ICsJcmV0dXJuIHJldDsK Pj4gK30KPj4gKwo+PiArLyoKPj4gKyAqIHp5bnFtcF9yNV9ycHJvY19zdG9wCj4+ICsgKiBAcnBy b2M6IHNpbmdsZSBSNSBjb3JlJ3MgY29ycmVzcG9uZGluZyBycHJvYyBpbnN0YW5jZQo+PiArICoK Pj4gKyAqIFBvd2VyIGRvd24gIFI1IENvcmUuCj4+ICsgKgo+PiArICogcmV0dXJuIDAgb24gc3Vj Y2Vzcywgb3RoZXJ3aXNlIG5vbi16ZXJvIHZhbHVlIG9uIGZhaWx1cmUKPj4gKyAqLwo+PiArc3Rh dGljIGludCB6eW5xbXBfcjVfcnByb2Nfc3RvcChzdHJ1Y3QgcnByb2MgKnJwcm9jKQo+PiArewo+ PiArCXN0cnVjdCB6eW5xbXBfcjVfY29yZSAqcjVfY29yZSA9IHJwcm9jLT5wcml2Owo+PiArCWlu dCByZXQ7Cj4+ICsKPj4gKwlyZXQgPSB6eW5xbXBfcG1fZm9yY2VfcHdyZHduKHI1X2NvcmUtPnBt X2RvbWFpbl9pZCwKPj4gKwkJCQkgICAgIFpZTlFNUF9QTV9SRVFVRVNUX0FDS19CTE9DS0lORyk7 Cj4+ICsJaWYgKHJldCkKPj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8gc3RvcCByZW1vdGVwcm9jIFJQ VSAlZFxuIiwgcmV0KTsKPj4gKwo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gKy8qCj4+ ICsgKiB6eW5xbXBfcjVfcnByb2NfbWVtX21hcAo+PiArICogQHJwcm9jOiBzaW5nbGUgUjUgY29y ZSdzIGNvcnJlc3BvbmRpbmcgcnByb2MgaW5zdGFuY2UKPj4gKyAqIEBtZW06IG1lbSBlbnRyeSB0 byBtYXAKPj4gKyAqCj4+ICsgKiBDYWxsYmFjayB0byBtYXAgdmEgZm9yIG1lbW9yeS1yZWdpb24n cyBjYXJ2ZW91dC4KPj4gKyAqCj4+ICsgKiByZXR1cm4gMCBvbiBzdWNjZXNzLCBvdGhlcndpc2Ug bm9uLXplcm8gdmFsdWUgb24gZmFpbHVyZQo+PiArICovCj4+ICtzdGF0aWMgaW50IHp5bnFtcF9y NV9ycHJvY19tZW1fbWFwKHN0cnVjdCBycHJvYyAqcnByb2MsCj4+ICsJCQkJICAgc3RydWN0IHJw cm9jX21lbV9lbnRyeSAqbWVtKQo+PiArewo+PiArCXZvaWQgX19pb21lbSAqdmE7Cj4+ICsKPj4g Kwl2YSA9IGlvcmVtYXBfd2MobWVtLT5kbWEsIG1lbS0+bGVuKTsKPj4gKwlpZiAoSVNfRVJSX09S X05VTEwodmEpKQo+PiArCQlyZXR1cm4gLUVOT01FTTsKPj4gKwo+PiArCW1lbS0+dmEgPSAodm9p ZCAqKXZhOwo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gKy8qCj4+ICsgKiB6eW5x bXBfcjVfcnByb2NfbWVtX3VubWFwCj4+ICsgKiBAcnByb2M6IHNpbmdsZSBSNSBjb3JlJ3MgY29y cmVzcG9uZGluZyBycHJvYyBpbnN0YW5jZQo+PiArICogQG1lbTogbWVtIGVudHJ5IHRvIHVubWFw Cj4+ICsgKgo+PiArICogVW5tYXAgbWVtb3J5LXJlZ2lvbiBjYXJ2ZW91dAo+PiArICoKPj4gKyAq IHJldHVybiAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBub24temVybyB2YWx1ZSBvbiBmYWlsdXJl Cj4+ICsgKi8KPj4gK3N0YXRpYyBpbnQgenlucW1wX3I1X3Jwcm9jX21lbV91bm1hcChzdHJ1Y3Qg cnByb2MgKnJwcm9jLAo+PiArCQkJCSAgICAgc3RydWN0IHJwcm9jX21lbV9lbnRyeSAqbWVtKQo+ PiArewo+PiArCWlvdW5tYXAoKHZvaWQgX19pb21lbSAqKW1lbS0+dmEpOwo+PiArCXJldHVybiAw Owo+PiArfQo+PiArCj4+ICsvKgo+PiArICogYWRkX21lbV9yZWdpb25zCj4+ICsgKiBAcnByb2M6 IHNpbmdsZSBSNSBjb3JlJ3MgY29ycmVzcG9uZGluZyBycHJvYyBpbnN0YW5jZQo+PiArICoKPj4g KyAqIENvbnN0cnVjdCBycHJvYyBtZW0gY2FydmVvdXRzIGZyb20gY2FydmVvdXQgcHJvdmlkZWQg aW4KPj4gKyAqIG1lbW9yeS1yZWdpb24gcHJvcGVydHkKPj4gKyAqCj4+ICsgKiByZXR1cm4gMCBv biBzdWNjZXNzLCBvdGhlcndpc2Ugbm9uLXplcm8gdmFsdWUgb24gZmFpbHVyZQo+PiArICovCj4+ ICtzdGF0aWMgaW50IGFkZF9tZW1fcmVnaW9ucyhzdHJ1Y3QgcnByb2MgKnJwcm9jKQo+PiArewo+ PiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPj4gKwlzdHJ1Y3QgcnByb2NfbWVtX2VudHJ5ICptZW07 Cj4+ICsJc3RydWN0IHJlc2VydmVkX21lbSAqcm1lbTsKPj4gKwlzdHJ1Y3QgenlucW1wX3I1X2Nv cmUgKnI1X2NvcmU7Cj4+ICsJaW50IGk7Cj4+ICsKPj4gKwlyNV9jb3JlID0gcnByb2MtPnByaXY7 Cj4+ICsJZGV2ID0gcjVfY29yZS0+ZGV2Owo+PiArCj4+ICsJLyogUmVnaXN0ZXIgYXNzb2NpYXRl ZCByZXNlcnZlZCBtZW1vcnkgcmVnaW9ucyAqLwo+PiArCWZvciAoaSA9IDA7IGkgPCByNV9jb3Jl LT5yZXNfbWVtX2NvdW50OyBpKyspIHsKPj4gKwkJcm1lbSA9ICZyNV9jb3JlLT5yZXNfbWVtW2ld Owo+PiArCQltZW0gPSBycHJvY19tZW1fZW50cnlfaW5pdChkZXYsIE5VTEwsCj4+ICsJCQkJCSAg IChkbWFfYWRkcl90KXJtZW0tPmJhc2UsCj4+ICsJCQkJCSAgIHJtZW0tPnNpemUsIHJtZW0tPmJh c2UsCj4+ICsJCQkJCSAgIHp5bnFtcF9yNV9ycHJvY19tZW1fbWFwLAo+PiArCQkJCQkgICB6eW5x bXBfcjVfcnByb2NfbWVtX3VubWFwLAo+PiArCQkJCQkgICBybWVtLT5uYW1lKTsKPj4gKwkJaWYg KElTX0VSUl9PUl9OVUxMKG1lbSkpCj4+ICsJCQlyZXR1cm4gLUVOT01FTTsKPj4gKwo+PiArCQly cHJvY19hZGRfY2FydmVvdXQocnByb2MsIG1lbSk7Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIDA7 Cj4+ICt9Cj4+ICsKPj4gKy8qCj4+ICsgKiB6eW5xbXBfcjVfcnByb2NfbWVtX3VubWFwCj4+ICsg KiBAcnByb2M6IHNpbmdsZSBSNSBjb3JlJ3MgY29ycmVzcG9uZGluZyBycHJvYyBpbnN0YW5jZQo+ PiArICogQG1lbTogbWVtIGVudHJ5IHRvIHVubWFwCj4+ICsgKgo+PiArICogVW5tYXAgVENNIGJh bmtzIHdoZW4gcG93ZXJpbmcgZG93biBSNSBjb3JlLgo+PiArICoKPj4gKyAqIHJldHVybiAwIG9u IHN1Y2Nlc3MsIG90aGVyd2lzZSBub24temVybyB2YWx1ZSBvbiBmYWlsdXJlCj4+ICsgKi8KPj4g K3N0YXRpYyBpbnQgdGNtX21lbV91bm1hcChzdHJ1Y3QgcnByb2MgKnJwcm9jLCBzdHJ1Y3QgcnBy b2NfbWVtX2VudHJ5ICptZW0pCj4+ICt7Cj4+ICsJc3RydWN0IHp5bnFtcF9yNV9jb3JlICpyNV9j b3JlOwo+PiArCWludCBpOwo+PiArCWVudW0gcG1fbm9kZV9pZCBwbV9kb21haW5faWQ7Cj4+ICsK Pj4gKwlyNV9jb3JlID0gcnByb2MtPnByaXY7Cj4+ICsJaWYgKCFyNV9jb3JlKSB7Cj4+ICsJCXBy X2VycigicjUgY29yZSBpcyBub3QgYXZhaWxhYmxlXG4iKTsKPj4gKwkJcmV0dXJuIC1FSU5WQUw7 Cj4+ICsJfQo+PiArCj4+ICsJaW91bm1hcCgodm9pZCBfX2lvbWVtICopbWVtLT52YSk7Cj4+ICsK Pj4gKwlmb3IgKGkgPSAwOyBpIDwgcjVfY29yZS0+dGNtX2JhbmtfY291bnQ7IGkrKykgewo+PiAr CQlwbV9kb21haW5faWQgPSByNV9jb3JlLT50Y21fYmFua3NbaV0ucG1fZG9tYWluX2lkOwo+PiAr CQlpZiAoenlucW1wX3BtX3JlbGVhc2Vfbm9kZShwbV9kb21haW5faWQpKQo+PiArCQkJcHJfd2Fy bigiY2FuJ3QgdHVybiBvZmYgVENNIGJhbmsgJWQiLCBwbV9kb21haW5faWQpOwo+PiArCX0KPj4g Kwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICsvKgo+PiArICogdGNtX21lbV9tYXAKPj4g KyAqIEBycHJvYzogc2luZ2xlIFI1IGNvcmUncyBjb3JyZXNwb25kaW5nIHJwcm9jIGluc3RhbmNl Cj4+ICsgKiBAbWVtOiBtZW0gZW50cnkgdG8gaW5pdGlhbGl6ZSB0aGUgdmEgYW5kIGRhIGZpZWxk cyBvZgo+PiArICoKPj4gKyAqIEdpdmVuIFRDTSBiYW5rIGVudHJ5LCB0aGlzIGNhbGxiYWNrIHdp bGwgc2V0IGRldmljZSBhZGRyZXNzIGZvciBSNQo+PiArICogcnVubmluZyBvbiBUQ00gYW5kIGFs c28gc2V0dXAgdmlydHVhbCBhZGRyZXNzIGZvciBUQ00gYmFuawo+PiArICogcmVtb3RlcHJvYyBj YXJ2ZW91dC4KPj4gKyAqCj4+ICsgKiByZXR1cm4gMCBvbiBzdWNjZXNzLCBvdGhlcndpc2Ugbm9u LXplcm8gdmFsdWUgb24gZmFpbHVyZQo+PiArICovCj4+ICtzdGF0aWMgaW50IHRjbV9tZW1fbWFw KHN0cnVjdCBycHJvYyAqcnByb2MsCj4+ICsJCQkgc3RydWN0IHJwcm9jX21lbV9lbnRyeSAqbWVt KQo+PiArewo+PiArCXZvaWQgX19pb21lbSAqdmE7Cj4+ICsKPj4gKwl2YSA9IGlvcmVtYXBfd2Mo bWVtLT5kbWEsIG1lbS0+bGVuKTsKPj4gKwlpZiAoSVNfRVJSX09SX05VTEwodmEpKQo+PiArCQly ZXR1cm4gLUVOT01FTTsKPj4gKwo+PiArCS8qIFVwZGF0ZSBtZW1vcnkgZW50cnkgdmEgKi8KPj4g KwltZW0tPnZhID0gKHZvaWQgKil2YTsKPj4gKwo+PiArCS8qIGNsZWFyIFRDTXMgKi8KPj4gKwlt ZW1zZXRfaW8odmEsIDAsIG1lbS0+bGVuKTsKPj4gKwo+PiArCS8qCj4+ICsJICogVGhlIFI1cyBl eHBlY3QgdGhlaXIgVENNIGJhbmtzIHRvIGJlIGF0IGFkZHJlc3MgMHgwIGFuZCAweDIwMDAsCj4+ ICsJICogd2hpbGUgb24gdGhlIExpbnV4IHNpZGUgdGhleSBhcmUgYXQgMHhmZmV4eHh4eC4KPj4g KwkgKgo+PiArCSAqIFplcm8gb3V0IHRoZSBoaWdoIDEyIGJpdHMgb2YgdGhlIGFkZHJlc3MuIFRo aXMgd2lsbCBnaXZlCj4+ICsJICogZXhwZWN0ZWQgdmFsdWVzIGZvciBUQ00gQmFua3MgMEEgYW5k IDBCICgweDAgYW5kIDB4MjAwMDApLgo+PiArCSAqLwo+PiArCW1lbS0+ZGEgJj0gMHgwMDBmZmZm ZjsKPj4gKwo+PiArCS8qCj4+ICsJICogVENNIEJhbmtzIDFBIGFuZCAxQiBzdGlsbCBoYXZlIHRv IGJlIHRyYW5zbGF0ZWQuCj4+ICsJICoKPj4gKwkgKiBCZWxvdyBoYW5kbGUgdGhlc2UgdHdvIGJh bmtzJyBhYnNvbHV0ZSBhZGRyZXNzZXMgKDB4ZmZlOTAwMDAgYW5kCj4+ICsJICogMHhmZmViMDAw MCkgYW5kIGNvbnZlcnQgdG8gdGhlIGV4cGVjdGVkIHJlbGF0aXZlIGFkZHJlc3Nlcwo+PiArCSAq ICgweDAgYW5kIDB4MjAwMDApLgo+PiArCSAqLwo+PiArCWlmIChtZW0tPmRhID09IDB4OTAwMDAg fHwgbWVtLT5kYSA9PSAweEIwMDAwKQo+PiArCQltZW0tPmRhIC09IDB4OTAwMDA7Cj4+ICsKPj4g KwkvKiBpZiB0cmFuc2xhdGVkIFRDTSBiYW5rIGFkZHJlc3MgaXMgbm90IHZhbGlkIHJlcG9ydCBl cnJvciAqLwo+PiArCWlmIChtZW0tPmRhICE9IDB4MCAmJiBtZW0tPmRhICE9IDB4MjAwMDApIHsK Pj4gKwkJZGV2X2VycigmcnByb2MtPmRldiwgImludmFsaWQgVENNIGFkZHJlc3M6ICV4XG4iLCBt ZW0tPmRhKTsKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJfQo+PiArCXJldHVybiAwOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgaW50IGFkZF90Y21fY2FydmVvdXRfc3BsaXRfbW9kZShzdHJ1Y3Qg cnByb2MgKnJwcm9jKQo+PiArewo+PiArCWludCBpLCBudW1fYmFua3MsIHJldDsKPj4gKwlzdHJ1 Y3QgcnByb2NfbWVtX2VudHJ5ICptZW07Cj4+ICsJZW51bSBwbV9ub2RlX2lkIHBtX2RvbWFpbl9p ZDsKPj4gKwl1MzIgYmFua19hZGRyOwo+PiArCXNpemVfdCBiYW5rX3NpemUgPSAwOwo+PiArCWNo YXIgKmJhbmtfbmFtZTsKPj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4+ICsJc3RydWN0IHp5bnFt cF9yNV9jb3JlICpyNV9jb3JlOwo+PiArCj4+ICsJcjVfY29yZSA9IChzdHJ1Y3QgenlucW1wX3I1 X2NvcmUgKilycHJvYy0+cHJpdjsKPj4gKwlpZiAoIXI1X2NvcmUpCj4+ICsJCXJldHVybiAtRUlO VkFMOwo+PiArCj4+ICsJZGV2ID0gcjVfY29yZS0+ZGV2Owo+PiArCj4+ICsJLyogZ28gdGhyb3Vn aCB6eW5xbXAgYmFua3MgZm9yIHI1IG5vZGUgKi8KPj4gKwludW1fYmFua3MgPSByNV9jb3JlLT50 Y21fYmFua19jb3VudDsKPj4gKwlpZiAobnVtX2JhbmtzIDw9IDApIHsKPj4gKwkJZGV2X2Vycihk ZXYsICJuZWVkIHRvIHNwZWNpZnkgVENNIGJhbmtzXG4iKTsKPj4gKwkJcmV0dXJuIC1FSU5WQUw7 Cj4+ICsJfQo+PiArCj4+ICsJZm9yIChpID0gMDsgaSA8IG51bV9iYW5rczsgaSsrKSB7Cj4+ICsJ CWJhbmtfYWRkciA9ICh1MzIpcjVfY29yZS0+dGNtX2JhbmtzW2ldLmFkZHI7Cj4+ICsJCWJhbmtf bmFtZSA9IHI1X2NvcmUtPnRjbV9iYW5rc1tpXS5iYW5rX25hbWU7Cj4+ICsJCWJhbmtfc2l6ZSA9 IHI1X2NvcmUtPnRjbV9iYW5rc1tpXS5zaXplOwo+PiArCQlwbV9kb21haW5faWQgPSByNV9jb3Jl LT50Y21fYmFua3NbaV0ucG1fZG9tYWluX2lkOwo+PiArCj4+ICsJCXJldCA9IHp5bnFtcF9wbV9y ZXF1ZXN0X25vZGUocG1fZG9tYWluX2lkLAo+PiArCQkJCQkgICAgIFpZTlFNUF9QTV9DQVBBQklM SVRZX0FDQ0VTUywgMCwKPj4gKwkJCQkJICAgICBaWU5RTVBfUE1fUkVRVUVTVF9BQ0tfQkxPQ0tJ TkcpOwo+PiArCQlpZiAocmV0IDwgMCkgewo+PiArCQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8g dHVybiBvbiBUQ00gJWQiLCBwbV9kb21haW5faWQpOwo+PiArCQkJcmV0dXJuIHJldDsKPj4gKwkJ fQo+PiArCj4+ICsJCWRldl9kYmcoZGV2LCAiVENNIGNhcnZlb3V0IHNwbGl0IG1vZGUgJXMgYWRk cj0leCwgc2l6ZT0weCVseCIsCj4+ICsJCQliYW5rX25hbWUsIGJhbmtfYWRkciwgYmFua19zaXpl KTsKPj4gKwo+PiArCQkvKiBhZGQgY2FydmVvdXQgKi8KPj4gKwkJbWVtID0gcnByb2NfbWVtX2Vu dHJ5X2luaXQoZGV2LCBOVUxMLCBiYW5rX2FkZHIsCj4+ICsJCQkJCSAgIGJhbmtfc2l6ZSwgYmFu a19hZGRyLAo+PiArCQkJCQkgICB0Y21fbWVtX21hcCwgdGNtX21lbV91bm1hcCwKPj4gKwkJCQkJ ICAgYmFua19uYW1lKTsKPj4gKwkJaWYgKElTX0VSUl9PUl9OVUxMKG1lbSkpIHsKPj4gKwkJCS8q IFR1cm4gb2ZmIGFsbCBUQ00gYmFua3MgdHVybmVkIG9uIGJlZm9yZSAqLwo+PiArCQkJZG8gewo+ PiArCQkJCXBtX2RvbWFpbl9pZCA9IHI1X2NvcmUtPnRjbV9iYW5rc1tpXS5wbV9kb21haW5faWQ7 Cj4+ICsJCQkJcmV0ID0genlucW1wX3BtX3JlbGVhc2Vfbm9kZSgodTMyKXBtX2RvbWFpbl9pZCk7 Cj4+ICsJCQkJaWYgKHJldCkKPj4gKwkJCQkJZGV2X3dhcm4oZGV2LAo+PiArCQkJCQkJICJmYWls IHRvIHJlbGVhc2Ugbm9kZTogJXgsICV4XG4iLAo+PiArCQkJCQkJICh1MzIpcG1fZG9tYWluX2lk LCByZXQpOwo+PiArCQkJfSB3aGlsZSAoaS0tKTsKPj4gKwkJCXJldHVybiAtRU5PTUVNOwo+PiAr CQl9Cj4+ICsKPj4gKwkJcnByb2NfYWRkX2NhcnZlb3V0KHJwcm9jLCBtZW0pOwo+PiArCX0KPj4g Kwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGFkZF90Y21fY2FydmVv dXRfbG9ja3N0ZXBfbW9kZShzdHJ1Y3QgcnByb2MgKnJwcm9jKQo+PiArewo+PiArCWludCBpLCBu dW1fYmFua3MsIHJldDsKPj4gKwlzdHJ1Y3QgcnByb2NfbWVtX2VudHJ5ICptZW07Cj4+ICsJZW51 bSBwbV9ub2RlX2lkIHBtX2RvbWFpbl9pZDsKPj4gKwl1MzIgYmFua19hZGRyOwo+PiArCXNpemVf dCBiYW5rX3NpemUgPSAwOwo+PiArCWNoYXIgKmJhbmtfbmFtZTsKPj4gKwlzdHJ1Y3QgZGV2aWNl ICpkZXY7Cj4+ICsJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGFyZW50X3BkZXY7Cj4+ICsJc3Ry dWN0IHp5bnFtcF9yNV9jbHVzdGVyICpjbHVzdGVyOwo+PiArCXN0cnVjdCB6eW5xbXBfcjVfY29y ZSAqcjVfY29yZTsKPj4gKwo+PiArCXI1X2NvcmUgPSAoc3RydWN0IHp5bnFtcF9yNV9jb3JlICop cnByb2MtPnByaXY7Cj4+ICsJaWYgKCFyNV9jb3JlKQo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4g Kwo+PiArCWRldiA9IHI1X2NvcmUtPmRldjsKPj4gKwlpZiAoIWRldikgewo+PiArCQlwcl9lcnIo InI1IGNvcmUgZGV2aWNlIHVuYXZhaWxhYmxlXG4iKTsKPj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4+ ICsJfQo+PiArCj4+ICsJLyogZ28gdGhyb3VnaCB6eW5xbXAgYmFua3MgZm9yIHI1IG5vZGUgKi8K Pj4gKwludW1fYmFua3MgPSByNV9jb3JlLT50Y21fYmFua19jb3VudDsKPj4gKwlpZiAobnVtX2Jh bmtzIDw9IDApIHsKPj4gKwkJZGV2X2VycihkZXYsICJuZWVkIHRvIHNwZWNpZnkgVENNIGJhbmtz XG4iKTsKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJfQo+PiArCj4+ICsJYmFua19hZGRyID0g KHUzMilyNV9jb3JlLT50Y21fYmFua3NbMF0uYWRkcjsKPj4gKwliYW5rX25hbWUgPSByNV9jb3Jl LT50Y21fYmFua3NbMF0uYmFua19uYW1lOwo+PiArCWZvciAoaSA9IDA7IGkgPCBudW1fYmFua3M7 IGkrKykgewo+PiArCQliYW5rX3NpemUgKz0gcjVfY29yZS0+dGNtX2JhbmtzW2ldLnNpemU7Cj4+ ICsJCXBtX2RvbWFpbl9pZCA9IHI1X2NvcmUtPnRjbV9iYW5rc1tpXS5wbV9kb21haW5faWQ7Cj4+ ICsKPj4gKwkJcmV0ID0genlucW1wX3BtX3JlcXVlc3Rfbm9kZShwbV9kb21haW5faWQsCj4+ICsJ CQkJCSAgICAgWllOUU1QX1BNX0NBUEFCSUxJVFlfQUNDRVNTLCAwLAo+PiArCQkJCQkgICAgIFpZ TlFNUF9QTV9SRVFVRVNUX0FDS19CTE9DS0lORyk7Cj4+ICsJCWlmIChyZXQgPCAwKSB7Cj4+ICsJ CQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byB0dXJuIG9uIFRDTSAlZCIsIHBtX2RvbWFpbl9pZCk7 Cj4+ICsJCQlyZXR1cm4gcmV0Owo+PiArCQl9Cj4+ICsJfQo+PiArCj4+ICsJZGV2X2RiZyhkZXYs ICJUQ00gYWRkIGNhcnZlb3V0IGxvY2tzdGVwIG1vZGUgJXMgYWRkcj0weCV4LCBzaXplPTB4JWx4 IiwKPj4gKwkJYmFua19uYW1lLCBiYW5rX2FkZHIsIGJhbmtfc2l6ZSk7Cj4+ICsKPj4gKwkvKiBh ZGQgY2FydmVvdXQgKi8KPj4gKwltZW0gPSBycHJvY19tZW1fZW50cnlfaW5pdChkZXYsIE5VTEws IGJhbmtfYWRkciwKPj4gKwkJCQkgICBiYW5rX3NpemUsIGJhbmtfYWRkciwKPj4gKwkJCQkgICB0 Y21fbWVtX21hcCwgdGNtX21lbV91bm1hcCwKPj4gKwkJCQkgICBiYW5rX25hbWUpOwo+PiArCWlm IChJU19FUlJfT1JfTlVMTChtZW0pKSB7Cj4+ICsJCWZvciAoaSA9IDA7IGkgPCBudW1fYmFua3M7 IGkrKykgewo+PiArCQkJcG1fZG9tYWluX2lkID0gcjVfY29yZS0+dGNtX2JhbmtzW2ldLnBtX2Rv bWFpbl9pZDsKPj4gKwkJCXJldCA9IHp5bnFtcF9wbV9yZWxlYXNlX25vZGUoKHUzMilwbV9kb21h aW5faWQpOwo+PiArCQkJaWYgKHJldCkKPj4gKwkJCQlkZXZfd2FybihkZXYsCj4+ICsJCQkJCSAi ZmFpbCB0byByZWxlYXNlIG5vZGU6ICV4IHJldDogJXhcbiIsCj4+ICsJCQkJCSAodTMyKXBtX2Rv bWFpbl9pZCwgcmV0KTsKPj4gKwkJfQo+PiArCQlyZXR1cm4gLUVOT01FTTsKPj4gKwl9Cj4+ICsK Pj4gKwlycHJvY19hZGRfY2FydmVvdXQocnByb2MsIG1lbSk7Cj4+ICsKPj4gKwlyZXR1cm4gMDsK Pj4gK30KPj4gKwo+PiArLyoKPj4gKyAqIGFkZF90Y21fYmFua3MoKQo+PiArICogQHJwcm9jOiBz aW5nbGUgUjUgY29yZSdzIGNvcnJlc3BvbmRpbmcgcnByb2MgaW5zdGFuY2UKPj4gKyAqCj4+ICsg KiBHaXZlbiBSNSBub2RlIGluIHJlbW90ZXByb2MgaW5zdGFuY2UKPj4gKyAqIGFsbG9jYXRlIHJl bW90ZXByb2MgY2FydmVvdXQgZm9yIFRDTSBtZW1vcnkKPj4gKyAqIG5lZWRlZCBmb3IgZmlybXdh cmUgdG8gYmUgbG9hZGVkCj4+ICsgKgo+PiArICogcmV0dXJuIDAgb24gc3VjY2Vzcywgb3RoZXJ3 aXNlIG5vbi16ZXJvIHZhbHVlIG9uIGZhaWx1cmUKPj4gKyAqLwo+PiArc3RhdGljIGludCBhZGRf dGNtX2JhbmtzKHN0cnVjdCBycHJvYyAqcnByb2MpCj4+ICt7Cj4+ICsJc3RydWN0IGRldmljZSAq ZGV2Owo+PiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBhcmVudF9wZGV2Owo+PiArCXN0cnVj dCB6eW5xbXBfcjVfY2x1c3RlciAqY2x1c3RlcjsKPj4gKwlzdHJ1Y3QgenlucW1wX3I1X2NvcmUg KnI1X2NvcmU7Cj4+ICsKPj4gKwlyNV9jb3JlID0gKHN0cnVjdCB6eW5xbXBfcjVfY29yZSAqKXJw cm9jLT5wcml2Owo+PiArCWlmICghcjVfY29yZSkKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsK Pj4gKwlkZXYgPSByNV9jb3JlLT5kZXY7Cj4+ICsJaWYgKCFkZXYpIHsKPj4gKwkJcHJfZXJyKCJy NSBjb3JlIGRldmljZSB1bmF2YWlsYWJsZVxuIik7Cj4+ICsJCXJldHVybiAtRU5PREVWOwo+PiAr CX0KPj4gKwo+PiArCXBhcmVudF9wZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldi0+cGFyZW50 KTsKPj4gKwlpZiAoIXBhcmVudF9wZGV2KSB7Cj4+ICsJCWRldl9lcnIoZGV2LCAicGFyZW50IHBs YXRmb3JtIGRldiB1bmF2YWlsYWJsZVxuIik7Cj4+ICsJCXJldHVybiAtRU5PREVWOwo+PiArCX0K Pj4gKwo+PiArCWNsdXN0ZXIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwYXJlbnRfcGRldik7Cj4+ ICsJaWYgKCFjbHVzdGVyKSB7Cj4+ICsJCWRldl9lcnIoJnBhcmVudF9wZGV2LT5kZXYsICJJbnZh bGlkIGRyaXZlciBkYXRhXG4iKTsKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJfQo+PiArCj4+ ICsJaWYgKGNsdXN0ZXItPm1vZGUgPT0gU1BMSVRfTU9ERSkKPj4gKwkJcmV0dXJuIGFkZF90Y21f Y2FydmVvdXRfc3BsaXRfbW9kZShycHJvYyk7Cj4+ICsJZWxzZSBpZiAoY2x1c3Rlci0+bW9kZSA9 PSBMT0NLU1RFUF9NT0RFKQo+PiArCQlyZXR1cm4gYWRkX3RjbV9jYXJ2ZW91dF9sb2Nrc3RlcF9t b2RlKHJwcm9jKTsKPj4gKwo+PiArCWRldl9lcnIoY2x1c3Rlci0+ZGV2LCAiaW52YWxpZCBjbHVz dGVyIG1vZGVcbiIpOwo+PiArCXJldHVybiAtRUlOVkFMOwo+PiArfQo+PiArCj4+ICsvKgo+PiAr ICogenlucW1wX3I1X3BhcnNlX2Z3KCkKPj4gKyAqIEBycHJvYzogc2luZ2xlIFI1IGNvcmUncyBj b3JyZXNwb25kaW5nIHJwcm9jIGluc3RhbmNlCj4+ICsgKiBAZnc6IHB0ciB0byBmaXJtd2FyZSB0 byBiZSBsb2FkZWQgb250byByNSBjb3JlCj4+ICsgKgo+PiArICogV2hlbiBsb2FkaW5nIGZpcm13 YXJlLCBlbnN1cmUgdGhlIG5lY2Vzc2FyeSBjYXJ2ZW91dHMgYXJlIGluIHJlbW90ZXByb2MKPj4g KyAqCj4+ICsgKiByZXR1cm4gMCBvbiBzdWNjZXNzLCBvdGhlcndpc2Ugbm9uLXplcm8gdmFsdWUg b24gZmFpbHVyZQo+PiArICovCj4+ICtzdGF0aWMgaW50IHp5bnFtcF9yNV9wYXJzZV9mdyhzdHJ1 Y3QgcnByb2MgKnJwcm9jLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KQo+PiArewo+PiArCWlu dCByZXQ7Cj4+ICsJc3RydWN0IHp5bnFtcF9yNV9jb3JlICpyNV9jb3JlOwo+PiArCXN0cnVjdCBk ZXZpY2UgKmRldjsKPj4gKwo+PiArCXI1X2NvcmUgPSBycHJvYy0+cHJpdjsKPj4gKwlpZiAoIXI1 X2NvcmUpIHsKPj4gKwkJZGV2X2VycigmcnByb2MtPmRldiwgInI1IGNvcmUgbm90IGF2YWlsYWJs ZVxuIik7Cj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiArCX0KPj4gKwo+PiArCWRldiA9IHI1X2Nv cmUtPmRldjsKPj4gKwo+PiArCXJldCA9IGFkZF90Y21fYmFua3MocnByb2MpOwo+PiArCWlmIChy ZXQpIHsKPj4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IFRDTSBiYW5rcywgZXJyICVk XG4iLCByZXQpOwo+PiArCQlyZXR1cm4gcmV0Owo+PiArCX0KPj4gKwo+PiArCXJldCA9IGFkZF9t ZW1fcmVnaW9ucyhycHJvYyk7Cj4+ICsJaWYgKHJldCkKPj4gKwkJZGV2X3dhcm4oZGV2LCAiZmFp bGVkIHRvIGdldCByZXNlcnZlIG1lbSByZWdpb25zICVkXG4iLCByZXQpOwo+PiArCj4+ICsJcmV0 ID0gcnByb2NfZWxmX2xvYWRfcnNjX3RhYmxlKHJwcm9jLCBmdyk7Cj4+ICsJaWYgKHJldCA9PSAt RUlOVkFMKSB7Cj4+ICsJCS8qCj4+ICsJCSAqIHJlc291cmNlIHRhYmxlIG9ubHkgcmVxdWlyZWQg Zm9yIElQQy4KPj4gKwkJICogaWYgbm90IHByZXNlbnQsIHRoaXMgaXMgbm90IG5lY2Vzc2FyaWx5 IGFuIGVycm9yOwo+PiArCQkgKiBmb3IgZXhhbXBsZSwgbG9hZGluZyByNSBoZWxsbyB3b3JsZCBh cHBsaWNhdGlvbgo+PiArCQkgKiBzbyBzaW1wbHkgaW5mb3JtIHVzZXIgYW5kIGtlZXAgZ29pbmcu Cj4+ICsJCSAqLwo+PiArCQlkZXZfaW5mbygmcnByb2MtPmRldiwgIm5vIHJlc291cmNlIHRhYmxl IGZvdW5kLlxuIik7Cj4+ICsJCXJldCA9IDA7Cj4+ICsJfQo+PiArCXJldHVybiByZXQ7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgcnByb2Nfb3BzIHp5bnFtcF9yNV9ycHJvY19vcHMgPSB7 Cj4+ICsJLnN0YXJ0CQk9IHp5bnFtcF9yNV9ycHJvY19zdGFydCwKPj4gKwkuc3RvcAkJPSB6eW5x bXBfcjVfcnByb2Nfc3RvcCwKPj4gKwkubG9hZAkJPSBycHJvY19lbGZfbG9hZF9zZWdtZW50cywK Pj4gKwkucGFyc2VfZncJPSB6eW5xbXBfcjVfcGFyc2VfZncsCj4+ICsJLmZpbmRfbG9hZGVkX3Jz Y190YWJsZSA9IHJwcm9jX2VsZl9maW5kX2xvYWRlZF9yc2NfdGFibGUsCj4+ICsJLnNhbml0eV9j aGVjawk9IHJwcm9jX2VsZl9zYW5pdHlfY2hlY2ssCj4+ICsJLmdldF9ib290X2FkZHIJPSBycHJv Y19lbGZfZ2V0X2Jvb3RfYWRkciwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHp5bnFtcF9y NV9wcmludF9kdF9ub2RlX2luZm8oc3RydWN0IHp5bnFtcF9yNV9jbHVzdGVyICpjbHVzdGVyKQo+ PiArewo+PiArCWludCBpLCBqLCBrOwo+PiArCXN0cnVjdCB6eW5xbXBfcjVfY29yZSAqcjVfY29y ZTsKPj4gKwo+PiArCWRldl9kYmcoY2x1c3Rlci0+ZGV2LCAiUHJpbnRpbmcgZHQgbm9kZSBpbmZv XG4iKTsKPj4gKwo+PiArCXByX2RlYnVnKCJjbHVzdGVyIG1vZGUgPSAlZFxuIiwgY2x1c3Rlci0+ bW9kZSk7Cj4+ICsJcHJfZGVidWcoInI1ZiBjbHVzdGVyIGluICVzIG1vZGVcbiIsIChjbHVzdGVy LT5tb2RlID09IDApID8gIlNQTElUIiA6Cj4+ICsJCSBjbHVzdGVyLT5tb2RlID09IDEgPyAiTE9D S1NURVAiIDogIlNJTkdMRV9DUFUiKTsKPj4gKwlwcl9kZWJ1ZygicjVmIG51bSBjb3JlcyA9ICVk XG4iLCBjbHVzdGVyLT5jb3JlX2NvdW50KTsKPj4gKwo+PiArCWZvciAoaSA9IDA7IGkgPCBjbHVz dGVyLT5jb3JlX2NvdW50OyBpKyspIHsKPj4gKwkJcjVfY29yZSA9ICZjbHVzdGVyLT5yNV9jb3Jl c1tpXTsKPj4gKwkJaWYgKCFyNV9jb3JlKSB7Cj4+ICsJCQlwcl9lcnIoImNhbid0IGdldCByNV9j b3JlXG4iKTsKPj4gKwkJCWNvbnRpbnVlOwo+PiArCQl9Cj4+ICsKPj4gKwkJcHJfZGVidWcoInI1 IGNvcmUgJWQgbm9kZXNcbiIsIGkpOwo+PiArCQlwcl9kZWJ1ZygiVENNIGJhbmtzID0gJWRcbiIs IHI1X2NvcmUtPnRjbV9iYW5rX2NvdW50KTsKPj4gKwkJZm9yIChrID0gMDsgayA8IHI1X2NvcmUt PnRjbV9iYW5rX2NvdW50OyBrKyspIHsKPj4gKwkJCXByX2RlYnVnKCJ0Y20gJWQgYWRkcj0weCVs bHggc2l6ZT0weCVseCwgcG1faWQ9JWQsICVzXG4iLAo+PiArCQkJCSBrLCByNV9jb3JlLT50Y21f YmFua3Nba10uYWRkciwKPj4gKwkJCQkgcjVfY29yZS0+dGNtX2JhbmtzW2tdLnNpemUsCj4+ICsJ CQkJIHI1X2NvcmUtPnRjbV9iYW5rc1trXS5wbV9kb21haW5faWQsCj4+ICsJCQkJIHI1X2NvcmUt PnRjbV9iYW5rc1trXS5iYW5rX25hbWUpOwo+PiArCQl9Cj4+ICsKPj4gKwkJcHJfZGVidWcoInJl c2VydmUgbWVtIHJlZ2lvbnMgPSAlZFxuIiwgcjVfY29yZS0+cmVzX21lbV9jb3VudCk7Cj4+ICsK Pj4gKwkJZm9yIChqID0gMDsgaiA8IHI1X2NvcmUtPnJlc19tZW1fY291bnQ7IGorKykgewo+PiAr CQkJcHJfZGVidWcoIm1lbSAlZCBhZGRyPTB4JWxseCwgc2l6ZT0weCVsbHgsIG5hbWU9JXNcbiIs Cj4+ICsJCQkJIGosIHI1X2NvcmUtPnJlc19tZW1bal0uYmFzZSwKPj4gKwkJCQkgcjVfY29yZS0+ cmVzX21lbVtqXS5zaXplLAo+PiArCQkJCSByNV9jb3JlLT5yZXNfbWVtW2pdLm5hbWUpOwo+PiAr CQl9Cj4+ICsJfQo+PiArfQo+PiArCj4+ICsvKioKPj4gKyAqIHp5bnFtcF9yNV9hZGRfcnByb2Nf Y29yZSgpIC0gUHJvYmVzIFp5bnFNUCBSNSBwcm9jZXNzb3IgZGV2aWNlIG5vZGUKPj4gKyAqCQkg ICAgICAgdGhpcyBpcyBjYWxsZWQgZm9yIGVhY2ggaW5kaXZpZHVhbCBSNSBjb3JlIHRvCj4+ICsg KgkJICAgICAgIHNldCB1cCBtYWlsYm94LCBYaWxpbnggcGxhdGZvcm0gbWFuYWdlciB1bmlxdWUg SUQsCj4+ICsgKgkJICAgICAgIGFkZCB0byBycHJvYyBjb3JlCj4+ICsgKgo+PiArICogQHI1X2Nv cmU6IHp5bnFtcF9yNV9jb3JlIHI1IGNvcmUgb2JqZWN0IHRvIGluaXRpYWxpemUKPj4gKyAqCj4+ ICsgKiBSZXR1cm46IDAgZm9yIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIGZvciBmYWlsdXJlLgo+ PiArICovCj4+ICtzdGF0aWMgaW50IHp5bnFtcF9yNV9hZGRfcnByb2NfY29yZShzdHJ1Y3Qgenlu cW1wX3I1X2NvcmUgKnI1X2NvcmUpCj4+ICt7Cj4+ICsJaW50IHJldDsKPj4gKwlzdHJ1Y3QgcnBy b2MgKnI1X3Jwcm9jOwo+PiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPj4gKwo+PiArCWRldiA9IHI1 X2NvcmUtPmRldjsKPj4gKwo+PiArCS8qIFNldCB1cCBETUEgbWFzayAqLwo+PiArCXJldCA9IGRt YV9zZXRfY29oZXJlbnRfbWFzayhkZXYsIERNQV9CSVRfTUFTSygzMikpOwo+PiArCWlmIChyZXQp Cj4+ICsJCXJldHVybiByZXQ7Cj4+ICsKPj4gKwkvKiBBbGxvY2F0ZSByZW1vdGVwcm9jIGluc3Rh bmNlICovCj4+ICsJcjVfcnByb2MgPSBkZXZtX3Jwcm9jX2FsbG9jKGRldiwgZGV2X25hbWUoZGV2 KSwgJnp5bnFtcF9yNV9ycHJvY19vcHMsCj4+ICsJCQkJICAgIE5VTEwsIHNpemVvZihzdHJ1Y3Qg enlucW1wX3I1X2NvcmUpKTsKPj4gKwlpZiAoSVNfRVJSX09SX05VTEwocjVfcnByb2MpKQo+PiAr CQlyZXR1cm4gLUVOT01FTTsKPj4gKwo+PiArCXI1X3Jwcm9jLT5hdXRvX2Jvb3QgPSBmYWxzZTsK Pj4gKwlyNV9ycHJvYy0+cHJpdiA9IHI1X2NvcmU7Cj4+ICsKPj4gKwkvKiBBZGQgUjUgcmVtb3Rl cHJvYyAqLwo+PiArCXJldCA9IGRldm1fcnByb2NfYWRkKGRldiwgcjVfcnByb2MpOwo+PiArCWlm IChyZXQpIHsKPj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8gYWRkIHI1IHJlbW90ZXByb2NcbiIpOwo+ PiArCQlyZXR1cm4gcmV0Owo+PiArCX0KPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ ICtzdGF0aWMgaW50IHp5bnFtcF9yNV9nZXRfdGNtX25vZGUoc3RydWN0IHp5bnFtcF9yNV9jbHVz dGVyICpjbHVzdGVyKQo+PiArewo+PiArCWludCB0Y21fYmFua19jb3VudCwgdGNtX25vZGU7Cj4+ ICsJaW50IGkgPSAwLCBqOwo+PiArCXN0cnVjdCB6eW5xbXBfcjVfY29yZSAqcjVfY29yZTsKPj4g Kwljb25zdCBzdHJ1Y3QgbWVtX2JhbmtfZGF0YSAqdGNtID0genlucW1wX3RjbV9iYW5rczsKPj4g KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjbHVzdGVyLT5kZXY7Cj4+ICsKPj4gKwkvKiBUb0RvOiBV c2UgcHJlZGVmaW5lZCBUQ00gYWRkcmVzcyBzcGFjZSB2YWx1ZXMgZnJvbSBkcml2ZXIgdW50aWwK Pj4gKwkgKiBzeXN0ZW0tZHQgc3BlYyBpcyBub3QgZmluYWwgZm90IFRDTQo+PiArCSAqLwo+PiAr CXRjbV9iYW5rX2NvdW50ID0gQVJSQVlfU0laRSh6eW5xbXBfdGNtX2JhbmtzKTsKPj4gKwo+PiAr CS8qIGNvdW50IHBlciBjb3JlIHRjbSBiYW5rcyAqLwo+PiArCXRjbV9iYW5rX2NvdW50ID0gdGNt X2JhbmtfY291bnQgLyBjbHVzdGVyLT5jb3JlX2NvdW50Owo+PiArCj4+ICsJLyogcjUgY29yZSAw IHdpbGwgdXNlIGFsbCBvZiBUQ00gYmFua3MgaW4gbG9ja3N0ZXAgbW9kZS4KPj4gKwkgKiBJbiBz cGxpdCBtb2RlLCByNSBjb3JlMCB3aWxsIHVzZSAxMjhrIGFuZCByNSBjb3JlMSB3aWxsIHVzZSBh bm90aGVyCj4+ICsJICogMTI4ay4gQXNzaWduIFRDTSBiYW5rcyB0byBlYWNoIGNvcmUgYWNjb3Jk aW5nbHkKPj4gKwkgKi8KPj4gKwl0Y21fbm9kZSA9IDA7Cj4+ICsJZm9yIChqID0gMDsgaiA8IGNs dXN0ZXItPmNvcmVfY291bnQ7IGorKykgewo+PiArCQlyNV9jb3JlID0gJmNsdXN0ZXItPnI1X2Nv cmVzW2pdOwo+PiArCQlyNV9jb3JlLT50Y21fYmFua3MgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXpl b2Yoc3RydWN0IG1lbV9iYW5rX2RhdGEpICoKPj4gKwkJCQkJCSAgdGNtX2JhbmtfY291bnQsIEdG UF9LRVJORUwpOwo+PiArCQlpZiAoSVNfRVJSX09SX05VTEwocjVfY29yZS0+dGNtX2JhbmtzKSkK Pj4gKwkJCXJldHVybiAtRU5PTUVNOwo+PiArCj4+ICsJCWZvciAoaSA9IDA7IGkgPCB0Y21fYmFu a19jb3VudDsgaSsrKSB7Cj4+ICsJCQkvKiBVc2UgcHJlLWRlZmluZWQgVENNIHJlZyB2YWx1ZXMu Cj4+ICsJCQkgKiBFdmVudHVhbGx5IHRoaXMgc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IHZhbHVlcwo+ PiArCQkJICogcGFyc2VkIGZyb20gZHRzLgo+PiArCQkJICovCj4+ICsJCQlyNV9jb3JlLT50Y21f YmFua3NbaV0uYWRkciA9IHRjbVt0Y21fbm9kZV0uYWRkcjsKPj4gKwkJCXI1X2NvcmUtPnRjbV9i YW5rc1tpXS5zaXplID0gdGNtW3RjbV9ub2RlXS5zaXplOwo+PiArCQkJcjVfY29yZS0+dGNtX2Jh bmtzW2ldLnBtX2RvbWFpbl9pZCA9IHRjbVt0Y21fbm9kZV0ucG1fZG9tYWluX2lkOwo+PiArCQkJ cjVfY29yZS0+dGNtX2JhbmtzW2ldLmJhbmtfbmFtZSA9IHRjbVt0Y21fbm9kZV0uYmFua19uYW1l Owo+PiArCQkJdGNtX25vZGUrKzsKPj4gKwkJfQo+PiArCj4+ICsJCXI1X2NvcmUtPnRjbV9iYW5r X2NvdW50ID0gdGNtX2JhbmtfY291bnQ7Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyBpbnQgenlucW1wX3I1X2dldF9tZW1fcmVnaW9uX25vZGUoc3RydWN0 IHp5bnFtcF9yNV9jb3JlICpyNV9jb3JlKQo+PiArewo+PiArCWludCByZXNfbWVtX2NvdW50LCBp Owo+PiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCAq cm1lbV9ucDsKPj4gKwlzdHJ1Y3QgcmVzZXJ2ZWRfbWVtICpybWVtOwo+PiArCj4+ICsJZGV2ID0g cjVfY29yZS0+ZGV2Owo+PiArCj4+ICsJbnAgPSByNV9jb3JlLT5ucDsKPj4gKwlpZiAoSVNfRVJS X09SX05VTEwobnApKSB7Cj4+ICsJCXByX2VycigiaW52YWxpZCBkZXZpY2Ugbm9kZSBvZiByNSBj b3JlXG4iKTsKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJfQo+PiArCj4+ICsJcmVzX21lbV9j b3VudCA9IG9mX3Byb3BlcnR5X2NvdW50X2VsZW1zX29mX3NpemUobnAsICJtZW1vcnktcmVnaW9u IiwKPj4gKwkJCQkJCQlzaXplb2YocGhhbmRsZSkpOwo+PiArCWlmIChyZXNfbWVtX2NvdW50IDw9 IDApIHsKPj4gKwkJZGV2X3dhcm4oZGV2LCAiZmFpbGVkIHRvIGdldCBtZW1vcnktcmVnaW9uIHBy b3BlcnR5ICVkXG4iLAo+PiArCQkJIHJlc19tZW1fY291bnQpOwo+PiArCQlyZXR1cm4gLUVJTlZB TDsKPj4gKwl9Cj4+ICsKPj4gKwlyNV9jb3JlLT5yZXNfbWVtID0gZGV2bV9remFsbG9jKGRldiwK Pj4gKwkJCQkJcmVzX21lbV9jb3VudCAqIHNpemVvZihzdHJ1Y3QgcmVzZXJ2ZWRfbWVtKSwKPj4g KwkJCQkJR0ZQX0tFUk5FTCk7Cj4+ICsJaWYgKCFyNV9jb3JlLT5yZXNfbWVtKSB7Cj4+ICsJCWRl dl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbSByZWdpb24gbWVtb3J5XG4iKTsKPj4g KwkJcmV0dXJuIC1FTk9NRU07Cj4+ICsJfQo+PiArCj4+ICsJZm9yIChpID0gMDsgaSA8IHJlc19t ZW1fY291bnQ7IGkrKykgewo+PiArCQlybWVtX25wID0gb2ZfcGFyc2VfcGhhbmRsZShucCwgIm1l bW9yeS1yZWdpb24iLCBpKTsKPj4gKwkJaWYgKCFybWVtX25wKQo+PiArCQkJcmV0dXJuIC1FSU5W QUw7Cj4+ICsKPj4gKwkJcm1lbSA9IG9mX3Jlc2VydmVkX21lbV9sb29rdXAocm1lbV9ucCk7Cj4+ ICsJCWlmICghcm1lbSkgewo+PiArCQkJb2Zfbm9kZV9wdXQocm1lbV9ucCk7Cj4+ICsJCQlyZXR1 cm4gLUVJTlZBTDsKPj4gKwkJfQo+PiArCj4+ICsJCW1lbWNweSgmcjVfY29yZS0+cmVzX21lbVtp XSwgcm1lbSwKPj4gKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgcmVzZXJ2ZWRfbWVtKSk7Cj4+ICsJ CW9mX25vZGVfcHV0KHJtZW1fbnApOwo+PiArCX0KPj4gKwo+PiArCXI1X2NvcmUtPnJlc19tZW1f Y291bnQgPSByZXNfbWVtX2NvdW50Owo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4g K3N0YXRpYyBpbnQgenlucW1wX3I1X2NvcmVfaW5pdChzdHJ1Y3QgenlucW1wX3I1X2NsdXN0ZXIg KmNsdXN0ZXIpCj4+ICt7Cj4+ICsJaW50IHJldCwgaTsKPj4gKwlzdHJ1Y3QgenlucW1wX3I1X2Nv cmUgKnI1X2NvcmU7Cj4+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gY2x1c3Rlci0+ZGV2Owo+PiAr Cj4+ICsJcmV0ID0genlucW1wX3I1X2dldF90Y21fbm9kZShjbHVzdGVyKTsKPj4gKwlpZiAocmV0 IDwgMCkgewo+PiArCQlkZXZfZXJyKGRldiwgImNhbid0IGdldCB0Y20gbm9kZSwgZXJyICVkXG4i LCByZXQpOwo+PiArCQlyZXR1cm4gcmV0Owo+PiArCX0KPj4gKwo+PiArCWZvciAoaSA9IDA7IGkg PCBjbHVzdGVyLT5jb3JlX2NvdW50OyBpKyspIHsKPj4gKwkJcjVfY29yZSA9ICZjbHVzdGVyLT5y NV9jb3Jlc1tpXTsKPj4gKwkJaWYgKCFyNV9jb3JlKSB7Cj4+ICsJCQlwcl9lcnIoImludmFsaWQg cjUgY29yZVxuIik7Cj4+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwkJfQo+PiArCj4+ICsJCXJl dCA9IHp5bnFtcF9yNV9nZXRfbWVtX3JlZ2lvbl9ub2RlKHI1X2NvcmUpOwo+PiArCQlpZiAocmV0 KQo+PiArCQkJZGV2X3dhcm4oZGV2LCAibWVtb3J5LXJlZ2lvbiBwcm9wIGZhaWxlZCAlZFxuIiwg cmV0KTsKPj4gKwo+PiArCQlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChyNV9jb3Jl LT5ucCwgInBvd2VyLWRvbWFpbnMiLAo+PiArCQkJCQkJIDEsICZyNV9jb3JlLT5wbV9kb21haW5f aWQpOwo+PiArCQlpZiAocmV0KSB7Cj4+ICsJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQg cG93ZXItZG9tYWlucyBwcm9wZXJ0eVxuIik7Cj4+ICsJCQlyZXR1cm4gcmV0Owo+PiArCQl9Cj4+ ICsKPj4gKwkJcmV0ID0genlucW1wX3I1X3NldF9tb2RlKHI1X2NvcmUsIGNsdXN0ZXItPm1vZGUp Owo+PiArCQlpZiAocmV0KQo+PiArCQkJcmV0dXJuIHJldDsKPj4gKwo+PiArCQlyZXQgPSB6eW5x bXBfcjVfYWRkX3Jwcm9jX2NvcmUocjVfY29yZSk7Cj4+ICsJCWlmIChyZXQpIHsKPj4gKwkJCWRl dl9lcnIoZGV2LCAiZmFpbGVkIHRvIGluaXQgcjUgY29yZSAlZFxuIiwgaSk7Cj4+ICsJCQlyZXR1 cm4gcmV0Owo+PiArCQl9Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4g K3N0YXRpYyBpbnQgenlucW1wX3I1X2NsdXN0ZXJfaW5pdChzdHJ1Y3QgenlucW1wX3I1X2NsdXN0 ZXIgKmNsdXN0ZXIpCj4+ICt7Cj4+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gY2x1c3Rlci0+ZGV2 Owo+PiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2X25vZGUgPSBkZXZfb2Zfbm9kZShkZXYpOwo+ PiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7Cj4+ICsJc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqY2hpbGRfcGRldjsKPj4gKwlpbnQgY29yZV9jb3VudCA9IDAsIHJldCwgaTsKPj4gKwllbnVt IHp5bnFtcF9yNV9jbHVzdGVyX21vZGUgY2x1c3Rlcl9tb2RlID0gTE9DS1NURVBfTU9ERTsKPj4g KwlzdHJ1Y3QgenlucW1wX3I1X2NvcmUgKnI1X2NvcmVzOwo+PiArCj4+ICsJcmV0ID0gb2ZfcHJv cGVydHlfcmVhZF91MzIoZGV2X25vZGUsICJ4bG54LGNsdXN0ZXItbW9kZSIsICZjbHVzdGVyX21v ZGUpOwo+PiArCj4+ICsJLyogb24gc3VjY2VzcyByZXR1cm5zIDAsIGlmIG5vdCBkZWZpbmVkIHRo ZW4gcmV0dXJucyAtRUlOVkFMLAo+PiArCSAqIEluIHRoYXQgY2FzZSwgZGVmYXVsdCBpcyBMT0NL U1RFUCBtb2RlCj4+ICsJICovCj4+ICsJaWYgKHJldCAhPSAtRUlOVkFMICYmIHJldCAhPSAwKSB7 Cj4+ICsJCWRldl9lcnIoZGV2LCAiSW52YWxpZCB4bG54LGNsdXN0ZXItbW9kZSBwcm9wZXJ0eVxu Iik7Cj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiArCX0KPj4gKwo+PiArCWlmIChjbHVzdGVyX21v ZGUgPT0gU0lOR0xFX0NQVV9NT0RFKSB7Cj4+ICsJCWRldl9lcnIoZGV2LCAiZHJpdmVyIGRvZXMg bm90IHN1cHBvcnQgc2luZ2xlIGNwdSBtb2RlXG4iKTsKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ ICsJfSBlbHNlIGlmICgoY2x1c3Rlcl9tb2RlICE9IFNQTElUX01PREUgJiYKPj4gKwkJICAgY2x1 c3Rlcl9tb2RlICE9IExPQ0tTVEVQX01PREUpKSB7Cj4+ICsJCWRldl9lcnIoZGV2LCAiSW52YWxp ZCBjbHVzdGVyIG1vZGVcbiIpOwo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwl9Cj4+ICsKPj4g Kwljb3JlX2NvdW50ID0gb2ZfZ2V0X2F2YWlsYWJsZV9jaGlsZF9jb3VudChkZXZfbm9kZSk7Cj4+ ICsJaWYgKGNvcmVfY291bnQgPD0gMCkgewo+PiArCQlkZXZfZXJyKGRldiwgIkludmFsaWQgbnVt YmVyIG9mIHI1IGNvcmVzICVkIiwgY29yZV9jb3VudCk7Cj4+ICsJCXJldHVybiAtRUlOVkFMOwo+ PiArCX0gZWxzZSBpZiAoY2x1c3Rlcl9tb2RlID09IFNQTElUX01PREUgJiYgY29yZV9jb3VudCAh PSAyKSB7Cj4+ICsJCWRldl9lcnIoZGV2LCAiSW52YWxpZCBudW1iZXIgb2YgcjUgY29yZXMgZm9y IHNwbGl0IG1vZGVcbiIpOwo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwl9IGVsc2UgaWYgKGNs dXN0ZXJfbW9kZSA9PSBMT0NLU1RFUF9NT0RFICYmIGNvcmVfY291bnQgPT0gMikgewo+PiArCQlk ZXZfd2FybihkZXYsICJPbmx5IHI1IGNvcmUwIHdpbGwgYmUgdXNlZFxuIik7Cj4+ICsJCWNvcmVf Y291bnQgPSAxOwo+PiArCX0KPj4gKwo+PiArCXI1X2NvcmVzID0gZGV2bV9remFsbG9jKGRldiwg c2l6ZW9mKHN0cnVjdCB6eW5xbXBfcjVfY29yZSkgKgo+PiArCQkJCQkJIGNvcmVfY291bnQsIEdG UF9LRVJORUwpOwo+PiArCWlmIChJU19FUlJfT1JfTlVMTChyNV9jb3JlcykpIHsKPj4gKwkJZGV2 X2VycihkZXYsICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNvcmVzXG4iKTsKPj4gKwkJcmV0 dXJuIC1FTk9NRU07Cj4+ICsJfQo+PiArCj4+ICsJaSA9IDA7Cj4+ICsJZm9yX2VhY2hfYXZhaWxh YmxlX2NoaWxkX29mX25vZGUoZGV2X25vZGUsIGNoaWxkKSB7Cj4+ICsJCWNoaWxkX3BkZXYgPSBv Zl9maW5kX2RldmljZV9ieV9ub2RlKGNoaWxkKTsKPj4gKwkJaWYgKCFjaGlsZF9wZGV2KQo+PiAr CQkJcmV0dXJuIC1FTk9ERVY7Cj4+ICsKPj4gKwkJcjVfY29yZXNbaV0uZGV2ID0gJmNoaWxkX3Bk ZXYtPmRldjsKPj4gKwkJaWYgKCFyNV9jb3Jlc1tpXS5kZXYpIHsKPj4gKwkJCXByX2VycigiY2Fu J3QgZ2V0IGRldmljZSBmb3IgcjUgY29yZSAlZFxuIiwgaSk7Cj4+ICsJCQlyZXR1cm4gLUVOT0RF VjsKPj4gKwkJfQo+PiArCj4+ICsJCXI1X2NvcmVzW2ldLm5wID0gZGV2X29mX25vZGUocjVfY29y ZXNbaV0uZGV2KTsKPj4gKwkJaWYgKCFyNV9jb3Jlc1tpXS5ucCkgewo+PiArCQkJcHJfZXJyKCJj YW4ndCBnZXQgZGV2aWNlIG5vZGUgZm9yIHI1IGNvcmUgJWRcbiIsIGkpOwo+PiArCQkJcmV0dXJu IC1FTk9ERVY7Cj4+ICsJCX0KPj4gKwo+PiArCQlpKys7Cj4+ICsJCWlmIChpID09IGNvcmVfY291 bnQpCj4+ICsJCQlicmVhazsKPj4gKwl9Cj4+ICsKPj4gKwljbHVzdGVyLT5tb2RlID0gY2x1c3Rl cl9tb2RlOwo+PiArCWNsdXN0ZXItPmNvcmVfY291bnQgPSBjb3JlX2NvdW50Owo+PiArCWNsdXN0 ZXItPnI1X2NvcmVzID0gcjVfY29yZXM7Cj4+ICsKPj4gKwlyZXQgPSB6eW5xbXBfcjVfY29yZV9p bml0KGNsdXN0ZXIpOwo+PiArCWlmIChyZXQgPCAwKSB7Cj4+ICsJCWRldl9lcnIoZGV2LCAiZmFp bGVkIHRvIGluaXQgcjUgY29yZSBlcnIgJWRcbiIsIHJldCk7Cj4+ICsJCXJldHVybiByZXQ7Cj4+ ICsJfQo+PiArCj4+ICsJenlucW1wX3I1X3ByaW50X2R0X25vZGVfaW5mbyhjbHVzdGVyKTsKPj4g Kwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCB6eW5xbXBfcjVfY2x1 c3Rlcl9leGl0KHZvaWQgKmRhdGEpCj4+ICt7Cj4+ICsJc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldiA9IChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopZGF0YTsKPj4gKwo+PiArCXBsYXRmb3Jt X3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwo+PiArCj4+ICsJcHJfaW5mbygiRXhpdCByNWYgc3Vi c3lzdGVtIGRyaXZlclxuIik7Cj4+ICt9Cj4+ICsKPj4gKy8qCj4+ICsgKiB6eW5xbXBfcjVfcmVt b3RlcHJvY19wcm9iZSgpCj4+ICsgKgo+PiArICogQHBkZXY6IGRvbWFpbiBwbGF0Zm9ybSBkZXZp Y2UgZm9yIFI1IGNsdXN0ZXIKPj4gKyAqCj4+ICsgKiBjYWxsZWQgd2hlbiBkcml2ZXIgaXMgcHJv YmVkLCBmb3IgZWFjaCBSNSBjb3JlIHNwZWNpZmllZCBpbiBEVCwKPj4gKyAqIHNldHVwIGFzIG5l ZWRlZCB0byBkbyByZW1vdGVwcm9jLXJlbGF0ZWQgb3BlcmF0aW9ucwo+PiArICoKPj4gKyAqIFJl dHVybjogMCBmb3Igc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgZm9yIGZhaWx1cmUuCj4+ICsgKi8K Pj4gK3N0YXRpYyBpbnQgenlucW1wX3I1X3JlbW90ZXByb2NfcHJvYmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldikKPj4gK3sKPj4gKwlpbnQgcmV0Owo+PiArCXN0cnVjdCB6eW5xbXBfcjVf Y2x1c3RlciAqY2x1c3RlcjsKPj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owo+ PiArCj4+ICsJY2x1c3RlciA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY2x1c3RlciksIEdG UF9LRVJORUwpOwo+PiArCWlmIChJU19FUlJfT1JfTlVMTChjbHVzdGVyKSkKPj4gKwkJcmV0dXJu IC1FTk9NRU07Cj4+ICsKPj4gKwljbHVzdGVyLT5kZXYgPSBkZXY7Cj4+ICsKPj4gKwlyZXQgPSBk ZXZtX29mX3BsYXRmb3JtX3BvcHVsYXRlKGRldik7Cj4+ICsJaWYgKHJldCkgewo+PiArCQlkZXZf ZXJyKGRldiwgImZhaWxlZCB0byBwb3B1bGF0ZSBwbGF0Zm9ybSBkZXYgJWRcbiIsIHJldCk7Cj4+ ICsJCXJldHVybiByZXQ7Cj4+ICsJfQo+PiArCj4+ICsJLyogd2lyZSBpbiBzbyBlYWNoIGNvcmUg Y2FuIGJlIGNsZWFuZWQgdXAgYXQgZHJpdmVyIHJlbW92ZSAqLwo+PiArCXBsYXRmb3JtX3NldF9k cnZkYXRhKHBkZXYsIGNsdXN0ZXIpOwo+PiArCj4+ICsJcmV0ID0gZGV2bV9hZGRfYWN0aW9uX29y X3Jlc2V0KGRldiwgenlucW1wX3I1X2NsdXN0ZXJfZXhpdCwgcGRldik7Cj4+ICsJaWYgKHJldCkK Pj4gKwkJcmV0dXJuIHJldDsKPj4gKwo+PiArCXJldCA9IHp5bnFtcF9yNV9jbHVzdGVyX2luaXQo Y2x1c3Rlcik7Cj4+ICsJaWYgKHJldCkgewo+PiArCQlkZXZfZXJyKGRldiwgIkludmFsaWQgcjVm IHN1YnN5c3RlbSBkZXZpY2UgdHJlZVxuIik7Cj4+ICsJCXJldHVybiByZXQ7Cj4+ICsJfQo+PiAr Cj4+ICsJZGV2X2luZm8oZGV2LCAiWGlsaW54IHI1ZiByZW1vdGVwcm9jIGRyaXZlciBwcm9iZSBz dWNjZXNzXG4iKTsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArLyogTWF0Y2ggdGFibGUg Zm9yIE9GIHBsYXRmb3JtIGJpbmRpbmcgKi8KPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2 aWNlX2lkIHp5bnFtcF9yNV9yZW1vdGVwcm9jX21hdGNoW10gPSB7Cj4+ICsJeyAuY29tcGF0aWJs ZSA9ICJ4bG54LHp5bnFtcC1yNWZzcyIsIH0sCj4+ICsJeyAvKiBlbmQgb2YgbGlzdCAqLyB9LAo+ PiArfTsKPj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHp5bnFtcF9yNV9yZW1vdGVwcm9jX21h dGNoKTsKPj4gKwo+PiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgenlucW1wX3I1X3Jl bW90ZXByb2NfZHJpdmVyID0gewo+PiArCS5wcm9iZSA9IHp5bnFtcF9yNV9yZW1vdGVwcm9jX3By b2JlLAo+PiArCS5kcml2ZXIgPSB7Cj4+ICsJCS5uYW1lID0gInp5bnFtcF9yNV9yZW1vdGVwcm9j IiwKPj4gKwkJLm9mX21hdGNoX3RhYmxlID0genlucW1wX3I1X3JlbW90ZXByb2NfbWF0Y2gsCj4+ ICsJfSwKPj4gK307Cj4+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHp5bnFtcF9yNV9yZW1vdGVw cm9jX2RyaXZlcik7Cj4+ICsKPj4gK01PRFVMRV9ERVNDUklQVElPTigiWGlsaW54IFI1RiByZW1v dGUgcHJvY2Vzc29yIGRyaXZlciIpOwo+PiArTU9EVUxFX0FVVEhPUigiWGlsaW54IEluYy4iKTsK Pj4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKPj4gLS0gCj4+IDIuMjUuMQo+PgoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5l bCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6 Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=