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=-21.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable 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 EC1AEC433EF for ; Fri, 17 Sep 2021 15:17:28 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id C48A961164 for ; Fri, 17 Sep 2021 15:17:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343980AbhIQPSs (ORCPT ); Fri, 17 Sep 2021 11:18:48 -0400 Received: from mail-dm6nam10on2053.outbound.protection.outlook.com ([40.107.93.53]:28225 "EHLO NAM10-DM6-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1344079AbhIQPRL (ORCPT ); Fri, 17 Sep 2021 11:17:11 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fjr5aYTBP+SjWLYESL6IMdaf5jsE0Xj8mlSOdu6dkmyWCQwxN9GB8Jx6n6bmey34K5pxQE1y0e+6/lDVwLAvdrM8HBZNiQtlY/8VIu0254ulSJQPLlEtqxlWqJAFzqIbEy/4qfSWk3g3TQvewL1yLJgrKmRLa6YGJK38g1ZLWciufDMQQb2wGRvbZmDDIdtTHLXUPBeVjPGZoxGZWgBeBAd5RDm4XfZgniz2/7Pn/zBtjJibe2NlpyPSTy8OKkNzsL3r/e3guzVWEmqbgOg0Us1VTU67wK7xbgNTJcNmwrAhQiH+IaW+kq9gS1xeETMLmmkDHS2BzaoHuAFV+I1lRg== 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; bh=DNeaguFg3Aqmlb53Xr4mhjs0uC1L1PwS4+F72Sw9Pw4=; b=LWS6benzGjKwuojVLN7+5g37sceTPLOe9ShxqirgcWC7CYVCf6K9iwIr8UZC9OWs1fUU5MetQN7imfDqDOz/9OHxR/P+4X2rm/KMBfo6wjBehNDjGbjlVcQL9HjCaQmgaQB02k2fLQf36po7B6whM/ksOWjyayC+f89C11lqg3d3dxoGJFeknR0Tfb+Rhs+zYiUx99UG/V/MPNixSuOTJCmED6AMOeD8EDYl+9e1aTAFl5R0AePr5l2v5Bqze3pnyYE0zjxlJLU1rAC7W+5i8bXGkFLZYS1joSzCsMVEegwChfzdpT21WPBWeJ4YWQ6qnKZ40JZ9N+jXHJJrQS2KJg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=silabs.com; dmarc=pass action=none header.from=silabs.com; dkim=pass header.d=silabs.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=silabs.onmicrosoft.com; s=selector2-silabs-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DNeaguFg3Aqmlb53Xr4mhjs0uC1L1PwS4+F72Sw9Pw4=; b=UZd0EId96snDZT95Jw9CsQNZfyoBablFGxtzA5oL7fDrhTPGaiHaXxl+d3TV3Q2djWSRKM50sJ7q/amWnbdgDtb8IYTZBAvsEDdhqur9/FxKH7Av1/Ay1BD/q0CW19rZXqObt/nRAAbfbPDWbt6FXM1kTKg2FG0SMnyGRp7bmkE= Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=none action=none header.from=silabs.com; Received: from SN6PR11MB2718.namprd11.prod.outlook.com (2603:10b6:805:63::18) by SN6PR11MB3360.namprd11.prod.outlook.com (2603:10b6:805:c8::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4523.14; Fri, 17 Sep 2021 15:15:18 +0000 Received: from SN6PR11MB2718.namprd11.prod.outlook.com ([fe80::7050:a0a:415:2ccd]) by SN6PR11MB2718.namprd11.prod.outlook.com ([fe80::7050:a0a:415:2ccd%7]) with mapi id 15.20.4500.017; Fri, 17 Sep 2021 15:15:18 +0000 From: Jerome Pouiller To: linux-wireless@vger.kernel.org, netdev@vger.kernel.org, Kalle Valo Cc: devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org, Greg Kroah-Hartman , "David S . Miller" , devicetree@vger.kernel.org, Rob Herring , linux-mmc@vger.kernel.org, =?UTF-8?q?Pali=20Roh=C3=A1r?= , Ulf Hansson , =?UTF-8?q?J=C3=A9r=C3=B4me=20Pouiller?= Subject: [PATCH v6 23/24] wfx: remove from the staging area Date: Fri, 17 Sep 2021 17:13:59 +0200 Message-Id: <20210917151401.2274772-24-Jerome.Pouiller@silabs.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210917151401.2274772-1-Jerome.Pouiller@silabs.com> References: <20210917151401.2274772-1-Jerome.Pouiller@silabs.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 X-ClientProxiedBy: SA9PR03CA0029.namprd03.prod.outlook.com (2603:10b6:806:20::34) To SN6PR11MB2718.namprd11.prod.outlook.com (2603:10b6:805:63::18) MIME-Version: 1.0 Received: from pc-42.silabs.com (2a01:e34:ecb5:66a0:9876:e1d7:65be:d294) by SA9PR03CA0029.namprd03.prod.outlook.com (2603:10b6:806:20::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4523.14 via Frontend Transport; Fri, 17 Sep 2021 15:15:15 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 050c1ed3-6cf3-4dc2-3e8a-08d979edf4e1 X-MS-TrafficTypeDiagnostic: SN6PR11MB3360: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:5236; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ELB5GaiWkPQMB9BRrca4GUkyIDoZIaNO9vxkXa8KWLxgInSsAYAsypXiKDkuwYba5Y+du/S37Ed4QRd728b+7LQARRdISVTtBLebtkIuoQ5108TlXIK1JZdMg/gaP07ctT2X77AIH7gVnlKIOzYmxqW3kIbGAiAMwFFmD93LxZwjTeCi7vP2mUR0Nt8G0FOhE1dXGuBt7Pwv/5WYtDiXPLPQPo4jexFe97fwHBYeNDS/BmnD53gla2LON5QRiQtL5y5c5Skbv2qpgPuPQ1GRLpO1r6TqlEMml+ZTIURPlSYHXqZtilDhuZLfsFNbdb7LFlsuIfLT+Qt5+AISiQsMTYeN2j+6uppPDfNWrFKN+GomzjhkQPmDV2+iVNv906/+ZKOGRRhiwuvq5EK8xw5uGC0tBPZQJyAlm9tfnY97rpyWPVY3otp3mzt2q/L1hGRWKSAGPIBiFsoQF8ULUTqYYQUwV/Hq03YijSZzY3vCPQSmovtrB5IBc57YRwZJdHW8MkxkAQ7n+XHrcZA0aKLwqjGHmILc+O8n+hFlLGPMjSPeOXxUPh3m8Pi1L2nFIlmSuy78+yZMTBSgwM7Zzrmy5upjjaKpbjmg8j+E/V5V0Uue+IjnkWT5UiUDjEDiLyz1/eUrJ2FEsUpiGo7hO0WAwJ/pNdhwoa34n0epu0iX9Si2/4Ig7NAaIRbqW1OVHPpIwzOQl9FnKoiPv3gtFc6dved8WHKpHVMXrAFDgcaPvpHGrmEH+Wux3dpYdUNQDCBuZdhaY20cVS1qy/Vy4DeBYg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN6PR11MB2718.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(39850400004)(376002)(346002)(396003)(136003)(8936002)(966005)(5660300002)(36756003)(7696005)(86362001)(83380400001)(52116002)(54906003)(66476007)(107886003)(66556008)(30864003)(8676002)(66946007)(316002)(2616005)(7416002)(6916009)(4326008)(38100700002)(66574015)(6666004)(186003)(478600001)(6486002)(2906002)(1076003)(21314003)(569008)(559001)(579004);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZGNwY3U1TGNiRFRvZkU2c1pBK2s4Ui9DVnFEYXc1TVlBaVJuQTM0OGpiNkhQ?= =?utf-8?B?dm81dUZacXFXNHhKQVg3NFVITnJnUUVwb1AvV0grMkFUMEhBbFRzczFjZnp3?= =?utf-8?B?WHZ2RkhyWVhyeEpEVFI5d3RkY3BVWjV2RS8vaVBUcndoMy9pZW1KNmZ3TTJh?= =?utf-8?B?RmZ2YlkzemNzTjZVaXZVQ25wZlNTei9BOFVXY2FSUy9CS2dWYkY4bEJDd1FM?= =?utf-8?B?R0E4aGpjNkR1QXZTK3Uvb3RTRGE4MDROQlBpRGM4bk5iaTNuejgvWVNPdEcw?= =?utf-8?B?cmMvVmZ0MkJUemdsUmxtYkdEalYrSFk3Mko3RzRpaWJqcHprMTFOZ2lCTXpO?= =?utf-8?B?U2JjRWtiN2R4RlBmUmJiYTNBeXFpMTk3WVRBK0tkZHFDV1lKTE9hZVdNQmxK?= =?utf-8?B?L21vbStSbkJGT3U2bzF4Q0Fza0VxTEVFdklobXlPVWlYTGNIek52KzZpUE9S?= =?utf-8?B?RS9MSXpvbHhKY2dmZE9sSXlrdllaZWlueEJyWHZJb1pCTHB5bjVVL2JXV0Ux?= =?utf-8?B?bGlyTEI3Ui80Mk5iV2tDM0lHUmFGYmExeWkxWFVEOVloV1d2N01QQXJjSWI5?= =?utf-8?B?VUZlcCtoNHhUSlFjUHVqUldQS3JsakR3YzNFRFRoZWN5ZE5CRWF6UHJvN1lw?= =?utf-8?B?MjRoQ0VjL1FrNmV2cG1vdExhNG80UEsvdDdVSDNYbFdEMlNSTnJjdWROMDYv?= =?utf-8?B?NXZpUHNlUkllWlJvOEhRdks4SnoyUWxlOGVZV0gxVEM5d0o4czA3TmVaSVo1?= =?utf-8?B?UWtGSkxDanc1WGk4Q2t5d29reVRuS2pEd3FNL092bEpsQlBSTy9YeXZZbjJv?= =?utf-8?B?VWY1c2N4eFMwRWJKZ24xb0pVaHJJOG1xMThrb0ZUcWhjazZkUk1kWTVQT0s5?= =?utf-8?B?Y05zQno0eHJCaFVWd2VqMFJzNldsU0d1ZlNCSWI3Z0NxdmlUZUVFdVUzNEZs?= =?utf-8?B?TmVUMlJxaitmVkVrN2lmYmh6WnY4T1UwbmZTOUJzWUxLZkZEN3lMb3hsMWJB?= =?utf-8?B?QlZoMWRBaW15RWFrUkplbE9CMVd3Z1BOZVExWXdpbDVJU2haWGcxR0pveWd6?= =?utf-8?B?bldISzZvRzZIRWZqdVpRUktaaGRDY3Q3N0VVSFQzOUFtMFN1YUtJZk1kRFRu?= =?utf-8?B?UlhVaUJkYmozYWt2SEZVYi9YQ0hDQkV1UERkdTJxbFlBdEdNckZjaC9TeDZN?= =?utf-8?B?ZFUrWFpFUHIyS2FVSGU0R3h1QSt3SjJrY25xN2dRaFl6VFROVTdiYmhKSm5L?= =?utf-8?B?amxnUHFBTG05cFpSTXRsQks1S1Bra1NHZDNCVkpOU3d1S1JoeDQ3dkZHU0w4?= =?utf-8?B?RkNVTXNuWkxIN1BUZlcrS2F6cnRZQzlVQ0R3bTZDWGFLa1g2QitpamhZOFli?= =?utf-8?B?TlNOTklGa1h1ejVFWXJqL0g3cU5nbDg5NmZMVnREd0tIbTMwTTZjMDFYVkgy?= =?utf-8?B?OWp2OVNEVkZtUXoyenRVOWtvLzJ6YWRSU0s3WHJseVdhWW5ueUFSRDVvVlpq?= =?utf-8?B?UGphbGNTTFpxN1BLV0dMR1d0b2VPcWc3QVNGQmY5TkF2NkFCYVlnZStORzRl?= =?utf-8?B?UDBLdkpKSnpCandTZ2hGQzFXWlBGMEMxQ0NrMERTTTdZR0lXUzJ4QitSK25x?= =?utf-8?B?V2ZvcFllcUdZMVdJRkZUZklGWWRObEtjeE9yYVpkWFNPNE16SjBHMG5nd0s4?= =?utf-8?B?enFPNG9rQ3A0aEczbDhxUHFUOGNGaFZGZWNpbXJ3c01oUzJTZFdpeXFIemJk?= =?utf-8?B?Z3RleVVWdEI3TmFsaEg1RlBadE5UNjIrU0c4NWVkbysxNjFWbGJwVkhockFY?= =?utf-8?B?dU1Id2EraWo1cWJFcm5lZjB0YmQ2ODZubXg0bGxKTk41MU1WTXlUUUlaa0hF?= =?utf-8?Q?S3Ex1wYYwGEuh?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 050c1ed3-6cf3-4dc2-3e8a-08d979edf4e1 X-MS-Exchange-CrossTenant-AuthSource: SN6PR11MB2718.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Sep 2021 15:15:18.1083 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 54dbd822-5231-4b20-944d-6f4abcd541fb X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: lE0nN8eA4cYel13Bwh2jwu3qeXOW9r2HElFvw8h/nm24POXv/R4wnBFUNXTE4371R0m/yentbTSSFK5WPB1/MQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR11MB3360 Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org RnJvbTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29tPgoKU2ln bmVkLW9mZi1ieTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29t PgotLS0KIC4uLi9iaW5kaW5ncy9uZXQvd2lyZWxlc3Mvc2lsYWJzLHdmeC55YW1sICAgICB8IDEy NSAtLS0KIGRyaXZlcnMvc3RhZ2luZy93ZngvS2NvbmZpZyAgICAgICAgICAgICAgICAgICB8ICAg OCAtCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L01ha2VmaWxlICAgICAgICAgICAgICAgICAgfCAgMjUg LQogZHJpdmVycy9zdGFnaW5nL3dmeC9iaC5jICAgICAgICAgICAgICAgICAgICAgIHwgMzMwIC0t LS0tLS0KIGRyaXZlcnMvc3RhZ2luZy93ZngvYmguaCAgICAgICAgICAgICAgICAgICAgICB8ICAz MyAtCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L2J1cy5oICAgICAgICAgICAgICAgICAgICAgfCAgMzgg LQogZHJpdmVycy9zdGFnaW5nL3dmeC9idXNfc2Rpby5jICAgICAgICAgICAgICAgIHwgMjcyIC0t LS0tLQogZHJpdmVycy9zdGFnaW5nL3dmeC9idXNfc3BpLmMgICAgICAgICAgICAgICAgIHwgMjcx IC0tLS0tLQogZHJpdmVycy9zdGFnaW5nL3dmeC9kYXRhX3J4LmMgICAgICAgICAgICAgICAgIHwg IDk0IC0tCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L2RhdGFfcnguaCAgICAgICAgICAgICAgICAgfCAg MTggLQogZHJpdmVycy9zdGFnaW5nL3dmeC9kYXRhX3R4LmMgICAgICAgICAgICAgICAgIHwgNTk2 IC0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvc3RhZ2luZy93ZngvZGF0YV90eC5oICAgICAgICAgICAg ICAgICB8ICA2OCAtLQogZHJpdmVycy9zdGFnaW5nL3dmeC9kZWJ1Zy5jICAgICAgICAgICAgICAg ICAgIHwgMzY1IC0tLS0tLS0tCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L2RlYnVnLmggICAgICAgICAg ICAgICAgICAgfCAgMTkgLQogZHJpdmVycy9zdGFnaW5nL3dmeC9md2lvLmMgICAgICAgICAgICAg ICAgICAgIHwgNDA1IC0tLS0tLS0tLQogZHJpdmVycy9zdGFnaW5nL3dmeC9md2lvLmggICAgICAg ICAgICAgICAgICAgIHwgIDE1IC0KIGRyaXZlcnMvc3RhZ2luZy93ZngvaGlmX2FwaV9jbWQuaCAg ICAgICAgICAgICB8IDU1NSAtLS0tLS0tLS0tLS0KIGRyaXZlcnMvc3RhZ2luZy93ZngvaGlmX2Fw aV9nZW5lcmFsLmggICAgICAgICB8IDI2MiAtLS0tLS0KIGRyaXZlcnMvc3RhZ2luZy93ZngvaGlm X2FwaV9taWIuaCAgICAgICAgICAgICB8IDM0NiAtLS0tLS0tLQogZHJpdmVycy9zdGFnaW5nL3dm eC9oaWZfcnguYyAgICAgICAgICAgICAgICAgIHwgNDE2IC0tLS0tLS0tLQogZHJpdmVycy9zdGFn aW5nL3dmeC9oaWZfcnguaCAgICAgICAgICAgICAgICAgIHwgIDE3IC0KIGRyaXZlcnMvc3RhZ2lu Zy93ZngvaGlmX3R4LmMgICAgICAgICAgICAgICAgICB8IDUxMyAtLS0tLS0tLS0tLQogZHJpdmVy cy9zdGFnaW5nL3dmeC9oaWZfdHguaCAgICAgICAgICAgICAgICAgIHwgIDYwIC0tCiBkcml2ZXJz L3N0YWdpbmcvd2Z4L2hpZl90eF9taWIuYyAgICAgICAgICAgICAgfCAzMjQgLS0tLS0tLQogZHJp dmVycy9zdGFnaW5nL3dmeC9oaWZfdHhfbWliLmggICAgICAgICAgICAgIHwgIDQ5IC0KIGRyaXZl cnMvc3RhZ2luZy93ZngvaHdpby5jICAgICAgICAgICAgICAgICAgICB8IDM1MiAtLS0tLS0tLQog ZHJpdmVycy9zdGFnaW5nL3dmeC9od2lvLmggICAgICAgICAgICAgICAgICAgIHwgIDc1IC0tCiBk cml2ZXJzL3N0YWdpbmcvd2Z4L2tleS5jICAgICAgICAgICAgICAgICAgICAgfCAyNDEgLS0tLS0K IGRyaXZlcnMvc3RhZ2luZy93Zngva2V5LmggICAgICAgICAgICAgICAgICAgICB8ICAyMCAtCiBk cml2ZXJzL3N0YWdpbmcvd2Z4L21haW4uYyAgICAgICAgICAgICAgICAgICAgfCA1MDYgLS0tLS0t LS0tLS0KIGRyaXZlcnMvc3RhZ2luZy93ZngvbWFpbi5oICAgICAgICAgICAgICAgICAgICB8ICA0 MyAtCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L3F1ZXVlLmMgICAgICAgICAgICAgICAgICAgfCAzMDcg LS0tLS0tLQogZHJpdmVycy9zdGFnaW5nL3dmeC9xdWV1ZS5oICAgICAgICAgICAgICAgICAgIHwg IDQ1IC0KIGRyaXZlcnMvc3RhZ2luZy93Zngvc2Nhbi5jICAgICAgICAgICAgICAgICAgICB8IDE0 OSAtLS0tCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L3NjYW4uaCAgICAgICAgICAgICAgICAgICAgfCAg MjIgLQogZHJpdmVycy9zdGFnaW5nL3dmeC9zdGEuYyAgICAgICAgICAgICAgICAgICAgIHwgODM0 IC0tLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9zdGFnaW5nL3dmeC9zdGEuaCAgICAgICAgICAg ICAgICAgICAgIHwgIDczIC0tCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L3RyYWNlcy5oICAgICAgICAg ICAgICAgICAgfCA1MDEgLS0tLS0tLS0tLS0KIGRyaXZlcnMvc3RhZ2luZy93Zngvd2Z4LmggICAg ICAgICAgICAgICAgICAgICB8IDE2NCAtLS0tCiAzOSBmaWxlcyBjaGFuZ2VkLCA4NTU2IGRlbGV0 aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy93ZngvRG9jdW1lbnRh dGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9zaWxhYnMsd2Z4LnlhbWwKIGRl bGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L0tjb25maWcKIGRlbGV0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L01ha2VmaWxlCiBkZWxldGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9zdGFnaW5nL3dmeC9iaC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFn aW5nL3dmeC9iaC5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3dmeC9idXMu aAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy93ZngvYnVzX3NkaW8uYwogZGVs ZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy93ZngvYnVzX3NwaS5jCiBkZWxldGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3dmeC9kYXRhX3J4LmMKIGRlbGV0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L2RhdGFfcnguaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvc3RhZ2luZy93ZngvZGF0YV90eC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFn aW5nL3dmeC9kYXRhX3R4LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4 L2RlYnVnLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L2RlYnVnLmgK IGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L2Z3aW8uYwogZGVsZXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy93ZngvZndpby5oCiBkZWxldGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfYXBpX2NtZC5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJp dmVycy9zdGFnaW5nL3dmeC9oaWZfYXBpX2dlbmVyYWwuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvc3RhZ2luZy93ZngvaGlmX2FwaV9taWIuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvc3RhZ2luZy93ZngvaGlmX3J4LmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdp bmcvd2Z4L2hpZl9yeC5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3dmeC9o aWZfdHguYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3R4LmgK IGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl90eF9taWIuYwogZGVs ZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3R4X21pYi5oCiBkZWxldGUg bW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3dmeC9od2lvLmMKIGRlbGV0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L2h3aW8uaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv c3RhZ2luZy93Zngva2V5LmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4 L2tleS5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3dmeC9tYWluLmMKIGRl bGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L21haW4uaAogZGVsZXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy93ZngvcXVldWUuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvc3RhZ2luZy93ZngvcXVldWUuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3Rh Z2luZy93Zngvc2Nhbi5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3dmeC9z Y2FuLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L3N0YS5jCiBkZWxl dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3dmeC9zdGEuaAogZGVsZXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvc3RhZ2luZy93ZngvdHJhY2VzLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL3N0YWdpbmcvd2Z4L3dmeC5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9E b2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL3NpbGFicyx3Zngu eWFtbCBiL2RyaXZlcnMvc3RhZ2luZy93ZngvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRp bmdzL25ldC93aXJlbGVzcy9zaWxhYnMsd2Z4LnlhbWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDUxMGVkZDEyZWQxOS4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93 ZngvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9zaWxhYnMs d2Z4LnlhbWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotIyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpCi0jIENvcHlyaWdodCAo YykgMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSVZQU1MIDEuMgotLS0tCi0KLSRp ZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3dpcmVsZXNzL3NpbGFicyx3Zngu eWFtbCMKLSRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55 YW1sIwotCi10aXRsZTogU2lsaWNvbiBMYWJzIFdGeHh4IGRldmljZXRyZWUgYmluZGluZ3MKLQot bWFpbnRhaW5lcnM6Ci0gIC0gSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxh YnMuY29tPgotCi1kZXNjcmlwdGlvbjoKLSAgVGhlIFdGeHh4IGNoaXAgc2VyaWVzIGNhbiBiZSBj b25uZWN0ZWQgdmlhIFNQSSBvciB2aWEgU0RJTy4KLQotICBGb3IgU0RJTyc6JwotCi0gICAgVGhl IGRyaXZlciBpcyBhYmxlIHRvIGRldGVjdCBhIFdGeHh4IGNoaXAgb24gU0RJTyBidXMgYnkgbWF0 Y2hpbmcgaXRzIFZlbmRvcgotICAgIElEIGFuZCBQcm9kdWN0IElELiBIb3dldmVyLCBkcml2ZXIg d2lsbCBvbmx5IHByb3ZpZGUgbGltaXRlZCBmZWF0dXJlcyBpbgotICAgIHRoaXMgY2FzZS4gVGh1 cyBkZWNsYXJpbmcgV0Z4eHggY2hpcCBpbiBkZXZpY2UgdHJlZSBpcyByZWNvbW1lbmRlZCAoYW5k IG1heQotICAgIGJlY29tZSBtYW5kYXRvcnkgaW4gdGhlIGZ1dHVyZSkuCi0KLSAgICBJbiBhZGRp dGlvbiwgaXQgaXMgcmVjb21tZW5kZWQgdG8gZGVjbGFyZSBhIG1tYy1wd3JzZXEgb24gU0RJTyBo b3N0IGFib3ZlCi0gICAgV0Z4LiBXaXRob3V0IGl0LCB5b3UgbWF5IGVuY291bnRlciBpc3N1ZXMg d2l0aCB3YXJtIGJvb3QuIFRoZSBtbWMtcHdyc2VxCi0gICAgc2hvdWxkIGJlIGNvbXBhdGlibGUg d2l0aCBtbWMtcHdyc2VxLXNpbXBsZS4gUGxlYXNlIGNvbnN1bHQKLSAgICBEb2N1bWVudGF0aW9u L2RldmljZXRyZWUvYmluZGluZ3MvbW1jL21tYy1wd3JzZXEtc2ltcGxlLnlhbWwgZm9yIG1vcmUK LSAgICBpbmZvcm1hdGlvbi4KLQotICBGb3IgU1BJJzonCi0KLSAgICBJbiBhZGQgb2YgdGhlIHBy b3BlcnRpZXMgYmVsb3csIHBsZWFzZSBjb25zdWx0Ci0gICAgRG9jdW1lbnRhdGlvbi9kZXZpY2V0 cmVlL2JpbmRpbmdzL3NwaS9zcGktY29udHJvbGxlci55YW1sIGZvciBvcHRpb25hbCBTUEkKLSAg ICByZWxhdGVkIHByb3BlcnRpZXMuCi0KLSAgTm90ZSB0aGF0IGluIGFkZCBvZiB0aGUgcHJvcGVy dGllcyBiZWxvdywgdGhlIFdGeCBkcml2ZXIgYWxzbyBzdXBwb3J0cwotICBgbWFjLWFkZHJlc3Ng IGFuZCBgbG9jYWwtbWFjLWFkZHJlc3NgIGFzIGRlc2NyaWJlZCBpbgotICBEb2N1bWVudGF0aW9u L2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2V0aGVybmV0LnR4dAotCi1wcm9wZXJ0aWVzOgotICBj b21wYXRpYmxlOgotICAgIGNvbnN0OiBzaWxhYnMsd2YyMDAKLSAgcmVnOgotICAgIGRlc2NyaXB0 aW9uOgotICAgICAgV2hlbiB1c2VkIG9uIFNESU8gYnVzLCA8cmVnPiBtdXN0IGJlIHNldCB0byAx LiBXaGVuIHVzZWQgb24gU1BJIGJ1cywgaXQgaXMKLSAgICAgIHRoZSBjaGlwIHNlbGVjdCBhZGRy ZXNzIG9mIHRoZSBkZXZpY2UgYXMgZGVmaW5lZCBpbiB0aGUgU1BJIGRldmljZXMKLSAgICAgIGJp bmRpbmdzLgotICAgIG1heEl0ZW1zOiAxCi0gIHNwaS1tYXgtZnJlcXVlbmN5OgotICAgIGRlc2Ny aXB0aW9uOiAoU1BJIG9ubHkpIE1heGltdW0gU1BJIGNsb2NraW5nIHNwZWVkIG9mIGRldmljZSBp biBIei4KLSAgICBtYXhJdGVtczogMQotICBpbnRlcnJ1cHRzOgotICAgIGRlc2NyaXB0aW9uOiBU aGUgaW50ZXJydXB0IGxpbmUuIFRyaWdnZXJzIElSUV9UWVBFX0xFVkVMX0hJR0ggYW5kCi0gICAg ICBJUlFfVFlQRV9FREdFX1JJU0lORyBhcmUgYm90aCBzdXBwb3J0ZWQgYnkgdGhlIGNoaXAgYW5k IHRoZSBkcml2ZXIuIFdoZW4KLSAgICAgIFNQSSBpcyB1c2VkLCB0aGlzIHByb3BlcnR5IGlzIHJl cXVpcmVkLiBXaGVuIFNESU8gaXMgdXNlZCwgdGhlICJpbi1iYW5kIgotICAgICAgaW50ZXJydXB0 IHByb3ZpZGVkIGJ5IHRoZSBTRElPIGJ1cyBpcyB1c2VkIHVubGVzcyBhbiBpbnRlcnJ1cHQgaXMg ZGVmaW5lZAotICAgICAgaW4gdGhlIERldmljZSBUcmVlLgotICAgIG1heEl0ZW1zOiAxCi0gIHJl c2V0LWdwaW9zOgotICAgIGRlc2NyaXB0aW9uOiAoU1BJIG9ubHkpIFBoYW5kbGUgb2YgZ3BpbyB0 aGF0IHdpbGwgYmUgdXNlZCB0byByZXNldCBjaGlwCi0gICAgICBkdXJpbmcgcHJvYmUuIFdpdGhv dXQgdGhpcyBwcm9wZXJ0eSwgeW91IG1heSBlbmNvdW50ZXIgaXNzdWVzIHdpdGggd2FybQotICAg ICAgYm9vdC4gKEZvciBsZWdhY3kgcHVycG9zZSwgdGhlIGdwaW8gaW4gaW52ZXJ0ZWQgd2hlbiBj b21wYXRpYmxlID09Ci0gICAgICAic2lsYWJzLHdmeC1zcGkiKQotCi0gICAgICBGb3IgU0RJTywg dGhlIHJlc2V0IGdwaW8gc2hvdWxkIGRlY2xhcmVkIHVzaW5nIGEgbW1jLXB3cnNlcS4KLSAgICBt YXhJdGVtczogMQotICB3YWtldXAtZ3Bpb3M6Ci0gICAgZGVzY3JpcHRpb246IFBoYW5kbGUgb2Yg Z3BpbyB0aGF0IHdpbGwgYmUgdXNlZCB0byB3YWtlLXVwIGNoaXAuIFdpdGhvdXQgdGhpcwotICAg ICAgcHJvcGVydHksIGRyaXZlciB3aWxsIGRpc2FibGUgbW9zdCBvZiBwb3dlciBzYXZpbmcgZmVh dHVyZXMuCi0gICAgbWF4SXRlbXM6IDEKLSAgY29uZmlnLWZpbGU6Ci0gICAgZGVzY3JpcHRpb246 IFVzZSBhbiBhbHRlcm5hdGl2ZSBmaWxlIGFzIFBEUy4gRGVmYXVsdCBpcyBgd2YyMDAucGRzYC4g T25seQotICAgICAgbmVjZXNzYXJ5IGZvciBkZXZlbG9wbWVudC9kZWJ1ZyBwdXJwb3NlLgotICAg IG1heEl0ZW1zOiAxCi0KLXJlcXVpcmVkOgotICAtIGNvbXBhdGlibGUKLSAgLSByZWcKLQotZXhh bXBsZXM6Ci0gIC0gfAotICAgICNpbmNsdWRlIDxkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaD4KLSAg ICAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+Ci0KLSAg ICBzcGkwIHsKLSAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0gICAgICAgICNzaXplLWNl bGxzID0gPDA+OwotCi0gICAgICAgIHdmeEAwIHsKLSAgICAgICAgICAgIGNvbXBhdGlibGUgPSAi c2lsYWJzLHdmMjAwIjsKLSAgICAgICAgICAgIHBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0g ICAgICAgICAgICBwaW5jdHJsLTAgPSA8JndmeF9pcnEgJndmeF9ncGlvcz47Ci0gICAgICAgICAg ICByZWcgPSA8MD47Ci0gICAgICAgICAgICBpbnRlcnJ1cHRzLWV4dGVuZGVkID0gPCZncGlvIDE2 IElSUV9UWVBFX0VER0VfUklTSU5HPjsKLSAgICAgICAgICAgIHdha2V1cC1ncGlvcyA9IDwmZ3Bp byAxMiBHUElPX0FDVElWRV9ISUdIPjsKLSAgICAgICAgICAgIHJlc2V0LWdwaW9zID0gPCZncGlv IDEzIEdQSU9fQUNUSVZFX0xPVz47Ci0gICAgICAgICAgICBzcGktbWF4LWZyZXF1ZW5jeSA9IDw0 MjAwMDAwMD47Ci0gICAgICAgIH07Ci0gICAgfTsKLQotICAtIHwKLSAgICAjaW5jbHVkZSA8ZHQt YmluZGluZ3MvZ3Bpby9ncGlvLmg+Ci0gICAgI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2ludGVycnVw dC1jb250cm9sbGVyL2lycS5oPgotCi0gICAgd2Z4X3B3cnNlcTogd2Z4X3B3cnNlcSB7Ci0gICAg ICAgIGNvbXBhdGlibGUgPSAibW1jLXB3cnNlcS1zaW1wbGUiOwotICAgICAgICBwaW5jdHJsLW5h bWVzID0gImRlZmF1bHQiOwotICAgICAgICBwaW5jdHJsLTAgPSA8JndmeF9yZXNldD47Ci0gICAg ICAgIHJlc2V0LWdwaW9zID0gPCZncGlvIDEzIEdQSU9fQUNUSVZFX0xPVz47Ci0gICAgfTsKLQot ICAgIG1tYzAgewotICAgICAgICBtbWMtcHdyc2VxID0gPCZ3ZnhfcHdyc2VxPjsKLSAgICAgICAg I2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0gICAgICAgICNzaXplLWNlbGxzID0gPDA+OwotCi0gICAg ICAgIG1tY0AxIHsKLSAgICAgICAgICAgIGNvbXBhdGlibGUgPSAic2lsYWJzLHdmMjAwIjsKLSAg ICAgICAgICAgIHBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7Ci0gICAgICAgICAgICBwaW5jdHJs LTAgPSA8JndmeF93YWtldXA+OwotICAgICAgICAgICAgcmVnID0gPDE+OwotICAgICAgICAgICAg d2FrZXVwLWdwaW9zID0gPCZncGlvIDEyIEdQSU9fQUNUSVZFX0hJR0g+OwotICAgICAgICB9Owot ICAgIH07Ci0uLi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZngvS2NvbmZpZyBiL2Ry aXZlcnMvc3RhZ2luZy93ZngvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg ODNlZTRkMGNhOGM2Li4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC9LY29u ZmlnCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1jb25maWcgV0ZYCi0JdHJpc3RhdGUg IlNpbGljb24gTGFicyB3aXJlbGVzcyBjaGlwcyBXRjIwMCBhbmQgZnVydGhlciIKLQlkZXBlbmRz IG9uIE1BQzgwMjExCi0JZGVwZW5kcyBvbiBNTUMgfHwgIU1NQyAjIGRvIG5vdCBhbGxvdyBXRlg9 eSBpZiBNTUM9bQotCWRlcGVuZHMgb24gKFNQSSB8fCBNTUMpCi0JaGVscAotCSAgVGhpcyBpcyBh IGRyaXZlciBmb3IgU2lsaWNvbnMgTGFicyBXRnh4eCBzZXJpZXMgKFdGMjAwIGFuZCBmdXJ0aGVy KQotCSAgY2hpcHNldHMuIFRoaXMgY2hpcCBjYW4gYmUgZm91bmQgb24gU1BJIG9yIFNESU8gYnVz ZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L01ha2VmaWxlIGIvZHJpdmVycy9z dGFnaW5nL3dmeC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGUwY2M5 ODJjZWFiLi4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC9NYWtlZmlsZQor KysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAKLQotIyBOZWNlc3NhcnkgZm9yIENSRUFURV9UUkFDRV9QT0lOVFMKLUNGTEFHU19k ZWJ1Zy5vID0gLUkkKHNyYykKLQotd2Z4LXkgOj0gXAotCWJoLm8gXAotCWh3aW8ubyBcCi0JZndp by5vIFwKLQloaWZfdHhfbWliLm8gXAotCWhpZl90eC5vIFwKLQloaWZfcngubyBcCi0JcXVldWUu byBcCi0JZGF0YV90eC5vIFwKLQlkYXRhX3J4Lm8gXAotCXNjYW4ubyBcCi0Jc3RhLm8gXAotCWtl eS5vIFwKLQltYWluLm8gXAotCXN0YS5vIFwKLQlkZWJ1Zy5vCi13ZngtJChDT05GSUdfU1BJKSAr PSBidXNfc3BpLm8KLXdmeC0kKHN1YnN0IG0seSwkKENPTkZJR19NTUMpKSArPSBidXNfc2Rpby5v Ci0KLW9iai0kKENPTkZJR19XRlgpICs9IHdmeC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdp bmcvd2Z4L2JoLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2JoLmMKZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IGEwZjlkMWI1MzAxOS4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3Rh Z2luZy93ZngvYmguYworKysgL2Rldi9udWxsCkBAIC0xLDMzMCArMCwwIEBACi0vLyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Ci0vKgotICogSW50ZXJydXB0IGJvdHRvbSBo YWxmIChCSCkuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFib3Jh dG9yaWVzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCi0gKi8KLSNp bmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+Ci0jaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+ Ci0KLSNpbmNsdWRlICJiaC5oIgotI2luY2x1ZGUgIndmeC5oIgotI2luY2x1ZGUgImh3aW8uaCIK LSNpbmNsdWRlICJ0cmFjZXMuaCIKLSNpbmNsdWRlICJoaWZfcnguaCIKLSNpbmNsdWRlICJoaWZf YXBpX2NtZC5oIgotCi1zdGF0aWMgdm9pZCBkZXZpY2Vfd2FrZXVwKHN0cnVjdCB3ZnhfZGV2ICp3 ZGV2KQotewotCWludCBtYXhfcmV0cnkgPSAzOwotCi0JaWYgKCF3ZGV2LT5wZGF0YS5ncGlvX3dh a2V1cCkKLQkJcmV0dXJuOwotCWlmIChncGlvZF9nZXRfdmFsdWVfY2Fuc2xlZXAod2Rldi0+cGRh dGEuZ3Bpb193YWtldXApID4gMCkKLQkJcmV0dXJuOwotCi0JaWYgKHdmeF9hcGlfb2xkZXJfdGhh bih3ZGV2LCAxLCA0KSkgewotCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAod2Rldi0+cGRhdGEu Z3Bpb193YWtldXAsIDEpOwotCQlpZiAoIWNvbXBsZXRpb25fZG9uZSgmd2Rldi0+aGlmLmN0cmxf cmVhZHkpKQotCQkJdXNsZWVwX3JhbmdlKDIwMDAsIDI1MDApOwotCQlyZXR1cm47Ci0JfQotCWZv ciAoOzspIHsKLQkJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHdkZXYtPnBkYXRhLmdwaW9fd2Fr ZXVwLCAxKTsKLQkJLyogY29tcGxldGlvbi5oIGRvZXMgbm90IHByb3ZpZGUgYW55IGZ1bmN0aW9u IHRvIHdhaXQKLQkJICogY29tcGxldGlvbiB3aXRob3V0IGNvbnN1bWUgaXQgKGEga2luZCBvZgot CQkgKiB3YWl0X2Zvcl9jb21wbGV0aW9uX2RvbmVfdGltZW91dCgpKS4gU28gd2UgaGF2ZSB0byBl bXVsYXRlCi0JCSAqIGl0LgotCQkgKi8KLQkJaWYgKHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91 dCgmd2Rldi0+aGlmLmN0cmxfcmVhZHksCi0JCQkJCQltc2Vjc190b19qaWZmaWVzKDIpKSkgewot CQkJY29tcGxldGUoJndkZXYtPmhpZi5jdHJsX3JlYWR5KTsKLQkJCXJldHVybjsKLQkJfSBlbHNl IGlmIChtYXhfcmV0cnktLSA+IDApIHsKLQkJCS8qIE9sZGVyIGZpcm13YXJlcyBoYXZlIGEgcmFj ZSBpbiBzbGVlcC93YWtlLXVwIHByb2Nlc3MuCi0JCQkgKiBSZWRvIHRoZSBwcm9jZXNzIGlzIHN1 ZmZpY2llbnQgdG8gdW5mcmVlemUgdGhlCi0JCQkgKiBjaGlwLgotCQkJICovCi0JCQlkZXZfZXJy KHdkZXYtPmRldiwgInRpbWVvdXQgd2hpbGUgd2FrZSB1cCBjaGlwXG4iKTsKLQkJCWdwaW9kX3Nl dF92YWx1ZV9jYW5zbGVlcCh3ZGV2LT5wZGF0YS5ncGlvX3dha2V1cCwgMCk7Ci0JCQl1c2xlZXBf cmFuZ2UoMjAwMCwgMjUwMCk7Ci0JCX0gZWxzZSB7Ci0JCQlkZXZfZXJyKHdkZXYtPmRldiwgIm1h eCB3YWtlLXVwIHJldHJpZXMgcmVhY2hlZFxuIik7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci19Ci0K LXN0YXRpYyB2b2lkIGRldmljZV9yZWxlYXNlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQotewotCWlm ICghd2Rldi0+cGRhdGEuZ3Bpb193YWtldXApCi0JCXJldHVybjsKLQotCWdwaW9kX3NldF92YWx1 ZV9jYW5zbGVlcCh3ZGV2LT5wZGF0YS5ncGlvX3dha2V1cCwgMCk7Ci19Ci0KLXN0YXRpYyBpbnQg cnhfaGVscGVyKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBzaXplX3QgcmVhZF9sZW4sIGludCAqaXNf Y25mKQotewotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGhpZl9tc2cgKmhpZjsKLQlz aXplX3QgYWxsb2NfbGVuOwotCXNpemVfdCBjb21wdXRlZF9sZW47Ci0JaW50IHJlbGVhc2VfY291 bnQ7Ci0JaW50IHBpZ2d5YmFjayA9IDA7Ci0KLQlXQVJOKHJlYWRfbGVuID4gcm91bmRfZG93bigw eEZGRiwgMikgKiBzaXplb2YodTE2KSwKLQkgICAgICIlczogcmVxdWVzdCBleGNlZWQgdGhlIGNo aXAgY2FwYWJpbGl0eSIsIF9fZnVuY19fKTsKLQotCS8qIEFkZCAyIHRvIHRha2UgaW50byBhY2Nv dW50IHBpZ2d5YmFjayBzaXplICovCi0JYWxsb2NfbGVuID0gd2Rldi0+aHdidXNfb3BzLT5hbGln bl9zaXplKHdkZXYtPmh3YnVzX3ByaXYsIHJlYWRfbGVuICsgMik7Ci0Jc2tiID0gZGV2X2FsbG9j X3NrYihhbGxvY19sZW4pOwotCWlmICghc2tiKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWlmICh3 ZnhfZGF0YV9yZWFkKHdkZXYsIHNrYi0+ZGF0YSwgYWxsb2NfbGVuKSkKLQkJZ290byBlcnI7Ci0K LQlwaWdneWJhY2sgPSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKShza2ItPmRhdGEgKyBhbGxvY19s ZW4gLSAyKSk7Ci0JX3RyYWNlX3BpZ2d5YmFjayhwaWdneWJhY2ssIGZhbHNlKTsKLQotCWhpZiA9 IChzdHJ1Y3QgaGlmX21zZyAqKXNrYi0+ZGF0YTsKLQlXQVJOKGhpZi0+ZW5jcnlwdGVkICYgMHgz LCAiZW5jcnlwdGlvbiBpcyB1bnN1cHBvcnRlZCIpOwotCWlmIChXQVJOKHJlYWRfbGVuIDwgc2l6 ZW9mKHN0cnVjdCBoaWZfbXNnKSwgImNvcnJ1cHRlZCByZWFkIikpCi0JCWdvdG8gZXJyOwotCWNv bXB1dGVkX2xlbiA9IGxlMTZfdG9fY3B1KGhpZi0+bGVuKTsKLQljb21wdXRlZF9sZW4gPSByb3Vu ZF91cChjb21wdXRlZF9sZW4sIDIpOwotCWlmIChjb21wdXRlZF9sZW4gIT0gcmVhZF9sZW4pIHsK LQkJZGV2X2Vycih3ZGV2LT5kZXYsICJpbmNvbnNpc3RlbnQgbWVzc2FnZSBsZW5ndGg6ICV6dSAh PSAlenVcbiIsCi0JCQljb21wdXRlZF9sZW4sIHJlYWRfbGVuKTsKLQkJcHJpbnRfaGV4X2R1bXAo S0VSTl9JTkZPLCAiaGlmOiAiLCBEVU1QX1BSRUZJWF9PRkZTRVQsIDE2LCAxLAotCQkJICAgICAg IGhpZiwgcmVhZF9sZW4sIHRydWUpOwotCQlnb3RvIGVycjsKLQl9Ci0KLQlpZiAoIShoaWYtPmlk ICYgSElGX0lEX0lTX0lORElDQVRJT04pKSB7Ci0JCSgqaXNfY25mKSsrOwotCQlpZiAoaGlmLT5p ZCA9PSBISUZfQ05GX0lEX01VTFRJX1RSQU5TTUlUKQotCQkJcmVsZWFzZV9jb3VudCA9ICgoc3Ry dWN0IGhpZl9jbmZfbXVsdGlfdHJhbnNtaXQgKiloaWYtPmJvZHkpLT5udW1fdHhfY29uZnM7Ci0J CWVsc2UKLQkJCXJlbGVhc2VfY291bnQgPSAxOwotCQlXQVJOKHdkZXYtPmhpZi50eF9idWZmZXJz X3VzZWQgPCByZWxlYXNlX2NvdW50LCAiY29ycnVwdGVkIGJ1ZmZlciBjb3VudGVyIik7Ci0JCXdk ZXYtPmhpZi50eF9idWZmZXJzX3VzZWQgLT0gcmVsZWFzZV9jb3VudDsKLQl9Ci0JX3RyYWNlX2hp Zl9yZWN2KGhpZiwgd2Rldi0+aGlmLnR4X2J1ZmZlcnNfdXNlZCk7Ci0KLQlpZiAoaGlmLT5pZCAh PSBISUZfSU5EX0lEX0VYQ0VQVElPTiAmJiBoaWYtPmlkICE9IEhJRl9JTkRfSURfRVJST1IpIHsK LQkJaWYgKGhpZi0+c2VxbnVtICE9IHdkZXYtPmhpZi5yeF9zZXFudW0pCi0JCQlkZXZfd2Fybih3 ZGV2LT5kZXYsICJ3cm9uZyBtZXNzYWdlIHNlcXVlbmNlOiAlZCAhPSAlZFxuIiwKLQkJCQkgaGlm LT5zZXFudW0sIHdkZXYtPmhpZi5yeF9zZXFudW0pOwotCQl3ZGV2LT5oaWYucnhfc2VxbnVtID0g KGhpZi0+c2VxbnVtICsgMSkgJSAoSElGX0NPVU5URVJfTUFYICsgMSk7Ci0JfQotCi0Jc2tiX3B1 dChza2IsIGxlMTZfdG9fY3B1KGhpZi0+bGVuKSk7Ci0JLyogd2Z4X2hhbmRsZV9yeCB0YWtlcyBj YXJlIG9uIFNLQiBsaXZldGltZSAqLwotCXdmeF9oYW5kbGVfcngod2Rldiwgc2tiKTsKLQlpZiAo IXdkZXYtPmhpZi50eF9idWZmZXJzX3VzZWQpCi0JCXdha2VfdXAoJndkZXYtPmhpZi50eF9idWZm ZXJzX2VtcHR5KTsKLQotCXJldHVybiBwaWdneWJhY2s7Ci0KLWVycjoKLQlpZiAoc2tiKQotCQlk ZXZfa2ZyZWVfc2tiKHNrYik7Ci0JcmV0dXJuIC1FSU87Ci19Ci0KLXN0YXRpYyBpbnQgYmhfd29y a19yeChzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IG1heF9tc2csIGludCAqbnVtX2NuZikKLXsK LQlzaXplX3QgbGVuOwotCWludCBpOwotCWludCBjdHJsX3JlZywgcGlnZ3liYWNrOwotCi0JcGln Z3liYWNrID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgbWF4X21zZzsgaSsrKSB7Ci0JCWlmIChwaWdn eWJhY2sgJiBDVFJMX05FWFRfTEVOX01BU0spCi0JCQljdHJsX3JlZyA9IHBpZ2d5YmFjazsKLQkJ ZWxzZSBpZiAodHJ5X3dhaXRfZm9yX2NvbXBsZXRpb24oJndkZXYtPmhpZi5jdHJsX3JlYWR5KSkK LQkJCWN0cmxfcmVnID0gYXRvbWljX3hjaGcoJndkZXYtPmhpZi5jdHJsX3JlZywgMCk7Ci0JCWVs c2UKLQkJCWN0cmxfcmVnID0gMDsKLQkJaWYgKCEoY3RybF9yZWcgJiBDVFJMX05FWFRfTEVOX01B U0spKQotCQkJcmV0dXJuIGk7Ci0JCS8qIGN0cmxfcmVnIHVuaXRzIGFyZSAxNmJpdHMgd29yZHMg Ki8KLQkJbGVuID0gKGN0cmxfcmVnICYgQ1RSTF9ORVhUX0xFTl9NQVNLKSAqIDI7Ci0JCXBpZ2d5 YmFjayA9IHJ4X2hlbHBlcih3ZGV2LCBsZW4sIG51bV9jbmYpOwotCQlpZiAocGlnZ3liYWNrIDwg MCkKLQkJCXJldHVybiBpOwotCQlpZiAoIShwaWdneWJhY2sgJiBDVFJMX1dMQU5fUkVBRFkpKQot CQkJZGV2X2Vycih3ZGV2LT5kZXYsICJ1bmV4cGVjdGVkIHBpZ2d5YmFjayB2YWx1ZTogcmVhZHkg Yml0IG5vdCBzZXQ6ICUwNHhcbiIsCi0JCQkJcGlnZ3liYWNrKTsKLQl9Ci0JaWYgKHBpZ2d5YmFj ayAmIENUUkxfTkVYVF9MRU5fTUFTSykgewotCQljdHJsX3JlZyA9IGF0b21pY194Y2hnKCZ3ZGV2 LT5oaWYuY3RybF9yZWcsIHBpZ2d5YmFjayk7Ci0JCWNvbXBsZXRlKCZ3ZGV2LT5oaWYuY3RybF9y ZWFkeSk7Ci0JCWlmIChjdHJsX3JlZykKLQkJCWRldl9lcnIod2Rldi0+ZGV2LCAidW5leHBlY3Rl ZCBJUlEgaGFwcGVuZWQ6ICUwNHgvJTA0eFxuIiwKLQkJCQljdHJsX3JlZywgcGlnZ3liYWNrKTsK LQl9Ci0JcmV0dXJuIGk7Ci19Ci0KLXN0YXRpYyB2b2lkIHR4X2hlbHBlcihzdHJ1Y3Qgd2Z4X2Rl diAqd2Rldiwgc3RydWN0IGhpZl9tc2cgKmhpZikKLXsKLQlpbnQgcmV0OwotCXZvaWQgKmRhdGE7 Ci0JYm9vbCBpc19lbmNyeXB0ZWQgPSBmYWxzZTsKLQlzaXplX3QgbGVuID0gbGUxNl90b19jcHUo aGlmLT5sZW4pOwotCi0JV0FSTihsZW4gPCBzaXplb2YoKmhpZiksICJ0cnkgdG8gc2VuZCBjb3Jy dXB0ZWQgZGF0YSIpOwotCi0JaGlmLT5zZXFudW0gPSB3ZGV2LT5oaWYudHhfc2VxbnVtOwotCXdk ZXYtPmhpZi50eF9zZXFudW0gPSAod2Rldi0+aGlmLnR4X3NlcW51bSArIDEpICUgKEhJRl9DT1VO VEVSX01BWCArIDEpOwotCi0JZGF0YSA9IGhpZjsKLQlXQVJOKGxlbiA+IHdkZXYtPmh3X2NhcHMu c2l6ZV9pbnBfY2hfYnVmLAotCSAgICAgIiVzOiByZXF1ZXN0IGV4Y2VlZCB0aGUgY2hpcCBjYXBh YmlsaXR5OiAlenUgPiAlZFxuIiwgX19mdW5jX18sCi0JICAgICBsZW4sIHdkZXYtPmh3X2NhcHMu c2l6ZV9pbnBfY2hfYnVmKTsKLQlsZW4gPSB3ZGV2LT5od2J1c19vcHMtPmFsaWduX3NpemUod2Rl di0+aHdidXNfcHJpdiwgbGVuKTsKLQlyZXQgPSB3ZnhfZGF0YV93cml0ZSh3ZGV2LCBkYXRhLCBs ZW4pOwotCWlmIChyZXQpCi0JCWdvdG8gZW5kOwotCi0Jd2Rldi0+aGlmLnR4X2J1ZmZlcnNfdXNl ZCsrOwotCV90cmFjZV9oaWZfc2VuZChoaWYsIHdkZXYtPmhpZi50eF9idWZmZXJzX3VzZWQpOwot ZW5kOgotCWlmIChpc19lbmNyeXB0ZWQpCi0JCWtmcmVlKGRhdGEpOwotfQotCi1zdGF0aWMgaW50 IGJoX3dvcmtfdHgoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCBtYXhfbXNnKQotewotCXN0cnVj dCBoaWZfbXNnICpoaWY7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbWF4X21zZzsgaSsr KSB7Ci0JCWhpZiA9IE5VTEw7Ci0JCWlmICh3ZGV2LT5oaWYudHhfYnVmZmVyc191c2VkIDwgd2Rl di0+aHdfY2Fwcy5udW1faW5wX2NoX2J1ZnMpIHsKLQkJCWlmICh0cnlfd2FpdF9mb3JfY29tcGxl dGlvbigmd2Rldi0+aGlmX2NtZC5yZWFkeSkpIHsKLQkJCQlXQVJOKCFtdXRleF9pc19sb2NrZWQo JndkZXYtPmhpZl9jbWQubG9jayksICJkYXRhIGxvY2tpbmcgZXJyb3IiKTsKLQkJCQloaWYgPSB3 ZGV2LT5oaWZfY21kLmJ1Zl9zZW5kOwotCQkJfSBlbHNlIHsKLQkJCQloaWYgPSB3ZnhfdHhfcXVl dWVzX2dldCh3ZGV2KTsKLQkJCX0KLQkJfQotCQlpZiAoIWhpZikKLQkJCXJldHVybiBpOwotCQl0 eF9oZWxwZXIod2RldiwgaGlmKTsKLQl9Ci0JcmV0dXJuIGk7Ci19Ci0KLS8qIEluIFNESU8gbW9k ZSwgaXQgaXMgbmVjZXNzYXJ5IHRvIG1ha2UgYW4gYWNjZXNzIHRvIGEgcmVnaXN0ZXIgdG8gYWNr bm93bGVkZ2UKLSAqIGxhc3QgcmVjZWl2ZWQgbWVzc2FnZS4gSXQgY291bGQgYmUgcG9zc2libGUg dG8gcmVzdHJpY3QgdGhpcyBhY2tub3dsZWRnZSB0bwotICogU0RJTyBtb2RlIGFuZCBvbmx5IGlm IGxhc3Qgb3BlcmF0aW9uIHdhcyByeC4KLSAqLwotc3RhdGljIHZvaWQgYWNrX3NkaW9fZGF0YShz dHJ1Y3Qgd2Z4X2RldiAqd2RldikKLXsKLQl1MzIgY2ZnX3JlZzsKLQotCWNvbmZpZ19yZWdfcmVh ZCh3ZGV2LCAmY2ZnX3JlZyk7Ci0JaWYgKGNmZ19yZWcgJiAweEZGKSB7Ci0JCWRldl93YXJuKHdk ZXYtPmRldiwgImNoaXAgcmVwb3J0cyBlcnJvcnM6ICUwMnhcbiIsCi0JCQkgY2ZnX3JlZyAmIDB4 RkYpOwotCQljb25maWdfcmVnX3dyaXRlX2JpdHMod2RldiwgMHhGRiwgMHgwMCk7Ci0JfQotfQot Ci1zdGF0aWMgdm9pZCBiaF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1 Y3Qgd2Z4X2RldiAqd2RldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd2Z4X2RldiwgaGlm LmJoKTsKLQlpbnQgc3RhdHNfcmVxID0gMCwgc3RhdHNfY25mID0gMCwgc3RhdHNfaW5kID0gMDsK LQlib29sIHJlbGVhc2VfY2hpcCA9IGZhbHNlLCBsYXN0X29wX2lzX3J4ID0gZmFsc2U7Ci0JaW50 IG51bV90eCwgbnVtX3J4OwotCi0JZGV2aWNlX3dha2V1cCh3ZGV2KTsKLQlkbyB7Ci0JCW51bV90 eCA9IGJoX3dvcmtfdHgod2RldiwgMzIpOwotCQlzdGF0c19yZXEgKz0gbnVtX3R4OwotCQlpZiAo bnVtX3R4KQotCQkJbGFzdF9vcF9pc19yeCA9IGZhbHNlOwotCQludW1fcnggPSBiaF93b3JrX3J4 KHdkZXYsIDMyLCAmc3RhdHNfY25mKTsKLQkJc3RhdHNfaW5kICs9IG51bV9yeDsKLQkJaWYgKG51 bV9yeCkKLQkJCWxhc3Rfb3BfaXNfcnggPSB0cnVlOwotCX0gd2hpbGUgKG51bV9yeCB8fCBudW1f dHgpOwotCXN0YXRzX2luZCAtPSBzdGF0c19jbmY7Ci0KLQlpZiAobGFzdF9vcF9pc19yeCkKLQkJ YWNrX3NkaW9fZGF0YSh3ZGV2KTsKLQlpZiAoIXdkZXYtPmhpZi50eF9idWZmZXJzX3VzZWQgJiYg IXdvcmtfcGVuZGluZyh3b3JrKSkgewotCQlkZXZpY2VfcmVsZWFzZSh3ZGV2KTsKLQkJcmVsZWFz ZV9jaGlwID0gdHJ1ZTsKLQl9Ci0JX3RyYWNlX2JoX3N0YXRzKHN0YXRzX2luZCwgc3RhdHNfcmVx LCBzdGF0c19jbmYsCi0JCQl3ZGV2LT5oaWYudHhfYnVmZmVyc191c2VkLCByZWxlYXNlX2NoaXAp OwotfQotCi0vKiBBbiBJUlEgZnJvbSBjaGlwIGRpZCBvY2N1ciAqLwotdm9pZCB3ZnhfYmhfcmVx dWVzdF9yeChzdHJ1Y3Qgd2Z4X2RldiAqd2RldikKLXsKLQl1MzIgY3VyLCBwcmV2OwotCi0JY29u dHJvbF9yZWdfcmVhZCh3ZGV2LCAmY3VyKTsKLQlwcmV2ID0gYXRvbWljX3hjaGcoJndkZXYtPmhp Zi5jdHJsX3JlZywgY3VyKTsKLQljb21wbGV0ZSgmd2Rldi0+aGlmLmN0cmxfcmVhZHkpOwotCXF1 ZXVlX3dvcmsoc3lzdGVtX2hpZ2hwcmlfd3EsICZ3ZGV2LT5oaWYuYmgpOwotCi0JaWYgKCEoY3Vy ICYgQ1RSTF9ORVhUX0xFTl9NQVNLKSkKLQkJZGV2X2Vycih3ZGV2LT5kZXYsICJ1bmV4cGVjdGVk IGNvbnRyb2wgcmVnaXN0ZXIgdmFsdWU6IGxlbmd0aCBmaWVsZCBpcyAwOiAlMDR4XG4iLAotCQkJ Y3VyKTsKLQlpZiAocHJldiAhPSAwKQotCQlkZXZfZXJyKHdkZXYtPmRldiwgInJlY2VpdmVkIElS USBidXQgcHJldmlvdXMgZGF0YSB3YXMgbm90ICh5ZXQpIHJlYWQ6ICUwNHgvJTA0eFxuIiwKLQkJ CXByZXYsIGN1cik7Ci19Ci0KLS8qIERyaXZlciB3YW50IHRvIHNlbmQgZGF0YSAqLwotdm9pZCB3 ZnhfYmhfcmVxdWVzdF90eChzdHJ1Y3Qgd2Z4X2RldiAqd2RldikKLXsKLQlxdWV1ZV93b3JrKHN5 c3RlbV9oaWdocHJpX3dxLCAmd2Rldi0+aGlmLmJoKTsKLX0KLQotLyogSWYgSVJRIGlzIG5vdCBh dmFpbGFibGUsIHRoaXMgZnVuY3Rpb24gYWxsb3cgdG8gbWFudWFsbHkgcG9sbCB0aGUgY29udHJv bAotICogcmVnaXN0ZXIgYW5kIHNpbXVsYXRlIGFuIElSUSBhaGVuIGFuIGV2ZW50IGhhcHBlbmVk LgotICoKLSAqIE5vdGUgdGhhdCB0aGUgZGV2aWNlIGhhcyBhIGJ1ZzogSWYgYW4gSVJRIHJhaXNl IHdoaWxlIGhvc3QgcmVhZCBjb250cm9sCi0gKiByZWdpc3RlciwgdGhlIElSUSBpcyBsb3N0LiBT bywgdXNlIHRoaXMgZnVuY3Rpb24gY2FyZWZ1bGx5IChvbmx5IGR1aW5nCi0gKiBkZXZpY2UgaW5p dGlhbGlzYXRpb24pLgotICovCi12b2lkIHdmeF9iaF9wb2xsX2lycShzdHJ1Y3Qgd2Z4X2RldiAq d2RldikKLXsKLQlrdGltZV90IG5vdywgc3RhcnQ7Ci0JdTMyIHJlZzsKLQotCVdBUk4oIXdkZXYt PnBvbGxfaXJxLCAidW5leHBlY3RlZCBJUlEgcG9sbGluZyBjYW4gbWFzayBJUlEiKTsKLQlzdGFy dCA9IGt0aW1lX2dldCgpOwotCWZvciAoOzspIHsKLQkJY29udHJvbF9yZWdfcmVhZCh3ZGV2LCAm cmVnKTsKLQkJbm93ID0ga3RpbWVfZ2V0KCk7Ci0JCWlmIChyZWcgJiAweEZGRikKLQkJCWJyZWFr OwotCQlpZiAoa3RpbWVfYWZ0ZXIobm93LCBrdGltZV9hZGRfbXMoc3RhcnQsIDEwMDApKSkgewot CQkJZGV2X2Vycih3ZGV2LT5kZXYsICJ0aW1lIG91dCB3aGlsZSBwb2xsaW5nIGNvbnRyb2wgcmVn aXN0ZXJcbiIpOwotCQkJcmV0dXJuOwotCQl9Ci0JCXVkZWxheSgyMDApOwotCX0KLQl3ZnhfYmhf cmVxdWVzdF9yeCh3ZGV2KTsKLX0KLQotdm9pZCB3ZnhfYmhfcmVnaXN0ZXIoc3RydWN0IHdmeF9k ZXYgKndkZXYpCi17Ci0JSU5JVF9XT1JLKCZ3ZGV2LT5oaWYuYmgsIGJoX3dvcmspOwotCWluaXRf Y29tcGxldGlvbigmd2Rldi0+aGlmLmN0cmxfcmVhZHkpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQo JndkZXYtPmhpZi50eF9idWZmZXJzX2VtcHR5KTsKLX0KLQotdm9pZCB3ZnhfYmhfdW5yZWdpc3Rl cihzdHJ1Y3Qgd2Z4X2RldiAqd2RldikKLXsKLQlmbHVzaF93b3JrKCZ3ZGV2LT5oaWYuYmgpOwot fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9iaC5oIGIvZHJpdmVycy9zdGFnaW5n L3dmeC9iaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzEyMWNlNGRkM2YuLjAw MDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2JoLmgKKysrIC9kZXYvbnVsbApA QCAtMSwzMyArMCwwIEBACi0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5 ICovCi0vKgotICogSW50ZXJydXB0IGJvdHRvbSBoYWxmIChCSCkuCi0gKgotICogQ29weXJpZ2h0 IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuCi0gKiBDb3B5cmlnaHQg KGMpIDIwMTAsIFNULUVyaWNzc29uCi0gKi8KLSNpZm5kZWYgV0ZYX0JIX0gKLSNkZWZpbmUgV0ZY X0JIX0gKLQotI2luY2x1ZGUgPGxpbnV4L2F0b21pYy5oPgotI2luY2x1ZGUgPGxpbnV4L3dhaXQu aD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLQotc3RydWN0IHdmeF9kZXY7Ci0KLXN0 cnVjdCB3ZnhfaGlmIHsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYmg7Ci0Jc3RydWN0IGNvbXBsZXRp b24gY3RybF9yZWFkeTsKLQl3YWl0X3F1ZXVlX2hlYWRfdCB0eF9idWZmZXJzX2VtcHR5OwotCWF0 b21pY190IGN0cmxfcmVnOwotCWludCByeF9zZXFudW07Ci0JaW50IHR4X3NlcW51bTsKLQlpbnQg dHhfYnVmZmVyc191c2VkOwotfTsKLQotdm9pZCB3ZnhfYmhfcmVnaXN0ZXIoc3RydWN0IHdmeF9k ZXYgKndkZXYpOwotdm9pZCB3ZnhfYmhfdW5yZWdpc3RlcihzdHJ1Y3Qgd2Z4X2RldiAqd2Rldik7 Ci12b2lkIHdmeF9iaF9yZXF1ZXN0X3J4KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KTsKLXZvaWQgd2Z4 X2JoX3JlcXVlc3RfdHgoc3RydWN0IHdmeF9kZXYgKndkZXYpOwotdm9pZCB3ZnhfYmhfcG9sbF9p cnEoc3RydWN0IHdmeF9kZXYgKndkZXYpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMv c3RhZ2luZy93ZngvYnVzLmggYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2J1cy5oCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCBjYTA0YjNkYTYyMDQuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2 ZXJzL3N0YWdpbmcvd2Z4L2J1cy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyog U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwotLyoKLSAqIENvbW1vbiBi dXMgYWJzdHJhY3Rpb24gbGF5ZXIuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNp bGljb24gTGFib3JhdG9yaWVzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNz c29uCi0gKi8KLSNpZm5kZWYgV0ZYX0JVU19ICi0jZGVmaW5lIFdGWF9CVVNfSAotCi0jaW5jbHVk ZSA8bGludXgvbW1jL3NkaW9fZnVuYy5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLQot I2RlZmluZSBXRlhfUkVHX0NPTkZJRyAgICAgICAgMHgwCi0jZGVmaW5lIFdGWF9SRUdfQ09OVFJP TCAgICAgICAweDEKLSNkZWZpbmUgV0ZYX1JFR19JTl9PVVRfUVVFVUUgIDB4MgotI2RlZmluZSBX RlhfUkVHX0FIQl9EUE9SVCAgICAgMHgzCi0jZGVmaW5lIFdGWF9SRUdfQkFTRV9BRERSICAgICAw eDQKLSNkZWZpbmUgV0ZYX1JFR19TUkFNX0RQT1JUICAgIDB4NQotI2RlZmluZSBXRlhfUkVHX1NF VF9HRU5fUl9XICAgMHg2Ci0jZGVmaW5lIFdGWF9SRUdfRlJBTUVfT1VUICAgICAweDcKLQotc3Ry dWN0IGh3YnVzX29wcyB7Ci0JaW50ICgqY29weV9mcm9tX2lvKSh2b2lkICpidXNfcHJpdiwgdW5z aWduZWQgaW50IGFkZHIsCi0JCQkgICAgdm9pZCAqZHN0LCBzaXplX3QgY291bnQpOwotCWludCAo KmNvcHlfdG9faW8pKHZvaWQgKmJ1c19wcml2LCB1bnNpZ25lZCBpbnQgYWRkciwKLQkJCSAgY29u c3Qgdm9pZCAqc3JjLCBzaXplX3QgY291bnQpOwotCWludCAoKmlycV9zdWJzY3JpYmUpKHZvaWQg KmJ1c19wcml2KTsKLQlpbnQgKCppcnFfdW5zdWJzY3JpYmUpKHZvaWQgKmJ1c19wcml2KTsKLQl2 b2lkICgqbG9jaykodm9pZCAqYnVzX3ByaXYpOwotCXZvaWQgKCp1bmxvY2spKHZvaWQgKmJ1c19w cml2KTsKLQlzaXplX3QgKCphbGlnbl9zaXplKSh2b2lkICpidXNfcHJpdiwgc2l6ZV90IHNpemUp OwotfTsKLQotZXh0ZXJuIHN0cnVjdCBzZGlvX2RyaXZlciB3Znhfc2Rpb19kcml2ZXI7Ci1leHRl cm4gc3RydWN0IHNwaV9kcml2ZXIgd2Z4X3NwaV9kcml2ZXI7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9idXNfc2Rpby5jIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9i dXNfc2Rpby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjcwMTc2YmEwNmYuLjAw MDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2J1c19zZGlvLmMKKysrIC9kZXYv bnVsbApAQCAtMSwyNzIgKzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjAtb25seQotLyoKLSAqIFNESU8gaW50ZXJmYWNlLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAx Ny0yMDIwLCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDEw LCBTVC1Fcmljc3NvbgotICovCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8 bGludXgvbW1jL3NkaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9tbWMvc2Rpb19mdW5jLmg+Ci0jaW5j bHVkZSA8bGludXgvbW1jL2NhcmQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNp bmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLQotI2luY2x1 ZGUgImJ1cy5oIgotI2luY2x1ZGUgIndmeC5oIgotI2luY2x1ZGUgImh3aW8uaCIKLSNpbmNsdWRl ICJtYWluLmgiCi0jaW5jbHVkZSAiYmguaCIKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB3ZnhfcGxh dGZvcm1fZGF0YSB3Znhfc2Rpb19wZGF0YSA9IHsKLQkuZmlsZV9mdyA9ICJ3Zm1fd2YyMDAiLAot CS5maWxlX3BkcyA9ICJ3ZjIwMC5wZHMiLAotfTsKLQotc3RydWN0IHdmeF9zZGlvX3ByaXYgewot CXN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmM7Ci0Jc3RydWN0IHdmeF9kZXYgKmNvcmU7Ci0JdTggYnVm X2lkX3R4OwotCXU4IGJ1Zl9pZF9yeDsKLQlpbnQgb2ZfaXJxOwotfTsKLQotc3RhdGljIGludCB3 Znhfc2Rpb19jb3B5X2Zyb21faW8odm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IHJlZ19pZCwKLQkJ CQkgdm9pZCAqZHN0LCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHdmeF9zZGlvX3ByaXYgKmJ1 cyA9IHByaXY7Ci0JdW5zaWduZWQgaW50IHNkaW9fYWRkciA9IHJlZ19pZCA8PCAyOwotCWludCBy ZXQ7Ci0KLQlXQVJOKHJlZ19pZCA+IDcsICJjaGlwIG9ubHkgaGFzIDcgcmVnaXN0ZXJzIik7Ci0J V0FSTigoKHVpbnRwdHJfdClkc3QpICYgMywgInVuYWxpZ25lZCBidWZmZXIgc2l6ZSIpOwotCVdB Uk4oY291bnQgJiAzLCAidW5hbGlnbmVkIGJ1ZmZlciBhZGRyZXNzIik7Ci0KLQkvKiBVc2UgcXVl dWUgbW9kZSBidWZmZXJzICovCi0JaWYgKHJlZ19pZCA9PSBXRlhfUkVHX0lOX09VVF9RVUVVRSkK LQkJc2Rpb19hZGRyIHw9IChidXMtPmJ1Zl9pZF9yeCArIDEpIDw8IDc7Ci0JcmV0ID0gc2Rpb19t ZW1jcHlfZnJvbWlvKGJ1cy0+ZnVuYywgZHN0LCBzZGlvX2FkZHIsIGNvdW50KTsKLQlpZiAoIXJl dCAmJiByZWdfaWQgPT0gV0ZYX1JFR19JTl9PVVRfUVVFVUUpCi0JCWJ1cy0+YnVmX2lkX3J4ID0g KGJ1cy0+YnVmX2lkX3J4ICsgMSkgJSA0OwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlu dCB3Znhfc2Rpb19jb3B5X3RvX2lvKHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCByZWdfaWQsCi0J CQkgICAgICAgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHdmeF9z ZGlvX3ByaXYgKmJ1cyA9IHByaXY7Ci0JdW5zaWduZWQgaW50IHNkaW9fYWRkciA9IHJlZ19pZCA8 PCAyOwotCWludCByZXQ7Ci0KLQlXQVJOKHJlZ19pZCA+IDcsICJjaGlwIG9ubHkgaGFzIDcgcmVn aXN0ZXJzIik7Ci0JV0FSTigoKHVpbnRwdHJfdClzcmMpICYgMywgInVuYWxpZ25lZCBidWZmZXIg c2l6ZSIpOwotCVdBUk4oY291bnQgJiAzLCAidW5hbGlnbmVkIGJ1ZmZlciBhZGRyZXNzIik7Ci0K LQkvKiBVc2UgcXVldWUgbW9kZSBidWZmZXJzICovCi0JaWYgKHJlZ19pZCA9PSBXRlhfUkVHX0lO X09VVF9RVUVVRSkKLQkJc2Rpb19hZGRyIHw9IGJ1cy0+YnVmX2lkX3R4IDw8IDc7Ci0JLyogRklY TUU6IGRpc2NhcmRzICdjb25zdCcgcXVhbGlmaWVyIGZvciBzcmMgKi8KLQlyZXQgPSBzZGlvX21l bWNweV90b2lvKGJ1cy0+ZnVuYywgc2Rpb19hZGRyLCAodm9pZCAqKXNyYywgY291bnQpOwotCWlm ICghcmV0ICYmIHJlZ19pZCA9PSBXRlhfUkVHX0lOX09VVF9RVUVVRSkKLQkJYnVzLT5idWZfaWRf dHggPSAoYnVzLT5idWZfaWRfdHggKyAxKSAlIDMyOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3Rh dGljIHZvaWQgd2Z4X3NkaW9fbG9jayh2b2lkICpwcml2KQotewotCXN0cnVjdCB3Znhfc2Rpb19w cml2ICpidXMgPSBwcml2OwotCi0Jc2Rpb19jbGFpbV9ob3N0KGJ1cy0+ZnVuYyk7Ci19Ci0KLXN0 YXRpYyB2b2lkIHdmeF9zZGlvX3VubG9jayh2b2lkICpwcml2KQotewotCXN0cnVjdCB3Znhfc2Rp b19wcml2ICpidXMgPSBwcml2OwotCi0Jc2Rpb19yZWxlYXNlX2hvc3QoYnVzLT5mdW5jKTsKLX0K LQotc3RhdGljIHZvaWQgd2Z4X3NkaW9faXJxX2hhbmRsZXIoc3RydWN0IHNkaW9fZnVuYyAqZnVu YykKLXsKLQlzdHJ1Y3Qgd2Z4X3NkaW9fcHJpdiAqYnVzID0gc2Rpb19nZXRfZHJ2ZGF0YShmdW5j KTsKLQotCXdmeF9iaF9yZXF1ZXN0X3J4KGJ1cy0+Y29yZSk7Ci19Ci0KLXN0YXRpYyBpcnFyZXR1 cm5fdCB3Znhfc2Rpb19pcnFfaGFuZGxlcl9leHQoaW50IGlycSwgdm9pZCAqcHJpdikKLXsKLQlz dHJ1Y3Qgd2Z4X3NkaW9fcHJpdiAqYnVzID0gcHJpdjsKLQotCXNkaW9fY2xhaW1faG9zdChidXMt PmZ1bmMpOwotCXdmeF9iaF9yZXF1ZXN0X3J4KGJ1cy0+Y29yZSk7Ci0Jc2Rpb19yZWxlYXNlX2hv c3QoYnVzLT5mdW5jKTsKLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBpbnQgd2Z4 X3NkaW9faXJxX3N1YnNjcmliZSh2b2lkICpwcml2KQotewotCXN0cnVjdCB3Znhfc2Rpb19wcml2 ICpidXMgPSBwcml2OwotCXUzMiBmbGFnczsKLQlpbnQgcmV0OwotCXU4IGNjY3I7Ci0KLQlpZiAo IWJ1cy0+b2ZfaXJxKSB7Ci0JCXNkaW9fY2xhaW1faG9zdChidXMtPmZ1bmMpOwotCQlyZXQgPSBz ZGlvX2NsYWltX2lycShidXMtPmZ1bmMsIHdmeF9zZGlvX2lycV9oYW5kbGVyKTsKLQkJc2Rpb19y ZWxlYXNlX2hvc3QoYnVzLT5mdW5jKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlmbGFncyA9IGly cV9nZXRfdHJpZ2dlcl90eXBlKGJ1cy0+b2ZfaXJxKTsKLQlpZiAoIWZsYWdzKQotCQlmbGFncyA9 IElSUUZfVFJJR0dFUl9ISUdIOwotCWZsYWdzIHw9IElSUUZfT05FU0hPVDsKLQlyZXQgPSBkZXZt X3JlcXVlc3RfdGhyZWFkZWRfaXJxKCZidXMtPmZ1bmMtPmRldiwgYnVzLT5vZl9pcnEsIE5VTEws Ci0JCQkJCXdmeF9zZGlvX2lycV9oYW5kbGVyX2V4dCwgZmxhZ3MsCi0JCQkJCSJ3ZngiLCBidXMp OwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0Jc2Rpb19jbGFpbV9ob3N0KGJ1cy0+ZnVuYyk7 Ci0JY2NjciA9IHNkaW9fZjBfcmVhZGIoYnVzLT5mdW5jLCBTRElPX0NDQ1JfSUVOeCwgTlVMTCk7 Ci0JY2NjciB8PSBCSVQoMCk7Ci0JY2NjciB8PSBCSVQoYnVzLT5mdW5jLT5udW0pOwotCXNkaW9f ZjBfd3JpdGViKGJ1cy0+ZnVuYywgY2NjciwgU0RJT19DQ0NSX0lFTngsIE5VTEwpOwotCXNkaW9f cmVsZWFzZV9ob3N0KGJ1cy0+ZnVuYyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgd2Z4 X3NkaW9faXJxX3Vuc3Vic2NyaWJlKHZvaWQgKnByaXYpCi17Ci0Jc3RydWN0IHdmeF9zZGlvX3By aXYgKmJ1cyA9IHByaXY7Ci0JaW50IHJldDsKLQotCWlmIChidXMtPm9mX2lycSkKLQkJZGV2bV9m cmVlX2lycSgmYnVzLT5mdW5jLT5kZXYsIGJ1cy0+b2ZfaXJxLCBidXMpOwotCXNkaW9fY2xhaW1f aG9zdChidXMtPmZ1bmMpOwotCXJldCA9IHNkaW9fcmVsZWFzZV9pcnEoYnVzLT5mdW5jKTsKLQlz ZGlvX3JlbGVhc2VfaG9zdChidXMtPmZ1bmMpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBz aXplX3Qgd2Z4X3NkaW9fYWxpZ25fc2l6ZSh2b2lkICpwcml2LCBzaXplX3Qgc2l6ZSkKLXsKLQlz dHJ1Y3Qgd2Z4X3NkaW9fcHJpdiAqYnVzID0gcHJpdjsKLQotCXJldHVybiBzZGlvX2FsaWduX3Np emUoYnVzLT5mdW5jLCBzaXplKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBod2J1c19vcHMg d2Z4X3NkaW9faHdidXNfb3BzID0gewotCS5jb3B5X2Zyb21faW8gPSB3Znhfc2Rpb19jb3B5X2Zy b21faW8sCi0JLmNvcHlfdG9faW8gPSB3Znhfc2Rpb19jb3B5X3RvX2lvLAotCS5pcnFfc3Vic2Ny aWJlID0gd2Z4X3NkaW9faXJxX3N1YnNjcmliZSwKLQkuaXJxX3Vuc3Vic2NyaWJlID0gd2Z4X3Nk aW9faXJxX3Vuc3Vic2NyaWJlLAotCS5sb2NrCQkJPSB3Znhfc2Rpb19sb2NrLAotCS51bmxvY2sJ CQk9IHdmeF9zZGlvX3VubG9jaywKLQkuYWxpZ25fc2l6ZQkJPSB3Znhfc2Rpb19hbGlnbl9zaXpl LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgd2Z4X3NkaW9fb2ZfbWF0 Y2hbXSA9IHsKLQl7IC5jb21wYXRpYmxlID0gInNpbGFicyx3Zngtc2RpbyIgfSwKLQl7IC5jb21w YXRpYmxlID0gInNpbGFicyx3ZjIwMCIgfSwKLQl7IH0sCi19OwotTU9EVUxFX0RFVklDRV9UQUJM RShvZiwgd2Z4X3NkaW9fb2ZfbWF0Y2gpOwotCi1zdGF0aWMgaW50IHdmeF9zZGlvX3Byb2JlKHN0 cnVjdCBzZGlvX2Z1bmMgKmZ1bmMsCi0JCQkgIGNvbnN0IHN0cnVjdCBzZGlvX2RldmljZV9pZCAq aWQpCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucCA9IGZ1bmMtPmRldi5vZl9ub2RlOwotCXN0 cnVjdCB3Znhfc2Rpb19wcml2ICpidXM7Ci0JaW50IHJldDsKLQotCWlmIChmdW5jLT5udW0gIT0g MSkgewotCQlkZXZfZXJyKCZmdW5jLT5kZXYsICJTRElPIGZ1bmN0aW9uIG51bWJlciBpcyAlZCB3 aGlsZSBpdCBzaG91bGQgYWx3YXlzIGJlIDEgKHVuc3VwcG9ydGVkIGNoaXA/KVxuIiwKLQkJCWZ1 bmMtPm51bSk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCWJ1cyA9IGRldm1fa3phbGxvYygm ZnVuYy0+ZGV2LCBzaXplb2YoKmJ1cyksIEdGUF9LRVJORUwpOwotCWlmICghYnVzKQotCQlyZXR1 cm4gLUVOT01FTTsKLQotCWlmIChucCkgewotCQlpZiAoIW9mX21hdGNoX25vZGUod2Z4X3NkaW9f b2ZfbWF0Y2gsIG5wKSkgewotCQkJZGV2X3dhcm4oJmZ1bmMtPmRldiwgIm5vIGNvbXBhdGlibGUg ZGV2aWNlIGZvdW5kIGluIERUXG4iKTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9Ci0JCWJ1cy0+ b2ZfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOwotCX0gZWxzZSB7Ci0JCWRldl93 YXJuKCZmdW5jLT5kZXYsCi0JCQkgImRldmljZSBpcyBub3QgZGVjbGFyZWQgaW4gRFQsIGZlYXR1 cmVzIHdpbGwgYmUgbGltaXRlZFxuIik7Ci0JCS8qIEZJWE1FOiBpZ25vcmUgVklEL1BJRCBhbmQg b25seSByZWx5IG9uIGRldmljZSB0cmVlICovCi0JCS8vIHJldHVybiAtRU5PREVWOwotCX0KLQot CWJ1cy0+ZnVuYyA9IGZ1bmM7Ci0Jc2Rpb19zZXRfZHJ2ZGF0YShmdW5jLCBidXMpOwotCWZ1bmMt PmNhcmQtPnF1aXJrcyB8PSBNTUNfUVVJUktfTEVOSUVOVF9GTjAgfAotCQkJICAgICAgTU1DX1FV SVJLX0JMS1NaX0ZPUl9CWVRFX01PREUgfAotCQkJICAgICAgTU1DX1FVSVJLX0JST0tFTl9CWVRF X01PREVfNTEyOwotCi0Jc2Rpb19jbGFpbV9ob3N0KGZ1bmMpOwotCXJldCA9IHNkaW9fZW5hYmxl X2Z1bmMoZnVuYyk7Ci0JLyogQmxvY2sgb2YgNjQgYnl0ZXMgaXMgbW9yZSBlZmZpY2llbnQgdGhh biA1MTJCIGZvciBmcmFtZSBzaXplcyA8IDRrICovCi0Jc2Rpb19zZXRfYmxvY2tfc2l6ZShmdW5j LCA2NCk7Ci0Jc2Rpb19yZWxlYXNlX2hvc3QoZnVuYyk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnIw OwotCi0JYnVzLT5jb3JlID0gd2Z4X2luaXRfY29tbW9uKCZmdW5jLT5kZXYsICZ3Znhfc2Rpb19w ZGF0YSwKLQkJCQkgICAgJndmeF9zZGlvX2h3YnVzX29wcywgYnVzKTsKLQlpZiAoIWJ1cy0+Y29y ZSkgewotCQlyZXQgPSAtRUlPOwotCQlnb3RvIGVycjE7Ci0JfQotCi0JcmV0ID0gd2Z4X3Byb2Jl KGJ1cy0+Y29yZSk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnIxOwotCi0JcmV0dXJuIDA7Ci0KLWVy cjE6Ci0Jc2Rpb19jbGFpbV9ob3N0KGZ1bmMpOwotCXNkaW9fZGlzYWJsZV9mdW5jKGZ1bmMpOwot CXNkaW9fcmVsZWFzZV9ob3N0KGZ1bmMpOwotZXJyMDoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0 aWMgdm9pZCB3Znhfc2Rpb19yZW1vdmUoc3RydWN0IHNkaW9fZnVuYyAqZnVuYykKLXsKLQlzdHJ1 Y3Qgd2Z4X3NkaW9fcHJpdiAqYnVzID0gc2Rpb19nZXRfZHJ2ZGF0YShmdW5jKTsKLQotCXdmeF9y ZWxlYXNlKGJ1cy0+Y29yZSk7Ci0Jc2Rpb19jbGFpbV9ob3N0KGZ1bmMpOwotCXNkaW9fZGlzYWJs ZV9mdW5jKGZ1bmMpOwotCXNkaW9fcmVsZWFzZV9ob3N0KGZ1bmMpOwotfQotCi0jZGVmaW5lIFNE SU9fVkVORE9SX0lEX1NJTEFCUyAgICAgICAgMHgwMDAwCi0jZGVmaW5lIFNESU9fREVWSUNFX0lE X1NJTEFCU19XRjIwMCAgMHgxMDAwCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNkaW9fZGV2aWNlX2lk IHdmeF9zZGlvX2lkc1tdID0gewotCXsgU0RJT19ERVZJQ0UoU0RJT19WRU5ET1JfSURfU0lMQUJT LCBTRElPX0RFVklDRV9JRF9TSUxBQlNfV0YyMDApIH0sCi0JLyogRklYTUU6IGlnbm9yZSBWSUQv UElEIGFuZCBvbmx5IHJlbHkgb24gZGV2aWNlIHRyZWUgKi8KLQkvLyB7IFNESU9fREVWSUNFKFNE SU9fQU5ZX0lELCBTRElPX0FOWV9JRCkgfSwKLQl7IH0sCi19OwotTU9EVUxFX0RFVklDRV9UQUJM RShzZGlvLCB3Znhfc2Rpb19pZHMpOwotCi1zdHJ1Y3Qgc2Rpb19kcml2ZXIgd2Z4X3NkaW9fZHJp dmVyID0gewotCS5uYW1lID0gIndmeC1zZGlvIiwKLQkuaWRfdGFibGUgPSB3Znhfc2Rpb19pZHMs Ci0JLnByb2JlID0gd2Z4X3NkaW9fcHJvYmUsCi0JLnJlbW92ZSA9IHdmeF9zZGlvX3JlbW92ZSwK LQkuZHJ2ID0gewotCQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkJLm9mX21hdGNoX3RhYmxlID0g d2Z4X3NkaW9fb2ZfbWF0Y2gsCi0JfQotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93 ZngvYnVzX3NwaS5jIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9idXNfc3BpLmMKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDU1ZmZjZDdjNDJlMi4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZl cnMvc3RhZ2luZy93ZngvYnVzX3NwaS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjcxICswLDAgQEAK LS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLS8qCi0gKiBTUEkgaW50 ZXJmYWNlLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwLCBTaWxpY29uIExhYm9yYXRv cmllcywgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDExLCBTYWdyYWQgSW5jLgotICogQ29weXJp Z2h0IChjKSAyMDEwLCBTVC1Fcmljc3NvbgotICovCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+ Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVy Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVw dC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L29mLmg+Ci0KLSNp bmNsdWRlICJidXMuaCIKLSNpbmNsdWRlICJ3ZnguaCIKLSNpbmNsdWRlICJod2lvLmgiCi0jaW5j bHVkZSAibWFpbi5oIgotI2luY2x1ZGUgImJoLmgiCi0KLSNkZWZpbmUgU0VUX1dSSVRFIDB4N0ZG RiAgICAgICAgLyogdXNhZ2U6IGFuZCBvcGVyYXRpb24gKi8KLSNkZWZpbmUgU0VUX1JFQUQgMHg4 MDAwICAgICAgICAgLyogdXNhZ2U6IG9yIG9wZXJhdGlvbiAqLwotCi0jZGVmaW5lIFdGWF9SRVNF VF9JTlZFUlRFRCAxCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2Z4X3BsYXRmb3JtX2RhdGEgd2Z4 X3NwaV9wZGF0YSA9IHsKLQkuZmlsZV9mdyA9ICJ3Zm1fd2YyMDAiLAotCS5maWxlX3BkcyA9ICJ3 ZjIwMC5wZHMiLAotCS51c2VfcmlzaW5nX2NsayA9IHRydWUsCi19OwotCi1zdHJ1Y3Qgd2Z4X3Nw aV9wcml2IHsKLQlzdHJ1Y3Qgc3BpX2RldmljZSAqZnVuYzsKLQlzdHJ1Y3Qgd2Z4X2RldiAqY29y ZTsKLQlzdHJ1Y3QgZ3Bpb19kZXNjICpncGlvX3Jlc2V0OwotCWJvb2wgbmVlZF9zd2FiOwotfTsK LQotLyogVGhlIGNoaXAgcmVhZHMgMTZiaXRzIG9mIGRhdGEgYXQgdGltZSBhbmQgcGxhY2UgdGhl bSBkaXJlY3RseSBpbnRvIChsaXR0bGUKLSAqIGVuZGlhbikgQ1BVIHJlZ2lzdGVyLiBTbywgdGhl IGNoaXAgZXhwZWN0cyBieXRlcyBvcmRlciB0byBiZSAiQjEgQjAgQjMgQjIiCi0gKiAod2hpbGUg TEUgaXMgIkIwIEIxIEIyIEIzIiBhbmQgQkUgaXMgIkIzIEIyIEIxIEIwIikKLSAqCi0gKiBBIGxp dHRsZSBlbmRpYW4gaG9zdCB3aXRoIGJpdHNfcGVyX3dvcmQgPT0gMTYgc2hvdWxkIGRvIHRoZSBy aWdodCBqb2IKLSAqIG5hdGl2ZWx5LiBUaGUgY29kZSBiZWxvdyB0byBzdXBwb3J0IGJpZyBlbmRp YW4gaG9zdCBhbmQgY29tbW9ubHkgdXNlZCBTUEkKLSAqIDhiaXRzLgotICovCi1zdGF0aWMgaW50 IHdmeF9zcGlfY29weV9mcm9tX2lvKHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBhZGRyLAotCQkJ CXZvaWQgKmRzdCwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCB3Znhfc3BpX3ByaXYgKmJ1cyA9 IHByaXY7Ci0JdTE2IHJlZ2FkZHIgPSAoYWRkciA8PCAxMikgfCAoY291bnQgLyAyKSB8IFNFVF9S RUFEOwotCXN0cnVjdCBzcGlfbWVzc2FnZSAgICAgIG07Ci0Jc3RydWN0IHNwaV90cmFuc2ZlciAg ICAgdF9hZGRyID0gewotCQkudHhfYnVmICAgICAgICAgPSAmcmVnYWRkciwKLQkJLmxlbiAgICAg ICAgICAgID0gc2l6ZW9mKHJlZ2FkZHIpLAotCX07Ci0Jc3RydWN0IHNwaV90cmFuc2ZlciAgICAg dF9tc2cgPSB7Ci0JCS5yeF9idWYgICAgICAgICA9IGRzdCwKLQkJLmxlbiAgICAgICAgICAgID0g Y291bnQsCi0JfTsKLQl1MTYgKmRzdDE2ID0gZHN0OwotCWludCByZXQsIGk7Ci0KLQlXQVJOKGNv dW50ICUgMiwgImJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAyIik7Ci0KLQljcHVf dG9fbGUxNnMoJnJlZ2FkZHIpOwotCWlmIChidXMtPm5lZWRfc3dhYikKLQkJc3dhYjE2cygmcmVn YWRkcik7Ci0KLQlzcGlfbWVzc2FnZV9pbml0KCZtKTsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgm dF9hZGRyLCAmbSk7Ci0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRfbXNnLCAmbSk7Ci0JcmV0ID0g c3BpX3N5bmMoYnVzLT5mdW5jLCAmbSk7Ci0KLQlpZiAoYnVzLT5uZWVkX3N3YWIgJiYgYWRkciA9 PSBXRlhfUkVHX0NPTkZJRykKLQkJZm9yIChpID0gMDsgaSA8IGNvdW50IC8gMjsgaSsrKQotCQkJ c3dhYjE2cygmZHN0MTZbaV0pOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgd2Z4X3Nw aV9jb3B5X3RvX2lvKHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBhZGRyLAotCQkJICAgICAgY29u c3Qgdm9pZCAqc3JjLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHdmeF9zcGlfcHJpdiAqYnVz ID0gcHJpdjsKLQl1MTYgcmVnYWRkciA9IChhZGRyIDw8IDEyKSB8IChjb3VudCAvIDIpOwotCS8q IEZJWE1FOiB1c2UgYSBib3VuY2UgYnVmZmVyICovCi0JdTE2ICpzcmMxNiA9ICh2b2lkICopc3Jj OwotCWludCByZXQsIGk7Ci0Jc3RydWN0IHNwaV9tZXNzYWdlICAgICAgbTsKLQlzdHJ1Y3Qgc3Bp X3RyYW5zZmVyICAgICB0X2FkZHIgPSB7Ci0JCS50eF9idWYgICAgICAgICA9ICZyZWdhZGRyLAot CQkubGVuICAgICAgICAgICAgPSBzaXplb2YocmVnYWRkciksCi0JfTsKLQlzdHJ1Y3Qgc3BpX3Ry YW5zZmVyICAgICB0X21zZyA9IHsKLQkJLnR4X2J1ZiAgICAgICAgID0gc3JjLAotCQkubGVuICAg ICAgICAgICAgPSBjb3VudCwKLQl9OwotCi0JV0FSTihjb3VudCAlIDIsICJidWZmZXIgc2l6ZSBt dXN0IGJlIGEgbXVsdGlwbGUgb2YgMiIpOwotCVdBUk4ocmVnYWRkciAmIFNFVF9SRUFELCAiYmFk IGFkZHIgb3Igc2l6ZSBvdmVyZmxvdyIpOwotCi0JY3B1X3RvX2xlMTZzKCZyZWdhZGRyKTsKLQot CS8qIFJlZ2lzdGVyIGFkZHJlc3MgYW5kIENPTkZJRyBjb250ZW50IGFsd2F5cyB1c2UgMTZiaXQg YmlnIGVuZGlhbgotCSAqICgiQkFEQyIgb3JkZXIpCi0JICovCi0JaWYgKGJ1cy0+bmVlZF9zd2Fi KQotCQlzd2FiMTZzKCZyZWdhZGRyKTsKLQlpZiAoYnVzLT5uZWVkX3N3YWIgJiYgYWRkciA9PSBX RlhfUkVHX0NPTkZJRykKLQkJZm9yIChpID0gMDsgaSA8IGNvdW50IC8gMjsgaSsrKQotCQkJc3dh YjE2cygmc3JjMTZbaV0pOwotCi0Jc3BpX21lc3NhZ2VfaW5pdCgmbSk7Ci0Jc3BpX21lc3NhZ2Vf YWRkX3RhaWwoJnRfYWRkciwgJm0pOwotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0X21zZywgJm0p OwotCXJldCA9IHNwaV9zeW5jKGJ1cy0+ZnVuYywgJm0pOwotCi0JaWYgKGJ1cy0+bmVlZF9zd2Fi ICYmIGFkZHIgPT0gV0ZYX1JFR19DT05GSUcpCi0JCWZvciAoaSA9IDA7IGkgPCBjb3VudCAvIDI7 IGkrKykKLQkJCXN3YWIxNnMoJnNyYzE2W2ldKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMg dm9pZCB3Znhfc3BpX2xvY2sodm9pZCAqcHJpdikKLXsKLX0KLQotc3RhdGljIHZvaWQgd2Z4X3Nw aV91bmxvY2sodm9pZCAqcHJpdikKLXsKLX0KLQotc3RhdGljIGlycXJldHVybl90IHdmeF9zcGlf aXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqcHJpdikKLXsKLQlzdHJ1Y3Qgd2Z4X3NwaV9wcml2 ICpidXMgPSBwcml2OwotCi0Jd2Z4X2JoX3JlcXVlc3RfcngoYnVzLT5jb3JlKTsKLQlyZXR1cm4g SVJRX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBpbnQgd2Z4X3NwaV9pcnFfc3Vic2NyaWJlKHZvaWQg KnByaXYpCi17Ci0Jc3RydWN0IHdmeF9zcGlfcHJpdiAqYnVzID0gcHJpdjsKLQl1MzIgZmxhZ3M7 Ci0KLQlmbGFncyA9IGlycV9nZXRfdHJpZ2dlcl90eXBlKGJ1cy0+ZnVuYy0+aXJxKTsKLQlpZiAo IWZsYWdzKQotCQlmbGFncyA9IElSUUZfVFJJR0dFUl9ISUdIOwotCWZsYWdzIHw9IElSUUZfT05F U0hPVDsKLQlyZXR1cm4gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycSgmYnVzLT5mdW5jLT5kZXYs IGJ1cy0+ZnVuYy0+aXJxLCBOVUxMLAotCQkJCQkgd2Z4X3NwaV9pcnFfaGFuZGxlciwgSVJRRl9P TkVTSE9ULAotCQkJCQkgIndmeCIsIGJ1cyk7Ci19Ci0KLXN0YXRpYyBpbnQgd2Z4X3NwaV9pcnFf dW5zdWJzY3JpYmUodm9pZCAqcHJpdikKLXsKLQlzdHJ1Y3Qgd2Z4X3NwaV9wcml2ICpidXMgPSBw cml2OwotCi0JZGV2bV9mcmVlX2lycSgmYnVzLT5mdW5jLT5kZXYsIGJ1cy0+ZnVuYy0+aXJxLCBi dXMpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc2l6ZV90IHdmeF9zcGlfYWxpZ25fc2l6ZSh2 b2lkICpwcml2LCBzaXplX3Qgc2l6ZSkKLXsKLQkvKiBNb3N0IG9mIFNQSSBjb250cm9sbGVycyBh dm9pZCBETUEgaWYgYnVmZmVyIHNpemUgaXMgbm90IDMyYml0IGFsaWduZWQKLQkgKi8KLQlyZXR1 cm4gQUxJR04oc2l6ZSwgNCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdidXNfb3BzIHdm eF9zcGlfaHdidXNfb3BzID0gewotCS5jb3B5X2Zyb21faW8gPSB3Znhfc3BpX2NvcHlfZnJvbV9p bywKLQkuY29weV90b19pbyA9IHdmeF9zcGlfY29weV90b19pbywKLQkuaXJxX3N1YnNjcmliZSA9 IHdmeF9zcGlfaXJxX3N1YnNjcmliZSwKLQkuaXJxX3Vuc3Vic2NyaWJlID0gd2Z4X3NwaV9pcnFf dW5zdWJzY3JpYmUsCi0JLmxvY2sJCQk9IHdmeF9zcGlfbG9jaywKLQkudW5sb2NrCQkJPSB3Znhf c3BpX3VubG9jaywKLQkuYWxpZ25fc2l6ZQkJPSB3Znhfc3BpX2FsaWduX3NpemUsCi19OwotCi1z dGF0aWMgaW50IHdmeF9zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKmZ1bmMpCi17Ci0Jc3Ry dWN0IHdmeF9zcGlfcHJpdiAqYnVzOwotCWludCByZXQ7Ci0KLQlpZiAoIWZ1bmMtPmJpdHNfcGVy X3dvcmQpCi0JCWZ1bmMtPmJpdHNfcGVyX3dvcmQgPSAxNjsKLQlyZXQgPSBzcGlfc2V0dXAoZnVu Yyk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQkvKiBUcmFjZSBiZWxvdyBpcyBhbHNvIGRp c3BsYXllZCBieSBzcGlfc2V0dXAoKSBpZiBjb21waWxlZCB3aXRoIERFQlVHICovCi0JZGV2X2Ri ZygmZnVuYy0+ZGV2LCAiU1BJIHBhcmFtczogQ1M9JWQsIG1vZGU9JWQgYml0cy93b3JkPSVkIHNw ZWVkPSVkXG4iLAotCQlmdW5jLT5jaGlwX3NlbGVjdCwgZnVuYy0+bW9kZSwgZnVuYy0+Yml0c19w ZXJfd29yZCwKLQkJZnVuYy0+bWF4X3NwZWVkX2h6KTsKLQlpZiAoZnVuYy0+Yml0c19wZXJfd29y ZCAhPSAxNiAmJiBmdW5jLT5iaXRzX3Blcl93b3JkICE9IDgpCi0JCWRldl93YXJuKCZmdW5jLT5k ZXYsICJ1bnVzdWFsIGJpdHMvd29yZCB2YWx1ZTogJWRcbiIsCi0JCQkgZnVuYy0+Yml0c19wZXJf d29yZCk7Ci0JaWYgKGZ1bmMtPm1heF9zcGVlZF9oeiA+IDUwMDAwMDAwKQotCQlkZXZfd2Fybigm ZnVuYy0+ZGV2LCAiJWRIeiBpcyBhIHZlcnkgaGlnaCBzcGVlZFxuIiwKLQkJCSBmdW5jLT5tYXhf c3BlZWRfaHopOwotCi0JYnVzID0gZGV2bV9remFsbG9jKCZmdW5jLT5kZXYsIHNpemVvZigqYnVz KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidXMpCi0JCXJldHVybiAtRU5PTUVNOwotCWJ1cy0+ZnVu YyA9IGZ1bmM7Ci0JaWYgKGZ1bmMtPmJpdHNfcGVyX3dvcmQgPT0gOCB8fCBJU19FTkFCTEVEKENP TkZJR19DUFVfQklHX0VORElBTikpCi0JCWJ1cy0+bmVlZF9zd2FiID0gdHJ1ZTsKLQlzcGlfc2V0 X2RydmRhdGEoZnVuYywgYnVzKTsKLQotCWJ1cy0+Z3Bpb19yZXNldCA9IGRldm1fZ3Bpb2RfZ2V0 X29wdGlvbmFsKCZmdW5jLT5kZXYsICJyZXNldCIsCi0JCQkJCQkgIEdQSU9EX09VVF9MT1cpOwot CWlmIChJU19FUlIoYnVzLT5ncGlvX3Jlc2V0KSkKLQkJcmV0dXJuIFBUUl9FUlIoYnVzLT5ncGlv X3Jlc2V0KTsKLQlpZiAoIWJ1cy0+Z3Bpb19yZXNldCkgewotCQlkZXZfd2FybigmZnVuYy0+ZGV2 LAotCQkJICJncGlvIHJlc2V0IGlzIG5vdCBkZWZpbmVkLCB0cnlpbmcgdG8gbG9hZCBmaXJtd2Fy ZSBhbnl3YXlcbiIpOwotCX0gZWxzZSB7Ci0JCWdwaW9kX3NldF9jb25zdW1lcl9uYW1lKGJ1cy0+ Z3Bpb19yZXNldCwgIndmeCByZXNldCIpOwotCQlpZiAoc3BpX2dldF9kZXZpY2VfaWQoZnVuYykt PmRyaXZlcl9kYXRhICYgV0ZYX1JFU0VUX0lOVkVSVEVEKQotCQkJZ3Bpb2RfdG9nZ2xlX2FjdGl2 ZV9sb3coYnVzLT5ncGlvX3Jlc2V0KTsKLQkJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGJ1cy0+ Z3Bpb19yZXNldCwgMSk7Ci0JCXVzbGVlcF9yYW5nZSgxMDAsIDE1MCk7Ci0JCWdwaW9kX3NldF92 YWx1ZV9jYW5zbGVlcChidXMtPmdwaW9fcmVzZXQsIDApOwotCQl1c2xlZXBfcmFuZ2UoMjAwMCwg MjUwMCk7Ci0JfQotCi0JYnVzLT5jb3JlID0gd2Z4X2luaXRfY29tbW9uKCZmdW5jLT5kZXYsICZ3 Znhfc3BpX3BkYXRhLAotCQkJCSAgICAmd2Z4X3NwaV9od2J1c19vcHMsIGJ1cyk7Ci0JaWYgKCFi dXMtPmNvcmUpCi0JCXJldHVybiAtRUlPOwotCi0JcmV0dXJuIHdmeF9wcm9iZShidXMtPmNvcmUp OwotfQotCi1zdGF0aWMgaW50IHdmeF9zcGlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpmdW5j KQotewotCXN0cnVjdCB3Znhfc3BpX3ByaXYgKmJ1cyA9IHNwaV9nZXRfZHJ2ZGF0YShmdW5jKTsK LQotCXdmeF9yZWxlYXNlKGJ1cy0+Y29yZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIEZvciBkeW5h bWljIGRyaXZlciBiaW5kaW5nLCBrZXJuZWwgZG9lcyBub3QgdXNlIE9GIHRvIG1hdGNoIGRyaXZl ci4gSXQgb25seQotICogdXNlIG1vZGFsaWFzIGFuZCBtb2RhbGlhcyBpcyBhIGNvcHkgb2YgJ2Nv bXBhdGlibGUnIERUIG5vZGUgd2l0aCB2ZW5kb3IKLSAqIHN0cmlwcGVkLgotICovCi1zdGF0aWMg Y29uc3Qgc3RydWN0IHNwaV9kZXZpY2VfaWQgd2Z4X3NwaV9pZFtdID0gewotCXsgIndmeC1zcGki LCBXRlhfUkVTRVRfSU5WRVJURUQgfSwKLQl7ICJ3ZjIwMCIsIDAgfSwKLQl7IH0sCi19OwotTU9E VUxFX0RFVklDRV9UQUJMRShzcGksIHdmeF9zcGlfaWQpOwotCi0jaWZkZWYgQ09ORklHX09GCi1z dGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB3Znhfc3BpX29mX21hdGNoW10gPSB7Ci0J eyAuY29tcGF0aWJsZSA9ICJzaWxhYnMsd2Z4LXNwaSIsIC5kYXRhID0gKHZvaWQgKilXRlhfUkVT RVRfSU5WRVJURUQgfSwKLQl7IC5jb21wYXRpYmxlID0gInNpbGFicyx3ZjIwMCIgfSwKLQl7IH0s Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgd2Z4X3NwaV9vZl9tYXRjaCk7Ci0jZW5kaWYK LQotc3RydWN0IHNwaV9kcml2ZXIgd2Z4X3NwaV9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJ Lm5hbWUgPSAid2Z4LXNwaSIsCi0JCS5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cih3Znhf c3BpX29mX21hdGNoKSwKLQl9LAotCS5pZF90YWJsZSA9IHdmeF9zcGlfaWQsCi0JLnByb2JlID0g d2Z4X3NwaV9wcm9iZSwKLQkucmVtb3ZlID0gd2Z4X3NwaV9yZW1vdmUsCi19OwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9kYXRhX3J4LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2Rh dGFfcnguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZjMzk2MWI3Yjg5Li4wMDAw MDAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC9kYXRhX3J4LmMKKysrIC9kZXYvbnVs bApAQCAtMSw5NCArMCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1v bmx5Ci0vKgotICogRGF0YSByZWNlaXZpbmcgaW1wbGVtZW50YXRpb24uCi0gKgotICogQ29weXJp Z2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuCi0gKiBDb3B5cmln aHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmlj ZS5oPgotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotCi0jaW5jbHVkZSAiZGF0YV9yeC5oIgot I2luY2x1ZGUgIndmeC5oIgotI2luY2x1ZGUgImJoLmgiCi0jaW5jbHVkZSAic3RhLmgiCi0KLXN0 YXRpYyB2b2lkIHdmeF9yeF9oYW5kbGVfYmEoc3RydWN0IHdmeF92aWYgKnd2aWYsIHN0cnVjdCBp ZWVlODAyMTFfbWdtdCAqbWdtdCkKLXsKLQlpbnQgcGFyYW1zLCB0aWQ7Ci0KLQlpZiAod2Z4X2Fw aV9vbGRlcl90aGFuKHd2aWYtPndkZXYsIDMsIDYpKQotCQlyZXR1cm47Ci0KLQlzd2l0Y2ggKG1n bXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLmFjdGlvbl9jb2RlKSB7Ci0JY2FzZSBXTEFOX0FDVElP Tl9BRERCQV9SRVE6Ci0JCXBhcmFtcyA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYWN0aW9uLnUuYWRk YmFfcmVxLmNhcGFiKTsKLQkJdGlkID0gKHBhcmFtcyAmIElFRUU4MDIxMV9BRERCQV9QQVJBTV9U SURfTUFTSykgPj4gMjsKLQkJaWVlZTgwMjExX3N0YXJ0X3J4X2JhX3Nlc3Npb25fb2ZmbCh3dmlm LT52aWYsIG1nbXQtPnNhLCB0aWQpOwotCQlicmVhazsKLQljYXNlIFdMQU5fQUNUSU9OX0RFTEJB OgotCQlwYXJhbXMgPSBsZTE2X3RvX2NwdShtZ210LT51LmFjdGlvbi51LmRlbGJhLnBhcmFtcyk7 Ci0JCXRpZCA9IChwYXJhbXMgJiAgSUVFRTgwMjExX0RFTEJBX1BBUkFNX1RJRF9NQVNLKSA+PiAx MjsKLQkJaWVlZTgwMjExX3N0b3BfcnhfYmFfc2Vzc2lvbl9vZmZsKHd2aWYtPnZpZiwgbWdtdC0+ c2EsIHRpZCk7Ci0JCWJyZWFrOwotCX0KLX0KLQotdm9pZCB3ZnhfcnhfY2Ioc3RydWN0IHdmeF92 aWYgKnd2aWYsCi0JICAgICAgIGNvbnN0IHN0cnVjdCBoaWZfaW5kX3J4ICphcmcsIHN0cnVjdCBz a19idWZmICpza2IpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKmhkciA9IElFRUU4 MDIxMV9TS0JfUlhDQihza2IpOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpmcmFtZSA9IChzdHJ1 Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1n bXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopc2tiLT5kYXRhOwotCi0JbWVtc2V0KGhkciwg MCwgc2l6ZW9mKCpoZHIpKTsKLQotCWlmIChhcmctPnN0YXR1cyA9PSBISUZfU1RBVFVTX1JYX0ZB SUxfTUlDKQotCQloZHItPmZsYWcgfD0gUlhfRkxBR19NTUlDX0VSUk9SIHwgUlhfRkxBR19JVl9T VFJJUFBFRDsKLQllbHNlIGlmIChhcmctPnN0YXR1cykKLQkJZ290byBkcm9wOwotCi0JaWYgKHNr Yi0+bGVuIDwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcHNwb2xsKSkgewotCQlkZXZfd2Fybih3 dmlmLT53ZGV2LT5kZXYsICJtYWxmb3JtZWQgU0RVIHJlY2VpdmVkXG4iKTsKLQkJZ290byBkcm9w OwotCX0KLQotCWhkci0+YmFuZCA9IE5MODAyMTFfQkFORF8yR0haOwotCWhkci0+ZnJlcSA9IGll ZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShhcmctPmNoYW5uZWxfbnVtYmVyLAotCQkJCQkJ ICAgaGRyLT5iYW5kKTsKLQotCWlmIChhcmctPnJ4ZWRfcmF0ZSA+PSAxNCkgewotCQloZHItPmVu Y29kaW5nID0gUlhfRU5DX0hUOwotCQloZHItPnJhdGVfaWR4ID0gYXJnLT5yeGVkX3JhdGUgLSAx NDsKLQl9IGVsc2UgaWYgKGFyZy0+cnhlZF9yYXRlID49IDQpIHsKLQkJaGRyLT5yYXRlX2lkeCA9 IGFyZy0+cnhlZF9yYXRlIC0gMjsKLQl9IGVsc2UgewotCQloZHItPnJhdGVfaWR4ID0gYXJnLT5y eGVkX3JhdGU7Ci0JfQotCi0JaWYgKCFhcmctPnJjcGlfcnNzaSkgewotCQloZHItPmZsYWcgfD0g UlhfRkxBR19OT19TSUdOQUxfVkFMOwotCQlkZXZfaW5mbyh3dmlmLT53ZGV2LT5kZXYsICJyZWNl aXZlZCBmcmFtZSB3aXRob3V0IFJTU0kgZGF0YVxuIik7Ci0JfQotCWhkci0+c2lnbmFsID0gYXJn LT5yY3BpX3Jzc2kgLyAyIC0gMTEwOwotCWhkci0+YW50ZW5uYSA9IDA7Ci0KLQlpZiAoYXJnLT5l bmNyeXApCi0JCWhkci0+ZmxhZyB8PSBSWF9GTEFHX0RFQ1JZUFRFRDsKLQotCS8qIEJsb2NrIGFj ayBuZWdvdGlhdGlvbiBpcyBvZmZsb2FkZWQgYnkgdGhlIGZpcm13YXJlLiBIb3dldmVyLAotCSAq IHJlLW9yZGVyaW5nIG11c3QgYmUgZG9uZSBieSB0aGUgbWFjODAyMTEuCi0JICovCi0JaWYgKGll ZWU4MDIxMV9pc19hY3Rpb24oZnJhbWUtPmZyYW1lX2NvbnRyb2wpICYmCi0JICAgIG1nbXQtPnUu YWN0aW9uLmNhdGVnb3J5ID09IFdMQU5fQ0FURUdPUllfQkFDSyAmJgotCSAgICBza2ItPmxlbiA+ IElFRUU4MDIxMV9NSU5fQUNUSU9OX1NJWkUpIHsKLQkJd2Z4X3J4X2hhbmRsZV9iYSh3dmlmLCBt Z210KTsKLQkJZ290byBkcm9wOwotCX0KLQotCWllZWU4MDIxMV9yeF9pcnFzYWZlKHd2aWYtPndk ZXYtPmh3LCBza2IpOwotCXJldHVybjsKLQotZHJvcDoKLQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci19 CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2RhdGFfcnguaCBiL2RyaXZlcnMvc3Rh Z2luZy93ZngvZGF0YV9yeC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGQwZTNj MDUwN2IuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2RhdGFfcnguaAor KysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wLW9ubHkgKi8KLS8qCi0gKiBEYXRhIHJlY2VpdmluZyBpbXBsZW1lbnRhdGlvbi4K LSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIElu Yy4KLSAqIENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJpY3Nzb24KLSAqLwotI2lmbmRlZiBXRlhf REFUQV9SWF9ICi0jZGVmaW5lIFdGWF9EQVRBX1JYX0gKLQotc3RydWN0IHdmeF92aWY7Ci1zdHJ1 Y3Qgc2tfYnVmZjsKLXN0cnVjdCBoaWZfaW5kX3J4OwotCi12b2lkIHdmeF9yeF9jYihzdHJ1Y3Qg d2Z4X3ZpZiAqd3ZpZiwKLQkgICAgICAgY29uc3Qgc3RydWN0IGhpZl9pbmRfcnggKmFyZywgc3Ry dWN0IHNrX2J1ZmYgKnNrYik7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5n L3dmeC9kYXRhX3R4LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2RhdGFfdHguYwpkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDUyYTE5MTYxZGM1Li4wMDAwMDAwMDAwMDAKLS0tIGEvZHJp dmVycy9zdGFnaW5nL3dmeC9kYXRhX3R4LmMKKysrIC9kZXYvbnVsbApAQCAtMSw1OTYgKzAsMCBA QAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQotLyoKLSAqIERhdGEg dHJhbnNtaXR0aW5nIGltcGxlbWVudGF0aW9uLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAxNy0y MDIwLCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBT VC1Fcmljc3NvbgotICovCi0jaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+Ci0jaW5jbHVkZSA8bGlu dXgvZXRoZXJkZXZpY2UuaD4KLQotI2luY2x1ZGUgImRhdGFfdHguaCIKLSNpbmNsdWRlICJ3Zngu aCIKLSNpbmNsdWRlICJiaC5oIgotI2luY2x1ZGUgInN0YS5oIgotI2luY2x1ZGUgInF1ZXVlLmgi Ci0jaW5jbHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJ0cmFjZXMuaCIKLSNpbmNsdWRlICJoaWZf dHhfbWliLmgiCi0KLXN0YXRpYyBpbnQgd2Z4X2dldF9od19yYXRlKHN0cnVjdCB3ZnhfZGV2ICp3 ZGV2LAotCQkJICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlKQotewotCXN0 cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKmJhbmQ7Ci0KLQlpZiAocmF0ZS0+aWR4IDwg MCkKLQkJcmV0dXJuIC0xOwotCWlmIChyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19NQ1Mp IHsKLQkJaWYgKHJhdGUtPmlkeCA+IDcpIHsKLQkJCVdBUk4oMSwgIndyb25nIHJhdGUtPmlkeCB2 YWx1ZTogJWQiLCByYXRlLT5pZHgpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JCXJldHVybiByYXRl LT5pZHggKyAxNDsKLQl9Ci0JLyogVGhlIGRldmljZSBvbmx5IHN1cHBvcnQgMkdIeiwgZWxzZSBi YW5kIGluZm9ybWF0aW9uIHNob3VsZCBiZQotCSAqIHJldHJpZXZlZCBmcm9tIGllZWU4MDIxMV90 eF9pbmZvCi0JICovCi0JYmFuZCA9IHdkZXYtPmh3LT53aXBoeS0+YmFuZHNbTkw4MDIxMV9CQU5E XzJHSFpdOwotCWlmIChyYXRlLT5pZHggPj0gYmFuZC0+bl9iaXRyYXRlcykgewotCQlXQVJOKDEs ICJ3cm9uZyByYXRlLT5pZHggdmFsdWU6ICVkIiwgcmF0ZS0+aWR4KTsKLQkJcmV0dXJuIC0xOwot CX0KLQlyZXR1cm4gYmFuZC0+Yml0cmF0ZXNbcmF0ZS0+aWR4XS5od192YWx1ZTsKLX0KLQotLyog VFggcG9saWN5IGNhY2hlIGltcGxlbWVudGF0aW9uICovCi0KLXN0YXRpYyB2b2lkIHdmeF90eF9w b2xpY3lfYnVpbGQoc3RydWN0IHdmeF92aWYgKnd2aWYsIHN0cnVjdCB0eF9wb2xpY3kgKnBvbGlj eSwKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGVzKQotewotCXN0cnVjdCB3Znhf ZGV2ICp3ZGV2ID0gd3ZpZi0+d2RldjsKLQlpbnQgaSwgcmF0ZWlkOwotCXU4IGNvdW50OwotCi0J V0FSTihyYXRlc1swXS5pZHggPCAwLCAiaW52YWxpZCByYXRlIHBvbGljeSIpOwotCW1lbXNldChw b2xpY3ksIDAsIHNpemVvZigqcG9saWN5KSk7Ci0JZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9U WF9NQVhfUkFURVM7ICsraSkgewotCQlpZiAocmF0ZXNbaV0uaWR4IDwgMCkKLQkJCWJyZWFrOwot CQlXQVJOX09OKHJhdGVzW2ldLmNvdW50ID4gMTUpOwotCQlyYXRlaWQgPSB3ZnhfZ2V0X2h3X3Jh dGUod2RldiwgJnJhdGVzW2ldKTsKLQkJLyogUGFjayB0d28gdmFsdWVzIGluIGVhY2ggYnl0ZSBv ZiBwb2xpY3ktPnJhdGVzICovCi0JCWNvdW50ID0gcmF0ZXNbaV0uY291bnQ7Ci0JCWlmIChyYXRl aWQgJSAyKQotCQkJY291bnQgPDw9IDQ7Ci0JCXBvbGljeS0+cmF0ZXNbcmF0ZWlkIC8gMl0gfD0g Y291bnQ7Ci0JfQotfQotCi1zdGF0aWMgYm9vbCB0eF9wb2xpY3lfaXNfZXF1YWwoY29uc3Qgc3Ry dWN0IHR4X3BvbGljeSAqYSwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgdHhfcG9saWN5ICpiKQot ewotCXJldHVybiAhbWVtY21wKGEtPnJhdGVzLCBiLT5yYXRlcywgc2l6ZW9mKGEtPnJhdGVzKSk7 Ci19Ci0KLXN0YXRpYyBpbnQgd2Z4X3R4X3BvbGljeV9maW5kKHN0cnVjdCB0eF9wb2xpY3lfY2Fj aGUgKmNhY2hlLAotCQkJICAgICAgc3RydWN0IHR4X3BvbGljeSAqd2FudGVkKQotewotCXN0cnVj dCB0eF9wb2xpY3kgKml0OwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShpdCwgJmNhY2hlLT51c2Vk LCBsaW5rKQotCQlpZiAodHhfcG9saWN5X2lzX2VxdWFsKHdhbnRlZCwgaXQpKQotCQkJcmV0dXJu IGl0IC0gY2FjaGUtPmNhY2hlOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoaXQsICZjYWNoZS0+ZnJl ZSwgbGluaykKLQkJaWYgKHR4X3BvbGljeV9pc19lcXVhbCh3YW50ZWQsIGl0KSkKLQkJCXJldHVy biBpdCAtIGNhY2hlLT5jYWNoZTsKLQlyZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyB2b2lkIHdmeF90 eF9wb2xpY3lfdXNlKHN0cnVjdCB0eF9wb2xpY3lfY2FjaGUgKmNhY2hlLAotCQkJICAgICAgc3Ry dWN0IHR4X3BvbGljeSAqZW50cnkpCi17Ci0JKytlbnRyeS0+dXNhZ2VfY291bnQ7Ci0JbGlzdF9t b3ZlKCZlbnRyeS0+bGluaywgJmNhY2hlLT51c2VkKTsKLX0KLQotc3RhdGljIGludCB3ZnhfdHhf cG9saWN5X3JlbGVhc2Uoc3RydWN0IHR4X3BvbGljeV9jYWNoZSAqY2FjaGUsCi0JCQkJIHN0cnVj dCB0eF9wb2xpY3kgKmVudHJ5KQotewotCWludCByZXQgPSAtLWVudHJ5LT51c2FnZV9jb3VudDsK LQotCWlmICghcmV0KQotCQlsaXN0X21vdmUoJmVudHJ5LT5saW5rLCAmY2FjaGUtPmZyZWUpOwot CXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgd2Z4X3R4X3BvbGljeV9nZXQoc3RydWN0IHdm eF92aWYgKnd2aWYsCi0JCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZXMsIGJv b2wgKnJlbmV3KQotewotCWludCBpZHg7Ci0Jc3RydWN0IHR4X3BvbGljeV9jYWNoZSAqY2FjaGUg PSAmd3ZpZi0+dHhfcG9saWN5X2NhY2hlOwotCXN0cnVjdCB0eF9wb2xpY3kgd2FudGVkOwotCXN0 cnVjdCB0eF9wb2xpY3kgKmVudHJ5OwotCi0Jd2Z4X3R4X3BvbGljeV9idWlsZCh3dmlmLCAmd2Fu dGVkLCByYXRlcyk7Ci0KLQlzcGluX2xvY2tfYmgoJmNhY2hlLT5sb2NrKTsKLQlpZiAobGlzdF9l bXB0eSgmY2FjaGUtPmZyZWUpKSB7Ci0JCVdBUk4oMSwgInVuYWJsZSB0byBnZXQgYSB2YWxpZCBU eCBwb2xpY3kiKTsKLQkJc3Bpbl91bmxvY2tfYmgoJmNhY2hlLT5sb2NrKTsKLQkJcmV0dXJuIEhJ Rl9UWF9SRVRSWV9QT0xJQ1lfSU5WQUxJRDsKLQl9Ci0JaWR4ID0gd2Z4X3R4X3BvbGljeV9maW5k KGNhY2hlLCAmd2FudGVkKTsKLQlpZiAoaWR4ID49IDApIHsKLQkJKnJlbmV3ID0gZmFsc2U7Ci0J fSBlbHNlIHsKLQkJLyogSWYgcG9saWN5IGlzIG5vdCBmb3VuZCBjcmVhdGUgYSBuZXcgb25lIHVz aW5nIHRoZSBvbGRlc3QKLQkJICogZW50cnkgaW4gImZyZWUiIGxpc3QKLQkJICovCi0JCSpyZW5l dyA9IHRydWU7Ci0JCWVudHJ5ID0gbGlzdF9lbnRyeShjYWNoZS0+ZnJlZS5wcmV2LCBzdHJ1Y3Qg dHhfcG9saWN5LCBsaW5rKTsKLQkJbWVtY3B5KGVudHJ5LT5yYXRlcywgd2FudGVkLnJhdGVzLCBz aXplb2YoZW50cnktPnJhdGVzKSk7Ci0JCWVudHJ5LT51cGxvYWRlZCA9IGZhbHNlOwotCQllbnRy eS0+dXNhZ2VfY291bnQgPSAwOwotCQlpZHggPSBlbnRyeSAtIGNhY2hlLT5jYWNoZTsKLQl9Ci0J d2Z4X3R4X3BvbGljeV91c2UoY2FjaGUsICZjYWNoZS0+Y2FjaGVbaWR4XSk7Ci0JaWYgKGxpc3Rf ZW1wdHkoJmNhY2hlLT5mcmVlKSkKLQkJaWVlZTgwMjExX3N0b3BfcXVldWVzKHd2aWYtPndkZXYt Pmh3KTsKLQlzcGluX3VubG9ja19iaCgmY2FjaGUtPmxvY2spOwotCXJldHVybiBpZHg7Ci19Ci0K LXN0YXRpYyB2b2lkIHdmeF90eF9wb2xpY3lfcHV0KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBpbnQg aWR4KQotewotCWludCB1c2FnZSwgbG9ja2VkOwotCXN0cnVjdCB0eF9wb2xpY3lfY2FjaGUgKmNh Y2hlID0gJnd2aWYtPnR4X3BvbGljeV9jYWNoZTsKLQotCWlmIChpZHggPT0gSElGX1RYX1JFVFJZ X1BPTElDWV9JTlZBTElEKQotCQlyZXR1cm47Ci0Jc3Bpbl9sb2NrX2JoKCZjYWNoZS0+bG9jayk7 Ci0JbG9ja2VkID0gbGlzdF9lbXB0eSgmY2FjaGUtPmZyZWUpOwotCXVzYWdlID0gd2Z4X3R4X3Bv bGljeV9yZWxlYXNlKGNhY2hlLCAmY2FjaGUtPmNhY2hlW2lkeF0pOwotCWlmIChsb2NrZWQgJiYg IXVzYWdlKQotCQlpZWVlODAyMTFfd2FrZV9xdWV1ZXMod3ZpZi0+d2Rldi0+aHcpOwotCXNwaW5f dW5sb2NrX2JoKCZjYWNoZS0+bG9jayk7Ci19Ci0KLXN0YXRpYyBpbnQgd2Z4X3R4X3BvbGljeV91 cGxvYWQoc3RydWN0IHdmeF92aWYgKnd2aWYpCi17Ci0Jc3RydWN0IHR4X3BvbGljeSAqcG9saWNp ZXMgPSB3dmlmLT50eF9wb2xpY3lfY2FjaGUuY2FjaGU7Ci0JdTggdG1wX3JhdGVzWzEyXTsKLQlp bnQgaSwgaXNfdXNlZDsKLQotCWRvIHsKLQkJc3Bpbl9sb2NrX2JoKCZ3dmlmLT50eF9wb2xpY3lf Y2FjaGUubG9jayk7Ci0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHd2aWYtPnR4X3BvbGlj eV9jYWNoZS5jYWNoZSk7ICsraSkgewotCQkJaXNfdXNlZCA9IG1lbXpjbXAocG9saWNpZXNbaV0u cmF0ZXMsCi0JCQkJCSAgc2l6ZW9mKHBvbGljaWVzW2ldLnJhdGVzKSk7Ci0JCQlpZiAoIXBvbGlj aWVzW2ldLnVwbG9hZGVkICYmIGlzX3VzZWQpCi0JCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGkgPCBB UlJBWV9TSVpFKHd2aWYtPnR4X3BvbGljeV9jYWNoZS5jYWNoZSkpIHsKLQkJCXBvbGljaWVzW2ld LnVwbG9hZGVkID0gdHJ1ZTsKLQkJCW1lbWNweSh0bXBfcmF0ZXMsIHBvbGljaWVzW2ldLnJhdGVz LCBzaXplb2YodG1wX3JhdGVzKSk7Ci0JCQlzcGluX3VubG9ja19iaCgmd3ZpZi0+dHhfcG9saWN5 X2NhY2hlLmxvY2spOwotCQkJaGlmX3NldF90eF9yYXRlX3JldHJ5X3BvbGljeSh3dmlmLCBpLCB0 bXBfcmF0ZXMpOwotCQl9IGVsc2UgewotCQkJc3Bpbl91bmxvY2tfYmgoJnd2aWYtPnR4X3BvbGlj eV9jYWNoZS5sb2NrKTsKLQkJfQotCX0gd2hpbGUgKGkgPCBBUlJBWV9TSVpFKHd2aWYtPnR4X3Bv bGljeV9jYWNoZS5jYWNoZSkpOwotCXJldHVybiAwOwotfQotCi12b2lkIHdmeF90eF9wb2xpY3lf dXBsb2FkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCB3Znhfdmlm ICp3dmlmID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3ZnhfdmlmLCB0eF9wb2xpY3lf dXBsb2FkX3dvcmspOwotCi0Jd2Z4X3R4X3BvbGljeV91cGxvYWQod3ZpZik7Ci0Jd2Z4X3R4X3Vu bG9jayh3dmlmLT53ZGV2KTsKLX0KLQotdm9pZCB3ZnhfdHhfcG9saWN5X2luaXQoc3RydWN0IHdm eF92aWYgKnd2aWYpCi17Ci0Jc3RydWN0IHR4X3BvbGljeV9jYWNoZSAqY2FjaGUgPSAmd3ZpZi0+ dHhfcG9saWN5X2NhY2hlOwotCWludCBpOwotCi0JbWVtc2V0KGNhY2hlLCAwLCBzaXplb2YoKmNh Y2hlKSk7Ci0KLQlzcGluX2xvY2tfaW5pdCgmY2FjaGUtPmxvY2spOwotCUlOSVRfTElTVF9IRUFE KCZjYWNoZS0+dXNlZCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNhY2hlLT5mcmVlKTsKLQotCWZvciAo aSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNhY2hlLT5jYWNoZSk7ICsraSkKLQkJbGlzdF9hZGQoJmNh Y2hlLT5jYWNoZVtpXS5saW5rLCAmY2FjaGUtPmZyZWUpOwotfQotCi0vKiBUeCBpbXBsZW1lbnRh dGlvbiAqLwotCi1zdGF0aWMgYm9vbCBpZWVlODAyMTFfaXNfYWN0aW9uX2JhY2soc3RydWN0IGll ZWU4MDIxMV9oZHIgKmhkcikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQgPSAoc3Ry dWN0IGllZWU4MDIxMV9tZ210ICopaGRyOwotCi0JaWYgKCFpZWVlODAyMTFfaXNfYWN0aW9uKG1n bXQtPmZyYW1lX2NvbnRyb2wpKQotCQlyZXR1cm4gZmFsc2U7Ci0JaWYgKG1nbXQtPnUuYWN0aW9u LmNhdGVnb3J5ICE9IFdMQU5fQ0FURUdPUllfQkFDSykKLQkJcmV0dXJuIGZhbHNlOwotCXJldHVy biB0cnVlOwotfQotCi1zdGF0aWMgdTggd2Z4X3R4X2dldF9saW5rX2lkKHN0cnVjdCB3Znhfdmlm ICp3dmlmLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAotCQkJICAgICBzdHJ1Y3QgaWVlZTgw MjExX2hkciAqaGRyKQotewotCXN0cnVjdCB3Znhfc3RhX3ByaXYgKnN0YV9wcml2ID0KLQkJc3Rh ID8gKHN0cnVjdCB3Znhfc3RhX3ByaXYgKikmc3RhLT5kcnZfcHJpdiA6IE5VTEw7Ci0JY29uc3Qg dTggKmRhID0gaWVlZTgwMjExX2dldF9EQShoZHIpOwotCi0JaWYgKHN0YV9wcml2ICYmIHN0YV9w cml2LT5saW5rX2lkKQotCQlyZXR1cm4gc3RhX3ByaXYtPmxpbmtfaWQ7Ci0JaWYgKHd2aWYtPnZp Zi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCkKLQkJcmV0dXJuIDA7Ci0JaWYgKGlzX211bHRp Y2FzdF9ldGhlcl9hZGRyKGRhKSkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIEhJRl9MSU5LX0lEX05P VF9BU1NPQ0lBVEVEOwotfQotCi1zdGF0aWMgdm9pZCB3ZnhfdHhfZml4dXBfcmF0ZXMoc3RydWN0 IGllZWU4MDIxMV90eF9yYXRlICpyYXRlcykKLXsKLQlpbnQgaTsKLQlib29sIGZpbmlzaGVkOwot Ci0JLyogRmlybXdhcmUgaXMgbm90IGFibGUgdG8gbWl4IHJhdGVzIHdpdGggZGlmZmVyZW50IGZs YWdzICovCi0JZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9UWF9NQVhfUkFURVM7IGkrKykgewot CQlpZiAocmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfU0hPUlRfR0kpCi0JCQlyYXRl c1tpXS5mbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfU0hPUlRfR0k7Ci0JCWlmICghKHJhdGVzWzBd LmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJKSkKLQkJCXJhdGVzW2ldLmZsYWdzICY9 IH5JRUVFODAyMTFfVFhfUkNfU0hPUlRfR0k7Ci0JCWlmICghKHJhdGVzWzBdLmZsYWdzICYgSUVF RTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTKSkKLQkJCXJhdGVzW2ldLmZsYWdzICY9IH5JRUVFODAy MTFfVFhfUkNfVVNFX1JUU19DVFM7Ci0JfQotCi0JLyogU29ydCByYXRlcyBhbmQgcmVtb3ZlIGR1 cGxpY2F0ZXMgKi8KLQlkbyB7Ci0JCWZpbmlzaGVkID0gdHJ1ZTsKLQkJZm9yIChpID0gMDsgaSA8 IElFRUU4MDIxMV9UWF9NQVhfUkFURVMgLSAxOyBpKyspIHsKLQkJCWlmIChyYXRlc1tpICsgMV0u aWR4ID09IHJhdGVzW2ldLmlkeCAmJgotCQkJICAgIHJhdGVzW2ldLmlkeCAhPSAtMSkgewotCQkJ CXJhdGVzW2ldLmNvdW50ICs9IHJhdGVzW2kgKyAxXS5jb3VudDsKLQkJCQlpZiAocmF0ZXNbaV0u Y291bnQgPiAxNSkKLQkJCQkJcmF0ZXNbaV0uY291bnQgPSAxNTsKLQkJCQlyYXRlc1tpICsgMV0u aWR4ID0gLTE7Ci0JCQkJcmF0ZXNbaSArIDFdLmNvdW50ID0gMDsKLQotCQkJCWZpbmlzaGVkID0g ZmFsc2U7Ci0JCQl9Ci0JCQlpZiAocmF0ZXNbaSArIDFdLmlkeCA+IHJhdGVzW2ldLmlkeCkgewot CQkJCXN3YXAocmF0ZXNbaSArIDFdLCByYXRlc1tpXSk7Ci0JCQkJZmluaXNoZWQgPSBmYWxzZTsK LQkJCX0KLQkJfQotCX0gd2hpbGUgKCFmaW5pc2hlZCk7Ci0JLyogRW5zdXJlIHRoYXQgTUNTMCBv ciAxTWJwcyBpcyBwcmVzZW50IGF0IHRoZSBlbmQgb2YgdGhlIHJldHJ5IGxpc3QgKi8KLQlmb3Ig KGkgPSAwOyBpIDwgSUVFRTgwMjExX1RYX01BWF9SQVRFUzsgaSsrKSB7Ci0JCWlmIChyYXRlc1tp XS5pZHggPT0gMCkKLQkJCWJyZWFrOwotCQlpZiAocmF0ZXNbaV0uaWR4ID09IC0xKSB7Ci0JCQly YXRlc1tpXS5pZHggPSAwOwotCQkJcmF0ZXNbaV0uY291bnQgPSA4OyAvKiA9PSBody0+bWF4X3Jh dGVfdHJpZXMgKi8KLQkJCXJhdGVzW2ldLmZsYWdzID0gcmF0ZXNbaSAtIDFdLmZsYWdzICYKLQkJ CQkJIElFRUU4MDIxMV9UWF9SQ19NQ1M7Ci0JCQlicmVhazsKLQkJfQotCX0KLQkvKiBBbGwgcmV0 cmllcyB1c2UgbG9uZyBHSSAqLwotCWZvciAoaSA9IDE7IGkgPCBJRUVFODAyMTFfVFhfTUFYX1JB VEVTOyBpKyspCi0JCXJhdGVzW2ldLmZsYWdzICY9IH5JRUVFODAyMTFfVFhfUkNfU0hPUlRfR0k7 Ci19Ci0KLXN0YXRpYyB1OCB3ZnhfdHhfZ2V0X3JldHJ5X3BvbGljeV9pZChzdHJ1Y3Qgd2Z4X3Zp ZiAqd3ZpZiwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbykKLXsK LQlib29sIHR4X3BvbGljeV9yZW5ldyA9IGZhbHNlOwotCXU4IHJldDsKLQotCXJldCA9IHdmeF90 eF9wb2xpY3lfZ2V0KHd2aWYsIHR4X2luZm8tPmRyaXZlcl9yYXRlcywgJnR4X3BvbGljeV9yZW5l dyk7Ci0JaWYgKHJldCA9PSBISUZfVFhfUkVUUllfUE9MSUNZX0lOVkFMSUQpCi0JCWRldl93YXJu KHd2aWYtPndkZXYtPmRldiwgInVuYWJsZSB0byBnZXQgYSB2YWxpZCBUeCBwb2xpY3kiKTsKLQot CWlmICh0eF9wb2xpY3lfcmVuZXcpIHsKLQkJd2Z4X3R4X2xvY2sod3ZpZi0+d2Rldik7Ci0JCWlm ICghc2NoZWR1bGVfd29yaygmd3ZpZi0+dHhfcG9saWN5X3VwbG9hZF93b3JrKSkKLQkJCXdmeF90 eF91bmxvY2sod3ZpZi0+d2Rldik7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQg d2Z4X3R4X2dldF9mcmFtZV9mb3JtYXQoc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZv KQotewotCWlmICghKHR4X2luZm8tPmRyaXZlcl9yYXRlc1swXS5mbGFncyAmIElFRUU4MDIxMV9U WF9SQ19NQ1MpKQotCQlyZXR1cm4gSElGX0ZSQU1FX0ZPUk1BVF9OT05fSFQ7Ci0JZWxzZSBpZiAo ISh0eF9pbmZvLT5kcml2ZXJfcmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfR1JFRU5f RklFTEQpKQotCQlyZXR1cm4gSElGX0ZSQU1FX0ZPUk1BVF9NSVhFRF9GT1JNQVRfSFQ7Ci0JZWxz ZQotCQlyZXR1cm4gSElGX0ZSQU1FX0ZPUk1BVF9HRl9IVF8xMU47Ci19Ci0KLXN0YXRpYyBpbnQg d2Z4X3R4X2dldF9pY3ZfbGVuKHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmh3X2tleSkKLXsK LQlpbnQgbWljX3NwYWNlOwotCi0JaWYgKCFod19rZXkpCi0JCXJldHVybiAwOwotCWlmIChod19r ZXktPmNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9BRVNfQ01BQykKLQkJcmV0dXJuIDA7Ci0J bWljX3NwYWNlID0gKGh3X2tleS0+Y2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVApID8g OCA6IDA7Ci0JcmV0dXJuIGh3X2tleS0+aWN2X2xlbiArIG1pY19zcGFjZTsKLX0KLQotc3RhdGlj IGludCB3ZnhfdHhfaW5uZXIoc3RydWN0IHdmeF92aWYgKnd2aWYsIHN0cnVjdCBpZWVlODAyMTFf c3RhICpzdGEsCi0JCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBoaWZfbXNnICpo aWZfbXNnOwotCXN0cnVjdCBoaWZfcmVxX3R4ICpyZXE7Ci0Jc3RydWN0IHdmeF90eF9wcml2ICp0 eF9wcml2OwotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9T S0JfQ0Ioc2tiKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICpod19rZXkgPSB0eF9pbmZv LT5jb250cm9sLmh3X2tleTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBp ZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotCWludCBxdWV1ZV9pZCA9IHNrYl9nZXRfcXVldWVf bWFwcGluZyhza2IpOwotCXNpemVfdCBvZmZzZXQgPSAoc2l6ZV90KXNrYi0+ZGF0YSAmIDM7Ci0J aW50IHdtc2dfbGVuID0gc2l6ZW9mKHN0cnVjdCBoaWZfbXNnKSArCi0JCQlzaXplb2Yoc3RydWN0 IGhpZl9yZXFfdHgpICsgb2Zmc2V0OwotCi0JV0FSTihxdWV1ZV9pZCA+PSBJRUVFODAyMTFfTlVN X0FDUywgInVuc3VwcG9ydGVkIHF1ZXVlX2lkIik7Ci0Jd2Z4X3R4X2ZpeHVwX3JhdGVzKHR4X2lu Zm8tPmRyaXZlcl9yYXRlcyk7Ci0KLQkvKiBGcm9tIG5vdyB0eF9pbmZvLT5jb250cm9sIGlzIHVu dXNhYmxlICovCi0JbWVtc2V0KHR4X2luZm8tPnJhdGVfZHJpdmVyX2RhdGEsIDAsIHNpemVvZihz dHJ1Y3Qgd2Z4X3R4X3ByaXYpKTsKLQkvKiBGaWxsIHR4X3ByaXYgKi8KLQl0eF9wcml2ID0gKHN0 cnVjdCB3ZnhfdHhfcHJpdiAqKXR4X2luZm8tPnJhdGVfZHJpdmVyX2RhdGE7Ci0JdHhfcHJpdi0+ aWN2X3NpemUgPSB3ZnhfdHhfZ2V0X2ljdl9sZW4oaHdfa2V5KTsKLQotCS8qIEZpbGwgaGlmX21z ZyAqLwotCVdBUk4oc2tiX2hlYWRyb29tKHNrYikgPCB3bXNnX2xlbiwgIm5vdCBlbm91Z2ggc3Bh Y2UgaW4gc2tiIik7Ci0JV0FSTihvZmZzZXQgJiAxLCAiYXR0ZW1wdCB0byB0cmFuc21pdCBhbiB1 bmFsaWduZWQgZnJhbWUiKTsKLQlza2JfcHV0KHNrYiwgdHhfcHJpdi0+aWN2X3NpemUpOwotCXNr Yl9wdXNoKHNrYiwgd21zZ19sZW4pOwotCW1lbXNldChza2ItPmRhdGEsIDAsIHdtc2dfbGVuKTsK LQloaWZfbXNnID0gKHN0cnVjdCBoaWZfbXNnICopc2tiLT5kYXRhOwotCWhpZl9tc2ctPmxlbiA9 IGNwdV90b19sZTE2KHNrYi0+bGVuKTsKLQloaWZfbXNnLT5pZCA9IEhJRl9SRVFfSURfVFg7Ci0J aGlmX21zZy0+aW50ZXJmYWNlID0gd3ZpZi0+aWQ7Ci0JaWYgKHNrYi0+bGVuID4gd3ZpZi0+d2Rl di0+aHdfY2Fwcy5zaXplX2lucF9jaF9idWYpIHsKLQkJZGV2X3dhcm4od3ZpZi0+d2Rldi0+ZGV2 LAotCQkJICJyZXF1ZXN0ZWQgZnJhbWUgc2l6ZSAoJWQpIGlzIGxhcmdlciB0aGFuIG1heGltdW0g c3VwcG9ydGVkICglZClcbiIsCi0JCQkgc2tiLT5sZW4sIHd2aWYtPndkZXYtPmh3X2NhcHMuc2l6 ZV9pbnBfY2hfYnVmKTsKLQkJc2tiX3B1bGwoc2tiLCB3bXNnX2xlbik7Ci0JCXJldHVybiAtRUlP OwotCX0KLQotCS8qIEZpbGwgdHggcmVxdWVzdCAqLwotCXJlcSA9IChzdHJ1Y3QgaGlmX3JlcV90 eCAqKWhpZl9tc2ctPmJvZHk7Ci0JLyogcGFja2V0X2lkIGp1c3QgbmVlZCB0byBiZSB1bmlxdWUg b24gZGV2aWNlLiAzMmJpdHMgYXJlIG1vcmUgdGhhbgotCSAqIG5lY2Vzc2FyeSBmb3IgdGhhdCB0 YXNrLCBzbyB3ZSB0YWUgYWR2YW50YWdlIG9mIGl0IHRvIGFkZCBzb21lIGV4dHJhCi0JICogZGF0 YSBmb3IgZGVidWcuCi0JICovCi0JcmVxLT5wYWNrZXRfaWQgPSBhdG9taWNfYWRkX3JldHVybigx LCAmd3ZpZi0+d2Rldi0+cGFja2V0X2lkKSAmIDB4RkZGRjsKLQlyZXEtPnBhY2tldF9pZCB8PSBJ RUVFODAyMTFfU0VRX1RPX1NOKGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpKSA8PCAxNjsKLQly ZXEtPnBhY2tldF9pZCB8PSBxdWV1ZV9pZCA8PCAyODsKLQotCXJlcS0+ZmNfb2Zmc2V0ID0gb2Zm c2V0OwotCS8qIFF1ZXVlIGluZGV4IGFyZSBpbnZlcnRlZCBiZXR3ZWVuIGZpcm13YXJlIGFuZCBM aW51eCAqLwotCXJlcS0+cXVldWVfaWQgPSAzIC0gcXVldWVfaWQ7Ci0JcmVxLT5wZWVyX3N0YV9p ZCA9IHdmeF90eF9nZXRfbGlua19pZCh3dmlmLCBzdGEsIGhkcik7Ci0JcmVxLT5yZXRyeV9wb2xp Y3lfaW5kZXggPSB3ZnhfdHhfZ2V0X3JldHJ5X3BvbGljeV9pZCh3dmlmLCB0eF9pbmZvKTsKLQly ZXEtPmZyYW1lX2Zvcm1hdCA9IHdmeF90eF9nZXRfZnJhbWVfZm9ybWF0KHR4X2luZm8pOwotCWlm ICh0eF9pbmZvLT5kcml2ZXJfcmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfU0hPUlRf R0kpCi0JCXJlcS0+c2hvcnRfZ2kgPSAxOwotCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIx MV9UWF9DVExfU0VORF9BRlRFUl9EVElNKQotCQlyZXEtPmFmdGVyX2R0aW0gPSAxOwotCi0JLyog QXV4aWxpYXJ5IG9wZXJhdGlvbnMgKi8KLQl3ZnhfdHhfcXVldWVzX3B1dCh3dmlmLCBza2IpOwot CWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfU0VORF9BRlRFUl9EVElNKQot CQlzY2hlZHVsZV93b3JrKCZ3dmlmLT51cGRhdGVfdGltX3dvcmspOwotCXdmeF9iaF9yZXF1ZXN0 X3R4KHd2aWYtPndkZXYpOwotCXJldHVybiAwOwotfQotCi12b2lkIHdmeF90eChzdHJ1Y3QgaWVl ZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sLAotCSAg ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gaHctPnBy aXY7Ci0Jc3RydWN0IHdmeF92aWYgKnd2aWY7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSA9 IGNvbnRyb2wgPyBjb250cm9sLT5zdGEgOiBOVUxMOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5m byAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hk ciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotCXNpemVfdCBkcml2 ZXJfZGF0YV9yb29tID0gc2l6ZW9mX2ZpZWxkKHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbywKLQkJ CQkJICAgICAgIHJhdGVfZHJpdmVyX2RhdGEpOwotCi0JY29tcGlsZXRpbWVfYXNzZXJ0KHNpemVv ZihzdHJ1Y3Qgd2Z4X3R4X3ByaXYpIDw9IGRyaXZlcl9kYXRhX3Jvb20sCi0JCQkgICAic3RydWN0 IHR4X3ByaXYgaXMgdG9vIGxhcmdlIik7Ci0JV0FSTihza2ItPm5leHQgfHwgc2tiLT5wcmV2LCAi c2tiIGlzIGFscmVhZHkgbWVtYmVyIG9mIGEgbGlzdCIpOwotCS8qIGNvbnRyb2wudmlmIGNhbiBi ZSBOVUxMIGZvciBpbmplY3RlZCBmcmFtZXMgKi8KLQlpZiAodHhfaW5mby0+Y29udHJvbC52aWYp Ci0JCXd2aWYgPSAoc3RydWN0IHdmeF92aWYgKil0eF9pbmZvLT5jb250cm9sLnZpZi0+ZHJ2X3By aXY7Ci0JZWxzZQotCQl3dmlmID0gd3ZpZl9pdGVyYXRlKHdkZXYsIE5VTEwpOwotCWlmIChXQVJO X09OKCF3dmlmKSkKLQkJZ290byBkcm9wOwotCS8qIEJlY2F1c2Ugb2YgVFhfQU1QRFVfU0VUVVBf SU5fSFcsIG1hYzgwMjExIGRvZXMgbm90IHRyeSB0byBzZW5kIGFueQotCSAqIEJsb2NrQWNrIHNl c3Npb24gbWFuYWdlbWVudCBmcmFtZS4gVGhlIGNoZWNrIGJlbG93IGV4aXN0IGp1c3QgaW4gY2Fz ZS4KLQkgKi8KLQlpZiAoaWVlZTgwMjExX2lzX2FjdGlvbl9iYWNrKGhkcikpIHsKLQkJZGV2X2lu Zm8od2Rldi0+ZGV2LCAiZHJvcCBCQSBhY3Rpb25cbiIpOwotCQlnb3RvIGRyb3A7Ci0JfQotCWlm ICh3ZnhfdHhfaW5uZXIod3ZpZiwgc3RhLCBza2IpKQotCQlnb3RvIGRyb3A7Ci0KLQlyZXR1cm47 Ci0KLWRyb3A6Ci0JaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKHdkZXYtPmh3LCBza2IpOwot fQotCi1zdGF0aWMgdm9pZCB3Znhfc2tiX2R0b3Ioc3RydWN0IHdmeF92aWYgKnd2aWYsIHN0cnVj dCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IGhpZl9tc2cgKmhpZiA9IChzdHJ1Y3QgaGlmX21z ZyAqKXNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaGlmX3JlcV90eCAqcmVxID0gKHN0cnVjdCBoaWZfcmVx X3R4ICopaGlmLT5ib2R5OwotCXVuc2lnbmVkIGludCBvZmZzZXQgPSBzaXplb2Yoc3RydWN0IGhp Zl9tc2cpICsKLQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgaGlmX3JlcV90eCkgKwotCQkJICAgICAg cmVxLT5mY19vZmZzZXQ7Ci0KLQlpZiAoIXd2aWYpIHsKLQkJcHJfd2FybigiJXM6IHZpZiBhc3Nv Y2lhdGVkIHdpdGggdGhlIHNrYiBkb2VzIG5vdCBleGlzdCBhbnltb3JlXG4iLCBfX2Z1bmNfXyk7 Ci0JCXJldHVybjsKLQl9Ci0Jd2Z4X3R4X3BvbGljeV9wdXQod3ZpZiwgcmVxLT5yZXRyeV9wb2xp Y3lfaW5kZXgpOwotCXNrYl9wdWxsKHNrYiwgb2Zmc2V0KTsKLQlpZWVlODAyMTFfdHhfc3RhdHVz X2lycXNhZmUod3ZpZi0+d2Rldi0+aHcsIHNrYik7Ci19Ci0KLXN0YXRpYyB2b2lkIHdmeF90eF9m aWxsX3JhdGVzKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LAotCQkJICAgICAgc3RydWN0IGllZWU4MDIx MV90eF9pbmZvICp0eF9pbmZvLAotCQkJICAgICAgY29uc3Qgc3RydWN0IGhpZl9jbmZfdHggKmFy ZykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGU7Ci0JaW50IHR4X2NvdW50Owot CWludCBpOwotCi0JdHhfY291bnQgPSBhcmctPmFja19mYWlsdXJlczsKLQlpZiAoIWFyZy0+c3Rh dHVzIHx8IGFyZy0+YWNrX2ZhaWx1cmVzKQotCQl0eF9jb3VudCArPSAxOyAvKiBBbHNvIHJlcG9y dCBzdWNjZXNzICovCi0JZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9UWF9NQVhfUkFURVM7IGkr KykgewotCQlyYXRlID0gJnR4X2luZm8tPnN0YXR1cy5yYXRlc1tpXTsKLQkJaWYgKHJhdGUtPmlk eCA8IDApCi0JCQlicmVhazsKLQkJaWYgKHR4X2NvdW50IDwgcmF0ZS0+Y291bnQgJiYKLQkJICAg IGFyZy0+c3RhdHVzID09IEhJRl9TVEFUVVNfVFhfRkFJTF9SRVRSSUVTICYmCi0JCSAgICBhcmct PmFja19mYWlsdXJlcykKLQkJCWRldl9kYmcod2Rldi0+ZGV2LCAiYWxsIHJldHJpZXMgd2VyZSBu b3QgY29uc3VtZWQ6ICVkICE9ICVkXG4iLAotCQkJCXJhdGUtPmNvdW50LCB0eF9jb3VudCk7Ci0J CWlmICh0eF9jb3VudCA8PSByYXRlLT5jb3VudCAmJiB0eF9jb3VudCAmJgotCQkgICAgYXJnLT50 eGVkX3JhdGUgIT0gd2Z4X2dldF9od19yYXRlKHdkZXYsIHJhdGUpKQotCQkJZGV2X2RiZyh3ZGV2 LT5kZXYsICJpbmNvbnNpc3RlbnQgdHhfaW5mbyByYXRlczogJWQgIT0gJWRcbiIsCi0JCQkJYXJn LT50eGVkX3JhdGUsIHdmeF9nZXRfaHdfcmF0ZSh3ZGV2LCByYXRlKSk7Ci0JCWlmICh0eF9jb3Vu dCA+IHJhdGUtPmNvdW50KSB7Ci0JCQl0eF9jb3VudCAtPSByYXRlLT5jb3VudDsKLQkJfSBlbHNl IGlmICghdHhfY291bnQpIHsKLQkJCXJhdGUtPmNvdW50ID0gMDsKLQkJCXJhdGUtPmlkeCA9IC0x OwotCQl9IGVsc2UgewotCQkJcmF0ZS0+Y291bnQgPSB0eF9jb3VudDsKLQkJCXR4X2NvdW50ID0g MDsKLQkJfQotCX0KLQlpZiAodHhfY291bnQpCi0JCWRldl9kYmcod2Rldi0+ZGV2LCAiJWQgbW9y ZSByZXRyaWVzIHRoYW4gZXhwZWN0ZWRcbiIsIHR4X2NvdW50KTsKLX0KLQotdm9pZCB3ZnhfdHhf Y29uZmlybV9jYihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgY29uc3Qgc3RydWN0IGhpZl9jbmZfdHgg KmFyZykKLXsKLQljb25zdCBzdHJ1Y3Qgd2Z4X3R4X3ByaXYgKnR4X3ByaXY7Ci0Jc3RydWN0IGll ZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvOwotCXN0cnVjdCB3ZnhfdmlmICp3dmlmOwotCXN0cnVj dCBza19idWZmICpza2I7Ci0KLQlza2IgPSB3ZnhfcGVuZGluZ19nZXQod2RldiwgYXJnLT5wYWNr ZXRfaWQpOwotCWlmICghc2tiKSB7Ci0JCWRldl93YXJuKHdkZXYtPmRldiwgInJlY2VpdmVkIHVu a25vd24gcGFja2V0X2lkICglIy44eCkgZnJvbSBjaGlwXG4iLAotCQkJIGFyZy0+cGFja2V0X2lk KTsKLQkJcmV0dXJuOwotCX0KLQl0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCXR4 X3ByaXYgPSB3Znhfc2tiX3R4X3ByaXYoc2tiKTsKLQl3dmlmID0gd2Rldl90b193dmlmKHdkZXYs ICgoc3RydWN0IGhpZl9tc2cgKilza2ItPmRhdGEpLT5pbnRlcmZhY2UpOwotCVdBUk5fT04oIXd2 aWYpOwotCWlmICghd3ZpZikKLQkJcmV0dXJuOwotCi0JLyogTm90ZSB0aGF0IHdmeF9wZW5kaW5n X2dldF9wa3RfdXNfZGVsYXkoKSBnZXQgZGF0YSBmcm9tIHR4X2luZm8gKi8KLQlfdHJhY2VfdHhf c3RhdHMoYXJnLCBza2IsIHdmeF9wZW5kaW5nX2dldF9wa3RfdXNfZGVsYXkod2Rldiwgc2tiKSk7 Ci0Jd2Z4X3R4X2ZpbGxfcmF0ZXMod2RldiwgdHhfaW5mbywgYXJnKTsKLQlza2JfdHJpbShza2Is IHNrYi0+bGVuIC0gdHhfcHJpdi0+aWN2X3NpemUpOwotCi0JLyogRnJvbSBub3csIHlvdSBjYW4g dG91Y2ggdG8gdHhfaW5mby0+c3RhdHVzLCBidXQgZG8gbm90IHRvdWNoIHRvCi0JICogdHhfcHJp diBhbnltb3JlCi0JICovCi0JLyogRklYTUU6IHVzZSBpZWVlODAyMTFfdHhfaW5mb19jbGVhcl9z dGF0dXMoKSAqLwotCW1lbXNldCh0eF9pbmZvLT5yYXRlX2RyaXZlcl9kYXRhLCAwLCBzaXplb2Yo dHhfaW5mby0+cmF0ZV9kcml2ZXJfZGF0YSkpOwotCW1lbXNldCh0eF9pbmZvLT5wYWQsIDAsIHNp emVvZih0eF9pbmZvLT5wYWQpKTsKLQotCWlmICghYXJnLT5zdGF0dXMpIHsKLQkJdHhfaW5mby0+ c3RhdHVzLnR4X3RpbWUgPQotCQkJbGUzMl90b19jcHUoYXJnLT5tZWRpYV9kZWxheSkgLQotCQkJ bGUzMl90b19jcHUoYXJnLT50eF9xdWV1ZV9kZWxheSk7Ci0JCWlmICh0eF9pbmZvLT5mbGFncyAm IElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKQotCQkJdHhfaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjEx X1RYX1NUQVRfTk9BQ0tfVFJBTlNNSVRURUQ7Ci0JCWVsc2UKLQkJCXR4X2luZm8tPmZsYWdzIHw9 IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKLQl9IGVsc2UgaWYgKGFyZy0+c3RhdHVzID09IEhJRl9T VEFUVVNfVFhfRkFJTF9SRVFVRVVFKSB7Ci0JCVdBUk4oIWFyZy0+cmVxdWV1ZSwgImluY29oZXJl bnQgc3RhdHVzIGFuZCByZXN1bHRfZmxhZ3MiKTsKLQkJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVF RTgwMjExX1RYX0NUTF9TRU5EX0FGVEVSX0RUSU0pIHsKLQkJCXd2aWYtPmFmdGVyX2R0aW1fdHhf YWxsb3dlZCA9IGZhbHNlOyAvKiBEVElNIHBlcmlvZCBlbGFwc2VkICovCi0JCQlzY2hlZHVsZV93 b3JrKCZ3dmlmLT51cGRhdGVfdGltX3dvcmspOwotCQl9Ci0JCXR4X2luZm8tPmZsYWdzIHw9IElF RUU4MDIxMV9UWF9TVEFUX1RYX0ZJTFRFUkVEOwotCX0KLQl3Znhfc2tiX2R0b3Iod3ZpZiwgc2ti KTsKLX0KLQotc3RhdGljIHZvaWQgd2Z4X2ZsdXNoX3ZpZihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwg dTMyIHF1ZXVlcywKLQkJCSAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZHJvcHBlZCkKLXsKLQlzdHJ1 Y3Qgd2Z4X3F1ZXVlICpxdWV1ZTsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBJRUVFODAy MTFfTlVNX0FDUzsgaSsrKSB7Ci0JCWlmICghKEJJVChpKSAmIHF1ZXVlcykpCi0JCQljb250aW51 ZTsKLQkJcXVldWUgPSAmd3ZpZi0+dHhfcXVldWVbaV07Ci0JCWlmIChkcm9wcGVkKQotCQkJd2Z4 X3R4X3F1ZXVlX2Ryb3Aod3ZpZiwgcXVldWUsIGRyb3BwZWQpOwotCX0KLQlpZiAod3ZpZi0+d2Rl di0+Y2hpcF9mcm96ZW4pCi0JCXJldHVybjsKLQlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX05V TV9BQ1M7IGkrKykgewotCQlpZiAoIShCSVQoaSkgJiBxdWV1ZXMpKQotCQkJY29udGludWU7Ci0J CXF1ZXVlID0gJnd2aWYtPnR4X3F1ZXVlW2ldOwotCQlpZiAod2FpdF9ldmVudF90aW1lb3V0KHd2 aWYtPndkZXYtPnR4X2RlcXVldWUsCi0JCQkJICAgICAgIHdmeF90eF9xdWV1ZV9lbXB0eSh3dmlm LCBxdWV1ZSksCi0JCQkJICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpIDw9IDApCi0JCQlk ZXZfd2Fybih3dmlmLT53ZGV2LT5kZXYsCi0JCQkJICJmcmFtZXMgcXVldWVkIHdoaWxlIGZsdXNo aW5nIHR4IHF1ZXVlcz8iKTsKLQl9Ci19Ci0KLXZvaWQgd2Z4X2ZsdXNoKHN0cnVjdCBpZWVlODAy MTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAotCSAgICAgICB1MzIgcXVldWVz LCBib29sIGRyb3ApCi17Ci0Jc3RydWN0IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsKLQlzdHJ1 Y3Qgc2tfYnVmZl9oZWFkIGRyb3BwZWQ7Ci0Jc3RydWN0IHdmeF92aWYgKnd2aWY7Ci0Jc3RydWN0 IGhpZl9tc2cgKmhpZjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCi0Jc2tiX3F1ZXVlX2hlYWRf aW5pdCgmZHJvcHBlZCk7Ci0JaWYgKHZpZikgewotCQl3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICop dmlmLT5kcnZfcHJpdjsKLQkJd2Z4X2ZsdXNoX3ZpZih3dmlmLCBxdWV1ZXMsIGRyb3AgPyAmZHJv cHBlZCA6IE5VTEwpOwotCX0gZWxzZSB7Ci0JCXd2aWYgPSBOVUxMOwotCQl3aGlsZSAoKHd2aWYg PSB3dmlmX2l0ZXJhdGUod2Rldiwgd3ZpZikpICE9IE5VTEwpCi0JCQl3ZnhfZmx1c2hfdmlmKHd2 aWYsIHF1ZXVlcywgZHJvcCA/ICZkcm9wcGVkIDogTlVMTCk7Ci0JfQotCXdmeF90eF9mbHVzaCh3 ZGV2KTsKLQlpZiAod2Rldi0+Y2hpcF9mcm96ZW4pCi0JCXdmeF9wZW5kaW5nX2Ryb3Aod2Rldiwg JmRyb3BwZWQpOwotCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmRyb3BwZWQpKSAhPSBOVUxM KSB7Ci0JCWhpZiA9IChzdHJ1Y3QgaGlmX21zZyAqKXNrYi0+ZGF0YTsKLQkJd3ZpZiA9IHdkZXZf dG9fd3ZpZih3ZGV2LCBoaWYtPmludGVyZmFjZSk7Ci0JCWllZWU4MDIxMV90eF9pbmZvX2NsZWFy X3N0YXR1cyhJRUVFODAyMTFfU0tCX0NCKHNrYikpOwotCQl3Znhfc2tiX2R0b3Iod3ZpZiwgc2ti KTsKLQl9Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2RhdGFfdHguaCBiL2Ry aXZlcnMvc3RhZ2luZy93ZngvZGF0YV90eC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAxNTU5MGE4ZmFlZmUuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2Rh dGFfdHguaAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KLS8qCi0gKiBEYXRhIHRyYW5zbWl0dGluZyBpbXBs ZW1lbnRhdGlvbi4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJv cmF0b3JpZXMsIEluYy4KLSAqIENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJpY3Nzb24KLSAqLwot I2lmbmRlZiBXRlhfREFUQV9UWF9ICi0jZGVmaW5lIFdGWF9EQVRBX1RYX0gKLQotI2luY2x1ZGUg PGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KLQotI2luY2x1ZGUgImhp Zl9hcGlfY21kLmgiCi0jaW5jbHVkZSAiaGlmX2FwaV9taWIuaCIKLQotc3RydWN0IHdmeF90eF9w cml2Owotc3RydWN0IHdmeF9kZXY7Ci1zdHJ1Y3Qgd2Z4X3ZpZjsKLQotc3RydWN0IHR4X3BvbGlj eSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaW5rOwotCWludCB1c2FnZV9jb3VudDsKLQl1OCByYXRl c1sxMl07Ci0JYm9vbCB1cGxvYWRlZDsKLX07Ci0KLXN0cnVjdCB0eF9wb2xpY3lfY2FjaGUgewot CXN0cnVjdCB0eF9wb2xpY3kgY2FjaGVbSElGX1RYX1JFVFJZX1BPTElDWV9NQVhdOwotCS8qIEZJ WE1FOiB1c2UgYSB0cmVlcyBhbmQgZHJvcCBoYXNoIGZyb20gdHhfcG9saWN5ICovCi0Jc3RydWN0 IGxpc3RfaGVhZCB1c2VkOwotCXN0cnVjdCBsaXN0X2hlYWQgZnJlZTsKLQlzcGlubG9ja190IGxv Y2s7Ci19OwotCi1zdHJ1Y3Qgd2Z4X3R4X3ByaXYgewotCWt0aW1lX3QgeG1pdF90aW1lc3RhbXA7 Ci0JdW5zaWduZWQgY2hhciBpY3Zfc2l6ZTsKLX07Ci0KLXZvaWQgd2Z4X3R4X3BvbGljeV9pbml0 KHN0cnVjdCB3ZnhfdmlmICp3dmlmKTsKLXZvaWQgd2Z4X3R4X3BvbGljeV91cGxvYWRfd29yayhz dHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotCi12b2lkIHdmeF90eChzdHJ1Y3QgaWVlZTgwMjEx X2h3ICpodywgc3RydWN0IGllZWU4MDIxMV90eF9jb250cm9sICpjb250cm9sLAotCSAgICBzdHJ1 Y3Qgc2tfYnVmZiAqc2tiKTsKLXZvaWQgd2Z4X3R4X2NvbmZpcm1fY2Ioc3RydWN0IHdmeF9kZXYg KndkZXYsIGNvbnN0IHN0cnVjdCBoaWZfY25mX3R4ICphcmcpOwotdm9pZCB3ZnhfZmx1c2goc3Ry dWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JICAgICAg IHUzMiBxdWV1ZXMsIGJvb2wgZHJvcCk7Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHdmeF90eF9w cml2ICp3Znhfc2tiX3R4X3ByaXYoc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgaWVl ZTgwMjExX3R4X2luZm8gKnR4X2luZm87Ci0KLQlpZiAoIXNrYikKLQkJcmV0dXJuIE5VTEw7Ci0J dHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlyZXR1cm4gKHN0cnVjdCB3ZnhfdHhf cHJpdiAqKXR4X2luZm8tPnJhdGVfZHJpdmVyX2RhdGE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3Ry dWN0IGhpZl9yZXFfdHggKndmeF9za2JfdHhyZXEoc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlz dHJ1Y3QgaGlmX21zZyAqaGlmID0gKHN0cnVjdCBoaWZfbXNnICopc2tiLT5kYXRhOwotCXN0cnVj dCBoaWZfcmVxX3R4ICpyZXEgPSAoc3RydWN0IGhpZl9yZXFfdHggKiloaWYtPmJvZHk7Ci0KLQly ZXR1cm4gcmVxOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93Zngv ZGVidWcuYyBiL2RyaXZlcnMvc3RhZ2luZy93ZngvZGVidWcuYwpkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggOWY5MzI2OGEzMjAyLi4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFn aW5nL3dmeC9kZWJ1Zy5jCisrKyAvZGV2L251bGwKQEAgLTEsMzY1ICswLDAgQEAKLS8vIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLS8qCi0gKiBEZWJ1Z2ZzIGludGVyZmFj ZS4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMs IEluYy4KLSAqIENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJpY3Nzb24KLSAqLwotI2luY2x1ZGUg PGxpbnV4L2RlYnVnZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUg PGxpbnV4L2NyYzMyLmg+Ci0KLSNpbmNsdWRlICJkZWJ1Zy5oIgotI2luY2x1ZGUgIndmeC5oIgot I2luY2x1ZGUgInN0YS5oIgotI2luY2x1ZGUgIm1haW4uaCIKLSNpbmNsdWRlICJoaWZfdHguaCIK LSNpbmNsdWRlICJoaWZfdHhfbWliLmgiCi0KLSNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwot I2luY2x1ZGUgInRyYWNlcy5oIgotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHRyYWNlX3ByaW50X2Zs YWdzIGhpZl9tc2dfcHJpbnRfbWFwW10gPSB7Ci0JaGlmX21zZ19saXN0LAotfTsKLQotc3RhdGlj IGNvbnN0IHN0cnVjdCB0cmFjZV9wcmludF9mbGFncyBoaWZfbWliX3ByaW50X21hcFtdID0gewot CWhpZl9taWJfbGlzdCwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdHJhY2VfcHJpbnRfZmxh Z3Mgd2Z4X3JlZ19wcmludF9tYXBbXSA9IHsKLQl3ZnhfcmVnX2xpc3QsCi19OwotCi1zdGF0aWMg Y29uc3QgY2hhciAqZ2V0X3N5bWJvbCh1bnNpZ25lZCBsb25nIHZhbCwKLQkJCSAgICAgIGNvbnN0 IHN0cnVjdCB0cmFjZV9wcmludF9mbGFncyAqc3ltYm9sX2FycmF5KQotewotCWludCBpOwotCi0J Zm9yIChpID0gMDsgc3ltYm9sX2FycmF5W2ldLm1hc2sgIT0gLTE7IGkrKykgewotCQlpZiAodmFs ID09IHN5bWJvbF9hcnJheVtpXS5tYXNrKQotCQkJcmV0dXJuIHN5bWJvbF9hcnJheVtpXS5uYW1l OwotCX0KLQotCXJldHVybiAidW5rbm93biI7Ci19Ci0KLWNvbnN0IGNoYXIgKmdldF9oaWZfbmFt ZSh1bnNpZ25lZCBsb25nIGlkKQotewotCXJldHVybiBnZXRfc3ltYm9sKGlkLCBoaWZfbXNnX3By aW50X21hcCk7Ci19Ci0KLWNvbnN0IGNoYXIgKmdldF9taWJfbmFtZSh1bnNpZ25lZCBsb25nIGlk KQotewotCXJldHVybiBnZXRfc3ltYm9sKGlkLCBoaWZfbWliX3ByaW50X21hcCk7Ci19Ci0KLWNv bnN0IGNoYXIgKmdldF9yZWdfbmFtZSh1bnNpZ25lZCBsb25nIGlkKQotewotCXJldHVybiBnZXRf c3ltYm9sKGlkLCB3ZnhfcmVnX3ByaW50X21hcCk7Ci19Ci0KLXN0YXRpYyBpbnQgd2Z4X2NvdW50 ZXJzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci0JaW50IHJldCwgaTsK LQlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IHNlcS0+cHJpdmF0ZTsKLQlzdHJ1Y3QgaGlmX21pYl9l eHRlbmRlZF9jb3VudF90YWJsZSBjb3VudGVyc1szXTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJB WV9TSVpFKGNvdW50ZXJzKTsgaSsrKSB7Ci0JCXJldCA9IGhpZl9nZXRfY291bnRlcnNfdGFibGUo d2RldiwgaSwgY291bnRlcnMgKyBpKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0Owot CQlpZiAocmV0ID4gMCkKLQkJCXJldHVybiAtRUlPOwotCX0KLQotCXNlcV9wcmludGYoc2VxLCAi JS0yNHMgJTEycyAlMTJzICUxMnNcbiIsCi0JCSAgICIiLCAiZ2xvYmFsIiwgImlmYWNlIDAiLCAi aWZhY2UgMSIpOwotCi0jZGVmaW5lIFBVVF9DT1VOVEVSKG5hbWUpIFwKLQlzZXFfcHJpbnRmKHNl cSwgIiUtMjRzICUxMmQgJTEyZCAlMTJkXG4iLCAjbmFtZSwgXAotCQkgICBsZTMyX3RvX2NwdShj b3VudGVyc1syXS5jb3VudF8jI25hbWUpLCBcCi0JCSAgIGxlMzJfdG9fY3B1KGNvdW50ZXJzWzBd LmNvdW50XyMjbmFtZSksIFwKLQkJICAgbGUzMl90b19jcHUoY291bnRlcnNbMV0uY291bnRfIyNu YW1lKSkKLQotCVBVVF9DT1VOVEVSKHR4X2ZyYW1lcyk7Ci0JUFVUX0NPVU5URVIodHhfZnJhbWVz X211bHRpY2FzdCk7Ci0JUFVUX0NPVU5URVIodHhfZnJhbWVzX3N1Y2Nlc3MpOwotCVBVVF9DT1VO VEVSKHR4X2ZyYW1lc19yZXRyaWVkKTsKLQlQVVRfQ09VTlRFUih0eF9mcmFtZXNfbXVsdGlfcmV0 cmllZCk7Ci0JUFVUX0NPVU5URVIodHhfZnJhbWVzX2ZhaWxlZCk7Ci0KLQlQVVRfQ09VTlRFUihh Y2tfZmFpbGVkKTsKLQlQVVRfQ09VTlRFUihydHNfc3VjY2Vzcyk7Ci0JUFVUX0NPVU5URVIocnRz X2ZhaWxlZCk7Ci0KLQlQVVRfQ09VTlRFUihyeF9mcmFtZXMpOwotCVBVVF9DT1VOVEVSKHJ4X2Zy YW1lc19tdWx0aWNhc3QpOwotCVBVVF9DT1VOVEVSKHJ4X2ZyYW1lc19zdWNjZXNzKTsKLQlQVVRf Q09VTlRFUihyeF9mcmFtZXNfZmFpbGVkKTsKLQlQVVRfQ09VTlRFUihkcm9wX3BsY3ApOwotCVBV VF9DT1VOVEVSKGRyb3BfZmNzKTsKLQlQVVRfQ09VTlRFUihkcm9wX25vX2tleSk7Ci0JUFVUX0NP VU5URVIoZHJvcF9kZWNyeXB0aW9uKTsKLQlQVVRfQ09VTlRFUihkcm9wX3RraXBfbWljKTsKLQlQ VVRfQ09VTlRFUihkcm9wX2JpcF9taWMpOwotCVBVVF9DT1VOVEVSKGRyb3BfY21hY19pY3YpOwot CVBVVF9DT1VOVEVSKGRyb3BfY21hY19yZXBsYXkpOwotCVBVVF9DT1VOVEVSKGRyb3BfY2NtcF9y ZXBsYXkpOwotCVBVVF9DT1VOVEVSKGRyb3BfZHVwbGljYXRlKTsKLQotCVBVVF9DT1VOVEVSKHJ4 X2Jjbl9taXNzKTsKLQlQVVRfQ09VTlRFUihyeF9iY25fc3VjY2Vzcyk7Ci0JUFVUX0NPVU5URVIo cnhfYmNuX2R0aW0pOwotCVBVVF9DT1VOVEVSKHJ4X2Jjbl9kdGltX2FpZDBfY2xyKTsKLQlQVVRf Q09VTlRFUihyeF9iY25fZHRpbV9haWQwX3NldCk7Ci0KLSN1bmRlZiBQVVRfQ09VTlRFUgotCi0J Zm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY291bnRlcnNbMF0ucmVzZXJ2ZWQpOyBpKyspCi0J CXNlcV9wcmludGYoc2VxLCAicmVzZXJ2ZWRbJTAyZF0lMTJzICUxMmQgJTEyZCAlMTJkXG4iLCBp LCAiIiwKLQkJCSAgIGxlMzJfdG9fY3B1KGNvdW50ZXJzWzJdLnJlc2VydmVkW2ldKSwKLQkJCSAg IGxlMzJfdG9fY3B1KGNvdW50ZXJzWzBdLnJlc2VydmVkW2ldKSwKLQkJCSAgIGxlMzJfdG9fY3B1 KGNvdW50ZXJzWzFdLnJlc2VydmVkW2ldKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLURFRklORV9TSE9X X0FUVFJJQlVURSh3ZnhfY291bnRlcnMpOwotCi1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNo YW5uZWxfbmFtZXNbXSA9IHsKLQlbMF0gPSAiMU0iLAotCVsxXSA9ICIyTSIsCi0JWzJdID0gIjUu NU0iLAotCVszXSA9ICIxMU0iLAotCS8qIEVudHJpZXMgNCBhbmQgNSBkb2VzIG5vdCBleGlzdCAq LwotCVs2XSA9ICI2TSIsCi0JWzddID0gIjlNIiwKLQlbOF0gPSAiMTJNIiwKLQlbOV0gPSAiMThN IiwKLQlbMTBdID0gIjI0TSIsCi0JWzExXSA9ICIzNk0iLAotCVsxMl0gPSAiNDhNIiwKLQlbMTNd ID0gIjU0TSIsCi0JWzE0XSA9ICJNQ1MwIiwKLQlbMTVdID0gIk1DUzEiLAotCVsxNl0gPSAiTUNT MiIsCi0JWzE3XSA9ICJNQ1MzIiwKLQlbMThdID0gIk1DUzQiLAotCVsxOV0gPSAiTUNTNSIsCi0J WzIwXSA9ICJNQ1M2IiwKLQlbMjFdID0gIk1DUzciLAotfTsKLQotc3RhdGljIGludCB3Znhfcnhf c3RhdHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlzdHJ1Y3Qgd2Z4 X2RldiAqd2RldiA9IHNlcS0+cHJpdmF0ZTsKLQlzdHJ1Y3QgaGlmX3J4X3N0YXRzICpzdCA9ICZ3 ZGV2LT5yeF9zdGF0czsKLQlpbnQgaTsKLQotCW11dGV4X2xvY2soJndkZXYtPnJ4X3N0YXRzX2xv Y2spOwotCXNlcV9wcmludGYoc2VxLCAiVGltZXN0YW1wOiAlZHVzXG4iLCBzdC0+ZGF0ZSk7Ci0J c2VxX3ByaW50ZihzZXEsICJMb3cgcG93ZXIgY2xvY2s6IGZyZXF1ZW5jeSAldUh6LCBleHRlcm5h bCAlc1xuIiwKLQkJICAgbGUzMl90b19jcHUoc3QtPnB3cl9jbGtfZnJlcSksCi0JCSAgIHN0LT5p c19leHRfcHdyX2NsayA/ICJ5ZXMiIDogIm5vIik7Ci0Jc2VxX3ByaW50ZihzZXEsCi0JCSAgICJO dW0uIG9mIGZyYW1lczogJWQsIFBFUiAoeDEwZTQpOiAlZCwgVGhyb3VnaHB1dDogJWRLYnBzL3Nc biIsCi0JCSAgIHN0LT5uYl9yeF9mcmFtZSwgc3QtPnBlcl90b3RhbCwgc3QtPnRocm91Z2hwdXQp OwotCXNlcV9wdXRzKHNlcSwgIiAgICAgICBOdW0uIG9mICAgICAgUEVSICAgICBSU1NJICAgICAg U05SICAgICAgQ0ZPXG4iKTsKLQlzZXFfcHV0cyhzZXEsICIgICAgICAgIGZyYW1lcyAgKHgxMGU0 KSAgICAoZEJtKSAgICAgKGRCKSAgICAoa0h6KVxuIik7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZ X1NJWkUoY2hhbm5lbF9uYW1lcyk7IGkrKykgewotCQlpZiAoY2hhbm5lbF9uYW1lc1tpXSkKLQkJ CXNlcV9wcmludGYoc2VxLCAiJTVzICU4ZCAlOGQgJThkICU4ZCAlOGRcbiIsCi0JCQkJICAgY2hh bm5lbF9uYW1lc1tpXSwKLQkJCQkgICBsZTMyX3RvX2NwdShzdC0+bmJfcnhfYnlfcmF0ZVtpXSks Ci0JCQkJICAgbGUxNl90b19jcHUoc3QtPnBlcltpXSksCi0JCQkJICAgKHMxNilsZTE2X3RvX2Nw dShzdC0+cnNzaVtpXSkgLyAxMDAsCi0JCQkJICAgKHMxNilsZTE2X3RvX2NwdShzdC0+c25yW2ld KSAvIDEwMCwKLQkJCQkgICAoczE2KWxlMTZfdG9fY3B1KHN0LT5jZm9baV0pKTsKLQl9Ci0JbXV0 ZXhfdW5sb2NrKCZ3ZGV2LT5yeF9zdGF0c19sb2NrKTsKLQotCXJldHVybiAwOwotfQotREVGSU5F X1NIT1dfQVRUUklCVVRFKHdmeF9yeF9zdGF0cyk7Ci0KLXN0YXRpYyBpbnQgd2Z4X3R4X3Bvd2Vy X2xvb3Bfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlzdHJ1Y3Qgd2Z4 X2RldiAqd2RldiA9IHNlcS0+cHJpdmF0ZTsKLQlzdHJ1Y3QgaGlmX3R4X3Bvd2VyX2xvb3BfaW5m byAqc3QgPSAmd2Rldi0+dHhfcG93ZXJfbG9vcF9pbmZvOwotCWludCB0bXA7Ci0KLQltdXRleF9s b2NrKCZ3ZGV2LT50eF9wb3dlcl9sb29wX2luZm9fbG9jayk7Ci0JdG1wID0gbGUxNl90b19jcHUo c3QtPnR4X2dhaW5fZGlnKTsKLQlzZXFfcHJpbnRmKHNlcSwgIlR4IGdhaW4gZGlnaXRhbDogJWRc biIsIHRtcCk7Ci0JdG1wID0gbGUxNl90b19jcHUoc3QtPnR4X2dhaW5fcGEpOwotCXNlcV9wcmlu dGYoc2VxLCAiVHggZ2FpbiBQQTogJWRcbiIsIHRtcCk7Ci0JdG1wID0gKHMxNilsZTE2X3RvX2Nw dShzdC0+dGFyZ2V0X3BvdXQpOwotCXNlcV9wcmludGYoc2VxLCAiVGFyZ2V0IFBvdXQ6ICVkLiUw MmQgZEJtXG4iLCB0bXAgLyA0LCAodG1wICUgNCkgKiAyNSk7Ci0JdG1wID0gKHMxNilsZTE2X3Rv X2NwdShzdC0+cF9lc3RpbWF0aW9uKTsKLQlzZXFfcHJpbnRmKHNlcSwgIkZFTSBQb3V0OiAlZC4l MDJkIGRCbVxuIiwgdG1wIC8gNCwgKHRtcCAlIDQpICogMjUpOwotCXRtcCA9IGxlMTZfdG9fY3B1 KHN0LT52cGRldCk7Ci0Jc2VxX3ByaW50ZihzZXEsICJWcGRldDogJWQgbVZcbiIsIHRtcCk7Ci0J c2VxX3ByaW50ZihzZXEsICJNZWFzdXJlIGluZGV4OiAlZFxuIiwgc3QtPm1lYXN1cmVtZW50X2lu ZGV4KTsKLQltdXRleF91bmxvY2soJndkZXYtPnR4X3Bvd2VyX2xvb3BfaW5mb19sb2NrKTsKLQot CXJldHVybiAwOwotfQotREVGSU5FX1NIT1dfQVRUUklCVVRFKHdmeF90eF9wb3dlcl9sb29wKTsK LQotc3RhdGljIHNzaXplX3Qgd2Z4X3NlbmRfcGRzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAot CQkJCSAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAotCQkJCSAgc2l6ZV90IGNvdW50LCBs b2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IHdmeF9kZXYgKndkZXYgPSBmaWxlLT5wcml2YXRlX2Rh dGE7Ci0JY2hhciAqYnVmOwotCWludCByZXQ7Ci0KLQlpZiAoKnBwb3MgIT0gMCkgewotCQlkZXZf ZGJnKHdkZXYtPmRldiwgIlBEUyBkYXRhIG11c3QgYmUgd3JpdHRlbiBpbiBvbmUgdHJhbnNhY3Rp b24iKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0JYnVmID0gbWVtZHVwX3VzZXIodXNlcl9idWYs IGNvdW50KTsKLQlpZiAoSVNfRVJSKGJ1ZikpCi0JCXJldHVybiBQVFJfRVJSKGJ1Zik7Ci0JKnBw b3MgPSAqcHBvcyArIGNvdW50OwotCXJldCA9IHdmeF9zZW5kX3Bkcyh3ZGV2LCBidWYsIGNvdW50 KTsKLQlrZnJlZShidWYpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCXJldHVybiBj b3VudDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgd2Z4X3NlbmRf cGRzX2ZvcHMgPSB7Ci0JLm9wZW4gPSBzaW1wbGVfb3BlbiwKLQkud3JpdGUgPSB3Znhfc2VuZF9w ZHNfd3JpdGUsCi19OwotCi1zdHJ1Y3QgZGJnZnNfaGlmX21zZyB7Ci0Jc3RydWN0IHdmeF9kZXYg KndkZXY7Ci0Jc3RydWN0IGNvbXBsZXRpb24gY29tcGxldGU7Ci0JdTggcmVwbHlbMTAyNF07Ci0J aW50IHJldDsKLX07Ci0KLXN0YXRpYyBzc2l6ZV90IHdmeF9zZW5kX2hpZl9tc2dfd3JpdGUoc3Ry dWN0IGZpbGUgKmZpbGUsCi0JCQkJICAgICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAot CQkJCSAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBkYmdmc19o aWZfbXNnICpjb250ZXh0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCB3ZnhfZGV2ICp3 ZGV2ID0gY29udGV4dC0+d2RldjsKLQlzdHJ1Y3QgaGlmX21zZyAqcmVxdWVzdDsKLQotCWlmIChj b21wbGV0aW9uX2RvbmUoJmNvbnRleHQtPmNvbXBsZXRlKSkgewotCQlkZXZfZGJnKHdkZXYtPmRl diwgInJlYWQgcHJldmlvdXMgcmVzdWx0IGJlZm9yZSBzdGFydCBhIG5ldyBvbmVcbiIpOwotCQly ZXR1cm4gLUVCVVNZOwotCX0KLQlpZiAoY291bnQgPCBzaXplb2Yoc3RydWN0IGhpZl9tc2cpKQot CQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIHdmeF9jbWRfc2VuZCgpIGNoZWNrcyB0aGF0IHJlcGx5 IGJ1ZmZlciBpcyB3aWRlIGVub3VnaCwgYnV0IGRvZXMgbm90Ci0JICogcmV0dXJuIHByZWNpc2Ug bGVuZ3RoIHJlYWQuIFVzZXIgaGF2ZSB0byBrbm93IGhvdyBtYW55IGJ5dGVzIHNob3VsZAotCSAq IGJlIHJlYWQuIEZpbGxpbmcgcmVwbHkgYnVmZmVyIHdpdGggYSBtZW1vcnkgcGF0dGVybiBtYXkg aGVscCB1c2VyLgotCSAqLwotCW1lbXNldChjb250ZXh0LT5yZXBseSwgMHhGRiwgc2l6ZW9mKGNv bnRleHQtPnJlcGx5KSk7Ci0JcmVxdWVzdCA9IG1lbWR1cF91c2VyKHVzZXJfYnVmLCBjb3VudCk7 Ci0JaWYgKElTX0VSUihyZXF1ZXN0KSkKLQkJcmV0dXJuIFBUUl9FUlIocmVxdWVzdCk7Ci0JaWYg KGxlMTZfdG9fY3B1KHJlcXVlc3QtPmxlbikgIT0gY291bnQpIHsKLQkJa2ZyZWUocmVxdWVzdCk7 Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQljb250ZXh0LT5yZXQgPSB3ZnhfY21kX3NlbmQod2Rl diwgcmVxdWVzdCwgY29udGV4dC0+cmVwbHksCi0JCQkJICAgIHNpemVvZihjb250ZXh0LT5yZXBs eSksIGZhbHNlKTsKLQotCWtmcmVlKHJlcXVlc3QpOwotCWNvbXBsZXRlKCZjb250ZXh0LT5jb21w bGV0ZSk7Ci0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgc3NpemVfdCB3Znhfc2VuZF9oaWZf bXNnX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCQkg ICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBkYmdmc19oaWZfbXNn ICpjb250ZXh0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWludCByZXQ7Ci0KLQlpZiAoY291bnQg PiBzaXplb2YoY29udGV4dC0+cmVwbHkpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXQgPSB3YWl0 X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoJmNvbnRleHQtPmNvbXBsZXRlKTsKLQlpZiAo cmV0KQotCQlyZXR1cm4gcmV0OwotCWlmIChjb250ZXh0LT5yZXQgPCAwKQotCQlyZXR1cm4gY29u dGV4dC0+cmV0OwotCS8qIEJlIGNhcmVmdWwsIHdyaXRlKCkgaXMgd2FpdGluZyBmb3IgYSBmdWxs IG1lc3NhZ2Ugd2hpbGUgcmVhZCgpCi0JICogb25seSByZXR1cm5zIGEgcGF5bG9hZAotCSAqLwot CWlmIChjb3B5X3RvX3VzZXIodXNlcl9idWYsIGNvbnRleHQtPnJlcGx5LCBjb3VudCkpCi0JCXJl dHVybiAtRUZBVUxUOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgaW50IHdmeF9zZW5k X2hpZl9tc2dfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsK LQlzdHJ1Y3QgZGJnZnNfaGlmX21zZyAqY29udGV4dCA9IGt6YWxsb2Moc2l6ZW9mKCpjb250ZXh0 KSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIWNvbnRleHQpCi0JCXJldHVybiAtRU5PTUVNOwotCWNv bnRleHQtPndkZXYgPSBpbm9kZS0+aV9wcml2YXRlOwotCWluaXRfY29tcGxldGlvbigmY29udGV4 dC0+Y29tcGxldGUpOwotCWZpbGUtPnByaXZhdGVfZGF0YSA9IGNvbnRleHQ7Ci0JcmV0dXJuIDA7 Ci19Ci0KLXN0YXRpYyBpbnQgd2Z4X3NlbmRfaGlmX21zZ19yZWxlYXNlKHN0cnVjdCBpbm9kZSAq aW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBkYmdmc19oaWZfbXNnICpjb250 ZXh0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi0Ja2ZyZWUoY29udGV4dCk7Ci0JcmV0dXJuIDA7 Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHdmeF9zZW5kX2hpZl9t c2dfZm9wcyA9IHsKLQkub3BlbiA9IHdmeF9zZW5kX2hpZl9tc2dfb3BlbiwKLQkucmVsZWFzZSA9 IHdmeF9zZW5kX2hpZl9tc2dfcmVsZWFzZSwKLQkud3JpdGUgPSB3Znhfc2VuZF9oaWZfbXNnX3dy aXRlLAotCS5yZWFkID0gd2Z4X3NlbmRfaGlmX21zZ19yZWFkLAotfTsKLQotc3RhdGljIGludCB3 ZnhfcHNfdGltZW91dF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkKLXsKLQlzdHJ1Y3Qgd2Z4X2Rl diAqd2RldiA9IChzdHJ1Y3Qgd2Z4X2RldiAqKWRhdGE7Ci0Jc3RydWN0IHdmeF92aWYgKnd2aWY7 Ci0KLQl3ZGV2LT5mb3JjZV9wc190aW1lb3V0ID0gdmFsOwotCXd2aWYgPSBOVUxMOwotCXdoaWxl ICgod3ZpZiA9IHd2aWZfaXRlcmF0ZSh3ZGV2LCB3dmlmKSkgIT0gTlVMTCkKLQkJd2Z4X3VwZGF0 ZV9wbSh3dmlmKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3ZnhfcHNfdGltZW91dF9n ZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpCi17Ci0Jc3RydWN0IHdmeF9kZXYgKndkZXYgPSAoc3Ry dWN0IHdmeF9kZXYgKilkYXRhOwotCi0JKnZhbCA9IHdkZXYtPmZvcmNlX3BzX3RpbWVvdXQ7Ci0J cmV0dXJuIDA7Ci19Ci0KLURFRklORV9ERUJVR0ZTX0FUVFJJQlVURSh3ZnhfcHNfdGltZW91dF9m b3BzLCB3ZnhfcHNfdGltZW91dF9nZXQsIHdmeF9wc190aW1lb3V0X3NldCwgIiVsbGRcbiIpOwot Ci1pbnQgd2Z4X2RlYnVnX2luaXQoc3RydWN0IHdmeF9kZXYgKndkZXYpCi17Ci0Jc3RydWN0IGRl bnRyeSAqZDsKLQotCWQgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoIndmeCIsIHdkZXYtPmh3LT53aXBo eS0+ZGVidWdmc2Rpcik7Ci0JZGVidWdmc19jcmVhdGVfZmlsZSgiY291bnRlcnMiLCAwNDQ0LCBk LCB3ZGV2LCAmd2Z4X2NvdW50ZXJzX2ZvcHMpOwotCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInJ4X3N0 YXRzIiwgMDQ0NCwgZCwgd2RldiwgJndmeF9yeF9zdGF0c19mb3BzKTsKLQlkZWJ1Z2ZzX2NyZWF0 ZV9maWxlKCJ0eF9wb3dlcl9sb29wIiwgMDQ0NCwgZCwgd2RldiwKLQkJCSAgICAmd2Z4X3R4X3Bv d2VyX2xvb3BfZm9wcyk7Ci0JZGVidWdmc19jcmVhdGVfZmlsZSgic2VuZF9wZHMiLCAwMjAwLCBk LCB3ZGV2LCAmd2Z4X3NlbmRfcGRzX2ZvcHMpOwotCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInNlbmRf aGlmX21zZyIsIDA2MDAsIGQsIHdkZXYsCi0JCQkgICAgJndmeF9zZW5kX2hpZl9tc2dfZm9wcyk7 Ci0JZGVidWdmc19jcmVhdGVfZmlsZSgicHNfdGltZW91dCIsIDA2MDAsIGQsIHdkZXYsICZ3Znhf cHNfdGltZW91dF9mb3BzKTsKLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9z dGFnaW5nL3dmeC9kZWJ1Zy5oIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9kZWJ1Zy5oCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjljNDlhOWZmZmIuLjAwMDAwMDAwMDAwMAotLS0gYS9k cml2ZXJzL3N0YWdpbmcvd2Z4L2RlYnVnLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBA Ci0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCi0vKgotICogRGVi dWdmcyBpbnRlcmZhY2UuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMTksIFNpbGljb24g TGFib3JhdG9yaWVzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEsIFNULUVyaWNzc29uCi0g Ki8KLSNpZm5kZWYgV0ZYX0RFQlVHX0gKLSNkZWZpbmUgV0ZYX0RFQlVHX0gKLQotc3RydWN0IHdm eF9kZXY7Ci0KLWludCB3ZnhfZGVidWdfaW5pdChzdHJ1Y3Qgd2Z4X2RldiAqd2Rldik7Ci0KLWNv bnN0IGNoYXIgKmdldF9oaWZfbmFtZSh1bnNpZ25lZCBsb25nIGlkKTsKLWNvbnN0IGNoYXIgKmdl dF9taWJfbmFtZSh1bnNpZ25lZCBsb25nIGlkKTsKLWNvbnN0IGNoYXIgKmdldF9yZWdfbmFtZSh1 bnNpZ25lZCBsb25nIGlkKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcv d2Z4L2Z3aW8uYyBiL2RyaXZlcnMvc3RhZ2luZy93ZngvZndpby5jCmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCA5OGE5MzkxYjJiZWUuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0 YWdpbmcvd2Z4L2Z3aW8uYworKysgL2Rldi9udWxsCkBAIC0xLDQwNSArMCwwIEBACi0vLyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Ci0vKgotICogRmlybXdhcmUgbG9hZGlu Zy4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMs IEluYy4KLSAqIENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJpY3Nzb24KLSAqLwotI2luY2x1ZGUg PGxpbnV4L2Zpcm13YXJlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxp bnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvYml0ZmllbGQuaD4KLQotI2luY2x1ZGUgImZ3aW8u aCIKLSNpbmNsdWRlICJ3ZnguaCIKLSNpbmNsdWRlICJod2lvLmgiCi0KLS8qIEFkZHJlc3NlcyBi ZWxvdyBhcmUgaW4gU1JBTSBhcmVhICovCi0jZGVmaW5lIFdGWF9ETkxEX0ZJRk8gICAgICAgICAg ICAgMHgwOTAwNDAwMAotI2RlZmluZSAgICAgRE5MRF9CTE9DS19TSVpFICAgICAgICAgICAweDA0 MDAKLSNkZWZpbmUgICAgIEROTERfRklGT19TSVpFICAgICAgICAgICAgMHg4MDAwIC8qICgzMiAq IEROTERfQkxPQ0tfU0laRSkgKi8KLS8qIERvd25sb2FkIENvbnRyb2wgQXJlYSAoRENBKSAqLwot I2RlZmluZSBXRlhfRENBX0lNQUdFX1NJWkUgICAgICAgIDB4MDkwMEMwMDAKLSNkZWZpbmUgV0ZY X0RDQV9QVVQgICAgICAgICAgICAgICAweDA5MDBDMDA0Ci0jZGVmaW5lIFdGWF9EQ0FfR0VUICAg ICAgICAgICAgICAgMHgwOTAwQzAwOAotI2RlZmluZSBXRlhfRENBX0hPU1RfU1RBVFVTICAgICAg IDB4MDkwMEMwMEMKLSNkZWZpbmUgICAgIEhPU1RfUkVBRFkgICAgICAgICAgICAgICAgMHg4NzY1 NDMyMQotI2RlZmluZSAgICAgSE9TVF9JTkZPX1JFQUQgICAgICAgICAgICAweEE3NTNCRDk5Ci0j ZGVmaW5lICAgICBIT1NUX1VQTE9BRF9QRU5ESU5HICAgICAgIDB4QUJDRERDQkEKLSNkZWZpbmUg ICAgIEhPU1RfVVBMT0FEX0NPTVBMRVRFICAgICAgMHhENEM2NEE5OQotI2RlZmluZSAgICAgSE9T VF9PS19UT19KVU1QICAgICAgICAgICAweDE3NEZDODgyCi0jZGVmaW5lIFdGWF9EQ0FfTkNQX1NU QVRVUyAgICAgICAgMHgwOTAwQzAxMAotI2RlZmluZSAgICAgTkNQX05PVF9SRUFEWSAgICAgICAg ICAgICAweDEyMzQ1Njc4Ci0jZGVmaW5lICAgICBOQ1BfUkVBRFkgICAgICAgICAgICAgICAgIDB4 ODc2NTQzMjEKLSNkZWZpbmUgICAgIE5DUF9JTkZPX1JFQURZICAgICAgICAgICAgMHhCRDUzRUY5 OQotI2RlZmluZSAgICAgTkNQX0RPV05MT0FEX1BFTkRJTkcgICAgICAweEFCQ0REQ0JBCi0jZGVm aW5lICAgICBOQ1BfRE9XTkxPQURfQ09NUExFVEUgICAgIDB4Q0FGRUZFQ0EKLSNkZWZpbmUgICAg IE5DUF9BVVRIX09LICAgICAgICAgICAgICAgMHhENEM2NEE5OQotI2RlZmluZSAgICAgTkNQX0FV VEhfRkFJTCAgICAgICAgICAgICAweDE3NEZDODgyCi0jZGVmaW5lICAgICBOQ1BfUFVCX0tFWV9S RFkgICAgICAgICAgIDB4N0FCNDFEMTkKLSNkZWZpbmUgV0ZYX0RDQV9GV19TSUdOQVRVUkUgICAg ICAweDA5MDBDMDE0Ci0jZGVmaW5lICAgICBGV19TSUdOQVRVUkVfU0laRSAgICAgICAgIDB4NDAK LSNkZWZpbmUgV0ZYX0RDQV9GV19IQVNIICAgICAgICAgICAweDA5MDBDMDU0Ci0jZGVmaW5lICAg ICBGV19IQVNIX1NJWkUgICAgICAgICAgICAgIDB4MDgKLSNkZWZpbmUgV0ZYX0RDQV9GV19WRVJT SU9OICAgICAgICAweDA5MDBDMDVDCi0jZGVmaW5lICAgICBGV19WRVJTSU9OX1NJWkUgICAgICAg ICAgIDB4MDQKLSNkZWZpbmUgV0ZYX0RDQV9SRVNFUlZFRCAgICAgICAgICAweDA5MDBDMDYwCi0j ZGVmaW5lICAgICBEQ0FfUkVTRVJWRURfU0laRSAgICAgICAgIDB4MjAKLSNkZWZpbmUgV0ZYX1NU QVRVU19JTkZPICAgICAgICAgICAweDA5MDBDMDgwCi0jZGVmaW5lIFdGWF9CT09UTE9BREVSX0xB QkVMICAgICAgMHgwOTAwQzA4NAotI2RlZmluZSAgICAgQk9PVExPQURFUl9MQUJFTF9TSVpFICAg ICAweDNDCi0jZGVmaW5lIFdGWF9QVEVfSU5GTyAgICAgICAgICAgICAgMHgwOTAwQzBDMAotI2Rl ZmluZSAgICAgUFRFX0lORk9fS0VZU0VUX0lEWCAgICAgICAweDBECi0jZGVmaW5lICAgICBQVEVf SU5GT19TSVpFICAgICAgICAgICAgIDB4MTAKLSNkZWZpbmUgV0ZYX0VSUl9JTkZPICAgICAgICAg ICAgICAweDA5MDBDMEQwCi0jZGVmaW5lICAgICBFUlJfSU5WQUxJRF9TRUNfVFlQRSAgICAgIDB4 MDUKLSNkZWZpbmUgICAgIEVSUl9TSUdfVkVSSUZfRkFJTEVEICAgICAgMHgwRgotI2RlZmluZSAg ICAgRVJSX0FFU19DVFJMX0tFWSAgICAgICAgICAweDEwCi0jZGVmaW5lICAgICBFUlJfRUNDX1BV Ql9LRVkgICAgICAgICAgIDB4MTEKLSNkZWZpbmUgICAgIEVSUl9NQUNfS0VZICAgICAgICAgICAg ICAgMHgxOAotCi0jZGVmaW5lIERDQV9USU1FT1VUICA1MCAvKiBtaWxsaXNlY29uZHMgKi8KLSNk ZWZpbmUgV0FLRVVQX1RJTUVPVVQgMjAwIC8qIG1pbGxpc2Vjb25kcyAqLwotCi1zdGF0aWMgY29u c3QgY2hhciAqIGNvbnN0IGZ3aW9fZXJyb3JzW10gPSB7Ci0JW0VSUl9JTlZBTElEX1NFQ19UWVBF XSA9ICJJbnZhbGlkIHNlY3Rpb24gdHlwZSBvciB3cm9uZyBlbmNyeXB0aW9uIiwKLQlbRVJSX1NJ R19WRVJJRl9GQUlMRURdID0gIlNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZmFpbGVkIiwKLQlbRVJS X0FFU19DVFJMX0tFWV0gPSAiQUVTIGNvbnRyb2wga2V5IG5vdCBpbml0aWFsaXplZCIsCi0JW0VS Ul9FQ0NfUFVCX0tFWV0gPSAiRUNDIHB1YmxpYyBrZXkgbm90IGluaXRpYWxpemVkIiwKLQlbRVJS X01BQ19LRVldID0gIk1BQyBrZXkgbm90IGluaXRpYWxpemVkIiwKLX07Ci0KLS8qIHJlcXVlc3Rf ZmlybXdhcmUoKSBhbGxvY2F0ZSBkYXRhIHVzaW5nIHZtYWxsb2MoKS4gSXQgaXMgbm90IGNvbXBh dGlibGUgd2l0aAotICogdW5kZXJseWluZyBoYXJkd2FyZSB0aGF0IHVzZSBETUEuIEZ1bmN0aW9u IGJlbG93IGRldGVjdCB0aGlzIGNhc2UgYW5kCi0gKiBhbGxvY2F0ZSBhIGJvdW5jZSBidWZmZXIg aWYgbmVjZXNzYXJ5LgotICoKLSAqIE5vdGljZSB0aGF0LCBpbiBkb3VidCwgeW91IGNhbiBlbmFi bGUgQ09ORklHX0RFQlVHX1NHIHRvIGFzayBrZXJuZWwgdG8KLSAqIGRldGVjdCB0aGlzIHByb2Js ZW0gYXQgcnVudGltZSAgKGVsc2UsIGtlcm5lbCBzaWxlbnRseSBmYWlsKS4KLSAqCi0gKiBOT1RF OiBpdCBtYXkgYWxzbyBiZSBwb3NzaWJsZSB0byB1c2UgJ3BhZ2VzJyBmcm9tIHN0cnVjdCBmaXJt d2FyZSBhbmQgYXZvaWQKLSAqIGJvdW5jZSBidWZmZXIKLSAqLwotc3RhdGljIGludCBzcmFtX3dy aXRlX2RtYV9zYWZlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgYWRkciwgY29uc3QgdTggKmJ1 ZiwKLQkJCSAgICAgICBzaXplX3QgbGVuKQotewotCWludCByZXQ7Ci0JY29uc3QgdTggKnRtcDsK LQotCWlmICghdmlydF9hZGRyX3ZhbGlkKGJ1ZikpIHsKLQkJdG1wID0ga21lbWR1cChidWYsIGxl biwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghdG1wKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JfSBlbHNl IHsKLQkJdG1wID0gYnVmOwotCX0KLQlyZXQgPSBzcmFtX2J1Zl93cml0ZSh3ZGV2LCBhZGRyLCB0 bXAsIGxlbik7Ci0JaWYgKHRtcCAhPSBidWYpCi0JCWtmcmVlKHRtcCk7Ci0JcmV0dXJuIHJldDsK LX0KLQotc3RhdGljIGludCBnZXRfZmlybXdhcmUoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiBr ZXlzZXRfY2hpcCwKLQkJCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqKmZ3LCBpbnQgKmZpbGVfb2Zm c2V0KQotewotCWludCBrZXlzZXRfZmlsZTsKLQljaGFyIGZpbGVuYW1lWzI1Nl07Ci0JY29uc3Qg Y2hhciAqZGF0YTsKLQlpbnQgcmV0OwotCi0Jc25wcmludGYoZmlsZW5hbWUsIHNpemVvZihmaWxl bmFtZSksICIlc18lMDJYLnNlYyIsCi0JCSB3ZGV2LT5wZGF0YS5maWxlX2Z3LCBrZXlzZXRfY2hp cCk7Ci0JcmV0ID0gZmlybXdhcmVfcmVxdWVzdF9ub3dhcm4oZncsIGZpbGVuYW1lLCB3ZGV2LT5k ZXYpOwotCWlmIChyZXQpIHsKLQkJZGV2X2luZm8od2Rldi0+ZGV2LCAiY2FuJ3QgbG9hZCAlcywg ZmFsbGluZyBiYWNrIHRvICVzLnNlY1xuIiwKLQkJCSBmaWxlbmFtZSwgd2Rldi0+cGRhdGEuZmls ZV9mdyk7Ci0JCXNucHJpbnRmKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLCAiJXMuc2VjIiwK LQkJCSB3ZGV2LT5wZGF0YS5maWxlX2Z3KTsKLQkJcmV0ID0gcmVxdWVzdF9maXJtd2FyZShmdywg ZmlsZW5hbWUsIHdkZXYtPmRldik7Ci0JCWlmIChyZXQpIHsKLQkJCWRldl9lcnIod2Rldi0+ZGV2 LCAiY2FuJ3QgbG9hZCAlc1xuIiwgZmlsZW5hbWUpOwotCQkJKmZ3ID0gTlVMTDsKLQkJCXJldHVy biByZXQ7Ci0JCX0KLQl9Ci0KLQlkYXRhID0gKCpmdyktPmRhdGE7Ci0JaWYgKG1lbWNtcChkYXRh LCAiS0VZU0VUIiwgNikgIT0gMCkgewotCQkvKiBMZWdhY3kgZmlybXdhcmUgZm9ybWF0ICovCi0J CSpmaWxlX29mZnNldCA9IDA7Ci0JCWtleXNldF9maWxlID0gMHg5MDsKLQl9IGVsc2UgewotCQkq ZmlsZV9vZmZzZXQgPSA4OwotCQlrZXlzZXRfZmlsZSA9IChoZXhfdG9fYmluKGRhdGFbNl0pICog MTYpIHwgaGV4X3RvX2JpbihkYXRhWzddKTsKLQkJaWYgKGtleXNldF9maWxlIDwgMCkgewotCQkJ ZGV2X2Vycih3ZGV2LT5kZXYsICIlcyBjb3JydXB0ZWRcbiIsIGZpbGVuYW1lKTsKLQkJCXJlbGVh c2VfZmlybXdhcmUoKmZ3KTsKLQkJCSpmdyA9IE5VTEw7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJ fQotCX0KLQlpZiAoa2V5c2V0X2ZpbGUgIT0ga2V5c2V0X2NoaXApIHsKLQkJZGV2X2Vycih3ZGV2 LT5kZXYsICJmaXJtd2FyZSBrZXlzZXQgaXMgaW5jb21wYXRpYmxlIHdpdGggY2hpcCAoZmlsZTog MHglMDJYLCBjaGlwOiAweCUwMlgpXG4iLAotCQkJa2V5c2V0X2ZpbGUsIGtleXNldF9jaGlwKTsK LQkJcmVsZWFzZV9maXJtd2FyZSgqZncpOwotCQkqZncgPSBOVUxMOwotCQlyZXR1cm4gLUVOT0RF VjsKLQl9Ci0Jd2Rldi0+a2V5c2V0ID0ga2V5c2V0X2ZpbGU7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0 YXRpYyBpbnQgd2FpdF9uY3Bfc3RhdHVzKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgc3RhdHVz KQotewotCWt0aW1lX3Qgbm93LCBzdGFydDsKLQl1MzIgcmVnOwotCWludCByZXQ7Ci0KLQlzdGFy dCA9IGt0aW1lX2dldCgpOwotCWZvciAoOzspIHsKLQkJcmV0ID0gc3JhbV9yZWdfcmVhZCh3ZGV2 LCBXRlhfRENBX05DUF9TVEFUVVMsICZyZWcpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiAt RUlPOwotCQlub3cgPSBrdGltZV9nZXQoKTsKLQkJaWYgKHJlZyA9PSBzdGF0dXMpCi0JCQlicmVh azsKLQkJaWYgKGt0aW1lX2FmdGVyKG5vdywga3RpbWVfYWRkX21zKHN0YXJ0LCBEQ0FfVElNRU9V VCkpKQotCQkJcmV0dXJuIC1FVElNRURPVVQ7Ci0JfQotCWlmIChrdGltZV9jb21wYXJlKG5vdywg c3RhcnQpKQotCQlkZXZfZGJnKHdkZXYtPmRldiwgImNoaXAgYW5zd2VyIGFmdGVyICVsbGR1c1xu IiwKLQkJCWt0aW1lX3VzX2RlbHRhKG5vdywgc3RhcnQpKTsKLQllbHNlCi0JCWRldl9kYmcod2Rl di0+ZGV2LCAiY2hpcCBhbnN3ZXIgaW1tZWRpYXRlbHlcbiIpOwotCXJldHVybiAwOwotfQotCi1z dGF0aWMgaW50IHVwbG9hZF9maXJtd2FyZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgY29uc3QgdTgg KmRhdGEsIHNpemVfdCBsZW4pCi17Ci0JaW50IHJldDsKLQl1MzIgb2ZmcywgYnl0ZXNfZG9uZSA9 IDA7Ci0Ja3RpbWVfdCBub3csIHN0YXJ0OwotCi0JaWYgKGxlbiAlIEROTERfQkxPQ0tfU0laRSkg ewotCQlkZXZfZXJyKHdkZXYtPmRldiwgImZpcm13YXJlIHNpemUgaXMgbm90IGFsaWduZWQuIEJ1 ZmZlciBvdmVycnVuIHdpbGwgb2NjdXJcbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0Jb2ZmcyA9 IDA7Ci0Jd2hpbGUgKG9mZnMgPCBsZW4pIHsKLQkJc3RhcnQgPSBrdGltZV9nZXQoKTsKLQkJZm9y ICg7OykgewotCQkJbm93ID0ga3RpbWVfZ2V0KCk7Ci0JCQlpZiAob2ZmcyArIEROTERfQkxPQ0tf U0laRSAtIGJ5dGVzX2RvbmUgPCBETkxEX0ZJRk9fU0laRSkKLQkJCQlicmVhazsKLQkJCWlmIChr dGltZV9hZnRlcihub3csIGt0aW1lX2FkZF9tcyhzdGFydCwgRENBX1RJTUVPVVQpKSkKLQkJCQly ZXR1cm4gLUVUSU1FRE9VVDsKLQkJCXJldCA9IHNyYW1fcmVnX3JlYWQod2RldiwgV0ZYX0RDQV9H RVQsICZieXRlc19kb25lKTsKLQkJCWlmIChyZXQgPCAwKQotCQkJCXJldHVybiByZXQ7Ci0JCX0K LQkJaWYgKGt0aW1lX2NvbXBhcmUobm93LCBzdGFydCkpCi0JCQlkZXZfZGJnKHdkZXYtPmRldiwg ImFuc3dlciBhZnRlciAlbGxkdXNcbiIsCi0JCQkJa3RpbWVfdXNfZGVsdGEobm93LCBzdGFydCkp OwotCi0JCXJldCA9IHNyYW1fd3JpdGVfZG1hX3NhZmUod2RldiwgV0ZYX0ROTERfRklGTyArCi0J CQkJCSAgKG9mZnMgJSBETkxEX0ZJRk9fU0laRSksCi0JCQkJCSAgZGF0YSArIG9mZnMsIEROTERf QkxPQ0tfU0laRSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQotCQkvKiBUaGUg ZGV2aWNlIHNlZW1zIHRvIG5vdCBzdXBwb3J0IHdyaXRpbmcgMCBpbiB0aGlzIHJlZ2lzdGVyCi0J CSAqIGR1cmluZyBmaXJzdCBsb29wCi0JCSAqLwotCQlvZmZzICs9IEROTERfQkxPQ0tfU0laRTsK LQkJcmV0ID0gc3JhbV9yZWdfd3JpdGUod2RldiwgV0ZYX0RDQV9QVVQsIG9mZnMpOwotCQlpZiAo cmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9p ZCBwcmludF9ib290X3N0YXR1cyhzdHJ1Y3Qgd2Z4X2RldiAqd2RldikKLXsKLQl1MzIgcmVnOwot Ci0Jc3JhbV9yZWdfcmVhZCh3ZGV2LCBXRlhfU1RBVFVTX0lORk8sICZyZWcpOwotCWlmIChyZWcg PT0gMHgxMjM0NTY3OCkKLQkJcmV0dXJuOwotCXNyYW1fcmVnX3JlYWQod2RldiwgV0ZYX0VSUl9J TkZPLCAmcmVnKTsKLQlpZiAocmVnIDwgQVJSQVlfU0laRShmd2lvX2Vycm9ycykgJiYgZndpb19l cnJvcnNbcmVnXSkKLQkJZGV2X2luZm8od2Rldi0+ZGV2LCAic2VjdXJlIGJvb3Q6ICVzXG4iLCBm d2lvX2Vycm9yc1tyZWddKTsKLQllbHNlCi0JCWRldl9pbmZvKHdkZXYtPmRldiwgInNlY3VyZSBi b290OiBFcnJvciAlIzAyeFxuIiwgcmVnKTsKLX0KLQotc3RhdGljIGludCBsb2FkX2Zpcm13YXJl X3NlY3VyZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldikKLXsKLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUg KmZ3ID0gTlVMTDsKLQlpbnQgaGVhZGVyX3NpemU7Ci0JaW50IGZ3X29mZnNldDsKLQlrdGltZV90 IHN0YXJ0OwotCXU4ICpidWY7Ci0JaW50IHJldDsKLQotCUJVSUxEX0JVR19PTihQVEVfSU5GT19T SVpFID4gQk9PVExPQURFUl9MQUJFTF9TSVpFKTsKLQlidWYgPSBrbWFsbG9jKEJPT1RMT0FERVJf TEFCRUxfU0laRSArIDEsIEdGUF9LRVJORUwpOwotCWlmICghYnVmKQotCQlyZXR1cm4gLUVOT01F TTsKLQotCXNyYW1fcmVnX3dyaXRlKHdkZXYsIFdGWF9EQ0FfSE9TVF9TVEFUVVMsIEhPU1RfUkVB RFkpOwotCXJldCA9IHdhaXRfbmNwX3N0YXR1cyh3ZGV2LCBOQ1BfSU5GT19SRUFEWSk7Ci0JaWYg KHJldCkKLQkJZ290byBlcnJvcjsKLQotCXNyYW1fYnVmX3JlYWQod2RldiwgV0ZYX0JPT1RMT0FE RVJfTEFCRUwsIGJ1ZiwgQk9PVExPQURFUl9MQUJFTF9TSVpFKTsKLQlidWZbQk9PVExPQURFUl9M QUJFTF9TSVpFXSA9IDA7Ci0JZGV2X2RiZyh3ZGV2LT5kZXYsICJib290bG9hZGVyOiBcIiVzXCJc biIsIGJ1Zik7Ci0KLQlzcmFtX2J1Zl9yZWFkKHdkZXYsIFdGWF9QVEVfSU5GTywgYnVmLCBQVEVf SU5GT19TSVpFKTsKLQlyZXQgPSBnZXRfZmlybXdhcmUod2RldiwgYnVmW1BURV9JTkZPX0tFWVNF VF9JRFhdLCAmZncsICZmd19vZmZzZXQpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyb3I7Ci0JaGVh ZGVyX3NpemUgPSBmd19vZmZzZXQgKyBGV19TSUdOQVRVUkVfU0laRSArIEZXX0hBU0hfU0laRTsK LQotCXNyYW1fcmVnX3dyaXRlKHdkZXYsIFdGWF9EQ0FfSE9TVF9TVEFUVVMsIEhPU1RfSU5GT19S RUFEKTsKLQlyZXQgPSB3YWl0X25jcF9zdGF0dXMod2RldiwgTkNQX1JFQURZKTsKLQlpZiAocmV0 KQotCQlnb3RvIGVycm9yOwotCi0Jc3JhbV9yZWdfd3JpdGUod2RldiwgV0ZYX0ROTERfRklGTywg MHhGRkZGRkZGRik7IC8qIEZpZm8gaW5pdCAqLwotCXNyYW1fd3JpdGVfZG1hX3NhZmUod2Rldiwg V0ZYX0RDQV9GV19WRVJTSU9OLCAiXHgwMVx4MDBceDAwXHgwMCIsCi0JCQkgICAgRldfVkVSU0lP Tl9TSVpFKTsKLQlzcmFtX3dyaXRlX2RtYV9zYWZlKHdkZXYsIFdGWF9EQ0FfRldfU0lHTkFUVVJF LCBmdy0+ZGF0YSArIGZ3X29mZnNldCwKLQkJCSAgICBGV19TSUdOQVRVUkVfU0laRSk7Ci0Jc3Jh bV93cml0ZV9kbWFfc2FmZSh3ZGV2LCBXRlhfRENBX0ZXX0hBU0gsCi0JCQkgICAgZnctPmRhdGEg KyBmd19vZmZzZXQgKyBGV19TSUdOQVRVUkVfU0laRSwKLQkJCSAgICBGV19IQVNIX1NJWkUpOwot CXNyYW1fcmVnX3dyaXRlKHdkZXYsIFdGWF9EQ0FfSU1BR0VfU0laRSwgZnctPnNpemUgLSBoZWFk ZXJfc2l6ZSk7Ci0Jc3JhbV9yZWdfd3JpdGUod2RldiwgV0ZYX0RDQV9IT1NUX1NUQVRVUywgSE9T VF9VUExPQURfUEVORElORyk7Ci0JcmV0ID0gd2FpdF9uY3Bfc3RhdHVzKHdkZXYsIE5DUF9ET1dO TE9BRF9QRU5ESU5HKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycm9yOwotCi0Jc3RhcnQgPSBrdGlt ZV9nZXQoKTsKLQlyZXQgPSB1cGxvYWRfZmlybXdhcmUod2RldiwgZnctPmRhdGEgKyBoZWFkZXJf c2l6ZSwKLQkJCSAgICAgIGZ3LT5zaXplIC0gaGVhZGVyX3NpemUpOwotCWlmIChyZXQpCi0JCWdv dG8gZXJyb3I7Ci0JZGV2X2RiZyh3ZGV2LT5kZXYsICJmaXJtd2FyZSBsb2FkIGFmdGVyICVsbGR1 c1xuIiwKLQkJa3RpbWVfdXNfZGVsdGEoa3RpbWVfZ2V0KCksIHN0YXJ0KSk7Ci0KLQlzcmFtX3Jl Z193cml0ZSh3ZGV2LCBXRlhfRENBX0hPU1RfU1RBVFVTLCBIT1NUX1VQTE9BRF9DT01QTEVURSk7 Ci0JcmV0ID0gd2FpdF9uY3Bfc3RhdHVzKHdkZXYsIE5DUF9BVVRIX09LKTsKLQkvKiBMZWdhY3kg Uk9NIHN1cHBvcnQgKi8KLQlpZiAocmV0IDwgMCkKLQkJcmV0ID0gd2FpdF9uY3Bfc3RhdHVzKHdk ZXYsIE5DUF9QVUJfS0VZX1JEWSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gZXJyb3I7Ci0Jc3Jh bV9yZWdfd3JpdGUod2RldiwgV0ZYX0RDQV9IT1NUX1NUQVRVUywgSE9TVF9PS19UT19KVU1QKTsK LQotZXJyb3I6Ci0Ja2ZyZWUoYnVmKTsKLQlpZiAoZncpCi0JCXJlbGVhc2VfZmlybXdhcmUoZncp OwotCWlmIChyZXQpCi0JCXByaW50X2Jvb3Rfc3RhdHVzKHdkZXYpOwotCXJldHVybiByZXQ7Ci19 Ci0KLXN0YXRpYyBpbnQgaW5pdF9ncHIoc3RydWN0IHdmeF9kZXYgKndkZXYpCi17Ci0JaW50IHJl dCwgaTsKLQlzdGF0aWMgY29uc3Qgc3RydWN0IHsKLQkJaW50IGluZGV4OwotCQl1MzIgdmFsdWU7 Ci0JfSBncHJfaW5pdFtdID0gewotCQl7IDB4MDcsIDB4MjA4Nzc1IH0sCi0JCXsgMHgwOCwgMHgy RUMwMjAgfSwKLQkJeyAweDA5LCAweDNDM0MzQyB9LAotCQl7IDB4MEIsIDB4MzIyQzQ0IH0sCi0J CXsgMHgwQywgMHhBMDY0OTcgfSwKLQl9OwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo Z3ByX2luaXQpOyBpKyspIHsKLQkJcmV0ID0gaWdwcl9yZWdfd3JpdGUod2RldiwgZ3ByX2luaXRb aV0uaW5kZXgsCi0JCQkJICAgICBncHJfaW5pdFtpXS52YWx1ZSk7Ci0JCWlmIChyZXQgPCAwKQot CQkJcmV0dXJuIHJldDsKLQkJZGV2X2RiZyh3ZGV2LT5kZXYsICIgIGluZGV4ICUwMng6ICUwOHhc biIsCi0JCQlncHJfaW5pdFtpXS5pbmRleCwgZ3ByX2luaXRbaV0udmFsdWUpOwotCX0KLQlyZXR1 cm4gMDsKLX0KLQotaW50IHdmeF9pbml0X2RldmljZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldikKLXsK LQlpbnQgcmV0OwotCWludCBod19yZXZpc2lvbiwgaHdfdHlwZTsKLQlpbnQgd2FrZXVwX3RpbWVv dXQgPSA1MDsgLyogbXMgKi8KLQlrdGltZV90IG5vdywgc3RhcnQ7Ci0JdTMyIHJlZzsKLQotCXJl ZyA9IENGR19ESVJFQ1RfQUNDRVNTX01PREUgfCBDRkdfQ1BVX1JFU0VUIHwgQ0ZHX0JZVEVfT1JE RVJfQUJDRDsKLQlpZiAod2Rldi0+cGRhdGEudXNlX3Jpc2luZ19jbGspCi0JCXJlZyB8PSBDRkdf Q0xLX1JJU0VfRURHRTsKLQlyZXQgPSBjb25maWdfcmVnX3dyaXRlKHdkZXYsIHJlZyk7Ci0JaWYg KHJldCA8IDApIHsKLQkJZGV2X2Vycih3ZGV2LT5kZXYsICJidXMgcmV0dXJuZWQgYW4gZXJyb3Ig ZHVyaW5nIGZpcnN0IHdyaXRlIGFjY2Vzcy4gSG9zdCBjb25maWd1cmF0aW9uIGVycm9yP1xuIik7 Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXJldCA9IGNvbmZpZ19yZWdfcmVhZCh3ZGV2LCAmcmVn KTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKHdkZXYtPmRldiwgImJ1cyByZXR1cm5lZCBh biBlcnJvciBkdXJpbmcgZmlyc3QgcmVhZCBhY2Nlc3MuIEJ1cyBjb25maWd1cmF0aW9uIGVycm9y P1xuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlpZiAocmVnID09IDAgfHwgcmVnID09IH4wKSB7 Ci0JCWRldl9lcnIod2Rldi0+ZGV2LCAiY2hpcCBtdXRlLiBCdXMgY29uZmlndXJhdGlvbiBlcnJv ciBvciBjaGlwIHdhc24ndCByZXNldD9cbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JZGV2X2Ri Zyh3ZGV2LT5kZXYsICJpbml0aWFsIGNvbmZpZyByZWdpc3RlciB2YWx1ZTogJTA4eFxuIiwgcmVn KTsKLQotCWh3X3JldmlzaW9uID0gRklFTERfR0VUKENGR19ERVZJQ0VfSURfTUFKT1IsIHJlZyk7 Ci0JaWYgKGh3X3JldmlzaW9uID09IDApIHsKLQkJZGV2X2Vycih3ZGV2LT5kZXYsICJiYWQgaGFy ZHdhcmUgcmV2aXNpb24gbnVtYmVyOiAlZFxuIiwKLQkJCWh3X3JldmlzaW9uKTsKLQkJcmV0dXJu IC1FTk9ERVY7Ci0JfQotCWh3X3R5cGUgPSBGSUVMRF9HRVQoQ0ZHX0RFVklDRV9JRF9UWVBFLCBy ZWcpOwotCWlmIChod190eXBlID09IDEpIHsKLQkJZGV2X25vdGljZSh3ZGV2LT5kZXYsICJkZXZl bG9wbWVudCBoYXJkd2FyZSBkZXRlY3RlZFxuIik7Ci0JCXdha2V1cF90aW1lb3V0ID0gMjAwMDsK LQl9Ci0KLQlyZXQgPSBpbml0X2dwcih3ZGV2KTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJl dDsKLQotCXJldCA9IGNvbnRyb2xfcmVnX3dyaXRlKHdkZXYsIENUUkxfV0xBTl9XQUtFVVApOwot CWlmIChyZXQgPCAwKQotCQlyZXR1cm4gLUVJTzsKLQlzdGFydCA9IGt0aW1lX2dldCgpOwotCWZv ciAoOzspIHsKLQkJcmV0ID0gY29udHJvbF9yZWdfcmVhZCh3ZGV2LCAmcmVnKTsKLQkJbm93ID0g a3RpbWVfZ2V0KCk7Ci0JCWlmIChyZWcgJiBDVFJMX1dMQU5fUkVBRFkpCi0JCQlicmVhazsKLQkJ aWYgKGt0aW1lX2FmdGVyKG5vdywga3RpbWVfYWRkX21zKHN0YXJ0LCB3YWtldXBfdGltZW91dCkp KSB7Ci0JCQlkZXZfZXJyKHdkZXYtPmRldiwgImNoaXAgZGlkbid0IHdha2UgdXAuIENoaXAgd2Fz bid0IHJlc2V0P1xuIik7Ci0JCQlyZXR1cm4gLUVUSU1FRE9VVDsKLQkJfQotCX0KLQlkZXZfZGJn KHdkZXYtPmRldiwgImNoaXAgd2FrZSB1cCBhZnRlciAlbGxkdXNcbiIsCi0JCWt0aW1lX3VzX2Rl bHRhKG5vdywgc3RhcnQpKTsKLQotCXJldCA9IGNvbmZpZ19yZWdfd3JpdGVfYml0cyh3ZGV2LCBD RkdfQ1BVX1JFU0VULCAwKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQlyZXQgPSBs b2FkX2Zpcm13YXJlX3NlY3VyZSh3ZGV2KTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsK LQlyZXR1cm4gY29uZmlnX3JlZ193cml0ZV9iaXRzKHdkZXYsCi0JCQkJICAgICBDRkdfRElSRUNU X0FDQ0VTU19NT0RFIHwKLQkJCQkgICAgIENGR19JUlFfRU5BQkxFX0RBVEEgfAotCQkJCSAgICAg Q0ZHX0lSUV9FTkFCTEVfV1JEWSwKLQkJCQkgICAgIENGR19JUlFfRU5BQkxFX0RBVEEpOwotfQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9md2lvLmggYi9kcml2ZXJzL3N0YWdpbmcv d2Z4L2Z3aW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVlYTYxMjEwZWNhLi4w MDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC9md2lvLmgKKysrIC9kZXYvbnVs bApAQCAtMSwxNSArMCwwIEBACi0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1v bmx5ICovCi0vKgotICogRmlybXdhcmUgbG9hZGluZy4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIw MTctMjAxOSwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSAqIENvcHlyaWdodCAoYykgMjAx MCwgU1QtRXJpY3Nzb24KLSAqLwotI2lmbmRlZiBXRlhfRldJT19ICi0jZGVmaW5lIFdGWF9GV0lP X0gKLQotc3RydWN0IHdmeF9kZXY7Ci0KLWludCB3ZnhfaW5pdF9kZXZpY2Uoc3RydWN0IHdmeF9k ZXYgKndkZXYpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZngvaGlm X2FwaV9jbWQuaCBiL2RyaXZlcnMvc3RhZ2luZy93ZngvaGlmX2FwaV9jbWQuaApkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggYjBhYTEzYjIzYTUxLi4wMDAwMDAwMDAwMDAKLS0tIGEvZHJp dmVycy9zdGFnaW5nL3dmeC9oaWZfYXBpX2NtZC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTU1ICsw LDAgQEAKLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wICovCi0vKgotICog V0YyMDAgaGFyZHdhcmUgaW50ZXJmYWNlIGRlZmluaXRpb25zCi0gKgotICogQ29weXJpZ2h0IChj KSAyMDE4LTIwMjAsIFNpbGljb24gTGFib3JhdG9yaWVzIEluYy4KLSAqLwotCi0jaWZuZGVmIFdG WF9ISUZfQVBJX0NNRF9ICi0jZGVmaW5lIFdGWF9ISUZfQVBJX0NNRF9ICi0KLSNpbmNsdWRlIDxs aW51eC9pZWVlODAyMTEuaD4KLQotI2luY2x1ZGUgImhpZl9hcGlfZ2VuZXJhbC5oIgotCi1lbnVt IGhpZl9yZXF1ZXN0c19pZHMgewotCUhJRl9SRVFfSURfUkVTRVQgICAgICAgICAgICAgICAgPSAw eDBhLAotCUhJRl9SRVFfSURfUkVBRF9NSUIgICAgICAgICAgICAgPSAweDA1LAotCUhJRl9SRVFf SURfV1JJVEVfTUlCICAgICAgICAgICAgPSAweDA2LAotCUhJRl9SRVFfSURfU1RBUlRfU0NBTiAg ICAgICAgICAgPSAweDA3LAotCUhJRl9SRVFfSURfU1RPUF9TQ0FOICAgICAgICAgICAgPSAweDA4 LAotCUhJRl9SRVFfSURfVFggICAgICAgICAgICAgICAgICAgPSAweDA0LAotCUhJRl9SRVFfSURf Sk9JTiAgICAgICAgICAgICAgICAgPSAweDBiLAotCUhJRl9SRVFfSURfU0VUX1BNX01PREUgICAg ICAgICAgPSAweDEwLAotCUhJRl9SRVFfSURfU0VUX0JTU19QQVJBTVMgICAgICAgPSAweDExLAot CUhJRl9SRVFfSURfQUREX0tFWSAgICAgICAgICAgICAgPSAweDBjLAotCUhJRl9SRVFfSURfUkVN T1ZFX0tFWSAgICAgICAgICAgPSAweDBkLAotCUhJRl9SRVFfSURfRURDQV9RVUVVRV9QQVJBTVMg ICAgPSAweDEzLAotCUhJRl9SRVFfSURfU1RBUlQgICAgICAgICAgICAgICAgPSAweDE3LAotCUhJ Rl9SRVFfSURfQkVBQ09OX1RSQU5TTUlUICAgICAgPSAweDE4LAotCUhJRl9SRVFfSURfVVBEQVRF X0lFICAgICAgICAgICAgPSAweDFiLAotCUhJRl9SRVFfSURfTUFQX0xJTksgICAgICAgICAgICAg PSAweDFjLAotfTsKLQotZW51bSBoaWZfY29uZmlybWF0aW9uc19pZHMgewotCUhJRl9DTkZfSURf UkVTRVQgICAgICAgICAgICAgICAgPSAweDBhLAotCUhJRl9DTkZfSURfUkVBRF9NSUIgICAgICAg ICAgICAgPSAweDA1LAotCUhJRl9DTkZfSURfV1JJVEVfTUlCICAgICAgICAgICAgPSAweDA2LAot CUhJRl9DTkZfSURfU1RBUlRfU0NBTiAgICAgICAgICAgPSAweDA3LAotCUhJRl9DTkZfSURfU1RP UF9TQ0FOICAgICAgICAgICAgPSAweDA4LAotCUhJRl9DTkZfSURfVFggICAgICAgICAgICAgICAg ICAgPSAweDA0LAotCUhJRl9DTkZfSURfTVVMVElfVFJBTlNNSVQgICAgICAgPSAweDFlLAotCUhJ Rl9DTkZfSURfSk9JTiAgICAgICAgICAgICAgICAgPSAweDBiLAotCUhJRl9DTkZfSURfU0VUX1BN X01PREUgICAgICAgICAgPSAweDEwLAotCUhJRl9DTkZfSURfU0VUX0JTU19QQVJBTVMgICAgICAg PSAweDExLAotCUhJRl9DTkZfSURfQUREX0tFWSAgICAgICAgICAgICAgPSAweDBjLAotCUhJRl9D TkZfSURfUkVNT1ZFX0tFWSAgICAgICAgICAgPSAweDBkLAotCUhJRl9DTkZfSURfRURDQV9RVUVV RV9QQVJBTVMgICAgPSAweDEzLAotCUhJRl9DTkZfSURfU1RBUlQgICAgICAgICAgICAgICAgPSAw eDE3LAotCUhJRl9DTkZfSURfQkVBQ09OX1RSQU5TTUlUICAgICAgPSAweDE4LAotCUhJRl9DTkZf SURfVVBEQVRFX0lFICAgICAgICAgICAgPSAweDFiLAotCUhJRl9DTkZfSURfTUFQX0xJTksgICAg ICAgICAgICAgPSAweDFjLAotfTsKLQotZW51bSBoaWZfaW5kaWNhdGlvbnNfaWRzIHsKLQlISUZf SU5EX0lEX1JYICAgICAgICAgICAgICAgICAgID0gMHg4NCwKLQlISUZfSU5EX0lEX1NDQU5fQ01Q TCAgICAgICAgICAgID0gMHg4NiwKLQlISUZfSU5EX0lEX0pPSU5fQ09NUExFVEUgICAgICAgID0g MHg4ZiwKLQlISUZfSU5EX0lEX1NFVF9QTV9NT0RFX0NNUEwgICAgID0gMHg4OSwKLQlISUZfSU5E X0lEX1NVU1BFTkRfUkVTVU1FX1RYICAgID0gMHg4YywKLQlISUZfSU5EX0lEX0VWRU5UICAgICAg ICAgICAgICAgID0gMHg4NQotfTsKLQotc3RydWN0IGhpZl9yZXFfcmVzZXQgewotCXU4ICAgICBy ZXNldF9zdGF0OjE7Ci0JdTggICAgIHJlc2V0X2FsbF9pbnQ6MTsKLQl1OCAgICAgcmVzZXJ2ZWQx OjY7Ci0JdTggICAgIHJlc2VydmVkMlszXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfY25m X3Jlc2V0IHsKLQlfX2xlMzIgc3RhdHVzOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9yZXFf cmVhZF9taWIgewotCV9fbGUxNiBtaWJfaWQ7Ci0JX19sZTE2IHJlc2VydmVkOwotfSBfX3BhY2tl ZDsKLQotc3RydWN0IGhpZl9jbmZfcmVhZF9taWIgewotCV9fbGUzMiBzdGF0dXM7Ci0JX19sZTE2 IG1pYl9pZDsKLQlfX2xlMTYgbGVuZ3RoOwotCXU4ICAgICBtaWJfZGF0YVtdOwotfSBfX3BhY2tl ZDsKLQotc3RydWN0IGhpZl9yZXFfd3JpdGVfbWliIHsKLQlfX2xlMTYgbWliX2lkOwotCV9fbGUx NiBsZW5ndGg7Ci0JdTggICAgIG1pYl9kYXRhW107Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlm X2NuZl93cml0ZV9taWIgewotCV9fbGUzMiBzdGF0dXM7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3Qg aGlmX3JlcV91cGRhdGVfaWUgewotCXU4ICAgICBiZWFjb246MTsKLQl1OCAgICAgcHJvYmVfcmVz cDoxOwotCXU4ICAgICBwcm9iZV9yZXE6MTsKLQl1OCAgICAgcmVzZXJ2ZWQxOjU7Ci0JdTggICAg IHJlc2VydmVkMjsKLQlfX2xlMTYgbnVtX2llczsKLQl1OCAgICAgaWVbXTsKLX0gX19wYWNrZWQ7 Ci0KLXN0cnVjdCBoaWZfY25mX3VwZGF0ZV9pZSB7Ci0JX19sZTMyIHN0YXR1czsKLX0gX19wYWNr ZWQ7Ci0KLXN0cnVjdCBoaWZfc3NpZF9kZWYgewotCV9fbGUzMiBzc2lkX2xlbmd0aDsKLQl1OCAg ICAgc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTsKLX0gX19wYWNrZWQ7Ci0KLSNkZWZpbmUg SElGX0FQSV9NQVhfTkJfU1NJRFMgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5l IEhJRl9BUElfTUFYX05CX0NIQU5ORUxTICAgICAgICAgICAgICAgICAgICAgICAxNAotCi1zdHJ1 Y3QgaGlmX3JlcV9zdGFydF9zY2FuX2FsdCB7Ci0JdTggICAgIGJhbmQ7Ci0JdTggICAgIG1haW50 YWluX2N1cnJlbnRfYnNzOjE7Ci0JdTggICAgIHBlcmlvZGljOjE7Ci0JdTggICAgIHJlc2VydmVk MTo2OwotCXU4ICAgICBkaXNhbGxvd19wczoxOwotCXU4ICAgICByZXNlcnZlZDI6MTsKLQl1OCAg ICAgc2hvcnRfcHJlYW1ibGU6MTsKLQl1OCAgICAgcmVzZXJ2ZWQzOjU7Ci0JdTggICAgIG1heF90 cmFuc21pdF9yYXRlOwotCV9fbGUxNiBwZXJpb2RpY19pbnRlcnZhbDsKLQl1OCAgICAgcmVzZXJ2 ZWQ0OwotCXM4ICAgICBwZXJpb2RpY19yc3NpX3RocjsKLQl1OCAgICAgbnVtX29mX3Byb2JlX3Jl cXVlc3RzOwotCXU4ICAgICBwcm9iZV9kZWxheTsKLQl1OCAgICAgbnVtX29mX3NzaWRzOwotCXU4 ICAgICBudW1fb2ZfY2hhbm5lbHM7Ci0JX19sZTMyIG1pbl9jaGFubmVsX3RpbWU7Ci0JX19sZTMy IG1heF9jaGFubmVsX3RpbWU7Ci0JX19sZTMyIHR4X3Bvd2VyX2xldmVsOyAvKiBzaWduZWQgdmFs dWUgKi8KLQlzdHJ1Y3QgaGlmX3NzaWRfZGVmIHNzaWRfZGVmW0hJRl9BUElfTUFYX05CX1NTSURT XTsKLQl1OCAgICAgY2hhbm5lbF9saXN0W107Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX2Nu Zl9zdGFydF9zY2FuIHsKLQlfX2xlMzIgc3RhdHVzOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhp Zl9jbmZfc3RvcF9zY2FuIHsKLQlfX2xlMzIgc3RhdHVzOwotfSBfX3BhY2tlZDsKLQotZW51bSBo aWZfcG1fbW9kZV9zdGF0dXMgewotCUhJRl9QTV9NT0RFX0FDVElWRSAgICAgICAgICAgICAgICAg ICAgICAgICA9IDB4MCwKLQlISUZfUE1fTU9ERV9QUyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgPSAweDEsCi0JSElGX1BNX01PREVfVU5ERVRFUk1JTkVEICAgICAgICAgICAgICAgICAgID0g MHgyCi19OwotCi1zdHJ1Y3QgaGlmX2luZF9zY2FuX2NtcGwgewotCV9fbGUzMiBzdGF0dXM7Ci0J dTggICAgIHBtX21vZGU7Ci0JdTggICAgIG51bV9jaGFubmVsc19jb21wbGV0ZWQ7Ci0JX19sZTE2 IHJlc2VydmVkOwotfSBfX3BhY2tlZDsKLQotZW51bSBoaWZfcXVldWVfaWQgewotCUhJRl9RVUVV RV9JRF9CQUNLR1JPVU5EICAgICAgICAgICAgICAgICAgICA9IDB4MCwKLQlISUZfUVVFVUVfSURf QkVTVEVGRk9SVCAgICAgICAgICAgICAgICAgICAgPSAweDEsCi0JSElGX1FVRVVFX0lEX1ZJREVP ICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyLAotCUhJRl9RVUVVRV9JRF9WT0lDRSAgICAg ICAgICAgICAgICAgICAgICAgICA9IDB4MwotfTsKLQotZW51bSBoaWZfZnJhbWVfZm9ybWF0IHsK LQlISUZfRlJBTUVfRk9STUFUX05PTl9IVCAgICAgICAgICAgICAgICAgICAgPSAweDAsCi0JSElG X0ZSQU1FX0ZPUk1BVF9NSVhFRF9GT1JNQVRfSFQgICAgICAgICAgID0gMHgxLAotCUhJRl9GUkFN RV9GT1JNQVRfR0ZfSFRfMTFOICAgICAgICAgICAgICAgICA9IDB4MgotfTsKLQotc3RydWN0IGhp Zl9yZXFfdHggewotCS8qIHBhY2tldF9pZCBpcyBub3QgaW50ZXJwcmV0ZWQgYnkgdGhlIGRldmlj ZSwgc28gaXQgaXMgbm90IG5lY2Vzc2FyeSB0bwotCSAqIGRlY2xhcmUgaXQgbGl0dGxlIGVuZGlh bgotCSAqLwotCXUzMiAgICBwYWNrZXRfaWQ7Ci0JdTggICAgIG1heF90eF9yYXRlOwotCXU4ICAg ICBxdWV1ZV9pZDoyOwotCXU4ICAgICBwZWVyX3N0YV9pZDo0OwotCXU4ICAgICByZXNlcnZlZDE6 MjsKLQl1OCAgICAgbW9yZToxOwotCXU4ICAgICBmY19vZmZzZXQ6MzsKLQl1OCAgICAgYWZ0ZXJf ZHRpbToxOwotCXU4ICAgICByZXNlcnZlZDI6MzsKLQl1OCAgICAgc3RhcnRfZXhwOjE7Ci0JdTgg ICAgIHJlc2VydmVkMzozOwotCXU4ICAgICByZXRyeV9wb2xpY3lfaW5kZXg6NDsKLQlfX2xlMzIg cmVzZXJ2ZWQ0OwotCV9fbGUzMiBleHBpcmVfdGltZTsKLQl1OCAgICAgZnJhbWVfZm9ybWF0OjQ7 Ci0JdTggICAgIGZlY19jb2Rpbmc6MTsKLQl1OCAgICAgc2hvcnRfZ2k6MTsKLQl1OCAgICAgcmVz ZXJ2ZWQ1OjE7Ci0JdTggICAgIHN0YmM6MTsKLQl1OCAgICAgcmVzZXJ2ZWQ2OwotCXU4ICAgICBh Z2dyZWdhdGlvbjoxOwotCXU4ICAgICByZXNlcnZlZDc6NzsKLQl1OCAgICAgcmVzZXJ2ZWQ4Owot CXU4ICAgICBmcmFtZVtdOwotfSBfX3BhY2tlZDsKLQotZW51bSBoaWZfcW9zX2Fja3BsY3kgewot CUhJRl9RT1NfQUNLUExDWV9OT1JNQUwgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAsCi0J SElGX1FPU19BQ0tQTENZX1RYTk9BQ0sgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MSwKLQlI SUZfUU9TX0FDS1BMQ1lfTk9FWFBBQ0sgICAgICAgICAgICAgICAgICAgICAgID0gMHgyLAotCUhJ Rl9RT1NfQUNLUExDWV9CTENLQUNLICAgICAgICAgICAgICAgICAgICAgICAgPSAweDMKLX07Ci0K LXN0cnVjdCBoaWZfY25mX3R4IHsKLQlfX2xlMzIgc3RhdHVzOwotCS8qIHBhY2tldF9pZCBpcyBj b3BpZWQgZnJvbSBzdHJ1Y3QgaGlmX3JlcV90eCB3aXRob3V0IGJlZW4gaW50ZXJwcmV0ZWQKLQkg KiBieSB0aGUgZGV2aWNlLCBzbyBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGRlY2xhcmUgaXQgbGl0 dGxlIGVuZGlhbgotCSAqLwotCXUzMiAgICBwYWNrZXRfaWQ7Ci0JdTggICAgIHR4ZWRfcmF0ZTsK LQl1OCAgICAgYWNrX2ZhaWx1cmVzOwotCXU4ICAgICBhZ2dyOjE7Ci0JdTggICAgIHJlcXVldWU6 MTsKLQl1OCAgICAgYWNrX3BvbGljeToyOwotCXU4ICAgICB0eG9wX2xpbWl0OjE7Ci0JdTggICAg IHJlc2VydmVkMTozOwotCXU4ICAgICByZXNlcnZlZDI7Ci0JX19sZTMyIG1lZGlhX2RlbGF5Owot CV9fbGUzMiB0eF9xdWV1ZV9kZWxheTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfY25mX211 bHRpX3RyYW5zbWl0IHsKLQl1OCAgICAgbnVtX3R4X2NvbmZzOwotCXU4ICAgICByZXNlcnZlZFsz XTsKLQlzdHJ1Y3QgaGlmX2NuZl90eCB0eF9jb25mX3BheWxvYWRbXTsKLX0gX19wYWNrZWQ7Ci0K LWVudW0gaGlmX3JpX2ZsYWdzX2VuY3J5cHQgewotCUhJRl9SSV9GTEFHU19VTkVOQ1JZUFRFRCAg ICAgICAgICAgICAgICAgICA9IDB4MCwKLQlISUZfUklfRkxBR1NfV0VQX0VOQ1JZUFRFRCAgICAg ICAgICAgICAgICAgPSAweDEsCi0JSElGX1JJX0ZMQUdTX1RLSVBfRU5DUllQVEVEICAgICAgICAg ICAgICAgID0gMHgyLAotCUhJRl9SSV9GTEFHU19BRVNfRU5DUllQVEVEICAgICAgICAgICAgICAg ICA9IDB4MywKLQlISUZfUklfRkxBR1NfV0FQSV9FTkNSWVBURUQgICAgICAgICAgICAgICAgPSAw eDQKLX07Ci0KLXN0cnVjdCBoaWZfaW5kX3J4IHsKLQlfX2xlMzIgc3RhdHVzOwotCXU4ICAgICBj aGFubmVsX251bWJlcjsKLQl1OCAgICAgcmVzZXJ2ZWQxOwotCXU4ICAgICByeGVkX3JhdGU7Ci0J dTggICAgIHJjcGlfcnNzaTsKLQl1OCAgICAgZW5jcnlwOjM7Ci0JdTggICAgIGluX2FnZ3I6MTsK LQl1OCAgICAgZmlyc3RfYWdncjoxOwotCXU4ICAgICBsYXN0X2FnZ3I6MTsKLQl1OCAgICAgZGVm cmFnOjE7Ci0JdTggICAgIGJlYWNvbjoxOwotCXU4ICAgICB0aW06MTsKLQl1OCAgICAgYml0bWFw OjE7Ci0JdTggICAgIG1hdGNoX3NzaWQ6MTsKLQl1OCAgICAgbWF0Y2hfYnNzaWQ6MTsKLQl1OCAg ICAgbW9yZToxOwotCXU4ICAgICByZXNlcnZlZDI6MTsKLQl1OCAgICAgaHQ6MTsKLQl1OCAgICAg c3RiYzoxOwotCXU4ICAgICBtYXRjaF91Y19hZGRyOjE7Ci0JdTggICAgIG1hdGNoX21jX2FkZHI6 MTsKLQl1OCAgICAgbWF0Y2hfYmNfYWRkcjoxOwotCXU4ICAgICBrZXlfdHlwZToxOwotCXU4ICAg ICBrZXlfaW5kZXg6NDsKLQl1OCAgICAgcmVzZXJ2ZWQzOjE7Ci0JdTggICAgIHBlZXJfc3RhX2lk OjQ7Ci0JdTggICAgIHJlc2VydmVkNDoyOwotCXU4ICAgICByZXNlcnZlZDU6MTsKLQl1OCAgICAg ZnJhbWVbXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfcmVxX2VkY2FfcXVldWVfcGFyYW1z IHsKLQl1OCAgICAgcXVldWVfaWQ7Ci0JdTggICAgIHJlc2VydmVkMTsKLQl1OCAgICAgYWlmc247 Ci0JdTggICAgIHJlc2VydmVkMjsKLQlfX2xlMTYgY3dfbWluOwotCV9fbGUxNiBjd19tYXg7Ci0J X19sZTE2IHR4X29wX2xpbWl0OwotCV9fbGUxNiBhbGxvd2VkX21lZGl1bV90aW1lOwotCV9fbGUz MiByZXNlcnZlZDM7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX2NuZl9lZGNhX3F1ZXVlX3Bh cmFtcyB7Ci0JX19sZTMyIHN0YXR1czsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfcmVxX2pv aW4gewotCXU4ICAgICBpbmZyYXN0cnVjdHVyZV9ic3NfbW9kZToxOwotCXU4ICAgICByZXNlcnZl ZDE6NzsKLQl1OCAgICAgYmFuZDsKLQl1OCAgICAgY2hhbm5lbF9udW1iZXI7Ci0JdTggICAgIHJl c2VydmVkMjsKLQl1OCAgICAgYnNzaWRbRVRIX0FMRU5dOwotCV9fbGUxNiBhdGltX3dpbmRvdzsK LQl1OCAgICAgc2hvcnRfcHJlYW1ibGU6MTsKLQl1OCAgICAgcmVzZXJ2ZWQzOjc7Ci0JdTggICAg IHByb2JlX2Zvcl9qb2luOwotCXU4ICAgICByZXNlcnZlZDQ7Ci0JdTggICAgIHJlc2VydmVkNToy OwotCXU4ICAgICBmb3JjZV9ub19iZWFjb246MTsKLQl1OCAgICAgZm9yY2Vfd2l0aF9pbmQ6MTsK LQl1OCAgICAgcmVzZXJ2ZWQ2OjQ7Ci0JX19sZTMyIHNzaWRfbGVuZ3RoOwotCXU4ICAgICBzc2lk W0lFRUU4MDIxMV9NQVhfU1NJRF9MRU5dOwotCV9fbGUzMiBiZWFjb25faW50ZXJ2YWw7Ci0JX19s ZTMyIGJhc2ljX3JhdGVfc2V0OwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9jbmZfam9pbiB7 Ci0JX19sZTMyIHN0YXR1czsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfaW5kX2pvaW5fY29t cGxldGUgewotCV9fbGUzMiBzdGF0dXM7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX3JlcV9z ZXRfYnNzX3BhcmFtcyB7Ci0JdTggICAgIGxvc3RfY291bnRfb25seToxOwotCXU4ICAgICByZXNl cnZlZDo3OwotCXU4ICAgICBiZWFjb25fbG9zdF9jb3VudDsKLQlfX2xlMTYgYWlkOwotCV9fbGUz MiBvcGVyYXRpb25hbF9yYXRlX3NldDsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfY25mX3Nl dF9ic3NfcGFyYW1zIHsKLQlfX2xlMzIgc3RhdHVzOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhp Zl9yZXFfc2V0X3BtX21vZGUgewotCXU4ICAgICBlbnRlcl9wc206MTsKLQl1OCAgICAgcmVzZXJ2 ZWQ6NjsKLQl1OCAgICAgZmFzdF9wc206MTsKLQl1OCAgICAgZmFzdF9wc21faWRsZV9wZXJpb2Q7 Ci0JdTggICAgIGFwX3BzbV9jaGFuZ2VfcGVyaW9kOwotCXU4ICAgICBtaW5fYXV0b19wc19wb2xs X3BlcmlvZDsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfY25mX3NldF9wbV9tb2RlIHsKLQlf X2xlMzIgc3RhdHVzOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9pbmRfc2V0X3BtX21vZGVf Y21wbCB7Ci0JX19sZTMyIHN0YXR1czsKLQl1OCAgICAgcG1fbW9kZTsKLQl1OCAgICAgcmVzZXJ2 ZWRbM107Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX3JlcV9zdGFydCB7Ci0JdTggICAgIG1v ZGU7Ci0JdTggICAgIGJhbmQ7Ci0JdTggICAgIGNoYW5uZWxfbnVtYmVyOwotCXU4ICAgICByZXNl cnZlZDE7Ci0JX19sZTMyIHJlc2VydmVkMjsKLQlfX2xlMzIgYmVhY29uX2ludGVydmFsOwotCXU4 ICAgICBkdGltX3BlcmlvZDsKLQl1OCAgICAgc2hvcnRfcHJlYW1ibGU6MTsKLQl1OCAgICAgcmVz ZXJ2ZWQzOjc7Ci0JdTggICAgIHJlc2VydmVkNDsKLQl1OCAgICAgc3NpZF9sZW5ndGg7Ci0JdTgg ICAgIHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07Ci0JX19sZTMyIGJhc2ljX3JhdGVfc2V0 OwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9jbmZfc3RhcnQgewotCV9fbGUzMiBzdGF0dXM7 Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX3JlcV9iZWFjb25fdHJhbnNtaXQgewotCXU4ICAg ICBlbmFibGVfYmVhY29uaW5nOwotCXU4ICAgICByZXNlcnZlZFszXTsKLX0gX19wYWNrZWQ7Ci0K LXN0cnVjdCBoaWZfY25mX2JlYWNvbl90cmFuc21pdCB7Ci0JX19sZTMyIHN0YXR1czsKLX0gX19w YWNrZWQ7Ci0KLSNkZWZpbmUgSElGX0xJTktfSURfTUFYICAgICAgICAgICAgMTQKLSNkZWZpbmUg SElGX0xJTktfSURfTk9UX0FTU09DSUFURUQgKEhJRl9MSU5LX0lEX01BWCArIDEpCi0KLXN0cnVj dCBoaWZfcmVxX21hcF9saW5rIHsKLQl1OCAgICAgbWFjX2FkZHJbRVRIX0FMRU5dOwotCXU4ICAg ICB1bm1hcDoxOwotCXU4ICAgICBtZnBjOjE7Ci0JdTggICAgIHJlc2VydmVkOjY7Ci0JdTggICAg IHBlZXJfc3RhX2lkOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9jbmZfbWFwX2xpbmsgewot CV9fbGUzMiBzdGF0dXM7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX2luZF9zdXNwZW5kX3Jl c3VtZV90eCB7Ci0JdTggICAgIHJlc3VtZToxOwotCXU4ICAgICByZXNlcnZlZDE6MjsKLQl1OCAg ICAgYmNfbWNfb25seToxOwotCXU4ICAgICByZXNlcnZlZDI6NDsKLQl1OCAgICAgcmVzZXJ2ZWQz OwotCV9fbGUxNiBwZWVyX3N0YV9zZXQ7Ci19IF9fcGFja2VkOwotCi0KLSNkZWZpbmUgTUFYX0tF WV9FTlRSSUVTICAgICAgICAgMjQKLSNkZWZpbmUgSElGX0FQSV9XRVBfS0VZX0RBVEFfU0laRSAg ICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgSElGX0FQSV9US0lQX0tFWV9EQVRBX1NJ WkUgICAgICAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgSElGX0FQSV9SWF9NSUNfS0VZX1NJ WkUgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBISUZfQVBJX1RYX01JQ19LRVlf U0laRSAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIEhJRl9BUElfQUVTX0tFWV9E QVRBX1NJWkUgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIEhJRl9BUElfV0FQSV9L RVlfREFUQV9TSVpFICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIEhJRl9BUElfTUlD X0tFWV9EQVRBX1NJWkUgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIEhJRl9BUElf SUdUS19LRVlfREFUQV9TSVpFICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIEhJRl9B UElfUlhfU0VRVUVOQ0VfQ09VTlRFUl9TSVpFICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgSElG X0FQSV9JUE5fU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAotCi1lbnVtIGhp Zl9rZXlfdHlwZSB7Ci0JSElGX0tFWV9UWVBFX1dFUF9ERUZBVUxUICAgICAgICAgICAgICAgICAg ID0gMHgwLAotCUhJRl9LRVlfVFlQRV9XRVBfUEFJUldJU0UgICAgICAgICAgICAgICAgICA9IDB4 MSwKLQlISUZfS0VZX1RZUEVfVEtJUF9HUk9VUCAgICAgICAgICAgICAgICAgICAgPSAweDIsCi0J SElGX0tFWV9UWVBFX1RLSVBfUEFJUldJU0UgICAgICAgICAgICAgICAgID0gMHgzLAotCUhJRl9L RVlfVFlQRV9BRVNfR1JPVVAgICAgICAgICAgICAgICAgICAgICA9IDB4NCwKLQlISUZfS0VZX1RZ UEVfQUVTX1BBSVJXSVNFICAgICAgICAgICAgICAgICAgPSAweDUsCi0JSElGX0tFWV9UWVBFX1dB UElfR1JPVVAgICAgICAgICAgICAgICAgICAgID0gMHg2LAotCUhJRl9LRVlfVFlQRV9XQVBJX1BB SVJXSVNFICAgICAgICAgICAgICAgICA9IDB4NywKLQlISUZfS0VZX1RZUEVfSUdUS19HUk9VUCAg ICAgICAgICAgICAgICAgICAgPSAweDgsCi0JSElGX0tFWV9UWVBFX05PTkUgICAgICAgICAgICAg ICAgICAgICAgICAgID0gMHg5Ci19OwotCi1zdHJ1Y3QgaGlmX3dlcF9wYWlyd2lzZV9rZXkgewot CXU4ICAgICBwZWVyX2FkZHJlc3NbRVRIX0FMRU5dOwotCXU4ICAgICByZXNlcnZlZDsKLQl1OCAg ICAga2V5X2xlbmd0aDsKLQl1OCAgICAga2V5X2RhdGFbSElGX0FQSV9XRVBfS0VZX0RBVEFfU0la RV07Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX3dlcF9ncm91cF9rZXkgewotCXU4ICAgICBr ZXlfaWQ7Ci0JdTggICAgIGtleV9sZW5ndGg7Ci0JdTggICAgIHJlc2VydmVkWzJdOwotCXU4ICAg ICBrZXlfZGF0YVtISUZfQVBJX1dFUF9LRVlfREFUQV9TSVpFXTsKLX0gX19wYWNrZWQ7Ci0KLXN0 cnVjdCBoaWZfdGtpcF9wYWlyd2lzZV9rZXkgewotCXU4ICAgICBwZWVyX2FkZHJlc3NbRVRIX0FM RU5dOwotCXU4ICAgICByZXNlcnZlZFsyXTsKLQl1OCAgICAgdGtpcF9rZXlfZGF0YVtISUZfQVBJ X1RLSVBfS0VZX0RBVEFfU0laRV07Ci0JdTggICAgIHJ4X21pY19rZXlbSElGX0FQSV9SWF9NSUNf S0VZX1NJWkVdOwotCXU4ICAgICB0eF9taWNfa2V5W0hJRl9BUElfVFhfTUlDX0tFWV9TSVpFXTsK LX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfdGtpcF9ncm91cF9rZXkgewotCXU4ICAgICB0a2lw X2tleV9kYXRhW0hJRl9BUElfVEtJUF9LRVlfREFUQV9TSVpFXTsKLQl1OCAgICAgcnhfbWljX2tl eVtISUZfQVBJX1JYX01JQ19LRVlfU0laRV07Ci0JdTggICAgIGtleV9pZDsKLQl1OCAgICAgcmVz ZXJ2ZWRbM107Ci0JdTggICAgIHJ4X3NlcXVlbmNlX2NvdW50ZXJbSElGX0FQSV9SWF9TRVFVRU5D RV9DT1VOVEVSX1NJWkVdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9hZXNfcGFpcndpc2Vf a2V5IHsKLQl1OCAgICAgcGVlcl9hZGRyZXNzW0VUSF9BTEVOXTsKLQl1OCAgICAgcmVzZXJ2ZWRb Ml07Ci0JdTggICAgIGFlc19rZXlfZGF0YVtISUZfQVBJX0FFU19LRVlfREFUQV9TSVpFXTsKLX0g X19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfYWVzX2dyb3VwX2tleSB7Ci0JdTggICAgIGFlc19rZXlf ZGF0YVtISUZfQVBJX0FFU19LRVlfREFUQV9TSVpFXTsKLQl1OCAgICAga2V5X2lkOwotCXU4ICAg ICByZXNlcnZlZFszXTsKLQl1OCAgICAgcnhfc2VxdWVuY2VfY291bnRlcltISUZfQVBJX1JYX1NF UVVFTkNFX0NPVU5URVJfU0laRV07Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX3dhcGlfcGFp cndpc2Vfa2V5IHsKLQl1OCAgICAgcGVlcl9hZGRyZXNzW0VUSF9BTEVOXTsKLQl1OCAgICAga2V5 X2lkOwotCXU4ICAgICByZXNlcnZlZDsKLQl1OCAgICAgd2FwaV9rZXlfZGF0YVtISUZfQVBJX1dB UElfS0VZX0RBVEFfU0laRV07Ci0JdTggICAgIG1pY19rZXlfZGF0YVtISUZfQVBJX01JQ19LRVlf REFUQV9TSVpFXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfd2FwaV9ncm91cF9rZXkgewot CXU4ICAgICB3YXBpX2tleV9kYXRhW0hJRl9BUElfV0FQSV9LRVlfREFUQV9TSVpFXTsKLQl1OCAg ICAgbWljX2tleV9kYXRhW0hJRl9BUElfTUlDX0tFWV9EQVRBX1NJWkVdOwotCXU4ICAgICBrZXlf aWQ7Ci0JdTggICAgIHJlc2VydmVkWzNdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9pZ3Rr X2dyb3VwX2tleSB7Ci0JdTggICAgIGlndGtfa2V5X2RhdGFbSElGX0FQSV9JR1RLX0tFWV9EQVRB X1NJWkVdOwotCXU4ICAgICBrZXlfaWQ7Ci0JdTggICAgIHJlc2VydmVkWzNdOwotCXU4ICAgICBp cG5bSElGX0FQSV9JUE5fU0laRV07Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX3JlcV9hZGRf a2V5IHsKLQl1OCAgICAgdHlwZTsKLQl1OCAgICAgZW50cnlfaW5kZXg7Ci0JdTggICAgIGludF9p ZDoyOwotCXU4ICAgICByZXNlcnZlZDE6NjsKLQl1OCAgICAgcmVzZXJ2ZWQyOwotCXVuaW9uIHsK LQkJc3RydWN0IGhpZl93ZXBfcGFpcndpc2Vfa2V5ICB3ZXBfcGFpcndpc2Vfa2V5OwotCQlzdHJ1 Y3QgaGlmX3dlcF9ncm91cF9rZXkgICAgIHdlcF9ncm91cF9rZXk7Ci0JCXN0cnVjdCBoaWZfdGtp cF9wYWlyd2lzZV9rZXkgdGtpcF9wYWlyd2lzZV9rZXk7Ci0JCXN0cnVjdCBoaWZfdGtpcF9ncm91 cF9rZXkgICAgdGtpcF9ncm91cF9rZXk7Ci0JCXN0cnVjdCBoaWZfYWVzX3BhaXJ3aXNlX2tleSAg YWVzX3BhaXJ3aXNlX2tleTsKLQkJc3RydWN0IGhpZl9hZXNfZ3JvdXBfa2V5ICAgICBhZXNfZ3Jv dXBfa2V5OwotCQlzdHJ1Y3QgaGlmX3dhcGlfcGFpcndpc2Vfa2V5IHdhcGlfcGFpcndpc2Vfa2V5 OwotCQlzdHJ1Y3QgaGlmX3dhcGlfZ3JvdXBfa2V5ICAgIHdhcGlfZ3JvdXBfa2V5OwotCQlzdHJ1 Y3QgaGlmX2lndGtfZ3JvdXBfa2V5ICAgIGlndGtfZ3JvdXBfa2V5OwotCX0ga2V5OwotfSBfX3Bh Y2tlZDsKLQotc3RydWN0IGhpZl9jbmZfYWRkX2tleSB7Ci0JX19sZTMyIHN0YXR1czsKLX0gX19w YWNrZWQ7Ci0KLXN0cnVjdCBoaWZfcmVxX3JlbW92ZV9rZXkgewotCXU4ICAgICBlbnRyeV9pbmRl eDsKLQl1OCAgICAgcmVzZXJ2ZWRbM107Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX2NuZl9y ZW1vdmVfa2V5IHsKLQlfX2xlMzIgc3RhdHVzOwotfSBfX3BhY2tlZDsKLQotZW51bSBoaWZfZXZl bnRfaW5kIHsKLQlISUZfRVZFTlRfSU5EX0JTU0xPU1QgICAgICAgICAgICAgICAgICAgICAgPSAw eDEsCi0JSElGX0VWRU5UX0lORF9CU1NSRUdBSU5FRCAgICAgICAgICAgICAgICAgID0gMHgyLAot CUhJRl9FVkVOVF9JTkRfUkNQSV9SU1NJICAgICAgICAgICAgICAgICAgICA9IDB4MywKLQlISUZf RVZFTlRfSU5EX1BTX01PREVfRVJST1IgICAgICAgICAgICAgICAgPSAweDQsCi0JSElGX0VWRU5U X0lORF9JTkFDVElWSVRZICAgICAgICAgICAgICAgICAgID0gMHg1Ci19OwotCi1lbnVtIGhpZl9w c19tb2RlX2Vycm9yIHsKLQlISUZfUFNfRVJST1JfTk9fRVJST1IgICAgICAgICAgICAgICAgICAg ICAgPSAwLAotCUhJRl9QU19FUlJPUl9BUF9OT1RfUkVTUF9UT19QT0xMICAgICAgICAgICA9IDEs Ci0JSElGX1BTX0VSUk9SX0FQX05PVF9SRVNQX1RPX1VBUFNEX1RSSUdHRVIgID0gMiwKLQlISUZf UFNfRVJST1JfQVBfU0VOVF9VTklDQVNUX0lOX0RPWkUgICAgICAgPSAzLAotCUhJRl9QU19FUlJP Ul9BUF9OT19EQVRBX0FGVEVSX1RJTSAgICAgICAgICA9IDQKLX07Ci0KLXN0cnVjdCBoaWZfaW5k X2V2ZW50IHsKLQlfX2xlMzIgZXZlbnRfaWQ7Ci0JdW5pb24gewotCQl1OCAgICAgcmNwaV9yc3Np OwotCQlfX2xlMzIgcHNfbW9kZV9lcnJvcjsKLQkJX19sZTMyIHBlZXJfc3RhX3NldDsKLQl9IGV2 ZW50X2RhdGE7Ci19IF9fcGFja2VkOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3Rh Z2luZy93ZngvaGlmX2FwaV9nZW5lcmFsLmggYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl9hcGlf Z2VuZXJhbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Zjc0ZjgyOWI3ZGYuLjAw MDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl9hcGlfZ2VuZXJhbC5oCisr KyAvZGV2L251bGwKQEAgLTEsMjYyICswLDAgQEAKLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBBcGFjaGUtMi4wICovCi0vKgotICogV0YyMDAgaGFyZHdhcmUgaW50ZXJmYWNlIGRlZmluaXRp b25zCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMjAsIFNpbGljb24gTGFib3JhdG9yaWVz IEluYy4KLSAqLwotCi0jaWZuZGVmIFdGWF9ISUZfQVBJX0dFTkVSQUxfSAotI2RlZmluZSBXRlhf SElGX0FQSV9HRU5FUkFMX0gKLQotI2lmZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxsaW51eC90 eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+Ci0jZWxzZQotI2luY2x1ZGUgPG5l dC9ldGhlcm5ldC5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2RlZmluZSBfX3BhY2tlZCBfX2F0 dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSkKLSNlbmRpZgotCi0jZGVmaW5lIEhJRl9JRF9JU19JTkRJ Q0FUSU9OICAgICAgMHg4MAotI2RlZmluZSBISUZfQ09VTlRFUl9NQVggICAgICAgICAgIDcKLQot c3RydWN0IGhpZl9tc2cgewotCV9fbGUxNiBsZW47Ci0JdTggICAgIGlkOwotCXU4ICAgICByZXNl cnZlZDoxOwotCXU4ICAgICBpbnRlcmZhY2U6MjsKLQl1OCAgICAgc2VxbnVtOjM7Ci0JdTggICAg IGVuY3J5cHRlZDoyOwotCXU4ICAgICBib2R5W107Ci19IF9fcGFja2VkOwotCi1lbnVtIGhpZl9n ZW5lcmFsX3JlcXVlc3RzX2lkcyB7Ci0JSElGX1JFUV9JRF9DT05GSUdVUkFUSU9OICAgICAgICA9 IDB4MDksCi0JSElGX1JFUV9JRF9DT05UUk9MX0dQSU8gICAgICAgICA9IDB4MjYsCi0JSElGX1JF UV9JRF9TRVRfU0xfTUFDX0tFWSAgICAgICA9IDB4MjcsCi0JSElGX1JFUV9JRF9TTF9FWENIQU5H RV9QVUJfS0VZUyA9IDB4MjgsCi0JSElGX1JFUV9JRF9TTF9DT05GSUdVUkUgICAgICAgICA9IDB4 MjksCi0JSElGX1JFUV9JRF9QUkVWRU5UX1JPTExCQUNLICAgICA9IDB4MmEsCi0JSElGX1JFUV9J RF9QVEFfU0VUVElOR1MgICAgICAgICA9IDB4MmIsCi0JSElGX1JFUV9JRF9QVEFfUFJJT1JJVFkg ICAgICAgICA9IDB4MmMsCi0JSElGX1JFUV9JRF9QVEFfU1RBVEUgICAgICAgICAgICA9IDB4MmQs Ci0JSElGX1JFUV9JRF9TSFVUX0RPV04gICAgICAgICAgICA9IDB4MzIsCi19OwotCi1lbnVtIGhp Zl9nZW5lcmFsX2NvbmZpcm1hdGlvbnNfaWRzIHsKLQlISUZfQ05GX0lEX0NPTkZJR1VSQVRJT04g ICAgICAgID0gMHgwOSwKLQlISUZfQ05GX0lEX0NPTlRST0xfR1BJTyAgICAgICAgID0gMHgyNiwK LQlISUZfQ05GX0lEX1NFVF9TTF9NQUNfS0VZICAgICAgID0gMHgyNywKLQlISUZfQ05GX0lEX1NM X0VYQ0hBTkdFX1BVQl9LRVlTID0gMHgyOCwKLQlISUZfQ05GX0lEX1NMX0NPTkZJR1VSRSAgICAg ICAgID0gMHgyOSwKLQlISUZfQ05GX0lEX1BSRVZFTlRfUk9MTEJBQ0sgICAgID0gMHgyYSwKLQlI SUZfQ05GX0lEX1BUQV9TRVRUSU5HUyAgICAgICAgID0gMHgyYiwKLQlISUZfQ05GX0lEX1BUQV9Q UklPUklUWSAgICAgICAgID0gMHgyYywKLQlISUZfQ05GX0lEX1BUQV9TVEFURSAgICAgICAgICAg ID0gMHgyZCwKLQlISUZfQ05GX0lEX1NIVVRfRE9XTiAgICAgICAgICAgID0gMHgzMiwKLX07Ci0K LWVudW0gaGlmX2dlbmVyYWxfaW5kaWNhdGlvbnNfaWRzIHsKLQlISUZfSU5EX0lEX0VYQ0VQVElP TiAgICAgICAgICAgID0gMHhlMCwKLQlISUZfSU5EX0lEX1NUQVJUVVAgICAgICAgICAgICAgID0g MHhlMSwKLQlISUZfSU5EX0lEX1dBS0VVUCAgICAgICAgICAgICAgID0gMHhlMiwKLQlISUZfSU5E X0lEX0dFTkVSSUMgICAgICAgICAgICAgID0gMHhlMywKLQlISUZfSU5EX0lEX0VSUk9SICAgICAg ICAgICAgICAgID0gMHhlNCwKLQlISUZfSU5EX0lEX1NMX0VYQ0hBTkdFX1BVQl9LRVlTID0gMHhl NQotfTsKLQotI2RlZmluZSBISUZfU1RBVFVTX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICAg ICAgKGNwdV90b19sZTMyKDB4MDAwMCkpCi0jZGVmaW5lIEhJRl9TVEFUVVNfRkFJTCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoY3B1X3RvX2xlMzIoMHgwMDAxKSkKLSNkZWZpbmUgSElGX1NU QVRVU19JTlZBTElEX1BBUkFNRVRFUiAgICAgICAgICAgICAgIChjcHVfdG9fbGUzMigweDAwMDIp KQotI2RlZmluZSBISUZfU1RBVFVTX1dBUk5JTkcgICAgICAgICAgICAgICAgICAgICAgICAgKGNw dV90b19sZTMyKDB4MDAwMykpCi0jZGVmaW5lIEhJRl9TVEFUVVNfVU5LTk9XTl9SRVFVRVNUICAg ICAgICAgICAgICAgICAoY3B1X3RvX2xlMzIoMHgwMDA0KSkKLSNkZWZpbmUgSElGX1NUQVRVU19S WF9GQUlMX0RFQ1JZUFQgICAgICAgICAgICAgICAgIChjcHVfdG9fbGUzMigweDAwMTApKQotI2Rl ZmluZSBISUZfU1RBVFVTX1JYX0ZBSUxfTUlDICAgICAgICAgICAgICAgICAgICAgKGNwdV90b19s ZTMyKDB4MDAxMSkpCi0jZGVmaW5lIEhJRl9TVEFUVVNfUlhfRkFJTF9OT19LRVkgICAgICAgICAg ICAgICAgICAoY3B1X3RvX2xlMzIoMHgwMDEyKSkKLSNkZWZpbmUgSElGX1NUQVRVU19UWF9GQUlM X1JFVFJJRVMgICAgICAgICAgICAgICAgIChjcHVfdG9fbGUzMigweDAwMTMpKQotI2RlZmluZSBI SUZfU1RBVFVTX1RYX0ZBSUxfVElNRU9VVCAgICAgICAgICAgICAgICAgKGNwdV90b19sZTMyKDB4 MDAxNCkpCi0jZGVmaW5lIEhJRl9TVEFUVVNfVFhfRkFJTF9SRVFVRVVFICAgICAgICAgICAgICAg ICAoY3B1X3RvX2xlMzIoMHgwMDE1KSkKLSNkZWZpbmUgSElGX1NUQVRVU19SRUZVU0VEICAgICAg ICAgICAgICAgICAgICAgICAgIChjcHVfdG9fbGUzMigweDAwMTYpKQotI2RlZmluZSBISUZfU1RB VFVTX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNwdV90b19sZTMyKDB4MDAxNykp Ci0jZGVmaW5lIEhJRl9TVEFUVVNfU0xLX1NFVF9LRVlfU1VDQ0VTUyAgICAgICAgICAgICAoY3B1 X3RvX2xlMzIoMHgwMDVBKSkKLSNkZWZpbmUgSElGX1NUQVRVU19TTEtfU0VUX0tFWV9BTFJFQURZ X0JVUk5FRCAgICAgIChjcHVfdG9fbGUzMigweDAwNkIpKQotI2RlZmluZSBISUZfU1RBVFVTX1NM S19TRVRfS0VZX0RJU0FMTE9XRURfTU9ERSAgICAgKGNwdV90b19sZTMyKDB4MDA3QykpCi0jZGVm aW5lIEhJRl9TVEFUVVNfU0xLX1NFVF9LRVlfVU5LTk9XTl9NT0RFICAgICAgICAoY3B1X3RvX2xl MzIoMHgwMDhEKSkKLSNkZWZpbmUgSElGX1NUQVRVU19TTEtfTkVHT19TVUNDRVNTICAgICAgICAg ICAgICAgIChjcHVfdG9fbGUzMigweDAwOUUpKQotI2RlZmluZSBISUZfU1RBVFVTX1NMS19ORUdP X0ZBSUxFRCAgICAgICAgICAgICAgICAgKGNwdV90b19sZTMyKDB4MDBBRikpCi0jZGVmaW5lIEhJ Rl9TVEFUVVNfUk9MTEJBQ0tfU1VDQ0VTUyAgICAgICAgICAgICAgICAoY3B1X3RvX2xlMzIoMHgx MjM0KSkKLSNkZWZpbmUgSElGX1NUQVRVU19ST0xMQkFDS19GQUlMICAgICAgICAgICAgICAgICAg IChjcHVfdG9fbGUzMigweDEyNTYpKQotCi1lbnVtIGhpZl9hcGlfcmF0ZV9pbmRleCB7Ci0JQVBJ X1JBVEVfSU5ERVhfQl8xTUJQUyAgICAgPSAwLAotCUFQSV9SQVRFX0lOREVYX0JfMk1CUFMgICAg ID0gMSwKLQlBUElfUkFURV9JTkRFWF9CXzVQNU1CUFMgICA9IDIsCi0JQVBJX1JBVEVfSU5ERVhf Ql8xMU1CUFMgICAgPSAzLAotCUFQSV9SQVRFX0lOREVYX1BCQ0NfMjJNQlBTID0gNCwKLQlBUElf UkFURV9JTkRFWF9QQkNDXzMzTUJQUyA9IDUsCi0JQVBJX1JBVEVfSU5ERVhfR182TUJQUyAgICAg PSA2LAotCUFQSV9SQVRFX0lOREVYX0dfOU1CUFMgICAgID0gNywKLQlBUElfUkFURV9JTkRFWF9H XzEyTUJQUyAgICA9IDgsCi0JQVBJX1JBVEVfSU5ERVhfR18xOE1CUFMgICAgPSA5LAotCUFQSV9S QVRFX0lOREVYX0dfMjRNQlBTICAgID0gMTAsCi0JQVBJX1JBVEVfSU5ERVhfR18zNk1CUFMgICAg PSAxMSwKLQlBUElfUkFURV9JTkRFWF9HXzQ4TUJQUyAgICA9IDEyLAotCUFQSV9SQVRFX0lOREVY X0dfNTRNQlBTICAgID0gMTMsCi0JQVBJX1JBVEVfSU5ERVhfTl82UDVNQlBTICAgPSAxNCwKLQlB UElfUkFURV9JTkRFWF9OXzEzTUJQUyAgICA9IDE1LAotCUFQSV9SQVRFX0lOREVYX05fMTlQNU1C UFMgID0gMTYsCi0JQVBJX1JBVEVfSU5ERVhfTl8yNk1CUFMgICAgPSAxNywKLQlBUElfUkFURV9J TkRFWF9OXzM5TUJQUyAgICA9IDE4LAotCUFQSV9SQVRFX0lOREVYX05fNTJNQlBTICAgID0gMTks Ci0JQVBJX1JBVEVfSU5ERVhfTl81OFA1TUJQUyAgPSAyMCwKLQlBUElfUkFURV9JTkRFWF9OXzY1 TUJQUyAgICA9IDIxLAotCUFQSV9SQVRFX05VTV9FTlRSSUVTICAgICAgID0gMjIKLX07Ci0KLXN0 cnVjdCBoaWZfaW5kX3N0YXJ0dXAgewotCS8qIEFzIHRoZSBvdGhlcnMsIHRoaXMgc3RydWN0IGlz IGludGVycHJldGVkIGFzIGxpdHRsZSBlbmRpYW4gYnkgdGhlCi0JICogZGV2aWNlLiBIb3dldmVy LCB0aGlzIHN0cnVjdCBpcyBhbHNvIHVzZWQgYnkgdGhlIGRyaXZlci4gV2UgcHJlZmVyIHRvCi0J ICogZGVjbGFyZSBpdCBpbiBuYXRpdmUgb3JkZXIgYW5kIGRvaW5nIGJ5dGUgc3dhcCBvbiByZWNl cHRpb24uCi0JICovCi0JX19sZTMyIHN0YXR1czsKLQl1MTYgICAgaGFyZHdhcmVfaWQ7Ci0JdTgg ICAgIG9wblsxNF07Ci0JdTggICAgIHVpZFs4XTsKLQl1MTYgICAgbnVtX2lucF9jaF9idWZzOwot CXUxNiAgICBzaXplX2lucF9jaF9idWY7Ci0JdTggICAgIG51bV9saW5rc19hcDsKLQl1OCAgICAg bnVtX2ludGVyZmFjZXM7Ci0JdTggICAgIG1hY19hZGRyWzJdW0VUSF9BTEVOXTsKLQl1OCAgICAg YXBpX3ZlcnNpb25fbWlub3I7Ci0JdTggICAgIGFwaV92ZXJzaW9uX21ham9yOwotCXU4ICAgICBs aW5rX21vZGU6MjsKLQl1OCAgICAgcmVzZXJ2ZWQxOjY7Ci0JdTggICAgIHJlc2VydmVkMjsKLQl1 OCAgICAgcmVzZXJ2ZWQzOwotCXU4ICAgICByZXNlcnZlZDQ7Ci0JdTggICAgIGZpcm13YXJlX2J1 aWxkOwotCXU4ICAgICBmaXJtd2FyZV9taW5vcjsKLQl1OCAgICAgZmlybXdhcmVfbWFqb3I7Ci0J dTggICAgIGZpcm13YXJlX3R5cGU7Ci0JdTggICAgIGRpc2FibGVkX2NoYW5uZWxfbGlzdFsyXTsK LQl1OCAgICAgcmVnaW9uX3NlbF9tb2RlOjQ7Ci0JdTggICAgIHJlc2VydmVkNTo0OwotCXU4ICAg ICBwaHkxX3JlZ2lvbjozOwotCXU4ICAgICBwaHkwX3JlZ2lvbjozOwotCXU4ICAgICBvdHBfcGh5 X3ZlcjoyOwotCXUzMiAgICBzdXBwb3J0ZWRfcmF0ZV9tYXNrOwotCXU4ICAgICBmaXJtd2FyZV9s YWJlbFsxMjhdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9pbmRfd2FrZXVwIHsKLX0gX19w YWNrZWQ7Ci0KLXN0cnVjdCBoaWZfcmVxX2NvbmZpZ3VyYXRpb24gewotCV9fbGUxNiBsZW5ndGg7 Ci0JdTggICAgIHBkc19kYXRhW107Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX2NuZl9jb25m aWd1cmF0aW9uIHsKLQlfX2xlMzIgc3RhdHVzOwotfSBfX3BhY2tlZDsKLQotZW51bSBoaWZfZ3Bp b19tb2RlIHsKLQlISUZfR1BJT19NT0RFX0QwICAgICAgID0gMHgwLAotCUhJRl9HUElPX01PREVf RDEgICAgICAgPSAweDEsCi0JSElGX0dQSU9fTU9ERV9PRDAgICAgICA9IDB4MiwKLQlISUZfR1BJ T19NT0RFX09EMSAgICAgID0gMHgzLAotCUhJRl9HUElPX01PREVfVFJJU1RBVEUgPSAweDQsCi0J SElGX0dQSU9fTU9ERV9UT0dHTEUgICA9IDB4NSwKLQlISUZfR1BJT19NT0RFX1JFQUQgICAgID0g MHg2Ci19OwotCi1zdHJ1Y3QgaGlmX3JlcV9jb250cm9sX2dwaW8gewotCXU4ICAgICBncGlvX2xh YmVsOwotCXU4ICAgICBncGlvX21vZGU7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX2NuZl9j b250cm9sX2dwaW8gewotCV9fbGUzMiBzdGF0dXM7Ci0JX19sZTMyIHZhbHVlOwotfSBfX3BhY2tl ZDsKLQotZW51bSBoaWZfZ2VuZXJpY19pbmRpY2F0aW9uX3R5cGUgewotCUhJRl9HRU5FUklDX0lO RElDQVRJT05fVFlQRV9SQVcgICAgICAgICAgICAgICAgPSAweDAsCi0JSElGX0dFTkVSSUNfSU5E SUNBVElPTl9UWVBFX1NUUklORyAgICAgICAgICAgICA9IDB4MSwKLQlISUZfR0VORVJJQ19JTkRJ Q0FUSU9OX1RZUEVfUlhfU1RBVFMgICAgICAgICAgID0gMHgyLAotCUhJRl9HRU5FUklDX0lORElD QVRJT05fVFlQRV9UWF9QT1dFUl9MT09QX0lORk8gPSAweDMsCi19OwotCi1zdHJ1Y3QgaGlmX3J4 X3N0YXRzIHsKLQlfX2xlMzIgbmJfcnhfZnJhbWU7Ci0JX19sZTMyIG5iX2NyY19mcmFtZTsKLQlf X2xlMzIgcGVyX3RvdGFsOwotCV9fbGUzMiB0aHJvdWdocHV0OwotCV9fbGUzMiBuYl9yeF9ieV9y YXRlW0FQSV9SQVRFX05VTV9FTlRSSUVTXTsKLQlfX2xlMTYgcGVyW0FQSV9SQVRFX05VTV9FTlRS SUVTXTsKLQlfX2xlMTYgc25yW0FQSV9SQVRFX05VTV9FTlRSSUVTXTsgIC8qIHNpZ25lZCB2YWx1 ZSAqLwotCV9fbGUxNiByc3NpW0FQSV9SQVRFX05VTV9FTlRSSUVTXTsgLyogc2lnbmVkIHZhbHVl ICovCi0JX19sZTE2IGNmb1tBUElfUkFURV9OVU1fRU5UUklFU107ICAvKiBzaWduZWQgdmFsdWUg Ki8KLQlfX2xlMzIgZGF0ZTsKLQlfX2xlMzIgcHdyX2Nsa19mcmVxOwotCXU4ICAgICBpc19leHRf cHdyX2NsazsKLQlzOCAgICAgY3VycmVudF90ZW1wOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhp Zl90eF9wb3dlcl9sb29wX2luZm8gewotCV9fbGUxNiB0eF9nYWluX2RpZzsKLQlfX2xlMTYgdHhf Z2Fpbl9wYTsKLQlfX2xlMTYgdGFyZ2V0X3BvdXQ7IC8qIHNpZ25lZCB2YWx1ZSAqLwotCV9fbGUx NiBwX2VzdGltYXRpb247IC8qIHNpZ25lZCB2YWx1ZSAqLwotCV9fbGUxNiB2cGRldDsKLQl1OCAg ICAgbWVhc3VyZW1lbnRfaW5kZXg7Ci0JdTggICAgIHJlc2VydmVkOwotfSBfX3BhY2tlZDsKLQot c3RydWN0IGhpZl9pbmRfZ2VuZXJpYyB7Ci0JX19sZTMyIHR5cGU7Ci0JdW5pb24gewotCQlzdHJ1 Y3QgaGlmX3J4X3N0YXRzIHJ4X3N0YXRzOwotCQlzdHJ1Y3QgaGlmX3R4X3Bvd2VyX2xvb3BfaW5m byB0eF9wb3dlcl9sb29wX2luZm87Ci0JfSBkYXRhOwotfSBfX3BhY2tlZDsKLQotZW51bSBoaWZf ZXJyb3IgewotCUhJRl9FUlJPUl9GSVJNV0FSRV9ST0xMQkFDSyAgICAgICAgICAgPSAweDAwLAot CUhJRl9FUlJPUl9GSVJNV0FSRV9ERUJVR19FTkFCTEVEICAgICAgPSAweDAxLAotCUhJRl9FUlJP Ul9TTEtfT1VUREFURURfU0VTU0lPTl9LRVkgICAgPSAweDAyLAotCUhJRl9FUlJPUl9TTEtfU0VT U0lPTl9LRVkgICAgICAgICAgICAgPSAweDAzLAotCUhJRl9FUlJPUl9PT1JfVk9MVEFHRSAgICAg ICAgICAgICAgICAgPSAweDA0LAotCUhJRl9FUlJPUl9QRFNfUEFZTE9BRCAgICAgICAgICAgICAg ICAgPSAweDA1LAotCUhJRl9FUlJPUl9PT1JfVEVNUEVSQVRVUkUgICAgICAgICAgICAgPSAweDA2 LAotCUhJRl9FUlJPUl9TTEtfUkVRX0RVUklOR19LRVlfRVhDSEFOR0UgPSAweDA3LAotCUhJRl9F UlJPUl9TTEtfTVVMVElfVFhfVU5TVVBQT1JURUQgICAgPSAweDA4LAotCUhJRl9FUlJPUl9TTEtf T1ZFUkZMT1cgICAgICAgICAgICAgICAgPSAweDA5LAotCUhJRl9FUlJPUl9TTEtfREVDUllQVElP TiAgICAgICAgICAgICAgPSAweDBhLAotCUhJRl9FUlJPUl9TTEtfV1JPTkdfRU5DUllQVElPTl9T VEFURSAgPSAweDBiLAotCUhJRl9FUlJPUl9ISUZfQlVTX0ZSRVFVRU5DWV9UT09fTE9XICAgPSAw eDBjLAotCUhJRl9FUlJPUl9ISUZfUlhfREFUQV9UT09fTEFSR0UgICAgICAgPSAweDBlLAotCUhJ Rl9FUlJPUl9ISUZfVFhfUVVFVUVfRlVMTCAgICAgICAgICAgPSAweDBkLAotCUhJRl9FUlJPUl9I SUZfQlVTICAgICAgICAgICAgICAgICAgICAgPSAweDBmLAotCUhJRl9FUlJPUl9QRFNfVEVTVEZF QVRVUkUgICAgICAgICAgICAgPSAweDEwLAotCUhJRl9FUlJPUl9TTEtfVU5DT05GSUdVUkVEICAg ICAgICAgICAgPSAweDExLAotfTsKLQotc3RydWN0IGhpZl9pbmRfZXJyb3IgewotCV9fbGUzMiB0 eXBlOwotCXU4ICAgICBkYXRhW107Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX2luZF9leGNl cHRpb24gewotCV9fbGUzMiB0eXBlOwotCXU4ICAgICBkYXRhW107Ci19IF9fcGFja2VkOwotCi1l bnVtIGhpZl9zZWN1cmVfbGlua19zdGF0ZSB7Ci0JU0VDX0xJTktfVU5BVkFJTEFCTEUgPSAweDAs Ci0JU0VDX0xJTktfUkVTRVJWRUQgICAgPSAweDEsCi0JU0VDX0xJTktfRVZBTCAgICAgICAgPSAw eDIsCi0JU0VDX0xJTktfRU5GT1JDRUQgICAgPSAweDMKLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfYXBpX21pYi5oIGIvZHJpdmVycy9zdGFnaW5nL3dm eC9oaWZfYXBpX21pYi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTUzNGYyNDQ3 NTcuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl9hcGlfbWliLmgK KysrIC9kZXYvbnVsbApAQCAtMSwzNDYgKzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEFwYWNoZS0yLjAgKi8KLS8qCi0gKiBXRjIwMCBoYXJkd2FyZSBpbnRlcmZhY2UgZGVmaW5p dGlvbnMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3Jp ZXMgSW5jLgotICovCi0KLSNpZm5kZWYgV0ZYX0hJRl9BUElfTUlCX0gKLSNkZWZpbmUgV0ZYX0hJ Rl9BUElfTUlCX0gKLQotI2luY2x1ZGUgImhpZl9hcGlfZ2VuZXJhbC5oIgotCi0jZGVmaW5lIEhJ Rl9BUElfSVBWNF9BRERSRVNTX1NJWkUgNAotI2RlZmluZSBISUZfQVBJX0lQVjZfQUREUkVTU19T SVpFIDE2Ci0KLWVudW0gaGlmX21pYl9pZHMgewotCUhJRl9NSUJfSURfR0xfT1BFUkFUSU9OQUxf UE9XRVJfTU9ERSAgICAgICAgPSAweDIwMDAsCi0JSElGX01JQl9JRF9HTF9CTE9DS19BQ0tfSU5G TyAgICAgICAgICAgICAgICA9IDB4MjAwMSwKLQlISUZfTUlCX0lEX0dMX1NFVF9NVUxUSV9NU0cg ICAgICAgICAgICAgICAgID0gMHgyMDAyLAotCUhJRl9NSUJfSURfQ0NBX0NPTkZJRyAgICAgICAg ICAgICAgICAgICAgICAgPSAweDIwMDMsCi0JSElGX01JQl9JRF9FVEhFUlRZUEVfREFUQUZSQU1F X0NPTkRJVElPTiAgICA9IDB4MjAxMCwKLQlISUZfTUlCX0lEX1BPUlRfREFUQUZSQU1FX0NPTkRJ VElPTiAgICAgICAgID0gMHgyMDExLAotCUhJRl9NSUJfSURfTUFHSUNfREFUQUZSQU1FX0NPTkRJ VElPTiAgICAgICAgPSAweDIwMTIsCi0JSElGX01JQl9JRF9NQUNfQUREUl9EQVRBRlJBTUVfQ09O RElUSU9OICAgICA9IDB4MjAxMywKLQlISUZfTUlCX0lEX0lQVjRfQUREUl9EQVRBRlJBTUVfQ09O RElUSU9OICAgID0gMHgyMDE0LAotCUhJRl9NSUJfSURfSVBWNl9BRERSX0RBVEFGUkFNRV9DT05E SVRJT04gICAgPSAweDIwMTUsCi0JSElGX01JQl9JRF9VQ19NQ19CQ19EQVRBRlJBTUVfQ09ORElU SU9OICAgICA9IDB4MjAxNiwKLQlISUZfTUlCX0lEX0NPTkZJR19EQVRBX0ZJTFRFUiAgICAgICAg ICAgICAgID0gMHgyMDE3LAotCUhJRl9NSUJfSURfU0VUX0RBVEFfRklMVEVSSU5HICAgICAgICAg ICAgICAgPSAweDIwMTgsCi0JSElGX01JQl9JRF9BUlBfSVBfQUREUkVTU0VTX1RBQkxFICAgICAg ICAgICA9IDB4MjAxOSwKLQlISUZfTUlCX0lEX05TX0lQX0FERFJFU1NFU19UQUJMRSAgICAgICAg ICAgID0gMHgyMDFBLAotCUhJRl9NSUJfSURfUlhfRklMVEVSICAgICAgICAgICAgICAgICAgICAg ICAgPSAweDIwMUIsCi0JSElGX01JQl9JRF9CRUFDT05fRklMVEVSX1RBQkxFICAgICAgICAgICAg ICA9IDB4MjAxQywKLQlISUZfTUlCX0lEX0JFQUNPTl9GSUxURVJfRU5BQkxFICAgICAgICAgICAg ID0gMHgyMDFELAotCUhJRl9NSUJfSURfR1JQX1NFUV9DT1VOVEVSICAgICAgICAgICAgICAgICAg PSAweDIwMzAsCi0JSElGX01JQl9JRF9UU0ZfQ09VTlRFUiAgICAgICAgICAgICAgICAgICAgICA9 IDB4MjAzMSwKLQlISUZfTUlCX0lEX1NUQVRJU1RJQ1NfVEFCTEUgICAgICAgICAgICAgICAgID0g MHgyMDMyLAotCUhJRl9NSUJfSURfQ09VTlRFUlNfVEFCTEUgICAgICAgICAgICAgICAgICAgPSAw eDIwMzMsCi0JSElGX01JQl9JRF9NQVhfVFhfUE9XRVJfTEVWRUwgICAgICAgICAgICAgICA9IDB4 MjAzNCwKLQlISUZfTUlCX0lEX0VYVEVOREVEX0NPVU5URVJTX1RBQkxFICAgICAgICAgID0gMHgy MDM1LAotCUhJRl9NSUJfSURfRE9UMTFfTUFDX0FERFJFU1MgICAgICAgICAgICAgICAgPSAweDIw NDAsCi0JSElGX01JQl9JRF9ET1QxMV9NQVhfVFJBTlNNSVRfTVNEVV9MSUZFVElNRSA9IDB4MjA0 MSwKLQlISUZfTUlCX0lEX0RPVDExX01BWF9SRUNFSVZFX0xJRkVUSU1FICAgICAgID0gMHgyMDQy LAotCUhJRl9NSUJfSURfRE9UMTFfV0VQX0RFRkFVTFRfS0VZX0lEICAgICAgICAgPSAweDIwNDMs Ci0JSElGX01JQl9JRF9ET1QxMV9SVFNfVEhSRVNIT0xEICAgICAgICAgICAgICA9IDB4MjA0NCwK LQlISUZfTUlCX0lEX1NMT1RfVElNRSAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyMDQ1LAot CUhJRl9NSUJfSURfQ1VSUkVOVF9UWF9QT1dFUl9MRVZFTCAgICAgICAgICAgPSAweDIwNDYsCi0J SElGX01JQl9JRF9OT05fRVJQX1BST1RFQ1RJT04gICAgICAgICAgICAgICA9IDB4MjA0NywKLQlI SUZfTUlCX0lEX1RFTVBMQVRFX0ZSQU1FICAgICAgICAgICAgICAgICAgID0gMHgyMDQ4LAotCUhJ Rl9NSUJfSURfQkVBQ09OX1dBS0VVUF9QRVJJT0QgICAgICAgICAgICAgPSAweDIwNDksCi0JSElG X01JQl9JRF9SQ1BJX1JTU0lfVEhSRVNIT0xEICAgICAgICAgICAgICA9IDB4MjA0QSwKLQlISUZf TUlCX0lEX0JMT0NLX0FDS19QT0xJQ1kgICAgICAgICAgICAgICAgID0gMHgyMDRCLAotCUhJRl9N SUJfSURfT1ZFUlJJREVfSU5URVJOQUxfVFhfUkFURSAgICAgICAgPSAweDIwNEMsCi0JSElGX01J Ql9JRF9TRVRfQVNTT0NJQVRJT05fTU9ERSAgICAgICAgICAgICA9IDB4MjA0RCwKLQlISUZfTUlC X0lEX1NFVF9VQVBTRF9JTkZPUk1BVElPTiAgICAgICAgICAgID0gMHgyMDRFLAotCUhJRl9NSUJf SURfU0VUX1RYX1JBVEVfUkVUUllfUE9MSUNZICAgICAgICAgPSAweDIwNEYsCi0JSElGX01JQl9J RF9QUk9URUNURURfTUdNVF9QT0xJQ1kgICAgICAgICAgICA9IDB4MjA1MCwKLQlISUZfTUlCX0lE X1NFVF9IVF9QUk9URUNUSU9OICAgICAgICAgICAgICAgID0gMHgyMDUxLAotCUhJRl9NSUJfSURf S0VFUF9BTElWRV9QRVJJT0QgICAgICAgICAgICAgICAgPSAweDIwNTIsCi0JSElGX01JQl9JRF9B UlBfS0VFUF9BTElWRV9QRVJJT0QgICAgICAgICAgICA9IDB4MjA1MywKLQlISUZfTUlCX0lEX0lO QUNUSVZJVFlfVElNRVIgICAgICAgICAgICAgICAgID0gMHgyMDU0LAotCUhJRl9NSUJfSURfSU5U RVJGQUNFX1BST1RFQ1RJT04gICAgICAgICAgICAgPSAweDIwNTUsCi0JSElGX01JQl9JRF9CRUFD T05fU1RBVFMgICAgICAgICAgICAgICAgICAgICA9IDB4MjA1NiwKLX07Ci0KLWVudW0gaGlmX29w X3Bvd2VyX21vZGUgewotCUhJRl9PUF9QT1dFUl9NT0RFX0FDVElWRSAgICA9IDB4MCwKLQlISUZf T1BfUE9XRVJfTU9ERV9ET1pFICAgICAgPSAweDEsCi0JSElGX09QX1BPV0VSX01PREVfUVVJRVND RU5UID0gMHgyCi19OwotCi1zdHJ1Y3QgaGlmX21pYl9nbF9vcGVyYXRpb25hbF9wb3dlcl9tb2Rl IHsKLQl1OCAgICAgcG93ZXJfbW9kZTo0OwotCXU4ICAgICByZXNlcnZlZDE6MzsKLQl1OCAgICAg d3VwX2luZF9hY3RpdmF0aW9uOjE7Ci0JdTggICAgIHJlc2VydmVkMlszXTsKLX0gX19wYWNrZWQ7 Ci0KLXN0cnVjdCBoaWZfbWliX2dsX3NldF9tdWx0aV9tc2cgewotCXU4ICAgICBlbmFibGVfbXVs dGlfdHhfY29uZjoxOwotCXU4ICAgICByZXNlcnZlZDE6NzsKLQl1OCAgICAgcmVzZXJ2ZWQyWzNd OwotfSBfX3BhY2tlZDsKLQotZW51bSBoaWZfYXJwX25zX2ZyYW1lX3RyZWF0bWVudCB7Ci0JSElG X0FSUF9OU19GSUxURVJJTkdfRElTQUJMRSA9IDB4MCwKLQlISUZfQVJQX05TX0ZJTFRFUklOR19F TkFCTEUgID0gMHgxLAotCUhJRl9BUlBfTlNfUkVQTFlfRU5BQkxFICAgICAgPSAweDIKLX07Ci0K LXN0cnVjdCBoaWZfbWliX2FycF9pcF9hZGRyX3RhYmxlIHsKLQl1OCAgICAgY29uZGl0aW9uX2lk eDsKLQl1OCAgICAgYXJwX2VuYWJsZTsKLQl1OCAgICAgcmVzZXJ2ZWRbMl07Ci0JdTggICAgIGlw djRfYWRkcmVzc1tISUZfQVBJX0lQVjRfQUREUkVTU19TSVpFXTsKLX0gX19wYWNrZWQ7Ci0KLXN0 cnVjdCBoaWZfbWliX3J4X2ZpbHRlciB7Ci0JdTggICAgIHJlc2VydmVkMToxOwotCXU4ICAgICBi c3NpZF9maWx0ZXI6MTsKLQl1OCAgICAgcmVzZXJ2ZWQyOjE7Ci0JdTggICAgIGZ3ZF9wcm9iZV9y ZXE6MTsKLQl1OCAgICAga2VlcF9hbGl2ZV9maWx0ZXI6MTsKLQl1OCAgICAgcmVzZXJ2ZWQzOjM7 Ci0JdTggICAgIHJlc2VydmVkNFszXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfaWVfdGFi bGVfZW50cnkgewotCXU4ICAgICBpZV9pZDsKLQl1OCAgICAgaGFzX2NoYW5nZWQ6MTsKLQl1OCAg ICAgbm9fbG9uZ2VyOjE7Ci0JdTggICAgIGhhc19hcHBlYXJlZDoxOwotCXU4ICAgICByZXNlcnZl ZDoxOwotCXU4ICAgICBudW1fbWF0Y2hfZGF0YTo0OwotCXU4ICAgICBvdWlbM107Ci0JdTggICAg IG1hdGNoX2RhdGFbM107Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX21pYl9iY25fZmlsdGVy X3RhYmxlIHsKLQlfX2xlMzIgbnVtX29mX2luZm9fZWxtdHM7Ci0Jc3RydWN0IGhpZl9pZV90YWJs ZV9lbnRyeSBpZV90YWJsZVtdOwotfSBfX3BhY2tlZDsKLQotZW51bSBoaWZfYmVhY29uX2ZpbHRl ciB7Ci0JSElGX0JFQUNPTl9GSUxURVJfRElTQUJMRSAgPSAweDAsCi0JSElGX0JFQUNPTl9GSUxU RVJfRU5BQkxFICAgPSAweDEsCi0JSElGX0JFQUNPTl9GSUxURVJfQVVUT19FUlAgPSAweDIKLX07 Ci0KLXN0cnVjdCBoaWZfbWliX2Jjbl9maWx0ZXJfZW5hYmxlIHsKLQlfX2xlMzIgZW5hYmxlOwot CV9fbGUzMiBiY25fY291bnQ7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX21pYl9leHRlbmRl ZF9jb3VudF90YWJsZSB7Ci0JX19sZTMyIGNvdW50X2Ryb3BfcGxjcDsKLQlfX2xlMzIgY291bnRf ZHJvcF9mY3M7Ci0JX19sZTMyIGNvdW50X3R4X2ZyYW1lczsKLQlfX2xlMzIgY291bnRfcnhfZnJh bWVzOwotCV9fbGUzMiBjb3VudF9yeF9mcmFtZXNfZmFpbGVkOwotCV9fbGUzMiBjb3VudF9kcm9w X2RlY3J5cHRpb247Ci0JX19sZTMyIGNvdW50X2Ryb3BfdGtpcF9taWM7Ci0JX19sZTMyIGNvdW50 X2Ryb3Bfbm9fa2V5OwotCV9fbGUzMiBjb3VudF90eF9mcmFtZXNfbXVsdGljYXN0OwotCV9fbGUz MiBjb3VudF90eF9mcmFtZXNfc3VjY2VzczsKLQlfX2xlMzIgY291bnRfdHhfZnJhbWVzX2ZhaWxl ZDsKLQlfX2xlMzIgY291bnRfdHhfZnJhbWVzX3JldHJpZWQ7Ci0JX19sZTMyIGNvdW50X3R4X2Zy YW1lc19tdWx0aV9yZXRyaWVkOwotCV9fbGUzMiBjb3VudF9kcm9wX2R1cGxpY2F0ZTsKLQlfX2xl MzIgY291bnRfcnRzX3N1Y2Nlc3M7Ci0JX19sZTMyIGNvdW50X3J0c19mYWlsZWQ7Ci0JX19sZTMy IGNvdW50X2Fja19mYWlsZWQ7Ci0JX19sZTMyIGNvdW50X3J4X2ZyYW1lc19tdWx0aWNhc3Q7Ci0J X19sZTMyIGNvdW50X3J4X2ZyYW1lc19zdWNjZXNzOwotCV9fbGUzMiBjb3VudF9kcm9wX2NtYWNf aWN2OwotCV9fbGUzMiBjb3VudF9kcm9wX2NtYWNfcmVwbGF5OwotCV9fbGUzMiBjb3VudF9kcm9w X2NjbXBfcmVwbGF5OwotCV9fbGUzMiBjb3VudF9kcm9wX2JpcF9taWM7Ci0JX19sZTMyIGNvdW50 X3J4X2Jjbl9zdWNjZXNzOwotCV9fbGUzMiBjb3VudF9yeF9iY25fbWlzczsKLQlfX2xlMzIgY291 bnRfcnhfYmNuX2R0aW07Ci0JX19sZTMyIGNvdW50X3J4X2Jjbl9kdGltX2FpZDBfY2xyOwotCV9f bGUzMiBjb3VudF9yeF9iY25fZHRpbV9haWQwX3NldDsKLQlfX2xlMzIgcmVzZXJ2ZWRbMTJdOwot fSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9taWJfY291bnRfdGFibGUgewotCV9fbGUzMiBjb3Vu dF9kcm9wX3BsY3A7Ci0JX19sZTMyIGNvdW50X2Ryb3BfZmNzOwotCV9fbGUzMiBjb3VudF90eF9m cmFtZXM7Ci0JX19sZTMyIGNvdW50X3J4X2ZyYW1lczsKLQlfX2xlMzIgY291bnRfcnhfZnJhbWVz X2ZhaWxlZDsKLQlfX2xlMzIgY291bnRfZHJvcF9kZWNyeXB0aW9uOwotCV9fbGUzMiBjb3VudF9k cm9wX3RraXBfbWljOwotCV9fbGUzMiBjb3VudF9kcm9wX25vX2tleTsKLQlfX2xlMzIgY291bnRf dHhfZnJhbWVzX211bHRpY2FzdDsKLQlfX2xlMzIgY291bnRfdHhfZnJhbWVzX3N1Y2Nlc3M7Ci0J X19sZTMyIGNvdW50X3R4X2ZyYW1lc19mYWlsZWQ7Ci0JX19sZTMyIGNvdW50X3R4X2ZyYW1lc19y ZXRyaWVkOwotCV9fbGUzMiBjb3VudF90eF9mcmFtZXNfbXVsdGlfcmV0cmllZDsKLQlfX2xlMzIg Y291bnRfZHJvcF9kdXBsaWNhdGU7Ci0JX19sZTMyIGNvdW50X3J0c19zdWNjZXNzOwotCV9fbGUz MiBjb3VudF9ydHNfZmFpbGVkOwotCV9fbGUzMiBjb3VudF9hY2tfZmFpbGVkOwotCV9fbGUzMiBj b3VudF9yeF9mcmFtZXNfbXVsdGljYXN0OwotCV9fbGUzMiBjb3VudF9yeF9mcmFtZXNfc3VjY2Vz czsKLQlfX2xlMzIgY291bnRfZHJvcF9jbWFjX2ljdjsKLQlfX2xlMzIgY291bnRfZHJvcF9jbWFj X3JlcGxheTsKLQlfX2xlMzIgY291bnRfZHJvcF9jY21wX3JlcGxheTsKLQlfX2xlMzIgY291bnRf ZHJvcF9iaXBfbWljOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9taWJfbWFjX2FkZHJlc3Mg ewotCXU4ICAgICBtYWNfYWRkcltFVEhfQUxFTl07Ci0JX19sZTE2IHJlc2VydmVkOwotfSBfX3Bh Y2tlZDsKLQotc3RydWN0IGhpZl9taWJfd2VwX2RlZmF1bHRfa2V5X2lkIHsKLQl1OCAgICAgd2Vw X2RlZmF1bHRfa2V5X2lkOwotCXU4ICAgICByZXNlcnZlZFszXTsKLX0gX19wYWNrZWQ7Ci0KLXN0 cnVjdCBoaWZfbWliX2RvdDExX3J0c190aHJlc2hvbGQgewotCV9fbGUzMiB0aHJlc2hvbGQ7Ci19 IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX21pYl9zbG90X3RpbWUgewotCV9fbGUzMiBzbG90X3Rp bWU7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX21pYl9jdXJyZW50X3R4X3Bvd2VyX2xldmVs IHsKLQlfX2xlMzIgcG93ZXJfbGV2ZWw7IC8qIHNpZ25lZCB2YWx1ZSAqLwotfSBfX3BhY2tlZDsK LQotc3RydWN0IGhpZl9taWJfbm9uX2VycF9wcm90ZWN0aW9uIHsKLQl1OCAgICAgdXNlX2N0c190 b19zZWxmOjE7Ci0JdTggICAgIHJlc2VydmVkMTo3OwotCXU4ICAgICByZXNlcnZlZDJbM107Ci19 IF9fcGFja2VkOwotCi1lbnVtIGhpZl90bXBsdCB7Ci0JSElGX1RNUExUX1BSQlJFUSA9IDB4MCwK LQlISUZfVE1QTFRfQkNOICAgID0gMHgxLAotCUhJRl9UTVBMVF9OVUxMICAgPSAweDIsCi0JSElG X1RNUExUX1FPU05VTCA9IDB4MywKLQlISUZfVE1QTFRfUFNQT0xMID0gMHg0LAotCUhJRl9UTVBM VF9QUkJSRVMgPSAweDUsCi0JSElGX1RNUExUX0FSUCAgICA9IDB4NiwKLQlISUZfVE1QTFRfTkEg ICAgID0gMHg3Ci19OwotCi0jZGVmaW5lIEhJRl9BUElfTUFYX1RFTVBMQVRFX0ZSQU1FX1NJWkUg NzAwCi0KLXN0cnVjdCBoaWZfbWliX3RlbXBsYXRlX2ZyYW1lIHsKLQl1OCAgICAgZnJhbWVfdHlw ZTsKLQl1OCAgICAgaW5pdF9yYXRlOjc7Ci0JdTggICAgIG1vZGU6MTsKLQlfX2xlMTYgZnJhbWVf bGVuZ3RoOwotCXU4ICAgICBmcmFtZVtdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9taWJf YmVhY29uX3dha2VfdXBfcGVyaW9kIHsKLQl1OCAgICAgd2FrZXVwX3BlcmlvZF9taW47Ci0JdTgg ICAgIHJlY2VpdmVfZHRpbToxOwotCXU4ICAgICByZXNlcnZlZDE6NzsKLQl1OCAgICAgd2FrZXVw X3BlcmlvZF9tYXg7Ci0JdTggICAgIHJlc2VydmVkMjsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBo aWZfbWliX3JjcGlfcnNzaV90aHJlc2hvbGQgewotCXU4ICAgICBkZXRlY3Rpb246MTsKLQl1OCAg ICAgcmNwaV9yc3NpOjE7Ci0JdTggICAgIHVwcGVydGhyZXNoOjE7Ci0JdTggICAgIGxvd2VydGhy ZXNoOjE7Ci0JdTggICAgIHJlc2VydmVkOjQ7Ci0JdTggICAgIGxvd2VyX3RocmVzaG9sZDsKLQl1 OCAgICAgdXBwZXJfdGhyZXNob2xkOwotCXU4ICAgICByb2xsaW5nX2F2ZXJhZ2VfY291bnQ7Ci19 IF9fcGFja2VkOwotCi0jZGVmaW5lIERFRkFVTFRfQkFfTUFYX1JYX0JVRkZFUl9TSVpFIDE2Ci0K LXN0cnVjdCBoaWZfbWliX2Jsb2NrX2Fja19wb2xpY3kgewotCXU4ICAgICBibG9ja19hY2tfdHhf dGlkX3BvbGljeTsKLQl1OCAgICAgcmVzZXJ2ZWQxOwotCXU4ICAgICBibG9ja19hY2tfcnhfdGlk X3BvbGljeTsKLQl1OCAgICAgYmxvY2tfYWNrX3J4X21heF9idWZmZXJfc2l6ZTsKLX0gX19wYWNr ZWQ7Ci0KLWVudW0gaGlmX21wZHVfc3RhcnRfc3BhY2luZyB7Ci0JSElGX01QRFVfU1RBUlRfU1BB Q0lOR19OT19SRVNUUklDID0gMHgwLAotCUhJRl9NUERVX1NUQVJUX1NQQUNJTkdfUVVBUlRFUiAg ICA9IDB4MSwKLQlISUZfTVBEVV9TVEFSVF9TUEFDSU5HX0hBTEYgICAgICAgPSAweDIsCi0JSElG X01QRFVfU1RBUlRfU1BBQ0lOR19PTkUgICAgICAgID0gMHgzLAotCUhJRl9NUERVX1NUQVJUX1NQ QUNJTkdfVFdPICAgICAgICA9IDB4NCwKLQlISUZfTVBEVV9TVEFSVF9TUEFDSU5HX0ZPVVIgICAg ICAgPSAweDUsCi0JSElGX01QRFVfU1RBUlRfU1BBQ0lOR19FSUdIVCAgICAgID0gMHg2LAotCUhJ Rl9NUERVX1NUQVJUX1NQQUNJTkdfU0lYVEVFTiAgICA9IDB4NwotfTsKLQotc3RydWN0IGhpZl9t aWJfc2V0X2Fzc29jaWF0aW9uX21vZGUgewotCXU4ICAgICBwcmVhbWJ0eXBlX3VzZToxOwotCXU4 ICAgICBtb2RlOjE7Ci0JdTggICAgIHJhdGVzZXQ6MTsKLQl1OCAgICAgc3BhY2luZzoxOwotCXU4 ICAgICByZXNlcnZlZDE6NDsKLQl1OCAgICAgc2hvcnRfcHJlYW1ibGU6MTsKLQl1OCAgICAgcmVz ZXJ2ZWQyOjc7Ci0JdTggICAgIGdyZWVuZmllbGQ6MTsKLQl1OCAgICAgcmVzZXJ2ZWQzOjc7Ci0J dTggICAgIG1wZHVfc3RhcnRfc3BhY2luZzsKLQlfX2xlMzIgYmFzaWNfcmF0ZV9zZXQ7Ci19IF9f cGFja2VkOwotCi1zdHJ1Y3QgaGlmX21pYl9zZXRfdWFwc2RfaW5mb3JtYXRpb24gewotCXU4ICAg ICB0cmlnX2Jja2dybmQ6MTsKLQl1OCAgICAgdHJpZ19iZToxOwotCXU4ICAgICB0cmlnX3ZpZGVv OjE7Ci0JdTggICAgIHRyaWdfdm9pY2U6MTsKLQl1OCAgICAgcmVzZXJ2ZWQxOjQ7Ci0JdTggICAg IGRlbGl2X2Jja2dybmQ6MTsKLQl1OCAgICAgZGVsaXZfYmU6MTsKLQl1OCAgICAgZGVsaXZfdmlk ZW86MTsKLQl1OCAgICAgZGVsaXZfdm9pY2U6MTsKLQl1OCAgICAgcmVzZXJ2ZWQyOjQ7Ci0JX19s ZTE2IG1pbl9hdXRvX3RyaWdnZXJfaW50ZXJ2YWw7Ci0JX19sZTE2IG1heF9hdXRvX3RyaWdnZXJf aW50ZXJ2YWw7Ci0JX19sZTE2IGF1dG9fdHJpZ2dlcl9zdGVwOwotfSBfX3BhY2tlZDsKLQotc3Ry dWN0IGhpZl90eF9yYXRlX3JldHJ5X3BvbGljeSB7Ci0JdTggICAgIHBvbGljeV9pbmRleDsKLQl1 OCAgICAgc2hvcnRfcmV0cnlfY291bnQ7Ci0JdTggICAgIGxvbmdfcmV0cnlfY291bnQ7Ci0JdTgg ICAgIGZpcnN0X3JhdGVfc2VsOjI7Ci0JdTggICAgIHRlcm1pbmF0ZToxOwotCXU4ICAgICBjb3Vu dF9pbml0OjE7Ci0JdTggICAgIHJlc2VydmVkMTo0OwotCXU4ICAgICByYXRlX3JlY292ZXJ5X2Nv dW50OwotCXU4ICAgICByZXNlcnZlZDJbM107Ci0JdTggICAgIHJhdGVzWzEyXTsKLX0gX19wYWNr ZWQ7Ci0KLSNkZWZpbmUgSElGX1RYX1JFVFJZX1BPTElDWV9NQVggICAgIDE1Ci0jZGVmaW5lIEhJ Rl9UWF9SRVRSWV9QT0xJQ1lfSU5WQUxJRCBISUZfVFhfUkVUUllfUE9MSUNZX01BWAotCi1zdHJ1 Y3QgaGlmX21pYl9zZXRfdHhfcmF0ZV9yZXRyeV9wb2xpY3kgewotCXU4ICAgICBudW1fdHhfcmF0 ZV9wb2xpY2llczsKLQl1OCAgICAgcmVzZXJ2ZWRbM107Ci0Jc3RydWN0IGhpZl90eF9yYXRlX3Jl dHJ5X3BvbGljeSB0eF9yYXRlX3JldHJ5X3BvbGljeVtdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0 IGhpZl9taWJfcHJvdGVjdGVkX21nbXRfcG9saWN5IHsKLQl1OCAgICAgcG1mX2VuYWJsZToxOwot CXU4ICAgICB1bnBtZl9hbGxvd2VkOjE7Ci0JdTggICAgIGhvc3RfZW5jX2F1dGhfZnJhbWVzOjE7 Ci0JdTggICAgIHJlc2VydmVkMTo1OwotCXU4ICAgICByZXNlcnZlZDJbM107Ci19IF9fcGFja2Vk OwotCi1zdHJ1Y3QgaGlmX21pYl9rZWVwX2FsaXZlX3BlcmlvZCB7Ci0JX19sZTE2IGtlZXBfYWxp dmVfcGVyaW9kOwotCXU4ICAgICByZXNlcnZlZFsyXTsKLX0gX19wYWNrZWQ7Ci0KLSNlbmRpZgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfcnguYyBiL2RyaXZlcnMvc3RhZ2lu Zy93ZngvaGlmX3J4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5NjNiNTRkNTU5 My4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3J4LmMKKysrIC9k ZXYvbnVsbApAQCAtMSw0MTYgKzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjAtb25seQotLyoKLSAqIEhhbmRsaW5nIG9mIHRoZSBjaGlwLXRvLWhvc3QgZXZlbnRzIChh a2EgaW5kaWNhdGlvbnMpIG9mIHRoZSBoYXJkd2FyZSBBUEkuCi0gKgotICogQ29weXJpZ2h0IChj KSAyMDE3LTIwMjAsIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMp IDIwMTAsIFNULUVyaWNzc29uCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNs dWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotCi0jaW5jbHVkZSAiaGlmX3J4LmgiCi0jaW5jbHVk ZSAid2Z4LmgiCi0jaW5jbHVkZSAic2Nhbi5oIgotI2luY2x1ZGUgImJoLmgiCi0jaW5jbHVkZSAi c3RhLmgiCi0jaW5jbHVkZSAiZGF0YV9yeC5oIgotI2luY2x1ZGUgImhpZl9hcGlfY21kLmgiCi0K LXN0YXRpYyBpbnQgaGlmX2dlbmVyaWNfY29uZmlybShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwKLQkJ CSAgICAgICBjb25zdCBzdHJ1Y3QgaGlmX21zZyAqaGlmLCBjb25zdCB2b2lkICpidWYpCi17Ci0J LyogQWxsIGNvbmZpcm0gbWVzc2FnZXMgc3RhcnQgd2l0aCBzdGF0dXMgKi8KLQlpbnQgc3RhdHVz ID0gbGUzMl90b19jcHVwKChfX2xlMzIgKilidWYpOwotCWludCBjbWQgPSBoaWYtPmlkOwotCWlu dCBsZW4gPSBsZTE2X3RvX2NwdShoaWYtPmxlbikgLSA0OyAvKiBkcm9wIGhlYWRlciAqLwotCi0J V0FSTighbXV0ZXhfaXNfbG9ja2VkKCZ3ZGV2LT5oaWZfY21kLmxvY2spLCAiZGF0YSBsb2NraW5n IGVycm9yIik7Ci0KLQlpZiAoIXdkZXYtPmhpZl9jbWQuYnVmX3NlbmQpIHsKLQkJZGV2X3dhcm4o d2Rldi0+ZGV2LCAidW5leHBlY3RlZCBjb25maXJtYXRpb246IDB4JS4yeFxuIiwgY21kKTsKLQkJ cmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKGNtZCAhPSB3ZGV2LT5oaWZfY21kLmJ1Zl9zZW5k LT5pZCkgewotCQlkZXZfd2Fybih3ZGV2LT5kZXYsCi0JCQkgImNoaXAgcmVzcG9uc2UgbWlzbWF0 Y2ggcmVxdWVzdDogMHglLjJ4IHZzIDB4JS4yeFxuIiwKLQkJCSBjbWQsIHdkZXYtPmhpZl9jbWQu YnVmX3NlbmQtPmlkKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKHdkZXYtPmhpZl9j bWQuYnVmX3JlY3YpIHsKLQkJaWYgKHdkZXYtPmhpZl9jbWQubGVuX3JlY3YgPj0gbGVuICYmIGxl biA+IDApCi0JCQltZW1jcHkod2Rldi0+aGlmX2NtZC5idWZfcmVjdiwgYnVmLCBsZW4pOwotCQll bHNlCi0JCQlzdGF0dXMgPSAtRUlPOwotCX0KLQl3ZGV2LT5oaWZfY21kLnJldCA9IHN0YXR1czsK LQotCWNvbXBsZXRlKCZ3ZGV2LT5oaWZfY21kLmRvbmUpOwotCXJldHVybiBzdGF0dXM7Ci19Ci0K LXN0YXRpYyBpbnQgaGlmX3R4X2NvbmZpcm0oc3RydWN0IHdmeF9kZXYgKndkZXYsCi0JCQkgIGNv bnN0IHN0cnVjdCBoaWZfbXNnICpoaWYsIGNvbnN0IHZvaWQgKmJ1ZikKLXsKLQljb25zdCBzdHJ1 Y3QgaGlmX2NuZl90eCAqYm9keSA9IGJ1ZjsKLQotCXdmeF90eF9jb25maXJtX2NiKHdkZXYsIGJv ZHkpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGhpZl9tdWx0aV90eF9jb25maXJtKHN0 cnVjdCB3ZnhfZGV2ICp3ZGV2LAotCQkJCWNvbnN0IHN0cnVjdCBoaWZfbXNnICpoaWYsIGNvbnN0 IHZvaWQgKmJ1ZikKLXsKLQljb25zdCBzdHJ1Y3QgaGlmX2NuZl9tdWx0aV90cmFuc21pdCAqYm9k eSA9IGJ1ZjsKLQlpbnQgaTsKLQotCVdBUk4oYm9keS0+bnVtX3R4X2NvbmZzIDw9IDAsICJjb3Jy dXB0ZWQgbWVzc2FnZSIpOwotCWZvciAoaSA9IDA7IGkgPCBib2R5LT5udW1fdHhfY29uZnM7IGkr KykKLQkJd2Z4X3R4X2NvbmZpcm1fY2Iod2RldiwgJmJvZHktPnR4X2NvbmZfcGF5bG9hZFtpXSk7 Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaGlmX3N0YXJ0dXBfaW5kaWNhdGlvbihzdHJ1 Y3Qgd2Z4X2RldiAqd2RldiwKLQkJCQkgIGNvbnN0IHN0cnVjdCBoaWZfbXNnICpoaWYsIGNvbnN0 IHZvaWQgKmJ1ZikKLXsKLQljb25zdCBzdHJ1Y3QgaGlmX2luZF9zdGFydHVwICpib2R5ID0gYnVm OwotCi0JaWYgKGJvZHktPnN0YXR1cyB8fCBib2R5LT5maXJtd2FyZV90eXBlID4gNCkgewotCQlk ZXZfZXJyKHdkZXYtPmRldiwgInJlY2VpdmVkIGludmFsaWQgc3RhcnR1cCBpbmRpY2F0aW9uIik7 Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQltZW1jcHkoJndkZXYtPmh3X2NhcHMsIGJvZHksIHNp emVvZihzdHJ1Y3QgaGlmX2luZF9zdGFydHVwKSk7Ci0JbGUxNl90b19jcHVzKChfX2xlMTYgKikm d2Rldi0+aHdfY2Fwcy5oYXJkd2FyZV9pZCk7Ci0JbGUxNl90b19jcHVzKChfX2xlMTYgKikmd2Rl di0+aHdfY2Fwcy5udW1faW5wX2NoX2J1ZnMpOwotCWxlMTZfdG9fY3B1cygoX19sZTE2ICopJndk ZXYtPmh3X2NhcHMuc2l6ZV9pbnBfY2hfYnVmKTsKLQlsZTMyX3RvX2NwdXMoKF9fbGUzMiAqKSZ3 ZGV2LT5od19jYXBzLnN1cHBvcnRlZF9yYXRlX21hc2spOwotCi0JY29tcGxldGUoJndkZXYtPmZp cm13YXJlX3JlYWR5KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBoaWZfd2FrZXVwX2lu ZGljYXRpb24oc3RydWN0IHdmeF9kZXYgKndkZXYsCi0JCQkJIGNvbnN0IHN0cnVjdCBoaWZfbXNn ICpoaWYsIGNvbnN0IHZvaWQgKmJ1ZikKLXsKLQlpZiAoIXdkZXYtPnBkYXRhLmdwaW9fd2FrZXVw IHx8Ci0JICAgIGdwaW9kX2dldF92YWx1ZSh3ZGV2LT5wZGF0YS5ncGlvX3dha2V1cCkgPT0gMCkg ewotCQlkZXZfd2Fybih3ZGV2LT5kZXYsICJ1bmV4cGVjdGVkIHdha2UtdXAgaW5kaWNhdGlvblxu Iik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBoaWZf cmVjZWl2ZV9pbmRpY2F0aW9uKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LAotCQkJCSAgY29uc3Qgc3Ry dWN0IGhpZl9tc2cgKmhpZiwKLQkJCQkgIGNvbnN0IHZvaWQgKmJ1Ziwgc3RydWN0IHNrX2J1ZmYg KnNrYikKLXsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IHdkZXZfdG9fd3ZpZih3ZGV2LCBoaWYt PmludGVyZmFjZSk7Ci0JY29uc3Qgc3RydWN0IGhpZl9pbmRfcnggKmJvZHkgPSBidWY7Ci0KLQlp ZiAoIXd2aWYpIHsKLQkJZGV2X3dhcm4od2Rldi0+ZGV2LCAiJXM6IGlnbm9yZSByeCBkYXRhIGZv ciBub24tZXhpc3RlbnQgdmlmICVkXG4iLAotCQkJIF9fZnVuY19fLCBoaWYtPmludGVyZmFjZSk7 Ci0JCXJldHVybiAtRUlPOwotCX0KLQlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaGlmX21z ZykgKyBzaXplb2Yoc3RydWN0IGhpZl9pbmRfcngpKTsKLQl3ZnhfcnhfY2Iod3ZpZiwgYm9keSwg c2tiKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGhpZl9ldmVudF9pbmRpY2F0aW9u KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LAotCQkJCWNvbnN0IHN0cnVjdCBoaWZfbXNnICpoaWYsIGNv bnN0IHZvaWQgKmJ1ZikKLXsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IHdkZXZfdG9fd3ZpZih3 ZGV2LCBoaWYtPmludGVyZmFjZSk7Ci0JY29uc3Qgc3RydWN0IGhpZl9pbmRfZXZlbnQgKmJvZHkg PSBidWY7Ci0JaW50IHR5cGUgPSBsZTMyX3RvX2NwdShib2R5LT5ldmVudF9pZCk7Ci0KLQlpZiAo IXd2aWYpIHsKLQkJZGV2X3dhcm4od2Rldi0+ZGV2LCAiJXM6IHJlY2VpdmVkIGV2ZW50IGZvciBu b24tZXhpc3RlbnQgdmlmXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXN3 aXRjaCAodHlwZSkgewotCWNhc2UgSElGX0VWRU5UX0lORF9SQ1BJX1JTU0k6Ci0JCXdmeF9ldmVu dF9yZXBvcnRfcnNzaSh3dmlmLCBib2R5LT5ldmVudF9kYXRhLnJjcGlfcnNzaSk7Ci0JCWJyZWFr OwotCWNhc2UgSElGX0VWRU5UX0lORF9CU1NMT1NUOgotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmso Jnd2aWYtPmJlYWNvbl9sb3NzX3dvcmssIDApOwotCQlicmVhazsKLQljYXNlIEhJRl9FVkVOVF9J TkRfQlNTUkVHQUlORUQ6Ci0JCWNhbmNlbF9kZWxheWVkX3dvcmsoJnd2aWYtPmJlYWNvbl9sb3Nz X3dvcmspOwotCQlkZXZfZGJnKHdkZXYtPmRldiwgImlnbm9yZSBCU1NSRUdBSU5FRCBpbmRpY2F0 aW9uXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSBISUZfRVZFTlRfSU5EX1BTX01PREVfRVJST1I6Ci0J CWRldl93YXJuKHdkZXYtPmRldiwgImVycm9yIHdoaWxlIHByb2Nlc3NpbmcgcG93ZXIgc2F2ZSBy ZXF1ZXN0OiAlZFxuIiwKLQkJCSBsZTMyX3RvX2NwdShib2R5LT5ldmVudF9kYXRhLnBzX21vZGVf ZXJyb3IpKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZGV2X3dhcm4od2Rldi0+ZGV2LCAidW5o YW5kbGVkIGV2ZW50IGluZGljYXRpb246ICUuMnhcbiIsCi0JCQkgdHlwZSk7Ci0JCWJyZWFrOwot CX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBoaWZfcG1fbW9kZV9jb21wbGV0ZV9pbmRp Y2F0aW9uKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LAotCQkJCQkgICBjb25zdCBzdHJ1Y3QgaGlmX21z ZyAqaGlmLAotCQkJCQkgICBjb25zdCB2b2lkICpidWYpCi17Ci0Jc3RydWN0IHdmeF92aWYgKnd2 aWYgPSB3ZGV2X3RvX3d2aWYod2RldiwgaGlmLT5pbnRlcmZhY2UpOwotCi0JaWYgKCF3dmlmKSB7 Ci0JCWRldl93YXJuKHdkZXYtPmRldiwgIiVzOiByZWNlaXZlZCBldmVudCBmb3Igbm9uLWV4aXN0 ZW50IHZpZlxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JY29tcGxldGUoJnd2 aWYtPnNldF9wbV9tb2RlX2NvbXBsZXRlKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50 IGhpZl9zY2FuX2NvbXBsZXRlX2luZGljYXRpb24oc3RydWN0IHdmeF9kZXYgKndkZXYsCi0JCQkJ CWNvbnN0IHN0cnVjdCBoaWZfbXNnICpoaWYsCi0JCQkJCWNvbnN0IHZvaWQgKmJ1ZikKLXsKLQlz dHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IHdkZXZfdG9fd3ZpZih3ZGV2LCBoaWYtPmludGVyZmFjZSk7 Ci0JY29uc3Qgc3RydWN0IGhpZl9pbmRfc2Nhbl9jbXBsICpib2R5ID0gYnVmOwotCi0JaWYgKCF3 dmlmKSB7Ci0JCWRldl93YXJuKHdkZXYtPmRldiwgIiVzOiByZWNlaXZlZCBldmVudCBmb3Igbm9u LWV4aXN0ZW50IHZpZlxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQl3Znhf c2Nhbl9jb21wbGV0ZSh3dmlmLCBib2R5LT5udW1fY2hhbm5lbHNfY29tcGxldGVkKTsKLQotCXJl dHVybiAwOwotfQotCi1zdGF0aWMgaW50IGhpZl9qb2luX2NvbXBsZXRlX2luZGljYXRpb24oc3Ry dWN0IHdmeF9kZXYgKndkZXYsCi0JCQkJCWNvbnN0IHN0cnVjdCBoaWZfbXNnICpoaWYsCi0JCQkJ CWNvbnN0IHZvaWQgKmJ1ZikKLXsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IHdkZXZfdG9fd3Zp Zih3ZGV2LCBoaWYtPmludGVyZmFjZSk7Ci0KLQlpZiAoIXd2aWYpIHsKLQkJZGV2X3dhcm4od2Rl di0+ZGV2LCAiJXM6IHJlY2VpdmVkIGV2ZW50IGZvciBub24tZXhpc3RlbnQgdmlmXG4iLCBfX2Z1 bmNfXyk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlkZXZfd2Fybih3ZGV2LT5kZXYsICJ1bmF0dGVu ZGVkIEpvaW5Db21wbGV0ZUluZFxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBo aWZfc3VzcGVuZF9yZXN1bWVfaW5kaWNhdGlvbihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwKLQkJCQkJ IGNvbnN0IHN0cnVjdCBoaWZfbXNnICpoaWYsCi0JCQkJCSBjb25zdCB2b2lkICpidWYpCi17Ci0J Y29uc3Qgc3RydWN0IGhpZl9pbmRfc3VzcGVuZF9yZXN1bWVfdHggKmJvZHkgPSBidWY7Ci0Jc3Ry dWN0IHdmeF92aWYgKnd2aWY7Ci0KLQlpZiAoYm9keS0+YmNfbWNfb25seSkgewotCQl3dmlmID0g d2Rldl90b193dmlmKHdkZXYsIGhpZi0+aW50ZXJmYWNlKTsKLQkJaWYgKCF3dmlmKSB7Ci0JCQlk ZXZfd2Fybih3ZGV2LT5kZXYsICIlczogcmVjZWl2ZWQgZXZlbnQgZm9yIG5vbi1leGlzdGVudCB2 aWZcbiIsIF9fZnVuY19fKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JCWlmIChib2R5LT5yZXN1 bWUpCi0JCQl3Znhfc3VzcGVuZF9yZXN1bWVfbWMod3ZpZiwgU1RBX05PVElGWV9BV0FLRSk7Ci0J CWVsc2UKLQkJCXdmeF9zdXNwZW5kX3Jlc3VtZV9tYyh3dmlmLCBTVEFfTk9USUZZX1NMRUVQKTsK LQl9IGVsc2UgewotCQlXQVJOKGJvZHktPnBlZXJfc3RhX3NldCwgIm1pc3VuZGVyc3Rvb2QgaW5k aWNhdGlvbiIpOwotCQlXQVJOKGhpZi0+aW50ZXJmYWNlICE9IDIsICJtaXN1bmRlcnN0b29kIGlu ZGljYXRpb24iKTsKLQkJaWYgKGJvZHktPnJlc3VtZSkKLQkJCXdmeF9zdXNwZW5kX2hvdF9kZXYo d2RldiwgU1RBX05PVElGWV9BV0FLRSk7Ci0JCWVsc2UKLQkJCXdmeF9zdXNwZW5kX2hvdF9kZXYo d2RldiwgU1RBX05PVElGWV9TTEVFUCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBp bnQgaGlmX2dlbmVyaWNfaW5kaWNhdGlvbihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwKLQkJCQkgIGNv bnN0IHN0cnVjdCBoaWZfbXNnICpoaWYsIGNvbnN0IHZvaWQgKmJ1ZikKLXsKLQljb25zdCBzdHJ1 Y3QgaGlmX2luZF9nZW5lcmljICpib2R5ID0gYnVmOwotCWludCB0eXBlID0gbGUzMl90b19jcHUo Ym9keS0+dHlwZSk7Ci0KLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIEhJRl9HRU5FUklDX0lORElD QVRJT05fVFlQRV9SQVc6Ci0JCXJldHVybiAwOwotCWNhc2UgSElGX0dFTkVSSUNfSU5ESUNBVElP Tl9UWVBFX1NUUklORzoKLQkJZGV2X2luZm8od2Rldi0+ZGV2LCAiZmlybXdhcmUgc2F5czogJXNc biIsIChjaGFyICopJmJvZHktPmRhdGEpOwotCQlyZXR1cm4gMDsKLQljYXNlIEhJRl9HRU5FUklD X0lORElDQVRJT05fVFlQRV9SWF9TVEFUUzoKLQkJbXV0ZXhfbG9jaygmd2Rldi0+cnhfc3RhdHNf bG9jayk7Ci0JCS8qIE9sZGVyIGZpcm13YXJlIHNlbmQgYSBnZW5lcmljIGluZGljYXRpb24gYmVz aWRlIFJ4U3RhdHMgKi8KLQkJaWYgKCF3ZnhfYXBpX29sZGVyX3RoYW4od2RldiwgMSwgNCkpCi0J CQlkZXZfaW5mbyh3ZGV2LT5kZXYsICJSeCB0ZXN0IG9uZ29pbmcuIFRlbXBlcmF0dXJlOiAlZCBk ZWdyZWVzIENcbiIsCi0JCQkJIGJvZHktPmRhdGEucnhfc3RhdHMuY3VycmVudF90ZW1wKTsKLQkJ bWVtY3B5KCZ3ZGV2LT5yeF9zdGF0cywgJmJvZHktPmRhdGEucnhfc3RhdHMsCi0JCSAgICAgICBz aXplb2Yod2Rldi0+cnhfc3RhdHMpKTsKLQkJbXV0ZXhfdW5sb2NrKCZ3ZGV2LT5yeF9zdGF0c19s b2NrKTsKLQkJcmV0dXJuIDA7Ci0JY2FzZSBISUZfR0VORVJJQ19JTkRJQ0FUSU9OX1RZUEVfVFhf UE9XRVJfTE9PUF9JTkZPOgotCQltdXRleF9sb2NrKCZ3ZGV2LT50eF9wb3dlcl9sb29wX2luZm9f bG9jayk7Ci0JCW1lbWNweSgmd2Rldi0+dHhfcG93ZXJfbG9vcF9pbmZvLAotCQkgICAgICAgJmJv ZHktPmRhdGEudHhfcG93ZXJfbG9vcF9pbmZvLAotCQkgICAgICAgc2l6ZW9mKHdkZXYtPnR4X3Bv d2VyX2xvb3BfaW5mbykpOwotCQltdXRleF91bmxvY2soJndkZXYtPnR4X3Bvd2VyX2xvb3BfaW5m b19sb2NrKTsKLQkJcmV0dXJuIDA7Ci0JZGVmYXVsdDoKLQkJZGV2X2Vycih3ZGV2LT5kZXYsICJn ZW5lcmljX2luZGljYXRpb246IHVua25vd24gaW5kaWNhdGlvbiB0eXBlOiAlIy44eFxuIiwKLQkJ CXR5cGUpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgewot CWludCB2YWw7Ci0JY29uc3QgY2hhciAqc3RyOwotCWJvb2wgaGFzX3BhcmFtOwotfSBoaWZfZXJy b3JzW10gPSB7Ci0JeyBISUZfRVJST1JfRklSTVdBUkVfUk9MTEJBQ0ssCi0JCSJyb2xsYmFjayBz dGF0dXMiIH0sCi0JeyBISUZfRVJST1JfRklSTVdBUkVfREVCVUdfRU5BQkxFRCwKLQkJImRlYnVn IGZlYXR1cmUgZW5hYmxlZCIgfSwKLQl7IEhJRl9FUlJPUl9QRFNfUEFZTE9BRCwKLQkJIlBEUyB2 ZXJzaW9uIGlzIG5vdCBzdXBwb3J0ZWQiIH0sCi0JeyBISUZfRVJST1JfUERTX1RFU1RGRUFUVVJF LAotCQkiUERTIGFzayBmb3IgYW4gdW5rbm93biB0ZXN0IG1vZGUiIH0sCi0JeyBISUZfRVJST1Jf T09SX1ZPTFRBR0UsCi0JCSJvdXQtb2YtcmFuZ2UgcG93ZXIgc3VwcGx5IHZvbHRhZ2UiLCB0cnVl IH0sCi0JeyBISUZfRVJST1JfT09SX1RFTVBFUkFUVVJFLAotCQkib3V0LW9mLXJhbmdlIHRlbXBl cmF0dXJlIiwgdHJ1ZSB9LAotCXsgSElGX0VSUk9SX1NMS19SRVFfRFVSSU5HX0tFWV9FWENIQU5H RSwKLQkJInNlY3VyZSBsaW5rIGRvZXMgbm90IGV4cGVjdCByZXF1ZXN0IGR1cmluZyBrZXkgZXhj aGFuZ2UiIH0sCi0JeyBISUZfRVJST1JfU0xLX1NFU1NJT05fS0VZLAotCQkic2VjdXJlIGxpbmsg c2Vzc2lvbiBrZXkgaXMgaW52YWxpZCIgfSwKLQl7IEhJRl9FUlJPUl9TTEtfT1ZFUkZMT1csCi0J CSJzZWN1cmUgbGluayBvdmVyZmxvdyIgfSwKLQl7IEhJRl9FUlJPUl9TTEtfV1JPTkdfRU5DUllQ VElPTl9TVEFURSwKLQkJInNlY3VyZSBsaW5rIG1lc3NhZ2VzIGxpc3QgZG9lcyBub3QgbWF0Y2gg bWVzc2FnZSBlbmNyeXB0aW9uIiB9LAotCXsgSElGX0VSUk9SX1NMS19VTkNPTkZJR1VSRUQsCi0J CSJzZWN1cmUgbGluayBub3QgeWV0IGNvbmZpZ3VyZWQiIH0sCi0JeyBISUZfRVJST1JfSElGX0JV U19GUkVRVUVOQ1lfVE9PX0xPVywKLQkJImJ1cyBjbG9jayBpcyB0b28gc2xvdyAoPDFrSHopIiB9 LAotCXsgSElGX0VSUk9SX0hJRl9SWF9EQVRBX1RPT19MQVJHRSwKLQkJIkhJRiBtZXNzYWdlIHRv byBsYXJnZSIgfSwKLQkvKiBGb2xsb3dpbmcgZXJyb3JzIG9ubHkgZXhpc3RzIGluIG9sZCBmaXJt d2FyZSB2ZXJzaW9uczogKi8KLQl7IEhJRl9FUlJPUl9ISUZfVFhfUVVFVUVfRlVMTCwKLQkJIkhJ RiBtZXNzYWdlcyBxdWV1ZSBpcyBmdWxsIiB9LAotCXsgSElGX0VSUk9SX0hJRl9CVVMsCi0JCSJI SUYgYnVzIiB9LAotCXsgSElGX0VSUk9SX1NMS19NVUxUSV9UWF9VTlNVUFBPUlRFRCwKLQkJInNl Y3VyZSBsaW5rIGRvZXMgbm90IHN1cHBvcnQgbXVsdGktdHggY29uZmlybWF0aW9ucyIgfSwKLQl7 IEhJRl9FUlJPUl9TTEtfT1VUREFURURfU0VTU0lPTl9LRVksCi0JCSJzZWN1cmUgbGluayBzZXNz aW9uIGtleSBpcyBvdXRkYXRlZCIgfSwKLQl7IEhJRl9FUlJPUl9TTEtfREVDUllQVElPTiwKLQkJ InNlY3VyZSBsaW5rIHBhcmFtcyAobm9uY2Ugb3IgdGFnKSBtaXNtYXRjaCIgfSwKLX07Ci0KLXN0 YXRpYyBpbnQgaGlmX2Vycm9yX2luZGljYXRpb24oc3RydWN0IHdmeF9kZXYgKndkZXYsCi0JCQkJ Y29uc3Qgc3RydWN0IGhpZl9tc2cgKmhpZiwgY29uc3Qgdm9pZCAqYnVmKQotewotCWNvbnN0IHN0 cnVjdCBoaWZfaW5kX2Vycm9yICpib2R5ID0gYnVmOwotCWludCB0eXBlID0gbGUzMl90b19jcHUo Ym9keS0+dHlwZSk7Ci0JaW50IHBhcmFtID0gKHM4KWJvZHktPmRhdGFbMF07Ci0JaW50IGk7Ci0K LQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShoaWZfZXJyb3JzKTsgaSsrKQotCQlpZiAodHlw ZSA9PSBoaWZfZXJyb3JzW2ldLnZhbCkKLQkJCWJyZWFrOwotCWlmIChpIDwgQVJSQVlfU0laRSho aWZfZXJyb3JzKSkKLQkJaWYgKGhpZl9lcnJvcnNbaV0uaGFzX3BhcmFtKQotCQkJZGV2X2Vycih3 ZGV2LT5kZXYsICJhc3luY2hyb25vdXMgZXJyb3I6ICVzOiAlZFxuIiwKLQkJCQloaWZfZXJyb3Jz W2ldLnN0ciwgcGFyYW0pOwotCQllbHNlCi0JCQlkZXZfZXJyKHdkZXYtPmRldiwgImFzeW5jaHJv bm91cyBlcnJvcjogJXNcbiIsCi0JCQkJaGlmX2Vycm9yc1tpXS5zdHIpOwotCWVsc2UKLQkJZGV2 X2Vycih3ZGV2LT5kZXYsICJhc3luY2hyb25vdXMgZXJyb3I6IHVua25vd246ICUwOHhcbiIsIHR5 cGUpOwotCXByaW50X2hleF9kdW1wKEtFUk5fSU5GTywgImhpZjogIiwgRFVNUF9QUkVGSVhfT0ZG U0VULAotCQkgICAgICAgMTYsIDEsIGhpZiwgbGUxNl90b19jcHUoaGlmLT5sZW4pLCBmYWxzZSk7 Ci0Jd2Rldi0+Y2hpcF9mcm96ZW4gPSB0cnVlOwotCi0JcmV0dXJuIDA7Ci19OwotCi1zdGF0aWMg aW50IGhpZl9leGNlcHRpb25faW5kaWNhdGlvbihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwKLQkJCQkg ICAgY29uc3Qgc3RydWN0IGhpZl9tc2cgKmhpZiwgY29uc3Qgdm9pZCAqYnVmKQotewotCWNvbnN0 IHN0cnVjdCBoaWZfaW5kX2V4Y2VwdGlvbiAqYm9keSA9IGJ1ZjsKLQlpbnQgdHlwZSA9IGxlMzJf dG9fY3B1KGJvZHktPnR5cGUpOwotCi0JaWYgKHR5cGUgPT0gNCkKLQkJZGV2X2Vycih3ZGV2LT5k ZXYsICJmaXJtd2FyZSBhc3NlcnQgJWRcbiIsCi0JCQlsZTMyX3RvX2NwdXAoKF9fbGUzMiAqKWJv ZHktPmRhdGEpKTsKLQllbHNlCi0JCWRldl9lcnIod2Rldi0+ZGV2LCAiZmlybXdhcmUgZXhjZXB0 aW9uXG4iKTsKLQlwcmludF9oZXhfZHVtcChLRVJOX0lORk8sICJoaWY6ICIsIERVTVBfUFJFRklY X09GRlNFVCwKLQkJICAgICAgIDE2LCAxLCBoaWYsIGxlMTZfdG9fY3B1KGhpZi0+bGVuKSwgZmFs c2UpOwotCXdkZXYtPmNoaXBfZnJvemVuID0gdHJ1ZTsKLQotCXJldHVybiAtMTsKLX0KLQotc3Rh dGljIGNvbnN0IHN0cnVjdCB7Ci0JaW50IG1zZ19pZDsKLQlpbnQgKCpoYW5kbGVyKShzdHJ1Y3Qg d2Z4X2RldiAqd2RldiwKLQkJICAgICAgIGNvbnN0IHN0cnVjdCBoaWZfbXNnICpoaWYsIGNvbnN0 IHZvaWQgKmJ1Zik7Ci19IGhpZl9oYW5kbGVyc1tdID0gewotCS8qIENvbmZpcm1hdGlvbnMgKi8K LQl7IEhJRl9DTkZfSURfVFgsICAgICAgICAgICAgICAgICAgIGhpZl90eF9jb25maXJtIH0sCi0J eyBISUZfQ05GX0lEX01VTFRJX1RSQU5TTUlULCAgICAgICBoaWZfbXVsdGlfdHhfY29uZmlybSB9 LAotCS8qIEluZGljYXRpb25zICovCi0JeyBISUZfSU5EX0lEX1NUQVJUVVAsICAgICAgICAgICAg ICBoaWZfc3RhcnR1cF9pbmRpY2F0aW9uIH0sCi0JeyBISUZfSU5EX0lEX1dBS0VVUCwgICAgICAg ICAgICAgICBoaWZfd2FrZXVwX2luZGljYXRpb24gfSwKLQl7IEhJRl9JTkRfSURfSk9JTl9DT01Q TEVURSwgICAgICAgIGhpZl9qb2luX2NvbXBsZXRlX2luZGljYXRpb24gfSwKLQl7IEhJRl9JTkRf SURfU0VUX1BNX01PREVfQ01QTCwgICAgIGhpZl9wbV9tb2RlX2NvbXBsZXRlX2luZGljYXRpb24g fSwKLQl7IEhJRl9JTkRfSURfU0NBTl9DTVBMLCAgICAgICAgICAgIGhpZl9zY2FuX2NvbXBsZXRl X2luZGljYXRpb24gfSwKLQl7IEhJRl9JTkRfSURfU1VTUEVORF9SRVNVTUVfVFgsICAgIGhpZl9z dXNwZW5kX3Jlc3VtZV9pbmRpY2F0aW9uIH0sCi0JeyBISUZfSU5EX0lEX0VWRU5ULCAgICAgICAg ICAgICAgICBoaWZfZXZlbnRfaW5kaWNhdGlvbiB9LAotCXsgSElGX0lORF9JRF9HRU5FUklDLCAg ICAgICAgICAgICAgaGlmX2dlbmVyaWNfaW5kaWNhdGlvbiB9LAotCXsgSElGX0lORF9JRF9FUlJP UiwgICAgICAgICAgICAgICAgaGlmX2Vycm9yX2luZGljYXRpb24gfSwKLQl7IEhJRl9JTkRfSURf RVhDRVBUSU9OLCAgICAgICAgICAgIGhpZl9leGNlcHRpb25faW5kaWNhdGlvbiB9LAotCS8qIEZJ WE1FOiBhbGxvY2F0ZSBza2JfcCBmcm9tIGhpZl9yZWNlaXZlX2luZGljYXRpb24gYW5kIG1ha2Ug aXQgZ2VuZXJpYyAqLwotCS8veyBISUZfSU5EX0lEX1JYLCAgICAgICAgICAgICAgICAgaGlmX3Jl Y2VpdmVfaW5kaWNhdGlvbiB9LAotfTsKLQotdm9pZCB3ZnhfaGFuZGxlX3J4KHN0cnVjdCB3Znhf ZGV2ICp3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCWludCBpOwotCWNvbnN0IHN0cnVj dCBoaWZfbXNnICpoaWYgPSAoY29uc3Qgc3RydWN0IGhpZl9tc2cgKilza2ItPmRhdGE7Ci0JaW50 IGhpZl9pZCA9IGhpZi0+aWQ7Ci0KLQlpZiAoaGlmX2lkID09IEhJRl9JTkRfSURfUlgpIHsKLQkJ LyogaGlmX3JlY2VpdmVfaW5kaWNhdGlvbiB0YWtlIGNhcmUgb2Ygc2tiIGxpZmV0aW1lICovCi0J CWhpZl9yZWNlaXZlX2luZGljYXRpb24od2RldiwgaGlmLCBoaWYtPmJvZHksIHNrYik7Ci0JCXJl dHVybjsKLQl9Ci0JLyogTm90ZTogbXV0ZXhfaXNfbG9jayBjYXVzZSBhbiBpbXBsaWNpdCBtZW1v cnkgYmFycmllciB0aGF0IHByb3RlY3QKLQkgKiBidWZfc2VuZAotCSAqLwotCWlmIChtdXRleF9p c19sb2NrZWQoJndkZXYtPmhpZl9jbWQubG9jaykgJiYKLQkgICAgd2Rldi0+aGlmX2NtZC5idWZf c2VuZCAmJgotCSAgICB3ZGV2LT5oaWZfY21kLmJ1Zl9zZW5kLT5pZCA9PSBoaWZfaWQpIHsKLQkJ aGlmX2dlbmVyaWNfY29uZmlybSh3ZGV2LCBoaWYsIGhpZi0+Ym9keSk7Ci0JCWdvdG8gZnJlZTsK LQl9Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaGlmX2hhbmRsZXJzKTsgaSsrKSB7Ci0J CWlmIChoaWZfaGFuZGxlcnNbaV0ubXNnX2lkID09IGhpZl9pZCkgewotCQkJaWYgKGhpZl9oYW5k bGVyc1tpXS5oYW5kbGVyKQotCQkJCWhpZl9oYW5kbGVyc1tpXS5oYW5kbGVyKHdkZXYsIGhpZiwg aGlmLT5ib2R5KTsKLQkJCWdvdG8gZnJlZTsKLQkJfQotCX0KLQlpZiAoaGlmX2lkICYgMHg4MCkK LQkJZGV2X2Vycih3ZGV2LT5kZXYsICJ1bnN1cHBvcnRlZCBISUYgaW5kaWNhdGlvbjogSUQgJTAy eFxuIiwKLQkJCWhpZl9pZCk7Ci0JZWxzZQotCQlkZXZfZXJyKHdkZXYtPmRldiwgInVuZXhwZWN0 ZWQgSElGIGNvbmZpcm1hdGlvbjogSUQgJTAyeFxuIiwKLQkJCWhpZl9pZCk7Ci1mcmVlOgotCWRl dl9rZnJlZV9za2Ioc2tiKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZngvaGlm X3J4LmggYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl9yeC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCA5NjU0M2I4MWZhNzcuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdp bmcvd2Z4L2hpZl9yeC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLyogU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwotLyoKLSAqIEhhbmRsaW5nIG9mIHRo ZSBjaGlwLXRvLWhvc3QgZXZlbnRzIChha2EgaW5kaWNhdGlvbnMpIG9mIHRoZSBoYXJkd2FyZSBB UEkuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMTksIFNpbGljb24gTGFib3JhdG9yaWVz LCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCi0gKiBDb3B5cmlnaHQg KEMpIDIwMTAsIFNULUVyaWNzc29uIFNBCi0gKi8KLSNpZm5kZWYgV0ZYX0hJRl9SWF9ICi0jZGVm aW5lIFdGWF9ISUZfUlhfSAotCi1zdHJ1Y3Qgd2Z4X2RldjsKLXN0cnVjdCBza19idWZmOwotCi12 b2lkIHdmeF9oYW5kbGVfcngoc3RydWN0IHdmeF9kZXYgKndkZXYsIHN0cnVjdCBza19idWZmICpz a2IpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3R4LmMg Yi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl90eC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAyZmQ4YmJkMzZlMjUuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4 L2hpZl90eC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTEzICswLDAgQEAKLS8vIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLS8qCi0gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUg aG9zdC10by1jaGlwIGNvbW1hbmRzIChha2EgcmVxdWVzdC9jb25maXJtYXRpb24pIG9mIHRoZQot ICogaGFyZHdhcmUgQVBJLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwLCBTaWxpY29u IExhYm9yYXRvcmllcywgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmljc3Nvbgot ICovCi0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLQotI2luY2x1ZGUgImhpZl90eC5o IgotI2luY2x1ZGUgIndmeC5oIgotI2luY2x1ZGUgImJoLmgiCi0jaW5jbHVkZSAiaHdpby5oIgot I2luY2x1ZGUgImRlYnVnLmgiCi0jaW5jbHVkZSAic3RhLmgiCi0KLXZvaWQgd2Z4X2luaXRfaGlm X2NtZChzdHJ1Y3Qgd2Z4X2hpZl9jbWQgKmhpZl9jbWQpCi17Ci0JaW5pdF9jb21wbGV0aW9uKCZo aWZfY21kLT5yZWFkeSk7Ci0JaW5pdF9jb21wbGV0aW9uKCZoaWZfY21kLT5kb25lKTsKLQltdXRl eF9pbml0KCZoaWZfY21kLT5sb2NrKTsKLX0KLQotc3RhdGljIHZvaWQgd2Z4X2ZpbGxfaGVhZGVy KHN0cnVjdCBoaWZfbXNnICpoaWYsIGludCBpZl9pZCwKLQkJCSAgICB1bnNpZ25lZCBpbnQgY21k LCBzaXplX3Qgc2l6ZSkKLXsKLQlpZiAoaWZfaWQgPT0gLTEpCi0JCWlmX2lkID0gMjsKLQotCVdB Uk4oY21kID4gMHgzZiwgImludmFsaWQgaGFyZHdhcmUgY29tbWFuZCAlIy4yeCIsIGNtZCk7Ci0J V0FSTihzaXplID4gMHhGRkYsICJyZXF1ZXN0ZWQgYnVmZmVyIGlzIHRvbyBsYXJnZTogJXp1IGJ5 dGVzIiwgc2l6ZSk7Ci0JV0FSTihpZl9pZCA+IDB4MywgImludmFsaWQgaW50ZXJmYWNlIElEICVk IiwgaWZfaWQpOwotCi0JaGlmLT5sZW4gPSBjcHVfdG9fbGUxNihzaXplICsgNCk7Ci0JaGlmLT5p ZCA9IGNtZDsKLQloaWYtPmludGVyZmFjZSA9IGlmX2lkOwotfQotCi1zdGF0aWMgdm9pZCAqd2Z4 X2FsbG9jX2hpZihzaXplX3QgYm9keV9sZW4sIHN0cnVjdCBoaWZfbXNnICoqaGlmKQotewotCSpo aWYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaGlmX21zZykgKyBib2R5X2xlbiwgR0ZQX0tFUk5F TCk7Ci0JaWYgKCpoaWYpCi0JCXJldHVybiAoKmhpZiktPmJvZHk7Ci0JZWxzZQotCQlyZXR1cm4g TlVMTDsKLX0KLQotaW50IHdmeF9jbWRfc2VuZChzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwgc3RydWN0 IGhpZl9tc2cgKnJlcXVlc3QsCi0JCSB2b2lkICpyZXBseSwgc2l6ZV90IHJlcGx5X2xlbiwgYm9v bCBub19yZXBseSkKLXsKLQljb25zdCBjaGFyICptaWJfbmFtZSA9ICIiOwotCWNvbnN0IGNoYXIg Km1pYl9zZXAgPSAiIjsKLQlpbnQgY21kID0gcmVxdWVzdC0+aWQ7Ci0JaW50IHZpZiA9IHJlcXVl c3QtPmludGVyZmFjZTsKLQlpbnQgcmV0OwotCi0JLyogRG8gbm90IHdhaXQgZm9yIGFueSByZXBs eSBpZiBjaGlwIGlzIGZyb3plbiAqLwotCWlmICh3ZGV2LT5jaGlwX2Zyb3plbikKLQkJcmV0dXJu IC1FVElNRURPVVQ7Ci0KLQltdXRleF9sb2NrKCZ3ZGV2LT5oaWZfY21kLmxvY2spOwotCVdBUk4o d2Rldi0+aGlmX2NtZC5idWZfc2VuZCwgImRhdGEgbG9ja2luZyBlcnJvciIpOwotCi0JLyogTm90 ZTogY2FsbCB0byBjb21wbGV0ZSgpIGJlbG93IGhhcyBhbiBpbXBsaWNpdCBtZW1vcnkgYmFycmll ciB0aGF0Ci0JICogaG9wZWZ1bGx5IHByb3RlY3QgYnVmX3NlbmQKLQkgKi8KLQl3ZGV2LT5oaWZf Y21kLmJ1Zl9zZW5kID0gcmVxdWVzdDsKLQl3ZGV2LT5oaWZfY21kLmJ1Zl9yZWN2ID0gcmVwbHk7 Ci0Jd2Rldi0+aGlmX2NtZC5sZW5fcmVjdiA9IHJlcGx5X2xlbjsKLQljb21wbGV0ZSgmd2Rldi0+ aGlmX2NtZC5yZWFkeSk7Ci0KLQl3ZnhfYmhfcmVxdWVzdF90eCh3ZGV2KTsKLQotCWlmIChub19y ZXBseSkgewotCQkvKiBDaGlwIHdvbid0IHJlcGx5LiBHaXZlIGVub3VnaCB0aW1lIHRvIHRoZSB3 cSB0byBzZW5kIHRoZQotCQkgKiBidWZmZXIuCi0JCSAqLwotCQltc2xlZXAoMTAwKTsKLQkJd2Rl di0+aGlmX2NtZC5idWZfc2VuZCA9IE5VTEw7Ci0JCW11dGV4X3VubG9jaygmd2Rldi0+aGlmX2Nt ZC5sb2NrKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKHdkZXYtPnBvbGxfaXJxKQotCQl3Znhf YmhfcG9sbF9pcnEod2Rldik7Ci0KLQlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQo JndkZXYtPmhpZl9jbWQuZG9uZSwgMSAqIEhaKTsKLQlpZiAoIXJldCkgewotCQlkZXZfZXJyKHdk ZXYtPmRldiwgImNoaXAgaXMgYWJub3JtYWxseSBsb25nIHRvIGFuc3dlclxuIik7Ci0JCXJlaW5p dF9jb21wbGV0aW9uKCZ3ZGV2LT5oaWZfY21kLnJlYWR5KTsKLQkJcmV0ID0gd2FpdF9mb3JfY29t cGxldGlvbl90aW1lb3V0KCZ3ZGV2LT5oaWZfY21kLmRvbmUsIDMgKiBIWik7Ci0JfQotCWlmICgh cmV0KSB7Ci0JCWRldl9lcnIod2Rldi0+ZGV2LCAiY2hpcCBkaWQgbm90IGFuc3dlclxuIik7Ci0J CXdmeF9wZW5kaW5nX2R1bXBfb2xkX2ZyYW1lcyh3ZGV2LCAzMDAwKTsKLQkJd2Rldi0+Y2hpcF9m cm96ZW4gPSB0cnVlOwotCQlyZWluaXRfY29tcGxldGlvbigmd2Rldi0+aGlmX2NtZC5kb25lKTsK LQkJcmV0ID0gLUVUSU1FRE9VVDsKLQl9IGVsc2UgewotCQlyZXQgPSB3ZGV2LT5oaWZfY21kLnJl dDsKLQl9Ci0KLQl3ZGV2LT5oaWZfY21kLmJ1Zl9zZW5kID0gTlVMTDsKLQltdXRleF91bmxvY2so JndkZXYtPmhpZl9jbWQubG9jayk7Ci0KLQlpZiAocmV0ICYmCi0JICAgIChjbWQgPT0gSElGX1JF UV9JRF9SRUFEX01JQiB8fCBjbWQgPT0gSElGX1JFUV9JRF9XUklURV9NSUIpKSB7Ci0JCW1pYl9u YW1lID0gZ2V0X21pYl9uYW1lKCgodTE2ICopcmVxdWVzdClbMl0pOwotCQltaWJfc2VwID0gIi8i OwotCX0KLQlpZiAocmV0IDwgMCkKLQkJZGV2X2Vycih3ZGV2LT5kZXYsICJoYXJkd2FyZSByZXF1 ZXN0ICVzJXMlcyAoJSMuMngpIG9uIHZpZiAlZCByZXR1cm5lZCBlcnJvciAlZFxuIiwKLQkJCWdl dF9oaWZfbmFtZShjbWQpLCBtaWJfc2VwLCBtaWJfbmFtZSwgY21kLCB2aWYsIHJldCk7Ci0JaWYg KHJldCA+IDApCi0JCWRldl93YXJuKHdkZXYtPmRldiwgImhhcmR3YXJlIHJlcXVlc3QgJXMlcyVz ICglIy4yeCkgb24gdmlmICVkIHJldHVybmVkIHN0YXR1cyAlZFxuIiwKLQkJCSBnZXRfaGlmX25h bWUoY21kKSwgbWliX3NlcCwgbWliX25hbWUsIGNtZCwgdmlmLCByZXQpOwotCi0JcmV0dXJuIHJl dDsKLX0KLQotLyogVGhpcyBmdW5jdGlvbiBpcyBzcGVjaWFsLiBBZnRlciBISUZfUkVRX0lEX1NI VVRfRE9XTiwgY2hpcCB3b24ndCByZXBseSB0byBhbnkKLSAqIHJlcXVlc3QgYW55bW9yZS4gT2J2 aW91c2x5LCBvbmx5IGNhbGwgdGhpcyBmdW5jdGlvbiBkdXJpbmcgZGV2aWNlIHVucmVnaXN0ZXIu Ci0gKi8KLWludCBoaWZfc2h1dGRvd24oc3RydWN0IHdmeF9kZXYgKndkZXYpCi17Ci0JaW50IHJl dDsKLQlzdHJ1Y3QgaGlmX21zZyAqaGlmOwotCi0Jd2Z4X2FsbG9jX2hpZigwLCAmaGlmKTsKLQlp ZiAoIWhpZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0Jd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgLTEsIEhJ Rl9SRVFfSURfU0hVVF9ET1dOLCAwKTsKLQlyZXQgPSB3ZnhfY21kX3NlbmQod2RldiwgaGlmLCBO VUxMLCAwLCB0cnVlKTsKLQlpZiAod2Rldi0+cGRhdGEuZ3Bpb193YWtldXApCi0JCWdwaW9kX3Nl dF92YWx1ZSh3ZGV2LT5wZGF0YS5ncGlvX3dha2V1cCwgMCk7Ci0JZWxzZQotCQljb250cm9sX3Jl Z193cml0ZSh3ZGV2LCAwKTsKLQlrZnJlZShoaWYpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCBo aWZfY29uZmlndXJhdGlvbihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgY29uc3QgdTggKmNvbmYsIHNp emVfdCBsZW4pCi17Ci0JaW50IHJldDsKLQlzaXplX3QgYnVmX2xlbiA9IHNpemVvZihzdHJ1Y3Qg aGlmX3JlcV9jb25maWd1cmF0aW9uKSArIGxlbjsKLQlzdHJ1Y3QgaGlmX21zZyAqaGlmOwotCXN0 cnVjdCBoaWZfcmVxX2NvbmZpZ3VyYXRpb24gKmJvZHkgPSB3ZnhfYWxsb2NfaGlmKGJ1Zl9sZW4s ICZoaWYpOwotCi0JaWYgKCFoaWYpCi0JCXJldHVybiAtRU5PTUVNOwotCWJvZHktPmxlbmd0aCA9 IGNwdV90b19sZTE2KGxlbik7Ci0JbWVtY3B5KGJvZHktPnBkc19kYXRhLCBjb25mLCBsZW4pOwot CXdmeF9maWxsX2hlYWRlcihoaWYsIC0xLCBISUZfUkVRX0lEX0NPTkZJR1VSQVRJT04sIGJ1Zl9s ZW4pOwotCXJldCA9IHdmeF9jbWRfc2VuZCh3ZGV2LCBoaWYsIE5VTEwsIDAsIGZhbHNlKTsKLQlr ZnJlZShoaWYpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCBoaWZfcmVzZXQoc3RydWN0IHdmeF92 aWYgKnd2aWYsIGJvb2wgcmVzZXRfc3RhdCkKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBoaWZfbXNn ICpoaWY7Ci0Jc3RydWN0IGhpZl9yZXFfcmVzZXQgKmJvZHkgPSB3ZnhfYWxsb2NfaGlmKHNpemVv ZigqYm9keSksICZoaWYpOwotCi0JaWYgKCFoaWYpCi0JCXJldHVybiAtRU5PTUVNOwotCWJvZHkt PnJlc2V0X3N0YXQgPSByZXNldF9zdGF0OwotCXdmeF9maWxsX2hlYWRlcihoaWYsIHd2aWYtPmlk LCBISUZfUkVRX0lEX1JFU0VULCBzaXplb2YoKmJvZHkpKTsKLQlyZXQgPSB3ZnhfY21kX3NlbmQo d3ZpZi0+d2RldiwgaGlmLCBOVUxMLCAwLCBmYWxzZSk7Ci0Ja2ZyZWUoaGlmKTsKLQlyZXR1cm4g cmV0OwotfQotCi1pbnQgaGlmX3JlYWRfbWliKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgdmlm X2lkLCB1MTYgbWliX2lkLAotCQkgdm9pZCAqdmFsLCBzaXplX3QgdmFsX2xlbikKLXsKLQlpbnQg cmV0OwotCXN0cnVjdCBoaWZfbXNnICpoaWY7Ci0JaW50IGJ1Zl9sZW4gPSBzaXplb2Yoc3RydWN0 IGhpZl9jbmZfcmVhZF9taWIpICsgdmFsX2xlbjsKLQlzdHJ1Y3QgaGlmX3JlcV9yZWFkX21pYiAq Ym9keSA9IHdmeF9hbGxvY19oaWYoc2l6ZW9mKCpib2R5KSwgJmhpZik7Ci0Jc3RydWN0IGhpZl9j bmZfcmVhZF9taWIgKnJlcGx5ID0ga21hbGxvYyhidWZfbGVuLCBHRlBfS0VSTkVMKTsKLQotCWlm ICghYm9keSB8fCAhcmVwbHkpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQot CWJvZHktPm1pYl9pZCA9IGNwdV90b19sZTE2KG1pYl9pZCk7Ci0Jd2Z4X2ZpbGxfaGVhZGVyKGhp ZiwgdmlmX2lkLCBISUZfUkVRX0lEX1JFQURfTUlCLCBzaXplb2YoKmJvZHkpKTsKLQlyZXQgPSB3 ZnhfY21kX3NlbmQod2RldiwgaGlmLCByZXBseSwgYnVmX2xlbiwgZmFsc2UpOwotCi0JaWYgKCFy ZXQgJiYgbWliX2lkICE9IGxlMTZfdG9fY3B1KHJlcGx5LT5taWJfaWQpKSB7Ci0JCWRldl93YXJu KHdkZXYtPmRldiwgIiVzOiBjb25maXJtYXRpb24gbWlzbWF0Y2ggcmVxdWVzdFxuIiwKLQkJCSBf X2Z1bmNfXyk7Ci0JCXJldCA9IC1FSU87Ci0JfQotCWlmIChyZXQgPT0gLUVOT01FTSkKLQkJZGV2 X2Vycih3ZGV2LT5kZXYsICJidWZmZXIgaXMgdG9vIHNtYWxsIHRvIHJlY2VpdmUgJXMgKCV6dSA8 ICVkKVxuIiwKLQkJCWdldF9taWJfbmFtZShtaWJfaWQpLCB2YWxfbGVuLAotCQkJbGUxNl90b19j cHUocmVwbHktPmxlbmd0aCkpOwotCWlmICghcmV0KQotCQltZW1jcHkodmFsLCAmcmVwbHktPm1p Yl9kYXRhLCBsZTE2X3RvX2NwdShyZXBseS0+bGVuZ3RoKSk7Ci0JZWxzZQotCQltZW1zZXQodmFs LCAweEZGLCB2YWxfbGVuKTsKLW91dDoKLQlrZnJlZShoaWYpOwotCWtmcmVlKHJlcGx5KTsKLQly ZXR1cm4gcmV0OwotfQotCi1pbnQgaGlmX3dyaXRlX21pYihzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwg aW50IHZpZl9pZCwgdTE2IG1pYl9pZCwKLQkJICB2b2lkICp2YWwsIHNpemVfdCB2YWxfbGVuKQot ewotCWludCByZXQ7Ci0Jc3RydWN0IGhpZl9tc2cgKmhpZjsKLQlpbnQgYnVmX2xlbiA9IHNpemVv ZihzdHJ1Y3QgaGlmX3JlcV93cml0ZV9taWIpICsgdmFsX2xlbjsKLQlzdHJ1Y3QgaGlmX3JlcV93 cml0ZV9taWIgKmJvZHkgPSB3ZnhfYWxsb2NfaGlmKGJ1Zl9sZW4sICZoaWYpOwotCi0JaWYgKCFo aWYpCi0JCXJldHVybiAtRU5PTUVNOwotCWJvZHktPm1pYl9pZCA9IGNwdV90b19sZTE2KG1pYl9p ZCk7Ci0JYm9keS0+bGVuZ3RoID0gY3B1X3RvX2xlMTYodmFsX2xlbik7Ci0JbWVtY3B5KCZib2R5 LT5taWJfZGF0YSwgdmFsLCB2YWxfbGVuKTsKLQl3ZnhfZmlsbF9oZWFkZXIoaGlmLCB2aWZfaWQs IEhJRl9SRVFfSURfV1JJVEVfTUlCLCBidWZfbGVuKTsKLQlyZXQgPSB3ZnhfY21kX3NlbmQod2Rl diwgaGlmLCBOVUxMLCAwLCBmYWxzZSk7Ci0Ja2ZyZWUoaGlmKTsKLQlyZXR1cm4gcmV0OwotfQot Ci1pbnQgaGlmX3NjYW4oc3RydWN0IHdmeF92aWYgKnd2aWYsIHN0cnVjdCBjZmc4MDIxMV9zY2Fu X3JlcXVlc3QgKnJlcSwKLQkgICAgIGludCBjaGFuX3N0YXJ0X2lkeCwgaW50IGNoYW5fbnVtKQot ewotCWludCByZXQsIGk7Ci0Jc3RydWN0IGhpZl9tc2cgKmhpZjsKLQlzaXplX3QgYnVmX2xlbiA9 Ci0JCXNpemVvZihzdHJ1Y3QgaGlmX3JlcV9zdGFydF9zY2FuX2FsdCkgKyBjaGFuX251bSAqIHNp emVvZih1OCk7Ci0Jc3RydWN0IGhpZl9yZXFfc3RhcnRfc2Nhbl9hbHQgKmJvZHkgPSB3ZnhfYWxs b2NfaGlmKGJ1Zl9sZW4sICZoaWYpOwotCi0JV0FSTihjaGFuX251bSA+IEhJRl9BUElfTUFYX05C X0NIQU5ORUxTLCAiaW52YWxpZCBwYXJhbXMiKTsKLQlXQVJOKHJlcS0+bl9zc2lkcyA+IEhJRl9B UElfTUFYX05CX1NTSURTLCAiaW52YWxpZCBwYXJhbXMiKTsKLQotCWlmICghaGlmKQotCQlyZXR1 cm4gLUVOT01FTTsKLQlmb3IgKGkgPSAwOyBpIDwgcmVxLT5uX3NzaWRzOyBpKyspIHsKLQkJbWVt Y3B5KGJvZHktPnNzaWRfZGVmW2ldLnNzaWQsIHJlcS0+c3NpZHNbaV0uc3NpZCwKLQkJICAgICAg IElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pOwotCQlib2R5LT5zc2lkX2RlZltpXS5zc2lkX2xlbmd0 aCA9Ci0JCQljcHVfdG9fbGUzMihyZXEtPnNzaWRzW2ldLnNzaWRfbGVuKTsKLQl9Ci0JYm9keS0+ bnVtX29mX3NzaWRzID0gSElGX0FQSV9NQVhfTkJfU1NJRFM7Ci0JYm9keS0+bWFpbnRhaW5fY3Vy cmVudF9ic3MgPSAxOwotCWJvZHktPmRpc2FsbG93X3BzID0gMTsKLQlib2R5LT50eF9wb3dlcl9s ZXZlbCA9Ci0JCWNwdV90b19sZTMyKHJlcS0+Y2hhbm5lbHNbY2hhbl9zdGFydF9pZHhdLT5tYXhf cG93ZXIpOwotCWJvZHktPm51bV9vZl9jaGFubmVscyA9IGNoYW5fbnVtOwotCWZvciAoaSA9IDA7 IGkgPCBjaGFuX251bTsgaSsrKQotCQlib2R5LT5jaGFubmVsX2xpc3RbaV0gPQotCQkJcmVxLT5j aGFubmVsc1tpICsgY2hhbl9zdGFydF9pZHhdLT5od192YWx1ZTsKLQlpZiAocmVxLT5ub19jY2sp Ci0JCWJvZHktPm1heF90cmFuc21pdF9yYXRlID0gQVBJX1JBVEVfSU5ERVhfR182TUJQUzsKLQll bHNlCi0JCWJvZHktPm1heF90cmFuc21pdF9yYXRlID0gQVBJX1JBVEVfSU5ERVhfQl8xTUJQUzsK LQlpZiAocmVxLT5jaGFubmVsc1tjaGFuX3N0YXJ0X2lkeF0tPmZsYWdzICYgSUVFRTgwMjExX0NI QU5fTk9fSVIpIHsKLQkJYm9keS0+bWluX2NoYW5uZWxfdGltZSA9IGNwdV90b19sZTMyKDUwKTsK LQkJYm9keS0+bWF4X2NoYW5uZWxfdGltZSA9IGNwdV90b19sZTMyKDE1MCk7Ci0JfSBlbHNlIHsK LQkJYm9keS0+bWluX2NoYW5uZWxfdGltZSA9IGNwdV90b19sZTMyKDEwKTsKLQkJYm9keS0+bWF4 X2NoYW5uZWxfdGltZSA9IGNwdV90b19sZTMyKDUwKTsKLQkJYm9keS0+bnVtX29mX3Byb2JlX3Jl cXVlc3RzID0gMjsKLQkJYm9keS0+cHJvYmVfZGVsYXkgPSAxMDA7Ci0JfQotCi0Jd2Z4X2ZpbGxf aGVhZGVyKGhpZiwgd3ZpZi0+aWQsIEhJRl9SRVFfSURfU1RBUlRfU0NBTiwgYnVmX2xlbik7Ci0J cmV0ID0gd2Z4X2NtZF9zZW5kKHd2aWYtPndkZXYsIGhpZiwgTlVMTCwgMCwgZmFsc2UpOwotCWtm cmVlKGhpZik7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IGhpZl9zdG9wX3NjYW4oc3RydWN0IHdm eF92aWYgKnd2aWYpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgaGlmX21zZyAqaGlmOwotCS8qIGJv ZHkgYXNzb2NpYXRlZCB0byBISUZfUkVRX0lEX1NUT1BfU0NBTiBpcyBlbXB0eSAqLwotCXdmeF9h bGxvY19oaWYoMCwgJmhpZik7Ci0KLQlpZiAoIWhpZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0Jd2Z4 X2ZpbGxfaGVhZGVyKGhpZiwgd3ZpZi0+aWQsIEhJRl9SRVFfSURfU1RPUF9TQ0FOLCAwKTsKLQly ZXQgPSB3ZnhfY21kX3NlbmQod3ZpZi0+d2RldiwgaGlmLCBOVUxMLCAwLCBmYWxzZSk7Ci0Ja2Zy ZWUoaGlmKTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgaGlmX2pvaW4oc3RydWN0IHdmeF92aWYg Knd2aWYsIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmNvbmYsCi0JICAgICBzdHJ1 Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsIGNvbnN0IHU4ICpzc2lkLCBpbnQgc3NpZGxl bikKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBoaWZfbXNnICpoaWY7Ci0Jc3RydWN0IGhpZl9yZXFf am9pbiAqYm9keSA9IHdmeF9hbGxvY19oaWYoc2l6ZW9mKCpib2R5KSwgJmhpZik7Ci0KLQlXQVJO X09OKCFjb25mLT5iZWFjb25faW50KTsKLQlXQVJOX09OKCFjb25mLT5iYXNpY19yYXRlcyk7Ci0J V0FSTl9PTihzaXplb2YoYm9keS0+c3NpZCkgPCBzc2lkbGVuKTsKLQlXQVJOKCFjb25mLT5pYnNz X2pvaW5lZCAmJiAhc3NpZGxlbiwgImpvaW5pbmcgYW4gdW5rbm93biBCU1MiKTsKLQlpZiAoIWhp ZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0JYm9keS0+aW5mcmFzdHJ1Y3R1cmVfYnNzX21vZGUgPSAh Y29uZi0+aWJzc19qb2luZWQ7Ci0JYm9keS0+c2hvcnRfcHJlYW1ibGUgPSBjb25mLT51c2Vfc2hv cnRfcHJlYW1ibGU7Ci0JYm9keS0+cHJvYmVfZm9yX2pvaW4gPSAhKGNoYW5uZWwtPmZsYWdzICYg SUVFRTgwMjExX0NIQU5fTk9fSVIpOwotCWJvZHktPmNoYW5uZWxfbnVtYmVyID0gY2hhbm5lbC0+ aHdfdmFsdWU7Ci0JYm9keS0+YmVhY29uX2ludGVydmFsID0gY3B1X3RvX2xlMzIoY29uZi0+YmVh Y29uX2ludCk7Ci0JYm9keS0+YmFzaWNfcmF0ZV9zZXQgPQotCQljcHVfdG9fbGUzMih3ZnhfcmF0 ZV9tYXNrX3RvX2h3KHd2aWYtPndkZXYsIGNvbmYtPmJhc2ljX3JhdGVzKSk7Ci0JbWVtY3B5KGJv ZHktPmJzc2lkLCBjb25mLT5ic3NpZCwgc2l6ZW9mKGJvZHktPmJzc2lkKSk7Ci0JaWYgKHNzaWQp IHsKLQkJYm9keS0+c3NpZF9sZW5ndGggPSBjcHVfdG9fbGUzMihzc2lkbGVuKTsKLQkJbWVtY3B5 KGJvZHktPnNzaWQsIHNzaWQsIHNzaWRsZW4pOwotCX0KLQl3ZnhfZmlsbF9oZWFkZXIoaGlmLCB3 dmlmLT5pZCwgSElGX1JFUV9JRF9KT0lOLCBzaXplb2YoKmJvZHkpKTsKLQlyZXQgPSB3ZnhfY21k X3NlbmQod3ZpZi0+d2RldiwgaGlmLCBOVUxMLCAwLCBmYWxzZSk7Ci0Ja2ZyZWUoaGlmKTsKLQly ZXR1cm4gcmV0OwotfQotCi1pbnQgaGlmX3NldF9ic3NfcGFyYW1zKHN0cnVjdCB3ZnhfdmlmICp3 dmlmLCBpbnQgYWlkLCBpbnQgYmVhY29uX2xvc3RfY291bnQpCi17Ci0JaW50IHJldDsKLQlzdHJ1 Y3QgaGlmX21zZyAqaGlmOwotCXN0cnVjdCBoaWZfcmVxX3NldF9ic3NfcGFyYW1zICpib2R5ID0K LQkJd2Z4X2FsbG9jX2hpZihzaXplb2YoKmJvZHkpLCAmaGlmKTsKLQotCWlmICghaGlmKQotCQly ZXR1cm4gLUVOT01FTTsKLQlib2R5LT5haWQgPSBjcHVfdG9fbGUxNihhaWQpOwotCWJvZHktPmJl YWNvbl9sb3N0X2NvdW50ID0gYmVhY29uX2xvc3RfY291bnQ7Ci0Jd2Z4X2ZpbGxfaGVhZGVyKGhp Ziwgd3ZpZi0+aWQsIEhJRl9SRVFfSURfU0VUX0JTU19QQVJBTVMsCi0JCQlzaXplb2YoKmJvZHkp KTsKLQlyZXQgPSB3ZnhfY21kX3NlbmQod3ZpZi0+d2RldiwgaGlmLCBOVUxMLCAwLCBmYWxzZSk7 Ci0Ja2ZyZWUoaGlmKTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgaGlmX2FkZF9rZXkoc3RydWN0 IHdmeF9kZXYgKndkZXYsIGNvbnN0IHN0cnVjdCBoaWZfcmVxX2FkZF9rZXkgKmFyZykKLXsKLQlp bnQgcmV0OwotCXN0cnVjdCBoaWZfbXNnICpoaWY7Ci0JLyogRklYTUU6IG9ubHkgc2VuZCBuZWNl c3NhcnkgYml0cyAqLwotCXN0cnVjdCBoaWZfcmVxX2FkZF9rZXkgKmJvZHkgPSB3ZnhfYWxsb2Nf aGlmKHNpemVvZigqYm9keSksICZoaWYpOwotCi0JaWYgKCFoaWYpCi0JCXJldHVybiAtRU5PTUVN OwotCS8qIEZJWE1FOiBzd2FwIGJ5dGVzIGFzIG5lY2Vzc2FyeSBpbiBib2R5ICovCi0JbWVtY3B5 KGJvZHksIGFyZywgc2l6ZW9mKCpib2R5KSk7Ci0JaWYgKHdmeF9hcGlfb2xkZXJfdGhhbih3ZGV2 LCAxLCA1KSkKLQkJLyogTGVnYWN5IGZpcm13YXJlcyBleHBlY3QgdGhhdCBhZGRfa2V5IHRvIGJl IHNlbnQgb24gcmlnaHQKLQkJICogaW50ZXJmYWNlLgotCQkgKi8KLQkJd2Z4X2ZpbGxfaGVhZGVy KGhpZiwgYXJnLT5pbnRfaWQsIEhJRl9SRVFfSURfQUREX0tFWSwKLQkJCQlzaXplb2YoKmJvZHkp KTsKLQllbHNlCi0JCXdmeF9maWxsX2hlYWRlcihoaWYsIC0xLCBISUZfUkVRX0lEX0FERF9LRVks IHNpemVvZigqYm9keSkpOwotCXJldCA9IHdmeF9jbWRfc2VuZCh3ZGV2LCBoaWYsIE5VTEwsIDAs IGZhbHNlKTsKLQlrZnJlZShoaWYpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCBoaWZfcmVtb3Zl X2tleShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IGlkeCkKLXsKLQlpbnQgcmV0OwotCXN0cnVj dCBoaWZfbXNnICpoaWY7Ci0Jc3RydWN0IGhpZl9yZXFfcmVtb3ZlX2tleSAqYm9keSA9IHdmeF9h bGxvY19oaWYoc2l6ZW9mKCpib2R5KSwgJmhpZik7Ci0KLQlpZiAoIWhpZikKLQkJcmV0dXJuIC1F Tk9NRU07Ci0JYm9keS0+ZW50cnlfaW5kZXggPSBpZHg7Ci0Jd2Z4X2ZpbGxfaGVhZGVyKGhpZiwg LTEsIEhJRl9SRVFfSURfUkVNT1ZFX0tFWSwgc2l6ZW9mKCpib2R5KSk7Ci0JcmV0ID0gd2Z4X2Nt ZF9zZW5kKHdkZXYsIGhpZiwgTlVMTCwgMCwgZmFsc2UpOwotCWtmcmVlKGhpZik7Ci0JcmV0dXJu IHJldDsKLX0KLQotaW50IGhpZl9zZXRfZWRjYV9xdWV1ZV9wYXJhbXMoc3RydWN0IHdmeF92aWYg Knd2aWYsIHUxNiBxdWV1ZSwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVl dWVfcGFyYW1zICphcmcpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgaGlmX21zZyAqaGlmOwotCXN0 cnVjdCBoaWZfcmVxX2VkY2FfcXVldWVfcGFyYW1zICpib2R5ID0gd2Z4X2FsbG9jX2hpZihzaXpl b2YoKmJvZHkpLAotCQkJCQkJCSAgICAgICAmaGlmKTsKLQotCWlmICghYm9keSkKLQkJcmV0dXJu IC1FTk9NRU07Ci0KLQlXQVJOX09OKGFyZy0+YWlmcyA+IDI1NSk7Ci0JaWYgKCFoaWYpCi0JCXJl dHVybiAtRU5PTUVNOwotCWJvZHktPmFpZnNuID0gYXJnLT5haWZzOwotCWJvZHktPmN3X21pbiA9 IGNwdV90b19sZTE2KGFyZy0+Y3dfbWluKTsKLQlib2R5LT5jd19tYXggPSBjcHVfdG9fbGUxNihh cmctPmN3X21heCk7Ci0JYm9keS0+dHhfb3BfbGltaXQgPSBjcHVfdG9fbGUxNihhcmctPnR4b3Ag KiBVU0VDX1BFUl9UWE9QKTsKLQlib2R5LT5xdWV1ZV9pZCA9IDMgLSBxdWV1ZTsKLQkvKiBBUEkg Mi4wIGhhcyBjaGFuZ2VkIHF1ZXVlIElEcyB2YWx1ZXMgKi8KLQlpZiAod2Z4X2FwaV9vbGRlcl90 aGFuKHd2aWYtPndkZXYsIDIsIDApICYmIHF1ZXVlID09IElFRUU4MDIxMV9BQ19CRSkKLQkJYm9k eS0+cXVldWVfaWQgPSBISUZfUVVFVUVfSURfQkFDS0dST1VORDsKLQlpZiAod2Z4X2FwaV9vbGRl cl90aGFuKHd2aWYtPndkZXYsIDIsIDApICYmIHF1ZXVlID09IElFRUU4MDIxMV9BQ19CSykKLQkJ Ym9keS0+cXVldWVfaWQgPSBISUZfUVVFVUVfSURfQkVTVEVGRk9SVDsKLQl3ZnhfZmlsbF9oZWFk ZXIoaGlmLCB3dmlmLT5pZCwgSElGX1JFUV9JRF9FRENBX1FVRVVFX1BBUkFNUywKLQkJCXNpemVv ZigqYm9keSkpOwotCXJldCA9IHdmeF9jbWRfc2VuZCh3dmlmLT53ZGV2LCBoaWYsIE5VTEwsIDAs IGZhbHNlKTsKLQlrZnJlZShoaWYpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCBoaWZfc2V0X3Bt KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBib29sIHBzLCBpbnQgZHluYW1pY19wc190aW1lb3V0KQot ewotCWludCByZXQ7Ci0Jc3RydWN0IGhpZl9tc2cgKmhpZjsKLQlzdHJ1Y3QgaGlmX3JlcV9zZXRf cG1fbW9kZSAqYm9keSA9IHdmeF9hbGxvY19oaWYoc2l6ZW9mKCpib2R5KSwgJmhpZik7Ci0KLQlp ZiAoIWJvZHkpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaWYgKCFoaWYpCi0JCXJldHVybiAtRU5P TUVNOwotCWlmIChwcykgewotCQlib2R5LT5lbnRlcl9wc20gPSAxOwotCQkvKiBGaXJtd2FyZSBk b2VzIG5vdCBzdXBwb3J0IG1vcmUgdGhhbiAxMjhtcyAqLwotCQlib2R5LT5mYXN0X3BzbV9pZGxl X3BlcmlvZCA9IG1pbihkeW5hbWljX3BzX3RpbWVvdXQgKiAyLCAyNTUpOwotCQlpZiAoYm9keS0+ ZmFzdF9wc21faWRsZV9wZXJpb2QpCi0JCQlib2R5LT5mYXN0X3BzbSA9IDE7Ci0JfQotCXdmeF9m aWxsX2hlYWRlcihoaWYsIHd2aWYtPmlkLCBISUZfUkVRX0lEX1NFVF9QTV9NT0RFLCBzaXplb2Yo KmJvZHkpKTsKLQlyZXQgPSB3ZnhfY21kX3NlbmQod3ZpZi0+d2RldiwgaGlmLCBOVUxMLCAwLCBm YWxzZSk7Ci0Ja2ZyZWUoaGlmKTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgaGlmX3N0YXJ0KHN0 cnVjdCB3ZnhfdmlmICp3dmlmLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpjb25m LAotCSAgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCkKLXsKLQlp bnQgcmV0OwotCXN0cnVjdCBoaWZfbXNnICpoaWY7Ci0Jc3RydWN0IGhpZl9yZXFfc3RhcnQgKmJv ZHkgPSB3ZnhfYWxsb2NfaGlmKHNpemVvZigqYm9keSksICZoaWYpOwotCi0JV0FSTl9PTighY29u Zi0+YmVhY29uX2ludCk7Ci0JaWYgKCFoaWYpCi0JCXJldHVybiAtRU5PTUVNOwotCWJvZHktPmR0 aW1fcGVyaW9kID0gY29uZi0+ZHRpbV9wZXJpb2Q7Ci0JYm9keS0+c2hvcnRfcHJlYW1ibGUgPSBj b25mLT51c2Vfc2hvcnRfcHJlYW1ibGU7Ci0JYm9keS0+Y2hhbm5lbF9udW1iZXIgPSBjaGFubmVs LT5od192YWx1ZTsKLQlib2R5LT5iZWFjb25faW50ZXJ2YWwgPSBjcHVfdG9fbGUzMihjb25mLT5i ZWFjb25faW50KTsKLQlib2R5LT5iYXNpY19yYXRlX3NldCA9Ci0JCWNwdV90b19sZTMyKHdmeF9y YXRlX21hc2tfdG9faHcod3ZpZi0+d2RldiwgY29uZi0+YmFzaWNfcmF0ZXMpKTsKLQlib2R5LT5z c2lkX2xlbmd0aCA9IGNvbmYtPnNzaWRfbGVuOwotCW1lbWNweShib2R5LT5zc2lkLCBjb25mLT5z c2lkLCBjb25mLT5zc2lkX2xlbik7Ci0Jd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgd3ZpZi0+aWQsIEhJ Rl9SRVFfSURfU1RBUlQsIHNpemVvZigqYm9keSkpOwotCXJldCA9IHdmeF9jbWRfc2VuZCh3dmlm LT53ZGV2LCBoaWYsIE5VTEwsIDAsIGZhbHNlKTsKLQlrZnJlZShoaWYpOwotCXJldHVybiByZXQ7 Ci19Ci0KLWludCBoaWZfYmVhY29uX3RyYW5zbWl0KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBib29s IGVuYWJsZSkKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBoaWZfbXNnICpoaWY7Ci0Jc3RydWN0IGhp Zl9yZXFfYmVhY29uX3RyYW5zbWl0ICpib2R5ID0gd2Z4X2FsbG9jX2hpZihzaXplb2YoKmJvZHkp LAotCQkJCQkJCSAgICAgJmhpZik7Ci0KLQlpZiAoIWhpZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0J Ym9keS0+ZW5hYmxlX2JlYWNvbmluZyA9IGVuYWJsZSA/IDEgOiAwOwotCXdmeF9maWxsX2hlYWRl cihoaWYsIHd2aWYtPmlkLCBISUZfUkVRX0lEX0JFQUNPTl9UUkFOU01JVCwKLQkJCXNpemVvZigq Ym9keSkpOwotCXJldCA9IHdmeF9jbWRfc2VuZCh3dmlmLT53ZGV2LCBoaWYsIE5VTEwsIDAsIGZh bHNlKTsKLQlrZnJlZShoaWYpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCBoaWZfbWFwX2xpbmso c3RydWN0IHdmeF92aWYgKnd2aWYsIGJvb2wgdW5tYXAsIHU4ICptYWNfYWRkciwgaW50IHN0YV9p ZCwgYm9vbCBtZnApCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgaGlmX21zZyAqaGlmOwotCXN0cnVj dCBoaWZfcmVxX21hcF9saW5rICpib2R5ID0gd2Z4X2FsbG9jX2hpZihzaXplb2YoKmJvZHkpLCAm aGlmKTsKLQotCWlmICghaGlmKQotCQlyZXR1cm4gLUVOT01FTTsKLQlpZiAobWFjX2FkZHIpCi0J CWV0aGVyX2FkZHJfY29weShib2R5LT5tYWNfYWRkciwgbWFjX2FkZHIpOwotCWJvZHktPm1mcGMg PSBtZnAgPyAxIDogMDsKLQlib2R5LT51bm1hcCA9IHVubWFwID8gMSA6IDA7Ci0JYm9keS0+cGVl cl9zdGFfaWQgPSBzdGFfaWQ7Ci0Jd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgd3ZpZi0+aWQsIEhJRl9S RVFfSURfTUFQX0xJTkssIHNpemVvZigqYm9keSkpOwotCXJldCA9IHdmeF9jbWRfc2VuZCh3dmlm LT53ZGV2LCBoaWYsIE5VTEwsIDAsIGZhbHNlKTsKLQlrZnJlZShoaWYpOwotCXJldHVybiByZXQ7 Ci19Ci0KLWludCBoaWZfdXBkYXRlX2llX2JlYWNvbihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgY29u c3QgdTggKmllcywgc2l6ZV90IGllc19sZW4pCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgaGlmX21z ZyAqaGlmOwotCWludCBidWZfbGVuID0gc2l6ZW9mKHN0cnVjdCBoaWZfcmVxX3VwZGF0ZV9pZSkg KyBpZXNfbGVuOwotCXN0cnVjdCBoaWZfcmVxX3VwZGF0ZV9pZSAqYm9keSA9IHdmeF9hbGxvY19o aWYoYnVmX2xlbiwgJmhpZik7Ci0KLQlpZiAoIWhpZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0JYm9k eS0+YmVhY29uID0gMTsKLQlib2R5LT5udW1faWVzID0gY3B1X3RvX2xlMTYoMSk7Ci0JbWVtY3B5 KGJvZHktPmllLCBpZXMsIGllc19sZW4pOwotCXdmeF9maWxsX2hlYWRlcihoaWYsIHd2aWYtPmlk LCBISUZfUkVRX0lEX1VQREFURV9JRSwgYnVmX2xlbik7Ci0JcmV0ID0gd2Z4X2NtZF9zZW5kKHd2 aWYtPndkZXYsIGhpZiwgTlVMTCwgMCwgZmFsc2UpOwotCWtmcmVlKGhpZik7Ci0JcmV0dXJuIHJl dDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3R4LmggYi9kcml2ZXJz L3N0YWdpbmcvd2Z4L2hpZl90eC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTdl YWJkY2ZhNzcuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl90eC5o CisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAtb25seSAqLwotLyoKLSAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBob3N0LXRv LWNoaXAgY29tbWFuZHMgKGFrYSByZXF1ZXN0L2NvbmZpcm1hdGlvbikgb2YgdGhlCi0gKiBoYXJk d2FyZSBBUEkuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFib3Jh dG9yaWVzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCi0gKiBDb3B5 cmlnaHQgKEMpIDIwMTAsIFNULUVyaWNzc29uIFNBCi0gKi8KLSNpZm5kZWYgV0ZYX0hJRl9UWF9I Ci0jZGVmaW5lIFdGWF9ISUZfVFhfSAotCi1zdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWw7Ci1zdHJ1 Y3QgaWVlZTgwMjExX2Jzc19jb25mOwotc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXM7 Ci1zdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0Owotc3RydWN0IGhpZl9yZXFfYWRkX2tleTsK LXN0cnVjdCB3ZnhfZGV2Owotc3RydWN0IHdmeF92aWY7Ci0KLXN0cnVjdCB3ZnhfaGlmX2NtZCB7 Ci0Jc3RydWN0IG11dGV4ICAgICAgbG9jazsKLQlzdHJ1Y3QgY29tcGxldGlvbiByZWFkeTsKLQlz dHJ1Y3QgY29tcGxldGlvbiBkb25lOwotCXN0cnVjdCBoaWZfbXNnICAgICpidWZfc2VuZDsKLQl2 b2lkICAgICAgICAgICAgICAqYnVmX3JlY3Y7Ci0Jc2l6ZV90ICAgICAgICAgICAgbGVuX3JlY3Y7 Ci0JaW50ICAgICAgICAgICAgICAgcmV0OwotfTsKLQotdm9pZCB3ZnhfaW5pdF9oaWZfY21kKHN0 cnVjdCB3ZnhfaGlmX2NtZCAqd2Z4X2hpZl9jbWQpOwotaW50IHdmeF9jbWRfc2VuZChzdHJ1Y3Qg d2Z4X2RldiAqd2Rldiwgc3RydWN0IGhpZl9tc2cgKnJlcXVlc3QsCi0JCSB2b2lkICpyZXBseSwg c2l6ZV90IHJlcGx5X2xlbiwgYm9vbCBhc3luYyk7Ci0KLWludCBoaWZfc2h1dGRvd24oc3RydWN0 IHdmeF9kZXYgKndkZXYpOwotaW50IGhpZl9jb25maWd1cmF0aW9uKHN0cnVjdCB3ZnhfZGV2ICp3 ZGV2LCBjb25zdCB1OCAqY29uZiwgc2l6ZV90IGxlbik7Ci1pbnQgaGlmX3Jlc2V0KHN0cnVjdCB3 ZnhfdmlmICp3dmlmLCBib29sIHJlc2V0X3N0YXQpOwotaW50IGhpZl9yZWFkX21pYihzdHJ1Y3Qg d2Z4X2RldiAqd2RldiwgaW50IHZpZl9pZCwgdTE2IG1pYl9pZCwKLQkJIHZvaWQgKmJ1Ziwgc2l6 ZV90IGJ1Zl9zaXplKTsKLWludCBoaWZfd3JpdGVfbWliKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBp bnQgdmlmX2lkLCB1MTYgbWliX2lkLAotCQkgIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplKTsK LWludCBoaWZfc2NhbihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IGNmZzgwMjExX3NjYW5f cmVxdWVzdCAqcmVxODAyMTEsCi0JICAgICBpbnQgY2hhbl9zdGFydCwgaW50IGNoYW5fbnVtKTsK LWludCBoaWZfc3RvcF9zY2FuKHN0cnVjdCB3ZnhfdmlmICp3dmlmKTsKLWludCBoaWZfam9pbihz dHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqY29u ZiwKLQkgICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwgY29uc3QgdTggKnNz aWQsIGludCBzc2lkbGVuKTsKLWludCBoaWZfc2V0X3BtKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBi b29sIHBzLCBpbnQgZHluYW1pY19wc190aW1lb3V0KTsKLWludCBoaWZfc2V0X2Jzc19wYXJhbXMo c3RydWN0IHdmeF92aWYgKnd2aWYsIGludCBhaWQsIGludCBiZWFjb25fbG9zdF9jb3VudCk7Ci1p bnQgaGlmX2FkZF9rZXkoc3RydWN0IHdmeF9kZXYgKndkZXYsIGNvbnN0IHN0cnVjdCBoaWZfcmVx X2FkZF9rZXkgKmFyZyk7Ci1pbnQgaGlmX3JlbW92ZV9rZXkoc3RydWN0IHdmeF9kZXYgKndkZXYs IGludCBpZHgpOwotaW50IGhpZl9zZXRfZWRjYV9xdWV1ZV9wYXJhbXMoc3RydWN0IHdmeF92aWYg Knd2aWYsIHUxNiBxdWV1ZSwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVl dWVfcGFyYW1zICphcmcpOwotaW50IGhpZl9zdGFydChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgY29u c3Qgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqY29uZiwKLQkgICAgICBjb25zdCBzdHJ1Y3Qg aWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwpOwotaW50IGhpZl9iZWFjb25fdHJhbnNtaXQoc3Ry dWN0IHdmeF92aWYgKnd2aWYsIGJvb2wgZW5hYmxlKTsKLWludCBoaWZfbWFwX2xpbmsoc3RydWN0 IHdmeF92aWYgKnd2aWYsCi0JCSBib29sIHVubWFwLCB1OCAqbWFjX2FkZHIsIGludCBzdGFfaWQs IGJvb2wgbWZwKTsKLWludCBoaWZfdXBkYXRlX2llX2JlYWNvbihzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp ZiwgY29uc3QgdTggKmllcywgc2l6ZV90IGllc19sZW4pOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBh L2RyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3R4X21pYi5jIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9o aWZfdHhfbWliLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZTk2MWU2YmNmNi4u MDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3R4X21pYi5jCisrKyAv ZGV2L251bGwKQEAgLTEsMzI0ICswLDAgQEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wLW9ubHkKLS8qCi0gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgaG9zdC10by1jaGlwIE1J QnMgb2YgdGhlIGhhcmR3YXJlIEFQSS4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCwg U2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSAqIENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJp Y3Nzb24KLSAqIENvcHlyaWdodCAoQykgMjAxMCwgU1QtRXJpY3Nzb24gU0EKLSAqLwotCi0jaW5j bHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLQotI2luY2x1ZGUgIndmeC5oIgotI2luY2x1ZGUg ImhpZl90eC5oIgotI2luY2x1ZGUgImhpZl90eF9taWIuaCIKLSNpbmNsdWRlICJoaWZfYXBpX21p Yi5oIgotCi1pbnQgaGlmX3NldF9vdXRwdXRfcG93ZXIoc3RydWN0IHdmeF92aWYgKnd2aWYsIGlu dCB2YWwpCi17Ci0Jc3RydWN0IGhpZl9taWJfY3VycmVudF90eF9wb3dlcl9sZXZlbCBhcmcgPSB7 Ci0JCS5wb3dlcl9sZXZlbCA9IGNwdV90b19sZTMyKHZhbCAqIDEwKSwKLQl9OwotCi0JcmV0dXJu IGhpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsCi0JCQkgICAgIEhJRl9NSUJfSURf Q1VSUkVOVF9UWF9QT1dFUl9MRVZFTCwKLQkJCSAgICAgJmFyZywgc2l6ZW9mKGFyZykpOwotfQot Ci1pbnQgaGlmX3NldF9iZWFjb25fd2FrZXVwX3BlcmlvZChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwK LQkJCQkgdW5zaWduZWQgaW50IGR0aW1faW50ZXJ2YWwsCi0JCQkJIHVuc2lnbmVkIGludCBsaXN0 ZW5faW50ZXJ2YWwpCi17Ci0Jc3RydWN0IGhpZl9taWJfYmVhY29uX3dha2VfdXBfcGVyaW9kIGFy ZyA9IHsKLQkJLndha2V1cF9wZXJpb2RfbWluID0gZHRpbV9pbnRlcnZhbCwKLQkJLnJlY2VpdmVf ZHRpbSA9IDAsCi0JCS53YWtldXBfcGVyaW9kX21heCA9IGxpc3Rlbl9pbnRlcnZhbCwKLQl9Owot Ci0JaWYgKGR0aW1faW50ZXJ2YWwgPiAweEZGIHx8IGxpc3Rlbl9pbnRlcnZhbCA+IDB4RkZGRikK LQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIGhpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3Zp Zi0+aWQsCi0JCQkgICAgIEhJRl9NSUJfSURfQkVBQ09OX1dBS0VVUF9QRVJJT0QsCi0JCQkgICAg ICZhcmcsIHNpemVvZihhcmcpKTsKLX0KLQotaW50IGhpZl9zZXRfcmNwaV9yc3NpX3RocmVzaG9s ZChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwKLQkJCQlpbnQgcnNzaV90aG9sZCwgaW50IHJzc2lfaHlz dCkKLXsKLQlzdHJ1Y3QgaGlmX21pYl9yY3BpX3Jzc2lfdGhyZXNob2xkIGFyZyA9IHsKLQkJLnJv bGxpbmdfYXZlcmFnZV9jb3VudCA9IDgsCi0JCS5kZXRlY3Rpb24gPSAxLAotCX07Ci0KLQlpZiAo IXJzc2lfdGhvbGQgJiYgIXJzc2lfaHlzdCkgewotCQlhcmcudXBwZXJ0aHJlc2ggPSAxOwotCQlh cmcubG93ZXJ0aHJlc2ggPSAxOwotCX0gZWxzZSB7Ci0JCWFyZy51cHBlcl90aHJlc2hvbGQgPSBy c3NpX3Rob2xkICsgcnNzaV9oeXN0OwotCQlhcmcudXBwZXJfdGhyZXNob2xkID0gKGFyZy51cHBl cl90aHJlc2hvbGQgKyAxMTApICogMjsKLQkJYXJnLmxvd2VyX3RocmVzaG9sZCA9IHJzc2lfdGhv bGQ7Ci0JCWFyZy5sb3dlcl90aHJlc2hvbGQgPSAoYXJnLmxvd2VyX3RocmVzaG9sZCArIDExMCkg KiAyOwotCX0KLQotCXJldHVybiBoaWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLAot CQkJICAgICBISUZfTUlCX0lEX1JDUElfUlNTSV9USFJFU0hPTEQsICZhcmcsIHNpemVvZihhcmcp KTsKLX0KLQotaW50IGhpZl9nZXRfY291bnRlcnNfdGFibGUoc3RydWN0IHdmeF9kZXYgKndkZXYs IGludCB2aWZfaWQsCi0JCQkgICBzdHJ1Y3QgaGlmX21pYl9leHRlbmRlZF9jb3VudF90YWJsZSAq YXJnKQotewotCWlmICh3ZnhfYXBpX29sZGVyX3RoYW4od2RldiwgMSwgMykpIHsKLQkJLyogZXh0 ZW5kZWRfY291bnRfdGFibGUgaXMgd2lkZXIgdGhhbiBjb3VudF90YWJsZSAqLwotCQltZW1zZXQo YXJnLCAweEZGLCBzaXplb2YoKmFyZykpOwotCQlyZXR1cm4gaGlmX3JlYWRfbWliKHdkZXYsIHZp Zl9pZCwgSElGX01JQl9JRF9DT1VOVEVSU19UQUJMRSwKLQkJCQkgICAgYXJnLCBzaXplb2Yoc3Ry dWN0IGhpZl9taWJfY291bnRfdGFibGUpKTsKLQl9IGVsc2UgewotCQlyZXR1cm4gaGlmX3JlYWRf bWliKHdkZXYsIHZpZl9pZCwKLQkJCQkgICAgSElGX01JQl9JRF9FWFRFTkRFRF9DT1VOVEVSU19U QUJMRSwgYXJnLAotCQkJCSAgICBzaXplb2Yoc3RydWN0IGhpZl9taWJfZXh0ZW5kZWRfY291bnRf dGFibGUpKTsKLQl9Ci19Ci0KLWludCBoaWZfc2V0X21hY2FkZHIoc3RydWN0IHdmeF92aWYgKnd2 aWYsIHU4ICptYWMpCi17Ci0Jc3RydWN0IGhpZl9taWJfbWFjX2FkZHJlc3MgYXJnID0geyB9Owot Ci0JaWYgKG1hYykKLQkJZXRoZXJfYWRkcl9jb3B5KGFyZy5tYWNfYWRkciwgbWFjKTsKLQlyZXR1 cm4gaGlmX3dyaXRlX21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwgSElGX01JQl9JRF9ET1QxMV9N QUNfQUREUkVTUywKLQkJCSAgICAgJmFyZywgc2l6ZW9mKGFyZykpOwotfQotCi1pbnQgaGlmX3Nl dF9yeF9maWx0ZXIoc3RydWN0IHdmeF92aWYgKnd2aWYsCi0JCSAgICAgIGJvb2wgZmlsdGVyX2Jz c2lkLCBib29sIGZpbHRlcl9wcmJyZXEpCi17Ci0Jc3RydWN0IGhpZl9taWJfcnhfZmlsdGVyIGFy ZyA9IHsgfTsKLQotCWlmIChmaWx0ZXJfYnNzaWQpCi0JCWFyZy5ic3NpZF9maWx0ZXIgPSAxOwot CWlmICghZmlsdGVyX3ByYnJlcSkKLQkJYXJnLmZ3ZF9wcm9iZV9yZXEgPSAxOwotCXJldHVybiBo aWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLCBISUZfTUlCX0lEX1JYX0ZJTFRFUiwK LQkJCSAgICAgJmFyZywgc2l6ZW9mKGFyZykpOwotfQotCi1pbnQgaGlmX3NldF9iZWFjb25fZmls dGVyX3RhYmxlKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBpbnQgdGJsX2xlbiwKLQkJCQljb25zdCBz dHJ1Y3QgaGlmX2llX3RhYmxlX2VudHJ5ICp0YmwpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgaGlm X21pYl9iY25fZmlsdGVyX3RhYmxlICphcmc7Ci0JaW50IGJ1Zl9sZW4gPSBzdHJ1Y3Rfc2l6ZShh cmcsIGllX3RhYmxlLCB0YmxfbGVuKTsKLQotCWFyZyA9IGt6YWxsb2MoYnVmX2xlbiwgR0ZQX0tF Uk5FTCk7Ci0JaWYgKCFhcmcpCi0JCXJldHVybiAtRU5PTUVNOwotCWFyZy0+bnVtX29mX2luZm9f ZWxtdHMgPSBjcHVfdG9fbGUzMih0YmxfbGVuKTsKLQltZW1jcHkoYXJnLT5pZV90YWJsZSwgdGJs LCBmbGV4X2FycmF5X3NpemUoYXJnLCBpZV90YWJsZSwgdGJsX2xlbikpOwotCXJldCA9IGhpZl93 cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsCi0JCQkgICAgSElGX01JQl9JRF9CRUFDT05f RklMVEVSX1RBQkxFLCBhcmcsIGJ1Zl9sZW4pOwotCWtmcmVlKGFyZyk7Ci0JcmV0dXJuIHJldDsK LX0KLQotaW50IGhpZl9iZWFjb25fZmlsdGVyX2NvbnRyb2woc3RydWN0IHdmeF92aWYgKnd2aWYs Ci0JCQkgICAgICBpbnQgZW5hYmxlLCBpbnQgYmVhY29uX2NvdW50KQotewotCXN0cnVjdCBoaWZf bWliX2Jjbl9maWx0ZXJfZW5hYmxlIGFyZyA9IHsKLQkJLmVuYWJsZSA9IGNwdV90b19sZTMyKGVu YWJsZSksCi0JCS5iY25fY291bnQgPSBjcHVfdG9fbGUzMihiZWFjb25fY291bnQpLAotCX07Ci0J cmV0dXJuIGhpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsCi0JCQkgICAgIEhJRl9N SUJfSURfQkVBQ09OX0ZJTFRFUl9FTkFCTEUsCi0JCQkgICAgICZhcmcsIHNpemVvZihhcmcpKTsK LX0KLQotaW50IGhpZl9zZXRfb3BlcmF0aW9uYWxfbW9kZShzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwg ZW51bSBoaWZfb3BfcG93ZXJfbW9kZSBtb2RlKQotewotCXN0cnVjdCBoaWZfbWliX2dsX29wZXJh dGlvbmFsX3Bvd2VyX21vZGUgYXJnID0gewotCQkucG93ZXJfbW9kZSA9IG1vZGUsCi0JCS53dXBf aW5kX2FjdGl2YXRpb24gPSAxLAotCX07Ci0KLQlyZXR1cm4gaGlmX3dyaXRlX21pYih3ZGV2LCAt MSwgSElGX01JQl9JRF9HTF9PUEVSQVRJT05BTF9QT1dFUl9NT0RFLAotCQkJICAgICAmYXJnLCBz aXplb2YoYXJnKSk7Ci19Ci0KLWludCBoaWZfc2V0X3RlbXBsYXRlX2ZyYW1lKHN0cnVjdCB3Znhf dmlmICp3dmlmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgdTggZnJhbWVfdHlwZSwgaW50 IGluaXRfcmF0ZSkKLXsKLQlzdHJ1Y3QgaGlmX21pYl90ZW1wbGF0ZV9mcmFtZSAqYXJnOwotCi0J V0FSTihza2ItPmxlbiA+IEhJRl9BUElfTUFYX1RFTVBMQVRFX0ZSQU1FX1NJWkUsICJmcmFtZSBp cyB0b28gYmlnIik7Ci0Jc2tiX3B1c2goc2tiLCA0KTsKLQlhcmcgPSAoc3RydWN0IGhpZl9taWJf dGVtcGxhdGVfZnJhbWUgKilza2ItPmRhdGE7Ci0Jc2tiX3B1bGwoc2tiLCA0KTsKLQlhcmctPmlu aXRfcmF0ZSA9IGluaXRfcmF0ZTsKLQlhcmctPmZyYW1lX3R5cGUgPSBmcmFtZV90eXBlOwotCWFy Zy0+ZnJhbWVfbGVuZ3RoID0gY3B1X3RvX2xlMTYoc2tiLT5sZW4pOwotCXJldHVybiBoaWZfd3Jp dGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLCBISUZfTUlCX0lEX1RFTVBMQVRFX0ZSQU1FLAot CQkJICAgICBhcmcsIHNpemVvZigqYXJnKSArIHNrYi0+bGVuKTsKLX0KLQotaW50IGhpZl9zZXRf bWZwKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBib29sIGNhcGFibGUsIGJvb2wgcmVxdWlyZWQpCi17 Ci0Jc3RydWN0IGhpZl9taWJfcHJvdGVjdGVkX21nbXRfcG9saWN5IGFyZyA9IHsgfTsKLQotCVdB Uk4ocmVxdWlyZWQgJiYgIWNhcGFibGUsICJpbmNvaGVyZW50IGFyZ3VtZW50cyIpOwotCWlmIChj YXBhYmxlKSB7Ci0JCWFyZy5wbWZfZW5hYmxlID0gMTsKLQkJYXJnLmhvc3RfZW5jX2F1dGhfZnJh bWVzID0gMTsKLQl9Ci0JaWYgKCFyZXF1aXJlZCkKLQkJYXJnLnVucG1mX2FsbG93ZWQgPSAxOwot CXJldHVybiBoaWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLAotCQkJICAgICBISUZf TUlCX0lEX1BST1RFQ1RFRF9NR01UX1BPTElDWSwKLQkJCSAgICAgJmFyZywgc2l6ZW9mKGFyZykp OwotfQotCi1pbnQgaGlmX3NldF9ibG9ja19hY2tfcG9saWN5KHN0cnVjdCB3ZnhfdmlmICp3dmlm LAotCQkJICAgICB1OCB0eF90aWRfcG9saWN5LCB1OCByeF90aWRfcG9saWN5KQotewotCXN0cnVj dCBoaWZfbWliX2Jsb2NrX2Fja19wb2xpY3kgYXJnID0gewotCQkuYmxvY2tfYWNrX3R4X3RpZF9w b2xpY3kgPSB0eF90aWRfcG9saWN5LAotCQkuYmxvY2tfYWNrX3J4X3RpZF9wb2xpY3kgPSByeF90 aWRfcG9saWN5LAotCX07Ci0KLQlyZXR1cm4gaGlmX3dyaXRlX21pYih3dmlmLT53ZGV2LCB3dmlm LT5pZCwgSElGX01JQl9JRF9CTE9DS19BQ0tfUE9MSUNZLAotCQkJICAgICAmYXJnLCBzaXplb2Yo YXJnKSk7Ci19Ci0KLWludCBoaWZfc2V0X2Fzc29jaWF0aW9uX21vZGUoc3RydWN0IHdmeF92aWYg Knd2aWYsIGludCBhbXBkdV9kZW5zaXR5LAotCQkJICAgICBib29sIGdyZWVuZmllbGQsIGJvb2wg c2hvcnRfcHJlYW1ibGUpCi17Ci0Jc3RydWN0IGhpZl9taWJfc2V0X2Fzc29jaWF0aW9uX21vZGUg YXJnID0gewotCQkucHJlYW1idHlwZV91c2UgPSAxLAotCQkubW9kZSA9IDEsCi0JCS5zcGFjaW5n ID0gMSwKLQkJLnNob3J0X3ByZWFtYmxlID0gc2hvcnRfcHJlYW1ibGUsCi0JCS5ncmVlbmZpZWxk ID0gZ3JlZW5maWVsZCwKLQkJLm1wZHVfc3RhcnRfc3BhY2luZyA9IGFtcGR1X2RlbnNpdHksCi0J fTsKLQotCXJldHVybiBoaWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLAotCQkJICAg ICBISUZfTUlCX0lEX1NFVF9BU1NPQ0lBVElPTl9NT0RFLCAmYXJnLCBzaXplb2YoYXJnKSk7Ci19 Ci0KLWludCBoaWZfc2V0X3R4X3JhdGVfcmV0cnlfcG9saWN5KHN0cnVjdCB3ZnhfdmlmICp3dmlm LAotCQkJCSBpbnQgcG9saWN5X2luZGV4LCB1OCAqcmF0ZXMpCi17Ci0Jc3RydWN0IGhpZl9taWJf c2V0X3R4X3JhdGVfcmV0cnlfcG9saWN5ICphcmc7Ci0Jc2l6ZV90IHNpemUgPSBzdHJ1Y3Rfc2l6 ZShhcmcsIHR4X3JhdGVfcmV0cnlfcG9saWN5LCAxKTsKLQlpbnQgcmV0OwotCi0JYXJnID0ga3ph bGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFyZykKLQkJcmV0dXJuIC1FTk9NRU07Ci0J YXJnLT5udW1fdHhfcmF0ZV9wb2xpY2llcyA9IDE7Ci0JYXJnLT50eF9yYXRlX3JldHJ5X3BvbGlj eVswXS5wb2xpY3lfaW5kZXggPSBwb2xpY3lfaW5kZXg7Ci0JYXJnLT50eF9yYXRlX3JldHJ5X3Bv bGljeVswXS5zaG9ydF9yZXRyeV9jb3VudCA9IDI1NTsKLQlhcmctPnR4X3JhdGVfcmV0cnlfcG9s aWN5WzBdLmxvbmdfcmV0cnlfY291bnQgPSAyNTU7Ci0JYXJnLT50eF9yYXRlX3JldHJ5X3BvbGlj eVswXS5maXJzdF9yYXRlX3NlbCA9IDE7Ci0JYXJnLT50eF9yYXRlX3JldHJ5X3BvbGljeVswXS50 ZXJtaW5hdGUgPSAxOwotCWFyZy0+dHhfcmF0ZV9yZXRyeV9wb2xpY3lbMF0uY291bnRfaW5pdCA9 IDE7Ci0JbWVtY3B5KCZhcmctPnR4X3JhdGVfcmV0cnlfcG9saWN5WzBdLnJhdGVzLCByYXRlcywK LQkgICAgICAgc2l6ZW9mKGFyZy0+dHhfcmF0ZV9yZXRyeV9wb2xpY3lbMF0ucmF0ZXMpKTsKLQly ZXQgPSBoaWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLAotCQkJICAgIEhJRl9NSUJf SURfU0VUX1RYX1JBVEVfUkVUUllfUE9MSUNZLCBhcmcsIHNpemUpOwotCWtmcmVlKGFyZyk7Ci0J cmV0dXJuIHJldDsKLX0KLQotaW50IGhpZl9rZWVwX2FsaXZlX3BlcmlvZChzdHJ1Y3Qgd2Z4X3Zp ZiAqd3ZpZiwgaW50IHBlcmlvZCkKLXsKLQlzdHJ1Y3QgaGlmX21pYl9rZWVwX2FsaXZlX3Blcmlv ZCBhcmcgPSB7Ci0JCS5rZWVwX2FsaXZlX3BlcmlvZCA9IGNwdV90b19sZTE2KHBlcmlvZCksCi0J fTsKLQotCXJldHVybiBoaWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLCBISUZfTUlC X0lEX0tFRVBfQUxJVkVfUEVSSU9ELAotCQkJICAgICAmYXJnLCBzaXplb2YoYXJnKSk7Ci19Owot Ci1pbnQgaGlmX3NldF9hcnBfaXB2NF9maWx0ZXIoc3RydWN0IHdmeF92aWYgKnd2aWYsIGludCBp ZHgsIF9fYmUzMiAqYWRkcikKLXsKLQlzdHJ1Y3QgaGlmX21pYl9hcnBfaXBfYWRkcl90YWJsZSBh cmcgPSB7Ci0JCS5jb25kaXRpb25faWR4ID0gaWR4LAotCQkuYXJwX2VuYWJsZSA9IEhJRl9BUlBf TlNfRklMVEVSSU5HX0RJU0FCTEUsCi0JfTsKLQotCWlmIChhZGRyKSB7Ci0JCS8qIENhdXRpb246 IHR5cGUgb2YgYWRkciBpcyBfX2JlMzIgKi8KLQkJbWVtY3B5KGFyZy5pcHY0X2FkZHJlc3MsIGFk ZHIsIHNpemVvZihhcmcuaXB2NF9hZGRyZXNzKSk7Ci0JCWFyZy5hcnBfZW5hYmxlID0gSElGX0FS UF9OU19GSUxURVJJTkdfRU5BQkxFOwotCX0KLQlyZXR1cm4gaGlmX3dyaXRlX21pYih3dmlmLT53 ZGV2LCB3dmlmLT5pZCwKLQkJCSAgICAgSElGX01JQl9JRF9BUlBfSVBfQUREUkVTU0VTX1RBQkxF LAotCQkJICAgICAmYXJnLCBzaXplb2YoYXJnKSk7Ci19Ci0KLWludCBoaWZfdXNlX211bHRpX3R4 X2NvbmYoc3RydWN0IHdmeF9kZXYgKndkZXYsIGJvb2wgZW5hYmxlKQotewotCXN0cnVjdCBoaWZf bWliX2dsX3NldF9tdWx0aV9tc2cgYXJnID0gewotCQkuZW5hYmxlX211bHRpX3R4X2NvbmYgPSBl bmFibGUsCi0JfTsKLQotCXJldHVybiBoaWZfd3JpdGVfbWliKHdkZXYsIC0xLCBISUZfTUlCX0lE X0dMX1NFVF9NVUxUSV9NU0csCi0JCQkgICAgICZhcmcsIHNpemVvZihhcmcpKTsKLX0KLQotaW50 IGhpZl9zZXRfdWFwc2RfaW5mbyhzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgdW5zaWduZWQgbG9uZyB2 YWwpCi17Ci0Jc3RydWN0IGhpZl9taWJfc2V0X3VhcHNkX2luZm9ybWF0aW9uIGFyZyA9IHsgfTsK LQotCWlmICh2YWwgJiBCSVQoSUVFRTgwMjExX0FDX1ZPKSkKLQkJYXJnLnRyaWdfdm9pY2UgPSAx OwotCWlmICh2YWwgJiBCSVQoSUVFRTgwMjExX0FDX1ZJKSkKLQkJYXJnLnRyaWdfdmlkZW8gPSAx OwotCWlmICh2YWwgJiBCSVQoSUVFRTgwMjExX0FDX0JFKSkKLQkJYXJnLnRyaWdfYmUgPSAxOwot CWlmICh2YWwgJiBCSVQoSUVFRTgwMjExX0FDX0JLKSkKLQkJYXJnLnRyaWdfYmNrZ3JuZCA9IDE7 Ci0JcmV0dXJuIGhpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsCi0JCQkgICAgIEhJ Rl9NSUJfSURfU0VUX1VBUFNEX0lORk9STUFUSU9OLAotCQkJICAgICAmYXJnLCBzaXplb2YoYXJn KSk7Ci19Ci0KLWludCBoaWZfZXJwX3VzZV9wcm90ZWN0aW9uKHN0cnVjdCB3ZnhfdmlmICp3dmlm LCBib29sIGVuYWJsZSkKLXsKLQlzdHJ1Y3QgaGlmX21pYl9ub25fZXJwX3Byb3RlY3Rpb24gYXJn ID0gewotCQkudXNlX2N0c190b19zZWxmID0gZW5hYmxlLAotCX07Ci0KLQlyZXR1cm4gaGlmX3dy aXRlX21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwKLQkJCSAgICAgSElGX01JQl9JRF9OT05fRVJQ X1BST1RFQ1RJT04sICZhcmcsIHNpemVvZihhcmcpKTsKLX0KLQotaW50IGhpZl9zbG90X3RpbWUo c3RydWN0IHdmeF92aWYgKnd2aWYsIGludCB2YWwpCi17Ci0Jc3RydWN0IGhpZl9taWJfc2xvdF90 aW1lIGFyZyA9IHsKLQkJLnNsb3RfdGltZSA9IGNwdV90b19sZTMyKHZhbCksCi0JfTsKLQotCXJl dHVybiBoaWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLCBISUZfTUlCX0lEX1NMT1Rf VElNRSwKLQkJCSAgICAgJmFyZywgc2l6ZW9mKGFyZykpOwotfQotCi1pbnQgaGlmX3dlcF9kZWZh dWx0X2tleV9pZChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50IHZhbCkKLXsKLQlzdHJ1Y3QgaGlm X21pYl93ZXBfZGVmYXVsdF9rZXlfaWQgYXJnID0gewotCQkud2VwX2RlZmF1bHRfa2V5X2lkID0g dmFsLAotCX07Ci0KLQlyZXR1cm4gaGlmX3dyaXRlX21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwK LQkJCSAgICAgSElGX01JQl9JRF9ET1QxMV9XRVBfREVGQVVMVF9LRVlfSUQsCi0JCQkgICAgICZh cmcsIHNpemVvZihhcmcpKTsKLX0KLQotaW50IGhpZl9ydHNfdGhyZXNob2xkKHN0cnVjdCB3Znhf dmlmICp3dmlmLCBpbnQgdmFsKQotewotCXN0cnVjdCBoaWZfbWliX2RvdDExX3J0c190aHJlc2hv bGQgYXJnID0gewotCQkudGhyZXNob2xkID0gY3B1X3RvX2xlMzIodmFsID49IDAgPyB2YWwgOiAw eEZGRkYpLAotCX07Ci0KLQlyZXR1cm4gaGlmX3dyaXRlX21pYih3dmlmLT53ZGV2LCB3dmlmLT5p ZCwKLQkJCSAgICAgSElGX01JQl9JRF9ET1QxMV9SVFNfVEhSRVNIT0xELCAmYXJnLCBzaXplb2Yo YXJnKSk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl90eF9taWIuaCBi L2RyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3R4X21pYi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAyYTNiODQ4NjhlZTQuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcv d2Z4L2hpZl90eF9taWIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KLS8qCi0gKiBJbXBsZW1lbnRhdGlv biBvZiB0aGUgaG9zdC10by1jaGlwIE1JQnMgb2YgdGhlIGhhcmR3YXJlIEFQSS4KLSAqCi0gKiBD b3B5cmlnaHQgKGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSAqIENv cHlyaWdodCAoYykgMjAxMCwgU1QtRXJpY3Nzb24KLSAqIENvcHlyaWdodCAoQykgMjAxMCwgU1Qt RXJpY3Nzb24gU0EKLSAqLwotI2lmbmRlZiBXRlhfSElGX1RYX01JQl9ICi0jZGVmaW5lIFdGWF9I SUZfVFhfTUlCX0gKLQotc3RydWN0IHdmeF92aWY7Ci1zdHJ1Y3Qgc2tfYnVmZjsKLQotaW50IGhp Zl9zZXRfb3V0cHV0X3Bvd2VyKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBpbnQgdmFsKTsKLWludCBo aWZfc2V0X2JlYWNvbl93YWtldXBfcGVyaW9kKHN0cnVjdCB3ZnhfdmlmICp3dmlmLAotCQkJCSB1 bnNpZ25lZCBpbnQgZHRpbV9pbnRlcnZhbCwKLQkJCQkgdW5zaWduZWQgaW50IGxpc3Rlbl9pbnRl cnZhbCk7Ci1pbnQgaGlmX3NldF9yY3BpX3Jzc2lfdGhyZXNob2xkKHN0cnVjdCB3ZnhfdmlmICp3 dmlmLAotCQkJCWludCByc3NpX3Rob2xkLCBpbnQgcnNzaV9oeXN0KTsKLWludCBoaWZfZ2V0X2Nv dW50ZXJzX3RhYmxlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgdmlmX2lkLAotCQkJICAgc3Ry dWN0IGhpZl9taWJfZXh0ZW5kZWRfY291bnRfdGFibGUgKmFyZyk7Ci1pbnQgaGlmX3NldF9tYWNh ZGRyKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCB1OCAqbWFjKTsKLWludCBoaWZfc2V0X3J4X2ZpbHRl cihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwKLQkJICAgICAgYm9vbCBmaWx0ZXJfYnNzaWQsIGJvb2wg ZndkX3Byb2JlX3JlcSk7Ci1pbnQgaGlmX3NldF9iZWFjb25fZmlsdGVyX3RhYmxlKHN0cnVjdCB3 ZnhfdmlmICp3dmlmLCBpbnQgdGJsX2xlbiwKLQkJCQljb25zdCBzdHJ1Y3QgaGlmX2llX3RhYmxl X2VudHJ5ICp0YmwpOwotaW50IGhpZl9iZWFjb25fZmlsdGVyX2NvbnRyb2woc3RydWN0IHdmeF92 aWYgKnd2aWYsCi0JCQkgICAgICBpbnQgZW5hYmxlLCBpbnQgYmVhY29uX2NvdW50KTsKLWludCBo aWZfc2V0X29wZXJhdGlvbmFsX21vZGUoc3RydWN0IHdmeF9kZXYgKndkZXYsIGVudW0gaGlmX29w X3Bvd2VyX21vZGUgbW9kZSk7Ci1pbnQgaGlmX3NldF90ZW1wbGF0ZV9mcmFtZShzdHJ1Y3Qgd2Z4 X3ZpZiAqd3ZpZiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgIHU4IGZyYW1lX3R5cGUsIGlu dCBpbml0X3JhdGUpOwotaW50IGhpZl9zZXRfbWZwKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBib29s IGNhcGFibGUsIGJvb2wgcmVxdWlyZWQpOwotaW50IGhpZl9zZXRfYmxvY2tfYWNrX3BvbGljeShz dHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwKLQkJCSAgICAgdTggdHhfdGlkX3BvbGljeSwgdTggcnhfdGlk X3BvbGljeSk7Ci1pbnQgaGlmX3NldF9hc3NvY2lhdGlvbl9tb2RlKHN0cnVjdCB3ZnhfdmlmICp3 dmlmLCBpbnQgYW1wZHVfZGVuc2l0eSwKLQkJCSAgICAgYm9vbCBncmVlbmZpZWxkLCBib29sIHNo b3J0X3ByZWFtYmxlKTsKLWludCBoaWZfc2V0X3R4X3JhdGVfcmV0cnlfcG9saWN5KHN0cnVjdCB3 ZnhfdmlmICp3dmlmLAotCQkJCSBpbnQgcG9saWN5X2luZGV4LCB1OCAqcmF0ZXMpOwotaW50IGhp Zl9rZWVwX2FsaXZlX3BlcmlvZChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50IHBlcmlvZCk7Ci1p bnQgaGlmX3NldF9hcnBfaXB2NF9maWx0ZXIoc3RydWN0IHdmeF92aWYgKnd2aWYsIGludCBpZHgs IF9fYmUzMiAqYWRkcik7Ci1pbnQgaGlmX3VzZV9tdWx0aV90eF9jb25mKHN0cnVjdCB3ZnhfZGV2 ICp3ZGV2LCBib29sIGVuYWJsZSk7Ci1pbnQgaGlmX3NldF91YXBzZF9pbmZvKHN0cnVjdCB3Znhf dmlmICp3dmlmLCB1bnNpZ25lZCBsb25nIHZhbCk7Ci1pbnQgaGlmX2VycF91c2VfcHJvdGVjdGlv bihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgYm9vbCBlbmFibGUpOwotaW50IGhpZl9zbG90X3RpbWUo c3RydWN0IHdmeF92aWYgKnd2aWYsIGludCB2YWwpOwotaW50IGhpZl93ZXBfZGVmYXVsdF9rZXlf aWQoc3RydWN0IHdmeF92aWYgKnd2aWYsIGludCB2YWwpOwotaW50IGhpZl9ydHNfdGhyZXNob2xk KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBpbnQgdmFsKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9k cml2ZXJzL3N0YWdpbmcvd2Z4L2h3aW8uYyBiL2RyaXZlcnMvc3RhZ2luZy93ZngvaHdpby5jCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMGViODg4ODMwZDIuLjAwMDAwMDAwMDAwMAot LS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2h3aW8uYworKysgL2Rldi9udWxsCkBAIC0xLDM1MiAr MCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Ci0vKgotICog TG93LWxldmVsIEkvTyBmdW5jdGlvbnMuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAs IFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVy aWNzc29uCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9k ZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLQotI2luY2x1ZGUgImh3aW8uaCIKLSNp bmNsdWRlICJ3ZnguaCIKLSNpbmNsdWRlICJidXMuaCIKLSNpbmNsdWRlICJ0cmFjZXMuaCIKLQot LyoKLSAqIEludGVybmFsIGhlbHBlcnMuCi0gKgotICogQWJvdXQgQ09ORklHX1ZNQVBfU1RBQ0s6 Ci0gKiBXaGVuIENPTkZJR19WTUFQX1NUQUNLIGlzIGVuYWJsZWQsIGl0IGlzIG5vdCBwb3NzaWJs ZSB0byBydW4gRE1BIG9uIHN0YWNrCi0gKiBhbGxvY2F0ZWQgZGF0YS4gRnVuY3Rpb25zIGJlbG93 IHRoYXQgd29yayB3aXRoIHJlZ2lzdGVycyAoYWthIGZ1bmN0aW9ucwotICogZW5kaW5nIHdpdGgg IjMyIikgYXV0b21hdGljYWxseSByZWFsbG9jYXRlIGJ1ZmZlcnMgd2l0aCBrbWFsbG9jLiBIb3dl dmVyLAotICogZnVuY3Rpb25zIHRoYXQgd29yayB3aXRoIGFyYml0cmFyeSBsZW5ndGggYnVmZmVy cyBsZXQncyBjYWxsZXIgdG8gaGFuZGxlCi0gKiBtZW1vcnkgbG9jYXRpb24uIEluIGRvdWJ0LCBl bmFibGUgQ09ORklHX0RFQlVHX1NHIHRvIGRldGVjdCBiYWRseSBsb2NhdGVkCi0gKiBidWZmZXIu Ci0gKi8KLQotc3RhdGljIGludCByZWFkMzIoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCByZWcs IHUzMiAqdmFsKQotewotCWludCByZXQ7Ci0JX19sZTMyICp0bXAgPSBrbWFsbG9jKHNpemVvZih1 MzIpLCBHRlBfS0VSTkVMKTsKLQotCSp2YWwgPSB+MDsgLyogTmV2ZXIgcmV0dXJuIHVuZGVmaW5l ZCB2YWx1ZSAqLwotCWlmICghdG1wKQotCQlyZXR1cm4gLUVOT01FTTsKLQlyZXQgPSB3ZGV2LT5o d2J1c19vcHMtPmNvcHlfZnJvbV9pbyh3ZGV2LT5od2J1c19wcml2LCByZWcsIHRtcCwKLQkJCQkJ ICAgIHNpemVvZih1MzIpKTsKLQlpZiAocmV0ID49IDApCi0JCSp2YWwgPSBsZTMyX3RvX2NwdSgq dG1wKTsKLQlrZnJlZSh0bXApOwotCWlmIChyZXQpCi0JCWRldl9lcnIod2Rldi0+ZGV2LCAiJXM6 IGJ1cyBjb21tdW5pY2F0aW9uIGVycm9yOiAlZFxuIiwKLQkJCV9fZnVuY19fLCByZXQpOwotCXJl dHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgd3JpdGUzMihzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwg aW50IHJlZywgdTMyIHZhbCkKLXsKLQlpbnQgcmV0OwotCV9fbGUzMiAqdG1wID0ga21hbGxvYyhz aXplb2YodTMyKSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIXRtcCkKLQkJcmV0dXJuIC1FTk9NRU07 Ci0JKnRtcCA9IGNwdV90b19sZTMyKHZhbCk7Ci0JcmV0ID0gd2Rldi0+aHdidXNfb3BzLT5jb3B5 X3RvX2lvKHdkZXYtPmh3YnVzX3ByaXYsIHJlZywgdG1wLAotCQkJCQkgIHNpemVvZih1MzIpKTsK LQlrZnJlZSh0bXApOwotCWlmIChyZXQpCi0JCWRldl9lcnIod2Rldi0+ZGV2LCAiJXM6IGJ1cyBj b21tdW5pY2F0aW9uIGVycm9yOiAlZFxuIiwKLQkJCV9fZnVuY19fLCByZXQpOwotCXJldHVybiBy ZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgcmVhZDMyX2xvY2tlZChzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwg aW50IHJlZywgdTMyICp2YWwpCi17Ci0JaW50IHJldDsKLQotCXdkZXYtPmh3YnVzX29wcy0+bG9j ayh3ZGV2LT5od2J1c19wcml2KTsKLQlyZXQgPSByZWFkMzIod2RldiwgcmVnLCB2YWwpOwotCV90 cmFjZV9pb19yZWFkMzIocmVnLCAqdmFsKTsKLQl3ZGV2LT5od2J1c19vcHMtPnVubG9jayh3ZGV2 LT5od2J1c19wcml2KTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHdyaXRlMzJfbG9j a2VkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgcmVnLCB1MzIgdmFsKQotewotCWludCByZXQ7 Ci0KLQl3ZGV2LT5od2J1c19vcHMtPmxvY2sod2Rldi0+aHdidXNfcHJpdik7Ci0JcmV0ID0gd3Jp dGUzMih3ZGV2LCByZWcsIHZhbCk7Ci0JX3RyYWNlX2lvX3dyaXRlMzIocmVnLCB2YWwpOwotCXdk ZXYtPmh3YnVzX29wcy0+dW5sb2NrKHdkZXYtPmh3YnVzX3ByaXYpOwotCXJldHVybiByZXQ7Ci19 Ci0KLXN0YXRpYyBpbnQgd3JpdGUzMl9iaXRzX2xvY2tlZChzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwg aW50IHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpCi17Ci0JaW50IHJldDsKLQl1MzIgdmFsX3IsIHZh bF93OwotCi0JV0FSTl9PTih+bWFzayAmIHZhbCk7Ci0JdmFsICY9IG1hc2s7Ci0Jd2Rldi0+aHdi dXNfb3BzLT5sb2NrKHdkZXYtPmh3YnVzX3ByaXYpOwotCXJldCA9IHJlYWQzMih3ZGV2LCByZWcs ICZ2YWxfcik7Ci0JX3RyYWNlX2lvX3JlYWQzMihyZWcsIHZhbF9yKTsKLQlpZiAocmV0IDwgMCkK LQkJZ290byBlcnI7Ci0JdmFsX3cgPSAodmFsX3IgJiB+bWFzaykgfCB2YWw7Ci0JaWYgKHZhbF93 ICE9IHZhbF9yKSB7Ci0JCXJldCA9IHdyaXRlMzIod2RldiwgcmVnLCB2YWxfdyk7Ci0JCV90cmFj ZV9pb193cml0ZTMyKHJlZywgdmFsX3cpOwotCX0KLWVycjoKLQl3ZGV2LT5od2J1c19vcHMtPnVu bG9jayh3ZGV2LT5od2J1c19wcml2KTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGlu ZGlyZWN0X3JlYWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCByZWcsIHUzMiBhZGRyLAotCQkJ IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKLXsKLQlpbnQgcmV0OwotCWludCBpOwotCXUzMiBjZmc7 Ci0JdTMyIHByZWZldGNoOwotCi0JV0FSTl9PTihsZW4gPj0gMHgyMDAwKTsKLQlXQVJOX09OKHJl ZyAhPSBXRlhfUkVHX0FIQl9EUE9SVCAmJiByZWcgIT0gV0ZYX1JFR19TUkFNX0RQT1JUKTsKLQot CWlmIChyZWcgPT0gV0ZYX1JFR19BSEJfRFBPUlQpCi0JCXByZWZldGNoID0gQ0ZHX1BSRUZFVENI X0FIQjsKLQllbHNlIGlmIChyZWcgPT0gV0ZYX1JFR19TUkFNX0RQT1JUKQotCQlwcmVmZXRjaCA9 IENGR19QUkVGRVRDSF9TUkFNOwotCWVsc2UKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlyZXQgPSB3 cml0ZTMyKHdkZXYsIFdGWF9SRUdfQkFTRV9BRERSLCBhZGRyKTsKLQlpZiAocmV0IDwgMCkKLQkJ Z290byBlcnI7Ci0KLQlyZXQgPSByZWFkMzIod2RldiwgV0ZYX1JFR19DT05GSUcsICZjZmcpOwot CWlmIChyZXQgPCAwKQotCQlnb3RvIGVycjsKLQotCXJldCA9IHdyaXRlMzIod2RldiwgV0ZYX1JF R19DT05GSUcsIGNmZyB8IHByZWZldGNoKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBlcnI7Ci0K LQlmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKykgewotCQlyZXQgPSByZWFkMzIod2RldiwgV0ZYX1JF R19DT05GSUcsICZjZmcpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gZXJyOwotCQlpZiAoIShj ZmcgJiBwcmVmZXRjaCkpCi0JCQlicmVhazsKLQkJdXNsZWVwX3JhbmdlKDIwMCwgMjUwKTsKLQl9 Ci0JaWYgKGkgPT0gMjApIHsKLQkJcmV0ID0gLUVUSU1FRE9VVDsKLQkJZ290byBlcnI7Ci0JfQot Ci0JcmV0ID0gd2Rldi0+aHdidXNfb3BzLT5jb3B5X2Zyb21faW8od2Rldi0+aHdidXNfcHJpdiwg cmVnLCBidWYsIGxlbik7Ci0KLWVycjoKLQlpZiAocmV0IDwgMCkKLQkJbWVtc2V0KGJ1ZiwgMHhG RiwgbGVuKTsgLyogTmV2ZXIgcmV0dXJuIHVuZGVmaW5lZCB2YWx1ZSAqLwotCXJldHVybiByZXQ7 Ci19Ci0KLXN0YXRpYyBpbnQgaW5kaXJlY3Rfd3JpdGUoc3RydWN0IHdmeF9kZXYgKndkZXYsIGlu dCByZWcsIHUzMiBhZGRyLAotCQkJICBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pCi17Ci0J aW50IHJldDsKLQotCVdBUk5fT04obGVuID49IDB4MjAwMCk7Ci0JV0FSTl9PTihyZWcgIT0gV0ZY X1JFR19BSEJfRFBPUlQgJiYgcmVnICE9IFdGWF9SRUdfU1JBTV9EUE9SVCk7Ci0JcmV0ID0gd3Jp dGUzMih3ZGV2LCBXRlhfUkVHX0JBU0VfQUREUiwgYWRkcik7Ci0JaWYgKHJldCA8IDApCi0JCXJl dHVybiByZXQ7Ci0KLQlyZXR1cm4gd2Rldi0+aHdidXNfb3BzLT5jb3B5X3RvX2lvKHdkZXYtPmh3 YnVzX3ByaXYsIHJlZywgYnVmLCBsZW4pOwotfQotCi1zdGF0aWMgaW50IGluZGlyZWN0X3JlYWRf bG9ja2VkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgcmVnLCB1MzIgYWRkciwKLQkJCQl2b2lk ICpidWYsIHNpemVfdCBsZW4pCi17Ci0JaW50IHJldDsKLQotCXdkZXYtPmh3YnVzX29wcy0+bG9j ayh3ZGV2LT5od2J1c19wcml2KTsKLQlyZXQgPSBpbmRpcmVjdF9yZWFkKHdkZXYsIHJlZywgYWRk ciwgYnVmLCBsZW4pOwotCV90cmFjZV9pb19pbmRfcmVhZChyZWcsIGFkZHIsIGJ1ZiwgbGVuKTsK LQl3ZGV2LT5od2J1c19vcHMtPnVubG9jayh3ZGV2LT5od2J1c19wcml2KTsKLQlyZXR1cm4gcmV0 OwotfQotCi1zdGF0aWMgaW50IGluZGlyZWN0X3dyaXRlX2xvY2tlZChzdHJ1Y3Qgd2Z4X2RldiAq d2RldiwgaW50IHJlZywgdTMyIGFkZHIsCi0JCQkJIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxl bikKLXsKLQlpbnQgcmV0OwotCi0Jd2Rldi0+aHdidXNfb3BzLT5sb2NrKHdkZXYtPmh3YnVzX3By aXYpOwotCXJldCA9IGluZGlyZWN0X3dyaXRlKHdkZXYsIHJlZywgYWRkciwgYnVmLCBsZW4pOwot CV90cmFjZV9pb19pbmRfd3JpdGUocmVnLCBhZGRyLCBidWYsIGxlbik7Ci0Jd2Rldi0+aHdidXNf b3BzLT51bmxvY2sod2Rldi0+aHdidXNfcHJpdik7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGlj IGludCBpbmRpcmVjdF9yZWFkMzJfbG9ja2VkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgcmVn LAotCQkJCSAgdTMyIGFkZHIsIHUzMiAqdmFsKQotewotCWludCByZXQ7Ci0JX19sZTMyICp0bXAg PSBrbWFsbG9jKHNpemVvZih1MzIpLCBHRlBfS0VSTkVMKTsKLQotCWlmICghdG1wKQotCQlyZXR1 cm4gLUVOT01FTTsKLQl3ZGV2LT5od2J1c19vcHMtPmxvY2sod2Rldi0+aHdidXNfcHJpdik7Ci0J cmV0ID0gaW5kaXJlY3RfcmVhZCh3ZGV2LCByZWcsIGFkZHIsIHRtcCwgc2l6ZW9mKHUzMikpOwot CSp2YWwgPSBsZTMyX3RvX2NwdSgqdG1wKTsKLQlfdHJhY2VfaW9faW5kX3JlYWQzMihyZWcsIGFk ZHIsICp2YWwpOwotCXdkZXYtPmh3YnVzX29wcy0+dW5sb2NrKHdkZXYtPmh3YnVzX3ByaXYpOwot CWtmcmVlKHRtcCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBpbmRpcmVjdF93cml0 ZTMyX2xvY2tlZChzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IHJlZywKLQkJCQkgICB1MzIgYWRk ciwgdTMyIHZhbCkKLXsKLQlpbnQgcmV0OwotCV9fbGUzMiAqdG1wID0ga21hbGxvYyhzaXplb2Yo dTMyKSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIXRtcCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JKnRt cCA9IGNwdV90b19sZTMyKHZhbCk7Ci0Jd2Rldi0+aHdidXNfb3BzLT5sb2NrKHdkZXYtPmh3YnVz X3ByaXYpOwotCXJldCA9IGluZGlyZWN0X3dyaXRlKHdkZXYsIHJlZywgYWRkciwgdG1wLCBzaXpl b2YodTMyKSk7Ci0JX3RyYWNlX2lvX2luZF93cml0ZTMyKHJlZywgYWRkciwgdmFsKTsKLQl3ZGV2 LT5od2J1c19vcHMtPnVubG9jayh3ZGV2LT5od2J1c19wcml2KTsKLQlrZnJlZSh0bXApOwotCXJl dHVybiByZXQ7Ci19Ci0KLWludCB3ZnhfZGF0YV9yZWFkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB2 b2lkICpidWYsIHNpemVfdCBsZW4pCi17Ci0JaW50IHJldDsKLQotCVdBUk4oKGxvbmcpYnVmICYg MywgIiVzOiB1bmFsaWduZWQgYnVmZmVyIiwgX19mdW5jX18pOwotCXdkZXYtPmh3YnVzX29wcy0+ bG9jayh3ZGV2LT5od2J1c19wcml2KTsKLQlyZXQgPSB3ZGV2LT5od2J1c19vcHMtPmNvcHlfZnJv bV9pbyh3ZGV2LT5od2J1c19wcml2LAotCQkJCQkgICAgV0ZYX1JFR19JTl9PVVRfUVVFVUUsIGJ1 ZiwgbGVuKTsKLQlfdHJhY2VfaW9fcmVhZChXRlhfUkVHX0lOX09VVF9RVUVVRSwgYnVmLCBsZW4p OwotCXdkZXYtPmh3YnVzX29wcy0+dW5sb2NrKHdkZXYtPmh3YnVzX3ByaXYpOwotCWlmIChyZXQp Ci0JCWRldl9lcnIod2Rldi0+ZGV2LCAiJXM6IGJ1cyBjb21tdW5pY2F0aW9uIGVycm9yOiAlZFxu IiwKLQkJCV9fZnVuY19fLCByZXQpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCB3ZnhfZGF0YV93 cml0ZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQot ewotCWludCByZXQ7Ci0KLQlXQVJOKChsb25nKWJ1ZiAmIDMsICIlczogdW5hbGlnbmVkIGJ1ZmZl ciIsIF9fZnVuY19fKTsKLQl3ZGV2LT5od2J1c19vcHMtPmxvY2sod2Rldi0+aHdidXNfcHJpdik7 Ci0JcmV0ID0gd2Rldi0+aHdidXNfb3BzLT5jb3B5X3RvX2lvKHdkZXYtPmh3YnVzX3ByaXYsCi0J CQkJCSAgV0ZYX1JFR19JTl9PVVRfUVVFVUUsIGJ1ZiwgbGVuKTsKLQlfdHJhY2VfaW9fd3JpdGUo V0ZYX1JFR19JTl9PVVRfUVVFVUUsIGJ1ZiwgbGVuKTsKLQl3ZGV2LT5od2J1c19vcHMtPnVubG9j ayh3ZGV2LT5od2J1c19wcml2KTsKLQlpZiAocmV0KQotCQlkZXZfZXJyKHdkZXYtPmRldiwgIiVz OiBidXMgY29tbXVuaWNhdGlvbiBlcnJvcjogJWRcbiIsCi0JCQlfX2Z1bmNfXywgcmV0KTsKLQly ZXR1cm4gcmV0OwotfQotCi1pbnQgc3JhbV9idWZfcmVhZChzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwg dTMyIGFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKLXsKLQlyZXR1cm4gaW5kaXJlY3RfcmVh ZF9sb2NrZWQod2RldiwgV0ZYX1JFR19TUkFNX0RQT1JULCBhZGRyLCBidWYsIGxlbik7Ci19Ci0K LWludCBhaGJfYnVmX3JlYWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiBhZGRyLCB2b2lkICpi dWYsIHNpemVfdCBsZW4pCi17Ci0JcmV0dXJuIGluZGlyZWN0X3JlYWRfbG9ja2VkKHdkZXYsIFdG WF9SRUdfQUhCX0RQT1JULCBhZGRyLCBidWYsIGxlbik7Ci19Ci0KLWludCBzcmFtX2J1Zl93cml0 ZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIGFkZHIsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90 IGxlbikKLXsKLQlyZXR1cm4gaW5kaXJlY3Rfd3JpdGVfbG9ja2VkKHdkZXYsIFdGWF9SRUdfU1JB TV9EUE9SVCwgYWRkciwgYnVmLCBsZW4pOwotfQotCi1pbnQgYWhiX2J1Zl93cml0ZShzdHJ1Y3Qg d2Z4X2RldiAqd2RldiwgdTMyIGFkZHIsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKLXsK LQlyZXR1cm4gaW5kaXJlY3Rfd3JpdGVfbG9ja2VkKHdkZXYsIFdGWF9SRUdfQUhCX0RQT1JULCBh ZGRyLCBidWYsIGxlbik7Ci19Ci0KLWludCBzcmFtX3JlZ19yZWFkKHN0cnVjdCB3ZnhfZGV2ICp3 ZGV2LCB1MzIgYWRkciwgdTMyICp2YWwpCi17Ci0JcmV0dXJuIGluZGlyZWN0X3JlYWQzMl9sb2Nr ZWQod2RldiwgV0ZYX1JFR19TUkFNX0RQT1JULCBhZGRyLCB2YWwpOwotfQotCi1pbnQgYWhiX3Jl Z19yZWFkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgYWRkciwgdTMyICp2YWwpCi17Ci0JcmV0 dXJuIGluZGlyZWN0X3JlYWQzMl9sb2NrZWQod2RldiwgV0ZYX1JFR19BSEJfRFBPUlQsIGFkZHIs IHZhbCk7Ci19Ci0KLWludCBzcmFtX3JlZ193cml0ZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMy IGFkZHIsIHUzMiB2YWwpCi17Ci0JcmV0dXJuIGluZGlyZWN0X3dyaXRlMzJfbG9ja2VkKHdkZXYs IFdGWF9SRUdfU1JBTV9EUE9SVCwgYWRkciwgdmFsKTsKLX0KLQotaW50IGFoYl9yZWdfd3JpdGUo c3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiBhZGRyLCB1MzIgdmFsKQotewotCXJldHVybiBpbmRp cmVjdF93cml0ZTMyX2xvY2tlZCh3ZGV2LCBXRlhfUkVHX0FIQl9EUE9SVCwgYWRkciwgdmFsKTsK LX0KLQotaW50IGNvbmZpZ19yZWdfcmVhZChzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyICp2YWwp Ci17Ci0JcmV0dXJuIHJlYWQzMl9sb2NrZWQod2RldiwgV0ZYX1JFR19DT05GSUcsIHZhbCk7Ci19 Ci0KLWludCBjb25maWdfcmVnX3dyaXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgdmFsKQot ewotCXJldHVybiB3cml0ZTMyX2xvY2tlZCh3ZGV2LCBXRlhfUkVHX0NPTkZJRywgdmFsKTsKLX0K LQotaW50IGNvbmZpZ19yZWdfd3JpdGVfYml0cyhzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIG1h c2ssIHUzMiB2YWwpCi17Ci0JcmV0dXJuIHdyaXRlMzJfYml0c19sb2NrZWQod2RldiwgV0ZYX1JF R19DT05GSUcsIG1hc2ssIHZhbCk7Ci19Ci0KLWludCBjb250cm9sX3JlZ19yZWFkKHN0cnVjdCB3 ZnhfZGV2ICp3ZGV2LCB1MzIgKnZhbCkKLXsKLQlyZXR1cm4gcmVhZDMyX2xvY2tlZCh3ZGV2LCBX RlhfUkVHX0NPTlRST0wsIHZhbCk7Ci19Ci0KLWludCBjb250cm9sX3JlZ193cml0ZShzdHJ1Y3Qg d2Z4X2RldiAqd2RldiwgdTMyIHZhbCkKLXsKLQlyZXR1cm4gd3JpdGUzMl9sb2NrZWQod2Rldiwg V0ZYX1JFR19DT05UUk9MLCB2YWwpOwotfQotCi1pbnQgY29udHJvbF9yZWdfd3JpdGVfYml0cyhz dHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIG1hc2ssIHUzMiB2YWwpCi17Ci0JcmV0dXJuIHdyaXRl MzJfYml0c19sb2NrZWQod2RldiwgV0ZYX1JFR19DT05UUk9MLCBtYXNrLCB2YWwpOwotfQotCi1p bnQgaWdwcl9yZWdfcmVhZChzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IGluZGV4LCB1MzIgKnZh bCkKLXsKLQlpbnQgcmV0OwotCi0JKnZhbCA9IH4wOyAvKiBOZXZlciByZXR1cm4gdW5kZWZpbmVk IHZhbHVlICovCi0JcmV0ID0gd3JpdGUzMl9sb2NrZWQod2RldiwgV0ZYX1JFR19TRVRfR0VOX1Jf VywgSUdQUl9SVyB8IGluZGV4IDw8IDI0KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCXJl dCA9IHJlYWQzMl9sb2NrZWQod2RldiwgV0ZYX1JFR19TRVRfR0VOX1JfVywgdmFsKTsKLQlpZiAo cmV0KQotCQlyZXR1cm4gcmV0OwotCSp2YWwgJj0gSUdQUl9WQUxVRTsKLQlyZXR1cm4gcmV0Owot fQotCi1pbnQgaWdwcl9yZWdfd3JpdGUoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCBpbmRleCwg dTMyIHZhbCkKLXsKLQlyZXR1cm4gd3JpdGUzMl9sb2NrZWQod2RldiwgV0ZYX1JFR19TRVRfR0VO X1JfVywgaW5kZXggPDwgMjQgfCB2YWwpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5n L3dmeC9od2lvLmggYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2h3aW8uaApkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggZmYwOTU3NWRkMWFmLi4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9z dGFnaW5nL3dmeC9od2lvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKiBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCi0vKgotICogTG93LWxldmVsIEkv TyBmdW5jdGlvbnMuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFi b3JhdG9yaWVzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCi0gKi8K LSNpZm5kZWYgV0ZYX0hXSU9fSAotI2RlZmluZSBXRlhfSFdJT19ICi0KLSNpbmNsdWRlIDxsaW51 eC90eXBlcy5oPgotCi1zdHJ1Y3Qgd2Z4X2RldjsKLQotaW50IHdmeF9kYXRhX3JlYWQoc3RydWN0 IHdmeF9kZXYgKndkZXYsIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4pOwotaW50IHdmeF9kYXRh X3dyaXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBidWZf bGVuKTsKLQotaW50IHNyYW1fYnVmX3JlYWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiBhZGRy LCB2b2lkICpidWYsIHNpemVfdCBsZW4pOwotaW50IHNyYW1fYnVmX3dyaXRlKHN0cnVjdCB3Znhf ZGV2ICp3ZGV2LCB1MzIgYWRkciwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKTsKLQotaW50 IGFoYl9idWZfcmVhZChzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIGFkZHIsIHZvaWQgKmJ1Ziwg c2l6ZV90IGxlbik7Ci1pbnQgYWhiX2J1Zl93cml0ZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMy IGFkZHIsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbik7Ci0KLWludCBzcmFtX3JlZ19yZWFk KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgYWRkciwgdTMyICp2YWwpOwotaW50IHNyYW1fcmVn X3dyaXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgYWRkciwgdTMyIHZhbCk7Ci0KLWludCBh aGJfcmVnX3JlYWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiBhZGRyLCB1MzIgKnZhbCk7Ci1p bnQgYWhiX3JlZ193cml0ZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIGFkZHIsIHUzMiB2YWwp OwotCi0jZGVmaW5lIENGR19FUlJfU1BJX0ZSQU1FICAgICAgICAgIDB4MDAwMDAwMDEgLyogb25s eSB3aXRoIFNQSSAqLwotI2RlZmluZSBDRkdfRVJSX1NESU9fQlVGX01JU01BVENIICAweDAwMDAw MDAxIC8qIG9ubHkgd2l0aCBTRElPICovCi0jZGVmaW5lIENGR19FUlJfQlVGX1VOREVSUlVOICAg ICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgQ0ZHX0VSUl9EQVRBX0lOX1RPT19MQVJHRSAgMHgwMDAw MDAwNAotI2RlZmluZSBDRkdfRVJSX0hPU1RfTk9fT1VUX1FVRVVFICAweDAwMDAwMDA4Ci0jZGVm aW5lIENGR19FUlJfQlVGX09WRVJSVU4gICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgQ0ZHX0VS Ul9EQVRBX09VVF9UT09fTEFSR0UgMHgwMDAwMDAyMAotI2RlZmluZSBDRkdfRVJSX0hPU1RfTk9f SU5fUVVFVUUgICAweDAwMDAwMDQwCi0jZGVmaW5lIENGR19FUlJfSE9TVF9DUkNfTUlTUyAgICAg IDB4MDAwMDAwODAgLyogb25seSB3aXRoIFNESU8gKi8KLSNkZWZpbmUgQ0ZHX1NQSV9JR05PUkVf Q1MgICAgICAgICAgMHgwMDAwMDA4MCAvKiBvbmx5IHdpdGggU1BJICovCi0jZGVmaW5lIENGR19C WVRFX09SREVSX01BU0sgICAgICAgIDB4MDAwMDAzMDAgLyogb25seSB3cml0YWJsZSB3aXRoIFNQ SSAqLwotI2RlZmluZSAgICAgQ0ZHX0JZVEVfT1JERVJfQkFEQyAgICAweDAwMDAwMDAwCi0jZGVm aW5lICAgICBDRkdfQllURV9PUkRFUl9EQ0JBICAgIDB4MDAwMDAxMDAKLSNkZWZpbmUgICAgIENG R19CWVRFX09SREVSX0FCQ0QgICAgMHgwMDAwMDIwMCAvKiBTRElPIGFsd2F5cyB1c2UgdGhpcyB2 YWx1ZSAqLwotI2RlZmluZSBDRkdfRElSRUNUX0FDQ0VTU19NT0RFICAgICAweDAwMDAwNDAwCi0j ZGVmaW5lIENGR19QUkVGRVRDSF9BSEIgICAgICAgICAgIDB4MDAwMDA4MDAKLSNkZWZpbmUgQ0ZH X0RJU0FCTEVfQ1BVX0NMSyAgICAgICAgMHgwMDAwMTAwMAotI2RlZmluZSBDRkdfUFJFRkVUQ0hf U1JBTSAgICAgICAgICAweDAwMDAyMDAwCi0jZGVmaW5lIENGR19DUFVfUkVTRVQgICAgICAgICAg ICAgIDB4MDAwMDQwMDAKLSNkZWZpbmUgQ0ZHX1NESU9fRElTQUJMRV9JUlEgICAgICAgMHgwMDAw ODAwMCAvKiBvbmx5IHdpdGggU0RJTyAqLwotI2RlZmluZSBDRkdfSVJRX0VOQUJMRV9EQVRBICAg ICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIENGR19JUlFfRU5BQkxFX1dSRFkgICAgICAgIDB4MDAw MjAwMDAKLSNkZWZpbmUgQ0ZHX0NMS19SSVNFX0VER0UgICAgICAgICAgMHgwMDA0MDAwMAotI2Rl ZmluZSBDRkdfU0RJT19ESVNBQkxFX0NSQ19DSEsgICAweDAwMDgwMDAwIC8qIG9ubHkgd2l0aCBT RElPICovCi0jZGVmaW5lIENGR19SRVNFUlZFRCAgICAgICAgICAgICAgIDB4MDBGMDAwMDAKLSNk ZWZpbmUgQ0ZHX0RFVklDRV9JRF9NQUpPUiAgICAgICAgMHgwNzAwMDAwMAotI2RlZmluZSBDRkdf REVWSUNFX0lEX1JFU0VSVkVEICAgICAweDc4MDAwMDAwCi0jZGVmaW5lIENGR19ERVZJQ0VfSURf VFlQRSAgICAgICAgIDB4ODAwMDAwMDAKLWludCBjb25maWdfcmVnX3JlYWQoc3RydWN0IHdmeF9k ZXYgKndkZXYsIHUzMiAqdmFsKTsKLWludCBjb25maWdfcmVnX3dyaXRlKHN0cnVjdCB3ZnhfZGV2 ICp3ZGV2LCB1MzIgdmFsKTsKLWludCBjb25maWdfcmVnX3dyaXRlX2JpdHMoc3RydWN0IHdmeF9k ZXYgKndkZXYsIHUzMiBtYXNrLCB1MzIgdmFsKTsKLQotI2RlZmluZSBDVFJMX05FWFRfTEVOX01B U0sgICAweDAwMDAwRkZGCi0jZGVmaW5lIENUUkxfV0xBTl9XQUtFVVAgICAgIDB4MDAwMDEwMDAK LSNkZWZpbmUgQ1RSTF9XTEFOX1JFQURZICAgICAgMHgwMDAwMjAwMAotaW50IGNvbnRyb2xfcmVn X3JlYWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiAqdmFsKTsKLWludCBjb250cm9sX3JlZ193 cml0ZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIHZhbCk7Ci1pbnQgY29udHJvbF9yZWdfd3Jp dGVfYml0cyhzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIG1hc2ssIHUzMiB2YWwpOwotCi0jZGVm aW5lIElHUFJfUlcgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBJR1BSX0lOREVYICAgICAg IDB4N0YwMDAwMDAKLSNkZWZpbmUgSUdQUl9WQUxVRSAgICAgICAweDAwRkZGRkZGCi1pbnQgaWdw cl9yZWdfcmVhZChzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IGluZGV4LCB1MzIgKnZhbCk7Ci1p bnQgaWdwcl9yZWdfd3JpdGUoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCBpbmRleCwgdTMyIHZh bCk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9rZXkuYyBiL2Ry aXZlcnMvc3RhZ2luZy93Zngva2V5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1 MTM0YTE3NDY4My4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93Zngva2V5LmMK KysrIC9kZXYvbnVsbApAQCAtMSwyNDEgKzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAtb25seQotLyoKLSAqIEtleSBtYW5hZ2VtZW50IHJlbGF0ZWQgZnVuY3Rpb25z LgotICoKLSAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwLCBTaWxpY29uIExhYm9yYXRvcmllcywg SW5jLgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmljc3NvbgotICovCi0jaW5jbHVkZSA8 bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KLQotI2luY2x1 ZGUgImtleS5oIgotI2luY2x1ZGUgIndmeC5oIgotI2luY2x1ZGUgImhpZl90eF9taWIuaCIKLQot c3RhdGljIGludCB3ZnhfYWxsb2Nfa2V5KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQotewotCWludCBp ZHg7Ci0KLQlpZHggPSBmZnMofndkZXYtPmtleV9tYXApIC0gMTsKLQlpZiAoaWR4IDwgMCB8fCBp ZHggPj0gTUFYX0tFWV9FTlRSSUVTKQotCQlyZXR1cm4gLTE7Ci0KLQl3ZGV2LT5rZXlfbWFwIHw9 IEJJVChpZHgpOwotCXJldHVybiBpZHg7Ci19Ci0KLXN0YXRpYyB2b2lkIHdmeF9mcmVlX2tleShz dHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IGlkeCkKLXsKLQlXQVJOKCEod2Rldi0+a2V5X21hcCAm IEJJVChpZHgpKSwgImluY29uc2lzdGVudCBrZXkgYWxsb2NhdGlvbiIpOwotCXdkZXYtPmtleV9t YXAgJj0gfkJJVChpZHgpOwotfQotCi1zdGF0aWMgdTggZmlsbF93ZXBfcGFpcihzdHJ1Y3QgaGlm X3dlcF9wYWlyd2lzZV9rZXkgKm1zZywKLQkJCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtl eSwgdTggKnBlZXJfYWRkcikKLXsKLQlXQVJOKGtleS0+a2V5bGVuID4gc2l6ZW9mKG1zZy0+a2V5 X2RhdGEpLCAiaW5jb25zaXN0ZW50IGRhdGEiKTsKLQltc2ctPmtleV9sZW5ndGggPSBrZXktPmtl eWxlbjsKLQltZW1jcHkobXNnLT5rZXlfZGF0YSwga2V5LT5rZXksIGtleS0+a2V5bGVuKTsKLQll dGhlcl9hZGRyX2NvcHkobXNnLT5wZWVyX2FkZHJlc3MsIHBlZXJfYWRkcik7Ci0JcmV0dXJuIEhJ Rl9LRVlfVFlQRV9XRVBfUEFJUldJU0U7Ci19Ci0KLXN0YXRpYyB1OCBmaWxsX3dlcF9ncm91cChz dHJ1Y3QgaGlmX3dlcF9ncm91cF9rZXkgKm1zZywKLQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2tleV9j b25mICprZXkpCi17Ci0JV0FSTihrZXktPmtleWxlbiA+IHNpemVvZihtc2ctPmtleV9kYXRhKSwg ImluY29uc2lzdGVudCBkYXRhIik7Ci0JbXNnLT5rZXlfaWQgPSBrZXktPmtleWlkeDsKLQltc2ct PmtleV9sZW5ndGggPSBrZXktPmtleWxlbjsKLQltZW1jcHkobXNnLT5rZXlfZGF0YSwga2V5LT5r ZXksIGtleS0+a2V5bGVuKTsKLQlyZXR1cm4gSElGX0tFWV9UWVBFX1dFUF9ERUZBVUxUOwotfQot Ci1zdGF0aWMgdTggZmlsbF90a2lwX3BhaXIoc3RydWN0IGhpZl90a2lwX3BhaXJ3aXNlX2tleSAq bXNnLAotCQkJIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSwgdTggKnBlZXJfYWRkcikK LXsKLQl1OCAqa2V5YnVmID0ga2V5LT5rZXk7Ci0KLQlXQVJOKGtleS0+a2V5bGVuICE9IHNpemVv Zihtc2ctPnRraXBfa2V5X2RhdGEpCi0JCQkgICAgKyBzaXplb2YobXNnLT50eF9taWNfa2V5KQot CQkJICAgICsgc2l6ZW9mKG1zZy0+cnhfbWljX2tleSksICJpbmNvbnNpc3RlbnQgZGF0YSIpOwot CW1lbWNweShtc2ctPnRraXBfa2V5X2RhdGEsIGtleWJ1Ziwgc2l6ZW9mKG1zZy0+dGtpcF9rZXlf ZGF0YSkpOwotCWtleWJ1ZiArPSBzaXplb2YobXNnLT50a2lwX2tleV9kYXRhKTsKLQltZW1jcHko bXNnLT50eF9taWNfa2V5LCBrZXlidWYsIHNpemVvZihtc2ctPnR4X21pY19rZXkpKTsKLQlrZXli dWYgKz0gc2l6ZW9mKG1zZy0+dHhfbWljX2tleSk7Ci0JbWVtY3B5KG1zZy0+cnhfbWljX2tleSwg a2V5YnVmLCBzaXplb2YobXNnLT5yeF9taWNfa2V5KSk7Ci0JZXRoZXJfYWRkcl9jb3B5KG1zZy0+ cGVlcl9hZGRyZXNzLCBwZWVyX2FkZHIpOwotCXJldHVybiBISUZfS0VZX1RZUEVfVEtJUF9QQUlS V0lTRTsKLX0KLQotc3RhdGljIHU4IGZpbGxfdGtpcF9ncm91cChzdHJ1Y3QgaGlmX3RraXBfZ3Jv dXBfa2V5ICptc2csCi0JCQkgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSwKLQkJCSAg c3RydWN0IGllZWU4MDIxMV9rZXlfc2VxICpzZXEsCi0JCQkgIGVudW0gbmw4MDIxMV9pZnR5cGUg aWZ0eXBlKQotewotCXU4ICprZXlidWYgPSBrZXktPmtleTsKLQotCVdBUk4oa2V5LT5rZXlsZW4g IT0gc2l6ZW9mKG1zZy0+dGtpcF9rZXlfZGF0YSkKLQkJCSAgICArIDIgKiBzaXplb2YobXNnLT5y eF9taWNfa2V5KSwgImluY29uc2lzdGVudCBkYXRhIik7Ci0JbXNnLT5rZXlfaWQgPSBrZXktPmtl eWlkeDsKLQltZW1jcHkobXNnLT5yeF9zZXF1ZW5jZV9jb3VudGVyLAotCSAgICAgICAmc2VxLT50 a2lwLml2MTYsIHNpemVvZihzZXEtPnRraXAuaXYxNikpOwotCW1lbWNweShtc2ctPnJ4X3NlcXVl bmNlX2NvdW50ZXIgKyBzaXplb2YodTE2KSwKLQkgICAgICAgJnNlcS0+dGtpcC5pdjMyLCBzaXpl b2Yoc2VxLT50a2lwLml2MzIpKTsKLQltZW1jcHkobXNnLT50a2lwX2tleV9kYXRhLCBrZXlidWYs IHNpemVvZihtc2ctPnRraXBfa2V5X2RhdGEpKTsKLQlrZXlidWYgKz0gc2l6ZW9mKG1zZy0+dGtp cF9rZXlfZGF0YSk7Ci0JaWYgKGlmdHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKLQkJLyogVXNl IFR4IE1JQyBLZXkgKi8KLQkJbWVtY3B5KG1zZy0+cnhfbWljX2tleSwga2V5YnVmICsgMCwgc2l6 ZW9mKG1zZy0+cnhfbWljX2tleSkpOwotCWVsc2UKLQkJLyogVXNlIFJ4IE1JQyBLZXkgKi8KLQkJ bWVtY3B5KG1zZy0+cnhfbWljX2tleSwga2V5YnVmICsgOCwgc2l6ZW9mKG1zZy0+cnhfbWljX2tl eSkpOwotCXJldHVybiBISUZfS0VZX1RZUEVfVEtJUF9HUk9VUDsKLX0KLQotc3RhdGljIHU4IGZp bGxfY2NtcF9wYWlyKHN0cnVjdCBoaWZfYWVzX3BhaXJ3aXNlX2tleSAqbXNnLAotCQkJIHN0cnVj dCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSwgdTggKnBlZXJfYWRkcikKLXsKLQlXQVJOKGtleS0+ a2V5bGVuICE9IHNpemVvZihtc2ctPmFlc19rZXlfZGF0YSksICJpbmNvbnNpc3RlbnQgZGF0YSIp OwotCWV0aGVyX2FkZHJfY29weShtc2ctPnBlZXJfYWRkcmVzcywgcGVlcl9hZGRyKTsKLQltZW1j cHkobXNnLT5hZXNfa2V5X2RhdGEsIGtleS0+a2V5LCBrZXktPmtleWxlbik7Ci0JcmV0dXJuIEhJ Rl9LRVlfVFlQRV9BRVNfUEFJUldJU0U7Ci19Ci0KLXN0YXRpYyB1OCBmaWxsX2NjbXBfZ3JvdXAo c3RydWN0IGhpZl9hZXNfZ3JvdXBfa2V5ICptc2csCi0JCQkgIHN0cnVjdCBpZWVlODAyMTFfa2V5 X2NvbmYgKmtleSwKLQkJCSAgc3RydWN0IGllZWU4MDIxMV9rZXlfc2VxICpzZXEpCi17Ci0JV0FS TihrZXktPmtleWxlbiAhPSBzaXplb2YobXNnLT5hZXNfa2V5X2RhdGEpLCAiaW5jb25zaXN0ZW50 IGRhdGEiKTsKLQltZW1jcHkobXNnLT5hZXNfa2V5X2RhdGEsIGtleS0+a2V5LCBrZXktPmtleWxl bik7Ci0JbWVtY3B5KG1zZy0+cnhfc2VxdWVuY2VfY291bnRlciwgc2VxLT5jY21wLnBuLCBzaXpl b2Yoc2VxLT5jY21wLnBuKSk7Ci0JbWVtcmV2ZXJzZShtc2ctPnJ4X3NlcXVlbmNlX2NvdW50ZXIs IHNpemVvZihzZXEtPmNjbXAucG4pKTsKLQltc2ctPmtleV9pZCA9IGtleS0+a2V5aWR4OwotCXJl dHVybiBISUZfS0VZX1RZUEVfQUVTX0dST1VQOwotfQotCi1zdGF0aWMgdTggZmlsbF9zbXM0X3Bh aXIoc3RydWN0IGhpZl93YXBpX3BhaXJ3aXNlX2tleSAqbXNnLAotCQkJIHN0cnVjdCBpZWVlODAy MTFfa2V5X2NvbmYgKmtleSwgdTggKnBlZXJfYWRkcikKLXsKLQl1OCAqa2V5YnVmID0ga2V5LT5r ZXk7Ci0KLQlXQVJOKGtleS0+a2V5bGVuICE9IHNpemVvZihtc2ctPndhcGlfa2V5X2RhdGEpCi0J CQkgICAgKyBzaXplb2YobXNnLT5taWNfa2V5X2RhdGEpLCAiaW5jb25zaXN0ZW50IGRhdGEiKTsK LQlldGhlcl9hZGRyX2NvcHkobXNnLT5wZWVyX2FkZHJlc3MsIHBlZXJfYWRkcik7Ci0JbWVtY3B5 KG1zZy0+d2FwaV9rZXlfZGF0YSwga2V5YnVmLCBzaXplb2YobXNnLT53YXBpX2tleV9kYXRhKSk7 Ci0Ja2V5YnVmICs9IHNpemVvZihtc2ctPndhcGlfa2V5X2RhdGEpOwotCW1lbWNweShtc2ctPm1p Y19rZXlfZGF0YSwga2V5YnVmLCBzaXplb2YobXNnLT5taWNfa2V5X2RhdGEpKTsKLQltc2ctPmtl eV9pZCA9IGtleS0+a2V5aWR4OwotCXJldHVybiBISUZfS0VZX1RZUEVfV0FQSV9QQUlSV0lTRTsK LX0KLQotc3RhdGljIHU4IGZpbGxfc21zNF9ncm91cChzdHJ1Y3QgaGlmX3dhcGlfZ3JvdXBfa2V5 ICptc2csCi0JCQkgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKLXsKLQl1OCAqa2V5 YnVmID0ga2V5LT5rZXk7Ci0KLQlXQVJOKGtleS0+a2V5bGVuICE9IHNpemVvZihtc2ctPndhcGlf a2V5X2RhdGEpCi0JCQkgICAgKyBzaXplb2YobXNnLT5taWNfa2V5X2RhdGEpLCAiaW5jb25zaXN0 ZW50IGRhdGEiKTsKLQltZW1jcHkobXNnLT53YXBpX2tleV9kYXRhLCBrZXlidWYsIHNpemVvZiht c2ctPndhcGlfa2V5X2RhdGEpKTsKLQlrZXlidWYgKz0gc2l6ZW9mKG1zZy0+d2FwaV9rZXlfZGF0 YSk7Ci0JbWVtY3B5KG1zZy0+bWljX2tleV9kYXRhLCBrZXlidWYsIHNpemVvZihtc2ctPm1pY19r ZXlfZGF0YSkpOwotCW1zZy0+a2V5X2lkID0ga2V5LT5rZXlpZHg7Ci0JcmV0dXJuIEhJRl9LRVlf VFlQRV9XQVBJX0dST1VQOwotfQotCi1zdGF0aWMgdTggZmlsbF9hZXNfY21hY19ncm91cChzdHJ1 Y3QgaGlmX2lndGtfZ3JvdXBfa2V5ICptc2csCi0JCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2tl eV9jb25mICprZXksCi0JCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9zZXEgKnNlcSkKLXsK LQlXQVJOKGtleS0+a2V5bGVuICE9IHNpemVvZihtc2ctPmlndGtfa2V5X2RhdGEpLCAiaW5jb25z aXN0ZW50IGRhdGEiKTsKLQltZW1jcHkobXNnLT5pZ3RrX2tleV9kYXRhLCBrZXktPmtleSwga2V5 LT5rZXlsZW4pOwotCW1lbWNweShtc2ctPmlwbiwgc2VxLT5hZXNfY21hYy5wbiwgc2l6ZW9mKHNl cS0+YWVzX2NtYWMucG4pKTsKLQltZW1yZXZlcnNlKG1zZy0+aXBuLCBzaXplb2Yoc2VxLT5hZXNf Y21hYy5wbikpOwotCW1zZy0+a2V5X2lkID0ga2V5LT5rZXlpZHg7Ci0JcmV0dXJuIEhJRl9LRVlf VFlQRV9JR1RLX0dST1VQOwotfQotCi1zdGF0aWMgaW50IHdmeF9hZGRfa2V5KHN0cnVjdCB3Znhf dmlmICp3dmlmLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAotCQkgICAgICAgc3RydWN0IGll ZWU4MDIxMV9rZXlfY29uZiAqa2V5KQotewotCWludCByZXQ7Ci0Jc3RydWN0IGhpZl9yZXFfYWRk X2tleSBrID0geyB9OwotCXN0cnVjdCBpZWVlODAyMTFfa2V5X3NlcSBzZXE7Ci0Jc3RydWN0IHdm eF9kZXYgKndkZXYgPSB3dmlmLT53ZGV2OwotCWludCBpZHggPSB3ZnhfYWxsb2Nfa2V5KHd2aWYt PndkZXYpOwotCWJvb2wgcGFpcndpc2UgPSBrZXktPmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFH X1BBSVJXSVNFOwotCi0JV0FSTihrZXktPmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJX SVNFICYmICFzdGEsICJpbmNvbnNpc3RlbnQgZGF0YSIpOwotCWllZWU4MDIxMV9nZXRfa2V5X3J4 X3NlcShrZXksIDAsICZzZXEpOwotCWlmIChpZHggPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlr LmludF9pZCA9IHd2aWYtPmlkOwotCWsuZW50cnlfaW5kZXggPSBpZHg7Ci0JaWYgKGtleS0+Y2lw aGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwIHx8Ci0JICAgIGtleS0+Y2lwaGVyID09IFdM QU5fQ0lQSEVSX1NVSVRFX1dFUDEwNCkgewotCQlpZiAocGFpcndpc2UpCi0JCQlrLnR5cGUgPSBm aWxsX3dlcF9wYWlyKCZrLmtleS53ZXBfcGFpcndpc2Vfa2V5LCBrZXksCi0JCQkJCSAgICAgICBz dGEtPmFkZHIpOwotCQllbHNlCi0JCQlrLnR5cGUgPSBmaWxsX3dlcF9ncm91cCgmay5rZXkud2Vw X2dyb3VwX2tleSwga2V5KTsKLQl9IGVsc2UgaWYgKGtleS0+Y2lwaGVyID09IFdMQU5fQ0lQSEVS X1NVSVRFX1RLSVApIHsKLQkJaWYgKHBhaXJ3aXNlKQotCQkJay50eXBlID0gZmlsbF90a2lwX3Bh aXIoJmsua2V5LnRraXBfcGFpcndpc2Vfa2V5LCBrZXksCi0JCQkJCQlzdGEtPmFkZHIpOwotCQll bHNlCi0JCQlrLnR5cGUgPSBmaWxsX3RraXBfZ3JvdXAoJmsua2V5LnRraXBfZ3JvdXBfa2V5LCBr ZXksCi0JCQkJCQkgJnNlcSwgd3ZpZi0+dmlmLT50eXBlKTsKLQl9IGVsc2UgaWYgKGtleS0+Y2lw aGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVApIHsKLQkJaWYgKHBhaXJ3aXNlKQotCQkJay50 eXBlID0gZmlsbF9jY21wX3BhaXIoJmsua2V5LmFlc19wYWlyd2lzZV9rZXksIGtleSwKLQkJCQkJ CXN0YS0+YWRkcik7Ci0JCWVsc2UKLQkJCWsudHlwZSA9IGZpbGxfY2NtcF9ncm91cCgmay5rZXku YWVzX2dyb3VwX2tleSwga2V5LAotCQkJCQkJICZzZXEpOwotCX0gZWxzZSBpZiAoa2V5LT5jaXBo ZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfU01TNCkgewotCQlpZiAocGFpcndpc2UpCi0JCQlrLnR5 cGUgPSBmaWxsX3NtczRfcGFpcigmay5rZXkud2FwaV9wYWlyd2lzZV9rZXksIGtleSwKLQkJCQkJ CXN0YS0+YWRkcik7Ci0JCWVsc2UKLQkJCWsudHlwZSA9IGZpbGxfc21zNF9ncm91cCgmay5rZXku d2FwaV9ncm91cF9rZXksIGtleSk7Ci0JfSBlbHNlIGlmIChrZXktPmNpcGhlciA9PSBXTEFOX0NJ UEhFUl9TVUlURV9BRVNfQ01BQykgewotCQlrLnR5cGUgPSBmaWxsX2Flc19jbWFjX2dyb3VwKCZr LmtleS5pZ3RrX2dyb3VwX2tleSwga2V5LCAmc2VxKTsKLQkJa2V5LT5mbGFncyB8PSBJRUVFODAy MTFfS0VZX0ZMQUdfR0VORVJBVEVfTU1JRTsKLQl9IGVsc2UgewotCQlkZXZfd2Fybih3ZGV2LT5k ZXYsICJ1bnN1cHBvcnRlZCBrZXkgdHlwZSAlZFxuIiwga2V5LT5jaXBoZXIpOwotCQl3ZnhfZnJl ZV9rZXkod2RldiwgaWR4KTsKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQlyZXQgPSBoaWZf YWRkX2tleSh3ZGV2LCAmayk7Ci0JaWYgKHJldCkgewotCQl3ZnhfZnJlZV9rZXkod2RldiwgaWR4 KTsKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQlrZXktPmZsYWdzIHw9IElFRUU4MDIxMV9L RVlfRkxBR19QVVRfSVZfU1BBQ0UgfAotCQkgICAgICBJRUVFODAyMTFfS0VZX0ZMQUdfUkVTRVJW RV9UQUlMUk9PTTsKLQlrZXktPmh3X2tleV9pZHggPSBpZHg7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0 YXRpYyBpbnQgd2Z4X3JlbW92ZV9rZXkoc3RydWN0IHdmeF92aWYgKnd2aWYsIHN0cnVjdCBpZWVl ODAyMTFfa2V5X2NvbmYgKmtleSkKLXsKLQlXQVJOKGtleS0+aHdfa2V5X2lkeCA+PSBNQVhfS0VZ X0VOVFJJRVMsICJjb3JydXB0ZWQgaHdfa2V5X2lkeCIpOwotCXdmeF9mcmVlX2tleSh3dmlmLT53 ZGV2LCBrZXktPmh3X2tleV9pZHgpOwotCXJldHVybiBoaWZfcmVtb3ZlX2tleSh3dmlmLT53ZGV2 LCBrZXktPmh3X2tleV9pZHgpOwotfQotCi1pbnQgd2Z4X3NldF9rZXkoc3RydWN0IGllZWU4MDIx MV9odyAqaHcsIGVudW0gc2V0X2tleV9jbWQgY21kLAotCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAq dmlmLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAotCQlzdHJ1Y3QgaWVlZTgwMjExX2tleV9j b25mICprZXkpCi17Ci0JaW50IHJldCA9IC1FT1BOT1RTVVBQOwotCXN0cnVjdCB3ZnhfdmlmICp3 dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKLQotCW11dGV4X2xvY2soJnd2 aWYtPndkZXYtPmNvbmZfbXV0ZXgpOwotCWlmIChjbWQgPT0gU0VUX0tFWSkKLQkJcmV0ID0gd2Z4 X2FkZF9rZXkod3ZpZiwgc3RhLCBrZXkpOwotCWlmIChjbWQgPT0gRElTQUJMRV9LRVkpCi0JCXJl dCA9IHdmeF9yZW1vdmVfa2V5KHd2aWYsIGtleSk7Ci0JbXV0ZXhfdW5sb2NrKCZ3dmlmLT53ZGV2 LT5jb25mX211dGV4KTsKLQlyZXR1cm4gcmV0OwotfQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0 YWdpbmcvd2Z4L2tleS5oIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9rZXkuaApkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMmQxMzVlZmY3YWYyLi4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVy cy9zdGFnaW5nL3dmeC9rZXkuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS8qIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KLS8qCi0gKiBLZXkgbWFuYWdl bWVudCByZWxhdGVkIGZ1bmN0aW9ucy4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCwg U2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSAqIENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJp Y3Nzb24KLSAqLwotI2lmbmRlZiBXRlhfS0VZX0gKLSNkZWZpbmUgV0ZYX0tFWV9ICi0KLSNpbmNs dWRlIDxuZXQvbWFjODAyMTEuaD4KLQotc3RydWN0IHdmeF9kZXY7Ci1zdHJ1Y3Qgd2Z4X3ZpZjsK LQotaW50IHdmeF9zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBlbnVtIHNldF9rZXlf Y21kIGNtZCwKLQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgc3RydWN0IGllZWU4MDIxMV9z dGEgKnN0YSwKLQkJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KTsKLQotI2VuZGlmCmRp ZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L21haW4uYyBiL2RyaXZlcnMvc3RhZ2luZy93 ZngvbWFpbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NThkNzc4Y2M1ODkuLjAw MDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L21haW4uYworKysgL2Rldi9udWxs CkBAIC0xLDUwNiArMCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1v bmx5Ci0vKgotICogRGV2aWNlIHByb2JlIGFuZCByZWdpc3Rlci4KLSAqCi0gKiBDb3B5cmlnaHQg KGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSAqIENvcHlyaWdodCAo YykgMjAxMCwgU1QtRXJpY3Nzb24KLSAqIENvcHlyaWdodCAoYykgMjAwOCwgSm9oYW5uZXMgQmVy ZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KLSAqIENvcHlyaWdodCAoYykgMjAwOCBOb2tp YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKiBDb3B5cmlnaHQg KGMpIDIwMDctMjAwOSwgQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAd2ViLmRlPgotICog Q29weXJpZ2h0IChjKSAyMDA2LCBNaWNoYWVsIFd1IDxmbGFtaW5naWNlQHNvdXJtaWxrLm5ldD4K LSAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA2IEplYW4tQmFwdGlzdGUgTm90ZSA8amJub3RlQGdt YWlsLmNvbT4sIGV0IGFsLgotICovCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVk ZSA8bGludXgvb2YuaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9uZXQuaD4KLSNpbmNsdWRlIDxsaW51 eC9ncGlvL2NvbnN1bWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvbW1jL3NkaW9fZnVuYy5oPgotI2lu Y2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgot I2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+Ci0KLSNpbmNsdWRlICJtYWluLmgiCi0jaW5jbHVk ZSAid2Z4LmgiCi0jaW5jbHVkZSAiZndpby5oIgotI2luY2x1ZGUgImh3aW8uaCIKLSNpbmNsdWRl ICJidXMuaCIKLSNpbmNsdWRlICJiaC5oIgotI2luY2x1ZGUgInN0YS5oIgotI2luY2x1ZGUgImtl eS5oIgotI2luY2x1ZGUgInNjYW4uaCIKLSNpbmNsdWRlICJkZWJ1Zy5oIgotI2luY2x1ZGUgImRh dGFfdHguaCIKLSNpbmNsdWRlICJoaWZfdHhfbWliLmgiCi0jaW5jbHVkZSAiaGlmX2FwaV9jbWQu aCIKLQotI2RlZmluZSBXRlhfUERTX01BWF9TSVpFIDE1MDAKLQotTU9EVUxFX0RFU0NSSVBUSU9O KCJTaWxpY29uIExhYnMgODAyLjExIFdpcmVsZXNzIExBTiBkcml2ZXIgZm9yIFdGMjAwIik7Ci1N T0RVTEVfQVVUSE9SKCJKw6lyw7RtZSBQb3VpbGxlciA8amVyb21lLnBvdWlsbGVyQHNpbGFicy5j b20+Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLSNkZWZpbmUgUkFURVRBQl9FTlQoX3Jh dGUsIF9yYXRlaWQsIF9mbGFncykgeyBcCi0JLmJpdHJhdGUgID0gKF9yYXRlKSwgICBcCi0JLmh3 X3ZhbHVlID0gKF9yYXRlaWQpLCBcCi0JLmZsYWdzICAgID0gKF9mbGFncyksICBcCi19Ci0KLXN0 YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgd2Z4X3JhdGVzW10gPSB7Ci0JUkFURVRBQl9FTlQo MTAsICAwLCAgMCksCi0JUkFURVRBQl9FTlQoMjAsICAxLCAgSUVFRTgwMjExX1JBVEVfU0hPUlRf UFJFQU1CTEUpLAotCVJBVEVUQUJfRU5UKDU1LCAgMiwgIElFRUU4MDIxMV9SQVRFX1NIT1JUX1BS RUFNQkxFKSwKLQlSQVRFVEFCX0VOVCgxMTAsIDMsICBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVB TUJMRSksCi0JUkFURVRBQl9FTlQoNjAsICA2LCAgMCksCi0JUkFURVRBQl9FTlQoOTAsICA3LCAg MCksCi0JUkFURVRBQl9FTlQoMTIwLCA4LCAgMCksCi0JUkFURVRBQl9FTlQoMTgwLCA5LCAgMCks Ci0JUkFURVRBQl9FTlQoMjQwLCAxMCwgMCksCi0JUkFURVRBQl9FTlQoMzYwLCAxMSwgMCksCi0J UkFURVRBQl9FTlQoNDgwLCAxMiwgMCksCi0JUkFURVRBQl9FTlQoNTQwLCAxMywgMCksCi19Owot Ci0jZGVmaW5lIENIQU4yRyhfY2hhbm5lbCwgX2ZyZXEsIF9mbGFncykgeyBcCi0JLmJhbmQgPSBO TDgwMjExX0JBTkRfMkdIWiwgXAotCS5jZW50ZXJfZnJlcSA9IChfZnJlcSksICAgIFwKLQkuaHdf dmFsdWUgPSAoX2NoYW5uZWwpLCAgICBcCi0JLmZsYWdzID0gKF9mbGFncyksICAgICAgICAgXAot CS5tYXhfYW50ZW5uYV9nYWluID0gMCwgICAgIFwKLQkubWF4X3Bvd2VyID0gMzAsICAgICAgICAg ICBcCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgd2Z4XzJnaHpfY2hhbnRh YmxlW10gPSB7Ci0JQ0hBTjJHKDEsICAyNDEyLCAwKSwKLQlDSEFOMkcoMiwgIDI0MTcsIDApLAot CUNIQU4yRygzLCAgMjQyMiwgMCksCi0JQ0hBTjJHKDQsICAyNDI3LCAwKSwKLQlDSEFOMkcoNSwg IDI0MzIsIDApLAotCUNIQU4yRyg2LCAgMjQzNywgMCksCi0JQ0hBTjJHKDcsICAyNDQyLCAwKSwK LQlDSEFOMkcoOCwgIDI0NDcsIDApLAotCUNIQU4yRyg5LCAgMjQ1MiwgMCksCi0JQ0hBTjJHKDEw LCAyNDU3LCAwKSwKLQlDSEFOMkcoMTEsIDI0NjIsIDApLAotCUNIQU4yRygxMiwgMjQ2NywgMCks Ci0JQ0hBTjJHKDEzLCAyNDcyLCAwKSwKLQlDSEFOMkcoMTQsIDI0ODQsIDApLAotfTsKLQotc3Rh dGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgd2Z4X2JhbmRfMmdoeiA9 IHsKLQkuY2hhbm5lbHMgPSB3ZnhfMmdoel9jaGFudGFibGUsCi0JLm5fY2hhbm5lbHMgPSBBUlJB WV9TSVpFKHdmeF8yZ2h6X2NoYW50YWJsZSksCi0JLmJpdHJhdGVzID0gd2Z4X3JhdGVzLAotCS5u X2JpdHJhdGVzID0gQVJSQVlfU0laRSh3ZnhfcmF0ZXMpLAotCS5odF9jYXAgPSB7Ci0JCS8qIFJl Y2VpdmUgY2FwcyAqLwotCQkuY2FwID0gSUVFRTgwMjExX0hUX0NBUF9HUk5fRkxEIHwgSUVFRTgw MjExX0hUX0NBUF9TR0lfMjAgfAotCQkgICAgICAgSUVFRTgwMjExX0hUX0NBUF9NQVhfQU1TRFUg fAotCQkgICAgICAgKDEgPDwgSUVFRTgwMjExX0hUX0NBUF9SWF9TVEJDX1NISUZUKSwKLQkJLmh0 X3N1cHBvcnRlZCA9IDEsCi0JCS5hbXBkdV9mYWN0b3IgPSBJRUVFODAyMTFfSFRfTUFYX0FNUERV XzE2SywKLQkJLmFtcGR1X2RlbnNpdHkgPSBJRUVFODAyMTFfSFRfTVBEVV9ERU5TSVRZX05PTkUs Ci0JCS5tY3MgPSB7Ci0JCQkucnhfbWFzayA9IHsgMHhGRiB9LCAvKiBNQ1MwIHRvIE1DUzcgKi8K LQkJCS5yeF9oaWdoZXN0ID0gY3B1X3RvX2xlMTYoNzIpLAotCQkJLnR4X3BhcmFtcyA9IElFRUU4 MDIxMV9IVF9NQ1NfVFhfREVGSU5FRCwKLQkJfSwKLQl9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0 cnVjdCBpZWVlODAyMTFfaWZhY2VfbGltaXQgd2Rldl9pZmFjZV9saW1pdHNbXSA9IHsKLQl7IC5t YXggPSAxLCAudHlwZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfSwKLQl7IC5tYXgg PSAxLCAudHlwZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfQVApIH0sCi19OwotCi1zdGF0aWMgY29u c3Qgc3RydWN0IGllZWU4MDIxMV9pZmFjZV9jb21iaW5hdGlvbiB3ZnhfaWZhY2VfY29tYmluYXRp b25zW10gPSB7Ci0JewotCQkubnVtX2RpZmZlcmVudF9jaGFubmVscyA9IDIsCi0JCS5tYXhfaW50 ZXJmYWNlcyA9IDIsCi0JCS5saW1pdHMgPSB3ZGV2X2lmYWNlX2xpbWl0cywKLQkJLm5fbGltaXRz ID0gQVJSQVlfU0laRSh3ZGV2X2lmYWNlX2xpbWl0cyksCi0JfQotfTsKLQotc3RhdGljIGNvbnN0 IHN0cnVjdCBpZWVlODAyMTFfb3BzIHdmeF9vcHMgPSB7Ci0JLnN0YXJ0CQkJPSB3Znhfc3RhcnQs Ci0JLnN0b3AJCQk9IHdmeF9zdG9wLAotCS5hZGRfaW50ZXJmYWNlCQk9IHdmeF9hZGRfaW50ZXJm YWNlLAotCS5yZW1vdmVfaW50ZXJmYWNlCT0gd2Z4X3JlbW92ZV9pbnRlcmZhY2UsCi0JLmNvbmZp ZyAgICAgICAgICAgICAgICAgPSB3ZnhfY29uZmlnLAotCS50eAkJCT0gd2Z4X3R4LAotCS5qb2lu X2lic3MJCT0gd2Z4X2pvaW5faWJzcywKLQkubGVhdmVfaWJzcwkJPSB3ZnhfbGVhdmVfaWJzcywK LQkuY29uZl90eAkJPSB3ZnhfY29uZl90eCwKLQkuaHdfc2NhbgkJPSB3ZnhfaHdfc2NhbiwKLQku Y2FuY2VsX2h3X3NjYW4JCT0gd2Z4X2NhbmNlbF9od19zY2FuLAotCS5zdGFydF9hcAkJPSB3Znhf c3RhcnRfYXAsCi0JLnN0b3BfYXAJCT0gd2Z4X3N0b3BfYXAsCi0JLnN0YV9hZGQJCT0gd2Z4X3N0 YV9hZGQsCi0JLnN0YV9yZW1vdmUJCT0gd2Z4X3N0YV9yZW1vdmUsCi0JLnNldF90aW0JCT0gd2Z4 X3NldF90aW0sCi0JLnNldF9rZXkJCT0gd2Z4X3NldF9rZXksCi0JLnNldF9ydHNfdGhyZXNob2xk CT0gd2Z4X3NldF9ydHNfdGhyZXNob2xkLAotCS5zZXRfZGVmYXVsdF91bmljYXN0X2tleSA9IHdm eF9zZXRfZGVmYXVsdF91bmljYXN0X2tleSwKLQkuYnNzX2luZm9fY2hhbmdlZAk9IHdmeF9ic3Nf aW5mb19jaGFuZ2VkLAotCS5jb25maWd1cmVfZmlsdGVyCT0gd2Z4X2NvbmZpZ3VyZV9maWx0ZXIs Ci0JLmFtcGR1X2FjdGlvbgkJPSB3ZnhfYW1wZHVfYWN0aW9uLAotCS5mbHVzaAkJCT0gd2Z4X2Zs dXNoLAotCS5hZGRfY2hhbmN0eAkJPSB3ZnhfYWRkX2NoYW5jdHgsCi0JLnJlbW92ZV9jaGFuY3R4 CQk9IHdmeF9yZW1vdmVfY2hhbmN0eCwKLQkuY2hhbmdlX2NoYW5jdHgJCT0gd2Z4X2NoYW5nZV9j aGFuY3R4LAotCS5hc3NpZ25fdmlmX2NoYW5jdHgJPSB3ZnhfYXNzaWduX3ZpZl9jaGFuY3R4LAot CS51bmFzc2lnbl92aWZfY2hhbmN0eAk9IHdmeF91bmFzc2lnbl92aWZfY2hhbmN0eCwKLX07Ci0K LWJvb2wgd2Z4X2FwaV9vbGRlcl90aGFuKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgbWFqb3Is IGludCBtaW5vcikKLXsKLQlpZiAod2Rldi0+aHdfY2Fwcy5hcGlfdmVyc2lvbl9tYWpvciA8IG1h am9yKQotCQlyZXR1cm4gdHJ1ZTsKLQlpZiAod2Rldi0+aHdfY2Fwcy5hcGlfdmVyc2lvbl9tYWpv ciA+IG1ham9yKQotCQlyZXR1cm4gZmFsc2U7Ci0JaWYgKHdkZXYtPmh3X2NhcHMuYXBpX3ZlcnNp b25fbWlub3IgPCBtaW5vcikKLQkJcmV0dXJuIHRydWU7Ci0JcmV0dXJuIGZhbHNlOwotfQotCi0v KiBUaGUgZGV2aWNlIG5lZWRzIGRhdGEgYWJvdXQgdGhlIGFudGVubmEgY29uZmlndXJhdGlvbi4g VGhpcyBpbmZvcm1hdGlvbiBpbgotICogcHJvdmlkZWQgYnkgUERTIChQbGF0Zm9ybSBEYXRhIFNl dCwgdGhpcyBpcyB0aGUgd29yZGluZyB1c2VkIGluIFdGMjAwCi0gKiBkb2N1bWVudGF0aW9uKSBm aWxlcy4gRm9yIGhhcmR3YXJlIGludGVncmF0b3JzLCB0aGUgZnVsbCBwcm9jZXNzIHRvIGNyZWF0 ZQotICogUERTIGZpbGVzIGlzIGRlc2NyaWJlZCBoZXJlOgotICogICBodHRwczpnaXRodWIuY29t L1NpbGljb25MYWJzL3dmeC1maXJtd2FyZS9ibG9iL21hc3Rlci9QRFMvUkVBRE1FLm1kCi0gKgot ICogU28gdGhpcyBmdW5jdGlvbiBhaW1zIHRvIHNlbmQgUERTIHRvIHRoZSBkZXZpY2UuIEhvd2V2 ZXIsIHRoZSBQRFMgZmlsZSBpcwotICogb2Z0ZW4gYmlnZ2VyIHRoYW4gUnggYnVmZmVycyBvZiB0 aGUgY2hpcCwgc28gaXQgaGFzIHRvIGJlIHNlbnQgaW4gbXVsdGlwbGUKLSAqIHBhcnRzLgotICoK LSAqIEluIGFkZCwgdGhlIFBEUyBkYXRhIGNhbm5vdCBiZSBzcGxpdCBhbnl3aGVyZS4gVGhlIFBE UyBmaWxlcyBjb250YWlucyB0cmVlCi0gKiBzdHJ1Y3R1cmVzLiBCcmFjZXMgYXJlIHVzZWQgdG8g ZW50ZXIvbGVhdmUgYSBsZXZlbCBvZiB0aGUgdHJlZSAoaW4gYSBKU09OCi0gKiBmYXNoaW9uKS4g UERTIGZpbGVzIGNhbiBvbmx5IGJlZW4gc3BsaXQgYmV0d2VlbiByb290IG5vZGVzLgotICovCi1p bnQgd2Z4X3NlbmRfcGRzKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1OCAqYnVmLCBzaXplX3QgbGVu KQotewotCWludCByZXQ7Ci0JaW50IHN0YXJ0LCBicmFjZV9sZXZlbCwgaTsKLQotCXN0YXJ0ID0g MDsKLQlicmFjZV9sZXZlbCA9IDA7Ci0JaWYgKGJ1ZlswXSAhPSAneycpIHsKLQkJZGV2X2Vycih3 ZGV2LT5kZXYsICJ2YWxpZCBQRFMgc3RhcnQgd2l0aCAneycuIERpZCB5b3UgZm9yZ2V0IHRvIGNv bXByZXNzIGl0P1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlmb3IgKGkgPSAxOyBpIDwg bGVuIC0gMTsgaSsrKSB7Ci0JCWlmIChidWZbaV0gPT0gJ3snKQotCQkJYnJhY2VfbGV2ZWwrKzsK LQkJaWYgKGJ1ZltpXSA9PSAnfScpCi0JCQlicmFjZV9sZXZlbC0tOwotCQlpZiAoYnVmW2ldID09 ICd9JyAmJiAhYnJhY2VfbGV2ZWwpIHsKLQkJCWkrKzsKLQkJCWlmIChpIC0gc3RhcnQgKyAxID4g V0ZYX1BEU19NQVhfU0laRSkKLQkJCQlyZXR1cm4gLUVGQklHOwotCQkJYnVmW3N0YXJ0XSA9ICd7 JzsKLQkJCWJ1ZltpXSA9IDA7Ci0JCQlkZXZfZGJnKHdkZXYtPmRldiwgInNlbmQgUERTICclc30n XG4iLCBidWYgKyBzdGFydCk7Ci0JCQlidWZbaV0gPSAnfSc7Ci0JCQlyZXQgPSBoaWZfY29uZmln dXJhdGlvbih3ZGV2LCBidWYgKyBzdGFydCwKLQkJCQkJCWkgLSBzdGFydCArIDEpOwotCQkJaWYg KHJldCA+IDApIHsKLQkJCQlkZXZfZXJyKHdkZXYtPmRldiwgIlBEUyBieXRlcyAlZCB0byAlZDog aW52YWxpZCBkYXRhICh1bnN1cHBvcnRlZCBvcHRpb25zPylcbiIsCi0JCQkJCXN0YXJ0LCBpKTsK LQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJCWlmIChyZXQgPT0gLUVUSU1FRE9VVCkgewot CQkJCWRldl9lcnIod2Rldi0+ZGV2LCAiUERTIGJ5dGVzICVkIHRvICVkOiBjaGlwIGRpZG4ndCBy ZXBseSAoY29ycnVwdGVkIGZpbGU/KVxuIiwKLQkJCQkJc3RhcnQsIGkpOwotCQkJCXJldHVybiBy ZXQ7Ci0JCQl9Ci0JCQlpZiAocmV0KSB7Ci0JCQkJZGV2X2Vycih3ZGV2LT5kZXYsICJQRFMgYnl0 ZXMgJWQgdG8gJWQ6IGNoaXAgcmV0dXJuZWQgYW4gdW5rbm93biBlcnJvclxuIiwKLQkJCQkJc3Rh cnQsIGkpOwotCQkJCXJldHVybiAtRUlPOwotCQkJfQotCQkJYnVmW2ldID0gJywnOwotCQkJc3Rh cnQgPSBpOwotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHdmeF9zZW5kX3Bk YXRhX3BkcyhzdHJ1Y3Qgd2Z4X2RldiAqd2RldikKLXsKLQlpbnQgcmV0ID0gMDsKLQljb25zdCBz dHJ1Y3QgZmlybXdhcmUgKnBkczsKLQl1OCAqdG1wX2J1ZjsKLQotCXJldCA9IHJlcXVlc3RfZmly bXdhcmUoJnBkcywgd2Rldi0+cGRhdGEuZmlsZV9wZHMsIHdkZXYtPmRldik7Ci0JaWYgKHJldCkg ewotCQlkZXZfZXJyKHdkZXYtPmRldiwgImNhbid0IGxvYWQgYW50ZW5uYSBwYXJhbWV0ZXJzIChQ RFMgZmlsZSAlcykuIFRoZSBkZXZpY2UgbWF5IGJlIHVuc3RhYmxlLlxuIiwKLQkJCXdkZXYtPnBk YXRhLmZpbGVfcGRzKTsKLQkJZ290byBlcnIxOwotCX0KLQl0bXBfYnVmID0ga21lbWR1cChwZHMt PmRhdGEsIHBkcy0+c2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0bXBfYnVmKSB7Ci0JCXJldCA9 IC1FTk9NRU07Ci0JCWdvdG8gZXJyMjsKLQl9Ci0JcmV0ID0gd2Z4X3NlbmRfcGRzKHdkZXYsIHRt cF9idWYsIHBkcy0+c2l6ZSk7Ci0Ja2ZyZWUodG1wX2J1Zik7Ci1lcnIyOgotCXJlbGVhc2VfZmly bXdhcmUocGRzKTsKLWVycjE6Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgd2Z4X2Zy ZWVfY29tbW9uKHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IHdmeF9kZXYgKndkZXYgPSBkYXRhOwot Ci0JbXV0ZXhfZGVzdHJveSgmd2Rldi0+dHhfcG93ZXJfbG9vcF9pbmZvX2xvY2spOwotCW11dGV4 X2Rlc3Ryb3koJndkZXYtPnJ4X3N0YXRzX2xvY2spOwotCW11dGV4X2Rlc3Ryb3koJndkZXYtPmNv bmZfbXV0ZXgpOwotCWllZWU4MDIxMV9mcmVlX2h3KHdkZXYtPmh3KTsKLX0KLQotc3RydWN0IHdm eF9kZXYgKndmeF9pbml0X2NvbW1vbihzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJY29uc3Qgc3Ry dWN0IHdmeF9wbGF0Zm9ybV9kYXRhICpwZGF0YSwKLQkJCQljb25zdCBzdHJ1Y3QgaHdidXNfb3Bz ICpod2J1c19vcHMsCi0JCQkJdm9pZCAqaHdidXNfcHJpdikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjEx X2h3ICpodzsKLQlzdHJ1Y3Qgd2Z4X2RldiAqd2RldjsKLQotCWh3ID0gaWVlZTgwMjExX2FsbG9j X2h3KHNpemVvZihzdHJ1Y3Qgd2Z4X2RldiksICZ3Znhfb3BzKTsKLQlpZiAoIWh3KQotCQlyZXR1 cm4gTlVMTDsKLQotCVNFVF9JRUVFODAyMTFfREVWKGh3LCBkZXYpOwotCi0JaWVlZTgwMjExX2h3 X3NldChodywgVFhfQU1QRFVfU0VUVVBfSU5fSFcpOwotCWllZWU4MDIxMV9od19zZXQoaHcsIEFN UERVX0FHR1JFR0FUSU9OKTsKLQlpZWVlODAyMTFfaHdfc2V0KGh3LCBDT05ORUNUSU9OX01PTklU T1IpOwotCWllZWU4MDIxMV9od19zZXQoaHcsIFJFUE9SVFNfVFhfQUNLX1NUQVRVUyk7Ci0JaWVl ZTgwMjExX2h3X3NldChodywgU1VQUE9SVFNfRFlOQU1JQ19QUyk7Ci0JaWVlZTgwMjExX2h3X3Nl dChodywgU0lHTkFMX0RCTSk7Ci0JaWVlZTgwMjExX2h3X3NldChodywgU1VQUE9SVFNfUFMpOwot CWllZWU4MDIxMV9od19zZXQoaHcsIE1GUF9DQVBBQkxFKTsKLQotCWh3LT52aWZfZGF0YV9zaXpl ID0gc2l6ZW9mKHN0cnVjdCB3ZnhfdmlmKTsKLQlody0+c3RhX2RhdGFfc2l6ZSA9IHNpemVvZihz dHJ1Y3Qgd2Z4X3N0YV9wcml2KTsKLQlody0+cXVldWVzID0gNDsKLQlody0+bWF4X3JhdGVzID0g ODsKLQlody0+bWF4X3JhdGVfdHJpZXMgPSA4OwotCWh3LT5leHRyYV90eF9oZWFkcm9vbSA9IHNp emVvZihzdHJ1Y3QgaGlmX21zZykKLQkJCQkrIHNpemVvZihzdHJ1Y3QgaGlmX3JlcV90eCkKLQkJ CQkrIDQgLyogYWxpZ25tZW50ICovICsgOCAvKiBUS0lQIElWICovOwotCWh3LT53aXBoeS0+aW50 ZXJmYWNlX21vZGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwKLQkJCQkgICAgIEJJ VChOTDgwMjExX0lGVFlQRV9BREhPQykgfAotCQkJCSAgICAgQklUKE5MODAyMTFfSUZUWVBFX0FQ KTsKLQlody0+d2lwaHktPnByb2JlX3Jlc3Bfb2ZmbG9hZCA9IE5MODAyMTFfUFJPQkVfUkVTUF9P RkZMT0FEX1NVUFBPUlRfV1BTIHwKLQkJCQkJTkw4MDIxMV9QUk9CRV9SRVNQX09GRkxPQURfU1VQ UE9SVF9XUFMyIHwKLQkJCQkJTkw4MDIxMV9QUk9CRV9SRVNQX09GRkxPQURfU1VQUE9SVF9QMlAg fAotCQkJCQlOTDgwMjExX1BST0JFX1JFU1BfT0ZGTE9BRF9TVVBQT1JUXzgwMjExVTsKLQlody0+ d2lwaHktPmZlYXR1cmVzIHw9IE5MODAyMTFfRkVBVFVSRV9BUF9TQ0FOOwotCWh3LT53aXBoeS0+ ZmxhZ3MgfD0gV0lQSFlfRkxBR19BUF9QUk9CRV9SRVNQX09GRkxPQUQ7Ci0JaHctPndpcGh5LT5m bGFncyB8PSBXSVBIWV9GTEFHX0FQX1VBUFNEOwotCWh3LT53aXBoeS0+bWF4X2FwX2Fzc29jX3N0 YSA9IEhJRl9MSU5LX0lEX01BWDsKLQlody0+d2lwaHktPm1heF9zY2FuX3NzaWRzID0gMjsKLQlo dy0+d2lwaHktPm1heF9zY2FuX2llX2xlbiA9IElFRUU4MDIxMV9NQVhfREFUQV9MRU47Ci0JaHct PndpcGh5LT5uX2lmYWNlX2NvbWJpbmF0aW9ucyA9IEFSUkFZX1NJWkUod2Z4X2lmYWNlX2NvbWJp bmF0aW9ucyk7Ci0JaHctPndpcGh5LT5pZmFjZV9jb21iaW5hdGlvbnMgPSB3ZnhfaWZhY2VfY29t YmluYXRpb25zOwotCWh3LT53aXBoeS0+YmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdID0gZGV2bV9r bWFsbG9jKGRldiwgc2l6ZW9mKHdmeF9iYW5kXzJnaHopLCBHRlBfS0VSTkVMKTsKLQkvKiBGSVhN RTogYWxzbyBjb3B5IHdmeF9yYXRlcyBhbmQgd2Z4XzJnaHpfY2hhbnRhYmxlICovCi0JbWVtY3B5 KGh3LT53aXBoeS0+YmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdLCAmd2Z4X2JhbmRfMmdoeiwKLQkg ICAgICAgc2l6ZW9mKHdmeF9iYW5kXzJnaHopKTsKLQotCXdkZXYgPSBody0+cHJpdjsKLQl3ZGV2 LT5odyA9IGh3OwotCXdkZXYtPmRldiA9IGRldjsKLQl3ZGV2LT5od2J1c19vcHMgPSBod2J1c19v cHM7Ci0Jd2Rldi0+aHdidXNfcHJpdiA9IGh3YnVzX3ByaXY7Ci0JbWVtY3B5KCZ3ZGV2LT5wZGF0 YSwgcGRhdGEsIHNpemVvZigqcGRhdGEpKTsKLQlvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhkZXYt Pm9mX25vZGUsICJjb25maWctZmlsZSIsCi0JCQkJJndkZXYtPnBkYXRhLmZpbGVfcGRzKTsKLQl3 ZGV2LT5wZGF0YS5ncGlvX3dha2V1cCA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKGRldiwgIndh a2V1cCIsCi0JCQkJCQkJICBHUElPRF9PVVRfTE9XKTsKLQlpZiAoSVNfRVJSKHdkZXYtPnBkYXRh LmdwaW9fd2FrZXVwKSkKLQkJcmV0dXJuIE5VTEw7Ci0JaWYgKHdkZXYtPnBkYXRhLmdwaW9fd2Fr ZXVwKQotCQlncGlvZF9zZXRfY29uc3VtZXJfbmFtZSh3ZGV2LT5wZGF0YS5ncGlvX3dha2V1cCwg IndmeCB3YWtldXAiKTsKLQotCW11dGV4X2luaXQoJndkZXYtPmNvbmZfbXV0ZXgpOwotCW11dGV4 X2luaXQoJndkZXYtPnJ4X3N0YXRzX2xvY2spOwotCW11dGV4X2luaXQoJndkZXYtPnR4X3Bvd2Vy X2xvb3BfaW5mb19sb2NrKTsKLQlpbml0X2NvbXBsZXRpb24oJndkZXYtPmZpcm13YXJlX3JlYWR5 KTsKLQlJTklUX0RFTEFZRURfV09SSygmd2Rldi0+Y29vbGluZ190aW1lb3V0X3dvcmssCi0JCQkg IHdmeF9jb29saW5nX3RpbWVvdXRfd29yayk7Ci0Jc2tiX3F1ZXVlX2hlYWRfaW5pdCgmd2Rldi0+ dHhfcGVuZGluZyk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmd2Rldi0+dHhfZGVxdWV1ZSk7Ci0J d2Z4X2luaXRfaGlmX2NtZCgmd2Rldi0+aGlmX2NtZCk7Ci0Jd2Rldi0+Zm9yY2VfcHNfdGltZW91 dCA9IC0xOwotCi0JaWYgKGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIHdmeF9mcmVlX2Nv bW1vbiwgd2RldikpCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuIHdkZXY7Ci19Ci0KLWludCB3 ZnhfcHJvYmUoc3RydWN0IHdmeF9kZXYgKndkZXYpCi17Ci0JaW50IGk7Ci0JaW50IGVycjsKLQlz dHJ1Y3QgZ3Bpb19kZXNjICpncGlvX3NhdmVkOwotCi0JLyogRHVyaW5nIGZpcnN0IHBhcnQgb2Yg Ym9vdCwgZ3Bpb193YWtldXAgY2Fubm90IHlldCBiZWVuIHVzZWQuIFNvCi0JICogcHJldmVudCBi aCgpIHRvIHRvdWNoIGl0LgotCSAqLwotCWdwaW9fc2F2ZWQgPSB3ZGV2LT5wZGF0YS5ncGlvX3dh a2V1cDsKLQl3ZGV2LT5wZGF0YS5ncGlvX3dha2V1cCA9IE5VTEw7Ci0Jd2Rldi0+cG9sbF9pcnEg PSB0cnVlOwotCi0Jd2Z4X2JoX3JlZ2lzdGVyKHdkZXYpOwotCi0JZXJyID0gd2Z4X2luaXRfZGV2 aWNlKHdkZXYpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyMDsKLQotCXdmeF9iaF9wb2xsX2lycSh3 ZGV2KTsKLQllcnIgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJndkZXYtPmZpcm13YXJl X3JlYWR5LCAxICogSFopOwotCWlmIChlcnIgPD0gMCkgewotCQlpZiAoZXJyID09IDApIHsKLQkJ CWRldl9lcnIod2Rldi0+ZGV2LCAidGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciBzdGFydHVwIGlu ZGljYXRpb25cbiIpOwotCQkJZXJyID0gLUVUSU1FRE9VVDsKLQkJfSBlbHNlIGlmIChlcnIgPT0g LUVSRVNUQVJUU1lTKSB7Ci0JCQlkZXZfaW5mbyh3ZGV2LT5kZXYsICJwcm9iZSBpbnRlcnJ1cHRl ZCBieSB1c2VyXG4iKTsKLQkJfQotCQlnb3RvIGVycjA7Ci0JfQotCi0JLyogRklYTUU6IGZpbGwg d2lwaHk6Omh3X3ZlcnNpb24gKi8KLQlkZXZfaW5mbyh3ZGV2LT5kZXYsICJzdGFydGVkIGZpcm13 YXJlICVkLiVkLiVkIFwiJXNcIiAoQVBJOiAlZC4lZCwga2V5c2V0OiAlMDJYLCBjYXBzOiAweCUu OFgpXG4iLAotCQkgd2Rldi0+aHdfY2Fwcy5maXJtd2FyZV9tYWpvciwgd2Rldi0+aHdfY2Fwcy5m aXJtd2FyZV9taW5vciwKLQkJIHdkZXYtPmh3X2NhcHMuZmlybXdhcmVfYnVpbGQsIHdkZXYtPmh3 X2NhcHMuZmlybXdhcmVfbGFiZWwsCi0JCSB3ZGV2LT5od19jYXBzLmFwaV92ZXJzaW9uX21ham9y LCB3ZGV2LT5od19jYXBzLmFwaV92ZXJzaW9uX21pbm9yLAotCQkgd2Rldi0+a2V5c2V0LCB3ZGV2 LT5od19jYXBzLmxpbmtfbW9kZSk7Ci0Jc25wcmludGYod2Rldi0+aHctPndpcGh5LT5md192ZXJz aW9uLAotCQkgc2l6ZW9mKHdkZXYtPmh3LT53aXBoeS0+ZndfdmVyc2lvbiksCi0JCSAiJWQuJWQu JWQiLAotCQkgd2Rldi0+aHdfY2Fwcy5maXJtd2FyZV9tYWpvciwKLQkJIHdkZXYtPmh3X2NhcHMu ZmlybXdhcmVfbWlub3IsCi0JCSB3ZGV2LT5od19jYXBzLmZpcm13YXJlX2J1aWxkKTsKLQotCWlm ICh3ZnhfYXBpX29sZGVyX3RoYW4od2RldiwgMSwgMCkpIHsKLQkJZGV2X2Vycih3ZGV2LT5kZXYs Ci0JCQkidW5zdXBwb3J0ZWQgZmlybXdhcmUgQVBJIHZlcnNpb24gKGV4cGVjdCAxIHdoaWxlIGZp cm13YXJlIHJldHVybnMgJWQpXG4iLAotCQkJd2Rldi0+aHdfY2Fwcy5hcGlfdmVyc2lvbl9tYWpv cik7Ci0JCWVyciA9IC1FTk9UU1VQUDsKLQkJZ290byBlcnIwOwotCX0KLQotCWlmICh3ZGV2LT5o d19jYXBzLmxpbmtfbW9kZSA9PSBTRUNfTElOS19FTkZPUkNFRCkgewotCQlkZXZfZXJyKHdkZXYt PmRldiwKLQkJCSJjaGlwIHJlcXVpcmUgc2VjdXJlX2xpbmssIGJ1dCBjYW4ndCBuZWdvdGlhdGUg aXRcbiIpOwotCQlnb3RvIGVycjA7Ci0JfQotCi0JaWYgKHdkZXYtPmh3X2NhcHMucmVnaW9uX3Nl bF9tb2RlKSB7Ci0JCXdkZXYtPmh3LT53aXBoeS0+YmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdLT5j aGFubmVsc1sxMV0uZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fTk9fSVI7Ci0JCXdkZXYtPmh3LT53 aXBoeS0+YmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdLT5jaGFubmVsc1sxMl0uZmxhZ3MgfD0gSUVF RTgwMjExX0NIQU5fTk9fSVI7Ci0JCXdkZXYtPmh3LT53aXBoeS0+YmFuZHNbTkw4MDIxMV9CQU5E XzJHSFpdLT5jaGFubmVsc1sxM10uZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fRElTQUJMRUQ7Ci0J fQotCi0JZGV2X2RiZyh3ZGV2LT5kZXYsICJzZW5kaW5nIGNvbmZpZ3VyYXRpb24gZmlsZSAlc1xu IiwKLQkJd2Rldi0+cGRhdGEuZmlsZV9wZHMpOwotCWVyciA9IHdmeF9zZW5kX3BkYXRhX3Bkcyh3 ZGV2KTsKLQlpZiAoZXJyIDwgMCAmJiBlcnIgIT0gLUVOT0VOVCkKLQkJZ290byBlcnIwOwotCi0J d2Rldi0+cG9sbF9pcnEgPSBmYWxzZTsKLQllcnIgPSB3ZGV2LT5od2J1c19vcHMtPmlycV9zdWJz Y3JpYmUod2Rldi0+aHdidXNfcHJpdik7Ci0JaWYgKGVycikKLQkJZ290byBlcnIwOwotCi0JZXJy ID0gaGlmX3VzZV9tdWx0aV90eF9jb25mKHdkZXYsIHRydWUpOwotCWlmIChlcnIpCi0JCWRldl9l cnIod2Rldi0+ZGV2LCAibWlzY29uZmlndXJlZCBJUlE/XG4iKTsKLQotCXdkZXYtPnBkYXRhLmdw aW9fd2FrZXVwID0gZ3Bpb19zYXZlZDsKLQlpZiAod2Rldi0+cGRhdGEuZ3Bpb193YWtldXApIHsK LQkJZGV2X2RiZyh3ZGV2LT5kZXYsCi0JCQkiZW5hYmxlICdxdWllc2NlbnQnIHBvd2VyIG1vZGUg d2l0aCB3YWtldXAgR1BJTyBhbmQgUERTIGZpbGUgJXNcbiIsCi0JCQl3ZGV2LT5wZGF0YS5maWxl X3Bkcyk7Ci0JCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcCh3ZGV2LT5wZGF0YS5ncGlvX3dha2V1 cCwgMSk7Ci0JCWNvbnRyb2xfcmVnX3dyaXRlKHdkZXYsIDApOwotCQloaWZfc2V0X29wZXJhdGlv bmFsX21vZGUod2RldiwgSElGX09QX1BPV0VSX01PREVfUVVJRVNDRU5UKTsKLQl9IGVsc2Ugewot CQloaWZfc2V0X29wZXJhdGlvbmFsX21vZGUod2RldiwgSElGX09QX1BPV0VSX01PREVfRE9aRSk7 Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod2Rldi0+YWRkcmVzc2VzKTsgaSsr KSB7Ci0JCWV0aF96ZXJvX2FkZHIod2Rldi0+YWRkcmVzc2VzW2ldLmFkZHIpOwotCQllcnIgPSBv Zl9nZXRfbWFjX2FkZHJlc3Mod2Rldi0+ZGV2LT5vZl9ub2RlLAotCQkJCQkgd2Rldi0+YWRkcmVz c2VzW2ldLmFkZHIpOwotCQlpZiAoIWVycikgewotCQkJd2Rldi0+YWRkcmVzc2VzW2ldLmFkZHJb RVRIX0FMRU4gLSAxXSArPSBpOwotCQl9IGVsc2UgewotCQkJZXRoZXJfYWRkcl9jb3B5KHdkZXYt PmFkZHJlc3Nlc1tpXS5hZGRyLAotCQkJCQl3ZGV2LT5od19jYXBzLm1hY19hZGRyW2ldKTsKLQkJ fQotCQlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIod2Rldi0+YWRkcmVzc2VzW2ldLmFkZHIpKSB7 Ci0JCQlkZXZfd2Fybih3ZGV2LT5kZXYsICJ1c2luZyByYW5kb20gTUFDIGFkZHJlc3NcbiIpOwot CQkJZXRoX3JhbmRvbV9hZGRyKHdkZXYtPmFkZHJlc3Nlc1tpXS5hZGRyKTsKLQkJfQotCQlkZXZf aW5mbyh3ZGV2LT5kZXYsICJNQUMgYWRkcmVzcyAlZDogJXBNXG4iLCBpLAotCQkJIHdkZXYtPmFk ZHJlc3Nlc1tpXS5hZGRyKTsKLQl9Ci0Jd2Rldi0+aHctPndpcGh5LT5uX2FkZHJlc3NlcyA9IEFS UkFZX1NJWkUod2Rldi0+YWRkcmVzc2VzKTsKLQl3ZGV2LT5ody0+d2lwaHktPmFkZHJlc3NlcyA9 IHdkZXYtPmFkZHJlc3NlczsKLQotCWlmICghd2Z4X2FwaV9vbGRlcl90aGFuKHdkZXYsIDMsIDgp KQotCQl3ZGV2LT5ody0+d2lwaHktPmZsYWdzIHw9IFdJUEhZX0ZMQUdfU1VQUE9SVFNfVERMUzsK LQotCWVyciA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyh3ZGV2LT5odyk7Ci0JaWYgKGVycikKLQkJ Z290byBlcnIxOwotCi0JZXJyID0gd2Z4X2RlYnVnX2luaXQod2Rldik7Ci0JaWYgKGVycikKLQkJ Z290byBlcnIyOwotCi0JcmV0dXJuIDA7Ci0KLWVycjI6Ci0JaWVlZTgwMjExX3VucmVnaXN0ZXJf aHcod2Rldi0+aHcpOwotZXJyMToKLQl3ZGV2LT5od2J1c19vcHMtPmlycV91bnN1YnNjcmliZSh3 ZGV2LT5od2J1c19wcml2KTsKLWVycjA6Ci0Jd2Z4X2JoX3VucmVnaXN0ZXIod2Rldik7Ci0JcmV0 dXJuIGVycjsKLX0KLQotdm9pZCB3ZnhfcmVsZWFzZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldikKLXsK LQlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyh3ZGV2LT5odyk7Ci0JaGlmX3NodXRkb3duKHdkZXYp OwotCXdkZXYtPmh3YnVzX29wcy0+aXJxX3Vuc3Vic2NyaWJlKHdkZXYtPmh3YnVzX3ByaXYpOwot CXdmeF9iaF91bnJlZ2lzdGVyKHdkZXYpOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCB3ZnhfY29y ZV9pbml0KHZvaWQpCi17Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoSVNfRU5BQkxFRChDT05GSUdf U1BJKSkKLQkJcmV0ID0gc3BpX3JlZ2lzdGVyX2RyaXZlcigmd2Z4X3NwaV9kcml2ZXIpOwotCWlm IChJU19FTkFCTEVEKENPTkZJR19NTUMpICYmICFyZXQpCi0JCXJldCA9IHNkaW9fcmVnaXN0ZXJf ZHJpdmVyKCZ3Znhfc2Rpb19kcml2ZXIpOwotCXJldHVybiByZXQ7Ci19Ci1tb2R1bGVfaW5pdCh3 ZnhfY29yZV9pbml0KTsKLQotc3RhdGljIHZvaWQgX19leGl0IHdmeF9jb3JlX2V4aXQodm9pZCkK LXsKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfTU1DKSkKLQkJc2Rpb191bnJlZ2lzdGVyX2RyaXZl cigmd2Z4X3NkaW9fZHJpdmVyKTsKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfU1BJKSkKLQkJc3Bp X3VucmVnaXN0ZXJfZHJpdmVyKCZ3Znhfc3BpX2RyaXZlcik7Ci19Ci1tb2R1bGVfZXhpdCh3Znhf Y29yZV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZngvbWFpbi5oIGIvZHJp dmVycy9zdGFnaW5nL3dmeC9tYWluLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEx NWFiZDJkNDM3OC4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZngvbWFpbi5o CisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAtb25seSAqLwotLyoKLSAqIERldmljZSBwcm9iZSBhbmQgcmVnaXN0ZXIuCi0g KgotICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMu Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCi0gKiBDb3B5cmlnaHQgKGMpIDIw MDYsIE1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PgotICogQ29weXJpZ2h0IDIw MDQtMjAwNiBKZWFuLUJhcHRpc3RlIE5vdGUgPGpibm90ZUBnbWFpbC5jb20+LCBldCBhbC4KLSAq LwotI2lmbmRlZiBXRlhfTUFJTl9ICi0jZGVmaW5lIFdGWF9NQUlOX0gKLQotI2luY2x1ZGUgPGxp bnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KLQotI2luY2x1 ZGUgImhpZl9hcGlfZ2VuZXJhbC5oIgotCi1zdHJ1Y3Qgd2Z4X2RldjsKLXN0cnVjdCBod2J1c19v cHM7Ci0KLXN0cnVjdCB3ZnhfcGxhdGZvcm1fZGF0YSB7Ci0JLyogS2V5c2V0IGFuZCAiLnNlYyIg ZXh0ZW5zaW9uIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhpcyBzdHJpbmcgKi8KLQljb25zdCBjaGFy ICpmaWxlX2Z3OwotCWNvbnN0IGNoYXIgKmZpbGVfcGRzOwotCXN0cnVjdCBncGlvX2Rlc2MgKmdw aW9fd2FrZXVwOwotCS8qIGlmIHRydWUgSElGIERfb3V0IGlzIHNhbXBsZWQgb24gdGhlIHJpc2lu ZyBlZGdlIG9mIHRoZSBjbG9jawotCSAqIChpbnRlbmRlZCB0byBiZSB1c2VkIGluIDUwTWh6IFNE SU8pCi0JICovCi0JYm9vbCB1c2VfcmlzaW5nX2NsazsKLX07Ci0KLXN0cnVjdCB3ZnhfZGV2ICp3 ZnhfaW5pdF9jb21tb24oc3RydWN0IGRldmljZSAqZGV2LAotCQkJCWNvbnN0IHN0cnVjdCB3Znhf cGxhdGZvcm1fZGF0YSAqcGRhdGEsCi0JCQkJY29uc3Qgc3RydWN0IGh3YnVzX29wcyAqaHdidXNf b3BzLAotCQkJCXZvaWQgKmh3YnVzX3ByaXYpOwotCi1pbnQgd2Z4X3Byb2JlKHN0cnVjdCB3Znhf ZGV2ICp3ZGV2KTsKLXZvaWQgd2Z4X3JlbGVhc2Uoc3RydWN0IHdmeF9kZXYgKndkZXYpOwotCi1i b29sIHdmeF9hcGlfb2xkZXJfdGhhbihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IG1ham9yLCBp bnQgbWlub3IpOwotaW50IHdmeF9zZW5kX3BkcyhzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTggKmJ1 Ziwgc2l6ZV90IGxlbik7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dm eC9xdWV1ZS5jIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9xdWV1ZS5jCmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCA3YTNiYTNjMzg5MjUuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0 YWdpbmcvd2Z4L3F1ZXVlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMDcgKzAsMCBAQAotLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQotLyoKLSAqIFF1ZXVlIGJldHdlZW4g dGhlIHR4IG9wZXJhdGlvbiBhbmQgdGhlIGJoIHdvcmtxdWV1ZS4KLSAqCi0gKiBDb3B5cmlnaHQg KGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSAqIENvcHlyaWdodCAo YykgMjAxMCwgU1QtRXJpY3Nzb24KLSAqLwotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5j bHVkZSA8bmV0L21hYzgwMjExLmg+Ci0KLSNpbmNsdWRlICJxdWV1ZS5oIgotI2luY2x1ZGUgIndm eC5oIgotI2luY2x1ZGUgInN0YS5oIgotI2luY2x1ZGUgImRhdGFfdHguaCIKLSNpbmNsdWRlICJ0 cmFjZXMuaCIKLQotdm9pZCB3ZnhfdHhfbG9jayhzdHJ1Y3Qgd2Z4X2RldiAqd2RldikKLXsKLQlh dG9taWNfaW5jKCZ3ZGV2LT50eF9sb2NrKTsKLX0KLQotdm9pZCB3ZnhfdHhfdW5sb2NrKHN0cnVj dCB3ZnhfZGV2ICp3ZGV2KQotewotCWludCB0eF9sb2NrID0gYXRvbWljX2RlY19yZXR1cm4oJndk ZXYtPnR4X2xvY2spOwotCi0JV0FSTih0eF9sb2NrIDwgMCwgImluY29uc2lzdGVudCB0eF9sb2Nr IHZhbHVlIik7Ci0JaWYgKCF0eF9sb2NrKQotCQl3ZnhfYmhfcmVxdWVzdF90eCh3ZGV2KTsKLX0K LQotdm9pZCB3ZnhfdHhfZmx1c2goc3RydWN0IHdmeF9kZXYgKndkZXYpCi17Ci0JaW50IHJldDsK LQotCS8qIERvIG5vdCB3YWl0IGZvciBhbnkgcmVwbHkgaWYgY2hpcCBpcyBmcm96ZW4gKi8KLQlp ZiAod2Rldi0+Y2hpcF9mcm96ZW4pCi0JCXJldHVybjsKLQotCXdmeF90eF9sb2NrKHdkZXYpOwot CW11dGV4X2xvY2soJndkZXYtPmhpZl9jbWQubG9jayk7Ci0JcmV0ID0gd2FpdF9ldmVudF90aW1l b3V0KHdkZXYtPmhpZi50eF9idWZmZXJzX2VtcHR5LAotCQkJCSAhd2Rldi0+aGlmLnR4X2J1ZmZl cnNfdXNlZCwKLQkJCQkgbXNlY3NfdG9famlmZmllcygzMDAwKSk7Ci0JaWYgKCFyZXQpIHsKLQkJ ZGV2X3dhcm4od2Rldi0+ZGV2LCAiY2Fubm90IGZsdXNoIHR4IGJ1ZmZlcnMgKCVkIHN0aWxsIGJ1 c3kpXG4iLAotCQkJIHdkZXYtPmhpZi50eF9idWZmZXJzX3VzZWQpOwotCQl3ZnhfcGVuZGluZ19k dW1wX29sZF9mcmFtZXMod2RldiwgMzAwMCk7Ci0JCS8qIEZJWE1FOiBkcm9wIHBlbmRpbmcgZnJh bWVzIGhlcmUgKi8KLQkJd2Rldi0+Y2hpcF9mcm96ZW4gPSB0cnVlOwotCX0KLQltdXRleF91bmxv Y2soJndkZXYtPmhpZl9jbWQubG9jayk7Ci0Jd2Z4X3R4X3VubG9jayh3ZGV2KTsKLX0KLQotdm9p ZCB3ZnhfdHhfbG9ja19mbHVzaChzdHJ1Y3Qgd2Z4X2RldiAqd2RldikKLXsKLQl3ZnhfdHhfbG9j ayh3ZGV2KTsKLQl3ZnhfdHhfZmx1c2god2Rldik7Ci19Ci0KLXZvaWQgd2Z4X3R4X3F1ZXVlc19p bml0KHN0cnVjdCB3ZnhfdmlmICp3dmlmKQotewotCS8qIFRoZSBkZXZpY2UgaXMgaW4gY2hhcmdl IHRvIHJlc3BlY3QgdGhlIGRldGFpbHMgb2YgdGhlIFFvUyBwYXJhbWV0ZXJzLgotCSAqIFRoZSBk cml2ZXIganVzdCBlbnN1cmUgdGhhdCBpdCByb3VnaHRseSByZXNwZWN0IHRoZSBwcmlvcml0aWVz IHRvCi0JICogYXZvaWQgYW55IHNob3J0YWdlLgotCSAqLwotCWNvbnN0IGludCBwcmlvcml0aWVz W0lFRUU4MDIxMV9OVU1fQUNTXSA9IHsgMSwgMiwgNjQsIDEyOCB9OwotCWludCBpOwotCi0JZm9y IChpID0gMDsgaSA8IElFRUU4MDIxMV9OVU1fQUNTOyArK2kpIHsKLQkJc2tiX3F1ZXVlX2hlYWRf aW5pdCgmd3ZpZi0+dHhfcXVldWVbaV0ubm9ybWFsKTsKLQkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgm d3ZpZi0+dHhfcXVldWVbaV0uY2FiKTsKLQkJd3ZpZi0+dHhfcXVldWVbaV0ucHJpb3JpdHkgPSBw cmlvcml0aWVzW2ldOwotCX0KLX0KLQotYm9vbCB3ZnhfdHhfcXVldWVfZW1wdHkoc3RydWN0IHdm eF92aWYgKnd2aWYsIHN0cnVjdCB3ZnhfcXVldWUgKnF1ZXVlKQotewotCXJldHVybiBza2JfcXVl dWVfZW1wdHlfbG9ja2xlc3MoJnF1ZXVlLT5ub3JtYWwpICYmCi0JICAgICAgIHNrYl9xdWV1ZV9l bXB0eV9sb2NrbGVzcygmcXVldWUtPmNhYik7Ci19Ci0KLXZvaWQgd2Z4X3R4X3F1ZXVlc19jaGVj a19lbXB0eShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZikKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7 IGkgPCBJRUVFODAyMTFfTlVNX0FDUzsgKytpKSB7Ci0JCVdBUk5fT04oYXRvbWljX3JlYWQoJnd2 aWYtPnR4X3F1ZXVlW2ldLnBlbmRpbmdfZnJhbWVzKSk7Ci0JCVdBUk5fT04oIXdmeF90eF9xdWV1 ZV9lbXB0eSh3dmlmLCAmd3ZpZi0+dHhfcXVldWVbaV0pKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lk IF9fd2Z4X3R4X3F1ZXVlX2Ryb3Aoc3RydWN0IHdmeF92aWYgKnd2aWYsCi0JCQkJc3RydWN0IHNr X2J1ZmZfaGVhZCAqc2tiX3F1ZXVlLAotCQkJCXN0cnVjdCBza19idWZmX2hlYWQgKmRyb3BwZWQp Ci17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiwgKnRtcDsKLQotCXNwaW5fbG9ja19iaCgmc2tiX3F1 ZXVlLT5sb2NrKTsKLQlza2JfcXVldWVfd2Fsa19zYWZlKHNrYl9xdWV1ZSwgc2tiLCB0bXApIHsK LQkJX19za2JfdW5saW5rKHNrYiwgc2tiX3F1ZXVlKTsKLQkJc2tiX3F1ZXVlX2hlYWQoZHJvcHBl ZCwgc2tiKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfYmgoJnNrYl9xdWV1ZS0+bG9jayk7Ci19Ci0KLXZv aWQgd2Z4X3R4X3F1ZXVlX2Ryb3Aoc3RydWN0IHdmeF92aWYgKnd2aWYsIHN0cnVjdCB3ZnhfcXVl dWUgKnF1ZXVlLAotCQkgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZHJvcHBlZCkKLXsKLQlf X3dmeF90eF9xdWV1ZV9kcm9wKHd2aWYsICZxdWV1ZS0+Y2FiLCBkcm9wcGVkKTsKLQlfX3dmeF90 eF9xdWV1ZV9kcm9wKHd2aWYsICZxdWV1ZS0+bm9ybWFsLCBkcm9wcGVkKTsKLQl3YWtlX3VwKCZ3 dmlmLT53ZGV2LT50eF9kZXF1ZXVlKTsKLX0KLQotdm9pZCB3ZnhfdHhfcXVldWVzX3B1dChzdHJ1 Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3Qgd2Z4X3F1 ZXVlICpxdWV1ZSA9ICZ3dmlmLT50eF9xdWV1ZVtza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKV07 Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihz a2IpOwotCi0JaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9TRU5EX0FGVEVS X0RUSU0pCi0JCXNrYl9xdWV1ZV90YWlsKCZxdWV1ZS0+Y2FiLCBza2IpOwotCWVsc2UKLQkJc2ti X3F1ZXVlX3RhaWwoJnF1ZXVlLT5ub3JtYWwsIHNrYik7Ci19Ci0KLXZvaWQgd2Z4X3BlbmRpbmdf ZHJvcChzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZHJvcHBlZCkK LXsKLQlzdHJ1Y3Qgd2Z4X3F1ZXVlICpxdWV1ZTsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZjsKLQlz dHJ1Y3QgaGlmX21zZyAqaGlmOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0KLQlXQVJOKCF3ZGV2 LT5jaGlwX2Zyb3plbiwgIiVzIHNob3VsZCBvbmx5IGJlIHVzZWQgdG8gcmVjb3ZlciBhIGZyb3pl biBkZXZpY2UiLAotCSAgICAgX19mdW5jX18pOwotCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUo JndkZXYtPnR4X3BlbmRpbmcpKSAhPSBOVUxMKSB7Ci0JCWhpZiA9IChzdHJ1Y3QgaGlmX21zZyAq KXNrYi0+ZGF0YTsKLQkJd3ZpZiA9IHdkZXZfdG9fd3ZpZih3ZGV2LCBoaWYtPmludGVyZmFjZSk7 Ci0JCWlmICh3dmlmKSB7Ci0JCQlxdWV1ZSA9ICZ3dmlmLT50eF9xdWV1ZVtza2JfZ2V0X3F1ZXVl X21hcHBpbmcoc2tiKV07Ci0JCQlXQVJOX09OKHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpID4g Myk7Ci0JCQlXQVJOX09OKCFhdG9taWNfcmVhZCgmcXVldWUtPnBlbmRpbmdfZnJhbWVzKSk7Ci0J CQlhdG9taWNfZGVjKCZxdWV1ZS0+cGVuZGluZ19mcmFtZXMpOwotCQl9Ci0JCXNrYl9xdWV1ZV9o ZWFkKGRyb3BwZWQsIHNrYik7Ci0JfQotfQotCi1zdHJ1Y3Qgc2tfYnVmZiAqd2Z4X3BlbmRpbmdf Z2V0KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgcGFja2V0X2lkKQotewotCXN0cnVjdCB3Znhf cXVldWUgKnF1ZXVlOwotCXN0cnVjdCBoaWZfcmVxX3R4ICpyZXE7Ci0Jc3RydWN0IHdmeF92aWYg Knd2aWY7Ci0Jc3RydWN0IGhpZl9tc2cgKmhpZjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCi0J c3Bpbl9sb2NrX2JoKCZ3ZGV2LT50eF9wZW5kaW5nLmxvY2spOwotCXNrYl9xdWV1ZV93YWxrKCZ3 ZGV2LT50eF9wZW5kaW5nLCBza2IpIHsKLQkJaGlmID0gKHN0cnVjdCBoaWZfbXNnICopc2tiLT5k YXRhOwotCQlyZXEgPSAoc3RydWN0IGhpZl9yZXFfdHggKiloaWYtPmJvZHk7Ci0JCWlmIChyZXEt PnBhY2tldF9pZCAhPSBwYWNrZXRfaWQpCi0JCQljb250aW51ZTsKLQkJc3Bpbl91bmxvY2tfYmgo JndkZXYtPnR4X3BlbmRpbmcubG9jayk7Ci0JCXd2aWYgPSB3ZGV2X3RvX3d2aWYod2RldiwgaGlm LT5pbnRlcmZhY2UpOwotCQlpZiAod3ZpZikgewotCQkJcXVldWUgPSAmd3ZpZi0+dHhfcXVldWVb c2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYildOwotCQkJV0FSTl9PTihza2JfZ2V0X3F1ZXVlX21h cHBpbmcoc2tiKSA+IDMpOwotCQkJV0FSTl9PTighYXRvbWljX3JlYWQoJnF1ZXVlLT5wZW5kaW5n X2ZyYW1lcykpOwotCQkJYXRvbWljX2RlYygmcXVldWUtPnBlbmRpbmdfZnJhbWVzKTsKLQkJfQot CQlza2JfdW5saW5rKHNrYiwgJndkZXYtPnR4X3BlbmRpbmcpOwotCQlyZXR1cm4gc2tiOwotCX0K LQlzcGluX3VubG9ja19iaCgmd2Rldi0+dHhfcGVuZGluZy5sb2NrKTsKLQlXQVJOKDEsICJjYW5u b3QgZmluZCBwYWNrZXQgaW4gcGVuZGluZyBxdWV1ZSIpOwotCXJldHVybiBOVUxMOwotfQotCi12 b2lkIHdmeF9wZW5kaW5nX2R1bXBfb2xkX2ZyYW1lcyhzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdW5z aWduZWQgaW50IGxpbWl0X21zKQotewotCWt0aW1lX3Qgbm93ID0ga3RpbWVfZ2V0KCk7Ci0Jc3Ry dWN0IHdmeF90eF9wcml2ICp0eF9wcml2OwotCXN0cnVjdCBoaWZfcmVxX3R4ICpyZXE7Ci0Jc3Ry dWN0IHNrX2J1ZmYgKnNrYjsKLQlib29sIGZpcnN0ID0gdHJ1ZTsKLQotCXNwaW5fbG9ja19iaCgm d2Rldi0+dHhfcGVuZGluZy5sb2NrKTsKLQlza2JfcXVldWVfd2Fsaygmd2Rldi0+dHhfcGVuZGlu Zywgc2tiKSB7Ci0JCXR4X3ByaXYgPSB3Znhfc2tiX3R4X3ByaXYoc2tiKTsKLQkJcmVxID0gd2Z4 X3NrYl90eHJlcShza2IpOwotCQlpZiAoa3RpbWVfYWZ0ZXIobm93LCBrdGltZV9hZGRfbXModHhf cHJpdi0+eG1pdF90aW1lc3RhbXAsCi0JCQkJCQkgIGxpbWl0X21zKSkpIHsKLQkJCWlmIChmaXJz dCkgewotCQkJCWRldl9pbmZvKHdkZXYtPmRldiwgImZyYW1lcyBzdHVjayBpbiBmaXJtd2FyZSBz aW5jZSAlZG1zIG9yIG1vcmU6XG4iLAotCQkJCQkgbGltaXRfbXMpOwotCQkJCWZpcnN0ID0gZmFs c2U7Ci0JCQl9Ci0JCQlkZXZfaW5mbyh3ZGV2LT5kZXYsICIgICBpZCAlMDh4IHNlbnQgJWxsZG1z IGFnb1xuIiwKLQkJCQkgcmVxLT5wYWNrZXRfaWQsCi0JCQkJIGt0aW1lX21zX2RlbHRhKG5vdywg dHhfcHJpdi0+eG1pdF90aW1lc3RhbXApKTsKLQkJfQotCX0KLQlzcGluX3VubG9ja19iaCgmd2Rl di0+dHhfcGVuZGluZy5sb2NrKTsKLX0KLQotdW5zaWduZWQgaW50IHdmeF9wZW5kaW5nX2dldF9w a3RfdXNfZGVsYXkoc3RydWN0IHdmeF9kZXYgKndkZXYsCi0JCQkJCSAgc3RydWN0IHNrX2J1ZmYg KnNrYikKLXsKLQlrdGltZV90IG5vdyA9IGt0aW1lX2dldCgpOwotCXN0cnVjdCB3ZnhfdHhfcHJp diAqdHhfcHJpdiA9IHdmeF9za2JfdHhfcHJpdihza2IpOwotCi0JcmV0dXJuIGt0aW1lX3VzX2Rl bHRhKG5vdywgdHhfcHJpdi0+eG1pdF90aW1lc3RhbXApOwotfQotCi1ib29sIHdmeF90eF9xdWV1 ZXNfaGFzX2NhYihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZikKLXsKLQlpbnQgaTsKLQotCWlmICh3dmlm LT52aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApCi0JCXJldHVybiBmYWxzZTsKLQlmb3Ig KGkgPSAwOyBpIDwgSUVFRTgwMjExX05VTV9BQ1M7ICsraSkKLQkJLyogTm90ZTogc2luY2Ugb25s eSBBUCBjYW4gaGF2ZSBtY2FzdCBmcmFtZXMgaW4gcXVldWUgYW5kIG9ubHkKLQkJICogb25lIHZp ZiBjYW4gYmUgQVAsIGFsbCBxdWV1ZWQgZnJhbWVzIGhhcyBzYW1lIGludGVyZmFjZSBpZAotCQkg Ki8KLQkJaWYgKCFza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoJnd2aWYtPnR4X3F1ZXVlW2ldLmNh YikpCi0JCQlyZXR1cm4gdHJ1ZTsKLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbnQgd2Z4 X3R4X3F1ZXVlX2dldF93ZWlnaHQoc3RydWN0IHdmeF9xdWV1ZSAqcXVldWUpCi17Ci0JcmV0dXJu IGF0b21pY19yZWFkKCZxdWV1ZS0+cGVuZGluZ19mcmFtZXMpICogcXVldWUtPnByaW9yaXR5Owot fQotCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKndmeF90eF9xdWV1ZXNfZ2V0X3NrYihzdHJ1Y3Qg d2Z4X2RldiAqd2RldikKLXsKLQlzdHJ1Y3Qgd2Z4X3F1ZXVlICpxdWV1ZXNbSUVFRTgwMjExX05V TV9BQ1MgKiBBUlJBWV9TSVpFKHdkZXYtPnZpZildOwotCWludCBpLCBqLCBudW1fcXVldWVzID0g MDsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZjsKLQlzdHJ1Y3QgaGlmX21zZyAqaGlmOwotCXN0cnVj dCBza19idWZmICpza2I7Ci0KLQkvKiBzb3J0IHRoZSBxdWV1ZXMgKi8KLQl3dmlmID0gTlVMTDsK LQl3aGlsZSAoKHd2aWYgPSB3dmlmX2l0ZXJhdGUod2Rldiwgd3ZpZikpICE9IE5VTEwpIHsKLQkJ Zm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9OVU1fQUNTOyBpKyspIHsKLQkJCVdBUk5fT04obnVt X3F1ZXVlcyA+PSBBUlJBWV9TSVpFKHF1ZXVlcykpOwotCQkJcXVldWVzW251bV9xdWV1ZXNdID0g Jnd2aWYtPnR4X3F1ZXVlW2ldOwotCQkJZm9yIChqID0gbnVtX3F1ZXVlczsgaiA+IDA7IGotLSkK LQkJCQlpZiAod2Z4X3R4X3F1ZXVlX2dldF93ZWlnaHQocXVldWVzW2pdKSA8Ci0JCQkJICAgIHdm eF90eF9xdWV1ZV9nZXRfd2VpZ2h0KHF1ZXVlc1tqIC0gMV0pKQotCQkJCQlzd2FwKHF1ZXVlc1tq IC0gMV0sIHF1ZXVlc1tqXSk7Ci0JCQludW1fcXVldWVzKys7Ci0JCX0KLQl9Ci0KLQl3dmlmID0g TlVMTDsKLQl3aGlsZSAoKHd2aWYgPSB3dmlmX2l0ZXJhdGUod2Rldiwgd3ZpZikpICE9IE5VTEwp IHsKLQkJaWYgKCF3dmlmLT5hZnRlcl9kdGltX3R4X2FsbG93ZWQpCi0JCQljb250aW51ZTsKLQkJ Zm9yIChpID0gMDsgaSA8IG51bV9xdWV1ZXM7IGkrKykgewotCQkJc2tiID0gc2tiX2RlcXVldWUo JnF1ZXVlc1tpXS0+Y2FiKTsKLQkJCWlmICghc2tiKQotCQkJCWNvbnRpbnVlOwotCQkJLyogTm90 ZTogc2luY2Ugb25seSBBUCBjYW4gaGF2ZSBtY2FzdCBmcmFtZXMgaW4gcXVldWUKLQkJCSAqIGFu ZCBvbmx5IG9uZSB2aWYgY2FuIGJlIEFQLCBhbGwgcXVldWVkIGZyYW1lcyBoYXMKLQkJCSAqIHNh bWUgaW50ZXJmYWNlIGlkCi0JCQkgKi8KLQkJCWhpZiA9IChzdHJ1Y3QgaGlmX21zZyAqKXNrYi0+ ZGF0YTsKLQkJCVdBUk5fT04oaGlmLT5pbnRlcmZhY2UgIT0gd3ZpZi0+aWQpOwotCQkJV0FSTl9P TihxdWV1ZXNbaV0gIT0KLQkJCQkmd3ZpZi0+dHhfcXVldWVbc2tiX2dldF9xdWV1ZV9tYXBwaW5n KHNrYildKTsKLQkJCWF0b21pY19pbmMoJnF1ZXVlc1tpXS0+cGVuZGluZ19mcmFtZXMpOwotCQkJ dHJhY2VfcXVldWVzX3N0YXRzKHdkZXYsIHF1ZXVlc1tpXSk7Ci0JCQlyZXR1cm4gc2tiOwotCQl9 Ci0JCS8qIE5vIG1vcmUgbXVsdGljYXN0IHRvIHNlbnQgKi8KLQkJd3ZpZi0+YWZ0ZXJfZHRpbV90 eF9hbGxvd2VkID0gZmFsc2U7Ci0JCXNjaGVkdWxlX3dvcmsoJnd2aWYtPnVwZGF0ZV90aW1fd29y ayk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IG51bV9xdWV1ZXM7IGkrKykgewotCQlza2IgPSBz a2JfZGVxdWV1ZSgmcXVldWVzW2ldLT5ub3JtYWwpOwotCQlpZiAoc2tiKSB7Ci0JCQlhdG9taWNf aW5jKCZxdWV1ZXNbaV0tPnBlbmRpbmdfZnJhbWVzKTsKLQkJCXRyYWNlX3F1ZXVlc19zdGF0cyh3 ZGV2LCBxdWV1ZXNbaV0pOwotCQkJcmV0dXJuIHNrYjsKLQkJfQotCX0KLQlyZXR1cm4gTlVMTDsK LX0KLQotc3RydWN0IGhpZl9tc2cgKndmeF90eF9xdWV1ZXNfZ2V0KHN0cnVjdCB3ZnhfZGV2ICp3 ZGV2KQotewotCXN0cnVjdCB3ZnhfdHhfcHJpdiAqdHhfcHJpdjsKLQlzdHJ1Y3Qgc2tfYnVmZiAq c2tiOwotCi0JaWYgKGF0b21pY19yZWFkKCZ3ZGV2LT50eF9sb2NrKSkKLQkJcmV0dXJuIE5VTEw7 Ci0Jc2tiID0gd2Z4X3R4X3F1ZXVlc19nZXRfc2tiKHdkZXYpOwotCWlmICghc2tiKQotCQlyZXR1 cm4gTlVMTDsKLQlza2JfcXVldWVfdGFpbCgmd2Rldi0+dHhfcGVuZGluZywgc2tiKTsKLQl3YWtl X3VwKCZ3ZGV2LT50eF9kZXF1ZXVlKTsKLQl0eF9wcml2ID0gd2Z4X3NrYl90eF9wcml2KHNrYik7 Ci0JdHhfcHJpdi0+eG1pdF90aW1lc3RhbXAgPSBrdGltZV9nZXQoKTsKLQlyZXR1cm4gKHN0cnVj dCBoaWZfbXNnICopc2tiLT5kYXRhOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dm eC9xdWV1ZS5oIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9xdWV1ZS5oCmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCBlZGQwZDAxOGIxOTguLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0 YWdpbmcvd2Z4L3F1ZXVlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKiBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCi0vKgotICogUXVldWUgYmV0d2Vl biB0aGUgdHggb3BlcmF0aW9uIGFuZCB0aGUgYmggd29ya3F1ZXVlLgotICoKLSAqIENvcHlyaWdo dCAoYykgMjAxNy0yMDIwLCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLgotICogQ29weXJpZ2h0 IChjKSAyMDEwLCBTVC1Fcmljc3NvbgotICovCi0jaWZuZGVmIFdGWF9RVUVVRV9ICi0jZGVmaW5l IFdGWF9RVUVVRV9ICi0KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51 eC9hdG9taWMuaD4KLQotc3RydWN0IHdmeF9kZXY7Ci1zdHJ1Y3Qgd2Z4X3ZpZjsKLQotc3RydWN0 IHdmeF9xdWV1ZSB7Ci0Jc3RydWN0IHNrX2J1ZmZfaGVhZAlub3JtYWw7Ci0Jc3RydWN0IHNrX2J1 ZmZfaGVhZAljYWI7IC8qIENvbnRlbnQgQWZ0ZXIgKERUSU0pIEJlYWNvbiAqLwotCWF0b21pY190 CQlwZW5kaW5nX2ZyYW1lczsKLQlpbnQJCQlwcmlvcml0eTsKLX07Ci0KLXZvaWQgd2Z4X3R4X2xv Y2soc3RydWN0IHdmeF9kZXYgKndkZXYpOwotdm9pZCB3ZnhfdHhfdW5sb2NrKHN0cnVjdCB3Znhf ZGV2ICp3ZGV2KTsKLXZvaWQgd2Z4X3R4X2ZsdXNoKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KTsKLXZv aWQgd2Z4X3R4X2xvY2tfZmx1c2goc3RydWN0IHdmeF9kZXYgKndkZXYpOwotCi12b2lkIHdmeF90 eF9xdWV1ZXNfaW5pdChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZik7Ci12b2lkIHdmeF90eF9xdWV1ZXNf Y2hlY2tfZW1wdHkoc3RydWN0IHdmeF92aWYgKnd2aWYpOwotYm9vbCB3ZnhfdHhfcXVldWVzX2hh c19jYWIoc3RydWN0IHdmeF92aWYgKnd2aWYpOwotdm9pZCB3ZnhfdHhfcXVldWVzX3B1dChzdHJ1 Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1zdHJ1Y3QgaGlmX21zZyAq d2Z4X3R4X3F1ZXVlc19nZXQoc3RydWN0IHdmeF9kZXYgKndkZXYpOwotCi1ib29sIHdmeF90eF9x dWV1ZV9lbXB0eShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IHdmeF9xdWV1ZSAqcXVldWUp Owotdm9pZCB3ZnhfdHhfcXVldWVfZHJvcChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IHdm eF9xdWV1ZSAqcXVldWUsCi0JCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpkcm9wcGVkKTsK LQotc3RydWN0IHNrX2J1ZmYgKndmeF9wZW5kaW5nX2dldChzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwg dTMyIHBhY2tldF9pZCk7Ci12b2lkIHdmeF9wZW5kaW5nX2Ryb3Aoc3RydWN0IHdmeF9kZXYgKndk ZXYsIHN0cnVjdCBza19idWZmX2hlYWQgKmRyb3BwZWQpOwotdW5zaWduZWQgaW50IHdmeF9wZW5k aW5nX2dldF9wa3RfdXNfZGVsYXkoc3RydWN0IHdmeF9kZXYgKndkZXYsCi0JCQkJCSAgc3RydWN0 IHNrX2J1ZmYgKnNrYik7Ci12b2lkIHdmeF9wZW5kaW5nX2R1bXBfb2xkX2ZyYW1lcyhzdHJ1Y3Qg d2Z4X2RldiAqd2RldiwgdW5zaWduZWQgaW50IGxpbWl0X21zKTsKLQotI2VuZGlmCmRpZmYgLS1n aXQgYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L3NjYW4uYyBiL2RyaXZlcnMvc3RhZ2luZy93Zngvc2Nh bi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjhlZjJjNjA4MzcuLjAwMDAwMDAw MDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L3NjYW4uYworKysgL2Rldi9udWxsCkBAIC0x LDE0OSArMCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Ci0v KgotICogU2NhbiByZWxhdGVkIGZ1bmN0aW9ucy4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTct MjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSAqIENvcHlyaWdodCAoYykgMjAxMCwg U1QtRXJpY3Nzb24KLSAqLwotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotCi0jaW5jbHVkZSAi c2Nhbi5oIgotI2luY2x1ZGUgIndmeC5oIgotI2luY2x1ZGUgInN0YS5oIgotI2luY2x1ZGUgImhp Zl90eF9taWIuaCIKLQotc3RhdGljIHZvaWQgX19pZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWRfY29t cGF0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCQkgICAgICBib29sIGFib3J0ZWQpCi17 Ci0Jc3RydWN0IGNmZzgwMjExX3NjYW5faW5mbyBpbmZvID0gewotCQkuYWJvcnRlZCA9IGFib3J0 ZWQsCi0JfTsKLQotCWllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZChodywgJmluZm8pOwotfQotCi1z dGF0aWMgaW50IHVwZGF0ZV9wcm9iZV90bXBsKHN0cnVjdCB3ZnhfdmlmICp3dmlmLAotCQkJICAg ICBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEpCi17Ci0Jc3RydWN0IHNrX2J1ZmYg KnNrYjsKLQotCXNrYiA9IGllZWU4MDIxMV9wcm9iZXJlcV9nZXQod3ZpZi0+d2Rldi0+aHcsIHd2 aWYtPnZpZi0+YWRkciwKLQkJCQkgICAgIE5VTEwsIDAsIHJlcS0+aWVfbGVuKTsKLQlpZiAoIXNr YikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlza2JfcHV0X2RhdGEoc2tiLCByZXEtPmllLCByZXEt PmllX2xlbik7Ci0JaGlmX3NldF90ZW1wbGF0ZV9mcmFtZSh3dmlmLCBza2IsIEhJRl9UTVBMVF9Q UkJSRVEsIDApOwotCWRldl9rZnJlZV9za2Ioc2tiKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGlj IGludCBzZW5kX3NjYW5fcmVxKHN0cnVjdCB3ZnhfdmlmICp3dmlmLAotCQkJIHN0cnVjdCBjZmc4 MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSwgaW50IHN0YXJ0X2lkeCkKLXsKLQlpbnQgaSwgcmV0Owot CXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hfc3RhcnQsICpjaF9jdXI7Ci0KLQlmb3IgKGkg PSBzdGFydF9pZHg7IGkgPCByZXEtPm5fY2hhbm5lbHM7IGkrKykgewotCQljaF9zdGFydCA9IHJl cS0+Y2hhbm5lbHNbc3RhcnRfaWR4XTsKLQkJY2hfY3VyID0gcmVxLT5jaGFubmVsc1tpXTsKLQkJ V0FSTihjaF9jdXItPmJhbmQgIT0gTkw4MDIxMV9CQU5EXzJHSFosICJiYW5kIG5vdCBzdXBwb3J0 ZWQiKTsKLQkJaWYgKGNoX2N1ci0+bWF4X3Bvd2VyICE9IGNoX3N0YXJ0LT5tYXhfcG93ZXIpCi0J CQlicmVhazsKLQkJaWYgKChjaF9jdXItPmZsYWdzIF4gY2hfc3RhcnQtPmZsYWdzKSAmIElFRUU4 MDIxMV9DSEFOX05PX0lSKQotCQkJYnJlYWs7Ci0JfQotCXdmeF90eF9sb2NrX2ZsdXNoKHd2aWYt PndkZXYpOwotCXd2aWYtPnNjYW5fYWJvcnQgPSBmYWxzZTsKLQlyZWluaXRfY29tcGxldGlvbigm d3ZpZi0+c2Nhbl9jb21wbGV0ZSk7Ci0JcmV0ID0gaGlmX3NjYW4od3ZpZiwgcmVxLCBzdGFydF9p ZHgsIGkgLSBzdGFydF9pZHgpOwotCWlmIChyZXQpIHsKLQkJd2Z4X3R4X3VubG9jayh3dmlmLT53 ZGV2KTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGlt ZW91dCgmd3ZpZi0+c2Nhbl9jb21wbGV0ZSwgMSAqIEhaKTsKLQlpZiAoIXJldCkgewotCQloaWZf c3RvcF9zY2FuKHd2aWYpOwotCQlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnd2 aWYtPnNjYW5fY29tcGxldGUsIDEgKiBIWik7Ci0JCWRldl9kYmcod3ZpZi0+d2Rldi0+ZGV2LCAi c2NhbiB0aW1lb3V0ICglZCBjaGFubmVscyBkb25lKVxuIiwKLQkJCXd2aWYtPnNjYW5fbmJfY2hh bl9kb25lKTsKLQl9Ci0JaWYgKCFyZXQpIHsKLQkJZGV2X2Vycih3dmlmLT53ZGV2LT5kZXYsICJz Y2FuIGRpZG4ndCBzdG9wXG4iKTsKLQkJcmV0ID0gLUVUSU1FRE9VVDsKLQl9IGVsc2UgaWYgKHd2 aWYtPnNjYW5fYWJvcnQpIHsKLQkJZGV2X25vdGljZSh3dmlmLT53ZGV2LT5kZXYsICJzY2FuIGFi b3J0XG4iKTsKLQkJcmV0ID0gLUVDT05OQUJPUlRFRDsKLQl9IGVsc2UgaWYgKHd2aWYtPnNjYW5f bmJfY2hhbl9kb25lID4gaSAtIHN0YXJ0X2lkeCkgewotCQlyZXQgPSAtRUlPOwotCX0gZWxzZSB7 Ci0JCXJldCA9IHd2aWYtPnNjYW5fbmJfY2hhbl9kb25lOwotCX0KLQlpZiAocmVxLT5jaGFubmVs c1tzdGFydF9pZHhdLT5tYXhfcG93ZXIgIT0gd3ZpZi0+dmlmLT5ic3NfY29uZi50eHBvd2VyKQot CQloaWZfc2V0X291dHB1dF9wb3dlcih3dmlmLCB3dmlmLT52aWYtPmJzc19jb25mLnR4cG93ZXIp OwotCXdmeF90eF91bmxvY2sod3ZpZi0+d2Rldik7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyogSXQg aXMgbm90IHJlYWxseSBuZWNlc3NhcnkgdG8gcnVuIHNjYW4gcmVxdWVzdCBhc3luY2hyb25vdXNs eS4gSG93ZXZlciwKLSAqIHRoZXJlIGlzIGEgYnVnIGluICJpdyBzY2FuIiB3aGVuIGllZWU4MDIx MV9zY2FuX2NvbXBsZXRlZCgpIGlzIGNhbGxlZCBiZWZvcmUKLSAqIHdmeF9od19zY2FuKCkgcmV0 dXJuCi0gKi8KLXZvaWQgd2Z4X2h3X3NjYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmsp Ci17Ci0Jc3RydWN0IHdmeF92aWYgKnd2aWYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHdm eF92aWYsIHNjYW5fd29yayk7Ci0Jc3RydWN0IGllZWU4MDIxMV9zY2FuX3JlcXVlc3QgKmh3X3Jl cSA9IHd2aWYtPnNjYW5fcmVxOwotCWludCBjaGFuX2N1ciwgcmV0LCBlcnI7Ci0KLQltdXRleF9s b2NrKCZ3dmlmLT53ZGV2LT5jb25mX211dGV4KTsKLQltdXRleF9sb2NrKCZ3dmlmLT5zY2FuX2xv Y2spOwotCWlmICh3dmlmLT5qb2luX2luX3Byb2dyZXNzKSB7Ci0JCWRldl9pbmZvKHd2aWYtPndk ZXYtPmRldiwgIiVzOiBhYm9ydCBpbi1wcm9ncmVzcyBSRVFfSk9JTiIsCi0JCQkgX19mdW5jX18p OwotCQl3ZnhfcmVzZXQod3ZpZik7Ci0JfQotCXVwZGF0ZV9wcm9iZV90bXBsKHd2aWYsICZod19y ZXEtPnJlcSk7Ci0JY2hhbl9jdXIgPSAwOwotCWVyciA9IDA7Ci0JZG8gewotCQlyZXQgPSBzZW5k X3NjYW5fcmVxKHd2aWYsICZod19yZXEtPnJlcSwgY2hhbl9jdXIpOwotCQlpZiAocmV0ID4gMCkg ewotCQkJY2hhbl9jdXIgKz0gcmV0OwotCQkJZXJyID0gMDsKLQkJfQotCQlpZiAoIXJldCkKLQkJ CWVycisrOwotCQlpZiAoZXJyID4gMikgewotCQkJZGV2X2Vycih3dmlmLT53ZGV2LT5kZXYsICJz Y2FuIGhhcyBub3QgYmVlbiBhYmxlIHRvIHN0YXJ0XG4iKTsKLQkJCXJldCA9IC1FVElNRURPVVQ7 Ci0JCX0KLQl9IHdoaWxlIChyZXQgPj0gMCAmJiBjaGFuX2N1ciA8IGh3X3JlcS0+cmVxLm5fY2hh bm5lbHMpOwotCW11dGV4X3VubG9jaygmd3ZpZi0+c2Nhbl9sb2NrKTsKLQltdXRleF91bmxvY2so Jnd2aWYtPndkZXYtPmNvbmZfbXV0ZXgpOwotCV9faWVlZTgwMjExX3NjYW5fY29tcGxldGVkX2Nv bXBhdCh3dmlmLT53ZGV2LT5odywgcmV0IDwgMCk7Ci19Ci0KLWludCB3ZnhfaHdfc2NhbihzdHJ1 Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJc3RydWN0 IGllZWU4MDIxMV9zY2FuX3JlcXVlc3QgKmh3X3JlcSkKLXsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp ZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7Ci0KLQlXQVJOX09OKGh3X3JlcS0+ cmVxLm5fY2hhbm5lbHMgPiBISUZfQVBJX01BWF9OQl9DSEFOTkVMUyk7Ci0Jd3ZpZi0+c2Nhbl9y ZXEgPSBod19yZXE7Ci0Jc2NoZWR1bGVfd29yaygmd3ZpZi0+c2Nhbl93b3JrKTsKLQlyZXR1cm4g MDsKLX0KLQotdm9pZCB3ZnhfY2FuY2VsX2h3X3NjYW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcs IHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCi17Ci0Jc3RydWN0IHdmeF92aWYgKnd2aWYgPSAo c3RydWN0IHdmeF92aWYgKil2aWYtPmRydl9wcml2OwotCi0Jd3ZpZi0+c2Nhbl9hYm9ydCA9IHRy dWU7Ci0JaGlmX3N0b3Bfc2Nhbih3dmlmKTsKLX0KLQotdm9pZCB3Znhfc2Nhbl9jb21wbGV0ZShz dHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50IG5iX2NoYW5fZG9uZSkKLXsKLQl3dmlmLT5zY2FuX25i X2NoYW5fZG9uZSA9IG5iX2NoYW5fZG9uZTsKLQljb21wbGV0ZSgmd3ZpZi0+c2Nhbl9jb21wbGV0 ZSk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L3NjYW4uaCBiL2RyaXZlcnMv c3RhZ2luZy93Zngvc2Nhbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGUzYjk4 NGYzNzUuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L3NjYW4uaAorKysg L2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wLW9ubHkgKi8KLS8qCi0gKiBTY2FuIHJlbGF0ZWQgZnVuY3Rpb25zLgotICoKLSAqIENv cHlyaWdodCAoYykgMjAxNy0yMDIwLCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLgotICogQ29w eXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmljc3NvbgotICovCi0jaWZuZGVmIFdGWF9TQ0FOX0gKLSNk ZWZpbmUgV0ZYX1NDQU5fSAotCi0jaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+Ci0KLXN0cnVjdCB3 ZnhfZGV2Owotc3RydWN0IHdmeF92aWY7Ci0KLXZvaWQgd2Z4X2h3X3NjYW5fd29yayhzdHJ1Y3Qg d29ya19zdHJ1Y3QgKndvcmspOwotaW50IHdmeF9od19zY2FuKHN0cnVjdCBpZWVlODAyMTFfaHcg Kmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAotCQlzdHJ1Y3QgaWVlZTgwMjExX3NjYW5f cmVxdWVzdCAqcmVxKTsKLXZvaWQgd2Z4X2NhbmNlbF9od19zY2FuKHN0cnVjdCBpZWVlODAyMTFf aHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKLXZvaWQgd2Z4X3NjYW5fY29tcGxl dGUoc3RydWN0IHdmeF92aWYgKnd2aWYsIGludCBuYl9jaGFuX2RvbmUpOwotCi0jZW5kaWYKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93Zngvc3RhLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4 L3N0YS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2ViMThhMWY1NGIuLjAwMDAw MDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L3N0YS5jCisrKyAvZGV2L251bGwKQEAg LTEsODM0ICswLDAgQEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkK LS8qCi0gKiBJbXBsZW1lbnRhdGlvbiBvZiBtYWM4MDIxMSBBUEkuCi0gKgotICogQ29weXJpZ2h0 IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuCi0gKiBDb3B5cmlnaHQg KGMpIDIwMTAsIFNULUVyaWNzc29uCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5o PgotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotCi0jaW5jbHVkZSAic3RhLmgiCi0jaW5jbHVk ZSAid2Z4LmgiCi0jaW5jbHVkZSAiZndpby5oIgotI2luY2x1ZGUgImJoLmgiCi0jaW5jbHVkZSAi a2V5LmgiCi0jaW5jbHVkZSAic2Nhbi5oIgotI2luY2x1ZGUgImRlYnVnLmgiCi0jaW5jbHVkZSAi aGlmX3R4LmgiCi0jaW5jbHVkZSAiaGlmX3R4X21pYi5oIgotCi0jZGVmaW5lIEhJRl9NQVhfQVJQ X0lQX0FERFJUQUJMRV9FTlRSSUVTIDIKLQotdTMyIHdmeF9yYXRlX21hc2tfdG9faHcoc3RydWN0 IHdmeF9kZXYgKndkZXYsIHUzMiByYXRlcykKLXsKLQlpbnQgaTsKLQl1MzIgcmV0ID0gMDsKLQkv KiBUaGUgZGV2aWNlIG9ubHkgc3VwcG9ydHMgMkdIeiAqLwotCXN0cnVjdCBpZWVlODAyMTFfc3Vw cG9ydGVkX2JhbmQgKnNiYW5kID0gd2Rldi0+aHctPndpcGh5LT5iYW5kc1tOTDgwMjExX0JBTkRf MkdIWl07Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGkrKykgewotCQlp ZiAocmF0ZXMgJiBCSVQoaSkpIHsKLQkJCWlmIChpID49IHNiYW5kLT5uX2JpdHJhdGVzKQotCQkJ CWRldl93YXJuKHdkZXYtPmRldiwgInVuc3VwcG9ydGVkIGJhc2ljIHJhdGVcbiIpOwotCQkJZWxz ZQotCQkJCXJldCB8PSBCSVQoc2JhbmQtPmJpdHJhdGVzW2ldLmh3X3ZhbHVlKTsKLQkJfQotCX0K LQlyZXR1cm4gcmV0OwotfQotCi12b2lkIHdmeF9jb29saW5nX3RpbWVvdXRfd29yayhzdHJ1Y3Qg d29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IHdmeF9kZXYgKndkZXYgPSBjb250YWluZXJf b2YodG9fZGVsYXllZF93b3JrKHdvcmspLAotCQkJCQkgICAgc3RydWN0IHdmeF9kZXYsCi0JCQkJ CSAgICBjb29saW5nX3RpbWVvdXRfd29yayk7Ci0KLQl3ZGV2LT5jaGlwX2Zyb3plbiA9IHRydWU7 Ci0Jd2Z4X3R4X3VubG9jayh3ZGV2KTsKLX0KLQotdm9pZCB3Znhfc3VzcGVuZF9ob3RfZGV2KHN0 cnVjdCB3ZnhfZGV2ICp3ZGV2LCBlbnVtIHN0YV9ub3RpZnlfY21kIGNtZCkKLXsKLQlpZiAoY21k ID09IFNUQV9OT1RJRllfQVdBS0UpIHsKLQkJLyogRGV2aWNlIHJlY292ZXIgbm9ybWFsIHRlbXBl cmF0dXJlICovCi0JCWlmIChjYW5jZWxfZGVsYXllZF93b3JrKCZ3ZGV2LT5jb29saW5nX3RpbWVv dXRfd29yaykpCi0JCQl3ZnhfdHhfdW5sb2NrKHdkZXYpOwotCX0gZWxzZSB7Ci0JCS8qIERldmlj ZSBpcyB0b28gaG90ICovCi0JCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmd2Rldi0+Y29vbGluZ190 aW1lb3V0X3dvcmssIDEwICogSFopOwotCQl3ZnhfdHhfbG9jayh3ZGV2KTsKLQl9Ci19Ci0KLXN0 YXRpYyB2b2lkIHdmeF9maWx0ZXJfYmVhY29uKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBib29sIGZp bHRlcl9iZWFjb24pCi17Ci0Jc3RhdGljIGNvbnN0IHN0cnVjdCBoaWZfaWVfdGFibGVfZW50cnkg ZmlsdGVyX2llc1tdID0gewotCQl7Ci0JCQkuaWVfaWQgICAgICAgID0gV0xBTl9FSURfVkVORE9S X1NQRUNJRklDLAotCQkJLmhhc19jaGFuZ2VkICA9IDEsCi0JCQkubm9fbG9uZ2VyICAgID0gMSwK LQkJCS5oYXNfYXBwZWFyZWQgPSAxLAotCQkJLm91aSAgICAgICAgICA9IHsgMHg1MCwgMHg2Riwg MHg5QSB9LAotCQl9LCB7Ci0JCQkuaWVfaWQgICAgICAgID0gV0xBTl9FSURfSFRfT1BFUkFUSU9O LAotCQkJLmhhc19jaGFuZ2VkICA9IDEsCi0JCQkubm9fbG9uZ2VyICAgID0gMSwKLQkJCS5oYXNf YXBwZWFyZWQgPSAxLAotCQl9LCB7Ci0JCQkuaWVfaWQgICAgICAgID0gV0xBTl9FSURfRVJQX0lO Rk8sCi0JCQkuaGFzX2NoYW5nZWQgID0gMSwKLQkJCS5ub19sb25nZXIgICAgPSAxLAotCQkJLmhh c19hcHBlYXJlZCA9IDEsCi0JCX0sIHsKLQkJCS5pZV9pZCAgICAgICAgPSBXTEFOX0VJRF9DSEFO TkVMX1NXSVRDSCwKLQkJCS5oYXNfY2hhbmdlZCAgPSAxLAotCQkJLm5vX2xvbmdlciAgICA9IDEs Ci0JCQkuaGFzX2FwcGVhcmVkID0gMSwKLQkJfQotCX07Ci0KLQlpZiAoIWZpbHRlcl9iZWFjb24p IHsKLQkJaGlmX2JlYWNvbl9maWx0ZXJfY29udHJvbCh3dmlmLCAwLCAxKTsKLQl9IGVsc2Ugewot CQloaWZfc2V0X2JlYWNvbl9maWx0ZXJfdGFibGUod3ZpZiwgQVJSQVlfU0laRShmaWx0ZXJfaWVz KSwgZmlsdGVyX2llcyk7Ci0JCWhpZl9iZWFjb25fZmlsdGVyX2NvbnRyb2wod3ZpZiwgSElGX0JF QUNPTl9GSUxURVJfRU5BQkxFLCAwKTsKLQl9Ci19Ci0KLXZvaWQgd2Z4X2NvbmZpZ3VyZV9maWx0 ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAot CQkJICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLCB1NjQgdW51c2VkKQotewotCXN0cnVjdCB3 ZnhfdmlmICp3dmlmID0gTlVMTDsKLQlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3LT5wcml2Owot CWJvb2wgZmlsdGVyX2Jzc2lkLCBmaWx0ZXJfcHJicmVxLCBmaWx0ZXJfYmVhY29uOwotCi0JLyog Tm90ZXM6Ci0JICogICAtIFByb2JlIHJlc3BvbnNlcyAoRklGX0JDTl9QUkJSRVNQX1BST01JU0Mp IGFyZSBuZXZlciBmaWx0ZXJlZAotCSAqICAgLSBQUy1Qb2xsIChGSUZfUFNQT0xMKSBhcmUgbmV2 ZXIgZmlsdGVyZWQKLQkgKiAgIC0gUlRTLCBDVFMgYW5kIEFjayAoRklGX0NPTlRST0wpIGFyZSBh bHdheXMgZmlsdGVyZWQKLQkgKiAgIC0gQnJva2VuIGZyYW1lcyAoRklGX0ZDU0ZBSUwgYW5kIEZJ Rl9QTENQRkFJTCkgYXJlIGFsd2F5cyBmaWx0ZXJlZAotCSAqICAgLSBGaXJtd2FyZSBkb2VzICh5 ZXQpIGFsbG93IHRvIGZvcndhcmQgdW5pY2FzdCB0cmFmZmljIHNlbnQgdG8KLQkgKiAgICAgb3Ro ZXIgc3RhdGlvbnMgKGFrYS4gcHJvbWlzY3VvdXMgbW9kZSkKLQkgKi8KLQkqdG90YWxfZmxhZ3Mg Jj0gRklGX0JDTl9QUkJSRVNQX1BST01JU0MgfCBGSUZfQUxMTVVMVEkgfCBGSUZfT1RIRVJfQlNT IHwKLQkJCUZJRl9QUk9CRV9SRVEgfCBGSUZfUFNQT0xMOwotCi0JbXV0ZXhfbG9jaygmd2Rldi0+ Y29uZl9tdXRleCk7Ci0Jd2hpbGUgKCh3dmlmID0gd3ZpZl9pdGVyYXRlKHdkZXYsIHd2aWYpKSAh PSBOVUxMKSB7Ci0JCW11dGV4X2xvY2soJnd2aWYtPnNjYW5fbG9jayk7Ci0KLQkJLyogTm90ZTog RklGX0JDTl9QUkJSRVNQX1BST01JU0MgY292ZXJzIHByb2JlIHJlc3BvbnNlIGFuZAotCQkgKiBi ZWFjb25zIGZyb20gb3RoZXIgQlNTCi0JCSAqLwotCQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX0JD Tl9QUkJSRVNQX1BST01JU0MpCi0JCQlmaWx0ZXJfYmVhY29uID0gZmFsc2U7Ci0JCWVsc2UKLQkJ CWZpbHRlcl9iZWFjb24gPSB0cnVlOwotCQl3ZnhfZmlsdGVyX2JlYWNvbih3dmlmLCBmaWx0ZXJf YmVhY29uKTsKLQotCQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX09USEVSX0JTUykKLQkJCWZpbHRl cl9ic3NpZCA9IGZhbHNlOwotCQllbHNlCi0JCQlmaWx0ZXJfYnNzaWQgPSB0cnVlOwotCi0JCS8q IEluIEFQIG1vZGUsIGNoaXAgY2FuIHJlcGx5IHRvIHByb2JlIHJlcXVlc3QgaXRzZWxmICovCi0J CWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfUFJPQkVfUkVRICYmCi0JCSAgICB3dmlmLT52aWYtPnR5 cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKLQkJCWRldl9kYmcod2Rldi0+ZGV2LCAiZG8gbm90 IGZvcndhcmQgcHJvYmUgcmVxdWVzdCBpbiBBUCBtb2RlXG4iKTsKLQkJCSp0b3RhbF9mbGFncyAm PSB+RklGX1BST0JFX1JFUTsKLQkJfQotCi0JCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfUFJPQkVf UkVRKQotCQkJZmlsdGVyX3ByYnJlcSA9IGZhbHNlOwotCQllbHNlCi0JCQlmaWx0ZXJfcHJicmVx ID0gdHJ1ZTsKLQkJaGlmX3NldF9yeF9maWx0ZXIod3ZpZiwgZmlsdGVyX2Jzc2lkLCBmaWx0ZXJf cHJicmVxKTsKLQotCQltdXRleF91bmxvY2soJnd2aWYtPnNjYW5fbG9jayk7Ci0JfQotCW11dGV4 X3VubG9jaygmd2Rldi0+Y29uZl9tdXRleCk7Ci19Ci0KLXN0YXRpYyBpbnQgd2Z4X2dldF9wc190 aW1lb3V0KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBib29sICplbmFibGVfcHMpCi17Ci0Jc3RydWN0 IGllZWU4MDIxMV9jaGFubmVsICpjaGFuMCA9IE5VTEwsICpjaGFuMSA9IE5VTEw7Ci0Jc3RydWN0 IGllZWU4MDIxMV9jb25mICpjb25mID0gJnd2aWYtPndkZXYtPmh3LT5jb25mOwotCi0JV0FSTigh d3ZpZi0+dmlmLT5ic3NfY29uZi5hc3NvYyAmJiBlbmFibGVfcHMsCi0JICAgICAiZW5hYmxlX3Bz IGlzIHJlbGlhYmxlIG9ubHkgaWYgYXNzb2NpYXRlZCIpOwotCWlmICh3ZGV2X3RvX3d2aWYod3Zp Zi0+d2RldiwgMCkpCi0JCWNoYW4wID0gd2Rldl90b193dmlmKHd2aWYtPndkZXYsIDApLT52aWYt PmJzc19jb25mLmNoYW5kZWYuY2hhbjsKLQlpZiAod2Rldl90b193dmlmKHd2aWYtPndkZXYsIDEp KQotCQljaGFuMSA9IHdkZXZfdG9fd3ZpZih3dmlmLT53ZGV2LCAxKS0+dmlmLT5ic3NfY29uZi5j aGFuZGVmLmNoYW47Ci0JaWYgKGNoYW4wICYmIGNoYW4xICYmIHd2aWYtPnZpZi0+dHlwZSAhPSBO TDgwMjExX0lGVFlQRV9BUCkgewotCQlpZiAoY2hhbjAtPmh3X3ZhbHVlID09IGNoYW4xLT5od192 YWx1ZSkgewotCQkJLyogSXQgaXMgdXNlbGVzcyB0byBlbmFibGUgUFMgaWYgY2hhbm5lbHMgYXJl IHRoZSBzYW1lLiAqLwotCQkJaWYgKGVuYWJsZV9wcykKLQkJCQkqZW5hYmxlX3BzID0gZmFsc2U7 Ci0JCQlpZiAod3ZpZi0+dmlmLT5ic3NfY29uZi5hc3NvYyAmJiB3dmlmLT52aWYtPmJzc19jb25m LnBzKQotCQkJCWRldl9pbmZvKHd2aWYtPndkZXYtPmRldiwgImlnbm9yaW5nIHJlcXVlc3RlZCBQ UyBtb2RlIik7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBJdCBpcyBuZWNlc3Nh cnkgdG8gZW5hYmxlIFBTIGlmIGNoYW5uZWxzCi0JCQkgKiBhcmUgZGlmZmVyZW50LgotCQkJICov Ci0JCQlpZiAoZW5hYmxlX3BzKQotCQkJCSplbmFibGVfcHMgPSB0cnVlOwotCQkJaWYgKHd2aWYt PndkZXYtPmZvcmNlX3BzX3RpbWVvdXQgPiAtMSkKLQkJCQlyZXR1cm4gd3ZpZi0+d2Rldi0+Zm9y Y2VfcHNfdGltZW91dDsKLQkJCWVsc2UgaWYgKHdmeF9hcGlfb2xkZXJfdGhhbih3dmlmLT53ZGV2 LCAzLCAyKSkKLQkJCQlyZXR1cm4gMDsKLQkJCWVsc2UKLQkJCQlyZXR1cm4gMzA7Ci0JCX0KLQl9 Ci0JaWYgKGVuYWJsZV9wcykKLQkJKmVuYWJsZV9wcyA9IHd2aWYtPnZpZi0+YnNzX2NvbmYucHM7 Ci0JaWYgKHd2aWYtPndkZXYtPmZvcmNlX3BzX3RpbWVvdXQgPiAtMSkKLQkJcmV0dXJuIHd2aWYt PndkZXYtPmZvcmNlX3BzX3RpbWVvdXQ7Ci0JZWxzZSBpZiAod3ZpZi0+dmlmLT5ic3NfY29uZi5h c3NvYyAmJiB3dmlmLT52aWYtPmJzc19jb25mLnBzKQotCQlyZXR1cm4gY29uZi0+ZHluYW1pY19w c190aW1lb3V0OwotCWVsc2UKLQkJcmV0dXJuIC0xOwotfQotCi1pbnQgd2Z4X3VwZGF0ZV9wbShz dHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZikKLXsKLQlpbnQgcHNfdGltZW91dDsKLQlib29sIHBzOwotCi0J aWYgKCF3dmlmLT52aWYtPmJzc19jb25mLmFzc29jKQotCQlyZXR1cm4gMDsKLQlwc190aW1lb3V0 ID0gd2Z4X2dldF9wc190aW1lb3V0KHd2aWYsICZwcyk7Ci0JaWYgKCFwcykKLQkJcHNfdGltZW91 dCA9IDA7Ci0JV0FSTl9PTihwc190aW1lb3V0IDwgMCk7Ci0JaWYgKHd2aWYtPnVhcHNkX21hc2sp Ci0JCXBzX3RpbWVvdXQgPSAwOwotCi0JaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQo Jnd2aWYtPnNldF9wbV9tb2RlX2NvbXBsZXRlLAotCQkJCQkgVFVfVE9fSklGRklFUyg1MTIpKSkK LQkJZGV2X3dhcm4od3ZpZi0+d2Rldi0+ZGV2LAotCQkJICJ0aW1lb3V0IHdoaWxlIHdhaXRpbmcg b2Ygc2V0X3BtX21vZGVfY29tcGxldGVcbiIpOwotCXJldHVybiBoaWZfc2V0X3BtKHd2aWYsIHBz LCBwc190aW1lb3V0KTsKLX0KLQotaW50IHdmeF9jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcg Kmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAotCQl1MTYgcXVldWUsIGNvbnN0IHN0cnVj dCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXMpCi17Ci0Jc3RydWN0IHdmeF9kZXYg KndkZXYgPSBody0+cHJpdjsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3Zp ZiAqKXZpZi0+ZHJ2X3ByaXY7Ci0JaW50IG9sZF91YXBzZCA9IHd2aWYtPnVhcHNkX21hc2s7Ci0K LQlXQVJOX09OKHF1ZXVlID49IGh3LT5xdWV1ZXMpOwotCi0JbXV0ZXhfbG9jaygmd2Rldi0+Y29u Zl9tdXRleCk7Ci0JYXNzaWduX2JpdChxdWV1ZSwgJnd2aWYtPnVhcHNkX21hc2ssIHBhcmFtcy0+ dWFwc2QpOwotCWhpZl9zZXRfZWRjYV9xdWV1ZV9wYXJhbXMod3ZpZiwgcXVldWUsIHBhcmFtcyk7 Ci0JaWYgKHd2aWYtPnZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCi0JICAg IG9sZF91YXBzZCAhPSB3dmlmLT51YXBzZF9tYXNrKSB7Ci0JCWhpZl9zZXRfdWFwc2RfaW5mbyh3 dmlmLCB3dmlmLT51YXBzZF9tYXNrKTsKLQkJd2Z4X3VwZGF0ZV9wbSh3dmlmKTsKLQl9Ci0JbXV0 ZXhfdW5sb2NrKCZ3ZGV2LT5jb25mX211dGV4KTsKLQlyZXR1cm4gMDsKLX0KLQotaW50IHdmeF9z ZXRfcnRzX3RocmVzaG9sZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIHZhbHVlKQotewot CXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gaHctPnByaXY7Ci0Jc3RydWN0IHdmeF92aWYgKnd2aWYg PSBOVUxMOwotCi0Jd2hpbGUgKCh3dmlmID0gd3ZpZl9pdGVyYXRlKHdkZXYsIHd2aWYpKSAhPSBO VUxMKQotCQloaWZfcnRzX3RocmVzaG9sZCh3dmlmLCB2YWx1ZSk7Ci0JcmV0dXJuIDA7Ci19Ci0K LXZvaWQgd2Z4X2V2ZW50X3JlcG9ydF9yc3NpKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCB1OCByYXdf cmNwaV9yc3NpKQotewotCS8qIFJTU0k6IHNpZ25lZCBROC4wLCBSQ1BJOiB1bnNpZ25lZCBRNy4x Ci0JICogUlNTSSA9IFJDUEkgLyAyIC0gMTEwCi0JICovCi0JaW50IHJjcGlfcnNzaTsKLQlpbnQg Y3FtX2V2dDsKLQotCXJjcGlfcnNzaSA9IHJhd19yY3BpX3Jzc2kgLyAyIC0gMTEwOwotCWlmIChy Y3BpX3Jzc2kgPD0gd3ZpZi0+dmlmLT5ic3NfY29uZi5jcW1fcnNzaV90aG9sZCkKLQkJY3FtX2V2 dCA9IE5MODAyMTFfQ1FNX1JTU0lfVEhSRVNIT0xEX0VWRU5UX0xPVzsKLQllbHNlCi0JCWNxbV9l dnQgPSBOTDgwMjExX0NRTV9SU1NJX1RIUkVTSE9MRF9FVkVOVF9ISUdIOwotCWllZWU4MDIxMV9j cW1fcnNzaV9ub3RpZnkod3ZpZi0+dmlmLCBjcW1fZXZ0LCByY3BpX3Jzc2ksIEdGUF9LRVJORUwp OwotfQotCi1zdGF0aWMgdm9pZCB3ZnhfYmVhY29uX2xvc3Nfd29yayhzdHJ1Y3Qgd29ya19zdHJ1 Y3QgKndvcmspCi17Ci0Jc3RydWN0IHdmeF92aWYgKnd2aWYgPSBjb250YWluZXJfb2YodG9fZGVs YXllZF93b3JrKHdvcmspLAotCQkJCQkgICAgc3RydWN0IHdmeF92aWYsIGJlYWNvbl9sb3NzX3dv cmspOwotCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mID0gJnd2aWYtPnZpZi0+ YnNzX2NvbmY7Ci0KLQlpZWVlODAyMTFfYmVhY29uX2xvc3Mod3ZpZi0+dmlmKTsKLQlzY2hlZHVs ZV9kZWxheWVkX3dvcmsodG9fZGVsYXllZF93b3JrKHdvcmspLAotCQkJICAgICAgbXNlY3NfdG9f amlmZmllcyhic3NfY29uZi0+YmVhY29uX2ludCkpOwotfQotCi12b2lkIHdmeF9zZXRfZGVmYXVs dF91bmljYXN0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgc3RydWN0IGllZWU4 MDIxMV92aWYgKnZpZiwgaW50IGlkeCkKLXsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1 Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7Ci0KLQloaWZfd2VwX2RlZmF1bHRfa2V5X2lkKHd2 aWYsIGlkeCk7Ci19Ci0KLXZvaWQgd2Z4X3Jlc2V0KHN0cnVjdCB3ZnhfdmlmICp3dmlmKQotewot CXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gd3ZpZi0+d2RldjsKLQotCXdmeF90eF9sb2NrX2ZsdXNo KHdkZXYpOwotCWhpZl9yZXNldCh3dmlmLCBmYWxzZSk7Ci0Jd2Z4X3R4X3BvbGljeV9pbml0KHd2 aWYpOwotCWlmICh3dmlmX2NvdW50KHdkZXYpIDw9IDEpCi0JCWhpZl9zZXRfYmxvY2tfYWNrX3Bv bGljeSh3dmlmLCAweEZGLCAweEZGKTsKLQl3ZnhfdHhfdW5sb2NrKHdkZXYpOwotCXd2aWYtPmpv aW5faW5fcHJvZ3Jlc3MgPSBmYWxzZTsKLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnd2aWYt PmJlYWNvbl9sb3NzX3dvcmspOwotCXd2aWYgPSAgTlVMTDsKLQl3aGlsZSAoKHd2aWYgPSB3dmlm X2l0ZXJhdGUod2Rldiwgd3ZpZikpICE9IE5VTEwpCi0JCXdmeF91cGRhdGVfcG0od3ZpZik7Ci19 Ci0KLWludCB3Znhfc3RhX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4 MDIxMV92aWYgKnZpZiwKLQkJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKLXsKLQlzdHJ1Y3Qg d2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7Ci0Jc3RydWN0 IHdmeF9zdGFfcHJpdiAqc3RhX3ByaXYgPSAoc3RydWN0IHdmeF9zdGFfcHJpdiAqKSZzdGEtPmRy dl9wcml2OwotCi0Jc3RhX3ByaXYtPnZpZl9pZCA9IHd2aWYtPmlkOwotCi0JaWYgKHZpZi0+dHlw ZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQotCQloaWZfc2V0X21mcCh3dmlmLCBzdGEtPm1m cCwgc3RhLT5tZnApOwotCi0JLyogSW4gc3RhdGlvbiBtb2RlLCB0aGUgZmlybXdhcmUgaW50ZXJw cmV0cyBuZXcgbGluay1pZCBhcyBhIFRETFMgcGVlciAqLwotCWlmICh2aWYtPnR5cGUgPT0gTkw4 MDIxMV9JRlRZUEVfU1RBVElPTiAmJiAhc3RhLT50ZGxzKQotCQlyZXR1cm4gMDsKLQlzdGFfcHJp di0+bGlua19pZCA9IGZmeih3dmlmLT5saW5rX2lkX21hcCk7Ci0Jd3ZpZi0+bGlua19pZF9tYXAg fD0gQklUKHN0YV9wcml2LT5saW5rX2lkKTsKLQlXQVJOX09OKCFzdGFfcHJpdi0+bGlua19pZCk7 Ci0JV0FSTl9PTihzdGFfcHJpdi0+bGlua19pZCA+PSBISUZfTElOS19JRF9NQVgpOwotCWhpZl9t YXBfbGluayh3dmlmLCBmYWxzZSwgc3RhLT5hZGRyLCBzdGFfcHJpdi0+bGlua19pZCwgc3RhLT5t ZnApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCB3Znhfc3RhX3JlbW92ZShzdHJ1Y3QgaWVlZTgw MjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJICAgc3RydWN0IGllZWU4 MDIxMV9zdGEgKnN0YSkKLXsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3Zp ZiAqKXZpZi0+ZHJ2X3ByaXY7Ci0Jc3RydWN0IHdmeF9zdGFfcHJpdiAqc3RhX3ByaXYgPSAoc3Ry dWN0IHdmeF9zdGFfcHJpdiAqKSZzdGEtPmRydl9wcml2OwotCi0JLyogU2VlIG5vdGUgaW4gd2Z4 X3N0YV9hZGQoKSAqLwotCWlmICghc3RhX3ByaXYtPmxpbmtfaWQpCi0JCXJldHVybiAwOwotCS8q IEZJWE1FIGFkZCBhIG11dGV4PyAqLwotCWhpZl9tYXBfbGluayh3dmlmLCB0cnVlLCBzdGEtPmFk ZHIsIHN0YV9wcml2LT5saW5rX2lkLCBmYWxzZSk7Ci0Jd3ZpZi0+bGlua19pZF9tYXAgJj0gfkJJ VChzdGFfcHJpdi0+bGlua19pZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgd2Z4X3Vw bG9hZF9hcF90ZW1wbGF0ZXMoc3RydWN0IHdmeF92aWYgKnd2aWYpCi17Ci0Jc3RydWN0IHNrX2J1 ZmYgKnNrYjsKLQotCXNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHd2aWYtPndkZXYtPmh3LCB3 dmlmLT52aWYpOwotCWlmICghc2tiKQotCQlyZXR1cm4gLUVOT01FTTsKLQloaWZfc2V0X3RlbXBs YXRlX2ZyYW1lKHd2aWYsIHNrYiwgSElGX1RNUExUX0JDTiwKLQkJCSAgICAgICBBUElfUkFURV9J TkRFWF9CXzFNQlBTKTsKLQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0KLQlza2IgPSBpZWVlODAyMTFf cHJvYmVyZXNwX2dldCh3dmlmLT53ZGV2LT5odywgd3ZpZi0+dmlmKTsKLQlpZiAoIXNrYikKLQkJ cmV0dXJuIC1FTk9NRU07Ci0JaGlmX3NldF90ZW1wbGF0ZV9mcmFtZSh3dmlmLCBza2IsIEhJRl9U TVBMVF9QUkJSRVMsCi0JCQkgICAgICAgQVBJX1JBVEVfSU5ERVhfQl8xTUJQUyk7Ci0JZGV2X2tm cmVlX3NrYihza2IpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCB3Znhfc2V0X21mcF9h cChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZikKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gaWVlZTgw MjExX2JlYWNvbl9nZXQod3ZpZi0+d2Rldi0+aHcsIHd2aWYtPnZpZik7Ci0JY29uc3QgaW50IGll b2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9tZ210LCB1LmJlYWNvbi52YXJpYWJs ZSk7Ci0JY29uc3QgdTE2ICpwdHIgPSAodTE2ICopY2ZnODAyMTFfZmluZF9pZShXTEFOX0VJRF9S U04sCi0JCQkJCQkgc2tiLT5kYXRhICsgaWVvZmZzZXQsCi0JCQkJCQkgc2tiLT5sZW4gLSBpZW9m ZnNldCk7Ci0JY29uc3QgaW50IHBhaXJ3aXNlX2NpcGhlcl9zdWl0ZV9jb3VudF9vZmZzZXQgPSA4 IC8gc2l6ZW9mKHUxNik7Ci0JY29uc3QgaW50IHBhaXJ3aXNlX2NpcGhlcl9zdWl0ZV9zaXplID0g NCAvIHNpemVvZih1MTYpOwotCWNvbnN0IGludCBha21fc3VpdGVfc2l6ZSA9IDQgLyBzaXplb2Yo dTE2KTsKLQotCWlmIChwdHIpIHsKLQkJcHRyICs9IHBhaXJ3aXNlX2NpcGhlcl9zdWl0ZV9jb3Vu dF9vZmZzZXQ7Ci0JCWlmIChXQVJOX09OKHB0ciA+ICh1MTYgKilza2JfdGFpbF9wb2ludGVyKHNr YikpKQotCQkJcmV0dXJuOwotCQlwdHIgKz0gMSArIHBhaXJ3aXNlX2NpcGhlcl9zdWl0ZV9zaXpl ICogKnB0cjsKLQkJaWYgKFdBUk5fT04ocHRyID4gKHUxNiAqKXNrYl90YWlsX3BvaW50ZXIoc2ti KSkpCi0JCQlyZXR1cm47Ci0JCXB0ciArPSAxICsgYWttX3N1aXRlX3NpemUgKiAqcHRyOwotCQlp ZiAoV0FSTl9PTihwdHIgPiAodTE2ICopc2tiX3RhaWxfcG9pbnRlcihza2IpKSkKLQkJCXJldHVy bjsKLQkJaGlmX3NldF9tZnAod3ZpZiwgKnB0ciAmIEJJVCg3KSwgKnB0ciAmIEJJVCg2KSk7Ci0J fQotfQotCi1pbnQgd2Z4X3N0YXJ0X2FwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qg aWVlZTgwMjExX3ZpZiAqdmlmKQotewotCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3 ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKLQlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IHd2aWYtPndk ZXY7Ci0JaW50IHJldDsKLQotCXd2aWYgPSAgTlVMTDsKLQl3aGlsZSAoKHd2aWYgPSB3dmlmX2l0 ZXJhdGUod2Rldiwgd3ZpZikpICE9IE5VTEwpCi0JCXdmeF91cGRhdGVfcG0od3ZpZik7Ci0Jd3Zp ZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7Ci0Jd2Z4X3VwbG9hZF9hcF90ZW1w bGF0ZXMod3ZpZik7Ci0JcmV0ID0gaGlmX3N0YXJ0KHd2aWYsICZ2aWYtPmJzc19jb25mLCB3dmlm LT5jaGFubmVsKTsKLQlpZiAocmV0ID4gMCkKLQkJcmV0dXJuIC1FSU87Ci0Jd2Z4X3NldF9tZnBf YXAod3ZpZik7Ci0JcmV0dXJuIHJldDsKLX0KLQotdm9pZCB3Znhfc3RvcF9hcChzdHJ1Y3QgaWVl ZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKLXsKLQlzdHJ1Y3Qgd2Z4 X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7Ci0KLQl3ZnhfcmVz ZXQod3ZpZik7Ci19Ci0KLXN0YXRpYyB2b2lkIHdmeF9qb2luKHN0cnVjdCB3ZnhfdmlmICp3dmlm KQotewotCWludCByZXQ7Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqY29uZiA9ICZ3dmlm LT52aWYtPmJzc19jb25mOwotCXN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcyA9IE5VTEw7Ci0JdTgg c3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTsKLQljb25zdCB1OCAqc3NpZGllID0gTlVMTDsK LQlpbnQgc3NpZGxlbiA9IDA7Ci0KLQl3ZnhfdHhfbG9ja19mbHVzaCh3dmlmLT53ZGV2KTsKLQot CWJzcyA9IGNmZzgwMjExX2dldF9ic3Mod3ZpZi0+d2Rldi0+aHctPndpcGh5LCB3dmlmLT5jaGFu bmVsLAotCQkJICAgICAgIGNvbmYtPmJzc2lkLCBOVUxMLCAwLAotCQkJICAgICAgIElFRUU4MDIx MV9CU1NfVFlQRV9BTlksIElFRUU4MDIxMV9QUklWQUNZX0FOWSk7Ci0JaWYgKCFic3MgJiYgIWNv bmYtPmlic3Nfam9pbmVkKSB7Ci0JCXdmeF90eF91bmxvY2sod3ZpZi0+d2Rldik7Ci0JCXJldHVy bjsKLQl9Ci0KLQlyY3VfcmVhZF9sb2NrKCk7IC8qIHByb3RlY3Qgc3NpZGllICovCi0JaWYgKGJz cykKLQkJc3NpZGllID0gaWVlZTgwMjExX2Jzc19nZXRfaWUoYnNzLCBXTEFOX0VJRF9TU0lEKTsK LQlpZiAoc3NpZGllKSB7Ci0JCXNzaWRsZW4gPSBzc2lkaWVbMV07Ci0JCWlmIChzc2lkbGVuID4g SUVFRTgwMjExX01BWF9TU0lEX0xFTikKLQkJCXNzaWRsZW4gPSBJRUVFODAyMTFfTUFYX1NTSURf TEVOOwotCQltZW1jcHkoc3NpZCwgJnNzaWRpZVsyXSwgc3NpZGxlbik7Ci0JfQotCXJjdV9yZWFk X3VubG9jaygpOwotCi0JY2ZnODAyMTFfcHV0X2Jzcyh3dmlmLT53ZGV2LT5ody0+d2lwaHksIGJz cyk7Ci0KLQl3dmlmLT5qb2luX2luX3Byb2dyZXNzID0gdHJ1ZTsKLQlyZXQgPSBoaWZfam9pbih3 dmlmLCBjb25mLCB3dmlmLT5jaGFubmVsLCBzc2lkLCBzc2lkbGVuKTsKLQlpZiAocmV0KSB7Ci0J CWllZWU4MDIxMV9jb25uZWN0aW9uX2xvc3Mod3ZpZi0+dmlmKTsKLQkJd2Z4X3Jlc2V0KHd2aWYp OwotCX0gZWxzZSB7Ci0JCS8qIER1ZSB0byBiZWFjb24gZmlsdGVyaW5nIGl0IGlzIHBvc3NpYmxl IHRoYXQgdGhlCi0JCSAqIEFQJ3MgYmVhY29uIGlzIG5vdCBrbm93biBmb3IgdGhlIG1hYzgwMjEx IHN0YWNrLgotCQkgKiBEaXNhYmxlIGZpbHRlcmluZyB0ZW1wb3JhcnkgdG8gbWFrZSBzdXJlIHRo ZSBzdGFjawotCQkgKiByZWNlaXZlcyBhdCBsZWFzdCBvbmUKLQkJICovCi0JCXdmeF9maWx0ZXJf YmVhY29uKHd2aWYsIGZhbHNlKTsKLQl9Ci0Jd2Z4X3R4X3VubG9jayh3dmlmLT53ZGV2KTsKLX0K LQotc3RhdGljIHZvaWQgd2Z4X2pvaW5fZmluYWxpemUoc3RydWN0IHdmeF92aWYgKnd2aWYsCi0J CQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvKQotewotCXN0cnVjdCBpZWVl ODAyMTFfc3RhICpzdGEgPSBOVUxMOwotCWludCBhbXBkdV9kZW5zaXR5ID0gMDsKLQlib29sIGdy ZWVuZmllbGQgPSBmYWxzZTsKLQotCXJjdV9yZWFkX2xvY2soKTsgLyogcHJvdGVjdCBzdGEgKi8K LQlpZiAoaW5mby0+YnNzaWQgJiYgIWluZm8tPmlic3Nfam9pbmVkKQotCQlzdGEgPSBpZWVlODAy MTFfZmluZF9zdGEod3ZpZi0+dmlmLCBpbmZvLT5ic3NpZCk7Ci0JaWYgKHN0YSAmJiBzdGEtPmh0 X2NhcC5odF9zdXBwb3J0ZWQpCi0JCWFtcGR1X2RlbnNpdHkgPSBzdGEtPmh0X2NhcC5hbXBkdV9k ZW5zaXR5OwotCWlmIChzdGEgJiYgc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkICYmCi0JICAgICEo aW5mby0+aHRfb3BlcmF0aW9uX21vZGUgJiBJRUVFODAyMTFfSFRfT1BfTU9ERV9OT05fR0ZfU1RB X1BSU05UKSkKLQkJZ3JlZW5maWVsZCA9ICEhKHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9I VF9DQVBfR1JOX0ZMRCk7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQl3dmlmLT5qb2luX2luX3By b2dyZXNzID0gZmFsc2U7Ci0JaGlmX3NldF9hc3NvY2lhdGlvbl9tb2RlKHd2aWYsIGFtcGR1X2Rl bnNpdHksIGdyZWVuZmllbGQsCi0JCQkJIGluZm8tPnVzZV9zaG9ydF9wcmVhbWJsZSk7Ci0JaGlm X2tlZXBfYWxpdmVfcGVyaW9kKHd2aWYsIDApOwotCS8qIGJlYWNvbl9sb3NzX2NvdW50IGlzIGRl ZmluZWQgdG8gNyBpbiBuZXQvbWFjODAyMTEvbWxtZS5jLiBMZXQncyB1c2UKLQkgKiB0aGUgc2Ft ZSB2YWx1ZS4KLQkgKi8KLQloaWZfc2V0X2Jzc19wYXJhbXMod3ZpZiwgaW5mby0+YWlkLCA3KTsK LQloaWZfc2V0X2JlYWNvbl93YWtldXBfcGVyaW9kKHd2aWYsIDEsIDEpOwotCXdmeF91cGRhdGVf cG0od3ZpZik7Ci19Ci0KLWludCB3Znhfam9pbl9pYnNzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3 LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQotewotCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0g KHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKLQotCXdmeF91cGxvYWRfYXBfdGVtcGxh dGVzKHd2aWYpOwotCXdmeF9qb2luKHd2aWYpOwotCXJldHVybiAwOwotfQotCi12b2lkIHdmeF9s ZWF2ZV9pYnNzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAq dmlmKQotewotCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5k cnZfcHJpdjsKLQotCXdmeF9yZXNldCh3dmlmKTsKLX0KLQotc3RhdGljIHZvaWQgd2Z4X2VuYWJs ZV9iZWFjb24oc3RydWN0IHdmeF92aWYgKnd2aWYsIGJvb2wgZW5hYmxlKQotewotCS8qIERyaXZl ciBoYXMgQ29udGVudCBBZnRlciBEVElNIEJlYWNvbiBpbiBxdWV1ZS4gRHJpdmVyIGlzIHdhaXRp bmcgZm9yCi0JICogYSBzaWduYWwgZnJvbSB0aGUgZmlybXdhcmUuIFNpbmNlIHdlIGFyZSBnb2lu ZyB0byBzdG9wIHRvIHNlbmQKLQkgKiBiZWFjb25zLCB0aGlzIHNpZ25hbCB3aWxsIG5ldmVyIGhh cHBlbnMuIFNlZSBhbHNvCi0JICogd2Z4X3N1c3BlbmRfcmVzdW1lX21jKCkKLQkgKi8KLQlpZiAo IWVuYWJsZSAmJiB3ZnhfdHhfcXVldWVzX2hhc19jYWIod3ZpZikpIHsKLQkJd3ZpZi0+YWZ0ZXJf ZHRpbV90eF9hbGxvd2VkID0gdHJ1ZTsKLQkJd2Z4X2JoX3JlcXVlc3RfdHgod3ZpZi0+d2Rldik7 Ci0JfQotCWhpZl9iZWFjb25fdHJhbnNtaXQod3ZpZiwgZW5hYmxlKTsKLX0KLQotdm9pZCB3Znhf YnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIx MV92aWYgKnZpZiwKLQkJCSAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbywgdTMyIGNo YW5nZWQpCi17Ci0Jc3RydWN0IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsKLQlzdHJ1Y3Qgd2Z4 X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7Ci0JaW50IGk7Ci0K LQltdXRleF9sb2NrKCZ3ZGV2LT5jb25mX211dGV4KTsKLQotCWlmIChjaGFuZ2VkICYgQlNTX0NI QU5HRURfQkFTSUNfUkFURVMgfHwKLQkgICAgY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTl9J TlQgfHwKLQkgICAgY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JTU0lEKSB7Ci0JCWlmICh2aWYtPnR5 cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKLQkJCXdmeF9qb2luKHd2aWYpOwotCX0KLQot CWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQVNTT0MpIHsKLQkJaWYgKGluZm8tPmFzc29jIHx8 IGluZm8tPmlic3Nfam9pbmVkKQotCQkJd2Z4X2pvaW5fZmluYWxpemUod3ZpZiwgaW5mbyk7Ci0J CWVsc2UgaWYgKCFpbmZvLT5hc3NvYyAmJiB2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RB VElPTikKLQkJCXdmeF9yZXNldCh3dmlmKTsKLQkJZWxzZQotCQkJZGV2X3dhcm4od2Rldi0+ZGV2 LCAiJXM6IG1pc3VuZGVyc3Rvb2QgY2hhbmdlOiBBU1NPQ1xuIiwKLQkJCQkgX19mdW5jX18pOwot CX0KLQotCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkVBQ09OX0lORk8pIHsKLQkJaWYgKHZp Zi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQotCQkJZGV2X3dhcm4od2Rldi0+ZGV2 LCAiJXM6IG1pc3VuZGVyc3Rvb2QgY2hhbmdlOiBCRUFDT05fSU5GT1xuIiwKLQkJCQkgX19mdW5j X18pOwotCQloaWZfc2V0X2JlYWNvbl93YWtldXBfcGVyaW9kKHd2aWYsIGluZm8tPmR0aW1fcGVy aW9kLAotCQkJCQkgICAgIGluZm8tPmR0aW1fcGVyaW9kKTsKLQkJLyogV2UgdGVtcG9yYXJ5IGZv cndhcmRlZCBiZWFjb24gZm9yIGpvaW4gcHJvY2Vzcy4gSXQgaXMgbm93IG5vCi0JCSAqIG1vcmUg bmVjZXNzYXJ5LgotCQkgKi8KLQkJd2Z4X2ZpbHRlcl9iZWFjb24od3ZpZiwgdHJ1ZSk7Ci0JfQot Ci0JaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9BUlBfRklMVEVSKSB7Ci0JCWZvciAoaSA9IDA7 IGkgPCBISUZfTUFYX0FSUF9JUF9BRERSVEFCTEVfRU5UUklFUzsgaSsrKSB7Ci0JCQlfX2JlMzIg KmFycF9hZGRyID0gJmluZm8tPmFycF9hZGRyX2xpc3RbaV07Ci0KLQkJCWlmIChpbmZvLT5hcnBf YWRkcl9jbnQgPiBISUZfTUFYX0FSUF9JUF9BRERSVEFCTEVfRU5UUklFUykKLQkJCQlhcnBfYWRk ciA9IE5VTEw7Ci0JCQlpZiAoaSA+PSBpbmZvLT5hcnBfYWRkcl9jbnQpCi0JCQkJYXJwX2FkZHIg PSBOVUxMOwotCQkJaGlmX3NldF9hcnBfaXB2NF9maWx0ZXIod3ZpZiwgaSwgYXJwX2FkZHIpOwot CQl9Ci0JfQotCi0JaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9BUF9QUk9CRV9SRVNQIHx8Ci0J ICAgIGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT04pCi0JCXdmeF91cGxvYWRfYXBfdGVtcGxh dGVzKHd2aWYpOwotCi0JaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCkK LQkJd2Z4X2VuYWJsZV9iZWFjb24od3ZpZiwgaW5mby0+ZW5hYmxlX2JlYWNvbik7Ci0KLQlpZiAo Y2hhbmdlZCAmIEJTU19DSEFOR0VEX0tFRVBfQUxJVkUpCi0JCWhpZl9rZWVwX2FsaXZlX3Blcmlv ZCh3dmlmLCBpbmZvLT5tYXhfaWRsZV9wZXJpb2QgKgotCQkJCQkgICAgVVNFQ19QRVJfVFUgLyBV U0VDX1BFUl9NU0VDKTsKLQotCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfRVJQX0NUU19QUk9U KQotCQloaWZfZXJwX3VzZV9wcm90ZWN0aW9uKHd2aWYsIGluZm8tPnVzZV9jdHNfcHJvdCk7Ci0K LQlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0VSUF9TTE9UKQotCQloaWZfc2xvdF90aW1lKHd2 aWYsIGluZm8tPnVzZV9zaG9ydF9zbG90ID8gOSA6IDIwKTsKLQotCWlmIChjaGFuZ2VkICYgQlNT X0NIQU5HRURfQ1FNKQotCQloaWZfc2V0X3JjcGlfcnNzaV90aHJlc2hvbGQod3ZpZiwgaW5mby0+ Y3FtX3Jzc2lfdGhvbGQsCi0JCQkJCSAgICBpbmZvLT5jcW1fcnNzaV9oeXN0KTsKLQotCWlmIChj aGFuZ2VkICYgQlNTX0NIQU5HRURfVFhQT1dFUikKLQkJaGlmX3NldF9vdXRwdXRfcG93ZXIod3Zp ZiwgaW5mby0+dHhwb3dlcik7Ci0KLQlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX1BTKQotCQl3 ZnhfdXBkYXRlX3BtKHd2aWYpOwotCi0JbXV0ZXhfdW5sb2NrKCZ3ZGV2LT5jb25mX211dGV4KTsK LX0KLQotc3RhdGljIGludCB3ZnhfdXBkYXRlX3RpbShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZikKLXsK LQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXUxNiB0aW1fb2Zmc2V0LCB0aW1fbGVuZ3RoOwotCXU4 ICp0aW1fcHRyOwotCi0Jc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltKHd2aWYtPndkZXYt Pmh3LCB3dmlmLT52aWYsCi0JCQkJICAgICAgICZ0aW1fb2Zmc2V0LCAmdGltX2xlbmd0aCk7Ci0J aWYgKCFza2IpCi0JCXJldHVybiAtRU5PRU5UOwotCXRpbV9wdHIgPSBza2ItPmRhdGEgKyB0aW1f b2Zmc2V0OwotCi0JaWYgKHRpbV9vZmZzZXQgJiYgdGltX2xlbmd0aCA+PSA2KSB7Ci0JCS8qIEZp cm13YXJlIGhhbmRsZXMgRFRJTSBjb3VudGVyIGludGVybmFsbHkgKi8KLQkJdGltX3B0clsyXSA9 IDA7Ci0KLQkJLyogU2V0L3Jlc2V0IGFpZDAgYml0ICovCi0JCWlmICh3ZnhfdHhfcXVldWVzX2hh c19jYWIod3ZpZikpCi0JCQl0aW1fcHRyWzRdIHw9IDE7Ci0JCWVsc2UKLQkJCXRpbV9wdHJbNF0g Jj0gfjE7Ci0JfQotCi0JaGlmX3VwZGF0ZV9pZV9iZWFjb24od3ZpZiwgdGltX3B0ciwgdGltX2xl bmd0aCk7Ci0JZGV2X2tmcmVlX3NrYihza2IpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2 b2lkIHdmeF91cGRhdGVfdGltX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0 cnVjdCB3ZnhfdmlmICp3dmlmID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3ZnhfdmlmLCB1 cGRhdGVfdGltX3dvcmspOwotCi0Jd2Z4X3VwZGF0ZV90aW0od3ZpZik7Ci19Ci0KLWludCB3Znhf c2V0X3RpbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0 YSwgYm9vbCBzZXQpCi17Ci0Jc3RydWN0IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsKLQlzdHJ1 Y3Qgd2Z4X3N0YV9wcml2ICpzdGFfZGV2ID0gKHN0cnVjdCB3Znhfc3RhX3ByaXYgKikmc3RhLT5k cnZfcHJpdjsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IHdkZXZfdG9fd3ZpZih3ZGV2LCBzdGFf ZGV2LT52aWZfaWQpOwotCi0JaWYgKCF3dmlmKSB7Ci0JCWRldl93YXJuKHdkZXYtPmRldiwgIiVz OiByZWNlaXZlZCBldmVudCBmb3Igbm9uLWV4aXN0ZW50IHZpZlxuIiwgX19mdW5jX18pOwotCQly ZXR1cm4gLUVJTzsKLQl9Ci0Jc2NoZWR1bGVfd29yaygmd3ZpZi0+dXBkYXRlX3RpbV93b3JrKTsK LQlyZXR1cm4gMDsKLX0KLQotdm9pZCB3Znhfc3VzcGVuZF9yZXN1bWVfbWMoc3RydWN0IHdmeF92 aWYgKnd2aWYsIGVudW0gc3RhX25vdGlmeV9jbWQgbm90aWZ5X2NtZCkKLXsKLQlzdHJ1Y3Qgd2Z4 X3ZpZiAqd3ZpZl9pdDsKLQotCWlmIChub3RpZnlfY21kICE9IFNUQV9OT1RJRllfQVdBS0UpCi0J CXJldHVybjsKLQotCS8qIERldmljZSB3b24ndCBiZSBhYmxlIHRvIGhvbm9yIENBQiBpZiBhIHNj YW4gaXMgaW4gcHJvZ3Jlc3Mgb24gYW55Ci0JICogaW50ZXJmYWNlLiBQcmVmZXIgdG8gc2tpcCB0 aGlzIERUSU0gYW5kIHdhaXQgZm9yIHRoZSBuZXh0IG9uZS4KLQkgKi8KLQl3dmlmX2l0ID0gTlVM TDsKLQl3aGlsZSAoKHd2aWZfaXQgPSB3dmlmX2l0ZXJhdGUod3ZpZi0+d2Rldiwgd3ZpZl9pdCkp ICE9IE5VTEwpCi0JCWlmIChtdXRleF9pc19sb2NrZWQoJnd2aWZfaXQtPnNjYW5fbG9jaykpCi0J CQlyZXR1cm47Ci0KLQlpZiAoIXdmeF90eF9xdWV1ZXNfaGFzX2NhYih3dmlmKSB8fCB3dmlmLT5h ZnRlcl9kdGltX3R4X2FsbG93ZWQpCi0JCWRldl93YXJuKHd2aWYtPndkZXYtPmRldiwgImluY29y cmVjdCBzZXF1ZW5jZSAoJWQgQ0FCIGluIHF1ZXVlKSIsCi0JCQkgd2Z4X3R4X3F1ZXVlc19oYXNf Y2FiKHd2aWYpKTsKLQl3dmlmLT5hZnRlcl9kdGltX3R4X2FsbG93ZWQgPSB0cnVlOwotCXdmeF9i aF9yZXF1ZXN0X3R4KHd2aWYtPndkZXYpOwotfQotCi1pbnQgd2Z4X2FtcGR1X2FjdGlvbihzdHJ1 Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAot CQkgICAgIHN0cnVjdCBpZWVlODAyMTFfYW1wZHVfcGFyYW1zICpwYXJhbXMpCi17Ci0JLyogQWdn cmVnYXRpb24gaXMgaW1wbGVtZW50ZWQgZnVsbHkgaW4gZmlybXdhcmUgKi8KLQlzd2l0Y2ggKHBh cmFtcy0+YWN0aW9uKSB7Ci0JY2FzZSBJRUVFODAyMTFfQU1QRFVfUlhfU1RBUlQ6Ci0JY2FzZSBJ RUVFODAyMTFfQU1QRFVfUlhfU1RPUDoKLQkJLyogSnVzdCBhY2tub3dsZWRnZSBpdCB0byBlbmFi bGUgZnJhbWUgcmUtb3JkZXJpbmcgKi8KLQkJcmV0dXJuIDA7Ci0JZGVmYXVsdDoKLQkJLyogTGVh dmUgdGhlIGZpcm13YXJlIGRvaW5nIGl0cyBidXNpbmVzcyBmb3IgdHggYWdncmVnYXRpb24gKi8K LQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLX0KLQotaW50IHdmeF9hZGRfY2hhbmN0eChzdHJ1 Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25m ICpjb25mKQotewotCXJldHVybiAwOwotfQotCi12b2lkIHdmeF9yZW1vdmVfY2hhbmN0eChzdHJ1 Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpj b25mKQotewotfQotCi12b2lkIHdmeF9jaGFuZ2VfY2hhbmN0eChzdHJ1Y3QgaWVlZTgwMjExX2h3 ICpodywKLQkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mLAotCQkJdTMyIGNo YW5nZWQpCi17Ci19Ci0KLWludCB3ZnhfYXNzaWduX3ZpZl9jaGFuY3R4KHN0cnVjdCBpZWVlODAy MTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAotCQkJICAgc3RydWN0IGllZWU4 MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYpCi17Ci0Jc3RydWN0IHdmeF92aWYgKnd2aWYgPSAoc3Ry dWN0IHdmeF92aWYgKil2aWYtPmRydl9wcml2OwotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAq Y2ggPSBjb25mLT5kZWYuY2hhbjsKLQotCVdBUk4od3ZpZi0+Y2hhbm5lbCwgImNoYW5uZWwgb3Zl cndyaXRlIik7Ci0Jd3ZpZi0+Y2hhbm5lbCA9IGNoOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQg d2Z4X3VuYXNzaWduX3ZpZl9jaGFuY3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJICAg ICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFf Y2hhbmN0eF9jb25mICpjb25mKQotewotCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3 ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoID0g Y29uZi0+ZGVmLmNoYW47Ci0KLQlXQVJOKHd2aWYtPmNoYW5uZWwgIT0gY2gsICJjaGFubmVsIG1p c21hdGNoIik7Ci0Jd3ZpZi0+Y2hhbm5lbCA9IE5VTEw7Ci19Ci0KLWludCB3ZnhfY29uZmlnKHN0 cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY2hhbmdlZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQot aW50IHdmeF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVl ZTgwMjExX3ZpZiAqdmlmKQotewotCWludCBpLCByZXQgPSAwOwotCXN0cnVjdCB3ZnhfZGV2ICp3 ZGV2ID0gaHctPnByaXY7Ci0Jc3RydWN0IHdmeF92aWYgKnd2aWYgPSAoc3RydWN0IHdmeF92aWYg Kil2aWYtPmRydl9wcml2OwotCi0JdmlmLT5kcml2ZXJfZmxhZ3MgfD0gSUVFRTgwMjExX1ZJRl9C RUFDT05fRklMVEVSIHwKLQkJCSAgICAgSUVFRTgwMjExX1ZJRl9TVVBQT1JUU19VQVBTRCB8Ci0J CQkgICAgIElFRUU4MDIxMV9WSUZfU1VQUE9SVFNfQ1FNX1JTU0k7Ci0KLQltdXRleF9sb2NrKCZ3 ZGV2LT5jb25mX211dGV4KTsKLQotCXN3aXRjaCAodmlmLT50eXBlKSB7Ci0JY2FzZSBOTDgwMjEx X0lGVFlQRV9TVEFUSU9OOgotCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6Ci0JY2FzZSBOTDgw MjExX0lGVFlQRV9BUDoKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJbXV0ZXhfdW5sb2NrKCZ3ZGV2 LT5jb25mX211dGV4KTsKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQotCS8qIEZJWE1FOiBw cmVmZXIgdXNlIG9mIGNvbnRhaW5lcl9vZigpIHRvIGdldCB2aWYgKi8KLQl3dmlmLT52aWYgPSB2 aWY7Ci0Jd3ZpZi0+d2RldiA9IHdkZXY7Ci0KLQl3dmlmLT5saW5rX2lkX21hcCA9IDE7IC8qIGxp bmstaWQgMCBpcyByZXNlcnZlZCBmb3IgbXVsdGljYXN0ICovCi0JSU5JVF9XT1JLKCZ3dmlmLT51 cGRhdGVfdGltX3dvcmssIHdmeF91cGRhdGVfdGltX3dvcmspOwotCUlOSVRfREVMQVlFRF9XT1JL KCZ3dmlmLT5iZWFjb25fbG9zc193b3JrLCB3ZnhfYmVhY29uX2xvc3Nfd29yayk7Ci0KLQlpbml0 X2NvbXBsZXRpb24oJnd2aWYtPnNldF9wbV9tb2RlX2NvbXBsZXRlKTsKLQljb21wbGV0ZSgmd3Zp Zi0+c2V0X3BtX21vZGVfY29tcGxldGUpOwotCUlOSVRfV09SSygmd3ZpZi0+dHhfcG9saWN5X3Vw bG9hZF93b3JrLCB3ZnhfdHhfcG9saWN5X3VwbG9hZF93b3JrKTsKLQotCW11dGV4X2luaXQoJnd2 aWYtPnNjYW5fbG9jayk7Ci0JaW5pdF9jb21wbGV0aW9uKCZ3dmlmLT5zY2FuX2NvbXBsZXRlKTsK LQlJTklUX1dPUksoJnd2aWYtPnNjYW5fd29yaywgd2Z4X2h3X3NjYW5fd29yayk7Ci0KLQl3Znhf dHhfcXVldWVzX2luaXQod3ZpZik7Ci0Jd2Z4X3R4X3BvbGljeV9pbml0KHd2aWYpOwotCi0JZm9y IChpID0gMDsgaSA8IEFSUkFZX1NJWkUod2Rldi0+dmlmKTsgaSsrKSB7Ci0JCWlmICghd2Rldi0+ dmlmW2ldKSB7Ci0JCQl3ZGV2LT52aWZbaV0gPSB2aWY7Ci0JCQl3dmlmLT5pZCA9IGk7Ci0JCQli cmVhazsKLQkJfQotCX0KLQlXQVJOKGkgPT0gQVJSQVlfU0laRSh3ZGV2LT52aWYpLCAidHJ5IHRv IGluc3RhbnRpYXRlIG1vcmUgdmlmIHRoYW4gc3VwcG9ydGVkIik7Ci0KLQloaWZfc2V0X21hY2Fk ZHIod3ZpZiwgdmlmLT5hZGRyKTsKLQotCW11dGV4X3VubG9jaygmd2Rldi0+Y29uZl9tdXRleCk7 Ci0KLQl3dmlmID0gTlVMTDsKLQl3aGlsZSAoKHd2aWYgPSB3dmlmX2l0ZXJhdGUod2Rldiwgd3Zp ZikpICE9IE5VTEwpIHsKLQkJLyogQ29tYm8gbW9kZSBkb2VzIG5vdCBzdXBwb3J0IEJsb2NrIEFj a3MuIFdlIGNhbiByZS1lbmFibGUgdGhlbSAqLwotCQlpZiAod3ZpZl9jb3VudCh3ZGV2KSA9PSAx KQotCQkJaGlmX3NldF9ibG9ja19hY2tfcG9saWN5KHd2aWYsIDB4RkYsIDB4RkYpOwotCQllbHNl Ci0JCQloaWZfc2V0X2Jsb2NrX2Fja19wb2xpY3kod3ZpZiwgMHgwMCwgMHgwMCk7Ci0JfQotCXJl dHVybiByZXQ7Ci19Ci0KLXZvaWQgd2Z4X3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIx MV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCi17Ci0Jc3RydWN0IHdmeF9kZXYg KndkZXYgPSBody0+cHJpdjsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3Zp ZiAqKXZpZi0+ZHJ2X3ByaXY7Ci0KLQl3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnd2aWYt PnNldF9wbV9tb2RlX2NvbXBsZXRlLCBtc2Vjc190b19qaWZmaWVzKDMwMCkpOwotCXdmeF90eF9x dWV1ZXNfY2hlY2tfZW1wdHkod3ZpZik7Ci0KLQltdXRleF9sb2NrKCZ3ZGV2LT5jb25mX211dGV4 KTsKLQlXQVJOKHd2aWYtPmxpbmtfaWRfbWFwICE9IDEsICJjb3JydXB0ZWQgc3RhdGUiKTsKLQot CWhpZl9yZXNldCh3dmlmLCBmYWxzZSk7Ci0JaGlmX3NldF9tYWNhZGRyKHd2aWYsIE5VTEwpOwot CXdmeF90eF9wb2xpY3lfaW5pdCh3dmlmKTsKLQotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygm d3ZpZi0+YmVhY29uX2xvc3Nfd29yayk7Ci0Jd2Rldi0+dmlmW3d2aWYtPmlkXSA9IE5VTEw7Ci0J d3ZpZi0+dmlmID0gTlVMTDsKLQotCW11dGV4X3VubG9jaygmd2Rldi0+Y29uZl9tdXRleCk7Ci0K LQl3dmlmID0gTlVMTDsKLQl3aGlsZSAoKHd2aWYgPSB3dmlmX2l0ZXJhdGUod2Rldiwgd3ZpZikp ICE9IE5VTEwpIHsKLQkJLyogQ29tYm8gbW9kZSBkb2VzIG5vdCBzdXBwb3J0IEJsb2NrIEFja3Mu IFdlIGNhbiByZS1lbmFibGUgdGhlbSAqLwotCQlpZiAod3ZpZl9jb3VudCh3ZGV2KSA9PSAxKQot CQkJaGlmX3NldF9ibG9ja19hY2tfcG9saWN5KHd2aWYsIDB4RkYsIDB4RkYpOwotCQllbHNlCi0J CQloaWZfc2V0X2Jsb2NrX2Fja19wb2xpY3kod3ZpZiwgMHgwMCwgMHgwMCk7Ci0JfQotfQotCi1p bnQgd2Z4X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQotewotCXJldHVybiAwOwotfQot Ci12b2lkIHdmeF9zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQotewotCXN0cnVjdCB3Znhf ZGV2ICp3ZGV2ID0gaHctPnByaXY7Ci0KLQlXQVJOX09OKCFza2JfcXVldWVfZW1wdHlfbG9ja2xl c3MoJndkZXYtPnR4X3BlbmRpbmcpKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93 Zngvc3RhLmggYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L3N0YS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCA0ZDdlMzhiZTQyMzUuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdp bmcvd2Z4L3N0YS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyogU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwotLyoKLSAqIEltcGxlbWVudGF0aW9uIG9m IG1hYzgwMjExIEFQSS4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCwgU2lsaWNvbiBM YWJvcmF0b3JpZXMsIEluYy4KLSAqIENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJpY3Nzb24KLSAq LwotI2lmbmRlZiBXRlhfU1RBX0gKLSNkZWZpbmUgV0ZYX1NUQV9ICi0KLSNpbmNsdWRlIDxuZXQv bWFjODAyMTEuaD4KLQotc3RydWN0IHdmeF9kZXY7Ci1zdHJ1Y3Qgd2Z4X3ZpZjsKLQotc3RydWN0 IHdmeF9zdGFfcHJpdiB7Ci0JaW50IGxpbmtfaWQ7Ci0JaW50IHZpZl9pZDsKLX07Ci0KLS8qIG1h YzgwMjExIGludGVyZmFjZSAqLwotaW50IHdmeF9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpo dyk7Ci12b2lkIHdmeF9zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKLWludCB3ZnhfY29u ZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY2hhbmdlZCk7Ci1pbnQgd2Z4X3NldF9y dHNfdGhyZXNob2xkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgdmFsdWUpOwotdm9pZCB3 Znhfc2V0X2RlZmF1bHRfdW5pY2FzdF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJ IHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIGludCBpZHgpOwotdm9pZCB3ZnhfY29uZmlndXJl X2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdW5zaWduZWQgaW50IGNoYW5nZWRfZmxh Z3MsCi0JCQkgIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsIHU2NCB1bnVzZWQpOwotCi1pbnQg d2Z4X2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAy MTFfdmlmICp2aWYpOwotdm9pZCB3ZnhfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjEx X2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7Ci1pbnQgd2Z4X3N0YXJ0X2FwKHN0 cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKLXZvaWQg d2Z4X3N0b3BfYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlm ICp2aWYpOwotaW50IHdmeF9qb2luX2lic3Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVj dCBpZWVlODAyMTFfdmlmICp2aWYpOwotdm9pZCB3ZnhfbGVhdmVfaWJzcyhzdHJ1Y3QgaWVlZTgw MjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7Ci1pbnQgd2Z4X2NvbmZfdHgo c3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCXUx NiBxdWV1ZSwgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcyk7 Ci12b2lkIHdmeF9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1 Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAotCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpp bmZvLCB1MzIgY2hhbmdlZCk7Ci1pbnQgd2Z4X3N0YV9hZGQoc3RydWN0IGllZWU4MDIxMV9odyAq aHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCXN0cnVjdCBpZWVlODAyMTFfc3RhICpz dGEpOwotaW50IHdmeF9zdGFfcmVtb3ZlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qg aWVlZTgwMjExX3ZpZiAqdmlmLAotCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKTsKLXZv aWQgd2Z4X3N0YV9ub3RpZnkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAy MTFfdmlmICp2aWYsCi0JCSAgICBlbnVtIHN0YV9ub3RpZnlfY21kIGNtZCwgc3RydWN0IGllZWU4 MDIxMV9zdGEgKnN0YSk7Ci1pbnQgd2Z4X3NldF90aW0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcs IHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIGJvb2wgc2V0KTsKLWludCB3ZnhfYW1wZHVfYWN0 aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAot CQkgICAgIHN0cnVjdCBpZWVlODAyMTFfYW1wZHVfcGFyYW1zICpwYXJhbXMpOwotaW50IHdmeF9h ZGRfY2hhbmN0eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJICAgIHN0cnVjdCBpZWVlODAy MTFfY2hhbmN0eF9jb25mICpjb25mKTsKLXZvaWQgd2Z4X3JlbW92ZV9jaGFuY3R4KHN0cnVjdCBp ZWVlODAyMTFfaHcgKmh3LAotCQkJc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYp Owotdm9pZCB3ZnhfY2hhbmdlX2NoYW5jdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQlz dHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZiwgdTMyIGNoYW5nZWQpOwotaW50IHdm eF9hc3NpZ25fdmlmX2NoYW5jdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVl ODAyMTFfdmlmICp2aWYsCi0JCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29u Zik7Ci12b2lkIHdmeF91bmFzc2lnbl92aWZfY2hhbmN0eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpo dywKLQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCQkgICAgICBzdHJ1Y3Qg aWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZik7Ci0KLS8qIEhhcmR3YXJlIEFQSSBDYWxsYmFj a3MgKi8KLXZvaWQgd2Z4X2Nvb2xpbmdfdGltZW91dF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAq d29yayk7Ci12b2lkIHdmeF9zdXNwZW5kX2hvdF9kZXYoc3RydWN0IHdmeF9kZXYgKndkZXYsIGVu dW0gc3RhX25vdGlmeV9jbWQgY21kKTsKLXZvaWQgd2Z4X3N1c3BlbmRfcmVzdW1lX21jKHN0cnVj dCB3ZnhfdmlmICp3dmlmLCBlbnVtIHN0YV9ub3RpZnlfY21kIGNtZCk7Ci12b2lkIHdmeF9ldmVu dF9yZXBvcnRfcnNzaShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgdTggcmF3X3JjcGlfcnNzaSk7Ci1p bnQgd2Z4X3VwZGF0ZV9wbShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZik7Ci0KLS8qIE90aGVyIEhlbHBl cnMgKi8KLXZvaWQgd2Z4X3Jlc2V0KHN0cnVjdCB3ZnhfdmlmICp3dmlmKTsKLXUzMiB3ZnhfcmF0 ZV9tYXNrX3RvX2h3KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgcmF0ZXMpOwotCi0jZW5kaWYK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZngvdHJhY2VzLmggYi9kcml2ZXJzL3N0YWdp bmcvd2Z4L3RyYWNlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTBkYzczYzRi MDEuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L3RyYWNlcy5oCisrKyAv ZGV2L251bGwKQEAgLTEsNTAxICswLDAgQEAKLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wLW9ubHkgKi8KLS8qCi0gKiBUcmFjZXBvaW50cyBkZWZpbml0aW9ucy4KLSAqCi0gKiBD b3B5cmlnaHQgKGMpIDIwMTgtMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSAqLwot Ci0jdW5kZWYgVFJBQ0VfU1lTVEVNCi0jZGVmaW5lIFRSQUNFX1NZU1RFTSB3ZngKLQotI2lmICFk ZWZpbmVkKF9XRlhfVFJBQ0VfSCkgfHwgZGVmaW5lZChUUkFDRV9IRUFERVJfTVVMVElfUkVBRCkK LSNkZWZpbmUgX1dGWF9UUkFDRV9ICi0KLSNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+Ci0j aW5jbHVkZSA8bmV0L21hYzgwMjExLmg+Ci0KLSNpbmNsdWRlICJidXMuaCIKLSNpbmNsdWRlICJo aWZfYXBpX2NtZC5oIgotI2luY2x1ZGUgImhpZl9hcGlfbWliLmgiCi0KLS8qIFRoZSBoZWxsIGJl bG93IG5lZWQgc29tZSBleHBsYW5hdGlvbnMuIEZvciBlYWNoIHN5bWJvbGljIG51bWJlciwgd2Ug bmVlZCB0bwotICogZGVmaW5lIGl0IHdpdGggVFJBQ0VfREVGSU5FX0VOVU0oKSBhbmQgaW4gYSBs aXN0IGZvciBfX3ByaW50X3N5bWJvbGljLgotICoKLSAqICAgMS4gRGVmaW5lIGEgbmV3IG1hY3Jv IHRoYXQgY2FsbCBUUkFDRV9ERUZJTkVfRU5VTSgpOgotICoKLSAqICAgICAgICAgICNkZWZpbmUg eHh4X25hbWUoc3ltKSBUUkFDRV9ERUZJTkVfRU5VTShzeW0pOwotICoKLSAqICAgMi4gRGVmaW5l IGxpc3Qgb2YgYWxsIHN5bWJvbHM6Ci0gKgotICogICAgICAgICAgI2RlZmluZSBsaXN0X25hbWVz ICAgICBcCi0gKiAgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgIFwKLSAqICAgICAgICAg ICAgIHh4eF9uYW1lKFhYWCkgICAgICAgXAotICogICAgICAgICAgICAgLi4uCi0gKgotICogICAz LiBJbnN0YW50aWF0ZSB0aGF0IGxpc3RfbmFtZXM6Ci0gKgotICogICAgICAgICAgbGlzdF9uYW1l cwotICoKLSAqICAgNC4gUmVkZWZpbmUgeHh4X25hbWUoKSBhcyBhbiBlbnRyeSBvZiBhcnJheSBm b3IgX19wcmludF9zeW1ib2xpYygpCi0gKgotICogICAgICAgICAgI3VuZGVmIHh4eF9uYW1lCi0g KiAgICAgICAgICAjZGVmaW5lIHh4eF9uYW1lKG1zZykgeyBtc2csICNtc2cgfSwKLSAqCi0gKiAg IDUuIGxpc3RfbmFtZSBjYW4gbm93IG5lYXJseSBiZSB1c2VkIHdpdGggX19wcmludF9zeW1ib2xp YygpIGJ1dCwKLSAqICAgICAgX19wcmludF9zeW1ib2xpYygpIGRpc2xpa2UgbGFzdCBjb21tYSBv ZiBsaXN0LiBTbyB3ZSBkZWZpbmUgYSBuZXcgbGlzdAotICogICAgICB3aXRoIGEgZHVtbXkgZWxl bWVudDoKLSAqCi0gKiAgICAgICAgICAjZGVmaW5lIGxpc3RfZm9yX3ByaW50X3N5bWJvbGljIGxp c3RfbmFtZXMgeyAtMSwgTlVMTCB9Ci0gKi8KLQotI2RlZmluZSBfaGlmX21zZ19saXN0ICAgICAg ICAgICAgICAgICAgICAgICBcCi0JaGlmX2NuZl9uYW1lKEFERF9LRVkpICAgICAgICAgICAgICAg XAotCWhpZl9jbmZfbmFtZShCRUFDT05fVFJBTlNNSVQpICAgICAgIFwKLQloaWZfY25mX25hbWUo RURDQV9RVUVVRV9QQVJBTVMpICAgICBcCi0JaGlmX2NuZl9uYW1lKEpPSU4pICAgICAgICAgICAg ICAgICAgXAotCWhpZl9jbmZfbmFtZShNQVBfTElOSykgICAgICAgICAgICAgIFwKLQloaWZfY25m X25hbWUoUkVBRF9NSUIpICAgICAgICAgICAgICBcCi0JaGlmX2NuZl9uYW1lKFJFTU9WRV9LRVkp ICAgICAgICAgICAgXAotCWhpZl9jbmZfbmFtZShSRVNFVCkgICAgICAgICAgICAgICAgIFwKLQlo aWZfY25mX25hbWUoU0VUX0JTU19QQVJBTVMpICAgICAgICBcCi0JaGlmX2NuZl9uYW1lKFNFVF9Q TV9NT0RFKSAgICAgICAgICAgXAotCWhpZl9jbmZfbmFtZShTVEFSVCkgICAgICAgICAgICAgICAg IFwKLQloaWZfY25mX25hbWUoU1RBUlRfU0NBTikgICAgICAgICAgICBcCi0JaGlmX2NuZl9uYW1l KFNUT1BfU0NBTikgICAgICAgICAgICAgXAotCWhpZl9jbmZfbmFtZShUWCkgICAgICAgICAgICAg ICAgICAgIFwKLQloaWZfY25mX25hbWUoTVVMVElfVFJBTlNNSVQpICAgICAgICBcCi0JaGlmX2Nu Zl9uYW1lKFVQREFURV9JRSkgICAgICAgICAgICAgXAotCWhpZl9jbmZfbmFtZShXUklURV9NSUIp ICAgICAgICAgICAgIFwKLQloaWZfY25mX25hbWUoQ09ORklHVVJBVElPTikgICAgICAgICBcCi0J aGlmX2NuZl9uYW1lKENPTlRST0xfR1BJTykgICAgICAgICAgXAotCWhpZl9jbmZfbmFtZShQUkVW RU5UX1JPTExCQUNLKSAgICAgIFwKLQloaWZfY25mX25hbWUoU0VUX1NMX01BQ19LRVkpICAgICAg ICBcCi0JaGlmX2NuZl9uYW1lKFNMX0NPTkZJR1VSRSkgICAgICAgICAgXAotCWhpZl9jbmZfbmFt ZShTTF9FWENIQU5HRV9QVUJfS0VZUykgIFwKLQloaWZfY25mX25hbWUoU0hVVF9ET1dOKSAgICAg ICAgICAgICBcCi0JaGlmX2luZF9uYW1lKEVWRU5UKSAgICAgICAgICAgICAgICAgXAotCWhpZl9p bmRfbmFtZShKT0lOX0NPTVBMRVRFKSAgICAgICAgIFwKLQloaWZfaW5kX25hbWUoUlgpICAgICAg ICAgICAgICAgICAgICBcCi0JaGlmX2luZF9uYW1lKFNDQU5fQ01QTCkgICAgICAgICAgICAgXAot CWhpZl9pbmRfbmFtZShTRVRfUE1fTU9ERV9DTVBMKSAgICAgIFwKLQloaWZfaW5kX25hbWUoU1VT UEVORF9SRVNVTUVfVFgpICAgICBcCi0JaGlmX2luZF9uYW1lKFNMX0VYQ0hBTkdFX1BVQl9LRVlT KSAgXAotCWhpZl9pbmRfbmFtZShFUlJPUikgICAgICAgICAgICAgICAgIFwKLQloaWZfaW5kX25h bWUoRVhDRVBUSU9OKSAgICAgICAgICAgICBcCi0JaGlmX2luZF9uYW1lKEdFTkVSSUMpICAgICAg ICAgICAgICAgXAotCWhpZl9pbmRfbmFtZShXQUtFVVApICAgICAgICAgICAgICAgIFwKLQloaWZf aW5kX25hbWUoU1RBUlRVUCkKLQotI2RlZmluZSBoaWZfbXNnX2xpc3RfZW51bSBfaGlmX21zZ19s aXN0Ci0KLSN1bmRlZiBoaWZfY25mX25hbWUKLSN1bmRlZiBoaWZfaW5kX25hbWUKLSNkZWZpbmUg aGlmX2NuZl9uYW1lKG1zZykgVFJBQ0VfREVGSU5FX0VOVU0oSElGX0NORl9JRF8jI21zZyk7Ci0j ZGVmaW5lIGhpZl9pbmRfbmFtZShtc2cpIFRSQUNFX0RFRklORV9FTlVNKEhJRl9JTkRfSURfIyNt c2cpOwotaGlmX21zZ19saXN0X2VudW0KLSN1bmRlZiBoaWZfY25mX25hbWUKLSN1bmRlZiBoaWZf aW5kX25hbWUKLSNkZWZpbmUgaGlmX2NuZl9uYW1lKG1zZykgeyBISUZfQ05GX0lEXyMjbXNnLCAj bXNnIH0sCi0jZGVmaW5lIGhpZl9pbmRfbmFtZShtc2cpIHsgSElGX0lORF9JRF8jI21zZywgI21z ZyB9LAotI2RlZmluZSBoaWZfbXNnX2xpc3QgaGlmX21zZ19saXN0X2VudW0geyAtMSwgTlVMTCB9 Ci0KLSNkZWZpbmUgX2hpZl9taWJfbGlzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotCWhpZl9taWJfbmFtZShBUlBfSVBfQUREUkVTU0VTX1RBQkxFKSAgICAgICAgIFwKLQloaWZf bWliX25hbWUoQVJQX0tFRVBfQUxJVkVfUEVSSU9EKSAgICAgICAgICBcCi0JaGlmX21pYl9uYW1l KEJFQUNPTl9GSUxURVJfRU5BQkxFKSAgICAgICAgICAgXAotCWhpZl9taWJfbmFtZShCRUFDT05f RklMVEVSX1RBQkxFKSAgICAgICAgICAgIFwKLQloaWZfbWliX25hbWUoQkVBQ09OX1NUQVRTKSAg ICAgICAgICAgICAgICAgICBcCi0JaGlmX21pYl9uYW1lKEJFQUNPTl9XQUtFVVBfUEVSSU9EKSAg ICAgICAgICAgXAotCWhpZl9taWJfbmFtZShCTE9DS19BQ0tfUE9MSUNZKSAgICAgICAgICAgICAg IFwKLQloaWZfbWliX25hbWUoQ0NBX0NPTkZJRykgICAgICAgICAgICAgICAgICAgICBcCi0JaGlm X21pYl9uYW1lKENPTkZJR19EQVRBX0ZJTFRFUikgICAgICAgICAgICAgXAotCWhpZl9taWJfbmFt ZShDT1VOVEVSU19UQUJMRSkgICAgICAgICAgICAgICAgIFwKLQloaWZfbWliX25hbWUoQ1VSUkVO VF9UWF9QT1dFUl9MRVZFTCkgICAgICAgICBcCi0JaGlmX21pYl9uYW1lKERPVDExX01BQ19BRERS RVNTKSAgICAgICAgICAgICAgXAotCWhpZl9taWJfbmFtZShET1QxMV9NQVhfUkVDRUlWRV9MSUZF VElNRSkgICAgIFwKLQloaWZfbWliX25hbWUoRE9UMTFfTUFYX1RSQU5TTUlUX01TRFVfTElGRVRJ TUUpIFwKLQloaWZfbWliX25hbWUoRE9UMTFfUlRTX1RIUkVTSE9MRCkgICAgICAgICAgICBcCi0J aGlmX21pYl9uYW1lKERPVDExX1dFUF9ERUZBVUxUX0tFWV9JRCkgICAgICAgXAotCWhpZl9taWJf bmFtZShFVEhFUlRZUEVfREFUQUZSQU1FX0NPTkRJVElPTikgIFwKLQloaWZfbWliX25hbWUoRVhU RU5ERURfQ09VTlRFUlNfVEFCTEUpICAgICAgICBcCi0JaGlmX21pYl9uYW1lKEdMX0JMT0NLX0FD S19JTkZPKSAgICAgICAgICAgICAgXAotCWhpZl9taWJfbmFtZShHTF9PUEVSQVRJT05BTF9QT1dF Ul9NT0RFKSAgICAgIFwKLQloaWZfbWliX25hbWUoR0xfU0VUX01VTFRJX01TRykgICAgICAgICAg ICAgICBcCi0JaGlmX21pYl9uYW1lKEdSUF9TRVFfQ09VTlRFUikgICAgICAgICAgICAgICAgXAot CWhpZl9taWJfbmFtZShJTkFDVElWSVRZX1RJTUVSKSAgICAgICAgICAgICAgIFwKLQloaWZfbWli X25hbWUoSU5URVJGQUNFX1BST1RFQ1RJT04pICAgICAgICAgICBcCi0JaGlmX21pYl9uYW1lKElQ VjRfQUREUl9EQVRBRlJBTUVfQ09ORElUSU9OKSAgXAotCWhpZl9taWJfbmFtZShJUFY2X0FERFJf REFUQUZSQU1FX0NPTkRJVElPTikgIFwKLQloaWZfbWliX25hbWUoS0VFUF9BTElWRV9QRVJJT0Qp ICAgICAgICAgICAgICBcCi0JaGlmX21pYl9uYW1lKE1BQ19BRERSX0RBVEFGUkFNRV9DT05ESVRJ T04pICAgXAotCWhpZl9taWJfbmFtZShNQUdJQ19EQVRBRlJBTUVfQ09ORElUSU9OKSAgICAgIFwK LQloaWZfbWliX25hbWUoTUFYX1RYX1BPV0VSX0xFVkVMKSAgICAgICAgICAgICBcCi0JaGlmX21p Yl9uYW1lKE5PTl9FUlBfUFJPVEVDVElPTikgICAgICAgICAgICAgXAotCWhpZl9taWJfbmFtZShO U19JUF9BRERSRVNTRVNfVEFCTEUpICAgICAgICAgIFwKLQloaWZfbWliX25hbWUoT1ZFUlJJREVf SU5URVJOQUxfVFhfUkFURSkgICAgICBcCi0JaGlmX21pYl9uYW1lKFBPUlRfREFUQUZSQU1FX0NP TkRJVElPTikgICAgICAgXAotCWhpZl9taWJfbmFtZShQUk9URUNURURfTUdNVF9QT0xJQ1kpICAg ICAgICAgIFwKLQloaWZfbWliX25hbWUoUkNQSV9SU1NJX1RIUkVTSE9MRCkgICAgICAgICAgICBc Ci0JaGlmX21pYl9uYW1lKFJYX0ZJTFRFUikgICAgICAgICAgICAgICAgICAgICAgXAotCWhpZl9t aWJfbmFtZShTRVRfQVNTT0NJQVRJT05fTU9ERSkgICAgICAgICAgIFwKLQloaWZfbWliX25hbWUo U0VUX0RBVEFfRklMVEVSSU5HKSAgICAgICAgICAgICBcCi0JaGlmX21pYl9uYW1lKFNFVF9IVF9Q Uk9URUNUSU9OKSAgICAgICAgICAgICAgXAotCWhpZl9taWJfbmFtZShTRVRfVFhfUkFURV9SRVRS WV9QT0xJQ1kpICAgICAgIFwKLQloaWZfbWliX25hbWUoU0VUX1VBUFNEX0lORk9STUFUSU9OKSAg ICAgICAgICBcCi0JaGlmX21pYl9uYW1lKFNMT1RfVElNRSkgICAgICAgICAgICAgICAgICAgICAg XAotCWhpZl9taWJfbmFtZShTVEFUSVNUSUNTX1RBQkxFKSAgICAgICAgICAgICAgIFwKLQloaWZf bWliX25hbWUoVEVNUExBVEVfRlJBTUUpICAgICAgICAgICAgICAgICBcCi0JaGlmX21pYl9uYW1l KFRTRl9DT1VOVEVSKSAgICAgICAgICAgICAgICAgICAgXAotCWhpZl9taWJfbmFtZShVQ19NQ19C Q19EQVRBRlJBTUVfQ09ORElUSU9OKQotCi0jZGVmaW5lIGhpZl9taWJfbGlzdF9lbnVtIF9oaWZf bWliX2xpc3QKLQotI3VuZGVmIGhpZl9taWJfbmFtZQotI2RlZmluZSBoaWZfbWliX25hbWUobWli KSBUUkFDRV9ERUZJTkVfRU5VTShISUZfTUlCX0lEXyMjbWliKTsKLWhpZl9taWJfbGlzdF9lbnVt Ci0jdW5kZWYgaGlmX21pYl9uYW1lCi0jZGVmaW5lIGhpZl9taWJfbmFtZShtaWIpIHsgSElGX01J Ql9JRF8jI21pYiwgI21pYiB9LAotI2RlZmluZSBoaWZfbWliX2xpc3QgaGlmX21pYl9saXN0X2Vu dW0geyAtMSwgTlVMTCB9Ci0KLURFQ0xBUkVfRVZFTlRfQ0xBU1MoaGlmX2RhdGEsCi0JVFBfUFJP VE8oY29uc3Qgc3RydWN0IGhpZl9tc2cgKmhpZiwgaW50IHR4X2ZpbGxfbGV2ZWwsIGJvb2wgaXNf cmVjdiksCi0JVFBfQVJHUyhoaWYsIHR4X2ZpbGxfbGV2ZWwsIGlzX3JlY3YpLAotCVRQX1NUUlVD VF9fZW50cnkoCi0JCV9fZmllbGQoaW50LCB0eF9maWxsX2xldmVsKQotCQlfX2ZpZWxkKGludCwg bXNnX2lkKQotCQlfX2ZpZWxkKGNvbnN0IGNoYXIgKiwgbXNnX3R5cGUpCi0JCV9fZmllbGQoaW50 LCBtc2dfbGVuKQotCQlfX2ZpZWxkKGludCwgYnVmX2xlbikKLQkJX19maWVsZChpbnQsIGlmX2lk KQotCQlfX2ZpZWxkKGludCwgbWliKQotCQlfX2FycmF5KHU4LCBidWYsIDEyOCkKLQkpLAotCVRQ X2Zhc3RfYXNzaWduKAotCQlpbnQgaGVhZGVyX2xlbjsKLQotCQlfX2VudHJ5LT50eF9maWxsX2xl dmVsID0gdHhfZmlsbF9sZXZlbDsKLQkJX19lbnRyeS0+bXNnX2xlbiA9IGxlMTZfdG9fY3B1KGhp Zi0+bGVuKTsKLQkJX19lbnRyeS0+bXNnX2lkID0gaGlmLT5pZDsKLQkJX19lbnRyeS0+aWZfaWQg PSBoaWYtPmludGVyZmFjZTsKLQkJaWYgKGlzX3JlY3YpCi0JCQlfX2VudHJ5LT5tc2dfdHlwZSA9 IF9fZW50cnktPm1zZ19pZCAmIDB4ODAgPyAiSU5EIiA6ICJDTkYiOwotCQllbHNlCi0JCQlfX2Vu dHJ5LT5tc2dfdHlwZSA9ICJSRVEiOwotCQlpZiAoIWlzX3JlY3YgJiYKLQkJICAgIChfX2VudHJ5 LT5tc2dfaWQgPT0gSElGX1JFUV9JRF9SRUFEX01JQiB8fAotCQkgICAgIF9fZW50cnktPm1zZ19p ZCA9PSBISUZfUkVRX0lEX1dSSVRFX01JQikpIHsKLQkJCV9fZW50cnktPm1pYiA9IGxlMTZfdG9f Y3B1cCgoX19sZTE2ICopaGlmLT5ib2R5KTsKLQkJCWhlYWRlcl9sZW4gPSA0OwotCQl9IGVsc2Ug ewotCQkJX19lbnRyeS0+bWliID0gLTE7Ci0JCQloZWFkZXJfbGVuID0gMDsKLQkJfQotCQlfX2Vu dHJ5LT5idWZfbGVuID0gbWluX3QoaW50LCBfX2VudHJ5LT5tc2dfbGVuLAotCQkJCQkgc2l6ZW9m KF9fZW50cnktPmJ1ZikpCi0JCQkJICAgLSBzaXplb2Yoc3RydWN0IGhpZl9tc2cpIC0gaGVhZGVy X2xlbjsKLQkJbWVtY3B5KF9fZW50cnktPmJ1ZiwgaGlmLT5ib2R5ICsgaGVhZGVyX2xlbiwgX19l bnRyeS0+YnVmX2xlbik7Ci0JKSwKLQlUUF9wcmludGsoIiVkOiVkOiVzXyVzJXMlczogJXMlcyAo JWQgYnl0ZXMpIiwKLQkJX19lbnRyeS0+dHhfZmlsbF9sZXZlbCwKLQkJX19lbnRyeS0+aWZfaWQs Ci0JCV9fZW50cnktPm1zZ190eXBlLAotCQlfX3ByaW50X3N5bWJvbGljKF9fZW50cnktPm1zZ19p ZCwgaGlmX21zZ19saXN0KSwKLQkJX19lbnRyeS0+bWliICE9IC0xID8gIi8iIDogIiIsCi0JCV9f ZW50cnktPm1pYiAhPSAtMSA/IF9fcHJpbnRfc3ltYm9saWMoX19lbnRyeS0+bWliLCBoaWZfbWli X2xpc3QpIDogIiIsCi0JCV9fcHJpbnRfaGV4KF9fZW50cnktPmJ1ZiwgX19lbnRyeS0+YnVmX2xl biksCi0JCV9fZW50cnktPm1zZ19sZW4gPiBzaXplb2YoX19lbnRyeS0+YnVmKSA/ICIgLi4uIiA6 ICIiLAotCQlfX2VudHJ5LT5tc2dfbGVuCi0JKQotKTsKLURFRklORV9FVkVOVChoaWZfZGF0YSwg aGlmX3NlbmQsCi0JVFBfUFJPVE8oY29uc3Qgc3RydWN0IGhpZl9tc2cgKmhpZiwgaW50IHR4X2Zp bGxfbGV2ZWwsIGJvb2wgaXNfcmVjdiksCi0JVFBfQVJHUyhoaWYsIHR4X2ZpbGxfbGV2ZWwsIGlz X3JlY3YpKTsKLSNkZWZpbmUgX3RyYWNlX2hpZl9zZW5kKGhpZiwgdHhfZmlsbF9sZXZlbClcCi0J dHJhY2VfaGlmX3NlbmQoaGlmLCB0eF9maWxsX2xldmVsLCBmYWxzZSkKLURFRklORV9FVkVOVCho aWZfZGF0YSwgaGlmX3JlY3YsCi0JVFBfUFJPVE8oY29uc3Qgc3RydWN0IGhpZl9tc2cgKmhpZiwg aW50IHR4X2ZpbGxfbGV2ZWwsIGJvb2wgaXNfcmVjdiksCi0JVFBfQVJHUyhoaWYsIHR4X2ZpbGxf bGV2ZWwsIGlzX3JlY3YpKTsKLSNkZWZpbmUgX3RyYWNlX2hpZl9yZWN2KGhpZiwgdHhfZmlsbF9s ZXZlbClcCi0JdHJhY2VfaGlmX3JlY3YoaGlmLCB0eF9maWxsX2xldmVsLCB0cnVlKQotCi0jZGVm aW5lIHdmeF9yZWdfbGlzdF9lbnVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot CXdmeF9yZWdfbmFtZShXRlhfUkVHX0NPTkZJRywgICAgICAgIkNPTkZJRyIpICAgICAgXAotCXdm eF9yZWdfbmFtZShXRlhfUkVHX0NPTlRST0wsICAgICAgIkNPTlRST0wiKSAgICAgXAotCXdmeF9y ZWdfbmFtZShXRlhfUkVHX0lOX09VVF9RVUVVRSwgIlFVRVVFIikgICAgICAgXAotCXdmeF9yZWdf bmFtZShXRlhfUkVHX0FIQl9EUE9SVCwgICAgIkFIQiIpICAgICAgICAgXAotCXdmeF9yZWdfbmFt ZShXRlhfUkVHX0JBU0VfQUREUiwgICAgIkJBU0VfQUREUiIpICAgXAotCXdmeF9yZWdfbmFtZShX RlhfUkVHX1NSQU1fRFBPUlQsICAgIlNSQU0iKSAgICAgICAgXAotCXdmeF9yZWdfbmFtZShXRlhf UkVHX1NFVF9HRU5fUl9XLCAgIlNFVF9HRU5fUl9XIikgXAotCXdmeF9yZWdfbmFtZShXRlhfUkVH X0ZSQU1FX09VVCwgICAgIkZSQU1FX09VVCIpCi0KLSN1bmRlZiB3ZnhfcmVnX25hbWUKLSNkZWZp bmUgd2Z4X3JlZ19uYW1lKHN5bSwgbmFtZSkgVFJBQ0VfREVGSU5FX0VOVU0oc3ltKTsKLXdmeF9y ZWdfbGlzdF9lbnVtCi0jdW5kZWYgd2Z4X3JlZ19uYW1lCi0jZGVmaW5lIHdmeF9yZWdfbmFtZShz eW0sIG5hbWUpIHsgc3ltLCBuYW1lIH0sCi0jZGVmaW5lIHdmeF9yZWdfbGlzdCB3ZnhfcmVnX2xp c3RfZW51bSB7IC0xLCBOVUxMIH0KLQotREVDTEFSRV9FVkVOVF9DTEFTUyhpb19kYXRhLAotCVRQ X1BST1RPKGludCByZWcsIGludCBhZGRyLCBjb25zdCB2b2lkICppb19idWYsIHNpemVfdCBsZW4p LAotCVRQX0FSR1MocmVnLCBhZGRyLCBpb19idWYsIGxlbiksCi0JVFBfU1RSVUNUX19lbnRyeSgK LQkJX19maWVsZChpbnQsIHJlZykKLQkJX19maWVsZChpbnQsIGFkZHIpCi0JCV9fZmllbGQoaW50 LCBtc2dfbGVuKQotCQlfX2ZpZWxkKGludCwgYnVmX2xlbikKLQkJX19hcnJheSh1OCwgYnVmLCAz MikKLQkJX19hcnJheSh1OCwgYWRkcl9zdHIsIDEwKQotCSksCi0JVFBfZmFzdF9hc3NpZ24oCi0J CV9fZW50cnktPnJlZyA9IHJlZzsKLQkJX19lbnRyeS0+YWRkciA9IGFkZHI7Ci0JCV9fZW50cnkt Pm1zZ19sZW4gPSBsZW47Ci0JCV9fZW50cnktPmJ1Zl9sZW4gPSBtaW5fdChpbnQsIHNpemVvZihf X2VudHJ5LT5idWYpLAotCQkJCQkgX19lbnRyeS0+bXNnX2xlbik7Ci0JCW1lbWNweShfX2VudHJ5 LT5idWYsIGlvX2J1ZiwgX19lbnRyeS0+YnVmX2xlbik7Ci0JCWlmIChhZGRyID49IDApCi0JCQlz bnByaW50ZihfX2VudHJ5LT5hZGRyX3N0ciwgMTAsICIvJTA4eCIsIGFkZHIpOwotCQllbHNlCi0J CQlfX2VudHJ5LT5hZGRyX3N0clswXSA9IDA7Ci0JKSwKLQlUUF9wcmludGsoIiVzJXM6ICVzJXMg KCVkIGJ5dGVzKSIsCi0JCV9fcHJpbnRfc3ltYm9saWMoX19lbnRyeS0+cmVnLCB3ZnhfcmVnX2xp c3QpLAotCQlfX2VudHJ5LT5hZGRyX3N0ciwKLQkJX19wcmludF9oZXgoX19lbnRyeS0+YnVmLCBf X2VudHJ5LT5idWZfbGVuKSwKLQkJX19lbnRyeS0+bXNnX2xlbiA+IHNpemVvZihfX2VudHJ5LT5i dWYpID8gIiAuLi4iIDogIiIsCi0JCV9fZW50cnktPm1zZ19sZW4KLQkpCi0pOwotREVGSU5FX0VW RU5UKGlvX2RhdGEsIGlvX3dyaXRlLAotCVRQX1BST1RPKGludCByZWcsIGludCBhZGRyLCBjb25z dCB2b2lkICppb19idWYsIHNpemVfdCBsZW4pLAotCVRQX0FSR1MocmVnLCBhZGRyLCBpb19idWYs IGxlbikpOwotI2RlZmluZSBfdHJhY2VfaW9faW5kX3dyaXRlKHJlZywgYWRkciwgaW9fYnVmLCBs ZW4pXAotCXRyYWNlX2lvX3dyaXRlKHJlZywgYWRkciwgaW9fYnVmLCBsZW4pCi0jZGVmaW5lIF90 cmFjZV9pb193cml0ZShyZWcsIGlvX2J1ZiwgbGVuKSB0cmFjZV9pb193cml0ZShyZWcsIC0xLCBp b19idWYsIGxlbikKLURFRklORV9FVkVOVChpb19kYXRhLCBpb19yZWFkLAotCVRQX1BST1RPKGlu dCByZWcsIGludCBhZGRyLCBjb25zdCB2b2lkICppb19idWYsIHNpemVfdCBsZW4pLAotCVRQX0FS R1MocmVnLCBhZGRyLCBpb19idWYsIGxlbikpOwotI2RlZmluZSBfdHJhY2VfaW9faW5kX3JlYWQo cmVnLCBhZGRyLCBpb19idWYsIGxlbilcCi0JdHJhY2VfaW9fcmVhZChyZWcsIGFkZHIsIGlvX2J1 ZiwgbGVuKQotI2RlZmluZSBfdHJhY2VfaW9fcmVhZChyZWcsIGlvX2J1ZiwgbGVuKSB0cmFjZV9p b19yZWFkKHJlZywgLTEsIGlvX2J1ZiwgbGVuKQotCi1ERUNMQVJFX0VWRU5UX0NMQVNTKGlvX2Rh dGEzMiwKLQlUUF9QUk9UTyhpbnQgcmVnLCBpbnQgYWRkciwgdTMyIHZhbCksCi0JVFBfQVJHUyhy ZWcsIGFkZHIsIHZhbCksCi0JVFBfU1RSVUNUX19lbnRyeSgKLQkJX19maWVsZChpbnQsIHJlZykK LQkJX19maWVsZChpbnQsIGFkZHIpCi0JCV9fZmllbGQoaW50LCB2YWwpCi0JCV9fYXJyYXkodTgs IGFkZHJfc3RyLCAxMCkKLQkpLAotCVRQX2Zhc3RfYXNzaWduKAotCQlfX2VudHJ5LT5yZWcgPSBy ZWc7Ci0JCV9fZW50cnktPmFkZHIgPSBhZGRyOwotCQlfX2VudHJ5LT52YWwgPSB2YWw7Ci0JCWlm IChhZGRyID49IDApCi0JCQlzbnByaW50ZihfX2VudHJ5LT5hZGRyX3N0ciwgMTAsICIvJTA4eCIs IGFkZHIpOwotCQllbHNlCi0JCQlfX2VudHJ5LT5hZGRyX3N0clswXSA9IDA7Ci0JKSwKLQlUUF9w cmludGsoIiVzJXM6ICUwOHgiLAotCQlfX3ByaW50X3N5bWJvbGljKF9fZW50cnktPnJlZywgd2Z4 X3JlZ19saXN0KSwKLQkJX19lbnRyeS0+YWRkcl9zdHIsCi0JCV9fZW50cnktPnZhbAotCSkKLSk7 Ci1ERUZJTkVfRVZFTlQoaW9fZGF0YTMyLCBpb193cml0ZTMyLAotCVRQX1BST1RPKGludCByZWcs IGludCBhZGRyLCB1MzIgdmFsKSwKLQlUUF9BUkdTKHJlZywgYWRkciwgdmFsKSk7Ci0jZGVmaW5l IF90cmFjZV9pb19pbmRfd3JpdGUzMihyZWcsIGFkZHIsIHZhbCkgdHJhY2VfaW9fd3JpdGUzMihy ZWcsIGFkZHIsIHZhbCkKLSNkZWZpbmUgX3RyYWNlX2lvX3dyaXRlMzIocmVnLCB2YWwpIHRyYWNl X2lvX3dyaXRlMzIocmVnLCAtMSwgdmFsKQotREVGSU5FX0VWRU5UKGlvX2RhdGEzMiwgaW9fcmVh ZDMyLAotCVRQX1BST1RPKGludCByZWcsIGludCBhZGRyLCB1MzIgdmFsKSwKLQlUUF9BUkdTKHJl ZywgYWRkciwgdmFsKSk7Ci0jZGVmaW5lIF90cmFjZV9pb19pbmRfcmVhZDMyKHJlZywgYWRkciwg dmFsKSB0cmFjZV9pb19yZWFkMzIocmVnLCBhZGRyLCB2YWwpCi0jZGVmaW5lIF90cmFjZV9pb19y ZWFkMzIocmVnLCB2YWwpIHRyYWNlX2lvX3JlYWQzMihyZWcsIC0xLCB2YWwpCi0KLURFQ0xBUkVf RVZFTlRfQ0xBU1MocGlnZ3liYWNrLAotCVRQX1BST1RPKHUzMiB2YWwsIGJvb2wgaWdub3JlZCks Ci0JVFBfQVJHUyh2YWwsIGlnbm9yZWQpLAotCVRQX1NUUlVDVF9fZW50cnkoCi0JCV9fZmllbGQo aW50LCB2YWwpCi0JCV9fZmllbGQoYm9vbCwgaWdub3JlZCkKLQkpLAotCVRQX2Zhc3RfYXNzaWdu KAotCQlfX2VudHJ5LT52YWwgPSB2YWw7Ci0JCV9fZW50cnktPmlnbm9yZWQgPSBpZ25vcmVkOwot CSksCi0JVFBfcHJpbnRrKCJDT05UUk9MOiAlMDh4JXMiLAotCQlfX2VudHJ5LT52YWwsCi0JCV9f ZW50cnktPmlnbm9yZWQgPyAiIChpZ25vcmVkKSIgOiAiIgotCSkKLSk7Ci1ERUZJTkVfRVZFTlQo cGlnZ3liYWNrLCBwaWdneWJhY2ssCi0JVFBfUFJPVE8odTMyIHZhbCwgYm9vbCBpZ25vcmVkKSwK LQlUUF9BUkdTKHZhbCwgaWdub3JlZCkpOwotI2RlZmluZSBfdHJhY2VfcGlnZ3liYWNrKHZhbCwg aWdub3JlZCkgdHJhY2VfcGlnZ3liYWNrKHZhbCwgaWdub3JlZCkKLQotVFJBQ0VfRVZFTlQoYmhf c3RhdHMsCi0JVFBfUFJPVE8oaW50IGluZCwgaW50IHJlcSwgaW50IGNuZiwgaW50IGJ1c3ksIGJv b2wgcmVsZWFzZSksCi0JVFBfQVJHUyhpbmQsIHJlcSwgY25mLCBidXN5LCByZWxlYXNlKSwKLQlU UF9TVFJVQ1RfX2VudHJ5KAotCQlfX2ZpZWxkKGludCwgaW5kKQotCQlfX2ZpZWxkKGludCwgcmVx KQotCQlfX2ZpZWxkKGludCwgY25mKQotCQlfX2ZpZWxkKGludCwgYnVzeSkKLQkJX19maWVsZChi b29sLCByZWxlYXNlKQotCSksCi0JVFBfZmFzdF9hc3NpZ24oCi0JCV9fZW50cnktPmluZCA9IGlu ZDsKLQkJX19lbnRyeS0+cmVxID0gcmVxOwotCQlfX2VudHJ5LT5jbmYgPSBjbmY7Ci0JCV9fZW50 cnktPmJ1c3kgPSBidXN5OwotCQlfX2VudHJ5LT5yZWxlYXNlID0gcmVsZWFzZTsKLQkpLAotCVRQ X3ByaW50aygiSU5EL1JFUS9DTkY6JTNkLyUzZC8lM2QsIFJFUSBpbiBwcm9ncmVzczolM2QsIFdV UDogJXMiLAotCQlfX2VudHJ5LT5pbmQsCi0JCV9fZW50cnktPnJlcSwKLQkJX19lbnRyeS0+Y25m LAotCQlfX2VudHJ5LT5idXN5LAotCQlfX2VudHJ5LT5yZWxlYXNlID8gInJlbGVhc2UiIDogImtl ZXAiCi0JKQotKTsKLSNkZWZpbmUgX3RyYWNlX2JoX3N0YXRzKGluZCwgcmVxLCBjbmYsIGJ1c3ks IHJlbGVhc2UpXAotCXRyYWNlX2JoX3N0YXRzKGluZCwgcmVxLCBjbmYsIGJ1c3ksIHJlbGVhc2Up Ci0KLVRSQUNFX0VWRU5UKHR4X3N0YXRzLAotCVRQX1BST1RPKGNvbnN0IHN0cnVjdCBoaWZfY25m X3R4ICp0eF9jbmYsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCi0JCSBpbnQgZGVsYXkpLAot CVRQX0FSR1ModHhfY25mLCBza2IsIGRlbGF5KSwKLQlUUF9TVFJVQ1RfX2VudHJ5KAotCQlfX2Zp ZWxkKGludCwgcGt0X2lkKQotCQlfX2ZpZWxkKGludCwgZGVsYXlfbWVkaWEpCi0JCV9fZmllbGQo aW50LCBkZWxheV9xdWV1ZSkKLQkJX19maWVsZChpbnQsIGRlbGF5X2Z3KQotCQlfX2ZpZWxkKGlu dCwgYWNrX2ZhaWx1cmVzKQotCQlfX2ZpZWxkKGludCwgZmxhZ3MpCi0JCV9fYXJyYXkoaW50LCBy YXRlLCA0KQotCQlfX2FycmF5KGludCwgdHhfY291bnQsIDQpCi0JKSwKLQlUUF9mYXN0X2Fzc2ln bigKLQkJLyogS2VlcCBzeW5jIHdpdGggd2Z4X3JhdGVzIGRlZmluaXRpb24gaW4gbWFpbi5jICov Ci0JCXN0YXRpYyBjb25zdCBpbnQgaHdfcmF0ZVtdID0geyAwLCAxLCAyLCAzLCA2LCA3LCA4LCA5 LAotCQkJCQkgICAgICAgMTAsIDExLCAxMiwgMTMgfTsKLQkJY29uc3Qgc3RydWN0IGllZWU4MDIx MV90eF9pbmZvICp0eF9pbmZvID0KLQkJCShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8g Kilza2ItPmNiOwotCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGVzID0gdHhf aW5mby0+ZHJpdmVyX3JhdGVzOwotCQlpbnQgaTsKLQotCQlfX2VudHJ5LT5wa3RfaWQgPSB0eF9j bmYtPnBhY2tldF9pZDsKLQkJX19lbnRyeS0+ZGVsYXlfbWVkaWEgPSBsZTMyX3RvX2NwdSh0eF9j bmYtPm1lZGlhX2RlbGF5KTsKLQkJX19lbnRyeS0+ZGVsYXlfcXVldWUgPSBsZTMyX3RvX2NwdSh0 eF9jbmYtPnR4X3F1ZXVlX2RlbGF5KTsKLQkJX19lbnRyeS0+ZGVsYXlfZncgPSBkZWxheTsKLQkJ X19lbnRyeS0+YWNrX2ZhaWx1cmVzID0gdHhfY25mLT5hY2tfZmFpbHVyZXM7Ci0JCWlmICghdHhf Y25mLT5zdGF0dXMgfHwgX19lbnRyeS0+YWNrX2ZhaWx1cmVzKQotCQkJX19lbnRyeS0+YWNrX2Zh aWx1cmVzICs9IDE7Ci0KLQkJZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9OVU1fQUNTOyBpKysp IHsKLQkJCWlmIChyYXRlc1swXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19NQ1MpCi0JCQkJX19l bnRyeS0+cmF0ZVtpXSA9IHJhdGVzW2ldLmlkeDsKLQkJCWVsc2UKLQkJCQlfX2VudHJ5LT5yYXRl W2ldID0gaHdfcmF0ZVtyYXRlc1tpXS5pZHhdOwotCQkJX19lbnRyeS0+dHhfY291bnRbaV0gPSBy YXRlc1tpXS5jb3VudDsKLQkJfQotCQlfX2VudHJ5LT5mbGFncyA9IDA7Ci0JCWlmIChyYXRlc1sw XS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19NQ1MpCi0JCQlfX2VudHJ5LT5mbGFncyB8PSAweDAx OwotCQlpZiAocmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfU0hPUlRfR0kpCi0JCQlf X2VudHJ5LT5mbGFncyB8PSAweDAyOwotCQlpZiAocmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFf VFhfUkNfR1JFRU5fRklFTEQpCi0JCQlfX2VudHJ5LT5mbGFncyB8PSAweDA0OwotCQlpZiAocmF0 ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFMpCi0JCQlfX2VudHJ5LT5m bGFncyB8PSAweDA4OwotCQlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1NF TkRfQUZURVJfRFRJTSkKLQkJCV9fZW50cnktPmZsYWdzIHw9IDB4MTA7Ci0JCWlmICh0eF9jbmYt PnN0YXR1cykKLQkJCV9fZW50cnktPmZsYWdzIHw9IDB4MjA7Ci0JCWlmICh0eF9jbmYtPnN0YXR1 cyA9PSBISUZfU1RBVFVTX1RYX0ZBSUxfUkVRVUVVRSkKLQkJCV9fZW50cnktPmZsYWdzIHw9IDB4 NDA7Ci0JKSwKLQlUUF9wcmludGsoInBhY2tldCBJRDogJTA4eCwgcmF0ZSBwb2xpY3k6ICVzICVk fCVkICVkfCVkICVkfCVkICVkfCVkIC0+ICVkIGF0dGVtcHQsIERlbGF5cyBtZWRpYS9xdWV1ZS90 b3RhbDogJTRkdXMvJTRkdXMvJTRkdXMiLAotCQlfX2VudHJ5LT5wa3RfaWQsCi0JCV9fcHJpbnRf ZmxhZ3MoX19lbnRyeS0+ZmxhZ3MsIE5VTEwsCi0JCQl7IDB4MDEsICJNIiB9LCB7IDB4MDIsICJT IiB9LCB7IDB4MDQsICJHIiB9LAotCQkJeyAweDA4LCAiUiIgfSwgeyAweDEwLCAiRCIgfSwgeyAw eDIwLCAiRiIgfSwKLQkJCXsgMHg0MCwgIlEiIH0pLAotCQlfX2VudHJ5LT5yYXRlWzBdLAotCQlf X2VudHJ5LT50eF9jb3VudFswXSwKLQkJX19lbnRyeS0+cmF0ZVsxXSwKLQkJX19lbnRyeS0+dHhf Y291bnRbMV0sCi0JCV9fZW50cnktPnJhdGVbMl0sCi0JCV9fZW50cnktPnR4X2NvdW50WzJdLAot CQlfX2VudHJ5LT5yYXRlWzNdLAotCQlfX2VudHJ5LT50eF9jb3VudFszXSwKLQkJX19lbnRyeS0+ YWNrX2ZhaWx1cmVzLAotCQlfX2VudHJ5LT5kZWxheV9tZWRpYSwKLQkJX19lbnRyeS0+ZGVsYXlf cXVldWUsCi0JCV9fZW50cnktPmRlbGF5X2Z3Ci0JKQotKTsKLSNkZWZpbmUgX3RyYWNlX3R4X3N0 YXRzKHR4X2NuZiwgc2tiLCBkZWxheSkgdHJhY2VfdHhfc3RhdHModHhfY25mLCBza2IsIGRlbGF5 KQotCi1UUkFDRV9FVkVOVChxdWV1ZXNfc3RhdHMsCi0JVFBfUFJPVE8oc3RydWN0IHdmeF9kZXYg KndkZXYsIGNvbnN0IHN0cnVjdCB3ZnhfcXVldWUgKmVsZWN0ZWRfcXVldWUpLAotCVRQX0FSR1Mo d2RldiwgZWxlY3RlZF9xdWV1ZSksCi0JVFBfU1RSVUNUX19lbnRyeSgKLQkJX19maWVsZChpbnQs IHZpZl9pZCkKLQkJX19maWVsZChpbnQsIHF1ZXVlX2lkKQotCQlfX2FycmF5KGludCwgaHcsIElF RUU4MDIxMV9OVU1fQUNTICogMikKLQkJX19hcnJheShpbnQsIGRydiwgSUVFRTgwMjExX05VTV9B Q1MgKiAyKQotCQlfX2FycmF5KGludCwgY2FiLCBJRUVFODAyMTFfTlVNX0FDUyAqIDIpCi0JKSwK LQlUUF9mYXN0X2Fzc2lnbigKLQkJY29uc3Qgc3RydWN0IHdmeF9xdWV1ZSAqcXVldWU7Ci0JCXN0 cnVjdCB3ZnhfdmlmICp3dmlmOwotCQlpbnQgaSwgajsKLQotCQlmb3IgKGogPSAwOyBqIDwgSUVF RTgwMjExX05VTV9BQ1MgKiAyOyBqKyspIHsKLQkJCV9fZW50cnktPmh3W2pdID0gLTE7Ci0JCQlf X2VudHJ5LT5kcnZbal0gPSAtMTsKLQkJCV9fZW50cnktPmNhYltqXSA9IC0xOwotCQl9Ci0JCV9f ZW50cnktPnZpZl9pZCA9IC0xOwotCQlfX2VudHJ5LT5xdWV1ZV9pZCA9IC0xOwotCQl3dmlmID0g TlVMTDsKLQkJd2hpbGUgKCh3dmlmID0gd3ZpZl9pdGVyYXRlKHdkZXYsIHd2aWYpKSAhPSBOVUxM KSB7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX05VTV9BQ1M7IGkrKykgewotCQkJCWog PSB3dmlmLT5pZCAqIElFRUU4MDIxMV9OVU1fQUNTICsgaTsKLQkJCQlXQVJOX09OKGogPj0gSUVF RTgwMjExX05VTV9BQ1MgKiAyKTsKLQkJCQlxdWV1ZSA9ICZ3dmlmLT50eF9xdWV1ZVtpXTsKLQkJ CQlfX2VudHJ5LT5od1tqXSA9IGF0b21pY19yZWFkKCZxdWV1ZS0+cGVuZGluZ19mcmFtZXMpOwot CQkJCV9fZW50cnktPmRydltqXSA9IHNrYl9xdWV1ZV9sZW4oJnF1ZXVlLT5ub3JtYWwpOwotCQkJ CV9fZW50cnktPmNhYltqXSA9IHNrYl9xdWV1ZV9sZW4oJnF1ZXVlLT5jYWIpOwotCQkJCWlmIChx dWV1ZSA9PSBlbGVjdGVkX3F1ZXVlKSB7Ci0JCQkJCV9fZW50cnktPnZpZl9pZCA9IHd2aWYtPmlk OwotCQkJCQlfX2VudHJ5LT5xdWV1ZV9pZCA9IGk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JKSwKLQlU UF9wcmludGsoImdvdCBza2IgZnJvbSAlZC8lZCwgcGVuZC4gaHcvbm9ybS9jYWI6IFsgJWQvJWQv JWQgJWQvJWQvJWQgJWQvJWQvJWQgJWQvJWQvJWQgXSBbICVkLyVkLyVkICVkLyVkLyVkICVkLyVk LyVkICVkLyVkLyVkIF0iLAotCQlfX2VudHJ5LT52aWZfaWQsIF9fZW50cnktPnF1ZXVlX2lkLAot CQlfX2VudHJ5LT5od1swXSwgX19lbnRyeS0+ZHJ2WzBdLCBfX2VudHJ5LT5jYWJbMF0sCi0JCV9f ZW50cnktPmh3WzFdLCBfX2VudHJ5LT5kcnZbMV0sIF9fZW50cnktPmNhYlsxXSwKLQkJX19lbnRy eS0+aHdbMl0sIF9fZW50cnktPmRydlsyXSwgX19lbnRyeS0+Y2FiWzJdLAotCQlfX2VudHJ5LT5o d1szXSwgX19lbnRyeS0+ZHJ2WzNdLCBfX2VudHJ5LT5jYWJbM10sCi0JCV9fZW50cnktPmh3WzRd LCBfX2VudHJ5LT5kcnZbNF0sIF9fZW50cnktPmNhYls0XSwKLQkJX19lbnRyeS0+aHdbNV0sIF9f ZW50cnktPmRydls1XSwgX19lbnRyeS0+Y2FiWzVdLAotCQlfX2VudHJ5LT5od1s2XSwgX19lbnRy eS0+ZHJ2WzZdLCBfX2VudHJ5LT5jYWJbNl0sCi0JCV9fZW50cnktPmh3WzddLCBfX2VudHJ5LT5k cnZbN10sIF9fZW50cnktPmNhYls3XQotCSkKLSk7Ci0KLSNlbmRpZgotCi0vKiBUaGlzIHBhcnQg bXVzdCBiZSBvdXRzaWRlIHByb3RlY3Rpb24gKi8KLSN1bmRlZiBUUkFDRV9JTkNMVURFX1BBVEgK LSNkZWZpbmUgVFJBQ0VfSU5DTFVERV9QQVRIIC4KLSN1bmRlZiBUUkFDRV9JTkNMVURFX0ZJTEUK LSNkZWZpbmUgVFJBQ0VfSU5DTFVERV9GSUxFIHRyYWNlcwotCi0jaW5jbHVkZSA8dHJhY2UvZGVm aW5lX3RyYWNlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L3dmeC5oIGIvZHJp dmVycy9zdGFnaW5nL3dmeC93ZnguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhk ZjU5YWQxNjM5Li4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC93ZnguaAor KysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMC1vbmx5ICovCi0vKgotICogQ29tbW9uIHByaXZhdGUgZGF0YS4KLSAqCi0gKiBD b3B5cmlnaHQgKGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSAqIENv cHlyaWdodCAoYykgMjAxMCwgU1QtRXJpY3Nzb24KLSAqIENvcHlyaWdodCAoYykgMjAwNiwgTWlj aGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+Ci0gKiBDb3B5cmlnaHQgMjAwNC0yMDA2 IEplYW4tQmFwdGlzdGUgTm90ZSA8amJub3RlQGdtYWlsLmNvbT4sIGV0IGFsLgotICovCi0jaWZu ZGVmIFdGWF9ICi0jZGVmaW5lIFdGWF9ICi0KLSNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+ Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4K LSNpbmNsdWRlIDxsaW51eC9ub3NwZWMuaD4KLSNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KLQot I2luY2x1ZGUgImJoLmgiCi0jaW5jbHVkZSAiZGF0YV90eC5oIgotI2luY2x1ZGUgIm1haW4uaCIK LSNpbmNsdWRlICJxdWV1ZS5oIgotI2luY2x1ZGUgImhpZl90eC5oIgotCi0jZGVmaW5lIFVTRUNf UEVSX1RYT1AgMzIgLyogc2VlIHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICovCi0j ZGVmaW5lIFVTRUNfUEVSX1RVIDEwMjQKLQotc3RydWN0IGh3YnVzX29wczsKLQotc3RydWN0IHdm eF9kZXYgewotCXN0cnVjdCB3ZnhfcGxhdGZvcm1fZGF0YSBwZGF0YTsKLQlzdHJ1Y3QgZGV2aWNl CQkqZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfaHcJKmh3OwotCXN0cnVjdCBpZWVlODAyMTFfdmlm CSp2aWZbMl07Ci0Jc3RydWN0IG1hY19hZGRyZXNzCWFkZHJlc3Nlc1syXTsKLQljb25zdCBzdHJ1 Y3QgaHdidXNfb3BzCSpod2J1c19vcHM7Ci0Jdm9pZAkJCSpod2J1c19wcml2OwotCi0JdTgJCQlr ZXlzZXQ7Ci0Jc3RydWN0IGNvbXBsZXRpb24JZmlybXdhcmVfcmVhZHk7Ci0Jc3RydWN0IGhpZl9p bmRfc3RhcnR1cAlod19jYXBzOwotCXN0cnVjdCB3ZnhfaGlmCQloaWY7Ci0Jc3RydWN0IGRlbGF5 ZWRfd29yawljb29saW5nX3RpbWVvdXRfd29yazsKLQlib29sCQkJcG9sbF9pcnE7Ci0JYm9vbAkJ CWNoaXBfZnJvemVuOwotCXN0cnVjdCBtdXRleAkJY29uZl9tdXRleDsKLQotCXN0cnVjdCB3Znhf aGlmX2NtZAloaWZfY21kOwotCXN0cnVjdCBza19idWZmX2hlYWQJdHhfcGVuZGluZzsKLQl3YWl0 X3F1ZXVlX2hlYWRfdAl0eF9kZXF1ZXVlOwotCWF0b21pY190CQl0eF9sb2NrOwotCi0JYXRvbWlj X3QJCXBhY2tldF9pZDsKLQl1MzIJCQlrZXlfbWFwOwotCi0Jc3RydWN0IGhpZl9yeF9zdGF0cwly eF9zdGF0czsKLQlzdHJ1Y3QgbXV0ZXgJCXJ4X3N0YXRzX2xvY2s7Ci0Jc3RydWN0IGhpZl90eF9w b3dlcl9sb29wX2luZm8gdHhfcG93ZXJfbG9vcF9pbmZvOwotCXN0cnVjdCBtdXRleAkJdHhfcG93 ZXJfbG9vcF9pbmZvX2xvY2s7Ci0JaW50CQkJZm9yY2VfcHNfdGltZW91dDsKLX07Ci0KLXN0cnVj dCB3ZnhfdmlmIHsKLQlzdHJ1Y3Qgd2Z4X2RldgkJKndkZXY7Ci0Jc3RydWN0IGllZWU4MDIxMV92 aWYJKnZpZjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7Ci0JaW50CQkJaWQ7 Ci0KLQl1MzIJCQlsaW5rX2lkX21hcDsKLQotCWJvb2wJCQlhZnRlcl9kdGltX3R4X2FsbG93ZWQ7 Ci0JYm9vbAkJCWpvaW5faW5fcHJvZ3Jlc3M7Ci0KLQlzdHJ1Y3QgZGVsYXllZF93b3JrCWJlYWNv bl9sb3NzX3dvcms7Ci0KLQlzdHJ1Y3Qgd2Z4X3F1ZXVlCXR4X3F1ZXVlWzRdOwotCXN0cnVjdCB0 eF9wb2xpY3lfY2FjaGUJdHhfcG9saWN5X2NhY2hlOwotCXN0cnVjdCB3b3JrX3N0cnVjdAl0eF9w b2xpY3lfdXBsb2FkX3dvcms7Ci0KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJdXBkYXRlX3RpbV93b3Jr OwotCi0JdW5zaWduZWQgbG9uZwkJdWFwc2RfbWFzazsKLQotCS8qIGF2b2lkIHNvbWUgb3BlcmF0 aW9ucyBpbiBwYXJhbGxlbCB3aXRoIHNjYW4gKi8KLQlzdHJ1Y3QgbXV0ZXgJCXNjYW5fbG9jazsK LQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJc2Nhbl93b3JrOwotCXN0cnVjdCBjb21wbGV0aW9uCXNjYW5f Y29tcGxldGU7Ci0JaW50CQkJc2Nhbl9uYl9jaGFuX2RvbmU7Ci0JYm9vbAkJCXNjYW5fYWJvcnQ7 Ci0Jc3RydWN0IGllZWU4MDIxMV9zY2FuX3JlcXVlc3QgKnNjYW5fcmVxOwotCi0Jc3RydWN0IGNv bXBsZXRpb24Jc2V0X3BtX21vZGVfY29tcGxldGU7Ci19OwotCi1zdGF0aWMgaW5saW5lIHN0cnVj dCB3ZnhfdmlmICp3ZGV2X3RvX3d2aWYoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCB2aWZfaWQp Ci17Ci0JaWYgKHZpZl9pZCA+PSBBUlJBWV9TSVpFKHdkZXYtPnZpZikpIHsKLQkJZGV2X2RiZyh3 ZGV2LT5kZXYsICJyZXF1ZXN0aW5nIG5vbi1leGlzdGVudCB2aWY6ICVkXG4iLCB2aWZfaWQpOwot CQlyZXR1cm4gTlVMTDsKLQl9Ci0JdmlmX2lkID0gYXJyYXlfaW5kZXhfbm9zcGVjKHZpZl9pZCwg QVJSQVlfU0laRSh3ZGV2LT52aWYpKTsKLQlpZiAoIXdkZXYtPnZpZlt2aWZfaWRdKQotCQlyZXR1 cm4gTlVMTDsKLQlyZXR1cm4gKHN0cnVjdCB3ZnhfdmlmICopd2Rldi0+dmlmW3ZpZl9pZF0tPmRy dl9wcml2OwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB3ZnhfdmlmICp3dmlmX2l0ZXJhdGUo c3RydWN0IHdmeF9kZXYgKndkZXYsCi0JCQkJCSAgIHN0cnVjdCB3ZnhfdmlmICpjdXIpCi17Ci0J aW50IGk7Ci0JaW50IG1hcmsgPSAwOwotCXN0cnVjdCB3ZnhfdmlmICp0bXA7Ci0KLQlpZiAoIWN1 cikKLQkJbWFyayA9IDE7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod2Rldi0+dmlmKTsg aSsrKSB7Ci0JCXRtcCA9IHdkZXZfdG9fd3ZpZih3ZGV2LCBpKTsKLQkJaWYgKG1hcmsgJiYgdG1w KQotCQkJcmV0dXJuIHRtcDsKLQkJaWYgKHRtcCA9PSBjdXIpCi0JCQltYXJrID0gMTsKLQl9Ci0J cmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHd2aWZfY291bnQoc3RydWN0IHdm eF9kZXYgKndkZXYpCi17Ci0JaW50IGk7Ci0JaW50IHJldCA9IDA7Ci0Jc3RydWN0IHdmeF92aWYg Knd2aWY7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3ZGV2LT52aWYpOyBpKyspIHsK LQkJd3ZpZiA9IHdkZXZfdG9fd3ZpZih3ZGV2LCBpKTsKLQkJaWYgKHd2aWYpCi0JCQlyZXQrKzsK LQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG1lbXJldmVyc2UodTgg KnNyYywgdTggbGVuZ3RoKQotewotCXU4ICpsbyA9IHNyYzsKLQl1OCAqaGkgPSBzcmMgKyBsZW5n dGggLSAxOwotCXU4IHN3YXA7Ci0KLQl3aGlsZSAobG8gPCBoaSkgewotCQlzd2FwID0gKmxvOwot CQkqbG8rKyA9ICpoaTsKLQkJKmhpLS0gPSBzd2FwOwotCX0KLX0KLQotc3RhdGljIGlubGluZSBp bnQgbWVtemNtcCh2b2lkICpzcmMsIHVuc2lnbmVkIGludCBzaXplKQotewotCXU4ICpidWYgPSBz cmM7Ci0KLQlpZiAoIXNpemUpCi0JCXJldHVybiAwOwotCWlmICgqYnVmKQotCQlyZXR1cm4gMTsK LQlyZXR1cm4gbWVtY21wKGJ1ZiwgYnVmICsgMSwgc2l6ZSAtIDEpOwotfQotCi0jZW5kaWYKLS0g CjIuMzMuMAoK