Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp602960ybl; Wed, 29 Jan 2020 06:25:05 -0800 (PST) X-Google-Smtp-Source: APXvYqwK6bLQ8Pb3m4C99sF19cKK5trNnK0K4CjYuEkSxIracToq8WNaxcm7whGt4XAqqftblM+5 X-Received: by 2002:a05:6830:231d:: with SMTP id u29mr21500828ote.185.1580307905663; Wed, 29 Jan 2020 06:25:05 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1580307905; cv=pass; d=google.com; s=arc-20160816; b=kRbqNcOW4YV1/gcRBcBjMlxtuCvyDL/69xBw7/dQjLdJvfdEam03NXYTUxSqoRkSLo +PSpIqg4qrUMlqDbGk5Gn0LgFPfhK2ubsvbHUYSeSPy2XPegQWzFz7PO93Em9Mo3eWpI ZUqQIkUCDeOeo8VJ1FWask8PQ+h0SPY4Tkp6iTB54DajGqmD9iRxzQMNRCpgK+VS7z6Q Ks3zFDx/KHTxXAUS5kbGTTtGZ9YHZ5xrkW8joaYxy3mTa7R1Y1VbK+CYiHTLeUvq5Txn s8Keu6hXDI7tQ1RyEr/w9ieNXkRZbGX2zzgWbjwLYOIzYyP0UW5JKBL+FA9diUM0L+Ir Msqw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-id:user-agent:content-language:accept-language:in-reply-to :references:message-id:date:thread-index:thread-topic:subject:cc:to :from:dkim-signature:ironport-phdr:dkim-signature; bh=tIow+ybKHQpsa8gLrChBQsSLlBL0S3vjTdVcxs6RLdk=; b=fFeT/CQ7ZKQWBmkDi7UxlJaV2il3iKx4J6LIkVOZ1FFziYck91breuIizIl8KJpYiA M438TojW8Y3m4/4putsunM628qlJx/zcgPsPZSmCIyYb8VLS5Lu8rrAQmxazonf/b0T7 wSVsqrR+6pIkAqejTAul3GsJEELG2cQaMYXQH/nktY+tTRgpTg60gPHq6A8AivqEWKwe kCJPrqsi8kAyDZyqFKSybUvXfx0xMarsTGG2l5q9rY6pzj6AyX7qVbJJT+lbY61c5yW+ 4QjdhqOJ2Qoo/3X42ewDtHKoBargbkangm/KjuugWEq8kFFNOfeHWpsZm/v+JLtboI4M 0n2A== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@cisco.com header.s=iport header.b=U5UrKpPv; dkim=pass header.i=@cisco.onmicrosoft.com header.s=selector2-cisco-onmicrosoft-com header.b=d+aCHO1r; arc=pass (i=1 spf=pass spfdomain=cisco.com dkim=pass dkdomain=cisco.com dmarc=pass fromdomain=cisco.com); spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=cisco.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w2si1246679otk.126.2020.01.29.06.24.53; Wed, 29 Jan 2020 06:25:05 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@cisco.com header.s=iport header.b=U5UrKpPv; dkim=pass header.i=@cisco.onmicrosoft.com header.s=selector2-cisco-onmicrosoft-com header.b=d+aCHO1r; arc=pass (i=1 spf=pass spfdomain=cisco.com dkim=pass dkdomain=cisco.com dmarc=pass fromdomain=cisco.com); spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=cisco.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726719AbgA2OXw (ORCPT + 99 others); Wed, 29 Jan 2020 09:23:52 -0500 Received: from rcdn-iport-2.cisco.com ([173.37.86.73]:1956 "EHLO rcdn-iport-2.cisco.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726314AbgA2OXv (ORCPT ); Wed, 29 Jan 2020 09:23:51 -0500 X-Greylist: delayed 426 seconds by postgrey-1.27 at vger.kernel.org; Wed, 29 Jan 2020 09:23:48 EST DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=cisco.com; i=@cisco.com; l=96808; q=dns/txt; s=iport; t=1580307829; x=1581517429; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=tIow+ybKHQpsa8gLrChBQsSLlBL0S3vjTdVcxs6RLdk=; b=U5UrKpPvSSOZsSt1X43qeahGGpYNNUmcHplsDaJhRyUxTEiJMaue8l1J N5yVj5tGko1U17tzg6liAWva6lOOsGrWKMnbxq6PgNpjCFvEFhKSO6shM 6isCd+wi60QI3SDiYoveN6DDiCq74lvG/1X8Hzyd0eACyNudMNnnLFnrA g=; IronPort-PHdr: =?us-ascii?q?9a23=3AY6wNBRUyNyAadtrYAUdMKY0UzijV8LGuZFwc94?= =?us-ascii?q?YnhrRSc6+q45XlOgnF6O5wiEPSA9yJ8OpK3uzRta2oGXcN55qMqjgjSNRNTF?= =?us-ascii?q?dE7KdehAk8GIiAAEz/IuTtank6FcJZSlJ//FmwMFNeH4D1YFiB6nA=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0CyBQC6kjFe/5ldJa1mHAEBAQEBBwE?= =?us-ascii?q?BEQEEBAEBgXuBVCknBYE8CCAECyoKhAqDRgOKcYI6JZgPgUKBEANUCQEBAQw?= =?us-ascii?q?BAS0CAQGEQAIXghMkOBMCAw0BAQQBAQECAQUEbYU3DIVeAQEBAQIBEggBCAQ?= =?us-ascii?q?NDAEBDCsBBAsCAQgOCgICJgICAjAVEAIEAQkDAQUCAQEegjlLgksDDiABog8?= =?us-ascii?q?CgTmIYnV/M4J/AQEFhHoYggwJgQ4qiCyDdBqBQT+BEScMgjIuPoQOOxeCeYJ?= =?us-ascii?q?ejTwagkQ7hgIbggaHNo44dgqCOZYxBhuCSIs/gRKLZo4dQ4FKmUMCBAIEBQI?= =?us-ascii?q?OAQEFgWkigVhwFTuCbFAYDY4dCQMXgQQBCIJDilN0gSmMDgGBDwEB?= X-IronPort-AV: E=Sophos;i="5.70,378,1574121600"; d="scan'208";a="714887374" Received: from rcdn-core-2.cisco.com ([173.37.93.153]) by rcdn-iport-2.cisco.com with ESMTP/TLS/DHE-RSA-SEED-SHA; 29 Jan 2020 14:16:41 +0000 Received: from XCH-RCD-001.cisco.com (xch-rcd-001.cisco.com [173.37.102.11]) by rcdn-core-2.cisco.com (8.15.2/8.15.2) with ESMTPS id 00TEGe1I013701 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=FAIL); Wed, 29 Jan 2020 14:16:40 GMT Received: from xhs-rcd-002.cisco.com (173.37.227.247) by XCH-RCD-001.cisco.com (173.37.102.11) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Wed, 29 Jan 2020 08:16:39 -0600 Received: from xhs-aln-002.cisco.com (173.37.135.119) by xhs-rcd-002.cisco.com (173.37.227.247) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Wed, 29 Jan 2020 08:16:38 -0600 Received: from NAM04-SN1-obe.outbound.protection.outlook.com (173.37.151.57) by xhs-aln-002.cisco.com (173.37.135.119) with Microsoft SMTP Server (TLS) id 15.0.1473.3 via Frontend Transport; Wed, 29 Jan 2020 08:16:38 -0600 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DtzynMUG8mWBMLhD4pLv36Xkc7E1B6tJ2EjbPpmhuErsaHQ5Qvo/XFHIERK0PtA+/xh7MeocD5TgCU7cbTDOyoVv1iBXmVB5QJA22fH/txcKfWaDzHQ2i7bd3SK4FWaVhZgbrSY50QHe7Sbt5hlE2ygHq0lfMbvJAPeaHzKMRi5AnsWPBTgBuziC1LS6yJofDKs4NRr7JXmCcGNHw3rLI2K3HScamisiFV/1ado6AvIKtXwtC08meLun8rlMC5pcdSHsbyo+wcRM3u2cjuSQVQD3tHzbaTL3ZRo7xPom7gupY6MED72XXnqDaFcgxiil3xyud1baBP+2sbVlnpj+Nw== 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=tIow+ybKHQpsa8gLrChBQsSLlBL0S3vjTdVcxs6RLdk=; b=kf71nJ1TSv9QM76bpxA6McrgZFeUqMIML+GPEGWsLZC+SXeCiEqDVhNE6tUbb/Vm2+lXKmP1L/6hDrCKDARDneI2l/Qri8ndid0ImcpkkZWPEtor7sxv8BqBG1G7Mn9LSu5cX4FOPUvp1XOPrKTJAGnvbu+0Z9D4LxbMfQ2GwoEBL6q3nA7Yt2y644aQoEV/vI1YbTnOyp0/zP7PohqCQan7h5TDhkLKsLO2SYfeQTG9qU2R+izXTPOA0KgoX2C+Ad7GLxWfXFsiBbhH7/q83soUajmrKMAIJGhFyxx5MHgTky/zucw7yefaYfyfJldta3SmgdpznmL0SN/cxxtj/A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=cisco.com; dmarc=pass action=none header.from=cisco.com; dkim=pass header.d=cisco.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cisco.onmicrosoft.com; s=selector2-cisco-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tIow+ybKHQpsa8gLrChBQsSLlBL0S3vjTdVcxs6RLdk=; b=d+aCHO1rdVgKxOTJpC9uvs5ZnYbQKGZSBE/BVOnzFXV83IXRU2D+fuIGhjy3+cDIDsvty83pl/g95o14L+WZV62/Yk0fXbDPppVbkqSs5Qe0DBCQq68+G/LrI0W4LDQ4zYs35YNTlsBZWvIOKlRego3CG4X7Z/EtVP9PBubCx2Q= Received: from MWHPR11MB0062.namprd11.prod.outlook.com (10.164.204.34) by MWHPR11MB1789.namprd11.prod.outlook.com (10.175.50.13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2665.24; Wed, 29 Jan 2020 14:16:36 +0000 Received: from MWHPR11MB0062.namprd11.prod.outlook.com ([fe80::3c9d:ddee:e52e:348]) by MWHPR11MB0062.namprd11.prod.outlook.com ([fe80::3c9d:ddee:e52e:348%5]) with mapi id 15.20.2665.026; Wed, 29 Jan 2020 14:16:36 +0000 From: "Hans Verkuil (hansverk)" To: Sowjanya Komatineni , "thierry.reding@gmail.com" , "jonathanh@nvidia.com" , "frankc@nvidia.com" CC: "linux-media@vger.kernel.org" , "devicetree@vger.kernel.org" , "linux-clk@vger.kernel.org" , "linux-tegra@vger.kernel.org" , "linux-kernel@vger.kernel.org" Subject: Re: [RFC PATCH v1 4/5] media: tegra: Add Tegra Video input driver for Tegra210 Thread-Topic: [RFC PATCH v1 4/5] media: tegra: Add Tegra Video input driver for Tegra210 Thread-Index: AQHV1q60MoS8JPuGdE6UGM3opJGScw== Date: Wed, 29 Jan 2020 14:16:32 +0000 Message-ID: <3cec464f-730f-97be-0000-05b6c04f346f@cisco.com> References: <1580235801-4129-1-git-send-email-skomatineni@nvidia.com> <1580235801-4129-5-git-send-email-skomatineni@nvidia.com> In-Reply-To: <1580235801-4129-5-git-send-email-skomatineni@nvidia.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.9.0 authentication-results: spf=none (sender IP is ) smtp.mailfrom=hansverk@cisco.com; x-originating-ip: [173.38.220.44] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 6673049e-0818-488f-3fa0-08d7a4c5d9ef x-ms-traffictypediagnostic: MWHPR11MB1789: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:6790; x-forefront-prvs: 02973C87BC x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(4636009)(39860400002)(136003)(396003)(346002)(376002)(366004)(199004)(189003)(31686004)(6512007)(31696002)(36756003)(4326008)(6666004)(186003)(26005)(6486002)(86362001)(71200400001)(2616005)(2906002)(54906003)(110136005)(66476007)(64756008)(66556008)(66446008)(66946007)(53546011)(478600001)(6506007)(8676002)(30864003)(81156014)(81166006)(316002)(5660300002)(76116006)(91956017)(8936002)(559001)(579004)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:MWHPR11MB1789;H:MWHPR11MB0062.namprd11.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: cisco.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: zAvZ5145AUQnNfBCf47gnYMXCNtrgaQnb66Nei2jYDtAsnDrD/wu9WgAKJgRYRrSy3ZjEQKhuNJz2KA/atLQlAu+/a8nA849e5mox9hYKENksCdPVYAH3y756piw/reWlaB8Hmb13GZtm1Z7eesa045QJ2Gj6WjL8SaMK4ltb9PMkrxc72Nd1en+ZeSblEq7K2y299AfTvL9S2mguQW1GMdd2PxnyVN+yz+6gwNZo9yIFrX2UNkNm3HLfeA6lcEmU2EAY9pFuw66fpvWWk+cXDvDiUfICkKYWV9UD7tN9kZkjf0RnkN2H287+2OPuFlCiI/VZLn8tiVtWeRaWbLxLDZc3b5e29ShmkBJgrz79tmrXnlkNsn9XKDfqy5alR/Yb0ZDzM6HNL16wGsfsOuLv13A8vgryGPjKF4UrVs/9hLJwnb66RF7ys/NNX96nuo2qP3FRM5hMYB7Zj5hE+zLOFdwLWYkFJurb4zUWAEpdvQ= x-ms-exchange-antispam-messagedata: x56ryloxJ6xWt7BGhkfVJeohFjiBMeQjBqAecSOlxzW7wwtvGqGYcFc2oArKAvSO4jfd35LSHKWsj01F9WyXkR8VmCiS4dbhYYdZ885pm/f+SASTlq/7C7wmetPI+8e8DlWOKIKApsWiDUGQdWDsOQ== x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" Content-ID: <25D075C6CDD6E246B5332682AFCA2807@namprd11.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 6673049e-0818-488f-3fa0-08d7a4c5d9ef X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Jan 2020 14:16:36.5593 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 5ae1af62-9505-4097-a69a-c1553ef7840e X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: /HewCwEA0pHc+HruxqKft9i3DDPP3C3Gqd44N1qbf7kZkIQFbVd9k7k/Pi9wJDnZTO6bH+QoGOtfkjmzAgI6tw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR11MB1789 X-OriginatorOrg: cisco.com X-Outbound-SMTP-Client: 173.37.102.11, xch-rcd-001.cisco.com X-Outbound-Node: rcdn-core-2.cisco.com Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgU293amFueWEsDQoNClRoYW5rIHlvdSB2ZXJ5IG11Y2ggZm9yIHdvcmtpbmcgb24gdGhpcyEg TXVjaCBhcHByZWNpYXRlZC4NCg0KT24gMS8yOC8yMCA3OjIzIFBNLCBTb3dqYW55YSBLb21hdGlu ZW5pIHdyb3RlOg0KPiBUZWdyYTIxMCBjb250YWlucyBhIHBvd2VyZnVsIFZpZGVvIElucHV0IChW SSkgaGFyZHdhcmUgY29udHJvbGxlcg0KPiB3aGljaCBjYW4gc3VwcG9ydCB1cCB0byA2IE1JUEkg Q1NJIGNhbWVyYSBzZW5zb3JzLg0KPiANCj4gRWFjaCBUZWdyYSBDU0kgcG9ydCBjYW4gYmUgb25l LXRvLW9uZSBtYXBwZWQgdG8gVkkgY2hhbm5lbCBhbmQgY2FuDQo+IGNhcHR1cmUgZnJvbSBhbiBl eHRlcm5hbCBjYW1lcmEgc2Vuc29yIGNvbm5lY3RlZCB0byBDU0kgb3IgZnJvbQ0KPiBidWlsdC1p biB0ZXN0IHBhdHRlcm4gZ2VuZXJhdG9yLg0KPiANCj4gVGVncmEyMTAgc3VwcG9ydHMgYnVpbHQt aW4gdGVzdCBwYXR0ZXJuIGdlbmVyYXRvciBmcm9tIENTSSB0byBWSS4NCj4gDQo+IFRoaXMgcGF0 Y2ggYWRkcyBhIFY0TDIgbWVkaWEgY29udHJvbGxlciBhbmQgY2FwdHVyZSBkcml2ZXIgc3VwcG9y dA0KPiBmb3IgVGVncmEyMTAgYnVpbHQtaW4gQ1NJIHRvIFZJIHRlc3QgcGF0dGVybiBnZW5lcmF0 b3IuDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBTb3dqYW55YSBLb21hdGluZW5pIDxza29tYXRpbmVu aUBudmlkaWEuY29tPg0KPiAtLS0NCj4gIGRyaXZlcnMvc3RhZ2luZy9tZWRpYS9LY29uZmlnICAg ICAgICAgICAgICAgfCAgIDIgKw0KPiAgZHJpdmVycy9zdGFnaW5nL21lZGlhL01ha2VmaWxlICAg ICAgICAgICAgICB8ICAgMSArDQo+ICBkcml2ZXJzL3N0YWdpbmcvbWVkaWEvdGVncmEvS2NvbmZp ZyAgICAgICAgIHwgIDEyICsNCj4gIGRyaXZlcnMvc3RhZ2luZy9tZWRpYS90ZWdyYS9NYWtlZmls ZSAgICAgICAgfCAgMTEgKw0KPiAgZHJpdmVycy9zdGFnaW5nL21lZGlhL3RlZ3JhL1RPRE8gICAg ICAgICAgICB8ICAxMCArDQo+ICBkcml2ZXJzL3N0YWdpbmcvbWVkaWEvdGVncmEvY3NpLmggICAg ICAgICAgIHwgMTExICsrKysrDQo+ICBkcml2ZXJzL3N0YWdpbmcvbWVkaWEvdGVncmEvY3NpMl9m b3BzLmMgICAgIHwgMzM1ICsrKysrKysrKysrKysrKw0KPiAgZHJpdmVycy9zdGFnaW5nL21lZGlh L3RlZ3JhL2NzaTJfZm9wcy5oICAgICB8ICAxNSArDQoNClRoZXNlIHRocmVlIGZpbGVzLi4uDQoN Cj4gIGRyaXZlcnMvc3RhZ2luZy9tZWRpYS90ZWdyYS9ob3N0MXgtdmlkZW8uYyAgfCAxMjAgKysr KysrDQo+ICBkcml2ZXJzL3N0YWdpbmcvbWVkaWEvdGVncmEvaG9zdDF4LXZpZGVvLmggIHwgIDMz ICsrDQo+ICBkcml2ZXJzL3N0YWdpbmcvbWVkaWEvdGVncmEvbWNfY29tbW9uLmggICAgIHwgMTMx ICsrKysrKw0KDQouLi5hbmQgdGhpcyBvbmUgYXJlIGEgYml0IHRvbyBnZW5lcmljLiBJdCBpcyBn b29kIHByYWN0aWNlIHRvIHByZWZpeCBoZWFkZXJzDQp3aXRoIHNvbWV0aGluZyB1bmlxdWUsIGUu Zy4gdGVncmEtY3NpLmggZXRjLg0KDQpGb3IgZXhhbXBsZSwgc3VueGkgaGFzIHN1bjZpX2NzaS5o IGFuZCBzdW40aV9jc2kuaC4NCg0KPiAgZHJpdmVycy9zdGFnaW5nL21lZGlhL3RlZ3JhL3RlZ3Jh LWNoYW5uZWwuYyB8IDYyOCArKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ICBkcml2ZXJz L3N0YWdpbmcvbWVkaWEvdGVncmEvdGVncmEtY29yZS5jICAgIHwgMTExICsrKysrDQo+ICBkcml2 ZXJzL3N0YWdpbmcvbWVkaWEvdGVncmEvdGVncmEtY29yZS5oICAgIHwgMTI1ICsrKysrKw0KPiAg ZHJpdmVycy9zdGFnaW5nL21lZGlhL3RlZ3JhL3RlZ3JhLWNzaS5jICAgICB8IDM4MCArKysrKysr KysrKysrKysrKw0KPiAgZHJpdmVycy9zdGFnaW5nL21lZGlhL3RlZ3JhL3RlZ3JhLXZpLmMgICAg ICB8IDM1MSArKysrKysrKysrKysrKysrDQo+ICBkcml2ZXJzL3N0YWdpbmcvbWVkaWEvdGVncmEv dGVncmEtdmkuaCAgICAgIHwgMTAxICsrKysrDQo+ICBkcml2ZXJzL3N0YWdpbmcvbWVkaWEvdGVn cmEvdmkyX2ZvcHMuYyAgICAgIHwgMzY0ICsrKysrKysrKysrKysrKysNCj4gIGRyaXZlcnMvc3Rh Z2luZy9tZWRpYS90ZWdyYS92aTJfZm9wcy5oICAgICAgfCAgMTUgKw0KPiAgZHJpdmVycy9zdGFn aW5nL21lZGlhL3RlZ3JhL3ZpMl9mb3JtYXRzLmggICB8IDExOSArKysrKysNCj4gIGRyaXZlcnMv c3RhZ2luZy9tZWRpYS90ZWdyYS92aTJfcmVnaXN0ZXJzLmggfCAxOTQgKysrKysrKysrDQo+ICAy MSBmaWxlcyBjaGFuZ2VkLCAzMTY5IGluc2VydGlvbnMoKykNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL3N0YWdpbmcvbWVkaWEvdGVncmEvS2NvbmZpZw0KPiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvc3RhZ2luZy9tZWRpYS90ZWdyYS9NYWtlZmlsZQ0KPiAgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy9tZWRpYS90ZWdyYS9UT0RPDQo+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9zdGFnaW5nL21lZGlhL3RlZ3JhL2NzaS5oDQo+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9zdGFnaW5nL21lZGlhL3RlZ3JhL2NzaTJfZm9wcy5jDQo+ICBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL21lZGlhL3RlZ3JhL2NzaTJfZm9wcy5oDQo+ICBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL21lZGlhL3RlZ3JhL2hvc3QxeC12aWRl by5jDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL21lZGlhL3RlZ3JhL2hv c3QxeC12aWRlby5oDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL21lZGlh L3RlZ3JhL21jX2NvbW1vbi5oDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5n L21lZGlhL3RlZ3JhL3RlZ3JhLWNoYW5uZWwuYw0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvc3RhZ2luZy9tZWRpYS90ZWdyYS90ZWdyYS1jb3JlLmMNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL3N0YWdpbmcvbWVkaWEvdGVncmEvdGVncmEtY29yZS5oDQo+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL21lZGlhL3RlZ3JhL3RlZ3JhLWNzaS5jDQo+ICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL21lZGlhL3RlZ3JhL3RlZ3JhLXZpLmMNCj4g IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvbWVkaWEvdGVncmEvdGVncmEtdmku aA0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2luZy9tZWRpYS90ZWdyYS92aTJf Zm9wcy5jDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL21lZGlhL3RlZ3Jh L3ZpMl9mb3BzLmgNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvbWVkaWEv dGVncmEvdmkyX2Zvcm1hdHMuaA0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc3RhZ2lu Zy9tZWRpYS90ZWdyYS92aTJfcmVnaXN0ZXJzLmgNCj4gDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L3N0YWdpbmcvbWVkaWEvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9LY29uZmlnDQo+ IGluZGV4IGMzOTRhYmZmZWE4Ni4uZTM2NzAzMGQ0NDA3IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJz L3N0YWdpbmcvbWVkaWEvS2NvbmZpZw0KPiArKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvS2Nv bmZpZw0KPiBAQCAtMzQsNiArMzQsOCBAQCBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9tZWRpYS9z dW54aS9LY29uZmlnIg0KPiAgDQo+ICBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9tZWRpYS90ZWdy YS12ZGUvS2NvbmZpZyINCj4gIA0KPiArc291cmNlICJkcml2ZXJzL3N0YWdpbmcvbWVkaWEvdGVn cmEvS2NvbmZpZyINCj4gKw0KPiAgc291cmNlICJkcml2ZXJzL3N0YWdpbmcvbWVkaWEvaXB1My9L Y29uZmlnIg0KPiAgDQo+ICBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9tZWRpYS9zb2NfY2FtZXJh L0tjb25maWciDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvTWFrZWZpbGUg Yi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvTWFrZWZpbGUNCj4gaW5kZXggZWE5ZmNlODAxNGJiLi42 N2EyMmFjNzA5ZTggMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9NYWtlZmls ZQ0KPiArKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvTWFrZWZpbGUNCj4gQEAgLTEwLDMgKzEw LDQgQEAgb2JqLSQoQ09ORklHX1ZJREVPX0lQVTNfSU1HVSkJKz0gaXB1My8NCj4gIG9iai0kKENP TkZJR19TT0NfQ0FNRVJBKQkrPSBzb2NfY2FtZXJhLw0KPiAgb2JqLSQoQ09ORklHX1BIWV9ST0NL Q0hJUF9EUEhZX1JYMCkJKz0gcGh5LXJvY2tjaGlwLWRwaHktcngwLw0KPiAgb2JqLSQoQ09ORklH X1ZJREVPX1JPQ0tDSElQX0lTUDEpCSs9IHJraXNwMS8NCj4gK29iai0kKENPTkZJR19WSURFT19U RUdSQSkJKz0gdGVncmEvDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvdGVn cmEvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS90ZWdyYS9LY29uZmlnDQo+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uNDQzYjk5ZjJlMmM5DQo+IC0t LSAvZGV2L251bGwNCj4gKysrIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL3RlZ3JhL0tjb25maWcN Cj4gQEAgLTAsMCArMSwxMiBAQA0KPiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MC1vbmx5DQo+ICtjb25maWcgVklERU9fVEVHUkENCj4gKwl0cmlzdGF0ZSAiTlZJRElBIFRlZ3Jh IFZJIGRyaXZlciINCj4gKwlkZXBlbmRzIG9uIEFSQ0hfVEVHUkEgfHwgKEFSTSAmJiBDT01QSUxF X1RFU1QpDQo+ICsJZGVwZW5kcyBvbiBDT01NT05fQ0xLDQo+ICsJZGVwZW5kcyBvbiBWSURFT19W NEwyICYmIFZJREVPX1Y0TDJfU1VCREVWX0FQSQ0KPiArCWRlcGVuZHMgb24gTUVESUFfQ09OVFJP TExFUg0KPiArCXNlbGVjdCBURUdSQV9IT1NUMVgNCj4gKwlzZWxlY3QgVklERU9CVUYyX0RNQV9D T05USUcNCj4gKwlzZWxlY3QgVjRMMl9GV05PREUNCj4gKwloZWxwDQo+ICsJICBTYXkgeWVzIGhl cmUgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIFRlZ3JhIHZpZGVvIGlucHV0IGhhcmR3YXJlDQo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvdGVncmEvTWFrZWZpbGUgYi9kcml2ZXJz L3N0YWdpbmcvbWVkaWEvdGVncmEvTWFrZWZpbGUNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4g aW5kZXggMDAwMDAwMDAwMDAwLi4wMDNkMjM0NDRkNDkNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysg Yi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvdGVncmEvTWFrZWZpbGUNCj4gQEAgLTAsMCArMSwxMSBA QA0KPiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPiArdGVncmEtdmlkZW8t eSA6PSBcDQo+ICsJCWhvc3QxeC12aWRlby5vIFwNCj4gKwkJdGVncmEtY2hhbm5lbC5vIFwNCj4g KwkJdGVncmEtY29yZS5vIFwNCj4gKwkJY3NpMl9mb3BzLm8gXA0KPiArCQl2aTJfZm9wcy5vIFwN Cj4gKwkJdGVncmEtdmkubyBcDQo+ICsJCXRlZ3JhLWNzaS5vDQo+ICsNCj4gK29iai0kKENPTkZJ R19WSURFT19URUdSQSkgKz0gdGVncmEtdmlkZW8ubw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9z dGFnaW5nL21lZGlhL3RlZ3JhL1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvdGVncmEvVE9E Tw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLmQ3ZDY0YjEz NTM1ZQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS90ZWdy YS9UT0RPDQo+IEBAIC0wLDAgKzEsMTAgQEANCj4gK1RPRE8gbGlzdA0KPiArKiBDdXJyZW50bHkg ZHJpdmVyIHN1cHBvcnRzIFRlZ3JhIGJ1aWxkLWluIFRQRyBPbmx5IHdpdGggZGlyZWN0IG1lZGlh IGxpbmtzIGZyb20gQ1NJIHRvIFZJLg0KPiArICBVcGRhdGUgdGhlIGRyaXZlciB0byBkbyBUUEcg VnMgU2Vuc29yIG1lZGlhIGxpbmtzIGJhc2VkIG9uIHRoZSBrZXJuZWwgY29uZmlnIENPTkZJR19W SURFT19URUdSQV9UUEcuDQo+ICsqIEFkZCByZWFsIGNhbWVyYSBzZW5zb3IgY2FwdHVyZSBzdXBw b3J0DQo+ICsqIEFkZCBSQVcxMCBwYWNrZWQgdmlkZW8gZm9ybWF0IHN1cHBvcnQgdG8gVGVncmEy MTAgdmlkZW8gZm9ybWF0cw0KPiArKiBBZGQgVGVncmEgQ1NJIE1JUEkgcGFkcyBjYWxpYnJhdGlv bg0KPiArKiBBZGQgTUlQSSBjbG9jayBTZXR0bGUgdGltZSBjb21wdXRhdGlvbiBiYXNlZCBvbiB0 aGUgZGF0YSByYXRlDQo+ICsqIEFkZCBzdXBwb3J0IGZvciBHYW5nZWQgbW9kZQ0KPiArKiBNYWtl IHN1cmUgdjRsMi1jb21wbGlhbmNlIHRlc3RzIHBhc3Mgd2l0aCBhbGwgb2YgdGhlIGFib3ZlIGlt cGxlbWVudGF0aW9ucy4NCj4gKyogQWRkIFNNTVUgc3VwcG9ydCBmb3IgVkkgdG8gYXZvaWQgY21h X2FsbG9jIGZhaWx1cmVzIHdpdGggaGlnaGVyIHJlc29sdXRpb25zIG9mIHNvbWUgdmlkZW8gZm9y bWF0cy4NCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS90ZWdyYS9jc2kuaCBi L2RyaXZlcnMvc3RhZ2luZy9tZWRpYS90ZWdyYS9jc2kuaA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLjgxY2RkYTRiNmJkZA0KPiAtLS0gL2Rldi9udWxsDQo+ ICsrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS90ZWdyYS9jc2kuaA0KPiBAQCAtMCwwICsxLDEx MSBAQA0KPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQ0KPiArLyoN Cj4gKyAqIENvcHlyaWdodCAoQykgMjAyMCBOVklESUEgQ09SUE9SQVRJT04uICBBbGwgcmlnaHRz IHJlc2VydmVkLg0KPiArICovDQo+ICsNCj4gKyNpZm5kZWYgX19DU0lfSF8NCj4gKyNkZWZpbmUg X19DU0lfSF8NCj4gKw0KPiArI2luY2x1ZGUgPG1lZGlhL21lZGlhLWRldmljZS5oPg0KPiArI2lu Y2x1ZGUgPG1lZGlhL21lZGlhLWVudGl0eS5oPg0KPiArI2luY2x1ZGUgPG1lZGlhL3Y0bDItYXN5 bmMuaD4NCj4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLWN0cmxzLmg+DQo+ICsjaW5jbHVkZSA8bWVk aWEvdjRsMi1kZXZpY2UuaD4NCj4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldi5oPg0KPiArI2lu Y2x1ZGUgPG1lZGlhL3ZpZGVvYnVmMi12NGwyLmg+DQo+ICsNCj4gKy8qDQo+ICsgKiBFYWNoIENT SSBicmljayBzdXBwb3J0cyBtYXggb2YgNCBsYW5lcyB0aGF0IGNhbiBiZSB1c2VkIGFzIGVpdGhl cg0KPiArICogb25lIHg0IHBvcnQgdXNpbmcgYm90aCBDSUxBIGFuZCBDSUxCIHBhcnRpdGlvbnMg b2YgYSBDU0kgYnJpY2sgb3IgY2FuDQo+ICsgKiBiZSB1c2VkIGFzIHR3byB4MiBwb3J0cyB3aXRo IG9uZSB4MiBmcm9tIENJTEEgYW5kIHRoZSBvdGhlciB4MiBmcm9tDQo+ICsgKiBDSUxCLg0KPiAr ICovDQo+ICsjZGVmaW5lIENTSV9MQU5FU19QRVJfQlJJQ0sJNA0KPiArI2RlZmluZSBDU0lfUE9S VFNfUEVSX0JSSUNLCTINCj4gKw0KPiArLyogZWFjaCBDU0kgY2hhbm5lbCBjYW4gaGF2ZSBvbmUg c2luayBhbmQgb25lIHNvdXJjZSBwYWRzICovDQo+ICsjZGVmaW5lIFRFR1JBX0NTSV9QQURTX05V TQkyDQo+ICsNCj4gK2VudW0gdGVncmFfY3NpX2NpbF9wb3J0IHsNCj4gKwlQT1JUX0EgPSAwLA0K PiArCVBPUlRfQiwNCj4gK307DQo+ICsNCj4gK2VudW0gdGVncmFfY3NpX2Jsb2NrIHsNCj4gKwlD U0lfQ0lMX0FCID0gMCwNCj4gKwlDU0lfQ0lMX0NELA0KPiArCUNTSV9DSUxfRUYsDQo+ICt9Ow0K PiArDQo+ICtzdHJ1Y3QgdGVncmFfY3NpX2RldmljZTsNCj4gKw0KPiArc3RydWN0IHRlZ3JhX2Nz aV9wb3J0IHsNCj4gKwl2b2lkIF9faW9tZW0gKnBpeGVsX3BhcnNlcjsNCj4gKwl2b2lkIF9faW9t ZW0gKmNpbGE7DQo+ICsJdm9pZCBfX2lvbWVtICpjaWxiOw0KPiArCXZvaWQgX19pb21lbSAqdHBn Ow0KPiArDQo+ICsJLyogb25lIHBhaXIgb2Ygc2luay9zb3VyY2UgcGFkIGhhcyBvbmUgZm9ybWF0 ICovDQo+ICsJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCBmb3JtYXQ7DQo+ICsJdW5zaWduZWQg aW50IGxhbmVzOw0KPiArfTsNCj4gKw0KPiArc3RydWN0IHRlZ3JhX2NzaV9jaGFubmVsIHsNCj4g KwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7DQo+ICsJc3RydWN0IHY0bDJfc3ViZGV2IHN1YmRldjsN Cj4gKwlzdHJ1Y3QgbWVkaWFfcGFkIHBhZHNbVEVHUkFfQ1NJX1BBRFNfTlVNXTsNCj4gKwlzdHJ1 Y3QgZGV2aWNlX25vZGUgKm9mX25vZGU7DQo+ICsJc3RydWN0IHRlZ3JhX2NzaV9kZXZpY2UgKmNz aTsNCj4gKwlzdHJ1Y3QgdGVncmFfY3NpX3BvcnQgKnBvcnRzOw0KPiArCXVuc2lnbmVkIGludCBu dW1sYW5lczsNCj4gKwl1bnNpZ25lZCBpbnQgbnVtcGFkczsNCj4gKwl1OCBjc2lfcG9ydF9udW07 DQo+ICsNCj4gKwkvKiBwcm90ZWN0cyBjc2kgY2hhbm5lbCBwb3J0cyBmb3JtYXQgZmllbGRzICov DQo+ICsJc3RydWN0IG11dGV4IGZvcm1hdF9sb2NrOw0KPiArfTsNCj4gKw0KPiArc3RydWN0IHRl Z3JhX2NzaV9zb2NfZGF0YSB7DQo+ICsJY29uc3Qgc3RydWN0IHRlZ3JhX2NzaV9mb3BzICpjc2lf Zm9wczsNCj4gKwl1bnNpZ25lZCBpbnQgY2lsX21heF9jbGtfaHo7DQo+ICsJdW5zaWduZWQgaW50 IG51bV90cGdfY2hhbm5lbHM7DQo+ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAqIHN0cnVjdCB0ZWdy YV9jc2lfZGV2aWNlIC0gTlZJRElBIFRlZ3JhIENTSSBkZXZpY2Ugc3RydWN0dXJlDQo+ICsgKiBA ZGV2OiBkZXZpY2Ugc3RydWN0DQo+ICsgKiBAY2xpZW50OiBob3N0MXhfY2xpZW50IHN0cnVjdA0K PiArICoNCj4gKyAqIEBpb21lbTogcmVnaXN0ZXIgYmFzZQ0KPiArICogQGNzaV9jbGs6IGNsb2Nr IGZvciBDU0kNCj4gKyAqIEBjaWxhYl9jbGs6IGNsb2NrIGZvciBDSUwgQUINCj4gKyAqIEBjaWxj ZF9jbGs6IGNsb2NrIGZvciBDSUwgQ0QNCj4gKyAqIEBjaWxlZl9jbGs6IGNsb2NrIGZvciBDSUwg RUYNCj4gKyAqIEB0cGdfY2xrOiBjbG9jayBmb3IgaW50ZXJuYWwgQ1NJIFRQRyBsb2dpYw0KPiAr ICoNCj4gKyAqIEBzb2NfZGF0YTogcG9pbnRlciB0byBTb0MgZGF0YSBzdHJ1Y3R1cmUNCj4gKyAq IEBmb3BzOiBjc2kgb3BlcmF0aW9ucw0KPiArICoNCj4gKyAqIEBjaGFubmVsczogbGlzdCBvZiBD U0kgY2hhbm5lbHMNCj4gKyAqLw0KPiArc3RydWN0IHRlZ3JhX2NzaV9kZXZpY2Ugew0KPiArCXN0 cnVjdCBkZXZpY2UgKmRldjsNCj4gKwlzdHJ1Y3QgaG9zdDF4X2NsaWVudCBjbGllbnQ7DQo+ICsN Cj4gKwl2b2lkIF9faW9tZW0gKmlvbWVtOw0KPiArCXN0cnVjdCBjbGsgKmNzaV9jbGs7DQo+ICsJ c3RydWN0IGNsayAqY2lsYWJfY2xrOw0KPiArCXN0cnVjdCBjbGsgKmNpbGNkX2NsazsNCj4gKwlz dHJ1Y3QgY2xrICpjaWxlZl9jbGs7DQo+ICsJc3RydWN0IGNsayAqdHBnX2NsazsNCj4gKwlhdG9t aWNfdCBjbGtfcmVmY250Ow0KPiArDQo+ICsJY29uc3Qgc3RydWN0IHRlZ3JhX2NzaV9zb2NfZGF0 YSAqc29jX2RhdGE7DQo+ICsJY29uc3Qgc3RydWN0IHRlZ3JhX2NzaV9mb3BzICpmb3BzOw0KPiAr DQo+ICsJc3RydWN0IGxpc3RfaGVhZCBjc2lfY2hhbnM7DQo+ICt9Ow0KPiArDQo+ICt2b2lkIHRl Z3JhX2NzaV9lcnJvcl9zdGF0dXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXYpOw0KPiArDQo+ ICsjZW5kaWYNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS90ZWdyYS9jc2ky X2ZvcHMuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS90ZWdyYS9jc2kyX2ZvcHMuYw0KPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLjVmMmY3YmQzYWU1MA0KPiAt LS0gL2Rldi9udWxsDQo+ICsrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS90ZWdyYS9jc2kyX2Zv cHMuYw0KPiBAQCAtMCwwICsxLDMzNSBAQA0KPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAtb25seQ0KPiArLyoNCj4gKyAqIENvcHlyaWdodCAoQykgMjAyMCBOVklESUEgQ09S UE9SQVRJT04uICBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPiArICovDQo+ICsNCj4gKyNpbmNsdWRl IDxsaW51eC9jbGsuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9jbGsvdGVncmEuaD4NCj4gKyNpbmNs dWRlIDxsaW51eC9kZWxheS5oPg0KPiArDQo+ICsjaW5jbHVkZSAidmkyX3JlZ2lzdGVycy5oIg0K PiArI2luY2x1ZGUgIm1jX2NvbW1vbi5oIg0KPiArI2luY2x1ZGUgImNzaTJfZm9wcy5oIg0KPiAr I2luY2x1ZGUgImNzaS5oIg0KPiArDQo+ICsvKiBDU0kgYmxvY2sgcmVnaXN0ZXJzIG9mZnNldCAq Lw0KPiArI2RlZmluZSBURUdSQTIxMF9DU0lfUE9SVF9PRkZTRVQJCTB4MzQNCj4gKy8qIENTSSBD SUwgcGFyaXRpb24gcmVnaXN0ZXJzIG9mZnNldCAqLw0KPiArI2RlZmluZSBURUdSQTIxMF9DU0lf Q0lMX09GRlNFVAkJCTB4MGY0DQo+ICsvKiBDU0kgVFBHIHJlZ2lzdGVycyBvZmZzZXQgKi8NCj4g KyNkZWZpbmUgVEVHUkEyMTBfQ1NJX1RQR19PRkZTRVQJCQkweDE4Yw0KPiArDQo+ICsjZGVmaW5l IENTSV9QUF9PRkZTRVQoYmxvY2spCSgoYmxvY2spICogMHg4MDApDQo+ICsNCj4gK3N0YXRpYyB2 b2lkIGNzaV93cml0ZShzdHJ1Y3QgdGVncmFfY3NpX2NoYW5uZWwgKmNoYW4sIHU4IGJsb2NrLA0K PiArCQkgICAgICB1bnNpZ25lZCBpbnQgYWRkciwgdTMyIHZhbCkNCj4gK3sNCj4gKwl2b2lkIF9f aW9tZW0gKmNzaV9wcF9iYXNlOw0KPiArDQo+ICsJY3NpX3BwX2Jhc2UgPSBjaGFuLT5jc2ktPmlv bWVtICsgQ1NJX1BQX09GRlNFVChibG9jayk7DQo+ICsJd3JpdGVsKHZhbCwgY3NpX3BwX2Jhc2Ug KyBhZGRyKTsNCj4gK30NCj4gKw0KPiArLyogUGl4ZWwgcGFyc2VyIHJlZ2lzdGVycyBhY2Nlc3Nv cnMgKi8NCj4gK3N0YXRpYyB2b2lkIHBwX3dyaXRlKHN0cnVjdCB0ZWdyYV9jc2lfcG9ydCAqcG9y dCwgdTMyIGFkZHIsIHUzMiB2YWwpDQo+ICt7DQo+ICsJd3JpdGVsKHZhbCwgcG9ydC0+cGl4ZWxf cGFyc2VyICsgYWRkcik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB1MzIgcHBfcmVhZChzdHJ1Y3Qg dGVncmFfY3NpX3BvcnQgKnBvcnQsIHUzMiBhZGRyKQ0KPiArew0KPiArCXJldHVybiByZWFkbChw b3J0LT5waXhlbF9wYXJzZXIgKyBhZGRyKTsNCj4gK30NCj4gKw0KPiArLyogQ1NJIENJTCBBL0Ig cG9ydCByZWdpc3RlcnMgYWNjZXNzb3JzICovDQo+ICtzdGF0aWMgdm9pZCBjaWxfd3JpdGUoc3Ry dWN0IHRlZ3JhX2NzaV9wb3J0ICpwb3J0LCB1OCBwb3J0X2lkLA0KPiArCQkgICAgICB1MzIgYWRk ciwgdTMyIHZhbCkNCj4gK3sNCj4gKwlpZiAocG9ydF9pZCAmIFBPUlRfQikNCj4gKwkJd3JpdGVs KHZhbCwgcG9ydC0+Y2lsYiArIGFkZHIpOw0KPiArCWVsc2UNCj4gKwkJd3JpdGVsKHZhbCwgcG9y dC0+Y2lsYSArIGFkZHIpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdTMyIGNpbF9yZWFkKHN0cnVj dCB0ZWdyYV9jc2lfcG9ydCAqcG9ydCwgdTggcG9ydF9pZCwNCj4gKwkJICAgIHUzMiBhZGRyKQ0K PiArew0KPiArCWlmIChwb3J0X2lkICYgUE9SVF9CKQ0KPiArCQlyZXR1cm4gcmVhZGwocG9ydC0+ Y2lsYiArIGFkZHIpOw0KPiArCWVsc2UNCj4gKwkJcmV0dXJuIHJlYWRsKHBvcnQtPmNpbGEgKyBh ZGRyKTsNCj4gK30NCj4gKw0KPiArLyogVGVzdCBwYXR0ZXJuIGdlbmVyYXRvciByZWdpc3RlcnMg YWNjZXNzb3IgKi8NCj4gK3N0YXRpYyB2b2lkIHRwZ193cml0ZShzdHJ1Y3QgdGVncmFfY3NpX3Bv cnQgKnBvcnQsIHVuc2lnbmVkIGludCBhZGRyLCB1MzIgdmFsKQ0KPiArew0KPiArCXdyaXRlbCh2 YWwsIHBvcnQtPnRwZyArIGFkZHIpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBjc2kyX2Vy cm9yX3N0YXR1cyhzdHJ1Y3QgdGVncmFfY3NpX2NoYW5uZWwgKmNzaV9jaGFuKQ0KPiArew0KPiAr CXN0cnVjdCB0ZWdyYV9jc2lfZGV2aWNlICpjc2kgPSBjc2lfY2hhbi0+Y3NpOw0KPiArCXVuc2ln bmVkIGludCBwb3J0X251bSA9IGNzaV9jaGFuLT5jc2lfcG9ydF9udW07DQo+ICsJc3RydWN0IHRl Z3JhX2NzaV9wb3J0ICpwb3J0ID0gY3NpX2NoYW4tPnBvcnRzOw0KPiArCXUzMiB2YWw7DQo+ICsN Cj4gKwl2YWwgPSBwcF9yZWFkKHBvcnQsIFRFR1JBX0NTSV9QSVhFTF9QQVJTRVJfU1RBVFVTKTsN Cj4gKwlkZXZfZXJyKGNzaS0+ZGV2LCAiVEVHUkFfQ1NJX1BJWEVMX1BBUlNFUl9TVEFUVVMgMHgl MDh4XG4iLCB2YWwpOw0KPiArDQo+ICsJdmFsID0gY2lsX3JlYWQocG9ydCwgcG9ydF9udW0sIFRF R1JBX0NTSV9DSUxfU1RBVFVTKTsNCj4gKwlkZXZfZXJyKGNzaS0+ZGV2LCAiVEVHUkFfQ1NJX0NJ TF9TVEFUVVMgMHglMDh4XG4iLCB2YWwpOw0KPiArDQo+ICsJdmFsID0gY2lsX3JlYWQocG9ydCwg cG9ydF9udW0sIFRFR1JBX0NTSV9DSUxYX1NUQVRVUyk7DQo+ICsJZGV2X2Vycihjc2ktPmRldiwg IlRFR1JBX0NTSV9DSUxYX1NUQVRVUyAweCUwOHhcbiIsIHZhbCk7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyBpbnQgY3NpMl9zdGFydF9zdHJlYW1pbmcoc3RydWN0IHRlZ3JhX2NzaV9jaGFubmVsICpj c2lfY2hhbiwNCj4gKwkJCQl1OCBwZ19tb2RlLCBpbnQgZW5hYmxlKQ0KPiArew0KPiArCXN0cnVj dCB0ZWdyYV9jc2lfZGV2aWNlICpjc2kgPSBjc2lfY2hhbi0+Y3NpOw0KPiArCXVuc2lnbmVkIGlu dCBwb3J0X251bSA9IGNzaV9jaGFuLT5jc2lfcG9ydF9udW07DQo+ICsJdW5zaWduZWQgaW50IGJs b2NrID0gcG9ydF9udW0gPj4gMTsNCj4gKwlzdHJ1Y3QgdGVncmFfY3NpX3BvcnQgKnBvcnQgPSBj c2lfY2hhbi0+cG9ydHM7DQo+ICsJdW5zaWduZWQgaW50IGNpbF9tYXhfZnJlcSA9IGNzaS0+c29j X2RhdGEtPmNpbF9tYXhfY2xrX2h6Ow0KPiArCXN0cnVjdCBjbGsgKmNpbF9jbGs7DQo+ICsJaW50 IHJldDsNCj4gKw0KPiArCWlmIChibG9jayA9PSBDU0lfQ0lMX0FCKQ0KPiArCQljaWxfY2xrID0g Y3NpLT5jaWxhYl9jbGs7DQo+ICsJZWxzZSBpZiAoYmxvY2sgPT0gQ1NJX0NJTF9DRCkNCj4gKwkJ Y2lsX2NsayA9IGNzaS0+Y2lsY2RfY2xrOw0KPiArCWVsc2UNCj4gKwkJY2lsX2NsayA9IGNzaS0+ Y2lsZWZfY2xrOw0KPiArDQo+ICsJaWYgKGVuYWJsZSkgew0KPiArCQlyZXQgPSBjbGtfc2V0X3Jh dGUoY2lsX2NsaywgY2lsX21heF9mcmVxKTsNCj4gKwkJaWYgKHJldCkNCj4gKwkJCWRldl9lcnIo Y3NpLT5kZXYsDQo+ICsJCQkJImZhaWxlZCB0byBzZXQgY2lsIGNsayByYXRlLCBlcnI6ICVkXG4i LCByZXQpOw0KPiArDQo+ICsJCS8qIGVuYWJsZSBDSUwgY2xvY2sgb24gZmlyc3Qgb3BlbiAqLw0K PiArCQlpZiAoYXRvbWljX2FkZF9yZXR1cm4oMSwgJmNzaS0+Y2xrX3JlZmNudCkgPT0gMSkgew0K PiArCQkJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGNpbF9jbGspOw0KPiArCQkJaWYgKHJldCkg ew0KPiArCQkJCWRldl9lcnIoY3NpLT5kZXYsDQo+ICsJCQkJCSJmYWlsZWQgdG8gZW5hYmxlIGNp bCBjbGssIGVycjogJWRcbiIsDQo+ICsJCQkJCXJldCk7DQo+ICsJCQkJcmV0dXJuIHJldDsNCj4g KwkJCX0NCj4gKwkJfQ0KPiArDQo+ICsJCS8qDQo+ICsJCSAqIE9uIFRlZ3JhMjEwLCBUUEcgaW50 ZXJuYWwgbG9naWMgdXNlcyBQTExEIG91dCBhbG9uZyB3aXRoDQo+ICsJCSAqIHRoZSBDSUwgY2xv Y2suDQo+ICsJCSAqIFNvLCBlbmFibGUgVFBHIGNsb2NrIGR1cmluZyBUUEcgbW9kZSBzdHJlYW1p bmcuDQo+ICsJCSAqLw0KPiArCQlpZiAocGdfbW9kZSkgew0KPiArCQkJcmV0ID0gY2xrX3NldF9y YXRlKGNzaS0+dHBnX2NsaywgVEVHUkEyMTBfVFBHX0NMT0NLKTsNCj4gKwkJCWlmIChyZXQpDQo+ ICsJCQkJZGV2X2Vycihjc2ktPmRldiwNCj4gKwkJCQkJImZhaWxlZCB0byBzZXQgdHBnIGNsayBy YXRlXG4iKTsNCj4gKw0KPiArCQkJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGNzaS0+dHBnX2Ns ayk7DQo+ICsJCQlpZiAocmV0KSB7DQo+ICsJCQkJZGV2X2Vycihjc2ktPmRldiwNCj4gKwkJCQkJ ImZhaWxlZCB0byBlbmFibGUgdHBnIGNsaywgZXJyOiAlZFxuIiwNCj4gKwkJCQkJcmV0KTsNCj4g KwkJCQlyZXR1cm4gcmV0Ow0KPiArCQkJfQ0KPiArCQl9DQo+ICsNCj4gKwkJY3NpX3dyaXRlKGNz aV9jaGFuLCBibG9jaywgVEVHUkFfQ1NJX0NMS0VOX09WRVJSSURFLCAwKTsNCj4gKw0KPiArCQkv KiBjbGVhbiB1cCBzdGF0dXMgKi8NCj4gKwkJcHBfd3JpdGUocG9ydCwgVEVHUkFfQ1NJX1BJWEVM X1BBUlNFUl9TVEFUVVMsIDB4RkZGRkZGRkYpOw0KPiArCQljaWxfd3JpdGUocG9ydCwgcG9ydF9u dW0sIFRFR1JBX0NTSV9DSUxfU1RBVFVTLCAweEZGRkZGRkZGKTsNCj4gKwkJY2lsX3dyaXRlKHBv cnQsIHBvcnRfbnVtLCBURUdSQV9DU0lfQ0lMWF9TVEFUVVMsIDB4RkZGRkZGRkYpOw0KPiArCQlj aWxfd3JpdGUocG9ydCwgcG9ydF9udW0sIFRFR1JBX0NTSV9DSUxfSU5URVJSVVBUX01BU0ssIDB4 MCk7DQo+ICsNCj4gKwkJLyogQ0lMIFBIWSByZWdpc3RlcnMgc2V0dXAgKi8NCj4gKwkJY2lsX3dy aXRlKHBvcnQsIHBvcnRfbnVtLCBURUdSQV9DU0lfQ0lMX1BBRF9DT05GSUcwLCAweDApOw0KPiAr CQljaWxfd3JpdGUocG9ydCwgcG9ydF9udW0sIFRFR1JBX0NTSV9DSUxfUEhZX0NPTlRST0wsIDB4 QSk7DQo+ICsNCj4gKwkJLyoNCj4gKwkJICogVGhlIENTSSB1bml0IHByb3ZpZGVzIGZvciBjb25u ZWN0aW9uIG9mIHVwIHRvIHNpeCBjYW1lcmFzIGluDQo+ICsJCSAqIHRoZSBzeXN0ZW0gYW5kIGlz IG9yZ2FuaXplZCBhcyB0aHJlZSBpZGVudGljYWwgaW5zdGFuY2VzIG9mDQo+ICsJCSAqIHR3byBN SVBJIHN1cHBvcnQgYmxvY2tzLCBlYWNoIHdpdGggYSBzZXBhcmF0ZSA0LWxhbmUNCj4gKwkJICog aW50ZXJmYWNlIHRoYXQgY2FuIGJlIGNvbmZpZ3VyZWQgYXMgYSBzaW5nbGUgY2FtZXJhIHdpdGgg NA0KPiArCQkgKiBsYW5lcyBvciBhcyBhIGR1YWwgY2FtZXJhIHdpdGggMiBsYW5lcyBhdmFpbGFi bGUgZm9yIGVhY2gNCj4gKwkJICogY2FtZXJhLg0KPiArCQkgKi8NCj4gKwkJaWYgKHBvcnQtPmxh bmVzID09IDQpIHsNCj4gKwkJCWNpbF93cml0ZShwb3J0LCBwb3J0X251bSwgVEVHUkFfQ1NJX0NJ TF9QQURfQ09ORklHMCwNCj4gKwkJCQkgIEJSSUNLX0NMT0NLX0FfNFgpOw0KPiArDQo+ICsJCQlj aWxfd3JpdGUocG9ydCwgKHBvcnRfbnVtICsgMSksDQo+ICsJCQkJICBURUdSQV9DU0lfQ0lMX1BB RF9DT05GSUcwLCAweDApOw0KPiArDQo+ICsJCQljaWxfd3JpdGUocG9ydCwgKHBvcnRfbnVtICsg MSksDQo+ICsJCQkJICBURUdSQV9DU0lfQ0lMX0lOVEVSUlVQVF9NQVNLLCAweDApOw0KPiArDQo+ ICsJCQljaWxfd3JpdGUocG9ydCwgKHBvcnRfbnVtICsgMSksDQo+ICsJCQkJICBURUdSQV9DU0lf Q0lMX1BIWV9DT05UUk9MLCAweEEpOw0KPiArDQo+ICsJCQljc2lfd3JpdGUoY3NpX2NoYW4sIGJs b2NrLCBURUdSQV9DU0lfUEhZX0NJTF9DT01NQU5ELA0KPiArCQkJCSAgQ1NJX0FfUEhZX0NJTF9F TkFCTEUgfCBDU0lfQl9QSFlfQ0lMX0VOQUJMRSk7DQo+ICsJCX0gZWxzZSB7DQo+ICsJCQl1MzIg dmFsID0gKChwb3J0X251bSAmIDEpID09IFBPUlRfQSkgPw0KPiArCQkJCSAgQ1NJX0FfUEhZX0NJ TF9FTkFCTEUgfCBDU0lfQl9QSFlfQ0lMX05PUCA6DQo+ICsJCQkJICBDU0lfQl9QSFlfQ0lMX0VO QUJMRSB8IENTSV9BX1BIWV9DSUxfTk9QOw0KPiArCQkJY3NpX3dyaXRlKGNzaV9jaGFuLCBibG9j aywgVEVHUkFfQ1NJX1BIWV9DSUxfQ09NTUFORCwNCj4gKwkJCQkgIHZhbCk7DQo+ICsJCX0NCj4g Kw0KPiArCQkvKiBDU0kgcGl4ZWwgcGFyc2VyIHJlZ2lzdGVycyBzZXR1cCAqLw0KPiArCQlwcF93 cml0ZShwb3J0LCBURUdSQV9DU0lfUElYRUxfU1RSRUFNX1BQX0NPTU1BTkQsDQo+ICsJCQkgKDB4 RiA8PCBDU0lfUFBfU1RBUlRfTUFSS0VSX0ZSQU1FX01BWF9PRkZTRVQpIHwNCj4gKwkJCSBDU0lf UFBfU0lOR0xFX1NIT1RfRU5BQkxFIHwgQ1NJX1BQX1JTVCk7DQo+ICsJCXBwX3dyaXRlKHBvcnQs IFRFR1JBX0NTSV9QSVhFTF9QQVJTRVJfSU5URVJSVVBUX01BU0ssIDB4MCk7DQo+ICsJCXBwX3dy aXRlKHBvcnQsIFRFR1JBX0NTSV9QSVhFTF9TVFJFQU1fQ09OVFJPTDAsDQo+ICsJCQkgQ1NJX1BQ X1BBQ0tFVF9IRUFERVJfU0VOVCB8DQo+ICsJCQkgQ1NJX1BQX0RBVEFfSURFTlRJRklFUl9FTkFC TEUgfA0KPiArCQkJIENTSV9QUF9XT1JEX0NPVU5UX1NFTEVDVF9IRUFERVIgfA0KPiArCQkJIENT SV9QUF9DUkNfQ0hFQ0tfRU5BQkxFIHwgIENTSV9QUF9XQ19DSEVDSyB8DQo+ICsJCQkgQ1NJX1BQ X09VVFBVVF9GT1JNQVRfU1RPUkUgfA0KPiArCQkJIENTSV9QUF9IRUFERVJfRUNfRElTQUJMRSB8 IENTSV9QUEFfUEFEX0ZSQU1FX05PUEFEIHwNCj4gKwkJCSAocG9ydF9udW0gJiAxKSk7DQo+ICsJ CXBwX3dyaXRlKHBvcnQsIFRFR1JBX0NTSV9QSVhFTF9TVFJFQU1fQ09OVFJPTDEsDQo+ICsJCQkg KDB4MSA8PCBDU0lfUFBfVE9QX0ZJRUxEX0ZSQU1FX09GRlNFVCkgfA0KPiArCQkJICgweDEgPDwg Q1NJX1BQX1RPUF9GSUVMRF9GUkFNRV9NQVNLX09GRlNFVCkpOw0KPiArCQlwcF93cml0ZShwb3J0 LCBURUdSQV9DU0lfUElYRUxfU1RSRUFNX0dBUCwNCj4gKwkJCSAweDE0IDw8IFBQX0ZSQU1FX01J Tl9HQVBfT0ZGU0VUKTsNCj4gKwkJcHBfd3JpdGUocG9ydCwgVEVHUkFfQ1NJX1BJWEVMX1NUUkVB TV9FWFBFQ1RFRF9GUkFNRSwgMHgwKTsNCj4gKwkJcHBfd3JpdGUocG9ydCwgVEVHUkFfQ1NJX0lO UFVUX1NUUkVBTV9DT05UUk9MLA0KPiArCQkJICgweDNmIDw8IENTSV9TS0lQX1BBQ0tFVF9USFJF U0hPTERfT0ZGU0VUKSB8DQo+ICsJCQkgKHBvcnQtPmxhbmVzIC0gMSkpOw0KPiArDQo+ICsJCS8q IFRQRyBzZXR1cCAqLw0KPiArCQlpZiAocGdfbW9kZSkgew0KPiArCQkJdHBnX3dyaXRlKHBvcnQs IFRFR1JBX0NTSV9QQVRURVJOX0dFTkVSQVRPUl9DVFJMLA0KPiArCQkJCSAgKChwZ19tb2RlIC0g MSkgPDwgUEdfTU9ERV9PRkZTRVQpIHwNCj4gKwkJCQkgIFBHX0VOQUJMRSk7DQo+ICsJCQl0cGdf d3JpdGUocG9ydCwgVEVHUkFfQ1NJX1BHX1BIQVNFLCAweDApOw0KPiArCQkJdHBnX3dyaXRlKHBv cnQsIFRFR1JBX0NTSV9QR19SRURfRlJFUSwNCj4gKwkJCQkgICgweDEwIDw8IFBHX1JFRF9WRVJU X0lOSVRfRlJFUV9PRkZTRVQpIHwNCj4gKwkJCQkgICgweDEwIDw8IFBHX1JFRF9IT1JfSU5JVF9G UkVRX09GRlNFVCkpOw0KPiArCQkJdHBnX3dyaXRlKHBvcnQsIFRFR1JBX0NTSV9QR19SRURfRlJF UV9SQVRFLCAweDApOw0KPiArCQkJdHBnX3dyaXRlKHBvcnQsIFRFR1JBX0NTSV9QR19HUkVFTl9G UkVRLA0KPiArCQkJCSAgKDB4MTAgPDwgUEdfR1JFRU5fVkVSVF9JTklUX0ZSRVFfT0ZGU0VUKSB8 DQo+ICsJCQkJICAoMHgxMCA8PCBQR19HUkVFTl9IT1JfSU5JVF9GUkVRX09GRlNFVCkpOw0KPiAr CQkJdHBnX3dyaXRlKHBvcnQsIFRFR1JBX0NTSV9QR19HUkVFTl9GUkVRX1JBVEUsIDB4MCk7DQo+ ICsJCQl0cGdfd3JpdGUocG9ydCwgVEVHUkFfQ1NJX1BHX0JMVUVfRlJFUSwNCj4gKwkJCQkgICgw eDEwIDw8IFBHX0JMVUVfVkVSVF9JTklUX0ZSRVFfT0ZGU0VUKSB8DQo+ICsJCQkJICAoMHgxMCA8 PCBQR19CTFVFX0hPUl9JTklUX0ZSRVFfT0ZGU0VUKSk7DQo+ICsJCQl0cGdfd3JpdGUocG9ydCwg VEVHUkFfQ1NJX1BHX0JMVUVfRlJFUV9SQVRFLCAweDApOw0KPiArCQl9DQo+ICsNCj4gKwkJcHBf d3JpdGUocG9ydCwgVEVHUkFfQ1NJX1BJWEVMX1NUUkVBTV9QUF9DT01NQU5ELA0KPiArCQkJICgw eEYgPDwgQ1NJX1BQX1NUQVJUX01BUktFUl9GUkFNRV9NQVhfT0ZGU0VUKSB8DQo+ICsJCQkgQ1NJ X1BQX1NJTkdMRV9TSE9UX0VOQUJMRSB8IENTSV9QUF9FTkFCTEUpOw0KPiArCX0gZWxzZSB7DQo+ ICsJCXUzMiB2YWwgPSBwcF9yZWFkKHBvcnQsIFRFR1JBX0NTSV9QSVhFTF9QQVJTRVJfU1RBVFVT KTsNCj4gKw0KPiArCQlkZXZfZGJnKGNzaS0+ZGV2LCAiVEVHUkFfQ1NJX1BJWEVMX1BBUlNFUl9T VEFUVVMgMHglMDh4XG4iLA0KPiArCQkJdmFsKTsNCj4gKw0KPiArCQl2YWwgPSBjaWxfcmVhZChw b3J0LCBwb3J0X251bSwgVEVHUkFfQ1NJX0NJTF9TVEFUVVMpOw0KPiArCQlkZXZfZGJnKGNzaS0+ ZGV2LCAiVEVHUkFfQ1NJX0NJTF9TVEFUVVMgMHglMDh4XG4iLCB2YWwpOw0KPiArDQo+ICsJCXZh bCA9IGNpbF9yZWFkKHBvcnQsIHBvcnRfbnVtLCBURUdSQV9DU0lfQ0lMWF9TVEFUVVMpOw0KPiAr CQlkZXZfZGJnKGNzaS0+ZGV2LCAiVEVHUkFfQ1NJX0NJTFhfU1RBVFVTIDB4JTA4eFxuIiwgdmFs KTsNCj4gKw0KPiArCQlwcF93cml0ZShwb3J0LCBURUdSQV9DU0lfUElYRUxfU1RSRUFNX1BQX0NP TU1BTkQsDQo+ICsJCQkgKDB4RiA8PCBDU0lfUFBfU1RBUlRfTUFSS0VSX0ZSQU1FX01BWF9PRkZT RVQpIHwNCj4gKwkJCSBDU0lfUFBfRElTQUJMRSk7DQo+ICsNCj4gKwkJaWYgKHBnX21vZGUpIHsN Cj4gKwkJCXRwZ193cml0ZShwb3J0LCBURUdSQV9DU0lfUEFUVEVSTl9HRU5FUkFUT1JfQ1RSTCwN Cj4gKwkJCQkgICgocGdfbW9kZSAtIDEpIDw8IFBHX01PREVfT0ZGU0VUKSB8DQo+ICsJCQkJICBQ R19ESVNBQkxFKTsNCj4gKwkJCWNsa19kaXNhYmxlX3VucHJlcGFyZShjc2ktPnRwZ19jbGspOw0K PiArCQl9DQo+ICsNCj4gKwkJaWYgKHBvcnQtPmxhbmVzID09IDQpIHsNCj4gKwkJCWNzaV93cml0 ZShjc2lfY2hhbiwgYmxvY2ssIFRFR1JBX0NTSV9QSFlfQ0lMX0NPTU1BTkQsDQo+ICsJCQkJICBD U0lfQV9QSFlfQ0lMX0RJU0FCTEUgfA0KPiArCQkJCSAgQ1NJX0JfUEhZX0NJTF9ESVNBQkxFKTsN Cj4gKw0KPiArCQl9IGVsc2Ugew0KPiArCQkJdTMyIHZhbCA9ICgocG9ydF9udW0gJiAxKSA9PSBQ T1JUX0EpID8NCj4gKwkJCQkgIENTSV9BX1BIWV9DSUxfRElTQUJMRSB8IENTSV9CX1BIWV9DSUxf Tk9QIDoNCj4gKwkJCQkgIENTSV9CX1BIWV9DSUxfRElTQUJMRSB8IENTSV9BX1BIWV9DSUxfTk9Q Ow0KPiArCQkJY3NpX3dyaXRlKGNzaV9jaGFuLCBibG9jaywgVEVHUkFfQ1NJX1BIWV9DSUxfQ09N TUFORCwNCj4gKwkJCQkgIHZhbCk7DQo+ICsJCX0NCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsN Cj4gK30NCj4gKw0KPiArc3RhdGljIGludCBjc2kyX2h3X2luaXQoc3RydWN0IHRlZ3JhX2NzaV9k ZXZpY2UgKmNzaSkNCj4gK3sNCj4gKwlzdHJ1Y3QgdGVncmFfY3NpX2NoYW5uZWwgKmNzaV9jaGFu Ow0KPiArCXN0cnVjdCB0ZWdyYV9jc2lfcG9ydCAqcG9ydDsNCj4gKwl1OCBwb3J0bm87DQo+ICsJ aW50IHJldDsNCj4gKw0KPiArCWNzaS0+Y2lsYWJfY2xrID0gZGV2bV9jbGtfZ2V0KGNzaS0+ZGV2 LCAiY2lsYWIiKTsNCj4gKwlpZiAoSVNfRVJSKGNzaS0+Y2lsYWJfY2xrKSkgew0KPiArCQlkZXZf ZXJyKGNzaS0+ZGV2LCAiRmFpbGVkIHRvIGdldCBjaWxhYiBjbG9ja1xuIik7DQo+ICsJCXJldHVy biBQVFJfRVJSKGNzaS0+Y2lsYWJfY2xrKTsNCj4gKwl9DQo+ICsNCj4gKwljc2ktPmNpbGNkX2Ns ayA9IGRldm1fY2xrX2dldChjc2ktPmRldiwgImNpbGNkIik7DQo+ICsJaWYgKElTX0VSUihjc2kt PmNpbGNkX2NsaykpIHsNCj4gKwkJZGV2X2Vycihjc2ktPmRldiwgIkZhaWxlZCB0byBnZXQgY2ls Y2QgY2xvY2tcbiIpOw0KPiArCQlyZXR1cm4gUFRSX0VSUihjc2ktPmNpbGNkX2Nsayk7DQo+ICsJ fQ0KPiArDQo+ICsJY3NpLT5jaWxlZl9jbGsgPSBkZXZtX2Nsa19nZXQoY3NpLT5kZXYsICJjaWxl Iik7DQo+ICsJaWYgKElTX0VSUihjc2ktPmNpbGVmX2NsaykpIHsNCj4gKwkJZGV2X2Vycihjc2kt PmRldiwgIkZhaWxlZCB0byBnZXQgY2lsZSBjbG9ja1xuIik7DQo+ICsJCXJldHVybiBQVFJfRVJS KGNzaS0+Y2lsZWZfY2xrKTsNCj4gKwl9DQo+ICsNCj4gKwljc2ktPnRwZ19jbGsgPSBkZXZtX2Ns a19nZXQoY3NpLT5kZXYsICJjc2lfdHBnIik7DQo+ICsJaWYgKElTX0VSUihjc2ktPnRwZ19jbGsp KSB7DQo+ICsJCWRldl9lcnIoY3NpLT5kZXYsICJGYWlsZWQgdG8gZ2V0IGNzaV90cGcgY2xvY2tc biIpOw0KPiArCQlyZXR1cm4gUFRSX0VSUihjc2ktPnRwZ19jbGspOw0KPiArCX0NCj4gKw0KPiAr CWNzaS0+Y3NpX2NsayA9IGRldm1fY2xrX2dldChjc2ktPmRldiwgImNzaSIpOw0KPiArCWlmIChJ U19FUlIoY3NpLT5jc2lfY2xrKSkgew0KPiArCQlkZXZfZXJyKGNzaS0+ZGV2LCAiRmFpbGVkIHRv IGdldCBjc2kgY2xvY2tcbiIpOw0KPiArCQlyZXR1cm4gUFRSX0VSUihjc2ktPmNzaV9jbGspOw0K PiArCX0NCj4gKw0KPiArCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShjc2ktPmNzaV9jbGspOw0K PiArCWlmIChyZXQpIHsNCj4gKwkJZGV2X2Vycihjc2ktPmRldiwgIkZhaWxlZCB0byBlbmFibGUg Y3NpIGNsaywgZXJyOiAlZFxuIiwgcmV0KTsNCj4gKwkJcmV0dXJuIHJldDsNCj4gKwl9DQo+ICsN Cj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNzaV9jaGFuLCAmY3NpLT5jc2lfY2hhbnMsIGxpc3Qp IHsNCj4gKwkJdm9pZCBfX2lvbWVtICpjc2lfcHBfYmFzZTsNCj4gKw0KPiArCQlwb3J0ID0gY3Np X2NoYW4tPnBvcnRzOw0KPiArCQlwb3J0bm8gPSBjc2lfY2hhbi0+Y3NpX3BvcnRfbnVtOw0KPiAr CQljc2lfcHBfYmFzZSA9IGNzaS0+aW9tZW0gKyBDU0lfUFBfT0ZGU0VUKHBvcnRubyA+PiAxKTsN Cj4gKwkJcG9ydC0+cGl4ZWxfcGFyc2VyID0gY3NpX3BwX2Jhc2UgKw0KPiArCQkJCSAgICAgKHBv cnRubyAlIENTSV9QT1JUU19QRVJfQlJJQ0spICoNCj4gKwkJCQkgICAgIFRFR1JBMjEwX0NTSV9Q T1JUX09GRlNFVDsNCj4gKwkJcG9ydC0+Y2lsYSA9IGNzaV9wcF9iYXNlICsgVEVHUkEyMTBfQ1NJ X0NJTF9PRkZTRVQ7DQo+ICsJCXBvcnQtPmNpbGIgPSBwb3J0LT5jaWxhICsgVEVHUkEyMTBfQ1NJ X1BPUlRfT0ZGU0VUOw0KPiArCQlwb3J0LT50cGcgPSBwb3J0LT5waXhlbF9wYXJzZXIgKyBURUdS QTIxMF9DU0lfVFBHX09GRlNFVDsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4g Kw0KPiArY29uc3Qgc3RydWN0IHRlZ3JhX2NzaV9mb3BzIGNzaTJfZm9wcyA9IHsNCj4gKwkuaHdf aW5pdCA9IGNzaTJfaHdfaW5pdCwNCj4gKwkuY3NpX3N0YXJ0X3N0cmVhbWluZyA9IGNzaTJfc3Rh cnRfc3RyZWFtaW5nLA0KPiArCS5jc2lfZXJyX3N0YXR1cyA9IGNzaTJfZXJyb3Jfc3RhdHVzLA0K PiArfTsNCj4gK0VYUE9SVF9TWU1CT0woY3NpMl9mb3BzKTsNCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvc3RhZ2luZy9tZWRpYS90ZWdyYS9jc2kyX2ZvcHMuaCBiL2RyaXZlcnMvc3RhZ2luZy9tZWRp YS90ZWdyYS9jc2kyX2ZvcHMuaA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAw MDAwMDAwMDAuLmNmMjJhMjhjZWIxZg0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2RyaXZlcnMv c3RhZ2luZy9tZWRpYS90ZWdyYS9jc2kyX2ZvcHMuaA0KPiBAQCAtMCwwICsxLDE1IEBADQo+ICsv LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5DQo+ICsvKg0KPiArICogQ29w eXJpZ2h0IChDKSAyMDIwIE5WSURJQSBDT1JQT1JBVElPTi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu DQo+ICsgKi8NCj4gKw0KPiArI2lmbmRlZiBfX0NTSTJfSF9fDQo+ICsjZGVmaW5lIF9fQ1NJMl9I X18NCj4gKw0KPiArI2RlZmluZQlURUdSQTIxMF9UUEdfQ0xPQ0sJCTU5NDAwMDAwMA0KPiArI2Rl ZmluZQlURUdSQTIxMF9DU0lfQ0lMX0NMS19NQVgJMTAyMDAwMDAwDQo+ICsjZGVmaW5lIFRFR1JB MjEwX0NTSV9CUklDS1NfTUFYCQkzDQo+ICsNCj4gK2V4dGVybiBjb25zdCBzdHJ1Y3QgdGVncmFf Y3NpX2ZvcHMgY3NpMl9mb3BzOw0KPiArDQo+ICsjZW5kaWYNCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvc3RhZ2luZy9tZWRpYS90ZWdyYS9ob3N0MXgtdmlkZW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9t ZWRpYS90ZWdyYS9ob3N0MXgtdmlkZW8uYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRl eCAwMDAwMDAwMDAwMDAuLjc0MDgwNjEyMWU2Yg0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2Ry aXZlcnMvc3RhZ2luZy9tZWRpYS90ZWdyYS9ob3N0MXgtdmlkZW8uYw0KPiBAQCAtMCwwICsxLDEy MCBAQA0KPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQ0KPiArLyoN Cj4gKyAqIENvcHlyaWdodCAoQykgMjAyMCBOVklESUEgQ09SUE9SQVRJT04uICBBbGwgcmlnaHRz IHJlc2VydmVkLg0KPiArICovDQo+ICsNCj4gKyNpbmNsdWRlIDxsaW51eC9ob3N0MXguaD4NCj4g KyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9k ZXZpY2UuaD4NCj4gKw0KPiArI2luY2x1ZGUgImhvc3QxeC12aWRlby5oIg0KPiArDQo+ICtzdGF0 aWMgaW50IGhvc3QxeF92aWRlb19wcm9iZShzdHJ1Y3QgaG9zdDF4X2RldmljZSAqZGV2KQ0KPiAr ew0KPiArCXN0cnVjdCB0ZWdyYV9jYW1lcmEgKmNhbTsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJ Y2FtID0gZGV2bV9remFsbG9jKCZkZXYtPmRldiwgc2l6ZW9mKCpjYW0pLCBHRlBfS0VSTkVMKTsN Cj4gKwlpZiAoIWNhbSkNCj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ICsNCj4gKwljYW0tPmRldiA9 IGdldF9kZXZpY2UoJmRldi0+ZGV2KTsNCj4gKwljYW0tPm1lZGlhX2Rldi5kZXYgPSBjYW0tPmRl djsNCj4gKwlzdHJzY3B5KGNhbS0+bWVkaWFfZGV2Lm1vZGVsLCAiTlZJRElBIFRlZ3JhIFZpZGVv IElucHV0IERldmljZSIsDQo+ICsJCXNpemVvZihjYW0tPm1lZGlhX2Rldi5tb2RlbCkpOw0KPiAr CWNhbS0+bWVkaWFfZGV2Lmh3X3JldmlzaW9uID0gMzsNCj4gKw0KPiArCW1lZGlhX2RldmljZV9p bml0KCZjYW0tPm1lZGlhX2Rldik7DQo+ICsJcmV0ID0gbWVkaWFfZGV2aWNlX3JlZ2lzdGVyKCZj YW0tPm1lZGlhX2Rldik7DQo+ICsJaWYgKHJldCA8IDApIHsNCj4gKwkJZGV2X2VycihjYW0tPmRl diwgImZhaWxlZCB0byByZWdpc3RlciBtZWRpYSBkZXZpY2U6ICVkXG4iLCByZXQpOw0KPiArCQly ZXR1cm4gcmV0Ow0KPiArCX0NCj4gKw0KPiArCWNhbS0+djRsMl9kZXYubWRldiA9ICZjYW0tPm1l ZGlhX2RldjsNCj4gKwlyZXQgPSB2NGwyX2RldmljZV9yZWdpc3RlcihjYW0tPmRldiwgJmNhbS0+ djRsMl9kZXYpOw0KPiArCWlmIChyZXQgPCAwKSB7DQo+ICsJCWRldl9lcnIoY2FtLT5kZXYsICJW NEwyIGRldmljZSByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwgcmV0KTsNCj4gKwkJZ290byBy ZWdpc3Rlcl9lcnJvcjsNCj4gKwl9DQo+ICsNCj4gKwlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2 LCBjYW0pOw0KPiArDQo+ICsJcmV0ID0gaG9zdDF4X2RldmljZV9pbml0KGRldik7DQo+ICsJaWYg KHJldCA8IDApDQo+ICsJCWdvdG8gZGV2X2V4aXQ7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gKw0K PiArZGV2X2V4aXQ6DQo+ICsJaG9zdDF4X2RldmljZV9leGl0KGRldik7DQo+ICsJdjRsMl9kZXZp Y2VfdW5yZWdpc3RlcigmY2FtLT52NGwyX2Rldik7DQo+ICtyZWdpc3Rlcl9lcnJvcjoNCj4gKwlt ZWRpYV9kZXZpY2VfdW5yZWdpc3RlcigmY2FtLT5tZWRpYV9kZXYpOw0KPiArCW1lZGlhX2Rldmlj ZV9jbGVhbnVwKCZjYW0tPm1lZGlhX2Rldik7DQo+ICsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0K PiArDQo+ICtzdGF0aWMgaW50IGhvc3QxeF92aWRlb19yZW1vdmUoc3RydWN0IGhvc3QxeF9kZXZp Y2UgKmRldikNCj4gK3sNCj4gKwlzdHJ1Y3QgdGVncmFfY2FtZXJhICpjYW0gPSBkZXZfZ2V0X2Ry dmRhdGEoJmRldi0+ZGV2KTsNCj4gKw0KPiArCWhvc3QxeF9kZXZpY2VfZXhpdChkZXYpOw0KPiAr CXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmNhbS0+djRsMl9kZXYpOw0KPiArCW1lZGlhX2Rldmlj ZV91bnJlZ2lzdGVyKCZjYW0tPm1lZGlhX2Rldik7DQo+ICsJbWVkaWFfZGV2aWNlX2NsZWFudXAo JmNhbS0+bWVkaWFfZGV2KTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBob3N0MXhfdmlkZW9fc3ViZGV2c1tdID0gew0K PiArCXsgLmNvbXBhdGlibGUgPSAibnZpZGlhLHRlZ3JhMjEwLWNzaSIsIH0sDQo+ICsJeyAuY29t cGF0aWJsZSA9ICJudmlkaWEsdGVncmEyMTAtdmkiLCB9LA0KPiArCXsgfQ0KPiArfTsNCj4gKw0K PiArc3RhdGljIHN0cnVjdCBob3N0MXhfZHJpdmVyIGhvc3QxeF92aWRlb19kcml2ZXIgPSB7DQo+ ICsJLmRyaXZlciA9IHsNCj4gKwkJLm5hbWUgPSAiaG9zdDF4X3ZpZGVvIiwNCj4gKwl9LA0KPiAr CS5wcm9iZSA9IGhvc3QxeF92aWRlb19wcm9iZSwNCj4gKwkucmVtb3ZlID0gaG9zdDF4X3ZpZGVv X3JlbW92ZSwNCj4gKwkuc3ViZGV2cyA9IGhvc3QxeF92aWRlb19zdWJkZXZzLA0KPiArfTsNCj4g Kw0KPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKiBjb25zdCBkcml2ZXJzW10gPSB7 DQo+ICsJJnRlZ3JhX2NzaV9kcml2ZXIsDQo+ICsJJnRlZ3JhX3ZpX2RyaXZlciwNCj4gK307DQo+ ICsNCj4gK3N0YXRpYyBpbnQgX19pbml0IGhvc3QxeF92aWRlb19pbml0KHZvaWQpDQo+ICt7DQo+ ICsJaW50IGVycjsNCj4gKw0KPiArCWVyciA9IGhvc3QxeF9kcml2ZXJfcmVnaXN0ZXIoJmhvc3Qx eF92aWRlb19kcml2ZXIpOw0KPiArCWlmIChlcnIgPCAwKQ0KPiArCQlyZXR1cm4gZXJyOw0KPiAr DQo+ICsJZXJyID0gcGxhdGZvcm1fcmVnaXN0ZXJfZHJpdmVycyhkcml2ZXJzLCBBUlJBWV9TSVpF KGRyaXZlcnMpKTsNCj4gKwlpZiAoZXJyIDwgMCkNCj4gKwkJZ290byB1bnJlZ2lzdGVyX2hvc3Qx eDsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArDQo+ICt1bnJlZ2lzdGVyX2hvc3QxeDoNCj4gKwlo b3N0MXhfZHJpdmVyX3VucmVnaXN0ZXIoJmhvc3QxeF92aWRlb19kcml2ZXIpOw0KPiArCXJldHVy biBlcnI7DQo+ICt9DQo+ICttb2R1bGVfaW5pdChob3N0MXhfdmlkZW9faW5pdCk7DQo+ICsNCj4g K3N0YXRpYyB2b2lkIF9fZXhpdCBob3N0MXhfdmlkZW9fZXhpdCh2b2lkKQ0KPiArew0KPiArCXBs YXRmb3JtX3VucmVnaXN0ZXJfZHJpdmVycyhkcml2ZXJzLCBBUlJBWV9TSVpFKGRyaXZlcnMpKTsN Cj4gKwlob3N0MXhfZHJpdmVyX3VucmVnaXN0ZXIoJmhvc3QxeF92aWRlb19kcml2ZXIpOw0KPiAr fQ0KPiArbW9kdWxlX2V4aXQoaG9zdDF4X3ZpZGVvX2V4aXQpOw0KPiArDQo+ICtNT0RVTEVfQVVU SE9SKCJTb3dqYW55YSBLb21hdGluZW5pIDxza29tYXRpbmVuaUBudmlkaWEuY29tPiIpOw0KPiAr TU9EVUxFX0RFU0NSSVBUSU9OKCJOVklESUEgVGVncmEgSG9zdDF4IFZpZGVvIGRyaXZlciIpOw0K PiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFn aW5nL21lZGlhL3RlZ3JhL2hvc3QxeC12aWRlby5oIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL3Rl Z3JhL2hvc3QxeC12aWRlby5oDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAw MDAwMDAwMC4uODRkMjhlNmY0MzYyDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZHJpdmVycy9z dGFnaW5nL21lZGlhL3RlZ3JhL2hvc3QxeC12aWRlby5oDQo+IEBAIC0wLDAgKzEsMzMgQEANCj4g Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkNCj4gKy8qDQo+ICsgKiBD b3B5cmlnaHQgKEMpIDIwMjAgTlZJRElBIENPUlBPUkFUSU9OLiAgQWxsIHJpZ2h0cyByZXNlcnZl ZC4NCj4gKyAqLw0KPiArDQo+ICsjaWZuZGVmIEhPU1QxWF9WSURFT19IDQo+ICsjZGVmaW5lIEhP U1QxWF9WSURFT19IIDENCj4gKw0KPiArI2luY2x1ZGUgPGxpbnV4L2hvc3QxeC5oPg0KPiArDQo+ ICsjaW5jbHVkZSA8bWVkaWEvbWVkaWEtZGV2aWNlLmg+DQo+ICsjaW5jbHVkZSA8bWVkaWEvbWVk aWEtZW50aXR5Lmg+DQo+ICsjaW5jbHVkZSA8bWVkaWEvdjRsMi1hc3luYy5oPg0KPiArI2luY2x1 ZGUgPG1lZGlhL3Y0bDItY3RybHMuaD4NCj4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5o Pg0KPiArI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2Lmg+DQo+ICsjaW5jbHVkZSA8bWVkaWEvdmlk ZW9idWYyLXY0bDIuaD4NCj4gKw0KPiArI2luY2x1ZGUgInRlZ3JhLXZpLmgiDQo+ICsjaW5jbHVk ZSAiY3NpLmgiDQo+ICsNCj4gK3N0cnVjdCB0ZWdyYV9jYW1lcmEgew0KPiArCXN0cnVjdCB2NGwy X2RldmljZSB2NGwyX2RldjsNCj4gKwlzdHJ1Y3QgbWVkaWFfZGV2aWNlIG1lZGlhX2RldjsNCj4g KwlzdHJ1Y3QgZGV2aWNlICpkZXY7DQo+ICsJc3RydWN0IHRlZ3JhX3ZpICp2aTsNCj4gKwlzdHJ1 Y3QgdGVncmFfY3NpX2RldmljZSAqY3NpOw0KPiArfTsNCj4gKw0KPiArZXh0ZXJuIHN0cnVjdCBw bGF0Zm9ybV9kcml2ZXIgdGVncmFfdmlfZHJpdmVyOw0KPiArZXh0ZXJuIHN0cnVjdCBwbGF0Zm9y bV9kcml2ZXIgdGVncmFfY3NpX2RyaXZlcjsNCj4gKw0KPiArI2VuZGlmIC8qIEhPU1QxWF9WSURF T19IICovDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvdGVncmEvbWNfY29t bW9uLmggYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvdGVncmEvbWNfY29tbW9uLmgNCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi45ZTg4ZjMyOTVlZjQNCj4gLS0t IC9kZXYvbnVsbA0KPiArKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvdGVncmEvbWNfY29tbW9u LmgNCj4gQEAgLTAsMCArMSwxMzEgQEANCj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wLW9ubHkNCj4gKy8qDQo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTlZJRElBIENPUlBP UkFUSU9OLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gKyAqLw0KPiArDQo+ICsjaWZuZGVmIF9f TUNfQ09NTU9OX0hfDQo+ICsjZGVmaW5lIF9fTUNfQ09NTU9OX0hfDQo+ICsNCj4gKyNpbmNsdWRl IDxsaW51eC9ob3N0MXguaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPg0KPiArI2luY2x1 ZGUgPGxpbnV4L3NwaW5sb2NrLmg+DQo+ICsNCj4gKyNpbmNsdWRlIDxtZWRpYS9tZWRpYS1kZXZp Y2UuaD4NCj4gKyNpbmNsdWRlIDxtZWRpYS9tZWRpYS1lbnRpdHkuaD4NCj4gKyNpbmNsdWRlIDxt ZWRpYS92NGwyLWFzeW5jLmg+DQo+ICsjaW5jbHVkZSA8bWVkaWEvdjRsMi1jdHJscy5oPg0KPiAr I2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+DQo+ICsjaW5jbHVkZSA8bWVkaWEvdjRsMi1k ZXYuaD4NCj4gKyNpbmNsdWRlIDxtZWRpYS92aWRlb2J1ZjItdjRsMi5oPg0KPiArDQo+ICsjaW5j bHVkZSAidGVncmEtY29yZS5oIg0KPiArI2luY2x1ZGUgInRlZ3JhLXZpLmgiDQo+ICsjaW5jbHVk ZSAiY3NpLmgiDQo+ICsNCj4gKyNkZWZpbmUgTUFYX0ZPUk1BVF9OVU0JNjQNCj4gKw0KPiArc3Ry dWN0IHRlZ3JhX2NzaV9mb3BzIHsNCj4gKwlpbnQgKCpod19pbml0KShzdHJ1Y3QgdGVncmFfY3Np X2RldmljZSAqY3NpKTsNCj4gKwlpbnQgKCpjc2lfc3RhcnRfc3RyZWFtaW5nKShzdHJ1Y3QgdGVn cmFfY3NpX2NoYW5uZWwgKmNzaV9jaGFuLA0KPiArCQkJCSAgIHU4IHBnX21vZGUsIGludCBlbmFi bGUpOw0KPiArCXZvaWQgKCpjc2lfZXJyX3N0YXR1cykoc3RydWN0IHRlZ3JhX2NzaV9jaGFubmVs ICpjc2lfY2hhbik7DQo+ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAqIHN0cnVjdCB0ZWdyYV9jaGFu bmVsIC0gVGVncmEgdmlkZW8gY2hhbm5lbA0KPiArICogQGxpc3Q6IGxpc3QgZW50cnkgaW4gYSBj b21wb3NpdGUgZGV2aWNlIGRtYXMgbGlzdA0KPiArICogQHZpZGVvOiBWNEwyIHZpZGVvIGRldmlj ZSBhc3NvY2lhdGVkIHdpdGggdGhlIHZpZGVvIGNoYW5uZWwNCj4gKyAqIEB2aWRlb19sb2NrOiBw cm90ZWN0cyB0aGUgQGZvcm1hdCBhbmQgQHF1ZXVlIGZpZWxkcw0KPiArICogQHBhZDogbWVkaWEg cGFkIGZvciB0aGUgdmlkZW8gZGV2aWNlIGVudGl0eQ0KPiArICoNCj4gKyAqIEB2aTogY29tcG9z aXRlIGRldmljZSBEVCBub2RlIHBvcnQgbnVtYmVyIGZvciB0aGUgY2hhbm5lbA0KPiArICoNCj4g KyAqIEBzcDogaG9zdDF4IHN5bmNwb2ludCBwb2ludGVyDQo+ICsgKg0KPiArICogQGt0aHJlYWRf Y2FwdHVyZV9zdGFydDogY2FwdHVyZSBzdGFydCBrdGhyZWFkIG9mIHRoaXMgdmlkZW8gY2hhbm5l bA0KPiArICogQHN0YXJ0X3dhaXQ6IHdhaXQgcXVldWUgdXNlZCBieSBjYXB0dXJlIHN0YXJ0IGt0 aHJlYWQNCj4gKyAqIEBrdGhyZWFkX2NhcHR1cmVfZG9uZTogY2FwdHVyZSBkb25lIGt0aHJlYWQg b2YgdGhpcyB2aWRlbyBjaGFubmVsDQo+ICsgKiBAZG9uZV93YWl0OiB3YWl0IHF1ZXVlIHVzZWQg YnkgY2FwdHVyZSBkb25lIGt0aHJlYWQNCj4gKyAqDQo+ICsgKiBAZm9ybWF0OiBhY3RpdmUgVjRM MiBwaXhlbCBmb3JtYXQNCj4gKyAqIEBmbXRpbmZvOiBmb3JtYXQgaW5mb3JtYXRpb24gY29ycmVz cG9uZGluZyB0byB0aGUgYWN0aXZlIEBmb3JtYXQNCj4gKyAqIEB2aWRlb19mb3JtYXRzOiBzdXBw b3J0ZWQgdmlkZW8gZm9ybWF0cw0KPiArICogQG5mb3JtYXRzOiBzdXBwb3J0ZWQgbnVtYmVyIG9m IHZpZGVvIGZvcm1hdHMNCj4gKyAqDQo+ICsgKiBAcXVldWU6IHZiMiBidWZmZXJzIHF1ZXVlDQo+ ICsgKiBAc2VxdWVuY2U6IFY0TDIgYnVmZmVycyBzZXF1ZW5jZSBudW1iZXINCj4gKyAqDQo+ICsg KiBAY2FwdHVyZTogbGlzdCBvZiBxdWV1ZWQgYnVmZmVycyBmb3IgY2FwdHVyZQ0KPiArICogQHN0 YXJ0X2xvY2s6IHByb3RlY3RzIHRoZSBjYXB0dXJlIHF1ZXVlZCBsaXN0DQo+ICsgKiBAZG9uZTog bGlzdCBvZiBjYXB0dXJlIGRvbmUgcXVldWVkIGJ1ZmZlcnMNCj4gKyAqIEBkb25lX2xvY2s6IHBy b3RlY3RzIHRoZSBjYXB0dXJlIGRvbmUgcXVldWUgbGlzdA0KPiArICoNCj4gKyAqIEBzdHJpZGVf YWxpZ246IGNoYW5uZWwgYnVmZmVyIHN0cmlkZSBhbGlnbm1lbnQNCj4gKyAqIEB3aWR0aF9hbGln bjogY2hhbm5lbCBidWZmZXIgd2lkdGggYWxpZ25tZW50DQo+ICsgKiBAaGVpZ2h0X2FsaWduOiBj aGFubmVsIGJ1ZmZlciBoZWlnaHQgYWxpZ25tZW50DQo+ICsgKiBAc2l6ZV9hbGlnbjogY2hhbm5l bCBidWZmZXIgc2l6ZSBhbGlnbm1lbnQNCj4gKw0KPiArICogQHBvcnQ6IENTSSBwb3J0IG9mIHRo aXMgdmlkZW8gY2hhbm5lbA0KPiArICoNCj4gKyAqIEBjdHJsX2hhbmRsZXI6IFY0TDIgY29udHJv bCBoYW5kbGVyIG9mIHRoaXMgdmlkZW8gY2hhbm5lbA0KPiArICogQHRwZ19mbXRzX2JpdG1hcDog YSBiaXRtYXAgZm9yIHN1cHBvcnRlZCBUUEcgZm9ybWF0cw0KPiArICovDQo+ICtzdHJ1Y3QgdGVn cmFfY2hhbm5lbCB7DQo+ICsJc3RydWN0IGxpc3RfaGVhZCBsaXN0Ow0KPiArCXN0cnVjdCB2aWRl b19kZXZpY2UgdmlkZW87DQo+ICsJLyogcHJvdGVjdHMgdGhlIEBmb3JtYXQgYW5kIEBxdWV1ZSBm aWVsZHMgKi8NCj4gKwlzdHJ1Y3QgbXV0ZXggdmlkZW9fbG9jazsNCj4gKwlzdHJ1Y3QgbWVkaWFf cGFkIHBhZDsNCj4gKw0KPiArCXN0cnVjdCB0ZWdyYV92aSAqdmk7DQo+ICsJc3RydWN0IGhvc3Qx eF9zeW5jcHQgKnNwOw0KPiArDQo+ICsJc3RydWN0IHRhc2tfc3RydWN0ICprdGhyZWFkX2NhcHR1 cmVfc3RhcnQ7DQo+ICsJd2FpdF9xdWV1ZV9oZWFkX3Qgc3RhcnRfd2FpdDsNCj4gKwlzdHJ1Y3Qg dGFza19zdHJ1Y3QgKmt0aHJlYWRfY2FwdHVyZV9kb25lOw0KPiArCXdhaXRfcXVldWVfaGVhZF90 IGRvbmVfd2FpdDsNCj4gKw0KPiArCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgZm9ybWF0Ow0KPiAr CWNvbnN0IHN0cnVjdCB0ZWdyYV92aWRlb19mb3JtYXQgKmZtdGluZm87DQo+ICsJY29uc3Qgc3Ry dWN0IHRlZ3JhX3ZpZGVvX2Zvcm1hdCAqdmlkZW9fZm9ybWF0czsNCj4gKwl1bnNpZ25lZCBpbnQg bmZvcm1hdHM7DQo+ICsJc3RydWN0IHZiMl9xdWV1ZSBxdWV1ZTsNCj4gKwl1MzIgc2VxdWVuY2U7 DQo+ICsNCj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIGNhcHR1cmU7DQo+ICsJLyogcHJvdGVjdHMgdGhl IGNhcHR1cmUgcXVldWVkIGxpc3QgKi8NCj4gKwlzcGlubG9ja190IHN0YXJ0X2xvY2s7DQo+ICsJ c3RydWN0IGxpc3RfaGVhZCBkb25lOw0KPiArCS8qIHByb3RlY3RzIHRoZSBjYXB0dXJlIGRvbmUg cXVldWUgbGlzdCAqLw0KPiArCXNwaW5sb2NrX3QgZG9uZV9sb2NrOw0KPiArDQo+ICsJdW5zaWdu ZWQgaW50IHN0cmlkZV9hbGlnbjsNCj4gKwl1bnNpZ25lZCBpbnQgd2lkdGhfYWxpZ247DQo+ICsJ dW5zaWduZWQgaW50IGhlaWdodF9hbGlnbjsNCj4gKwl1bnNpZ25lZCBpbnQgc2l6ZV9hbGlnbjsN Cj4gKwl1bnNpZ25lZCBjaGFyIHBvcnQ7DQo+ICsNCj4gKwlzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRs ZXIgY3RybF9oYW5kbGVyOw0KPiArCURFQ0xBUkVfQklUTUFQKHRwZ19mbXRzX2JpdG1hcCwgTUFY X0ZPUk1BVF9OVU0pOw0KPiArfTsNCj4gKw0KPiArI2RlZmluZSB0b190ZWdyYV9jaGFubmVsKHZk ZXYpIFwNCj4gKwljb250YWluZXJfb2YodmRldiwgc3RydWN0IHRlZ3JhX2NoYW5uZWwsIHZpZGVv KQ0KPiArDQo+ICtjb25zdCBzdHJ1Y3QgdGVncmFfdmlkZW9fZm9ybWF0ICp0ZWdyYV9jb3JlX2dl dF9kZWZhdWx0X2Zvcm1hdCh2b2lkKTsNCj4gK3UzMiB0ZWdyYV9jb3JlX2dldF9mb3VyY2NfYnlf aWR4KHN0cnVjdCB0ZWdyYV9jaGFubmVsICpjaGFuLA0KPiArCQkJCSB1bnNpZ25lZCBpbnQgaW5k ZXgpOw0KPiAraW50IHRlZ3JhX2NvcmVfZ2V0X2lkeF9ieV9jb2RlKHN0cnVjdCB0ZWdyYV9jaGFu bmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY29kZSwNCj4gKwkJCSAgICAgICB1bnNpZ25lZCBpbnQg b2Zmc2V0KTsNCj4gK2NvbnN0IHN0cnVjdCB0ZWdyYV92aWRlb19mb3JtYXQgKg0KPiArdGVncmFf Y29yZV9nZXRfZm9ybWF0X2J5X2ZvdXJjYyhzdHJ1Y3QgdGVncmFfY2hhbm5lbCAqY2hhbiwgdTMy IGZvdXJjYyk7DQo+ICsNCj4gK2ludCB0ZWdyYV9jaGFubmVsX2luaXQoc3RydWN0IHRlZ3JhX2No YW5uZWwgKmNoYW4pOw0KPiAraW50IHRlZ3JhX2NoYW5uZWxfc2V0dXBfY3RybF9oYW5kbGVyKHN0 cnVjdCB0ZWdyYV9jaGFubmVsICpjaGFuKTsNCj4gK2ludCB0ZWdyYV9jaGFubmVsX2NsZWFudXAo c3RydWN0IHRlZ3JhX2NoYW5uZWwgKmNoYW4pOw0KPiAraW50IHRlZ3JhX2NoYW5uZWxfc2V0X3N0 cmVhbShzdHJ1Y3QgdGVncmFfY2hhbm5lbCAqY2hhbiwgYm9vbCBvbik7DQo+ICt2b2lkIHRlZ3Jh X2NoYW5uZWxfcXVldWVkX2J1Zl9kb25lKHN0cnVjdCB0ZWdyYV9jaGFubmVsICpjaGFuLA0KPiAr CQkJCSAgIGVudW0gdmIyX2J1ZmZlcl9zdGF0ZSBzdGF0ZSk7DQo+ICtpbnQgdGVncmFfY2hhbm5l bF9jc2lfZXJyb3Jfc3RhdHVzKHN0cnVjdCB0ZWdyYV9jaGFubmVsICpjaGFuKTsNCj4gKw0KPiAr I2VuZGlmDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvdGVncmEvdGVncmEt Y2hhbm5lbC5jIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL3RlZ3JhL3RlZ3JhLWNoYW5uZWwuYw0K PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLjc1NjFmNmZiODc0 OA0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS90ZWdyYS90 ZWdyYS1jaGFubmVsLmMNCj4gQEAgLTAsMCArMSw2MjggQEANCj4gKy8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkNCj4gKy8qDQo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMjAg TlZJRElBIENPUlBPUkFUSU9OLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gKyAqLw0KPiArDQo+ ICsjaW5jbHVkZSA8bGludXgvYXRvbWljLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+ DQo+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvaG9zdDF4Lmg+ DQo+ICsjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2xjbS5o Pg0KPiArI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUu aD4NCj4gKyNpbmNsdWRlIDxsaW51eC9vZi5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+ DQo+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPg0KPiArDQo+ICsjaW5jbHVkZSA8bWVkaWEvdjRs Mi1ldmVudC5oPg0KPiArI2luY2x1ZGUgPG1lZGlhL3Y0bDItZmguaD4NCj4gKyNpbmNsdWRlIDxt ZWRpYS92NGwyLWlvY3RsLmg+DQo+ICsjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYyLWRtYS1jb250 aWcuaD4NCj4gKw0KPiArI2luY2x1ZGUgPHNvYy90ZWdyYS9wbWMuaD4NCj4gKw0KPiArI2luY2x1 ZGUgIm1jX2NvbW1vbi5oIg0KPiArI2luY2x1ZGUgInRlZ3JhLXZpLmgiDQo+ICsjaW5jbHVkZSAi aG9zdDF4LXZpZGVvLmgiDQo+ICsNCj4gKyNkZWZpbmUgTUFYX0NJRF9DT05UUk9MUwkJMQ0KPiAr DQo+ICtzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgdmlfcGF0dGVybl9zdHJpbmdzW10gPSB7DQo+ ICsJIkJsYWNrL1doaXRlIERpcmVjdCBNb2RlIiwNCj4gKwkiQ29sb3IgUGF0Y2ggTW9kZSIsDQo+ ICt9Ow0KPiArDQo+ICtzdGF0aWMgaW50IHZpX3NfY3RybChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJs KQ0KPiArew0KPiArCXN0cnVjdCB0ZWdyYV9jaGFubmVsICpjaGFuID0gY29udGFpbmVyX29mKGN0 cmwtPmhhbmRsZXIsDQo+ICsJCQkJCQkgIHN0cnVjdCB0ZWdyYV9jaGFubmVsLA0KPiArCQkJCQkJ ICBjdHJsX2hhbmRsZXIpOw0KPiArDQo+ICsJc3dpdGNoIChjdHJsLT5pZCkgew0KPiArCWNhc2Ug VjRMMl9DSURfVEVTVF9QQVRURVJOOg0KPiArCQljaGFuLT52aS0+cGdfbW9kZSA9IGN0cmwtPnZh bCArIDE7DQo+ICsJCWRldl9pbmZvKGNoYW4tPnZpLT5kZXYsICJUUEcgbW9kZSBpcyBzZXQgdG8g JXNcbiIsDQo+ICsJCQkgdmlfcGF0dGVybl9zdHJpbmdzW2N0cmwtPnZhbF0pOw0KDQpUaGVyZSBp cyBubyBuZWVkIHRvIHNwYW0gdGhlIGxvZyB3aXRoIHRoaXMgbWVzc2FnZS4NCg0KPiArCQlicmVh azsNCj4gKw0KPiArCWRlZmF1bHQ6DQo+ICsJCWRldl9lcnIoY2hhbi0+dmktPmRldiwgIkludmFs aWQgVGVncmEgdmlkZW8gY29udHJvbFxuIik7DQoNClRoaXMgY2FuIGJlIGRyb3BwZWQgYXMgd2Vs bC4gQWN0dWFsbHksIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiBzaW5jZSB0aGUNCmNvbnRyb2wg ZnJhbWV3b3JrIHdpbGwgY2FsbCB0aGlzIGZ1bmN0aW9uIGZvciB2YWxpZCBjb250cm9scyBvbmx5 Lg0KDQo+ICsJCXJldHVybiAtRUlOVkFMOw0KDQpUcmFkaXRpb25hbGx5IHRoZSAnZGVmYXVsdDog cmV0dXJuIC1FSU5WQUw7JyBpcyBrZXB0LCBqdXN0IGluIGNhc2Ugd2UgZXZlcg0KaGl0IHRoaXMg dGhyb3VnaCBzb21lIHJlZ3Jlc3Npb24uDQoNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4g K30NCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfb3BzIHZpX2N0cmxfb3Bz ID0gew0KPiArCS5zX2N0cmwJPSB2aV9zX2N0cmwsDQo+ICt9Ow0KPiArDQo+ICsvKg0KPiArICog dmlkZW9idWYyIHF1ZXVlIG9wZXJhdGlvbnMNCj4gKyAqLw0KPiArc3RhdGljIGludCB0ZWdyYV9j aGFubmVsX3F1ZXVlX3NldHVwKHN0cnVjdCB2YjJfcXVldWUgKnZxLA0KPiArCQkJCSAgICAgdW5z aWduZWQgaW50ICpuYnVmZmVycywNCj4gKwkJCQkgICAgIHVuc2lnbmVkIGludCAqbnBsYW5lcywN Cj4gKwkJCQkgICAgIHVuc2lnbmVkIGludCBzaXplc1tdLA0KPiArCQkJCSAgICAgc3RydWN0IGRl dmljZSAqYWxsb2NfZGV2c1tdKQ0KPiArew0KPiArCXN0cnVjdCB0ZWdyYV9jaGFubmVsICpjaGFu ID0gdmIyX2dldF9kcnZfcHJpdih2cSk7DQo+ICsJdW5zaWduZWQgaW50IGNvdW50ID0gKm5idWZm ZXJzOw0KPiArDQo+ICsJaWYgKCpucGxhbmVzKQ0KPiArCQlyZXR1cm4gc2l6ZXNbMF0gPCBjaGFu LT5mb3JtYXQuc2l6ZWltYWdlID8gLUVJTlZBTCA6IDA7DQo+ICsNCj4gKwkqbnBsYW5lcyA9IDE7 DQo+ICsJc2l6ZXNbMF0gPSBjaGFuLT5mb3JtYXQuc2l6ZWltYWdlOw0KPiArCWFsbG9jX2RldnNb MF0gPSBjaGFuLT52aS0+ZGV2Ow0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyBpbnQgdGVncmFfY2hhbm5lbF9idWZmZXJfcHJlcGFyZShzdHJ1Y3QgdmIyX2J1ZmZlciAq dmIpDQo+ICt7DQo+ICsJc3RydWN0IHRlZ3JhX2NoYW5uZWwgKmNoYW4gPSB2YjJfZ2V0X2Rydl9w cml2KHZiLT52YjJfcXVldWUpOw0KPiArCXN0cnVjdCB2YjJfdjRsMl9idWZmZXIgKnZidWYgPSB0 b192YjJfdjRsMl9idWZmZXIodmIpOw0KPiArCXN0cnVjdCB0ZWdyYV9jaGFubmVsX2J1ZmZlciAq YnVmID0gdG9fdGVncmFfY2hhbm5lbF9idWZmZXIodmJ1Zik7DQo+ICsJdW5zaWduZWQgbG9uZyBz aXplID0gY2hhbi0+Zm9ybWF0LnNpemVpbWFnZTsNCj4gKw0KPiArCWlmICh2YjJfcGxhbmVfc2l6 ZSh2YiwgMCkgPCBzaXplKSB7DQo+ICsJCXY0bDJfZXJyKGNoYW4tPnZpZGVvLnY0bDJfZGV2LCAi YnVmZmVyIHRvbyBzbWFsbCAoJWx1IDwgJWx1KVxuIiwNCj4gKwkJCSB2YjJfcGxhbmVfc2l6ZSh2 YiwgMCksIHNpemUpOw0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwl9DQo+ICsNCj4gKwl2YjJf c2V0X3BsYW5lX3BheWxvYWQodmIsIDAsIHNpemUpOw0KPiArCWJ1Zi0+Y2hhbiA9IGNoYW47DQo+ ICsJYnVmLT5hZGRyID0gdmIyX2RtYV9jb250aWdfcGxhbmVfZG1hX2FkZHIodmIsIDApOw0KPiAr DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIHRlZ3JhX2NoYW5uZWxf YnVmZmVyX3F1ZXVlKHN0cnVjdCB2YjJfYnVmZmVyICp2YikNCj4gK3sNCj4gKwlzdHJ1Y3QgdGVn cmFfY2hhbm5lbCAqY2hhbiA9IHZiMl9nZXRfZHJ2X3ByaXYodmItPnZiMl9xdWV1ZSk7DQo+ICsJ c3RydWN0IHZiMl92NGwyX2J1ZmZlciAqdmJ1ZiA9IHRvX3ZiMl92NGwyX2J1ZmZlcih2Yik7DQo+ ICsJc3RydWN0IHRlZ3JhX2NoYW5uZWxfYnVmZmVyICpidWYgPSB0b190ZWdyYV9jaGFubmVsX2J1 ZmZlcih2YnVmKTsNCj4gKw0KPiArCS8qIHB1dCBidWZmZXIgaW50byB0aGUgY2FwdHVyZSBxdWV1 ZSAqLw0KPiArCXNwaW5fbG9jaygmY2hhbi0+c3RhcnRfbG9jayk7DQo+ICsJbGlzdF9hZGRfdGFp bCgmYnVmLT5xdWV1ZSwgJmNoYW4tPmNhcHR1cmUpOw0KPiArCXNwaW5fdW5sb2NrKCZjaGFuLT5z dGFydF9sb2NrKTsNCj4gKw0KPiArCS8qIHdhaXQgdXAga3RocmVhZCBmb3IgY2FwdHVyZSAqLw0K PiArCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2hhbi0+c3RhcnRfd2FpdCk7DQo+ICt9DQo+ICsN Cj4gK2ludCB0ZWdyYV9jaGFubmVsX2NzaV9lcnJvcl9zdGF0dXMoc3RydWN0IHRlZ3JhX2NoYW5u ZWwgKmNoYW4pDQo+ICt7DQo+ICsJc3RydWN0IG1lZGlhX2VudGl0eSAqZW50aXR5Ow0KPiArCXN0 cnVjdCBtZWRpYV9wYWQgKnBhZDsNCj4gKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldjsNCj4g Kw0KPiArCXBhZCA9IG1lZGlhX2VudGl0eV9yZW1vdGVfcGFkKCZjaGFuLT5wYWQpOw0KPiArCWlm ICghcGFkKQ0KPiArCQlyZXR1cm4gLUVOT0RFVjsNCj4gKw0KPiArCWVudGl0eSA9IHBhZC0+ZW50 aXR5Ow0KPiArCXN1YmRldiA9IG1lZGlhX2VudGl0eV90b192NGwyX3N1YmRldihlbnRpdHkpOw0K PiArDQo+ICsJdGVncmFfY3NpX2Vycm9yX3N0YXR1cyhzdWJkZXYpOw0KPiArDQo+ICsJcmV0dXJu IDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXYgKg0KPiArdGVncmFf Y2hhbm5lbF9nZXRfcmVtb3RlX3N1YmRldihzdHJ1Y3QgdGVncmFfY2hhbm5lbCAqY2hhbikNCj4g K3sNCj4gKwlzdHJ1Y3QgbWVkaWFfcGFkICpwYWQ7DQo+ICsJc3RydWN0IHY0bDJfc3ViZGV2ICpz dWJkZXY7DQo+ICsJc3RydWN0IG1lZGlhX2VudGl0eSAqZW50aXR5Ow0KPiArDQo+ICsJcGFkID0g bWVkaWFfZW50aXR5X3JlbW90ZV9wYWQoJmNoYW4tPnBhZCk7DQo+ICsJZW50aXR5ID0gcGFkLT5l bnRpdHk7DQo+ICsJc3ViZGV2ID0gbWVkaWFfZW50aXR5X3RvX3Y0bDJfc3ViZGV2KGVudGl0eSk7 DQo+ICsNCj4gKwlyZXR1cm4gc3ViZGV2Ow0KPiArfQ0KPiArDQo+ICtpbnQgdGVncmFfY2hhbm5l bF9zZXRfc3RyZWFtKHN0cnVjdCB0ZWdyYV9jaGFubmVsICpjaGFuLCBib29sIG9uKQ0KPiArew0K PiArCXN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2Ow0KPiArCWludCByZXQ7DQo+ICsNCj4gKwkv KiBzdHJlYW0gQ1NJICovDQo+ICsJc3ViZGV2ID0gdGVncmFfY2hhbm5lbF9nZXRfcmVtb3RlX3N1 YmRldihjaGFuKTsNCj4gKwl2NGwyX3NldF9zdWJkZXZfaG9zdGRhdGEoc3ViZGV2LCBjaGFuKTsN Cj4gKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHN1YmRldiwgdmlkZW8sIHNfc3RyZWFtLCBvbik7 DQo+ICsJaWYgKG9uICYmIHJldCA8IDAgJiYgcmV0ICE9IC1FTk9JT0NUTENNRCkNCj4gKwkJcmV0 dXJuIHJldDsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICt2b2lkIHRlZ3JhX2No YW5uZWxfcXVldWVkX2J1Zl9kb25lKHN0cnVjdCB0ZWdyYV9jaGFubmVsICpjaGFuLA0KPiArCQkJ CSAgIGVudW0gdmIyX2J1ZmZlcl9zdGF0ZSBzdGF0ZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgdGVncmFf Y2hhbm5lbF9idWZmZXIgKmJ1ZiwgKm5idWY7DQo+ICsNCj4gKwlzcGluX2xvY2soJmNoYW4tPnN0 YXJ0X2xvY2spOw0KPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShidWYsIG5idWYsICZjaGFu LT5jYXB0dXJlLCBxdWV1ZSkgew0KPiArCQl2YjJfYnVmZmVyX2RvbmUoJmJ1Zi0+YnVmLnZiMl9i dWYsIHN0YXRlKTsNCj4gKwkJbGlzdF9kZWwoJmJ1Zi0+cXVldWUpOw0KPiArCX0NCj4gKw0KPiAr CXNwaW5fdW5sb2NrKCZjaGFuLT5zdGFydF9sb2NrKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlu dCB0ZWdyYV9jaGFubmVsX3N0YXJ0X3N0cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICp2cSwgdTMy IGNvdW50KQ0KPiArew0KPiArCXN0cnVjdCB0ZWdyYV9jaGFubmVsICpjaGFuID0gdmIyX2dldF9k cnZfcHJpdih2cSk7DQo+ICsNCj4gKwlpZiAoY2hhbi0+dmktPmZvcHMtPnZpX3N0YXJ0X3N0cmVh bWluZykNCj4gKwkJcmV0dXJuIGNoYW4tPnZpLT5mb3BzLT52aV9zdGFydF9zdHJlYW1pbmcodnEs IGNvdW50KTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCB0 ZWdyYV9jaGFubmVsX3N0b3Bfc3RyZWFtaW5nKHN0cnVjdCB2YjJfcXVldWUgKnZxKQ0KPiArew0K PiArCXN0cnVjdCB0ZWdyYV9jaGFubmVsICpjaGFuID0gdmIyX2dldF9kcnZfcHJpdih2cSk7DQo+ ICsNCj4gKwlpZiAoY2hhbi0+dmktPmZvcHMtPnZpX3N0YXJ0X3N0cmVhbWluZykNCj4gKwkJY2hh bi0+dmktPmZvcHMtPnZpX3N0b3Bfc3RyZWFtaW5nKHZxKTsNCj4gK30NCj4gKw0KPiArc3RhdGlj IGNvbnN0IHN0cnVjdCB2YjJfb3BzIHRlZ3JhX2NoYW5uZWxfcXVldWVfcW9wcyA9IHsNCj4gKwku cXVldWVfc2V0dXAgPSB0ZWdyYV9jaGFubmVsX3F1ZXVlX3NldHVwLA0KPiArCS5idWZfcHJlcGFy ZSA9IHRlZ3JhX2NoYW5uZWxfYnVmZmVyX3ByZXBhcmUsDQo+ICsJLmJ1Zl9xdWV1ZSA9IHRlZ3Jh X2NoYW5uZWxfYnVmZmVyX3F1ZXVlLA0KPiArCS53YWl0X3ByZXBhcmUgPSB2YjJfb3BzX3dhaXRf cHJlcGFyZSwNCj4gKwkud2FpdF9maW5pc2ggPSB2YjJfb3BzX3dhaXRfZmluaXNoLA0KPiArCS5z dGFydF9zdHJlYW1pbmcgPSB0ZWdyYV9jaGFubmVsX3N0YXJ0X3N0cmVhbWluZywNCj4gKwkuc3Rv cF9zdHJlYW1pbmcgPSB0ZWdyYV9jaGFubmVsX3N0b3Bfc3RyZWFtaW5nLA0KPiArfTsNCj4gKw0K PiArLyoNCj4gKyAqIFY0TDIgaW9jdGxzDQo+ICsgKi8NCj4gK3N0YXRpYyBpbnQgdGVncmFfY2hh bm5lbF9xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsDQo+ICsJCQkJICBzdHJ1 Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApDQo+ICt7DQo+ICsJc3RydWN0IHY0bDJfZmggKnZmaCA9 IGZpbGUtPnByaXZhdGVfZGF0YTsNCj4gKwlzdHJ1Y3QgdGVncmFfY2hhbm5lbCAqY2hhbiA9IHRv X3RlZ3JhX2NoYW5uZWwodmZoLT52ZGV2KTsNCj4gKw0KPiArCWNhcC0+ZGV2aWNlX2NhcHMgPSBj aGFuLT52aWRlby5kZXZpY2VfY2FwczsNCj4gKwljYXAtPmNhcGFiaWxpdGllcyA9IGNhcC0+ZGV2 aWNlX2NhcHMgfCBWNEwyX0NBUF9ERVZJQ0VfQ0FQUzsNCg0KSnVzdCBkcm9wIHRoZXNlIHR3byBs aW5lcy4gWW91IGFscmVhZHkgc2V0IGRldmljZV9jYXBzIGluIHN0cnVjdCB2aWRlb19kZXZpY2Us DQphbmQgdGhhdCdzIHN1ZmZpY2llbnQuIFRoZSB2NGwyIGNvcmUgd2lsbCBzZXQgdGhlc2UgdHdv IGZpZWxkcyBmb3IgeW91DQpiYXNlZCBvbiB0aGUgdmlkZW9fZGV2aWNlLg0KDQo+ICsJc3Ryc2Nw eShjYXAtPmRyaXZlciwgInRlZ3JhLXZpZGVvIiwgc2l6ZW9mKGNhcC0+ZHJpdmVyKSk7DQo+ICsJ c3Ryc2NweShjYXAtPmNhcmQsIGNoYW4tPnZpZGVvLm5hbWUsIHNpemVvZihjYXAtPmNhcmQpKTsN Cj4gKwlzbnByaW50ZihjYXAtPmJ1c19pbmZvLCBzaXplb2YoY2FwLT5idXNfaW5mbyksICJwbGF0 Zm9ybTolczoldSIsDQo+ICsJCSBkZXZfbmFtZShjaGFuLT52aS0+ZGV2KSwgY2hhbi0+cG9ydCk7 DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCB0ZWdyYV9jaGFu bmVsX2VudW1fZm9ybWF0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwNCj4gKwkJCQkgICAg IHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpDQo+ICt7DQo+ICsJc3RydWN0IHY0bDJfZmggKnZmaCA9 IGZpbGUtPnByaXZhdGVfZGF0YTsNCj4gKwlzdHJ1Y3QgdGVncmFfY2hhbm5lbCAqY2hhbiA9IHRv X3RlZ3JhX2NoYW5uZWwodmZoLT52ZGV2KTsNCj4gKwl1bnNpZ25lZCBpbnQgaW5kZXggPSAwLCBp Ow0KPiArCXVuc2lnbmVkIGxvbmcgKmZtdHNfYml0bWFwID0gY2hhbi0+dHBnX2ZtdHNfYml0bWFw Ow0KPiArDQo+ICsJaWYgKGYtPmluZGV4ID49IGJpdG1hcF93ZWlnaHQoZm10c19iaXRtYXAsIE1B WF9GT1JNQVRfTlVNKSkNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwlmb3IgKGkgPSAw OyBpIDwgZi0+aW5kZXggKyAxOyBpKyssIGluZGV4KyspDQo+ICsJCWluZGV4ID0gZmluZF9uZXh0 X2JpdChmbXRzX2JpdG1hcCwgTUFYX0ZPUk1BVF9OVU0sIGluZGV4KTsNCj4gKw0KPiArCWYtPnBp eGVsZm9ybWF0ID0gdGVncmFfY29yZV9nZXRfZm91cmNjX2J5X2lkeChjaGFuLCBpbmRleCAtIDEp Ow0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICt0ZWdy YV9jaGFubmVsX2ZtdF9hbGlnbihzdHJ1Y3QgdGVncmFfY2hhbm5lbCAqY2hhbiwNCj4gKwkJCWNv bnN0IHN0cnVjdCB0ZWdyYV9mcmFjICpicHAsDQo+ICsJCQl1MzIgKndpZHRoLCB1MzIgKmhlaWdo dCwgdTMyICpieXRlc3BlcmxpbmUpDQo+ICt7DQo+ICsJdW5zaWduZWQgaW50IG1pbl93aWR0aCwg bWF4X3dpZHRoOw0KPiArCXVuc2lnbmVkIGludCBtaW5fYnBsLCBtYXhfYnBsLCBicGw7DQo+ICsJ dW5zaWduZWQgaW50IGFsaWduLCBmbXRfYWxpZ247DQo+ICsJdW5zaWduZWQgaW50IHRlbXBfd2lk dGgsIHRlbXBfYnBsOw0KPiArCXVuc2lnbmVkIGludCBudW1lcmF0b3IsIGRlbm9taW5hdG9yOw0K PiArDQo+ICsJZGVub21pbmF0b3IgPSAoIWJwcC0+ZGVub21pbmF0b3IpID8gMSA6IGJwcC0+ZGVu b21pbmF0b3I7DQo+ICsJbnVtZXJhdG9yID0gKCFicHAtPm51bWVyYXRvcikgPyAxIDogYnBwLT5u dW1lcmF0b3I7DQo+ICsJZm10X2FsaWduID0gKGRlbm9taW5hdG9yID09IDEpID8gbnVtZXJhdG9y IDogMTsNCj4gKwlhbGlnbiA9IGxjbShjaGFuLT53aWR0aF9hbGlnbiwgZm10X2FsaWduKTsNCj4g KwlicGwgPSAoKndpZHRoICogbnVtZXJhdG9yKSAvIGRlbm9taW5hdG9yOw0KPiArDQo+ICsJaWYg KGNoYW4tPnZpLT5mb3BzLT52aV9zdHJpZGVfYWxpZ24pDQo+ICsJCWNoYW4tPnZpLT5mb3BzLT52 aV9zdHJpZGVfYWxpZ24oJmJwbCk7DQo+ICsNCj4gKwlpZiAoISpieXRlc3BlcmxpbmUpDQo+ICsJ CSpieXRlc3BlcmxpbmUgPSBicGw7DQo+ICsNCj4gKwkvKg0KPiArCSAqIFRoZSB0cmFuc2ZlciBh bGlnbm1lbnQgcmVxdWlyZW1lbnRzIGFyZSBleHByZXNzZWQgaW4gYnl0ZXMuIENvbXB1dGUNCj4g KwkgKiB0aGUgbWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMsIGNsYW1wIHRoZSByZXF1ZXN0ZWQg d2lkdGggYW5kIGNvbnZlcnQNCj4gKwkgKiBpdCBiYWNrIHRvIHBpeGVscy4NCj4gKwkgKiB1c2Ug Ynl0ZXNwZXJsaW5lIHRvIGFkanVzdCB3aWR0aCBmb3IgYXBwbGljYXRvbiByZWxhdGVkIHJlcXVy aWVtZW50cy4NCj4gKwkgKi8NCj4gKwltaW5fd2lkdGggPSByb3VuZHVwKFRFR1JBX01JTl9XSURU SCwgYWxpZ24pOw0KPiArCW1heF93aWR0aCA9IHJvdW5kZG93bihURUdSQV9NQVhfV0lEVEgsIGFs aWduKTsNCj4gKwl0ZW1wX3dpZHRoID0gcm91bmR1cChicGwsIGFsaWduKTsNCj4gKwkqd2lkdGgg PSAoY2xhbXAodGVtcF93aWR0aCwgbWluX3dpZHRoLCBtYXhfd2lkdGgpICogZGVub21pbmF0b3Ip IC8NCj4gKwkJCW51bWVyYXRvcjsNCj4gKwkqaGVpZ2h0ID0gY2xhbXAoKmhlaWdodCwgVEVHUkFf TUlOX0hFSUdIVCwgVEVHUkFfTUFYX0hFSUdIVCk7DQo+ICsNCj4gKwkvKg0KPiArCSAqIENsYW1w IHRoZSByZXF1ZXN0ZWQgYnl0ZXMgcGVyIGxpbmUgdmFsdWUuIElmIHRoZSBtYXhpbXVtIGJ5dGVz IHBlcg0KPiArCSAqIGxpbmUgdmFsdWUgaXMgemVybywgdGhlIG1vZHVsZSBkb2Vzbid0IHN1cHBv cnQgdXNlciBjb25maWd1cmFibGUgbGluZQ0KPiArCSAqIHNpemVzLiBPdmVycmlkZSB0aGUgcmVx dWVzdGVkIHZhbHVlIHdpdGggdGhlIG1pbmltdW0gaW4gdGhhdCBjYXNlLg0KPiArCSAqLw0KPiAr CW1pbl9icGwgPSBicGw7DQo+ICsJbWF4X2JwbCA9IHJvdW5kZG93bihURUdSQV9NQVhfV0lEVEgs IGNoYW4tPnN0cmlkZV9hbGlnbik7DQo+ICsJdGVtcF9icGwgPSByb3VuZHVwKCpieXRlc3Blcmxp bmUsIGNoYW4tPnN0cmlkZV9hbGlnbik7DQo+ICsJKmJ5dGVzcGVybGluZSA9IGNsYW1wKHRlbXBf YnBsLCBtaW5fYnBsLCBtYXhfYnBsKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgdGVncmFf Y2hhbm5lbF91cGRhdGVfZm9ybWF0KHN0cnVjdCB0ZWdyYV9jaGFubmVsICpjaGFuLCB1MzIgd2lk dGgsDQo+ICsJCQkJCXUzMiBoZWlnaHQsIHUzMiBmb3VyY2MsDQo+ICsJCQkJCWNvbnN0IHN0cnVj dCB0ZWdyYV9mcmFjICpicHAsDQo+ICsJCQkJCXUzMiBwcmVmZXJyZWRfc3RyaWRlKQ0KPiArew0K PiArCXUzMiBkZW5vbWluYXRvciA9ICghYnBwLT5kZW5vbWluYXRvcikgPyAxIDogYnBwLT5kZW5v bWluYXRvcjsNCj4gKwl1MzIgbnVtZXJhdG9yID0gKCFicHAtPm51bWVyYXRvcikgPyAxIDogYnBw LT5udW1lcmF0b3I7DQo+ICsJdTMyIGJ5dGVzcGVybGluZSA9ICh3aWR0aCAqIG51bWVyYXRvciAv IGRlbm9taW5hdG9yKTsNCj4gKwl1MzIgc2l6ZWltYWdlLCBoZWlnaHRfYWxpZ25lZDsNCj4gKw0K PiArCWNoYW4tPmZvcm1hdC53aWR0aCA9IHdpZHRoOw0KPiArCWNoYW4tPmZvcm1hdC5oZWlnaHQg PSBoZWlnaHQ7DQo+ICsJY2hhbi0+Zm9ybWF0LnBpeGVsZm9ybWF0ID0gZm91cmNjOw0KPiArCWNo YW4tPmZvcm1hdC5ieXRlc3BlcmxpbmUgPSBwcmVmZXJyZWRfc3RyaWRlID86IGJ5dGVzcGVybGlu ZTsNCj4gKw0KPiArCXRlZ3JhX2NoYW5uZWxfZm10X2FsaWduKGNoYW4sIGJwcCwNCj4gKwkJCQkm Y2hhbi0+Zm9ybWF0LndpZHRoLA0KPiArCQkJCSZjaGFuLT5mb3JtYXQuaGVpZ2h0LA0KPiArCQkJ CSZjaGFuLT5mb3JtYXQuYnl0ZXNwZXJsaW5lKTsNCj4gKw0KPiArCS8qIGNhbGN1bGF0ZSB0aGUg c2l6ZWltYWdlIHBlciBwbGFuZSAqLw0KPiArCWhlaWdodF9hbGlnbmVkID0gcm91bmR1cChjaGFu LT5mb3JtYXQuaGVpZ2h0LCBjaGFuLT5oZWlnaHRfYWxpZ24pOw0KPiArCXNpemVpbWFnZSA9IGNo YW4tPmZvcm1hdC5ieXRlc3BlcmxpbmUgKiBoZWlnaHRfYWxpZ25lZDsNCj4gKwljaGFuLT5mb3Jt YXQuc2l6ZWltYWdlID0gcm91bmR1cChzaXplaW1hZ2UsIGNoYW4tPnNpemVfYWxpZ24pOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgaW50IHRlZ3JhX2NoYW5uZWxfZ2V0X2Zvcm1hdChzdHJ1Y3QgZmls ZSAqZmlsZSwgdm9pZCAqZmgsDQo+ICsJCQkJICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm9ybWF0 KQ0KPiArew0KPiArCXN0cnVjdCB2NGwyX2ZoICp2ZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7DQo+ ICsJc3RydWN0IHRlZ3JhX2NoYW5uZWwgKmNoYW4gPSB0b190ZWdyYV9jaGFubmVsKHZmaC0+dmRl dik7DQo+ICsNCj4gKwlmb3JtYXQtPmZtdC5waXggPSBjaGFuLT5mb3JtYXQ7DQo+ICsNCj4gKwly ZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBfX3RlZ3JhX2NoYW5uZWxfdHJ5X2Zv cm1hdChzdHJ1Y3QgdGVncmFfY2hhbm5lbCAqY2hhbiwNCj4gKwkJCQkgICAgICBzdHJ1Y3QgdjRs Ml9waXhfZm9ybWF0ICpwaXgsDQo+ICsJCQkJICAgICAgY29uc3Qgc3RydWN0IHRlZ3JhX3ZpZGVv X2Zvcm1hdCAqKnZmbXQpDQo+ICt7DQo+ICsJY29uc3Qgc3RydWN0IHRlZ3JhX3ZpZGVvX2Zvcm1h dCAqZm10X2luZm87DQo+ICsJc3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXY7DQo+ICsJc3RydWN0 IHY0bDJfc3ViZGV2X2Zvcm1hdCBmbXQ7DQo+ICsJc3RydWN0IHY0bDJfc3ViZGV2X3BhZF9jb25m aWcgKnBhZF9jZmc7DQo+ICsNCj4gKwlzdWJkZXYgPSB0ZWdyYV9jaGFubmVsX2dldF9yZW1vdGVf c3ViZGV2KGNoYW4pOw0KPiArCXBhZF9jZmcgPSB2NGwyX3N1YmRldl9hbGxvY19wYWRfY29uZmln KHN1YmRldik7DQo+ICsJaWYgKCFwYWRfY2ZnKQ0KPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gKw0K PiArCS8qDQo+ICsJICogUmV0cmlldmUgZm9ybWF0IGluZm9ybWF0aW9uIGFuZCBzZWxlY3QgdGhl IGRlZmF1bHQgZm9ybWF0IGlmIHRoZQ0KPiArCSAqIHJlcXVlc3RlZCBmb3JtYXQgaXNuJ3Qgc3Vw cG9ydGVkLg0KPiArCSAqLw0KPiArCWZtdF9pbmZvID0gdGVncmFfY29yZV9nZXRfZm9ybWF0X2J5 X2ZvdXJjYyhjaGFuLCBwaXgtPnBpeGVsZm9ybWF0KTsNCj4gKwlpZiAoIWZtdF9pbmZvKSB7DQo+ ICsJCXBpeC0+cGl4ZWxmb3JtYXQgPSBjaGFuLT5mb3JtYXQucGl4ZWxmb3JtYXQ7DQo+ICsJCXBp eC0+Y29sb3JzcGFjZSA9IGNoYW4tPmZvcm1hdC5jb2xvcnNwYWNlOw0KPiArCQlmbXRfaW5mbyA9 IHRlZ3JhX2NvcmVfZ2V0X2Zvcm1hdF9ieV9mb3VyY2MoY2hhbiwNCj4gKwkJCQkJCQkgICBwaXgt PnBpeGVsZm9ybWF0KTsNCj4gKwl9DQo+ICsNCj4gKwkvKiBDaGFuZ2UgdGhpcyB3aGVuIHN0YXJ0 IGFkZGluZyBpbnRlcmxhY2UgZm9ybWF0IHN1cHBvcnQgKi8NCj4gKwlwaXgtPmZpZWxkID0gVjRM Ml9GSUVMRF9OT05FOw0KPiArCWZtdC53aGljaCA9IFY0TDJfU1VCREVWX0ZPUk1BVF9UUlk7DQo+ ICsJZm10LnBhZCA9IDA7DQo+ICsJdjRsMl9maWxsX21idXNfZm9ybWF0KCZmbXQuZm9ybWF0LCBw aXgsIGZtdF9pbmZvLT5jb2RlKTsNCj4gKwl2NGwyX3N1YmRldl9jYWxsKHN1YmRldiwgcGFkLCBz ZXRfZm10LCBwYWRfY2ZnLCAmZm10KTsNCj4gKw0KPiArCXY0bDJfZmlsbF9waXhfZm9ybWF0KHBp eCwgJmZtdC5mb3JtYXQpOw0KPiArCXRlZ3JhX2NoYW5uZWxfZm10X2FsaWduKGNoYW4sICZmbXRf aW5mby0+YnBwLCAmcGl4LT53aWR0aCwgJnBpeC0+aGVpZ2h0LA0KPiArCQkJCSZwaXgtPmJ5dGVz cGVybGluZSk7DQo+ICsJcGl4LT5zaXplaW1hZ2UgPSBwaXgtPmJ5dGVzcGVybGluZSAqIHBpeC0+ aGVpZ2h0Ow0KPiArDQo+ICsJaWYgKHZmbXQpDQo+ICsJCSp2Zm10ID0gZm10X2luZm87DQo+ICsN Cj4gKwl2NGwyX3N1YmRldl9mcmVlX3BhZF9jb25maWcocGFkX2NmZyk7DQo+ICsNCj4gKwlyZXR1 cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCB0ZWdyYV9jaGFubmVsX3RyeV9mb3JtYXQo c3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLA0KPiArCQkJCSAgICBzdHJ1Y3QgdjRsMl9mb3Jt YXQgKmZvcm1hdCkNCj4gK3sNCj4gKwlzdHJ1Y3QgdjRsMl9maCAqdmZoID0gZmlsZS0+cHJpdmF0 ZV9kYXRhOw0KPiArCXN0cnVjdCB0ZWdyYV9jaGFubmVsICpjaGFuID0gdG9fdGVncmFfY2hhbm5l bCh2ZmgtPnZkZXYpOw0KPiArDQo+ICsJcmV0dXJuIF9fdGVncmFfY2hhbm5lbF90cnlfZm9ybWF0 KGNoYW4sICZmb3JtYXQtPmZtdC5waXgsIE5VTEwpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50 IHRlZ3JhX2NoYW5uZWxfc2V0X2Zvcm1hdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsDQo+ ICsJCQkJICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm9ybWF0KQ0KPiArew0KPiArCXN0cnVjdCB2 NGwyX2ZoICp2ZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7DQo+ICsJc3RydWN0IHRlZ3JhX2NoYW5u ZWwgKmNoYW4gPSB0b190ZWdyYV9jaGFubmVsKHZmaC0+dmRldik7DQo+ICsJY29uc3Qgc3RydWN0 IHRlZ3JhX3ZpZGVvX2Zvcm1hdCAqaW5mbzsNCj4gKwlpbnQgcmV0Ow0KPiArCXN0cnVjdCB2NGwy X3N1YmRldl9mb3JtYXQgZm10Ow0KPiArCXN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2Ow0KPiAr CXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmb3JtYXQtPmZtdC5waXg7DQo+ICsNCj4g KwlpZiAodmIyX2lzX2J1c3koJmNoYW4tPnF1ZXVlKSkNCj4gKwkJcmV0dXJuIC1FQlVTWTsNCj4g Kw0KPiArCS8qIGdldCBzdXBwb3J0ZWQgZm9ybWF0IGJ5IHRyeV9mbXQgKi8NCj4gKwlyZXQgPSBf X3RlZ3JhX2NoYW5uZWxfdHJ5X2Zvcm1hdChjaGFuLCBwaXgsICZpbmZvKTsNCj4gKwlpZiAocmV0 KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJc3ViZGV2ID0gdGVncmFfY2hhbm5lbF9nZXRf cmVtb3RlX3N1YmRldihjaGFuKTsNCj4gKw0KPiArCWZtdC53aGljaCA9IFY0TDJfU1VCREVWX0ZP Uk1BVF9BQ1RJVkU7DQo+ICsJZm10LnBhZCA9IDA7DQo+ICsJdjRsMl9maWxsX21idXNfZm9ybWF0 KCZmbXQuZm9ybWF0LCBwaXgsIGluZm8tPmNvZGUpOw0KPiArCXY0bDJfc3ViZGV2X2NhbGwoc3Vi ZGV2LCBwYWQsIHNldF9mbXQsIE5VTEwsICZmbXQpOw0KPiArDQo+ICsJdjRsMl9maWxsX3BpeF9m b3JtYXQocGl4LCAmZm10LmZvcm1hdCk7DQo+ICsJY2hhbi0+Zm9ybWF0ID0gKnBpeDsNCj4gKwlj aGFuLT5mbXRpbmZvID0gaW5mbzsNCj4gKwl0ZWdyYV9jaGFubmVsX3VwZGF0ZV9mb3JtYXQoY2hh biwgcGl4LT53aWR0aCwNCj4gKwkJCQkgICAgcGl4LT5oZWlnaHQsIGluZm8tPmZvdXJjYywNCj4g KwkJCQkgICAgJmluZm8tPmJwcCwNCj4gKwkJCQkgICAgcGl4LT5ieXRlc3BlcmxpbmUpOw0KPiAr CSpwaXggPSBjaGFuLT5mb3JtYXQ7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiAr c3RhdGljIGludCB0ZWdyYV9jaGFubmVsX2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZv aWQgKmZoLA0KPiArCQkJCSAgICBzdHJ1Y3QgdjRsMl9pbnB1dCAqaW5wKQ0KPiArew0KPiArCS8q IEN1cnJlbnRseSBkcml2ZXIgc3VwcG9ydHMgaW50ZXJuYWwgVFBHIG9ubHkgKi8NCj4gKwlpZiAo aW5wLT5pbmRleCAhPSAwKQ0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKw0KPiArCWlucC0+dHlw ZSA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7DQo+ICsJc3Ryc2NweShpbnAtPm5hbWUsICJUZWdy YSBUUEciLCBzaXplb2YoaW5wLT5uYW1lKSk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4g Kw0KPiArc3RhdGljIGludCB0ZWdyYV9jaGFubmVsX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUs IHZvaWQgKnByaXYsDQo+ICsJCQkJIHVuc2lnbmVkIGludCAqaSkNCj4gK3sNCj4gKwkqaSA9IDA7 DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgdGVncmFfY2hhbm5lbF9z X2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LA0KPiArCQkJCSB1bnNpZ25lZCBp bnQgaW5wdXQpDQo+ICt7DQo+ICsJaWYgKGlucHV0ID4gMCkNCj4gKwkJcmV0dXJuIC1FSU5WQUw7 DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2 NGwyX2lvY3RsX29wcyB0ZWdyYV9jaGFubmVsX2lvY3RsX29wcyA9IHsNCj4gKwkudmlkaW9jX3F1 ZXJ5Y2FwCQk9IHRlZ3JhX2NoYW5uZWxfcXVlcnljYXAsDQo+ICsJLnZpZGlvY19lbnVtX2ZtdF92 aWRfY2FwCT0gdGVncmFfY2hhbm5lbF9lbnVtX2Zvcm1hdCwNCj4gKwkudmlkaW9jX2dfZm10X3Zp ZF9jYXAJCT0gdGVncmFfY2hhbm5lbF9nZXRfZm9ybWF0LA0KPiArCS52aWRpb2Nfc19mbXRfdmlk X2NhcAkJPSB0ZWdyYV9jaGFubmVsX3NldF9mb3JtYXQsDQo+ICsJLnZpZGlvY190cnlfZm10X3Zp ZF9jYXAJCT0gdGVncmFfY2hhbm5lbF90cnlfZm9ybWF0LA0KPiArCS52aWRpb2NfZW51bV9pbnB1 dAkJPSB0ZWdyYV9jaGFubmVsX2VudW1faW5wdXQsDQo+ICsJLnZpZGlvY19nX2lucHV0CQkJPSB0 ZWdyYV9jaGFubmVsX2dfaW5wdXQsDQo+ICsJLnZpZGlvY19zX2lucHV0CQkJPSB0ZWdyYV9jaGFu bmVsX3NfaW5wdXQsDQo+ICsJLnZpZGlvY19yZXFidWZzCQkJPSB2YjJfaW9jdGxfcmVxYnVmcywN Cj4gKwkudmlkaW9jX3ByZXBhcmVfYnVmCQk9IHZiMl9pb2N0bF9wcmVwYXJlX2J1ZiwNCj4gKwku dmlkaW9jX3F1ZXJ5YnVmCQk9IHZiMl9pb2N0bF9xdWVyeWJ1ZiwNCj4gKwkudmlkaW9jX3FidWYJ CQk9IHZiMl9pb2N0bF9xYnVmLA0KPiArCS52aWRpb2NfZHFidWYJCQk9IHZiMl9pb2N0bF9kcWJ1 ZiwNCj4gKwkudmlkaW9jX2NyZWF0ZV9idWZzCQk9IHZiMl9pb2N0bF9jcmVhdGVfYnVmcywNCj4g KwkudmlkaW9jX2V4cGJ1ZgkJCT0gdmIyX2lvY3RsX2V4cGJ1ZiwNCj4gKwkudmlkaW9jX3N0cmVh bW9uCQk9IHZiMl9pb2N0bF9zdHJlYW1vbiwNCj4gKwkudmlkaW9jX3N0cmVhbW9mZgkJPSB2YjJf aW9jdGxfc3RyZWFtb2ZmLA0KPiArCS52aWRpb2Nfc3Vic2NyaWJlX2V2ZW50CQk9IHY0bDJfY3Ry bF9zdWJzY3JpYmVfZXZlbnQsDQo+ICsJLnZpZGlvY191bnN1YnNjcmliZV9ldmVudAk9IHY0bDJf ZXZlbnRfdW5zdWJzY3JpYmUsDQo+ICt9Ow0KPiArDQo+ICsvKg0KPiArICogVjRMMiBmaWxlIG9w ZXJhdGlvbnMNCj4gKyAqLw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0 aW9ucyB0ZWdyYV9jaGFubmVsX2ZvcHMgPSB7DQo+ICsJLm93bmVyCQk9IFRISVNfTU9EVUxFLA0K PiArCS51bmxvY2tlZF9pb2N0bAk9IHZpZGVvX2lvY3RsMiwNCj4gKwkub3BlbgkJPSB2NGwyX2Zo X29wZW4sDQo+ICsJLnJlbGVhc2UJPSB2YjJfZm9wX3JlbGVhc2UsDQo+ICsJLnJlYWQJCT0gdmIy X2ZvcF9yZWFkLA0KPiArCS5wb2xsCQk9IHZiMl9mb3BfcG9sbCwNCj4gKwkubW1hcAkJPSB2YjJf Zm9wX21tYXAsDQo+ICt9Ow0KPiArDQo+ICtpbnQgdGVncmFfY2hhbm5lbF9zZXR1cF9jdHJsX2hh bmRsZXIoc3RydWN0IHRlZ3JhX2NoYW5uZWwgKmNoYW4pDQo+ICt7DQo+ICsJaW50IHJldDsNCj4g Kw0KPiArCS8qIEFkZCB0ZXN0IHBhdHRlcm4gY29udHJvbCBoYW5kbGVyIHRvIHY0bDIgZGV2aWNl ICovDQo+ICsJdjRsMl9jdHJsX25ld19zdGRfbWVudV9pdGVtcygmY2hhbi0+Y3RybF9oYW5kbGVy LCAmdmlfY3RybF9vcHMsDQo+ICsJCQkJICAgICBWNEwyX0NJRF9URVNUX1BBVFRFUk4sDQo+ICsJ CQkJICAgICBBUlJBWV9TSVpFKHZpX3BhdHRlcm5fc3RyaW5ncykgLSAxLA0KPiArCQkJCSAgICAg MCwgMCwgdmlfcGF0dGVybl9zdHJpbmdzKTsNCj4gKwlpZiAoY2hhbi0+Y3RybF9oYW5kbGVyLmVy cm9yKSB7DQo+ICsJCWRldl9lcnIoY2hhbi0+dmktPmRldiwgImZhaWxlZCB0byBhZGQgVFBHIGN0 cmwgaGFuZGxlclxuIik7DQo+ICsJCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoJmNoYW4tPmN0cmxf aGFuZGxlcik7DQo+ICsJCXJldHVybiBjaGFuLT5jdHJsX2hhbmRsZXIuZXJyb3I7DQo+ICsJfQ0K PiArDQo+ICsJLyogc2V0dXAgdGhlIGNvbnRyb2xzICovDQo+ICsJcmV0ID0gdjRsMl9jdHJsX2hh bmRsZXJfc2V0dXAoJmNoYW4tPmN0cmxfaGFuZGxlcik7DQo+ICsJaWYgKHJldCA8IDApIHsNCj4g KwkJZGV2X2VycihjaGFuLT52aS0+ZGV2LCAiZmFpbGVkIHRvIHNldHVwIHY0bDIgY3RybCBoYW5k bGVyXG4iKTsNCj4gKwkJZ290byBmcmVlX2hkbDsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsN Cj4gKw0KPiArZnJlZV9oZGw6DQo+ICsJdjRsMl9jdHJsX2hhbmRsZXJfZnJlZSgmY2hhbi0+Y3Ry bF9oYW5kbGVyKTsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ICtpbnQgdGVncmFfY2hh bm5lbF9pbml0KHN0cnVjdCB0ZWdyYV9jaGFubmVsICpjaGFuKQ0KPiArew0KPiArCXN0cnVjdCB0 ZWdyYV92aSAqdmkgPSBjaGFuLT52aTsNCj4gKwlzdHJ1Y3QgdGVncmFfY2FtZXJhICpjYW0gPSBk ZXZfZ2V0X2RydmRhdGEodmktPmNsaWVudC5ob3N0KTsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJ bXV0ZXhfaW5pdCgmY2hhbi0+dmlkZW9fbG9jayk7DQo+ICsJSU5JVF9MSVNUX0hFQUQoJmNoYW4t PmNhcHR1cmUpOw0KPiArCUlOSVRfTElTVF9IRUFEKCZjaGFuLT5kb25lKTsNCj4gKwlzcGluX2xv Y2tfaW5pdCgmY2hhbi0+c3RhcnRfbG9jayk7DQo+ICsJc3Bpbl9sb2NrX2luaXQoJmNoYW4tPmRv bmVfbG9jayk7DQo+ICsJaW5pdF93YWl0cXVldWVfaGVhZCgmY2hhbi0+c3RhcnRfd2FpdCk7DQo+ ICsJaW5pdF93YWl0cXVldWVfaGVhZCgmY2hhbi0+ZG9uZV93YWl0KTsNCj4gKw0KPiArCS8qIERl ZmF1bHQgYWxpZ25tZW50cyAqLw0KPiArCWNoYW4tPndpZHRoX2FsaWduID0gVEVHUkFfV0lEVEhf QUxJR05NRU5UOw0KPiArCWNoYW4tPnN0cmlkZV9hbGlnbiA9IFRFR1JBX1NUUklERV9BTElHTk1F TlQ7DQo+ICsJY2hhbi0+aGVpZ2h0X2FsaWduID0gVEVHUkFfSEVJR0hUX0FMSUdOTUVOVDsNCj4g KwljaGFuLT5zaXplX2FsaWduID0gVEVHUkFfU0laRV9BTElHTk1FTlQ7DQo+ICsNCj4gKwkvKiBp bml0aWFsaXplIHRoZSB2aWRlbyBmb3JtYXQgKi8NCj4gKwljaGFuLT5mbXRpbmZvID0gdGVncmFf Y29yZV9nZXRfZGVmYXVsdF9mb3JtYXQoKTsNCj4gKwljaGFuLT5mb3JtYXQuY29sb3JzcGFjZSA9 IFY0TDJfQ09MT1JTUEFDRV9TUkdCOw0KPiArCWNoYW4tPmZvcm1hdC5maWVsZCA9IFY0TDJfRklF TERfTk9ORTsNCj4gKwl0ZWdyYV9jaGFubmVsX3VwZGF0ZV9mb3JtYXQoY2hhbiwgVEVHUkFfREVG X1dJRFRILCBURUdSQV9ERUZfSEVJR0hULA0KPiArCQkJCSAgICBjaGFuLT5mbXRpbmZvLT5mb3Vy Y2MsDQo+ICsJCQkJICAgICZjaGFuLT5mbXRpbmZvLT5icHAsIDApOw0KPiArDQo+ICsJLyogaW5p dGlhbGl6ZSB0aGUgbWVkaWEgZW50aXR5ICovDQo+ICsJY2hhbi0+cGFkLmZsYWdzID0gTUVESUFf UEFEX0ZMX1NJTks7DQo+ICsJcmV0ID0gbWVkaWFfZW50aXR5X3BhZHNfaW5pdCgmY2hhbi0+dmlk ZW8uZW50aXR5LCAxLCAmY2hhbi0+cGFkKTsNCj4gKwlpZiAocmV0IDwgMCkNCj4gKwkJcmV0dXJu IHJldDsNCj4gKw0KPiArCXJldCA9IHY0bDJfY3RybF9oYW5kbGVyX2luaXQoJmNoYW4tPmN0cmxf aGFuZGxlciwgTUFYX0NJRF9DT05UUk9MUyk7DQo+ICsJaWYgKGNoYW4tPmN0cmxfaGFuZGxlci5l cnJvcikgew0KPiArCQlkZXZfZXJyKHZpLT5kZXYsDQo+ICsJCQkiVjRMMiBjb250cm9scyBoYW5k bGVyIGluaXQgZmFpbGVkOiAlZFxuIiwgcmV0KTsNCj4gKwkJZ290byBjdHJsX2luaXRfZXJyb3I7 DQo+ICsJfQ0KPiArDQo+ICsJLyogaW5pdGlhbGl6ZSB0aGUgdmlkZW9fZGV2aWNlICovDQo+ICsJ Y2hhbi0+dmlkZW8uZm9wcyA9ICZ0ZWdyYV9jaGFubmVsX2ZvcHM7DQo+ICsJY2hhbi0+dmlkZW8u djRsMl9kZXYgPSAmY2FtLT52NGwyX2RldjsNCj4gKwljaGFuLT52aWRlby5xdWV1ZSA9ICZjaGFu LT5xdWV1ZTsNCj4gKwlzbnByaW50ZihjaGFuLT52aWRlby5uYW1lLCBzaXplb2YoY2hhbi0+dmlk ZW8ubmFtZSksICIlcy0lcy0ldSIsDQo+ICsJCSBkZXZfbmFtZSh2aS0+ZGV2KSwgIm91dHB1dCIs IGNoYW4tPnBvcnQpOw0KPiArCWNoYW4tPnZpZGVvLnZmbF90eXBlID0gVkZMX1RZUEVfR1JBQkJF UjsNCj4gKwljaGFuLT52aWRlby52ZmxfZGlyID0gVkZMX0RJUl9SWDsNCj4gKwljaGFuLT52aWRl by5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHk7DQo+ICsJY2hhbi0+dmlkZW8u aW9jdGxfb3BzID0gJnRlZ3JhX2NoYW5uZWxfaW9jdGxfb3BzOw0KPiArCWNoYW4tPnZpZGVvLmN0 cmxfaGFuZGxlciA9ICZjaGFuLT5jdHJsX2hhbmRsZXI7DQo+ICsJY2hhbi0+dmlkZW8ubG9jayA9 ICZjaGFuLT52aWRlb19sb2NrOw0KPiArCWNoYW4tPnZpZGVvLmRldmljZV9jYXBzID0gVjRMMl9D QVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1NUUkVBTUlORyB8DQo+ICsJCQkJICBWNEwyX0NB UF9SRUFEV1JJVEU7DQo+ICsNCj4gKwl2aWRlb19zZXRfZHJ2ZGF0YSgmY2hhbi0+dmlkZW8sIGNo YW4pOw0KPiArCWNoYW4tPnNwID0gaG9zdDF4X3N5bmNwdF9yZXF1ZXN0KCZ2aS0+Y2xpZW50LCBI T1NUMVhfU1lOQ1BUX0hBU19CQVNFKTsNCj4gKwlpZiAoIWNoYW4tPnNwKSB7DQo+ICsJCWRldl9l cnIodmktPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IHN5bmNwb2ludFxuIik7DQo+ICsJCXJldCA9 IC1FTk9NRU07DQo+ICsJCWdvdG8gaG9zdDF4X3NwX2Vycm9yOw0KPiArCX0NCj4gKw0KPiArCWNo YW4tPnF1ZXVlLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7DQo+ICsJY2hhbi0+ cXVldWUuaW9fbW9kZXMgPSBWQjJfTU1BUCB8IFZCMl9ETUFCVUYgfCBWQjJfUkVBRDsNCj4gKwlj aGFuLT5xdWV1ZS5sb2NrID0gJmNoYW4tPnZpZGVvX2xvY2s7DQo+ICsJY2hhbi0+cXVldWUuZHJ2 X3ByaXYgPSBjaGFuOw0KPiArCWNoYW4tPnF1ZXVlLmJ1Zl9zdHJ1Y3Rfc2l6ZSA9IHNpemVvZihz dHJ1Y3QgdGVncmFfY2hhbm5lbF9idWZmZXIpOw0KPiArCWNoYW4tPnF1ZXVlLm9wcyA9ICZ0ZWdy YV9jaGFubmVsX3F1ZXVlX3FvcHM7DQo+ICsJY2hhbi0+cXVldWUubWVtX29wcyA9ICZ2YjJfZG1h X2NvbnRpZ19tZW1vcHM7DQo+ICsJY2hhbi0+cXVldWUudGltZXN0YW1wX2ZsYWdzID0gVjRMMl9C VUZfRkxBR19USU1FU1RBTVBfTU9OT1RPTklDDQo+ICsJCQkJICAgfCBWNEwyX0JVRl9GTEFHX1RT VEFNUF9TUkNfRU9GOw0KDQpKdXN0IGRyb3AgVjRMMl9CVUZfRkxBR19UU1RBTVBfU1JDX0VPRiwg aXQncyAwIGFueXdheS4gSXQncyBub3QgY29tbW9uIHByYWN0aWNlDQp0byBzZXQgdGhpcy4NCg0K PiArCWNoYW4tPnF1ZXVlLmRldiA9IHZpLT5kZXY7DQo+ICsJcmV0ID0gdmIyX3F1ZXVlX2luaXQo JmNoYW4tPnF1ZXVlKTsNCj4gKwlpZiAocmV0IDwgMCkgew0KPiArCQlkZXZfZXJyKHZpLT5kZXYs DQo+ICsJCQkiZmFpbGVkIHRvIGluaXRpYWxpemUgVkIyIHF1ZXVlLCBlcnI6ICVkXG4iLCByZXQp Ow0KPiArCQlnb3RvIHZiMl9pbml0X2Vycm9yOw0KPiArCX0NCj4gKw0KPiArCXJldCA9IHZpZGVv X3JlZ2lzdGVyX2RldmljZSgmY2hhbi0+dmlkZW8sIFZGTF9UWVBFX0dSQUJCRVIsIC0xKTsNCj4g KwlpZiAocmV0IDwgMCkgew0KPiArCQlkZXZfZXJyKCZjaGFuLT52aWRlby5kZXYsDQo+ICsJCQki ZmFpbGVkIHRvIHJlZ2lzdGVyIHZpZGVvIGRldmljZSwgZXJyOiAlZFxuIiwgcmV0KTsNCj4gKwkJ Z290byB2aWRlb19yZWdpc3Rlcl9lcnJvcjsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4g Kw0KPiArdmlkZW9fcmVnaXN0ZXJfZXJyb3I6DQo+ICsJdmIyX3F1ZXVlX3JlbGVhc2UoJmNoYW4t PnF1ZXVlKTsNCj4gK3ZiMl9pbml0X2Vycm9yOg0KPiArCWhvc3QxeF9zeW5jcHRfZnJlZShjaGFu LT5zcCk7DQo+ICtob3N0MXhfc3BfZXJyb3I6DQo+ICsJdjRsMl9jdHJsX2hhbmRsZXJfZnJlZSgm Y2hhbi0+Y3RybF9oYW5kbGVyKTsNCj4gK2N0cmxfaW5pdF9lcnJvcjoNCj4gKwltZWRpYV9lbnRp dHlfY2xlYW51cCgmY2hhbi0+dmlkZW8uZW50aXR5KTsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0K PiArDQo+ICtpbnQgdGVncmFfY2hhbm5lbF9jbGVhbnVwKHN0cnVjdCB0ZWdyYV9jaGFubmVsICpj aGFuKQ0KPiArew0KPiArCWlmICh2aWRlb19pc19yZWdpc3RlcmVkKCZjaGFuLT52aWRlbykpIHsN Cj4gKwkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmNoYW4tPnZpZGVvKTsNCj4gKwkJdmIyX3F1 ZXVlX3JlbGVhc2UoJmNoYW4tPnF1ZXVlKTsNCj4gKwkJbWVkaWFfZW50aXR5X2NsZWFudXAoJmNo YW4tPnZpZGVvLmVudGl0eSk7DQo+ICsJfQ0KPiArDQo+ICsJaG9zdDF4X3N5bmNwdF9mcmVlKGNo YW4tPnNwKTsNCj4gKwl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKCZjaGFuLT5jdHJsX2hhbmRsZXIp Ow0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdp bmcvbWVkaWEvdGVncmEvdGVncmEtY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL3RlZ3Jh L3RlZ3JhLWNvcmUuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAw MDAuLjgwZWRlM2FkNzI2Ng0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2RyaXZlcnMvc3RhZ2lu Zy9tZWRpYS90ZWdyYS90ZWdyYS1jb3JlLmMNCj4gQEAgLTAsMCArMSwxMTEgQEANCj4gKy8vIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkNCj4gKy8qDQo+ICsgKiBDb3B5cmln aHQgKEMpIDIwMjAgTlZJRElBIENPUlBPUkFUSU9OLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4g KyAqLw0KPiArDQo+ICsjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+DQo+ICsjaW5jbHVkZSA8bGlu dXgva2VybmVsLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4NCj4gKyNpbmNsdWRlIDxsaW51 eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCj4gKw0KPiArI2luY2x1ZGUgIm1jX2NvbW1vbi5oIg0KPiAr I2luY2x1ZGUgInRlZ3JhLWNvcmUuaCINCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCB0ZWdy YV92aWRlb19mb3JtYXQgdGVncmFfZGVmYXVsdF9mb3JtYXQgPSB7DQo+ICsJLyogUkFXIDEwICov DQo+ICsJVEVHUkFfVkZfUkFXMTAsDQo+ICsJMTAsDQo+ICsJTUVESUFfQlVTX0ZNVF9TUkdHQjEw XzFYMTAsDQo+ICsJezIsIDF9LA0KPiArCVRFR1JBX0lNQUdFX0ZPUk1BVF9ERUYsDQo+ICsJVEVH UkFfSU1BR0VfRFRfUkFXMTAsDQo+ICsJVjRMMl9QSVhfRk1UX1NSR0dCMTAsDQo+ICsJIlJHUkcu LiBHQkdCLi4iLA0KDQpJcyB0aGlzIHN0cmluZyB1c2VkIGFueXdoZXJlPyBUaGUgdjRsMiBjb3Jl IGF1dG9tYXRpY2FsbHkgc2V0cyB0aGUgcGl4ZWxmb3JtYXQNCmRlc2NyaXB0aW9uIGZvciB5b3Ug aW4gVklESU9DX0VOVU1GTVQgdGhlc2UgZGF5cy4NCg0KPiArfTsNCj4gKw0KPiArLyoNCj4gKyAq IEhlbHBlciBmdW5jdGlvbnMNCj4gKyAqLw0KPiArDQo+ICsvKioNCj4gKyAqIHRlZ3JhX2NvcmVf Z2V0X2RlZmF1bHRfZm9ybWF0IC0gR2V0IGRlZmF1bHQgZm9ybWF0DQo+ICsgKg0KPiArICogUmV0 dXJuOiBwb2ludGVyIHRvIHRoZSBmb3JtYXQgd2hlcmUgdGhlIGRlZmF1bHQgZm9ybWF0IG5lZWRz DQo+ICsgKiB0byBiZSBmaWxsZWQgaW4uDQo+ICsgKi8NCj4gK2NvbnN0IHN0cnVjdCB0ZWdyYV92 aWRlb19mb3JtYXQgKnRlZ3JhX2NvcmVfZ2V0X2RlZmF1bHRfZm9ybWF0KHZvaWQpDQo+ICt7DQo+ ICsJcmV0dXJuICZ0ZWdyYV9kZWZhdWx0X2Zvcm1hdDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsg KiB0ZWdyYV9jb3JlX2dldF9mb3VyY2NfYnlfaWR4IC0gZ2V0IGZvdXJjYyBvZiBhIHRlZ3JhX3Zp ZGVvIGZvcm1hdA0KPiArICogQGluZGV4OiBhcnJheSBpbmRleCBvZiB0aGUgdGVncmFfdmlkZW9f Zm9ybWF0cw0KPiArICoNCj4gKyAqIFJldHVybjogZm91cmNjIGNvZGUNCj4gKyAqLw0KPiArdTMy IHRlZ3JhX2NvcmVfZ2V0X2ZvdXJjY19ieV9pZHgoc3RydWN0IHRlZ3JhX2NoYW5uZWwgKmNoYW4s DQo+ICsJCQkJIHVuc2lnbmVkIGludCBpbmRleCkNCj4gK3sNCj4gKwlpZiAoaW5kZXggPj0gY2hh bi0+bmZvcm1hdHMpDQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiArDQo+ICsJcmV0dXJuIGNoYW4t PnZpZGVvX2Zvcm1hdHNbaW5kZXhdLmZvdXJjYzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiB0 ZWdyYV9jb3JlX2dldF93b3JkX2NvdW50IC0gQ2FsY3VsYXRlIHdvcmQgY291bnQNCj4gKyAqIEBm cmFtZV93aWR0aDogbnVtYmVyIG9mIHBpeGVscyBwZXIgbGluZQ0KPiArICogQGZtdDogVGVncmEg VmlkZW8gZm9ybWF0IHN0cnVjdCB3aGljaCBoYXMgQlBQIGluZm9ybWF0aW9uDQo+ICsgKg0KPiAr ICogUmV0dXJuOiB3b3JkIGNvdW50IG51bWJlcg0KPiArICovDQo+ICt1MzIgdGVncmFfY29yZV9n ZXRfd29yZF9jb3VudCh1bnNpZ25lZCBpbnQgZnJhbWVfd2lkdGgsDQo+ICsJCQkgICAgICBjb25z dCBzdHJ1Y3QgdGVncmFfdmlkZW9fZm9ybWF0ICpmbXQpDQo+ICt7DQo+ICsJcmV0dXJuIGZyYW1l X3dpZHRoICogZm10LT53aWR0aCAvIDg7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogdGVncmFf Y29yZV9nZXRfaWR4X2J5X2NvZGUgLSBSZXRyaWV2ZSBpbmRleCBmb3IgYSBtZWRpYSBidXMgY29k ZQ0KPiArICogQGNoYW46IHRlZ3JhX2NoYW5uZWwNCj4gKyAqIEBjb2RlOiB0aGUgZm9ybWF0IG1l ZGlhIGJ1cyBjb2RlDQo+ICsgKiBAb2Zmc2V0OiBvZmZzZXQgaW4gdmlkZW8gZm9ybWF0cyBmcm9t IHdoZXJlIHRvIHN0YXJ0IHRoZSBzZWFyY2gNCj4gKyAqDQo+ICsgKiBSZXR1cm46IGEgaW5kZXgg dG8gdGhlIGZvcm1hdCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgY29ycmVzcG9uZGluZyB0byB0aGUN Cj4gKyAqIGdpdmVuIFY0TDIgbWVkaWEgYnVzIGZvcm1hdCBAY29kZSwgb3IgLTEgaWYgbm8gY29y cmVzcG9uZGluZyBmb3JtYXQgY2FuDQo+ICsgKiBiZSBmb3VuZC4NCj4gKyAqLw0KPiAraW50IHRl Z3JhX2NvcmVfZ2V0X2lkeF9ieV9jb2RlKHN0cnVjdCB0ZWdyYV9jaGFubmVsICpjaGFuLCB1bnNp Z25lZCBpbnQgY29kZSwNCj4gKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0KQ0KPiArew0K PiArCXVuc2lnbmVkIGludCBpOw0KPiArDQo+ICsJZm9yIChpID0gb2Zmc2V0OyBpIDwgY2hhbi0+ bmZvcm1hdHM7ICsraSkgew0KPiArCQlpZiAoY2hhbi0+dmlkZW9fZm9ybWF0c1tpXS5jb2RlID09 IGNvZGUpDQo+ICsJCQlyZXR1cm4gaTsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gLTE7DQo+ICt9 DQo+ICsNCj4gKy8qKg0KPiArICogdGVncmFfY29yZV9nZXRfZm9ybWF0X2J5X2ZvdXJjYyAtIFJl dHJpZXZlIGZvcm1hdCBpbmZvcm1hdGlvbiBmb3IgYSA0Q0MNCj4gKyAqIEBmb3VyY2M6IHRoZSBm b3JtYXQgNENDDQo+ICsgKg0KPiArICogUmV0dXJuOiBhIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBp bmZvcm1hdGlvbiBzdHJ1Y3R1cmUgY29ycmVzcG9uZGluZyB0byB0aGUNCj4gKyAqIGdpdmVuIFY0 TDIgZm9ybWF0IEBmb3VyY2MsIG9yIE5VTEwgaWYgbm8gY29ycmVzcG9uZGluZyBmb3JtYXQgY2Fu IGJlDQo+ICsgKiBmb3VuZC4NCj4gKyAqLw0KPiArY29uc3Qgc3RydWN0IHRlZ3JhX3ZpZGVvX2Zv cm1hdCAqDQo+ICt0ZWdyYV9jb3JlX2dldF9mb3JtYXRfYnlfZm91cmNjKHN0cnVjdCB0ZWdyYV9j aGFubmVsICpjaGFuLCB1MzIgZm91cmNjKQ0KPiArew0KPiArCXVuc2lnbmVkIGludCBpOw0KPiAr DQo+ICsJZm9yIChpID0gMDsgaSA8IGNoYW4tPm5mb3JtYXRzOyArK2kpIHsNCj4gKwkJaWYgKGNo YW4tPnZpZGVvX2Zvcm1hdHNbaV0uZm91cmNjID09IGZvdXJjYykNCj4gKwkJCXJldHVybiAmY2hh bi0+dmlkZW9fZm9ybWF0c1tpXTsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gTlVMTDsNCj4gK30N Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS90ZWdyYS90ZWdyYS1jb3JlLmgg Yi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvdGVncmEvdGVncmEtY29yZS5oDQo+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMTkzMDY1ZDIwYTk1DQo+IC0tLSAvZGV2 L251bGwNCj4gKysrIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL3RlZ3JhL3RlZ3JhLWNvcmUuaA0K PiBAQCAtMCwwICsxLDEyNSBAQA0KPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjAtb25seQ0KPiArLyoNCj4gKyAqIENvcHlyaWdodCAoQykgMjAyMCBOVklESUEgQ09SUE9SQVRJ T04uICBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPiArICovDQo+ICsNCj4gKyNpZm5kZWYgX19URUdS QV9DT1JFX0hfXw0KPiArI2RlZmluZSBfX1RFR1JBX0NPUkVfSF9fDQo+ICsNCj4gKyNpbmNsdWRl IDxtZWRpYS92NGwyLXN1YmRldi5oPg0KPiArDQo+ICsvKiBNaW5pbXVtIGFuZCBtYXhpbXVtIHdp ZHRoIGFuZCBoZWlnaHQgY29tbW9uIHRvIFRlZ3JhIHZpZGVvIGlucHV0IGRldmljZS4gKi8NCj4g KyNkZWZpbmUgVEVHUkFfTUlOX1dJRFRICQkzMlUNCj4gKyNkZWZpbmUgVEVHUkFfTUFYX1dJRFRI CQkzMjc2OFUNCj4gKyNkZWZpbmUgVEVHUkFfTUlOX0hFSUdIVAkzMlUNCj4gKyNkZWZpbmUgVEVH UkFfTUFYX0hFSUdIVAkzMjc2OFUNCj4gKw0KPiArLyogV2lkdGggYWxpZ25tZW50ICovDQo+ICsj ZGVmaW5lIFRFR1JBX1dJRFRIX0FMSUdOTUVOVAkxDQo+ICsvKiBTdHJpZGUgYWxpZ25tZW50ICov DQo+ICsjZGVmaW5lIFRFR1JBX1NUUklERV9BTElHTk1FTlQJMQ0KPiArLyogSGVpZ2h0IGFsaWdu bWVudCAqLw0KPiArI2RlZmluZSBURUdSQV9IRUlHSFRfQUxJR05NRU5UCTENCj4gKy8qIFNpemUg YWxpZ25tZW50ICovDQo+ICsjZGVmaW5lIFRFR1JBX1NJWkVfQUxJR05NRU5UCTENCj4gKw0KPiAr LyogMTA4MHAgcmVzb2x1dGlvbiBhcyBkZWZhdWx0IHJlc29sdXRpb24gZm9yIHRlc3QgcGF0dGVy biBnZW5lcmF0b3IgKi8NCj4gKyNkZWZpbmUgVEVHUkFfREVGX1dJRFRICQkxOTIwDQo+ICsjZGVm aW5lIFRFR1JBX0RFRl9IRUlHSFQJMTA4MA0KPiArDQo+ICsjZGVmaW5lIFRFR1JBX1ZGX0RFRgkJ TUVESUFfQlVTX0ZNVF9TUkdHQjEwXzFYMTANCj4gKyNkZWZpbmUgVEVHUkFfSU1BR0VfRk9STUFU X0RFRgkzMg0KPiArDQo+ICsvKg0KPiArICogVGhlc2UgZ28gaW50byB0aGUgVEVHUkFfVklfQ1NJ X25fQ1NJX0lNQUdFX0RUIHJlZ2lzdGVycyBiaXRzIDc6MA0KPiArICogSW5wdXQgZGF0YSB0eXBl IG9mIFZJIGNoYW5uZWwuDQo+ICsgKi8NCj4gK2VudW0gdGVncmFfaW1hZ2VfZHQgew0KPiArCVRF R1JBX0lNQUdFX0RUX1lVVjQyMF84ID0gMjQsDQo+ICsJVEVHUkFfSU1BR0VfRFRfWVVWNDIwXzEw LA0KPiArDQo+ICsJVEVHUkFfSU1BR0VfRFRfWVVWNDIwQ1NQU184ID0gMjgsDQo+ICsJVEVHUkFf SU1BR0VfRFRfWVVWNDIwQ1NQU18xMCwNCj4gKwlURUdSQV9JTUFHRV9EVF9ZVVY0MjJfOCwNCj4g KwlURUdSQV9JTUFHRV9EVF9ZVVY0MjJfMTAsDQo+ICsJVEVHUkFfSU1BR0VfRFRfUkdCNDQ0LA0K PiArCVRFR1JBX0lNQUdFX0RUX1JHQjU1NSwNCj4gKwlURUdSQV9JTUFHRV9EVF9SR0I1NjUsDQo+ ICsJVEVHUkFfSU1BR0VfRFRfUkdCNjY2LA0KPiArCVRFR1JBX0lNQUdFX0RUX1JHQjg4OCwNCj4g Kw0KPiArCVRFR1JBX0lNQUdFX0RUX1JBVzYgPSA0MCwNCj4gKwlURUdSQV9JTUFHRV9EVF9SQVc3 LA0KPiArCVRFR1JBX0lNQUdFX0RUX1JBVzgsDQo+ICsJVEVHUkFfSU1BR0VfRFRfUkFXMTAsDQo+ ICsJVEVHUkFfSU1BR0VfRFRfUkFXMTIsDQo+ICsJVEVHUkFfSU1BR0VfRFRfUkFXMTQsDQo+ICt9 Ow0KPiArDQo+ICsvKiBTdXBwb3J0ZWQgQ1NJIHRvIFZJIERhdGEgRm9ybWF0cyAqLw0KPiArZW51 bSB0ZWdyYV92Zl9jb2RlIHsNCj4gKwlURUdSQV9WRl9SQVc2ID0gMCwNCj4gKwlURUdSQV9WRl9S QVc3LA0KPiArCVRFR1JBX1ZGX1JBVzgsDQo+ICsJVEVHUkFfVkZfUkFXMTAsDQo+ICsJVEVHUkFf VkZfUkFXMTIsDQo+ICsJVEVHUkFfVkZfUkFXMTQsDQo+ICsJVEVHUkFfVkZfRU1CRURERUQ4LA0K PiArCVRFR1JBX1ZGX1JHQjU2NSwNCj4gKwlURUdSQV9WRl9SR0I1NTUsDQo+ICsJVEVHUkFfVkZf UkdCODg4LA0KPiArCVRFR1JBX1ZGX1JHQjQ0NCwNCj4gKwlURUdSQV9WRl9SR0I2NjYsDQo+ICsJ VEVHUkFfVkZfWVVWNDIyLA0KPiArCVRFR1JBX1ZGX1lVVjQyMCwNCj4gKwlURUdSQV9WRl9ZVVY0 MjBfQ1NQUywNCj4gK307DQo+ICsNCj4gKy8qKg0KPiArICogc3RydWN0IHRlZ3JhX2ZyYWMNCj4g KyAqIEBudW1lcmF0b3I6IG51bWVyYXRvciBvZiB0aGUgZnJhY3Rpb24NCj4gKyAqIEBkZW5vbWlu YXRvcjogZGVub21pbmF0b3Igb2YgdGhlIGZyYWN0aW9uDQo+ICsgKi8NCj4gK3N0cnVjdCB0ZWdy YV9mcmFjIHsNCj4gKwl1bnNpZ25lZCBpbnQgbnVtZXJhdG9yOw0KPiArCXVuc2lnbmVkIGludCBk ZW5vbWluYXRvcjsNCj4gK307DQo+ICsNCj4gKy8qKg0KPiArICogc3RydWN0IHRlZ3JhX3ZpZGVv X2Zvcm1hdCAtIFRlZ3JhIHZpZGVvIGZvcm1hdCBkZXNjcmlwdGlvbg0KPiArICogQHZmX2NvZGU6 IHZpZGVvIGZvcm1hdCBjb2RlDQo+ICsgKiBAd2lkdGg6IGZvcm1hdCB3aWR0aCBpbiBiaXRzIHBl ciBjb21wb25lbnQNCj4gKyAqIEBjb2RlOiBtZWRpYSBidXMgZm9ybWF0IGNvZGUNCj4gKyAqIEBi cHA6IGJ5dGVzIHBlciBwaXhlbCAod2hlbiBzdG9yZWQgaW4gbWVtb3J5KQ0KPiArICogQGltZ19m bXQ6IGltYWdlIGZvcm1hdA0KPiArICogQGltZ19kdDogaW1hZ2UgZGF0YSB0eXBlDQo+ICsgKiBA Zm91cmNjOiBWNEwyIHBpeGVsIGZvcm1hdCBGQ0MgaWRlbnRpZmllcg0KPiArICogQGRlc2NyaXB0 aW9uOiBmb3JtYXQgZGVzY3JpcHRpb24sIHN1aXRhYmxlIGZvciB1c2Vyc3BhY2UNCg0KQXMgbWVu dGlvbmVkIGFib3ZlOiB0aGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgbm8gbG9uZ2VyIG5lZWRlZC4N Cg0KPiArICovDQo+ICtzdHJ1Y3QgdGVncmFfdmlkZW9fZm9ybWF0IHsNCj4gKwllbnVtIHRlZ3Jh X3ZmX2NvZGUgdmZfY29kZTsNCj4gKwl1bnNpZ25lZCBpbnQgd2lkdGg7DQo+ICsJdW5zaWduZWQg aW50IGNvZGU7DQo+ICsJc3RydWN0IHRlZ3JhX2ZyYWMgYnBwOw0KPiArCXUzMiBpbWdfZm10Ow0K PiArCWVudW0gdGVncmFfaW1hZ2VfZHQgaW1nX2R0Ow0KPiArCXUzMiBmb3VyY2M7DQo+ICsJX191 OCBkZXNjcmlwdGlvblszMl07DQo+ICt9Ow0KPiArDQo+ICsjZGVmaW5lCVRFR1JBX1ZJREVPX0ZP Uk1BVChWRl9DT0RFLCBCUFAsIE1CVVNfQ09ERSwgRlJBQ19CUFBfTlVNLAlcDQo+ICsJRlJBQ19C UFBfREVOLCBGT1JNQVQsIERBVEFfVFlQRSwgRk9VUkNDLCBERVNDUklQVElPTikJCVwNCj4gK3sJ CQkJCQkJCQlcDQo+ICsJVEVHUkFfVkZfIyNWRl9DT0RFLAkJCQkJCVwNCj4gKwlCUFAsCQkJCQkJ CQlcDQo+ICsJTUVESUFfQlVTX0ZNVF8jI01CVVNfQ09ERSwJCQkJCVwNCj4gKwl7RlJBQ19CUFBf TlVNLCBGUkFDX0JQUF9ERU59LAkJCQkJXA0KPiArCVRFR1JBX0lNQUdFX0ZPUk1BVF8jI0ZPUk1B VCwJCQkJCVwNCj4gKwlURUdSQV9JTUFHRV9EVF8jI0RBVEFfVFlQRSwJCQkJCVwNCj4gKwlWNEwy X1BJWF9GTVRfIyNGT1VSQ0MsCQkJCQkJXA0KPiArCURFU0NSSVBUSU9OLAkJCQkJCQlcDQo+ICt9 DQo+ICsNCj4gK3UzMiB0ZWdyYV9jb3JlX2dldF93b3JkX2NvdW50KHVuc2lnbmVkIGludCBmcmFt ZV93aWR0aCwNCj4gKwkJCSAgICAgIGNvbnN0IHN0cnVjdCB0ZWdyYV92aWRlb19mb3JtYXQgKmZt dCk7DQo+ICsjZW5kaWYNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS90ZWdy YS90ZWdyYS1jc2kuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS90ZWdyYS90ZWdyYS1jc2kuYw0K PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLmY2MTUzYWNkNjBj Yg0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS90ZWdyYS90 ZWdyYS1jc2kuYw0KPiBAQCAtMCwwICsxLDM4MCBAQA0KPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAtb25seQ0KPiArLyoNCj4gKyAqIENvcHlyaWdodCAoQykgMjAyMCBOVklE SUEgQ09SUE9SQVRJT04uICBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPiArICovDQo+ICsNCj4gKyNp bmNsdWRlIDxsaW51eC9jbGsuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9jbGsvdGVncmEuaD4NCj4g KyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1 bWVyLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvaG9zdDF4Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgv bW9kdWxlLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9v Zl9ncmFwaC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPg0KPiArI2lu Y2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+DQo+ICsNCj4gKyNpbmNsdWRlICJjc2kuaCINCj4g KyNpbmNsdWRlICJtY19jb21tb24uaCINCj4gKyNpbmNsdWRlICJjc2kyX2ZvcHMuaCINCj4gKyNp bmNsdWRlICJob3N0MXgtdmlkZW8uaCINCj4gKyNpbmNsdWRlICJ2aTJfcmVnaXN0ZXJzLmgiDQo+ ICsNCj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRlZ3JhX2NzaV9kZXZpY2UgKg0KPiAraG9zdDF4 X2NsaWVudF90b19jc2koc3RydWN0IGhvc3QxeF9jbGllbnQgKmNsaWVudCkNCj4gK3sNCj4gKwly ZXR1cm4gY29udGFpbmVyX29mKGNsaWVudCwgc3RydWN0IHRlZ3JhX2NzaV9kZXZpY2UsIGNsaWVu dCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRlZ3JhX2NzaV9jaGFubmVs ICp0b19jc2lfY2hhbihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldikNCj4gK3sNCj4gKwlyZXR1 cm4gY29udGFpbmVyX29mKHN1YmRldiwgc3RydWN0IHRlZ3JhX2NzaV9jaGFubmVsLCBzdWJkZXYp Ow0KPiArfQ0KPiArDQo+ICsvKg0KPiArICogVjRMMiBTdWJkZXZpY2UgVmlkZW8gT3BlcmF0aW9u cw0KPiArICovDQo+ICtzdGF0aWMgaW50IHRlZ3JhX2NzaV9zX3N0cmVhbShzdHJ1Y3QgdjRsMl9z dWJkZXYgKnN1YmRldiwgaW50IGVuYWJsZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgdGVncmFfY3NpX2No YW5uZWwgKmNzaV9jaGFuID0gdG9fY3NpX2NoYW4oc3ViZGV2KTsNCj4gKwlzdHJ1Y3QgdGVncmFf Y3NpX2RldmljZSAqY3NpID0gY3NpX2NoYW4tPmNzaTsNCj4gKwlzdHJ1Y3QgdGVncmFfY2hhbm5l bCAqY2hhbiA9IHN1YmRldi0+aG9zdF9wcml2Ow0KPiArCXU4IHBnX21vZGUgPSBjaGFuLT52aS0+ cGdfbW9kZTsNCj4gKw0KPiArCXJldHVybiBjc2ktPmZvcHMtPmNzaV9zdGFydF9zdHJlYW1pbmco Y3NpX2NoYW4sIHBnX21vZGUsIGVuYWJsZSk7DQo+ICt9DQo+ICsNCj4gKy8qDQo+ICsgKiBPbmx5 IHVzZSB0aGlzIHN1YmRldmljZSBtZWRpYSBidXMgb3BzIGZvciB0ZXN0IHBhdHRlcm4gZ2VuZXJh dG9yLA0KPiArICogYmVjYXVzZSBDU0kgZGV2aWNlIGlzIGFuIHNlcGFyYXRlZCBzdWJkZXZpY2Ug d2hpY2ggaGFzIDYgc291cmNlDQo+ICsgKiBwYWRzIHRvIGdlbmVyYXRlIHRlc3QgcGF0dGVybi4N Cj4gKyAqLw0KPiArc3RhdGljIHN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgdGVncmFfY3NpX3Rw Z19mbXRzW10gPSB7DQo+ICsJew0KPiArCQlURUdSQV9ERUZfV0lEVEgsDQo+ICsJCVRFR1JBX0RF Rl9IRUlHSFQsDQo+ICsJCU1FRElBX0JVU19GTVRfU1JHR0IxMF8xWDEwLA0KPiArCQlWNEwyX0ZJ RUxEX05PTkUsDQo+ICsJCVY0TDJfQ09MT1JTUEFDRV9TUkdCDQo+ICsJfSwNCj4gKwl7DQo+ICsJ CVRFR1JBX0RFRl9XSURUSCwNCj4gKwkJVEVHUkFfREVGX0hFSUdIVCwNCj4gKwkJTUVESUFfQlVT X0ZNVF9SR0I4ODhfMVgzMl9QQURISSwNCj4gKwkJVjRMMl9GSUVMRF9OT05FLA0KPiArCQlWNEwy X0NPTE9SU1BBQ0VfU1JHQg0KPiArCX0NCj4gKw0KPiArfTsNCj4gKw0KPiArc3RhdGljIHN0cnVj dCB2NGwyX2ZybXNpemVfZGlzY3JldGUgdGVncmFfY3NpX3RwZ19zaXplc1tdID0gew0KPiArCXsx MjgwLCA3MjB9LA0KPiArCXsxOTIwLCAxMDgwfSwNCj4gKwl7Mzg0MCwgMjE2MH0sDQo+ICt9Ow0K PiArDQo+ICsvKg0KPiArICogVjRMMiBTdWJkZXZpY2UgUGFkIE9wZXJhdGlvbnMNCj4gKyAqLw0K PiArc3RhdGljIGludCB0ZWdyYV9jc2lfZ2V0X2Zvcm1hdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1 YmRldiwNCj4gKwkJCQlzdHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX2NvbmZpZyAqY2ZnLA0KPiArCQkJ CXN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgKmZtdCkNCj4gK3sNCj4gKwlzdHJ1Y3QgdGVncmFf Y3NpX2NoYW5uZWwgKmNzaV9jaGFuID0gdG9fY3NpX2NoYW4oc3ViZGV2KTsNCj4gKw0KPiArCW11 dGV4X2xvY2soJmNzaV9jaGFuLT5mb3JtYXRfbG9jayk7DQo+ICsJbWVtY3B5KGZtdCwgJmNzaV9j aGFuLT5wb3J0cy0+Zm9ybWF0LA0KPiArCSAgICAgICBzaXplb2Yoc3RydWN0IHY0bDJfbWJ1c19m cmFtZWZtdCkpOw0KPiArCW11dGV4X3VubG9jaygmY3NpX2NoYW4tPmZvcm1hdF9sb2NrKTsNCj4g Kw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCB0ZWdyYV9jc2lfdHJ5 X21idXNfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2LA0KPiArCQkJCSAgIHN0cnVjdCB2 NGwyX21idXNfZnJhbWVmbXQgKm1mbXQpDQo+ICt7DQo+ICsJc3RydWN0IHRlZ3JhX2NzaV9jaGFu bmVsICpjc2lfY2hhbiA9IHRvX2NzaV9jaGFuKHN1YmRldik7DQo+ICsJc3RydWN0IHRlZ3JhX2Nz aV9kZXZpY2UgKmNzaSA9IGNzaV9jaGFuLT5jc2k7DQo+ICsJY29uc3Qgc3RydWN0IHY0bDJfZnJt c2l6ZV9kaXNjcmV0ZSAqc2l6ZXM7DQo+ICsJaW50IGksIGo7DQo+ICsNCj4gKwlmb3IgKGkgPSAw OyBpIDwgQVJSQVlfU0laRSh0ZWdyYV9jc2lfdHBnX2ZtdHMpOyBpKyspIHsNCj4gKwkJc3RydWN0 IHY0bDJfbWJ1c19mcmFtZWZtdCAqbWJ1c19mbXQgPSAmdGVncmFfY3NpX3RwZ19mbXRzW2ldOw0K PiArDQo+ICsJCWlmIChtZm10LT5jb2RlID09IG1idXNfZm10LT5jb2RlKSB7DQo+ICsJCQlmb3Ig KGogPSAwOyBqIDwgQVJSQVlfU0laRSh0ZWdyYV9jc2lfdHBnX3NpemVzKTsgaisrKSB7DQo+ICsJ CQkJc2l6ZXMgPSAmdGVncmFfY3NpX3RwZ19zaXplc1tqXTsNCj4gKwkJCQlpZiAobWZtdC0+d2lk dGggPT0gc2l6ZXMtPndpZHRoICYmDQo+ICsJCQkJICAgIG1mbXQtPmhlaWdodCA9PSBzaXplcy0+ aGVpZ2h0KSB7DQo+ICsJCQkJCXJldHVybjsNCj4gKwkJCQl9DQo+ICsJCQl9DQo+ICsJCX0NCj4g Kw0KPiArCQlkZXZfaW5mbyhjc2ktPmRldiwgInVzaW5nIFRlZ3JhIGRlZmF1bHQgUkFXMTAgdmlk ZW8gZm9ybWF0XG4iKTsNCj4gKwl9DQo+ICsNCj4gKwlkZXZfaW5mbyhjc2ktPmRldiwgInVzaW5n IFRlZ3JhIGRlZmF1bHQgV0lEVEggWCBIRUlHSFQgKDE5MjB4MTA4MClcbiIpOw0KPiArCW1lbWNw eShtZm10LCB0ZWdyYV9jc2lfdHBnX2ZtdHMsIHNpemVvZihzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1l Zm10KSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgdGVncmFfY3NpX3NldF9mb3JtYXQoc3Ry dWN0IHY0bDJfc3ViZGV2ICpzdWJkZXYsDQo+ICsJCQkJc3RydWN0IHY0bDJfc3ViZGV2X3BhZF9j b25maWcgKmNmZywNCj4gKwkJCQlzdHJ1Y3QgdjRsMl9zdWJkZXZfZm9ybWF0ICpmbXQpDQo+ICt7 DQo+ICsJc3RydWN0IHRlZ3JhX2NzaV9jaGFubmVsICpjc2lfY2hhbiA9IHRvX2NzaV9jaGFuKHN1 YmRldik7DQo+ICsJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqZm9ybWF0ID0gJmZtdC0+Zm9y bWF0Ow0KPiArDQo+ICsJdGVncmFfY3NpX3RyeV9tYnVzX2ZtdChzdWJkZXYsIGZvcm1hdCk7DQo+ ICsNCj4gKwlpZiAoZm10LT53aGljaCA9PSBWNEwyX1NVQkRFVl9GT1JNQVRfVFJZKQ0KPiArCQly ZXR1cm4gMDsNCj4gKw0KPiArCW11dGV4X2xvY2soJmNzaV9jaGFuLT5mb3JtYXRfbG9jayk7DQo+ ICsJbWVtY3B5KCZjc2lfY2hhbi0+cG9ydHMtPmZvcm1hdCwgZm9ybWF0LA0KPiArCSAgICAgICBz aXplb2Yoc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCkpOw0KDQpKdXN0IGRvOiBjc2lfY2hhbi0+ cG9ydHMtPmZvcm1hdCA9ICpmb3JtYXQ7DQoNCj4gKwltdXRleF91bmxvY2soJmNzaV9jaGFuLT5m b3JtYXRfbG9jayk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArLyoNCj4gKyAq IFY0TDIgU3ViZGV2aWNlIE9wZXJhdGlvbnMNCj4gKyAqLw0KPiArc3RhdGljIHN0cnVjdCB2NGwy X3N1YmRldl92aWRlb19vcHMgdGVncmFfY3NpX3ZpZGVvX29wcyA9IHsNCj4gKwkuc19zdHJlYW0g PSB0ZWdyYV9jc2lfc19zdHJlYW0sDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgc3RydWN0IHY0bDJf c3ViZGV2X3BhZF9vcHMgdGVncmFfY3NpX3BhZF9vcHMgPSB7DQo+ICsJLmdldF9mbXQJCT0gdGVn cmFfY3NpX2dldF9mb3JtYXQsDQo+ICsJLnNldF9mbXQJCT0gdGVncmFfY3NpX3NldF9mb3JtYXQs DQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgc3RydWN0IHY0bDJfc3ViZGV2X29wcyB0ZWdyYV9jc2lf b3BzID0gew0KPiArCS52aWRlbyAgPSAmdGVncmFfY3NpX3ZpZGVvX29wcywNCj4gKwkucGFkICAg ID0gJnRlZ3JhX2NzaV9wYWRfb3BzLA0KPiArfTsNCj4gKw0KPiArLyoNCj4gKyAqIE1lZGlhIE9w ZXJhdGlvbnMNCj4gKyAqLw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBtZWRpYV9lbnRpdHlfb3Bl cmF0aW9ucyB0ZWdyYV9jc2lfbWVkaWFfb3BzID0gew0KPiArCS5saW5rX3ZhbGlkYXRlID0gdjRs Ml9zdWJkZXZfbGlua192YWxpZGF0ZSwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBpbnQgdGVncmFf Y3NpX3RwZ19jaGFubmVsc19hbGxvYyhzdHJ1Y3QgdGVncmFfY3NpX2RldmljZSAqY3NpKQ0KPiAr ew0KPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IGNzaS0+ZGV2LT5vZl9ub2RlOw0KPiAr CXVuc2lnbmVkIGludCBwb3J0X251bTsNCj4gKwlpbnQgcmV0Ow0KPiArCXN0cnVjdCB0ZWdyYV9j c2lfY2hhbm5lbCAqaXRlbTsNCj4gKwl1bnNpZ25lZCBpbnQgdHBnX2NoYW5uZWxzID0gY3NpLT5z b2NfZGF0YS0+bnVtX3RwZ19jaGFubmVsczsNCj4gKw0KPiArCS8qIGFsbG9jYXRlIENTSSBjaGFu bmVsIGZvciBlYWNoIENTSSB4MiBwb3J0cyAqLw0KPiArCWZvciAocG9ydF9udW0gPSAwOyBwb3J0 X251bSA8IHRwZ19jaGFubmVsczsgcG9ydF9udW0rKykgew0KPiArCQlpdGVtID0gZGV2bV9remFs bG9jKGNzaS0+ZGV2LCBzaXplb2YoKml0ZW0pLCBHRlBfS0VSTkVMKTsNCj4gKwkJaWYgKCFpdGVt KSB7DQo+ICsJCQlyZXQgPSAtRU5PTUVNOw0KPiArCQkJZ290byBlcnJvcjsNCj4gKwkJfQ0KPiAr DQo+ICsJCWxpc3RfYWRkX3RhaWwoJml0ZW0tPmxpc3QsICZjc2ktPmNzaV9jaGFucyk7DQo+ICsJ CWl0ZW0tPmNzaSA9IGNzaTsNCj4gKwkJaXRlbS0+Y3NpX3BvcnRfbnVtID0gcG9ydF9udW07DQo+ ICsJCWl0ZW0tPm51bWxhbmVzID0gMjsNCj4gKwkJaXRlbS0+b2Zfbm9kZSA9IG5vZGU7DQo+ICsJ CWl0ZW0tPm51bXBhZHMgPSAxOw0KPiArCQlpdGVtLT5wYWRzWzBdLmZsYWdzID0gTUVESUFfUEFE X0ZMX1NPVVJDRTsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gKw0KPiArZXJyb3I6DQo+ ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShpdGVtLCAmY3NpLT5jc2lfY2hhbnMsIGxpc3QpDQo+ICsJ CWxpc3RfZGVsKCZpdGVtLT5saXN0KTsNCj4gKw0KPiArCXJldHVybiByZXQ7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyBpbnQgdGVncmFfY3NpX2NoYW5uZWxfaW5pdChzdHJ1Y3QgdGVncmFfY3NpX2No YW5uZWwgKmNoYW4pDQo+ICt7DQo+ICsJc3RydWN0IHRlZ3JhX2NzaV9kZXZpY2UgKmNzaSA9IGNo YW4tPmNzaTsNCj4gKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldjsNCj4gKwlpbnQgcmV0Ow0K PiArDQo+ICsJY2hhbi0+cG9ydHMgPSBkZXZtX2t6YWxsb2MoY3NpLT5kZXYsIHNpemVvZihzdHJ1 Y3QgdGVncmFfY3NpX3BvcnQpLA0KPiArCQkJCSAgIEdGUF9LRVJORUwpOw0KPiArCWlmICghY2hh bi0+cG9ydHMpDQo+ICsJCXJldHVybiAtRU5PTUVNOw0KPiArDQo+ICsJbXV0ZXhfaW5pdCgmY2hh bi0+Zm9ybWF0X2xvY2spOw0KPiArDQo+ICsJLyogaW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCBmb3Jt YXQgKi8NCj4gKwljaGFuLT5wb3J0cy0+Zm9ybWF0LmNvZGUgPSBURUdSQV9WRl9ERUY7DQo+ICsJ Y2hhbi0+cG9ydHMtPmZvcm1hdC5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsNCj4gKwljaGFuLT5w b3J0cy0+Zm9ybWF0LmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQjsNCj4gKwljaGFu LT5wb3J0cy0+Zm9ybWF0LndpZHRoID0gVEVHUkFfREVGX1dJRFRIOw0KPiArCWNoYW4tPnBvcnRz LT5mb3JtYXQuaGVpZ2h0ID0gVEVHUkFfREVGX0hFSUdIVDsNCj4gKwljaGFuLT5wb3J0cy0+bGFu ZXMgPSBjaGFuLT5udW1sYW5lczsNCj4gKw0KPiArCS8qIGluaXRpYWxpemUgVjRMMiBzdWJkZXZp Y2UgYW5kIG1lZGlhIGVudGl0eSAqLw0KPiArCXN1YmRldiA9ICZjaGFuLT5zdWJkZXY7DQo+ICsJ djRsMl9zdWJkZXZfaW5pdChzdWJkZXYsICZ0ZWdyYV9jc2lfb3BzKTsNCj4gKwlzdWJkZXYtPmRl diA9IGNzaS0+ZGV2Ow0KPiArCXNucHJpbnRmKHN1YmRldi0+bmFtZSwgVjRMMl9TVUJERVZfTkFN RV9TSVpFLCAiJXMtJWQiLCAidHBnIiwNCj4gKwkJIGNoYW4tPmNzaV9wb3J0X251bSk7DQo+ICsN Cj4gKwl2NGwyX3NldF9zdWJkZXZkYXRhKHN1YmRldiwgY2hhbik7DQo+ICsJc3ViZGV2LT5md25v ZGUgPSBvZl9md25vZGVfaGFuZGxlKGNoYW4tPm9mX25vZGUpOw0KPiArCXN1YmRldi0+ZmxhZ3Mg fD0gVjRMMl9TVUJERVZfRkxfSEFTX0RFVk5PREU7DQo+ICsJc3ViZGV2LT5lbnRpdHkub3BzID0g JnRlZ3JhX2NzaV9tZWRpYV9vcHM7DQo+ICsNCj4gKwkvKiBpbml0aWFsaXplIG1lZGlhIGVudGl0 eSBwYWRzICovDQo+ICsJcmV0ID0gbWVkaWFfZW50aXR5X3BhZHNfaW5pdCgmc3ViZGV2LT5lbnRp dHksIGNoYW4tPm51bXBhZHMsDQo+ICsJCQkJICAgICBjaGFuLT5wYWRzKTsNCj4gKwlpZiAocmV0 IDwgMCkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCXJldCA9IHY0bDJfYXN5bmNfcmVnaXN0 ZXJfc3ViZGV2KHN1YmRldik7DQo+ICsJaWYgKHJldCA8IDApIHsNCj4gKwkJZGV2X2Vycihjc2kt PmRldiwgImZhaWxlZCB0byByZWdpc3RlciBzdWJkZXZcbiIpOw0KPiArCQltZWRpYV9lbnRpdHlf Y2xlYW51cCgmc3ViZGV2LT5lbnRpdHkpOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiByZXQ7DQo+ ICt9DQo+ICsNCj4gK3ZvaWQgdGVncmFfY3NpX2Vycm9yX3N0YXR1cyhzdHJ1Y3QgdjRsMl9zdWJk ZXYgKnN1YmRldikNCj4gK3sNCj4gKwlzdHJ1Y3QgdGVncmFfY3NpX2NoYW5uZWwgKmNzaV9jaGFu ID0gdG9fY3NpX2NoYW4oc3ViZGV2KTsNCj4gKwlzdHJ1Y3QgdGVncmFfY3NpX2RldmljZSAqY3Np ID0gY3NpX2NoYW4tPmNzaTsNCj4gKw0KPiArCWNzaS0+Zm9wcy0+Y3NpX2Vycl9zdGF0dXMoY3Np X2NoYW4pOw0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTCh0ZWdyYV9jc2lfZXJyb3Jfc3RhdHVzKTsN Cj4gKw0KPiArc3RhdGljIGludCB0ZWdyYV9jc2lfaW5pdChzdHJ1Y3QgaG9zdDF4X2NsaWVudCAq Y2xpZW50KQ0KPiArew0KPiArCXN0cnVjdCB0ZWdyYV9jc2lfZGV2aWNlICpjc2kgPSBob3N0MXhf Y2xpZW50X3RvX2NzaShjbGllbnQpOw0KPiArCXN0cnVjdCB0ZWdyYV9jYW1lcmEgKmNhbSA9IGRl dl9nZXRfZHJ2ZGF0YShjbGllbnQtPmhvc3QpOw0KPiArCXN0cnVjdCB0ZWdyYV9jc2lfY2hhbm5l bCAqaXRlbTsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJY2FtLT5jc2kgPSBjc2k7DQo+ICsNCj4g KwlJTklUX0xJU1RfSEVBRCgmY3NpLT5jc2lfY2hhbnMpOw0KPiArDQo+ICsJcmV0ID0gdGVncmFf Y3NpX3RwZ19jaGFubmVsc19hbGxvYyhjc2kpOw0KPiArCWlmIChyZXQgPCAwKQ0KPiArCQlyZXR1 cm4gcmV0Ow0KPiArDQo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShpdGVtLCAmY3NpLT5jc2lfY2hh bnMsIGxpc3QpIHsNCj4gKwkJcmV0ID0gdGVncmFfY3NpX2NoYW5uZWxfaW5pdChpdGVtKTsNCj4g KwkJaWYgKHJldCkNCj4gKwkJCXJldHVybiByZXQ7DQo+ICsJfQ0KPiArDQo+ICsJcmV0ID0gY3Np LT5mb3BzLT5od19pbml0KGNzaSk7DQo+ICsJaWYgKHJldCkNCj4gKwkJcmV0dXJuIHJldDsNCj4g Kw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IHRlZ3JhX2NzaV9leGl0 KHN0cnVjdCBob3N0MXhfY2xpZW50ICpjbGllbnQpDQo+ICt7DQo+ICsJc3RydWN0IHRlZ3JhX2Nh bWVyYSAqY2FtID0gZGV2X2dldF9kcnZkYXRhKGNsaWVudC0+aG9zdCk7DQo+ICsJc3RydWN0IHY0 bDJfc3ViZGV2ICpzdWJkZXY7DQo+ICsJc3RydWN0IHRlZ3JhX2NzaV9jaGFubmVsICpjaGFuOw0K PiArDQo+ICsJaWYgKCFjYW0tPmNzaSkNCj4gKwkJcmV0dXJuIDA7DQo+ICsNCj4gKwlsaXN0X2Zv cl9lYWNoX2VudHJ5KGNoYW4sICZjYW0tPmNzaS0+Y3NpX2NoYW5zLCBsaXN0KSB7DQo+ICsJCW11 dGV4X2Rlc3Ryb3koJmNoYW4tPmZvcm1hdF9sb2NrKTsNCj4gKwkJc3ViZGV2ID0gJmNoYW4tPnN1 YmRldjsNCj4gKwkJbWVkaWFfZW50aXR5X2NsZWFudXAoJnN1YmRldi0+ZW50aXR5KTsNCj4gKwkJ djRsMl9hc3luY191bnJlZ2lzdGVyX3N1YmRldihzdWJkZXYpOw0KPiArCX0NCj4gKw0KPiArCXJl dHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGhvc3QxeF9jbGllbnRf b3BzIGNzaV9jbGllbnRfb3BzID0gew0KPiArCS5pbml0ID0gdGVncmFfY3NpX2luaXQsDQo+ICsJ LmV4aXQgPSB0ZWdyYV9jc2lfZXhpdCwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBpbnQgdGVncmFf Y3NpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ICt7DQo+ICsJc3RydWN0 IHRlZ3JhX2NzaV9kZXZpY2UgKmNzaTsNCj4gKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsNCj4gKwlp bnQgcmV0Ow0KPiArDQo+ICsJY3NpID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigq Y3NpKSwgR0ZQX0tFUk5FTCk7DQo+ICsJaWYgKCFjc2kpDQo+ICsJCXJldHVybiAtRU5PTUVNOw0K PiArDQo+ICsJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVN LCAwKTsNCj4gKwljc2ktPmlvbWVtID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYs IHJlcyk7DQo+ICsJaWYgKElTX0VSUihjc2ktPmlvbWVtKSkNCj4gKwkJcmV0dXJuIFBUUl9FUlIo Y3NpLT5pb21lbSk7DQo+ICsNCj4gKwljc2ktPnNvY19kYXRhID0gb2ZfZGV2aWNlX2dldF9tYXRj aF9kYXRhKCZwZGV2LT5kZXYpOw0KPiArCWlmICghY3NpLT5zb2NfZGF0YSkgew0KPiArCQlkZXZf aW5mbygmcGRldi0+ZGV2LCAiTm8gcGxhdGZvcm0gZGF0YVxuXG4iKTsNCj4gKwkJcmV0dXJuIC1F Tk9EQVRBOw0KPiArCX0NCj4gKw0KPiArCWNzaS0+ZGV2ID0gJnBkZXYtPmRldjsNCj4gKwljc2kt PmZvcHMgPSBjc2ktPnNvY19kYXRhLT5jc2lfZm9wczsNCj4gKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0 YShwZGV2LCBjc2kpOw0KPiArDQo+ICsJLyogaW5pdGlhbGl6ZSBob3N0MXggaW50ZXJmYWNlICov DQo+ICsJSU5JVF9MSVNUX0hFQUQoJmNzaS0+Y2xpZW50Lmxpc3QpOw0KPiArCWNzaS0+Y2xpZW50 Lm9wcyA9ICZjc2lfY2xpZW50X29wczsNCj4gKwljc2ktPmNsaWVudC5kZXYgPSAmcGRldi0+ZGV2 Ow0KPiArDQo+ICsJcmV0ID0gaG9zdDF4X2NsaWVudF9yZWdpc3RlcigmY3NpLT5jbGllbnQpOw0K PiArCWlmIChyZXQgPCAwKSB7DQo+ICsJCWRldl9lcnIoY3NpLT5kZXYsICJmYWlsZWQgdG8gcmVn aXN0ZXIgaG9zdDF4IGNsaWVudDogJWRcbiIsDQo+ICsJCQlyZXQpOw0KPiArCQlyZXR1cm4gLUVO T0RFVjsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlu dCB0ZWdyYV9jc2lfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ICt7DQo+ ICsJc3RydWN0IHRlZ3JhX2NzaV9kZXZpY2UgKmNzaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBk ZXYpOw0KPiArDQo+ICsJaG9zdDF4X2NsaWVudF91bnJlZ2lzdGVyKCZjc2ktPmNsaWVudCk7DQo+ ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHN0cnVjdCB0ZWdyYV9jc2lf c29jX2RhdGEgdGVncmEyMTBfY3NpX2RhdGEgPSB7DQo+ICsJLmNzaV9mb3BzID0gJmNzaTJfZm9w cywNCj4gKwkuY2lsX21heF9jbGtfaHogPSBURUdSQTIxMF9DU0lfQ0lMX0NMS19NQVgsDQo+ICsJ Lm51bV90cGdfY2hhbm5lbHMgPSBURUdSQTIxMF9NQVhfQ0hBTk5FTFMsDQo+ICt9Ow0KPiArDQo+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB0ZWdyYV9jc2lfb2ZfaWRfdGFibGVb XSA9IHsNCj4gKwl7IC5jb21wYXRpYmxlID0gIm52aWRpYSx0ZWdyYTIxMC1jc2kiLCAuZGF0YSA9 ICZ0ZWdyYTIxMF9jc2lfZGF0YSB9LA0KPiArCXsgfQ0KPiArfTsNCj4gK01PRFVMRV9ERVZJQ0Vf VEFCTEUob2YsIHRlZ3JhX2NzaV9vZl9pZF90YWJsZSk7DQo+ICsNCj4gK3N0cnVjdCBwbGF0Zm9y bV9kcml2ZXIgdGVncmFfY3NpX2RyaXZlciA9IHsNCj4gKwkuZHJpdmVyID0gew0KPiArCQkubmFt ZQkJPSAidGVncmEtY3NpIiwNCj4gKwkJLm9mX21hdGNoX3RhYmxlCT0gdGVncmFfY3NpX29mX2lk X3RhYmxlLA0KPiArCX0sDQo+ICsJLnByb2JlCQkJPSB0ZWdyYV9jc2lfcHJvYmUsDQo+ICsJLnJl bW92ZQkJCT0gdGVncmFfY3NpX3JlbW92ZSwNCj4gK307DQo+ICsNCj4gK01PRFVMRV9BVVRIT1Io IlNvd2phbnlhIEtvbWF0aW5lbmkgPHNrb21hdGluZW5pQG52aWRpYS5jb20+Iik7DQo+ICtNT0RV TEVfREVTQ1JJUFRJT04oIk5WSURJQSBUZWdyYSBDU0kgRGV2aWNlIERyaXZlciIpOw0KPiArTU9E VUxFX0xJQ0VOU0UoIkdQTCB2MiIpOw0KDQo8c25pcD4NCg0KVGhpcyBpcyBqdXN0IGZyb20gYSBx dWljayByZXZpZXcuIEkgc2VlIGEgbnVtYmVyIG9mIGFyZWFzIHRoYXQgSSB3YW50DQp0byBkaXNj dXNzIGluIG1vcmUgZGV0YWlsLCBJIGhvcGUgdG8gZ2V0IHRvIHRoYXQgdG9tb3Jyb3cgb3IgRnJp ZGF5IGF0DQp0aGUgbGF0ZXN0LiBJJ20gY3VycmVudGx5IHRyeWluZyB0byBzZXR1cCBteSBKZXRz b24gVFgxIGJvYXJkIHNvIEkgY2FuDQp0ZXN0IHRoaXMgc2VyaWVzLg0KDQpSZWdhcmRzLA0KDQoJ SGFucw==