Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp3292829pxf; Mon, 15 Mar 2021 06:28:00 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwGgeOIC3GEQyQqlL28+cZXve2zYbTQ0iNxJ8lKFJAsiRZ/cbp+a6iBBZOCl12Wv4s/Drej X-Received: by 2002:a17:906:b015:: with SMTP id v21mr23014640ejy.243.1615814879882; Mon, 15 Mar 2021 06:27:59 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1615814879; cv=pass; d=google.com; s=arc-20160816; b=Cpt59FODjQ86Xv4A7XrWqBJKLEvJ9RU8hwiq/qt/dXhWOOqnGviDGIghlmK82EUb0K Ql285RT8IY/hGDfdq/hqlgAaX9g+7zqT29A3mgYq+5L/wcZLJjKY8f3YONWKnZUbZrBc PaM+cWv6LpgkzpKqUM858R6qyevgrZdxSdWhtEq45urUgsmoZs9YghatZsPu+pxLtn2N NezZCdSyFcZhLetGBkVxJ7m81VVxLDFYVxIrrqW1VwpsBibfC1QZaag1emoql92tZkHb 3Hqx6b797Ab7i9KHzKS1S6nrKAByaX0D8HnJzs7uhoY15dLA/KSy21SUZMw3mBGa0VfR f5Xw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=6x/LBwPqnNrF+miGmRM/Jp4jdpMsxuLMcpACsZ9uzQM=; b=YjqzklKgQjO0A8Hzn5Dlex+pkcjAD+KbuGefNfHpBmQe+aSY9CjIdafQ1cGG7u9Hlw 9ljyx9YKMuyRVYos1mKUqImvNsbUANFDABVG+/aJGYYOQym8BpRdcp9B72Q88qyOBiJU Zq7PrqBbWfYuMJq3ww838zezvwgf4GHxnwCAFa3zzkUyyLqAWGWP9rR7YNaKZAyb/eLk ok/uON++xzoJM+CsykRRuKlGiAscUjUqNlsU0YmC/aM0ytBNAUsP//OWYP59mg7ntCDi 0/1t5C0EgGXwMMB2Y2PKBmoEgjBD3rIT0JDNe32yF3OLj1Y0ORGyrdlsxO1taff5sP24 +rBA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@silabs.onmicrosoft.com header.s=selector2-silabs-onmicrosoft-com header.b="VWSERhd/"; arc=pass (i=1 spf=pass spfdomain=silabs.com dkim=pass dkdomain=silabs.com dmarc=pass fromdomain=silabs.com); spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id w10si10960044ejv.500.2021.03.15.06.27.35; Mon, 15 Mar 2021 06:27:59 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@silabs.onmicrosoft.com header.s=selector2-silabs-onmicrosoft-com header.b="VWSERhd/"; arc=pass (i=1 spf=pass spfdomain=silabs.com dkim=pass dkdomain=silabs.com dmarc=pass fromdomain=silabs.com); spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231276AbhCON03 (ORCPT + 99 others); Mon, 15 Mar 2021 09:26:29 -0400 Received: from mail-mw2nam10on2065.outbound.protection.outlook.com ([40.107.94.65]:23009 "EHLO NAM10-MW2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S230429AbhCON0A (ORCPT ); Mon, 15 Mar 2021 09:26:00 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JRjPRk8PCXfMdysiJeOxH4rPaGwMxZ172unPEuZqlOFHH0n3ly+Sz4zEGYW/LCNKy01E/TStr/EaE4XDtj3/jC5ZpaVcIX9lkRK7KUqrZVNR7MLinQEfQ+XwXOHa+CZUM4V40PKZttKvizG46rdll5sIfVRCQcp5bUU1KJD1jEDyPjuXTLgFGASaOZD/xGFOqyrY1V08XxDFZv/uR18Oq2lq1Fu3EQryicaGTqH6M/Dvg+whIBLfAbFGNcDX1BJWNrXlbOvdlSop4gXR8XflAbskQlxsupkeLTaA/YqLVTSBuGQBtBcB5xyCY+8ZerM7lu3FmXWMrTg386IdO7EjtQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6x/LBwPqnNrF+miGmRM/Jp4jdpMsxuLMcpACsZ9uzQM=; b=ZsSg4h7T4/lV5WyGvukxQ+Qq5rfWr5jL8nwTfCv6o+0wI+696C0RSk1W1Ywt943/b0r86kg6kZXiWKdlFDW+iAXElU8iZrWTyA9Tu9lerWvgooZlZ2gaU2A42Ip9fMfjc0dBOFRW3s/7tnRPTAmuLWy5nQwGu/0kaMB/iMrKhp37D0w3bktCb4J7dDh+zRRpu4N5y5XR1OscArsbufjK6vO3s7vqIn4MYdTYyJbzZSag8tTgEEfiW979m8wQo10fJiFqXgB+tHZFbK2+nhcCZKFxdJcJjPl3BxiNouvU3s+NJEZpELKuZmQa2cwce9PZYgSXE/XWa7HTFpMVuJ+cVw== 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=6x/LBwPqnNrF+miGmRM/Jp4jdpMsxuLMcpACsZ9uzQM=; b=VWSERhd/+fLY9iHUnWd8OXFb/+U4RFy1ni4B016SXMkN+3PMf71Ior6NAwh+IMFZ7j+Vdmj9oih/+92OOsp0PEDcgUnN1hImBXM4WC4Gb3b49E+WMCzB4vCZbZD/W2fV9Cvq7jCA+MlYh7tzUru0bosJ9L+Plel+280vBVUGzkY= 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 SA0PR11MB4544.namprd11.prod.outlook.com (2603:10b6:806:92::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3933.32; Mon, 15 Mar 2021 13:25:58 +0000 Received: from SN6PR11MB2718.namprd11.prod.outlook.com ([fe80::41bc:5ce:dfa0:9701]) by SN6PR11MB2718.namprd11.prod.outlook.com ([fe80::41bc:5ce:dfa0:9701%7]) with mapi id 15.20.3933.032; Mon, 15 Mar 2021 13:25:58 +0000 From: Jerome Pouiller To: linux-wireless@vger.kernel.org, netdev@vger.kernel.org Cc: devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org, Greg Kroah-Hartman , Kalle Valo , "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 v5 13/24] wfx: add hif_tx*.c/hif_tx*.h Date: Mon, 15 Mar 2021 14:24:50 +0100 Message-Id: <20210315132501.441681-14-Jerome.Pouiller@silabs.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210315132501.441681-1-Jerome.Pouiller@silabs.com> References: <20210315132501.441681-1-Jerome.Pouiller@silabs.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 X-Originating-IP: [2a01:e35:2435:66a0:544b:f17b:7ae8:fb7] X-ClientProxiedBy: SN4PR0801CA0014.namprd08.prod.outlook.com (2603:10b6:803:29::24) To SN6PR11MB2718.namprd11.prod.outlook.com (2603:10b6:805:63::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from pc-42.silabs.com (2a01:e35:2435:66a0:544b:f17b:7ae8:fb7) by SN4PR0801CA0014.namprd08.prod.outlook.com (2603:10b6:803:29::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3933.32 via Frontend Transport; Mon, 15 Mar 2021 13:25:55 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: aba171f9-6e60-40d3-2e20-08d8e7b5de60 X-MS-TrafficTypeDiagnostic: SA0PR11MB4544: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:21; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 3ZM+fLnZkpJH+SFCEOg9W+wMjAfCn0B6gLG36Ml4YD4gcLzU9HB33PVDhJvvJTIYD9O2CoUoRU8pmPJWWNuLZBfmYuJpe4h2FYcfKfbiltVGsr186XmkUYEJrwsxMHR9kEIvBOj+cbJ1xLJnTDIgqr9RtDaobX3sgUweCKhCLL2oG7XzHKXcwC4FEa4y3j3EhXoqECXVtKOlt1iZMHbW/Hgau8ycRvDjSLeHRSkqR0dFP4INzAGiHAIz6IgDnjwzIlgzcGWbroHhezlf1AKZF/1XL6uugr3kp16maB8ObrXXZkbl+IxDP25vxNKpC0xIQ1tvl5Sggj/FAvPKNH/vw3OMIzeDN15obD2rfrKsMeWUy9PRASEzs0uuQWN2igdx6bKLem5QM8PZJP4VAoIbf5RbClLT62zxFXF7Rw+aXvwvTQ/G1Z0OPT46v+k9Qh9YBFteyB10okemR/aW59WDyWTOSjrLIUfPPaxbYlZZYzDXbZCekfGMFuaj4sQ+sXcCO8ugdajaPBVCwrbI8YmTCXQI0SLVBl43X1mvQpSGfDIangA6ZG9eVATIXOgXg77e 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:(346002)(396003)(366004)(376002)(39850400004)(136003)(66574015)(8676002)(186003)(52116002)(86362001)(5660300002)(6486002)(7696005)(2906002)(83380400001)(4326008)(66476007)(16526019)(2616005)(30864003)(107886003)(66946007)(8936002)(66556008)(1076003)(478600001)(6666004)(36756003)(7416002)(316002)(54906003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?MFl6bmRJUXdTWUovbGMybkZPOVZtalM2clJqVi9SY09sTUxKbytkUktheTBZ?= =?utf-8?B?NWpFcUVVMkhJMkt2M1FzWnBETmd0Ui9tTjVaLzBKd1huZFIyY0FnNk4veXcx?= =?utf-8?B?VVBhbFJ4cEhWRUNUNkxCZmFyYnU1N1BqVHJTdTBybndJNE1lK0Nwc2tvOE1D?= =?utf-8?B?aG4yZjdPSE5wQUxnMjRLK1pvcUxwV2wwK2ZvRlhteG54N0tEd24zSUhZUS9E?= =?utf-8?B?OG9ZL0tmQVgvQmRVUFlrLzMzREhiMW5DSXBmMldDVE5DL1dsdVJra2NYb3FO?= =?utf-8?B?b0J2dnhQL3N0d3Z3SlQ4QXZJK0NhSkFZU2ZkbG0wNzNUalZjUmR1KzBDSk9M?= =?utf-8?B?cE9mM25XVnV3SmRBQ0lHT3BHRTMrTURsSEJHUittM0I1aEdNTTRUb0pQeDEx?= =?utf-8?B?Y1grRVFjKzl4TUFHbWpKN2x2V1EvckZTaXd6Ym1pS1FOS01TdmNDZ1ViNWZa?= =?utf-8?B?VDZMRXBWRGtsS3U5TWx5MHFMbUw4QXpFeDd6YndEaUFrK3lzdU1DeWFCWW54?= =?utf-8?B?djNwM0ZJdmdTR0Z0eHZ2R2tDUmY2MklaQ21hVDhNdHN1TCtHNko0USs3NUky?= =?utf-8?B?c25DQXVXS2VpRThQZXZRVFpLcEF6Z2oveVgzaVo0c0xLMFJOWlhZdjRZdUZJ?= =?utf-8?B?eE1PREJtRWIwem9QK21nc0M2aDdtaEJIL29aRVFMeldVU3hqNXlFU2NudzBV?= =?utf-8?B?THdLRzZVT0RzUThtcFAwcVBaMkZramtaOG9XanVOYklyTFNPYWt3NGhHTWtG?= =?utf-8?B?eFo5MkkwTDRKYnRHbkgreWxwU2FaMUZva1VIbERFQ3BSc3habmQ2M0c1TkV2?= =?utf-8?B?UEZHUkcwdkhjYTgwSTdhQmhMc3lGTllqMEpKRVRpaVNVczc3M3V5cmIvT1dO?= =?utf-8?B?TEF4SzZuSjdsakt3OUdldEVsdVlrQ2ZxM3B3cSt1c0luVU5mTUNYVFNGUy9j?= =?utf-8?B?RUVMaFlxQkRDaFYyM2lDcXc0VGVXM1J4dnNDL0lrSlZud1VUbEZUVnJ1Nytz?= =?utf-8?B?RFRjVWpVbWE4N3BrRmg2N0RqeGVyODVkSDVPbHlUdWw1aHRFcXpKQTFqMzM4?= =?utf-8?B?UkxyREJMVGRSamlXa1FjdmVwN0ZOM2M5ZllqQ3RDb0RxKzJzV2l5TWtadXVw?= =?utf-8?B?RFRDb1I0ajBuclZqb3VIdmE4cGgrekpqMCt6WlJHRnJkbG1tWmltcjcyRndO?= =?utf-8?B?Q2J6MWthTU9pdVZoRE1UajdMS05XaFpFRFExZmw1bHErVzJESGdwNHZ0OXdP?= =?utf-8?B?bSsxQVZRcHZ6NmpxRTF1d1dtajhTdG1OSFlMSk5wdWltVWtrcFZtb0ZMNDJ5?= =?utf-8?B?TGc5bi9CdWVwU2ZxcXV4dGJpTU9GdHpFbExTamlMMU5hdXkraGhOS2owck5q?= =?utf-8?B?eEFMdUdxWDA0Ry9udnpZNTJ6U2tocnZMS0IxdnFzN3FwYWl0cmxET2g0R3Nm?= =?utf-8?B?VEhuVWp3VFdRYWFOUXB6Y0RiUVhnWldaS2xOU0swUG5saW1KTEZUak94ZlM0?= =?utf-8?B?bjd1SzVYV01xQVNKT0JFQktqY2xxcHluTmZqdzh2cmY4V0dYU3drZjU5RUFq?= =?utf-8?B?K29KNm5ZME5jU3BBYUwwalJybEVoaGlKbUQyU3RqY3M2VnVGc3krSHVaYXgr?= =?utf-8?B?TlBnQy9LZUVXdE5TQnJhdndpV04rTG5LYWFpSmhvWG1jcXEyTHc5eDhNa2RI?= =?utf-8?B?SHp5WHBlQURBUWxjRWg5dlQwdFd2V0psdHVrQi9rWjJlRTNta2NnRWJ6cHR1?= =?utf-8?B?K20vdkpJcEx6SEhLTmVTNW4vbzdHWWliYUZBUXg5NzJ3MUw3QmIvTVA3Tmhu?= =?utf-8?B?eWYveW1MaCtaU3NyMzNHUXdFaC9rMkJDdmw2S3VtVDJRalh1SjI3SVFUT2pK?= =?utf-8?Q?6+bqkoomDfd24?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: aba171f9-6e60-40d3-2e20-08d8e7b5de60 X-MS-Exchange-CrossTenant-AuthSource: SN6PR11MB2718.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Mar 2021 13:25:58.7252 (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: kBVFU5nmaGrxa8GywE+qDyX/ilp3ajm83iCLNMsHEluyBlePNss0VT1qS/PCTQacrJzccApM5TfbYgf8gJHZpA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR11MB4544 Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org RnJvbTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29tPgoKU2ln bmVkLW9mZi1ieTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29t PgotLS0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX3R4LmMgICAgIHwgNTI3 ICsrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlm X3R4LmggICAgIHwgIDYwICsrKwogZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZf dHhfbWliLmMgfCAzMjQgKysrKysrKysrKysrCiBkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMv d2Z4L2hpZl90eF9taWIuaCB8ICA0OSArKwogNCBmaWxlcyBjaGFuZ2VkLCA5NjAgaW5zZXJ0aW9u cygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngv aGlmX3R4LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMv d2Z4L2hpZl90eC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2ls YWJzL3dmeC9oaWZfdHhfbWliLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJl bGVzcy9zaWxhYnMvd2Z4L2hpZl90eF9taWIuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dp cmVsZXNzL3NpbGFicy93ZngvaGlmX3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMv d2Z4L2hpZl90eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNjI2 YTZiNWFlZTFlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJz L3dmeC9oaWZfdHguYwpAQCAtMCwwICsxLDUyNyBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAtb25seQorLyoKKyAqIEltcGxlbWVudGF0aW9uIG9mIGhvc3QtdG8tY2hpcCBj b21tYW5kcyAoYWthIHJlcXVlc3QvY29uZmlybWF0aW9uKSBvZiBXRnh4eAorICogU3BsaXQgTWFj IChXU00pIEFQSS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJv cmF0b3JpZXMsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJpY3Nzb24KKyAqLwor I2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisKKyNpbmNsdWRlICJoaWZfdHguaCIKKyNp bmNsdWRlICJ3ZnguaCIKKyNpbmNsdWRlICJiaC5oIgorI2luY2x1ZGUgImh3aW8uaCIKKyNpbmNs dWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgInN0YS5oIgorCit2b2lkIHdmeF9pbml0X2hpZl9jbWQo c3RydWN0IHdmeF9oaWZfY21kICpoaWZfY21kKQoreworCWluaXRfY29tcGxldGlvbigmaGlmX2Nt ZC0+cmVhZHkpOworCWluaXRfY29tcGxldGlvbigmaGlmX2NtZC0+ZG9uZSk7CisJbXV0ZXhfaW5p dCgmaGlmX2NtZC0+bG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIHdmeF9maWxsX2hlYWRlcihzdHJ1 Y3QgaGlmX21zZyAqaGlmLCBpbnQgaWZfaWQsCisJCQkgICAgdW5zaWduZWQgaW50IGNtZCwgc2l6 ZV90IHNpemUpCit7CisJaWYgKGlmX2lkID09IC0xKQorCQlpZl9pZCA9IDI7CisKKwlXQVJOKGNt ZCA+IDB4M2YsICJpbnZhbGlkIFdTTSBjb21tYW5kICUjLjJ4IiwgY21kKTsKKwlXQVJOKHNpemUg PiAweEZGRiwgInJlcXVlc3RlZCBidWZmZXIgaXMgdG9vIGxhcmdlOiAlenUgYnl0ZXMiLCBzaXpl KTsKKwlXQVJOKGlmX2lkID4gMHgzLCAiaW52YWxpZCBpbnRlcmZhY2UgSUQgJWQiLCBpZl9pZCk7 CisKKwloaWYtPmxlbiA9IGNwdV90b19sZTE2KHNpemUgKyA0KTsKKwloaWYtPmlkID0gY21kOwor CWhpZi0+aW50ZXJmYWNlID0gaWZfaWQ7Cit9CisKK3N0YXRpYyB2b2lkICp3ZnhfYWxsb2NfaGlm KHNpemVfdCBib2R5X2xlbiwgc3RydWN0IGhpZl9tc2cgKipoaWYpCit7CisJKmhpZiA9IGt6YWxs b2Moc2l6ZW9mKHN0cnVjdCBoaWZfbXNnKSArIGJvZHlfbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAo KmhpZikKKwkJcmV0dXJuICgqaGlmKS0+Ym9keTsKKwllbHNlCisJCXJldHVybiBOVUxMOworfQor CitpbnQgd2Z4X2NtZF9zZW5kKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBzdHJ1Y3QgaGlmX21zZyAq cmVxdWVzdCwKKwkJIHZvaWQgKnJlcGx5LCBzaXplX3QgcmVwbHlfbGVuLCBib29sIG5vX3JlcGx5 KQoreworCWNvbnN0IGNoYXIgKm1pYl9uYW1lID0gIiI7CisJY29uc3QgY2hhciAqbWliX3NlcCA9 ICIiOworCWludCBjbWQgPSByZXF1ZXN0LT5pZDsKKwlpbnQgdmlmID0gcmVxdWVzdC0+aW50ZXJm YWNlOworCWludCByZXQ7CisKKwkvKiBEbyBub3Qgd2FpdCBmb3IgYW55IHJlcGx5IGlmIGNoaXAg aXMgZnJvemVuICovCisJaWYgKHdkZXYtPmNoaXBfZnJvemVuKQorCQlyZXR1cm4gLUVUSU1FRE9V VDsKKworCW11dGV4X2xvY2soJndkZXYtPmhpZl9jbWQubG9jayk7CisJV0FSTih3ZGV2LT5oaWZf Y21kLmJ1Zl9zZW5kLCAiZGF0YSBsb2NraW5nIGVycm9yIik7CisKKwkvKiBOb3RlOiBjYWxsIHRv IGNvbXBsZXRlKCkgYmVsb3cgaGFzIGFuIGltcGxpY2l0IG1lbW9yeSBiYXJyaWVyIHRoYXQKKwkg KiBob3BlZnVsbHkgcHJvdGVjdCBidWZfc2VuZAorCSAqLworCXdkZXYtPmhpZl9jbWQuYnVmX3Nl bmQgPSByZXF1ZXN0OworCXdkZXYtPmhpZl9jbWQuYnVmX3JlY3YgPSByZXBseTsKKwl3ZGV2LT5o aWZfY21kLmxlbl9yZWN2ID0gcmVwbHlfbGVuOworCWNvbXBsZXRlKCZ3ZGV2LT5oaWZfY21kLnJl YWR5KTsKKworCXdmeF9iaF9yZXF1ZXN0X3R4KHdkZXYpOworCisJaWYgKG5vX3JlcGx5KSB7CisJ CS8qIENoaXAgd29uJ3QgcmVwbHkuIEdpdmUgZW5vdWdoIHRpbWUgdG8gdGhlIHdxIHRvIHNlbmQg dGhlCisJCSAqIGJ1ZmZlci4KKwkJICovCisJCW1zbGVlcCgxMDApOworCQl3ZGV2LT5oaWZfY21k LmJ1Zl9zZW5kID0gTlVMTDsKKwkJbXV0ZXhfdW5sb2NrKCZ3ZGV2LT5oaWZfY21kLmxvY2spOwor CQlyZXR1cm4gMDsKKwl9CisKKwlpZiAod2Rldi0+cG9sbF9pcnEpCisJCXdmeF9iaF9wb2xsX2ly cSh3ZGV2KTsKKworCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmd2Rldi0+aGlm X2NtZC5kb25lLCAxICogSFopOworCWlmICghcmV0KSB7CisJCWRldl9lcnIod2Rldi0+ZGV2LCAi Y2hpcCBpcyBhYm5vcm1hbGx5IGxvbmcgdG8gYW5zd2VyXG4iKTsKKwkJcmVpbml0X2NvbXBsZXRp b24oJndkZXYtPmhpZl9jbWQucmVhZHkpOworCQlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3Rp bWVvdXQoJndkZXYtPmhpZl9jbWQuZG9uZSwgMyAqIEhaKTsKKwl9CisJaWYgKCFyZXQpIHsKKwkJ ZGV2X2Vycih3ZGV2LT5kZXYsICJjaGlwIGRpZCBub3QgYW5zd2VyXG4iKTsKKwkJd2Z4X3BlbmRp bmdfZHVtcF9vbGRfZnJhbWVzKHdkZXYsIDMwMDApOworCQl3ZGV2LT5jaGlwX2Zyb3plbiA9IHRy dWU7CisJCXJlaW5pdF9jb21wbGV0aW9uKCZ3ZGV2LT5oaWZfY21kLmRvbmUpOworCQlyZXQgPSAt RVRJTUVET1VUOworCX0gZWxzZSB7CisJCXJldCA9IHdkZXYtPmhpZl9jbWQucmV0OworCX0KKwor CXdkZXYtPmhpZl9jbWQuYnVmX3NlbmQgPSBOVUxMOworCW11dGV4X3VubG9jaygmd2Rldi0+aGlm X2NtZC5sb2NrKTsKKworCWlmIChyZXQgJiYKKwkgICAgKGNtZCA9PSBISUZfUkVRX0lEX1JFQURf TUlCIHx8IGNtZCA9PSBISUZfUkVRX0lEX1dSSVRFX01JQikpIHsKKwkJbWliX25hbWUgPSBnZXRf bWliX25hbWUoKCh1MTYgKilyZXF1ZXN0KVsyXSk7CisJCW1pYl9zZXAgPSAiLyI7CisJfQorCWlm IChyZXQgPCAwKQorCQlkZXZfZXJyKHdkZXYtPmRldiwKKwkJCSJXU00gcmVxdWVzdCAlcyVzJXMg KCUjLjJ4KSBvbiB2aWYgJWQgcmV0dXJuZWQgZXJyb3IgJWRcbiIsCisJCQlnZXRfaGlmX25hbWUo Y21kKSwgbWliX3NlcCwgbWliX25hbWUsIGNtZCwgdmlmLCByZXQpOworCWlmIChyZXQgPiAwKQor CQlkZXZfd2Fybih3ZGV2LT5kZXYsCisJCQkgIldTTSByZXF1ZXN0ICVzJXMlcyAoJSMuMngpIG9u IHZpZiAlZCByZXR1cm5lZCBzdGF0dXMgJWRcbiIsCisJCQkgZ2V0X2hpZl9uYW1lKGNtZCksIG1p Yl9zZXAsIG1pYl9uYW1lLCBjbWQsIHZpZiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8q IFRoaXMgZnVuY3Rpb24gaXMgc3BlY2lhbC4gQWZ0ZXIgSElGX1JFUV9JRF9TSFVUX0RPV04sIGNo aXAgd29uJ3QgcmVwbHkgdG8gYW55CisgKiByZXF1ZXN0IGFueW1vcmUuIE9idmlvdXNseSwgb25s eSBjYWxsIHRoaXMgZnVuY3Rpb24gZHVyaW5nIGRldmljZSB1bnJlZ2lzdGVyLgorICovCitpbnQg aGlmX3NodXRkb3duKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQoreworCWludCByZXQ7CisJc3RydWN0 IGhpZl9tc2cgKmhpZjsKKworCXdmeF9hbGxvY19oaWYoMCwgJmhpZik7CisJaWYgKCFoaWYpCisJ CXJldHVybiAtRU5PTUVNOworCXdmeF9maWxsX2hlYWRlcihoaWYsIC0xLCBISUZfUkVRX0lEX1NI VVRfRE9XTiwgMCk7CisJcmV0ID0gd2Z4X2NtZF9zZW5kKHdkZXYsIGhpZiwgTlVMTCwgMCwgdHJ1 ZSk7CisJaWYgKHdkZXYtPnBkYXRhLmdwaW9fd2FrZXVwKQorCQlncGlvZF9zZXRfdmFsdWUod2Rl di0+cGRhdGEuZ3Bpb193YWtldXAsIDApOworCWVsc2UKKwkJY29udHJvbF9yZWdfd3JpdGUod2Rl diwgMCk7CisJa2ZyZWUoaGlmKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgaGlmX2NvbmZpZ3Vy YXRpb24oc3RydWN0IHdmeF9kZXYgKndkZXYsIGNvbnN0IHU4ICpjb25mLCBzaXplX3QgbGVuKQor eworCWludCByZXQ7CisJc2l6ZV90IGJ1Zl9sZW4gPSBzaXplb2Yoc3RydWN0IGhpZl9yZXFfY29u ZmlndXJhdGlvbikgKyBsZW47CisJc3RydWN0IGhpZl9tc2cgKmhpZjsKKwlzdHJ1Y3QgaGlmX3Jl cV9jb25maWd1cmF0aW9uICpib2R5ID0gd2Z4X2FsbG9jX2hpZihidWZfbGVuLCAmaGlmKTsKKwor CWlmICghaGlmKQorCQlyZXR1cm4gLUVOT01FTTsKKwlib2R5LT5sZW5ndGggPSBjcHVfdG9fbGUx NihsZW4pOworCW1lbWNweShib2R5LT5wZHNfZGF0YSwgY29uZiwgbGVuKTsKKwl3ZnhfZmlsbF9o ZWFkZXIoaGlmLCAtMSwgSElGX1JFUV9JRF9DT05GSUdVUkFUSU9OLCBidWZfbGVuKTsKKwlyZXQg PSB3ZnhfY21kX3NlbmQod2RldiwgaGlmLCBOVUxMLCAwLCBmYWxzZSk7CisJa2ZyZWUoaGlmKTsK KwlyZXR1cm4gcmV0OworfQorCitpbnQgaGlmX3Jlc2V0KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBi b29sIHJlc2V0X3N0YXQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgaGlmX21zZyAqaGlmOworCXN0 cnVjdCBoaWZfcmVxX3Jlc2V0ICpib2R5ID0gd2Z4X2FsbG9jX2hpZihzaXplb2YoKmJvZHkpLCAm aGlmKTsKKworCWlmICghaGlmKQorCQlyZXR1cm4gLUVOT01FTTsKKwlib2R5LT5yZXNldF9zdGF0 ID0gcmVzZXRfc3RhdDsKKwl3ZnhfZmlsbF9oZWFkZXIoaGlmLCB3dmlmLT5pZCwgSElGX1JFUV9J RF9SRVNFVCwgc2l6ZW9mKCpib2R5KSk7CisJcmV0ID0gd2Z4X2NtZF9zZW5kKHd2aWYtPndkZXYs IGhpZiwgTlVMTCwgMCwgZmFsc2UpOworCWtmcmVlKGhpZik7CisJcmV0dXJuIHJldDsKK30KKwor aW50IGhpZl9yZWFkX21pYihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IHZpZl9pZCwgdTE2IG1p Yl9pZCwKKwkJIHZvaWQgKnZhbCwgc2l6ZV90IHZhbF9sZW4pCit7CisJaW50IHJldDsKKwlzdHJ1 Y3QgaGlmX21zZyAqaGlmOworCWludCBidWZfbGVuID0gc2l6ZW9mKHN0cnVjdCBoaWZfY25mX3Jl YWRfbWliKSArIHZhbF9sZW47CisJc3RydWN0IGhpZl9yZXFfcmVhZF9taWIgKmJvZHkgPSB3Znhf YWxsb2NfaGlmKHNpemVvZigqYm9keSksICZoaWYpOworCXN0cnVjdCBoaWZfY25mX3JlYWRfbWli ICpyZXBseSA9IGttYWxsb2MoYnVmX2xlbiwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWJvZHkgfHwg IXJlcGx5KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwlib2R5LT5taWJf aWQgPSBjcHVfdG9fbGUxNihtaWJfaWQpOworCXdmeF9maWxsX2hlYWRlcihoaWYsIHZpZl9pZCwg SElGX1JFUV9JRF9SRUFEX01JQiwgc2l6ZW9mKCpib2R5KSk7CisJcmV0ID0gd2Z4X2NtZF9zZW5k KHdkZXYsIGhpZiwgcmVwbHksIGJ1Zl9sZW4sIGZhbHNlKTsKKworCWlmICghcmV0ICYmIG1pYl9p ZCAhPSBsZTE2X3RvX2NwdShyZXBseS0+bWliX2lkKSkgeworCQlkZXZfd2Fybih3ZGV2LT5kZXYs ICIlczogY29uZmlybWF0aW9uIG1pc21hdGNoIHJlcXVlc3RcbiIsCisJCQkgX19mdW5jX18pOwor CQlyZXQgPSAtRUlPOworCX0KKwlpZiAocmV0ID09IC1FTk9NRU0pCisJCWRldl9lcnIod2Rldi0+ ZGV2LCAiYnVmZmVyIGlzIHRvbyBzbWFsbCB0byByZWNlaXZlICVzICglenUgPCAlZClcbiIsCisJ CQlnZXRfbWliX25hbWUobWliX2lkKSwgdmFsX2xlbiwKKwkJCWxlMTZfdG9fY3B1KHJlcGx5LT5s ZW5ndGgpKTsKKwlpZiAoIXJldCkKKwkJbWVtY3B5KHZhbCwgJnJlcGx5LT5taWJfZGF0YSwgbGUx Nl90b19jcHUocmVwbHktPmxlbmd0aCkpOworCWVsc2UKKwkJbWVtc2V0KHZhbCwgMHhGRiwgdmFs X2xlbik7CitvdXQ6CisJa2ZyZWUoaGlmKTsKKwlrZnJlZShyZXBseSk7CisJcmV0dXJuIHJldDsK K30KKworaW50IGhpZl93cml0ZV9taWIoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCB2aWZfaWQs IHUxNiBtaWJfaWQsCisJCSAgdm9pZCAqdmFsLCBzaXplX3QgdmFsX2xlbikKK3sKKwlpbnQgcmV0 OworCXN0cnVjdCBoaWZfbXNnICpoaWY7CisJaW50IGJ1Zl9sZW4gPSBzaXplb2Yoc3RydWN0IGhp Zl9yZXFfd3JpdGVfbWliKSArIHZhbF9sZW47CisJc3RydWN0IGhpZl9yZXFfd3JpdGVfbWliICpi b2R5ID0gd2Z4X2FsbG9jX2hpZihidWZfbGVuLCAmaGlmKTsKKworCWlmICghaGlmKQorCQlyZXR1 cm4gLUVOT01FTTsKKwlib2R5LT5taWJfaWQgPSBjcHVfdG9fbGUxNihtaWJfaWQpOworCWJvZHkt Pmxlbmd0aCA9IGNwdV90b19sZTE2KHZhbF9sZW4pOworCW1lbWNweSgmYm9keS0+bWliX2RhdGEs IHZhbCwgdmFsX2xlbik7CisJd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgdmlmX2lkLCBISUZfUkVRX0lE X1dSSVRFX01JQiwgYnVmX2xlbik7CisJcmV0ID0gd2Z4X2NtZF9zZW5kKHdkZXYsIGhpZiwgTlVM TCwgMCwgZmFsc2UpOworCWtmcmVlKGhpZik7CisJcmV0dXJuIHJldDsKK30KKworaW50IGhpZl9z Y2FuKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpy ZXEsCisJICAgICBpbnQgY2hhbl9zdGFydF9pZHgsIGludCBjaGFuX251bSwgaW50ICp0aW1lb3V0 KQoreworCWludCByZXQsIGk7CisJc3RydWN0IGhpZl9tc2cgKmhpZjsKKwlzaXplX3QgYnVmX2xl biA9CisJCXNpemVvZihzdHJ1Y3QgaGlmX3JlcV9zdGFydF9zY2FuX2FsdCkgKyBjaGFuX251bSAq IHNpemVvZih1OCk7CisJc3RydWN0IGhpZl9yZXFfc3RhcnRfc2Nhbl9hbHQgKmJvZHkgPSB3Znhf YWxsb2NfaGlmKGJ1Zl9sZW4sICZoaWYpOworCWludCB0bW9fY2hhbl9mZywgdG1vX2NoYW5fYmcs IHRtbzsKKworCVdBUk4oY2hhbl9udW0gPiBISUZfQVBJX01BWF9OQl9DSEFOTkVMUywgImludmFs aWQgcGFyYW1zIik7CisJV0FSTihyZXEtPm5fc3NpZHMgPiBISUZfQVBJX01BWF9OQl9TU0lEUywg ImludmFsaWQgcGFyYW1zIik7CisKKwlpZiAoIWhpZikKKwkJcmV0dXJuIC1FTk9NRU07CisJZm9y IChpID0gMDsgaSA8IHJlcS0+bl9zc2lkczsgaSsrKSB7CisJCW1lbWNweShib2R5LT5zc2lkX2Rl ZltpXS5zc2lkLCByZXEtPnNzaWRzW2ldLnNzaWQsCisJCSAgICAgICBJRUVFODAyMTFfTUFYX1NT SURfTEVOKTsKKwkJYm9keS0+c3NpZF9kZWZbaV0uc3NpZF9sZW5ndGggPQorCQkJY3B1X3RvX2xl MzIocmVxLT5zc2lkc1tpXS5zc2lkX2xlbik7CisJfQorCWJvZHktPm51bV9vZl9zc2lkcyA9IEhJ Rl9BUElfTUFYX05CX1NTSURTOworCWJvZHktPm1haW50YWluX2N1cnJlbnRfYnNzID0gMTsKKwli b2R5LT5kaXNhbGxvd19wcyA9IDE7CisJYm9keS0+dHhfcG93ZXJfbGV2ZWwgPQorCQljcHVfdG9f bGUzMihyZXEtPmNoYW5uZWxzW2NoYW5fc3RhcnRfaWR4XS0+bWF4X3Bvd2VyKTsKKwlib2R5LT5u dW1fb2ZfY2hhbm5lbHMgPSBjaGFuX251bTsKKwlmb3IgKGkgPSAwOyBpIDwgY2hhbl9udW07IGkr KykKKwkJYm9keS0+Y2hhbm5lbF9saXN0W2ldID0KKwkJCXJlcS0+Y2hhbm5lbHNbaSArIGNoYW5f c3RhcnRfaWR4XS0+aHdfdmFsdWU7CisJaWYgKHJlcS0+bm9fY2NrKQorCQlib2R5LT5tYXhfdHJh bnNtaXRfcmF0ZSA9IEFQSV9SQVRFX0lOREVYX0dfNk1CUFM7CisJZWxzZQorCQlib2R5LT5tYXhf dHJhbnNtaXRfcmF0ZSA9IEFQSV9SQVRFX0lOREVYX0JfMU1CUFM7CisJaWYgKHJlcS0+Y2hhbm5l bHNbY2hhbl9zdGFydF9pZHhdLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX05PX0lSKSB7CisJCWJv ZHktPm1pbl9jaGFubmVsX3RpbWUgPSBjcHVfdG9fbGUzMig1MCk7CisJCWJvZHktPm1heF9jaGFu bmVsX3RpbWUgPSBjcHVfdG9fbGUzMigxNTApOworCX0gZWxzZSB7CisJCWJvZHktPm1pbl9jaGFu bmVsX3RpbWUgPSBjcHVfdG9fbGUzMigxMCk7CisJCWJvZHktPm1heF9jaGFubmVsX3RpbWUgPSBj cHVfdG9fbGUzMig1MCk7CisJCWJvZHktPm51bV9vZl9wcm9iZV9yZXF1ZXN0cyA9IDI7CisJCWJv ZHktPnByb2JlX2RlbGF5ID0gMTAwOworCX0KKwl0bW9fY2hhbl9iZyA9IGxlMzJfdG9fY3B1KGJv ZHktPm1heF9jaGFubmVsX3RpbWUpICogVVNFQ19QRVJfVFU7CisJdG1vX2NoYW5fZmcgPSA1MTIg KiBVU0VDX1BFUl9UVSArIGJvZHktPnByb2JlX2RlbGF5OworCXRtb19jaGFuX2ZnICo9IGJvZHkt Pm51bV9vZl9wcm9iZV9yZXF1ZXN0czsKKwl0bW8gPSBjaGFuX251bSAqIG1heCh0bW9fY2hhbl9i ZywgdG1vX2NoYW5fZmcpICsgNTEyICogVVNFQ19QRVJfVFU7CisJaWYgKHRpbWVvdXQpCisJCSp0 aW1lb3V0ID0gdXNlY3NfdG9famlmZmllcyh0bW8pOworCisJd2Z4X2ZpbGxfaGVhZGVyKGhpZiwg d3ZpZi0+aWQsIEhJRl9SRVFfSURfU1RBUlRfU0NBTiwgYnVmX2xlbik7CisJcmV0ID0gd2Z4X2Nt ZF9zZW5kKHd2aWYtPndkZXYsIGhpZiwgTlVMTCwgMCwgZmFsc2UpOworCWtmcmVlKGhpZik7CisJ cmV0dXJuIHJldDsKK30KKworaW50IGhpZl9zdG9wX3NjYW4oc3RydWN0IHdmeF92aWYgKnd2aWYp Cit7CisJaW50IHJldDsKKwlzdHJ1Y3QgaGlmX21zZyAqaGlmOworCS8qIGJvZHkgYXNzb2NpYXRl ZCB0byBISUZfUkVRX0lEX1NUT1BfU0NBTiBpcyBlbXB0eSAqLworCXdmeF9hbGxvY19oaWYoMCwg JmhpZik7CisKKwlpZiAoIWhpZikKKwkJcmV0dXJuIC1FTk9NRU07CisJd2Z4X2ZpbGxfaGVhZGVy KGhpZiwgd3ZpZi0+aWQsIEhJRl9SRVFfSURfU1RPUF9TQ0FOLCAwKTsKKwlyZXQgPSB3ZnhfY21k X3NlbmQod3ZpZi0+d2RldiwgaGlmLCBOVUxMLCAwLCBmYWxzZSk7CisJa2ZyZWUoaGlmKTsKKwly ZXR1cm4gcmV0OworfQorCitpbnQgaGlmX2pvaW4oc3RydWN0IHdmeF92aWYgKnd2aWYsIGNvbnN0 IHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmNvbmYsCisJICAgICBzdHJ1Y3QgaWVlZTgwMjEx X2NoYW5uZWwgKmNoYW5uZWwsIGNvbnN0IHU4ICpzc2lkLCBpbnQgc3NpZGxlbikKK3sKKwlpbnQg cmV0OworCXN0cnVjdCBoaWZfbXNnICpoaWY7CisJc3RydWN0IGhpZl9yZXFfam9pbiAqYm9keSA9 IHdmeF9hbGxvY19oaWYoc2l6ZW9mKCpib2R5KSwgJmhpZik7CisKKwlXQVJOX09OKCFjb25mLT5i ZWFjb25faW50KTsKKwlXQVJOX09OKCFjb25mLT5iYXNpY19yYXRlcyk7CisJV0FSTl9PTihzaXpl b2YoYm9keS0+c3NpZCkgPCBzc2lkbGVuKTsKKwlXQVJOKCFjb25mLT5pYnNzX2pvaW5lZCAmJiAh c3NpZGxlbiwgImpvaW5pbmcgYW4gdW5rbm93biBCU1MiKTsKKwlpZiAoV0FSTl9PTighY2hhbm5l bCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghaGlmKQorCQlyZXR1cm4gLUVOT01FTTsKKwli b2R5LT5pbmZyYXN0cnVjdHVyZV9ic3NfbW9kZSA9ICFjb25mLT5pYnNzX2pvaW5lZDsKKwlib2R5 LT5zaG9ydF9wcmVhbWJsZSA9IGNvbmYtPnVzZV9zaG9ydF9wcmVhbWJsZTsKKwlpZiAoY2hhbm5l bC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9OT19JUikKKwkJYm9keS0+cHJvYmVfZm9yX2pvaW4g PSAwOworCWVsc2UKKwkJYm9keS0+cHJvYmVfZm9yX2pvaW4gPSAxOworCWJvZHktPmNoYW5uZWxf bnVtYmVyID0gY2hhbm5lbC0+aHdfdmFsdWU7CisJYm9keS0+YmVhY29uX2ludGVydmFsID0gY3B1 X3RvX2xlMzIoY29uZi0+YmVhY29uX2ludCk7CisJYm9keS0+YmFzaWNfcmF0ZV9zZXQgPQorCQlj cHVfdG9fbGUzMih3ZnhfcmF0ZV9tYXNrX3RvX2h3KHd2aWYtPndkZXYsIGNvbmYtPmJhc2ljX3Jh dGVzKSk7CisJbWVtY3B5KGJvZHktPmJzc2lkLCBjb25mLT5ic3NpZCwgc2l6ZW9mKGJvZHktPmJz c2lkKSk7CisJaWYgKHNzaWQpIHsKKwkJYm9keS0+c3NpZF9sZW5ndGggPSBjcHVfdG9fbGUzMihz c2lkbGVuKTsKKwkJbWVtY3B5KGJvZHktPnNzaWQsIHNzaWQsIHNzaWRsZW4pOworCX0KKwl3Znhf ZmlsbF9oZWFkZXIoaGlmLCB3dmlmLT5pZCwgSElGX1JFUV9JRF9KT0lOLCBzaXplb2YoKmJvZHkp KTsKKwlyZXQgPSB3ZnhfY21kX3NlbmQod3ZpZi0+d2RldiwgaGlmLCBOVUxMLCAwLCBmYWxzZSk7 CisJa2ZyZWUoaGlmKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgaGlmX3NldF9ic3NfcGFyYW1z KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBpbnQgYWlkLCBpbnQgYmVhY29uX2xvc3RfY291bnQpCit7 CisJaW50IHJldDsKKwlzdHJ1Y3QgaGlmX21zZyAqaGlmOworCXN0cnVjdCBoaWZfcmVxX3NldF9i c3NfcGFyYW1zICpib2R5ID0KKwkJd2Z4X2FsbG9jX2hpZihzaXplb2YoKmJvZHkpLCAmaGlmKTsK KworCWlmICghaGlmKQorCQlyZXR1cm4gLUVOT01FTTsKKwlib2R5LT5haWQgPSBjcHVfdG9fbGUx NihhaWQpOworCWJvZHktPmJlYWNvbl9sb3N0X2NvdW50ID0gYmVhY29uX2xvc3RfY291bnQ7CisJ d2Z4X2ZpbGxfaGVhZGVyKGhpZiwgd3ZpZi0+aWQsIEhJRl9SRVFfSURfU0VUX0JTU19QQVJBTVMs CisJCQlzaXplb2YoKmJvZHkpKTsKKwlyZXQgPSB3ZnhfY21kX3NlbmQod3ZpZi0+d2RldiwgaGlm LCBOVUxMLCAwLCBmYWxzZSk7CisJa2ZyZWUoaGlmKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQg aGlmX2FkZF9rZXkoc3RydWN0IHdmeF9kZXYgKndkZXYsIGNvbnN0IHN0cnVjdCBoaWZfcmVxX2Fk ZF9rZXkgKmFyZykKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBoaWZfbXNnICpoaWY7CisJLyogRklY TUU6IG9ubHkgc2VuZCBuZWNlc3NhcnkgYml0cyAqLworCXN0cnVjdCBoaWZfcmVxX2FkZF9rZXkg KmJvZHkgPSB3ZnhfYWxsb2NfaGlmKHNpemVvZigqYm9keSksICZoaWYpOworCisJaWYgKCFoaWYp CisJCXJldHVybiAtRU5PTUVNOworCS8qIEZJWE1FOiBzd2FwIGJ5dGVzIGFzIG5lY2Vzc2FyeSBp biBib2R5ICovCisJbWVtY3B5KGJvZHksIGFyZywgc2l6ZW9mKCpib2R5KSk7CisJaWYgKHdmeF9h cGlfb2xkZXJfdGhhbih3ZGV2LCAxLCA1KSkKKwkJLyogTGVnYWN5IGZpcm13YXJlcyBleHBlY3Qg dGhhdCBhZGRfa2V5IHRvIGJlIHNlbnQgb24gcmlnaHQKKwkJICogaW50ZXJmYWNlLgorCQkgKi8K KwkJd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgYXJnLT5pbnRfaWQsIEhJRl9SRVFfSURfQUREX0tFWSwK KwkJCQlzaXplb2YoKmJvZHkpKTsKKwllbHNlCisJCXdmeF9maWxsX2hlYWRlcihoaWYsIC0xLCBI SUZfUkVRX0lEX0FERF9LRVksIHNpemVvZigqYm9keSkpOworCXJldCA9IHdmeF9jbWRfc2VuZCh3 ZGV2LCBoaWYsIE5VTEwsIDAsIGZhbHNlKTsKKwlrZnJlZShoaWYpOworCXJldHVybiByZXQ7Cit9 CisKK2ludCBoaWZfcmVtb3ZlX2tleShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IGlkeCkKK3sK KwlpbnQgcmV0OworCXN0cnVjdCBoaWZfbXNnICpoaWY7CisJc3RydWN0IGhpZl9yZXFfcmVtb3Zl X2tleSAqYm9keSA9IHdmeF9hbGxvY19oaWYoc2l6ZW9mKCpib2R5KSwgJmhpZik7CisKKwlpZiAo IWhpZikKKwkJcmV0dXJuIC1FTk9NRU07CisJYm9keS0+ZW50cnlfaW5kZXggPSBpZHg7CisJd2Z4 X2ZpbGxfaGVhZGVyKGhpZiwgLTEsIEhJRl9SRVFfSURfUkVNT1ZFX0tFWSwgc2l6ZW9mKCpib2R5 KSk7CisJcmV0ID0gd2Z4X2NtZF9zZW5kKHdkZXYsIGhpZiwgTlVMTCwgMCwgZmFsc2UpOworCWtm cmVlKGhpZik7CisJcmV0dXJuIHJldDsKK30KKworaW50IGhpZl9zZXRfZWRjYV9xdWV1ZV9wYXJh bXMoc3RydWN0IHdmeF92aWYgKnd2aWYsIHUxNiBxdWV1ZSwKKwkJCSAgICAgIGNvbnN0IHN0cnVj dCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICphcmcpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qg aGlmX21zZyAqaGlmOworCXN0cnVjdCBoaWZfcmVxX2VkY2FfcXVldWVfcGFyYW1zICpib2R5ID0g d2Z4X2FsbG9jX2hpZihzaXplb2YoKmJvZHkpLAorCQkJCQkJCSAgICAgICAmaGlmKTsKKworCWlm ICghYm9keSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlXQVJOX09OKGFyZy0+YWlmcyA+IDI1NSk7 CisJaWYgKCFoaWYpCisJCXJldHVybiAtRU5PTUVNOworCWJvZHktPmFpZnNuID0gYXJnLT5haWZz OworCWJvZHktPmN3X21pbiA9IGNwdV90b19sZTE2KGFyZy0+Y3dfbWluKTsKKwlib2R5LT5jd19t YXggPSBjcHVfdG9fbGUxNihhcmctPmN3X21heCk7CisJYm9keS0+dHhfb3BfbGltaXQgPSBjcHVf dG9fbGUxNihhcmctPnR4b3AgKiBVU0VDX1BFUl9UWE9QKTsKKwlib2R5LT5xdWV1ZV9pZCA9IDMg LSBxdWV1ZTsKKwkvKiBBUEkgMi4wIGhhcyBjaGFuZ2VkIHF1ZXVlIElEcyB2YWx1ZXMgKi8KKwlp ZiAod2Z4X2FwaV9vbGRlcl90aGFuKHd2aWYtPndkZXYsIDIsIDApICYmIHF1ZXVlID09IElFRUU4 MDIxMV9BQ19CRSkKKwkJYm9keS0+cXVldWVfaWQgPSBISUZfUVVFVUVfSURfQkFDS0dST1VORDsK KwlpZiAod2Z4X2FwaV9vbGRlcl90aGFuKHd2aWYtPndkZXYsIDIsIDApICYmIHF1ZXVlID09IElF RUU4MDIxMV9BQ19CSykKKwkJYm9keS0+cXVldWVfaWQgPSBISUZfUVVFVUVfSURfQkVTVEVGRk9S VDsKKwl3ZnhfZmlsbF9oZWFkZXIoaGlmLCB3dmlmLT5pZCwgSElGX1JFUV9JRF9FRENBX1FVRVVF X1BBUkFNUywKKwkJCXNpemVvZigqYm9keSkpOworCXJldCA9IHdmeF9jbWRfc2VuZCh3dmlmLT53 ZGV2LCBoaWYsIE5VTEwsIDAsIGZhbHNlKTsKKwlrZnJlZShoaWYpOworCXJldHVybiByZXQ7Cit9 CisKK2ludCBoaWZfc2V0X3BtKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBib29sIHBzLCBpbnQgZHlu YW1pY19wc190aW1lb3V0KQoreworCWludCByZXQ7CisJc3RydWN0IGhpZl9tc2cgKmhpZjsKKwlz dHJ1Y3QgaGlmX3JlcV9zZXRfcG1fbW9kZSAqYm9keSA9IHdmeF9hbGxvY19oaWYoc2l6ZW9mKCpi b2R5KSwgJmhpZik7CisKKwlpZiAoIWJvZHkpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKCFo aWYpCisJCXJldHVybiAtRU5PTUVNOworCWlmIChwcykgeworCQlib2R5LT5lbnRlcl9wc20gPSAx OworCQkvKiBGaXJtd2FyZSBkb2VzIG5vdCBzdXBwb3J0IG1vcmUgdGhhbiAxMjhtcyAqLworCQli b2R5LT5mYXN0X3BzbV9pZGxlX3BlcmlvZCA9IG1pbihkeW5hbWljX3BzX3RpbWVvdXQgKiAyLCAy NTUpOworCQlpZiAoYm9keS0+ZmFzdF9wc21faWRsZV9wZXJpb2QpCisJCQlib2R5LT5mYXN0X3Bz bSA9IDE7CisJfQorCXdmeF9maWxsX2hlYWRlcihoaWYsIHd2aWYtPmlkLCBISUZfUkVRX0lEX1NF VF9QTV9NT0RFLCBzaXplb2YoKmJvZHkpKTsKKwlyZXQgPSB3ZnhfY21kX3NlbmQod3ZpZi0+d2Rl diwgaGlmLCBOVUxMLCAwLCBmYWxzZSk7CisJa2ZyZWUoaGlmKTsKKwlyZXR1cm4gcmV0OworfQor CitpbnQgaGlmX3N0YXJ0KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBjb25zdCBzdHJ1Y3QgaWVlZTgw MjExX2Jzc19jb25mICpjb25mLAorCSAgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5l bCAqY2hhbm5lbCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBoaWZfbXNnICpoaWY7CisJc3RydWN0 IGhpZl9yZXFfc3RhcnQgKmJvZHkgPSB3ZnhfYWxsb2NfaGlmKHNpemVvZigqYm9keSksICZoaWYp OworCisJV0FSTl9PTighY29uZi0+YmVhY29uX2ludCk7CisJaWYgKCFoaWYpCisJCXJldHVybiAt RU5PTUVNOworCWJvZHktPmR0aW1fcGVyaW9kID0gY29uZi0+ZHRpbV9wZXJpb2Q7CisJYm9keS0+ c2hvcnRfcHJlYW1ibGUgPSBjb25mLT51c2Vfc2hvcnRfcHJlYW1ibGU7CisJYm9keS0+Y2hhbm5l bF9udW1iZXIgPSBjaGFubmVsLT5od192YWx1ZTsKKwlib2R5LT5iZWFjb25faW50ZXJ2YWwgPSBj cHVfdG9fbGUzMihjb25mLT5iZWFjb25faW50KTsKKwlib2R5LT5iYXNpY19yYXRlX3NldCA9CisJ CWNwdV90b19sZTMyKHdmeF9yYXRlX21hc2tfdG9faHcod3ZpZi0+d2RldiwgY29uZi0+YmFzaWNf cmF0ZXMpKTsKKwlib2R5LT5zc2lkX2xlbmd0aCA9IGNvbmYtPnNzaWRfbGVuOworCW1lbWNweShi b2R5LT5zc2lkLCBjb25mLT5zc2lkLCBjb25mLT5zc2lkX2xlbik7CisJd2Z4X2ZpbGxfaGVhZGVy KGhpZiwgd3ZpZi0+aWQsIEhJRl9SRVFfSURfU1RBUlQsIHNpemVvZigqYm9keSkpOworCXJldCA9 IHdmeF9jbWRfc2VuZCh3dmlmLT53ZGV2LCBoaWYsIE5VTEwsIDAsIGZhbHNlKTsKKwlrZnJlZSho aWYpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBoaWZfYmVhY29uX3RyYW5zbWl0KHN0cnVjdCB3 ZnhfdmlmICp3dmlmLCBib29sIGVuYWJsZSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBoaWZfbXNn ICpoaWY7CisJc3RydWN0IGhpZl9yZXFfYmVhY29uX3RyYW5zbWl0ICpib2R5ID0gd2Z4X2FsbG9j X2hpZihzaXplb2YoKmJvZHkpLAorCQkJCQkJCSAgICAgJmhpZik7CisKKwlpZiAoIWhpZikKKwkJ cmV0dXJuIC1FTk9NRU07CisJYm9keS0+ZW5hYmxlX2JlYWNvbmluZyA9IGVuYWJsZSA/IDEgOiAw OworCXdmeF9maWxsX2hlYWRlcihoaWYsIHd2aWYtPmlkLCBISUZfUkVRX0lEX0JFQUNPTl9UUkFO U01JVCwKKwkJCXNpemVvZigqYm9keSkpOworCXJldCA9IHdmeF9jbWRfc2VuZCh3dmlmLT53ZGV2 LCBoaWYsIE5VTEwsIDAsIGZhbHNlKTsKKwlrZnJlZShoaWYpOworCXJldHVybiByZXQ7Cit9CisK K2ludCBoaWZfbWFwX2xpbmsoc3RydWN0IHdmeF92aWYgKnd2aWYsIGJvb2wgdW5tYXAsIHU4ICpt YWNfYWRkciwgaW50IHN0YV9pZCwgYm9vbCBtZnApCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgaGlm X21zZyAqaGlmOworCXN0cnVjdCBoaWZfcmVxX21hcF9saW5rICpib2R5ID0gd2Z4X2FsbG9jX2hp ZihzaXplb2YoKmJvZHkpLCAmaGlmKTsKKworCWlmICghaGlmKQorCQlyZXR1cm4gLUVOT01FTTsK KwlpZiAobWFjX2FkZHIpCisJCWV0aGVyX2FkZHJfY29weShib2R5LT5tYWNfYWRkciwgbWFjX2Fk ZHIpOworCWJvZHktPm1mcGMgPSBtZnAgPyAxIDogMDsKKwlib2R5LT51bm1hcCA9IHVubWFwID8g MSA6IDA7CisJYm9keS0+cGVlcl9zdGFfaWQgPSBzdGFfaWQ7CisJd2Z4X2ZpbGxfaGVhZGVyKGhp Ziwgd3ZpZi0+aWQsIEhJRl9SRVFfSURfTUFQX0xJTkssIHNpemVvZigqYm9keSkpOworCXJldCA9 IHdmeF9jbWRfc2VuZCh3dmlmLT53ZGV2LCBoaWYsIE5VTEwsIDAsIGZhbHNlKTsKKwlrZnJlZSho aWYpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBoaWZfdXBkYXRlX2llX2JlYWNvbihzdHJ1Y3Qg d2Z4X3ZpZiAqd3ZpZiwgY29uc3QgdTggKmllcywgc2l6ZV90IGllc19sZW4pCit7CisJaW50IHJl dDsKKwlzdHJ1Y3QgaGlmX21zZyAqaGlmOworCWludCBidWZfbGVuID0gc2l6ZW9mKHN0cnVjdCBo aWZfcmVxX3VwZGF0ZV9pZSkgKyBpZXNfbGVuOworCXN0cnVjdCBoaWZfcmVxX3VwZGF0ZV9pZSAq Ym9keSA9IHdmeF9hbGxvY19oaWYoYnVmX2xlbiwgJmhpZik7CisKKwlpZiAoIWhpZikKKwkJcmV0 dXJuIC1FTk9NRU07CisJYm9keS0+YmVhY29uID0gMTsKKwlib2R5LT5udW1faWVzID0gY3B1X3Rv X2xlMTYoMSk7CisJbWVtY3B5KGJvZHktPmllLCBpZXMsIGllc19sZW4pOworCXdmeF9maWxsX2hl YWRlcihoaWYsIHd2aWYtPmlkLCBISUZfUkVRX0lEX1VQREFURV9JRSwgYnVmX2xlbik7CisJcmV0 ID0gd2Z4X2NtZF9zZW5kKHd2aWYtPndkZXYsIGhpZiwgTlVMTCwgMCwgZmFsc2UpOworCWtmcmVl KGhpZik7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNz L3NpbGFicy93ZngvaGlmX3R4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hp Zl90eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMzUyMWM1NDVh ZTZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9o aWZfdHguaApAQCAtMCwwICsxLDYwIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMC1vbmx5ICovCisvKgorICogSW1wbGVtZW50YXRpb24gb2YgaG9zdC10by1jaGlwIGNvbW1h bmRzIChha2EgcmVxdWVzdC9jb25maXJtYXRpb24pIG9mIFdGeHh4CisgKiBTcGxpdCBNYWMgKFdT TSkgQVBJLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwLCBTaWxpY29uIExhYm9yYXRv cmllcywgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmljc3NvbgorICogQ29weXJp Z2h0IChDKSAyMDEwLCBTVC1Fcmljc3NvbiBTQQorICovCisjaWZuZGVmIFdGWF9ISUZfVFhfSAor I2RlZmluZSBXRlhfSElGX1RYX0gKKworc3RydWN0IGllZWU4MDIxMV9jaGFubmVsOworc3RydWN0 IGllZWU4MDIxMV9ic3NfY29uZjsKK3N0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zOwor c3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdDsKK3N0cnVjdCBoaWZfcmVxX2FkZF9rZXk7Citz dHJ1Y3Qgd2Z4X2RldjsKK3N0cnVjdCB3ZnhfdmlmOworCitzdHJ1Y3Qgd2Z4X2hpZl9jbWQgewor CXN0cnVjdCBtdXRleCAgICAgIGxvY2s7CisJc3RydWN0IGNvbXBsZXRpb24gcmVhZHk7CisJc3Ry dWN0IGNvbXBsZXRpb24gZG9uZTsKKwlzdHJ1Y3QgaGlmX21zZyAgICAqYnVmX3NlbmQ7CisJdm9p ZCAgICAgICAgICAgICAgKmJ1Zl9yZWN2OworCXNpemVfdCAgICAgICAgICAgIGxlbl9yZWN2Owor CWludCAgICAgICAgICAgICAgIHJldDsKK307CisKK3ZvaWQgd2Z4X2luaXRfaGlmX2NtZChzdHJ1 Y3Qgd2Z4X2hpZl9jbWQgKndmeF9oaWZfY21kKTsKK2ludCB3ZnhfY21kX3NlbmQoc3RydWN0IHdm eF9kZXYgKndkZXYsIHN0cnVjdCBoaWZfbXNnICpyZXF1ZXN0LAorCQkgdm9pZCAqcmVwbHksIHNp emVfdCByZXBseV9sZW4sIGJvb2wgYXN5bmMpOworCitpbnQgaGlmX3NodXRkb3duKHN0cnVjdCB3 ZnhfZGV2ICp3ZGV2KTsKK2ludCBoaWZfY29uZmlndXJhdGlvbihzdHJ1Y3Qgd2Z4X2RldiAqd2Rl diwgY29uc3QgdTggKmNvbmYsIHNpemVfdCBsZW4pOworaW50IGhpZl9yZXNldChzdHJ1Y3Qgd2Z4 X3ZpZiAqd3ZpZiwgYm9vbCByZXNldF9zdGF0KTsKK2ludCBoaWZfcmVhZF9taWIoc3RydWN0IHdm eF9kZXYgKndkZXYsIGludCB2aWZfaWQsIHUxNiBtaWJfaWQsCisJCSB2b2lkICpidWYsIHNpemVf dCBidWZfc2l6ZSk7CitpbnQgaGlmX3dyaXRlX21pYihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50 IHZpZl9pZCwgdTE2IG1pYl9pZCwKKwkJICB2b2lkICpidWYsIHNpemVfdCBidWZfc2l6ZSk7Citp bnQgaGlmX3NjYW4oc3RydWN0IHdmeF92aWYgKnd2aWYsIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3Jl cXVlc3QgKnJlcTgwMjExLAorCSAgICAgaW50IGNoYW5fc3RhcnQsIGludCBjaGFuX251bSwgaW50 ICp0aW1lb3V0KTsKK2ludCBoaWZfc3RvcF9zY2FuKHN0cnVjdCB3ZnhfdmlmICp3dmlmKTsKK2lu dCBoaWZfam9pbihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9i c3NfY29uZiAqY29uZiwKKwkgICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwg Y29uc3QgdTggKnNzaWQsIGludCBzc2lkbGVuKTsKK2ludCBoaWZfc2V0X3BtKHN0cnVjdCB3Znhf dmlmICp3dmlmLCBib29sIHBzLCBpbnQgZHluYW1pY19wc190aW1lb3V0KTsKK2ludCBoaWZfc2V0 X2Jzc19wYXJhbXMoc3RydWN0IHdmeF92aWYgKnd2aWYsIGludCBhaWQsIGludCBiZWFjb25fbG9z dF9jb3VudCk7CitpbnQgaGlmX2FkZF9rZXkoc3RydWN0IHdmeF9kZXYgKndkZXYsIGNvbnN0IHN0 cnVjdCBoaWZfcmVxX2FkZF9rZXkgKmFyZyk7CitpbnQgaGlmX3JlbW92ZV9rZXkoc3RydWN0IHdm eF9kZXYgKndkZXYsIGludCBpZHgpOworaW50IGhpZl9zZXRfZWRjYV9xdWV1ZV9wYXJhbXMoc3Ry dWN0IHdmeF92aWYgKnd2aWYsIHUxNiBxdWV1ZSwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBpZWVl ODAyMTFfdHhfcXVldWVfcGFyYW1zICphcmcpOworaW50IGhpZl9zdGFydChzdHJ1Y3Qgd2Z4X3Zp ZiAqd3ZpZiwgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqY29uZiwKKwkgICAgICBj b25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwpOworaW50IGhpZl9iZWFjb25f dHJhbnNtaXQoc3RydWN0IHdmeF92aWYgKnd2aWYsIGJvb2wgZW5hYmxlKTsKK2ludCBoaWZfbWFw X2xpbmsoc3RydWN0IHdmeF92aWYgKnd2aWYsCisJCSBib29sIHVubWFwLCB1OCAqbWFjX2FkZHIs IGludCBzdGFfaWQsIGJvb2wgbWZwKTsKK2ludCBoaWZfdXBkYXRlX2llX2JlYWNvbihzdHJ1Y3Qg d2Z4X3ZpZiAqd3ZpZiwgY29uc3QgdTggKmllcywgc2l6ZV90IGllc19sZW4pOworCisjZW5kaWYK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX3R4X21pYi5j IGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfdHhfbWliLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4wYWQ2NjFiZjcyNGIKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl90eF9taWIuYwpAQCAt MCwwICsxLDMyNCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQor LyoKKyAqIEltcGxlbWVudGF0aW9uIG9mIGhvc3QtdG8tY2hpcCBNSUJzIG9mIFdGeHh4IFNwbGl0 IE1hYyAoV1NNKSBBUEkuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24g TGFib3JhdG9yaWVzLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCisg KiBDb3B5cmlnaHQgKEMpIDIwMTAsIFNULUVyaWNzc29uIFNBCisgKi8KKworI2luY2x1ZGUgPGxp bnV4L2V0aGVyZGV2aWNlLmg+CisKKyNpbmNsdWRlICJ3ZnguaCIKKyNpbmNsdWRlICJoaWZfdHgu aCIKKyNpbmNsdWRlICJoaWZfdHhfbWliLmgiCisjaW5jbHVkZSAiaGlmX2FwaV9taWIuaCIKKwor aW50IGhpZl9zZXRfb3V0cHV0X3Bvd2VyKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBpbnQgdmFsKQor eworCXN0cnVjdCBoaWZfbWliX2N1cnJlbnRfdHhfcG93ZXJfbGV2ZWwgYXJnID0geworCQkucG93 ZXJfbGV2ZWwgPSBjcHVfdG9fbGUzMih2YWwgKiAxMCksCisJfTsKKworCXJldHVybiBoaWZfd3Jp dGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLAorCQkJICAgICBISUZfTUlCX0lEX0NVUlJFTlRf VFhfUE9XRVJfTEVWRUwsCisJCQkgICAgICZhcmcsIHNpemVvZihhcmcpKTsKK30KKworaW50IGhp Zl9zZXRfYmVhY29uX3dha2V1cF9wZXJpb2Qoc3RydWN0IHdmeF92aWYgKnd2aWYsCisJCQkJIHVu c2lnbmVkIGludCBkdGltX2ludGVydmFsLAorCQkJCSB1bnNpZ25lZCBpbnQgbGlzdGVuX2ludGVy dmFsKQoreworCXN0cnVjdCBoaWZfbWliX2JlYWNvbl93YWtlX3VwX3BlcmlvZCBhcmcgPSB7CisJ CS53YWtldXBfcGVyaW9kX21pbiA9IGR0aW1faW50ZXJ2YWwsCisJCS5yZWNlaXZlX2R0aW0gPSAw LAorCQkud2FrZXVwX3BlcmlvZF9tYXggPSBsaXN0ZW5faW50ZXJ2YWwsCisJfTsKKworCWlmIChk dGltX2ludGVydmFsID4gMHhGRiB8fCBsaXN0ZW5faW50ZXJ2YWwgPiAweEZGRkYpCisJCXJldHVy biAtRUlOVkFMOworCXJldHVybiBoaWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLAor CQkJICAgICBISUZfTUlCX0lEX0JFQUNPTl9XQUtFVVBfUEVSSU9ELAorCQkJICAgICAmYXJnLCBz aXplb2YoYXJnKSk7Cit9CisKK2ludCBoaWZfc2V0X3JjcGlfcnNzaV90aHJlc2hvbGQoc3RydWN0 IHdmeF92aWYgKnd2aWYsCisJCQkJaW50IHJzc2lfdGhvbGQsIGludCByc3NpX2h5c3QpCit7CisJ c3RydWN0IGhpZl9taWJfcmNwaV9yc3NpX3RocmVzaG9sZCBhcmcgPSB7CisJCS5yb2xsaW5nX2F2 ZXJhZ2VfY291bnQgPSA4LAorCQkuZGV0ZWN0aW9uID0gMSwKKwl9OworCisJaWYgKCFyc3NpX3Ro b2xkICYmICFyc3NpX2h5c3QpIHsKKwkJYXJnLnVwcGVydGhyZXNoID0gMTsKKwkJYXJnLmxvd2Vy dGhyZXNoID0gMTsKKwl9IGVsc2UgeworCQlhcmcudXBwZXJfdGhyZXNob2xkID0gcnNzaV90aG9s ZCArIHJzc2lfaHlzdDsKKwkJYXJnLnVwcGVyX3RocmVzaG9sZCA9IChhcmcudXBwZXJfdGhyZXNo b2xkICsgMTEwKSAqIDI7CisJCWFyZy5sb3dlcl90aHJlc2hvbGQgPSByc3NpX3Rob2xkOworCQlh cmcubG93ZXJfdGhyZXNob2xkID0gKGFyZy5sb3dlcl90aHJlc2hvbGQgKyAxMTApICogMjsKKwl9 CisKKwlyZXR1cm4gaGlmX3dyaXRlX21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwKKwkJCSAgICAg SElGX01JQl9JRF9SQ1BJX1JTU0lfVEhSRVNIT0xELCAmYXJnLCBzaXplb2YoYXJnKSk7Cit9CisK K2ludCBoaWZfZ2V0X2NvdW50ZXJzX3RhYmxlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgdmlm X2lkLAorCQkJICAgc3RydWN0IGhpZl9taWJfZXh0ZW5kZWRfY291bnRfdGFibGUgKmFyZykKK3sK KwlpZiAod2Z4X2FwaV9vbGRlcl90aGFuKHdkZXYsIDEsIDMpKSB7CisJCS8qIGV4dGVuZGVkX2Nv dW50X3RhYmxlIGlzIHdpZGVyIHRoYW4gY291bnRfdGFibGUgKi8KKwkJbWVtc2V0KGFyZywgMHhG Riwgc2l6ZW9mKCphcmcpKTsKKwkJcmV0dXJuIGhpZl9yZWFkX21pYih3ZGV2LCB2aWZfaWQsIEhJ Rl9NSUJfSURfQ09VTlRFUlNfVEFCTEUsCisJCQkJICAgIGFyZywgc2l6ZW9mKHN0cnVjdCBoaWZf bWliX2NvdW50X3RhYmxlKSk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGhpZl9yZWFkX21pYih3ZGV2 LCB2aWZfaWQsCisJCQkJICAgIEhJRl9NSUJfSURfRVhURU5ERURfQ09VTlRFUlNfVEFCTEUsIGFy ZywKKwkJCQlzaXplb2Yoc3RydWN0IGhpZl9taWJfZXh0ZW5kZWRfY291bnRfdGFibGUpKTsKKwl9 Cit9CisKK2ludCBoaWZfc2V0X21hY2FkZHIoc3RydWN0IHdmeF92aWYgKnd2aWYsIHU4ICptYWMp Cit7CisJc3RydWN0IGhpZl9taWJfbWFjX2FkZHJlc3MgbXNnID0geyB9OworCisJaWYgKG1hYykK KwkJZXRoZXJfYWRkcl9jb3B5KG1zZy5tYWNfYWRkciwgbWFjKTsKKwlyZXR1cm4gaGlmX3dyaXRl X21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwgSElGX01JQl9JRF9ET1QxMV9NQUNfQUREUkVTUywK KwkJCSAgICAgJm1zZywgc2l6ZW9mKG1zZykpOworfQorCitpbnQgaGlmX3NldF9yeF9maWx0ZXIo c3RydWN0IHdmeF92aWYgKnd2aWYsCisJCSAgICAgIGJvb2wgZmlsdGVyX2Jzc2lkLCBib29sIGZp bHRlcl9wcmJyZXEpCit7CisJc3RydWN0IGhpZl9taWJfcnhfZmlsdGVyIGFyZyA9IHsgfTsKKwor CWlmIChmaWx0ZXJfYnNzaWQpCisJCWFyZy5ic3NpZF9maWx0ZXIgPSAxOworCWlmICghZmlsdGVy X3ByYnJlcSkKKwkJYXJnLmZ3ZF9wcm9iZV9yZXEgPSAxOworCXJldHVybiBoaWZfd3JpdGVfbWli KHd2aWYtPndkZXYsIHd2aWYtPmlkLCBISUZfTUlCX0lEX1JYX0ZJTFRFUiwKKwkJCSAgICAgJmFy Zywgc2l6ZW9mKGFyZykpOworfQorCitpbnQgaGlmX3NldF9iZWFjb25fZmlsdGVyX3RhYmxlKHN0 cnVjdCB3ZnhfdmlmICp3dmlmLCBpbnQgdGJsX2xlbiwKKwkJCQljb25zdCBzdHJ1Y3QgaGlmX2ll X3RhYmxlX2VudHJ5ICp0YmwpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgaGlmX21pYl9iY25fZmls dGVyX3RhYmxlICphcmc7CisJaW50IGJ1Zl9sZW4gPSBzdHJ1Y3Rfc2l6ZShhcmcsIGllX3RhYmxl LCB0YmxfbGVuKTsKKworCWFyZyA9IGt6YWxsb2MoYnVmX2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYg KCFhcmcpCisJCXJldHVybiAtRU5PTUVNOworCWFyZy0+bnVtX29mX2luZm9fZWxtdHMgPSBjcHVf dG9fbGUzMih0YmxfbGVuKTsKKwltZW1jcHkoYXJnLT5pZV90YWJsZSwgdGJsLCBmbGV4X2FycmF5 X3NpemUoYXJnLCBpZV90YWJsZSwgdGJsX2xlbikpOworCXJldCA9IGhpZl93cml0ZV9taWIod3Zp Zi0+d2Rldiwgd3ZpZi0+aWQsCisJCQkgICAgSElGX01JQl9JRF9CRUFDT05fRklMVEVSX1RBQkxF LCBhcmcsIGJ1Zl9sZW4pOworCWtmcmVlKGFyZyk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGhp Zl9iZWFjb25fZmlsdGVyX2NvbnRyb2woc3RydWN0IHdmeF92aWYgKnd2aWYsCisJCQkgICAgICBp bnQgZW5hYmxlLCBpbnQgYmVhY29uX2NvdW50KQoreworCXN0cnVjdCBoaWZfbWliX2Jjbl9maWx0 ZXJfZW5hYmxlIGFyZyA9IHsKKwkJLmVuYWJsZSA9IGNwdV90b19sZTMyKGVuYWJsZSksCisJCS5i Y25fY291bnQgPSBjcHVfdG9fbGUzMihiZWFjb25fY291bnQpLAorCX07CisJcmV0dXJuIGhpZl93 cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsCisJCQkgICAgIEhJRl9NSUJfSURfQkVBQ09O X0ZJTFRFUl9FTkFCTEUsCisJCQkgICAgICZhcmcsIHNpemVvZihhcmcpKTsKK30KKworaW50IGhp Zl9zZXRfb3BlcmF0aW9uYWxfbW9kZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgZW51bSBoaWZfb3Bf cG93ZXJfbW9kZSBtb2RlKQoreworCXN0cnVjdCBoaWZfbWliX2dsX29wZXJhdGlvbmFsX3Bvd2Vy X21vZGUgYXJnID0geworCQkucG93ZXJfbW9kZSA9IG1vZGUsCisJCS53dXBfaW5kX2FjdGl2YXRp b24gPSAxLAorCX07CisKKwlyZXR1cm4gaGlmX3dyaXRlX21pYih3ZGV2LCAtMSwgSElGX01JQl9J RF9HTF9PUEVSQVRJT05BTF9QT1dFUl9NT0RFLAorCQkJICAgICAmYXJnLCBzaXplb2YoYXJnKSk7 Cit9CisKK2ludCBoaWZfc2V0X3RlbXBsYXRlX2ZyYW1lKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBz dHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgdTggZnJhbWVfdHlwZSwgaW50IGluaXRfcmF0ZSkK K3sKKwlzdHJ1Y3QgaGlmX21pYl90ZW1wbGF0ZV9mcmFtZSAqYXJnOworCisJV0FSTihza2ItPmxl biA+IEhJRl9BUElfTUFYX1RFTVBMQVRFX0ZSQU1FX1NJWkUsICJmcmFtZSBpcyB0b28gYmlnIik7 CisJc2tiX3B1c2goc2tiLCA0KTsKKwlhcmcgPSAoc3RydWN0IGhpZl9taWJfdGVtcGxhdGVfZnJh bWUgKilza2ItPmRhdGE7CisJc2tiX3B1bGwoc2tiLCA0KTsKKwlhcmctPmluaXRfcmF0ZSA9IGlu aXRfcmF0ZTsKKwlhcmctPmZyYW1lX3R5cGUgPSBmcmFtZV90eXBlOworCWFyZy0+ZnJhbWVfbGVu Z3RoID0gY3B1X3RvX2xlMTYoc2tiLT5sZW4pOworCXJldHVybiBoaWZfd3JpdGVfbWliKHd2aWYt PndkZXYsIHd2aWYtPmlkLCBISUZfTUlCX0lEX1RFTVBMQVRFX0ZSQU1FLAorCQkJICAgICBhcmcs IHNpemVvZigqYXJnKSArIHNrYi0+bGVuKTsKK30KKworaW50IGhpZl9zZXRfbWZwKHN0cnVjdCB3 ZnhfdmlmICp3dmlmLCBib29sIGNhcGFibGUsIGJvb2wgcmVxdWlyZWQpCit7CisJc3RydWN0IGhp Zl9taWJfcHJvdGVjdGVkX21nbXRfcG9saWN5IGFyZyA9IHsgfTsKKworCVdBUk4ocmVxdWlyZWQg JiYgIWNhcGFibGUsICJpbmNvaGVyZW50IGFyZ3VtZW50cyIpOworCWlmIChjYXBhYmxlKSB7CisJ CWFyZy5wbWZfZW5hYmxlID0gMTsKKwkJYXJnLmhvc3RfZW5jX2F1dGhfZnJhbWVzID0gMTsKKwl9 CisJaWYgKCFyZXF1aXJlZCkKKwkJYXJnLnVucG1mX2FsbG93ZWQgPSAxOworCXJldHVybiBoaWZf d3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLAorCQkJICAgICBISUZfTUlCX0lEX1BST1RF Q1RFRF9NR01UX1BPTElDWSwKKwkJCSAgICAgJmFyZywgc2l6ZW9mKGFyZykpOworfQorCitpbnQg aGlmX3NldF9ibG9ja19hY2tfcG9saWN5KHN0cnVjdCB3ZnhfdmlmICp3dmlmLAorCQkJICAgICB1 OCB0eF90aWRfcG9saWN5LCB1OCByeF90aWRfcG9saWN5KQoreworCXN0cnVjdCBoaWZfbWliX2Js b2NrX2Fja19wb2xpY3kgYXJnID0geworCQkuYmxvY2tfYWNrX3R4X3RpZF9wb2xpY3kgPSB0eF90 aWRfcG9saWN5LAorCQkuYmxvY2tfYWNrX3J4X3RpZF9wb2xpY3kgPSByeF90aWRfcG9saWN5LAor CX07CisKKwlyZXR1cm4gaGlmX3dyaXRlX21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwgSElGX01J Ql9JRF9CTE9DS19BQ0tfUE9MSUNZLAorCQkJICAgICAmYXJnLCBzaXplb2YoYXJnKSk7Cit9CisK K2ludCBoaWZfc2V0X2Fzc29jaWF0aW9uX21vZGUoc3RydWN0IHdmeF92aWYgKnd2aWYsIGludCBh bXBkdV9kZW5zaXR5LAorCQkJICAgICBib29sIGdyZWVuZmllbGQsIGJvb2wgc2hvcnRfcHJlYW1i bGUpCit7CisJc3RydWN0IGhpZl9taWJfc2V0X2Fzc29jaWF0aW9uX21vZGUgYXJnID0geworCQku cHJlYW1idHlwZV91c2UgPSAxLAorCQkubW9kZSA9IDEsCisJCS5zcGFjaW5nID0gMSwKKwkJLnNo b3J0X3ByZWFtYmxlID0gc2hvcnRfcHJlYW1ibGUsCisJCS5ncmVlbmZpZWxkID0gZ3JlZW5maWVs ZCwKKwkJLm1wZHVfc3RhcnRfc3BhY2luZyA9IGFtcGR1X2RlbnNpdHksCisJfTsKKworCXJldHVy biBoaWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLAorCQkJICAgICBISUZfTUlCX0lE X1NFVF9BU1NPQ0lBVElPTl9NT0RFLCAmYXJnLCBzaXplb2YoYXJnKSk7Cit9CisKK2ludCBoaWZf c2V0X3R4X3JhdGVfcmV0cnlfcG9saWN5KHN0cnVjdCB3ZnhfdmlmICp3dmlmLAorCQkJCSBpbnQg cG9saWN5X2luZGV4LCB1OCAqcmF0ZXMpCit7CisJc3RydWN0IGhpZl9taWJfc2V0X3R4X3JhdGVf cmV0cnlfcG9saWN5ICphcmc7CisJc2l6ZV90IHNpemUgPSBzdHJ1Y3Rfc2l6ZShhcmcsIHR4X3Jh dGVfcmV0cnlfcG9saWN5LCAxKTsKKwlpbnQgcmV0OworCisJYXJnID0ga3phbGxvYyhzaXplLCBH RlBfS0VSTkVMKTsKKwlpZiAoIWFyZykKKwkJcmV0dXJuIC1FTk9NRU07CisJYXJnLT5udW1fdHhf cmF0ZV9wb2xpY2llcyA9IDE7CisJYXJnLT50eF9yYXRlX3JldHJ5X3BvbGljeVswXS5wb2xpY3lf aW5kZXggPSBwb2xpY3lfaW5kZXg7CisJYXJnLT50eF9yYXRlX3JldHJ5X3BvbGljeVswXS5zaG9y dF9yZXRyeV9jb3VudCA9IDI1NTsKKwlhcmctPnR4X3JhdGVfcmV0cnlfcG9saWN5WzBdLmxvbmdf cmV0cnlfY291bnQgPSAyNTU7CisJYXJnLT50eF9yYXRlX3JldHJ5X3BvbGljeVswXS5maXJzdF9y YXRlX3NlbCA9IDE7CisJYXJnLT50eF9yYXRlX3JldHJ5X3BvbGljeVswXS50ZXJtaW5hdGUgPSAx OworCWFyZy0+dHhfcmF0ZV9yZXRyeV9wb2xpY3lbMF0uY291bnRfaW5pdCA9IDE7CisJbWVtY3B5 KCZhcmctPnR4X3JhdGVfcmV0cnlfcG9saWN5WzBdLnJhdGVzLCByYXRlcywKKwkgICAgICAgc2l6 ZW9mKGFyZy0+dHhfcmF0ZV9yZXRyeV9wb2xpY3lbMF0ucmF0ZXMpKTsKKwlyZXQgPSBoaWZfd3Jp dGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLAorCQkJICAgIEhJRl9NSUJfSURfU0VUX1RYX1JB VEVfUkVUUllfUE9MSUNZLCBhcmcsIHNpemUpOworCWtmcmVlKGFyZyk7CisJcmV0dXJuIHJldDsK K30KKworaW50IGhpZl9rZWVwX2FsaXZlX3BlcmlvZChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50 IHBlcmlvZCkKK3sKKwlzdHJ1Y3QgaGlmX21pYl9rZWVwX2FsaXZlX3BlcmlvZCBhcmcgPSB7CisJ CS5rZWVwX2FsaXZlX3BlcmlvZCA9IGNwdV90b19sZTE2KHBlcmlvZCksCisJfTsKKworCXJldHVy biBoaWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLCBISUZfTUlCX0lEX0tFRVBfQUxJ VkVfUEVSSU9ELAorCQkJICAgICAmYXJnLCBzaXplb2YoYXJnKSk7Cit9OworCitpbnQgaGlmX3Nl dF9hcnBfaXB2NF9maWx0ZXIoc3RydWN0IHdmeF92aWYgKnd2aWYsIGludCBpZHgsIF9fYmUzMiAq YWRkcikKK3sKKwlzdHJ1Y3QgaGlmX21pYl9hcnBfaXBfYWRkcl90YWJsZSBhcmcgPSB7CisJCS5j b25kaXRpb25faWR4ID0gaWR4LAorCQkuYXJwX2VuYWJsZSA9IEhJRl9BUlBfTlNfRklMVEVSSU5H X0RJU0FCTEUsCisJfTsKKworCWlmIChhZGRyKSB7CisJCS8qIENhdXRpb246IHR5cGUgb2YgYWRk ciBpcyBfX2JlMzIgKi8KKwkJbWVtY3B5KGFyZy5pcHY0X2FkZHJlc3MsIGFkZHIsIHNpemVvZihh cmcuaXB2NF9hZGRyZXNzKSk7CisJCWFyZy5hcnBfZW5hYmxlID0gSElGX0FSUF9OU19GSUxURVJJ TkdfRU5BQkxFOworCX0KKwlyZXR1cm4gaGlmX3dyaXRlX21pYih3dmlmLT53ZGV2LCB3dmlmLT5p ZCwKKwkJCSAgICAgSElGX01JQl9JRF9BUlBfSVBfQUREUkVTU0VTX1RBQkxFLAorCQkJICAgICAm YXJnLCBzaXplb2YoYXJnKSk7Cit9CisKK2ludCBoaWZfdXNlX211bHRpX3R4X2NvbmYoc3RydWN0 IHdmeF9kZXYgKndkZXYsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBoaWZfbWliX2dsX3NldF9t dWx0aV9tc2cgYXJnID0geworCQkuZW5hYmxlX211bHRpX3R4X2NvbmYgPSBlbmFibGUsCisJfTsK KworCXJldHVybiBoaWZfd3JpdGVfbWliKHdkZXYsIC0xLCBISUZfTUlCX0lEX0dMX1NFVF9NVUxU SV9NU0csCisJCQkgICAgICZhcmcsIHNpemVvZihhcmcpKTsKK30KKworaW50IGhpZl9zZXRfdWFw c2RfaW5mbyhzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJc3Ry dWN0IGhpZl9taWJfc2V0X3VhcHNkX2luZm9ybWF0aW9uIGFyZyA9IHsgfTsKKworCWlmICh2YWwg JiBCSVQoSUVFRTgwMjExX0FDX1ZPKSkKKwkJYXJnLnRyaWdfdm9pY2UgPSAxOworCWlmICh2YWwg JiBCSVQoSUVFRTgwMjExX0FDX1ZJKSkKKwkJYXJnLnRyaWdfdmlkZW8gPSAxOworCWlmICh2YWwg JiBCSVQoSUVFRTgwMjExX0FDX0JFKSkKKwkJYXJnLnRyaWdfYmUgPSAxOworCWlmICh2YWwgJiBC SVQoSUVFRTgwMjExX0FDX0JLKSkKKwkJYXJnLnRyaWdfYmNrZ3JuZCA9IDE7CisJcmV0dXJuIGhp Zl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsCisJCQkgICAgIEhJRl9NSUJfSURfU0VU X1VBUFNEX0lORk9STUFUSU9OLAorCQkJICAgICAmYXJnLCBzaXplb2YoYXJnKSk7Cit9CisKK2lu dCBoaWZfZXJwX3VzZV9wcm90ZWN0aW9uKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBib29sIGVuYWJs ZSkKK3sKKwlzdHJ1Y3QgaGlmX21pYl9ub25fZXJwX3Byb3RlY3Rpb24gYXJnID0geworCQkudXNl X2N0c190b19zZWxmID0gZW5hYmxlLAorCX07CisKKwlyZXR1cm4gaGlmX3dyaXRlX21pYih3dmlm LT53ZGV2LCB3dmlmLT5pZCwKKwkJCSAgICAgSElGX01JQl9JRF9OT05fRVJQX1BST1RFQ1RJT04s ICZhcmcsIHNpemVvZihhcmcpKTsKK30KKworaW50IGhpZl9zbG90X3RpbWUoc3RydWN0IHdmeF92 aWYgKnd2aWYsIGludCB2YWwpCit7CisJc3RydWN0IGhpZl9taWJfc2xvdF90aW1lIGFyZyA9IHsK KwkJLnNsb3RfdGltZSA9IGNwdV90b19sZTMyKHZhbCksCisJfTsKKworCXJldHVybiBoaWZfd3Jp dGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLCBISUZfTUlCX0lEX1NMT1RfVElNRSwKKwkJCSAg ICAgJmFyZywgc2l6ZW9mKGFyZykpOworfQorCitpbnQgaGlmX3dlcF9kZWZhdWx0X2tleV9pZChz dHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50IHZhbCkKK3sKKwlzdHJ1Y3QgaGlmX21pYl93ZXBfZGVm YXVsdF9rZXlfaWQgYXJnID0geworCQkud2VwX2RlZmF1bHRfa2V5X2lkID0gdmFsLAorCX07CisK KwlyZXR1cm4gaGlmX3dyaXRlX21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwKKwkJCSAgICAgSElG X01JQl9JRF9ET1QxMV9XRVBfREVGQVVMVF9LRVlfSUQsCisJCQkgICAgICZhcmcsIHNpemVvZihh cmcpKTsKK30KKworaW50IGhpZl9ydHNfdGhyZXNob2xkKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBp bnQgdmFsKQoreworCXN0cnVjdCBoaWZfbWliX2RvdDExX3J0c190aHJlc2hvbGQgYXJnID0gewor CQkudGhyZXNob2xkID0gY3B1X3RvX2xlMzIodmFsID49IDAgPyB2YWwgOiAweEZGRkYpLAorCX07 CisKKwlyZXR1cm4gaGlmX3dyaXRlX21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwKKwkJCSAgICAg SElGX01JQl9JRF9ET1QxMV9SVFNfVEhSRVNIT0xELCAmYXJnLCBzaXplb2YoYXJnKSk7Cit9CmRp ZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl90eF9taWIuaCBi L2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX3R4X21pYi5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uODEyYjNiYTBmMDBlCi0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfdHhfbWliLmgKQEAgLTAs MCArMSw0OSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwor LyoKKyAqIEltcGxlbWVudGF0aW9uIG9mIGhvc3QtdG8tY2hpcCBNSUJzIG9mIFdGeHh4IFNwbGl0 IE1hYyAoV1NNKSBBUEkuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24g TGFib3JhdG9yaWVzLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCisg KiBDb3B5cmlnaHQgKEMpIDIwMTAsIFNULUVyaWNzc29uIFNBCisgKi8KKyNpZm5kZWYgV0ZYX0hJ Rl9UWF9NSUJfSAorI2RlZmluZSBXRlhfSElGX1RYX01JQl9ICisKK3N0cnVjdCB3ZnhfdmlmOwor c3RydWN0IHNrX2J1ZmY7CisKK2ludCBoaWZfc2V0X291dHB1dF9wb3dlcihzdHJ1Y3Qgd2Z4X3Zp ZiAqd3ZpZiwgaW50IHZhbCk7CitpbnQgaGlmX3NldF9iZWFjb25fd2FrZXVwX3BlcmlvZChzdHJ1 Y3Qgd2Z4X3ZpZiAqd3ZpZiwKKwkJCQkgdW5zaWduZWQgaW50IGR0aW1faW50ZXJ2YWwsCisJCQkJ IHVuc2lnbmVkIGludCBsaXN0ZW5faW50ZXJ2YWwpOworaW50IGhpZl9zZXRfcmNwaV9yc3NpX3Ro cmVzaG9sZChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwKKwkJCQlpbnQgcnNzaV90aG9sZCwgaW50IHJz c2lfaHlzdCk7CitpbnQgaGlmX2dldF9jb3VudGVyc190YWJsZShzdHJ1Y3Qgd2Z4X2RldiAqd2Rl diwgaW50IHZpZl9pZCwKKwkJCSAgIHN0cnVjdCBoaWZfbWliX2V4dGVuZGVkX2NvdW50X3RhYmxl ICphcmcpOworaW50IGhpZl9zZXRfbWFjYWRkcihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgdTggKm1h Yyk7CitpbnQgaGlmX3NldF9yeF9maWx0ZXIoc3RydWN0IHdmeF92aWYgKnd2aWYsCisJCSAgICAg IGJvb2wgZmlsdGVyX2Jzc2lkLCBib29sIGZ3ZF9wcm9iZV9yZXEpOworaW50IGhpZl9zZXRfYmVh Y29uX2ZpbHRlcl90YWJsZShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50IHRibF9sZW4sCisJCQkJ Y29uc3Qgc3RydWN0IGhpZl9pZV90YWJsZV9lbnRyeSAqdGJsKTsKK2ludCBoaWZfYmVhY29uX2Zp bHRlcl9jb250cm9sKHN0cnVjdCB3ZnhfdmlmICp3dmlmLAorCQkJICAgICAgaW50IGVuYWJsZSwg aW50IGJlYWNvbl9jb3VudCk7CitpbnQgaGlmX3NldF9vcGVyYXRpb25hbF9tb2RlKHN0cnVjdCB3 ZnhfZGV2ICp3ZGV2LCBlbnVtIGhpZl9vcF9wb3dlcl9tb2RlIG1vZGUpOworaW50IGhpZl9zZXRf dGVtcGxhdGVfZnJhbWUoc3RydWN0IHdmeF92aWYgKnd2aWYsIHN0cnVjdCBza19idWZmICpza2Is CisJCQkgICB1OCBmcmFtZV90eXBlLCBpbnQgaW5pdF9yYXRlKTsKK2ludCBoaWZfc2V0X21mcChz dHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgYm9vbCBjYXBhYmxlLCBib29sIHJlcXVpcmVkKTsKK2ludCBo aWZfc2V0X2Jsb2NrX2Fja19wb2xpY3koc3RydWN0IHdmeF92aWYgKnd2aWYsCisJCQkgICAgIHU4 IHR4X3RpZF9wb2xpY3ksIHU4IHJ4X3RpZF9wb2xpY3kpOworaW50IGhpZl9zZXRfYXNzb2NpYXRp b25fbW9kZShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50IGFtcGR1X2RlbnNpdHksCisJCQkgICAg IGJvb2wgZ3JlZW5maWVsZCwgYm9vbCBzaG9ydF9wcmVhbWJsZSk7CitpbnQgaGlmX3NldF90eF9y YXRlX3JldHJ5X3BvbGljeShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwKKwkJCQkgaW50IHBvbGljeV9p bmRleCwgdTggKnJhdGVzKTsKK2ludCBoaWZfa2VlcF9hbGl2ZV9wZXJpb2Qoc3RydWN0IHdmeF92 aWYgKnd2aWYsIGludCBwZXJpb2QpOworaW50IGhpZl9zZXRfYXJwX2lwdjRfZmlsdGVyKHN0cnVj dCB3ZnhfdmlmICp3dmlmLCBpbnQgaWR4LCBfX2JlMzIgKmFkZHIpOworaW50IGhpZl91c2VfbXVs dGlfdHhfY29uZihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgYm9vbCBlbmFibGUpOworaW50IGhpZl9z ZXRfdWFwc2RfaW5mbyhzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgdW5zaWduZWQgbG9uZyB2YWwpOwor aW50IGhpZl9lcnBfdXNlX3Byb3RlY3Rpb24oc3RydWN0IHdmeF92aWYgKnd2aWYsIGJvb2wgZW5h YmxlKTsKK2ludCBoaWZfc2xvdF90aW1lKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBpbnQgdmFsKTsK K2ludCBoaWZfd2VwX2RlZmF1bHRfa2V5X2lkKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBpbnQgdmFs KTsKK2ludCBoaWZfcnRzX3RocmVzaG9sZChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50IHZhbCk7 CisKKyNlbmRpZgotLSAKMi4zMC4yCgo=