From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 65159C433F5 for ; Tue, 5 Oct 2021 13:57:54 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4091B610EA for ; Tue, 5 Oct 2021 13:57:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235799AbhJEN7k (ORCPT ); Tue, 5 Oct 2021 09:59:40 -0400 Received: from mail-bn8nam11on2084.outbound.protection.outlook.com ([40.107.236.84]:36801 "EHLO NAM11-BN8-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S235930AbhJEN5j (ORCPT ); Tue, 5 Oct 2021 09:57:39 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FvIOatKrCwuiXvP0/39GK7bP4DlsWqsVsFctKk/YlDwi3yYzAdtUMnziwAwssuEQN2ggtgC9iGa1F5NpB9aX37zUrcaqQ0brlk3H50xi2Vhzb9lzh48fVW+gwcVziKQP/aJJ4HQT6Ze5zok6fHF1UprXnXA4rHrh4x3ImxWnKm4aDcdHzfO/nUmHuf2CJpIeKMSPnNJO1l8S3V4Dz3qy8rOCbGevy7olOuQ/PZbnbyR+biHqDth0r87pFg9WVX+DsvcxmDoNesYvCSpn+tRrAS9r7MJTbVThXTQZ62lBSssmPpHjqfbzL83KXdpOgrAH503JSt7pbCjHkyWFqBdGfw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=XTADQJIrMICH7yeeKNpCnN1CG5ugfxcroVF9fuYI3FI=; b=dPXkypteKROh3l1S0KzHhQl2UaQ3RHZ6iOdVgEFEAwW5kPFLUe7r4CmT+mM3KN7nt1xH3/SYBMjK6wC2gP6SlsC0LAk/x5NiBt6jjf5sIJHoDYW4+loczqMz9Xec1bZM249ya/T5+hlCCIcnIOICsrwDmmQwyTO0TdtYd6tpGwvz/uOiCW7C0rYduR+72mtpxYfEzMm0ZGq61OyhENk8OAQP+dbLD08xkSYNv7qSFyTEa4xjNzqJeh3qD7HbKv3JgfGDnYwUBkNFYOZdAnA/eEtbqd7yNXeaJPY6El5UnXLRuIfW2Z0H2PVK7En+6xtxzTub5CXMmHtCDdS6nHK9vg== 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=XTADQJIrMICH7yeeKNpCnN1CG5ugfxcroVF9fuYI3FI=; b=T4Lp10AAp+Cq0yCTAq4yml7YN42gvE+2+mQG6K32BkszqQoT9QfKNayO7orKns5CZxRJLtcJim6a5J7KpPCr11OvE5R19Monw9OEG+Yq2NERU2L0wGsiBSkfRcnrE1zNlDoR6L5iYftCW3XvkOX/Juhy8wRaXJebR2hxJ9tTCeE= 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 PH0PR11MB5657.namprd11.prod.outlook.com (2603:10b6:510:ee::19) by PH0PR11MB5644.namprd11.prod.outlook.com (2603:10b6:510:ef::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4566.14; Tue, 5 Oct 2021 13:54:58 +0000 Received: from PH0PR11MB5657.namprd11.prod.outlook.com ([fe80::31cb:3b13:b0e8:d8f4]) by PH0PR11MB5657.namprd11.prod.outlook.com ([fe80::31cb:3b13:b0e8:d8f4%9]) with mapi id 15.20.4566.022; Tue, 5 Oct 2021 13:54:58 +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 v8 13/24] wfx: add hif_tx*.c/hif_tx*.h Date: Tue, 5 Oct 2021 15:53:49 +0200 Message-Id: <20211005135400.788058-14-Jerome.Pouiller@silabs.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20211005135400.788058-1-Jerome.Pouiller@silabs.com> References: <20211005135400.788058-1-Jerome.Pouiller@silabs.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 X-ClientProxiedBy: PR3P189CA0084.EURP189.PROD.OUTLOOK.COM (2603:10a6:102:b4::29) To PH0PR11MB5657.namprd11.prod.outlook.com (2603:10b6:510:ee::19) MIME-Version: 1.0 Received: from pc-42.silabs.com (37.71.187.125) by PR3P189CA0084.EURP189.PROD.OUTLOOK.COM (2603:10a6:102:b4::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4566.14 via Frontend Transport; Tue, 5 Oct 2021 13:54:55 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 0b67970e-21b2-4bfe-9c4f-08d98807b7dc X-MS-TrafficTypeDiagnostic: PH0PR11MB5644: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:21; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: X+d6Lx+4MKhsxfPVUZcKWI3LpA89CJKMEK6FDaHMK+Ner/lx440yi18bhjj2c49wS2JRFulTBIkHmhYR+jEeWetQiY9xjOYzEB/+9vVNOvisODXEeXCLKoqdNMohABRiaIOwMKdEOTCn76whlSSm6n4XrE+LCN9I1UbxHqF1QHJ10S1AdwxO4NefCKYCZC1QiMFnAtM4mcOeCAJjC82qGSpL51/g3wNXFRAMiPChU6f+vU8av7SeK2S71WWR6J/wjYKMONjst6c61ZBzbAItj3DcgM4RYnRQYCfbKzDjEApfzN/pcAsgpih3KXskOZI2jdkIvU/HLZyLibD//4jNu9sVCD43Fm9ldJrJzkvLysHk7hP3ki3ZOFCP7PqZlIcK6wMgAvN0UCa0xlZGZnJaGpN4JSXd72ZzovKaHlSt3N/0S+Ebp3XCFfZCh2SFRW78wgBLWIdTU7RvZXu96aU810gwK6OGT46cMXv9g7rRTRwHL6obwzWGdIVzVeTWoWvhmJbw72lIWw+TN6qZpXorXWIxk4pgjFBGEixR6yW9rBxm8AWgCzjueHXtHlP+vXqd95u647i7UNV7leKXtv6bYas+EqnqfshRX8wOPOSFav1714iOgyJFnAX4EfX0gkDTI+zc559g/JmGOh5+whdSVMDFK/DnPQ4ptlPRxh/SIHTQ+k/aRkXQpXHIjeVKV3yeya77/6Aln6I7V41nAft4Gw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH0PR11MB5657.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(66946007)(66556008)(8936002)(6916009)(83380400001)(956004)(508600001)(2616005)(66476007)(26005)(186003)(7416002)(2906002)(36756003)(4326008)(30864003)(8676002)(107886003)(66574015)(7696005)(52116002)(38100700002)(316002)(1076003)(5660300002)(86362001)(6666004)(54906003)(38350700002)(6486002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?S1FKN004R0YxaEpONVJUOHR2Ylg1UmJRQS84dVhtQ1lpWFV2VEJweFVaMWtr?= =?utf-8?B?NG9xVGpZSzhhNDJIcDlzKzkwS0VpaVREa28rY3hEK3pxSm13MU5hbmZqSGkw?= =?utf-8?B?L3BHeWtlcUNqbGZDNzVFSi93aW9ZblVQTytBM0Uwck9zMmlDQTJhcGdyZlBW?= =?utf-8?B?U2pJNmxsNE5wTmozbHhnOGxHR0puZzFWTXBYMStBRzJZU0JFTWVoMG5lWUt4?= =?utf-8?B?SkErbkF6MHNmdHdvRFhSUTlZNXpqbnVPV25UMUFlbU94QzMvRFBmN3hqaDg4?= =?utf-8?B?bTFvNWk0SVJYUVhXV3pQSkhlVUhFK2J2WkQ4bFFpbmltaXczdjdLRThuV2dn?= =?utf-8?B?SlAxTHcxZFNlQ0ttM093dXpYVjJlK2RLU21TMk0rZkZabEt6K1l5ank4N2tV?= =?utf-8?B?WlNVdCs5RlYxSUN1aUJJVVcrTDl5UW82S0k0RW5pemp6UlN0Y2UrZ0RFWEV4?= =?utf-8?B?TTFmdHZPTFFYNEZXQmJ6bnhjVmNxaHhKTDFPdFExWUNFTVFGd1c1OHR5WEJq?= =?utf-8?B?dnF3aFRJTkFaMlhOSm50cndMeVUyQjY3RVhZRUxaTjJWdHlMTnUyQk9VMGRu?= =?utf-8?B?VGZTak1BSHVyVElxM3ZyK0VEeVZaSWhtelFKQmU0ay9Sd1pnS1Y3cHpvN0Rx?= =?utf-8?B?OS9MRVcxNkRxMExIRXVGbkI3RkJ0NXMvV2hzMXdtZ1RUNjJ2QUN3NTBGQS9o?= =?utf-8?B?ZWJjazZrTjF4Q1lKVWhUU1pCREJWL1Evb2t6eC9kSHBxL0Ixa2VReWdxYWR3?= =?utf-8?B?cFRuVGZZaHBiSUVONWVvOEZEOVVjMjlzYTF5dUxueGo3N1dENS9CY3hxVkp6?= =?utf-8?B?QUx4bzFpUDc0dnpLQWFXSkVUNnZ4MXNSbXVtVTFmMW5ReGRHcU9MQ0c2eW5q?= =?utf-8?B?TFY2Y2ZYcmtpRWN6TE9CWUF6MXRyZDlsb2N5SDNld3Z4SDY1dlRUTG03dkx1?= =?utf-8?B?Mi9tODIrbEVCR1Y1TUdUa2tJYlFUUXNZSkhnL2xoRlo4MmtPN2tBQlpaUlpV?= =?utf-8?B?NjRLQ29ZWVpoNmdDblkwNklEdzR6cUxyZEo5TFBRcStwTi9Sa2ZUbkdaT3Fi?= =?utf-8?B?RFFqdzhsNktoakpqTnl5MjlQRU1ZeHNPYkMycjU4Nkt0dmVmZE90d1l0eE9t?= =?utf-8?B?OFJ0c3hFR1p1ZDNoaFF6a2U1dStGRklFaUlwNVp6QnZGQjJvZHhwcGdmRW1r?= =?utf-8?B?cUVMaXdFcjlidjErQ1dJYzhwUUNIeUwzZTRrTnNXM1Z0Y2lpMFczdWxnaHAz?= =?utf-8?B?SzgrcFpqM2dqMmNFQW4yZ0dGNkJaWXZsRHBVaHhQZS8zeWtPYk43Y0hRZXdh?= =?utf-8?B?NHJYY3FObnBiZ2ExZ2Jyc1VFMDduYmtLcEpFQ0dzTEJhc1FINFF0NFBId1dz?= =?utf-8?B?bjN0Z2JMTzJIOFdpZHhSNWxuOHdMMlRvMFhCaXJ4UThvQzZFOXFIOHBSSkpY?= =?utf-8?B?M3R6Rk1ud1JPSy92Zi9UWG5RSWM1NTVaMlcrb3FDZSt2T1MybldMa0RyK2tV?= =?utf-8?B?WFE3K05JOU13cW1oeEVaRGd0T0pQNm54SHpXeUdRRHB2bjFtY0xkd2FBRFox?= =?utf-8?B?V2hKOVRybVNSZFFZZFQ2S3E0cFFKYTB0QWhBbUlCNGVpLzV6ZlBhV3NjWEdQ?= =?utf-8?B?L0NkTFZDbDFoMmFveGxXREx2SldsU1BMZzNadlE5SXpYRDVQQkM1YlRjWTVZ?= =?utf-8?B?Znhld20rVHJKMWJjeHkzYTE5SThoa25FUFlwQXhqWVZCUStxWG9Zc3dvVWIw?= =?utf-8?Q?bxjhNmA9xhKb1sDAicS6Iezg9TpZeao70YGey0v?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0b67970e-21b2-4bfe-9c4f-08d98807b7dc X-MS-Exchange-CrossTenant-AuthSource: PH0PR11MB5657.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Oct 2021 13:54:58.2304 (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: l+e+ITRxQbQrOYs44X7wvwRP+nB0JGw9kMK+vWQoe6b86/5yqsPtoT+IIguQc5ZGwvDmlfBj+XsBLrny+/P7+g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR11MB5644 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org RnJvbTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29tPgoKU2ln bmVkLW9mZi1ieTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29t PgotLS0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX3R4LmMgICAgIHwgNTE3 ICsrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlm X3R4LmggICAgIHwgIDY0ICsrKwogZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZf dHhfbWliLmMgfCAzMzMgKysrKysrKysrKysrCiBkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMv d2Z4L2hpZl90eF9taWIuaCB8ICA1NSArKwogNCBmaWxlcyBjaGFuZ2VkLCA5NjkgaW5zZXJ0aW9u cygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngv aGlmX3R4LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMv d2Z4L2hpZl90eC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2ls YWJzL3dmeC9oaWZfdHhfbWliLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJl bGVzcy9zaWxhYnMvd2Z4L2hpZl90eF9taWIuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dp cmVsZXNzL3NpbGFicy93ZngvaGlmX3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMv d2Z4L2hpZl90eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMjk0 MTQwNmM1ZjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJz L3dmeC9oaWZfdHguYwpAQCAtMCwwICsxLDUxNyBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAtb25seQorLyoKKyAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBob3N0LXRvLWNo aXAgY29tbWFuZHMgKGFrYSByZXF1ZXN0L2NvbmZpcm1hdGlvbikgb2YgdGhlCisgKiBoYXJkd2Fy ZSBBUEkuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFib3JhdG9y aWVzLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCisgKi8KKyNpbmNs dWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorCisjaW5jbHVkZSAiaGlmX3R4LmgiCisjaW5jbHVk ZSAid2Z4LmgiCisjaW5jbHVkZSAiYmguaCIKKyNpbmNsdWRlICJod2lvLmgiCisjaW5jbHVkZSAi ZGVidWcuaCIKKyNpbmNsdWRlICJzdGEuaCIKKwordm9pZCB3ZnhfaW5pdF9oaWZfY21kKHN0cnVj dCB3ZnhfaGlmX2NtZCAqaGlmX2NtZCkKK3sKKwlpbml0X2NvbXBsZXRpb24oJmhpZl9jbWQtPnJl YWR5KTsKKwlpbml0X2NvbXBsZXRpb24oJmhpZl9jbWQtPmRvbmUpOworCW11dGV4X2luaXQoJmhp Zl9jbWQtPmxvY2spOworfQorCitzdGF0aWMgdm9pZCB3ZnhfZmlsbF9oZWFkZXIoc3RydWN0IHdm eF9oaWZfbXNnICpoaWYsIGludCBpZl9pZCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgY21kLCBzaXpl X3Qgc2l6ZSkKK3sKKwlpZiAoaWZfaWQgPT0gLTEpCisJCWlmX2lkID0gMjsKKworCVdBUk4oY21k ID4gMHgzZiwgImludmFsaWQgaGFyZHdhcmUgY29tbWFuZCAlIy4yeCIsIGNtZCk7CisJV0FSTihz aXplID4gMHhGRkYsICJyZXF1ZXN0ZWQgYnVmZmVyIGlzIHRvbyBsYXJnZTogJXp1IGJ5dGVzIiwg c2l6ZSk7CisJV0FSTihpZl9pZCA+IDB4MywgImludmFsaWQgaW50ZXJmYWNlIElEICVkIiwgaWZf aWQpOworCisJaGlmLT5sZW4gPSBjcHVfdG9fbGUxNihzaXplICsgNCk7CisJaGlmLT5pZCA9IGNt ZDsKKwloaWYtPmludGVyZmFjZSA9IGlmX2lkOworfQorCitzdGF0aWMgdm9pZCAqd2Z4X2FsbG9j X2hpZihzaXplX3QgYm9keV9sZW4sIHN0cnVjdCB3ZnhfaGlmX21zZyAqKmhpZikKK3sKKwkqaGlm ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdmeF9oaWZfbXNnKSArIGJvZHlfbGVuLCBHRlBfS0VS TkVMKTsKKwlpZiAoKmhpZikKKwkJcmV0dXJuICgqaGlmKS0+Ym9keTsKKwllbHNlCisJCXJldHVy biBOVUxMOworfQorCitpbnQgd2Z4X2NtZF9zZW5kKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBzdHJ1 Y3Qgd2Z4X2hpZl9tc2cgKnJlcXVlc3QsCisJCSB2b2lkICpyZXBseSwgc2l6ZV90IHJlcGx5X2xl biwgYm9vbCBub19yZXBseSkKK3sKKwljb25zdCBjaGFyICptaWJfbmFtZSA9ICIiOworCWNvbnN0 IGNoYXIgKm1pYl9zZXAgPSAiIjsKKwlpbnQgY21kID0gcmVxdWVzdC0+aWQ7CisJaW50IHZpZiA9 IHJlcXVlc3QtPmludGVyZmFjZTsKKwlpbnQgcmV0OworCisJLyogRG8gbm90IHdhaXQgZm9yIGFu eSByZXBseSBpZiBjaGlwIGlzIGZyb3plbiAqLworCWlmICh3ZGV2LT5jaGlwX2Zyb3plbikKKwkJ cmV0dXJuIC1FVElNRURPVVQ7CisKKwltdXRleF9sb2NrKCZ3ZGV2LT5oaWZfY21kLmxvY2spOwor CVdBUk4od2Rldi0+aGlmX2NtZC5idWZfc2VuZCwgImRhdGEgbG9ja2luZyBlcnJvciIpOworCisJ LyogTm90ZTogY2FsbCB0byBjb21wbGV0ZSgpIGJlbG93IGhhcyBhbiBpbXBsaWNpdCBtZW1vcnkg YmFycmllciB0aGF0CisJICogaG9wZWZ1bGx5IHByb3RlY3QgYnVmX3NlbmQKKwkgKi8KKwl3ZGV2 LT5oaWZfY21kLmJ1Zl9zZW5kID0gcmVxdWVzdDsKKwl3ZGV2LT5oaWZfY21kLmJ1Zl9yZWN2ID0g cmVwbHk7CisJd2Rldi0+aGlmX2NtZC5sZW5fcmVjdiA9IHJlcGx5X2xlbjsKKwljb21wbGV0ZSgm d2Rldi0+aGlmX2NtZC5yZWFkeSk7CisKKwl3ZnhfYmhfcmVxdWVzdF90eCh3ZGV2KTsKKworCWlm IChub19yZXBseSkgeworCQkvKiBDaGlwIHdvbid0IHJlcGx5LiBHaXZlIGVub3VnaCB0aW1lIHRv IHRoZSB3cSB0byBzZW5kIHRoZQorCQkgKiBidWZmZXIuCisJCSAqLworCQltc2xlZXAoMTAwKTsK KwkJd2Rldi0+aGlmX2NtZC5idWZfc2VuZCA9IE5VTEw7CisJCW11dGV4X3VubG9jaygmd2Rldi0+ aGlmX2NtZC5sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHdkZXYtPnBvbGxfaXJxKQor CQl3ZnhfYmhfcG9sbF9pcnEod2Rldik7CisKKwlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3Rp bWVvdXQoJndkZXYtPmhpZl9jbWQuZG9uZSwgMSAqIEhaKTsKKwlpZiAoIXJldCkgeworCQlkZXZf ZXJyKHdkZXYtPmRldiwgImNoaXAgaXMgYWJub3JtYWxseSBsb25nIHRvIGFuc3dlclxuIik7CisJ CXJlaW5pdF9jb21wbGV0aW9uKCZ3ZGV2LT5oaWZfY21kLnJlYWR5KTsKKwkJcmV0ID0gd2FpdF9m b3JfY29tcGxldGlvbl90aW1lb3V0KCZ3ZGV2LT5oaWZfY21kLmRvbmUsIDMgKiBIWik7CisJfQor CWlmICghcmV0KSB7CisJCWRldl9lcnIod2Rldi0+ZGV2LCAiY2hpcCBkaWQgbm90IGFuc3dlclxu Iik7CisJCXdmeF9wZW5kaW5nX2R1bXBfb2xkX2ZyYW1lcyh3ZGV2LCAzMDAwKTsKKwkJd2Rldi0+ Y2hpcF9mcm96ZW4gPSB0cnVlOworCQlyZWluaXRfY29tcGxldGlvbigmd2Rldi0+aGlmX2NtZC5k b25lKTsKKwkJcmV0ID0gLUVUSU1FRE9VVDsKKwl9IGVsc2UgeworCQlyZXQgPSB3ZGV2LT5oaWZf Y21kLnJldDsKKwl9CisKKwl3ZGV2LT5oaWZfY21kLmJ1Zl9zZW5kID0gTlVMTDsKKwltdXRleF91 bmxvY2soJndkZXYtPmhpZl9jbWQubG9jayk7CisKKwlpZiAocmV0ICYmCisJICAgIChjbWQgPT0g SElGX1JFUV9JRF9SRUFEX01JQiB8fCBjbWQgPT0gSElGX1JFUV9JRF9XUklURV9NSUIpKSB7CisJ CW1pYl9uYW1lID0gd2Z4X2dldF9taWJfbmFtZSgoKHUxNiAqKXJlcXVlc3QpWzJdKTsKKwkJbWli X3NlcCA9ICIvIjsKKwl9CisJaWYgKHJldCA8IDApCisJCWRldl9lcnIod2Rldi0+ZGV2LCAiaGFy ZHdhcmUgcmVxdWVzdCAlcyVzJXMgKCUjLjJ4KSBvbiB2aWYgJWQgcmV0dXJuZWQgZXJyb3IgJWRc biIsCisJCQl3ZnhfZ2V0X2hpZl9uYW1lKGNtZCksIG1pYl9zZXAsIG1pYl9uYW1lLCBjbWQsIHZp ZiwgcmV0KTsKKwlpZiAocmV0ID4gMCkKKwkJZGV2X3dhcm4od2Rldi0+ZGV2LCAiaGFyZHdhcmUg cmVxdWVzdCAlcyVzJXMgKCUjLjJ4KSBvbiB2aWYgJWQgcmV0dXJuZWQgc3RhdHVzICVkXG4iLAor CQkJIHdmeF9nZXRfaGlmX25hbWUoY21kKSwgbWliX3NlcCwgbWliX25hbWUsIGNtZCwgdmlmLCBy ZXQpOworCisJcmV0dXJuIHJldDsKK30KKworLyogVGhpcyBmdW5jdGlvbiBpcyBzcGVjaWFsLiBB ZnRlciBISUZfUkVRX0lEX1NIVVRfRE9XTiwgY2hpcCB3b24ndCByZXBseSB0byBhbnkKKyAqIHJl cXVlc3QgYW55bW9yZS4gT2J2aW91c2x5LCBvbmx5IGNhbGwgdGhpcyBmdW5jdGlvbiBkdXJpbmcg ZGV2aWNlIHVucmVnaXN0ZXIuCisgKi8KK2ludCB3ZnhfaGlmX3NodXRkb3duKHN0cnVjdCB3Znhf ZGV2ICp3ZGV2KQoreworCWludCByZXQ7CisJc3RydWN0IHdmeF9oaWZfbXNnICpoaWY7CisKKwl3 ZnhfYWxsb2NfaGlmKDAsICZoaWYpOworCWlmICghaGlmKQorCQlyZXR1cm4gLUVOT01FTTsKKwl3 ZnhfZmlsbF9oZWFkZXIoaGlmLCAtMSwgSElGX1JFUV9JRF9TSFVUX0RPV04sIDApOworCXJldCA9 IHdmeF9jbWRfc2VuZCh3ZGV2LCBoaWYsIE5VTEwsIDAsIHRydWUpOworCWlmICh3ZGV2LT5wZGF0 YS5ncGlvX3dha2V1cCkKKwkJZ3Bpb2Rfc2V0X3ZhbHVlKHdkZXYtPnBkYXRhLmdwaW9fd2FrZXVw LCAwKTsKKwllbHNlCisJCXdmeF9jb250cm9sX3JlZ193cml0ZSh3ZGV2LCAwKTsKKwlrZnJlZSho aWYpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3ZnhfaGlmX2NvbmZpZ3VyYXRpb24oc3RydWN0 IHdmeF9kZXYgKndkZXYsIGNvbnN0IHU4ICpjb25mLCBzaXplX3QgbGVuKQoreworCWludCByZXQ7 CisJc2l6ZV90IGJ1Zl9sZW4gPSBzaXplb2Yoc3RydWN0IHdmeF9oaWZfcmVxX2NvbmZpZ3VyYXRp b24pICsgbGVuOworCXN0cnVjdCB3ZnhfaGlmX21zZyAqaGlmOworCXN0cnVjdCB3ZnhfaGlmX3Jl cV9jb25maWd1cmF0aW9uICpib2R5ID0gd2Z4X2FsbG9jX2hpZihidWZfbGVuLCAmaGlmKTsKKwor CWlmICghaGlmKQorCQlyZXR1cm4gLUVOT01FTTsKKwlib2R5LT5sZW5ndGggPSBjcHVfdG9fbGUx NihsZW4pOworCW1lbWNweShib2R5LT5wZHNfZGF0YSwgY29uZiwgbGVuKTsKKwl3ZnhfZmlsbF9o ZWFkZXIoaGlmLCAtMSwgSElGX1JFUV9JRF9DT05GSUdVUkFUSU9OLCBidWZfbGVuKTsKKwlyZXQg PSB3ZnhfY21kX3NlbmQod2RldiwgaGlmLCBOVUxMLCAwLCBmYWxzZSk7CisJa2ZyZWUoaGlmKTsK KwlyZXR1cm4gcmV0OworfQorCitpbnQgd2Z4X2hpZl9yZXNldChzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp ZiwgYm9vbCByZXNldF9zdGF0KQoreworCWludCByZXQ7CisJc3RydWN0IHdmeF9oaWZfbXNnICpo aWY7CisJc3RydWN0IHdmeF9oaWZfcmVxX3Jlc2V0ICpib2R5ID0gd2Z4X2FsbG9jX2hpZihzaXpl b2YoKmJvZHkpLCAmaGlmKTsKKworCWlmICghaGlmKQorCQlyZXR1cm4gLUVOT01FTTsKKwlib2R5 LT5yZXNldF9zdGF0ID0gcmVzZXRfc3RhdDsKKwl3ZnhfZmlsbF9oZWFkZXIoaGlmLCB3dmlmLT5p ZCwgSElGX1JFUV9JRF9SRVNFVCwgc2l6ZW9mKCpib2R5KSk7CisJcmV0ID0gd2Z4X2NtZF9zZW5k KHd2aWYtPndkZXYsIGhpZiwgTlVMTCwgMCwgZmFsc2UpOworCWtmcmVlKGhpZik7CisJcmV0dXJu IHJldDsKK30KKworaW50IHdmeF9oaWZfcmVhZF9taWIoc3RydWN0IHdmeF9kZXYgKndkZXYsIGlu dCB2aWZfaWQsIHUxNiBtaWJfaWQsCisJCSAgICAgdm9pZCAqdmFsLCBzaXplX3QgdmFsX2xlbikK K3sKKwlpbnQgcmV0OworCXN0cnVjdCB3ZnhfaGlmX21zZyAqaGlmOworCWludCBidWZfbGVuID0g c2l6ZW9mKHN0cnVjdCB3ZnhfaGlmX2NuZl9yZWFkX21pYikgKyB2YWxfbGVuOworCXN0cnVjdCB3 ZnhfaGlmX3JlcV9yZWFkX21pYiAqYm9keSA9IHdmeF9hbGxvY19oaWYoc2l6ZW9mKCpib2R5KSwg JmhpZik7CisJc3RydWN0IHdmeF9oaWZfY25mX3JlYWRfbWliICpyZXBseSA9IGttYWxsb2MoYnVm X2xlbiwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWJvZHkgfHwgIXJlcGx5KSB7CisJCXJldCA9IC1F Tk9NRU07CisJCWdvdG8gb3V0OworCX0KKwlib2R5LT5taWJfaWQgPSBjcHVfdG9fbGUxNihtaWJf aWQpOworCXdmeF9maWxsX2hlYWRlcihoaWYsIHZpZl9pZCwgSElGX1JFUV9JRF9SRUFEX01JQiwg c2l6ZW9mKCpib2R5KSk7CisJcmV0ID0gd2Z4X2NtZF9zZW5kKHdkZXYsIGhpZiwgcmVwbHksIGJ1 Zl9sZW4sIGZhbHNlKTsKKworCWlmICghcmV0ICYmIG1pYl9pZCAhPSBsZTE2X3RvX2NwdShyZXBs eS0+bWliX2lkKSkgeworCQlkZXZfd2Fybih3ZGV2LT5kZXYsICIlczogY29uZmlybWF0aW9uIG1p c21hdGNoIHJlcXVlc3RcbiIsCisJCQkgX19mdW5jX18pOworCQlyZXQgPSAtRUlPOworCX0KKwlp ZiAocmV0ID09IC1FTk9NRU0pCisJCWRldl9lcnIod2Rldi0+ZGV2LCAiYnVmZmVyIGlzIHRvbyBz bWFsbCB0byByZWNlaXZlICVzICglenUgPCAlZClcbiIsCisJCQl3ZnhfZ2V0X21pYl9uYW1lKG1p Yl9pZCksIHZhbF9sZW4sCisJCQlsZTE2X3RvX2NwdShyZXBseS0+bGVuZ3RoKSk7CisJaWYgKCFy ZXQpCisJCW1lbWNweSh2YWwsICZyZXBseS0+bWliX2RhdGEsIGxlMTZfdG9fY3B1KHJlcGx5LT5s ZW5ndGgpKTsKKwllbHNlCisJCW1lbXNldCh2YWwsIDB4RkYsIHZhbF9sZW4pOworb3V0OgorCWtm cmVlKGhpZik7CisJa2ZyZWUocmVwbHkpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3ZnhfaGlm X3dyaXRlX21pYihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IHZpZl9pZCwgdTE2IG1pYl9pZCwK KwkJICAgICAgdm9pZCAqdmFsLCBzaXplX3QgdmFsX2xlbikKK3sKKwlpbnQgcmV0OworCXN0cnVj dCB3ZnhfaGlmX21zZyAqaGlmOworCWludCBidWZfbGVuID0gc2l6ZW9mKHN0cnVjdCB3ZnhfaGlm X3JlcV93cml0ZV9taWIpICsgdmFsX2xlbjsKKwlzdHJ1Y3Qgd2Z4X2hpZl9yZXFfd3JpdGVfbWli ICpib2R5ID0gd2Z4X2FsbG9jX2hpZihidWZfbGVuLCAmaGlmKTsKKworCWlmICghaGlmKQorCQly ZXR1cm4gLUVOT01FTTsKKwlib2R5LT5taWJfaWQgPSBjcHVfdG9fbGUxNihtaWJfaWQpOworCWJv ZHktPmxlbmd0aCA9IGNwdV90b19sZTE2KHZhbF9sZW4pOworCW1lbWNweSgmYm9keS0+bWliX2Rh dGEsIHZhbCwgdmFsX2xlbik7CisJd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgdmlmX2lkLCBISUZfUkVR X0lEX1dSSVRFX01JQiwgYnVmX2xlbik7CisJcmV0ID0gd2Z4X2NtZF9zZW5kKHdkZXYsIGhpZiwg TlVMTCwgMCwgZmFsc2UpOworCWtmcmVlKGhpZik7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdm eF9oaWZfc2NhbihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVx dWVzdCAqcmVxLAorCQkgaW50IGNoYW5fc3RhcnRfaWR4LCBpbnQgY2hhbl9udW0pCit7CisJaW50 IHJldCwgaTsKKwlzdHJ1Y3Qgd2Z4X2hpZl9tc2cgKmhpZjsKKwlzaXplX3QgYnVmX2xlbiA9IHNp emVvZihzdHJ1Y3Qgd2Z4X2hpZl9yZXFfc3RhcnRfc2Nhbl9hbHQpICsKKwkJCSBjaGFuX251bSAq IHNpemVvZih1OCk7CisJc3RydWN0IHdmeF9oaWZfcmVxX3N0YXJ0X3NjYW5fYWx0ICpib2R5ID0g d2Z4X2FsbG9jX2hpZihidWZfbGVuLCAmaGlmKTsKKworCVdBUk4oY2hhbl9udW0gPiBISUZfQVBJ X01BWF9OQl9DSEFOTkVMUywgImludmFsaWQgcGFyYW1zIik7CisJV0FSTihyZXEtPm5fc3NpZHMg PiBISUZfQVBJX01BWF9OQl9TU0lEUywgImludmFsaWQgcGFyYW1zIik7CisKKwlpZiAoIWhpZikK KwkJcmV0dXJuIC1FTk9NRU07CisJZm9yIChpID0gMDsgaSA8IHJlcS0+bl9zc2lkczsgaSsrKSB7 CisJCW1lbWNweShib2R5LT5zc2lkX2RlZltpXS5zc2lkLCByZXEtPnNzaWRzW2ldLnNzaWQsCisJ CSAgICAgICBJRUVFODAyMTFfTUFYX1NTSURfTEVOKTsKKwkJYm9keS0+c3NpZF9kZWZbaV0uc3Np ZF9sZW5ndGggPQorCQkJY3B1X3RvX2xlMzIocmVxLT5zc2lkc1tpXS5zc2lkX2xlbik7CisJfQor CWJvZHktPm51bV9vZl9zc2lkcyA9IEhJRl9BUElfTUFYX05CX1NTSURTOworCWJvZHktPm1haW50 YWluX2N1cnJlbnRfYnNzID0gMTsKKwlib2R5LT5kaXNhbGxvd19wcyA9IDE7CisJYm9keS0+dHhf cG93ZXJfbGV2ZWwgPQorCQljcHVfdG9fbGUzMihyZXEtPmNoYW5uZWxzW2NoYW5fc3RhcnRfaWR4 XS0+bWF4X3Bvd2VyKTsKKwlib2R5LT5udW1fb2ZfY2hhbm5lbHMgPSBjaGFuX251bTsKKwlmb3Ig KGkgPSAwOyBpIDwgY2hhbl9udW07IGkrKykKKwkJYm9keS0+Y2hhbm5lbF9saXN0W2ldID0KKwkJ CXJlcS0+Y2hhbm5lbHNbaSArIGNoYW5fc3RhcnRfaWR4XS0+aHdfdmFsdWU7CisJaWYgKHJlcS0+ bm9fY2NrKQorCQlib2R5LT5tYXhfdHJhbnNtaXRfcmF0ZSA9IEFQSV9SQVRFX0lOREVYX0dfNk1C UFM7CisJZWxzZQorCQlib2R5LT5tYXhfdHJhbnNtaXRfcmF0ZSA9IEFQSV9SQVRFX0lOREVYX0Jf MU1CUFM7CisJaWYgKHJlcS0+Y2hhbm5lbHNbY2hhbl9zdGFydF9pZHhdLT5mbGFncyAmIElFRUU4 MDIxMV9DSEFOX05PX0lSKSB7CisJCWJvZHktPm1pbl9jaGFubmVsX3RpbWUgPSBjcHVfdG9fbGUz Mig1MCk7CisJCWJvZHktPm1heF9jaGFubmVsX3RpbWUgPSBjcHVfdG9fbGUzMigxNTApOworCX0g ZWxzZSB7CisJCWJvZHktPm1pbl9jaGFubmVsX3RpbWUgPSBjcHVfdG9fbGUzMigxMCk7CisJCWJv ZHktPm1heF9jaGFubmVsX3RpbWUgPSBjcHVfdG9fbGUzMig1MCk7CisJCWJvZHktPm51bV9vZl9w cm9iZV9yZXF1ZXN0cyA9IDI7CisJCWJvZHktPnByb2JlX2RlbGF5ID0gMTAwOworCX0KKworCXdm eF9maWxsX2hlYWRlcihoaWYsIHd2aWYtPmlkLCBISUZfUkVRX0lEX1NUQVJUX1NDQU4sIGJ1Zl9s ZW4pOworCXJldCA9IHdmeF9jbWRfc2VuZCh3dmlmLT53ZGV2LCBoaWYsIE5VTEwsIDAsIGZhbHNl KTsKKwlrZnJlZShoaWYpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3ZnhfaGlmX3N0b3Bfc2Nh bihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB3ZnhfaGlmX21z ZyAqaGlmOworCS8qIGJvZHkgYXNzb2NpYXRlZCB0byBISUZfUkVRX0lEX1NUT1BfU0NBTiBpcyBl bXB0eSAqLworCXdmeF9hbGxvY19oaWYoMCwgJmhpZik7CisKKwlpZiAoIWhpZikKKwkJcmV0dXJu IC1FTk9NRU07CisJd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgd3ZpZi0+aWQsIEhJRl9SRVFfSURfU1RP UF9TQ0FOLCAwKTsKKwlyZXQgPSB3ZnhfY21kX3NlbmQod3ZpZi0+d2RldiwgaGlmLCBOVUxMLCAw LCBmYWxzZSk7CisJa2ZyZWUoaGlmKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2Z4X2hpZl9q b2luKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25m ICpjb25mLAorCQkgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLCBjb25zdCB1OCAq c3NpZCwgaW50IHNzaWRsZW4pCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgd2Z4X2hpZl9tc2cgKmhp ZjsKKwlzdHJ1Y3Qgd2Z4X2hpZl9yZXFfam9pbiAqYm9keSA9IHdmeF9hbGxvY19oaWYoc2l6ZW9m KCpib2R5KSwgJmhpZik7CisKKwlXQVJOX09OKCFjb25mLT5iZWFjb25faW50KTsKKwlXQVJOX09O KCFjb25mLT5iYXNpY19yYXRlcyk7CisJV0FSTl9PTighY2hhbm5lbCk7CisJV0FSTl9PTihzaXpl b2YoYm9keS0+c3NpZCkgPCBzc2lkbGVuKTsKKwlXQVJOKCFjb25mLT5pYnNzX2pvaW5lZCAmJiAh c3NpZGxlbiwgImpvaW5pbmcgYW4gdW5rbm93biBCU1MiKTsKKwlpZiAoIWhpZikKKwkJcmV0dXJu IC1FTk9NRU07CisJYm9keS0+aW5mcmFzdHJ1Y3R1cmVfYnNzX21vZGUgPSAhY29uZi0+aWJzc19q b2luZWQ7CisJYm9keS0+c2hvcnRfcHJlYW1ibGUgPSBjb25mLT51c2Vfc2hvcnRfcHJlYW1ibGU7 CisJYm9keS0+cHJvYmVfZm9yX2pvaW4gPSAhKGNoYW5uZWwtPmZsYWdzICYgSUVFRTgwMjExX0NI QU5fTk9fSVIpOworCWJvZHktPmNoYW5uZWxfbnVtYmVyID0gY2hhbm5lbC0+aHdfdmFsdWU7CisJ Ym9keS0+YmVhY29uX2ludGVydmFsID0gY3B1X3RvX2xlMzIoY29uZi0+YmVhY29uX2ludCk7CisJ Ym9keS0+YmFzaWNfcmF0ZV9zZXQgPQorCQljcHVfdG9fbGUzMih3ZnhfcmF0ZV9tYXNrX3RvX2h3 KHd2aWYtPndkZXYsIGNvbmYtPmJhc2ljX3JhdGVzKSk7CisJbWVtY3B5KGJvZHktPmJzc2lkLCBj b25mLT5ic3NpZCwgc2l6ZW9mKGJvZHktPmJzc2lkKSk7CisJaWYgKHNzaWQpIHsKKwkJYm9keS0+ c3NpZF9sZW5ndGggPSBjcHVfdG9fbGUzMihzc2lkbGVuKTsKKwkJbWVtY3B5KGJvZHktPnNzaWQs IHNzaWQsIHNzaWRsZW4pOworCX0KKwl3ZnhfZmlsbF9oZWFkZXIoaGlmLCB3dmlmLT5pZCwgSElG X1JFUV9JRF9KT0lOLCBzaXplb2YoKmJvZHkpKTsKKwlyZXQgPSB3ZnhfY21kX3NlbmQod3ZpZi0+ d2RldiwgaGlmLCBOVUxMLCAwLCBmYWxzZSk7CisJa2ZyZWUoaGlmKTsKKwlyZXR1cm4gcmV0Owor fQorCitpbnQgd2Z4X2hpZl9zZXRfYnNzX3BhcmFtcyhzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50 IGFpZCwgaW50IGJlYWNvbl9sb3N0X2NvdW50KQoreworCWludCByZXQ7CisJc3RydWN0IHdmeF9o aWZfbXNnICpoaWY7CisJc3RydWN0IHdmeF9oaWZfcmVxX3NldF9ic3NfcGFyYW1zICpib2R5ID0g d2Z4X2FsbG9jX2hpZihzaXplb2YoKmJvZHkpLAorCQkJCQkJCQkmaGlmKTsKKworCWlmICghaGlm KQorCQlyZXR1cm4gLUVOT01FTTsKKwlib2R5LT5haWQgPSBjcHVfdG9fbGUxNihhaWQpOworCWJv ZHktPmJlYWNvbl9sb3N0X2NvdW50ID0gYmVhY29uX2xvc3RfY291bnQ7CisJd2Z4X2ZpbGxfaGVh ZGVyKGhpZiwgd3ZpZi0+aWQsIEhJRl9SRVFfSURfU0VUX0JTU19QQVJBTVMsCisJCQlzaXplb2Yo KmJvZHkpKTsKKwlyZXQgPSB3ZnhfY21kX3NlbmQod3ZpZi0+d2RldiwgaGlmLCBOVUxMLCAwLCBm YWxzZSk7CisJa2ZyZWUoaGlmKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2Z4X2hpZl9hZGRf a2V5KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBjb25zdCBzdHJ1Y3Qgd2Z4X2hpZl9yZXFfYWRkX2tl eSAqYXJnKQoreworCWludCByZXQ7CisJc3RydWN0IHdmeF9oaWZfbXNnICpoaWY7CisJLyogRklY TUU6IG9ubHkgc2VuZCBuZWNlc3NhcnkgYml0cyAqLworCXN0cnVjdCB3ZnhfaGlmX3JlcV9hZGRf a2V5ICpib2R5ID0gd2Z4X2FsbG9jX2hpZihzaXplb2YoKmJvZHkpLCAmaGlmKTsKKworCWlmICgh aGlmKQorCQlyZXR1cm4gLUVOT01FTTsKKwkvKiBGSVhNRTogc3dhcCBieXRlcyBhcyBuZWNlc3Nh cnkgaW4gYm9keSAqLworCW1lbWNweShib2R5LCBhcmcsIHNpemVvZigqYm9keSkpOworCWlmICh3 ZnhfYXBpX29sZGVyX3RoYW4od2RldiwgMSwgNSkpCisJCS8qIExlZ2FjeSBmaXJtd2FyZXMgZXhw ZWN0IHRoYXQgYWRkX2tleSB0byBiZSBzZW50IG9uIHJpZ2h0CisJCSAqIGludGVyZmFjZS4KKwkJ ICovCisJCXdmeF9maWxsX2hlYWRlcihoaWYsIGFyZy0+aW50X2lkLCBISUZfUkVRX0lEX0FERF9L RVksCisJCQkJc2l6ZW9mKCpib2R5KSk7CisJZWxzZQorCQl3ZnhfZmlsbF9oZWFkZXIoaGlmLCAt MSwgSElGX1JFUV9JRF9BRERfS0VZLCBzaXplb2YoKmJvZHkpKTsKKwlyZXQgPSB3ZnhfY21kX3Nl bmQod2RldiwgaGlmLCBOVUxMLCAwLCBmYWxzZSk7CisJa2ZyZWUoaGlmKTsKKwlyZXR1cm4gcmV0 OworfQorCitpbnQgd2Z4X2hpZl9yZW1vdmVfa2V5KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQg aWR4KQoreworCWludCByZXQ7CisJc3RydWN0IHdmeF9oaWZfbXNnICpoaWY7CisJc3RydWN0IHdm eF9oaWZfcmVxX3JlbW92ZV9rZXkgKmJvZHkgPSB3ZnhfYWxsb2NfaGlmKHNpemVvZigqYm9keSks ICZoaWYpOworCisJaWYgKCFoaWYpCisJCXJldHVybiAtRU5PTUVNOworCWJvZHktPmVudHJ5X2lu ZGV4ID0gaWR4OworCXdmeF9maWxsX2hlYWRlcihoaWYsIC0xLCBISUZfUkVRX0lEX1JFTU9WRV9L RVksIHNpemVvZigqYm9keSkpOworCXJldCA9IHdmeF9jbWRfc2VuZCh3ZGV2LCBoaWYsIE5VTEws IDAsIGZhbHNlKTsKKwlrZnJlZShoaWYpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3ZnhfaGlm X3NldF9lZGNhX3F1ZXVlX3BhcmFtcyhzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgdTE2IHF1ZXVlLAor CQkJCSAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKmFyZykKK3sKKwlp bnQgcmV0OworCXN0cnVjdCB3ZnhfaGlmX21zZyAqaGlmOworCXN0cnVjdCB3ZnhfaGlmX3JlcV9l ZGNhX3F1ZXVlX3BhcmFtcyAqYm9keSA9IHdmeF9hbGxvY19oaWYoc2l6ZW9mKCpib2R5KSwKKwkJ CQkJCQkJICAgJmhpZik7CisKKwlpZiAoIWJvZHkpCisJCXJldHVybiAtRU5PTUVNOworCisJV0FS Tl9PTihhcmctPmFpZnMgPiAyNTUpOworCWlmICghaGlmKQorCQlyZXR1cm4gLUVOT01FTTsKKwli b2R5LT5haWZzbiA9IGFyZy0+YWlmczsKKwlib2R5LT5jd19taW4gPSBjcHVfdG9fbGUxNihhcmct PmN3X21pbik7CisJYm9keS0+Y3dfbWF4ID0gY3B1X3RvX2xlMTYoYXJnLT5jd19tYXgpOworCWJv ZHktPnR4X29wX2xpbWl0ID0gY3B1X3RvX2xlMTYoYXJnLT50eG9wICogVVNFQ19QRVJfVFhPUCk7 CisJYm9keS0+cXVldWVfaWQgPSAzIC0gcXVldWU7CisJLyogQVBJIDIuMCBoYXMgY2hhbmdlZCBx dWV1ZSBJRHMgdmFsdWVzICovCisJaWYgKHdmeF9hcGlfb2xkZXJfdGhhbih3dmlmLT53ZGV2LCAy LCAwKSAmJiBxdWV1ZSA9PSBJRUVFODAyMTFfQUNfQkUpCisJCWJvZHktPnF1ZXVlX2lkID0gSElG X1FVRVVFX0lEX0JBQ0tHUk9VTkQ7CisJaWYgKHdmeF9hcGlfb2xkZXJfdGhhbih3dmlmLT53ZGV2 LCAyLCAwKSAmJiBxdWV1ZSA9PSBJRUVFODAyMTFfQUNfQkspCisJCWJvZHktPnF1ZXVlX2lkID0g SElGX1FVRVVFX0lEX0JFU1RFRkZPUlQ7CisJd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgd3ZpZi0+aWQs IEhJRl9SRVFfSURfRURDQV9RVUVVRV9QQVJBTVMsCisJCQlzaXplb2YoKmJvZHkpKTsKKwlyZXQg PSB3ZnhfY21kX3NlbmQod3ZpZi0+d2RldiwgaGlmLCBOVUxMLCAwLCBmYWxzZSk7CisJa2ZyZWUo aGlmKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2Z4X2hpZl9zZXRfcG0oc3RydWN0IHdmeF92 aWYgKnd2aWYsIGJvb2wgcHMsIGludCBkeW5hbWljX3BzX3RpbWVvdXQpCit7CisJaW50IHJldDsK KwlzdHJ1Y3Qgd2Z4X2hpZl9tc2cgKmhpZjsKKwlzdHJ1Y3Qgd2Z4X2hpZl9yZXFfc2V0X3BtX21v ZGUgKmJvZHkgPSB3ZnhfYWxsb2NfaGlmKHNpemVvZigqYm9keSksCisJCQkJCQkJICAgICAmaGlm KTsKKworCWlmICghYm9keSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoIWhpZikKKwkJcmV0 dXJuIC1FTk9NRU07CisJaWYgKHBzKSB7CisJCWJvZHktPmVudGVyX3BzbSA9IDE7CisJCS8qIEZp cm13YXJlIGRvZXMgbm90IHN1cHBvcnQgbW9yZSB0aGFuIDEyOG1zICovCisJCWJvZHktPmZhc3Rf cHNtX2lkbGVfcGVyaW9kID0gbWluKGR5bmFtaWNfcHNfdGltZW91dCAqIDIsIDI1NSk7CisJCWlm IChib2R5LT5mYXN0X3BzbV9pZGxlX3BlcmlvZCkKKwkJCWJvZHktPmZhc3RfcHNtID0gMTsKKwl9 CisJd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgd3ZpZi0+aWQsIEhJRl9SRVFfSURfU0VUX1BNX01PREUs IHNpemVvZigqYm9keSkpOworCXJldCA9IHdmeF9jbWRfc2VuZCh3dmlmLT53ZGV2LCBoaWYsIE5V TEwsIDAsIGZhbHNlKTsKKwlrZnJlZShoaWYpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3Znhf aGlmX3N0YXJ0KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2Jz c19jb25mICpjb25mLAorCQkgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5l bCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB3ZnhfaGlmX21zZyAqaGlmOworCXN0cnVjdCB3Znhf aGlmX3JlcV9zdGFydCAqYm9keSA9IHdmeF9hbGxvY19oaWYoc2l6ZW9mKCpib2R5KSwgJmhpZik7 CisKKwlXQVJOX09OKCFjb25mLT5iZWFjb25faW50KTsKKwlpZiAoIWhpZikKKwkJcmV0dXJuIC1F Tk9NRU07CisJYm9keS0+ZHRpbV9wZXJpb2QgPSBjb25mLT5kdGltX3BlcmlvZDsKKwlib2R5LT5z aG9ydF9wcmVhbWJsZSA9IGNvbmYtPnVzZV9zaG9ydF9wcmVhbWJsZTsKKwlib2R5LT5jaGFubmVs X251bWJlciA9IGNoYW5uZWwtPmh3X3ZhbHVlOworCWJvZHktPmJlYWNvbl9pbnRlcnZhbCA9IGNw dV90b19sZTMyKGNvbmYtPmJlYWNvbl9pbnQpOworCWJvZHktPmJhc2ljX3JhdGVfc2V0ID0KKwkJ Y3B1X3RvX2xlMzIod2Z4X3JhdGVfbWFza190b19odyh3dmlmLT53ZGV2LCBjb25mLT5iYXNpY19y YXRlcykpOworCWJvZHktPnNzaWRfbGVuZ3RoID0gY29uZi0+c3NpZF9sZW47CisJbWVtY3B5KGJv ZHktPnNzaWQsIGNvbmYtPnNzaWQsIGNvbmYtPnNzaWRfbGVuKTsKKwl3ZnhfZmlsbF9oZWFkZXIo aGlmLCB3dmlmLT5pZCwgSElGX1JFUV9JRF9TVEFSVCwgc2l6ZW9mKCpib2R5KSk7CisJcmV0ID0g d2Z4X2NtZF9zZW5kKHd2aWYtPndkZXYsIGhpZiwgTlVMTCwgMCwgZmFsc2UpOworCWtmcmVlKGhp Zik7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdmeF9oaWZfYmVhY29uX3RyYW5zbWl0KHN0cnVj dCB3ZnhfdmlmICp3dmlmLCBib29sIGVuYWJsZSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB3Znhf aGlmX21zZyAqaGlmOworCXN0cnVjdCB3ZnhfaGlmX3JlcV9iZWFjb25fdHJhbnNtaXQgKmJvZHkg PSB3ZnhfYWxsb2NfaGlmKHNpemVvZigqYm9keSksCisJCQkJCQkJCSAmaGlmKTsKKworCWlmICgh aGlmKQorCQlyZXR1cm4gLUVOT01FTTsKKwlib2R5LT5lbmFibGVfYmVhY29uaW5nID0gZW5hYmxl ID8gMSA6IDA7CisJd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgd3ZpZi0+aWQsIEhJRl9SRVFfSURfQkVB Q09OX1RSQU5TTUlULAorCQkJc2l6ZW9mKCpib2R5KSk7CisJcmV0ID0gd2Z4X2NtZF9zZW5kKHd2 aWYtPndkZXYsIGhpZiwgTlVMTCwgMCwgZmFsc2UpOworCWtmcmVlKGhpZik7CisJcmV0dXJuIHJl dDsKK30KKworaW50IHdmeF9oaWZfbWFwX2xpbmsoc3RydWN0IHdmeF92aWYgKnd2aWYsIGJvb2wg dW5tYXAsIHU4ICptYWNfYWRkciwgaW50IHN0YV9pZCwKKwkJICAgICBib29sIG1mcCkKK3sKKwlp bnQgcmV0OworCXN0cnVjdCB3ZnhfaGlmX21zZyAqaGlmOworCXN0cnVjdCB3ZnhfaGlmX3JlcV9t YXBfbGluayAqYm9keSA9IHdmeF9hbGxvY19oaWYoc2l6ZW9mKCpib2R5KSwgJmhpZik7CisKKwlp ZiAoIWhpZikKKwkJcmV0dXJuIC1FTk9NRU07CisJaWYgKG1hY19hZGRyKQorCQlldGhlcl9hZGRy X2NvcHkoYm9keS0+bWFjX2FkZHIsIG1hY19hZGRyKTsKKwlib2R5LT5tZnBjID0gbWZwID8gMSA6 IDA7CisJYm9keS0+dW5tYXAgPSB1bm1hcCA/IDEgOiAwOworCWJvZHktPnBlZXJfc3RhX2lkID0g c3RhX2lkOworCXdmeF9maWxsX2hlYWRlcihoaWYsIHd2aWYtPmlkLCBISUZfUkVRX0lEX01BUF9M SU5LLCBzaXplb2YoKmJvZHkpKTsKKwlyZXQgPSB3ZnhfY21kX3NlbmQod3ZpZi0+d2RldiwgaGlm LCBOVUxMLCAwLCBmYWxzZSk7CisJa2ZyZWUoaGlmKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQg d2Z4X2hpZl91cGRhdGVfaWVfYmVhY29uKHN0cnVjdCB3ZnhfdmlmICp3dmlmLAorCQkJICAgICBj b25zdCB1OCAqaWVzLCBzaXplX3QgaWVzX2xlbikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB3Znhf aGlmX21zZyAqaGlmOworCWludCBidWZfbGVuID0gc2l6ZW9mKHN0cnVjdCB3ZnhfaGlmX3JlcV91 cGRhdGVfaWUpICsgaWVzX2xlbjsKKwlzdHJ1Y3Qgd2Z4X2hpZl9yZXFfdXBkYXRlX2llICpib2R5 ID0gd2Z4X2FsbG9jX2hpZihidWZfbGVuLCAmaGlmKTsKKworCWlmICghaGlmKQorCQlyZXR1cm4g LUVOT01FTTsKKwlib2R5LT5iZWFjb24gPSAxOworCWJvZHktPm51bV9pZXMgPSBjcHVfdG9fbGUx NigxKTsKKwltZW1jcHkoYm9keS0+aWUsIGllcywgaWVzX2xlbik7CisJd2Z4X2ZpbGxfaGVhZGVy KGhpZiwgd3ZpZi0+aWQsIEhJRl9SRVFfSURfVVBEQVRFX0lFLCBidWZfbGVuKTsKKwlyZXQgPSB3 ZnhfY21kX3NlbmQod3ZpZi0+d2RldiwgaGlmLCBOVUxMLCAwLCBmYWxzZSk7CisJa2ZyZWUoaGlm KTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2ls YWJzL3dmeC9oaWZfdHguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX3R4 LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zNmNhZmZhNGQxZWIK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl90 eC5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w LW9ubHkgKi8KKy8qCisgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgaG9zdC10by1jaGlwIGNvbW1h bmRzIChha2EgcmVxdWVzdC9jb25maXJtYXRpb24pIG9mIHRoZQorICogaGFyZHdhcmUgQVBJLgor ICoKKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwLCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5j LgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmljc3NvbgorICogQ29weXJpZ2h0IChDKSAy MDEwLCBTVC1Fcmljc3NvbiBTQQorICovCisjaWZuZGVmIFdGWF9ISUZfVFhfSAorI2RlZmluZSBX RlhfSElGX1RYX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgv bXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisKK3N0cnVjdCBpZWVlODAy MTFfY2hhbm5lbDsKK3N0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmY7CitzdHJ1Y3QgaWVlZTgwMjEx X3R4X3F1ZXVlX3BhcmFtczsKK3N0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3Q7CitzdHJ1Y3Qg d2Z4X2hpZl9yZXFfYWRkX2tleTsKK3N0cnVjdCB3ZnhfZGV2Oworc3RydWN0IHdmeF92aWY7CisK K3N0cnVjdCB3ZnhfaGlmX2NtZCB7CisJc3RydWN0IG11dGV4ICAgICAgIGxvY2s7CisJc3RydWN0 IGNvbXBsZXRpb24gIHJlYWR5OworCXN0cnVjdCBjb21wbGV0aW9uICBkb25lOworCXN0cnVjdCB3 ZnhfaGlmX21zZyAqYnVmX3NlbmQ7CisJdm9pZCAgICAgICAgICAgICAgICpidWZfcmVjdjsKKwlz aXplX3QgICAgICAgICAgICAgbGVuX3JlY3Y7CisJaW50ICAgICAgICAgICAgICAgIHJldDsKK307 CisKK3ZvaWQgd2Z4X2luaXRfaGlmX2NtZChzdHJ1Y3Qgd2Z4X2hpZl9jbWQgKndmeF9oaWZfY21k KTsKK2ludCB3ZnhfY21kX3NlbmQoc3RydWN0IHdmeF9kZXYgKndkZXYsIHN0cnVjdCB3ZnhfaGlm X21zZyAqcmVxdWVzdCwKKwkJIHZvaWQgKnJlcGx5LCBzaXplX3QgcmVwbHlfbGVuLCBib29sIGFz eW5jKTsKKworaW50IHdmeF9oaWZfcmVhZF9taWIoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCB2 aWZfaWQsIHUxNiBtaWJfaWQsCisJCSAgICAgdm9pZCAqYnVmLCBzaXplX3QgYnVmX3NpemUpOwor aW50IHdmeF9oaWZfd3JpdGVfbWliKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgdmlmX2lkLCB1 MTYgbWliX2lkLAorCQkgICAgICB2b2lkICpidWYsIHNpemVfdCBidWZfc2l6ZSk7CitpbnQgd2Z4 X2hpZl9zdGFydChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9i c3NfY29uZiAqY29uZiwKKwkJICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5u ZWwpOworaW50IHdmeF9oaWZfcmVzZXQoc3RydWN0IHdmeF92aWYgKnd2aWYsIGJvb2wgcmVzZXRf c3RhdCk7CitpbnQgd2Z4X2hpZl9qb2luKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBjb25zdCBzdHJ1 Y3QgaWVlZTgwMjExX2Jzc19jb25mICpjb25mLAorCQkgc3RydWN0IGllZWU4MDIxMV9jaGFubmVs ICpjaGFubmVsLCBjb25zdCB1OCAqc3NpZCwgaW50IHNzaWRsZW4pOworaW50IHdmeF9oaWZfbWFw X2xpbmsoc3RydWN0IHdmeF92aWYgKnd2aWYsCisJCSAgICAgYm9vbCB1bm1hcCwgdTggKm1hY19h ZGRyLCBpbnQgc3RhX2lkLCBib29sIG1mcCk7CitpbnQgd2Z4X2hpZl9hZGRfa2V5KHN0cnVjdCB3 ZnhfZGV2ICp3ZGV2LCBjb25zdCBzdHJ1Y3Qgd2Z4X2hpZl9yZXFfYWRkX2tleSAqYXJnKTsKK2lu dCB3ZnhfaGlmX3JlbW92ZV9rZXkoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCBpZHgpOworaW50 IHdmeF9oaWZfc2V0X3BtKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBib29sIHBzLCBpbnQgZHluYW1p Y19wc190aW1lb3V0KTsKK2ludCB3ZnhfaGlmX3NldF9ic3NfcGFyYW1zKHN0cnVjdCB3Znhfdmlm ICp3dmlmLCBpbnQgYWlkLCBpbnQgYmVhY29uX2xvc3RfY291bnQpOworaW50IHdmeF9oaWZfc2V0 X2VkY2FfcXVldWVfcGFyYW1zKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCB1MTYgcXVldWUsCisJCQkJ ICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqYXJnKTsKK2ludCB3Znhf aGlmX2JlYWNvbl90cmFuc21pdChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgYm9vbCBlbmFibGUpOwor aW50IHdmeF9oaWZfdXBkYXRlX2llX2JlYWNvbihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgY29uc3Qg dTggKmllcywgc2l6ZV90IGllc19sZW4pOworaW50IHdmeF9oaWZfc2NhbihzdHJ1Y3Qgd2Z4X3Zp ZiAqd3ZpZiwgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxODAyMTEsCisJCSBpbnQg Y2hhbl9zdGFydCwgaW50IGNoYW5fbnVtKTsKK2ludCB3ZnhfaGlmX3N0b3Bfc2NhbihzdHJ1Y3Qg d2Z4X3ZpZiAqd3ZpZik7CitpbnQgd2Z4X2hpZl9jb25maWd1cmF0aW9uKHN0cnVjdCB3ZnhfZGV2 ICp3ZGV2LCBjb25zdCB1OCAqY29uZiwgc2l6ZV90IGxlbik7CitpbnQgd2Z4X2hpZl9zaHV0ZG93 bihzdHJ1Y3Qgd2Z4X2RldiAqd2Rldik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9u ZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfdHhfbWliLmMgYi9kcml2ZXJzL25ldC93aXJlbGVz cy9zaWxhYnMvd2Z4L2hpZl90eF9taWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAuLmRhZjk2NjY5M2Y2NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dp cmVsZXNzL3NpbGFicy93ZngvaGlmX3R4X21pYi5jCkBAIC0wLDAgKzEsMzMzIEBACisvLyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CisvKgorICogSW1wbGVtZW50YXRpb24g b2YgdGhlIGhvc3QtdG8tY2hpcCBNSUJzIG9mIHRoZSBoYXJkd2FyZSBBUEkuCisgKgorICogQ29w eXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIFNULUVy aWNzc29uIFNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisKKyNpbmNs dWRlICJ3ZnguaCIKKyNpbmNsdWRlICJoaWZfdHguaCIKKyNpbmNsdWRlICJoaWZfdHhfbWliLmgi CisjaW5jbHVkZSAiaGlmX2FwaV9taWIuaCIKKworaW50IHdmeF9oaWZfc2V0X291dHB1dF9wb3dl cihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50IHZhbCkKK3sKKwlzdHJ1Y3Qgd2Z4X2hpZl9taWJf Y3VycmVudF90eF9wb3dlcl9sZXZlbCBhcmcgPSB7CisJCS5wb3dlcl9sZXZlbCA9IGNwdV90b19s ZTMyKHZhbCAqIDEwKSwKKwl9OworCisJcmV0dXJuIHdmeF9oaWZfd3JpdGVfbWliKHd2aWYtPndk ZXYsIHd2aWYtPmlkLAorCQkJCSBISUZfTUlCX0lEX0NVUlJFTlRfVFhfUE9XRVJfTEVWRUwsCisJ CQkJICZhcmcsIHNpemVvZihhcmcpKTsKK30KKworaW50IHdmeF9oaWZfc2V0X2JlYWNvbl93YWtl dXBfcGVyaW9kKHN0cnVjdCB3ZnhfdmlmICp3dmlmLAorCQkJCSAgICAgdW5zaWduZWQgaW50IGR0 aW1faW50ZXJ2YWwsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgbGlzdGVuX2ludGVydmFsKQorewor CXN0cnVjdCB3ZnhfaGlmX21pYl9iZWFjb25fd2FrZV91cF9wZXJpb2QgYXJnID0geworCQkud2Fr ZXVwX3BlcmlvZF9taW4gPSBkdGltX2ludGVydmFsLAorCQkucmVjZWl2ZV9kdGltID0gMCwKKwkJ Lndha2V1cF9wZXJpb2RfbWF4ID0gbGlzdGVuX2ludGVydmFsLAorCX07CisKKwlpZiAoZHRpbV9p bnRlcnZhbCA+IDB4RkYgfHwgbGlzdGVuX2ludGVydmFsID4gMHhGRkZGKQorCQlyZXR1cm4gLUVJ TlZBTDsKKwlyZXR1cm4gd2Z4X2hpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsCisJ CQkJIEhJRl9NSUJfSURfQkVBQ09OX1dBS0VVUF9QRVJJT0QsCisJCQkJICZhcmcsIHNpemVvZihh cmcpKTsKK30KKworaW50IHdmeF9oaWZfc2V0X3JjcGlfcnNzaV90aHJlc2hvbGQoc3RydWN0IHdm eF92aWYgKnd2aWYsCisJCQkJICAgIGludCByc3NpX3Rob2xkLCBpbnQgcnNzaV9oeXN0KQorewor CXN0cnVjdCB3ZnhfaGlmX21pYl9yY3BpX3Jzc2lfdGhyZXNob2xkIGFyZyA9IHsKKwkJLnJvbGxp bmdfYXZlcmFnZV9jb3VudCA9IDgsCisJCS5kZXRlY3Rpb24gPSAxLAorCX07CisKKwlpZiAoIXJz c2lfdGhvbGQgJiYgIXJzc2lfaHlzdCkgeworCQlhcmcudXBwZXJ0aHJlc2ggPSAxOworCQlhcmcu bG93ZXJ0aHJlc2ggPSAxOworCX0gZWxzZSB7CisJCWFyZy51cHBlcl90aHJlc2hvbGQgPSByc3Np X3Rob2xkICsgcnNzaV9oeXN0OworCQlhcmcudXBwZXJfdGhyZXNob2xkID0gKGFyZy51cHBlcl90 aHJlc2hvbGQgKyAxMTApICogMjsKKwkJYXJnLmxvd2VyX3RocmVzaG9sZCA9IHJzc2lfdGhvbGQ7 CisJCWFyZy5sb3dlcl90aHJlc2hvbGQgPSAoYXJnLmxvd2VyX3RocmVzaG9sZCArIDExMCkgKiAy OworCX0KKworCXJldHVybiB3ZnhfaGlmX3dyaXRlX21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwK KwkJCQkgSElGX01JQl9JRF9SQ1BJX1JTU0lfVEhSRVNIT0xELAorCQkJCSAmYXJnLCBzaXplb2Yo YXJnKSk7Cit9CisKK2ludCB3ZnhfaGlmX2dldF9jb3VudGVyc190YWJsZShzdHJ1Y3Qgd2Z4X2Rl diAqd2RldiwgaW50IHZpZl9pZCwKKwkJCSAgICAgICBzdHJ1Y3Qgd2Z4X2hpZl9taWJfZXh0ZW5k ZWRfY291bnRfdGFibGUgKmFyZykKK3sKKwlpZiAod2Z4X2FwaV9vbGRlcl90aGFuKHdkZXYsIDEs IDMpKSB7CisJCS8qIGV4dGVuZGVkX2NvdW50X3RhYmxlIGlzIHdpZGVyIHRoYW4gY291bnRfdGFi bGUgKi8KKwkJbWVtc2V0KGFyZywgMHhGRiwgc2l6ZW9mKCphcmcpKTsKKwkJcmV0dXJuIHdmeF9o aWZfcmVhZF9taWIod2RldiwgdmlmX2lkLCBISUZfTUlCX0lEX0NPVU5URVJTX1RBQkxFLAorCQkJ CSAgICBhcmcsIHNpemVvZihzdHJ1Y3Qgd2Z4X2hpZl9taWJfY291bnRfdGFibGUpKTsKKwl9IGVs c2UgeworCQlyZXR1cm4gd2Z4X2hpZl9yZWFkX21pYih3ZGV2LCB2aWZfaWQsCisJCQkJICAgIEhJ Rl9NSUJfSURfRVhURU5ERURfQ09VTlRFUlNfVEFCTEUsIGFyZywKKwkJCQkgICAgc2l6ZW9mKHN0 cnVjdCB3ZnhfaGlmX21pYl9leHRlbmRlZF9jb3VudF90YWJsZSkpOworCX0KK30KKworaW50IHdm eF9oaWZfc2V0X21hY2FkZHIoc3RydWN0IHdmeF92aWYgKnd2aWYsIHU4ICptYWMpCit7CisJc3Ry dWN0IHdmeF9oaWZfbWliX21hY19hZGRyZXNzIGFyZyA9IHsgfTsKKworCWlmIChtYWMpCisJCWV0 aGVyX2FkZHJfY29weShhcmcubWFjX2FkZHIsIG1hYyk7CisJcmV0dXJuIHdmeF9oaWZfd3JpdGVf bWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLAorCQkJCSBISUZfTUlCX0lEX0RPVDExX01BQ19BRERS RVNTLAorCQkJCSAmYXJnLCBzaXplb2YoYXJnKSk7Cit9CisKK2ludCB3ZnhfaGlmX3NldF9yeF9m aWx0ZXIoc3RydWN0IHdmeF92aWYgKnd2aWYsCisJCQkgIGJvb2wgZmlsdGVyX2Jzc2lkLCBib29s IGZpbHRlcl9wcmJyZXEpCit7CisJc3RydWN0IHdmeF9oaWZfbWliX3J4X2ZpbHRlciBhcmcgPSB7 IH07CisKKwlpZiAoZmlsdGVyX2Jzc2lkKQorCQlhcmcuYnNzaWRfZmlsdGVyID0gMTsKKwlpZiAo IWZpbHRlcl9wcmJyZXEpCisJCWFyZy5md2RfcHJvYmVfcmVxID0gMTsKKwlyZXR1cm4gd2Z4X2hp Zl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsIEhJRl9NSUJfSURfUlhfRklMVEVSLAor CQkJCSAmYXJnLCBzaXplb2YoYXJnKSk7Cit9CisKK2ludCB3ZnhfaGlmX3NldF9iZWFjb25fZmls dGVyX3RhYmxlKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBpbnQgdGJsX2xlbiwKKwkJCQkgICAgY29u c3Qgc3RydWN0IHdmeF9oaWZfaWVfdGFibGVfZW50cnkgKnRibCkKK3sKKwlpbnQgcmV0OworCXN0 cnVjdCB3ZnhfaGlmX21pYl9iY25fZmlsdGVyX3RhYmxlICphcmc7CisJaW50IGJ1Zl9sZW4gPSBz dHJ1Y3Rfc2l6ZShhcmcsIGllX3RhYmxlLCB0YmxfbGVuKTsKKworCWFyZyA9IGt6YWxsb2MoYnVm X2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhcmcpCisJCXJldHVybiAtRU5PTUVNOworCWFyZy0+ bnVtX29mX2luZm9fZWxtdHMgPSBjcHVfdG9fbGUzMih0YmxfbGVuKTsKKwltZW1jcHkoYXJnLT5p ZV90YWJsZSwgdGJsLCBmbGV4X2FycmF5X3NpemUoYXJnLCBpZV90YWJsZSwgdGJsX2xlbikpOwor CXJldCA9IHdmeF9oaWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLAorCQkJCUhJRl9N SUJfSURfQkVBQ09OX0ZJTFRFUl9UQUJMRSwgYXJnLCBidWZfbGVuKTsKKwlrZnJlZShhcmcpOwor CXJldHVybiByZXQ7Cit9CisKK2ludCB3ZnhfaGlmX2JlYWNvbl9maWx0ZXJfY29udHJvbChzdHJ1 Y3Qgd2Z4X3ZpZiAqd3ZpZiwKKwkJCQkgIGludCBlbmFibGUsIGludCBiZWFjb25fY291bnQpCit7 CisJc3RydWN0IHdmeF9oaWZfbWliX2Jjbl9maWx0ZXJfZW5hYmxlIGFyZyA9IHsKKwkJLmVuYWJs ZSA9IGNwdV90b19sZTMyKGVuYWJsZSksCisJCS5iY25fY291bnQgPSBjcHVfdG9fbGUzMihiZWFj b25fY291bnQpLAorCX07CisJcmV0dXJuIHdmeF9oaWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2 aWYtPmlkLAorCQkJCSBISUZfTUlCX0lEX0JFQUNPTl9GSUxURVJfRU5BQkxFLAorCQkJCSAmYXJn LCBzaXplb2YoYXJnKSk7Cit9CisKK2ludCB3ZnhfaGlmX3NldF9vcGVyYXRpb25hbF9tb2RlKHN0 cnVjdCB3ZnhfZGV2ICp3ZGV2LAorCQkJCSBlbnVtIHdmeF9oaWZfb3BfcG93ZXJfbW9kZSBtb2Rl KQoreworCXN0cnVjdCB3ZnhfaGlmX21pYl9nbF9vcGVyYXRpb25hbF9wb3dlcl9tb2RlIGFyZyA9 IHsKKwkJLnBvd2VyX21vZGUgPSBtb2RlLAorCQkud3VwX2luZF9hY3RpdmF0aW9uID0gMSwKKwl9 OworCisJcmV0dXJuIHdmeF9oaWZfd3JpdGVfbWliKHdkZXYsIC0xLCBISUZfTUlCX0lEX0dMX09Q RVJBVElPTkFMX1BPV0VSX01PREUsCisJCQkJICZhcmcsIHNpemVvZihhcmcpKTsKK30KKworaW50 IHdmeF9oaWZfc2V0X3RlbXBsYXRlX2ZyYW1lKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBzdHJ1Y3Qg c2tfYnVmZiAqc2tiLAorCQkJICAgICAgIHU4IGZyYW1lX3R5cGUsIGludCBpbml0X3JhdGUpCit7 CisJc3RydWN0IHdmeF9oaWZfbWliX3RlbXBsYXRlX2ZyYW1lICphcmc7CisKKwlXQVJOKHNrYi0+ bGVuID4gSElGX0FQSV9NQVhfVEVNUExBVEVfRlJBTUVfU0laRSwgImZyYW1lIGlzIHRvbyBiaWci KTsKKwlza2JfcHVzaChza2IsIDQpOworCWFyZyA9IChzdHJ1Y3Qgd2Z4X2hpZl9taWJfdGVtcGxh dGVfZnJhbWUgKilza2ItPmRhdGE7CisJc2tiX3B1bGwoc2tiLCA0KTsKKwlhcmctPmluaXRfcmF0 ZSA9IGluaXRfcmF0ZTsKKwlhcmctPmZyYW1lX3R5cGUgPSBmcmFtZV90eXBlOworCWFyZy0+ZnJh bWVfbGVuZ3RoID0gY3B1X3RvX2xlMTYoc2tiLT5sZW4pOworCXJldHVybiB3ZnhfaGlmX3dyaXRl X21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwgSElGX01JQl9JRF9URU1QTEFURV9GUkFNRSwKKwkJ CQkgYXJnLCBzaXplb2YoKmFyZykgKyBza2ItPmxlbik7Cit9CisKK2ludCB3ZnhfaGlmX3NldF9t ZnAoc3RydWN0IHdmeF92aWYgKnd2aWYsIGJvb2wgY2FwYWJsZSwgYm9vbCByZXF1aXJlZCkKK3sK KwlzdHJ1Y3Qgd2Z4X2hpZl9taWJfcHJvdGVjdGVkX21nbXRfcG9saWN5IGFyZyA9IHsgfTsKKwor CVdBUk4ocmVxdWlyZWQgJiYgIWNhcGFibGUsICJpbmNvaGVyZW50IGFyZ3VtZW50cyIpOworCWlm IChjYXBhYmxlKSB7CisJCWFyZy5wbWZfZW5hYmxlID0gMTsKKwkJYXJnLmhvc3RfZW5jX2F1dGhf ZnJhbWVzID0gMTsKKwl9CisJaWYgKCFyZXF1aXJlZCkKKwkJYXJnLnVucG1mX2FsbG93ZWQgPSAx OworCXJldHVybiB3ZnhfaGlmX3dyaXRlX21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwKKwkJCQkg SElGX01JQl9JRF9QUk9URUNURURfTUdNVF9QT0xJQ1ksCisJCQkJICZhcmcsIHNpemVvZihhcmcp KTsKK30KKworaW50IHdmeF9oaWZfc2V0X2Jsb2NrX2Fja19wb2xpY3koc3RydWN0IHdmeF92aWYg Knd2aWYsCisJCQkJIHU4IHR4X3RpZF9wb2xpY3ksIHU4IHJ4X3RpZF9wb2xpY3kpCit7CisJc3Ry dWN0IHdmeF9oaWZfbWliX2Jsb2NrX2Fja19wb2xpY3kgYXJnID0geworCQkuYmxvY2tfYWNrX3R4 X3RpZF9wb2xpY3kgPSB0eF90aWRfcG9saWN5LAorCQkuYmxvY2tfYWNrX3J4X3RpZF9wb2xpY3kg PSByeF90aWRfcG9saWN5LAorCX07CisKKwlyZXR1cm4gd2Z4X2hpZl93cml0ZV9taWIod3ZpZi0+ d2Rldiwgd3ZpZi0+aWQsCisJCQkJIEhJRl9NSUJfSURfQkxPQ0tfQUNLX1BPTElDWSwKKwkJCQkg JmFyZywgc2l6ZW9mKGFyZykpOworfQorCitpbnQgd2Z4X2hpZl9zZXRfYXNzb2NpYXRpb25fbW9k ZShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50IGFtcGR1X2RlbnNpdHksCisJCQkJIGJvb2wgZ3Jl ZW5maWVsZCwgYm9vbCBzaG9ydF9wcmVhbWJsZSkKK3sKKwlzdHJ1Y3Qgd2Z4X2hpZl9taWJfc2V0 X2Fzc29jaWF0aW9uX21vZGUgYXJnID0geworCQkucHJlYW1idHlwZV91c2UgPSAxLAorCQkubW9k ZSA9IDEsCisJCS5zcGFjaW5nID0gMSwKKwkJLnNob3J0X3ByZWFtYmxlID0gc2hvcnRfcHJlYW1i bGUsCisJCS5ncmVlbmZpZWxkID0gZ3JlZW5maWVsZCwKKwkJLm1wZHVfc3RhcnRfc3BhY2luZyA9 IGFtcGR1X2RlbnNpdHksCisJfTsKKworCXJldHVybiB3ZnhfaGlmX3dyaXRlX21pYih3dmlmLT53 ZGV2LCB3dmlmLT5pZCwKKwkJCQkgSElGX01JQl9JRF9TRVRfQVNTT0NJQVRJT05fTU9ERSwKKwkJ CQkgJmFyZywgc2l6ZW9mKGFyZykpOworfQorCitpbnQgd2Z4X2hpZl9zZXRfdHhfcmF0ZV9yZXRy eV9wb2xpY3koc3RydWN0IHdmeF92aWYgKnd2aWYsCisJCQkJICAgICBpbnQgcG9saWN5X2luZGV4 LCB1OCAqcmF0ZXMpCit7CisJc3RydWN0IHdmeF9oaWZfbWliX3NldF90eF9yYXRlX3JldHJ5X3Bv bGljeSAqYXJnOworCXNpemVfdCBzaXplID0gc3RydWN0X3NpemUoYXJnLCB0eF9yYXRlX3JldHJ5 X3BvbGljeSwgMSk7CisJaW50IHJldDsKKworCWFyZyA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5F TCk7CisJaWYgKCFhcmcpCisJCXJldHVybiAtRU5PTUVNOworCWFyZy0+bnVtX3R4X3JhdGVfcG9s aWNpZXMgPSAxOworCWFyZy0+dHhfcmF0ZV9yZXRyeV9wb2xpY3lbMF0ucG9saWN5X2luZGV4ID0g cG9saWN5X2luZGV4OworCWFyZy0+dHhfcmF0ZV9yZXRyeV9wb2xpY3lbMF0uc2hvcnRfcmV0cnlf Y291bnQgPSAyNTU7CisJYXJnLT50eF9yYXRlX3JldHJ5X3BvbGljeVswXS5sb25nX3JldHJ5X2Nv dW50ID0gMjU1OworCWFyZy0+dHhfcmF0ZV9yZXRyeV9wb2xpY3lbMF0uZmlyc3RfcmF0ZV9zZWwg PSAxOworCWFyZy0+dHhfcmF0ZV9yZXRyeV9wb2xpY3lbMF0udGVybWluYXRlID0gMTsKKwlhcmct PnR4X3JhdGVfcmV0cnlfcG9saWN5WzBdLmNvdW50X2luaXQgPSAxOworCW1lbWNweSgmYXJnLT50 eF9yYXRlX3JldHJ5X3BvbGljeVswXS5yYXRlcywgcmF0ZXMsCisJICAgICAgIHNpemVvZihhcmct PnR4X3JhdGVfcmV0cnlfcG9saWN5WzBdLnJhdGVzKSk7CisJcmV0ID0gd2Z4X2hpZl93cml0ZV9t aWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsCisJCQkJSElGX01JQl9JRF9TRVRfVFhfUkFURV9SRVRS WV9QT0xJQ1ksCisJCQkJYXJnLCBzaXplKTsKKwlrZnJlZShhcmcpOworCXJldHVybiByZXQ7Cit9 CisKK2ludCB3ZnhfaGlmX2tlZXBfYWxpdmVfcGVyaW9kKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBp bnQgcGVyaW9kKQoreworCXN0cnVjdCB3ZnhfaGlmX21pYl9rZWVwX2FsaXZlX3BlcmlvZCBhcmcg PSB7CisJCS5rZWVwX2FsaXZlX3BlcmlvZCA9IGNwdV90b19sZTE2KHBlcmlvZCksCisJfTsKKwor CXJldHVybiB3ZnhfaGlmX3dyaXRlX21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwKKwkJCQkgSElG X01JQl9JRF9LRUVQX0FMSVZFX1BFUklPRCwKKwkJCQkgJmFyZywgc2l6ZW9mKGFyZykpOworfTsK KworaW50IHdmeF9oaWZfc2V0X2FycF9pcHY0X2ZpbHRlcihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwg aW50IGlkeCwgX19iZTMyICphZGRyKQoreworCXN0cnVjdCB3ZnhfaGlmX21pYl9hcnBfaXBfYWRk cl90YWJsZSBhcmcgPSB7CisJCS5jb25kaXRpb25faWR4ID0gaWR4LAorCQkuYXJwX2VuYWJsZSA9 IEhJRl9BUlBfTlNfRklMVEVSSU5HX0RJU0FCTEUsCisJfTsKKworCWlmIChhZGRyKSB7CisJCS8q IENhdXRpb246IHR5cGUgb2YgYWRkciBpcyBfX2JlMzIgKi8KKwkJbWVtY3B5KGFyZy5pcHY0X2Fk ZHJlc3MsIGFkZHIsIHNpemVvZihhcmcuaXB2NF9hZGRyZXNzKSk7CisJCWFyZy5hcnBfZW5hYmxl ID0gSElGX0FSUF9OU19GSUxURVJJTkdfRU5BQkxFOworCX0KKwlyZXR1cm4gd2Z4X2hpZl93cml0 ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsCisJCQkJIEhJRl9NSUJfSURfQVJQX0lQX0FERFJF U1NFU19UQUJMRSwKKwkJCQkgJmFyZywgc2l6ZW9mKGFyZykpOworfQorCitpbnQgd2Z4X2hpZl91 c2VfbXVsdGlfdHhfY29uZihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgYm9vbCBlbmFibGUpCit7CisJ c3RydWN0IHdmeF9oaWZfbWliX2dsX3NldF9tdWx0aV9tc2cgYXJnID0geworCQkuZW5hYmxlX211 bHRpX3R4X2NvbmYgPSBlbmFibGUsCisJfTsKKworCXJldHVybiB3ZnhfaGlmX3dyaXRlX21pYih3 ZGV2LCAtMSwgSElGX01JQl9JRF9HTF9TRVRfTVVMVElfTVNHLAorCQkJCSAmYXJnLCBzaXplb2Yo YXJnKSk7Cit9CisKK2ludCB3ZnhfaGlmX3NldF91YXBzZF9pbmZvKHN0cnVjdCB3ZnhfdmlmICp3 dmlmLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlzdHJ1Y3Qgd2Z4X2hpZl9taWJfc2V0X3VhcHNk X2luZm9ybWF0aW9uIGFyZyA9IHsgfTsKKworCWlmICh2YWwgJiBCSVQoSUVFRTgwMjExX0FDX1ZP KSkKKwkJYXJnLnRyaWdfdm9pY2UgPSAxOworCWlmICh2YWwgJiBCSVQoSUVFRTgwMjExX0FDX1ZJ KSkKKwkJYXJnLnRyaWdfdmlkZW8gPSAxOworCWlmICh2YWwgJiBCSVQoSUVFRTgwMjExX0FDX0JF KSkKKwkJYXJnLnRyaWdfYmUgPSAxOworCWlmICh2YWwgJiBCSVQoSUVFRTgwMjExX0FDX0JLKSkK KwkJYXJnLnRyaWdfYmNrZ3JuZCA9IDE7CisJcmV0dXJuIHdmeF9oaWZfd3JpdGVfbWliKHd2aWYt PndkZXYsIHd2aWYtPmlkLAorCQkJCSBISUZfTUlCX0lEX1NFVF9VQVBTRF9JTkZPUk1BVElPTiwK KwkJCQkgJmFyZywgc2l6ZW9mKGFyZykpOworfQorCitpbnQgd2Z4X2hpZl9lcnBfdXNlX3Byb3Rl Y3Rpb24oc3RydWN0IHdmeF92aWYgKnd2aWYsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCB3Znhf aGlmX21pYl9ub25fZXJwX3Byb3RlY3Rpb24gYXJnID0geworCQkudXNlX2N0c190b19zZWxmID0g ZW5hYmxlLAorCX07CisKKwlyZXR1cm4gd2Z4X2hpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3Zp Zi0+aWQsCisJCQkJIEhJRl9NSUJfSURfTk9OX0VSUF9QUk9URUNUSU9OLAorCQkJCSAmYXJnLCBz aXplb2YoYXJnKSk7Cit9CisKK2ludCB3ZnhfaGlmX3Nsb3RfdGltZShzdHJ1Y3Qgd2Z4X3ZpZiAq d3ZpZiwgaW50IHZhbCkKK3sKKwlzdHJ1Y3Qgd2Z4X2hpZl9taWJfc2xvdF90aW1lIGFyZyA9IHsK KwkJLnNsb3RfdGltZSA9IGNwdV90b19sZTMyKHZhbCksCisJfTsKKworCXJldHVybiB3ZnhfaGlm X3dyaXRlX21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwgSElGX01JQl9JRF9TTE9UX1RJTUUsCisJ CQkJICZhcmcsIHNpemVvZihhcmcpKTsKK30KKworaW50IHdmeF9oaWZfd2VwX2RlZmF1bHRfa2V5 X2lkKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBpbnQgdmFsKQoreworCXN0cnVjdCB3ZnhfaGlmX21p Yl93ZXBfZGVmYXVsdF9rZXlfaWQgYXJnID0geworCQkud2VwX2RlZmF1bHRfa2V5X2lkID0gdmFs LAorCX07CisKKwlyZXR1cm4gd2Z4X2hpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQs CisJCQkJIEhJRl9NSUJfSURfRE9UMTFfV0VQX0RFRkFVTFRfS0VZX0lELAorCQkJCSAmYXJnLCBz aXplb2YoYXJnKSk7Cit9CisKK2ludCB3ZnhfaGlmX3J0c190aHJlc2hvbGQoc3RydWN0IHdmeF92 aWYgKnd2aWYsIGludCB2YWwpCit7CisJc3RydWN0IHdmeF9oaWZfbWliX2RvdDExX3J0c190aHJl c2hvbGQgYXJnID0geworCQkudGhyZXNob2xkID0gY3B1X3RvX2xlMzIodmFsID49IDAgPyB2YWwg OiAweEZGRkYpLAorCX07CisKKwlyZXR1cm4gd2Z4X2hpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwg d3ZpZi0+aWQsCisJCQkJIEhJRl9NSUJfSURfRE9UMTFfUlRTX1RIUkVTSE9MRCwKKwkJCQkgJmFy Zywgc2l6ZW9mKGFyZykpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2ls YWJzL3dmeC9oaWZfdHhfbWliLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hp Zl90eF9taWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmU3ZTU1 NmIwNWM5YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93 ZngvaGlmX3R4X21pYi5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wLW9ubHkgKi8KKy8qCisgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgaG9zdC10 by1jaGlwIE1JQnMgb2YgdGhlIGhhcmR3YXJlIEFQSS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIw MTctMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAx MCwgU1QtRXJpY3Nzb24KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgU1QtRXJpY3Nzb24gU0EKKyAq LworI2lmbmRlZiBXRlhfSElGX1RYX01JQl9ICisjZGVmaW5lIFdGWF9ISUZfVFhfTUlCX0gKKwor I2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBza19idWZmOworc3RydWN0IHdmeF92 aWY7CitzdHJ1Y3Qgd2Z4X2RldjsKK3N0cnVjdCB3ZnhfaGlmX2llX3RhYmxlX2VudHJ5Oworc3Ry dWN0IHdmeF9oaWZfbWliX2V4dGVuZGVkX2NvdW50X3RhYmxlOworCitpbnQgd2Z4X2hpZl9zZXRf b3V0cHV0X3Bvd2VyKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBpbnQgdmFsKTsKK2ludCB3ZnhfaGlm X3NldF9iZWFjb25fd2FrZXVwX3BlcmlvZChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwKKwkJCQkgICAg IHVuc2lnbmVkIGludCBkdGltX2ludGVydmFsLAorCQkJCSAgICAgdW5zaWduZWQgaW50IGxpc3Rl bl9pbnRlcnZhbCk7CitpbnQgd2Z4X2hpZl9zZXRfcmNwaV9yc3NpX3RocmVzaG9sZChzdHJ1Y3Qg d2Z4X3ZpZiAqd3ZpZiwKKwkJCQkgICAgaW50IHJzc2lfdGhvbGQsIGludCByc3NpX2h5c3QpOwor aW50IHdmeF9oaWZfZ2V0X2NvdW50ZXJzX3RhYmxlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQg dmlmX2lkLAorCQkJICAgICAgIHN0cnVjdCB3ZnhfaGlmX21pYl9leHRlbmRlZF9jb3VudF90YWJs ZSAqYXJnKTsKK2ludCB3ZnhfaGlmX3NldF9tYWNhZGRyKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCB1 OCAqbWFjKTsKK2ludCB3ZnhfaGlmX3NldF9yeF9maWx0ZXIoc3RydWN0IHdmeF92aWYgKnd2aWYs CisJCQkgIGJvb2wgZmlsdGVyX2Jzc2lkLCBib29sIGZ3ZF9wcm9iZV9yZXEpOworaW50IHdmeF9o aWZfc2V0X2JlYWNvbl9maWx0ZXJfdGFibGUoc3RydWN0IHdmeF92aWYgKnd2aWYsIGludCB0Ymxf bGVuLAorCQkJCSAgICBjb25zdCBzdHJ1Y3Qgd2Z4X2hpZl9pZV90YWJsZV9lbnRyeSAqdGJsKTsK K2ludCB3ZnhfaGlmX2JlYWNvbl9maWx0ZXJfY29udHJvbChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwK KwkJCQkgIGludCBlbmFibGUsIGludCBiZWFjb25fY291bnQpOworaW50IHdmeF9oaWZfc2V0X29w ZXJhdGlvbmFsX21vZGUoc3RydWN0IHdmeF9kZXYgKndkZXYsCisJCQkJIGVudW0gd2Z4X2hpZl9v cF9wb3dlcl9tb2RlIG1vZGUpOworaW50IHdmeF9oaWZfc2V0X3RlbXBsYXRlX2ZyYW1lKHN0cnVj dCB3ZnhfdmlmICp3dmlmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICAgIHU4IGZyYW1l X3R5cGUsIGludCBpbml0X3JhdGUpOworaW50IHdmeF9oaWZfc2V0X21mcChzdHJ1Y3Qgd2Z4X3Zp ZiAqd3ZpZiwgYm9vbCBjYXBhYmxlLCBib29sIHJlcXVpcmVkKTsKK2ludCB3ZnhfaGlmX3NldF9i bG9ja19hY2tfcG9saWN5KHN0cnVjdCB3ZnhfdmlmICp3dmlmLAorCQkJCSB1OCB0eF90aWRfcG9s aWN5LCB1OCByeF90aWRfcG9saWN5KTsKK2ludCB3ZnhfaGlmX3NldF9hc3NvY2lhdGlvbl9tb2Rl KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBpbnQgYW1wZHVfZGVuc2l0eSwKKwkJCQkgYm9vbCBncmVl bmZpZWxkLCBib29sIHNob3J0X3ByZWFtYmxlKTsKK2ludCB3ZnhfaGlmX3NldF90eF9yYXRlX3Jl dHJ5X3BvbGljeShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwKKwkJCQkgICAgIGludCBwb2xpY3lfaW5k ZXgsIHU4ICpyYXRlcyk7CitpbnQgd2Z4X2hpZl9rZWVwX2FsaXZlX3BlcmlvZChzdHJ1Y3Qgd2Z4 X3ZpZiAqd3ZpZiwgaW50IHBlcmlvZCk7CitpbnQgd2Z4X2hpZl9zZXRfYXJwX2lwdjRfZmlsdGVy KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBpbnQgaWR4LCBfX2JlMzIgKmFkZHIpOworaW50IHdmeF9o aWZfdXNlX211bHRpX3R4X2NvbmYoc3RydWN0IHdmeF9kZXYgKndkZXYsIGJvb2wgZW5hYmxlKTsK K2ludCB3ZnhfaGlmX3NldF91YXBzZF9pbmZvKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCB1bnNpZ25l ZCBsb25nIHZhbCk7CitpbnQgd2Z4X2hpZl9lcnBfdXNlX3Byb3RlY3Rpb24oc3RydWN0IHdmeF92 aWYgKnd2aWYsIGJvb2wgZW5hYmxlKTsKK2ludCB3ZnhfaGlmX3Nsb3RfdGltZShzdHJ1Y3Qgd2Z4 X3ZpZiAqd3ZpZiwgaW50IHZhbCk7CitpbnQgd2Z4X2hpZl93ZXBfZGVmYXVsdF9rZXlfaWQoc3Ry dWN0IHdmeF92aWYgKnd2aWYsIGludCB2YWwpOworaW50IHdmeF9oaWZfcnRzX3RocmVzaG9sZChz dHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50IHZhbCk7CisKKyNlbmRpZgotLSAKMi4zMy4wCgo=