From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-0.9 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 17DBFC31E51 for ; Tue, 18 Jun 2019 07:22:01 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id B312420679 for ; Tue, 18 Jun 2019 07:22:00 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=nxp.com header.i=@nxp.com header.b="G/rIrbIR" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728964AbfFRHV7 (ORCPT ); Tue, 18 Jun 2019 03:21:59 -0400 Received: from mail-eopbgr30085.outbound.protection.outlook.com ([40.107.3.85]:5699 "EHLO EUR03-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726007AbfFRHV6 (ORCPT ); Tue, 18 Jun 2019 03:21:58 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=nyuOV6CglSHuDLdY0O2UastX12zSWWKmRwAyLk4hZMA=; b=G/rIrbIRTsJrb/1d7XOWG4Uc+xXElqM6BSqmZwZ4roS8hXjm2AoRivo+QEH6kSxGYAaC4jViJEJDgY5+aMMKV3ZpZm+KJNkvsz/VQEI6CRH3Oru6YVKlvbnZhLgKyIBm2HYYtbVr7liTNBfH1skcdG5ZNS/vZ/kLY9yqBBjbUbE= Received: from VI1PR04MB5967.eurprd04.prod.outlook.com (20.178.123.141) by VI1PR04MB3151.eurprd04.prod.outlook.com (10.170.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1987.15; Tue, 18 Jun 2019 07:21:50 +0000 Received: from VI1PR04MB5967.eurprd04.prod.outlook.com ([fe80::3dd4:5031:dc06:1fd7]) by VI1PR04MB5967.eurprd04.prod.outlook.com ([fe80::3dd4:5031:dc06:1fd7%7]) with mapi id 15.20.1965.018; Tue, 18 Jun 2019 07:21:50 +0000 From: Robert Chiras To: "sam@ravnborg.org" CC: dl-linux-imx , "linux-kernel@vger.kernel.org" , "robh+dt@kernel.org" , "devicetree@vger.kernel.org" , "daniel@ffwll.ch" , "mark.rutland@arm.com" , "dri-devel@lists.freedesktop.org" , "thierry.reding@gmail.com" , "airlied@linux.ie" Subject: Re: [EXT] Re: [PATCH 2/2] drm/panel: Add support for Raydium RM67191 panel driver Thread-Topic: [EXT] Re: [PATCH 2/2] drm/panel: Add support for Raydium RM67191 panel driver Thread-Index: AQHVIqdzFTZPTbEojEKDO3NY8aRErKabQT4AgAXGbgA= Date: Tue, 18 Jun 2019 07:21:50 +0000 Message-ID: <1560842508.9328.53.camel@nxp.com> References: <1560513063-24995-1-git-send-email-robert.chiras@nxp.com> <1560513063-24995-3-git-send-email-robert.chiras@nxp.com> <20190614151018.GA28829@ravnborg.org> In-Reply-To: <20190614151018.GA28829@ravnborg.org> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: Evolution 3.18.5.2-0ubuntu3.2 authentication-results: spf=none (sender IP is ) smtp.mailfrom=robert.chiras@nxp.com; x-originating-ip: [89.37.124.34] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 93f0b31f-246f-467c-c3e1-08d6f3bda1a4 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020);SRVR:VI1PR04MB3151; x-ms-traffictypediagnostic: VI1PR04MB3151: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8882; x-forefront-prvs: 007271867D x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(376002)(346002)(366004)(39860400002)(136003)(396003)(189003)(199004)(5660300002)(186003)(66556008)(486006)(305945005)(64756008)(36756003)(66446008)(7736002)(476003)(229853002)(103116003)(8936002)(446003)(71200400001)(478600001)(102836004)(76176011)(66476007)(1730700003)(2616005)(81166006)(6506007)(316002)(50226002)(76116006)(8676002)(14454004)(44832011)(99286004)(71190400001)(11346002)(6916009)(54906003)(81156014)(66946007)(73956011)(86362001)(6116002)(53936002)(6486002)(4326008)(2351001)(66066001)(3846002)(25786009)(14444005)(5640700003)(6436002)(2501003)(26005)(6246003)(256004)(6512007)(5024004)(68736007)(2906002)(30864003)(53946003)(99106002);DIR:OUT;SFP:1101;SCL:1;SRVR:VI1PR04MB3151;H:VI1PR04MB5967.eurprd04.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: uZaOtFHmf7ze3L5urVFk9miqTrkMOJpOIU0UWoueU7b5S6w3edCj4BELc+295278tYbQM4LmqMBs4JxKC4dA9mgaffQ9WW/PPYZYb7ZF7iTyAlT1yB8+axSlpOaosAK9B9KSb6e4/K0ADzKrNBnnCi5rDz43Bfdwyix/5cC5Hferuef0ZuHfIYRRwp7aw2Ysv8ynPry/+vVXmB5bvr+Uw9wHYUqgbXgBdhW06eBaWR/u6YwBoekG/f3QeNTcPYDY85i4/L3NA3CdWUnSK9cmALyaoUBbfoXsmkVFX7QdqjVvVArSuW+hCiluen3X8CbW8gusxrMTw6xR7VOC/i1ItV84bWPML6jbfNHehNg86Tpk8MNneLEREu9yfe2N3aR1CF3QtQVZ2cgg3P34ynvDPneUG057qkQS4P9SyQeKdH4= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 93f0b31f-246f-467c-c3e1-08d6f3bda1a4 X-MS-Exchange-CrossTenant-originalarrivaltime: 18 Jun 2019 07:21:50.3963 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: robert.chiras@nxp.com X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3151 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgU2FtLA0KDQpUaGFuayB5b3UgZm9yIHlvdXIgc3VnZ2VzdGlvbnMuDQpTZWUgbXkgcmVwbHkg aW5saW5lLg0KDQpPbiBWaSwgMjAxOS0wNi0xNCBhdCAxNzoxMCArMDIwMCwgU2FtIFJhdm5ib3Jn IHdyb3RlOg0KPiBIaSBSb2JlcnQuDQo+IA0KPiBPbiB0b3Agb2YgdGhlIGZlZWRiYWNrIGZyb20g RmFiaW8gaGVyZSBpcyBhIGJpdCBtb3JlLg0KPiANCj4gPiANCj4gPiArDQo+ID4gKyNpbmNsdWRl IDxkcm0vZHJtUC5oPg0KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+DQo+ID4gKyNpbmNs dWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+DQo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+ DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+DQo+ID4gKyNpbmNsdWRlIDxs aW51eC9tb2R1bGUuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L29mLmg+DQo+ID4gKyNpbmNsdWRl IDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4NCj4gPiArI2luY2x1ZGUgPHZpZGVvL21pcGlf ZGlzcGxheS5oPg0KPiA+ICsjaW5jbHVkZSA8dmlkZW8vb2ZfdmlkZW9tb2RlLmg+DQo+ID4gKyNp bmNsdWRlIDx2aWRlby92aWRlb21vZGUuaD4NCj4gRGl2aWRlIGluY2x1ZGUgdXAgaW4gYmxvY2sg aW4gZm9sbG93aW5nIG9yZGVyOg0KPiANCj4gI2luY2x1ZGUgPGxpbnV4Lyo+DQo+IA0KPiAjaW5j bHVkZSA8dmlkZW8vKj4NCj4gDQo+ICNpbmN1ZGUgPGRybS8qPg0KPiANCj4gV2l0aGluIGVhY2gg YmxvY2sgc29ydCBhbHBoYWJldGljYWxseS4NCj4gRG8gbm90IHVzZSB0aGUgZGVwcmVjYXRlZCBk cm1QLmggLSByZXBsYWNlIGl0IHdpdGggdGhlIG5lY2Vzc2FyeQ0KPiBpbmNsdWRlcy4NCj4gVXNl IGFuIGVtcHR5IGxpbmUgYmV0d2VlbiBlYWNoIGluY2x1ZGUgYmxvY2suDQpUaGFua3MuIFdpbGwg ZG8uDQo+IA0KPiA+IA0KPiA+ICsNCj4gPiArLyogV3JpdGUgTWFudWZhY3R1cmUgQ29tbWFuZCBT ZXQgQ29udHJvbCAqLw0KPiA+ICsjZGVmaW5lIFdSTUFVQ0NUUiAweEZFDQo+ID4gKw0KPiA+ICsv KiBNYW51ZmFjdHVyZXIgQ29tbWFuZCBTZXQgcGFnZXMgKENNRDIpICovDQo+ID4gK3N0cnVjdCBj bWRfc2V0X2VudHJ5IHsNCj4gPiArwqDCoMKgwqDCoHU4IGNtZDsNCj4gPiArwqDCoMKgwqDCoHU4 IHBhcmFtOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArLyoNCj4gPiArICogVGhlcmUgaXMgbm8gZGVz Y3JpcHRpb24gaW4gdGhlIFJlZmVyZW5jZSBNYW51YWwgYWJvdXQgdGhlc2UNCj4gPiBjb21tYW5k cy4NCj4gPiArICogV2UgcmVjZWl2ZWQgdGhlbSBmcm9tIHZlbmRvciwgc28ganVzdCB1c2UgdGhl bSBhcyBpcy4NCj4gPiArICovDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY21kX3NldF9lbnRy eSBtYW51ZmFjdHVyZXJfY21kX3NldFtdID0gew0KPiA+ICvCoMKgwqDCoMKgezB4RkUsIDB4MEJ9 LA0KPiA+ICvCoMKgwqDCoMKgezB4MjgsIDB4NDB9LA0KPiA+ICvCoMKgwqDCoMKgezB4MjksIDB4 NEZ9LA0KPiAuLi4NCj4gPiANCj4gPiArwqDCoMKgwqDCoHsweDUxLCAweDA0fSwNCj4gPiArfTsN Cj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCB1MzIgcmFkX2J1c19mb3JtYXRzW10gPSB7DQo+ID4g K8KgwqDCoMKgwqBNRURJQV9CVVNfRk1UX1JHQjg4OF8xWDI0LA0KPiA+ICvCoMKgwqDCoMKgTUVE SUFfQlVTX0ZNVF9SR0I2NjZfMVgxOCwNCj4gPiArwqDCoMKgwqDCoE1FRElBX0JVU19GTVRfUkdC NTY1XzFYMTYsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgcmFkX3BhbmVsIHsNCj4gPiAr wqDCoMKgwqDCoHN0cnVjdCBkcm1fcGFuZWwgYmFzZTsNCj4gSW4gdGhlIG90aGVyIHJheWRpdW0g ZHJpdmVyIHdlIG5hbWUgdGhpcyAicGFuZWwiLCB3aGljaCBpcyBhIG1vcmUNCj4gZGVzY3JpcHRp dmUgbmFtZS4NCj4gDQo+ID4gDQo+ID4gK8KgwqDCoMKgwqBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNl ICpkc2k7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKgc3RydWN0IGdwaW9fZGVzYyAqcmVzZXQ7DQo+ ID4gK8KgwqDCoMKgwqBzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmFja2xpZ2h0Ow0KPiA+ICsN Cj4gPiArwqDCoMKgwqDCoGJvb2wgcHJlcGFyZWQ7DQo+ID4gK8KgwqDCoMKgwqBib29sIGVuYWJs ZWQ7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKgc3RydWN0IHZpZGVvbW9kZSB2bTsNCj4gPiArwqDC oMKgwqDCoHUzMiB3aWR0aF9tbTsNCj4gPiArwqDCoMKgwqDCoHUzMiBoZWlnaHRfbW07DQo+ID4g K307DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHJhZF9wYW5lbF9wcmVwYXJlKHN0cnVjdCBkcm1f cGFuZWwgKnBhbmVsKQ0KPiA+ICt7DQo+ID4gK8KgwqDCoMKgwqBzdHJ1Y3QgcmFkX3BhbmVsICpy YWQgPSB0b19yYWRfcGFuZWwocGFuZWwpOw0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoGlmIChyYWQt PnByZXBhcmVkKQ0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAwOw0KPiA+ ICsNCj4gPiArwqDCoMKgwqDCoGlmIChyYWQtPnJlc2V0KSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgZ3Bpb2Rfc2V0X3ZhbHVlKHJhZC0+cmVzZXQsIDApOw0KPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHVzbGVlcF9yYW5nZSg1MDAwLCAxMDAwMCk7DQo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZ3Bpb2Rfc2V0X3ZhbHVlKHJhZC0+cmVzZXQsIDEpOw0KPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVzbGVlcF9yYW5nZSgyMDAwMCwgMjUwMDApOw0K PiA+ICvCoMKgwqDCoMKgfQ0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoHJhZC0+cHJlcGFyZWQgPSB0 cnVlOw0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtzdGF0aWMgaW50IHJhZF9wYW5lbF91bnByZXBhcmUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwp DQo+ID4gK3sNCj4gPiArwqDCoMKgwqDCoHN0cnVjdCByYWRfcGFuZWwgKnJhZCA9IHRvX3JhZF9w YW5lbChwYW5lbCk7DQo+ID4gK8KgwqDCoMKgwqBzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcmFkLT5k c2ktPmRldjsNCj4gPiArDQo+ID4gK8KgwqDCoMKgwqBpZiAoIXJhZC0+cHJlcGFyZWQpDQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICvCoMKgwqDC oMKgaWYgKHJhZC0+ZW5hYmxlZCkgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERS TV9ERVZfRVJST1IoZGV2LCAiUGFuZWwgc3RpbGwgZW5hYmxlZCFcbiIpOw0KPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRVBFUk07DQo+ID4gK8KgwqDCoMKgwqB9DQo+IFRo aXMgc2VlbXMgbGlrZSBvdmVya2lsbCwgd2hhdCBzaG91bGQgdHJpZ2dlciB0aGlzPw0KUHJvYmFi bHksIGp1c3QgYmFkIHdyaXR0ZW4gY29kZSBpbiB0aGUgRFNJIGhvc3QgZHJpdmVyLCBidXQgeW91 IGFyZQ0KcmlnaHQsIGl0J3Mgb3ZlcmtpbGwuIEkgd2lsbCByZW1vdmUgdGhpcy4NCj4gDQo+ID4g DQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKgaWYgKHJhZC0+cmVzZXQpIHsNCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBncGlvZF9zZXRfdmFsdWUocmFkLT5yZXNldCwgMCk7DQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdXNsZWVwX3JhbmdlKDE1MDAwLCAxNzAwMCk7DQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ3Bpb2Rfc2V0X3ZhbHVlKHJhZC0+cmVzZXQsIDEp Ow0KPiA+ICvCoMKgwqDCoMKgfQ0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoHJhZC0+cHJlcGFyZWQg PSBmYWxzZTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgwqByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIGludCByYWRfcGFuZWxfZW5hYmxlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVs KQ0KPiA+ICt7DQo+ID4gK8KgwqDCoMKgwqBzdHJ1Y3QgcmFkX3BhbmVsICpyYWQgPSB0b19yYWRf cGFuZWwocGFuZWwpOw0KPiA+ICvCoMKgwqDCoMKgc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNp ID0gcmFkLT5kc2k7DQo+ID4gK8KgwqDCoMKgwqBzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZHNpLT5k ZXY7DQo+ID4gK8KgwqDCoMKgwqBpbnQgY29sb3JfZm9ybWF0ID0gY29sb3JfZm9ybWF0X2Zyb21f ZHNpX2Zvcm1hdChkc2ktPmZvcm1hdCk7DQo+ID4gK8KgwqDCoMKgwqB1MTYgYnJpZ2h0bmVzczsN Cj4gPiArwqDCoMKgwqDCoGludCByZXQ7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKgaWYgKHJhZC0+ ZW5hYmxlZCkNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsNCj4gPiAr DQo+ID4gK8KgwqDCoMKgwqBpZiAoIXJhZC0+cHJlcGFyZWQpIHsNCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBEUk1fREVWX0VSUk9SKGRldiwgIlBhbmVsIG5vdCBwcmVwYXJlZCFcbiIp Ow0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRVBFUk07DQo+ID4gK8Kg wqDCoMKgwqB9DQo+IFNlZW1zIGxpa2Ugb3ZlcmtpbGwuDQo+IA0KPiA+IA0KPiA+ICsNCj4gPiAr wqDCoMKgwqDCoGRzaS0+bW9kZV9mbGFncyB8PSBNSVBJX0RTSV9NT0RFX0xQTTsNCj4gPiArDQo+ ID4gK8KgwqDCoMKgwqByZXQgPSByYWRfcGFuZWxfcHVzaF9jbWRfbGlzdChkc2kpOw0KPiA+ICvC oMKgwqDCoMKgaWYgKHJldCA8IDApIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBE Uk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBzZW5kIE1DUyAoJWQpXG4iLCByZXQpOw0KPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gZmFpbDsNCj4gPiArwqDCoMKgwqDCoH0N Cj4gPiArDQo+ID4gK8KgwqDCoMKgwqAvKiBTZWxlY3QgVXNlciBDb21tYW5kIFNldCB0YWJsZSAo Q01EMSkgKi8NCj4gPiArwqDCoMKgwqDCoHJldCA9IG1pcGlfZHNpX2dlbmVyaWNfd3JpdGUoZHNp LCAodThbXSl7IFdSTUFVQ0NUUiwgMHgwMCB9LA0KPiA+IDIpOw0KPiA+ICvCoMKgwqDCoMKgaWYg KHJldCA8IDApDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBmYWlsOw0KPiA+ ICsNCj4gPiArwqDCoMKgwqDCoC8qIFNvZnR3YXJlIHJlc2V0ICovDQo+ID4gK8KgwqDCoMKgwqBy ZXQgPSBtaXBpX2RzaV9kY3Nfc29mdF9yZXNldChkc2kpOw0KPiA+ICvCoMKgwqDCoMKgaWYgKHJl dCA8IDApIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0VSUk9SKGRl diwgIkZhaWxlZCB0byBkbyBTb2Z0d2FyZSBSZXNldA0KPiA+ICglZClcbiIsIHJldCk7DQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBmYWlsOw0KPiA+ICvCoMKgwqDCoMKgfQ0K PiA+ICsNCj4gPiArwqDCoMKgwqDCoHVzbGVlcF9yYW5nZSgxNTAwMCwgMTcwMDApOw0KPiA+ICsN Cj4gPiArwqDCoMKgwqDCoC8qIFNldCBEU0kgbW9kZSAqLw0KPiA+ICvCoMKgwqDCoMKgcmV0ID0g bWlwaV9kc2lfZ2VuZXJpY193cml0ZShkc2ksICh1OFtdKXsgMHhDMiwgMHgwQiB9LCAyKTsNCj4g PiArwqDCoMKgwqDCoGlmIChyZXQgPCAwKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gc2V0IERTSSBtb2RlICglZClcbiIsDQo+ ID4gcmV0KTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGZhaWw7DQo+ID4g K8KgwqDCoMKgwqB9DQo+ID4gK8KgwqDCoMKgwqAvKiBTZXQgdGVhciBPTiAqLw0KPiA+ICvCoMKg wqDCoMKgcmV0ID0gbWlwaV9kc2lfZGNzX3NldF90ZWFyX29uKGRzaSwNCj4gPiBNSVBJX0RTSV9E Q1NfVEVBUl9NT0RFX1ZCTEFOSyk7DQo+ID4gK8KgwqDCoMKgwqBpZiAocmV0IDwgMCkgew0KPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRv IHNldCB0ZWFyIE9OICglZClcbiIsDQo+ID4gcmV0KTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBnb3RvIGZhaWw7DQo+ID4gK8KgwqDCoMKgwqB9DQo+ID4gK8KgwqDCoMKgwqAvKiBT ZXQgdGVhciBzY2FubGluZSAqLw0KPiA+ICvCoMKgwqDCoMKgcmV0ID0gbWlwaV9kc2lfZGNzX3Nl dF90ZWFyX3NjYW5saW5lKGRzaSwgMHgzODApOw0KPiA+ICvCoMKgwqDCoMKgaWYgKHJldCA8IDAp IHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0VSUk9SKGRldiwgIkZh aWxlZCB0byBzZXQgdGVhciBzY2FubGluZQ0KPiA+ICglZClcbiIsIHJldCk7DQo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBmYWlsOw0KPiA+ICvCoMKgwqDCoMKgfQ0KPiA+ICvC oMKgwqDCoMKgLyogU2V0IHBpeGVsIGZvcm1hdCAqLw0KPiA+ICvCoMKgwqDCoMKgcmV0ID0gbWlw aV9kc2lfZGNzX3NldF9waXhlbF9mb3JtYXQoZHNpLCBjb2xvcl9mb3JtYXQpOw0KPiA+ICvCoMKg wqDCoMKgRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiSW50ZXJmYWNlIGNvbG9yIGZvcm1hdCBz ZXQgdG8NCj4gPiAweCV4XG4iLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgY29sb3JfZm9ybWF0KTsNCj4gPiArwqDCoMKgwqDCoGlmIChy ZXQgPCAwKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJPUihk ZXYsICJGYWlsZWQgdG8gc2V0IHBpeGVsIGZvcm1hdA0KPiA+ICglZClcbiIsIHJldCk7DQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBmYWlsOw0KPiA+ICvCoMKgwqDCoMKgfQ0K PiA+ICvCoMKgwqDCoMKgLyogU2V0IGRpc3BsYXkgYnJpZ2h0bmVzcyAqLw0KPiA+ICvCoMKgwqDC oMKgYnJpZ2h0bmVzcyA9IHJhZC0+YmFja2xpZ2h0LT5wcm9wcy5icmlnaHRuZXNzOw0KPiA+ICvC oMKgwqDCoMKgcmV0ID0gbWlwaV9kc2lfZGNzX3NldF9kaXNwbGF5X2JyaWdodG5lc3MoZHNpLCBi cmlnaHRuZXNzKTsNCj4gPiArwqDCoMKgwqDCoGlmIChyZXQgPCAwKSB7DQo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gc2V0IGRpc3Bs YXkgYnJpZ2h0bmVzcw0KPiA+ICglZClcbiIsDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCk7DQo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgZ290byBmYWlsOw0KPiA+ICvCoMKgwqDCoMKgfQ0KPiBicmlnaHRuZXNzIGlz IHdyaXR0ZW4gdG8gYWdhaW4gd2hlbiB5b3UgZW5hYmxlIGJhY2tsaWdodCBiZWxvdy4NCj4gU2Vl bXMgcmVkdW5kYW50IHRvIGRvIHNvIHR3aWNlLg0KSSBwdXQgdGhpcyBoZXJlIGZyb20gdGhlIGlu aXRpYWxpemF0aW9uIHNlcXVlbmNlIHJlY2VpdmVkIGZyb20gdGhlDQpwYW5lbCB2ZW5kb3IuIEJ1 dCB5b3UgYXJlIHJpZ2h0LCB0aGUgYmFja2xpZ2h0IHdpbGwgYmUgZW5hYmxlZCBsYXRlcg0Kb24u IEkgd2lsbCByZW1vdmUgdGhpcy7CoA0KPiANCj4gDQo+ID4gDQo+ID4gK8KgwqDCoMKgwqAvKiBF eGl0IHNsZWVwIG1vZGUgKi8NCj4gPiArwqDCoMKgwqDCoHJldCA9IG1pcGlfZHNpX2Rjc19leGl0 X3NsZWVwX21vZGUoZHNpKTsNCj4gPiArwqDCoMKgwqDCoGlmIChyZXQgPCAwKSB7DQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gZXhp dCBzbGVlcCBtb2RlDQo+ID4gKCVkKVxuIiwgcmV0KTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBnb3RvIGZhaWw7DQo+ID4gK8KgwqDCoMKgwqB9DQo+ID4gKw0KPiA+ICvCoMKgwqDC oMKgdXNsZWVwX3JhbmdlKDUwMDAsIDEwMDAwKTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgwqByZXQg PSBtaXBpX2RzaV9kY3Nfc2V0X2Rpc3BsYXlfb24oZHNpKTsNCj4gPiArwqDCoMKgwqDCoGlmIChy ZXQgPCAwKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJPUihk ZXYsICJGYWlsZWQgdG8gc2V0IGRpc3BsYXkgT04gKCVkKVxuIiwNCj4gPiByZXQpOw0KPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gZmFpbDsNCj4gPiArwqDCoMKgwqDCoH0NCj4g PiArDQo+ID4gK8KgwqDCoMKgwqBiYWNrbGlnaHRfZW5hYmxlKHJhZC0+YmFja2xpZ2h0KTsNCj4g PiArDQo+ID4gK8KgwqDCoMKgwqByYWQtPmVuYWJsZWQgPSB0cnVlOw0KPiA+ICsNCj4gPiArwqDC oMKgwqDCoHJldHVybiAwOw0KPiA+ICsNCj4gPiArZmFpbDoNCj4gPiArwqDCoMKgwqDCoGlmIChy YWQtPnJlc2V0KQ0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdwaW9kX3NldF92YWx1 ZShyYWQtPnJlc2V0LCAwKTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgwqByZXR1cm4gcmV0Ow0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHJhZF9wYW5lbF9kaXNhYmxlKHN0cnVjdCBkcm1f cGFuZWwgKnBhbmVsKQ0KPiA+ICt7DQo+ID4gK8KgwqDCoMKgwqBzdHJ1Y3QgcmFkX3BhbmVsICpy YWQgPSB0b19yYWRfcGFuZWwocGFuZWwpOw0KPiA+ICvCoMKgwqDCoMKgc3RydWN0IG1pcGlfZHNp X2RldmljZSAqZHNpID0gcmFkLT5kc2k7DQo+ID4gK8KgwqDCoMKgwqBzdHJ1Y3QgZGV2aWNlICpk ZXYgPSAmZHNpLT5kZXY7DQo+ID4gK8KgwqDCoMKgwqBpbnQgcmV0Ow0KPiA+ICsNCj4gPiArwqDC oMKgwqDCoGlmICghcmFkLT5lbmFibGVkKQ0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJldHVybiAwOw0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoGRzaS0+bW9kZV9mbGFncyB8PSBNSVBJ X0RTSV9NT0RFX0xQTTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgwqBiYWNrbGlnaHRfZGlzYWJsZShy YWQtPmJhY2tsaWdodCk7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKgdXNsZWVwX3JhbmdlKDEwMDAw LCAxNTAwMCk7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKgcmV0ID0gbWlwaV9kc2lfZGNzX3NldF9k aXNwbGF5X29mZihkc2kpOw0KPiA+ICvCoMKgwqDCoMKgaWYgKHJldCA8IDApIHsNCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBzZXQg ZGlzcGxheSBPRkYNCj4gPiAoJWQpXG4iLCByZXQpOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJldHVybiByZXQ7DQo+ID4gK8KgwqDCoMKgwqB9DQo+ID4gKw0KPiA+ICvCoMKgwqDC oMKgdXNsZWVwX3JhbmdlKDUwMDAsIDEwMDAwKTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgwqByZXQg PSBtaXBpX2RzaV9kY3NfZW50ZXJfc2xlZXBfbW9kZShkc2kpOw0KPiA+ICvCoMKgwqDCoMKgaWYg KHJldCA8IDApIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0VSUk9S KGRldiwgIkZhaWxlZCB0byBlbnRlciBzbGVlcCBtb2RlDQo+ID4gKCVkKVxuIiwgcmV0KTsNCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Ow0KPiA+ICvCoMKgwqDCoMKg fQ0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoHJhZC0+ZW5hYmxlZCA9IGZhbHNlOw0KPiA+ICsNCj4g PiArwqDCoMKgwqDCoHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHJh ZF9wYW5lbF9nZXRfbW9kZXMoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpDQo+ID4gK3sNCj4gPiAr wqDCoMKgwqDCoHN0cnVjdCByYWRfcGFuZWwgKnJhZCA9IHRvX3JhZF9wYW5lbChwYW5lbCk7DQo+ ID4gK8KgwqDCoMKgwqBzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcmFkLT5kc2ktPmRldjsNCj4gPiAr wqDCoMKgwqDCoHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSBwYW5lbC0+Y29ubmVj dG9yOw0KPiA+ICvCoMKgwqDCoMKgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7DQo+ID4g K8KgwqDCoMKgwqB1MzIgKmJ1c19mbGFncyA9ICZjb25uZWN0b3ItPmRpc3BsYXlfaW5mby5idXNf ZmxhZ3M7DQo+ID4gK8KgwqDCoMKgwqBpbnQgcmV0Ow0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoG1v ZGUgPSBkcm1fbW9kZV9jcmVhdGUoY29ubmVjdG9yLT5kZXYpOw0KPiA+ICvCoMKgwqDCoMKgaWYg KCFtb2RlKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJPUihk ZXYsICJGYWlsZWQgdG8gY3JlYXRlIGRpc3BsYXkNCj4gPiBtb2RlIVxuIik7DQo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIDA7DQo+ID4gK8KgwqDCoMKgwqB9DQo+ID4gKw0K PiA+ICvCoMKgwqDCoMKgZHJtX2Rpc3BsYXlfbW9kZV9mcm9tX3ZpZGVvbW9kZSgmcmFkLT52bSwg bW9kZSk7DQo+ID4gK8KgwqDCoMKgwqBtb2RlLT53aWR0aF9tbSA9IHJhZC0+d2lkdGhfbW07DQo+ ID4gK8KgwqDCoMKgwqBtb2RlLT5oZWlnaHRfbW0gPSByYWQtPmhlaWdodF9tbTsNCj4gPiArwqDC oMKgwqDCoGNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLndpZHRoX21tID0gcmFkLT53aWR0aF9tbTsN Cj4gPiArwqDCoMKgwqDCoGNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmhlaWdodF9tbSA9IHJhZC0+ aGVpZ2h0X21tOw0KPiA+ICvCoMKgwqDCoMKgbW9kZS0+dHlwZSA9IERSTV9NT0RFX1RZUEVfRFJJ VkVSIHwgRFJNX01PREVfVFlQRV9QUkVGRVJSRUQ7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKgaWYg KHJhZC0+dm0uZmxhZ3MgJiBESVNQTEFZX0ZMQUdTX0RFX0hJR0gpDQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgKmJ1c19mbGFncyB8PSBEUk1fQlVTX0ZMQUdfREVfSElHSDsNCj4gPiAr wqDCoMKgwqDCoGlmIChyYWQtPnZtLmZsYWdzICYgRElTUExBWV9GTEFHU19ERV9MT1cpDQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKmJ1c19mbGFncyB8PSBEUk1fQlVTX0ZMQUdfREVf TE9XOw0KPiA+ICvCoMKgwqDCoMKgaWYgKHJhZC0+dm0uZmxhZ3MgJiBESVNQTEFZX0ZMQUdTX1BJ WERBVEFfTkVHRURHRSkNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqYnVzX2ZsYWdz IHw9IERSTV9CVVNfRkxBR19QSVhEQVRBX05FR0VER0U7DQo+ID4gK8KgwqDCoMKgwqBpZiAocmFk LT52bS5mbGFncyAmIERJU1BMQVlfRkxBR1NfUElYREFUQV9QT1NFREdFKQ0KPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCpidXNfZmxhZ3MgfD0gRFJNX0JVU19GTEFHX1BJWERBVEFfUE9T RURHRTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgwqByZXQgPSBkcm1fZGlzcGxheV9pbmZvX3NldF9i dXNfZm9ybWF0cygmY29ubmVjdG9yLQ0KPiA+ID5kaXNwbGF5X2luZm8sDQo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByYWRfYnVzX2Zvcm1hdHMsDQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBBUlJBWV9TSVpFKHJhZF9idXNfZm9yDQo+ID4gbWF0cykpOw0K PiA+ICvCoMKgwqDCoMKgaWYgKHJldCkNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoGRybV9tb2RlX3Byb2JlZF9hZGQocGFu ZWwtPmNvbm5lY3RvciwgbW9kZSk7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKgcmV0dXJuIDE7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgcmFkX2JsX2dldF9icmlnaHRuZXNzKHN0cnVj dCBiYWNrbGlnaHRfZGV2aWNlICpibCkNCj4gPiArew0KPiA+ICvCoMKgwqDCoMKgc3RydWN0IG1p cGlfZHNpX2RldmljZSAqZHNpID0gYmxfZ2V0X2RhdGEoYmwpOw0KPiA+ICvCoMKgwqDCoMKgc3Ry dWN0IHJhZF9wYW5lbCAqcmFkID0gbWlwaV9kc2lfZ2V0X2RydmRhdGEoZHNpKTsNCj4gPiArwqDC oMKgwqDCoHN0cnVjdCBkZXZpY2UgKmRldiA9ICZkc2ktPmRldjsNCj4gPiArwqDCoMKgwqDCoHUx NiBicmlnaHRuZXNzOw0KPiA+ICvCoMKgwqDCoMKgaW50IHJldDsNCj4gPiArDQo+ID4gK8KgwqDC oMKgwqBpZiAoIXJhZC0+cHJlcGFyZWQpDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIDA7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKgRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2 LCAiXG4iKTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgwqBkc2ktPm1vZGVfZmxhZ3MgJj0gfk1JUElf RFNJX01PREVfTFBNOw0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoHJldCA9IG1pcGlfZHNpX2Rjc19n ZXRfZGlzcGxheV9icmlnaHRuZXNzKGRzaSwgJmJyaWdodG5lc3MpOw0KPiA+ICvCoMKgwqDCoMKg aWYgKHJldCA8IDApDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsN Cj4gPiArDQo+ID4gK8KgwqDCoMKgwqBibC0+cHJvcHMuYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7 DQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKgcmV0dXJuIGJyaWdodG5lc3MgJiAweGZmOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHJhZF9ibF91cGRhdGVfc3RhdHVzKHN0cnVjdCBiYWNr bGlnaHRfZGV2aWNlICpibCkNCj4gPiArew0KPiA+ICvCoMKgwqDCoMKgc3RydWN0IG1pcGlfZHNp X2RldmljZSAqZHNpID0gYmxfZ2V0X2RhdGEoYmwpOw0KPiA+ICvCoMKgwqDCoMKgc3RydWN0IHJh ZF9wYW5lbCAqcmFkID0gbWlwaV9kc2lfZ2V0X2RydmRhdGEoZHNpKTsNCj4gPiArwqDCoMKgwqDC oHN0cnVjdCBkZXZpY2UgKmRldiA9ICZkc2ktPmRldjsNCj4gPiArwqDCoMKgwqDCoGludCByZXQg PSAwOw0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoGlmICghcmFkLT5wcmVwYXJlZCkNCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsNCj4gPiArDQo+ID4gK8KgwqDCoMKgwqBE Uk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJOZXcgYnJpZ2h0bmVzczogJWRcbiIsIGJsLQ0KPiA+ ID5wcm9wcy5icmlnaHRuZXNzKTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgwqBkc2ktPm1vZGVfZmxh Z3MgJj0gfk1JUElfRFNJX01PREVfTFBNOw0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoHJldCA9IG1p cGlfZHNpX2Rjc19zZXRfZGlzcGxheV9icmlnaHRuZXNzKGRzaSwgYmwtDQo+ID4gPnByb3BzLmJy aWdodG5lc3MpOw0KPiA+ICvCoMKgwqDCoMKgaWYgKHJldCA8IDApDQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gK8KgwqDCoMKgwqByZXR1cm4g MDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfb3Bz IHJhZF9ibF9vcHMgPSB7DQo+ID4gK8KgwqDCoMKgwqAudXBkYXRlX3N0YXR1cyA9IHJhZF9ibF91 cGRhdGVfc3RhdHVzLA0KPiA+ICvCoMKgwqDCoMKgLmdldF9icmlnaHRuZXNzID0gcmFkX2JsX2dl dF9icmlnaHRuZXNzLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBk cm1fcGFuZWxfZnVuY3MgcmFkX3BhbmVsX2Z1bmNzID0gew0KPiA+ICvCoMKgwqDCoMKgLnByZXBh cmUgPSByYWRfcGFuZWxfcHJlcGFyZSwNCj4gPiArwqDCoMKgwqDCoC51bnByZXBhcmUgPSByYWRf cGFuZWxfdW5wcmVwYXJlLA0KPiA+ICvCoMKgwqDCoMKgLmVuYWJsZSA9IHJhZF9wYW5lbF9lbmFi bGUsDQo+ID4gK8KgwqDCoMKgwqAuZGlzYWJsZSA9IHJhZF9wYW5lbF9kaXNhYmxlLA0KPiA+ICvC oMKgwqDCoMKgLmdldF9tb2RlcyA9IHJhZF9wYW5lbF9nZXRfbW9kZXMsDQo+ID4gK307DQo+ID4g Kw0KPiA+ICsvKg0KPiA+ICsgKiBUaGUgY2xvY2sgbWlnaHQgcmFuZ2UgZnJvbSA2Nk1IeiAoMzBI eiByZWZyZXNoIHJhdGUpDQo+ID4gKyAqIHRvIDEzMk1IeiAoNjBIeiByZWZyZXNoIHJhdGUpDQo+ ID4gKyAqLw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRpc3BsYXlfdGltaW5nIHJhZF9kZWZh dWx0X3RpbWluZyA9IHsNCj4gPiArwqDCoMKgwqDCoC5waXhlbGNsb2NrID0geyA2NjAwMDAwMCwg MTMyMDAwMDAwLCAxMzIwMDAwMDAgfSwNCj4gPiArwqDCoMKgwqDCoC5oYWN0aXZlID0geyAxMDgw LCAxMDgwLCAxMDgwIH0sDQo+ID4gK8KgwqDCoMKgwqAuaGZyb250X3BvcmNoID0geyAyMCwgMjAs IDIwIH0sDQo+ID4gK8KgwqDCoMKgwqAuaHN5bmNfbGVuID0geyAyLCAyLCAyIH0sDQo+ID4gK8Kg wqDCoMKgwqAuaGJhY2tfcG9yY2ggPSB7IDM0LCAzNCwgMzQgfSwNCj4gPiArwqDCoMKgwqDCoC52 YWN0aXZlID0geyAxOTIwLCAxOTIwLCAxOTIwIH0sDQo+ID4gK8KgwqDCoMKgwqAudmZyb250X3Bv cmNoID0geyAxMCwgMTAsIDEwIH0sDQo+ID4gK8KgwqDCoMKgwqAudnN5bmNfbGVuID0geyAyLCAy LCAyIH0sDQo+ID4gK8KgwqDCoMKgwqAudmJhY2tfcG9yY2ggPSB7IDQsIDQsIDQgfSwNCj4gPiAr wqDCoMKgwqDCoC5mbGFncyA9IERJU1BMQVlfRkxBR1NfSFNZTkNfTE9XIHwNCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoERJU1BMQVlfRkxBR1NfVlNZTkNfTE9XIHwNCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERJU1BMQVlfRkxBR1NfREVfTE9XIHwNCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERJU1BMQVlfRkxBR1NfUElYREFUQV9ORUdFREdFLA0K PiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGludCByYWRfcGFuZWxfcHJvYmUoc3RydWN0IG1p cGlfZHNpX2RldmljZSAqZHNpKQ0KPiA+ICt7DQo+ID4gK8KgwqDCoMKgwqBzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmZHNpLT5kZXY7DQo+ID4gK8KgwqDCoMKgwqBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5w ID0gZGV2LT5vZl9ub2RlOw0KPiA+ICvCoMKgwqDCoMKgc3RydWN0IGRldmljZV9ub2RlICp0aW1p bmdzOw0KPiA+ICvCoMKgwqDCoMKgc3RydWN0IHJhZF9wYW5lbCAqcGFuZWw7DQo+ID4gK8KgwqDC oMKgwqBzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgYmxfcHJvcHM7DQo+ID4gK8KgwqDCoMKg wqBpbnQgcmV0Ow0KPiA+ICvCoMKgwqDCoMKgdTMyIHZpZGVvX21vZGU7DQo+ID4gKw0KPiA+ICvC oMKgwqDCoMKgcGFuZWwgPSBkZXZtX2t6YWxsb2MoJmRzaS0+ZGV2LCBzaXplb2YoKnBhbmVsKSwg R0ZQX0tFUk5FTCk7DQo+ID4gK8KgwqDCoMKgwqBpZiAoIXBhbmVsKQ0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRU5PTUVNOw0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoG1p cGlfZHNpX3NldF9kcnZkYXRhKGRzaSwgcGFuZWwpOw0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoHBh bmVsLT5kc2kgPSBkc2k7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKgZHNpLT5mb3JtYXQgPSBNSVBJ X0RTSV9GTVRfUkdCODg4Ow0KPiA+ICvCoMKgwqDCoMKgZHNpLT5tb2RlX2ZsYWdzID3CoMKgTUlQ SV9EU0lfTU9ERV9WSURFT19IU0UgfA0KPiA+IE1JUElfRFNJX01PREVfVklERU8gfA0KPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBNSVBJX0RTSV9D TE9DS19OT05fQ09OVElOVU9VUzsNCj4gPiArDQo+ID4gK8KgwqDCoMKgwqByZXQgPSBvZl9wcm9w ZXJ0eV9yZWFkX3UzMihucCwgInZpZGVvLW1vZGUiLCAmdmlkZW9fbW9kZSk7DQo+ID4gK8KgwqDC oMKgwqBpZiAoIXJldCkgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN3aXRjaCAo dmlkZW9fbW9kZSkgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNhc2UgMDoNCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogYnVyc3QgbW9k ZSAqLw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkc2kt Pm1vZGVfZmxhZ3MgfD0gTUlQSV9EU0lfTU9ERV9WSURFT19CVVJTVDsNCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7DQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgY2FzZSAxOg0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAvKiBub24tYnVyc3QgbW9kZSB3aXRoIHN5bmMgZXZlbnQgKi8NCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7DQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2FzZSAyOg0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBub24tYnVyc3QgbW9kZSB3aXRoIHN5bmMgcHVsc2Ug Ki8NCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHNpLT5t b2RlX2ZsYWdzIHw9DQo+ID4gTUlQSV9EU0lfTU9ERV9WSURFT19TWU5DX1BVTFNFOw0KPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsNCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZWZhdWx0Og0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfd2FybihkZXYsICJpbnZhbGlkIHZpZGVvIG1vZGUg JWRcbiIsDQo+ID4gdmlkZW9fbW9kZSk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGJyZWFrOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0N Cj4gPiArwqDCoMKgwqDCoH0NCj4gPiArDQo+ID4gK8KgwqDCoMKgwqByZXQgPSBvZl9wcm9wZXJ0 eV9yZWFkX3UzMihucCwgImRzaS1sYW5lcyIsICZkc2ktPmxhbmVzKTsNCj4gPiArwqDCoMKgwqDC oGlmIChyZXQgPCAwKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2Vycihk ZXYsICJGYWlsZWQgdG8gZ2V0IGRzaS1sYW5lcyBwcm9wZXJ0eQ0KPiA+ICglZClcbiIsIHJldCk7 DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4gPiArwqDCoMKg wqDCoH0NCj4gPiArDQo+ID4gK8KgwqDCoMKgwqAvKg0KPiA+ICvCoMKgwqDCoMKgwqAqICdkaXNw bGF5LXRpbWluZ3MnIGlzIG9wdGlvbmFsLCBzbyB2ZXJpZnkgaWYgdGhlIG5vZGUgaXMNCj4gPiBw cmVzZW50DQo+ID4gK8KgwqDCoMKgwqDCoCogYmVmb3JlIGNhbGxpbmcgb2ZfZ2V0X3ZpZGVvbW9k ZSBzbyB3ZSB3b24ndCBnZXQgY29uc29sZQ0KPiA+IGVycm9yDQo+ID4gK8KgwqDCoMKgwqDCoCog bWVzc2FnZXMNCj4gPiArwqDCoMKgwqDCoMKgKi8NCj4gPiArwqDCoMKgwqDCoHRpbWluZ3MgPSBv Zl9nZXRfY2hpbGRfYnlfbmFtZShucCwgImRpc3BsYXktdGltaW5ncyIpOw0KPiA+ICvCoMKgwqDC oMKgaWYgKHRpbWluZ3MpIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBvZl9ub2Rl X3B1dCh0aW1pbmdzKTsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBvZl9n ZXRfdmlkZW9tb2RlKG5wLCAmcGFuZWwtPnZtLCAwKTsNCj4gPiArwqDCoMKgwqDCoH0gZWxzZSB7 DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdmlkZW9tb2RlX2Zyb21fdGltaW5nKCZy YWRfZGVmYXVsdF90aW1pbmcsICZwYW5lbC0NCj4gPiA+dm0pOw0KPiA+ICvCoMKgwqDCoMKgfQ0K PiA+ICvCoMKgwqDCoMKgaWYgKHJldCA8IDApDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gK8KgwqDCoMKgwqBvZl9wcm9wZXJ0eV9yZWFkX3Uz MihucCwgIndpZHRoLW1tIiwgJnBhbmVsLT53aWR0aF9tbSk7DQo+ID4gK8KgwqDCoMKgwqBvZl9w cm9wZXJ0eV9yZWFkX3UzMihucCwgImhlaWdodC1tbSIsICZwYW5lbC0+aGVpZ2h0X21tKTsNCj4g PiArDQo+ID4gK8KgwqDCoMKgwqBwYW5lbC0+cmVzZXQgPSBkZXZtX2dwaW9kX2dldChkZXYsICJy ZXNldCIsIEdQSU9EX09VVF9ISUdIKTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgwqBpZiAoSVNfRVJS KHBhbmVsLT5yZXNldCkpDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGFuZWwtPnJl c2V0ID0gTlVMTDsNCj4gPiArwqDCoMKgwqDCoGVsc2UNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBncGlvZF9zZXRfdmFsdWUocGFuZWwtPnJlc2V0LCAwKTsNCj4gPiArDQo+ID4gK8Kg wqDCoMKgwqBtZW1zZXQoJmJsX3Byb3BzLCAwLCBzaXplb2YoYmxfcHJvcHMpKTsNCj4gPiArwqDC oMKgwqDCoGJsX3Byb3BzLnR5cGUgPSBCQUNLTElHSFRfUkFXOw0KPiA+ICvCoMKgwqDCoMKgYmxf cHJvcHMuYnJpZ2h0bmVzcyA9IDI1NTsNCj4gPiArwqDCoMKgwqDCoGJsX3Byb3BzLm1heF9icmln aHRuZXNzID0gMjU1Ow0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoHBhbmVsLT5iYWNrbGlnaHQgPSBk ZXZtX2JhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoZGV2LA0KPiA+IGRldl9uYW1lKGRldiksDQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ZGV2LCBkc2ksDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgJnJhZF9ibF9vcHMNCj4gPiAsDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgJmJsX3Byb3BzKTsNCj4gPiArwqDCoMKg wqDCoGlmIChJU19FUlIocGFuZWwtPmJhY2tsaWdodCkpIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXQgPSBQVFJfRVJSKHBhbmVsLT5iYWNrbGlnaHQpOw0KPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGJhY2ts aWdodCAoJWQpXG4iLA0KPiA+IHJldCk7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIHJldDsNCj4gPiArwqDCoMKgwqDCoH0NCj4gPiArDQo+ID4gK8KgwqDCoMKgwqBkcm1f cGFuZWxfaW5pdCgmcGFuZWwtPmJhc2UpOw0KPiA+ICvCoMKgwqDCoMKgcGFuZWwtPmJhc2UuZnVu Y3MgPSAmcmFkX3BhbmVsX2Z1bmNzOw0KPiA+ICvCoMKgwqDCoMKgcGFuZWwtPmJhc2UuZGV2ID0g ZGV2Ow0KPiA+ICvCoMKgwqDCoMKgZGV2X3NldF9kcnZkYXRhKGRldiwgcGFuZWwpOw0KPiA+ICsN Cj4gPiArwqDCoMKgwqDCoHJldCA9IGRybV9wYW5lbF9hZGQoJnBhbmVsLT5iYXNlKTsNCj4gPiAr DQo+ID4gK8KgwqDCoMKgwqBpZiAocmV0IDwgMCkNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoHJldCA9IG1pcGlfZHNpX2F0 dGFjaChkc2kpOw0KPiA+ICvCoMKgwqDCoMKgaWYgKHJldCA8IDApDQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgZHJtX3BhbmVsX3JlbW92ZSgmcGFuZWwtPmJhc2UpOw0KPiA+ICsNCj4g PiArwqDCoMKgwqDCoHJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQg cmFkX3BhbmVsX3JlbW92ZShzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kpDQo+ID4gK3sNCj4g PiArwqDCoMKgwqDCoHN0cnVjdCByYWRfcGFuZWwgKnJhZCA9IG1pcGlfZHNpX2dldF9kcnZkYXRh KGRzaSk7DQo+ID4gK8KgwqDCoMKgwqBzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZHNpLT5kZXY7DQo+ ID4gK8KgwqDCoMKgwqBpbnQgcmV0Ow0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoHJldCA9IG1pcGlf ZHNpX2RldGFjaChkc2kpOw0KPiA+ICvCoMKgwqDCoMKgaWYgKHJldCA8IDApDQo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gZGV0YWNo IGZyb20gaG9zdA0KPiA+ICglZClcbiIsDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCk7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKg ZHJtX3BhbmVsX3JlbW92ZSgmcmFkLT5iYXNlKTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgwqByZXR1 cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgcmFkX3BhbmVsX3NodXRkb3du KHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSkNCj4gPiArew0KPiA+ICvCoMKgwqDCoMKgc3Ry dWN0IHJhZF9wYW5lbCAqcmFkID0gbWlwaV9kc2lfZ2V0X2RydmRhdGEoZHNpKTsNCj4gPiArDQo+ ID4gK8KgwqDCoMKgwqByYWRfcGFuZWxfZGlzYWJsZSgmcmFkLT5iYXNlKTsNCj4gPiArwqDCoMKg wqDCoHJhZF9wYW5lbF91bnByZXBhcmUoJnJhZC0+YmFzZSk7DQo+ID4gK30NCj4gPiArDQo+ID4g KyNpZmRlZiBDT05GSUdfUE0NCj4gPiArc3RhdGljIGludCByYWRfcGFuZWxfc3VzcGVuZChzdHJ1 Y3QgZGV2aWNlICpkZXYpDQo+ID4gK3sNCj4gPiArwqDCoMKgwqDCoHN0cnVjdCByYWRfcGFuZWwg KnJhZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoGlmICgh cmFkLT5yZXNldCkNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsNCj4g PiArDQo+ID4gK8KgwqDCoMKgwqBkZXZtX2dwaW9kX3B1dChkZXYsIHJhZC0+cmVzZXQpOw0KPiA+ ICvCoMKgwqDCoMKgcmFkLT5yZXNldCA9IE5VTEw7DQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKgcmV0 dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgcmFkX3BhbmVsX3Jlc3VtZShz dHJ1Y3QgZGV2aWNlICpkZXYpDQo+ID4gK3sNCj4gPiArwqDCoMKgwqDCoHN0cnVjdCByYWRfcGFu ZWwgKnJhZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoGlm IChyYWQtPnJlc2V0KQ0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAwOw0K PiA+ICsNCj4gPiArwqDCoMKgwqDCoHJhZC0+cmVzZXQgPSBkZXZtX2dwaW9kX2dldChkZXYsICJy ZXNldCIsIEdQSU9EX09VVF9ISUdIKTsNCj4gPiArwqDCoMKgwqDCoGlmIChJU19FUlIocmFkLT5y ZXNldCkpDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmFkLT5yZXNldCA9IE5VTEw7 DQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKgcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhyYWQtPnJlc2V0 KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArI2VuZGlmDQo+IE5vIG90aGVyIHBhbmVscyBoYXZlIHN1 c3BlbmQvcmVzdW1lLg0KPiBJcyBpdCByZWxldmFudD8NClRoaXMgaXMgYmVjYXVzZSBvZiB0aGUg c2hhcmVkICdyZXNldCcgcGluIHdpdGggdGhlIHRvdWNoc2NyZWVuIGRyaXZlci4NCkR1cmluZyBz dXNwZW5kIEkgbmVlZCB0byByZWxlYXNlIHRoaXMgZ3BpbyByZXNvdXJjZS4NCj4gDQo+IA0KPiA+ IA0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHJhZF9wbV9vcHMg PSB7DQo+ID4gK8KgwqDCoMKgwqBTRVRfUlVOVElNRV9QTV9PUFMocmFkX3BhbmVsX3N1c3BlbmQs IHJhZF9wYW5lbF9yZXN1bWUsIE5VTEwpDQo+ID4gK8KgwqDCoMKgwqBTRVRfU1lTVEVNX1NMRUVQ X1BNX09QUyhyYWRfcGFuZWxfc3VzcGVuZCwgcmFkX3BhbmVsX3Jlc3VtZSkNCj4gPiArfTsNCj4g PiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHJhZF9vZl9tYXRjaFtd ID0gew0KPiA+ICvCoMKgwqDCoMKgeyAuY29tcGF0aWJsZSA9ICJyYXlkaXVtLHJtNjcxOTEiLCB9 LA0KPiA+ICvCoMKgwqDCoMKgeyB9DQo+ID4gK307DQo+ID4gK01PRFVMRV9ERVZJQ0VfVEFCTEUo b2YsIHJhZF9vZl9tYXRjaCk7DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IG1pcGlfZHNpX2Ry aXZlciByYWRfcGFuZWxfZHJpdmVyID0gew0KPiA+ICvCoMKgwqDCoMKgLmRyaXZlciA9IHsNCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAubmFtZSA9ICJwYW5lbC1yYXlkaXVtLXJtNjcx OTEiLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5vZl9tYXRjaF90YWJsZSA9IHJh ZF9vZl9tYXRjaCwNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAucG3CoMKgwqDCoMKg PSAmcmFkX3BtX29wcywNCj4gPiArwqDCoMKgwqDCoH0sDQo+ID4gK8KgwqDCoMKgwqAucHJvYmUg PSByYWRfcGFuZWxfcHJvYmUsDQo+ID4gK8KgwqDCoMKgwqAucmVtb3ZlID0gcmFkX3BhbmVsX3Jl bW92ZSwNCj4gPiArwqDCoMKgwqDCoC5zaHV0ZG93biA9IHJhZF9wYW5lbF9zaHV0ZG93biwNCj4g PiArfTsNCj4gPiArbW9kdWxlX21pcGlfZHNpX2RyaXZlcihyYWRfcGFuZWxfZHJpdmVyKTsNCj4g PiArDQo+ID4gK01PRFVMRV9BVVRIT1IoIlJvYmVydCBDaGlyYXMgPHJvYmVydC5jaGlyYXNAbnhw LmNvbT4iKTsNCj4gPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJEUk0gRHJpdmVyIGZvciBSYXlkaXVt IFJNNjcxOTEgTUlQSSBEU0kNCj4gPiBwYW5lbCIpOw0KPiA+ICtNT0RVTEVfTElDRU5TRSgiR1BM IHYyIik7DQo+IA0KPiDCoMKgwqDCoMKgwqDCoMKgU2Ft