From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.5 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MSGID_FROM_MTA_HEADER,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E3C50C43457 for ; Mon, 12 Oct 2020 10:48:47 +0000 (UTC) Received: from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 77FA5206B6 for ; Mon, 12 Oct 2020 10:48:47 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=silabs.onmicrosoft.com header.i=@silabs.onmicrosoft.com header.b="DKvHKtj9" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 77FA5206B6 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=silabs.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=driverdev-devel-bounces@linuxdriverproject.org Received: from localhost (localhost [127.0.0.1]) by silver.osuosl.org (Postfix) with ESMTP id 21EF42150A; Mon, 12 Oct 2020 10:48:47 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from silver.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 4m+S6HaubRxp; Mon, 12 Oct 2020 10:48:04 +0000 (UTC) Received: from ash.osuosl.org (ash.osuosl.org [140.211.166.34]) by silver.osuosl.org (Postfix) with ESMTP id 6B5892094E; Mon, 12 Oct 2020 10:47:35 +0000 (UTC) Received: from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137]) by ash.osuosl.org (Postfix) with ESMTP id 50C831BF5B5 for ; Mon, 12 Oct 2020 10:47:33 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by fraxinus.osuosl.org (Postfix) with ESMTP id 3D6AD860AD for ; Mon, 12 Oct 2020 10:47:33 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from fraxinus.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id XiJL0a5IGaq9 for ; Mon, 12 Oct 2020 10:47:30 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2063.outbound.protection.outlook.com [40.107.223.63]) by fraxinus.osuosl.org (Postfix) with ESMTPS id 540D68607A for ; Mon, 12 Oct 2020 10:47:30 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Bg/AJiXqUGBy6DiCpWRGJ7RdATxkh9LeRaggkpPos9LXytagz+3xBW53BmSz3hpoNhDPV7k6dkEOt5Pd24jY6BC9XlJppDYnCFFDZjTvPdIhwRCtch64A7suqM9DhOLdmMe26BDYqQr8q9eP+prz0DqKQI36wKuaA1LTtOP+aO8y1Og20uPtIpu/kvcmA3fft7k1EBz5Ga/DUJb+gOH/4rmyre6SPo6XM1BgrFWIVwyKJgodPTGk+GUoB+L7xhkHYj52pyEjPJ4B0+n3MMI1NPcc0bcgD+OSHV6VM4PcAN4raqF756LV/I+bFZnixzZDY8gWFjgAkHEd05fln/Qe6Q== 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=fJuo1eTlRIxD0uH9IZeBgKg8lxb18ZMVlAk1Dki+i6E=; b=OMy9vlIuUNGFRUsLhiXXUEblSoFNfLs3ER5HSwOp7TTrMHR0uNv+im7fk37NkZzsVNlzyQHSGwfASDyhKVUP3CyrYszYcRwXxPpIIop8WypZ5bjcu/B5kqFM+Qm5vF0uU4mQDMLBr994kIhskjuey5H44AdSqgFN9zkf7dWnzm+4UWFJH7TdFUaVRNaMipHDTRMRN0AzjhYifjI5Sb40mr7QevATs+rkuh04zhqIfcs5nY7ZEX+9wTahFYyaHaFIyKS3SeVZeMQ51gWtQl25Ag+QUBF0smGjjXDw/qrMisJtgpS5EtM84AE/8yk20BEOai+xpLQ0BkM1XWRyhFshIA== 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=fJuo1eTlRIxD0uH9IZeBgKg8lxb18ZMVlAk1Dki+i6E=; b=DKvHKtj9GibBzLU4Lytc5BfbMf63QXsOZrw0jev+NzOuWWuDzokTpQwMH8j/wKNSQId1i5t/VO8Y8+qsa+NBQqWEGF7Sy15xYJiNpGgFm/+G9jKJ3JADppefiuYGJ6PvqCLIjJ28H4/T1IVjPYlqj0MNxjnfXfcTXOUN6tyiO84= 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 SA0PR11MB4734.namprd11.prod.outlook.com (2603:10b6:806:99::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3455.23; Mon, 12 Oct 2020 10:47:28 +0000 Received: from SN6PR11MB2718.namprd11.prod.outlook.com ([fe80::4f5:fbe5:44a7:cb8a]) by SN6PR11MB2718.namprd11.prod.outlook.com ([fe80::4f5:fbe5:44a7:cb8a%5]) with mapi id 15.20.3455.029; Mon, 12 Oct 2020 10:47:28 +0000 From: Jerome Pouiller To: linux-wireless@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH 12/23] wfx: add hif_tx*.c/hif_tx*.h Date: Mon, 12 Oct 2020 12:46:37 +0200 Message-Id: <20201012104648.985256-13-Jerome.Pouiller@silabs.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201012104648.985256-1-Jerome.Pouiller@silabs.com> References: <20201012104648.985256-1-Jerome.Pouiller@silabs.com> X-Originating-IP: [82.67.86.106] X-ClientProxiedBy: PR3P189CA0005.EURP189.PROD.OUTLOOK.COM (2603:10a6:102:52::10) To SN6PR11MB2718.namprd11.prod.outlook.com (2603:10b6:805:63::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from pc-42.home (82.67.86.106) by PR3P189CA0005.EURP189.PROD.OUTLOOK.COM (2603:10a6:102:52::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3455.21 via Frontend Transport; Mon, 12 Oct 2020 10:47:26 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: acc779b7-3938-4e0c-c571-08d86e9c367d X-MS-TrafficTypeDiagnostic: SA0PR11MB4734: 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: rAXdSI3UH/R/41Pa6XaDmZTpgrsVOs0i/5w7xEDHfU503KopsqMD4tN0nFU890ME1XAbRx6J+CQJpvN9lOnlyRy2YzOrIv9jIpKg79NqzwOTrdFLwlXXSaJsx9bL10/qXoALsUyniJve4G2eVPAVPpZ8MCly0aG+Dt9bEVC2NOsB+aQR+8e8sGnwolCdwhdUs26EPTkhi0iJAPBtDvAkwY/xdG6jS4+GaBZjk/VFj5MnrsLJHlOo8tp/rRz11yBfEU1/8CD0p6WI5h+bC4W1Jp3DU3wO6qzIWfM+bkd7vVJmpo1ULQMtWGQ0t+VOzQH0LaVbEy2dPX712B+v68jxQw== 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:(39850400004)(396003)(366004)(136003)(346002)(376002)(66556008)(66476007)(6512007)(26005)(36756003)(66946007)(16526019)(186003)(316002)(4326008)(2616005)(956004)(1076003)(30864003)(5660300002)(107886003)(6486002)(54906003)(86362001)(8676002)(83380400001)(8936002)(66574015)(52116002)(2906002)(6506007)(8886007)(6666004)(478600001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: QX8vMHBnaP7vKPSdOgJiedYY5N9JKBmODpoaLBNOXhhVWsua0Vlr9vb4Obt7Cp2O0wIhtdZ6hUlpg4ZsKNTzO2pbWe1IUZgCjNstvfn1qysFJ0Co5bOGmUmytfo9yKCVZnu3YsMeA10dAtMSSnHuGDyS2sK1oKa3NFwMWyomad9Oeu47zC+xVFwDjxzui0+d+n0rJZ5VBqTumjQ+m7ZNDEoh6QSul6c20IHv01EQ0b4GWglrH5gZtE4zK1NNYw1V+OBjyqNfSoLY9XOZdIEpZYxMMqOqx5IxeR8kpeGNzI1xzIek1q4mdMKotZA2ryUpeV+WqCtOR6q5a+m9v3m8tN/y9b/VyCLqwkl1pM6XE29EI1M6sFt/vOQL4s7DuEi83NjE2V7d3KRItk77CkaxGb7b5pFlVkvwKTl12d3UdvjP/Oxi1Xg2Xg+vqJG4Yj9Ek/+JSEkN6kbbd4ZoBPD5G4eOfoyqWfUaLrjWjuBP+BPIyY4wBpCAPD6P6Tsv7MbsLHAbOGyS3sQkGInV3NrnYUT8VRKDDVQlYmoYD+u2E/88leeozy9zriHdMnSYl3q/xceg1UndRmOWbjt5Up6HL+af1r6FQAkU+WG0+lb6POwiek8OSSrDvMyG6cdzQ0BIibCU3bsxhu8Gl+luPEI1mQ== X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: acc779b7-3938-4e0c-c571-08d86e9c367d X-MS-Exchange-CrossTenant-AuthSource: SN6PR11MB2718.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Oct 2020 10:47:28.3789 (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: Xl/g150N5YdbfbRN+yCUlwD7ootDjJzKR2J4XHjjg5KCRULiIuA926rgSmcZuewXP2iKuGqbJ0ltYcNhRi60vA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR11MB4734 X-BeenThere: driverdev-devel@linuxdriverproject.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux Driver Project Developer List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devel@driverdev.osuosl.org, devicetree@vger.kernel.org, Greg Kroah-Hartman , linux-kernel@vger.kernel.org, Rob Herring , "David S . Miller" , Kalle Valo Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: driverdev-devel-bounces@linuxdriverproject.org Sender: "devel" RnJvbTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29tPgoKU2ln bmVkLW9mZi1ieTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29t PgotLS0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX3R4LmMgICAgIHwgNTIz ICsrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlm X3R4LmggICAgIHwgIDYwICsrKwogZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZf dHhfbWliLmMgfCAzMjQgKysrKysrKysrKysrCiBkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMv d2Z4L2hpZl90eF9taWIuaCB8ICA0OSArKwogNCBmaWxlcyBjaGFuZ2VkLCA5NTYgaW5zZXJ0aW9u cygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngv aGlmX3R4LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMv d2Z4L2hpZl90eC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2ls YWJzL3dmeC9oaWZfdHhfbWliLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJl bGVzcy9zaWxhYnMvd2Z4L2hpZl90eF9taWIuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dp cmVsZXNzL3NpbGFicy93ZngvaGlmX3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMv d2Z4L2hpZl90eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNjNi NDM3MjYxZWI3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJz L3dmeC9oaWZfdHguYwpAQCAtMCwwICsxLDUyMyBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp 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 YWNlOworCWludCByZXQ7CisKKwkvLyBEbyBub3Qgd2FpdCBmb3IgYW55IHJlcGx5IGlmIGNoaXAg aXMgZnJvemVuCisJaWYgKHdkZXYtPmNoaXBfZnJvemVuKQorCQlyZXR1cm4gLUVUSU1FRE9VVDsK KworCW11dGV4X2xvY2soJndkZXYtPmhpZl9jbWQubG9jayk7CisJV0FSTih3ZGV2LT5oaWZfY21k LmJ1Zl9zZW5kLCAiZGF0YSBsb2NraW5nIGVycm9yIik7CisKKwkvLyBOb3RlOiBjYWxsIHRvIGNv bXBsZXRlKCkgYmVsb3cgaGFzIGFuIGltcGxpY2l0IG1lbW9yeSBiYXJyaWVyIHRoYXQKKwkvLyBo b3BlZnVsbHkgcHJvdGVjdCBidWZfc2VuZAorCXdkZXYtPmhpZl9jbWQuYnVmX3NlbmQgPSByZXF1 ZXN0OworCXdkZXYtPmhpZl9jbWQuYnVmX3JlY3YgPSByZXBseTsKKwl3ZGV2LT5oaWZfY21kLmxl bl9yZWN2ID0gcmVwbHlfbGVuOworCWNvbXBsZXRlKCZ3ZGV2LT5oaWZfY21kLnJlYWR5KTsKKwor CXdmeF9iaF9yZXF1ZXN0X3R4KHdkZXYpOworCisJaWYgKG5vX3JlcGx5KSB7CisJCS8vIENoaXAg d29uJ3QgcmVwbHkuIEdpdmUgZW5vdWdoIHRpbWUgdG8gdGhlIHdxIHRvIHNlbmQgdGhlCisJCS8v IGJ1ZmZlci4KKwkJbXNsZWVwKDEwMCk7CisJCXdkZXYtPmhpZl9jbWQuYnVmX3NlbmQgPSBOVUxM OworCQltdXRleF91bmxvY2soJndkZXYtPmhpZl9jbWQubG9jayk7CisJCXJldHVybiAwOworCX0K KworCWlmICh3ZGV2LT5wb2xsX2lycSkKKwkJd2Z4X2JoX3BvbGxfaXJxKHdkZXYpOworCisJcmV0 ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZ3ZGV2LT5oaWZfY21kLmRvbmUsIDEgKiBI Wik7CisJaWYgKCFyZXQpIHsKKwkJZGV2X2Vycih3ZGV2LT5kZXYsICJjaGlwIGlzIGFibm9ybWFs bHkgbG9uZyB0byBhbnN3ZXJcbiIpOworCQlyZWluaXRfY29tcGxldGlvbigmd2Rldi0+aGlmX2Nt ZC5yZWFkeSk7CisJCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmd2Rldi0+aGlm X2NtZC5kb25lLCAzICogSFopOworCX0KKwlpZiAoIXJldCkgeworCQlkZXZfZXJyKHdkZXYtPmRl diwgImNoaXAgZGlkIG5vdCBhbnN3ZXJcbiIpOworCQl3ZnhfcGVuZGluZ19kdW1wX29sZF9mcmFt ZXMod2RldiwgMzAwMCk7CisJCXdkZXYtPmNoaXBfZnJvemVuID0gdHJ1ZTsKKwkJcmVpbml0X2Nv bXBsZXRpb24oJndkZXYtPmhpZl9jbWQuZG9uZSk7CisJCXJldCA9IC1FVElNRURPVVQ7CisJfSBl bHNlIHsKKwkJcmV0ID0gd2Rldi0+aGlmX2NtZC5yZXQ7CisJfQorCisJd2Rldi0+aGlmX2NtZC5i dWZfc2VuZCA9IE5VTEw7CisJbXV0ZXhfdW5sb2NrKCZ3ZGV2LT5oaWZfY21kLmxvY2spOworCisJ aWYgKHJldCAmJgorCSAgICAoY21kID09IEhJRl9SRVFfSURfUkVBRF9NSUIgfHwgY21kID09IEhJ Rl9SRVFfSURfV1JJVEVfTUlCKSkgeworCQltaWJfbmFtZSA9IGdldF9taWJfbmFtZSgoKHUxNiAq KXJlcXVlc3QpWzJdKTsKKwkJbWliX3NlcCA9ICIvIjsKKwl9CisJaWYgKHJldCA8IDApCisJCWRl dl9lcnIod2Rldi0+ZGV2LAorCQkJIldTTSByZXF1ZXN0ICVzJXMlcyAoJSMuMngpIG9uIHZpZiAl ZCByZXR1cm5lZCBlcnJvciAlZFxuIiwKKwkJCWdldF9oaWZfbmFtZShjbWQpLCBtaWJfc2VwLCBt aWJfbmFtZSwgY21kLCB2aWYsIHJldCk7CisJaWYgKHJldCA+IDApCisJCWRldl93YXJuKHdkZXYt PmRldiwKKwkJCSAiV1NNIHJlcXVlc3QgJXMlcyVzICglIy4yeCkgb24gdmlmICVkIHJldHVybmVk IHN0YXR1cyAlZFxuIiwKKwkJCSBnZXRfaGlmX25hbWUoY21kKSwgbWliX3NlcCwgbWliX25hbWUs IGNtZCwgdmlmLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworLy8gVGhpcyBmdW5jdGlvbiBp cyBzcGVjaWFsLiBBZnRlciBISUZfUkVRX0lEX1NIVVRfRE9XTiwgY2hpcCB3b24ndCByZXBseSB0 byBhbnkKKy8vIHJlcXVlc3QgYW55bW9yZS4gT2J2aW91c2x5LCBvbmx5IGNhbGwgdGhpcyBmdW5j dGlvbiBkdXJpbmcgZGV2aWNlIHVucmVnaXN0ZXIuCitpbnQgaGlmX3NodXRkb3duKHN0cnVjdCB3 ZnhfZGV2ICp3ZGV2KQoreworCWludCByZXQ7CisJc3RydWN0IGhpZl9tc2cgKmhpZjsKKworCXdm eF9hbGxvY19oaWYoMCwgJmhpZik7CisJaWYgKCFoaWYpCisJCXJldHVybiAtRU5PTUVNOworCXdm eF9maWxsX2hlYWRlcihoaWYsIC0xLCBISUZfUkVRX0lEX1NIVVRfRE9XTiwgMCk7CisJcmV0ID0g d2Z4X2NtZF9zZW5kKHdkZXYsIGhpZiwgTlVMTCwgMCwgdHJ1ZSk7CisJaWYgKHdkZXYtPnBkYXRh LmdwaW9fd2FrZXVwKQorCQlncGlvZF9zZXRfdmFsdWUod2Rldi0+cGRhdGEuZ3Bpb193YWtldXAs IDApOworCWVsc2UKKwkJY29udHJvbF9yZWdfd3JpdGUod2RldiwgMCk7CisJa2ZyZWUoaGlmKTsK KwlyZXR1cm4gcmV0OworfQorCitpbnQgaGlmX2NvbmZpZ3VyYXRpb24oc3RydWN0IHdmeF9kZXYg KndkZXYsIGNvbnN0IHU4ICpjb25mLCBzaXplX3QgbGVuKQoreworCWludCByZXQ7CisJc2l6ZV90 IGJ1Zl9sZW4gPSBzaXplb2Yoc3RydWN0IGhpZl9yZXFfY29uZmlndXJhdGlvbikgKyBsZW47CisJ c3RydWN0IGhpZl9tc2cgKmhpZjsKKwlzdHJ1Y3QgaGlmX3JlcV9jb25maWd1cmF0aW9uICpib2R5 ID0gd2Z4X2FsbG9jX2hpZihidWZfbGVuLCAmaGlmKTsKKworCWlmICghaGlmKQorCQlyZXR1cm4g LUVOT01FTTsKKwlib2R5LT5sZW5ndGggPSBjcHVfdG9fbGUxNihsZW4pOworCW1lbWNweShib2R5 LT5wZHNfZGF0YSwgY29uZiwgbGVuKTsKKwl3ZnhfZmlsbF9oZWFkZXIoaGlmLCAtMSwgSElGX1JF UV9JRF9DT05GSUdVUkFUSU9OLCBidWZfbGVuKTsKKwlyZXQgPSB3ZnhfY21kX3NlbmQod2Rldiwg aGlmLCBOVUxMLCAwLCBmYWxzZSk7CisJa2ZyZWUoaGlmKTsKKwlyZXR1cm4gcmV0OworfQorCitp bnQgaGlmX3Jlc2V0KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBib29sIHJlc2V0X3N0YXQpCit7CisJ aW50IHJldDsKKwlzdHJ1Y3QgaGlmX21zZyAqaGlmOworCXN0cnVjdCBoaWZfcmVxX3Jlc2V0ICpi b2R5ID0gd2Z4X2FsbG9jX2hpZihzaXplb2YoKmJvZHkpLCAmaGlmKTsKKworCWlmICghaGlmKQor CQlyZXR1cm4gLUVOT01FTTsKKwlib2R5LT5yZXNldF9zdGF0ID0gcmVzZXRfc3RhdDsKKwl3Znhf ZmlsbF9oZWFkZXIoaGlmLCB3dmlmLT5pZCwgSElGX1JFUV9JRF9SRVNFVCwgc2l6ZW9mKCpib2R5 KSk7CisJcmV0ID0gd2Z4X2NtZF9zZW5kKHd2aWYtPndkZXYsIGhpZiwgTlVMTCwgMCwgZmFsc2Up OworCWtmcmVlKGhpZik7CisJcmV0dXJuIHJldDsKK30KKworaW50IGhpZl9yZWFkX21pYihzdHJ1 Y3Qgd2Z4X2RldiAqd2RldiwgaW50IHZpZl9pZCwgdTE2IG1pYl9pZCwKKwkJIHZvaWQgKnZhbCwg c2l6ZV90IHZhbF9sZW4pCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgaGlmX21zZyAqaGlmOworCWlu dCBidWZfbGVuID0gc2l6ZW9mKHN0cnVjdCBoaWZfY25mX3JlYWRfbWliKSArIHZhbF9sZW47CisJ c3RydWN0IGhpZl9yZXFfcmVhZF9taWIgKmJvZHkgPSB3ZnhfYWxsb2NfaGlmKHNpemVvZigqYm9k eSksICZoaWYpOworCXN0cnVjdCBoaWZfY25mX3JlYWRfbWliICpyZXBseSA9IGttYWxsb2MoYnVm X2xlbiwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWJvZHkgfHwgIXJlcGx5KSB7CisJCXJldCA9IC1F Tk9NRU07CisJCWdvdG8gb3V0OworCX0KKwlib2R5LT5taWJfaWQgPSBjcHVfdG9fbGUxNihtaWJf aWQpOworCXdmeF9maWxsX2hlYWRlcihoaWYsIHZpZl9pZCwgSElGX1JFUV9JRF9SRUFEX01JQiwg c2l6ZW9mKCpib2R5KSk7CisJcmV0ID0gd2Z4X2NtZF9zZW5kKHdkZXYsIGhpZiwgcmVwbHksIGJ1 Zl9sZW4sIGZhbHNlKTsKKworCWlmICghcmV0ICYmIG1pYl9pZCAhPSBsZTE2X3RvX2NwdShyZXBs eS0+bWliX2lkKSkgeworCQlkZXZfd2Fybih3ZGV2LT5kZXYsICIlczogY29uZmlybWF0aW9uIG1p c21hdGNoIHJlcXVlc3RcbiIsCisJCQkgX19mdW5jX18pOworCQlyZXQgPSAtRUlPOworCX0KKwlp ZiAocmV0ID09IC1FTk9NRU0pCisJCWRldl9lcnIod2Rldi0+ZGV2LCAiYnVmZmVyIGlzIHRvbyBz bWFsbCB0byByZWNlaXZlICVzICglenUgPCAlZClcbiIsCisJCQlnZXRfbWliX25hbWUobWliX2lk KSwgdmFsX2xlbiwKKwkJCWxlMTZfdG9fY3B1KHJlcGx5LT5sZW5ndGgpKTsKKwlpZiAoIXJldCkK KwkJbWVtY3B5KHZhbCwgJnJlcGx5LT5taWJfZGF0YSwgbGUxNl90b19jcHUocmVwbHktPmxlbmd0 aCkpOworCWVsc2UKKwkJbWVtc2V0KHZhbCwgMHhGRiwgdmFsX2xlbik7CitvdXQ6CisJa2ZyZWUo aGlmKTsKKwlrZnJlZShyZXBseSk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGhpZl93cml0ZV9t aWIoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCB2aWZfaWQsIHUxNiBtaWJfaWQsCisJCSAgdm9p ZCAqdmFsLCBzaXplX3QgdmFsX2xlbikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBoaWZfbXNnICpo aWY7CisJaW50IGJ1Zl9sZW4gPSBzaXplb2Yoc3RydWN0IGhpZl9yZXFfd3JpdGVfbWliKSArIHZh bF9sZW47CisJc3RydWN0IGhpZl9yZXFfd3JpdGVfbWliICpib2R5ID0gd2Z4X2FsbG9jX2hpZihi dWZfbGVuLCAmaGlmKTsKKworCWlmICghaGlmKQorCQlyZXR1cm4gLUVOT01FTTsKKwlib2R5LT5t aWJfaWQgPSBjcHVfdG9fbGUxNihtaWJfaWQpOworCWJvZHktPmxlbmd0aCA9IGNwdV90b19sZTE2 KHZhbF9sZW4pOworCW1lbWNweSgmYm9keS0+bWliX2RhdGEsIHZhbCwgdmFsX2xlbik7CisJd2Z4 X2ZpbGxfaGVhZGVyKGhpZiwgdmlmX2lkLCBISUZfUkVRX0lEX1dSSVRFX01JQiwgYnVmX2xlbik7 CisJcmV0ID0gd2Z4X2NtZF9zZW5kKHdkZXYsIGhpZiwgTlVMTCwgMCwgZmFsc2UpOworCWtmcmVl KGhpZik7CisJcmV0dXJuIHJldDsKK30KKworaW50IGhpZl9zY2FuKHN0cnVjdCB3ZnhfdmlmICp3 dmlmLCBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEsCisJICAgICBpbnQgY2hhbl9z dGFydF9pZHgsIGludCBjaGFuX251bSwgaW50ICp0aW1lb3V0KQoreworCWludCByZXQsIGk7CisJ c3RydWN0IGhpZl9tc2cgKmhpZjsKKwlzaXplX3QgYnVmX2xlbiA9CisJCXNpemVvZihzdHJ1Y3Qg aGlmX3JlcV9zdGFydF9zY2FuX2FsdCkgKyBjaGFuX251bSAqIHNpemVvZih1OCk7CisJc3RydWN0 IGhpZl9yZXFfc3RhcnRfc2Nhbl9hbHQgKmJvZHkgPSB3ZnhfYWxsb2NfaGlmKGJ1Zl9sZW4sICZo aWYpOworCWludCB0bW9fY2hhbl9mZywgdG1vX2NoYW5fYmcsIHRtbzsKKworCVdBUk4oY2hhbl9u dW0gPiBISUZfQVBJX01BWF9OQl9DSEFOTkVMUywgImludmFsaWQgcGFyYW1zIik7CisJV0FSTihy ZXEtPm5fc3NpZHMgPiBISUZfQVBJX01BWF9OQl9TU0lEUywgImludmFsaWQgcGFyYW1zIik7CisK KwlpZiAoIWhpZikKKwkJcmV0dXJuIC1FTk9NRU07CisJZm9yIChpID0gMDsgaSA8IHJlcS0+bl9z c2lkczsgaSsrKSB7CisJCW1lbWNweShib2R5LT5zc2lkX2RlZltpXS5zc2lkLCByZXEtPnNzaWRz W2ldLnNzaWQsCisJCSAgICAgICBJRUVFODAyMTFfTUFYX1NTSURfTEVOKTsKKwkJYm9keS0+c3Np ZF9kZWZbaV0uc3NpZF9sZW5ndGggPQorCQkJY3B1X3RvX2xlMzIocmVxLT5zc2lkc1tpXS5zc2lk X2xlbik7CisJfQorCWJvZHktPm51bV9vZl9zc2lkcyA9IEhJRl9BUElfTUFYX05CX1NTSURTOwor CWJvZHktPm1haW50YWluX2N1cnJlbnRfYnNzID0gMTsKKwlib2R5LT5kaXNhbGxvd19wcyA9IDE7 CisJYm9keS0+dHhfcG93ZXJfbGV2ZWwgPQorCQljcHVfdG9fbGUzMihyZXEtPmNoYW5uZWxzW2No YW5fc3RhcnRfaWR4XS0+bWF4X3Bvd2VyKTsKKwlib2R5LT5udW1fb2ZfY2hhbm5lbHMgPSBjaGFu X251bTsKKwlmb3IgKGkgPSAwOyBpIDwgY2hhbl9udW07IGkrKykKKwkJYm9keS0+Y2hhbm5lbF9s aXN0W2ldID0KKwkJCXJlcS0+Y2hhbm5lbHNbaSArIGNoYW5fc3RhcnRfaWR4XS0+aHdfdmFsdWU7 CisJaWYgKHJlcS0+bm9fY2NrKQorCQlib2R5LT5tYXhfdHJhbnNtaXRfcmF0ZSA9IEFQSV9SQVRF X0lOREVYX0dfNk1CUFM7CisJZWxzZQorCQlib2R5LT5tYXhfdHJhbnNtaXRfcmF0ZSA9IEFQSV9S QVRFX0lOREVYX0JfMU1CUFM7CisJaWYgKHJlcS0+Y2hhbm5lbHNbY2hhbl9zdGFydF9pZHhdLT5m bGFncyAmIElFRUU4MDIxMV9DSEFOX05PX0lSKSB7CisJCWJvZHktPm1pbl9jaGFubmVsX3RpbWUg PSBjcHVfdG9fbGUzMig1MCk7CisJCWJvZHktPm1heF9jaGFubmVsX3RpbWUgPSBjcHVfdG9fbGUz MigxNTApOworCX0gZWxzZSB7CisJCWJvZHktPm1pbl9jaGFubmVsX3RpbWUgPSBjcHVfdG9fbGUz MigxMCk7CisJCWJvZHktPm1heF9jaGFubmVsX3RpbWUgPSBjcHVfdG9fbGUzMig1MCk7CisJCWJv ZHktPm51bV9vZl9wcm9iZV9yZXF1ZXN0cyA9IDI7CisJCWJvZHktPnByb2JlX2RlbGF5ID0gMTAw OworCX0KKwl0bW9fY2hhbl9iZyA9IGxlMzJfdG9fY3B1KGJvZHktPm1heF9jaGFubmVsX3RpbWUp ICogVVNFQ19QRVJfVFU7CisJdG1vX2NoYW5fZmcgPSA1MTIgKiBVU0VDX1BFUl9UVSArIGJvZHkt PnByb2JlX2RlbGF5OworCXRtb19jaGFuX2ZnICo9IGJvZHktPm51bV9vZl9wcm9iZV9yZXF1ZXN0 czsKKwl0bW8gPSBjaGFuX251bSAqIG1heCh0bW9fY2hhbl9iZywgdG1vX2NoYW5fZmcpICsgNTEy ICogVVNFQ19QRVJfVFU7CisJaWYgKHRpbWVvdXQpCisJCSp0aW1lb3V0ID0gdXNlY3NfdG9famlm Zmllcyh0bW8pOworCisJd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgd3ZpZi0+aWQsIEhJRl9SRVFfSURf U1RBUlRfU0NBTiwgYnVmX2xlbik7CisJcmV0ID0gd2Z4X2NtZF9zZW5kKHd2aWYtPndkZXYsIGhp ZiwgTlVMTCwgMCwgZmFsc2UpOworCWtmcmVlKGhpZik7CisJcmV0dXJuIHJldDsKK30KKworaW50 IGhpZl9zdG9wX3NjYW4oc3RydWN0IHdmeF92aWYgKnd2aWYpCit7CisJaW50IHJldDsKKwlzdHJ1 Y3QgaGlmX21zZyAqaGlmOworCS8vIGJvZHkgYXNzb2NpYXRlZCB0byBISUZfUkVRX0lEX1NUT1Bf U0NBTiBpcyBlbXB0eQorCXdmeF9hbGxvY19oaWYoMCwgJmhpZik7CisKKwlpZiAoIWhpZikKKwkJ cmV0dXJuIC1FTk9NRU07CisJd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgd3ZpZi0+aWQsIEhJRl9SRVFf SURfU1RPUF9TQ0FOLCAwKTsKKwlyZXQgPSB3ZnhfY21kX3NlbmQod3ZpZi0+d2RldiwgaGlmLCBO VUxMLCAwLCBmYWxzZSk7CisJa2ZyZWUoaGlmKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgaGlm X2pvaW4oc3RydWN0IHdmeF92aWYgKnd2aWYsIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfYnNzX2Nv bmYgKmNvbmYsCisJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsIGNvbnN0 IHU4ICpzc2lkLCBpbnQgc3NpZGxlbikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBoaWZfbXNnICpo aWY7CisJc3RydWN0IGhpZl9yZXFfam9pbiAqYm9keSA9IHdmeF9hbGxvY19oaWYoc2l6ZW9mKCpi b2R5KSwgJmhpZik7CisKKwlXQVJOX09OKCFjb25mLT5iZWFjb25faW50KTsKKwlXQVJOX09OKCFj b25mLT5iYXNpY19yYXRlcyk7CisJV0FSTl9PTihzaXplb2YoYm9keS0+c3NpZCkgPCBzc2lkbGVu KTsKKwlXQVJOKCFjb25mLT5pYnNzX2pvaW5lZCAmJiAhc3NpZGxlbiwgImpvaW5pbmcgYW4gdW5r bm93biBCU1MiKTsKKwlpZiAoV0FSTl9PTighY2hhbm5lbCkpCisJCXJldHVybiAtRUlOVkFMOwor CWlmICghaGlmKQorCQlyZXR1cm4gLUVOT01FTTsKKwlib2R5LT5pbmZyYXN0cnVjdHVyZV9ic3Nf bW9kZSA9ICFjb25mLT5pYnNzX2pvaW5lZDsKKwlib2R5LT5zaG9ydF9wcmVhbWJsZSA9IGNvbmYt PnVzZV9zaG9ydF9wcmVhbWJsZTsKKwlpZiAoY2hhbm5lbC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hB Tl9OT19JUikKKwkJYm9keS0+cHJvYmVfZm9yX2pvaW4gPSAwOworCWVsc2UKKwkJYm9keS0+cHJv YmVfZm9yX2pvaW4gPSAxOworCWJvZHktPmNoYW5uZWxfbnVtYmVyID0gY2hhbm5lbC0+aHdfdmFs dWU7CisJYm9keS0+YmVhY29uX2ludGVydmFsID0gY3B1X3RvX2xlMzIoY29uZi0+YmVhY29uX2lu dCk7CisJYm9keS0+YmFzaWNfcmF0ZV9zZXQgPQorCQljcHVfdG9fbGUzMih3ZnhfcmF0ZV9tYXNr X3RvX2h3KHd2aWYtPndkZXYsIGNvbmYtPmJhc2ljX3JhdGVzKSk7CisJbWVtY3B5KGJvZHktPmJz c2lkLCBjb25mLT5ic3NpZCwgc2l6ZW9mKGJvZHktPmJzc2lkKSk7CisJaWYgKHNzaWQpIHsKKwkJ Ym9keS0+c3NpZF9sZW5ndGggPSBjcHVfdG9fbGUzMihzc2lkbGVuKTsKKwkJbWVtY3B5KGJvZHkt PnNzaWQsIHNzaWQsIHNzaWRsZW4pOworCX0KKwl3ZnhfZmlsbF9oZWFkZXIoaGlmLCB3dmlmLT5p ZCwgSElGX1JFUV9JRF9KT0lOLCBzaXplb2YoKmJvZHkpKTsKKwlyZXQgPSB3ZnhfY21kX3NlbmQo d3ZpZi0+d2RldiwgaGlmLCBOVUxMLCAwLCBmYWxzZSk7CisJa2ZyZWUoaGlmKTsKKwlyZXR1cm4g cmV0OworfQorCitpbnQgaGlmX3NldF9ic3NfcGFyYW1zKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBp bnQgYWlkLCBpbnQgYmVhY29uX2xvc3RfY291bnQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgaGlm X21zZyAqaGlmOworCXN0cnVjdCBoaWZfcmVxX3NldF9ic3NfcGFyYW1zICpib2R5ID0KKwkJd2Z4 X2FsbG9jX2hpZihzaXplb2YoKmJvZHkpLCAmaGlmKTsKKworCWlmICghaGlmKQorCQlyZXR1cm4g LUVOT01FTTsKKwlib2R5LT5haWQgPSBjcHVfdG9fbGUxNihhaWQpOworCWJvZHktPmJlYWNvbl9s b3N0X2NvdW50ID0gYmVhY29uX2xvc3RfY291bnQ7CisJd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgd3Zp Zi0+aWQsIEhJRl9SRVFfSURfU0VUX0JTU19QQVJBTVMsCisJCQlzaXplb2YoKmJvZHkpKTsKKwly ZXQgPSB3ZnhfY21kX3NlbmQod3ZpZi0+d2RldiwgaGlmLCBOVUxMLCAwLCBmYWxzZSk7CisJa2Zy ZWUoaGlmKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgaGlmX2FkZF9rZXkoc3RydWN0IHdmeF9k ZXYgKndkZXYsIGNvbnN0IHN0cnVjdCBoaWZfcmVxX2FkZF9rZXkgKmFyZykKK3sKKwlpbnQgcmV0 OworCXN0cnVjdCBoaWZfbXNnICpoaWY7CisJLy8gRklYTUU6IG9ubHkgc2VuZCBuZWNlc3Nhcnkg Yml0cworCXN0cnVjdCBoaWZfcmVxX2FkZF9rZXkgKmJvZHkgPSB3ZnhfYWxsb2NfaGlmKHNpemVv ZigqYm9keSksICZoaWYpOworCisJaWYgKCFoaWYpCisJCXJldHVybiAtRU5PTUVNOworCS8vIEZJ WE1FOiBzd2FwIGJ5dGVzIGFzIG5lY2Vzc2FyeSBpbiBib2R5CisJbWVtY3B5KGJvZHksIGFyZywg c2l6ZW9mKCpib2R5KSk7CisJaWYgKHdmeF9hcGlfb2xkZXJfdGhhbih3ZGV2LCAxLCA1KSkKKwkJ Ly8gTGVnYWN5IGZpcm13YXJlcyBleHBlY3QgdGhhdCBhZGRfa2V5IHRvIGJlIHNlbnQgb24gcmln aHQKKwkJLy8gaW50ZXJmYWNlLgorCQl3ZnhfZmlsbF9oZWFkZXIoaGlmLCBhcmctPmludF9pZCwg SElGX1JFUV9JRF9BRERfS0VZLAorCQkJCXNpemVvZigqYm9keSkpOworCWVsc2UKKwkJd2Z4X2Zp bGxfaGVhZGVyKGhpZiwgLTEsIEhJRl9SRVFfSURfQUREX0tFWSwgc2l6ZW9mKCpib2R5KSk7CisJ cmV0ID0gd2Z4X2NtZF9zZW5kKHdkZXYsIGhpZiwgTlVMTCwgMCwgZmFsc2UpOworCWtmcmVlKGhp Zik7CisJcmV0dXJuIHJldDsKK30KKworaW50IGhpZl9yZW1vdmVfa2V5KHN0cnVjdCB3ZnhfZGV2 ICp3ZGV2LCBpbnQgaWR4KQoreworCWludCByZXQ7CisJc3RydWN0IGhpZl9tc2cgKmhpZjsKKwlz dHJ1Y3QgaGlmX3JlcV9yZW1vdmVfa2V5ICpib2R5ID0gd2Z4X2FsbG9jX2hpZihzaXplb2YoKmJv ZHkpLCAmaGlmKTsKKworCWlmICghaGlmKQorCQlyZXR1cm4gLUVOT01FTTsKKwlib2R5LT5lbnRy eV9pbmRleCA9IGlkeDsKKwl3ZnhfZmlsbF9oZWFkZXIoaGlmLCAtMSwgSElGX1JFUV9JRF9SRU1P VkVfS0VZLCBzaXplb2YoKmJvZHkpKTsKKwlyZXQgPSB3ZnhfY21kX3NlbmQod2RldiwgaGlmLCBO VUxMLCAwLCBmYWxzZSk7CisJa2ZyZWUoaGlmKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgaGlm X3NldF9lZGNhX3F1ZXVlX3BhcmFtcyhzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgdTE2IHF1ZXVlLAor CQkJICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKmFyZykKK3sK KwlpbnQgcmV0OworCXN0cnVjdCBoaWZfbXNnICpoaWY7CisJc3RydWN0IGhpZl9yZXFfZWRjYV9x dWV1ZV9wYXJhbXMgKmJvZHkgPSB3ZnhfYWxsb2NfaGlmKHNpemVvZigqYm9keSksCisJCQkJCQkJ ICAgICAgICZoaWYpOworCisJaWYgKCFib2R5KQorCQlyZXR1cm4gLUVOT01FTTsKKworCVdBUk5f T04oYXJnLT5haWZzID4gMjU1KTsKKwlpZiAoIWhpZikKKwkJcmV0dXJuIC1FTk9NRU07CisJYm9k eS0+YWlmc24gPSBhcmctPmFpZnM7CisJYm9keS0+Y3dfbWluID0gY3B1X3RvX2xlMTYoYXJnLT5j d19taW4pOworCWJvZHktPmN3X21heCA9IGNwdV90b19sZTE2KGFyZy0+Y3dfbWF4KTsKKwlib2R5 LT50eF9vcF9saW1pdCA9IGNwdV90b19sZTE2KGFyZy0+dHhvcCAqIFVTRUNfUEVSX1RYT1ApOwor CWJvZHktPnF1ZXVlX2lkID0gMyAtIHF1ZXVlOworCS8vIEFQSSAyLjAgaGFzIGNoYW5nZWQgcXVl dWUgSURzIHZhbHVlcworCWlmICh3ZnhfYXBpX29sZGVyX3RoYW4od3ZpZi0+d2RldiwgMiwgMCkg JiYgcXVldWUgPT0gSUVFRTgwMjExX0FDX0JFKQorCQlib2R5LT5xdWV1ZV9pZCA9IEhJRl9RVUVV RV9JRF9CQUNLR1JPVU5EOworCWlmICh3ZnhfYXBpX29sZGVyX3RoYW4od3ZpZi0+d2RldiwgMiwg MCkgJiYgcXVldWUgPT0gSUVFRTgwMjExX0FDX0JLKQorCQlib2R5LT5xdWV1ZV9pZCA9IEhJRl9R VUVVRV9JRF9CRVNURUZGT1JUOworCXdmeF9maWxsX2hlYWRlcihoaWYsIHd2aWYtPmlkLCBISUZf UkVRX0lEX0VEQ0FfUVVFVUVfUEFSQU1TLAorCQkJc2l6ZW9mKCpib2R5KSk7CisJcmV0ID0gd2Z4 X2NtZF9zZW5kKHd2aWYtPndkZXYsIGhpZiwgTlVMTCwgMCwgZmFsc2UpOworCWtmcmVlKGhpZik7 CisJcmV0dXJuIHJldDsKK30KKworaW50IGhpZl9zZXRfcG0oc3RydWN0IHdmeF92aWYgKnd2aWYs IGJvb2wgcHMsIGludCBkeW5hbWljX3BzX3RpbWVvdXQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qg aGlmX21zZyAqaGlmOworCXN0cnVjdCBoaWZfcmVxX3NldF9wbV9tb2RlICpib2R5ID0gd2Z4X2Fs bG9jX2hpZihzaXplb2YoKmJvZHkpLCAmaGlmKTsKKworCWlmICghYm9keSkKKwkJcmV0dXJuIC1F Tk9NRU07CisKKwlpZiAoIWhpZikKKwkJcmV0dXJuIC1FTk9NRU07CisJaWYgKHBzKSB7CisJCWJv ZHktPmVudGVyX3BzbSA9IDE7CisJCS8vIEZpcm13YXJlIGRvZXMgbm90IHN1cHBvcnQgbW9yZSB0 aGFuIDEyOG1zCisJCWJvZHktPmZhc3RfcHNtX2lkbGVfcGVyaW9kID0gbWluKGR5bmFtaWNfcHNf dGltZW91dCAqIDIsIDI1NSk7CisJCWlmIChib2R5LT5mYXN0X3BzbV9pZGxlX3BlcmlvZCkKKwkJ CWJvZHktPmZhc3RfcHNtID0gMTsKKwl9CisJd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgd3ZpZi0+aWQs IEhJRl9SRVFfSURfU0VUX1BNX01PREUsIHNpemVvZigqYm9keSkpOworCXJldCA9IHdmeF9jbWRf c2VuZCh3dmlmLT53ZGV2LCBoaWYsIE5VTEwsIDAsIGZhbHNlKTsKKwlrZnJlZShoaWYpOworCXJl dHVybiByZXQ7Cit9CisKK2ludCBoaWZfc3RhcnQoc3RydWN0IHdmeF92aWYgKnd2aWYsIGNvbnN0 IHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmNvbmYsCisJICAgICAgY29uc3Qgc3RydWN0IGll ZWU4MDIxMV9jaGFubmVsICpjaGFubmVsKQoreworCWludCByZXQ7CisJc3RydWN0IGhpZl9tc2cg KmhpZjsKKwlzdHJ1Y3QgaGlmX3JlcV9zdGFydCAqYm9keSA9IHdmeF9hbGxvY19oaWYoc2l6ZW9m KCpib2R5KSwgJmhpZik7CisKKwlXQVJOX09OKCFjb25mLT5iZWFjb25faW50KTsKKwlpZiAoIWhp ZikKKwkJcmV0dXJuIC1FTk9NRU07CisJYm9keS0+ZHRpbV9wZXJpb2QgPSBjb25mLT5kdGltX3Bl cmlvZDsKKwlib2R5LT5zaG9ydF9wcmVhbWJsZSA9IGNvbmYtPnVzZV9zaG9ydF9wcmVhbWJsZTsK Kwlib2R5LT5jaGFubmVsX251bWJlciA9IGNoYW5uZWwtPmh3X3ZhbHVlOworCWJvZHktPmJlYWNv bl9pbnRlcnZhbCA9IGNwdV90b19sZTMyKGNvbmYtPmJlYWNvbl9pbnQpOworCWJvZHktPmJhc2lj X3JhdGVfc2V0ID0KKwkJY3B1X3RvX2xlMzIod2Z4X3JhdGVfbWFza190b19odyh3dmlmLT53ZGV2 LCBjb25mLT5iYXNpY19yYXRlcykpOworCWJvZHktPnNzaWRfbGVuZ3RoID0gY29uZi0+c3NpZF9s ZW47CisJbWVtY3B5KGJvZHktPnNzaWQsIGNvbmYtPnNzaWQsIGNvbmYtPnNzaWRfbGVuKTsKKwl3 ZnhfZmlsbF9oZWFkZXIoaGlmLCB3dmlmLT5pZCwgSElGX1JFUV9JRF9TVEFSVCwgc2l6ZW9mKCpi b2R5KSk7CisJcmV0ID0gd2Z4X2NtZF9zZW5kKHd2aWYtPndkZXYsIGhpZiwgTlVMTCwgMCwgZmFs c2UpOworCWtmcmVlKGhpZik7CisJcmV0dXJuIHJldDsKK30KKworaW50IGhpZl9iZWFjb25fdHJh bnNtaXQoc3RydWN0IHdmeF92aWYgKnd2aWYsIGJvb2wgZW5hYmxlKQoreworCWludCByZXQ7CisJ c3RydWN0IGhpZl9tc2cgKmhpZjsKKwlzdHJ1Y3QgaGlmX3JlcV9iZWFjb25fdHJhbnNtaXQgKmJv ZHkgPSB3ZnhfYWxsb2NfaGlmKHNpemVvZigqYm9keSksCisJCQkJCQkJICAgICAmaGlmKTsKKwor CWlmICghaGlmKQorCQlyZXR1cm4gLUVOT01FTTsKKwlib2R5LT5lbmFibGVfYmVhY29uaW5nID0g ZW5hYmxlID8gMSA6IDA7CisJd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgd3ZpZi0+aWQsIEhJRl9SRVFf SURfQkVBQ09OX1RSQU5TTUlULAorCQkJc2l6ZW9mKCpib2R5KSk7CisJcmV0ID0gd2Z4X2NtZF9z ZW5kKHd2aWYtPndkZXYsIGhpZiwgTlVMTCwgMCwgZmFsc2UpOworCWtmcmVlKGhpZik7CisJcmV0 dXJuIHJldDsKK30KKworaW50IGhpZl9tYXBfbGluayhzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgYm9v bCB1bm1hcCwgdTggKm1hY19hZGRyLCBpbnQgc3RhX2lkLCBib29sIG1mcCkKK3sKKwlpbnQgcmV0 OworCXN0cnVjdCBoaWZfbXNnICpoaWY7CisJc3RydWN0IGhpZl9yZXFfbWFwX2xpbmsgKmJvZHkg PSB3ZnhfYWxsb2NfaGlmKHNpemVvZigqYm9keSksICZoaWYpOworCisJaWYgKCFoaWYpCisJCXJl dHVybiAtRU5PTUVNOworCWlmIChtYWNfYWRkcikKKwkJZXRoZXJfYWRkcl9jb3B5KGJvZHktPm1h Y19hZGRyLCBtYWNfYWRkcik7CisJYm9keS0+bWZwYyA9IG1mcCA/IDEgOiAwOworCWJvZHktPnVu bWFwID0gdW5tYXAgPyAxIDogMDsKKwlib2R5LT5wZWVyX3N0YV9pZCA9IHN0YV9pZDsKKwl3Znhf ZmlsbF9oZWFkZXIoaGlmLCB3dmlmLT5pZCwgSElGX1JFUV9JRF9NQVBfTElOSywgc2l6ZW9mKCpi b2R5KSk7CisJcmV0ID0gd2Z4X2NtZF9zZW5kKHd2aWYtPndkZXYsIGhpZiwgTlVMTCwgMCwgZmFs c2UpOworCWtmcmVlKGhpZik7CisJcmV0dXJuIHJldDsKK30KKworaW50IGhpZl91cGRhdGVfaWVf YmVhY29uKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBjb25zdCB1OCAqaWVzLCBzaXplX3QgaWVzX2xl bikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBoaWZfbXNnICpoaWY7CisJaW50IGJ1Zl9sZW4gPSBz aXplb2Yoc3RydWN0IGhpZl9yZXFfdXBkYXRlX2llKSArIGllc19sZW47CisJc3RydWN0IGhpZl9y ZXFfdXBkYXRlX2llICpib2R5ID0gd2Z4X2FsbG9jX2hpZihidWZfbGVuLCAmaGlmKTsKKworCWlm ICghaGlmKQorCQlyZXR1cm4gLUVOT01FTTsKKwlib2R5LT5iZWFjb24gPSAxOworCWJvZHktPm51 bV9pZXMgPSBjcHVfdG9fbGUxNigxKTsKKwltZW1jcHkoYm9keS0+aWUsIGllcywgaWVzX2xlbik7 CisJd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgd3ZpZi0+aWQsIEhJRl9SRVFfSURfVVBEQVRFX0lFLCBi dWZfbGVuKTsKKwlyZXQgPSB3ZnhfY21kX3NlbmQod3ZpZi0+d2RldiwgaGlmLCBOVUxMLCAwLCBm YWxzZSk7CisJa2ZyZWUoaGlmKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfdHguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNz L3NpbGFicy93ZngvaGlmX3R4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi4zNTIxYzU0NWFlNmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVz cy9zaWxhYnMvd2Z4L2hpZl90eC5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KKy8qCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBob3N0 LXRvLWNoaXAgY29tbWFuZHMgKGFrYSByZXF1ZXN0L2NvbmZpcm1hdGlvbikgb2YgV0Z4eHgKKyAq IFNwbGl0IE1hYyAoV1NNKSBBUEkuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNp bGljb24gTGFib3JhdG9yaWVzLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNz c29uCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIFNULUVyaWNzc29uIFNBCisgKi8KKyNpZm5kZWYg V0ZYX0hJRl9UWF9ICisjZGVmaW5lIFdGWF9ISUZfVFhfSAorCitzdHJ1Y3QgaWVlZTgwMjExX2No YW5uZWw7CitzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mOworc3RydWN0IGllZWU4MDIxMV90eF9x dWV1ZV9wYXJhbXM7CitzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0Oworc3RydWN0IGhpZl9y ZXFfYWRkX2tleTsKK3N0cnVjdCB3ZnhfZGV2Oworc3RydWN0IHdmeF92aWY7CisKK3N0cnVjdCB3 ZnhfaGlmX2NtZCB7CisJc3RydWN0IG11dGV4ICAgICAgbG9jazsKKwlzdHJ1Y3QgY29tcGxldGlv biByZWFkeTsKKwlzdHJ1Y3QgY29tcGxldGlvbiBkb25lOworCXN0cnVjdCBoaWZfbXNnICAgICpi dWZfc2VuZDsKKwl2b2lkICAgICAgICAgICAgICAqYnVmX3JlY3Y7CisJc2l6ZV90ICAgICAgICAg ICAgbGVuX3JlY3Y7CisJaW50ICAgICAgICAgICAgICAgcmV0OworfTsKKwordm9pZCB3ZnhfaW5p dF9oaWZfY21kKHN0cnVjdCB3ZnhfaGlmX2NtZCAqd2Z4X2hpZl9jbWQpOworaW50IHdmeF9jbWRf c2VuZChzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwgc3RydWN0IGhpZl9tc2cgKnJlcXVlc3QsCisJCSB2 b2lkICpyZXBseSwgc2l6ZV90IHJlcGx5X2xlbiwgYm9vbCBhc3luYyk7CisKK2ludCBoaWZfc2h1 dGRvd24oc3RydWN0IHdmeF9kZXYgKndkZXYpOworaW50IGhpZl9jb25maWd1cmF0aW9uKHN0cnVj dCB3ZnhfZGV2ICp3ZGV2LCBjb25zdCB1OCAqY29uZiwgc2l6ZV90IGxlbik7CitpbnQgaGlmX3Jl c2V0KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBib29sIHJlc2V0X3N0YXQpOworaW50IGhpZl9yZWFk X21pYihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IHZpZl9pZCwgdTE2IG1pYl9pZCwKKwkJIHZv aWQgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplKTsKK2ludCBoaWZfd3JpdGVfbWliKHN0cnVjdCB3Znhf ZGV2ICp3ZGV2LCBpbnQgdmlmX2lkLCB1MTYgbWliX2lkLAorCQkgIHZvaWQgKmJ1Ziwgc2l6ZV90 IGJ1Zl9zaXplKTsKK2ludCBoaWZfc2NhbihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IGNm ZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxODAyMTEsCisJICAgICBpbnQgY2hhbl9zdGFydCwgaW50 IGNoYW5fbnVtLCBpbnQgKnRpbWVvdXQpOworaW50IGhpZl9zdG9wX3NjYW4oc3RydWN0IHdmeF92 aWYgKnd2aWYpOworaW50IGhpZl9qb2luKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBjb25zdCBzdHJ1 Y3QgaWVlZTgwMjExX2Jzc19jb25mICpjb25mLAorCSAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFu bmVsICpjaGFubmVsLCBjb25zdCB1OCAqc3NpZCwgaW50IHNzaWRsZW4pOworaW50IGhpZl9zZXRf cG0oc3RydWN0IHdmeF92aWYgKnd2aWYsIGJvb2wgcHMsIGludCBkeW5hbWljX3BzX3RpbWVvdXQp OworaW50IGhpZl9zZXRfYnNzX3BhcmFtcyhzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50IGFpZCwg aW50IGJlYWNvbl9sb3N0X2NvdW50KTsKK2ludCBoaWZfYWRkX2tleShzdHJ1Y3Qgd2Z4X2RldiAq d2RldiwgY29uc3Qgc3RydWN0IGhpZl9yZXFfYWRkX2tleSAqYXJnKTsKK2ludCBoaWZfcmVtb3Zl X2tleShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IGlkeCk7CitpbnQgaGlmX3NldF9lZGNhX3F1 ZXVlX3BhcmFtcyhzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgdTE2IHF1ZXVlLAorCQkJICAgICAgY29u c3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKmFyZyk7CitpbnQgaGlmX3N0YXJ0 KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpj b25mLAorCSAgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCk7Citp bnQgaGlmX2JlYWNvbl90cmFuc21pdChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgYm9vbCBlbmFibGUp OworaW50IGhpZl9tYXBfbGluayhzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwKKwkJIGJvb2wgdW5tYXAs IHU4ICptYWNfYWRkciwgaW50IHN0YV9pZCwgYm9vbCBtZnApOworaW50IGhpZl91cGRhdGVfaWVf YmVhY29uKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBjb25zdCB1OCAqaWVzLCBzaXplX3QgaWVzX2xl bik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dm eC9oaWZfdHhfbWliLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl90eF9t aWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjE5MjZjZjFiNjJi ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlm X3R4X21pYi5jCkBAIC0wLDAgKzEsMzI0IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMC1vbmx5CisvKgorICogSW1wbGVtZW50YXRpb24gb2YgaG9zdC10by1jaGlwIE1JQnMg b2YgV0Z4eHggU3BsaXQgTWFjIChXU00pIEFQSS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTct MjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAxMCwg U1QtRXJpY3Nzb24KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgU1QtRXJpY3Nzb24gU0EKKyAqLwor CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKworI2luY2x1ZGUgIndmeC5oIgorI2lu Y2x1ZGUgImhpZl90eC5oIgorI2luY2x1ZGUgImhpZl90eF9taWIuaCIKKyNpbmNsdWRlICJoaWZf YXBpX21pYi5oIgorCitpbnQgaGlmX3NldF9vdXRwdXRfcG93ZXIoc3RydWN0IHdmeF92aWYgKnd2 aWYsIGludCB2YWwpCit7CisJc3RydWN0IGhpZl9taWJfY3VycmVudF90eF9wb3dlcl9sZXZlbCBh cmcgPSB7CisJCS5wb3dlcl9sZXZlbCA9IGNwdV90b19sZTMyKHZhbCAqIDEwKSwKKwl9OworCisJ cmV0dXJuIGhpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsCisJCQkgICAgIEhJRl9N SUJfSURfQ1VSUkVOVF9UWF9QT1dFUl9MRVZFTCwKKwkJCSAgICAgJmFyZywgc2l6ZW9mKGFyZykp OworfQorCitpbnQgaGlmX3NldF9iZWFjb25fd2FrZXVwX3BlcmlvZChzdHJ1Y3Qgd2Z4X3ZpZiAq d3ZpZiwKKwkJCQkgdW5zaWduZWQgaW50IGR0aW1faW50ZXJ2YWwsCisJCQkJIHVuc2lnbmVkIGlu dCBsaXN0ZW5faW50ZXJ2YWwpCit7CisJc3RydWN0IGhpZl9taWJfYmVhY29uX3dha2VfdXBfcGVy aW9kIGFyZyA9IHsKKwkJLndha2V1cF9wZXJpb2RfbWluID0gZHRpbV9pbnRlcnZhbCwKKwkJLnJl Y2VpdmVfZHRpbSA9IDAsCisJCS53YWtldXBfcGVyaW9kX21heCA9IGxpc3Rlbl9pbnRlcnZhbCwK Kwl9OworCisJaWYgKGR0aW1faW50ZXJ2YWwgPiAweEZGIHx8IGxpc3Rlbl9pbnRlcnZhbCA+IDB4 RkZGRikKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGhpZl93cml0ZV9taWIod3ZpZi0+d2Rl diwgd3ZpZi0+aWQsCisJCQkgICAgIEhJRl9NSUJfSURfQkVBQ09OX1dBS0VVUF9QRVJJT0QsCisJ CQkgICAgICZhcmcsIHNpemVvZihhcmcpKTsKK30KKworaW50IGhpZl9zZXRfcmNwaV9yc3NpX3Ro cmVzaG9sZChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwKKwkJCQlpbnQgcnNzaV90aG9sZCwgaW50IHJz c2lfaHlzdCkKK3sKKwlzdHJ1Y3QgaGlmX21pYl9yY3BpX3Jzc2lfdGhyZXNob2xkIGFyZyA9IHsK KwkJLnJvbGxpbmdfYXZlcmFnZV9jb3VudCA9IDgsCisJCS5kZXRlY3Rpb24gPSAxLAorCX07CisK KwlpZiAoIXJzc2lfdGhvbGQgJiYgIXJzc2lfaHlzdCkgeworCQlhcmcudXBwZXJ0aHJlc2ggPSAx OworCQlhcmcubG93ZXJ0aHJlc2ggPSAxOworCX0gZWxzZSB7CisJCWFyZy51cHBlcl90aHJlc2hv bGQgPSByc3NpX3Rob2xkICsgcnNzaV9oeXN0OworCQlhcmcudXBwZXJfdGhyZXNob2xkID0gKGFy Zy51cHBlcl90aHJlc2hvbGQgKyAxMTApICogMjsKKwkJYXJnLmxvd2VyX3RocmVzaG9sZCA9IHJz c2lfdGhvbGQ7CisJCWFyZy5sb3dlcl90aHJlc2hvbGQgPSAoYXJnLmxvd2VyX3RocmVzaG9sZCAr IDExMCkgKiAyOworCX0KKworCXJldHVybiBoaWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYt PmlkLAorCQkJICAgICBISUZfTUlCX0lEX1JDUElfUlNTSV9USFJFU0hPTEQsICZhcmcsIHNpemVv ZihhcmcpKTsKK30KKworaW50IGhpZl9nZXRfY291bnRlcnNfdGFibGUoc3RydWN0IHdmeF9kZXYg KndkZXYsIGludCB2aWZfaWQsCisJCQkgICBzdHJ1Y3QgaGlmX21pYl9leHRlbmRlZF9jb3VudF90 YWJsZSAqYXJnKQoreworCWlmICh3ZnhfYXBpX29sZGVyX3RoYW4od2RldiwgMSwgMykpIHsKKwkJ Ly8gZXh0ZW5kZWRfY291bnRfdGFibGUgaXMgd2lkZXIgdGhhbiBjb3VudF90YWJsZQorCQltZW1z ZXQoYXJnLCAweEZGLCBzaXplb2YoKmFyZykpOworCQlyZXR1cm4gaGlmX3JlYWRfbWliKHdkZXYs IHZpZl9pZCwgSElGX01JQl9JRF9DT1VOVEVSU19UQUJMRSwKKwkJCQkgICAgYXJnLCBzaXplb2Yo c3RydWN0IGhpZl9taWJfY291bnRfdGFibGUpKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gaGlmX3Jl YWRfbWliKHdkZXYsIHZpZl9pZCwKKwkJCQkgICAgSElGX01JQl9JRF9FWFRFTkRFRF9DT1VOVEVS U19UQUJMRSwgYXJnLAorCQkJCXNpemVvZihzdHJ1Y3QgaGlmX21pYl9leHRlbmRlZF9jb3VudF90 YWJsZSkpOworCX0KK30KKworaW50IGhpZl9zZXRfbWFjYWRkcihzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp ZiwgdTggKm1hYykKK3sKKwlzdHJ1Y3QgaGlmX21pYl9tYWNfYWRkcmVzcyBtc2cgPSB7IH07CisK KwlpZiAobWFjKQorCQlldGhlcl9hZGRyX2NvcHkobXNnLm1hY19hZGRyLCBtYWMpOworCXJldHVy biBoaWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLCBISUZfTUlCX0lEX0RPVDExX01B Q19BRERSRVNTLAorCQkJICAgICAmbXNnLCBzaXplb2YobXNnKSk7Cit9CisKK2ludCBoaWZfc2V0 X3J4X2ZpbHRlcihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwKKwkJICAgICAgYm9vbCBmaWx0ZXJfYnNz aWQsIGJvb2wgZmlsdGVyX3ByYnJlcSkKK3sKKwlzdHJ1Y3QgaGlmX21pYl9yeF9maWx0ZXIgYXJn ID0geyB9OworCisJaWYgKGZpbHRlcl9ic3NpZCkKKwkJYXJnLmJzc2lkX2ZpbHRlciA9IDE7CisJ aWYgKCFmaWx0ZXJfcHJicmVxKQorCQlhcmcuZndkX3Byb2JlX3JlcSA9IDE7CisJcmV0dXJuIGhp Zl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsIEhJRl9NSUJfSURfUlhfRklMVEVSLAor CQkJICAgICAmYXJnLCBzaXplb2YoYXJnKSk7Cit9CisKK2ludCBoaWZfc2V0X2JlYWNvbl9maWx0 ZXJfdGFibGUoc3RydWN0IHdmeF92aWYgKnd2aWYsIGludCB0YmxfbGVuLAorCQkJCWNvbnN0IHN0 cnVjdCBoaWZfaWVfdGFibGVfZW50cnkgKnRibCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBoaWZf bWliX2Jjbl9maWx0ZXJfdGFibGUgKmFyZzsKKwlpbnQgYnVmX2xlbiA9IHN0cnVjdF9zaXplKGFy ZywgaWVfdGFibGUsIHRibF9sZW4pOworCisJYXJnID0ga3phbGxvYyhidWZfbGVuLCBHRlBfS0VS TkVMKTsKKwlpZiAoIWFyZykKKwkJcmV0dXJuIC1FTk9NRU07CisJYXJnLT5udW1fb2ZfaW5mb19l bG10cyA9IGNwdV90b19sZTMyKHRibF9sZW4pOworCW1lbWNweShhcmctPmllX3RhYmxlLCB0Ymws IGZsZXhfYXJyYXlfc2l6ZShhcmcsIGllX3RhYmxlLCB0YmxfbGVuKSk7CisJcmV0ID0gaGlmX3dy aXRlX21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwKKwkJCSAgICBISUZfTUlCX0lEX0JFQUNPTl9G SUxURVJfVEFCTEUsIGFyZywgYnVmX2xlbik7CisJa2ZyZWUoYXJnKTsKKwlyZXR1cm4gcmV0Owor fQorCitpbnQgaGlmX2JlYWNvbl9maWx0ZXJfY29udHJvbChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwK KwkJCSAgICAgIGludCBlbmFibGUsIGludCBiZWFjb25fY291bnQpCit7CisJc3RydWN0IGhpZl9t aWJfYmNuX2ZpbHRlcl9lbmFibGUgYXJnID0geworCQkuZW5hYmxlID0gY3B1X3RvX2xlMzIoZW5h YmxlKSwKKwkJLmJjbl9jb3VudCA9IGNwdV90b19sZTMyKGJlYWNvbl9jb3VudCksCisJfTsKKwly ZXR1cm4gaGlmX3dyaXRlX21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwKKwkJCSAgICAgSElGX01J Ql9JRF9CRUFDT05fRklMVEVSX0VOQUJMRSwKKwkJCSAgICAgJmFyZywgc2l6ZW9mKGFyZykpOwor fQorCitpbnQgaGlmX3NldF9vcGVyYXRpb25hbF9tb2RlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBl bnVtIGhpZl9vcF9wb3dlcl9tb2RlIG1vZGUpCit7CisJc3RydWN0IGhpZl9taWJfZ2xfb3BlcmF0 aW9uYWxfcG93ZXJfbW9kZSBhcmcgPSB7CisJCS5wb3dlcl9tb2RlID0gbW9kZSwKKwkJLnd1cF9p bmRfYWN0aXZhdGlvbiA9IDEsCisJfTsKKworCXJldHVybiBoaWZfd3JpdGVfbWliKHdkZXYsIC0x LCBISUZfTUlCX0lEX0dMX09QRVJBVElPTkFMX1BPV0VSX01PREUsCisJCQkgICAgICZhcmcsIHNp emVvZihhcmcpKTsKK30KKworaW50IGhpZl9zZXRfdGVtcGxhdGVfZnJhbWUoc3RydWN0IHdmeF92 aWYgKnd2aWYsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICB1OCBmcmFtZV90eXBlLCBpbnQg aW5pdF9yYXRlKQoreworCXN0cnVjdCBoaWZfbWliX3RlbXBsYXRlX2ZyYW1lICphcmc7CisKKwlX QVJOKHNrYi0+bGVuID4gSElGX0FQSV9NQVhfVEVNUExBVEVfRlJBTUVfU0laRSwgImZyYW1lIGlz IHRvbyBiaWciKTsKKwlza2JfcHVzaChza2IsIDQpOworCWFyZyA9IChzdHJ1Y3QgaGlmX21pYl90 ZW1wbGF0ZV9mcmFtZSAqKXNrYi0+ZGF0YTsKKwlza2JfcHVsbChza2IsIDQpOworCWFyZy0+aW5p dF9yYXRlID0gaW5pdF9yYXRlOworCWFyZy0+ZnJhbWVfdHlwZSA9IGZyYW1lX3R5cGU7CisJYXJn LT5mcmFtZV9sZW5ndGggPSBjcHVfdG9fbGUxNihza2ItPmxlbik7CisJcmV0dXJuIGhpZl93cml0 ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsIEhJRl9NSUJfSURfVEVNUExBVEVfRlJBTUUsCisJ CQkgICAgIGFyZywgc2l6ZW9mKCphcmcpICsgc2tiLT5sZW4pOworfQorCitpbnQgaGlmX3NldF9t ZnAoc3RydWN0IHdmeF92aWYgKnd2aWYsIGJvb2wgY2FwYWJsZSwgYm9vbCByZXF1aXJlZCkKK3sK KwlzdHJ1Y3QgaGlmX21pYl9wcm90ZWN0ZWRfbWdtdF9wb2xpY3kgYXJnID0geyB9OworCisJV0FS TihyZXF1aXJlZCAmJiAhY2FwYWJsZSwgImluY29oZXJlbnQgYXJndW1lbnRzIik7CisJaWYgKGNh cGFibGUpIHsKKwkJYXJnLnBtZl9lbmFibGUgPSAxOworCQlhcmcuaG9zdF9lbmNfYXV0aF9mcmFt ZXMgPSAxOworCX0KKwlpZiAoIXJlcXVpcmVkKQorCQlhcmcudW5wbWZfYWxsb3dlZCA9IDE7CisJ cmV0dXJuIGhpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsCisJCQkgICAgIEhJRl9N SUJfSURfUFJPVEVDVEVEX01HTVRfUE9MSUNZLAorCQkJICAgICAmYXJnLCBzaXplb2YoYXJnKSk7 Cit9CisKK2ludCBoaWZfc2V0X2Jsb2NrX2Fja19wb2xpY3koc3RydWN0IHdmeF92aWYgKnd2aWYs CisJCQkgICAgIHU4IHR4X3RpZF9wb2xpY3ksIHU4IHJ4X3RpZF9wb2xpY3kpCit7CisJc3RydWN0 IGhpZl9taWJfYmxvY2tfYWNrX3BvbGljeSBhcmcgPSB7CisJCS5ibG9ja19hY2tfdHhfdGlkX3Bv bGljeSA9IHR4X3RpZF9wb2xpY3ksCisJCS5ibG9ja19hY2tfcnhfdGlkX3BvbGljeSA9IHJ4X3Rp ZF9wb2xpY3ksCisJfTsKKworCXJldHVybiBoaWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYt PmlkLCBISUZfTUlCX0lEX0JMT0NLX0FDS19QT0xJQ1ksCisJCQkgICAgICZhcmcsIHNpemVvZihh cmcpKTsKK30KKworaW50IGhpZl9zZXRfYXNzb2NpYXRpb25fbW9kZShzdHJ1Y3Qgd2Z4X3ZpZiAq d3ZpZiwgaW50IGFtcGR1X2RlbnNpdHksCisJCQkgICAgIGJvb2wgZ3JlZW5maWVsZCwgYm9vbCBz aG9ydF9wcmVhbWJsZSkKK3sKKwlzdHJ1Y3QgaGlmX21pYl9zZXRfYXNzb2NpYXRpb25fbW9kZSBh cmcgPSB7CisJCS5wcmVhbWJ0eXBlX3VzZSA9IDEsCisJCS5tb2RlID0gMSwKKwkJLnNwYWNpbmcg PSAxLAorCQkuc2hvcnRfcHJlYW1ibGUgPSBzaG9ydF9wcmVhbWJsZSwKKwkJLmdyZWVuZmllbGQg PSBncmVlbmZpZWxkLAorCQkubXBkdV9zdGFydF9zcGFjaW5nID0gYW1wZHVfZGVuc2l0eSwKKwl9 OworCisJcmV0dXJuIGhpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsCisJCQkgICAg IEhJRl9NSUJfSURfU0VUX0FTU09DSUFUSU9OX01PREUsICZhcmcsIHNpemVvZihhcmcpKTsKK30K KworaW50IGhpZl9zZXRfdHhfcmF0ZV9yZXRyeV9wb2xpY3koc3RydWN0IHdmeF92aWYgKnd2aWYs CisJCQkJIGludCBwb2xpY3lfaW5kZXgsIHU4ICpyYXRlcykKK3sKKwlzdHJ1Y3QgaGlmX21pYl9z ZXRfdHhfcmF0ZV9yZXRyeV9wb2xpY3kgKmFyZzsKKwlzaXplX3Qgc2l6ZSA9IHN0cnVjdF9zaXpl KGFyZywgdHhfcmF0ZV9yZXRyeV9wb2xpY3ksIDEpOworCWludCByZXQ7CisKKwlhcmcgPSBremFs bG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghYXJnKQorCQlyZXR1cm4gLUVOT01FTTsKKwlh cmctPm51bV90eF9yYXRlX3BvbGljaWVzID0gMTsKKwlhcmctPnR4X3JhdGVfcmV0cnlfcG9saWN5 WzBdLnBvbGljeV9pbmRleCA9IHBvbGljeV9pbmRleDsKKwlhcmctPnR4X3JhdGVfcmV0cnlfcG9s aWN5WzBdLnNob3J0X3JldHJ5X2NvdW50ID0gMjU1OworCWFyZy0+dHhfcmF0ZV9yZXRyeV9wb2xp Y3lbMF0ubG9uZ19yZXRyeV9jb3VudCA9IDI1NTsKKwlhcmctPnR4X3JhdGVfcmV0cnlfcG9saWN5 WzBdLmZpcnN0X3JhdGVfc2VsID0gMTsKKwlhcmctPnR4X3JhdGVfcmV0cnlfcG9saWN5WzBdLnRl cm1pbmF0ZSA9IDE7CisJYXJnLT50eF9yYXRlX3JldHJ5X3BvbGljeVswXS5jb3VudF9pbml0ID0g MTsKKwltZW1jcHkoJmFyZy0+dHhfcmF0ZV9yZXRyeV9wb2xpY3lbMF0ucmF0ZXMsIHJhdGVzLAor CSAgICAgICBzaXplb2YoYXJnLT50eF9yYXRlX3JldHJ5X3BvbGljeVswXS5yYXRlcykpOworCXJl dCA9IGhpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsCisJCQkgICAgSElGX01JQl9J RF9TRVRfVFhfUkFURV9SRVRSWV9QT0xJQ1ksIGFyZywgc2l6ZSk7CisJa2ZyZWUoYXJnKTsKKwly ZXR1cm4gcmV0OworfQorCitpbnQgaGlmX2tlZXBfYWxpdmVfcGVyaW9kKHN0cnVjdCB3Znhfdmlm ICp3dmlmLCBpbnQgcGVyaW9kKQoreworCXN0cnVjdCBoaWZfbWliX2tlZXBfYWxpdmVfcGVyaW9k IGFyZyA9IHsKKwkJLmtlZXBfYWxpdmVfcGVyaW9kID0gY3B1X3RvX2xlMTYocGVyaW9kKSwKKwl9 OworCisJcmV0dXJuIGhpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsIEhJRl9NSUJf SURfS0VFUF9BTElWRV9QRVJJT0QsCisJCQkgICAgICZhcmcsIHNpemVvZihhcmcpKTsKK307CisK K2ludCBoaWZfc2V0X2FycF9pcHY0X2ZpbHRlcihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50IGlk eCwgX19iZTMyICphZGRyKQoreworCXN0cnVjdCBoaWZfbWliX2FycF9pcF9hZGRyX3RhYmxlIGFy ZyA9IHsKKwkJLmNvbmRpdGlvbl9pZHggPSBpZHgsCisJCS5hcnBfZW5hYmxlID0gSElGX0FSUF9O U19GSUxURVJJTkdfRElTQUJMRSwKKwl9OworCisJaWYgKGFkZHIpIHsKKwkJLy8gQ2F1dGlvbjog dHlwZSBvZiBhZGRyIGlzIF9fYmUzMgorCQltZW1jcHkoYXJnLmlwdjRfYWRkcmVzcywgYWRkciwg c2l6ZW9mKGFyZy5pcHY0X2FkZHJlc3MpKTsKKwkJYXJnLmFycF9lbmFibGUgPSBISUZfQVJQX05T X0ZJTFRFUklOR19FTkFCTEU7CisJfQorCXJldHVybiBoaWZfd3JpdGVfbWliKHd2aWYtPndkZXYs IHd2aWYtPmlkLAorCQkJICAgICBISUZfTUlCX0lEX0FSUF9JUF9BRERSRVNTRVNfVEFCTEUsCisJ CQkgICAgICZhcmcsIHNpemVvZihhcmcpKTsKK30KKworaW50IGhpZl91c2VfbXVsdGlfdHhfY29u ZihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgYm9vbCBlbmFibGUpCit7CisJc3RydWN0IGhpZl9taWJf Z2xfc2V0X211bHRpX21zZyBhcmcgPSB7CisJCS5lbmFibGVfbXVsdGlfdHhfY29uZiA9IGVuYWJs ZSwKKwl9OworCisJcmV0dXJuIGhpZl93cml0ZV9taWIod2RldiwgLTEsIEhJRl9NSUJfSURfR0xf U0VUX01VTFRJX01TRywKKwkJCSAgICAgJmFyZywgc2l6ZW9mKGFyZykpOworfQorCitpbnQgaGlm X3NldF91YXBzZF9pbmZvKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCB1bnNpZ25lZCBsb25nIHZhbCkK K3sKKwlzdHJ1Y3QgaGlmX21pYl9zZXRfdWFwc2RfaW5mb3JtYXRpb24gYXJnID0geyB9OworCisJ aWYgKHZhbCAmIEJJVChJRUVFODAyMTFfQUNfVk8pKQorCQlhcmcudHJpZ192b2ljZSA9IDE7CisJ aWYgKHZhbCAmIEJJVChJRUVFODAyMTFfQUNfVkkpKQorCQlhcmcudHJpZ192aWRlbyA9IDE7CisJ aWYgKHZhbCAmIEJJVChJRUVFODAyMTFfQUNfQkUpKQorCQlhcmcudHJpZ19iZSA9IDE7CisJaWYg KHZhbCAmIEJJVChJRUVFODAyMTFfQUNfQkspKQorCQlhcmcudHJpZ19iY2tncm5kID0gMTsKKwly ZXR1cm4gaGlmX3dyaXRlX21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwKKwkJCSAgICAgSElGX01J Ql9JRF9TRVRfVUFQU0RfSU5GT1JNQVRJT04sCisJCQkgICAgICZhcmcsIHNpemVvZihhcmcpKTsK K30KKworaW50IGhpZl9lcnBfdXNlX3Byb3RlY3Rpb24oc3RydWN0IHdmeF92aWYgKnd2aWYsIGJv b2wgZW5hYmxlKQoreworCXN0cnVjdCBoaWZfbWliX25vbl9lcnBfcHJvdGVjdGlvbiBhcmcgPSB7 CisJCS51c2VfY3RzX3RvX3NlbGYgPSBlbmFibGUsCisJfTsKKworCXJldHVybiBoaWZfd3JpdGVf bWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLAorCQkJICAgICBISUZfTUlCX0lEX05PTl9FUlBfUFJP VEVDVElPTiwgJmFyZywgc2l6ZW9mKGFyZykpOworfQorCitpbnQgaGlmX3Nsb3RfdGltZShzdHJ1 Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50IHZhbCkKK3sKKwlzdHJ1Y3QgaGlmX21pYl9zbG90X3RpbWUg YXJnID0geworCQkuc2xvdF90aW1lID0gY3B1X3RvX2xlMzIodmFsKSwKKwl9OworCisJcmV0dXJu IGhpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsIEhJRl9NSUJfSURfU0xPVF9USU1F LAorCQkJICAgICAmYXJnLCBzaXplb2YoYXJnKSk7Cit9CisKK2ludCBoaWZfd2VwX2RlZmF1bHRf a2V5X2lkKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBpbnQgdmFsKQoreworCXN0cnVjdCBoaWZfbWli X3dlcF9kZWZhdWx0X2tleV9pZCBhcmcgPSB7CisJCS53ZXBfZGVmYXVsdF9rZXlfaWQgPSB2YWws CisJfTsKKworCXJldHVybiBoaWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLAorCQkJ ICAgICBISUZfTUlCX0lEX0RPVDExX1dFUF9ERUZBVUxUX0tFWV9JRCwKKwkJCSAgICAgJmFyZywg c2l6ZW9mKGFyZykpOworfQorCitpbnQgaGlmX3J0c190aHJlc2hvbGQoc3RydWN0IHdmeF92aWYg Knd2aWYsIGludCB2YWwpCit7CisJc3RydWN0IGhpZl9taWJfZG90MTFfcnRzX3RocmVzaG9sZCBh cmcgPSB7CisJCS50aHJlc2hvbGQgPSBjcHVfdG9fbGUzMih2YWwgPj0gMCA/IHZhbCA6IDB4RkZG RiksCisJfTsKKworCXJldHVybiBoaWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLAor CQkJICAgICBISUZfTUlCX0lEX0RPVDExX1JUU19USFJFU0hPTEQsICZhcmcsIHNpemVvZihhcmcp KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX3R4 X21pYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZfdHhfbWliLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44MTJiM2JhMGYwMGUKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl90eF9taWIu aApAQCAtMCwwICsxLDQ5IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1v bmx5ICovCisvKgorICogSW1wbGVtZW50YXRpb24gb2YgaG9zdC10by1jaGlwIE1JQnMgb2YgV0Z4 eHggU3BsaXQgTWFjIChXU00pIEFQSS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCwg U2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJp Y3Nzb24KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgU1QtRXJpY3Nzb24gU0EKKyAqLworI2lmbmRl ZiBXRlhfSElGX1RYX01JQl9ICisjZGVmaW5lIFdGWF9ISUZfVFhfTUlCX0gKKworc3RydWN0IHdm eF92aWY7CitzdHJ1Y3Qgc2tfYnVmZjsKKworaW50IGhpZl9zZXRfb3V0cHV0X3Bvd2VyKHN0cnVj dCB3ZnhfdmlmICp3dmlmLCBpbnQgdmFsKTsKK2ludCBoaWZfc2V0X2JlYWNvbl93YWtldXBfcGVy aW9kKHN0cnVjdCB3ZnhfdmlmICp3dmlmLAorCQkJCSB1bnNpZ25lZCBpbnQgZHRpbV9pbnRlcnZh bCwKKwkJCQkgdW5zaWduZWQgaW50IGxpc3Rlbl9pbnRlcnZhbCk7CitpbnQgaGlmX3NldF9yY3Bp X3Jzc2lfdGhyZXNob2xkKHN0cnVjdCB3ZnhfdmlmICp3dmlmLAorCQkJCWludCByc3NpX3Rob2xk LCBpbnQgcnNzaV9oeXN0KTsKK2ludCBoaWZfZ2V0X2NvdW50ZXJzX3RhYmxlKHN0cnVjdCB3Znhf ZGV2ICp3ZGV2LCBpbnQgdmlmX2lkLAorCQkJICAgc3RydWN0IGhpZl9taWJfZXh0ZW5kZWRfY291 bnRfdGFibGUgKmFyZyk7CitpbnQgaGlmX3NldF9tYWNhZGRyKHN0cnVjdCB3ZnhfdmlmICp3dmlm LCB1OCAqbWFjKTsKK2ludCBoaWZfc2V0X3J4X2ZpbHRlcihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwK KwkJICAgICAgYm9vbCBmaWx0ZXJfYnNzaWQsIGJvb2wgZndkX3Byb2JlX3JlcSk7CitpbnQgaGlm X3NldF9iZWFjb25fZmlsdGVyX3RhYmxlKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBpbnQgdGJsX2xl biwKKwkJCQljb25zdCBzdHJ1Y3QgaGlmX2llX3RhYmxlX2VudHJ5ICp0YmwpOworaW50IGhpZl9i ZWFjb25fZmlsdGVyX2NvbnRyb2woc3RydWN0IHdmeF92aWYgKnd2aWYsCisJCQkgICAgICBpbnQg ZW5hYmxlLCBpbnQgYmVhY29uX2NvdW50KTsKK2ludCBoaWZfc2V0X29wZXJhdGlvbmFsX21vZGUo c3RydWN0IHdmeF9kZXYgKndkZXYsIGVudW0gaGlmX29wX3Bvd2VyX21vZGUgbW9kZSk7CitpbnQg aGlmX3NldF90ZW1wbGF0ZV9mcmFtZShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IHNrX2J1 ZmYgKnNrYiwKKwkJCSAgIHU4IGZyYW1lX3R5cGUsIGludCBpbml0X3JhdGUpOworaW50IGhpZl9z ZXRfbWZwKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBib29sIGNhcGFibGUsIGJvb2wgcmVxdWlyZWQp OworaW50IGhpZl9zZXRfYmxvY2tfYWNrX3BvbGljeShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwKKwkJ CSAgICAgdTggdHhfdGlkX3BvbGljeSwgdTggcnhfdGlkX3BvbGljeSk7CitpbnQgaGlmX3NldF9h c3NvY2lhdGlvbl9tb2RlKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBpbnQgYW1wZHVfZGVuc2l0eSwK KwkJCSAgICAgYm9vbCBncmVlbmZpZWxkLCBib29sIHNob3J0X3ByZWFtYmxlKTsKK2ludCBoaWZf c2V0X3R4X3JhdGVfcmV0cnlfcG9saWN5KHN0cnVjdCB3ZnhfdmlmICp3dmlmLAorCQkJCSBpbnQg cG9saWN5X2luZGV4LCB1OCAqcmF0ZXMpOworaW50IGhpZl9rZWVwX2FsaXZlX3BlcmlvZChzdHJ1 Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50IHBlcmlvZCk7CitpbnQgaGlmX3NldF9hcnBfaXB2NF9maWx0 ZXIoc3RydWN0IHdmeF92aWYgKnd2aWYsIGludCBpZHgsIF9fYmUzMiAqYWRkcik7CitpbnQgaGlm X3VzZV9tdWx0aV90eF9jb25mKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBib29sIGVuYWJsZSk7Citp bnQgaGlmX3NldF91YXBzZF9pbmZvKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCB1bnNpZ25lZCBsb25n IHZhbCk7CitpbnQgaGlmX2VycF91c2VfcHJvdGVjdGlvbihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwg Ym9vbCBlbmFibGUpOworaW50IGhpZl9zbG90X3RpbWUoc3RydWN0IHdmeF92aWYgKnd2aWYsIGlu dCB2YWwpOworaW50IGhpZl93ZXBfZGVmYXVsdF9rZXlfaWQoc3RydWN0IHdmeF92aWYgKnd2aWYs IGludCB2YWwpOworaW50IGhpZl9ydHNfdGhyZXNob2xkKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBp bnQgdmFsKTsKKworI2VuZGlmCi0tIAoyLjI4LjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmRldmVsIG1haWxpbmcgbGlzdApkZXZlbEBsaW51eGRyaXZl cnByb2plY3Qub3JnCmh0dHA6Ly9kcml2ZXJkZXYubGludXhkcml2ZXJwcm9qZWN0Lm9yZy9tYWls bWFuL2xpc3RpbmZvL2RyaXZlcmRldi1kZXZlbAo=