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.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,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=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 31054C388F9 for ; Wed, 4 Nov 2020 15:55:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 8F531223FD for ; Wed, 4 Nov 2020 15:55:25 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=silabs.onmicrosoft.com header.i=@silabs.onmicrosoft.com header.b="SBse8I6v" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731082AbgKDPzQ (ORCPT ); Wed, 4 Nov 2020 10:55:16 -0500 Received: from mail-eopbgr750041.outbound.protection.outlook.com ([40.107.75.41]:2617 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1731281AbgKDPzO (ORCPT ); Wed, 4 Nov 2020 10:55:14 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BkEvhpvFlbPXzmr68rbZkseT+kYzktQWosuaxFylXkJXME8JAzjkltQSXJt09WS2PwXnriD5HyyscY6sXqURxKTrGrvjtQRjpYzAaSSnZjaP3xmdBHd2e7tUfqv13E+N3VATuOrZZXreSefyHwyEjelmexKJbFyJ5Zt4oVZ8SlMmf1v142Q3ZrWUIiyMDNAifvfiq3JSI1U8B3xDL88WK0ci5kcAhJqSicF/DpsjsrNjKB9+fh7kmimgrx9YAY+A1D8vaCqZ/MlfsQbmz60iR+dP77+PahRwBUaTAwS8hHFahKCCRSmnY3uMaOi2yAI2hvowTJWlwjrM4bu25L1CHA== 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=M52oy+hTpHdC262YeWjsYtbAbnSmD+lRrYD/5wjLoFA=; b=Pq9FmO7hrEOLS6kqnJxwwme96qgHmt3jQG60FGqFGEqoQPfMm/BoLEDEljZCTWrBfaooGJ2UYaIHmzLUtkPJTpgrUMJIdZMPbwKB2H57MGFZmlC8g3hmKwRSREim/dF2nE7tgsFNZu1FNj/6fSkJstt6dx0rbjmX3JMyjHLF0xSQEzojC+JdkKTz95WyebgCVV//8BZ3R+SouWMlnUQN4z9PRGOrP4Hq2a+LE7qsMCzfSxpgXTRUIeBYF18d1SxV2KNcwen3ufhf56jj9ENOaB4J0z7+IuW4xVedg1k5l3THoRJqiQpzspKT4azb81BBn82sZK8MkoWqlu1BBCNoMQ== 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=M52oy+hTpHdC262YeWjsYtbAbnSmD+lRrYD/5wjLoFA=; b=SBse8I6vQlrCC3S/c8pbfiUx+SGvnkMm8chm3/g2pBrJSEhOVFLSHYUblfe3eW7c0vV+GrgjTgcKIkUb5UAi6Bmzl2mXrQzRqMoX24mUH/aV1EOQLbUNu9wK9vfY50XdyhPqvqOwUic5nuivIUPj2FoeeB9u5NJ/ktY5GwNs/1g= 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 SN6PR11MB2718.namprd11.prod.outlook.com (2603:10b6:805:63::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3499.32; Wed, 4 Nov 2020 15:53:14 +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.3499.032; Wed, 4 Nov 2020 15:53:14 +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 v3 23/24] wfx: remove from the staging area Date: Wed, 4 Nov 2020 16:52:06 +0100 Message-Id: <20201104155207.128076-24-Jerome.Pouiller@silabs.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201104155207.128076-1-Jerome.Pouiller@silabs.com> References: <20201104155207.128076-1-Jerome.Pouiller@silabs.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 X-Originating-IP: [82.67.86.106] X-ClientProxiedBy: SN6PR01CA0032.prod.exchangelabs.com (2603:10b6:805:b6::45) 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 (82.67.86.106) by SN6PR01CA0032.prod.exchangelabs.com (2603:10b6:805:b6::45) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3499.19 via Frontend Transport; Wed, 4 Nov 2020 15:53:11 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 784537b3-ce54-47c5-1a1a-08d880d9bccb X-MS-TrafficTypeDiagnostic: SN6PR11MB2718: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:5236; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: r7OhjQLSxgM8VLRQ9vHYcpnc/ziH2N4xPw9wBc6hjnAOfJXRxg/s4TSPlb/yp7eE4UYmmXjPpZYEjHTTXu74T4D3T5zzhh09Bsd+f9ucCx4I9mqK8QtCewhvXzJ9IMabjaOotCZtIpYdfevJLDZ+6w1NHAApv4uEwD45LkGZ+gzFFQej0wue+RRdIaAKH8yqfSXOhXDJfZWhgvpelGbXiwqx+havdFIutdrC8GpoHtO5w+yPx/zFxBGjwcmbt7FO9bH3gAZsq+htRz1ZG7qiwV+jTMYFMV/BhdI7yB50hOd4cxVbje4zpqpxJ86hYLFNh2YKMyGX65EEnnsOocxNrU8bquSMjxg9g7Lv6A2PpHecwiFsSQLI99cMJ6HU4f3udeGlym18RdChl8S2X9cKc8C7Gsnd68khgBLmk3oC99qzr3lK6t5nbw+V9o9rduuzi+sgLtP8dXv3hDFfKYbEhA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN6PR11MB2718.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(346002)(376002)(39850400004)(136003)(396003)(8936002)(966005)(478600001)(186003)(16526019)(956004)(2616005)(6486002)(8676002)(66574015)(66476007)(66556008)(66946007)(316002)(7696005)(6666004)(83380400001)(26005)(54906003)(107886003)(30864003)(36756003)(52116002)(7416002)(4326008)(5660300002)(86362001)(1076003)(2906002)(21314003)(559001)(579004)(569008);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: WWr6UJ+XCrELwLTHSzKqT6TPh6U50u329H/iiIK9yU3rWXki05Ck1NtY5Zv9Nit0vn4Q6EdPar2t9ZuhJC7DDmJ/9rpiBtz4JIgXOn6GTNG90LtD+OgIDVE+FNmy1SyTRsCAzV1LPECbxjzYizvCIPOtD05ckC9ZlG+g8HEQCRRlAdEsVxRptqJd0Z3ISmmEoxS4WgrBhOFWTklHbd+RxMN00YUNsULMiBLkconOPwtVl2JzqJKowfvGBFte5YzrUEeyCHUNBsoWbnfbGOOxpf8vZZn8MUn+iIPsybR5Fj8fQ5yi/GUSaKmEAqjDpgiS9aY9BXN9U//B4wOf8D4ALQP6XCQ78a/yhsnpAIDv+wOOepFDMiibAi+UUmZ+DjzsPZUg7qPVZApEjH2F+c3k0gqCsE0ImZ8XeD9kcfJRMW5bvMB+nFYbK0NocNCYwxrhDq1jkEFsFUeYC+KT+bwstKNQ+q9v3OJpf/p0J1Qctt1SZULaiWSZKWgTUlg4Dd8+Ct42Wh1RNFIqb0yRC6KW7zw3+fe+4ADDFtdsoeaonFYVrxnCbBjDO9bg2I1fVxRBEa4q9WhBYzpVFdjNQDzPGorcD+WiJK4dX5EpaGtUxCe1PtqjgJAWIRpcCHlYbAnXsyQcaz9wWcsIx39dLHjZ2A== X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 784537b3-ce54-47c5-1a1a-08d880d9bccb X-MS-Exchange-CrossTenant-AuthSource: SN6PR11MB2718.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2020 15:53:14.2887 (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: +8ZT6hbEqzFeUGYxA+74nlSntRLt/4BqzL8SeckCxcQMlqRljlXBdIKhapafyojd+FSNu8Eddb82JLmiWbbyeA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR11MB2718 Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org RnJvbTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29tPgoKU2ln bmVkLW9mZi1ieTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29t PgotLS0KIC4uLi9iaW5kaW5ncy9uZXQvd2lyZWxlc3Mvc2lsYWJzLHdmeC55YW1sICAgICB8IDEy NSAtLS0KIGRyaXZlcnMvc3RhZ2luZy93ZngvS2NvbmZpZyAgICAgICAgICAgICAgICAgICB8ICAg OCAtCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L01ha2VmaWxlICAgICAgICAgICAgICAgICAgfCAgMjUg LQogZHJpdmVycy9zdGFnaW5nL3dmeC9iaC5jICAgICAgICAgICAgICAgICAgICAgIHwgMzMzIC0t LS0tLS0tCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L2JoLmggICAgICAgICAgICAgICAgICAgICAgfCAg MzMgLQogZHJpdmVycy9zdGFnaW5nL3dmeC9idXMuaCAgICAgICAgICAgICAgICAgICAgIHwgIDM4 IC0KIGRyaXZlcnMvc3RhZ2luZy93ZngvYnVzX3NkaW8uYyAgICAgICAgICAgICAgICB8IDI2OSAt LS0tLS0KIGRyaXZlcnMvc3RhZ2luZy93ZngvYnVzX3NwaS5jICAgICAgICAgICAgICAgICB8IDI3 MSAtLS0tLS0KIGRyaXZlcnMvc3RhZ2luZy93ZngvZGF0YV9yeC5jICAgICAgICAgICAgICAgICB8 ICA5MyAtLQogZHJpdmVycy9zdGFnaW5nL3dmeC9kYXRhX3J4LmggICAgICAgICAgICAgICAgIHwg IDE4IC0KIGRyaXZlcnMvc3RhZ2luZy93ZngvZGF0YV90eC5jICAgICAgICAgICAgICAgICB8IDU4 NSAtLS0tLS0tLS0tLS0tCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L2RhdGFfdHguaCAgICAgICAgICAg ICAgICAgfCAgNjcgLS0KIGRyaXZlcnMvc3RhZ2luZy93ZngvZGVidWcuYyAgICAgICAgICAgICAg ICAgICB8IDM1OSAtLS0tLS0tLQogZHJpdmVycy9zdGFnaW5nL3dmeC9kZWJ1Zy5oICAgICAgICAg ICAgICAgICAgIHwgIDE5IC0KIGRyaXZlcnMvc3RhZ2luZy93ZngvZndpby5jICAgICAgICAgICAg ICAgICAgICB8IDQwNSAtLS0tLS0tLS0KIGRyaXZlcnMvc3RhZ2luZy93ZngvZndpby5oICAgICAg ICAgICAgICAgICAgICB8ICAxNSAtCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl9hcGlfY21kLmgg ICAgICAgICAgICAgfCA1NTMgLS0tLS0tLS0tLS0tCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl9h cGlfZ2VuZXJhbC5oICAgICAgICAgfCAyNjcgLS0tLS0tCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L2hp Zl9hcGlfbWliLmggICAgICAgICAgICAgfCAzNDMgLS0tLS0tLS0KIGRyaXZlcnMvc3RhZ2luZy93 ZngvaGlmX3J4LmMgICAgICAgICAgICAgICAgICB8IDQxNSAtLS0tLS0tLS0KIGRyaXZlcnMvc3Rh Z2luZy93ZngvaGlmX3J4LmggICAgICAgICAgICAgICAgICB8ICAxOCAtCiBkcml2ZXJzL3N0YWdp bmcvd2Z4L2hpZl90eC5jICAgICAgICAgICAgICAgICAgfCA1MjMgLS0tLS0tLS0tLS0tCiBkcml2 ZXJzL3N0YWdpbmcvd2Z4L2hpZl90eC5oICAgICAgICAgICAgICAgICAgfCAgNjAgLS0KIGRyaXZl cnMvc3RhZ2luZy93ZngvaGlmX3R4X21pYi5jICAgICAgICAgICAgICB8IDMyNCAtLS0tLS0tCiBk cml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl90eF9taWIuaCAgICAgICAgICAgICAgfCAgNDkgLS0KIGRy aXZlcnMvc3RhZ2luZy93ZngvaHdpby5jICAgICAgICAgICAgICAgICAgICB8IDM1MiAtLS0tLS0t LQogZHJpdmVycy9zdGFnaW5nL3dmeC9od2lvLmggICAgICAgICAgICAgICAgICAgIHwgIDc1IC0t CiBkcml2ZXJzL3N0YWdpbmcvd2Z4L2tleS5jICAgICAgICAgICAgICAgICAgICAgfCAyNDEgLS0t LS0tCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L2tleS5oICAgICAgICAgICAgICAgICAgICAgfCAgMjAg LQogZHJpdmVycy9zdGFnaW5nL3dmeC9tYWluLmMgICAgICAgICAgICAgICAgICAgIHwgNDkwIC0t LS0tLS0tLS0tCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L21haW4uaCAgICAgICAgICAgICAgICAgICAg fCAgNDQgLQogZHJpdmVycy9zdGFnaW5nL3dmeC9xdWV1ZS5jICAgICAgICAgICAgICAgICAgIHwg MzA0IC0tLS0tLS0KIGRyaXZlcnMvc3RhZ2luZy93ZngvcXVldWUuaCAgICAgICAgICAgICAgICAg ICB8ICA0NSAtCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L3NjYW4uYyAgICAgICAgICAgICAgICAgICAg fCAxMzIgLS0tCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L3NjYW4uaCAgICAgICAgICAgICAgICAgICAg fCAgMjIgLQogZHJpdmVycy9zdGFnaW5nL3dmeC9zdGEuYyAgICAgICAgICAgICAgICAgICAgIHwg ODA3IC0tLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9zdGFnaW5nL3dmeC9zdGEuaCAgICAgICAg ICAgICAgICAgICAgIHwgIDczIC0tCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L3RyYWNlcy5oICAgICAg ICAgICAgICAgICAgfCA1MDEgLS0tLS0tLS0tLS0KIGRyaXZlcnMvc3RhZ2luZy93Zngvd2Z4Lmgg ICAgICAgICAgICAgICAgICAgICB8IDE2NiAtLS0tCiAzOSBmaWxlcyBjaGFuZ2VkLCA4NDg3IGRl bGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy93ZngvRG9jdW1l bnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9zaWxhYnMsd2Z4LnlhbWwK IGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L0tjb25maWcKIGRlbGV0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L01ha2VmaWxlCiBkZWxldGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9zdGFnaW5nL3dmeC9iaC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9z dGFnaW5nL3dmeC9iaC5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3dmeC9i dXMuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy93ZngvYnVzX3NkaW8uYwog ZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy93ZngvYnVzX3NwaS5jCiBkZWxldGUg bW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3dmeC9kYXRhX3J4LmMKIGRlbGV0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L2RhdGFfcnguaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvc3RhZ2luZy93ZngvZGF0YV90eC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9z dGFnaW5nL3dmeC9kYXRhX3R4LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcv d2Z4L2RlYnVnLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L2RlYnVn LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L2Z3aW8uYwogZGVsZXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy93ZngvZndpby5oCiBkZWxldGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfYXBpX2NtZC5oCiBkZWxldGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfYXBpX2dlbmVyYWwuaAogZGVsZXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvc3RhZ2luZy93ZngvaGlmX2FwaV9taWIuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvc3RhZ2luZy93ZngvaGlmX3J4LmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0 YWdpbmcvd2Z4L2hpZl9yeC5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3dm eC9oaWZfdHguYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3R4 LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl90eF9taWIuYwog ZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3R4X21pYi5oCiBkZWxl dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3dmeC9od2lvLmMKIGRlbGV0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L2h3aW8uaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvc3RhZ2luZy93Zngva2V5LmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcv d2Z4L2tleS5oCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3dmeC9tYWluLmMK IGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L21haW4uaAogZGVsZXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy93ZngvcXVldWUuYwogZGVsZXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvc3RhZ2luZy93ZngvcXVldWUuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv c3RhZ2luZy93Zngvc2Nhbi5jCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3dm eC9zY2FuLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L3N0YS5jCiBk ZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3dmeC9zdGEuaAogZGVsZXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy93ZngvdHJhY2VzLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL3N0YWdpbmcvd2Z4L3dmeC5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dm eC9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL3NpbGFicyx3 ZngueWFtbCBiL2RyaXZlcnMvc3RhZ2luZy93ZngvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2Jp bmRpbmdzL25ldC93aXJlbGVzcy9zaWxhYnMsd2Z4LnlhbWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDQzYjU2MzBjMDQwNy4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2lu Zy93ZngvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXJlbGVzcy9zaWxh YnMsd2Z4LnlhbWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotIyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpCi0jIENvcHlyaWdo dCAoYykgMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSVZQU1MIDEuMgotLS0tCi0K LSRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3dpcmVsZXNzL3NpbGFicyx3 ZngueWFtbCMKLSRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29y ZS55YW1sIwotCi10aXRsZTogU2lsaWNvbiBMYWJzIFdGeHh4IGRldmljZXRyZWUgYmluZGluZ3MK LQotbWFpbnRhaW5lcnM6Ci0gIC0gSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBz aWxhYnMuY29tPgotCi1kZXNjcmlwdGlvbjoKLSAgVGhlIFdGeHh4IGNoaXAgc2VyaWVzIGNhbiBi ZSBjb25uZWN0ZWQgdmlhIFNQSSBvciB2aWEgU0RJTy4KLQotICBGb3IgU0RJTyc6JwotCi0gICAg VGhlIGRyaXZlciBpcyBhYmxlIHRvIGRldGVjdCBhIFdGeHh4IGNoaXAgb24gU0RJTyBidXMgYnkg bWF0Y2hpbmcgaXRzIFZlbmRvcgotICAgIElEIGFuZCBQcm9kdWN0IElELiBIb3dldmVyLCBkcml2 ZXIgd2lsbCBvbmx5IHByb3ZpZGUgbGltaXRlZCBmZWF0dXJlcyBpbgotICAgIHRoaXMgY2FzZS4g VGh1cyBkZWNsYXJpbmcgV0Z4eHggY2hpcCBpbiBkZXZpY2UgdHJlZSBpcyByZWNvbW1lbmRlZCAo YW5kIG1heQotICAgIGJlY29tZSBtYW5kYXRvcnkgaW4gdGhlIGZ1dHVyZSkuCi0KLSAgICBJbiBh ZGRpdGlvbiwgaXQgaXMgcmVjb21tZW5kZWQgdG8gZGVjbGFyZSBhIG1tYy1wd3JzZXEgb24gU0RJ TyBob3N0IGFib3ZlCi0gICAgV0Z4LiBXaXRob3V0IGl0LCB5b3UgbWF5IGVuY291bnRlciBpc3N1 ZXMgd2l0aCB3YXJtIGJvb3QuIFRoZSBtbWMtcHdyc2VxCi0gICAgc2hvdWxkIGJlIGNvbXBhdGli bGUgd2l0aCBtbWMtcHdyc2VxLXNpbXBsZS4gUGxlYXNlIGNvbnN1bHQKLSAgICBEb2N1bWVudGF0 aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL21tYy1wd3JzZXEtc2ltcGxlLnR4dCBmb3IgbW9y ZQotICAgIGluZm9ybWF0aW9uLgotCi0gIEZvciBTUEknOicKLQotICAgIEluIGFkZCBvZiB0aGUg cHJvcGVydGllcyBiZWxvdywgcGxlYXNlIGNvbnN1bHQKLSAgICBEb2N1bWVudGF0aW9uL2Rldmlj ZXRyZWUvYmluZGluZ3Mvc3BpL3NwaS1jb250cm9sbGVyLnlhbWwgZm9yIG9wdGlvbmFsIFNQSQot ICAgIHJlbGF0ZWQgcHJvcGVydGllcy4KLQotICBOb3RlIHRoYXQgaW4gYWRkIG9mIHRoZSBwcm9w ZXJ0aWVzIGJlbG93LCB0aGUgV0Z4IGRyaXZlciBhbHNvIHN1cHBvcnRzCi0gIGBtYWMtYWRkcmVz c2AgYW5kIGBsb2NhbC1tYWMtYWRkcmVzc2AgYXMgZGVzY3JpYmVkIGluCi0gIERvY3VtZW50YXRp b24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZXRoZXJuZXQudHh0Ci0KLXByb3BlcnRpZXM6Ci0g IGNvbXBhdGlibGU6Ci0gICAgY29uc3Q6IHNpbGFicyx3ZjIwMAotICByZWc6Ci0gICAgZGVzY3Jp cHRpb246Ci0gICAgICBXaGVuIHVzZWQgb24gU0RJTyBidXMsIDxyZWc+IG11c3QgYmUgc2V0IHRv IDEuIFdoZW4gdXNlZCBvbiBTUEkgYnVzLCBpdCBpcwotICAgICAgdGhlIGNoaXAgc2VsZWN0IGFk ZHJlc3Mgb2YgdGhlIGRldmljZSBhcyBkZWZpbmVkIGluIHRoZSBTUEkgZGV2aWNlcwotICAgICAg YmluZGluZ3MuCi0gICAgbWF4SXRlbXM6IDEKLSAgc3BpLW1heC1mcmVxdWVuY3k6Ci0gICAgZGVz Y3JpcHRpb246IChTUEkgb25seSkgTWF4aW11bSBTUEkgY2xvY2tpbmcgc3BlZWQgb2YgZGV2aWNl IGluIEh6LgotICAgIG1heEl0ZW1zOiAxCi0gIGludGVycnVwdHM6Ci0gICAgZGVzY3JpcHRpb246 IFRoZSBpbnRlcnJ1cHQgbGluZS4gVHJpZ2dlcnMgSVJRX1RZUEVfTEVWRUxfSElHSCBhbmQKLSAg ICAgIElSUV9UWVBFX0VER0VfUklTSU5HIGFyZSBib3RoIHN1cHBvcnRlZCBieSB0aGUgY2hpcCBh bmQgdGhlIGRyaXZlci4gV2hlbgotICAgICAgU1BJIGlzIHVzZWQsIHRoaXMgcHJvcGVydHkgaXMg cmVxdWlyZWQuIFdoZW4gU0RJTyBpcyB1c2VkLCB0aGUgImluLWJhbmQiCi0gICAgICBpbnRlcnJ1 cHQgcHJvdmlkZWQgYnkgdGhlIFNESU8gYnVzIGlzIHVzZWQgdW5sZXNzIGFuIGludGVycnVwdCBp cyBkZWZpbmVkCi0gICAgICBpbiB0aGUgRGV2aWNlIFRyZWUuCi0gICAgbWF4SXRlbXM6IDEKLSAg cmVzZXQtZ3Bpb3M6Ci0gICAgZGVzY3JpcHRpb246IChTUEkgb25seSkgUGhhbmRsZSBvZiBncGlv IHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlc2V0IGNoaXAKLSAgICAgIGR1cmluZyBwcm9iZS4gV2l0 aG91dCB0aGlzIHByb3BlcnR5LCB5b3UgbWF5IGVuY291bnRlciBpc3N1ZXMgd2l0aCB3YXJtCi0g ICAgICBib290LiAoRm9yIGxlZ2FjeSBwdXJwb3NlLCB0aGUgZ3BpbyBpbiBpbnZlcnRlZCB3aGVu IGNvbXBhdGlibGUgPT0KLSAgICAgICJzaWxhYnMsd2Z4LXNwaSIpCi0KLSAgICAgIEZvciBTRElP LCB0aGUgcmVzZXQgZ3BpbyBzaG91bGQgZGVjbGFyZWQgdXNpbmcgYSBtbWMtcHdyc2VxLgotICAg IG1heEl0ZW1zOiAxCi0gIHdha2V1cC1ncGlvczoKLSAgICBkZXNjcmlwdGlvbjogUGhhbmRsZSBv ZiBncGlvIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHdha2UtdXAgY2hpcC4gV2l0aG91dCB0aGlzCi0g ICAgICBwcm9wZXJ0eSwgZHJpdmVyIHdpbGwgZGlzYWJsZSBtb3N0IG9mIHBvd2VyIHNhdmluZyBm ZWF0dXJlcy4KLSAgICBtYXhJdGVtczogMQotICBjb25maWctZmlsZToKLSAgICBkZXNjcmlwdGlv bjogVXNlIGFuIGFsdGVybmF0aXZlIGZpbGUgYXMgUERTLiBEZWZhdWx0IGlzIGB3ZjIwMC5wZHNg LiBPbmx5Ci0gICAgICBuZWNlc3NhcnkgZm9yIGRldmVsb3BtZW50L2RlYnVnIHB1cnBvc2UuCi0g ICAgbWF4SXRlbXM6IDEKLQotcmVxdWlyZWQ6Ci0gIC0gY29tcGF0aWJsZQotICAtIHJlZwotCi1l eGFtcGxlczoKLSAgLSB8Ci0gICAgI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oPgot ICAgICNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaD4KLQot ICAgIHNwaTAgewotICAgICAgICAjYWRkcmVzcy1jZWxscyA9IDwxPjsKLSAgICAgICAgI3NpemUt Y2VsbHMgPSA8MD47Ci0KLSAgICAgICAgd2Z4QDAgewotICAgICAgICAgICAgY29tcGF0aWJsZSA9 ICJzaWxhYnMsd2YyMDAiOwotICAgICAgICAgICAgcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsK LSAgICAgICAgICAgIHBpbmN0cmwtMCA9IDwmd2Z4X2lycSAmd2Z4X2dwaW9zPjsKLSAgICAgICAg ICAgIHJlZyA9IDwwPjsKLSAgICAgICAgICAgIGludGVycnVwdHMtZXh0ZW5kZWQgPSA8JmdwaW8g MTYgSVJRX1RZUEVfRURHRV9SSVNJTkc+OwotICAgICAgICAgICAgd2FrZXVwLWdwaW9zID0gPCZn cGlvIDEyIEdQSU9fQUNUSVZFX0hJR0g+OwotICAgICAgICAgICAgcmVzZXQtZ3Bpb3MgPSA8Jmdw aW8gMTMgR1BJT19BQ1RJVkVfTE9XPjsKLSAgICAgICAgICAgIHNwaS1tYXgtZnJlcXVlbmN5ID0g PDQyMDAwMDAwPjsKLSAgICAgICAgfTsKLSAgICB9OwotCi0gIC0gfAotICAgICNpbmNsdWRlIDxk dC1iaW5kaW5ncy9ncGlvL2dwaW8uaD4KLSAgICAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJy dXB0LWNvbnRyb2xsZXIvaXJxLmg+Ci0KLSAgICB3ZnhfcHdyc2VxOiB3ZnhfcHdyc2VxIHsKLSAg ICAgICAgY29tcGF0aWJsZSA9ICJtbWMtcHdyc2VxLXNpbXBsZSI7Ci0gICAgICAgIHBpbmN0cmwt bmFtZXMgPSAiZGVmYXVsdCI7Ci0gICAgICAgIHBpbmN0cmwtMCA9IDwmd2Z4X3Jlc2V0PjsKLSAg ICAgICAgcmVzZXQtZ3Bpb3MgPSA8JmdwaW8gMTMgR1BJT19BQ1RJVkVfTE9XPjsKLSAgICB9Owot Ci0gICAgbW1jMCB7Ci0gICAgICAgIG1tYy1wd3JzZXEgPSA8JndmeF9wd3JzZXE+OwotICAgICAg ICAjYWRkcmVzcy1jZWxscyA9IDwxPjsKLSAgICAgICAgI3NpemUtY2VsbHMgPSA8MD47Ci0KLSAg ICAgICAgbW1jQDEgewotICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJzaWxhYnMsd2YyMDAiOwot ICAgICAgICAgICAgcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKLSAgICAgICAgICAgIHBpbmN0 cmwtMCA9IDwmd2Z4X3dha2V1cD47Ci0gICAgICAgICAgICByZWcgPSA8MT47Ci0gICAgICAgICAg ICB3YWtldXAtZ3Bpb3MgPSA8JmdwaW8gMTIgR1BJT19BQ1RJVkVfSElHSD47Ci0gICAgICAgIH07 Ci0gICAgfTsKLS4uLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9LY29uZmlnIGIv ZHJpdmVycy9zdGFnaW5nL3dmeC9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCA4M2VlNGQwY2E4YzYuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L0tj b25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLWNvbmZpZyBXRlgKLQl0cmlzdGF0 ZSAiU2lsaWNvbiBMYWJzIHdpcmVsZXNzIGNoaXBzIFdGMjAwIGFuZCBmdXJ0aGVyIgotCWRlcGVu ZHMgb24gTUFDODAyMTEKLQlkZXBlbmRzIG9uIE1NQyB8fCAhTU1DICMgZG8gbm90IGFsbG93IFdG WD15IGlmIE1NQz1tCi0JZGVwZW5kcyBvbiAoU1BJIHx8IE1NQykKLQloZWxwCi0JICBUaGlzIGlz IGEgZHJpdmVyIGZvciBTaWxpY29ucyBMYWJzIFdGeHh4IHNlcmllcyAoV0YyMDAgYW5kIGZ1cnRo ZXIpCi0JICBjaGlwc2V0cy4gVGhpcyBjaGlwIGNhbiBiZSBmb3VuZCBvbiBTUEkgb3IgU0RJTyBi dXNlcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZngvTWFrZWZpbGUgYi9kcml2ZXJz L3N0YWdpbmcvd2Z4L01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTBj Yzk4MmNlYWIuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L01ha2VmaWxl CisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMAotCi0jIE5lY2Vzc2FyeSBmb3IgQ1JFQVRFX1RSQUNFX1BPSU5UUwotQ0ZMQUdT X2RlYnVnLm8gPSAtSSQoc3JjKQotCi13ZngteSA6PSBcCi0JYmgubyBcCi0JaHdpby5vIFwKLQlm d2lvLm8gXAotCWhpZl90eF9taWIubyBcCi0JaGlmX3R4Lm8gXAotCWhpZl9yeC5vIFwKLQlxdWV1 ZS5vIFwKLQlkYXRhX3R4Lm8gXAotCWRhdGFfcngubyBcCi0Jc2Nhbi5vIFwKLQlzdGEubyBcCi0J a2V5Lm8gXAotCW1haW4ubyBcCi0Jc3RhLm8gXAotCWRlYnVnLm8KLXdmeC0kKENPTkZJR19TUEkp ICs9IGJ1c19zcGkubwotd2Z4LSQoc3Vic3QgbSx5LCQoQ09ORklHX01NQykpICs9IGJ1c19zZGlv Lm8KLQotb2JqLSQoQ09ORklHX1dGWCkgKz0gd2Z4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3Rh Z2luZy93ZngvYmguYyBiL2RyaXZlcnMvc3RhZ2luZy93ZngvYmguYwpkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggZWQ1M2QwYjQ1NTkyLi4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9z dGFnaW5nL3dmeC9iaC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzMzICswLDAgQEAKLS8vIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLS8qCi0gKiBJbnRlcnJ1cHQgYm90dG9t IGhhbGYgKEJIKS4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJv cmF0b3JpZXMsIEluYy4KLSAqIENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJpY3Nzb24KLSAqLwot I2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KLSNpbmNsdWRlIDxuZXQvbWFjODAyMTEu aD4KLQotI2luY2x1ZGUgImJoLmgiCi0jaW5jbHVkZSAid2Z4LmgiCi0jaW5jbHVkZSAiaHdpby5o IgotI2luY2x1ZGUgInRyYWNlcy5oIgotI2luY2x1ZGUgImhpZl9yeC5oIgotI2luY2x1ZGUgImhp Zl9hcGlfY21kLmgiCi0KLXN0YXRpYyB2b2lkIGRldmljZV93YWtldXAoc3RydWN0IHdmeF9kZXYg KndkZXYpCi17Ci0JaW50IG1heF9yZXRyeSA9IDM7Ci0KLQlpZiAoIXdkZXYtPnBkYXRhLmdwaW9f d2FrZXVwKQotCQlyZXR1cm47Ci0JaWYgKGdwaW9kX2dldF92YWx1ZV9jYW5zbGVlcCh3ZGV2LT5w ZGF0YS5ncGlvX3dha2V1cCkgPiAwKQotCQlyZXR1cm47Ci0KLQlpZiAod2Z4X2FwaV9vbGRlcl90 aGFuKHdkZXYsIDEsIDQpKSB7Ci0JCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcCh3ZGV2LT5wZGF0 YS5ncGlvX3dha2V1cCwgMSk7Ci0JCWlmICghY29tcGxldGlvbl9kb25lKCZ3ZGV2LT5oaWYuY3Ry bF9yZWFkeSkpCi0JCQl1c2xlZXBfcmFuZ2UoMjAwMCwgMjUwMCk7Ci0JCXJldHVybjsKLQl9Ci0J Zm9yICg7OykgewotCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAod2Rldi0+cGRhdGEuZ3Bpb193 YWtldXAsIDEpOwotCQkvLyBjb21wbGV0aW9uLmggZG9lcyBub3QgcHJvdmlkZSBhbnkgZnVuY3Rp b24gdG8gd2FpdAotCQkvLyBjb21wbGV0aW9uIHdpdGhvdXQgY29uc3VtZSBpdCAoYSBraW5kIG9m Ci0JCS8vIHdhaXRfZm9yX2NvbXBsZXRpb25fZG9uZV90aW1lb3V0KCkpLiBTbyB3ZSBoYXZlIHRv IGVtdWxhdGUKLQkJLy8gaXQuCi0JCWlmICh3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJndk ZXYtPmhpZi5jdHJsX3JlYWR5LAotCQkJCQkJbXNlY3NfdG9famlmZmllcygyKSkpIHsKLQkJCWNv bXBsZXRlKCZ3ZGV2LT5oaWYuY3RybF9yZWFkeSk7Ci0JCQlyZXR1cm47Ci0JCX0gZWxzZSBpZiAo bWF4X3JldHJ5LS0gPiAwKSB7Ci0JCQkvLyBPbGRlciBmaXJtd2FyZXMgaGF2ZSBhIHJhY2UgaW4g c2xlZXAvd2FrZS11cCBwcm9jZXNzLgotCQkJLy8gUmVkbyB0aGUgcHJvY2VzcyBpcyBzdWZmaWNp ZW50IHRvIHVuZnJlZXplIHRoZQotCQkJLy8gY2hpcC4KLQkJCWRldl9lcnIod2Rldi0+ZGV2LCAi dGltZW91dCB3aGlsZSB3YWtlIHVwIGNoaXBcbiIpOwotCQkJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNs ZWVwKHdkZXYtPnBkYXRhLmdwaW9fd2FrZXVwLCAwKTsKLQkJCXVzbGVlcF9yYW5nZSgyMDAwLCAy NTAwKTsKLQkJfSBlbHNlIHsKLQkJCWRldl9lcnIod2Rldi0+ZGV2LCAibWF4IHdha2UtdXAgcmV0 cmllcyByZWFjaGVkXG4iKTsKLQkJCXJldHVybjsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQg ZGV2aWNlX3JlbGVhc2Uoc3RydWN0IHdmeF9kZXYgKndkZXYpCi17Ci0JaWYgKCF3ZGV2LT5wZGF0 YS5ncGlvX3dha2V1cCkKLQkJcmV0dXJuOwotCi0JZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHdk ZXYtPnBkYXRhLmdwaW9fd2FrZXVwLCAwKTsKLX0KLQotc3RhdGljIGludCByeF9oZWxwZXIoc3Ry dWN0IHdmeF9kZXYgKndkZXYsIHNpemVfdCByZWFkX2xlbiwgaW50ICppc19jbmYpCi17Ci0Jc3Ry dWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgaGlmX21zZyAqaGlmOwotCXNpemVfdCBhbGxvY19s ZW47Ci0Jc2l6ZV90IGNvbXB1dGVkX2xlbjsKLQlpbnQgcmVsZWFzZV9jb3VudDsKLQlpbnQgcGln Z3liYWNrID0gMDsKLQotCVdBUk4ocmVhZF9sZW4gPiByb3VuZF9kb3duKDB4RkZGLCAyKSAqIHNp emVvZih1MTYpLAotCSAgICAgIiVzOiByZXF1ZXN0IGV4Y2VlZCBXRnggY2FwYWJpbGl0eSIsIF9f ZnVuY19fKTsKLQotCS8vIEFkZCAyIHRvIHRha2UgaW50byBhY2NvdW50IHBpZ2d5YmFjayBzaXpl Ci0JYWxsb2NfbGVuID0gd2Rldi0+aHdidXNfb3BzLT5hbGlnbl9zaXplKHdkZXYtPmh3YnVzX3By aXYsIHJlYWRfbGVuICsgMik7Ci0Jc2tiID0gZGV2X2FsbG9jX3NrYihhbGxvY19sZW4pOwotCWlm ICghc2tiKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWlmICh3ZnhfZGF0YV9yZWFkKHdkZXYsIHNr Yi0+ZGF0YSwgYWxsb2NfbGVuKSkKLQkJZ290byBlcnI7Ci0KLQlwaWdneWJhY2sgPSBsZTE2X3Rv X2NwdXAoKF9fbGUxNiAqKShza2ItPmRhdGEgKyBhbGxvY19sZW4gLSAyKSk7Ci0JX3RyYWNlX3Bp Z2d5YmFjayhwaWdneWJhY2ssIGZhbHNlKTsKLQotCWhpZiA9IChzdHJ1Y3QgaGlmX21zZyAqKXNr Yi0+ZGF0YTsKLQlXQVJOKGhpZi0+ZW5jcnlwdGVkICYgMHgzLCAiZW5jcnlwdGlvbiBpcyB1bnN1 cHBvcnRlZCIpOwotCWlmIChXQVJOKHJlYWRfbGVuIDwgc2l6ZW9mKHN0cnVjdCBoaWZfbXNnKSwg ImNvcnJ1cHRlZCByZWFkIikpCi0JCWdvdG8gZXJyOwotCWNvbXB1dGVkX2xlbiA9IGxlMTZfdG9f Y3B1KGhpZi0+bGVuKTsKLQljb21wdXRlZF9sZW4gPSByb3VuZF91cChjb21wdXRlZF9sZW4sIDIp OwotCWlmIChjb21wdXRlZF9sZW4gIT0gcmVhZF9sZW4pIHsKLQkJZGV2X2Vycih3ZGV2LT5kZXYs ICJpbmNvbnNpc3RlbnQgbWVzc2FnZSBsZW5ndGg6ICV6dSAhPSAlenVcbiIsCi0JCQljb21wdXRl ZF9sZW4sIHJlYWRfbGVuKTsKLQkJcHJpbnRfaGV4X2R1bXAoS0VSTl9JTkZPLCAiaGlmOiAiLCBE VU1QX1BSRUZJWF9PRkZTRVQsIDE2LCAxLAotCQkJICAgICAgIGhpZiwgcmVhZF9sZW4sIHRydWUp OwotCQlnb3RvIGVycjsKLQl9Ci0KLQlpZiAoIShoaWYtPmlkICYgSElGX0lEX0lTX0lORElDQVRJ T04pKSB7Ci0JCSgqaXNfY25mKSsrOwotCQlpZiAoaGlmLT5pZCA9PSBISUZfQ05GX0lEX01VTFRJ X1RSQU5TTUlUKQotCQkJcmVsZWFzZV9jb3VudCA9ICgoc3RydWN0IGhpZl9jbmZfbXVsdGlfdHJh bnNtaXQgKiloaWYtPmJvZHkpLT5udW1fdHhfY29uZnM7Ci0JCWVsc2UKLQkJCXJlbGVhc2VfY291 bnQgPSAxOwotCQlXQVJOKHdkZXYtPmhpZi50eF9idWZmZXJzX3VzZWQgPCByZWxlYXNlX2NvdW50 LCAiY29ycnVwdGVkIGJ1ZmZlciBjb3VudGVyIik7Ci0JCXdkZXYtPmhpZi50eF9idWZmZXJzX3Vz ZWQgLT0gcmVsZWFzZV9jb3VudDsKLQl9Ci0JX3RyYWNlX2hpZl9yZWN2KGhpZiwgd2Rldi0+aGlm LnR4X2J1ZmZlcnNfdXNlZCk7Ci0KLQlpZiAoaGlmLT5pZCAhPSBISUZfSU5EX0lEX0VYQ0VQVElP TiAmJiBoaWYtPmlkICE9IEhJRl9JTkRfSURfRVJST1IpIHsKLQkJaWYgKGhpZi0+c2VxbnVtICE9 IHdkZXYtPmhpZi5yeF9zZXFudW0pCi0JCQlkZXZfd2Fybih3ZGV2LT5kZXYsICJ3cm9uZyBtZXNz YWdlIHNlcXVlbmNlOiAlZCAhPSAlZFxuIiwKLQkJCQkgaGlmLT5zZXFudW0sIHdkZXYtPmhpZi5y eF9zZXFudW0pOwotCQl3ZGV2LT5oaWYucnhfc2VxbnVtID0gKGhpZi0+c2VxbnVtICsgMSkgJSAo SElGX0NPVU5URVJfTUFYICsgMSk7Ci0JfQotCi0Jc2tiX3B1dChza2IsIGxlMTZfdG9fY3B1KGhp Zi0+bGVuKSk7Ci0JLy8gd2Z4X2hhbmRsZV9yeCB0YWtlcyBjYXJlIG9uIFNLQiBsaXZldGltZQot CXdmeF9oYW5kbGVfcngod2Rldiwgc2tiKTsKLQlpZiAoIXdkZXYtPmhpZi50eF9idWZmZXJzX3Vz ZWQpCi0JCXdha2VfdXAoJndkZXYtPmhpZi50eF9idWZmZXJzX2VtcHR5KTsKLQotCXJldHVybiBw aWdneWJhY2s7Ci0KLWVycjoKLQlpZiAoc2tiKQotCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JcmV0 dXJuIC1FSU87Ci19Ci0KLXN0YXRpYyBpbnQgYmhfd29ya19yeChzdHJ1Y3Qgd2Z4X2RldiAqd2Rl diwgaW50IG1heF9tc2csIGludCAqbnVtX2NuZikKLXsKLQlzaXplX3QgbGVuOwotCWludCBpOwot CWludCBjdHJsX3JlZywgcGlnZ3liYWNrOwotCi0JcGlnZ3liYWNrID0gMDsKLQlmb3IgKGkgPSAw OyBpIDwgbWF4X21zZzsgaSsrKSB7Ci0JCWlmIChwaWdneWJhY2sgJiBDVFJMX05FWFRfTEVOX01B U0spCi0JCQljdHJsX3JlZyA9IHBpZ2d5YmFjazsKLQkJZWxzZSBpZiAodHJ5X3dhaXRfZm9yX2Nv bXBsZXRpb24oJndkZXYtPmhpZi5jdHJsX3JlYWR5KSkKLQkJCWN0cmxfcmVnID0gYXRvbWljX3hj aGcoJndkZXYtPmhpZi5jdHJsX3JlZywgMCk7Ci0JCWVsc2UKLQkJCWN0cmxfcmVnID0gMDsKLQkJ aWYgKCEoY3RybF9yZWcgJiBDVFJMX05FWFRfTEVOX01BU0spKQotCQkJcmV0dXJuIGk7Ci0JCS8v IGN0cmxfcmVnIHVuaXRzIGFyZSAxNmJpdHMgd29yZHMKLQkJbGVuID0gKGN0cmxfcmVnICYgQ1RS TF9ORVhUX0xFTl9NQVNLKSAqIDI7Ci0JCXBpZ2d5YmFjayA9IHJ4X2hlbHBlcih3ZGV2LCBsZW4s IG51bV9jbmYpOwotCQlpZiAocGlnZ3liYWNrIDwgMCkKLQkJCXJldHVybiBpOwotCQlpZiAoIShw aWdneWJhY2sgJiBDVFJMX1dMQU5fUkVBRFkpKQotCQkJZGV2X2Vycih3ZGV2LT5kZXYsICJ1bmV4 cGVjdGVkIHBpZ2d5YmFjayB2YWx1ZTogcmVhZHkgYml0IG5vdCBzZXQ6ICUwNHhcbiIsCi0JCQkJ cGlnZ3liYWNrKTsKLQl9Ci0JaWYgKHBpZ2d5YmFjayAmIENUUkxfTkVYVF9MRU5fTUFTSykgewot CQljdHJsX3JlZyA9IGF0b21pY194Y2hnKCZ3ZGV2LT5oaWYuY3RybF9yZWcsIHBpZ2d5YmFjayk7 Ci0JCWNvbXBsZXRlKCZ3ZGV2LT5oaWYuY3RybF9yZWFkeSk7Ci0JCWlmIChjdHJsX3JlZykKLQkJ CWRldl9lcnIod2Rldi0+ZGV2LCAidW5leHBlY3RlZCBJUlEgaGFwcGVuZWQ6ICUwNHgvJTA0eFxu IiwKLQkJCQljdHJsX3JlZywgcGlnZ3liYWNrKTsKLQl9Ci0JcmV0dXJuIGk7Ci19Ci0KLXN0YXRp YyB2b2lkIHR4X2hlbHBlcihzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwgc3RydWN0IGhpZl9tc2cgKmhp ZikKLXsKLQlpbnQgcmV0OwotCXZvaWQgKmRhdGE7Ci0JYm9vbCBpc19lbmNyeXB0ZWQgPSBmYWxz ZTsKLQlzaXplX3QgbGVuID0gbGUxNl90b19jcHUoaGlmLT5sZW4pOwotCi0JV0FSTihsZW4gPCBz aXplb2YoKmhpZiksICJ0cnkgdG8gc2VuZCBjb3JydXB0ZWQgZGF0YSIpOwotCi0JaGlmLT5zZXFu dW0gPSB3ZGV2LT5oaWYudHhfc2VxbnVtOwotCXdkZXYtPmhpZi50eF9zZXFudW0gPSAod2Rldi0+ aGlmLnR4X3NlcW51bSArIDEpICUgKEhJRl9DT1VOVEVSX01BWCArIDEpOwotCi0JZGF0YSA9IGhp ZjsKLQlXQVJOKGxlbiA+IHdkZXYtPmh3X2NhcHMuc2l6ZV9pbnBfY2hfYnVmLAotCSAgICAgIiVz OiByZXF1ZXN0IGV4Y2VlZCBXRnggY2FwYWJpbGl0eTogJXp1ID4gJWRcbiIsIF9fZnVuY19fLAot CSAgICAgbGVuLCB3ZGV2LT5od19jYXBzLnNpemVfaW5wX2NoX2J1Zik7Ci0JbGVuID0gd2Rldi0+ aHdidXNfb3BzLT5hbGlnbl9zaXplKHdkZXYtPmh3YnVzX3ByaXYsIGxlbik7Ci0JcmV0ID0gd2Z4 X2RhdGFfd3JpdGUod2RldiwgZGF0YSwgbGVuKTsKLQlpZiAocmV0KQotCQlnb3RvIGVuZDsKLQot CXdkZXYtPmhpZi50eF9idWZmZXJzX3VzZWQrKzsKLQlfdHJhY2VfaGlmX3NlbmQoaGlmLCB3ZGV2 LT5oaWYudHhfYnVmZmVyc191c2VkKTsKLWVuZDoKLQlpZiAoaXNfZW5jcnlwdGVkKQotCQlrZnJl ZShkYXRhKTsKLX0KLQotc3RhdGljIGludCBiaF93b3JrX3R4KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2 LCBpbnQgbWF4X21zZykKLXsKLQlzdHJ1Y3QgaGlmX21zZyAqaGlmOwotCWludCBpOwotCi0JZm9y IChpID0gMDsgaSA8IG1heF9tc2c7IGkrKykgewotCQloaWYgPSBOVUxMOwotCQlpZiAod2Rldi0+ aGlmLnR4X2J1ZmZlcnNfdXNlZCA8IHdkZXYtPmh3X2NhcHMubnVtX2lucF9jaF9idWZzKSB7Ci0J CQlpZiAodHJ5X3dhaXRfZm9yX2NvbXBsZXRpb24oJndkZXYtPmhpZl9jbWQucmVhZHkpKSB7Ci0J CQkJV0FSTighbXV0ZXhfaXNfbG9ja2VkKCZ3ZGV2LT5oaWZfY21kLmxvY2spLCAiZGF0YSBsb2Nr aW5nIGVycm9yIik7Ci0JCQkJaGlmID0gd2Rldi0+aGlmX2NtZC5idWZfc2VuZDsKLQkJCX0gZWxz ZSB7Ci0JCQkJaGlmID0gd2Z4X3R4X3F1ZXVlc19nZXQod2Rldik7Ci0JCQl9Ci0JCX0KLQkJaWYg KCFoaWYpCi0JCQlyZXR1cm4gaTsKLQkJdHhfaGVscGVyKHdkZXYsIGhpZik7Ci0JfQotCXJldHVy biBpOwotfQotCi0vKiBJbiBTRElPIG1vZGUsIGl0IGlzIG5lY2Vzc2FyeSB0byBtYWtlIGFuIGFj Y2VzcyB0byBhIHJlZ2lzdGVyIHRvIGFja25vd2xlZGdlCi0gKiBsYXN0IHJlY2VpdmVkIG1lc3Nh Z2UuIEl0IGNvdWxkIGJlIHBvc3NpYmxlIHRvIHJlc3RyaWN0IHRoaXMgYWNrbm93bGVkZ2UgdG8K LSAqIFNESU8gbW9kZSBhbmQgb25seSBpZiBsYXN0IG9wZXJhdGlvbiB3YXMgcnguCi0gKi8KLXN0 YXRpYyB2b2lkIGFja19zZGlvX2RhdGEoc3RydWN0IHdmeF9kZXYgKndkZXYpCi17Ci0JdTMyIGNm Z19yZWc7Ci0KLQljb25maWdfcmVnX3JlYWQod2RldiwgJmNmZ19yZWcpOwotCWlmIChjZmdfcmVn ICYgMHhGRikgewotCQlkZXZfd2Fybih3ZGV2LT5kZXYsICJjaGlwIHJlcG9ydHMgZXJyb3JzOiAl MDJ4XG4iLAotCQkJIGNmZ19yZWcgJiAweEZGKTsKLQkJY29uZmlnX3JlZ193cml0ZV9iaXRzKHdk ZXYsIDB4RkYsIDB4MDApOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYmhfd29yayhzdHJ1Y3Qgd29y a19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IHdmeF9kZXYgKndkZXYgPSBjb250YWluZXJfb2Yo d29yaywgc3RydWN0IHdmeF9kZXYsIGhpZi5iaCk7Ci0JaW50IHN0YXRzX3JlcSA9IDAsIHN0YXRz X2NuZiA9IDAsIHN0YXRzX2luZCA9IDA7Ci0JYm9vbCByZWxlYXNlX2NoaXAgPSBmYWxzZSwgbGFz dF9vcF9pc19yeCA9IGZhbHNlOwotCWludCBudW1fdHgsIG51bV9yeDsKLQotCWRldmljZV93YWtl dXAod2Rldik7Ci0JZG8gewotCQludW1fdHggPSBiaF93b3JrX3R4KHdkZXYsIDMyKTsKLQkJc3Rh dHNfcmVxICs9IG51bV90eDsKLQkJaWYgKG51bV90eCkKLQkJCWxhc3Rfb3BfaXNfcnggPSBmYWxz ZTsKLQkJbnVtX3J4ID0gYmhfd29ya19yeCh3ZGV2LCAzMiwgJnN0YXRzX2NuZik7Ci0JCXN0YXRz X2luZCArPSBudW1fcng7Ci0JCWlmIChudW1fcngpCi0JCQlsYXN0X29wX2lzX3J4ID0gdHJ1ZTsK LQl9IHdoaWxlIChudW1fcnggfHwgbnVtX3R4KTsKLQlzdGF0c19pbmQgLT0gc3RhdHNfY25mOwot Ci0JaWYgKGxhc3Rfb3BfaXNfcngpCi0JCWFja19zZGlvX2RhdGEod2Rldik7Ci0JaWYgKCF3ZGV2 LT5oaWYudHhfYnVmZmVyc191c2VkICYmICF3b3JrX3BlbmRpbmcod29yaykpIHsKLQkJZGV2aWNl X3JlbGVhc2Uod2Rldik7Ci0JCXJlbGVhc2VfY2hpcCA9IHRydWU7Ci0JfQotCV90cmFjZV9iaF9z dGF0cyhzdGF0c19pbmQsIHN0YXRzX3JlcSwgc3RhdHNfY25mLAotCQkJd2Rldi0+aGlmLnR4X2J1 ZmZlcnNfdXNlZCwgcmVsZWFzZV9jaGlwKTsKLX0KLQotLyoKLSAqIEFuIElSUSBmcm9tIGNoaXAg ZGlkIG9jY3VyCi0gKi8KLXZvaWQgd2Z4X2JoX3JlcXVlc3Rfcngoc3RydWN0IHdmeF9kZXYgKndk ZXYpCi17Ci0JdTMyIGN1ciwgcHJldjsKLQotCWNvbnRyb2xfcmVnX3JlYWQod2RldiwgJmN1cik7 Ci0JcHJldiA9IGF0b21pY194Y2hnKCZ3ZGV2LT5oaWYuY3RybF9yZWcsIGN1cik7Ci0JY29tcGxl dGUoJndkZXYtPmhpZi5jdHJsX3JlYWR5KTsKLQlxdWV1ZV93b3JrKHN5c3RlbV9oaWdocHJpX3dx LCAmd2Rldi0+aGlmLmJoKTsKLQotCWlmICghKGN1ciAmIENUUkxfTkVYVF9MRU5fTUFTSykpCi0J CWRldl9lcnIod2Rldi0+ZGV2LCAidW5leHBlY3RlZCBjb250cm9sIHJlZ2lzdGVyIHZhbHVlOiBs ZW5ndGggZmllbGQgaXMgMDogJTA0eFxuIiwKLQkJCWN1cik7Ci0JaWYgKHByZXYgIT0gMCkKLQkJ ZGV2X2Vycih3ZGV2LT5kZXYsICJyZWNlaXZlZCBJUlEgYnV0IHByZXZpb3VzIGRhdGEgd2FzIG5v dCAoeWV0KSByZWFkOiAlMDR4LyUwNHhcbiIsCi0JCQlwcmV2LCBjdXIpOwotfQotCi0vKgotICog RHJpdmVyIHdhbnQgdG8gc2VuZCBkYXRhCi0gKi8KLXZvaWQgd2Z4X2JoX3JlcXVlc3RfdHgoc3Ry dWN0IHdmeF9kZXYgKndkZXYpCi17Ci0JcXVldWVfd29yayhzeXN0ZW1faGlnaHByaV93cSwgJndk ZXYtPmhpZi5iaCk7Ci19Ci0KLS8qCi0gKiBJZiBJUlEgaXMgbm90IGF2YWlsYWJsZSwgdGhpcyBm dW5jdGlvbiBhbGxvdyB0byBtYW51YWxseSBwb2xsIHRoZSBjb250cm9sCi0gKiByZWdpc3RlciBh bmQgc2ltdWxhdGUgYW4gSVJRIGFoZW4gYW4gZXZlbnQgaGFwcGVuZWQuCi0gKgotICogTm90ZSB0 aGF0IHRoZSBkZXZpY2UgaGFzIGEgYnVnOiBJZiBhbiBJUlEgcmFpc2Ugd2hpbGUgaG9zdCByZWFk IGNvbnRyb2wKLSAqIHJlZ2lzdGVyLCB0aGUgSVJRIGlzIGxvc3QuIFNvLCB1c2UgdGhpcyBmdW5j dGlvbiBjYXJlZnVsbHkgKG9ubHkgZHVpbmcKLSAqIGRldmljZSBpbml0aWFsaXNhdGlvbikuCi0g Ki8KLXZvaWQgd2Z4X2JoX3BvbGxfaXJxKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQotewotCWt0aW1l X3Qgbm93LCBzdGFydDsKLQl1MzIgcmVnOwotCi0JV0FSTighd2Rldi0+cG9sbF9pcnEsICJ1bmV4 cGVjdGVkIElSUSBwb2xsaW5nIGNhbiBtYXNrIElSUSIpOwotCXN0YXJ0ID0ga3RpbWVfZ2V0KCk7 Ci0JZm9yICg7OykgewotCQljb250cm9sX3JlZ19yZWFkKHdkZXYsICZyZWcpOwotCQlub3cgPSBr dGltZV9nZXQoKTsKLQkJaWYgKHJlZyAmIDB4RkZGKQotCQkJYnJlYWs7Ci0JCWlmIChrdGltZV9h ZnRlcihub3csIGt0aW1lX2FkZF9tcyhzdGFydCwgMTAwMCkpKSB7Ci0JCQlkZXZfZXJyKHdkZXYt PmRldiwgInRpbWUgb3V0IHdoaWxlIHBvbGxpbmcgY29udHJvbCByZWdpc3RlclxuIik7Ci0JCQly ZXR1cm47Ci0JCX0KLQkJdWRlbGF5KDIwMCk7Ci0JfQotCXdmeF9iaF9yZXF1ZXN0X3J4KHdkZXYp OwotfQotCi12b2lkIHdmeF9iaF9yZWdpc3RlcihzdHJ1Y3Qgd2Z4X2RldiAqd2RldikKLXsKLQlJ TklUX1dPUksoJndkZXYtPmhpZi5iaCwgYmhfd29yayk7Ci0JaW5pdF9jb21wbGV0aW9uKCZ3ZGV2 LT5oaWYuY3RybF9yZWFkeSk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmd2Rldi0+aGlmLnR4X2J1 ZmZlcnNfZW1wdHkpOwotfQotCi12b2lkIHdmeF9iaF91bnJlZ2lzdGVyKHN0cnVjdCB3ZnhfZGV2 ICp3ZGV2KQotewotCWZsdXNoX3dvcmsoJndkZXYtPmhpZi5iaCk7Ci19CmRpZmYgLS1naXQgYS9k cml2ZXJzL3N0YWdpbmcvd2Z4L2JoLmggYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2JoLmgKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4YzQ5MzI5ZTIyYS4uMDAwMDAwMDAwMDAwCi0tLSBh L2RyaXZlcnMvc3RhZ2luZy93ZngvYmguaAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAK LS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KLS8qCi0gKiBJbnRl cnJ1cHQgYm90dG9tIGhhbGYuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGlj b24gTGFib3JhdG9yaWVzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29u Ci0gKi8KLSNpZm5kZWYgV0ZYX0JIX0gKLSNkZWZpbmUgV0ZYX0JIX0gKLQotI2luY2x1ZGUgPGxp bnV4L2F0b21pYy5oPgotI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLSNpbmNsdWRlIDxsaW51eC93 b3JrcXVldWUuaD4KLQotc3RydWN0IHdmeF9kZXY7Ci0KLXN0cnVjdCB3ZnhfaGlmIHsKLQlzdHJ1 Y3Qgd29ya19zdHJ1Y3QgYmg7Ci0Jc3RydWN0IGNvbXBsZXRpb24gY3RybF9yZWFkeTsKLQl3YWl0 X3F1ZXVlX2hlYWRfdCB0eF9idWZmZXJzX2VtcHR5OwotCWF0b21pY190IGN0cmxfcmVnOwotCWlu dCByeF9zZXFudW07Ci0JaW50IHR4X3NlcW51bTsKLQlpbnQgdHhfYnVmZmVyc191c2VkOwotfTsK LQotdm9pZCB3ZnhfYmhfcmVnaXN0ZXIoc3RydWN0IHdmeF9kZXYgKndkZXYpOwotdm9pZCB3Znhf YmhfdW5yZWdpc3RlcihzdHJ1Y3Qgd2Z4X2RldiAqd2Rldik7Ci12b2lkIHdmeF9iaF9yZXF1ZXN0 X3J4KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KTsKLXZvaWQgd2Z4X2JoX3JlcXVlc3RfdHgoc3RydWN0 IHdmeF9kZXYgKndkZXYpOwotdm9pZCB3ZnhfYmhfcG9sbF9pcnEoc3RydWN0IHdmeF9kZXYgKndk ZXYpOwotCi0jZW5kaWYgLyogV0ZYX0JIX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2lu Zy93ZngvYnVzLmggYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2J1cy5oCmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCBjYTA0YjNkYTYyMDQuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0 YWdpbmcvd2Z4L2J1cy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyogU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwotLyoKLSAqIENvbW1vbiBidXMgYWJz dHJhY3Rpb24gbGF5ZXIuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24g TGFib3JhdG9yaWVzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCi0g Ki8KLSNpZm5kZWYgV0ZYX0JVU19ICi0jZGVmaW5lIFdGWF9CVVNfSAotCi0jaW5jbHVkZSA8bGlu dXgvbW1jL3NkaW9fZnVuYy5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLQotI2RlZmlu ZSBXRlhfUkVHX0NPTkZJRyAgICAgICAgMHgwCi0jZGVmaW5lIFdGWF9SRUdfQ09OVFJPTCAgICAg ICAweDEKLSNkZWZpbmUgV0ZYX1JFR19JTl9PVVRfUVVFVUUgIDB4MgotI2RlZmluZSBXRlhfUkVH X0FIQl9EUE9SVCAgICAgMHgzCi0jZGVmaW5lIFdGWF9SRUdfQkFTRV9BRERSICAgICAweDQKLSNk ZWZpbmUgV0ZYX1JFR19TUkFNX0RQT1JUICAgIDB4NQotI2RlZmluZSBXRlhfUkVHX1NFVF9HRU5f Ul9XICAgMHg2Ci0jZGVmaW5lIFdGWF9SRUdfRlJBTUVfT1VUICAgICAweDcKLQotc3RydWN0IGh3 YnVzX29wcyB7Ci0JaW50ICgqY29weV9mcm9tX2lvKSh2b2lkICpidXNfcHJpdiwgdW5zaWduZWQg aW50IGFkZHIsCi0JCQkgICAgdm9pZCAqZHN0LCBzaXplX3QgY291bnQpOwotCWludCAoKmNvcHlf dG9faW8pKHZvaWQgKmJ1c19wcml2LCB1bnNpZ25lZCBpbnQgYWRkciwKLQkJCSAgY29uc3Qgdm9p ZCAqc3JjLCBzaXplX3QgY291bnQpOwotCWludCAoKmlycV9zdWJzY3JpYmUpKHZvaWQgKmJ1c19w cml2KTsKLQlpbnQgKCppcnFfdW5zdWJzY3JpYmUpKHZvaWQgKmJ1c19wcml2KTsKLQl2b2lkICgq bG9jaykodm9pZCAqYnVzX3ByaXYpOwotCXZvaWQgKCp1bmxvY2spKHZvaWQgKmJ1c19wcml2KTsK LQlzaXplX3QgKCphbGlnbl9zaXplKSh2b2lkICpidXNfcHJpdiwgc2l6ZV90IHNpemUpOwotfTsK LQotZXh0ZXJuIHN0cnVjdCBzZGlvX2RyaXZlciB3Znhfc2Rpb19kcml2ZXI7Ci1leHRlcm4gc3Ry dWN0IHNwaV9kcml2ZXIgd2Z4X3NwaV9kcml2ZXI7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9zdGFnaW5nL3dmeC9idXNfc2Rpby5jIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9idXNfc2Rp by5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDZkN2UxZWJlOWMuLjAwMDAwMDAw MDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2J1c19zZGlvLmMKKysrIC9kZXYvbnVsbApA QCAtMSwyNjkgKzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25s eQotLyoKLSAqIFNESU8gaW50ZXJmYWNlLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIw LCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1F cmljc3NvbgotICovCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgv bW1jL3NkaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9tbWMvc2Rpb19mdW5jLmg+Ci0jaW5jbHVkZSA8 bGludXgvbW1jL2NhcmQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRl IDxsaW51eC9vZl9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLQotI2luY2x1ZGUgImJ1 cy5oIgotI2luY2x1ZGUgIndmeC5oIgotI2luY2x1ZGUgImh3aW8uaCIKLSNpbmNsdWRlICJtYWlu LmgiCi0jaW5jbHVkZSAiYmguaCIKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB3ZnhfcGxhdGZvcm1f ZGF0YSB3Znhfc2Rpb19wZGF0YSA9IHsKLQkuZmlsZV9mdyA9ICJ3Zm1fd2YyMDAiLAotCS5maWxl X3BkcyA9ICJ3ZjIwMC5wZHMiLAotfTsKLQotc3RydWN0IHdmeF9zZGlvX3ByaXYgewotCXN0cnVj dCBzZGlvX2Z1bmMgKmZ1bmM7Ci0Jc3RydWN0IHdmeF9kZXYgKmNvcmU7Ci0JdTggYnVmX2lkX3R4 OwotCXU4IGJ1Zl9pZF9yeDsKLQlpbnQgb2ZfaXJxOwotfTsKLQotc3RhdGljIGludCB3Znhfc2Rp b19jb3B5X2Zyb21faW8odm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IHJlZ19pZCwKLQkJCQkgdm9p ZCAqZHN0LCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHdmeF9zZGlvX3ByaXYgKmJ1cyA9IHBy aXY7Ci0JdW5zaWduZWQgaW50IHNkaW9fYWRkciA9IHJlZ19pZCA8PCAyOwotCWludCByZXQ7Ci0K LQlXQVJOKHJlZ19pZCA+IDcsICJjaGlwIG9ubHkgaGFzIDcgcmVnaXN0ZXJzIik7Ci0JV0FSTigo KHVpbnRwdHJfdClkc3QpICYgMywgInVuYWxpZ25lZCBidWZmZXIgc2l6ZSIpOwotCVdBUk4oY291 bnQgJiAzLCAidW5hbGlnbmVkIGJ1ZmZlciBhZGRyZXNzIik7Ci0KLQkvKiBVc2UgcXVldWUgbW9k ZSBidWZmZXJzICovCi0JaWYgKHJlZ19pZCA9PSBXRlhfUkVHX0lOX09VVF9RVUVVRSkKLQkJc2Rp b19hZGRyIHw9IChidXMtPmJ1Zl9pZF9yeCArIDEpIDw8IDc7Ci0JcmV0ID0gc2Rpb19tZW1jcHlf ZnJvbWlvKGJ1cy0+ZnVuYywgZHN0LCBzZGlvX2FkZHIsIGNvdW50KTsKLQlpZiAoIXJldCAmJiBy ZWdfaWQgPT0gV0ZYX1JFR19JTl9PVVRfUVVFVUUpCi0JCWJ1cy0+YnVmX2lkX3J4ID0gKGJ1cy0+ YnVmX2lkX3J4ICsgMSkgJSA0OwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCB3Znhf c2Rpb19jb3B5X3RvX2lvKHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCByZWdfaWQsCi0JCQkgICAg ICAgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHdmeF9zZGlvX3By aXYgKmJ1cyA9IHByaXY7Ci0JdW5zaWduZWQgaW50IHNkaW9fYWRkciA9IHJlZ19pZCA8PCAyOwot CWludCByZXQ7Ci0KLQlXQVJOKHJlZ19pZCA+IDcsICJjaGlwIG9ubHkgaGFzIDcgcmVnaXN0ZXJz Iik7Ci0JV0FSTigoKHVpbnRwdHJfdClzcmMpICYgMywgInVuYWxpZ25lZCBidWZmZXIgc2l6ZSIp OwotCVdBUk4oY291bnQgJiAzLCAidW5hbGlnbmVkIGJ1ZmZlciBhZGRyZXNzIik7Ci0KLQkvKiBV c2UgcXVldWUgbW9kZSBidWZmZXJzICovCi0JaWYgKHJlZ19pZCA9PSBXRlhfUkVHX0lOX09VVF9R VUVVRSkKLQkJc2Rpb19hZGRyIHw9IGJ1cy0+YnVmX2lkX3R4IDw8IDc7Ci0JLy8gRklYTUU6IGRp c2NhcmRzICdjb25zdCcgcXVhbGlmaWVyIGZvciBzcmMKLQlyZXQgPSBzZGlvX21lbWNweV90b2lv KGJ1cy0+ZnVuYywgc2Rpb19hZGRyLCAodm9pZCAqKXNyYywgY291bnQpOwotCWlmICghcmV0ICYm IHJlZ19pZCA9PSBXRlhfUkVHX0lOX09VVF9RVUVVRSkKLQkJYnVzLT5idWZfaWRfdHggPSAoYnVz LT5idWZfaWRfdHggKyAxKSAlIDMyOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQg d2Z4X3NkaW9fbG9jayh2b2lkICpwcml2KQotewotCXN0cnVjdCB3Znhfc2Rpb19wcml2ICpidXMg PSBwcml2OwotCi0Jc2Rpb19jbGFpbV9ob3N0KGJ1cy0+ZnVuYyk7Ci19Ci0KLXN0YXRpYyB2b2lk IHdmeF9zZGlvX3VubG9jayh2b2lkICpwcml2KQotewotCXN0cnVjdCB3Znhfc2Rpb19wcml2ICpi dXMgPSBwcml2OwotCi0Jc2Rpb19yZWxlYXNlX2hvc3QoYnVzLT5mdW5jKTsKLX0KLQotc3RhdGlj IHZvaWQgd2Z4X3NkaW9faXJxX2hhbmRsZXIoc3RydWN0IHNkaW9fZnVuYyAqZnVuYykKLXsKLQlz dHJ1Y3Qgd2Z4X3NkaW9fcHJpdiAqYnVzID0gc2Rpb19nZXRfZHJ2ZGF0YShmdW5jKTsKLQotCXdm eF9iaF9yZXF1ZXN0X3J4KGJ1cy0+Y29yZSk7Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCB3Znhf c2Rpb19pcnFfaGFuZGxlcl9leHQoaW50IGlycSwgdm9pZCAqcHJpdikKLXsKLQlzdHJ1Y3Qgd2Z4 X3NkaW9fcHJpdiAqYnVzID0gcHJpdjsKLQotCXNkaW9fY2xhaW1faG9zdChidXMtPmZ1bmMpOwot CXdmeF9iaF9yZXF1ZXN0X3J4KGJ1cy0+Y29yZSk7Ci0Jc2Rpb19yZWxlYXNlX2hvc3QoYnVzLT5m dW5jKTsKLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBpbnQgd2Z4X3NkaW9faXJx X3N1YnNjcmliZSh2b2lkICpwcml2KQotewotCXN0cnVjdCB3Znhfc2Rpb19wcml2ICpidXMgPSBw cml2OwotCXUzMiBmbGFnczsKLQlpbnQgcmV0OwotCXU4IGNjY3I7Ci0KLQlpZiAoIWJ1cy0+b2Zf aXJxKSB7Ci0JCXNkaW9fY2xhaW1faG9zdChidXMtPmZ1bmMpOwotCQlyZXQgPSBzZGlvX2NsYWlt X2lycShidXMtPmZ1bmMsIHdmeF9zZGlvX2lycV9oYW5kbGVyKTsKLQkJc2Rpb19yZWxlYXNlX2hv c3QoYnVzLT5mdW5jKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlzZGlvX2NsYWltX2hvc3QoYnVz LT5mdW5jKTsKLQljY2NyID0gc2Rpb19mMF9yZWFkYihidXMtPmZ1bmMsIFNESU9fQ0NDUl9JRU54 LCBOVUxMKTsKLQljY2NyIHw9IEJJVCgwKTsKLQljY2NyIHw9IEJJVChidXMtPmZ1bmMtPm51bSk7 Ci0Jc2Rpb19mMF93cml0ZWIoYnVzLT5mdW5jLCBjY2NyLCBTRElPX0NDQ1JfSUVOeCwgTlVMTCk7 Ci0Jc2Rpb19yZWxlYXNlX2hvc3QoYnVzLT5mdW5jKTsKLQlmbGFncyA9IGlycV9nZXRfdHJpZ2dl cl90eXBlKGJ1cy0+b2ZfaXJxKTsKLQlpZiAoIWZsYWdzKQotCQlmbGFncyA9IElSUUZfVFJJR0dF Ul9ISUdIOwotCWZsYWdzIHw9IElSUUZfT05FU0hPVDsKLQlyZXR1cm4gZGV2bV9yZXF1ZXN0X3Ro cmVhZGVkX2lycSgmYnVzLT5mdW5jLT5kZXYsIGJ1cy0+b2ZfaXJxLCBOVUxMLAotCQkJCQkgd2Z4 X3NkaW9faXJxX2hhbmRsZXJfZXh0LCBmbGFncywKLQkJCQkJICJ3ZngiLCBidXMpOwotfQotCi1z dGF0aWMgaW50IHdmeF9zZGlvX2lycV91bnN1YnNjcmliZSh2b2lkICpwcml2KQotewotCXN0cnVj dCB3Znhfc2Rpb19wcml2ICpidXMgPSBwcml2OwotCWludCByZXQ7Ci0KLQlpZiAoYnVzLT5vZl9p cnEpCi0JCWRldm1fZnJlZV9pcnEoJmJ1cy0+ZnVuYy0+ZGV2LCBidXMtPm9mX2lycSwgYnVzKTsK LQlzZGlvX2NsYWltX2hvc3QoYnVzLT5mdW5jKTsKLQlyZXQgPSBzZGlvX3JlbGVhc2VfaXJxKGJ1 cy0+ZnVuYyk7Ci0Jc2Rpb19yZWxlYXNlX2hvc3QoYnVzLT5mdW5jKTsKLQlyZXR1cm4gcmV0Owot fQotCi1zdGF0aWMgc2l6ZV90IHdmeF9zZGlvX2FsaWduX3NpemUodm9pZCAqcHJpdiwgc2l6ZV90 IHNpemUpCi17Ci0Jc3RydWN0IHdmeF9zZGlvX3ByaXYgKmJ1cyA9IHByaXY7Ci0KLQlyZXR1cm4g c2Rpb19hbGlnbl9zaXplKGJ1cy0+ZnVuYywgc2l6ZSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1 Y3QgaHdidXNfb3BzIHdmeF9zZGlvX2h3YnVzX29wcyA9IHsKLQkuY29weV9mcm9tX2lvID0gd2Z4 X3NkaW9fY29weV9mcm9tX2lvLAotCS5jb3B5X3RvX2lvID0gd2Z4X3NkaW9fY29weV90b19pbywK LQkuaXJxX3N1YnNjcmliZSA9IHdmeF9zZGlvX2lycV9zdWJzY3JpYmUsCi0JLmlycV91bnN1YnNj cmliZSA9IHdmeF9zZGlvX2lycV91bnN1YnNjcmliZSwKLQkubG9jawkJCT0gd2Z4X3NkaW9fbG9j aywKLQkudW5sb2NrCQkJPSB3Znhfc2Rpb191bmxvY2ssCi0JLmFsaWduX3NpemUJCT0gd2Z4X3Nk aW9fYWxpZ25fc2l6ZSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHdm eF9zZGlvX29mX21hdGNoW10gPSB7Ci0JeyAuY29tcGF0aWJsZSA9ICJzaWxhYnMsd2Z4LXNkaW8i IH0sCi0JeyAuY29tcGF0aWJsZSA9ICJzaWxhYnMsd2YyMDAiIH0sCi0JeyB9LAotfTsKLU1PRFVM RV9ERVZJQ0VfVEFCTEUob2YsIHdmeF9zZGlvX29mX21hdGNoKTsKLQotc3RhdGljIGludCB3Znhf c2Rpb19wcm9iZShzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jLAotCQkJICBjb25zdCBzdHJ1Y3Qgc2Rp b19kZXZpY2VfaWQgKmlkKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBmdW5jLT5kZXYu b2Zfbm9kZTsKLQlzdHJ1Y3Qgd2Z4X3NkaW9fcHJpdiAqYnVzOwotCWludCByZXQ7Ci0KLQlpZiAo ZnVuYy0+bnVtICE9IDEpIHsKLQkJZGV2X2VycigmZnVuYy0+ZGV2LCAiU0RJTyBmdW5jdGlvbiBu dW1iZXIgaXMgJWQgd2hpbGUgaXQgc2hvdWxkIGFsd2F5cyBiZSAxICh1bnN1cHBvcnRlZCBjaGlw PylcbiIsCi0JCQlmdW5jLT5udW0pOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlidXMgPSBk ZXZtX2t6YWxsb2MoJmZ1bmMtPmRldiwgc2l6ZW9mKCpidXMpLCBHRlBfS0VSTkVMKTsKLQlpZiAo IWJ1cykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpZiAobnApIHsKLQkJaWYgKCFvZl9tYXRjaF9u b2RlKHdmeF9zZGlvX29mX21hdGNoLCBucCkpIHsKLQkJCWRldl93YXJuKCZmdW5jLT5kZXYsICJu byBjb21wYXRpYmxlIGRldmljZSBmb3VuZCBpbiBEVFxuIik7Ci0JCQlyZXR1cm4gLUVOT0RFVjsK LQkJfQotCQlidXMtPm9mX2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5wLCAwKTsKLQl9IGVs c2UgewotCQlkZXZfd2FybigmZnVuYy0+ZGV2LAotCQkJICJkZXZpY2UgaXMgbm90IGRlY2xhcmVk IGluIERULCBmZWF0dXJlcyB3aWxsIGJlIGxpbWl0ZWRcbiIpOwotCQkvLyBGSVhNRTogaWdub3Jl IFZJRC9QSUQgYW5kIG9ubHkgcmVseSBvbiBkZXZpY2UgdHJlZQotCQkvLyByZXR1cm4gLUVOT0RF VjsKLQl9Ci0KLQlidXMtPmZ1bmMgPSBmdW5jOwotCXNkaW9fc2V0X2RydmRhdGEoZnVuYywgYnVz KTsKLQlmdW5jLT5jYXJkLT5xdWlya3MgfD0gTU1DX1FVSVJLX0xFTklFTlRfRk4wIHwKLQkJCSAg ICAgIE1NQ19RVUlSS19CTEtTWl9GT1JfQllURV9NT0RFIHwKLQkJCSAgICAgIE1NQ19RVUlSS19C Uk9LRU5fQllURV9NT0RFXzUxMjsKLQotCXNkaW9fY2xhaW1faG9zdChmdW5jKTsKLQlyZXQgPSBz ZGlvX2VuYWJsZV9mdW5jKGZ1bmMpOwotCS8vIEJsb2NrIG9mIDY0IGJ5dGVzIGlzIG1vcmUgZWZm aWNpZW50IHRoYW4gNTEyQiBmb3IgZnJhbWUgc2l6ZXMgPCA0awotCXNkaW9fc2V0X2Jsb2NrX3Np emUoZnVuYywgNjQpOwotCXNkaW9fcmVsZWFzZV9ob3N0KGZ1bmMpOwotCWlmIChyZXQpCi0JCWdv dG8gZXJyMDsKLQotCWJ1cy0+Y29yZSA9IHdmeF9pbml0X2NvbW1vbigmZnVuYy0+ZGV2LCAmd2Z4 X3NkaW9fcGRhdGEsCi0JCQkJICAgICZ3Znhfc2Rpb19od2J1c19vcHMsIGJ1cyk7Ci0JaWYgKCFi dXMtPmNvcmUpIHsKLQkJcmV0ID0gLUVJTzsKLQkJZ290byBlcnIxOwotCX0KLQotCXJldCA9IHdm eF9wcm9iZShidXMtPmNvcmUpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyMTsKLQotCXJldHVybiAw OwotCi1lcnIxOgotCXNkaW9fY2xhaW1faG9zdChmdW5jKTsKLQlzZGlvX2Rpc2FibGVfZnVuYyhm dW5jKTsKLQlzZGlvX3JlbGVhc2VfaG9zdChmdW5jKTsKLWVycjA6Ci0JcmV0dXJuIHJldDsKLX0K LQotc3RhdGljIHZvaWQgd2Z4X3NkaW9fcmVtb3ZlKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMpCi17 Ci0Jc3RydWN0IHdmeF9zZGlvX3ByaXYgKmJ1cyA9IHNkaW9fZ2V0X2RydmRhdGEoZnVuYyk7Ci0K LQl3ZnhfcmVsZWFzZShidXMtPmNvcmUpOwotCXNkaW9fY2xhaW1faG9zdChmdW5jKTsKLQlzZGlv X2Rpc2FibGVfZnVuYyhmdW5jKTsKLQlzZGlvX3JlbGVhc2VfaG9zdChmdW5jKTsKLX0KLQotI2Rl ZmluZSBTRElPX1ZFTkRPUl9JRF9TSUxBQlMgICAgICAgIDB4MDAwMAotI2RlZmluZSBTRElPX0RF VklDRV9JRF9TSUxBQlNfV0YyMDAgIDB4MTAwMAotc3RhdGljIGNvbnN0IHN0cnVjdCBzZGlvX2Rl dmljZV9pZCB3Znhfc2Rpb19pZHNbXSA9IHsKLQl7IFNESU9fREVWSUNFKFNESU9fVkVORE9SX0lE X1NJTEFCUywgU0RJT19ERVZJQ0VfSURfU0lMQUJTX1dGMjAwKSB9LAotCS8vIEZJWE1FOiBpZ25v cmUgVklEL1BJRCBhbmQgb25seSByZWx5IG9uIGRldmljZSB0cmVlCi0JLy8geyBTRElPX0RFVklD RShTRElPX0FOWV9JRCwgU0RJT19BTllfSUQpIH0sCi0JeyB9LAotfTsKLU1PRFVMRV9ERVZJQ0Vf VEFCTEUoc2Rpbywgd2Z4X3NkaW9faWRzKTsKLQotc3RydWN0IHNkaW9fZHJpdmVyIHdmeF9zZGlv X2RyaXZlciA9IHsKLQkubmFtZSA9ICJ3Zngtc2RpbyIsCi0JLmlkX3RhYmxlID0gd2Z4X3NkaW9f aWRzLAotCS5wcm9iZSA9IHdmeF9zZGlvX3Byb2JlLAotCS5yZW1vdmUgPSB3Znhfc2Rpb19yZW1v dmUsCi0JLmRydiA9IHsKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JCS5vZl9tYXRjaF90YWJs ZSA9IHdmeF9zZGlvX29mX21hdGNoLAotCX0KLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdp bmcvd2Z4L2J1c19zcGkuYyBiL2RyaXZlcnMvc3RhZ2luZy93ZngvYnVzX3NwaS5jCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTkxMjVkMWEzMGQuLjAwMDAwMDAwMDAwMAotLS0gYS9k cml2ZXJzL3N0YWdpbmcvd2Z4L2J1c19zcGkuYworKysgL2Rldi9udWxsCkBAIC0xLDI3MSArMCww IEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Ci0vKgotICogU1BJ IGludGVyZmFjZS4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJv cmF0b3JpZXMsIEluYy4KLSAqIENvcHlyaWdodCAoYykgMjAxMSwgU2FncmFkIEluYy4KLSAqIENv cHlyaWdodCAoYykgMjAxMCwgU1QtRXJpY3Nzb24KLSAqLwotI2luY2x1ZGUgPGxpbnV4L21vZHVs ZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby9jb25z dW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRl cnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9vZi5oPgot Ci0jaW5jbHVkZSAiYnVzLmgiCi0jaW5jbHVkZSAid2Z4LmgiCi0jaW5jbHVkZSAiaHdpby5oIgot I2luY2x1ZGUgIm1haW4uaCIKLSNpbmNsdWRlICJiaC5oIgotCi0jZGVmaW5lIFNFVF9XUklURSAw eDdGRkYgICAgICAgIC8qIHVzYWdlOiBhbmQgb3BlcmF0aW9uICovCi0jZGVmaW5lIFNFVF9SRUFE IDB4ODAwMCAgICAgICAgIC8qIHVzYWdlOiBvciBvcGVyYXRpb24gKi8KLQotI2RlZmluZSBXRlhf UkVTRVRfSU5WRVJURUQgMQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRh IHdmeF9zcGlfcGRhdGEgPSB7Ci0JLmZpbGVfZncgPSAid2ZtX3dmMjAwIiwKLQkuZmlsZV9wZHMg PSAid2YyMDAucGRzIiwKLQkudXNlX3Jpc2luZ19jbGsgPSB0cnVlLAotfTsKLQotc3RydWN0IHdm eF9zcGlfcHJpdiB7Ci0Jc3RydWN0IHNwaV9kZXZpY2UgKmZ1bmM7Ci0Jc3RydWN0IHdmeF9kZXYg KmNvcmU7Ci0Jc3RydWN0IGdwaW9fZGVzYyAqZ3Bpb19yZXNldDsKLQlib29sIG5lZWRfc3dhYjsK LX07Ci0KLS8qCi0gKiBXRnggY2hpcCByZWFkIGRhdGEgMTZiaXRzIGF0IHRpbWUgYW5kIHBsYWNl IHRoZW0gZGlyZWN0bHkgaW50byAobGl0dGxlCi0gKiBlbmRpYW4pIENQVSByZWdpc3Rlci4gU28s IGNoaXAgZXhwZWN0IGJ5dGUgb3JkZXIgbGlrZSAiQjEgQjAgQjMgQjIiICh3aGlsZQotICogTEUg aXMgIkIwIEIxIEIyIEIzIiBhbmQgQkUgaXMgIkIzIEIyIEIxIEIwIikKLSAqCi0gKiBBIGxpdHRs ZSBlbmRpYW4gaG9zdCB3aXRoIGJpdHNfcGVyX3dvcmQgPT0gMTYgc2hvdWxkIGRvIHRoZSByaWdo dCBqb2IKLSAqIG5hdGl2ZWx5LiBUaGUgY29kZSBiZWxvdyB0byBzdXBwb3J0IGJpZyBlbmRpYW4g aG9zdCBhbmQgY29tbW9ubHkgdXNlZCBTUEkKLSAqIDhiaXRzLgotICovCi1zdGF0aWMgaW50IHdm eF9zcGlfY29weV9mcm9tX2lvKHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBhZGRyLAotCQkJCXZv aWQgKmRzdCwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCB3Znhfc3BpX3ByaXYgKmJ1cyA9IHBy aXY7Ci0JdTE2IHJlZ2FkZHIgPSAoYWRkciA8PCAxMikgfCAoY291bnQgLyAyKSB8IFNFVF9SRUFE OwotCXN0cnVjdCBzcGlfbWVzc2FnZSAgICAgIG07Ci0Jc3RydWN0IHNwaV90cmFuc2ZlciAgICAg dF9hZGRyID0gewotCQkudHhfYnVmICAgICAgICAgPSAmcmVnYWRkciwKLQkJLmxlbiAgICAgICAg ICAgID0gc2l6ZW9mKHJlZ2FkZHIpLAotCX07Ci0Jc3RydWN0IHNwaV90cmFuc2ZlciAgICAgdF9t c2cgPSB7Ci0JCS5yeF9idWYgICAgICAgICA9IGRzdCwKLQkJLmxlbiAgICAgICAgICAgID0gY291 bnQsCi0JfTsKLQl1MTYgKmRzdDE2ID0gZHN0OwotCWludCByZXQsIGk7Ci0KLQlXQVJOKGNvdW50 ICUgMiwgImJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAyIik7Ci0KLQljcHVfdG9f bGUxNnMoJnJlZ2FkZHIpOwotCWlmIChidXMtPm5lZWRfc3dhYikKLQkJc3dhYjE2cygmcmVnYWRk cik7Ci0KLQlzcGlfbWVzc2FnZV9pbml0KCZtKTsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdF9h ZGRyLCAmbSk7Ci0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRfbXNnLCAmbSk7Ci0JcmV0ID0gc3Bp X3N5bmMoYnVzLT5mdW5jLCAmbSk7Ci0KLQlpZiAoYnVzLT5uZWVkX3N3YWIgJiYgYWRkciA9PSBX RlhfUkVHX0NPTkZJRykKLQkJZm9yIChpID0gMDsgaSA8IGNvdW50IC8gMjsgaSsrKQotCQkJc3dh YjE2cygmZHN0MTZbaV0pOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgd2Z4X3NwaV9j b3B5X3RvX2lvKHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBhZGRyLAotCQkJICAgICAgY29uc3Qg dm9pZCAqc3JjLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHdmeF9zcGlfcHJpdiAqYnVzID0g cHJpdjsKLQl1MTYgcmVnYWRkciA9IChhZGRyIDw8IDEyKSB8IChjb3VudCAvIDIpOwotCS8vIEZJ WE1FOiB1c2UgYSBib3VuY2UgYnVmZmVyCi0JdTE2ICpzcmMxNiA9ICh2b2lkICopc3JjOwotCWlu dCByZXQsIGk7Ci0Jc3RydWN0IHNwaV9tZXNzYWdlICAgICAgbTsKLQlzdHJ1Y3Qgc3BpX3RyYW5z ZmVyICAgICB0X2FkZHIgPSB7Ci0JCS50eF9idWYgICAgICAgICA9ICZyZWdhZGRyLAotCQkubGVu ICAgICAgICAgICAgPSBzaXplb2YocmVnYWRkciksCi0JfTsKLQlzdHJ1Y3Qgc3BpX3RyYW5zZmVy ICAgICB0X21zZyA9IHsKLQkJLnR4X2J1ZiAgICAgICAgID0gc3JjLAotCQkubGVuICAgICAgICAg ICAgPSBjb3VudCwKLQl9OwotCi0JV0FSTihjb3VudCAlIDIsICJidWZmZXIgc2l6ZSBtdXN0IGJl IGEgbXVsdGlwbGUgb2YgMiIpOwotCVdBUk4ocmVnYWRkciAmIFNFVF9SRUFELCAiYmFkIGFkZHIg b3Igc2l6ZSBvdmVyZmxvdyIpOwotCi0JY3B1X3RvX2xlMTZzKCZyZWdhZGRyKTsKLQotCS8vIFJl Z2lzdGVyIGFkZHJlc3MgYW5kIENPTkZJRyBjb250ZW50IGFsd2F5cyB1c2UgMTZiaXQgYmlnIGVu ZGlhbgotCS8vICgiQkFEQyIgb3JkZXIpCi0JaWYgKGJ1cy0+bmVlZF9zd2FiKQotCQlzd2FiMTZz KCZyZWdhZGRyKTsKLQlpZiAoYnVzLT5uZWVkX3N3YWIgJiYgYWRkciA9PSBXRlhfUkVHX0NPTkZJ RykKLQkJZm9yIChpID0gMDsgaSA8IGNvdW50IC8gMjsgaSsrKQotCQkJc3dhYjE2cygmc3JjMTZb aV0pOwotCi0Jc3BpX21lc3NhZ2VfaW5pdCgmbSk7Ci0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRf YWRkciwgJm0pOwotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0X21zZywgJm0pOwotCXJldCA9IHNw aV9zeW5jKGJ1cy0+ZnVuYywgJm0pOwotCi0JaWYgKGJ1cy0+bmVlZF9zd2FiICYmIGFkZHIgPT0g V0ZYX1JFR19DT05GSUcpCi0JCWZvciAoaSA9IDA7IGkgPCBjb3VudCAvIDI7IGkrKykKLQkJCXN3 YWIxNnMoJnNyYzE2W2ldKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCB3Znhfc3Bp X2xvY2sodm9pZCAqcHJpdikKLXsKLX0KLQotc3RhdGljIHZvaWQgd2Z4X3NwaV91bmxvY2sodm9p ZCAqcHJpdikKLXsKLX0KLQotc3RhdGljIGlycXJldHVybl90IHdmeF9zcGlfaXJxX2hhbmRsZXIo aW50IGlycSwgdm9pZCAqcHJpdikKLXsKLQlzdHJ1Y3Qgd2Z4X3NwaV9wcml2ICpidXMgPSBwcml2 OwotCi0Jd2Z4X2JoX3JlcXVlc3RfcngoYnVzLT5jb3JlKTsKLQlyZXR1cm4gSVJRX0hBTkRMRUQ7 Ci19Ci0KLXN0YXRpYyBpbnQgd2Z4X3NwaV9pcnFfc3Vic2NyaWJlKHZvaWQgKnByaXYpCi17Ci0J c3RydWN0IHdmeF9zcGlfcHJpdiAqYnVzID0gcHJpdjsKLQl1MzIgZmxhZ3M7Ci0KLQlmbGFncyA9 IGlycV9nZXRfdHJpZ2dlcl90eXBlKGJ1cy0+ZnVuYy0+aXJxKTsKLQlpZiAoIWZsYWdzKQotCQlm bGFncyA9IElSUUZfVFJJR0dFUl9ISUdIOwotCWZsYWdzIHw9IElSUUZfT05FU0hPVDsKLQlyZXR1 cm4gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycSgmYnVzLT5mdW5jLT5kZXYsIGJ1cy0+ZnVuYy0+ aXJxLCBOVUxMLAotCQkJCQkgd2Z4X3NwaV9pcnFfaGFuZGxlciwgSVJRRl9PTkVTSE9ULAotCQkJ CQkgIndmeCIsIGJ1cyk7Ci19Ci0KLXN0YXRpYyBpbnQgd2Z4X3NwaV9pcnFfdW5zdWJzY3JpYmUo dm9pZCAqcHJpdikKLXsKLQlzdHJ1Y3Qgd2Z4X3NwaV9wcml2ICpidXMgPSBwcml2OwotCi0JZGV2 bV9mcmVlX2lycSgmYnVzLT5mdW5jLT5kZXYsIGJ1cy0+ZnVuYy0+aXJxLCBidXMpOwotCXJldHVy biAwOwotfQotCi1zdGF0aWMgc2l6ZV90IHdmeF9zcGlfYWxpZ25fc2l6ZSh2b2lkICpwcml2LCBz aXplX3Qgc2l6ZSkKLXsKLQkvLyBNb3N0IG9mIFNQSSBjb250cm9sbGVycyBhdm9pZCBETUEgaWYg YnVmZmVyIHNpemUgaXMgbm90IDMyYml0IGFsaWduZWQKLQlyZXR1cm4gQUxJR04oc2l6ZSwgNCk7 Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdidXNfb3BzIHdmeF9zcGlfaHdidXNfb3BzID0g ewotCS5jb3B5X2Zyb21faW8gPSB3Znhfc3BpX2NvcHlfZnJvbV9pbywKLQkuY29weV90b19pbyA9 IHdmeF9zcGlfY29weV90b19pbywKLQkuaXJxX3N1YnNjcmliZSA9IHdmeF9zcGlfaXJxX3N1YnNj cmliZSwKLQkuaXJxX3Vuc3Vic2NyaWJlID0gd2Z4X3NwaV9pcnFfdW5zdWJzY3JpYmUsCi0JLmxv Y2sJCQk9IHdmeF9zcGlfbG9jaywKLQkudW5sb2NrCQkJPSB3Znhfc3BpX3VubG9jaywKLQkuYWxp Z25fc2l6ZQkJPSB3Znhfc3BpX2FsaWduX3NpemUsCi19OwotCi1zdGF0aWMgaW50IHdmeF9zcGlf cHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKmZ1bmMpCi17Ci0Jc3RydWN0IHdmeF9zcGlfcHJpdiAq YnVzOwotCWludCByZXQ7Ci0KLQlpZiAoIWZ1bmMtPmJpdHNfcGVyX3dvcmQpCi0JCWZ1bmMtPmJp dHNfcGVyX3dvcmQgPSAxNjsKLQlyZXQgPSBzcGlfc2V0dXAoZnVuYyk7Ci0JaWYgKHJldCkKLQkJ cmV0dXJuIHJldDsKLQkvLyBUcmFjZSBiZWxvdyBpcyBhbHNvIGRpc3BsYXllZCBieSBzcGlfc2V0 dXAoKSBpZiBjb21waWxlZCB3aXRoIERFQlVHCi0JZGV2X2RiZygmZnVuYy0+ZGV2LCAiU1BJIHBh cmFtczogQ1M9JWQsIG1vZGU9JWQgYml0cy93b3JkPSVkIHNwZWVkPSVkXG4iLAotCQlmdW5jLT5j aGlwX3NlbGVjdCwgZnVuYy0+bW9kZSwgZnVuYy0+Yml0c19wZXJfd29yZCwKLQkJZnVuYy0+bWF4 X3NwZWVkX2h6KTsKLQlpZiAoZnVuYy0+Yml0c19wZXJfd29yZCAhPSAxNiAmJiBmdW5jLT5iaXRz X3Blcl93b3JkICE9IDgpCi0JCWRldl93YXJuKCZmdW5jLT5kZXYsICJ1bnVzdWFsIGJpdHMvd29y ZCB2YWx1ZTogJWRcbiIsCi0JCQkgZnVuYy0+Yml0c19wZXJfd29yZCk7Ci0JaWYgKGZ1bmMtPm1h eF9zcGVlZF9oeiA+IDUwMDAwMDAwKQotCQlkZXZfd2FybigmZnVuYy0+ZGV2LCAiJWRIeiBpcyBh IHZlcnkgaGlnaCBzcGVlZFxuIiwKLQkJCSBmdW5jLT5tYXhfc3BlZWRfaHopOwotCi0JYnVzID0g ZGV2bV9remFsbG9jKCZmdW5jLT5kZXYsIHNpemVvZigqYnVzKSwgR0ZQX0tFUk5FTCk7Ci0JaWYg KCFidXMpCi0JCXJldHVybiAtRU5PTUVNOwotCWJ1cy0+ZnVuYyA9IGZ1bmM7Ci0JaWYgKGZ1bmMt PmJpdHNfcGVyX3dvcmQgPT0gOCB8fCBJU19FTkFCTEVEKENPTkZJR19DUFVfQklHX0VORElBTikp Ci0JCWJ1cy0+bmVlZF9zd2FiID0gdHJ1ZTsKLQlzcGlfc2V0X2RydmRhdGEoZnVuYywgYnVzKTsK LQotCWJ1cy0+Z3Bpb19yZXNldCA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKCZmdW5jLT5kZXYs ICJyZXNldCIsCi0JCQkJCQkgIEdQSU9EX09VVF9MT1cpOwotCWlmIChJU19FUlIoYnVzLT5ncGlv X3Jlc2V0KSkKLQkJcmV0dXJuIFBUUl9FUlIoYnVzLT5ncGlvX3Jlc2V0KTsKLQlpZiAoIWJ1cy0+ Z3Bpb19yZXNldCkgewotCQlkZXZfd2FybigmZnVuYy0+ZGV2LAotCQkJICJncGlvIHJlc2V0IGlz IG5vdCBkZWZpbmVkLCB0cnlpbmcgdG8gbG9hZCBmaXJtd2FyZSBhbnl3YXlcbiIpOwotCX0gZWxz ZSB7Ci0JCWdwaW9kX3NldF9jb25zdW1lcl9uYW1lKGJ1cy0+Z3Bpb19yZXNldCwgIndmeCByZXNl dCIpOwotCQlpZiAoc3BpX2dldF9kZXZpY2VfaWQoZnVuYyktPmRyaXZlcl9kYXRhICYgV0ZYX1JF U0VUX0lOVkVSVEVEKQotCQkJZ3Bpb2RfdG9nZ2xlX2FjdGl2ZV9sb3coYnVzLT5ncGlvX3Jlc2V0 KTsKLQkJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGJ1cy0+Z3Bpb19yZXNldCwgMSk7Ci0JCXVz bGVlcF9yYW5nZSgxMDAsIDE1MCk7Ci0JCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChidXMtPmdw aW9fcmVzZXQsIDApOwotCQl1c2xlZXBfcmFuZ2UoMjAwMCwgMjUwMCk7Ci0JfQotCi0JYnVzLT5j b3JlID0gd2Z4X2luaXRfY29tbW9uKCZmdW5jLT5kZXYsICZ3Znhfc3BpX3BkYXRhLAotCQkJCSAg ICAmd2Z4X3NwaV9od2J1c19vcHMsIGJ1cyk7Ci0JaWYgKCFidXMtPmNvcmUpCi0JCXJldHVybiAt RUlPOwotCi0JcmV0dXJuIHdmeF9wcm9iZShidXMtPmNvcmUpOwotfQotCi1zdGF0aWMgaW50IHdm eF9zcGlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpmdW5jKQotewotCXN0cnVjdCB3Znhfc3Bp X3ByaXYgKmJ1cyA9IHNwaV9nZXRfZHJ2ZGF0YShmdW5jKTsKLQotCXdmeF9yZWxlYXNlKGJ1cy0+ Y29yZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBGb3IgZHluYW1pYyBkcml2ZXIgYmluZGlu Zywga2VybmVsIGRvZXMgbm90IHVzZSBPRiB0byBtYXRjaCBkcml2ZXIuIEl0IG9ubHkKLSAqIHVz ZSBtb2RhbGlhcyBhbmQgbW9kYWxpYXMgaXMgYSBjb3B5IG9mICdjb21wYXRpYmxlJyBEVCBub2Rl IHdpdGggdmVuZG9yCi0gKiBzdHJpcHBlZC4KLSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBzcGlf ZGV2aWNlX2lkIHdmeF9zcGlfaWRbXSA9IHsKLQl7ICJ3Zngtc3BpIiwgV0ZYX1JFU0VUX0lOVkVS VEVEIH0sCi0JeyAid2YyMDAiLCAwIH0sCi0JeyB9LAotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUo c3BpLCB3Znhfc3BpX2lkKTsKLQotI2lmZGVmIENPTkZJR19PRgotc3RhdGljIGNvbnN0IHN0cnVj dCBvZl9kZXZpY2VfaWQgd2Z4X3NwaV9vZl9tYXRjaFtdID0gewotCXsgLmNvbXBhdGlibGUgPSAi c2lsYWJzLHdmeC1zcGkiLCAuZGF0YSA9ICh2b2lkICopV0ZYX1JFU0VUX0lOVkVSVEVEIH0sCi0J eyAuY29tcGF0aWJsZSA9ICJzaWxhYnMsd2YyMDAiIH0sCi0JeyB9LAotfTsKLU1PRFVMRV9ERVZJ Q0VfVEFCTEUob2YsIHdmeF9zcGlfb2ZfbWF0Y2gpOwotI2VuZGlmCi0KLXN0cnVjdCBzcGlfZHJp dmVyIHdmeF9zcGlfZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gIndmeC1zcGki LAotCQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIod2Z4X3NwaV9vZl9tYXRjaCksCi0J fSwKLQkuaWRfdGFibGUgPSB3Znhfc3BpX2lkLAotCS5wcm9iZSA9IHdmeF9zcGlfcHJvYmUsCi0J LnJlbW92ZSA9IHdmeF9zcGlfcmVtb3ZlLAotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2lu Zy93ZngvZGF0YV9yeC5jIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9kYXRhX3J4LmMKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4NWYyZDQyYTBlMi4uMDAwMDAwMDAwMDAwCi0tLSBhL2Ry aXZlcnMvc3RhZ2luZy93ZngvZGF0YV9yeC5jCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBA QAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQotLyoKLSAqIERhdGFw YXRoIGltcGxlbWVudGF0aW9uLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwLCBTaWxp Y29uIExhYm9yYXRvcmllcywgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmljc3Nv bgotICovCi0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxuZXQvbWFj ODAyMTEuaD4KLQotI2luY2x1ZGUgImRhdGFfcnguaCIKLSNpbmNsdWRlICJ3ZnguaCIKLSNpbmNs dWRlICJiaC5oIgotI2luY2x1ZGUgInN0YS5oIgotCi1zdGF0aWMgdm9pZCB3ZnhfcnhfaGFuZGxl X2JhKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQpCi17 Ci0JaW50IHBhcmFtcywgdGlkOwotCi0JaWYgKHdmeF9hcGlfb2xkZXJfdGhhbih3dmlmLT53ZGV2 LCAzLCA2KSkKLQkJcmV0dXJuOwotCi0Jc3dpdGNoIChtZ210LT51LmFjdGlvbi51LmFkZGJhX3Jl cS5hY3Rpb25fY29kZSkgewotCWNhc2UgV0xBTl9BQ1RJT05fQUREQkFfUkVROgotCQlwYXJhbXMg PSBsZTE2X3RvX2NwdShtZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS5jYXBhYik7Ci0JCXRpZCA9 IChwYXJhbXMgJiBJRUVFODAyMTFfQUREQkFfUEFSQU1fVElEX01BU0spID4+IDI7Ci0JCWllZWU4 MDIxMV9zdGFydF9yeF9iYV9zZXNzaW9uX29mZmwod3ZpZi0+dmlmLCBtZ210LT5zYSwgdGlkKTsK LQkJYnJlYWs7Ci0JY2FzZSBXTEFOX0FDVElPTl9ERUxCQToKLQkJcGFyYW1zID0gbGUxNl90b19j cHUobWdtdC0+dS5hY3Rpb24udS5kZWxiYS5wYXJhbXMpOwotCQl0aWQgPSAocGFyYW1zICYgIElF RUU4MDIxMV9ERUxCQV9QQVJBTV9USURfTUFTSykgPj4gMTI7Ci0JCWllZWU4MDIxMV9zdG9wX3J4 X2JhX3Nlc3Npb25fb2ZmbCh3dmlmLT52aWYsIG1nbXQtPnNhLCB0aWQpOwotCQlicmVhazsKLQl9 Ci19Ci0KLXZvaWQgd2Z4X3J4X2NiKHN0cnVjdCB3ZnhfdmlmICp3dmlmLAotCSAgICAgICBjb25z dCBzdHJ1Y3QgaGlmX2luZF9yeCAqYXJnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVj dCBpZWVlODAyMTFfcnhfc3RhdHVzICpoZHIgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKLQlz dHJ1Y3QgaWVlZTgwMjExX2hkciAqZnJhbWUgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2It PmRhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHN0cnVjdCBpZWVlODAyMTFf bWdtdCAqKXNrYi0+ZGF0YTsKLQotCW1lbXNldChoZHIsIDAsIHNpemVvZigqaGRyKSk7Ci0KLQlp ZiAoYXJnLT5zdGF0dXMgPT0gSElGX1NUQVRVU19SWF9GQUlMX01JQykKLQkJaGRyLT5mbGFnIHw9 IFJYX0ZMQUdfTU1JQ19FUlJPUiB8IFJYX0ZMQUdfSVZfU1RSSVBQRUQ7Ci0JZWxzZSBpZiAoYXJn LT5zdGF0dXMpCi0JCWdvdG8gZHJvcDsKLQotCWlmIChza2ItPmxlbiA8IHNpemVvZihzdHJ1Y3Qg aWVlZTgwMjExX3BzcG9sbCkpIHsKLQkJZGV2X3dhcm4od3ZpZi0+d2Rldi0+ZGV2LCAibWFsZm9y bWVkIFNEVSByZWNlaXZlZFxuIik7Ci0JCWdvdG8gZHJvcDsKLQl9Ci0KLQloZHItPmJhbmQgPSBO TDgwMjExX0JBTkRfMkdIWjsKLQloZHItPmZyZXEgPSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVx dWVuY3koYXJnLT5jaGFubmVsX251bWJlciwKLQkJCQkJCSAgIGhkci0+YmFuZCk7Ci0KLQlpZiAo YXJnLT5yeGVkX3JhdGUgPj0gMTQpIHsKLQkJaGRyLT5lbmNvZGluZyA9IFJYX0VOQ19IVDsKLQkJ aGRyLT5yYXRlX2lkeCA9IGFyZy0+cnhlZF9yYXRlIC0gMTQ7Ci0JfSBlbHNlIGlmIChhcmctPnJ4 ZWRfcmF0ZSA+PSA0KSB7Ci0JCWhkci0+cmF0ZV9pZHggPSBhcmctPnJ4ZWRfcmF0ZSAtIDI7Ci0J fSBlbHNlIHsKLQkJaGRyLT5yYXRlX2lkeCA9IGFyZy0+cnhlZF9yYXRlOwotCX0KLQotCWlmICgh YXJnLT5yY3BpX3Jzc2kpIHsKLQkJaGRyLT5mbGFnIHw9IFJYX0ZMQUdfTk9fU0lHTkFMX1ZBTDsK LQkJZGV2X2luZm8od3ZpZi0+d2Rldi0+ZGV2LCAicmVjZWl2ZWQgZnJhbWUgd2l0aG91dCBSU1NJ IGRhdGFcbiIpOwotCX0KLQloZHItPnNpZ25hbCA9IGFyZy0+cmNwaV9yc3NpIC8gMiAtIDExMDsK LQloZHItPmFudGVubmEgPSAwOwotCi0JaWYgKGFyZy0+ZW5jcnlwKQotCQloZHItPmZsYWcgfD0g UlhfRkxBR19ERUNSWVBURUQ7Ci0KLQkvLyBCbG9jayBhY2sgbmVnb3RpYXRpb24gaXMgb2ZmbG9h ZGVkIGJ5IHRoZSBmaXJtd2FyZS4gSG93ZXZlciwKLQkvLyByZS1vcmRlcmluZyBtdXN0IGJlIGRv bmUgYnkgdGhlIG1hYzgwMjExLgotCWlmIChpZWVlODAyMTFfaXNfYWN0aW9uKGZyYW1lLT5mcmFt ZV9jb250cm9sKSAmJgotCSAgICBtZ210LT51LmFjdGlvbi5jYXRlZ29yeSA9PSBXTEFOX0NBVEVH T1JZX0JBQ0sgJiYKLQkgICAgc2tiLT5sZW4gPiBJRUVFODAyMTFfTUlOX0FDVElPTl9TSVpFKSB7 Ci0JCXdmeF9yeF9oYW5kbGVfYmEod3ZpZiwgbWdtdCk7Ci0JCWdvdG8gZHJvcDsKLQl9Ci0KLQlp ZWVlODAyMTFfcnhfaXJxc2FmZSh3dmlmLT53ZGV2LT5odywgc2tiKTsKLQlyZXR1cm47Ci0KLWRy b3A6Ci0JZGV2X2tmcmVlX3NrYihza2IpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5n L3dmeC9kYXRhX3J4LmggYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2RhdGFfcnguaApkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggNGMwZGEzN2YyMDg0Li4wMDAwMDAwMDAwMDAKLS0tIGEvZHJp dmVycy9zdGFnaW5nL3dmeC9kYXRhX3J4LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBA Ci0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCi0vKgotICogRGF0 YXBhdGggaW1wbGVtZW50YXRpb24uCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNp bGljb24gTGFib3JhdG9yaWVzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNz c29uCi0gKi8KLSNpZm5kZWYgV0ZYX0RBVEFfUlhfSAotI2RlZmluZSBXRlhfREFUQV9SWF9ICi0K LXN0cnVjdCB3ZnhfdmlmOwotc3RydWN0IHNrX2J1ZmY7Ci1zdHJ1Y3QgaGlmX2luZF9yeDsKLQot dm9pZCB3ZnhfcnhfY2Ioc3RydWN0IHdmeF92aWYgKnd2aWYsCi0JICAgICAgIGNvbnN0IHN0cnVj dCBoaWZfaW5kX3J4ICphcmcsIHN0cnVjdCBza19idWZmICpza2IpOwotCi0jZW5kaWYgLyogV0ZY X0RBVEFfUlhfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9kYXRhX3R4LmMg Yi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2RhdGFfdHguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMzZiMzZlZjM5ZDA1Li4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dm eC9kYXRhX3R4LmMKKysrIC9kZXYvbnVsbApAQCAtMSw1ODUgKzAsMCBAQAotLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQotLyoKLSAqIERhdGFwYXRoIGltcGxlbWVudGF0 aW9uLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwLCBTaWxpY29uIExhYm9yYXRvcmll cywgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmljc3NvbgotICovCi0jaW5jbHVk ZSA8bmV0L21hYzgwMjExLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLQotI2lu Y2x1ZGUgImRhdGFfdHguaCIKLSNpbmNsdWRlICJ3ZnguaCIKLSNpbmNsdWRlICJiaC5oIgotI2lu Y2x1ZGUgInN0YS5oIgotI2luY2x1ZGUgInF1ZXVlLmgiCi0jaW5jbHVkZSAiZGVidWcuaCIKLSNp bmNsdWRlICJ0cmFjZXMuaCIKLSNpbmNsdWRlICJoaWZfdHhfbWliLmgiCi0KLXN0YXRpYyBpbnQg d2Z4X2dldF9od19yYXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LAotCQkJICAgY29uc3Qgc3RydWN0 IGllZWU4MDIxMV90eF9yYXRlICpyYXRlKQotewotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVk X2JhbmQgKmJhbmQ7Ci0KLQlpZiAocmF0ZS0+aWR4IDwgMCkKLQkJcmV0dXJuIC0xOwotCWlmIChy YXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19NQ1MpIHsKLQkJaWYgKHJhdGUtPmlkeCA+IDcp IHsKLQkJCVdBUk4oMSwgIndyb25nIHJhdGUtPmlkeCB2YWx1ZTogJWQiLCByYXRlLT5pZHgpOwot CQkJcmV0dXJuIC0xOwotCQl9Ci0JCXJldHVybiByYXRlLT5pZHggKyAxNDsKLQl9Ci0JLy8gV0Z4 IG9ubHkgc3VwcG9ydCAyR0h6LCBlbHNlIGJhbmQgaW5mb3JtYXRpb24gc2hvdWxkIGJlIHJldHJp ZXZlZAotCS8vIGZyb20gaWVlZTgwMjExX3R4X2luZm8KLQliYW5kID0gd2Rldi0+aHctPndpcGh5 LT5iYW5kc1tOTDgwMjExX0JBTkRfMkdIWl07Ci0JaWYgKHJhdGUtPmlkeCA+PSBiYW5kLT5uX2Jp dHJhdGVzKSB7Ci0JCVdBUk4oMSwgIndyb25nIHJhdGUtPmlkeCB2YWx1ZTogJWQiLCByYXRlLT5p ZHgpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXJldHVybiBiYW5kLT5iaXRyYXRlc1tyYXRlLT5pZHhd Lmh3X3ZhbHVlOwotfQotCi0vKiBUWCBwb2xpY3kgY2FjaGUgaW1wbGVtZW50YXRpb24gKi8KLQot c3RhdGljIHZvaWQgd2Z4X3R4X3BvbGljeV9idWlsZChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3Ry dWN0IHR4X3BvbGljeSAqcG9saWN5LAotCQkJCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0 ZXMpCi17Ci0Jc3RydWN0IHdmeF9kZXYgKndkZXYgPSB3dmlmLT53ZGV2OwotCWludCBpLCByYXRl aWQ7Ci0JdTggY291bnQ7Ci0KLQlXQVJOKHJhdGVzWzBdLmlkeCA8IDAsICJpbnZhbGlkIHJhdGUg cG9saWN5Iik7Ci0JbWVtc2V0KHBvbGljeSwgMCwgc2l6ZW9mKCpwb2xpY3kpKTsKLQlmb3IgKGkg PSAwOyBpIDwgSUVFRTgwMjExX1RYX01BWF9SQVRFUzsgKytpKSB7Ci0JCWlmIChyYXRlc1tpXS5p ZHggPCAwKQotCQkJYnJlYWs7Ci0JCVdBUk5fT04ocmF0ZXNbaV0uY291bnQgPiAxNSk7Ci0JCXJh dGVpZCA9IHdmeF9nZXRfaHdfcmF0ZSh3ZGV2LCAmcmF0ZXNbaV0pOwotCQkvLyBQYWNrIHR3byB2 YWx1ZXMgaW4gZWFjaCBieXRlIG9mIHBvbGljeS0+cmF0ZXMKLQkJY291bnQgPSByYXRlc1tpXS5j b3VudDsKLQkJaWYgKHJhdGVpZCAlIDIpCi0JCQljb3VudCA8PD0gNDsKLQkJcG9saWN5LT5yYXRl c1tyYXRlaWQgLyAyXSB8PSBjb3VudDsKLQl9Ci19Ci0KLXN0YXRpYyBib29sIHR4X3BvbGljeV9p c19lcXVhbChjb25zdCBzdHJ1Y3QgdHhfcG9saWN5ICphLAotCQkJICAgICAgIGNvbnN0IHN0cnVj dCB0eF9wb2xpY3kgKmIpCi17Ci0JcmV0dXJuICFtZW1jbXAoYS0+cmF0ZXMsIGItPnJhdGVzLCBz aXplb2YoYS0+cmF0ZXMpKTsKLX0KLQotc3RhdGljIGludCB3ZnhfdHhfcG9saWN5X2ZpbmQoc3Ry dWN0IHR4X3BvbGljeV9jYWNoZSAqY2FjaGUsCi0JCQkgICAgICBzdHJ1Y3QgdHhfcG9saWN5ICp3 YW50ZWQpCi17Ci0Jc3RydWN0IHR4X3BvbGljeSAqaXQ7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5 KGl0LCAmY2FjaGUtPnVzZWQsIGxpbmspCi0JCWlmICh0eF9wb2xpY3lfaXNfZXF1YWwod2FudGVk LCBpdCkpCi0JCQlyZXR1cm4gaXQgLSBjYWNoZS0+Y2FjaGU7Ci0JbGlzdF9mb3JfZWFjaF9lbnRy eShpdCwgJmNhY2hlLT5mcmVlLCBsaW5rKQotCQlpZiAodHhfcG9saWN5X2lzX2VxdWFsKHdhbnRl ZCwgaXQpKQotCQkJcmV0dXJuIGl0IC0gY2FjaGUtPmNhY2hlOwotCXJldHVybiAtMTsKLX0KLQot c3RhdGljIHZvaWQgd2Z4X3R4X3BvbGljeV91c2Uoc3RydWN0IHR4X3BvbGljeV9jYWNoZSAqY2Fj aGUsCi0JCQkgICAgICBzdHJ1Y3QgdHhfcG9saWN5ICplbnRyeSkKLXsKLQkrK2VudHJ5LT51c2Fn ZV9jb3VudDsKLQlsaXN0X21vdmUoJmVudHJ5LT5saW5rLCAmY2FjaGUtPnVzZWQpOwotfQotCi1z dGF0aWMgaW50IHdmeF90eF9wb2xpY3lfcmVsZWFzZShzdHJ1Y3QgdHhfcG9saWN5X2NhY2hlICpj YWNoZSwKLQkJCQkgc3RydWN0IHR4X3BvbGljeSAqZW50cnkpCi17Ci0JaW50IHJldCA9IC0tZW50 cnktPnVzYWdlX2NvdW50OwotCi0JaWYgKCFyZXQpCi0JCWxpc3RfbW92ZSgmZW50cnktPmxpbmss ICZjYWNoZS0+ZnJlZSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCB3ZnhfdHhfcG9s aWN5X2dldChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwKLQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV90 eF9yYXRlICpyYXRlcywgYm9vbCAqcmVuZXcpCi17Ci0JaW50IGlkeDsKLQlzdHJ1Y3QgdHhfcG9s aWN5X2NhY2hlICpjYWNoZSA9ICZ3dmlmLT50eF9wb2xpY3lfY2FjaGU7Ci0Jc3RydWN0IHR4X3Bv bGljeSB3YW50ZWQ7Ci0KLQl3ZnhfdHhfcG9saWN5X2J1aWxkKHd2aWYsICZ3YW50ZWQsIHJhdGVz KTsKLQotCXNwaW5fbG9ja19iaCgmY2FjaGUtPmxvY2spOwotCWlmIChsaXN0X2VtcHR5KCZjYWNo ZS0+ZnJlZSkpIHsKLQkJV0FSTigxLCAidW5hYmxlIHRvIGdldCBhIHZhbGlkIFR4IHBvbGljeSIp OwotCQlzcGluX3VubG9ja19iaCgmY2FjaGUtPmxvY2spOwotCQlyZXR1cm4gSElGX1RYX1JFVFJZ X1BPTElDWV9JTlZBTElEOwotCX0KLQlpZHggPSB3ZnhfdHhfcG9saWN5X2ZpbmQoY2FjaGUsICZ3 YW50ZWQpOwotCWlmIChpZHggPj0gMCkgewotCQkqcmVuZXcgPSBmYWxzZTsKLQl9IGVsc2Ugewot CQlzdHJ1Y3QgdHhfcG9saWN5ICplbnRyeTsKLQkJKnJlbmV3ID0gdHJ1ZTsKLQkJLyogSWYgcG9s aWN5IGlzIG5vdCBmb3VuZCBjcmVhdGUgYSBuZXcgb25lCi0JCSAqIHVzaW5nIHRoZSBvbGRlc3Qg ZW50cnkgaW4gImZyZWUiIGxpc3QKLQkJICovCi0JCWVudHJ5ID0gbGlzdF9lbnRyeShjYWNoZS0+ ZnJlZS5wcmV2LCBzdHJ1Y3QgdHhfcG9saWN5LCBsaW5rKTsKLQkJbWVtY3B5KGVudHJ5LT5yYXRl cywgd2FudGVkLnJhdGVzLCBzaXplb2YoZW50cnktPnJhdGVzKSk7Ci0JCWVudHJ5LT51cGxvYWRl ZCA9IGZhbHNlOwotCQllbnRyeS0+dXNhZ2VfY291bnQgPSAwOwotCQlpZHggPSBlbnRyeSAtIGNh Y2hlLT5jYWNoZTsKLQl9Ci0Jd2Z4X3R4X3BvbGljeV91c2UoY2FjaGUsICZjYWNoZS0+Y2FjaGVb aWR4XSk7Ci0JaWYgKGxpc3RfZW1wdHkoJmNhY2hlLT5mcmVlKSkKLQkJaWVlZTgwMjExX3N0b3Bf cXVldWVzKHd2aWYtPndkZXYtPmh3KTsKLQlzcGluX3VubG9ja19iaCgmY2FjaGUtPmxvY2spOwot CXJldHVybiBpZHg7Ci19Ci0KLXN0YXRpYyB2b2lkIHdmeF90eF9wb2xpY3lfcHV0KHN0cnVjdCB3 ZnhfdmlmICp3dmlmLCBpbnQgaWR4KQotewotCWludCB1c2FnZSwgbG9ja2VkOwotCXN0cnVjdCB0 eF9wb2xpY3lfY2FjaGUgKmNhY2hlID0gJnd2aWYtPnR4X3BvbGljeV9jYWNoZTsKLQotCWlmIChp ZHggPT0gSElGX1RYX1JFVFJZX1BPTElDWV9JTlZBTElEKQotCQlyZXR1cm47Ci0Jc3Bpbl9sb2Nr X2JoKCZjYWNoZS0+bG9jayk7Ci0JbG9ja2VkID0gbGlzdF9lbXB0eSgmY2FjaGUtPmZyZWUpOwot CXVzYWdlID0gd2Z4X3R4X3BvbGljeV9yZWxlYXNlKGNhY2hlLCAmY2FjaGUtPmNhY2hlW2lkeF0p OwotCWlmIChsb2NrZWQgJiYgIXVzYWdlKQotCQlpZWVlODAyMTFfd2FrZV9xdWV1ZXMod3ZpZi0+ d2Rldi0+aHcpOwotCXNwaW5fdW5sb2NrX2JoKCZjYWNoZS0+bG9jayk7Ci19Ci0KLXN0YXRpYyBp bnQgd2Z4X3R4X3BvbGljeV91cGxvYWQoc3RydWN0IHdmeF92aWYgKnd2aWYpCi17Ci0Jc3RydWN0 IHR4X3BvbGljeSAqcG9saWNpZXMgPSB3dmlmLT50eF9wb2xpY3lfY2FjaGUuY2FjaGU7Ci0JdTgg dG1wX3JhdGVzWzEyXTsKLQlpbnQgaSwgaXNfdXNlZDsKLQotCWRvIHsKLQkJc3Bpbl9sb2NrX2Jo KCZ3dmlmLT50eF9wb2xpY3lfY2FjaGUubG9jayk7Ci0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKHd2aWYtPnR4X3BvbGljeV9jYWNoZS5jYWNoZSk7ICsraSkgewotCQkJaXNfdXNlZCA9IG1l bXpjbXAocG9saWNpZXNbaV0ucmF0ZXMsCi0JCQkJCSAgc2l6ZW9mKHBvbGljaWVzW2ldLnJhdGVz KSk7Ci0JCQlpZiAoIXBvbGljaWVzW2ldLnVwbG9hZGVkICYmIGlzX3VzZWQpCi0JCQkJYnJlYWs7 Ci0JCX0KLQkJaWYgKGkgPCBBUlJBWV9TSVpFKHd2aWYtPnR4X3BvbGljeV9jYWNoZS5jYWNoZSkp IHsKLQkJCXBvbGljaWVzW2ldLnVwbG9hZGVkID0gdHJ1ZTsKLQkJCW1lbWNweSh0bXBfcmF0ZXMs IHBvbGljaWVzW2ldLnJhdGVzLCBzaXplb2YodG1wX3JhdGVzKSk7Ci0JCQlzcGluX3VubG9ja19i aCgmd3ZpZi0+dHhfcG9saWN5X2NhY2hlLmxvY2spOwotCQkJaGlmX3NldF90eF9yYXRlX3JldHJ5 X3BvbGljeSh3dmlmLCBpLCB0bXBfcmF0ZXMpOwotCQl9IGVsc2UgewotCQkJc3Bpbl91bmxvY2tf YmgoJnd2aWYtPnR4X3BvbGljeV9jYWNoZS5sb2NrKTsKLQkJfQotCX0gd2hpbGUgKGkgPCBBUlJB WV9TSVpFKHd2aWYtPnR4X3BvbGljeV9jYWNoZS5jYWNoZSkpOwotCXJldHVybiAwOwotfQotCi12 b2lkIHdmeF90eF9wb2xpY3lfdXBsb2FkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQot ewotCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3 ZnhfdmlmLCB0eF9wb2xpY3lfdXBsb2FkX3dvcmspOwotCi0Jd2Z4X3R4X3BvbGljeV91cGxvYWQo d3ZpZik7Ci0Jd2Z4X3R4X3VubG9jayh3dmlmLT53ZGV2KTsKLX0KLQotdm9pZCB3ZnhfdHhfcG9s aWN5X2luaXQoc3RydWN0IHdmeF92aWYgKnd2aWYpCi17Ci0Jc3RydWN0IHR4X3BvbGljeV9jYWNo ZSAqY2FjaGUgPSAmd3ZpZi0+dHhfcG9saWN5X2NhY2hlOwotCWludCBpOwotCi0JbWVtc2V0KGNh Y2hlLCAwLCBzaXplb2YoKmNhY2hlKSk7Ci0KLQlzcGluX2xvY2tfaW5pdCgmY2FjaGUtPmxvY2sp OwotCUlOSVRfTElTVF9IRUFEKCZjYWNoZS0+dXNlZCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNhY2hl LT5mcmVlKTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNhY2hlLT5jYWNoZSk7ICsr aSkKLQkJbGlzdF9hZGQoJmNhY2hlLT5jYWNoZVtpXS5saW5rLCAmY2FjaGUtPmZyZWUpOwotfQot Ci0vKiBUeCBpbXBsZW1lbnRhdGlvbiAqLwotCi1zdGF0aWMgYm9vbCBpZWVlODAyMTFfaXNfYWN0 aW9uX2JhY2soc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjEx X21nbXQgKm1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopaGRyOwotCi0JaWYgKCFpZWVl ODAyMTFfaXNfYWN0aW9uKG1nbXQtPmZyYW1lX2NvbnRyb2wpKQotCQlyZXR1cm4gZmFsc2U7Ci0J aWYgKG1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5ICE9IFdMQU5fQ0FURUdPUllfQkFDSykKLQkJcmV0 dXJuIGZhbHNlOwotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgdTggd2Z4X3R4X2dldF9saW5r X2lkKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAotCQkJ ICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQotewotCXN0cnVjdCB3Znhfc3RhX3ByaXYg KnN0YV9wcml2ID0KLQkJc3RhID8gKHN0cnVjdCB3Znhfc3RhX3ByaXYgKikmc3RhLT5kcnZfcHJp diA6IE5VTEw7Ci0JY29uc3QgdTggKmRhID0gaWVlZTgwMjExX2dldF9EQShoZHIpOwotCi0JaWYg KHN0YV9wcml2ICYmIHN0YV9wcml2LT5saW5rX2lkKQotCQlyZXR1cm4gc3RhX3ByaXYtPmxpbmtf aWQ7Ci0JaWYgKHd2aWYtPnZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCkKLQkJcmV0dXJu IDA7Ci0JaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGRhKSkKLQkJcmV0dXJuIDA7Ci0JcmV0 dXJuIEhJRl9MSU5LX0lEX05PVF9BU1NPQ0lBVEVEOwotfQotCi1zdGF0aWMgdm9pZCB3ZnhfdHhf Zml4dXBfcmF0ZXMoc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlcykKLXsKLQlpbnQgaTsK LQlib29sIGZpbmlzaGVkOwotCi0JLy8gRmlybXdhcmUgaXMgbm90IGFibGUgdG8gbWl4IHJhdGVz IHdpdGggZGlmZmVyZW50IGZsYWdzCi0JZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9UWF9NQVhf UkFURVM7IGkrKykgewotCQlpZiAocmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfU0hP UlRfR0kpCi0JCQlyYXRlc1tpXS5mbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfU0hPUlRfR0k7Ci0J CWlmICghKHJhdGVzWzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJKSkKLQkJCXJh dGVzW2ldLmZsYWdzICY9IH5JRUVFODAyMTFfVFhfUkNfU0hPUlRfR0k7Ci0JCWlmICghKHJhdGVz WzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTKSkKLQkJCXJhdGVzW2ldLmZs YWdzICY9IH5JRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFM7Ci0JfQotCi0JLy8gU29ydCByYXRl cyBhbmQgcmVtb3ZlIGR1cGxpY2F0ZXMKLQlkbyB7Ci0JCWZpbmlzaGVkID0gdHJ1ZTsKLQkJZm9y IChpID0gMDsgaSA8IElFRUU4MDIxMV9UWF9NQVhfUkFURVMgLSAxOyBpKyspIHsKLQkJCWlmIChy YXRlc1tpICsgMV0uaWR4ID09IHJhdGVzW2ldLmlkeCAmJgotCQkJICAgIHJhdGVzW2ldLmlkeCAh PSAtMSkgewotCQkJCXJhdGVzW2ldLmNvdW50ICs9IHJhdGVzW2kgKyAxXS5jb3VudDsKLQkJCQlp ZiAocmF0ZXNbaV0uY291bnQgPiAxNSkKLQkJCQkJcmF0ZXNbaV0uY291bnQgPSAxNTsKLQkJCQly YXRlc1tpICsgMV0uaWR4ID0gLTE7Ci0JCQkJcmF0ZXNbaSArIDFdLmNvdW50ID0gMDsKLQotCQkJ CWZpbmlzaGVkID0gZmFsc2U7Ci0JCQl9Ci0JCQlpZiAocmF0ZXNbaSArIDFdLmlkeCA+IHJhdGVz W2ldLmlkeCkgewotCQkJCXN3YXAocmF0ZXNbaSArIDFdLCByYXRlc1tpXSk7Ci0JCQkJZmluaXNo ZWQgPSBmYWxzZTsKLQkJCX0KLQkJfQotCX0gd2hpbGUgKCFmaW5pc2hlZCk7Ci0JLy8gRW5zdXJl IHRoYXQgTUNTMCBvciAxTWJwcyBpcyBwcmVzZW50IGF0IHRoZSBlbmQgb2YgdGhlIHJldHJ5IGxp c3QKLQlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX1RYX01BWF9SQVRFUzsgaSsrKSB7Ci0JCWlm IChyYXRlc1tpXS5pZHggPT0gMCkKLQkJCWJyZWFrOwotCQlpZiAocmF0ZXNbaV0uaWR4ID09IC0x KSB7Ci0JCQlyYXRlc1tpXS5pZHggPSAwOwotCQkJcmF0ZXNbaV0uY291bnQgPSA4OyAvLyA9PSBo dy0+bWF4X3JhdGVfdHJpZXMKLQkJCXJhdGVzW2ldLmZsYWdzID0gcmF0ZXNbaSAtIDFdLmZsYWdz ICYKLQkJCQkJIElFRUU4MDIxMV9UWF9SQ19NQ1M7Ci0JCQlicmVhazsKLQkJfQotCX0KLQkvLyBB bGwgcmV0cmllcyB1c2UgbG9uZyBHSQotCWZvciAoaSA9IDE7IGkgPCBJRUVFODAyMTFfVFhfTUFY X1JBVEVTOyBpKyspCi0JCXJhdGVzW2ldLmZsYWdzICY9IH5JRUVFODAyMTFfVFhfUkNfU0hPUlRf R0k7Ci19Ci0KLXN0YXRpYyB1OCB3ZnhfdHhfZ2V0X3JhdGVfaWQoc3RydWN0IHdmeF92aWYgKnd2 aWYsCi0JCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbykKLXsKLQlib29s IHR4X3BvbGljeV9yZW5ldyA9IGZhbHNlOwotCXU4IHJhdGVfaWQ7Ci0KLQlyYXRlX2lkID0gd2Z4 X3R4X3BvbGljeV9nZXQod3ZpZiwKLQkJCQkgICAgdHhfaW5mby0+ZHJpdmVyX3JhdGVzLCAmdHhf cG9saWN5X3JlbmV3KTsKLQlpZiAocmF0ZV9pZCA9PSBISUZfVFhfUkVUUllfUE9MSUNZX0lOVkFM SUQpCi0JCWRldl93YXJuKHd2aWYtPndkZXYtPmRldiwgInVuYWJsZSB0byBnZXQgYSB2YWxpZCBU eCBwb2xpY3kiKTsKLQotCWlmICh0eF9wb2xpY3lfcmVuZXcpIHsKLQkJd2Z4X3R4X2xvY2sod3Zp Zi0+d2Rldik7Ci0JCWlmICghc2NoZWR1bGVfd29yaygmd3ZpZi0+dHhfcG9saWN5X3VwbG9hZF93 b3JrKSkKLQkJCXdmeF90eF91bmxvY2sod3ZpZi0+d2Rldik7Ci0JfQotCXJldHVybiByYXRlX2lk OwotfQotCi1zdGF0aWMgaW50IHdmeF90eF9nZXRfZnJhbWVfZm9ybWF0KHN0cnVjdCBpZWVlODAy MTFfdHhfaW5mbyAqdHhfaW5mbykKLXsKLQlpZiAoISh0eF9pbmZvLT5kcml2ZXJfcmF0ZXNbMF0u ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfTUNTKSkKLQkJcmV0dXJuIEhJRl9GUkFNRV9GT1JNQVRf Tk9OX0hUOwotCWVsc2UgaWYgKCEodHhfaW5mby0+ZHJpdmVyX3JhdGVzWzBdLmZsYWdzICYgSUVF RTgwMjExX1RYX1JDX0dSRUVOX0ZJRUxEKSkKLQkJcmV0dXJuIEhJRl9GUkFNRV9GT1JNQVRfTUlY RURfRk9STUFUX0hUOwotCWVsc2UKLQkJcmV0dXJuIEhJRl9GUkFNRV9GT1JNQVRfR0ZfSFRfMTFO OwotfQotCi1zdGF0aWMgaW50IHdmeF90eF9nZXRfaWN2X2xlbihzdHJ1Y3QgaWVlZTgwMjExX2tl eV9jb25mICpod19rZXkpCi17Ci0JaW50IG1pY19zcGFjZTsKLQotCWlmICghaHdfa2V5KQotCQly ZXR1cm4gMDsKLQlpZiAoaHdfa2V5LT5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfQUVTX0NN QUMpCi0JCXJldHVybiAwOwotCW1pY19zcGFjZSA9IChod19rZXktPmNpcGhlciA9PSBXTEFOX0NJ UEhFUl9TVUlURV9US0lQKSA/IDggOiAwOwotCXJldHVybiBod19rZXktPmljdl9sZW4gKyBtaWNf c3BhY2U7Ci19Ci0KLXN0YXRpYyBpbnQgd2Z4X3R4X2lubmVyKHN0cnVjdCB3ZnhfdmlmICp3dmlm LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAotCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsK LQlzdHJ1Y3QgaGlmX21zZyAqaGlmX21zZzsKLQlzdHJ1Y3QgaGlmX3JlcV90eCAqcmVxOwotCXN0 cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsK LQlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICpod19rZXkgPSB0eF9pbmZvLT5jb250cm9sLmh3 X2tleTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRy ICopc2tiLT5kYXRhOwotCWludCBxdWV1ZV9pZCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2Ip OwotCXNpemVfdCBvZmZzZXQgPSAoc2l6ZV90KXNrYi0+ZGF0YSAmIDM7Ci0JaW50IHdtc2dfbGVu ID0gc2l6ZW9mKHN0cnVjdCBoaWZfbXNnKSArCi0JCQlzaXplb2Yoc3RydWN0IGhpZl9yZXFfdHgp ICsgb2Zmc2V0OwotCi0JV0FSTihxdWV1ZV9pZCA+PSBJRUVFODAyMTFfTlVNX0FDUywgInVuc3Vw cG9ydGVkIHF1ZXVlX2lkIik7Ci0Jd2Z4X3R4X2ZpeHVwX3JhdGVzKHR4X2luZm8tPmRyaXZlcl9y YXRlcyk7Ci0KLQkvLyBGcm9tIG5vdyB0eF9pbmZvLT5jb250cm9sIGlzIHVudXNhYmxlCi0JbWVt c2V0KHR4X2luZm8tPnJhdGVfZHJpdmVyX2RhdGEsIDAsIHNpemVvZihzdHJ1Y3Qgd2Z4X3R4X3By aXYpKTsKLQotCS8vIEZpbGwgaGlmX21zZwotCVdBUk4oc2tiX2hlYWRyb29tKHNrYikgPCB3bXNn X2xlbiwgIm5vdCBlbm91Z2ggc3BhY2UgaW4gc2tiIik7Ci0JV0FSTihvZmZzZXQgJiAxLCAiYXR0 ZW1wdCB0byB0cmFuc21pdCBhbiB1bmFsaWduZWQgZnJhbWUiKTsKLQlza2JfcHV0KHNrYiwgd2Z4 X3R4X2dldF9pY3ZfbGVuKGh3X2tleSkpOwotCXNrYl9wdXNoKHNrYiwgd21zZ19sZW4pOwotCW1l bXNldChza2ItPmRhdGEsIDAsIHdtc2dfbGVuKTsKLQloaWZfbXNnID0gKHN0cnVjdCBoaWZfbXNn ICopc2tiLT5kYXRhOwotCWhpZl9tc2ctPmxlbiA9IGNwdV90b19sZTE2KHNrYi0+bGVuKTsKLQlo aWZfbXNnLT5pZCA9IEhJRl9SRVFfSURfVFg7Ci0JaGlmX21zZy0+aW50ZXJmYWNlID0gd3ZpZi0+ aWQ7Ci0JaWYgKHNrYi0+bGVuID4gd3ZpZi0+d2Rldi0+aHdfY2Fwcy5zaXplX2lucF9jaF9idWYp IHsKLQkJZGV2X3dhcm4od3ZpZi0+d2Rldi0+ZGV2LAotCQkJICJyZXF1ZXN0ZWQgZnJhbWUgc2l6 ZSAoJWQpIGlzIGxhcmdlciB0aGFuIG1heGltdW0gc3VwcG9ydGVkICglZClcbiIsCi0JCQkgc2ti LT5sZW4sIHd2aWYtPndkZXYtPmh3X2NhcHMuc2l6ZV9pbnBfY2hfYnVmKTsKLQkJc2tiX3B1bGwo c2tiLCB3bXNnX2xlbik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCS8vIEZpbGwgdHggcmVxdWVz dAotCXJlcSA9IChzdHJ1Y3QgaGlmX3JlcV90eCAqKWhpZl9tc2ctPmJvZHk7Ci0JLy8gcGFja2V0 X2lkIGp1c3QgbmVlZCB0byBiZSB1bmlxdWUgb24gZGV2aWNlLiAzMmJpdHMgYXJlIG1vcmUgdGhh bgotCS8vIG5lY2Vzc2FyeSBmb3IgdGhhdCB0YXNrLCBzbyB3ZSB0YWUgYWR2YW50YWdlIG9mIGl0 IHRvIGFkZCBzb21lIGV4dHJhCi0JLy8gZGF0YSBmb3IgZGVidWcuCi0JcmVxLT5wYWNrZXRfaWQg PSBhdG9taWNfYWRkX3JldHVybigxLCAmd3ZpZi0+d2Rldi0+cGFja2V0X2lkKSAmIDB4RkZGRjsK LQlyZXEtPnBhY2tldF9pZCB8PSBJRUVFODAyMTFfU0VRX1RPX1NOKGxlMTZfdG9fY3B1KGhkci0+ c2VxX2N0cmwpKSA8PCAxNjsKLQlyZXEtPnBhY2tldF9pZCB8PSBxdWV1ZV9pZCA8PCAyODsKLQot CXJlcS0+ZmNfb2Zmc2V0ID0gb2Zmc2V0OwotCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIx MV9UWF9DVExfU0VORF9BRlRFUl9EVElNKQotCQlyZXEtPmFmdGVyX2R0aW0gPSAxOwotCXJlcS0+ cGVlcl9zdGFfaWQgPSB3ZnhfdHhfZ2V0X2xpbmtfaWQod3ZpZiwgc3RhLCBoZHIpOwotCS8vIFF1 ZXVlIGluZGV4IGFyZSBpbnZlcnRlZCBiZXR3ZWVuIGZpcm13YXJlIGFuZCBMaW51eAotCXJlcS0+ cXVldWVfaWQgPSAzIC0gcXVldWVfaWQ7Ci0JcmVxLT5yZXRyeV9wb2xpY3lfaW5kZXggPSB3Znhf dHhfZ2V0X3JhdGVfaWQod3ZpZiwgdHhfaW5mbyk7Ci0JcmVxLT5mcmFtZV9mb3JtYXQgPSB3Znhf dHhfZ2V0X2ZyYW1lX2Zvcm1hdCh0eF9pbmZvKTsKLQlpZiAodHhfaW5mby0+ZHJpdmVyX3JhdGVz WzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJKQotCQlyZXEtPnNob3J0X2dpID0g MTsKLQotCS8vIEF1eGlsaWFyeSBvcGVyYXRpb25zCi0Jd2Z4X3R4X3F1ZXVlc19wdXQod3ZpZiwg c2tiKTsKLQlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1NFTkRfQUZURVJf RFRJTSkKLQkJc2NoZWR1bGVfd29yaygmd3ZpZi0+dXBkYXRlX3RpbV93b3JrKTsKLQl3ZnhfYmhf cmVxdWVzdF90eCh3dmlmLT53ZGV2KTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCB3ZnhfdHgoc3Ry dWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJv bCwKLQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9 IGh3LT5wcml2OwotCXN0cnVjdCB3ZnhfdmlmICp3dmlmOwotCXN0cnVjdCBpZWVlODAyMTFfc3Rh ICpzdGEgPSBjb250cm9sID8gY29udHJvbC0+c3RhIDogTlVMTDsKLQlzdHJ1Y3QgaWVlZTgwMjEx X3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0Jc3RydWN0IGllZWU4 MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKLQlzaXpl X3QgZHJpdmVyX2RhdGFfcm9vbSA9IHNpemVvZl9maWVsZChzdHJ1Y3QgaWVlZTgwMjExX3R4X2lu Zm8sCi0JCQkJCSAgICAgICByYXRlX2RyaXZlcl9kYXRhKTsKLQotCWNvbXBpbGV0aW1lX2Fzc2Vy dChzaXplb2Yoc3RydWN0IHdmeF90eF9wcml2KSA8PSBkcml2ZXJfZGF0YV9yb29tLAotCQkJICAg InN0cnVjdCB0eF9wcml2IGlzIHRvbyBsYXJnZSIpOwotCVdBUk4oc2tiLT5uZXh0IHx8IHNrYi0+ cHJldiwgInNrYiBpcyBhbHJlYWR5IG1lbWJlciBvZiBhIGxpc3QiKTsKLQkvLyBjb250cm9sLnZp ZiBjYW4gYmUgTlVMTCBmb3IgaW5qZWN0ZWQgZnJhbWVzCi0JaWYgKHR4X2luZm8tPmNvbnRyb2wu dmlmKQotCQl3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopdHhfaW5mby0+Y29udHJvbC52aWYtPmRy dl9wcml2OwotCWVsc2UKLQkJd3ZpZiA9IHd2aWZfaXRlcmF0ZSh3ZGV2LCBOVUxMKTsKLQlpZiAo V0FSTl9PTighd3ZpZikpCi0JCWdvdG8gZHJvcDsKLQkvLyBCZWNhdXNlIG9mIFRYX0FNUERVX1NF VFVQX0lOX0hXLCBtYWM4MDIxMSBkb2VzIG5vdCB0cnkgdG8gc2VuZCBhbnkKLQkvLyBCbG9ja0Fj ayBzZXNzaW9uIG1hbmFnZW1lbnQgZnJhbWUuIFRoZSBjaGVjayBiZWxvdyBleGlzdCBqdXN0IGlu IGNhc2UuCi0JaWYgKGllZWU4MDIxMV9pc19hY3Rpb25fYmFjayhoZHIpKSB7Ci0JCWRldl9pbmZv KHdkZXYtPmRldiwgImRyb3AgQkEgYWN0aW9uXG4iKTsKLQkJZ290byBkcm9wOwotCX0KLQlpZiAo d2Z4X3R4X2lubmVyKHd2aWYsIHN0YSwgc2tiKSkKLQkJZ290byBkcm9wOwotCi0JcmV0dXJuOwot Ci1kcm9wOgotCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZSh3ZGV2LT5odywgc2tiKTsKLX0K LQotc3RhdGljIHZvaWQgd2Z4X3NrYl9kdG9yKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBzdHJ1Y3Qg c2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBoaWZfbXNnICpoaWYgPSAoc3RydWN0IGhpZl9tc2cg Kilza2ItPmRhdGE7Ci0Jc3RydWN0IGhpZl9yZXFfdHggKnJlcSA9IChzdHJ1Y3QgaGlmX3JlcV90 eCAqKWhpZi0+Ym9keTsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBoaWZf bXNnKSArCi0JCQkgICAgICBzaXplb2Yoc3RydWN0IGhpZl9yZXFfdHgpICsKLQkJCSAgICAgIHJl cS0+ZmNfb2Zmc2V0OwotCi0JaWYgKCF3dmlmKSB7Ci0JCXByX3dhcm4oIiVzOiB2aWYgYXNzb2Np YXRlZCB3aXRoIHRoZSBza2IgZG9lcyBub3QgZXhpc3QgYW55bW9yZVxuIiwgX19mdW5jX18pOwot CQlyZXR1cm47Ci0JfQotCXdmeF90eF9wb2xpY3lfcHV0KHd2aWYsIHJlcS0+cmV0cnlfcG9saWN5 X2luZGV4KTsKLQlza2JfcHVsbChza2IsIG9mZnNldCk7Ci0JaWVlZTgwMjExX3R4X3N0YXR1c19p cnFzYWZlKHd2aWYtPndkZXYtPmh3LCBza2IpOwotfQotCi1zdGF0aWMgdm9pZCB3ZnhfdHhfZmls bF9yYXRlcyhzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwKLQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFf dHhfaW5mbyAqdHhfaW5mbywKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCBoaWZfY25mX3R4ICphcmcp Ci17Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlOwotCWludCB0eF9jb3VudDsKLQlp bnQgaTsKLQotCXR4X2NvdW50ID0gYXJnLT5hY2tfZmFpbHVyZXM7Ci0JaWYgKCFhcmctPnN0YXR1 cyB8fCBhcmctPmFja19mYWlsdXJlcykKLQkJdHhfY291bnQgKz0gMTsgLy8gQWxzbyByZXBvcnQg c3VjY2VzcwotCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfVFhfTUFYX1JBVEVTOyBpKyspIHsK LQkJcmF0ZSA9ICZ0eF9pbmZvLT5zdGF0dXMucmF0ZXNbaV07Ci0JCWlmIChyYXRlLT5pZHggPCAw KQotCQkJYnJlYWs7Ci0JCWlmICh0eF9jb3VudCA8IHJhdGUtPmNvdW50ICYmCi0JCSAgICBhcmct PnN0YXR1cyA9PSBISUZfU1RBVFVTX1RYX0ZBSUxfUkVUUklFUyAmJgotCQkgICAgYXJnLT5hY2tf ZmFpbHVyZXMpCi0JCQlkZXZfZGJnKHdkZXYtPmRldiwgImFsbCByZXRyaWVzIHdlcmUgbm90IGNv bnN1bWVkOiAlZCAhPSAlZFxuIiwKLQkJCQlyYXRlLT5jb3VudCwgdHhfY291bnQpOwotCQlpZiAo dHhfY291bnQgPD0gcmF0ZS0+Y291bnQgJiYgdHhfY291bnQgJiYKLQkJICAgIGFyZy0+dHhlZF9y YXRlICE9IHdmeF9nZXRfaHdfcmF0ZSh3ZGV2LCByYXRlKSkKLQkJCWRldl9kYmcod2Rldi0+ZGV2 LCAiaW5jb25zaXN0ZW50IHR4X2luZm8gcmF0ZXM6ICVkICE9ICVkXG4iLAotCQkJCWFyZy0+dHhl ZF9yYXRlLCB3ZnhfZ2V0X2h3X3JhdGUod2RldiwgcmF0ZSkpOwotCQlpZiAodHhfY291bnQgPiBy YXRlLT5jb3VudCkgewotCQkJdHhfY291bnQgLT0gcmF0ZS0+Y291bnQ7Ci0JCX0gZWxzZSBpZiAo IXR4X2NvdW50KSB7Ci0JCQlyYXRlLT5jb3VudCA9IDA7Ci0JCQlyYXRlLT5pZHggPSAtMTsKLQkJ fSBlbHNlIHsKLQkJCXJhdGUtPmNvdW50ID0gdHhfY291bnQ7Ci0JCQl0eF9jb3VudCA9IDA7Ci0J CX0KLQl9Ci0JaWYgKHR4X2NvdW50KQotCQlkZXZfZGJnKHdkZXYtPmRldiwgIiVkIG1vcmUgcmV0 cmllcyB0aGFuIGV4cGVjdGVkXG4iLCB0eF9jb3VudCk7Ci19Ci0KLXZvaWQgd2Z4X3R4X2NvbmZp cm1fY2Ioc3RydWN0IHdmeF9kZXYgKndkZXYsIGNvbnN0IHN0cnVjdCBoaWZfY25mX3R4ICphcmcp Ci17Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvOwotCXN0cnVjdCB3Znhfdmlm ICp3dmlmOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0KLQlza2IgPSB3ZnhfcGVuZGluZ19nZXQo d2RldiwgYXJnLT5wYWNrZXRfaWQpOwotCWlmICghc2tiKSB7Ci0JCWRldl93YXJuKHdkZXYtPmRl diwgInJlY2VpdmVkIHVua25vd24gcGFja2V0X2lkICglIy44eCkgZnJvbSBjaGlwXG4iLAotCQkJ IGFyZy0+cGFja2V0X2lkKTsKLQkJcmV0dXJuOwotCX0KLQl0eF9pbmZvID0gSUVFRTgwMjExX1NL Ql9DQihza2IpOwotCXd2aWYgPSB3ZGV2X3RvX3d2aWYod2RldiwgKChzdHJ1Y3QgaGlmX21zZyAq KXNrYi0+ZGF0YSktPmludGVyZmFjZSk7Ci0JV0FSTl9PTighd3ZpZik7Ci0JaWYgKCF3dmlmKQot CQlyZXR1cm47Ci0KLQkvLyBOb3RlIHRoYXQgd2Z4X3BlbmRpbmdfZ2V0X3BrdF91c19kZWxheSgp IGdldCBkYXRhIGZyb20gdHhfaW5mbwotCV90cmFjZV90eF9zdGF0cyhhcmcsIHNrYiwgd2Z4X3Bl bmRpbmdfZ2V0X3BrdF91c19kZWxheSh3ZGV2LCBza2IpKTsKLQl3ZnhfdHhfZmlsbF9yYXRlcyh3 ZGV2LCB0eF9pbmZvLCBhcmcpOwotCS8vIEZyb20gbm93LCB5b3UgY2FuIHRvdWNoIHRvIHR4X2lu Zm8tPnN0YXR1cywgYnV0IGRvIG5vdCB0b3VjaCB0bwotCS8vIHR4X3ByaXYgYW55bW9yZQotCS8v IEZJWE1FOiB1c2UgaWVlZTgwMjExX3R4X2luZm9fY2xlYXJfc3RhdHVzKCkKLQltZW1zZXQodHhf aW5mby0+cmF0ZV9kcml2ZXJfZGF0YSwgMCwgc2l6ZW9mKHR4X2luZm8tPnJhdGVfZHJpdmVyX2Rh dGEpKTsKLQltZW1zZXQodHhfaW5mby0+cGFkLCAwLCBzaXplb2YodHhfaW5mby0+cGFkKSk7Ci0K LQlpZiAoIWFyZy0+c3RhdHVzKSB7Ci0JCXR4X2luZm8tPnN0YXR1cy50eF90aW1lID0KLQkJCWxl MzJfdG9fY3B1KGFyZy0+bWVkaWFfZGVsYXkpIC0KLQkJCWxlMzJfdG9fY3B1KGFyZy0+dHhfcXVl dWVfZGVsYXkpOwotCQlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FD SykKLQkJCXR4X2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX05PQUNLX1RSQU5TTUlU VEVEOwotCQllbHNlCi0JCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7 Ci0JfSBlbHNlIGlmIChhcmctPnN0YXR1cyA9PSBISUZfU1RBVFVTX1RYX0ZBSUxfUkVRVUVVRSkg ewotCQlXQVJOKCFhcmctPnJlcXVldWUsICJpbmNvaGVyZW50IHN0YXR1cyBhbmQgcmVzdWx0X2Zs YWdzIik7Ci0JCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfU0VORF9BRlRF Ul9EVElNKSB7Ci0JCQl3dmlmLT5hZnRlcl9kdGltX3R4X2FsbG93ZWQgPSBmYWxzZTsgLy8gRFRJ TSBwZXJpb2QgZWxhcHNlZAotCQkJc2NoZWR1bGVfd29yaygmd3ZpZi0+dXBkYXRlX3RpbV93b3Jr KTsKLQkJfQotCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9UWF9GSUxURVJF RDsKLQl9Ci0Jd2Z4X3NrYl9kdG9yKHd2aWYsIHNrYik7Ci19Ci0KLXN0YXRpYyB2b2lkIHdmeF9m bHVzaF92aWYoc3RydWN0IHdmeF92aWYgKnd2aWYsIHUzMiBxdWV1ZXMsCi0JCQkgIHN0cnVjdCBz a19idWZmX2hlYWQgKmRyb3BwZWQpCi17Ci0Jc3RydWN0IHdmeF9xdWV1ZSAqcXVldWU7Ci0JaW50 IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX05VTV9BQ1M7IGkrKykgewotCQlpZiAo IShCSVQoaSkgJiBxdWV1ZXMpKQotCQkJY29udGludWU7Ci0JCXF1ZXVlID0gJnd2aWYtPnR4X3F1 ZXVlW2ldOwotCQlpZiAoZHJvcHBlZCkKLQkJCXdmeF90eF9xdWV1ZV9kcm9wKHd2aWYsIHF1ZXVl LCBkcm9wcGVkKTsKLQl9Ci0JaWYgKHd2aWYtPndkZXYtPmNoaXBfZnJvemVuKQotCQlyZXR1cm47 Ci0JZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9OVU1fQUNTOyBpKyspIHsKLQkJaWYgKCEoQklU KGkpICYgcXVldWVzKSkKLQkJCWNvbnRpbnVlOwotCQlxdWV1ZSA9ICZ3dmlmLT50eF9xdWV1ZVtp XTsKLQkJaWYgKHdhaXRfZXZlbnRfdGltZW91dCh3dmlmLT53ZGV2LT50eF9kZXF1ZXVlLAotCQkJ CSAgICAgICB3ZnhfdHhfcXVldWVfZW1wdHkod3ZpZiwgcXVldWUpLAotCQkJCSAgICAgICBtc2Vj c190b19qaWZmaWVzKDEwMDApKSA8PSAwKQotCQkJZGV2X3dhcm4od3ZpZi0+d2Rldi0+ZGV2LAot CQkJCSAiZnJhbWVzIHF1ZXVlZCB3aGlsZSBmbHVzaGluZyB0eCBxdWV1ZXM/Iik7Ci0JfQotfQot Ci12b2lkIHdmeF9mbHVzaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIx MV92aWYgKnZpZiwKLQkgICAgICAgdTMyIHF1ZXVlcywgYm9vbCBkcm9wKQotewotCXN0cnVjdCB3 ZnhfZGV2ICp3ZGV2ID0gaHctPnByaXY7Ci0Jc3RydWN0IHNrX2J1ZmZfaGVhZCBkcm9wcGVkOwot CXN0cnVjdCB3ZnhfdmlmICp3dmlmOwotCXN0cnVjdCBoaWZfbXNnICpoaWY7Ci0Jc3RydWN0IHNr X2J1ZmYgKnNrYjsKLQotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmRyb3BwZWQpOwotCWlmICh2aWYp IHsKLQkJd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7Ci0JCXdmeF9mbHVz aF92aWYod3ZpZiwgcXVldWVzLCBkcm9wID8gJmRyb3BwZWQgOiBOVUxMKTsKLQl9IGVsc2Ugewot CQl3dmlmID0gTlVMTDsKLQkJd2hpbGUgKCh3dmlmID0gd3ZpZl9pdGVyYXRlKHdkZXYsIHd2aWYp KSAhPSBOVUxMKQotCQkJd2Z4X2ZsdXNoX3ZpZih3dmlmLCBxdWV1ZXMsIGRyb3AgPyAmZHJvcHBl ZCA6IE5VTEwpOwotCX0KLQl3ZnhfdHhfZmx1c2god2Rldik7Ci0JaWYgKHdkZXYtPmNoaXBfZnJv emVuKQotCQl3ZnhfcGVuZGluZ19kcm9wKHdkZXYsICZkcm9wcGVkKTsKLQl3aGlsZSAoKHNrYiA9 IHNrYl9kZXF1ZXVlKCZkcm9wcGVkKSkgIT0gTlVMTCkgewotCQloaWYgPSAoc3RydWN0IGhpZl9t c2cgKilza2ItPmRhdGE7Ci0JCXd2aWYgPSB3ZGV2X3RvX3d2aWYod2RldiwgaGlmLT5pbnRlcmZh Y2UpOwotCQlpZWVlODAyMTFfdHhfaW5mb19jbGVhcl9zdGF0dXMoSUVFRTgwMjExX1NLQl9DQihz a2IpKTsKLQkJd2Z4X3NrYl9kdG9yKHd2aWYsIHNrYik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9zdGFnaW5nL3dmeC9kYXRhX3R4LmggYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2RhdGFfdHgu aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDZjOWZmZjdhODcwLi4wMDAwMDAwMDAw MDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC9kYXRhX3R4LmgKKysrIC9kZXYvbnVsbApAQCAt MSw2NyArMCwwIEBACi0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICov Ci0vKgotICogRGF0YXBhdGggaW1wbGVtZW50YXRpb24uCi0gKgotICogQ29weXJpZ2h0IChjKSAy MDE3LTIwMjAsIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMpIDIw MTAsIFNULUVyaWNzc29uCi0gKi8KLSNpZm5kZWYgV0ZYX0RBVEFfVFhfSAotI2RlZmluZSBXRlhf REFUQV9UWF9ICi0KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bmV0L21hYzgw MjExLmg+Ci0KLSNpbmNsdWRlICJoaWZfYXBpX2NtZC5oIgotI2luY2x1ZGUgImhpZl9hcGlfbWli LmgiCi0KLXN0cnVjdCB3ZnhfdHhfcHJpdjsKLXN0cnVjdCB3ZnhfZGV2Owotc3RydWN0IHdmeF92 aWY7Ci0KLXN0cnVjdCB0eF9wb2xpY3kgewotCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKLQlpbnQg dXNhZ2VfY291bnQ7Ci0JdTggcmF0ZXNbMTJdOwotCWJvb2wgdXBsb2FkZWQ7Ci19OwotCi1zdHJ1 Y3QgdHhfcG9saWN5X2NhY2hlIHsKLQlzdHJ1Y3QgdHhfcG9saWN5IGNhY2hlW0hJRl9UWF9SRVRS WV9QT0xJQ1lfTUFYXTsKLQkvLyBGSVhNRTogdXNlIGEgdHJlZXMgYW5kIGRyb3AgaGFzaCBmcm9t IHR4X3BvbGljeQotCXN0cnVjdCBsaXN0X2hlYWQgdXNlZDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGZy ZWU7Ci0Jc3BpbmxvY2tfdCBsb2NrOwotfTsKLQotc3RydWN0IHdmeF90eF9wcml2IHsKLQlrdGlt ZV90IHhtaXRfdGltZXN0YW1wOwotfTsKLQotdm9pZCB3ZnhfdHhfcG9saWN5X2luaXQoc3RydWN0 IHdmeF92aWYgKnd2aWYpOwotdm9pZCB3ZnhfdHhfcG9saWN5X3VwbG9hZF93b3JrKHN0cnVjdCB3 b3JrX3N0cnVjdCAqd29yayk7Ci0KLXZvaWQgd2Z4X3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3 LCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wsCi0JICAgIHN0cnVjdCBza19i dWZmICpza2IpOwotdm9pZCB3ZnhfdHhfY29uZmlybV9jYihzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwg Y29uc3Qgc3RydWN0IGhpZl9jbmZfdHggKmFyZyk7Ci12b2lkIHdmeF9mbHVzaChzdHJ1Y3QgaWVl ZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkgICAgICAgdTMyIHF1 ZXVlcywgYm9vbCBkcm9wKTsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3Qgd2Z4X3R4X3ByaXYgKndm eF9za2JfdHhfcHJpdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBpZWVlODAyMTFf dHhfaW5mbyAqdHhfaW5mbzsKLQotCWlmICghc2tiKQotCQlyZXR1cm4gTlVMTDsKLQl0eF9pbmZv ID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCXJldHVybiAoc3RydWN0IHdmeF90eF9wcml2ICop dHhfaW5mby0+cmF0ZV9kcml2ZXJfZGF0YTsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgaGlm X3JlcV90eCAqd2Z4X3NrYl90eHJlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBo aWZfbXNnICpoaWYgPSAoc3RydWN0IGhpZl9tc2cgKilza2ItPmRhdGE7Ci0Jc3RydWN0IGhpZl9y ZXFfdHggKnJlcSA9IChzdHJ1Y3QgaGlmX3JlcV90eCAqKWhpZi0+Ym9keTsKLQotCXJldHVybiBy ZXE7Ci19Ci0KLSNlbmRpZiAvKiBXRlhfREFUQV9UWF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJz L3N0YWdpbmcvd2Z4L2RlYnVnLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2RlYnVnLmMKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlZGFkYTc4YzI1Zi4uMDAwMDAwMDAwMDAwCi0tLSBh L2RyaXZlcnMvc3RhZ2luZy93ZngvZGVidWcuYworKysgL2Rldi9udWxsCkBAIC0xLDM1OSArMCww IEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Ci0vKgotICogRGVi dWdmcyBpbnRlcmZhY2UuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24g TGFib3JhdG9yaWVzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCi0g Ki8KLSNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUu aD4KLSNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotCi0jaW5jbHVkZSAiZGVidWcuaCIKLSNpbmNs dWRlICJ3ZnguaCIKLSNpbmNsdWRlICJzdGEuaCIKLSNpbmNsdWRlICJtYWluLmgiCi0jaW5jbHVk ZSAiaGlmX3R4LmgiCi0jaW5jbHVkZSAiaGlmX3R4X21pYi5oIgotCi0jZGVmaW5lIENSRUFURV9U UkFDRV9QT0lOVFMKLSNpbmNsdWRlICJ0cmFjZXMuaCIKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB0 cmFjZV9wcmludF9mbGFncyBoaWZfbXNnX3ByaW50X21hcFtdID0gewotCWhpZl9tc2dfbGlzdCwK LX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdHJhY2VfcHJpbnRfZmxhZ3MgaGlmX21pYl9wcmlu dF9tYXBbXSA9IHsKLQloaWZfbWliX2xpc3QsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHRy YWNlX3ByaW50X2ZsYWdzIHdmeF9yZWdfcHJpbnRfbWFwW10gPSB7Ci0Jd2Z4X3JlZ19saXN0LAot fTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKmdldF9zeW1ib2wodW5zaWduZWQgbG9uZyB2YWwsCi0J CQkgICAgICBjb25zdCBzdHJ1Y3QgdHJhY2VfcHJpbnRfZmxhZ3MgKnN5bWJvbF9hcnJheSkKLXsK LQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IHN5bWJvbF9hcnJheVtpXS5tYXNrICE9IC0xOyBpKysp IHsKLQkJaWYgKHZhbCA9PSBzeW1ib2xfYXJyYXlbaV0ubWFzaykKLQkJCXJldHVybiBzeW1ib2xf YXJyYXlbaV0ubmFtZTsKLQl9Ci0KLQlyZXR1cm4gInVua25vd24iOwotfQotCi1jb25zdCBjaGFy ICpnZXRfaGlmX25hbWUodW5zaWduZWQgbG9uZyBpZCkKLXsKLQlyZXR1cm4gZ2V0X3N5bWJvbChp ZCwgaGlmX21zZ19wcmludF9tYXApOwotfQotCi1jb25zdCBjaGFyICpnZXRfbWliX25hbWUodW5z aWduZWQgbG9uZyBpZCkKLXsKLQlyZXR1cm4gZ2V0X3N5bWJvbChpZCwgaGlmX21pYl9wcmludF9t YXApOwotfQotCi1jb25zdCBjaGFyICpnZXRfcmVnX25hbWUodW5zaWduZWQgbG9uZyBpZCkKLXsK LQlyZXR1cm4gZ2V0X3N5bWJvbChpZCwgd2Z4X3JlZ19wcmludF9tYXApOwotfQotCi1zdGF0aWMg aW50IHdmeF9jb3VudGVyc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotewot CWludCByZXQsIGk7Ci0Jc3RydWN0IHdmeF9kZXYgKndkZXYgPSBzZXEtPnByaXZhdGU7Ci0Jc3Ry dWN0IGhpZl9taWJfZXh0ZW5kZWRfY291bnRfdGFibGUgY291bnRlcnNbM107Ci0KLQlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRShjb3VudGVycyk7IGkrKykgewotCQlyZXQgPSBoaWZfZ2V0X2Nv dW50ZXJzX3RhYmxlKHdkZXYsIGksIGNvdW50ZXJzICsgaSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJ cmV0dXJuIHJldDsKLQkJaWYgKHJldCA+IDApCi0JCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlzZXFf cHJpbnRmKHNlcSwgIiUtMjRzICUxMnMgJTEycyAlMTJzXG4iLAotCQkgICAiIiwgImdsb2JhbCIs ICJpZmFjZSAwIiwgImlmYWNlIDEiKTsKLQotI2RlZmluZSBQVVRfQ09VTlRFUihuYW1lKSBcCi0J c2VxX3ByaW50ZihzZXEsICIlLTI0cyAlMTJkICUxMmQgJTEyZFxuIiwgI25hbWUsIFwKLQkJICAg bGUzMl90b19jcHUoY291bnRlcnNbMl0uY291bnRfIyNuYW1lKSwgXAotCQkgICBsZTMyX3RvX2Nw dShjb3VudGVyc1swXS5jb3VudF8jI25hbWUpLCBcCi0JCSAgIGxlMzJfdG9fY3B1KGNvdW50ZXJz WzFdLmNvdW50XyMjbmFtZSkpCi0KLQlQVVRfQ09VTlRFUih0eF9wYWNrZXRzKTsKLQlQVVRfQ09V TlRFUih0eF9tdWx0aWNhc3RfZnJhbWVzKTsKLQlQVVRfQ09VTlRFUih0eF9mcmFtZXNfc3VjY2Vz cyk7Ci0JUFVUX0NPVU5URVIodHhfZnJhbWVfZmFpbHVyZXMpOwotCVBVVF9DT1VOVEVSKHR4X2Zy YW1lc19yZXRyaWVkKTsKLQlQVVRfQ09VTlRFUih0eF9mcmFtZXNfbXVsdGlfcmV0cmllZCk7Ci0K LQlQVVRfQ09VTlRFUihydHNfc3VjY2Vzcyk7Ci0JUFVUX0NPVU5URVIocnRzX2ZhaWx1cmVzKTsK LQlQVVRfQ09VTlRFUihhY2tfZmFpbHVyZXMpOwotCi0JUFVUX0NPVU5URVIocnhfcGFja2V0cyk7 Ci0JUFVUX0NPVU5URVIocnhfZnJhbWVzX3N1Y2Nlc3MpOwotCVBVVF9DT1VOVEVSKHJ4X3BhY2tl dF9lcnJvcnMpOwotCVBVVF9DT1VOVEVSKHBsY3BfZXJyb3JzKTsKLQlQVVRfQ09VTlRFUihmY3Nf ZXJyb3JzKTsKLQlQVVRfQ09VTlRFUihyeF9kZWNyeXB0aW9uX2ZhaWx1cmVzKTsKLQlQVVRfQ09V TlRFUihyeF9taWNfZmFpbHVyZXMpOwotCVBVVF9DT1VOVEVSKHJ4X25vX2tleV9mYWlsdXJlcyk7 Ci0JUFVUX0NPVU5URVIocnhfZnJhbWVfZHVwbGljYXRlcyk7Ci0JUFVUX0NPVU5URVIocnhfbXVs dGljYXN0X2ZyYW1lcyk7Ci0JUFVUX0NPVU5URVIocnhfY21hY2ljdl9lcnJvcnMpOwotCVBVVF9D T1VOVEVSKHJ4X2NtYWNfcmVwbGF5cyk7Ci0JUFVUX0NPVU5URVIocnhfbWdtdF9jY21wX3JlcGxh eXMpOwotCi0JUFVUX0NPVU5URVIocnhfYmVhY29uKTsKLQlQVVRfQ09VTlRFUihtaXNzX2JlYWNv bik7Ci0KLSN1bmRlZiBQVVRfQ09VTlRFUgotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo Y291bnRlcnNbMF0ucmVzZXJ2ZWQpOyBpKyspCi0JCXNlcV9wcmludGYoc2VxLCAicmVzZXJ2ZWRb JTAyZF0lMTJzICUxMmQgJTEyZCAlMTJkXG4iLCBpLCAiIiwKLQkJCSAgIGxlMzJfdG9fY3B1KGNv dW50ZXJzWzJdLnJlc2VydmVkW2ldKSwKLQkJCSAgIGxlMzJfdG9fY3B1KGNvdW50ZXJzWzBdLnJl c2VydmVkW2ldKSwKLQkJCSAgIGxlMzJfdG9fY3B1KGNvdW50ZXJzWzFdLnJlc2VydmVkW2ldKSk7 Ci0KLQlyZXR1cm4gMDsKLX0KLURFRklORV9TSE9XX0FUVFJJQlVURSh3ZnhfY291bnRlcnMpOwot Ci1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNoYW5uZWxfbmFtZXNbXSA9IHsKLQlbMF0gPSAi MU0iLAotCVsxXSA9ICIyTSIsCi0JWzJdID0gIjUuNU0iLAotCVszXSA9ICIxMU0iLAotCS8qIEVu dHJpZXMgNCBhbmQgNSBkb2VzIG5vdCBleGlzdCAqLwotCVs2XSA9ICI2TSIsCi0JWzddID0gIjlN IiwKLQlbOF0gPSAiMTJNIiwKLQlbOV0gPSAiMThNIiwKLQlbMTBdID0gIjI0TSIsCi0JWzExXSA9 ICIzNk0iLAotCVsxMl0gPSAiNDhNIiwKLQlbMTNdID0gIjU0TSIsCi0JWzE0XSA9ICJNQ1MwIiwK LQlbMTVdID0gIk1DUzEiLAotCVsxNl0gPSAiTUNTMiIsCi0JWzE3XSA9ICJNQ1MzIiwKLQlbMThd ID0gIk1DUzQiLAotCVsxOV0gPSAiTUNTNSIsCi0JWzIwXSA9ICJNQ1M2IiwKLQlbMjFdID0gIk1D UzciLAotfTsKLQotc3RhdGljIGludCB3Znhfcnhfc3RhdHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUg KnNlcSwgdm9pZCAqdikKLXsKLQlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IHNlcS0+cHJpdmF0ZTsK LQlzdHJ1Y3QgaGlmX3J4X3N0YXRzICpzdCA9ICZ3ZGV2LT5yeF9zdGF0czsKLQlpbnQgaTsKLQot CW11dGV4X2xvY2soJndkZXYtPnJ4X3N0YXRzX2xvY2spOwotCXNlcV9wcmludGYoc2VxLCAiVGlt ZXN0YW1wOiAlZHVzXG4iLCBzdC0+ZGF0ZSk7Ci0Jc2VxX3ByaW50ZihzZXEsICJMb3cgcG93ZXIg Y2xvY2s6IGZyZXF1ZW5jeSAldUh6LCBleHRlcm5hbCAlc1xuIiwKLQkJICAgbGUzMl90b19jcHUo c3QtPnB3cl9jbGtfZnJlcSksCi0JCSAgIHN0LT5pc19leHRfcHdyX2NsayA/ICJ5ZXMiIDogIm5v Iik7Ci0Jc2VxX3ByaW50ZihzZXEsCi0JCSAgICJOdW0uIG9mIGZyYW1lczogJWQsIFBFUiAoeDEw ZTQpOiAlZCwgVGhyb3VnaHB1dDogJWRLYnBzL3NcbiIsCi0JCSAgIHN0LT5uYl9yeF9mcmFtZSwg c3QtPnBlcl90b3RhbCwgc3QtPnRocm91Z2hwdXQpOwotCXNlcV9wdXRzKHNlcSwgIiAgICAgICBO dW0uIG9mICAgICAgUEVSICAgICBSU1NJICAgICAgU05SICAgICAgQ0ZPXG4iKTsKLQlzZXFfcHV0 cyhzZXEsICIgICAgICAgIGZyYW1lcyAgKHgxMGU0KSAgICAoZEJtKSAgICAgKGRCKSAgICAoa0h6 KVxuIik7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2hhbm5lbF9uYW1lcyk7IGkrKykg ewotCQlpZiAoY2hhbm5lbF9uYW1lc1tpXSkKLQkJCXNlcV9wcmludGYoc2VxLCAiJTVzICU4ZCAl OGQgJThkICU4ZCAlOGRcbiIsCi0JCQkJICAgY2hhbm5lbF9uYW1lc1tpXSwKLQkJCQkgICBsZTMy X3RvX2NwdShzdC0+bmJfcnhfYnlfcmF0ZVtpXSksCi0JCQkJICAgbGUxNl90b19jcHUoc3QtPnBl cltpXSksCi0JCQkJICAgKHMxNilsZTE2X3RvX2NwdShzdC0+cnNzaVtpXSkgLyAxMDAsCi0JCQkJ ICAgKHMxNilsZTE2X3RvX2NwdShzdC0+c25yW2ldKSAvIDEwMCwKLQkJCQkgICAoczE2KWxlMTZf dG9fY3B1KHN0LT5jZm9baV0pKTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZ3ZGV2LT5yeF9zdGF0c19s b2NrKTsKLQotCXJldHVybiAwOwotfQotREVGSU5FX1NIT1dfQVRUUklCVVRFKHdmeF9yeF9zdGF0 cyk7Ci0KLXN0YXRpYyBpbnQgd2Z4X3R4X3Bvd2VyX2xvb3Bfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUg KnNlcSwgdm9pZCAqdikKLXsKLQlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IHNlcS0+cHJpdmF0ZTsK LQlzdHJ1Y3QgaGlmX3R4X3Bvd2VyX2xvb3BfaW5mbyAqc3QgPSAmd2Rldi0+dHhfcG93ZXJfbG9v cF9pbmZvOwotCWludCB0bXA7Ci0KLQltdXRleF9sb2NrKCZ3ZGV2LT50eF9wb3dlcl9sb29wX2lu Zm9fbG9jayk7Ci0JdG1wID0gbGUxNl90b19jcHUoc3QtPnR4X2dhaW5fZGlnKTsKLQlzZXFfcHJp bnRmKHNlcSwgIlR4IGdhaW4gZGlnaXRhbDogJWRcbiIsIHRtcCk7Ci0JdG1wID0gbGUxNl90b19j cHUoc3QtPnR4X2dhaW5fcGEpOwotCXNlcV9wcmludGYoc2VxLCAiVHggZ2FpbiBQQTogJWRcbiIs IHRtcCk7Ci0JdG1wID0gKHMxNilsZTE2X3RvX2NwdShzdC0+dGFyZ2V0X3BvdXQpOwotCXNlcV9w cmludGYoc2VxLCAiVGFyZ2V0IFBvdXQ6ICVkLiUwMmQgZEJtXG4iLCB0bXAgLyA0LCAodG1wICUg NCkgKiAyNSk7Ci0JdG1wID0gKHMxNilsZTE2X3RvX2NwdShzdC0+cF9lc3RpbWF0aW9uKTsKLQlz ZXFfcHJpbnRmKHNlcSwgIkZFTSBQb3V0OiAlZC4lMDJkIGRCbVxuIiwgdG1wIC8gNCwgKHRtcCAl IDQpICogMjUpOwotCXRtcCA9IGxlMTZfdG9fY3B1KHN0LT52cGRldCk7Ci0Jc2VxX3ByaW50Zihz ZXEsICJWcGRldDogJWQgbVZcbiIsIHRtcCk7Ci0Jc2VxX3ByaW50ZihzZXEsICJNZWFzdXJlIGlu ZGV4OiAlZFxuIiwgc3QtPm1lYXN1cmVtZW50X2luZGV4KTsKLQltdXRleF91bmxvY2soJndkZXYt PnR4X3Bvd2VyX2xvb3BfaW5mb19sb2NrKTsKLQotCXJldHVybiAwOwotfQotREVGSU5FX1NIT1df QVRUUklCVVRFKHdmeF90eF9wb3dlcl9sb29wKTsKLQotc3RhdGljIHNzaXplX3Qgd2Z4X3NlbmRf cGRzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAotCQkJCSAgY29uc3QgY2hhciBfX3VzZXIgKnVz ZXJfYnVmLAotCQkJCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IHdm eF9kZXYgKndkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JY2hhciAqYnVmOwotCWludCByZXQ7 Ci0KLQlpZiAoKnBwb3MgIT0gMCkgewotCQlkZXZfZGJnKHdkZXYtPmRldiwgIlBEUyBkYXRhIG11 c3QgYmUgd3JpdHRlbiBpbiBvbmUgdHJhbnNhY3Rpb24iKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9 Ci0JYnVmID0gbWVtZHVwX3VzZXIodXNlcl9idWYsIGNvdW50KTsKLQlpZiAoSVNfRVJSKGJ1Zikp Ci0JCXJldHVybiBQVFJfRVJSKGJ1Zik7Ci0JKnBwb3MgPSAqcHBvcyArIGNvdW50OwotCXJldCA9 IHdmeF9zZW5kX3Bkcyh3ZGV2LCBidWYsIGNvdW50KTsKLQlrZnJlZShidWYpOwotCWlmIChyZXQg PCAwKQotCQlyZXR1cm4gcmV0OwotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIGNvbnN0IHN0 cnVjdCBmaWxlX29wZXJhdGlvbnMgd2Z4X3NlbmRfcGRzX2ZvcHMgPSB7Ci0JLm9wZW4gPSBzaW1w bGVfb3BlbiwKLQkud3JpdGUgPSB3Znhfc2VuZF9wZHNfd3JpdGUsCi19OwotCi1zdHJ1Y3QgZGJn ZnNfaGlmX21zZyB7Ci0Jc3RydWN0IHdmeF9kZXYgKndkZXY7Ci0Jc3RydWN0IGNvbXBsZXRpb24g Y29tcGxldGU7Ci0JdTggcmVwbHlbMTAyNF07Ci0JaW50IHJldDsKLX07Ci0KLXN0YXRpYyBzc2l6 ZV90IHdmeF9zZW5kX2hpZl9tc2dfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJICAgICAg Y29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAotCQkJCSAgICAgIHNpemVfdCBjb3VudCwgbG9m Zl90ICpwcG9zKQotewotCXN0cnVjdCBkYmdmc19oaWZfbXNnICpjb250ZXh0ID0gZmlsZS0+cHJp dmF0ZV9kYXRhOwotCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gY29udGV4dC0+d2RldjsKLQlzdHJ1 Y3QgaGlmX21zZyAqcmVxdWVzdDsKLQotCWlmIChjb21wbGV0aW9uX2RvbmUoJmNvbnRleHQtPmNv bXBsZXRlKSkgewotCQlkZXZfZGJnKHdkZXYtPmRldiwgInJlYWQgcHJldmlvdXMgcmVzdWx0IGJl Zm9yZSBzdGFydCBhIG5ldyBvbmVcbiIpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQlpZiAoY291 bnQgPCBzaXplb2Yoc3RydWN0IGhpZl9tc2cpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8vIHdm eF9jbWRfc2VuZCgpIGNoZWNrcyB0aGF0IHJlcGx5IGJ1ZmZlciBpcyB3aWRlIGVub3VnaCwgYnV0 IGRvZXMgbm90Ci0JLy8gcmV0dXJuIHByZWNpc2UgbGVuZ3RoIHJlYWQuIFVzZXIgaGF2ZSB0byBr bm93IGhvdyBtYW55IGJ5dGVzIHNob3VsZAotCS8vIGJlIHJlYWQuIEZpbGxpbmcgcmVwbHkgYnVm ZmVyIHdpdGggYSBtZW1vcnkgcGF0dGVybiBtYXkgaGVscCB1c2VyLgotCW1lbXNldChjb250ZXh0 LT5yZXBseSwgMHhGRiwgc2l6ZW9mKGNvbnRleHQtPnJlcGx5KSk7Ci0JcmVxdWVzdCA9IG1lbWR1 cF91c2VyKHVzZXJfYnVmLCBjb3VudCk7Ci0JaWYgKElTX0VSUihyZXF1ZXN0KSkKLQkJcmV0dXJu IFBUUl9FUlIocmVxdWVzdCk7Ci0JaWYgKGxlMTZfdG9fY3B1KHJlcXVlc3QtPmxlbikgIT0gY291 bnQpIHsKLQkJa2ZyZWUocmVxdWVzdCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQljb250ZXh0 LT5yZXQgPSB3ZnhfY21kX3NlbmQod2RldiwgcmVxdWVzdCwgY29udGV4dC0+cmVwbHksCi0JCQkJ ICAgIHNpemVvZihjb250ZXh0LT5yZXBseSksIGZhbHNlKTsKLQotCWtmcmVlKHJlcXVlc3QpOwot CWNvbXBsZXRlKCZjb250ZXh0LT5jb21wbGV0ZSk7Ci0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0 aWMgc3NpemVfdCB3Znhfc2VuZF9oaWZfbXNnX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIg X191c2VyICp1c2VyX2J1ZiwKLQkJCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQot ewotCXN0cnVjdCBkYmdmc19oaWZfbXNnICpjb250ZXh0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwot CWludCByZXQ7Ci0KLQlpZiAoY291bnQgPiBzaXplb2YoY29udGV4dC0+cmVwbHkpKQotCQlyZXR1 cm4gLUVJTlZBTDsKLQlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoJmNv bnRleHQtPmNvbXBsZXRlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCWlmIChjb250ZXh0 LT5yZXQgPCAwKQotCQlyZXR1cm4gY29udGV4dC0+cmV0OwotCS8vIEJlIGNhcmVmdWwsIHdyaXRl KCkgaXMgd2FpdGluZyBmb3IgYSBmdWxsIG1lc3NhZ2Ugd2hpbGUgcmVhZCgpCi0JLy8gb25seSBy ZXR1cm5zIGEgcGF5bG9hZAotCWlmIChjb3B5X3RvX3VzZXIodXNlcl9idWYsIGNvbnRleHQtPnJl cGx5LCBjb3VudCkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1z dGF0aWMgaW50IHdmeF9zZW5kX2hpZl9tc2dfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1 Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgZGJnZnNfaGlmX21zZyAqY29udGV4dCA9IGt6YWxs b2Moc2l6ZW9mKCpjb250ZXh0KSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIWNvbnRleHQpCi0JCXJl dHVybiAtRU5PTUVNOwotCWNvbnRleHQtPndkZXYgPSBpbm9kZS0+aV9wcml2YXRlOwotCWluaXRf Y29tcGxldGlvbigmY29udGV4dC0+Y29tcGxldGUpOwotCWZpbGUtPnByaXZhdGVfZGF0YSA9IGNv bnRleHQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgd2Z4X3NlbmRfaGlmX21zZ19yZWxl YXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBk Ymdmc19oaWZfbXNnICpjb250ZXh0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi0Ja2ZyZWUoY29u dGV4dCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRp b25zIHdmeF9zZW5kX2hpZl9tc2dfZm9wcyA9IHsKLQkub3BlbiA9IHdmeF9zZW5kX2hpZl9tc2df b3BlbiwKLQkucmVsZWFzZSA9IHdmeF9zZW5kX2hpZl9tc2dfcmVsZWFzZSwKLQkud3JpdGUgPSB3 Znhfc2VuZF9oaWZfbXNnX3dyaXRlLAotCS5yZWFkID0gd2Z4X3NlbmRfaGlmX21zZ19yZWFkLAot fTsKLQotc3RhdGljIGludCB3ZnhfcHNfdGltZW91dF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkK LXsKLQlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IChzdHJ1Y3Qgd2Z4X2RldiAqKWRhdGE7Ci0Jc3Ry dWN0IHdmeF92aWYgKnd2aWY7Ci0KLQl3ZGV2LT5mb3JjZV9wc190aW1lb3V0ID0gdmFsOwotCXd2 aWYgPSBOVUxMOwotCXdoaWxlICgod3ZpZiA9IHd2aWZfaXRlcmF0ZSh3ZGV2LCB3dmlmKSkgIT0g TlVMTCkKLQkJd2Z4X3VwZGF0ZV9wbSh3dmlmKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlu dCB3ZnhfcHNfdGltZW91dF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpCi17Ci0Jc3RydWN0IHdm eF9kZXYgKndkZXYgPSAoc3RydWN0IHdmeF9kZXYgKilkYXRhOwotCi0JKnZhbCA9IHdkZXYtPmZv cmNlX3BzX3RpbWVvdXQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLURFRklORV9ERUJVR0ZTX0FUVFJJQlVU RSh3ZnhfcHNfdGltZW91dF9mb3BzLCB3ZnhfcHNfdGltZW91dF9nZXQsIHdmeF9wc190aW1lb3V0 X3NldCwgIiVsbGRcbiIpOwotCi1pbnQgd2Z4X2RlYnVnX2luaXQoc3RydWN0IHdmeF9kZXYgKndk ZXYpCi17Ci0Jc3RydWN0IGRlbnRyeSAqZDsKLQotCWQgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoIndm eCIsIHdkZXYtPmh3LT53aXBoeS0+ZGVidWdmc2Rpcik7Ci0JZGVidWdmc19jcmVhdGVfZmlsZSgi Y291bnRlcnMiLCAwNDQ0LCBkLCB3ZGV2LCAmd2Z4X2NvdW50ZXJzX2ZvcHMpOwotCWRlYnVnZnNf Y3JlYXRlX2ZpbGUoInJ4X3N0YXRzIiwgMDQ0NCwgZCwgd2RldiwgJndmeF9yeF9zdGF0c19mb3Bz KTsKLQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ0eF9wb3dlcl9sb29wIiwgMDQ0NCwgZCwgd2RldiwK LQkJCSAgICAmd2Z4X3R4X3Bvd2VyX2xvb3BfZm9wcyk7Ci0JZGVidWdmc19jcmVhdGVfZmlsZSgi c2VuZF9wZHMiLCAwMjAwLCBkLCB3ZGV2LCAmd2Z4X3NlbmRfcGRzX2ZvcHMpOwotCWRlYnVnZnNf Y3JlYXRlX2ZpbGUoInNlbmRfaGlmX21zZyIsIDA2MDAsIGQsIHdkZXYsCi0JCQkgICAgJndmeF9z ZW5kX2hpZl9tc2dfZm9wcyk7Ci0JZGVidWdmc19jcmVhdGVfZmlsZSgicHNfdGltZW91dCIsIDA2 MDAsIGQsIHdkZXYsICZ3ZnhfcHNfdGltZW91dF9mb3BzKTsKLQotCXJldHVybiAwOwotfQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9kZWJ1Zy5oIGIvZHJpdmVycy9zdGFnaW5nL3dm eC9kZWJ1Zy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjJmODRkNjRjOWUuLjAw MDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2RlYnVnLmgKKysrIC9kZXYvbnVs bApAQCAtMSwxOSArMCwwIEBACi0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1v bmx5ICovCi0vKgotICogRGVidWdmcyBpbnRlcmZhY2UuCi0gKgotICogQ29weXJpZ2h0IChjKSAy MDE3LTIwMTksIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMpIDIw MTEsIFNULUVyaWNzc29uCi0gKi8KLSNpZm5kZWYgV0ZYX0RFQlVHX0gKLSNkZWZpbmUgV0ZYX0RF QlVHX0gKLQotc3RydWN0IHdmeF9kZXY7Ci0KLWludCB3ZnhfZGVidWdfaW5pdChzdHJ1Y3Qgd2Z4 X2RldiAqd2Rldik7Ci0KLWNvbnN0IGNoYXIgKmdldF9oaWZfbmFtZSh1bnNpZ25lZCBsb25nIGlk KTsKLWNvbnN0IGNoYXIgKmdldF9taWJfbmFtZSh1bnNpZ25lZCBsb25nIGlkKTsKLWNvbnN0IGNo YXIgKmdldF9yZWdfbmFtZSh1bnNpZ25lZCBsb25nIGlkKTsKLQotI2VuZGlmIC8qIFdGWF9ERUJV R19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2Z3aW8uYyBiL2RyaXZlcnMv c3RhZ2luZy93ZngvZndpby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjhhZWMw MmQxNjkuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2Z3aW8uYworKysg L2Rldi9udWxsCkBAIC0xLDQwNSArMCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMC1vbmx5Ci0vKgotICogRmlybXdhcmUgbG9hZGluZy4KLSAqCi0gKiBDb3B5cmlnaHQg KGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSAqIENvcHlyaWdodCAo YykgMjAxMCwgU1QtRXJpY3Nzb24KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+Ci0j aW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8 bGludXgvYml0ZmllbGQuaD4KLQotI2luY2x1ZGUgImZ3aW8uaCIKLSNpbmNsdWRlICJ3ZnguaCIK LSNpbmNsdWRlICJod2lvLmgiCi0KLS8vIEFkZHJlc3NlcyBiZWxvdyBhcmUgaW4gU1JBTSBhcmVh Ci0jZGVmaW5lIFdGWF9ETkxEX0ZJRk8gICAgICAgICAgICAgMHgwOTAwNDAwMAotI2RlZmluZSAg ICAgRE5MRF9CTE9DS19TSVpFICAgICAgICAgICAweDA0MDAKLSNkZWZpbmUgICAgIEROTERfRklG T19TSVpFICAgICAgICAgICAgMHg4MDAwIC8vICgzMiAqIEROTERfQkxPQ0tfU0laRSkKLS8vIERv d25sb2FkIENvbnRyb2wgQXJlYSAoRENBKQotI2RlZmluZSBXRlhfRENBX0lNQUdFX1NJWkUgICAg ICAgIDB4MDkwMEMwMDAKLSNkZWZpbmUgV0ZYX0RDQV9QVVQgICAgICAgICAgICAgICAweDA5MDBD MDA0Ci0jZGVmaW5lIFdGWF9EQ0FfR0VUICAgICAgICAgICAgICAgMHgwOTAwQzAwOAotI2RlZmlu ZSBXRlhfRENBX0hPU1RfU1RBVFVTICAgICAgIDB4MDkwMEMwMEMKLSNkZWZpbmUgICAgIEhPU1Rf UkVBRFkgICAgICAgICAgICAgICAgMHg4NzY1NDMyMQotI2RlZmluZSAgICAgSE9TVF9JTkZPX1JF QUQgICAgICAgICAgICAweEE3NTNCRDk5Ci0jZGVmaW5lICAgICBIT1NUX1VQTE9BRF9QRU5ESU5H ICAgICAgIDB4QUJDRERDQkEKLSNkZWZpbmUgICAgIEhPU1RfVVBMT0FEX0NPTVBMRVRFICAgICAg MHhENEM2NEE5OQotI2RlZmluZSAgICAgSE9TVF9PS19UT19KVU1QICAgICAgICAgICAweDE3NEZD ODgyCi0jZGVmaW5lIFdGWF9EQ0FfTkNQX1NUQVRVUyAgICAgICAgMHgwOTAwQzAxMAotI2RlZmlu ZSAgICAgTkNQX05PVF9SRUFEWSAgICAgICAgICAgICAweDEyMzQ1Njc4Ci0jZGVmaW5lICAgICBO Q1BfUkVBRFkgICAgICAgICAgICAgICAgIDB4ODc2NTQzMjEKLSNkZWZpbmUgICAgIE5DUF9JTkZP X1JFQURZICAgICAgICAgICAgMHhCRDUzRUY5OQotI2RlZmluZSAgICAgTkNQX0RPV05MT0FEX1BF TkRJTkcgICAgICAweEFCQ0REQ0JBCi0jZGVmaW5lICAgICBOQ1BfRE9XTkxPQURfQ09NUExFVEUg ICAgIDB4Q0FGRUZFQ0EKLSNkZWZpbmUgICAgIE5DUF9BVVRIX09LICAgICAgICAgICAgICAgMHhE NEM2NEE5OQotI2RlZmluZSAgICAgTkNQX0FVVEhfRkFJTCAgICAgICAgICAgICAweDE3NEZDODgy Ci0jZGVmaW5lICAgICBOQ1BfUFVCX0tFWV9SRFkgICAgICAgICAgIDB4N0FCNDFEMTkKLSNkZWZp bmUgV0ZYX0RDQV9GV19TSUdOQVRVUkUgICAgICAweDA5MDBDMDE0Ci0jZGVmaW5lICAgICBGV19T SUdOQVRVUkVfU0laRSAgICAgICAgIDB4NDAKLSNkZWZpbmUgV0ZYX0RDQV9GV19IQVNIICAgICAg ICAgICAweDA5MDBDMDU0Ci0jZGVmaW5lICAgICBGV19IQVNIX1NJWkUgICAgICAgICAgICAgIDB4 MDgKLSNkZWZpbmUgV0ZYX0RDQV9GV19WRVJTSU9OICAgICAgICAweDA5MDBDMDVDCi0jZGVmaW5l ICAgICBGV19WRVJTSU9OX1NJWkUgICAgICAgICAgIDB4MDQKLSNkZWZpbmUgV0ZYX0RDQV9SRVNF UlZFRCAgICAgICAgICAweDA5MDBDMDYwCi0jZGVmaW5lICAgICBEQ0FfUkVTRVJWRURfU0laRSAg ICAgICAgIDB4MjAKLSNkZWZpbmUgV0ZYX1NUQVRVU19JTkZPICAgICAgICAgICAweDA5MDBDMDgw Ci0jZGVmaW5lIFdGWF9CT09UTE9BREVSX0xBQkVMICAgICAgMHgwOTAwQzA4NAotI2RlZmluZSAg ICAgQk9PVExPQURFUl9MQUJFTF9TSVpFICAgICAweDNDCi0jZGVmaW5lIFdGWF9QVEVfSU5GTyAg ICAgICAgICAgICAgMHgwOTAwQzBDMAotI2RlZmluZSAgICAgUFRFX0lORk9fS0VZU0VUX0lEWCAg ICAgICAweDBECi0jZGVmaW5lICAgICBQVEVfSU5GT19TSVpFICAgICAgICAgICAgIDB4MTAKLSNk ZWZpbmUgV0ZYX0VSUl9JTkZPICAgICAgICAgICAgICAweDA5MDBDMEQwCi0jZGVmaW5lICAgICBF UlJfSU5WQUxJRF9TRUNfVFlQRSAgICAgIDB4MDUKLSNkZWZpbmUgICAgIEVSUl9TSUdfVkVSSUZf RkFJTEVEICAgICAgMHgwRgotI2RlZmluZSAgICAgRVJSX0FFU19DVFJMX0tFWSAgICAgICAgICAw eDEwCi0jZGVmaW5lICAgICBFUlJfRUNDX1BVQl9LRVkgICAgICAgICAgIDB4MTEKLSNkZWZpbmUg ICAgIEVSUl9NQUNfS0VZICAgICAgICAgICAgICAgMHgxOAotCi0jZGVmaW5lIERDQV9USU1FT1VU ICA1MCAvLyBtaWxsaXNlY29uZHMKLSNkZWZpbmUgV0FLRVVQX1RJTUVPVVQgMjAwIC8vIG1pbGxp c2Vjb25kcwotCi1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGZ3aW9fZXJyb3JzW10gPSB7Ci0J W0VSUl9JTlZBTElEX1NFQ19UWVBFXSA9ICJJbnZhbGlkIHNlY3Rpb24gdHlwZSBvciB3cm9uZyBl bmNyeXB0aW9uIiwKLQlbRVJSX1NJR19WRVJJRl9GQUlMRURdID0gIlNpZ25hdHVyZSB2ZXJpZmlj YXRpb24gZmFpbGVkIiwKLQlbRVJSX0FFU19DVFJMX0tFWV0gPSAiQUVTIGNvbnRyb2wga2V5IG5v dCBpbml0aWFsaXplZCIsCi0JW0VSUl9FQ0NfUFVCX0tFWV0gPSAiRUNDIHB1YmxpYyBrZXkgbm90 IGluaXRpYWxpemVkIiwKLQlbRVJSX01BQ19LRVldID0gIk1BQyBrZXkgbm90IGluaXRpYWxpemVk IiwKLX07Ci0KLS8qCi0gKiByZXF1ZXN0X2Zpcm13YXJlKCkgYWxsb2NhdGUgZGF0YSB1c2luZyB2 bWFsbG9jKCkuIEl0IGlzIG5vdCBjb21wYXRpYmxlIHdpdGgKLSAqIHVuZGVybHlpbmcgaGFyZHdh cmUgdGhhdCB1c2UgRE1BLiBGdW5jdGlvbiBiZWxvdyBkZXRlY3QgdGhpcyBjYXNlIGFuZAotICog YWxsb2NhdGUgYSBib3VuY2UgYnVmZmVyIGlmIG5lY2Vzc2FyeS4KLSAqCi0gKiBOb3RpY2UgdGhh dCwgaW4gZG91YnQsIHlvdSBjYW4gZW5hYmxlIENPTkZJR19ERUJVR19TRyB0byBhc2sga2VybmVs IHRvCi0gKiBkZXRlY3QgdGhpcyBwcm9ibGVtIGF0IHJ1bnRpbWUgIChlbHNlLCBrZXJuZWwgc2ls ZW50bHkgZmFpbCkuCi0gKgotICogTk9URTogaXQgbWF5IGFsc28gYmUgcG9zc2libGUgdG8gdXNl ICdwYWdlcycgZnJvbSBzdHJ1Y3QgZmlybXdhcmUgYW5kIGF2b2lkCi0gKiBib3VuY2UgYnVmZmVy Ci0gKi8KLXN0YXRpYyBpbnQgc3JhbV93cml0ZV9kbWFfc2FmZShzdHJ1Y3Qgd2Z4X2RldiAqd2Rl diwgdTMyIGFkZHIsIGNvbnN0IHU4ICpidWYsCi0JCQkgICAgICAgc2l6ZV90IGxlbikKLXsKLQlp bnQgcmV0OwotCWNvbnN0IHU4ICp0bXA7Ci0KLQlpZiAoIXZpcnRfYWRkcl92YWxpZChidWYpKSB7 Ci0JCXRtcCA9IGttZW1kdXAoYnVmLCBsZW4sIEdGUF9LRVJORUwpOwotCQlpZiAoIXRtcCkKLQkJ CXJldHVybiAtRU5PTUVNOwotCX0gZWxzZSB7Ci0JCXRtcCA9IGJ1ZjsKLQl9Ci0JcmV0ID0gc3Jh bV9idWZfd3JpdGUod2RldiwgYWRkciwgdG1wLCBsZW4pOwotCWlmICh0bXAgIT0gYnVmKQotCQlr ZnJlZSh0bXApOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgZ2V0X2Zpcm13YXJlKHN0 cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIga2V5c2V0X2NoaXAsCi0JCQljb25zdCBzdHJ1Y3QgZmly bXdhcmUgKipmdywgaW50ICpmaWxlX29mZnNldCkKLXsKLQlpbnQga2V5c2V0X2ZpbGU7Ci0JY2hh ciBmaWxlbmFtZVsyNTZdOwotCWNvbnN0IGNoYXIgKmRhdGE7Ci0JaW50IHJldDsKLQotCXNucHJp bnRmKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLCAiJXNfJTAyWC5zZWMiLAotCQkgd2Rldi0+ cGRhdGEuZmlsZV9mdywga2V5c2V0X2NoaXApOwotCXJldCA9IGZpcm13YXJlX3JlcXVlc3Rfbm93 YXJuKGZ3LCBmaWxlbmFtZSwgd2Rldi0+ZGV2KTsKLQlpZiAocmV0KSB7Ci0JCWRldl9pbmZvKHdk ZXYtPmRldiwgImNhbid0IGxvYWQgJXMsIGZhbGxpbmcgYmFjayB0byAlcy5zZWNcbiIsCi0JCQkg ZmlsZW5hbWUsIHdkZXYtPnBkYXRhLmZpbGVfZncpOwotCQlzbnByaW50ZihmaWxlbmFtZSwgc2l6 ZW9mKGZpbGVuYW1lKSwgIiVzLnNlYyIsCi0JCQkgd2Rldi0+cGRhdGEuZmlsZV9mdyk7Ci0JCXJl dCA9IHJlcXVlc3RfZmlybXdhcmUoZncsIGZpbGVuYW1lLCB3ZGV2LT5kZXYpOwotCQlpZiAocmV0 KSB7Ci0JCQlkZXZfZXJyKHdkZXYtPmRldiwgImNhbid0IGxvYWQgJXNcbiIsIGZpbGVuYW1lKTsK LQkJCSpmdyA9IE5VTEw7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQotCi0JZGF0YSA9ICgqZncp LT5kYXRhOwotCWlmIChtZW1jbXAoZGF0YSwgIktFWVNFVCIsIDYpICE9IDApIHsKLQkJLy8gTGVn YWN5IGZpcm13YXJlIGZvcm1hdAotCQkqZmlsZV9vZmZzZXQgPSAwOwotCQlrZXlzZXRfZmlsZSA9 IDB4OTA7Ci0JfSBlbHNlIHsKLQkJKmZpbGVfb2Zmc2V0ID0gODsKLQkJa2V5c2V0X2ZpbGUgPSAo aGV4X3RvX2JpbihkYXRhWzZdKSAqIDE2KSB8IGhleF90b19iaW4oZGF0YVs3XSk7Ci0JCWlmIChr ZXlzZXRfZmlsZSA8IDApIHsKLQkJCWRldl9lcnIod2Rldi0+ZGV2LCAiJXMgY29ycnVwdGVkXG4i LCBmaWxlbmFtZSk7Ci0JCQlyZWxlYXNlX2Zpcm13YXJlKCpmdyk7Ci0JCQkqZncgPSBOVUxMOwot CQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9Ci0JaWYgKGtleXNldF9maWxlICE9IGtleXNldF9j aGlwKSB7Ci0JCWRldl9lcnIod2Rldi0+ZGV2LCAiZmlybXdhcmUga2V5c2V0IGlzIGluY29tcGF0 aWJsZSB3aXRoIGNoaXAgKGZpbGU6IDB4JTAyWCwgY2hpcDogMHglMDJYKVxuIiwKLQkJCWtleXNl dF9maWxlLCBrZXlzZXRfY2hpcCk7Ci0JCXJlbGVhc2VfZmlybXdhcmUoKmZ3KTsKLQkJKmZ3ID0g TlVMTDsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCXdkZXYtPmtleXNldCA9IGtleXNldF9maWxl OwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHdhaXRfbmNwX3N0YXR1cyhzdHJ1Y3Qgd2Z4 X2RldiAqd2RldiwgdTMyIHN0YXR1cykKLXsKLQlrdGltZV90IG5vdywgc3RhcnQ7Ci0JdTMyIHJl ZzsKLQlpbnQgcmV0OwotCi0Jc3RhcnQgPSBrdGltZV9nZXQoKTsKLQlmb3IgKDs7KSB7Ci0JCXJl dCA9IHNyYW1fcmVnX3JlYWQod2RldiwgV0ZYX0RDQV9OQ1BfU1RBVFVTLCAmcmVnKTsKLQkJaWYg KHJldCA8IDApCi0JCQlyZXR1cm4gLUVJTzsKLQkJbm93ID0ga3RpbWVfZ2V0KCk7Ci0JCWlmIChy ZWcgPT0gc3RhdHVzKQotCQkJYnJlYWs7Ci0JCWlmIChrdGltZV9hZnRlcihub3csIGt0aW1lX2Fk ZF9tcyhzdGFydCwgRENBX1RJTUVPVVQpKSkKLQkJCXJldHVybiAtRVRJTUVET1VUOwotCX0KLQlp ZiAoa3RpbWVfY29tcGFyZShub3csIHN0YXJ0KSkKLQkJZGV2X2RiZyh3ZGV2LT5kZXYsICJjaGlw IGFuc3dlciBhZnRlciAlbGxkdXNcbiIsCi0JCQlrdGltZV91c19kZWx0YShub3csIHN0YXJ0KSk7 Ci0JZWxzZQotCQlkZXZfZGJnKHdkZXYtPmRldiwgImNoaXAgYW5zd2VyIGltbWVkaWF0ZWx5XG4i KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB1cGxvYWRfZmlybXdhcmUoc3RydWN0IHdm eF9kZXYgKndkZXYsIGNvbnN0IHU4ICpkYXRhLCBzaXplX3QgbGVuKQotewotCWludCByZXQ7Ci0J dTMyIG9mZnMsIGJ5dGVzX2RvbmUgPSAwOwotCWt0aW1lX3Qgbm93LCBzdGFydDsKLQotCWlmIChs ZW4gJSBETkxEX0JMT0NLX1NJWkUpIHsKLQkJZGV2X2Vycih3ZGV2LT5kZXYsICJmaXJtd2FyZSBz aXplIGlzIG5vdCBhbGlnbmVkLiBCdWZmZXIgb3ZlcnJ1biB3aWxsIG9jY3VyXG4iKTsKLQkJcmV0 dXJuIC1FSU87Ci0JfQotCW9mZnMgPSAwOwotCXdoaWxlIChvZmZzIDwgbGVuKSB7Ci0JCXN0YXJ0 ID0ga3RpbWVfZ2V0KCk7Ci0JCWZvciAoOzspIHsKLQkJCW5vdyA9IGt0aW1lX2dldCgpOwotCQkJ aWYgKG9mZnMgKyBETkxEX0JMT0NLX1NJWkUgLSBieXRlc19kb25lIDwgRE5MRF9GSUZPX1NJWkUp Ci0JCQkJYnJlYWs7Ci0JCQlpZiAoa3RpbWVfYWZ0ZXIobm93LCBrdGltZV9hZGRfbXMoc3RhcnQs IERDQV9USU1FT1VUKSkpCi0JCQkJcmV0dXJuIC1FVElNRURPVVQ7Ci0JCQlyZXQgPSBzcmFtX3Jl Z19yZWFkKHdkZXYsIFdGWF9EQ0FfR0VULCAmYnl0ZXNfZG9uZSk7Ci0JCQlpZiAocmV0IDwgMCkK LQkJCQlyZXR1cm4gcmV0OwotCQl9Ci0JCWlmIChrdGltZV9jb21wYXJlKG5vdywgc3RhcnQpKQot CQkJZGV2X2RiZyh3ZGV2LT5kZXYsICJhbnN3ZXIgYWZ0ZXIgJWxsZHVzXG4iLAotCQkJCWt0aW1l X3VzX2RlbHRhKG5vdywgc3RhcnQpKTsKLQotCQlyZXQgPSBzcmFtX3dyaXRlX2RtYV9zYWZlKHdk ZXYsIFdGWF9ETkxEX0ZJRk8gKwotCQkJCQkgIChvZmZzICUgRE5MRF9GSUZPX1NJWkUpLAotCQkJ CQkgIGRhdGEgKyBvZmZzLCBETkxEX0JMT0NLX1NJWkUpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJl dHVybiByZXQ7Ci0KLQkJLy8gV0Z4IHNlZW1zIHRvIG5vdCBzdXBwb3J0IHdyaXRpbmcgMCBpbiB0 aGlzIHJlZ2lzdGVyIGR1cmluZwotCQkvLyBmaXJzdCBsb29wCi0JCW9mZnMgKz0gRE5MRF9CTE9D S19TSVpFOwotCQlyZXQgPSBzcmFtX3JlZ193cml0ZSh3ZGV2LCBXRlhfRENBX1BVVCwgb2Zmcyk7 Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0 YXRpYyB2b2lkIHByaW50X2Jvb3Rfc3RhdHVzKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQotewotCXUz MiByZWc7Ci0KLQlzcmFtX3JlZ19yZWFkKHdkZXYsIFdGWF9TVEFUVVNfSU5GTywgJnJlZyk7Ci0J aWYgKHJlZyA9PSAweDEyMzQ1Njc4KQotCQlyZXR1cm47Ci0Jc3JhbV9yZWdfcmVhZCh3ZGV2LCBX RlhfRVJSX0lORk8sICZyZWcpOwotCWlmIChyZWcgPCBBUlJBWV9TSVpFKGZ3aW9fZXJyb3JzKSAm JiBmd2lvX2Vycm9yc1tyZWddKQotCQlkZXZfaW5mbyh3ZGV2LT5kZXYsICJzZWN1cmUgYm9vdDog JXNcbiIsIGZ3aW9fZXJyb3JzW3JlZ10pOwotCWVsc2UKLQkJZGV2X2luZm8od2Rldi0+ZGV2LCAi c2VjdXJlIGJvb3Q6IEVycm9yICUjMDJ4XG4iLCByZWcpOwotfQotCi1zdGF0aWMgaW50IGxvYWRf ZmlybXdhcmVfc2VjdXJlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQotewotCWNvbnN0IHN0cnVjdCBm aXJtd2FyZSAqZncgPSBOVUxMOwotCWludCBoZWFkZXJfc2l6ZTsKLQlpbnQgZndfb2Zmc2V0Owot CWt0aW1lX3Qgc3RhcnQ7Ci0JdTggKmJ1ZjsKLQlpbnQgcmV0OwotCi0JQlVJTERfQlVHX09OKFBU RV9JTkZPX1NJWkUgPiBCT09UTE9BREVSX0xBQkVMX1NJWkUpOwotCWJ1ZiA9IGttYWxsb2MoQk9P VExPQURFUl9MQUJFTF9TSVpFICsgMSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWYpCi0JCXJldHVy biAtRU5PTUVNOwotCi0Jc3JhbV9yZWdfd3JpdGUod2RldiwgV0ZYX0RDQV9IT1NUX1NUQVRVUywg SE9TVF9SRUFEWSk7Ci0JcmV0ID0gd2FpdF9uY3Bfc3RhdHVzKHdkZXYsIE5DUF9JTkZPX1JFQURZ KTsKLQlpZiAocmV0KQotCQlnb3RvIGVycm9yOwotCi0Jc3JhbV9idWZfcmVhZCh3ZGV2LCBXRlhf Qk9PVExPQURFUl9MQUJFTCwgYnVmLCBCT09UTE9BREVSX0xBQkVMX1NJWkUpOwotCWJ1ZltCT09U TE9BREVSX0xBQkVMX1NJWkVdID0gMDsKLQlkZXZfZGJnKHdkZXYtPmRldiwgImJvb3Rsb2FkZXI6 IFwiJXNcIlxuIiwgYnVmKTsKLQotCXNyYW1fYnVmX3JlYWQod2RldiwgV0ZYX1BURV9JTkZPLCBi dWYsIFBURV9JTkZPX1NJWkUpOwotCXJldCA9IGdldF9maXJtd2FyZSh3ZGV2LCBidWZbUFRFX0lO Rk9fS0VZU0VUX0lEWF0sICZmdywgJmZ3X29mZnNldCk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJv cjsKLQloZWFkZXJfc2l6ZSA9IGZ3X29mZnNldCArIEZXX1NJR05BVFVSRV9TSVpFICsgRldfSEFT SF9TSVpFOwotCi0Jc3JhbV9yZWdfd3JpdGUod2RldiwgV0ZYX0RDQV9IT1NUX1NUQVRVUywgSE9T VF9JTkZPX1JFQUQpOwotCXJldCA9IHdhaXRfbmNwX3N0YXR1cyh3ZGV2LCBOQ1BfUkVBRFkpOwot CWlmIChyZXQpCi0JCWdvdG8gZXJyb3I7Ci0KLQlzcmFtX3JlZ193cml0ZSh3ZGV2LCBXRlhfRE5M RF9GSUZPLCAweEZGRkZGRkZGKTsgLy8gRmlmbyBpbml0Ci0Jc3JhbV93cml0ZV9kbWFfc2FmZSh3 ZGV2LCBXRlhfRENBX0ZXX1ZFUlNJT04sICJceDAxXHgwMFx4MDBceDAwIiwKLQkJCSAgICBGV19W RVJTSU9OX1NJWkUpOwotCXNyYW1fd3JpdGVfZG1hX3NhZmUod2RldiwgV0ZYX0RDQV9GV19TSUdO QVRVUkUsIGZ3LT5kYXRhICsgZndfb2Zmc2V0LAotCQkJICAgIEZXX1NJR05BVFVSRV9TSVpFKTsK LQlzcmFtX3dyaXRlX2RtYV9zYWZlKHdkZXYsIFdGWF9EQ0FfRldfSEFTSCwKLQkJCSAgICBmdy0+ ZGF0YSArIGZ3X29mZnNldCArIEZXX1NJR05BVFVSRV9TSVpFLAotCQkJICAgIEZXX0hBU0hfU0la RSk7Ci0Jc3JhbV9yZWdfd3JpdGUod2RldiwgV0ZYX0RDQV9JTUFHRV9TSVpFLCBmdy0+c2l6ZSAt IGhlYWRlcl9zaXplKTsKLQlzcmFtX3JlZ193cml0ZSh3ZGV2LCBXRlhfRENBX0hPU1RfU1RBVFVT LCBIT1NUX1VQTE9BRF9QRU5ESU5HKTsKLQlyZXQgPSB3YWl0X25jcF9zdGF0dXMod2RldiwgTkNQ X0RPV05MT0FEX1BFTkRJTkcpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyb3I7Ci0KLQlzdGFydCA9 IGt0aW1lX2dldCgpOwotCXJldCA9IHVwbG9hZF9maXJtd2FyZSh3ZGV2LCBmdy0+ZGF0YSArIGhl YWRlcl9zaXplLAotCQkJICAgICAgZnctPnNpemUgLSBoZWFkZXJfc2l6ZSk7Ci0JaWYgKHJldCkK LQkJZ290byBlcnJvcjsKLQlkZXZfZGJnKHdkZXYtPmRldiwgImZpcm13YXJlIGxvYWQgYWZ0ZXIg JWxsZHVzXG4iLAotCQlrdGltZV91c19kZWx0YShrdGltZV9nZXQoKSwgc3RhcnQpKTsKLQotCXNy YW1fcmVnX3dyaXRlKHdkZXYsIFdGWF9EQ0FfSE9TVF9TVEFUVVMsIEhPU1RfVVBMT0FEX0NPTVBM RVRFKTsKLQlyZXQgPSB3YWl0X25jcF9zdGF0dXMod2RldiwgTkNQX0FVVEhfT0spOwotCS8vIExl Z2FjeSBST00gc3VwcG9ydAotCWlmIChyZXQgPCAwKQotCQlyZXQgPSB3YWl0X25jcF9zdGF0dXMo d2RldiwgTkNQX1BVQl9LRVlfUkRZKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBlcnJvcjsKLQlz cmFtX3JlZ193cml0ZSh3ZGV2LCBXRlhfRENBX0hPU1RfU1RBVFVTLCBIT1NUX09LX1RPX0pVTVAp OwotCi1lcnJvcjoKLQlrZnJlZShidWYpOwotCWlmIChmdykKLQkJcmVsZWFzZV9maXJtd2FyZShm dyk7Ci0JaWYgKHJldCkKLQkJcHJpbnRfYm9vdF9zdGF0dXMod2Rldik7Ci0JcmV0dXJuIHJldDsK LX0KLQotc3RhdGljIGludCBpbml0X2dwcihzdHJ1Y3Qgd2Z4X2RldiAqd2RldikKLXsKLQlpbnQg cmV0LCBpOwotCXN0YXRpYyBjb25zdCBzdHJ1Y3QgewotCQlpbnQgaW5kZXg7Ci0JCXUzMiB2YWx1 ZTsKLQl9IGdwcl9pbml0W10gPSB7Ci0JCXsgMHgwNywgMHgyMDg3NzUgfSwKLQkJeyAweDA4LCAw eDJFQzAyMCB9LAotCQl7IDB4MDksIDB4M0MzQzNDIH0sCi0JCXsgMHgwQiwgMHgzMjJDNDQgfSwK LQkJeyAweDBDLCAweEEwNjQ5NyB9LAotCX07Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0la RShncHJfaW5pdCk7IGkrKykgewotCQlyZXQgPSBpZ3ByX3JlZ193cml0ZSh3ZGV2LCBncHJfaW5p dFtpXS5pbmRleCwKLQkJCQkgICAgIGdwcl9pbml0W2ldLnZhbHVlKTsKLQkJaWYgKHJldCA8IDAp Ci0JCQlyZXR1cm4gcmV0OwotCQlkZXZfZGJnKHdkZXYtPmRldiwgIiAgaW5kZXggJTAyeDogJTA4 eFxuIiwKLQkJCWdwcl9pbml0W2ldLmluZGV4LCBncHJfaW5pdFtpXS52YWx1ZSk7Ci0JfQotCXJl dHVybiAwOwotfQotCi1pbnQgd2Z4X2luaXRfZGV2aWNlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQot ewotCWludCByZXQ7Ci0JaW50IGh3X3JldmlzaW9uLCBod190eXBlOwotCWludCB3YWtldXBfdGlt ZW91dCA9IDUwOyAvLyBtcwotCWt0aW1lX3Qgbm93LCBzdGFydDsKLQl1MzIgcmVnOwotCi0JcmVn ID0gQ0ZHX0RJUkVDVF9BQ0NFU1NfTU9ERSB8IENGR19DUFVfUkVTRVQgfCBDRkdfQllURV9PUkRF Ul9BQkNEOwotCWlmICh3ZGV2LT5wZGF0YS51c2VfcmlzaW5nX2NsaykKLQkJcmVnIHw9IENGR19D TEtfUklTRV9FREdFOwotCXJldCA9IGNvbmZpZ19yZWdfd3JpdGUod2RldiwgcmVnKTsKLQlpZiAo cmV0IDwgMCkgewotCQlkZXZfZXJyKHdkZXYtPmRldiwgImJ1cyByZXR1cm5lZCBhbiBlcnJvciBk dXJpbmcgZmlyc3Qgd3JpdGUgYWNjZXNzLiBIb3N0IGNvbmZpZ3VyYXRpb24gZXJyb3I/XG4iKTsK LQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JcmV0ID0gY29uZmlnX3JlZ19yZWFkKHdkZXYsICZyZWcp OwotCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIod2Rldi0+ZGV2LCAiYnVzIHJldHVybmVkIGFu IGVycm9yIGR1cmluZyBmaXJzdCByZWFkIGFjY2Vzcy4gQnVzIGNvbmZpZ3VyYXRpb24gZXJyb3I/ XG4iKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCWlmIChyZWcgPT0gMCB8fCByZWcgPT0gfjApIHsK LQkJZGV2X2Vycih3ZGV2LT5kZXYsICJjaGlwIG11dGUuIEJ1cyBjb25maWd1cmF0aW9uIGVycm9y IG9yIGNoaXAgd2Fzbid0IHJlc2V0P1xuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlkZXZfZGJn KHdkZXYtPmRldiwgImluaXRpYWwgY29uZmlnIHJlZ2lzdGVyIHZhbHVlOiAlMDh4XG4iLCByZWcp OwotCi0JaHdfcmV2aXNpb24gPSBGSUVMRF9HRVQoQ0ZHX0RFVklDRV9JRF9NQUpPUiwgcmVnKTsK LQlpZiAoaHdfcmV2aXNpb24gPT0gMCkgewotCQlkZXZfZXJyKHdkZXYtPmRldiwgImJhZCBoYXJk d2FyZSByZXZpc2lvbiBudW1iZXI6ICVkXG4iLAotCQkJaHdfcmV2aXNpb24pOwotCQlyZXR1cm4g LUVOT0RFVjsKLQl9Ci0JaHdfdHlwZSA9IEZJRUxEX0dFVChDRkdfREVWSUNFX0lEX1RZUEUsIHJl Zyk7Ci0JaWYgKGh3X3R5cGUgPT0gMSkgewotCQlkZXZfbm90aWNlKHdkZXYtPmRldiwgImRldmVs b3BtZW50IGhhcmR3YXJlIGRldGVjdGVkXG4iKTsKLQkJd2FrZXVwX3RpbWVvdXQgPSAyMDAwOwot CX0KLQotCXJldCA9IGluaXRfZ3ByKHdkZXYpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0 OwotCi0JcmV0ID0gY29udHJvbF9yZWdfd3JpdGUod2RldiwgQ1RSTF9XTEFOX1dBS0VVUCk7Ci0J aWYgKHJldCA8IDApCi0JCXJldHVybiAtRUlPOwotCXN0YXJ0ID0ga3RpbWVfZ2V0KCk7Ci0JZm9y ICg7OykgewotCQlyZXQgPSBjb250cm9sX3JlZ19yZWFkKHdkZXYsICZyZWcpOwotCQlub3cgPSBr dGltZV9nZXQoKTsKLQkJaWYgKHJlZyAmIENUUkxfV0xBTl9SRUFEWSkKLQkJCWJyZWFrOwotCQlp ZiAoa3RpbWVfYWZ0ZXIobm93LCBrdGltZV9hZGRfbXMoc3RhcnQsIHdha2V1cF90aW1lb3V0KSkp IHsKLQkJCWRldl9lcnIod2Rldi0+ZGV2LCAiY2hpcCBkaWRuJ3Qgd2FrZSB1cC4gQ2hpcCB3YXNu J3QgcmVzZXQ/XG4iKTsKLQkJCXJldHVybiAtRVRJTUVET1VUOwotCQl9Ci0JfQotCWRldl9kYmco d2Rldi0+ZGV2LCAiY2hpcCB3YWtlIHVwIGFmdGVyICVsbGR1c1xuIiwKLQkJa3RpbWVfdXNfZGVs dGEobm93LCBzdGFydCkpOwotCi0JcmV0ID0gY29uZmlnX3JlZ193cml0ZV9iaXRzKHdkZXYsIENG R19DUFVfUkVTRVQsIDApOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCXJldCA9IGxv YWRfZmlybXdhcmVfc2VjdXJlKHdkZXYpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0Owot CXJldHVybiBjb25maWdfcmVnX3dyaXRlX2JpdHMod2RldiwKLQkJCQkgICAgIENGR19ESVJFQ1Rf QUNDRVNTX01PREUgfAotCQkJCSAgICAgQ0ZHX0lSUV9FTkFCTEVfREFUQSB8Ci0JCQkJICAgICBD RkdfSVJRX0VOQUJMRV9XUkRZLAotCQkJCSAgICAgQ0ZHX0lSUV9FTkFCTEVfREFUQSk7Ci19CmRp ZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2Z3aW8uaCBiL2RyaXZlcnMvc3RhZ2luZy93 ZngvZndpby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDI4ZjkyNTAzZmUuLjAw MDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2Z3aW8uaAorKysgL2Rldi9udWxs CkBAIC0xLDE1ICswLDAgQEAKLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9u bHkgKi8KLS8qCi0gKiBGaXJtd2FyZSBsb2FkaW5nLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAx Ny0yMDE5LCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDEw LCBTVC1Fcmljc3NvbgotICovCi0jaWZuZGVmIFdGWF9GV0lPX0gKLSNkZWZpbmUgV0ZYX0ZXSU9f SAotCi1zdHJ1Y3Qgd2Z4X2RldjsKLQotaW50IHdmeF9pbml0X2RldmljZShzdHJ1Y3Qgd2Z4X2Rl diAqd2Rldik7Ci0KLSNlbmRpZiAvKiBXRlhfRldJT19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJz L3N0YWdpbmcvd2Z4L2hpZl9hcGlfY21kLmggYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl9hcGlf Y21kLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExYmMxYTU4ZWRhZS4uMDAwMDAw MDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZngvaGlmX2FwaV9jbWQuaAorKysgL2Rldi9u dWxsCkBAIC0xLDU1MyArMCwwIEBACi0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hl LTIuMCAqLwotLyoKLSAqIFdGeCBoYXJkd2FyZSBpbnRlcmZhY2UgZGVmaW5pdGlvbnMKLSAqCi0g KiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMgSW5jLgotICov Ci0KLSNpZm5kZWYgV0ZYX0hJRl9BUElfQ01EX0gKLSNkZWZpbmUgV0ZYX0hJRl9BUElfQ01EX0gK LQotI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgotCi0jaW5jbHVkZSAiaGlmX2FwaV9nZW5l cmFsLmgiCi0KLWVudW0gaGlmX3JlcXVlc3RzX2lkcyB7Ci0JSElGX1JFUV9JRF9SRVNFVCAgICAg ICAgICAgICAgICA9IDB4MGEsCi0JSElGX1JFUV9JRF9SRUFEX01JQiAgICAgICAgICAgICA9IDB4 MDUsCi0JSElGX1JFUV9JRF9XUklURV9NSUIgICAgICAgICAgICA9IDB4MDYsCi0JSElGX1JFUV9J RF9TVEFSVF9TQ0FOICAgICAgICAgICA9IDB4MDcsCi0JSElGX1JFUV9JRF9TVE9QX1NDQU4gICAg ICAgICAgICA9IDB4MDgsCi0JSElGX1JFUV9JRF9UWCAgICAgICAgICAgICAgICAgICA9IDB4MDQs Ci0JSElGX1JFUV9JRF9KT0lOICAgICAgICAgICAgICAgICA9IDB4MGIsCi0JSElGX1JFUV9JRF9T RVRfUE1fTU9ERSAgICAgICAgICA9IDB4MTAsCi0JSElGX1JFUV9JRF9TRVRfQlNTX1BBUkFNUyAg ICAgICA9IDB4MTEsCi0JSElGX1JFUV9JRF9BRERfS0VZICAgICAgICAgICAgICA9IDB4MGMsCi0J SElGX1JFUV9JRF9SRU1PVkVfS0VZICAgICAgICAgICA9IDB4MGQsCi0JSElGX1JFUV9JRF9FRENB X1FVRVVFX1BBUkFNUyAgICA9IDB4MTMsCi0JSElGX1JFUV9JRF9TVEFSVCAgICAgICAgICAgICAg ICA9IDB4MTcsCi0JSElGX1JFUV9JRF9CRUFDT05fVFJBTlNNSVQgICAgICA9IDB4MTgsCi0JSElG X1JFUV9JRF9VUERBVEVfSUUgICAgICAgICAgICA9IDB4MWIsCi0JSElGX1JFUV9JRF9NQVBfTElO SyAgICAgICAgICAgICA9IDB4MWMsCi19OwotCi1lbnVtIGhpZl9jb25maXJtYXRpb25zX2lkcyB7 Ci0JSElGX0NORl9JRF9SRVNFVCAgICAgICAgICAgICAgICA9IDB4MGEsCi0JSElGX0NORl9JRF9S RUFEX01JQiAgICAgICAgICAgICA9IDB4MDUsCi0JSElGX0NORl9JRF9XUklURV9NSUIgICAgICAg ICAgICA9IDB4MDYsCi0JSElGX0NORl9JRF9TVEFSVF9TQ0FOICAgICAgICAgICA9IDB4MDcsCi0J SElGX0NORl9JRF9TVE9QX1NDQU4gICAgICAgICAgICA9IDB4MDgsCi0JSElGX0NORl9JRF9UWCAg ICAgICAgICAgICAgICAgICA9IDB4MDQsCi0JSElGX0NORl9JRF9NVUxUSV9UUkFOU01JVCAgICAg ICA9IDB4MWUsCi0JSElGX0NORl9JRF9KT0lOICAgICAgICAgICAgICAgICA9IDB4MGIsCi0JSElG X0NORl9JRF9TRVRfUE1fTU9ERSAgICAgICAgICA9IDB4MTAsCi0JSElGX0NORl9JRF9TRVRfQlNT X1BBUkFNUyAgICAgICA9IDB4MTEsCi0JSElGX0NORl9JRF9BRERfS0VZICAgICAgICAgICAgICA9 IDB4MGMsCi0JSElGX0NORl9JRF9SRU1PVkVfS0VZICAgICAgICAgICA9IDB4MGQsCi0JSElGX0NO Rl9JRF9FRENBX1FVRVVFX1BBUkFNUyAgICA9IDB4MTMsCi0JSElGX0NORl9JRF9TVEFSVCAgICAg ICAgICAgICAgICA9IDB4MTcsCi0JSElGX0NORl9JRF9CRUFDT05fVFJBTlNNSVQgICAgICA9IDB4 MTgsCi0JSElGX0NORl9JRF9VUERBVEVfSUUgICAgICAgICAgICA9IDB4MWIsCi0JSElGX0NORl9J RF9NQVBfTElOSyAgICAgICAgICAgICA9IDB4MWMsCi19OwotCi1lbnVtIGhpZl9pbmRpY2F0aW9u c19pZHMgewotCUhJRl9JTkRfSURfUlggICAgICAgICAgICAgICAgICAgPSAweDg0LAotCUhJRl9J TkRfSURfU0NBTl9DTVBMICAgICAgICAgICAgPSAweDg2LAotCUhJRl9JTkRfSURfSk9JTl9DT01Q TEVURSAgICAgICAgPSAweDhmLAotCUhJRl9JTkRfSURfU0VUX1BNX01PREVfQ01QTCAgICAgPSAw eDg5LAotCUhJRl9JTkRfSURfU1VTUEVORF9SRVNVTUVfVFggICAgPSAweDhjLAotCUhJRl9JTkRf SURfRVZFTlQgICAgICAgICAgICAgICAgPSAweDg1Ci19OwotCi1zdHJ1Y3QgaGlmX3JlcV9yZXNl dCB7Ci0JdTggICAgIHJlc2V0X3N0YXQ6MTsKLQl1OCAgICAgcmVzZXRfYWxsX2ludDoxOwotCXU4 ICAgICByZXNlcnZlZDE6NjsKLQl1OCAgICAgcmVzZXJ2ZWQyWzNdOwotfSBfX3BhY2tlZDsKLQot c3RydWN0IGhpZl9jbmZfcmVzZXQgewotCV9fbGUzMiBzdGF0dXM7Ci19IF9fcGFja2VkOwotCi1z dHJ1Y3QgaGlmX3JlcV9yZWFkX21pYiB7Ci0JX19sZTE2IG1pYl9pZDsKLQlfX2xlMTYgcmVzZXJ2 ZWQ7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX2NuZl9yZWFkX21pYiB7Ci0JX19sZTMyIHN0 YXR1czsKLQlfX2xlMTYgbWliX2lkOwotCV9fbGUxNiBsZW5ndGg7Ci0JdTggICAgIG1pYl9kYXRh W107Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX3JlcV93cml0ZV9taWIgewotCV9fbGUxNiBt aWJfaWQ7Ci0JX19sZTE2IGxlbmd0aDsKLQl1OCAgICAgbWliX2RhdGFbXTsKLX0gX19wYWNrZWQ7 Ci0KLXN0cnVjdCBoaWZfY25mX3dyaXRlX21pYiB7Ci0JX19sZTMyIHN0YXR1czsKLX0gX19wYWNr ZWQ7Ci0KLXN0cnVjdCBoaWZfcmVxX3VwZGF0ZV9pZSB7Ci0JdTggICAgIGJlYWNvbjoxOwotCXU4 ICAgICBwcm9iZV9yZXNwOjE7Ci0JdTggICAgIHByb2JlX3JlcToxOwotCXU4ICAgICByZXNlcnZl ZDE6NTsKLQl1OCAgICAgcmVzZXJ2ZWQyOwotCV9fbGUxNiBudW1faWVzOwotCXN0cnVjdCBlbGVt ZW50IGllW107Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX2NuZl91cGRhdGVfaWUgewotCV9f bGUzMiBzdGF0dXM7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX3NzaWRfZGVmIHsKLQlfX2xl MzIgc3NpZF9sZW5ndGg7Ci0JdTggICAgIHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07Ci19 IF9fcGFja2VkOwotCi0jZGVmaW5lIEhJRl9BUElfTUFYX05CX1NTSURTICAgICAgICAgICAgICAg ICAgICAgICAgICAgMgotI2RlZmluZSBISUZfQVBJX01BWF9OQl9DSEFOTkVMUyAgICAgICAgICAg ICAgICAgICAgICAgMTQKLQotc3RydWN0IGhpZl9yZXFfc3RhcnRfc2Nhbl9hbHQgewotCXU4ICAg ICBiYW5kOwotCXU4ICAgICBtYWludGFpbl9jdXJyZW50X2JzczoxOwotCXU4ICAgICBwZXJpb2Rp YzoxOwotCXU4ICAgICByZXNlcnZlZDE6NjsKLQl1OCAgICAgZGlzYWxsb3dfcHM6MTsKLQl1OCAg ICAgcmVzZXJ2ZWQyOjE7Ci0JdTggICAgIHNob3J0X3ByZWFtYmxlOjE7Ci0JdTggICAgIHJlc2Vy dmVkMzo1OwotCXU4ICAgICBtYXhfdHJhbnNtaXRfcmF0ZTsKLQlfX2xlMTYgcGVyaW9kaWNfaW50 ZXJ2YWw7Ci0JdTggICAgIHJlc2VydmVkNDsKLQlzOCAgICAgcGVyaW9kaWNfcnNzaV90aHI7Ci0J dTggICAgIG51bV9vZl9wcm9iZV9yZXF1ZXN0czsKLQl1OCAgICAgcHJvYmVfZGVsYXk7Ci0JdTgg ICAgIG51bV9vZl9zc2lkczsKLQl1OCAgICAgbnVtX29mX2NoYW5uZWxzOwotCV9fbGUzMiBtaW5f Y2hhbm5lbF90aW1lOwotCV9fbGUzMiBtYXhfY2hhbm5lbF90aW1lOwotCV9fbGUzMiB0eF9wb3dl cl9sZXZlbDsgLy8gc2lnbmVkIHZhbHVlCi0Jc3RydWN0IGhpZl9zc2lkX2RlZiBzc2lkX2RlZltI SUZfQVBJX01BWF9OQl9TU0lEU107Ci0JdTggICAgIGNoYW5uZWxfbGlzdFtdOwotfSBfX3BhY2tl ZDsKLQotc3RydWN0IGhpZl9jbmZfc3RhcnRfc2NhbiB7Ci0JX19sZTMyIHN0YXR1czsKLX0gX19w YWNrZWQ7Ci0KLXN0cnVjdCBoaWZfY25mX3N0b3Bfc2NhbiB7Ci0JX19sZTMyIHN0YXR1czsKLX0g X19wYWNrZWQ7Ci0KLWVudW0gaGlmX3BtX21vZGVfc3RhdHVzIHsKLQlISUZfUE1fTU9ERV9BQ1RJ VkUgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAsCi0JSElGX1BNX01PREVfUFMgICAgICAg ICAgICAgICAgICAgICAgICAgICAgID0gMHgxLAotCUhJRl9QTV9NT0RFX1VOREVURVJNSU5FRCAg ICAgICAgICAgICAgICAgICA9IDB4MgotfTsKLQotc3RydWN0IGhpZl9pbmRfc2Nhbl9jbXBsIHsK LQlfX2xlMzIgc3RhdHVzOwotCXU4ICAgICBwbV9tb2RlOwotCXU4ICAgICBudW1fY2hhbm5lbHNf Y29tcGxldGVkOwotCV9fbGUxNiByZXNlcnZlZDsKLX0gX19wYWNrZWQ7Ci0KLWVudW0gaGlmX3F1 ZXVlX2lkIHsKLQlISUZfUVVFVUVfSURfQkFDS0dST1VORCAgICAgICAgICAgICAgICAgICAgPSAw eDAsCi0JSElGX1FVRVVFX0lEX0JFU1RFRkZPUlQgICAgICAgICAgICAgICAgICAgID0gMHgxLAot CUhJRl9RVUVVRV9JRF9WSURFTyAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MiwKLQlISUZf UVVFVUVfSURfVk9JQ0UgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDMKLX07Ci0KLWVudW0g aGlmX2ZyYW1lX2Zvcm1hdCB7Ci0JSElGX0ZSQU1FX0ZPUk1BVF9OT05fSFQgICAgICAgICAgICAg ICAgICAgID0gMHgwLAotCUhJRl9GUkFNRV9GT1JNQVRfTUlYRURfRk9STUFUX0hUICAgICAgICAg ICA9IDB4MSwKLQlISUZfRlJBTUVfRk9STUFUX0dGX0hUXzExTiAgICAgICAgICAgICAgICAgPSAw eDIKLX07Ci0KLXN0cnVjdCBoaWZfcmVxX3R4IHsKLQkvLyBwYWNrZXRfaWQgaXMgbm90IGludGVy cHJldGVkIGJ5IHRoZSBkZXZpY2UsIHNvIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8KLQkvLyBkZWNs YXJlIGl0IGxpdHRsZSBlbmRpYW4KLQl1MzIgICAgcGFja2V0X2lkOwotCXU4ICAgICBtYXhfdHhf cmF0ZTsKLQl1OCAgICAgcXVldWVfaWQ6MjsKLQl1OCAgICAgcGVlcl9zdGFfaWQ6NDsKLQl1OCAg ICAgcmVzZXJ2ZWQxOjI7Ci0JdTggICAgIG1vcmU6MTsKLQl1OCAgICAgZmNfb2Zmc2V0OjM7Ci0J dTggICAgIGFmdGVyX2R0aW06MTsKLQl1OCAgICAgcmVzZXJ2ZWQyOjM7Ci0JdTggICAgIHN0YXJ0 X2V4cDoxOwotCXU4ICAgICByZXNlcnZlZDM6MzsKLQl1OCAgICAgcmV0cnlfcG9saWN5X2luZGV4 OjQ7Ci0JX19sZTMyIHJlc2VydmVkNDsKLQlfX2xlMzIgZXhwaXJlX3RpbWU7Ci0JdTggICAgIGZy YW1lX2Zvcm1hdDo0OwotCXU4ICAgICBmZWNfY29kaW5nOjE7Ci0JdTggICAgIHNob3J0X2dpOjE7 Ci0JdTggICAgIHJlc2VydmVkNToxOwotCXU4ICAgICBzdGJjOjE7Ci0JdTggICAgIHJlc2VydmVk NjsKLQl1OCAgICAgYWdncmVnYXRpb246MTsKLQl1OCAgICAgcmVzZXJ2ZWQ3Ojc7Ci0JdTggICAg IHJlc2VydmVkODsKLQl1OCAgICAgZnJhbWVbXTsKLX0gX19wYWNrZWQ7Ci0KLWVudW0gaGlmX3Fv c19hY2twbGN5IHsKLQlISUZfUU9TX0FDS1BMQ1lfTk9STUFMICAgICAgICAgICAgICAgICAgICAg ICAgID0gMHgwLAotCUhJRl9RT1NfQUNLUExDWV9UWE5PQUNLICAgICAgICAgICAgICAgICAgICAg ICAgPSAweDEsCi0JSElGX1FPU19BQ0tQTENZX05PRVhQQUNLICAgICAgICAgICAgICAgICAgICAg ICA9IDB4MiwKLQlISUZfUU9TX0FDS1BMQ1lfQkxDS0FDSyAgICAgICAgICAgICAgICAgICAgICAg ID0gMHgzCi19OwotCi1zdHJ1Y3QgaGlmX2NuZl90eCB7Ci0JX19sZTMyIHN0YXR1czsKLQkvLyBw YWNrZXRfaWQgaXMgY29waWVkIGZyb20gc3RydWN0IGhpZl9yZXFfdHggd2l0aG91dCBiZWVuIGlu dGVycHJldGVkCi0JLy8gYnkgdGhlIGRldmljZSwgc28gaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBk ZWNsYXJlIGl0IGxpdHRsZSBlbmRpYW4KLQl1MzIgICAgcGFja2V0X2lkOwotCXU4ICAgICB0eGVk X3JhdGU7Ci0JdTggICAgIGFja19mYWlsdXJlczsKLQl1OCAgICAgYWdncjoxOwotCXU4ICAgICBy ZXF1ZXVlOjE7Ci0JdTggICAgIGFja19wb2xpY3k6MjsKLQl1OCAgICAgdHhvcF9saW1pdDoxOwot CXU4ICAgICByZXNlcnZlZDE6MzsKLQl1OCAgICAgcmVzZXJ2ZWQyOwotCV9fbGUzMiBtZWRpYV9k ZWxheTsKLQlfX2xlMzIgdHhfcXVldWVfZGVsYXk7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlm X2NuZl9tdWx0aV90cmFuc21pdCB7Ci0JdTggICAgIG51bV90eF9jb25mczsKLQl1OCAgICAgcmVz ZXJ2ZWRbM107Ci0Jc3RydWN0IGhpZl9jbmZfdHggdHhfY29uZl9wYXlsb2FkW107Ci19IF9fcGFj a2VkOwotCi1lbnVtIGhpZl9yaV9mbGFnc19lbmNyeXB0IHsKLQlISUZfUklfRkxBR1NfVU5FTkNS WVBURUQgICAgICAgICAgICAgICAgICAgPSAweDAsCi0JSElGX1JJX0ZMQUdTX1dFUF9FTkNSWVBU RUQgICAgICAgICAgICAgICAgID0gMHgxLAotCUhJRl9SSV9GTEFHU19US0lQX0VOQ1JZUFRFRCAg ICAgICAgICAgICAgICA9IDB4MiwKLQlISUZfUklfRkxBR1NfQUVTX0VOQ1JZUFRFRCAgICAgICAg ICAgICAgICAgPSAweDMsCi0JSElGX1JJX0ZMQUdTX1dBUElfRU5DUllQVEVEICAgICAgICAgICAg ICAgID0gMHg0Ci19OwotCi1zdHJ1Y3QgaGlmX2luZF9yeCB7Ci0JX19sZTMyIHN0YXR1czsKLQl1 OCAgICAgY2hhbm5lbF9udW1iZXI7Ci0JdTggICAgIHJlc2VydmVkMTsKLQl1OCAgICAgcnhlZF9y YXRlOwotCXU4ICAgICByY3BpX3Jzc2k7Ci0JdTggICAgIGVuY3J5cDozOwotCXU4ICAgICBpbl9h Z2dyOjE7Ci0JdTggICAgIGZpcnN0X2FnZ3I6MTsKLQl1OCAgICAgbGFzdF9hZ2dyOjE7Ci0JdTgg ICAgIGRlZnJhZzoxOwotCXU4ICAgICBiZWFjb246MTsKLQl1OCAgICAgdGltOjE7Ci0JdTggICAg IGJpdG1hcDoxOwotCXU4ICAgICBtYXRjaF9zc2lkOjE7Ci0JdTggICAgIG1hdGNoX2Jzc2lkOjE7 Ci0JdTggICAgIG1vcmU6MTsKLQl1OCAgICAgcmVzZXJ2ZWQyOjE7Ci0JdTggICAgIGh0OjE7Ci0J dTggICAgIHN0YmM6MTsKLQl1OCAgICAgbWF0Y2hfdWNfYWRkcjoxOwotCXU4ICAgICBtYXRjaF9t Y19hZGRyOjE7Ci0JdTggICAgIG1hdGNoX2JjX2FkZHI6MTsKLQl1OCAgICAga2V5X3R5cGU6MTsK LQl1OCAgICAga2V5X2luZGV4OjQ7Ci0JdTggICAgIHJlc2VydmVkMzoxOwotCXU4ICAgICBwZWVy X3N0YV9pZDo0OwotCXU4ICAgICByZXNlcnZlZDQ6MjsKLQl1OCAgICAgcmVzZXJ2ZWQ1OjE7Ci0J dTggICAgIGZyYW1lW107Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX3JlcV9lZGNhX3F1ZXVl X3BhcmFtcyB7Ci0JdTggICAgIHF1ZXVlX2lkOwotCXU4ICAgICByZXNlcnZlZDE7Ci0JdTggICAg IGFpZnNuOwotCXU4ICAgICByZXNlcnZlZDI7Ci0JX19sZTE2IGN3X21pbjsKLQlfX2xlMTYgY3df bWF4OwotCV9fbGUxNiB0eF9vcF9saW1pdDsKLQlfX2xlMTYgYWxsb3dlZF9tZWRpdW1fdGltZTsK LQlfX2xlMzIgcmVzZXJ2ZWQzOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9jbmZfZWRjYV9x dWV1ZV9wYXJhbXMgewotCV9fbGUzMiBzdGF0dXM7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlm X3JlcV9qb2luIHsKLQl1OCAgICAgaW5mcmFzdHJ1Y3R1cmVfYnNzX21vZGU6MTsKLQl1OCAgICAg cmVzZXJ2ZWQxOjc7Ci0JdTggICAgIGJhbmQ7Ci0JdTggICAgIGNoYW5uZWxfbnVtYmVyOwotCXU4 ICAgICByZXNlcnZlZDI7Ci0JdTggICAgIGJzc2lkW0VUSF9BTEVOXTsKLQlfX2xlMTYgYXRpbV93 aW5kb3c7Ci0JdTggICAgIHNob3J0X3ByZWFtYmxlOjE7Ci0JdTggICAgIHJlc2VydmVkMzo3Owot CXU4ICAgICBwcm9iZV9mb3Jfam9pbjsKLQl1OCAgICAgcmVzZXJ2ZWQ0OwotCXU4ICAgICByZXNl cnZlZDU6MjsKLQl1OCAgICAgZm9yY2Vfbm9fYmVhY29uOjE7Ci0JdTggICAgIGZvcmNlX3dpdGhf aW5kOjE7Ci0JdTggICAgIHJlc2VydmVkNjo0OwotCV9fbGUzMiBzc2lkX2xlbmd0aDsKLQl1OCAg ICAgc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTsKLQlfX2xlMzIgYmVhY29uX2ludGVydmFs OwotCV9fbGUzMiBiYXNpY19yYXRlX3NldDsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfY25m X2pvaW4gewotCV9fbGUzMiBzdGF0dXM7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX2luZF9q b2luX2NvbXBsZXRlIHsKLQlfX2xlMzIgc3RhdHVzOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhp Zl9yZXFfc2V0X2Jzc19wYXJhbXMgewotCXU4ICAgICBsb3N0X2NvdW50X29ubHk6MTsKLQl1OCAg ICAgcmVzZXJ2ZWQ6NzsKLQl1OCAgICAgYmVhY29uX2xvc3RfY291bnQ7Ci0JX19sZTE2IGFpZDsK LQlfX2xlMzIgb3BlcmF0aW9uYWxfcmF0ZV9zZXQ7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlm X2NuZl9zZXRfYnNzX3BhcmFtcyB7Ci0JX19sZTMyIHN0YXR1czsKLX0gX19wYWNrZWQ7Ci0KLXN0 cnVjdCBoaWZfcmVxX3NldF9wbV9tb2RlIHsKLQl1OCAgICAgZW50ZXJfcHNtOjE7Ci0JdTggICAg IHJlc2VydmVkOjY7Ci0JdTggICAgIGZhc3RfcHNtOjE7Ci0JdTggICAgIGZhc3RfcHNtX2lkbGVf cGVyaW9kOwotCXU4ICAgICBhcF9wc21fY2hhbmdlX3BlcmlvZDsKLQl1OCAgICAgbWluX2F1dG9f cHNfcG9sbF9wZXJpb2Q7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX2NuZl9zZXRfcG1fbW9k ZSB7Ci0JX19sZTMyIHN0YXR1czsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfaW5kX3NldF9w bV9tb2RlX2NtcGwgewotCV9fbGUzMiBzdGF0dXM7Ci0JdTggICAgIHBtX21vZGU7Ci0JdTggICAg IHJlc2VydmVkWzNdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9yZXFfc3RhcnQgewotCXU4 ICAgICBtb2RlOwotCXU4ICAgICBiYW5kOwotCXU4ICAgICBjaGFubmVsX251bWJlcjsKLQl1OCAg ICAgcmVzZXJ2ZWQxOwotCV9fbGUzMiByZXNlcnZlZDI7Ci0JX19sZTMyIGJlYWNvbl9pbnRlcnZh bDsKLQl1OCAgICAgZHRpbV9wZXJpb2Q7Ci0JdTggICAgIHNob3J0X3ByZWFtYmxlOjE7Ci0JdTgg ICAgIHJlc2VydmVkMzo3OwotCXU4ICAgICByZXNlcnZlZDQ7Ci0JdTggICAgIHNzaWRfbGVuZ3Ro OwotCXU4ICAgICBzc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU5dOwotCV9fbGUzMiBiYXNpY19y YXRlX3NldDsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfY25mX3N0YXJ0IHsKLQlfX2xlMzIg c3RhdHVzOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9yZXFfYmVhY29uX3RyYW5zbWl0IHsK LQl1OCAgICAgZW5hYmxlX2JlYWNvbmluZzsKLQl1OCAgICAgcmVzZXJ2ZWRbM107Ci19IF9fcGFj a2VkOwotCi1zdHJ1Y3QgaGlmX2NuZl9iZWFjb25fdHJhbnNtaXQgewotCV9fbGUzMiBzdGF0dXM7 Ci19IF9fcGFja2VkOwotCi0jZGVmaW5lIEhJRl9MSU5LX0lEX01BWCAgICAgICAgICAgIDE0Ci0j ZGVmaW5lIEhJRl9MSU5LX0lEX05PVF9BU1NPQ0lBVEVEIChISUZfTElOS19JRF9NQVggKyAxKQot Ci1zdHJ1Y3QgaGlmX3JlcV9tYXBfbGluayB7Ci0JdTggICAgIG1hY19hZGRyW0VUSF9BTEVOXTsK LQl1OCAgICAgdW5tYXA6MTsKLQl1OCAgICAgbWZwYzoxOwotCXU4ICAgICByZXNlcnZlZDo2Owot CXU4ICAgICBwZWVyX3N0YV9pZDsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfY25mX21hcF9s aW5rIHsKLQlfX2xlMzIgc3RhdHVzOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9pbmRfc3Vz cGVuZF9yZXN1bWVfdHggewotCXU4ICAgICByZXN1bWU6MTsKLQl1OCAgICAgcmVzZXJ2ZWQxOjI7 Ci0JdTggICAgIGJjX21jX29ubHk6MTsKLQl1OCAgICAgcmVzZXJ2ZWQyOjQ7Ci0JdTggICAgIHJl c2VydmVkMzsKLQlfX2xlMTYgcGVlcl9zdGFfc2V0OwotfSBfX3BhY2tlZDsKLQotCi0jZGVmaW5l IE1BWF9LRVlfRU5UUklFUyAgICAgICAgIDI0Ci0jZGVmaW5lIEhJRl9BUElfV0VQX0tFWV9EQVRB X1NJWkUgICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIEhJRl9BUElfVEtJUF9LRVlf REFUQV9TSVpFICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIEhJRl9BUElfUlhfTUlD X0tFWV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgIDgKLSNkZWZpbmUgSElGX0FQSV9UWF9N SUNfS0VZX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBISUZfQVBJX0FF U19LRVlfREFUQV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBISUZfQVBJ X1dBUElfS0VZX0RBVEFfU0laRSAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBISUZf QVBJX01JQ19LRVlfREFUQV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmluZSBI SUZfQVBJX0lHVEtfS0VZX0RBVEFfU0laRSAgICAgICAgICAgICAgICAgICAgICAxNgotI2RlZmlu ZSBISUZfQVBJX1JYX1NFUVVFTkNFX0NPVU5URVJfU0laRSAgICAgICAgICAgICAgICA4Ci0jZGVm aW5lIEhJRl9BUElfSVBOX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKLQot ZW51bSBoaWZfa2V5X3R5cGUgewotCUhJRl9LRVlfVFlQRV9XRVBfREVGQVVMVCAgICAgICAgICAg ICAgICAgICA9IDB4MCwKLQlISUZfS0VZX1RZUEVfV0VQX1BBSVJXSVNFICAgICAgICAgICAgICAg ICAgPSAweDEsCi0JSElGX0tFWV9UWVBFX1RLSVBfR1JPVVAgICAgICAgICAgICAgICAgICAgID0g MHgyLAotCUhJRl9LRVlfVFlQRV9US0lQX1BBSVJXSVNFICAgICAgICAgICAgICAgICA9IDB4MywK LQlISUZfS0VZX1RZUEVfQUVTX0dST1VQICAgICAgICAgICAgICAgICAgICAgPSAweDQsCi0JSElG X0tFWV9UWVBFX0FFU19QQUlSV0lTRSAgICAgICAgICAgICAgICAgID0gMHg1LAotCUhJRl9LRVlf VFlQRV9XQVBJX0dST1VQICAgICAgICAgICAgICAgICAgICA9IDB4NiwKLQlISUZfS0VZX1RZUEVf V0FQSV9QQUlSV0lTRSAgICAgICAgICAgICAgICAgPSAweDcsCi0JSElGX0tFWV9UWVBFX0lHVEtf R1JPVVAgICAgICAgICAgICAgICAgICAgID0gMHg4LAotCUhJRl9LRVlfVFlQRV9OT05FICAgICAg ICAgICAgICAgICAgICAgICAgICA9IDB4OQotfTsKLQotc3RydWN0IGhpZl93ZXBfcGFpcndpc2Vf a2V5IHsKLQl1OCAgICAgcGVlcl9hZGRyZXNzW0VUSF9BTEVOXTsKLQl1OCAgICAgcmVzZXJ2ZWQ7 Ci0JdTggICAgIGtleV9sZW5ndGg7Ci0JdTggICAgIGtleV9kYXRhW0hJRl9BUElfV0VQX0tFWV9E QVRBX1NJWkVdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl93ZXBfZ3JvdXBfa2V5IHsKLQl1 OCAgICAga2V5X2lkOwotCXU4ICAgICBrZXlfbGVuZ3RoOwotCXU4ICAgICByZXNlcnZlZFsyXTsK LQl1OCAgICAga2V5X2RhdGFbSElGX0FQSV9XRVBfS0VZX0RBVEFfU0laRV07Ci19IF9fcGFja2Vk OwotCi1zdHJ1Y3QgaGlmX3RraXBfcGFpcndpc2Vfa2V5IHsKLQl1OCAgICAgcGVlcl9hZGRyZXNz W0VUSF9BTEVOXTsKLQl1OCAgICAgcmVzZXJ2ZWRbMl07Ci0JdTggICAgIHRraXBfa2V5X2RhdGFb SElGX0FQSV9US0lQX0tFWV9EQVRBX1NJWkVdOwotCXU4ICAgICByeF9taWNfa2V5W0hJRl9BUElf UlhfTUlDX0tFWV9TSVpFXTsKLQl1OCAgICAgdHhfbWljX2tleVtISUZfQVBJX1RYX01JQ19LRVlf U0laRV07Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX3RraXBfZ3JvdXBfa2V5IHsKLQl1OCAg ICAgdGtpcF9rZXlfZGF0YVtISUZfQVBJX1RLSVBfS0VZX0RBVEFfU0laRV07Ci0JdTggICAgIHJ4 X21pY19rZXlbSElGX0FQSV9SWF9NSUNfS0VZX1NJWkVdOwotCXU4ICAgICBrZXlfaWQ7Ci0JdTgg ICAgIHJlc2VydmVkWzNdOwotCXU4ICAgICByeF9zZXF1ZW5jZV9jb3VudGVyW0hJRl9BUElfUlhf U0VRVUVOQ0VfQ09VTlRFUl9TSVpFXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfYWVzX3Bh aXJ3aXNlX2tleSB7Ci0JdTggICAgIHBlZXJfYWRkcmVzc1tFVEhfQUxFTl07Ci0JdTggICAgIHJl c2VydmVkWzJdOwotCXU4ICAgICBhZXNfa2V5X2RhdGFbSElGX0FQSV9BRVNfS0VZX0RBVEFfU0la RV07Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX2Flc19ncm91cF9rZXkgewotCXU4ICAgICBh ZXNfa2V5X2RhdGFbSElGX0FQSV9BRVNfS0VZX0RBVEFfU0laRV07Ci0JdTggICAgIGtleV9pZDsK LQl1OCAgICAgcmVzZXJ2ZWRbM107Ci0JdTggICAgIHJ4X3NlcXVlbmNlX2NvdW50ZXJbSElGX0FQ SV9SWF9TRVFVRU5DRV9DT1VOVEVSX1NJWkVdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl93 YXBpX3BhaXJ3aXNlX2tleSB7Ci0JdTggICAgIHBlZXJfYWRkcmVzc1tFVEhfQUxFTl07Ci0JdTgg ICAgIGtleV9pZDsKLQl1OCAgICAgcmVzZXJ2ZWQ7Ci0JdTggICAgIHdhcGlfa2V5X2RhdGFbSElG X0FQSV9XQVBJX0tFWV9EQVRBX1NJWkVdOwotCXU4ICAgICBtaWNfa2V5X2RhdGFbSElGX0FQSV9N SUNfS0VZX0RBVEFfU0laRV07Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX3dhcGlfZ3JvdXBf a2V5IHsKLQl1OCAgICAgd2FwaV9rZXlfZGF0YVtISUZfQVBJX1dBUElfS0VZX0RBVEFfU0laRV07 Ci0JdTggICAgIG1pY19rZXlfZGF0YVtISUZfQVBJX01JQ19LRVlfREFUQV9TSVpFXTsKLQl1OCAg ICAga2V5X2lkOwotCXU4ICAgICByZXNlcnZlZFszXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBo aWZfaWd0a19ncm91cF9rZXkgewotCXU4ICAgICBpZ3RrX2tleV9kYXRhW0hJRl9BUElfSUdUS19L RVlfREFUQV9TSVpFXTsKLQl1OCAgICAga2V5X2lkOwotCXU4ICAgICByZXNlcnZlZFszXTsKLQl1 OCAgICAgaXBuW0hJRl9BUElfSVBOX1NJWkVdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9y ZXFfYWRkX2tleSB7Ci0JdTggICAgIHR5cGU7Ci0JdTggICAgIGVudHJ5X2luZGV4OwotCXU4ICAg ICBpbnRfaWQ6MjsKLQl1OCAgICAgcmVzZXJ2ZWQxOjY7Ci0JdTggICAgIHJlc2VydmVkMjsKLQl1 bmlvbiB7Ci0JCXN0cnVjdCBoaWZfd2VwX3BhaXJ3aXNlX2tleSAgd2VwX3BhaXJ3aXNlX2tleTsK LQkJc3RydWN0IGhpZl93ZXBfZ3JvdXBfa2V5ICAgICB3ZXBfZ3JvdXBfa2V5OwotCQlzdHJ1Y3Qg aGlmX3RraXBfcGFpcndpc2Vfa2V5IHRraXBfcGFpcndpc2Vfa2V5OwotCQlzdHJ1Y3QgaGlmX3Rr aXBfZ3JvdXBfa2V5ICAgIHRraXBfZ3JvdXBfa2V5OwotCQlzdHJ1Y3QgaGlmX2Flc19wYWlyd2lz ZV9rZXkgIGFlc19wYWlyd2lzZV9rZXk7Ci0JCXN0cnVjdCBoaWZfYWVzX2dyb3VwX2tleSAgICAg YWVzX2dyb3VwX2tleTsKLQkJc3RydWN0IGhpZl93YXBpX3BhaXJ3aXNlX2tleSB3YXBpX3BhaXJ3 aXNlX2tleTsKLQkJc3RydWN0IGhpZl93YXBpX2dyb3VwX2tleSAgICB3YXBpX2dyb3VwX2tleTsK LQkJc3RydWN0IGhpZl9pZ3RrX2dyb3VwX2tleSAgICBpZ3RrX2dyb3VwX2tleTsKLQl9IGtleTsK LX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfY25mX2FkZF9rZXkgewotCV9fbGUzMiBzdGF0dXM7 Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX3JlcV9yZW1vdmVfa2V5IHsKLQl1OCAgICAgZW50 cnlfaW5kZXg7Ci0JdTggICAgIHJlc2VydmVkWzNdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhp Zl9jbmZfcmVtb3ZlX2tleSB7Ci0JX19sZTMyIHN0YXR1czsKLX0gX19wYWNrZWQ7Ci0KLWVudW0g aGlmX2V2ZW50X2luZCB7Ci0JSElGX0VWRU5UX0lORF9CU1NMT1NUICAgICAgICAgICAgICAgICAg ICAgID0gMHgxLAotCUhJRl9FVkVOVF9JTkRfQlNTUkVHQUlORUQgICAgICAgICAgICAgICAgICA9 IDB4MiwKLQlISUZfRVZFTlRfSU5EX1JDUElfUlNTSSAgICAgICAgICAgICAgICAgICAgPSAweDMs Ci0JSElGX0VWRU5UX0lORF9QU19NT0RFX0VSUk9SICAgICAgICAgICAgICAgID0gMHg0LAotCUhJ Rl9FVkVOVF9JTkRfSU5BQ1RJVklUWSAgICAgICAgICAgICAgICAgICA9IDB4NQotfTsKLQotZW51 bSBoaWZfcHNfbW9kZV9lcnJvciB7Ci0JSElGX1BTX0VSUk9SX05PX0VSUk9SICAgICAgICAgICAg ICAgICAgICAgID0gMCwKLQlISUZfUFNfRVJST1JfQVBfTk9UX1JFU1BfVE9fUE9MTCAgICAgICAg ICAgPSAxLAotCUhJRl9QU19FUlJPUl9BUF9OT1RfUkVTUF9UT19VQVBTRF9UUklHR0VSICA9IDIs Ci0JSElGX1BTX0VSUk9SX0FQX1NFTlRfVU5JQ0FTVF9JTl9ET1pFICAgICAgID0gMywKLQlISUZf UFNfRVJST1JfQVBfTk9fREFUQV9BRlRFUl9USU0gICAgICAgICAgPSA0Ci19OwotCi1zdHJ1Y3Qg aGlmX2luZF9ldmVudCB7Ci0JX19sZTMyIGV2ZW50X2lkOwotCXVuaW9uIHsKLQkJdTggICAgIHJj cGlfcnNzaTsKLQkJX19sZTMyIHBzX21vZGVfZXJyb3I7Ci0JCV9fbGUzMiBwZWVyX3N0YV9zZXQ7 Ci0JfSBldmVudF9kYXRhOwotfSBfX3BhY2tlZDsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2 ZXJzL3N0YWdpbmcvd2Z4L2hpZl9hcGlfZ2VuZXJhbC5oIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9o aWZfYXBpX2dlbmVyYWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQxODg5NDU3 MThkLi4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfYXBpX2dlbmVy YWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2NyArMCwwIEBACi0vKiBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogQXBhY2hlLTIuMCAqLwotLyoKLSAqIFdGeCBoYXJkd2FyZSBpbnRlcmZhY2UgZGVm aW5pdGlvbnMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMCwgU2lsaWNvbiBMYWJvcmF0 b3JpZXMgSW5jLgotICovCi0KLSNpZm5kZWYgV0ZYX0hJRl9BUElfR0VORVJBTF9ICi0jZGVmaW5l IFdGWF9ISUZfQVBJX0dFTkVSQUxfSAotCi0jaWZkZWYgX19LRVJORUxfXwotI2luY2x1ZGUgPGxp bnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KLSNlbHNlCi0jaW5jbHVk ZSA8bmV0L2V0aGVybmV0Lmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jZGVmaW5lIF9fcGFja2Vk IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKQotI2VuZGlmCi0KLSNkZWZpbmUgSElGX0lEX0lT X0lORElDQVRJT04gICAgICAweDgwCi0jZGVmaW5lIEhJRl9DT1VOVEVSX01BWCAgICAgICAgICAg NwotCi1zdHJ1Y3QgaGlmX21zZyB7Ci0JX19sZTE2IGxlbjsKLQl1OCAgICAgaWQ7Ci0JdTggICAg IHJlc2VydmVkOjE7Ci0JdTggICAgIGludGVyZmFjZToyOwotCXU4ICAgICBzZXFudW06MzsKLQl1 OCAgICAgZW5jcnlwdGVkOjI7Ci0JdTggICAgIGJvZHlbXTsKLX0gX19wYWNrZWQ7Ci0KLWVudW0g aGlmX2dlbmVyYWxfcmVxdWVzdHNfaWRzIHsKLQlISUZfUkVRX0lEX0NPTkZJR1VSQVRJT04gICAg ICAgID0gMHgwOSwKLQlISUZfUkVRX0lEX0NPTlRST0xfR1BJTyAgICAgICAgID0gMHgyNiwKLQlI SUZfUkVRX0lEX1NFVF9TTF9NQUNfS0VZICAgICAgID0gMHgyNywKLQlISUZfUkVRX0lEX1NMX0VY Q0hBTkdFX1BVQl9LRVlTID0gMHgyOCwKLQlISUZfUkVRX0lEX1NMX0NPTkZJR1VSRSAgICAgICAg ID0gMHgyOSwKLQlISUZfUkVRX0lEX1BSRVZFTlRfUk9MTEJBQ0sgICAgID0gMHgyYSwKLQlISUZf UkVRX0lEX1BUQV9TRVRUSU5HUyAgICAgICAgID0gMHgyYiwKLQlISUZfUkVRX0lEX1BUQV9QUklP UklUWSAgICAgICAgID0gMHgyYywKLQlISUZfUkVRX0lEX1BUQV9TVEFURSAgICAgICAgICAgID0g MHgyZCwKLQlISUZfUkVRX0lEX1NIVVRfRE9XTiAgICAgICAgICAgID0gMHgzMiwKLX07Ci0KLWVu dW0gaGlmX2dlbmVyYWxfY29uZmlybWF0aW9uc19pZHMgewotCUhJRl9DTkZfSURfQ09ORklHVVJB VElPTiAgICAgICAgPSAweDA5LAotCUhJRl9DTkZfSURfQ09OVFJPTF9HUElPICAgICAgICAgPSAw eDI2LAotCUhJRl9DTkZfSURfU0VUX1NMX01BQ19LRVkgICAgICAgPSAweDI3LAotCUhJRl9DTkZf SURfU0xfRVhDSEFOR0VfUFVCX0tFWVMgPSAweDI4LAotCUhJRl9DTkZfSURfU0xfQ09ORklHVVJF ICAgICAgICAgPSAweDI5LAotCUhJRl9DTkZfSURfUFJFVkVOVF9ST0xMQkFDSyAgICAgPSAweDJh LAotCUhJRl9DTkZfSURfUFRBX1NFVFRJTkdTICAgICAgICAgPSAweDJiLAotCUhJRl9DTkZfSURf UFRBX1BSSU9SSVRZICAgICAgICAgPSAweDJjLAotCUhJRl9DTkZfSURfUFRBX1NUQVRFICAgICAg ICAgICAgPSAweDJkLAotCUhJRl9DTkZfSURfU0hVVF9ET1dOICAgICAgICAgICAgPSAweDMyLAot fTsKLQotZW51bSBoaWZfZ2VuZXJhbF9pbmRpY2F0aW9uc19pZHMgewotCUhJRl9JTkRfSURfRVhD RVBUSU9OICAgICAgICAgICAgPSAweGUwLAotCUhJRl9JTkRfSURfU1RBUlRVUCAgICAgICAgICAg ICAgPSAweGUxLAotCUhJRl9JTkRfSURfV0FLRVVQICAgICAgICAgICAgICAgPSAweGUyLAotCUhJ Rl9JTkRfSURfR0VORVJJQyAgICAgICAgICAgICAgPSAweGUzLAotCUhJRl9JTkRfSURfRVJST1Ig ICAgICAgICAgICAgICAgPSAweGU0LAotCUhJRl9JTkRfSURfU0xfRVhDSEFOR0VfUFVCX0tFWVMg PSAweGU1Ci19OwotCi0jZGVmaW5lIEhJRl9TVEFUVVNfU1VDQ0VTUyAgICAgICAgICAgICAgICAg ICAgICAgICAoY3B1X3RvX2xlMzIoMHgwMDAwKSkKLSNkZWZpbmUgSElGX1NUQVRVU19GQUlMICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChjcHVfdG9fbGUzMigweDAwMDEpKQotI2RlZmluZSBI SUZfU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSICAgICAgICAgICAgICAgKGNwdV90b19sZTMyKDB4 MDAwMikpCi0jZGVmaW5lIEhJRl9TVEFUVVNfV0FSTklORyAgICAgICAgICAgICAgICAgICAgICAg ICAoY3B1X3RvX2xlMzIoMHgwMDAzKSkKLSNkZWZpbmUgSElGX1NUQVRVU19VTktOT1dOX1JFUVVF U1QgICAgICAgICAgICAgICAgIChjcHVfdG9fbGUzMigweDAwMDQpKQotI2RlZmluZSBISUZfU1RB VFVTX1JYX0ZBSUxfREVDUllQVCAgICAgICAgICAgICAgICAgKGNwdV90b19sZTMyKDB4MDAxMCkp Ci0jZGVmaW5lIEhJRl9TVEFUVVNfUlhfRkFJTF9NSUMgICAgICAgICAgICAgICAgICAgICAoY3B1 X3RvX2xlMzIoMHgwMDExKSkKLSNkZWZpbmUgSElGX1NUQVRVU19SWF9GQUlMX05PX0tFWSAgICAg ICAgICAgICAgICAgIChjcHVfdG9fbGUzMigweDAwMTIpKQotI2RlZmluZSBISUZfU1RBVFVTX1RY X0ZBSUxfUkVUUklFUyAgICAgICAgICAgICAgICAgKGNwdV90b19sZTMyKDB4MDAxMykpCi0jZGVm aW5lIEhJRl9TVEFUVVNfVFhfRkFJTF9USU1FT1VUICAgICAgICAgICAgICAgICAoY3B1X3RvX2xl MzIoMHgwMDE0KSkKLSNkZWZpbmUgSElGX1NUQVRVU19UWF9GQUlMX1JFUVVFVUUgICAgICAgICAg ICAgICAgIChjcHVfdG9fbGUzMigweDAwMTUpKQotI2RlZmluZSBISUZfU1RBVFVTX1JFRlVTRUQg ICAgICAgICAgICAgICAgICAgICAgICAgKGNwdV90b19sZTMyKDB4MDAxNikpCi0jZGVmaW5lIEhJ Rl9TVEFUVVNfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3B1X3RvX2xlMzIoMHgw MDE3KSkKLSNkZWZpbmUgSElGX1NUQVRVU19TTEtfU0VUX0tFWV9TVUNDRVNTICAgICAgICAgICAg IChjcHVfdG9fbGUzMigweDAwNUEpKQotI2RlZmluZSBISUZfU1RBVFVTX1NMS19TRVRfS0VZX0FM UkVBRFlfQlVSTkVEICAgICAgKGNwdV90b19sZTMyKDB4MDA2QikpCi0jZGVmaW5lIEhJRl9TVEFU VVNfU0xLX1NFVF9LRVlfRElTQUxMT1dFRF9NT0RFICAgICAoY3B1X3RvX2xlMzIoMHgwMDdDKSkK LSNkZWZpbmUgSElGX1NUQVRVU19TTEtfU0VUX0tFWV9VTktOT1dOX01PREUgICAgICAgIChjcHVf dG9fbGUzMigweDAwOEQpKQotI2RlZmluZSBISUZfU1RBVFVTX1NMS19ORUdPX1NVQ0NFU1MgICAg ICAgICAgICAgICAgKGNwdV90b19sZTMyKDB4MDA5RSkpCi0jZGVmaW5lIEhJRl9TVEFUVVNfU0xL X05FR09fRkFJTEVEICAgICAgICAgICAgICAgICAoY3B1X3RvX2xlMzIoMHgwMEFGKSkKLSNkZWZp bmUgSElGX1NUQVRVU19ST0xMQkFDS19TVUNDRVNTICAgICAgICAgICAgICAgIChjcHVfdG9fbGUz MigweDEyMzQpKQotI2RlZmluZSBISUZfU1RBVFVTX1JPTExCQUNLX0ZBSUwgICAgICAgICAgICAg ICAgICAgKGNwdV90b19sZTMyKDB4MTI1NikpCi0KLWVudW0gaGlmX2FwaV9yYXRlX2luZGV4IHsK LQlBUElfUkFURV9JTkRFWF9CXzFNQlBTICAgICA9IDAsCi0JQVBJX1JBVEVfSU5ERVhfQl8yTUJQ UyAgICAgPSAxLAotCUFQSV9SQVRFX0lOREVYX0JfNVA1TUJQUyAgID0gMiwKLQlBUElfUkFURV9J TkRFWF9CXzExTUJQUyAgICA9IDMsCi0JQVBJX1JBVEVfSU5ERVhfUEJDQ18yMk1CUFMgPSA0LAot CUFQSV9SQVRFX0lOREVYX1BCQ0NfMzNNQlBTID0gNSwKLQlBUElfUkFURV9JTkRFWF9HXzZNQlBT ICAgICA9IDYsCi0JQVBJX1JBVEVfSU5ERVhfR185TUJQUyAgICAgPSA3LAotCUFQSV9SQVRFX0lO REVYX0dfMTJNQlBTICAgID0gOCwKLQlBUElfUkFURV9JTkRFWF9HXzE4TUJQUyAgICA9IDksCi0J QVBJX1JBVEVfSU5ERVhfR18yNE1CUFMgICAgPSAxMCwKLQlBUElfUkFURV9JTkRFWF9HXzM2TUJQ UyAgICA9IDExLAotCUFQSV9SQVRFX0lOREVYX0dfNDhNQlBTICAgID0gMTIsCi0JQVBJX1JBVEVf SU5ERVhfR181NE1CUFMgICAgPSAxMywKLQlBUElfUkFURV9JTkRFWF9OXzZQNU1CUFMgICA9IDE0 LAotCUFQSV9SQVRFX0lOREVYX05fMTNNQlBTICAgID0gMTUsCi0JQVBJX1JBVEVfSU5ERVhfTl8x OVA1TUJQUyAgPSAxNiwKLQlBUElfUkFURV9JTkRFWF9OXzI2TUJQUyAgICA9IDE3LAotCUFQSV9S QVRFX0lOREVYX05fMzlNQlBTICAgID0gMTgsCi0JQVBJX1JBVEVfSU5ERVhfTl81Mk1CUFMgICAg PSAxOSwKLQlBUElfUkFURV9JTkRFWF9OXzU4UDVNQlBTICA9IDIwLAotCUFQSV9SQVRFX0lOREVY X05fNjVNQlBTICAgID0gMjEsCi0JQVBJX1JBVEVfTlVNX0VOVFJJRVMgICAgICAgPSAyMgotfTsK LQotZW51bSBoaWZfZndfdHlwZSB7Ci0JSElGX0ZXX1RZUEVfRVRGICA9IDB4MCwKLQlISUZfRldf VFlQRV9XRk0gID0gMHgxLAotCUhJRl9GV19UWVBFX1dTTSAgPSAweDIKLX07Ci0KLXN0cnVjdCBo aWZfaW5kX3N0YXJ0dXAgewotCS8vIEFzIHRoZSBvdGhlcnMsIHRoaXMgc3RydWN0IGlzIGludGVy cHJldGVkIGFzIGxpdHRsZSBlbmRpYW4gYnkgdGhlCi0JLy8gZGV2aWNlLiBIb3dldmVyLCB0aGlz IHN0cnVjdCBpcyBhbHNvIHVzZWQgYnkgdGhlIGRyaXZlci4gV2UgcHJlZmVyIHRvCi0JLy8gZGVj bGFyZSBpdCBpbiBuYXRpdmUgb3JkZXIgYW5kIGRvaW5nIGJ5dGUgc3dhcCBvbiByZWNlcHRpb24u Ci0JX19sZTMyIHN0YXR1czsKLQl1MTYgICAgaGFyZHdhcmVfaWQ7Ci0JdTggICAgIG9wblsxNF07 Ci0JdTggICAgIHVpZFs4XTsKLQl1MTYgICAgbnVtX2lucF9jaF9idWZzOwotCXUxNiAgICBzaXpl X2lucF9jaF9idWY7Ci0JdTggICAgIG51bV9saW5rc19hcDsKLQl1OCAgICAgbnVtX2ludGVyZmFj ZXM7Ci0JdTggICAgIG1hY19hZGRyWzJdW0VUSF9BTEVOXTsKLQl1OCAgICAgYXBpX3ZlcnNpb25f bWlub3I7Ci0JdTggICAgIGFwaV92ZXJzaW9uX21ham9yOwotCXU4ICAgICBsaW5rX21vZGU6MjsK LQl1OCAgICAgcmVzZXJ2ZWQxOjY7Ci0JdTggICAgIHJlc2VydmVkMjsKLQl1OCAgICAgcmVzZXJ2 ZWQzOwotCXU4ICAgICByZXNlcnZlZDQ7Ci0JdTggICAgIGZpcm13YXJlX2J1aWxkOwotCXU4ICAg ICBmaXJtd2FyZV9taW5vcjsKLQl1OCAgICAgZmlybXdhcmVfbWFqb3I7Ci0JdTggICAgIGZpcm13 YXJlX3R5cGU7Ci0JdTggICAgIGRpc2FibGVkX2NoYW5uZWxfbGlzdFsyXTsKLQl1OCAgICAgcmVn aW9uX3NlbF9tb2RlOjQ7Ci0JdTggICAgIHJlc2VydmVkNTo0OwotCXU4ICAgICBwaHkxX3JlZ2lv bjozOwotCXU4ICAgICBwaHkwX3JlZ2lvbjozOwotCXU4ICAgICBvdHBfcGh5X3ZlcjoyOwotCXUz MiAgICBzdXBwb3J0ZWRfcmF0ZV9tYXNrOwotCXU4ICAgICBmaXJtd2FyZV9sYWJlbFsxMjhdOwot fSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9pbmRfd2FrZXVwIHsKLX0gX19wYWNrZWQ7Ci0KLXN0 cnVjdCBoaWZfcmVxX2NvbmZpZ3VyYXRpb24gewotCV9fbGUxNiBsZW5ndGg7Ci0JdTggICAgIHBk c19kYXRhW107Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX2NuZl9jb25maWd1cmF0aW9uIHsK LQlfX2xlMzIgc3RhdHVzOwotfSBfX3BhY2tlZDsKLQotZW51bSBoaWZfZ3Bpb19tb2RlIHsKLQlI SUZfR1BJT19NT0RFX0QwICAgICAgID0gMHgwLAotCUhJRl9HUElPX01PREVfRDEgICAgICAgPSAw eDEsCi0JSElGX0dQSU9fTU9ERV9PRDAgICAgICA9IDB4MiwKLQlISUZfR1BJT19NT0RFX09EMSAg ICAgID0gMHgzLAotCUhJRl9HUElPX01PREVfVFJJU1RBVEUgPSAweDQsCi0JSElGX0dQSU9fTU9E RV9UT0dHTEUgICA9IDB4NSwKLQlISUZfR1BJT19NT0RFX1JFQUQgICAgID0gMHg2Ci19OwotCi1z dHJ1Y3QgaGlmX3JlcV9jb250cm9sX2dwaW8gewotCXU4ICAgICBncGlvX2xhYmVsOwotCXU4ICAg ICBncGlvX21vZGU7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX2NuZl9jb250cm9sX2dwaW8g ewotCV9fbGUzMiBzdGF0dXM7Ci0JX19sZTMyIHZhbHVlOwotfSBfX3BhY2tlZDsKLQotZW51bSBo aWZfZ2VuZXJpY19pbmRpY2F0aW9uX3R5cGUgewotCUhJRl9HRU5FUklDX0lORElDQVRJT05fVFlQ RV9SQVcgICAgICAgICAgICAgICAgPSAweDAsCi0JSElGX0dFTkVSSUNfSU5ESUNBVElPTl9UWVBF X1NUUklORyAgICAgICAgICAgICA9IDB4MSwKLQlISUZfR0VORVJJQ19JTkRJQ0FUSU9OX1RZUEVf UlhfU1RBVFMgICAgICAgICAgID0gMHgyLAotCUhJRl9HRU5FUklDX0lORElDQVRJT05fVFlQRV9U WF9QT1dFUl9MT09QX0lORk8gPSAweDMsCi19OwotCi1zdHJ1Y3QgaGlmX3J4X3N0YXRzIHsKLQlf X2xlMzIgbmJfcnhfZnJhbWU7Ci0JX19sZTMyIG5iX2NyY19mcmFtZTsKLQlfX2xlMzIgcGVyX3Rv dGFsOwotCV9fbGUzMiB0aHJvdWdocHV0OwotCV9fbGUzMiBuYl9yeF9ieV9yYXRlW0FQSV9SQVRF X05VTV9FTlRSSUVTXTsKLQlfX2xlMTYgcGVyW0FQSV9SQVRFX05VTV9FTlRSSUVTXTsKLQlfX2xl MTYgc25yW0FQSV9SQVRFX05VTV9FTlRSSUVTXTsgIC8vIHNpZ25lZCB2YWx1ZQotCV9fbGUxNiBy c3NpW0FQSV9SQVRFX05VTV9FTlRSSUVTXTsgLy8gc2lnbmVkIHZhbHVlCi0JX19sZTE2IGNmb1tB UElfUkFURV9OVU1fRU5UUklFU107ICAvLyBzaWduZWQgdmFsdWUKLQlfX2xlMzIgZGF0ZTsKLQlf X2xlMzIgcHdyX2Nsa19mcmVxOwotCXU4ICAgICBpc19leHRfcHdyX2NsazsKLQlzOCAgICAgY3Vy cmVudF90ZW1wOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl90eF9wb3dlcl9sb29wX2luZm8g ewotCV9fbGUxNiB0eF9nYWluX2RpZzsKLQlfX2xlMTYgdHhfZ2Fpbl9wYTsKLQlfX2xlMTYgdGFy Z2V0X3BvdXQ7IC8vIHNpZ25lZCB2YWx1ZQotCV9fbGUxNiBwX2VzdGltYXRpb247IC8vIHNpZ25l ZCB2YWx1ZQotCV9fbGUxNiB2cGRldDsKLQl1OCAgICAgbWVhc3VyZW1lbnRfaW5kZXg7Ci0JdTgg ICAgIHJlc2VydmVkOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9pbmRfZ2VuZXJpYyB7Ci0J X19sZTMyIHR5cGU7Ci0JdW5pb24gewotCQlzdHJ1Y3QgaGlmX3J4X3N0YXRzIHJ4X3N0YXRzOwot CQlzdHJ1Y3QgaGlmX3R4X3Bvd2VyX2xvb3BfaW5mbyB0eF9wb3dlcl9sb29wX2luZm87Ci0JfSBk YXRhOwotfSBfX3BhY2tlZDsKLQotZW51bSBoaWZfZXJyb3IgewotCUhJRl9FUlJPUl9GSVJNV0FS RV9ST0xMQkFDSyAgICAgICAgICAgPSAweDAwLAotCUhJRl9FUlJPUl9GSVJNV0FSRV9ERUJVR19F TkFCTEVEICAgICAgPSAweDAxLAotCUhJRl9FUlJPUl9TTEtfT1VUREFURURfU0VTU0lPTl9LRVkg ICAgPSAweDAyLAotCUhJRl9FUlJPUl9TTEtfU0VTU0lPTl9LRVkgICAgICAgICAgICAgPSAweDAz LAotCUhJRl9FUlJPUl9PT1JfVk9MVEFHRSAgICAgICAgICAgICAgICAgPSAweDA0LAotCUhJRl9F UlJPUl9QRFNfUEFZTE9BRCAgICAgICAgICAgICAgICAgPSAweDA1LAotCUhJRl9FUlJPUl9PT1Jf VEVNUEVSQVRVUkUgICAgICAgICAgICAgPSAweDA2LAotCUhJRl9FUlJPUl9TTEtfUkVRX0RVUklO R19LRVlfRVhDSEFOR0UgPSAweDA3LAotCUhJRl9FUlJPUl9TTEtfTVVMVElfVFhfVU5TVVBQT1JU RUQgICAgPSAweDA4LAotCUhJRl9FUlJPUl9TTEtfT1ZFUkZMT1cgICAgICAgICAgICAgICAgPSAw eDA5LAotCUhJRl9FUlJPUl9TTEtfREVDUllQVElPTiAgICAgICAgICAgICAgPSAweDBhLAotCUhJ Rl9FUlJPUl9TTEtfV1JPTkdfRU5DUllQVElPTl9TVEFURSAgPSAweDBiLAotCUhJRl9FUlJPUl9I SUZfQlVTX0ZSRVFVRU5DWV9UT09fTE9XICAgPSAweDBjLAotCUhJRl9FUlJPUl9ISUZfUlhfREFU QV9UT09fTEFSR0UgICAgICAgPSAweDBlLAotCUhJRl9FUlJPUl9ISUZfVFhfUVVFVUVfRlVMTCAg ICAgICAgICAgPSAweDBkLAotCUhJRl9FUlJPUl9ISUZfQlVTICAgICAgICAgICAgICAgICAgICAg PSAweDBmLAotCUhJRl9FUlJPUl9QRFNfVEVTVEZFQVRVUkUgICAgICAgICAgICAgPSAweDEwLAot CUhJRl9FUlJPUl9TTEtfVU5DT05GSUdVUkVEICAgICAgICAgICAgPSAweDExLAotfTsKLQotc3Ry dWN0IGhpZl9pbmRfZXJyb3IgewotCV9fbGUzMiB0eXBlOwotCXU4ICAgICBkYXRhW107Ci19IF9f cGFja2VkOwotCi1zdHJ1Y3QgaGlmX2luZF9leGNlcHRpb24gewotCV9fbGUzMiB0eXBlOwotCXU4 ICAgICBkYXRhW107Ci19IF9fcGFja2VkOwotCi1lbnVtIGhpZl9zZWN1cmVfbGlua19zdGF0ZSB7 Ci0JU0VDX0xJTktfVU5BVkFJTEFCTEUgPSAweDAsCi0JU0VDX0xJTktfUkVTRVJWRUQgICAgPSAw eDEsCi0JU0VDX0xJTktfRVZBTCAgICAgICAgPSAweDIsCi0JU0VDX0xJTktfRU5GT1JDRUQgICAg PSAweDMKLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZf YXBpX21pYi5oIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfYXBpX21pYi5oCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCBhY2U5MjQ3MjBjZTYuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2 ZXJzL3N0YWdpbmcvd2Z4L2hpZl9hcGlfbWliLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNDMgKzAs MCBAQAotLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAgKi8KLS8qCi0gKiBX RnggaGFyZHdhcmUgaW50ZXJmYWNlIGRlZmluaXRpb25zCi0gKgotICogQ29weXJpZ2h0IChjKSAy MDE4LTIwMjAsIFNpbGljb24gTGFib3JhdG9yaWVzIEluYy4KLSAqLwotCi0jaWZuZGVmIFdGWF9I SUZfQVBJX01JQl9ICi0jZGVmaW5lIFdGWF9ISUZfQVBJX01JQl9ICi0KLSNpbmNsdWRlICJoaWZf YXBpX2dlbmVyYWwuaCIKLQotI2RlZmluZSBISUZfQVBJX0lQVjRfQUREUkVTU19TSVpFIDQKLSNk ZWZpbmUgSElGX0FQSV9JUFY2X0FERFJFU1NfU0laRSAxNgotCi1lbnVtIGhpZl9taWJfaWRzIHsK LQlISUZfTUlCX0lEX0dMX09QRVJBVElPTkFMX1BPV0VSX01PREUgICAgICAgID0gMHgyMDAwLAot CUhJRl9NSUJfSURfR0xfQkxPQ0tfQUNLX0lORk8gICAgICAgICAgICAgICAgPSAweDIwMDEsCi0J SElGX01JQl9JRF9HTF9TRVRfTVVMVElfTVNHICAgICAgICAgICAgICAgICA9IDB4MjAwMiwKLQlI SUZfTUlCX0lEX0NDQV9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgID0gMHgyMDAzLAotCUhJ Rl9NSUJfSURfRVRIRVJUWVBFX0RBVEFGUkFNRV9DT05ESVRJT04gICAgPSAweDIwMTAsCi0JSElG X01JQl9JRF9QT1JUX0RBVEFGUkFNRV9DT05ESVRJT04gICAgICAgICA9IDB4MjAxMSwKLQlISUZf TUlCX0lEX01BR0lDX0RBVEFGUkFNRV9DT05ESVRJT04gICAgICAgID0gMHgyMDEyLAotCUhJRl9N SUJfSURfTUFDX0FERFJfREFUQUZSQU1FX0NPTkRJVElPTiAgICAgPSAweDIwMTMsCi0JSElGX01J Ql9JRF9JUFY0X0FERFJfREFUQUZSQU1FX0NPTkRJVElPTiAgICA9IDB4MjAxNCwKLQlISUZfTUlC X0lEX0lQVjZfQUREUl9EQVRBRlJBTUVfQ09ORElUSU9OICAgID0gMHgyMDE1LAotCUhJRl9NSUJf SURfVUNfTUNfQkNfREFUQUZSQU1FX0NPTkRJVElPTiAgICAgPSAweDIwMTYsCi0JSElGX01JQl9J RF9DT05GSUdfREFUQV9GSUxURVIgICAgICAgICAgICAgICA9IDB4MjAxNywKLQlISUZfTUlCX0lE X1NFVF9EQVRBX0ZJTFRFUklORyAgICAgICAgICAgICAgID0gMHgyMDE4LAotCUhJRl9NSUJfSURf QVJQX0lQX0FERFJFU1NFU19UQUJMRSAgICAgICAgICAgPSAweDIwMTksCi0JSElGX01JQl9JRF9O U19JUF9BRERSRVNTRVNfVEFCTEUgICAgICAgICAgICA9IDB4MjAxQSwKLQlISUZfTUlCX0lEX1JY X0ZJTFRFUiAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyMDFCLAotCUhJRl9NSUJfSURfQkVB Q09OX0ZJTFRFUl9UQUJMRSAgICAgICAgICAgICAgPSAweDIwMUMsCi0JSElGX01JQl9JRF9CRUFD T05fRklMVEVSX0VOQUJMRSAgICAgICAgICAgICA9IDB4MjAxRCwKLQlISUZfTUlCX0lEX0dSUF9T RVFfQ09VTlRFUiAgICAgICAgICAgICAgICAgID0gMHgyMDMwLAotCUhJRl9NSUJfSURfVFNGX0NP VU5URVIgICAgICAgICAgICAgICAgICAgICAgPSAweDIwMzEsCi0JSElGX01JQl9JRF9TVEFUSVNU SUNTX1RBQkxFICAgICAgICAgICAgICAgICA9IDB4MjAzMiwKLQlISUZfTUlCX0lEX0NPVU5URVJT X1RBQkxFICAgICAgICAgICAgICAgICAgID0gMHgyMDMzLAotCUhJRl9NSUJfSURfTUFYX1RYX1BP V0VSX0xFVkVMICAgICAgICAgICAgICAgPSAweDIwMzQsCi0JSElGX01JQl9JRF9FWFRFTkRFRF9D T1VOVEVSU19UQUJMRSAgICAgICAgICA9IDB4MjAzNSwKLQlISUZfTUlCX0lEX0RPVDExX01BQ19B RERSRVNTICAgICAgICAgICAgICAgID0gMHgyMDQwLAotCUhJRl9NSUJfSURfRE9UMTFfTUFYX1RS QU5TTUlUX01TRFVfTElGRVRJTUUgPSAweDIwNDEsCi0JSElGX01JQl9JRF9ET1QxMV9NQVhfUkVD RUlWRV9MSUZFVElNRSAgICAgICA9IDB4MjA0MiwKLQlISUZfTUlCX0lEX0RPVDExX1dFUF9ERUZB VUxUX0tFWV9JRCAgICAgICAgID0gMHgyMDQzLAotCUhJRl9NSUJfSURfRE9UMTFfUlRTX1RIUkVT SE9MRCAgICAgICAgICAgICAgPSAweDIwNDQsCi0JSElGX01JQl9JRF9TTE9UX1RJTUUgICAgICAg ICAgICAgICAgICAgICAgICA9IDB4MjA0NSwKLQlISUZfTUlCX0lEX0NVUlJFTlRfVFhfUE9XRVJf TEVWRUwgICAgICAgICAgID0gMHgyMDQ2LAotCUhJRl9NSUJfSURfTk9OX0VSUF9QUk9URUNUSU9O ICAgICAgICAgICAgICAgPSAweDIwNDcsCi0JSElGX01JQl9JRF9URU1QTEFURV9GUkFNRSAgICAg ICAgICAgICAgICAgICA9IDB4MjA0OCwKLQlISUZfTUlCX0lEX0JFQUNPTl9XQUtFVVBfUEVSSU9E ICAgICAgICAgICAgID0gMHgyMDQ5LAotCUhJRl9NSUJfSURfUkNQSV9SU1NJX1RIUkVTSE9MRCAg ICAgICAgICAgICAgPSAweDIwNEEsCi0JSElGX01JQl9JRF9CTE9DS19BQ0tfUE9MSUNZICAgICAg ICAgICAgICAgICA9IDB4MjA0QiwKLQlISUZfTUlCX0lEX09WRVJSSURFX0lOVEVSTkFMX1RYX1JB VEUgICAgICAgID0gMHgyMDRDLAotCUhJRl9NSUJfSURfU0VUX0FTU09DSUFUSU9OX01PREUgICAg ICAgICAgICAgPSAweDIwNEQsCi0JSElGX01JQl9JRF9TRVRfVUFQU0RfSU5GT1JNQVRJT04gICAg ICAgICAgICA9IDB4MjA0RSwKLQlISUZfTUlCX0lEX1NFVF9UWF9SQVRFX1JFVFJZX1BPTElDWSAg ICAgICAgID0gMHgyMDRGLAotCUhJRl9NSUJfSURfUFJPVEVDVEVEX01HTVRfUE9MSUNZICAgICAg ICAgICAgPSAweDIwNTAsCi0JSElGX01JQl9JRF9TRVRfSFRfUFJPVEVDVElPTiAgICAgICAgICAg ICAgICA9IDB4MjA1MSwKLQlISUZfTUlCX0lEX0tFRVBfQUxJVkVfUEVSSU9EICAgICAgICAgICAg ICAgID0gMHgyMDUyLAotCUhJRl9NSUJfSURfQVJQX0tFRVBfQUxJVkVfUEVSSU9EICAgICAgICAg ICAgPSAweDIwNTMsCi0JSElGX01JQl9JRF9JTkFDVElWSVRZX1RJTUVSICAgICAgICAgICAgICAg ICA9IDB4MjA1NCwKLQlISUZfTUlCX0lEX0lOVEVSRkFDRV9QUk9URUNUSU9OICAgICAgICAgICAg ID0gMHgyMDU1LAotCUhJRl9NSUJfSURfQkVBQ09OX1NUQVRTICAgICAgICAgICAgICAgICAgICAg PSAweDIwNTYsCi19OwotCi1lbnVtIGhpZl9vcF9wb3dlcl9tb2RlIHsKLQlISUZfT1BfUE9XRVJf TU9ERV9BQ1RJVkUgICAgPSAweDAsCi0JSElGX09QX1BPV0VSX01PREVfRE9aRSAgICAgID0gMHgx LAotCUhJRl9PUF9QT1dFUl9NT0RFX1FVSUVTQ0VOVCA9IDB4MgotfTsKLQotc3RydWN0IGhpZl9t aWJfZ2xfb3BlcmF0aW9uYWxfcG93ZXJfbW9kZSB7Ci0JdTggICAgIHBvd2VyX21vZGU6NDsKLQl1 OCAgICAgcmVzZXJ2ZWQxOjM7Ci0JdTggICAgIHd1cF9pbmRfYWN0aXZhdGlvbjoxOwotCXU4ICAg ICByZXNlcnZlZDJbM107Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX21pYl9nbF9zZXRfbXVs dGlfbXNnIHsKLQl1OCAgICAgZW5hYmxlX211bHRpX3R4X2NvbmY6MTsKLQl1OCAgICAgcmVzZXJ2 ZWQxOjc7Ci0JdTggICAgIHJlc2VydmVkMlszXTsKLX0gX19wYWNrZWQ7Ci0KLWVudW0gaGlmX2Fy cF9uc19mcmFtZV90cmVhdG1lbnQgewotCUhJRl9BUlBfTlNfRklMVEVSSU5HX0RJU0FCTEUgPSAw eDAsCi0JSElGX0FSUF9OU19GSUxURVJJTkdfRU5BQkxFICA9IDB4MSwKLQlISUZfQVJQX05TX1JF UExZX0VOQUJMRSAgICAgID0gMHgyCi19OwotCi1zdHJ1Y3QgaGlmX21pYl9hcnBfaXBfYWRkcl90 YWJsZSB7Ci0JdTggICAgIGNvbmRpdGlvbl9pZHg7Ci0JdTggICAgIGFycF9lbmFibGU7Ci0JdTgg ICAgIHJlc2VydmVkWzJdOwotCXU4ICAgICBpcHY0X2FkZHJlc3NbSElGX0FQSV9JUFY0X0FERFJF U1NfU0laRV07Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgaGlmX21pYl9yeF9maWx0ZXIgewotCXU4 ICAgICByZXNlcnZlZDE6MTsKLQl1OCAgICAgYnNzaWRfZmlsdGVyOjE7Ci0JdTggICAgIHJlc2Vy dmVkMjoxOwotCXU4ICAgICBmd2RfcHJvYmVfcmVxOjE7Ci0JdTggICAgIGtlZXBfYWxpdmVfZmls dGVyOjE7Ci0JdTggICAgIHJlc2VydmVkMzozOwotCXU4ICAgICByZXNlcnZlZDRbM107Ci19IF9f cGFja2VkOwotCi1zdHJ1Y3QgaGlmX2llX3RhYmxlX2VudHJ5IHsKLQl1OCAgICAgaWVfaWQ7Ci0J dTggICAgIGhhc19jaGFuZ2VkOjE7Ci0JdTggICAgIG5vX2xvbmdlcjoxOwotCXU4ICAgICBoYXNf YXBwZWFyZWQ6MTsKLQl1OCAgICAgcmVzZXJ2ZWQ6MTsKLQl1OCAgICAgbnVtX21hdGNoX2RhdGE6 NDsKLQl1OCAgICAgb3VpWzNdOwotCXU4ICAgICBtYXRjaF9kYXRhWzNdOwotfSBfX3BhY2tlZDsK LQotc3RydWN0IGhpZl9taWJfYmNuX2ZpbHRlcl90YWJsZSB7Ci0JX19sZTMyIG51bV9vZl9pbmZv X2VsbXRzOwotCXN0cnVjdCBoaWZfaWVfdGFibGVfZW50cnkgaWVfdGFibGVbXTsKLX0gX19wYWNr ZWQ7Ci0KLWVudW0gaGlmX2JlYWNvbl9maWx0ZXIgewotCUhJRl9CRUFDT05fRklMVEVSX0RJU0FC TEUgID0gMHgwLAotCUhJRl9CRUFDT05fRklMVEVSX0VOQUJMRSAgID0gMHgxLAotCUhJRl9CRUFD T05fRklMVEVSX0FVVE9fRVJQID0gMHgyCi19OwotCi1zdHJ1Y3QgaGlmX21pYl9iY25fZmlsdGVy X2VuYWJsZSB7Ci0JX19sZTMyIGVuYWJsZTsKLQlfX2xlMzIgYmNuX2NvdW50OwotfSBfX3BhY2tl ZDsKLQotc3RydWN0IGhpZl9taWJfZXh0ZW5kZWRfY291bnRfdGFibGUgewotCV9fbGUzMiBjb3Vu dF9wbGNwX2Vycm9yczsKLQlfX2xlMzIgY291bnRfZmNzX2Vycm9yczsKLQlfX2xlMzIgY291bnRf dHhfcGFja2V0czsKLQlfX2xlMzIgY291bnRfcnhfcGFja2V0czsKLQlfX2xlMzIgY291bnRfcnhf cGFja2V0X2Vycm9yczsKLQlfX2xlMzIgY291bnRfcnhfZGVjcnlwdGlvbl9mYWlsdXJlczsKLQlf X2xlMzIgY291bnRfcnhfbWljX2ZhaWx1cmVzOwotCV9fbGUzMiBjb3VudF9yeF9ub19rZXlfZmFp bHVyZXM7Ci0JX19sZTMyIGNvdW50X3R4X211bHRpY2FzdF9mcmFtZXM7Ci0JX19sZTMyIGNvdW50 X3R4X2ZyYW1lc19zdWNjZXNzOwotCV9fbGUzMiBjb3VudF90eF9mcmFtZV9mYWlsdXJlczsKLQlf X2xlMzIgY291bnRfdHhfZnJhbWVzX3JldHJpZWQ7Ci0JX19sZTMyIGNvdW50X3R4X2ZyYW1lc19t dWx0aV9yZXRyaWVkOwotCV9fbGUzMiBjb3VudF9yeF9mcmFtZV9kdXBsaWNhdGVzOwotCV9fbGUz MiBjb3VudF9ydHNfc3VjY2VzczsKLQlfX2xlMzIgY291bnRfcnRzX2ZhaWx1cmVzOwotCV9fbGUz MiBjb3VudF9hY2tfZmFpbHVyZXM7Ci0JX19sZTMyIGNvdW50X3J4X211bHRpY2FzdF9mcmFtZXM7 Ci0JX19sZTMyIGNvdW50X3J4X2ZyYW1lc19zdWNjZXNzOwotCV9fbGUzMiBjb3VudF9yeF9jbWFj aWN2X2Vycm9yczsKLQlfX2xlMzIgY291bnRfcnhfY21hY19yZXBsYXlzOwotCV9fbGUzMiBjb3Vu dF9yeF9tZ210X2NjbXBfcmVwbGF5czsKLQlfX2xlMzIgY291bnRfcnhfYmlwbWljX2Vycm9yczsK LQlfX2xlMzIgY291bnRfcnhfYmVhY29uOwotCV9fbGUzMiBjb3VudF9taXNzX2JlYWNvbjsKLQlf X2xlMzIgcmVzZXJ2ZWRbMTVdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9taWJfY291bnRf dGFibGUgewotCV9fbGUzMiBjb3VudF9wbGNwX2Vycm9yczsKLQlfX2xlMzIgY291bnRfZmNzX2Vy cm9yczsKLQlfX2xlMzIgY291bnRfdHhfcGFja2V0czsKLQlfX2xlMzIgY291bnRfcnhfcGFja2V0 czsKLQlfX2xlMzIgY291bnRfcnhfcGFja2V0X2Vycm9yczsKLQlfX2xlMzIgY291bnRfcnhfZGVj cnlwdGlvbl9mYWlsdXJlczsKLQlfX2xlMzIgY291bnRfcnhfbWljX2ZhaWx1cmVzOwotCV9fbGUz MiBjb3VudF9yeF9ub19rZXlfZmFpbHVyZXM7Ci0JX19sZTMyIGNvdW50X3R4X211bHRpY2FzdF9m cmFtZXM7Ci0JX19sZTMyIGNvdW50X3R4X2ZyYW1lc19zdWNjZXNzOwotCV9fbGUzMiBjb3VudF90 eF9mcmFtZV9mYWlsdXJlczsKLQlfX2xlMzIgY291bnRfdHhfZnJhbWVzX3JldHJpZWQ7Ci0JX19s ZTMyIGNvdW50X3R4X2ZyYW1lc19tdWx0aV9yZXRyaWVkOwotCV9fbGUzMiBjb3VudF9yeF9mcmFt ZV9kdXBsaWNhdGVzOwotCV9fbGUzMiBjb3VudF9ydHNfc3VjY2VzczsKLQlfX2xlMzIgY291bnRf cnRzX2ZhaWx1cmVzOwotCV9fbGUzMiBjb3VudF9hY2tfZmFpbHVyZXM7Ci0JX19sZTMyIGNvdW50 X3J4X211bHRpY2FzdF9mcmFtZXM7Ci0JX19sZTMyIGNvdW50X3J4X2ZyYW1lc19zdWNjZXNzOwot CV9fbGUzMiBjb3VudF9yeF9jbWFjaWN2X2Vycm9yczsKLQlfX2xlMzIgY291bnRfcnhfY21hY19y ZXBsYXlzOwotCV9fbGUzMiBjb3VudF9yeF9tZ210X2NjbXBfcmVwbGF5czsKLQlfX2xlMzIgY291 bnRfcnhfYmlwbWljX2Vycm9yczsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfbWliX21hY19h ZGRyZXNzIHsKLQl1OCAgICAgbWFjX2FkZHJbRVRIX0FMRU5dOwotCV9fbGUxNiByZXNlcnZlZDsK LX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZfbWliX3dlcF9kZWZhdWx0X2tleV9pZCB7Ci0JdTgg ICAgIHdlcF9kZWZhdWx0X2tleV9pZDsKLQl1OCAgICAgcmVzZXJ2ZWRbM107Ci19IF9fcGFja2Vk OwotCi1zdHJ1Y3QgaGlmX21pYl9kb3QxMV9ydHNfdGhyZXNob2xkIHsKLQlfX2xlMzIgdGhyZXNo b2xkOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9taWJfc2xvdF90aW1lIHsKLQlfX2xlMzIg c2xvdF90aW1lOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9taWJfY3VycmVudF90eF9wb3dl cl9sZXZlbCB7Ci0JX19sZTMyIHBvd2VyX2xldmVsOyAvLyBzaWduZWQgdmFsdWUKLX0gX19wYWNr ZWQ7Ci0KLXN0cnVjdCBoaWZfbWliX25vbl9lcnBfcHJvdGVjdGlvbiB7Ci0JdTggICAgIHVzZV9j dHNfdG9fc2VsZjoxOwotCXU4ICAgICByZXNlcnZlZDE6NzsKLQl1OCAgICAgcmVzZXJ2ZWQyWzNd OwotfSBfX3BhY2tlZDsKLQotZW51bSBoaWZfdG1wbHQgewotCUhJRl9UTVBMVF9QUkJSRVEgPSAw eDAsCi0JSElGX1RNUExUX0JDTiAgICA9IDB4MSwKLQlISUZfVE1QTFRfTlVMTCAgID0gMHgyLAot CUhJRl9UTVBMVF9RT1NOVUwgPSAweDMsCi0JSElGX1RNUExUX1BTUE9MTCA9IDB4NCwKLQlISUZf VE1QTFRfUFJCUkVTID0gMHg1LAotCUhJRl9UTVBMVF9BUlAgICAgPSAweDYsCi0JSElGX1RNUExU X05BICAgICA9IDB4NwotfTsKLQotI2RlZmluZSBISUZfQVBJX01BWF9URU1QTEFURV9GUkFNRV9T SVpFIDcwMAotCi1zdHJ1Y3QgaGlmX21pYl90ZW1wbGF0ZV9mcmFtZSB7Ci0JdTggICAgIGZyYW1l X3R5cGU7Ci0JdTggICAgIGluaXRfcmF0ZTo3OwotCXU4ICAgICBtb2RlOjE7Ci0JX19sZTE2IGZy YW1lX2xlbmd0aDsKLQl1OCAgICAgZnJhbWVbXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBoaWZf bWliX2JlYWNvbl93YWtlX3VwX3BlcmlvZCB7Ci0JdTggICAgIHdha2V1cF9wZXJpb2RfbWluOwot CXU4ICAgICByZWNlaXZlX2R0aW06MTsKLQl1OCAgICAgcmVzZXJ2ZWQxOjc7Ci0JdTggICAgIHdh a2V1cF9wZXJpb2RfbWF4OwotCXU4ICAgICByZXNlcnZlZDI7Ci19IF9fcGFja2VkOwotCi1zdHJ1 Y3QgaGlmX21pYl9yY3BpX3Jzc2lfdGhyZXNob2xkIHsKLQl1OCAgICAgZGV0ZWN0aW9uOjE7Ci0J dTggICAgIHJjcGlfcnNzaToxOwotCXU4ICAgICB1cHBlcnRocmVzaDoxOwotCXU4ICAgICBsb3dl cnRocmVzaDoxOwotCXU4ICAgICByZXNlcnZlZDo0OwotCXU4ICAgICBsb3dlcl90aHJlc2hvbGQ7 Ci0JdTggICAgIHVwcGVyX3RocmVzaG9sZDsKLQl1OCAgICAgcm9sbGluZ19hdmVyYWdlX2NvdW50 OwotfSBfX3BhY2tlZDsKLQotI2RlZmluZSBERUZBVUxUX0JBX01BWF9SWF9CVUZGRVJfU0laRSAx NgotCi1zdHJ1Y3QgaGlmX21pYl9ibG9ja19hY2tfcG9saWN5IHsKLQl1OCAgICAgYmxvY2tfYWNr X3R4X3RpZF9wb2xpY3k7Ci0JdTggICAgIHJlc2VydmVkMTsKLQl1OCAgICAgYmxvY2tfYWNrX3J4 X3RpZF9wb2xpY3k7Ci0JdTggICAgIGJsb2NrX2Fja19yeF9tYXhfYnVmZmVyX3NpemU7Ci19IF9f cGFja2VkOwotCi1lbnVtIGhpZl9tcGR1X3N0YXJ0X3NwYWNpbmcgewotCUhJRl9NUERVX1NUQVJU X1NQQUNJTkdfTk9fUkVTVFJJQyA9IDB4MCwKLQlISUZfTVBEVV9TVEFSVF9TUEFDSU5HX1FVQVJU RVIgICAgPSAweDEsCi0JSElGX01QRFVfU1RBUlRfU1BBQ0lOR19IQUxGICAgICAgID0gMHgyLAot CUhJRl9NUERVX1NUQVJUX1NQQUNJTkdfT05FICAgICAgICA9IDB4MywKLQlISUZfTVBEVV9TVEFS VF9TUEFDSU5HX1RXTyAgICAgICAgPSAweDQsCi0JSElGX01QRFVfU1RBUlRfU1BBQ0lOR19GT1VS ICAgICAgID0gMHg1LAotCUhJRl9NUERVX1NUQVJUX1NQQUNJTkdfRUlHSFQgICAgICA9IDB4NiwK LQlISUZfTVBEVV9TVEFSVF9TUEFDSU5HX1NJWFRFRU4gICAgPSAweDcKLX07Ci0KLXN0cnVjdCBo aWZfbWliX3NldF9hc3NvY2lhdGlvbl9tb2RlIHsKLQl1OCAgICAgcHJlYW1idHlwZV91c2U6MTsK LQl1OCAgICAgbW9kZToxOwotCXU4ICAgICByYXRlc2V0OjE7Ci0JdTggICAgIHNwYWNpbmc6MTsK LQl1OCAgICAgcmVzZXJ2ZWQxOjQ7Ci0JdTggICAgIHNob3J0X3ByZWFtYmxlOjE7Ci0JdTggICAg IHJlc2VydmVkMjo3OwotCXU4ICAgICBncmVlbmZpZWxkOjE7Ci0JdTggICAgIHJlc2VydmVkMzo3 OwotCXU4ICAgICBtcGR1X3N0YXJ0X3NwYWNpbmc7Ci0JX19sZTMyIGJhc2ljX3JhdGVfc2V0Owot fSBfX3BhY2tlZDsKLQotc3RydWN0IGhpZl9taWJfc2V0X3VhcHNkX2luZm9ybWF0aW9uIHsKLQl1 OCAgICAgdHJpZ19iY2tncm5kOjE7Ci0JdTggICAgIHRyaWdfYmU6MTsKLQl1OCAgICAgdHJpZ192 aWRlbzoxOwotCXU4ICAgICB0cmlnX3ZvaWNlOjE7Ci0JdTggICAgIHJlc2VydmVkMTo0OwotCXU4 ICAgICBkZWxpdl9iY2tncm5kOjE7Ci0JdTggICAgIGRlbGl2X2JlOjE7Ci0JdTggICAgIGRlbGl2 X3ZpZGVvOjE7Ci0JdTggICAgIGRlbGl2X3ZvaWNlOjE7Ci0JdTggICAgIHJlc2VydmVkMjo0Owot CV9fbGUxNiBtaW5fYXV0b190cmlnZ2VyX2ludGVydmFsOwotCV9fbGUxNiBtYXhfYXV0b190cmln Z2VyX2ludGVydmFsOwotCV9fbGUxNiBhdXRvX3RyaWdnZXJfc3RlcDsKLX0gX19wYWNrZWQ7Ci0K LXN0cnVjdCBoaWZfdHhfcmF0ZV9yZXRyeV9wb2xpY3kgewotCXU4ICAgICBwb2xpY3lfaW5kZXg7 Ci0JdTggICAgIHNob3J0X3JldHJ5X2NvdW50OwotCXU4ICAgICBsb25nX3JldHJ5X2NvdW50Owot CXU4ICAgICBmaXJzdF9yYXRlX3NlbDoyOwotCXU4ICAgICB0ZXJtaW5hdGU6MTsKLQl1OCAgICAg Y291bnRfaW5pdDoxOwotCXU4ICAgICByZXNlcnZlZDE6NDsKLQl1OCAgICAgcmF0ZV9yZWNvdmVy eV9jb3VudDsKLQl1OCAgICAgcmVzZXJ2ZWQyWzNdOwotCXU4ICAgICByYXRlc1sxMl07Ci19IF9f cGFja2VkOwotCi0jZGVmaW5lIEhJRl9UWF9SRVRSWV9QT0xJQ1lfTUFYICAgICAxNQotI2RlZmlu ZSBISUZfVFhfUkVUUllfUE9MSUNZX0lOVkFMSUQgSElGX1RYX1JFVFJZX1BPTElDWV9NQVgKLQot c3RydWN0IGhpZl9taWJfc2V0X3R4X3JhdGVfcmV0cnlfcG9saWN5IHsKLQl1OCAgICAgbnVtX3R4 X3JhdGVfcG9saWNpZXM7Ci0JdTggICAgIHJlc2VydmVkWzNdOwotCXN0cnVjdCBoaWZfdHhfcmF0 ZV9yZXRyeV9wb2xpY3kgdHhfcmF0ZV9yZXRyeV9wb2xpY3lbXTsKLX0gX19wYWNrZWQ7Ci0KLXN0 cnVjdCBoaWZfbWliX3Byb3RlY3RlZF9tZ210X3BvbGljeSB7Ci0JdTggICAgIHBtZl9lbmFibGU6 MTsKLQl1OCAgICAgdW5wbWZfYWxsb3dlZDoxOwotCXU4ICAgICBob3N0X2VuY19hdXRoX2ZyYW1l czoxOwotCXU4ICAgICByZXNlcnZlZDE6NTsKLQl1OCAgICAgcmVzZXJ2ZWQyWzNdOwotfSBfX3Bh Y2tlZDsKLQotc3RydWN0IGhpZl9taWJfa2VlcF9hbGl2ZV9wZXJpb2QgewotCV9fbGUxNiBrZWVw X2FsaXZlX3BlcmlvZDsKLQl1OCAgICAgcmVzZXJ2ZWRbMl07Ci19IF9fcGFja2VkOwotCi0jZW5k aWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3J4LmMgYi9kcml2ZXJzL3N0 YWdpbmcvd2Z4L2hpZl9yeC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmE1Zjg5 MTQ0N2IuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl9yeC5jCisr KyAvZGV2L251bGwKQEAgLTEsNDE1ICswLDAgQEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wLW9ubHkKLS8qCi0gKiBJbXBsZW1lbnRhdGlvbiBvZiBjaGlwLXRvLWhvc3QgZXZl bnQgKGFrYSBpbmRpY2F0aW9ucykgb2YgV0Z4eHggU3BsaXQgTWFjCi0gKiAoV1NNKSBBUEkuCi0g KgotICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMu Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCi0gKi8KLSNpbmNsdWRlIDxsaW51 eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotCi0jaW5jbHVkZSAi aGlmX3J4LmgiCi0jaW5jbHVkZSAid2Z4LmgiCi0jaW5jbHVkZSAic2Nhbi5oIgotI2luY2x1ZGUg ImJoLmgiCi0jaW5jbHVkZSAic3RhLmgiCi0jaW5jbHVkZSAiZGF0YV9yeC5oIgotI2luY2x1ZGUg ImhpZl9hcGlfY21kLmgiCi0KLXN0YXRpYyBpbnQgaGlmX2dlbmVyaWNfY29uZmlybShzdHJ1Y3Qg d2Z4X2RldiAqd2RldiwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaGlmX21zZyAqaGlmLCBjb25z dCB2b2lkICpidWYpCi17Ci0JLy8gQWxsIGNvbmZpcm0gbWVzc2FnZXMgc3RhcnQgd2l0aCBzdGF0 dXMKLQlpbnQgc3RhdHVzID0gbGUzMl90b19jcHVwKChfX2xlMzIgKilidWYpOwotCWludCBjbWQg PSBoaWYtPmlkOwotCWludCBsZW4gPSBsZTE2X3RvX2NwdShoaWYtPmxlbikgLSA0OyAvLyBkcm9w IGhlYWRlcgotCi0JV0FSTighbXV0ZXhfaXNfbG9ja2VkKCZ3ZGV2LT5oaWZfY21kLmxvY2spLCAi ZGF0YSBsb2NraW5nIGVycm9yIik7Ci0KLQlpZiAoIXdkZXYtPmhpZl9jbWQuYnVmX3NlbmQpIHsK LQkJZGV2X3dhcm4od2Rldi0+ZGV2LCAidW5leHBlY3RlZCBjb25maXJtYXRpb246IDB4JS4yeFxu IiwgY21kKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKGNtZCAhPSB3ZGV2LT5oaWZf Y21kLmJ1Zl9zZW5kLT5pZCkgewotCQlkZXZfd2Fybih3ZGV2LT5kZXYsCi0JCQkgImNoaXAgcmVz cG9uc2UgbWlzbWF0Y2ggcmVxdWVzdDogMHglLjJ4IHZzIDB4JS4yeFxuIiwKLQkJCSBjbWQsIHdk ZXYtPmhpZl9jbWQuYnVmX3NlbmQtPmlkKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYg KHdkZXYtPmhpZl9jbWQuYnVmX3JlY3YpIHsKLQkJaWYgKHdkZXYtPmhpZl9jbWQubGVuX3JlY3Yg Pj0gbGVuICYmIGxlbiA+IDApCi0JCQltZW1jcHkod2Rldi0+aGlmX2NtZC5idWZfcmVjdiwgYnVm LCBsZW4pOwotCQllbHNlCi0JCQlzdGF0dXMgPSAtRUlPOwotCX0KLQl3ZGV2LT5oaWZfY21kLnJl dCA9IHN0YXR1czsKLQotCWNvbXBsZXRlKCZ3ZGV2LT5oaWZfY21kLmRvbmUpOwotCXJldHVybiBz dGF0dXM7Ci19Ci0KLXN0YXRpYyBpbnQgaGlmX3R4X2NvbmZpcm0oc3RydWN0IHdmeF9kZXYgKndk ZXYsCi0JCQkgIGNvbnN0IHN0cnVjdCBoaWZfbXNnICpoaWYsIGNvbnN0IHZvaWQgKmJ1ZikKLXsK LQljb25zdCBzdHJ1Y3QgaGlmX2NuZl90eCAqYm9keSA9IGJ1ZjsKLQotCXdmeF90eF9jb25maXJt X2NiKHdkZXYsIGJvZHkpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGhpZl9tdWx0aV90 eF9jb25maXJtKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LAotCQkJCWNvbnN0IHN0cnVjdCBoaWZfbXNn ICpoaWYsIGNvbnN0IHZvaWQgKmJ1ZikKLXsKLQljb25zdCBzdHJ1Y3QgaGlmX2NuZl9tdWx0aV90 cmFuc21pdCAqYm9keSA9IGJ1ZjsKLQlpbnQgaTsKLQotCVdBUk4oYm9keS0+bnVtX3R4X2NvbmZz IDw9IDAsICJjb3JydXB0ZWQgbWVzc2FnZSIpOwotCWZvciAoaSA9IDA7IGkgPCBib2R5LT5udW1f dHhfY29uZnM7IGkrKykKLQkJd2Z4X3R4X2NvbmZpcm1fY2Iod2RldiwgJmJvZHktPnR4X2NvbmZf cGF5bG9hZFtpXSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaGlmX3N0YXJ0dXBfaW5k aWNhdGlvbihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwKLQkJCQkgIGNvbnN0IHN0cnVjdCBoaWZfbXNn ICpoaWYsIGNvbnN0IHZvaWQgKmJ1ZikKLXsKLQljb25zdCBzdHJ1Y3QgaGlmX2luZF9zdGFydHVw ICpib2R5ID0gYnVmOwotCi0JaWYgKGJvZHktPnN0YXR1cyB8fCBib2R5LT5maXJtd2FyZV90eXBl ID4gNCkgewotCQlkZXZfZXJyKHdkZXYtPmRldiwgInJlY2VpdmVkIGludmFsaWQgc3RhcnR1cCBp bmRpY2F0aW9uIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQltZW1jcHkoJndkZXYtPmh3X2Nh cHMsIGJvZHksIHNpemVvZihzdHJ1Y3QgaGlmX2luZF9zdGFydHVwKSk7Ci0JbGUxNl90b19jcHVz KChfX2xlMTYgKikmd2Rldi0+aHdfY2Fwcy5oYXJkd2FyZV9pZCk7Ci0JbGUxNl90b19jcHVzKChf X2xlMTYgKikmd2Rldi0+aHdfY2Fwcy5udW1faW5wX2NoX2J1ZnMpOwotCWxlMTZfdG9fY3B1cygo X19sZTE2ICopJndkZXYtPmh3X2NhcHMuc2l6ZV9pbnBfY2hfYnVmKTsKLQlsZTMyX3RvX2NwdXMo KF9fbGUzMiAqKSZ3ZGV2LT5od19jYXBzLnN1cHBvcnRlZF9yYXRlX21hc2spOwotCi0JY29tcGxl dGUoJndkZXYtPmZpcm13YXJlX3JlYWR5KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBo aWZfd2FrZXVwX2luZGljYXRpb24oc3RydWN0IHdmeF9kZXYgKndkZXYsCi0JCQkJIGNvbnN0IHN0 cnVjdCBoaWZfbXNnICpoaWYsIGNvbnN0IHZvaWQgKmJ1ZikKLXsKLQlpZiAoIXdkZXYtPnBkYXRh LmdwaW9fd2FrZXVwIHx8Ci0JICAgIGdwaW9kX2dldF92YWx1ZSh3ZGV2LT5wZGF0YS5ncGlvX3dh a2V1cCkgPT0gMCkgewotCQlkZXZfd2Fybih3ZGV2LT5kZXYsICJ1bmV4cGVjdGVkIHdha2UtdXAg aW5kaWNhdGlvblxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3Rh dGljIGludCBoaWZfcmVjZWl2ZV9pbmRpY2F0aW9uKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LAotCQkJ CSAgY29uc3Qgc3RydWN0IGhpZl9tc2cgKmhpZiwKLQkJCQkgIGNvbnN0IHZvaWQgKmJ1Ziwgc3Ry dWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IHdkZXZfdG9fd3Zp Zih3ZGV2LCBoaWYtPmludGVyZmFjZSk7Ci0JY29uc3Qgc3RydWN0IGhpZl9pbmRfcnggKmJvZHkg PSBidWY7Ci0KLQlpZiAoIXd2aWYpIHsKLQkJZGV2X3dhcm4od2Rldi0+ZGV2LCAiJXM6IGlnbm9y ZSByeCBkYXRhIGZvciBub24tZXhpc3RlbnQgdmlmICVkXG4iLAotCQkJIF9fZnVuY19fLCBoaWYt PmludGVyZmFjZSk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlza2JfcHVsbChza2IsIHNpemVvZihz dHJ1Y3QgaGlmX21zZykgKyBzaXplb2Yoc3RydWN0IGhpZl9pbmRfcngpKTsKLQl3ZnhfcnhfY2Io d3ZpZiwgYm9keSwgc2tiKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGhpZl9ldmVu dF9pbmRpY2F0aW9uKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LAotCQkJCWNvbnN0IHN0cnVjdCBoaWZf bXNnICpoaWYsIGNvbnN0IHZvaWQgKmJ1ZikKLXsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IHdk ZXZfdG9fd3ZpZih3ZGV2LCBoaWYtPmludGVyZmFjZSk7Ci0JY29uc3Qgc3RydWN0IGhpZl9pbmRf ZXZlbnQgKmJvZHkgPSBidWY7Ci0JaW50IHR5cGUgPSBsZTMyX3RvX2NwdShib2R5LT5ldmVudF9p ZCk7Ci0KLQlpZiAoIXd2aWYpIHsKLQkJZGV2X3dhcm4od2Rldi0+ZGV2LCAiJXM6IHJlY2VpdmVk IGV2ZW50IGZvciBub24tZXhpc3RlbnQgdmlmXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRUlP OwotCX0KLQotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgSElGX0VWRU5UX0lORF9SQ1BJX1JTU0k6 Ci0JCXdmeF9ldmVudF9yZXBvcnRfcnNzaSh3dmlmLCBib2R5LT5ldmVudF9kYXRhLnJjcGlfcnNz aSk7Ci0JCWJyZWFrOwotCWNhc2UgSElGX0VWRU5UX0lORF9CU1NMT1NUOgotCQlzY2hlZHVsZV9k ZWxheWVkX3dvcmsoJnd2aWYtPmJlYWNvbl9sb3NzX3dvcmssIDApOwotCQlicmVhazsKLQljYXNl IEhJRl9FVkVOVF9JTkRfQlNTUkVHQUlORUQ6Ci0JCWNhbmNlbF9kZWxheWVkX3dvcmsoJnd2aWYt PmJlYWNvbl9sb3NzX3dvcmspOwotCQlkZXZfZGJnKHdkZXYtPmRldiwgImlnbm9yZSBCU1NSRUdB SU5FRCBpbmRpY2F0aW9uXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSBISUZfRVZFTlRfSU5EX1BTX01P REVfRVJST1I6Ci0JCWRldl93YXJuKHdkZXYtPmRldiwgImVycm9yIHdoaWxlIHByb2Nlc3Npbmcg cG93ZXIgc2F2ZSByZXF1ZXN0OiAlZFxuIiwKLQkJCSBsZTMyX3RvX2NwdShib2R5LT5ldmVudF9k YXRhLnBzX21vZGVfZXJyb3IpKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZGV2X3dhcm4od2Rl di0+ZGV2LCAidW5oYW5kbGVkIGV2ZW50IGluZGljYXRpb246ICUuMnhcbiIsCi0JCQkgdHlwZSk7 Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBoaWZfcG1fbW9kZV9j b21wbGV0ZV9pbmRpY2F0aW9uKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LAotCQkJCQkgICBjb25zdCBz dHJ1Y3QgaGlmX21zZyAqaGlmLAotCQkJCQkgICBjb25zdCB2b2lkICpidWYpCi17Ci0Jc3RydWN0 IHdmeF92aWYgKnd2aWYgPSB3ZGV2X3RvX3d2aWYod2RldiwgaGlmLT5pbnRlcmZhY2UpOwotCi0J aWYgKCF3dmlmKSB7Ci0JCWRldl93YXJuKHdkZXYtPmRldiwgIiVzOiByZWNlaXZlZCBldmVudCBm b3Igbm9uLWV4aXN0ZW50IHZpZlxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0J Y29tcGxldGUoJnd2aWYtPnNldF9wbV9tb2RlX2NvbXBsZXRlKTsKLQotCXJldHVybiAwOwotfQot Ci1zdGF0aWMgaW50IGhpZl9zY2FuX2NvbXBsZXRlX2luZGljYXRpb24oc3RydWN0IHdmeF9kZXYg KndkZXYsCi0JCQkJCWNvbnN0IHN0cnVjdCBoaWZfbXNnICpoaWYsCi0JCQkJCWNvbnN0IHZvaWQg KmJ1ZikKLXsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IHdkZXZfdG9fd3ZpZih3ZGV2LCBoaWYt PmludGVyZmFjZSk7Ci0KLQlpZiAoIXd2aWYpIHsKLQkJZGV2X3dhcm4od2Rldi0+ZGV2LCAiJXM6 IHJlY2VpdmVkIGV2ZW50IGZvciBub24tZXhpc3RlbnQgdmlmXG4iLCBfX2Z1bmNfXyk7Ci0JCXJl dHVybiAtRUlPOwotCX0KLQotCXdmeF9zY2FuX2NvbXBsZXRlKHd2aWYpOwotCi0JcmV0dXJuIDA7 Ci19Ci0KLXN0YXRpYyBpbnQgaGlmX2pvaW5fY29tcGxldGVfaW5kaWNhdGlvbihzdHJ1Y3Qgd2Z4 X2RldiAqd2RldiwKLQkJCQkJY29uc3Qgc3RydWN0IGhpZl9tc2cgKmhpZiwKLQkJCQkJY29uc3Qg dm9pZCAqYnVmKQotewotCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gd2Rldl90b193dmlmKHdkZXYs IGhpZi0+aW50ZXJmYWNlKTsKLQotCWlmICghd3ZpZikgewotCQlkZXZfd2Fybih3ZGV2LT5kZXYs ICIlczogcmVjZWl2ZWQgZXZlbnQgZm9yIG5vbi1leGlzdGVudCB2aWZcbiIsIF9fZnVuY19fKTsK LQkJcmV0dXJuIC1FSU87Ci0JfQotCWRldl93YXJuKHdkZXYtPmRldiwgInVuYXR0ZW5kZWQgSm9p bkNvbXBsZXRlSW5kXG4iKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGhpZl9zdXNw ZW5kX3Jlc3VtZV9pbmRpY2F0aW9uKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LAotCQkJCQkgY29uc3Qg c3RydWN0IGhpZl9tc2cgKmhpZiwKLQkJCQkJIGNvbnN0IHZvaWQgKmJ1ZikKLXsKLQljb25zdCBz dHJ1Y3QgaGlmX2luZF9zdXNwZW5kX3Jlc3VtZV90eCAqYm9keSA9IGJ1ZjsKLQlzdHJ1Y3Qgd2Z4 X3ZpZiAqd3ZpZjsKLQotCWlmIChib2R5LT5iY19tY19vbmx5KSB7Ci0JCXd2aWYgPSB3ZGV2X3Rv X3d2aWYod2RldiwgaGlmLT5pbnRlcmZhY2UpOwotCQlpZiAoIXd2aWYpIHsKLQkJCWRldl93YXJu KHdkZXYtPmRldiwgIiVzOiByZWNlaXZlZCBldmVudCBmb3Igbm9uLWV4aXN0ZW50IHZpZlxuIiwg X19mdW5jX18pOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQkJaWYgKGJvZHktPnJlc3VtZSkKLQkJ CXdmeF9zdXNwZW5kX3Jlc3VtZV9tYyh3dmlmLCBTVEFfTk9USUZZX0FXQUtFKTsKLQkJZWxzZQot CQkJd2Z4X3N1c3BlbmRfcmVzdW1lX21jKHd2aWYsIFNUQV9OT1RJRllfU0xFRVApOwotCX0gZWxz ZSB7Ci0JCVdBUk4oYm9keS0+cGVlcl9zdGFfc2V0LCAibWlzdW5kZXJzdG9vZCBpbmRpY2F0aW9u Iik7Ci0JCVdBUk4oaGlmLT5pbnRlcmZhY2UgIT0gMiwgIm1pc3VuZGVyc3Rvb2QgaW5kaWNhdGlv biIpOwotCQlpZiAoYm9keS0+cmVzdW1lKQotCQkJd2Z4X3N1c3BlbmRfaG90X2Rldih3ZGV2LCBT VEFfTk9USUZZX0FXQUtFKTsKLQkJZWxzZQotCQkJd2Z4X3N1c3BlbmRfaG90X2Rldih3ZGV2LCBT VEFfTk9USUZZX1NMRUVQKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBoaWZf Z2VuZXJpY19pbmRpY2F0aW9uKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LAotCQkJCSAgY29uc3Qgc3Ry dWN0IGhpZl9tc2cgKmhpZiwgY29uc3Qgdm9pZCAqYnVmKQotewotCWNvbnN0IHN0cnVjdCBoaWZf aW5kX2dlbmVyaWMgKmJvZHkgPSBidWY7Ci0JaW50IHR5cGUgPSBsZTMyX3RvX2NwdShib2R5LT50 eXBlKTsKLQotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgSElGX0dFTkVSSUNfSU5ESUNBVElPTl9U WVBFX1JBVzoKLQkJcmV0dXJuIDA7Ci0JY2FzZSBISUZfR0VORVJJQ19JTkRJQ0FUSU9OX1RZUEVf U1RSSU5HOgotCQlkZXZfaW5mbyh3ZGV2LT5kZXYsICJmaXJtd2FyZSBzYXlzOiAlc1xuIiwgKGNo YXIgKikmYm9keS0+ZGF0YSk7Ci0JCXJldHVybiAwOwotCWNhc2UgSElGX0dFTkVSSUNfSU5ESUNB VElPTl9UWVBFX1JYX1NUQVRTOgotCQltdXRleF9sb2NrKCZ3ZGV2LT5yeF9zdGF0c19sb2NrKTsK LQkJLy8gT2xkZXIgZmlybXdhcmUgc2VuZCBhIGdlbmVyaWMgaW5kaWNhdGlvbiBiZXNpZGUgUnhT dGF0cwotCQlpZiAoIXdmeF9hcGlfb2xkZXJfdGhhbih3ZGV2LCAxLCA0KSkKLQkJCWRldl9pbmZv KHdkZXYtPmRldiwgIlJ4IHRlc3Qgb25nb2luZy4gVGVtcGVyYXR1cmU6ICVkIGRlZ3JlZXMgQ1xu IiwKLQkJCQkgYm9keS0+ZGF0YS5yeF9zdGF0cy5jdXJyZW50X3RlbXApOwotCQltZW1jcHkoJndk ZXYtPnJ4X3N0YXRzLCAmYm9keS0+ZGF0YS5yeF9zdGF0cywKLQkJICAgICAgIHNpemVvZih3ZGV2 LT5yeF9zdGF0cykpOwotCQltdXRleF91bmxvY2soJndkZXYtPnJ4X3N0YXRzX2xvY2spOwotCQly ZXR1cm4gMDsKLQljYXNlIEhJRl9HRU5FUklDX0lORElDQVRJT05fVFlQRV9UWF9QT1dFUl9MT09Q X0lORk86Ci0JCW11dGV4X2xvY2soJndkZXYtPnR4X3Bvd2VyX2xvb3BfaW5mb19sb2NrKTsKLQkJ bWVtY3B5KCZ3ZGV2LT50eF9wb3dlcl9sb29wX2luZm8sCi0JCSAgICAgICAmYm9keS0+ZGF0YS50 eF9wb3dlcl9sb29wX2luZm8sCi0JCSAgICAgICBzaXplb2Yod2Rldi0+dHhfcG93ZXJfbG9vcF9p bmZvKSk7Ci0JCW11dGV4X3VubG9jaygmd2Rldi0+dHhfcG93ZXJfbG9vcF9pbmZvX2xvY2spOwot CQlyZXR1cm4gMDsKLQlkZWZhdWx0OgotCQlkZXZfZXJyKHdkZXYtPmRldiwgImdlbmVyaWNfaW5k aWNhdGlvbjogdW5rbm93biBpbmRpY2F0aW9uIHR5cGU6ICUjLjh4XG4iLAotCQkJdHlwZSk7Ci0J CXJldHVybiAtRUlPOwotCX0KLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCB7Ci0JaW50IHZhbDsK LQljb25zdCBjaGFyICpzdHI7Ci0JYm9vbCBoYXNfcGFyYW07Ci19IGhpZl9lcnJvcnNbXSA9IHsK LQl7IEhJRl9FUlJPUl9GSVJNV0FSRV9ST0xMQkFDSywKLQkJInJvbGxiYWNrIHN0YXR1cyIgfSwK LQl7IEhJRl9FUlJPUl9GSVJNV0FSRV9ERUJVR19FTkFCTEVELAotCQkiZGVidWcgZmVhdHVyZSBl bmFibGVkIiB9LAotCXsgSElGX0VSUk9SX1BEU19QQVlMT0FELAotCQkiUERTIHZlcnNpb24gaXMg bm90IHN1cHBvcnRlZCIgfSwKLQl7IEhJRl9FUlJPUl9QRFNfVEVTVEZFQVRVUkUsCi0JCSJQRFMg YXNrIGZvciBhbiB1bmtub3duIHRlc3QgbW9kZSIgfSwKLQl7IEhJRl9FUlJPUl9PT1JfVk9MVEFH RSwKLQkJIm91dC1vZi1yYW5nZSBwb3dlciBzdXBwbHkgdm9sdGFnZSIsIHRydWUgfSwKLQl7IEhJ Rl9FUlJPUl9PT1JfVEVNUEVSQVRVUkUsCi0JCSJvdXQtb2YtcmFuZ2UgdGVtcGVyYXR1cmUiLCB0 cnVlIH0sCi0JeyBISUZfRVJST1JfU0xLX1JFUV9EVVJJTkdfS0VZX0VYQ0hBTkdFLAotCQkic2Vj dXJlIGxpbmsgZG9lcyBub3QgZXhwZWN0IHJlcXVlc3QgZHVyaW5nIGtleSBleGNoYW5nZSIgfSwK LQl7IEhJRl9FUlJPUl9TTEtfU0VTU0lPTl9LRVksCi0JCSJzZWN1cmUgbGluayBzZXNzaW9uIGtl eSBpcyBpbnZhbGlkIiB9LAotCXsgSElGX0VSUk9SX1NMS19PVkVSRkxPVywKLQkJInNlY3VyZSBs aW5rIG92ZXJmbG93IiB9LAotCXsgSElGX0VSUk9SX1NMS19XUk9OR19FTkNSWVBUSU9OX1NUQVRF LAotCQkic2VjdXJlIGxpbmsgbWVzc2FnZXMgbGlzdCBkb2VzIG5vdCBtYXRjaCBtZXNzYWdlIGVu Y3J5cHRpb24iIH0sCi0JeyBISUZfRVJST1JfU0xLX1VOQ09ORklHVVJFRCwKLQkJInNlY3VyZSBs aW5rIG5vdCB5ZXQgY29uZmlndXJlZCIgfSwKLQl7IEhJRl9FUlJPUl9ISUZfQlVTX0ZSRVFVRU5D WV9UT09fTE9XLAotCQkiYnVzIGNsb2NrIGlzIHRvbyBzbG93ICg8MWtIeikiIH0sCi0JeyBISUZf RVJST1JfSElGX1JYX0RBVEFfVE9PX0xBUkdFLAotCQkiSElGIG1lc3NhZ2UgdG9vIGxhcmdlIiB9 LAotCS8vIEZvbGxvd2luZyBlcnJvcnMgb25seSBleGlzdHMgaW4gb2xkIGZpcm13YXJlIHZlcnNp b25zOgotCXsgSElGX0VSUk9SX0hJRl9UWF9RVUVVRV9GVUxMLAotCQkiSElGIG1lc3NhZ2VzIHF1 ZXVlIGlzIGZ1bGwiIH0sCi0JeyBISUZfRVJST1JfSElGX0JVUywKLQkJIkhJRiBidXMiIH0sCi0J eyBISUZfRVJST1JfU0xLX01VTFRJX1RYX1VOU1VQUE9SVEVELAotCQkic2VjdXJlIGxpbmsgZG9l cyBub3Qgc3VwcG9ydCBtdWx0aS10eCBjb25maXJtYXRpb25zIiB9LAotCXsgSElGX0VSUk9SX1NM S19PVVREQVRFRF9TRVNTSU9OX0tFWSwKLQkJInNlY3VyZSBsaW5rIHNlc3Npb24ga2V5IGlzIG91 dGRhdGVkIiB9LAotCXsgSElGX0VSUk9SX1NMS19ERUNSWVBUSU9OLAotCQkic2VjdXJlIGxpbmsg cGFyYW1zIChub25jZSBvciB0YWcpIG1pc21hdGNoIiB9LAotfTsKLQotc3RhdGljIGludCBoaWZf ZXJyb3JfaW5kaWNhdGlvbihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwKLQkJCQljb25zdCBzdHJ1Y3Qg aGlmX21zZyAqaGlmLCBjb25zdCB2b2lkICpidWYpCi17Ci0JY29uc3Qgc3RydWN0IGhpZl9pbmRf ZXJyb3IgKmJvZHkgPSBidWY7Ci0JaW50IHR5cGUgPSBsZTMyX3RvX2NwdShib2R5LT50eXBlKTsK LQlpbnQgcGFyYW0gPSAoczgpYm9keS0+ZGF0YVswXTsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7 IGkgPCBBUlJBWV9TSVpFKGhpZl9lcnJvcnMpOyBpKyspCi0JCWlmICh0eXBlID09IGhpZl9lcnJv cnNbaV0udmFsKQotCQkJYnJlYWs7Ci0JaWYgKGkgPCBBUlJBWV9TSVpFKGhpZl9lcnJvcnMpKQot CQlpZiAoaGlmX2Vycm9yc1tpXS5oYXNfcGFyYW0pCi0JCQlkZXZfZXJyKHdkZXYtPmRldiwgImFz eW5jaHJvbm91cyBlcnJvcjogJXM6ICVkXG4iLAotCQkJCWhpZl9lcnJvcnNbaV0uc3RyLCBwYXJh bSk7Ci0JCWVsc2UKLQkJCWRldl9lcnIod2Rldi0+ZGV2LCAiYXN5bmNocm9ub3VzIGVycm9yOiAl c1xuIiwKLQkJCQloaWZfZXJyb3JzW2ldLnN0cik7Ci0JZWxzZQotCQlkZXZfZXJyKHdkZXYtPmRl diwgImFzeW5jaHJvbm91cyBlcnJvcjogdW5rbm93bjogJTA4eFxuIiwgdHlwZSk7Ci0JcHJpbnRf aGV4X2R1bXAoS0VSTl9JTkZPLCAiaGlmOiAiLCBEVU1QX1BSRUZJWF9PRkZTRVQsCi0JCSAgICAg ICAxNiwgMSwgaGlmLCBsZTE2X3RvX2NwdShoaWYtPmxlbiksIGZhbHNlKTsKLQl3ZGV2LT5jaGlw X2Zyb3plbiA9IHRydWU7Ci0KLQlyZXR1cm4gMDsKLX07Ci0KLXN0YXRpYyBpbnQgaGlmX2V4Y2Vw dGlvbl9pbmRpY2F0aW9uKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LAotCQkJCSAgICBjb25zdCBzdHJ1 Y3QgaGlmX21zZyAqaGlmLCBjb25zdCB2b2lkICpidWYpCi17Ci0JY29uc3Qgc3RydWN0IGhpZl9p bmRfZXhjZXB0aW9uICpib2R5ID0gYnVmOwotCWludCB0eXBlID0gbGUzMl90b19jcHUoYm9keS0+ dHlwZSk7Ci0KLQlpZiAodHlwZSA9PSA0KQotCQlkZXZfZXJyKHdkZXYtPmRldiwgImZpcm13YXJl IGFzc2VydCAlZFxuIiwKLQkJCWxlMzJfdG9fY3B1cCgoX19sZTMyICopYm9keS0+ZGF0YSkpOwot CWVsc2UKLQkJZGV2X2Vycih3ZGV2LT5kZXYsICJmaXJtd2FyZSBleGNlcHRpb25cbiIpOwotCXBy aW50X2hleF9kdW1wKEtFUk5fSU5GTywgImhpZjogIiwgRFVNUF9QUkVGSVhfT0ZGU0VULAotCQkg ICAgICAgMTYsIDEsIGhpZiwgbGUxNl90b19jcHUoaGlmLT5sZW4pLCBmYWxzZSk7Ci0Jd2Rldi0+ Y2hpcF9mcm96ZW4gPSB0cnVlOwotCi0JcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgY29uc3Qgc3Ry dWN0IHsKLQlpbnQgbXNnX2lkOwotCWludCAoKmhhbmRsZXIpKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2 LAotCQkgICAgICAgY29uc3Qgc3RydWN0IGhpZl9tc2cgKmhpZiwgY29uc3Qgdm9pZCAqYnVmKTsK LX0gaGlmX2hhbmRsZXJzW10gPSB7Ci0JLyogQ29uZmlybWF0aW9ucyAqLwotCXsgSElGX0NORl9J RF9UWCwgICAgICAgICAgICAgICAgICAgaGlmX3R4X2NvbmZpcm0gfSwKLQl7IEhJRl9DTkZfSURf TVVMVElfVFJBTlNNSVQsICAgICAgIGhpZl9tdWx0aV90eF9jb25maXJtIH0sCi0JLyogSW5kaWNh dGlvbnMgKi8KLQl7IEhJRl9JTkRfSURfU1RBUlRVUCwgICAgICAgICAgICAgIGhpZl9zdGFydHVw X2luZGljYXRpb24gfSwKLQl7IEhJRl9JTkRfSURfV0FLRVVQLCAgICAgICAgICAgICAgIGhpZl93 YWtldXBfaW5kaWNhdGlvbiB9LAotCXsgSElGX0lORF9JRF9KT0lOX0NPTVBMRVRFLCAgICAgICAg aGlmX2pvaW5fY29tcGxldGVfaW5kaWNhdGlvbiB9LAotCXsgSElGX0lORF9JRF9TRVRfUE1fTU9E RV9DTVBMLCAgICAgaGlmX3BtX21vZGVfY29tcGxldGVfaW5kaWNhdGlvbiB9LAotCXsgSElGX0lO RF9JRF9TQ0FOX0NNUEwsICAgICAgICAgICAgaGlmX3NjYW5fY29tcGxldGVfaW5kaWNhdGlvbiB9 LAotCXsgSElGX0lORF9JRF9TVVNQRU5EX1JFU1VNRV9UWCwgICAgaGlmX3N1c3BlbmRfcmVzdW1l X2luZGljYXRpb24gfSwKLQl7IEhJRl9JTkRfSURfRVZFTlQsICAgICAgICAgICAgICAgIGhpZl9l dmVudF9pbmRpY2F0aW9uIH0sCi0JeyBISUZfSU5EX0lEX0dFTkVSSUMsICAgICAgICAgICAgICBo aWZfZ2VuZXJpY19pbmRpY2F0aW9uIH0sCi0JeyBISUZfSU5EX0lEX0VSUk9SLCAgICAgICAgICAg ICAgICBoaWZfZXJyb3JfaW5kaWNhdGlvbiB9LAotCXsgSElGX0lORF9JRF9FWENFUFRJT04sICAg ICAgICAgICAgaGlmX2V4Y2VwdGlvbl9pbmRpY2F0aW9uIH0sCi0JLy8gRklYTUU6IGFsbG9jYXRl IHNrYl9wIGZyb20gaGlmX3JlY2VpdmVfaW5kaWNhdGlvbiBhbmQgbWFrZSBpdCBnZW5lcmljCi0J Ly97IEhJRl9JTkRfSURfUlgsICAgICAgICAgICAgICAgICBoaWZfcmVjZWl2ZV9pbmRpY2F0aW9u IH0sCi19OwotCi12b2lkIHdmeF9oYW5kbGVfcngoc3RydWN0IHdmeF9kZXYgKndkZXYsIHN0cnVj dCBza19idWZmICpza2IpCi17Ci0JaW50IGk7Ci0JY29uc3Qgc3RydWN0IGhpZl9tc2cgKmhpZiA9 IChjb25zdCBzdHJ1Y3QgaGlmX21zZyAqKXNrYi0+ZGF0YTsKLQlpbnQgaGlmX2lkID0gaGlmLT5p ZDsKLQotCWlmIChoaWZfaWQgPT0gSElGX0lORF9JRF9SWCkgewotCQkvLyBoaWZfcmVjZWl2ZV9p bmRpY2F0aW9uIHRha2UgY2FyZSBvZiBza2IgbGlmZXRpbWUKLQkJaGlmX3JlY2VpdmVfaW5kaWNh dGlvbih3ZGV2LCBoaWYsIGhpZi0+Ym9keSwgc2tiKTsKLQkJcmV0dXJuOwotCX0KLQkvLyBOb3Rl OiBtdXRleF9pc19sb2NrIGNhdXNlIGFuIGltcGxpY2l0IG1lbW9yeSBiYXJyaWVyIHRoYXQgcHJv dGVjdAotCS8vIGJ1Zl9zZW5kCi0JaWYgKG11dGV4X2lzX2xvY2tlZCgmd2Rldi0+aGlmX2NtZC5s b2NrKQotCSAgICAmJiB3ZGV2LT5oaWZfY21kLmJ1Zl9zZW5kCi0JICAgICYmIHdkZXYtPmhpZl9j bWQuYnVmX3NlbmQtPmlkID09IGhpZl9pZCkgewotCQloaWZfZ2VuZXJpY19jb25maXJtKHdkZXYs IGhpZiwgaGlmLT5ib2R5KTsKLQkJZ290byBmcmVlOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgQVJS QVlfU0laRShoaWZfaGFuZGxlcnMpOyBpKyspIHsKLQkJaWYgKGhpZl9oYW5kbGVyc1tpXS5tc2df aWQgPT0gaGlmX2lkKSB7Ci0JCQlpZiAoaGlmX2hhbmRsZXJzW2ldLmhhbmRsZXIpCi0JCQkJaGlm X2hhbmRsZXJzW2ldLmhhbmRsZXIod2RldiwgaGlmLCBoaWYtPmJvZHkpOwotCQkJZ290byBmcmVl OwotCQl9Ci0JfQotCWlmIChoaWZfaWQgJiAweDgwKQotCQlkZXZfZXJyKHdkZXYtPmRldiwgInVu c3VwcG9ydGVkIEhJRiBpbmRpY2F0aW9uOiBJRCAlMDJ4XG4iLAotCQkJaGlmX2lkKTsKLQllbHNl Ci0JCWRldl9lcnIod2Rldi0+ZGV2LCAidW5leHBlY3RlZCBISUYgY29uZmlybWF0aW9uOiBJRCAl MDJ4XG4iLAotCQkJaGlmX2lkKTsKLWZyZWU6Ci0JZGV2X2tmcmVlX3NrYihza2IpOwotfQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfcnguaCBiL2RyaXZlcnMvc3RhZ2luZy93 ZngvaGlmX3J4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwN2MxMGM4YzZiZC4u MDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3J4LmgKKysrIC9kZXYv bnVsbApAQCAtMSwxOCArMCwwIEBACi0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MC1vbmx5ICovCi0vKgotICogSW1wbGVtZW50YXRpb24gb2YgY2hpcC10by1ob3N0IGV2ZW50IChh a2EgaW5kaWNhdGlvbnMpIG9mIFdGeHh4IFNwbGl0IE1hYwotICogKFdTTSkgQVBJLgotICoKLSAq IENvcHlyaWdodCAoYykgMjAxNy0yMDE5LCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLgotICog Q29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmljc3NvbgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBT VC1Fcmljc3NvbiBTQQotICovCi0jaWZuZGVmIFdGWF9ISUZfUlhfSAotI2RlZmluZSBXRlhfSElG X1JYX0gKLQotc3RydWN0IHdmeF9kZXY7Ci1zdHJ1Y3Qgc2tfYnVmZjsKLQotdm9pZCB3ZnhfaGFu ZGxlX3J4KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLQotI2Vu ZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl90eC5jIGIvZHJpdmVycy9z dGFnaW5nL3dmeC9oaWZfdHguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNiNDM3 MjYxZWI3Li4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfdHguYwor KysgL2Rldi9udWxsCkBAIC0xLDUyMyArMCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMC1vbmx5Ci0vKgotICogSW1wbGVtZW50YXRpb24gb2YgaG9zdC10by1jaGlwIGNv bW1hbmRzIChha2EgcmVxdWVzdC9jb25maXJtYXRpb24pIG9mIFdGeHh4Ci0gKiBTcGxpdCBNYWMg KFdTTSkgQVBJLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwLCBTaWxpY29uIExhYm9y YXRvcmllcywgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmljc3NvbgotICovCi0j aW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLQotI2luY2x1ZGUgImhpZl90eC5oIgotI2lu Y2x1ZGUgIndmeC5oIgotI2luY2x1ZGUgImJoLmgiCi0jaW5jbHVkZSAiaHdpby5oIgotI2luY2x1 ZGUgImRlYnVnLmgiCi0jaW5jbHVkZSAic3RhLmgiCi0KLXZvaWQgd2Z4X2luaXRfaGlmX2NtZChz dHJ1Y3Qgd2Z4X2hpZl9jbWQgKmhpZl9jbWQpCi17Ci0JaW5pdF9jb21wbGV0aW9uKCZoaWZfY21k LT5yZWFkeSk7Ci0JaW5pdF9jb21wbGV0aW9uKCZoaWZfY21kLT5kb25lKTsKLQltdXRleF9pbml0 KCZoaWZfY21kLT5sb2NrKTsKLX0KLQotc3RhdGljIHZvaWQgd2Z4X2ZpbGxfaGVhZGVyKHN0cnVj dCBoaWZfbXNnICpoaWYsIGludCBpZl9pZCwKLQkJCSAgICB1bnNpZ25lZCBpbnQgY21kLCBzaXpl X3Qgc2l6ZSkKLXsKLQlpZiAoaWZfaWQgPT0gLTEpCi0JCWlmX2lkID0gMjsKLQotCVdBUk4oY21k ID4gMHgzZiwgImludmFsaWQgV1NNIGNvbW1hbmQgJSMuMngiLCBjbWQpOwotCVdBUk4oc2l6ZSA+ IDB4RkZGLCAicmVxdWVzdGVkIGJ1ZmZlciBpcyB0b28gbGFyZ2U6ICV6dSBieXRlcyIsIHNpemUp OwotCVdBUk4oaWZfaWQgPiAweDMsICJpbnZhbGlkIGludGVyZmFjZSBJRCAlZCIsIGlmX2lkKTsK LQotCWhpZi0+bGVuID0gY3B1X3RvX2xlMTYoc2l6ZSArIDQpOwotCWhpZi0+aWQgPSBjbWQ7Ci0J aGlmLT5pbnRlcmZhY2UgPSBpZl9pZDsKLX0KLQotc3RhdGljIHZvaWQgKndmeF9hbGxvY19oaWYo c2l6ZV90IGJvZHlfbGVuLCBzdHJ1Y3QgaGlmX21zZyAqKmhpZikKLXsKLQkqaGlmID0ga3phbGxv YyhzaXplb2Yoc3RydWN0IGhpZl9tc2cpICsgYm9keV9sZW4sIEdGUF9LRVJORUwpOwotCWlmICgq aGlmKQotCQlyZXR1cm4gKCpoaWYpLT5ib2R5OwotCWVsc2UKLQkJcmV0dXJuIE5VTEw7Ci19Ci0K LWludCB3ZnhfY21kX3NlbmQoc3RydWN0IHdmeF9kZXYgKndkZXYsIHN0cnVjdCBoaWZfbXNnICpy ZXF1ZXN0LAotCQkgdm9pZCAqcmVwbHksIHNpemVfdCByZXBseV9sZW4sIGJvb2wgbm9fcmVwbHkp Ci17Ci0JY29uc3QgY2hhciAqbWliX25hbWUgPSAiIjsKLQljb25zdCBjaGFyICptaWJfc2VwID0g IiI7Ci0JaW50IGNtZCA9IHJlcXVlc3QtPmlkOwotCWludCB2aWYgPSByZXF1ZXN0LT5pbnRlcmZh Y2U7Ci0JaW50IHJldDsKLQotCS8vIERvIG5vdCB3YWl0IGZvciBhbnkgcmVwbHkgaWYgY2hpcCBp cyBmcm96ZW4KLQlpZiAod2Rldi0+Y2hpcF9mcm96ZW4pCi0JCXJldHVybiAtRVRJTUVET1VUOwot Ci0JbXV0ZXhfbG9jaygmd2Rldi0+aGlmX2NtZC5sb2NrKTsKLQlXQVJOKHdkZXYtPmhpZl9jbWQu YnVmX3NlbmQsICJkYXRhIGxvY2tpbmcgZXJyb3IiKTsKLQotCS8vIE5vdGU6IGNhbGwgdG8gY29t cGxldGUoKSBiZWxvdyBoYXMgYW4gaW1wbGljaXQgbWVtb3J5IGJhcnJpZXIgdGhhdAotCS8vIGhv cGVmdWxseSBwcm90ZWN0IGJ1Zl9zZW5kCi0Jd2Rldi0+aGlmX2NtZC5idWZfc2VuZCA9IHJlcXVl c3Q7Ci0Jd2Rldi0+aGlmX2NtZC5idWZfcmVjdiA9IHJlcGx5OwotCXdkZXYtPmhpZl9jbWQubGVu X3JlY3YgPSByZXBseV9sZW47Ci0JY29tcGxldGUoJndkZXYtPmhpZl9jbWQucmVhZHkpOwotCi0J d2Z4X2JoX3JlcXVlc3RfdHgod2Rldik7Ci0KLQlpZiAobm9fcmVwbHkpIHsKLQkJLy8gQ2hpcCB3 b24ndCByZXBseS4gR2l2ZSBlbm91Z2ggdGltZSB0byB0aGUgd3EgdG8gc2VuZCB0aGUKLQkJLy8g YnVmZmVyLgotCQltc2xlZXAoMTAwKTsKLQkJd2Rldi0+aGlmX2NtZC5idWZfc2VuZCA9IE5VTEw7 Ci0JCW11dGV4X3VubG9jaygmd2Rldi0+aGlmX2NtZC5sb2NrKTsKLQkJcmV0dXJuIDA7Ci0JfQot Ci0JaWYgKHdkZXYtPnBvbGxfaXJxKQotCQl3ZnhfYmhfcG9sbF9pcnEod2Rldik7Ci0KLQlyZXQg PSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJndkZXYtPmhpZl9jbWQuZG9uZSwgMSAqIEha KTsKLQlpZiAoIXJldCkgewotCQlkZXZfZXJyKHdkZXYtPmRldiwgImNoaXAgaXMgYWJub3JtYWxs eSBsb25nIHRvIGFuc3dlclxuIik7Ci0JCXJlaW5pdF9jb21wbGV0aW9uKCZ3ZGV2LT5oaWZfY21k LnJlYWR5KTsKLQkJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZ3ZGV2LT5oaWZf Y21kLmRvbmUsIDMgKiBIWik7Ci0JfQotCWlmICghcmV0KSB7Ci0JCWRldl9lcnIod2Rldi0+ZGV2 LCAiY2hpcCBkaWQgbm90IGFuc3dlclxuIik7Ci0JCXdmeF9wZW5kaW5nX2R1bXBfb2xkX2ZyYW1l cyh3ZGV2LCAzMDAwKTsKLQkJd2Rldi0+Y2hpcF9mcm96ZW4gPSB0cnVlOwotCQlyZWluaXRfY29t cGxldGlvbigmd2Rldi0+aGlmX2NtZC5kb25lKTsKLQkJcmV0ID0gLUVUSU1FRE9VVDsKLQl9IGVs c2UgewotCQlyZXQgPSB3ZGV2LT5oaWZfY21kLnJldDsKLQl9Ci0KLQl3ZGV2LT5oaWZfY21kLmJ1 Zl9zZW5kID0gTlVMTDsKLQltdXRleF91bmxvY2soJndkZXYtPmhpZl9jbWQubG9jayk7Ci0KLQlp ZiAocmV0ICYmCi0JICAgIChjbWQgPT0gSElGX1JFUV9JRF9SRUFEX01JQiB8fCBjbWQgPT0gSElG X1JFUV9JRF9XUklURV9NSUIpKSB7Ci0JCW1pYl9uYW1lID0gZ2V0X21pYl9uYW1lKCgodTE2ICop cmVxdWVzdClbMl0pOwotCQltaWJfc2VwID0gIi8iOwotCX0KLQlpZiAocmV0IDwgMCkKLQkJZGV2 X2Vycih3ZGV2LT5kZXYsCi0JCQkiV1NNIHJlcXVlc3QgJXMlcyVzICglIy4yeCkgb24gdmlmICVk IHJldHVybmVkIGVycm9yICVkXG4iLAotCQkJZ2V0X2hpZl9uYW1lKGNtZCksIG1pYl9zZXAsIG1p Yl9uYW1lLCBjbWQsIHZpZiwgcmV0KTsKLQlpZiAocmV0ID4gMCkKLQkJZGV2X3dhcm4od2Rldi0+ ZGV2LAotCQkJICJXU00gcmVxdWVzdCAlcyVzJXMgKCUjLjJ4KSBvbiB2aWYgJWQgcmV0dXJuZWQg c3RhdHVzICVkXG4iLAotCQkJIGdldF9oaWZfbmFtZShjbWQpLCBtaWJfc2VwLCBtaWJfbmFtZSwg Y21kLCB2aWYsIHJldCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vLyBUaGlzIGZ1bmN0aW9uIGlz IHNwZWNpYWwuIEFmdGVyIEhJRl9SRVFfSURfU0hVVF9ET1dOLCBjaGlwIHdvbid0IHJlcGx5IHRv IGFueQotLy8gcmVxdWVzdCBhbnltb3JlLiBPYnZpb3VzbHksIG9ubHkgY2FsbCB0aGlzIGZ1bmN0 aW9uIGR1cmluZyBkZXZpY2UgdW5yZWdpc3Rlci4KLWludCBoaWZfc2h1dGRvd24oc3RydWN0IHdm eF9kZXYgKndkZXYpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgaGlmX21zZyAqaGlmOwotCi0Jd2Z4 X2FsbG9jX2hpZigwLCAmaGlmKTsKLQlpZiAoIWhpZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0Jd2Z4 X2ZpbGxfaGVhZGVyKGhpZiwgLTEsIEhJRl9SRVFfSURfU0hVVF9ET1dOLCAwKTsKLQlyZXQgPSB3 ZnhfY21kX3NlbmQod2RldiwgaGlmLCBOVUxMLCAwLCB0cnVlKTsKLQlpZiAod2Rldi0+cGRhdGEu Z3Bpb193YWtldXApCi0JCWdwaW9kX3NldF92YWx1ZSh3ZGV2LT5wZGF0YS5ncGlvX3dha2V1cCwg MCk7Ci0JZWxzZQotCQljb250cm9sX3JlZ193cml0ZSh3ZGV2LCAwKTsKLQlrZnJlZShoaWYpOwot CXJldHVybiByZXQ7Ci19Ci0KLWludCBoaWZfY29uZmlndXJhdGlvbihzdHJ1Y3Qgd2Z4X2RldiAq d2RldiwgY29uc3QgdTggKmNvbmYsIHNpemVfdCBsZW4pCi17Ci0JaW50IHJldDsKLQlzaXplX3Qg YnVmX2xlbiA9IHNpemVvZihzdHJ1Y3QgaGlmX3JlcV9jb25maWd1cmF0aW9uKSArIGxlbjsKLQlz dHJ1Y3QgaGlmX21zZyAqaGlmOwotCXN0cnVjdCBoaWZfcmVxX2NvbmZpZ3VyYXRpb24gKmJvZHkg PSB3ZnhfYWxsb2NfaGlmKGJ1Zl9sZW4sICZoaWYpOwotCi0JaWYgKCFoaWYpCi0JCXJldHVybiAt RU5PTUVNOwotCWJvZHktPmxlbmd0aCA9IGNwdV90b19sZTE2KGxlbik7Ci0JbWVtY3B5KGJvZHkt PnBkc19kYXRhLCBjb25mLCBsZW4pOwotCXdmeF9maWxsX2hlYWRlcihoaWYsIC0xLCBISUZfUkVR X0lEX0NPTkZJR1VSQVRJT04sIGJ1Zl9sZW4pOwotCXJldCA9IHdmeF9jbWRfc2VuZCh3ZGV2LCBo aWYsIE5VTEwsIDAsIGZhbHNlKTsKLQlrZnJlZShoaWYpOwotCXJldHVybiByZXQ7Ci19Ci0KLWlu dCBoaWZfcmVzZXQoc3RydWN0IHdmeF92aWYgKnd2aWYsIGJvb2wgcmVzZXRfc3RhdCkKLXsKLQlp bnQgcmV0OwotCXN0cnVjdCBoaWZfbXNnICpoaWY7Ci0Jc3RydWN0IGhpZl9yZXFfcmVzZXQgKmJv ZHkgPSB3ZnhfYWxsb2NfaGlmKHNpemVvZigqYm9keSksICZoaWYpOwotCi0JaWYgKCFoaWYpCi0J CXJldHVybiAtRU5PTUVNOwotCWJvZHktPnJlc2V0X3N0YXQgPSByZXNldF9zdGF0OwotCXdmeF9m aWxsX2hlYWRlcihoaWYsIHd2aWYtPmlkLCBISUZfUkVRX0lEX1JFU0VULCBzaXplb2YoKmJvZHkp KTsKLQlyZXQgPSB3ZnhfY21kX3NlbmQod3ZpZi0+d2RldiwgaGlmLCBOVUxMLCAwLCBmYWxzZSk7 Ci0Ja2ZyZWUoaGlmKTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgaGlmX3JlYWRfbWliKHN0cnVj dCB3ZnhfZGV2ICp3ZGV2LCBpbnQgdmlmX2lkLCB1MTYgbWliX2lkLAotCQkgdm9pZCAqdmFsLCBz aXplX3QgdmFsX2xlbikKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBoaWZfbXNnICpoaWY7Ci0JaW50 IGJ1Zl9sZW4gPSBzaXplb2Yoc3RydWN0IGhpZl9jbmZfcmVhZF9taWIpICsgdmFsX2xlbjsKLQlz dHJ1Y3QgaGlmX3JlcV9yZWFkX21pYiAqYm9keSA9IHdmeF9hbGxvY19oaWYoc2l6ZW9mKCpib2R5 KSwgJmhpZik7Ci0Jc3RydWN0IGhpZl9jbmZfcmVhZF9taWIgKnJlcGx5ID0ga21hbGxvYyhidWZf bGVuLCBHRlBfS0VSTkVMKTsKLQotCWlmICghYm9keSB8fCAhcmVwbHkpIHsKLQkJcmV0ID0gLUVO T01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCWJvZHktPm1pYl9pZCA9IGNwdV90b19sZTE2KG1pYl9p ZCk7Ci0Jd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgdmlmX2lkLCBISUZfUkVRX0lEX1JFQURfTUlCLCBz aXplb2YoKmJvZHkpKTsKLQlyZXQgPSB3ZnhfY21kX3NlbmQod2RldiwgaGlmLCByZXBseSwgYnVm X2xlbiwgZmFsc2UpOwotCi0JaWYgKCFyZXQgJiYgbWliX2lkICE9IGxlMTZfdG9fY3B1KHJlcGx5 LT5taWJfaWQpKSB7Ci0JCWRldl93YXJuKHdkZXYtPmRldiwgIiVzOiBjb25maXJtYXRpb24gbWlz bWF0Y2ggcmVxdWVzdFxuIiwKLQkJCSBfX2Z1bmNfXyk7Ci0JCXJldCA9IC1FSU87Ci0JfQotCWlm IChyZXQgPT0gLUVOT01FTSkKLQkJZGV2X2Vycih3ZGV2LT5kZXYsICJidWZmZXIgaXMgdG9vIHNt YWxsIHRvIHJlY2VpdmUgJXMgKCV6dSA8ICVkKVxuIiwKLQkJCWdldF9taWJfbmFtZShtaWJfaWQp LCB2YWxfbGVuLAotCQkJbGUxNl90b19jcHUocmVwbHktPmxlbmd0aCkpOwotCWlmICghcmV0KQot CQltZW1jcHkodmFsLCAmcmVwbHktPm1pYl9kYXRhLCBsZTE2X3RvX2NwdShyZXBseS0+bGVuZ3Ro KSk7Ci0JZWxzZQotCQltZW1zZXQodmFsLCAweEZGLCB2YWxfbGVuKTsKLW91dDoKLQlrZnJlZSho aWYpOwotCWtmcmVlKHJlcGx5KTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgaGlmX3dyaXRlX21p YihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IHZpZl9pZCwgdTE2IG1pYl9pZCwKLQkJICB2b2lk ICp2YWwsIHNpemVfdCB2YWxfbGVuKQotewotCWludCByZXQ7Ci0Jc3RydWN0IGhpZl9tc2cgKmhp ZjsKLQlpbnQgYnVmX2xlbiA9IHNpemVvZihzdHJ1Y3QgaGlmX3JlcV93cml0ZV9taWIpICsgdmFs X2xlbjsKLQlzdHJ1Y3QgaGlmX3JlcV93cml0ZV9taWIgKmJvZHkgPSB3ZnhfYWxsb2NfaGlmKGJ1 Zl9sZW4sICZoaWYpOwotCi0JaWYgKCFoaWYpCi0JCXJldHVybiAtRU5PTUVNOwotCWJvZHktPm1p Yl9pZCA9IGNwdV90b19sZTE2KG1pYl9pZCk7Ci0JYm9keS0+bGVuZ3RoID0gY3B1X3RvX2xlMTYo dmFsX2xlbik7Ci0JbWVtY3B5KCZib2R5LT5taWJfZGF0YSwgdmFsLCB2YWxfbGVuKTsKLQl3Znhf ZmlsbF9oZWFkZXIoaGlmLCB2aWZfaWQsIEhJRl9SRVFfSURfV1JJVEVfTUlCLCBidWZfbGVuKTsK LQlyZXQgPSB3ZnhfY21kX3NlbmQod2RldiwgaGlmLCBOVUxMLCAwLCBmYWxzZSk7Ci0Ja2ZyZWUo aGlmKTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgaGlmX3NjYW4oc3RydWN0IHdmeF92aWYgKnd2 aWYsIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSwKLQkgICAgIGludCBjaGFuX3N0 YXJ0X2lkeCwgaW50IGNoYW5fbnVtLCBpbnQgKnRpbWVvdXQpCi17Ci0JaW50IHJldCwgaTsKLQlz dHJ1Y3QgaGlmX21zZyAqaGlmOwotCXNpemVfdCBidWZfbGVuID0KLQkJc2l6ZW9mKHN0cnVjdCBo aWZfcmVxX3N0YXJ0X3NjYW5fYWx0KSArIGNoYW5fbnVtICogc2l6ZW9mKHU4KTsKLQlzdHJ1Y3Qg aGlmX3JlcV9zdGFydF9zY2FuX2FsdCAqYm9keSA9IHdmeF9hbGxvY19oaWYoYnVmX2xlbiwgJmhp Zik7Ci0JaW50IHRtb19jaGFuX2ZnLCB0bW9fY2hhbl9iZywgdG1vOwotCi0JV0FSTihjaGFuX251 bSA+IEhJRl9BUElfTUFYX05CX0NIQU5ORUxTLCAiaW52YWxpZCBwYXJhbXMiKTsKLQlXQVJOKHJl cS0+bl9zc2lkcyA+IEhJRl9BUElfTUFYX05CX1NTSURTLCAiaW52YWxpZCBwYXJhbXMiKTsKLQot CWlmICghaGlmKQotCQlyZXR1cm4gLUVOT01FTTsKLQlmb3IgKGkgPSAwOyBpIDwgcmVxLT5uX3Nz aWRzOyBpKyspIHsKLQkJbWVtY3B5KGJvZHktPnNzaWRfZGVmW2ldLnNzaWQsIHJlcS0+c3NpZHNb aV0uc3NpZCwKLQkJICAgICAgIElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pOwotCQlib2R5LT5zc2lk X2RlZltpXS5zc2lkX2xlbmd0aCA9Ci0JCQljcHVfdG9fbGUzMihyZXEtPnNzaWRzW2ldLnNzaWRf bGVuKTsKLQl9Ci0JYm9keS0+bnVtX29mX3NzaWRzID0gSElGX0FQSV9NQVhfTkJfU1NJRFM7Ci0J Ym9keS0+bWFpbnRhaW5fY3VycmVudF9ic3MgPSAxOwotCWJvZHktPmRpc2FsbG93X3BzID0gMTsK LQlib2R5LT50eF9wb3dlcl9sZXZlbCA9Ci0JCWNwdV90b19sZTMyKHJlcS0+Y2hhbm5lbHNbY2hh bl9zdGFydF9pZHhdLT5tYXhfcG93ZXIpOwotCWJvZHktPm51bV9vZl9jaGFubmVscyA9IGNoYW5f bnVtOwotCWZvciAoaSA9IDA7IGkgPCBjaGFuX251bTsgaSsrKQotCQlib2R5LT5jaGFubmVsX2xp c3RbaV0gPQotCQkJcmVxLT5jaGFubmVsc1tpICsgY2hhbl9zdGFydF9pZHhdLT5od192YWx1ZTsK LQlpZiAocmVxLT5ub19jY2spCi0JCWJvZHktPm1heF90cmFuc21pdF9yYXRlID0gQVBJX1JBVEVf SU5ERVhfR182TUJQUzsKLQllbHNlCi0JCWJvZHktPm1heF90cmFuc21pdF9yYXRlID0gQVBJX1JB VEVfSU5ERVhfQl8xTUJQUzsKLQlpZiAocmVxLT5jaGFubmVsc1tjaGFuX3N0YXJ0X2lkeF0tPmZs YWdzICYgSUVFRTgwMjExX0NIQU5fTk9fSVIpIHsKLQkJYm9keS0+bWluX2NoYW5uZWxfdGltZSA9 IGNwdV90b19sZTMyKDUwKTsKLQkJYm9keS0+bWF4X2NoYW5uZWxfdGltZSA9IGNwdV90b19sZTMy KDE1MCk7Ci0JfSBlbHNlIHsKLQkJYm9keS0+bWluX2NoYW5uZWxfdGltZSA9IGNwdV90b19sZTMy KDEwKTsKLQkJYm9keS0+bWF4X2NoYW5uZWxfdGltZSA9IGNwdV90b19sZTMyKDUwKTsKLQkJYm9k eS0+bnVtX29mX3Byb2JlX3JlcXVlc3RzID0gMjsKLQkJYm9keS0+cHJvYmVfZGVsYXkgPSAxMDA7 Ci0JfQotCXRtb19jaGFuX2JnID0gbGUzMl90b19jcHUoYm9keS0+bWF4X2NoYW5uZWxfdGltZSkg KiBVU0VDX1BFUl9UVTsKLQl0bW9fY2hhbl9mZyA9IDUxMiAqIFVTRUNfUEVSX1RVICsgYm9keS0+ cHJvYmVfZGVsYXk7Ci0JdG1vX2NoYW5fZmcgKj0gYm9keS0+bnVtX29mX3Byb2JlX3JlcXVlc3Rz OwotCXRtbyA9IGNoYW5fbnVtICogbWF4KHRtb19jaGFuX2JnLCB0bW9fY2hhbl9mZykgKyA1MTIg KiBVU0VDX1BFUl9UVTsKLQlpZiAodGltZW91dCkKLQkJKnRpbWVvdXQgPSB1c2Vjc190b19qaWZm aWVzKHRtbyk7Ci0KLQl3ZnhfZmlsbF9oZWFkZXIoaGlmLCB3dmlmLT5pZCwgSElGX1JFUV9JRF9T VEFSVF9TQ0FOLCBidWZfbGVuKTsKLQlyZXQgPSB3ZnhfY21kX3NlbmQod3ZpZi0+d2RldiwgaGlm LCBOVUxMLCAwLCBmYWxzZSk7Ci0Ja2ZyZWUoaGlmKTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQg aGlmX3N0b3Bfc2NhbihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZikKLXsKLQlpbnQgcmV0OwotCXN0cnVj dCBoaWZfbXNnICpoaWY7Ci0JLy8gYm9keSBhc3NvY2lhdGVkIHRvIEhJRl9SRVFfSURfU1RPUF9T Q0FOIGlzIGVtcHR5Ci0Jd2Z4X2FsbG9jX2hpZigwLCAmaGlmKTsKLQotCWlmICghaGlmKQotCQly ZXR1cm4gLUVOT01FTTsKLQl3ZnhfZmlsbF9oZWFkZXIoaGlmLCB3dmlmLT5pZCwgSElGX1JFUV9J RF9TVE9QX1NDQU4sIDApOwotCXJldCA9IHdmeF9jbWRfc2VuZCh3dmlmLT53ZGV2LCBoaWYsIE5V TEwsIDAsIGZhbHNlKTsKLQlrZnJlZShoaWYpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCBoaWZf am9pbihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9ic3NfY29u ZiAqY29uZiwKLQkgICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwgY29uc3Qg dTggKnNzaWQsIGludCBzc2lkbGVuKQotewotCWludCByZXQ7Ci0Jc3RydWN0IGhpZl9tc2cgKmhp ZjsKLQlzdHJ1Y3QgaGlmX3JlcV9qb2luICpib2R5ID0gd2Z4X2FsbG9jX2hpZihzaXplb2YoKmJv ZHkpLCAmaGlmKTsKLQotCVdBUk5fT04oIWNvbmYtPmJlYWNvbl9pbnQpOwotCVdBUk5fT04oIWNv bmYtPmJhc2ljX3JhdGVzKTsKLQlXQVJOX09OKHNpemVvZihib2R5LT5zc2lkKSA8IHNzaWRsZW4p OwotCVdBUk4oIWNvbmYtPmlic3Nfam9pbmVkICYmICFzc2lkbGVuLCAiam9pbmluZyBhbiB1bmtu b3duIEJTUyIpOwotCWlmIChXQVJOX09OKCFjaGFubmVsKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0J aWYgKCFoaWYpCi0JCXJldHVybiAtRU5PTUVNOwotCWJvZHktPmluZnJhc3RydWN0dXJlX2Jzc19t b2RlID0gIWNvbmYtPmlic3Nfam9pbmVkOwotCWJvZHktPnNob3J0X3ByZWFtYmxlID0gY29uZi0+ dXNlX3Nob3J0X3ByZWFtYmxlOwotCWlmIChjaGFubmVsLT5mbGFncyAmIElFRUU4MDIxMV9DSEFO X05PX0lSKQotCQlib2R5LT5wcm9iZV9mb3Jfam9pbiA9IDA7Ci0JZWxzZQotCQlib2R5LT5wcm9i ZV9mb3Jfam9pbiA9IDE7Ci0JYm9keS0+Y2hhbm5lbF9udW1iZXIgPSBjaGFubmVsLT5od192YWx1 ZTsKLQlib2R5LT5iZWFjb25faW50ZXJ2YWwgPSBjcHVfdG9fbGUzMihjb25mLT5iZWFjb25faW50 KTsKLQlib2R5LT5iYXNpY19yYXRlX3NldCA9Ci0JCWNwdV90b19sZTMyKHdmeF9yYXRlX21hc2tf dG9faHcod3ZpZi0+d2RldiwgY29uZi0+YmFzaWNfcmF0ZXMpKTsKLQltZW1jcHkoYm9keS0+YnNz aWQsIGNvbmYtPmJzc2lkLCBzaXplb2YoYm9keS0+YnNzaWQpKTsKLQlpZiAoc3NpZCkgewotCQli b2R5LT5zc2lkX2xlbmd0aCA9IGNwdV90b19sZTMyKHNzaWRsZW4pOwotCQltZW1jcHkoYm9keS0+ c3NpZCwgc3NpZCwgc3NpZGxlbik7Ci0JfQotCXdmeF9maWxsX2hlYWRlcihoaWYsIHd2aWYtPmlk LCBISUZfUkVRX0lEX0pPSU4sIHNpemVvZigqYm9keSkpOwotCXJldCA9IHdmeF9jbWRfc2VuZCh3 dmlmLT53ZGV2LCBoaWYsIE5VTEwsIDAsIGZhbHNlKTsKLQlrZnJlZShoaWYpOwotCXJldHVybiBy ZXQ7Ci19Ci0KLWludCBoaWZfc2V0X2Jzc19wYXJhbXMoc3RydWN0IHdmeF92aWYgKnd2aWYsIGlu dCBhaWQsIGludCBiZWFjb25fbG9zdF9jb3VudCkKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBoaWZf bXNnICpoaWY7Ci0Jc3RydWN0IGhpZl9yZXFfc2V0X2Jzc19wYXJhbXMgKmJvZHkgPQotCQl3Znhf YWxsb2NfaGlmKHNpemVvZigqYm9keSksICZoaWYpOwotCi0JaWYgKCFoaWYpCi0JCXJldHVybiAt RU5PTUVNOwotCWJvZHktPmFpZCA9IGNwdV90b19sZTE2KGFpZCk7Ci0JYm9keS0+YmVhY29uX2xv c3RfY291bnQgPSBiZWFjb25fbG9zdF9jb3VudDsKLQl3ZnhfZmlsbF9oZWFkZXIoaGlmLCB3dmlm LT5pZCwgSElGX1JFUV9JRF9TRVRfQlNTX1BBUkFNUywKLQkJCXNpemVvZigqYm9keSkpOwotCXJl dCA9IHdmeF9jbWRfc2VuZCh3dmlmLT53ZGV2LCBoaWYsIE5VTEwsIDAsIGZhbHNlKTsKLQlrZnJl ZShoaWYpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCBoaWZfYWRkX2tleShzdHJ1Y3Qgd2Z4X2Rl diAqd2RldiwgY29uc3Qgc3RydWN0IGhpZl9yZXFfYWRkX2tleSAqYXJnKQotewotCWludCByZXQ7 Ci0Jc3RydWN0IGhpZl9tc2cgKmhpZjsKLQkvLyBGSVhNRTogb25seSBzZW5kIG5lY2Vzc2FyeSBi aXRzCi0Jc3RydWN0IGhpZl9yZXFfYWRkX2tleSAqYm9keSA9IHdmeF9hbGxvY19oaWYoc2l6ZW9m KCpib2R5KSwgJmhpZik7Ci0KLQlpZiAoIWhpZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0JLy8gRklY TUU6IHN3YXAgYnl0ZXMgYXMgbmVjZXNzYXJ5IGluIGJvZHkKLQltZW1jcHkoYm9keSwgYXJnLCBz aXplb2YoKmJvZHkpKTsKLQlpZiAod2Z4X2FwaV9vbGRlcl90aGFuKHdkZXYsIDEsIDUpKQotCQkv LyBMZWdhY3kgZmlybXdhcmVzIGV4cGVjdCB0aGF0IGFkZF9rZXkgdG8gYmUgc2VudCBvbiByaWdo dAotCQkvLyBpbnRlcmZhY2UuCi0JCXdmeF9maWxsX2hlYWRlcihoaWYsIGFyZy0+aW50X2lkLCBI SUZfUkVRX0lEX0FERF9LRVksCi0JCQkJc2l6ZW9mKCpib2R5KSk7Ci0JZWxzZQotCQl3ZnhfZmls bF9oZWFkZXIoaGlmLCAtMSwgSElGX1JFUV9JRF9BRERfS0VZLCBzaXplb2YoKmJvZHkpKTsKLQly ZXQgPSB3ZnhfY21kX3NlbmQod2RldiwgaGlmLCBOVUxMLCAwLCBmYWxzZSk7Ci0Ja2ZyZWUoaGlm KTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgaGlmX3JlbW92ZV9rZXkoc3RydWN0IHdmeF9kZXYg KndkZXYsIGludCBpZHgpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgaGlmX21zZyAqaGlmOwotCXN0 cnVjdCBoaWZfcmVxX3JlbW92ZV9rZXkgKmJvZHkgPSB3ZnhfYWxsb2NfaGlmKHNpemVvZigqYm9k eSksICZoaWYpOwotCi0JaWYgKCFoaWYpCi0JCXJldHVybiAtRU5PTUVNOwotCWJvZHktPmVudHJ5 X2luZGV4ID0gaWR4OwotCXdmeF9maWxsX2hlYWRlcihoaWYsIC0xLCBISUZfUkVRX0lEX1JFTU9W RV9LRVksIHNpemVvZigqYm9keSkpOwotCXJldCA9IHdmeF9jbWRfc2VuZCh3ZGV2LCBoaWYsIE5V TEwsIDAsIGZhbHNlKTsKLQlrZnJlZShoaWYpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCBoaWZf c2V0X2VkY2FfcXVldWVfcGFyYW1zKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCB1MTYgcXVldWUsCi0J CQkgICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqYXJnKQotewot CWludCByZXQ7Ci0Jc3RydWN0IGhpZl9tc2cgKmhpZjsKLQlzdHJ1Y3QgaGlmX3JlcV9lZGNhX3F1 ZXVlX3BhcmFtcyAqYm9keSA9IHdmeF9hbGxvY19oaWYoc2l6ZW9mKCpib2R5KSwKLQkJCQkJCQkg ICAgICAgJmhpZik7Ci0KLQlpZiAoIWJvZHkpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JV0FSTl9P TihhcmctPmFpZnMgPiAyNTUpOwotCWlmICghaGlmKQotCQlyZXR1cm4gLUVOT01FTTsKLQlib2R5 LT5haWZzbiA9IGFyZy0+YWlmczsKLQlib2R5LT5jd19taW4gPSBjcHVfdG9fbGUxNihhcmctPmN3 X21pbik7Ci0JYm9keS0+Y3dfbWF4ID0gY3B1X3RvX2xlMTYoYXJnLT5jd19tYXgpOwotCWJvZHkt PnR4X29wX2xpbWl0ID0gY3B1X3RvX2xlMTYoYXJnLT50eG9wICogVVNFQ19QRVJfVFhPUCk7Ci0J Ym9keS0+cXVldWVfaWQgPSAzIC0gcXVldWU7Ci0JLy8gQVBJIDIuMCBoYXMgY2hhbmdlZCBxdWV1 ZSBJRHMgdmFsdWVzCi0JaWYgKHdmeF9hcGlfb2xkZXJfdGhhbih3dmlmLT53ZGV2LCAyLCAwKSAm JiBxdWV1ZSA9PSBJRUVFODAyMTFfQUNfQkUpCi0JCWJvZHktPnF1ZXVlX2lkID0gSElGX1FVRVVF X0lEX0JBQ0tHUk9VTkQ7Ci0JaWYgKHdmeF9hcGlfb2xkZXJfdGhhbih3dmlmLT53ZGV2LCAyLCAw KSAmJiBxdWV1ZSA9PSBJRUVFODAyMTFfQUNfQkspCi0JCWJvZHktPnF1ZXVlX2lkID0gSElGX1FV RVVFX0lEX0JFU1RFRkZPUlQ7Ci0Jd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgd3ZpZi0+aWQsIEhJRl9S RVFfSURfRURDQV9RVUVVRV9QQVJBTVMsCi0JCQlzaXplb2YoKmJvZHkpKTsKLQlyZXQgPSB3Znhf Y21kX3NlbmQod3ZpZi0+d2RldiwgaGlmLCBOVUxMLCAwLCBmYWxzZSk7Ci0Ja2ZyZWUoaGlmKTsK LQlyZXR1cm4gcmV0OwotfQotCi1pbnQgaGlmX3NldF9wbShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwg Ym9vbCBwcywgaW50IGR5bmFtaWNfcHNfdGltZW91dCkKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBo aWZfbXNnICpoaWY7Ci0Jc3RydWN0IGhpZl9yZXFfc2V0X3BtX21vZGUgKmJvZHkgPSB3ZnhfYWxs b2NfaGlmKHNpemVvZigqYm9keSksICZoaWYpOwotCi0JaWYgKCFib2R5KQotCQlyZXR1cm4gLUVO T01FTTsKLQotCWlmICghaGlmKQotCQlyZXR1cm4gLUVOT01FTTsKLQlpZiAocHMpIHsKLQkJYm9k eS0+ZW50ZXJfcHNtID0gMTsKLQkJLy8gRmlybXdhcmUgZG9lcyBub3Qgc3VwcG9ydCBtb3JlIHRo YW4gMTI4bXMKLQkJYm9keS0+ZmFzdF9wc21faWRsZV9wZXJpb2QgPSBtaW4oZHluYW1pY19wc190 aW1lb3V0ICogMiwgMjU1KTsKLQkJaWYgKGJvZHktPmZhc3RfcHNtX2lkbGVfcGVyaW9kKQotCQkJ Ym9keS0+ZmFzdF9wc20gPSAxOwotCX0KLQl3ZnhfZmlsbF9oZWFkZXIoaGlmLCB3dmlmLT5pZCwg SElGX1JFUV9JRF9TRVRfUE1fTU9ERSwgc2l6ZW9mKCpib2R5KSk7Ci0JcmV0ID0gd2Z4X2NtZF9z ZW5kKHd2aWYtPndkZXYsIGhpZiwgTlVMTCwgMCwgZmFsc2UpOwotCWtmcmVlKGhpZik7Ci0JcmV0 dXJuIHJldDsKLX0KLQotaW50IGhpZl9zdGFydChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgY29uc3Qg c3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqY29uZiwKLQkgICAgICBjb25zdCBzdHJ1Y3QgaWVl ZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgaGlmX21zZyAq aGlmOwotCXN0cnVjdCBoaWZfcmVxX3N0YXJ0ICpib2R5ID0gd2Z4X2FsbG9jX2hpZihzaXplb2Yo KmJvZHkpLCAmaGlmKTsKLQotCVdBUk5fT04oIWNvbmYtPmJlYWNvbl9pbnQpOwotCWlmICghaGlm KQotCQlyZXR1cm4gLUVOT01FTTsKLQlib2R5LT5kdGltX3BlcmlvZCA9IGNvbmYtPmR0aW1fcGVy aW9kOwotCWJvZHktPnNob3J0X3ByZWFtYmxlID0gY29uZi0+dXNlX3Nob3J0X3ByZWFtYmxlOwot CWJvZHktPmNoYW5uZWxfbnVtYmVyID0gY2hhbm5lbC0+aHdfdmFsdWU7Ci0JYm9keS0+YmVhY29u X2ludGVydmFsID0gY3B1X3RvX2xlMzIoY29uZi0+YmVhY29uX2ludCk7Ci0JYm9keS0+YmFzaWNf cmF0ZV9zZXQgPQotCQljcHVfdG9fbGUzMih3ZnhfcmF0ZV9tYXNrX3RvX2h3KHd2aWYtPndkZXYs IGNvbmYtPmJhc2ljX3JhdGVzKSk7Ci0JYm9keS0+c3NpZF9sZW5ndGggPSBjb25mLT5zc2lkX2xl bjsKLQltZW1jcHkoYm9keS0+c3NpZCwgY29uZi0+c3NpZCwgY29uZi0+c3NpZF9sZW4pOwotCXdm eF9maWxsX2hlYWRlcihoaWYsIHd2aWYtPmlkLCBISUZfUkVRX0lEX1NUQVJULCBzaXplb2YoKmJv ZHkpKTsKLQlyZXQgPSB3ZnhfY21kX3NlbmQod3ZpZi0+d2RldiwgaGlmLCBOVUxMLCAwLCBmYWxz ZSk7Ci0Ja2ZyZWUoaGlmKTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgaGlmX2JlYWNvbl90cmFu c21pdChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgYm9vbCBlbmFibGUpCi17Ci0JaW50IHJldDsKLQlz dHJ1Y3QgaGlmX21zZyAqaGlmOwotCXN0cnVjdCBoaWZfcmVxX2JlYWNvbl90cmFuc21pdCAqYm9k eSA9IHdmeF9hbGxvY19oaWYoc2l6ZW9mKCpib2R5KSwKLQkJCQkJCQkgICAgICZoaWYpOwotCi0J aWYgKCFoaWYpCi0JCXJldHVybiAtRU5PTUVNOwotCWJvZHktPmVuYWJsZV9iZWFjb25pbmcgPSBl bmFibGUgPyAxIDogMDsKLQl3ZnhfZmlsbF9oZWFkZXIoaGlmLCB3dmlmLT5pZCwgSElGX1JFUV9J RF9CRUFDT05fVFJBTlNNSVQsCi0JCQlzaXplb2YoKmJvZHkpKTsKLQlyZXQgPSB3ZnhfY21kX3Nl bmQod3ZpZi0+d2RldiwgaGlmLCBOVUxMLCAwLCBmYWxzZSk7Ci0Ja2ZyZWUoaGlmKTsKLQlyZXR1 cm4gcmV0OwotfQotCi1pbnQgaGlmX21hcF9saW5rKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBib29s IHVubWFwLCB1OCAqbWFjX2FkZHIsIGludCBzdGFfaWQsIGJvb2wgbWZwKQotewotCWludCByZXQ7 Ci0Jc3RydWN0IGhpZl9tc2cgKmhpZjsKLQlzdHJ1Y3QgaGlmX3JlcV9tYXBfbGluayAqYm9keSA9 IHdmeF9hbGxvY19oaWYoc2l6ZW9mKCpib2R5KSwgJmhpZik7Ci0KLQlpZiAoIWhpZikKLQkJcmV0 dXJuIC1FTk9NRU07Ci0JaWYgKG1hY19hZGRyKQotCQlldGhlcl9hZGRyX2NvcHkoYm9keS0+bWFj X2FkZHIsIG1hY19hZGRyKTsKLQlib2R5LT5tZnBjID0gbWZwID8gMSA6IDA7Ci0JYm9keS0+dW5t YXAgPSB1bm1hcCA/IDEgOiAwOwotCWJvZHktPnBlZXJfc3RhX2lkID0gc3RhX2lkOwotCXdmeF9m aWxsX2hlYWRlcihoaWYsIHd2aWYtPmlkLCBISUZfUkVRX0lEX01BUF9MSU5LLCBzaXplb2YoKmJv ZHkpKTsKLQlyZXQgPSB3ZnhfY21kX3NlbmQod3ZpZi0+d2RldiwgaGlmLCBOVUxMLCAwLCBmYWxz ZSk7Ci0Ja2ZyZWUoaGlmKTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgaGlmX3VwZGF0ZV9pZV9i ZWFjb24oc3RydWN0IHdmeF92aWYgKnd2aWYsIGNvbnN0IHU4ICppZXMsIHNpemVfdCBpZXNfbGVu KQotewotCWludCByZXQ7Ci0Jc3RydWN0IGhpZl9tc2cgKmhpZjsKLQlpbnQgYnVmX2xlbiA9IHNp emVvZihzdHJ1Y3QgaGlmX3JlcV91cGRhdGVfaWUpICsgaWVzX2xlbjsKLQlzdHJ1Y3QgaGlmX3Jl cV91cGRhdGVfaWUgKmJvZHkgPSB3ZnhfYWxsb2NfaGlmKGJ1Zl9sZW4sICZoaWYpOwotCi0JaWYg KCFoaWYpCi0JCXJldHVybiAtRU5PTUVNOwotCWJvZHktPmJlYWNvbiA9IDE7Ci0JYm9keS0+bnVt X2llcyA9IGNwdV90b19sZTE2KDEpOwotCW1lbWNweShib2R5LT5pZSwgaWVzLCBpZXNfbGVuKTsK LQl3ZnhfZmlsbF9oZWFkZXIoaGlmLCB3dmlmLT5pZCwgSElGX1JFUV9JRF9VUERBVEVfSUUsIGJ1 Zl9sZW4pOwotCXJldCA9IHdmeF9jbWRfc2VuZCh3dmlmLT53ZGV2LCBoaWYsIE5VTEwsIDAsIGZh bHNlKTsKLQlrZnJlZShoaWYpOwotCXJldHVybiByZXQ7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJz L3N0YWdpbmcvd2Z4L2hpZl90eC5oIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfdHguaApkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzUyMWM1NDVhZTZiLi4wMDAwMDAwMDAwMDAKLS0t IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfdHguaAorKysgL2Rldi9udWxsCkBAIC0xLDYwICsw LDAgQEAKLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KLS8qCi0g KiBJbXBsZW1lbnRhdGlvbiBvZiBob3N0LXRvLWNoaXAgY29tbWFuZHMgKGFrYSByZXF1ZXN0L2Nv bmZpcm1hdGlvbikgb2YgV0Z4eHgKLSAqIFNwbGl0IE1hYyAoV1NNKSBBUEkuCi0gKgotICogQ29w eXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuCi0gKiBDb3B5 cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIFNULUVy aWNzc29uIFNBCi0gKi8KLSNpZm5kZWYgV0ZYX0hJRl9UWF9ICi0jZGVmaW5lIFdGWF9ISUZfVFhf SAotCi1zdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWw7Ci1zdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25m Owotc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXM7Ci1zdHJ1Y3QgY2ZnODAyMTFfc2Nh bl9yZXF1ZXN0Owotc3RydWN0IGhpZl9yZXFfYWRkX2tleTsKLXN0cnVjdCB3ZnhfZGV2Owotc3Ry dWN0IHdmeF92aWY7Ci0KLXN0cnVjdCB3ZnhfaGlmX2NtZCB7Ci0Jc3RydWN0IG11dGV4ICAgICAg bG9jazsKLQlzdHJ1Y3QgY29tcGxldGlvbiByZWFkeTsKLQlzdHJ1Y3QgY29tcGxldGlvbiBkb25l OwotCXN0cnVjdCBoaWZfbXNnICAgICpidWZfc2VuZDsKLQl2b2lkICAgICAgICAgICAgICAqYnVm X3JlY3Y7Ci0Jc2l6ZV90ICAgICAgICAgICAgbGVuX3JlY3Y7Ci0JaW50ICAgICAgICAgICAgICAg cmV0OwotfTsKLQotdm9pZCB3ZnhfaW5pdF9oaWZfY21kKHN0cnVjdCB3ZnhfaGlmX2NtZCAqd2Z4 X2hpZl9jbWQpOwotaW50IHdmeF9jbWRfc2VuZChzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwgc3RydWN0 IGhpZl9tc2cgKnJlcXVlc3QsCi0JCSB2b2lkICpyZXBseSwgc2l6ZV90IHJlcGx5X2xlbiwgYm9v bCBhc3luYyk7Ci0KLWludCBoaWZfc2h1dGRvd24oc3RydWN0IHdmeF9kZXYgKndkZXYpOwotaW50 IGhpZl9jb25maWd1cmF0aW9uKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBjb25zdCB1OCAqY29uZiwg c2l6ZV90IGxlbik7Ci1pbnQgaGlmX3Jlc2V0KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBib29sIHJl c2V0X3N0YXQpOwotaW50IGhpZl9yZWFkX21pYihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IHZp Zl9pZCwgdTE2IG1pYl9pZCwKLQkJIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplKTsKLWludCBo aWZfd3JpdGVfbWliKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgdmlmX2lkLCB1MTYgbWliX2lk LAotCQkgIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplKTsKLWludCBoaWZfc2NhbihzdHJ1Y3Qg d2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxODAyMTEsCi0J ICAgICBpbnQgY2hhbl9zdGFydCwgaW50IGNoYW5fbnVtLCBpbnQgKnRpbWVvdXQpOwotaW50IGhp Zl9zdG9wX3NjYW4oc3RydWN0IHdmeF92aWYgKnd2aWYpOwotaW50IGhpZl9qb2luKHN0cnVjdCB3 ZnhfdmlmICp3dmlmLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpjb25mLAotCSAg ICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLCBjb25zdCB1OCAqc3NpZCwgaW50 IHNzaWRsZW4pOwotaW50IGhpZl9zZXRfcG0oc3RydWN0IHdmeF92aWYgKnd2aWYsIGJvb2wgcHMs IGludCBkeW5hbWljX3BzX3RpbWVvdXQpOwotaW50IGhpZl9zZXRfYnNzX3BhcmFtcyhzdHJ1Y3Qg d2Z4X3ZpZiAqd3ZpZiwgaW50IGFpZCwgaW50IGJlYWNvbl9sb3N0X2NvdW50KTsKLWludCBoaWZf YWRkX2tleShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgY29uc3Qgc3RydWN0IGhpZl9yZXFfYWRkX2tl eSAqYXJnKTsKLWludCBoaWZfcmVtb3ZlX2tleShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IGlk eCk7Ci1pbnQgaGlmX3NldF9lZGNhX3F1ZXVlX3BhcmFtcyhzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwg dTE2IHF1ZXVlLAotCQkJICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJh bXMgKmFyZyk7Ci1pbnQgaGlmX3N0YXJ0KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBjb25zdCBzdHJ1 Y3QgaWVlZTgwMjExX2Jzc19jb25mICpjb25mLAotCSAgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAy MTFfY2hhbm5lbCAqY2hhbm5lbCk7Ci1pbnQgaGlmX2JlYWNvbl90cmFuc21pdChzdHJ1Y3Qgd2Z4 X3ZpZiAqd3ZpZiwgYm9vbCBlbmFibGUpOwotaW50IGhpZl9tYXBfbGluayhzdHJ1Y3Qgd2Z4X3Zp ZiAqd3ZpZiwKLQkJIGJvb2wgdW5tYXAsIHU4ICptYWNfYWRkciwgaW50IHN0YV9pZCwgYm9vbCBt ZnApOwotaW50IGhpZl91cGRhdGVfaWVfYmVhY29uKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBjb25z dCB1OCAqaWVzLCBzaXplX3QgaWVzX2xlbik7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9zdGFnaW5nL3dmeC9oaWZfdHhfbWliLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl90eF9t aWIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTkyNmNmMWI2MmJlLi4wMDAwMDAw MDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfdHhfbWliLmMKKysrIC9kZXYvbnVs bApAQCAtMSwzMjQgKzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAt b25seQotLyoKLSAqIEltcGxlbWVudGF0aW9uIG9mIGhvc3QtdG8tY2hpcCBNSUJzIG9mIFdGeHh4 IFNwbGl0IE1hYyAoV1NNKSBBUEkuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNp bGljb24gTGFib3JhdG9yaWVzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNz c29uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIFNULUVyaWNzc29uIFNBCi0gKi8KLQotI2luY2x1 ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0KLSNpbmNsdWRlICJ3ZnguaCIKLSNpbmNsdWRlICJo aWZfdHguaCIKLSNpbmNsdWRlICJoaWZfdHhfbWliLmgiCi0jaW5jbHVkZSAiaGlmX2FwaV9taWIu aCIKLQotaW50IGhpZl9zZXRfb3V0cHV0X3Bvd2VyKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBpbnQg dmFsKQotewotCXN0cnVjdCBoaWZfbWliX2N1cnJlbnRfdHhfcG93ZXJfbGV2ZWwgYXJnID0gewot CQkucG93ZXJfbGV2ZWwgPSBjcHVfdG9fbGUzMih2YWwgKiAxMCksCi0JfTsKLQotCXJldHVybiBo aWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLAotCQkJICAgICBISUZfTUlCX0lEX0NV UlJFTlRfVFhfUE9XRVJfTEVWRUwsCi0JCQkgICAgICZhcmcsIHNpemVvZihhcmcpKTsKLX0KLQot aW50IGhpZl9zZXRfYmVhY29uX3dha2V1cF9wZXJpb2Qoc3RydWN0IHdmeF92aWYgKnd2aWYsCi0J CQkJIHVuc2lnbmVkIGludCBkdGltX2ludGVydmFsLAotCQkJCSB1bnNpZ25lZCBpbnQgbGlzdGVu X2ludGVydmFsKQotewotCXN0cnVjdCBoaWZfbWliX2JlYWNvbl93YWtlX3VwX3BlcmlvZCBhcmcg PSB7Ci0JCS53YWtldXBfcGVyaW9kX21pbiA9IGR0aW1faW50ZXJ2YWwsCi0JCS5yZWNlaXZlX2R0 aW0gPSAwLAotCQkud2FrZXVwX3BlcmlvZF9tYXggPSBsaXN0ZW5faW50ZXJ2YWwsCi0JfTsKLQot CWlmIChkdGltX2ludGVydmFsID4gMHhGRiB8fCBsaXN0ZW5faW50ZXJ2YWwgPiAweEZGRkYpCi0J CXJldHVybiAtRUlOVkFMOwotCXJldHVybiBoaWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYt PmlkLAotCQkJICAgICBISUZfTUlCX0lEX0JFQUNPTl9XQUtFVVBfUEVSSU9ELAotCQkJICAgICAm YXJnLCBzaXplb2YoYXJnKSk7Ci19Ci0KLWludCBoaWZfc2V0X3JjcGlfcnNzaV90aHJlc2hvbGQo c3RydWN0IHdmeF92aWYgKnd2aWYsCi0JCQkJaW50IHJzc2lfdGhvbGQsIGludCByc3NpX2h5c3Qp Ci17Ci0Jc3RydWN0IGhpZl9taWJfcmNwaV9yc3NpX3RocmVzaG9sZCBhcmcgPSB7Ci0JCS5yb2xs aW5nX2F2ZXJhZ2VfY291bnQgPSA4LAotCQkuZGV0ZWN0aW9uID0gMSwKLQl9OwotCi0JaWYgKCFy c3NpX3Rob2xkICYmICFyc3NpX2h5c3QpIHsKLQkJYXJnLnVwcGVydGhyZXNoID0gMTsKLQkJYXJn Lmxvd2VydGhyZXNoID0gMTsKLQl9IGVsc2UgewotCQlhcmcudXBwZXJfdGhyZXNob2xkID0gcnNz aV90aG9sZCArIHJzc2lfaHlzdDsKLQkJYXJnLnVwcGVyX3RocmVzaG9sZCA9IChhcmcudXBwZXJf dGhyZXNob2xkICsgMTEwKSAqIDI7Ci0JCWFyZy5sb3dlcl90aHJlc2hvbGQgPSByc3NpX3Rob2xk OwotCQlhcmcubG93ZXJfdGhyZXNob2xkID0gKGFyZy5sb3dlcl90aHJlc2hvbGQgKyAxMTApICog MjsKLQl9Ci0KLQlyZXR1cm4gaGlmX3dyaXRlX21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwKLQkJ CSAgICAgSElGX01JQl9JRF9SQ1BJX1JTU0lfVEhSRVNIT0xELCAmYXJnLCBzaXplb2YoYXJnKSk7 Ci19Ci0KLWludCBoaWZfZ2V0X2NvdW50ZXJzX3RhYmxlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBp bnQgdmlmX2lkLAotCQkJICAgc3RydWN0IGhpZl9taWJfZXh0ZW5kZWRfY291bnRfdGFibGUgKmFy ZykKLXsKLQlpZiAod2Z4X2FwaV9vbGRlcl90aGFuKHdkZXYsIDEsIDMpKSB7Ci0JCS8vIGV4dGVu ZGVkX2NvdW50X3RhYmxlIGlzIHdpZGVyIHRoYW4gY291bnRfdGFibGUKLQkJbWVtc2V0KGFyZywg MHhGRiwgc2l6ZW9mKCphcmcpKTsKLQkJcmV0dXJuIGhpZl9yZWFkX21pYih3ZGV2LCB2aWZfaWQs IEhJRl9NSUJfSURfQ09VTlRFUlNfVEFCTEUsCi0JCQkJICAgIGFyZywgc2l6ZW9mKHN0cnVjdCBo aWZfbWliX2NvdW50X3RhYmxlKSk7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIGhpZl9yZWFkX21pYih3 ZGV2LCB2aWZfaWQsCi0JCQkJICAgIEhJRl9NSUJfSURfRVhURU5ERURfQ09VTlRFUlNfVEFCTEUs IGFyZywKLQkJCQlzaXplb2Yoc3RydWN0IGhpZl9taWJfZXh0ZW5kZWRfY291bnRfdGFibGUpKTsK LQl9Ci19Ci0KLWludCBoaWZfc2V0X21hY2FkZHIoc3RydWN0IHdmeF92aWYgKnd2aWYsIHU4ICpt YWMpCi17Ci0Jc3RydWN0IGhpZl9taWJfbWFjX2FkZHJlc3MgbXNnID0geyB9OwotCi0JaWYgKG1h YykKLQkJZXRoZXJfYWRkcl9jb3B5KG1zZy5tYWNfYWRkciwgbWFjKTsKLQlyZXR1cm4gaGlmX3dy aXRlX21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwgSElGX01JQl9JRF9ET1QxMV9NQUNfQUREUkVT UywKLQkJCSAgICAgJm1zZywgc2l6ZW9mKG1zZykpOwotfQotCi1pbnQgaGlmX3NldF9yeF9maWx0 ZXIoc3RydWN0IHdmeF92aWYgKnd2aWYsCi0JCSAgICAgIGJvb2wgZmlsdGVyX2Jzc2lkLCBib29s IGZpbHRlcl9wcmJyZXEpCi17Ci0Jc3RydWN0IGhpZl9taWJfcnhfZmlsdGVyIGFyZyA9IHsgfTsK LQotCWlmIChmaWx0ZXJfYnNzaWQpCi0JCWFyZy5ic3NpZF9maWx0ZXIgPSAxOwotCWlmICghZmls dGVyX3ByYnJlcSkKLQkJYXJnLmZ3ZF9wcm9iZV9yZXEgPSAxOwotCXJldHVybiBoaWZfd3JpdGVf bWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLCBISUZfTUlCX0lEX1JYX0ZJTFRFUiwKLQkJCSAgICAg JmFyZywgc2l6ZW9mKGFyZykpOwotfQotCi1pbnQgaGlmX3NldF9iZWFjb25fZmlsdGVyX3RhYmxl KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBpbnQgdGJsX2xlbiwKLQkJCQljb25zdCBzdHJ1Y3QgaGlm X2llX3RhYmxlX2VudHJ5ICp0YmwpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgaGlmX21pYl9iY25f ZmlsdGVyX3RhYmxlICphcmc7Ci0JaW50IGJ1Zl9sZW4gPSBzdHJ1Y3Rfc2l6ZShhcmcsIGllX3Rh YmxlLCB0YmxfbGVuKTsKLQotCWFyZyA9IGt6YWxsb2MoYnVmX2xlbiwgR0ZQX0tFUk5FTCk7Ci0J aWYgKCFhcmcpCi0JCXJldHVybiAtRU5PTUVNOwotCWFyZy0+bnVtX29mX2luZm9fZWxtdHMgPSBj cHVfdG9fbGUzMih0YmxfbGVuKTsKLQltZW1jcHkoYXJnLT5pZV90YWJsZSwgdGJsLCBmbGV4X2Fy cmF5X3NpemUoYXJnLCBpZV90YWJsZSwgdGJsX2xlbikpOwotCXJldCA9IGhpZl93cml0ZV9taWIo d3ZpZi0+d2Rldiwgd3ZpZi0+aWQsCi0JCQkgICAgSElGX01JQl9JRF9CRUFDT05fRklMVEVSX1RB QkxFLCBhcmcsIGJ1Zl9sZW4pOwotCWtmcmVlKGFyZyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50 IGhpZl9iZWFjb25fZmlsdGVyX2NvbnRyb2woc3RydWN0IHdmeF92aWYgKnd2aWYsCi0JCQkgICAg ICBpbnQgZW5hYmxlLCBpbnQgYmVhY29uX2NvdW50KQotewotCXN0cnVjdCBoaWZfbWliX2Jjbl9m aWx0ZXJfZW5hYmxlIGFyZyA9IHsKLQkJLmVuYWJsZSA9IGNwdV90b19sZTMyKGVuYWJsZSksCi0J CS5iY25fY291bnQgPSBjcHVfdG9fbGUzMihiZWFjb25fY291bnQpLAotCX07Ci0JcmV0dXJuIGhp Zl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsCi0JCQkgICAgIEhJRl9NSUJfSURfQkVB Q09OX0ZJTFRFUl9FTkFCTEUsCi0JCQkgICAgICZhcmcsIHNpemVvZihhcmcpKTsKLX0KLQotaW50 IGhpZl9zZXRfb3BlcmF0aW9uYWxfbW9kZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgZW51bSBoaWZf b3BfcG93ZXJfbW9kZSBtb2RlKQotewotCXN0cnVjdCBoaWZfbWliX2dsX29wZXJhdGlvbmFsX3Bv d2VyX21vZGUgYXJnID0gewotCQkucG93ZXJfbW9kZSA9IG1vZGUsCi0JCS53dXBfaW5kX2FjdGl2 YXRpb24gPSAxLAotCX07Ci0KLQlyZXR1cm4gaGlmX3dyaXRlX21pYih3ZGV2LCAtMSwgSElGX01J Ql9JRF9HTF9PUEVSQVRJT05BTF9QT1dFUl9NT0RFLAotCQkJICAgICAmYXJnLCBzaXplb2YoYXJn KSk7Ci19Ci0KLWludCBoaWZfc2V0X3RlbXBsYXRlX2ZyYW1lKHN0cnVjdCB3ZnhfdmlmICp3dmlm LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgdTggZnJhbWVfdHlwZSwgaW50IGluaXRfcmF0 ZSkKLXsKLQlzdHJ1Y3QgaGlmX21pYl90ZW1wbGF0ZV9mcmFtZSAqYXJnOwotCi0JV0FSTihza2It PmxlbiA+IEhJRl9BUElfTUFYX1RFTVBMQVRFX0ZSQU1FX1NJWkUsICJmcmFtZSBpcyB0b28gYmln Iik7Ci0Jc2tiX3B1c2goc2tiLCA0KTsKLQlhcmcgPSAoc3RydWN0IGhpZl9taWJfdGVtcGxhdGVf ZnJhbWUgKilza2ItPmRhdGE7Ci0Jc2tiX3B1bGwoc2tiLCA0KTsKLQlhcmctPmluaXRfcmF0ZSA9 IGluaXRfcmF0ZTsKLQlhcmctPmZyYW1lX3R5cGUgPSBmcmFtZV90eXBlOwotCWFyZy0+ZnJhbWVf bGVuZ3RoID0gY3B1X3RvX2xlMTYoc2tiLT5sZW4pOwotCXJldHVybiBoaWZfd3JpdGVfbWliKHd2 aWYtPndkZXYsIHd2aWYtPmlkLCBISUZfTUlCX0lEX1RFTVBMQVRFX0ZSQU1FLAotCQkJICAgICBh cmcsIHNpemVvZigqYXJnKSArIHNrYi0+bGVuKTsKLX0KLQotaW50IGhpZl9zZXRfbWZwKHN0cnVj dCB3ZnhfdmlmICp3dmlmLCBib29sIGNhcGFibGUsIGJvb2wgcmVxdWlyZWQpCi17Ci0Jc3RydWN0 IGhpZl9taWJfcHJvdGVjdGVkX21nbXRfcG9saWN5IGFyZyA9IHsgfTsKLQotCVdBUk4ocmVxdWly ZWQgJiYgIWNhcGFibGUsICJpbmNvaGVyZW50IGFyZ3VtZW50cyIpOwotCWlmIChjYXBhYmxlKSB7 Ci0JCWFyZy5wbWZfZW5hYmxlID0gMTsKLQkJYXJnLmhvc3RfZW5jX2F1dGhfZnJhbWVzID0gMTsK LQl9Ci0JaWYgKCFyZXF1aXJlZCkKLQkJYXJnLnVucG1mX2FsbG93ZWQgPSAxOwotCXJldHVybiBo aWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLAotCQkJICAgICBISUZfTUlCX0lEX1BS T1RFQ1RFRF9NR01UX1BPTElDWSwKLQkJCSAgICAgJmFyZywgc2l6ZW9mKGFyZykpOwotfQotCi1p bnQgaGlmX3NldF9ibG9ja19hY2tfcG9saWN5KHN0cnVjdCB3ZnhfdmlmICp3dmlmLAotCQkJICAg ICB1OCB0eF90aWRfcG9saWN5LCB1OCByeF90aWRfcG9saWN5KQotewotCXN0cnVjdCBoaWZfbWli X2Jsb2NrX2Fja19wb2xpY3kgYXJnID0gewotCQkuYmxvY2tfYWNrX3R4X3RpZF9wb2xpY3kgPSB0 eF90aWRfcG9saWN5LAotCQkuYmxvY2tfYWNrX3J4X3RpZF9wb2xpY3kgPSByeF90aWRfcG9saWN5 LAotCX07Ci0KLQlyZXR1cm4gaGlmX3dyaXRlX21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwgSElG X01JQl9JRF9CTE9DS19BQ0tfUE9MSUNZLAotCQkJICAgICAmYXJnLCBzaXplb2YoYXJnKSk7Ci19 Ci0KLWludCBoaWZfc2V0X2Fzc29jaWF0aW9uX21vZGUoc3RydWN0IHdmeF92aWYgKnd2aWYsIGlu dCBhbXBkdV9kZW5zaXR5LAotCQkJICAgICBib29sIGdyZWVuZmllbGQsIGJvb2wgc2hvcnRfcHJl YW1ibGUpCi17Ci0Jc3RydWN0IGhpZl9taWJfc2V0X2Fzc29jaWF0aW9uX21vZGUgYXJnID0gewot CQkucHJlYW1idHlwZV91c2UgPSAxLAotCQkubW9kZSA9IDEsCi0JCS5zcGFjaW5nID0gMSwKLQkJ LnNob3J0X3ByZWFtYmxlID0gc2hvcnRfcHJlYW1ibGUsCi0JCS5ncmVlbmZpZWxkID0gZ3JlZW5m aWVsZCwKLQkJLm1wZHVfc3RhcnRfc3BhY2luZyA9IGFtcGR1X2RlbnNpdHksCi0JfTsKLQotCXJl dHVybiBoaWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLAotCQkJICAgICBISUZfTUlC X0lEX1NFVF9BU1NPQ0lBVElPTl9NT0RFLCAmYXJnLCBzaXplb2YoYXJnKSk7Ci19Ci0KLWludCBo aWZfc2V0X3R4X3JhdGVfcmV0cnlfcG9saWN5KHN0cnVjdCB3ZnhfdmlmICp3dmlmLAotCQkJCSBp bnQgcG9saWN5X2luZGV4LCB1OCAqcmF0ZXMpCi17Ci0Jc3RydWN0IGhpZl9taWJfc2V0X3R4X3Jh dGVfcmV0cnlfcG9saWN5ICphcmc7Ci0Jc2l6ZV90IHNpemUgPSBzdHJ1Y3Rfc2l6ZShhcmcsIHR4 X3JhdGVfcmV0cnlfcG9saWN5LCAxKTsKLQlpbnQgcmV0OwotCi0JYXJnID0ga3phbGxvYyhzaXpl LCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFyZykKLQkJcmV0dXJuIC1FTk9NRU07Ci0JYXJnLT5udW1f dHhfcmF0ZV9wb2xpY2llcyA9IDE7Ci0JYXJnLT50eF9yYXRlX3JldHJ5X3BvbGljeVswXS5wb2xp Y3lfaW5kZXggPSBwb2xpY3lfaW5kZXg7Ci0JYXJnLT50eF9yYXRlX3JldHJ5X3BvbGljeVswXS5z aG9ydF9yZXRyeV9jb3VudCA9IDI1NTsKLQlhcmctPnR4X3JhdGVfcmV0cnlfcG9saWN5WzBdLmxv bmdfcmV0cnlfY291bnQgPSAyNTU7Ci0JYXJnLT50eF9yYXRlX3JldHJ5X3BvbGljeVswXS5maXJz dF9yYXRlX3NlbCA9IDE7Ci0JYXJnLT50eF9yYXRlX3JldHJ5X3BvbGljeVswXS50ZXJtaW5hdGUg PSAxOwotCWFyZy0+dHhfcmF0ZV9yZXRyeV9wb2xpY3lbMF0uY291bnRfaW5pdCA9IDE7Ci0JbWVt Y3B5KCZhcmctPnR4X3JhdGVfcmV0cnlfcG9saWN5WzBdLnJhdGVzLCByYXRlcywKLQkgICAgICAg c2l6ZW9mKGFyZy0+dHhfcmF0ZV9yZXRyeV9wb2xpY3lbMF0ucmF0ZXMpKTsKLQlyZXQgPSBoaWZf d3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLAotCQkJICAgIEhJRl9NSUJfSURfU0VUX1RY X1JBVEVfUkVUUllfUE9MSUNZLCBhcmcsIHNpemUpOwotCWtmcmVlKGFyZyk7Ci0JcmV0dXJuIHJl dDsKLX0KLQotaW50IGhpZl9rZWVwX2FsaXZlX3BlcmlvZChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwg aW50IHBlcmlvZCkKLXsKLQlzdHJ1Y3QgaGlmX21pYl9rZWVwX2FsaXZlX3BlcmlvZCBhcmcgPSB7 Ci0JCS5rZWVwX2FsaXZlX3BlcmlvZCA9IGNwdV90b19sZTE2KHBlcmlvZCksCi0JfTsKLQotCXJl dHVybiBoaWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLCBISUZfTUlCX0lEX0tFRVBf QUxJVkVfUEVSSU9ELAotCQkJICAgICAmYXJnLCBzaXplb2YoYXJnKSk7Ci19OwotCi1pbnQgaGlm X3NldF9hcnBfaXB2NF9maWx0ZXIoc3RydWN0IHdmeF92aWYgKnd2aWYsIGludCBpZHgsIF9fYmUz MiAqYWRkcikKLXsKLQlzdHJ1Y3QgaGlmX21pYl9hcnBfaXBfYWRkcl90YWJsZSBhcmcgPSB7Ci0J CS5jb25kaXRpb25faWR4ID0gaWR4LAotCQkuYXJwX2VuYWJsZSA9IEhJRl9BUlBfTlNfRklMVEVS SU5HX0RJU0FCTEUsCi0JfTsKLQotCWlmIChhZGRyKSB7Ci0JCS8vIENhdXRpb246IHR5cGUgb2Yg YWRkciBpcyBfX2JlMzIKLQkJbWVtY3B5KGFyZy5pcHY0X2FkZHJlc3MsIGFkZHIsIHNpemVvZihh cmcuaXB2NF9hZGRyZXNzKSk7Ci0JCWFyZy5hcnBfZW5hYmxlID0gSElGX0FSUF9OU19GSUxURVJJ TkdfRU5BQkxFOwotCX0KLQlyZXR1cm4gaGlmX3dyaXRlX21pYih3dmlmLT53ZGV2LCB3dmlmLT5p ZCwKLQkJCSAgICAgSElGX01JQl9JRF9BUlBfSVBfQUREUkVTU0VTX1RBQkxFLAotCQkJICAgICAm YXJnLCBzaXplb2YoYXJnKSk7Ci19Ci0KLWludCBoaWZfdXNlX211bHRpX3R4X2NvbmYoc3RydWN0 IHdmeF9kZXYgKndkZXYsIGJvb2wgZW5hYmxlKQotewotCXN0cnVjdCBoaWZfbWliX2dsX3NldF9t dWx0aV9tc2cgYXJnID0gewotCQkuZW5hYmxlX211bHRpX3R4X2NvbmYgPSBlbmFibGUsCi0JfTsK LQotCXJldHVybiBoaWZfd3JpdGVfbWliKHdkZXYsIC0xLCBISUZfTUlCX0lEX0dMX1NFVF9NVUxU SV9NU0csCi0JCQkgICAgICZhcmcsIHNpemVvZihhcmcpKTsKLX0KLQotaW50IGhpZl9zZXRfdWFw c2RfaW5mbyhzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgdW5zaWduZWQgbG9uZyB2YWwpCi17Ci0Jc3Ry dWN0IGhpZl9taWJfc2V0X3VhcHNkX2luZm9ybWF0aW9uIGFyZyA9IHsgfTsKLQotCWlmICh2YWwg JiBCSVQoSUVFRTgwMjExX0FDX1ZPKSkKLQkJYXJnLnRyaWdfdm9pY2UgPSAxOwotCWlmICh2YWwg JiBCSVQoSUVFRTgwMjExX0FDX1ZJKSkKLQkJYXJnLnRyaWdfdmlkZW8gPSAxOwotCWlmICh2YWwg JiBCSVQoSUVFRTgwMjExX0FDX0JFKSkKLQkJYXJnLnRyaWdfYmUgPSAxOwotCWlmICh2YWwgJiBC SVQoSUVFRTgwMjExX0FDX0JLKSkKLQkJYXJnLnRyaWdfYmNrZ3JuZCA9IDE7Ci0JcmV0dXJuIGhp Zl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsCi0JCQkgICAgIEhJRl9NSUJfSURfU0VU X1VBUFNEX0lORk9STUFUSU9OLAotCQkJICAgICAmYXJnLCBzaXplb2YoYXJnKSk7Ci19Ci0KLWlu dCBoaWZfZXJwX3VzZV9wcm90ZWN0aW9uKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBib29sIGVuYWJs ZSkKLXsKLQlzdHJ1Y3QgaGlmX21pYl9ub25fZXJwX3Byb3RlY3Rpb24gYXJnID0gewotCQkudXNl X2N0c190b19zZWxmID0gZW5hYmxlLAotCX07Ci0KLQlyZXR1cm4gaGlmX3dyaXRlX21pYih3dmlm LT53ZGV2LCB3dmlmLT5pZCwKLQkJCSAgICAgSElGX01JQl9JRF9OT05fRVJQX1BST1RFQ1RJT04s ICZhcmcsIHNpemVvZihhcmcpKTsKLX0KLQotaW50IGhpZl9zbG90X3RpbWUoc3RydWN0IHdmeF92 aWYgKnd2aWYsIGludCB2YWwpCi17Ci0Jc3RydWN0IGhpZl9taWJfc2xvdF90aW1lIGFyZyA9IHsK LQkJLnNsb3RfdGltZSA9IGNwdV90b19sZTMyKHZhbCksCi0JfTsKLQotCXJldHVybiBoaWZfd3Jp dGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLCBISUZfTUlCX0lEX1NMT1RfVElNRSwKLQkJCSAg ICAgJmFyZywgc2l6ZW9mKGFyZykpOwotfQotCi1pbnQgaGlmX3dlcF9kZWZhdWx0X2tleV9pZChz dHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50IHZhbCkKLXsKLQlzdHJ1Y3QgaGlmX21pYl93ZXBfZGVm YXVsdF9rZXlfaWQgYXJnID0gewotCQkud2VwX2RlZmF1bHRfa2V5X2lkID0gdmFsLAotCX07Ci0K LQlyZXR1cm4gaGlmX3dyaXRlX21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwKLQkJCSAgICAgSElG X01JQl9JRF9ET1QxMV9XRVBfREVGQVVMVF9LRVlfSUQsCi0JCQkgICAgICZhcmcsIHNpemVvZihh cmcpKTsKLX0KLQotaW50IGhpZl9ydHNfdGhyZXNob2xkKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBp bnQgdmFsKQotewotCXN0cnVjdCBoaWZfbWliX2RvdDExX3J0c190aHJlc2hvbGQgYXJnID0gewot CQkudGhyZXNob2xkID0gY3B1X3RvX2xlMzIodmFsID49IDAgPyB2YWwgOiAweEZGRkYpLAotCX07 Ci0KLQlyZXR1cm4gaGlmX3dyaXRlX21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwKLQkJCSAgICAg SElGX01JQl9JRF9ET1QxMV9SVFNfVEhSRVNIT0xELCAmYXJnLCBzaXplb2YoYXJnKSk7Ci19CmRp ZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl90eF9taWIuaCBiL2RyaXZlcnMvc3Rh Z2luZy93ZngvaGlmX3R4X21pYi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTJi M2JhMGYwMGUuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl90eF9t aWIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KLS8qCi0gKiBJbXBsZW1lbnRhdGlvbiBvZiBob3N0LXRv LWNoaXAgTUlCcyBvZiBXRnh4eCBTcGxpdCBNYWMgKFdTTSkgQVBJLgotICoKLSAqIENvcHlyaWdo dCAoYykgMjAxNy0yMDIwLCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLgotICogQ29weXJpZ2h0 IChjKSAyMDEwLCBTVC1Fcmljc3NvbgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBTVC1Fcmljc3Nv biBTQQotICovCi0jaWZuZGVmIFdGWF9ISUZfVFhfTUlCX0gKLSNkZWZpbmUgV0ZYX0hJRl9UWF9N SUJfSAotCi1zdHJ1Y3Qgd2Z4X3ZpZjsKLXN0cnVjdCBza19idWZmOwotCi1pbnQgaGlmX3NldF9v dXRwdXRfcG93ZXIoc3RydWN0IHdmeF92aWYgKnd2aWYsIGludCB2YWwpOwotaW50IGhpZl9zZXRf YmVhY29uX3dha2V1cF9wZXJpb2Qoc3RydWN0IHdmeF92aWYgKnd2aWYsCi0JCQkJIHVuc2lnbmVk IGludCBkdGltX2ludGVydmFsLAotCQkJCSB1bnNpZ25lZCBpbnQgbGlzdGVuX2ludGVydmFsKTsK LWludCBoaWZfc2V0X3JjcGlfcnNzaV90aHJlc2hvbGQoc3RydWN0IHdmeF92aWYgKnd2aWYsCi0J CQkJaW50IHJzc2lfdGhvbGQsIGludCByc3NpX2h5c3QpOwotaW50IGhpZl9nZXRfY291bnRlcnNf dGFibGUoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCB2aWZfaWQsCi0JCQkgICBzdHJ1Y3QgaGlm X21pYl9leHRlbmRlZF9jb3VudF90YWJsZSAqYXJnKTsKLWludCBoaWZfc2V0X21hY2FkZHIoc3Ry dWN0IHdmeF92aWYgKnd2aWYsIHU4ICptYWMpOwotaW50IGhpZl9zZXRfcnhfZmlsdGVyKHN0cnVj dCB3ZnhfdmlmICp3dmlmLAotCQkgICAgICBib29sIGZpbHRlcl9ic3NpZCwgYm9vbCBmd2RfcHJv YmVfcmVxKTsKLWludCBoaWZfc2V0X2JlYWNvbl9maWx0ZXJfdGFibGUoc3RydWN0IHdmeF92aWYg Knd2aWYsIGludCB0YmxfbGVuLAotCQkJCWNvbnN0IHN0cnVjdCBoaWZfaWVfdGFibGVfZW50cnkg KnRibCk7Ci1pbnQgaGlmX2JlYWNvbl9maWx0ZXJfY29udHJvbChzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp ZiwKLQkJCSAgICAgIGludCBlbmFibGUsIGludCBiZWFjb25fY291bnQpOwotaW50IGhpZl9zZXRf b3BlcmF0aW9uYWxfbW9kZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgZW51bSBoaWZfb3BfcG93ZXJf bW9kZSBtb2RlKTsKLWludCBoaWZfc2V0X3RlbXBsYXRlX2ZyYW1lKHN0cnVjdCB3ZnhfdmlmICp3 dmlmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgdTggZnJhbWVfdHlwZSwgaW50IGluaXRf cmF0ZSk7Ci1pbnQgaGlmX3NldF9tZnAoc3RydWN0IHdmeF92aWYgKnd2aWYsIGJvb2wgY2FwYWJs ZSwgYm9vbCByZXF1aXJlZCk7Ci1pbnQgaGlmX3NldF9ibG9ja19hY2tfcG9saWN5KHN0cnVjdCB3 ZnhfdmlmICp3dmlmLAotCQkJICAgICB1OCB0eF90aWRfcG9saWN5LCB1OCByeF90aWRfcG9saWN5 KTsKLWludCBoaWZfc2V0X2Fzc29jaWF0aW9uX21vZGUoc3RydWN0IHdmeF92aWYgKnd2aWYsIGlu dCBhbXBkdV9kZW5zaXR5LAotCQkJICAgICBib29sIGdyZWVuZmllbGQsIGJvb2wgc2hvcnRfcHJl YW1ibGUpOwotaW50IGhpZl9zZXRfdHhfcmF0ZV9yZXRyeV9wb2xpY3koc3RydWN0IHdmeF92aWYg Knd2aWYsCi0JCQkJIGludCBwb2xpY3lfaW5kZXgsIHU4ICpyYXRlcyk7Ci1pbnQgaGlmX2tlZXBf YWxpdmVfcGVyaW9kKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBpbnQgcGVyaW9kKTsKLWludCBoaWZf c2V0X2FycF9pcHY0X2ZpbHRlcihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50IGlkeCwgX19iZTMy ICphZGRyKTsKLWludCBoaWZfdXNlX211bHRpX3R4X2NvbmYoc3RydWN0IHdmeF9kZXYgKndkZXYs IGJvb2wgZW5hYmxlKTsKLWludCBoaWZfc2V0X3VhcHNkX2luZm8oc3RydWN0IHdmeF92aWYgKnd2 aWYsIHVuc2lnbmVkIGxvbmcgdmFsKTsKLWludCBoaWZfZXJwX3VzZV9wcm90ZWN0aW9uKHN0cnVj dCB3ZnhfdmlmICp3dmlmLCBib29sIGVuYWJsZSk7Ci1pbnQgaGlmX3Nsb3RfdGltZShzdHJ1Y3Qg d2Z4X3ZpZiAqd3ZpZiwgaW50IHZhbCk7Ci1pbnQgaGlmX3dlcF9kZWZhdWx0X2tleV9pZChzdHJ1 Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50IHZhbCk7Ci1pbnQgaGlmX3J0c190aHJlc2hvbGQoc3RydWN0 IHdmeF92aWYgKnd2aWYsIGludCB2YWwpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMv c3RhZ2luZy93ZngvaHdpby5jIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9od2lvLmMKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2ZmJjNWI1ZDY0Yy4uMDAwMDAwMDAwMDAwCi0tLSBhL2Ry aXZlcnMvc3RhZ2luZy93ZngvaHdpby5jCisrKyAvZGV2L251bGwKQEAgLTEsMzUyICswLDAgQEAK LS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLS8qCi0gKiBMb3ctbGV2 ZWwgSS9PIGZ1bmN0aW9ucy4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCwgU2lsaWNv biBMYWJvcmF0b3JpZXMsIEluYy4KLSAqIENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJpY3Nzb24K LSAqLwotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+ Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaW5jbHVkZSAiaHdpby5oIgotI2luY2x1ZGUg IndmeC5oIgotI2luY2x1ZGUgImJ1cy5oIgotI2luY2x1ZGUgInRyYWNlcy5oIgotCi0vKgotICog SW50ZXJuYWwgaGVscGVycy4KLSAqCi0gKiBBYm91dCBDT05GSUdfVk1BUF9TVEFDSzoKLSAqIFdo ZW4gQ09ORklHX1ZNQVBfU1RBQ0sgaXMgZW5hYmxlZCwgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHJ1 biBETUEgb24gc3RhY2sKLSAqIGFsbG9jYXRlZCBkYXRhLiBGdW5jdGlvbnMgYmVsb3cgdGhhdCB3 b3JrIHdpdGggcmVnaXN0ZXJzIChha2EgZnVuY3Rpb25zCi0gKiBlbmRpbmcgd2l0aCAiMzIiKSBh dXRvbWF0aWNhbGx5IHJlYWxsb2NhdGUgYnVmZmVycyB3aXRoIGttYWxsb2MuIEhvd2V2ZXIsCi0g KiBmdW5jdGlvbnMgdGhhdCB3b3JrIHdpdGggYXJiaXRyYXJ5IGxlbmd0aCBidWZmZXJzIGxldCdz IGNhbGxlciB0byBoYW5kbGUKLSAqIG1lbW9yeSBsb2NhdGlvbi4gSW4gZG91YnQsIGVuYWJsZSBD T05GSUdfREVCVUdfU0cgdG8gZGV0ZWN0IGJhZGx5IGxvY2F0ZWQKLSAqIGJ1ZmZlci4KLSAqLwot Ci1zdGF0aWMgaW50IHJlYWQzMihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IHJlZywgdTMyICp2 YWwpCi17Ci0JaW50IHJldDsKLQlfX2xlMzIgKnRtcCA9IGttYWxsb2Moc2l6ZW9mKHUzMiksIEdG UF9LRVJORUwpOwotCi0JKnZhbCA9IH4wOyAvLyBOZXZlciByZXR1cm4gdW5kZWZpbmVkIHZhbHVl Ci0JaWYgKCF0bXApCi0JCXJldHVybiAtRU5PTUVNOwotCXJldCA9IHdkZXYtPmh3YnVzX29wcy0+ Y29weV9mcm9tX2lvKHdkZXYtPmh3YnVzX3ByaXYsIHJlZywgdG1wLAotCQkJCQkgICAgc2l6ZW9m KHUzMikpOwotCWlmIChyZXQgPj0gMCkKLQkJKnZhbCA9IGxlMzJfdG9fY3B1KCp0bXApOwotCWtm cmVlKHRtcCk7Ci0JaWYgKHJldCkKLQkJZGV2X2Vycih3ZGV2LT5kZXYsICIlczogYnVzIGNvbW11 bmljYXRpb24gZXJyb3I6ICVkXG4iLAotCQkJX19mdW5jX18sIHJldCk7Ci0JcmV0dXJuIHJldDsK LX0KLQotc3RhdGljIGludCB3cml0ZTMyKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgcmVnLCB1 MzIgdmFsKQotewotCWludCByZXQ7Ci0JX19sZTMyICp0bXAgPSBrbWFsbG9jKHNpemVvZih1MzIp LCBHRlBfS0VSTkVMKTsKLQotCWlmICghdG1wKQotCQlyZXR1cm4gLUVOT01FTTsKLQkqdG1wID0g Y3B1X3RvX2xlMzIodmFsKTsKLQlyZXQgPSB3ZGV2LT5od2J1c19vcHMtPmNvcHlfdG9faW8od2Rl di0+aHdidXNfcHJpdiwgcmVnLCB0bXAsCi0JCQkJCSAgc2l6ZW9mKHUzMikpOwotCWtmcmVlKHRt cCk7Ci0JaWYgKHJldCkKLQkJZGV2X2Vycih3ZGV2LT5kZXYsICIlczogYnVzIGNvbW11bmljYXRp b24gZXJyb3I6ICVkXG4iLAotCQkJX19mdW5jX18sIHJldCk7Ci0JcmV0dXJuIHJldDsKLX0KLQot c3RhdGljIGludCByZWFkMzJfbG9ja2VkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgcmVnLCB1 MzIgKnZhbCkKLXsKLQlpbnQgcmV0OwotCi0Jd2Rldi0+aHdidXNfb3BzLT5sb2NrKHdkZXYtPmh3 YnVzX3ByaXYpOwotCXJldCA9IHJlYWQzMih3ZGV2LCByZWcsIHZhbCk7Ci0JX3RyYWNlX2lvX3Jl YWQzMihyZWcsICp2YWwpOwotCXdkZXYtPmh3YnVzX29wcy0+dW5sb2NrKHdkZXYtPmh3YnVzX3By aXYpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgd3JpdGUzMl9sb2NrZWQoc3RydWN0 IHdmeF9kZXYgKndkZXYsIGludCByZWcsIHUzMiB2YWwpCi17Ci0JaW50IHJldDsKLQotCXdkZXYt Pmh3YnVzX29wcy0+bG9jayh3ZGV2LT5od2J1c19wcml2KTsKLQlyZXQgPSB3cml0ZTMyKHdkZXYs IHJlZywgdmFsKTsKLQlfdHJhY2VfaW9fd3JpdGUzMihyZWcsIHZhbCk7Ci0Jd2Rldi0+aHdidXNf b3BzLT51bmxvY2sod2Rldi0+aHdidXNfcHJpdik7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGlj IGludCB3cml0ZTMyX2JpdHNfbG9ja2VkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgcmVnLCB1 MzIgbWFzaywgdTMyIHZhbCkKLXsKLQlpbnQgcmV0OwotCXUzMiB2YWxfciwgdmFsX3c7Ci0KLQlX QVJOX09OKH5tYXNrICYgdmFsKTsKLQl2YWwgJj0gbWFzazsKLQl3ZGV2LT5od2J1c19vcHMtPmxv Y2sod2Rldi0+aHdidXNfcHJpdik7Ci0JcmV0ID0gcmVhZDMyKHdkZXYsIHJlZywgJnZhbF9yKTsK LQlfdHJhY2VfaW9fcmVhZDMyKHJlZywgdmFsX3IpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGVy cjsKLQl2YWxfdyA9ICh2YWxfciAmIH5tYXNrKSB8IHZhbDsKLQlpZiAodmFsX3cgIT0gdmFsX3Ip IHsKLQkJcmV0ID0gd3JpdGUzMih3ZGV2LCByZWcsIHZhbF93KTsKLQkJX3RyYWNlX2lvX3dyaXRl MzIocmVnLCB2YWxfdyk7Ci0JfQotZXJyOgotCXdkZXYtPmh3YnVzX29wcy0+dW5sb2NrKHdkZXYt Pmh3YnVzX3ByaXYpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgaW5kaXJlY3RfcmVh ZChzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IHJlZywgdTMyIGFkZHIsCi0JCQkgdm9pZCAqYnVm LCBzaXplX3QgbGVuKQotewotCWludCByZXQ7Ci0JaW50IGk7Ci0JdTMyIGNmZzsKLQl1MzIgcHJl ZmV0Y2g7Ci0KLQlXQVJOX09OKGxlbiA+PSAweDIwMDApOwotCVdBUk5fT04ocmVnICE9IFdGWF9S RUdfQUhCX0RQT1JUICYmIHJlZyAhPSBXRlhfUkVHX1NSQU1fRFBPUlQpOwotCi0JaWYgKHJlZyA9 PSBXRlhfUkVHX0FIQl9EUE9SVCkKLQkJcHJlZmV0Y2ggPSBDRkdfUFJFRkVUQ0hfQUhCOwotCWVs c2UgaWYgKHJlZyA9PSBXRlhfUkVHX1NSQU1fRFBPUlQpCi0JCXByZWZldGNoID0gQ0ZHX1BSRUZF VENIX1NSQU07Ci0JZWxzZQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXJldCA9IHdyaXRlMzIod2Rl diwgV0ZYX1JFR19CQVNFX0FERFIsIGFkZHIpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGVycjsK LQotCXJldCA9IHJlYWQzMih3ZGV2LCBXRlhfUkVHX0NPTkZJRywgJmNmZyk7Ci0JaWYgKHJldCA8 IDApCi0JCWdvdG8gZXJyOwotCi0JcmV0ID0gd3JpdGUzMih3ZGV2LCBXRlhfUkVHX0NPTkZJRywg Y2ZnIHwgcHJlZmV0Y2gpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGVycjsKLQotCWZvciAoaSA9 IDA7IGkgPCAyMDsgaSsrKSB7Ci0JCXJldCA9IHJlYWQzMih3ZGV2LCBXRlhfUkVHX0NPTkZJRywg JmNmZyk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBlcnI7Ci0JCWlmICghKGNmZyAmIHByZWZl dGNoKSkKLQkJCWJyZWFrOwotCQl1c2xlZXBfcmFuZ2UoMjAwLCAyNTApOwotCX0KLQlpZiAoaSA9 PSAyMCkgewotCQlyZXQgPSAtRVRJTUVET1VUOwotCQlnb3RvIGVycjsKLQl9Ci0KLQlyZXQgPSB3 ZGV2LT5od2J1c19vcHMtPmNvcHlfZnJvbV9pbyh3ZGV2LT5od2J1c19wcml2LCByZWcsIGJ1Ziwg bGVuKTsKLQotZXJyOgotCWlmIChyZXQgPCAwKQotCQltZW1zZXQoYnVmLCAweEZGLCBsZW4pOyAv LyBOZXZlciByZXR1cm4gdW5kZWZpbmVkIHZhbHVlCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGlj IGludCBpbmRpcmVjdF93cml0ZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IHJlZywgdTMyIGFk ZHIsCi0JCQkgIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKLXsKLQlpbnQgcmV0OwotCi0J V0FSTl9PTihsZW4gPj0gMHgyMDAwKTsKLQlXQVJOX09OKHJlZyAhPSBXRlhfUkVHX0FIQl9EUE9S VCAmJiByZWcgIT0gV0ZYX1JFR19TUkFNX0RQT1JUKTsKLQlyZXQgPSB3cml0ZTMyKHdkZXYsIFdG WF9SRUdfQkFTRV9BRERSLCBhZGRyKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQot CXJldHVybiB3ZGV2LT5od2J1c19vcHMtPmNvcHlfdG9faW8od2Rldi0+aHdidXNfcHJpdiwgcmVn LCBidWYsIGxlbik7Ci19Ci0KLXN0YXRpYyBpbnQgaW5kaXJlY3RfcmVhZF9sb2NrZWQoc3RydWN0 IHdmeF9kZXYgKndkZXYsIGludCByZWcsIHUzMiBhZGRyLAotCQkJCXZvaWQgKmJ1Ziwgc2l6ZV90 IGxlbikKLXsKLQlpbnQgcmV0OwotCi0Jd2Rldi0+aHdidXNfb3BzLT5sb2NrKHdkZXYtPmh3YnVz X3ByaXYpOwotCXJldCA9IGluZGlyZWN0X3JlYWQod2RldiwgcmVnLCBhZGRyLCBidWYsIGxlbik7 Ci0JX3RyYWNlX2lvX2luZF9yZWFkKHJlZywgYWRkciwgYnVmLCBsZW4pOwotCXdkZXYtPmh3YnVz X29wcy0+dW5sb2NrKHdkZXYtPmh3YnVzX3ByaXYpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRp YyBpbnQgaW5kaXJlY3Rfd3JpdGVfbG9ja2VkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgcmVn LCB1MzIgYWRkciwKLQkJCQkgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQotewotCWludCBy ZXQ7Ci0KLQl3ZGV2LT5od2J1c19vcHMtPmxvY2sod2Rldi0+aHdidXNfcHJpdik7Ci0JcmV0ID0g aW5kaXJlY3Rfd3JpdGUod2RldiwgcmVnLCBhZGRyLCBidWYsIGxlbik7Ci0JX3RyYWNlX2lvX2lu ZF93cml0ZShyZWcsIGFkZHIsIGJ1ZiwgbGVuKTsKLQl3ZGV2LT5od2J1c19vcHMtPnVubG9jayh3 ZGV2LT5od2J1c19wcml2KTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGluZGlyZWN0 X3JlYWQzMl9sb2NrZWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCByZWcsCi0JCQkJICB1MzIg YWRkciwgdTMyICp2YWwpCi17Ci0JaW50IHJldDsKLQlfX2xlMzIgKnRtcCA9IGttYWxsb2Moc2l6 ZW9mKHUzMiksIEdGUF9LRVJORUwpOwotCi0JaWYgKCF0bXApCi0JCXJldHVybiAtRU5PTUVNOwot CXdkZXYtPmh3YnVzX29wcy0+bG9jayh3ZGV2LT5od2J1c19wcml2KTsKLQlyZXQgPSBpbmRpcmVj dF9yZWFkKHdkZXYsIHJlZywgYWRkciwgdG1wLCBzaXplb2YodTMyKSk7Ci0JKnZhbCA9IGxlMzJf dG9fY3B1KCp0bXApOwotCV90cmFjZV9pb19pbmRfcmVhZDMyKHJlZywgYWRkciwgKnZhbCk7Ci0J d2Rldi0+aHdidXNfb3BzLT51bmxvY2sod2Rldi0+aHdidXNfcHJpdik7Ci0Ja2ZyZWUodG1wKTsK LQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGluZGlyZWN0X3dyaXRlMzJfbG9ja2VkKHN0 cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgcmVnLAotCQkJCSAgIHUzMiBhZGRyLCB1MzIgdmFsKQot ewotCWludCByZXQ7Ci0JX19sZTMyICp0bXAgPSBrbWFsbG9jKHNpemVvZih1MzIpLCBHRlBfS0VS TkVMKTsKLQotCWlmICghdG1wKQotCQlyZXR1cm4gLUVOT01FTTsKLQkqdG1wID0gY3B1X3RvX2xl MzIodmFsKTsKLQl3ZGV2LT5od2J1c19vcHMtPmxvY2sod2Rldi0+aHdidXNfcHJpdik7Ci0JcmV0 ID0gaW5kaXJlY3Rfd3JpdGUod2RldiwgcmVnLCBhZGRyLCB0bXAsIHNpemVvZih1MzIpKTsKLQlf dHJhY2VfaW9faW5kX3dyaXRlMzIocmVnLCBhZGRyLCB2YWwpOwotCXdkZXYtPmh3YnVzX29wcy0+ dW5sb2NrKHdkZXYtPmh3YnVzX3ByaXYpOwotCWtmcmVlKHRtcCk7Ci0JcmV0dXJuIHJldDsKLX0K LQotaW50IHdmeF9kYXRhX3JlYWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIHZvaWQgKmJ1Ziwgc2l6 ZV90IGxlbikKLXsKLQlpbnQgcmV0OwotCi0JV0FSTigobG9uZylidWYgJiAzLCAiJXM6IHVuYWxp Z25lZCBidWZmZXIiLCBfX2Z1bmNfXyk7Ci0Jd2Rldi0+aHdidXNfb3BzLT5sb2NrKHdkZXYtPmh3 YnVzX3ByaXYpOwotCXJldCA9IHdkZXYtPmh3YnVzX29wcy0+Y29weV9mcm9tX2lvKHdkZXYtPmh3 YnVzX3ByaXYsCi0JCQkJCSAgICBXRlhfUkVHX0lOX09VVF9RVUVVRSwgYnVmLCBsZW4pOwotCV90 cmFjZV9pb19yZWFkKFdGWF9SRUdfSU5fT1VUX1FVRVVFLCBidWYsIGxlbik7Ci0Jd2Rldi0+aHdi dXNfb3BzLT51bmxvY2sod2Rldi0+aHdidXNfcHJpdik7Ci0JaWYgKHJldCkKLQkJZGV2X2Vycih3 ZGV2LT5kZXYsICIlczogYnVzIGNvbW11bmljYXRpb24gZXJyb3I6ICVkXG4iLAotCQkJX19mdW5j X18sIHJldCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IHdmeF9kYXRhX3dyaXRlKHN0cnVjdCB3 ZnhfZGV2ICp3ZGV2LCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pCi17Ci0JaW50IHJldDsK LQotCVdBUk4oKGxvbmcpYnVmICYgMywgIiVzOiB1bmFsaWduZWQgYnVmZmVyIiwgX19mdW5jX18p OwotCXdkZXYtPmh3YnVzX29wcy0+bG9jayh3ZGV2LT5od2J1c19wcml2KTsKLQlyZXQgPSB3ZGV2 LT5od2J1c19vcHMtPmNvcHlfdG9faW8od2Rldi0+aHdidXNfcHJpdiwKLQkJCQkJICBXRlhfUkVH X0lOX09VVF9RVUVVRSwgYnVmLCBsZW4pOwotCV90cmFjZV9pb193cml0ZShXRlhfUkVHX0lOX09V VF9RVUVVRSwgYnVmLCBsZW4pOwotCXdkZXYtPmh3YnVzX29wcy0+dW5sb2NrKHdkZXYtPmh3YnVz X3ByaXYpOwotCWlmIChyZXQpCi0JCWRldl9lcnIod2Rldi0+ZGV2LCAiJXM6IGJ1cyBjb21tdW5p Y2F0aW9uIGVycm9yOiAlZFxuIiwKLQkJCV9fZnVuY19fLCByZXQpOwotCXJldHVybiByZXQ7Ci19 Ci0KLWludCBzcmFtX2J1Zl9yZWFkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgYWRkciwgdm9p ZCAqYnVmLCBzaXplX3QgbGVuKQotewotCXJldHVybiBpbmRpcmVjdF9yZWFkX2xvY2tlZCh3ZGV2 LCBXRlhfUkVHX1NSQU1fRFBPUlQsIGFkZHIsIGJ1ZiwgbGVuKTsKLX0KLQotaW50IGFoYl9idWZf cmVhZChzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIGFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxl bikKLXsKLQlyZXR1cm4gaW5kaXJlY3RfcmVhZF9sb2NrZWQod2RldiwgV0ZYX1JFR19BSEJfRFBP UlQsIGFkZHIsIGJ1ZiwgbGVuKTsKLX0KLQotaW50IHNyYW1fYnVmX3dyaXRlKHN0cnVjdCB3Znhf ZGV2ICp3ZGV2LCB1MzIgYWRkciwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQotewotCXJl dHVybiBpbmRpcmVjdF93cml0ZV9sb2NrZWQod2RldiwgV0ZYX1JFR19TUkFNX0RQT1JULCBhZGRy LCBidWYsIGxlbik7Ci19Ci0KLWludCBhaGJfYnVmX3dyaXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2 LCB1MzIgYWRkciwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQotewotCXJldHVybiBpbmRp cmVjdF93cml0ZV9sb2NrZWQod2RldiwgV0ZYX1JFR19BSEJfRFBPUlQsIGFkZHIsIGJ1ZiwgbGVu KTsKLX0KLQotaW50IHNyYW1fcmVnX3JlYWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiBhZGRy LCB1MzIgKnZhbCkKLXsKLQlyZXR1cm4gaW5kaXJlY3RfcmVhZDMyX2xvY2tlZCh3ZGV2LCBXRlhf UkVHX1NSQU1fRFBPUlQsIGFkZHIsIHZhbCk7Ci19Ci0KLWludCBhaGJfcmVnX3JlYWQoc3RydWN0 IHdmeF9kZXYgKndkZXYsIHUzMiBhZGRyLCB1MzIgKnZhbCkKLXsKLQlyZXR1cm4gaW5kaXJlY3Rf cmVhZDMyX2xvY2tlZCh3ZGV2LCBXRlhfUkVHX0FIQl9EUE9SVCwgYWRkciwgdmFsKTsKLX0KLQot aW50IHNyYW1fcmVnX3dyaXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgYWRkciwgdTMyIHZh bCkKLXsKLQlyZXR1cm4gaW5kaXJlY3Rfd3JpdGUzMl9sb2NrZWQod2RldiwgV0ZYX1JFR19TUkFN X0RQT1JULCBhZGRyLCB2YWwpOwotfQotCi1pbnQgYWhiX3JlZ193cml0ZShzdHJ1Y3Qgd2Z4X2Rl diAqd2RldiwgdTMyIGFkZHIsIHUzMiB2YWwpCi17Ci0JcmV0dXJuIGluZGlyZWN0X3dyaXRlMzJf bG9ja2VkKHdkZXYsIFdGWF9SRUdfQUhCX0RQT1JULCBhZGRyLCB2YWwpOwotfQotCi1pbnQgY29u ZmlnX3JlZ19yZWFkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgKnZhbCkKLXsKLQlyZXR1cm4g cmVhZDMyX2xvY2tlZCh3ZGV2LCBXRlhfUkVHX0NPTkZJRywgdmFsKTsKLX0KLQotaW50IGNvbmZp Z19yZWdfd3JpdGUoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiB2YWwpCi17Ci0JcmV0dXJuIHdy aXRlMzJfbG9ja2VkKHdkZXYsIFdGWF9SRUdfQ09ORklHLCB2YWwpOwotfQotCi1pbnQgY29uZmln X3JlZ193cml0ZV9iaXRzKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgbWFzaywgdTMyIHZhbCkK LXsKLQlyZXR1cm4gd3JpdGUzMl9iaXRzX2xvY2tlZCh3ZGV2LCBXRlhfUkVHX0NPTkZJRywgbWFz aywgdmFsKTsKLX0KLQotaW50IGNvbnRyb2xfcmVnX3JlYWQoc3RydWN0IHdmeF9kZXYgKndkZXYs IHUzMiAqdmFsKQotewotCXJldHVybiByZWFkMzJfbG9ja2VkKHdkZXYsIFdGWF9SRUdfQ09OVFJP TCwgdmFsKTsKLX0KLQotaW50IGNvbnRyb2xfcmVnX3dyaXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2 LCB1MzIgdmFsKQotewotCXJldHVybiB3cml0ZTMyX2xvY2tlZCh3ZGV2LCBXRlhfUkVHX0NPTlRS T0wsIHZhbCk7Ci19Ci0KLWludCBjb250cm9sX3JlZ193cml0ZV9iaXRzKHN0cnVjdCB3ZnhfZGV2 ICp3ZGV2LCB1MzIgbWFzaywgdTMyIHZhbCkKLXsKLQlyZXR1cm4gd3JpdGUzMl9iaXRzX2xvY2tl ZCh3ZGV2LCBXRlhfUkVHX0NPTlRST0wsIG1hc2ssIHZhbCk7Ci19Ci0KLWludCBpZ3ByX3JlZ19y ZWFkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgaW5kZXgsIHUzMiAqdmFsKQotewotCWludCBy ZXQ7Ci0KLQkqdmFsID0gfjA7IC8vIE5ldmVyIHJldHVybiB1bmRlZmluZWQgdmFsdWUKLQlyZXQg PSB3cml0ZTMyX2xvY2tlZCh3ZGV2LCBXRlhfUkVHX1NFVF9HRU5fUl9XLCBJR1BSX1JXIHwgaW5k ZXggPDwgMjQpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0JcmV0ID0gcmVhZDMyX2xvY2tl ZCh3ZGV2LCBXRlhfUkVHX1NFVF9HRU5fUl9XLCB2YWwpOwotCWlmIChyZXQpCi0JCXJldHVybiBy ZXQ7Ci0JKnZhbCAmPSBJR1BSX1ZBTFVFOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCBpZ3ByX3Jl Z193cml0ZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IGluZGV4LCB1MzIgdmFsKQotewotCXJl dHVybiB3cml0ZTMyX2xvY2tlZCh3ZGV2LCBXRlhfUkVHX1NFVF9HRU5fUl9XLCBpbmRleCA8PCAy NCB8IHZhbCk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2h3aW8uaCBiL2Ry aXZlcnMvc3RhZ2luZy93ZngvaHdpby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw YjhlNGY3MTU3ZGYuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2h3aW8u aAorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wLW9ubHkgKi8KLS8qCi0gKiBMb3ctbGV2ZWwgQVBJLgotICoKLSAqIENvcHly aWdodCAoYykgMjAxNy0yMDIwLCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLgotICogQ29weXJp Z2h0IChjKSAyMDEwLCBTVC1Fcmljc3NvbgotICovCi0jaWZuZGVmIFdGWF9IV0lPX0gKLSNkZWZp bmUgV0ZYX0hXSU9fSAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotc3RydWN0IHdmeF9k ZXY7Ci0KLWludCB3ZnhfZGF0YV9yZWFkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB2b2lkICpidWYs IHNpemVfdCBidWZfbGVuKTsKLWludCB3ZnhfZGF0YV93cml0ZShzdHJ1Y3Qgd2Z4X2RldiAqd2Rl diwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgYnVmX2xlbik7Ci0KLWludCBzcmFtX2J1Zl9yZWFk KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgYWRkciwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKTsK LWludCBzcmFtX2J1Zl93cml0ZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIGFkZHIsIGNvbnN0 IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbik7Ci0KLWludCBhaGJfYnVmX3JlYWQoc3RydWN0IHdmeF9k ZXYgKndkZXYsIHUzMiBhZGRyLCB2b2lkICpidWYsIHNpemVfdCBsZW4pOwotaW50IGFoYl9idWZf d3JpdGUoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiBhZGRyLCBjb25zdCB2b2lkICpidWYsIHNp emVfdCBsZW4pOwotCi1pbnQgc3JhbV9yZWdfcmVhZChzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMy IGFkZHIsIHUzMiAqdmFsKTsKLWludCBzcmFtX3JlZ193cml0ZShzdHJ1Y3Qgd2Z4X2RldiAqd2Rl diwgdTMyIGFkZHIsIHUzMiB2YWwpOwotCi1pbnQgYWhiX3JlZ19yZWFkKHN0cnVjdCB3ZnhfZGV2 ICp3ZGV2LCB1MzIgYWRkciwgdTMyICp2YWwpOwotaW50IGFoYl9yZWdfd3JpdGUoc3RydWN0IHdm eF9kZXYgKndkZXYsIHUzMiBhZGRyLCB1MzIgdmFsKTsKLQotI2RlZmluZSBDRkdfRVJSX1NQSV9G UkFNRSAgICAgICAgICAweDAwMDAwMDAxIC8vIG9ubHkgd2l0aCBTUEkKLSNkZWZpbmUgQ0ZHX0VS Ul9TRElPX0JVRl9NSVNNQVRDSCAgMHgwMDAwMDAwMSAvLyBvbmx5IHdpdGggU0RJTwotI2RlZmlu ZSBDRkdfRVJSX0JVRl9VTkRFUlJVTiAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIENGR19FUlJf REFUQV9JTl9UT09fTEFSR0UgIDB4MDAwMDAwMDQKLSNkZWZpbmUgQ0ZHX0VSUl9IT1NUX05PX09V VF9RVUVVRSAgMHgwMDAwMDAwOAotI2RlZmluZSBDRkdfRVJSX0JVRl9PVkVSUlVOICAgICAgICAw eDAwMDAwMDEwCi0jZGVmaW5lIENGR19FUlJfREFUQV9PVVRfVE9PX0xBUkdFIDB4MDAwMDAwMjAK LSNkZWZpbmUgQ0ZHX0VSUl9IT1NUX05PX0lOX1FVRVVFICAgMHgwMDAwMDA0MAotI2RlZmluZSBD RkdfRVJSX0hPU1RfQ1JDX01JU1MgICAgICAweDAwMDAwMDgwIC8vIG9ubHkgd2l0aCBTRElPCi0j ZGVmaW5lIENGR19TUElfSUdOT1JFX0NTICAgICAgICAgIDB4MDAwMDAwODAgLy8gb25seSB3aXRo IFNQSQotI2RlZmluZSBDRkdfQllURV9PUkRFUl9NQVNLICAgICAgICAweDAwMDAwMzAwIC8vIG9u bHkgd3JpdGFibGUgd2l0aCBTUEkKLSNkZWZpbmUgICAgIENGR19CWVRFX09SREVSX0JBREMgICAg MHgwMDAwMDAwMAotI2RlZmluZSAgICAgQ0ZHX0JZVEVfT1JERVJfRENCQSAgICAweDAwMDAwMTAw Ci0jZGVmaW5lICAgICBDRkdfQllURV9PUkRFUl9BQkNEICAgIDB4MDAwMDAyMDAgLy8gU0RJTyBh bHdheXMgdXNlIHRoaXMgdmFsdWUKLSNkZWZpbmUgQ0ZHX0RJUkVDVF9BQ0NFU1NfTU9ERSAgICAg MHgwMDAwMDQwMAotI2RlZmluZSBDRkdfUFJFRkVUQ0hfQUhCICAgICAgICAgICAweDAwMDAwODAw Ci0jZGVmaW5lIENGR19ESVNBQkxFX0NQVV9DTEsgICAgICAgIDB4MDAwMDEwMDAKLSNkZWZpbmUg Q0ZHX1BSRUZFVENIX1NSQU0gICAgICAgICAgMHgwMDAwMjAwMAotI2RlZmluZSBDRkdfQ1BVX1JF U0VUICAgICAgICAgICAgICAweDAwMDA0MDAwCi0jZGVmaW5lIENGR19TRElPX0RJU0FCTEVfSVJR ICAgICAgIDB4MDAwMDgwMDAgLy8gb25seSB3aXRoIFNESU8KLSNkZWZpbmUgQ0ZHX0lSUV9FTkFC TEVfREFUQSAgICAgICAgMHgwMDAxMDAwMAotI2RlZmluZSBDRkdfSVJRX0VOQUJMRV9XUkRZICAg ICAgICAweDAwMDIwMDAwCi0jZGVmaW5lIENGR19DTEtfUklTRV9FREdFICAgICAgICAgIDB4MDAw NDAwMDAKLSNkZWZpbmUgQ0ZHX1NESU9fRElTQUJMRV9DUkNfQ0hLICAgMHgwMDA4MDAwMCAvLyBv bmx5IHdpdGggU0RJTwotI2RlZmluZSBDRkdfUkVTRVJWRUQgICAgICAgICAgICAgICAweDAwRjAw MDAwCi0jZGVmaW5lIENGR19ERVZJQ0VfSURfTUFKT1IgICAgICAgIDB4MDcwMDAwMDAKLSNkZWZp bmUgQ0ZHX0RFVklDRV9JRF9SRVNFUlZFRCAgICAgMHg3ODAwMDAwMAotI2RlZmluZSBDRkdfREVW SUNFX0lEX1RZUEUgICAgICAgICAweDgwMDAwMDAwCi1pbnQgY29uZmlnX3JlZ19yZWFkKHN0cnVj dCB3ZnhfZGV2ICp3ZGV2LCB1MzIgKnZhbCk7Ci1pbnQgY29uZmlnX3JlZ193cml0ZShzdHJ1Y3Qg d2Z4X2RldiAqd2RldiwgdTMyIHZhbCk7Ci1pbnQgY29uZmlnX3JlZ193cml0ZV9iaXRzKHN0cnVj dCB3ZnhfZGV2ICp3ZGV2LCB1MzIgbWFzaywgdTMyIHZhbCk7Ci0KLSNkZWZpbmUgQ1RSTF9ORVhU X0xFTl9NQVNLICAgMHgwMDAwMEZGRgotI2RlZmluZSBDVFJMX1dMQU5fV0FLRVVQICAgICAweDAw MDAxMDAwCi0jZGVmaW5lIENUUkxfV0xBTl9SRUFEWSAgICAgIDB4MDAwMDIwMDAKLWludCBjb250 cm9sX3JlZ19yZWFkKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgKnZhbCk7Ci1pbnQgY29udHJv bF9yZWdfd3JpdGUoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiB2YWwpOwotaW50IGNvbnRyb2xf cmVnX3dyaXRlX2JpdHMoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiBtYXNrLCB1MzIgdmFsKTsK LQotI2RlZmluZSBJR1BSX1JXICAgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgSUdQUl9JTkRF WCAgICAgICAweDdGMDAwMDAwCi0jZGVmaW5lIElHUFJfVkFMVUUgICAgICAgMHgwMEZGRkZGRgot aW50IGlncHJfcmVnX3JlYWQoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCBpbmRleCwgdTMyICp2 YWwpOwotaW50IGlncHJfcmVnX3dyaXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgaW5kZXgs IHUzMiB2YWwpOwotCi0jZW5kaWYgLyogV0ZYX0hXSU9fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9zdGFnaW5nL3dmeC9rZXkuYyBiL2RyaXZlcnMvc3RhZ2luZy93Zngva2V5LmMKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhYjgyYmVkNGMxYi4uMDAwMDAwMDAwMDAwCi0tLSBhL2Ry aXZlcnMvc3RhZ2luZy93Zngva2V5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDEgKzAsMCBAQAot Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQotLyoKLSAqIEtleSBtYW5h Z2VtZW50IHJlbGF0ZWQgZnVuY3Rpb25zLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIw LCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1F cmljc3NvbgotICovCi0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxu ZXQvbWFjODAyMTEuaD4KLQotI2luY2x1ZGUgImtleS5oIgotI2luY2x1ZGUgIndmeC5oIgotI2lu Y2x1ZGUgImhpZl90eF9taWIuaCIKLQotc3RhdGljIGludCB3ZnhfYWxsb2Nfa2V5KHN0cnVjdCB3 ZnhfZGV2ICp3ZGV2KQotewotCWludCBpZHg7Ci0KLQlpZHggPSBmZnMofndkZXYtPmtleV9tYXAp IC0gMTsKLQlpZiAoaWR4IDwgMCB8fCBpZHggPj0gTUFYX0tFWV9FTlRSSUVTKQotCQlyZXR1cm4g LTE7Ci0KLQl3ZGV2LT5rZXlfbWFwIHw9IEJJVChpZHgpOwotCXJldHVybiBpZHg7Ci19Ci0KLXN0 YXRpYyB2b2lkIHdmeF9mcmVlX2tleShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IGlkeCkKLXsK LQlXQVJOKCEod2Rldi0+a2V5X21hcCAmIEJJVChpZHgpKSwgImluY29uc2lzdGVudCBrZXkgYWxs b2NhdGlvbiIpOwotCXdkZXYtPmtleV9tYXAgJj0gfkJJVChpZHgpOwotfQotCi1zdGF0aWMgdTgg ZmlsbF93ZXBfcGFpcihzdHJ1Y3QgaGlmX3dlcF9wYWlyd2lzZV9rZXkgKm1zZywKLQkJCSAgICAg c3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5LCB1OCAqcGVlcl9hZGRyKQotewotCVdBUk4o a2V5LT5rZXlsZW4gPiBzaXplb2YobXNnLT5rZXlfZGF0YSksICJpbmNvbnNpc3RlbnQgZGF0YSIp OwotCW1zZy0+a2V5X2xlbmd0aCA9IGtleS0+a2V5bGVuOwotCW1lbWNweShtc2ctPmtleV9kYXRh LCBrZXktPmtleSwga2V5LT5rZXlsZW4pOwotCWV0aGVyX2FkZHJfY29weShtc2ctPnBlZXJfYWRk cmVzcywgcGVlcl9hZGRyKTsKLQlyZXR1cm4gSElGX0tFWV9UWVBFX1dFUF9QQUlSV0lTRTsKLX0K LQotc3RhdGljIHU4IGZpbGxfd2VwX2dyb3VwKHN0cnVjdCBoaWZfd2VwX2dyb3VwX2tleSAqbXNn LAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQotewotCVdBUk4oa2V5 LT5rZXlsZW4gPiBzaXplb2YobXNnLT5rZXlfZGF0YSksICJpbmNvbnNpc3RlbnQgZGF0YSIpOwot CW1zZy0+a2V5X2lkID0ga2V5LT5rZXlpZHg7Ci0JbXNnLT5rZXlfbGVuZ3RoID0ga2V5LT5rZXls ZW47Ci0JbWVtY3B5KG1zZy0+a2V5X2RhdGEsIGtleS0+a2V5LCBrZXktPmtleWxlbik7Ci0JcmV0 dXJuIEhJRl9LRVlfVFlQRV9XRVBfREVGQVVMVDsKLX0KLQotc3RhdGljIHU4IGZpbGxfdGtpcF9w YWlyKHN0cnVjdCBoaWZfdGtpcF9wYWlyd2lzZV9rZXkgKm1zZywKLQkJCSAgICAgIHN0cnVjdCBp ZWVlODAyMTFfa2V5X2NvbmYgKmtleSwgdTggKnBlZXJfYWRkcikKLXsKLQl1OCAqa2V5YnVmID0g a2V5LT5rZXk7Ci0KLQlXQVJOKGtleS0+a2V5bGVuICE9IHNpemVvZihtc2ctPnRraXBfa2V5X2Rh dGEpCi0JCQkgICAgKyBzaXplb2YobXNnLT50eF9taWNfa2V5KQotCQkJICAgICsgc2l6ZW9mKG1z Zy0+cnhfbWljX2tleSksICJpbmNvbnNpc3RlbnQgZGF0YSIpOwotCW1lbWNweShtc2ctPnRraXBf a2V5X2RhdGEsIGtleWJ1Ziwgc2l6ZW9mKG1zZy0+dGtpcF9rZXlfZGF0YSkpOwotCWtleWJ1ZiAr PSBzaXplb2YobXNnLT50a2lwX2tleV9kYXRhKTsKLQltZW1jcHkobXNnLT50eF9taWNfa2V5LCBr ZXlidWYsIHNpemVvZihtc2ctPnR4X21pY19rZXkpKTsKLQlrZXlidWYgKz0gc2l6ZW9mKG1zZy0+ dHhfbWljX2tleSk7Ci0JbWVtY3B5KG1zZy0+cnhfbWljX2tleSwga2V5YnVmLCBzaXplb2YobXNn LT5yeF9taWNfa2V5KSk7Ci0JZXRoZXJfYWRkcl9jb3B5KG1zZy0+cGVlcl9hZGRyZXNzLCBwZWVy X2FkZHIpOwotCXJldHVybiBISUZfS0VZX1RZUEVfVEtJUF9QQUlSV0lTRTsKLX0KLQotc3RhdGlj IHU4IGZpbGxfdGtpcF9ncm91cChzdHJ1Y3QgaGlmX3RraXBfZ3JvdXBfa2V5ICptc2csCi0JCQkg ICAgICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5LAotCQkJICAgICAgIHN0cnVjdCBp ZWVlODAyMTFfa2V5X3NlcSAqc2VxLAotCQkJICAgICAgIGVudW0gbmw4MDIxMV9pZnR5cGUgaWZ0 eXBlKQotewotCXU4ICprZXlidWYgPSBrZXktPmtleTsKLQotCVdBUk4oa2V5LT5rZXlsZW4gIT0g c2l6ZW9mKG1zZy0+dGtpcF9rZXlfZGF0YSkKLQkJCSAgICArIDIgKiBzaXplb2YobXNnLT5yeF9t aWNfa2V5KSwgImluY29uc2lzdGVudCBkYXRhIik7Ci0JbXNnLT5rZXlfaWQgPSBrZXktPmtleWlk eDsKLQltZW1jcHkobXNnLT5yeF9zZXF1ZW5jZV9jb3VudGVyLAotCSAgICAgICAmc2VxLT50a2lw Lml2MTYsIHNpemVvZihzZXEtPnRraXAuaXYxNikpOwotCW1lbWNweShtc2ctPnJ4X3NlcXVlbmNl X2NvdW50ZXIgKyBzaXplb2YodTE2KSwKLQkgICAgICAgJnNlcS0+dGtpcC5pdjMyLCBzaXplb2Yo c2VxLT50a2lwLml2MzIpKTsKLQltZW1jcHkobXNnLT50a2lwX2tleV9kYXRhLCBrZXlidWYsIHNp emVvZihtc2ctPnRraXBfa2V5X2RhdGEpKTsKLQlrZXlidWYgKz0gc2l6ZW9mKG1zZy0+dGtpcF9r ZXlfZGF0YSk7Ci0JaWYgKGlmdHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKLQkJLy8gVXNlIFR4 IE1JQyBLZXkKLQkJbWVtY3B5KG1zZy0+cnhfbWljX2tleSwga2V5YnVmICsgMCwgc2l6ZW9mKG1z Zy0+cnhfbWljX2tleSkpOwotCWVsc2UKLQkJLy8gVXNlIFJ4IE1JQyBLZXkKLQkJbWVtY3B5KG1z Zy0+cnhfbWljX2tleSwga2V5YnVmICsgOCwgc2l6ZW9mKG1zZy0+cnhfbWljX2tleSkpOwotCXJl dHVybiBISUZfS0VZX1RZUEVfVEtJUF9HUk9VUDsKLX0KLQotc3RhdGljIHU4IGZpbGxfY2NtcF9w YWlyKHN0cnVjdCBoaWZfYWVzX3BhaXJ3aXNlX2tleSAqbXNnLAotCQkJICAgICAgc3RydWN0IGll ZWU4MDIxMV9rZXlfY29uZiAqa2V5LCB1OCAqcGVlcl9hZGRyKQotewotCVdBUk4oa2V5LT5rZXls ZW4gIT0gc2l6ZW9mKG1zZy0+YWVzX2tleV9kYXRhKSwgImluY29uc2lzdGVudCBkYXRhIik7Ci0J ZXRoZXJfYWRkcl9jb3B5KG1zZy0+cGVlcl9hZGRyZXNzLCBwZWVyX2FkZHIpOwotCW1lbWNweSht c2ctPmFlc19rZXlfZGF0YSwga2V5LT5rZXksIGtleS0+a2V5bGVuKTsKLQlyZXR1cm4gSElGX0tF WV9UWVBFX0FFU19QQUlSV0lTRTsKLX0KLQotc3RhdGljIHU4IGZpbGxfY2NtcF9ncm91cChzdHJ1 Y3QgaGlmX2Flc19ncm91cF9rZXkgKm1zZywKLQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2tl eV9jb25mICprZXksCi0JCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9rZXlfc2VxICpzZXEpCi17 Ci0JV0FSTihrZXktPmtleWxlbiAhPSBzaXplb2YobXNnLT5hZXNfa2V5X2RhdGEpLCAiaW5jb25z aXN0ZW50IGRhdGEiKTsKLQltZW1jcHkobXNnLT5hZXNfa2V5X2RhdGEsIGtleS0+a2V5LCBrZXkt PmtleWxlbik7Ci0JbWVtY3B5KG1zZy0+cnhfc2VxdWVuY2VfY291bnRlciwgc2VxLT5jY21wLnBu LCBzaXplb2Yoc2VxLT5jY21wLnBuKSk7Ci0JbWVtcmV2ZXJzZShtc2ctPnJ4X3NlcXVlbmNlX2Nv dW50ZXIsIHNpemVvZihzZXEtPmNjbXAucG4pKTsKLQltc2ctPmtleV9pZCA9IGtleS0+a2V5aWR4 OwotCXJldHVybiBISUZfS0VZX1RZUEVfQUVTX0dST1VQOwotfQotCi1zdGF0aWMgdTggZmlsbF9z bXM0X3BhaXIoc3RydWN0IGhpZl93YXBpX3BhaXJ3aXNlX2tleSAqbXNnLAotCQkJICAgICAgc3Ry dWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5LCB1OCAqcGVlcl9hZGRyKQotewotCXU4ICprZXli dWYgPSBrZXktPmtleTsKLQotCVdBUk4oa2V5LT5rZXlsZW4gIT0gc2l6ZW9mKG1zZy0+d2FwaV9r ZXlfZGF0YSkKLQkJCSAgICArIHNpemVvZihtc2ctPm1pY19rZXlfZGF0YSksICJpbmNvbnNpc3Rl bnQgZGF0YSIpOwotCWV0aGVyX2FkZHJfY29weShtc2ctPnBlZXJfYWRkcmVzcywgcGVlcl9hZGRy KTsKLQltZW1jcHkobXNnLT53YXBpX2tleV9kYXRhLCBrZXlidWYsIHNpemVvZihtc2ctPndhcGlf a2V5X2RhdGEpKTsKLQlrZXlidWYgKz0gc2l6ZW9mKG1zZy0+d2FwaV9rZXlfZGF0YSk7Ci0JbWVt Y3B5KG1zZy0+bWljX2tleV9kYXRhLCBrZXlidWYsIHNpemVvZihtc2ctPm1pY19rZXlfZGF0YSkp OwotCW1zZy0+a2V5X2lkID0ga2V5LT5rZXlpZHg7Ci0JcmV0dXJuIEhJRl9LRVlfVFlQRV9XQVBJ X1BBSVJXSVNFOwotfQotCi1zdGF0aWMgdTggZmlsbF9zbXM0X2dyb3VwKHN0cnVjdCBoaWZfd2Fw aV9ncm91cF9rZXkgKm1zZywKLQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICpr ZXkpCi17Ci0JdTggKmtleWJ1ZiA9IGtleS0+a2V5OwotCi0JV0FSTihrZXktPmtleWxlbiAhPSBz aXplb2YobXNnLT53YXBpX2tleV9kYXRhKQotCQkJICAgICsgc2l6ZW9mKG1zZy0+bWljX2tleV9k YXRhKSwgImluY29uc2lzdGVudCBkYXRhIik7Ci0JbWVtY3B5KG1zZy0+d2FwaV9rZXlfZGF0YSwg a2V5YnVmLCBzaXplb2YobXNnLT53YXBpX2tleV9kYXRhKSk7Ci0Ja2V5YnVmICs9IHNpemVvZiht c2ctPndhcGlfa2V5X2RhdGEpOwotCW1lbWNweShtc2ctPm1pY19rZXlfZGF0YSwga2V5YnVmLCBz aXplb2YobXNnLT5taWNfa2V5X2RhdGEpKTsKLQltc2ctPmtleV9pZCA9IGtleS0+a2V5aWR4Owot CXJldHVybiBISUZfS0VZX1RZUEVfV0FQSV9HUk9VUDsKLX0KLQotc3RhdGljIHU4IGZpbGxfYWVz X2NtYWNfZ3JvdXAoc3RydWN0IGhpZl9pZ3RrX2dyb3VwX2tleSAqbXNnLAotCQkJCSAgIHN0cnVj dCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9z ZXEgKnNlcSkKLXsKLQlXQVJOKGtleS0+a2V5bGVuICE9IHNpemVvZihtc2ctPmlndGtfa2V5X2Rh dGEpLCAiaW5jb25zaXN0ZW50IGRhdGEiKTsKLQltZW1jcHkobXNnLT5pZ3RrX2tleV9kYXRhLCBr ZXktPmtleSwga2V5LT5rZXlsZW4pOwotCW1lbWNweShtc2ctPmlwbiwgc2VxLT5hZXNfY21hYy5w biwgc2l6ZW9mKHNlcS0+YWVzX2NtYWMucG4pKTsKLQltZW1yZXZlcnNlKG1zZy0+aXBuLCBzaXpl b2Yoc2VxLT5hZXNfY21hYy5wbikpOwotCW1zZy0+a2V5X2lkID0ga2V5LT5rZXlpZHg7Ci0JcmV0 dXJuIEhJRl9LRVlfVFlQRV9JR1RLX0dST1VQOwotfQotCi1zdGF0aWMgaW50IHdmeF9hZGRfa2V5 KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAotCQkgICAg ICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQotewotCWludCByZXQ7Ci0Jc3RydWN0 IGhpZl9yZXFfYWRkX2tleSBrID0geyB9OwotCXN0cnVjdCBpZWVlODAyMTFfa2V5X3NlcSBzZXE7 Ci0Jc3RydWN0IHdmeF9kZXYgKndkZXYgPSB3dmlmLT53ZGV2OwotCWludCBpZHggPSB3ZnhfYWxs b2Nfa2V5KHd2aWYtPndkZXYpOwotCWJvb2wgcGFpcndpc2UgPSBrZXktPmZsYWdzICYgSUVFRTgw MjExX0tFWV9GTEFHX1BBSVJXSVNFOwotCi0JV0FSTihrZXktPmZsYWdzICYgSUVFRTgwMjExX0tF WV9GTEFHX1BBSVJXSVNFICYmICFzdGEsICJpbmNvbnNpc3RlbnQgZGF0YSIpOwotCWllZWU4MDIx MV9nZXRfa2V5X3J4X3NlcShrZXksIDAsICZzZXEpOwotCWlmIChpZHggPCAwKQotCQlyZXR1cm4g LUVJTlZBTDsKLQlrLmludF9pZCA9IHd2aWYtPmlkOwotCWsuZW50cnlfaW5kZXggPSBpZHg7Ci0J aWYgKGtleS0+Y2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwIHx8Ci0JICAgIGtleS0+ Y2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNCkgewotCQlpZiAocGFpcndpc2UpCi0J CQlrLnR5cGUgPSBmaWxsX3dlcF9wYWlyKCZrLmtleS53ZXBfcGFpcndpc2Vfa2V5LCBrZXksCi0J CQkJCSAgICAgICBzdGEtPmFkZHIpOwotCQllbHNlCi0JCQlrLnR5cGUgPSBmaWxsX3dlcF9ncm91 cCgmay5rZXkud2VwX2dyb3VwX2tleSwga2V5KTsKLQl9IGVsc2UgaWYgKGtleS0+Y2lwaGVyID09 IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVApIHsKLQkJaWYgKHBhaXJ3aXNlKQotCQkJay50eXBlID0g ZmlsbF90a2lwX3BhaXIoJmsua2V5LnRraXBfcGFpcndpc2Vfa2V5LCBrZXksCi0JCQkJCQlzdGEt PmFkZHIpOwotCQllbHNlCi0JCQlrLnR5cGUgPSBmaWxsX3RraXBfZ3JvdXAoJmsua2V5LnRraXBf Z3JvdXBfa2V5LCBrZXksCi0JCQkJCQkgJnNlcSwgd3ZpZi0+dmlmLT50eXBlKTsKLQl9IGVsc2Ug aWYgKGtleS0+Y2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVApIHsKLQkJaWYgKHBhaXJ3 aXNlKQotCQkJay50eXBlID0gZmlsbF9jY21wX3BhaXIoJmsua2V5LmFlc19wYWlyd2lzZV9rZXks IGtleSwKLQkJCQkJCXN0YS0+YWRkcik7Ci0JCWVsc2UKLQkJCWsudHlwZSA9IGZpbGxfY2NtcF9n cm91cCgmay5rZXkuYWVzX2dyb3VwX2tleSwga2V5LAotCQkJCQkJICZzZXEpOwotCX0gZWxzZSBp ZiAoa2V5LT5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfU01TNCkgewotCQlpZiAocGFpcndp c2UpCi0JCQlrLnR5cGUgPSBmaWxsX3NtczRfcGFpcigmay5rZXkud2FwaV9wYWlyd2lzZV9rZXks IGtleSwKLQkJCQkJCXN0YS0+YWRkcik7Ci0JCWVsc2UKLQkJCWsudHlwZSA9IGZpbGxfc21zNF9n cm91cCgmay5rZXkud2FwaV9ncm91cF9rZXksIGtleSk7Ci0JfSBlbHNlIGlmIChrZXktPmNpcGhl ciA9PSBXTEFOX0NJUEhFUl9TVUlURV9BRVNfQ01BQykgewotCQlrLnR5cGUgPSBmaWxsX2Flc19j bWFjX2dyb3VwKCZrLmtleS5pZ3RrX2dyb3VwX2tleSwga2V5LCAmc2VxKTsKLQkJa2V5LT5mbGFn cyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfTU1JRTsKLQl9IGVsc2UgewotCQlkZXZf d2Fybih3ZGV2LT5kZXYsICJ1bnN1cHBvcnRlZCBrZXkgdHlwZSAlZFxuIiwga2V5LT5jaXBoZXIp OwotCQl3ZnhfZnJlZV9rZXkod2RldiwgaWR4KTsKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0K LQlyZXQgPSBoaWZfYWRkX2tleSh3ZGV2LCAmayk7Ci0JaWYgKHJldCkgewotCQl3ZnhfZnJlZV9r ZXkod2RldiwgaWR4KTsKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQlrZXktPmZsYWdzIHw9 IElFRUU4MDIxMV9LRVlfRkxBR19QVVRfSVZfU1BBQ0UgfAotCQkgICAgICBJRUVFODAyMTFfS0VZ X0ZMQUdfUkVTRVJWRV9UQUlMUk9PTTsKLQlrZXktPmh3X2tleV9pZHggPSBpZHg7Ci0JcmV0dXJu IDA7Ci19Ci0KLXN0YXRpYyBpbnQgd2Z4X3JlbW92ZV9rZXkoc3RydWN0IHdmeF92aWYgKnd2aWYs IHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKLXsKLQlXQVJOKGtleS0+aHdfa2V5X2lk eCA+PSBNQVhfS0VZX0VOVFJJRVMsICJjb3JydXB0ZWQgaHdfa2V5X2lkeCIpOwotCXdmeF9mcmVl X2tleSh3dmlmLT53ZGV2LCBrZXktPmh3X2tleV9pZHgpOwotCXJldHVybiBoaWZfcmVtb3ZlX2tl eSh3dmlmLT53ZGV2LCBrZXktPmh3X2tleV9pZHgpOwotfQotCi1pbnQgd2Z4X3NldF9rZXkoc3Ry dWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gc2V0X2tleV9jbWQgY21kLAotCQlzdHJ1Y3QgaWVl ZTgwMjExX3ZpZiAqdmlmLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAotCQlzdHJ1Y3QgaWVl ZTgwMjExX2tleV9jb25mICprZXkpCi17Ci0JaW50IHJldCA9IC1FT1BOT1RTVVBQOwotCXN0cnVj dCB3ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKLQotCW11 dGV4X2xvY2soJnd2aWYtPndkZXYtPmNvbmZfbXV0ZXgpOwotCWlmIChjbWQgPT0gU0VUX0tFWSkK LQkJcmV0ID0gd2Z4X2FkZF9rZXkod3ZpZiwgc3RhLCBrZXkpOwotCWlmIChjbWQgPT0gRElTQUJM RV9LRVkpCi0JCXJldCA9IHdmeF9yZW1vdmVfa2V5KHd2aWYsIGtleSk7Ci0JbXV0ZXhfdW5sb2Nr KCZ3dmlmLT53ZGV2LT5jb25mX211dGV4KTsKLQlyZXR1cm4gcmV0OwotfQotCmRpZmYgLS1naXQg YS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2tleS5oIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9rZXkuaApk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBhNDRkMGNhMzVlLi4wMDAwMDAwMDAwMDAK LS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC9rZXkuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwICsw LDAgQEAKLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KLS8qCi0g KiBJbXBsZW1lbnRhdGlvbiBvZiBtYWM4MDIxMSBBUEkuCi0gKgotICogQ29weXJpZ2h0IChjKSAy MDE3LTIwMjAsIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMpIDIw MTAsIFNULUVyaWNzc29uCi0gKi8KLSNpZm5kZWYgV0ZYX0tFWV9ICi0jZGVmaW5lIFdGWF9LRVlf SAotCi0jaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+Ci0KLXN0cnVjdCB3ZnhfZGV2Owotc3RydWN0 IHdmeF92aWY7Ci0KLWludCB3Znhfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51 bSBzZXRfa2V5X2NtZCBjbWQsCi0JCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHN0cnVjdCBp ZWVlODAyMTFfc3RhICpzdGEsCi0JCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSk7Ci0K LSNlbmRpZiAvKiBXRlhfU1RBX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93Zngv bWFpbi5jIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9tYWluLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IGU3YmMxOTg4MTI0YS4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2lu Zy93ZngvbWFpbi5jCisrKyAvZGV2L251bGwKQEAgLTEsNDkwICswLDAgQEAKLS8vIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLS8qCi0gKiBEZXZpY2UgcHJvYmUgYW5kIHJl Z2lzdGVyLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwLCBTaWxpY29uIExhYm9yYXRv cmllcywgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmljc3NvbgotICogQ29weXJp Z2h0IChjKSAyMDA4LCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0Pgot ICogQ29weXJpZ2h0IChjKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk aWFyeSgtaWVzKS4KLSAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5LCBDaHJpc3RpYW4gTGFtcGFy dGVyIDxjaHVua2VleUB3ZWIuZGU+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIE1pY2hhZWwgV3Ug PGZsYW1pbmdpY2VAc291cm1pbGsubmV0PgotICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDYgSmVh bi1CYXB0aXN0ZSBOb3RlIDxqYm5vdGVAZ21haWwuY29tPiwgZXQgYWwuCi0gKi8KLSNpbmNsdWRl IDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9vZi5oPgotI2luY2x1ZGUgPGxpbnV4 L29mX25ldC5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KLSNpbmNsdWRlIDxs aW51eC9tbWMvc2Rpb19mdW5jLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotI2luY2x1 ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KLQot I2luY2x1ZGUgIm1haW4uaCIKLSNpbmNsdWRlICJ3ZnguaCIKLSNpbmNsdWRlICJmd2lvLmgiCi0j aW5jbHVkZSAiaHdpby5oIgotI2luY2x1ZGUgImJ1cy5oIgotI2luY2x1ZGUgImJoLmgiCi0jaW5j bHVkZSAic3RhLmgiCi0jaW5jbHVkZSAia2V5LmgiCi0jaW5jbHVkZSAic2Nhbi5oIgotI2luY2x1 ZGUgImRlYnVnLmgiCi0jaW5jbHVkZSAiZGF0YV90eC5oIgotI2luY2x1ZGUgImhpZl90eF9taWIu aCIKLSNpbmNsdWRlICJoaWZfYXBpX2NtZC5oIgotCi0jZGVmaW5lIFdGWF9QRFNfTUFYX1NJWkUg MTUwMAotCi1NT0RVTEVfREVTQ1JJUFRJT04oIlNpbGljb24gTGFicyA4MDIuMTEgV2lyZWxlc3Mg TEFOIGRyaXZlciBmb3IgV0Z4Iik7Ci1NT0RVTEVfQVVUSE9SKCJKw6lyw7RtZSBQb3VpbGxlciA8 amVyb21lLnBvdWlsbGVyQHNpbGFicy5jb20+Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0K LSNkZWZpbmUgUkFURVRBQl9FTlQoX3JhdGUsIF9yYXRlaWQsIF9mbGFncykgeyBcCi0JLmJpdHJh dGUgID0gKF9yYXRlKSwgICBcCi0JLmh3X3ZhbHVlID0gKF9yYXRlaWQpLCBcCi0JLmZsYWdzICAg ID0gKF9mbGFncyksICBcCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgd2Z4X3Jh dGVzW10gPSB7Ci0JUkFURVRBQl9FTlQoMTAsICAwLCAgMCksCi0JUkFURVRBQl9FTlQoMjAsICAx LCAgSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUpLAotCVJBVEVUQUJfRU5UKDU1LCAgMiwg IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFKSwKLQlSQVRFVEFCX0VOVCgxMTAsIDMsICBJ RUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSksCi0JUkFURVRBQl9FTlQoNjAsICA2LCAgMCks Ci0JUkFURVRBQl9FTlQoOTAsICA3LCAgMCksCi0JUkFURVRBQl9FTlQoMTIwLCA4LCAgMCksCi0J UkFURVRBQl9FTlQoMTgwLCA5LCAgMCksCi0JUkFURVRBQl9FTlQoMjQwLCAxMCwgMCksCi0JUkFU RVRBQl9FTlQoMzYwLCAxMSwgMCksCi0JUkFURVRBQl9FTlQoNDgwLCAxMiwgMCksCi0JUkFURVRB Ql9FTlQoNTQwLCAxMywgMCksCi19OwotCi0jZGVmaW5lIENIQU4yRyhfY2hhbm5lbCwgX2ZyZXEs IF9mbGFncykgeyBcCi0JLmJhbmQgPSBOTDgwMjExX0JBTkRfMkdIWiwgXAotCS5jZW50ZXJfZnJl cSA9IChfZnJlcSksICAgIFwKLQkuaHdfdmFsdWUgPSAoX2NoYW5uZWwpLCAgICBcCi0JLmZsYWdz ID0gKF9mbGFncyksICAgICAgICAgXAotCS5tYXhfYW50ZW5uYV9nYWluID0gMCwgICAgIFwKLQku bWF4X3Bvd2VyID0gMzAsICAgICAgICAgICBcCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjEx X2NoYW5uZWwgd2Z4XzJnaHpfY2hhbnRhYmxlW10gPSB7Ci0JQ0hBTjJHKDEsICAyNDEyLCAwKSwK LQlDSEFOMkcoMiwgIDI0MTcsIDApLAotCUNIQU4yRygzLCAgMjQyMiwgMCksCi0JQ0hBTjJHKDQs ICAyNDI3LCAwKSwKLQlDSEFOMkcoNSwgIDI0MzIsIDApLAotCUNIQU4yRyg2LCAgMjQzNywgMCks Ci0JQ0hBTjJHKDcsICAyNDQyLCAwKSwKLQlDSEFOMkcoOCwgIDI0NDcsIDApLAotCUNIQU4yRyg5 LCAgMjQ1MiwgMCksCi0JQ0hBTjJHKDEwLCAyNDU3LCAwKSwKLQlDSEFOMkcoMTEsIDI0NjIsIDAp LAotCUNIQU4yRygxMiwgMjQ2NywgMCksCi0JQ0hBTjJHKDEzLCAyNDcyLCAwKSwKLQlDSEFOMkco MTQsIDI0ODQsIDApLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfc3VwcG9y dGVkX2JhbmQgd2Z4X2JhbmRfMmdoeiA9IHsKLQkuY2hhbm5lbHMgPSB3ZnhfMmdoel9jaGFudGFi bGUsCi0JLm5fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHdmeF8yZ2h6X2NoYW50YWJsZSksCi0JLmJp dHJhdGVzID0gd2Z4X3JhdGVzLAotCS5uX2JpdHJhdGVzID0gQVJSQVlfU0laRSh3ZnhfcmF0ZXMp LAotCS5odF9jYXAgPSB7Ci0JCS8vIFJlY2VpdmUgY2FwcwotCQkuY2FwID0gSUVFRTgwMjExX0hU X0NBUF9HUk5fRkxEIHwgSUVFRTgwMjExX0hUX0NBUF9TR0lfMjAgfAotCQkgICAgICAgSUVFRTgw MjExX0hUX0NBUF9NQVhfQU1TRFUgfAotCQkgICAgICAgKDEgPDwgSUVFRTgwMjExX0hUX0NBUF9S WF9TVEJDX1NISUZUKSwKLQkJLmh0X3N1cHBvcnRlZCA9IDEsCi0JCS5hbXBkdV9mYWN0b3IgPSBJ RUVFODAyMTFfSFRfTUFYX0FNUERVXzE2SywKLQkJLmFtcGR1X2RlbnNpdHkgPSBJRUVFODAyMTFf SFRfTVBEVV9ERU5TSVRZX05PTkUsCi0JCS5tY3MgPSB7Ci0JCQkucnhfbWFzayA9IHsgMHhGRiB9 LCAvLyBNQ1MwIHRvIE1DUzcKLQkJCS5yeF9oaWdoZXN0ID0gY3B1X3RvX2xlMTYoNzIpLAotCQkJ LnR4X3BhcmFtcyA9IElFRUU4MDIxMV9IVF9NQ1NfVFhfREVGSU5FRCwKLQkJfSwKLQl9LAotfTsK LQotc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaWZhY2VfbGltaXQgd2Rldl9pZmFjZV9s aW1pdHNbXSA9IHsKLQl7IC5tYXggPSAxLCAudHlwZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RB VElPTikgfSwKLQl7IC5tYXggPSAxLCAudHlwZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfQVApIH0s Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9pZmFjZV9jb21iaW5hdGlvbiB3 ZnhfaWZhY2VfY29tYmluYXRpb25zW10gPSB7Ci0JewotCQkubnVtX2RpZmZlcmVudF9jaGFubmVs cyA9IDIsCi0JCS5tYXhfaW50ZXJmYWNlcyA9IDIsCi0JCS5saW1pdHMgPSB3ZGV2X2lmYWNlX2xp bWl0cywKLQkJLm5fbGltaXRzID0gQVJSQVlfU0laRSh3ZGV2X2lmYWNlX2xpbWl0cyksCi0JfQot fTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIHdmeF9vcHMgPSB7Ci0JLnN0 YXJ0CQkJPSB3Znhfc3RhcnQsCi0JLnN0b3AJCQk9IHdmeF9zdG9wLAotCS5hZGRfaW50ZXJmYWNl CQk9IHdmeF9hZGRfaW50ZXJmYWNlLAotCS5yZW1vdmVfaW50ZXJmYWNlCT0gd2Z4X3JlbW92ZV9p bnRlcmZhY2UsCi0JLmNvbmZpZyAgICAgICAgICAgICAgICAgPSB3ZnhfY29uZmlnLAotCS50eAkJ CT0gd2Z4X3R4LAotCS5qb2luX2lic3MJCT0gd2Z4X2pvaW5faWJzcywKLQkubGVhdmVfaWJzcwkJ PSB3ZnhfbGVhdmVfaWJzcywKLQkuY29uZl90eAkJPSB3ZnhfY29uZl90eCwKLQkuaHdfc2NhbgkJ PSB3ZnhfaHdfc2NhbiwKLQkuY2FuY2VsX2h3X3NjYW4JCT0gd2Z4X2NhbmNlbF9od19zY2FuLAot CS5zdGFydF9hcAkJPSB3Znhfc3RhcnRfYXAsCi0JLnN0b3BfYXAJCT0gd2Z4X3N0b3BfYXAsCi0J LnN0YV9hZGQJCT0gd2Z4X3N0YV9hZGQsCi0JLnN0YV9yZW1vdmUJCT0gd2Z4X3N0YV9yZW1vdmUs Ci0JLnNldF90aW0JCT0gd2Z4X3NldF90aW0sCi0JLnNldF9rZXkJCT0gd2Z4X3NldF9rZXksCi0J LnNldF9ydHNfdGhyZXNob2xkCT0gd2Z4X3NldF9ydHNfdGhyZXNob2xkLAotCS5zZXRfZGVmYXVs dF91bmljYXN0X2tleSA9IHdmeF9zZXRfZGVmYXVsdF91bmljYXN0X2tleSwKLQkuYnNzX2luZm9f Y2hhbmdlZAk9IHdmeF9ic3NfaW5mb19jaGFuZ2VkLAotCS5jb25maWd1cmVfZmlsdGVyCT0gd2Z4 X2NvbmZpZ3VyZV9maWx0ZXIsCi0JLmFtcGR1X2FjdGlvbgkJPSB3ZnhfYW1wZHVfYWN0aW9uLAot CS5mbHVzaAkJCT0gd2Z4X2ZsdXNoLAotCS5hZGRfY2hhbmN0eAkJPSB3ZnhfYWRkX2NoYW5jdHgs Ci0JLnJlbW92ZV9jaGFuY3R4CQk9IHdmeF9yZW1vdmVfY2hhbmN0eCwKLQkuY2hhbmdlX2NoYW5j dHgJCT0gd2Z4X2NoYW5nZV9jaGFuY3R4LAotCS5hc3NpZ25fdmlmX2NoYW5jdHgJPSB3ZnhfYXNz aWduX3ZpZl9jaGFuY3R4LAotCS51bmFzc2lnbl92aWZfY2hhbmN0eAk9IHdmeF91bmFzc2lnbl92 aWZfY2hhbmN0eCwKLX07Ci0KLWJvb2wgd2Z4X2FwaV9vbGRlcl90aGFuKHN0cnVjdCB3ZnhfZGV2 ICp3ZGV2LCBpbnQgbWFqb3IsIGludCBtaW5vcikKLXsKLQlpZiAod2Rldi0+aHdfY2Fwcy5hcGlf dmVyc2lvbl9tYWpvciA8IG1ham9yKQotCQlyZXR1cm4gdHJ1ZTsKLQlpZiAod2Rldi0+aHdfY2Fw cy5hcGlfdmVyc2lvbl9tYWpvciA+IG1ham9yKQotCQlyZXR1cm4gZmFsc2U7Ci0JaWYgKHdkZXYt Pmh3X2NhcHMuYXBpX3ZlcnNpb25fbWlub3IgPCBtaW5vcikKLQkJcmV0dXJuIHRydWU7Ci0JcmV0 dXJuIGZhbHNlOwotfQotCi0vKiBOT1RFOiB3Znhfc2VuZF9wZHMoKSBkZXN0cm95IGJ1ZiAqLwot aW50IHdmeF9zZW5kX3BkcyhzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTggKmJ1Ziwgc2l6ZV90IGxl bikKLXsKLQlpbnQgcmV0OwotCWludCBzdGFydCwgYnJhY2VfbGV2ZWwsIGk7Ci0KLQlzdGFydCA9 IDA7Ci0JYnJhY2VfbGV2ZWwgPSAwOwotCWlmIChidWZbMF0gIT0gJ3snKSB7Ci0JCWRldl9lcnIo d2Rldi0+ZGV2LCAidmFsaWQgUERTIHN0YXJ0IHdpdGggJ3snLiBEaWQgeW91IGZvcmdldCB0byBj b21wcmVzcyBpdD9cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JZm9yIChpID0gMTsgaSA8 IGxlbiAtIDE7IGkrKykgewotCQlpZiAoYnVmW2ldID09ICd7JykKLQkJCWJyYWNlX2xldmVsKys7 Ci0JCWlmIChidWZbaV0gPT0gJ30nKQotCQkJYnJhY2VfbGV2ZWwtLTsKLQkJaWYgKGJ1ZltpXSA9 PSAnfScgJiYgIWJyYWNlX2xldmVsKSB7Ci0JCQlpKys7Ci0JCQlpZiAoaSAtIHN0YXJ0ICsgMSA+ IFdGWF9QRFNfTUFYX1NJWkUpCi0JCQkJcmV0dXJuIC1FRkJJRzsKLQkJCWJ1ZltzdGFydF0gPSAn eyc7Ci0JCQlidWZbaV0gPSAwOwotCQkJZGV2X2RiZyh3ZGV2LT5kZXYsICJzZW5kIFBEUyAnJXN9 J1xuIiwgYnVmICsgc3RhcnQpOwotCQkJYnVmW2ldID0gJ30nOwotCQkJcmV0ID0gaGlmX2NvbmZp Z3VyYXRpb24od2RldiwgYnVmICsgc3RhcnQsCi0JCQkJCQlpIC0gc3RhcnQgKyAxKTsKLQkJCWlm IChyZXQgPiAwKSB7Ci0JCQkJZGV2X2Vycih3ZGV2LT5kZXYsICJQRFMgYnl0ZXMgJWQgdG8gJWQ6 IGludmFsaWQgZGF0YSAodW5zdXBwb3J0ZWQgb3B0aW9ucz8pXG4iLAotCQkJCQlzdGFydCwgaSk7 Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCQlpZiAocmV0ID09IC1FVElNRURPVVQpIHsK LQkJCQlkZXZfZXJyKHdkZXYtPmRldiwgIlBEUyBieXRlcyAlZCB0byAlZDogY2hpcCBkaWRuJ3Qg cmVwbHkgKGNvcnJ1cHRlZCBmaWxlPylcbiIsCi0JCQkJCXN0YXJ0LCBpKTsKLQkJCQlyZXR1cm4g cmV0OwotCQkJfQotCQkJaWYgKHJldCkgewotCQkJCWRldl9lcnIod2Rldi0+ZGV2LCAiUERTIGJ5 dGVzICVkIHRvICVkOiBjaGlwIHJldHVybmVkIGFuIHVua25vd24gZXJyb3JcbiIsCi0JCQkJCXN0 YXJ0LCBpKTsKLQkJCQlyZXR1cm4gLUVJTzsKLQkJCX0KLQkJCWJ1ZltpXSA9ICcsJzsKLQkJCXN0 YXJ0ID0gaTsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3Znhfc2VuZF9w ZGF0YV9wZHMoc3RydWN0IHdmeF9kZXYgKndkZXYpCi17Ci0JaW50IHJldCA9IDA7Ci0JY29uc3Qg c3RydWN0IGZpcm13YXJlICpwZHM7Ci0JdTggKnRtcF9idWY7Ci0KLQlyZXQgPSByZXF1ZXN0X2Zp cm13YXJlKCZwZHMsIHdkZXYtPnBkYXRhLmZpbGVfcGRzLCB3ZGV2LT5kZXYpOwotCWlmIChyZXQp IHsKLQkJZGV2X2Vycih3ZGV2LT5kZXYsICJjYW4ndCBsb2FkIFBEUyBmaWxlICVzXG4iLAotCQkJ d2Rldi0+cGRhdGEuZmlsZV9wZHMpOwotCQlnb3RvIGVycjE7Ci0JfQotCXRtcF9idWYgPSBrbWVt ZHVwKHBkcy0+ZGF0YSwgcGRzLT5zaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRtcF9idWYpIHsK LQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnIyOwotCX0KLQlyZXQgPSB3Znhfc2VuZF9wZHMo d2RldiwgdG1wX2J1ZiwgcGRzLT5zaXplKTsKLQlrZnJlZSh0bXBfYnVmKTsKLWVycjI6Ci0JcmVs ZWFzZV9maXJtd2FyZShwZHMpOwotZXJyMToKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9p ZCB3ZnhfZnJlZV9jb21tb24odm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9 IGRhdGE7Ci0KLQltdXRleF9kZXN0cm95KCZ3ZGV2LT50eF9wb3dlcl9sb29wX2luZm9fbG9jayk7 Ci0JbXV0ZXhfZGVzdHJveSgmd2Rldi0+cnhfc3RhdHNfbG9jayk7Ci0JbXV0ZXhfZGVzdHJveSgm d2Rldi0+Y29uZl9tdXRleCk7Ci0JaWVlZTgwMjExX2ZyZWVfaHcod2Rldi0+aHcpOwotfQotCi1z dHJ1Y3Qgd2Z4X2RldiAqd2Z4X2luaXRfY29tbW9uKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQlj b25zdCBzdHJ1Y3Qgd2Z4X3BsYXRmb3JtX2RhdGEgKnBkYXRhLAotCQkJCWNvbnN0IHN0cnVjdCBo d2J1c19vcHMgKmh3YnVzX29wcywKLQkJCQl2b2lkICpod2J1c19wcml2KQotewotCXN0cnVjdCBp ZWVlODAyMTFfaHcgKmh3OwotCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2OwotCi0JaHcgPSBpZWVlODAy MTFfYWxsb2NfaHcoc2l6ZW9mKHN0cnVjdCB3ZnhfZGV2KSwgJndmeF9vcHMpOwotCWlmICghaHcp Ci0JCXJldHVybiBOVUxMOwotCi0JU0VUX0lFRUU4MDIxMV9ERVYoaHcsIGRldik7Ci0KLQlpZWVl ODAyMTFfaHdfc2V0KGh3LCBUWF9BTVBEVV9TRVRVUF9JTl9IVyk7Ci0JaWVlZTgwMjExX2h3X3Nl dChodywgQU1QRFVfQUdHUkVHQVRJT04pOwotCWllZWU4MDIxMV9od19zZXQoaHcsIENPTk5FQ1RJ T05fTU9OSVRPUik7Ci0JaWVlZTgwMjExX2h3X3NldChodywgUkVQT1JUU19UWF9BQ0tfU1RBVFVT KTsKLQlpZWVlODAyMTFfaHdfc2V0KGh3LCBTVVBQT1JUU19EWU5BTUlDX1BTKTsKLQlpZWVlODAy MTFfaHdfc2V0KGh3LCBTSUdOQUxfREJNKTsKLQlpZWVlODAyMTFfaHdfc2V0KGh3LCBTVVBQT1JU U19QUyk7Ci0JaWVlZTgwMjExX2h3X3NldChodywgTUZQX0NBUEFCTEUpOwotCi0JaHctPnZpZl9k YXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IHdmeF92aWYpOwotCWh3LT5zdGFfZGF0YV9zaXplID0g c2l6ZW9mKHN0cnVjdCB3Znhfc3RhX3ByaXYpOwotCWh3LT5xdWV1ZXMgPSA0OwotCWh3LT5tYXhf cmF0ZXMgPSA4OwotCWh3LT5tYXhfcmF0ZV90cmllcyA9IDg7Ci0JaHctPmV4dHJhX3R4X2hlYWRy b29tID0gc2l6ZW9mKHN0cnVjdCBoaWZfbXNnKQotCQkJCSsgc2l6ZW9mKHN0cnVjdCBoaWZfcmVx X3R4KQotCQkJCSsgNCAvKiBhbGlnbm1lbnQgKi8gKyA4IC8qIFRLSVAgSVYgKi87Ci0JaHctPndp cGh5LT5pbnRlcmZhY2VfbW9kZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfAotCQkJ CSAgICAgQklUKE5MODAyMTFfSUZUWVBFX0FESE9DKSB8Ci0JCQkJICAgICBCSVQoTkw4MDIxMV9J RlRZUEVfQVApOwotCWh3LT53aXBoeS0+cHJvYmVfcmVzcF9vZmZsb2FkID0gTkw4MDIxMV9QUk9C RV9SRVNQX09GRkxPQURfU1VQUE9SVF9XUFMgfAotCQkJCQlOTDgwMjExX1BST0JFX1JFU1BfT0ZG TE9BRF9TVVBQT1JUX1dQUzIgfAotCQkJCQlOTDgwMjExX1BST0JFX1JFU1BfT0ZGTE9BRF9TVVBQ T1JUX1AyUCB8Ci0JCQkJCU5MODAyMTFfUFJPQkVfUkVTUF9PRkZMT0FEX1NVUFBPUlRfODAyMTFV OwotCWh3LT53aXBoeS0+ZmVhdHVyZXMgfD0gTkw4MDIxMV9GRUFUVVJFX0FQX1NDQU47Ci0JaHct PndpcGh5LT5mbGFncyB8PSBXSVBIWV9GTEFHX0FQX1BST0JFX1JFU1BfT0ZGTE9BRDsKLQlody0+ d2lwaHktPmZsYWdzIHw9IFdJUEhZX0ZMQUdfQVBfVUFQU0Q7Ci0JaHctPndpcGh5LT5tYXhfYXBf YXNzb2Nfc3RhID0gSElGX0xJTktfSURfTUFYOwotCWh3LT53aXBoeS0+bWF4X3NjYW5fc3NpZHMg PSAyOwotCWh3LT53aXBoeS0+bWF4X3NjYW5faWVfbGVuID0gSUVFRTgwMjExX01BWF9EQVRBX0xF TjsKLQlody0+d2lwaHktPm5faWZhY2VfY29tYmluYXRpb25zID0gQVJSQVlfU0laRSh3ZnhfaWZh Y2VfY29tYmluYXRpb25zKTsKLQlody0+d2lwaHktPmlmYWNlX2NvbWJpbmF0aW9ucyA9IHdmeF9p ZmFjZV9jb21iaW5hdGlvbnM7Ci0JaHctPndpcGh5LT5iYW5kc1tOTDgwMjExX0JBTkRfMkdIWl0g PSBkZXZtX2ttYWxsb2MoZGV2LCBzaXplb2Yod2Z4X2JhbmRfMmdoeiksIEdGUF9LRVJORUwpOwot CS8vIEZJWE1FOiBhbHNvIGNvcHkgd2Z4X3JhdGVzIGFuZCB3ZnhfMmdoel9jaGFudGFibGUKLQlt ZW1jcHkoaHctPndpcGh5LT5iYW5kc1tOTDgwMjExX0JBTkRfMkdIWl0sICZ3ZnhfYmFuZF8yZ2h6 LAotCSAgICAgICBzaXplb2Yod2Z4X2JhbmRfMmdoeikpOwotCi0Jd2RldiA9IGh3LT5wcml2Owot CXdkZXYtPmh3ID0gaHc7Ci0Jd2Rldi0+ZGV2ID0gZGV2OwotCXdkZXYtPmh3YnVzX29wcyA9IGh3 YnVzX29wczsKLQl3ZGV2LT5od2J1c19wcml2ID0gaHdidXNfcHJpdjsKLQltZW1jcHkoJndkZXYt PnBkYXRhLCBwZGF0YSwgc2l6ZW9mKCpwZGF0YSkpOwotCW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5n KGRldi0+b2Zfbm9kZSwgImNvbmZpZy1maWxlIiwKLQkJCQkmd2Rldi0+cGRhdGEuZmlsZV9wZHMp OwotCXdkZXYtPnBkYXRhLmdwaW9fd2FrZXVwID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoZGV2 LCAid2FrZXVwIiwKLQkJCQkJCQkgIEdQSU9EX09VVF9MT1cpOwotCWlmIChJU19FUlIod2Rldi0+ cGRhdGEuZ3Bpb193YWtldXApKQotCQlyZXR1cm4gTlVMTDsKLQlpZiAod2Rldi0+cGRhdGEuZ3Bp b193YWtldXApCi0JCWdwaW9kX3NldF9jb25zdW1lcl9uYW1lKHdkZXYtPnBkYXRhLmdwaW9fd2Fr ZXVwLCAid2Z4IHdha2V1cCIpOwotCi0JbXV0ZXhfaW5pdCgmd2Rldi0+Y29uZl9tdXRleCk7Ci0J bXV0ZXhfaW5pdCgmd2Rldi0+cnhfc3RhdHNfbG9jayk7Ci0JbXV0ZXhfaW5pdCgmd2Rldi0+dHhf cG93ZXJfbG9vcF9pbmZvX2xvY2spOwotCWluaXRfY29tcGxldGlvbigmd2Rldi0+ZmlybXdhcmVf cmVhZHkpOwotCUlOSVRfREVMQVlFRF9XT1JLKCZ3ZGV2LT5jb29saW5nX3RpbWVvdXRfd29yaywK LQkJCSAgd2Z4X2Nvb2xpbmdfdGltZW91dF93b3JrKTsKLQlza2JfcXVldWVfaGVhZF9pbml0KCZ3 ZGV2LT50eF9wZW5kaW5nKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ3ZGV2LT50eF9kZXF1ZXVl KTsKLQl3ZnhfaW5pdF9oaWZfY21kKCZ3ZGV2LT5oaWZfY21kKTsKLQl3ZGV2LT5mb3JjZV9wc190 aW1lb3V0ID0gLTE7Ci0KLQlpZiAoZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgd2Z4X2Zy ZWVfY29tbW9uLCB3ZGV2KSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4gd2RldjsKLX0KLQot aW50IHdmeF9wcm9iZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldikKLXsKLQlpbnQgaTsKLQlpbnQgZXJy OwotCWNvbnN0IHZvaWQgKm1hY2FkZHI7Ci0Jc3RydWN0IGdwaW9fZGVzYyAqZ3Bpb19zYXZlZDsK LQotCS8vIER1cmluZyBmaXJzdCBwYXJ0IG9mIGJvb3QsIGdwaW9fd2FrZXVwIGNhbm5vdCB5ZXQg YmVlbiB1c2VkLiBTbwotCS8vIHByZXZlbnQgYmgoKSB0byB0b3VjaCBpdC4KLQlncGlvX3NhdmVk ID0gd2Rldi0+cGRhdGEuZ3Bpb193YWtldXA7Ci0Jd2Rldi0+cGRhdGEuZ3Bpb193YWtldXAgPSBO VUxMOwotCXdkZXYtPnBvbGxfaXJxID0gdHJ1ZTsKLQotCXdmeF9iaF9yZWdpc3Rlcih3ZGV2KTsK LQotCWVyciA9IHdmeF9pbml0X2RldmljZSh3ZGV2KTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjA7 Ci0KLQl3ZnhfYmhfcG9sbF9pcnEod2Rldik7Ci0JZXJyID0gd2FpdF9mb3JfY29tcGxldGlvbl90 aW1lb3V0KCZ3ZGV2LT5maXJtd2FyZV9yZWFkeSwgMSAqIEhaKTsKLQlpZiAoZXJyIDw9IDApIHsK LQkJaWYgKGVyciA9PSAwKSB7Ci0JCQlkZXZfZXJyKHdkZXYtPmRldiwgInRpbWVvdXQgd2hpbGUg d2FpdGluZyBmb3Igc3RhcnR1cCBpbmRpY2F0aW9uXG4iKTsKLQkJCWVyciA9IC1FVElNRURPVVQ7 Ci0JCX0gZWxzZSBpZiAoZXJyID09IC1FUkVTVEFSVFNZUykgewotCQkJZGV2X2luZm8od2Rldi0+ ZGV2LCAicHJvYmUgaW50ZXJydXB0ZWQgYnkgdXNlclxuIik7Ci0JCX0KLQkJZ290byBlcnIwOwot CX0KLQotCS8vIEZJWE1FOiBmaWxsIHdpcGh5Ojpod192ZXJzaW9uCi0JZGV2X2luZm8od2Rldi0+ ZGV2LCAic3RhcnRlZCBmaXJtd2FyZSAlZC4lZC4lZCBcIiVzXCIgKEFQSTogJWQuJWQsIGtleXNl dDogJTAyWCwgY2FwczogMHglLjhYKVxuIiwKLQkJIHdkZXYtPmh3X2NhcHMuZmlybXdhcmVfbWFq b3IsIHdkZXYtPmh3X2NhcHMuZmlybXdhcmVfbWlub3IsCi0JCSB3ZGV2LT5od19jYXBzLmZpcm13 YXJlX2J1aWxkLCB3ZGV2LT5od19jYXBzLmZpcm13YXJlX2xhYmVsLAotCQkgd2Rldi0+aHdfY2Fw cy5hcGlfdmVyc2lvbl9tYWpvciwgd2Rldi0+aHdfY2Fwcy5hcGlfdmVyc2lvbl9taW5vciwKLQkJ IHdkZXYtPmtleXNldCwgd2Rldi0+aHdfY2Fwcy5saW5rX21vZGUpOwotCXNucHJpbnRmKHdkZXYt Pmh3LT53aXBoeS0+ZndfdmVyc2lvbiwKLQkJIHNpemVvZih3ZGV2LT5ody0+d2lwaHktPmZ3X3Zl cnNpb24pLAotCQkgIiVkLiVkLiVkIiwKLQkJIHdkZXYtPmh3X2NhcHMuZmlybXdhcmVfbWFqb3Is Ci0JCSB3ZGV2LT5od19jYXBzLmZpcm13YXJlX21pbm9yLAotCQkgd2Rldi0+aHdfY2Fwcy5maXJt d2FyZV9idWlsZCk7Ci0KLQlpZiAod2Z4X2FwaV9vbGRlcl90aGFuKHdkZXYsIDEsIDApKSB7Ci0J CWRldl9lcnIod2Rldi0+ZGV2LAotCQkJInVuc3VwcG9ydGVkIGZpcm13YXJlIEFQSSB2ZXJzaW9u IChleHBlY3QgMSB3aGlsZSBmaXJtd2FyZSByZXR1cm5zICVkKVxuIiwKLQkJCXdkZXYtPmh3X2Nh cHMuYXBpX3ZlcnNpb25fbWFqb3IpOwotCQllcnIgPSAtRU5PVFNVUFA7Ci0JCWdvdG8gZXJyMDsK LQl9Ci0KLQlpZiAod2Rldi0+aHdfY2Fwcy5saW5rX21vZGUgPT0gU0VDX0xJTktfRU5GT1JDRUQp IHsKLQkJZGV2X2Vycih3ZGV2LT5kZXYsCi0JCQkiY2hpcCByZXF1aXJlIHNlY3VyZV9saW5rLCBi dXQgY2FuJ3QgbmVnb3RpYXRlIGl0XG4iKTsKLQkJZ290byBlcnIwOwotCX0KLQotCWlmICh3ZGV2 LT5od19jYXBzLnJlZ2lvbl9zZWxfbW9kZSkgewotCQl3ZGV2LT5ody0+d2lwaHktPmJhbmRzW05M ODAyMTFfQkFORF8yR0haXS0+Y2hhbm5lbHNbMTFdLmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX05P X0lSOwotCQl3ZGV2LT5ody0+d2lwaHktPmJhbmRzW05MODAyMTFfQkFORF8yR0haXS0+Y2hhbm5l bHNbMTJdLmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX05PX0lSOwotCQl3ZGV2LT5ody0+d2lwaHkt PmJhbmRzW05MODAyMTFfQkFORF8yR0haXS0+Y2hhbm5lbHNbMTNdLmZsYWdzIHw9IElFRUU4MDIx MV9DSEFOX0RJU0FCTEVEOwotCX0KLQotCWRldl9kYmcod2Rldi0+ZGV2LCAic2VuZGluZyBjb25m aWd1cmF0aW9uIGZpbGUgJXNcbiIsCi0JCXdkZXYtPnBkYXRhLmZpbGVfcGRzKTsKLQllcnIgPSB3 Znhfc2VuZF9wZGF0YV9wZHMod2Rldik7Ci0JaWYgKGVyciA8IDApCi0JCWdvdG8gZXJyMDsKLQot CXdkZXYtPnBvbGxfaXJxID0gZmFsc2U7Ci0JZXJyID0gd2Rldi0+aHdidXNfb3BzLT5pcnFfc3Vi c2NyaWJlKHdkZXYtPmh3YnVzX3ByaXYpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyMDsKLQotCWVy ciA9IGhpZl91c2VfbXVsdGlfdHhfY29uZih3ZGV2LCB0cnVlKTsKLQlpZiAoZXJyKQotCQlkZXZf ZXJyKHdkZXYtPmRldiwgIm1pc2NvbmZpZ3VyZWQgSVJRP1xuIik7Ci0KLQl3ZGV2LT5wZGF0YS5n cGlvX3dha2V1cCA9IGdwaW9fc2F2ZWQ7Ci0JaWYgKHdkZXYtPnBkYXRhLmdwaW9fd2FrZXVwKSB7 Ci0JCWRldl9kYmcod2Rldi0+ZGV2LAotCQkJImVuYWJsZSAncXVpZXNjZW50JyBwb3dlciBtb2Rl IHdpdGggd2FrZXVwIEdQSU8gYW5kIFBEUyBmaWxlICVzXG4iLAotCQkJd2Rldi0+cGRhdGEuZmls ZV9wZHMpOwotCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAod2Rldi0+cGRhdGEuZ3Bpb193YWtl dXAsIDEpOwotCQljb250cm9sX3JlZ193cml0ZSh3ZGV2LCAwKTsKLQkJaGlmX3NldF9vcGVyYXRp b25hbF9tb2RlKHdkZXYsIEhJRl9PUF9QT1dFUl9NT0RFX1FVSUVTQ0VOVCk7Ci0JfSBlbHNlIHsK LQkJaGlmX3NldF9vcGVyYXRpb25hbF9tb2RlKHdkZXYsIEhJRl9PUF9QT1dFUl9NT0RFX0RPWkUp OwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdkZXYtPmFkZHJlc3Nlcyk7IGkr KykgewotCQlldGhfemVyb19hZGRyKHdkZXYtPmFkZHJlc3Nlc1tpXS5hZGRyKTsKLQkJbWFjYWRk ciA9IG9mX2dldF9tYWNfYWRkcmVzcyh3ZGV2LT5kZXYtPm9mX25vZGUpOwotCQlpZiAoIUlTX0VS Ul9PUl9OVUxMKG1hY2FkZHIpKSB7Ci0JCQlldGhlcl9hZGRyX2NvcHkod2Rldi0+YWRkcmVzc2Vz W2ldLmFkZHIsIG1hY2FkZHIpOwotCQkJd2Rldi0+YWRkcmVzc2VzW2ldLmFkZHJbRVRIX0FMRU4g LSAxXSArPSBpOwotCQl9IGVsc2UgewotCQkJZXRoZXJfYWRkcl9jb3B5KHdkZXYtPmFkZHJlc3Nl c1tpXS5hZGRyLAotCQkJCQl3ZGV2LT5od19jYXBzLm1hY19hZGRyW2ldKTsKLQkJfQotCQlpZiAo IWlzX3ZhbGlkX2V0aGVyX2FkZHIod2Rldi0+YWRkcmVzc2VzW2ldLmFkZHIpKSB7Ci0JCQlkZXZf d2Fybih3ZGV2LT5kZXYsICJ1c2luZyByYW5kb20gTUFDIGFkZHJlc3NcbiIpOwotCQkJZXRoX3Jh bmRvbV9hZGRyKHdkZXYtPmFkZHJlc3Nlc1tpXS5hZGRyKTsKLQkJfQotCQlkZXZfaW5mbyh3ZGV2 LT5kZXYsICJNQUMgYWRkcmVzcyAlZDogJXBNXG4iLCBpLAotCQkJIHdkZXYtPmFkZHJlc3Nlc1tp XS5hZGRyKTsKLQl9Ci0Jd2Rldi0+aHctPndpcGh5LT5uX2FkZHJlc3NlcyA9IEFSUkFZX1NJWkUo d2Rldi0+YWRkcmVzc2VzKTsKLQl3ZGV2LT5ody0+d2lwaHktPmFkZHJlc3NlcyA9IHdkZXYtPmFk ZHJlc3NlczsKLQotCWVyciA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyh3ZGV2LT5odyk7Ci0JaWYg KGVycikKLQkJZ290byBlcnIxOwotCi0JZXJyID0gd2Z4X2RlYnVnX2luaXQod2Rldik7Ci0JaWYg KGVycikKLQkJZ290byBlcnIyOwotCi0JcmV0dXJuIDA7Ci0KLWVycjI6Ci0JaWVlZTgwMjExX3Vu cmVnaXN0ZXJfaHcod2Rldi0+aHcpOwotZXJyMToKLQl3ZGV2LT5od2J1c19vcHMtPmlycV91bnN1 YnNjcmliZSh3ZGV2LT5od2J1c19wcml2KTsKLWVycjA6Ci0Jd2Z4X2JoX3VucmVnaXN0ZXIod2Rl dik7Ci0JcmV0dXJuIGVycjsKLX0KLQotdm9pZCB3ZnhfcmVsZWFzZShzdHJ1Y3Qgd2Z4X2RldiAq d2RldikKLXsKLQlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyh3ZGV2LT5odyk7Ci0JaGlmX3NodXRk b3duKHdkZXYpOwotCXdkZXYtPmh3YnVzX29wcy0+aXJxX3Vuc3Vic2NyaWJlKHdkZXYtPmh3YnVz X3ByaXYpOwotCXdmeF9iaF91bnJlZ2lzdGVyKHdkZXYpOwotfQotCi1zdGF0aWMgaW50IF9faW5p dCB3ZnhfY29yZV9pbml0KHZvaWQpCi17Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoSVNfRU5BQkxF RChDT05GSUdfU1BJKSkKLQkJcmV0ID0gc3BpX3JlZ2lzdGVyX2RyaXZlcigmd2Z4X3NwaV9kcml2 ZXIpOwotCWlmIChJU19FTkFCTEVEKENPTkZJR19NTUMpICYmICFyZXQpCi0JCXJldCA9IHNkaW9f cmVnaXN0ZXJfZHJpdmVyKCZ3Znhfc2Rpb19kcml2ZXIpOwotCXJldHVybiByZXQ7Ci19Ci1tb2R1 bGVfaW5pdCh3ZnhfY29yZV9pbml0KTsKLQotc3RhdGljIHZvaWQgX19leGl0IHdmeF9jb3JlX2V4 aXQodm9pZCkKLXsKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfTU1DKSkKLQkJc2Rpb191bnJlZ2lz dGVyX2RyaXZlcigmd2Z4X3NkaW9fZHJpdmVyKTsKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfU1BJ KSkKLQkJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZ3Znhfc3BpX2RyaXZlcik7Ci19Ci1tb2R1bGVf ZXhpdCh3ZnhfY29yZV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZngvbWFp bi5oIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9tYWluLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IGEwZGIzMjIzODNhMy4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93 ZngvbWFpbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyogU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwotLyoKLSAqIERldmljZSBwcm9iZSBhbmQgcmVn aXN0ZXIuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFib3JhdG9y aWVzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCi0gKiBDb3B5cmln aHQgKGMpIDIwMDYsIE1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PgotICogQ29w eXJpZ2h0IDIwMDQtMjAwNiBKZWFuLUJhcHRpc3RlIE5vdGUgPGpibm90ZUBnbWFpbC5jb20+LCBl dCBhbC4KLSAqLwotI2lmbmRlZiBXRlhfTUFJTl9ICi0jZGVmaW5lIFdGWF9NQUlOX0gKLQotI2lu Y2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4K LQotI2luY2x1ZGUgImhpZl9hcGlfZ2VuZXJhbC5oIgotCi1zdHJ1Y3Qgd2Z4X2RldjsKLXN0cnVj dCBod2J1c19vcHM7Ci0KLXN0cnVjdCB3ZnhfcGxhdGZvcm1fZGF0YSB7Ci0JLyogS2V5c2V0IGFu ZCAiLnNlYyIgZXh0ZW5zaW9uIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhpcyBzdHJpbmcgKi8KLQlj b25zdCBjaGFyICpmaWxlX2Z3OwotCWNvbnN0IGNoYXIgKmZpbGVfcGRzOwotCXN0cnVjdCBncGlv X2Rlc2MgKmdwaW9fd2FrZXVwOwotCS8qCi0JICogaWYgdHJ1ZSBISUYgRF9vdXQgaXMgc2FtcGxl ZCBvbiB0aGUgcmlzaW5nIGVkZ2Ugb2YgdGhlIGNsb2NrCi0JICogKGludGVuZGVkIHRvIGJlIHVz ZWQgaW4gNTBNaHogU0RJTykKLQkgKi8KLQlib29sIHVzZV9yaXNpbmdfY2xrOwotfTsKLQotc3Ry dWN0IHdmeF9kZXYgKndmeF9pbml0X2NvbW1vbihzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJY29u c3Qgc3RydWN0IHdmeF9wbGF0Zm9ybV9kYXRhICpwZGF0YSwKLQkJCQljb25zdCBzdHJ1Y3QgaHdi dXNfb3BzICpod2J1c19vcHMsCi0JCQkJdm9pZCAqaHdidXNfcHJpdik7Ci0KLWludCB3ZnhfcHJv YmUoc3RydWN0IHdmeF9kZXYgKndkZXYpOwotdm9pZCB3ZnhfcmVsZWFzZShzdHJ1Y3Qgd2Z4X2Rl diAqd2Rldik7Ci0KLWJvb2wgd2Z4X2FwaV9vbGRlcl90aGFuKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2 LCBpbnQgbWFqb3IsIGludCBtaW5vcik7Ci1pbnQgd2Z4X3NlbmRfcGRzKHN0cnVjdCB3ZnhfZGV2 ICp3ZGV2LCB1OCAqYnVmLCBzaXplX3QgbGVuKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2 ZXJzL3N0YWdpbmcvd2Z4L3F1ZXVlLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L3F1ZXVlLmMKZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxYzM3ZjY5YzI5NS4uMDAwMDAwMDAwMDAwCi0t LSBhL2RyaXZlcnMvc3RhZ2luZy93ZngvcXVldWUuYworKysgL2Rldi9udWxsCkBAIC0xLDMwNCAr MCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Ci0vKgotICog TygxKSBUWCBxdWV1ZSB3aXRoIGJ1aWx0LWluIGFsbG9jYXRvci4KLSAqCi0gKiBDb3B5cmlnaHQg KGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSAqIENvcHlyaWdodCAo YykgMjAxMCwgU1QtRXJpY3Nzb24KLSAqLwotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5j bHVkZSA8bmV0L21hYzgwMjExLmg+Ci0KLSNpbmNsdWRlICJxdWV1ZS5oIgotI2luY2x1ZGUgIndm eC5oIgotI2luY2x1ZGUgInN0YS5oIgotI2luY2x1ZGUgImRhdGFfdHguaCIKLSNpbmNsdWRlICJ0 cmFjZXMuaCIKLQotdm9pZCB3ZnhfdHhfbG9jayhzdHJ1Y3Qgd2Z4X2RldiAqd2RldikKLXsKLQlh dG9taWNfaW5jKCZ3ZGV2LT50eF9sb2NrKTsKLX0KLQotdm9pZCB3ZnhfdHhfdW5sb2NrKHN0cnVj dCB3ZnhfZGV2ICp3ZGV2KQotewotCWludCB0eF9sb2NrID0gYXRvbWljX2RlY19yZXR1cm4oJndk ZXYtPnR4X2xvY2spOwotCi0JV0FSTih0eF9sb2NrIDwgMCwgImluY29uc2lzdGVudCB0eF9sb2Nr IHZhbHVlIik7Ci0JaWYgKCF0eF9sb2NrKQotCQl3ZnhfYmhfcmVxdWVzdF90eCh3ZGV2KTsKLX0K LQotdm9pZCB3ZnhfdHhfZmx1c2goc3RydWN0IHdmeF9kZXYgKndkZXYpCi17Ci0JaW50IHJldDsK LQotCS8vIERvIG5vdCB3YWl0IGZvciBhbnkgcmVwbHkgaWYgY2hpcCBpcyBmcm96ZW4KLQlpZiAo d2Rldi0+Y2hpcF9mcm96ZW4pCi0JCXJldHVybjsKLQotCXdmeF90eF9sb2NrKHdkZXYpOwotCW11 dGV4X2xvY2soJndkZXYtPmhpZl9jbWQubG9jayk7Ci0JcmV0ID0gd2FpdF9ldmVudF90aW1lb3V0 KHdkZXYtPmhpZi50eF9idWZmZXJzX2VtcHR5LAotCQkJCSAhd2Rldi0+aGlmLnR4X2J1ZmZlcnNf dXNlZCwKLQkJCQkgbXNlY3NfdG9famlmZmllcygzMDAwKSk7Ci0JaWYgKCFyZXQpIHsKLQkJZGV2 X3dhcm4od2Rldi0+ZGV2LCAiY2Fubm90IGZsdXNoIHR4IGJ1ZmZlcnMgKCVkIHN0aWxsIGJ1c3kp XG4iLAotCQkJIHdkZXYtPmhpZi50eF9idWZmZXJzX3VzZWQpOwotCQl3ZnhfcGVuZGluZ19kdW1w X29sZF9mcmFtZXMod2RldiwgMzAwMCk7Ci0JCS8vIEZJWE1FOiBkcm9wIHBlbmRpbmcgZnJhbWVz IGhlcmUKLQkJd2Rldi0+Y2hpcF9mcm96ZW4gPSB0cnVlOwotCX0KLQltdXRleF91bmxvY2soJndk ZXYtPmhpZl9jbWQubG9jayk7Ci0Jd2Z4X3R4X3VubG9jayh3ZGV2KTsKLX0KLQotdm9pZCB3Znhf dHhfbG9ja19mbHVzaChzdHJ1Y3Qgd2Z4X2RldiAqd2RldikKLXsKLQl3ZnhfdHhfbG9jayh3ZGV2 KTsKLQl3ZnhfdHhfZmx1c2god2Rldik7Ci19Ci0KLXZvaWQgd2Z4X3R4X3F1ZXVlc19pbml0KHN0 cnVjdCB3ZnhfdmlmICp3dmlmKQotewotCS8vIFRoZSBkZXZpY2UgaXMgaW4gY2hhcmdlIHRvIHJl c3BlY3QgdGhlIGRldGFpbHMgb2YgdGhlIFFvUyBwYXJhbWV0ZXJzLgotCS8vIFRoZSBkcml2ZXIg anVzdCBlbnN1cmUgdGhhdCBpdCByb3VnaHRseSByZXNwZWN0IHRoZSBwcmlvcml0aWVzIHRvCi0J Ly8gYXZvaWQgYW55IHNob3J0YWdlLgotCWNvbnN0IGludCBwcmlvcml0aWVzW0lFRUU4MDIxMV9O VU1fQUNTXSA9IHsgMSwgMiwgNjQsIDEyOCB9OwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8 IElFRUU4MDIxMV9OVU1fQUNTOyArK2kpIHsKLQkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmd3ZpZi0+ dHhfcXVldWVbaV0ubm9ybWFsKTsKLQkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmd3ZpZi0+dHhfcXVl dWVbaV0uY2FiKTsKLQkJd3ZpZi0+dHhfcXVldWVbaV0ucHJpb3JpdHkgPSBwcmlvcml0aWVzW2ld OwotCX0KLX0KLQotdm9pZCB3ZnhfdHhfcXVldWVzX2NoZWNrX2VtcHR5KHN0cnVjdCB3Znhfdmlm ICp3dmlmKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9OVU1fQUNT OyArK2kpIHsKLQkJV0FSTl9PTihhdG9taWNfcmVhZCgmd3ZpZi0+dHhfcXVldWVbaV0ucGVuZGlu Z19mcmFtZXMpKTsKLQkJV0FSTl9PTighc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNzKCZ3dmlmLT50 eF9xdWV1ZVtpXS5ub3JtYWwpKTsKLQkJV0FSTl9PTighc2tiX3F1ZXVlX2VtcHR5X2xvY2tsZXNz KCZ3dmlmLT50eF9xdWV1ZVtpXS5jYWIpKTsKLQl9Ci19Ci0KLWJvb2wgd2Z4X3R4X3F1ZXVlX2Vt cHR5KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBzdHJ1Y3Qgd2Z4X3F1ZXVlICpxdWV1ZSkKLXsKLQly ZXR1cm4gc2tiX3F1ZXVlX2VtcHR5KCZxdWV1ZS0+bm9ybWFsKSAmJiBza2JfcXVldWVfZW1wdHko JnF1ZXVlLT5jYWIpOwotfQotCi1zdGF0aWMgdm9pZCBfX3dmeF90eF9xdWV1ZV9kcm9wKHN0cnVj dCB3ZnhfdmlmICp3dmlmLAotCQkJCXN0cnVjdCBza19idWZmX2hlYWQgKnNrYl9xdWV1ZSwKLQkJ CQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpkcm9wcGVkKQotewotCXN0cnVjdCBza19idWZmICpza2Is ICp0bXA7Ci0KLQlzcGluX2xvY2tfYmgoJnNrYl9xdWV1ZS0+bG9jayk7Ci0Jc2tiX3F1ZXVlX3dh bGtfc2FmZShza2JfcXVldWUsIHNrYiwgdG1wKSB7Ci0JCV9fc2tiX3VubGluayhza2IsIHNrYl9x dWV1ZSk7Ci0JCXNrYl9xdWV1ZV9oZWFkKGRyb3BwZWQsIHNrYik7Ci0JfQotCXNwaW5fdW5sb2Nr X2JoKCZza2JfcXVldWUtPmxvY2spOwotfQotCi12b2lkIHdmeF90eF9xdWV1ZV9kcm9wKHN0cnVj dCB3ZnhfdmlmICp3dmlmLCBzdHJ1Y3Qgd2Z4X3F1ZXVlICpxdWV1ZSwKLQkJICAgICAgIHN0cnVj dCBza19idWZmX2hlYWQgKmRyb3BwZWQpCi17Ci0JX193ZnhfdHhfcXVldWVfZHJvcCh3dmlmLCAm cXVldWUtPmNhYiwgZHJvcHBlZCk7Ci0JX193ZnhfdHhfcXVldWVfZHJvcCh3dmlmLCAmcXVldWUt Pm5vcm1hbCwgZHJvcHBlZCk7Ci0Jd2FrZV91cCgmd3ZpZi0+d2Rldi0+dHhfZGVxdWV1ZSk7Ci19 Ci0KLXZvaWQgd2Z4X3R4X3F1ZXVlc19wdXQoc3RydWN0IHdmeF92aWYgKnd2aWYsIHN0cnVjdCBz a19idWZmICpza2IpCi17Ci0Jc3RydWN0IHdmeF9xdWV1ZSAqcXVldWUgPSAmd3ZpZi0+dHhfcXVl dWVbc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYildOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5m byAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQotCWlmICh0eF9pbmZvLT5mbGFn cyAmIElFRUU4MDIxMV9UWF9DVExfU0VORF9BRlRFUl9EVElNKQotCQlza2JfcXVldWVfdGFpbCgm cXVldWUtPmNhYiwgc2tiKTsKLQllbHNlCi0JCXNrYl9xdWV1ZV90YWlsKCZxdWV1ZS0+bm9ybWFs LCBza2IpOwotfQotCi12b2lkIHdmeF9wZW5kaW5nX2Ryb3Aoc3RydWN0IHdmeF9kZXYgKndkZXYs IHN0cnVjdCBza19idWZmX2hlYWQgKmRyb3BwZWQpCi17Ci0Jc3RydWN0IHdmeF9xdWV1ZSAqcXVl dWU7Ci0Jc3RydWN0IHdmeF92aWYgKnd2aWY7Ci0Jc3RydWN0IGhpZl9tc2cgKmhpZjsKLQlzdHJ1 Y3Qgc2tfYnVmZiAqc2tiOwotCi0JV0FSTighd2Rldi0+Y2hpcF9mcm96ZW4sICIlcyBzaG91bGQg b25seSBiZSB1c2VkIHRvIHJlY292ZXIgYSBmcm96ZW4gZGV2aWNlIiwKLQkgICAgIF9fZnVuY19f KTsKLQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZ3ZGV2LT50eF9wZW5kaW5nKSkgIT0gTlVM TCkgewotCQloaWYgPSAoc3RydWN0IGhpZl9tc2cgKilza2ItPmRhdGE7Ci0JCXd2aWYgPSB3ZGV2 X3RvX3d2aWYod2RldiwgaGlmLT5pbnRlcmZhY2UpOwotCQlpZiAod3ZpZikgewotCQkJcXVldWUg PSAmd3ZpZi0+dHhfcXVldWVbc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYildOwotCQkJV0FSTl9P Tihza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSA+IDMpOwotCQkJV0FSTl9PTighYXRvbWljX3Jl YWQoJnF1ZXVlLT5wZW5kaW5nX2ZyYW1lcykpOwotCQkJYXRvbWljX2RlYygmcXVldWUtPnBlbmRp bmdfZnJhbWVzKTsKLQkJfQotCQlza2JfcXVldWVfaGVhZChkcm9wcGVkLCBza2IpOwotCX0KLX0K LQotc3RydWN0IHNrX2J1ZmYgKndmeF9wZW5kaW5nX2dldChzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwg dTMyIHBhY2tldF9pZCkKLXsKLQlzdHJ1Y3Qgd2Z4X3F1ZXVlICpxdWV1ZTsKLQlzdHJ1Y3QgaGlm X3JlcV90eCAqcmVxOwotCXN0cnVjdCB3ZnhfdmlmICp3dmlmOwotCXN0cnVjdCBoaWZfbXNnICpo aWY7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCXNwaW5fbG9ja19iaCgmd2Rldi0+dHhfcGVu ZGluZy5sb2NrKTsKLQlza2JfcXVldWVfd2Fsaygmd2Rldi0+dHhfcGVuZGluZywgc2tiKSB7Ci0J CWhpZiA9IChzdHJ1Y3QgaGlmX21zZyAqKXNrYi0+ZGF0YTsKLQkJcmVxID0gKHN0cnVjdCBoaWZf cmVxX3R4ICopaGlmLT5ib2R5OwotCQlpZiAocmVxLT5wYWNrZXRfaWQgIT0gcGFja2V0X2lkKQot CQkJY29udGludWU7Ci0JCXNwaW5fdW5sb2NrX2JoKCZ3ZGV2LT50eF9wZW5kaW5nLmxvY2spOwot CQl3dmlmID0gd2Rldl90b193dmlmKHdkZXYsIGhpZi0+aW50ZXJmYWNlKTsKLQkJaWYgKHd2aWYp IHsKLQkJCXF1ZXVlID0gJnd2aWYtPnR4X3F1ZXVlW3NrYl9nZXRfcXVldWVfbWFwcGluZyhza2Ip XTsKLQkJCVdBUk5fT04oc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikgPiAzKTsKLQkJCVdBUk5f T04oIWF0b21pY19yZWFkKCZxdWV1ZS0+cGVuZGluZ19mcmFtZXMpKTsKLQkJCWF0b21pY19kZWMo JnF1ZXVlLT5wZW5kaW5nX2ZyYW1lcyk7Ci0JCX0KLQkJc2tiX3VubGluayhza2IsICZ3ZGV2LT50 eF9wZW5kaW5nKTsKLQkJcmV0dXJuIHNrYjsKLQl9Ci0Jc3Bpbl91bmxvY2tfYmgoJndkZXYtPnR4 X3BlbmRpbmcubG9jayk7Ci0JV0FSTigxLCAiY2Fubm90IGZpbmQgcGFja2V0IGluIHBlbmRpbmcg cXVldWUiKTsKLQlyZXR1cm4gTlVMTDsKLX0KLQotdm9pZCB3ZnhfcGVuZGluZ19kdW1wX29sZF9m cmFtZXMoc3RydWN0IHdmeF9kZXYgKndkZXYsIHVuc2lnbmVkIGludCBsaW1pdF9tcykKLXsKLQlr dGltZV90IG5vdyA9IGt0aW1lX2dldCgpOwotCXN0cnVjdCB3ZnhfdHhfcHJpdiAqdHhfcHJpdjsK LQlzdHJ1Y3QgaGlmX3JlcV90eCAqcmVxOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JYm9vbCBm aXJzdCA9IHRydWU7Ci0KLQlzcGluX2xvY2tfYmgoJndkZXYtPnR4X3BlbmRpbmcubG9jayk7Ci0J c2tiX3F1ZXVlX3dhbGsoJndkZXYtPnR4X3BlbmRpbmcsIHNrYikgewotCQl0eF9wcml2ID0gd2Z4 X3NrYl90eF9wcml2KHNrYik7Ci0JCXJlcSA9IHdmeF9za2JfdHhyZXEoc2tiKTsKLQkJaWYgKGt0 aW1lX2FmdGVyKG5vdywga3RpbWVfYWRkX21zKHR4X3ByaXYtPnhtaXRfdGltZXN0YW1wLAotCQkJ CQkJICBsaW1pdF9tcykpKSB7Ci0JCQlpZiAoZmlyc3QpIHsKLQkJCQlkZXZfaW5mbyh3ZGV2LT5k ZXYsICJmcmFtZXMgc3R1Y2sgaW4gZmlybXdhcmUgc2luY2UgJWRtcyBvciBtb3JlOlxuIiwKLQkJ CQkJIGxpbWl0X21zKTsKLQkJCQlmaXJzdCA9IGZhbHNlOwotCQkJfQotCQkJZGV2X2luZm8od2Rl di0+ZGV2LCAiICAgaWQgJTA4eCBzZW50ICVsbGRtcyBhZ29cbiIsCi0JCQkJIHJlcS0+cGFja2V0 X2lkLAotCQkJCSBrdGltZV9tc19kZWx0YShub3csIHR4X3ByaXYtPnhtaXRfdGltZXN0YW1wKSk7 Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2tfYmgoJndkZXYtPnR4X3BlbmRpbmcubG9jayk7Ci19Ci0K LXVuc2lnbmVkIGludCB3ZnhfcGVuZGluZ19nZXRfcGt0X3VzX2RlbGF5KHN0cnVjdCB3ZnhfZGV2 ICp3ZGV2LAotCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Ja3RpbWVfdCBub3cgPSBr dGltZV9nZXQoKTsKLQlzdHJ1Y3Qgd2Z4X3R4X3ByaXYgKnR4X3ByaXYgPSB3Znhfc2tiX3R4X3By aXYoc2tiKTsKLQotCXJldHVybiBrdGltZV91c19kZWx0YShub3csIHR4X3ByaXYtPnhtaXRfdGlt ZXN0YW1wKTsKLX0KLQotYm9vbCB3ZnhfdHhfcXVldWVzX2hhc19jYWIoc3RydWN0IHdmeF92aWYg Knd2aWYpCi17Ci0JaW50IGk7Ci0KLQlpZiAod3ZpZi0+dmlmLT50eXBlICE9IE5MODAyMTFfSUZU WVBFX0FQKQotCQlyZXR1cm4gZmFsc2U7Ci0JZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9OVU1f QUNTOyArK2kpCi0JCS8vIE5vdGU6IHNpbmNlIG9ubHkgQVAgY2FuIGhhdmUgbWNhc3QgZnJhbWVz IGluIHF1ZXVlIGFuZCBvbmx5Ci0JCS8vIG9uZSB2aWYgY2FuIGJlIEFQLCBhbGwgcXVldWVkIGZy YW1lcyBoYXMgc2FtZSBpbnRlcmZhY2UgaWQKLQkJaWYgKCFza2JfcXVldWVfZW1wdHlfbG9ja2xl c3MoJnd2aWYtPnR4X3F1ZXVlW2ldLmNhYikpCi0JCQlyZXR1cm4gdHJ1ZTsKLQlyZXR1cm4gZmFs c2U7Ci19Ci0KLXN0YXRpYyBpbnQgd2Z4X3R4X3F1ZXVlX2dldF93ZWlnaHQoc3RydWN0IHdmeF9x dWV1ZSAqcXVldWUpCi17Ci0JcmV0dXJuIGF0b21pY19yZWFkKCZxdWV1ZS0+cGVuZGluZ19mcmFt ZXMpICogcXVldWUtPnByaW9yaXR5OwotfQotCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKndmeF90 eF9xdWV1ZXNfZ2V0X3NrYihzdHJ1Y3Qgd2Z4X2RldiAqd2RldikKLXsKLQlzdHJ1Y3Qgd2Z4X3F1 ZXVlICpxdWV1ZXNbSUVFRTgwMjExX05VTV9BQ1MgKiBBUlJBWV9TSVpFKHdkZXYtPnZpZildOwot CWludCBpLCBqLCBudW1fcXVldWVzID0gMDsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZjsKLQlzdHJ1 Y3QgaGlmX21zZyAqaGlmOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0KLQkvLyBzb3J0IHRoZSBx dWV1ZXMKLQl3dmlmID0gTlVMTDsKLQl3aGlsZSAoKHd2aWYgPSB3dmlmX2l0ZXJhdGUod2Rldiwg d3ZpZikpICE9IE5VTEwpIHsKLQkJZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9OVU1fQUNTOyBp KyspIHsKLQkJCVdBUk5fT04obnVtX3F1ZXVlcyA+PSBBUlJBWV9TSVpFKHF1ZXVlcykpOwotCQkJ cXVldWVzW251bV9xdWV1ZXNdID0gJnd2aWYtPnR4X3F1ZXVlW2ldOwotCQkJZm9yIChqID0gbnVt X3F1ZXVlczsgaiA+IDA7IGotLSkKLQkJCQlpZiAod2Z4X3R4X3F1ZXVlX2dldF93ZWlnaHQocXVl dWVzW2pdKSA8Ci0JCQkJICAgIHdmeF90eF9xdWV1ZV9nZXRfd2VpZ2h0KHF1ZXVlc1tqIC0gMV0p KQotCQkJCQlzd2FwKHF1ZXVlc1tqIC0gMV0sIHF1ZXVlc1tqXSk7Ci0JCQludW1fcXVldWVzKys7 Ci0JCX0KLQl9Ci0KLQl3dmlmID0gTlVMTDsKLQl3aGlsZSAoKHd2aWYgPSB3dmlmX2l0ZXJhdGUo d2Rldiwgd3ZpZikpICE9IE5VTEwpIHsKLQkJaWYgKCF3dmlmLT5hZnRlcl9kdGltX3R4X2FsbG93 ZWQpCi0JCQljb250aW51ZTsKLQkJZm9yIChpID0gMDsgaSA8IG51bV9xdWV1ZXM7IGkrKykgewot CQkJc2tiID0gc2tiX2RlcXVldWUoJnF1ZXVlc1tpXS0+Y2FiKTsKLQkJCWlmICghc2tiKQotCQkJ CWNvbnRpbnVlOwotCQkJLy8gTm90ZTogc2luY2Ugb25seSBBUCBjYW4gaGF2ZSBtY2FzdCBmcmFt ZXMgaW4gcXVldWUKLQkJCS8vIGFuZCBvbmx5IG9uZSB2aWYgY2FuIGJlIEFQLCBhbGwgcXVldWVk IGZyYW1lcyBoYXMKLQkJCS8vIHNhbWUgaW50ZXJmYWNlIGlkCi0JCQloaWYgPSAoc3RydWN0IGhp Zl9tc2cgKilza2ItPmRhdGE7Ci0JCQlXQVJOX09OKGhpZi0+aW50ZXJmYWNlICE9IHd2aWYtPmlk KTsKLQkJCVdBUk5fT04ocXVldWVzW2ldICE9Ci0JCQkJJnd2aWYtPnR4X3F1ZXVlW3NrYl9nZXRf cXVldWVfbWFwcGluZyhza2IpXSk7Ci0JCQlhdG9taWNfaW5jKCZxdWV1ZXNbaV0tPnBlbmRpbmdf ZnJhbWVzKTsKLQkJCXRyYWNlX3F1ZXVlc19zdGF0cyh3ZGV2LCBxdWV1ZXNbaV0pOwotCQkJcmV0 dXJuIHNrYjsKLQkJfQotCQkvLyBObyBtb3JlIG11bHRpY2FzdCB0byBzZW50Ci0JCXd2aWYtPmFm dGVyX2R0aW1fdHhfYWxsb3dlZCA9IGZhbHNlOwotCQlzY2hlZHVsZV93b3JrKCZ3dmlmLT51cGRh dGVfdGltX3dvcmspOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBudW1fcXVldWVzOyBpKyspIHsK LQkJc2tiID0gc2tiX2RlcXVldWUoJnF1ZXVlc1tpXS0+bm9ybWFsKTsKLQkJaWYgKHNrYikgewot CQkJYXRvbWljX2luYygmcXVldWVzW2ldLT5wZW5kaW5nX2ZyYW1lcyk7Ci0JCQl0cmFjZV9xdWV1 ZXNfc3RhdHMod2RldiwgcXVldWVzW2ldKTsKLQkJCXJldHVybiBza2I7Ci0JCX0KLQl9Ci0JcmV0 dXJuIE5VTEw7Ci19Ci0KLXN0cnVjdCBoaWZfbXNnICp3ZnhfdHhfcXVldWVzX2dldChzdHJ1Y3Qg d2Z4X2RldiAqd2RldikKLXsKLQlzdHJ1Y3Qgd2Z4X3R4X3ByaXYgKnR4X3ByaXY7Ci0Jc3RydWN0 IHNrX2J1ZmYgKnNrYjsKLQotCWlmIChhdG9taWNfcmVhZCgmd2Rldi0+dHhfbG9jaykpCi0JCXJl dHVybiBOVUxMOwotCXNrYiA9IHdmeF90eF9xdWV1ZXNfZ2V0X3NrYih3ZGV2KTsKLQlpZiAoIXNr YikKLQkJcmV0dXJuIE5VTEw7Ci0Jc2tiX3F1ZXVlX3RhaWwoJndkZXYtPnR4X3BlbmRpbmcsIHNr Yik7Ci0Jd2FrZV91cCgmd2Rldi0+dHhfZGVxdWV1ZSk7Ci0JdHhfcHJpdiA9IHdmeF9za2JfdHhf cHJpdihza2IpOwotCXR4X3ByaXYtPnhtaXRfdGltZXN0YW1wID0ga3RpbWVfZ2V0KCk7Ci0JcmV0 dXJuIChzdHJ1Y3QgaGlmX21zZyAqKXNrYi0+ZGF0YTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMv c3RhZ2luZy93ZngvcXVldWUuaCBiL2RyaXZlcnMvc3RhZ2luZy93ZngvcXVldWUuaApkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBiYTE5NDU1ZWYzLi4wMDAwMDAwMDAwMDAKLS0tIGEv ZHJpdmVycy9zdGFnaW5nL3dmeC9xdWV1ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBA QAotLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwotLyoKLSAqIE8o MSkgVFggcXVldWUgd2l0aCBidWlsdC1pbiBhbGxvY2F0b3IuCi0gKgotICogQ29weXJpZ2h0IChj KSAyMDE3LTIwMjAsIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMp IDIwMTAsIFNULUVyaWNzc29uCi0gKi8KLSNpZm5kZWYgV0ZYX1FVRVVFX0gKLSNkZWZpbmUgV0ZY X1FVRVVFX0gKLQotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPGxpbnV4L2F0 b21pYy5oPgotCi1zdHJ1Y3Qgd2Z4X2RldjsKLXN0cnVjdCB3ZnhfdmlmOwotCi1zdHJ1Y3Qgd2Z4 X3F1ZXVlIHsKLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCW5vcm1hbDsKLQlzdHJ1Y3Qgc2tfYnVmZl9o ZWFkCWNhYjsgLy8gQ29udGVudCBBZnRlciAoRFRJTSkgQmVhY29uCi0JYXRvbWljX3QJCXBlbmRp bmdfZnJhbWVzOwotCWludAkJCXByaW9yaXR5OwotfTsKLQotdm9pZCB3ZnhfdHhfbG9jayhzdHJ1 Y3Qgd2Z4X2RldiAqd2Rldik7Ci12b2lkIHdmeF90eF91bmxvY2soc3RydWN0IHdmeF9kZXYgKndk ZXYpOwotdm9pZCB3ZnhfdHhfZmx1c2goc3RydWN0IHdmeF9kZXYgKndkZXYpOwotdm9pZCB3Znhf dHhfbG9ja19mbHVzaChzdHJ1Y3Qgd2Z4X2RldiAqd2Rldik7Ci0KLXZvaWQgd2Z4X3R4X3F1ZXVl c19pbml0KHN0cnVjdCB3ZnhfdmlmICp3dmlmKTsKLXZvaWQgd2Z4X3R4X3F1ZXVlc19jaGVja19l bXB0eShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZik7Ci1ib29sIHdmeF90eF9xdWV1ZXNfaGFzX2NhYihz dHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZik7Ci12b2lkIHdmeF90eF9xdWV1ZXNfcHV0KHN0cnVjdCB3Znhf dmlmICp3dmlmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXN0cnVjdCBoaWZfbXNnICp3ZnhfdHhf cXVldWVzX2dldChzdHJ1Y3Qgd2Z4X2RldiAqd2Rldik7Ci0KLWJvb2wgd2Z4X3R4X3F1ZXVlX2Vt cHR5KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBzdHJ1Y3Qgd2Z4X3F1ZXVlICpxdWV1ZSk7Ci12b2lk IHdmeF90eF9xdWV1ZV9kcm9wKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBzdHJ1Y3Qgd2Z4X3F1ZXVl ICpxdWV1ZSwKLQkJICAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKmRyb3BwZWQpOwotCi1zdHJ1 Y3Qgc2tfYnVmZiAqd2Z4X3BlbmRpbmdfZ2V0KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgcGFj a2V0X2lkKTsKLXZvaWQgd2Z4X3BlbmRpbmdfZHJvcChzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwgc3Ry dWN0IHNrX2J1ZmZfaGVhZCAqZHJvcHBlZCk7Ci11bnNpZ25lZCBpbnQgd2Z4X3BlbmRpbmdfZ2V0 X3BrdF91c19kZWxheShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwKLQkJCQkJICBzdHJ1Y3Qgc2tfYnVm ZiAqc2tiKTsKLXZvaWQgd2Z4X3BlbmRpbmdfZHVtcF9vbGRfZnJhbWVzKHN0cnVjdCB3ZnhfZGV2 ICp3ZGV2LCB1bnNpZ25lZCBpbnQgbGltaXRfbXMpOwotCi0jZW5kaWYgLyogV0ZYX1FVRVVFX0gg Ki8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93Zngvc2Nhbi5jIGIvZHJpdmVycy9zdGFn aW5nL3dmeC9zY2FuLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiNDdjN2NkZGYy Zi4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93Zngvc2Nhbi5jCisrKyAvZGV2 L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wLW9ubHkKLS8qCi0gKiBTY2FuIHJlbGF0ZWQgZnVuY3Rpb25zLgotICoKLSAqIENvcHlyaWdo dCAoYykgMjAxNy0yMDIwLCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLgotICogQ29weXJpZ2h0 IChjKSAyMDEwLCBTVC1Fcmljc3NvbgotICovCi0jaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+Ci0K LSNpbmNsdWRlICJzY2FuLmgiCi0jaW5jbHVkZSAid2Z4LmgiCi0jaW5jbHVkZSAic3RhLmgiCi0j aW5jbHVkZSAiaGlmX3R4X21pYi5oIgotCi1zdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9zY2FuX2Nv bXBsZXRlZF9jb21wYXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCSAgICAgIGJvb2wg YWJvcnRlZCkKLXsKLQlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9pbmZvIGluZm8gPSB7Ci0JCS5hYm9y dGVkID0gYWJvcnRlZCwKLQl9OwotCi0JaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKGh3LCAmaW5m byk7Ci19Ci0KLXN0YXRpYyBpbnQgdXBkYXRlX3Byb2JlX3RtcGwoc3RydWN0IHdmeF92aWYgKnd2 aWYsCi0JCQkgICAgIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSkKLXsKLQlzdHJ1 Y3Qgc2tfYnVmZiAqc2tiOwotCi0Jc2tiID0gaWVlZTgwMjExX3Byb2JlcmVxX2dldCh3dmlmLT53 ZGV2LT5odywgd3ZpZi0+dmlmLT5hZGRyLAotCQkJCSAgICAgTlVMTCwgMCwgcmVxLT5pZV9sZW4p OwotCWlmICghc2tiKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXNrYl9wdXRfZGF0YShza2IsIHJl cS0+aWUsIHJlcS0+aWVfbGVuKTsKLQloaWZfc2V0X3RlbXBsYXRlX2ZyYW1lKHd2aWYsIHNrYiwg SElGX1RNUExUX1BSQlJFUSwgMCk7Ci0JZGV2X2tmcmVlX3NrYihza2IpOwotCXJldHVybiAwOwot fQotCi1zdGF0aWMgaW50IHNlbmRfc2Nhbl9yZXEoc3RydWN0IHdmeF92aWYgKnd2aWYsCi0JCQkg c3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxLCBpbnQgc3RhcnRfaWR4KQotewotCWlu dCBpLCByZXQsIHRpbWVvdXQ7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaF9zdGFydCwg KmNoX2N1cjsKLQotCWZvciAoaSA9IHN0YXJ0X2lkeDsgaSA8IHJlcS0+bl9jaGFubmVsczsgaSsr KSB7Ci0JCWNoX3N0YXJ0ID0gcmVxLT5jaGFubmVsc1tzdGFydF9pZHhdOwotCQljaF9jdXIgPSBy ZXEtPmNoYW5uZWxzW2ldOwotCQlXQVJOKGNoX2N1ci0+YmFuZCAhPSBOTDgwMjExX0JBTkRfMkdI WiwgImJhbmQgbm90IHN1cHBvcnRlZCIpOwotCQlpZiAoY2hfY3VyLT5tYXhfcG93ZXIgIT0gY2hf c3RhcnQtPm1heF9wb3dlcikKLQkJCWJyZWFrOwotCQlpZiAoKGNoX2N1ci0+ZmxhZ3MgXiBjaF9z dGFydC0+ZmxhZ3MpICYgSUVFRTgwMjExX0NIQU5fTk9fSVIpCi0JCQlicmVhazsKLQl9Ci0Jd2Z4 X3R4X2xvY2tfZmx1c2god3ZpZi0+d2Rldik7Ci0Jd3ZpZi0+c2Nhbl9hYm9ydCA9IGZhbHNlOwot CXJlaW5pdF9jb21wbGV0aW9uKCZ3dmlmLT5zY2FuX2NvbXBsZXRlKTsKLQlyZXQgPSBoaWZfc2Nh bih3dmlmLCByZXEsIHN0YXJ0X2lkeCwgaSAtIHN0YXJ0X2lkeCwgJnRpbWVvdXQpOwotCWlmIChy ZXQpIHsKLQkJd2Z4X3R4X3VubG9jayh3dmlmLT53ZGV2KTsKLQkJcmV0dXJuIC1FSU87Ci0JfQot CXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmd3ZpZi0+c2Nhbl9jb21wbGV0ZSwg dGltZW91dCk7Ci0JaWYgKHJlcS0+Y2hhbm5lbHNbc3RhcnRfaWR4XS0+bWF4X3Bvd2VyICE9IHd2 aWYtPnZpZi0+YnNzX2NvbmYudHhwb3dlcikKLQkJaGlmX3NldF9vdXRwdXRfcG93ZXIod3ZpZiwg d3ZpZi0+dmlmLT5ic3NfY29uZi50eHBvd2VyKTsKLQl3ZnhfdHhfdW5sb2NrKHd2aWYtPndkZXYp OwotCWlmICghcmV0KSB7Ci0JCWRldl9ub3RpY2Uod3ZpZi0+d2Rldi0+ZGV2LCAic2NhbiB0aW1l b3V0XG4iKTsKLQkJaGlmX3N0b3Bfc2Nhbih3dmlmKTsKLQkJcmV0dXJuIC1FVElNRURPVVQ7Ci0J fQotCWlmICh3dmlmLT5zY2FuX2Fib3J0KSB7Ci0JCWRldl9ub3RpY2Uod3ZpZi0+d2Rldi0+ZGV2 LCAic2NhbiBhYm9ydFxuIik7Ci0JCXJldHVybiAtRUNPTk5BQk9SVEVEOwotCX0KLQlyZXR1cm4g aSAtIHN0YXJ0X2lkeDsKLX0KLQotLyoKLSAqIEl0IGlzIG5vdCByZWFsbHkgbmVjZXNzYXJ5IHRv IHJ1biBzY2FuIHJlcXVlc3QgYXN5bmNocm9ub3VzbHkuIEhvd2V2ZXIsCi0gKiB0aGVyZSBpcyBh IGJ1ZyBpbiAiaXcgc2NhbiIgd2hlbiBpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQoKSBpcyBjYWxs ZWQgYmVmb3JlCi0gKiB3ZnhfaHdfc2NhbigpIHJldHVybgotICovCi12b2lkIHdmeF9od19zY2Fu X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCB3ZnhfdmlmICp3dmlm ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3ZnhfdmlmLCBzY2FuX3dvcmspOwotCXN0cnVj dCBpZWVlODAyMTFfc2Nhbl9yZXF1ZXN0ICpod19yZXEgPSB3dmlmLT5zY2FuX3JlcTsKLQlpbnQg Y2hhbl9jdXIsIHJldDsKLQotCW11dGV4X2xvY2soJnd2aWYtPndkZXYtPmNvbmZfbXV0ZXgpOwot CW11dGV4X2xvY2soJnd2aWYtPnNjYW5fbG9jayk7Ci0JaWYgKHd2aWYtPmpvaW5faW5fcHJvZ3Jl c3MpIHsKLQkJZGV2X2luZm8od3ZpZi0+d2Rldi0+ZGV2LCAiJXM6IGFib3J0IGluLXByb2dyZXNz IFJFUV9KT0lOIiwKLQkJCSBfX2Z1bmNfXyk7Ci0JCXdmeF9yZXNldCh3dmlmKTsKLQl9Ci0JdXBk YXRlX3Byb2JlX3RtcGwod3ZpZiwgJmh3X3JlcS0+cmVxKTsKLQljaGFuX2N1ciA9IDA7Ci0JZG8g ewotCQlyZXQgPSBzZW5kX3NjYW5fcmVxKHd2aWYsICZod19yZXEtPnJlcSwgY2hhbl9jdXIpOwot CQlpZiAocmV0ID4gMCkKLQkJCWNoYW5fY3VyICs9IHJldDsKLQl9IHdoaWxlIChyZXQgPiAwICYm IGNoYW5fY3VyIDwgaHdfcmVxLT5yZXEubl9jaGFubmVscyk7Ci0JbXV0ZXhfdW5sb2NrKCZ3dmlm LT5zY2FuX2xvY2spOwotCW11dGV4X3VubG9jaygmd3ZpZi0+d2Rldi0+Y29uZl9tdXRleCk7Ci0J X19pZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWRfY29tcGF0KHd2aWYtPndkZXYtPmh3LCByZXQgPCAw KTsKLX0KLQotaW50IHdmeF9od19zY2FuKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qg aWVlZTgwMjExX3ZpZiAqdmlmLAotCQlzdHJ1Y3QgaWVlZTgwMjExX3NjYW5fcmVxdWVzdCAqaHdf cmVxKQotewotCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5k cnZfcHJpdjsKLQotCVdBUk5fT04oaHdfcmVxLT5yZXEubl9jaGFubmVscyA+IEhJRl9BUElfTUFY X05CX0NIQU5ORUxTKTsKLQl3dmlmLT5zY2FuX3JlcSA9IGh3X3JlcTsKLQlzY2hlZHVsZV93b3Jr KCZ3dmlmLT5zY2FuX3dvcmspOwotCXJldHVybiAwOwotfQotCi12b2lkIHdmeF9jYW5jZWxfaHdf c2NhbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikK LXsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3By aXY7Ci0KLQl3dmlmLT5zY2FuX2Fib3J0ID0gdHJ1ZTsKLQloaWZfc3RvcF9zY2FuKHd2aWYpOwot fQotCi12b2lkIHdmeF9zY2FuX2NvbXBsZXRlKHN0cnVjdCB3ZnhfdmlmICp3dmlmKQotewotCWNv bXBsZXRlKCZ3dmlmLT5zY2FuX2NvbXBsZXRlKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3Rh Z2luZy93Zngvc2Nhbi5oIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9zY2FuLmgKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IGM3NDk2YTc2NjQ3OC4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZl cnMvc3RhZ2luZy93Zngvc2Nhbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotLyog U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwotLyoKLSAqIFNjYW4gcmVs YXRlZCBmdW5jdGlvbnMuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24g TGFib3JhdG9yaWVzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCi0g Ki8KLSNpZm5kZWYgV0ZYX1NDQU5fSAotI2RlZmluZSBXRlhfU0NBTl9ICi0KLSNpbmNsdWRlIDxu ZXQvbWFjODAyMTEuaD4KLQotc3RydWN0IHdmeF9kZXY7Ci1zdHJ1Y3Qgd2Z4X3ZpZjsKLQotdm9p ZCB3ZnhfaHdfc2Nhbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci1pbnQgd2Z4X2h3 X3NjYW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYs Ci0JCXN0cnVjdCBpZWVlODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEpOwotdm9pZCB3ZnhfY2FuY2Vs X2h3X3NjYW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2 aWYpOwotdm9pZCB3Znhfc2Nhbl9jb21wbGV0ZShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZik7Ci0KLSNl bmRpZiAvKiBXRlhfU0NBTl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L3N0 YS5jIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9zdGEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMTk2Nzc5YTFiODlhLi4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dm eC9zdGEuYworKysgL2Rldi9udWxsCkBAIC0xLDgwNyArMCwwIEBACi0vLyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Ci0vKgotICogSW1wbGVtZW50YXRpb24gb2YgbWFjODAy MTEgQVBJLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwLCBTaWxpY29uIExhYm9yYXRv cmllcywgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmljc3NvbgotICovCi0jaW5j bHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KLQot I2luY2x1ZGUgInN0YS5oIgotI2luY2x1ZGUgIndmeC5oIgotI2luY2x1ZGUgImZ3aW8uaCIKLSNp bmNsdWRlICJiaC5oIgotI2luY2x1ZGUgImtleS5oIgotI2luY2x1ZGUgInNjYW4uaCIKLSNpbmNs dWRlICJkZWJ1Zy5oIgotI2luY2x1ZGUgImhpZl90eC5oIgotI2luY2x1ZGUgImhpZl90eF9taWIu aCIKLQotI2RlZmluZSBISUZfTUFYX0FSUF9JUF9BRERSVEFCTEVfRU5UUklFUyAyCi0KLXUzMiB3 ZnhfcmF0ZV9tYXNrX3RvX2h3KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgcmF0ZXMpCi17Ci0J aW50IGk7Ci0JdTMyIHJldCA9IDA7Ci0JLy8gV0Z4IG9ubHkgc3VwcG9ydCAyR0h6Ci0Jc3RydWN0 IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQgPSB3ZGV2LT5ody0+d2lwaHktPmJhbmRz W05MODAyMTFfQkFORF8yR0haXTsKLQotCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9iaXRyYXRl czsgaSsrKSB7Ci0JCWlmIChyYXRlcyAmIEJJVChpKSkgewotCQkJaWYgKGkgPj0gc2JhbmQtPm5f Yml0cmF0ZXMpCi0JCQkJZGV2X3dhcm4od2Rldi0+ZGV2LCAidW5zdXBwb3J0ZWQgYmFzaWMgcmF0 ZVxuIik7Ci0JCQllbHNlCi0JCQkJcmV0IHw9IEJJVChzYmFuZC0+Yml0cmF0ZXNbaV0uaHdfdmFs dWUpOwotCQl9Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXZvaWQgd2Z4X2Nvb2xpbmdfdGltZW91 dF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3Qgd2Z4X2RldiAqd2Rl diA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksCi0JCQkJCSAgICBzdHJ1Y3Qg d2Z4X2RldiwKLQkJCQkJICAgIGNvb2xpbmdfdGltZW91dF93b3JrKTsKLQotCXdkZXYtPmNoaXBf ZnJvemVuID0gdHJ1ZTsKLQl3ZnhfdHhfdW5sb2NrKHdkZXYpOwotfQotCi12b2lkIHdmeF9zdXNw ZW5kX2hvdF9kZXYoc3RydWN0IHdmeF9kZXYgKndkZXYsIGVudW0gc3RhX25vdGlmeV9jbWQgY21k KQotewotCWlmIChjbWQgPT0gU1RBX05PVElGWV9BV0FLRSkgewotCQkvLyBEZXZpY2UgcmVjb3Zl ciBub3JtYWwgdGVtcGVyYXR1cmUKLQkJaWYgKGNhbmNlbF9kZWxheWVkX3dvcmsoJndkZXYtPmNv b2xpbmdfdGltZW91dF93b3JrKSkKLQkJCXdmeF90eF91bmxvY2sod2Rldik7Ci0JfSBlbHNlIHsK LQkJLy8gRGV2aWNlIGlzIHRvbyBob3QKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZ3ZGV2LT5j b29saW5nX3RpbWVvdXRfd29yaywgMTAgKiBIWik7Ci0JCXdmeF90eF9sb2NrKHdkZXYpOwotCX0K LX0KLQotc3RhdGljIHZvaWQgd2Z4X2ZpbHRlcl9iZWFjb24oc3RydWN0IHdmeF92aWYgKnd2aWYs IGJvb2wgZmlsdGVyX2JlYWNvbikKLXsKLQlzdGF0aWMgY29uc3Qgc3RydWN0IGhpZl9pZV90YWJs ZV9lbnRyeSBmaWx0ZXJfaWVzW10gPSB7Ci0JCXsKLQkJCS5pZV9pZCAgICAgICAgPSBXTEFOX0VJ RF9WRU5ET1JfU1BFQ0lGSUMsCi0JCQkuaGFzX2NoYW5nZWQgID0gMSwKLQkJCS5ub19sb25nZXIg ICAgPSAxLAotCQkJLmhhc19hcHBlYXJlZCA9IDEsCi0JCQkub3VpICAgICAgICAgID0geyAweDUw LCAweDZGLCAweDlBIH0sCi0JCX0sIHsKLQkJCS5pZV9pZCAgICAgICAgPSBXTEFOX0VJRF9IVF9P UEVSQVRJT04sCi0JCQkuaGFzX2NoYW5nZWQgID0gMSwKLQkJCS5ub19sb25nZXIgICAgPSAxLAot CQkJLmhhc19hcHBlYXJlZCA9IDEsCi0JCX0sIHsKLQkJCS5pZV9pZCAgICAgICAgPSBXTEFOX0VJ RF9FUlBfSU5GTywKLQkJCS5oYXNfY2hhbmdlZCAgPSAxLAotCQkJLm5vX2xvbmdlciAgICA9IDEs Ci0JCQkuaGFzX2FwcGVhcmVkID0gMSwKLQkJfQotCX07Ci0KLQlpZiAoIWZpbHRlcl9iZWFjb24p IHsKLQkJaGlmX2JlYWNvbl9maWx0ZXJfY29udHJvbCh3dmlmLCAwLCAxKTsKLQl9IGVsc2Ugewot CQloaWZfc2V0X2JlYWNvbl9maWx0ZXJfdGFibGUod3ZpZiwgMywgZmlsdGVyX2llcyk7Ci0JCWhp Zl9iZWFjb25fZmlsdGVyX2NvbnRyb2wod3ZpZiwgSElGX0JFQUNPTl9GSUxURVJfRU5BQkxFLCAw KTsKLQl9Ci19Ci0KLXZvaWQgd2Z4X2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9o dyAqaHcsIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAotCQkJICB1bnNpZ25lZCBpbnQgKnRv dGFsX2ZsYWdzLCB1NjQgdW51c2VkKQotewotCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gTlVMTDsK LQlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3LT5wcml2OwotCWJvb2wgZmlsdGVyX2Jzc2lkLCBm aWx0ZXJfcHJicmVxLCBmaWx0ZXJfYmVhY29uOwotCi0JLy8gTm90ZXM6Ci0JLy8gICAtIFByb2Jl IHJlc3BvbnNlcyAoRklGX0JDTl9QUkJSRVNQX1BST01JU0MpIGFyZSBuZXZlciBmaWx0ZXJlZAot CS8vICAgLSBQUy1Qb2xsIChGSUZfUFNQT0xMKSBhcmUgbmV2ZXIgZmlsdGVyZWQKLQkvLyAgIC0g UlRTLCBDVFMgYW5kIEFjayAoRklGX0NPTlRST0wpIGFyZSBhbHdheXMgZmlsdGVyZWQKLQkvLyAg IC0gQnJva2VuIGZyYW1lcyAoRklGX0ZDU0ZBSUwgYW5kIEZJRl9QTENQRkFJTCkgYXJlIGFsd2F5 cyBmaWx0ZXJlZAotCS8vICAgLSBGaXJtd2FyZSBkb2VzICh5ZXQpIGFsbG93IHRvIGZvcndhcmQg dW5pY2FzdCB0cmFmZmljIHNlbnQgdG8KLQkvLyAgICAgb3RoZXIgc3RhdGlvbnMgKGFrYS4gcHJv bWlzY3VvdXMgbW9kZSkKLQkqdG90YWxfZmxhZ3MgJj0gRklGX0JDTl9QUkJSRVNQX1BST01JU0Mg fCBGSUZfQUxMTVVMVEkgfCBGSUZfT1RIRVJfQlNTIHwKLQkJCUZJRl9QUk9CRV9SRVEgfCBGSUZf UFNQT0xMOwotCi0JbXV0ZXhfbG9jaygmd2Rldi0+Y29uZl9tdXRleCk7Ci0Jd2hpbGUgKCh3dmlm ID0gd3ZpZl9pdGVyYXRlKHdkZXYsIHd2aWYpKSAhPSBOVUxMKSB7Ci0JCW11dGV4X2xvY2soJnd2 aWYtPnNjYW5fbG9jayk7Ci0KLQkJLy8gTm90ZTogRklGX0JDTl9QUkJSRVNQX1BST01JU0MgY292 ZXJzIHByb2JlIHJlc3BvbnNlIGFuZAotCQkvLyBiZWFjb25zIGZyb20gb3RoZXIgQlNTCi0JCWlm ICgqdG90YWxfZmxhZ3MgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykKLQkJCWZpbHRlcl9iZWFj b24gPSBmYWxzZTsKLQkJZWxzZQotCQkJZmlsdGVyX2JlYWNvbiA9IHRydWU7Ci0JCXdmeF9maWx0 ZXJfYmVhY29uKHd2aWYsIGZpbHRlcl9iZWFjb24pOwotCi0JCWlmICgqdG90YWxfZmxhZ3MgJiBG SUZfT1RIRVJfQlNTKQotCQkJZmlsdGVyX2Jzc2lkID0gZmFsc2U7Ci0JCWVsc2UKLQkJCWZpbHRl cl9ic3NpZCA9IHRydWU7Ci0KLQkJLy8gSW4gQVAgbW9kZSwgY2hpcCBjYW4gcmVwbHkgdG8gcHJv YmUgcmVxdWVzdCBpdHNlbGYKLQkJaWYgKCp0b3RhbF9mbGFncyAmIEZJRl9QUk9CRV9SRVEgJiYK LQkJICAgIHd2aWYtPnZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgewotCQkJZGV2X2Ri Zyh3ZGV2LT5kZXYsICJkbyBub3QgZm9yd2FyZCBwcm9iZSByZXF1ZXN0IGluIEFQIG1vZGVcbiIp OwotCQkJKnRvdGFsX2ZsYWdzICY9IH5GSUZfUFJPQkVfUkVROwotCQl9Ci0KLQkJaWYgKCp0b3Rh bF9mbGFncyAmIEZJRl9QUk9CRV9SRVEpCi0JCQlmaWx0ZXJfcHJicmVxID0gZmFsc2U7Ci0JCWVs c2UKLQkJCWZpbHRlcl9wcmJyZXEgPSB0cnVlOwotCQloaWZfc2V0X3J4X2ZpbHRlcih3dmlmLCBm aWx0ZXJfYnNzaWQsIGZpbHRlcl9wcmJyZXEpOwotCi0JCW11dGV4X3VubG9jaygmd3ZpZi0+c2Nh bl9sb2NrKTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZ3ZGV2LT5jb25mX211dGV4KTsKLX0KLQotc3Rh dGljIGludCB3ZnhfZ2V0X3BzX3RpbWVvdXQoc3RydWN0IHdmeF92aWYgKnd2aWYsIGJvb2wgKmVu YWJsZV9wcykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4wID0gTlVMTCwgKmNo YW4xID0gTlVMTDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmd3ZpZi0+d2Rldi0+ aHctPmNvbmY7Ci0KLQlXQVJOKCF3dmlmLT52aWYtPmJzc19jb25mLmFzc29jICYmIGVuYWJsZV9w cywKLQkgICAgICJlbmFibGVfcHMgaXMgcmVsaWFibGUgb25seSBpZiBhc3NvY2lhdGVkIik7Ci0J aWYgKHdkZXZfdG9fd3ZpZih3dmlmLT53ZGV2LCAwKSkKLQkJY2hhbjAgPSB3ZGV2X3RvX3d2aWYo d3ZpZi0+d2RldiwgMCktPnZpZi0+YnNzX2NvbmYuY2hhbmRlZi5jaGFuOwotCWlmICh3ZGV2X3Rv X3d2aWYod3ZpZi0+d2RldiwgMSkpCi0JCWNoYW4xID0gd2Rldl90b193dmlmKHd2aWYtPndkZXYs IDEpLT52aWYtPmJzc19jb25mLmNoYW5kZWYuY2hhbjsKLQlpZiAoY2hhbjAgJiYgY2hhbjEgJiYg Y2hhbjAtPmh3X3ZhbHVlICE9IGNoYW4xLT5od192YWx1ZSAmJgotCSAgICB3dmlmLT52aWYtPnR5 cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKLQkJLy8gSXQgaXMgbmVjZXNzYXJ5IHRvIGVuYWJs ZSBwb3dlcnNhdmUgaWYgY2hhbm5lbHMKLQkJLy8gYXJlIGRpZmZlcmVudC4KLQkJaWYgKGVuYWJs ZV9wcykKLQkJCSplbmFibGVfcHMgPSB0cnVlOwotCQlpZiAod3ZpZi0+d2Rldi0+Zm9yY2VfcHNf dGltZW91dCA+IC0xKQotCQkJcmV0dXJuIHd2aWYtPndkZXYtPmZvcmNlX3BzX3RpbWVvdXQ7Ci0J CWVsc2UgaWYgKHdmeF9hcGlfb2xkZXJfdGhhbih3dmlmLT53ZGV2LCAzLCAyKSkKLQkJCXJldHVy biAwOwotCQllbHNlCi0JCQlyZXR1cm4gMzA7Ci0JfQotCWlmIChlbmFibGVfcHMpCi0JCSplbmFi bGVfcHMgPSB3dmlmLT52aWYtPmJzc19jb25mLnBzOwotCWlmICh3dmlmLT53ZGV2LT5mb3JjZV9w c190aW1lb3V0ID4gLTEpCi0JCXJldHVybiB3dmlmLT53ZGV2LT5mb3JjZV9wc190aW1lb3V0Owot CWVsc2UgaWYgKHd2aWYtPnZpZi0+YnNzX2NvbmYuYXNzb2MgJiYgd3ZpZi0+dmlmLT5ic3NfY29u Zi5wcykKLQkJcmV0dXJuIGNvbmYtPmR5bmFtaWNfcHNfdGltZW91dDsKLQllbHNlCi0JCXJldHVy biAtMTsKLX0KLQotaW50IHdmeF91cGRhdGVfcG0oc3RydWN0IHdmeF92aWYgKnd2aWYpCi17Ci0J aW50IHBzX3RpbWVvdXQ7Ci0JYm9vbCBwczsKLQotCWlmICghd3ZpZi0+dmlmLT5ic3NfY29uZi5h c3NvYykKLQkJcmV0dXJuIDA7Ci0JcHNfdGltZW91dCA9IHdmeF9nZXRfcHNfdGltZW91dCh3dmlm LCAmcHMpOwotCWlmICghcHMpCi0JCXBzX3RpbWVvdXQgPSAwOwotCVdBUk5fT04ocHNfdGltZW91 dCA8IDApOwotCWlmICh3dmlmLT51YXBzZF9tYXNrKQotCQlwc190aW1lb3V0ID0gMDsKLQotCWlm ICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZ3dmlmLT5zZXRfcG1fbW9kZV9jb21wbGV0 ZSwKLQkJCQkJIFRVX1RPX0pJRkZJRVMoNTEyKSkpCi0JCWRldl93YXJuKHd2aWYtPndkZXYtPmRl diwKLQkJCSAidGltZW91dCB3aGlsZSB3YWl0aW5nIG9mIHNldF9wbV9tb2RlX2NvbXBsZXRlXG4i KTsKLQlyZXR1cm4gaGlmX3NldF9wbSh3dmlmLCBwcywgcHNfdGltZW91dCk7Ci19Ci0KLWludCB3 ZnhfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYg KnZpZiwKLQkJICAgdTE2IHF1ZXVlLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3Bh cmFtcyAqcGFyYW1zKQotewotCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gaHctPnByaXY7Ci0Jc3Ry dWN0IHdmeF92aWYgKnd2aWYgPSAoc3RydWN0IHdmeF92aWYgKil2aWYtPmRydl9wcml2OwotCWlu dCBvbGRfdWFwc2QgPSB3dmlmLT51YXBzZF9tYXNrOwotCi0JV0FSTl9PTihxdWV1ZSA+PSBody0+ cXVldWVzKTsKLQotCW11dGV4X2xvY2soJndkZXYtPmNvbmZfbXV0ZXgpOwotCWFzc2lnbl9iaXQo cXVldWUsICZ3dmlmLT51YXBzZF9tYXNrLCBwYXJhbXMtPnVhcHNkKTsKLQloaWZfc2V0X2VkY2Ff cXVldWVfcGFyYW1zKHd2aWYsIHF1ZXVlLCBwYXJhbXMpOwotCWlmICh3dmlmLT52aWYtPnR5cGUg PT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgotCSAgICBvbGRfdWFwc2QgIT0gd3ZpZi0+dWFw c2RfbWFzaykgewotCQloaWZfc2V0X3VhcHNkX2luZm8od3ZpZiwgd3ZpZi0+dWFwc2RfbWFzayk7 Ci0JCXdmeF91cGRhdGVfcG0od3ZpZik7Ci0JfQotCW11dGV4X3VubG9jaygmd2Rldi0+Y29uZl9t dXRleCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCB3Znhfc2V0X3J0c190aHJlc2hvbGQoc3RydWN0 IGllZWU4MDIxMV9odyAqaHcsIHUzMiB2YWx1ZSkKLXsKLQlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9 IGh3LT5wcml2OwotCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gTlVMTDsKLQotCXdoaWxlICgod3Zp ZiA9IHd2aWZfaXRlcmF0ZSh3ZGV2LCB3dmlmKSkgIT0gTlVMTCkKLQkJaGlmX3J0c190aHJlc2hv bGQod3ZpZiwgdmFsdWUpOwotCXJldHVybiAwOwotfQotCi0vKiBXU00gY2FsbGJhY2tzICovCi0K LXZvaWQgd2Z4X2V2ZW50X3JlcG9ydF9yc3NpKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCB1OCByYXdf cmNwaV9yc3NpKQotewotCS8qIFJTU0k6IHNpZ25lZCBROC4wLCBSQ1BJOiB1bnNpZ25lZCBRNy4x Ci0JICogUlNTSSA9IFJDUEkgLyAyIC0gMTEwCi0JICovCi0JaW50IHJjcGlfcnNzaTsKLQlpbnQg Y3FtX2V2dDsKLQotCXJjcGlfcnNzaSA9IHJhd19yY3BpX3Jzc2kgLyAyIC0gMTEwOwotCWlmIChy Y3BpX3Jzc2kgPD0gd3ZpZi0+dmlmLT5ic3NfY29uZi5jcW1fcnNzaV90aG9sZCkKLQkJY3FtX2V2 dCA9IE5MODAyMTFfQ1FNX1JTU0lfVEhSRVNIT0xEX0VWRU5UX0xPVzsKLQllbHNlCi0JCWNxbV9l dnQgPSBOTDgwMjExX0NRTV9SU1NJX1RIUkVTSE9MRF9FVkVOVF9ISUdIOwotCWllZWU4MDIxMV9j cW1fcnNzaV9ub3RpZnkod3ZpZi0+dmlmLCBjcW1fZXZ0LCByY3BpX3Jzc2ksIEdGUF9LRVJORUwp OwotfQotCi1zdGF0aWMgdm9pZCB3ZnhfYmVhY29uX2xvc3Nfd29yayhzdHJ1Y3Qgd29ya19zdHJ1 Y3QgKndvcmspCi17Ci0Jc3RydWN0IHdmeF92aWYgKnd2aWYgPSBjb250YWluZXJfb2YodG9fZGVs YXllZF93b3JrKHdvcmspLAotCQkJCQkgICAgc3RydWN0IHdmeF92aWYsIGJlYWNvbl9sb3NzX3dv cmspOwotCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mID0gJnd2aWYtPnZpZi0+ YnNzX2NvbmY7Ci0KLQlpZWVlODAyMTFfYmVhY29uX2xvc3Mod3ZpZi0+dmlmKTsKLQlzY2hlZHVs ZV9kZWxheWVkX3dvcmsodG9fZGVsYXllZF93b3JrKHdvcmspLAotCQkJICAgICAgbXNlY3NfdG9f amlmZmllcyhic3NfY29uZi0+YmVhY29uX2ludCkpOwotfQotCi12b2lkIHdmeF9zZXRfZGVmYXVs dF91bmljYXN0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgc3RydWN0IGllZWU4 MDIxMV92aWYgKnZpZiwgaW50IGlkeCkKLXsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1 Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7Ci0KLQloaWZfd2VwX2RlZmF1bHRfa2V5X2lkKHd2 aWYsIGlkeCk7Ci19Ci0KLXZvaWQgd2Z4X3Jlc2V0KHN0cnVjdCB3ZnhfdmlmICp3dmlmKQotewot CXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gd3ZpZi0+d2RldjsKLQotCXdmeF90eF9sb2NrX2ZsdXNo KHdkZXYpOwotCWhpZl9yZXNldCh3dmlmLCBmYWxzZSk7Ci0Jd2Z4X3R4X3BvbGljeV9pbml0KHd2 aWYpOwotCWlmICh3dmlmX2NvdW50KHdkZXYpIDw9IDEpCi0JCWhpZl9zZXRfYmxvY2tfYWNrX3Bv bGljeSh3dmlmLCAweEZGLCAweEZGKTsKLQl3ZnhfdHhfdW5sb2NrKHdkZXYpOwotCXd2aWYtPmpv aW5faW5fcHJvZ3Jlc3MgPSBmYWxzZTsKLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnd2aWYt PmJlYWNvbl9sb3NzX3dvcmspOwotCXd2aWYgPSAgTlVMTDsKLQl3aGlsZSAoKHd2aWYgPSB3dmlm X2l0ZXJhdGUod2Rldiwgd3ZpZikpICE9IE5VTEwpCi0JCXdmeF91cGRhdGVfcG0od3ZpZik7Ci19 Ci0KLWludCB3Znhfc3RhX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4 MDIxMV92aWYgKnZpZiwKLQkJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKLXsKLQlzdHJ1Y3Qg d2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7Ci0Jc3RydWN0 IHdmeF9zdGFfcHJpdiAqc3RhX3ByaXYgPSAoc3RydWN0IHdmeF9zdGFfcHJpdiAqKSZzdGEtPmRy dl9wcml2OwotCi0Jc3RhX3ByaXYtPnZpZl9pZCA9IHd2aWYtPmlkOwotCi0JaWYgKHZpZi0+dHlw ZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQotCQloaWZfc2V0X21mcCh3dmlmLCBzdGEtPm1m cCwgc3RhLT5tZnApOwotCi0JLy8gSW4gc3RhdGlvbiBtb2RlLCB0aGUgZmlybXdhcmUgaW50ZXJw cmV0cyBuZXcgbGluay1pZCBhcyBhIFRETFMgcGVlci4KLQlpZiAodmlmLT50eXBlID09IE5MODAy MTFfSUZUWVBFX1NUQVRJT04gJiYgIXN0YS0+dGRscykKLQkJcmV0dXJuIDA7Ci0Jc3RhX3ByaXYt PmxpbmtfaWQgPSBmZnood3ZpZi0+bGlua19pZF9tYXApOwotCXd2aWYtPmxpbmtfaWRfbWFwIHw9 IEJJVChzdGFfcHJpdi0+bGlua19pZCk7Ci0JV0FSTl9PTighc3RhX3ByaXYtPmxpbmtfaWQpOwot CVdBUk5fT04oc3RhX3ByaXYtPmxpbmtfaWQgPj0gSElGX0xJTktfSURfTUFYKTsKLQloaWZfbWFw X2xpbmsod3ZpZiwgZmFsc2UsIHN0YS0+YWRkciwgc3RhX3ByaXYtPmxpbmtfaWQsIHN0YS0+bWZw KTsKLQotCXJldHVybiAwOwotfQotCi1pbnQgd2Z4X3N0YV9yZW1vdmUoc3RydWN0IGllZWU4MDIx MV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCSAgIHN0cnVjdCBpZWVlODAy MTFfc3RhICpzdGEpCi17Ci0Jc3RydWN0IHdmeF92aWYgKnd2aWYgPSAoc3RydWN0IHdmeF92aWYg Kil2aWYtPmRydl9wcml2OwotCXN0cnVjdCB3Znhfc3RhX3ByaXYgKnN0YV9wcml2ID0gKHN0cnVj dCB3Znhfc3RhX3ByaXYgKikmc3RhLT5kcnZfcHJpdjsKLQotCS8vIFNlZSBub3RlIGluIHdmeF9z dGFfYWRkKCkKLQlpZiAoIXN0YV9wcml2LT5saW5rX2lkKQotCQlyZXR1cm4gMDsKLQkvLyBGSVhN RSBhZGQgYSBtdXRleD8KLQloaWZfbWFwX2xpbmsod3ZpZiwgdHJ1ZSwgc3RhLT5hZGRyLCBzdGFf cHJpdi0+bGlua19pZCwgZmFsc2UpOwotCXd2aWYtPmxpbmtfaWRfbWFwICY9IH5CSVQoc3RhX3By aXYtPmxpbmtfaWQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHdmeF91cGxvYWRfYXBf dGVtcGxhdGVzKHN0cnVjdCB3ZnhfdmlmICp3dmlmKQotewotCXN0cnVjdCBza19idWZmICpza2I7 Ci0KLQlza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldCh3dmlmLT53ZGV2LT5odywgd3ZpZi0+dmlm KTsKLQlpZiAoIXNrYikKLQkJcmV0dXJuIC1FTk9NRU07Ci0JaGlmX3NldF90ZW1wbGF0ZV9mcmFt ZSh3dmlmLCBza2IsIEhJRl9UTVBMVF9CQ04sCi0JCQkgICAgICAgQVBJX1JBVEVfSU5ERVhfQl8x TUJQUyk7Ci0JZGV2X2tmcmVlX3NrYihza2IpOwotCi0Jc2tiID0gaWVlZTgwMjExX3Byb2JlcmVz cF9nZXQod3ZpZi0+d2Rldi0+aHcsIHd2aWYtPnZpZik7Ci0JaWYgKCFza2IpCi0JCXJldHVybiAt RU5PTUVNOwotCWhpZl9zZXRfdGVtcGxhdGVfZnJhbWUod3ZpZiwgc2tiLCBISUZfVE1QTFRfUFJC UkVTLAotCQkJICAgICAgIEFQSV9SQVRFX0lOREVYX0JfMU1CUFMpOwotCWRldl9rZnJlZV9za2Io c2tiKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgd2Z4X3NldF9tZnBfYXAoc3RydWN0 IHdmeF92aWYgKnd2aWYpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGllZWU4MDIxMV9iZWFj b25fZ2V0KHd2aWYtPndkZXYtPmh3LCB3dmlmLT52aWYpOwotCWNvbnN0IGludCBpZW9mZnNldCA9 IG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwgdS5iZWFjb24udmFyaWFibGUpOwotCWNv bnN0IHUxNiAqcHRyID0gKHUxNiAqKWNmZzgwMjExX2ZpbmRfaWUoV0xBTl9FSURfUlNOLAotCQkJ CQkJIHNrYi0+ZGF0YSArIGllb2Zmc2V0LAotCQkJCQkJIHNrYi0+bGVuIC0gaWVvZmZzZXQpOwot CWNvbnN0IGludCBwYWlyd2lzZV9jaXBoZXJfc3VpdGVfY291bnRfb2Zmc2V0ID0gOCAvIHNpemVv Zih1MTYpOwotCWNvbnN0IGludCBwYWlyd2lzZV9jaXBoZXJfc3VpdGVfc2l6ZSA9IDQgLyBzaXpl b2YodTE2KTsKLQljb25zdCBpbnQgYWttX3N1aXRlX3NpemUgPSA0IC8gc2l6ZW9mKHUxNik7Ci0K LQlpZiAocHRyKSB7Ci0JCXB0ciArPSBwYWlyd2lzZV9jaXBoZXJfc3VpdGVfY291bnRfb2Zmc2V0 OwotCQlpZiAoV0FSTl9PTihwdHIgPiAodTE2ICopc2tiX3RhaWxfcG9pbnRlcihza2IpKSkKLQkJ CXJldHVybjsKLQkJcHRyICs9IDEgKyBwYWlyd2lzZV9jaXBoZXJfc3VpdGVfc2l6ZSAqICpwdHI7 Ci0JCWlmIChXQVJOX09OKHB0ciA+ICh1MTYgKilza2JfdGFpbF9wb2ludGVyKHNrYikpKQotCQkJ cmV0dXJuOwotCQlwdHIgKz0gMSArIGFrbV9zdWl0ZV9zaXplICogKnB0cjsKLQkJaWYgKFdBUk5f T04ocHRyID4gKHUxNiAqKXNrYl90YWlsX3BvaW50ZXIoc2tiKSkpCi0JCQlyZXR1cm47Ci0JCWhp Zl9zZXRfbWZwKHd2aWYsICpwdHIgJiBCSVQoNyksICpwdHIgJiBCSVQoNikpOwotCX0KLX0KLQot aW50IHdmeF9zdGFydF9hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIx MV92aWYgKnZpZikKLXsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAq KXZpZi0+ZHJ2X3ByaXY7Ci0Jc3RydWN0IHdmeF9kZXYgKndkZXYgPSB3dmlmLT53ZGV2OwotCWlu dCByZXQ7Ci0KLQl3dmlmID0gIE5VTEw7Ci0Jd2hpbGUgKCh3dmlmID0gd3ZpZl9pdGVyYXRlKHdk ZXYsIHd2aWYpKSAhPSBOVUxMKQotCQl3ZnhfdXBkYXRlX3BtKHd2aWYpOwotCXd2aWYgPSAoc3Ry dWN0IHdmeF92aWYgKil2aWYtPmRydl9wcml2OwotCXdmeF91cGxvYWRfYXBfdGVtcGxhdGVzKHd2 aWYpOwotCXJldCA9IGhpZl9zdGFydCh3dmlmLCAmdmlmLT5ic3NfY29uZiwgd3ZpZi0+Y2hhbm5l bCk7Ci0JaWYgKHJldCA+IDApCi0JCXJldHVybiAtRUlPOwotCXdmeF9zZXRfbWZwX2FwKHd2aWYp OwotCXJldHVybiByZXQ7Ci19Ci0KLXZvaWQgd2Z4X3N0b3BfYXAoc3RydWN0IGllZWU4MDIxMV9o dyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCi17Ci0Jc3RydWN0IHdmeF92aWYgKnd2 aWYgPSAoc3RydWN0IHdmeF92aWYgKil2aWYtPmRydl9wcml2OwotCi0Jd2Z4X3Jlc2V0KHd2aWYp OwotfQotCi1zdGF0aWMgdm9pZCB3Znhfam9pbihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZikKLXsKLQlp bnQgcmV0OwotCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmNvbmYgPSAmd3ZpZi0+dmlmLT5i c3NfY29uZjsKLQlzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MgPSBOVUxMOwotCXU4IHNzaWRbSUVF RTgwMjExX01BWF9TU0lEX0xFTl07Ci0JY29uc3QgdTggKnNzaWRpZSA9IE5VTEw7Ci0JaW50IHNz aWRsZW4gPSAwOwotCi0Jd2Z4X3R4X2xvY2tfZmx1c2god3ZpZi0+d2Rldik7Ci0KLQlic3MgPSBj Zmc4MDIxMV9nZXRfYnNzKHd2aWYtPndkZXYtPmh3LT53aXBoeSwgd3ZpZi0+Y2hhbm5lbCwKLQkJ CSAgICAgICBjb25mLT5ic3NpZCwgTlVMTCwgMCwKLQkJCSAgICAgICBJRUVFODAyMTFfQlNTX1RZ UEVfQU5ZLCBJRUVFODAyMTFfUFJJVkFDWV9BTlkpOwotCWlmICghYnNzICYmICFjb25mLT5pYnNz X2pvaW5lZCkgewotCQl3ZnhfdHhfdW5sb2NrKHd2aWYtPndkZXYpOwotCQlyZXR1cm47Ci0JfQot Ci0JcmN1X3JlYWRfbG9jaygpOyAvLyBwcm90ZWN0IHNzaWRpZQotCWlmIChic3MpCi0JCXNzaWRp ZSA9IGllZWU4MDIxMV9ic3NfZ2V0X2llKGJzcywgV0xBTl9FSURfU1NJRCk7Ci0JaWYgKHNzaWRp ZSkgewotCQlzc2lkbGVuID0gc3NpZGllWzFdOwotCQlpZiAoc3NpZGxlbiA+IElFRUU4MDIxMV9N QVhfU1NJRF9MRU4pCi0JCQlzc2lkbGVuID0gSUVFRTgwMjExX01BWF9TU0lEX0xFTjsKLQkJbWVt Y3B5KHNzaWQsICZzc2lkaWVbMl0sIHNzaWRsZW4pOwotCX0KLQlyY3VfcmVhZF91bmxvY2soKTsK LQotCWNmZzgwMjExX3B1dF9ic3Mod3ZpZi0+d2Rldi0+aHctPndpcGh5LCBic3MpOwotCi0Jd3Zp Zi0+am9pbl9pbl9wcm9ncmVzcyA9IHRydWU7Ci0JcmV0ID0gaGlmX2pvaW4od3ZpZiwgY29uZiwg d3ZpZi0+Y2hhbm5lbCwgc3NpZCwgc3NpZGxlbik7Ci0JaWYgKHJldCkgewotCQlpZWVlODAyMTFf Y29ubmVjdGlvbl9sb3NzKHd2aWYtPnZpZik7Ci0JCXdmeF9yZXNldCh3dmlmKTsKLQl9IGVsc2Ug ewotCQkvKiBEdWUgdG8gYmVhY29uIGZpbHRlcmluZyBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZQot CQkgKiBBUCdzIGJlYWNvbiBpcyBub3Qga25vd24gZm9yIHRoZSBtYWM4MDIxMSBzdGFjay4KLQkJ ICogRGlzYWJsZSBmaWx0ZXJpbmcgdGVtcG9yYXJ5IHRvIG1ha2Ugc3VyZSB0aGUgc3RhY2sKLQkJ ICogcmVjZWl2ZXMgYXQgbGVhc3Qgb25lCi0JCSAqLwotCQl3ZnhfZmlsdGVyX2JlYWNvbih3dmlm LCBmYWxzZSk7Ci0JfQotCXdmeF90eF91bmxvY2sod3ZpZi0+d2Rldik7Ci19Ci0KLXN0YXRpYyB2 b2lkIHdmeF9qb2luX2ZpbmFsaXplKHN0cnVjdCB3ZnhfdmlmICp3dmlmLAotCQkJICAgICAgc3Ry dWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAq c3RhID0gTlVMTDsKLQlpbnQgYW1wZHVfZGVuc2l0eSA9IDA7Ci0JYm9vbCBncmVlbmZpZWxkID0g ZmFsc2U7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7IC8vIHByb3RlY3Qgc3RhCi0JaWYgKGluZm8tPmJz c2lkICYmICFpbmZvLT5pYnNzX2pvaW5lZCkKLQkJc3RhID0gaWVlZTgwMjExX2ZpbmRfc3RhKHd2 aWYtPnZpZiwgaW5mby0+YnNzaWQpOwotCWlmIChzdGEgJiYgc3RhLT5odF9jYXAuaHRfc3VwcG9y dGVkKQotCQlhbXBkdV9kZW5zaXR5ID0gc3RhLT5odF9jYXAuYW1wZHVfZGVuc2l0eTsKLQlpZiAo c3RhICYmIHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCAmJgotCSAgICAhKGluZm8tPmh0X29wZXJh dGlvbl9tb2RlICYgSUVFRTgwMjExX0hUX09QX01PREVfTk9OX0dGX1NUQV9QUlNOVCkpCi0JCWdy ZWVuZmllbGQgPSAhIShzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX0dSTl9GTEQp OwotCXJjdV9yZWFkX3VubG9jaygpOwotCi0Jd3ZpZi0+am9pbl9pbl9wcm9ncmVzcyA9IGZhbHNl OwotCWhpZl9zZXRfYXNzb2NpYXRpb25fbW9kZSh3dmlmLCBhbXBkdV9kZW5zaXR5LCBncmVlbmZp ZWxkLAotCQkJCSBpbmZvLT51c2Vfc2hvcnRfcHJlYW1ibGUpOwotCWhpZl9rZWVwX2FsaXZlX3Bl cmlvZCh3dmlmLCAwKTsKLQkvLyBiZWFjb25fbG9zc19jb3VudCBpcyBkZWZpbmVkIHRvIDcgaW4g bmV0L21hYzgwMjExL21sbWUuYy4gTGV0J3MgdXNlCi0JLy8gdGhlIHNhbWUgdmFsdWUuCi0JaGlm X3NldF9ic3NfcGFyYW1zKHd2aWYsIGluZm8tPmFpZCwgNyk7Ci0JaGlmX3NldF9iZWFjb25fd2Fr ZXVwX3BlcmlvZCh3dmlmLCAxLCAxKTsKLQl3ZnhfdXBkYXRlX3BtKHd2aWYpOwotfQotCi1pbnQg d2Z4X2pvaW5faWJzcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92 aWYgKnZpZikKLXsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXZp Zi0+ZHJ2X3ByaXY7Ci0KLQl3ZnhfdXBsb2FkX2FwX3RlbXBsYXRlcyh3dmlmKTsKLQl3Znhfam9p bih3dmlmKTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCB3ZnhfbGVhdmVfaWJzcyhzdHJ1Y3QgaWVl ZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKLXsKLQlzdHJ1Y3Qgd2Z4 X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7Ci0KLQl3ZnhfcmVz ZXQod3ZpZik7Ci19Ci0KLXN0YXRpYyB2b2lkIHdmeF9lbmFibGVfYmVhY29uKHN0cnVjdCB3Znhf dmlmICp3dmlmLCBib29sIGVuYWJsZSkKLXsKLQkvLyBEcml2ZXIgaGFzIENvbnRlbnQgQWZ0ZXIg RFRJTSBCZWFjb24gaW4gcXVldWUuIERyaXZlciBpcyB3YWl0aW5nIGZvcgotCS8vIGEgc2lnbmFs IGZyb20gdGhlIGZpcm13YXJlLiBTaW5jZSB3ZSBhcmUgZ29pbmcgdG8gc3RvcCB0byBzZW5kCi0J Ly8gYmVhY29ucywgdGhpcyBzaWduYWwgd2lsbCBuZXZlciBoYXBwZW5zLiBTZWUgYWxzbwotCS8v IHdmeF9zdXNwZW5kX3Jlc3VtZV9tYygpCi0JaWYgKCFlbmFibGUgJiYgd2Z4X3R4X3F1ZXVlc19o YXNfY2FiKHd2aWYpKSB7Ci0JCXd2aWYtPmFmdGVyX2R0aW1fdHhfYWxsb3dlZCA9IHRydWU7Ci0J CXdmeF9iaF9yZXF1ZXN0X3R4KHd2aWYtPndkZXYpOwotCX0KLQloaWZfYmVhY29uX3RyYW5zbWl0 KHd2aWYsIGVuYWJsZSk7Ci19Ci0KLXZvaWQgd2Z4X2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGll ZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCQkgIHN0cnVjdCBp ZWVlODAyMTFfYnNzX2NvbmYgKmluZm8sIHUzMiBjaGFuZ2VkKQotewotCXN0cnVjdCB3ZnhfZGV2 ICp3ZGV2ID0gaHctPnByaXY7Ci0Jc3RydWN0IHdmeF92aWYgKnd2aWYgPSAoc3RydWN0IHdmeF92 aWYgKil2aWYtPmRydl9wcml2OwotCWludCBpOwotCi0JbXV0ZXhfbG9jaygmd2Rldi0+Y29uZl9t dXRleCk7Ci0KLQlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JBU0lDX1JBVEVTIHx8Ci0JICAg IGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT05fSU5UIHx8Ci0JICAgIGNoYW5nZWQgJiBCU1Nf Q0hBTkdFRF9CU1NJRCkgewotCQlpZiAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJ T04pCi0JCQl3Znhfam9pbih3dmlmKTsKLQl9Ci0KLQlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VE X0FTU09DKSB7Ci0JCWlmIChpbmZvLT5hc3NvYyB8fCBpbmZvLT5pYnNzX2pvaW5lZCkKLQkJCXdm eF9qb2luX2ZpbmFsaXplKHd2aWYsIGluZm8pOwotCQllbHNlIGlmICghaW5mby0+YXNzb2MgJiYg dmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCi0JCQl3ZnhfcmVzZXQod3ZpZik7 Ci0JCWVsc2UKLQkJCWRldl93YXJuKHdkZXYtPmRldiwgIiVzOiBtaXN1bmRlcnN0b29kIGNoYW5n ZTogQVNTT0NcbiIsCi0JCQkJIF9fZnVuY19fKTsKLQl9Ci0KLQlpZiAoY2hhbmdlZCAmIEJTU19D SEFOR0VEX0JFQUNPTl9JTkZPKSB7Ci0JCWlmICh2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVf U1RBVElPTikKLQkJCWRldl93YXJuKHdkZXYtPmRldiwgIiVzOiBtaXN1bmRlcnN0b29kIGNoYW5n ZTogQkVBQ09OX0lORk9cbiIsCi0JCQkJIF9fZnVuY19fKTsKLQkJaGlmX3NldF9iZWFjb25fd2Fr ZXVwX3BlcmlvZCh3dmlmLCBpbmZvLT5kdGltX3BlcmlvZCwKLQkJCQkJICAgICBpbmZvLT5kdGlt X3BlcmlvZCk7Ci0JCS8vIFdlIHRlbXBvcmFyeSBmb3J3YXJkZWQgYmVhY29uIGZvciBqb2luIHBy b2Nlc3MuIEl0IGlzIG5vdyBubwotCQkvLyBtb3JlIG5lY2Vzc2FyeS4KLQkJd2Z4X2ZpbHRlcl9i ZWFjb24od3ZpZiwgdHJ1ZSk7Ci0JfQotCi0JaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9BUlBf RklMVEVSKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBISUZfTUFYX0FSUF9JUF9BRERSVEFCTEVfRU5U UklFUzsgaSsrKSB7Ci0JCQlfX2JlMzIgKmFycF9hZGRyID0gJmluZm8tPmFycF9hZGRyX2xpc3Rb aV07Ci0KLQkJCWlmIChpbmZvLT5hcnBfYWRkcl9jbnQgPiBISUZfTUFYX0FSUF9JUF9BRERSVEFC TEVfRU5UUklFUykKLQkJCQlhcnBfYWRkciA9IE5VTEw7Ci0JCQlpZiAoaSA+PSBpbmZvLT5hcnBf YWRkcl9jbnQpCi0JCQkJYXJwX2FkZHIgPSBOVUxMOwotCQkJaGlmX3NldF9hcnBfaXB2NF9maWx0 ZXIod3ZpZiwgaSwgYXJwX2FkZHIpOwotCQl9Ci0JfQotCi0JaWYgKGNoYW5nZWQgJiBCU1NfQ0hB TkdFRF9BUF9QUk9CRV9SRVNQIHx8Ci0JICAgIGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT04p Ci0JCXdmeF91cGxvYWRfYXBfdGVtcGxhdGVzKHd2aWYpOwotCi0JaWYgKGNoYW5nZWQgJiBCU1Nf Q0hBTkdFRF9CRUFDT05fRU5BQkxFRCkKLQkJd2Z4X2VuYWJsZV9iZWFjb24od3ZpZiwgaW5mby0+ ZW5hYmxlX2JlYWNvbik7Ci0KLQlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0tFRVBfQUxJVkUp Ci0JCWhpZl9rZWVwX2FsaXZlX3BlcmlvZCh3dmlmLCBpbmZvLT5tYXhfaWRsZV9wZXJpb2QgKgot CQkJCQkgICAgVVNFQ19QRVJfVFUgLyBVU0VDX1BFUl9NU0VDKTsKLQotCWlmIChjaGFuZ2VkICYg QlNTX0NIQU5HRURfRVJQX0NUU19QUk9UKQotCQloaWZfZXJwX3VzZV9wcm90ZWN0aW9uKHd2aWYs IGluZm8tPnVzZV9jdHNfcHJvdCk7Ci0KLQlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0VSUF9T TE9UKQotCQloaWZfc2xvdF90aW1lKHd2aWYsIGluZm8tPnVzZV9zaG9ydF9zbG90ID8gOSA6IDIw KTsKLQotCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQ1FNKQotCQloaWZfc2V0X3JjcGlfcnNz aV90aHJlc2hvbGQod3ZpZiwgaW5mby0+Y3FtX3Jzc2lfdGhvbGQsCi0JCQkJCSAgICBpbmZvLT5j cW1fcnNzaV9oeXN0KTsKLQotCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfVFhQT1dFUikKLQkJ aGlmX3NldF9vdXRwdXRfcG93ZXIod3ZpZiwgaW5mby0+dHhwb3dlcik7Ci0KLQlpZiAoY2hhbmdl ZCAmIEJTU19DSEFOR0VEX1BTKQotCQl3ZnhfdXBkYXRlX3BtKHd2aWYpOwotCi0JbXV0ZXhfdW5s b2NrKCZ3ZGV2LT5jb25mX211dGV4KTsKLX0KLQotc3RhdGljIGludCB3ZnhfdXBkYXRlX3RpbShz dHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZikKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXUxNiB0aW1f b2Zmc2V0LCB0aW1fbGVuZ3RoOwotCXU4ICp0aW1fcHRyOwotCi0Jc2tiID0gaWVlZTgwMjExX2Jl YWNvbl9nZXRfdGltKHd2aWYtPndkZXYtPmh3LCB3dmlmLT52aWYsCi0JCQkJICAgICAgICZ0aW1f b2Zmc2V0LCAmdGltX2xlbmd0aCk7Ci0JaWYgKCFza2IpCi0JCXJldHVybiAtRU5PRU5UOwotCXRp bV9wdHIgPSBza2ItPmRhdGEgKyB0aW1fb2Zmc2V0OwotCi0JaWYgKHRpbV9vZmZzZXQgJiYgdGlt X2xlbmd0aCA+PSA2KSB7Ci0JCS8qIElnbm9yZSBEVElNIGNvdW50IGZyb20gbWFjODAyMTE6Ci0J CSAqIGZpcm13YXJlIGhhbmRsZXMgRFRJTSBpbnRlcm5hbGx5LgotCQkgKi8KLQkJdGltX3B0clsy XSA9IDA7Ci0KLQkJLyogU2V0L3Jlc2V0IGFpZDAgYml0ICovCi0JCWlmICh3ZnhfdHhfcXVldWVz X2hhc19jYWIod3ZpZikpCi0JCQl0aW1fcHRyWzRdIHw9IDE7Ci0JCWVsc2UKLQkJCXRpbV9wdHJb NF0gJj0gfjE7Ci0JfQotCi0JaGlmX3VwZGF0ZV9pZV9iZWFjb24od3ZpZiwgdGltX3B0ciwgdGlt X2xlbmd0aCk7Ci0JZGV2X2tmcmVlX3NrYihza2IpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRp YyB2b2lkIHdmeF91cGRhdGVfdGltX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewot CXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3Znhfdmlm LCB1cGRhdGVfdGltX3dvcmspOwotCi0Jd2Z4X3VwZGF0ZV90aW0od3ZpZik7Ci19Ci0KLWludCB3 Znhfc2V0X3RpbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEg KnN0YSwgYm9vbCBzZXQpCi17Ci0Jc3RydWN0IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsKLQlz dHJ1Y3Qgd2Z4X3N0YV9wcml2ICpzdGFfZGV2ID0gKHN0cnVjdCB3Znhfc3RhX3ByaXYgKikmc3Rh LT5kcnZfcHJpdjsKLQlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IHdkZXZfdG9fd3ZpZih3ZGV2LCBz dGFfZGV2LT52aWZfaWQpOwotCi0JaWYgKCF3dmlmKSB7Ci0JCWRldl93YXJuKHdkZXYtPmRldiwg IiVzOiByZWNlaXZlZCBldmVudCBmb3Igbm9uLWV4aXN0ZW50IHZpZlxuIiwgX19mdW5jX18pOwot CQlyZXR1cm4gLUVJTzsKLQl9Ci0Jc2NoZWR1bGVfd29yaygmd3ZpZi0+dXBkYXRlX3RpbV93b3Jr KTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCB3Znhfc3VzcGVuZF9yZXN1bWVfbWMoc3RydWN0IHdm eF92aWYgKnd2aWYsIGVudW0gc3RhX25vdGlmeV9jbWQgbm90aWZ5X2NtZCkKLXsKLQlpZiAobm90 aWZ5X2NtZCAhPSBTVEFfTk9USUZZX0FXQUtFKQotCQlyZXR1cm47Ci0JV0FSTighd2Z4X3R4X3F1 ZXVlc19oYXNfY2FiKHd2aWYpLCAiaW5jb3JyZWN0IHNlcXVlbmNlIik7Ci0JV0FSTih3dmlmLT5h ZnRlcl9kdGltX3R4X2FsbG93ZWQsICJpbmNvcnJlY3Qgc2VxdWVuY2UiKTsKLQl3dmlmLT5hZnRl cl9kdGltX3R4X2FsbG93ZWQgPSB0cnVlOwotCXdmeF9iaF9yZXF1ZXN0X3R4KHd2aWYtPndkZXYp OwotfQotCi1pbnQgd2Z4X2FtcGR1X2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJ ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAotCQkgICAgIHN0cnVjdCBpZWVlODAyMTFf YW1wZHVfcGFyYW1zICpwYXJhbXMpCi17Ci0JLy8gQWdncmVnYXRpb24gaXMgaW1wbGVtZW50ZWQg ZnVsbHkgaW4gZmlybXdhcmUKLQlzd2l0Y2ggKHBhcmFtcy0+YWN0aW9uKSB7Ci0JY2FzZSBJRUVF ODAyMTFfQU1QRFVfUlhfU1RBUlQ6Ci0JY2FzZSBJRUVFODAyMTFfQU1QRFVfUlhfU1RPUDoKLQkJ Ly8gSnVzdCBhY2tub3dsZWRnZSBpdCB0byBlbmFibGUgZnJhbWUgcmUtb3JkZXJpbmcKLQkJcmV0 dXJuIDA7Ci0JZGVmYXVsdDoKLQkJLy8gTGVhdmUgdGhlIGZpcm13YXJlIGRvaW5nIGl0cyBidXNp bmVzcyBmb3IgdHggYWdncmVnYXRpb24KLQkJcmV0dXJuIC1FTk9UU1VQUDsKLQl9Ci19Ci0KLWlu dCB3ZnhfYWRkX2NoYW5jdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCSAgICBzdHJ1Y3Qg aWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZikKLXsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCB3 ZnhfcmVtb3ZlX2NoYW5jdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQlzdHJ1Y3QgaWVl ZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZikKLXsKLX0KLQotdm9pZCB3ZnhfY2hhbmdlX2NoYW5j dHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhf Y29uZiAqY29uZiwKLQkJCXUzMiBjaGFuZ2VkKQotewotfQotCi1pbnQgd2Z4X2Fzc2lnbl92aWZf Y2hhbmN0eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZp ZiwKLQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mKQotewotCXN0cnVj dCB3ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKLQlzdHJ1 Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoID0gY29uZi0+ZGVmLmNoYW47Ci0KLQlXQVJOKHd2aWYt PmNoYW5uZWwsICJjaGFubmVsIG92ZXJ3cml0ZSIpOwotCXd2aWYtPmNoYW5uZWwgPSBjaDsKLQot CXJldHVybiAwOwotfQotCi12b2lkIHdmeF91bmFzc2lnbl92aWZfY2hhbmN0eChzdHJ1Y3QgaWVl ZTgwMjExX2h3ICpodywKLQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCQkg ICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZikKLXsKLQlzdHJ1Y3Qgd2Z4 X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7Ci0Jc3RydWN0IGll ZWU4MDIxMV9jaGFubmVsICpjaCA9IGNvbmYtPmRlZi5jaGFuOwotCi0JV0FSTih3dmlmLT5jaGFu bmVsICE9IGNoLCAiY2hhbm5lbCBtaXNtYXRjaCIpOwotCXd2aWYtPmNoYW5uZWwgPSBOVUxMOwot fQotCi1pbnQgd2Z4X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQp Ci17Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCB3ZnhfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgw MjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKLXsKLQlpbnQgaSwgcmV0ID0g MDsKLQlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3LT5wcml2OwotCXN0cnVjdCB3ZnhfdmlmICp3 dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKLQotCXZpZi0+ZHJpdmVyX2Zs YWdzIHw9IElFRUU4MDIxMV9WSUZfQkVBQ09OX0ZJTFRFUiB8Ci0JCQkgICAgIElFRUU4MDIxMV9W SUZfU1VQUE9SVFNfVUFQU0QgfAotCQkJICAgICBJRUVFODAyMTFfVklGX1NVUFBPUlRTX0NRTV9S U1NJOwotCi0JbXV0ZXhfbG9jaygmd2Rldi0+Y29uZl9tdXRleCk7Ci0KLQlzd2l0Y2ggKHZpZi0+ dHlwZSkgewotCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQljYXNlIE5MODAyMTFfSUZU WVBFX0FESE9DOgotCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6Ci0JCWJyZWFrOwotCWRlZmF1bHQ6 Ci0JCW11dGV4X3VubG9jaygmd2Rldi0+Y29uZl9tdXRleCk7Ci0JCXJldHVybiAtRU9QTk9UU1VQ UDsKLQl9Ci0KLQkvLyBGSVhNRTogcHJlZmVyIHVzZSBvZiBjb250YWluZXJfb2YoKSB0byBnZXQg dmlmCi0Jd3ZpZi0+dmlmID0gdmlmOwotCXd2aWYtPndkZXYgPSB3ZGV2OwotCi0Jd3ZpZi0+bGlu a19pZF9tYXAgPSAxOyAvLyBsaW5rLWlkIDAgaXMgcmVzZXJ2ZWQgZm9yIG11bHRpY2FzdAotCUlO SVRfV09SSygmd3ZpZi0+dXBkYXRlX3RpbV93b3JrLCB3ZnhfdXBkYXRlX3RpbV93b3JrKTsKLQlJ TklUX0RFTEFZRURfV09SSygmd3ZpZi0+YmVhY29uX2xvc3Nfd29yaywgd2Z4X2JlYWNvbl9sb3Nz X3dvcmspOwotCi0JaW5pdF9jb21wbGV0aW9uKCZ3dmlmLT5zZXRfcG1fbW9kZV9jb21wbGV0ZSk7 Ci0JY29tcGxldGUoJnd2aWYtPnNldF9wbV9tb2RlX2NvbXBsZXRlKTsKLQlJTklUX1dPUksoJnd2 aWYtPnR4X3BvbGljeV91cGxvYWRfd29yaywgd2Z4X3R4X3BvbGljeV91cGxvYWRfd29yayk7Ci0K LQltdXRleF9pbml0KCZ3dmlmLT5zY2FuX2xvY2spOwotCWluaXRfY29tcGxldGlvbigmd3ZpZi0+ c2Nhbl9jb21wbGV0ZSk7Ci0JSU5JVF9XT1JLKCZ3dmlmLT5zY2FuX3dvcmssIHdmeF9od19zY2Fu X3dvcmspOwotCi0Jd2Z4X3R4X3F1ZXVlc19pbml0KHd2aWYpOwotCXdmeF90eF9wb2xpY3lfaW5p dCh3dmlmKTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdkZXYtPnZpZik7IGkrKykg ewotCQlpZiAoIXdkZXYtPnZpZltpXSkgewotCQkJd2Rldi0+dmlmW2ldID0gdmlmOwotCQkJd3Zp Zi0+aWQgPSBpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JV0FSTihpID09IEFSUkFZX1NJWkUod2Rl di0+dmlmKSwgInRyeSB0byBpbnN0YW50aWF0ZSBtb3JlIHZpZiB0aGFuIHN1cHBvcnRlZCIpOwot Ci0JaGlmX3NldF9tYWNhZGRyKHd2aWYsIHZpZi0+YWRkcik7Ci0KLQltdXRleF91bmxvY2soJndk ZXYtPmNvbmZfbXV0ZXgpOwotCi0Jd3ZpZiA9IE5VTEw7Ci0Jd2hpbGUgKCh3dmlmID0gd3ZpZl9p dGVyYXRlKHdkZXYsIHd2aWYpKSAhPSBOVUxMKSB7Ci0JCS8vIENvbWJvIG1vZGUgZG9lcyBub3Qg c3VwcG9ydCBCbG9jayBBY2tzLiBXZSBjYW4gcmUtZW5hYmxlIHRoZW0KLQkJaWYgKHd2aWZfY291 bnQod2RldikgPT0gMSkKLQkJCWhpZl9zZXRfYmxvY2tfYWNrX3BvbGljeSh3dmlmLCAweEZGLCAw eEZGKTsKLQkJZWxzZQotCQkJaGlmX3NldF9ibG9ja19hY2tfcG9saWN5KHd2aWYsIDB4MDAsIDB4 MDApOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi12b2lkIHdmeF9yZW1vdmVfaW50ZXJmYWNlKHN0 cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQotewotCXN0 cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gaHctPnByaXY7Ci0Jc3RydWN0IHdmeF92aWYgKnd2aWYgPSAo c3RydWN0IHdmeF92aWYgKil2aWYtPmRydl9wcml2OwotCi0Jd2FpdF9mb3JfY29tcGxldGlvbl90 aW1lb3V0KCZ3dmlmLT5zZXRfcG1fbW9kZV9jb21wbGV0ZSwgbXNlY3NfdG9famlmZmllcygzMDAp KTsKLQl3ZnhfdHhfcXVldWVzX2NoZWNrX2VtcHR5KHd2aWYpOwotCi0JbXV0ZXhfbG9jaygmd2Rl di0+Y29uZl9tdXRleCk7Ci0JV0FSTih3dmlmLT5saW5rX2lkX21hcCAhPSAxLCAiY29ycnVwdGVk IHN0YXRlIik7Ci0KLQloaWZfcmVzZXQod3ZpZiwgZmFsc2UpOwotCWhpZl9zZXRfbWFjYWRkcih3 dmlmLCBOVUxMKTsKLQl3ZnhfdHhfcG9saWN5X2luaXQod3ZpZik7Ci0KLQljYW5jZWxfZGVsYXll ZF93b3JrX3N5bmMoJnd2aWYtPmJlYWNvbl9sb3NzX3dvcmspOwotCXdkZXYtPnZpZlt3dmlmLT5p ZF0gPSBOVUxMOwotCXd2aWYtPnZpZiA9IE5VTEw7Ci0KLQltdXRleF91bmxvY2soJndkZXYtPmNv bmZfbXV0ZXgpOwotCi0Jd3ZpZiA9IE5VTEw7Ci0Jd2hpbGUgKCh3dmlmID0gd3ZpZl9pdGVyYXRl KHdkZXYsIHd2aWYpKSAhPSBOVUxMKSB7Ci0JCS8vIENvbWJvIG1vZGUgZG9lcyBub3Qgc3VwcG9y dCBCbG9jayBBY2tzLiBXZSBjYW4gcmUtZW5hYmxlIHRoZW0KLQkJaWYgKHd2aWZfY291bnQod2Rl dikgPT0gMSkKLQkJCWhpZl9zZXRfYmxvY2tfYWNrX3BvbGljeSh3dmlmLCAweEZGLCAweEZGKTsK LQkJZWxzZQotCQkJaGlmX3NldF9ibG9ja19hY2tfcG9saWN5KHd2aWYsIDB4MDAsIDB4MDApOwot CX0KLX0KLQotaW50IHdmeF9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKLXsKLQlyZXR1 cm4gMDsKLX0KLQotdm9pZCB3Znhfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKLXsKLQlz dHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3LT5wcml2OwotCi0JV0FSTl9PTighc2tiX3F1ZXVlX2Vt cHR5X2xvY2tsZXNzKCZ3ZGV2LT50eF9wZW5kaW5nKSk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJz L3N0YWdpbmcvd2Z4L3N0YS5oIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9zdGEuaApkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggZDdiNWRmNWVhNGU2Li4wMDAwMDAwMDAwMDAKLS0tIGEvZHJp dmVycy9zdGFnaW5nL3dmeC9zdGEuaAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8q IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KLS8qCi0gKiBJbXBsZW1l bnRhdGlvbiBvZiBtYWM4MDIxMSBBUEkuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAs IFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVy aWNzc29uCi0gKi8KLSNpZm5kZWYgV0ZYX1NUQV9ICi0jZGVmaW5lIFdGWF9TVEFfSAotCi0jaW5j bHVkZSA8bmV0L21hYzgwMjExLmg+Ci0KLXN0cnVjdCB3ZnhfZGV2Owotc3RydWN0IHdmeF92aWY7 Ci0KLXN0cnVjdCB3Znhfc3RhX3ByaXYgewotCWludCBsaW5rX2lkOwotCWludCB2aWZfaWQ7Ci19 OwotCi0vLyBtYWM4MDIxMSBpbnRlcmZhY2UKLWludCB3Znhfc3RhcnQoc3RydWN0IGllZWU4MDIx MV9odyAqaHcpOwotdm9pZCB3Znhfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Ci1pbnQg d2Z4X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpOwotaW50IHdm eF9zZXRfcnRzX3RocmVzaG9sZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIHZhbHVlKTsK LXZvaWQgd2Z4X3NldF9kZWZhdWx0X3VuaWNhc3Rfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3 LAotCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBpbnQgaWR4KTsKLXZvaWQgd2Z4X2Nv bmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHVuc2lnbmVkIGludCBjaGFu Z2VkX2ZsYWdzLAotCQkJICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLCB1NjQgdW51c2VkKTsK LQotaW50IHdmeF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qg aWVlZTgwMjExX3ZpZiAqdmlmKTsKLXZvaWQgd2Z4X3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGll ZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOwotaW50IHdmeF9zdGFy dF9hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7 Ci12b2lkIHdmeF9zdG9wX2FwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgw MjExX3ZpZiAqdmlmKTsKLWludCB3Znhfam9pbl9pYnNzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3 LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKLXZvaWQgd2Z4X2xlYXZlX2lic3Moc3RydWN0 IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOwotaW50IHdmeF9j b25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlm LAotCQl1MTYgcXVldWUsIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpw YXJhbXMpOwotdm9pZCB3ZnhfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpo dywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJCSAgc3RydWN0IGllZWU4MDIxMV9ic3Nf Y29uZiAqaW5mbywgdTMyIGNoYW5nZWQpOwotaW50IHdmeF9zdGFfYWRkKHN0cnVjdCBpZWVlODAy MTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAotCQlzdHJ1Y3QgaWVlZTgwMjEx X3N0YSAqc3RhKTsKLWludCB3Znhfc3RhX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywg c3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0 YSk7Ci12b2lkIHdmeF9zdGFfbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qg aWVlZTgwMjExX3ZpZiAqdmlmLAotCQkgICAgZW51bSBzdGFfbm90aWZ5X2NtZCBjbWQsIHN0cnVj dCBpZWVlODAyMTFfc3RhICpzdGEpOwotaW50IHdmeF9zZXRfdGltKHN0cnVjdCBpZWVlODAyMTFf aHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCBib29sIHNldCk7Ci1pbnQgd2Z4X2Ft cGR1X2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYg KnZpZiwKLQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2FtcGR1X3BhcmFtcyAqcGFyYW1zKTsKLWlu dCB3ZnhfYWRkX2NoYW5jdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCSAgICBzdHJ1Y3Qg aWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZik7Ci12b2lkIHdmeF9yZW1vdmVfY2hhbmN0eChz dHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25m ICpjb25mKTsKLXZvaWQgd2Z4X2NoYW5nZV9jaGFuY3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3 LAotCQkJc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYsIHUzMiBjaGFuZ2VkKTsK LWludCB3ZnhfYXNzaWduX3ZpZl9jaGFuY3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1 Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAotCQkJICAgc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2Nv bmYgKmNvbmYpOwotdm9pZCB3ZnhfdW5hc3NpZ25fdmlmX2NoYW5jdHgoc3RydWN0IGllZWU4MDIx MV9odyAqaHcsCi0JCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAotCQkJICAgICAg c3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYpOwotCi0vLyBXU00gQ2FsbGJhY2tz Ci12b2lkIHdmeF9jb29saW5nX3RpbWVvdXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmsp Owotdm9pZCB3Znhfc3VzcGVuZF9ob3RfZGV2KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBlbnVtIHN0 YV9ub3RpZnlfY21kIGNtZCk7Ci12b2lkIHdmeF9zdXNwZW5kX3Jlc3VtZV9tYyhzdHJ1Y3Qgd2Z4 X3ZpZiAqd3ZpZiwgZW51bSBzdGFfbm90aWZ5X2NtZCBjbWQpOwotdm9pZCB3ZnhfZXZlbnRfcmVw b3J0X3Jzc2koc3RydWN0IHdmeF92aWYgKnd2aWYsIHU4IHJhd19yY3BpX3Jzc2kpOwotaW50IHdm eF91cGRhdGVfcG0oc3RydWN0IHdmeF92aWYgKnd2aWYpOwotCi0vLyBPdGhlciBIZWxwZXJzCi12 b2lkIHdmeF9yZXNldChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZik7Ci11MzIgd2Z4X3JhdGVfbWFza190 b19odyhzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIHJhdGVzKTsKLQotI2VuZGlmIC8qIFdGWF9T VEFfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC90cmFjZXMuaCBiL2RyaXZl cnMvc3RhZ2luZy93ZngvdHJhY2VzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUz NGM3YTUzOGM2NS4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZngvdHJhY2Vz LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MDEgKzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAtb25seSAqLwotLyoKLSAqIFRyYWNlcG9pbnRzIGRlZmluaXRpb25zLgot ICoKLSAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwLCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5j LgotICovCi0KLSN1bmRlZiBUUkFDRV9TWVNURU0KLSNkZWZpbmUgVFJBQ0VfU1lTVEVNIHdmeAot Ci0jaWYgIWRlZmluZWQoX1dGWF9UUkFDRV9IKSB8fCBkZWZpbmVkKFRSQUNFX0hFQURFUl9NVUxU SV9SRUFEKQotI2RlZmluZSBfV0ZYX1RSQUNFX0gKLQotI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9p bnQuaD4KLSNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KLQotI2luY2x1ZGUgImJ1cy5oIgotI2lu Y2x1ZGUgImhpZl9hcGlfY21kLmgiCi0jaW5jbHVkZSAiaGlmX2FwaV9taWIuaCIKLQotLyogVGhl IGhlbGwgYmVsb3cgbmVlZCBzb21lIGV4cGxhbmF0aW9ucy4gRm9yIGVhY2ggc3ltYm9saWMgbnVt YmVyLCB3ZSBuZWVkIHRvCi0gKiBkZWZpbmUgaXQgd2l0aCBUUkFDRV9ERUZJTkVfRU5VTSgpIGFu ZCBpbiBhIGxpc3QgZm9yIF9fcHJpbnRfc3ltYm9saWMuCi0gKgotICogICAxLiBEZWZpbmUgYSBu ZXcgbWFjcm8gdGhhdCBjYWxsIFRSQUNFX0RFRklORV9FTlVNKCk6Ci0gKgotICogICAgICAgICAg I2RlZmluZSB4eHhfbmFtZShzeW0pIFRSQUNFX0RFRklORV9FTlVNKHN5bSk7Ci0gKgotICogICAy LiBEZWZpbmUgbGlzdCBvZiBhbGwgc3ltYm9sczoKLSAqCi0gKiAgICAgICAgICAjZGVmaW5lIGxp c3RfbmFtZXMgICAgIFwKLSAqICAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgXAotICog ICAgICAgICAgICAgeHh4X25hbWUoWFhYKSAgICAgICBcCi0gKiAgICAgICAgICAgICAuLi4KLSAq Ci0gKiAgIDMuIEluc3RhbnRpYXRlIHRoYXQgbGlzdF9uYW1lczoKLSAqCi0gKiAgICAgICAgICBs aXN0X25hbWVzCi0gKgotICogICA0LiBSZWRlZmluZSB4eHhfbmFtZSgpIGFzIGFuIGVudHJ5IG9m IGFycmF5IGZvciBfX3ByaW50X3N5bWJvbGljKCkKLSAqCi0gKiAgICAgICAgICAjdW5kZWYgeHh4 X25hbWUKLSAqICAgICAgICAgICNkZWZpbmUgeHh4X25hbWUobXNnKSB7IG1zZywgI21zZyB9LAot ICoKLSAqICAgNS4gbGlzdF9uYW1lIGNhbiBub3cgbmVhcmx5IGJlIHVzZWQgd2l0aCBfX3ByaW50 X3N5bWJvbGljKCkgYnV0LAotICogICAgICBfX3ByaW50X3N5bWJvbGljKCkgZGlzbGlrZSBsYXN0 IGNvbW1hIG9mIGxpc3QuIFNvIHdlIGRlZmluZSBhIG5ldyBsaXN0Ci0gKiAgICAgIHdpdGggYSBk dW1teSBlbGVtZW50OgotICoKLSAqICAgICAgICAgICNkZWZpbmUgbGlzdF9mb3JfcHJpbnRfc3lt Ym9saWMgbGlzdF9uYW1lcyB7IC0xLCBOVUxMIH0KLSAqLwotCi0jZGVmaW5lIF9oaWZfbXNnX2xp c3QgICAgICAgICAgICAgICAgICAgICAgIFwKLQloaWZfY25mX25hbWUoQUREX0tFWSkgICAgICAg ICAgICAgICBcCi0JaGlmX2NuZl9uYW1lKEJFQUNPTl9UUkFOU01JVCkgICAgICAgXAotCWhpZl9j bmZfbmFtZShFRENBX1FVRVVFX1BBUkFNUykgICAgIFwKLQloaWZfY25mX25hbWUoSk9JTikgICAg ICAgICAgICAgICAgICBcCi0JaGlmX2NuZl9uYW1lKE1BUF9MSU5LKSAgICAgICAgICAgICAgXAot CWhpZl9jbmZfbmFtZShSRUFEX01JQikgICAgICAgICAgICAgIFwKLQloaWZfY25mX25hbWUoUkVN T1ZFX0tFWSkgICAgICAgICAgICBcCi0JaGlmX2NuZl9uYW1lKFJFU0VUKSAgICAgICAgICAgICAg ICAgXAotCWhpZl9jbmZfbmFtZShTRVRfQlNTX1BBUkFNUykgICAgICAgIFwKLQloaWZfY25mX25h bWUoU0VUX1BNX01PREUpICAgICAgICAgICBcCi0JaGlmX2NuZl9uYW1lKFNUQVJUKSAgICAgICAg ICAgICAgICAgXAotCWhpZl9jbmZfbmFtZShTVEFSVF9TQ0FOKSAgICAgICAgICAgIFwKLQloaWZf Y25mX25hbWUoU1RPUF9TQ0FOKSAgICAgICAgICAgICBcCi0JaGlmX2NuZl9uYW1lKFRYKSAgICAg ICAgICAgICAgICAgICAgXAotCWhpZl9jbmZfbmFtZShNVUxUSV9UUkFOU01JVCkgICAgICAgIFwK LQloaWZfY25mX25hbWUoVVBEQVRFX0lFKSAgICAgICAgICAgICBcCi0JaGlmX2NuZl9uYW1lKFdS SVRFX01JQikgICAgICAgICAgICAgXAotCWhpZl9jbmZfbmFtZShDT05GSUdVUkFUSU9OKSAgICAg ICAgIFwKLQloaWZfY25mX25hbWUoQ09OVFJPTF9HUElPKSAgICAgICAgICBcCi0JaGlmX2NuZl9u YW1lKFBSRVZFTlRfUk9MTEJBQ0spICAgICAgXAotCWhpZl9jbmZfbmFtZShTRVRfU0xfTUFDX0tF WSkgICAgICAgIFwKLQloaWZfY25mX25hbWUoU0xfQ09ORklHVVJFKSAgICAgICAgICBcCi0JaGlm X2NuZl9uYW1lKFNMX0VYQ0hBTkdFX1BVQl9LRVlTKSAgXAotCWhpZl9jbmZfbmFtZShTSFVUX0RP V04pICAgICAgICAgICAgIFwKLQloaWZfaW5kX25hbWUoRVZFTlQpICAgICAgICAgICAgICAgICBc Ci0JaGlmX2luZF9uYW1lKEpPSU5fQ09NUExFVEUpICAgICAgICAgXAotCWhpZl9pbmRfbmFtZShS WCkgICAgICAgICAgICAgICAgICAgIFwKLQloaWZfaW5kX25hbWUoU0NBTl9DTVBMKSAgICAgICAg ICAgICBcCi0JaGlmX2luZF9uYW1lKFNFVF9QTV9NT0RFX0NNUEwpICAgICAgXAotCWhpZl9pbmRf bmFtZShTVVNQRU5EX1JFU1VNRV9UWCkgICAgIFwKLQloaWZfaW5kX25hbWUoU0xfRVhDSEFOR0Vf UFVCX0tFWVMpICBcCi0JaGlmX2luZF9uYW1lKEVSUk9SKSAgICAgICAgICAgICAgICAgXAotCWhp Zl9pbmRfbmFtZShFWENFUFRJT04pICAgICAgICAgICAgIFwKLQloaWZfaW5kX25hbWUoR0VORVJJ QykgICAgICAgICAgICAgICBcCi0JaGlmX2luZF9uYW1lKFdBS0VVUCkgICAgICAgICAgICAgICAg XAotCWhpZl9pbmRfbmFtZShTVEFSVFVQKQotCi0jZGVmaW5lIGhpZl9tc2dfbGlzdF9lbnVtIF9o aWZfbXNnX2xpc3QKLQotI3VuZGVmIGhpZl9jbmZfbmFtZQotI3VuZGVmIGhpZl9pbmRfbmFtZQot I2RlZmluZSBoaWZfY25mX25hbWUobXNnKSBUUkFDRV9ERUZJTkVfRU5VTShISUZfQ05GX0lEXyMj bXNnKTsKLSNkZWZpbmUgaGlmX2luZF9uYW1lKG1zZykgVFJBQ0VfREVGSU5FX0VOVU0oSElGX0lO RF9JRF8jI21zZyk7Ci1oaWZfbXNnX2xpc3RfZW51bQotI3VuZGVmIGhpZl9jbmZfbmFtZQotI3Vu ZGVmIGhpZl9pbmRfbmFtZQotI2RlZmluZSBoaWZfY25mX25hbWUobXNnKSB7IEhJRl9DTkZfSURf IyNtc2csICNtc2cgfSwKLSNkZWZpbmUgaGlmX2luZF9uYW1lKG1zZykgeyBISUZfSU5EX0lEXyMj bXNnLCAjbXNnIH0sCi0jZGVmaW5lIGhpZl9tc2dfbGlzdCBoaWZfbXNnX2xpc3RfZW51bSB7IC0x LCBOVUxMIH0KLQotI2RlZmluZSBfaGlmX21pYl9saXN0ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0JaGlmX21pYl9uYW1lKEFSUF9JUF9BRERSRVNTRVNfVEFCTEUpICAgICAgICAg XAotCWhpZl9taWJfbmFtZShBUlBfS0VFUF9BTElWRV9QRVJJT0QpICAgICAgICAgIFwKLQloaWZf bWliX25hbWUoQkVBQ09OX0ZJTFRFUl9FTkFCTEUpICAgICAgICAgICBcCi0JaGlmX21pYl9uYW1l KEJFQUNPTl9GSUxURVJfVEFCTEUpICAgICAgICAgICAgXAotCWhpZl9taWJfbmFtZShCRUFDT05f U1RBVFMpICAgICAgICAgICAgICAgICAgIFwKLQloaWZfbWliX25hbWUoQkVBQ09OX1dBS0VVUF9Q RVJJT0QpICAgICAgICAgICBcCi0JaGlmX21pYl9uYW1lKEJMT0NLX0FDS19QT0xJQ1kpICAgICAg ICAgICAgICAgXAotCWhpZl9taWJfbmFtZShDQ0FfQ09ORklHKSAgICAgICAgICAgICAgICAgICAg IFwKLQloaWZfbWliX25hbWUoQ09ORklHX0RBVEFfRklMVEVSKSAgICAgICAgICAgICBcCi0JaGlm X21pYl9uYW1lKENPVU5URVJTX1RBQkxFKSAgICAgICAgICAgICAgICAgXAotCWhpZl9taWJfbmFt ZShDVVJSRU5UX1RYX1BPV0VSX0xFVkVMKSAgICAgICAgIFwKLQloaWZfbWliX25hbWUoRE9UMTFf TUFDX0FERFJFU1MpICAgICAgICAgICAgICBcCi0JaGlmX21pYl9uYW1lKERPVDExX01BWF9SRUNF SVZFX0xJRkVUSU1FKSAgICAgXAotCWhpZl9taWJfbmFtZShET1QxMV9NQVhfVFJBTlNNSVRfTVNE VV9MSUZFVElNRSkgXAotCWhpZl9taWJfbmFtZShET1QxMV9SVFNfVEhSRVNIT0xEKSAgICAgICAg ICAgIFwKLQloaWZfbWliX25hbWUoRE9UMTFfV0VQX0RFRkFVTFRfS0VZX0lEKSAgICAgICBcCi0J aGlmX21pYl9uYW1lKEVUSEVSVFlQRV9EQVRBRlJBTUVfQ09ORElUSU9OKSAgXAotCWhpZl9taWJf bmFtZShFWFRFTkRFRF9DT1VOVEVSU19UQUJMRSkgICAgICAgIFwKLQloaWZfbWliX25hbWUoR0xf QkxPQ0tfQUNLX0lORk8pICAgICAgICAgICAgICBcCi0JaGlmX21pYl9uYW1lKEdMX09QRVJBVElP TkFMX1BPV0VSX01PREUpICAgICAgXAotCWhpZl9taWJfbmFtZShHTF9TRVRfTVVMVElfTVNHKSAg ICAgICAgICAgICAgIFwKLQloaWZfbWliX25hbWUoR1JQX1NFUV9DT1VOVEVSKSAgICAgICAgICAg ICAgICBcCi0JaGlmX21pYl9uYW1lKElOQUNUSVZJVFlfVElNRVIpICAgICAgICAgICAgICAgXAot CWhpZl9taWJfbmFtZShJTlRFUkZBQ0VfUFJPVEVDVElPTikgICAgICAgICAgIFwKLQloaWZfbWli X25hbWUoSVBWNF9BRERSX0RBVEFGUkFNRV9DT05ESVRJT04pICBcCi0JaGlmX21pYl9uYW1lKElQ VjZfQUREUl9EQVRBRlJBTUVfQ09ORElUSU9OKSAgXAotCWhpZl9taWJfbmFtZShLRUVQX0FMSVZF X1BFUklPRCkgICAgICAgICAgICAgIFwKLQloaWZfbWliX25hbWUoTUFDX0FERFJfREFUQUZSQU1F X0NPTkRJVElPTikgICBcCi0JaGlmX21pYl9uYW1lKE1BR0lDX0RBVEFGUkFNRV9DT05ESVRJT04p ICAgICAgXAotCWhpZl9taWJfbmFtZShNQVhfVFhfUE9XRVJfTEVWRUwpICAgICAgICAgICAgIFwK LQloaWZfbWliX25hbWUoTk9OX0VSUF9QUk9URUNUSU9OKSAgICAgICAgICAgICBcCi0JaGlmX21p Yl9uYW1lKE5TX0lQX0FERFJFU1NFU19UQUJMRSkgICAgICAgICAgXAotCWhpZl9taWJfbmFtZShP VkVSUklERV9JTlRFUk5BTF9UWF9SQVRFKSAgICAgIFwKLQloaWZfbWliX25hbWUoUE9SVF9EQVRB RlJBTUVfQ09ORElUSU9OKSAgICAgICBcCi0JaGlmX21pYl9uYW1lKFBST1RFQ1RFRF9NR01UX1BP TElDWSkgICAgICAgICAgXAotCWhpZl9taWJfbmFtZShSQ1BJX1JTU0lfVEhSRVNIT0xEKSAgICAg ICAgICAgIFwKLQloaWZfbWliX25hbWUoUlhfRklMVEVSKSAgICAgICAgICAgICAgICAgICAgICBc Ci0JaGlmX21pYl9uYW1lKFNFVF9BU1NPQ0lBVElPTl9NT0RFKSAgICAgICAgICAgXAotCWhpZl9t aWJfbmFtZShTRVRfREFUQV9GSUxURVJJTkcpICAgICAgICAgICAgIFwKLQloaWZfbWliX25hbWUo U0VUX0hUX1BST1RFQ1RJT04pICAgICAgICAgICAgICBcCi0JaGlmX21pYl9uYW1lKFNFVF9UWF9S QVRFX1JFVFJZX1BPTElDWSkgICAgICAgXAotCWhpZl9taWJfbmFtZShTRVRfVUFQU0RfSU5GT1JN QVRJT04pICAgICAgICAgIFwKLQloaWZfbWliX25hbWUoU0xPVF9USU1FKSAgICAgICAgICAgICAg ICAgICAgICBcCi0JaGlmX21pYl9uYW1lKFNUQVRJU1RJQ1NfVEFCTEUpICAgICAgICAgICAgICAg XAotCWhpZl9taWJfbmFtZShURU1QTEFURV9GUkFNRSkgICAgICAgICAgICAgICAgIFwKLQloaWZf bWliX25hbWUoVFNGX0NPVU5URVIpICAgICAgICAgICAgICAgICAgICBcCi0JaGlmX21pYl9uYW1l KFVDX01DX0JDX0RBVEFGUkFNRV9DT05ESVRJT04pCi0KLSNkZWZpbmUgaGlmX21pYl9saXN0X2Vu dW0gX2hpZl9taWJfbGlzdAotCi0jdW5kZWYgaGlmX21pYl9uYW1lCi0jZGVmaW5lIGhpZl9taWJf bmFtZShtaWIpIFRSQUNFX0RFRklORV9FTlVNKEhJRl9NSUJfSURfIyNtaWIpOwotaGlmX21pYl9s aXN0X2VudW0KLSN1bmRlZiBoaWZfbWliX25hbWUKLSNkZWZpbmUgaGlmX21pYl9uYW1lKG1pYikg eyBISUZfTUlCX0lEXyMjbWliLCAjbWliIH0sCi0jZGVmaW5lIGhpZl9taWJfbGlzdCBoaWZfbWli X2xpc3RfZW51bSB7IC0xLCBOVUxMIH0KLQotREVDTEFSRV9FVkVOVF9DTEFTUyhoaWZfZGF0YSwK LQlUUF9QUk9UTyhjb25zdCBzdHJ1Y3QgaGlmX21zZyAqaGlmLCBpbnQgdHhfZmlsbF9sZXZlbCwg Ym9vbCBpc19yZWN2KSwKLQlUUF9BUkdTKGhpZiwgdHhfZmlsbF9sZXZlbCwgaXNfcmVjdiksCi0J VFBfU1RSVUNUX19lbnRyeSgKLQkJX19maWVsZChpbnQsIHR4X2ZpbGxfbGV2ZWwpCi0JCV9fZmll bGQoaW50LCBtc2dfaWQpCi0JCV9fZmllbGQoY29uc3QgY2hhciAqLCBtc2dfdHlwZSkKLQkJX19m aWVsZChpbnQsIG1zZ19sZW4pCi0JCV9fZmllbGQoaW50LCBidWZfbGVuKQotCQlfX2ZpZWxkKGlu dCwgaWZfaWQpCi0JCV9fZmllbGQoaW50LCBtaWIpCi0JCV9fYXJyYXkodTgsIGJ1ZiwgMTI4KQot CSksCi0JVFBfZmFzdF9hc3NpZ24oCi0JCWludCBoZWFkZXJfbGVuOwotCi0JCV9fZW50cnktPnR4 X2ZpbGxfbGV2ZWwgPSB0eF9maWxsX2xldmVsOwotCQlfX2VudHJ5LT5tc2dfbGVuID0gbGUxNl90 b19jcHUoaGlmLT5sZW4pOwotCQlfX2VudHJ5LT5tc2dfaWQgPSBoaWYtPmlkOwotCQlfX2VudHJ5 LT5pZl9pZCA9IGhpZi0+aW50ZXJmYWNlOwotCQlpZiAoaXNfcmVjdikKLQkJCV9fZW50cnktPm1z Z190eXBlID0gX19lbnRyeS0+bXNnX2lkICYgMHg4MCA/ICJJTkQiIDogIkNORiI7Ci0JCWVsc2UK LQkJCV9fZW50cnktPm1zZ190eXBlID0gIlJFUSI7Ci0JCWlmICghaXNfcmVjdiAmJgotCQkgICAg KF9fZW50cnktPm1zZ19pZCA9PSBISUZfUkVRX0lEX1JFQURfTUlCIHx8Ci0JCSAgICAgX19lbnRy eS0+bXNnX2lkID09IEhJRl9SRVFfSURfV1JJVEVfTUlCKSkgewotCQkJX19lbnRyeS0+bWliID0g bGUxNl90b19jcHVwKChfX2xlMTYgKiloaWYtPmJvZHkpOwotCQkJaGVhZGVyX2xlbiA9IDQ7Ci0J CX0gZWxzZSB7Ci0JCQlfX2VudHJ5LT5taWIgPSAtMTsKLQkJCWhlYWRlcl9sZW4gPSAwOwotCQl9 Ci0JCV9fZW50cnktPmJ1Zl9sZW4gPSBtaW5fdChpbnQsIF9fZW50cnktPm1zZ19sZW4sCi0JCQkJ CSBzaXplb2YoX19lbnRyeS0+YnVmKSkKLQkJCQkgICAtIHNpemVvZihzdHJ1Y3QgaGlmX21zZykg LSBoZWFkZXJfbGVuOwotCQltZW1jcHkoX19lbnRyeS0+YnVmLCBoaWYtPmJvZHkgKyBoZWFkZXJf bGVuLCBfX2VudHJ5LT5idWZfbGVuKTsKLQkpLAotCVRQX3ByaW50aygiJWQ6JWQ6JXNfJXMlcyVz OiAlcyVzICglZCBieXRlcykiLAotCQlfX2VudHJ5LT50eF9maWxsX2xldmVsLAotCQlfX2VudHJ5 LT5pZl9pZCwKLQkJX19lbnRyeS0+bXNnX3R5cGUsCi0JCV9fcHJpbnRfc3ltYm9saWMoX19lbnRy eS0+bXNnX2lkLCBoaWZfbXNnX2xpc3QpLAotCQlfX2VudHJ5LT5taWIgIT0gLTEgPyAiLyIgOiAi IiwKLQkJX19lbnRyeS0+bWliICE9IC0xID8gX19wcmludF9zeW1ib2xpYyhfX2VudHJ5LT5taWIs IGhpZl9taWJfbGlzdCkgOiAiIiwKLQkJX19wcmludF9oZXgoX19lbnRyeS0+YnVmLCBfX2VudHJ5 LT5idWZfbGVuKSwKLQkJX19lbnRyeS0+bXNnX2xlbiA+IHNpemVvZihfX2VudHJ5LT5idWYpID8g IiAuLi4iIDogIiIsCi0JCV9fZW50cnktPm1zZ19sZW4KLQkpCi0pOwotREVGSU5FX0VWRU5UKGhp Zl9kYXRhLCBoaWZfc2VuZCwKLQlUUF9QUk9UTyhjb25zdCBzdHJ1Y3QgaGlmX21zZyAqaGlmLCBp bnQgdHhfZmlsbF9sZXZlbCwgYm9vbCBpc19yZWN2KSwKLQlUUF9BUkdTKGhpZiwgdHhfZmlsbF9s ZXZlbCwgaXNfcmVjdikpOwotI2RlZmluZSBfdHJhY2VfaGlmX3NlbmQoaGlmLCB0eF9maWxsX2xl dmVsKVwKLQl0cmFjZV9oaWZfc2VuZChoaWYsIHR4X2ZpbGxfbGV2ZWwsIGZhbHNlKQotREVGSU5F X0VWRU5UKGhpZl9kYXRhLCBoaWZfcmVjdiwKLQlUUF9QUk9UTyhjb25zdCBzdHJ1Y3QgaGlmX21z ZyAqaGlmLCBpbnQgdHhfZmlsbF9sZXZlbCwgYm9vbCBpc19yZWN2KSwKLQlUUF9BUkdTKGhpZiwg dHhfZmlsbF9sZXZlbCwgaXNfcmVjdikpOwotI2RlZmluZSBfdHJhY2VfaGlmX3JlY3YoaGlmLCB0 eF9maWxsX2xldmVsKVwKLQl0cmFjZV9oaWZfcmVjdihoaWYsIHR4X2ZpbGxfbGV2ZWwsIHRydWUp Ci0KLSNkZWZpbmUgd2Z4X3JlZ19saXN0X2VudW0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0Jd2Z4X3JlZ19uYW1lKFdGWF9SRUdfQ09ORklHLCAgICAgICAiQ09ORklHIikgICAg ICBcCi0Jd2Z4X3JlZ19uYW1lKFdGWF9SRUdfQ09OVFJPTCwgICAgICAiQ09OVFJPTCIpICAgICBc Ci0Jd2Z4X3JlZ19uYW1lKFdGWF9SRUdfSU5fT1VUX1FVRVVFLCAiUVVFVUUiKSAgICAgICBcCi0J d2Z4X3JlZ19uYW1lKFdGWF9SRUdfQUhCX0RQT1JULCAgICAiQUhCIikgICAgICAgICBcCi0Jd2Z4 X3JlZ19uYW1lKFdGWF9SRUdfQkFTRV9BRERSLCAgICAiQkFTRV9BRERSIikgICBcCi0Jd2Z4X3Jl Z19uYW1lKFdGWF9SRUdfU1JBTV9EUE9SVCwgICAiU1JBTSIpICAgICAgICBcCi0Jd2Z4X3JlZ19u YW1lKFdGWF9SRUdfU0VUX0dFTl9SX1csICAiU0VUX0dFTl9SX1ciKSBcCi0Jd2Z4X3JlZ19uYW1l KFdGWF9SRUdfRlJBTUVfT1VULCAgICAiRlJBTUVfT1VUIikKLQotI3VuZGVmIHdmeF9yZWdfbmFt ZQotI2RlZmluZSB3ZnhfcmVnX25hbWUoc3ltLCBuYW1lKSBUUkFDRV9ERUZJTkVfRU5VTShzeW0p Owotd2Z4X3JlZ19saXN0X2VudW0KLSN1bmRlZiB3ZnhfcmVnX25hbWUKLSNkZWZpbmUgd2Z4X3Jl Z19uYW1lKHN5bSwgbmFtZSkgeyBzeW0sIG5hbWUgfSwKLSNkZWZpbmUgd2Z4X3JlZ19saXN0IHdm eF9yZWdfbGlzdF9lbnVtIHsgLTEsIE5VTEwgfQotCi1ERUNMQVJFX0VWRU5UX0NMQVNTKGlvX2Rh dGEsCi0JVFBfUFJPVE8oaW50IHJlZywgaW50IGFkZHIsIGNvbnN0IHZvaWQgKmlvX2J1Ziwgc2l6 ZV90IGxlbiksCi0JVFBfQVJHUyhyZWcsIGFkZHIsIGlvX2J1ZiwgbGVuKSwKLQlUUF9TVFJVQ1Rf X2VudHJ5KAotCQlfX2ZpZWxkKGludCwgcmVnKQotCQlfX2ZpZWxkKGludCwgYWRkcikKLQkJX19m aWVsZChpbnQsIG1zZ19sZW4pCi0JCV9fZmllbGQoaW50LCBidWZfbGVuKQotCQlfX2FycmF5KHU4 LCBidWYsIDMyKQotCQlfX2FycmF5KHU4LCBhZGRyX3N0ciwgMTApCi0JKSwKLQlUUF9mYXN0X2Fz c2lnbigKLQkJX19lbnRyeS0+cmVnID0gcmVnOwotCQlfX2VudHJ5LT5hZGRyID0gYWRkcjsKLQkJ X19lbnRyeS0+bXNnX2xlbiA9IGxlbjsKLQkJX19lbnRyeS0+YnVmX2xlbiA9IG1pbl90KGludCwg c2l6ZW9mKF9fZW50cnktPmJ1ZiksCi0JCQkJCSBfX2VudHJ5LT5tc2dfbGVuKTsKLQkJbWVtY3B5 KF9fZW50cnktPmJ1ZiwgaW9fYnVmLCBfX2VudHJ5LT5idWZfbGVuKTsKLQkJaWYgKGFkZHIgPj0g MCkKLQkJCXNucHJpbnRmKF9fZW50cnktPmFkZHJfc3RyLCAxMCwgIi8lMDh4IiwgYWRkcik7Ci0J CWVsc2UKLQkJCV9fZW50cnktPmFkZHJfc3RyWzBdID0gMDsKLQkpLAotCVRQX3ByaW50aygiJXMl czogJXMlcyAoJWQgYnl0ZXMpIiwKLQkJX19wcmludF9zeW1ib2xpYyhfX2VudHJ5LT5yZWcsIHdm eF9yZWdfbGlzdCksCi0JCV9fZW50cnktPmFkZHJfc3RyLAotCQlfX3ByaW50X2hleChfX2VudHJ5 LT5idWYsIF9fZW50cnktPmJ1Zl9sZW4pLAotCQlfX2VudHJ5LT5tc2dfbGVuID4gc2l6ZW9mKF9f ZW50cnktPmJ1ZikgPyAiIC4uLiIgOiAiIiwKLQkJX19lbnRyeS0+bXNnX2xlbgotCSkKLSk7Ci1E RUZJTkVfRVZFTlQoaW9fZGF0YSwgaW9fd3JpdGUsCi0JVFBfUFJPVE8oaW50IHJlZywgaW50IGFk ZHIsIGNvbnN0IHZvaWQgKmlvX2J1Ziwgc2l6ZV90IGxlbiksCi0JVFBfQVJHUyhyZWcsIGFkZHIs IGlvX2J1ZiwgbGVuKSk7Ci0jZGVmaW5lIF90cmFjZV9pb19pbmRfd3JpdGUocmVnLCBhZGRyLCBp b19idWYsIGxlbilcCi0JdHJhY2VfaW9fd3JpdGUocmVnLCBhZGRyLCBpb19idWYsIGxlbikKLSNk ZWZpbmUgX3RyYWNlX2lvX3dyaXRlKHJlZywgaW9fYnVmLCBsZW4pIHRyYWNlX2lvX3dyaXRlKHJl ZywgLTEsIGlvX2J1ZiwgbGVuKQotREVGSU5FX0VWRU5UKGlvX2RhdGEsIGlvX3JlYWQsCi0JVFBf UFJPVE8oaW50IHJlZywgaW50IGFkZHIsIGNvbnN0IHZvaWQgKmlvX2J1Ziwgc2l6ZV90IGxlbiks Ci0JVFBfQVJHUyhyZWcsIGFkZHIsIGlvX2J1ZiwgbGVuKSk7Ci0jZGVmaW5lIF90cmFjZV9pb19p bmRfcmVhZChyZWcsIGFkZHIsIGlvX2J1ZiwgbGVuKVwKLQl0cmFjZV9pb19yZWFkKHJlZywgYWRk ciwgaW9fYnVmLCBsZW4pCi0jZGVmaW5lIF90cmFjZV9pb19yZWFkKHJlZywgaW9fYnVmLCBsZW4p IHRyYWNlX2lvX3JlYWQocmVnLCAtMSwgaW9fYnVmLCBsZW4pCi0KLURFQ0xBUkVfRVZFTlRfQ0xB U1MoaW9fZGF0YTMyLAotCVRQX1BST1RPKGludCByZWcsIGludCBhZGRyLCB1MzIgdmFsKSwKLQlU UF9BUkdTKHJlZywgYWRkciwgdmFsKSwKLQlUUF9TVFJVQ1RfX2VudHJ5KAotCQlfX2ZpZWxkKGlu dCwgcmVnKQotCQlfX2ZpZWxkKGludCwgYWRkcikKLQkJX19maWVsZChpbnQsIHZhbCkKLQkJX19h cnJheSh1OCwgYWRkcl9zdHIsIDEwKQotCSksCi0JVFBfZmFzdF9hc3NpZ24oCi0JCV9fZW50cnkt PnJlZyA9IHJlZzsKLQkJX19lbnRyeS0+YWRkciA9IGFkZHI7Ci0JCV9fZW50cnktPnZhbCA9IHZh bDsKLQkJaWYgKGFkZHIgPj0gMCkKLQkJCXNucHJpbnRmKF9fZW50cnktPmFkZHJfc3RyLCAxMCwg Ii8lMDh4IiwgYWRkcik7Ci0JCWVsc2UKLQkJCV9fZW50cnktPmFkZHJfc3RyWzBdID0gMDsKLQkp LAotCVRQX3ByaW50aygiJXMlczogJTA4eCIsCi0JCV9fcHJpbnRfc3ltYm9saWMoX19lbnRyeS0+ cmVnLCB3ZnhfcmVnX2xpc3QpLAotCQlfX2VudHJ5LT5hZGRyX3N0ciwKLQkJX19lbnRyeS0+dmFs Ci0JKQotKTsKLURFRklORV9FVkVOVChpb19kYXRhMzIsIGlvX3dyaXRlMzIsCi0JVFBfUFJPVE8o aW50IHJlZywgaW50IGFkZHIsIHUzMiB2YWwpLAotCVRQX0FSR1MocmVnLCBhZGRyLCB2YWwpKTsK LSNkZWZpbmUgX3RyYWNlX2lvX2luZF93cml0ZTMyKHJlZywgYWRkciwgdmFsKSB0cmFjZV9pb193 cml0ZTMyKHJlZywgYWRkciwgdmFsKQotI2RlZmluZSBfdHJhY2VfaW9fd3JpdGUzMihyZWcsIHZh bCkgdHJhY2VfaW9fd3JpdGUzMihyZWcsIC0xLCB2YWwpCi1ERUZJTkVfRVZFTlQoaW9fZGF0YTMy LCBpb19yZWFkMzIsCi0JVFBfUFJPVE8oaW50IHJlZywgaW50IGFkZHIsIHUzMiB2YWwpLAotCVRQ X0FSR1MocmVnLCBhZGRyLCB2YWwpKTsKLSNkZWZpbmUgX3RyYWNlX2lvX2luZF9yZWFkMzIocmVn LCBhZGRyLCB2YWwpIHRyYWNlX2lvX3JlYWQzMihyZWcsIGFkZHIsIHZhbCkKLSNkZWZpbmUgX3Ry YWNlX2lvX3JlYWQzMihyZWcsIHZhbCkgdHJhY2VfaW9fcmVhZDMyKHJlZywgLTEsIHZhbCkKLQot REVDTEFSRV9FVkVOVF9DTEFTUyhwaWdneWJhY2ssCi0JVFBfUFJPVE8odTMyIHZhbCwgYm9vbCBp Z25vcmVkKSwKLQlUUF9BUkdTKHZhbCwgaWdub3JlZCksCi0JVFBfU1RSVUNUX19lbnRyeSgKLQkJ X19maWVsZChpbnQsIHZhbCkKLQkJX19maWVsZChib29sLCBpZ25vcmVkKQotCSksCi0JVFBfZmFz dF9hc3NpZ24oCi0JCV9fZW50cnktPnZhbCA9IHZhbDsKLQkJX19lbnRyeS0+aWdub3JlZCA9IGln bm9yZWQ7Ci0JKSwKLQlUUF9wcmludGsoIkNPTlRST0w6ICUwOHglcyIsCi0JCV9fZW50cnktPnZh bCwKLQkJX19lbnRyeS0+aWdub3JlZCA/ICIgKGlnbm9yZWQpIiA6ICIiCi0JKQotKTsKLURFRklO RV9FVkVOVChwaWdneWJhY2ssIHBpZ2d5YmFjaywKLQlUUF9QUk9UTyh1MzIgdmFsLCBib29sIGln bm9yZWQpLAotCVRQX0FSR1ModmFsLCBpZ25vcmVkKSk7Ci0jZGVmaW5lIF90cmFjZV9waWdneWJh Y2sodmFsLCBpZ25vcmVkKSB0cmFjZV9waWdneWJhY2sodmFsLCBpZ25vcmVkKQotCi1UUkFDRV9F VkVOVChiaF9zdGF0cywKLQlUUF9QUk9UTyhpbnQgaW5kLCBpbnQgcmVxLCBpbnQgY25mLCBpbnQg YnVzeSwgYm9vbCByZWxlYXNlKSwKLQlUUF9BUkdTKGluZCwgcmVxLCBjbmYsIGJ1c3ksIHJlbGVh c2UpLAotCVRQX1NUUlVDVF9fZW50cnkoCi0JCV9fZmllbGQoaW50LCBpbmQpCi0JCV9fZmllbGQo aW50LCByZXEpCi0JCV9fZmllbGQoaW50LCBjbmYpCi0JCV9fZmllbGQoaW50LCBidXN5KQotCQlf X2ZpZWxkKGJvb2wsIHJlbGVhc2UpCi0JKSwKLQlUUF9mYXN0X2Fzc2lnbigKLQkJX19lbnRyeS0+ aW5kID0gaW5kOwotCQlfX2VudHJ5LT5yZXEgPSByZXE7Ci0JCV9fZW50cnktPmNuZiA9IGNuZjsK LQkJX19lbnRyeS0+YnVzeSA9IGJ1c3k7Ci0JCV9fZW50cnktPnJlbGVhc2UgPSByZWxlYXNlOwot CSksCi0JVFBfcHJpbnRrKCJJTkQvUkVRL0NORjolM2QvJTNkLyUzZCwgUkVRIGluIHByb2dyZXNz OiUzZCwgV1VQOiAlcyIsCi0JCV9fZW50cnktPmluZCwKLQkJX19lbnRyeS0+cmVxLAotCQlfX2Vu dHJ5LT5jbmYsCi0JCV9fZW50cnktPmJ1c3ksCi0JCV9fZW50cnktPnJlbGVhc2UgPyAicmVsZWFz ZSIgOiAia2VlcCIKLQkpCi0pOwotI2RlZmluZSBfdHJhY2VfYmhfc3RhdHMoaW5kLCByZXEsIGNu ZiwgYnVzeSwgcmVsZWFzZSlcCi0JdHJhY2VfYmhfc3RhdHMoaW5kLCByZXEsIGNuZiwgYnVzeSwg cmVsZWFzZSkKLQotVFJBQ0VfRVZFTlQodHhfc3RhdHMsCi0JVFBfUFJPVE8oY29uc3Qgc3RydWN0 IGhpZl9jbmZfdHggKnR4X2NuZiwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJIGludCBk ZWxheSksCi0JVFBfQVJHUyh0eF9jbmYsIHNrYiwgZGVsYXkpLAotCVRQX1NUUlVDVF9fZW50cnko Ci0JCV9fZmllbGQoaW50LCBwa3RfaWQpCi0JCV9fZmllbGQoaW50LCBkZWxheV9tZWRpYSkKLQkJ X19maWVsZChpbnQsIGRlbGF5X3F1ZXVlKQotCQlfX2ZpZWxkKGludCwgZGVsYXlfZncpCi0JCV9f ZmllbGQoaW50LCBhY2tfZmFpbHVyZXMpCi0JCV9fZmllbGQoaW50LCBmbGFncykKLQkJX19hcnJh eShpbnQsIHJhdGUsIDQpCi0JCV9fYXJyYXkoaW50LCB0eF9jb3VudCwgNCkKLQkpLAotCVRQX2Zh c3RfYXNzaWduKAotCQkvLyBLZWVwIHN5bmMgd2l0aCB3ZnhfcmF0ZXMgZGVmaW5pdGlvbiBpbiBt YWluLmMKLQkJc3RhdGljIGNvbnN0IGludCBod19yYXRlW10gPSB7IDAsIDEsIDIsIDMsIDYsIDcs IDgsIDksCi0JCQkJCSAgICAgICAxMCwgMTEsIDEyLCAxMyB9OwotCQljb25zdCBzdHJ1Y3QgaWVl ZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPQotCQkJKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhf aW5mbyAqKXNrYi0+Y2I7Ci0JCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZXMg PSB0eF9pbmZvLT5kcml2ZXJfcmF0ZXM7Ci0JCWludCBpOwotCi0JCV9fZW50cnktPnBrdF9pZCA9 IHR4X2NuZi0+cGFja2V0X2lkOwotCQlfX2VudHJ5LT5kZWxheV9tZWRpYSA9IGxlMzJfdG9fY3B1 KHR4X2NuZi0+bWVkaWFfZGVsYXkpOwotCQlfX2VudHJ5LT5kZWxheV9xdWV1ZSA9IGxlMzJfdG9f Y3B1KHR4X2NuZi0+dHhfcXVldWVfZGVsYXkpOwotCQlfX2VudHJ5LT5kZWxheV9mdyA9IGRlbGF5 OwotCQlfX2VudHJ5LT5hY2tfZmFpbHVyZXMgPSB0eF9jbmYtPmFja19mYWlsdXJlczsKLQkJaWYg KCF0eF9jbmYtPnN0YXR1cyB8fCBfX2VudHJ5LT5hY2tfZmFpbHVyZXMpCi0JCQlfX2VudHJ5LT5h Y2tfZmFpbHVyZXMgKz0gMTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX05VTV9BQ1M7 IGkrKykgewotCQkJaWYgKHJhdGVzWzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX01DUykKLQkJ CQlfX2VudHJ5LT5yYXRlW2ldID0gcmF0ZXNbaV0uaWR4OwotCQkJZWxzZQotCQkJCV9fZW50cnkt PnJhdGVbaV0gPSBod19yYXRlW3JhdGVzW2ldLmlkeF07Ci0JCQlfX2VudHJ5LT50eF9jb3VudFtp XSA9IHJhdGVzW2ldLmNvdW50OwotCQl9Ci0JCV9fZW50cnktPmZsYWdzID0gMDsKLQkJaWYgKHJh dGVzWzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX01DUykKLQkJCV9fZW50cnktPmZsYWdzIHw9 IDB4MDE7Ci0JCWlmIChyYXRlc1swXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSSkK LQkJCV9fZW50cnktPmZsYWdzIHw9IDB4MDI7Ci0JCWlmIChyYXRlc1swXS5mbGFncyAmIElFRUU4 MDIxMV9UWF9SQ19HUkVFTl9GSUVMRCkKLQkJCV9fZW50cnktPmZsYWdzIHw9IDB4MDQ7Ci0JCWlm IChyYXRlc1swXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfUlRTX0NUUykKLQkJCV9fZW50 cnktPmZsYWdzIHw9IDB4MDg7Ci0JCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9D VExfU0VORF9BRlRFUl9EVElNKQotCQkJX19lbnRyeS0+ZmxhZ3MgfD0gMHgxMDsKLQkJaWYgKHR4 X2NuZi0+c3RhdHVzKQotCQkJX19lbnRyeS0+ZmxhZ3MgfD0gMHgyMDsKLQkJaWYgKHR4X2NuZi0+ c3RhdHVzID09IEhJRl9TVEFUVVNfVFhfRkFJTF9SRVFVRVVFKQotCQkJX19lbnRyeS0+ZmxhZ3Mg fD0gMHg0MDsKLQkpLAotCVRQX3ByaW50aygicGFja2V0IElEOiAlMDh4LCByYXRlIHBvbGljeTog JXMgJWR8JWQgJWR8JWQgJWR8JWQgJWR8JWQgLT4gJWQgYXR0ZW1wdCwgRGVsYXlzIG1lZGlhL3F1 ZXVlL3RvdGFsOiAlNGR1cy8lNGR1cy8lNGR1cyIsCi0JCV9fZW50cnktPnBrdF9pZCwKLQkJX19w cmludF9mbGFncyhfX2VudHJ5LT5mbGFncywgTlVMTCwKLQkJCXsgMHgwMSwgIk0iIH0sIHsgMHgw MiwgIlMiIH0sIHsgMHgwNCwgIkciIH0sCi0JCQl7IDB4MDgsICJSIiB9LCB7IDB4MTAsICJEIiB9 LCB7IDB4MjAsICJGIiB9LAotCQkJeyAweDQwLCAiUSIgfSksCi0JCV9fZW50cnktPnJhdGVbMF0s Ci0JCV9fZW50cnktPnR4X2NvdW50WzBdLAotCQlfX2VudHJ5LT5yYXRlWzFdLAotCQlfX2VudHJ5 LT50eF9jb3VudFsxXSwKLQkJX19lbnRyeS0+cmF0ZVsyXSwKLQkJX19lbnRyeS0+dHhfY291bnRb Ml0sCi0JCV9fZW50cnktPnJhdGVbM10sCi0JCV9fZW50cnktPnR4X2NvdW50WzNdLAotCQlfX2Vu dHJ5LT5hY2tfZmFpbHVyZXMsCi0JCV9fZW50cnktPmRlbGF5X21lZGlhLAotCQlfX2VudHJ5LT5k ZWxheV9xdWV1ZSwKLQkJX19lbnRyeS0+ZGVsYXlfZncKLQkpCi0pOwotI2RlZmluZSBfdHJhY2Vf dHhfc3RhdHModHhfY25mLCBza2IsIGRlbGF5KSB0cmFjZV90eF9zdGF0cyh0eF9jbmYsIHNrYiwg ZGVsYXkpCi0KLVRSQUNFX0VWRU5UKHF1ZXVlc19zdGF0cywKLQlUUF9QUk9UTyhzdHJ1Y3Qgd2Z4 X2RldiAqd2RldiwgY29uc3Qgc3RydWN0IHdmeF9xdWV1ZSAqZWxlY3RlZF9xdWV1ZSksCi0JVFBf QVJHUyh3ZGV2LCBlbGVjdGVkX3F1ZXVlKSwKLQlUUF9TVFJVQ1RfX2VudHJ5KAotCQlfX2ZpZWxk KGludCwgdmlmX2lkKQotCQlfX2ZpZWxkKGludCwgcXVldWVfaWQpCi0JCV9fYXJyYXkoaW50LCBo dywgSUVFRTgwMjExX05VTV9BQ1MgKiAyKQotCQlfX2FycmF5KGludCwgZHJ2LCBJRUVFODAyMTFf TlVNX0FDUyAqIDIpCi0JCV9fYXJyYXkoaW50LCBjYWIsIElFRUU4MDIxMV9OVU1fQUNTICogMikK LQkpLAotCVRQX2Zhc3RfYXNzaWduKAotCQljb25zdCBzdHJ1Y3Qgd2Z4X3F1ZXVlICpxdWV1ZTsK LQkJc3RydWN0IHdmeF92aWYgKnd2aWY7Ci0JCWludCBpLCBqOwotCi0JCWZvciAoaiA9IDA7IGog PCBJRUVFODAyMTFfTlVNX0FDUyAqIDI7IGorKykgewotCQkJX19lbnRyeS0+aHdbal0gPSAtMTsK LQkJCV9fZW50cnktPmRydltqXSA9IC0xOwotCQkJX19lbnRyeS0+Y2FiW2pdID0gLTE7Ci0JCX0K LQkJX19lbnRyeS0+dmlmX2lkID0gLTE7Ci0JCV9fZW50cnktPnF1ZXVlX2lkID0gLTE7Ci0JCXd2 aWYgPSBOVUxMOwotCQl3aGlsZSAoKHd2aWYgPSB3dmlmX2l0ZXJhdGUod2Rldiwgd3ZpZikpICE9 IE5VTEwpIHsKLQkJCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfTlVNX0FDUzsgaSsrKSB7Ci0J CQkJaiA9IHd2aWYtPmlkICogSUVFRTgwMjExX05VTV9BQ1MgKyBpOwotCQkJCVdBUk5fT04oaiA+ PSBJRUVFODAyMTFfTlVNX0FDUyAqIDIpOwotCQkJCXF1ZXVlID0gJnd2aWYtPnR4X3F1ZXVlW2ld OwotCQkJCV9fZW50cnktPmh3W2pdID0gYXRvbWljX3JlYWQoJnF1ZXVlLT5wZW5kaW5nX2ZyYW1l cyk7Ci0JCQkJX19lbnRyeS0+ZHJ2W2pdID0gc2tiX3F1ZXVlX2xlbigmcXVldWUtPm5vcm1hbCk7 Ci0JCQkJX19lbnRyeS0+Y2FiW2pdID0gc2tiX3F1ZXVlX2xlbigmcXVldWUtPmNhYik7Ci0JCQkJ aWYgKHF1ZXVlID09IGVsZWN0ZWRfcXVldWUpIHsKLQkJCQkJX19lbnRyeS0+dmlmX2lkID0gd3Zp Zi0+aWQ7Ci0JCQkJCV9fZW50cnktPnF1ZXVlX2lkID0gaTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkp LAotCVRQX3ByaW50aygiZ290IHNrYiBmcm9tICVkLyVkLCBwZW5kLiBody9ub3JtL2NhYjogWyAl ZC8lZC8lZCAlZC8lZC8lZCAlZC8lZC8lZCAlZC8lZC8lZCBdIFsgJWQvJWQvJWQgJWQvJWQvJWQg JWQvJWQvJWQgJWQvJWQvJWQgXSIsCi0JCV9fZW50cnktPnZpZl9pZCwgX19lbnRyeS0+cXVldWVf aWQsCi0JCV9fZW50cnktPmh3WzBdLCBfX2VudHJ5LT5kcnZbMF0sIF9fZW50cnktPmNhYlswXSwK LQkJX19lbnRyeS0+aHdbMV0sIF9fZW50cnktPmRydlsxXSwgX19lbnRyeS0+Y2FiWzFdLAotCQlf X2VudHJ5LT5od1syXSwgX19lbnRyeS0+ZHJ2WzJdLCBfX2VudHJ5LT5jYWJbMl0sCi0JCV9fZW50 cnktPmh3WzNdLCBfX2VudHJ5LT5kcnZbM10sIF9fZW50cnktPmNhYlszXSwKLQkJX19lbnRyeS0+ aHdbNF0sIF9fZW50cnktPmRydls0XSwgX19lbnRyeS0+Y2FiWzRdLAotCQlfX2VudHJ5LT5od1s1 XSwgX19lbnRyeS0+ZHJ2WzVdLCBfX2VudHJ5LT5jYWJbNV0sCi0JCV9fZW50cnktPmh3WzZdLCBf X2VudHJ5LT5kcnZbNl0sIF9fZW50cnktPmNhYls2XSwKLQkJX19lbnRyeS0+aHdbN10sIF9fZW50 cnktPmRydls3XSwgX19lbnRyeS0+Y2FiWzddCi0JKQotKTsKLQotI2VuZGlmCi0KLS8qIFRoaXMg cGFydCBtdXN0IGJlIG91dHNpZGUgcHJvdGVjdGlvbiAqLwotI3VuZGVmIFRSQUNFX0lOQ0xVREVf UEFUSAotI2RlZmluZSBUUkFDRV9JTkNMVURFX1BBVEggLgotI3VuZGVmIFRSQUNFX0lOQ0xVREVf RklMRQotI2RlZmluZSBUUkFDRV9JTkNMVURFX0ZJTEUgdHJhY2VzCi0KLSNpbmNsdWRlIDx0cmFj ZS9kZWZpbmVfdHJhY2UuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93Zngvd2Z4Lmgg Yi9kcml2ZXJzL3N0YWdpbmcvd2Z4L3dmeC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCA5NDg5ODY4MGNjZGUuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L3dm eC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY2ICswLDAgQEAKLS8qIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KLS8qCi0gKiBDb21tb24gcHJpdmF0ZSBkYXRhIGZvciBT aWxpY29uIExhYnMgV0Z4IGNoaXBzLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwLCBT aWxpY29uIExhYm9yYXRvcmllcywgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmlj c3NvbgotICogQ29weXJpZ2h0IChjKSAyMDA2LCBNaWNoYWVsIFd1IDxmbGFtaW5naWNlQHNvdXJt aWxrLm5ldD4KLSAqIENvcHlyaWdodCAyMDA0LTIwMDYgSmVhbi1CYXB0aXN0ZSBOb3RlIDxqYm5v dGVAZ21haWwuY29tPiwgZXQgYWwuCi0gKi8KLSNpZm5kZWYgV0ZYX0gKLSNkZWZpbmUgV0ZYX0gK LQotI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVl dWUuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L25vc3BlYy5o PgotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotCi0jaW5jbHVkZSAiYmguaCIKLSNpbmNsdWRl ICJkYXRhX3R4LmgiCi0jaW5jbHVkZSAibWFpbi5oIgotI2luY2x1ZGUgInF1ZXVlLmgiCi0jaW5j bHVkZSAiaGlmX3R4LmgiCi0KLSNkZWZpbmUgVVNFQ19QRVJfVFhPUCAzMiAvLyBzZWUgc3RydWN0 IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMKLSNkZWZpbmUgVVNFQ19QRVJfVFUgMTAyNAotCi1z dHJ1Y3QgaHdidXNfb3BzOwotCi1zdHJ1Y3Qgd2Z4X2RldiB7Ci0Jc3RydWN0IHdmeF9wbGF0Zm9y bV9kYXRhIHBkYXRhOwotCXN0cnVjdCBkZXZpY2UJCSpkZXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9o dwkqaHc7Ci0Jc3RydWN0IGllZWU4MDIxMV92aWYJKnZpZlsyXTsKLQlzdHJ1Y3QgbWFjX2FkZHJl c3MJYWRkcmVzc2VzWzJdOwotCWNvbnN0IHN0cnVjdCBod2J1c19vcHMJKmh3YnVzX29wczsKLQl2 b2lkCQkJKmh3YnVzX3ByaXY7Ci0KLQl1OAkJCWtleXNldDsKLQlzdHJ1Y3QgY29tcGxldGlvbglm aXJtd2FyZV9yZWFkeTsKLQlzdHJ1Y3QgaGlmX2luZF9zdGFydHVwCWh3X2NhcHM7Ci0Jc3RydWN0 IHdmeF9oaWYJCWhpZjsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrCWNvb2xpbmdfdGltZW91dF93b3Jr OwotCWJvb2wJCQlwb2xsX2lycTsKLQlib29sCQkJY2hpcF9mcm96ZW47Ci0Jc3RydWN0IG11dGV4 CQljb25mX211dGV4OwotCi0Jc3RydWN0IHdmeF9oaWZfY21kCWhpZl9jbWQ7Ci0Jc3RydWN0IHNr X2J1ZmZfaGVhZAl0eF9wZW5kaW5nOwotCXdhaXRfcXVldWVfaGVhZF90CXR4X2RlcXVldWU7Ci0J YXRvbWljX3QJCXR4X2xvY2s7Ci0KLQlhdG9taWNfdAkJcGFja2V0X2lkOwotCXUzMgkJCWtleV9t YXA7Ci0KLQlzdHJ1Y3QgaGlmX3J4X3N0YXRzCXJ4X3N0YXRzOwotCXN0cnVjdCBtdXRleAkJcnhf c3RhdHNfbG9jazsKLQlzdHJ1Y3QgaGlmX3R4X3Bvd2VyX2xvb3BfaW5mbyB0eF9wb3dlcl9sb29w X2luZm87Ci0Jc3RydWN0IG11dGV4CQl0eF9wb3dlcl9sb29wX2luZm9fbG9jazsKLQlpbnQJCQlm b3JjZV9wc190aW1lb3V0OwotfTsKLQotc3RydWN0IHdmeF92aWYgewotCXN0cnVjdCB3ZnhfZGV2 CQkqd2RldjsKLQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZgkqdmlmOwotCXN0cnVjdCBpZWVlODAyMTFf Y2hhbm5lbCAqY2hhbm5lbDsKLQlpbnQJCQlpZDsKLQotCXUzMgkJCWxpbmtfaWRfbWFwOwotCi0J Ym9vbAkJCWFmdGVyX2R0aW1fdHhfYWxsb3dlZDsKLQlib29sCQkJam9pbl9pbl9wcm9ncmVzczsK LQotCXN0cnVjdCBkZWxheWVkX3dvcmsJYmVhY29uX2xvc3Nfd29yazsKLQotCXN0cnVjdCB3Znhf cXVldWUJdHhfcXVldWVbNF07Ci0Jc3RydWN0IHR4X3BvbGljeV9jYWNoZQl0eF9wb2xpY3lfY2Fj aGU7Ci0Jc3RydWN0IHdvcmtfc3RydWN0CXR4X3BvbGljeV91cGxvYWRfd29yazsKLQotCXN0cnVj dCB3b3JrX3N0cnVjdAl1cGRhdGVfdGltX3dvcms7Ci0KLQl1bnNpZ25lZCBsb25nCQl1YXBzZF9t YXNrOwotCi0JLyogYXZvaWQgc29tZSBvcGVyYXRpb25zIGluIHBhcmFsbGVsIHdpdGggc2NhbiAq LwotCXN0cnVjdCBtdXRleAkJc2Nhbl9sb2NrOwotCXN0cnVjdCB3b3JrX3N0cnVjdAlzY2FuX3dv cms7Ci0Jc3RydWN0IGNvbXBsZXRpb24Jc2Nhbl9jb21wbGV0ZTsKLQlib29sCQkJc2Nhbl9hYm9y dDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3NjYW5fcmVxdWVzdCAqc2Nhbl9yZXE7Ci0KLQlzdHJ1Y3Qg Y29tcGxldGlvbglzZXRfcG1fbW9kZV9jb21wbGV0ZTsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgc3Ry dWN0IHdmeF92aWYgKndkZXZfdG9fd3ZpZihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IHZpZl9p ZCkKLXsKLQlpZiAodmlmX2lkID49IEFSUkFZX1NJWkUod2Rldi0+dmlmKSkgewotCQlkZXZfZGJn KHdkZXYtPmRldiwgInJlcXVlc3Rpbmcgbm9uLWV4aXN0ZW50IHZpZjogJWRcbiIsIHZpZl9pZCk7 Ci0JCXJldHVybiBOVUxMOwotCX0KLQl2aWZfaWQgPSBhcnJheV9pbmRleF9ub3NwZWModmlmX2lk LCBBUlJBWV9TSVpFKHdkZXYtPnZpZikpOwotCWlmICghd2Rldi0+dmlmW3ZpZl9pZF0pIHsKLQkJ ZGV2X2RiZyh3ZGV2LT5kZXYsICJyZXF1ZXN0aW5nIG5vbi1hbGxvY2F0ZWQgdmlmOiAlZFxuIiwK LQkJCXZpZl9pZCk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlyZXR1cm4gKHN0cnVjdCB3Znhfdmlm ICopIHdkZXYtPnZpZlt2aWZfaWRdLT5kcnZfcHJpdjsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1 Y3Qgd2Z4X3ZpZiAqd3ZpZl9pdGVyYXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LAotCQkJCQkgICBz dHJ1Y3Qgd2Z4X3ZpZiAqY3VyKQotewotCWludCBpOwotCWludCBtYXJrID0gMDsKLQlzdHJ1Y3Qg d2Z4X3ZpZiAqdG1wOwotCi0JaWYgKCFjdXIpCi0JCW1hcmsgPSAxOwotCWZvciAoaSA9IDA7IGkg PCBBUlJBWV9TSVpFKHdkZXYtPnZpZik7IGkrKykgewotCQl0bXAgPSB3ZGV2X3RvX3d2aWYod2Rl diwgaSk7Ci0JCWlmIChtYXJrICYmIHRtcCkKLQkJCXJldHVybiB0bXA7Ci0JCWlmICh0bXAgPT0g Y3VyKQotCQkJbWFyayA9IDE7Ci0JfQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgaW5saW5l IGludCB3dmlmX2NvdW50KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQotewotCWludCBpOwotCWludCBy ZXQgPSAwOwotCXN0cnVjdCB3ZnhfdmlmICp3dmlmOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZ X1NJWkUod2Rldi0+dmlmKTsgaSsrKSB7Ci0JCXd2aWYgPSB3ZGV2X3RvX3d2aWYod2RldiwgaSk7 Ci0JCWlmICh3dmlmKQotCQkJcmV0Kys7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBp bmxpbmUgdm9pZCBtZW1yZXZlcnNlKHU4ICpzcmMsIHU4IGxlbmd0aCkKLXsKLQl1OCAqbG8gPSBz cmM7Ci0JdTggKmhpID0gc3JjICsgbGVuZ3RoIC0gMTsKLQl1OCBzd2FwOwotCi0Jd2hpbGUgKGxv IDwgaGkpIHsKLQkJc3dhcCA9ICpsbzsKLQkJKmxvKysgPSAqaGk7Ci0JCSpoaS0tID0gc3dhcDsK LQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG1lbXpjbXAodm9pZCAqc3JjLCB1bnNpZ25lZCBp bnQgc2l6ZSkKLXsKLQl1OCAqYnVmID0gc3JjOwotCi0JaWYgKCFzaXplKQotCQlyZXR1cm4gMDsK LQlpZiAoKmJ1ZikKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIG1lbWNtcChidWYsIGJ1ZiArIDEsIHNp emUgLSAxKTsKLX0KLQotI2VuZGlmIC8qIFdGWF9IICovCi0tIAoyLjI4LjAKCg==