Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp2915338ybi; Mon, 10 Jun 2019 00:33:57 -0700 (PDT) X-Google-Smtp-Source: APXvYqwZlL8XEtTLTORB3ladHvFgHTGDihGtVn9cP2tXvxdEm7D2uHucRHvagCRuD9VAL4osmSgZ X-Received: by 2002:a17:902:2b8a:: with SMTP id l10mr30639404plb.283.1560152037628; Mon, 10 Jun 2019 00:33:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1560152037; cv=none; d=google.com; s=arc-20160816; b=TsPP0/AcWKuvuv5CjQF1zv+jmsPPz4S7KFMGmtyxCEo8KVujzsJmPnW8fJGHpqB/ke ob95E7mg+88VqXILf2TD8eov6eAmhSVn8B2xTPQU8jQ0o7qcmZb1nxQkCarx8QoAaSpR jJIU+TG1UIyE6+lUTQ24qhGCxIW4rO3vrFOtJWJ67XlIYfLvmtQNeSep7zkOIZgUEMfY M1fCLND5f/kfkPJW/n5/6qQ8a454mIb1pk0YCxOAyzlPylFEzDz9EQIH2+fCdiAQPIr1 UtiGUeHNkSOBCAZ6x75pqNBAxV/zhR1dxaebKSiwI5BLO6OkHfXcBmSfDqMqN489s0Ac vbRw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-language:accept-language:message-id:date:thread-index :thread-topic:subject:cc:to:from:dkim-signature; bh=XBRwwViLTuprIQPmavwulbKAlb854UyIc9OHu4f/JGQ=; b=V5YsBc1c4S1O6BKTra9CSI3Bh5HjmI2Ay8tZuAe09GGbAVQdrHTE2FvNHrRhrVhI1N snhdqGRJ0HqEAl7mLZx9kxGMZQRlqe+rdqBekO+2j6RQcj/vQRXfuH9ui8EmminNIf80 xwrM+opvnISxJaB6skkTdMLInVmNK9eKUW0tzkG4e73MpqZPomeJb3Ez88+tqhDqTkNa 6mF1MtDdpDaU0jc9wN7lOLECkgNRs/82FnbBLlpTxjv1CSocXVpzy4RVNW7F1+9ZxOx8 fi9U1nRZsig3fjKCt0bFFfE1YiudomBica7dAVg9FVjYJK9zJ8IVRpFNBOG0YmsOLmmB 00UQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@microchiptechnology.onmicrosoft.com header.s=selector1-microchiptechnology-onmicrosoft-com header.b=WoBFoBQL; 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=fail (p=NONE sp=NONE dis=NONE) header.from=microchip.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r1si9690686plb.147.2019.06.10.00.33.43; Mon, 10 Jun 2019 00:33:57 -0700 (PDT) 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=@microchiptechnology.onmicrosoft.com header.s=selector1-microchiptechnology-onmicrosoft-com header.b=WoBFoBQL; 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=fail (p=NONE sp=NONE dis=NONE) header.from=microchip.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388133AbfFJHdc (ORCPT + 99 others); Mon, 10 Jun 2019 03:33:32 -0400 Received: from esa3.microchip.iphmx.com ([68.232.153.233]:2409 "EHLO esa3.microchip.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388008AbfFJHdb (ORCPT ); Mon, 10 Jun 2019 03:33:31 -0400 Received-SPF: Pass (esa3.microchip.iphmx.com: domain of Eugen.Hristev@microchip.com designates 198.175.253.82 as permitted sender) identity=mailfrom; client-ip=198.175.253.82; receiver=esa3.microchip.iphmx.com; envelope-from="Eugen.Hristev@microchip.com"; x-sender="Eugen.Hristev@microchip.com"; x-conformance=spf_only; x-record-type="v=spf1"; x-record-text="v=spf1 mx a:ushub1.microchip.com a:smtpout.microchip.com a:mx1.microchip.iphmx.com a:mx2.microchip.iphmx.com include:servers.mcsv.net include:mktomail.com include:spf.protection.outlook.com ~all" Received-SPF: None (esa3.microchip.iphmx.com: no sender authenticity information available from domain of postmaster@email.microchip.com) identity=helo; client-ip=198.175.253.82; receiver=esa3.microchip.iphmx.com; envelope-from="Eugen.Hristev@microchip.com"; x-sender="postmaster@email.microchip.com"; x-conformance=spf_only Authentication-Results: esa3.microchip.iphmx.com; spf=Pass smtp.mailfrom=Eugen.Hristev@microchip.com; spf=None smtp.helo=postmaster@email.microchip.com; dkim=pass (signature verified) header.i=@microchiptechnology.onmicrosoft.com; dmarc=pass (p=none dis=none) d=microchip.com X-IronPort-AV: E=Sophos;i="5.63,573,1557212400"; d="scan'208";a="36817547" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa3.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 10 Jun 2019 00:33:26 -0700 Received: from chn-vm-ex04.mchp-main.com (10.10.87.151) by chn-vm-ex03.mchp-main.com (10.10.87.152) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 10 Jun 2019 00:33:22 -0700 Received: from NAM05-BY2-obe.outbound.protection.outlook.com (10.10.215.89) by email.microchip.com (10.10.87.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.1713.5 via Frontend Transport; Mon, 10 Jun 2019 00:33:22 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microchiptechnology.onmicrosoft.com; s=selector1-microchiptechnology-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XBRwwViLTuprIQPmavwulbKAlb854UyIc9OHu4f/JGQ=; b=WoBFoBQLXqk7CVd373h7uSU981zvjco7L79w43aALzzKUdk+xfxQPJezaI0GBRolUNSZhffWYYErIwB4+/405hBejuL1ui0gKm3ZsZXvk9RPa1V66O7MuhHF7MBpgpK8AQ5KRHPztsvzEAIQ1Jadw0ztbiTzhErFPvd5Tblvt/I= Received: from DM5PR11MB1242.namprd11.prod.outlook.com (10.168.108.8) by DM5PR11MB0057.namprd11.prod.outlook.com (10.164.155.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1965.12; Mon, 10 Jun 2019 07:33:17 +0000 Received: from DM5PR11MB1242.namprd11.prod.outlook.com ([fe80::2807:f606:3b7c:cce9]) by DM5PR11MB1242.namprd11.prod.outlook.com ([fe80::2807:f606:3b7c:cce9%9]) with mapi id 15.20.1965.017; Mon, 10 Jun 2019 07:33:17 +0000 From: To: , , , , CC: Subject: [PATCH v4 1/2] media: atmel: atmel-isc: split driver into driver base and isc Thread-Topic: [PATCH v4 1/2] media: atmel: atmel-isc: split driver into driver base and isc Thread-Index: AQHVH17FnwzJmE72E0qTyzhEE/tULA== Date: Mon, 10 Jun 2019 07:33:17 +0000 Message-ID: <1560151741-2574-1-git-send-email-eugen.hristev@microchip.com> Accept-Language: ro-RO, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: VI1PR0901CA0102.eurprd09.prod.outlook.com (2603:10a6:800:7e::28) To DM5PR11MB1242.namprd11.prod.outlook.com (2603:10b6:3:14::8) x-ms-exchange-messagesentrepresentingtype: 1 x-mailer: git-send-email 2.7.4 x-originating-ip: [94.177.32.154] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: ddb59864-4757-4b40-7bea-08d6ed75e732 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(2017052603328)(7193020);SRVR:DM5PR11MB0057; x-ms-traffictypediagnostic: DM5PR11MB0057: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2331; x-forefront-prvs: 0064B3273C x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(39860400002)(346002)(366004)(136003)(396003)(376002)(199004)(189003)(86362001)(3846002)(53946003)(486006)(107886003)(2201001)(6436002)(14444005)(25786009)(6512007)(102836004)(6116002)(6506007)(386003)(256004)(66066001)(8676002)(110136005)(81166006)(476003)(6486002)(81156014)(53936002)(316002)(64756008)(66446008)(72206003)(478600001)(8936002)(99286004)(26005)(66556008)(66476007)(66946007)(2616005)(73956011)(4326008)(71190400001)(52116002)(2906002)(36756003)(71200400001)(50226002)(30864003)(305945005)(2501003)(68736007)(186003)(7736002)(5660300002)(14454004)(461764006)(2004002)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:DM5PR11MB0057;H:DM5PR11MB1242.namprd11.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: microchip.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: BaUuwNOSSF8Fhra32govkw0T03b0V0ehvVB+YWMjFai+LAGF4gbBScY5VAg/Cpp9zptj2iQj4JEigG5yDO36D2RpF4IlFntkwoLJPG+77mcfJfC/9r6+e0M77hpGfM+8M8RgKJFg+nwdj/hzxOhuRBiubxrag+E0hHO/ahNZOVvfoqE2rrsWweega1PzRwQjHclOX41BrGviYeZwVIDeRFZqaSk+8pPX9AcMh0NDbf9cMQcvXDkdRP5mYCo3J/NDeSzFMxAGvJ4ocffs6FZbppE7QaZZ0E/zzQGvF/e+QN4zrlEO5bVoySPFxB94Tk9B6K3p4J9RfnAe/QWT8eJ3WXXoGg3i47WI1vRXPTdAusHWZCphnFt4nVpyFok/iv8iDRj0wZrwOPeA/K4ktnPws8VmaN6aSx/iFprYEnCibus= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: ddb59864-4757-4b40-7bea-08d6ed75e732 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Jun 2019 07:33:17.3282 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3f4057f3-b418-4d4e-ba84-d55b4e897d88 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: eugen.hristev@microchip.com X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR11MB0057 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org RnJvbTogRXVnZW4gSHJpc3RldiA8ZXVnZW4uaHJpc3RldkBtaWNyb2NoaXAuY29tPg0KDQpUaGlz IHNwbGl0cyB0aGUgQXRtZWwgSVNDIGRyaXZlciBpbnRvIGEgY29tbW9uIGJhc2U6IGF0bWVsLWlz Yy1iYXNlLmMNCmFuZCB0aGUgZHJpdmVyIHByb2JlL2R0IHBhcnQgLCBhdG1lbC1pc2MuYw0KVGhp cyBpcyBuZWVkZWQgdG8ga2VlcCBhIGNvbW1vbiBncm91bmQgZm9yIHRoZSBzZW5zb3IgY29udHJv bGxlciB3aGljaCB3aWxsDQpiZSByZXVzZWQuDQpUaGUgYXRtZWwtaXNjIHdpbGwgdXNlIHRoZSBj b21tb24gc3ltYm9scyBpbnNpZGUgdGhlIGF0bWVsLWlzYy1iYXNlDQpGdXR1cmUgZHJpdmVyIHdp bGwgYWxzbyB1c2UgdGhlIHNhbWUgc3ltYm9scyBhbmQgcmVkZWZpbmUgZGlmZmVyZW50IGFzcGVj dHMsDQpmb3IgYSBkaWZmZXJlbnQgdmVyc2lvbiBvZiB0aGUgSVNDLg0KVGhpcyBpcyBkb25lIHRv IGF2b2lkIGNvbXBsZXRlIGNvZGUgZHVwbGljYXRpb24gYnkgY3JlYXRpbmcgYSB0b3RhbGx5DQpk aWZmZXJlbnQgZHJpdmVyIGZvciB0aGUgbmV3IHZhcmlhbnQgb2YgdGhlIElTQy4NCg0KU2lnbmVk LW9mZi1ieTogRXVnZW4gSHJpc3RldiA8ZXVnZW4uaHJpc3RldkBtaWNyb2NoaXAuY29tPg0KLS0t DQoNCkhlbGxvIEhhbnMgYW5kIFNha2FyaSwNCg0KSSBkaWQgbWlub3IgY2hhbmdlcyBpbiB0aGlz IHZlcnNpb25zIGFjY29yZGluZyB0byB5b3VyIHJldmlld3MuIFJlZ2FyZGluZyB0aGUNCm9sZCBj aGVja3BhdGNoIGlzc3VlcywgdGhlIHBhdGNoIDIvMiBvZiB0aGlzIHNlcmllcyBhZGRyZXNzZXMg dGhvc2UuDQpSZWdhcmRpbmcgU2FrYXJpJ3MgcmV2aWV3LCBJIHdpbGwgY29tZSB1cCB3aXRoIGEg Zm9sbG93LXVwIHBhdGNoLg0KVGhpcyBwYXRjaCBpcyBqdXN0IGEgc3BsaXQsIHNvLCBpdCBrZWVw cyB0aGUgb3JpZ2luYWwgY29kZSBhcyBpdCBpcyBub3cgaW4gdGhlDQptZWRpYV90cmVlLmdpdCAu IE9uY2UgdGhlIHNwbGl0IGlzIGRvbmUgSSBjYW4gZG8gY2hhbmdlcyB0byBmaXggdXAgdGhlDQpt aW5vciBpc3N1ZXMgaW4gc2VwYXJhdGUgcGF0Y2hlcywgdG8gbm90IG1peCB1cCB0aGluZ3MuDQoN ClRoYW5rcyAhDQpFdWdlbg0KDQoNCkNoYW5nZXMgaW4gdjQ6DQotIFJlbW92ZWQgU29uZ2p1bidz IGUtbWFpbCBhZGRyZXNzIGFzIGl0J3Mgbm8gbG9uZ2VyIHZhbGlkLiBPbmx5IGtlcHQgaGlzIG5h bWUNCg0KQ2hhbmdlcyBpbiB2MzoNCi0gRml4ZWQgdXAgdGhlIGV4dGVybnMsIG1vdmVkIHRvIGhl YWRlciBmaWxlDQotIG1vdmVkIHRoZSBtb2R1bGUgcGFyYW1ldGVycyB0byBhdG1lbC1pc2MtYmFz ZS5jDQoNCkNoYW5nZXMgaW4gdjI6DQotIHJlbmFtZWQgYXRtZWwtaXNjLmMgdG8gYXRtZWwtc2Ft YTVkMi1pc2MuYyBhcyBzYW1hNWQyIGlzIHRoZSBTb0MgdGhhdA0KICBpbmNsdWRlcyB0aGlzIGhh cmR3YXJlIGJsb2NrLiBUaGUgbW9kdWxlIHdpbGwgc3RpbGwgYmUgbmFtZWQgYXRtZWwtaXNjLmtv DQotIHJlbW92ZWQgaWZkZWYgYXJvdW5kIGRlZmluaXRpb24gb2YgQVRNRUxfSVNDX05BTUUNCi0g bW92ZWQgZXh0ZXJuYWwgZGVjbGFyYXRpb25zIGluIHRoZSBzcGVjaWZpYyBmaWxlcywgdGhpcyB3 YXMgYnJlYWtpbmcNCiAgbW9kdWxlIGxvYWRpbmcNCg0KDQogTUFJTlRBSU5FUlMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNCArLQ0KIGRyaXZlcnMvbWVkaWEvcGxh dGZvcm0vYXRtZWwvTWFrZWZpbGUgICAgICAgICAgICB8ICAgIDQgKy0NCiBkcml2ZXJzL21lZGlh L3BsYXRmb3JtL2F0bWVsL2F0bWVsLWlzYy1iYXNlLmMgICAgfCAyMTUzICsrKysrKysrKysrKysr KysrKw0KIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwvYXRtZWwtaXNjLmMgICAgICAgICB8 IDI2MzQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRt ZWwvYXRtZWwtaXNjLmggICAgICAgICB8ICAyMDggKysNCiBkcml2ZXJzL21lZGlhL3BsYXRmb3Jt L2F0bWVsL2F0bWVsLXNhbWE1ZDItaXNjLmMgfCAgMzQ0ICsrKw0KIDYgZmlsZXMgY2hhbmdlZCwg MjcxMSBpbnNlcnRpb25zKCspLCAyNjM2IGRlbGV0aW9ucygtKQ0KIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVsLWlzYy1iYXNlLmMNCiBkZWxldGUg bW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1pc2MuYw0KIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVsLWlzYy5o DQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwvYXRtZWwt c2FtYTVkMi1pc2MuYw0KDQpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUw0K aW5kZXggNWNmYmVhNC4uM2RjODI4OSAxMDA2NDQNCi0tLSBhL01BSU5UQUlORVJTDQorKysgYi9N QUlOVEFJTkVSUw0KQEAgLTEwMjcwLDcgKzEwMjcwLDkgQEAgTUlDUk9DSElQIElTQyBEUklWRVIN CiBNOglFdWdlbiBIcmlzdGV2IDxldWdlbi5ocmlzdGV2QG1pY3JvY2hpcC5jb20+DQogTDoJbGlu dXgtbWVkaWFAdmdlci5rZXJuZWwub3JnDQogUzoJU3VwcG9ydGVkDQotRjoJZHJpdmVycy9tZWRp YS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1pc2MuYw0KK0Y6CWRyaXZlcnMvbWVkaWEvcGxhdGZvcm0v YXRtZWwvYXRtZWwtc2FtYTVkMi1pc2MuYw0KK0Y6CWRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRt ZWwvYXRtZWwtaXNjLmgNCitGOglkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVsLWlz Yy1iYXNlLmMNCiBGOglkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVsLWlzYy1yZWdz LmgNCiBGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWVkaWEvYXRtZWwtaXNj LnR4dA0KIA0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwvTWFrZWZp bGUgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2F0bWVsL01ha2VmaWxlDQppbmRleCAyNzAwMGQw Li45NDYyNzM2IDEwMDY0NA0KLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9NYWtl ZmlsZQ0KKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9NYWtlZmlsZQ0KQEAgLTEs MiArMSw0IEBADQotb2JqLSQoQ09ORklHX1ZJREVPX0FUTUVMX0lTQykgKz0gYXRtZWwtaXNjLm8N CithdG1lbC1pc2Mtb2JqcyA9IGF0bWVsLXNhbWE1ZDItaXNjLm8gYXRtZWwtaXNjLWJhc2Uubw0K Kw0KIG9iai0kKENPTkZJR19WSURFT19BVE1FTF9JU0kpICs9IGF0bWVsLWlzaS5vDQorb2JqLSQo Q09ORklHX1ZJREVPX0FUTUVMX0lTQykgKz0gYXRtZWwtaXNjLm8NCmRpZmYgLS1naXQgYS9kcml2 ZXJzL21lZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVsLWlzYy1iYXNlLmMgYi9kcml2ZXJzL21lZGlh L3BsYXRmb3JtL2F0bWVsL2F0bWVsLWlzYy1iYXNlLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQpp bmRleCAwMDAwMDAwLi5hYjMyOGU2DQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL21lZGlh L3BsYXRmb3JtL2F0bWVsL2F0bWVsLWlzYy1iYXNlLmMNCkBAIC0wLDAgKzEsMjE1MyBAQA0KKy8v IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQorLyoNCisgKiBNaWNyb2NoaXAgSW1h Z2UgU2Vuc29yIENvbnRyb2xsZXIgKElTQykgY29tbW9uIGRyaXZlciBiYXNlDQorICoNCisgKiBD b3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBNaWNyb2NoaXAgVGVjaG5vbG9neSwgSW5jLg0KKyAqDQor ICogQXV0aG9yOiBTb25nanVuIFd1DQorICogQXV0aG9yOiBFdWdlbiBIcmlzdGV2IDxldWdlbi5o cmlzdGV2QG1pY3JvY2hpcC5jb20+DQorICoNCisgKi8NCisNCisjaW5jbHVkZSA8bGludXgvY2xr Lmg+DQorI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPg0KKyNpbmNsdWRlIDxsaW51eC9jbGstcHJv dmlkZXIuaD4NCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4NCisjaW5jbHVkZSA8bGludXgvaW50 ZXJydXB0Lmg+DQorI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPg0KKyNpbmNsdWRlIDxsaW51eC9t b2R1bGUuaD4NCisjaW5jbHVkZSA8bGludXgvb2YuaD4NCisjaW5jbHVkZSA8bGludXgvb2ZfZ3Jh cGguaD4NCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQorI2luY2x1ZGUgPGxp bnV4L3BtX3J1bnRpbWUuaD4NCisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+DQorI2luY2x1ZGUg PGxpbnV4L3ZpZGVvZGV2Mi5oPg0KKw0KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWN0cmxzLmg+DQor I2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+DQorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZXZl bnQuaD4NCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pbWFnZS1zaXplcy5oPg0KKyNpbmNsdWRlIDxt ZWRpYS92NGwyLWlvY3RsLmg+DQorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZndub2RlLmg+DQorI2lu Y2x1ZGUgPG1lZGlhL3Y0bDItc3ViZGV2Lmg+DQorI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmMi1k bWEtY29udGlnLmg+DQorDQorI2luY2x1ZGUgImF0bWVsLWlzYy1yZWdzLmgiDQorI2luY2x1ZGUg ImF0bWVsLWlzYy5oIg0KKw0KK3Vuc2lnbmVkIGludCBkZWJ1ZzsNCittb2R1bGVfcGFyYW0oZGVi dWcsIGludCwgMDY0NCk7DQorTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImRlYnVnIGxldmVsICgw LTIpIik7DQorDQordW5zaWduZWQgaW50IHNlbnNvcl9wcmVmZXJyZWQgPSAxOw0KK21vZHVsZV9w YXJhbShzZW5zb3JfcHJlZmVycmVkLCB1aW50LCAwNjQ0KTsNCitNT0RVTEVfUEFSTV9ERVNDKHNl bnNvcl9wcmVmZXJyZWQsDQorCQkgIlNlbnNvciBpcyBwcmVmZXJyZWQgdG8gb3V0cHV0IHRoZSBz cGVjaWZpZWQgZm9ybWF0ICgxLW9uIDAtb2ZmKSwgZGVmYXVsdCAxIik7DQorDQorLyogVGhpcyBp cyBhIGxpc3Qgb2YgdGhlIGZvcm1hdHMgdGhhdCB0aGUgSVNDIGNhbiAqb3V0cHV0KiAqLw0KK3N0 cnVjdCBpc2NfZm9ybWF0IGNvbnRyb2xsZXJfZm9ybWF0c1tdID0gew0KKwl7DQorCQkuZm91cmNj CQk9IFY0TDJfUElYX0ZNVF9BUkdCNDQ0LA0KKwl9LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0TDJf UElYX0ZNVF9BUkdCNTU1LA0KKwl9LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9S R0I1NjUsDQorCX0sDQorCXsNCisJCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX0FCR1IzMiwNCisJ fSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfWEJHUjMyLA0KKwl9LA0KKwl7DQor CQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9ZVVY0MjAsDQorCX0sDQorCXsNCisJCS5mb3VyY2MJ CT0gVjRMMl9QSVhfRk1UX1lVWVYsDQorCX0sDQorCXsNCisJCS5mb3VyY2MJCT0gVjRMMl9QSVhf Rk1UX1lVVjQyMlAsDQorCX0sDQorCXsNCisJCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX0dSRVks DQorCX0sDQorfTsNCisNCisvKiBUaGlzIGlzIGEgbGlzdCBvZiBmb3JtYXRzIHRoYXQgdGhlIElT QyBjYW4gcmVjZWl2ZSBhcyAqaW5wdXQqICovDQorc3RydWN0IGlzY19mb3JtYXQgZm9ybWF0c19s aXN0W10gPSB7DQorCXsNCisJCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1NCR0dSOCwNCisJCS5t YnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NCR0dSOF8xWDgsDQorCQkucGZlX2NmZzBfYnBzCT0g SVNDX1BGRV9DRkcwX0JQU19FSUdIVCwNCisJCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfQkdC RywNCisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0dCUkc4LA0KKwkJLm1i dXNfY29kZQk9IE1FRElBX0JVU19GTVRfU0dCUkc4XzFYOCwNCisJCS5wZmVfY2ZnMF9icHMJPSBJ U0NfUEZFX0NGRzBfQlBTX0VJR0hULA0KKwkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19HQkdC LA0KKwl9LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TR1JCRzgsDQorCQkubWJ1 c19jb2RlCT0gTUVESUFfQlVTX0ZNVF9TR1JCRzhfMVg4LA0KKwkJLnBmZV9jZmcwX2Jwcwk9IElT Q19QRkVfQ0ZHMF9CUFNfRUlHSFQsDQorCQkuY2ZhX2JheWNmZwk9IElTQ19CQVlfQ0ZHX0dSR1Is DQorCX0sDQorCXsNCisJCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1NSR0dCOCwNCisJCS5tYnVz X2NvZGUJPSBNRURJQV9CVVNfRk1UX1NSR0dCOF8xWDgsDQorCQkucGZlX2NmZzBfYnBzCT0gSVND X1BGRV9DRkcwX0JQU19FSUdIVCwNCisJCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfUkdSRywN CisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0JHR1IxMCwNCisJCS5tYnVz X2NvZGUJPSBNRURJQV9CVVNfRk1UX1NCR0dSMTBfMVgxMCwNCisJCS5wZmVfY2ZnMF9icHMJPSBJ U0NfUEZHX0NGRzBfQlBTX1RFTiwNCisJCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfUkdSRywN CisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0dCUkcxMCwNCisJCS5tYnVz X2NvZGUJPSBNRURJQV9CVVNfRk1UX1NHQlJHMTBfMVgxMCwNCisJCS5wZmVfY2ZnMF9icHMJPSBJ U0NfUEZHX0NGRzBfQlBTX1RFTiwNCisJCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfR0JHQiwN CisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0dSQkcxMCwNCisJCS5tYnVz X2NvZGUJPSBNRURJQV9CVVNfRk1UX1NHUkJHMTBfMVgxMCwNCisJCS5wZmVfY2ZnMF9icHMJPSBJ U0NfUEZHX0NGRzBfQlBTX1RFTiwNCisJCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfR1JHUiwN CisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU1JHR0IxMCwNCisJCS5tYnVz X2NvZGUJPSBNRURJQV9CVVNfRk1UX1NSR0dCMTBfMVgxMCwNCisJCS5wZmVfY2ZnMF9icHMJPSBJ U0NfUEZHX0NGRzBfQlBTX1RFTiwNCisJCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfUkdSRywN CisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0JHR1IxMiwNCisJCS5tYnVz X2NvZGUJPSBNRURJQV9CVVNfRk1UX1NCR0dSMTJfMVgxMiwNCisJCS5wZmVfY2ZnMF9icHMJPSBJ U0NfUEZHX0NGRzBfQlBTX1RXRUxWRSwNCisJCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfQkdC RywNCisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0dCUkcxMiwNCisJCS5t YnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NHQlJHMTJfMVgxMiwNCisJCS5wZmVfY2ZnMF9icHMJ PSBJU0NfUEZHX0NGRzBfQlBTX1RXRUxWRSwNCisJCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdf R0JHQiwNCisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0dSQkcxMiwNCisJ CS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NHUkJHMTJfMVgxMiwNCisJCS5wZmVfY2ZnMF9i cHMJPSBJU0NfUEZHX0NGRzBfQlBTX1RXRUxWRSwNCisJCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9D RkdfR1JHUiwNCisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU1JHR0IxMiwN CisJCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NSR0dCMTJfMVgxMiwNCisJCS5wZmVfY2Zn MF9icHMJPSBJU0NfUEZHX0NGRzBfQlBTX1RXRUxWRSwNCisJCS5jZmFfYmF5Y2ZnCT0gSVNDX0JB WV9DRkdfUkdSRywNCisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfR1JFWSwN CisJCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1k4XzFYOCwNCisJCS5wZmVfY2ZnMF9icHMJ PSBJU0NfUEZFX0NGRzBfQlBTX0VJR0hULA0KKwl9LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0TDJf UElYX0ZNVF9ZVVlWLA0KKwkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfWVVZVjhfMlg4LA0K KwkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkVfQ0ZHMF9CUFNfRUlHSFQsDQorCX0sDQorCXsNCisJ CS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1JHQjU2NSwNCisJCS5tYnVzX2NvZGUJPSBNRURJQV9C VVNfRk1UX1JHQjU2NV8yWDhfTEUsDQorCQkucGZlX2NmZzBfYnBzCT0gSVNDX1BGRV9DRkcwX0JQ U19FSUdIVCwNCisJfSwNCit9Ow0KKw0KKy8qIEdhbW1hIHRhYmxlIHdpdGggZ2FtbWEgMS8yLjIg Ki8NCitjb25zdCB1MzIgaXNjX2dhbW1hX3RhYmxlW0dBTU1BX01BWCArIDFdW0dBTU1BX0VOVFJJ RVNdID0gew0KKwkvKiAwIC0tPiBnYW1tYSAxLzEuOCAqLw0KKwl7ICAgICAgMHg2NSwgIDB4NjYw MDJGLCAgMHg5NTAwMjUsICAweEJCMDAyMCwgIDB4REIwMDFELCAgMHhGODAwMUEsDQorCSAgMHgx MTMwMDE4LCAweDEyQjAwMTcsIDB4MTQyMDAxNiwgMHgxNTgwMDE0LCAweDE2RDAwMTMsIDB4MTgx MDAxMiwNCisJICAweDE5NDAwMTIsIDB4MUE2MDAxMiwgMHgxQjgwMDExLCAweDFDOTAwMTAsIDB4 MURBMDAxMCwgMHgxRUEwMDBGLA0KKwkgIDB4MUZBMDAwRiwgMHgyMDkwMDBGLCAweDIxODAwMEYs IDB4MjI3MDAwRSwgMHgyMzUwMDBFLCAweDI0MzAwMEUsDQorCSAgMHgyNTEwMDBFLCAweDI1RjAw MEQsIDB4MjZDMDAwRCwgMHgyNzkwMDBELCAweDI4NjAwMEQsIDB4MjkzMDAwQywNCisJICAweDJB MDAwMEMsIDB4MkFDMDAwQywgMHgyQjgwMDBDLCAweDJDNDAwMEMsIDB4MkQwMDAwQiwgMHgyREMw MDBCLA0KKwkgIDB4MkU3MDAwQiwgMHgyRjMwMDBCLCAweDJGRTAwMEIsIDB4MzA5MDAwQiwgMHgz MTQwMDBCLCAweDMxRjAwMEEsDQorCSAgMHgzMkEwMDBBLCAweDMzNDAwMEIsIDB4MzNGMDAwQSwg MHgzNDkwMDBBLCAweDM1NDAwMEEsIDB4MzVFMDAwQSwNCisJICAweDM2ODAwMEEsIDB4MzcyMDAw QSwgMHgzN0MwMDBBLCAweDM4NjAwMEEsIDB4MzkwMDAwOSwgMHgzOTkwMDBBLA0KKwkgIDB4M0Ez MDAwOSwgMHgzQUQwMDA5LCAweDNCNjAwMDksIDB4M0JGMDAwQSwgMHgzQzkwMDA5LCAweDNEMjAw MDksDQorCSAgMHgzREIwMDA5LCAweDNFNDAwMDksIDB4M0VEMDAwOSwgMHgzRjYwMDA5IH0sDQor DQorCS8qIDEgLS0+IGdhbW1hIDEvMiAqLw0KKwl7ICAgICAgMHg3RiwgIDB4ODAwMDM0LCAgMHhC NTAwMjgsICAweERFMDAyMSwgMHgxMDAwMDFFLCAweDExRTAwMUIsDQorCSAgMHgxMzkwMDE5LCAw eDE1MjAwMTcsIDB4MTZBMDAxNSwgMHgxODAwMDE0LCAweDE5NDAwMTQsIDB4MUE4MDAxMywNCisJ ICAweDFCQjAwMTIsIDB4MUNEMDAxMSwgMHgxREYwMDEwLCAweDFFRjAwMTAsIDB4MjAwMDAwRiwg MHgyMEYwMDBGLA0KKwkgIDB4MjFGMDAwRSwgMHgyMkQwMDBGLCAweDIzQzAwMEUsIDB4MjRBMDAw RSwgMHgyNTgwMDBELCAweDI2NTAwMEQsDQorCSAgMHgyNzMwMDBDLCAweDI3RjAwMEQsIDB4MjhD MDAwQywgMHgyOTkwMDBDLCAweDJBNTAwMEMsIDB4MkIxMDAwQiwNCisJICAweDJCQzAwMEMsIDB4 MkM4MDAwQiwgMHgyRDMwMDBDLCAweDJERjAwMEIsIDB4MkVBMDAwQSwgMHgyRjUwMDBBLA0KKwkg IDB4MkZGMDAwQiwgMHgzMEEwMDBBLCAweDMxNDAwMEIsIDB4MzFGMDAwQSwgMHgzMjkwMDBBLCAw eDMzMzAwMEEsDQorCSAgMHgzM0QwMDA5LCAweDM0NzAwMDksIDB4MzUwMDAwQSwgMHgzNUEwMDA5 LCAweDM2MzAwMEEsIDB4MzZEMDAwOSwNCisJICAweDM3NjAwMDksIDB4MzdGMDAwOSwgMHgzODgw MDA5LCAweDM5MTAwMDksIDB4MzlBMDAwOSwgMHgzQTMwMDA5LA0KKwkgIDB4M0FDMDAwOCwgMHgz QjQwMDA5LCAweDNCRDAwMDgsIDB4M0M2MDAwOCwgMHgzQ0UwMDA4LCAweDNENjAwMDksDQorCSAg MHgzREYwMDA4LCAweDNFNzAwMDgsIDB4M0VGMDAwOCwgMHgzRjcwMDA4IH0sDQorDQorCS8qIDIg LS0+IGdhbW1hIDEvMi4yICovDQorCXsgICAgICAweDk5LCAgMHg5QjAwMzgsICAweEQ0MDAyQSwg IDB4RkYwMDIzLCAweDEyMjAwMUYsIDB4MTQxMDAxQiwNCisJICAweDE1RDAwMTksIDB4MTc2MDAx NywgMHgxOEUwMDE1LCAweDFBMzAwMTUsIDB4MUI4MDAxMywgMHgxQ0MwMDEyLA0KKwkgIDB4MURF MDAxMSwgMHgxRjAwMDEwLCAweDIwMTAwMTAsIDB4MjExMDAxMCwgMHgyMjEwMDBGLCAweDIzMDAw MEYsDQorCSAgMHgyM0YwMDBFLCAweDI0RDAwMEUsIDB4MjVCMDAwRCwgMHgyNjkwMDBDLCAweDI3 NjAwMEMsIDB4MjgzMDAwQywNCisJICAweDI4RjAwMEMsIDB4MjlCMDAwQywgMHgyQTcwMDBDLCAw eDJCMzAwMEIsIDB4MkJGMDAwQiwgMHgyQ0EwMDBCLA0KKwkgIDB4MkQ1MDAwQiwgMHgyRTAwMDBB LCAweDJFQjAwMEEsIDB4MkY1MDAwQSwgMHgyRkYwMDBBLCAweDMwQTAwMEEsDQorCSAgMHgzMTQw MDA5LCAweDMxRTAwMDksIDB4MzI3MDAwQSwgMHgzMzEwMDA5LCAweDMzQTAwMDksIDB4MzQ0MDAw OSwNCisJICAweDM0RDAwMDksIDB4MzU2MDAwOSwgMHgzNUYwMDA5LCAweDM2ODAwMDgsIDB4Mzcx MDAwOCwgMHgzNzkwMDA5LA0KKwkgIDB4MzgyMDAwOCwgMHgzOEEwMDA4LCAweDM5MzAwMDgsIDB4 MzlCMDAwOCwgMHgzQTMwMDA4LCAweDNBQjAwMDgsDQorCSAgMHgzQjMwMDA4LCAweDNCQjAwMDgs IDB4M0MzMDAwOCwgMHgzQ0IwMDA3LCAweDNEMjAwMDgsIDB4M0RBMDAwNywNCisJICAweDNFMjAw MDcsIDB4M0U5MDAwNywgMHgzRjAwMDA4LCAweDNGODAwMDcgfSwNCit9Ow0KKw0KKyNkZWZpbmUg SVNDX0lTX0ZPUk1BVF9SQVcobWJ1c19jb2RlKSBcDQorCSgoKG1idXNfY29kZSkgJiAweGYwMDAp ID09IDB4MzAwMCkNCisNCitzdGF0aWMgaW5saW5lIHZvaWQgaXNjX3VwZGF0ZV9hd2JfY3RybHMo c3RydWN0IGlzY19kZXZpY2UgKmlzYykNCit7DQorCXN0cnVjdCBpc2NfY3RybHMgKmN0cmxzID0g JmlzYy0+Y3RybHM7DQorDQorCXJlZ21hcF93cml0ZShpc2MtPnJlZ21hcCwgSVNDX1dCX09fUkdS LA0KKwkJICAgICAoSVNDX1dCX09fWkVST19WQUwgLSAoY3RybHMtPm9mZnNldFtJU0NfSElTX0NG R19NT0RFX1JdKSkgfA0KKwkJICAgICAoKElTQ19XQl9PX1pFUk9fVkFMIC0gY3RybHMtPm9mZnNl dFtJU0NfSElTX0NGR19NT0RFX0dSXSkgPDwgMTYpKTsNCisJcmVnbWFwX3dyaXRlKGlzYy0+cmVn bWFwLCBJU0NfV0JfT19CR0IsDQorCQkgICAgIChJU0NfV0JfT19aRVJPX1ZBTCAtIChjdHJscy0+ b2Zmc2V0W0lTQ19ISVNfQ0ZHX01PREVfQl0pKSB8DQorCQkgICAgICgoSVNDX1dCX09fWkVST19W QUwgLSBjdHJscy0+b2Zmc2V0W0lTQ19ISVNfQ0ZHX01PREVfR0JdKSA8PCAxNikpOw0KKwlyZWdt YXBfd3JpdGUoaXNjLT5yZWdtYXAsIElTQ19XQl9HX1JHUiwNCisJCSAgICAgY3RybHMtPmdhaW5b SVNDX0hJU19DRkdfTU9ERV9SXSB8DQorCQkgICAgIChjdHJscy0+Z2FpbltJU0NfSElTX0NGR19N T0RFX0dSXSA8PCAxNikpOw0KKwlyZWdtYXBfd3JpdGUoaXNjLT5yZWdtYXAsIElTQ19XQl9HX0JH QiwNCisJCSAgICAgY3RybHMtPmdhaW5bSVNDX0hJU19DRkdfTU9ERV9CXSB8DQorCQkgICAgIChj dHJscy0+Z2FpbltJU0NfSElTX0NGR19NT0RFX0dCXSA8PCAxNikpOw0KK30NCisNCitzdGF0aWMg aW5saW5lIHZvaWQgaXNjX3Jlc2V0X2F3Yl9jdHJscyhzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0K K3sNCisJaW50IGM7DQorDQorCWZvciAoYyA9IElTQ19ISVNfQ0ZHX01PREVfR1I7IGMgPD0gSVND X0hJU19DRkdfTU9ERV9COyBjKyspIHsNCisJCS8qIGdhaW5zIGhhdmUgYSBmaXhlZCBwb2ludCBh dCA5IGRlY2ltYWxzICovDQorCQlpc2MtPmN0cmxzLmdhaW5bY10gPSAxIDw8IDk7DQorCQkvKiBv ZmZzZXRzIGFyZSBpbiAyJ3MgY29tcGxlbWVudHMsIHRoZSB2YWx1ZQ0KKwkJICogd2lsbCBiZSBz dWJzdHJhY3RlZCBmcm9tIElTQ19XQl9PX1pFUk9fVkFMIHRvIG9idGFpbg0KKwkJICogMidzIGNv bXBsZW1lbnQgb2YgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kDQorCQkgKiBJU0NfV0JfT19aRVJPX1ZB TCA+PiAxDQorCQkgKi8NCisJCWlzYy0+Y3RybHMub2Zmc2V0W2NdID0gSVNDX1dCX09fWkVST19W QUw7DQorCX0NCit9DQorDQorc3RhdGljIGludCBpc2Nfd2FpdF9jbGtfc3RhYmxlKHN0cnVjdCBj bGtfaHcgKmh3KQ0KK3sNCisJc3RydWN0IGlzY19jbGsgKmlzY19jbGsgPSB0b19pc2NfY2xrKGh3 KTsNCisJc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjX2Nsay0+cmVnbWFwOw0KKwl1bnNpZ25l ZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgdXNlY3NfdG9famlmZmllcygxMDAwKTsNCisJdW5z aWduZWQgaW50IHN0YXR1czsNCisNCisJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVv dXQpKSB7DQorCQlyZWdtYXBfcmVhZChyZWdtYXAsIElTQ19DTEtTUiwgJnN0YXR1cyk7DQorCQlp ZiAoIShzdGF0dXMgJiBJU0NfQ0xLU1JfU0lQKSkNCisJCQlyZXR1cm4gMDsNCisNCisJCXVzbGVl cF9yYW5nZSgxMCwgMjUwKTsNCisJfQ0KKw0KKwlyZXR1cm4gLUVUSU1FRE9VVDsNCit9DQorDQor c3RhdGljIGludCBpc2NfY2xrX3ByZXBhcmUoc3RydWN0IGNsa19odyAqaHcpDQorew0KKwlzdHJ1 Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRvX2lzY19jbGsoaHcpOw0KKw0KKwlpZiAoaXNjX2Nsay0+ aWQgPT0gSVNDX0lTUENLKQ0KKwkJcG1fcnVudGltZV9nZXRfc3luYyhpc2NfY2xrLT5kZXYpOw0K Kw0KKwlyZXR1cm4gaXNjX3dhaXRfY2xrX3N0YWJsZShodyk7DQorfQ0KKw0KK3N0YXRpYyB2b2lk IGlzY19jbGtfdW5wcmVwYXJlKHN0cnVjdCBjbGtfaHcgKmh3KQ0KK3sNCisJc3RydWN0IGlzY19j bGsgKmlzY19jbGsgPSB0b19pc2NfY2xrKGh3KTsNCisNCisJaXNjX3dhaXRfY2xrX3N0YWJsZSho dyk7DQorDQorCWlmIChpc2NfY2xrLT5pZCA9PSBJU0NfSVNQQ0spDQorCQlwbV9ydW50aW1lX3B1 dF9zeW5jKGlzY19jbGstPmRldik7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNjX2Nsa19lbmFibGUo c3RydWN0IGNsa19odyAqaHcpDQorew0KKwlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRvX2lz Y19jbGsoaHcpOw0KKwl1MzIgaWQgPSBpc2NfY2xrLT5pZDsNCisJc3RydWN0IHJlZ21hcCAqcmVn bWFwID0gaXNjX2Nsay0+cmVnbWFwOw0KKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KKwl1bnNpZ25l ZCBpbnQgc3RhdHVzOw0KKw0KKwlkZXZfZGJnKGlzY19jbGstPmRldiwgIklTQyBDTEs6ICVzLCBk aXYgPSAlZCwgcGFyZW50IGlkID0gJWRcbiIsDQorCQlfX2Z1bmNfXywgaXNjX2Nsay0+ZGl2LCBp c2NfY2xrLT5wYXJlbnRfaWQpOw0KKw0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXNjX2Nsay0+bG9j aywgZmxhZ3MpOw0KKwlyZWdtYXBfdXBkYXRlX2JpdHMocmVnbWFwLCBJU0NfQ0xLQ0ZHLA0KKwkJ CSAgIElTQ19DTEtDRkdfRElWX01BU0soaWQpIHwgSVNDX0NMS0NGR19TRUxfTUFTSyhpZCksDQor CQkJICAgKGlzY19jbGstPmRpdiA8PCBJU0NfQ0xLQ0ZHX0RJVl9TSElGVChpZCkpIHwNCisJCQkg ICAoaXNjX2Nsay0+cGFyZW50X2lkIDw8IElTQ19DTEtDRkdfU0VMX1NISUZUKGlkKSkpOw0KKw0K KwlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfQ0xLRU4sIElTQ19DTEsoaWQpKTsNCisJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmaXNjX2Nsay0+bG9jaywgZmxhZ3MpOw0KKw0KKwlyZWdtYXBfcmVh ZChyZWdtYXAsIElTQ19DTEtTUiwgJnN0YXR1cyk7DQorCWlmIChzdGF0dXMgJiBJU0NfQ0xLKGlk KSkNCisJCXJldHVybiAwOw0KKwllbHNlDQorCQlyZXR1cm4gLUVJTlZBTDsNCit9DQorDQorc3Rh dGljIHZvaWQgaXNjX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGtfaHcgKmh3KQ0KK3sNCisJc3RydWN0 IGlzY19jbGsgKmlzY19jbGsgPSB0b19pc2NfY2xrKGh3KTsNCisJdTMyIGlkID0gaXNjX2Nsay0+ aWQ7DQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQorDQorCXNwaW5fbG9ja19pcnFzYXZlKCZpc2Nf Y2xrLT5sb2NrLCBmbGFncyk7DQorCXJlZ21hcF93cml0ZShpc2NfY2xrLT5yZWdtYXAsIElTQ19D TEtESVMsIElTQ19DTEsoaWQpKTsNCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNjX2Nsay0+ bG9jaywgZmxhZ3MpOw0KK30NCisNCitzdGF0aWMgaW50IGlzY19jbGtfaXNfZW5hYmxlZChzdHJ1 Y3QgY2xrX2h3ICpodykNCit7DQorCXN0cnVjdCBpc2NfY2xrICppc2NfY2xrID0gdG9faXNjX2Ns ayhodyk7DQorCXUzMiBzdGF0dXM7DQorDQorCWlmIChpc2NfY2xrLT5pZCA9PSBJU0NfSVNQQ0sp DQorCQlwbV9ydW50aW1lX2dldF9zeW5jKGlzY19jbGstPmRldik7DQorDQorCXJlZ21hcF9yZWFk KGlzY19jbGstPnJlZ21hcCwgSVNDX0NMS1NSLCAmc3RhdHVzKTsNCisNCisJaWYgKGlzY19jbGst PmlkID09IElTQ19JU1BDSykNCisJCXBtX3J1bnRpbWVfcHV0X3N5bmMoaXNjX2Nsay0+ZGV2KTsN CisNCisJcmV0dXJuIHN0YXR1cyAmIElTQ19DTEsoaXNjX2Nsay0+aWQpID8gMSA6IDA7DQorfQ0K Kw0KK3N0YXRpYyB1bnNpZ25lZCBsb25nDQoraXNjX2Nsa19yZWNhbGNfcmF0ZShzdHJ1Y3QgY2xr X2h3ICpodywgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkNCit7DQorCXN0cnVjdCBpc2NfY2xr ICppc2NfY2xrID0gdG9faXNjX2Nsayhodyk7DQorDQorCXJldHVybiBESVZfUk9VTkRfQ0xPU0VT VChwYXJlbnRfcmF0ZSwgaXNjX2Nsay0+ZGl2ICsgMSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNj X2Nsa19kZXRlcm1pbmVfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywNCisJCQkJICAgc3RydWN0IGNs a19yYXRlX3JlcXVlc3QgKnJlcSkNCit7DQorCXN0cnVjdCBpc2NfY2xrICppc2NfY2xrID0gdG9f aXNjX2Nsayhodyk7DQorCWxvbmcgYmVzdF9yYXRlID0gLUVJTlZBTDsNCisJaW50IGJlc3RfZGlm ZiA9IC0xOw0KKwl1bnNpZ25lZCBpbnQgaSwgZGl2Ow0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgY2xr X2h3X2dldF9udW1fcGFyZW50cyhodyk7IGkrKykgew0KKwkJc3RydWN0IGNsa19odyAqcGFyZW50 Ow0KKwkJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsNCisNCisJCXBhcmVudCA9IGNsa19od19n ZXRfcGFyZW50X2J5X2luZGV4KGh3LCBpKTsNCisJCWlmICghcGFyZW50KQ0KKwkJCWNvbnRpbnVl Ow0KKw0KKwkJcGFyZW50X3JhdGUgPSBjbGtfaHdfZ2V0X3JhdGUocGFyZW50KTsNCisJCWlmICgh cGFyZW50X3JhdGUpDQorCQkJY29udGludWU7DQorDQorCQlmb3IgKGRpdiA9IDE7IGRpdiA8IElT Q19DTEtfTUFYX0RJViArIDI7IGRpdisrKSB7DQorCQkJdW5zaWduZWQgbG9uZyByYXRlOw0KKwkJ CWludCBkaWZmOw0KKw0KKwkJCXJhdGUgPSBESVZfUk9VTkRfQ0xPU0VTVChwYXJlbnRfcmF0ZSwg ZGl2KTsNCisJCQlkaWZmID0gYWJzKHJlcS0+cmF0ZSAtIHJhdGUpOw0KKw0KKwkJCWlmIChiZXN0 X2RpZmYgPCAwIHx8IGJlc3RfZGlmZiA+IGRpZmYpIHsNCisJCQkJYmVzdF9yYXRlID0gcmF0ZTsN CisJCQkJYmVzdF9kaWZmID0gZGlmZjsNCisJCQkJcmVxLT5iZXN0X3BhcmVudF9yYXRlID0gcGFy ZW50X3JhdGU7DQorCQkJCXJlcS0+YmVzdF9wYXJlbnRfaHcgPSBwYXJlbnQ7DQorCQkJfQ0KKw0K KwkJCWlmICghYmVzdF9kaWZmIHx8IHJhdGUgPCByZXEtPnJhdGUpDQorCQkJCWJyZWFrOw0KKwkJ fQ0KKw0KKwkJaWYgKCFiZXN0X2RpZmYpDQorCQkJYnJlYWs7DQorCX0NCisNCisJZGV2X2RiZyhp c2NfY2xrLT5kZXYsDQorCQkiSVNDIENMSzogJXMsIGJlc3RfcmF0ZSA9ICVsZCwgcGFyZW50IGNs azogJXMgQCAlbGRcbiIsDQorCQlfX2Z1bmNfXywgYmVzdF9yYXRlLA0KKwkJX19jbGtfZ2V0X25h bWUoKHJlcS0+YmVzdF9wYXJlbnRfaHcpLT5jbGspLA0KKwkJcmVxLT5iZXN0X3BhcmVudF9yYXRl KTsNCisNCisJaWYgKGJlc3RfcmF0ZSA8IDApDQorCQlyZXR1cm4gYmVzdF9yYXRlOw0KKw0KKwly ZXEtPnJhdGUgPSBiZXN0X3JhdGU7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50 IGlzY19jbGtfc2V0X3BhcmVudChzdHJ1Y3QgY2xrX2h3ICpodywgdTggaW5kZXgpDQorew0KKwlz dHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRvX2lzY19jbGsoaHcpOw0KKw0KKwlpZiAoaW5kZXgg Pj0gY2xrX2h3X2dldF9udW1fcGFyZW50cyhodykpDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJ aXNjX2Nsay0+cGFyZW50X2lkID0gaW5kZXg7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0 aWMgdTggaXNjX2Nsa19nZXRfcGFyZW50KHN0cnVjdCBjbGtfaHcgKmh3KQ0KK3sNCisJc3RydWN0 IGlzY19jbGsgKmlzY19jbGsgPSB0b19pc2NfY2xrKGh3KTsNCisNCisJcmV0dXJuIGlzY19jbGst PnBhcmVudF9pZDsNCit9DQorDQorc3RhdGljIGludCBpc2NfY2xrX3NldF9yYXRlKHN0cnVjdCBj bGtfaHcgKmh3LA0KKwkJCSAgICAgdW5zaWduZWQgbG9uZyByYXRlLA0KKwkJCSAgICAgdW5zaWdu ZWQgbG9uZyBwYXJlbnRfcmF0ZSkNCit7DQorCXN0cnVjdCBpc2NfY2xrICppc2NfY2xrID0gdG9f aXNjX2Nsayhodyk7DQorCXUzMiBkaXY7DQorDQorCWlmICghcmF0ZSkNCisJCXJldHVybiAtRUlO VkFMOw0KKw0KKwlkaXYgPSBESVZfUk9VTkRfQ0xPU0VTVChwYXJlbnRfcmF0ZSwgcmF0ZSk7DQor CWlmIChkaXYgPiAoSVNDX0NMS19NQVhfRElWICsgMSkgfHwgIWRpdikNCisJCXJldHVybiAtRUlO VkFMOw0KKw0KKwlpc2NfY2xrLT5kaXYgPSBkaXYgLSAxOw0KKw0KKwlyZXR1cm4gMDsNCit9DQor DQorc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3BzIGlzY19jbGtfb3BzID0gew0KKwkucHJlcGFy ZQk9IGlzY19jbGtfcHJlcGFyZSwNCisJLnVucHJlcGFyZQk9IGlzY19jbGtfdW5wcmVwYXJlLA0K KwkuZW5hYmxlCQk9IGlzY19jbGtfZW5hYmxlLA0KKwkuZGlzYWJsZQk9IGlzY19jbGtfZGlzYWJs ZSwNCisJLmlzX2VuYWJsZWQJPSBpc2NfY2xrX2lzX2VuYWJsZWQsDQorCS5yZWNhbGNfcmF0ZQk9 IGlzY19jbGtfcmVjYWxjX3JhdGUsDQorCS5kZXRlcm1pbmVfcmF0ZQk9IGlzY19jbGtfZGV0ZXJt aW5lX3JhdGUsDQorCS5zZXRfcGFyZW50CT0gaXNjX2Nsa19zZXRfcGFyZW50LA0KKwkuZ2V0X3Bh cmVudAk9IGlzY19jbGtfZ2V0X3BhcmVudCwNCisJLnNldF9yYXRlCT0gaXNjX2Nsa19zZXRfcmF0 ZSwNCit9Ow0KKw0KK3N0YXRpYyBpbnQgaXNjX2Nsa19yZWdpc3RlcihzdHJ1Y3QgaXNjX2Rldmlj ZSAqaXNjLCB1bnNpZ25lZCBpbnQgaWQpDQorew0KKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBp c2MtPnJlZ21hcDsNCisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGlzYy0+ZGV2LT5vZl9ub2Rl Ow0KKwlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsazsNCisJc3RydWN0IGNsa19pbml0X2RhdGEgaW5p dDsNCisJY29uc3QgY2hhciAqY2xrX25hbWUgPSBucC0+bmFtZTsNCisJY29uc3QgY2hhciAqcGFy ZW50X25hbWVzWzNdOw0KKwlpbnQgbnVtX3BhcmVudHM7DQorDQorCW51bV9wYXJlbnRzID0gb2Zf Y2xrX2dldF9wYXJlbnRfY291bnQobnApOw0KKwlpZiAobnVtX3BhcmVudHMgPCAxIHx8IG51bV9w YXJlbnRzID4gMykNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwlpZiAobnVtX3BhcmVudHMgPiAy ICYmIGlkID09IElTQ19JU1BDSykNCisJCW51bV9wYXJlbnRzID0gMjsNCisNCisJb2ZfY2xrX3Bh cmVudF9maWxsKG5wLCBwYXJlbnRfbmFtZXMsIG51bV9wYXJlbnRzKTsNCisNCisJaWYgKGlkID09 IElTQ19NQ0spDQorCQlvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwgImNsb2NrLW91dHB1dC1u YW1lcyIsICZjbGtfbmFtZSk7DQorCWVsc2UNCisJCWNsa19uYW1lID0gImlzYy1pc3BjayI7DQor DQorCWluaXQucGFyZW50X25hbWVzCT0gcGFyZW50X25hbWVzOw0KKwlpbml0Lm51bV9wYXJlbnRz CT0gbnVtX3BhcmVudHM7DQorCWluaXQubmFtZQkJPSBjbGtfbmFtZTsNCisJaW5pdC5vcHMJCT0g JmlzY19jbGtfb3BzOw0KKwlpbml0LmZsYWdzCQk9IENMS19TRVRfUkFURV9HQVRFIHwgQ0xLX1NF VF9QQVJFTlRfR0FURTsNCisNCisJaXNjX2NsayA9ICZpc2MtPmlzY19jbGtzW2lkXTsNCisJaXNj X2Nsay0+aHcuaW5pdAk9ICZpbml0Ow0KKwlpc2NfY2xrLT5yZWdtYXAJCT0gcmVnbWFwOw0KKwlp c2NfY2xrLT5pZAkJPSBpZDsNCisJaXNjX2Nsay0+ZGV2CQk9IGlzYy0+ZGV2Ow0KKwlzcGluX2xv Y2tfaW5pdCgmaXNjX2Nsay0+bG9jayk7DQorDQorCWlzY19jbGstPmNsayA9IGNsa19yZWdpc3Rl cihpc2MtPmRldiwgJmlzY19jbGstPmh3KTsNCisJaWYgKElTX0VSUihpc2NfY2xrLT5jbGspKSB7 DQorCQlkZXZfZXJyKGlzYy0+ZGV2LCAiJXM6IGNsb2NrIHJlZ2lzdGVyIGZhaWxcbiIsIGNsa19u YW1lKTsNCisJCXJldHVybiBQVFJfRVJSKGlzY19jbGstPmNsayk7DQorCX0gZWxzZSBpZiAoaWQg PT0gSVNDX01DSykNCisJCW9mX2Nsa19hZGRfcHJvdmlkZXIobnAsIG9mX2Nsa19zcmNfc2ltcGxl X2dldCwgaXNjX2Nsay0+Y2xrKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBpc2NfY2xr X2luaXQoc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCit7DQorCXVuc2lnbmVkIGludCBpOw0KKwlp bnQgcmV0Ow0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpc2MtPmlzY19jbGtzKTsg aSsrKQ0KKwkJaXNjLT5pc2NfY2xrc1tpXS5jbGsgPSBFUlJfUFRSKC1FSU5WQUwpOw0KKw0KKwlm b3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpc2MtPmlzY19jbGtzKTsgaSsrKSB7DQorCQlyZXQg PSBpc2NfY2xrX3JlZ2lzdGVyKGlzYywgaSk7DQorCQlpZiAocmV0KQ0KKwkJCXJldHVybiByZXQ7 DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3ZvaWQgaXNjX2Nsa19jbGVhbnVwKHN0cnVj dCBpc2NfZGV2aWNlICppc2MpDQorew0KKwl1bnNpZ25lZCBpbnQgaTsNCisNCisJb2ZfY2xrX2Rl bF9wcm92aWRlcihpc2MtPmRldi0+b2Zfbm9kZSk7DQorDQorCWZvciAoaSA9IDA7IGkgPCBBUlJB WV9TSVpFKGlzYy0+aXNjX2Nsa3MpOyBpKyspIHsNCisJCXN0cnVjdCBpc2NfY2xrICppc2NfY2xr ID0gJmlzYy0+aXNjX2Nsa3NbaV07DQorDQorCQlpZiAoIUlTX0VSUihpc2NfY2xrLT5jbGspKQ0K KwkJCWNsa191bnJlZ2lzdGVyKGlzY19jbGstPmNsayk7DQorCX0NCit9DQorDQorc3RhdGljIGlu dCBpc2NfcXVldWVfc2V0dXAoc3RydWN0IHZiMl9xdWV1ZSAqdnEsDQorCQkJICAgIHVuc2lnbmVk IGludCAqbmJ1ZmZlcnMsIHVuc2lnbmVkIGludCAqbnBsYW5lcywNCisJCQkgICAgdW5zaWduZWQg aW50IHNpemVzW10sIHN0cnVjdCBkZXZpY2UgKmFsbG9jX2RldnNbXSkNCit7DQorCXN0cnVjdCBp c2NfZGV2aWNlICppc2MgPSB2YjJfZ2V0X2Rydl9wcml2KHZxKTsNCisJdW5zaWduZWQgaW50IHNp emUgPSBpc2MtPmZtdC5mbXQucGl4LnNpemVpbWFnZTsNCisNCisJaWYgKCpucGxhbmVzKQ0KKwkJ cmV0dXJuIHNpemVzWzBdIDwgc2l6ZSA/IC1FSU5WQUwgOiAwOw0KKw0KKwkqbnBsYW5lcyA9IDE7 DQorCXNpemVzWzBdID0gc2l6ZTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQg aXNjX2J1ZmZlcl9wcmVwYXJlKHN0cnVjdCB2YjJfYnVmZmVyICp2YikNCit7DQorCXN0cnVjdCB2 YjJfdjRsMl9idWZmZXIgKnZidWYgPSB0b192YjJfdjRsMl9idWZmZXIodmIpOw0KKwlzdHJ1Y3Qg aXNjX2RldmljZSAqaXNjID0gdmIyX2dldF9kcnZfcHJpdih2Yi0+dmIyX3F1ZXVlKTsNCisJdW5z aWduZWQgbG9uZyBzaXplID0gaXNjLT5mbXQuZm10LnBpeC5zaXplaW1hZ2U7DQorDQorCWlmICh2 YjJfcGxhbmVfc2l6ZSh2YiwgMCkgPCBzaXplKSB7DQorCQl2NGwyX2VycigmaXNjLT52NGwyX2Rl diwgImJ1ZmZlciB0b28gc21hbGwgKCVsdSA8ICVsdSlcbiIsDQorCQkJIHZiMl9wbGFuZV9zaXpl KHZiLCAwKSwgc2l6ZSk7DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwl2YjJfc2V0X3Bs YW5lX3BheWxvYWQodmIsIDAsIHNpemUpOw0KKw0KKwl2YnVmLT5maWVsZCA9IGlzYy0+Zm10LmZt dC5waXguZmllbGQ7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgdm9pZCBpc2Nfc3Rh cnRfZG1hKHN0cnVjdCBpc2NfZGV2aWNlICppc2MpDQorew0KKwlzdHJ1Y3QgcmVnbWFwICpyZWdt YXAgPSBpc2MtPnJlZ21hcDsNCisJdTMyIHNpemVpbWFnZSA9IGlzYy0+Zm10LmZtdC5waXguc2l6 ZWltYWdlOw0KKwl1MzIgZGN0cmxfZHZpZXc7DQorCWRtYV9hZGRyX3QgYWRkcjA7DQorCXUzMiBo LCB3Ow0KKw0KKwloID0gaXNjLT5mbXQuZm10LnBpeC5oZWlnaHQ7DQorCXcgPSBpc2MtPmZtdC5m bXQucGl4LndpZHRoOw0KKw0KKwkvKg0KKwkgKiBJbiBjYXNlIHRoZSBzZW5zb3IgaXMgbm90IFJB VywgaXQgd2lsbCBvdXRwdXQgYSBwaXhlbCAoMTItMTYgYml0cykNCisJICogd2l0aCB0d28gc2Ft cGxlcyBvbiB0aGUgSVNDIERhdGEgYnVzICh3aGljaCBpcyA4LTEyKQ0KKwkgKiBJU0Mgd2lsbCBj b3VudCBlYWNoIHNhbXBsZSwgc28sIHdlIG5lZWQgdG8gbXVsdGlwbHkgdGhlc2UgdmFsdWVzDQor CSAqIGJ5IHR3bywgdG8gZ2V0IHRoZSByZWFsIG51bWJlciBvZiBzYW1wbGVzIGZvciB0aGUgcmVx dWlyZWQgcGl4ZWxzLg0KKwkgKi8NCisJaWYgKCFJU0NfSVNfRk9STUFUX1JBVyhpc2MtPmNvbmZp Zy5zZF9mb3JtYXQtPm1idXNfY29kZSkpIHsNCisJCWggPDw9IDE7DQorCQl3IDw8PSAxOw0KKwl9 DQorDQorCS8qDQorCSAqIFdlIGxpbWl0IHRoZSBjb2x1bW4vcm93IGNvdW50IHRoYXQgdGhlIElT QyB3aWxsIG91dHB1dCBhY2NvcmRpbmcNCisJICogdG8gdGhlIGNvbmZpZ3VyZWQgcmVzb2x1dGlv biB0aGF0IHdlIHdhbnQuDQorCSAqIFRoaXMgd2lsbCBhdm9pZCB0aGUgc2l0dWF0aW9uIHdoZXJl IHRoZSBzZW5zb3IgaXMgbWlzY29uZmlndXJlZCwNCisJICogc2VuZGluZyBtb3JlIGRhdGEsIGFu ZCB0aGUgSVNDIHdpbGwganVzdCB0YWtlIGl0IGFuZCBETUEgdG8gbWVtb3J5LA0KKwkgKiBjYXVz aW5nIGNvcnJ1cHRpb24uDQorCSAqLw0KKwlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfUEZFX0NG RzEsDQorCQkgICAgIChJU0NfUEZFX0NGRzFfQ09MTUlOKDApICYgSVNDX1BGRV9DRkcxX0NPTE1J Tl9NQVNLKSB8DQorCQkgICAgIChJU0NfUEZFX0NGRzFfQ09MTUFYKHcgLSAxKSAmIElTQ19QRkVf Q0ZHMV9DT0xNQVhfTUFTSykpOw0KKw0KKwlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfUEZFX0NG RzIsDQorCQkgICAgIChJU0NfUEZFX0NGRzJfUk9XTUlOKDApICYgSVNDX1BGRV9DRkcyX1JPV01J Tl9NQVNLKSB8DQorCQkgICAgIChJU0NfUEZFX0NGRzJfUk9XTUFYKGggLSAxKSAmIElTQ19QRkVf Q0ZHMl9ST1dNQVhfTUFTSykpOw0KKw0KKwlyZWdtYXBfdXBkYXRlX2JpdHMocmVnbWFwLCBJU0Nf UEZFX0NGRzAsDQorCQkJICAgSVNDX1BGRV9DRkcwX0NPTEVOIHwgSVNDX1BGRV9DRkcwX1JPV0VO LA0KKwkJCSAgIElTQ19QRkVfQ0ZHMF9DT0xFTiB8IElTQ19QRkVfQ0ZHMF9ST1dFTik7DQorDQor CWFkZHIwID0gdmIyX2RtYV9jb250aWdfcGxhbmVfZG1hX2FkZHIoJmlzYy0+Y3VyX2ZybS0+dmIu dmIyX2J1ZiwgMCk7DQorCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19EQUQwLCBhZGRyMCk7DQor DQorCXN3aXRjaCAoaXNjLT5jb25maWcuZm91cmNjKSB7DQorCWNhc2UgVjRMMl9QSVhfRk1UX1lV VjQyMDoNCisJCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19EQUQxLCBhZGRyMCArIChzaXplaW1h Z2UgKiAyKSAvIDMpOw0KKwkJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0RBRDIsIGFkZHIwICsg KHNpemVpbWFnZSAqIDUpIC8gNik7DQorCQlicmVhazsNCisJY2FzZSBWNEwyX1BJWF9GTVRfWVVW NDIyUDoNCisJCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19EQUQxLCBhZGRyMCArIHNpemVpbWFn ZSAvIDIpOw0KKwkJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0RBRDIsIGFkZHIwICsgKHNpemVp bWFnZSAqIDMpIC8gNCk7DQorCQlicmVhazsNCisJZGVmYXVsdDoNCisJCWJyZWFrOw0KKwl9DQor DQorCWRjdHJsX2R2aWV3ID0gaXNjLT5jb25maWcuZGN0cmxfZHZpZXc7DQorDQorCXJlZ21hcF93 cml0ZShyZWdtYXAsIElTQ19EQ1RSTCwgZGN0cmxfZHZpZXcgfCBJU0NfRENUUkxfSUVfSVMpOw0K KwlzcGluX2xvY2soJmlzYy0+YXdiX2xvY2spOw0KKwlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0Nf Q1RSTEVOLCBJU0NfQ1RSTF9DQVBUVVJFKTsNCisJc3Bpbl91bmxvY2soJmlzYy0+YXdiX2xvY2sp Ow0KK30NCisNCitzdGF0aWMgdm9pZCBpc2Nfc2V0X3BpcGVsaW5lKHN0cnVjdCBpc2NfZGV2aWNl ICppc2MsIHUzMiBwaXBlbGluZSkNCit7DQorCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+ cmVnbWFwOw0KKwlzdHJ1Y3QgaXNjX2N0cmxzICpjdHJscyA9ICZpc2MtPmN0cmxzOw0KKwl1MzIg dmFsLCBiYXlfY2ZnOw0KKwljb25zdCB1MzIgKmdhbW1hOw0KKwl1bnNpZ25lZCBpbnQgaTsNCisN CisJLyogV0ItLT5DRkEtLT5DQy0tPkdBTS0tPkNTQy0tPkNCQy0tPlNVQjQyMi0tPlNVQjQyMCAq Lw0KKwlmb3IgKGkgPSAwOyBpIDwgSVNDX1BJUEVfTElORV9OT0RFX05VTTsgaSsrKSB7DQorCQl2 YWwgPSBwaXBlbGluZSAmIEJJVChpKSA/IDEgOiAwOw0KKwkJcmVnbWFwX2ZpZWxkX3dyaXRlKGlz Yy0+cGlwZWxpbmVbaV0sIHZhbCk7DQorCX0NCisNCisJaWYgKCFwaXBlbGluZSkNCisJCXJldHVy bjsNCisNCisJYmF5X2NmZyA9IGlzYy0+Y29uZmlnLnNkX2Zvcm1hdC0+Y2ZhX2JheWNmZzsNCisN CisJaWYgKGN0cmxzLT5hd2IgPT0gSVNDX1dCX05PTkUpDQorCQlpc2NfcmVzZXRfYXdiX2N0cmxz KGlzYyk7DQorDQorCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19XQl9DRkcsIGJheV9jZmcpOw0K Kwlpc2NfdXBkYXRlX2F3Yl9jdHJscyhpc2MpOw0KKw0KKwlyZWdtYXBfd3JpdGUocmVnbWFwLCBJ U0NfQ0ZBX0NGRywgYmF5X2NmZyB8IElTQ19DRkFfQ0ZHX0VJVFBPTCk7DQorDQorCWdhbW1hID0g JmlzY19nYW1tYV90YWJsZVtjdHJscy0+Z2FtbWFfaW5kZXhdWzBdOw0KKwlyZWdtYXBfYnVsa193 cml0ZShyZWdtYXAsIElTQ19HQU1fQkVOVFJZLCBnYW1tYSwgR0FNTUFfRU5UUklFUyk7DQorCXJl Z21hcF9idWxrX3dyaXRlKHJlZ21hcCwgSVNDX0dBTV9HRU5UUlksIGdhbW1hLCBHQU1NQV9FTlRS SUVTKTsNCisJcmVnbWFwX2J1bGtfd3JpdGUocmVnbWFwLCBJU0NfR0FNX1JFTlRSWSwgZ2FtbWEs IEdBTU1BX0VOVFJJRVMpOw0KKw0KKwkvKiBDb252ZXJ0IFJHQiB0byBZVVYgKi8NCisJcmVnbWFw X3dyaXRlKHJlZ21hcCwgSVNDX0NTQ19ZUl9ZRywgMHg0MiB8ICgweDgxIDw8IDE2KSk7DQorCXJl Z21hcF93cml0ZShyZWdtYXAsIElTQ19DU0NfWUJfT1ksIDB4MTkgfCAoMHgxMCA8PCAxNikpOw0K KwlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfQ1NDX0NCUl9DQkcsIDB4RkRBIHwgKDB4RkI2IDw8 IDE2KSk7DQorCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DU0NfQ0JCX09DQiwgMHg3MCB8ICgw eDgwIDw8IDE2KSk7DQorCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DU0NfQ1JSX0NSRywgMHg3 MCB8ICgweEZBMiA8PCAxNikpOw0KKwlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfQ1NDX0NSQl9P Q1IsIDB4RkVFIHwgKDB4ODAgPDwgMTYpKTsNCisNCisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVND X0NCQ19CUklHSFQsIGN0cmxzLT5icmlnaHRuZXNzKTsNCisJcmVnbWFwX3dyaXRlKHJlZ21hcCwg SVNDX0NCQ19DT05UUkFTVCwgY3RybHMtPmNvbnRyYXN0KTsNCit9DQorDQorc3RhdGljIGludCBp c2NfdXBkYXRlX3Byb2ZpbGUoc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCit7DQorCXN0cnVjdCBy ZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0KKwl1MzIgc3I7DQorCWludCBjb3VudGVyID0g MTAwOw0KKw0KKwlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfQ1RSTEVOLCBJU0NfQ1RSTF9VUFBS Tyk7DQorDQorCXJlZ21hcF9yZWFkKHJlZ21hcCwgSVNDX0NUUkxTUiwgJnNyKTsNCisJd2hpbGUg KChzciAmIElTQ19DVFJMX1VQUFJPKSAmJiBjb3VudGVyLS0pIHsNCisJCXVzbGVlcF9yYW5nZSgx MDAwLCAyMDAwKTsNCisJCXJlZ21hcF9yZWFkKHJlZ21hcCwgSVNDX0NUUkxTUiwgJnNyKTsNCisJ fQ0KKw0KKwlpZiAoY291bnRlciA8IDApIHsNCisJCXY0bDJfd2FybigmaXNjLT52NGwyX2Rldiwg IlRpbWUgb3V0IHRvIHVwZGF0ZSBwcm9maWxlXG4iKTsNCisJCXJldHVybiAtRVRJTUVET1VUOw0K Kwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgdm9pZCBpc2Nfc2V0X2hpc3RvZ3Jh bShzdHJ1Y3QgaXNjX2RldmljZSAqaXNjLCBib29sIGVuYWJsZSkNCit7DQorCXN0cnVjdCByZWdt YXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0KKwlzdHJ1Y3QgaXNjX2N0cmxzICpjdHJscyA9ICZp c2MtPmN0cmxzOw0KKw0KKwlpZiAoZW5hYmxlKSB7DQorCQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJ U0NfSElTX0NGRywNCisJCQkgICAgIElTQ19ISVNfQ0ZHX01PREVfR1IgfA0KKwkJCSAgICAgKGlz Yy0+Y29uZmlnLnNkX2Zvcm1hdC0+Y2ZhX2JheWNmZw0KKwkJCQkJPDwgSVNDX0hJU19DRkdfQkFZ U0VMX1NISUZUKSB8DQorCQkJCQlJU0NfSElTX0NGR19SQVIpOw0KKwkJcmVnbWFwX3dyaXRlKHJl Z21hcCwgSVNDX0hJU19DVFJMLCBJU0NfSElTX0NUUkxfRU4pOw0KKwkJcmVnbWFwX3dyaXRlKHJl Z21hcCwgSVNDX0lOVEVOLCBJU0NfSU5UX0hJU0RPTkUpOw0KKwkJY3RybHMtPmhpc3RfaWQgPSBJ U0NfSElTX0NGR19NT0RFX0dSOw0KKwkJaXNjX3VwZGF0ZV9wcm9maWxlKGlzYyk7DQorCQlyZWdt YXBfd3JpdGUocmVnbWFwLCBJU0NfQ1RSTEVOLCBJU0NfQ1RSTF9ISVNSRVEpOw0KKw0KKwkJY3Ry bHMtPmhpc3Rfc3RhdCA9IEhJU1RfRU5BQkxFRDsNCisJfSBlbHNlIHsNCisJCXJlZ21hcF93cml0 ZShyZWdtYXAsIElTQ19JTlRESVMsIElTQ19JTlRfSElTRE9ORSk7DQorCQlyZWdtYXBfd3JpdGUo cmVnbWFwLCBJU0NfSElTX0NUUkwsIElTQ19ISVNfQ1RSTF9ESVMpOw0KKw0KKwkJY3RybHMtPmhp c3Rfc3RhdCA9IEhJU1RfRElTQUJMRUQ7DQorCX0NCit9DQorDQorc3RhdGljIGludCBpc2NfY29u ZmlndXJlKHN0cnVjdCBpc2NfZGV2aWNlICppc2MpDQorew0KKwlzdHJ1Y3QgcmVnbWFwICpyZWdt YXAgPSBpc2MtPnJlZ21hcDsNCisJdTMyIHBmZV9jZmcwLCBybHBfbW9kZSwgZGNmZywgbWFzaywg cGlwZWxpbmU7DQorCXN0cnVjdCBpc2Nfc3ViZGV2X2VudGl0eSAqc3ViZGV2ID0gaXNjLT5jdXJy ZW50X3N1YmRldjsNCisNCisJcGZlX2NmZzAgPSBpc2MtPmNvbmZpZy5zZF9mb3JtYXQtPnBmZV9j ZmcwX2JwczsNCisJcmxwX21vZGUgPSBpc2MtPmNvbmZpZy5ybHBfY2ZnX21vZGU7DQorCXBpcGVs aW5lID0gaXNjLT5jb25maWcuYml0c19waXBlbGluZTsNCisNCisJZGNmZyA9IGlzYy0+Y29uZmln LmRjZmdfaW1vZGUgfA0KKwkJICAgICAgIElTQ19EQ0ZHX1lNQlNJWkVfQkVBVFM4IHwgSVNDX0RD RkdfQ01CU0laRV9CRUFUUzg7DQorDQorCXBmZV9jZmcwICB8PSBzdWJkZXYtPnBmZV9jZmcwIHwg SVNDX1BGRV9DRkcwX01PREVfUFJPR1JFU1NJVkU7DQorCW1hc2sgPSBJU0NfUEZFX0NGRzBfQlBT X01BU0sgfCBJU0NfUEZFX0NGRzBfSFBPTF9MT1cgfA0KKwkgICAgICAgSVNDX1BGRV9DRkcwX1ZQ T0xfTE9XIHwgSVNDX1BGRV9DRkcwX1BQT0xfTE9XIHwNCisJICAgICAgIElTQ19QRkVfQ0ZHMF9N T0RFX01BU0sgfCBJU0NfUEZFX0NGRzBfQ0NJUl9DUkMgfA0KKwkJICAgSVNDX1BGRV9DRkcwX0ND SVI2NTY7DQorDQorCXJlZ21hcF91cGRhdGVfYml0cyhyZWdtYXAsIElTQ19QRkVfQ0ZHMCwgbWFz aywgcGZlX2NmZzApOw0KKw0KKwlyZWdtYXBfdXBkYXRlX2JpdHMocmVnbWFwLCBJU0NfUkxQX0NG RywgSVNDX1JMUF9DRkdfTU9ERV9NQVNLLA0KKwkJCSAgIHJscF9tb2RlKTsNCisNCisJcmVnbWFw X3dyaXRlKHJlZ21hcCwgSVNDX0RDRkcsIGRjZmcpOw0KKw0KKwkvKiBTZXQgdGhlIHBpcGVsaW5l ICovDQorCWlzY19zZXRfcGlwZWxpbmUoaXNjLCBwaXBlbGluZSk7DQorDQorCS8qDQorCSAqIFRo ZSBjdXJyZW50IGltcGxlbWVudGVkIGhpc3RvZ3JhbSBpcyBhdmFpbGFibGUgZm9yIFJBVyBSLCBC LCBHQiwgR1INCisJICogY2hhbm5lbHMuIFdlIG5lZWQgdG8gY2hlY2sgaWYgc2Vuc29yIGlzIG91 dHB1dHRpbmcgUkFXIEJBWUVSDQorCSAqLw0KKwlpZiAoaXNjLT5jdHJscy5hd2IgJiYNCisJICAg IElTQ19JU19GT1JNQVRfUkFXKGlzYy0+Y29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlKSkNCisJ CWlzY19zZXRfaGlzdG9ncmFtKGlzYywgdHJ1ZSk7DQorCWVsc2UNCisJCWlzY19zZXRfaGlzdG9n cmFtKGlzYywgZmFsc2UpOw0KKw0KKwkvKiBVcGRhdGUgcHJvZmlsZSAqLw0KKwlyZXR1cm4gaXNj X3VwZGF0ZV9wcm9maWxlKGlzYyk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNjX3N0YXJ0X3N0cmVh bWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICp2cSwgdW5zaWduZWQgaW50IGNvdW50KQ0KK3sNCisJc3Ry dWN0IGlzY19kZXZpY2UgKmlzYyA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpOw0KKwlzdHJ1Y3QgcmVn bWFwICpyZWdtYXAgPSBpc2MtPnJlZ21hcDsNCisJc3RydWN0IGlzY19idWZmZXIgKmJ1ZjsNCisJ dW5zaWduZWQgbG9uZyBmbGFnczsNCisJaW50IHJldDsNCisNCisJLyogRW5hYmxlIHN0cmVhbSBv biB0aGUgc3ViIGRldmljZSAqLw0KKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKGlzYy0+Y3VycmVu dF9zdWJkZXYtPnNkLCB2aWRlbywgc19zdHJlYW0sIDEpOw0KKwlpZiAocmV0ICYmIHJldCAhPSAt RU5PSU9DVExDTUQpIHsNCisJCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LCAic3RyZWFtIG9uIGZh aWxlZCBpbiBzdWJkZXYgJWRcbiIsDQorCQkJIHJldCk7DQorCQlnb3RvIGVycl9zdGFydF9zdHJl YW07DQorCX0NCisNCisJcG1fcnVudGltZV9nZXRfc3luYyhpc2MtPmRldik7DQorDQorCXJldCA9 IGlzY19jb25maWd1cmUoaXNjKTsNCisJaWYgKHVubGlrZWx5KHJldCkpDQorCQlnb3RvIGVycl9j b25maWd1cmU7DQorDQorCS8qIEVuYWJsZSBETUEgaW50ZXJydXB0ICovDQorCXJlZ21hcF93cml0 ZShyZWdtYXAsIElTQ19JTlRFTiwgSVNDX0lOVF9ERE9ORSk7DQorDQorCXNwaW5fbG9ja19pcnFz YXZlKCZpc2MtPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7DQorDQorCWlzYy0+c2VxdWVuY2UgPSAw Ow0KKwlpc2MtPnN0b3AgPSBmYWxzZTsNCisJcmVpbml0X2NvbXBsZXRpb24oJmlzYy0+Y29tcCk7 DQorDQorCWlzYy0+Y3VyX2ZybSA9IGxpc3RfZmlyc3RfZW50cnkoJmlzYy0+ZG1hX3F1ZXVlLA0K KwkJCQkJc3RydWN0IGlzY19idWZmZXIsIGxpc3QpOw0KKwlsaXN0X2RlbCgmaXNjLT5jdXJfZnJt LT5saXN0KTsNCisNCisJaXNjX3N0YXJ0X2RtYShpc2MpOw0KKw0KKwlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZpc2MtPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7DQorDQorCS8qIGlmIHdlIHN0cmVh bWluZyBmcm9tIFJBVywgd2UgY2FuIGRvIG9uZS1zaG90IHdoaXRlIGJhbGFuY2UgYWRqICovDQor CWlmIChJU0NfSVNfRk9STUFUX1JBVyhpc2MtPmNvbmZpZy5zZF9mb3JtYXQtPm1idXNfY29kZSkp DQorCQl2NGwyX2N0cmxfYWN0aXZhdGUoaXNjLT5kb193Yl9jdHJsLCB0cnVlKTsNCisNCisJcmV0 dXJuIDA7DQorDQorZXJyX2NvbmZpZ3VyZToNCisJcG1fcnVudGltZV9wdXRfc3luYyhpc2MtPmRl dik7DQorDQorCXY0bDJfc3ViZGV2X2NhbGwoaXNjLT5jdXJyZW50X3N1YmRldi0+c2QsIHZpZGVv LCBzX3N0cmVhbSwgMCk7DQorDQorZXJyX3N0YXJ0X3N0cmVhbToNCisJc3Bpbl9sb2NrX2lycXNh dmUoJmlzYy0+ZG1hX3F1ZXVlX2xvY2ssIGZsYWdzKTsNCisJbGlzdF9mb3JfZWFjaF9lbnRyeShi dWYsICZpc2MtPmRtYV9xdWV1ZSwgbGlzdCkNCisJCXZiMl9idWZmZXJfZG9uZSgmYnVmLT52Yi52 YjJfYnVmLCBWQjJfQlVGX1NUQVRFX1FVRVVFRCk7DQorCUlOSVRfTElTVF9IRUFEKCZpc2MtPmRt YV9xdWV1ZSk7DQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzYy0+ZG1hX3F1ZXVlX2xvY2ss IGZsYWdzKTsNCisNCisJcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIHZvaWQgaXNjX3N0b3Bf c3RyZWFtaW5nKHN0cnVjdCB2YjJfcXVldWUgKnZxKQ0KK3sNCisJc3RydWN0IGlzY19kZXZpY2Ug KmlzYyA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpOw0KKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KKwlz dHJ1Y3QgaXNjX2J1ZmZlciAqYnVmOw0KKwlpbnQgcmV0Ow0KKw0KKwl2NGwyX2N0cmxfYWN0aXZh dGUoaXNjLT5kb193Yl9jdHJsLCBmYWxzZSk7DQorDQorCWlzYy0+c3RvcCA9IHRydWU7DQorDQor CS8qIFdhaXQgdW50aWwgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBmcmFtZSAqLw0KKwlpZiAoaXNj LT5jdXJfZnJtICYmICF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmlzYy0+Y29tcCwgNSAq IEhaKSkNCisJCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LA0KKwkJCSAiVGltZW91dCB3YWl0aW5n IGZvciBlbmQgb2YgdGhlIGNhcHR1cmVcbiIpOw0KKw0KKwkvKiBEaXNhYmxlIERNQSBpbnRlcnJ1 cHQgKi8NCisJcmVnbWFwX3dyaXRlKGlzYy0+cmVnbWFwLCBJU0NfSU5URElTLCBJU0NfSU5UX0RE T05FKTsNCisNCisJcG1fcnVudGltZV9wdXRfc3luYyhpc2MtPmRldik7DQorDQorCS8qIERpc2Fi bGUgc3RyZWFtIG9uIHRoZSBzdWIgZGV2aWNlICovDQorCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwo aXNjLT5jdXJyZW50X3N1YmRldi0+c2QsIHZpZGVvLCBzX3N0cmVhbSwgMCk7DQorCWlmIChyZXQg JiYgcmV0ICE9IC1FTk9JT0NUTENNRCkNCisJCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LCAic3Ry ZWFtIG9mZiBmYWlsZWQgaW4gc3ViZGV2XG4iKTsNCisNCisJLyogUmVsZWFzZSBhbGwgYWN0aXZl IGJ1ZmZlcnMgKi8NCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlzYy0+ZG1hX3F1ZXVlX2xvY2ssIGZs YWdzKTsNCisJaWYgKHVubGlrZWx5KGlzYy0+Y3VyX2ZybSkpIHsNCisJCXZiMl9idWZmZXJfZG9u ZSgmaXNjLT5jdXJfZnJtLT52Yi52YjJfYnVmLA0KKwkJCQlWQjJfQlVGX1NUQVRFX0VSUk9SKTsN CisJCWlzYy0+Y3VyX2ZybSA9IE5VTEw7DQorCX0NCisJbGlzdF9mb3JfZWFjaF9lbnRyeShidWYs ICZpc2MtPmRtYV9xdWV1ZSwgbGlzdCkNCisJCXZiMl9idWZmZXJfZG9uZSgmYnVmLT52Yi52YjJf YnVmLCBWQjJfQlVGX1NUQVRFX0VSUk9SKTsNCisJSU5JVF9MSVNUX0hFQUQoJmlzYy0+ZG1hX3F1 ZXVlKTsNCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNjLT5kbWFfcXVldWVfbG9jaywgZmxh Z3MpOw0KK30NCisNCitzdGF0aWMgdm9pZCBpc2NfYnVmZmVyX3F1ZXVlKHN0cnVjdCB2YjJfYnVm ZmVyICp2YikNCit7DQorCXN0cnVjdCB2YjJfdjRsMl9idWZmZXIgKnZidWYgPSB0b192YjJfdjRs Ml9idWZmZXIodmIpOw0KKwlzdHJ1Y3QgaXNjX2J1ZmZlciAqYnVmID0gY29udGFpbmVyX29mKHZi dWYsIHN0cnVjdCBpc2NfYnVmZmVyLCB2Yik7DQorCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2 YjJfZ2V0X2Rydl9wcml2KHZiLT52YjJfcXVldWUpOw0KKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0K Kw0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXNjLT5kbWFfcXVldWVfbG9jaywgZmxhZ3MpOw0KKwlp ZiAoIWlzYy0+Y3VyX2ZybSAmJiBsaXN0X2VtcHR5KCZpc2MtPmRtYV9xdWV1ZSkgJiYNCisJCXZi Ml9pc19zdHJlYW1pbmcodmItPnZiMl9xdWV1ZSkpIHsNCisJCWlzYy0+Y3VyX2ZybSA9IGJ1ZjsN CisJCWlzY19zdGFydF9kbWEoaXNjKTsNCisJfSBlbHNlDQorCQlsaXN0X2FkZF90YWlsKCZidWYt Pmxpc3QsICZpc2MtPmRtYV9xdWV1ZSk7DQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzYy0+ ZG1hX3F1ZXVlX2xvY2ssIGZsYWdzKTsNCit9DQorDQorc3RhdGljIHN0cnVjdCBpc2NfZm9ybWF0 ICpmaW5kX2Zvcm1hdF9ieV9mb3VyY2Moc3RydWN0IGlzY19kZXZpY2UgKmlzYywNCisJCQkJCQkg dW5zaWduZWQgaW50IGZvdXJjYykNCit7DQorCXVuc2lnbmVkIGludCBudW1fZm9ybWF0cyA9IGlz Yy0+bnVtX3VzZXJfZm9ybWF0czsNCisJc3RydWN0IGlzY19mb3JtYXQgKmZtdDsNCisJdW5zaWdu ZWQgaW50IGk7DQorDQorCWZvciAoaSA9IDA7IGkgPCBudW1fZm9ybWF0czsgaSsrKSB7DQorCQlm bXQgPSBpc2MtPnVzZXJfZm9ybWF0c1tpXTsNCisJCWlmIChmbXQtPmZvdXJjYyA9PSBmb3VyY2Mp DQorCQkJcmV0dXJuIGZtdDsNCisJfQ0KKw0KKwlyZXR1cm4gTlVMTDsNCit9DQorDQorc3RhdGlj IGNvbnN0IHN0cnVjdCB2YjJfb3BzIGlzY192YjJfb3BzID0gew0KKwkucXVldWVfc2V0dXAJCT0g aXNjX3F1ZXVlX3NldHVwLA0KKwkud2FpdF9wcmVwYXJlCQk9IHZiMl9vcHNfd2FpdF9wcmVwYXJl LA0KKwkud2FpdF9maW5pc2gJCT0gdmIyX29wc193YWl0X2ZpbmlzaCwNCisJLmJ1Zl9wcmVwYXJl CQk9IGlzY19idWZmZXJfcHJlcGFyZSwNCisJLnN0YXJ0X3N0cmVhbWluZwk9IGlzY19zdGFydF9z dHJlYW1pbmcsDQorCS5zdG9wX3N0cmVhbWluZwkJPSBpc2Nfc3RvcF9zdHJlYW1pbmcsDQorCS5i dWZfcXVldWUJCT0gaXNjX2J1ZmZlcl9xdWV1ZSwNCit9Ow0KKw0KK3N0YXRpYyBpbnQgaXNjX3F1 ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LA0KKwkJCSBzdHJ1Y3QgdjRsMl9j YXBhYmlsaXR5ICpjYXApDQorew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmlkZW9fZHJ2 ZGF0YShmaWxlKTsNCisNCisJc3Ryc2NweShjYXAtPmRyaXZlciwgQVRNRUxfSVNDX05BTUUsIHNp emVvZihjYXAtPmRyaXZlcikpOw0KKwlzdHJzY3B5KGNhcC0+Y2FyZCwgIkF0bWVsIEltYWdlIFNl bnNvciBDb250cm9sbGVyIiwgc2l6ZW9mKGNhcC0+Y2FyZCkpOw0KKwlzbnByaW50ZihjYXAtPmJ1 c19pbmZvLCBzaXplb2YoY2FwLT5idXNfaW5mbyksDQorCQkgInBsYXRmb3JtOiVzIiwgaXNjLT52 NGwyX2Rldi5uYW1lKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNjX2Vu dW1fZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsDQorCQkJCSBzdHJ1 Y3QgdjRsMl9mbXRkZXNjICpmKQ0KK3sNCisJdTMyIGluZGV4ID0gZi0+aW5kZXg7DQorCXUzMiBp LCBzdXBwb3J0ZWRfaW5kZXg7DQorDQorCWlmIChpbmRleCA8IEFSUkFZX1NJWkUoY29udHJvbGxl cl9mb3JtYXRzKSkgew0KKwkJZi0+cGl4ZWxmb3JtYXQgPSBjb250cm9sbGVyX2Zvcm1hdHNbaW5k ZXhdLmZvdXJjYzsNCisJCXJldHVybiAwOw0KKwl9DQorDQorCWluZGV4IC09IEFSUkFZX1NJWkUo Y29udHJvbGxlcl9mb3JtYXRzKTsNCisNCisJaSA9IDA7DQorCXN1cHBvcnRlZF9pbmRleCA9IDA7 DQorDQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZvcm1hdHNfbGlzdCk7IGkrKykgew0K KwkJaWYgKCFJU0NfSVNfRk9STUFUX1JBVyhmb3JtYXRzX2xpc3RbaV0ubWJ1c19jb2RlKSB8fA0K KwkJICAgICFmb3JtYXRzX2xpc3RbaV0uc2Rfc3VwcG9ydCkNCisJCQljb250aW51ZTsNCisJCWlm IChzdXBwb3J0ZWRfaW5kZXggPT0gaW5kZXgpIHsNCisJCQlmLT5waXhlbGZvcm1hdCA9IGZvcm1h dHNfbGlzdFtpXS5mb3VyY2M7DQorCQkJcmV0dXJuIDA7DQorCQl9DQorCQlzdXBwb3J0ZWRfaW5k ZXgrKzsNCisJfQ0KKw0KKwlyZXR1cm4gLUVJTlZBTDsNCit9DQorDQorc3RhdGljIGludCBpc2Nf Z19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwNCisJCQkgICAgICBz dHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkNCit7DQorCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2 aWRlb19kcnZkYXRhKGZpbGUpOw0KKw0KKwkqZm10ID0gaXNjLT5mbXQ7DQorDQorCXJldHVybiAw Ow0KK30NCisNCisvKg0KKyAqIENoZWNrcyB0aGUgY3VycmVudCBjb25maWd1cmVkIGZvcm1hdCwg aWYgSVNDIGNhbiBvdXRwdXQgaXQsDQorICogY29uc2lkZXJpbmcgd2hpY2ggdHlwZSBvZiBmb3Jt YXQgdGhlIElTQyByZWNlaXZlcyBmcm9tIHRoZSBzZW5zb3INCisgKi8NCitzdGF0aWMgaW50IGlz Y190cnlfdmFsaWRhdGVfZm9ybWF0cyhzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KK3sNCisJaW50 IHJldDsNCisJYm9vbCBiYXllciA9IGZhbHNlLCB5dXYgPSBmYWxzZSwgcmdiID0gZmFsc2UsIGdy ZXkgPSBmYWxzZTsNCisNCisJLyogYWxsIGZvcm1hdHMgc3VwcG9ydGVkIGJ5IHRoZSBSTFAgbW9k dWxlIGFyZSBPSyAqLw0KKwlzd2l0Y2ggKGlzYy0+dHJ5X2NvbmZpZy5mb3VyY2MpIHsNCisJY2Fz ZSBWNEwyX1BJWF9GTVRfU0JHR1I4Og0KKwljYXNlIFY0TDJfUElYX0ZNVF9TR0JSRzg6DQorCWNh c2UgVjRMMl9QSVhfRk1UX1NHUkJHODoNCisJY2FzZSBWNEwyX1BJWF9GTVRfU1JHR0I4Og0KKwlj YXNlIFY0TDJfUElYX0ZNVF9TQkdHUjEwOg0KKwljYXNlIFY0TDJfUElYX0ZNVF9TR0JSRzEwOg0K KwljYXNlIFY0TDJfUElYX0ZNVF9TR1JCRzEwOg0KKwljYXNlIFY0TDJfUElYX0ZNVF9TUkdHQjEw Og0KKwljYXNlIFY0TDJfUElYX0ZNVF9TQkdHUjEyOg0KKwljYXNlIFY0TDJfUElYX0ZNVF9TR0JS RzEyOg0KKwljYXNlIFY0TDJfUElYX0ZNVF9TR1JCRzEyOg0KKwljYXNlIFY0TDJfUElYX0ZNVF9T UkdHQjEyOg0KKwkJcmV0ID0gMDsNCisJCWJheWVyID0gdHJ1ZTsNCisJCWJyZWFrOw0KKw0KKwlj YXNlIFY0TDJfUElYX0ZNVF9ZVVY0MjA6DQorCWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMlA6DQor CWNhc2UgVjRMMl9QSVhfRk1UX1lVWVY6DQorCQlyZXQgPSAwOw0KKwkJeXV2ID0gdHJ1ZTsNCisJ CWJyZWFrOw0KKw0KKwljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjU6DQorCWNhc2UgVjRMMl9QSVhf Rk1UX0FCR1IzMjoNCisJY2FzZSBWNEwyX1BJWF9GTVRfWEJHUjMyOg0KKwljYXNlIFY0TDJfUElY X0ZNVF9BUkdCNDQ0Og0KKwljYXNlIFY0TDJfUElYX0ZNVF9BUkdCNTU1Og0KKwkJcmV0ID0gMDsN CisJCXJnYiA9IHRydWU7DQorCQlicmVhazsNCisJY2FzZSBWNEwyX1BJWF9GTVRfR1JFWToNCisJ CXJldCA9IDA7DQorCQlncmV5ID0gdHJ1ZTsNCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkvKiBh bnkgb3RoZXIgZGlmZmVyZW50IGZvcm1hdHMgYXJlIG5vdCBzdXBwb3J0ZWQgKi8NCisJCXJldCA9 IC1FSU5WQUw7DQorCX0NCisNCisJLyogd2UgY2Fubm90IG91dHB1dCBSQVcvR3JleSBpZiB3ZSBk byBub3QgcmVjZWl2ZSBSQVcgKi8NCisJaWYgKChiYXllciB8fCBncmV5KSAmJg0KKwkgICAgIUlT Q19JU19GT1JNQVRfUkFXKGlzYy0+dHJ5X2NvbmZpZy5zZF9mb3JtYXQtPm1idXNfY29kZSkpDQor CQlyZXR1cm4gLUVJTlZBTDsNCisNCisJdjRsMl9kYmcoMSwgZGVidWcsICZpc2MtPnY0bDJfZGV2 LA0KKwkJICJGb3JtYXQgdmFsaWRhdGlvbiwgcmVxdWVzdGVkIHJnYj0ldSwgeXV2PSV1LCBncmV5 PSV1LCBiYXllcj0ldVxuIiwNCisJCSByZ2IsIHl1diwgZ3JleSwgYmF5ZXIpOw0KKw0KKwlyZXR1 cm4gcmV0Ow0KK30NCisNCisvKg0KKyAqIENvbmZpZ3VyZXMgdGhlIFJMUCBhbmQgRE1BIG1vZHVs ZXMsIGRlcGVuZGluZyBvbiB0aGUgb3V0cHV0IGZvcm1hdA0KKyAqIGNvbmZpZ3VyZWQgZm9yIHRo ZSBJU0MuDQorICogSWYgZGlyZWN0X2R1bXAgPT0gdHJ1ZSwganVzdCBkdW1wIHJhdyBkYXRhIDgg Yml0cy4NCisgKi8NCitzdGF0aWMgaW50IGlzY190cnlfY29uZmlndXJlX3JscF9kbWEoc3RydWN0 IGlzY19kZXZpY2UgKmlzYywgYm9vbCBkaXJlY3RfZHVtcCkNCit7DQorCWlmIChkaXJlY3RfZHVt cCkgew0KKwkJaXNjLT50cnlfY29uZmlnLnJscF9jZmdfbW9kZSA9IElTQ19STFBfQ0ZHX01PREVf REFUODsNCisJCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdfSU1PREVfUEFD S0VEODsNCisJCWlzYy0+dHJ5X2NvbmZpZy5kY3RybF9kdmlldyA9IElTQ19EQ1RSTF9EVklFV19Q QUNLRUQ7DQorCQlpc2MtPnRyeV9jb25maWcuYnBwID0gMTY7DQorCQlyZXR1cm4gMDsNCisJfQ0K Kw0KKwlzd2l0Y2ggKGlzYy0+dHJ5X2NvbmZpZy5mb3VyY2MpIHsNCisJY2FzZSBWNEwyX1BJWF9G TVRfU0JHR1I4Og0KKwljYXNlIFY0TDJfUElYX0ZNVF9TR0JSRzg6DQorCWNhc2UgVjRMMl9QSVhf Rk1UX1NHUkJHODoNCisJY2FzZSBWNEwyX1BJWF9GTVRfU1JHR0I4Og0KKwkJaXNjLT50cnlfY29u ZmlnLnJscF9jZmdfbW9kZSA9IElTQ19STFBfQ0ZHX01PREVfREFUODsNCisJCWlzYy0+dHJ5X2Nv bmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdfSU1PREVfUEFDS0VEODsNCisJCWlzYy0+dHJ5X2Nv bmZpZy5kY3RybF9kdmlldyA9IElTQ19EQ1RSTF9EVklFV19QQUNLRUQ7DQorCQlpc2MtPnRyeV9j b25maWcuYnBwID0gODsNCisJCWJyZWFrOw0KKwljYXNlIFY0TDJfUElYX0ZNVF9TQkdHUjEwOg0K KwljYXNlIFY0TDJfUElYX0ZNVF9TR0JSRzEwOg0KKwljYXNlIFY0TDJfUElYX0ZNVF9TR1JCRzEw Og0KKwljYXNlIFY0TDJfUElYX0ZNVF9TUkdHQjEwOg0KKwkJaXNjLT50cnlfY29uZmlnLnJscF9j ZmdfbW9kZSA9IElTQ19STFBfQ0ZHX01PREVfREFUMTA7DQorCQlpc2MtPnRyeV9jb25maWcuZGNm Z19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1BBQ0tFRDE2Ow0KKwkJaXNjLT50cnlfY29uZmlnLmRj dHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BBQ0tFRDsNCisJCWlzYy0+dHJ5X2NvbmZpZy5i cHAgPSAxNjsNCisJCWJyZWFrOw0KKwljYXNlIFY0TDJfUElYX0ZNVF9TQkdHUjEyOg0KKwljYXNl IFY0TDJfUElYX0ZNVF9TR0JSRzEyOg0KKwljYXNlIFY0TDJfUElYX0ZNVF9TR1JCRzEyOg0KKwlj YXNlIFY0TDJfUElYX0ZNVF9TUkdHQjEyOg0KKwkJaXNjLT50cnlfY29uZmlnLnJscF9jZmdfbW9k ZSA9IElTQ19STFBfQ0ZHX01PREVfREFUMTI7DQorCQlpc2MtPnRyeV9jb25maWcuZGNmZ19pbW9k ZSA9IElTQ19EQ0ZHX0lNT0RFX1BBQ0tFRDE2Ow0KKwkJaXNjLT50cnlfY29uZmlnLmRjdHJsX2R2 aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BBQ0tFRDsNCisJCWlzYy0+dHJ5X2NvbmZpZy5icHAgPSAx NjsNCisJCWJyZWFrOw0KKwljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjU6DQorCQlpc2MtPnRyeV9j b25maWcucmxwX2NmZ19tb2RlID0gSVNDX1JMUF9DRkdfTU9ERV9SR0I1NjU7DQorCQlpc2MtPnRy eV9jb25maWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1BBQ0tFRDE2Ow0KKwkJaXNjLT50 cnlfY29uZmlnLmRjdHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BBQ0tFRDsNCisJCWlzYy0+ dHJ5X2NvbmZpZy5icHAgPSAxNjsNCisJCWJyZWFrOw0KKwljYXNlIFY0TDJfUElYX0ZNVF9BUkdC NDQ0Og0KKwkJaXNjLT50cnlfY29uZmlnLnJscF9jZmdfbW9kZSA9IElTQ19STFBfQ0ZHX01PREVf QVJHQjQ0NDsNCisJCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdfSU1PREVf UEFDS0VEMTY7DQorCQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJU0NfRENUUkxfRFZJ RVdfUEFDS0VEOw0KKwkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDE2Ow0KKwkJYnJlYWs7DQorCWNh c2UgVjRMMl9QSVhfRk1UX0FSR0I1NTU6DQorCQlpc2MtPnRyeV9jb25maWcucmxwX2NmZ19tb2Rl ID0gSVNDX1JMUF9DRkdfTU9ERV9BUkdCNTU1Ow0KKwkJaXNjLT50cnlfY29uZmlnLmRjZmdfaW1v ZGUgPSBJU0NfRENGR19JTU9ERV9QQUNLRUQxNjsNCisJCWlzYy0+dHJ5X2NvbmZpZy5kY3RybF9k dmlldyA9IElTQ19EQ1RSTF9EVklFV19QQUNLRUQ7DQorCQlpc2MtPnRyeV9jb25maWcuYnBwID0g MTY7DQorCQlicmVhazsNCisJY2FzZSBWNEwyX1BJWF9GTVRfQUJHUjMyOg0KKwljYXNlIFY0TDJf UElYX0ZNVF9YQkdSMzI6DQorCQlpc2MtPnRyeV9jb25maWcucmxwX2NmZ19tb2RlID0gSVNDX1JM UF9DRkdfTU9ERV9BUkdCMzI7DQorCQlpc2MtPnRyeV9jb25maWcuZGNmZ19pbW9kZSA9IElTQ19E Q0ZHX0lNT0RFX1BBQ0tFRDMyOw0KKwkJaXNjLT50cnlfY29uZmlnLmRjdHJsX2R2aWV3ID0gSVND X0RDVFJMX0RWSUVXX1BBQ0tFRDsNCisJCWlzYy0+dHJ5X2NvbmZpZy5icHAgPSAzMjsNCisJCWJy ZWFrOw0KKwljYXNlIFY0TDJfUElYX0ZNVF9ZVVY0MjA6DQorCQlpc2MtPnRyeV9jb25maWcucmxw X2NmZ19tb2RlID0gSVNDX1JMUF9DRkdfTU9ERV9ZWUNDOw0KKwkJaXNjLT50cnlfY29uZmlnLmRj ZmdfaW1vZGUgPSBJU0NfRENGR19JTU9ERV9ZQzQyMFA7DQorCQlpc2MtPnRyeV9jb25maWcuZGN0 cmxfZHZpZXcgPSBJU0NfRENUUkxfRFZJRVdfUExBTkFSOw0KKwkJaXNjLT50cnlfY29uZmlnLmJw cCA9IDEyOw0KKwkJYnJlYWs7DQorCWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMlA6DQorCQlpc2Mt PnRyeV9jb25maWcucmxwX2NmZ19tb2RlID0gSVNDX1JMUF9DRkdfTU9ERV9ZWUNDOw0KKwkJaXNj LT50cnlfY29uZmlnLmRjZmdfaW1vZGUgPSBJU0NfRENGR19JTU9ERV9ZQzQyMlA7DQorCQlpc2Mt PnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJU0NfRENUUkxfRFZJRVdfUExBTkFSOw0KKwkJaXNj LT50cnlfY29uZmlnLmJwcCA9IDE2Ow0KKwkJYnJlYWs7DQorCWNhc2UgVjRMMl9QSVhfRk1UX1lV WVY6DQorCQlpc2MtPnRyeV9jb25maWcucmxwX2NmZ19tb2RlID0gSVNDX1JMUF9DRkdfTU9ERV9Z WUNDOw0KKwkJaXNjLT50cnlfY29uZmlnLmRjZmdfaW1vZGUgPSBJU0NfRENGR19JTU9ERV9QQUNL RUQzMjsNCisJCWlzYy0+dHJ5X2NvbmZpZy5kY3RybF9kdmlldyA9IElTQ19EQ1RSTF9EVklFV19Q QUNLRUQ7DQorCQlpc2MtPnRyeV9jb25maWcuYnBwID0gMTY7DQorCQlicmVhazsNCisJY2FzZSBW NEwyX1BJWF9GTVRfR1JFWToNCisJCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0Nf UkxQX0NGR19NT0RFX0RBVFk4Ow0KKwkJaXNjLT50cnlfY29uZmlnLmRjZmdfaW1vZGUgPSBJU0Nf RENGR19JTU9ERV9QQUNLRUQ4Ow0KKwkJaXNjLT50cnlfY29uZmlnLmRjdHJsX2R2aWV3ID0gSVND X0RDVFJMX0RWSUVXX1BBQ0tFRDsNCisJCWlzYy0+dHJ5X2NvbmZpZy5icHAgPSA4Ow0KKwkJYnJl YWs7DQorCWRlZmF1bHQ6DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKwlyZXR1cm4gMDsNCit9 DQorDQorLyoNCisgKiBDb25maWd1cmluZyBwaXBlbGluZSBtb2R1bGVzLCBkZXBlbmRpbmcgb24g d2hpY2ggZm9ybWF0IHRoZSBJU0Mgb3V0cHV0cw0KKyAqIGFuZCBjb25zaWRlcmluZyB3aGljaCBm b3JtYXQgaXQgaGFzIGFzIGlucHV0IGZyb20gdGhlIHNlbnNvci4NCisgKi8NCitzdGF0aWMgaW50 IGlzY190cnlfY29uZmlndXJlX3BpcGVsaW5lKHN0cnVjdCBpc2NfZGV2aWNlICppc2MpDQorew0K Kwlzd2l0Y2ggKGlzYy0+dHJ5X2NvbmZpZy5mb3VyY2MpIHsNCisJY2FzZSBWNEwyX1BJWF9GTVRf UkdCNTY1Og0KKwljYXNlIFY0TDJfUElYX0ZNVF9BUkdCNTU1Og0KKwljYXNlIFY0TDJfUElYX0ZN VF9BUkdCNDQ0Og0KKwljYXNlIFY0TDJfUElYX0ZNVF9BQkdSMzI6DQorCWNhc2UgVjRMMl9QSVhf Rk1UX1hCR1IzMjoNCisJCS8qIGlmIHNlbnNvciBmb3JtYXQgaXMgUkFXLCB3ZSBjb252ZXJ0IGlu c2lkZSBJU0MgKi8NCisJCWlmIChJU0NfSVNfRk9STUFUX1JBVyhpc2MtPnRyeV9jb25maWcuc2Rf Zm9ybWF0LT5tYnVzX2NvZGUpKSB7DQorCQkJaXNjLT50cnlfY29uZmlnLmJpdHNfcGlwZWxpbmUg PSBDRkFfRU5BQkxFIHwNCisJCQkJV0JfRU5BQkxFIHwgR0FNX0VOQUJMRVM7DQorCQl9IGVsc2Ug ew0KKwkJCWlzYy0+dHJ5X2NvbmZpZy5iaXRzX3BpcGVsaW5lID0gMHgwOw0KKwkJfQ0KKwkJYnJl YWs7DQorCWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMDoNCisJCS8qIGlmIHNlbnNvciBmb3JtYXQg aXMgUkFXLCB3ZSBjb252ZXJ0IGluc2lkZSBJU0MgKi8NCisJCWlmIChJU0NfSVNfRk9STUFUX1JB Vyhpc2MtPnRyeV9jb25maWcuc2RfZm9ybWF0LT5tYnVzX2NvZGUpKSB7DQorCQkJaXNjLT50cnlf Y29uZmlnLmJpdHNfcGlwZWxpbmUgPSBDRkFfRU5BQkxFIHwNCisJCQkJQ1NDX0VOQUJMRSB8IFdC X0VOQUJMRSB8IEdBTV9FTkFCTEVTIHwNCisJCQkJU1VCNDIwX0VOQUJMRSB8IFNVQjQyMl9FTkFC TEUgfCBDQkNfRU5BQkxFOw0KKwkJfSBlbHNlIHsNCisJCQlpc2MtPnRyeV9jb25maWcuYml0c19w aXBlbGluZSA9IDB4MDsNCisJCX0NCisJCWJyZWFrOw0KKwljYXNlIFY0TDJfUElYX0ZNVF9ZVVY0 MjJQOg0KKwkJLyogaWYgc2Vuc29yIGZvcm1hdCBpcyBSQVcsIHdlIGNvbnZlcnQgaW5zaWRlIElT QyAqLw0KKwkJaWYgKElTQ19JU19GT1JNQVRfUkFXKGlzYy0+dHJ5X2NvbmZpZy5zZF9mb3JtYXQt Pm1idXNfY29kZSkpIHsNCisJCQlpc2MtPnRyeV9jb25maWcuYml0c19waXBlbGluZSA9IENGQV9F TkFCTEUgfA0KKwkJCQlDU0NfRU5BQkxFIHwgV0JfRU5BQkxFIHwgR0FNX0VOQUJMRVMgfA0KKwkJ CQlTVUI0MjJfRU5BQkxFIHwgQ0JDX0VOQUJMRTsNCisJCX0gZWxzZSB7DQorCQkJaXNjLT50cnlf Y29uZmlnLmJpdHNfcGlwZWxpbmUgPSAweDA7DQorCQl9DQorCQlicmVhazsNCisJY2FzZSBWNEwy X1BJWF9GTVRfWVVZVjoNCisJCS8qIGlmIHNlbnNvciBmb3JtYXQgaXMgUkFXLCB3ZSBjb252ZXJ0 IGluc2lkZSBJU0MgKi8NCisJCWlmIChJU0NfSVNfRk9STUFUX1JBVyhpc2MtPnRyeV9jb25maWcu c2RfZm9ybWF0LT5tYnVzX2NvZGUpKSB7DQorCQkJaXNjLT50cnlfY29uZmlnLmJpdHNfcGlwZWxp bmUgPSBDRkFfRU5BQkxFIHwNCisJCQkJQ1NDX0VOQUJMRSB8IFdCX0VOQUJMRSB8IEdBTV9FTkFC TEVTIHwNCisJCQkJU1VCNDIyX0VOQUJMRSB8IENCQ19FTkFCTEU7DQorCQl9IGVsc2Ugew0KKwkJ CWlzYy0+dHJ5X2NvbmZpZy5iaXRzX3BpcGVsaW5lID0gMHgwOw0KKwkJfQ0KKwkJYnJlYWs7DQor CWNhc2UgVjRMMl9QSVhfRk1UX0dSRVk6DQorCQlpZiAoSVNDX0lTX0ZPUk1BVF9SQVcoaXNjLT50 cnlfY29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlKSkgew0KKwkJLyogaWYgc2Vuc29yIGZvcm1h dCBpcyBSQVcsIHdlIGNvbnZlcnQgaW5zaWRlIElTQyAqLw0KKwkJCWlzYy0+dHJ5X2NvbmZpZy5i aXRzX3BpcGVsaW5lID0gQ0ZBX0VOQUJMRSB8DQorCQkJCUNTQ19FTkFCTEUgfCBXQl9FTkFCTEUg fCBHQU1fRU5BQkxFUyB8DQorCQkJCUNCQ19FTkFCTEU7DQorCQl9IGVsc2Ugew0KKwkJCWlzYy0+ dHJ5X2NvbmZpZy5iaXRzX3BpcGVsaW5lID0gMHgwOw0KKwkJfQ0KKwkJYnJlYWs7DQorCWRlZmF1 bHQ6DQorCQlpc2MtPnRyeV9jb25maWcuYml0c19waXBlbGluZSA9IDB4MDsNCisJfQ0KKwlyZXR1 cm4gMDsNCit9DQorDQorc3RhdGljIGludCBpc2NfdHJ5X2ZtdChzdHJ1Y3QgaXNjX2RldmljZSAq aXNjLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYsDQorCQkJdTMyICpjb2RlKQ0KK3sNCisJaW50IGk7 DQorCXN0cnVjdCBpc2NfZm9ybWF0ICpzZF9mbXQgPSBOVUxMLCAqZGlyZWN0X2ZtdCA9IE5VTEw7 DQorCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeGZtdCA9ICZmLT5mbXQucGl4Ow0KKwlzdHJ1 Y3QgdjRsMl9zdWJkZXZfcGFkX2NvbmZpZyBwYWRfY2ZnOw0KKwlzdHJ1Y3QgdjRsMl9zdWJkZXZf Zm9ybWF0IGZvcm1hdCA9IHsNCisJCS53aGljaCA9IFY0TDJfU1VCREVWX0ZPUk1BVF9UUlksDQor CX07DQorCXUzMiBtYnVzX2NvZGU7DQorCWludCByZXQ7DQorCWJvb2wgcmxwX2RtYV9kaXJlY3Rf ZHVtcCA9IGZhbHNlOw0KKw0KKwlpZiAoZi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NB UFRVUkUpDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJLyogU3RlcCAxOiBmaW5kIGEgUkFXIGZv cm1hdCB0aGF0IGlzIHN1cHBvcnRlZCAqLw0KKwlmb3IgKGkgPSAwOyBpIDwgaXNjLT5udW1fdXNl cl9mb3JtYXRzOyBpKyspIHsNCisJCWlmIChJU0NfSVNfRk9STUFUX1JBVyhpc2MtPnVzZXJfZm9y bWF0c1tpXS0+bWJ1c19jb2RlKSkgew0KKwkJCXNkX2ZtdCA9IGlzYy0+dXNlcl9mb3JtYXRzW2ld Ow0KKwkJCWJyZWFrOw0KKwkJfQ0KKwl9DQorCS8qIFN0ZXAgMjogV2UgY2FuIGNvbnRpbnVlIHdp dGggdGhpcyBSQVcgZm9ybWF0LCBvciB3ZSBjYW4gbG9vaw0KKwkgKiBmb3IgYmV0dGVyOiBtYXli ZSBzZW5zb3Igc3VwcG9ydHMgZGlyZWN0bHkgd2hhdCB3ZSBuZWVkLg0KKwkgKi8NCisJZGlyZWN0 X2ZtdCA9IGZpbmRfZm9ybWF0X2J5X2ZvdXJjYyhpc2MsIHBpeGZtdC0+cGl4ZWxmb3JtYXQpOw0K Kw0KKwkvKiBTdGVwIDM6IFdlIGhhdmUgYm90aC4gV2UgZGVjaWRlIGdpdmVuIHRoZSBtb2R1bGUg cGFyYW1ldGVyIHdoaWNoDQorCSAqIG9uZSB0byB1c2UuDQorCSAqLw0KKwlpZiAoZGlyZWN0X2Zt dCAmJiBzZF9mbXQgJiYgc2Vuc29yX3ByZWZlcnJlZCkNCisJCXNkX2ZtdCA9IGRpcmVjdF9mbXQ7 DQorDQorCS8qIFN0ZXAgNDogd2UgZG8gbm90IGhhdmUgUkFXIGJ1dCB3ZSBoYXZlIGEgZGlyZWN0 IGZvcm1hdC4gVXNlIGl0LiAqLw0KKwlpZiAoZGlyZWN0X2ZtdCAmJiAhc2RfZm10KQ0KKwkJc2Rf Zm10ID0gZGlyZWN0X2ZtdDsNCisNCisJLyogU3RlcCA1OiBpZiB3ZSBhcmUgdXNpbmcgYSBkaXJl Y3QgZm9ybWF0LCB3ZSBuZWVkIHRvIHBhY2thZ2UNCisJICogZXZlcnl0aGluZyBhcyA4IGJpdCBk YXRhIGFuZCBqdXN0IGR1bXAgaXQNCisJICovDQorCWlmIChzZF9mbXQgPT0gZGlyZWN0X2ZtdCkN CisJCXJscF9kbWFfZGlyZWN0X2R1bXAgPSB0cnVlOw0KKw0KKwkvKiBTdGVwIDY6IFdlIGhhdmUg bm8gZm9ybWF0LiBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlIHVzZXJzcGFjZQ0KKwkgKiByZXF1ZXN0 cyBzb21lIHdlaXJkL2ludmFsaWQgZm9ybWF0Lg0KKwkgKiBJbiB0aGlzIGNhc2UsIGRlZmF1bHQg dG8gd2hhdGV2ZXIgd2UgaGF2ZQ0KKwkgKi8NCisJaWYgKCFzZF9mbXQgJiYgIWRpcmVjdF9mbXQp IHsNCisJCXNkX2ZtdCA9IGlzYy0+dXNlcl9mb3JtYXRzW2lzYy0+bnVtX3VzZXJfZm9ybWF0cyAt IDFdOw0KKwkJdjRsMl9kYmcoMSwgZGVidWcsICZpc2MtPnY0bDJfZGV2LA0KKwkJCSAiU2Vuc29y IG5vdCBzdXBwb3J0aW5nICUuNHMsIHVzaW5nICUuNHNcbiIsDQorCQkJIChjaGFyICopJnBpeGZt dC0+cGl4ZWxmb3JtYXQsIChjaGFyICopJnNkX2ZtdC0+Zm91cmNjKTsNCisJfQ0KKw0KKwlpZiAo IXNkX2ZtdCkgew0KKwkJcmV0ID0gLUVJTlZBTDsNCisJCWdvdG8gaXNjX3RyeV9mbXRfZXJyOw0K Kwl9DQorDQorCS8qIFN0ZXAgNzogUHJpbnQgb3V0IHdoYXQgd2UgZGVjaWRlZCBmb3IgZGVidWdn aW5nICovDQorCXY0bDJfZGJnKDEsIGRlYnVnLCAmaXNjLT52NGwyX2RldiwNCisJCSAiUHJlZmVy cmluZyB0byBoYXZlIHNlbnNvciB1c2luZyBmb3JtYXQgJS40c1xuIiwNCisJCSAoY2hhciAqKSZz ZF9mbXQtPmZvdXJjYyk7DQorDQorCS8qIFN0ZXAgODogYXQgdGhpcyBtb21lbnQgd2UgZGVjaWRl ZCB3aGljaCBmb3JtYXQgdGhlIHN1YmRldiB3aWxsIHVzZSAqLw0KKwlpc2MtPnRyeV9jb25maWcu c2RfZm9ybWF0ID0gc2RfZm10Ow0KKw0KKwkvKiBMaW1pdCB0byBBdG1lbCBJU0MgaGFyZHdhcmUg Y2FwYWJpbGl0aWVzICovDQorCWlmIChwaXhmbXQtPndpZHRoID4gSVNDX01BWF9TVVBQT1JUX1dJ RFRIKQ0KKwkJcGl4Zm10LT53aWR0aCA9IElTQ19NQVhfU1VQUE9SVF9XSURUSDsNCisJaWYgKHBp eGZtdC0+aGVpZ2h0ID4gSVNDX01BWF9TVVBQT1JUX0hFSUdIVCkNCisJCXBpeGZtdC0+aGVpZ2h0 ID0gSVNDX01BWF9TVVBQT1JUX0hFSUdIVDsNCisNCisJLyoNCisJICogVGhlIG1idXMgZm9ybWF0 IGlzIHRoZSBvbmUgdGhlIHN1YmRldiBvdXRwdXRzLg0KKwkgKiBUaGUgcGl4ZWxzIHdpbGwgYmUg dHJhbnNmZXJyZWQgaW4gdGhpcyBmb3JtYXQgU2Vuc29yIC0+IElTQw0KKwkgKi8NCisJbWJ1c19j b2RlID0gc2RfZm10LT5tYnVzX2NvZGU7DQorDQorCS8qDQorCSAqIFZhbGlkYXRlIGZvcm1hdHMu IElmIHRoZSByZXF1aXJlZCBmb3JtYXQgaXMgbm90IE9LLCBkZWZhdWx0IHRvIHJhdy4NCisJICov DQorDQorCWlzYy0+dHJ5X2NvbmZpZy5mb3VyY2MgPSBwaXhmbXQtPnBpeGVsZm9ybWF0Ow0KKw0K KwlpZiAoaXNjX3RyeV92YWxpZGF0ZV9mb3JtYXRzKGlzYykpIHsNCisJCXBpeGZtdC0+cGl4ZWxm b3JtYXQgPSBpc2MtPnRyeV9jb25maWcuZm91cmNjID0gc2RfZm10LT5mb3VyY2M7DQorCQkvKiBS ZS10cnkgdG8gdmFsaWRhdGUgdGhlIG5ldyBmb3JtYXQgKi8NCisJCXJldCA9IGlzY190cnlfdmFs aWRhdGVfZm9ybWF0cyhpc2MpOw0KKwkJaWYgKHJldCkNCisJCQlnb3RvIGlzY190cnlfZm10X2Vy cjsNCisJfQ0KKw0KKwlyZXQgPSBpc2NfdHJ5X2NvbmZpZ3VyZV9ybHBfZG1hKGlzYywgcmxwX2Rt YV9kaXJlY3RfZHVtcCk7DQorCWlmIChyZXQpDQorCQlnb3RvIGlzY190cnlfZm10X2VycjsNCisN CisJcmV0ID0gaXNjX3RyeV9jb25maWd1cmVfcGlwZWxpbmUoaXNjKTsNCisJaWYgKHJldCkNCisJ CWdvdG8gaXNjX3RyeV9mbXRfZXJyOw0KKw0KKwl2NGwyX2ZpbGxfbWJ1c19mb3JtYXQoJmZvcm1h dC5mb3JtYXQsIHBpeGZtdCwgbWJ1c19jb2RlKTsNCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChp c2MtPmN1cnJlbnRfc3ViZGV2LT5zZCwgcGFkLCBzZXRfZm10LA0KKwkJCSAgICAgICAmcGFkX2Nm ZywgJmZvcm1hdCk7DQorCWlmIChyZXQgPCAwKQ0KKwkJZ290byBpc2NfdHJ5X2ZtdF9zdWJkZXZf ZXJyOw0KKw0KKwl2NGwyX2ZpbGxfcGl4X2Zvcm1hdChwaXhmbXQsICZmb3JtYXQuZm9ybWF0KTsN CisNCisJcGl4Zm10LT5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsNCisJcGl4Zm10LT5ieXRlc3Bl cmxpbmUgPSAocGl4Zm10LT53aWR0aCAqIGlzYy0+dHJ5X2NvbmZpZy5icHApID4+IDM7DQorCXBp eGZtdC0+c2l6ZWltYWdlID0gcGl4Zm10LT5ieXRlc3BlcmxpbmUgKiBwaXhmbXQtPmhlaWdodDsN CisNCisJaWYgKGNvZGUpDQorCQkqY29kZSA9IG1idXNfY29kZTsNCisNCisJcmV0dXJuIDA7DQor DQoraXNjX3RyeV9mbXRfZXJyOg0KKwl2NGwyX2VycigmaXNjLT52NGwyX2RldiwgIkNvdWxkIG5v dCBmaW5kIGFueSBwb3NzaWJsZSBmb3JtYXQgZm9yIGEgd29ya2luZyBwaXBlbGluZVxuIik7DQor aXNjX3RyeV9mbXRfc3ViZGV2X2VycjoNCisJbWVtc2V0KCZpc2MtPnRyeV9jb25maWcsIDAsIHNp emVvZihpc2MtPnRyeV9jb25maWcpKTsNCisNCisJcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGlj IGludCBpc2Nfc2V0X2ZtdChzdHJ1Y3QgaXNjX2RldmljZSAqaXNjLCBzdHJ1Y3QgdjRsMl9mb3Jt YXQgKmYpDQorew0KKwlzdHJ1Y3QgdjRsMl9zdWJkZXZfZm9ybWF0IGZvcm1hdCA9IHsNCisJCS53 aGljaCA9IFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJVkUsDQorCX07DQorCXUzMiBtYnVzX2NvZGUg PSAwOw0KKwlpbnQgcmV0Ow0KKw0KKwlyZXQgPSBpc2NfdHJ5X2ZtdChpc2MsIGYsICZtYnVzX2Nv ZGUpOw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJdjRsMl9maWxsX21idXNfZm9y bWF0KCZmb3JtYXQuZm9ybWF0LCAmZi0+Zm10LnBpeCwgbWJ1c19jb2RlKTsNCisJcmV0ID0gdjRs Ml9zdWJkZXZfY2FsbChpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZCwgcGFkLA0KKwkJCSAgICAgICBz ZXRfZm10LCBOVUxMLCAmZm9ybWF0KTsNCisJaWYgKHJldCA8IDApDQorCQlyZXR1cm4gcmV0Ow0K Kw0KKwlpc2MtPmZtdCA9ICpmOw0KKw0KKwlpZiAoaXNjLT50cnlfY29uZmlnLnNkX2Zvcm1hdCAm JiBpc2MtPmNvbmZpZy5zZF9mb3JtYXQgJiYNCisJICAgIGlzYy0+dHJ5X2NvbmZpZy5zZF9mb3Jt YXQgIT0gaXNjLT5jb25maWcuc2RfZm9ybWF0KSB7DQorCQlpc2MtPmN0cmxzLmhpc3Rfc3RhdCA9 IEhJU1RfSU5JVDsNCisJCWlzY19yZXNldF9hd2JfY3RybHMoaXNjKTsNCisJfQ0KKwkvKiBtYWtl IHRoZSB0cnkgY29uZmlndXJhdGlvbiBhY3RpdmUgKi8NCisJaXNjLT5jb25maWcgPSBpc2MtPnRy eV9jb25maWc7DQorDQorCXY0bDJfZGJnKDEsIGRlYnVnLCAmaXNjLT52NGwyX2RldiwgIk5ldyBJ U0MgY29uZmlndXJhdGlvbiBpbiBwbGFjZVxuIik7DQorDQorCXJldHVybiAwOw0KK30NCisNCitz dGF0aWMgaW50IGlzY19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2 LA0KKwkJCSAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikNCit7DQorCXN0cnVjdCBpc2NfZGV2 aWNlICppc2MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KKw0KKwlpZiAodmIyX2lzX3N0cmVhbWlu ZygmaXNjLT52YjJfdmlkcSkpDQorCQlyZXR1cm4gLUVCVVNZOw0KKw0KKwlyZXR1cm4gaXNjX3Nl dF9mbXQoaXNjLCBmKTsNCit9DQorDQorc3RhdGljIGludCBpc2NfdHJ5X2ZtdF92aWRfY2FwKHN0 cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LA0KKwkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYp DQorew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsNCisN CisJcmV0dXJuIGlzY190cnlfZm10KGlzYywgZiwgTlVMTCk7DQorfQ0KKw0KK3N0YXRpYyBpbnQg aXNjX2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsDQorCQkJICAgc3Ry dWN0IHY0bDJfaW5wdXQgKmlucCkNCit7DQorCWlmIChpbnAtPmluZGV4ICE9IDApDQorCQlyZXR1 cm4gLUVJTlZBTDsNCisNCisJaW5wLT50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsNCisJ aW5wLT5zdGQgPSAwOw0KKwlzdHJzY3B5KGlucC0+bmFtZSwgIkNhbWVyYSIsIHNpemVvZihpbnAt Pm5hbWUpKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNjX2dfaW5wdXQo c3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSkNCit7DQorCSpp ID0gMDsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNjX3NfaW5wdXQoc3Ry dWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKQ0KK3sNCisJaWYgKGkg PiAwKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMg aW50IGlzY19nX3Bhcm0oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9z dHJlYW1wYXJtICphKQ0KK3sNCisJc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZpZGVvX2RydmRh dGEoZmlsZSk7DQorDQorCXJldHVybiB2NGwyX2dfcGFybV9jYXAodmlkZW9fZGV2ZGF0YShmaWxl KSwgaXNjLT5jdXJyZW50X3N1YmRldi0+c2QsIGEpOw0KK30NCisNCitzdGF0aWMgaW50IGlzY19z X3Bhcm0oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJt ICphKQ0KK3sNCisJc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7 DQorDQorCXJldHVybiB2NGwyX3NfcGFybV9jYXAodmlkZW9fZGV2ZGF0YShmaWxlKSwgaXNjLT5j dXJyZW50X3N1YmRldi0+c2QsIGEpOw0KK30NCisNCitzdGF0aWMgaW50IGlzY19lbnVtX2ZyYW1l c2l6ZXMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLA0KKwkJCSAgICAgICBzdHJ1Y3QgdjRs Ml9mcm1zaXplZW51bSAqZnNpemUpDQorew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmlk ZW9fZHJ2ZGF0YShmaWxlKTsNCisJc3RydWN0IHY0bDJfc3ViZGV2X2ZyYW1lX3NpemVfZW51bSBm c2UgPSB7DQorCQkuaW5kZXggPSBmc2l6ZS0+aW5kZXgsDQorCQkud2hpY2ggPSBWNEwyX1NVQkRF Vl9GT1JNQVRfQUNUSVZFLA0KKwl9Ow0KKwlpbnQgcmV0ID0gLUVJTlZBTDsNCisJaW50IGk7DQor DQorCWZvciAoaSA9IDA7IGkgPCBpc2MtPm51bV91c2VyX2Zvcm1hdHM7IGkrKykNCisJCWlmIChp c2MtPnVzZXJfZm9ybWF0c1tpXS0+Zm91cmNjID09IGZzaXplLT5waXhlbF9mb3JtYXQpDQorCQkJ cmV0ID0gMDsNCisNCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29udHJvbGxlcl9mb3Jt YXRzKTsgaSsrKQ0KKwkJaWYgKGNvbnRyb2xsZXJfZm9ybWF0c1tpXS5mb3VyY2MgPT0gZnNpemUt PnBpeGVsX2Zvcm1hdCkNCisJCQlyZXQgPSAwOw0KKw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJl dDsNCisNCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZCwg cGFkLCBlbnVtX2ZyYW1lX3NpemUsDQorCQkJICAgICAgIE5VTEwsICZmc2UpOw0KKwlpZiAocmV0 KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJZnNlLmNvZGUgPSBpc2MtPmNvbmZpZy5zZF9mb3JtYXQt Pm1idXNfY29kZTsNCisNCisJZnNpemUtPnR5cGUgPSBWNEwyX0ZSTVNJWkVfVFlQRV9ESVNDUkVU RTsNCisJZnNpemUtPmRpc2NyZXRlLndpZHRoID0gZnNlLm1heF93aWR0aDsNCisJZnNpemUtPmRp c2NyZXRlLmhlaWdodCA9IGZzZS5tYXhfaGVpZ2h0Ow0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQor c3RhdGljIGludCBpc2NfZW51bV9mcmFtZWludGVydmFscyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9p ZCAqZmgsDQorCQkJCSAgICBzdHJ1Y3QgdjRsMl9mcm1pdmFsZW51bSAqZml2YWwpDQorew0KKwlz dHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsNCisJc3RydWN0IHY0 bDJfc3ViZGV2X2ZyYW1lX2ludGVydmFsX2VudW0gZmllID0gew0KKwkJLmluZGV4ID0gZml2YWwt PmluZGV4LA0KKwkJLndpZHRoID0gZml2YWwtPndpZHRoLA0KKwkJLmhlaWdodCA9IGZpdmFsLT5o ZWlnaHQsDQorCQkud2hpY2ggPSBWNEwyX1NVQkRFVl9GT1JNQVRfQUNUSVZFLA0KKwl9Ow0KKwlp bnQgcmV0ID0gLUVJTlZBTDsNCisJaW50IGk7DQorDQorCWZvciAoaSA9IDA7IGkgPCBpc2MtPm51 bV91c2VyX2Zvcm1hdHM7IGkrKykNCisJCWlmIChpc2MtPnVzZXJfZm9ybWF0c1tpXS0+Zm91cmNj ID09IGZpdmFsLT5waXhlbF9mb3JtYXQpDQorCQkJcmV0ID0gMDsNCisNCisJZm9yIChpID0gMDsg aSA8IEFSUkFZX1NJWkUoY29udHJvbGxlcl9mb3JtYXRzKTsgaSsrKQ0KKwkJaWYgKGNvbnRyb2xs ZXJfZm9ybWF0c1tpXS5mb3VyY2MgPT0gZml2YWwtPnBpeGVsX2Zvcm1hdCkNCisJCQlyZXQgPSAw Ow0KKw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJcmV0ID0gdjRsMl9zdWJkZXZf Y2FsbChpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZCwgcGFkLA0KKwkJCSAgICAgICBlbnVtX2ZyYW1l X2ludGVydmFsLCBOVUxMLCAmZmllKTsNCisJaWYgKHJldCkNCisJCXJldHVybiByZXQ7DQorDQor CWZpZS5jb2RlID0gaXNjLT5jb25maWcuc2RfZm9ybWF0LT5tYnVzX2NvZGU7DQorCWZpdmFsLT50 eXBlID0gVjRMMl9GUk1JVkFMX1RZUEVfRElTQ1JFVEU7DQorCWZpdmFsLT5kaXNjcmV0ZSA9IGZp ZS5pbnRlcnZhbDsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg djRsMl9pb2N0bF9vcHMgaXNjX2lvY3RsX29wcyA9IHsNCisJLnZpZGlvY19xdWVyeWNhcAkJPSBp c2NfcXVlcnljYXAsDQorCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcAk9IGlzY19lbnVtX2ZtdF92 aWRfY2FwLA0KKwkudmlkaW9jX2dfZm10X3ZpZF9jYXAJCT0gaXNjX2dfZm10X3ZpZF9jYXAsDQor CS52aWRpb2Nfc19mbXRfdmlkX2NhcAkJPSBpc2Nfc19mbXRfdmlkX2NhcCwNCisJLnZpZGlvY190 cnlfZm10X3ZpZF9jYXAJCT0gaXNjX3RyeV9mbXRfdmlkX2NhcCwNCisNCisJLnZpZGlvY19lbnVt X2lucHV0CQk9IGlzY19lbnVtX2lucHV0LA0KKwkudmlkaW9jX2dfaW5wdXQJCQk9IGlzY19nX2lu cHV0LA0KKwkudmlkaW9jX3NfaW5wdXQJCQk9IGlzY19zX2lucHV0LA0KKw0KKwkudmlkaW9jX3Jl cWJ1ZnMJCQk9IHZiMl9pb2N0bF9yZXFidWZzLA0KKwkudmlkaW9jX3F1ZXJ5YnVmCQk9IHZiMl9p b2N0bF9xdWVyeWJ1ZiwNCisJLnZpZGlvY19xYnVmCQkJPSB2YjJfaW9jdGxfcWJ1ZiwNCisJLnZp ZGlvY19leHBidWYJCQk9IHZiMl9pb2N0bF9leHBidWYsDQorCS52aWRpb2NfZHFidWYJCQk9IHZi Ml9pb2N0bF9kcWJ1ZiwNCisJLnZpZGlvY19jcmVhdGVfYnVmcwkJPSB2YjJfaW9jdGxfY3JlYXRl X2J1ZnMsDQorCS52aWRpb2NfcHJlcGFyZV9idWYJCT0gdmIyX2lvY3RsX3ByZXBhcmVfYnVmLA0K KwkudmlkaW9jX3N0cmVhbW9uCQk9IHZiMl9pb2N0bF9zdHJlYW1vbiwNCisJLnZpZGlvY19zdHJl YW1vZmYJCT0gdmIyX2lvY3RsX3N0cmVhbW9mZiwNCisNCisJLnZpZGlvY19nX3Bhcm0JCQk9IGlz Y19nX3Bhcm0sDQorCS52aWRpb2Nfc19wYXJtCQkJPSBpc2Nfc19wYXJtLA0KKwkudmlkaW9jX2Vu dW1fZnJhbWVzaXplcwkJPSBpc2NfZW51bV9mcmFtZXNpemVzLA0KKwkudmlkaW9jX2VudW1fZnJh bWVpbnRlcnZhbHMJPSBpc2NfZW51bV9mcmFtZWludGVydmFscywNCisNCisJLnZpZGlvY19sb2df c3RhdHVzCQk9IHY0bDJfY3RybF9sb2dfc3RhdHVzLA0KKwkudmlkaW9jX3N1YnNjcmliZV9ldmVu dAkJPSB2NGwyX2N0cmxfc3Vic2NyaWJlX2V2ZW50LA0KKwkudmlkaW9jX3Vuc3Vic2NyaWJlX2V2 ZW50CT0gdjRsMl9ldmVudF91bnN1YnNjcmliZSwNCit9Ow0KKw0KK3N0YXRpYyBpbnQgaXNjX29w ZW4oc3RydWN0IGZpbGUgKmZpbGUpDQorew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmlk ZW9fZHJ2ZGF0YShmaWxlKTsNCisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGlzYy0+Y3VycmVu dF9zdWJkZXYtPnNkOw0KKwlpbnQgcmV0Ow0KKw0KKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRp YmxlKCZpc2MtPmxvY2spKQ0KKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsNCisNCisJcmV0ID0gdjRs Ml9maF9vcGVuKGZpbGUpOw0KKwlpZiAocmV0IDwgMCkNCisJCWdvdG8gdW5sb2NrOw0KKw0KKwlp ZiAoIXY0bDJfZmhfaXNfc2luZ3VsYXJfZmlsZShmaWxlKSkNCisJCWdvdG8gdW5sb2NrOw0KKw0K KwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCBjb3JlLCBzX3Bvd2VyLCAxKTsNCisJaWYgKHJl dCA8IDAgJiYgcmV0ICE9IC1FTk9JT0NUTENNRCkgew0KKwkJdjRsMl9maF9yZWxlYXNlKGZpbGUp Ow0KKwkJZ290byB1bmxvY2s7DQorCX0NCisNCisJcmV0ID0gaXNjX3NldF9mbXQoaXNjLCAmaXNj LT5mbXQpOw0KKwlpZiAocmV0KSB7DQorCQl2NGwyX3N1YmRldl9jYWxsKHNkLCBjb3JlLCBzX3Bv d2VyLCAwKTsNCisJCXY0bDJfZmhfcmVsZWFzZShmaWxlKTsNCisJfQ0KKw0KK3VubG9jazoNCisJ bXV0ZXhfdW5sb2NrKCZpc2MtPmxvY2spOw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMg aW50IGlzY19yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQ0KK3sNCisJc3RydWN0IGlzY19kZXZp Y2UgKmlzYyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7DQorCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Qg PSBpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZDsNCisJYm9vbCBmaF9zaW5ndWxhcjsNCisJaW50IHJl dDsNCisNCisJbXV0ZXhfbG9jaygmaXNjLT5sb2NrKTsNCisNCisJZmhfc2luZ3VsYXIgPSB2NGwy X2ZoX2lzX3Npbmd1bGFyX2ZpbGUoZmlsZSk7DQorDQorCXJldCA9IF92YjJfZm9wX3JlbGVhc2Uo ZmlsZSwgTlVMTCk7DQorDQorCWlmIChmaF9zaW5ndWxhcikNCisJCXY0bDJfc3ViZGV2X2NhbGwo c2QsIGNvcmUsIHNfcG93ZXIsIDApOw0KKw0KKwltdXRleF91bmxvY2soJmlzYy0+bG9jayk7DQor DQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29w ZXJhdGlvbnMgaXNjX2ZvcHMgPSB7DQorCS5vd25lcgkJPSBUSElTX01PRFVMRSwNCisJLm9wZW4J CT0gaXNjX29wZW4sDQorCS5yZWxlYXNlCT0gaXNjX3JlbGVhc2UsDQorCS51bmxvY2tlZF9pb2N0 bAk9IHZpZGVvX2lvY3RsMiwNCisJLnJlYWQJCT0gdmIyX2ZvcF9yZWFkLA0KKwkubW1hcAkJPSB2 YjJfZm9wX21tYXAsDQorCS5wb2xsCQk9IHZiMl9mb3BfcG9sbCwNCit9Ow0KKw0KK2lycXJldHVy bl90IGlzY19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQ0KK3sNCisJc3RydWN0IGlz Y19kZXZpY2UgKmlzYyA9IChzdHJ1Y3QgaXNjX2RldmljZSAqKWRldl9pZDsNCisJc3RydWN0IHJl Z21hcCAqcmVnbWFwID0gaXNjLT5yZWdtYXA7DQorCXUzMiBpc2NfaW50c3IsIGlzY19pbnRtYXNr LCBwZW5kaW5nOw0KKwlpcnFyZXR1cm5fdCByZXQgPSBJUlFfTk9ORTsNCisNCisJcmVnbWFwX3Jl YWQocmVnbWFwLCBJU0NfSU5UU1IsICZpc2NfaW50c3IpOw0KKwlyZWdtYXBfcmVhZChyZWdtYXAs IElTQ19JTlRNQVNLLCAmaXNjX2ludG1hc2spOw0KKw0KKwlwZW5kaW5nID0gaXNjX2ludHNyICYg aXNjX2ludG1hc2s7DQorDQorCWlmIChsaWtlbHkocGVuZGluZyAmIElTQ19JTlRfRERPTkUpKSB7 DQorCQlzcGluX2xvY2soJmlzYy0+ZG1hX3F1ZXVlX2xvY2spOw0KKwkJaWYgKGlzYy0+Y3VyX2Zy bSkgew0KKwkJCXN0cnVjdCB2YjJfdjRsMl9idWZmZXIgKnZidWYgPSAmaXNjLT5jdXJfZnJtLT52 YjsNCisJCQlzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIgPSAmdmJ1Zi0+dmIyX2J1ZjsNCisNCisJCQl2 Yi0+dGltZXN0YW1wID0ga3RpbWVfZ2V0X25zKCk7DQorCQkJdmJ1Zi0+c2VxdWVuY2UgPSBpc2Mt PnNlcXVlbmNlKys7DQorCQkJdmIyX2J1ZmZlcl9kb25lKHZiLCBWQjJfQlVGX1NUQVRFX0RPTkUp Ow0KKwkJCWlzYy0+Y3VyX2ZybSA9IE5VTEw7DQorCQl9DQorDQorCQlpZiAoIWxpc3RfZW1wdHko JmlzYy0+ZG1hX3F1ZXVlKSAmJiAhaXNjLT5zdG9wKSB7DQorCQkJaXNjLT5jdXJfZnJtID0gbGlz dF9maXJzdF9lbnRyeSgmaXNjLT5kbWFfcXVldWUsDQorCQkJCQkJICAgICBzdHJ1Y3QgaXNjX2J1 ZmZlciwgbGlzdCk7DQorCQkJbGlzdF9kZWwoJmlzYy0+Y3VyX2ZybS0+bGlzdCk7DQorDQorCQkJ aXNjX3N0YXJ0X2RtYShpc2MpOw0KKwkJfQ0KKw0KKwkJaWYgKGlzYy0+c3RvcCkNCisJCQljb21w bGV0ZSgmaXNjLT5jb21wKTsNCisNCisJCXJldCA9IElSUV9IQU5ETEVEOw0KKwkJc3Bpbl91bmxv Y2soJmlzYy0+ZG1hX3F1ZXVlX2xvY2spOw0KKwl9DQorDQorCWlmIChwZW5kaW5nICYgSVNDX0lO VF9ISVNET05FKSB7DQorCQlzY2hlZHVsZV93b3JrKCZpc2MtPmF3Yl93b3JrKTsNCisJCXJldCA9 IElSUV9IQU5ETEVEOw0KKwl9DQorDQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyB2b2lk IGlzY19oaXN0X2NvdW50KHN0cnVjdCBpc2NfZGV2aWNlICppc2MsIHUzMiAqbWluLCB1MzIgKm1h eCkNCit7DQorCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0KKwlzdHJ1Y3Qg aXNjX2N0cmxzICpjdHJscyA9ICZpc2MtPmN0cmxzOw0KKwl1MzIgKmhpc3RfY291bnQgPSAmY3Ry bHMtPmhpc3RfY291bnRbY3RybHMtPmhpc3RfaWRdOw0KKwl1MzIgKmhpc3RfZW50cnkgPSAmY3Ry bHMtPmhpc3RfZW50cnlbMF07DQorCXUzMiBpOw0KKw0KKwkqbWluID0gMDsNCisJKm1heCA9IEhJ U1RfRU5UUklFUzsNCisNCisJcmVnbWFwX2J1bGtfcmVhZChyZWdtYXAsIElTQ19ISVNfRU5UUlks IGhpc3RfZW50cnksIEhJU1RfRU5UUklFUyk7DQorDQorCSpoaXN0X2NvdW50ID0gMDsNCisJLyoN CisJICogd2UgZGVsaWJlcmF0ZWx5IGlnbm9yZSB0aGUgZW5kIG9mIHRoZSBoaXN0b2dyYW0sDQor CSAqIHRoZSBtb3N0IHdoaXRlIHBpeGVscw0KKwkgKi8NCisJZm9yIChpID0gMTsgaSA8IEhJU1Rf RU5UUklFUzsgaSsrKSB7DQorCQlpZiAoKmhpc3RfZW50cnkgJiYgISptaW4pDQorCQkJKm1pbiA9 IGk7DQorCQlpZiAoKmhpc3RfZW50cnkpDQorCQkJKm1heCA9IGk7DQorCQkqaGlzdF9jb3VudCAr PSBpICogKCpoaXN0X2VudHJ5KyspOw0KKwl9DQorDQorCWlmICghKm1pbikNCisJCSptaW4gPSAx Ow0KK30NCisNCitzdGF0aWMgdm9pZCBpc2Nfd2JfdXBkYXRlKHN0cnVjdCBpc2NfY3RybHMgKmN0 cmxzKQ0KK3sNCisJdTMyICpoaXN0X2NvdW50ID0gJmN0cmxzLT5oaXN0X2NvdW50WzBdOw0KKwl1 MzIgYywgb2Zmc2V0WzRdOw0KKwl1NjQgYXZnID0gMDsNCisJLyogV2UgY29tcHV0ZSB0d28gZ2Fp bnMsIHN0cmV0Y2ggZ2FpbiBhbmQgZ3JleSB3b3JsZCBnYWluICovDQorCXUzMiBzX2dhaW5bNF0s IGd3X2dhaW5bNF07DQorDQorCS8qDQorCSAqIEFjY29yZGluZyB0byBHcmV5IFdvcmxkLCB3ZSBu ZWVkIHRvIHNldCBnYWlucyBmb3IgUi9CIHRvIG5vcm1hbGl6ZQ0KKwkgKiB0aGVtIHRvd2FyZHMg dGhlIGdyZWVuIGNoYW5uZWwuDQorCSAqIFRodXMgd2Ugd2FudCB0byBrZWVwIEdyZWVuIGFzIGZp eGVkIGFuZCBhZGp1c3Qgb25seSBSZWQvQmx1ZQ0KKwkgKiBDb21wdXRlIHRoZSBhdmVyYWdlIG9m IHRoZSBib3RoIGdyZWVuIGNoYW5uZWxzIGZpcnN0DQorCSAqLw0KKwlhdmcgPSAodTY0KWhpc3Rf Y291bnRbSVNDX0hJU19DRkdfTU9ERV9HUl0gKw0KKwkJKHU2NCloaXN0X2NvdW50W0lTQ19ISVNf Q0ZHX01PREVfR0JdOw0KKwlhdmcgPj49IDE7DQorDQorCS8qIEdyZWVuIGhpc3RvZ3JhbSBpcyBu dWxsLCBub3RoaW5nIHRvIGRvICovDQorCWlmICghYXZnKQ0KKwkJcmV0dXJuOw0KKw0KKwlmb3Ig KGMgPSBJU0NfSElTX0NGR19NT0RFX0dSOyBjIDw9IElTQ19ISVNfQ0ZHX01PREVfQjsgYysrKSB7 DQorCQkvKg0KKwkJICogdGhlIGNvbG9yIG9mZnNldCBpcyB0aGUgbWluaW11bSB2YWx1ZSBvZiB0 aGUgaGlzdG9ncmFtLg0KKwkJICogd2Ugc3RyZXRjaCB0aGlzIGNvbG9yIHRvIHRoZSBmdWxsIHJh bmdlIGJ5IHN1YnN0cmFjdGluZw0KKwkJICogdGhpcyB2YWx1ZSBmcm9tIHRoZSBjb2xvciBjb21w b25lbnQuDQorCQkgKi8NCisJCW9mZnNldFtjXSA9IGN0cmxzLT5oaXN0X21pbm1heFtjXVtISVNU X01JTl9JTkRFWF07DQorCQkvKg0KKwkJICogVGhlIG9mZnNldCBpcyBhbHdheXMgYXQgbGVhc3Qg MS4gSWYgdGhlIG9mZnNldCBpcyAxLCB3ZSBkbw0KKwkJICogbm90IG5lZWQgdG8gYWRqdXN0IGl0 LCBzbyBvdXIgcmVzdWx0IG11c3QgYmUgemVyby4NCisJCSAqIHRoZSBvZmZzZXQgaXMgY29tcHV0 ZWQgaW4gYSBoaXN0b2dyYW0gb24gOSBiaXRzICgwLi41MTIpDQorCQkgKiBidXQgdGhlIG9mZnNl dCBpbiByZWdpc3RlciBpcyBiYXNlZCBvbg0KKwkJICogMTIgYml0cyBwaXBlbGluZSAoMC4uNDA5 NikuDQorCQkgKiB3ZSBuZWVkIHRvIHNoaWZ0IHdpdGggdGhlIDMgYml0cyB0aGF0IHRoZSBoaXN0 b2dyYW0gaXMNCisJCSAqIGlnbm9yaW5nDQorCQkgKi8NCisJCWN0cmxzLT5vZmZzZXRbY10gPSAo b2Zmc2V0W2NdIC0gMSkgPDwgMzsNCisNCisJCS8qIHRoZSBvZmZzZXQgaXMgdGhlbiB0YWtlbiBh bmQgY29udmVydGVkIHRvIDIncyBjb21wbGVtZW50cyAqLw0KKwkJaWYgKCFjdHJscy0+b2Zmc2V0 W2NdKQ0KKwkJCWN0cmxzLT5vZmZzZXRbY10gPSBJU0NfV0JfT19aRVJPX1ZBTDsNCisNCisJCS8q DQorCQkgKiB0aGUgc3RyZXRjaCBnYWluIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgaGlzdG9ncmFt IGJpbnMNCisJCSAqIGRpdmlkZWQgYnkgdGhlIGFjdHVhbCByYW5nZSBvZiBjb2xvciBjb21wb25l bnQgKE1heCAtIE1pbikNCisJCSAqIElmIHdlIGNvbXB1dGUgZ2FpbiBsaWtlIHRoaXMsIHRoZSBh Y3R1YWwgY29sb3IgY29tcG9uZW50DQorCQkgKiB3aWxsIGJlIHN0cmV0Y2hlZCB0byB0aGUgZnVs bCBoaXN0b2dyYW0uDQorCQkgKiBXZSBuZWVkIHRvIHNoaWZ0IDkgYml0cyBmb3IgcHJlY2lzaW9u LCB3ZSBoYXZlIDkgYml0cyBmb3INCisJCSAqIGRlY2ltYWxzDQorCQkgKi8NCisJCXNfZ2Fpbltj XSA9IChISVNUX0VOVFJJRVMgPDwgOSkgLw0KKwkJCShjdHJscy0+aGlzdF9taW5tYXhbY11bSElT VF9NQVhfSU5ERVhdIC0NCisJCQljdHJscy0+aGlzdF9taW5tYXhbY11bSElTVF9NSU5fSU5ERVhd ICsgMSk7DQorDQorCQkvKg0KKwkJICogTm93IHdlIGhhdmUgdG8gY29tcHV0ZSB0aGUgZ2FpbiB3 LnIudC4gdGhlIGF2ZXJhZ2UuDQorCQkgKiBBZGQvbG9zZSBnYWluIHRvIHRoZSBjb21wb25lbnQg dG93YXJkcyB0aGUgYXZlcmFnZS4NCisJCSAqIElmIGl0IGhhcHBlbnMgdGhhdCB0aGUgY29tcG9u ZW50IGlzIHplcm8sIHVzZSB0aGUNCisJCSAqIGZpeGVkIHBvaW50IHZhbHVlIDogMS4wIGdhaW4u DQorCQkgKi8NCisJCWlmIChoaXN0X2NvdW50W2NdKQ0KKwkJCWd3X2dhaW5bY10gPSBkaXZfdTY0 KGF2ZyA8PCA5LCBoaXN0X2NvdW50W2NdKTsNCisJCWVsc2UNCisJCQlnd19nYWluW2NdID0gMSA8 PCA5Ow0KKw0KKwkJLyogbXVsdGlwbHkgYm90aCBnYWlucyBhbmQgYWRqdXN0IGZvciBkZWNpbWFs cyAqLw0KKwkJY3RybHMtPmdhaW5bY10gPSBzX2dhaW5bY10gKiBnd19nYWluW2NdOw0KKwkJY3Ry bHMtPmdhaW5bY10gPj49IDk7DQorCX0NCit9DQorDQorc3RhdGljIHZvaWQgaXNjX2F3Yl93b3Jr KHN0cnVjdCB3b3JrX3N0cnVjdCAqdykNCit7DQorCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPQ0K KwkJY29udGFpbmVyX29mKHcsIHN0cnVjdCBpc2NfZGV2aWNlLCBhd2Jfd29yayk7DQorCXN0cnVj dCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0KKwlzdHJ1Y3QgaXNjX2N0cmxzICpjdHJs cyA9ICZpc2MtPmN0cmxzOw0KKwl1MzIgaGlzdF9pZCA9IGN0cmxzLT5oaXN0X2lkOw0KKwl1MzIg YmF5c2VsOw0KKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KKwl1MzIgbWluLCBtYXg7DQorDQorCS8q IHN0cmVhbWluZyBpcyBub3QgYWN0aXZlIGFueW1vcmUgKi8NCisJaWYgKGlzYy0+c3RvcCkNCisJ CXJldHVybjsNCisNCisJaWYgKGN0cmxzLT5oaXN0X3N0YXQgIT0gSElTVF9FTkFCTEVEKQ0KKwkJ cmV0dXJuOw0KKw0KKwlpc2NfaGlzdF9jb3VudChpc2MsICZtaW4sICZtYXgpOw0KKwljdHJscy0+ aGlzdF9taW5tYXhbaGlzdF9pZF1bSElTVF9NSU5fSU5ERVhdID0gbWluOw0KKwljdHJscy0+aGlz dF9taW5tYXhbaGlzdF9pZF1bSElTVF9NQVhfSU5ERVhdID0gbWF4Ow0KKw0KKwlpZiAoaGlzdF9p ZCAhPSBJU0NfSElTX0NGR19NT0RFX0IpIHsNCisJCWhpc3RfaWQrKzsNCisJfSBlbHNlIHsNCisJ CWlzY193Yl91cGRhdGUoY3RybHMpOw0KKwkJaGlzdF9pZCA9IElTQ19ISVNfQ0ZHX01PREVfR1I7 DQorCX0NCisNCisJY3RybHMtPmhpc3RfaWQgPSBoaXN0X2lkOw0KKwliYXlzZWwgPSBpc2MtPmNv bmZpZy5zZF9mb3JtYXQtPmNmYV9iYXljZmcgPDwgSVNDX0hJU19DRkdfQkFZU0VMX1NISUZUOw0K Kw0KKwkvKiBpZiBubyBtb3JlIGF1dG8gd2hpdGUgYmFsYW5jZSwgcmVzZXQgY29udHJvbHMuICov DQorCWlmIChjdHJscy0+YXdiID09IElTQ19XQl9OT05FKQ0KKwkJaXNjX3Jlc2V0X2F3Yl9jdHJs cyhpc2MpOw0KKw0KKwlwbV9ydW50aW1lX2dldF9zeW5jKGlzYy0+ZGV2KTsNCisNCisJLyoNCisJ ICogb25seSB1cGRhdGUgaWYgd2UgaGF2ZSBhbGwgdGhlIHJlcXVpcmVkIGhpc3RvZ3JhbXMgYW5k IGNvbnRyb2xzDQorCSAqIGlmIGF3YiBoYXMgYmVlbiBkaXNhYmxlZCwgd2UgbmVlZCB0byByZXNl dCByZWdpc3RlcnMgYXMgd2VsbC4NCisJICovDQorCWlmIChoaXN0X2lkID09IElTQ19ISVNfQ0ZH X01PREVfR1IgfHwgY3RybHMtPmF3YiA9PSBJU0NfV0JfTk9ORSkgew0KKwkJLyoNCisJCSAqIEl0 IG1heSBoYXBwZW4gdGhhdCBETUEgRG9uZSBJUlEgd2lsbCB0cmlnZ2VyIHdoaWxlIHdlIGFyZQ0K KwkJICogdXBkYXRpbmcgd2hpdGUgYmFsYW5jZSByZWdpc3RlcnMgaGVyZS4NCisJCSAqIEluIHRo YXQgY2FzZSwgb25seSBwYXJ0cyBvZiB0aGUgY29udHJvbHMgaGF2ZSBiZWVuIHVwZGF0ZWQuDQor CQkgKiBXZSBjYW4gYXZvaWQgdGhhdCBieSBsb2NraW5nIHRoZSBzZWN0aW9uLg0KKwkJICovDQor CQlzcGluX2xvY2tfaXJxc2F2ZSgmaXNjLT5hd2JfbG9jaywgZmxhZ3MpOw0KKwkJaXNjX3VwZGF0 ZV9hd2JfY3RybHMoaXNjKTsNCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzYy0+YXdiX2xv Y2ssIGZsYWdzKTsNCisNCisJCS8qDQorCQkgKiBpZiB3ZSBhcmUgZG9pbmcganVzdCB0aGUgb25l IHRpbWUgd2hpdGUgYmFsYW5jZSBhZGp1c3RtZW50LA0KKwkJICogd2UgYXJlIGJhc2ljYWxseSBk b25lLg0KKwkJICovDQorCQlpZiAoY3RybHMtPmF3YiA9PSBJU0NfV0JfT05FVElNRSkgew0KKwkJ CXY0bDJfaW5mbygmaXNjLT52NGwyX2RldiwNCisJCQkJICAiQ29tcGxldGVkIG9uZSB0aW1lIHdo aXRlLWJhbGFuY2UgYWRqdXN0bWVudC5cbiIpOw0KKwkJCWN0cmxzLT5hd2IgPSBJU0NfV0JfTk9O RTsNCisJCX0NCisJfQ0KKwlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfSElTX0NGRywgaGlzdF9p ZCB8IGJheXNlbCB8IElTQ19ISVNfQ0ZHX1JBUik7DQorCWlzY191cGRhdGVfcHJvZmlsZShpc2Mp Ow0KKwkvKiBpZiBhd2IgaGFzIGJlZW4gZGlzYWJsZWQsIHdlIGRvbid0IG5lZWQgdG8gc3RhcnQg YW5vdGhlciBoaXN0b2dyYW0gKi8NCisJaWYgKGN0cmxzLT5hd2IpDQorCQlyZWdtYXBfd3JpdGUo cmVnbWFwLCBJU0NfQ1RSTEVOLCBJU0NfQ1RSTF9ISVNSRVEpOw0KKw0KKwlwbV9ydW50aW1lX3B1 dF9zeW5jKGlzYy0+ZGV2KTsNCit9DQorDQorc3RhdGljIGludCBpc2Nfc19jdHJsKHN0cnVjdCB2 NGwyX2N0cmwgKmN0cmwpDQorew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gY29udGFpbmVy X29mKGN0cmwtPmhhbmRsZXIsDQorCQkJCQkgICAgIHN0cnVjdCBpc2NfZGV2aWNlLCBjdHJscy5o YW5kbGVyKTsNCisJc3RydWN0IGlzY19jdHJscyAqY3RybHMgPSAmaXNjLT5jdHJsczsNCisNCisJ aWYgKGN0cmwtPmZsYWdzICYgVjRMMl9DVFJMX0ZMQUdfSU5BQ1RJVkUpDQorCQlyZXR1cm4gMDsN CisNCisJc3dpdGNoIChjdHJsLT5pZCkgew0KKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6DQor CQljdHJscy0+YnJpZ2h0bmVzcyA9IGN0cmwtPnZhbCAmIElTQ19DQkNfQlJJR0hUX01BU0s7DQor CQlicmVhazsNCisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoNCisJCWN0cmxzLT5jb250cmFzdCA9 IGN0cmwtPnZhbCAmIElTQ19DQkNfQ09OVFJBU1RfTUFTSzsNCisJCWJyZWFrOw0KKwljYXNlIFY0 TDJfQ0lEX0dBTU1BOg0KKwkJY3RybHMtPmdhbW1hX2luZGV4ID0gY3RybC0+dmFsOw0KKwkJYnJl YWs7DQorCWNhc2UgVjRMMl9DSURfQVVUT19XSElURV9CQUxBTkNFOg0KKwkJaWYgKGN0cmwtPnZh bCA9PSAxKQ0KKwkJCWN0cmxzLT5hd2IgPSBJU0NfV0JfQVVUTzsNCisJCWVsc2UNCisJCQljdHJs cy0+YXdiID0gSVNDX1dCX05PTkU7DQorDQorCQkvKiB3ZSBkaWQgbm90IGNvbmZpZ3VyZSBJU0Mg eWV0ICovDQorCQlpZiAoIWlzYy0+Y29uZmlnLnNkX2Zvcm1hdCkNCisJCQlicmVhazsNCisNCisJ CWlmIChjdHJscy0+aGlzdF9zdGF0ICE9IEhJU1RfRU5BQkxFRCkNCisJCQlpc2NfcmVzZXRfYXdi X2N0cmxzKGlzYyk7DQorDQorCQlpZiAoaXNjLT5jdHJscy5hd2IgPT0gSVNDX1dCX0FVVE8gJiYN CisJCSAgICB2YjJfaXNfc3RyZWFtaW5nKCZpc2MtPnZiMl92aWRxKSAmJg0KKwkJICAgIElTQ19J U19GT1JNQVRfUkFXKGlzYy0+Y29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlKSkNCisJCQlpc2Nf c2V0X2hpc3RvZ3JhbShpc2MsIHRydWUpOw0KKw0KKwkJYnJlYWs7DQorCWNhc2UgVjRMMl9DSURf RE9fV0hJVEVfQkFMQU5DRToNCisJCS8qIGlmIEFXQiBpcyBlbmFibGVkLCBkbyBub3RoaW5nICov DQorCQlpZiAoY3RybHMtPmF3YiA9PSBJU0NfV0JfQVVUTykNCisJCQlyZXR1cm4gMDsNCisNCisJ CWN0cmxzLT5hd2IgPSBJU0NfV0JfT05FVElNRTsNCisJCWlzY19zZXRfaGlzdG9ncmFtKGlzYywg dHJ1ZSk7DQorCQl2NGwyX2RiZygxLCBkZWJ1ZywgJmlzYy0+djRsMl9kZXYsDQorCQkJICJPbmUg dGltZSB3aGl0ZS1iYWxhbmNlIHN0YXJ0ZWQuXG4iKTsNCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0K KwkJcmV0dXJuIC1FSU5WQUw7DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBj b25zdCBzdHJ1Y3QgdjRsMl9jdHJsX29wcyBpc2NfY3RybF9vcHMgPSB7DQorCS5zX2N0cmwJPSBp c2Nfc19jdHJsLA0KK307DQorDQorc3RhdGljIGludCBpc2NfY3RybF9pbml0KHN0cnVjdCBpc2Nf ZGV2aWNlICppc2MpDQorew0KKwljb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX29wcyAqb3BzID0gJmlz Y19jdHJsX29wczsNCisJc3RydWN0IGlzY19jdHJscyAqY3RybHMgPSAmaXNjLT5jdHJsczsNCisJ c3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoZGwgPSAmY3RybHMtPmhhbmRsZXI7DQorCWludCBy ZXQ7DQorDQorCWN0cmxzLT5oaXN0X3N0YXQgPSBISVNUX0lOSVQ7DQorCWlzY19yZXNldF9hd2Jf Y3RybHMoaXNjKTsNCisNCisJcmV0ID0gdjRsMl9jdHJsX2hhbmRsZXJfaW5pdChoZGwsIDUpOw0K KwlpZiAocmV0IDwgMCkNCisJCXJldHVybiByZXQ7DQorDQorCWN0cmxzLT5icmlnaHRuZXNzID0g MDsNCisJY3RybHMtPmNvbnRyYXN0ID0gMjU2Ow0KKw0KKwl2NGwyX2N0cmxfbmV3X3N0ZChoZGws IG9wcywgVjRMMl9DSURfQlJJR0hUTkVTUywgLTEwMjQsIDEwMjMsIDEsIDApOw0KKwl2NGwyX2N0 cmxfbmV3X3N0ZChoZGwsIG9wcywgVjRMMl9DSURfQ09OVFJBU1QsIC0yMDQ4LCAyMDQ3LCAxLCAy NTYpOw0KKwl2NGwyX2N0cmxfbmV3X3N0ZChoZGwsIG9wcywgVjRMMl9DSURfR0FNTUEsIDAsIEdB TU1BX01BWCwgMSwgMik7DQorCXY0bDJfY3RybF9uZXdfc3RkKGhkbCwgb3BzLCBWNEwyX0NJRF9B VVRPX1dISVRFX0JBTEFOQ0UsIDAsIDEsIDEsIDEpOw0KKw0KKwkvKiBkb193aGl0ZV9iYWxhbmNl IGlzIGEgYnV0dG9uLCBzbyBtaW4sbWF4LHN0ZXAsZGVmYXVsdCBhcmUgaWdub3JlZCAqLw0KKwlp c2MtPmRvX3diX2N0cmwgPSB2NGwyX2N0cmxfbmV3X3N0ZChoZGwsIG9wcywgVjRMMl9DSURfRE9f V0hJVEVfQkFMQU5DRSwNCisJCQkJCSAgICAwLCAwLCAwLCAwKTsNCisNCisJdjRsMl9jdHJsX2Fj dGl2YXRlKGlzYy0+ZG9fd2JfY3RybCwgZmFsc2UpOw0KKw0KKwl2NGwyX2N0cmxfaGFuZGxlcl9z ZXR1cChoZGwpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBpc2NfYXN5bmNf Ym91bmQoc3RydWN0IHY0bDJfYXN5bmNfbm90aWZpZXIgKm5vdGlmaWVyLA0KKwkJCSAgICBzdHJ1 Y3QgdjRsMl9zdWJkZXYgKnN1YmRldiwNCisJCQkgICAgc3RydWN0IHY0bDJfYXN5bmNfc3ViZGV2 ICphc2QpDQorew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gY29udGFpbmVyX29mKG5vdGlm aWVyLT52NGwyX2RldiwNCisJCQkJCSAgICAgIHN0cnVjdCBpc2NfZGV2aWNlLCB2NGwyX2Rldik7 DQorCXN0cnVjdCBpc2Nfc3ViZGV2X2VudGl0eSAqc3ViZGV2X2VudGl0eSA9DQorCQljb250YWlu ZXJfb2Yobm90aWZpZXIsIHN0cnVjdCBpc2Nfc3ViZGV2X2VudGl0eSwgbm90aWZpZXIpOw0KKw0K KwlpZiAodmlkZW9faXNfcmVnaXN0ZXJlZCgmaXNjLT52aWRlb19kZXYpKSB7DQorCQl2NGwyX2Vy cigmaXNjLT52NGwyX2RldiwgIm9ubHkgc3VwcG9ydHMgb25lIHN1Yi1kZXZpY2UuXG4iKTsNCisJ CXJldHVybiAtRUJVU1k7DQorCX0NCisNCisJc3ViZGV2X2VudGl0eS0+c2QgPSBzdWJkZXY7DQor DQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgdm9pZCBpc2NfYXN5bmNfdW5iaW5kKHN0cnVj dCB2NGwyX2FzeW5jX25vdGlmaWVyICpub3RpZmllciwNCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9z dWJkZXYgKnN1YmRldiwNCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9hc3luY19zdWJkZXYgKmFzZCkN Cit7DQorCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSBjb250YWluZXJfb2Yobm90aWZpZXItPnY0 bDJfZGV2LA0KKwkJCQkJICAgICAgc3RydWN0IGlzY19kZXZpY2UsIHY0bDJfZGV2KTsNCisJY2Fu Y2VsX3dvcmtfc3luYygmaXNjLT5hd2Jfd29yayk7DQorCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNl KCZpc2MtPnZpZGVvX2Rldik7DQorCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoJmlzYy0+Y3RybHMu aGFuZGxlcik7DQorfQ0KKw0KK3N0YXRpYyBzdHJ1Y3QgaXNjX2Zvcm1hdCAqZmluZF9mb3JtYXRf YnlfY29kZSh1bnNpZ25lZCBpbnQgY29kZSwgaW50ICppbmRleCkNCit7DQorCXN0cnVjdCBpc2Nf Zm9ybWF0ICpmbXQgPSAmZm9ybWF0c19saXN0WzBdOw0KKwl1bnNpZ25lZCBpbnQgaTsNCisNCisJ Zm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZm9ybWF0c19saXN0KTsgaSsrKSB7DQorCQlpZiAo Zm10LT5tYnVzX2NvZGUgPT0gY29kZSkgew0KKwkJCSppbmRleCA9IGk7DQorCQkJcmV0dXJuIGZt dDsNCisJCX0NCisNCisJCWZtdCsrOw0KKwl9DQorDQorCXJldHVybiBOVUxMOw0KK30NCisNCitz dGF0aWMgaW50IGlzY19mb3JtYXRzX2luaXQoc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCit7DQor CXN0cnVjdCBpc2NfZm9ybWF0ICpmbXQ7DQorCXN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2ID0g aXNjLT5jdXJyZW50X3N1YmRldi0+c2Q7DQorCXVuc2lnbmVkIGludCBudW1fZm10cywgaSwgajsN CisJdTMyIGxpc3Rfc2l6ZSA9IEFSUkFZX1NJWkUoZm9ybWF0c19saXN0KTsNCisJc3RydWN0IHY0 bDJfc3ViZGV2X21idXNfY29kZV9lbnVtIG1idXNfY29kZSA9IHsNCisJCS53aGljaCA9IFY0TDJf U1VCREVWX0ZPUk1BVF9BQ1RJVkUsDQorCX07DQorDQorCW51bV9mbXRzID0gMDsNCisJd2hpbGUg KCF2NGwyX3N1YmRldl9jYWxsKHN1YmRldiwgcGFkLCBlbnVtX21idXNfY29kZSwNCisJICAgICAg IE5VTEwsICZtYnVzX2NvZGUpKSB7DQorCQltYnVzX2NvZGUuaW5kZXgrKzsNCisNCisJCWZtdCA9 IGZpbmRfZm9ybWF0X2J5X2NvZGUobWJ1c19jb2RlLmNvZGUsICZpKTsNCisJCWlmICghZm10KSB7 DQorCQkJdjRsMl93YXJuKCZpc2MtPnY0bDJfZGV2LCAiTWJ1cyBjb2RlICV4IG5vdCBzdXBwb3J0 ZWRcbiIsDQorCQkJCSAgbWJ1c19jb2RlLmNvZGUpOw0KKwkJCWNvbnRpbnVlOw0KKwkJfQ0KKw0K KwkJZm10LT5zZF9zdXBwb3J0ID0gdHJ1ZTsNCisJCW51bV9mbXRzKys7DQorCX0NCisNCisJaWYg KCFudW1fZm10cykNCisJCXJldHVybiAtRU5YSU87DQorDQorCWlzYy0+bnVtX3VzZXJfZm9ybWF0 cyA9IG51bV9mbXRzOw0KKwlpc2MtPnVzZXJfZm9ybWF0cyA9IGRldm1fa2NhbGxvYyhpc2MtPmRl diwNCisJCQkJCSBudW1fZm10cywgc2l6ZW9mKCppc2MtPnVzZXJfZm9ybWF0cyksDQorCQkJCQkg R0ZQX0tFUk5FTCk7DQorCWlmICghaXNjLT51c2VyX2Zvcm1hdHMpDQorCQlyZXR1cm4gLUVOT01F TTsNCisNCisJZm10ID0gJmZvcm1hdHNfbGlzdFswXTsNCisJZm9yIChpID0gMCwgaiA9IDA7IGkg PCBsaXN0X3NpemU7IGkrKykgew0KKwkJaWYgKGZtdC0+c2Rfc3VwcG9ydCkNCisJCQlpc2MtPnVz ZXJfZm9ybWF0c1tqKytdID0gZm10Ow0KKwkJZm10Kys7DQorCX0NCisNCisJcmV0dXJuIDA7DQor fQ0KKw0KK3N0YXRpYyBpbnQgaXNjX3NldF9kZWZhdWx0X2ZtdChzdHJ1Y3QgaXNjX2RldmljZSAq aXNjKQ0KK3sNCisJc3RydWN0IHY0bDJfZm9ybWF0IGYgPSB7DQorCQkudHlwZSA9IFY0TDJfQlVG X1RZUEVfVklERU9fQ0FQVFVSRSwNCisJCS5mbXQucGl4ID0gew0KKwkJCS53aWR0aAkJPSBWR0Ff V0lEVEgsDQorCQkJLmhlaWdodAkJPSBWR0FfSEVJR0hULA0KKwkJCS5maWVsZAkJPSBWNEwyX0ZJ RUxEX05PTkUsDQorCQkJLnBpeGVsZm9ybWF0CT0gaXNjLT51c2VyX2Zvcm1hdHNbMF0tPmZvdXJj YywNCisJCX0sDQorCX07DQorCWludCByZXQ7DQorDQorCXJldCA9IGlzY190cnlfZm10KGlzYywg JmYsIE5VTEwpOw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJaXNjLT5mbXQgPSBm Ow0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBpc2NfYXN5bmNfY29tcGxldGUoc3Ry dWN0IHY0bDJfYXN5bmNfbm90aWZpZXIgKm5vdGlmaWVyKQ0KK3sNCisJc3RydWN0IGlzY19kZXZp Y2UgKmlzYyA9IGNvbnRhaW5lcl9vZihub3RpZmllci0+djRsMl9kZXYsDQorCQkJCQkgICAgICBz dHJ1Y3QgaXNjX2RldmljZSwgdjRsMl9kZXYpOw0KKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2 ID0gJmlzYy0+dmlkZW9fZGV2Ow0KKwlzdHJ1Y3QgdmIyX3F1ZXVlICpxID0gJmlzYy0+dmIyX3Zp ZHE7DQorCWludCByZXQ7DQorDQorCUlOSVRfV09SSygmaXNjLT5hd2Jfd29yaywgaXNjX2F3Yl93 b3JrKTsNCisNCisJcmV0ID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXJfc3ViZGV2X25vZGVzKCZpc2Mt PnY0bDJfZGV2KTsNCisJaWYgKHJldCA8IDApIHsNCisJCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2 LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHN1YmRldiBub2Rlc1xuIik7DQorCQlyZXR1cm4gcmV0Ow0K Kwl9DQorDQorCWlzYy0+Y3VycmVudF9zdWJkZXYgPSBjb250YWluZXJfb2Yobm90aWZpZXIsDQor CQkJCQkgICBzdHJ1Y3QgaXNjX3N1YmRldl9lbnRpdHksIG5vdGlmaWVyKTsNCisJbXV0ZXhfaW5p dCgmaXNjLT5sb2NrKTsNCisJaW5pdF9jb21wbGV0aW9uKCZpc2MtPmNvbXApOw0KKw0KKwkvKiBJ bml0aWFsaXplIHZpZGVvYnVmMiBxdWV1ZSAqLw0KKwlxLT50eXBlCQkJPSBWNEwyX0JVRl9UWVBF X1ZJREVPX0NBUFRVUkU7DQorCXEtPmlvX21vZGVzCQk9IFZCMl9NTUFQIHwgVkIyX0RNQUJVRiB8 IFZCMl9SRUFEOw0KKwlxLT5kcnZfcHJpdgkJPSBpc2M7DQorCXEtPmJ1Zl9zdHJ1Y3Rfc2l6ZQk9 IHNpemVvZihzdHJ1Y3QgaXNjX2J1ZmZlcik7DQorCXEtPm9wcwkJCT0gJmlzY192YjJfb3BzOw0K KwlxLT5tZW1fb3BzCQk9ICZ2YjJfZG1hX2NvbnRpZ19tZW1vcHM7DQorCXEtPnRpbWVzdGFtcF9m bGFncwk9IFY0TDJfQlVGX0ZMQUdfVElNRVNUQU1QX01PTk9UT05JQzsNCisJcS0+bG9jawkJCT0g JmlzYy0+bG9jazsNCisJcS0+bWluX2J1ZmZlcnNfbmVlZGVkCT0gMTsNCisJcS0+ZGV2CQkJPSBp c2MtPmRldjsNCisNCisJcmV0ID0gdmIyX3F1ZXVlX2luaXQocSk7DQorCWlmIChyZXQgPCAwKSB7 DQorCQl2NGwyX2VycigmaXNjLT52NGwyX2RldiwNCisJCQkgInZiMl9xdWV1ZV9pbml0KCkgZmFp bGVkOiAlZFxuIiwgcmV0KTsNCisJCXJldHVybiByZXQ7DQorCX0NCisNCisJLyogSW5pdCB2aWRl byBkbWEgcXVldWVzICovDQorCUlOSVRfTElTVF9IRUFEKCZpc2MtPmRtYV9xdWV1ZSk7DQorCXNw aW5fbG9ja19pbml0KCZpc2MtPmRtYV9xdWV1ZV9sb2NrKTsNCisJc3Bpbl9sb2NrX2luaXQoJmlz Yy0+YXdiX2xvY2spOw0KKw0KKwlyZXQgPSBpc2NfZm9ybWF0c19pbml0KGlzYyk7DQorCWlmIChy ZXQgPCAwKSB7DQorCQl2NGwyX2VycigmaXNjLT52NGwyX2RldiwNCisJCQkgIkluaXQgZm9ybWF0 IGZhaWxlZDogJWRcbiIsIHJldCk7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCXJldCA9IGlz Y19zZXRfZGVmYXVsdF9mbXQoaXNjKTsNCisJaWYgKHJldCkgew0KKwkJdjRsMl9lcnIoJmlzYy0+ djRsMl9kZXYsICJDb3VsZCBub3Qgc2V0IGRlZmF1bHQgZm9ybWF0XG4iKTsNCisJCXJldHVybiBy ZXQ7DQorCX0NCisNCisJcmV0ID0gaXNjX2N0cmxfaW5pdChpc2MpOw0KKwlpZiAocmV0KSB7DQor CQl2NGwyX2VycigmaXNjLT52NGwyX2RldiwgIkluaXQgaXNjIGN0cm9scyBmYWlsZWQ6ICVkXG4i LCByZXQpOw0KKwkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwkvKiBSZWdpc3RlciB2aWRlbyBkZXZp Y2UgKi8NCisJc3Ryc2NweSh2ZGV2LT5uYW1lLCBBVE1FTF9JU0NfTkFNRSwgc2l6ZW9mKHZkZXYt Pm5hbWUpKTsNCisJdmRldi0+cmVsZWFzZQkJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eTsN CisJdmRldi0+Zm9wcwkJPSAmaXNjX2ZvcHM7DQorCXZkZXYtPmlvY3RsX29wcwkJPSAmaXNjX2lv Y3RsX29wczsNCisJdmRldi0+djRsMl9kZXYJCT0gJmlzYy0+djRsMl9kZXY7DQorCXZkZXYtPnZm bF9kaXIJCT0gVkZMX0RJUl9SWDsNCisJdmRldi0+cXVldWUJCT0gcTsNCisJdmRldi0+bG9jawkJ PSAmaXNjLT5sb2NrOw0KKwl2ZGV2LT5jdHJsX2hhbmRsZXIJPSAmaXNjLT5jdHJscy5oYW5kbGVy Ow0KKwl2ZGV2LT5kZXZpY2VfY2Fwcwk9IFY0TDJfQ0FQX1NUUkVBTUlORyB8IFY0TDJfQ0FQX1ZJ REVPX0NBUFRVUkU7DQorCXZpZGVvX3NldF9kcnZkYXRhKHZkZXYsIGlzYyk7DQorDQorCXJldCA9 IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh2ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCAtMSk7DQorCWlm IChyZXQgPCAwKSB7DQorCQl2NGwyX2VycigmaXNjLT52NGwyX2RldiwNCisJCQkgInZpZGVvX3Jl Z2lzdGVyX2RldmljZSBmYWlsZWQ6ICVkXG4iLCByZXQpOw0KKwkJcmV0dXJuIHJldDsNCisJfQ0K Kw0KKwlyZXR1cm4gMDsNCit9DQorDQorY29uc3Qgc3RydWN0IHY0bDJfYXN5bmNfbm90aWZpZXJf b3BlcmF0aW9ucyBpc2NfYXN5bmNfb3BzID0gew0KKwkuYm91bmQgPSBpc2NfYXN5bmNfYm91bmQs DQorCS51bmJpbmQgPSBpc2NfYXN5bmNfdW5iaW5kLA0KKwkuY29tcGxldGUgPSBpc2NfYXN5bmNf Y29tcGxldGUsDQorfTsNCisNCit2b2lkIGlzY19zdWJkZXZfY2xlYW51cChzdHJ1Y3QgaXNjX2Rl dmljZSAqaXNjKQ0KK3sNCisJc3RydWN0IGlzY19zdWJkZXZfZW50aXR5ICpzdWJkZXZfZW50aXR5 Ow0KKw0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN1YmRldl9lbnRpdHksICZpc2MtPnN1YmRldl9l bnRpdGllcywgbGlzdCkgew0KKwkJdjRsMl9hc3luY19ub3RpZmllcl91bnJlZ2lzdGVyKCZzdWJk ZXZfZW50aXR5LT5ub3RpZmllcik7DQorCQl2NGwyX2FzeW5jX25vdGlmaWVyX2NsZWFudXAoJnN1 YmRldl9lbnRpdHktPm5vdGlmaWVyKTsNCisJfQ0KKw0KKwlJTklUX0xJU1RfSEVBRCgmaXNjLT5z dWJkZXZfZW50aXRpZXMpOw0KK30NCisNCitpbnQgaXNjX3BpcGVsaW5lX2luaXQoc3RydWN0IGlz Y19kZXZpY2UgKmlzYykNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9IGlzYy0+ZGV2Ow0KKwlz dHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBpc2MtPnJlZ21hcDsNCisJc3RydWN0IHJlZ21hcF9maWVs ZCAqcmVnczsNCisJdW5zaWduZWQgaW50IGk7DQorDQorCS8qIFdCLS0+Q0ZBLS0+Q0MtLT5HQU0t LT5DU0MtLT5DQkMtLT5TVUI0MjItLT5TVUI0MjAgKi8NCisJY29uc3Qgc3RydWN0IHJlZ19maWVs ZCByZWdmaWVsZHNbSVNDX1BJUEVfTElORV9OT0RFX05VTV0gPSB7DQorCQlSRUdfRklFTEQoSVND X1dCX0NUUkwsIDAsIDApLA0KKwkJUkVHX0ZJRUxEKElTQ19DRkFfQ1RSTCwgMCwgMCksDQorCQlS RUdfRklFTEQoSVNDX0NDX0NUUkwsIDAsIDApLA0KKwkJUkVHX0ZJRUxEKElTQ19HQU1fQ1RSTCwg MCwgMCksDQorCQlSRUdfRklFTEQoSVNDX0dBTV9DVFJMLCAxLCAxKSwNCisJCVJFR19GSUVMRChJ U0NfR0FNX0NUUkwsIDIsIDIpLA0KKwkJUkVHX0ZJRUxEKElTQ19HQU1fQ1RSTCwgMywgMyksDQor CQlSRUdfRklFTEQoSVNDX0NTQ19DVFJMLCAwLCAwKSwNCisJCVJFR19GSUVMRChJU0NfQ0JDX0NU UkwsIDAsIDApLA0KKwkJUkVHX0ZJRUxEKElTQ19TVUI0MjJfQ1RSTCwgMCwgMCksDQorCQlSRUdf RklFTEQoSVNDX1NVQjQyMF9DVFJMLCAwLCAwKSwNCisJfTsNCisNCisJZm9yIChpID0gMDsgaSA8 IElTQ19QSVBFX0xJTkVfTk9ERV9OVU07IGkrKykgew0KKwkJcmVncyA9IGRldm1fcmVnbWFwX2Zp ZWxkX2FsbG9jKGRldiwgcmVnbWFwLCByZWdmaWVsZHNbaV0pOw0KKwkJaWYgKElTX0VSUihyZWdz KSkNCisJCQlyZXR1cm4gUFRSX0VSUihyZWdzKTsNCisNCisJCWlzYy0+cGlwZWxpbmVbaV0gPSAg cmVnczsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorLyogcmVnbWFwIGNvbmZpZ3VyYXRp b24gKi8NCisjZGVmaW5lIEFUTUVMX0lTQ19SRUdfTUFYICAgIDB4YmZjDQorY29uc3Qgc3RydWN0 IHJlZ21hcF9jb25maWcgaXNjX3JlZ21hcF9jb25maWcgPSB7DQorCS5yZWdfYml0cyAgICAgICA9 IDMyLA0KKwkucmVnX3N0cmlkZSAgICAgPSA0LA0KKwkudmFsX2JpdHMgICAgICAgPSAzMiwNCisJ Lm1heF9yZWdpc3Rlcgk9IEFUTUVMX0lTQ19SRUdfTUFYLA0KK307DQorDQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1pc2MuYyBiL2RyaXZlcnMvbWVkaWEv cGxhdGZvcm0vYXRtZWwvYXRtZWwtaXNjLmMNCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KaW5k ZXggZGEzYjQ0MS4uMDAwMDAwMA0KLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9h dG1lbC1pc2MuYw0KKysrIC9kZXYvbnVsbA0KQEAgLTEsMjYzNCArMCwwIEBADQotLyoNCi0gKiBB dG1lbCBJbWFnZSBTZW5zb3IgQ29udHJvbGxlciAoSVNDKSBkcml2ZXINCi0gKg0KLSAqIENvcHly aWdodCAoQykgMjAxNiBBdG1lbA0KLSAqDQotICogQXV0aG9yOiBTb25nanVuIFd1IDxzb25nanVu Lnd1QG1pY3JvY2hpcC5jb20+DQotICoNCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IG1heSByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KLSAqIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 DQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNl bnNlLg0KLSAqDQotICogU2Vuc29yLS0+UEZFLS0+V0ItLT5DRkEtLT5DQy0tPkdBTS0tPkNTQy0t PkNCQy0tPlNVQi0tPlJMUC0tPkRNQQ0KLSAqDQotICogSVNDIHZpZGVvIHBpcGVsaW5lIGludGVn cmF0ZXMgdGhlIGZvbGxvd2luZyBzdWJtb2R1bGVzOg0KLSAqIFBGRTogUGFyYWxsZWwgRnJvbnQg RW5kIHRvIHNhbXBsZSB0aGUgY2FtZXJhIHNlbnNvciBpbnB1dCBzdHJlYW0NCi0gKiAgV0I6IFBy b2dyYW1tYWJsZSB3aGl0ZSBiYWxhbmNlIGluIHRoZSBCYXllciBkb21haW4NCi0gKiBDRkE6IENv bG9yIGZpbHRlciBhcnJheSBpbnRlcnBvbGF0aW9uIG1vZHVsZQ0KLSAqICBDQzogUHJvZ3JhbW1h YmxlIGNvbG9yIGNvcnJlY3Rpb24NCi0gKiBHQU06IEdhbW1hIGNvcnJlY3Rpb24NCi0gKiBDU0M6 IFByb2dyYW1tYWJsZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uDQotICogQ0JDOiBDb250cmFzdCBh bmQgQnJpZ2h0bmVzcyBjb250cm9sDQotICogU1VCOiBUaGlzIG1vZHVsZSBwZXJmb3JtcyBZQ2JD cjQ0NCB0byBZQ2JDcjQyMCBjaHJvbWluYW5jZSBzdWJzYW1wbGluZw0KLSAqIFJMUDogVGhpcyBt b2R1bGUgcGVyZm9ybXMgcm91bmRpbmcsIHJhbmdlIGxpbWl0aW5nDQotICogICAgICBhbmQgcGFj a2luZyBvZiB0aGUgaW5jb21pbmcgZGF0YQ0KLSAqLw0KLQ0KLSNpbmNsdWRlIDxsaW51eC9jbGsu aD4NCi0jaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+DQotI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92 aWRlci5oPg0KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KLSNpbmNsdWRlIDxsaW51eC9pbnRl cnJ1cHQuaD4NCi0jaW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+DQotI2luY2x1ZGUgPGxpbnV4L21v ZHVsZS5oPg0KLSNpbmNsdWRlIDxsaW51eC9vZi5oPg0KLSNpbmNsdWRlIDxsaW51eC9vZl9ncmFw aC5oPg0KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCi0jaW5jbHVkZSA8bGlu dXgvcG1fcnVudGltZS5oPg0KLSNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4NCi0jaW5jbHVkZSA8 bGludXgvdmlkZW9kZXYyLmg+DQotDQotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY3RybHMuaD4NCi0j aW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4NCi0jaW5jbHVkZSA8bWVkaWEvdjRsMi1ldmVu dC5oPg0KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWltYWdlLXNpemVzLmg+DQotI2luY2x1ZGUgPG1l ZGlhL3Y0bDItaW9jdGwuaD4NCi0jaW5jbHVkZSA8bWVkaWEvdjRsMi1md25vZGUuaD4NCi0jaW5j bHVkZSA8bWVkaWEvdjRsMi1zdWJkZXYuaD4NCi0jaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYyLWRt YS1jb250aWcuaD4NCi0NCi0jaW5jbHVkZSAiYXRtZWwtaXNjLXJlZ3MuaCINCi0NCi0jZGVmaW5l IEFUTUVMX0lTQ19OQU1FCQkiYXRtZWxfaXNjIg0KLQ0KLSNkZWZpbmUgSVNDX01BWF9TVVBQT1JU X1dJRFRIICAgMjU5Mg0KLSNkZWZpbmUgSVNDX01BWF9TVVBQT1JUX0hFSUdIVCAgMTk0NA0KLQ0K LSNkZWZpbmUgSVNDX0NMS19NQVhfRElWCQkyNTUNCi0NCi1lbnVtIGlzY19jbGtfaWQgew0KLQlJ U0NfSVNQQ0sgPSAwLA0KLQlJU0NfTUNLID0gMSwNCi19Ow0KLQ0KLXN0cnVjdCBpc2NfY2xrIHsN Ci0Jc3RydWN0IGNsa19odyAgIGh3Ow0KLQlzdHJ1Y3QgY2xrICAgICAgKmNsazsNCi0Jc3RydWN0 IHJlZ21hcCAgICpyZWdtYXA7DQotCXNwaW5sb2NrX3QJbG9jazsNCi0JdTgJCWlkOw0KLQl1OAkJ cGFyZW50X2lkOw0KLQl1MzIJCWRpdjsNCi0Jc3RydWN0IGRldmljZQkqZGV2Ow0KLX07DQotDQot I2RlZmluZSB0b19pc2NfY2xrKGh3KSBjb250YWluZXJfb2YoaHcsIHN0cnVjdCBpc2NfY2xrLCBo dykNCi0NCi1zdHJ1Y3QgaXNjX2J1ZmZlciB7DQotCXN0cnVjdCB2YjJfdjRsMl9idWZmZXIgIHZi Ow0KLQlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7DQotfTsNCi0NCi1zdHJ1Y3QgaXNjX3N1YmRldl9l bnRpdHkgew0KLQlzdHJ1Y3QgdjRsMl9zdWJkZXYJCSpzZDsNCi0Jc3RydWN0IHY0bDJfYXN5bmNf c3ViZGV2CSphc2Q7DQotCXN0cnVjdCB2NGwyX2FzeW5jX25vdGlmaWVyICAgICAgbm90aWZpZXI7 DQotDQotCXUzMiBwZmVfY2ZnMDsNCi0NCi0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0Ow0KLX07DQot DQotLyoNCi0gKiBzdHJ1Y3QgaXNjX2Zvcm1hdCAtIElTQyBtZWRpYSBidXMgZm9ybWF0IGluZm9y bWF0aW9uDQotCQkJVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyB0aGUgaW50ZXJmYWNlIGJldHdl ZW4gdGhlIElTQw0KLQkJCWFuZCB0aGUgc2Vuc29yLiBJdCdzIHRoZSBpbnB1dCBmb3JtYXQgcmVj ZWl2ZWQgYnkNCi0JCQl0aGUgSVNDLg0KLSAqIEBmb3VyY2M6CQlGb3VyY2MgY29kZSBmb3IgdGhp cyBmb3JtYXQNCi0gKiBAbWJ1c19jb2RlOgkJVjRMMiBtZWRpYSBidXMgZm9ybWF0IGNvZGUuDQot ICogQGNmYV9iYXljZmc6CQlJZiB0aGlzIGZvcm1hdCBpcyBSQVcgQkFZRVIsIGluZGljYXRlIHRo ZSB0eXBlIG9mIGJheWVyLg0KLQkJCXRoaXMgaXMgZWl0aGVyIEJHQkcsIFJHUkcsIGV0Yy4NCi0g KiBAcGZlX2NmZzBfYnBzOglOdW1iZXIgb2YgaGFyZHdhcmUgZGF0YSBsaW5lcyBjb25uZWN0ZWQg dG8gdGhlIElTQw0KLSAqLw0KLQ0KLXN0cnVjdCBpc2NfZm9ybWF0IHsNCi0JdTMyCWZvdXJjYzsN Ci0JdTMyCW1idXNfY29kZTsNCi0JdTMyCWNmYV9iYXljZmc7DQotDQotCWJvb2wJc2Rfc3VwcG9y dDsNCi0JdTMyCXBmZV9jZmcwX2JwczsNCi19Ow0KLQ0KLS8qIFBpcGVsaW5lIGJpdG1hcCAqLw0K LSNkZWZpbmUgV0JfRU5BQkxFCUJJVCgwKQ0KLSNkZWZpbmUgQ0ZBX0VOQUJMRQlCSVQoMSkNCi0j ZGVmaW5lIENDX0VOQUJMRQlCSVQoMikNCi0jZGVmaW5lIEdBTV9FTkFCTEUJQklUKDMpDQotI2Rl ZmluZSBHQU1fQkVOQUJMRQlCSVQoNCkNCi0jZGVmaW5lIEdBTV9HRU5BQkxFCUJJVCg1KQ0KLSNk ZWZpbmUgR0FNX1JFTkFCTEUJQklUKDYpDQotI2RlZmluZSBDU0NfRU5BQkxFCUJJVCg3KQ0KLSNk ZWZpbmUgQ0JDX0VOQUJMRQlCSVQoOCkNCi0jZGVmaW5lIFNVQjQyMl9FTkFCTEUJQklUKDkpDQot I2RlZmluZSBTVUI0MjBfRU5BQkxFCUJJVCgxMCkNCi0NCi0jZGVmaW5lIEdBTV9FTkFCTEVTCShH QU1fUkVOQUJMRSB8IEdBTV9HRU5BQkxFIHwgR0FNX0JFTkFCTEUgfCBHQU1fRU5BQkxFKQ0KLQ0K LS8qDQotICogc3RydWN0IGZtdF9jb25maWcgLSBJU0MgZm9ybWF0IGNvbmZpZ3VyYXRpb24gYW5k IGludGVybmFsIHBpcGVsaW5lDQotCQkJVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyB0aGUgaW50 ZXJuYWwgY29uZmlndXJhdGlvbg0KLQkJCW9mIHRoZSBJU0MuDQotCQkJSXQgYWxzbyBob2xkcyB0 aGUgZm9ybWF0IHRoYXQgSVNDIHdpbGwgcHJlc2VudCB0byB2NGwyLg0KLSAqIEBzZF9mb3JtYXQ6 CQlQb2ludGVyIHRvIGFuIGlzY19mb3JtYXQgc3RydWN0IHRoYXQgaG9sZHMgdGhlIHNlbnNvcg0K LQkJCWNvbmZpZ3VyYXRpb24uDQotICogQGZvdXJjYzoJCUZvdXJjYyBjb2RlIGZvciB0aGlzIGZv cm1hdC4NCi0gKiBAYnBwOgkJQnl0ZXMgcGVyIHBpeGVsIGluIHRoZSBjdXJyZW50IGZvcm1hdC4N Ci0gKiBAcmxwX2NmZ19tb2RlOglDb25maWd1cmF0aW9uIG9mIHRoZSBSTFAgKHJvdW5kaW5nLCBs aW1pdGluZyBwYWNrYWdpbmcpDQotICogQGRjZmdfaW1vZGU6CQlDb25maWd1cmF0aW9uIG9mIHRo ZSBpbnB1dCBvZiB0aGUgRE1BIG1vZHVsZQ0KLSAqIEBkY3RybF9kdmlldzoJQ29uZmlndXJhdGlv biBvZiB0aGUgb3V0cHV0IG9mIHRoZSBETUEgbW9kdWxlDQotICogQGJpdHNfcGlwZWxpbmU6CUNv bmZpZ3VyYXRpb24gb2YgdGhlIHBpcGVsaW5lLCB3aGljaCBtb2R1bGVzIGFyZSBlbmFibGVkDQot ICovDQotc3RydWN0IGZtdF9jb25maWcgew0KLQlzdHJ1Y3QgaXNjX2Zvcm1hdAkqc2RfZm9ybWF0 Ow0KLQ0KLQl1MzIJCQlmb3VyY2M7DQotCXU4CQkJYnBwOw0KLQ0KLQl1MzIJCQlybHBfY2ZnX21v ZGU7DQotCXUzMgkJCWRjZmdfaW1vZGU7DQotCXUzMgkJCWRjdHJsX2R2aWV3Ow0KLQ0KLQl1MzIJ CQliaXRzX3BpcGVsaW5lOw0KLX07DQotDQotI2RlZmluZSBISVNUX0VOVFJJRVMJCTUxMg0KLSNk ZWZpbmUgSElTVF9CQVlFUgkJKElTQ19ISVNfQ0ZHX01PREVfQiArIDEpDQotDQotZW51bXsNCi0J SElTVF9JTklUID0gMCwNCi0JSElTVF9FTkFCTEVELA0KLQlISVNUX0RJU0FCTEVELA0KLX07DQot DQotc3RydWN0IGlzY19jdHJscyB7DQotCXN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciBoYW5kbGVy Ow0KLQ0KLQl1MzIgYnJpZ2h0bmVzczsNCi0JdTMyIGNvbnRyYXN0Ow0KLQl1OCBnYW1tYV9pbmRl eDsNCi0jZGVmaW5lIElTQ19XQl9OT05FCTANCi0jZGVmaW5lIElTQ19XQl9BVVRPCTENCi0jZGVm aW5lIElTQ19XQl9PTkVUSU1FCTINCi0JdTggYXdiOw0KLQ0KLQkvKiBvbmUgZm9yIGVhY2ggY29t cG9uZW50IDogR1IsIFIsIEdCLCBCICovDQotCXUzMiBnYWluW0hJU1RfQkFZRVJdOw0KLQl1MzIg b2Zmc2V0W0hJU1RfQkFZRVJdOw0KLQ0KLQl1MzIgaGlzdF9lbnRyeVtISVNUX0VOVFJJRVNdOw0K LQl1MzIgaGlzdF9jb3VudFtISVNUX0JBWUVSXTsNCi0JdTggaGlzdF9pZDsNCi0JdTggaGlzdF9z dGF0Ow0KLSNkZWZpbmUgSElTVF9NSU5fSU5ERVgJCTANCi0jZGVmaW5lIEhJU1RfTUFYX0lOREVY CQkxDQotCXUzMiBoaXN0X21pbm1heFtISVNUX0JBWUVSXVsyXTsNCi19Ow0KLQ0KLSNkZWZpbmUg SVNDX1BJUEVfTElORV9OT0RFX05VTQkxMQ0KLQ0KLXN0cnVjdCBpc2NfZGV2aWNlIHsNCi0Jc3Ry dWN0IHJlZ21hcAkJKnJlZ21hcDsNCi0Jc3RydWN0IGNsawkJKmhjbG9jazsNCi0Jc3RydWN0IGNs awkJKmlzcGNrOw0KLQlzdHJ1Y3QgaXNjX2NsawkJaXNjX2Nsa3NbMl07DQotDQotCXN0cnVjdCBk ZXZpY2UJCSpkZXY7DQotCXN0cnVjdCB2NGwyX2RldmljZQl2NGwyX2RldjsNCi0Jc3RydWN0IHZp ZGVvX2RldmljZQl2aWRlb19kZXY7DQotDQotCXN0cnVjdCB2YjJfcXVldWUJdmIyX3ZpZHE7DQot CXNwaW5sb2NrX3QJCWRtYV9xdWV1ZV9sb2NrOw0KLQlzdHJ1Y3QgbGlzdF9oZWFkCWRtYV9xdWV1 ZTsNCi0Jc3RydWN0IGlzY19idWZmZXIJKmN1cl9mcm07DQotCXVuc2lnbmVkIGludAkJc2VxdWVu Y2U7DQotCWJvb2wJCQlzdG9wOw0KLQlzdHJ1Y3QgY29tcGxldGlvbgljb21wOw0KLQ0KLQlzdHJ1 Y3QgdjRsMl9mb3JtYXQJZm10Ow0KLQlzdHJ1Y3QgaXNjX2Zvcm1hdAkqKnVzZXJfZm9ybWF0czsN Ci0JdW5zaWduZWQgaW50CQludW1fdXNlcl9mb3JtYXRzOw0KLQ0KLQlzdHJ1Y3QgZm10X2NvbmZp Zwljb25maWc7DQotCXN0cnVjdCBmbXRfY29uZmlnCXRyeV9jb25maWc7DQotDQotCXN0cnVjdCBp c2NfY3RybHMJY3RybHM7DQotCXN0cnVjdCB2NGwyX2N0cmwJKmRvX3diX2N0cmw7DQotCXN0cnVj dCB3b3JrX3N0cnVjdAlhd2Jfd29yazsNCi0NCi0Jc3RydWN0IG11dGV4CQlsb2NrOw0KLQlzcGlu bG9ja190CQlhd2JfbG9jazsNCi0NCi0Jc3RydWN0IHJlZ21hcF9maWVsZAkqcGlwZWxpbmVbSVND X1BJUEVfTElORV9OT0RFX05VTV07DQotDQotCXN0cnVjdCBpc2Nfc3ViZGV2X2VudGl0eQkqY3Vy cmVudF9zdWJkZXY7DQotCXN0cnVjdCBsaXN0X2hlYWQJCXN1YmRldl9lbnRpdGllczsNCi19Ow0K LQ0KLS8qIFRoaXMgaXMgYSBsaXN0IG9mIHRoZSBmb3JtYXRzIHRoYXQgdGhlIElTQyBjYW4gKm91 dHB1dCogKi8NCi1zdGF0aWMgc3RydWN0IGlzY19mb3JtYXQgY29udHJvbGxlcl9mb3JtYXRzW10g PSB7DQotCXsNCi0JCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX0FSR0I0NDQsDQotCX0sDQotCXsN Ci0JCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX0FSR0I1NTUsDQotCX0sDQotCXsNCi0JCS5mb3Vy Y2MJCT0gVjRMMl9QSVhfRk1UX1JHQjU2NSwNCi0JfSwNCi0Jew0KLQkJLmZvdXJjYwkJPSBWNEwy X1BJWF9GTVRfQUJHUjMyLA0KLQl9LA0KLQl7DQotCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9Y QkdSMzIsDQotCX0sDQotCXsNCi0JCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1lVVjQyMCwNCi0J fSwNCi0Jew0KLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfWVVZViwNCi0JfSwNCi0Jew0KLQkJ LmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfWVVWNDIyUCwNCi0JfSwNCi0Jew0KLQkJLmZvdXJjYwkJ PSBWNEwyX1BJWF9GTVRfR1JFWSwNCi0JfSwNCi19Ow0KLQ0KLS8qIFRoaXMgaXMgYSBsaXN0IG9m IGZvcm1hdHMgdGhhdCB0aGUgSVNDIGNhbiByZWNlaXZlIGFzICppbnB1dCogKi8NCi1zdGF0aWMg c3RydWN0IGlzY19mb3JtYXQgZm9ybWF0c19saXN0W10gPSB7DQotCXsNCi0JCS5mb3VyY2MJCT0g VjRMMl9QSVhfRk1UX1NCR0dSOCwNCi0JCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NCR0dS OF8xWDgsDQotCQkucGZlX2NmZzBfYnBzCT0gSVNDX1BGRV9DRkcwX0JQU19FSUdIVCwNCi0JCS5j ZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfQkdCRywNCi0JfSwNCi0Jew0KLQkJLmZvdXJjYwkJPSBW NEwyX1BJWF9GTVRfU0dCUkc4LA0KLQkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfU0dCUkc4 XzFYOCwNCi0JCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZFX0NGRzBfQlBTX0VJR0hULA0KLQkJLmNm YV9iYXljZmcJPSBJU0NfQkFZX0NGR19HQkdCLA0KLQl9LA0KLQl7DQotCQkuZm91cmNjCQk9IFY0 TDJfUElYX0ZNVF9TR1JCRzgsDQotCQkubWJ1c19jb2RlCT0gTUVESUFfQlVTX0ZNVF9TR1JCRzhf MVg4LA0KLQkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkVfQ0ZHMF9CUFNfRUlHSFQsDQotCQkuY2Zh X2JheWNmZwk9IElTQ19CQVlfQ0ZHX0dSR1IsDQotCX0sDQotCXsNCi0JCS5mb3VyY2MJCT0gVjRM Ml9QSVhfRk1UX1NSR0dCOCwNCi0JCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NSR0dCOF8x WDgsDQotCQkucGZlX2NmZzBfYnBzCT0gSVNDX1BGRV9DRkcwX0JQU19FSUdIVCwNCi0JCS5jZmFf YmF5Y2ZnCT0gSVNDX0JBWV9DRkdfUkdSRywNCi0JfSwNCi0Jew0KLQkJLmZvdXJjYwkJPSBWNEwy X1BJWF9GTVRfU0JHR1IxMCwNCi0JCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NCR0dSMTBf MVgxMCwNCi0JCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZHX0NGRzBfQlBTX1RFTiwNCi0JCS5jZmFf YmF5Y2ZnCT0gSVNDX0JBWV9DRkdfUkdSRywNCi0JfSwNCi0Jew0KLQkJLmZvdXJjYwkJPSBWNEwy X1BJWF9GTVRfU0dCUkcxMCwNCi0JCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NHQlJHMTBf MVgxMCwNCi0JCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZHX0NGRzBfQlBTX1RFTiwNCi0JCS5jZmFf YmF5Y2ZnCT0gSVNDX0JBWV9DRkdfR0JHQiwNCi0JfSwNCi0Jew0KLQkJLmZvdXJjYwkJPSBWNEwy X1BJWF9GTVRfU0dSQkcxMCwNCi0JCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NHUkJHMTBf MVgxMCwNCi0JCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZHX0NGRzBfQlBTX1RFTiwNCi0JCS5jZmFf YmF5Y2ZnCT0gSVNDX0JBWV9DRkdfR1JHUiwNCi0JfSwNCi0Jew0KLQkJLmZvdXJjYwkJPSBWNEwy X1BJWF9GTVRfU1JHR0IxMCwNCi0JCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NSR0dCMTBf MVgxMCwNCi0JCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZHX0NGRzBfQlBTX1RFTiwNCi0JCS5jZmFf YmF5Y2ZnCT0gSVNDX0JBWV9DRkdfUkdSRywNCi0JfSwNCi0Jew0KLQkJLmZvdXJjYwkJPSBWNEwy X1BJWF9GTVRfU0JHR1IxMiwNCi0JCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NCR0dSMTJf MVgxMiwNCi0JCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZHX0NGRzBfQlBTX1RXRUxWRSwNCi0JCS5j ZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfQkdCRywNCi0JfSwNCi0Jew0KLQkJLmZvdXJjYwkJPSBW NEwyX1BJWF9GTVRfU0dCUkcxMiwNCi0JCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NHQlJH MTJfMVgxMiwNCi0JCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZHX0NGRzBfQlBTX1RXRUxWRSwNCi0J CS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfR0JHQiwNCi0JfSwNCi0Jew0KLQkJLmZvdXJjYwkJ PSBWNEwyX1BJWF9GTVRfU0dSQkcxMiwNCi0JCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NH UkJHMTJfMVgxMiwNCi0JCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZHX0NGRzBfQlBTX1RXRUxWRSwN Ci0JCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfR1JHUiwNCi0JfSwNCi0Jew0KLQkJLmZvdXJj YwkJPSBWNEwyX1BJWF9GTVRfU1JHR0IxMiwNCi0JCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1U X1NSR0dCMTJfMVgxMiwNCi0JCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZHX0NGRzBfQlBTX1RXRUxW RSwNCi0JCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfUkdSRywNCi0JfSwNCi0Jew0KLQkJLmZv dXJjYwkJPSBWNEwyX1BJWF9GTVRfR1JFWSwNCi0JCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1U X1k4XzFYOCwNCi0JCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZFX0NGRzBfQlBTX0VJR0hULA0KLQl9 LA0KLQl7DQotCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9ZVVlWLA0KLQkJLm1idXNfY29kZQk9 IE1FRElBX0JVU19GTVRfWVVZVjhfMlg4LA0KLQkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkVfQ0ZH MF9CUFNfRUlHSFQsDQotCX0sDQotCXsNCi0JCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1JHQjU2 NSwNCi0JCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1JHQjU2NV8yWDhfTEUsDQotCQkucGZl X2NmZzBfYnBzCT0gSVNDX1BGRV9DRkcwX0JQU19FSUdIVCwNCi0JfSwNCi19Ow0KLQ0KLSNkZWZp bmUgR0FNTUFfTUFYCTINCi0jZGVmaW5lIEdBTU1BX0VOVFJJRVMJNjQNCi0NCi0vKiBHYW1tYSB0 YWJsZSB3aXRoIGdhbW1hIDEvMi4yICovDQotc3RhdGljIGNvbnN0IHUzMiBpc2NfZ2FtbWFfdGFi bGVbR0FNTUFfTUFYICsgMV1bR0FNTUFfRU5UUklFU10gPSB7DQotCS8qIDAgLS0+IGdhbW1hIDEv MS44ICovDQotCXsgICAgICAweDY1LCAgMHg2NjAwMkYsICAweDk1MDAyNSwgIDB4QkIwMDIwLCAg MHhEQjAwMUQsICAweEY4MDAxQSwNCi0JICAweDExMzAwMTgsIDB4MTJCMDAxNywgMHgxNDIwMDE2 LCAweDE1ODAwMTQsIDB4MTZEMDAxMywgMHgxODEwMDEyLA0KLQkgIDB4MTk0MDAxMiwgMHgxQTYw MDEyLCAweDFCODAwMTEsIDB4MUM5MDAxMCwgMHgxREEwMDEwLCAweDFFQTAwMEYsDQotCSAgMHgx RkEwMDBGLCAweDIwOTAwMEYsIDB4MjE4MDAwRiwgMHgyMjcwMDBFLCAweDIzNTAwMEUsIDB4MjQz MDAwRSwNCi0JICAweDI1MTAwMEUsIDB4MjVGMDAwRCwgMHgyNkMwMDBELCAweDI3OTAwMEQsIDB4 Mjg2MDAwRCwgMHgyOTMwMDBDLA0KLQkgIDB4MkEwMDAwQywgMHgyQUMwMDBDLCAweDJCODAwMEMs IDB4MkM0MDAwQywgMHgyRDAwMDBCLCAweDJEQzAwMEIsDQotCSAgMHgyRTcwMDBCLCAweDJGMzAw MEIsIDB4MkZFMDAwQiwgMHgzMDkwMDBCLCAweDMxNDAwMEIsIDB4MzFGMDAwQSwNCi0JICAweDMy QTAwMEEsIDB4MzM0MDAwQiwgMHgzM0YwMDBBLCAweDM0OTAwMEEsIDB4MzU0MDAwQSwgMHgzNUUw MDBBLA0KLQkgIDB4MzY4MDAwQSwgMHgzNzIwMDBBLCAweDM3QzAwMEEsIDB4Mzg2MDAwQSwgMHgz OTAwMDA5LCAweDM5OTAwMEEsDQotCSAgMHgzQTMwMDA5LCAweDNBRDAwMDksIDB4M0I2MDAwOSwg MHgzQkYwMDBBLCAweDNDOTAwMDksIDB4M0QyMDAwOSwNCi0JICAweDNEQjAwMDksIDB4M0U0MDAw OSwgMHgzRUQwMDA5LCAweDNGNjAwMDkgfSwNCi0NCi0JLyogMSAtLT4gZ2FtbWEgMS8yICovDQot CXsgICAgICAweDdGLCAgMHg4MDAwMzQsICAweEI1MDAyOCwgIDB4REUwMDIxLCAweDEwMDAwMUUs IDB4MTFFMDAxQiwNCi0JICAweDEzOTAwMTksIDB4MTUyMDAxNywgMHgxNkEwMDE1LCAweDE4MDAw MTQsIDB4MTk0MDAxNCwgMHgxQTgwMDEzLA0KLQkgIDB4MUJCMDAxMiwgMHgxQ0QwMDExLCAweDFE RjAwMTAsIDB4MUVGMDAxMCwgMHgyMDAwMDBGLCAweDIwRjAwMEYsDQotCSAgMHgyMUYwMDBFLCAw eDIyRDAwMEYsIDB4MjNDMDAwRSwgMHgyNEEwMDBFLCAweDI1ODAwMEQsIDB4MjY1MDAwRCwNCi0J ICAweDI3MzAwMEMsIDB4MjdGMDAwRCwgMHgyOEMwMDBDLCAweDI5OTAwMEMsIDB4MkE1MDAwQywg MHgyQjEwMDBCLA0KLQkgIDB4MkJDMDAwQywgMHgyQzgwMDBCLCAweDJEMzAwMEMsIDB4MkRGMDAw QiwgMHgyRUEwMDBBLCAweDJGNTAwMEEsDQotCSAgMHgyRkYwMDBCLCAweDMwQTAwMEEsIDB4MzE0 MDAwQiwgMHgzMUYwMDBBLCAweDMyOTAwMEEsIDB4MzMzMDAwQSwNCi0JICAweDMzRDAwMDksIDB4 MzQ3MDAwOSwgMHgzNTAwMDBBLCAweDM1QTAwMDksIDB4MzYzMDAwQSwgMHgzNkQwMDA5LA0KLQkg IDB4Mzc2MDAwOSwgMHgzN0YwMDA5LCAweDM4ODAwMDksIDB4MzkxMDAwOSwgMHgzOUEwMDA5LCAw eDNBMzAwMDksDQotCSAgMHgzQUMwMDA4LCAweDNCNDAwMDksIDB4M0JEMDAwOCwgMHgzQzYwMDA4 LCAweDNDRTAwMDgsIDB4M0Q2MDAwOSwNCi0JICAweDNERjAwMDgsIDB4M0U3MDAwOCwgMHgzRUYw MDA4LCAweDNGNzAwMDggfSwNCi0NCi0JLyogMiAtLT4gZ2FtbWEgMS8yLjIgKi8NCi0JeyAgICAg IDB4OTksICAweDlCMDAzOCwgIDB4RDQwMDJBLCAgMHhGRjAwMjMsIDB4MTIyMDAxRiwgMHgxNDEw MDFCLA0KLQkgIDB4MTVEMDAxOSwgMHgxNzYwMDE3LCAweDE4RTAwMTUsIDB4MUEzMDAxNSwgMHgx QjgwMDEzLCAweDFDQzAwMTIsDQotCSAgMHgxREUwMDExLCAweDFGMDAwMTAsIDB4MjAxMDAxMCwg MHgyMTEwMDEwLCAweDIyMTAwMEYsIDB4MjMwMDAwRiwNCi0JICAweDIzRjAwMEUsIDB4MjREMDAw RSwgMHgyNUIwMDBELCAweDI2OTAwMEMsIDB4Mjc2MDAwQywgMHgyODMwMDBDLA0KLQkgIDB4MjhG MDAwQywgMHgyOUIwMDBDLCAweDJBNzAwMEMsIDB4MkIzMDAwQiwgMHgyQkYwMDBCLCAweDJDQTAw MEIsDQotCSAgMHgyRDUwMDBCLCAweDJFMDAwMEEsIDB4MkVCMDAwQSwgMHgyRjUwMDBBLCAweDJG RjAwMEEsIDB4MzBBMDAwQSwNCi0JICAweDMxNDAwMDksIDB4MzFFMDAwOSwgMHgzMjcwMDBBLCAw eDMzMTAwMDksIDB4MzNBMDAwOSwgMHgzNDQwMDA5LA0KLQkgIDB4MzREMDAwOSwgMHgzNTYwMDA5 LCAweDM1RjAwMDksIDB4MzY4MDAwOCwgMHgzNzEwMDA4LCAweDM3OTAwMDksDQotCSAgMHgzODIw MDA4LCAweDM4QTAwMDgsIDB4MzkzMDAwOCwgMHgzOUIwMDA4LCAweDNBMzAwMDgsIDB4M0FCMDAw OCwNCi0JICAweDNCMzAwMDgsIDB4M0JCMDAwOCwgMHgzQzMwMDA4LCAweDNDQjAwMDcsIDB4M0Qy MDAwOCwgMHgzREEwMDA3LA0KLQkgIDB4M0UyMDAwNywgMHgzRTkwMDA3LCAweDNGMDAwMDgsIDB4 M0Y4MDAwNyB9LA0KLX07DQotDQotI2RlZmluZSBJU0NfSVNfRk9STUFUX1JBVyhtYnVzX2NvZGUp IFwNCi0JKCgobWJ1c19jb2RlKSAmIDB4ZjAwMCkgPT0gMHgzMDAwKQ0KLQ0KLXN0YXRpYyB1bnNp Z25lZCBpbnQgZGVidWc7DQotbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOw0KLU1PRFVM RV9QQVJNX0RFU0MoZGVidWcsICJkZWJ1ZyBsZXZlbCAoMC0yKSIpOw0KLQ0KLXN0YXRpYyB1bnNp Z25lZCBpbnQgc2Vuc29yX3ByZWZlcnJlZCA9IDE7DQotbW9kdWxlX3BhcmFtKHNlbnNvcl9wcmVm ZXJyZWQsIHVpbnQsIDA2NDQpOw0KLU1PRFVMRV9QQVJNX0RFU0Moc2Vuc29yX3ByZWZlcnJlZCwN Ci0JCSAiU2Vuc29yIGlzIHByZWZlcnJlZCB0byBvdXRwdXQgdGhlIHNwZWNpZmllZCBmb3JtYXQg KDEtb24gMC1vZmYpLCBkZWZhdWx0IDEiKTsNCi0NCi1zdGF0aWMgaW5saW5lIHZvaWQgaXNjX3Vw ZGF0ZV9hd2JfY3RybHMoc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCi17DQotCXN0cnVjdCBpc2Nf Y3RybHMgKmN0cmxzID0gJmlzYy0+Y3RybHM7DQotDQotCXJlZ21hcF93cml0ZShpc2MtPnJlZ21h cCwgSVNDX1dCX09fUkdSLA0KLQkJICAgICAoSVNDX1dCX09fWkVST19WQUwgLSAoY3RybHMtPm9m ZnNldFtJU0NfSElTX0NGR19NT0RFX1JdKSkgfA0KLQkJICAgICAoKElTQ19XQl9PX1pFUk9fVkFM IC0gY3RybHMtPm9mZnNldFtJU0NfSElTX0NGR19NT0RFX0dSXSkgPDwgMTYpKTsNCi0JcmVnbWFw X3dyaXRlKGlzYy0+cmVnbWFwLCBJU0NfV0JfT19CR0IsDQotCQkgICAgIChJU0NfV0JfT19aRVJP X1ZBTCAtIChjdHJscy0+b2Zmc2V0W0lTQ19ISVNfQ0ZHX01PREVfQl0pKSB8DQotCQkgICAgICgo SVNDX1dCX09fWkVST19WQUwgLSBjdHJscy0+b2Zmc2V0W0lTQ19ISVNfQ0ZHX01PREVfR0JdKSA8 PCAxNikpOw0KLQlyZWdtYXBfd3JpdGUoaXNjLT5yZWdtYXAsIElTQ19XQl9HX1JHUiwNCi0JCSAg ICAgY3RybHMtPmdhaW5bSVNDX0hJU19DRkdfTU9ERV9SXSB8DQotCQkgICAgIChjdHJscy0+Z2Fp bltJU0NfSElTX0NGR19NT0RFX0dSXSA8PCAxNikpOw0KLQlyZWdtYXBfd3JpdGUoaXNjLT5yZWdt YXAsIElTQ19XQl9HX0JHQiwNCi0JCSAgICAgY3RybHMtPmdhaW5bSVNDX0hJU19DRkdfTU9ERV9C XSB8DQotCQkgICAgIChjdHJscy0+Z2FpbltJU0NfSElTX0NGR19NT0RFX0dCXSA8PCAxNikpOw0K LX0NCi0NCi1zdGF0aWMgaW5saW5lIHZvaWQgaXNjX3Jlc2V0X2F3Yl9jdHJscyhzdHJ1Y3QgaXNj X2RldmljZSAqaXNjKQ0KLXsNCi0JaW50IGM7DQotDQotCWZvciAoYyA9IElTQ19ISVNfQ0ZHX01P REVfR1I7IGMgPD0gSVNDX0hJU19DRkdfTU9ERV9COyBjKyspIHsNCi0JCS8qIGdhaW5zIGhhdmUg YSBmaXhlZCBwb2ludCBhdCA5IGRlY2ltYWxzICovDQotCQlpc2MtPmN0cmxzLmdhaW5bY10gPSAx IDw8IDk7DQotCQkvKiBvZmZzZXRzIGFyZSBpbiAyJ3MgY29tcGxlbWVudHMsIHRoZSB2YWx1ZQ0K LQkJICogd2lsbCBiZSBzdWJzdHJhY3RlZCBmcm9tIElTQ19XQl9PX1pFUk9fVkFMIHRvIG9idGFp bg0KLQkJICogMidzIGNvbXBsZW1lbnQgb2YgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kDQotCQkgKiBJ U0NfV0JfT19aRVJPX1ZBTCA+PiAxDQotCQkgKi8NCi0JCWlzYy0+Y3RybHMub2Zmc2V0W2NdID0g SVNDX1dCX09fWkVST19WQUw7DQotCX0NCi19DQotDQotc3RhdGljIGludCBpc2Nfd2FpdF9jbGtf c3RhYmxlKHN0cnVjdCBjbGtfaHcgKmh3KQ0KLXsNCi0Jc3RydWN0IGlzY19jbGsgKmlzY19jbGsg PSB0b19pc2NfY2xrKGh3KTsNCi0Jc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjX2Nsay0+cmVn bWFwOw0KLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgdXNlY3NfdG9famlmZmll cygxMDAwKTsNCi0JdW5zaWduZWQgaW50IHN0YXR1czsNCi0NCi0Jd2hpbGUgKHRpbWVfYmVmb3Jl KGppZmZpZXMsIHRpbWVvdXQpKSB7DQotCQlyZWdtYXBfcmVhZChyZWdtYXAsIElTQ19DTEtTUiwg JnN0YXR1cyk7DQotCQlpZiAoIShzdGF0dXMgJiBJU0NfQ0xLU1JfU0lQKSkNCi0JCQlyZXR1cm4g MDsNCi0NCi0JCXVzbGVlcF9yYW5nZSgxMCwgMjUwKTsNCi0JfQ0KLQ0KLQlyZXR1cm4gLUVUSU1F RE9VVDsNCi19DQotDQotc3RhdGljIGludCBpc2NfY2xrX3ByZXBhcmUoc3RydWN0IGNsa19odyAq aHcpDQotew0KLQlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRvX2lzY19jbGsoaHcpOw0KLQ0K LQlpZiAoaXNjX2Nsay0+aWQgPT0gSVNDX0lTUENLKQ0KLQkJcG1fcnVudGltZV9nZXRfc3luYyhp c2NfY2xrLT5kZXYpOw0KLQ0KLQlyZXR1cm4gaXNjX3dhaXRfY2xrX3N0YWJsZShodyk7DQotfQ0K LQ0KLXN0YXRpYyB2b2lkIGlzY19jbGtfdW5wcmVwYXJlKHN0cnVjdCBjbGtfaHcgKmh3KQ0KLXsN Ci0Jc3RydWN0IGlzY19jbGsgKmlzY19jbGsgPSB0b19pc2NfY2xrKGh3KTsNCi0NCi0JaXNjX3dh aXRfY2xrX3N0YWJsZShodyk7DQotDQotCWlmIChpc2NfY2xrLT5pZCA9PSBJU0NfSVNQQ0spDQot CQlwbV9ydW50aW1lX3B1dF9zeW5jKGlzY19jbGstPmRldik7DQotfQ0KLQ0KLXN0YXRpYyBpbnQg aXNjX2Nsa19lbmFibGUoc3RydWN0IGNsa19odyAqaHcpDQotew0KLQlzdHJ1Y3QgaXNjX2NsayAq aXNjX2NsayA9IHRvX2lzY19jbGsoaHcpOw0KLQl1MzIgaWQgPSBpc2NfY2xrLT5pZDsNCi0Jc3Ry dWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjX2Nsay0+cmVnbWFwOw0KLQl1bnNpZ25lZCBsb25nIGZs YWdzOw0KLQl1bnNpZ25lZCBpbnQgc3RhdHVzOw0KLQ0KLQlkZXZfZGJnKGlzY19jbGstPmRldiwg IklTQyBDTEs6ICVzLCBkaXYgPSAlZCwgcGFyZW50IGlkID0gJWRcbiIsDQotCQlfX2Z1bmNfXywg aXNjX2Nsay0+ZGl2LCBpc2NfY2xrLT5wYXJlbnRfaWQpOw0KLQ0KLQlzcGluX2xvY2tfaXJxc2F2 ZSgmaXNjX2Nsay0+bG9jaywgZmxhZ3MpOw0KLQlyZWdtYXBfdXBkYXRlX2JpdHMocmVnbWFwLCBJ U0NfQ0xLQ0ZHLA0KLQkJCSAgIElTQ19DTEtDRkdfRElWX01BU0soaWQpIHwgSVNDX0NMS0NGR19T RUxfTUFTSyhpZCksDQotCQkJICAgKGlzY19jbGstPmRpdiA8PCBJU0NfQ0xLQ0ZHX0RJVl9TSElG VChpZCkpIHwNCi0JCQkgICAoaXNjX2Nsay0+cGFyZW50X2lkIDw8IElTQ19DTEtDRkdfU0VMX1NI SUZUKGlkKSkpOw0KLQ0KLQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfQ0xLRU4sIElTQ19DTEso aWQpKTsNCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNjX2Nsay0+bG9jaywgZmxhZ3MpOw0K LQ0KLQlyZWdtYXBfcmVhZChyZWdtYXAsIElTQ19DTEtTUiwgJnN0YXR1cyk7DQotCWlmIChzdGF0 dXMgJiBJU0NfQ0xLKGlkKSkNCi0JCXJldHVybiAwOw0KLQllbHNlDQotCQlyZXR1cm4gLUVJTlZB TDsNCi19DQotDQotc3RhdGljIHZvaWQgaXNjX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGtfaHcgKmh3 KQ0KLXsNCi0Jc3RydWN0IGlzY19jbGsgKmlzY19jbGsgPSB0b19pc2NfY2xrKGh3KTsNCi0JdTMy IGlkID0gaXNjX2Nsay0+aWQ7DQotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQotDQotCXNwaW5fbG9j a19pcnFzYXZlKCZpc2NfY2xrLT5sb2NrLCBmbGFncyk7DQotCXJlZ21hcF93cml0ZShpc2NfY2xr LT5yZWdtYXAsIElTQ19DTEtESVMsIElTQ19DTEsoaWQpKTsNCi0Jc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmaXNjX2Nsay0+bG9jaywgZmxhZ3MpOw0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY19jbGtf aXNfZW5hYmxlZChzdHJ1Y3QgY2xrX2h3ICpodykNCi17DQotCXN0cnVjdCBpc2NfY2xrICppc2Nf Y2xrID0gdG9faXNjX2Nsayhodyk7DQotCXUzMiBzdGF0dXM7DQotDQotCWlmIChpc2NfY2xrLT5p ZCA9PSBJU0NfSVNQQ0spDQotCQlwbV9ydW50aW1lX2dldF9zeW5jKGlzY19jbGstPmRldik7DQot DQotCXJlZ21hcF9yZWFkKGlzY19jbGstPnJlZ21hcCwgSVNDX0NMS1NSLCAmc3RhdHVzKTsNCi0N Ci0JaWYgKGlzY19jbGstPmlkID09IElTQ19JU1BDSykNCi0JCXBtX3J1bnRpbWVfcHV0X3N5bmMo aXNjX2Nsay0+ZGV2KTsNCi0NCi0JcmV0dXJuIHN0YXR1cyAmIElTQ19DTEsoaXNjX2Nsay0+aWQp ID8gMSA6IDA7DQotfQ0KLQ0KLXN0YXRpYyB1bnNpZ25lZCBsb25nDQotaXNjX2Nsa19yZWNhbGNf cmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkNCi17DQot CXN0cnVjdCBpc2NfY2xrICppc2NfY2xrID0gdG9faXNjX2Nsayhodyk7DQotDQotCXJldHVybiBE SVZfUk9VTkRfQ0xPU0VTVChwYXJlbnRfcmF0ZSwgaXNjX2Nsay0+ZGl2ICsgMSk7DQotfQ0KLQ0K LXN0YXRpYyBpbnQgaXNjX2Nsa19kZXRlcm1pbmVfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywNCi0J CQkJICAgc3RydWN0IGNsa19yYXRlX3JlcXVlc3QgKnJlcSkNCi17DQotCXN0cnVjdCBpc2NfY2xr ICppc2NfY2xrID0gdG9faXNjX2Nsayhodyk7DQotCWxvbmcgYmVzdF9yYXRlID0gLUVJTlZBTDsN Ci0JaW50IGJlc3RfZGlmZiA9IC0xOw0KLQl1bnNpZ25lZCBpbnQgaSwgZGl2Ow0KLQ0KLQlmb3Ig KGkgPSAwOyBpIDwgY2xrX2h3X2dldF9udW1fcGFyZW50cyhodyk7IGkrKykgew0KLQkJc3RydWN0 IGNsa19odyAqcGFyZW50Ow0KLQkJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsNCi0NCi0JCXBh cmVudCA9IGNsa19od19nZXRfcGFyZW50X2J5X2luZGV4KGh3LCBpKTsNCi0JCWlmICghcGFyZW50 KQ0KLQkJCWNvbnRpbnVlOw0KLQ0KLQkJcGFyZW50X3JhdGUgPSBjbGtfaHdfZ2V0X3JhdGUocGFy ZW50KTsNCi0JCWlmICghcGFyZW50X3JhdGUpDQotCQkJY29udGludWU7DQotDQotCQlmb3IgKGRp diA9IDE7IGRpdiA8IElTQ19DTEtfTUFYX0RJViArIDI7IGRpdisrKSB7DQotCQkJdW5zaWduZWQg bG9uZyByYXRlOw0KLQkJCWludCBkaWZmOw0KLQ0KLQkJCXJhdGUgPSBESVZfUk9VTkRfQ0xPU0VT VChwYXJlbnRfcmF0ZSwgZGl2KTsNCi0JCQlkaWZmID0gYWJzKHJlcS0+cmF0ZSAtIHJhdGUpOw0K LQ0KLQkJCWlmIChiZXN0X2RpZmYgPCAwIHx8IGJlc3RfZGlmZiA+IGRpZmYpIHsNCi0JCQkJYmVz dF9yYXRlID0gcmF0ZTsNCi0JCQkJYmVzdF9kaWZmID0gZGlmZjsNCi0JCQkJcmVxLT5iZXN0X3Bh cmVudF9yYXRlID0gcGFyZW50X3JhdGU7DQotCQkJCXJlcS0+YmVzdF9wYXJlbnRfaHcgPSBwYXJl bnQ7DQotCQkJfQ0KLQ0KLQkJCWlmICghYmVzdF9kaWZmIHx8IHJhdGUgPCByZXEtPnJhdGUpDQot CQkJCWJyZWFrOw0KLQkJfQ0KLQ0KLQkJaWYgKCFiZXN0X2RpZmYpDQotCQkJYnJlYWs7DQotCX0N Ci0NCi0JZGV2X2RiZyhpc2NfY2xrLT5kZXYsDQotCQkiSVNDIENMSzogJXMsIGJlc3RfcmF0ZSA9 ICVsZCwgcGFyZW50IGNsazogJXMgQCAlbGRcbiIsDQotCQlfX2Z1bmNfXywgYmVzdF9yYXRlLA0K LQkJX19jbGtfZ2V0X25hbWUoKHJlcS0+YmVzdF9wYXJlbnRfaHcpLT5jbGspLA0KLQkJcmVxLT5i ZXN0X3BhcmVudF9yYXRlKTsNCi0NCi0JaWYgKGJlc3RfcmF0ZSA8IDApDQotCQlyZXR1cm4gYmVz dF9yYXRlOw0KLQ0KLQlyZXEtPnJhdGUgPSBiZXN0X3JhdGU7DQotDQotCXJldHVybiAwOw0KLX0N Ci0NCi1zdGF0aWMgaW50IGlzY19jbGtfc2V0X3BhcmVudChzdHJ1Y3QgY2xrX2h3ICpodywgdTgg aW5kZXgpDQotew0KLQlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRvX2lzY19jbGsoaHcpOw0K LQ0KLQlpZiAoaW5kZXggPj0gY2xrX2h3X2dldF9udW1fcGFyZW50cyhodykpDQotCQlyZXR1cm4g LUVJTlZBTDsNCi0NCi0JaXNjX2Nsay0+cGFyZW50X2lkID0gaW5kZXg7DQotDQotCXJldHVybiAw Ow0KLX0NCi0NCi1zdGF0aWMgdTggaXNjX2Nsa19nZXRfcGFyZW50KHN0cnVjdCBjbGtfaHcgKmh3 KQ0KLXsNCi0Jc3RydWN0IGlzY19jbGsgKmlzY19jbGsgPSB0b19pc2NfY2xrKGh3KTsNCi0NCi0J cmV0dXJuIGlzY19jbGstPnBhcmVudF9pZDsNCi19DQotDQotc3RhdGljIGludCBpc2NfY2xrX3Nl dF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LA0KLQkJCSAgICAgdW5zaWduZWQgbG9uZyByYXRlLA0K LQkJCSAgICAgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkNCi17DQotCXN0cnVjdCBpc2NfY2xr ICppc2NfY2xrID0gdG9faXNjX2Nsayhodyk7DQotCXUzMiBkaXY7DQotDQotCWlmICghcmF0ZSkN Ci0JCXJldHVybiAtRUlOVkFMOw0KLQ0KLQlkaXYgPSBESVZfUk9VTkRfQ0xPU0VTVChwYXJlbnRf cmF0ZSwgcmF0ZSk7DQotCWlmIChkaXYgPiAoSVNDX0NMS19NQVhfRElWICsgMSkgfHwgIWRpdikN Ci0JCXJldHVybiAtRUlOVkFMOw0KLQ0KLQlpc2NfY2xrLT5kaXYgPSBkaXYgLSAxOw0KLQ0KLQly ZXR1cm4gMDsNCi19DQotDQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3BzIGlzY19jbGtfb3Bz ID0gew0KLQkucHJlcGFyZQk9IGlzY19jbGtfcHJlcGFyZSwNCi0JLnVucHJlcGFyZQk9IGlzY19j bGtfdW5wcmVwYXJlLA0KLQkuZW5hYmxlCQk9IGlzY19jbGtfZW5hYmxlLA0KLQkuZGlzYWJsZQk9 IGlzY19jbGtfZGlzYWJsZSwNCi0JLmlzX2VuYWJsZWQJPSBpc2NfY2xrX2lzX2VuYWJsZWQsDQot CS5yZWNhbGNfcmF0ZQk9IGlzY19jbGtfcmVjYWxjX3JhdGUsDQotCS5kZXRlcm1pbmVfcmF0ZQk9 IGlzY19jbGtfZGV0ZXJtaW5lX3JhdGUsDQotCS5zZXRfcGFyZW50CT0gaXNjX2Nsa19zZXRfcGFy ZW50LA0KLQkuZ2V0X3BhcmVudAk9IGlzY19jbGtfZ2V0X3BhcmVudCwNCi0JLnNldF9yYXRlCT0g aXNjX2Nsa19zZXRfcmF0ZSwNCi19Ow0KLQ0KLXN0YXRpYyBpbnQgaXNjX2Nsa19yZWdpc3Rlcihz dHJ1Y3QgaXNjX2RldmljZSAqaXNjLCB1bnNpZ25lZCBpbnQgaWQpDQotew0KLQlzdHJ1Y3QgcmVn bWFwICpyZWdtYXAgPSBpc2MtPnJlZ21hcDsNCi0Jc3RydWN0IGRldmljZV9ub2RlICpucCA9IGlz Yy0+ZGV2LT5vZl9ub2RlOw0KLQlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsazsNCi0Jc3RydWN0IGNs a19pbml0X2RhdGEgaW5pdDsNCi0JY29uc3QgY2hhciAqY2xrX25hbWUgPSBucC0+bmFtZTsNCi0J Y29uc3QgY2hhciAqcGFyZW50X25hbWVzWzNdOw0KLQlpbnQgbnVtX3BhcmVudHM7DQotDQotCW51 bV9wYXJlbnRzID0gb2ZfY2xrX2dldF9wYXJlbnRfY291bnQobnApOw0KLQlpZiAobnVtX3BhcmVu dHMgPCAxIHx8IG51bV9wYXJlbnRzID4gMykNCi0JCXJldHVybiAtRUlOVkFMOw0KLQ0KLQlpZiAo bnVtX3BhcmVudHMgPiAyICYmIGlkID09IElTQ19JU1BDSykNCi0JCW51bV9wYXJlbnRzID0gMjsN Ci0NCi0Jb2ZfY2xrX3BhcmVudF9maWxsKG5wLCBwYXJlbnRfbmFtZXMsIG51bV9wYXJlbnRzKTsN Ci0NCi0JaWYgKGlkID09IElTQ19NQ0spDQotCQlvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwg ImNsb2NrLW91dHB1dC1uYW1lcyIsICZjbGtfbmFtZSk7DQotCWVsc2UNCi0JCWNsa19uYW1lID0g ImlzYy1pc3BjayI7DQotDQotCWluaXQucGFyZW50X25hbWVzCT0gcGFyZW50X25hbWVzOw0KLQlp bml0Lm51bV9wYXJlbnRzCT0gbnVtX3BhcmVudHM7DQotCWluaXQubmFtZQkJPSBjbGtfbmFtZTsN Ci0JaW5pdC5vcHMJCT0gJmlzY19jbGtfb3BzOw0KLQlpbml0LmZsYWdzCQk9IENMS19TRVRfUkFU RV9HQVRFIHwgQ0xLX1NFVF9QQVJFTlRfR0FURTsNCi0NCi0JaXNjX2NsayA9ICZpc2MtPmlzY19j bGtzW2lkXTsNCi0JaXNjX2Nsay0+aHcuaW5pdAk9ICZpbml0Ow0KLQlpc2NfY2xrLT5yZWdtYXAJ CT0gcmVnbWFwOw0KLQlpc2NfY2xrLT5pZAkJPSBpZDsNCi0JaXNjX2Nsay0+ZGV2CQk9IGlzYy0+ ZGV2Ow0KLQlzcGluX2xvY2tfaW5pdCgmaXNjX2Nsay0+bG9jayk7DQotDQotCWlzY19jbGstPmNs ayA9IGNsa19yZWdpc3Rlcihpc2MtPmRldiwgJmlzY19jbGstPmh3KTsNCi0JaWYgKElTX0VSUihp c2NfY2xrLT5jbGspKSB7DQotCQlkZXZfZXJyKGlzYy0+ZGV2LCAiJXM6IGNsb2NrIHJlZ2lzdGVy IGZhaWxcbiIsIGNsa19uYW1lKTsNCi0JCXJldHVybiBQVFJfRVJSKGlzY19jbGstPmNsayk7DQot CX0gZWxzZSBpZiAoaWQgPT0gSVNDX01DSykNCi0JCW9mX2Nsa19hZGRfcHJvdmlkZXIobnAsIG9m X2Nsa19zcmNfc2ltcGxlX2dldCwgaXNjX2Nsay0+Y2xrKTsNCi0NCi0JcmV0dXJuIDA7DQotfQ0K LQ0KLXN0YXRpYyBpbnQgaXNjX2Nsa19pbml0KHN0cnVjdCBpc2NfZGV2aWNlICppc2MpDQotew0K LQl1bnNpZ25lZCBpbnQgaTsNCi0JaW50IHJldDsNCi0NCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZ X1NJWkUoaXNjLT5pc2NfY2xrcyk7IGkrKykNCi0JCWlzYy0+aXNjX2Nsa3NbaV0uY2xrID0gRVJS X1BUUigtRUlOVkFMKTsNCi0NCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaXNjLT5pc2Nf Y2xrcyk7IGkrKykgew0KLQkJcmV0ID0gaXNjX2Nsa19yZWdpc3Rlcihpc2MsIGkpOw0KLQkJaWYg KHJldCkNCi0JCQlyZXR1cm4gcmV0Ow0KLQl9DQotDQotCXJldHVybiAwOw0KLX0NCi0NCi1zdGF0 aWMgdm9pZCBpc2NfY2xrX2NsZWFudXAoc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCi17DQotCXVu c2lnbmVkIGludCBpOw0KLQ0KLQlvZl9jbGtfZGVsX3Byb3ZpZGVyKGlzYy0+ZGV2LT5vZl9ub2Rl KTsNCi0NCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaXNjLT5pc2NfY2xrcyk7IGkrKykg ew0KLQkJc3RydWN0IGlzY19jbGsgKmlzY19jbGsgPSAmaXNjLT5pc2NfY2xrc1tpXTsNCi0NCi0J CWlmICghSVNfRVJSKGlzY19jbGstPmNsaykpDQotCQkJY2xrX3VucmVnaXN0ZXIoaXNjX2Nsay0+ Y2xrKTsNCi0JfQ0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY19xdWV1ZV9zZXR1cChzdHJ1Y3QgdmIy X3F1ZXVlICp2cSwNCi0JCQkgICAgdW5zaWduZWQgaW50ICpuYnVmZmVycywgdW5zaWduZWQgaW50 ICpucGxhbmVzLA0KLQkJCSAgICB1bnNpZ25lZCBpbnQgc2l6ZXNbXSwgc3RydWN0IGRldmljZSAq YWxsb2NfZGV2c1tdKQ0KLXsNCi0Jc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZiMl9nZXRfZHJ2 X3ByaXYodnEpOw0KLQl1bnNpZ25lZCBpbnQgc2l6ZSA9IGlzYy0+Zm10LmZtdC5waXguc2l6ZWlt YWdlOw0KLQ0KLQlpZiAoKm5wbGFuZXMpDQotCQlyZXR1cm4gc2l6ZXNbMF0gPCBzaXplID8gLUVJ TlZBTCA6IDA7DQotDQotCSpucGxhbmVzID0gMTsNCi0Jc2l6ZXNbMF0gPSBzaXplOw0KLQ0KLQly ZXR1cm4gMDsNCi19DQotDQotc3RhdGljIGludCBpc2NfYnVmZmVyX3ByZXBhcmUoc3RydWN0IHZi Ml9idWZmZXIgKnZiKQ0KLXsNCi0Jc3RydWN0IHZiMl92NGwyX2J1ZmZlciAqdmJ1ZiA9IHRvX3Zi Ml92NGwyX2J1ZmZlcih2Yik7DQotCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2YjJfZ2V0X2Ry dl9wcml2KHZiLT52YjJfcXVldWUpOw0KLQl1bnNpZ25lZCBsb25nIHNpemUgPSBpc2MtPmZtdC5m bXQucGl4LnNpemVpbWFnZTsNCi0NCi0JaWYgKHZiMl9wbGFuZV9zaXplKHZiLCAwKSA8IHNpemUp IHsNCi0JCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LCAiYnVmZmVyIHRvbyBzbWFsbCAoJWx1IDwg JWx1KVxuIiwNCi0JCQkgdmIyX3BsYW5lX3NpemUodmIsIDApLCBzaXplKTsNCi0JCXJldHVybiAt RUlOVkFMOw0KLQl9DQotDQotCXZiMl9zZXRfcGxhbmVfcGF5bG9hZCh2YiwgMCwgc2l6ZSk7DQot DQotCXZidWYtPmZpZWxkID0gaXNjLT5mbXQuZm10LnBpeC5maWVsZDsNCi0NCi0JcmV0dXJuIDA7 DQotfQ0KLQ0KLXN0YXRpYyB2b2lkIGlzY19zdGFydF9kbWEoc3RydWN0IGlzY19kZXZpY2UgKmlz YykNCi17DQotCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0KLQl1MzIgc2l6 ZWltYWdlID0gaXNjLT5mbXQuZm10LnBpeC5zaXplaW1hZ2U7DQotCXUzMiBkY3RybF9kdmlldzsN Ci0JZG1hX2FkZHJfdCBhZGRyMDsNCi0JdTMyIGgsIHc7DQotDQotCWggPSBpc2MtPmZtdC5mbXQu cGl4LmhlaWdodDsNCi0JdyA9IGlzYy0+Zm10LmZtdC5waXgud2lkdGg7DQotDQotCS8qDQotCSAq IEluIGNhc2UgdGhlIHNlbnNvciBpcyBub3QgUkFXLCBpdCB3aWxsIG91dHB1dCBhIHBpeGVsICgx Mi0xNiBiaXRzKQ0KLQkgKiB3aXRoIHR3byBzYW1wbGVzIG9uIHRoZSBJU0MgRGF0YSBidXMgKHdo aWNoIGlzIDgtMTIpDQotCSAqIElTQyB3aWxsIGNvdW50IGVhY2ggc2FtcGxlLCBzbywgd2UgbmVl ZCB0byBtdWx0aXBseSB0aGVzZSB2YWx1ZXMNCi0JICogYnkgdHdvLCB0byBnZXQgdGhlIHJlYWwg bnVtYmVyIG9mIHNhbXBsZXMgZm9yIHRoZSByZXF1aXJlZCBwaXhlbHMuDQotCSAqLw0KLQlpZiAo IUlTQ19JU19GT1JNQVRfUkFXKGlzYy0+Y29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlKSkgew0K LQkJaCA8PD0gMTsNCi0JCXcgPDw9IDE7DQotCX0NCi0NCi0JLyoNCi0JICogV2UgbGltaXQgdGhl IGNvbHVtbi9yb3cgY291bnQgdGhhdCB0aGUgSVNDIHdpbGwgb3V0cHV0IGFjY29yZGluZw0KLQkg KiB0byB0aGUgY29uZmlndXJlZCByZXNvbHV0aW9uIHRoYXQgd2Ugd2FudC4NCi0JICogVGhpcyB3 aWxsIGF2b2lkIHRoZSBzaXR1YXRpb24gd2hlcmUgdGhlIHNlbnNvciBpcyBtaXNjb25maWd1cmVk LA0KLQkgKiBzZW5kaW5nIG1vcmUgZGF0YSwgYW5kIHRoZSBJU0Mgd2lsbCBqdXN0IHRha2UgaXQg YW5kIERNQSB0byBtZW1vcnksDQotCSAqIGNhdXNpbmcgY29ycnVwdGlvbi4NCi0JICovDQotCXJl Z21hcF93cml0ZShyZWdtYXAsIElTQ19QRkVfQ0ZHMSwNCi0JCSAgICAgKElTQ19QRkVfQ0ZHMV9D T0xNSU4oMCkgJiBJU0NfUEZFX0NGRzFfQ09MTUlOX01BU0spIHwNCi0JCSAgICAgKElTQ19QRkVf Q0ZHMV9DT0xNQVgodyAtIDEpICYgSVNDX1BGRV9DRkcxX0NPTE1BWF9NQVNLKSk7DQotDQotCXJl Z21hcF93cml0ZShyZWdtYXAsIElTQ19QRkVfQ0ZHMiwNCi0JCSAgICAgKElTQ19QRkVfQ0ZHMl9S T1dNSU4oMCkgJiBJU0NfUEZFX0NGRzJfUk9XTUlOX01BU0spIHwNCi0JCSAgICAgKElTQ19QRkVf Q0ZHMl9ST1dNQVgoaCAtIDEpICYgSVNDX1BGRV9DRkcyX1JPV01BWF9NQVNLKSk7DQotDQotCXJl Z21hcF91cGRhdGVfYml0cyhyZWdtYXAsIElTQ19QRkVfQ0ZHMCwNCi0JCQkgICBJU0NfUEZFX0NG RzBfQ09MRU4gfCBJU0NfUEZFX0NGRzBfUk9XRU4sDQotCQkJICAgSVNDX1BGRV9DRkcwX0NPTEVO IHwgSVNDX1BGRV9DRkcwX1JPV0VOKTsNCi0NCi0JYWRkcjAgPSB2YjJfZG1hX2NvbnRpZ19wbGFu ZV9kbWFfYWRkcigmaXNjLT5jdXJfZnJtLT52Yi52YjJfYnVmLCAwKTsNCi0JcmVnbWFwX3dyaXRl KHJlZ21hcCwgSVNDX0RBRDAsIGFkZHIwKTsNCi0NCi0Jc3dpdGNoIChpc2MtPmNvbmZpZy5mb3Vy Y2MpIHsNCi0JY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIwOg0KLQkJcmVnbWFwX3dyaXRlKHJlZ21h cCwgSVNDX0RBRDEsIGFkZHIwICsgKHNpemVpbWFnZSAqIDIpIC8gMyk7DQotCQlyZWdtYXBfd3Jp dGUocmVnbWFwLCBJU0NfREFEMiwgYWRkcjAgKyAoc2l6ZWltYWdlICogNSkgLyA2KTsNCi0JCWJy ZWFrOw0KLQljYXNlIFY0TDJfUElYX0ZNVF9ZVVY0MjJQOg0KLQkJcmVnbWFwX3dyaXRlKHJlZ21h cCwgSVNDX0RBRDEsIGFkZHIwICsgc2l6ZWltYWdlIC8gMik7DQotCQlyZWdtYXBfd3JpdGUocmVn bWFwLCBJU0NfREFEMiwgYWRkcjAgKyAoc2l6ZWltYWdlICogMykgLyA0KTsNCi0JCWJyZWFrOw0K LQlkZWZhdWx0Og0KLQkJYnJlYWs7DQotCX0NCi0NCi0JZGN0cmxfZHZpZXcgPSBpc2MtPmNvbmZp Zy5kY3RybF9kdmlldzsNCi0NCi0JcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0RDVFJMLCBkY3Ry bF9kdmlldyB8IElTQ19EQ1RSTF9JRV9JUyk7DQotCXNwaW5fbG9jaygmaXNjLT5hd2JfbG9jayk7 DQotCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DVFJMRU4sIElTQ19DVFJMX0NBUFRVUkUpOw0K LQlzcGluX3VubG9jaygmaXNjLT5hd2JfbG9jayk7DQotfQ0KLQ0KLXN0YXRpYyB2b2lkIGlzY19z ZXRfcGlwZWxpbmUoc3RydWN0IGlzY19kZXZpY2UgKmlzYywgdTMyIHBpcGVsaW5lKQ0KLXsNCi0J c3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjLT5yZWdtYXA7DQotCXN0cnVjdCBpc2NfY3RybHMg KmN0cmxzID0gJmlzYy0+Y3RybHM7DQotCXUzMiB2YWwsIGJheV9jZmc7DQotCWNvbnN0IHUzMiAq Z2FtbWE7DQotCXVuc2lnbmVkIGludCBpOw0KLQ0KLQkvKiBXQi0tPkNGQS0tPkNDLS0+R0FNLS0+ Q1NDLS0+Q0JDLS0+U1VCNDIyLS0+U1VCNDIwICovDQotCWZvciAoaSA9IDA7IGkgPCBJU0NfUElQ RV9MSU5FX05PREVfTlVNOyBpKyspIHsNCi0JCXZhbCA9IHBpcGVsaW5lICYgQklUKGkpID8gMSA6 IDA7DQotCQlyZWdtYXBfZmllbGRfd3JpdGUoaXNjLT5waXBlbGluZVtpXSwgdmFsKTsNCi0JfQ0K LQ0KLQlpZiAoIXBpcGVsaW5lKQ0KLQkJcmV0dXJuOw0KLQ0KLQliYXlfY2ZnID0gaXNjLT5jb25m aWcuc2RfZm9ybWF0LT5jZmFfYmF5Y2ZnOw0KLQ0KLQlpZiAoY3RybHMtPmF3YiA9PSBJU0NfV0Jf Tk9ORSkNCi0JCWlzY19yZXNldF9hd2JfY3RybHMoaXNjKTsNCi0NCi0JcmVnbWFwX3dyaXRlKHJl Z21hcCwgSVNDX1dCX0NGRywgYmF5X2NmZyk7DQotCWlzY191cGRhdGVfYXdiX2N0cmxzKGlzYyk7 DQotDQotCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DRkFfQ0ZHLCBiYXlfY2ZnIHwgSVNDX0NG QV9DRkdfRUlUUE9MKTsNCi0NCi0JZ2FtbWEgPSAmaXNjX2dhbW1hX3RhYmxlW2N0cmxzLT5nYW1t YV9pbmRleF1bMF07DQotCXJlZ21hcF9idWxrX3dyaXRlKHJlZ21hcCwgSVNDX0dBTV9CRU5UUlks IGdhbW1hLCBHQU1NQV9FTlRSSUVTKTsNCi0JcmVnbWFwX2J1bGtfd3JpdGUocmVnbWFwLCBJU0Nf R0FNX0dFTlRSWSwgZ2FtbWEsIEdBTU1BX0VOVFJJRVMpOw0KLQlyZWdtYXBfYnVsa193cml0ZShy ZWdtYXAsIElTQ19HQU1fUkVOVFJZLCBnYW1tYSwgR0FNTUFfRU5UUklFUyk7DQotDQotCS8qIENv bnZlcnQgUkdCIHRvIFlVViAqLw0KLQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfQ1NDX1lSX1lH LCAweDQyIHwgKDB4ODEgPDwgMTYpKTsNCi0JcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0NTQ19Z Ql9PWSwgMHgxOSB8ICgweDEwIDw8IDE2KSk7DQotCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19D U0NfQ0JSX0NCRywgMHhGREEgfCAoMHhGQjYgPDwgMTYpKTsNCi0JcmVnbWFwX3dyaXRlKHJlZ21h cCwgSVNDX0NTQ19DQkJfT0NCLCAweDcwIHwgKDB4ODAgPDwgMTYpKTsNCi0JcmVnbWFwX3dyaXRl KHJlZ21hcCwgSVNDX0NTQ19DUlJfQ1JHLCAweDcwIHwgKDB4RkEyIDw8IDE2KSk7DQotCXJlZ21h cF93cml0ZShyZWdtYXAsIElTQ19DU0NfQ1JCX09DUiwgMHhGRUUgfCAoMHg4MCA8PCAxNikpOw0K LQ0KLQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfQ0JDX0JSSUdIVCwgY3RybHMtPmJyaWdodG5l c3MpOw0KLQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfQ0JDX0NPTlRSQVNULCBjdHJscy0+Y29u dHJhc3QpOw0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY191cGRhdGVfcHJvZmlsZShzdHJ1Y3QgaXNj X2RldmljZSAqaXNjKQ0KLXsNCi0Jc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjLT5yZWdtYXA7 DQotCXUzMiBzcjsNCi0JaW50IGNvdW50ZXIgPSAxMDA7DQotDQotCXJlZ21hcF93cml0ZShyZWdt YXAsIElTQ19DVFJMRU4sIElTQ19DVFJMX1VQUFJPKTsNCi0NCi0JcmVnbWFwX3JlYWQocmVnbWFw LCBJU0NfQ1RSTFNSLCAmc3IpOw0KLQl3aGlsZSAoKHNyICYgSVNDX0NUUkxfVVBQUk8pICYmIGNv dW50ZXItLSkgew0KLQkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOw0KLQkJcmVnbWFwX3JlYWQo cmVnbWFwLCBJU0NfQ1RSTFNSLCAmc3IpOw0KLQl9DQotDQotCWlmIChjb3VudGVyIDwgMCkgew0K LQkJdjRsMl93YXJuKCZpc2MtPnY0bDJfZGV2LCAiVGltZSBvdXQgdG8gdXBkYXRlIHByb2ZpbGVc biIpOw0KLQkJcmV0dXJuIC1FVElNRURPVVQ7DQotCX0NCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0K LXN0YXRpYyB2b2lkIGlzY19zZXRfaGlzdG9ncmFtKHN0cnVjdCBpc2NfZGV2aWNlICppc2MsIGJv b2wgZW5hYmxlKQ0KLXsNCi0Jc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjLT5yZWdtYXA7DQot CXN0cnVjdCBpc2NfY3RybHMgKmN0cmxzID0gJmlzYy0+Y3RybHM7DQotDQotCWlmIChlbmFibGUp IHsNCi0JCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19ISVNfQ0ZHLA0KLQkJCSAgICAgSVNDX0hJ U19DRkdfTU9ERV9HUiB8DQotCQkJICAgICAoaXNjLT5jb25maWcuc2RfZm9ybWF0LT5jZmFfYmF5 Y2ZnDQotCQkJCQk8PCBJU0NfSElTX0NGR19CQVlTRUxfU0hJRlQpIHwNCi0JCQkJCUlTQ19ISVNf Q0ZHX1JBUik7DQotCQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfSElTX0NUUkwsIElTQ19ISVNf Q1RSTF9FTik7DQotCQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfSU5URU4sIElTQ19JTlRfSElT RE9ORSk7DQotCQljdHJscy0+aGlzdF9pZCA9IElTQ19ISVNfQ0ZHX01PREVfR1I7DQotCQlpc2Nf dXBkYXRlX3Byb2ZpbGUoaXNjKTsNCi0JCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DVFJMRU4s IElTQ19DVFJMX0hJU1JFUSk7DQotDQotCQljdHJscy0+aGlzdF9zdGF0ID0gSElTVF9FTkFCTEVE Ow0KLQl9IGVsc2Ugew0KLQkJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0lOVERJUywgSVNDX0lO VF9ISVNET05FKTsNCi0JCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19ISVNfQ1RSTCwgSVNDX0hJ U19DVFJMX0RJUyk7DQotDQotCQljdHJscy0+aGlzdF9zdGF0ID0gSElTVF9ESVNBQkxFRDsNCi0J fQ0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY19jb25maWd1cmUoc3RydWN0IGlzY19kZXZpY2UgKmlz YykNCi17DQotCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0KLQl1MzIgcGZl X2NmZzAsIHJscF9tb2RlLCBkY2ZnLCBtYXNrLCBwaXBlbGluZTsNCi0Jc3RydWN0IGlzY19zdWJk ZXZfZW50aXR5ICpzdWJkZXYgPSBpc2MtPmN1cnJlbnRfc3ViZGV2Ow0KLQ0KLQlwZmVfY2ZnMCA9 IGlzYy0+Y29uZmlnLnNkX2Zvcm1hdC0+cGZlX2NmZzBfYnBzOw0KLQlybHBfbW9kZSA9IGlzYy0+ Y29uZmlnLnJscF9jZmdfbW9kZTsNCi0JcGlwZWxpbmUgPSBpc2MtPmNvbmZpZy5iaXRzX3BpcGVs aW5lOw0KLQ0KLQlkY2ZnID0gaXNjLT5jb25maWcuZGNmZ19pbW9kZSB8DQotCQkgICAgICAgSVND X0RDRkdfWU1CU0laRV9CRUFUUzggfCBJU0NfRENGR19DTUJTSVpFX0JFQVRTODsNCi0NCi0JcGZl X2NmZzAgIHw9IHN1YmRldi0+cGZlX2NmZzAgfCBJU0NfUEZFX0NGRzBfTU9ERV9QUk9HUkVTU0lW RTsNCi0JbWFzayA9IElTQ19QRkVfQ0ZHMF9CUFNfTUFTSyB8IElTQ19QRkVfQ0ZHMF9IUE9MX0xP VyB8DQotCSAgICAgICBJU0NfUEZFX0NGRzBfVlBPTF9MT1cgfCBJU0NfUEZFX0NGRzBfUFBPTF9M T1cgfA0KLQkgICAgICAgSVNDX1BGRV9DRkcwX01PREVfTUFTSyB8IElTQ19QRkVfQ0ZHMF9DQ0lS X0NSQyB8DQotCQkgICBJU0NfUEZFX0NGRzBfQ0NJUjY1NjsNCi0NCi0JcmVnbWFwX3VwZGF0ZV9i aXRzKHJlZ21hcCwgSVNDX1BGRV9DRkcwLCBtYXNrLCBwZmVfY2ZnMCk7DQotDQotCXJlZ21hcF91 cGRhdGVfYml0cyhyZWdtYXAsIElTQ19STFBfQ0ZHLCBJU0NfUkxQX0NGR19NT0RFX01BU0ssDQot CQkJICAgcmxwX21vZGUpOw0KLQ0KLQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfRENGRywgZGNm Zyk7DQotDQotCS8qIFNldCB0aGUgcGlwZWxpbmUgKi8NCi0JaXNjX3NldF9waXBlbGluZShpc2Ms IHBpcGVsaW5lKTsNCi0NCi0JLyoNCi0JICogVGhlIGN1cnJlbnQgaW1wbGVtZW50ZWQgaGlzdG9n cmFtIGlzIGF2YWlsYWJsZSBmb3IgUkFXIFIsIEIsIEdCLCBHUg0KLQkgKiBjaGFubmVscy4gV2Ug bmVlZCB0byBjaGVjayBpZiBzZW5zb3IgaXMgb3V0cHV0dGluZyBSQVcgQkFZRVINCi0JICovDQot CWlmIChpc2MtPmN0cmxzLmF3YiAmJg0KLQkgICAgSVNDX0lTX0ZPUk1BVF9SQVcoaXNjLT5jb25m aWcuc2RfZm9ybWF0LT5tYnVzX2NvZGUpKQ0KLQkJaXNjX3NldF9oaXN0b2dyYW0oaXNjLCB0cnVl KTsNCi0JZWxzZQ0KLQkJaXNjX3NldF9oaXN0b2dyYW0oaXNjLCBmYWxzZSk7DQotDQotCS8qIFVw ZGF0ZSBwcm9maWxlICovDQotCXJldHVybiBpc2NfdXBkYXRlX3Byb2ZpbGUoaXNjKTsNCi19DQot DQotc3RhdGljIGludCBpc2Nfc3RhcnRfc3RyZWFtaW5nKHN0cnVjdCB2YjJfcXVldWUgKnZxLCB1 bnNpZ25lZCBpbnQgY291bnQpDQotew0KLQlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmIyX2dl dF9kcnZfcHJpdih2cSk7DQotCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0K LQlzdHJ1Y3QgaXNjX2J1ZmZlciAqYnVmOw0KLQl1bnNpZ25lZCBsb25nIGZsYWdzOw0KLQlpbnQg cmV0Ow0KLQ0KLQkvKiBFbmFibGUgc3RyZWFtIG9uIHRoZSBzdWIgZGV2aWNlICovDQotCXJldCA9 IHY0bDJfc3ViZGV2X2NhbGwoaXNjLT5jdXJyZW50X3N1YmRldi0+c2QsIHZpZGVvLCBzX3N0cmVh bSwgMSk7DQotCWlmIChyZXQgJiYgcmV0ICE9IC1FTk9JT0NUTENNRCkgew0KLQkJdjRsMl9lcnIo JmlzYy0+djRsMl9kZXYsICJzdHJlYW0gb24gZmFpbGVkIGluIHN1YmRldiAlZFxuIiwNCi0JCQkg cmV0KTsNCi0JCWdvdG8gZXJyX3N0YXJ0X3N0cmVhbTsNCi0JfQ0KLQ0KLQlwbV9ydW50aW1lX2dl dF9zeW5jKGlzYy0+ZGV2KTsNCi0NCi0JcmV0ID0gaXNjX2NvbmZpZ3VyZShpc2MpOw0KLQlpZiAo dW5saWtlbHkocmV0KSkNCi0JCWdvdG8gZXJyX2NvbmZpZ3VyZTsNCi0NCi0JLyogRW5hYmxlIERN QSBpbnRlcnJ1cHQgKi8NCi0JcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0lOVEVOLCBJU0NfSU5U X0RET05FKTsNCi0NCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlzYy0+ZG1hX3F1ZXVlX2xvY2ssIGZs YWdzKTsNCi0NCi0JaXNjLT5zZXF1ZW5jZSA9IDA7DQotCWlzYy0+c3RvcCA9IGZhbHNlOw0KLQly ZWluaXRfY29tcGxldGlvbigmaXNjLT5jb21wKTsNCi0NCi0JaXNjLT5jdXJfZnJtID0gbGlzdF9m aXJzdF9lbnRyeSgmaXNjLT5kbWFfcXVldWUsDQotCQkJCQlzdHJ1Y3QgaXNjX2J1ZmZlciwgbGlz dCk7DQotCWxpc3RfZGVsKCZpc2MtPmN1cl9mcm0tPmxpc3QpOw0KLQ0KLQlpc2Nfc3RhcnRfZG1h KGlzYyk7DQotDQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzYy0+ZG1hX3F1ZXVlX2xvY2ss IGZsYWdzKTsNCi0NCi0JLyogaWYgd2Ugc3RyZWFtaW5nIGZyb20gUkFXLCB3ZSBjYW4gZG8gb25l LXNob3Qgd2hpdGUgYmFsYW5jZSBhZGogKi8NCi0JaWYgKElTQ19JU19GT1JNQVRfUkFXKGlzYy0+ Y29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlKSkNCi0JCXY0bDJfY3RybF9hY3RpdmF0ZShpc2Mt PmRvX3diX2N0cmwsIHRydWUpOw0KLQ0KLQlyZXR1cm4gMDsNCi0NCi1lcnJfY29uZmlndXJlOg0K LQlwbV9ydW50aW1lX3B1dF9zeW5jKGlzYy0+ZGV2KTsNCi0NCi0JdjRsMl9zdWJkZXZfY2FsbChp c2MtPmN1cnJlbnRfc3ViZGV2LT5zZCwgdmlkZW8sIHNfc3RyZWFtLCAwKTsNCi0NCi1lcnJfc3Rh cnRfc3RyZWFtOg0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaXNjLT5kbWFfcXVldWVfbG9jaywgZmxh Z3MpOw0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1ZiwgJmlzYy0+ZG1hX3F1ZXVlLCBsaXN0KQ0K LQkJdmIyX2J1ZmZlcl9kb25lKCZidWYtPnZiLnZiMl9idWYsIFZCMl9CVUZfU1RBVEVfUVVFVUVE KTsNCi0JSU5JVF9MSVNUX0hFQUQoJmlzYy0+ZG1hX3F1ZXVlKTsNCi0Jc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmaXNjLT5kbWFfcXVldWVfbG9jaywgZmxhZ3MpOw0KLQ0KLQlyZXR1cm4gcmV0Ow0K LX0NCi0NCi1zdGF0aWMgdm9pZCBpc2Nfc3RvcF9zdHJlYW1pbmcoc3RydWN0IHZiMl9xdWV1ZSAq dnEpDQotew0KLQlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmIyX2dldF9kcnZfcHJpdih2cSk7 DQotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQotCXN0cnVjdCBpc2NfYnVmZmVyICpidWY7DQotCWlu dCByZXQ7DQotDQotCXY0bDJfY3RybF9hY3RpdmF0ZShpc2MtPmRvX3diX2N0cmwsIGZhbHNlKTsN Ci0NCi0JaXNjLT5zdG9wID0gdHJ1ZTsNCi0NCi0JLyogV2FpdCB1bnRpbCB0aGUgZW5kIG9mIHRo ZSBjdXJyZW50IGZyYW1lICovDQotCWlmIChpc2MtPmN1cl9mcm0gJiYgIXdhaXRfZm9yX2NvbXBs ZXRpb25fdGltZW91dCgmaXNjLT5jb21wLCA1ICogSFopKQ0KLQkJdjRsMl9lcnIoJmlzYy0+djRs Ml9kZXYsDQotCQkJICJUaW1lb3V0IHdhaXRpbmcgZm9yIGVuZCBvZiB0aGUgY2FwdHVyZVxuIik7 DQotDQotCS8qIERpc2FibGUgRE1BIGludGVycnVwdCAqLw0KLQlyZWdtYXBfd3JpdGUoaXNjLT5y ZWdtYXAsIElTQ19JTlRESVMsIElTQ19JTlRfRERPTkUpOw0KLQ0KLQlwbV9ydW50aW1lX3B1dF9z eW5jKGlzYy0+ZGV2KTsNCi0NCi0JLyogRGlzYWJsZSBzdHJlYW0gb24gdGhlIHN1YiBkZXZpY2Ug Ki8NCi0JcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZCwgdmlk ZW8sIHNfc3RyZWFtLCAwKTsNCi0JaWYgKHJldCAmJiByZXQgIT0gLUVOT0lPQ1RMQ01EKQ0KLQkJ djRsMl9lcnIoJmlzYy0+djRsMl9kZXYsICJzdHJlYW0gb2ZmIGZhaWxlZCBpbiBzdWJkZXZcbiIp Ow0KLQ0KLQkvKiBSZWxlYXNlIGFsbCBhY3RpdmUgYnVmZmVycyAqLw0KLQlzcGluX2xvY2tfaXJx c2F2ZSgmaXNjLT5kbWFfcXVldWVfbG9jaywgZmxhZ3MpOw0KLQlpZiAodW5saWtlbHkoaXNjLT5j dXJfZnJtKSkgew0KLQkJdmIyX2J1ZmZlcl9kb25lKCZpc2MtPmN1cl9mcm0tPnZiLnZiMl9idWYs DQotCQkJCVZCMl9CVUZfU1RBVEVfRVJST1IpOw0KLQkJaXNjLT5jdXJfZnJtID0gTlVMTDsNCi0J fQ0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1ZiwgJmlzYy0+ZG1hX3F1ZXVlLCBsaXN0KQ0KLQkJ dmIyX2J1ZmZlcl9kb25lKCZidWYtPnZiLnZiMl9idWYsIFZCMl9CVUZfU1RBVEVfRVJST1IpOw0K LQlJTklUX0xJU1RfSEVBRCgmaXNjLT5kbWFfcXVldWUpOw0KLQlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZpc2MtPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7DQotfQ0KLQ0KLXN0YXRpYyB2b2lkIGlz Y19idWZmZXJfcXVldWUoc3RydWN0IHZiMl9idWZmZXIgKnZiKQ0KLXsNCi0Jc3RydWN0IHZiMl92 NGwyX2J1ZmZlciAqdmJ1ZiA9IHRvX3ZiMl92NGwyX2J1ZmZlcih2Yik7DQotCXN0cnVjdCBpc2Nf YnVmZmVyICpidWYgPSBjb250YWluZXJfb2YodmJ1Ziwgc3RydWN0IGlzY19idWZmZXIsIHZiKTsN Ci0Jc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZiMl9nZXRfZHJ2X3ByaXYodmItPnZiMl9xdWV1 ZSk7DQotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQotDQotCXNwaW5fbG9ja19pcnFzYXZlKCZpc2Mt PmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7DQotCWlmICghaXNjLT5jdXJfZnJtICYmIGxpc3RfZW1w dHkoJmlzYy0+ZG1hX3F1ZXVlKSAmJg0KLQkJdmIyX2lzX3N0cmVhbWluZyh2Yi0+dmIyX3F1ZXVl KSkgew0KLQkJaXNjLT5jdXJfZnJtID0gYnVmOw0KLQkJaXNjX3N0YXJ0X2RtYShpc2MpOw0KLQl9 IGVsc2UNCi0JCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+bGlzdCwgJmlzYy0+ZG1hX3F1ZXVlKTsNCi0J c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNjLT5kbWFfcXVldWVfbG9jaywgZmxhZ3MpOw0KLX0N Ci0NCi1zdGF0aWMgc3RydWN0IGlzY19mb3JtYXQgKmZpbmRfZm9ybWF0X2J5X2ZvdXJjYyhzdHJ1 Y3QgaXNjX2RldmljZSAqaXNjLA0KLQkJCQkJCSB1bnNpZ25lZCBpbnQgZm91cmNjKQ0KLXsNCi0J dW5zaWduZWQgaW50IG51bV9mb3JtYXRzID0gaXNjLT5udW1fdXNlcl9mb3JtYXRzOw0KLQlzdHJ1 Y3QgaXNjX2Zvcm1hdCAqZm10Ow0KLQl1bnNpZ25lZCBpbnQgaTsNCi0NCi0JZm9yIChpID0gMDsg aSA8IG51bV9mb3JtYXRzOyBpKyspIHsNCi0JCWZtdCA9IGlzYy0+dXNlcl9mb3JtYXRzW2ldOw0K LQkJaWYgKGZtdC0+Zm91cmNjID09IGZvdXJjYykNCi0JCQlyZXR1cm4gZm10Ow0KLQl9DQotDQot CXJldHVybiBOVUxMOw0KLX0NCi0NCi1zdGF0aWMgY29uc3Qgc3RydWN0IHZiMl9vcHMgaXNjX3Zi Ml9vcHMgPSB7DQotCS5xdWV1ZV9zZXR1cAkJPSBpc2NfcXVldWVfc2V0dXAsDQotCS53YWl0X3By ZXBhcmUJCT0gdmIyX29wc193YWl0X3ByZXBhcmUsDQotCS53YWl0X2ZpbmlzaAkJPSB2YjJfb3Bz X3dhaXRfZmluaXNoLA0KLQkuYnVmX3ByZXBhcmUJCT0gaXNjX2J1ZmZlcl9wcmVwYXJlLA0KLQku c3RhcnRfc3RyZWFtaW5nCT0gaXNjX3N0YXJ0X3N0cmVhbWluZywNCi0JLnN0b3Bfc3RyZWFtaW5n CQk9IGlzY19zdG9wX3N0cmVhbWluZywNCi0JLmJ1Zl9xdWV1ZQkJPSBpc2NfYnVmZmVyX3F1ZXVl LA0KLX07DQotDQotc3RhdGljIGludCBpc2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZv aWQgKnByaXYsDQotCQkJIHN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCkNCi17DQotCXN0cnVj dCBpc2NfZGV2aWNlICppc2MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KLQ0KLQlzdHJzY3B5KGNh cC0+ZHJpdmVyLCBBVE1FTF9JU0NfTkFNRSwgc2l6ZW9mKGNhcC0+ZHJpdmVyKSk7DQotCXN0cnNj cHkoY2FwLT5jYXJkLCAiQXRtZWwgSW1hZ2UgU2Vuc29yIENvbnRyb2xsZXIiLCBzaXplb2YoY2Fw LT5jYXJkKSk7DQotCXNucHJpbnRmKGNhcC0+YnVzX2luZm8sIHNpemVvZihjYXAtPmJ1c19pbmZv KSwNCi0JCSAicGxhdGZvcm06JXMiLCBpc2MtPnY0bDJfZGV2Lm5hbWUpOw0KLQ0KLQlyZXR1cm4g MDsNCi19DQotDQotc3RhdGljIGludCBpc2NfZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAq ZmlsZSwgdm9pZCAqcHJpdiwNCi0JCQkJIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpDQotew0KLQl1 MzIgaW5kZXggPSBmLT5pbmRleDsNCi0JdTMyIGksIHN1cHBvcnRlZF9pbmRleDsNCi0NCi0JaWYg KGluZGV4IDwgQVJSQVlfU0laRShjb250cm9sbGVyX2Zvcm1hdHMpKSB7DQotCQlmLT5waXhlbGZv cm1hdCA9IGNvbnRyb2xsZXJfZm9ybWF0c1tpbmRleF0uZm91cmNjOw0KLQkJcmV0dXJuIDA7DQot CX0NCi0NCi0JaW5kZXggLT0gQVJSQVlfU0laRShjb250cm9sbGVyX2Zvcm1hdHMpOw0KLQ0KLQlp ID0gMDsNCi0Jc3VwcG9ydGVkX2luZGV4ID0gMDsNCi0NCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZ X1NJWkUoZm9ybWF0c19saXN0KTsgaSsrKSB7DQotCQlpZiAoIUlTQ19JU19GT1JNQVRfUkFXKGZv cm1hdHNfbGlzdFtpXS5tYnVzX2NvZGUpIHx8DQotCQkgICAgIWZvcm1hdHNfbGlzdFtpXS5zZF9z dXBwb3J0KQ0KLQkJCWNvbnRpbnVlOw0KLQkJaWYgKHN1cHBvcnRlZF9pbmRleCA9PSBpbmRleCkg ew0KLQkJCWYtPnBpeGVsZm9ybWF0ID0gZm9ybWF0c19saXN0W2ldLmZvdXJjYzsNCi0JCQlyZXR1 cm4gMDsNCi0JCX0NCi0JCXN1cHBvcnRlZF9pbmRleCsrOw0KLQl9DQotDQotCXJldHVybiAtRUlO VkFMOw0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY19nX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpm aWxlLCB2b2lkICpwcml2LA0KLQkJCSAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQ0KLXsN Ci0Jc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7DQotDQotCSpm bXQgPSBpc2MtPmZtdDsNCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLS8qDQotICogQ2hlY2tzIHRo ZSBjdXJyZW50IGNvbmZpZ3VyZWQgZm9ybWF0LCBpZiBJU0MgY2FuIG91dHB1dCBpdCwNCi0gKiBj b25zaWRlcmluZyB3aGljaCB0eXBlIG9mIGZvcm1hdCB0aGUgSVNDIHJlY2VpdmVzIGZyb20gdGhl IHNlbnNvcg0KLSAqLw0KLXN0YXRpYyBpbnQgaXNjX3RyeV92YWxpZGF0ZV9mb3JtYXRzKHN0cnVj dCBpc2NfZGV2aWNlICppc2MpDQotew0KLQlpbnQgcmV0Ow0KLQlib29sIGJheWVyID0gZmFsc2Us IHl1diA9IGZhbHNlLCByZ2IgPSBmYWxzZSwgZ3JleSA9IGZhbHNlOw0KLQ0KLQkvKiBhbGwgZm9y bWF0cyBzdXBwb3J0ZWQgYnkgdGhlIFJMUCBtb2R1bGUgYXJlIE9LICovDQotCXN3aXRjaCAoaXNj LT50cnlfY29uZmlnLmZvdXJjYykgew0KLQljYXNlIFY0TDJfUElYX0ZNVF9TQkdHUjg6DQotCWNh c2UgVjRMMl9QSVhfRk1UX1NHQlJHODoNCi0JY2FzZSBWNEwyX1BJWF9GTVRfU0dSQkc4Og0KLQlj YXNlIFY0TDJfUElYX0ZNVF9TUkdHQjg6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NCR0dSMTA6DQot CWNhc2UgVjRMMl9QSVhfRk1UX1NHQlJHMTA6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NHUkJHMTA6 DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NSR0dCMTA6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NCR0dS MTI6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NHQlJHMTI6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NH UkJHMTI6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NSR0dCMTI6DQotCQlyZXQgPSAwOw0KLQkJYmF5 ZXIgPSB0cnVlOw0KLQkJYnJlYWs7DQotDQotCWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMDoNCi0J Y2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIyUDoNCi0JY2FzZSBWNEwyX1BJWF9GTVRfWVVZVjoNCi0J CXJldCA9IDA7DQotCQl5dXYgPSB0cnVlOw0KLQkJYnJlYWs7DQotDQotCWNhc2UgVjRMMl9QSVhf Rk1UX1JHQjU2NToNCi0JY2FzZSBWNEwyX1BJWF9GTVRfQUJHUjMyOg0KLQljYXNlIFY0TDJfUElY X0ZNVF9YQkdSMzI6DQotCWNhc2UgVjRMMl9QSVhfRk1UX0FSR0I0NDQ6DQotCWNhc2UgVjRMMl9Q SVhfRk1UX0FSR0I1NTU6DQotCQlyZXQgPSAwOw0KLQkJcmdiID0gdHJ1ZTsNCi0JCWJyZWFrOw0K LQljYXNlIFY0TDJfUElYX0ZNVF9HUkVZOg0KLQkJcmV0ID0gMDsNCi0JCWdyZXkgPSB0cnVlOw0K LQkJYnJlYWs7DQotCWRlZmF1bHQ6DQotCS8qIGFueSBvdGhlciBkaWZmZXJlbnQgZm9ybWF0cyBh cmUgbm90IHN1cHBvcnRlZCAqLw0KLQkJcmV0ID0gLUVJTlZBTDsNCi0JfQ0KLQ0KLQkvKiB3ZSBj YW5ub3Qgb3V0cHV0IFJBVy9HcmV5IGlmIHdlIGRvIG5vdCByZWNlaXZlIFJBVyAqLw0KLQlpZiAo KGJheWVyIHx8IGdyZXkpICYmDQotCSAgICAhSVNDX0lTX0ZPUk1BVF9SQVcoaXNjLT50cnlfY29u ZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlKSkNCi0JCXJldHVybiAtRUlOVkFMOw0KLQ0KLQl2NGwy X2RiZygxLCBkZWJ1ZywgJmlzYy0+djRsMl9kZXYsDQotCQkgIkZvcm1hdCB2YWxpZGF0aW9uLCBy ZXF1ZXN0ZWQgcmdiPSV1LCB5dXY9JXUsIGdyZXk9JXUsIGJheWVyPSV1XG4iLA0KLQkJIHJnYiwg eXV2LCBncmV5LCBiYXllcik7DQotDQotCXJldHVybiByZXQ7DQotfQ0KLQ0KLS8qDQotICogQ29u ZmlndXJlcyB0aGUgUkxQIGFuZCBETUEgbW9kdWxlcywgZGVwZW5kaW5nIG9uIHRoZSBvdXRwdXQg Zm9ybWF0DQotICogY29uZmlndXJlZCBmb3IgdGhlIElTQy4NCi0gKiBJZiBkaXJlY3RfZHVtcCA9 PSB0cnVlLCBqdXN0IGR1bXAgcmF3IGRhdGEgOCBiaXRzLg0KLSAqLw0KLXN0YXRpYyBpbnQgaXNj X3RyeV9jb25maWd1cmVfcmxwX2RtYShzdHJ1Y3QgaXNjX2RldmljZSAqaXNjLCBib29sIGRpcmVj dF9kdW1wKQ0KLXsNCi0JaWYgKGRpcmVjdF9kdW1wKSB7DQotCQlpc2MtPnRyeV9jb25maWcucmxw X2NmZ19tb2RlID0gSVNDX1JMUF9DRkdfTU9ERV9EQVQ4Ow0KLQkJaXNjLT50cnlfY29uZmlnLmRj ZmdfaW1vZGUgPSBJU0NfRENGR19JTU9ERV9QQUNLRUQ4Ow0KLQkJaXNjLT50cnlfY29uZmlnLmRj dHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BBQ0tFRDsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5i cHAgPSAxNjsNCi0JCXJldHVybiAwOw0KLQl9DQotDQotCXN3aXRjaCAoaXNjLT50cnlfY29uZmln LmZvdXJjYykgew0KLQljYXNlIFY0TDJfUElYX0ZNVF9TQkdHUjg6DQotCWNhc2UgVjRMMl9QSVhf Rk1UX1NHQlJHODoNCi0JY2FzZSBWNEwyX1BJWF9GTVRfU0dSQkc4Og0KLQljYXNlIFY0TDJfUElY X0ZNVF9TUkdHQjg6DQotCQlpc2MtPnRyeV9jb25maWcucmxwX2NmZ19tb2RlID0gSVNDX1JMUF9D RkdfTU9ERV9EQVQ4Ow0KLQkJaXNjLT50cnlfY29uZmlnLmRjZmdfaW1vZGUgPSBJU0NfRENGR19J TU9ERV9QQUNLRUQ4Ow0KLQkJaXNjLT50cnlfY29uZmlnLmRjdHJsX2R2aWV3ID0gSVNDX0RDVFJM X0RWSUVXX1BBQ0tFRDsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5icHAgPSA4Ow0KLQkJYnJlYWs7DQot CWNhc2UgVjRMMl9QSVhfRk1UX1NCR0dSMTA6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NHQlJHMTA6 DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NHUkJHMTA6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NSR0dC MTA6DQotCQlpc2MtPnRyeV9jb25maWcucmxwX2NmZ19tb2RlID0gSVNDX1JMUF9DRkdfTU9ERV9E QVQxMDsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdfSU1PREVfUEFD S0VEMTY7DQotCQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJU0NfRENUUkxfRFZJRVdf UEFDS0VEOw0KLQkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDE2Ow0KLQkJYnJlYWs7DQotCWNhc2Ug VjRMMl9QSVhfRk1UX1NCR0dSMTI6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NHQlJHMTI6DQotCWNh c2UgVjRMMl9QSVhfRk1UX1NHUkJHMTI6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NSR0dCMTI6DQot CQlpc2MtPnRyeV9jb25maWcucmxwX2NmZ19tb2RlID0gSVNDX1JMUF9DRkdfTU9ERV9EQVQxMjsN Ci0JCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdfSU1PREVfUEFDS0VEMTY7 DQotCQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJU0NfRENUUkxfRFZJRVdfUEFDS0VE Ow0KLQkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDE2Ow0KLQkJYnJlYWs7DQotCWNhc2UgVjRMMl9Q SVhfRk1UX1JHQjU2NToNCi0JCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQ X0NGR19NT0RFX1JHQjU2NTsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RD RkdfSU1PREVfUEFDS0VEMTY7DQotCQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJU0Nf RENUUkxfRFZJRVdfUEFDS0VEOw0KLQkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDE2Ow0KLQkJYnJl YWs7DQotCWNhc2UgVjRMMl9QSVhfRk1UX0FSR0I0NDQ6DQotCQlpc2MtPnRyeV9jb25maWcucmxw X2NmZ19tb2RlID0gSVNDX1JMUF9DRkdfTU9ERV9BUkdCNDQ0Ow0KLQkJaXNjLT50cnlfY29uZmln LmRjZmdfaW1vZGUgPSBJU0NfRENGR19JTU9ERV9QQUNLRUQxNjsNCi0JCWlzYy0+dHJ5X2NvbmZp Zy5kY3RybF9kdmlldyA9IElTQ19EQ1RSTF9EVklFV19QQUNLRUQ7DQotCQlpc2MtPnRyeV9jb25m aWcuYnBwID0gMTY7DQotCQlicmVhazsNCi0JY2FzZSBWNEwyX1BJWF9GTVRfQVJHQjU1NToNCi0J CWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RFX0FSR0I1NTU7 DQotCQlpc2MtPnRyeV9jb25maWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1BBQ0tFRDE2 Ow0KLQkJaXNjLT50cnlfY29uZmlnLmRjdHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BBQ0tF RDsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5icHAgPSAxNjsNCi0JCWJyZWFrOw0KLQljYXNlIFY0TDJf UElYX0ZNVF9BQkdSMzI6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1hCR1IzMjoNCi0JCWlzYy0+dHJ5 X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RFX0FSR0IzMjsNCi0JCWlzYy0+ dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdfSU1PREVfUEFDS0VEMzI7DQotCQlpc2Mt PnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJU0NfRENUUkxfRFZJRVdfUEFDS0VEOw0KLQkJaXNj LT50cnlfY29uZmlnLmJwcCA9IDMyOw0KLQkJYnJlYWs7DQotCWNhc2UgVjRMMl9QSVhfRk1UX1lV VjQyMDoNCi0JCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RF X1lZQ0M7DQotCQlpc2MtPnRyeV9jb25maWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1lD NDIwUDsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5kY3RybF9kdmlldyA9IElTQ19EQ1RSTF9EVklFV19Q TEFOQVI7DQotCQlpc2MtPnRyeV9jb25maWcuYnBwID0gMTI7DQotCQlicmVhazsNCi0JY2FzZSBW NEwyX1BJWF9GTVRfWVVWNDIyUDoNCi0JCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJ U0NfUkxQX0NGR19NT0RFX1lZQ0M7DQotCQlpc2MtPnRyeV9jb25maWcuZGNmZ19pbW9kZSA9IElT Q19EQ0ZHX0lNT0RFX1lDNDIyUDsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5kY3RybF9kdmlldyA9IElT Q19EQ1RSTF9EVklFV19QTEFOQVI7DQotCQlpc2MtPnRyeV9jb25maWcuYnBwID0gMTY7DQotCQli cmVhazsNCi0JY2FzZSBWNEwyX1BJWF9GTVRfWVVZVjoNCi0JCWlzYy0+dHJ5X2NvbmZpZy5ybHBf Y2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RFX1lZQ0M7DQotCQlpc2MtPnRyeV9jb25maWcuZGNm Z19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1BBQ0tFRDMyOw0KLQkJaXNjLT50cnlfY29uZmlnLmRj dHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BBQ0tFRDsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5i cHAgPSAxNjsNCi0JCWJyZWFrOw0KLQljYXNlIFY0TDJfUElYX0ZNVF9HUkVZOg0KLQkJaXNjLT50 cnlfY29uZmlnLnJscF9jZmdfbW9kZSA9IElTQ19STFBfQ0ZHX01PREVfREFUWTg7DQotCQlpc2Mt PnRyeV9jb25maWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1BBQ0tFRDg7DQotCQlpc2Mt PnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJU0NfRENUUkxfRFZJRVdfUEFDS0VEOw0KLQkJaXNj LT50cnlfY29uZmlnLmJwcCA9IDg7DQotCQlicmVhazsNCi0JZGVmYXVsdDoNCi0JCXJldHVybiAt RUlOVkFMOw0KLQl9DQotCXJldHVybiAwOw0KLX0NCi0NCi0vKg0KLSAqIENvbmZpZ3VyaW5nIHBp cGVsaW5lIG1vZHVsZXMsIGRlcGVuZGluZyBvbiB3aGljaCBmb3JtYXQgdGhlIElTQyBvdXRwdXRz DQotICogYW5kIGNvbnNpZGVyaW5nIHdoaWNoIGZvcm1hdCBpdCBoYXMgYXMgaW5wdXQgZnJvbSB0 aGUgc2Vuc29yLg0KLSAqLw0KLXN0YXRpYyBpbnQgaXNjX3RyeV9jb25maWd1cmVfcGlwZWxpbmUo c3RydWN0IGlzY19kZXZpY2UgKmlzYykNCi17DQotCXN3aXRjaCAoaXNjLT50cnlfY29uZmlnLmZv dXJjYykgew0KLQljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjU6DQotCWNhc2UgVjRMMl9QSVhfRk1U X0FSR0I1NTU6DQotCWNhc2UgVjRMMl9QSVhfRk1UX0FSR0I0NDQ6DQotCWNhc2UgVjRMMl9QSVhf Rk1UX0FCR1IzMjoNCi0JY2FzZSBWNEwyX1BJWF9GTVRfWEJHUjMyOg0KLQkJLyogaWYgc2Vuc29y IGZvcm1hdCBpcyBSQVcsIHdlIGNvbnZlcnQgaW5zaWRlIElTQyAqLw0KLQkJaWYgKElTQ19JU19G T1JNQVRfUkFXKGlzYy0+dHJ5X2NvbmZpZy5zZF9mb3JtYXQtPm1idXNfY29kZSkpIHsNCi0JCQlp c2MtPnRyeV9jb25maWcuYml0c19waXBlbGluZSA9IENGQV9FTkFCTEUgfA0KLQkJCQlXQl9FTkFC TEUgfCBHQU1fRU5BQkxFUzsNCi0JCX0gZWxzZSB7DQotCQkJaXNjLT50cnlfY29uZmlnLmJpdHNf cGlwZWxpbmUgPSAweDA7DQotCQl9DQotCQlicmVhazsNCi0JY2FzZSBWNEwyX1BJWF9GTVRfWVVW NDIwOg0KLQkJLyogaWYgc2Vuc29yIGZvcm1hdCBpcyBSQVcsIHdlIGNvbnZlcnQgaW5zaWRlIElT QyAqLw0KLQkJaWYgKElTQ19JU19GT1JNQVRfUkFXKGlzYy0+dHJ5X2NvbmZpZy5zZF9mb3JtYXQt Pm1idXNfY29kZSkpIHsNCi0JCQlpc2MtPnRyeV9jb25maWcuYml0c19waXBlbGluZSA9IENGQV9F TkFCTEUgfA0KLQkJCQlDU0NfRU5BQkxFIHwgV0JfRU5BQkxFIHwgR0FNX0VOQUJMRVMgfA0KLQkJ CQlTVUI0MjBfRU5BQkxFIHwgU1VCNDIyX0VOQUJMRSB8IENCQ19FTkFCTEU7DQotCQl9IGVsc2Ug ew0KLQkJCWlzYy0+dHJ5X2NvbmZpZy5iaXRzX3BpcGVsaW5lID0gMHgwOw0KLQkJfQ0KLQkJYnJl YWs7DQotCWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMlA6DQotCQkvKiBpZiBzZW5zb3IgZm9ybWF0 IGlzIFJBVywgd2UgY29udmVydCBpbnNpZGUgSVNDICovDQotCQlpZiAoSVNDX0lTX0ZPUk1BVF9S QVcoaXNjLT50cnlfY29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlKSkgew0KLQkJCWlzYy0+dHJ5 X2NvbmZpZy5iaXRzX3BpcGVsaW5lID0gQ0ZBX0VOQUJMRSB8DQotCQkJCUNTQ19FTkFCTEUgfCBX Ql9FTkFCTEUgfCBHQU1fRU5BQkxFUyB8DQotCQkJCVNVQjQyMl9FTkFCTEUgfCBDQkNfRU5BQkxF Ow0KLQkJfSBlbHNlIHsNCi0JCQlpc2MtPnRyeV9jb25maWcuYml0c19waXBlbGluZSA9IDB4MDsN Ci0JCX0NCi0JCWJyZWFrOw0KLQljYXNlIFY0TDJfUElYX0ZNVF9ZVVlWOg0KLQkJLyogaWYgc2Vu c29yIGZvcm1hdCBpcyBSQVcsIHdlIGNvbnZlcnQgaW5zaWRlIElTQyAqLw0KLQkJaWYgKElTQ19J U19GT1JNQVRfUkFXKGlzYy0+dHJ5X2NvbmZpZy5zZF9mb3JtYXQtPm1idXNfY29kZSkpIHsNCi0J CQlpc2MtPnRyeV9jb25maWcuYml0c19waXBlbGluZSA9IENGQV9FTkFCTEUgfA0KLQkJCQlDU0Nf RU5BQkxFIHwgV0JfRU5BQkxFIHwgR0FNX0VOQUJMRVMgfA0KLQkJCQlTVUI0MjJfRU5BQkxFIHwg Q0JDX0VOQUJMRTsNCi0JCX0gZWxzZSB7DQotCQkJaXNjLT50cnlfY29uZmlnLmJpdHNfcGlwZWxp bmUgPSAweDA7DQotCQl9DQotCQlicmVhazsNCi0JY2FzZSBWNEwyX1BJWF9GTVRfR1JFWToNCi0J CWlmIChJU0NfSVNfRk9STUFUX1JBVyhpc2MtPnRyeV9jb25maWcuc2RfZm9ybWF0LT5tYnVzX2Nv ZGUpKSB7DQotCQkvKiBpZiBzZW5zb3IgZm9ybWF0IGlzIFJBVywgd2UgY29udmVydCBpbnNpZGUg SVNDICovDQotCQkJaXNjLT50cnlfY29uZmlnLmJpdHNfcGlwZWxpbmUgPSBDRkFfRU5BQkxFIHwN Ci0JCQkJQ1NDX0VOQUJMRSB8IFdCX0VOQUJMRSB8IEdBTV9FTkFCTEVTIHwNCi0JCQkJQ0JDX0VO QUJMRTsNCi0JCX0gZWxzZSB7DQotCQkJaXNjLT50cnlfY29uZmlnLmJpdHNfcGlwZWxpbmUgPSAw eDA7DQotCQl9DQotCQlicmVhazsNCi0JZGVmYXVsdDoNCi0JCWlzYy0+dHJ5X2NvbmZpZy5iaXRz X3BpcGVsaW5lID0gMHgwOw0KLQl9DQotCXJldHVybiAwOw0KLX0NCi0NCi1zdGF0aWMgaW50IGlz Y190cnlfZm10KHN0cnVjdCBpc2NfZGV2aWNlICppc2MsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZiwN Ci0JCQl1MzIgKmNvZGUpDQotew0KLQlpbnQgaTsNCi0Jc3RydWN0IGlzY19mb3JtYXQgKnNkX2Zt dCA9IE5VTEwsICpkaXJlY3RfZm10ID0gTlVMTDsNCi0Jc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAq cGl4Zm10ID0gJmYtPmZtdC5waXg7DQotCXN0cnVjdCB2NGwyX3N1YmRldl9wYWRfY29uZmlnIHBh ZF9jZmc7DQotCXN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgZm9ybWF0ID0gew0KLQkJLndoaWNo ID0gVjRMMl9TVUJERVZfRk9STUFUX1RSWSwNCi0JfTsNCi0JdTMyIG1idXNfY29kZTsNCi0JaW50 IHJldDsNCi0JYm9vbCBybHBfZG1hX2RpcmVjdF9kdW1wID0gZmFsc2U7DQotDQotCWlmIChmLT50 eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkNCi0JCXJldHVybiAtRUlOVkFMOw0K LQ0KLQkvKiBTdGVwIDE6IGZpbmQgYSBSQVcgZm9ybWF0IHRoYXQgaXMgc3VwcG9ydGVkICovDQot CWZvciAoaSA9IDA7IGkgPCBpc2MtPm51bV91c2VyX2Zvcm1hdHM7IGkrKykgew0KLQkJaWYgKElT Q19JU19GT1JNQVRfUkFXKGlzYy0+dXNlcl9mb3JtYXRzW2ldLT5tYnVzX2NvZGUpKSB7DQotCQkJ c2RfZm10ID0gaXNjLT51c2VyX2Zvcm1hdHNbaV07DQotCQkJYnJlYWs7DQotCQl9DQotCX0NCi0J LyogU3RlcCAyOiBXZSBjYW4gY29udGludWUgd2l0aCB0aGlzIFJBVyBmb3JtYXQsIG9yIHdlIGNh biBsb29rDQotCSAqIGZvciBiZXR0ZXI6IG1heWJlIHNlbnNvciBzdXBwb3J0cyBkaXJlY3RseSB3 aGF0IHdlIG5lZWQuDQotCSAqLw0KLQlkaXJlY3RfZm10ID0gZmluZF9mb3JtYXRfYnlfZm91cmNj KGlzYywgcGl4Zm10LT5waXhlbGZvcm1hdCk7DQotDQotCS8qIFN0ZXAgMzogV2UgaGF2ZSBib3Ro LiBXZSBkZWNpZGUgZ2l2ZW4gdGhlIG1vZHVsZSBwYXJhbWV0ZXIgd2hpY2gNCi0JICogb25lIHRv IHVzZS4NCi0JICovDQotCWlmIChkaXJlY3RfZm10ICYmIHNkX2ZtdCAmJiBzZW5zb3JfcHJlZmVy cmVkKQ0KLQkJc2RfZm10ID0gZGlyZWN0X2ZtdDsNCi0NCi0JLyogU3RlcCA0OiB3ZSBkbyBub3Qg aGF2ZSBSQVcgYnV0IHdlIGhhdmUgYSBkaXJlY3QgZm9ybWF0LiBVc2UgaXQuICovDQotCWlmIChk aXJlY3RfZm10ICYmICFzZF9mbXQpDQotCQlzZF9mbXQgPSBkaXJlY3RfZm10Ow0KLQ0KLQkvKiBT dGVwIDU6IGlmIHdlIGFyZSB1c2luZyBhIGRpcmVjdCBmb3JtYXQsIHdlIG5lZWQgdG8gcGFja2Fn ZQ0KLQkgKiBldmVyeXRoaW5nIGFzIDggYml0IGRhdGEgYW5kIGp1c3QgZHVtcCBpdA0KLQkgKi8N Ci0JaWYgKHNkX2ZtdCA9PSBkaXJlY3RfZm10KQ0KLQkJcmxwX2RtYV9kaXJlY3RfZHVtcCA9IHRy dWU7DQotDQotCS8qIFN0ZXAgNjogV2UgaGF2ZSBubyBmb3JtYXQuIFRoaXMgY2FuIGhhcHBlbiBp ZiB0aGUgdXNlcnNwYWNlDQotCSAqIHJlcXVlc3RzIHNvbWUgd2VpcmQvaW52YWxpZCBmb3JtYXQu DQotCSAqIEluIHRoaXMgY2FzZSwgZGVmYXVsdCB0byB3aGF0ZXZlciB3ZSBoYXZlDQotCSAqLw0K LQlpZiAoIXNkX2ZtdCAmJiAhZGlyZWN0X2ZtdCkgew0KLQkJc2RfZm10ID0gaXNjLT51c2VyX2Zv cm1hdHNbaXNjLT5udW1fdXNlcl9mb3JtYXRzIC0gMV07DQotCQl2NGwyX2RiZygxLCBkZWJ1Zywg JmlzYy0+djRsMl9kZXYsDQotCQkJICJTZW5zb3Igbm90IHN1cHBvcnRpbmcgJS40cywgdXNpbmcg JS40c1xuIiwNCi0JCQkgKGNoYXIgKikmcGl4Zm10LT5waXhlbGZvcm1hdCwgKGNoYXIgKikmc2Rf Zm10LT5mb3VyY2MpOw0KLQl9DQotDQotCWlmICghc2RfZm10KSB7DQotCQlyZXQgPSAtRUlOVkFM Ow0KLQkJZ290byBpc2NfdHJ5X2ZtdF9lcnI7DQotCX0NCi0NCi0JLyogU3RlcCA3OiBQcmludCBv dXQgd2hhdCB3ZSBkZWNpZGVkIGZvciBkZWJ1Z2dpbmcgKi8NCi0JdjRsMl9kYmcoMSwgZGVidWcs ICZpc2MtPnY0bDJfZGV2LA0KLQkJICJQcmVmZXJyaW5nIHRvIGhhdmUgc2Vuc29yIHVzaW5nIGZv cm1hdCAlLjRzXG4iLA0KLQkJIChjaGFyICopJnNkX2ZtdC0+Zm91cmNjKTsNCi0NCi0JLyogU3Rl cCA4OiBhdCB0aGlzIG1vbWVudCB3ZSBkZWNpZGVkIHdoaWNoIGZvcm1hdCB0aGUgc3ViZGV2IHdp bGwgdXNlICovDQotCWlzYy0+dHJ5X2NvbmZpZy5zZF9mb3JtYXQgPSBzZF9mbXQ7DQotDQotCS8q IExpbWl0IHRvIEF0bWVsIElTQyBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgKi8NCi0JaWYgKHBpeGZt dC0+d2lkdGggPiBJU0NfTUFYX1NVUFBPUlRfV0lEVEgpDQotCQlwaXhmbXQtPndpZHRoID0gSVND X01BWF9TVVBQT1JUX1dJRFRIOw0KLQlpZiAocGl4Zm10LT5oZWlnaHQgPiBJU0NfTUFYX1NVUFBP UlRfSEVJR0hUKQ0KLQkJcGl4Zm10LT5oZWlnaHQgPSBJU0NfTUFYX1NVUFBPUlRfSEVJR0hUOw0K LQ0KLQkvKg0KLQkgKiBUaGUgbWJ1cyBmb3JtYXQgaXMgdGhlIG9uZSB0aGUgc3ViZGV2IG91dHB1 dHMuDQotCSAqIFRoZSBwaXhlbHMgd2lsbCBiZSB0cmFuc2ZlcnJlZCBpbiB0aGlzIGZvcm1hdCBT ZW5zb3IgLT4gSVNDDQotCSAqLw0KLQltYnVzX2NvZGUgPSBzZF9mbXQtPm1idXNfY29kZTsNCi0N Ci0JLyoNCi0JICogVmFsaWRhdGUgZm9ybWF0cy4gSWYgdGhlIHJlcXVpcmVkIGZvcm1hdCBpcyBu b3QgT0ssIGRlZmF1bHQgdG8gcmF3Lg0KLQkgKi8NCi0NCi0JaXNjLT50cnlfY29uZmlnLmZvdXJj YyA9IHBpeGZtdC0+cGl4ZWxmb3JtYXQ7DQotDQotCWlmIChpc2NfdHJ5X3ZhbGlkYXRlX2Zvcm1h dHMoaXNjKSkgew0KLQkJcGl4Zm10LT5waXhlbGZvcm1hdCA9IGlzYy0+dHJ5X2NvbmZpZy5mb3Vy Y2MgPSBzZF9mbXQtPmZvdXJjYzsNCi0JCS8qIFJlLXRyeSB0byB2YWxpZGF0ZSB0aGUgbmV3IGZv cm1hdCAqLw0KLQkJcmV0ID0gaXNjX3RyeV92YWxpZGF0ZV9mb3JtYXRzKGlzYyk7DQotCQlpZiAo cmV0KQ0KLQkJCWdvdG8gaXNjX3RyeV9mbXRfZXJyOw0KLQl9DQotDQotCXJldCA9IGlzY190cnlf Y29uZmlndXJlX3JscF9kbWEoaXNjLCBybHBfZG1hX2RpcmVjdF9kdW1wKTsNCi0JaWYgKHJldCkN Ci0JCWdvdG8gaXNjX3RyeV9mbXRfZXJyOw0KLQ0KLQlyZXQgPSBpc2NfdHJ5X2NvbmZpZ3VyZV9w aXBlbGluZShpc2MpOw0KLQlpZiAocmV0KQ0KLQkJZ290byBpc2NfdHJ5X2ZtdF9lcnI7DQotDQot CXY0bDJfZmlsbF9tYnVzX2Zvcm1hdCgmZm9ybWF0LmZvcm1hdCwgcGl4Zm10LCBtYnVzX2NvZGUp Ow0KLQlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKGlzYy0+Y3VycmVudF9zdWJkZXYtPnNkLCBwYWQs IHNldF9mbXQsDQotCQkJICAgICAgICZwYWRfY2ZnLCAmZm9ybWF0KTsNCi0JaWYgKHJldCA8IDAp DQotCQlnb3RvIGlzY190cnlfZm10X3N1YmRldl9lcnI7DQotDQotCXY0bDJfZmlsbF9waXhfZm9y bWF0KHBpeGZtdCwgJmZvcm1hdC5mb3JtYXQpOw0KLQ0KLQlwaXhmbXQtPmZpZWxkID0gVjRMMl9G SUVMRF9OT05FOw0KLQlwaXhmbXQtPmJ5dGVzcGVybGluZSA9IChwaXhmbXQtPndpZHRoICogaXNj LT50cnlfY29uZmlnLmJwcCkgPj4gMzsNCi0JcGl4Zm10LT5zaXplaW1hZ2UgPSBwaXhmbXQtPmJ5 dGVzcGVybGluZSAqIHBpeGZtdC0+aGVpZ2h0Ow0KLQ0KLQlpZiAoY29kZSkNCi0JCSpjb2RlID0g bWJ1c19jb2RlOw0KLQ0KLQlyZXR1cm4gMDsNCi0NCi1pc2NfdHJ5X2ZtdF9lcnI6DQotCXY0bDJf ZXJyKCZpc2MtPnY0bDJfZGV2LCAiQ291bGQgbm90IGZpbmQgYW55IHBvc3NpYmxlIGZvcm1hdCBm b3IgYSB3b3JraW5nIHBpcGVsaW5lXG4iKTsNCi1pc2NfdHJ5X2ZtdF9zdWJkZXZfZXJyOg0KLQlt ZW1zZXQoJmlzYy0+dHJ5X2NvbmZpZywgMCwgc2l6ZW9mKGlzYy0+dHJ5X2NvbmZpZykpOw0KLQ0K LQlyZXR1cm4gcmV0Ow0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY19zZXRfZm10KHN0cnVjdCBpc2Nf ZGV2aWNlICppc2MsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikNCi17DQotCXN0cnVjdCB2NGwyX3N1 YmRldl9mb3JtYXQgZm9ybWF0ID0gew0KLQkJLndoaWNoID0gVjRMMl9TVUJERVZfRk9STUFUX0FD VElWRSwNCi0JfTsNCi0JdTMyIG1idXNfY29kZSA9IDA7DQotCWludCByZXQ7DQotDQotCXJldCA9 IGlzY190cnlfZm10KGlzYywgZiwgJm1idXNfY29kZSk7DQotCWlmIChyZXQpDQotCQlyZXR1cm4g cmV0Ow0KLQ0KLQl2NGwyX2ZpbGxfbWJ1c19mb3JtYXQoJmZvcm1hdC5mb3JtYXQsICZmLT5mbXQu cGl4LCBtYnVzX2NvZGUpOw0KLQlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKGlzYy0+Y3VycmVudF9z dWJkZXYtPnNkLCBwYWQsDQotCQkJICAgICAgIHNldF9mbXQsIE5VTEwsICZmb3JtYXQpOw0KLQlp ZiAocmV0IDwgMCkNCi0JCXJldHVybiByZXQ7DQotDQotCWlzYy0+Zm10ID0gKmY7DQotDQotCWlm IChpc2MtPnRyeV9jb25maWcuc2RfZm9ybWF0ICYmIGlzYy0+Y29uZmlnLnNkX2Zvcm1hdCAmJg0K LQkgICAgaXNjLT50cnlfY29uZmlnLnNkX2Zvcm1hdCAhPSBpc2MtPmNvbmZpZy5zZF9mb3JtYXQp IHsNCi0JCWlzYy0+Y3RybHMuaGlzdF9zdGF0ID0gSElTVF9JTklUOw0KLQkJaXNjX3Jlc2V0X2F3 Yl9jdHJscyhpc2MpOw0KLQl9DQotCS8qIG1ha2UgdGhlIHRyeSBjb25maWd1cmF0aW9uIGFjdGl2 ZSAqLw0KLQlpc2MtPmNvbmZpZyA9IGlzYy0+dHJ5X2NvbmZpZzsNCi0NCi0JdjRsMl9kYmcoMSwg ZGVidWcsICZpc2MtPnY0bDJfZGV2LCAiTmV3IElTQyBjb25maWd1cmF0aW9uIGluIHBsYWNlXG4i KTsNCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX3NfZm10X3ZpZF9jYXAo c3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsDQotCQkJICAgICAgc3RydWN0IHY0bDJfZm9y bWF0ICpmKQ0KLXsNCi0Jc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZpZGVvX2RydmRhdGEoZmls ZSk7DQotDQotCWlmICh2YjJfaXNfc3RyZWFtaW5nKCZpc2MtPnZiMl92aWRxKSkNCi0JCXJldHVy biAtRUJVU1k7DQotDQotCXJldHVybiBpc2Nfc2V0X2ZtdChpc2MsIGYpOw0KLX0NCi0NCi1zdGF0 aWMgaW50IGlzY190cnlfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYs DQotCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikNCi17DQotCXN0cnVjdCBpc2NfZGV2aWNlICpp c2MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KLQ0KLQlyZXR1cm4gaXNjX3RyeV9mbXQoaXNjLCBm LCBOVUxMKTsNCi19DQotDQotc3RhdGljIGludCBpc2NfZW51bV9pbnB1dChzdHJ1Y3QgZmlsZSAq ZmlsZSwgdm9pZCAqcHJpdiwNCi0JCQkgICBzdHJ1Y3QgdjRsMl9pbnB1dCAqaW5wKQ0KLXsNCi0J aWYgKGlucC0+aW5kZXggIT0gMCkNCi0JCXJldHVybiAtRUlOVkFMOw0KLQ0KLQlpbnAtPnR5cGUg PSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOw0KLQlpbnAtPnN0ZCA9IDA7DQotCXN0cnNjcHkoaW5w LT5uYW1lLCAiQ2FtZXJhIiwgc2l6ZW9mKGlucC0+bmFtZSkpOw0KLQ0KLQlyZXR1cm4gMDsNCi19 DQotDQotc3RhdGljIGludCBpc2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJp diwgdW5zaWduZWQgaW50ICppKQ0KLXsNCi0JKmkgPSAwOw0KLQ0KLQlyZXR1cm4gMDsNCi19DQot DQotc3RhdGljIGludCBpc2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwg dW5zaWduZWQgaW50IGkpDQotew0KLQlpZiAoaSA+IDApDQotCQlyZXR1cm4gLUVJTlZBTDsNCi0N Ci0JcmV0dXJuIDA7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX2dfcGFybShzdHJ1Y3QgZmlsZSAq ZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKmEpDQotew0KLQlzdHJ1Y3Qg aXNjX2RldmljZSAqaXNjID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsNCi0NCi0JcmV0dXJuIHY0bDJf Z19wYXJtX2NhcCh2aWRlb19kZXZkYXRhKGZpbGUpLCBpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZCwg YSk7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX3NfcGFybShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9p ZCAqZmgsIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKmEpDQotew0KLQlzdHJ1Y3QgaXNjX2Rldmlj ZSAqaXNjID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsNCi0NCi0JcmV0dXJuIHY0bDJfc19wYXJtX2Nh cCh2aWRlb19kZXZkYXRhKGZpbGUpLCBpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZCwgYSk7DQotfQ0K LQ0KLXN0YXRpYyBpbnQgaXNjX2VudW1fZnJhbWVzaXplcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9p ZCAqZmgsDQotCQkJICAgICAgIHN0cnVjdCB2NGwyX2ZybXNpemVlbnVtICpmc2l6ZSkNCi17DQot CXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KLQlzdHJ1Y3Qg djRsMl9zdWJkZXZfZnJhbWVfc2l6ZV9lbnVtIGZzZSA9IHsNCi0JCS5pbmRleCA9IGZzaXplLT5p bmRleCwNCi0JCS53aGljaCA9IFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJVkUsDQotCX07DQotCWlu dCByZXQgPSAtRUlOVkFMOw0KLQlpbnQgaTsNCi0NCi0JZm9yIChpID0gMDsgaSA8IGlzYy0+bnVt X3VzZXJfZm9ybWF0czsgaSsrKQ0KLQkJaWYgKGlzYy0+dXNlcl9mb3JtYXRzW2ldLT5mb3VyY2Mg PT0gZnNpemUtPnBpeGVsX2Zvcm1hdCkNCi0JCQlyZXQgPSAwOw0KLQ0KLQlmb3IgKGkgPSAwOyBp IDwgQVJSQVlfU0laRShjb250cm9sbGVyX2Zvcm1hdHMpOyBpKyspDQotCQlpZiAoY29udHJvbGxl cl9mb3JtYXRzW2ldLmZvdXJjYyA9PSBmc2l6ZS0+cGl4ZWxfZm9ybWF0KQ0KLQkJCXJldCA9IDA7 DQotDQotCWlmIChyZXQpDQotCQlyZXR1cm4gcmV0Ow0KLQ0KLQlyZXQgPSB2NGwyX3N1YmRldl9j YWxsKGlzYy0+Y3VycmVudF9zdWJkZXYtPnNkLCBwYWQsIGVudW1fZnJhbWVfc2l6ZSwNCi0JCQkg ICAgICAgTlVMTCwgJmZzZSk7DQotCWlmIChyZXQpDQotCQlyZXR1cm4gcmV0Ow0KLQ0KLQlmc2Uu Y29kZSA9IGlzYy0+Y29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlOw0KLQ0KLQlmc2l6ZS0+dHlw ZSA9IFY0TDJfRlJNU0laRV9UWVBFX0RJU0NSRVRFOw0KLQlmc2l6ZS0+ZGlzY3JldGUud2lkdGgg PSBmc2UubWF4X3dpZHRoOw0KLQlmc2l6ZS0+ZGlzY3JldGUuaGVpZ2h0ID0gZnNlLm1heF9oZWln aHQ7DQotDQotCXJldHVybiAwOw0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY19lbnVtX2ZyYW1laW50 ZXJ2YWxzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwNCi0JCQkJICAgIHN0cnVjdCB2NGwy X2ZybWl2YWxlbnVtICpmaXZhbCkNCi17DQotCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2aWRl b19kcnZkYXRhKGZpbGUpOw0KLQlzdHJ1Y3QgdjRsMl9zdWJkZXZfZnJhbWVfaW50ZXJ2YWxfZW51 bSBmaWUgPSB7DQotCQkuaW5kZXggPSBmaXZhbC0+aW5kZXgsDQotCQkud2lkdGggPSBmaXZhbC0+ d2lkdGgsDQotCQkuaGVpZ2h0ID0gZml2YWwtPmhlaWdodCwNCi0JCS53aGljaCA9IFY0TDJfU1VC REVWX0ZPUk1BVF9BQ1RJVkUsDQotCX07DQotCWludCByZXQgPSAtRUlOVkFMOw0KLQlpbnQgaTsN Ci0NCi0JZm9yIChpID0gMDsgaSA8IGlzYy0+bnVtX3VzZXJfZm9ybWF0czsgaSsrKQ0KLQkJaWYg KGlzYy0+dXNlcl9mb3JtYXRzW2ldLT5mb3VyY2MgPT0gZml2YWwtPnBpeGVsX2Zvcm1hdCkNCi0J CQlyZXQgPSAwOw0KLQ0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb250cm9sbGVyX2Zv cm1hdHMpOyBpKyspDQotCQlpZiAoY29udHJvbGxlcl9mb3JtYXRzW2ldLmZvdXJjYyA9PSBmaXZh bC0+cGl4ZWxfZm9ybWF0KQ0KLQkJCXJldCA9IDA7DQotDQotCWlmIChyZXQpDQotCQlyZXR1cm4g cmV0Ow0KLQ0KLQlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKGlzYy0+Y3VycmVudF9zdWJkZXYtPnNk LCBwYWQsDQotCQkJICAgICAgIGVudW1fZnJhbWVfaW50ZXJ2YWwsIE5VTEwsICZmaWUpOw0KLQlp ZiAocmV0KQ0KLQkJcmV0dXJuIHJldDsNCi0NCi0JZmllLmNvZGUgPSBpc2MtPmNvbmZpZy5zZF9m b3JtYXQtPm1idXNfY29kZTsNCi0JZml2YWwtPnR5cGUgPSBWNEwyX0ZSTUlWQUxfVFlQRV9ESVND UkVURTsNCi0JZml2YWwtPmRpc2NyZXRlID0gZmllLmludGVydmFsOw0KLQ0KLQlyZXR1cm4gMDsN Ci19DQotDQotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyBpc2NfaW9jdGxfb3Bz ID0gew0KLQkudmlkaW9jX3F1ZXJ5Y2FwCQk9IGlzY19xdWVyeWNhcCwNCi0JLnZpZGlvY19lbnVt X2ZtdF92aWRfY2FwCT0gaXNjX2VudW1fZm10X3ZpZF9jYXAsDQotCS52aWRpb2NfZ19mbXRfdmlk X2NhcAkJPSBpc2NfZ19mbXRfdmlkX2NhcCwNCi0JLnZpZGlvY19zX2ZtdF92aWRfY2FwCQk9IGlz Y19zX2ZtdF92aWRfY2FwLA0KLQkudmlkaW9jX3RyeV9mbXRfdmlkX2NhcAkJPSBpc2NfdHJ5X2Zt dF92aWRfY2FwLA0KLQ0KLQkudmlkaW9jX2VudW1faW5wdXQJCT0gaXNjX2VudW1faW5wdXQsDQot CS52aWRpb2NfZ19pbnB1dAkJCT0gaXNjX2dfaW5wdXQsDQotCS52aWRpb2Nfc19pbnB1dAkJCT0g aXNjX3NfaW5wdXQsDQotDQotCS52aWRpb2NfcmVxYnVmcwkJCT0gdmIyX2lvY3RsX3JlcWJ1ZnMs DQotCS52aWRpb2NfcXVlcnlidWYJCT0gdmIyX2lvY3RsX3F1ZXJ5YnVmLA0KLQkudmlkaW9jX3Fi dWYJCQk9IHZiMl9pb2N0bF9xYnVmLA0KLQkudmlkaW9jX2V4cGJ1ZgkJCT0gdmIyX2lvY3RsX2V4 cGJ1ZiwNCi0JLnZpZGlvY19kcWJ1ZgkJCT0gdmIyX2lvY3RsX2RxYnVmLA0KLQkudmlkaW9jX2Ny ZWF0ZV9idWZzCQk9IHZiMl9pb2N0bF9jcmVhdGVfYnVmcywNCi0JLnZpZGlvY19wcmVwYXJlX2J1 ZgkJPSB2YjJfaW9jdGxfcHJlcGFyZV9idWYsDQotCS52aWRpb2Nfc3RyZWFtb24JCT0gdmIyX2lv Y3RsX3N0cmVhbW9uLA0KLQkudmlkaW9jX3N0cmVhbW9mZgkJPSB2YjJfaW9jdGxfc3RyZWFtb2Zm LA0KLQ0KLQkudmlkaW9jX2dfcGFybQkJCT0gaXNjX2dfcGFybSwNCi0JLnZpZGlvY19zX3Bhcm0J CQk9IGlzY19zX3Bhcm0sDQotCS52aWRpb2NfZW51bV9mcmFtZXNpemVzCQk9IGlzY19lbnVtX2Zy YW1lc2l6ZXMsDQotCS52aWRpb2NfZW51bV9mcmFtZWludGVydmFscwk9IGlzY19lbnVtX2ZyYW1l aW50ZXJ2YWxzLA0KLQ0KLQkudmlkaW9jX2xvZ19zdGF0dXMJCT0gdjRsMl9jdHJsX2xvZ19zdGF0 dXMsDQotCS52aWRpb2Nfc3Vic2NyaWJlX2V2ZW50CQk9IHY0bDJfY3RybF9zdWJzY3JpYmVfZXZl bnQsDQotCS52aWRpb2NfdW5zdWJzY3JpYmVfZXZlbnQJPSB2NGwyX2V2ZW50X3Vuc3Vic2NyaWJl LA0KLX07DQotDQotc3RhdGljIGludCBpc2Nfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkNCi17DQot CXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KLQlzdHJ1Y3Qg djRsMl9zdWJkZXYgKnNkID0gaXNjLT5jdXJyZW50X3N1YmRldi0+c2Q7DQotCWludCByZXQ7DQot DQotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmlzYy0+bG9jaykpDQotCQlyZXR1cm4g LUVSRVNUQVJUU1lTOw0KLQ0KLQlyZXQgPSB2NGwyX2ZoX29wZW4oZmlsZSk7DQotCWlmIChyZXQg PCAwKQ0KLQkJZ290byB1bmxvY2s7DQotDQotCWlmICghdjRsMl9maF9pc19zaW5ndWxhcl9maWxl KGZpbGUpKQ0KLQkJZ290byB1bmxvY2s7DQotDQotCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2Qs IGNvcmUsIHNfcG93ZXIsIDEpOw0KLQlpZiAocmV0IDwgMCAmJiByZXQgIT0gLUVOT0lPQ1RMQ01E KSB7DQotCQl2NGwyX2ZoX3JlbGVhc2UoZmlsZSk7DQotCQlnb3RvIHVubG9jazsNCi0JfQ0KLQ0K LQlyZXQgPSBpc2Nfc2V0X2ZtdChpc2MsICZpc2MtPmZtdCk7DQotCWlmIChyZXQpIHsNCi0JCXY0 bDJfc3ViZGV2X2NhbGwoc2QsIGNvcmUsIHNfcG93ZXIsIDApOw0KLQkJdjRsMl9maF9yZWxlYXNl KGZpbGUpOw0KLQl9DQotDQotdW5sb2NrOg0KLQltdXRleF91bmxvY2soJmlzYy0+bG9jayk7DQot CXJldHVybiByZXQ7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX3JlbGVhc2Uoc3RydWN0IGZpbGUg KmZpbGUpDQotew0KLQlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmlkZW9fZHJ2ZGF0YShmaWxl KTsNCi0Jc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGlzYy0+Y3VycmVudF9zdWJkZXYtPnNkOw0K LQlib29sIGZoX3Npbmd1bGFyOw0KLQlpbnQgcmV0Ow0KLQ0KLQltdXRleF9sb2NrKCZpc2MtPmxv Y2spOw0KLQ0KLQlmaF9zaW5ndWxhciA9IHY0bDJfZmhfaXNfc2luZ3VsYXJfZmlsZShmaWxlKTsN Ci0NCi0JcmV0ID0gX3ZiMl9mb3BfcmVsZWFzZShmaWxlLCBOVUxMKTsNCi0NCi0JaWYgKGZoX3Np bmd1bGFyKQ0KLQkJdjRsMl9zdWJkZXZfY2FsbChzZCwgY29yZSwgc19wb3dlciwgMCk7DQotDQot CW11dGV4X3VubG9jaygmaXNjLT5sb2NrKTsNCi0NCi0JcmV0dXJuIHJldDsNCi19DQotDQotc3Rh dGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBpc2NfZm9wcyA9IHsNCi0JLm93 bmVyCQk9IFRISVNfTU9EVUxFLA0KLQkub3BlbgkJPSBpc2Nfb3BlbiwNCi0JLnJlbGVhc2UJPSBp c2NfcmVsZWFzZSwNCi0JLnVubG9ja2VkX2lvY3RsCT0gdmlkZW9faW9jdGwyLA0KLQkucmVhZAkJ PSB2YjJfZm9wX3JlYWQsDQotCS5tbWFwCQk9IHZiMl9mb3BfbW1hcCwNCi0JLnBvbGwJCT0gdmIy X2ZvcF9wb2xsLA0KLX07DQotDQotc3RhdGljIGlycXJldHVybl90IGlzY19pbnRlcnJ1cHQoaW50 IGlycSwgdm9pZCAqZGV2X2lkKQ0KLXsNCi0Jc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IChzdHJ1 Y3QgaXNjX2RldmljZSAqKWRldl9pZDsNCi0Jc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjLT5y ZWdtYXA7DQotCXUzMiBpc2NfaW50c3IsIGlzY19pbnRtYXNrLCBwZW5kaW5nOw0KLQlpcnFyZXR1 cm5fdCByZXQgPSBJUlFfTk9ORTsNCi0NCi0JcmVnbWFwX3JlYWQocmVnbWFwLCBJU0NfSU5UU1Is ICZpc2NfaW50c3IpOw0KLQlyZWdtYXBfcmVhZChyZWdtYXAsIElTQ19JTlRNQVNLLCAmaXNjX2lu dG1hc2spOw0KLQ0KLQlwZW5kaW5nID0gaXNjX2ludHNyICYgaXNjX2ludG1hc2s7DQotDQotCWlm IChsaWtlbHkocGVuZGluZyAmIElTQ19JTlRfRERPTkUpKSB7DQotCQlzcGluX2xvY2soJmlzYy0+ ZG1hX3F1ZXVlX2xvY2spOw0KLQkJaWYgKGlzYy0+Y3VyX2ZybSkgew0KLQkJCXN0cnVjdCB2YjJf djRsMl9idWZmZXIgKnZidWYgPSAmaXNjLT5jdXJfZnJtLT52YjsNCi0JCQlzdHJ1Y3QgdmIyX2J1 ZmZlciAqdmIgPSAmdmJ1Zi0+dmIyX2J1ZjsNCi0NCi0JCQl2Yi0+dGltZXN0YW1wID0ga3RpbWVf Z2V0X25zKCk7DQotCQkJdmJ1Zi0+c2VxdWVuY2UgPSBpc2MtPnNlcXVlbmNlKys7DQotCQkJdmIy X2J1ZmZlcl9kb25lKHZiLCBWQjJfQlVGX1NUQVRFX0RPTkUpOw0KLQkJCWlzYy0+Y3VyX2ZybSA9 IE5VTEw7DQotCQl9DQotDQotCQlpZiAoIWxpc3RfZW1wdHkoJmlzYy0+ZG1hX3F1ZXVlKSAmJiAh aXNjLT5zdG9wKSB7DQotCQkJaXNjLT5jdXJfZnJtID0gbGlzdF9maXJzdF9lbnRyeSgmaXNjLT5k bWFfcXVldWUsDQotCQkJCQkJICAgICBzdHJ1Y3QgaXNjX2J1ZmZlciwgbGlzdCk7DQotCQkJbGlz dF9kZWwoJmlzYy0+Y3VyX2ZybS0+bGlzdCk7DQotDQotCQkJaXNjX3N0YXJ0X2RtYShpc2MpOw0K LQkJfQ0KLQ0KLQkJaWYgKGlzYy0+c3RvcCkNCi0JCQljb21wbGV0ZSgmaXNjLT5jb21wKTsNCi0N Ci0JCXJldCA9IElSUV9IQU5ETEVEOw0KLQkJc3Bpbl91bmxvY2soJmlzYy0+ZG1hX3F1ZXVlX2xv Y2spOw0KLQl9DQotDQotCWlmIChwZW5kaW5nICYgSVNDX0lOVF9ISVNET05FKSB7DQotCQlzY2hl ZHVsZV93b3JrKCZpc2MtPmF3Yl93b3JrKTsNCi0JCXJldCA9IElSUV9IQU5ETEVEOw0KLQl9DQot DQotCXJldHVybiByZXQ7DQotfQ0KLQ0KLXN0YXRpYyB2b2lkIGlzY19oaXN0X2NvdW50KHN0cnVj dCBpc2NfZGV2aWNlICppc2MsIHUzMiAqbWluLCB1MzIgKm1heCkNCi17DQotCXN0cnVjdCByZWdt YXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0KLQlzdHJ1Y3QgaXNjX2N0cmxzICpjdHJscyA9ICZp c2MtPmN0cmxzOw0KLQl1MzIgKmhpc3RfY291bnQgPSAmY3RybHMtPmhpc3RfY291bnRbY3RybHMt Pmhpc3RfaWRdOw0KLQl1MzIgKmhpc3RfZW50cnkgPSAmY3RybHMtPmhpc3RfZW50cnlbMF07DQot CXUzMiBpOw0KLQ0KLQkqbWluID0gMDsNCi0JKm1heCA9IEhJU1RfRU5UUklFUzsNCi0NCi0JcmVn bWFwX2J1bGtfcmVhZChyZWdtYXAsIElTQ19ISVNfRU5UUlksIGhpc3RfZW50cnksIEhJU1RfRU5U UklFUyk7DQotDQotCSpoaXN0X2NvdW50ID0gMDsNCi0JLyoNCi0JICogd2UgZGVsaWJlcmF0ZWx5 IGlnbm9yZSB0aGUgZW5kIG9mIHRoZSBoaXN0b2dyYW0sDQotCSAqIHRoZSBtb3N0IHdoaXRlIHBp eGVscw0KLQkgKi8NCi0JZm9yIChpID0gMTsgaSA8IEhJU1RfRU5UUklFUzsgaSsrKSB7DQotCQlp ZiAoKmhpc3RfZW50cnkgJiYgISptaW4pDQotCQkJKm1pbiA9IGk7DQotCQlpZiAoKmhpc3RfZW50 cnkpDQotCQkJKm1heCA9IGk7DQotCQkqaGlzdF9jb3VudCArPSBpICogKCpoaXN0X2VudHJ5Kysp Ow0KLQl9DQotDQotCWlmICghKm1pbikNCi0JCSptaW4gPSAxOw0KLX0NCi0NCi1zdGF0aWMgdm9p ZCBpc2Nfd2JfdXBkYXRlKHN0cnVjdCBpc2NfY3RybHMgKmN0cmxzKQ0KLXsNCi0JdTMyICpoaXN0 X2NvdW50ID0gJmN0cmxzLT5oaXN0X2NvdW50WzBdOw0KLQl1MzIgYywgb2Zmc2V0WzRdOw0KLQl1 NjQgYXZnID0gMDsNCi0JLyogV2UgY29tcHV0ZSB0d28gZ2FpbnMsIHN0cmV0Y2ggZ2FpbiBhbmQg Z3JleSB3b3JsZCBnYWluICovDQotCXUzMiBzX2dhaW5bNF0sIGd3X2dhaW5bNF07DQotDQotCS8q DQotCSAqIEFjY29yZGluZyB0byBHcmV5IFdvcmxkLCB3ZSBuZWVkIHRvIHNldCBnYWlucyBmb3Ig Ui9CIHRvIG5vcm1hbGl6ZQ0KLQkgKiB0aGVtIHRvd2FyZHMgdGhlIGdyZWVuIGNoYW5uZWwuDQot CSAqIFRodXMgd2Ugd2FudCB0byBrZWVwIEdyZWVuIGFzIGZpeGVkIGFuZCBhZGp1c3Qgb25seSBS ZWQvQmx1ZQ0KLQkgKiBDb21wdXRlIHRoZSBhdmVyYWdlIG9mIHRoZSBib3RoIGdyZWVuIGNoYW5u ZWxzIGZpcnN0DQotCSAqLw0KLQlhdmcgPSAodTY0KWhpc3RfY291bnRbSVNDX0hJU19DRkdfTU9E RV9HUl0gKw0KLQkJKHU2NCloaXN0X2NvdW50W0lTQ19ISVNfQ0ZHX01PREVfR0JdOw0KLQlhdmcg Pj49IDE7DQotDQotCS8qIEdyZWVuIGhpc3RvZ3JhbSBpcyBudWxsLCBub3RoaW5nIHRvIGRvICov DQotCWlmICghYXZnKQ0KLQkJcmV0dXJuOw0KLQ0KLQlmb3IgKGMgPSBJU0NfSElTX0NGR19NT0RF X0dSOyBjIDw9IElTQ19ISVNfQ0ZHX01PREVfQjsgYysrKSB7DQotCQkvKg0KLQkJICogdGhlIGNv bG9yIG9mZnNldCBpcyB0aGUgbWluaW11bSB2YWx1ZSBvZiB0aGUgaGlzdG9ncmFtLg0KLQkJICog d2Ugc3RyZXRjaCB0aGlzIGNvbG9yIHRvIHRoZSBmdWxsIHJhbmdlIGJ5IHN1YnN0cmFjdGluZw0K LQkJICogdGhpcyB2YWx1ZSBmcm9tIHRoZSBjb2xvciBjb21wb25lbnQuDQotCQkgKi8NCi0JCW9m ZnNldFtjXSA9IGN0cmxzLT5oaXN0X21pbm1heFtjXVtISVNUX01JTl9JTkRFWF07DQotCQkvKg0K LQkJICogVGhlIG9mZnNldCBpcyBhbHdheXMgYXQgbGVhc3QgMS4gSWYgdGhlIG9mZnNldCBpcyAx LCB3ZSBkbw0KLQkJICogbm90IG5lZWQgdG8gYWRqdXN0IGl0LCBzbyBvdXIgcmVzdWx0IG11c3Qg YmUgemVyby4NCi0JCSAqIHRoZSBvZmZzZXQgaXMgY29tcHV0ZWQgaW4gYSBoaXN0b2dyYW0gb24g OSBiaXRzICgwLi41MTIpDQotCQkgKiBidXQgdGhlIG9mZnNldCBpbiByZWdpc3RlciBpcyBiYXNl ZCBvbg0KLQkJICogMTIgYml0cyBwaXBlbGluZSAoMC4uNDA5NikuDQotCQkgKiB3ZSBuZWVkIHRv IHNoaWZ0IHdpdGggdGhlIDMgYml0cyB0aGF0IHRoZSBoaXN0b2dyYW0gaXMNCi0JCSAqIGlnbm9y aW5nDQotCQkgKi8NCi0JCWN0cmxzLT5vZmZzZXRbY10gPSAob2Zmc2V0W2NdIC0gMSkgPDwgMzsN Ci0NCi0JCS8qIHRoZSBvZmZzZXQgaXMgdGhlbiB0YWtlbiBhbmQgY29udmVydGVkIHRvIDIncyBj b21wbGVtZW50cyAqLw0KLQkJaWYgKCFjdHJscy0+b2Zmc2V0W2NdKQ0KLQkJCWN0cmxzLT5vZmZz ZXRbY10gPSBJU0NfV0JfT19aRVJPX1ZBTDsNCi0NCi0JCS8qDQotCQkgKiB0aGUgc3RyZXRjaCBn YWluIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgaGlzdG9ncmFtIGJpbnMNCi0JCSAqIGRpdmlkZWQg YnkgdGhlIGFjdHVhbCByYW5nZSBvZiBjb2xvciBjb21wb25lbnQgKE1heCAtIE1pbikNCi0JCSAq IElmIHdlIGNvbXB1dGUgZ2FpbiBsaWtlIHRoaXMsIHRoZSBhY3R1YWwgY29sb3IgY29tcG9uZW50 DQotCQkgKiB3aWxsIGJlIHN0cmV0Y2hlZCB0byB0aGUgZnVsbCBoaXN0b2dyYW0uDQotCQkgKiBX ZSBuZWVkIHRvIHNoaWZ0IDkgYml0cyBmb3IgcHJlY2lzaW9uLCB3ZSBoYXZlIDkgYml0cyBmb3IN Ci0JCSAqIGRlY2ltYWxzDQotCQkgKi8NCi0JCXNfZ2FpbltjXSA9IChISVNUX0VOVFJJRVMgPDwg OSkgLw0KLQkJCShjdHJscy0+aGlzdF9taW5tYXhbY11bSElTVF9NQVhfSU5ERVhdIC0NCi0JCQlj dHJscy0+aGlzdF9taW5tYXhbY11bSElTVF9NSU5fSU5ERVhdICsgMSk7DQotDQotCQkvKg0KLQkJ ICogTm93IHdlIGhhdmUgdG8gY29tcHV0ZSB0aGUgZ2FpbiB3LnIudC4gdGhlIGF2ZXJhZ2UuDQot CQkgKiBBZGQvbG9zZSBnYWluIHRvIHRoZSBjb21wb25lbnQgdG93YXJkcyB0aGUgYXZlcmFnZS4N Ci0JCSAqIElmIGl0IGhhcHBlbnMgdGhhdCB0aGUgY29tcG9uZW50IGlzIHplcm8sIHVzZSB0aGUN Ci0JCSAqIGZpeGVkIHBvaW50IHZhbHVlIDogMS4wIGdhaW4uDQotCQkgKi8NCi0JCWlmIChoaXN0 X2NvdW50W2NdKQ0KLQkJCWd3X2dhaW5bY10gPSBkaXZfdTY0KGF2ZyA8PCA5LCBoaXN0X2NvdW50 W2NdKTsNCi0JCWVsc2UNCi0JCQlnd19nYWluW2NdID0gMSA8PCA5Ow0KLQ0KLQkJLyogbXVsdGlw bHkgYm90aCBnYWlucyBhbmQgYWRqdXN0IGZvciBkZWNpbWFscyAqLw0KLQkJY3RybHMtPmdhaW5b Y10gPSBzX2dhaW5bY10gKiBnd19nYWluW2NdOw0KLQkJY3RybHMtPmdhaW5bY10gPj49IDk7DQot CX0NCi19DQotDQotc3RhdGljIHZvaWQgaXNjX2F3Yl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAq dykNCi17DQotCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPQ0KLQkJY29udGFpbmVyX29mKHcsIHN0 cnVjdCBpc2NfZGV2aWNlLCBhd2Jfd29yayk7DQotCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlz Yy0+cmVnbWFwOw0KLQlzdHJ1Y3QgaXNjX2N0cmxzICpjdHJscyA9ICZpc2MtPmN0cmxzOw0KLQl1 MzIgaGlzdF9pZCA9IGN0cmxzLT5oaXN0X2lkOw0KLQl1MzIgYmF5c2VsOw0KLQl1bnNpZ25lZCBs b25nIGZsYWdzOw0KLQl1MzIgbWluLCBtYXg7DQotDQotCS8qIHN0cmVhbWluZyBpcyBub3QgYWN0 aXZlIGFueW1vcmUgKi8NCi0JaWYgKGlzYy0+c3RvcCkNCi0JCXJldHVybjsNCi0NCi0JaWYgKGN0 cmxzLT5oaXN0X3N0YXQgIT0gSElTVF9FTkFCTEVEKQ0KLQkJcmV0dXJuOw0KLQ0KLQlpc2NfaGlz dF9jb3VudChpc2MsICZtaW4sICZtYXgpOw0KLQljdHJscy0+aGlzdF9taW5tYXhbaGlzdF9pZF1b SElTVF9NSU5fSU5ERVhdID0gbWluOw0KLQljdHJscy0+aGlzdF9taW5tYXhbaGlzdF9pZF1bSElT VF9NQVhfSU5ERVhdID0gbWF4Ow0KLQ0KLQlpZiAoaGlzdF9pZCAhPSBJU0NfSElTX0NGR19NT0RF X0IpIHsNCi0JCWhpc3RfaWQrKzsNCi0JfSBlbHNlIHsNCi0JCWlzY193Yl91cGRhdGUoY3RybHMp Ow0KLQkJaGlzdF9pZCA9IElTQ19ISVNfQ0ZHX01PREVfR1I7DQotCX0NCi0NCi0JY3RybHMtPmhp c3RfaWQgPSBoaXN0X2lkOw0KLQliYXlzZWwgPSBpc2MtPmNvbmZpZy5zZF9mb3JtYXQtPmNmYV9i YXljZmcgPDwgSVNDX0hJU19DRkdfQkFZU0VMX1NISUZUOw0KLQ0KLQkvKiBpZiBubyBtb3JlIGF1 dG8gd2hpdGUgYmFsYW5jZSwgcmVzZXQgY29udHJvbHMuICovDQotCWlmIChjdHJscy0+YXdiID09 IElTQ19XQl9OT05FKQ0KLQkJaXNjX3Jlc2V0X2F3Yl9jdHJscyhpc2MpOw0KLQ0KLQlwbV9ydW50 aW1lX2dldF9zeW5jKGlzYy0+ZGV2KTsNCi0NCi0JLyoNCi0JICogb25seSB1cGRhdGUgaWYgd2Ug aGF2ZSBhbGwgdGhlIHJlcXVpcmVkIGhpc3RvZ3JhbXMgYW5kIGNvbnRyb2xzDQotCSAqIGlmIGF3 YiBoYXMgYmVlbiBkaXNhYmxlZCwgd2UgbmVlZCB0byByZXNldCByZWdpc3RlcnMgYXMgd2VsbC4N Ci0JICovDQotCWlmIChoaXN0X2lkID09IElTQ19ISVNfQ0ZHX01PREVfR1IgfHwgY3RybHMtPmF3 YiA9PSBJU0NfV0JfTk9ORSkgew0KLQkJLyoNCi0JCSAqIEl0IG1heSBoYXBwZW4gdGhhdCBETUEg RG9uZSBJUlEgd2lsbCB0cmlnZ2VyIHdoaWxlIHdlIGFyZQ0KLQkJICogdXBkYXRpbmcgd2hpdGUg YmFsYW5jZSByZWdpc3RlcnMgaGVyZS4NCi0JCSAqIEluIHRoYXQgY2FzZSwgb25seSBwYXJ0cyBv ZiB0aGUgY29udHJvbHMgaGF2ZSBiZWVuIHVwZGF0ZWQuDQotCQkgKiBXZSBjYW4gYXZvaWQgdGhh dCBieSBsb2NraW5nIHRoZSBzZWN0aW9uLg0KLQkJICovDQotCQlzcGluX2xvY2tfaXJxc2F2ZSgm aXNjLT5hd2JfbG9jaywgZmxhZ3MpOw0KLQkJaXNjX3VwZGF0ZV9hd2JfY3RybHMoaXNjKTsNCi0J CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzYy0+YXdiX2xvY2ssIGZsYWdzKTsNCi0NCi0JCS8q DQotCQkgKiBpZiB3ZSBhcmUgZG9pbmcganVzdCB0aGUgb25lIHRpbWUgd2hpdGUgYmFsYW5jZSBh ZGp1c3RtZW50LA0KLQkJICogd2UgYXJlIGJhc2ljYWxseSBkb25lLg0KLQkJICovDQotCQlpZiAo Y3RybHMtPmF3YiA9PSBJU0NfV0JfT05FVElNRSkgew0KLQkJCXY0bDJfaW5mbygmaXNjLT52NGwy X2RldiwNCi0JCQkJICAiQ29tcGxldGVkIG9uZSB0aW1lIHdoaXRlLWJhbGFuY2UgYWRqdXN0bWVu dC5cbiIpOw0KLQkJCWN0cmxzLT5hd2IgPSBJU0NfV0JfTk9ORTsNCi0JCX0NCi0JfQ0KLQlyZWdt YXBfd3JpdGUocmVnbWFwLCBJU0NfSElTX0NGRywgaGlzdF9pZCB8IGJheXNlbCB8IElTQ19ISVNf Q0ZHX1JBUik7DQotCWlzY191cGRhdGVfcHJvZmlsZShpc2MpOw0KLQkvKiBpZiBhd2IgaGFzIGJl ZW4gZGlzYWJsZWQsIHdlIGRvbid0IG5lZWQgdG8gc3RhcnQgYW5vdGhlciBoaXN0b2dyYW0gKi8N Ci0JaWYgKGN0cmxzLT5hd2IpDQotCQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfQ1RSTEVOLCBJ U0NfQ1RSTF9ISVNSRVEpOw0KLQ0KLQlwbV9ydW50aW1lX3B1dF9zeW5jKGlzYy0+ZGV2KTsNCi19 DQotDQotc3RhdGljIGludCBpc2Nfc19jdHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpDQotew0K LQlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gY29udGFpbmVyX29mKGN0cmwtPmhhbmRsZXIsDQot CQkJCQkgICAgIHN0cnVjdCBpc2NfZGV2aWNlLCBjdHJscy5oYW5kbGVyKTsNCi0Jc3RydWN0IGlz Y19jdHJscyAqY3RybHMgPSAmaXNjLT5jdHJsczsNCi0NCi0JaWYgKGN0cmwtPmZsYWdzICYgVjRM Ml9DVFJMX0ZMQUdfSU5BQ1RJVkUpDQotCQlyZXR1cm4gMDsNCi0NCi0Jc3dpdGNoIChjdHJsLT5p ZCkgew0KLQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6DQotCQljdHJscy0+YnJpZ2h0bmVzcyA9 IGN0cmwtPnZhbCAmIElTQ19DQkNfQlJJR0hUX01BU0s7DQotCQlicmVhazsNCi0JY2FzZSBWNEwy X0NJRF9DT05UUkFTVDoNCi0JCWN0cmxzLT5jb250cmFzdCA9IGN0cmwtPnZhbCAmIElTQ19DQkNf Q09OVFJBU1RfTUFTSzsNCi0JCWJyZWFrOw0KLQljYXNlIFY0TDJfQ0lEX0dBTU1BOg0KLQkJY3Ry bHMtPmdhbW1hX2luZGV4ID0gY3RybC0+dmFsOw0KLQkJYnJlYWs7DQotCWNhc2UgVjRMMl9DSURf QVVUT19XSElURV9CQUxBTkNFOg0KLQkJaWYgKGN0cmwtPnZhbCA9PSAxKQ0KLQkJCWN0cmxzLT5h d2IgPSBJU0NfV0JfQVVUTzsNCi0JCWVsc2UNCi0JCQljdHJscy0+YXdiID0gSVNDX1dCX05PTkU7 DQotDQotCQkvKiB3ZSBkaWQgbm90IGNvbmZpZ3VyZSBJU0MgeWV0ICovDQotCQlpZiAoIWlzYy0+ Y29uZmlnLnNkX2Zvcm1hdCkNCi0JCQlicmVhazsNCi0NCi0JCWlmIChjdHJscy0+aGlzdF9zdGF0 ICE9IEhJU1RfRU5BQkxFRCkNCi0JCQlpc2NfcmVzZXRfYXdiX2N0cmxzKGlzYyk7DQotDQotCQlp ZiAoaXNjLT5jdHJscy5hd2IgPT0gSVNDX1dCX0FVVE8gJiYNCi0JCSAgICB2YjJfaXNfc3RyZWFt aW5nKCZpc2MtPnZiMl92aWRxKSAmJg0KLQkJICAgIElTQ19JU19GT1JNQVRfUkFXKGlzYy0+Y29u ZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlKSkNCi0JCQlpc2Nfc2V0X2hpc3RvZ3JhbShpc2MsIHRy dWUpOw0KLQ0KLQkJYnJlYWs7DQotCWNhc2UgVjRMMl9DSURfRE9fV0hJVEVfQkFMQU5DRToNCi0J CS8qIGlmIEFXQiBpcyBlbmFibGVkLCBkbyBub3RoaW5nICovDQotCQlpZiAoY3RybHMtPmF3YiA9 PSBJU0NfV0JfQVVUTykNCi0JCQlyZXR1cm4gMDsNCi0NCi0JCWN0cmxzLT5hd2IgPSBJU0NfV0Jf T05FVElNRTsNCi0JCWlzY19zZXRfaGlzdG9ncmFtKGlzYywgdHJ1ZSk7DQotCQl2NGwyX2RiZygx LCBkZWJ1ZywgJmlzYy0+djRsMl9kZXYsDQotCQkJICJPbmUgdGltZSB3aGl0ZS1iYWxhbmNlIHN0 YXJ0ZWQuXG4iKTsNCi0JCWJyZWFrOw0KLQlkZWZhdWx0Og0KLQkJcmV0dXJuIC1FSU5WQUw7DQot CX0NCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJs X29wcyBpc2NfY3RybF9vcHMgPSB7DQotCS5zX2N0cmwJPSBpc2Nfc19jdHJsLA0KLX07DQotDQot c3RhdGljIGludCBpc2NfY3RybF9pbml0KHN0cnVjdCBpc2NfZGV2aWNlICppc2MpDQotew0KLQlj b25zdCBzdHJ1Y3QgdjRsMl9jdHJsX29wcyAqb3BzID0gJmlzY19jdHJsX29wczsNCi0Jc3RydWN0 IGlzY19jdHJscyAqY3RybHMgPSAmaXNjLT5jdHJsczsNCi0Jc3RydWN0IHY0bDJfY3RybF9oYW5k bGVyICpoZGwgPSAmY3RybHMtPmhhbmRsZXI7DQotCWludCByZXQ7DQotDQotCWN0cmxzLT5oaXN0 X3N0YXQgPSBISVNUX0lOSVQ7DQotCWlzY19yZXNldF9hd2JfY3RybHMoaXNjKTsNCi0NCi0JcmV0 ID0gdjRsMl9jdHJsX2hhbmRsZXJfaW5pdChoZGwsIDUpOw0KLQlpZiAocmV0IDwgMCkNCi0JCXJl dHVybiByZXQ7DQotDQotCWN0cmxzLT5icmlnaHRuZXNzID0gMDsNCi0JY3RybHMtPmNvbnRyYXN0 ID0gMjU2Ow0KLQ0KLQl2NGwyX2N0cmxfbmV3X3N0ZChoZGwsIG9wcywgVjRMMl9DSURfQlJJR0hU TkVTUywgLTEwMjQsIDEwMjMsIDEsIDApOw0KLQl2NGwyX2N0cmxfbmV3X3N0ZChoZGwsIG9wcywg VjRMMl9DSURfQ09OVFJBU1QsIC0yMDQ4LCAyMDQ3LCAxLCAyNTYpOw0KLQl2NGwyX2N0cmxfbmV3 X3N0ZChoZGwsIG9wcywgVjRMMl9DSURfR0FNTUEsIDAsIEdBTU1BX01BWCwgMSwgMik7DQotCXY0 bDJfY3RybF9uZXdfc3RkKGhkbCwgb3BzLCBWNEwyX0NJRF9BVVRPX1dISVRFX0JBTEFOQ0UsIDAs IDEsIDEsIDEpOw0KLQ0KLQkvKiBkb193aGl0ZV9iYWxhbmNlIGlzIGEgYnV0dG9uLCBzbyBtaW4s bWF4LHN0ZXAsZGVmYXVsdCBhcmUgaWdub3JlZCAqLw0KLQlpc2MtPmRvX3diX2N0cmwgPSB2NGwy X2N0cmxfbmV3X3N0ZChoZGwsIG9wcywgVjRMMl9DSURfRE9fV0hJVEVfQkFMQU5DRSwNCi0JCQkJ CSAgICAwLCAwLCAwLCAwKTsNCi0NCi0JdjRsMl9jdHJsX2FjdGl2YXRlKGlzYy0+ZG9fd2JfY3Ry bCwgZmFsc2UpOw0KLQ0KLQl2NGwyX2N0cmxfaGFuZGxlcl9zZXR1cChoZGwpOw0KLQ0KLQlyZXR1 cm4gMDsNCi19DQotDQotc3RhdGljIGludCBpc2NfYXN5bmNfYm91bmQoc3RydWN0IHY0bDJfYXN5 bmNfbm90aWZpZXIgKm5vdGlmaWVyLA0KLQkJCSAgICBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRl diwNCi0JCQkgICAgc3RydWN0IHY0bDJfYXN5bmNfc3ViZGV2ICphc2QpDQotew0KLQlzdHJ1Y3Qg aXNjX2RldmljZSAqaXNjID0gY29udGFpbmVyX29mKG5vdGlmaWVyLT52NGwyX2RldiwNCi0JCQkJ CSAgICAgIHN0cnVjdCBpc2NfZGV2aWNlLCB2NGwyX2Rldik7DQotCXN0cnVjdCBpc2Nfc3ViZGV2 X2VudGl0eSAqc3ViZGV2X2VudGl0eSA9DQotCQljb250YWluZXJfb2Yobm90aWZpZXIsIHN0cnVj dCBpc2Nfc3ViZGV2X2VudGl0eSwgbm90aWZpZXIpOw0KLQ0KLQlpZiAodmlkZW9faXNfcmVnaXN0 ZXJlZCgmaXNjLT52aWRlb19kZXYpKSB7DQotCQl2NGwyX2VycigmaXNjLT52NGwyX2RldiwgIm9u bHkgc3VwcG9ydHMgb25lIHN1Yi1kZXZpY2UuXG4iKTsNCi0JCXJldHVybiAtRUJVU1k7DQotCX0N Ci0NCi0Jc3ViZGV2X2VudGl0eS0+c2QgPSBzdWJkZXY7DQotDQotCXJldHVybiAwOw0KLX0NCi0N Ci1zdGF0aWMgdm9pZCBpc2NfYXN5bmNfdW5iaW5kKHN0cnVjdCB2NGwyX2FzeW5jX25vdGlmaWVy ICpub3RpZmllciwNCi0JCQkgICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldiwNCi0JCQkg ICAgICBzdHJ1Y3QgdjRsMl9hc3luY19zdWJkZXYgKmFzZCkNCi17DQotCXN0cnVjdCBpc2NfZGV2 aWNlICppc2MgPSBjb250YWluZXJfb2Yobm90aWZpZXItPnY0bDJfZGV2LA0KLQkJCQkJICAgICAg c3RydWN0IGlzY19kZXZpY2UsIHY0bDJfZGV2KTsNCi0JY2FuY2VsX3dvcmtfc3luYygmaXNjLT5h d2Jfd29yayk7DQotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZpc2MtPnZpZGVvX2Rldik7DQot CXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoJmlzYy0+Y3RybHMuaGFuZGxlcik7DQotfQ0KLQ0KLXN0 YXRpYyBzdHJ1Y3QgaXNjX2Zvcm1hdCAqZmluZF9mb3JtYXRfYnlfY29kZSh1bnNpZ25lZCBpbnQg Y29kZSwgaW50ICppbmRleCkNCi17DQotCXN0cnVjdCBpc2NfZm9ybWF0ICpmbXQgPSAmZm9ybWF0 c19saXN0WzBdOw0KLQl1bnNpZ25lZCBpbnQgaTsNCi0NCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZ X1NJWkUoZm9ybWF0c19saXN0KTsgaSsrKSB7DQotCQlpZiAoZm10LT5tYnVzX2NvZGUgPT0gY29k ZSkgew0KLQkJCSppbmRleCA9IGk7DQotCQkJcmV0dXJuIGZtdDsNCi0JCX0NCi0NCi0JCWZtdCsr Ow0KLQl9DQotDQotCXJldHVybiBOVUxMOw0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY19mb3JtYXRz X2luaXQoc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCi17DQotCXN0cnVjdCBpc2NfZm9ybWF0ICpm bXQ7DQotCXN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2ID0gaXNjLT5jdXJyZW50X3N1YmRldi0+ c2Q7DQotCXVuc2lnbmVkIGludCBudW1fZm10cywgaSwgajsNCi0JdTMyIGxpc3Rfc2l6ZSA9IEFS UkFZX1NJWkUoZm9ybWF0c19saXN0KTsNCi0Jc3RydWN0IHY0bDJfc3ViZGV2X21idXNfY29kZV9l bnVtIG1idXNfY29kZSA9IHsNCi0JCS53aGljaCA9IFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJVkUs DQotCX07DQotDQotCW51bV9mbXRzID0gMDsNCi0Jd2hpbGUgKCF2NGwyX3N1YmRldl9jYWxsKHN1 YmRldiwgcGFkLCBlbnVtX21idXNfY29kZSwNCi0JICAgICAgIE5VTEwsICZtYnVzX2NvZGUpKSB7 DQotCQltYnVzX2NvZGUuaW5kZXgrKzsNCi0NCi0JCWZtdCA9IGZpbmRfZm9ybWF0X2J5X2NvZGUo bWJ1c19jb2RlLmNvZGUsICZpKTsNCi0JCWlmICghZm10KSB7DQotCQkJdjRsMl93YXJuKCZpc2Mt PnY0bDJfZGV2LCAiTWJ1cyBjb2RlICV4IG5vdCBzdXBwb3J0ZWRcbiIsDQotCQkJCSAgbWJ1c19j b2RlLmNvZGUpOw0KLQkJCWNvbnRpbnVlOw0KLQkJfQ0KLQ0KLQkJZm10LT5zZF9zdXBwb3J0ID0g dHJ1ZTsNCi0JCW51bV9mbXRzKys7DQotCX0NCi0NCi0JaWYgKCFudW1fZm10cykNCi0JCXJldHVy biAtRU5YSU87DQotDQotCWlzYy0+bnVtX3VzZXJfZm9ybWF0cyA9IG51bV9mbXRzOw0KLQlpc2Mt PnVzZXJfZm9ybWF0cyA9IGRldm1fa2NhbGxvYyhpc2MtPmRldiwNCi0JCQkJCSBudW1fZm10cywg c2l6ZW9mKCppc2MtPnVzZXJfZm9ybWF0cyksDQotCQkJCQkgR0ZQX0tFUk5FTCk7DQotCWlmICgh aXNjLT51c2VyX2Zvcm1hdHMpDQotCQlyZXR1cm4gLUVOT01FTTsNCi0NCi0JZm10ID0gJmZvcm1h dHNfbGlzdFswXTsNCi0JZm9yIChpID0gMCwgaiA9IDA7IGkgPCBsaXN0X3NpemU7IGkrKykgew0K LQkJaWYgKGZtdC0+c2Rfc3VwcG9ydCkNCi0JCQlpc2MtPnVzZXJfZm9ybWF0c1tqKytdID0gZm10 Ow0KLQkJZm10Kys7DQotCX0NCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNj X3NldF9kZWZhdWx0X2ZtdChzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KLXsNCi0Jc3RydWN0IHY0 bDJfZm9ybWF0IGYgPSB7DQotCQkudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwN Ci0JCS5mbXQucGl4ID0gew0KLQkJCS53aWR0aAkJPSBWR0FfV0lEVEgsDQotCQkJLmhlaWdodAkJ PSBWR0FfSEVJR0hULA0KLQkJCS5maWVsZAkJPSBWNEwyX0ZJRUxEX05PTkUsDQotCQkJLnBpeGVs Zm9ybWF0CT0gaXNjLT51c2VyX2Zvcm1hdHNbMF0tPmZvdXJjYywNCi0JCX0sDQotCX07DQotCWlu dCByZXQ7DQotDQotCXJldCA9IGlzY190cnlfZm10KGlzYywgJmYsIE5VTEwpOw0KLQlpZiAocmV0 KQ0KLQkJcmV0dXJuIHJldDsNCi0NCi0JaXNjLT5mbXQgPSBmOw0KLQlyZXR1cm4gMDsNCi19DQot DQotc3RhdGljIGludCBpc2NfYXN5bmNfY29tcGxldGUoc3RydWN0IHY0bDJfYXN5bmNfbm90aWZp ZXIgKm5vdGlmaWVyKQ0KLXsNCi0Jc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IGNvbnRhaW5lcl9v Zihub3RpZmllci0+djRsMl9kZXYsDQotCQkJCQkgICAgICBzdHJ1Y3QgaXNjX2RldmljZSwgdjRs Ml9kZXYpOw0KLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gJmlzYy0+dmlkZW9fZGV2Ow0K LQlzdHJ1Y3QgdmIyX3F1ZXVlICpxID0gJmlzYy0+dmIyX3ZpZHE7DQotCWludCByZXQ7DQotDQot CUlOSVRfV09SSygmaXNjLT5hd2Jfd29yaywgaXNjX2F3Yl93b3JrKTsNCi0NCi0JcmV0ID0gdjRs Ml9kZXZpY2VfcmVnaXN0ZXJfc3ViZGV2X25vZGVzKCZpc2MtPnY0bDJfZGV2KTsNCi0JaWYgKHJl dCA8IDApIHsNCi0JCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVy IHN1YmRldiBub2Rlc1xuIik7DQotCQlyZXR1cm4gcmV0Ow0KLQl9DQotDQotCWlzYy0+Y3VycmVu dF9zdWJkZXYgPSBjb250YWluZXJfb2Yobm90aWZpZXIsDQotCQkJCQkgICBzdHJ1Y3QgaXNjX3N1 YmRldl9lbnRpdHksIG5vdGlmaWVyKTsNCi0JbXV0ZXhfaW5pdCgmaXNjLT5sb2NrKTsNCi0JaW5p dF9jb21wbGV0aW9uKCZpc2MtPmNvbXApOw0KLQ0KLQkvKiBJbml0aWFsaXplIHZpZGVvYnVmMiBx dWV1ZSAqLw0KLQlxLT50eXBlCQkJPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7DQotCXEt PmlvX21vZGVzCQk9IFZCMl9NTUFQIHwgVkIyX0RNQUJVRiB8IFZCMl9SRUFEOw0KLQlxLT5kcnZf cHJpdgkJPSBpc2M7DQotCXEtPmJ1Zl9zdHJ1Y3Rfc2l6ZQk9IHNpemVvZihzdHJ1Y3QgaXNjX2J1 ZmZlcik7DQotCXEtPm9wcwkJCT0gJmlzY192YjJfb3BzOw0KLQlxLT5tZW1fb3BzCQk9ICZ2YjJf ZG1hX2NvbnRpZ19tZW1vcHM7DQotCXEtPnRpbWVzdGFtcF9mbGFncwk9IFY0TDJfQlVGX0ZMQUdf VElNRVNUQU1QX01PTk9UT05JQzsNCi0JcS0+bG9jawkJCT0gJmlzYy0+bG9jazsNCi0JcS0+bWlu X2J1ZmZlcnNfbmVlZGVkCT0gMTsNCi0JcS0+ZGV2CQkJPSBpc2MtPmRldjsNCi0NCi0JcmV0ID0g dmIyX3F1ZXVlX2luaXQocSk7DQotCWlmIChyZXQgPCAwKSB7DQotCQl2NGwyX2VycigmaXNjLT52 NGwyX2RldiwNCi0JCQkgInZiMl9xdWV1ZV9pbml0KCkgZmFpbGVkOiAlZFxuIiwgcmV0KTsNCi0J CXJldHVybiByZXQ7DQotCX0NCi0NCi0JLyogSW5pdCB2aWRlbyBkbWEgcXVldWVzICovDQotCUlO SVRfTElTVF9IRUFEKCZpc2MtPmRtYV9xdWV1ZSk7DQotCXNwaW5fbG9ja19pbml0KCZpc2MtPmRt YV9xdWV1ZV9sb2NrKTsNCi0Jc3Bpbl9sb2NrX2luaXQoJmlzYy0+YXdiX2xvY2spOw0KLQ0KLQly ZXQgPSBpc2NfZm9ybWF0c19pbml0KGlzYyk7DQotCWlmIChyZXQgPCAwKSB7DQotCQl2NGwyX2Vy cigmaXNjLT52NGwyX2RldiwNCi0JCQkgIkluaXQgZm9ybWF0IGZhaWxlZDogJWRcbiIsIHJldCk7 DQotCQlyZXR1cm4gcmV0Ow0KLQl9DQotDQotCXJldCA9IGlzY19zZXRfZGVmYXVsdF9mbXQoaXNj KTsNCi0JaWYgKHJldCkgew0KLQkJdjRsMl9lcnIoJmlzYy0+djRsMl9kZXYsICJDb3VsZCBub3Qg c2V0IGRlZmF1bHQgZm9ybWF0XG4iKTsNCi0JCXJldHVybiByZXQ7DQotCX0NCi0NCi0JcmV0ID0g aXNjX2N0cmxfaW5pdChpc2MpOw0KLQlpZiAocmV0KSB7DQotCQl2NGwyX2VycigmaXNjLT52NGwy X2RldiwgIkluaXQgaXNjIGN0cm9scyBmYWlsZWQ6ICVkXG4iLCByZXQpOw0KLQkJcmV0dXJuIHJl dDsNCi0JfQ0KLQ0KLQkvKiBSZWdpc3RlciB2aWRlbyBkZXZpY2UgKi8NCi0Jc3Ryc2NweSh2ZGV2 LT5uYW1lLCBBVE1FTF9JU0NfTkFNRSwgc2l6ZW9mKHZkZXYtPm5hbWUpKTsNCi0JdmRldi0+cmVs ZWFzZQkJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eTsNCi0JdmRldi0+Zm9wcwkJPSAmaXNj X2ZvcHM7DQotCXZkZXYtPmlvY3RsX29wcwkJPSAmaXNjX2lvY3RsX29wczsNCi0JdmRldi0+djRs Ml9kZXYJCT0gJmlzYy0+djRsMl9kZXY7DQotCXZkZXYtPnZmbF9kaXIJCT0gVkZMX0RJUl9SWDsN Ci0JdmRldi0+cXVldWUJCT0gcTsNCi0JdmRldi0+bG9jawkJPSAmaXNjLT5sb2NrOw0KLQl2ZGV2 LT5jdHJsX2hhbmRsZXIJPSAmaXNjLT5jdHJscy5oYW5kbGVyOw0KLQl2ZGV2LT5kZXZpY2VfY2Fw cwk9IFY0TDJfQ0FQX1NUUkVBTUlORyB8IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkU7DQotCXZpZGVv X3NldF9kcnZkYXRhKHZkZXYsIGlzYyk7DQotDQotCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2Rldmlj ZSh2ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCAtMSk7DQotCWlmIChyZXQgPCAwKSB7DQotCQl2NGwy X2VycigmaXNjLT52NGwyX2RldiwNCi0JCQkgInZpZGVvX3JlZ2lzdGVyX2RldmljZSBmYWlsZWQ6 ICVkXG4iLCByZXQpOw0KLQkJcmV0dXJuIHJldDsNCi0JfQ0KLQ0KLQlyZXR1cm4gMDsNCi19DQot DQotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2FzeW5jX25vdGlmaWVyX29wZXJhdGlvbnMgaXNj X2FzeW5jX29wcyA9IHsNCi0JLmJvdW5kID0gaXNjX2FzeW5jX2JvdW5kLA0KLQkudW5iaW5kID0g aXNjX2FzeW5jX3VuYmluZCwNCi0JLmNvbXBsZXRlID0gaXNjX2FzeW5jX2NvbXBsZXRlLA0KLX07 DQotDQotc3RhdGljIHZvaWQgaXNjX3N1YmRldl9jbGVhbnVwKHN0cnVjdCBpc2NfZGV2aWNlICpp c2MpDQotew0KLQlzdHJ1Y3QgaXNjX3N1YmRldl9lbnRpdHkgKnN1YmRldl9lbnRpdHk7DQotDQot CWxpc3RfZm9yX2VhY2hfZW50cnkoc3ViZGV2X2VudGl0eSwgJmlzYy0+c3ViZGV2X2VudGl0aWVz LCBsaXN0KSB7DQotCQl2NGwyX2FzeW5jX25vdGlmaWVyX3VucmVnaXN0ZXIoJnN1YmRldl9lbnRp dHktPm5vdGlmaWVyKTsNCi0JCXY0bDJfYXN5bmNfbm90aWZpZXJfY2xlYW51cCgmc3ViZGV2X2Vu dGl0eS0+bm90aWZpZXIpOw0KLQl9DQotDQotCUlOSVRfTElTVF9IRUFEKCZpc2MtPnN1YmRldl9l bnRpdGllcyk7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX3BpcGVsaW5lX2luaXQoc3RydWN0IGlz Y19kZXZpY2UgKmlzYykNCi17DQotCXN0cnVjdCBkZXZpY2UgKmRldiA9IGlzYy0+ZGV2Ow0KLQlz dHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBpc2MtPnJlZ21hcDsNCi0Jc3RydWN0IHJlZ21hcF9maWVs ZCAqcmVnczsNCi0JdW5zaWduZWQgaW50IGk7DQotDQotCS8qIFdCLS0+Q0ZBLS0+Q0MtLT5HQU0t LT5DU0MtLT5DQkMtLT5TVUI0MjItLT5TVUI0MjAgKi8NCi0JY29uc3Qgc3RydWN0IHJlZ19maWVs ZCByZWdmaWVsZHNbSVNDX1BJUEVfTElORV9OT0RFX05VTV0gPSB7DQotCQlSRUdfRklFTEQoSVND X1dCX0NUUkwsIDAsIDApLA0KLQkJUkVHX0ZJRUxEKElTQ19DRkFfQ1RSTCwgMCwgMCksDQotCQlS RUdfRklFTEQoSVNDX0NDX0NUUkwsIDAsIDApLA0KLQkJUkVHX0ZJRUxEKElTQ19HQU1fQ1RSTCwg MCwgMCksDQotCQlSRUdfRklFTEQoSVNDX0dBTV9DVFJMLCAxLCAxKSwNCi0JCVJFR19GSUVMRChJ U0NfR0FNX0NUUkwsIDIsIDIpLA0KLQkJUkVHX0ZJRUxEKElTQ19HQU1fQ1RSTCwgMywgMyksDQot CQlSRUdfRklFTEQoSVNDX0NTQ19DVFJMLCAwLCAwKSwNCi0JCVJFR19GSUVMRChJU0NfQ0JDX0NU UkwsIDAsIDApLA0KLQkJUkVHX0ZJRUxEKElTQ19TVUI0MjJfQ1RSTCwgMCwgMCksDQotCQlSRUdf RklFTEQoSVNDX1NVQjQyMF9DVFJMLCAwLCAwKSwNCi0JfTsNCi0NCi0JZm9yIChpID0gMDsgaSA8 IElTQ19QSVBFX0xJTkVfTk9ERV9OVU07IGkrKykgew0KLQkJcmVncyA9IGRldm1fcmVnbWFwX2Zp ZWxkX2FsbG9jKGRldiwgcmVnbWFwLCByZWdmaWVsZHNbaV0pOw0KLQkJaWYgKElTX0VSUihyZWdz KSkNCi0JCQlyZXR1cm4gUFRSX0VSUihyZWdzKTsNCi0NCi0JCWlzYy0+cGlwZWxpbmVbaV0gPSAg cmVnczsNCi0JfQ0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotc3RhdGljIGludCBpc2NfcGFyc2Vf ZHQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KLXsNCi0Jc3Ry dWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsNCi0Jc3RydWN0IGRldmljZV9ub2Rl ICplcG4gPSBOVUxMLCAqcmVtOw0KLQlzdHJ1Y3QgaXNjX3N1YmRldl9lbnRpdHkgKnN1YmRldl9l bnRpdHk7DQotCXVuc2lnbmVkIGludCBmbGFnczsNCi0JaW50IHJldDsNCi0NCi0JSU5JVF9MSVNU X0hFQUQoJmlzYy0+c3ViZGV2X2VudGl0aWVzKTsNCi0NCi0Jd2hpbGUgKDEpIHsNCi0JCXN0cnVj dCB2NGwyX2Z3bm9kZV9lbmRwb2ludCB2NGwyX2VwbiA9IHsgLmJ1c190eXBlID0gMCB9Ow0KLQ0K LQkJZXBuID0gb2ZfZ3JhcGhfZ2V0X25leHRfZW5kcG9pbnQobnAsIGVwbik7DQotCQlpZiAoIWVw bikNCi0JCQlyZXR1cm4gMDsNCi0NCi0JCXJlbSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydF9w YXJlbnQoZXBuKTsNCi0JCWlmICghcmVtKSB7DQotCQkJZGV2X25vdGljZShkZXYsICJSZW1vdGUg ZGV2aWNlIGF0ICVwT0Ygbm90IGZvdW5kXG4iLA0KLQkJCQkgICBlcG4pOw0KLQkJCWNvbnRpbnVl Ow0KLQkJfQ0KLQ0KLQkJcmV0ID0gdjRsMl9md25vZGVfZW5kcG9pbnRfcGFyc2Uob2ZfZndub2Rl X2hhbmRsZShlcG4pLA0KLQkJCQkJCSAmdjRsMl9lcG4pOw0KLQkJaWYgKHJldCkgew0KLQkJCW9m X25vZGVfcHV0KHJlbSk7DQotCQkJcmV0ID0gLUVJTlZBTDsNCi0JCQlkZXZfZXJyKGRldiwgIkNv dWxkIG5vdCBwYXJzZSB0aGUgZW5kcG9pbnRcbiIpOw0KLQkJCWJyZWFrOw0KLQkJfQ0KLQ0KLQkJ c3ViZGV2X2VudGl0eSA9IGRldm1fa3phbGxvYyhkZXYsDQotCQkJCQkgIHNpemVvZigqc3ViZGV2 X2VudGl0eSksIEdGUF9LRVJORUwpOw0KLQkJaWYgKCFzdWJkZXZfZW50aXR5KSB7DQotCQkJb2Zf bm9kZV9wdXQocmVtKTsNCi0JCQlyZXQgPSAtRU5PTUVNOw0KLQkJCWJyZWFrOw0KLQkJfQ0KLQ0K LQkJLyogYXNkIHdpbGwgYmUgZnJlZWQgYnkgdGhlIHN1YnN5c3RlbSBvbmNlIGl0J3MgYWRkZWQg dG8gdGhlDQotCQkgKiBub3RpZmllciBsaXN0DQotCQkgKi8NCi0JCXN1YmRldl9lbnRpdHktPmFz ZCA9IGt6YWxsb2Moc2l6ZW9mKCpzdWJkZXZfZW50aXR5LT5hc2QpLA0KLQkJCQkJICAgICBHRlBf S0VSTkVMKTsNCi0JCWlmICghc3ViZGV2X2VudGl0eS0+YXNkKSB7DQotCQkJb2Zfbm9kZV9wdXQo cmVtKTsNCi0JCQlyZXQgPSAtRU5PTUVNOw0KLQkJCWJyZWFrOw0KLQkJfQ0KLQ0KLQkJZmxhZ3Mg PSB2NGwyX2Vwbi5idXMucGFyYWxsZWwuZmxhZ3M7DQotDQotCQlpZiAoZmxhZ3MgJiBWNEwyX01C VVNfSFNZTkNfQUNUSVZFX0xPVykNCi0JCQlzdWJkZXZfZW50aXR5LT5wZmVfY2ZnMCA9IElTQ19Q RkVfQ0ZHMF9IUE9MX0xPVzsNCi0NCi0JCWlmIChmbGFncyAmIFY0TDJfTUJVU19WU1lOQ19BQ1RJ VkVfTE9XKQ0KLQkJCXN1YmRldl9lbnRpdHktPnBmZV9jZmcwIHw9IElTQ19QRkVfQ0ZHMF9WUE9M X0xPVzsNCi0NCi0JCWlmIChmbGFncyAmIFY0TDJfTUJVU19QQ0xLX1NBTVBMRV9GQUxMSU5HKQ0K LQkJCXN1YmRldl9lbnRpdHktPnBmZV9jZmcwIHw9IElTQ19QRkVfQ0ZHMF9QUE9MX0xPVzsNCi0N Ci0JCWlmICh2NGwyX2Vwbi5idXNfdHlwZSA9PSBWNEwyX01CVVNfQlQ2NTYpDQotCQkJc3ViZGV2 X2VudGl0eS0+cGZlX2NmZzAgfD0gSVNDX1BGRV9DRkcwX0NDSVJfQ1JDIHwNCi0JCQkJCUlTQ19Q RkVfQ0ZHMF9DQ0lSNjU2Ow0KLQ0KLQkJc3ViZGV2X2VudGl0eS0+YXNkLT5tYXRjaF90eXBlID0g VjRMMl9BU1lOQ19NQVRDSF9GV05PREU7DQotCQlzdWJkZXZfZW50aXR5LT5hc2QtPm1hdGNoLmZ3 bm9kZSA9DQotCQkJb2ZfZndub2RlX2hhbmRsZShyZW0pOw0KLQkJbGlzdF9hZGRfdGFpbCgmc3Vi ZGV2X2VudGl0eS0+bGlzdCwgJmlzYy0+c3ViZGV2X2VudGl0aWVzKTsNCi0JfQ0KLQ0KLQlvZl9u b2RlX3B1dChlcG4pOw0KLQlyZXR1cm4gcmV0Ow0KLX0NCi0NCi0vKiByZWdtYXAgY29uZmlndXJh dGlvbiAqLw0KLSNkZWZpbmUgQVRNRUxfSVNDX1JFR19NQVggICAgMHhiZmMNCi1zdGF0aWMgY29u c3Qgc3RydWN0IHJlZ21hcF9jb25maWcgaXNjX3JlZ21hcF9jb25maWcgPSB7DQotCS5yZWdfYml0 cyAgICAgICA9IDMyLA0KLQkucmVnX3N0cmlkZSAgICAgPSA0LA0KLQkudmFsX2JpdHMgICAgICAg PSAzMiwNCi0JLm1heF9yZWdpc3Rlcgk9IEFUTUVMX0lTQ19SRUdfTUFYLA0KLX07DQotDQotc3Rh dGljIGludCBhdG1lbF9pc2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCi17 DQotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7DQotCXN0cnVjdCBpc2NfZGV2aWNl ICppc2M7DQotCXN0cnVjdCByZXNvdXJjZSAqcmVzOw0KLQl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7 DQotCXN0cnVjdCBpc2Nfc3ViZGV2X2VudGl0eSAqc3ViZGV2X2VudGl0eTsNCi0JaW50IGlycTsN Ci0JaW50IHJldDsNCi0NCi0JaXNjID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCppc2MpLCBH RlBfS0VSTkVMKTsNCi0JaWYgKCFpc2MpDQotCQlyZXR1cm4gLUVOT01FTTsNCi0NCi0JcGxhdGZv cm1fc2V0X2RydmRhdGEocGRldiwgaXNjKTsNCi0JaXNjLT5kZXYgPSBkZXY7DQotDQotCXJlcyA9 IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7DQotCWlvX2Jh c2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOw0KLQlpZiAoSVNfRVJSKGlvX2Jh c2UpKQ0KLQkJcmV0dXJuIFBUUl9FUlIoaW9fYmFzZSk7DQotDQotCWlzYy0+cmVnbWFwID0gZGV2 bV9yZWdtYXBfaW5pdF9tbWlvKGRldiwgaW9fYmFzZSwgJmlzY19yZWdtYXBfY29uZmlnKTsNCi0J aWYgKElTX0VSUihpc2MtPnJlZ21hcCkpIHsNCi0JCXJldCA9IFBUUl9FUlIoaXNjLT5yZWdtYXAp Ow0KLQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gaW5pdCByZWdpc3RlciBtYXA6ICVkXG4iLCBy ZXQpOw0KLQkJcmV0dXJuIHJldDsNCi0JfQ0KLQ0KLQlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBk ZXYsIDApOw0KLQlpZiAoaXJxIDwgMCkgew0KLQkJcmV0ID0gaXJxOw0KLQkJZGV2X2VycihkZXYs ICJmYWlsZWQgdG8gZ2V0IGlycTogJWRcbiIsIHJldCk7DQotCQlyZXR1cm4gcmV0Ow0KLQl9DQot DQotCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBpcnEsIGlzY19pbnRlcnJ1cHQsIDAsDQot CQkJICAgICAgIEFUTUVMX0lTQ19OQU1FLCBpc2MpOw0KLQlpZiAocmV0IDwgMCkgew0KLQkJZGV2 X2VycihkZXYsICJjYW4ndCByZWdpc3RlciBJU1IgZm9yIElSUSAldSAocmV0PSVpKVxuIiwNCi0J CQlpcnEsIHJldCk7DQotCQlyZXR1cm4gcmV0Ow0KLQl9DQotDQotCXJldCA9IGlzY19waXBlbGlu ZV9pbml0KGlzYyk7DQotCWlmIChyZXQpDQotCQlyZXR1cm4gcmV0Ow0KLQ0KLQlpc2MtPmhjbG9j ayA9IGRldm1fY2xrX2dldChkZXYsICJoY2xvY2siKTsNCi0JaWYgKElTX0VSUihpc2MtPmhjbG9j aykpIHsNCi0JCXJldCA9IFBUUl9FUlIoaXNjLT5oY2xvY2spOw0KLQkJZGV2X2VycihkZXYsICJm YWlsZWQgdG8gZ2V0IGhjbG9jazogJWRcbiIsIHJldCk7DQotCQlyZXR1cm4gcmV0Ow0KLQl9DQot DQotCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShpc2MtPmhjbG9jayk7DQotCWlmIChyZXQpIHsN Ci0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBoY2xvY2s6ICVkXG4iLCByZXQpOw0K LQkJcmV0dXJuIHJldDsNCi0JfQ0KLQ0KLQlyZXQgPSBpc2NfY2xrX2luaXQoaXNjKTsNCi0JaWYg KHJldCkgew0KLQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gaW5pdCBpc2MgY2xvY2s6ICVkXG4i LCByZXQpOw0KLQkJZ290byB1bnByZXBhcmVfaGNsazsNCi0JfQ0KLQ0KLQlpc2MtPmlzcGNrID0g aXNjLT5pc2NfY2xrc1tJU0NfSVNQQ0tdLmNsazsNCi0NCi0JcmV0ID0gY2xrX3ByZXBhcmVfZW5h YmxlKGlzYy0+aXNwY2spOw0KLQlpZiAocmV0KSB7DQotCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0 byBlbmFibGUgaXNwY2s6ICVkXG4iLCByZXQpOw0KLQkJZ290byB1bnByZXBhcmVfaGNsazsNCi0J fQ0KLQ0KLQkvKiBpc3BjayBzaG91bGQgYmUgZ3JlYXRlciBvciBlcXVhbCB0byBoY2xvY2sgKi8N Ci0JcmV0ID0gY2xrX3NldF9yYXRlKGlzYy0+aXNwY2ssIGNsa19nZXRfcmF0ZShpc2MtPmhjbG9j aykpOw0KLQlpZiAocmV0KSB7DQotCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBzZXQgaXNwY2sg cmF0ZTogJWRcbiIsIHJldCk7DQotCQlnb3RvIHVucHJlcGFyZV9jbGs7DQotCX0NCi0NCi0JcmV0 ID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoZGV2LCAmaXNjLT52NGwyX2Rldik7DQotCWlmIChyZXQp IHsNCi0JCWRldl9lcnIoZGV2LCAidW5hYmxlIHRvIHJlZ2lzdGVyIHY0bDIgZGV2aWNlLlxuIik7 DQotCQlnb3RvIHVucHJlcGFyZV9jbGs7DQotCX0NCi0NCi0JcmV0ID0gaXNjX3BhcnNlX2R0KGRl diwgaXNjKTsNCi0JaWYgKHJldCkgew0KLQkJZGV2X2VycihkZXYsICJmYWlsIHRvIHBhcnNlIGRl dmljZSB0cmVlXG4iKTsNCi0JCWdvdG8gdW5yZWdpc3Rlcl92NGwyX2RldmljZTsNCi0JfQ0KLQ0K LQlpZiAobGlzdF9lbXB0eSgmaXNjLT5zdWJkZXZfZW50aXRpZXMpKSB7DQotCQlkZXZfZXJyKGRl diwgIm5vIHN1YmRldiBmb3VuZFxuIik7DQotCQlyZXQgPSAtRU5PREVWOw0KLQkJZ290byB1bnJl Z2lzdGVyX3Y0bDJfZGV2aWNlOw0KLQl9DQotDQotCWxpc3RfZm9yX2VhY2hfZW50cnkoc3ViZGV2 X2VudGl0eSwgJmlzYy0+c3ViZGV2X2VudGl0aWVzLCBsaXN0KSB7DQotCQl2NGwyX2FzeW5jX25v dGlmaWVyX2luaXQoJnN1YmRldl9lbnRpdHktPm5vdGlmaWVyKTsNCi0NCi0JCXJldCA9IHY0bDJf YXN5bmNfbm90aWZpZXJfYWRkX3N1YmRldigmc3ViZGV2X2VudGl0eS0+bm90aWZpZXIsDQotCQkJ CQkJICAgICBzdWJkZXZfZW50aXR5LT5hc2QpOw0KLQkJaWYgKHJldCkgew0KLQkJCWZ3bm9kZV9o YW5kbGVfcHV0KHN1YmRldl9lbnRpdHktPmFzZC0+bWF0Y2guZndub2RlKTsNCi0JCQlrZnJlZShz dWJkZXZfZW50aXR5LT5hc2QpOw0KLQkJCWdvdG8gY2xlYW51cF9zdWJkZXY7DQotCQl9DQotDQot CQlzdWJkZXZfZW50aXR5LT5ub3RpZmllci5vcHMgPSAmaXNjX2FzeW5jX29wczsNCi0NCi0JCXJl dCA9IHY0bDJfYXN5bmNfbm90aWZpZXJfcmVnaXN0ZXIoJmlzYy0+djRsMl9kZXYsDQotCQkJCQkJ ICAgJnN1YmRldl9lbnRpdHktPm5vdGlmaWVyKTsNCi0JCWlmIChyZXQpIHsNCi0JCQlkZXZfZXJy KGRldiwgImZhaWwgdG8gcmVnaXN0ZXIgYXN5bmMgbm90aWZpZXJcbiIpOw0KLQkJCWdvdG8gY2xl YW51cF9zdWJkZXY7DQotCQl9DQotDQotCQlpZiAodmlkZW9faXNfcmVnaXN0ZXJlZCgmaXNjLT52 aWRlb19kZXYpKQ0KLQkJCWJyZWFrOw0KLQl9DQotDQotCXBtX3J1bnRpbWVfc2V0X2FjdGl2ZShk ZXYpOw0KLQlwbV9ydW50aW1lX2VuYWJsZShkZXYpOw0KLQlwbV9yZXF1ZXN0X2lkbGUoZGV2KTsN Ci0NCi0JcmV0dXJuIDA7DQotDQotY2xlYW51cF9zdWJkZXY6DQotCWlzY19zdWJkZXZfY2xlYW51 cChpc2MpOw0KLQ0KLXVucmVnaXN0ZXJfdjRsMl9kZXZpY2U6DQotCXY0bDJfZGV2aWNlX3VucmVn aXN0ZXIoJmlzYy0+djRsMl9kZXYpOw0KLQ0KLXVucHJlcGFyZV9jbGs6DQotCWNsa19kaXNhYmxl X3VucHJlcGFyZShpc2MtPmlzcGNrKTsNCi11bnByZXBhcmVfaGNsazoNCi0JY2xrX2Rpc2FibGVf dW5wcmVwYXJlKGlzYy0+aGNsb2NrKTsNCi0NCi0JaXNjX2Nsa19jbGVhbnVwKGlzYyk7DQotDQot CXJldHVybiByZXQ7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgYXRtZWxfaXNjX3JlbW92ZShzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KLXsNCi0Jc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHBs YXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOw0KLQ0KLQlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYt PmRldik7DQotCWNsa19kaXNhYmxlX3VucHJlcGFyZShpc2MtPmlzcGNrKTsNCi0JY2xrX2Rpc2Fi bGVfdW5wcmVwYXJlKGlzYy0+aGNsb2NrKTsNCi0NCi0JaXNjX3N1YmRldl9jbGVhbnVwKGlzYyk7 DQotDQotCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmlzYy0+djRsMl9kZXYpOw0KLQ0KLQlpc2Nf Y2xrX2NsZWFudXAoaXNjKTsNCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgX19t YXliZV91bnVzZWQgaXNjX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpDQotew0K LQlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQotDQotCWNs a19kaXNhYmxlX3VucHJlcGFyZShpc2MtPmlzcGNrKTsNCi0JY2xrX2Rpc2FibGVfdW5wcmVwYXJl KGlzYy0+aGNsb2NrKTsNCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgX19tYXli ZV91bnVzZWQgaXNjX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikNCi17DQotCXN0 cnVjdCBpc2NfZGV2aWNlICppc2MgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCi0JaW50IHJldDsN Ci0NCi0JcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGlzYy0+aGNsb2NrKTsNCi0JaWYgKHJldCkN Ci0JCXJldHVybiByZXQ7DQotDQotCXJldHVybiBjbGtfcHJlcGFyZV9lbmFibGUoaXNjLT5pc3Bj ayk7DQotfQ0KLQ0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBhdG1lbF9pc2NfZGV2 X3BtX29wcyA9IHsNCi0JU0VUX1JVTlRJTUVfUE1fT1BTKGlzY19ydW50aW1lX3N1c3BlbmQsIGlz Y19ydW50aW1lX3Jlc3VtZSwgTlVMTCkNCi19Ow0KLQ0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2Zf ZGV2aWNlX2lkIGF0bWVsX2lzY19vZl9tYXRjaFtdID0gew0KLQl7IC5jb21wYXRpYmxlID0gImF0 bWVsLHNhbWE1ZDItaXNjIiB9LA0KLQl7IH0NCi19Ow0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUob2Ys IGF0bWVsX2lzY19vZl9tYXRjaCk7DQotDQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIg YXRtZWxfaXNjX2RyaXZlciA9IHsNCi0JLnByb2JlCT0gYXRtZWxfaXNjX3Byb2JlLA0KLQkucmVt b3ZlCT0gYXRtZWxfaXNjX3JlbW92ZSwNCi0JLmRyaXZlcgk9IHsNCi0JCS5uYW1lCQk9IEFUTUVM X0lTQ19OQU1FLA0KLQkJLnBtCQk9ICZhdG1lbF9pc2NfZGV2X3BtX29wcywNCi0JCS5vZl9tYXRj aF90YWJsZSA9IG9mX21hdGNoX3B0cihhdG1lbF9pc2Nfb2ZfbWF0Y2gpLA0KLQl9LA0KLX07DQot DQotbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihhdG1lbF9pc2NfZHJpdmVyKTsNCi0NCi1NT0RVTEVf QVVUSE9SKCJTb25nanVuIFd1IDxzb25nanVuLnd1QG1pY3JvY2hpcC5jb20+Iik7DQotTU9EVUxF X0RFU0NSSVBUSU9OKCJUaGUgVjRMMiBkcml2ZXIgZm9yIEF0bWVsLUlTQyIpOw0KLU1PRFVMRV9M SUNFTlNFKCJHUEwgdjIiKTsNCi1NT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgidmlkZW8iKTsNCmRp ZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVsLWlzYy5oIGIvZHJp dmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1pc2MuaA0KbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCmluZGV4IDAwMDAwMDAuLmY2MzNlMTANCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMv bWVkaWEvcGxhdGZvcm0vYXRtZWwvYXRtZWwtaXNjLmgNCkBAIC0wLDAgKzEsMjA4IEBADQorLyog U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8NCisvKg0KKyAqIE1pY3JvY2hpcCBJ bWFnZSBTZW5zb3IgQ29udHJvbGxlciAoSVNDKSBkcml2ZXIgaGVhZGVyIGZpbGUNCisgKg0KKyAq IENvcHlyaWdodCAoQykgMjAxNi0yMDE5IE1pY3JvY2hpcCBUZWNobm9sb2d5LCBJbmMuDQorICoN CisgKiBBdXRob3I6IFNvbmdqdW4gV3UNCisgKiBBdXRob3I6IEV1Z2VuIEhyaXN0ZXYgPGV1Z2Vu LmhyaXN0ZXZAbWljcm9jaGlwLmNvbT4NCisgKg0KKyAqLw0KKyNpZm5kZWYgX0FUTUVMX0lTQ19I Xw0KKw0KKyNkZWZpbmUgSVNDX01BWF9TVVBQT1JUX1dJRFRIICAgMjU5Mg0KKyNkZWZpbmUgSVND X01BWF9TVVBQT1JUX0hFSUdIVCAgMTk0NA0KKw0KKyNkZWZpbmUgSVNDX0NMS19NQVhfRElWCQky NTUNCisNCitlbnVtIGlzY19jbGtfaWQgew0KKwlJU0NfSVNQQ0sgPSAwLA0KKwlJU0NfTUNLID0g MSwNCit9Ow0KKw0KK3N0cnVjdCBpc2NfY2xrIHsNCisJc3RydWN0IGNsa19odyAgIGh3Ow0KKwlz dHJ1Y3QgY2xrICAgICAgKmNsazsNCisJc3RydWN0IHJlZ21hcCAgICpyZWdtYXA7DQorCXNwaW5s b2NrX3QJbG9jazsNCisJdTgJCWlkOw0KKwl1OAkJcGFyZW50X2lkOw0KKwl1MzIJCWRpdjsNCisJ c3RydWN0IGRldmljZQkqZGV2Ow0KK307DQorDQorI2RlZmluZSB0b19pc2NfY2xrKGh3KSBjb250 YWluZXJfb2YoaHcsIHN0cnVjdCBpc2NfY2xrLCBodykNCisNCitzdHJ1Y3QgaXNjX2J1ZmZlciB7 DQorCXN0cnVjdCB2YjJfdjRsMl9idWZmZXIgIHZiOw0KKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7 DQorfTsNCisNCitzdHJ1Y3QgaXNjX3N1YmRldl9lbnRpdHkgew0KKwlzdHJ1Y3QgdjRsMl9zdWJk ZXYJCSpzZDsNCisJc3RydWN0IHY0bDJfYXN5bmNfc3ViZGV2CSphc2Q7DQorCXN0cnVjdCB2NGwy X2FzeW5jX25vdGlmaWVyICAgICAgbm90aWZpZXI7DQorDQorCXUzMiBwZmVfY2ZnMDsNCisNCisJ c3RydWN0IGxpc3RfaGVhZCBsaXN0Ow0KK307DQorDQorLyoNCisgKiBzdHJ1Y3QgaXNjX2Zvcm1h dCAtIElTQyBtZWRpYSBidXMgZm9ybWF0IGluZm9ybWF0aW9uDQorCQkJVGhpcyBzdHJ1Y3R1cmUg cmVwcmVzZW50cyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIElTQw0KKwkJCWFuZCB0aGUgc2Vu c29yLiBJdCdzIHRoZSBpbnB1dCBmb3JtYXQgcmVjZWl2ZWQgYnkNCisJCQl0aGUgSVNDLg0KKyAq IEBmb3VyY2M6CQlGb3VyY2MgY29kZSBmb3IgdGhpcyBmb3JtYXQNCisgKiBAbWJ1c19jb2RlOgkJ VjRMMiBtZWRpYSBidXMgZm9ybWF0IGNvZGUuDQorICogQGNmYV9iYXljZmc6CQlJZiB0aGlzIGZv cm1hdCBpcyBSQVcgQkFZRVIsIGluZGljYXRlIHRoZSB0eXBlIG9mIGJheWVyLg0KKwkJCXRoaXMg aXMgZWl0aGVyIEJHQkcsIFJHUkcsIGV0Yy4NCisgKiBAcGZlX2NmZzBfYnBzOglOdW1iZXIgb2Yg aGFyZHdhcmUgZGF0YSBsaW5lcyBjb25uZWN0ZWQgdG8gdGhlIElTQw0KKyAqLw0KKw0KK3N0cnVj dCBpc2NfZm9ybWF0IHsNCisJdTMyCWZvdXJjYzsNCisJdTMyCW1idXNfY29kZTsNCisJdTMyCWNm YV9iYXljZmc7DQorDQorCWJvb2wJc2Rfc3VwcG9ydDsNCisJdTMyCXBmZV9jZmcwX2JwczsNCit9 Ow0KKw0KKy8qIFBpcGVsaW5lIGJpdG1hcCAqLw0KKyNkZWZpbmUgV0JfRU5BQkxFCUJJVCgwKQ0K KyNkZWZpbmUgQ0ZBX0VOQUJMRQlCSVQoMSkNCisjZGVmaW5lIENDX0VOQUJMRQlCSVQoMikNCisj ZGVmaW5lIEdBTV9FTkFCTEUJQklUKDMpDQorI2RlZmluZSBHQU1fQkVOQUJMRQlCSVQoNCkNCisj ZGVmaW5lIEdBTV9HRU5BQkxFCUJJVCg1KQ0KKyNkZWZpbmUgR0FNX1JFTkFCTEUJQklUKDYpDQor I2RlZmluZSBDU0NfRU5BQkxFCUJJVCg3KQ0KKyNkZWZpbmUgQ0JDX0VOQUJMRQlCSVQoOCkNCisj ZGVmaW5lIFNVQjQyMl9FTkFCTEUJQklUKDkpDQorI2RlZmluZSBTVUI0MjBfRU5BQkxFCUJJVCgx MCkNCisNCisjZGVmaW5lIEdBTV9FTkFCTEVTCShHQU1fUkVOQUJMRSB8IEdBTV9HRU5BQkxFIHwg R0FNX0JFTkFCTEUgfCBHQU1fRU5BQkxFKQ0KKw0KKy8qDQorICogc3RydWN0IGZtdF9jb25maWcg LSBJU0MgZm9ybWF0IGNvbmZpZ3VyYXRpb24gYW5kIGludGVybmFsIHBpcGVsaW5lDQorCQkJVGhp cyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyB0aGUgaW50ZXJuYWwgY29uZmlndXJhdGlvbg0KKwkJCW9m IHRoZSBJU0MuDQorCQkJSXQgYWxzbyBob2xkcyB0aGUgZm9ybWF0IHRoYXQgSVNDIHdpbGwgcHJl c2VudCB0byB2NGwyLg0KKyAqIEBzZF9mb3JtYXQ6CQlQb2ludGVyIHRvIGFuIGlzY19mb3JtYXQg c3RydWN0IHRoYXQgaG9sZHMgdGhlIHNlbnNvcg0KKwkJCWNvbmZpZ3VyYXRpb24uDQorICogQGZv dXJjYzoJCUZvdXJjYyBjb2RlIGZvciB0aGlzIGZvcm1hdC4NCisgKiBAYnBwOgkJQnl0ZXMgcGVy IHBpeGVsIGluIHRoZSBjdXJyZW50IGZvcm1hdC4NCisgKiBAcmxwX2NmZ19tb2RlOglDb25maWd1 cmF0aW9uIG9mIHRoZSBSTFAgKHJvdW5kaW5nLCBsaW1pdGluZyBwYWNrYWdpbmcpDQorICogQGRj ZmdfaW1vZGU6CQlDb25maWd1cmF0aW9uIG9mIHRoZSBpbnB1dCBvZiB0aGUgRE1BIG1vZHVsZQ0K KyAqIEBkY3RybF9kdmlldzoJQ29uZmlndXJhdGlvbiBvZiB0aGUgb3V0cHV0IG9mIHRoZSBETUEg bW9kdWxlDQorICogQGJpdHNfcGlwZWxpbmU6CUNvbmZpZ3VyYXRpb24gb2YgdGhlIHBpcGVsaW5l LCB3aGljaCBtb2R1bGVzIGFyZSBlbmFibGVkDQorICovDQorc3RydWN0IGZtdF9jb25maWcgew0K KwlzdHJ1Y3QgaXNjX2Zvcm1hdAkqc2RfZm9ybWF0Ow0KKw0KKwl1MzIJCQlmb3VyY2M7DQorCXU4 CQkJYnBwOw0KKw0KKwl1MzIJCQlybHBfY2ZnX21vZGU7DQorCXUzMgkJCWRjZmdfaW1vZGU7DQor CXUzMgkJCWRjdHJsX2R2aWV3Ow0KKw0KKwl1MzIJCQliaXRzX3BpcGVsaW5lOw0KK307DQorDQor I2RlZmluZSBISVNUX0VOVFJJRVMJCTUxMg0KKyNkZWZpbmUgSElTVF9CQVlFUgkJKElTQ19ISVNf Q0ZHX01PREVfQiArIDEpDQorDQorZW51bXsNCisJSElTVF9JTklUID0gMCwNCisJSElTVF9FTkFC TEVELA0KKwlISVNUX0RJU0FCTEVELA0KK307DQorDQorc3RydWN0IGlzY19jdHJscyB7DQorCXN0 cnVjdCB2NGwyX2N0cmxfaGFuZGxlciBoYW5kbGVyOw0KKw0KKwl1MzIgYnJpZ2h0bmVzczsNCisJ dTMyIGNvbnRyYXN0Ow0KKwl1OCBnYW1tYV9pbmRleDsNCisjZGVmaW5lIElTQ19XQl9OT05FCTAN CisjZGVmaW5lIElTQ19XQl9BVVRPCTENCisjZGVmaW5lIElTQ19XQl9PTkVUSU1FCTINCisJdTgg YXdiOw0KKw0KKwkvKiBvbmUgZm9yIGVhY2ggY29tcG9uZW50IDogR1IsIFIsIEdCLCBCICovDQor CXUzMiBnYWluW0hJU1RfQkFZRVJdOw0KKwl1MzIgb2Zmc2V0W0hJU1RfQkFZRVJdOw0KKw0KKwl1 MzIgaGlzdF9lbnRyeVtISVNUX0VOVFJJRVNdOw0KKwl1MzIgaGlzdF9jb3VudFtISVNUX0JBWUVS XTsNCisJdTggaGlzdF9pZDsNCisJdTggaGlzdF9zdGF0Ow0KKyNkZWZpbmUgSElTVF9NSU5fSU5E RVgJCTANCisjZGVmaW5lIEhJU1RfTUFYX0lOREVYCQkxDQorCXUzMiBoaXN0X21pbm1heFtISVNU X0JBWUVSXVsyXTsNCit9Ow0KKw0KKyNkZWZpbmUgSVNDX1BJUEVfTElORV9OT0RFX05VTQkxMQ0K Kw0KK3N0cnVjdCBpc2NfZGV2aWNlIHsNCisJc3RydWN0IHJlZ21hcAkJKnJlZ21hcDsNCisJc3Ry dWN0IGNsawkJKmhjbG9jazsNCisJc3RydWN0IGNsawkJKmlzcGNrOw0KKwlzdHJ1Y3QgaXNjX2Ns awkJaXNjX2Nsa3NbMl07DQorDQorCXN0cnVjdCBkZXZpY2UJCSpkZXY7DQorCXN0cnVjdCB2NGwy X2RldmljZQl2NGwyX2RldjsNCisJc3RydWN0IHZpZGVvX2RldmljZQl2aWRlb19kZXY7DQorDQor CXN0cnVjdCB2YjJfcXVldWUJdmIyX3ZpZHE7DQorCXNwaW5sb2NrX3QJCWRtYV9xdWV1ZV9sb2Nr Ow0KKwlzdHJ1Y3QgbGlzdF9oZWFkCWRtYV9xdWV1ZTsNCisJc3RydWN0IGlzY19idWZmZXIJKmN1 cl9mcm07DQorCXVuc2lnbmVkIGludAkJc2VxdWVuY2U7DQorCWJvb2wJCQlzdG9wOw0KKwlzdHJ1 Y3QgY29tcGxldGlvbgljb21wOw0KKw0KKwlzdHJ1Y3QgdjRsMl9mb3JtYXQJZm10Ow0KKwlzdHJ1 Y3QgaXNjX2Zvcm1hdAkqKnVzZXJfZm9ybWF0czsNCisJdW5zaWduZWQgaW50CQludW1fdXNlcl9m b3JtYXRzOw0KKw0KKwlzdHJ1Y3QgZm10X2NvbmZpZwljb25maWc7DQorCXN0cnVjdCBmbXRfY29u ZmlnCXRyeV9jb25maWc7DQorDQorCXN0cnVjdCBpc2NfY3RybHMJY3RybHM7DQorCXN0cnVjdCB2 NGwyX2N0cmwJKmRvX3diX2N0cmw7DQorCXN0cnVjdCB3b3JrX3N0cnVjdAlhd2Jfd29yazsNCisN CisJc3RydWN0IG11dGV4CQlsb2NrOw0KKwlzcGlubG9ja190CQlhd2JfbG9jazsNCisNCisJc3Ry dWN0IHJlZ21hcF9maWVsZAkqcGlwZWxpbmVbSVNDX1BJUEVfTElORV9OT0RFX05VTV07DQorDQor CXN0cnVjdCBpc2Nfc3ViZGV2X2VudGl0eQkqY3VycmVudF9zdWJkZXY7DQorCXN0cnVjdCBsaXN0 X2hlYWQJCXN1YmRldl9lbnRpdGllczsNCit9Ow0KKw0KKyNkZWZpbmUgR0FNTUFfTUFYCTINCisj ZGVmaW5lIEdBTU1BX0VOVFJJRVMJNjQNCisNCisjZGVmaW5lIEFUTUVMX0lTQ19OQU1FICJhdG1l bC1pc2MiDQorDQorLyogbW9kdWxlIHBhcmFtZXRlcnMgKi8NCitleHRlcm4gdW5zaWduZWQgaW50 IGRlYnVnOw0KK2V4dGVybiB1bnNpZ25lZCBpbnQgc2Vuc29yX3ByZWZlcnJlZDsNCisNCitleHRl cm4gc3RydWN0IGlzY19mb3JtYXQgZm9ybWF0c19saXN0W107DQorZXh0ZXJuIHN0cnVjdCBpc2Nf Zm9ybWF0IGNvbnRyb2xsZXJfZm9ybWF0c1tdOw0KK2V4dGVybiBjb25zdCB1MzIgaXNjX2dhbW1h X3RhYmxlW0dBTU1BX01BWCArIDFdW0dBTU1BX0VOVFJJRVNdOw0KK2V4dGVybiBjb25zdCBzdHJ1 Y3QgcmVnbWFwX2NvbmZpZyBpc2NfcmVnbWFwX2NvbmZpZzsNCitleHRlcm4gY29uc3Qgc3RydWN0 IHY0bDJfYXN5bmNfbm90aWZpZXJfb3BlcmF0aW9ucyBpc2NfYXN5bmNfb3BzOw0KKw0KK2lycXJl dHVybl90IGlzY19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsNCitpbnQgaXNjX3Bp cGVsaW5lX2luaXQoc3RydWN0IGlzY19kZXZpY2UgKmlzYyk7DQoraW50IGlzY19jbGtfaW5pdChz dHJ1Y3QgaXNjX2RldmljZSAqaXNjKTsNCit2b2lkIGlzY19zdWJkZXZfY2xlYW51cChzdHJ1Y3Qg aXNjX2RldmljZSAqaXNjKTsNCit2b2lkIGlzY19jbGtfY2xlYW51cChzdHJ1Y3QgaXNjX2Rldmlj ZSAqaXNjKTsNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3Jt L2F0bWVsL2F0bWVsLXNhbWE1ZDItaXNjLmMgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2F0bWVs L2F0bWVsLXNhbWE1ZDItaXNjLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAw Li45M2ZiODM5DQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2F0 bWVsL2F0bWVsLXNhbWE1ZDItaXNjLmMNCkBAIC0wLDAgKzEsMzQ0IEBADQorLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCisvKg0KKyAqIE1pY3JvY2hpcCBJbWFnZSBTZW5zb3Ig Q29udHJvbGxlciAoSVNDKSBkcml2ZXINCisgKg0KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5 IE1pY3JvY2hpcCBUZWNobm9sb2d5LCBJbmMuDQorICoNCisgKiBBdXRob3I6IFNvbmdqdW4gV3UN CisgKiBBdXRob3I6IEV1Z2VuIEhyaXN0ZXYgPGV1Z2VuLmhyaXN0ZXZAbWljcm9jaGlwLmNvbT4N CisgKg0KKyAqDQorICogU2Vuc29yLS0+UEZFLS0+V0ItLT5DRkEtLT5DQy0tPkdBTS0tPkNTQy0t PkNCQy0tPlNVQi0tPlJMUC0tPkRNQQ0KKyAqDQorICogSVNDIHZpZGVvIHBpcGVsaW5lIGludGVn cmF0ZXMgdGhlIGZvbGxvd2luZyBzdWJtb2R1bGVzOg0KKyAqIFBGRTogUGFyYWxsZWwgRnJvbnQg RW5kIHRvIHNhbXBsZSB0aGUgY2FtZXJhIHNlbnNvciBpbnB1dCBzdHJlYW0NCisgKiAgV0I6IFBy b2dyYW1tYWJsZSB3aGl0ZSBiYWxhbmNlIGluIHRoZSBCYXllciBkb21haW4NCisgKiBDRkE6IENv bG9yIGZpbHRlciBhcnJheSBpbnRlcnBvbGF0aW9uIG1vZHVsZQ0KKyAqICBDQzogUHJvZ3JhbW1h YmxlIGNvbG9yIGNvcnJlY3Rpb24NCisgKiBHQU06IEdhbW1hIGNvcnJlY3Rpb24NCisgKiBDU0M6 IFByb2dyYW1tYWJsZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uDQorICogQ0JDOiBDb250cmFzdCBh bmQgQnJpZ2h0bmVzcyBjb250cm9sDQorICogU1VCOiBUaGlzIG1vZHVsZSBwZXJmb3JtcyBZQ2JD cjQ0NCB0byBZQ2JDcjQyMCBjaHJvbWluYW5jZSBzdWJzYW1wbGluZw0KKyAqIFJMUDogVGhpcyBt b2R1bGUgcGVyZm9ybXMgcm91bmRpbmcsIHJhbmdlIGxpbWl0aW5nDQorICogICAgICBhbmQgcGFj a2luZyBvZiB0aGUgaW5jb21pbmcgZGF0YQ0KKyAqLw0KKw0KKyNpbmNsdWRlIDxsaW51eC9jbGsu aD4NCisjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+DQorI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92 aWRlci5oPg0KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KKyNpbmNsdWRlIDxsaW51eC9pbnRl cnJ1cHQuaD4NCisjaW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+DQorI2luY2x1ZGUgPGxpbnV4L21v ZHVsZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9vZi5oPg0KKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFw aC5oPg0KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCisjaW5jbHVkZSA8bGlu dXgvcG1fcnVudGltZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4NCisjaW5jbHVkZSA8 bGludXgvdmlkZW9kZXYyLmg+DQorDQorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY3RybHMuaD4NCisj aW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4NCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1ldmVu dC5oPg0KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWltYWdlLXNpemVzLmg+DQorI2luY2x1ZGUgPG1l ZGlhL3Y0bDItaW9jdGwuaD4NCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1md25vZGUuaD4NCisjaW5j bHVkZSA8bWVkaWEvdjRsMi1zdWJkZXYuaD4NCisjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYyLWRt YS1jb250aWcuaD4NCisNCisjaW5jbHVkZSAiYXRtZWwtaXNjLXJlZ3MuaCINCisjaW5jbHVkZSAi YXRtZWwtaXNjLmgiDQorDQorI2RlZmluZSBJU0NfTUFYX1NVUFBPUlRfV0lEVEggICAyNTkyDQor I2RlZmluZSBJU0NfTUFYX1NVUFBPUlRfSEVJR0hUICAxOTQ0DQorDQorI2RlZmluZSBJU0NfQ0xL X01BWF9ESVYJCTI1NQ0KKw0KK3N0YXRpYyBpbnQgaXNjX3BhcnNlX2R0KHN0cnVjdCBkZXZpY2Ug KmRldiwgc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCit7DQorCXN0cnVjdCBkZXZpY2Vfbm9kZSAq bnAgPSBkZXYtPm9mX25vZGU7DQorCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZXBuID0gTlVMTCwgKnJl bTsNCisJc3RydWN0IGlzY19zdWJkZXZfZW50aXR5ICpzdWJkZXZfZW50aXR5Ow0KKwl1bnNpZ25l ZCBpbnQgZmxhZ3M7DQorCWludCByZXQ7DQorDQorCUlOSVRfTElTVF9IRUFEKCZpc2MtPnN1YmRl dl9lbnRpdGllcyk7DQorDQorCXdoaWxlICgxKSB7DQorCQlzdHJ1Y3QgdjRsMl9md25vZGVfZW5k cG9pbnQgdjRsMl9lcG4gPSB7IC5idXNfdHlwZSA9IDAgfTsNCisNCisJCWVwbiA9IG9mX2dyYXBo X2dldF9uZXh0X2VuZHBvaW50KG5wLCBlcG4pOw0KKwkJaWYgKCFlcG4pDQorCQkJcmV0dXJuIDA7 DQorDQorCQlyZW0gPSBvZl9ncmFwaF9nZXRfcmVtb3RlX3BvcnRfcGFyZW50KGVwbik7DQorCQlp ZiAoIXJlbSkgew0KKwkJCWRldl9ub3RpY2UoZGV2LCAiUmVtb3RlIGRldmljZSBhdCAlcE9GIG5v dCBmb3VuZFxuIiwNCisJCQkJICAgZXBuKTsNCisJCQljb250aW51ZTsNCisJCX0NCisNCisJCXJl dCA9IHY0bDJfZndub2RlX2VuZHBvaW50X3BhcnNlKG9mX2Z3bm9kZV9oYW5kbGUoZXBuKSwNCisJ CQkJCQkgJnY0bDJfZXBuKTsNCisJCWlmIChyZXQpIHsNCisJCQlvZl9ub2RlX3B1dChyZW0pOw0K KwkJCXJldCA9IC1FSU5WQUw7DQorCQkJZGV2X2VycihkZXYsICJDb3VsZCBub3QgcGFyc2UgdGhl IGVuZHBvaW50XG4iKTsNCisJCQlicmVhazsNCisJCX0NCisNCisJCXN1YmRldl9lbnRpdHkgPSBk ZXZtX2t6YWxsb2MoZGV2LA0KKwkJCQkJICBzaXplb2YoKnN1YmRldl9lbnRpdHkpLCBHRlBfS0VS TkVMKTsNCisJCWlmICghc3ViZGV2X2VudGl0eSkgew0KKwkJCW9mX25vZGVfcHV0KHJlbSk7DQor CQkJcmV0ID0gLUVOT01FTTsNCisJCQlicmVhazsNCisJCX0NCisNCisJCS8qIGFzZCB3aWxsIGJl IGZyZWVkIGJ5IHRoZSBzdWJzeXN0ZW0gb25jZSBpdCdzIGFkZGVkIHRvIHRoZQ0KKwkJICogbm90 aWZpZXIgbGlzdA0KKwkJICovDQorCQlzdWJkZXZfZW50aXR5LT5hc2QgPSBremFsbG9jKHNpemVv Zigqc3ViZGV2X2VudGl0eS0+YXNkKSwNCisJCQkJCSAgICAgR0ZQX0tFUk5FTCk7DQorCQlpZiAo IXN1YmRldl9lbnRpdHktPmFzZCkgew0KKwkJCW9mX25vZGVfcHV0KHJlbSk7DQorCQkJcmV0ID0g LUVOT01FTTsNCisJCQlicmVhazsNCisJCX0NCisNCisJCWZsYWdzID0gdjRsMl9lcG4uYnVzLnBh cmFsbGVsLmZsYWdzOw0KKw0KKwkJaWYgKGZsYWdzICYgVjRMMl9NQlVTX0hTWU5DX0FDVElWRV9M T1cpDQorCQkJc3ViZGV2X2VudGl0eS0+cGZlX2NmZzAgPSBJU0NfUEZFX0NGRzBfSFBPTF9MT1c7 DQorDQorCQlpZiAoZmxhZ3MgJiBWNEwyX01CVVNfVlNZTkNfQUNUSVZFX0xPVykNCisJCQlzdWJk ZXZfZW50aXR5LT5wZmVfY2ZnMCB8PSBJU0NfUEZFX0NGRzBfVlBPTF9MT1c7DQorDQorCQlpZiAo ZmxhZ3MgJiBWNEwyX01CVVNfUENMS19TQU1QTEVfRkFMTElORykNCisJCQlzdWJkZXZfZW50aXR5 LT5wZmVfY2ZnMCB8PSBJU0NfUEZFX0NGRzBfUFBPTF9MT1c7DQorDQorCQlpZiAodjRsMl9lcG4u YnVzX3R5cGUgPT0gVjRMMl9NQlVTX0JUNjU2KQ0KKwkJCXN1YmRldl9lbnRpdHktPnBmZV9jZmcw IHw9IElTQ19QRkVfQ0ZHMF9DQ0lSX0NSQyB8DQorCQkJCQlJU0NfUEZFX0NGRzBfQ0NJUjY1NjsN CisNCisJCXN1YmRldl9lbnRpdHktPmFzZC0+bWF0Y2hfdHlwZSA9IFY0TDJfQVNZTkNfTUFUQ0hf RldOT0RFOw0KKwkJc3ViZGV2X2VudGl0eS0+YXNkLT5tYXRjaC5md25vZGUgPQ0KKwkJCW9mX2Z3 bm9kZV9oYW5kbGUocmVtKTsNCisJCWxpc3RfYWRkX3RhaWwoJnN1YmRldl9lbnRpdHktPmxpc3Qs ICZpc2MtPnN1YmRldl9lbnRpdGllcyk7DQorCX0NCisNCisJb2Zfbm9kZV9wdXQoZXBuKTsNCisJ cmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIGludCBhdG1lbF9pc2NfcHJvYmUoc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldikNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5k ZXY7DQorCXN0cnVjdCBpc2NfZGV2aWNlICppc2M7DQorCXN0cnVjdCByZXNvdXJjZSAqcmVzOw0K Kwl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7DQorCXN0cnVjdCBpc2Nfc3ViZGV2X2VudGl0eSAqc3Vi ZGV2X2VudGl0eTsNCisJaW50IGlycTsNCisJaW50IHJldDsNCisNCisJaXNjID0gZGV2bV9remFs bG9jKGRldiwgc2l6ZW9mKCppc2MpLCBHRlBfS0VSTkVMKTsNCisJaWYgKCFpc2MpDQorCQlyZXR1 cm4gLUVOT01FTTsNCisNCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaXNjKTsNCisJaXNj LT5kZXYgPSBkZXY7DQorDQorCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JF U09VUkNFX01FTSwgMCk7DQorCWlvX2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCBy ZXMpOw0KKwlpZiAoSVNfRVJSKGlvX2Jhc2UpKQ0KKwkJcmV0dXJuIFBUUl9FUlIoaW9fYmFzZSk7 DQorDQorCWlzYy0+cmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9tbWlvKGRldiwgaW9fYmFzZSwg JmlzY19yZWdtYXBfY29uZmlnKTsNCisJaWYgKElTX0VSUihpc2MtPnJlZ21hcCkpIHsNCisJCXJl dCA9IFBUUl9FUlIoaXNjLT5yZWdtYXApOw0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gaW5p dCByZWdpc3RlciBtYXA6ICVkXG4iLCByZXQpOw0KKwkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwlp cnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOw0KKwlpZiAoaXJxIDwgMCkgew0KKwkJcmV0 ID0gaXJxOw0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IGlycTogJWRcbiIsIHJldCk7 DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBp cnEsIGlzY19pbnRlcnJ1cHQsIDAsDQorCQkJICAgICAgIEFUTUVMX0lTQ19OQU1FLCBpc2MpOw0K KwlpZiAocmV0IDwgMCkgew0KKwkJZGV2X2VycihkZXYsICJjYW4ndCByZWdpc3RlciBJU1IgZm9y IElSUSAldSAocmV0PSVpKVxuIiwNCisJCQlpcnEsIHJldCk7DQorCQlyZXR1cm4gcmV0Ow0KKwl9 DQorDQorCXJldCA9IGlzY19waXBlbGluZV9pbml0KGlzYyk7DQorCWlmIChyZXQpDQorCQlyZXR1 cm4gcmV0Ow0KKw0KKwlpc2MtPmhjbG9jayA9IGRldm1fY2xrX2dldChkZXYsICJoY2xvY2siKTsN CisJaWYgKElTX0VSUihpc2MtPmhjbG9jaykpIHsNCisJCXJldCA9IFBUUl9FUlIoaXNjLT5oY2xv Y2spOw0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IGhjbG9jazogJWRcbiIsIHJldCk7 DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShpc2Mt PmhjbG9jayk7DQorCWlmIChyZXQpIHsNCisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGVuYWJs ZSBoY2xvY2s6ICVkXG4iLCByZXQpOw0KKwkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwlyZXQgPSBp c2NfY2xrX2luaXQoaXNjKTsNCisJaWYgKHJldCkgew0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQg dG8gaW5pdCBpc2MgY2xvY2s6ICVkXG4iLCByZXQpOw0KKwkJZ290byB1bnByZXBhcmVfaGNsazsN CisJfQ0KKw0KKwlpc2MtPmlzcGNrID0gaXNjLT5pc2NfY2xrc1tJU0NfSVNQQ0tdLmNsazsNCisN CisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGlzYy0+aXNwY2spOw0KKwlpZiAocmV0KSB7DQor CQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBlbmFibGUgaXNwY2s6ICVkXG4iLCByZXQpOw0KKwkJ Z290byB1bnByZXBhcmVfaGNsazsNCisJfQ0KKw0KKwkvKiBpc3BjayBzaG91bGQgYmUgZ3JlYXRl ciBvciBlcXVhbCB0byBoY2xvY2sgKi8NCisJcmV0ID0gY2xrX3NldF9yYXRlKGlzYy0+aXNwY2ss IGNsa19nZXRfcmF0ZShpc2MtPmhjbG9jaykpOw0KKwlpZiAocmV0KSB7DQorCQlkZXZfZXJyKGRl diwgImZhaWxlZCB0byBzZXQgaXNwY2sgcmF0ZTogJWRcbiIsIHJldCk7DQorCQlnb3RvIHVucHJl cGFyZV9jbGs7DQorCX0NCisNCisJcmV0ID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoZGV2LCAmaXNj LT52NGwyX2Rldik7DQorCWlmIChyZXQpIHsNCisJCWRldl9lcnIoZGV2LCAidW5hYmxlIHRvIHJl Z2lzdGVyIHY0bDIgZGV2aWNlLlxuIik7DQorCQlnb3RvIHVucHJlcGFyZV9jbGs7DQorCX0NCisN CisJcmV0ID0gaXNjX3BhcnNlX2R0KGRldiwgaXNjKTsNCisJaWYgKHJldCkgew0KKwkJZGV2X2Vy cihkZXYsICJmYWlsIHRvIHBhcnNlIGRldmljZSB0cmVlXG4iKTsNCisJCWdvdG8gdW5yZWdpc3Rl cl92NGwyX2RldmljZTsNCisJfQ0KKw0KKwlpZiAobGlzdF9lbXB0eSgmaXNjLT5zdWJkZXZfZW50 aXRpZXMpKSB7DQorCQlkZXZfZXJyKGRldiwgIm5vIHN1YmRldiBmb3VuZFxuIik7DQorCQlyZXQg PSAtRU5PREVWOw0KKwkJZ290byB1bnJlZ2lzdGVyX3Y0bDJfZGV2aWNlOw0KKwl9DQorDQorCWxp c3RfZm9yX2VhY2hfZW50cnkoc3ViZGV2X2VudGl0eSwgJmlzYy0+c3ViZGV2X2VudGl0aWVzLCBs aXN0KSB7DQorCQl2NGwyX2FzeW5jX25vdGlmaWVyX2luaXQoJnN1YmRldl9lbnRpdHktPm5vdGlm aWVyKTsNCisNCisJCXJldCA9IHY0bDJfYXN5bmNfbm90aWZpZXJfYWRkX3N1YmRldigmc3ViZGV2 X2VudGl0eS0+bm90aWZpZXIsDQorCQkJCQkJICAgICBzdWJkZXZfZW50aXR5LT5hc2QpOw0KKwkJ aWYgKHJldCkgew0KKwkJCWZ3bm9kZV9oYW5kbGVfcHV0KHN1YmRldl9lbnRpdHktPmFzZC0+bWF0 Y2guZndub2RlKTsNCisJCQlrZnJlZShzdWJkZXZfZW50aXR5LT5hc2QpOw0KKwkJCWdvdG8gY2xl YW51cF9zdWJkZXY7DQorCQl9DQorDQorCQlzdWJkZXZfZW50aXR5LT5ub3RpZmllci5vcHMgPSAm aXNjX2FzeW5jX29wczsNCisNCisJCXJldCA9IHY0bDJfYXN5bmNfbm90aWZpZXJfcmVnaXN0ZXIo JmlzYy0+djRsMl9kZXYsDQorCQkJCQkJICAgJnN1YmRldl9lbnRpdHktPm5vdGlmaWVyKTsNCisJ CWlmIChyZXQpIHsNCisJCQlkZXZfZXJyKGRldiwgImZhaWwgdG8gcmVnaXN0ZXIgYXN5bmMgbm90 aWZpZXJcbiIpOw0KKwkJCWdvdG8gY2xlYW51cF9zdWJkZXY7DQorCQl9DQorDQorCQlpZiAodmlk ZW9faXNfcmVnaXN0ZXJlZCgmaXNjLT52aWRlb19kZXYpKQ0KKwkJCWJyZWFrOw0KKwl9DQorDQor CXBtX3J1bnRpbWVfc2V0X2FjdGl2ZShkZXYpOw0KKwlwbV9ydW50aW1lX2VuYWJsZShkZXYpOw0K KwlwbV9yZXF1ZXN0X2lkbGUoZGV2KTsNCisNCisJcmV0dXJuIDA7DQorDQorY2xlYW51cF9zdWJk ZXY6DQorCWlzY19zdWJkZXZfY2xlYW51cChpc2MpOw0KKw0KK3VucmVnaXN0ZXJfdjRsMl9kZXZp Y2U6DQorCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmlzYy0+djRsMl9kZXYpOw0KKw0KK3VucHJl cGFyZV9jbGs6DQorCWNsa19kaXNhYmxlX3VucHJlcGFyZShpc2MtPmlzcGNrKTsNCit1bnByZXBh cmVfaGNsazoNCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGlzYy0+aGNsb2NrKTsNCisNCisJaXNj X2Nsa19jbGVhbnVwKGlzYyk7DQorDQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQg YXRtZWxfaXNjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KK3sNCisJc3Ry dWN0IGlzY19kZXZpY2UgKmlzYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOw0KKw0KKwlw bV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7DQorCWNsa19kaXNhYmxlX3VucHJlcGFyZShp c2MtPmlzcGNrKTsNCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGlzYy0+aGNsb2NrKTsNCisNCisJ aXNjX3N1YmRldl9jbGVhbnVwKGlzYyk7DQorDQorCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmlz Yy0+djRsMl9kZXYpOw0KKw0KKwlpc2NfY2xrX2NsZWFudXAoaXNjKTsNCisNCisJcmV0dXJuIDA7 DQorfQ0KKw0KK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgaXNjX3J1bnRpbWVfc3VzcGVuZChz dHJ1Y3QgZGV2aWNlICpkZXYpDQorew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gZGV2X2dl dF9kcnZkYXRhKGRldik7DQorDQorCWNsa19kaXNhYmxlX3VucHJlcGFyZShpc2MtPmlzcGNrKTsN CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGlzYy0+aGNsb2NrKTsNCisNCisJcmV0dXJuIDA7DQor fQ0KKw0KK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgaXNjX3J1bnRpbWVfcmVzdW1lKHN0cnVj dCBkZXZpY2UgKmRldikNCit7DQorCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSBkZXZfZ2V0X2Ry dmRhdGEoZGV2KTsNCisJaW50IHJldDsNCisNCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGlz Yy0+aGNsb2NrKTsNCisJaWYgKHJldCkNCisJCXJldHVybiByZXQ7DQorDQorCXJldHVybiBjbGtf cHJlcGFyZV9lbmFibGUoaXNjLT5pc3Bjayk7DQorfQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZGV2X3BtX29wcyBhdG1lbF9pc2NfZGV2X3BtX29wcyA9IHsNCisJU0VUX1JVTlRJTUVfUE1fT1BT KGlzY19ydW50aW1lX3N1c3BlbmQsIGlzY19ydW50aW1lX3Jlc3VtZSwgTlVMTCkNCit9Ow0KKw0K K3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGF0bWVsX2lzY19vZl9tYXRjaFtdID0g ew0KKwl7IC5jb21wYXRpYmxlID0gImF0bWVsLHNhbWE1ZDItaXNjIiB9LA0KKwl7IH0NCit9Ow0K K01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGF0bWVsX2lzY19vZl9tYXRjaCk7DQorDQorc3RhdGlj IHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXRtZWxfaXNjX2RyaXZlciA9IHsNCisJLnByb2JlCT0g YXRtZWxfaXNjX3Byb2JlLA0KKwkucmVtb3ZlCT0gYXRtZWxfaXNjX3JlbW92ZSwNCisJLmRyaXZl cgk9IHsNCisJCS5uYW1lCQk9IEFUTUVMX0lTQ19OQU1FLA0KKwkJLnBtCQk9ICZhdG1lbF9pc2Nf ZGV2X3BtX29wcywNCisJCS5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihhdG1lbF9pc2Nf b2ZfbWF0Y2gpLA0KKwl9LA0KK307DQorDQorbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihhdG1lbF9p c2NfZHJpdmVyKTsNCisNCitNT0RVTEVfQVVUSE9SKCJTb25nanVuIFd1Iik7DQorTU9EVUxFX0RF U0NSSVBUSU9OKCJUaGUgVjRMMiBkcml2ZXIgZm9yIEF0bWVsLUlTQyIpOw0KK01PRFVMRV9MSUNF TlNFKCJHUEwgdjIiKTsNCitNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgidmlkZW8iKTsNCi0tIA0K Mi43LjQNCg0K