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=-8.5 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E80E2C5ACAE for ; Wed, 11 Sep 2019 09:51:32 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id A18B320CC7 for ; Wed, 11 Sep 2019 09:51:32 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="cStj9FDE"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=cadence.com header.i=@cadence.com header.b="ti9fua5P"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=cadence.com header.i=@cadence.com header.b="H34ckbK+" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A18B320CC7 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=cadence.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender:Content-Type: Content-Transfer-Encoding:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References:Message-ID: Subject:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=R4IhfXoKsAiRT905pFo4BQZcDiAyEgAk7/5BOQPGQas=; b=cStj9FDEViPcZSJOToEvxWNlg +oYVIOUMZMQOW/x1q6giSFIsAyBDa84Qnj2s+V8H1acL15dtKlsKkqDYuKuuodKf0dxYrR46XIiv0 3IbOPp0zvdpbIun37m7sz8hDxCBmdUoUkLRt5H5KN45evEvJyqBkTR2O+8Yl7C8TvwMbWvvYrMmuc B6zh4w3OMHVX+v97FxP/f6wugeOrZBNh5OQ3ZMPAzhwyZkeqaz9M8Tv/0fJbwV3cl6T5UkAmIwMxm k2hOcqHU0fa/izLj84i0frhs7jEzgBnSReqZpOcARy+bVAdOEhsqZ4TtkGCJQROx6bM7/KM8iOWs8 pXqoTW08g==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1i7zHe-0004bD-Bl; Wed, 11 Sep 2019 09:51:30 +0000 Received: from mx0b-0014ca01.pphosted.com ([208.86.201.193] helo=mx0a-0014ca01.pphosted.com) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1i7zBE-0004l0-BO for linux-mtd@lists.infradead.org; Wed, 11 Sep 2019 09:45:05 +0000 Received: from pps.filterd (m0042333.ppops.net [127.0.0.1]) by mx0b-0014ca01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id x8B9cIIk031920; Wed, 11 Sep 2019 02:44:17 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cadence.com; h=date : from : to : cc : subject : message-id : references : mime-version : content-type : content-transfer-encoding : in-reply-to; s=proofpoint; bh=o1/yNR1Q9OI2MqjvV2Q5zZ+iPYZINVJq0esMXrB599A=; b=ti9fua5PAJsOPsAgB5qbJTmNhCD8Pc0e9xdilQpzRDXDbpGu29ziuhkKIO3R91kjEFIr ketZ4S+krhqwEMcez37qm8K8xMv9uiU+3OoKU9dEDT7Kcg2acIdhhBj33j3l5JBS+UyO pTz2YYklm+mD68pS+abt+FoeIfphObF2FO8X4Sm5+JpSLxqUBKNJ2snap6hc2KsKJZXt QjMLv5hFuEt/QDkvN0XmLyE8NRgczHgZMLgjP+wpSrd00+EI3Y62tCHogfIkRiD3U8N0 dlNlzCIqSP5ANTFAlq9WDGS2pea0WnWk8YALnLW8Csd4Fz2N+KVA8HWcWOx+6+sBY/Vz UA== Received: from nam05-by2-obe.outbound.protection.outlook.com (mail-by2nam05lp2052.outbound.protection.outlook.com [104.47.50.52]) by mx0b-0014ca01.pphosted.com with ESMTP id 2uxhm7twm5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 11 Sep 2019 02:44:16 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YlA+qvwGneY06Ox1mX5o6i2TjGg1zxYcBqATNgOWBy5J8WnQ0QACLKjyBlgJejh/DNUgIZfVD3U6lF0VbBq2+o6ym5DlQLVZXAOAq4znEMF37xryeuXP9X1GhXUtgvuevv8z7D2szT560SZmqppc8td65lSEcNcUGRR2MkA4D+EiOXkPpZlO7FdxrS1A81qeiiT21TFEH0vJ15XUG4aJOpDe1UCSGCoaiyqBQETb41i0WXRAVdGOAyGRyLoXcz6g6QmFXWjl0TVNP67IFqNfPmpOUndfvYkEWAZJY7KTifSycVcDpn8DNI/V1r9tCSWh0dBkNo5oIy8o8JQGBJt/kA== 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=o1/yNR1Q9OI2MqjvV2Q5zZ+iPYZINVJq0esMXrB599A=; b=Pk/UcfEwSOwi+v03dsbuE1zmrr5SL9Js4JFErPvC3kKFS22h7hJcUlkEbkwYMIhqc2Cqf17NNSuHrPobSxuMLaWp0j3PpMdB1qgiEhAdKoELKPJLFw9oNBEZDX/p919FZ6V0T8A5hc5wzKJB/J5vX2yd2yPAB96gjcBKsEqvJEuJ1XULIxeAWaDKKUyUm7P1qS6ZnjxWI00tCEtnLuU+9fef//Q3tvmP9Zya9wuLoA2C6eeEj3xx0fv/DMi16FpgoFdj2L3in69pEp+08SeaG+qKrATFZPVsXdvqDefp9ZxnFbFf7kppRz6to2+mqYdvFN47DTDDaf81IGM3KROzCQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=softfail (sender ip is 158.140.1.28) smtp.rcpttodomain=infradead.org smtp.mailfrom=cadence.com; dmarc=fail (p=none sp=none pct=100) action=none header.from=cadence.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cadence.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=o1/yNR1Q9OI2MqjvV2Q5zZ+iPYZINVJq0esMXrB599A=; b=H34ckbK++lS4Dqc/J+HQqYsqF+5tDowGeDTssCRGUkMyDJ45SHYbZbJQa8gdpY6vXDte2id0Q8bpI5JXO54Ja1SinIDDraPrrC5jqavmeIZgYpV10Y1fJ6JXfrofDtMV9/EOwx3+eYoNK0DLt04XGV21D6HmyoXVCF2P6WDb+9Y= Received: from DM5PR07CA0045.namprd07.prod.outlook.com (2603:10b6:3:16::31) by BN8PR07MB6003.namprd07.prod.outlook.com (2603:10b6:408:9f::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.15; Wed, 11 Sep 2019 09:44:11 +0000 Received: from CO1NAM05FT063.eop-nam05.prod.protection.outlook.com (2a01:111:f400:7e50::205) by DM5PR07CA0045.outlook.office365.com (2603:10b6:3:16::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.13 via Frontend Transport; Wed, 11 Sep 2019 09:44:11 +0000 Received-SPF: SoftFail (protection.outlook.com: domain of transitioning cadence.com discourages use of 158.140.1.28 as permitted sender) Received: from sjmaillnx1.cadence.com (158.140.1.28) by CO1NAM05FT063.mail.protection.outlook.com (10.152.96.181) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.6 via Frontend Transport; Wed, 11 Sep 2019 09:44:11 +0000 Received: from mailsj6.global.cadence.com (mailsj6.cadence.com [158.140.32.112]) by sjmaillnx1.cadence.com (8.14.4/8.14.4) with ESMTP id x8B9i8BN010037 (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=OK); Wed, 11 Sep 2019 02:44:08 -0700 X-CrossPremisesHeadersFilteredBySendConnector: mailsj6.global.cadence.com Received: from global.cadence.com (158.140.32.37) by mailsj6.global.cadence.com (158.140.32.112) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Wed, 11 Sep 2019 02:44:04 -0700 Date: Wed, 11 Sep 2019 10:43:56 +0100 From: Piotr Sroka To: Miquel Raynal Subject: Re: [v5 1/2] mtd: nand: Add new Cadence NAND driver to MTD subsystem Message-ID: <20190911094354.GA14863@global.cadence.com> References: <20190725145804.8886-1-piotrs@cadence.com> <20190725150012.14416-1-piotrs@cadence.com> <20190830114645.59898cfe@xps13> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20190830114645.59898cfe@xps13> User-Agent: Mutt/1.5.20 (2009-12-10) X-Originating-IP: [158.140.32.37] X-ClientProxiedBy: mailsj7.global.cadence.com (158.140.32.114) To mailsj6.global.cadence.com (158.140.32.112) X-OrganizationHeadersPreserved: mailsj6.global.cadence.com X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:158.140.1.28; IPV:CAL; SCL:-1; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(4636009)(39860400002)(136003)(346002)(396003)(376002)(43544003)(189003)(36092001)(199004)(51444003)(55016002)(126002)(476003)(7696005)(6306002)(956004)(426003)(11346002)(66066001)(446003)(966005)(2906002)(26826003)(2870700001)(23676004)(2486003)(6116002)(53946003)(53416004)(486006)(30864003)(7636002)(316002)(305945005)(14444005)(5024004)(7736002)(336012)(7416002)(3846002)(76176011)(16526019)(58126008)(6286002)(186003)(1076003)(5660300002)(6246003)(33656002)(356004)(6666004)(26005)(54906003)(229853002)(50466002)(76130400001)(246002)(47776003)(8936002)(6916009)(8676002)(4326008)(66574012)(386003)(70586007)(70206006)(86362001)(478600001)(559001)(579004)(569006); DIR:OUT; SFP:1101; SCL:1; SRVR:BN8PR07MB6003; H:sjmaillnx1.cadence.com; FPR:; SPF:SoftFail; LANG:en; PTR:corp.cadence.com; MX:1; A:1; X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7e11cb6c-9fe5-424b-ef1d-08d7369c998f X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(5600166)(711020)(4605104)(1401327)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020); SRVR:BN8PR07MB6003; X-MS-TrafficTypeDiagnostic: BN8PR07MB6003: X-MS-Exchange-PUrlCount: 1 X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:660; X-Forefront-PRVS: 0157DEB61B X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Message-Info: ETtwYGMdvr35iuLOf2zQ9JHBVuMahN2OqgQ+YgOJXLuJdPOPjcLIxL+iemlKmcF+cW6ikhyYRQ5l9TAUvd8yJ8e6QOumRlWDONgKb5dWBeNPzytPWdQssyEudC6peg117ofWut3Fx+gZuThqj+QGK5aFJJ1GdQRZUL0peEbZpQvR6CcG/G+GEnnfgtw2oLajF/6VWRXOHFMxQZt4x+0vgr/0w3oZKjqjHvQ8gk8fHgff31zKGmtUjDI6lItdJc4KdcNJ/8D8/SA7ml0VVARBrlZJZuxzemnp7839OSB+e3ScqXdOr2ua6r+qO1LhrwLH0ztxaf1NMt+vitSgwiboVM/7cGjBLtrnVWHG++gyoCpxmv+yo4HH4UzXQL93RMRuo9751BDiiER1xFCXYNjBv1j1Ox6ZycmdNoE8LXPbfv8= X-OriginatorOrg: cadence.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Sep 2019 09:44:11.0945 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 7e11cb6c-9fe5-424b-ef1d-08d7369c998f X-MS-Exchange-CrossTenant-Id: d36035c5-6ce6-4662-a3dc-e762e61ae4c9 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=d36035c5-6ce6-4662-a3dc-e762e61ae4c9; Ip=[158.140.1.28]; Helo=[sjmaillnx1.cadence.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN8PR07MB6003 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.70,1.0.8 definitions=2019-09-11_07:2019-09-10,2019-09-11 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_check_notspam policy=outbound_check score=0 spamscore=0 impostorscore=0 bulkscore=0 adultscore=0 malwarescore=0 suspectscore=2 mlxlogscore=999 clxscore=1011 phishscore=0 mlxscore=0 priorityscore=1501 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-1906280000 definitions=main-1909110092 X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Arnd Bergmann , Boris Brezillon , Marcel Ziswiler , Richard Weinberger , linux-kernel@vger.kernel.org, Stefan Agner , Marek Vasut , Paul Burton , Geert Uytterhoeven , linux-mtd@lists.infradead.org, Dmitry Osipenko , Brian Norris , David Woodhouse , Kazuhiro Kasai Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-mtd" Errors-To: linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org VGhlIDA4LzMwLzIwMTkgMTE6NDYsIE1pcXVlbCBSYXluYWwgd3JvdGU6Cj5FWFRFUk5BTCBNQUlM Cj4KPgo+SGkgUGlvdHIsCj4KPlBpb3RyIFNyb2thIDxwaW90cnNAY2FkZW5jZS5jb20+IHdyb3Rl IG9uIFRodSwgMjUgSnVsIDIwMTkgMTY6MDA6MTIKPiswMTAwOgo+Cj5TdWJqZWN0IHNob3VsZCBi ZTogbXRkOiByYXduYW5kOgo+Cj5MYXN0IGZldyBuaXRzIGluIHlvdXIgZHJpdmVyIHdoaWNoIG92 ZXJhbGwgbG9va3MgZ29vZCAoc2VlIGJlbG93KS4KPgo+Tm93IEknbSB3YWl0aW5nIGZvciBSb2In cyBhY2sgb24gdGhlIGJpbmRpbmdzLiBUaGlzIGRyaXZlciBzaG91bGQgYmUgYQo+Z29vZCBjYW5k aWRhdGUgZm9yIDUuNS4KCkkgdGhpbmsgdGhhdCBSb2IgYWxyZWR5IHJldmlldyBpdC4gWW91IGNh biBmaW5kIGhpc3QgcmV2aWV3IG9uCmh0dHBzOi8vcGF0Y2h3b3JrLm96bGFicy5vcmcvcGF0Y2gv MTEzNjkzMi8KTGV0IG1lIGtub3cgaWYgc29tZXRoaW5nIGVsc2Ugc2hvdWxkIGJlIGltcHJvdmVk IG9yIGZpeGVkLgoKPgo+PiBBZGQgbmV3IENhZGVuY2UgTkFORCBkcml2ZXIgdG8gTVREIHN1YnN5 c3RlbQo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBQaW90ciBTcm9rYSA8cGlvdHJzQGNhZGVuY2UuY29t Pgo+PiAtLS0KPj4gQ2hhbmdlcyBmb3IgdjU6Cj4+IC0gZml4ICJlY2MgY29uZmlnIHN0cmVuZ3Ro IiBmaWVsZCBzaXplCj4+IC0gcmVtb3ZlIHVudXNlZCBtYWNyb3MKPj4gLSBmaXggYWRkcmVzcyBv ZiB0aW1pbmcyIHJlZ2lzdGVyCj4+IC0gYWRkIGd1YXJkIGZvciBhY2Nlc3NpbmcgZGF0YV9jb250 cm9sX3NpemUgcmVnaXN0ZXIKPj4gLSBzaW1wbGlmeSB0aGUgZHJpdmVyIGJ5IHVzZSB0aGUgc2Ft ZSBmdW5jdGlvbgo+PiAgIGZvciBhY2Nlc3NpbmcgbWFpbiBhcmVhIGFuZCBvb2IgYXJlYQo+PiAt IGFkZCBjb21tZW50IHRvIHRoZSBkcml2ZXIgZGVzY3JpYmluZyBtYWluIGNvbnRyb2xsZXIgbW9k ZXMKPj4gLSBjaGFuZ2UgY29tcGF0aWJsZSBuYW1lIGZyb20gY2RucyxocG5mYyB0byBjZG5zLGhw LW5mYwo+PiBDaGFuZ2VzIGZvciB2NDoKPj4gLSBmaXggY29tbWVudHMgaXNzdWVzIGxpa2UgdHlw b3MsIG1pc3NpbmcgY2FwaXRhbHMsIG1pc3NpbmcgZG90cyBldGMuCj4+IC0gcmVtb3ZlIHVubmVj ZXNzYXJ5IFBIWSBvcHRpb25zIHBoeV9kbGxfYWdpbmcgYW5kIHBoeV9wZXJfYml0X2Rlc2tldwo+ PiAtIHJlcGxhY2UgYWxsIHJlZ2lzdGVyIGFjY2VzcyBmdW5jdGlvbnMgdG8gInJlbGF4ZWQiIHZl cnNpb24KPj4gLSByZW1vdmUgYWxsIHVubmVjZXNzYXJ5IHZhcmlhYmxlcyBpbml0aWFsaXphdGlv bnMKPj4gLSBoYW5kbGUgZXJyb3IgaW5zaWRlIGNhZGVuY2VfbmFuZF9nZXRfZWNjX3N0cmVuZ3Ro X2lkeCBmdW5jdGlvbiBpbiBjYXNlCj4+ICAgY29ycmVuY3Rpb24gc3RyZW5ndGggaXMgbm90IGZv dW5kCj4+IC0gYWRkIGNvbW1pdCBtZXNzYWdlCj4+IENoYW5nZXMgZm9yIHYzOgo+PiAtIHJlbW92 ZSBkZWZpbml0aW9ucyBvZiB1bnVzZWQgcmVnaXN0ZXJzCj4+IC0gcmVtb3ZlIGNvbmZpZ3VyaW5n IHJlZ2lzdGVycyB3aGljaCBhcmUgbm90IGV4cGVjdGVkIHRvIGJlIGNvbmZpZ3VyZWQgaW4KPj4g ICBhc3luY2hyb25vdXMgbW9kZQo+PiAtIHJlbW92ZSBub3QgbmVlZGVkIGZ1bmN0aW9uIHJlYWRp bmcgdGltaW5nIHJlZ2lzdGVycwo+PiAtIHJlbW92ZSBpbmZvcm1hdGlvbiBhYm91dCBvb2Igc2l6 ZSBhbmQgd3JpdGUgc2l6ZSBmcm9tIGNkbnNfbmFuZF9jaGlwIHR5cGUKPj4gICBhbmQgdXNlIHZh bGVzIGZyb20gbXRkX2luZm8gZGlyZWN0bHkKPj4gLSB1c2UgbmFuZF9jbGVhbnVwIGluc3RlYWQg b2YgbmFuZF9yZWxlYXNlIGlmIG10ZCBkZXZpY2UgaXMgbm90IHJlZ2lzdGVyZWQgeWV0Cj4+IC0g Zml4IGNhZGVuY2VfbmFuZF9jaGlwc19pbml0IGZ1bmN0aW9uIGFkZCBnYXJiYWdlIGNvbGxlY3Rp b24KPj4gICBpZiBhIGNoaXAgaW5pdCBmYWlscwo+PiAtIHNpbXBsaWZ5IFBIWSBjYWxjdWxhdGlv bnMKPj4gQ2hhbmdlcyBmb3IgdjI6Cj4+IC0gY3JlYXRlIG9uZSB1bml2ZXJzYWwgd2FpdCBmdW5j dGlvbiBmb3IgYWxsIGV2ZW50cyBpbnN0ZWFkIG9mIG9uZQo+PiAgIGZ1bmN0aW9uIHBlciBldmVu dC4KPj4gLSBzcGxpdCBvbmUgYmlnIGZ1bmN0aW9uIGV4ZWN1dGluZyBuYW5kIG9wZXJhdGlvbnMg dG8gc2VwYXJhdGUKPj4gICBmdW5jdGlvbnMgb25lIHBlciBlYWNoIHR5cGUgb2Ygb3BlcmF0aW9u Lgo+PiAtIGFkZCBlcmFzZSBhdG9taWMgb3BlcmF0aW9uIHRvIG5hbmQgb3BlcmF0aW9uIHBhcnNl cgo+PiAtIHJlbW92ZSB1bm5lY2Vzc2FyeSBpbmNsdWRlcy4KPj4gLSByZW1vdmUgdW51c2VkIHJl Z2lzdGVyIGRlZmluZXMKPj4gLSBhZGQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgbmFuZCBjaGlwcwo+ PiAtIHJlbW92ZSBhbGwgY29kZSB1c2luZyBsZWdhY3kgZnVuY3Rpb25zCj4+IC0gcmVtb3ZlIGNo aXAgZGVwZW5kZW50cyBwYXJhbWV0ZXJzIGZyb20gZHRzIGJpbmRpbmdzLCB0aGV5IHdlcmUKPj4g ICBhdHRhY2hlZCB0byB0aGUgU29DIHNwZWNpZmljIGNvbXBhdGlibGUgYXQgdGhlIGRyaXZlciBs ZXZlbAo+PiAtIHNpbXBsaWZ5IGludGVycnVwdCBoYW5kbGluZwo+PiAtIHNpbXBsaWZ5IHRpbWlu ZyBjYWxjdWxhdGlvbnMKPj4gLSBmaXggY2FsY3VsYXRpb24gb2YgbWF4aW11bSBzdXBwb3J0ZWQg Y3Mgc2lnbmFscwo+PiAtIHNpbXBsaWZ5IGVjYyBzaXplIGNhbGN1bGF0aW9uCj4+IC0gcmVtb3Zl IGhlYWRlciBmaWxlIGFuZCBwdXQgd2hvbGUgY29kZSB0byBvbmUgYyBmaWxlCj4+IC0tLQo+PiAg ZHJpdmVycy9tdGQvbmFuZC9yYXcvS2NvbmZpZyAgICAgICAgICAgICAgICAgICB8ICAgIDcgKwo+ PiAgZHJpdmVycy9tdGQvbmFuZC9yYXcvTWFrZWZpbGUgICAgICAgICAgICAgICAgICB8ICAgIDEg Kwo+PiAgZHJpdmVycy9tdGQvbmFuZC9yYXcvY2FkZW5jZS1uYW5kLWNvbnRyb2xsZXIuYyB8IDMw MjEgKysrKysrKysrKysrKysrKysrKysrKysrCj4+ICAzIGZpbGVzIGNoYW5nZWQsIDMwMjkgaW5z ZXJ0aW9ucygrKQo+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbXRkL25hbmQvcmF3L2Nh ZGVuY2UtbmFuZC1jb250cm9sbGVyLmMKPj4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25h bmQvcmF3L0tjb25maWcgYi9kcml2ZXJzL210ZC9uYW5kL3Jhdy9LY29uZmlnCj4+IGluZGV4IGU2 MDQ2MjVlMmRmYS4uNGQyY2UzYjViMmFlIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL210ZC9uYW5k L3Jhdy9LY29uZmlnCj4+ICsrKyBiL2RyaXZlcnMvbXRkL25hbmQvcmF3L0tjb25maWcKPj4gQEAg LTU1Nyw1ICs1NTcsMTIgQEAgY29uZmlnIE1URF9OQU5EX01FU09OCj4+ICAJaGVscAo+PiAgCSAg RW5hYmxlcyBzdXBwb3J0IGZvciBOQU5EIGNvbnRyb2xsZXIgb24gQW1sb2dpYydzIE1lc29uIFNv Q3MuCj4+ICAJICBUaGlzIGNvbnRyb2xsZXIgaXMgZm91bmQgb24gTWVzb24gU29Dcy4KPgo+TWlz c2luZyBzcGFjZT8KPgo+PiArY29uZmlnIE1URF9OQU5EX0NBREVOQ0UKPj4gKwl0cmlzdGF0ZSAi U3VwcG9ydCBDYWRlbmNlIE5BTkQgKEhQTkZDKSBjb250cm9sbGVyIgo+PiArCWRlcGVuZHMgb24g T0YKPgo+IHx8IENPTVBJTEVfVEVTVAo+Cj4+ICsJaGVscAo+PiArCSAgRW5hYmxlIHRoZSBkcml2 ZXIgZm9yIE5BTkQgZmxhc2ggb24gcGxhdGZvcm1zIHVzaW5nIGEgQ2FkZW5jZSBOQU5ECj4+ICsJ ICBjb250cm9sbGVyLgo+PiArCj4+Cj4+ICBlbmRpZiAjIE1URF9OQU5ECj4+IGRpZmYgLS1naXQg YS9kcml2ZXJzL210ZC9uYW5kL3Jhdy9NYWtlZmlsZSBiL2RyaXZlcnMvbXRkL25hbmQvcmF3L01h a2VmaWxlCj4+IGluZGV4IDVhNWE3MmYwNzkzZS4uZjRiMDk5ZjI3NmY3IDEwMDY0NAo+PiAtLS0g YS9kcml2ZXJzL210ZC9uYW5kL3Jhdy9NYWtlZmlsZQo+PiArKysgYi9kcml2ZXJzL210ZC9uYW5k L3Jhdy9NYWtlZmlsZQo+PiBAQCAtNTgsNiArNTgsNyBAQCBvYmotJChDT05GSUdfTVREX05BTkRf TVRLKQkJKz0gbXRrX2VjYy5vIG10a19uYW5kLm8KPj4gIG9iai0kKENPTkZJR19NVERfTkFORF9U RUdSQSkJCSs9IHRlZ3JhX25hbmQubwo+PiAgb2JqLSQoQ09ORklHX01URF9OQU5EX1NUTTMyX0ZN QzIpCSs9IHN0bTMyX2ZtYzJfbmFuZC5vCj4+ICBvYmotJChDT05GSUdfTVREX05BTkRfTUVTT04p CQkrPSBtZXNvbl9uYW5kLm8KPj4gK29iai0kKENPTkZJR19NVERfTkFORF9DQURFTkNFKQkJKz0g Y2FkZW5jZS1uYW5kLWNvbnRyb2xsZXIubwo+Pgo+PiAgbmFuZC1vYmpzIDo9IG5hbmRfYmFzZS5v IG5hbmRfbGVnYWN5Lm8gbmFuZF9iYnQubyBuYW5kX3RpbWluZ3MubyBuYW5kX2lkcy5vCj4+ICBu YW5kLW9ianMgKz0gbmFuZF9vbmZpLm8KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQv cmF3L2NhZGVuY2UtbmFuZC1jb250cm9sbGVyLmMgYi9kcml2ZXJzL210ZC9uYW5kL3Jhdy9jYWRl bmNlLW5hbmQtY29udHJvbGxlci5jCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAw MDAwMDAwMDAwMC4uYTdmZjRlNDU4NWQzCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVy cy9tdGQvbmFuZC9yYXcvY2FkZW5jZS1uYW5kLWNvbnRyb2xsZXIuYwo+PiBAQCAtMCwwICsxLDMw MjEgQEAKPj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKwo+PiArLyoKPj4g KyAqIENhZGVuY2UgTkFORCBmbGFzaCBjb250cm9sbGVyIGRyaXZlcgo+PiArICoKPj4gKyAqIENv cHlyaWdodCAoQykgMjAxOSBDYWRlbmNlCj4KPkkgZ3Vlc3MgeW91IGRlc2VydmUgdGhlIEF1dGhv cjogZW50cnkgaGVyZSA6KQo+Cj4KUmlnaHQuIFRoYW5rcyA6KQogIAo+PiArICovCj4+ICsKPj4g KyNpbmNsdWRlIDxsaW51eC9iaXRmaWVsZC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgo+ PiArI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvZG1h ZW5naW5lLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Cj4+ICsjaW5jbHVkZSA8 bGludXgvbW9kdWxlLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgo+PiArI2luY2x1 ZGUgPGxpbnV4L210ZC9yYXduYW5kLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+ Cj4+ICsjaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+Cj4+ICsKPj4gKy8qCj4+ICsgKiBIUE5GQyBj YW4gd29yayBpbiAzIG1vZGVzOgo+PiArICogLSAgUElPIC0gY2FuIHdvcmsgaW4gbWFzdGVyIG9y IHNsYXZlIERNQS4KPj4gKyAqIC0gIENETUEgLSBuZWVkcyBNYXN0ZXIgRE1BIGZvciBhY2Nlc3Np bmcgY29tbWFuZCBkZXNjcmlwdG9ycy4KPj4gKyAqIC0gIEdlbmVyaWMgbW9kZSAtIGNhbiB1c2Ug b25seSBzbGF2ZSBETUEuCj4+ICsgKiBDRE1BIGFuZCBQSU8gbW9kZXMgY2FuIGJlIHVzZWQgdG8g ZXhlY3V0ZSBvbmx5IGJhc2UgY29tbWFuZHMuCj4+ICsgKiBHZW5lcmljIG1vZGUgY2FuIGJlIHVz ZWQgdG8gZXhlY3V0ZSBhbnkgY29tbWFuZAo+PiArICogb24gTkFORCBmbGFzaCBtZW1vcnkuIERy aXZlciB1c2VzIENETUEgbW9kZSBmb3IKPj4gKyAqIGJsb2NrIGVyYXNpbmcsIHBhZ2UgcmVhZGlu ZywgcGFnZSBwcm9ncmFtaW5nLgo+PiArICogR2VuZXJpYyBtb2RlIGlzIHVzZWQgZm9yIGV4ZWN1 dGluZyByZXN0IG9mIGNvbW1hbmRzLgo+PiArICovCj4+ICsKPj4gKyNkZWZpbmUgTUFYX09PQl9T SVpFX1BFUl9TRUNUT1IJMzIKPj4gKyNkZWZpbmUgTUFYX0FERFJFU1NfQ1lDCQk2Cj4+ICsjZGVm aW5lIE1BWF9FUkFTRV9BRERSRVNTX0NZQwkzCj4+ICsjZGVmaW5lIE1BWF9EQVRBX1NJWkUJCTB4 RkZGQwo+PiArCj4+ICsvKiBSZWdpc3RlciBkZWZpbml0aW9uLiAqLwo+PiArLyoKPj4gKyAqIENv bW1hbmQgcmVnaXN0ZXIgMC4KPj4gKyAqIFdyaXRpbmcgZGF0YSB0byB0aGlzIHJlZ2lzdGVyIHdp bGwgaW5pdGlhdGUgYSBuZXcgdHJhbnNhY3Rpb24KPj4gKyAqIG9mIHRoZSBORiBjb250cm9sbGVy Lgo+PiArICovCj4+ICsjZGVmaW5lIENNRF9SRUcwCQkJMHgwMDAwCj4+ICsvKiBDb21tYW5kIHR5 cGUgZmllbGQgbWFzay4gKi8KPj4gKyNkZWZpbmUJCUNNRF9SRUcwX0NUCQlHRU5NQVNLKDMxLCAz MCkKPj4gKy8qIENvbW1hbmQgdHlwZSBDRE1BLiAqLwo+PiArI2RlZmluZQkJQ01EX1JFRzBfQ1Rf Q0RNQQkwdUwKPj4gKy8qIENvbW1hbmQgdHlwZSBnZW5lcmljLiAqLwo+PiArI2RlZmluZQkJQ01E X1JFRzBfQ1RfR0VOCQkzdUwKPj4gKy8qIENvbW1hbmQgdGhyZWFkIG51bWJlciBmaWVsZCBtYXNr LiAqLwo+PiArI2RlZmluZQkJQ01EX1JFRzBfVE4JCUdFTk1BU0soMjcsIDI0KQo+PiArCj4+ICsv KiBDb21tYW5kIHJlZ2lzdGVyIDIuICovCj4+ICsjZGVmaW5lIENNRF9SRUcyCQkJMHgwMDA4Cj4+ ICsvKiBDb21tYW5kIHJlZ2lzdGVyIDMuICovCj4+ICsjZGVmaW5lIENNRF9SRUczCQkJMHgwMDBD Cj4+ICsvKiBQb2ludGVyIHJlZ2lzdGVyIHRvIHNlbGVjdCB3aGljaCB0aHJlYWQgc3RhdHVzIHdp bGwgYmUgc2VsZWN0ZWQuICovCj4+ICsjZGVmaW5lIENNRF9TVEFUVVNfUFRSCQkJMHgwMDEwCj4+ ICsvKiBDb21tYW5kIHN0YXR1cyByZWdpc3RlciBmb3Igc2VsZWN0ZWQgdGhyZWFkLiAqLwo+PiAr I2RlZmluZSBDTURfU1RBVFVTCQkJMHgwMDE0Cj4+ICsKPj4gKy8qIEludGVycnVwdCBzdGF0dXMg cmVnaXN0ZXIuICovCj4+ICsjZGVmaW5lIElOVFJfU1RBVFVTCQkJMHgwMTEwCj4+ICsjZGVmaW5l CQlJTlRSX1NUQVRVU19TRE1BX0VSUglCSVQoMjIpCj4+ICsjZGVmaW5lCQlJTlRSX1NUQVRVU19T RE1BX1RSSUdHCUJJVCgyMSkKPj4gKyNkZWZpbmUJCUlOVFJfU1RBVFVTX1VOU1VQUF9DTUQJQklU KDE5KQo+PiArI2RlZmluZQkJSU5UUl9TVEFUVVNfRERNQV9URVJSCUJJVCgxOCkKPj4gKyNkZWZp bmUJCUlOVFJfU1RBVFVTX0NETUFfVEVSUglCSVQoMTcpCj4+ICsjZGVmaW5lCQlJTlRSX1NUQVRV U19DRE1BX0lETAlCSVQoMTYpCj4+ICsKPj4gKy8qIEludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIu ICovCj4+ICsjZGVmaW5lIElOVFJfRU5BQkxFCQkJCTB4MDExNAo+PiArI2RlZmluZQkJSU5UUl9F TkFCTEVfSU5UUl9FTgkJQklUKDMxKQo+PiArI2RlZmluZQkJSU5UUl9FTkFCTEVfU0RNQV9FUlJf RU4JCUJJVCgyMikKPj4gKyNkZWZpbmUJCUlOVFJfRU5BQkxFX1NETUFfVFJJR0dfRU4JQklUKDIx KQo+PiArI2RlZmluZQkJSU5UUl9FTkFCTEVfVU5TVVBQX0NNRF9FTglCSVQoMTkpCj4+ICsjZGVm aW5lCQlJTlRSX0VOQUJMRV9ERE1BX1RFUlJfRU4JQklUKDE4KQo+PiArI2RlZmluZQkJSU5UUl9F TkFCTEVfQ0RNQV9URVJSX0VOCUJJVCgxNykKPj4gKyNkZWZpbmUJCUlOVFJfRU5BQkxFX0NETUFf SURMRV9FTglCSVQoMTYpCj4+ICsKPj4gKy8qIENvbnRyb2xsZXIgaW50ZXJuYWwgc3RhdGUuICov Cj4+ICsjZGVmaW5lIENUUkxfU1RBVFVTCQkJCTB4MDExOAo+PiArI2RlZmluZQkJQ1RSTF9TVEFU VVNfSU5JVF9DT01QCQlCSVQoOSkKPj4gKyNkZWZpbmUJCUNUUkxfU1RBVFVTX0NUUkxfQlVTWQkJ QklUKDgpCj4+ICsKPj4gKy8qIENvbW1hbmQgRW5naW5lIHRocmVhZHMgc3RhdGUuICovCj4+ICsj ZGVmaW5lIFRSRF9TVEFUVVMJCQkJMHgwMTIwCj4+ICsKPj4gKy8qIENvbW1hbmQgRW5naW5lIGlu dGVycnVwdCB0aHJlYWQgZXJyb3Igc3RhdHVzLiAqLwo+PiArI2RlZmluZSBUUkRfRVJSX0lOVF9T VEFUVVMJCQkweDAxMjgKPj4gKy8qIENvbW1hbmQgRW5naW5lIGludGVycnVwdCB0aHJlYWQgZXJy b3IgZW5hYmxlLiAqLwo+PiArI2RlZmluZSBUUkRfRVJSX0lOVF9TVEFUVVNfRU4JCQkweDAxMzAK Pj4gKy8qIENvbW1hbmQgRW5naW5lIGludGVycnVwdCB0aHJlYWQgY29tcGxldGUgc3RhdHVzLiAq Lwo+PiArI2RlZmluZSBUUkRfQ09NUF9JTlRfU1RBVFVTCQkJMHgwMTM4Cj4+ICsKPj4gKy8qCj4+ ICsgKiBUcmFuc2ZlciBjb25maWcgMCByZWdpc3Rlci4KPj4gKyAqIENvbmZpZ3VyZXMgZGF0YSB0 cmFuc2ZlciBwYXJhbWV0ZXJzLgo+PiArICovCj4+ICsjZGVmaW5lIFRSQU5fQ0ZHXzAJCQkJMHgw NDAwCj4+ICsvKiBPZmZzZXQgdmFsdWUgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYWdlLiAq Lwo+PiArI2RlZmluZQkJVFJBTl9DRkdfMF9PRkZTRVQJCUdFTk1BU0soMzEsIDE2KQo+PiArLyog TnVtYmVycyBvZiBzZWN0b3JzIHRvIHRyYW5zZmVyIHdpdGhpbiBzaW5nbE5GIGRldmljZSdzIHBh Z2UuICovCj4+ICsjZGVmaW5lCQlUUkFOX0NGR18wX1NFQ19DTlQJCUdFTk1BU0soNywgMCkKPj4g Kwo+PiArLyoKPj4gKyAqIFRyYW5zZmVyIGNvbmZpZyAxIHJlZ2lzdGVyLgo+PiArICogQ29uZmln dXJlcyBkYXRhIHRyYW5zZmVyIHBhcmFtZXRlcnMuCj4+ICsgKi8KPj4gKyNkZWZpbmUgVFJBTl9D RkdfMQkJCQkweDA0MDQKPj4gKy8qIFNpemUgb2YgbGFzdCBkYXRhIHNlY3Rvci4gKi8KPj4gKyNk ZWZpbmUJCVRSQU5fQ0ZHXzFfTEFTVF9TRUNfU0laRQlHRU5NQVNLKDMxLCAxNikKPj4gKy8qIFNp emUgb2Ygbm90LWxhc3QgZGF0YSBzZWN0b3IuICovCj4+ICsjZGVmaW5lCQlUUkFOX0NGR18xX1NF Q1RPUl9TSVpFCQlHRU5NQVNLKDE1LCAwKQo+PiArCj4+ICsvKiBFQ0MgZW5naW5lIGNvbmZpZ3Vy YXRpb24gcmVnaXN0ZXIgMC4gKi8KPj4gKyNkZWZpbmUgRUNDX0NPTkZJR18wCQkJCTB4MDQyOAo+ PiArLyogQ29ycmVjdGlvbiBzdHJlbmd0aC4gKi8KPj4gKyNkZWZpbmUJCUVDQ19DT05GSUdfMF9D T1JSX1NUUgkJR0VOTUFTSygxMCwgOCkKPj4gKy8qIEVuYWJsZSBlcmFzZWQgcGFnZXMgZGV0ZWN0 aW9uIG1lY2hhbmlzbS4gKi8KPj4gKyNkZWZpbmUJCUVDQ19DT05GSUdfMF9FUkFTRV9ERVRfRU4J QklUKDEpCj4+ICsvKiBFbmFibGUgY29udHJvbGxlciBFQ0MgY2hlY2sgYml0cyBnZW5lcmF0aW9u IGFuZCBjb3JyZWN0aW9uLiAqLwo+PiArI2RlZmluZQkJRUNDX0NPTkZJR18wX0VDQ19FTgkJQklU KDApCj4+ICsKPj4gKy8qIEVDQyBlbmdpbmUgY29uZmlndXJhdGlvbiByZWdpc3RlciAxLiAqLwo+ PiArI2RlZmluZSBFQ0NfQ09ORklHXzEJCQkJMHgwNDJDCj4+ICsKPj4gKy8qIE11bHRpcGxhbmUg c2V0dGluZ3MgcmVnaXN0ZXIuICovCj4+ICsjZGVmaW5lIE1VTFRJUExBTkVfQ0ZHCQkJCTB4MDQz NAo+PiArLyogQ2FjaGUgb3BlcmF0aW9uIHNldHRpbmdzLiAqLwo+PiArI2RlZmluZSBDQUNIRV9D RkcJCQkJMHgwNDM4Cj4+ICsKPj4gKy8qIERNQSBzZXR0aW5ncyByZWdpc3Rlci4gKi8KPj4gKyNk ZWZpbmUgRE1BX1NFVElOR1MJCQkJMHgwNDNDCj4+ICsvKiBFbmFibGUgU0RNQSBlcnJvciByZXBv cnQgb24gYWNjZXNzIHVucHJlcGFyZWQgc2xhdmUgRE1BIGludGVyZmFjZS4gKi8KPj4gKyNkZWZp bmUJCURNQV9TRVRJTkdTX1NETUFfRVJSX1JTUAlCSVQoMTcpCj4+ICsKPj4gKy8qIFRyYW5zZmVy cmVkIGRhdGEgYmxvY2sgc2l6ZSBmb3IgdGhlIHNsYXZlIERNQSBtb2R1bGUuICovCj4+ICsjZGVm aW5lIFNETUFfU0laRQkJCQkweDA0NDAKPj4gKwo+PiArLyogVGhyZWFkIG51bWJlciBhc3NvY2lh dGVkIHdpdGggdHJhbnNmZXJyZWQgZGF0YSBibG9jawo+PiArICogZm9yIHRoZSBzbGF2ZSBETUEg bW9kdWxlLgo+PiArICovCj4+ICsjZGVmaW5lIFNETUFfVFJEX05VTQkJCQkweDA0NDQKPj4gKy8q IFRocmVhZCBudW1iZXIgbWFzay4gKi8KPj4gKyNkZWZpbmUJCVNETUFfVFJEX05VTV9TRE1BX1RS RAkJR0VOTUFTSygyLCAwKQo+PiArCj4+ICsjZGVmaW5lIENPTlRST0xfREFUQV9DVFJMCQkJMHgw NDk0Cj4+ICsvKiBUaHJlYWQgbnVtYmVyIG1hc2suICovCj4+ICsjZGVmaW5lCQlDT05UUk9MX0RB VEFfQ1RSTF9TSVpFCQlHRU5NQVNLKDE1LCAwKQo+PiArCj4+ICsjZGVmaW5lIENUUkxfVkVSU0lP TgkJCQkweDgwMAo+PiArCj4+ICsvKiBBdmFpbGFibGUgaGFyZHdhcmUgZmVhdHVyZXMgb2YgdGhl IGNvbnRyb2xsZXIuICovCj4+ICsjZGVmaW5lIENUUkxfRkVBVFVSRVMJCQkJMHg4MDQKPj4gKy8q IFN1cHBvcnQgZm9yIE5WLUREUjIvMyB3b3JrIG1vZGUuICovCj4+ICsjZGVmaW5lCQlDVFJMX0ZF QVRVUkVTX05WRERSXzJfMwkJQklUKDI4KQo+PiArLyogU3VwcG9ydCBmb3IgTlYtRERSIHdvcmsg bW9kZS4gKi8KPj4gKyNkZWZpbmUJCUNUUkxfRkVBVFVSRVNfTlZERFIJCUJJVCgyNykKPj4gKy8q IFN1cHBvcnQgZm9yIGFzeW5jaHJvbm91cyB3b3JrIG1vZGUuICovCj4+ICsjZGVmaW5lCQlDVFJM X0ZFQVRVUkVTX0FTWU5DCQlCSVQoMjYpCj4+ICsvKiBTdXBwb3J0IGZvciBhc3luY2hyb25vdXMg d29yayBtb2RlLiAqLwo+PiArI2RlZmluZQkJQ1RSTF9GRUFUVVJFU19OX0JBTktTCQlHRU5NQVNL KDI1LCAyNCkKPj4gKy8qIFNsYXZlIGFuZCBNYXN0ZXIgRE1BIGRhdGEgd2lkdGguICovCj4+ICsj ZGVmaW5lCQlDVFJMX0ZFQVRVUkVTX0RNQV9EV0lUSDY0CUJJVCgyMSkKPj4gKy8qIEF2YWlsYWJp bGl0eSBvZiBDb250cm9sIERhdGEgZmVhdHVyZS4qLwo+PiArI2RlZmluZQkJQ1RSTF9GRUFUVVJF U19DT05UUk9MX0RBVEEJQklUKDEwKQo+PiArCj4+ICsvKiBCQ0ggRW5naW5lIGlkZW50aWZpY2F0 aW9uIHJlZ2lzdGVyIDAgLSBjb3JyZWN0aW9uIHN0cmVuZ3Rocy4gKi8KPj4gKyNkZWZpbmUgQkNI X0NGR18wCQkJCTB4ODM4Cj4+ICsjZGVmaW5lCQlCQ0hfQ0ZHXzBfQ09SUl9DQVBfMAkJR0VOTUFT Syg3LCAwKQo+PiArI2RlZmluZQkJQkNIX0NGR18wX0NPUlJfQ0FQXzEJCUdFTk1BU0soMTUsIDgp Cj4+ICsjZGVmaW5lCQlCQ0hfQ0ZHXzBfQ09SUl9DQVBfMgkJR0VOTUFTSygyMywgMTYpCj4+ICsj ZGVmaW5lCQlCQ0hfQ0ZHXzBfQ09SUl9DQVBfMwkJR0VOTUFTSygzMSwgMjQpCj4+ICsKPj4gKy8q IEJDSCBFbmdpbmUgaWRlbnRpZmljYXRpb24gcmVnaXN0ZXIgMSAtIGNvcnJlY3Rpb24gc3RyZW5n dGhzLiAqLwo+PiArI2RlZmluZSBCQ0hfQ0ZHXzEJCQkJMHg4M0MKPj4gKyNkZWZpbmUJCUJDSF9D RkdfMV9DT1JSX0NBUF80CQlHRU5NQVNLKDcsIDApCj4+ICsjZGVmaW5lCQlCQ0hfQ0ZHXzFfQ09S Ul9DQVBfNQkJR0VOTUFTSygxNSwgOCkKPj4gKyNkZWZpbmUJCUJDSF9DRkdfMV9DT1JSX0NBUF82 CQlHRU5NQVNLKDIzLCAxNikKPj4gKyNkZWZpbmUJCUJDSF9DRkdfMV9DT1JSX0NBUF83CQlHRU5N QVNLKDMxLCAyNCkKPj4gKwo+PiArLyogQkNIIEVuZ2luZSBpZGVudGlmaWNhdGlvbiByZWdpc3Rl ciAyIC0gc2VjdG9yIHNpemVzLiAqLwo+PiArI2RlZmluZSBCQ0hfQ0ZHXzIJCQkJMHg4NDAKPj4g KyNkZWZpbmUJCUJDSF9DRkdfMl9TRUNUXzAJCUdFTk1BU0soMTUsIDApCj4+ICsjZGVmaW5lCQlC Q0hfQ0ZHXzJfU0VDVF8xCQlHRU5NQVNLKDMxLCAxNikKPj4gKwo+PiArLyogQkNIIEVuZ2luZSBp ZGVudGlmaWNhdGlvbiByZWdpc3RlciAzLiAqLwo+PiArI2RlZmluZSBCQ0hfQ0ZHXzMJCQkJMHg4 NDQKPj4gKwo+PiArLyogUmVhZHkvQnVzeSMgbGluZSBzdGF0dXMuICovCj4+ICsjZGVmaW5lIFJC Tl9TRVRJTkdTCQkJCTB4MTAwNAo+PiArCj4+ICsvKiBDb21tb24gc2V0dGluZ3MuICovCj4+ICsj ZGVmaW5lIENPTU1PTl9TRVQJCQkJMHgxMDA4Cj4+ICsvKiAxNiBiaXQgZGV2aWNlIGNvbm5lY3Rl ZCB0byB0aGUgTkFORCBGbGFzaCBpbnRlcmZhY2UuICovCj4+ICsjZGVmaW5lCQlDT01NT05fU0VU X0RFVklDRV8xNkJJVAkJQklUKDgpCj4+ICsKPj4gKy8qIFNraXBfYnl0ZXMgcmVnaXN0ZXJzLiAq Lwo+PiArI2RlZmluZSBTS0lQX0JZVEVTX0NPTkYJCQkJMHgxMDBDCj4+ICsjZGVmaW5lCQlTS0lQ X0JZVEVTX01BUktFUl9WQUxVRQkJR0VOTUFTSygzMSwgMTYpCj4+ICsjZGVmaW5lCQlTS0lQX0JZ VEVTX05VTV9PRl9CWVRFUwkJR0VOTUFTSyg3LCAwKQo+PiArCj4+ICsjZGVmaW5lIFNLSVBfQllU RVNfT0ZGU0VUCQkJMHgxMDEwCj4+ICsjZGVmaW5lCQkgU0tJUF9CWVRFU19PRkZTRVRfVkFMVUUJ R0VOTUFTSygyMywgMCkKPj4gKwo+PiArLyogVGltaW5ncyBjb25maWd1cmF0aW9uLiAqLwo+PiAr I2RlZmluZSBBU1lOQ19UT0dHTEVfVElNSU5HUwkJCTB4MTAxYwo+PiArI2RlZmluZQkJQVNZTkNf VE9HR0xFX1RJTUlOR1NfVFJICUdFTk1BU0soMjgsIDI0KQo+PiArI2RlZmluZQkJQVNZTkNfVE9H R0xFX1RJTUlOR1NfVFJQCUdFTk1BU0soMjAsIDE2KQo+PiArI2RlZmluZQkJQVNZTkNfVE9HR0xF X1RJTUlOR1NfVFdICUdFTk1BU0soMTIsIDgpCj4+ICsjZGVmaW5lCQlBU1lOQ19UT0dHTEVfVElN SU5HU19UV1AJR0VOTUFTSyg0LCAwKQo+PiArCj4+ICsjZGVmaW5lCVRJTUlOR1MwCQkJCTB4MTAy NAo+PiArI2RlZmluZQkJVElNSU5HUzBfVEFETAkJCUdFTk1BU0soMzEsIDI0KQo+PiArI2RlZmlu ZQkJVElNSU5HUzBfVENDUwkJCUdFTk1BU0soMjMsIDE2KQo+PiArI2RlZmluZQkJVElNSU5HUzBf VFdIUgkJCUdFTk1BU0soMTUsIDgpCj4+ICsjZGVmaW5lCQlUSU1JTkdTMF9UUkhXCQkJR0VOTUFT Syg3LCAwKQo+PiArCj4+ICsjZGVmaW5lCVRJTUlOR1MxCQkJCTB4MTAyOAo+PiArI2RlZmluZQkJ VElNSU5HUzFfVFJIWgkJCUdFTk1BU0soMzEsIDI0KQo+PiArI2RlZmluZQkJVElNSU5HUzFfVFdC CQkJR0VOTUFTSygyMywgMTYpCj4+ICsjZGVmaW5lCQlUSU1JTkdTMV9UVkRMWQkJCUdFTk1BU0so NywgMCkKPj4gKwo+PiArI2RlZmluZQlUSU1JTkdTMgkJCQkweDEwMmMKPj4gKyNkZWZpbmUJCVRJ TUlOR1MyX1RGRUFUCQkJR0VOTUFTSygyNSwgMTYpCj4+ICsjZGVmaW5lCQlUSU1JTkdTMl9DU19I T0xEX1RJTUUJCUdFTk1BU0soMTMsIDgpCj4+ICsjZGVmaW5lCQlUSU1JTkdTMl9DU19TRVRVUF9U SU1FCQlHRU5NQVNLKDUsIDApCj4+ICsKPj4gKy8qIENvbmZpZ3VyYXRpb24gb2YgdGhlIHJlc3lu Y2hyb25pemF0aW9uIG9mIHNsYXZlIERMTCBvZiBQSFkuICovCj4+ICsjZGVmaW5lIERMTF9QSFlf Q1RSTAkJCQkweDEwMzQKPj4gKyNkZWZpbmUJCURMTF9QSFlfQ1RSTF9ETExfUlNUX04JCUJJVCgy NCkKPj4gKyNkZWZpbmUJCURMTF9QSFlfQ1RSTF9FWFRFTkRFRF9XUl9NT0RFCUJJVCgxNykKPj4g KyNkZWZpbmUJCURMTF9QSFlfQ1RSTF9FWFRFTkRFRF9SRF9NT0RFCUJJVCgxNikKPj4gKyNkZWZp bmUJCURMTF9QSFlfQ1RSTF9SU19ISUdIX1dBSVRfQ05UCUdFTk1BU0soMTEsIDgpCj4+ICsjZGVm aW5lCQlETExfUEhZX0NUUkxfUlNfSURMRV9DTlQJR0VOTUFTSyg3LCAwKQo+PiArCj4+ICsvKiBS ZWdpc3RlciBjb250cm9sbGluZyBEUSByZWxhdGVkIHRpbWluZy4gKi8KPj4gKyNkZWZpbmUgUEhZ X0RRX1RJTUlORwkJCQkweDIwMDAKPj4gKy8qIFJlZ2lzdGVyIGNvbnRyb2xsaW5nIERTUSByZWxh dGVkIHRpbWluZy4gICovCj4+ICsjZGVmaW5lIFBIWV9EUVNfVElNSU5HCQkJCTB4MjAwNAo+PiAr I2RlZmluZQkJUEhZX0RRU19USU1JTkdfRFFTX1NFTF9PRV9FTkQJR0VOTUFTSygzLCAwKQo+PiAr I2RlZmluZQkJUEhZX0RRU19USU1JTkdfUEhPTllfRFFTX1NFTAlCSVQoMTYpCj4+ICsjZGVmaW5l CQlQSFlfRFFTX1RJTUlOR19VU0VfUEhPTllfRFFTCUJJVCgyMCkKPj4gKwo+PiArLyogUmVnaXN0 ZXIgY29udHJvbGxpbmcgdGhlIGdhdGUgYW5kIGxvb3BiYWNrIGNvbnRyb2wgcmVsYXRlZCB0aW1p bmcuICovCj4+ICsjZGVmaW5lIFBIWV9HQVRFX0xQQktfQ1RSTAkJCTB4MjAwOAo+PiArI2RlZmlu ZQkJUEhZX0dBVEVfTFBCS19DVFJMX1JEUwkJR0VOTUFTSygyNCwgMTkpCj4+ICsKPj4gKy8qIFJl Z2lzdGVyIGhvbGRzIHRoZSBjb250cm9sIGZvciB0aGUgbWFzdGVyIERMTCBsb2dpYy4gKi8KPj4g KyNkZWZpbmUgUEhZX0RMTF9NQVNURVJfQ1RSTAkJCTB4MjAwQwo+PiArI2RlZmluZQkJUEhZX0RM TF9NQVNURVJfQ1RSTF9CWVBBU1NfTU9ERQlCSVQoMjMpCj4+ICsKPj4gKy8qIFJlZ2lzdGVyIGhv bGRzIHRoZSBjb250cm9sIGZvciB0aGUgc2xhdmUgRExMIGxvZ2ljLiAqLwo+PiArI2RlZmluZSBQ SFlfRExMX1NMQVZFX0NUUkwJCQkweDIwMTAKPj4gKwo+PiArLyogVGhpcyByZWdpc3RlciBoYW5k bGVzIHRoZSBnbG9iYWwgY29udHJvbCBzZXR0aW5ncyBmb3IgdGhlIFBIWS4gKi8KPj4gKyNkZWZp bmUgUEhZX0NUUkwJCQkJMHgyMDgwCj4+ICsjZGVmaW5lCQlQSFlfQ1RSTF9TRFJfRFFTCQlCSVQo MTQpCj4+ICsjZGVmaW5lCQlQSFlfQ1RSTF9QSE9OWV9EUVMJCUdFTk1BU0soOSwgNCkKPj4gKwo+ PiArLyoKPj4gKyAqIFRoaXMgcmVnaXN0ZXIgaGFuZGxlcyB0aGUgZ2xvYmFsIGNvbnRyb2wgc2V0 dGluZ3MKPj4gKyAqIGZvciB0aGUgdGVybWluYXRpb24gc2VsZWN0cyBmb3IgcmVhZHMuCj4+ICsg Ki8KPj4gKyNkZWZpbmUgUEhZX1RTRUwJCQkJMHgyMDg0Cj4+ICsKPj4gKy8qIEdlbmVyaWMgY29t bWFuZCBsYXlvdXQuICovCj4+ICsjZGVmaW5lIEdDTURfTEFZX0NTCQkJR0VOTUFTS19VTEwoMTEs IDgpCj4+ICsvKgo+PiArICogVGhpcyBiaXQgaW5mb3JtcyB0aGUgbWluaWNvdHJvbGxlciBpZiBp dCBoYXMgdG8gd2FpdCBmb3IgdFdCCj4+ICsgKiBhZnRlciBzZW5kaW5nIHRoZSBsYXN0IENNRC9B RERSL0RBVEEgaW4gdGhlIHNlcXVlbmNlLgo+PiArICovCj4+ICsjZGVmaW5lIEdDTURfTEFZX1RX QgkJCUJJVF9VTEwoNikKPj4gKy8qIFR5cGUgb2YgZ2VuZXJpYyBpbnN0cnVjdGlvbi4gKi8KPj4g KyNkZWZpbmUgR0NNRF9MQVlfSU5TVFIJCQlHRU5NQVNLX1VMTCg1LCAwKQo+PiArCj4+ICsvKiBH ZW5lcmljIENNRCBzZXF1ZW5jZSB0eXBlLiAqLwo+PiArI2RlZmluZQkJR0NNRF9MQVlfSU5TVFJf Q01ECTAKPj4gKy8qIEdlbmVyaWMgQUREUiBzZXF1ZW5jZSB0eXBlLiAqLwo+PiArI2RlZmluZQkJ R0NNRF9MQVlfSU5TVFJfQUREUgkxCj4+ICsvKiBHZW5lcmljIGRhdGEgdHJhbnNmZXIgc2VxdWVu Y2UgdHlwZS4gKi8KPj4gKyNkZWZpbmUJCUdDTURfTEFZX0lOU1RSX0RBVEEJMgo+PiArCj4+ICsv KiBJbnB1dCBwYXJ0IG9mIGdlbmVyaWMgY29tbWFuZCB0eXBlIG9mIGlucHV0IGlzIGNvbW1hbmQu ICovCj4+ICsjZGVmaW5lIEdDTURfTEFZX0lOUFVUX0NNRAkJR0VOTUFTS19VTEwoMjMsIDE2KQo+ PiArCj4+ICsvKiBHZW5lcmljIGNvbW1hbmQgYWRkcmVzcyBzZXF1ZW5jZSAtIGFkZHJlc3MgZmll bGRzLiAqLwo+PiArI2RlZmluZSBHQ01EX0xBWV9JTlBVVF9BRERSCQlHRU5NQVNLX1VMTCg2Mywg MTYpCj4+ICsvKiBHZW5lcmljIGNvbW1hbmQgYWRkcmVzcyBzZXF1ZW5jZSAtIGFkZHJlc3Mgc2l6 ZS4gKi8KPj4gKyNkZWZpbmUgR0NNRF9MQVlfSU5QVVRfQUREUl9TSVpFCUdFTk1BU0tfVUxMKDEz LCAxMSkKPj4gKwo+PiArLyogVHJhbnNmZXIgZGlyZWN0aW9uIGZpZWxkIG9mIGdlbmVyaWMgY29t bWFuZCBkYXRhIHNlcXVlbmNlLiAqLwo+PiArI2RlZmluZSBHQ01EX0RJUgkJCUJJVF9VTEwoMTEp Cj4+ICsvKiBSZWFkIHRyYW5zZmVyIGRpcmVjdGlvbiBvZiBnZW5lcmljIGNvbW1hbmQgZGF0YSBz ZXF1ZW5jZS4gKi8KPj4gKyNkZWZpbmUJCUdDTURfRElSX1JFQUQJCTAKPj4gKy8qIFdyaXRlIHRy YW5zZmVyIGRpcmVjdGlvbiBvZiBnZW5lcmljIGNvbW1hbmQgZGF0YSBzZXF1ZW5jZS4gKi8KPj4g KyNkZWZpbmUJCUdDTURfRElSX1dSSVRFCQkxCj4+ICsKPj4gKy8qIEVDQyBlbmFibGVkIGZsYWcg b2YgZ2VuZXJpYyBjb21tYW5kIGRhdGEgc2VxdWVuY2UgLSBFQ0MgZW5hYmxlZC4gKi8KPj4gKyNk ZWZpbmUgR0NNRF9FQ0NfRU4JCQlCSVRfVUxMKDEyKQo+PiArLyogR2VuZXJpYyBjb21tYW5kIGRh dGEgc2VxdWVuY2UgLSBzZWN0b3Igc2l6ZS4gKi8KPj4gKyNkZWZpbmUgR0NNRF9TRUNUX1NJWkUJ CQlHRU5NQVNLX1VMTCgzMSwgMTYpCj4+ICsvKiBHZW5lcmljIGNvbW1hbmQgZGF0YSBzZXF1ZW5j ZSAtIHNlY3RvciBjb3VudC4gKi8KPj4gKyNkZWZpbmUgR0NNRF9TRUNUX0NOVAkJCUdFTk1BU0tf VUxMKDM5LCAzMikKPj4gKy8qIEdlbmVyaWMgY29tbWFuZCBkYXRhIHNlcXVlbmNlIC0gbGFzdCBz ZWN0b3Igc2l6ZS4gKi8KPj4gKyNkZWZpbmUgR0NNRF9MQVNUX1NJWkUJCQlHRU5NQVNLX1VMTCg1 NSwgNDApCj4+ICsKPj4gKy8qIENETUEgZGVzY3JpcHRvciBmaWVsZHMuICovCj4+ICsvKiBFcmFz ZSBjb21tYW5kIHR5cGUgb2YgQ0RNQSBkZXNjcmlwdG9yLiAqLwo+PiArI2RlZmluZSBDRE1BX0NU X0VSQVNFCQkweDEwMDAKPj4gKy8qIFByb2dyYW0gcGFnZSBjb21tYW5kIHR5cGUgb2YgQ0RNQSBk ZXNjcmlwdG9yLiAqLwo+PiArI2RlZmluZSBDRE1BX0NUX1dSCQkweDIxMDAKPj4gKy8qIFJlYWQg cGFnZSBjb21tYW5kIHR5cGUgb2YgQ0RNQSBkZXNjcmlwdG9yLiAqLwo+PiArI2RlZmluZSBDRE1B X0NUX1JECQkweDIyMDAKPj4gKwo+PiArLyogRmxhc2ggcG9pbnRlciBtZW1vcnkgc2hpZnQuICov Cj4+ICsjZGVmaW5lIENETUFfQ0ZQVFJfTUVNX1NISUZUCTI0Cj4+ICsvKiBGbGFzaCBwb2ludGVy IG1lbW9yeSBtYXNrLiAqLwo+PiArI2RlZmluZSBDRE1BX0NGUFRSX01FTQkJR0VOTUFTSygyNiwg MjQpCj4+ICsKPj4gKy8qCj4+ICsgKiBDb21tYW5kIERNQSBkZXNjcmlwdG9yIGZsYWdzLiBJZiBz ZXQgY2F1c2VzIGlzc3VlIGludGVycnVwdCBhZnRlcgo+PiArICogdGhlIGNvbXBsZXRpb24gb2Yg ZGVzY3JpcHRvciBwcm9jZXNzaW5nLgo+PiArICovCj4+ICsjZGVmaW5lIENETUFfQ0ZfSU5UCQlC SVQoOCkKPj4gKy8qCj4+ICsgKiBDb21tYW5kIERNQSBkZXNjcmlwdG9yIGZsYWdzIC0gdGhlIG5l eHQgZGVzY3JpcHRvcgo+PiArICogYWRkcmVzcyBmaWVsZCBpcyB2YWxpZCBhbmQgZGVzY3JpcHRv ciBwcm9jZXNzaW5nIHNob3VsZCBjb250aW51ZS4KPj4gKyAqLwo+PiArI2RlZmluZSBDRE1BX0NG X0NPTlQJCUJJVCg5KQo+PiArLyogRE1BIG1hc3RlciBmbGFnIG9mIGNvbW1hbmQgRE1BIGRlc2Ny aXB0b3IuICovCj4+ICsjZGVmaW5lIENETUFfQ0ZfRE1BX01BU1RFUglCSVQoMTApCj4+ICsKPj4g Ky8qIE9wZXJhdGlvbiBjb21wbGV0ZSBzdGF0dXMgb2YgY29tbWFuZCBkZXNjcmlwdG9yLiAqLwo+ PiArI2RlZmluZSBDRE1BX0NTX0NPTVAJCUJJVCgxNSkKPj4gKy8qIE9wZXJhdGlvbiBjb21wbGV0 ZSBzdGF0dXMgb2YgY29tbWFuZCBkZXNjcmlwdG9yLiAqLwo+PiArLyogQ29tbWFuZCBkZXNjcmlw dG9yIHN0YXR1cyAtIG9wZXJhdGlvbiBmYWlsLiAqLwo+PiArI2RlZmluZSBDRE1BX0NTX0ZBSUwJ CUJJVCgxNCkKPj4gKy8qIENvbW1hbmQgZGVzY3JpcHRvciBzdGF0dXMgLSBwYWdlIGVyYXNlZC4g Ki8KPj4gKyNkZWZpbmUgQ0RNQV9DU19FUlAJCUJJVCgxMSkKPj4gKy8qIENvbW1hbmQgZGVzY3Jp cHRvciBzdGF0dXMgLSB0aW1lb3V0IG9jY3VycmVkLiAqLwo+PiArI2RlZmluZSBDRE1BX0NTX1RP VVQJCUJJVCgxMCkKPj4gKy8qCj4+ICsgKiBNYXhpbXVtIGFtb3VudCBvZiBjb3JyZWN0aW9uIGFw cGxpZWQgdG8gb25lIEVDQyBzZWN0b3IuCj4+ICsgKiBJdCBpcyBwYXJ0IG9mIGNvbW1hbmQgZGVz Y3JpcHRvciBzdGF0dXMuCj4+ICsgKi8KPj4gKyNkZWZpbmUgQ0RNQV9DU19NQVhFUlIJCUdFTk1B U0soOSwgMikKPj4gKy8qIENvbW1hbmQgZGVzY3JpcHRvciBzdGF0dXMgLSB1bmNvcnJlY3RhYmxl IEVDQyBlcnJvci4gKi8KPj4gKyNkZWZpbmUgQ0RNQV9DU19VTkNFCQlCSVQoMSkKPj4gKy8qIENv bW1hbmQgZGVzY3JpcHRvciBzdGF0dXMgLSBkZXNjcmlwdG9yIGVycm9yLiAqLwo+PiArI2RlZmlu ZSBDRE1BX0NTX0VSUgkJQklUKDApCj4+ICsKPj4gKy8qIFN0YXR1cyBvZiBvcGVyYXRpb24gLSBP Sy4gKi8KPj4gKyNkZWZpbmUgU1RBVF9PSwkJCTAKPj4gKy8qIFN0YXR1cyBvZiBvcGVyYXRpb24g LSBGQUlMLiAqLwo+PiArI2RlZmluZSBTVEFUX0ZBSUwJCTIKPj4gKy8qIFN0YXR1cyBvZiBvcGVy YXRpb24gLSB1bmNvcnJlY3RhYmxlIEVDQyBlcnJvci4gKi8KPj4gKyNkZWZpbmUgU1RBVF9FQ0Nf VU5DT1JSCQkzCj4+ICsvKiBTdGF0dXMgb2Ygb3BlcmF0aW9uIC0gcGFnZSBlcmFzZWQuICovCj4+ ICsjZGVmaW5lIFNUQVRfRVJBU0VECQk1Cj4+ICsvKiBTdGF0dXMgb2Ygb3BlcmF0aW9uIC0gY29y cmVjdGFibGUgRUNDIGVycm9yLiAqLwo+PiArI2RlZmluZSBTVEFUX0VDQ19DT1JSCQk2Cj4+ICsv KiBTdGF0dXMgb2Ygb3BlcmF0aW9uIC0gdW5zdXNwZWN0ZWQgc3RhdGUuICovCj4+ICsjZGVmaW5l IFNUQVRfVU5LTk9XTgkJNwo+PiArLyogU3RhdHVzIG9mIG9wZXJhdGlvbiAtIG9wZXJhdGlvbiBp cyBub3QgY29tcGxldGVkIHlldC4gKi8KPj4gKyNkZWZpbmUgU1RBVF9CVVNZCQkweEZGCj4+ICsK Pj4gKyNkZWZpbmUgQkNIX01BWF9OVU1fQ09SUl9DQVBTCQk4Cj4+ICsjZGVmaW5lIEJDSF9NQVhf TlVNX1NFQ1RPUl9TSVpFUwkyCj4+ICsKPj4gK3N0cnVjdCBjYWRlbmNlX25hbmRfdGltaW5ncyB7 Cj4+ICsJdTMyIGFzeW5jX3RvZ2dsZV90aW1pbmdzOwo+PiArCXUzMiB0aW1pbmdzMDsKPj4gKwl1 MzIgdGltaW5nczE7Cj4+ICsJdTMyIHRpbWluZ3MyOwo+PiArCXUzMiBkbGxfcGh5X2N0cmw7Cj4+ ICsJdTMyIHBoeV9jdHJsOwo+PiArCXUzMiBwaHlfZHFzX3RpbWluZzsKPj4gKwl1MzIgcGh5X2dh dGVfbHBia19jdHJsOwo+PiArfTsKPj4gKwo+PiArLyogQ29tbWFuZCBETUEgZGVzY3JpcHRvci4g Ki8KPj4gK3N0cnVjdCBjYWRlbmNlX25hbmRfY2RtYV9kZXNjIHsKPj4gKwkvKiBOZXh0IGRlc2Ny aXB0b3IgYWRkcmVzcy4gKi8KPj4gKwl1NjQgbmV4dF9wb2ludGVyOwo+PiArCj4+ICsJLyogRmxh c2ggYWRkcmVzcyBpcyBhIDMyLWJpdCBhZGRyZXNzIGNvbXByaXNpbmcgb2YgQkFOSyBhbmQgUk9X IEFERFIuICovCj4+ICsJdTMyIGZsYXNoX3BvaW50ZXI7Cj4+ICsJdTMyIHJzdmQwOwo+PiArCj4+ ICsJLyogT3BlcmF0aW9uIHRoZSBjb250cm9sbGVyIG5lZWRzIHRvIHBlcmZvcm0uICovCj4+ICsJ dTE2IGNvbW1hbmRfdHlwZTsKPj4gKwl1MTYgcnN2ZDE7Cj4+ICsJLyogRmxhZ3MgZm9yIG9wZXJh dGlvbiBvZiB0aGlzIGNvbW1hbmQuICovCj4+ICsJdTE2IGNvbW1hbmRfZmxhZ3M7Cj4+ICsJdTE2 IHJzdmQyOwo+PiArCj4+ICsJLyogU3lzdGVtL2hvc3QgbWVtb3J5IGFkZHJlc3MgcmVxdWlyZWQg Zm9yIGRhdGEgRE1BIGNvbW1hbmRzLiAqLwo+PiArCXU2NCBtZW1vcnlfcG9pbnRlcjsKPj4gKwo+ PiArCS8qIFN0YXR1cyBvZiBvcGVyYXRpb24uICovCj4+ICsJdTMyIHN0YXR1czsKPj4gKwl1MzIg cnN2ZDM7Cj4+ICsKPj4gKwkvKiBBZGRyZXNzIHBvaW50ZXIgdG8gc3luYyBidWZmZXIgbG9jYXRp b24uICovCj4+ICsJdTY0IHN5bmNfZmxhZ19wb2ludGVyOwo+PiArCj4+ICsJLyogQ29udHJvbHMg dGhlIGJ1ZmZlciBzeW5jIG1lY2hhbmlzbS4gKi8KPj4gKwl1MzIgc3luY19hcmd1bWVudHM7Cj4+ ICsJdTMyIHJzdmQ0Owo+PiArCj4+ICsJLyogQ29udHJvbCBkYXRhIHBvaW50ZXIuICovCj4+ICsJ dTY0IGN0cmxfZGF0YV9wdHI7Cj4+ICt9Owo+PiArCj4+ICsvKiBJbnRlcnJ1cHQgc3RhdHVzLiAq Lwo+PiArc3RydWN0IGNhZGVuY2VfbmFuZF9pcnFfc3RhdHVzIHsKPj4gKwkvKiBUaHJlYWQgb3Bl cmF0aW9uIGNvbXBsZXRlIHN0YXR1cy4gKi8KPj4gKwl1MzIgdHJkX3N0YXR1czsKPj4gKwkvKiBU aHJlYWQgb3BlcmF0aW9uIGVycm9yLiAqLwo+PiArCXUzMiB0cmRfZXJyb3I7Cj4+ICsJLyogQ29u dHJvbGxlciBzdGF0dXMuICovCj4+ICsJdTMyIHN0YXR1czsKPj4gK307Cj4+ICsKPj4gKy8qIENh ZGVuY2UgTkFORCBmbGFzaCBjb250cm9sbGVyIGNhcGFiaWxpdGllcyBnZXQgZnJvbSBkcml2ZXIg ZGF0YS4gKi8KPj4gK3N0cnVjdCBjYWRlbmNlX25hbmRfZHRfZGV2ZGF0YSB7Cj4+ICsJLyogU2tl dyB2YWx1ZSBvZiB0aGUgb3V0cHV0IHNpZ25hbHMgb2YgdGhlIE5BTkQgRmxhc2ggaW50ZXJmYWNl LiAqLwo+PiArCXUzMiBpZl9za2V3Owo+PiArCS8qIEl0IGluZm9ybXMgaWYgc2xhdmUgRE1BIGlu dGVyZmFjZSBpcyBjb25uZWN0ZWQgdG8gRE1BIGVuZ2luZS4gKi8KPj4gKwl1bnNpZ25lZCBpbnQg aGFzX2RtYToxOwo+PiArfTsKPj4gKwo+PiArLyogQ2FkZW5jZSBOQU5EIGZsYXNoIGNvbnRyb2xs ZXIgY2FwYWJpbGl0aWVzIHJlYWQgZnJvbSByZWdpc3RlcnMuICovCj4+ICtzdHJ1Y3QgY2Ruc19u YW5kX2NhcHMgewo+PiArCS8qIE1heGltdW0gbnVtYmVyIG9mIGJhbmtzIHN1cHBvcnRlZCBieSBo YXJkd2FyZS4gKi8KPj4gKwl1OCBtYXhfYmFua3M7Cj4+ICsJLyogU2xhdmUgYW5kIE1hc3RlciBE TUEgZGF0YSB3aWR0aCBpbiBieXRlcyAoNCBvciA4KS4gKi8KPj4gKwl1OCBkYXRhX2RtYV93aWR0 aDsKPj4gKwkvKiBDb250cm9sIERhdGEgZmVhdHVyZSBzdXBwb3J0ZWQuICovCj4+ICsJdTggZGF0 YV9jb250cm9sX3N1cHA7Cj4+ICsJLyogSXMgUEhZIHR5cGUgRExMLiAqLwo+PiArCXU4IGlzX3Bo eV90eXBlX2RsbDsKPj4gK307Cj4+ICsKPj4gK3N0cnVjdCBjZG5zX25hbmRfY3RybCB7Cj4+ICsJ c3RydWN0IGRldmljZSAqZGV2Owo+PiArCXN0cnVjdCBuYW5kX2NvbnRyb2xsZXIgY29udHJvbGxl cjsKPj4gKwlzdHJ1Y3QgY2FkZW5jZV9uYW5kX2NkbWFfZGVzYyAqY2RtYV9kZXNjOwo+PiArCS8q IElQIGNhcGFiaWxpdHkuICovCj4+ICsJY29uc3Qgc3RydWN0IGNhZGVuY2VfbmFuZF9kdF9kZXZk YXRhICpjYXBzMTsKPj4gKwlzdHJ1Y3QgY2Ruc19uYW5kX2NhcHMgY2FwczI7Cj4+ICsJZG1hX2Fk ZHJfdCBkbWFfY2RtYV9kZXNjOwo+PiArCXU4ICpidWY7Cj4+ICsJdTMyIGJ1Zl9zaXplOwo+PiAr CXU4IGN1cnJfY29ycl9zdHJfaWR4Owo+PiArCj4+ICsJLyogUmVnaXN0ZXIgaW50ZXJmYWNlLiAq Lwo+PiArCXZvaWQgX19pb21lbSAqcmVnOwo+PiArCj4+ICsJc3RydWN0IHsKPj4gKwkJdm9pZCBf X2lvbWVtICp2aXJ0Owo+PiArCQlkbWFfYWRkcl90IGRtYTsKPj4gKwl9IGlvOwo+PiArCj4+ICsJ aW50IGlycTsKPj4gKwkvKiBJbnRlcnJ1cHRzIHRoYXQgaGF2ZSBoYXBwZW5lZC4gKi8KPj4gKwlz dHJ1Y3QgY2FkZW5jZV9uYW5kX2lycV9zdGF0dXMgaXJxX3N0YXR1czsKPj4gKwkvKiBJbnRlcnJ1 cHRzIHdlIGFyZSB3YWl0aW5nIGZvci4gKi8KPj4gKwlzdHJ1Y3QgY2FkZW5jZV9uYW5kX2lycV9z dGF0dXMgaXJxX21hc2s7Cj4+ICsJc3RydWN0IGNvbXBsZXRpb24gY29tcGxldGU7Cj4+ICsJLyog UHJvdGVjdCBpcnFfbWFzayBhbmQgaXJxX3N0YXR1cy4gKi8KPj4gKwlzcGlubG9ja190IGlycV9s b2NrOwo+PiArCj4+ICsJaW50IGVjY19zdHJlbmd0aHNbQkNIX01BWF9OVU1fQ09SUl9DQVBTXTsK Pj4gKwlzdHJ1Y3QgbmFuZF9lY2Nfc3RlcF9pbmZvIGVjY19zdGVwaW5mb3NbQkNIX01BWF9OVU1f U0VDVE9SX1NJWkVTXTsKPj4gKwlzdHJ1Y3QgbmFuZF9lY2NfY2FwcyBlY2NfY2FwczsKPj4gKwo+ PiArCWludCBjdXJyX3RyYW5zX3R5cGU7Cj4+ICsKPj4gKwlzdHJ1Y3QgZG1hX2NoYW4gKmRtYWM7 Cj4+ICsKPj4gKwl1MzIgbmZfY2xrX3JhdGU7Cj4+ICsJLyoKPj4gKwkgKiBFc3RpbWF0ZWQgQm9h cmQgZGVsYXkuIFRoZSB2YWx1ZSBpbmNsdWRlcyB0aGUgdG90YWwKPj4gKwkgKiByb3VuZCB0cmlw IGRlbGF5IGZvciB0aGUgc2lnbmFscyBhbmQgaXMgdXNlZCBmb3IgZGVjaWRpbmcgb24gdmFsdWVz Cj4+ICsJICogYXNzb2NpYXRlZCB3aXRoIGRhdGEgcmVhZCBjYXB0dXJlLgo+PiArCSAqLwo+PiAr CXUzMiBib2FyZF9kZWxheTsKPj4gKwo+PiArCXN0cnVjdCBuYW5kX2NoaXAgKnNlbGVjdGVkX2No aXA7Cj4+ICsKPj4gKwl1bnNpZ25lZCBsb25nIGFzc2lnbmVkX2NzOwo+PiArCXN0cnVjdCBsaXN0 X2hlYWQgY2hpcHM7Cj4+ICt9Owo+PiArCj4+ICtzdHJ1Y3QgY2Ruc19uYW5kX2NoaXAgewo+PiAr CXN0cnVjdCBjYWRlbmNlX25hbmRfdGltaW5ncyB0aW1pbmdzOwo+PiArCXN0cnVjdCBuYW5kX2No aXAgY2hpcDsKPj4gKwl1OCBuc2VsczsKPj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Cj4+ICsK Pj4gKwkvKgo+PiArCSAqIHBhcnQgb2Ygb29iIGFyZWEgb2YgTkFORCBmbGFzaCBtZW1vcnkgcGFn ZS4KPj4gKwkgKiBUaGlzIHBhcnQgaXMgYXZhaWxhYmxlIGZvciB1c2VyIHRvIHJlYWQgb3Igd3Jp dGUuCj4+ICsJICovCj4+ICsJdTMyIGF2YWlsX29vYl9zaXplOwo+PiArCj4+ICsJLyogU2VjdG9y IHNpemUuIFRoZXJlIGFyZSBmZXcgc2VjdG9ycyBwZXIgbXRkLT53cml0ZXNpemUgKi8KPj4gKwl1 MzIgc2VjdG9yX3NpemU7Cj4+ICsJdTMyIHNlY3Rvcl9jb3VudDsKPj4gKwo+PiArCS8qIE9mZnNl dCBvZiBCQk0uICovCj4+ICsJdTggYmJtX29mZnM7Cj4+ICsJLyogTnVtYmVyIG9mIGJ5dGVzIHJl c2VydmVkIGZvciBCQk0uICovCj4+ICsJdTggYmJtX2xlbjsKPj4gKwkvKiBFQ0Mgc3RyZW5ndGgg aW5kZXguICovCj4+ICsJdTggY29ycl9zdHJfaWR4Owo+PiArCj4+ICsJdTggY3NbXTsKPj4gK307 Cj4+ICsKPj4gK3N0cnVjdCBlY2NfaW5mbyB7Cj4+ICsJaW50ICgqY2FsY19lY2NfYnl0ZXMpKGlu dCBzdGVwX3NpemUsIGludCBzdHJlbmd0aCk7Cj4+ICsJaW50IG1heF9zdGVwX3NpemU7Cj4+ICt9 Owo+PiArCj4+ICtzdGF0aWMgaW5saW5lIHN0cnVjdAo+PiArY2Ruc19uYW5kX2NoaXAgKnRvX2Nk bnNfbmFuZF9jaGlwKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXApCj4+ICt7Cj4+ICsJcmV0dXJuIGNv bnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgY2Ruc19uYW5kX2NoaXAsIGNoaXApOwo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgaW5saW5lIHN0cnVjdAo+PiArY2Ruc19uYW5kX2N0cmwgKnRvX2NkbnNfbmFu ZF9jdHJsKHN0cnVjdCBuYW5kX2NvbnRyb2xsZXIgKmNvbnRyb2xsZXIpCj4+ICt7Cj4+ICsJcmV0 dXJuIGNvbnRhaW5lcl9vZihjb250cm9sbGVyLCBzdHJ1Y3QgY2Ruc19uYW5kX2N0cmwsIGNvbnRy b2xsZXIpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgYm9vbAo+PiArY2FkZW5jZV9uYW5kX2RtYV9i dWZfb2soc3RydWN0IGNkbnNfbmFuZF9jdHJsICpjZG5zX2N0cmwsIGNvbnN0IHZvaWQgKmJ1ZiwK Pj4gKwkJCXUzMiBidWZfbGVuKQo+PiArewo+PiArCXU4IGRhdGFfZG1hX3dpZHRoID0gY2Ruc19j dHJsLT5jYXBzMi5kYXRhX2RtYV93aWR0aDsKPj4gKwo+PiArCXJldHVybiBidWYgJiYgdmlydF9h ZGRyX3ZhbGlkKGJ1ZikgJiYKPj4gKwkJbGlrZWx5KElTX0FMSUdORUQoKHVpbnRwdHJfdClidWYs IGRhdGFfZG1hX3dpZHRoKSkgJiYKPj4gKwkJbGlrZWx5KElTX0FMSUdORUQoYnVmX2xlbiwgZGF0 YV9kbWFfd2lkdGgpKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBjYWRlbmNlX25hbmRfd2Fp dF9mb3JfdmFsdWUoc3RydWN0IGNkbnNfbmFuZF9jdHJsICpjZG5zX2N0cmwsCj4+ICsJCQkJICAg ICAgIHUzMiByZWdfb2Zmc2V0LCB1MzIgdGltZW91dF91cywKPj4gKwkJCQkgICAgICAgdTMyIG1h c2ssIGJvb2wgaXNfY2xlYXIpCj4+ICt7Cj4+ICsJdTMyIHZhbDsKPj4gKwlpbnQgcmV0Owo+PiAr Cj4+ICsJcmV0ID0gcmVhZGxfcmVsYXhlZF9wb2xsX3RpbWVvdXQoY2Ruc19jdHJsLT5yZWcgKyBy ZWdfb2Zmc2V0LAo+PiArCQkJCQkgdmFsLCAhKHZhbCAmIG1hc2spID09IGlzX2NsZWFyLAo+PiAr CQkJCQkgMTAsIHRpbWVvdXRfdXMpOwo+PiArCj4+ICsJaWYgKHJldCA8IDApIHsKPj4gKwkJZGV2 X2VycihjZG5zX2N0cmwtPmRldiwKPj4gKwkJCSJUaW1lb3V0IHdoaWxlIHdhaXRpbmcgZm9yIHJl ZyAleCB3aXRoIG1hc2sgJXggaXMgY2xlYXIgJWRcbiIsCj4+ICsJCQlyZWdfb2Zmc2V0LCBtYXNr LCBpc19jbGVhcik7Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiAr c3RhdGljIGludCBjYWRlbmNlX25hbmRfc2V0X2VjY19lbmFibGUoc3RydWN0IGNkbnNfbmFuZF9j dHJsICpjZG5zX2N0cmwsCj4+ICsJCQkJICAgICAgIGJvb2wgZW5hYmxlKQo+PiArewo+PiArCXUz MiByZWc7Cj4+ICsKPj4gKwlpZiAoY2FkZW5jZV9uYW5kX3dhaXRfZm9yX3ZhbHVlKGNkbnNfY3Ry bCwgQ1RSTF9TVEFUVVMsCj4+ICsJCQkJCTEwMDAwMDAsCj4+ICsJCQkJCUNUUkxfU1RBVFVTX0NU UkxfQlVTWSwgdHJ1ZSkpCj4+ICsJCXJldHVybiAtRVRJTUVET1VUOwo+PiArCj4+ICsJcmVnID0g cmVhZGxfcmVsYXhlZChjZG5zX2N0cmwtPnJlZyArIEVDQ19DT05GSUdfMCk7Cj4+ICsKPj4gKwlp ZiAoZW5hYmxlKQo+PiArCQlyZWcgfD0gRUNDX0NPTkZJR18wX0VDQ19FTjsKPj4gKwllbHNlCj4+ ICsJCXJlZyAmPSB+RUNDX0NPTkZJR18wX0VDQ19FTjsKPj4gKwo+PiArCXdyaXRlbF9yZWxheGVk KHJlZywgY2Ruc19jdHJsLT5yZWcgKyBFQ0NfQ09ORklHXzApOwo+PiArCj4+ICsJcmV0dXJuIDA7 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGNhZGVuY2VfbmFuZF9zZXRfZWNjX3N0cmVuZ3Ro KHN0cnVjdCBjZG5zX25hbmRfY3RybCAqY2Ruc19jdHJsLAo+PiArCQkJCQkgIHU4IGNvcnJfc3Ry X2lkeCkKPj4gK3sKPj4gKwl1MzIgcmVnOwo+PiArCj4+ICsJaWYgKGNkbnNfY3RybC0+Y3Vycl9j b3JyX3N0cl9pZHggPT0gY29ycl9zdHJfaWR4KQo+PiArCQlyZXR1cm47Cj4+ICsKPj4gKwlyZWcg PSByZWFkbF9yZWxheGVkKGNkbnNfY3RybC0+cmVnICsgRUNDX0NPTkZJR18wKTsKPj4gKwlyZWcg Jj0gfkVDQ19DT05GSUdfMF9DT1JSX1NUUjsKPj4gKwlyZWcgfD0gRklFTERfUFJFUChFQ0NfQ09O RklHXzBfQ09SUl9TVFIsIGNvcnJfc3RyX2lkeCk7Cj4+ICsJd3JpdGVsX3JlbGF4ZWQocmVnLCBj ZG5zX2N0cmwtPnJlZyArIEVDQ19DT05GSUdfMCk7Cj4+ICsKPj4gKwljZG5zX2N0cmwtPmN1cnJf Y29ycl9zdHJfaWR4ID0gY29ycl9zdHJfaWR4Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGNh ZGVuY2VfbmFuZF9nZXRfZWNjX3N0cmVuZ3RoX2lkeChzdHJ1Y3QgY2Ruc19uYW5kX2N0cmwgKmNk bnNfY3RybCwKPj4gKwkJCQkJICAgICB1OCBzdHJlbmd0aCkKPj4gK3sKPj4gKwlpbnQgaSwgY29y cl9zdHJfaWR4ID0gLTE7Cj4+ICsKPj4gKwlmb3IgKGkgPSAwOyBpIDwgQkNIX01BWF9OVU1fQ09S Ul9DQVBTOyBpKyspIHsKPj4gKwkJaWYgKGNkbnNfY3RybC0+ZWNjX3N0cmVuZ3Roc1tpXSA9PSBz dHJlbmd0aCkgewo+PiArCQkJY29ycl9zdHJfaWR4ID0gaTsKPj4gKwkJCWJyZWFrOwo+PiArCQl9 Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIGNvcnJfc3RyX2lkeDsKPj4gK30KPj4gKwo+PiArc3Rh dGljIGludCBjYWRlbmNlX25hbmRfc2V0X3NraXBfbWFya2VyX3ZhbChzdHJ1Y3QgY2Ruc19uYW5k X2N0cmwgKmNkbnNfY3RybCwKPj4gKwkJCQkJICAgIHUxNiBtYXJrZXJfdmFsdWUpCj4+ICt7Cj4+ ICsJdTMyIHJlZzsKPj4gKwo+PiArCWlmIChjYWRlbmNlX25hbmRfd2FpdF9mb3JfdmFsdWUoY2Ru c19jdHJsLCBDVFJMX1NUQVRVUywKPj4gKwkJCQkJMTAwMDAwMCwKPj4gKwkJCQkJQ1RSTF9TVEFU VVNfQ1RSTF9CVVNZLCB0cnVlKSkKPj4gKwkJcmV0dXJuIC1FVElNRURPVVQ7Cj4+ICsKPj4gKwly ZWcgPSByZWFkbF9yZWxheGVkKGNkbnNfY3RybC0+cmVnICsgU0tJUF9CWVRFU19DT05GKTsKPj4g KwlyZWcgJj0gflNLSVBfQllURVNfTUFSS0VSX1ZBTFVFOwo+PiArCXJlZyB8PSBGSUVMRF9QUkVQ KFNLSVBfQllURVNfTUFSS0VSX1ZBTFVFLAo+PiArCQkJICBtYXJrZXJfdmFsdWUpOwo+PiArCj4+ ICsJd3JpdGVsX3JlbGF4ZWQocmVnLCBjZG5zX2N0cmwtPnJlZyArIFNLSVBfQllURVNfQ09ORik7 Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBjYWRlbmNlX25h bmRfc2V0X3NraXBfYnl0ZXNfY29uZihzdHJ1Y3QgY2Ruc19uYW5kX2N0cmwgKmNkbnNfY3RybCwK Pj4gKwkJCQkJICAgIHU4IG51bV9vZl9ieXRlcywKPj4gKwkJCQkJICAgIHUzMiBvZmZzZXRfdmFs dWUsCj4+ICsJCQkJCSAgICBpbnQgZW5hYmxlKQo+PiArewo+PiArCXUzMiByZWcsIHNraXBfYnl0 ZXNfb2Zmc2V0Owo+PiArCj4+ICsJaWYgKGNhZGVuY2VfbmFuZF93YWl0X2Zvcl92YWx1ZShjZG5z X2N0cmwsIENUUkxfU1RBVFVTLAo+PiArCQkJCQkxMDAwMDAwLAo+PiArCQkJCQlDVFJMX1NUQVRV U19DVFJMX0JVU1ksIHRydWUpKQo+PiArCQlyZXR1cm4gLUVUSU1FRE9VVDsKPj4gKwo+PiArCWlm ICghZW5hYmxlKSB7Cj4+ICsJCW51bV9vZl9ieXRlcyA9IDA7Cj4+ICsJCW9mZnNldF92YWx1ZSA9 IDA7Cj4+ICsJfQo+PiArCj4+ICsJcmVnID0gcmVhZGxfcmVsYXhlZChjZG5zX2N0cmwtPnJlZyAr IFNLSVBfQllURVNfQ09ORik7Cj4+ICsJcmVnICY9IH5TS0lQX0JZVEVTX05VTV9PRl9CWVRFUzsK Pj4gKwlyZWcgfD0gRklFTERfUFJFUChTS0lQX0JZVEVTX05VTV9PRl9CWVRFUywKPj4gKwkJCSAg bnVtX29mX2J5dGVzKTsKPj4gKwlza2lwX2J5dGVzX29mZnNldCA9IEZJRUxEX1BSRVAoU0tJUF9C WVRFU19PRkZTRVRfVkFMVUUsCj4+ICsJCQkJICAgICAgIG9mZnNldF92YWx1ZSk7Cj4+ICsKPj4g Kwl3cml0ZWxfcmVsYXhlZChyZWcsIGNkbnNfY3RybC0+cmVnICsgU0tJUF9CWVRFU19DT05GKTsK Pj4gKwl3cml0ZWxfcmVsYXhlZChza2lwX2J5dGVzX29mZnNldCwgY2Ruc19jdHJsLT5yZWcgKyBT S0lQX0JZVEVTX09GRlNFVCk7Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArLyog RnVuY3Rpb25zIGVuYWJsZXMvZGlzYWJsZXMgaGFyZHdhcmUgZGV0ZWN0aW9uIG9mIGVyYXNlZCBk YXRhICovCj4+ICtzdGF0aWMgdm9pZCBjYWRlbmNlX25hbmRfc2V0X2VyYXNlX2RldGVjdGlvbihz dHJ1Y3QgY2Ruc19uYW5kX2N0cmwgKmNkbnNfY3RybCwKPj4gKwkJCQkJICAgICBib29sIGVuYWJs ZSwKPj4gKwkJCQkJICAgICB1OCBiaXRmbGlwc190aHJlc2hvbGQpCj4+ICt7Cj4+ICsJdTMyIHJl ZzsKPj4gKwo+PiArCXJlZyA9IHJlYWRsX3JlbGF4ZWQoY2Ruc19jdHJsLT5yZWcgKyBFQ0NfQ09O RklHXzApOwo+PiArCj4+ICsJaWYgKGVuYWJsZSkKPj4gKwkJcmVnIHw9IEVDQ19DT05GSUdfMF9F UkFTRV9ERVRfRU47Cj4+ICsJZWxzZQo+PiArCQlyZWcgJj0gfkVDQ19DT05GSUdfMF9FUkFTRV9E RVRfRU47Cj4+ICsKPj4gKwl3cml0ZWxfcmVsYXhlZChyZWcsIGNkbnNfY3RybC0+cmVnICsgRUND X0NPTkZJR18wKTsKPj4gKwl3cml0ZWxfcmVsYXhlZChiaXRmbGlwc190aHJlc2hvbGQsIGNkbnNf Y3RybC0+cmVnICsgRUNDX0NPTkZJR18xKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBjYWRl bmNlX25hbmRfc2V0X2FjY2Vzc193aWR0aDE2KHN0cnVjdCBjZG5zX25hbmRfY3RybCAqY2Ruc19j dHJsLAo+PiArCQkJCQkgICBib29sIGJpdF9idXMxNikKPj4gK3sKPj4gKwl1MzIgcmVnOwo+PiAr Cj4+ICsJaWYgKGNhZGVuY2VfbmFuZF93YWl0X2Zvcl92YWx1ZShjZG5zX2N0cmwsIENUUkxfU1RB VFVTLAo+PiArCQkJCQkxMDAwMDAwLAo+PiArCQkJCQlDVFJMX1NUQVRVU19DVFJMX0JVU1ksIHRy dWUpKQo+PiArCQlyZXR1cm4gLUVUSU1FRE9VVDsKPj4gKwo+PiArCXJlZyA9IHJlYWRsX3JlbGF4 ZWQoY2Ruc19jdHJsLT5yZWcgKyBDT01NT05fU0VUKTsKPj4gKwo+PiArCWlmICghYml0X2J1czE2 KQo+PiArCQlyZWcgJj0gfkNPTU1PTl9TRVRfREVWSUNFXzE2QklUOwo+PiArCWVsc2UKPj4gKwkJ cmVnIHw9IENPTU1PTl9TRVRfREVWSUNFXzE2QklUOwo+PiArCXdyaXRlbF9yZWxheGVkKHJlZywg Y2Ruc19jdHJsLT5yZWcgKyBDT01NT05fU0VUKTsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+ PiArCj4+ICtzdGF0aWMgdm9pZAo+PiArY2FkZW5jZV9uYW5kX2NsZWFyX2ludGVycnVwdChzdHJ1 Y3QgY2Ruc19uYW5kX2N0cmwgKmNkbnNfY3RybCwKPj4gKwkJCSAgICAgc3RydWN0IGNhZGVuY2Vf bmFuZF9pcnFfc3RhdHVzICppcnFfc3RhdHVzKQo+PiArewo+PiArCXdyaXRlbF9yZWxheGVkKGly cV9zdGF0dXMtPnN0YXR1cywgY2Ruc19jdHJsLT5yZWcgKyBJTlRSX1NUQVRVUyk7Cj4+ICsJd3Jp dGVsX3JlbGF4ZWQoaXJxX3N0YXR1cy0+dHJkX3N0YXR1cywKPj4gKwkJICAgICAgIGNkbnNfY3Ry bC0+cmVnICsgVFJEX0NPTVBfSU5UX1NUQVRVUyk7Cj4+ICsJd3JpdGVsX3JlbGF4ZWQoaXJxX3N0 YXR1cy0+dHJkX2Vycm9yLAo+PiArCQkgICAgICAgY2Ruc19jdHJsLT5yZWcgKyBUUkRfRVJSX0lO VF9TVEFUVVMpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZAo+PiArY2FkZW5jZV9uYW5kX3Jl YWRfaW50X3N0YXR1cyhzdHJ1Y3QgY2Ruc19uYW5kX2N0cmwgKmNkbnNfY3RybCwKPj4gKwkJCSAg ICAgc3RydWN0IGNhZGVuY2VfbmFuZF9pcnFfc3RhdHVzICppcnFfc3RhdHVzKQo+PiArewo+PiAr CWlycV9zdGF0dXMtPnN0YXR1cyA9IHJlYWRsX3JlbGF4ZWQoY2Ruc19jdHJsLT5yZWcgKyBJTlRS X1NUQVRVUyk7Cj4+ICsJaXJxX3N0YXR1cy0+dHJkX3N0YXR1cyA9IHJlYWRsX3JlbGF4ZWQoY2Ru c19jdHJsLT5yZWcKPj4gKwkJCQkJICAgICAgICsgVFJEX0NPTVBfSU5UX1NUQVRVUyk7Cj4+ICsJ aXJxX3N0YXR1cy0+dHJkX2Vycm9yID0gcmVhZGxfcmVsYXhlZChjZG5zX2N0cmwtPnJlZwo+PiAr CQkJCQkgICAgICArIFRSRF9FUlJfSU5UX1NUQVRVUyk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB1 MzIgaXJxX2RldGVjdGVkKHN0cnVjdCBjZG5zX25hbmRfY3RybCAqY2Ruc19jdHJsLAo+PiArCQkJ c3RydWN0IGNhZGVuY2VfbmFuZF9pcnFfc3RhdHVzICppcnFfc3RhdHVzKQo+PiArewo+PiArCWNh ZGVuY2VfbmFuZF9yZWFkX2ludF9zdGF0dXMoY2Ruc19jdHJsLCBpcnFfc3RhdHVzKTsKPj4gKwo+ PiArCXJldHVybiBpcnFfc3RhdHVzLT5zdGF0dXMgfHwgaXJxX3N0YXR1cy0+dHJkX3N0YXR1cyB8 fAo+PiArCQlpcnFfc3RhdHVzLT50cmRfZXJyb3I7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lk IGNhZGVuY2VfbmFuZF9yZXNldF9pcnEoc3RydWN0IGNkbnNfbmFuZF9jdHJsICpjZG5zX2N0cmwp Cj4+ICt7Cj4+ICsJc3Bpbl9sb2NrKCZjZG5zX2N0cmwtPmlycV9sb2NrKTsKPj4gKwltZW1zZXQo JmNkbnNfY3RybC0+aXJxX3N0YXR1cywgMCwgc2l6ZW9mKGNkbnNfY3RybC0+aXJxX3N0YXR1cykp Owo+PiArCW1lbXNldCgmY2Ruc19jdHJsLT5pcnFfbWFzaywgMCwgc2l6ZW9mKGNkbnNfY3RybC0+ aXJxX21hc2spKTsKPj4gKwlzcGluX3VubG9jaygmY2Ruc19jdHJsLT5pcnFfbG9jayk7Cj4+ICt9 Cj4+ICsKPj4gKy8qCj4+ICsgKiBUaGlzIGlzIHRoZSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5l LiBJdCBoYW5kbGVzIGFsbCBpbnRlcnJ1cHRzCj4+ICsgKiBzZW50IHRvIHRoaXMgZGV2aWNlLgo+ PiArICovCj4+ICtzdGF0aWMgaXJxcmV0dXJuX3QgY2FkZW5jZV9uYW5kX2lzcihpbnQgaXJxLCB2 b2lkICpkZXZfaWQpCj4+ICt7Cj4+ICsJc3RydWN0IGNkbnNfbmFuZF9jdHJsICpjZG5zX2N0cmwg PSBkZXZfaWQ7Cj4+ICsJc3RydWN0IGNhZGVuY2VfbmFuZF9pcnFfc3RhdHVzIGlycV9zdGF0dXM7 Cj4+ICsJaXJxcmV0dXJuX3QgcmVzdWx0ID0gSVJRX05PTkU7Cj4+ICsKPj4gKwlzcGluX2xvY2so JmNkbnNfY3RybC0+aXJxX2xvY2spOwo+PiArCj4+ICsJaWYgKGlycV9kZXRlY3RlZChjZG5zX2N0 cmwsICZpcnFfc3RhdHVzKSkgewo+PiArCQkvKiBIYW5kbGUgaW50ZXJydXB0LiAqLwo+PiArCQkv KiBGaXJzdCBhY2tub3dsZWRnZSBpdC4gKi8KPj4gKwkJY2FkZW5jZV9uYW5kX2NsZWFyX2ludGVy cnVwdChjZG5zX2N0cmwsICZpcnFfc3RhdHVzKTsKPj4gKwkJLyogU3RhdHVzIGluIHRoZSBkZXZp Y2UgY29udGV4dCBmb3Igc29tZW9uZSB0byByZWFkLiAqLwo+PiArCQljZG5zX2N0cmwtPmlycV9z dGF0dXMuc3RhdHVzIHw9IGlycV9zdGF0dXMuc3RhdHVzOwo+PiArCQljZG5zX2N0cmwtPmlycV9z dGF0dXMudHJkX3N0YXR1cyB8PSBpcnFfc3RhdHVzLnRyZF9zdGF0dXM7Cj4+ICsJCWNkbnNfY3Ry bC0+aXJxX3N0YXR1cy50cmRfZXJyb3IgfD0gaXJxX3N0YXR1cy50cmRfZXJyb3I7Cj4+ICsJCS8q IE5vdGlmeSBhbnlvbmUgd2hvIGNhcmVzIHRoYXQgaXQgaGFwcGVuZWQuICovCj4+ICsJCWNvbXBs ZXRlKCZjZG5zX2N0cmwtPmNvbXBsZXRlKTsKPj4gKwkJLyogVGVsbCB0aGUgT1MgdGhhdCB3ZSd2 ZSBoYW5kbGVkIHRoaXMuICovCj4+ICsJCXJlc3VsdCA9IElSUV9IQU5ETEVEOwo+PiArCX0KPj4g KwlzcGluX3VubG9jaygmY2Ruc19jdHJsLT5pcnFfbG9jayk7Cj4KPllvdXIgbG9ja2luZyBzY2hl bWUgc2VlbXMgd3JvbmcgKG1heWJlIEknbSBub3QgZ29pbmcgZGVlcCBlbm91Z2ggaW4gdGhlCj5j b2RlKSwgY2FuIHlvdSBwbGVhc2UgdHJ5IHdpdGggTE9DS0RFUCBlbmFibGVkPwo+Ckkgd2lsbCBj aGVjayBpdC4KQXQgdGhlIHRpbWUgSSBjYW4gc2VlIG9ubHkgb25lIHByb2JsZW06IHRoZSBjYWRl bmNlX25hbmRfcmVzZXRfaXJxIGZ1bmN0aW9uIApzaG91bGQgdXNlIHNwaW5fbG9ja19pcnFzYXZl IGluc3RlYWQgb2Ygc3Bpbl9sb2NrLgpDYW4geW91IHNlZSBhbnkgb3RoZXIgcHJvYmxlbXM/Cgo+ PiArCj4+ICsJcmV0dXJuIHJlc3VsdDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgY2FkZW5j ZV9uYW5kX3NldF9pcnFfbWFzayhzdHJ1Y3QgY2Ruc19uYW5kX2N0cmwgKmNkbnNfY3RybCwKPj4g KwkJCQkgICAgICBzdHJ1Y3QgY2FkZW5jZV9uYW5kX2lycV9zdGF0dXMgKmlycV9tYXNrKQo+PiAr ewo+PiArCXdyaXRlbF9yZWxheGVkKElOVFJfRU5BQkxFX0lOVFJfRU4gfCBpcnFfbWFzay0+c3Rh dHVzLAo+PiArCQkgICAgICAgY2Ruc19jdHJsLT5yZWcgKyBJTlRSX0VOQUJMRSk7Cj4+ICsKPj4g Kwl3cml0ZWxfcmVsYXhlZChpcnFfbWFzay0+dHJkX2Vycm9yLAo+PiArCQkgICAgICAgY2Ruc19j dHJsLT5yZWcgKyBUUkRfRVJSX0lOVF9TVEFUVVNfRU4pOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg dm9pZAo+PiArY2FkZW5jZV9uYW5kX3dhaXRfZm9yX2lycShzdHJ1Y3QgY2Ruc19uYW5kX2N0cmwg KmNkbnNfY3RybCwKPj4gKwkJCSAgc3RydWN0IGNhZGVuY2VfbmFuZF9pcnFfc3RhdHVzICppcnFf bWFzaywKPj4gKwkJCSAgc3RydWN0IGNhZGVuY2VfbmFuZF9pcnFfc3RhdHVzICppcnFfc3RhdHVz KQo+PiArewo+PiArCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoMTAw MDApOwo+PiArCXVuc2lnbmVkIGxvbmcgdGltZV9sZWZ0Owo+PiArCj4+ICsJdGltZV9sZWZ0ID0g d2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZjZG5zX2N0cmwtPmNvbXBsZXRlLAo+PiArCQkJ CQkJdGltZW91dCk7Cj4+ICsKPj4gKwkqaXJxX3N0YXR1cyA9IGNkbnNfY3RybC0+aXJxX3N0YXR1 czsKPj4gKwlpZiAodGltZV9sZWZ0ID09IDApIHsKPj4gKwkJLyogVGltZW91dCBlcnJvci4gKi8K Pj4gKwkJZGV2X2VycihjZG5zX2N0cmwtPmRldiwgInRpbWVvdXQgb2NjdXJyZWQ6XG4iKTsKPj4g KwkJZGV2X2VycihjZG5zX2N0cmwtPmRldiwgIlx0c3RhdHVzID0gMHgleCwgbWFzayA9IDB4JXhc biIsCj4+ICsJCQlpcnFfc3RhdHVzLT5zdGF0dXMsIGlycV9tYXNrLT5zdGF0dXMpOwo+PiArCQlk ZXZfZXJyKGNkbnNfY3RybC0+ZGV2LAo+PiArCQkJIlx0dHJkX3N0YXR1cyA9IDB4JXgsIHRyZF9z dGF0dXMgbWFzayA9IDB4JXhcbiIsCj4+ICsJCQlpcnFfc3RhdHVzLT50cmRfc3RhdHVzLCBpcnFf bWFzay0+dHJkX3N0YXR1cyk7Cj4+ICsJCWRldl9lcnIoY2Ruc19jdHJsLT5kZXYsCj4+ICsJCQki XHQgdHJkX2Vycm9yID0gMHgleCwgdHJkX2Vycm9yIG1hc2sgPSAweCV4XG4iLAo+PiArCQkJaXJx X3N0YXR1cy0+dHJkX2Vycm9yLCBpcnFfbWFzay0+dHJkX2Vycm9yKTsKPj4gKwl9Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyB2b2lkCj4+ICtjYWRlbmNlX25hbmRfaXJxX2NsZWFudXAoaW50IGlycW51 bSwgc3RydWN0IGNkbnNfbmFuZF9jdHJsICpjZG5zX2N0cmwpCj4+ICt7Cj4+ICsJLyogRGlzYWJs ZSBpbnRlcnJ1cHRzLiAqLwo+PiArCXdyaXRlbF9yZWxheGVkKElOVFJfRU5BQkxFX0lOVFJfRU4s IGNkbnNfY3RybC0+cmVnICsgSU5UUl9FTkFCTEUpOwo+PiArfQo+Cj5Xb3VsZCB5b3UgbWluZCBt b3ZpbmcgdGhpcyBoZWxwZXIgdG8gdGhlIGJvdHRvbSwgd2hlcmUgaXQgaXMgdXNlZAo+KGNsb3Nl ciB0byB0aGUgcmVtb3ZlL2NsZWFudXAgZnVuY3Rpb25zKS4KPgpvay4gCgo+PiArCj4+ICsvKiBF eGVjdXRlIGdlbmVyaWMgY29tbWFuZCBvbiBOQU5EIGNvbnRyb2xsZXIuICovCj4+ICtzdGF0aWMg aW50IGNhZGVuY2VfbmFuZF9nZW5lcmljX2NtZF9zZW5kKHN0cnVjdCBjZG5zX25hbmRfY3RybCAq Y2Ruc19jdHJsLAo+PiArCQkJCQkgdTggY2hpcF9uciwKPj4gKwkJCQkJIHU2NCBtaW5pX2N0cmxf Y21kKQo+PiArewo+PiArCXUzMiBtaW5pX2N0cmxfY21kX2wsIG1pbmlfY3RybF9jbWRfaCwgcmVn Owo+PiArCj4+ICsJbWluaV9jdHJsX2NtZCB8PSBGSUVMRF9QUkVQKEdDTURfTEFZX0NTLCBjaGlw X25yKTsKPj4gKwltaW5pX2N0cmxfY21kX2wgPSBtaW5pX2N0cmxfY21kICYgMHhGRkZGRkZGRjsK Pj4gKwltaW5pX2N0cmxfY21kX2ggPSBtaW5pX2N0cmxfY21kID4+IDMyOwo+PiArCj4+ICsJaWYg KGNhZGVuY2VfbmFuZF93YWl0X2Zvcl92YWx1ZShjZG5zX2N0cmwsIENUUkxfU1RBVFVTLAo+PiAr CQkJCQkxMDAwMDAwLAo+PiArCQkJCQlDVFJMX1NUQVRVU19DVFJMX0JVU1ksIHRydWUpKQo+PiAr CQlyZXR1cm4gLUVUSU1FRE9VVDsKPj4gKwo+PiArCWNhZGVuY2VfbmFuZF9yZXNldF9pcnEoY2Ru c19jdHJsKTsKPj4gKwo+PiArCXdyaXRlbF9yZWxheGVkKG1pbmlfY3RybF9jbWRfbCwgY2Ruc19j dHJsLT5yZWcgKyBDTURfUkVHMik7Cj4+ICsJd3JpdGVsX3JlbGF4ZWQobWluaV9jdHJsX2NtZF9o LCBjZG5zX2N0cmwtPnJlZyArIENNRF9SRUczKTsKPj4gKwo+PiArCS8qIFNlbGVjdCBnZW5lcmlj IGNvbW1hbmQuICovCj4+ICsJcmVnID0gRklFTERfUFJFUChDTURfUkVHMF9DVCwgQ01EX1JFRzBf Q1RfR0VOKTsKPj4gKwkvKiBUaHJlYWQgbnVtYmVyLiAqLwo+PiArCXJlZyB8PSBGSUVMRF9QUkVQ KENNRF9SRUcwX1ROLCAwKTsKPj4gKwo+PiArCS8qIElzc3VlIGNvbW1hbmQuICovCj4+ICsJd3Jp dGVsX3JlbGF4ZWQocmVnLCBjZG5zX2N0cmwtPnJlZyArIENNRF9SRUcwKTsKPj4gKwo+PiArCXJl dHVybiAwOwo+PiArfQo+PiArCj4+ICsvKiBXYWl0IGZvciBkYXRhIG9uIHNsYXZlIERNQSBpbnRl cmZhY2UuICovCj4+ICtzdGF0aWMgaW50IGNhZGVuY2VfbmFuZF93YWl0X29uX3NkbWEoc3RydWN0 IGNkbnNfbmFuZF9jdHJsICpjZG5zX2N0cmwsCj4+ICsJCQkJICAgICB1OCAqb3V0X3NkbWFfdHJk LAo+PiArCQkJCSAgICAgdTMyICpvdXRfc2RtYV9zaXplKQo+PiArewo+PiArCXN0cnVjdCBjYWRl bmNlX25hbmRfaXJxX3N0YXR1cyBpcnFfbWFzaywgaXJxX3N0YXR1czsKPj4gKwo+PiArCWlycV9t YXNrLnRyZF9zdGF0dXMgPSAwOwo+PiArCWlycV9tYXNrLnRyZF9lcnJvciA9IDA7Cj4+ICsJaXJx X21hc2suc3RhdHVzID0gSU5UUl9TVEFUVVNfU0RNQV9UUklHRwo+PiArCQl8IElOVFJfU1RBVFVT X1NETUFfRVJSCj4+ICsJCXwgSU5UUl9TVEFUVVNfVU5TVVBQX0NNRDsKPj4gKwo+PiArCWNhZGVu Y2VfbmFuZF9zZXRfaXJxX21hc2soY2Ruc19jdHJsLCAmaXJxX21hc2spOwo+PiArCWNhZGVuY2Vf bmFuZF93YWl0X2Zvcl9pcnEoY2Ruc19jdHJsLCAmaXJxX21hc2ssICZpcnFfc3RhdHVzKTsKPj4g KwlpZiAoaXJxX3N0YXR1cy5zdGF0dXMgPT0gMCkgewo+PiArCQlkZXZfZXJyKGNkbnNfY3RybC0+ ZGV2LCAiVGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciBTRE1BXG4iKTsKPj4gKwkJcmV0dXJuIC1F VElNRURPVVQ7Cj4+ICsJfQo+PiArCj4+ICsJaWYgKGlycV9zdGF0dXMuc3RhdHVzICYgSU5UUl9T VEFUVVNfU0RNQV9UUklHRykgewo+PiArCQkqb3V0X3NkbWFfc2l6ZSA9IHJlYWRsX3JlbGF4ZWQo Y2Ruc19jdHJsLT5yZWcgKyBTRE1BX1NJWkUpOwo+PiArCQkqb3V0X3NkbWFfdHJkICA9IHJlYWRs X3JlbGF4ZWQoY2Ruc19jdHJsLT5yZWcgKyBTRE1BX1RSRF9OVU0pOwo+PiArCQkqb3V0X3NkbWFf dHJkID0KPj4gKwkJCUZJRUxEX0dFVChTRE1BX1RSRF9OVU1fU0RNQV9UUkQsICpvdXRfc2RtYV90 cmQpOwo+PiArCX0gZWxzZSB7Cj4+ICsJCWRldl9lcnIoY2Ruc19jdHJsLT5kZXYsICJTRE1BIGVy cm9yIC0gaXJxX3N0YXR1cyAleFxuIiwKPj4gKwkJCWlycV9zdGF0dXMuc3RhdHVzKTsKPj4gKwkJ cmV0dXJuIC1FSU87Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0 YXRpYyB2b2lkIGNhZGVuY2VfbmFuZF9nZXRfY2FwcyhzdHJ1Y3QgY2Ruc19uYW5kX2N0cmwgKmNk bnNfY3RybCkKPj4gK3sKPj4gKwl1MzIgIHJlZzsKPj4gKwo+PiArCXJlZyA9IHJlYWRsX3JlbGF4 ZWQoY2Ruc19jdHJsLT5yZWcgKyBDVFJMX0ZFQVRVUkVTKTsKPj4gKwo+PiArCWNkbnNfY3RybC0+ Y2FwczIubWF4X2JhbmtzID0gMSA8PCBGSUVMRF9HRVQoQ1RSTF9GRUFUVVJFU19OX0JBTktTLCBy ZWcpOwo+PiArCj4+ICsJaWYgKEZJRUxEX0dFVChDVFJMX0ZFQVRVUkVTX0RNQV9EV0lUSDY0LCBy ZWcpKQo+PiArCQljZG5zX2N0cmwtPmNhcHMyLmRhdGFfZG1hX3dpZHRoID0gODsKPj4gKwllbHNl Cj4+ICsJCWNkbnNfY3RybC0+Y2FwczIuZGF0YV9kbWFfd2lkdGggPSA0Owo+PiArCj4+ICsJaWYg KHJlZyAmIENUUkxfRkVBVFVSRVNfQ09OVFJPTF9EQVRBKQo+PiArCQljZG5zX2N0cmwtPmNhcHMy LmRhdGFfY29udHJvbF9zdXBwID0gMTsKPj4gKwo+PiArCWlmIChyZWcgJiAoQ1RSTF9GRUFUVVJF U19OVkREUl8yXzMKPj4gKwkJICAgfCBDVFJMX0ZFQVRVUkVTX05WRERSKSkKPj4gKwkJY2Ruc19j dHJsLT5jYXBzMi5pc19waHlfdHlwZV9kbGwgPSAxOwo+PiArfQo+PiArCj4+ICsvKiBQcmVwYXJl IENETUEgZGVzY3JpcHRvci4gKi8KPj4gK3N0YXRpYyB2b2lkCj4+ICtjYWRlbmNlX25hbmRfY2Rt YV9kZXNjX3ByZXBhcmUoc3RydWN0IGNhZGVuY2VfbmFuZF9jZG1hX2Rlc2MgKmNkbWFfZGVzYywK Pj4gKwkJCSAgICAgICBjaGFyIG5mX21lbSwgdTMyIGZsYXNoX3B0ciwgY2hhciAqbWVtX3B0ciwK Pj4gKwkJCSAgICAgICBjaGFyICpjdHJsX2RhdGFfcHRyLCB1MTYgY3R5cGUpCj4+ICt7Cj4+ICsJ bWVtc2V0KGNkbWFfZGVzYywgMCwgc2l6ZW9mKHN0cnVjdCBjYWRlbmNlX25hbmRfY2RtYV9kZXNj KSk7Cj4+ICsKPj4gKwkvKiBTZXQgZmllbGRzIGZvciBvbmUgZGVzY3JpcHRvci4gKi8KPj4gKwlj ZG1hX2Rlc2MtPmZsYXNoX3BvaW50ZXIgPSAobmZfbWVtIDw8IENETUFfQ0ZQVFJfTUVNX1NISUZU KQo+PiArCQkrIGZsYXNoX3B0cjsKPj4gKwljZG1hX2Rlc2MtPmNvbW1hbmRfZmxhZ3MgfD0gQ0RN QV9DRl9ETUFfTUFTVEVSOwo+PiArCWNkbWFfZGVzYy0+Y29tbWFuZF9mbGFncyAgfD0gQ0RNQV9D Rl9JTlQ7Cj4+ICsKPj4gKwljZG1hX2Rlc2MtPm1lbW9yeV9wb2ludGVyID0gKHVpbnRwdHJfdClt ZW1fcHRyOwo+PiArCWNkbWFfZGVzYy0+c3RhdHVzID0gMDsKPj4gKwljZG1hX2Rlc2MtPnN5bmNf ZmxhZ19wb2ludGVyID0gMDsKPj4gKwljZG1hX2Rlc2MtPnN5bmNfYXJndW1lbnRzID0gMDsKPj4g Kwo+PiArCWNkbWFfZGVzYy0+Y29tbWFuZF90eXBlID0gY3R5cGU7Cj4+ICsJY2RtYV9kZXNjLT5j dHJsX2RhdGFfcHRyID0gKHVpbnRwdHJfdCljdHJsX2RhdGFfcHRyOwo+PiArfQo+PiArCj4+ICtz dGF0aWMgdTggY2FkZW5jZV9uYW5kX2NoZWNrX2Rlc2NfZXJyb3Ioc3RydWN0IGNkbnNfbmFuZF9j dHJsICpjZG5zX2N0cmwsCj4+ICsJCQkJCXUzMiBkZXNjX3N0YXR1cykKPj4gK3sKPj4gKwlpZiAo ZGVzY19zdGF0dXMgJiBDRE1BX0NTX0VSUCkKPj4gKwkJcmV0dXJuIFNUQVRfRVJBU0VEOwo+PiAr Cj4+ICsJaWYgKGRlc2Nfc3RhdHVzICYgQ0RNQV9DU19VTkNFKQo+PiArCQlyZXR1cm4gU1RBVF9F Q0NfVU5DT1JSOwo+PiArCj4+ICsJaWYgKGRlc2Nfc3RhdHVzICYgQ0RNQV9DU19FUlIpIHsKPj4g KwkJZGV2X2VycihjZG5zX2N0cmwtPmRldiwgIjpDRE1BIGRlc2MgZXJyb3IgZmxhZyBkZXRlY3Rl ZC5cbiIpOwo+PiArCQlyZXR1cm4gU1RBVF9GQUlMOwo+PiArCX0KPj4gKwo+PiArCWlmIChGSUVM RF9HRVQoQ0RNQV9DU19NQVhFUlIsIGRlc2Nfc3RhdHVzKSkKPj4gKwkJcmV0dXJuIFNUQVRfRUND X0NPUlI7Cj4+ICsKPj4gKwlyZXR1cm4gU1RBVF9GQUlMOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg aW50IGNhZGVuY2VfbmFuZF9jZG1hX2ZpbmlzaChzdHJ1Y3QgY2Ruc19uYW5kX2N0cmwgKmNkbnNf Y3RybCwKPj4gKwkJCQkgICAgc3RydWN0IGNhZGVuY2VfbmFuZF9jZG1hX2Rlc2MgKmNkbWFfZGVz YykKPj4gK3sKPj4gKwlzdHJ1Y3QgY2FkZW5jZV9uYW5kX2NkbWFfZGVzYyAqZGVzY19wdHIgPSBj ZG1hX2Rlc2M7Cj4+ICsJdTggc3RhdHVzID0gU1RBVF9CVVNZOwo+PiArCj4+ICsJaWYgKGRlc2Nf cHRyLT5zdGF0dXMgJiBDRE1BX0NTX0ZBSUwpIHsKPj4gKwkJc3RhdHVzID0gY2FkZW5jZV9uYW5k X2NoZWNrX2Rlc2NfZXJyb3IoY2Ruc19jdHJsLAo+PiArCQkJCQkJICAgICAgIGRlc2NfcHRyLT5z dGF0dXMpOwo+PiArCQlkZXZfZXJyKGNkbnNfY3RybC0+ZGV2LCAiOkNETUEgZXJyb3IgJXhcbiIs IGRlc2NfcHRyLT5zdGF0dXMpOwo+PiArCX0gZWxzZSBpZiAoZGVzY19wdHItPnN0YXR1cyAmIENE TUFfQ1NfQ09NUCkgewo+PiArCQkvKiBEZXNjcmlwdG9yIGZpbmlzaGVkIHdpdGggbm8gZXJyb3Jz LiAqLwo+PiArCQlpZiAoZGVzY19wdHItPmNvbW1hbmRfZmxhZ3MgJiBDRE1BX0NGX0NPTlQpIHsK Pj4gKwkJCWRldl9pbmZvKGNkbnNfY3RybC0+ZGV2LCAiRE1BIHVuc3VwcG9ydGVkIGZsYWcgaXMg c2V0Iik7Cj4+ICsJCQlzdGF0dXMgPSBTVEFUX1VOS05PV047Cj4+ICsJCX0gZWxzZSB7Cj4+ICsJ CQkvKiBMYXN0IGRlc2NyaXB0b3IuICAqLwo+PiArCQkJc3RhdHVzID0gU1RBVF9PSzsKPj4gKwkJ fQo+PiArCX0KPj4gKwo+PiArCXJldHVybiBzdGF0dXM7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBp bnQgY2FkZW5jZV9uYW5kX2NkbWFfc2VuZChzdHJ1Y3QgY2Ruc19uYW5kX2N0cmwgKmNkbnNfY3Ry bCwKPj4gKwkJCQkgIHU4IHRocmVhZCkKPj4gK3sKPj4gKwl1MzIgcmVnOwo+PiArCWludCBzdGF0 dXM7Cj4+ICsKPj4gKwkvKiBXYWl0IGZvciB0aHJlYWQgcmVhZHkuICovCj4+ICsJc3RhdHVzID0g Y2FkZW5jZV9uYW5kX3dhaXRfZm9yX3ZhbHVlKGNkbnNfY3RybCwgVFJEX1NUQVRVUywKPj4gKwkJ CQkJICAgICAxMDAwMDAwLAo+PiArCQkJCQkgICAgIDFVIDw8IHRocmVhZCwgdHJ1ZSk7Cj4+ICsJ aWYgKHN0YXR1cykKPj4gKwkJcmV0dXJuIHN0YXR1czsKPj4gKwo+PiArCWNhZGVuY2VfbmFuZF9y ZXNldF9pcnEoY2Ruc19jdHJsKTsKPj4gKwo+PiArCXdyaXRlbF9yZWxheGVkKCh1MzIpY2Ruc19j dHJsLT5kbWFfY2RtYV9kZXNjLAo+PiArCQkgICAgICAgY2Ruc19jdHJsLT5yZWcgKyBDTURfUkVH Mik7Cj4+ICsJd3JpdGVsX3JlbGF4ZWQoMCwgY2Ruc19jdHJsLT5yZWcgKyBDTURfUkVHMyk7Cj4+ ICsKPj4gKwkvKiBTZWxlY3QgQ0RNQSBtb2RlLiAqLwo+PiArCXJlZyA9IEZJRUxEX1BSRVAoQ01E X1JFRzBfQ1QsIENNRF9SRUcwX0NUX0NETUEpOwo+PiArCS8qIFRocmVhZCBudW1iZXIuICovCj4+ ICsJcmVnIHw9IEZJRUxEX1BSRVAoQ01EX1JFRzBfVE4sIHRocmVhZCk7Cj4+ICsJLyogSXNzdWUg Y29tbWFuZC4gKi8KPj4gKwl3cml0ZWxfcmVsYXhlZChyZWcsIGNkbnNfY3RybC0+cmVnICsgQ01E X1JFRzApOwo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gKy8qIFNlbmQgU0RNQSBj b21tYW5kIGFuZCB3YWl0IGZvciBmaW5pc2guICovCj4+ICtzdGF0aWMgdTMyCj4+ICtjYWRlbmNl X25hbmRfY2RtYV9zZW5kX2FuZF93YWl0KHN0cnVjdCBjZG5zX25hbmRfY3RybCAqY2Ruc19jdHJs LAo+PiArCQkJCXU4IHRocmVhZCkKPj4gK3sKPj4gKwlzdHJ1Y3QgY2FkZW5jZV9uYW5kX2lycV9z dGF0dXMgaXJxX21hc2ssIGlycV9zdGF0dXMgPSB7MH07Cj4+ICsJaW50IHN0YXR1czsKPj4gKwo+ PiArCWlycV9tYXNrLnRyZF9zdGF0dXMgPSAxIDw8IHRocmVhZDsKPj4gKwlpcnFfbWFzay50cmRf ZXJyb3IgPSAxIDw8IHRocmVhZDsKPj4gKwlpcnFfbWFzay5zdGF0dXMgPSBJTlRSX1NUQVRVU19D RE1BX1RFUlI7Cj4+ICsKPj4gKwljYWRlbmNlX25hbmRfc2V0X2lycV9tYXNrKGNkbnNfY3RybCwg JmlycV9tYXNrKTsKPj4gKwo+PiArCXN0YXR1cyA9IGNhZGVuY2VfbmFuZF9jZG1hX3NlbmQoY2Ru c19jdHJsLCB0aHJlYWQpOwo+PiArCWlmIChzdGF0dXMpCj4+ICsJCXJldHVybiBzdGF0dXM7Cj4+ ICsKPj4gKwljYWRlbmNlX25hbmRfd2FpdF9mb3JfaXJxKGNkbnNfY3RybCwgJmlycV9tYXNrLCAm aXJxX3N0YXR1cyk7Cj4+ICsKPj4gKwlpZiAoaXJxX3N0YXR1cy5zdGF0dXMgPT0gMCAmJiBpcnFf c3RhdHVzLnRyZF9zdGF0dXMgPT0gMCAmJgo+PiArCSAgICBpcnFfc3RhdHVzLnRyZF9lcnJvciA9 PSAwKSB7Cj4+ICsJCWRldl9lcnIoY2Ruc19jdHJsLT5kZXYsICJDRE1BIGNvbW1hbmQgdGltZW91 dFxuIik7Cj4+ICsJCXJldHVybiAtRVRJTUVET1VUOwo+PiArCX0KPj4gKwlpZiAoaXJxX3N0YXR1 cy5zdGF0dXMgJiBpcnFfbWFzay5zdGF0dXMpIHsKPj4gKwkJZGV2X2VycihjZG5zX2N0cmwtPmRl diwgIkNETUEgY29tbWFuZCBmYWlsZWRcbiIpOwo+PiArCQlyZXR1cm4gLUVJTzsKPj4gKwl9Cj4+ ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArLyoKPj4gKyAqIEVDQyBzaXplIGRlcGVu ZHMgb24gY29uZmlndXJlZCBFQ0Mgc3RyZW5ndGggYW5kIG9uIG1heGltdW0gc3VwcG9ydGVkCj4+ ICsgKiBFQ0Mgc3RlcCBzaXplLgo+PiArICovCj4+ICtzdGF0aWMgaW50IGNhZGVuY2VfbmFuZF9j YWxjX2VjY19ieXRlcyhpbnQgbWF4X3N0ZXBfc2l6ZSwgaW50IHN0cmVuZ3RoKQo+PiArewo+PiAr CWludCBuYnl0ZXMgPSBESVZfUk9VTkRfVVAoZmxzKDggKiBtYXhfc3RlcF9zaXplKSAqIHN0cmVu Z3RoLCA4KTsKPj4gKwo+PiArCXJldHVybiBBTElHTihuYnl0ZXMsIDIpOwo+PiArfQo+PiArCj4+ ICsjZGVmaW5lIENBREVOQ0VfTkFORF9DQUxDX0VDQ19CWVRFUyhtYXhfc3RlcF9zaXplKSBcCj4+ ICsJc3RhdGljIGludCBcCj4+ICsJY2FkZW5jZV9uYW5kX2NhbGNfZWNjX2J5dGVzXyMjbWF4X3N0 ZXBfc2l6ZShpbnQgc3RlcF9zaXplLCBcCj4+ICsJCQkJCQkgICAgaW50IHN0cmVuZ3RoKVwKPj4g Kwl7XAo+PiArCQlyZXR1cm4gY2FkZW5jZV9uYW5kX2NhbGNfZWNjX2J5dGVzKG1heF9zdGVwX3Np emUsIHN0cmVuZ3RoKTtcCj4+ICsJfQo+PiArCj4+ICtDQURFTkNFX05BTkRfQ0FMQ19FQ0NfQllU RVMoMjU2KQo+PiArQ0FERU5DRV9OQU5EX0NBTENfRUNDX0JZVEVTKDUxMikKPj4gK0NBREVOQ0Vf TkFORF9DQUxDX0VDQ19CWVRFUygxMDI0KQo+PiArQ0FERU5DRV9OQU5EX0NBTENfRUNDX0JZVEVT KDIwNDgpCj4+ICtDQURFTkNFX05BTkRfQ0FMQ19FQ0NfQllURVMoNDA5NikKPj4gKwo+PiArLyog RnVuY3Rpb24gcmVhZHMgQkNIIGNhcGFiaWxpdGllcy4gKi8KPj4gK3N0YXRpYyBpbnQgY2FkZW5j ZV9uYW5kX3JlYWRfYmNoX2NhcHMoc3RydWN0IGNkbnNfbmFuZF9jdHJsICpjZG5zX2N0cmwpCj4+ ICt7Cj4+ICsJc3RydWN0IG5hbmRfZWNjX2NhcHMgKmVjY19jYXBzID0gJmNkbnNfY3RybC0+ZWNj X2NhcHM7Cj4+ICsJaW50IG1heF9zdGVwX3NpemUgPSAwLCBuc3RyZW5ndGhzLCBpOwo+PiArCXUz MiByZWc7Cj4+ICsKPj4gKwlyZWcgPSByZWFkbF9yZWxheGVkKGNkbnNfY3RybC0+cmVnICsgQkNI X0NGR18wKTsKPj4gKwljZG5zX2N0cmwtPmVjY19zdHJlbmd0aHNbMF0gPSBGSUVMRF9HRVQoQkNI X0NGR18wX0NPUlJfQ0FQXzAsIHJlZyk7Cj4+ICsJY2Ruc19jdHJsLT5lY2Nfc3RyZW5ndGhzWzFd ID0gRklFTERfR0VUKEJDSF9DRkdfMF9DT1JSX0NBUF8xLCByZWcpOwo+PiArCWNkbnNfY3RybC0+ ZWNjX3N0cmVuZ3Roc1syXSA9IEZJRUxEX0dFVChCQ0hfQ0ZHXzBfQ09SUl9DQVBfMiwgcmVnKTsK Pj4gKwljZG5zX2N0cmwtPmVjY19zdHJlbmd0aHNbM10gPSBGSUVMRF9HRVQoQkNIX0NGR18wX0NP UlJfQ0FQXzMsIHJlZyk7Cj4+ICsKPj4gKwlyZWcgPSByZWFkbF9yZWxheGVkKGNkbnNfY3RybC0+ cmVnICsgQkNIX0NGR18xKTsKPj4gKwljZG5zX2N0cmwtPmVjY19zdHJlbmd0aHNbNF0gPSBGSUVM RF9HRVQoQkNIX0NGR18xX0NPUlJfQ0FQXzQsIHJlZyk7Cj4+ICsJY2Ruc19jdHJsLT5lY2Nfc3Ry ZW5ndGhzWzVdID0gRklFTERfR0VUKEJDSF9DRkdfMV9DT1JSX0NBUF81LCByZWcpOwo+PiArCWNk bnNfY3RybC0+ZWNjX3N0cmVuZ3Roc1s2XSA9IEZJRUxEX0dFVChCQ0hfQ0ZHXzFfQ09SUl9DQVBf NiwgcmVnKTsKPj4gKwljZG5zX2N0cmwtPmVjY19zdHJlbmd0aHNbN10gPSBGSUVMRF9HRVQoQkNI X0NGR18xX0NPUlJfQ0FQXzcsIHJlZyk7Cj4+ICsKPj4gKwlyZWcgPSByZWFkbF9yZWxheGVkKGNk bnNfY3RybC0+cmVnICsgQkNIX0NGR18yKTsKPj4gKwljZG5zX2N0cmwtPmVjY19zdGVwaW5mb3Nb MF0uc3RlcHNpemUgPQo+PiArCQlGSUVMRF9HRVQoQkNIX0NGR18yX1NFQ1RfMCwgcmVnKTsKPj4g Kwo+PiArCWNkbnNfY3RybC0+ZWNjX3N0ZXBpbmZvc1sxXS5zdGVwc2l6ZSA9Cj4+ICsJCUZJRUxE X0dFVChCQ0hfQ0ZHXzJfU0VDVF8xLCByZWcpOwo+PiArCj4+ICsJbnN0cmVuZ3RocyA9IDA7Cj4+ ICsJZm9yIChpID0gMDsgaSA8IEJDSF9NQVhfTlVNX0NPUlJfQ0FQUzsgaSsrKSB7Cj4+ICsJCWlm IChjZG5zX2N0cmwtPmVjY19zdHJlbmd0aHNbaV0gIT0gMCkKPj4gKwkJCW5zdHJlbmd0aHMrKzsK Pj4gKwl9Cj4+ICsKPj4gKwllY2NfY2Fwcy0+bnN0ZXBpbmZvcyA9IDA7Cj4+ICsJZm9yIChpID0g MDsgaSA8IEJDSF9NQVhfTlVNX1NFQ1RPUl9TSVpFUzsgaSsrKSB7Cj4+ICsJCS8qIEVDQyBzdHJl bmd0aHMgYXJlIGNvbW1vbiBmb3IgYWxsIHN0ZXAgaW5mb3MuICovCj4+ICsJCWNkbnNfY3RybC0+ ZWNjX3N0ZXBpbmZvc1tpXS5uc3RyZW5ndGhzID0gbnN0cmVuZ3RoczsKPj4gKwkJY2Ruc19jdHJs LT5lY2Nfc3RlcGluZm9zW2ldLnN0cmVuZ3RocyA9Cj4+ICsJCQljZG5zX2N0cmwtPmVjY19zdHJl bmd0aHM7Cj4+ICsKPj4gKwkJaWYgKGNkbnNfY3RybC0+ZWNjX3N0ZXBpbmZvc1tpXS5zdGVwc2l6 ZSAhPSAwKQo+PiArCQkJZWNjX2NhcHMtPm5zdGVwaW5mb3MrKzsKPj4gKwo+PiArCQlpZiAoY2Ru c19jdHJsLT5lY2Nfc3RlcGluZm9zW2ldLnN0ZXBzaXplID4gbWF4X3N0ZXBfc2l6ZSkKPj4gKwkJ CW1heF9zdGVwX3NpemUgPSBjZG5zX2N0cmwtPmVjY19zdGVwaW5mb3NbaV0uc3RlcHNpemU7Cj4+ ICsJfQo+PiArCWVjY19jYXBzLT5zdGVwaW5mb3MgPSAmY2Ruc19jdHJsLT5lY2Nfc3RlcGluZm9z WzBdOwo+PiArCj4+ICsJc3dpdGNoIChtYXhfc3RlcF9zaXplKSB7Cj4+ICsJY2FzZSAyNTY6Cj4+ ICsJCWVjY19jYXBzLT5jYWxjX2VjY19ieXRlcyA9ICZjYWRlbmNlX25hbmRfY2FsY19lY2NfYnl0 ZXNfMjU2Owo+PiArCQlicmVhazsKPj4gKwljYXNlIDUxMjoKPj4gKwkJZWNjX2NhcHMtPmNhbGNf ZWNjX2J5dGVzID0gJmNhZGVuY2VfbmFuZF9jYWxjX2VjY19ieXRlc181MTI7Cj4+ICsJCWJyZWFr Owo+PiArCWNhc2UgMTAyNDoKPj4gKwkJZWNjX2NhcHMtPmNhbGNfZWNjX2J5dGVzID0gJmNhZGVu Y2VfbmFuZF9jYWxjX2VjY19ieXRlc18xMDI0Owo+PiArCQlicmVhazsKPj4gKwljYXNlIDIwNDg6 Cj4+ICsJCWVjY19jYXBzLT5jYWxjX2VjY19ieXRlcyA9ICZjYWRlbmNlX25hbmRfY2FsY19lY2Nf Ynl0ZXNfMjA0ODsKPj4gKwkJYnJlYWs7Cj4+ICsJY2FzZSA0MDk2Ogo+PiArCQllY2NfY2Fwcy0+ Y2FsY19lY2NfYnl0ZXMgPSAmY2FkZW5jZV9uYW5kX2NhbGNfZWNjX2J5dGVzXzQwOTY7Cj4+ICsJ CWJyZWFrOwo+PiArCWRlZmF1bHQ6Cj4+ICsJCWRldl9lcnIoY2Ruc19jdHJsLT5kZXYsCj4+ICsJ CQkiVW5zdXBwb3J0ZWQgc2VjdG9yIHNpemUoZWNjIHN0ZXAgc2l6ZSkgJWRcbiIsCj4+ICsJCQlt YXhfc3RlcF9zaXplKTsKPj4gKwkJcmV0dXJuIC1FSU87Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJu IDA7Cj4+ICt9Cj4+ICsKPj4gKy8qIEhhcmR3YXJlIGluaXRpYWxpemF0aW9uLiAqLwo+PiArc3Rh dGljIGludCBjYWRlbmNlX25hbmRfaHdfaW5pdChzdHJ1Y3QgY2Ruc19uYW5kX2N0cmwgKmNkbnNf Y3RybCkKPj4gK3sKPj4gKwlpbnQgc3RhdHVzOwo+PiArCXUzMiByZWc7Cj4+ICsKPj4gKwlzdGF0 dXMgPSBjYWRlbmNlX25hbmRfd2FpdF9mb3JfdmFsdWUoY2Ruc19jdHJsLCBDVFJMX1NUQVRVUywK Pj4gKwkJCQkJICAgICAxMDAwMDAwLAo+PiArCQkJCQkgICAgIENUUkxfU1RBVFVTX0lOSVRfQ09N UCwgZmFsc2UpOwo+PiArCWlmIChzdGF0dXMpCj4+ICsJCXJldHVybiBzdGF0dXM7Cj4+ICsKPj4g KwlyZWcgPSByZWFkbF9yZWxheGVkKGNkbnNfY3RybC0+cmVnICsgQ1RSTF9WRVJTSU9OKTsKPj4g Kwo+PiArCWRldl9pbmZvKGNkbnNfY3RybC0+ZGV2LAo+PiArCQkgIiVzOiBjYWRlbmNlIG5hbmQg Y29udHJvbGxlciB2ZXJzaW9uIHJlZyAleFxuIiwKPj4gKwkJIF9fZnVuY19fLCByZWcpOwo+PiAr Cj4+ICsJLyogRGlzYWJsZSBjYWNoZSBhbmQgbXVsdGlwbGFuZS4gKi8KPj4gKwl3cml0ZWxfcmVs YXhlZCgwLCBjZG5zX2N0cmwtPnJlZyArIE1VTFRJUExBTkVfQ0ZHKTsKPj4gKwl3cml0ZWxfcmVs YXhlZCgwLCBjZG5zX2N0cmwtPnJlZyArIENBQ0hFX0NGRyk7Cj4KPkNhY2hlPwo+CklmICBmZWF0 dXJlIGlzIGVuYWJsZWQgdGhlbiBUaGUgTkFORCBGbGFzaCBDb250cm9sbGVyIHdpbGwgc2VxdWVu Y2UgCnRoZSBtdWx0aS1wYWdlIHJlYWQgY29tbWFuZHMgYXMgY2FjaGUgcmVhZCBvciBjYWNoZSBw cm9ncmFtIHNlcXVlbmNlLiAKTm90IHVzZWQgYnkgTGludXggZHJpdmVyIGJlY2F1c2UgZHJpdmVy IGhhcyBwb3NzaWJpbGl0eSB0byAKcHJvZ3JhbS9yZWFkIG9ubHkgYSBzaW5nbGUgcGFnZS4KCj4+ ICsKPj4gKwkvKiBDbGVhciBhbGwgaW50ZXJydXB0cy4gKi8KPj4gKwl3cml0ZWxfcmVsYXhlZCgw eEZGRkZGRkZGLCBjZG5zX2N0cmwtPnJlZyArIElOVFJfU1RBVFVTKTsKPj4gKwo+PiArCWNhZGVu Y2VfbmFuZF9nZXRfY2FwcyhjZG5zX2N0cmwpOwo+PiArCWNhZGVuY2VfbmFuZF9yZWFkX2JjaF9j YXBzKGNkbnNfY3RybCk7Cj4+ICsKPj4gKwkvKgo+PiArCSAqIFNldCBJTyB3aWR0aCBhY2Nlc3Mg dG8gOC4KPj4gKwkgKiBJdCBpcyBiZWNhdXNlIGR1cmluZyBTVyBkZXZpY2UgZGlzY292ZXJpbmcg d2lkdGggYWNjZXNzCj4+ICsJICogaXMgZXhwZWN0ZWQgdG8gYmUgOC4KPj4gKwkgKi8KPj4gKwlz dGF0dXMgPSBjYWRlbmNlX25hbmRfc2V0X2FjY2Vzc193aWR0aDE2KGNkbnNfY3RybCwgZmFsc2Up Owo+PiArCj4+ICsJcmV0dXJuIHN0YXR1czsKPj4gK30KPj4gKwo+PiArI2RlZmluZSBUVF9NQUlO X09PQl9BUkVBUwkyCj4+ICsjZGVmaW5lIFRUX1JBV19QQUdFCQkzCj4+ICsjZGVmaW5lIFRUX0JC TQkJCTQKPj4gKyNkZWZpbmUgVFRfTUFJTl9PT0JfQVJFQV9FWFQJNQo+PiArCj4+ICsvKiBQcmVw YXJlIHNpemUgb2YgZGF0YSB0byB0cmFuc2Zlci4gKi8KPj4gK3N0YXRpYyB2b2lkCj4+ICtjYWRl bmNlX25hbmRfcHJlcGFyZV9kYXRhX3NpemUoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKPj4gKwkJ CSAgICAgICBpbnQgdHJhbnNmZXJfdHlwZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgY2Ruc19uYW5kX2N0 cmwgKmNkbnNfY3RybCA9IHRvX2NkbnNfbmFuZF9jdHJsKGNoaXAtPmNvbnRyb2xsZXIpOwo+PiAr CXN0cnVjdCBjZG5zX25hbmRfY2hpcCAqY2Ruc19jaGlwID0gdG9fY2Ruc19uYW5kX2NoaXAoY2hp cCk7Cj4+ICsJc3RydWN0IG10ZF9pbmZvICptdGQgPSBuYW5kX3RvX210ZChjaGlwKTsKPj4gKwl1 MzIgc2VjX3NpemUgPSAwLCBvZmZzZXQgPSAwLCBzZWNfY250ID0gMTsKPj4gKwl1MzIgbGFzdF9z ZWNfc2l6ZSA9IGNkbnNfY2hpcC0+c2VjdG9yX3NpemU7Cj4+ICsJdTMyIGVjY19zaXplID0gY2hp cC0+ZWNjLmJ5dGVzOwo+PiArCXUzMiBkYXRhX2N0cmxfc2l6ZSA9IDA7Cj4+ICsJdTMyIHJlZyA9 IDA7Cj4+ICsKPj4gKwlpZiAoY2Ruc19jdHJsLT5jdXJyX3RyYW5zX3R5cGUgPT0gdHJhbnNmZXJf dHlwZSkKPj4gKwkJcmV0dXJuOwo+PiArCj4+ICsJc3dpdGNoICh0cmFuc2Zlcl90eXBlKSB7Cj4+ ICsJY2FzZSBUVF9NQUlOX09PQl9BUkVBX0VYVDoKPj4gKwkJc2VjX2NudCA9IGNkbnNfY2hpcC0+ c2VjdG9yX2NvdW50Owo+PiArCQlzZWNfc2l6ZSA9IGNkbnNfY2hpcC0+c2VjdG9yX3NpemU7Cj4+ ICsJCWRhdGFfY3RybF9zaXplID0gY2Ruc19jaGlwLT5hdmFpbF9vb2Jfc2l6ZTsKPj4gKwkJYnJl YWs7Cj4+ICsJY2FzZSBUVF9NQUlOX09PQl9BUkVBUzoKPj4gKwkJc2VjX2NudCA9IGNkbnNfY2hp cC0+c2VjdG9yX2NvdW50Owo+PiArCQlsYXN0X3NlY19zaXplID0gY2Ruc19jaGlwLT5zZWN0b3Jf c2l6ZQo+PiArCQkJKyBjZG5zX2NoaXAtPmF2YWlsX29vYl9zaXplOwo+PiArCQlzZWNfc2l6ZSA9 IGNkbnNfY2hpcC0+c2VjdG9yX3NpemU7Cj4+ICsJCWJyZWFrOwo+PiArCWNhc2UgVFRfUkFXX1BB R0U6Cj4+ICsJCWxhc3Rfc2VjX3NpemUgPSBtdGQtPndyaXRlc2l6ZSArIG10ZC0+b29ic2l6ZTsK Pj4gKwkJYnJlYWs7Cj4+ICsJY2FzZSBUVF9CQk06Cj4+ICsJCW9mZnNldCA9IG10ZC0+d3JpdGVz aXplICsgY2Ruc19jaGlwLT5iYm1fb2ZmczsKPj4gKwkJbGFzdF9zZWNfc2l6ZSA9IDg7Cj4+ICsJ CWJyZWFrOwo+PiArCX0KPj4gKwo+PiArCXJlZyA9IDA7Cj4+ICsJcmVnIHw9IEZJRUxEX1BSRVAo VFJBTl9DRkdfMF9PRkZTRVQsIG9mZnNldCk7Cj4+ICsJcmVnIHw9IEZJRUxEX1BSRVAoVFJBTl9D RkdfMF9TRUNfQ05ULCBzZWNfY250KTsKPj4gKwl3cml0ZWxfcmVsYXhlZChyZWcsIGNkbnNfY3Ry bC0+cmVnICsgVFJBTl9DRkdfMCk7Cj4+ICsKPj4gKwlyZWcgPSAwOwo+PiArCXJlZyB8PSBGSUVM RF9QUkVQKFRSQU5fQ0ZHXzFfTEFTVF9TRUNfU0laRSwgbGFzdF9zZWNfc2l6ZSk7Cj4+ICsJcmVn IHw9IEZJRUxEX1BSRVAoVFJBTl9DRkdfMV9TRUNUT1JfU0laRSwgc2VjX3NpemUpOwo+PiArCXdy aXRlbF9yZWxheGVkKHJlZywgY2Ruc19jdHJsLT5yZWcgKyBUUkFOX0NGR18xKTsKPj4gKwo+PiAr CWlmIChjZG5zX2N0cmwtPmNhcHMyLmRhdGFfY29udHJvbF9zdXBwID09IDEpIHsKPj4gKwkJcmVn ID0gcmVhZGxfcmVsYXhlZChjZG5zX2N0cmwtPnJlZyArIENPTlRST0xfREFUQV9DVFJMKTsKPj4g KwkJcmVnICY9IH5DT05UUk9MX0RBVEFfQ1RSTF9TSVpFOwo+PiArCQlyZWcgfD0gRklFTERfUFJF UChDT05UUk9MX0RBVEFfQ1RSTF9TSVpFLCBkYXRhX2N0cmxfc2l6ZSk7Cj4+ICsJCXdyaXRlbF9y ZWxheGVkKHJlZywgY2Ruc19jdHJsLT5yZWcgKyBDT05UUk9MX0RBVEFfQ1RSTCk7Cj4+ICsJfQo+ PiArCj4+ICsJY2Ruc19jdHJsLT5jdXJyX3RyYW5zX3R5cGUgPSB0cmFuc2Zlcl90eXBlOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgaW50Cj4+ICtjYWRlbmNlX25hbmRfY2RtYV90cmFuc2ZlcihzdHJ1 Y3QgY2Ruc19uYW5kX2N0cmwgKmNkbnNfY3RybCwgdTggY2hpcF9uciwKPj4gKwkJCSAgIGludCBw YWdlLCB2b2lkICpidWYsIHZvaWQgKmN0cmxfZGF0LCB1MzIgYnVmX3NpemUsCj4+ICsJCQkgICB1 MzIgY3RybF9kYXRfc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAo+PiArCQkJICAg Ym9vbCB3aXRoX2VjYykKPj4gK3sKPj4gKwlzdHJ1Y3QgY2FkZW5jZV9uYW5kX2NkbWFfZGVzYyAq Y2RtYV9kZXNjID0gY2Ruc19jdHJsLT5jZG1hX2Rlc2M7Cj4+ICsJZG1hX2FkZHJfdCBkbWFfYnVm LCBkbWFfY3RybF9kYXQgPSAwOwo+PiArCXU4IHRocmVhZF9uciA9IGNoaXBfbnI7Cj4+ICsJaW50 IHN0YXR1czsKPj4gKwl1MTYgY3R5cGU7Cj4+ICsKPj4gKwlpZiAoZGlyID09IERNQV9GUk9NX0RF VklDRSkKPj4gKwkJY3R5cGUgPSBDRE1BX0NUX1JEOwo+PiArCWVsc2UKPj4gKwkJY3R5cGUgPSBD RE1BX0NUX1dSOwo+PiArCj4+ICsJY2FkZW5jZV9uYW5kX3NldF9lY2NfZW5hYmxlKGNkbnNfY3Ry bCwgd2l0aF9lY2MpOwo+PiArCj4+ICsJZG1hX2J1ZiA9IGRtYV9tYXBfc2luZ2xlKGNkbnNfY3Ry bC0+ZGV2LCBidWYsIGJ1Zl9zaXplLCBkaXIpOwo+PiArCWlmIChkbWFfbWFwcGluZ19lcnJvcihj ZG5zX2N0cmwtPmRldiwgZG1hX2J1ZikpIHsKPj4gKwkJZGV2X2VycihjZG5zX2N0cmwtPmRldiwg IkZhaWxlZCB0byBtYXAgRE1BIGJ1ZmZlclxuIik7Cj4+ICsJCXJldHVybiAtRUlPOwo+PiArCX0K Pj4gKwo+PiArCWlmIChjdHJsX2RhdCAmJiBjdHJsX2RhdF9zaXplKSB7Cj4+ICsJCWRtYV9jdHJs X2RhdCA9IGRtYV9tYXBfc2luZ2xlKGNkbnNfY3RybC0+ZGV2LCBjdHJsX2RhdCwKPj4gKwkJCQkJ ICAgICAgY3RybF9kYXRfc2l6ZSwgZGlyKTsKPj4gKwkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGNk bnNfY3RybC0+ZGV2LCBkbWFfY3RybF9kYXQpKSB7Cj4+ICsJCQlkbWFfdW5tYXBfc2luZ2xlKGNk bnNfY3RybC0+ZGV2LCBkbWFfYnVmLAo+PiArCQkJCQkgYnVmX3NpemUsIGRpcik7Cj4+ICsJCQlk ZXZfZXJyKGNkbnNfY3RybC0+ZGV2LCAiRmFpbGVkIHRvIG1hcCBETUEgYnVmZmVyXG4iKTsKPj4g KwkJCXJldHVybiAtRUlPOwo+PiArCQl9Cj4+ICsJfQo+PiArCj4+ICsJY2FkZW5jZV9uYW5kX2Nk bWFfZGVzY19wcmVwYXJlKGNkbWFfZGVzYywgY2hpcF9uciwgcGFnZSwKPj4gKwkJCQkgICAgICAg KHZvaWQgKilkbWFfYnVmLCAodm9pZCAqKWRtYV9jdHJsX2RhdCwKPj4gKwkJCQkgICAgICAgY3R5 cGUpOwo+PiArCj4+ICsJc3RhdHVzID0gY2FkZW5jZV9uYW5kX2NkbWFfc2VuZF9hbmRfd2FpdChj ZG5zX2N0cmwsIHRocmVhZF9ucik7Cj4+ICsKPj4gKwlkbWFfdW5tYXBfc2luZ2xlKGNkbnNfY3Ry bC0+ZGV2LCBkbWFfYnVmLAo+PiArCQkJIGJ1Zl9zaXplLCBkaXIpOwo+PiArCj4+ICsJaWYgKGN0 cmxfZGF0ICYmIGN0cmxfZGF0X3NpemUpCj4+ICsJCWRtYV91bm1hcF9zaW5nbGUoY2Ruc19jdHJs LT5kZXYsIGRtYV9jdHJsX2RhdCwKPj4gKwkJCQkgY3RybF9kYXRfc2l6ZSwgZGlyKTsKPj4gKwlp ZiAoc3RhdHVzKQo+PiArCQlyZXR1cm4gc3RhdHVzOwo+PiArCj4+ICsJcmV0dXJuIGNhZGVuY2Vf bmFuZF9jZG1hX2ZpbmlzaChjZG5zX2N0cmwsIGNkbnNfY3RybC0+Y2RtYV9kZXNjKTsKPj4gK30K Pj4gKwo+PiArc3RhdGljIHZvaWQgY2FkZW5jZV9uYW5kX3NldF90aW1pbmdzKHN0cnVjdCBjZG5z X25hbmRfY3RybCAqY2Ruc19jdHJsLAo+PiArCQkJCSAgICAgc3RydWN0IGNhZGVuY2VfbmFuZF90 aW1pbmdzICp0KQo+PiArewo+PiArCXdyaXRlbF9yZWxheGVkKHQtPmFzeW5jX3RvZ2dsZV90aW1p bmdzLAo+PiArCQkgICAgICAgY2Ruc19jdHJsLT5yZWcgKyBBU1lOQ19UT0dHTEVfVElNSU5HUyk7 Cj4+ICsJd3JpdGVsX3JlbGF4ZWQodC0+dGltaW5nczAsIGNkbnNfY3RybC0+cmVnICsgVElNSU5H UzApOwo+PiArCXdyaXRlbF9yZWxheGVkKHQtPnRpbWluZ3MxLCBjZG5zX2N0cmwtPnJlZyArIFRJ TUlOR1MxKTsKPj4gKwl3cml0ZWxfcmVsYXhlZCh0LT50aW1pbmdzMiwgY2Ruc19jdHJsLT5yZWcg KyBUSU1JTkdTMik7Cj4+ICsKPj4gKwlpZiAoY2Ruc19jdHJsLT5jYXBzMi5pc19waHlfdHlwZV9k bGwpCj4+ICsJCXdyaXRlbF9yZWxheGVkKHQtPmRsbF9waHlfY3RybCwgY2Ruc19jdHJsLT5yZWcg KyBETExfUEhZX0NUUkwpOwo+PiArCj4+ICsJd3JpdGVsX3JlbGF4ZWQodC0+cGh5X2N0cmwsIGNk bnNfY3RybC0+cmVnICsgUEhZX0NUUkwpOwo+PiArCj4+ICsJaWYgKGNkbnNfY3RybC0+Y2FwczIu aXNfcGh5X3R5cGVfZGxsKSB7Cj4+ICsJCXdyaXRlbF9yZWxheGVkKDAsIGNkbnNfY3RybC0+cmVn ICsgUEhZX1RTRUwpOwo+PiArCQl3cml0ZWxfcmVsYXhlZCgyLCBjZG5zX2N0cmwtPnJlZyArIFBI WV9EUV9USU1JTkcpOwo+PiArCQl3cml0ZWxfcmVsYXhlZCh0LT5waHlfZHFzX3RpbWluZywKPj4g KwkJCSAgICAgICBjZG5zX2N0cmwtPnJlZyArIFBIWV9EUVNfVElNSU5HKTsKPj4gKwkJd3JpdGVs X3JlbGF4ZWQodC0+cGh5X2dhdGVfbHBia19jdHJsLAo+PiArCQkJICAgICAgIGNkbnNfY3RybC0+ cmVnICsgUEhZX0dBVEVfTFBCS19DVFJMKTsKPj4gKwkJd3JpdGVsX3JlbGF4ZWQoUEhZX0RMTF9N QVNURVJfQ1RSTF9CWVBBU1NfTU9ERSwKPj4gKwkJCSAgICAgICBjZG5zX2N0cmwtPnJlZyArIFBI WV9ETExfTUFTVEVSX0NUUkwpOwo+PiArCQl3cml0ZWxfcmVsYXhlZCgwLCBjZG5zX2N0cmwtPnJl ZyArIFBIWV9ETExfU0xBVkVfQ1RSTCk7Cj4+ICsJfQo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50 IGNhZGVuY2VfbmFuZF9zZWxlY3RfdGFyZ2V0KHN0cnVjdCBuYW5kX2NoaXAgKmNoaXApCj4+ICt7 Cj4+ICsJc3RydWN0IGNkbnNfbmFuZF9jdHJsICpjZG5zX2N0cmwgPSB0b19jZG5zX25hbmRfY3Ry bChjaGlwLT5jb250cm9sbGVyKTsKPj4gKwlzdHJ1Y3QgY2Ruc19uYW5kX2NoaXAgKmNkbnNfY2hp cCA9IHRvX2NkbnNfbmFuZF9jaGlwKGNoaXApOwo+PiArCj4+ICsJaWYgKGNoaXAgPT0gY2Ruc19j dHJsLT5zZWxlY3RlZF9jaGlwKQo+PiArCQlyZXR1cm4gMDsKPj4gKwo+PiArCWlmIChjYWRlbmNl X25hbmRfd2FpdF9mb3JfdmFsdWUoY2Ruc19jdHJsLCBDVFJMX1NUQVRVUywKPj4gKwkJCQkJMTAw MDAwMCwKPj4gKwkJCQkJQ1RSTF9TVEFUVVNfQ1RSTF9CVVNZLCB0cnVlKSkKPj4gKwkJcmV0dXJu IC1FVElNRURPVVQ7Cj4+ICsKPj4gKwljYWRlbmNlX25hbmRfc2V0X3RpbWluZ3MoY2Ruc19jdHJs LCAmY2Ruc19jaGlwLT50aW1pbmdzKTsKPj4gKwo+PiArCWNhZGVuY2VfbmFuZF9zZXRfZWNjX3N0 cmVuZ3RoKGNkbnNfY3RybCwKPj4gKwkJCQkgICAgICBjZG5zX2NoaXAtPmNvcnJfc3RyX2lkeCk7 Cj4+ICsKPj4gKwljYWRlbmNlX25hbmRfc2V0X2VyYXNlX2RldGVjdGlvbihjZG5zX2N0cmwsIHRy dWUsCj4+ICsJCQkJCSBjaGlwLT5lY2Muc3RyZW5ndGgpOwo+PiArCj4+ICsJY2Ruc19jdHJsLT5j dXJyX3RyYW5zX3R5cGUgPSAtMTsKPj4gKwljZG5zX2N0cmwtPnNlbGVjdGVkX2NoaXAgPSBjaGlw Owo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgY2FkZW5jZV9u YW5kX2VyYXNlKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIHUzMiBwYWdlKQo+PiArewo+PiArCXN0 cnVjdCBjZG5zX25hbmRfY3RybCAqY2Ruc19jdHJsID0gdG9fY2Ruc19uYW5kX2N0cmwoY2hpcC0+ Y29udHJvbGxlcik7Cj4+ICsJc3RydWN0IGNkbnNfbmFuZF9jaGlwICpjZG5zX2NoaXAgPSB0b19j ZG5zX25hbmRfY2hpcChjaGlwKTsKPj4gKwlpbnQgc3RhdHVzOwo+PiArCXU4IHRocmVhZF9uciA9 IGNkbnNfY2hpcC0+Y3NbY2hpcC0+Y3VyX2NzXTsKPj4gKwo+PiArCWNhZGVuY2VfbmFuZF9jZG1h X2Rlc2NfcHJlcGFyZShjZG5zX2N0cmwtPmNkbWFfZGVzYywKPj4gKwkJCQkgICAgICAgY2Ruc19j aGlwLT5jc1tjaGlwLT5jdXJfY3NdLAo+PiArCQkJCSAgICAgICBwYWdlLCBOVUxMLCBOVUxMLAo+ PiArCQkJCSAgICAgICBDRE1BX0NUX0VSQVNFKTsKPj4gKwlzdGF0dXMgPSBjYWRlbmNlX25hbmRf Y2RtYV9zZW5kX2FuZF93YWl0KGNkbnNfY3RybCwgdGhyZWFkX25yKTsKPj4gKwlpZiAoc3RhdHVz KSB7Cj4+ICsJCWRldl9lcnIoY2Ruc19jdHJsLT5kZXYsICJlcmFzZSBvcGVyYXRpb24gZmFpbGVk XG4iKTsKPj4gKwkJcmV0dXJuIC1FSU87Cj4+ICsJfQo+PiArCj4+ICsJc3RhdHVzID0gY2FkZW5j ZV9uYW5kX2NkbWFfZmluaXNoKGNkbnNfY3RybCwgY2Ruc19jdHJsLT5jZG1hX2Rlc2MpOwo+PiAr CWlmIChzdGF0dXMpCj4+ICsJCXJldHVybiBzdGF0dXM7Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4g K30KPj4gKwo+PiArc3RhdGljIGludCBjYWRlbmNlX25hbmRfcmVhZF9iYm0oc3RydWN0IG5hbmRf Y2hpcCAqY2hpcCwgaW50IHBhZ2UsIHU4ICpidWYpCj4+ICt7Cj4+ICsJaW50IHN0YXR1czsKPj4g KwlzdHJ1Y3QgY2Ruc19uYW5kX2N0cmwgKmNkbnNfY3RybCA9IHRvX2NkbnNfbmFuZF9jdHJsKGNo aXAtPmNvbnRyb2xsZXIpOwo+PiArCXN0cnVjdCBjZG5zX25hbmRfY2hpcCAqY2Ruc19jaGlwID0g dG9fY2Ruc19uYW5kX2NoaXAoY2hpcCk7Cj4+ICsJc3RydWN0IG10ZF9pbmZvICptdGQgPSBuYW5k X3RvX210ZChjaGlwKTsKPj4gKwo+PiArCWNhZGVuY2VfbmFuZF9wcmVwYXJlX2RhdGFfc2l6ZShj aGlwLCBUVF9CQk0pOwo+PiArCj4+ICsJY2FkZW5jZV9uYW5kX3NldF9za2lwX2J5dGVzX2NvbmYo Y2Ruc19jdHJsLCAwLCAwLCAwKTsKPj4gKwo+PiArCS8qCj4+ICsJICogUmVhZCBvbmx5IGJhZCBi bG9jayBtYXJrZXIgZnJvbSBvZmZzZXQKPj4gKwkgKiBkZWZpbmVkIGJ5IGEgbWVtb3J5IG1hbnVm YWN0dXJlci4KPj4gKwkgKi8KPj4gKwlzdGF0dXMgPSBjYWRlbmNlX25hbmRfY2RtYV90cmFuc2Zl cihjZG5zX2N0cmwsCj4+ICsJCQkJCSAgICBjZG5zX2NoaXAtPmNzW2NoaXAtPmN1cl9jc10sCj4+ ICsJCQkJCSAgICBwYWdlLCBjZG5zX2N0cmwtPmJ1ZiwgTlVMTCwKPj4gKwkJCQkJICAgIG10ZC0+ b29ic2l6ZSwKPj4gKwkJCQkJICAgIDAsIERNQV9GUk9NX0RFVklDRSwgZmFsc2UpOwo+PiArCWlm IChzdGF0dXMpIHsKPj4gKwkJZGV2X2VycihjZG5zX2N0cmwtPmRldiwgInJlYWQgQkJNIGZhaWxl ZFxuIik7Cj4+ICsJCXJldHVybiAtRUlPOwo+PiArCX0KPj4gKwo+PiArCW1lbWNweShidWYgKyBj ZG5zX2NoaXAtPmJibV9vZmZzLCBjZG5zX2N0cmwtPmJ1ZiwgY2Ruc19jaGlwLT5iYm1fbGVuKTsK Pj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+Cj5Ob3Qgc3VyZSB0aGlzIGZ1bmN0aW9uIGlzIHJl bGV2YW50LCBzZWUgYmVsb3cuCj4KPj4gKwo+PiArc3RhdGljIGludCBjYWRlbmNlX25hbmRfd3Jp dGVfcGFnZShzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAo+PiArCQkJCSAgIGNvbnN0IHU4ICpidWYs IGludCBvb2JfcmVxdWlyZWQsCj4+ICsJCQkJICAgaW50IHBhZ2UpCj4+ICt7Cj4+ICsJc3RydWN0 IGNkbnNfbmFuZF9jdHJsICpjZG5zX2N0cmwgPSB0b19jZG5zX25hbmRfY3RybChjaGlwLT5jb250 cm9sbGVyKTsKPj4gKwlzdHJ1Y3QgY2Ruc19uYW5kX2NoaXAgKmNkbnNfY2hpcCA9IHRvX2NkbnNf bmFuZF9jaGlwKGNoaXApOwo+PiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQo Y2hpcCk7Cj4+ICsJaW50IHN0YXR1czsKPj4gKwl1MTYgbWFya2VyX3ZhbCA9IDB4RkZGRjsKPj4g Kwo+PiArCXN0YXR1cyA9IGNhZGVuY2VfbmFuZF9zZWxlY3RfdGFyZ2V0KGNoaXApOwo+PiArCWlm IChzdGF0dXMpCj4+ICsJCXJldHVybiBzdGF0dXM7Cj4+ICsKPj4gKwljYWRlbmNlX25hbmRfc2V0 X3NraXBfYnl0ZXNfY29uZihjZG5zX2N0cmwsIGNkbnNfY2hpcC0+YmJtX2xlbiwKPj4gKwkJCQkJ IG10ZC0+d3JpdGVzaXplCj4+ICsJCQkJCSArIGNkbnNfY2hpcC0+YmJtX29mZnMsCj4+ICsJCQkJ CSAxKTsKPj4gKwo+PiArCWlmIChvb2JfcmVxdWlyZWQpIHsKPj4gKwkJbWFya2VyX3ZhbCA9ICoo dTE2ICopKGNoaXAtPm9vYl9wb2kKPj4gKwkJCQkgICAgICArIGNkbnNfY2hpcC0+YmJtX29mZnMp Owo+PiArCX0gZWxzZSB7Cj4+ICsJCS8qIFNldCBvb2IgZGF0YSB0byAweEZGLiAqLwo+PiArCQlt ZW1zZXQoY2Ruc19jdHJsLT5idWYgKyBtdGQtPndyaXRlc2l6ZSwgMHhGRiwKPj4gKwkJICAgICAg IGNkbnNfY2hpcC0+YXZhaWxfb29iX3NpemUpOwo+PiArCX0KPj4gKwo+PiArCWNhZGVuY2VfbmFu ZF9zZXRfc2tpcF9tYXJrZXJfdmFsKGNkbnNfY3RybCwgbWFya2VyX3ZhbCk7Cj4+ICsKPj4gKwlj YWRlbmNlX25hbmRfcHJlcGFyZV9kYXRhX3NpemUoY2hpcCwgVFRfTUFJTl9PT0JfQVJFQV9FWFQp Owo+PiArCj4+ICsJaWYgKGNhZGVuY2VfbmFuZF9kbWFfYnVmX29rKGNkbnNfY3RybCwgYnVmLCBt dGQtPndyaXRlc2l6ZSkgJiYKPj4gKwkgICAgY2Ruc19jdHJsLT5jYXBzMi5kYXRhX2NvbnRyb2xf c3VwcCkgewo+PiArCQl1OCAqb29iOwo+PiArCj4+ICsJCWlmIChvb2JfcmVxdWlyZWQpCj4+ICsJ CQlvb2IgPSBjaGlwLT5vb2JfcG9pOwo+PiArCQllbHNlCj4+ICsJCQlvb2IgPSBjZG5zX2N0cmwt PmJ1ZiArIG10ZC0+d3JpdGVzaXplOwo+PiArCj4+ICsJCXN0YXR1cyA9IGNhZGVuY2VfbmFuZF9j ZG1hX3RyYW5zZmVyKGNkbnNfY3RybCwKPj4gKwkJCQkJCSAgICBjZG5zX2NoaXAtPmNzW2NoaXAt PmN1cl9jc10sCj4+ICsJCQkJCQkgICAgcGFnZSwgKHZvaWQgKilidWYsIG9vYiwKPj4gKwkJCQkJ CSAgICBtdGQtPndyaXRlc2l6ZSwKPj4gKwkJCQkJCSAgICBjZG5zX2NoaXAtPmF2YWlsX29vYl9z aXplLAo+PiArCQkJCQkJICAgIERNQV9UT19ERVZJQ0UsIHRydWUpOwo+PiArCQlpZiAoc3RhdHVz KSB7Cj4+ICsJCQlkZXZfZXJyKGNkbnNfY3RybC0+ZGV2LCAid3JpdGUgcGFnZSBmYWlsZWRcbiIp Owo+PiArCQkJcmV0dXJuIC1FSU87Cj4+ICsJCX0KPj4gKwo+PiArCQlyZXR1cm4gMDsKPj4gKwl9 Cj4+ICsKPj4gKwlpZiAob29iX3JlcXVpcmVkKSB7Cj4+ICsJCS8qIFRyYW5zZmVyIHRoZSBkYXRh IHRvIHRoZSBvb2IgYXJlYS4gKi8KPj4gKwkJbWVtY3B5KGNkbnNfY3RybC0+YnVmICsgbXRkLT53 cml0ZXNpemUsIGNoaXAtPm9vYl9wb2ksCj4+ICsJCSAgICAgICBjZG5zX2NoaXAtPmF2YWlsX29v Yl9zaXplKTsKPj4gKwl9Cj4+ICsKPj4gKwltZW1jcHkoY2Ruc19jdHJsLT5idWYsIGJ1ZiwgbXRk LT53cml0ZXNpemUpOwo+PiArCj4+ICsJY2FkZW5jZV9uYW5kX3ByZXBhcmVfZGF0YV9zaXplKGNo aXAsIFRUX01BSU5fT09CX0FSRUFTKTsKPj4gKwo+PiArCXJldHVybiBjYWRlbmNlX25hbmRfY2Rt YV90cmFuc2ZlcihjZG5zX2N0cmwsCj4+ICsJCQkJCSAgY2Ruc19jaGlwLT5jc1tjaGlwLT5jdXJf Y3NdLAo+PiArCQkJCQkgIHBhZ2UsIGNkbnNfY3RybC0+YnVmLCBOVUxMLAo+PiArCQkJCQkgIG10 ZC0+d3JpdGVzaXplCj4+ICsJCQkJCSAgKyBjZG5zX2NoaXAtPmF2YWlsX29vYl9zaXplLAo+PiAr CQkJCQkgIDAsIERNQV9UT19ERVZJQ0UsIHRydWUpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50 IGNhZGVuY2VfbmFuZF93cml0ZV9vb2Ioc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgaW50IHBhZ2Up Cj4+ICt7Cj4+ICsJc3RydWN0IGNkbnNfbmFuZF9jdHJsICpjZG5zX2N0cmwgPSB0b19jZG5zX25h bmRfY3RybChjaGlwLT5jb250cm9sbGVyKTsKPj4gKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5h bmRfdG9fbXRkKGNoaXApOwo+PiArCj4+ICsJbWVtc2V0KGNkbnNfY3RybC0+YnVmLCAweEZGLCBt dGQtPndyaXRlc2l6ZSk7Cj4+ICsKPj4gKwlyZXR1cm4gY2FkZW5jZV9uYW5kX3dyaXRlX3BhZ2Uo Y2hpcCwgY2Ruc19jdHJsLT5idWYsIDEsIHBhZ2UpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50 IGNhZGVuY2VfbmFuZF93cml0ZV9wYWdlX3JhdyhzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAo+PiAr CQkJCSAgICAgICBjb25zdCB1OCAqYnVmLCBpbnQgb29iX3JlcXVpcmVkLAo+PiArCQkJCSAgICAg ICBpbnQgcGFnZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgY2Ruc19uYW5kX2N0cmwgKmNkbnNfY3RybCA9 IHRvX2NkbnNfbmFuZF9jdHJsKGNoaXAtPmNvbnRyb2xsZXIpOwo+PiArCXN0cnVjdCBjZG5zX25h bmRfY2hpcCAqY2Ruc19jaGlwID0gdG9fY2Ruc19uYW5kX2NoaXAoY2hpcCk7Cj4+ICsJc3RydWN0 IG10ZF9pbmZvICptdGQgPSBuYW5kX3RvX210ZChjaGlwKTsKPj4gKwlpbnQgd3JpdGVzaXplID0g bXRkLT53cml0ZXNpemU7Cj4+ICsJaW50IG9vYnNpemUgPSBtdGQtPm9vYnNpemU7Cj4+ICsJaW50 IGVjY19zdGVwcyA9IGNoaXAtPmVjYy5zdGVwczsKPj4gKwlpbnQgZWNjX3NpemUgPSBjaGlwLT5l Y2Muc2l6ZTsKPj4gKwlpbnQgZWNjX2J5dGVzID0gY2hpcC0+ZWNjLmJ5dGVzOwo+PiArCXZvaWQg KnRtcF9idWYgPSBjZG5zX2N0cmwtPmJ1ZjsKPj4gKwlpbnQgb29iX3NraXAgPSBjZG5zX2NoaXAt PmJibV9sZW47Cj4+ICsJc2l6ZV90IHNpemUgPSB3cml0ZXNpemUgKyBvb2JzaXplOwo+PiArCWlu dCBpLCBwb3MsIGxlbjsKPj4gKwlpbnQgc3RhdHVzID0gMDsKPj4gKwo+PiArCXN0YXR1cyA9IGNh ZGVuY2VfbmFuZF9zZWxlY3RfdGFyZ2V0KGNoaXApOwo+PiArCWlmIChzdGF0dXMpCj4+ICsJCXJl dHVybiBzdGF0dXM7Cj4+ICsKPj4gKwkvKgo+PiArCSAqIEZpbGwgdGhlIGJ1ZmZlciB3aXRoIDB4 ZmYgZmlyc3QgZXhjZXB0IHRoZSBmdWxsIHBhZ2UgdHJhbnNmZXIuCj4+ICsJICogVGhpcyBzaW1w bGlmaWVzIHRoZSBsb2dpYy4KPj4gKwkgKi8KPj4gKwlpZiAoIWJ1ZiB8fCAhb29iX3JlcXVpcmVk KQo+PiArCQltZW1zZXQodG1wX2J1ZiwgMHhmZiwgc2l6ZSk7Cj4+ICsKPj4gKwljYWRlbmNlX25h bmRfc2V0X3NraXBfYnl0ZXNfY29uZihjZG5zX2N0cmwsIDAsIDAsIDApOwo+PiArCj4+ICsJLyog QXJyYW5nZSB0aGUgYnVmZmVyIGZvciBzeW5kcm9tZSBwYXlsb2FkL2VjYyBsYXlvdXQuICovCj4+ ICsJaWYgKGJ1Zikgewo+PiArCQlmb3IgKGkgPSAwOyBpIDwgZWNjX3N0ZXBzOyBpKyspIHsKPj4g KwkJCXBvcyA9IGkgKiAoZWNjX3NpemUgKyBlY2NfYnl0ZXMpOwo+PiArCQkJbGVuID0gZWNjX3Np emU7Cj4+ICsKPj4gKwkJCWlmIChwb3MgPj0gd3JpdGVzaXplKQo+PiArCQkJCXBvcyArPSBvb2Jf c2tpcDsKPj4gKwkJCWVsc2UgaWYgKHBvcyArIGxlbiA+IHdyaXRlc2l6ZSkKPj4gKwkJCQlsZW4g PSB3cml0ZXNpemUgLSBwb3M7Cj4+ICsKPj4gKwkJCW1lbWNweSh0bXBfYnVmICsgcG9zLCBidWYs IGxlbik7Cj4+ICsJCQlidWYgKz0gbGVuOwo+PiArCQkJaWYgKGxlbiA8IGVjY19zaXplKSB7Cj4+ ICsJCQkJbGVuID0gZWNjX3NpemUgLSBsZW47Cj4+ICsJCQkJbWVtY3B5KHRtcF9idWYgKyB3cml0 ZXNpemUgKyBvb2Jfc2tpcCwgYnVmLAo+PiArCQkJCSAgICAgICBsZW4pOwo+PiArCQkJCWJ1ZiAr PSBsZW47Cj4+ICsJCQl9Cj4+ICsJCX0KPj4gKwl9Cj4+ICsKPj4gKwlpZiAob29iX3JlcXVpcmVk KSB7Cj4+ICsJCWNvbnN0IHU4ICpvb2IgPSBjaGlwLT5vb2JfcG9pOwo+PiArCQl1MzIgb29iX2Rh dGFfb2Zmc2V0ID0gKGNkbnNfY2hpcC0+c2VjdG9yX2NvdW50IC0gMSkgKgo+PiArCQkJKGNkbnNf Y2hpcC0+c2VjdG9yX3NpemUgKyBjaGlwLT5lY2MuYnl0ZXMpCj4+ICsJCQkrIGNkbnNfY2hpcC0+ c2VjdG9yX3NpemUgKyBvb2Jfc2tpcDsKPj4gKwo+PiArCQkvKiBCQk0gYXQgdGhlIGJlZ2lubmlu ZyBvZiB0aGUgT09CIGFyZWEuICovCj4+ICsJCW1lbWNweSh0bXBfYnVmICsgd3JpdGVzaXplLCBv b2IsIG9vYl9za2lwKTsKPj4gKwo+PiArCQkvKiBPT0IgZnJlZS4gKi8KPj4gKwkJbWVtY3B5KHRt cF9idWYgKyBvb2JfZGF0YV9vZmZzZXQsIG9vYiwKPj4gKwkJICAgICAgIGNkbnNfY2hpcC0+YXZh aWxfb29iX3NpemUpOwo+PiArCQlvb2IgKz0gY2Ruc19jaGlwLT5hdmFpbF9vb2Jfc2l6ZTsKPj4g Kwo+PiArCQkvKiBPT0IgRUNDLiAqLwo+PiArCQlmb3IgKGkgPSAwOyBpIDwgZWNjX3N0ZXBzOyBp KyspIHsKPj4gKwkJCXBvcyA9IGVjY19zaXplICsgaSAqIChlY2Nfc2l6ZSArIGVjY19ieXRlcyk7 Cj4+ICsJCQlpZiAoaSA9PSAoZWNjX3N0ZXBzIC0gMSkpCj4+ICsJCQkJcG9zICs9IGNkbnNfY2hp cC0+YXZhaWxfb29iX3NpemU7Cj4+ICsKPj4gKwkJCWxlbiA9IGVjY19ieXRlczsKPj4gKwo+PiAr CQkJaWYgKHBvcyA+PSB3cml0ZXNpemUpCj4+ICsJCQkJcG9zICs9IG9vYl9za2lwOwo+PiArCQkJ ZWxzZSBpZiAocG9zICsgbGVuID4gd3JpdGVzaXplKQo+PiArCQkJCWxlbiA9IHdyaXRlc2l6ZSAt IHBvczsKPj4gKwo+PiArCQkJbWVtY3B5KHRtcF9idWYgKyBwb3MsIG9vYiwgbGVuKTsKPj4gKwkJ CW9vYiArPSBsZW47Cj4+ICsJCQlpZiAobGVuIDwgZWNjX2J5dGVzKSB7Cj4+ICsJCQkJbGVuID0g ZWNjX2J5dGVzIC0gbGVuOwo+PiArCQkJCW1lbWNweSh0bXBfYnVmICsgd3JpdGVzaXplICsgb29i X3NraXAsIG9vYiwKPj4gKwkJCQkgICAgICAgbGVuKTsKPj4gKwkJCQlvb2IgKz0gbGVuOwo+PiAr CQkJfQo+PiArCQl9Cj4+ICsJfQo+PiArCj4+ICsJY2FkZW5jZV9uYW5kX3ByZXBhcmVfZGF0YV9z aXplKGNoaXAsIFRUX1JBV19QQUdFKTsKPj4gKwo+PiArCXJldHVybiBjYWRlbmNlX25hbmRfY2Rt YV90cmFuc2ZlcihjZG5zX2N0cmwsCj4+ICsJCQkJCSAgY2Ruc19jaGlwLT5jc1tjaGlwLT5jdXJf Y3NdLAo+PiArCQkJCQkgIHBhZ2UsIGNkbnNfY3RybC0+YnVmLCBOVUxMLAo+PiArCQkJCQkgIG10 ZC0+d3JpdGVzaXplICsKPj4gKwkJCQkJICBtdGQtPm9vYnNpemUsCj4+ICsJCQkJCSAgMCwgRE1B X1RPX0RFVklDRSwgZmFsc2UpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGNhZGVuY2VfbmFu ZF93cml0ZV9vb2JfcmF3KHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCj4+ICsJCQkJICAgICAgaW50 IHBhZ2UpCj4+ICt7Cj4+ICsJcmV0dXJuIGNhZGVuY2VfbmFuZF93cml0ZV9wYWdlX3JhdyhjaGlw LCBOVUxMLCB0cnVlLCBwYWdlKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBjYWRlbmNlX25h bmRfcmVhZF9wYWdlKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCj4+ICsJCQkJICB1OCAqYnVmLCBp bnQgb29iX3JlcXVpcmVkLCBpbnQgcGFnZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgY2Ruc19uYW5kX2N0 cmwgKmNkbnNfY3RybCA9IHRvX2NkbnNfbmFuZF9jdHJsKGNoaXAtPmNvbnRyb2xsZXIpOwo+PiAr CXN0cnVjdCBjZG5zX25hbmRfY2hpcCAqY2Ruc19jaGlwID0gdG9fY2Ruc19uYW5kX2NoaXAoY2hp cCk7Cj4+ICsJc3RydWN0IG10ZF9pbmZvICptdGQgPSBuYW5kX3RvX210ZChjaGlwKTsKPj4gKwlp bnQgc3RhdHVzID0gMDsKPj4gKwlpbnQgZWNjX2Vycl9jb3VudCA9IDA7Cj4+ICsKPj4gKwlzdGF0 dXMgPSBjYWRlbmNlX25hbmRfc2VsZWN0X3RhcmdldChjaGlwKTsKPj4gKwlpZiAoc3RhdHVzKQo+ PiArCQlyZXR1cm4gc3RhdHVzOwo+PiArCj4+ICsJY2FkZW5jZV9uYW5kX3NldF9za2lwX2J5dGVz X2NvbmYoY2Ruc19jdHJsLCBjZG5zX2NoaXAtPmJibV9sZW4sCj4+ICsJCQkJCSBtdGQtPndyaXRl c2l6ZQo+PiArCQkJCQkgKyBjZG5zX2NoaXAtPmJibV9vZmZzLCAxKTsKPj4gKwo+PiArCS8qCj4+ ICsJICogSWYgZGF0YSBidWZmZXIgY2FuIGJlIGFjY2Vzc2VkIGJ5IERNQSBhbmQgZGF0YV9jb250 cm9sIGZlYXR1cmUKPj4gKwkgKiBpcyBzdXBwb3J0ZWQgdGhlbiB0cmFuc2ZlciBkYXRhIGFuZCBv b2IgZGlyZWN0bHkuCj4+ICsJICovCj4+ICsJaWYgKGNhZGVuY2VfbmFuZF9kbWFfYnVmX29rKGNk bnNfY3RybCwgYnVmLCBtdGQtPndyaXRlc2l6ZSkgJiYKPj4gKwkgICAgY2Ruc19jdHJsLT5jYXBz Mi5kYXRhX2NvbnRyb2xfc3VwcCkgewo+PiArCQl1OCAqb29iOwo+PiArCj4+ICsJCWlmIChvb2Jf cmVxdWlyZWQpCj4+ICsJCQlvb2IgPSBjaGlwLT5vb2JfcG9pOwo+PiArCQllbHNlCj4+ICsJCQlv b2IgPSBjZG5zX2N0cmwtPmJ1ZiArIG10ZC0+d3JpdGVzaXplOwo+PiArCj4+ICsJCWNhZGVuY2Vf bmFuZF9wcmVwYXJlX2RhdGFfc2l6ZShjaGlwLCBUVF9NQUlOX09PQl9BUkVBX0VYVCk7Cj4+ICsJ CXN0YXR1cyA9IGNhZGVuY2VfbmFuZF9jZG1hX3RyYW5zZmVyKGNkbnNfY3RybCwKPj4gKwkJCQkJ CSAgICBjZG5zX2NoaXAtPmNzW2NoaXAtPmN1cl9jc10sCj4+ICsJCQkJCQkgICAgcGFnZSwgYnVm LCBvb2IsCj4+ICsJCQkJCQkgICAgbXRkLT53cml0ZXNpemUsCj4+ICsJCQkJCQkgICAgY2Ruc19j aGlwLT5hdmFpbF9vb2Jfc2l6ZSwKPj4gKwkJCQkJCSAgICBETUFfRlJPTV9ERVZJQ0UsIHRydWUp Owo+PiArCS8qIE90aGVyd2lzZSB1c2UgYm91bmNlIGJ1ZmZlci4gKi8KPj4gKwl9IGVsc2Ugewo+ PiArCQljYWRlbmNlX25hbmRfcHJlcGFyZV9kYXRhX3NpemUoY2hpcCwgVFRfTUFJTl9PT0JfQVJF QVMpOwo+PiArCQlzdGF0dXMgPSBjYWRlbmNlX25hbmRfY2RtYV90cmFuc2ZlcihjZG5zX2N0cmws Cj4+ICsJCQkJCQkgICAgY2Ruc19jaGlwLT5jc1tjaGlwLT5jdXJfY3NdLAo+PiArCQkJCQkJICAg IHBhZ2UsIGNkbnNfY3RybC0+YnVmLAo+PiArCQkJCQkJICAgIE5VTEwsIG10ZC0+d3JpdGVzaXpl Cj4+ICsJCQkJCQkgICAgKyBjZG5zX2NoaXAtPmF2YWlsX29vYl9zaXplLAo+PiArCQkJCQkJICAg IDAsIERNQV9GUk9NX0RFVklDRSwgdHJ1ZSk7Cj4+ICsKPj4gKwkJbWVtY3B5KGJ1ZiwgY2Ruc19j dHJsLT5idWYsIG10ZC0+d3JpdGVzaXplKTsKPj4gKwkJaWYgKG9vYl9yZXF1aXJlZCkKPj4gKwkJ CW1lbWNweShjaGlwLT5vb2JfcG9pLAo+PiArCQkJICAgICAgIGNkbnNfY3RybC0+YnVmICsgbXRk LT53cml0ZXNpemUsCj4+ICsJCQkgICAgICAgbXRkLT5vb2JzaXplKTsKPj4gKwl9Cj4+ICsKPj4g Kwlzd2l0Y2ggKHN0YXR1cykgewo+PiArCWNhc2UgU1RBVF9FQ0NfVU5DT1JSOgo+PiArCQltdGQt PmVjY19zdGF0cy5mYWlsZWQrKzsKPj4gKwkJZWNjX2Vycl9jb3VudCsrOwo+PiArCQlicmVhazsK Pj4gKwljYXNlIFNUQVRfRUNDX0NPUlI6Cj4+ICsJCWVjY19lcnJfY291bnQgPSBGSUVMRF9HRVQo Q0RNQV9DU19NQVhFUlIsCj4+ICsJCQkJCSAgY2Ruc19jdHJsLT5jZG1hX2Rlc2MtPnN0YXR1cyk7 Cj4+ICsJCW10ZC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCArPSBlY2NfZXJyX2NvdW50Owo+Cj5JcyB0 aGlzIHZhbHVlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBiaXRmbGlwcyBpbiBlYWNoIGNodW5rIG9m IHRoZSBwYWdlPwo+SWYgaXQgcmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIGJpdGZsaXBzIGNv cnJlY3RlZCBpbiB0aGUgZW50aXJlIHBhZ2UKPndlIGhhdmUgYSBwcm9ibGVtLgo+Ckl0IGlzIGEg bWF4aW11bSBudW1iZXIgb2YgY29ycmVjdGlvbnMgYXBwbGllZCB0byBhbnkgRUNDIHNlY3RvciBp biB0aGUKdHJhbnNhY3Rpb24uCml0IGxvb2tzIGxpa2UgZm9sb3dpbmcuCm10ZC0+ZWNjX3N0YXRz LmNvcnJlY3RlZCArPSBtYXgoYml0ZmxpcHNfY2h1bmsxLCBiaXRmbGlwc19jaHVuazIsIC4uLi4p CgpUcmFuc2FjdGlvbiB3aWxsIGJlIG1hcmtlZCB1bmNvcnJlY3RhYmxlIGlmIGFueSBvbmUgb2Yg dGhlIHNlY3RvcnMgaXMKdW5jb3JyZWN0YWJsZS4KSXQgbG9va3MgbGlrZSBmb2xsb3dpbmcuCmlm IChpc19jaHVuazFfZmFpbCB8fCBpc19jaHVuazJfZmFpbCAuLi4uLikKICAgICBtdGQtPmVjY19z dGF0cy5mYWlsZWQrKzsKCj4+ICsJCWJyZWFrOwo+PiArCWNhc2UgU1RBVF9FUkFTRUQ6Cj4+ICsJ Y2FzZSBTVEFUX09LOgo+PiArCQlicmVhazsKPj4gKwlkZWZhdWx0Ogo+PiArCQlkZXZfZXJyKGNk bnNfY3RybC0+ZGV2LCAicmVhZCBwYWdlIGZhaWxlZFxuIik7Cj4+ICsJCXJldHVybiAtRUlPOwo+ PiArCX0KPj4gKwo+PiArCWlmIChvb2JfcmVxdWlyZWQpCj4+ICsJCWlmIChjYWRlbmNlX25hbmRf cmVhZF9iYm0oY2hpcCwgcGFnZSwgY2hpcC0+b29iX3BvaSkpCj4+ICsJCQlyZXR1cm4gLUVJTzsK Pgo+RG8gd2UgcmVhbGx5IGNhcmUgYWJvdXQgdGhlIEJCTSBhdCB0aGlzIGxldmVsPyBJZiB3ZSBh cmUgcmVxdWVzdGVkIHRvCj5yZWFkIHRoZSBwYWdlLCBJIHN1cHBvc2Ugd2UgbXVzdCBkbyB3aGF0 IGlzIGluIG91ciBoYW5kcyB0byByZXR1cm4gdGhlCj5kYXRhPyBOb3JtYWxseSB0aGlzIGlzIGhh bmRsZWQgaW4gdXNlcnNwYWNlIGRpcmVjdGx5LgpJdCBpcyBiZWNhdXNlIHdoZW4gRUNDIGlzIGVu YWJsZWQgdGhlbiBwb3NpdGlvbiBvZiAibG9naWMiIHNwYXJlIGFyZWEgaXMKbW92ZWQuCkxldHMg c2F5IHdlIGhhdmUgcGFnZSBzaXplIDQwOTYgYW5kIHNlY3RvciBzaXplIGlzIDEwMjQuCk1hbnVm YWN0dXJlciB1c2UgYmVnaW5pbmcgb2Ygc3BhcmUgYXJlYSBhcyBCQk0uIFNwYXJlIGFyZWEgc3Rh cnRlZCBhdAo0MDk2LgpJbiBjYXNlIEVDQyBpcyBlbmFibGVkLiA0MDk2IG9mZnNldCBpcyBzb21l d2hlcmUgaW4gc2VjdG9yIDQuIApTdGFydCBvZiBzcGFyZSBhcmUgaXMgNDA5NiArIDMgKiBlY2Nf c2l6ZS4gU28gQkJNIGlzIHRha2VuIGZyb20gYmFkCnBsYWNlLgo8cGFnZSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgPjxzcGFyZSAgICAgICAgICAgICAgICAgPgo8c2VjICAgID48 ZWNjPjxzZWMgID48ZWNjPjxzZWMgID48ZWNjPjxzZWMgK3NwYXJlIGRhdCAgPjxlY2M+ClRoZXJl Zm9yZSB3ZSBuZWVkIHRvIHJlYWQgQkJNIGZyb20gcHJvcGVyIHBsYWNlLgpUaGVyZSBhcmUgdHdv ICJwcm9ibGVtcyIgd2hpY2ggbWFrZSB1cyB0byByZWFkIEJCTSBzZXBhcmF0ZWxseS4KCjEuIER1 cmluZyBidWlsZCBCQlQgdGhlIEJCTSBpcyByZWFkIGJ5IGZ1bmN0aW9ucyB3aGljaCBhcmUgZXhw ZWN0ZWQgCiAgICB0byB1c2UgRUNDLiAKMi4gQ29udHJvbGxlciBpbnRlcmxlYXZlcyB0aGUgZGF0 YSB3aXRoIEVDQy4KCj4+ICsKPj4gKwlyZXR1cm4gZWNjX2Vycl9jb3VudDsKPj4gK30KPj4gKwo+ PiArLyogUmVhZHMgT09CIGRhdGEgZnJvbSB0aGUgZGV2aWNlLiAqLwo+PiArc3RhdGljIGludCBj YWRlbmNlX25hbmRfcmVhZF9vb2Ioc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgaW50IHBhZ2UpCj4+ ICt7Cj4+ICsJc3RydWN0IGNkbnNfbmFuZF9jdHJsICpjZG5zX2N0cmwgPSB0b19jZG5zX25hbmRf Y3RybChjaGlwLT5jb250cm9sbGVyKTsKPj4gKwo+PiArCXJldHVybiBjYWRlbmNlX25hbmRfcmVh ZF9wYWdlKGNoaXAsIGNkbnNfY3RybC0+YnVmLCAxLCBwYWdlKTsKPj4gK30KPj4gKwo+PiArc3Rh dGljIGludCBjYWRlbmNlX25hbmRfcmVhZF9wYWdlX3JhdyhzdHJ1Y3QgbmFuZF9jaGlwICpjaGlw LAo+PiArCQkJCSAgICAgIHU4ICpidWYsIGludCBvb2JfcmVxdWlyZWQsIGludCBwYWdlKQo+PiAr ewo+PiArCXN0cnVjdCBjZG5zX25hbmRfY3RybCAqY2Ruc19jdHJsID0gdG9fY2Ruc19uYW5kX2N0 cmwoY2hpcC0+Y29udHJvbGxlcik7Cj4+ICsJc3RydWN0IGNkbnNfbmFuZF9jaGlwICpjZG5zX2No aXAgPSB0b19jZG5zX25hbmRfY2hpcChjaGlwKTsKPj4gKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9 IG5hbmRfdG9fbXRkKGNoaXApOwo+PiArCWludCBvb2Jfc2tpcCA9IGNkbnNfY2hpcC0+YmJtX2xl bjsKPj4gKwlpbnQgd3JpdGVzaXplID0gbXRkLT53cml0ZXNpemU7Cj4+ICsJaW50IGVjY19zdGVw cyA9IGNoaXAtPmVjYy5zdGVwczsKPj4gKwlpbnQgZWNjX3NpemUgPSBjaGlwLT5lY2Muc2l6ZTsK Pj4gKwlpbnQgZWNjX2J5dGVzID0gY2hpcC0+ZWNjLmJ5dGVzOwo+PiArCXZvaWQgKnRtcF9idWYg PSBjZG5zX2N0cmwtPmJ1ZjsKPj4gKwlpbnQgaSwgcG9zLCBsZW47Cj4+ICsJaW50IHN0YXR1cyA9 IDA7Cj4+ICsKPj4gKwlzdGF0dXMgPSBjYWRlbmNlX25hbmRfc2VsZWN0X3RhcmdldChjaGlwKTsK Pj4gKwlpZiAoc3RhdHVzKQo+PiArCQlyZXR1cm4gc3RhdHVzOwo+PiArCj4+ICsJY2FkZW5jZV9u YW5kX3NldF9za2lwX2J5dGVzX2NvbmYoY2Ruc19jdHJsLCAwLCAwLCAwKTsKPj4gKwo+PiArCWNh ZGVuY2VfbmFuZF9wcmVwYXJlX2RhdGFfc2l6ZShjaGlwLCBUVF9SQVdfUEFHRSk7Cj4+ICsJc3Rh dHVzID0gY2FkZW5jZV9uYW5kX2NkbWFfdHJhbnNmZXIoY2Ruc19jdHJsLAo+PiArCQkJCQkgICAg Y2Ruc19jaGlwLT5jc1tjaGlwLT5jdXJfY3NdLAo+PiArCQkJCQkgICAgcGFnZSwgY2Ruc19jdHJs LT5idWYsIE5VTEwsCj4+ICsJCQkJCSAgICBtdGQtPndyaXRlc2l6ZQo+PiArCQkJCQkgICAgKyBt dGQtPm9vYnNpemUsCj4+ICsJCQkJCSAgICAwLCBETUFfRlJPTV9ERVZJQ0UsIGZhbHNlKTsKPj4g Kwo+PiArCXN3aXRjaCAoc3RhdHVzKSB7Cj4+ICsJY2FzZSBTVEFUX0VSQVNFRDoKPj4gKwljYXNl IFNUQVRfT0s6Cj4+ICsJCWJyZWFrOwo+PiArCWRlZmF1bHQ6Cj4+ICsJCWRldl9lcnIoY2Ruc19j dHJsLT5kZXYsICJyZWFkIHJhdyBwYWdlIGZhaWxlZFxuIik7Cj4+ICsJCXJldHVybiAtRUlPOwo+ PiArCX0KPj4gKwo+PiArCS8qIEFycmFuZ2UgdGhlIGJ1ZmZlciBmb3Igc3luZHJvbWUgcGF5bG9h ZC9lY2MgbGF5b3V0LiAqLwo+PiArCWlmIChidWYpIHsKPj4gKwkJZm9yIChpID0gMDsgaSA8IGVj Y19zdGVwczsgaSsrKSB7Cj4+ICsJCQlwb3MgPSBpICogKGVjY19zaXplICsgZWNjX2J5dGVzKTsK Pj4gKwkJCWxlbiA9IGVjY19zaXplOwo+PiArCj4+ICsJCQlpZiAocG9zID49IHdyaXRlc2l6ZSkK Pj4gKwkJCQlwb3MgKz0gb29iX3NraXA7Cj4+ICsJCQllbHNlIGlmIChwb3MgKyBsZW4gPiB3cml0 ZXNpemUpCj4+ICsJCQkJbGVuID0gd3JpdGVzaXplIC0gcG9zOwo+PiArCj4+ICsJCQltZW1jcHko YnVmLCB0bXBfYnVmICsgcG9zLCBsZW4pOwo+PiArCQkJYnVmICs9IGxlbjsKPj4gKwkJCWlmIChs ZW4gPCBlY2Nfc2l6ZSkgewo+PiArCQkJCWxlbiA9IGVjY19zaXplIC0gbGVuOwo+PiArCQkJCW1l bWNweShidWYsIHRtcF9idWYgKyB3cml0ZXNpemUgKyBvb2Jfc2tpcCwKPj4gKwkJCQkgICAgICAg bGVuKTsKPj4gKwkJCQlidWYgKz0gbGVuOwo+PiArCQkJfQo+PiArCQl9Cj4+ICsJfQo+PiArCj4+ ICsJaWYgKG9vYl9yZXF1aXJlZCkgewo+PiArCQl1OCAqb29iID0gY2hpcC0+b29iX3BvaTsKPj4g KwkJdTMyIG9vYl9kYXRhX29mZnNldCA9IChjZG5zX2NoaXAtPnNlY3Rvcl9jb3VudCAtIDEpICoK Pj4gKwkJCShjZG5zX2NoaXAtPnNlY3Rvcl9zaXplICsgY2hpcC0+ZWNjLmJ5dGVzKQo+PiArCQkJ KyBjZG5zX2NoaXAtPnNlY3Rvcl9zaXplICsgb29iX3NraXA7Cj4+ICsKPj4gKwkJLyogT09CIGZy ZWUuICovCj4+ICsJCW1lbWNweShvb2IsIHRtcF9idWYgKyBvb2JfZGF0YV9vZmZzZXQsCj4+ICsJ CSAgICAgICBjZG5zX2NoaXAtPmF2YWlsX29vYl9zaXplKTsKPj4gKwo+PiArCQkvKiBCQk0gYXQg dGhlIGJlZ2lubmluZyBvZiB0aGUgT09CIGFyZWEuICovCj4+ICsJCW1lbWNweShvb2IsIHRtcF9i dWYgKyB3cml0ZXNpemUsIG9vYl9za2lwKTsKPj4gKwo+PiArCQlvb2IgKz0gY2Ruc19jaGlwLT5h dmFpbF9vb2Jfc2l6ZTsKPj4gKwo+PiArCQkvKiBPT0IgRUNDICovCj4+ICsJCWZvciAoaSA9IDA7 IGkgPCBlY2Nfc3RlcHM7IGkrKykgewo+PiArCQkJcG9zID0gZWNjX3NpemUgKyBpICogKGVjY19z aXplICsgZWNjX2J5dGVzKTsKPj4gKwkJCWxlbiA9IGVjY19ieXRlczsKPj4gKwo+PiArCQkJaWYg KGkgPT0gKGVjY19zdGVwcyAtIDEpKQo+PiArCQkJCXBvcyArPSBjZG5zX2NoaXAtPmF2YWlsX29v Yl9zaXplOwo+PiArCj4+ICsJCQlpZiAocG9zID49IHdyaXRlc2l6ZSkKPj4gKwkJCQlwb3MgKz0g b29iX3NraXA7Cj4+ICsJCQllbHNlIGlmIChwb3MgKyBsZW4gPiB3cml0ZXNpemUpCj4+ICsJCQkJ bGVuID0gd3JpdGVzaXplIC0gcG9zOwo+PiArCj4+ICsJCQltZW1jcHkob29iLCB0bXBfYnVmICsg cG9zLCBsZW4pOwo+PiArCQkJb29iICs9IGxlbjsKPj4gKwkJCWlmIChsZW4gPCBlY2NfYnl0ZXMp IHsKPj4gKwkJCQlsZW4gPSBlY2NfYnl0ZXMgLSBsZW47Cj4+ICsJCQkJbWVtY3B5KG9vYiwgdG1w X2J1ZiArIHdyaXRlc2l6ZSArIG9vYl9za2lwLAo+PiArCQkJCSAgICAgICBsZW4pOwo+PiArCQkJ CW9vYiArPSBsZW47Cj4+ICsJCQl9Cj4+ICsJCX0KPj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4gMDsK Pj4gK30KPj4gKwo+PiArc3RhdGljIGludCBjYWRlbmNlX25hbmRfcmVhZF9vb2JfcmF3KHN0cnVj dCBuYW5kX2NoaXAgKmNoaXAsCj4+ICsJCQkJICAgICBpbnQgcGFnZSkKPj4gK3sKPj4gKwlyZXR1 cm4gY2FkZW5jZV9uYW5kX3JlYWRfcGFnZV9yYXcoY2hpcCwgTlVMTCwgdHJ1ZSwgcGFnZSk7Cj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGNhZGVuY2VfbmFuZF9zbGF2ZV9kbWFfdHJhbnNmZXJf ZmluaXNoZWQodm9pZCAqZGF0YSkKPj4gK3sKPj4gKwlzdHJ1Y3QgY29tcGxldGlvbiAqZmluaXNo ZWQgPSBkYXRhOwo+PiArCj4+ICsJY29tcGxldGUoZmluaXNoZWQpOwo+PiArfQo+PiArCj4+ICtz dGF0aWMgaW50IGNhZGVuY2VfbmFuZF9zbGF2ZV9kbWFfdHJhbnNmZXIoc3RydWN0IGNkbnNfbmFu ZF9jdHJsICpjZG5zX2N0cmwsCj4+ICsJCQkJCSAgIHZvaWQgKmJ1ZiwKPj4gKwkJCQkJICAgZG1h X2FkZHJfdCBkZXZfZG1hLCBzaXplX3QgbGVuLAo+PiArCQkJCQkgICBlbnVtIGRtYV9kYXRhX2Rp cmVjdGlvbiBkaXIpCj4+ICt7Cj4+ICsJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soZmluaXNo ZWQpOwo+PiArCXN0cnVjdCBkbWFfY2hhbiAqY2hhbjsKPj4gKwlzdHJ1Y3QgZG1hX2RldmljZSAq ZG1hX2RldjsKPj4gKwlkbWFfYWRkcl90IHNyY19kbWEsIGRzdF9kbWEsIGJ1Zl9kbWE7Cj4+ICsJ c3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eDsKPj4gKwlkbWFfY29va2llX3QgY29v a2llOwo+PiArCj4+ICsJY2hhbiA9IGNkbnNfY3RybC0+ZG1hYzsKPj4gKwlkbWFfZGV2ID0gY2hh bi0+ZGV2aWNlOwo+PiArCj4+ICsJYnVmX2RtYSA9IGRtYV9tYXBfc2luZ2xlKGRtYV9kZXYtPmRl diwgYnVmLCBsZW4sIGRpcik7Cj4+ICsJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRtYV9kZXYtPmRl diwgYnVmX2RtYSkpIHsKPj4gKwkJZGV2X2VycihjZG5zX2N0cmwtPmRldiwgIkZhaWxlZCB0byBt YXAgRE1BIGJ1ZmZlclxuIik7Cj4+ICsJCWdvdG8gZXJyOwo+PiArCX0KPj4gKwo+PiArCWlmIChk aXIgPT0gRE1BX0ZST01fREVWSUNFKSB7Cj4+ICsJCXNyY19kbWEgPSBjZG5zX2N0cmwtPmlvLmRt YTsKPj4gKwkJZHN0X2RtYSA9IGJ1Zl9kbWE7Cj4+ICsJfSBlbHNlIHsKPj4gKwkJc3JjX2RtYSA9 IGJ1Zl9kbWE7Cj4+ICsJCWRzdF9kbWEgPSBjZG5zX2N0cmwtPmlvLmRtYTsKPj4gKwl9Cj4+ICsK Pj4gKwl0eCA9IGRtYWVuZ2luZV9wcmVwX2RtYV9tZW1jcHkoY2Ruc19jdHJsLT5kbWFjLCBkc3Rf ZG1hLCBzcmNfZG1hLCBsZW4sCj4+ICsJCQkJICAgICAgIERNQV9DVFJMX0FDSyB8IERNQV9QUkVQ X0lOVEVSUlVQVCk7Cj4+ICsJaWYgKCF0eCkgewo+PiArCQlkZXZfZXJyKGNkbnNfY3RybC0+ZGV2 LCAiRmFpbGVkIHRvIHByZXBhcmUgRE1BIG1lbWNweVxuIik7Cj4+ICsJCWdvdG8gZXJyX3VubWFw Owo+PiArCX0KPj4gKwo+PiArCXR4LT5jYWxsYmFjayA9IGNhZGVuY2VfbmFuZF9zbGF2ZV9kbWFf dHJhbnNmZXJfZmluaXNoZWQ7Cj4+ICsJdHgtPmNhbGxiYWNrX3BhcmFtID0gJmZpbmlzaGVkOwo+ PiArCj4+ICsJY29va2llID0gZG1hZW5naW5lX3N1Ym1pdCh0eCk7Cj4+ICsJaWYgKGRtYV9zdWJt aXRfZXJyb3IoY29va2llKSkgewo+PiArCQlkZXZfZXJyKGNkbnNfY3RybC0+ZGV2LCAiRmFpbGVk IHRvIGRvIERNQSB0eF9zdWJtaXRcbiIpOwo+PiArCQlnb3RvIGVycl91bm1hcDsKPj4gKwl9Cj4+ ICsKPj4gKwlkbWFfYXN5bmNfaXNzdWVfcGVuZGluZyhjZG5zX2N0cmwtPmRtYWMpOwo+PiArCXdh aXRfZm9yX2NvbXBsZXRpb24oJmZpbmlzaGVkKTsKPj4gKwo+PiArCWRtYV91bm1hcF9zaW5nbGUo Y2Ruc19jdHJsLT5kZXYsIGJ1Zl9kbWEsIGxlbiwgZGlyKTsKPj4gKwo+PiArCXJldHVybiAwOwo+ PiArCj4+ICtlcnJfdW5tYXA6Cj4+ICsJZG1hX3VubWFwX3NpbmdsZShjZG5zX2N0cmwtPmRldiwg YnVmX2RtYSwgbGVuLCBkaXIpOwo+PiArCj4+ICtlcnI6Cj4+ICsJZGV2X2RiZyhjZG5zX2N0cmwt PmRldiwgIkZhbGwgYmFjayB0byBDUFUgSS9PXG4iKTsKPj4gKwo+PiArCXJldHVybiAtRUlPOwo+ PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGNhZGVuY2VfbmFuZF9yZWFkX2J1ZihzdHJ1Y3QgY2Ru c19uYW5kX2N0cmwgKmNkbnNfY3RybCwKPj4gKwkJCQkgdTggKmJ1ZiwgaW50IGxlbikKPj4gK3sK Pj4gKwlpbnQgbGVuX2FsaWduZWQgPSBBTElHTihsZW4sIGNkbnNfY3RybC0+Y2FwczIuZGF0YV9k bWFfd2lkdGgpOwo+PiArCXU4IHRocmVhZF9uciA9IDA7Cj4+ICsJdTMyIHNkbWFfc2l6ZTsKPj4g KwlpbnQgc3RhdHVzOwo+PiArCj4+ICsJaWYgKCFjZG5zX2N0cmwtPmNhcHMxLT5oYXNfZG1hKSB7 Cj4+ICsJCWlmIChsZW4gJiAzKSB7Cj4+ICsJCQlkZXZfZXJyKGNkbnNfY3RybC0+ZGV2LCAidW5h bGlnbmVkIGRhdGFcbiIpOwo+PiArCQkJcmV0dXJuIC1FSU87Cj4+ICsJCX0KPj4gKwkJcmVhZHNs KGNkbnNfY3RybC0+aW8udmlydCwgYnVmLCBsZW4gLyA0KTsKPj4gKwkJcmV0dXJuIDA7Cj4+ICsJ fQo+PiArCj4+ICsJLyogV2FpdCB1bnRpbCBzbGF2ZSBETUEgaW50ZXJmYWNlIGlzIHJlYWR5IHRv IGRhdGEgdHJhbnNmZXIuICovCj4+ICsJc3RhdHVzID0gY2FkZW5jZV9uYW5kX3dhaXRfb25fc2Rt YShjZG5zX2N0cmwsICZ0aHJlYWRfbnIsICZzZG1hX3NpemUpOwo+PiArCWlmIChzdGF0dXMpCj4+ ICsJCXJldHVybiBzdGF0dXM7Cj4+ICsKPj4gKwlpZiAoc2RtYV9zaXplICE9IGxlbl9hbGlnbmVk KSB7Cj4+ICsJCWRldl9lcnIoY2Ruc19jdHJsLT5kZXYsICJ1bmV4cGVjdGVkIHNjZW5hcmlvXG4i KTsKPj4gKwkJcmV0dXJuIC1FSU87Cj4+ICsJfQo+PiArCj4+ICsJaWYgKGNkbnNfY3RybC0+ZG1h YyAmJiBjYWRlbmNlX25hbmRfZG1hX2J1Zl9vayhjZG5zX2N0cmwsIGJ1ZiwgbGVuKSkgewo+PiAr CQlzdGF0dXMgPSBjYWRlbmNlX25hbmRfc2xhdmVfZG1hX3RyYW5zZmVyKGNkbnNfY3RybCwgYnVm LAo+PiArCQkJCQkJCSBjZG5zX2N0cmwtPmlvLmRtYSwKPj4gKwkJCQkJCQkgbGVuLCBETUFfRlJP TV9ERVZJQ0UpOwo+PiArCQlpZiAoc3RhdHVzID09IDApCj4+ICsJCQlyZXR1cm4gMDsKPj4gKwo+ PiArCQlkZXZfd2FybihjZG5zX2N0cmwtPmRldiwKPj4gKwkJCSAiU2xhdmUgRE1BIHRyYW5zZmVy IGZhaWxlZC4gVHJ5IGFnYWluIHVzaW5nIGJvdW5jZSBidWZmZXIuIik7Cj4+ICsJfQo+PiArCj4+ ICsJLyogSWYgRE1BIHRyYW5zZmVyIGlzIG5vdCBwb3NzaWJsZSBvciBmYWlsZWQgdGhlbiB1c2Ug Ym91bmNlIGJ1ZmZlci4gKi8KPj4gKwlzdGF0dXMgPSBjYWRlbmNlX25hbmRfc2xhdmVfZG1hX3Ry YW5zZmVyKGNkbnNfY3RybCwgY2Ruc19jdHJsLT5idWYsCj4+ICsJCQkJCQkgY2Ruc19jdHJsLT5p by5kbWEsCj4+ICsJCQkJCQkgbGVuX2FsaWduZWQsIERNQV9GUk9NX0RFVklDRSk7Cj4+ICsKPj4g KwlpZiAoc3RhdHVzKSB7Cj4+ICsJCWRldl9lcnIoY2Ruc19jdHJsLT5kZXYsICJTbGF2ZSBETUEg dHJhbnNmZXIgZmFpbGVkIik7Cj4+ICsJCXJldHVybiBzdGF0dXM7Cj4+ICsJfQo+PiArCj4+ICsJ bWVtY3B5KGJ1ZiwgY2Ruc19jdHJsLT5idWYsIGxlbik7Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4g K30KPj4gKwo+PiArc3RhdGljIGludCBjYWRlbmNlX25hbmRfd3JpdGVfYnVmKHN0cnVjdCBjZG5z X25hbmRfY3RybCAqY2Ruc19jdHJsLAo+PiArCQkJCSAgY29uc3QgdTggKmJ1ZiwgaW50IGxlbikK Pj4gK3sKPj4gKwl1OCB0aHJlYWRfbnIgPSAwOwo+PiArCXUzMiBzZG1hX3NpemU7Cj4+ICsJaW50 IHN0YXR1czsKPj4gKwlpbnQgbGVuX2FsaWduZWQgPSBBTElHTihsZW4sIGNkbnNfY3RybC0+Y2Fw czIuZGF0YV9kbWFfd2lkdGgpOwo+PiArCj4+ICsJaWYgKCFjZG5zX2N0cmwtPmNhcHMxLT5oYXNf ZG1hKSB7Cj4+ICsJCWlmIChsZW4gJiAzKSB7Cj4+ICsJCQlkZXZfZXJyKGNkbnNfY3RybC0+ZGV2 LCAidW5hbGlnbmVkIGRhdGFcbiIpOwo+PiArCQkJcmV0dXJuIC1FSU87Cj4+ICsJCX0KPj4gKwkJ d3JpdGVzbChjZG5zX2N0cmwtPmlvLnZpcnQsIGJ1ZiwgbGVuIC8gNCk7Cj4+ICsJCXJldHVybiAw Owo+PiArCX0KPj4gKwo+PiArCS8qIFdhaXQgdW50aWwgc2xhdmUgRE1BIGludGVyZmFjZSBpcyBy ZWFkeSB0byBkYXRhIHRyYW5zZmVyLiAqLwo+PiArCXN0YXR1cyA9IGNhZGVuY2VfbmFuZF93YWl0 X29uX3NkbWEoY2Ruc19jdHJsLCAmdGhyZWFkX25yLCAmc2RtYV9zaXplKTsKPj4gKwlpZiAoc3Rh dHVzKQo+PiArCQlyZXR1cm4gc3RhdHVzOwo+PiArCj4+ICsJaWYgKHNkbWFfc2l6ZSAhPSBsZW5f YWxpZ25lZCkgewo+PiArCQlkZXZfZXJyKGNkbnNfY3RybC0+ZGV2LCAiRXJyb3IgdW5leHBlY3Rl ZCBzY2VuYXJpb1xuIik7Cj4+ICsJCXJldHVybiAtRUlPOwo+PiArCX0KPj4gKwo+PiArCWlmIChj ZG5zX2N0cmwtPmRtYWMgJiYgY2FkZW5jZV9uYW5kX2RtYV9idWZfb2soY2Ruc19jdHJsLCBidWYs IGxlbikpIHsKPj4gKwkJc3RhdHVzID0gY2FkZW5jZV9uYW5kX3NsYXZlX2RtYV90cmFuc2Zlcihj ZG5zX2N0cmwsICh2b2lkICopYnVmLAo+PiArCQkJCQkJCSBjZG5zX2N0cmwtPmlvLmRtYSwKPj4g KwkJCQkJCQkgbGVuLCBETUFfVE9fREVWSUNFKTsKPj4gKwkJaWYgKHN0YXR1cyA9PSAwKQo+PiAr CQkJcmV0dXJuIDA7Cj4+ICsKPj4gKwkJZGV2X3dhcm4oY2Ruc19jdHJsLT5kZXYsCj4+ICsJCQkg IlNsYXZlIERNQSB0cmFuc2ZlciBmYWlsZWQuIFRyeSBhZ2FpbiB1c2luZyBib3VuY2UgYnVmZmVy LiIpOwo+PiArCX0KPj4gKwo+PiArCS8qIElmIERNQSB0cmFuc2ZlciBpcyBub3QgcG9zc2libGUg b3IgZmFpbGVkIHRoZW4gdXNlIGJvdW5jZSBidWZmZXIuICovCj4+ICsJbWVtY3B5KGNkbnNfY3Ry bC0+YnVmLCBidWYsIGxlbik7Cj4+ICsKPj4gKwlzdGF0dXMgPSBjYWRlbmNlX25hbmRfc2xhdmVf ZG1hX3RyYW5zZmVyKGNkbnNfY3RybCwgY2Ruc19jdHJsLT5idWYsCj4+ICsJCQkJCQkgY2Ruc19j dHJsLT5pby5kbWEsCj4+ICsJCQkJCQkgbGVuX2FsaWduZWQsIERNQV9UT19ERVZJQ0UpOwo+PiAr Cj4+ICsJaWYgKHN0YXR1cykKPj4gKwkJZGV2X2VycihjZG5zX2N0cmwtPmRldiwgIlNsYXZlIERN QSB0cmFuc2ZlciBmYWlsZWQiKTsKPj4gKwo+PiArCXJldHVybiBzdGF0dXM7Cj4+ICt9Cj4+ICsK Pj4gK3N0YXRpYyBpbnQgY2FkZW5jZV9uYW5kX2ZvcmNlX2J5dGVfYWNjZXNzKHN0cnVjdCBuYW5k X2NoaXAgKmNoaXAsCj4+ICsJCQkJCSAgYm9vbCBmb3JjZV84Yml0KQo+PiArewo+PiArCXN0cnVj dCBjZG5zX25hbmRfY3RybCAqY2Ruc19jdHJsID0gdG9fY2Ruc19uYW5kX2N0cmwoY2hpcC0+Y29u dHJvbGxlcik7Cj4+ICsJaW50IHN0YXR1czsKPj4gKwo+PiArCS8qCj4+ICsJICogQ2FsbGVycyBv ZiB0aGlzIGZ1bmN0aW9uIGRvIG5vdCB2ZXJpZnkgaWYgdGhlIE5BTkQgaXMgdXNpbmcgYSAxNi1i aXQKPj4gKwkgKiBhbiA4LWJpdCBidXMgZm9yIG5vcm1hbCBvcGVyYXRpb25zLCBzbyB3ZSBuZWVk IHRvIHRha2UgY2FyZSBvZiB0aGF0Cj4+ICsJICogaGVyZSBieSBsZWF2aW5nIHRoZSBjb25maWd1 cmF0aW9uIHVuY2hhbmdlZCBpZiB0aGUgTkFORCBkb2VzIG5vdCBoYXZlCj4+ICsJICogdGhlIE5B TkRfQlVTV0lEVEhfMTYgZmxhZyBzZXQuCj4+ICsJICovCj4+ICsJaWYgKCEoY2hpcC0+b3B0aW9u cyAmIE5BTkRfQlVTV0lEVEhfMTYpKQo+PiArCQlyZXR1cm4gMDsKPj4gKwo+PiArCXN0YXR1cyA9 IGNhZGVuY2VfbmFuZF9zZXRfYWNjZXNzX3dpZHRoMTYoY2Ruc19jdHJsLCAhZm9yY2VfOGJpdCk7 Cj4+ICsKPj4gKwlyZXR1cm4gc3RhdHVzOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGNhZGVu Y2VfbmFuZF9jbWRfb3Bjb2RlKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCj4+ICsJCQkJICAgY29u c3Qgc3RydWN0IG5hbmRfc3Vib3AgKnN1Ym9wKQo+PiArewo+PiArCXN0cnVjdCBjZG5zX25hbmRf Y3RybCAqY2Ruc19jdHJsID0gdG9fY2Ruc19uYW5kX2N0cmwoY2hpcC0+Y29udHJvbGxlcik7Cj4+ ICsJc3RydWN0IGNkbnNfbmFuZF9jaGlwICpjZG5zX2NoaXAgPSB0b19jZG5zX25hbmRfY2hpcChj aGlwKTsKPj4gKwljb25zdCBzdHJ1Y3QgbmFuZF9vcF9pbnN0ciAqaW5zdHI7Cj4+ICsJdW5zaWdu ZWQgaW50IG9wX2lkID0gMDsKPj4gKwl1NjQgbWluaV9jdHJsX2NtZCA9IDA7Cj4+ICsJaW50IHJl dDsKPj4gKwo+PiArCWluc3RyID0gJnN1Ym9wLT5pbnN0cnNbb3BfaWRdOwo+PiArCj4+ICsJaWYg KGluc3RyLT5kZWxheV9ucyA+IDApCj4+ICsJCW1pbmlfY3RybF9jbWQgfD0gR0NNRF9MQVlfVFdC Owo+PiArCj4+ICsJbWluaV9jdHJsX2NtZCB8PSBGSUVMRF9QUkVQKEdDTURfTEFZX0lOU1RSLAo+ PiArCQkJCSAgICBHQ01EX0xBWV9JTlNUUl9DTUQpOwo+PiArCW1pbmlfY3RybF9jbWQgfD0gRklF TERfUFJFUChHQ01EX0xBWV9JTlBVVF9DTUQsCj4+ICsJCQkJICAgIGluc3RyLT5jdHguY21kLm9w Y29kZSk7Cj4+ICsKPj4gKwlyZXQgPSBjYWRlbmNlX25hbmRfZ2VuZXJpY19jbWRfc2VuZChjZG5z X2N0cmwsCj4+ICsJCQkJCSAgICBjZG5zX2NoaXAtPmNzW2NoaXAtPmN1cl9jc10sCj4+ICsJCQkJ CSAgICBtaW5pX2N0cmxfY21kKTsKPj4gKwlpZiAocmV0KQo+PiArCQlkZXZfZXJyKGNkbnNfY3Ry bC0+ZGV2LCAic2VuZCBjbWQgJXggZmFpbGVkXG4iLAo+PiArCQkJaW5zdHItPmN0eC5jbWQub3Bj b2RlKTsKPj4gKwo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgY2Fk ZW5jZV9uYW5kX2NtZF9hZGRyZXNzKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCj4+ICsJCQkJICAg IGNvbnN0IHN0cnVjdCBuYW5kX3N1Ym9wICpzdWJvcCkKPj4gK3sKPj4gKwlzdHJ1Y3QgY2Ruc19u YW5kX2N0cmwgKmNkbnNfY3RybCA9IHRvX2NkbnNfbmFuZF9jdHJsKGNoaXAtPmNvbnRyb2xsZXIp Owo+PiArCXN0cnVjdCBjZG5zX25hbmRfY2hpcCAqY2Ruc19jaGlwID0gdG9fY2Ruc19uYW5kX2No aXAoY2hpcCk7Cj4+ICsJY29uc3Qgc3RydWN0IG5hbmRfb3BfaW5zdHIgKmluc3RyOwo+PiArCXVu c2lnbmVkIGludCBvcF9pZCA9IDA7Cj4+ICsJdTY0IG1pbmlfY3RybF9jbWQgPSAwOwo+PiArCXVu c2lnbmVkIGludCBvZmZzZXQsIG5hZGRyczsKPj4gKwl1NjQgYWRkcmVzcyA9IDA7Cj4+ICsJY29u c3QgdTggKmFkZHJzOwo+PiArCWludCByZXQ7Cj4+ICsJaW50IGk7Cj4+ICsKPj4gKwlpbnN0ciA9 ICZzdWJvcC0+aW5zdHJzW29wX2lkXTsKPj4gKwo+PiArCWlmIChpbnN0ci0+ZGVsYXlfbnMgPiAw KQo+PiArCQltaW5pX2N0cmxfY21kIHw9IEdDTURfTEFZX1RXQjsKPj4gKwo+PiArCW1pbmlfY3Ry bF9jbWQgfD0gRklFTERfUFJFUChHQ01EX0xBWV9JTlNUUiwKPj4gKwkJCQkgICAgR0NNRF9MQVlf SU5TVFJfQUREUik7Cj4+ICsKPj4gKwlvZmZzZXQgPSBuYW5kX3N1Ym9wX2dldF9hZGRyX3N0YXJ0 X29mZihzdWJvcCwgb3BfaWQpOwo+PiArCW5hZGRycyA9IG5hbmRfc3Vib3BfZ2V0X251bV9hZGRy X2N5YyhzdWJvcCwgb3BfaWQpOwo+PiArCWFkZHJzID0gJmluc3RyLT5jdHguYWRkci5hZGRyc1tv ZmZzZXRdOwo+PiArCj4+ICsJZm9yIChpID0gMDsgaSA8IG5hZGRyczsgaSsrKQo+PiArCQlhZGRy ZXNzIHw9ICh1NjQpYWRkcnNbaV0gPDwgKDggKiBpKTsKPj4gKwo+PiArCW1pbmlfY3RybF9jbWQg fD0gRklFTERfUFJFUChHQ01EX0xBWV9JTlBVVF9BRERSLAo+PiArCQkJCSAgICBhZGRyZXNzKTsK Pj4gKwltaW5pX2N0cmxfY21kIHw9IEZJRUxEX1BSRVAoR0NNRF9MQVlfSU5QVVRfQUREUl9TSVpF LAo+PiArCQkJCSAgICBuYWRkcnMgLSAxKTsKPj4gKwo+PiArCXJldCA9IGNhZGVuY2VfbmFuZF9n ZW5lcmljX2NtZF9zZW5kKGNkbnNfY3RybCwKPj4gKwkJCQkJICAgIGNkbnNfY2hpcC0+Y3NbY2hp cC0+Y3VyX2NzXSwKPj4gKwkJCQkJICAgIG1pbmlfY3RybF9jbWQpOwo+PiArCWlmIChyZXQpCj4+ ICsJCWRldl9lcnIoY2Ruc19jdHJsLT5kZXYsICJzZW5kIGFkZHJlc3MgJWxseCBmYWlsZWRcbiIs IGFkZHJlc3MpOwo+PiArCj4+ICsJcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlu dCBjYWRlbmNlX25hbmRfY21kX2VyYXNlKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCj4+ICsJCQkJ ICBjb25zdCBzdHJ1Y3QgbmFuZF9zdWJvcCAqc3Vib3ApCj4+ICt7Cj4+ICsJdW5zaWduZWQgaW50 IG9wX2lkOwo+PiArCj4+ICsJaWYgKHN1Ym9wLT5pbnN0cnNbMF0uY3R4LmNtZC5vcGNvZGUgPT0g TkFORF9DTURfRVJBU0UxKSB7Cj4+ICsJCWludCBpOwo+PiArCQljb25zdCBzdHJ1Y3QgbmFuZF9v cF9pbnN0ciAqaW5zdHIgPSBOVUxMOwo+PiArCQl1bnNpZ25lZCBpbnQgb2Zmc2V0LCBuYWRkcnM7 Cj4+ICsJCWNvbnN0IHU4ICphZGRyczsKPj4gKwkJdTMyIHBhZ2UgPSAwOwo+PiArCj4+ICsJCWlu c3RyID0gJnN1Ym9wLT5pbnN0cnNbMV07Cj4+ICsJCW9mZnNldCA9IG5hbmRfc3Vib3BfZ2V0X2Fk ZHJfc3RhcnRfb2ZmKHN1Ym9wLCAxKTsKPj4gKwkJbmFkZHJzID0gbmFuZF9zdWJvcF9nZXRfbnVt X2FkZHJfY3ljKHN1Ym9wLCAxKTsKPj4gKwkJYWRkcnMgPSAmaW5zdHItPmN0eC5hZGRyLmFkZHJz W29mZnNldF07Cj4+ICsKPj4gKwkJZm9yIChpID0gMDsgaSA8IG5hZGRyczsgaSsrKQo+PiArCQkJ cGFnZSB8PSAodTMyKWFkZHJzW2ldIDw8ICg4ICogaSk7Cj4+ICsKPj4gKwkJcmV0dXJuIGNhZGVu Y2VfbmFuZF9lcmFzZShjaGlwLCBwYWdlKTsKPj4gKwl9Cj4+ICsKPj4gKwkvKgo+PiArCSAqIElm IGl0IGlzIG5vdCBhbiBlcmFzZSBvcGVyYXRpb24gdGhlbiBoYW5kbGUgb3BlcmF0aW9uCj4+ICsJ ICogYnkgY2FsbGluZyBleGVjX29wIGZ1bmN0aW9uLgo+PiArCSAqLwo+PiArCWZvciAob3BfaWQg PSAwOyBvcF9pZCA8IHN1Ym9wLT5uaW5zdHJzOyBvcF9pZCsrKSB7Cj4+ICsJCWludCByZXQ7Cj4+ ICsJCWNvbnN0IHN0cnVjdCBuYW5kX29wZXJhdGlvbiBuYW5kX29wID0gewo+PiArCQkJLmNzID0g Y2hpcC0+Y3VyX2NzLAo+PiArCQkJLmluc3RycyA9ICAmc3Vib3AtPmluc3Ryc1tvcF9pZF0sCj4+ ICsJCQkubmluc3RycyA9IDF9Owo+PiArCQlyZXQgPSBjaGlwLT5jb250cm9sbGVyLT5vcHMtPmV4 ZWNfb3AoY2hpcCwgJm5hbmRfb3AsIGZhbHNlKTsKPj4gKwkJaWYgKHJldCkKPj4gKwkJCXJldHVy biByZXQ7Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBp bnQgY2FkZW5jZV9uYW5kX2NtZF9kYXRhKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCj4+ICsJCQkJ IGNvbnN0IHN0cnVjdCBuYW5kX3N1Ym9wICpzdWJvcCkKPj4gK3sKPj4gKwlzdHJ1Y3QgY2Ruc19u YW5kX2N0cmwgKmNkbnNfY3RybCA9IHRvX2NkbnNfbmFuZF9jdHJsKGNoaXAtPmNvbnRyb2xsZXIp Owo+PiArCXN0cnVjdCBjZG5zX25hbmRfY2hpcCAqY2Ruc19jaGlwID0gdG9fY2Ruc19uYW5kX2No aXAoY2hpcCk7Cj4+ICsJY29uc3Qgc3RydWN0IG5hbmRfb3BfaW5zdHIgKmluc3RyOwo+PiArCXVu c2lnbmVkIGludCBvZmZzZXQsIG9wX2lkID0gMDsKPj4gKwl1NjQgbWluaV9jdHJsX2NtZCA9IDA7 Cj4+ICsJaW50IGxlbiA9IDA7Cj4+ICsJaW50IHJldDsKPj4gKwo+PiArCWluc3RyID0gJnN1Ym9w LT5pbnN0cnNbb3BfaWRdOwo+PiArCj4+ICsJaWYgKGluc3RyLT5kZWxheV9ucyA+IDApCj4+ICsJ CW1pbmlfY3RybF9jbWQgfD0gR0NNRF9MQVlfVFdCOwo+PiArCj4+ICsJbWluaV9jdHJsX2NtZCB8 PSBGSUVMRF9QUkVQKEdDTURfTEFZX0lOU1RSLAo+PiArCQkJCSAgICBHQ01EX0xBWV9JTlNUUl9E QVRBKTsKPj4gKwo+PiArCWlmIChpbnN0ci0+dHlwZSA9PSBOQU5EX09QX0RBVEFfT1VUX0lOU1RS KQo+PiArCQltaW5pX2N0cmxfY21kIHw9IEZJRUxEX1BSRVAoR0NNRF9ESVIsCj4+ICsJCQkJCSAg ICBHQ01EX0RJUl9XUklURSk7Cj4+ICsKPj4gKwlsZW4gPSBuYW5kX3N1Ym9wX2dldF9kYXRhX2xl bihzdWJvcCwgb3BfaWQpOwo+PiArCW9mZnNldCA9IG5hbmRfc3Vib3BfZ2V0X2RhdGFfc3RhcnRf b2ZmKHN1Ym9wLCBvcF9pZCk7Cj4+ICsJbWluaV9jdHJsX2NtZCB8PSBGSUVMRF9QUkVQKEdDTURf U0VDVF9DTlQsIDEpOwo+PiArCW1pbmlfY3RybF9jbWQgfD0gRklFTERfUFJFUChHQ01EX0xBU1Rf U0laRSwgbGVuKTsKPj4gKwlpZiAoaW5zdHItPmN0eC5kYXRhLmZvcmNlXzhiaXQpIHsKPj4gKwkJ cmV0ID0gY2FkZW5jZV9uYW5kX2ZvcmNlX2J5dGVfYWNjZXNzKGNoaXAsIHRydWUpOwo+PiArCQlp ZiAocmV0KSB7Cj4+ICsJCQlkZXZfZXJyKGNkbnNfY3RybC0+ZGV2LAo+PiArCQkJCSJjYW5ub3Qg Y2hhbmdlIGJ5dGUgYWNjZXNzIGdlbmVyaWMgZGF0YSBjbWQgZmFpbGVkXG4iKTsKPj4gKwkJCXJl dHVybiByZXQ7Cj4+ICsJCX0KPj4gKwl9Cj4+ICsKPj4gKwlyZXQgPSBjYWRlbmNlX25hbmRfZ2Vu ZXJpY19jbWRfc2VuZChjZG5zX2N0cmwsCj4+ICsJCQkJCSAgICBjZG5zX2NoaXAtPmNzW2NoaXAt PmN1cl9jc10sCj4+ICsJCQkJCSAgICBtaW5pX2N0cmxfY21kKTsKPj4gKwlpZiAocmV0KSB7Cj4+ ICsJCWRldl9lcnIoY2Ruc19jdHJsLT5kZXYsICJzZW5kIGdlbmVyaWMgZGF0YSBjbWQgZmFpbGVk XG4iKTsKPj4gKwkJcmV0dXJuIHJldDsKPj4gKwl9Cj4+ICsKPj4gKwlpZiAoaW5zdHItPnR5cGUg PT0gTkFORF9PUF9EQVRBX0lOX0lOU1RSKSB7Cj4+ICsJCXZvaWQgKmJ1ZiA9IGluc3RyLT5jdHgu ZGF0YS5idWYuaW4gKyBvZmZzZXQ7Cj4+ICsKPj4gKwkJcmV0ID0gY2FkZW5jZV9uYW5kX3JlYWRf YnVmKGNkbnNfY3RybCwgYnVmLCBsZW4pOwo+PiArCX0gZWxzZSB7Cj4+ICsJCWNvbnN0IHZvaWQg KmJ1ZiA9IGluc3RyLT5jdHguZGF0YS5idWYub3V0ICsgb2Zmc2V0Owo+PiArCj4+ICsJCXJldCA9 IGNhZGVuY2VfbmFuZF93cml0ZV9idWYoY2Ruc19jdHJsLCBidWYsIGxlbik7Cj4+ICsJfQo+PiAr Cj4+ICsJaWYgKHJldCkgewo+PiArCQlkZXZfZXJyKGNkbnNfY3RybC0+ZGV2LCAiZGF0YSB0cmFu c2ZlciBmYWlsZWQgZm9yIGdlbmVyaWMgY29tbWFuZFxuIik7Cj4+ICsJCXJldHVybiByZXQ7Cj4+ ICsJfQo+PiArCj4+ICsJaWYgKGluc3RyLT5jdHguZGF0YS5mb3JjZV84Yml0KSB7Cj4+ICsJCXJl dCA9IGNhZGVuY2VfbmFuZF9mb3JjZV9ieXRlX2FjY2VzcyhjaGlwLCBmYWxzZSk7Cj4+ICsJCWlm IChyZXQpIHsKPj4gKwkJCWRldl9lcnIoY2Ruc19jdHJsLT5kZXYsCj4+ICsJCQkJImNhbm5vdCBj aGFuZ2UgYnl0ZSBhY2Nlc3MgZ2VuZXJpYyBkYXRhIGNtZCBmYWlsZWRcbiIpOwo+PiArCQl9Cj4+ ICsJfQo+PiArCj4+ICsJcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBjYWRl bmNlX25hbmRfY21kX3dhaXRyZHkoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKPj4gKwkJCQkgICAg Y29uc3Qgc3RydWN0IG5hbmRfc3Vib3AgKnN1Ym9wKQo+PiArewo+PiArCWludCBzdGF0dXM7Cj4+ ICsJdW5zaWduZWQgaW50IG9wX2lkID0gMDsKPj4gKwlzdHJ1Y3QgY2Ruc19uYW5kX2N0cmwgKmNk bnNfY3RybCA9IHRvX2NkbnNfbmFuZF9jdHJsKGNoaXAtPmNvbnRyb2xsZXIpOwo+PiArCXN0cnVj dCBjZG5zX25hbmRfY2hpcCAqY2Ruc19jaGlwID0gdG9fY2Ruc19uYW5kX2NoaXAoY2hpcCk7Cj4+ ICsJY29uc3Qgc3RydWN0IG5hbmRfb3BfaW5zdHIgKmluc3RyID0gJnN1Ym9wLT5pbnN0cnNbb3Bf aWRdOwo+PiArCXUzMiB0aW1lb3V0X3VzID0gaW5zdHItPmN0eC53YWl0cmR5LnRpbWVvdXRfbXMg KiAxMDAwOwo+PiArCj4+ICsJc3RhdHVzID0gY2FkZW5jZV9uYW5kX3dhaXRfZm9yX3ZhbHVlKGNk bnNfY3RybCwgUkJOX1NFVElOR1MsCj4+ICsJCQkJCSAgICAgdGltZW91dF91cywKPj4gKwkJCQkJ ICAgICAxVSA8PCBjZG5zX2NoaXAtPmNzW2NoaXAtPmN1cl9jc10sCj4KPiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgpID8KPgo+PiArCQkJCQkgICAgIGZh bHNlKTsKPj4gKwlyZXR1cm4gc3RhdHVzOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IG5hbmRfb3BfcGFyc2VyIGNhZGVuY2VfbmFuZF9vcF9wYXJzZXIgPSBOQU5EX09QX1BBUlNF UigKPj4gKwlOQU5EX09QX1BBUlNFUl9QQVRURVJOKAo+PiArCQljYWRlbmNlX25hbmRfY21kX2Vy YXNlLAo+PiArCQlOQU5EX09QX1BBUlNFUl9QQVRfQ01EX0VMRU0oZmFsc2UpLAo+PiArCQlOQU5E X09QX1BBUlNFUl9QQVRfQUREUl9FTEVNKGZhbHNlLCBNQVhfRVJBU0VfQUREUkVTU19DWUMpLAo+ PiArCQlOQU5EX09QX1BBUlNFUl9QQVRfQ01EX0VMRU0oZmFsc2UpLAo+PiArCQlOQU5EX09QX1BB UlNFUl9QQVRfV0FJVFJEWV9FTEVNKGZhbHNlKSksCj4+ICsJTkFORF9PUF9QQVJTRVJfUEFUVEVS TigKPj4gKwkJY2FkZW5jZV9uYW5kX2NtZF9vcGNvZGUsCj4+ICsJCU5BTkRfT1BfUEFSU0VSX1BB VF9DTURfRUxFTShmYWxzZSkpLAo+PiArCU5BTkRfT1BfUEFSU0VSX1BBVFRFUk4oCj4+ICsJCWNh ZGVuY2VfbmFuZF9jbWRfYWRkcmVzcywKPj4gKwkJTkFORF9PUF9QQVJTRVJfUEFUX0FERFJfRUxF TShmYWxzZSwgTUFYX0FERFJFU1NfQ1lDKSksCj4+ICsJTkFORF9PUF9QQVJTRVJfUEFUVEVSTigK Pj4gKwkJY2FkZW5jZV9uYW5kX2NtZF9kYXRhLAo+PiArCQlOQU5EX09QX1BBUlNFUl9QQVRfREFU QV9JTl9FTEVNKGZhbHNlLCBNQVhfREFUQV9TSVpFKSksCj4+ICsJTkFORF9PUF9QQVJTRVJfUEFU VEVSTigKPj4gKwkJY2FkZW5jZV9uYW5kX2NtZF9kYXRhLAo+PiArCQlOQU5EX09QX1BBUlNFUl9Q QVRfREFUQV9PVVRfRUxFTShmYWxzZSwgTUFYX0RBVEFfU0laRSkpLAo+PiArCU5BTkRfT1BfUEFS U0VSX1BBVFRFUk4oCj4+ICsJCWNhZGVuY2VfbmFuZF9jbWRfd2FpdHJkeSwKPj4gKwkJTkFORF9P UF9QQVJTRVJfUEFUX1dBSVRSRFlfRUxFTShmYWxzZSkpCj4+ICsJKTsKPj4gKwo+PiArc3RhdGlj IGludCBjYWRlbmNlX25hbmRfZXhlY19vcChzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAo+PiArCQkJ CWNvbnN0IHN0cnVjdCBuYW5kX29wZXJhdGlvbiAqb3AsCj4+ICsJCQkJYm9vbCBjaGVja19vbmx5 KQo+PiArewo+PiArCWludCBzdGF0dXMgPSBjYWRlbmNlX25hbmRfc2VsZWN0X3RhcmdldChjaGlw KTsKPj4gKwo+PiArCWlmIChzdGF0dXMpCj4+ICsJCXJldHVybiBzdGF0dXM7Cj4+ICsKPj4gKwly ZXR1cm4gbmFuZF9vcF9wYXJzZXJfZXhlY19vcChjaGlwLCAmY2FkZW5jZV9uYW5kX29wX3BhcnNl ciwgb3AsCj4+ICsJCQkJICAgICAgY2hlY2tfb25seSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBp bnQgY2FkZW5jZV9uYW5kX29vYmxheW91dF9mcmVlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQg c2VjdGlvbiwKPj4gKwkJCQkgICAgICAgc3RydWN0IG10ZF9vb2JfcmVnaW9uICpvb2JyZWdpb24p Cj4+ICt7Cj4+ICsJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZF90b19uYW5kKG10ZCk7Cj4+ ICsJc3RydWN0IGNkbnNfbmFuZF9jaGlwICpjZG5zX2NoaXAgPSB0b19jZG5zX25hbmRfY2hpcChj aGlwKTsKPj4gKwo+PiArCWlmIChzZWN0aW9uKQo+PiArCQlyZXR1cm4gLUVSQU5HRTsKPj4gKwo+ PiArCW9vYnJlZ2lvbi0+b2Zmc2V0ID0gY2Ruc19jaGlwLT5iYm1fbGVuOwo+PiArCW9vYnJlZ2lv bi0+bGVuZ3RoID0gY2Ruc19jaGlwLT5hdmFpbF9vb2Jfc2l6ZQo+PiArCQktIGNkbnNfY2hpcC0+ YmJtX2xlbjsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGNh ZGVuY2VfbmFuZF9vb2JsYXlvdXRfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgc2VjdGlv biwKPj4gKwkJCQkgICAgICBzdHJ1Y3QgbXRkX29vYl9yZWdpb24gKm9vYnJlZ2lvbikKPj4gK3sK Pj4gKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkX3RvX25hbmQobXRkKTsKPj4gKwlzdHJ1 Y3QgY2Ruc19uYW5kX2NoaXAgKmNkbnNfY2hpcCA9IHRvX2NkbnNfbmFuZF9jaGlwKGNoaXApOwo+ PiArCj4+ICsJaWYgKHNlY3Rpb24pCj4+ICsJCXJldHVybiAtRVJBTkdFOwo+PiArCj4+ICsJb29i cmVnaW9uLT5vZmZzZXQgPSBjZG5zX2NoaXAtPmF2YWlsX29vYl9zaXplOwo+PiArCW9vYnJlZ2lv bi0+bGVuZ3RoID0gY2hpcC0+ZWNjLnRvdGFsOwo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRkX29vYmxheW91dF9vcHMgY2FkZW5jZV9uYW5k X29vYmxheW91dF9vcHMgPSB7Cj4+ICsJLmZyZWUgPSBjYWRlbmNlX25hbmRfb29ibGF5b3V0X2Zy ZWUsCj4+ICsJLmVjYyA9IGNhZGVuY2VfbmFuZF9vb2JsYXlvdXRfZWNjLAo+PiArfTsKPj4gKwo+ PiArc3RhdGljIGludCBjYWxjX2N5Y2wodTMyIHRpbWluZywgdTMyIGNsb2NrKQo+PiArewo+PiAr CWlmICh0aW1pbmcgPT0gMCB8fCBjbG9jayA9PSAwKQo+PiArCQlyZXR1cm4gMDsKPj4gKwo+PiAr CWlmICgodGltaW5nICUgY2xvY2spID4gMCkKPj4gKwkJcmV0dXJuIHRpbWluZyAvIGNsb2NrOwo+ PiArCWVsc2UKPj4gKwkJcmV0dXJuIHRpbWluZyAvIGNsb2NrIC0gMTsKPj4gK30KPj4gKwo+PiAr LyogQ2FsY3VsYXRlIG1heCBkYXRhIHZhbGlkIHdpbmRvdy4gKi8KPj4gK3N0YXRpYyBpbmxpbmUg dTMyIGNhbGNfdGR2d19tYXgodTMyIHRycF9jbnQsIHUzMiBjbGtfcGVyaW9kLCB1MzIgdHJob2hf bWluLAo+PiArCQkJCXUzMiBib2FyZF9kZWxheV9za2V3X21pbiwgdTMyIGV4dF9tb2RlKQo+PiAr ewo+PiArCWlmIChleHRfbW9kZSA9PSAwKQo+PiArCQljbGtfcGVyaW9kIC89IDI7Cj4+ICsKPj4g KwlyZXR1cm4gKHRycF9jbnQgKyAxKSAqIGNsa19wZXJpb2QgKyB0cmhvaF9taW4gKwo+PiArCQli b2FyZF9kZWxheV9za2V3X21pbjsKPj4gK30KPj4gKwo+PiArLyogQ2FsY3VsYXRlIGRhdGEgdmFs aWQgd2luZG93LiAqLwo+PiArc3RhdGljIGlubGluZSB1MzIgY2FsY190ZHZ3KHUzMiB0cnBfY250 LCB1MzIgY2xrX3BlcmlvZCwgdTMyIHRyaG9oX21pbiwKPj4gKwkJCSAgICB1MzIgdHJlYV9tYXgs IHUzMiBleHRfbW9kZSkKPj4gK3sKPj4gKwlpZiAoZXh0X21vZGUgPT0gMCkKPj4gKwkJY2xrX3Bl cmlvZCAvPSAyOwo+PiArCj4+ICsJcmV0dXJuICh0cnBfY250ICsgMSkgKiBjbGtfcGVyaW9kICsg dHJob2hfbWluIC0gdHJlYV9tYXg7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQKPj4gK2NhZGVu Y2VfbmFuZF9zZXR1cF9kYXRhX2ludGVyZmFjZShzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCBpbnQg Y2hpcG5yLAo+PiArCQkJCSAgY29uc3Qgc3RydWN0IG5hbmRfZGF0YV9pbnRlcmZhY2UgKmNvbmYp Cj4+ICt7Cj4+ICsJY29uc3Qgc3RydWN0IG5hbmRfc2RyX3RpbWluZ3MgKnNkcjsKPj4gKwlzdHJ1 Y3QgY2Ruc19uYW5kX2N0cmwgKmNkbnNfY3RybCA9IHRvX2NkbnNfbmFuZF9jdHJsKGNoaXAtPmNv bnRyb2xsZXIpOwo+PiArCXN0cnVjdCBjZG5zX25hbmRfY2hpcCAqY2Ruc19jaGlwID0gdG9fY2Ru c19uYW5kX2NoaXAoY2hpcCk7Cj4+ICsJc3RydWN0IGNhZGVuY2VfbmFuZF90aW1pbmdzICp0ID0g JmNkbnNfY2hpcC0+dGltaW5nczsKPj4gKwl1MzIgcmVnOwo+PiArCXUzMiBib2FyZF9kZWxheSA9 IGNkbnNfY3RybC0+Ym9hcmRfZGVsYXk7Cj4+ICsJdTMyIGNsa19wZXJpb2QgPSBESVZfUk9VTkRf RE9XTl9VTEwoMTAwMDAwMDAwMDAwMFVMTCwKPj4gKwkJCQkJICAgIGNkbnNfY3RybC0+bmZfY2xr X3JhdGUpOwo+PiArCXUzMiB0Y2VoX2NudCwgdGNzX2NudCwgdGFkbF9jbnQsIHRjY3NfY250Owo+ PiArCXUzMiB0ZmVhdF9jbnQsIHRyaHpfY250LCB0dmRseV9jbnQ7Cj4+ICsJdTMyIHRyaHdfY250 LCB0d2JfY250LCB0d2hfY250ID0gMCwgdHdocl9jbnQ7Cj4+ICsJdTMyIHR3cF9jbnQgPSAwLCB0 cnBfY250ID0gMCwgdHJoX2NudCA9IDA7Cj4+ICsJdTMyIGlmX3NrZXcgPSBjZG5zX2N0cmwtPmNh cHMxLT5pZl9za2V3Owo+PiArCXUzMiBib2FyZF9kZWxheV9za2V3X21pbiA9IGJvYXJkX2RlbGF5 IC0gaWZfc2tldzsKPj4gKwl1MzIgYm9hcmRfZGVsYXlfc2tld19tYXggPSBib2FyZF9kZWxheSAr IGlmX3NrZXc7Cj4+ICsJdTMyIGRxc19zYW1wbF9yZXMsIHBob255X2Rxc19tb2Q7Cj4+ICsJdTMy IHRkdncsIHRkdndfbWluLCB0ZHZ3X21heDsKPj4gKwl1MzIgZXh0X3JkX21vZGUsIGV4dF93cl9t b2RlOwo+PiArCXUzMiBkbGxfcGh5X2Rxc190aW1pbmcgPSAwLCBwaG9ueV9kcXNfdGltaW5nID0g MCwgcmRfZGVsX3NlbCA9IDA7Cj4+ICsJdTMyIHNhbXBsaW5nX3BvaW50Owo+PiArCj4+ICsJc2Ry ID0gbmFuZF9nZXRfc2RyX3RpbWluZ3MoY29uZik7Cj4+ICsJaWYgKElTX0VSUihzZHIpKQo+PiAr CQlyZXR1cm4gUFRSX0VSUihzZHIpOwo+PiArCj4+ICsJbWVtc2V0KHQsIDAsIHNpemVvZigqdCkp Owo+PiArCS8qIFNhbXBsaW5nIHBvaW50IGNhbGN1bGF0aW9uLiAqLwo+PiArCj4+ICsJaWYgKGNk bnNfY3RybC0+Y2FwczIuaXNfcGh5X3R5cGVfZGxsKQo+PiArCQlwaG9ueV9kcXNfbW9kID0gMjsK Pj4gKwllbHNlCj4+ICsJCXBob255X2Rxc19tb2QgPSAxOwo+PiArCj4+ICsJZHFzX3NhbXBsX3Jl cyA9IGNsa19wZXJpb2QgLyBwaG9ueV9kcXNfbW9kOwo+PiArCj4+ICsJdGR2d19taW4gPSBzZHIt PnRSRUFfbWF4ICsgYm9hcmRfZGVsYXlfc2tld19tYXg7Cj4+ICsJLyoKPj4gKwkgKiBUaGUgaWRl YSBvZiB0aG9zZSBjYWxjdWxhdGlvbiBpcyB0byBnZXQgdGhlIG9wdGltdW0gdmFsdWUKPj4gKwkg KiBmb3IgdFJQIGFuZCB0UkggdGltaW5ncy4gSWYgaXQgaXMgTk9UIHBvc3NpYmxlIHRvIHNhbXBs ZSBkYXRhCj4+ICsJICogd2l0aCBvcHRpbWFsIHRSUC90Ukggc2V0dGluZ3MsIHRoZSBwYXJhbWV0 ZXJzIHdpbGwgYmUgZXh0ZW5kZWQuCj4+ICsJICogSWYgY2xrX3BlcmlvZCBpcyA1MG5zICh0aGUg bG93ZXN0IHZhbHVlKSB0aGlzIGNvbmRpdGlvbiBpcyBtZXQKPj4gKwkgKiBmb3IgYXN5bmNocm9u b3VzIHRpbWluZyBtb2RlcyAxLCAyLCAzLCA0IGFuZCA1Lgo+PiArCSAqIElmIGNsa19wZXJpb2Qg aXMgMjBucyB0aGUgY29uZGl0aW9uIGlzIG1ldCBvbmx5Cj4+ICsJICogZm9yIGFzeW5jaHJvbm91 cyB0aW1pbmcgbW9kZSA1Lgo+PiArCSAqLwo+PiArCWlmIChzZHItPnRSQ19taW4gPD0gY2xrX3Bl cmlvZCAmJgo+PiArCSAgICBzZHItPnRSUF9taW4gPD0gKGNsa19wZXJpb2QgLyAyKSAmJgo+PiAr CSAgICBzZHItPnRSRUhfbWluIDw9IChjbGtfcGVyaW9kIC8gMikpIHsKPj4gKwkJLyogUGVyZm9y bWFuY2UgbW9kZS4gKi8KPj4gKwkJZXh0X3JkX21vZGUgPSAwOwo+PiArCQl0ZHZ3ID0gY2FsY190 ZHZ3KHRycF9jbnQsIGNsa19wZXJpb2QsIHNkci0+dFJIT0hfbWluLAo+PiArCQkJCSBzZHItPnRS RUFfbWF4LCBleHRfcmRfbW9kZSk7Cj4+ICsJCXRkdndfbWF4ID0gY2FsY190ZHZ3X21heCh0cnBf Y250LCBjbGtfcGVyaW9kLCBzZHItPnRSSE9IX21pbiwKPj4gKwkJCQkJIGJvYXJkX2RlbGF5X3Nr ZXdfbWluLAo+PiArCQkJCQkgZXh0X3JkX21vZGUpOwo+PiArCQkvKgo+PiArCQkgKiBDaGVjayBp ZiBkYXRhIHZhbGlkIHdpbmRvdyBhbmQgc2FtcGxpbmcgcG9pbnQgY2FuIGJlIGZvdW5kCj4+ICsJ CSAqIGFuZCBpcyBub3Qgb24gdGhlIGVkZ2UgKGllLiB3ZSBoYXZlIGhvbGQgbWFyZ2luKS4KPj4g KwkJICogSWYgbm90IGV4dGVuZCB0aGUgdFJQIHRpbWluZ3MuCj4+ICsJCSAqLwo+PiArCQlpZiAo dGR2dyA+IDApIHsKPj4gKwkJCWlmICh0ZHZ3X21heCA8PSB0ZHZ3X21pbiB8fAo+PiArCQkJICAg ICh0ZHZ3X21heCAlIGRxc19zYW1wbF9yZXMpID09IDApIHsKPj4gKwkJCQkvKgo+PiArCQkJCSAq IE5vIHZhbGlkIHNhbXBsaW5nIHBvaW50IHNvIHRoZSBSRSBwdWxzZSBuZWVkCj4+ICsJCQkJICog dG8gYmUgd2lkZW4gd2lkZW5pbmcgYnkgaGFsZiBjbG9jayBjeWNsZS4KPj4gKwkJCQkgKi8KPj4g KwkJCQlleHRfcmRfbW9kZSA9IDE7Cj4+ICsJCQl9Cj4+ICsJCX0gZWxzZSB7Cj4+ICsJCQkvKgo+ PiArCQkJICogVGhlcmUgaXMgbm8gdmFsaWQgd2luZG93Cj4+ICsJCQkgKiB0byBiZSBhYmxlIHRv IHNhbXBsZSBkYXRhIHRoZSB0UlAgbmVlZCB0byBiZSB3aWRlbi4KPj4gKwkJCSAqIFZlcnkgc2Fm ZSBjYWxjdWxhdGlvbnMgYXJlIHBlcmZvcm1lZCBoZXJlLgo+PiArCQkJICovCj4+ICsJCQl0cnBf Y250ID0gKHNkci0+dFJFQV9tYXggKyBib2FyZF9kZWxheV9za2V3X21heAo+PiArCQkJCSAgICsg ZHFzX3NhbXBsX3JlcykgLyBjbGtfcGVyaW9kOwo+PiArCQkJZXh0X3JkX21vZGUgPSAxOwo+PiAr CQl9Cj4+ICsKPj4gKwl9IGVsc2Ugewo+PiArCQkvKiBFeHRlbmRlZCByZWFkIG1vZGUuICovCj4+ ICsJCXUzMiB0cmg7Cj4+ICsKPj4gKwkJZXh0X3JkX21vZGUgPSAxOwo+PiArCQl0cnBfY250ID0g Y2FsY19jeWNsKHNkci0+dFJQX21pbiwgY2xrX3BlcmlvZCk7Cj4+ICsJCXRyaCA9IHNkci0+dFJD X21pbiAtICgodHJwX2NudCArIDEpICogY2xrX3BlcmlvZCk7Cj4+ICsJCWlmIChzZHItPnRSRUhf bWluID49IHRyaCkKPj4gKwkJCXRyaF9jbnQgPSBjYWxjX2N5Y2woc2RyLT50UkVIX21pbiwgY2xr X3BlcmlvZCk7Cj4+ICsJCWVsc2UKPj4gKwkJCXRyaF9jbnQgPSBjYWxjX2N5Y2wodHJoLCBjbGtf cGVyaW9kKTsKPj4gKwo+PiArCQl0ZHZ3ID0gY2FsY190ZHZ3KHRycF9jbnQsIGNsa19wZXJpb2Qs IHNkci0+dFJIT0hfbWluLAo+PiArCQkJCSBzZHItPnRSRUFfbWF4LCBleHRfcmRfbW9kZSk7Cj4+ ICsJCS8qCj4+ICsJCSAqIENoZWNrIGlmIGRhdGEgdmFsaWQgd2luZG93IGFuZCBzYW1wbGluZyBw b2ludCBjYW4gYmUgZm91bmQKPj4gKwkJICogb3IgaWYgaXQgaXMgYXQgdGhlIGVkZ2UgY2hlY2sg aWYgcHJldmlvdXMgaXMgdmFsaWQKPj4gKwkJICogLSBpZiBub3QgZXh0ZW5kIHRoZSB0UlAgdGlt aW5ncy4KPj4gKwkJICovCj4+ICsJCWlmICh0ZHZ3ID4gMCkgewo+PiArCQkJdGR2d19tYXggPSBj YWxjX3RkdndfbWF4KHRycF9jbnQsIGNsa19wZXJpb2QsCj4+ICsJCQkJCQkgc2RyLT50UkhPSF9t aW4sCj4+ICsJCQkJCQkgYm9hcmRfZGVsYXlfc2tld19taW4sCj4+ICsJCQkJCQkgZXh0X3JkX21v ZGUpOwo+PiArCj4+ICsJCQlpZiAoKCgodGR2d19tYXggLyBkcXNfc2FtcGxfcmVzKQo+PiArCQkJ ICAgICAgKiBkcXNfc2FtcGxfcmVzKSA8PSB0ZHZ3X21pbikgfHwKPj4gKwkJCSAgICAoKCh0ZHZ3 X21heCAlIGRxc19zYW1wbF9yZXMpID09IDApICYmCj4+ICsJCQkgICAgICgoKHRkdndfbWF4IC8g ZHFzX3NhbXBsX3JlcyAtIDEpCj4+ICsJCQkgICAgICAgKiBkcXNfc2FtcGxfcmVzKSA8PSB0ZHZ3 X21pbikpKSB7Cj4+ICsJCQkJLyoKPj4gKwkJCQkgKiBEYXRhIHZhbGlkIHdpbmRvdyB3aWR0aCBp cyBsb3dlciB0aGFuCj4+ICsJCQkJICogc2FtcGxpbmcgcmVzb2x1dGlvbiBhbmQgZG8gbm90IGhp dCBhbnkKPj4gKwkJCQkgKiBzYW1wbGluZyBwb2ludCB0byBiZSBzdXJlIHRoZSBzYW1wbGluZyBw b2ludAo+PiArCQkJCSAqIHdpbGwgYmUgZm91bmQgdGhlIFJFIGxvdyBwdWxzZSB3aWR0aCB3aWxs IGJlCj4+ICsJCQkJICogIGV4dGVuZGVkIGJ5IG9uZSBjbG9jayBjeWNsZS4KPj4gKwkJCQkgKi8K Pj4gKwkJCQl0cnBfY250ID0gdHJwX2NudCArIDE7Cj4+ICsJCQl9Cj4+ICsJCX0gZWxzZSB7Cj4+ ICsJCQkvKgo+PiArCQkJICogVGhlcmUgaXMgbm8gdmFsaWQgd2luZG93IHRvIGJlIGFibGUgdG8g c2FtcGxlIGRhdGEuCj4+ICsJCQkgKiBUaGUgdFJQIG5lZWQgdG8gYmUgd2lkZW4uCj4+ICsJCQkg KiBWZXJ5IHNhZmUgY2FsY3VsYXRpb25zIGFyZSBwZXJmb3JtZWQgaGVyZS4KPj4gKwkJCSAqLwo+ PiArCQkJdHJwX2NudCA9IChzZHItPnRSRUFfbWF4ICsgYm9hcmRfZGVsYXlfc2tld19tYXgKPj4g KwkJCQkgICArIGRxc19zYW1wbF9yZXMpIC8gY2xrX3BlcmlvZDsKPj4gKwkJfQo+PiArCX0KPj4g Kwo+PiArCXRkdndfbWF4ID0gY2FsY190ZHZ3X21heCh0cnBfY250LCBjbGtfcGVyaW9kLAo+PiAr CQkJCSBzZHItPnRSSE9IX21pbiwKPj4gKwkJCQkgYm9hcmRfZGVsYXlfc2tld19taW4sIGV4dF9y ZF9tb2RlKTsKPj4gKwo+PiArCWlmIChzZHItPnRXQ19taW4gPD0gY2xrX3BlcmlvZCAmJgo+PiAr CSAgICAoc2RyLT50V1BfbWluICsgaWZfc2tldykgPD0gKGNsa19wZXJpb2QgLyAyKSAmJgo+PiAr CSAgICAoc2RyLT50V0hfbWluICsgaWZfc2tldykgPD0gKGNsa19wZXJpb2QgLyAyKSkgewo+PiAr CQlleHRfd3JfbW9kZSA9IDA7Cj4+ICsJfSBlbHNlIHsKPj4gKwkJdTMyIHR3aDsKPj4gKwo+PiAr CQlleHRfd3JfbW9kZSA9IDE7Cj4+ICsJCXR3cF9jbnQgPSBjYWxjX2N5Y2woc2RyLT50V1BfbWlu ICsgaWZfc2tldywgY2xrX3BlcmlvZCk7Cj4+ICsJCWlmICgodHdwX2NudCArIDEpICogY2xrX3Bl cmlvZCA8IChzZHItPnRBTFNfbWluICsgaWZfc2tldykpCj4+ICsJCQl0d3BfY250ID0gY2FsY19j eWNsKHNkci0+dEFMU19taW4gKyBpZl9za2V3LAo+PiArCQkJCQkgICAgY2xrX3BlcmlvZCk7Cj4+ ICsKPj4gKwkJdHdoID0gKHNkci0+dFdDX21pbiAtICh0d3BfY250ICsgMSkgKiBjbGtfcGVyaW9k KTsKPj4gKwkJaWYgKHNkci0+dFdIX21pbiA+PSB0d2gpCj4+ICsJCQl0d2ggPSBzZHItPnRXSF9t aW47Cj4+ICsKPj4gKwkJdHdoX2NudCA9IGNhbGNfY3ljbCh0d2ggKyBpZl9za2V3LCBjbGtfcGVy aW9kKTsKPj4gKwl9Cj4+ICsKPj4gKwlyZWcgPSBGSUVMRF9QUkVQKEFTWU5DX1RPR0dMRV9USU1J TkdTX1RSSCwgdHJoX2NudCk7Cj4+ICsJcmVnIHw9IEZJRUxEX1BSRVAoQVNZTkNfVE9HR0xFX1RJ TUlOR1NfVFJQLCB0cnBfY250KTsKPj4gKwlyZWcgfD0gRklFTERfUFJFUChBU1lOQ19UT0dHTEVf VElNSU5HU19UV0gsIHR3aF9jbnQpOwo+PiArCXJlZyB8PSBGSUVMRF9QUkVQKEFTWU5DX1RPR0dM RV9USU1JTkdTX1RXUCwgdHdwX2NudCk7Cj4+ICsJdC0+YXN5bmNfdG9nZ2xlX3RpbWluZ3MgPSBy ZWc7Cj4+ICsJZGV2X2RiZyhjZG5zX2N0cmwtPmRldiwgIkFTWU5DX1RPR0dMRV9USU1JTkdTX1NE Ulx0JXhcbiIsIHJlZyk7Cj4+ICsKPj4gKwl0YWRsX2NudCA9IGNhbGNfY3ljbCgoc2RyLT50QURM X21pbiArIGlmX3NrZXcpLCBjbGtfcGVyaW9kKTsKPj4gKwl0Y2NzX2NudCA9IGNhbGNfY3ljbCgo c2RyLT50Q0NTX21pbiArIGlmX3NrZXcpLCBjbGtfcGVyaW9kKTsKPj4gKwl0d2hyX2NudCA9IGNh bGNfY3ljbCgoc2RyLT50V0hSX21pbiArIGlmX3NrZXcpLCBjbGtfcGVyaW9kKTsKPj4gKwl0cmh3 X2NudCA9IGNhbGNfY3ljbCgoc2RyLT50UkhXX21pbiArIGlmX3NrZXcpLCBjbGtfcGVyaW9kKTsK Pj4gKwlyZWcgPSBGSUVMRF9QUkVQKFRJTUlOR1MwX1RBREwsIHRhZGxfY250KTsKPj4gKwo+PiAr CS8qCj4+ICsJICogSWYgdGltaW5nIGV4Y2VlZHMgZGVsYXkgZmllbGQgaW4gdGltaW5nIHJlZ2lz dGVyCj4+ICsJICogdGhlbiB1c2UgbWF4aW11bSB2YWx1ZS4KPj4gKwkgKi8KPj4gKwlpZiAoRklF TERfRklUKFRJTUlOR1MwX1RDQ1MsIHRjY3NfY250KSkKPj4gKwkJcmVnIHw9IEZJRUxEX1BSRVAo VElNSU5HUzBfVENDUywgdGNjc19jbnQpOwo+PiArCWVsc2UKPj4gKwkJcmVnIHw9IFRJTUlOR1Mw X1RDQ1M7Cj4+ICsKPj4gKwlyZWcgfD0gRklFTERfUFJFUChUSU1JTkdTMF9UV0hSLCB0d2hyX2Nu dCk7Cj4+ICsJcmVnIHw9IEZJRUxEX1BSRVAoVElNSU5HUzBfVFJIVywgdHJod19jbnQpOwo+PiAr CXQtPnRpbWluZ3MwID0gcmVnOwo+PiArCWRldl9kYmcoY2Ruc19jdHJsLT5kZXYsICJUSU1JTkdT MF9TRFJcdCV4XG4iLCByZWcpOwo+PiArCj4+ICsJLyogVGhlIGZvbGxvd2luZyBpcyByZWxhdGVk IHRvIHNpbmdsZSBzaWduYWwgc28gc2tldyBpcyBub3QgbmVlZGVkLiAqLwo+PiArCXRyaHpfY250 ID0gY2FsY19jeWNsKHNkci0+dFJIWl9tYXgsIGNsa19wZXJpb2QpOwo+PiArCXRyaHpfY250ID0g dHJoel9jbnQgKyAxOwo+PiArCXR3Yl9jbnQgPSBjYWxjX2N5Y2woKHNkci0+dFdCX21heCArIGJv YXJkX2RlbGF5KSwgY2xrX3BlcmlvZCk7Cj4+ICsJLyoKPj4gKwkgKiBCZWNhdXNlIG9mIHRoZSB0 d28gc3RhZ2Ugc3luY2Zsb3AgdGhlIHZhbHVlIG11c3QgYmUgaW5jcmVhc2VkIGJ5IDMKPj4gKwkg KiBmaXJzdCB2YWx1ZSBpcyByZWxhdGVkIHdpdGggc3luYywgc2Vjb25kIHZhbHVlIGlzIHJlbGF0 ZWQKPj4gKwkgKiB3aXRoIG91dHB1dCBpZiBkZWxheS4KPj4gKwkgKi8KPj4gKwl0d2JfY250ID0g dHdiX2NudCArIDMgKyA1Owo+PiArCS8qCj4+ICsJICogVGhlIGZvbGxvd2luZyBpcyByZWxhdGVk IHRvIHRoZSB3ZSBlZGdlIG9mIHRoZSByYW5kb20gZGF0YSBpbnB1dAo+PiArCSAqIHNlcXVlbmNl IHNvIHNrZXcgaXMgbm90IG5lZWRlZC4KPj4gKwkgKi8KPj4gKwl0dmRseV9jbnQgPSBjYWxjX2N5 Y2woNTAwMDAwICsgaWZfc2tldywgY2xrX3BlcmlvZCk7Cj4+ICsJcmVnID0gRklFTERfUFJFUChU SU1JTkdTMV9UUkhaLCB0cmh6X2NudCk7Cj4+ICsJcmVnIHw9IEZJRUxEX1BSRVAoVElNSU5HUzFf VFdCLCB0d2JfY250KTsKPj4gKwlyZWcgfD0gRklFTERfUFJFUChUSU1JTkdTMV9UVkRMWSwgdHZk bHlfY250KTsKPj4gKwl0LT50aW1pbmdzMSA9IHJlZzsKPj4gKwlkZXZfZGJnKGNkbnNfY3RybC0+ ZGV2LCAiVElNSU5HUzFfU0RSXHQleFxuIiwgcmVnKTsKPj4gKwo+PiArCXRmZWF0X2NudCA9IGNh bGNfY3ljbChzZHItPnRGRUFUX21heCwgY2xrX3BlcmlvZCk7Cj4+ICsJaWYgKHRmZWF0X2NudCA8 IHR3Yl9jbnQpCj4+ICsJCXRmZWF0X2NudCA9IHR3Yl9jbnQ7Cj4+ICsKPj4gKwl0Y2VoX2NudCA9 IGNhbGNfY3ljbChzZHItPnRDRUhfbWluLCBjbGtfcGVyaW9kKTsKPj4gKwl0Y3NfY250ID0gY2Fs Y19jeWNsKChzZHItPnRDU19taW4gKyBpZl9za2V3KSwgY2xrX3BlcmlvZCk7Cj4+ICsKPj4gKwly ZWcgPSBGSUVMRF9QUkVQKFRJTUlOR1MyX1RGRUFULCB0ZmVhdF9jbnQpOwo+PiArCXJlZyB8PSBG SUVMRF9QUkVQKFRJTUlOR1MyX0NTX0hPTERfVElNRSwgdGNlaF9jbnQpOwo+PiArCXJlZyB8PSBG SUVMRF9QUkVQKFRJTUlOR1MyX0NTX1NFVFVQX1RJTUUsIHRjc19jbnQpOwo+PiArCXQtPnRpbWlu Z3MyID0gcmVnOwo+PiArCWRldl9kYmcoY2Ruc19jdHJsLT5kZXYsICJUSU1JTkdTMl9TRFJcdCV4 XG4iLCByZWcpOwo+PiArCj4+ICsJaWYgKGNkbnNfY3RybC0+Y2FwczIuaXNfcGh5X3R5cGVfZGxs KSB7Cj4+ICsJCXJlZyA9IERMTF9QSFlfQ1RSTF9ETExfUlNUX047Cj4+ICsJCWlmIChleHRfd3Jf bW9kZSkKPj4gKwkJCXJlZyB8PSBETExfUEhZX0NUUkxfRVhURU5ERURfV1JfTU9ERTsKPj4gKwkJ aWYgKGV4dF9yZF9tb2RlKQo+PiArCQkJcmVnIHw9IERMTF9QSFlfQ1RSTF9FWFRFTkRFRF9SRF9N T0RFOwo+PiArCj4+ICsJCXJlZyB8PSBGSUVMRF9QUkVQKERMTF9QSFlfQ1RSTF9SU19ISUdIX1dB SVRfQ05ULCA3KTsKPj4gKwkJcmVnIHw9IEZJRUxEX1BSRVAoRExMX1BIWV9DVFJMX1JTX0lETEVf Q05ULCA3KTsKPj4gKwkJdC0+ZGxsX3BoeV9jdHJsID0gcmVnOwo+PiArCQlkZXZfZGJnKGNkbnNf Y3RybC0+ZGV2LCAiRExMX1BIWV9DVFJMX1NEUlx0JXhcbiIsIHJlZyk7Cj4+ICsJfQo+PiArCj4+ ICsJLyogU2FtcGxpbmcgcG9pbnQgY2FsY3VsYXRpb24uICovCj4+ICsJaWYgKCh0ZHZ3X21heCAl IGRxc19zYW1wbF9yZXMpID4gMCkKPj4gKwkJc2FtcGxpbmdfcG9pbnQgPSB0ZHZ3X21heCAvIGRx c19zYW1wbF9yZXM7Cj4+ICsJZWxzZQo+PiArCQlzYW1wbGluZ19wb2ludCA9ICh0ZHZ3X21heCAv IGRxc19zYW1wbF9yZXMgLSAxKTsKPj4gKwo+PiArCWlmIChzYW1wbGluZ19wb2ludCAqIGRxc19z YW1wbF9yZXMgPiB0ZHZ3X21pbikgewo+PiArCQlkbGxfcGh5X2Rxc190aW1pbmcgPQo+PiArCQkJ RklFTERfUFJFUChQSFlfRFFTX1RJTUlOR19EUVNfU0VMX09FX0VORCwgNCk7Cj4+ICsJCWRsbF9w aHlfZHFzX3RpbWluZyB8PSBQSFlfRFFTX1RJTUlOR19VU0VfUEhPTllfRFFTOwo+PiArCQlwaG9u eV9kcXNfdGltaW5nID0gc2FtcGxpbmdfcG9pbnQgLyBwaG9ueV9kcXNfbW9kOwo+PiArCj4+ICsJ CWlmICgoc2FtcGxpbmdfcG9pbnQgJSAyKSA+IDApIHsKPj4gKwkJCWRsbF9waHlfZHFzX3RpbWlu ZyB8PSBQSFlfRFFTX1RJTUlOR19QSE9OWV9EUVNfU0VMOwo+PiArCQkJaWYgKCh0ZHZ3X21heCAl IGRxc19zYW1wbF9yZXMpID09IDApCj4+ICsJCQkJLyoKPj4gKwkJCQkgKiBDYWxjdWxhdGlvbiBm b3Igc2FtcGxpbmcgcG9pbnQgYXQgdGhlIGVkZ2UKPj4gKwkJCQkgKiBvZiBkYXRhIGFuZCBiZWlu ZyBvZGQgbnVtYmVyLgo+PiArCQkJCSAqLwo+PiArCQkJCXBob255X2Rxc190aW1pbmcgPSAodGR2 d19tYXggLyBkcXNfc2FtcGxfcmVzKQo+PiArCQkJCQkvIHBob255X2Rxc19tb2QgLSAxOwo+PiAr Cj4+ICsJCQlpZiAoIWNkbnNfY3RybC0+Y2FwczIuaXNfcGh5X3R5cGVfZGxsKQo+PiArCQkJCXBo b255X2Rxc190aW1pbmctLTsKPj4gKwo+PiArCQl9IGVsc2Ugewo+PiArCQkJcGhvbnlfZHFzX3Rp bWluZy0tOwo+PiArCQl9Cj4+ICsJCXJkX2RlbF9zZWwgPSBwaG9ueV9kcXNfdGltaW5nICsgMzsK Pj4gKwl9IGVsc2Ugewo+PiArCQlkZXZfd2FybihjZG5zX2N0cmwtPmRldiwKPj4gKwkJCSAiRVJS T1IgOiBjYW5ub3QgZmluZCB2YWxpZCBzYW1wbGluZyBwb2ludFxuIik7Cj4+ICsJfQo+PiArCj4+ ICsJcmVnID0gRklFTERfUFJFUChQSFlfQ1RSTF9QSE9OWV9EUVMsIHBob255X2Rxc190aW1pbmcp Owo+PiArCWlmIChjZG5zX2N0cmwtPmNhcHMyLmlzX3BoeV90eXBlX2RsbCkKPj4gKwkJcmVnICB8 PSBQSFlfQ1RSTF9TRFJfRFFTOwo+PiArCXQtPnBoeV9jdHJsID0gcmVnOwo+PiArCWRldl9kYmco Y2Ruc19jdHJsLT5kZXYsICJQSFlfQ1RSTF9SRUdfU0RSXHQleFxuIiwgcmVnKTsKPj4gKwo+PiAr CWlmIChjZG5zX2N0cmwtPmNhcHMyLmlzX3BoeV90eXBlX2RsbCkgewo+PiArCQlkZXZfZGJnKGNk bnNfY3RybC0+ZGV2LCAiUEhZX1RTRUxfUkVHX1NEUlx0JXhcbiIsIDApOwo+PiArCQlkZXZfZGJn KGNkbnNfY3RybC0+ZGV2LCAiUEhZX0RRX1RJTUlOR19SRUdfU0RSXHQleFxuIiwgMik7Cj4+ICsJ CWRldl9kYmcoY2Ruc19jdHJsLT5kZXYsICJQSFlfRFFTX1RJTUlOR19SRUdfU0RSXHQleFxuIiwK Pj4gKwkJCWRsbF9waHlfZHFzX3RpbWluZyk7Cj4+ICsJCXQtPnBoeV9kcXNfdGltaW5nID0gZGxs X3BoeV9kcXNfdGltaW5nOwo+PiArCj4+ICsJCXJlZyA9IEZJRUxEX1BSRVAoUEhZX0dBVEVfTFBC S19DVFJMX1JEUywgcmRfZGVsX3NlbCk7Cj4+ICsJCWRldl9kYmcoY2Ruc19jdHJsLT5kZXYsICJQ SFlfR0FURV9MUEJLX0NUUkxfUkVHX1NEUlx0JXhcbiIsCj4+ICsJCQlyZWcpOwo+PiArCQl0LT5w aHlfZ2F0ZV9scGJrX2N0cmwgPSByZWc7Cj4+ICsKPj4gKwkJZGV2X2RiZyhjZG5zX2N0cmwtPmRl diwgIlBIWV9ETExfTUFTVEVSX0NUUkxfUkVHX1NEUlx0JWx4XG4iLAo+PiArCQkJUEhZX0RMTF9N QVNURVJfQ1RSTF9CWVBBU1NfTU9ERSk7Cj4+ICsJCWRldl9kYmcoY2Ruc19jdHJsLT5kZXYsICJQ SFlfRExMX1NMQVZFX0NUUkxfUkVHX1NEUlx0JXhcbiIsIDApOwo+PiArCX0KPj4gKwo+PiArCXJl dHVybiAwOwo+PiArfQo+PiArCj4+ICtpbnQgY2FkZW5jZV9uYW5kX2F0dGFjaF9jaGlwKHN0cnVj dCBuYW5kX2NoaXAgKmNoaXApCj4+ICt7Cj4+ICsJc3RydWN0IGNkbnNfbmFuZF9jdHJsICpjZG5z X2N0cmwgPSB0b19jZG5zX25hbmRfY3RybChjaGlwLT5jb250cm9sbGVyKTsKPj4gKwlzdHJ1Y3Qg Y2Ruc19uYW5kX2NoaXAgKmNkbnNfY2hpcCA9IHRvX2NkbnNfbmFuZF9jaGlwKGNoaXApOwo+PiAr CXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQoY2hpcCk7Cj4+ICsJdTMyIG1heF9v b2JfZGF0YV9zaXplOwo+PiArCWludCByZXQ7Cj4+ICsKPj4gKwlpZiAoY2hpcC0+b3B0aW9ucyAm IE5BTkRfQlVTV0lEVEhfMTYpIHsKPj4gKwkJcmV0ID0gY2FkZW5jZV9uYW5kX3NldF9hY2Nlc3Nf d2lkdGgxNihjZG5zX2N0cmwsIHRydWUpOwo+PiArCQlpZiAocmV0KQo+PiArCQkJZ290byBmcmVl X2J1ZjsKPj4gKwl9Cj4+ICsKPj4gKwljaGlwLT5iYnRfb3B0aW9ucyB8PSBOQU5EX0JCVF9VU0Vf RkxBU0g7Cj4+ICsJY2hpcC0+YmJ0X29wdGlvbnMgfD0gTkFORF9CQlRfTk9fT09COwo+PiArCWNo aXAtPmVjYy5tb2RlID0gTkFORF9FQ0NfSFc7Cj4+ICsKPj4gKwljaGlwLT5vcHRpb25zIHw9IE5B TkRfTk9fU1VCUEFHRV9XUklURTsKPj4gKwo+PiArCWNkbnNfY2hpcC0+YmJtX29mZnMgPSBjaGlw LT5iYWRibG9ja3BvczsKPj4gKwlpZiAoY2hpcC0+b3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTYp IHsKPj4gKwkJY2Ruc19jaGlwLT5iYm1fb2ZmcyAmPSB+MHgwMTsKPj4gKwkJY2Ruc19jaGlwLT5i Ym1fbGVuID0gMjsKPj4gKwl9IGVsc2Ugewo+PiArCQljZG5zX2NoaXAtPmJibV9sZW4gPSAxOwo+ PiArCX0KPj4gKwo+PiArCXJldCA9IG5hbmRfZWNjX2Nob29zZV9jb25mKGNoaXAsCj4+ICsJCQkJ ICAgJmNkbnNfY3RybC0+ZWNjX2NhcHMsCj4+ICsJCQkJICAgbXRkLT5vb2JzaXplIC0gY2Ruc19j aGlwLT5iYm1fbGVuKTsKPj4gKwlpZiAocmV0KSB7Cj4+ICsJCWRldl9lcnIoY2Ruc19jdHJsLT5k ZXYsICJFQ0MgY29uZmlndXJhdGlvbiBmYWlsZWRcbiIpOwo+PiArCQlnb3RvIGZyZWVfYnVmOwo+ PiArCX0KPj4gKwo+PiArCWRldl9kYmcoY2Ruc19jdHJsLT5kZXYsCj4+ICsJCSJjaG9zZW4gRUND IHNldHRpbmdzOiBzdGVwPSVkLCBzdHJlbmd0aD0lZCwgYnl0ZXM9JWRcbiIsCj4+ICsJCWNoaXAt PmVjYy5zaXplLCBjaGlwLT5lY2Muc3RyZW5ndGgsIGNoaXAtPmVjYy5ieXRlcyk7Cj4+ICsKPj4g KwkvKiBFcnJvciBjb3JyZWN0aW9uIGNvbmZpZ3VyYXRpb24uICovCj4+ICsJY2Ruc19jaGlwLT5z ZWN0b3Jfc2l6ZSA9IGNoaXAtPmVjYy5zaXplOwo+PiArCWNkbnNfY2hpcC0+c2VjdG9yX2NvdW50 ID0gbXRkLT53cml0ZXNpemUgLyBjZG5zX2NoaXAtPnNlY3Rvcl9zaXplOwo+PiArCj4+ICsJY2Ru c19jaGlwLT5hdmFpbF9vb2Jfc2l6ZSA9IG10ZC0+b29ic2l6ZQo+PiArCQktIGNkbnNfY2hpcC0+ c2VjdG9yX2NvdW50ICogY2hpcC0+ZWNjLmJ5dGVzOwo+PiArCj4+ICsJbWF4X29vYl9kYXRhX3Np emUgPSBNQVhfT09CX1NJWkVfUEVSX1NFQ1RPUjsKPj4gKwo+PiArCWlmIChjZG5zX2NoaXAtPmF2 YWlsX29vYl9zaXplID4gbWF4X29vYl9kYXRhX3NpemUpCj4+ICsJCWNkbnNfY2hpcC0+YXZhaWxf b29iX3NpemUgPSBtYXhfb29iX2RhdGFfc2l6ZTsKPj4gKwo+PiArCWlmICgoY2Ruc19jaGlwLT5h dmFpbF9vb2Jfc2l6ZSArIGNkbnNfY2hpcC0+YmJtX2xlbgo+PiArCSAgICAgKyBjZG5zX2NoaXAt PnNlY3Rvcl9jb3VudAo+PiArCSAgICAgKiBjaGlwLT5lY2MuYnl0ZXMpID4gbXRkLT5vb2JzaXpl KQo+Cj5JZiB0aGUgbGluZSBpcyBub3QgcmVhZGFibGUgZW5vdWdoIHlvdSBjYW4gdXNlIGludGVy bWVkaWF0ZSB2YXJpYWJsZXMuCj5BbHNvIHRoZSBwcmlvcml0eSBvZiB0aGUgJyonIG9wZXJhdG9y IGNvdWxkIGJlIGVuZm9yY2VkIHdpdGgKPnBhcmVudGhlc2lzLiBSZWFsbHkgdGhpcyBpcyBqdXN0 IGEgbml0IHBpY2sgOikKPgpPayBJIHdpbGwgY2hhbmdlIGl0LgogIAo+PiArCQljZG5zX2NoaXAt PmF2YWlsX29vYl9zaXplIC09IDQ7Cj4+ICsKPj4gKwljZG5zX2NoaXAtPmNvcnJfc3RyX2lkeCA9 Cj4+ICsJCWNhZGVuY2VfbmFuZF9nZXRfZWNjX3N0cmVuZ3RoX2lkeChjZG5zX2N0cmwsCj4+ICsJ CQkJCQkgIGNoaXAtPmVjYy5zdHJlbmd0aCk7Cj4+ICsJaWYgKGNkbnNfY2hpcC0+Y29ycl9zdHJf aWR4IDwgMCkKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gKwlpZiAoY2FkZW5jZV9uYW5k X3dhaXRfZm9yX3ZhbHVlKGNkbnNfY3RybCwgQ1RSTF9TVEFUVVMsCj4+ICsJCQkJCTEwMDAwMDAs Cj4+ICsJCQkJCUNUUkxfU1RBVFVTX0NUUkxfQlVTWSwgdHJ1ZSkpCj4+ICsJCXJldHVybiAtRVRJ TUVET1VUOwo+PiArCj4+ICsJY2FkZW5jZV9uYW5kX3NldF9lY2Nfc3RyZW5ndGgoY2Ruc19jdHJs LAo+PiArCQkJCSAgICAgIGNkbnNfY2hpcC0+Y29ycl9zdHJfaWR4KTsKPj4gKwo+PiArCWNhZGVu Y2VfbmFuZF9zZXRfZXJhc2VfZGV0ZWN0aW9uKGNkbnNfY3RybCwgdHJ1ZSwKPj4gKwkJCQkJIGNo aXAtPmVjYy5zdHJlbmd0aCk7Cj4+ICsKPj4gKwkvKiBPdmVycmlkZSB0aGUgZGVmYXVsdCByZWFk IG9wZXJhdGlvbnMuICovCj4+ICsJY2hpcC0+ZWNjLnJlYWRfcGFnZSA9IGNhZGVuY2VfbmFuZF9y ZWFkX3BhZ2U7Cj4+ICsJY2hpcC0+ZWNjLnJlYWRfcGFnZV9yYXcgPSBjYWRlbmNlX25hbmRfcmVh ZF9wYWdlX3JhdzsKPj4gKwljaGlwLT5lY2Mud3JpdGVfcGFnZSA9IGNhZGVuY2VfbmFuZF93cml0 ZV9wYWdlOwo+PiArCWNoaXAtPmVjYy53cml0ZV9wYWdlX3JhdyA9IGNhZGVuY2VfbmFuZF93cml0 ZV9wYWdlX3JhdzsKPj4gKwljaGlwLT5lY2MucmVhZF9vb2IgPSBjYWRlbmNlX25hbmRfcmVhZF9v b2I7Cj4+ICsJY2hpcC0+ZWNjLndyaXRlX29vYiA9IGNhZGVuY2VfbmFuZF93cml0ZV9vb2I7Cj4+ ICsJY2hpcC0+ZWNjLnJlYWRfb29iX3JhdyA9IGNhZGVuY2VfbmFuZF9yZWFkX29vYl9yYXc7Cj4+ ICsJY2hpcC0+ZWNjLndyaXRlX29vYl9yYXcgPSBjYWRlbmNlX25hbmRfd3JpdGVfb29iX3JhdzsK Pj4gKwo+PiArCWlmICgobXRkLT53cml0ZXNpemUgKyBtdGQtPm9vYnNpemUpID4gY2Ruc19jdHJs LT5idWZfc2l6ZSkgewo+PiArCQljZG5zX2N0cmwtPmJ1Zl9zaXplID0gbXRkLT53cml0ZXNpemUg KyBtdGQtPm9vYnNpemU7Cj4+ICsJCWtmcmVlKGNkbnNfY3RybC0+YnVmKTsKPj4gKwkJY2Ruc19j dHJsLT5idWYgPSBremFsbG9jKGNkbnNfY3RybC0+YnVmX3NpemUsIEdGUF9LRVJORUwpOwo+PiAr CQlpZiAoIWNkbnNfY3RybC0+YnVmKSB7Cj4+ICsJCQlyZXQgPSAtRU5PTUVNOwo+PiArCQkJZ290 byBmcmVlX2J1ZjsKPj4gKwkJfQo+PiArCX0KPj4gKwo+PiArCS8qIElzIDMyLWJpdCBETUEgc3Vw cG9ydGVkPyAqLwo+PiArCXJldCA9IGRtYV9zZXRfbWFzayhjZG5zX2N0cmwtPmRldiwgRE1BX0JJ VF9NQVNLKDMyKSk7Cj4+ICsJaWYgKHJldCkgewo+PiArCQlkZXZfZXJyKGNkbnNfY3RybC0+ZGV2 LCAibm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uXG4iKTsKPj4gKwkJZ290byBmcmVlX2J1ZjsK Pj4gKwl9Cj4+ICsKPj4gKwltdGRfc2V0X29vYmxheW91dChtdGQsICZjYWRlbmNlX25hbmRfb29i bGF5b3V0X29wcyk7Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gKwo+PiArZnJlZV9idWY6Cj4+ICsJ a2ZyZWUoY2Ruc19jdHJsLT5idWYpOwo+PiArCj4+ICsJcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+ PiArc3RhdGljIGNvbnN0IHN0cnVjdCBuYW5kX2NvbnRyb2xsZXJfb3BzIGNhZGVuY2VfbmFuZF9j b250cm9sbGVyX29wcyA9IHsKPj4gKwkuYXR0YWNoX2NoaXAgPSBjYWRlbmNlX25hbmRfYXR0YWNo X2NoaXAsCj4+ICsJLmV4ZWNfb3AgPSBjYWRlbmNlX25hbmRfZXhlY19vcCwKPj4gKwkuc2V0dXBf ZGF0YV9pbnRlcmZhY2UgPSBjYWRlbmNlX25hbmRfc2V0dXBfZGF0YV9pbnRlcmZhY2UsCj4+ICt9 Owo+PiArCj4+ICtzdGF0aWMgaW50IGNhZGVuY2VfbmFuZF9jaGlwX2luaXQoc3RydWN0IGNkbnNf bmFuZF9jdHJsICpjZG5zX2N0cmwsCj4+ICsJCQkJICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQo+ PiArewo+PiArCXN0cnVjdCBjZG5zX25hbmRfY2hpcCAqY2Ruc19jaGlwOwo+PiArCXN0cnVjdCBt dGRfaW5mbyAqbXRkOwo+PiArCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXA7Cj4+ICsJaW50IG5zZWxz LCByZXQsIGk7Cj4+ICsJdTMyIGNzOwo+PiArCj4+ICsJbnNlbHMgPSBvZl9wcm9wZXJ0eV9jb3Vu dF9lbGVtc19vZl9zaXplKG5wLCAicmVnIiwgc2l6ZW9mKHUzMikpOwo+PiArCWlmIChuc2VscyA8 PSAwKSB7Cj4+ICsJCWRldl9lcnIoY2Ruc19jdHJsLT5kZXYsICJtaXNzaW5nL2ludmFsaWQgcmVn IHByb3BlcnR5XG4iKTsKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJfQo+PiArCj4+ICsJLyog QWxsb2NhdGUgdGhlIG5hbmQgY2hpcCBzdHJ1Y3R1cmUuICovCj4+ICsJY2Ruc19jaGlwID0gZGV2 bV9remFsbG9jKGNkbnNfY3RybC0+ZGV2LCBzaXplb2YoKmNkbnNfY2hpcCkgKwo+PiArCQkJCSAo bnNlbHMgKiBzaXplb2YodTgpKSwKPj4gKwkJCQkgR0ZQX0tFUk5FTCk7Cj4+ICsJaWYgKCFjZG5z X2NoaXApIHsKPj4gKwkJZGV2X2VycihjZG5zX2N0cmwtPmRldiwgImNvdWxkIG5vdCBhbGxvY2F0 ZSBjaGlwIHN0cnVjdHVyZVxuIik7Cj4+ICsJCXJldHVybiAtRU5PTUVNOwo+PiArCX0KPj4gKwo+ PiArCWNkbnNfY2hpcC0+bnNlbHMgPSBuc2VsczsKPj4gKwo+PiArCWZvciAoaSA9IDA7IGkgPCBu c2VsczsgaSsrKSB7Cj4+ICsJCS8qIFJldHJpZXZlIENTIGlkLiAqLwo+PiArCQlyZXQgPSBvZl9w cm9wZXJ0eV9yZWFkX3UzMl9pbmRleChucCwgInJlZyIsIGksICZjcyk7Cj4+ICsJCWlmIChyZXQp IHsKPj4gKwkJCWRldl9lcnIoY2Ruc19jdHJsLT5kZXYsCj4+ICsJCQkJImNvdWxkIG5vdCByZXRy aWV2ZSByZWcgcHJvcGVydHk6ICVkXG4iLAo+PiArCQkJCXJldCk7Cj4+ICsJCQlyZXR1cm4gcmV0 Owo+PiArCQl9Cj4+ICsKPj4gKwkJaWYgKGNzID49IGNkbnNfY3RybC0+Y2FwczIubWF4X2Jhbmtz KSB7Cj4+ICsJCQlkZXZfZXJyKGNkbnNfY3RybC0+ZGV2LAo+PiArCQkJCSJpbnZhbGlkIHJlZyB2 YWx1ZTogJXUgKG1heCBDUyA9ICVkKVxuIiwKPj4gKwkJCQljcywgY2Ruc19jdHJsLT5jYXBzMi5t YXhfYmFua3MpOwo+PiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJCX0KPj4gKwo+PiArCQlpZiAo dGVzdF9hbmRfc2V0X2JpdChjcywgJmNkbnNfY3RybC0+YXNzaWduZWRfY3MpKSB7Cj4+ICsJCQlk ZXZfZXJyKGNkbnNfY3RybC0+ZGV2LAo+PiArCQkJCSJDUyAlZCBhbHJlYWR5IGFzc2lnbmVkXG4i LCBjcyk7Cj4+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwkJfQo+PiArCj4+ICsJCWNkbnNfY2hp cC0+Y3NbaV0gPSBjczsKPj4gKwl9Cj4+ICsKPj4gKwljaGlwID0gJmNkbnNfY2hpcC0+Y2hpcDsK Pj4gKwljaGlwLT5jb250cm9sbGVyID0gJmNkbnNfY3RybC0+Y29udHJvbGxlcjsKPj4gKwluYW5k X3NldF9mbGFzaF9ub2RlKGNoaXAsIG5wKTsKPj4gKwo+PiArCW10ZCA9IG5hbmRfdG9fbXRkKGNo aXApOwo+PiArCW10ZC0+ZGV2LnBhcmVudCA9IGNkbnNfY3RybC0+ZGV2Owo+PiArCj4+ICsJLyoK Pj4gKwkgKiBEZWZhdWx0IHRvIEhXIEVDQyBlbmdpbmUgbW9kZS4gSWYgdGhlIG5hbmQtZWNjLW1v ZGUgcHJvcGVydHkgaXMgZ2l2ZW4KPj4gKwkgKiBpbiB0aGUgRFQgbm9kZSwgdGhpcyBlbnRyeSB3 aWxsIGJlIG92ZXJ3cml0dGVuIGluIG5hbmRfc2Nhbl9pZGVudCgpLgo+PiArCSAqLwo+PiArCWNo aXAtPmVjYy5tb2RlID0gTkFORF9FQ0NfSFc7Cj4+ICsKPj4gKwlyZXQgPSBuYW5kX3NjYW4oY2hp cCwgY2Ruc19jaGlwLT5uc2Vscyk7Cj4+ICsJaWYgKHJldCkgewo+PiArCQlkZXZfZXJyKGNkbnNf Y3RybC0+ZGV2LCAiY291bGQgbm90IHNjYW4gdGhlIG5hbmQgY2hpcFxuIik7Cj4+ICsJCXJldHVy biByZXQ7Cj4+ICsJfQo+PiArCj4+ICsJcmV0ID0gbXRkX2RldmljZV9yZWdpc3RlcihtdGQsIE5V TEwsIDApOwo+PiArCWlmIChyZXQpIHsKPj4gKwkJZGV2X2VycihjZG5zX2N0cmwtPmRldiwKPj4g KwkJCSJmYWlsZWQgdG8gcmVnaXN0ZXIgbXRkIGRldmljZTogJWRcbiIsIHJldCk7Cj4+ICsJCW5h bmRfY2xlYW51cChjaGlwKTsKPj4gKwkJcmV0dXJuIHJldDsKPj4gKwl9Cj4+ICsKPj4gKwlsaXN0 X2FkZF90YWlsKCZjZG5zX2NoaXAtPm5vZGUsICZjZG5zX2N0cmwtPmNoaXBzKTsKPj4gKwo+PiAr CXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBjYWRlbmNlX25hbmRfY2hpcHNf Y2xlYW51cChzdHJ1Y3QgY2Ruc19uYW5kX2N0cmwgKmNkbnNfY3RybCkKPj4gK3sKPj4gKwlzdHJ1 Y3QgY2Ruc19uYW5kX2NoaXAgKmVudHJ5LCAqdGVtcDsKPj4gKwo+PiArCWxpc3RfZm9yX2VhY2hf ZW50cnlfc2FmZShlbnRyeSwgdGVtcCwgJmNkbnNfY3RybC0+Y2hpcHMsIG5vZGUpIHsKPj4gKwkJ bmFuZF9yZWxlYXNlKCZlbnRyeS0+Y2hpcCk7Cj4+ICsJCWxpc3RfZGVsKCZlbnRyeS0+bm9kZSk7 Cj4+ICsJfQo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGNhZGVuY2VfbmFuZF9jaGlwc19pbml0 KHN0cnVjdCBjZG5zX25hbmRfY3RybCAqY2Ruc19jdHJsKQo+PiArewo+PiArCXN0cnVjdCBkZXZp Y2Vfbm9kZSAqbnAgPSBjZG5zX2N0cmwtPmRldi0+b2Zfbm9kZTsKPj4gKwlzdHJ1Y3QgZGV2aWNl X25vZGUgKm5hbmRfbnA7Cj4+ICsJaW50IG1heF9jcyA9IGNkbnNfY3RybC0+Y2FwczIubWF4X2Jh bmtzOwo+PiArCWludCBuY2hpcHMsIHJldDsKPj4gKwo+PiArCW5jaGlwcyA9IG9mX2dldF9jaGls ZF9jb3VudChucCk7Cj4+ICsKPj4gKwlpZiAobmNoaXBzID4gbWF4X2NzKSB7Cj4+ICsJCWRldl9l cnIoY2Ruc19jdHJsLT5kZXYsCj4+ICsJCQkidG9vIG1hbnkgTkFORCBjaGlwczogJWQgKG1heCA9 ICVkIENTKVxuIiwKPj4gKwkJCW5jaGlwcywgbWF4X2NzKTsKPj4gKwkJcmV0dXJuIC1FSU5WQUw7 Cj4+ICsJfQo+PiArCj4+ICsJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShucCwgbmFuZF9ucCkgewo+ PiArCQlyZXQgPSBjYWRlbmNlX25hbmRfY2hpcF9pbml0KGNkbnNfY3RybCwgbmFuZF9ucCk7Cj4+ ICsJCWlmIChyZXQpIHsKPj4gKwkJCW9mX25vZGVfcHV0KG5hbmRfbnApOwo+PiArCQkJY2FkZW5j ZV9uYW5kX2NoaXBzX2NsZWFudXAoY2Ruc19jdHJsKTsKPj4gKwkJCXJldHVybiByZXQ7Cj4+ICsJ CX0KPj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBj YWRlbmNlX25hbmRfaW5pdChzdHJ1Y3QgY2Ruc19uYW5kX2N0cmwgKmNkbnNfY3RybCkKPj4gK3sK Pj4gKwlkbWFfY2FwX21hc2tfdCBtYXNrOwo+PiArCWludCByZXQ7Cj4+ICsKPj4gKwljZG5zX2N0 cmwtPmNkbWFfZGVzYyA9IGRtYV9hbGxvY19jb2hlcmVudChjZG5zX2N0cmwtPmRldiwKPj4gKwkJ CQkJCSAgc2l6ZW9mKCpjZG5zX2N0cmwtPmNkbWFfZGVzYyksCj4+ICsJCQkJCQkgICZjZG5zX2N0 cmwtPmRtYV9jZG1hX2Rlc2MsCj4+ICsJCQkJCQkgIEdGUF9LRVJORUwpOwo+PiArCWlmICghY2Ru c19jdHJsLT5kbWFfY2RtYV9kZXNjKQo+PiArCQlyZXR1cm4gLUVOT01FTTsKPj4gKwo+PiArCWNk bnNfY3RybC0+YnVmX3NpemUgPSBTWl8xNks7Cj4+ICsJY2Ruc19jdHJsLT5idWYgPSBrbWFsbG9j KGNkbnNfY3RybC0+YnVmX3NpemUsIEdGUF9LRVJORUwpOwo+PiArCWlmICghY2Ruc19jdHJsLT5i dWYpIHsKPj4gKwkJZ290byBmcmVlX2J1Zl9kZXNjOwo+PiArCQlyZXQgPSAtRU5PTUVNOwo+PiAr CX0KPj4gKwo+PiArCWlmIChkZXZtX3JlcXVlc3RfaXJxKGNkbnNfY3RybC0+ZGV2LCBjZG5zX2N0 cmwtPmlycSwgY2FkZW5jZV9uYW5kX2lzciwKPj4gKwkJCSAgICAgSVJRRl9TSEFSRUQsICJjYWRl bmNlLW5hbmQtY29udHJvbGxlciIsCj4+ICsJCQkgICAgIGNkbnNfY3RybCkpIHsKPj4gKwkJZGV2 X2VycihjZG5zX2N0cmwtPmRldiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBJUlFcbiIpOwo+PiArCQly ZXQgPSAtRU5PREVWOwo+PiArCQlnb3RvIGZyZWVfYnVmOwo+PiArCX0KPj4gKwo+PiArCXNwaW5f bG9ja19pbml0KCZjZG5zX2N0cmwtPmlycV9sb2NrKTsKPj4gKwlpbml0X2NvbXBsZXRpb24oJmNk bnNfY3RybC0+Y29tcGxldGUpOwo+PiArCj4+ICsJcmV0ID0gY2FkZW5jZV9uYW5kX2h3X2luaXQo Y2Ruc19jdHJsKTsKPj4gKwlpZiAocmV0KQo+PiArCQlnb3RvIGRpc2FibGVfaXJxOwo+PiArCj4+ ICsJZG1hX2NhcF96ZXJvKG1hc2spOwo+PiArCWRtYV9jYXBfc2V0KERNQV9NRU1DUFksIG1hc2sp Owo+PiArCj4+ICsJaWYgKGNkbnNfY3RybC0+Y2FwczEtPmhhc19kbWEpIHsKPj4gKwkJY2Ruc19j dHJsLT5kbWFjID0gZG1hX3JlcXVlc3RfY2hhbm5lbChtYXNrLCBOVUxMLCBOVUxMKTsKPj4gKwkJ aWYgKCFjZG5zX2N0cmwtPmRtYWMpIHsKPj4gKwkJCWRldl9lcnIoY2Ruc19jdHJsLT5kZXYsCj4+ ICsJCQkJIlVuYWJsZSB0byBnZXQgYSBETUEgY2hhbm5lbFxuIik7Cj4+ICsJCQlyZXQgPSAtRUJV U1k7Cj4+ICsJCQlnb3RvIGRpc2FibGVfaXJxOwo+PiArCQl9Cj4+ICsJfQo+PiArCj4+ICsJbmFu ZF9jb250cm9sbGVyX2luaXQoJmNkbnNfY3RybC0+Y29udHJvbGxlcik7Cj4+ICsJSU5JVF9MSVNU X0hFQUQoJmNkbnNfY3RybC0+Y2hpcHMpOwo+PiArCj4+ICsJY2Ruc19jdHJsLT5jb250cm9sbGVy Lm9wcyA9ICZjYWRlbmNlX25hbmRfY29udHJvbGxlcl9vcHM7Cj4+ICsJY2Ruc19jdHJsLT5jdXJy X2NvcnJfc3RyX2lkeCA9IDB4RkY7Cj4+ICsKPj4gKwlyZXQgPSBjYWRlbmNlX25hbmRfY2hpcHNf aW5pdChjZG5zX2N0cmwpOwo+PiArCWlmIChyZXQpIHsKPj4gKwkJZGV2X2VycihjZG5zX2N0cmwt PmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBNVEQ6ICVkXG4iLAo+PiArCQkJcmV0KTsKPj4gKwkJ Z290byBkbWFfcmVsZWFzZV9jaG5sOwo+PiArCX0KPj4gKwo+PiArCXJldHVybiAwOwo+PiArCj4+ ICtkbWFfcmVsZWFzZV9jaG5sOgo+PiArCWlmIChjZG5zX2N0cmwtPmRtYWMpCj4+ICsJCWRtYV9y ZWxlYXNlX2NoYW5uZWwoY2Ruc19jdHJsLT5kbWFjKTsKPj4gKwo+PiArZGlzYWJsZV9pcnE6Cj4+ ICsJY2FkZW5jZV9uYW5kX2lycV9jbGVhbnVwKGNkbnNfY3RybC0+aXJxLCBjZG5zX2N0cmwpOwo+ PiArCj4+ICtmcmVlX2J1ZjoKPj4gKwlrZnJlZShjZG5zX2N0cmwtPmJ1Zik7Cj4+ICsKPj4gK2Zy ZWVfYnVmX2Rlc2M6Cj4+ICsJZG1hX2ZyZWVfY29oZXJlbnQoY2Ruc19jdHJsLT5kZXYsIHNpemVv ZihzdHJ1Y3QgY2FkZW5jZV9uYW5kX2NkbWFfZGVzYyksCj4+ICsJCQkgIGNkbnNfY3RybC0+Y2Rt YV9kZXNjLCBjZG5zX2N0cmwtPmRtYV9jZG1hX2Rlc2MpOwo+PiArCj4+ICsJcmV0dXJuIHJldDsK Pj4gK30KPj4gKwo+PiArLyogRHJpdmVyIGV4aXQgcG9pbnQuICovCj4+ICtzdGF0aWMgdm9pZCBj YWRlbmNlX25hbmRfcmVtb3ZlKHN0cnVjdCBjZG5zX25hbmRfY3RybCAqY2Ruc19jdHJsKQo+PiAr ewo+PiArCWNhZGVuY2VfbmFuZF9jaGlwc19jbGVhbnVwKGNkbnNfY3RybCk7Cj4+ICsJY2FkZW5j ZV9uYW5kX2lycV9jbGVhbnVwKGNkbnNfY3RybC0+aXJxLCBjZG5zX2N0cmwpOwo+PiArCWtmcmVl KGNkbnNfY3RybC0+YnVmKTsKPj4gKwlkbWFfZnJlZV9jb2hlcmVudChjZG5zX2N0cmwtPmRldiwg c2l6ZW9mKHN0cnVjdCBjYWRlbmNlX25hbmRfY2RtYV9kZXNjKSwKPj4gKwkJCSAgY2Ruc19jdHJs LT5jZG1hX2Rlc2MsIGNkbnNfY3RybC0+ZG1hX2NkbWFfZGVzYyk7Cj4+ICsKPj4gKwlpZiAoY2Ru c19jdHJsLT5kbWFjKQo+PiArCQlkbWFfcmVsZWFzZV9jaGFubmVsKGNkbnNfY3RybC0+ZG1hYyk7 Cj4+ICt9Cj4+ICsKPj4gK3N0cnVjdCBjYWRlbmNlX25hbmRfZHQgewo+PiArCXN0cnVjdCBjZG5z X25hbmRfY3RybCBjZG5zX2N0cmw7Cj4+ICsJc3RydWN0IGNsayAqY2xrOwo+PiArfTsKPj4gKwo+ PiArc3RhdGljIGNvbnN0IHN0cnVjdCBjYWRlbmNlX25hbmRfZHRfZGV2ZGF0YSBjYWRlbmNlX25h bmRfZGVmYXVsdCA9IHsKPj4gKwkuaWZfc2tldyA9IDAsCj4+ICsJLmhhc19kbWEgPSAxLAo+PiAr fTsKPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgY2FkZW5jZV9uYW5k X2R0X2lkc1tdID0gewo+PiArCXsKPj4gKwkJLmNvbXBhdGlibGUgPSAiY2RucyxocC1uZmMiLAo+ PiArCQkuZGF0YSA9ICZjYWRlbmNlX25hbmRfZGVmYXVsdAo+PiArCX0sIHt9Cj4+ICt9Owo+PiAr Cj4+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBjYWRlbmNlX25hbmRfZHRfaWRzKTsKPj4gKwo+ PiArc3RhdGljIGludCBjYWRlbmNlX25hbmRfZHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqb2ZkZXYpCj4+ICt7Cj4+ICsJc3RydWN0IHJlc291cmNlICpyZXM7Cj4+ICsJc3RydWN0IGNh ZGVuY2VfbmFuZF9kdCAqZHQ7Cj4+ICsJc3RydWN0IGNkbnNfbmFuZF9jdHJsICpjZG5zX2N0cmw7 Cj4+ICsJaW50IHJldDsKPj4gKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9pZDsKPj4g Kwljb25zdCBzdHJ1Y3QgY2FkZW5jZV9uYW5kX2R0X2RldmRhdGEgKmRldmRhdGE7Cj4+ICsJdTMy IHZhbDsKPj4gKwo+PiArCW9mX2lkID0gb2ZfbWF0Y2hfZGV2aWNlKGNhZGVuY2VfbmFuZF9kdF9p ZHMsICZvZmRldi0+ZGV2KTsKPj4gKwlpZiAob2ZfaWQpIHsKPj4gKwkJb2ZkZXYtPmlkX2VudHJ5 ID0gb2ZfaWQtPmRhdGE7Cj4+ICsJCWRldmRhdGEgPSBvZl9pZC0+ZGF0YTsKPj4gKwl9IGVsc2Ug ewo+PiArCQlwcl9lcnIoIkZhaWxlZCB0byBmaW5kIHRoZSByaWdodCBkZXZpY2UgaWQuXG4iKTsK Pj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4+ICsJfQo+PiArCj4+ICsJZHQgPSBkZXZtX2t6YWxsb2Mo Jm9mZGV2LT5kZXYsIHNpemVvZigqZHQpLCBHRlBfS0VSTkVMKTsKPj4gKwlpZiAoIWR0KQo+PiAr CQlyZXR1cm4gLUVOT01FTTsKPj4gKwo+PiArCWNkbnNfY3RybCA9ICZkdC0+Y2Ruc19jdHJsOwo+ PiArCWNkbnNfY3RybC0+Y2FwczEgPSBkZXZkYXRhOwo+PiArCj4+ICsJY2Ruc19jdHJsLT5kZXYg PSAmb2ZkZXYtPmRldjsKPj4gKwljZG5zX2N0cmwtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEob2Zk ZXYsIDApOwo+PiArCWlmIChjZG5zX2N0cmwtPmlycSA8IDApIHsKPj4gKwkJZGV2X2Vycigmb2Zk ZXYtPmRldiwgIm5vIGlycSBkZWZpbmVkXG4iKTsKPj4gKwkJcmV0dXJuIGNkbnNfY3RybC0+aXJx Owo+PiArCX0KPj4gKwlkZXZfaW5mbyhjZG5zX2N0cmwtPmRldiwgIklSUTogbnIgJWRcbiIsIGNk bnNfY3RybC0+aXJxKTsKPj4gKwo+PiArCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShvZmRl diwgSU9SRVNPVVJDRV9NRU0sIDApOwo+PiArCWNkbnNfY3RybC0+cmVnID0gZGV2bV9pb3JlbWFw X3Jlc291cmNlKGNkbnNfY3RybC0+ZGV2LCByZXMpOwo+Cj5JIHRoaW5rIHRoaXMgd2lsbCBiZSBy ZWZ1c2VkIGJ5IHJvYm90cywgeW91IGhhdmUgdG8gc3F1YXNoIHRoZSB0d28KPmxpbmVzIGludG8K Pgo+ICAgICAgICBjZG5zX2N0cmwtPnJlZyA9IGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJj ZShvZmRldiwgMCk7Cj4KPj4gKwlpZiAoSVNfRVJSKGNkbnNfY3RybC0+cmVnKSkgewo+PiArCQlk ZXZfZXJyKCZvZmRldi0+ZGV2LCAiZGV2bV9pb3JlbWFwX3Jlc291cmNlIHJlcyAwIGZhaWxlZFxu Iik7Cj4+ICsJCXJldHVybiBQVFJfRVJSKGNkbnNfY3RybC0+cmVnKTsKPj4gKwl9Cj4+ICsKPj4g KwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2Uob2ZkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsK Pj4gKwljZG5zX2N0cmwtPmlvLmRtYSA9IHJlcy0+c3RhcnQ7Cj4+ICsJY2Ruc19jdHJsLT5pby52 aXJ0ID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZvZmRldi0+ZGV2LCByZXMpOwo+PiArCWlmIChJ U19FUlIoY2Ruc19jdHJsLT5pby52aXJ0KSkgewo+PiArCQlkZXZfZXJyKGNkbnNfY3RybC0+ZGV2 LCAiZGV2bV9pb3JlbWFwX3Jlc291cmNlIHJlcyAxIGZhaWxlZFxuIik7Cj4+ICsJCXJldHVybiBQ VFJfRVJSKGNkbnNfY3RybC0+aW8udmlydCk7Cj4+ICsJfQo+PiArCj4+ICsJZHQtPmNsayA9IGRl dm1fY2xrX2dldChjZG5zX2N0cmwtPmRldiwgIm5mX2NsayIpOwo+PiArCWlmIChJU19FUlIoZHQt PmNsaykpCj4+ICsJCXJldHVybiBQVFJfRVJSKGR0LT5jbGspOwo+PiArCj4+ICsJY2Ruc19jdHJs LT5uZl9jbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShkdC0+Y2xrKTsKPj4gKwo+PiArCXJldCA9IG9m X3Byb3BlcnR5X3JlYWRfdTMyKG9mZGV2LT5kZXYub2Zfbm9kZSwKPj4gKwkJCQkgICAiY2Rucyxi b2FyZC1kZWxheS1wcyIsICZ2YWwpOwo+PiArCWlmIChyZXQpIHsKPj4gKwkJZGV2X3dhcm4oY2Ru c19jdHJsLT5kZXYsICJtaXNzaW5nIGNkbnMsYm9hcmQtZGVsYXktcHMgcHJvcGVydHlcbiIpOwo+ Cj5NYXliZSB5b3UgY291bGQgdHVybiB0aGlzIHByb3BlcnR5IGludG8gYW4gb3B0aW9uYWwgb25l LCB3aXRoIGEgZGVmYXVsdAo+dmFsdWU/Cj4KSG1tbSwgbWF5YmUgeW91IGFyZSByaWdodC4gSXQg d2lsbCBiZSBzaW1wbGVyIHRvIHVzZS4gSSB3aWxsIGNoYW5nZSBpdC4KCj4+ICsJCXZhbCA9IDA7 Cj4+ICsJfQo+PiArCWNkbnNfY3RybC0+Ym9hcmRfZGVsYXkgPSB2YWw7Cj4+ICsKPj4gKwlyZXQg PSBjYWRlbmNlX25hbmRfaW5pdChjZG5zX2N0cmwpOwo+PiArCWlmIChyZXQpCj4+ICsJCXJldHVy biByZXQ7Cj4+ICsKPj4gKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShvZmRldiwgZHQpOwo+PiArCXJl dHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGNhZGVuY2VfbmFuZF9kdF9yZW1vdmUo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpCj4+ICt7Cj4+ICsJc3RydWN0IGNhZGVuY2Vf bmFuZF9kdCAqZHQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShvZmRldik7Cj4+ICsKPj4gKwljYWRl bmNlX25hbmRfcmVtb3ZlKCZkdC0+Y2Ruc19jdHJsKTsKPj4gKwo+PiArCXJldHVybiAwOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBjYWRlbmNlX25hbmRfZHRf ZHJpdmVyID0gewo+PiArCS5wcm9iZQkJPSBjYWRlbmNlX25hbmRfZHRfcHJvYmUsCj4+ICsJLnJl bW92ZQkJPSBjYWRlbmNlX25hbmRfZHRfcmVtb3ZlLAo+PiArCS5kcml2ZXIJCT0gewo+PiArCQku bmFtZQk9ICJjYWRlbmNlLW5hbmQtY29udHJvbGxlciIsCj4+ICsJCS5vZl9tYXRjaF90YWJsZSA9 IGNhZGVuY2VfbmFuZF9kdF9pZHMsCj4+ICsJfSwKPj4gK307Cj4+ICsKPj4gK21vZHVsZV9wbGF0 Zm9ybV9kcml2ZXIoY2FkZW5jZV9uYW5kX2R0X2RyaXZlcik7Cj4+ICsKPj4gK01PRFVMRV9BVVRI T1IoIlBpb3RyIFNyb2thIDxwaW90cnNAY2FkZW5jZS5jb20+Iik7Cj4+ICtNT0RVTEVfTElDRU5T RSgiR1BMIHYyIik7Cj4+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgQ2FkZW5jZSBO QU5EIGZsYXNoIGNvbnRyb2xsZXIiKTsKPj4gKwo+Cj5Xb3VsZCB5b3UgbWluZCBhZGRpbmcgeW91 cnNlbGYgaW4gTUFJTlRBSU5FUlMgZm9yIHRoaXMgZHJpdmVyICgrCj5iaW5kaW5ncyk/Ck9rLiBJ IHdpbGwgZG8gdGhhdC4KCj4KPlRoYW5rcywKPk1pcXXDqGwKClRoYW5rcwpQaW90ciAKCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXgg TVREIGRpc2N1c3Npb24gbWFpbGluZyBsaXN0Cmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21h aWxtYW4vbGlzdGluZm8vbGludXgtbXRkLwo=