From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-20.3 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,NICE_REPLY_A, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0F39BC433FE for ; Tue, 8 Dec 2020 19:59:40 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 9613D23B1A for ; Tue, 8 Dec 2020 19:59:39 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9613D23B1A Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=xilinx.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Type: Content-Transfer-Encoding:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=iMVjQsYOL+DXPKvZkov6IoRmVNWIcjBIcw53zPM4tkk=; b=E7gzHZR1mfmh4TH0rddflobXn v8xWiuFfByI2ZR2EFK/HEprMVBnsdO4VtxC1vZIQ64/u1eX0Wu1k/G55U2PyD+szQW2mUn11VAqu6 Lzk+fn5G8tgUHEgjl9lHYWckeA5aULN7ZHEzpoxe5aqiO6WGxltII7uG5cpowED94jRn3L56Yva/4 Xe+bhACjLf4joUFnuWl20dw6kSreH9dSGUWa0lIPmZfepLy/oLQGB+rGrhzTDo+hmHBrdtJHD64Hg SUfW6qo1tIexdW51XfAUDWq2Pfq0cevBVZ9ctvhmx/c8DK+5N9lA83uNR0WxJN4YLN4T8UXTeBz8F 4ASn5Atiw==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kmj7V-0000rL-Vh; Tue, 08 Dec 2020 19:57:58 +0000 Received: from mail-co1nam11on2085.outbound.protection.outlook.com ([40.107.220.85] helo=NAM11-CO1-obe.outbound.protection.outlook.com) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kmj7R-0000qB-VC for linux-arm-kernel@lists.infradead.org; Tue, 08 Dec 2020 19:57:56 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hftHyCSJyCql8oVAMIPsa8Gi909L8QC+/A2NeqZdgYZ8ptm0H/27ltUw/MD1jSwKQ9Li4Nu5jOcNh2Ja+tVxA4cRPogMLbHo4R3ZB/rm1vNUklM6VKRU18pVq4ZlmkraUAy+nyiQkb1Jd4JjBzEYmZePXUxNpjrlKqe8ezlLYCKxXL7vQB9HRt/LJXat13otgEiFvVkEfi7ny7lTqYvrGpA/jFlZmyAqZD4LKbmEMP1BsxaTzF4zKBNt7NA2HpyrkxI/yDYtojvbT06UjB+73E20hdJsfyRkrsuyK1hFnNo5tbW4Xz/OiU9SaBIZep/g201l+w9a7RkUsjiXKFrhJQ== 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-SenderADCheck; bh=e7y1utmo7nFGbx/1JBFfUHlLsgPefosbU4R6GHtddmE=; b=BF7ohelIzEEa0U7C11v7baPCLzZgxKW2BLigDi5G62jHuU3SRn3/NhgXPaTdeIpoD6WbQDpXjgqa1ZNkzGxs4TwOnVvzstjiQP8YfSIb/yV26MsCoRXcJfOLGzh50FLkd0cunJjhGN7wOuQ/LwN6+/C8O3YF2cQNpmEyRJimyrKZkRnJpZBhz528inyiK3JLlbN1lxTPan/U93U9QQRS7ZKVudBYeg696StX1RHJrA1Gy2xA3hlBj0rwcKPn8ZPXK7DvS02rhCqZR+rIDIlB8e3vvUrpNIVGUBdCD2AZnhQgI2afQmTrtzNlR/Ip7fQlGUSYE9pyE6EIqZcGG1f8gw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 149.199.62.198) smtp.rcpttodomain=lists.linaro.org smtp.mailfrom=xilinx.com; dmarc=bestguesspass 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=e7y1utmo7nFGbx/1JBFfUHlLsgPefosbU4R6GHtddmE=; b=cJtFeVcrHGSzX2+THVUapJuseBdDtskahIvr7sThgHuXh3tWCcofM2hE3komq0OpVFvA4YeedkNyoAFjA7aQtyB3WtZHs/9q9bOix16tTUvD0mLvnBPw5fwOcFF9jw3oeVC1xRCwSjG3Yu56FyEJ2N+xVBjIgXkyVCbQpGEEudI= Received: from DM5PR20CA0036.namprd20.prod.outlook.com (2603:10b6:3:13d::22) by BY5PR02MB6963.namprd02.prod.outlook.com (2603:10b6:a03:236::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3632.18; Tue, 8 Dec 2020 19:57:47 +0000 Received: from CY1NAM02FT031.eop-nam02.prod.protection.outlook.com (2603:10b6:3:13d:cafe::14) by DM5PR20CA0036.outlook.office365.com (2603:10b6:3:13d::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3654.12 via Frontend Transport; Tue, 8 Dec 2020 19:57:47 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 149.199.62.198) smtp.mailfrom=xilinx.com; lists.linaro.org; dkim=none (message not signed) header.d=none;lists.linaro.org; dmarc=bestguesspass action=none header.from=xilinx.com; Received-SPF: Pass (protection.outlook.com: domain of xilinx.com designates 149.199.62.198 as permitted sender) receiver=protection.outlook.com; client-ip=149.199.62.198; helo=xsj-pvapexch01.xlnx.xilinx.com; Received: from xsj-pvapexch01.xlnx.xilinx.com (149.199.62.198) by CY1NAM02FT031.mail.protection.outlook.com (10.152.75.180) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.3632.21 via Frontend Transport; Tue, 8 Dec 2020 19:57:47 +0000 Received: from xsj-pvapexch01.xlnx.xilinx.com (172.19.86.40) by xsj-pvapexch01.xlnx.xilinx.com (172.19.86.40) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1913.5; Tue, 8 Dec 2020 11:57:46 -0800 Received: from smtp.xilinx.com (172.19.127.96) by xsj-pvapexch01.xlnx.xilinx.com (172.19.86.40) with Microsoft SMTP Server id 15.1.1913.5 via Frontend Transport; Tue, 8 Dec 2020 11:57:46 -0800 Received: from [10.23.125.57] (port=51520) by smtp.xilinx.com with esmtp (Exim 4.90) (envelope-from ) id 1kmj7K-00079w-0p; Tue, 08 Dec 2020 11:57:46 -0800 Subject: Re: [PATCH 2/9] misc: Add Xilinx AI engine device driver To: Nicolas Dufresne , Wendy Liang , , , , , , , , , , , , References: <1605686780-17886-1-git-send-email-wendy.liang@xilinx.com> <1605686780-17886-3-git-send-email-wendy.liang@xilinx.com> <5c310d188d2a75480452f5b5a9310e8e049f20f6.camel@ndufresne.ca> From: Jiaying Liang Message-ID: Date: Tue, 8 Dec 2020 11:57:45 -0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.5.0 MIME-Version: 1.0 In-Reply-To: <5c310d188d2a75480452f5b5a9310e8e049f20f6.camel@ndufresne.ca> Content-Language: en-US X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2af74b87-3f47-4577-695a-08d89bb38927 X-MS-TrafficTypeDiagnostic: BY5PR02MB6963: X-Microsoft-Antispam-PRVS: X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-MS-Oob-TLC-OOBClassifiers: OLM:5797; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: yXGK017FqRIEvy7fS9DwV2fv6L/rp/HZ/U8Bcx1T6iS+hTX3vtJoopUKx+5WZSphQe3+KKW3gjFd4DASe51eISYtq+54vuHQUYjml1+cLoUOv1c6w7T/+d5QCKYETwX3Gs5gGF85C6ElRi9F4deGW2zMyB/LAZDi3/VIwyuY6Pj5z6fQz2tWrIEHoPXFtgyOvS0AfTmJUbuEUdlGBxyDbmfbJmv85vlRmbork2RxGTDMj/bAikJk75VW2Xlc1kMflMgjrfK7NE9bxwykN57Hcn2NoIe/2uHCV2DvD4NMMU0TbJvx2Akf15LBJjY2WCrGE4IThBNktZNPrqd0Mi5JmofG1t7UYXoROQ13Q/AF5/mEhzXVoGtsSXs5+SuHFfDN9TtyABQ9UeKJKqn2a0CX79iEbLCrK9QRE4XYmgu7d9UDbAeqLFulPUSYfBhUMcxZyDeObkMXSWO3Jx3uNq5vyz5o4CgruiU3Zy/Aj6rpcaMZeymK15sCihedFoNZcw7IbyENGfk/DjkTEfp3Yqm8kexNOFcYsTVJhmQB9+RaN28= X-Forefront-Antispam-Report: CIP:149.199.62.198; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:xsj-pvapexch01.xlnx.xilinx.com; PTR:unknown-62-198.xilinx.com; CAT:NONE; SFS:(4636009)(136003)(346002)(376002)(46966005)(508600001)(921005)(2906002)(8936002)(36756003)(53546011)(336012)(356005)(8676002)(36906005)(6636002)(66574015)(70206006)(107886003)(7636003)(54906003)(83380400001)(426003)(9786002)(966005)(2616005)(82310400003)(26005)(4326008)(47076004)(70586007)(5660300002)(7416002)(186003)(31686004)(110136005)(31696002)(30864003)(50156003)(43740500002)(579004)(559001); DIR:OUT; SFP:1101; X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Dec 2020 19:57:47.4778 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2af74b87-3f47-4577-695a-08d89bb38927 X-MS-Exchange-CrossTenant-Id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=657af505-d5df-48d0-8300-c31994686c5c; Ip=[149.199.62.198]; Helo=[xsj-pvapexch01.xlnx.xilinx.com] X-MS-Exchange-CrossTenant-AuthSource: CY1NAM02FT031.eop-nam02.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR02MB6963 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201208_145754_245581_B480EC91 X-CRM114-Status: GOOD ( 22.37 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, Hyun Kwon , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linaro-mm-sig@lists.linaro.org, linux-arm-kernel@lists.infradead.org, linux-media@vger.kernel.org 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 Ck9uIDEyLzgvMjAgOToxMiBBTSwgTmljb2xhcyBEdWZyZXNuZSB3cm90ZToKPiBMZSBtZXJjcmVk aSAxOCBub3ZlbWJyZSAyMDIwIMOgIDAwOjA2IC0wODAwLCBXZW5keSBMaWFuZyBhIMOpY3JpdMKg Ogo+PiBDcmVhdGUgQUkgZW5naW5lIGRldmljZS9wYXJ0aXRpb24gaGllcmFyY2hpY2FsIHN0cnVj dHVyZS4KPj4KPj4gRWFjaCBBSSBlbmdpbmUgZGV2aWNlIGNhbiBoYXZlIG11bHRpcGxlIGxvZ2lj YWwgcGFydGl0aW9ucyhncm91cHMgb2YgQUkKPj4gZW5naW5lIHRpbGVzKS4gRWFjaCBwYXJ0aXRp b24gaXMgY29sdW1uIGJhc2VkIGFuZCBoYXMgaXRzIG93biBub2RlIElECj4+IGluIHRoZSBzeXN0 ZW0uIEFJIGVuZ2luZSBkZXZpY2UgZHJpdmVyIG1hbmFnZXMgaXRzIHBhcnRpdGlvbnMuCj4+Cj4+ IEFwcGxpY2F0aW9ucyBjYW4gYWNjZXNzIEFJIGVuZ2luZSBwYXJ0aXRpb24gdGhyb3VnaCB0aGUg QUkgZW5naW5lCj4+IHBhcnRpdGlvbiBkcml2ZXIgaW5zdGFuY2UuIEFJIGVuZ2luZSByZWdpc3Rl cnMgd3JpdGUgaXMgbW92ZWQgdG8ga2VybmVsCj4+IGFzIHRoZXJlIGFyZSByZWdpc3RlcnMgaW4g dGhlIEFJIGVuZ2luZSBhcnJheSBuZWVkcyBwcml2aWxlZ2UKPj4gcGVybWlzc2lvbi4KPiBIaSB0 aGVyZSwgaXQncyBuaWNlIHRvIHNlZSBhbiBlZmZvcnQgdG8gdXBzdHJlYW0gYW4gQUkgZHJpdmVy LiBJJ20gYSBsaXR0bGUKPiB3b3JyaWVkIHRoaXMgZHJpdmVyIGlzIG5vdCBvYnZpb3VzIHRvIHVz ZSBmcm9tIGl0J3Mgc291cmNlIGNvZGUgaXRzZWxmLiBTbyB5b3UKPiBoYXZlIHJlZmVyZW5jZSB0 byBzb21lIE9wZW4gU291cmNlIGNvZGUgdGhhdCBkZW1vbnN0cmF0ZSBpdCdzIHVzYWdlID8KV2Ug aGF2ZSBBSSBlbmdpbmUgbGlicmFyeSB3aGljaCBwcm92aWRlcyBhIGNyb3NzIHBsYXRmb3JtcyBB UElzIGZvciBvdGhlcgoKbGlicmFyaWVzL2FwcGxpY2F0aW9uIHRvIHVzZSB0aGUgaGFyZHdhcmUu IEhlcmUgaXMgdGhlIHNvdXJjZSBjb2RlOgoKaHR0cHM6Ly9naXRodWIuY29tL1hpbGlueC9lbWJl ZGRlZHN3L3RyZWUvbWFzdGVyL1hpbGlueFByb2Nlc3NvcklQTGliL2RyaXZlcnMvYWllbmdpbmV2 Mi9zcmMgCgoKVGhlIGNyb3NzIHBsYXRmb3JtcyBBSSBlbmdpbmUgbGlicmFyeSBydW5zIGluIExJ bnV4IHVzZXJzcGFjZSBpdCBkZWZpbmVzIApob3cgdG8KCmNvbmZpZ3VyZSwgYW5kIHRoZSBrZXJu ZWwgZHJpdmVyIGNvbnRyb2xzIGlmIHdoYXQgY2FuIGJlIGFjY2VzcyBhbmQgCm1hbmFnZSBlcnJv cnMgZnJvbSBkZXZpY2UuCgoKQmVzdCBSZWdhcmRzLAoKV2VuZHkKPgo+PiBTaWduZWQtb2ZmLWJ5 OiBXZW5keSBMaWFuZyA8d2VuZHkubGlhbmdAeGlsaW54LmNvbT4KPj4gU2lnbmVkLW9mZi1ieTog SHl1biBLd29uIDxoeXVuLmt3b25AeGlsaW54LmNvbT4KPj4gLS0tCj4+ICDCoE1BSU5UQUlORVJT wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDggKwo+PiAgwqBkcml2ZXJzL21pc2MvS2NvbmZp Z8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCB8wqAgMTIgKwo+PiAgwqBkcml2ZXJzL21pc2MvTWFrZWZpbGXCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDEgKwo+PiAg wqBkcml2ZXJzL21pc2MveGlsaW54LWFpLWVuZ2luZS9NYWtlZmlsZcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB8wqAgMTEgKwo+PiAgwqBkcml2ZXJzL21pc2MveGlsaW54LWFpLWVuZ2luZS9haS1l bmdpbmUtYWllLmPCoMKgwqDCoMKgIHwgMTE1ICsrKysrCj4+ICDCoGRyaXZlcnMvbWlzYy94aWxp bngtYWktZW5naW5lL2FpLWVuZ2luZS1kZXYuY8KgwqDCoMKgwqAgfCA0NDggKysrKysrKysrKysr KysrKysrCj4+ICDCoGRyaXZlcnMvbWlzYy94aWxpbngtYWktZW5naW5lL2FpLWVuZ2luZS1pbnRl cm5hbC5oIHwgMjI2ICsrKysrKysrKysKPj4gIMKgZHJpdmVycy9taXNjL3hpbGlueC1haS1lbmdp bmUvYWktZW5naW5lLXBhcnQuY8KgwqDCoMKgIHwgNDk4Cj4+ICsrKysrKysrKysrKysrKysrKysr Kwo+PiAgwqBkcml2ZXJzL21pc2MveGlsaW54LWFpLWVuZ2luZS9haS1lbmdpbmUtcmVzLmPCoMKg wqDCoMKgIHwgMTE0ICsrKysrCj4+ICDCoGluY2x1ZGUvdWFwaS9saW51eC94bG54LWFpLWVuZ2lu ZS5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwgMTA3ICsrKysrCj4+ICDCoDEwIGZp bGVzIGNoYW5nZWQsIDE1NDAgaW5zZXJ0aW9ucygrKQo+PiAgwqBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9taXNjL3hpbGlueC1haS1lbmdpbmUvTWFrZWZpbGUKPj4gIMKgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvbWlzYy94aWxpbngtYWktZW5naW5lL2FpLWVuZ2luZS1haWUuYwo+PiAg wqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9taXNjL3hpbGlueC1haS1lbmdpbmUvYWktZW5n aW5lLWRldi5jCj4+ICDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21pc2MveGlsaW54LWFp LWVuZ2luZS9haS1lbmdpbmUtaW50ZXJuYWwuaAo+PiAgwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9taXNjL3hpbGlueC1haS1lbmdpbmUvYWktZW5naW5lLXBhcnQuYwo+PiAgwqBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9taXNjL3hpbGlueC1haS1lbmdpbmUvYWktZW5naW5lLXJlcy5j Cj4+ICDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3VhcGkvbGludXgveGxueC1haS1lbmdp bmUuaAo+Pgo+PiBkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwo+PiBpbmRl eCA1Y2M1OTVhLi40MGUzMzUxIDEwMDY0NAo+PiAtLS0gYS9NQUlOVEFJTkVSUwo+PiArKysgYi9N QUlOVEFJTkVSUwo+PiBAQCAtMTkyODMsNiArMTkyODMsMTQgQEAgVDrCoMKgwqDCoMKgZ2l0IGh0 dHBzOi8vZ2l0aHViLmNvbS9YaWxpbngvbGludXgteGxueC5naXQKPj4gIMKgRjrCoMKgwqDCoMKg RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BoeS94bG54LHp5bnFtcC1wc2d0ci55 YW1sCj4+ICDCoEY6wqDCoMKgwqDCoGRyaXZlcnMvcGh5L3hpbGlueC9waHktenlucW1wLmMKPj4g ICAKPj4gK1hJTElOWCBBSSBFTkdJTkUgRFJJVkVSCj4+ICtNOsKgwqDCoMKgwqBXZW5keSBMaWFu ZyA8d2VuZHkubGlhbmdAeGlsaW54LmNvbT4KPj4gK1M6wqDCoMKgwqDCoFN1cHBvcnRlZAo+PiAr RjrCoMKgwqDCoMKgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvYy94aWxpbngv eGxueCxhaS1lbmdpbmUueWFtbAo+PiArRjrCoMKgwqDCoMKgZHJpdmVycy9taXNjL3hpbGlueC1h aS1lbmdpbmUvCj4+ICtGOsKgwqDCoMKgwqBpbmNsdWRlL2xpbnV4L3hsbngtYWktZW5naW5lLmgK Pj4gK0Y6wqDCoMKgwqDCoGluY2x1ZGUvdWFwaS9saW51eC94bG54LWFpLWVuZ2luZS5oCj4+ICsK Pj4gIMKgWElMTFlCVVMgRFJJVkVSCj4+ICDCoE06wqDCoMKgwqDCoEVsaSBCaWxsYXVlciA8ZWxp LmJpbGxhdWVyQGdtYWlsLmNvbT4KPj4gIMKgTDrCoMKgwqDCoMKgbGludXgta2VybmVsQHZnZXIu a2VybmVsLm9yZwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL0tjb25maWcgYi9kcml2ZXJz L21pc2MvS2NvbmZpZwo+PiBpbmRleCBmYWZhOGIwLi4wYjhjZTRkIDEwMDY0NAo+PiAtLS0gYS9k cml2ZXJzL21pc2MvS2NvbmZpZwo+PiArKysgYi9kcml2ZXJzL21pc2MvS2NvbmZpZwo+PiBAQCAt NDQ0LDYgKzQ0NCwxOCBAQCBjb25maWcgWElMSU5YX1NERkVDCj4+ICAgCj4+ICDCoMKgwqDCoMKg wqDCoMKgwqAgSWYgdW5zdXJlLCBzYXkgTi4KPj4gICAKPj4gK2NvbmZpZyBYSUxJTlhfQUlFCj4+ ICvCoMKgwqDCoMKgwqDCoHRyaXN0YXRlICJYaWxpbnggQUkgZW5naW5lIgo+PiArwqDCoMKgwqDC oMKgwqBkZXBlbmRzIG9uIEFSTTY0IHx8IENPTVBJTEVfVEVTVAo+PiArwqDCoMKgwqDCoMKgwqBo ZWxwCj4+ICvCoMKgwqDCoMKgwqDCoMKgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3Ig dGhlIFhpbGlueCBBSSBlbmdpbmUgZHJpdmVyLgo+PiArwqDCoMKgwqDCoMKgwqDCoCBPbmUgWGls aW54IEFJIGVuZ2luZSBkZXZpY2UgY2FuIGhhdmUgbXVsdGlwbGUgcGFydGl0aW9ucyAoZ3JvdXBz IG9mCj4+ICvCoMKgwqDCoMKgwqDCoMKgIEFJIGVuZ2luZSB0aWxlcykuIFhpbGlueCBBSSBlbmdp bmUgZGV2aWNlIGRyaXZlciBpbnN0YW5jZSBtYW5hZ2VzCj4+ICvCoMKgwqDCoMKgwqDCoMKgIEFJ IGVuZ2luZSBwYXJ0aXRpb25zLiBVc2VyIGFwcGxpY2F0aW9uIGFjY2VzcyBpdHMgcGFydGl0aW9u cyB0aHJvdWdoCj4+ICvCoMKgwqDCoMKgwqDCoMKgIEFJIGVuZ2luZSBwYXJ0aXRpb24gaW5zdGFu Y2UgZmlsZSBvcGVyYXRpb25zLgo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoMKgIElmIHVuc3VyZSwg c2F5IE4KPj4gKwo+PiAgwqBjb25maWcgTUlTQ19SVFNYCj4+ICDCoMKgwqDCoMKgwqDCoMKgdHJp c3RhdGUKPj4gIMKgwqDCoMKgwqDCoMKgwqBkZWZhdWx0IE1JU0NfUlRTWF9QQ0kgfHwgTUlTQ19S VFNYX1VTQgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL01ha2VmaWxlIGIvZHJpdmVycy9t aXNjL01ha2VmaWxlCj4+IGluZGV4IGQyMzIzMWUuLjIxNzZiMTggMTAwNjQ0Cj4+IC0tLSBhL2Ry aXZlcnMvbWlzYy9NYWtlZmlsZQo+PiArKysgYi9kcml2ZXJzL21pc2MvTWFrZWZpbGUKPj4gQEAg LTU3LDMgKzU3LDQgQEAgb2JqLSQoQ09ORklHX0hBQkFOQV9BSSnCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqArPSBoYWJhbmFsYWJzLwo+PiAgwqBvYmotJChDT05GSUdfVUFDQ0UpwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgKz0gdWFjY2UvCj4+ICDCoG9iai0kKENPTkZJR19YSUxJTlhfU0RG RUMpwqDCoMKgwqDCoCs9IHhpbGlueF9zZGZlYy5vCj4+ICDCoG9iai0kKENPTkZJR19ISVNJX0hJ S0VZX1VTQinCoMKgwqArPSBoaXNpX2hpa2V5X3VzYi5vCj4+ICtvYmotJChDT05GSUdfWElMSU5Y X0FJRSnCoMKgwqDCoMKgwqDCoCs9IHhpbGlueC1haS1lbmdpbmUvCj4+IGRpZmYgLS1naXQgYS9k cml2ZXJzL21pc2MveGlsaW54LWFpLWVuZ2luZS9NYWtlZmlsZSBiL2RyaXZlcnMvbWlzYy94aWxp bngtYWktCj4+IGVuZ2luZS9NYWtlZmlsZQo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRl eCAwMDAwMDAwLi43ODI3YTBhCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9taXNj L3hpbGlueC1haS1lbmdpbmUvTWFrZWZpbGUKPj4gQEAgLTAsMCArMSwxMSBAQAo+PiArIyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Cj4+ICsjCj4+ICsjIE1ha2VmaWxlIGZv ciBYaWxpbnggQUkgZW5naW5lIGRldmljZSBkcml2ZXIKPj4gKyMKPj4gKwo+PiArb2JqLSQoQ09O RklHX1hJTElOWF9BSUUpwqDCoMKgwqDCoMKgwqArPSB4aWxpbngtYWllLm8KPj4gKwo+PiAreGls aW54LWFpZS0kKENPTkZJR19YSUxJTlhfQUlFKSA6PSBhaS1lbmdpbmUtYWllLm8gXAo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGFpLWVuZ2luZS1kZXYubyBcCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYWktZW5naW5lLXBhcnQubyBc Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgYWktZW5naW5lLXJlcy5vCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21p c2MveGlsaW54LWFpLWVuZ2luZS9haS1lbmdpbmUtYWllLmMKPj4gYi9kcml2ZXJzL21pc2MveGls aW54LWFpLWVuZ2luZS9haS1lbmdpbmUtYWllLmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4g aW5kZXggMDAwMDAwMC4uMzE5MjYwZgo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2RyaXZlcnMv bWlzYy94aWxpbngtYWktZW5naW5lL2FpLWVuZ2luZS1haWUuYwo+PiBAQCAtMCwwICsxLDExNSBA QAo+PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPj4gKy8qCj4+ICsgKiBY aWxpbnggQUkgRW5naW5lIGRyaXZlciBBSUUgZGV2aWNlIHNwZWNpZmljIGltcGxlbWVudGF0aW9u Cj4+ICsgKgo+PiArICogQ29weXJpZ2h0IChDKSAyMDIwIFhpbGlueCwgSW5jLgo+PiArICovCj4+ ICsKPj4gKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4+ICsKPj4gKyNpbmNsdWRlICJhaS1lbmdp bmUtaW50ZXJuYWwuaCIKPj4gKwo+PiArI2RlZmluZSBBSUVfQVJSQVlfU0hJRlTCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoDMwVQo+PiArI2RlZmluZSBBSUVfQ09MX1NISUZUwqDCoMKg wqDCoMKgwqDCoMKgwqAyM1UKPj4gKyNkZWZpbmUgQUlFX1JPV19TSElGVMKgwqDCoMKgwqDCoMKg wqDCoMKgMThVCj4+ICsKPj4gKy8qCj4+ICsgKiBSZWdpc3RlcnMgb2Zmc2V0cwo+PiArICovCj4+ ICsjZGVmaW5lIEFJRV9TSElNTk9DX0wySU5UUl9NQVNLX1JFR09GRsKgwqDCoMKgwqDCoMKgwqDC oDB4MDAwMTUwMDBVCj4+ICsjZGVmaW5lIEFJRV9TSElNTk9DX0wySU5UUl9JTlRSX1JFR09GRsKg wqDCoMKgwqDCoMKgwqDCoDB4MDAwMTUwMTBVCj4+ICsjZGVmaW5lIEFJRV9TSElNTk9DX0RNQV9C RDBfQUREUkxPV19SRUdPRkbCoMKgwqDCoMKgMHgwMDAxZDAwMFUKPj4gKyNkZWZpbmUgQUlFX1NI SU1OT0NfRE1BX0JEMTVfUEFDS0VUX1JFR09GRsKgwqDCoMKgwqAweDAwMDFkMTNjVQo+PiArI2Rl ZmluZSBBSUVfU0hJTU5PQ19BWElNTV9SRUdPRkbCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAweDAwMDFlMDIwVQo+PiArI2RlZmluZSBBSUVfU0hJTVBMX0wxSU5UUl9NQVNLX0FfUkVHT0ZG wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDAwMDM1MDAwVQo+PiArI2RlZmluZSBB SUVfU0hJTVBMX0wxSU5UUl9CTE9DS19OT1JUSF9CX1JFR09GRsKgMHgwMDAzNTA1MFUKPj4gKyNk ZWZpbmUgQUlFX1NISU1QTF9DTEtDTlRSX1JFR09GRsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAweDAwMDM2MDQwVQo+PiArI2RlZmluZSBBSUVfU0hJTVBMX1JFU0VUX1JFR09GRsKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MDAwMzYwNGNVCj4+ICsj ZGVmaW5lIEFJRV9USUxFX0NPUkVfQ0xLQ05UUl9SRUdPRkbCoMKgwqDCoMKgwqDCoMKgwqDCoMKg MHgwMDAzNjA0MFUKPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBhaWVfdGlsZV9yZWdzIGFp ZV9rZXJuZWxfcmVnc1tdID0gewo+PiArwqDCoMKgwqDCoMKgwqAvKiBTSElNIEFYSSBNTSBDb25m aWcgKi8KPj4gK8KgwqDCoMKgwqDCoMKgey5hdHRyaWJ1dGUgPSBBSUVfVElMRV9UWVBFX1NISU1O T0MgPDwgQUlFX1JFR1NfQVRUUl9USUxFX1RZUEVfU0hJRlQsCj4+ICvCoMKgwqDCoMKgwqDCoCAu c29mZiA9IEFJRV9TSElNTk9DX0FYSU1NX1JFR09GRiwKPj4gK8KgwqDCoMKgwqDCoMKgIC5lb2Zm ID0gQUlFX1NISU1OT0NfQVhJTU1fUkVHT0ZGLAo+PiArwqDCoMKgwqDCoMKgwqB9LAo+PiArwqDC oMKgwqDCoMKgwqAvKiBTSElNIERNQSBBRERSRVNTIHJhbmdlICovCj4+ICvCoMKgwqDCoMKgwqDC oHsuYXR0cmlidXRlID0gQUlFX1RJTEVfVFlQRV9TSElNTk9DIDw8IEFJRV9SRUdTX0FUVFJfVElM RV9UWVBFX1NISUZULAo+PiArwqDCoMKgwqDCoMKgwqAgLnNvZmYgPSBBSUVfU0hJTU5PQ19ETUFf QkQwX0FERFJMT1dfUkVHT0ZGLAo+PiArwqDCoMKgwqDCoMKgwqAgLmVvZmYgPSBBSUVfU0hJTU5P Q19ETUFfQkQxNV9QQUNLRVRfUkVHT0ZGLAo+PiArwqDCoMKgwqDCoMKgwqB9LAo+PiArwqDCoMKg wqDCoMKgwqAvKiBTSElNIDJuZCBsZXZlbCBpbnRlcnJ1cHQgY29udHJvbGxlciAqLwo+PiArwqDC oMKgwqDCoMKgwqB7LmF0dHJpYnV0ZSA9IEFJRV9USUxFX1RZUEVfU0hJTU5PQyA8PCBBSUVfUkVH U19BVFRSX1RJTEVfVFlQRV9TSElGVCwKPj4gK8KgwqDCoMKgwqDCoMKgIC5zb2ZmID0gQUlFX1NI SU1OT0NfTDJJTlRSX01BU0tfUkVHT0ZGLAo+PiArwqDCoMKgwqDCoMKgwqAgLmVvZmYgPSBBSUVf U0hJTU5PQ19MMklOVFJfSU5UUl9SRUdPRkYsCj4+ICvCoMKgwqDCoMKgwqDCoH0sCj4+ICvCoMKg wqDCoMKgwqDCoC8qIFNISU0gMXN0IGxldmVsIGludGVycnVwdCBjb250cm9sbGVyICovCj4+ICvC oMKgwqDCoMKgwqDCoHsuYXR0cmlidXRlID0gKEFJRV9USUxFX1RZUEVfU0hJTVBMIHwgQUlFX1RJ TEVfVFlQRV9TSElNTk9DKSA8PAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBBSUVfUkVHU19BVFRSX1RJTEVfVFlQRV9TSElGVCwKPj4gK8KgwqDCoMKgwqDCoMKg IC5zb2ZmID0gQUlFX1NISU1QTF9MMUlOVFJfTUFTS19BX1JFR09GRiwKPj4gK8KgwqDCoMKgwqDC oMKgIC5lb2ZmID0gQUlFX1NISU1QTF9MMUlOVFJfQkxPQ0tfTk9SVEhfQl9SRUdPRkYsCj4+ICvC oMKgwqDCoMKgwqDCoH0sCj4+ICvCoMKgwqDCoMKgwqDCoC8qIFNISU0gcmVzZXQgRW5hYmxlICov Cj4+ICvCoMKgwqDCoMKgwqDCoHsuYXR0cmlidXRlID0gKEFJRV9USUxFX1RZUEVfU0hJTVBMIHwg QUlFX1RJTEVfVFlQRV9TSElNTk9DKSA8PAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBBSUVfUkVHU19BVFRSX1RJTEVfVFlQRV9TSElGVCwKPj4gK8KgwqDCoMKg wqDCoMKgIC5zb2ZmID0gQUlFX1NISU1QTF9SRVNFVF9SRUdPRkYsCj4+ICvCoMKgwqDCoMKgwqDC oCAuZW9mZiA9IEFJRV9TSElNUExfUkVTRVRfUkVHT0ZGLAo+PiArwqDCoMKgwqDCoMKgwqB9LAo+ PiArwqDCoMKgwqDCoMKgwqAvKiBTSElNIGNsb2NrIGNvbnRyb2wgKi8KPj4gK8KgwqDCoMKgwqDC oMKgey5hdHRyaWJ1dGUgPSAoQUlFX1RJTEVfVFlQRV9TSElNUEwgfCBBSUVfVElMRV9UWVBFX1NI SU1OT0MpIDw8Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFJ RV9SRUdTX0FUVFJfVElMRV9UWVBFX1NISUZULAo+PiArwqDCoMKgwqDCoMKgwqAgLnNvZmYgPSBB SUVfU0hJTVBMX0NMS0NOVFJfUkVHT0ZGLAo+PiArwqDCoMKgwqDCoMKgwqAgLmVvZmYgPSBBSUVf U0hJTVBMX0NMS0NOVFJfUkVHT0ZGLAo+PiArwqDCoMKgwqDCoMKgwqB9LAo+PiArwqDCoMKgwqDC oMKgwqAvKiBUaWxlIGNsb2NrIGNvbnRyb2wgKi8KPj4gK8KgwqDCoMKgwqDCoMKgey5hdHRyaWJ1 dGUgPSBBSUVfVElMRV9UWVBFX1RJTEUgPDwgQUlFX1JFR1NfQVRUUl9USUxFX1RZUEVfU0hJRlQs Cj4+ICvCoMKgwqDCoMKgwqDCoCAuc29mZiA9IEFJRV9USUxFX0NPUkVfQ0xLQ05UUl9SRUdPRkYs Cj4+ICvCoMKgwqDCoMKgwqDCoCAuZW9mZiA9IEFJRV9USUxFX0NPUkVfQ0xLQ05UUl9SRUdPRkYs Cj4+ICvCoMKgwqDCoMKgwqDCoH0sCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgdTMyIGFpZV9nZXRf dGlsZV90eXBlKHN0cnVjdCBhaWVfbG9jYXRpb24gKmxvYykKPj4gK3sKPj4gK8KgwqDCoMKgwqDC oMKgaWYgKGxvYy0+cm93KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJu IEFJRV9USUxFX1RZUEVfVElMRTsKPj4gK8KgwqDCoMKgwqDCoMKgLyogU0hJTSByb3cgKi8KPj4g K8KgwqDCoMKgwqDCoMKgaWYgKChsb2MtPmNvbCAlIDQpIDwgMikKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldHVybiBBSUVfVElMRV9UWVBFX1NISU1QTDsKPj4gKwo+PiArwqDC oMKgwqDCoMKgwqByZXR1cm4gQUlFX1RJTEVfVFlQRV9TSElNTk9DOwo+PiArfQo+PiArCj4+ICtz dGF0aWMgY29uc3Qgc3RydWN0IGFpZV90aWxlX29wZXJhdGlvbnMgYWllX29wcyA9IHsKPj4gK8Kg wqDCoMKgwqDCoMKgLmdldF90aWxlX3R5cGUgPSBhaWVfZ2V0X3RpbGVfdHlwZSwKPj4gK307Cj4+ ICsKPj4gKy8qKgo+PiArICogYWllX2RldmljZV9pbml0KCkgLSBJbml0aWFsaXplIEFJIGVuZ2lu ZSBkZXZpY2Ugc3RydWN0IEFJRSBzcGVjaWZpYwo+PiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBwcm9wZXJ0aWVzCj4+ICsgKiBAYWRldjogQUkgZW5naW5lIGRldmlj ZQo+PiArICogQHJldHVybjogMCBmb3Igc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgZm9yIGZhaWx1 cmUuCj4+ICsgKgo+PiArICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplIHRoZSBBSSBlbmdpbmUg ZGV2aWNlIHN0cnVjdHVyZSBkZXZpY2UgdmVyc2lvbgo+PiArICogc3BlY2lmaWMgZWxlbWVudHMg c3VjaCBhcyByZWdpc3RlciBhZGRyZXNzaW5nIHJlbGF0ZWQgYXJyYXkgc2hpZnQsCj4+ICsgKiBj b2x1bW4gc2hpZnQsIGFuZCByb3cgc2hpZnQ7IEFJRSBzcGVjaWZpYyBkZXZpY2Ugb3BlcmF0aW9u cywgZGV2aWNlCj4+ICsgKiBjb2x1bW5zIHJlc291cmNlLgo+PiArICovCj4+ICtpbnQgYWllX2Rl dmljZV9pbml0KHN0cnVjdCBhaWVfZGV2aWNlICphZGV2KQo+PiArewo+PiArwqDCoMKgwqDCoMKg wqBpbnQgcmV0Owo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoGFkZXYtPmFycmF5X3NoaWZ0ID0gQUlF X0FSUkFZX1NISUZUOwo+PiArwqDCoMKgwqDCoMKgwqBhZGV2LT5jb2xfc2hpZnQgPSBBSUVfQ09M X1NISUZUOwo+PiArwqDCoMKgwqDCoMKgwqBhZGV2LT5yb3dfc2hpZnQgPSBBSUVfUk9XX1NISUZU Owo+PiArwqDCoMKgwqDCoMKgwqBhZGV2LT5vcHMgPSAmYWllX29wczsKPj4gK8KgwqDCoMKgwqDC oMKgYWRldi0+bnVtX2tlcm5lbF9yZWdzID0gQVJSQVlfU0laRShhaWVfa2VybmVsX3JlZ3MpOwo+ PiArwqDCoMKgwqDCoMKgwqBhZGV2LT5rZXJuZWxfcmVncyA9IGFpZV9rZXJuZWxfcmVnczsKPj4g Kwo+PiArwqDCoMKgwqDCoMKgwqAvKiBHZXQgdGhlIGNvbHVtbnMgcmVzb3VyY2UgKi8KPj4gK8Kg wqDCoMKgwqDCoMKgLyogR2V0IG51bWJlciBvZiBjb2x1bW5zIGZyb20gQUkgZW5naW5lIG1lbW9y eSByZXNvdXJjZSAqLwo+PiArwqDCoMKgwqDCoMKgwqByZXQgPSBhaWVfcmVzb3VyY2VfaW5pdGlh bGl6ZSgmYWRldi0+Y29sc19yZXMsIDUwKTsKPj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoJmFkZXYtPmRldiwgImZhaWxl ZCB0byBpbml0aWFsaXplIGNvbHVtbnMKPj4gcmVzb3VyY2UuXG4iKTsKPj4gKwo+PiArwqDCoMKg wqDCoMKgwqByZXR1cm4gcmV0Owo+PiArfQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3hp bGlueC1haS1lbmdpbmUvYWktZW5naW5lLWRldi5jCj4+IGIvZHJpdmVycy9taXNjL3hpbGlueC1h aS1lbmdpbmUvYWktZW5naW5lLWRldi5jCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4 IDAwMDAwMDAuLjJhYjJkYzgKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9kcml2ZXJzL21pc2Mv eGlsaW54LWFpLWVuZ2luZS9haS1lbmdpbmUtZGV2LmMKPj4gQEAgLTAsMCArMSw0NDggQEAKPj4g Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4+ICsvKgo+PiArICogWGlsaW54 IEFJIEVuZ2luZSBkZXZpY2UgZHJpdmVyCj4+ICsgKgo+PiArICogQ29weXJpZ2h0IChDKSAyMDIw IFhpbGlueCwgSW5jLgo+PiArICovCj4+ICsKPj4gKyNpbmNsdWRlIDxsaW51eC9hbm9uX2lub2Rl cy5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9kZWxh eS5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2Rt YS1tYXBwaW5nLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvZmlsZS5oPgo+PiArI2luY2x1ZGUgPGxp bnV4L2ZzLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvaWRyLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgv bGlzdC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+PiArI2luY2x1ZGUgPGxpbnV4 L211dGV4Lmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9v Zl9kZXZpY2UuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPj4gKyNp bmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgo+PiAr I2luY2x1ZGUgPHVhcGkvbGludXgveGxueC1haS1lbmdpbmUuaD4KPj4gKwo+PiArI2luY2x1ZGUg ImFpLWVuZ2luZS1pbnRlcm5hbC5oIgo+PiArCj4+ICsjZGVmaW5lIEFJRV9ERVZfTUFYwqDCoMKg wqAoTUlOT1JNQVNLICsgMSkKPj4gKwo+PiArc3RhdGljIGRldl90IGFpZV9tYWpvcjsKPj4gK3N0 cnVjdCBjbGFzcyAqYWllX2NsYXNzOwo+PiArCj4+ICtzdGF0aWMgREVGSU5FX0lEQShhaWVfZGV2 aWNlX2lkYSk7Cj4+ICtzdGF0aWMgREVGSU5FX0lEQShhaWVfbWlub3JfaWRhKTsKPj4gKwo+PiAr LyoqCj4+ICsgKiBhaWVfZ2V0X3BhcnRpdGlvbl9mZCgpIC0gR2V0IEFJIGVuZ2luZSBwYXJ0aXRp b24gZmlsZSBkZXNjcmlwdG9yCj4+ICsgKiBAYXBhcnQ6IEFJIGVuZ2luZSBwYXJ0aXRpb24KPj4g KyAqIEByZXR1cm46IGZpbGUgZGVzY3JpcHRvciBmb3IgQUkgZW5naW5lIHBhcnRpdGlvbiBmb3Ig c3VjY2Vzcywgb3IgbmVnYXRpdmUKPj4gKyAqwqDCoMKgwqDCoMKgwqDCoCB2YWx1ZSBmb3IgZmFp bHVyZS4KPj4gKyAqCj4+ICsgKiBUaGlzIGZ1bmN0aW9uIGdldHMgYSBmaWxlIGRlc2NyaXB0b3Ig Zm9yIHRoZSBBSSBlbmdpbmUgcGFydGl0aW9uLgo+PiArICovCj4+ICtzdGF0aWMgaW50IGFpZV9n ZXRfcGFydGl0aW9uX2ZkKHN0cnVjdCBhaWVfcGFydGl0aW9uICphcGFydCkKPj4gK3sKPj4gK8Kg wqDCoMKgwqDCoMKgc3RydWN0IGZpbGUgKmZpbGVwOwo+PiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0 Owo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoC8qCj4+ICvCoMKgwqDCoMKgwqDCoCAqIFdlIGNhbid0 IHVzZSBhbm9uX2lub2RlX2dldGZkKCkgYmVjYXVzZSB3ZSBuZWVkIHRvIG1vZGlmeQo+PiArwqDC oMKgwqDCoMKgwqAgKiB0aGUgZl9tb2RlIGZsYWdzIGRpcmVjdGx5IHRvIGFsbG93IG1vcmUgdGhh biBqdXN0IGlvY3Rscwo+PiArwqDCoMKgwqDCoMKgwqAgKi8KPj4gK8KgwqDCoMKgwqDCoMKgcmV0 ID0gZ2V0X3VudXNlZF9mZF9mbGFncyhPX0NMT0VYRUMpOwo+PiArwqDCoMKgwqDCoMKgwqBpZiAo cmV0IDwgMCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4+ ICsKPj4gK8KgwqDCoMKgwqDCoMKgZmlsZXAgPSBhbm9uX2lub2RlX2dldGZpbGUoZGV2X25hbWUo JmFwYXJ0LT5kZXYpLCAmYWllX3BhcnRfZm9wcywKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhcGFydCwgT19SRFdS KTsKPj4gK8KgwqDCoMKgwqDCoMKgaWYgKElTX0VSUihmaWxlcCkpIHsKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHB1dF91bnVzZWRfZmQocmV0KTsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldCA9IFBUUl9FUlIoZmlsZXApOwo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPj4gK8KgwqDCoMKgwqDCoMKgfQo+PiArwqDCoMKg wqDCoMKgwqBmaWxlcC0+Zl9tb2RlIHw9IChGTU9ERV9MU0VFSyB8IEZNT0RFX1BSRUFEIHwgRk1P REVfUFdSSVRFKTsKPj4gK8KgwqDCoMKgwqDCoMKgZmRfaW5zdGFsbChyZXQsIGZpbGVwKTsKPj4g Kwo+PiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICsvKioKPj4gKyAq IGFpZV9lbnF1aXJlX3BhcnRpdGlvbnMoKSAtIGdldCBBSSBlbmdpbmUgcGFydGl0aW9ucyBpbmZv cm1hdGlvbgo+PiArICogQGFkZXY6IEFJIGVuZ2luZSBkZXZpY2UKPj4gKyAqIEBxdWVyeTogZGF0 YSBzdHJ1Y3QgdG8gc3RvcmUgdGhlIHBhcnRpdGlvbiBpbmZvcm1hdGlvbgo+PiArICogQHJldHVy bjogMCBmb3Igc3VjY2VzcywgYW5kIG5lZ2F0aXZlIHZhbHVlIGZvciBmYWlsdXJlLgo+PiArICov Cj4+ICtzdGF0aWMgaW50IGFpZV9lbnF1aXJlX3BhcnRpdGlvbnMoc3RydWN0IGFpZV9kZXZpY2Ug KmFkZXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBhaWVfcGFydGl0aW9uX3F1ZXJ5ICpxdWVyeSkKPj4g K3sKPj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9wYXJ0aXRpb24gKmFwYXJ0Owo+PiArwqDC oMKgwqDCoMKgwqB1MzIgcGFydGl0aW9uX2NudCwgaSA9IDA7Cj4+ICvCoMKgwqDCoMKgwqDCoGlu dCByZXQ7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFxdWVyeS0+cGFydGl0aW9ucykgewo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyoKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAqIElmIHBhcnRpdGlvbnMgaW5mb3JtYXRpb24gYnVmZmVyIGlzIE5VTEwu Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBJdCBpcyB0byBnZXQgdGhlIG51 bWJlciBvZiBwYXJ0aXRpb25zLgo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICov Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBxdWVyeS0+cGFydGl0aW9uX2NudCA9 IDA7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsaXN0X2Zvcl9lYWNoX2VudHJ5 KGFwYXJ0LCAmYWRldi0+cGFydGl0aW9ucywgbm9kZSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBxdWVyeS0+cGFydGl0aW9uX2NudCsrOwo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4+ICvCoMKgwqDCoMKgwqDCoH0K Pj4gKwo+PiArwqDCoMKgwqDCoMKgwqBwYXJ0aXRpb25fY250ID0gcXVlcnktPnBhcnRpdGlvbl9j bnQ7Cj4+ICvCoMKgwqDCoMKgwqDCoGlmICghcGFydGl0aW9uX2NudCkKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoHJldCA9 IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYWRldi0+bWxvY2spOwo+PiArwqDCoMKgwqDCoMKg wqBpZiAocmV0KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsK Pj4gKwo+PiArwqDCoMKgwqDCoMKgwqBsaXN0X2Zvcl9lYWNoX2VudHJ5KGFwYXJ0LCAmYWRldi0+ cGFydGl0aW9ucywgbm9kZSkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3Ry dWN0IGFpZV9yYW5nZV9hcmdzIHBhcnQ7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGlmIChpID49IHBhcnRpdGlvbl9jbnQpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBwYXJ0LnBhcnRpdGlvbl9pZCA9IGFwYXJ0LT5wYXJ0aXRpb25faWQ7Cj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKgo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICogVEJEOiBjaGVjayB3aXRoIFBMTSB0aGF0IGlmIHRoZSBwYXJ0aXRpb24gaXMgcHJv Z3JhbW1lZAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogYW5kIGdldCB0aGUg VUlEIG9mIHRoZSBpbWFnZSB3aGljaCBpcyBsb2FkZWQgb24gdGhlIEFJCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBlbmdpbmUgcGFydGl0aW9uLgo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICovCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBw YXJ0LnVpZCA9IDA7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYXJ0LnJhbmdl LnN0YXJ0LmNvbCA9IGFwYXJ0LT5yYW5nZS5zdGFydC5jb2w7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBwYXJ0LnJhbmdlLnN0YXJ0LnJvdyA9IGFwYXJ0LT5yYW5nZS5zdGFydC5y b3c7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYXJ0LnJhbmdlLnNpemUuY29s ID0gYXBhcnQtPnJhbmdlLnNpemUuY29sOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcGFydC5yYW5nZS5zaXplLnJvdyA9IGFwYXJ0LT5yYW5nZS5zaXplLnJvdzsKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIENoZWNrIGlmIHBhcnRpdGlvbiBpcyBpbiB1c2Ug Ki8KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBhcnQuc3RhdHVzID0gYXBhcnQt PnN0YXR1czsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChjb3B5X3RvX3Vz ZXIoKHZvaWQgX191c2VyICopJnF1ZXJ5LT5wYXJ0aXRpb25zW2ldLCAmcGFydCwKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHNpemVvZihwYXJ0KSkpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBtdXRleF91bmxvY2soJmFkZXYtPm1sb2NrKTsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVGQVVMVDsKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGkrKzsKPj4gK8KgwqDCoMKgwqDCoMKgfQo+PiArwqDCoMKgwqDCoMKgwqBtdXRleF91bmxv Y2soJmFkZXYtPm1sb2NrKTsKPj4gK8KgwqDCoMKgwqDCoMKgcXVlcnktPnBhcnRpdGlvbl9jbnQg PSBpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+PiArfQo+PiArCj4+ICsvKioK Pj4gKyAqIGFpZV9nZXRfcGFydGl0aW9uX2Zyb21faWQoKSAtIGdldCBBSSBlbmdpbmUgcGFydGl0 aW9uIGZyb20gaWQKPj4gKyAqIEBhZGV2OiBBSSBlbmdpbmUgZGV2aWNlCj4+ICsgKiBAcGFydGl0 aW9uX2lkOiBwYXJ0aXRpb24gaWQgdG8gY2hlY2sKPj4gKyAqIEByZXR1cm46IHBhcnRpdGlvbiBw b2ludGVyIGlmIHBhcnRpdGlvbiBleGlzdHMsIG90aGVyd2lzZSwgTlVMTC4KPj4gKyAqCj4+ICsg KiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBkZWZpbmVkIHBhcnRpdGlvbnMgd2l0aCBwYXJ0aXRpb24g aWQuCj4+ICsgKiBUaGlzIGZ1bmN0aW9uIGV4cGVjdCB0aGUgY2FsbGVyIHRvIGxvY2sgbWxvY2sg b2YgQGFkZXYuCj4+ICsgKi8KPj4gK3N0cnVjdCBhaWVfcGFydGl0aW9uICphaWVfZ2V0X3BhcnRp dGlvbl9mcm9tX2lkKHN0cnVjdCBhaWVfZGV2aWNlICphZGV2LAo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHUzMiBwYXJ0aXRpb25faWQpCj4+ICt7Cj4+ICvCoMKgwqDC oMKgwqDCoHN0cnVjdCBhaWVfcGFydGl0aW9uICphcGFydDsKPj4gKwo+PiArwqDCoMKgwqDCoMKg wqBsaXN0X2Zvcl9lYWNoX2VudHJ5KGFwYXJ0LCAmYWRldi0+cGFydGl0aW9ucywgbm9kZSkgewo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGFwYXJ0LT5wYXJ0aXRpb25faWQg PT0gcGFydGl0aW9uX2lkKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldHVybiBhcGFydDsKPj4gK8KgwqDCoMKgwqDCoMKgfQo+PiArCj4+ICvCoMKg wqDCoMKgwqDCoHJldHVybiBOVUxMOwo+PiArfQo+PiArCj4+ICsvKioKPj4gKyAqIGFpZV9yZXF1 ZXN0X3BhcnRpdGlvbigpIC0gcmVxdWVzdCBBSSBlbmdpbmUgcGFydGl0aW9uCj4+ICsgKiBAYWRl djogQUkgZW5naW5lIGRldmljZQo+PiArICogQHJlcTogcGFydGl0aW9uIHJlcXVlc3QsIGluY2x1 ZGVzIHRoZSByZXF1ZXN0ZWQgQUkgZW5naW5lIGluZm9ybWF0aW9uCj4+ICsgKsKgwqDCoMKgwqAg c3VjaCBhcyBwYXJ0aXRpb24gbm9kZSBJRCBhbmQgdGhlIFVJRCBvZiB0aGUgaW1hZ2Ugd2hpY2gg aXMKPj4gKyAqwqDCoMKgwqDCoCBsb2FkZWQgb24gdGhlIHBhcnRpdGlvbi4KPj4gKyAqIEByZXR1 cm46IHBhcnRpdGlvbiBwb2ludGVyIGlmIHBhcnRpdGlvbiBleGlzdHMsIG90aGVyd2lzZSwgTlVM TC4KPj4gKyAqCj4+ICsgKiBUaGlzIGZ1bmN0aW9uIGZpbmRzIGEgZGVmaW5lZCBwYXJ0aXRpb24g d2hpY2ggbWF0Y2hlcyB0aGUgc3BlY2lmaWVkCj4+ICsgKiBwYXJ0aXRpb24gaWQsIHJlcXVlc3Qg aXQgaWYgaXQgaGFzbid0IGJlZW4gcmVxdWVzdGVkLCBhbmQgcmV0dXJucyBpdC4KPj4gKyAqLwo+ PiArc3RydWN0IGFpZV9wYXJ0aXRpb24gKmFpZV9yZXF1ZXN0X3BhcnRpdGlvbihzdHJ1Y3QgYWll X2RldmljZSAqYWRldiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgYWll X3BhcnRpdGlvbl9yZXEgKnJlcSkKPj4gK3sKPj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9w YXJ0aXRpb24gKmFwYXJ0Owo+PiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+PiArCj4+ICvCoMKg wqDCoMKgwqDCoHJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYWRldi0+bWxvY2spOwo+ PiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0dXJuIEVSUl9QVFIocmV0KTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqBhcGFydCA9IGFp ZV9nZXRfcGFydGl0aW9uX2Zyb21faWQoYWRldiwgcmVxLT5wYXJ0aXRpb25faWQpOwo+PiArwqDC oMKgwqDCoMKgwqBpZiAoIWFwYXJ0KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBkZXZfZXJyKCZhZGV2LT5kZXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgInJlcXVlc3QgcGFydGl0aW9uICV1IGZhaWxlZCwgbm90IGV4aXN0Llxu IiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXEt PnBhcnRpdGlvbl9pZCk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtdXRleF91 bmxvY2soJmFkZXYtPm1sb2NrKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJl dHVybiBFUlJfUFRSKC1FSU5WQUwpOwo+PiArwqDCoMKgwqDCoMKgwqB9Cj4+ICvCoMKgwqDCoMKg wqDCoC8qCj4+ICvCoMKgwqDCoMKgwqDCoCAqIFRCRDogSXQgd2lsbCBjaGVjayBpbWFnZSBVSUQg dG9vIHRvIHNlZSBpZiB0aGUgdXNlciBtYXRjaGVzCj4+ICvCoMKgwqDCoMKgwqDCoCAqIHdoYXQn cyBsb2FkZWQgaW4gdGhlIEFJIGVuZ2luZSBwYXJ0aXRpb24uIEFuZCBjaGVjayB0aGUgbWV0YQo+ PiArwqDCoMKgwqDCoMKgwqAgKiBkYXRhIHRvIHNlZSB3aGljaCByZXNvdXJjZXMgdXNlZCBieSBh cHBsaWNhdGlvbi4KPj4gK8KgwqDCoMKgwqDCoMKgICovCj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKg cmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZhcGFydC0+bWxvY2spOwo+PiArwqDCoMKg wqDCoMKgwqBpZiAocmV0KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJu IEVSUl9QVFIocmV0KTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqBpZiAoYXBhcnQtPnN0YXR1cyAm IFhBSUVfUEFSVF9TVEFUVVNfSU5VU0UpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoG11dGV4X3VubG9jaygmYXBhcnQtPm1sb2NrKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGRldl9lcnIoJmFkZXYtPmRldiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAicmVxdWVzdCBwYXJ0aXRpb24gJXUgZmFpbGVkLCBwYXJ0 aXRpb24gaW4gdXNlLlxuIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXEtPnBhcnRpdGlvbl9pZCk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBhcGFydCA9IEVSUl9QVFIoLUVCVVNZKTsKPj4gK8KgwqDCoMKgwqDCoMKgfSBlbHNl IHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgKiBUQkQ6Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgKiAxLiBzZXR1cCBOT0MgQVhJIE1NIGNvbmZpZyB0byBvbmx5IGdlbmVyYXRlIGVycm9yIGV2 ZW50cwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICrCoMKgwqAgZm9yIHNsYXZl IGVycm9yIGFuZCBkZWNvZGUgZXJyb3IuCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgKiAyLiBzY2FuIHRvIHNlZSB3aGljaCB0aWxlcyBoYXZlIGJlZW4gY2xvY2sgZ2F0ZWQuCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKgo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICogVGhpcyBuZWVkcyB0byBiZSBkb25lIGJlZm9yZSB0aGUgQUkgZW5naW5l IHBhcnRpdGlvbiBpcwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogZXhwb3J0 ZWQgZm9yIHVzZXIgdG8gYWNjZXNzLgo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICovCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBhcGFydC0+c3RhdHVzID0gWEFJ RV9QQVJUX1NUQVRVU19JTlVTRTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG11 dGV4X3VubG9jaygmYXBhcnQtPm1sb2NrKTsKPj4gK8KgwqDCoMKgwqDCoMKgfQo+PiArwqDCoMKg wqDCoMKgwqBtdXRleF91bmxvY2soJmFkZXYtPm1sb2NrKTsKPj4gKwo+PiArwqDCoMKgwqDCoMKg wqByZXR1cm4gYXBhcnQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBsb25nIHhpbGlueF9haV9lbmdp bmVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgdW5zaWduZWQgbG9uZyBhcmcpCj4+ICt7Cj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBpbm9k ZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbHApOwo+PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWll X2RldmljZSAqYWRldiA9IGNkZXZfdG9fYWllZGV2KGlub2RlLT5pX2NkZXYpOwo+PiArwqDCoMKg wqDCoMKgwqB2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKPj4gK8KgwqDC oMKgwqDCoMKgaW50IHJldDsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqBzd2l0Y2ggKGNtZCkgewo+ PiArwqDCoMKgwqDCoMKgwqBjYXNlIEFJRV9FTlFVSVJFX1BBUlRfSU9DVEw6Cj4+ICvCoMKgwqDC oMKgwqDCoHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBhaWVfcGFy dGl0aW9uX3F1ZXJ5IHF1ZXJ5Owo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3Ry dWN0IGFpZV9wYXJ0aXRpb25fcXVlcnnCoCBfX3VzZXIgKnVxdWVyeV9wdHIgPSBhcmdwOwo+PiAr Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoY29weV9mcm9tX3VzZXIoJnF1 ZXJ5LCB1cXVlcnlfcHRyLCBzaXplb2YocXVlcnkpKSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVGQVVMVDsKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IGFpZV9lbnF1aXJlX3BhcnRpdGlvbnMoYWRldiwgJnF1 ZXJ5KTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKQo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7 Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoY29weV90b191c2VyKCh2b2lk IF9fdXNlciAqKSZ1cXVlcnlfcHRyLT5wYXJ0aXRpb25fY250LAo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJnF1ZXJ5LnBh cnRpdGlvbl9jbnQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplb2YocXVlcnkucGFydGl0aW9uX2NudCkpKQo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUZB VUxUOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4+ICvCoMKgwqDC oMKgwqDCoH0KPj4gK8KgwqDCoMKgwqDCoMKgY2FzZSBBSUVfUkVRVUVTVF9QQVJUX0lPQ1RMOgo+ PiArwqDCoMKgwqDCoMKgwqB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1 Y3QgYWllX3BhcnRpdGlvbl9yZXEgcmVxOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgc3RydWN0IGFpZV9wYXJ0aXRpb24gKmFwYXJ0Owo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBpZiAoY29weV9mcm9tX3VzZXIoJnJlcSwgYXJncCwgc2l6ZW9mKHJlcSkp KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy biAtRUZBVUxUOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYXBhcnQgPSBhaWVf cmVxdWVzdF9wYXJ0aXRpb24oYWRldiwgJnJlcSk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBpZiAoSVNfRVJSKGFwYXJ0KSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gUFRSX0VSUihhcGFydCk7Cj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBhaWVfZ2V0X3BhcnRpdGlvbl9mZChhcGFydCk7Cj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmV0IDwgMCkgewo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoJmFwYXJ0LT5k ZXYsICJmYWlsZWQgdG8gZ2V0IGZkLlxuIik7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB9Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPj4gK8KgwqDC oMKgwqDCoMKgfQo+PiArwqDCoMKgwqDCoMKgwqBkZWZhdWx0Ogo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgZGV2X2VycigmYWRldi0+ZGV2LCAiSW52YWxpZCBpb2N0bCBjb21tYW5k ICV1LlxuIiwgY21kKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IC1F SU5WQUw7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPj4gK8KgwqDC oMKgwqDCoMKgfQo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4+ICt9Cj4+ICsK Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFpZV9kZXZpY2VfZm9wcyA9 IHsKPj4gK8KgwqDCoMKgwqDCoMKgLm93bmVywqDCoMKgwqDCoMKgwqDCoMKgwqA9IFRISVNfTU9E VUxFLAo+PiArwqDCoMKgwqDCoMKgwqAudW5sb2NrZWRfaW9jdGzCoD0geGlsaW54X2FpX2VuZ2lu ZV9pb2N0bCwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHhpbGlueF9haV9lbmdpbmVfcmVs ZWFzZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQo+PiArewo+PiArwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgYWllX2RldmljZSAqYWRldiA9IGRldl90b19haWVkZXYoZGV2KTsKPj4gKwo+PiArwqDC oMKgwqDCoMKgwqBpZGFfc2ltcGxlX3JlbW92ZSgmYWllX2RldmljZV9pZGEsIGRldi0+aWQpOwo+ PiArwqDCoMKgwqDCoMKgwqBpZGFfc2ltcGxlX3JlbW92ZSgmYWllX21pbm9yX2lkYSwgTUlOT1Io ZGV2LT5kZXZ0KSk7Cj4+ICvCoMKgwqDCoMKgwqDCoGNkZXZfZGVsKCZhZGV2LT5jZGV2KTsKPj4g K8KgwqDCoMKgwqDCoMKgYWllX3Jlc291cmNlX3VuaW5pdGlhbGl6ZSgmYWRldi0+Y29sc19yZXMp Owo+PiArfQo+PiArCj4+ICsvKioKPj4gKyAqIG9mX3hpbGlueF9haV9lbmdpbmVfcGFydF9wcm9i ZSgpIC0gcHJvYmVzIGZvciBBSSBlbmdpbmUgcGFydGl0aW9uIG5vZGVzCj4+ICsgKiBAYWRldjog QUkgZW5naW5lIGRldmljZQo+PiArICoKPj4gKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBwcm9iZSBm b3IgY2hpbGRyZW4gQUkgZW5naW5lIHBhcnRpdGlvbiBub2RlcyBhbmQgY3JlYXRlCj4+ICsgKiBh biBBSSBlbmdpbmUgcGFydGl0aW9uIGluc3RhbmNlIGZvciBlYWNoIG5vZGUuCj4+ICsgKi8KPj4g K3N0YXRpYyB2b2lkIG9mX3hpbGlueF9haV9lbmdpbmVfcGFydF9wcm9iZShzdHJ1Y3QgYWllX2Rl dmljZSAqYWRldikKPj4gK3sKPj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRldmljZV9ub2RlICpu YzsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqBmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9k ZShhZGV2LT5kZXYub2Zfbm9kZSwgbmMpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHN0cnVjdCBhaWVfcGFydGl0aW9uICphcGFydDsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgaWYgKG9mX25vZGVfdGVzdF9hbmRfc2V0X2ZsYWcobmMsIE9GX1BPUFVM QVRFRCkpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg Y29udGludWU7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBhcGFydCA9IG9mX2Fp ZV9wYXJ0X3Byb2JlKGFkZXYsIG5jKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGlmIChJU19FUlIoYXBhcnQpKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgZGV2X2VycigmYWRldi0+ZGV2LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiRmFpbGVkIHRvIHBy b2JlIEFJIGVuZ2luZSBwYXJ0IGZvciAlcE9GXG4iLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBuYyk7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgb2Zfbm9kZV9jbGVhcl9mbGFn KG5jLCBPRl9QT1BVTEFURUQpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ PiArwqDCoMKgwqDCoMKgwqB9Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgeGlsaW54X2FpX2Vu Z2luZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+PiArewo+PiArwqDCoMKg wqDCoMKgwqBzdHJ1Y3QgYWllX2RldmljZSAqYWRldjsKPj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0 IGRldmljZSAqZGV2Owo+PiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+PiArCj4+ICvCoMKgwqDC oMKgwqDCoGFkZXYgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCphZGV2KSwgR0ZQ X0tFUk5FTCk7Cj4+ICvCoMKgwqDCoMKgwqDCoGlmICghYWRldikKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRU5PTUVNOwo+PiArwqDCoMKgwqDCoMKgwqBwbGF0Zm9y bV9zZXRfZHJ2ZGF0YShwZGV2LCBhZGV2KTsKPj4gK8KgwqDCoMKgwqDCoMKgSU5JVF9MSVNUX0hF QUQoJmFkZXYtPnBhcnRpdGlvbnMpOwo+PiArwqDCoMKgwqDCoMKgwqBtdXRleF9pbml0KCZhZGV2 LT5tbG9jayk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgYWRldi0+cmVzID0gcGxhdGZvcm1fZ2V0 X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKPj4gK8KgwqDCoMKgwqDCoMKgaWYg KCFhZGV2LT5yZXMpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIo JnBkZXYtPmRldiwgIk5vIG1lbW9yeSByZXNvdXJjZS5cbiIpOwo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7Cj4+ICvCoMKgwqDCoMKgwqDCoH0KPj4gK8Kg wqDCoMKgwqDCoMKgYWRldi0+YmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2 LCBhZGV2LT5yZXMpOwo+PiArwqDCoMKgwqDCoMKgwqBpZiAoSVNfRVJSKGFkZXYtPmJhc2UpKSB7 Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKCZwZGV2LT5kZXYsICJu byBpbyBtZW1vcnkgcmVzb3VyY2UuXG4iKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldHVybiBQVFJfRVJSKGFkZXYtPmJhc2UpOwo+PiArwqDCoMKgwqDCoMKgwqB9Cj4+ICsK Pj4gK8KgwqDCoMKgwqDCoMKgLyogSW5pdGlhbGl6ZSBBSUUgZGV2aWNlIHNwZWNpZmljIGluc3Rh bmNlLiAqLwo+PiArwqDCoMKgwqDCoMKgwqByZXQgPSBhaWVfZGV2aWNlX2luaXQoYWRldik7Cj4+ ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBkZXZpY2UK Pj4gaW5zdGFuY2UuXG4iKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy biByZXQ7Cj4+ICvCoMKgwqDCoMKgwqDCoH0KPj4gKwo+PiArwqDCoMKgwqDCoMKgwqBkZXYgPSAm YWRldi0+ZGV2Owo+PiArwqDCoMKgwqDCoMKgwqBkZXZpY2VfaW5pdGlhbGl6ZShkZXYpOwo+PiAr wqDCoMKgwqDCoMKgwqBkZXYtPmNsYXNzID0gYWllX2NsYXNzOwo+PiArwqDCoMKgwqDCoMKgwqBk ZXYtPnBhcmVudCA9ICZwZGV2LT5kZXY7Cj4+ICvCoMKgwqDCoMKgwqDCoGRldi0+b2Zfbm9kZSA9 IHBkZXYtPmRldi5vZl9ub2RlOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGlkYV9zaW1w bGVfZ2V0KCZhaWVfbWlub3JfaWRhLCAwLCBBSUVfREVWX01BWCwgR0ZQX0tFUk5FTCk7Cj4+ICvC oMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgZ290byBmcmVlX2RldjsKPj4gK8KgwqDCoMKgwqDCoMKgZGV2LT5kZXZ0ID0gTUtERVYoTUFK T1IoYWllX21ham9yKSwgcmV0KTsKPj4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gaWRhX3NpbXBsZV9n ZXQoJmFpZV9kZXZpY2VfaWRhLCAwLCAwLCBHRlBfS0VSTkVMKTsKPj4gK8KgwqDCoMKgwqDCoMKg aWYgKHJldCA8IDApCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGZyZWVf bWlub3JfaWRhOwo+PiArwqDCoMKgwqDCoMKgwqBkZXYtPmlkID0gcmV0Owo+PiArwqDCoMKgwqDC oMKgwqBkZXZfc2V0X25hbWUoJmFkZXYtPmRldiwgImFpZSVkIiwgZGV2LT5pZCk7Cj4+ICsKPj4g K8KgwqDCoMKgwqDCoMKgY2Rldl9pbml0KCZhZGV2LT5jZGV2LCAmYWllX2RldmljZV9mb3BzKTsK Pj4gK8KgwqDCoMKgwqDCoMKgYWRldi0+Y2Rldi5vd25lciA9IFRISVNfTU9EVUxFOwo+PiArwqDC oMKgwqDCoMKgwqByZXQgPSBjZGV2X2FkZCgmYWRldi0+Y2RldiwgZGV2LT5kZXZ0LCAxKTsKPj4g K8KgwqDCoMKgwqDCoMKgaWYgKHJldCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGdvdG8gZnJlZV9pZGE7Cj4+ICvCoMKgwqDCoMKgwqDCoC8qIFdlIGNhbiBub3cgcmVseSBvbiB0 aGUgcmVsZWFzZSBmdW5jdGlvbiBmb3IgY2xlYW51cCAqLwo+PiArwqDCoMKgwqDCoMKgwqBkZXYt PnJlbGVhc2UgPSB4aWxpbnhfYWlfZW5naW5lX3JlbGVhc2VfZGV2aWNlOwo+PiArCj4+ICvCoMKg wqDCoMKgwqDCoHJldCA9IGRldmljZV9hZGQoZGV2KTsKPj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJl dCkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycigmcGRldi0+ZGV2 LCAiZGV2aWNlX2FkZCBmYWlsZWQ6ICVkXG4iLCByZXQpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcHV0X2RldmljZShkZXYpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuIHJldDsKPj4gK8KgwqDCoMKgwqDCoMKgfQo+PiArCj4+ICvCoMKgwqDCoMKg wqDCoG9mX3hpbGlueF9haV9lbmdpbmVfcGFydF9wcm9iZShhZGV2KTsKPj4gK8KgwqDCoMKgwqDC oMKgZGV2X2luZm8oJnBkZXYtPmRldiwgIlhpbGlueCBBSSBFbmdpbmUgZGV2aWNlKGNvbHM9JXUp IHByb2JlZFxuIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhZGV2LT5jb2xz X3Jlcy50b3RhbCk7Cj4+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+PiArCj4+ICtmcmVlX2lk YToKPj4gK8KgwqDCoMKgwqDCoMKgaWRhX3NpbXBsZV9yZW1vdmUoJmFpZV9kZXZpY2VfaWRhLCBk ZXYtPmlkKTsKPj4gK2ZyZWVfbWlub3JfaWRhOgo+PiArwqDCoMKgwqDCoMKgwqBpZGFfc2ltcGxl X3JlbW92ZSgmYWllX21pbm9yX2lkYSwgTUlOT1IoZGV2LT5kZXZ0KSk7Cj4+ICtmcmVlX2RldjoK Pj4gK8KgwqDCoMKgwqDCoMKgcHV0X2RldmljZShkZXYpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDC oHJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgeGlsaW54X2FpX2VuZ2luZV9y ZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPj4gK3sKPj4gK8KgwqDCoMKgwqDC oMKgc3RydWN0IGFpZV9kZXZpY2UgKmFkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsK Pj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9wYXJ0aXRpb24gKmFwYXJ0Owo+PiArCj4+ICvC oMKgwqDCoMKgwqDCoGxpc3RfZm9yX2VhY2hfZW50cnkoYXBhcnQsICZhZGV2LT5wYXJ0aXRpb25z LCBub2RlKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYWllX3BhcnRfcmVtb3Zl KGFwYXJ0KTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqBkZXZpY2VfZGVsKCZhZGV2LT5kZXYpOwo+ PiArwqDCoMKgwqDCoMKgwqBwdXRfZGV2aWNlKCZhZGV2LT5kZXYpOwo+PiArCj4+ICvCoMKgwqDC oMKgwqDCoHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2Rl dmljZV9pZCB4aWxpbnhfYWlfZW5naW5lX29mX21hdGNoW10gPSB7Cj4+ICvCoMKgwqDCoMKgwqDC oHsgLmNvbXBhdGlibGUgPSAieGxueCxhaS1lbmdpbmUtdjEuMCIsIH0sCj4+ICvCoMKgwqDCoMKg wqDCoHsgLyogZW5kIG9mIHRhYmxlICovIH0sCj4+ICt9Owo+PiArTU9EVUxFX0RFVklDRV9UQUJM RShvZiwgeGlsaW54X2FpX2VuZ2luZV9vZl9tYXRjaCk7Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3Qg cGxhdGZvcm1fZHJpdmVyIHhpbGlueF9haV9lbmdpbmVfZHJpdmVyID0gewo+PiArwqDCoMKgwqDC oMKgwqAucHJvYmXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA9IHhpbGlueF9h aV9lbmdpbmVfcHJvYmUsCj4+ICvCoMKgwqDCoMKgwqDCoC5yZW1vdmXCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgPSB4aWxpbnhfYWlfZW5naW5lX3JlbW92ZSwKPj4gK8KgwqDCoMKg wqDCoMKgLmRyaXZlcsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA9IHsKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5uYW1lwqDCoMKgwqDCoMKgwqDCoMKgwqDCoD0g InhpbGlueC1haS1lbmdpbmUiLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLm9m X21hdGNoX3RhYmxlwqA9IHhpbGlueF9haV9lbmdpbmVfb2ZfbWF0Y2gsCj4+ICvCoMKgwqDCoMKg wqDCoH0sCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgaW50IF9faW5pdCB4aWxpbnhfYWlfZW5naW5l X2luaXQodm9pZCkKPj4gK3sKPj4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsKPj4gKwo+PiArwqDC oMKgwqDCoMKgwqByZXQgPSBhbGxvY19jaHJkZXZfcmVnaW9uKCZhaWVfbWFqb3IsIDAsIEFJRV9E RVZfTUFYLCAiYWllIik7Cj4+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKSB7Cj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwcl9lcnIoImFpZTogZmFpbGVkIHRvIGFsbG9jYXRl IGFpZSByZWdpb25cbiIpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJu IHJldDsKPj4gK8KgwqDCoMKgwqDCoMKgfQo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoGFpZV9jbGFz cyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgImFpZSIpOwo+PiArwqDCoMKgwqDCoMKgwqBp ZiAoSVNfRVJSKGFpZV9jbGFzcykpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHByX2VycigiZmFpbGVkIHRvIGNyZWF0ZSBhaWUgY2xhc3NcbiIpOwo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGFpZV9tYWpvciwgQUlF X0RFVl9NQVgpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIFBUUl9F UlIoYWllX2NsYXNzKTsKPj4gK8KgwqDCoMKgwqDCoMKgfQo+PiArCj4+ICvCoMKgwqDCoMKgwqDC oHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmeGlsaW54X2FpX2VuZ2luZV9kcml2ZXIpOwo+PiAr Cj4+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+PiArfQo+PiArcG9zdGNvcmVfaW5pdGNhbGwo eGlsaW54X2FpX2VuZ2luZV9pbml0KTsKPj4gKwo+PiArc3RhdGljIHZvaWQgX19leGl0IHhpbGlu eF9haV9lbmdpbmVfZXhpdCh2b2lkKQo+PiArewo+PiArwqDCoMKgwqDCoMKgwqBwbGF0Zm9ybV9k cml2ZXJfdW5yZWdpc3RlcigmeGlsaW54X2FpX2VuZ2luZV9kcml2ZXIpOwo+PiArwqDCoMKgwqDC oMKgwqBjbGFzc19kZXN0cm95KGFpZV9jbGFzcyk7Cj4+ICvCoMKgwqDCoMKgwqDCoHVucmVnaXN0 ZXJfY2hyZGV2X3JlZ2lvbihhaWVfbWFqb3IsIEFJRV9ERVZfTUFYKTsKPj4gK30KPj4gK21vZHVs ZV9leGl0KHhpbGlueF9haV9lbmdpbmVfZXhpdCk7Cj4+ICsKPj4gK01PRFVMRV9BVVRIT1IoIlhp bGlueCwgSW5jLiIpOwo+PiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo+PiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9taXNjL3hpbGlueC1haS1lbmdpbmUvYWktZW5naW5lLWludGVybmFsLmgKPj4g Yi9kcml2ZXJzL21pc2MveGlsaW54LWFpLWVuZ2luZS9haS1lbmdpbmUtaW50ZXJuYWwuaAo+PiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi42YTY5OTQ2Cj4+IC0tLSAvZGV2 L251bGwKPj4gKysrIGIvZHJpdmVycy9taXNjL3hpbGlueC1haS1lbmdpbmUvYWktZW5naW5lLWlu dGVybmFsLmgKPj4gQEAgLTAsMCArMSwyMjYgQEAKPj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wLW9ubHkgKi8KPj4gKy8qCj4+ICsgKiBYaWxpbnggQUkgRW5naW5lIGRyaXZl ciBpbnRlcm5hbCBoZWFkZXIKPj4gKyAqCj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMjAgWGlsaW54 LCBJbmMuCj4+ICsgKi8KPj4gKwo+PiArI2lmbmRlZiBBSUVfSU5URVJOQUxfSAo+PiArI2RlZmlu ZSBBSUVfSU5URVJOQUxfSAo+PiArCj4+ICsjaW5jbHVkZSA8bGludXgvYml0ZmllbGQuaD4KPj4g KyNpbmNsdWRlIDxsaW51eC9iaXRzLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvY2Rldi5oPgo+PiAr I2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+Cj4+ICsj aW5jbHVkZSA8bGludXgvbGlzdC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Cj4+ICsj aW5jbHVkZSA8bGludXgvb2YuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KPj4g KyNpbmNsdWRlIDx1YXBpL2xpbnV4L3hsbngtYWktZW5naW5lLmg+Cj4+ICsKPj4gKy8qCj4+ICsg KiBNYWNyb3MgZm9yIEFJIGVuZ2luZSB0aWxlIHR5cGUgYml0bWFza3MKPj4gKyAqLwo+PiArI2Rl ZmluZSBBSUVfVElMRV9UWVBFX1RJTEXCoMKgwqDCoMKgQklUKDApCj4+ICsjZGVmaW5lIEFJRV9U SUxFX1RZUEVfU0hJTVBMwqDCoMKgQklUKDEpCj4+ICsvKiBTSElNIE5PQyB0aWxlIGluY2x1ZGVz IFNISU0gUEwgYW5kIFNISU0gTk9DIG1vZHVsZXMgKi8KPj4gKyNkZWZpbmUgQUlFX1RJTEVfVFlQ RV9TSElNTk9DwqDCoEJJVCgyKQo+PiArCj4+ICsvKgo+PiArICogTWFjcm9zIGZvciBhdHRyaWJ1 dGUgcHJvcGVydHkgb2YgQUkgZW5naW5lIHJlZ2lzdGVycyBhY2Nlc3NlZCBieSBrZXJuZWwKPj4g KyAqIDAgLSA3IGJpdHM6IHRpbGUgdHlwZSBiaXRzCj4+ICsgKiA4IC0gMTUgYml0czogcGVybWlz c2lvbiBiaXRzLiBJZiBpdCBpcyAxLCBpdCBhbGxvd3Mgd3JpdGUgZnJvbSB1c2Vyc3BhY2UKPj4g KyAqLwo+PiArI2RlZmluZSBBSUVfUkVHU19BVFRSX1RJTEVfVFlQRV9TSElGVMKgwqAwVQo+PiAr I2RlZmluZSBBSUVfUkVHU19BVFRSX1BFUk1fU0hJRlTCoMKgwqDCoMKgwqDCoDhVCj4+ICsjZGVm aW5lIEFJRV9SRUdTX0FUVFJfVElMRV9UWVBFX01BU0vCoMKgwqBHRU5NQVNLKEFJRV9SRUdTX0FU VFJfUEVSTV9TSElGVCAtIDEsCj4+IFwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBBSUVfUkVHU19BVFRSX1RJTEVfVFlQRV9TSElGVCkKPj4gKyNkZWZpbmUgQUlFX1JF R1NfQVRUUl9QRVJNX01BU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEdFTk1BU0so MTUsIFwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBBSUVfUkVHU19B VFRSX1BFUk1fU0hJRlQpCj4+ICsKPj4gKy8qKgo+PiArICogc3RydWN0IGFpZV90aWxlX3JlZ3Mg LSBjb250aWd1b3VzIHJhbmdlIG9mIEFJIGVuZ2luZSByZWdpc3Rlcgo+PiArICrCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB3aXRoaW4gYW4gQUkgZW5naW5lIHRp bGUKPj4gKyAqIEBzb2ZmOiBzdGFydCBvZmZzZXQgb2YgdGhlIHJhbmdlCj4+ICsgKiBAZW9mZjog ZW5kIG9mZnNldCBvZiB0aGUgcmFuZ2UKPj4gKyAqIEBhdHRyaWJ1dGU6IHJlZ2lzdGVycyBhdHRy aWJ1dGUuIEl0IHVzZXMgQUlFX1JFR1NfQVRUUl8qIG1hY3JvcyBkZWZpbmVkCj4+ICsgKsKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgYWJvdmUuCj4+ICsgKi8KPj4gK3N0cnVjdCBhaWVfdGlsZV9yZWdz IHsKPj4gK8KgwqDCoMKgwqDCoMKgc2l6ZV90IHNvZmY7Cj4+ICvCoMKgwqDCoMKgwqDCoHNpemVf dCBlb2ZmOwo+PiArwqDCoMKgwqDCoMKgwqB1MzIgYXR0cmlidXRlOwo+PiArfTsKPj4gKwo+PiAr c3RydWN0IGFpZV9kZXZpY2U7Cj4+ICtzdHJ1Y3QgYWllX3BhcnRpdGlvbjsKPj4gKwo+PiArLyoq Cj4+ICsgKiBzdHJ1Y3QgYWllX3RpbGVfb3BlcmF0aW9ucyAtIEFJIGVuZ2luZSBkZXZpY2Ugb3Bl cmF0aW9ucwo+PiArICogQGdldF90aWxlX3R5cGU6IGdldCB0eXBlIG9mIHRpbGUgYmFzZWQgb24g dGlsZSBvcGVyYXRpb24KPj4gKyAqCj4+ICsgKiBEaWZmZXJlbnQgQUkgZW5naW5lIGRldmljZSB2 ZXJzaW9uIGhhcyBpdHMgb3duIGRldmljZQo+PiArICogb3BlcmF0aW9uLgo+PiArICovCj4+ICtz dHJ1Y3QgYWllX3RpbGVfb3BlcmF0aW9ucyB7Cj4+ICvCoMKgwqDCoMKgwqDCoHUzMiAoKmdldF90 aWxlX3R5cGUpKHN0cnVjdCBhaWVfbG9jYXRpb24gKmxvYyk7Cj4+ICt9Owo+PiArCj4+ICsvKioK Pj4gKyAqIHN0cnVjdCBhaWVfcmVzb3VyY2UgLSBBSSBlbmdpbmUgcmVzb3VyY2Ugc3RydWN0dXJl Cj4+ICsgKiBAYml0bWFwOiByZXNvdXJjZSBiaXRtYXAKPj4gKyAqIEB0b3RhbDogdG90YWwgbnVt YmVyIG9mIHJlc291cmNlCj4+ICsgKi8KPj4gK3N0cnVjdCBhaWVfcmVzb3VyY2Ugewo+PiArwqDC oMKgwqDCoMKgwqB1bnNpZ25lZCBsb25nICpiaXRtYXA7Cj4+ICvCoMKgwqDCoMKgwqDCoHUzMiB0 b3RhbDsKPj4gK307Cj4+ICsKPj4gKy8qKgo+PiArICogc3RydWN0IGFpZV9kZXZpY2UgLSBBSSBl bmdpbmUgZGV2aWNlIHN0cnVjdHVyZQo+PiArICogQHBhcnRpdGlvbnM6IGxpc3Qgb2YgcGFydGl0 aW9ucyByZXF1ZXN0ZWQKPj4gKyAqIEBjZGV2OiBjZGV2IGZvciB0aGUgQUkgZW5naW5lCj4+ICsg KiBAZGV2OiBkZXZpY2UgZm9yIHRoZSBBSSBlbmdpbmUgZGV2aWNlCj4+ICsgKiBAbWxvY2s6IHBy b3RlY3Rpb24gZm9yIEFJIGVuZ2luZSBkZXZpY2Ugb3BlcmF0aW9ucwo+PiArICogQGJhc2U6IEFJ IGVuZ2luZSBkZXZpY2UgYmFzZSB2aXJ0dWFsIGFkZHJlc3MKPj4gKyAqIEByZXM6IG1lbW9yeSBy ZXNvdXJjZSBvZiBBSSBlbmdpbmUgZGV2aWNlCj4+ICsgKiBAa2VybmVsX3JlZ3M6IGFycmF5IG9m IGtlcm5lbCBvbmx5IHJlZ2lzdGVycwo+PiArICogQG9wczogdGlsZSBvcGVyYXRpb25zCj4+ICsg KiBAc2l6ZTogc2l6ZSBvZiB0aGUgQUkgZW5naW5lIGFkZHJlc3Mgc3BhY2UKPj4gKyAqIEBhcnJh eV9zaGlmdDogYXJyYXkgYWRkcmVzcyBzaGlmdAo+PiArICogQGNvbF9zaGlmdDogY29sdW1uIGFk ZHJlc3Mgc2hpZnQKPj4gKyAqIEByb3dfc2hpZnQ6IHJvdyBhZGRyZXNzIHNoaWZ0Cj4+ICsgKiBA Y29sc19yZXM6IEFJIGVuZ2luZSBjb2x1bW5zIHJlc291cmNlcyB0byBpbmRpY2F0ZQo+PiArICrC oMKgwqDCoMKgwqDCoMKgwqDCoCB3aGlsZSBjb2x1bW5zIGFyZSBvY2N1cGllZCBieSBwYXJ0aXRp b25zLgo+PiArICogQG51bV9rZXJuZWxfcmVnczogbnVtYmVyIG9mIGtlcm5lbCBvbmx5IHJlZ2lz dGVycyByYW5nZQo+PiArICogQHZlcnNpb246IEFJIGVuZ2luZSBkZXZpY2UgdmVyc2lvbgo+PiAr ICovCj4+ICtzdHJ1Y3QgYWllX2RldmljZSB7Cj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBsaXN0 X2hlYWQgcGFydGl0aW9uczsKPj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGNkZXYgY2RldjsKPj4g K8KgwqDCoMKgwqDCoMKgc3RydWN0IGRldmljZSBkZXY7Cj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVj dCBtdXRleCBtbG9jazsgLyogcHJvdGVjdGlvbiBmb3IgQUkgZW5naW5lIHBhcnRpdGlvbnMgKi8K Pj4gK8KgwqDCoMKgwqDCoMKgdm9pZCBfX2lvbWVtICpiYXNlOwo+PiArwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgcmVzb3VyY2UgKnJlczsKPj4gK8KgwqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0IGFpZV90 aWxlX3JlZ3MgKmtlcm5lbF9yZWdzOwo+PiArwqDCoMKgwqDCoMKgwqBjb25zdCBzdHJ1Y3QgYWll X3RpbGVfb3BlcmF0aW9ucyAqb3BzOwo+PiArwqDCoMKgwqDCoMKgwqBzaXplX3Qgc2l6ZTsKPj4g K8KgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9yZXNvdXJjZSBjb2xzX3JlczsKPj4gK8KgwqDCoMKg wqDCoMKgdTMyIGFycmF5X3NoaWZ0Owo+PiArwqDCoMKgwqDCoMKgwqB1MzIgY29sX3NoaWZ0Owo+ PiArwqDCoMKgwqDCoMKgwqB1MzIgcm93X3NoaWZ0Owo+PiArwqDCoMKgwqDCoMKgwqB1MzIgbnVt X2tlcm5lbF9yZWdzOwo+PiArwqDCoMKgwqDCoMKgwqBpbnQgdmVyc2lvbjsKPj4gK307Cj4+ICsK Pj4gKy8qKgo+PiArICogc3RydWN0IGFpZV9wYXJ0aXRpb24gLSBBSSBlbmdpbmUgcGFydGl0aW9u IHN0cnVjdHVyZQo+PiArICogQG5vZGU6IGxpc3Qgbm9kZQo+PiArICogQGFkZXY6IHBvaW50ZXIg dG8gQUkgZGV2aWNlIGluc3RhbmNlCj4+ICsgKiBAcmFuZ2U6IHJhbmdlIG9mIHBhcnRpdGlvbgo+ PiArICogQG1sb2NrOiBwcm90ZWN0aW9uIGZvciBBSSBlbmdpbmUgcGFydGl0aW9uIG9wZXJhdGlv bnMKPj4gKyAqIEBkZXY6IGRldmljZSBmb3IgdGhlIEFJIGVuZ2luZSBwYXJ0aXRpb24KPj4gKyAq IEBwYXJ0aXRpb25faWQ6IHBhcnRpdGlvbiBpZC4gUGFydGl0aW9uIElEIGlzIHRoZSBpZGVudGlm aWVyCj4+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb2YgdGhlIEFJIGVuZ2luZSBw YXJ0aXRpb24gaW4gdGhlIHN5c3RlbS4KPj4gKyAqIEBzdGF0dXM6IGluZGljYXRlIGlmIHRoZSBw YXJ0aXRpb24gaXMgaW4gdXNlCj4+ICsgKi8KPj4gK3N0cnVjdCBhaWVfcGFydGl0aW9uIHsKPj4g K8KgwqDCoMKgwqDCoMKgc3RydWN0IGxpc3RfaGVhZCBub2RlOwo+PiArwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgYWllX2RldmljZSAqYWRldjsKPj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9yYW5n ZSByYW5nZTsKPj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG11dGV4IG1sb2NrOyAvKiBwcm90ZWN0 aW9uIGZvciBBSSBlbmdpbmUgcGFydGl0aW9uIG9wZXJhdGlvbnMKPj4gKi8KPj4gK8KgwqDCoMKg wqDCoMKgc3RydWN0IGRldmljZSBkZXY7Cj4+ICvCoMKgwqDCoMKgwqDCoHUzMiBwYXJ0aXRpb25f aWQ7Cj4+ICvCoMKgwqDCoMKgwqDCoHUzMiBzdGF0dXM7Cj4+ICt9Owo+PiArCj4+ICtleHRlcm4g c3RydWN0IGNsYXNzICphaWVfY2xhc3M7Cj4+ICtleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3Bl cmF0aW9ucyBhaWVfcGFydF9mb3BzOwo+PiArCj4+ICsjZGVmaW5lIGNkZXZfdG9fYWllZGV2KGlf Y2RldikgY29udGFpbmVyX29mKChpX2NkZXYpLCBzdHJ1Y3QgYWllX2RldmljZSwKPj4gY2RldikK Pj4gKyNkZWZpbmUgZGV2X3RvX2FpZWRldihfZGV2KSBjb250YWluZXJfb2YoKF9kZXYpLCBzdHJ1 Y3QgYWllX2RldmljZSwgZGV2KQo+PiArI2RlZmluZSBkZXZfdG9fYWllcGFydChfZGV2KSBjb250 YWluZXJfb2YoKF9kZXYpLCBzdHJ1Y3QgYWllX3BhcnRpdGlvbiwgZGV2KQo+PiArCj4+ICsjZGVm aW5lIGFpZV9jb2xfbWFzayhhZGV2KSAoeyBcCj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhaWVf ZGV2aWNlICpfYWRldiA9IChhZGV2KTsgXAo+PiArwqDCoMKgwqDCoMKgwqBHRU5NQVNLX1VMTChf YWRldi0+YXJyYXlfc2hpZnQgLSAxLCBfYWRldi0+Y29sX3NoaWZ0KTvCoCBcCj4+ICvCoMKgwqDC oMKgwqDCoH0pCj4+ICsKPj4gKyNkZWZpbmUgYWllX3Jvd19tYXNrKGFkZXYpICh7IFwKPj4gK8Kg wqDCoMKgwqDCoMKgc3RydWN0IGFpZV9kZXZpY2UgKl9hZGV2ID0gKGFkZXYpOyBcCj4+ICvCoMKg wqDCoMKgwqDCoEdFTk1BU0tfVUxMKF9hZGV2LT5jb2xfc2hpZnQgLSAxLCBfYWRldi0+cm93X3No aWZ0KTvCoCBcCj4+ICvCoMKgwqDCoMKgwqDCoH0pCj4+ICsKPj4gKyNkZWZpbmUgYWllX3RpbGVf cmVnX21hc2soYWRldikgKHsgXAo+PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWllX2RldmljZSAq X2FkZXYgPSAoYWRldik7IFwKPj4gK8KgwqDCoMKgwqDCoMKgR0VOTUFTS19VTEwoX2FkZXYtPnJv d19zaGlmdCAtIDEsIDApO8KgIFwKPj4gK8KgwqDCoMKgwqDCoMKgfSkKPj4gKwo+PiArLyoKPj4g KyAqIE5lZWQgdG8gZGVmaW5lIGZpZWxkIGdldCwgYXMgQUkgZW5naW5lIHNoaWZ0IG1hc2sgaXMg bm90IGNvbnN0YW50Lgo+PiArICogQ2Fubm90IHVzZSBGSUVMRF9HRVQoKQo+PiArICovCj4+ICsj ZGVmaW5lIGFpZV90aWxlX3JlZ19maWVsZF9nZXQobWFzaywgc2hpZnQsIHJlZ29mZikgKCBcCj4+ ICvCoMKgwqDCoMKgwqDCoCgocmVnb2ZmKSAmIChtYXNrKSkgPj4gKHNoaWZ0KSkKPj4gKwo+PiAr I2RlZmluZSBhaWVfY2FsX3RpbGVfcmVnKGFkZXYsIHJlZ29mZikgKCBcCj4+ICvCoMKgwqDCoMKg wqDCoGFpZV90aWxlX3JlZ19maWVsZF9nZXQoYWllX3RpbGVfcmVnX21hc2soYWRldiksIDAsIHJl Z29mZikpCj4+ICsKPj4gKy8qKgo+PiArICogYWllX2NhbF9yZWdvZmYoKSAtIGNhbGN1bGF0ZSBy ZWdpc3RlciBvZmZzZXQgdG8gdGhlIHdob2xlIEFJIGVuZ2luZQo+PiArICrCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2aWNlIHN0YXJ0IGFkZHJlc3MKPj4gKyAqIEBhZGV2 OiBBSSBlbmdpbmUgZGV2aWNlCj4+ICsgKiBAbG9jOiBBSSBlbmdpbmUgdGlsZSBsb2NhdGlvbgo+ PiArICogQHJlZ29mZl9pbnRpbGU6IHJlZ2lzdGVyIG9mZnNldCB3aXRoaW4gYSB0aWxlCj4+ICsg KiBAcmV0dXJuOiByZWdpc3RlciBvZmZzZXQgdG8gdGhlIHdob2xlIEFJIGVuZ2luZSBkZXZpY2Ug c3RhcnQgYWRkcmVzcwo+PiArICovCj4+ICtzdGF0aWMgaW5saW5lIHUzMiBhaWVfY2FsX3JlZ29m ZihzdHJ1Y3QgYWllX2RldmljZSAqYWRldiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBhaWVfbG9jYXRpb24g bG9jLCB1MzIgcmVnb2ZmX2ludGlsZSkKPj4gK3sKPj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHJl Z29mZl9pbnRpbGUgKyAobG9jLmNvbCA8PCBhZGV2LT5jb2xfc2hpZnQpICsKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIChsb2Mucm93IDw8IGFkZXYtPnJvd19zaGlmdCk7Cj4+ICt9Cj4+ ICsKPj4gKy8qKgo+PiArICogYWllX3ZhbGlkYXRlX2xvY2F0aW9uKCkgLSB2YWxpZGF0ZSB0aWxl IGxvY2F0aW9uIHdpdGhpbiBhbiBBSSBlbmdpbmUKPj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGFydGl0aW9uCj4+ICsgKiBAYXBhcnQ6IEFJ IGVuZ2luZSBwYXJ0aXRpb24KPj4gKyAqIEBsb2M6IEFJIGVuZ2luZSB0aWxlIGxvY2F0aW9uCj4+ ICsgKiBAcmV0dXJuOiByZXR1cm4gMCBpZiBpdCBpcyB2YWxpZCwgbmVnYXRpdmUgdmFsdWUgZm9y IGVycm9ycy4KPj4gKyAqCj4+ICsgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgQUkgZW5n aW5lIGxvY2F0aW9uIGlzIHdpdGhpbiB0aGUgQUkgZW5naW5lCj4+ICsgKiBwYXJ0aXRpb24uCj4+ ICsgKi8KPj4gK3N0YXRpYyBpbmxpbmUgaW50IGFpZV92YWxpZGF0ZV9sb2NhdGlvbihzdHJ1Y3Qg YWllX3BhcnRpdGlvbiAqYXBhcnQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWll X2xvY2F0aW9uIGxvYykKPj4gK3sKPj4gK8KgwqDCoMKgwqDCoMKgaWYgKGxvYy5jb2wgPCBhcGFy dC0+cmFuZ2Uuc3RhcnQuY29sIHx8Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBsb2MuY29sID49 IGFwYXJ0LT5yYW5nZS5zdGFydC5jb2wgKyBhcGFydC0+cmFuZ2Uuc2l6ZS5jb2wgfHwKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgIGxvYy5yb3cgPCBhcGFydC0+cmFuZ2Uuc3RhcnQucm93IHx8Cj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBsb2Mucm93ID49IGFwYXJ0LT5yYW5nZS5zdGFydC5yb3cg KyBhcGFydC0+cmFuZ2Uuc2l6ZS5yb3cpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXR1cm4gLUVJTlZBTDsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPj4gK30K Pj4gKwo+PiAraW50IGFpZV9yZXNvdXJjZV9pbml0aWFsaXplKHN0cnVjdCBhaWVfcmVzb3VyY2Ug KnJlcywgaW50IGNvdW50KTsKPj4gK3ZvaWQgYWllX3Jlc291cmNlX3VuaW5pdGlhbGl6ZShzdHJ1 Y3QgYWllX3Jlc291cmNlICpyZXMpOwo+PiAraW50IGFpZV9yZXNvdXJjZV9jaGVja19yZWdpb24o c3RydWN0IGFpZV9yZXNvdXJjZSAqcmVzLCB1MzIgc3RhcnQsCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1MzIgY291bnQpOwo+PiAr aW50IGFpZV9yZXNvdXJjZV9nZXRfcmVnaW9uKHN0cnVjdCBhaWVfcmVzb3VyY2UgKnJlcywgdTMy IHN0YXJ0LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB1MzIgY291bnQpOwo+PiArdm9pZCBhaWVfcmVzb3VyY2VfcHV0X3JlZ2lvbihzdHJ1 Y3QgYWllX3Jlc291cmNlICpyZXMsIGludCBzdGFydCwgdTMyIGNvdW50KTsKPj4gKwo+PiArY29u c3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqYWllX3BhcnRfZ2V0X2ZvcHModm9pZCk7Cj4+ICt1 OCBhaWVfcGFydF9pbl91c2Uoc3RydWN0IGFpZV9wYXJ0aXRpb24gKmFwYXJ0KTsKPj4gK3N0cnVj dCBhaWVfcGFydGl0aW9uICphaWVfZ2V0X3BhcnRpdGlvbl9mcm9tX2lkKHN0cnVjdCBhaWVfZGV2 aWNlICphZGV2LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHUzMiBw YXJ0aXRpb25faWQpOwo+PiArc3RydWN0IGFpZV9wYXJ0aXRpb24gKmFpZV9yZXF1ZXN0X3BhcnRp dGlvbihzdHJ1Y3QgYWllX2RldmljZSAqYWRldiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzdHJ1Y3QgYWllX3BhcnRpdGlvbl9yZXEgKnJlcSk7Cj4+ICtzdHJ1Y3QgYWllX3BhcnRp dGlvbiAqb2ZfYWllX3BhcnRfcHJvYmUoc3RydWN0IGFpZV9kZXZpY2UgKmFkZXYsCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5jKTsKPj4gK3ZvaWQgYWllX3Bh cnRfcmVtb3ZlKHN0cnVjdCBhaWVfcGFydGl0aW9uICphcGFydCk7Cj4+ICsKPj4gK2ludCBhaWVf ZGV2aWNlX2luaXQoc3RydWN0IGFpZV9kZXZpY2UgKmFkZXYpOwo+PiArI2VuZGlmIC8qIEFJRV9J TlRFUk5BTF9IICovCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MveGlsaW54LWFpLWVuZ2lu ZS9haS1lbmdpbmUtcGFydC5jCj4+IGIvZHJpdmVycy9taXNjL3hpbGlueC1haS1lbmdpbmUvYWkt ZW5naW5lLXBhcnQuYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi5m YzhmOWY1Cj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9taXNjL3hpbGlueC1haS1l bmdpbmUvYWktZW5naW5lLXBhcnQuYwo+PiBAQCAtMCwwICsxLDQ5OCBAQAo+PiArLy8gU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPj4gKy8qCj4+ICsgKiBYaWxpbnggQUkgRW5naW5l IHBhcnRpdGlvbiBkcml2ZXIKPj4gKyAqCj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMjAgWGlsaW54 LCBJbmMuCj4+ICsgKi8KPj4gKwo+PiArI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KPj4gKyNpbmNs dWRlIDxsaW51eC9kZWxheS5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+PiArI2lu Y2x1ZGUgPGxpbnV4L2ZzLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4+ICsjaW5j bHVkZSA8bGludXgvbGlzdC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L21tLmg+Cj4+ICsjaW5jbHVk ZSA8bGludXgvbW1hbi5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L21tdV9jb250ZXh0Lmg+Cj4+ICsj aW5jbHVkZSA8bGludXgvbXV0ZXguaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9vZi5oPgo+PiArI2lu Y2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPj4g KyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvdWlvLmg+Cj4+ ICsjaW5jbHVkZSA8dWFwaS9saW51eC94bG54LWFpLWVuZ2luZS5oPgo+PiArCj4+ICsjaW5jbHVk ZSAiYWktZW5naW5lLWludGVybmFsLmgiCj4+ICsKPj4gKy8qKgo+PiArICogYWllX2NhbF9sb2Mo KSAtIGNhbGN1bGF0ZSB0aWxlIGxvY2F0aW9uIGZyb20gcmVnaXN0ZXIgb2Zmc2V0IHRvIHRoZSBB SQo+PiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZW5naW5lIGRldmljZQo+PiAr ICogQGFkZXY6IEFJIGVuZ2luZSBkZXZpY2UKPj4gKyAqIEBsb2M6IG1lbW9yeSBwb2ludGVyIHRv IHJlc3RvcmUgcmV0dXJuaW5nIGxvY2F0aW9uIGluZm9ybWF0aW9uCj4+ICsgKiBAcmVnb2ZmOiB0 aWxlIGludGVybmFsIHJlZ2lzdGVyIG9mZnNldAo+PiArICoKPj4gKyAqIFRoaXMgZnVuY3Rpb24g cmV0dXJucyB0aGUgdGlsZSBsb2NhdGlvbi4KPj4gKyAqLwo+PiArc3RhdGljIHZvaWQgYWllX2Nh bF9sb2Moc3RydWN0IGFpZV9kZXZpY2UgKmFkZXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9sb2NhdGlvbiAqbG9jLCB1NjQgcmVn b2ZmKQo+PiArewo+PiArwqDCoMKgwqDCoMKgwqBsb2MtPmNvbCA9ICh1MzIpYWllX3RpbGVfcmVn X2ZpZWxkX2dldChhaWVfY29sX21hc2soYWRldiksCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgYWRldi0+Y29sX3NoaWZ0LCByZWdvZmYpOwo+PiArwqDCoMKgwqDCoMKgwqBs b2MtPnJvdyA9ICh1MzIpYWllX3RpbGVfcmVnX2ZpZWxkX2dldChhaWVfcm93X21hc2soYWRldiks Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYWRldi0+cm93X3NoaWZ0LCBy ZWdvZmYpOwo+PiArfQo+PiArCj4+ICsvKioKPj4gKyAqIGFpZV9wYXJ0X3JlZ192YWxpZGF0aW9u KCkgLSB2YWxpZGF0ZSBBSSBlbmdpbmUgcGFydGl0aW9uIHJlZ2lzdGVyIGFjY2Vzcwo+PiArICog QGFwYXJ0OiBBSSBlbmdpbmUgcGFydGl0aW9uCj4+ICsgKiBAb2Zmc2V0OiBBSSBlbmdpbmUgcmVn aXN0ZXIgb2Zmc2V0Cj4+ICsgKiBAbGVuOiBsZW4gb2YgZGF0YSB0byB3cml0ZS9yZWFkCj4+ICsg KiBAaXNfd3JpdGU6IGlzIHRoZSBhY2Nlc3MgdG8gd3JpdGUgdG8gcmVnaXN0ZXIKPj4gKyAqIEBy ZXR1cm46IDAgZm9yIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIHZhbHVlIGZvciBmYWlsdXJlLgo+PiAr ICoKPj4gKyAqIFRoaXMgZnVuY3Rpb24gdmFsaWRhdGUgaWYgdGhlIHJlZ2lzdGVyIHRvIGFjY2Vz cyBpcyB3aXRoaW4gdGhlIEFJIGVuZ2luZQo+PiArICogcGFydGl0aW9uLiBJZiBpdCBpcyB3cml0 ZSBhY2Nlc3MsIGlmIHRoZSByZWdpc3RlciBpcyB3cml0YWJsZSBieSB1c2VyLgo+PiArICovCj4+ ICtzdGF0aWMgaW50IGFpZV9wYXJ0X3JlZ192YWxpZGF0aW9uKHN0cnVjdCBhaWVfcGFydGl0aW9u ICphcGFydCwgc2l6ZV90Cj4+IG9mZnNldCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplX3QgbGVuLCB1OCBp c193cml0ZSkKPj4gK3sKPj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9kZXZpY2UgKmFkZXY7 Cj4+ICvCoMKgwqDCoMKgwqDCoHUzMiByZWdlbmQzMiwgdHR5cGU7Cj4+ICvCoMKgwqDCoMKgwqDC oHU2NCByZWdvZmYsIHJlZ2VuZDY0Owo+PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWllX2xvY2F0 aW9uIGxvYzsKPj4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgaW50IGk7Cj4+ICsKPj4gK8KgwqDC oMKgwqDCoMKgYWRldiA9IGFwYXJ0LT5hZGV2Owo+PiArwqDCoMKgwqDCoMKgwqBpZiAob2Zmc2V0 ICUgc2l6ZW9mKHUzMikpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9l cnIoJmFwYXJ0LT5kZXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIkludmFsaWQgcmVnIG9mZigweCV6eCksIG5vdCAzMmJpdCBhbGlnbmVkLlxuIiwK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBvZmZzZXQp Owo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7Cj4+ICvC oMKgwqDCoMKgwqDCoH0KPj4gKwo+PiArwqDCoMKgwqDCoMKgwqBpZiAobGVuICUgc2l6ZW9mKHUz MikpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoJmFwYXJ0LT5k ZXYsICJJbnZhbGlkIHJlZyBvcGVyYXRpb24gbGVuICV6dS5cbiIsIGxlbik7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPj4gK8KgwqDCoMKgwqDCoMKg fQo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoHJlZ29mZiA9IGFpZV9jYWxfdGlsZV9yZWcoYWRldiwg b2Zmc2V0KTsKPj4gK8KgwqDCoMKgwqDCoMKgcmVnZW5kNjQgPSByZWdvZmYgKyBsZW47Cj4+ICvC oMKgwqDCoMKgwqDCoGlmIChyZWdlbmQ2NCA+PSBCSVRfVUxMKGFkZXYtPnJvd19zaGlmdCkpIHsK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoJmFwYXJ0LT5kZXYsCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIkludmFsaWQg cmVnIG9wZXJhdGlvbiBsZW4gJXp1LlxuIiwgbGVuKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldHVybiAtRUlOVkFMOwo+PiArwqDCoMKgwqDCoMKgwqB9Cj4+ICsKPj4gK8Kg wqDCoMKgwqDCoMKgYWllX2NhbF9sb2MoYWRldiwgJmxvYywgb2Zmc2V0KTsKPj4gK8KgwqDCoMKg wqDCoMKgaWYgKGFpZV92YWxpZGF0ZV9sb2NhdGlvbihhcGFydCwgbG9jKSkgewo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycigmYXBhcnQtPmRldiwKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiSW52YWxpZCAoJWQsJWQpIG91 dCBvZiBwYXJ0KCVkLCVkKSwoJWQsJWQpXG4iLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxvYy5jb2wsIGxvYy5yb3csCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYXBhcnQtPnJhbmdlLnN0YXJ0LmNvbCwg YXBhcnQtPnJhbmdlLnN0YXJ0LnJvdywKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBhcGFydC0+cmFuZ2Uuc2l6ZS5jb2wsIGFwYXJ0LT5yYW5nZS5zaXpl LnJvdyk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsK Pj4gK8KgwqDCoMKgwqDCoMKgfQo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoGlmICghaXNfd3JpdGUp Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPj4gKwo+PiArwqDC oMKgwqDCoMKgwqByZWdlbmQzMiA9IGxvd2VyXzMyX2JpdHMocmVnZW5kNjQpOwo+PiArwqDCoMKg wqDCoMKgwqB0dHlwZSA9IGFkZXYtPm9wcy0+Z2V0X3RpbGVfdHlwZSgmbG9jKTsKPj4gK8KgwqDC oMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IGFkZXYtPm51bV9rZXJuZWxfcmVnczsgaSsrKSB7Cj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCBzdHJ1Y3QgYWllX3RpbGVfcmVn cyAqcmVnczsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHUzMiBydHR5cGUsIHdy aXRhYmxlOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZWdzID0gJmFk ZXYtPmtlcm5lbF9yZWdzW2ldOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcnR0 eXBlID0gKHJlZ3MtPmF0dHJpYnV0ZSAmIEFJRV9SRUdTX0FUVFJfVElMRV9UWVBFX01BU0spID4+ Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFJRV9S RUdTX0FUVFJfVElMRV9UWVBFX1NISUZUOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgd3JpdGFibGUgPSAocmVncy0+YXR0cmlidXRlICYgQUlFX1JFR1NfQVRUUl9QRVJNX01BU0sp ID4+Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBBSUVfUkVHU19BVFRSX1BFUk1fU0hJRlQ7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBpZiAoISh0dHlwZSAmIHJ0dHlwZSkpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgY29udGludWU7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBpZiAoKHJlZ29mZiA+PSByZWdzLT5zb2ZmICYmIHJlZ29mZiA8PSByZWdzLT5lb2Zm KSB8fAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChyZWdlbmQzMiA+ PSByZWdzLT5zb2ZmICYmIHJlZ2VuZDMyIDw9IHJlZ3MtPmVvZmYpKSB7Cj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCF3cml0YWJsZSkgewo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBkZXZfZXJyKCZhcGFydC0+ZGV2LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgInJlZyAw eCV6eCwweCV6eCBub3Qgd3JpdGFibGUuXG4iLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgb2Zm c2V0LCBsZW4pOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqB9Cj4+ICvCoMKgwqDCoMKgwqDCoH0KPj4gKwo+PiArwqDCoMKgwqDCoMKgwqByZXR1 cm4gMDsKPj4gK30KPj4gKwo+PiArLyoqCj4+ICsgKiBhaWVfcGFydF93cml0ZV9yZWdpc3Rlcigp IC0gQUkgZW5naW5lIHBhcnRpdGlvbiB3cml0ZSByZWdpc3Rlcgo+PiArICogQGFwYXJ0OiBBSSBl bmdpbmUgcGFydGl0aW9uCj4+ICsgKiBAb2Zmc2V0OiBBSSBlbmdpbmUgcmVnaXN0ZXIgb2Zmc2V0 Cj4+ICsgKiBAbGVuOiBsZW4gb2YgZGF0YSB0byB3cml0ZQo+PiArICogQGRhdGE6IGRhdGEgdG8g d3JpdGUKPj4gKyAqIEBtYXNrOiBtYXNrLCBpZiBpdCBpcyBub24gMCwgaXQgaXMgbWFzayB3cml0 ZS4KPj4gKyAqIEByZXR1cm46IG51bWJlciBvZiBieXRlcyB3cml0ZSBmb3Igc3VjY2Vzcywgb3Ig bmVnYXRpdmUgdmFsdWUgZm9yIGZhaWx1cmUuCj4+ICsgKgo+PiArICogVGhpcyBmdW5jdGlvbiB3 cml0ZXMgZGF0YSB0byB0aGUgc3BlY2lmaWVkIHJlZ2lzdGVycy4KPj4gKyAqIElmIHRoZSBtYXNr IGlzIG5vbiAwLCBpdCBpcyBtYXNrIHdyaXRlLgo+PiArICovCj4+ICtzdGF0aWMgaW50IGFpZV9w YXJ0X3dyaXRlX3JlZ2lzdGVyKHN0cnVjdCBhaWVfcGFydGl0aW9uICphcGFydCwgc2l6ZV90Cj4+ IG9mZnNldCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplX3QgbGVuLCB2b2lkICpkYXRhLCB1MzIgbWFzaykK Pj4gK3sKPj4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsKPj4gK8KgwqDCoMKgwqDCoMKgdm9pZCBf X2lvbWVtICp2YTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqBpZiAobWFzayAmJiBsZW4gPiBzaXpl b2YodTMyKSkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogRm9yIG1hc2sg d3JpdGUsIG9ubHkgYWxsb3cgMzJiaXQuICovCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBkZXZfZXJyKCZhcGFydC0+ZGV2LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCJmYWlsZWQgbWFzayB3cml0ZSwgbGVuIGlzIG1vcmUgdGhhdCAz MmJpdC5cbiIpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5W QUw7Cj4+ICvCoMKgwqDCoMKgwqDCoH0KPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAvKiBvZmZzZXQg aXMgZXhwZWN0ZWQgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBwYXJ0aXRpb24g Ki8KPj4gK8KgwqDCoMKgwqDCoMKgb2Zmc2V0ICs9IGFpZV9jYWxfcmVnb2ZmKGFwYXJ0LT5hZGV2 LCBhcGFydC0+cmFuZ2Uuc3RhcnQsIDApOwo+PiArwqDCoMKgwqDCoMKgwqByZXQgPSBhaWVfcGFy dF9yZWdfdmFsaWRhdGlvbihhcGFydCwgb2Zmc2V0LCBsZW4sIDEpOwo+PiArwqDCoMKgwqDCoMKg wqBpZiAocmV0IDwgMCkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2Vy cigmYXBhcnQtPmRldiwgImZhaWxlZCB0byB3cml0ZSB0byAweCV6eCwweCV6eC5cbiIsCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgb2Zmc2V0LCBsZW4p Owo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPj4gK8KgwqDC oMKgwqDCoMKgfQo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoHZhID0gYXBhcnQtPmFkZXYtPmJhc2Ug KyBvZmZzZXQ7Cj4+ICvCoMKgwqDCoMKgwqDCoGlmICghbWFzaykgewo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgaWYgKGxlbiA9PSBzaXplb2YodTMyKSkKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpb3dyaXRlMzIoKigodTMyICopZGF0 YSkswqAgdmEpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZWxzZQo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1lbWNweV90b2lvKHZh LCBkYXRhLCBsZW4pOwo+PiArwqDCoMKgwqDCoMKgwqB9IGVsc2Ugewo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgdTMyIHZhbCA9IGlvcmVhZDMyKHZhKTsKPj4gKwo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdmFsICY9IH5tYXNrOwo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgdmFsIHw9ICooKHUzMiAqKWRhdGEpICYgbWFzazsKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlvd3JpdGUzMih2YWwsIHZhKTsKPj4gK8KgwqDCoMKgwqDC oMKgfQo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAoaW50KWxlbjsKPj4gK30KPj4gKwo+ PiArLyoqCj4+ICsgKiBhaWVfcGFydF9hY2Nlc3NfcmVncygpIC0gQUkgZW5naW5lIHBhcnRpdGlv biByZWdpc3RlcnMgYWNjZXNzCj4+ICsgKiBAYXBhcnQ6IEFJIGVuZ2luZSBwYXJ0aXRpb24KPj4g KyAqIEBudW1fcmVxczogbnVtYmVyIG9mIGFjY2VzcyByZXF1ZXN0cwo+PiArICogQHJlcXM6IGFy cmF5IG9mIHJlZ2lzdGVycyBhY2Nlc3MKPj4gKyAqIEByZXR1cm46IDAgZm9yIHN1Y2Nlc3MsIGFu ZCBuZWdhdGl2ZSB2YWx1ZSBmb3IgZmFpbHVyZS4KPj4gKyAqCj4+ICsgKiBUaGlzIGZ1bmN0aW9u IGV4ZWN1dGVzIEFJIGVuZ2luZSBwYXJ0aXRpb24gcmVnaXN0ZXIgYWNjZXNzIHJlcXVlc3RzLgo+ PiArICovCj4+ICtzdGF0aWMgaW50IGFpZV9wYXJ0X2FjY2Vzc19yZWdzKHN0cnVjdCBhaWVfcGFy dGl0aW9uICphcGFydCwgdTMyIG51bV9yZXFzLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWllX3JlZ19hcmdz ICpyZXFzKQo+PiArewo+PiArwqDCoMKgwqDCoMKgwqB1MzIgaTsKPj4gKwo+PiArwqDCoMKgwqDC oMKgwqBmb3IgKGkgPSAwOyBpIDwgbnVtX3JlcXM7IGkrKykgewo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9yZWdfYXJncyAqYXJncyA9ICZyZXFzW2ldOwo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW50IHJldDsKPj4gKwo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGFyZ3MtPm9wICE9IEFJRV9SRUdfV1JJVEUpIHsKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKCZh cGFydC0+ZGV2LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAiSW52YWxpZCByZWdpc3RlciBjb21tYW5kIHR5cGU6ICV1Llxu IiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgYXJncy0+b3ApOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUlOVkFMOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgfQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gYWllX3Bh cnRfd3JpdGVfcmVnaXN0ZXIoYXBhcnQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIChzaXplX3QpYXJncy0+b2Zmc2V0LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzaXplb2YoYXJncy0+dmFsKSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgJmFyZ3MtPnZhbCwgYXJncy0+bWFzayk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBpZiAocmV0IDwgMCkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGRldl9lcnIoJmFwYXJ0LT5kZXYsICJyZWcgb3AgJXUgZmFpbGVkOiAweCVs bHguXG4iLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBhcmdzLT5vcCwgYXJncy0+b2Zmc2V0KTsKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+PiArwqDCoMKgwqDCoMKgwqB9Cj4+ICsKPj4gK8Kg wqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgYWllX3BhcnRf cmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKPj4gK3sKPj4g K8KgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9wYXJ0aXRpb24gKmFwYXJ0ID0gZmlscC0+cHJpdmF0 ZV9kYXRhOwo+PiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+PiArCj4+ICvCoMKgwqDCoMKgwqDC oC8qCj4+ICvCoMKgwqDCoMKgwqDCoCAqIFRPRE86IEl0IHdpbGwgbmVlZCB0byByZXNldCB0aGUg U0hJTSBjb2x1bW5zIGFuZCBnYXRlIHRoZQo+PiArwqDCoMKgwqDCoMKgwqAgKiB0aWxlcyBvZiB0 aGUgcGFydGl0aW9uLgo+PiArwqDCoMKgwqDCoMKgwqAgKi8KPj4gK8KgwqDCoMKgwqDCoMKgcmV0 ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZhcGFydC0+bWxvY2spOwo+PiArwqDCoMKgwqDC oMKgwqBpZiAocmV0KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJl dDsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqBhcGFydC0+c3RhdHVzID0gMDsKPj4gK8KgwqDCoMKg wqDCoMKgbXV0ZXhfdW5sb2NrKCZhcGFydC0+bWxvY2spOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDC oHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlv bnNfc3RydWN0IGFpZV9wYXJ0X3BoeXNpY2FsX3ZtX29wcyA9IHsKPj4gKyNpZmRlZiBDT05GSUdf SEFWRV9JT1JFTUFQX1BST1QKPj4gK8KgwqDCoMKgwqDCoMKgLmFjY2VzcyA9IGdlbmVyaWNfYWNj ZXNzX3BoeXMsCj4+ICsjZW5kaWYKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBpbnQgYWllX3BhcnRf bW1hcChzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQo+PiArewo+ PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWllX3BhcnRpdGlvbiAqYXBhcnQgPSBmcC0+cHJpdmF0 ZV9kYXRhOwo+PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWllX2RldmljZSAqYWRldiA9IGFwYXJ0 LT5hZGV2Owo+PiArwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBsb25nIG9mZnNldCA9IHZtYS0+dm1f cGdvZmYgKiBQQUdFX1NJWkU7Cj4+ICvCoMKgwqDCoMKgwqDCoHBoeXNfYWRkcl90IGFkZHI7Cj4+ ICvCoMKgwqDCoMKgwqDCoHNpemVfdCBzaXplOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoGlmICh2 bWEtPnZtX2VuZCA8IHZtYS0+dm1fc3RhcnQpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZXR1cm4gLUVJTlZBTDsKPj4gK8KgwqDCoMKgwqDCoMKgLyogT25seSBhbGxvdyB1c2Vy c3BhY2UgZGlyZWN0bHkgcmVhZCByZWdpc3RlcnMgKi8KPj4gK8KgwqDCoMKgwqDCoMKgaWYgKHZt YS0+dm1fZmxhZ3MgJiBWTV9XUklURSkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgZGV2X2VycigmYXBhcnQtPmRldiwgIiVzOiBkbyBub3Qgc3VwcG9ydCB3cml0YWJsZSBtbWFw LlxuIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBf X2Z1bmNfXyk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZB TDsKPj4gK8KgwqDCoMKgwqDCoMKgfQo+PiArwqDCoMKgwqDCoMKgwqB2bWEtPnZtX3ByaXZhdGVf ZGF0YSA9IGFwYXJ0Owo+PiArwqDCoMKgwqDCoMKgwqB2bWEtPnZtX29wcyA9ICZhaWVfcGFydF9w aHlzaWNhbF92bV9vcHM7Cj4+ICvCoMKgwqDCoMKgwqDCoHNpemUgPSBhcGFydC0+cmFuZ2Uuc2l6 ZS5jb2wgPDwgYWRldi0+Y29sX3NoaWZ0Owo+PiArwqDCoMKgwqDCoMKgwqBpZiAoKHZtYS0+dm1f ZW5kIC0gdm1hLT52bV9zdGFydCkgPiAoc2l6ZSAtIG9mZnNldCkpIHsKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoJmFwYXJ0LT5kZXYsCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIiVzOiBzaXplIGV4Y2VlZC5cbiIsIF9f ZnVuY19fKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUlOVkFM Owo+PiArwqDCoMKgwqDCoMKgwqB9Cj4+ICvCoMKgwqDCoMKgwqDCoHZtYS0+dm1fcGFnZV9wcm90 ID0gcGdwcm90X25vbmNhY2hlZCh2bWEtPnZtX3BhZ2VfcHJvdCk7Cj4+ICvCoMKgwqDCoMKgwqDC oC8qIENhbGN1bGF0ZSB0aGUgcGFydGl0aW9uIGFkZHJlc3MgKi8KPj4gK8KgwqDCoMKgwqDCoMKg YWRkciA9IGFkZXYtPnJlcy0+c3RhcnQ7Cj4+ICvCoMKgwqDCoMKgwqDCoGFkZHIgKz0gYXBhcnQt PnJhbmdlLnN0YXJ0LmNvbCA8PCBhZGV2LT5jb2xfc2hpZnQ7Cj4+ICvCoMKgwqDCoMKgwqDCoGFk ZHIgKz0gYXBhcnQtPnJhbmdlLnN0YXJ0LnJvdyA8PCBhZGV2LT5yb3dfc2hpZnQ7Cj4+ICvCoMKg wqDCoMKgwqDCoGFkZHIgKz0gb2Zmc2V0Owo+PiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcmVtYXBf cGZuX3JhbmdlKHZtYSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgdm1hLT52bV9zdGFydCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYWRkciA+PiBQQUdFX1NI SUZULAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZtYS0+dm1fcGFn ZV9wcm90KTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGxvbmcgYWllX3BhcnRfaW9jdGwoc3RydWN0 IGZpbGUgKmZwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nCj4+IGFyZykKPj4gK3sK Pj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9wYXJ0aXRpb24gKmFwYXJ0ID0gZnAtPnByaXZh dGVfZGF0YTsKPj4gK8KgwqDCoMKgwqDCoMKgdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3Vz ZXIgKilhcmc7Cj4+ICvCoMKgwqDCoMKgwqDCoGxvbmcgcmV0Owo+PiArCj4+ICvCoMKgwqDCoMKg wqDCoHN3aXRjaCAoY21kKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoGNhc2UgQUlFX1JFR19JT0NUTDoK Pj4gK8KgwqDCoMKgwqDCoMKgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3Ry dWN0IGFpZV9yZWdfYXJncyByYWNjZXNzOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBpZiAoY29weV9mcm9tX3VzZXIoJnJhY2Nlc3MsIGFyZ3AsIHNpemVvZihyYWNjZXNz KSkpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0 dXJuIC1FRkFVTFQ7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9 IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYXBhcnQtPm1sb2NrKTsKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0ID0gYWllX3BhcnRfYWNjZXNzX3JlZ3MoYXBhcnQsIDEsICZyYWNj ZXNzKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG11dGV4X3VubG9jaygmYXBh cnQtPm1sb2NrKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+PiAr wqDCoMKgwqDCoMKgwqB9Cj4+ICvCoMKgwqDCoMKgwqDCoGRlZmF1bHQ6Cj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKCZhcGFydC0+ZGV2LCAiSW52YWxpZCBpb2N0bCBj b21tYW5kICV1LlxuIiwgY21kKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJl dCA9IC1FSU5WQUw7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPj4g K8KgwqDCoMKgwqDCoMKgfQo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4+ICt9 Cj4+ICsKPj4gK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWllX3BhcnRfZm9wcyA9IHsK Pj4gK8KgwqDCoMKgwqDCoMKgLm93bmVywqDCoMKgwqDCoMKgwqDCoMKgwqA9IFRISVNfTU9EVUxF LAo+PiArwqDCoMKgwqDCoMKgwqAucmVsZWFzZcKgwqDCoMKgwqDCoMKgwqA9IGFpZV9wYXJ0X3Jl bGVhc2UsCj4+ICvCoMKgwqDCoMKgwqDCoC5tbWFwwqDCoMKgwqDCoMKgwqDCoMKgwqDCoD0gYWll X3BhcnRfbW1hcCwKPj4gK8KgwqDCoMKgwqDCoMKgLnVubG9ja2VkX2lvY3RswqA9IGFpZV9wYXJ0 X2lvY3RsLAo+PiArfTsKPj4gKwo+PiArLyoqCj4+ICsgKiBhaWVfcGFydF9yZWxlYXNlX2Rldmlj ZSgpIC0gcmVsZWFzZSBhbiBBSSBlbmdpbmUgcGFydGl0aW9uIGluc3RhbmNlCj4+ICsgKiBAZGV2 OiBBSSBlbmdpbmUgcGFydGl0aW9uIGRldmljZQo+PiArICoKPj4gKyAqIEl0IHdpbGwgYmUgY2Fs bGVkIGJ5IGRldmljZSBkcml2ZXIgY29yZSB3aGVuIG5vIG9uZSBob2xkcyBhIHZhbGlkCj4+ICsg KiBwb2ludGVyIHRvIEBkZXYgYW55bW9yZS4KPj4gKyAqLwo+PiArc3RhdGljIHZvaWQgYWllX3Bh cnRfcmVsZWFzZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQo+PiArewo+PiArwqDCoMKgwqDC oMKgwqBzdHJ1Y3QgYWllX3BhcnRpdGlvbiAqYXBhcnQgPSBkZXZfdG9fYWllcGFydChkZXYpOwo+ PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWllX2RldmljZSAqYWRldiA9IGFwYXJ0LT5hZGV2Owo+ PiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoHJldCA9IG11 dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYWRldi0+bWxvY2spOwo+PiArwqDCoMKgwqDCoMKgwqBp ZiAocmV0KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfd2FybigmYXBh cnQtPmRldiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgImdldHRpbmcgYWRldi0+bWxvY2sgaXMgaW50ZXJydXB0ZWQgYnkgc2lnbmFsXG4iKTsKPj4g K8KgwqDCoMKgwqDCoMKgfQo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoGFpZV9yZXNvdXJjZV9wdXRf cmVnaW9uKCZhZGV2LT5jb2xzX3JlcywgYXBhcnQtPnJhbmdlLnN0YXJ0LmNvbCwKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg YXBhcnQtPnJhbmdlLnNpemUuY29sKTsKPj4gK8KgwqDCoMKgwqDCoMKgbGlzdF9kZWwoJmFwYXJ0 LT5ub2RlKTsKPj4gK8KgwqDCoMKgwqDCoMKgbXV0ZXhfdW5sb2NrKCZhZGV2LT5tbG9jayk7Cj4+ ICvCoMKgwqDCoMKgwqDCoHB1dF9kZXZpY2UoYXBhcnQtPmRldi5wYXJlbnQpOwo+PiArfQo+PiAr Cj4+ICsvKioKPj4gKyAqIGFpZV9jcmVhdGVfcGFydGl0aW9uKCkgLSBjcmVhdGUgQUkgZW5naW5l IHBhcnRpdGlvbiBpbnN0YW5jZQo+PiArICogQGFkZXY6IEFJIGVuZ2luZSBkZXZpY2UKPj4gKyAq IEByYW5nZTogQUkgZW5naW5lIHBhcnRpdGlvbiByYW5nZSB0byBjaGVjay4gQSByYW5nZSBkZXNj cmliZXMgYSBncm91cAo+PiArICrCoMKgwqDCoMKgwqDCoCBvZiBBSSBlbmdpbmUgdGlsZXMuCj4+ ICsgKiBAcmV0dXJuOiBjcmVhdGVkIEFJIGVuZ2luZSBwYXJ0aXRpb24gcG9pbnRlciBmb3Igc3Vj Y2VzcywgYW5kIFBUUl9FUlIKPj4gKyAqwqDCoMKgwqDCoMKgwqDCoCBmb3IgZmFpbHVyZS4KPj4g KyAqCj4+ICsgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYW4gQUkgZW5naW5lIHBhcnRpdGlvbiBp bnN0YW5jZS4KPj4gKyAqIEl0IGNyZWF0ZXMgQUkgZW5naW5lIHBhcnRpdGlvbiwgdGhlIEFJIGVu Z2luZSBwYXJ0aXRpb24gZGV2aWNlIGFuZAo+PiArICogdGhlIEFJIGVuZ2luZSBwYXJ0aXRpb24g Y2hhcmFjdGVyIGRldmljZS4KPj4gKyAqLwo+PiArc3RhdGljIHN0cnVjdCBhaWVfcGFydGl0aW9u ICphaWVfY3JlYXRlX3BhcnRpdGlvbihzdHJ1Y3QgYWllX2RldmljZSAqYWRldiwKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgYWllX3JhbmdlICpyYW5n ZSkKPj4gK3sKPj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9wYXJ0aXRpb24gKmFwYXJ0Owo+ PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4+ICvCoMKgwqDCoMKgwqDCoGNo YXIgZGV2bmFtZVszMl07Cj4+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4+ICsKPj4gK8KgwqDC oMKgwqDCoMKgcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZhZGV2LT5tbG9jayk7Cj4+ ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXR1cm4gRVJSX1BUUihyZXQpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGFpZV9y ZXNvdXJjZV9jaGVja19yZWdpb24oJmFkZXYtPmNvbHNfcmVzLCByYW5nZS0+c3RhcnQuY29sLAo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmFuZ2UtPnNpemUuY29sKTsKPj4gK8KgwqDCoMKgwqDC oMKgaWYgKHJldCAhPSByYW5nZS0+c3RhcnQuY29sKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBkZXZfZXJyKCZhZGV2LT5kZXYsICJpbnZhbGlkIHBhcnRpdGlvbiAoJXUsJXUp KCV1LCV1KS5cbiIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmFuZ2UtPnN0YXJ0LmNvbCwgcmFuZ2UtPnN0YXJ0LnJvdywKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByYW5nZS0+c2l6ZS5jb2wsIHJhbmdl LT5zaXplLnJvdyk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtdXRleF91bmxv Y2soJmFkZXYtPm1sb2NrKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy biBFUlJfUFRSKC1FSU5WQUwpOwo+PiArwqDCoMKgwqDCoMKgwqB9Cj4+ICvCoMKgwqDCoMKgwqDC oHJldCA9IGFpZV9yZXNvdXJjZV9nZXRfcmVnaW9uKCZhZGV2LT5jb2xzX3JlcywgcmFuZ2UtPnN0 YXJ0LmNvbCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByYW5nZS0+c2l6ZS5jb2wpOwo+PiArwqDCoMKg wqDCoMKgwqBpZiAocmV0ICE9IHJhbmdlLT5zdGFydC5jb2wpIHsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoJmFkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgcGFydGl0 aW9uCj4+ICgldSwldSkoJXUsJXUpLlxuIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByYW5nZS0+c3RhcnQuY29sLCByYW5nZS0+c3RhcnQucm93LAo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJhbmdlLT5z aXplLmNvbCwgcmFuZ2UtPnNpemUucm93KTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoG11dGV4X3VubG9jaygmYWRldi0+bWxvY2spOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmV0dXJuIEVSUl9QVFIoLUVGQVVMVCk7Cj4+ICvCoMKgwqDCoMKgwqDCoH0KPj4g K8KgwqDCoMKgwqDCoMKgbXV0ZXhfdW5sb2NrKCZhZGV2LT5tbG9jayk7Cj4+ICsKPj4gK8KgwqDC oMKgwqDCoMKgYXBhcnQgPSBkZXZtX2t6YWxsb2MoJmFkZXYtPmRldiwgc2l6ZW9mKCphcGFydCks IEdGUF9LRVJORUwpOwo+PiArwqDCoMKgwqDCoMKgwqBpZiAoIWFwYXJ0KQo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4+ICsKPj4gK8Kg wqDCoMKgwqDCoMKgYXBhcnQtPmFkZXYgPSBhZGV2Owo+PiArwqDCoMKgwqDCoMKgwqBtZW1jcHko JmFwYXJ0LT5yYW5nZSwgcmFuZ2UsIHNpemVvZigqcmFuZ2UpKTsKPj4gK8KgwqDCoMKgwqDCoMKg bXV0ZXhfaW5pdCgmYXBhcnQtPm1sb2NrKTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAvKiBDcmVh dGUgQUkgZW5naW5lIHBhcnRpdGlvbiBkZXZpY2UgKi8KPj4gK8KgwqDCoMKgwqDCoMKgZGV2ID0g JmFwYXJ0LT5kZXY7Cj4+ICvCoMKgwqDCoMKgwqDCoGRldmljZV9pbml0aWFsaXplKGRldik7Cj4+ ICvCoMKgwqDCoMKgwqDCoGRldi0+cGFyZW50ID0gJmFkZXYtPmRldjsKPj4gK8KgwqDCoMKgwqDC oMKgZGV2LT5jbGFzcyA9IGFpZV9jbGFzczsKPj4gK8KgwqDCoMKgwqDCoMKgZGV2X3NldF9kcnZk YXRhKGRldiwgYXBhcnQpOwo+PiArwqDCoMKgwqDCoMKgwqBzbnByaW50ZihkZXZuYW1lLCBzaXpl b2YoZGV2bmFtZSkgLSAxLCAiYWllcGFydF8lZF8lZCIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgYXBhcnQtPnJhbmdlLnN0YXJ0LmNvbCwgYXBhcnQtPnJhbmdlLnNpemUuY29s KTsKPj4gK8KgwqDCoMKgwqDCoMKgZGV2X3NldF9uYW1lKGRldiwgZGV2bmFtZSk7Cj4+ICvCoMKg wqDCoMKgwqDCoC8qIFdlIGNhbiBub3cgcmVseSBvbiB0aGUgcmVsZWFzZSBmdW5jdGlvbiBmb3Ig Y2xlYW51cCAqLwo+PiArwqDCoMKgwqDCoMKgwqBkZXYtPnJlbGVhc2UgPSBhaWVfcGFydF9yZWxl YXNlX2RldmljZTsKPj4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gZGV2aWNlX2FkZChkZXYpOwo+PiAr wqDCoMKgwqDCoMKgwqBpZiAocmV0KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBkZXZfZXJyKGRldiwgImRldmljZV9hZGQgZmFpbGVkOiAlZFxuIiwgcmV0KTsKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHB1dF9kZXZpY2UoZGV2KTsKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBFUlJfUFRSKHJldCk7Cj4+ICvCoMKgwqDCoMKgwqDC oH0KPj4gKwo+PiArwqDCoMKgwqDCoMKgwqByZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUo JmFkZXYtPm1sb2NrKTsKPj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkgewo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcHV0X2RldmljZShkZXYpOwo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIEVSUl9QVFIocmV0KTsKPj4gK8KgwqDCoMKgwqDCoMKgfQo+ PiArCj4+ICvCoMKgwqDCoMKgwqDCoGxpc3RfYWRkX3RhaWwoJmFwYXJ0LT5ub2RlLCAmYWRldi0+ cGFydGl0aW9ucyk7Cj4+ICvCoMKgwqDCoMKgwqDCoG11dGV4X3VubG9jaygmYWRldi0+bWxvY2sp Owo+PiArwqDCoMKgwqDCoMKgwqBnZXRfZGV2aWNlKCZhZGV2LT5kZXYpOwo+PiArwqDCoMKgwqDC oMKgwqBkZXZfZGJnKGRldiwgImNyZWF0ZWQgQUlFIHBhcnRpdGlvbiBkZXZpY2UuXG4iKTsKPj4g Kwo+PiArwqDCoMKgwqDCoMKgwqByZXR1cm4gYXBhcnQ7Cj4+ICt9Cj4+ICsKPj4gK3N0cnVjdCBh aWVfcGFydGl0aW9uICoKPj4gK29mX2FpZV9wYXJ0X3Byb2JlKHN0cnVjdCBhaWVfZGV2aWNlICph ZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5jKQo+PiArewo+PiArwqDCoMKgwqDCoMKgwqBzdHJ1 Y3QgYWllX3BhcnRpdGlvbiAqYXBhcnQ7Cj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhaWVfcmFu Z2UgcmFuZ2U7Cj4+ICvCoMKgwqDCoMKgwqDCoHUzMiBwYXJ0aXRpb25faWQsIHJlZ3NbNF07Cj4+ ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgLyogU2VsZWN0 IGRldmljZSBkcml2ZXIgKi8KPj4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gb2ZfcHJvcGVydHlfcmVh ZF91MzJfYXJyYXkobmMsICJyZWciLCByZWdzLCBBUlJBWV9TSVpFKHJlZ3MpKTsKPj4gK8KgwqDC oMKgwqDCoMKgaWYgKHJldCA8IDApIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGRldl9lcnIoJmFkZXYtPmRldiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAicHJvYmUgJXBPRiBmYWlsZWQsIG5vIHRpbGVzIHJhbmdlIGluZm9ybWF0 aW9uLlxuIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBuYyk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gRVJSX1BUUihy ZXQpOwo+PiArwqDCoMKgwqDCoMKgwqB9Cj4+ICvCoMKgwqDCoMKgwqDCoHJhbmdlLnN0YXJ0LmNv bCA9IHJlZ3NbMF07Cj4+ICvCoMKgwqDCoMKgwqDCoHJhbmdlLnN0YXJ0LnJvdyA9IHJlZ3NbMV07 Cj4+ICvCoMKgwqDCoMKgwqDCoHJhbmdlLnNpemUuY29sID0gcmVnc1syXTsKPj4gK8KgwqDCoMKg wqDCoMKgcmFuZ2Uuc2l6ZS5yb3cgPSByZWdzWzNdOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoHJl dCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyX2luZGV4KG5jLCAieGxueCxwYXJ0aXRpb24taWQiLCAw LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZwYXJ0aXRpb25faWQpOwo+PiArwqDCoMKgwqDC oMKgwqBpZiAocmV0IDwgMCkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2 X2VycigmYWRldi0+ZGV2LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCJwcm9iZSAlcE9GIGZhaWxlZCwgbm8gcGFydGl0aW9uIGlkLlxuIiwgbmMpOwo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIEVSUl9QVFIocmV0KTsKPj4g K8KgwqDCoMKgwqDCoMKgfQo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoHJldCA9IG11dGV4X2xvY2tf aW50ZXJydXB0aWJsZSgmYWRldi0+bWxvY2spOwo+PiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIEVSUl9QVFIocmV0KTsKPj4g Kwo+PiArwqDCoMKgwqDCoMKgwqBhcGFydCA9IGFpZV9nZXRfcGFydGl0aW9uX2Zyb21faWQoYWRl diwgcGFydGl0aW9uX2lkKTsKPj4gK8KgwqDCoMKgwqDCoMKgbXV0ZXhfdW5sb2NrKCZhZGV2LT5t bG9jayk7Cj4+ICvCoMKgwqDCoMKgwqDCoGlmIChhcGFydCkgewo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgZGV2X2VycigmYWRldi0+ZGV2LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJwcm9iZSBmYWlsZWQ6IHBhcnRpdGlvbiAldSBl eGlzdHMuXG4iLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHBhcnRpdGlvbl9pZCk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gRVJSX1BUUihyZXQpOwo+PiArwqDCoMKgwqDCoMKgwqB9Cj4+ICsKPj4gK8KgwqDCoMKgwqDC oMKgYXBhcnQgPSBhaWVfY3JlYXRlX3BhcnRpdGlvbihhZGV2LCAmcmFuZ2UpOwo+PiArwqDCoMKg wqDCoMKgwqBpZiAoSVNfRVJSKGFwYXJ0KSkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgZGV2X2VycigmYWRldi0+ZGV2LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCIlczogZmFpbGVkIHRvIGNyZWF0ZSBwYXJ0KCV1LCV1KSwoJXUs JXUpLlxuIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBfX2Z1bmNfXywgcmFuZ2Uuc3RhcnQuY29sLCByYW5nZS5zdGFydC5yb3csCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmFuZ2Uuc2l6ZS5jb2wsIHJh bmdlLnNpemUucm93KTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBh cGFydDsKPj4gK8KgwqDCoMKgwqDCoMKgfQo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoG9mX25vZGVf Z2V0KG5jKTsKPj4gK8KgwqDCoMKgwqDCoMKgYXBhcnQtPmRldi5vZl9ub2RlID0gbmM7Cj4+ICvC oMKgwqDCoMKgwqDCoGFwYXJ0LT5wYXJ0aXRpb25faWQgPSBwYXJ0aXRpb25faWQ7Cj4+ICsKPj4g K8KgwqDCoMKgwqDCoMKgZGV2X2luZm8oJmFkZXYtPmRldiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAiQUkgZW5naW5lIHBhcnQoJXUsJXUpLCgldSwldSksIGlkICV1IGlzIHBy b2JlZAo+PiBzdWNjZXNzZnVsbHkuXG4iLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHJhbmdlLnN0YXJ0LmNvbCwgcmFuZ2Uuc3RhcnQucm93LAo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHJhbmdlLnNpemUuY29sLCByYW5nZS5zaXplLnJvdywgYXBhcnQtPnBh cnRpdGlvbl9pZCk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIGFwYXJ0Owo+PiArfQo+ PiArCj4+ICsvKioKPj4gKyAqIGFpZV9kZXN0cm95X3BhcnQoKSAtIGRlc3Ryb3kgQUkgZW5naW5l IHBhcnRpdGlvbgo+PiArICogQGFwYXJ0OiBBSSBlbmdpbmUgcGFydGl0aW9uCj4+ICsgKgo+PiAr ICogVGhpcyBmdW5jdGlvbiB3aWxsIHJlbW92ZSBBSSBlbmdpbmUgcGFydGl0aW9uLgo+PiArICov Cj4+ICt2b2lkIGFpZV9wYXJ0X3JlbW92ZShzdHJ1Y3QgYWllX3BhcnRpdGlvbiAqYXBhcnQpCj4+ ICt7Cj4+ICvCoMKgwqDCoMKgwqDCoGRldmljZV9kZWwoJmFwYXJ0LT5kZXYpOwo+PiArwqDCoMKg wqDCoMKgwqBwdXRfZGV2aWNlKCZhcGFydC0+ZGV2KTsKPj4gK30KPj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvbWlzYy94aWxpbngtYWktZW5naW5lL2FpLWVuZ2luZS1yZXMuYwo+PiBiL2RyaXZlcnMv bWlzYy94aWxpbngtYWktZW5naW5lL2FpLWVuZ2luZS1yZXMuYwo+PiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+PiBpbmRleCAwMDAwMDAwLi4zNmYwOGJmCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIv ZHJpdmVycy9taXNjL3hpbGlueC1haS1lbmdpbmUvYWktZW5naW5lLXJlcy5jCj4+IEBAIC0wLDAg KzEsMTE0IEBACj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+PiArLyoK Pj4gKyAqIFhpbGlueCBBSSBFbmdpbmUgZGV2aWNlIGRyaXZlcgo+PiArICoKPj4gKyAqIENvcHly aWdodCAoQykgMjAyMCBYaWxpbngsIEluYy4KPj4gKyAqLwo+PiArCj4+ICsjaW5jbHVkZSA8bGlu dXgvYml0bWFwLmg+Cj4+ICsKPj4gKyNpbmNsdWRlICJhaS1lbmdpbmUtaW50ZXJuYWwuaCIKPj4g Kwo+PiArLyoqCj4+ICsgKiBhaWVfcmVzb3VyY2VfaW5pdGlhbGl6ZSgpIC0gaW5pdGlhbGl6ZSBB SSBlbmdpbmUgcmVzb3VyY2UKPj4gKyAqIEByZXM6IHBvaW50ZXIgdG8gQUkgZW5naW5lIHJlc291 cmNlCj4+ICsgKiBAY291bnQ6IHRvdGFsIG51bWJlciBvZiBlbGVtZW50IG9mIHRoaXMgcmVzb3Vy Y2UKPj4gKyAqIEByZXR1cm46IDAgZm9yIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIGZvciBmYWls dXJlLgo+PiArICoKPj4gKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBpbml0aWFsaXplIHRoZSBkYXRh IHN0cnVjdHVyZSBmb3IgdGhlCj4+ICsgKiByZXNvdXJjZS4KPj4gKyAqLwo+PiAraW50IGFpZV9y ZXNvdXJjZV9pbml0aWFsaXplKHN0cnVjdCBhaWVfcmVzb3VyY2UgKnJlcywgaW50IGNvdW50KQo+ PiArewo+PiArwqDCoMKgwqDCoMKgwqBpZiAoIXJlcyB8fCAhY291bnQpCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPj4gK8KgwqDCoMKgwqDCoMKgcmVz LT5iaXRtYXAgPSBiaXRtYXBfemFsbG9jKGNvdW50LCBHRlBfS0VSTkVMKTsKPj4gK8KgwqDCoMKg wqDCoMKgaWYgKCFyZXMtPmJpdG1hcCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJldHVybiAtRU5PTUVNOwo+PiArwqDCoMKgwqDCoMKgwqByZXMtPnRvdGFsID0gY291bnQ7Cj4+ ICsKPj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gKy8qKgo+PiArICog YWllX3Jlc291cmNlX3VuaW5pdGlhbGl6ZSgpIC0gdW5pbml0aWFsaXplIEFJIGVuZ2luZSByZXNv dXJjZQo+PiArICogQHJlczogcG9pbnRlciB0byBBSSBlbmdpbmUgcmVzb3VyY2UKPj4gKyAqCj4+ ICsgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVsZWFzZSB0aGUgQUkgZW5naW5lIHJlc291cmNlIGRh dGEgbWVtYmVycy4KPj4gKyAqLwo+PiArdm9pZCBhaWVfcmVzb3VyY2VfdW5pbml0aWFsaXplKHN0 cnVjdCBhaWVfcmVzb3VyY2UgKnJlcykKPj4gK3sKPj4gK8KgwqDCoMKgwqDCoMKgcmVzLT50b3Rh bCA9IDA7Cj4+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXMtPmJpdG1hcCkKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGJpdG1hcF9mcmVlKHJlcy0+Yml0bWFwKTsKPj4gK30KPj4gKwo+ PiArLyoqCj4+ICsgKiBhaWVfcmVzb3VyY2VfY2hlY2soKSAtIGNoZWNrIGF2YWlsYWJpbGl0eSBv ZiByZXF1ZXN0ZWQgcmVzb3VyY2UKPj4gKyAqIEByZXM6IHBvaW50ZXIgdG8gQUkgZW5naW5lIHJl c291cmNlIHRvIGNoZWNrCj4+ICsgKiBAc3RhcnQ6IHN0YXJ0IGluZGV4IG9mIHRoZSByZXF1aXJl ZCByZXNvdXJjZSwgaXQgd2lsbCBvbmx5IGJlIHVzZWQgaWYKPj4gKyAqwqDCoMKgwqDCoMKgwqAg QGNvbnRpbnVvdXMgaXMgMS4gSXQgd2lsbCBjaGVjayB0aGUgYXZhaWxhYmxlIHJlc291cmNlIHN0 YXJ0aW5nCj4+IGZyb20KPj4gKyAqwqDCoMKgwqDCoMKgwqAgQHN0YXJ0Cj4+ICsgKiBAY291bnQ6 IG51bWJlciBvZiByZXF1ZXN0ZWQgZWxlbWVudAo+PiArICogQHJldHVybjogc3RhcnQgcmVzb3Vy Y2UgaWQgaWYgdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgcmVzb3VyY2VzIGFyZQo+PiBhdmFpbGFi bGUKPj4gKyAqwqDCoMKgwqDCoMKgwqDCoCBJdCB3aWxsIHJldHVybiBuZWdhdGl2ZSB2YWx1ZSBv ZiBlcnJvcnMuCj4+ICsgKgo+PiArICogVGhpcyBmdW5jdGlvbiB3aWxsIGNoZWNrIHRoZSBhdmFp bGFiaWxpdHkuIEl0IHdpbGwgcmV0dXJuIHN0YXJ0IHJlc291cmNlCj4+IGlkCj4+ICsgKiBpZiB0 aGUgcmVxdWVzdGVkIG51bWJlciBvZiByZXNvdXJjZXMgYXJlIGF2YWlsYWJsZS4KPj4gKyAqLwo+ PiAraW50IGFpZV9yZXNvdXJjZV9jaGVja19yZWdpb24oc3RydWN0IGFpZV9yZXNvdXJjZSAqcmVz LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgdTMyIHN0YXJ0LCB1MzIgY291bnQpCj4+ICt7Cj4+ICvCoMKgwqDCoMKgwqDCoHVuc2ln bmVkIGxvbmcgaWQ7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFyZXMgfHwgIXJlcy0+Yml0 bWFwIHx8ICFjb3VudCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAt RUlOVkFMOwo+PiArwqDCoMKgwqDCoMKgwqBpZCA9IGJpdG1hcF9maW5kX25leHRfemVyb19hcmVh KHJlcy0+Yml0bWFwLCByZXMtPnRvdGFsLCBzdGFydCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGNvdW50LCAwKTsKPj4gK8KgwqDCoMKgwqDCoMKgaWYgKGlkID49IHJlcy0+dG90YWwpCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVSQU5HRTsKPj4gKwo+PiArwqDC oMKgwqDCoMKgwqByZXR1cm4gKGludClpZDsKPj4gK30KPj4gKwo+PiArLyoqCj4+ICsgKiBhaWVf cmVzb3VyY2VfZ2V0X3JlZ2lvbigpIC0gZ2V0IHJlcXVlc3RlZCBBSSBlbmdpbmUgcmVzb3VyY2UK Pj4gKyAqIEByZXM6IHBvaW50ZXIgdG8gQUkgZW5naW5lIHJlc291cmNlIHRvIGNoZWNrCj4+ICsg KiBAY291bnQ6IG51bWJlciBvZiByZXF1ZXN0ZWQgZWxlbWVudAo+PiArICogQHN0YXJ0OiBzdGFy dCBpbmRleCBvZiB0aGUgcmVxdWlyZWQgcmVzb3VyY2UKPj4gKyAqIEByZXR1cm46IHN0YXJ0IHJl c291cmNlIGlkIGZvciBzdWNjZXNzLCBhbmQgbmVnYXRpdmUgdmFsdWUgZm9yIGZhaWx1cmUuCj4+ ICsgKgo+PiArICogVGhpcyBmdW5jdGlvbiBjaGVjayBpZiB0aGUgcmVxdWVzdGVkIEFJIGVuZ2lu ZSByZXNvdXJjZSBpcyBhdmFpbGFibGUuCj4+ICsgKiBJZiBpdCBpcyBhdmFpbGFibGUsIG1hcmsg aXQgdXNlZCBhbmQgcmV0dXJuIHRoZSBzdGFydCByZXNvdXJjZSBpZC4KPj4gKyAqLwo+PiAraW50 IGFpZV9yZXNvdXJjZV9nZXRfcmVnaW9uKHN0cnVjdCBhaWVfcmVzb3VyY2UgKnJlcywgdTMyIHN0 YXJ0LCB1MzIgY291bnQpCj4+ICt7Cj4+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGxvbmcgb2Zm Owo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoGlmICghcmVzIHx8ICFyZXMtPmJpdG1hcCB8fCAhY291 bnQpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPj4g K8KgwqDCoMKgwqDCoMKgb2ZmID0gYml0bWFwX2ZpbmRfbmV4dF96ZXJvX2FyZWEocmVzLT5iaXRt YXAsIHJlcy0+dG90YWwsIHN0YXJ0LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvdW50LCAw KTsKPj4gK8KgwqDCoMKgwqDCoMKgaWYgKG9mZiA+PSByZXMtPnRvdGFsKSB7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwcl9lcnIoIkZhaWxlZCB0byBnZXQgYXZhaWxhYmxlIEFJ IGVuZ2luZSByZXNvdXJjZS5cbiIpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIC1FUkFOR0U7Cj4+ICvCoMKgwqDCoMKgwqDCoH0KPj4gK8KgwqDCoMKgwqDCoMKgYml0 bWFwX3NldChyZXMtPmJpdG1hcCwgb2ZmLCBjb3VudCk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKg cmV0dXJuIChpbnQpb2ZmOwo+PiArfQo+PiArCj4+ICsvKioKPj4gKyAqIGFpZV9yZXNvdXJjZV9w dXRfcmVnaW9uKCkgLSByZWxlYXNlIHJlcXVlc3RlZCBBSSBlbmdpbmUgcmVzb3VyY2UKPj4gKyAq IEByZXM6IHBvaW50ZXIgdG8gQUkgZW5naW5lIHJlc291cmNlIHRvIGNoZWNrCj4+ICsgKiBAc3Rh cnQ6IHN0YXJ0IGluZGV4IG9mIHRoZSByZXNvdXJjZSB0byByZWxlYXNlCj4+ICsgKiBAY291bnQ6 IG51bWJlciBvZiBlbGVtZW50cyB0byByZWxlYXNlCj4+ICsgKgo+PiArICogVGhpcyBmdW5jdGlv biByZWxlYXNlIHRoZSByZXF1ZXN0ZWQgQUkgZW5naW5lIHJlc291cmNlLgo+PiArICovCj4+ICt2 b2lkIGFpZV9yZXNvdXJjZV9wdXRfcmVnaW9uKHN0cnVjdCBhaWVfcmVzb3VyY2UgKnJlcywgaW50 IHN0YXJ0LCB1MzIgY291bnQpCj4+ICt7Cj4+ICvCoMKgwqDCoMKgwqDCoGlmICghcmVzIHx8ICFj b3VudCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybjsKPj4gK8KgwqDC oMKgwqDCoMKgYml0bWFwX2NsZWFyKHJlcy0+Yml0bWFwLCBzdGFydCwgY291bnQpOwo+PiArfQo+ PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3hsbngtYWktZW5naW5lLmggYi9pbmNs dWRlL3VhcGkvbGludXgveGxueC1haS0KPj4gZW5naW5lLmgKPj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPj4gaW5kZXggMDAwMDAwMC4uYWNiYzc4MQo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2lu Y2x1ZGUvdWFwaS9saW51eC94bG54LWFpLWVuZ2luZS5oCj4+IEBAIC0wLDAgKzEsMTA3IEBACj4+ ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBXSVRIIExpbnV4LXN5c2NhbGwt bm90ZSAqLwo+PiArLyoKPj4gKyAqIENvcHlyaWdodCAoYykgMjAyMCwgWGlsaW54IEluYy4KPj4g KyAqLwo+PiArCj4+ICsjaWZuZGVmIF9VQVBJX0FJX0VOR0lORV9IXwo+PiArI2RlZmluZSBfVUFQ SV9BSV9FTkdJTkVfSF8KPj4gKwo+PiArI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Cj4+ICsjaW5j bHVkZSA8bGludXgvdHlwZXMuaD4KPj4gKwo+PiArZW51bSBhaWVfcmVnX29wIHsKPj4gK8KgwqDC oMKgwqDCoMKgQUlFX1JFR19XUklURSwKPj4gK307Cj4+ICsKPj4gKy8qIEFJIGVuZ2luZSBwYXJ0 aXRpb24gaXMgaW4gdXNlICovCj4+ICsjZGVmaW5lIFhBSUVfUEFSVF9TVEFUVVNfSU5VU0XCoMKg wqDCoMKgwqDCoMKgwqAoMVUgPDwgMCkKPj4gKwo+PiArLyoqCj4+ICsgKiBzdHJ1Y3QgYWllX2xv Y2F0aW9uIC0gQUlFIGxvY2F0aW9uIGluZm9ybWF0aW9uCj4+ICsgKiBAY29sOiBjb2x1bW4gaWQK Pj4gKyAqIEByb3c6IHJvdyBpZAo+PiArICovCj4+ICtzdHJ1Y3QgYWllX2xvY2F0aW9uIHsKPj4g K8KgwqDCoMKgwqDCoMKgX191MzIgY29sOwo+PiArwqDCoMKgwqDCoMKgwqBfX3UzMiByb3c7Cj4+ ICt9Owo+PiArCj4+ICsvKioKPj4gKyAqIHN0cnVjdCBhaWVfcmFuZ2UgLSBBSUUgcmFuZ2UgaW5m b3JtYXRpb24KPj4gKyAqIEBzdGFydDogc3RhcnQgdGlsZSBsb2NhdGlvbgo+PiArICogQHNpemU6 IHNpemUgb2YgdGhlIHJhbmdlLCBudW1iZXIgb2YgY29sdW1ucyBhbmQgcm93cwo+PiArICovCj4+ ICtzdHJ1Y3QgYWllX3JhbmdlIHsKPj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9sb2NhdGlv biBzdGFydDsKPj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGFpZV9sb2NhdGlvbiBzaXplOwo+PiAr fTsKPj4gKwo+PiArLyoqCj4+ICsgKiBzdHJ1Y3QgYWllX3JlZ19hcmdzIC0gQUlFIGFjY2VzcyBy ZWdpc3RlciBhcmd1bWVudHMKPj4gKyAqIEBvcDogaWYgdGhpcyByZXF1ZXN0IGlzIHRvIHJlYWQs IHdyaXRlIG9yIHBvbGwgcmVnaXN0ZXIKPj4gKyAqIEBtYXNrOiBtYXNrIGZvciBtYXNrIHdyaXRl LCAwIGZvciBub3QgbWFzayB3cml0ZQo+PiArICogQG9mZnNldDogb2Zmc2V0IG9mIHJlZ2lzdGVy IHRvIHRoZSBzdGFydCBvZiBhbiBBSSBlbmdpbmUgcGFydGl0aW9uCj4+ICsgKiBAdmFsOiB2YWx1 ZSB0byB3cml0ZSBvciBnZXQKPj4gKyAqLwo+PiArc3RydWN0IGFpZV9yZWdfYXJncyB7Cj4+ICvC oMKgwqDCoMKgwqDCoGVudW0gYWllX3JlZ19vcCBvcDsKPj4gK8KgwqDCoMKgwqDCoMKgX191MzIg bWFzazsKPj4gK8KgwqDCoMKgwqDCoMKgX191NjQgb2Zmc2V0Owo+PiArwqDCoMKgwqDCoMKgwqBf X3UzMiB2YWw7Cj4+ICt9Owo+PiArCj4+ICsvKioKPj4gKyAqIHN0cnVjdCBhaWVfcmFuZ2VfYXJn cyAtIEFJRSByYW5nZSByZXF1ZXN0IGFyZ3VtZW50cwo+PiArICogQHBhcnRpdGlvbl9pZDogcGFy dGl0aW9uIGlkLiBJdCBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoZQo+PiArICrCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIEFJIGVuZ2luZSBwYXJ0aXRpb24gaW4gdGhlIHN5c3RlbS4KPj4gKyAq IEB1aWQ6IGltYWdlIGlkZW50aWZpZXIgbG9hZGVkIG9uIHRoZSBBSSBlbmdpbmUgcGFydGl0aW9u Cj4+ICsgKiBAcmFuZ2U6IHJhbmdlIG9mIEFJRSB0aWxlcwo+PiArICogQHN0YXR1czogaW5kaWNh dGUgaWYgdGhlIEFJIGVuZ2luZSBpcyBpbiB1c2UuCj4+ICsgKsKgwqDCoMKgwqDCoMKgwqAgMCBt ZWFucyBub3QgaW4gdXNlZCwgb3RoZXJ3aXNlLCBpbiB1c2UuCj4+ICsgKi8KPj4gK3N0cnVjdCBh aWVfcmFuZ2VfYXJncyB7Cj4+ICvCoMKgwqDCoMKgwqDCoF9fdTMyIHBhcnRpdGlvbl9pZDsKPj4g K8KgwqDCoMKgwqDCoMKgX191MzIgdWlkOwo+PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgYWllX3Jh bmdlIHJhbmdlOwo+PiArwqDCoMKgwqDCoMKgwqBfX3UzMiBzdGF0dXM7Cj4+ICt9Owo+PiArCj4+ ICsvKioKPj4gKyAqIHN0cnVjdCBhaWVfcGFydGl0aW9uX3F1ZXJ5IC0gQUlFIHBhcnRpdGlvbiBx dWVyeSBhcmd1bWVudHMKPj4gKyAqIEBwYXJ0aXRpb25fY250OiBudW1iZXIgb2YgZGVmaW5lZCBw YXJ0aXRpb25zIGluIHRoZSBzeXN0ZW0KPj4gKyAqIEBwYXJ0aXRpb25zOiBidWZmZXIgdG8gc3Rv cmUgZGVmaW5lZCBwYXJ0aXRpb25zIGluZm9ybWF0aW9uLgo+PiArICovCj4+ICtzdHJ1Y3QgYWll X3BhcnRpdGlvbl9xdWVyeSB7Cj4+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBhaWVfcmFuZ2VfYXJn cyAqcGFydGl0aW9uczsKPj4gK8KgwqDCoMKgwqDCoMKgX191MzIgcGFydGl0aW9uX2NudDsKPj4g K307Cj4+ICsKPj4gKy8qKgo+PiArICogc3RydWN0IGFpZV9wYXJ0aXRpb25fcmVxIC0gQUlFIHJl cXVlc3QgcGFydGl0aW9uIGFyZ3VtZW50cwo+PiArICogQHBhcnRpdGlvbl9pZDogcGFydGl0aW9u IG5vZGUgaWQuIEl0IGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhlIEFJIGVuZ2luZQo+PiArICrCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBhcnRpdGlvbiBpbiB0aGUgc3lzdGVtLgo+PiArICog QHVpZDogaW1hZ2UgaWRlbnRpZmllciBsb2FkZWQgb24gdGhlIEFJIGVuZ2luZSBwYXJ0aXRpb24K Pj4gKyAqIEBtZXRhX2RhdGE6IG1ldGEgZGF0YSB0byBpbmRpY2F0ZSB3aGljaCByZXNvdXJjZXMg dXNlZCBieSBhcHBsaWNhdGlvbi4KPj4gKyAqIEBmbGFnOiB1c2VkIGZvciBhcHBsaWNhdGlvbiB0 byBpbmRpY2F0ZSBwYXJ0aWN1bGFyIGRyaXZlciByZXF1aXJlbWVudHMKPj4gKyAqwqDCoMKgwqDC oMKgIGFwcGxpY2F0aW9uIHdhbnRzIHRvIGhhdmUgZm9yIHRoZSBwYXJ0aXRpb24uIGUuZy4gZG8g bm90IGNsZWFuCj4+ICsgKsKgwqDCoMKgwqDCoCByZXNvdXJjZSB3aGVuIGNsb3NpbmcgdGhlIHBh cnRpdGlvbi4KPj4gKyAqLwo+PiArc3RydWN0IGFpZV9wYXJ0aXRpb25fcmVxIHsKPj4gK8KgwqDC oMKgwqDCoMKgX191MzIgcGFydGl0aW9uX2lkOwo+PiArwqDCoMKgwqDCoMKgwqBfX3UzMiB1aWQ7 Cj4+ICvCoMKgwqDCoMKgwqDCoF9fdTY0IG1ldGFfZGF0YTsKPj4gK8KgwqDCoMKgwqDCoMKgX191 MzIgZmxhZzsKPj4gK307Cj4+ICsKPj4gKyNkZWZpbmUgQUlFX0lPQ1RMX0JBU0UgJ0EnCj4+ICsK Pj4gKy8qIEFJIGVuZ2luZSBkZXZpY2UgSU9DVEwgb3BlcmF0aW9ucyAqLwo+PiArI2RlZmluZSBB SUVfRU5RVUlSRV9QQVJUX0lPQ1RMwqDCoMKgwqDCoMKgwqDCoMKgX0lPV1IoQUlFX0lPQ1RMX0JB U0UsIDB4MSwgXAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgYWll X3BhcnRpdGlvbl9xdWVyeSkKPj4gKyNkZWZpbmUgQUlFX1JFUVVFU1RfUEFSVF9JT0NUTMKgwqDC oMKgwqDCoMKgwqDCoF9JT1IoQUlFX0lPQ1RMX0JBU0UsIDB4MiwgXAo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGFpZV9wYXJ0aXRpb25fcmVxKQo+PiArCj4+ICsvKiBB SSBlbmdpbmUgcGFydGl0aW9uIElPQ1RMIG9wZXJhdGlvbnMgKi8KPj4gKyNkZWZpbmUgQUlFX1JF R19JT0NUTMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoF9JT1dSKEFJRV9JT0NU TF9CQVNFLCAweDgsIFwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0 IGFpZV9yZWdfYXJncykKPj4gKyNlbmRpZgo+CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1h cm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcv bWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==