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=-6.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, 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 2820DECE58C for ; Mon, 7 Oct 2019 13:52:52 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id C738820867 for ; Mon, 7 Oct 2019 13:52:51 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=analog.onmicrosoft.com header.i=@analog.onmicrosoft.com header.b="KzotfTi9" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727715AbfJGNwv (ORCPT ); Mon, 7 Oct 2019 09:52:51 -0400 Received: from mx0a-00128a01.pphosted.com ([148.163.135.77]:32234 "EHLO mx0a-00128a01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726334AbfJGNwv (ORCPT ); Mon, 7 Oct 2019 09:52:51 -0400 Received: from pps.filterd (m0167089.ppops.net [127.0.0.1]) by mx0a-00128a01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id x97Dlnje009056; Mon, 7 Oct 2019 09:52:22 -0400 Received: from nam04-bn3-obe.outbound.protection.outlook.com (mail-bn3nam04lp2051.outbound.protection.outlook.com [104.47.46.51]) by mx0a-00128a01.pphosted.com with ESMTP id 2ver39fvka-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Mon, 07 Oct 2019 09:52:22 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=B3q26DR9nQ039PZNsTRf7rx2HCNSFH4qxbkt54v1K5rOR3bk1jpLFQLDcHSHUmt3v75ebBsGwIFvZaEK1r8CQvzMOeyOKZMkob91S4F9ASCloBZ3gDSn0brwK53RpQGAIjvsUh06fDok4oBOODB35ySoSnnA00GNGVNYZMqGjRzSbBFr5LCRIJJUp2UGB/Kp2ogkZ6rs+PCOqm/TriOS2VJG32Vw/taNCFc5beNvlMio2b/OgRgntQ4e+npbYRwXvGCgDgxtJorzKROc4jc82/t6IlSj67huaVNqwcOF0vjreTXMmXFtCj01OE5F70xHF4NAW2Q8qPjbXcK9su0O9A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LMcADExH5mCUZ722Ph21VOz+S69S54n4cXv84SWrggo=; b=KH3q7ZLKCHjt10kD7AbeGN/uqtrAAO0iuMdbVerENcC9KwL0UoletEx3wutL++GMfe1g9x6OuZjRm7SBRqHYwfXqpPJeJnbE+PiaLvNAJThVb8vvfHdoqjaRNDJvuwQmaLBRiCASTWSmixBf3GyvOk0Fg3qjd9wm27R/a5CNg6YtQEJmLjxBhtEZEGJFUtbq4xI7zuCkq2tn0QVQogRymXL6Kwfo0/kDOC/JAFBmqBkbxVwZ+23GlIIKnbYVtkD46XdA8nqryX/hy5TRuWz0SwlBySMKuDKQud4qexZjFwU1eJy+7iCubuqvniNvVi8MASRu/v2r4uQqP30XjruJfw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=analog.com; dmarc=pass action=none header.from=analog.com; dkim=pass header.d=analog.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=analog.onmicrosoft.com; s=selector2-analog-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LMcADExH5mCUZ722Ph21VOz+S69S54n4cXv84SWrggo=; b=KzotfTi9Q20OYHfHdfCHEhRZCQOym8AM/wMGWV+MwFQ03fIoBRmmdOtHvr5cYuCmHUfYv3yOtkS6n8EcOCocEJtjDatwWQMOKoT7584Awj8OOQXIfv+VpUJPsuQ3FC/ASVLa8+f+eFV7DBpqN5SZM5U1SyiSOu7/wyxVcXC/v+A= Received: from MN2PR03MB5117.namprd03.prod.outlook.com (52.132.171.137) by MN2PR03MB4797.namprd03.prod.outlook.com (20.179.80.207) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2327.23; Mon, 7 Oct 2019 13:52:20 +0000 Received: from MN2PR03MB5117.namprd03.prod.outlook.com ([fe80::8c20:8f3b:b536:dca5]) by MN2PR03MB5117.namprd03.prod.outlook.com ([fe80::8c20:8f3b:b536:dca5%7]) with mapi id 15.20.2327.025; Mon, 7 Oct 2019 13:52:20 +0000 From: "Sa, Nuno" To: "linux@roeck-us.net" CC: "mdf@kernel.org" , "linux-fpga@vger.kernel.org" , "devicetree@vger.kernel.org" , "mark.rutland@arm.com" , "linux-hwmon@vger.kernel.org" , "jdelvare@suse.com" , "robh+dt@kernel.org" Subject: Re: [PATCH 2/3] hwmon: Support ADI Fan Control IP Thread-Topic: [PATCH 2/3] hwmon: Support ADI Fan Control IP Thread-Index: AQHVdFa03kFb3oEkSUeluAbSCPFerqdNzcGAgAF2kAA= Date: Mon, 7 Oct 2019 13:52:20 +0000 Message-ID: <9a3bec277caaabffb75248ddc6fbb89b5d95da5b.camel@analog.com> References: <20190926103925.194973-1-nuno.sa@analog.com> <20190926103925.194973-3-nuno.sa@analog.com> <20191006153209.GA30372@roeck-us.net> In-Reply-To: <20191006153209.GA30372@roeck-us.net> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [137.71.226.54] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: cbd7c0e3-73ad-46b1-cfe5-08d74b2d92ab x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: MN2PR03MB4797: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-forefront-prvs: 01834E39B7 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(136003)(396003)(346002)(376002)(366004)(39860400002)(199004)(51444003)(189003)(66556008)(64756008)(66476007)(26005)(186003)(66446008)(3846002)(6116002)(99286004)(66946007)(6916009)(305945005)(71200400001)(102836004)(7736002)(71190400001)(76176011)(6506007)(54906003)(81166006)(8676002)(1730700003)(81156014)(446003)(316002)(8936002)(256004)(14444005)(476003)(11346002)(2616005)(86362001)(91956017)(76116006)(486006)(25786009)(36756003)(5660300002)(4326008)(478600001)(30864003)(229853002)(6246003)(6486002)(6436002)(5640700003)(6512007)(6306002)(66066001)(118296001)(14454004)(2351001)(2906002)(2501003)(579004);DIR:OUT;SFP:1101;SCL:1;SRVR:MN2PR03MB4797;H:MN2PR03MB5117.namprd03.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: analog.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: /n4GM4czoZAYJROwPK1QpdRHnlffCAHLwwvs9qfMZIgeuIumhKHKBBzWK/TXJRzWI8G4Cbq7lxYUdAu7RTzexpk/kpuEn+YCShtqf4QESHVcMF+TNlx9wV3KibLZ6IBMXQhDW659aQok3Yplt7VYIE612zs5UlJTitUw94axYWZWPA4BNAwU/wLcwdm3Czjoq0B4W8OoOtxrlyMYIZSlnK5QUR/CsmwW6ShPMt++UPg283p2zecAPQJapo0FMlvVoZpdcBWKfdPzvM3jdrQ+1EozWEHfumXTpeKSgGiNdqdM7OeJiQ9/qpqifSx5Sb2Ri0zeo4RbgZMymT8BOEiAdRm8hkiesq2jprF3D+Af/kGTz2o+dFkkxf4w7nTuoDqVyIVUsWrOZ38g38M8maKx8EGDCpISFVg4u+/hRBR+gRU= x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" Content-ID: <89AF977E7074384FB33807C4706C68FD@namprd03.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: analog.com X-MS-Exchange-CrossTenant-Network-Message-Id: cbd7c0e3-73ad-46b1-cfe5-08d74b2d92ab X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Oct 2019 13:52:20.1514 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: eaa689b4-8f87-40e0-9c6f-7228de4d754a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: A4OXgHr3/Tdo0h/kFlMtAAdo0j5LUi1eTULLug8SyA86MHpqhwmYvxYXW6JZD+hKImJdKSBmryTO4AXsz3JkbA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR03MB4797 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.95,1.0.8 definitions=2019-10-07_02:2019-10-07,2019-10-07 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxlogscore=999 mlxscore=0 bulkscore=0 spamscore=0 priorityscore=1501 phishscore=0 suspectscore=0 lowpriorityscore=0 clxscore=1015 malwarescore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-1908290000 definitions=main-1910070137 Sender: linux-hwmon-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-hwmon@vger.kernel.org T24gU3VuLCAyMDE5LTEwLTA2IGF0IDA4OjMyIC0wNzAwLCBHdWVudGVyIFJvZWNrIHdyb3RlOg0K PiANCj4gT24gVGh1LCBTZXAgMjYsIDIwMTkgYXQgMTI6Mzk6MjRQTSArMDIwMCwgTnVubyBTw6Eg d3JvdGU6DQo+ID4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBJUCBDb3JlIGlzIHRvIGNvbnRyb2wgdGhl IGZhbiB1c2VkIGZvciB0aGUNCj4gPiBjb29saW5nIG9mIGENCj4gPiBYaWxpbnggWnlucSBVbHRy YXNjYWxlKyBNUFNvQyB3aXRob3V0IHRoZSBuZWVkIG9mIGFueSBleHRlcm5hbA0KPiA+IHRlbXBl cmF0dXJlDQo+ID4gc2Vuc29ycy4gVG8gYWNoaWV2ZSB0aGlzLCB0aGUgSVAgY29yZSB1c2VzIHRo ZSBQTCBTWVNNT05FNA0KPiA+IHByaW1pdGl2ZSB0bw0KPiA+IG9idGFpbiB0aGUgUEwgdGVtcGVy YXR1cmUgYW5kLCBiYXNlZCBvbiB0aG9zZSByZWFkaW5ncywgaXQgdGhlbg0KPiA+IG91dHB1dHMN Cj4gPiBhIFBXTSBzaWduYWwgdG8gY29udHJvbCB0aGUgZmFuIHJvdGF0aW9uIGFjY29yZGluZ2x5 Lg0KPiA+IA0KPiA+IFNpZ25lZC1vZmYtYnk6IE51bm8gU8OhIDxudW5vLnNhQGFuYWxvZy5jb20+ DQo+ID4gLS0tDQo+ID4gIE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICAgICAgfCAgIDcgKw0K PiA+ICBkcml2ZXJzL2h3bW9uL0tjb25maWcgICAgICAgICAgIHwgICA5ICsNCj4gPiAgZHJpdmVy cy9od21vbi9NYWtlZmlsZSAgICAgICAgICB8ICAgMSArDQo+ID4gIGRyaXZlcnMvaHdtb24vYXhp LWZhbi1jb250cm9sLmMgfCA0NTINCj4gPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Kw0KPiA+ICA0IGZpbGVzIGNoYW5nZWQsIDQ2OSBpbnNlcnRpb25zKCspDQo+ID4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2h3bW9uL2F4aS1mYW4tY29udHJvbC5jDQo+ID4gDQo+ID4gZGlm ZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMNCj4gPiBpbmRleCBjNzAzNWNlMjQ2 MGIuLmQ3NzVjOTIzZDIzYiAxMDA2NDQNCj4gPiAtLS0gYS9NQUlOVEFJTkVSUw0KPiA+ICsrKyBi L01BSU5UQUlORVJTDQo+ID4gQEAgLTI4NTMsNiArMjg1MywxMyBAQCBTOglNYWludGFpbmVkDQo+ ID4gIEY6CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9heGVudGlhLCoN Cj4gPiAgRjoJc291bmQvc29jL2F0bWVsL3RzZTg1MC1wY201MTQyLmMNCj4gPiAgDQo+ID4gK0FY SS1GQU4tQ09OVFJPTCBIQVJEV0FSRSBNT05JVE9SIERSSVZFUg0KPiA+ICtNOglOdW5vIFPDoSA8 bnVuby5zYUBhbmFsb2cuY29tPg0KPiA+ICtXOglodHRwOi8vZXouYW5hbG9nLmNvbS9jb21tdW5p dHkvbGludXgtZGV2aWNlLWRyaXZlcnMNCj4gPiArTDoJbGludXgtaHdtb25Admdlci5rZXJuZWwu b3JnDQo+ID4gK1M6CVN1cHBvcnRlZA0KPiA+ICtGOglkcml2ZXJzL2h3bW9uL2F4aS1mYW4tY29u dHJvbC5jDQo+ID4gKw0KPiA+ICBBWFhJQSBJMkMgQ09OVFJPTExFUg0KPiA+ICBNOglLcnp5c3p0 b2YgQWRhbXNraSA8a3J6eXN6dG9mLmFkYW1za2lAbm9raWEuY29tPg0KPiA+ICBMOglsaW51eC1p MmNAdmdlci5rZXJuZWwub3JnDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vS2NvbmZp ZyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZw0KPiA+IGluZGV4IDJjYTU2NjhiZGI2Mi4uMjM5NmNj MzQ3YzQ3IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZw0KPiA+ICsrKyBi L2RyaXZlcnMvaHdtb24vS2NvbmZpZw0KPiA+IEBAIC0yNjksNiArMjY5LDE1IEBAIGNvbmZpZyBT RU5TT1JTX0FTQzc2MjENCj4gPiAgCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMg YSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlDQo+ID4gIAkgIHdpbGwgYmUgY2FsbGVkIGFzYzc2 MjEuDQo+ID4gIA0KPiA+ICtjb25maWcgU0VOU09SU19BWElfRkFOX0NPTlRST0wNCj4gPiArCXRy aXN0YXRlICJBbmFsb2cgRGV2aWNlcyBGQU4gQ29udHJvbCBIREwgQ29yZSBkcml2ZXIiDQo+ID4g KwloZWxwDQo+ID4gKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0 aGUgQW5hbG9nIERldmljZXMNCj4gPiArCSAgQVhJIEhETCBGQU4gbW9uaXRvcmluZyBjb3JlLg0K PiA+ICsNCj4gPiArCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUu IElmIHNvLCB0aGUgbW9kdWxlDQo+ID4gKwkgIHdpbGwgYmUgY2FsbGVkIGF4aS1mYW4tY29udHJv bA0KPiA+ICsNCj4gPiAgY29uZmlnIFNFTlNPUlNfSzhURU1QDQo+ID4gIAl0cmlzdGF0ZSAiQU1E IEF0aGxvbjY0L0ZYIG9yIE9wdGVyb24gdGVtcGVyYXR1cmUgc2Vuc29yIg0KPiA+ICAJZGVwZW5k cyBvbiBYODYgJiYgUENJDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUg Yi9kcml2ZXJzL2h3bW9uL01ha2VmaWxlDQo+ID4gaW5kZXggYzg2Y2U0ZDNkMzZiLi5lYmIxZmQy ZWE4MmIgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9od21vbi9NYWtlZmlsZQ0KPiA+ICsrKyBi L2RyaXZlcnMvaHdtb24vTWFrZWZpbGUNCj4gPiBAQCAtNTEsNiArNTEsNyBAQCBvYmotJChDT05G SUdfU0VOU09SU19BUzM3MCkJKz0gYXMzNzAtDQo+ID4gaHdtb24ubw0KPiA+ICBvYmotJChDT05G SUdfU0VOU09SU19BU0M3NjIxKQkrPSBhc2M3NjIxLm8NCj4gPiAgb2JqLSQoQ09ORklHX1NFTlNP UlNfQVNQRUVEKQkrPSBhc3BlZWQtcHdtLXRhY2hvLm8NCj4gPiAgb2JqLSQoQ09ORklHX1NFTlNP UlNfQVRYUDEpCSs9IGF0eHAxLm8NCj4gPiArb2JqLSQoQ09ORklHX1NFTlNPUlNfQVhJX0ZBTl9D T05UUk9MKSArPSBheGktZmFuLWNvbnRyb2wubw0KPiA+ICBvYmotJChDT05GSUdfU0VOU09SU19D T1JFVEVNUCkJKz0gY29yZXRlbXAubw0KPiA+ICBvYmotJChDT05GSUdfU0VOU09SU19EQTkwNTJf QURDKSs9IGRhOTA1Mi1od21vbi5vDQo+ID4gIG9iai0kKENPTkZJR19TRU5TT1JTX0RBOTA1NSkr PSBkYTkwNTUtaHdtb24ubw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2F4aS1mYW4t Y29udHJvbC5jIGIvZHJpdmVycy9od21vbi9heGktDQo+ID4gZmFuLWNvbnRyb2wuYw0KPiA+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi5mODZlZmM0NDQ3NTMN Cj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9od21vbi9heGktZmFuLWNvbnRy b2wuYw0KPiA+IEBAIC0wLDAgKzEsNDUyIEBADQo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wDQo+ID4gKy8qDQo+ID4gKyAqIEZhbiBDb250cm9sIEhETCBDT1JFIGRyaXZl cg0KPiA+ICsgKg0KPiA+ICsgKiBDb3B5cmlnaHQgMjAxOSBBbmFsb2cgRGV2aWNlcyBJbmMuDQo+ ID4gKyAqLw0KPiA+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51 eC9mcGdhL2FkaS1heGktY29tbW9uLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9od21vbi5oPg0K PiA+ICsjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9p by5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51 eC9tb2R1bGUuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L29mLmg+DQo+ID4gKyNpbmNsdWRlIDxs aW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCj4gPiArDQo+ID4gKy8qIHJlZ2lzdGVyIG1hcCAqLw0K PiA+ICsjZGVmaW5lIEFESV9SRUdfUlNUTgkJMHgwMDgwDQo+ID4gKyNkZWZpbmUgQURJX1JFR19Q V01fV0lEVEgJMHgwMDg0DQo+ID4gKyNkZWZpbmUgQURJX1JFR19UQUNIX1BFUklPRAkweDAwODgN Cj4gPiArI2RlZmluZSBBRElfUkVHX1RBQ0hfVE9MRVJBTkNFCTB4MDA4Yw0KPiA+ICsjZGVmaW5l IEFESV9SRUdfUFdNX1BFUklPRAkweDAwYzANCj4gPiArI2RlZmluZSBBRElfUkVHX1RBQ0hfTUVB U1VSCTB4MDBjNA0KPiA+ICsjZGVmaW5lIEFESV9SRUdfVEVNUEVSQVRVUkUJMHgwMGM4DQo+ID4g Kw0KPiA+ICsjZGVmaW5lIEFESV9SRUdfSVJRX01BU0sJMHgwMDQwDQo+ID4gKyNkZWZpbmUgQURJ X1JFR19JUlFfUEVORElORwkweDAwNDQNCj4gPiArI2RlZmluZSBBRElfUkVHX0lSUV9TUkMJCTB4 MDA0OA0KPiA+ICsNCj4gPiArLyogSVJRIHNvdXJjZXMgKi8NCj4gPiArI2RlZmluZSBBRElfSVJR X1NSQ19QV01fQ0hBTkdFRAkJQklUKDApDQo+IA0KPiBpbmNsdWRlIGxpbnV4L2JpdHMuaA0KDQph Y2suDQoNCj4gPiArI2RlZmluZSBBRElfSVJRX1NSQ19UQUNIX0VSUgkJQklUKDEpDQo+ID4gKyNk ZWZpbmUgQURJX0lSUV9TUkNfVEVNUF9JTkNSRUFTRQlCSVQoMikNCj4gPiArI2RlZmluZSBBRElf SVJRX1NSQ19ORVdfTUVBU1VSCQlCSVQoMykNCj4gPiArI2RlZmluZSBBRElfSVJRX1NSQ19NQVNL CQlHRU5NQVNLKDMsIDApDQo+ID4gKyNkZWZpbmUgQURJX0lSUV9NQVNLX09VVF9BTEwJCTB4RkZG RkZGRkZVDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFNZU0ZTX1BXTV9NQVgJCQkyNTUNCj4gPiArDQo+ ID4gK3N0cnVjdCBheGlfZmFuX2NvbnRyb2xfZGF0YSB7DQo+ID4gKwlzdHJ1Y3QgY2xrICpjbGs7 DQo+ID4gKwl2b2lkIF9faW9tZW0gKmJhc2U7DQo+ID4gKwkvKiB0YWNobyBwZXJpb2QgKi8NCj4g PiArCWF0b21pY190IHRhY2g7DQo+IA0KPiBXaHkgZXhhY3RseSBpcyB0aGlzIGFuIGF0b21pYyA/ IFRoZSB2YWx1ZSBpcyBvbmx5IHNldCwgYW5kIGl0IGlzIHNldA0KPiBpbg0KPiBhIHNpbmdsZSBv cGVyYXRpb24uIFdoeSBkb2VzIGl0IG1hdHRlciBpZiByZXFhZGluZyBpdCBjYXRjaGVzIHRoZSBv bGQNCj4gb3INCj4gdGhlIG5ldyB2YWx1ZSA/DQoNCkhtbSwgSSB0aGluayB0aGF0IEkgZG9uJ3Qg ZXZlbiBuZWVkIHRoaXMgdmFyaWFibGUuIEkgY2FuIGp1c3QgaW9yZWFkDQp0aGUgdmFsdWUgd2hl biBnZXR0aW5nIHRoZSBmYW4gcnBtIGFuZCBnZXQgd2hhdGV2ZXIgaXQgaXMgb24gdGhlDQpyZWdp c3RlciBhdCB0aGF0IG1vbWVudC4NCiAgDQo+ID4gKwlpbnQgaXJxOw0KPiA+ICsJLyogcHVsc2Vz IHBlciByZXZvbHV0aW9uICovDQo+ID4gKwl1MzIgcHByOw0KPiA+ICsJYm9vbCBod19wd21fcmVx Ow0KPiA+ICsJYm9vbCB1cGRhdGVfdGFjaG9fcGFyYW1zOw0KPiA+ICsJdTggZmFuX2ZhdWx0Ow0K PiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSB2b2lkIGF4aV9mYW5fY29udHJvbF9p b3dyaXRlKGNvbnN0IHUzMiB2YWwsIGNvbnN0DQo+ID4gdTMyIHJlZywNCj4gPiArCQkJCWNvbnN0 IHN0cnVjdCBheGlfZmFuX2NvbnRyb2xfZGF0YSAqY3RsKQ0KPiANCj4gTXVsdGktbGluZSBhbGln bm1lbnQuIEFsc28sIHBsZWFzZSBjb25zaWRlciBzaG9ydGVyIGZ1bmN0aW9uIG5hbWVzLg0KPiBB biAiYXhpX2Zhbl9jb250cm9sXyIgcHJlZml4IGZvciBzdGF0aWMgZnVuY3Rpb25zIGlzIHJlYWxs eSBhIGJpdA0KPiBleGNlc3NpdmUNCj4gYW5kIGRvZXNuJ3QgYWRkIHZhbHVlLiAiYXhpXyIgd291 bGQgZG8gaXQganVzdCBhcyB3ZWxsLg0KDQpXaWxsIGRvIHRoYXQuDQoNCj4gPiArew0KPiA+ICsJ aW93cml0ZTMyKHZhbCwgY3RsLT5iYXNlICsgcmVnKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Rh dGljIGlubGluZSB1MzIgYXhpX2Zhbl9jb250cm9sX2lvcmVhZChjb25zdCB1MzIgcmVnLA0KPiA+ ICsJCQkJCSBjb25zdCBzdHJ1Y3QNCj4gPiBheGlfZmFuX2NvbnRyb2xfZGF0YSAqY3RsKQ0KPiA+ ICt7DQo+ID4gKwlyZXR1cm4gaW9yZWFkMzIoY3RsLT5iYXNlICsgcmVnKTsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIGxvbmcgYXhpX2Zhbl9jb250cm9sX2dldF9wd21fZHV0eShjb25zdCBz dHJ1Y3QNCj4gPiBheGlfZmFuX2NvbnRyb2xfZGF0YSAqY3RsKQ0KPiA+ICt7DQo+ID4gKwl1MzIg cHdtX3dpZHRoID0gYXhpX2Zhbl9jb250cm9sX2lvcmVhZChBRElfUkVHX1BXTV9XSURUSCwgY3Rs KTsNCj4gPiArCXUzMiBwd21fcGVyaW9kID0gYXhpX2Zhbl9jb250cm9sX2lvcmVhZChBRElfUkVH X1BXTV9QRVJJT0QsDQo+ID4gY3RsKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gRElWX1JPVU5EX0NM T1NFU1QocHdtX3dpZHRoICogU1lTRlNfUFdNX01BWCwNCj4gPiBwd21fcGVyaW9kKTsNCj4gDQo+ IElzIHB3bV9wZXJpb2QgZ3VhcmFudGVlZCB0byBiZSAhPSAwID8NCg0KWWVzLCBJdCBpcyBhIFJP IHJlZ2lzdGVyIGFuZCBpdCBpcyBzZXQgYnkgdGhlIGNvcmUgd2l0aCB0aGUgZGVmYXVsdCBvZg0K MHg0ZTIwLg0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGF4aV9mYW5fY29udHJvbF9z ZXRfcHdtX2R1dHkoY29uc3QgbG9uZyB2YWwsDQo+ID4gKwkJCQkJc3RydWN0IGF4aV9mYW5fY29u dHJvbF9kYXRhDQo+ID4gKmN0bCkNCj4gPiArew0KPiA+ICsJdTMyIHB3bV9wZXJpb2QgPSBheGlf ZmFuX2NvbnRyb2xfaW9yZWFkKEFESV9SRUdfUFdNX1BFUklPRCwNCj4gPiBjdGwpOw0KPiA+ICsJ dTMyIG5ld193aWR0aDsNCj4gPiArCWxvbmcgX192YWwgPSBjbGFtcF92YWwodmFsLCAwLCBTWVNG U19QV01fTUFYKTsNCj4gPiArDQo+ID4gKwluZXdfd2lkdGggPSBESVZfUk9VTkRfQ0xPU0VTVChf X3ZhbCAqIHB3bV9wZXJpb2QsDQo+ID4gU1lTRlNfUFdNX01BWCk7DQo+ID4gKw0KPiA+ICsJYXhp X2Zhbl9jb250cm9sX2lvd3JpdGUobmV3X3dpZHRoLCBBRElfUkVHX1BXTV9XSURUSCwgY3RsKTsN Cj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGxvbmcg YXhpX2Zhbl9jb250cm9sX2dldF9mYW5fcnBtKGNvbnN0IHN0cnVjdA0KPiA+IGF4aV9mYW5fY29u dHJvbF9kYXRhICpjdGwpDQo+ID4gK3sNCj4gPiArCXVuc2lnbmVkIGxvbmcgY2xrX3JhdGUgPSBj bGtfZ2V0X3JhdGUoY3RsLT5jbGspOw0KPiA+ICsNCj4gPiArCWlmICghY2xrX3JhdGUpDQo+ID4g KwkJcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiBVbmxlc3MgdGhlIGNsb2NrIHJhdGUgY2hhbmdlcyBk eW5hbWljYWxseSwgaXQgbWlnaHQgbWFrZSBzZW5zZSB0bw0KPiByZWFkIGl0IG9uY2UNCj4gaW4g dGhlIHByb2JlIGZ1bmN0aW9uLg0KDQpIbW0sIEl0IGNhbid0IHNvIEkgd2lsbCBkbyBhcyB5b3Ug c3VnZ2VzdC4NCg0KPiA+ICsJLyoNCj4gPiArCSAqIFRoZSB0YWNobyBwZXJpb2Qgc2hvdWxkIGJl Og0KPiA+ICsJICogICAgICBUQUNIID0gNjAvKHBwciAqIHJwbSksIHdoZXJlIHJwbSBpcyByZXZv bHV0aW9ucyBwZXINCj4gPiBzZWNvbmQNCj4gPiArCSAqICAgICAgYW5kIHBwciBpcyBwdWxzZXMg cGVyIHJldm9sdXRpb24uDQo+ID4gKwkgKiBHaXZlbiB0aGUgdGFjaG8gcGVyaW9kLCB3ZSBjYW4g bXVsdGlwbHkgaXQgYnkgdGhlIGlucHV0DQo+ID4gY2xvY2sNCj4gPiArCSAqIHNvIHRoYXQgd2Ug a25vdyBob3cgbWFueSBjbG9ja3Mgd2UgbmVlZCB0byBoYXZlIHRoaXMgcGVyaW9kLg0KPiA+ICsJ ICogRnJvbSB0aGlzLCB3ZSBjYW4gZGVyaXZlIHRoZSBSUE0gdmFsdWUuDQo+ID4gKwkgKi8NCj4g PiArCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVCg2MCAqIGNsa19yYXRlLA0KPiA+ICsJCQkJIGN0 bC0+cHByICogYXRvbWljX3JlYWQoJmN0bC0+dGFjaCkpOw0KPiANCj4gQXJlIHBwciBhbmQgdGFj aCBndWFyYW50ZWVkIHRvIGJlICE9IDAgPyBJIGRvbid0IHRoaW5rIHNvLA0KPiBzaW5jZSBuZWl0 aGVyIGlzIGV2ZXIgZXZhbHVhdGVkLg0KDQpOb3BlLiBJIHNob3VsZCBtYWtlIHN1cmUgcHByIGlz IG5ldmVyIDAgYW5kIEkgc2hvdWQgZXZhbHVhdGUgdGFjaA0KYmVmb3JlICBkb2luZyB0aGUgb3Bl cmF0aW9uIGFuZCByZXR1cm4gMCANCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBheGlf ZmFuX2NvbnRyb2xfcmVhZF90ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIGF0dHIsDQo+ID4g bG9uZyAqdmFsKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgYXhpX2Zhbl9jb250cm9sX2RhdGEgKmN0 bCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiA+ICsJbG9uZyByYXdfdGVtcDsNCj4gPiArDQo+ ID4gKwlzd2l0Y2ggKGF0dHIpIHsNCj4gPiArCWNhc2UgaHdtb25fdGVtcF9pbnB1dDoNCj4gPiAr CQlyYXdfdGVtcCA9IGF4aV9mYW5fY29udHJvbF9pb3JlYWQoQURJX1JFR19URU1QRVJBVFVSRSwN Cj4gPiBjdGwpOw0KPiA+ICsJCS8qDQo+ID4gKwkJICogVGhlIGZvcm11bGEgZm9yIHRoZSB0ZW1w ZXJhdHVyZSBpczoNCj4gPiArCQkgKiAgICAgIFQgPSAoQURDICogNTAxLjM3NDMgLyAyXmJpdHMp IC0gMjczLjY3NzcNCj4gPiArCQkgKiBJdCdzIG11bHRpcGxpZWQgYnkgMTAwMCB0byBoYXZlIG1p bGlkZWdyZWVzIGFzDQo+IA0KPiBzL21pbGlkZWdyZWVzL21pbGxpZGVncmVlcy8NCg0KYWNrLg0K DQo+ID4gKwkJICogc3BlY2lmaWVkIGJ5IHRoZSBod21vbiBzeXNmcyBpbnRlcmZhY2UuDQo+ID4g KwkJICovDQo+ID4gKwkJKnZhbCA9ICgocmF3X3RlbXAgKiA1MDEzNzQpID4+IDE2KSAtIDI3MzY3 NzsNCj4gPiArCQlyZXR1cm4gMDsNCj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJcmV0dXJuIC1FTk9U U1VQUDsNCj4gPiArCX0NCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBheGlfZmFuX2Nv bnRyb2xfcmVhZF9mYW4oc3RydWN0IGRldmljZSAqZGV2LCB1MzIgYXR0ciwNCj4gPiBsb25nICp2 YWwpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBheGlfZmFuX2NvbnRyb2xfZGF0YSAqY3RsID0gZGV2 X2dldF9kcnZkYXRhKGRldik7DQo+ID4gKw0KPiA+ICsJc3dpdGNoIChhdHRyKSB7DQo+ID4gKwlj YXNlIGh3bW9uX2Zhbl9mYXVsdDoNCj4gPiArCQkqdmFsID0gY3RsLT5mYW5fZmF1bHQ7DQo+ID4g KwkJcmV0dXJuIDA7DQo+ID4gKwljYXNlIGh3bW9uX2Zhbl9pbnB1dDoNCj4gPiArCQkqdmFsID0g YXhpX2Zhbl9jb250cm9sX2dldF9mYW5fcnBtKGN0bCk7DQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4g KwlkZWZhdWx0Og0KPiA+ICsJCXJldHVybiAtRU5PVFNVUFA7DQo+ID4gKwl9DQo+ID4gK30NCj4g PiArDQo+ID4gK3N0YXRpYyBpbnQgYXhpX2Zhbl9jb250cm9sX3JlYWRfcHdtKHN0cnVjdCBkZXZp Y2UgKmRldiwgdTMyIGF0dHIsDQo+ID4gbG9uZyAqdmFsKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3Qg YXhpX2Zhbl9jb250cm9sX2RhdGEgKmN0bCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiA+ICsN Cj4gPiArCXN3aXRjaCAoYXR0cikgew0KPiA+ICsJY2FzZSBod21vbl9wd21faW5wdXQ6DQo+ID4g KwkJKnZhbCA9IGF4aV9mYW5fY29udHJvbF9nZXRfcHdtX2R1dHkoY3RsKTsNCj4gPiArCQlyZXR1 cm4gMDsNCj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJcmV0dXJuIC1FTk9UU1VQUDsNCj4gPiArCX0N Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBheGlfZmFuX2NvbnRyb2xfd3JpdGVfcHdt KHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIGF0dHIsDQo+ID4gbG9uZyB2YWwpDQo+ID4gK3sNCj4g PiArCXN0cnVjdCBheGlfZmFuX2NvbnRyb2xfZGF0YSAqY3RsID0gZGV2X2dldF9kcnZkYXRhKGRl dik7DQo+ID4gKw0KPiA+ICsJc3dpdGNoIChhdHRyKSB7DQo+ID4gKwljYXNlIGh3bW9uX3B3bV9p bnB1dDoNCj4gPiArCQlyZXR1cm4gYXhpX2Zhbl9jb250cm9sX3NldF9wd21fZHV0eSh2YWwsIGN0 bCk7DQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJCXJldHVybiAtRU5PVFNVUFA7DQo+ID4gKwl9DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgYXhpX2Zhbl9jb250cm9sX3JlYWRfbGFiZWxz KHN0cnVjdCBkZXZpY2UgKmRldiwNCj4gPiArCQkJCSAgICAgICBlbnVtIGh3bW9uX3NlbnNvcl90 eXBlcyB0eXBlLA0KPiA+ICsJCQkJICAgICAgIHUzMiBhdHRyLCBpbnQgY2hhbm5lbCwgY29uc3QN Cj4gPiBjaGFyICoqc3RyKQ0KPiA+ICt7DQo+ID4gKwlzd2l0Y2ggKHR5cGUpIHsNCj4gPiArCWNh c2UgaHdtb25fZmFuOg0KPiA+ICsJCSpzdHIgPSAiRkFOIjsNCj4gPiArCQlyZXR1cm4gMDsNCj4g PiArCWNhc2UgaHdtb25fdGVtcDoNCj4gPiArCQkqc3RyID0gIlNZU01PTjQiOw0KPiA+ICsJCXJl dHVybiAwOw0KPiA+ICsJZGVmYXVsdDoNCj4gPiArCQlyZXR1cm4gLUVOT1RTVVBQOw0KPiA+ICsJ fQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGF4aV9mYW5fY29udHJvbF9yZWFkKHN0 cnVjdCBkZXZpY2UgKmRldiwNCj4gPiArCQkJCWVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUs DQo+ID4gKwkJCQl1MzIgYXR0ciwgaW50IGNoYW5uZWwsIGxvbmcgKnZhbCkNCj4gPiArew0KPiA+ ICsJc3dpdGNoICh0eXBlKSB7DQo+ID4gKwljYXNlIGh3bW9uX2ZhbjoNCj4gPiArCQlyZXR1cm4g YXhpX2Zhbl9jb250cm9sX3JlYWRfZmFuKGRldiwgYXR0ciwgdmFsKTsNCj4gPiArCWNhc2UgaHdt b25fcHdtOg0KPiA+ICsJCXJldHVybiBheGlfZmFuX2NvbnRyb2xfcmVhZF9wd20oZGV2LCBhdHRy LCB2YWwpOw0KPiA+ICsJY2FzZSBod21vbl90ZW1wOg0KPiA+ICsJCXJldHVybiBheGlfZmFuX2Nv bnRyb2xfcmVhZF90ZW1wKGRldiwgYXR0ciwgdmFsKTsNCj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJ cmV0dXJuIC1FTk9UU1VQUDsNCj4gPiArCX0NCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlu dCBheGlfZmFuX2NvbnRyb2xfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LA0KPiA+ICsJCQkJIGVu dW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsDQo+ID4gKwkJCQkgdTMyIGF0dHIsIGludCBjaGFu bmVsLCBsb25nIHZhbCkNCj4gPiArew0KPiA+ICsJc3dpdGNoICh0eXBlKSB7DQo+ID4gKwljYXNl IGh3bW9uX3B3bToNCj4gPiArCQlyZXR1cm4gYXhpX2Zhbl9jb250cm9sX3dyaXRlX3B3bShkZXYs IGF0dHIsIHZhbCk7DQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJCXJldHVybiAtRU5PVFNVUFA7DQo+ ID4gKwl9DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB1bW9kZV90IGF4aV9mYW5fY29udHJv bF9mYW5faXNfdmlzaWJsZShjb25zdCB1MzIgYXR0cikNCj4gPiArew0KPiA+ICsJc3dpdGNoIChh dHRyKSB7DQo+ID4gKwljYXNlIGh3bW9uX2Zhbl9pbnB1dDoNCj4gPiArCWNhc2UgaHdtb25fZmFu X2ZhdWx0Og0KPiA+ICsJY2FzZSBod21vbl9mYW5fbGFiZWw6DQo+ID4gKwkJcmV0dXJuIDA0NDQ7 DQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJCXJldHVybiAwOw0KPiA+ICsJfQ0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgdW1vZGVfdCBheGlfZmFuX2NvbnRyb2xfcHdtX2lzX3Zpc2libGUoY29u c3QgdTMyIGF0dHIpDQo+ID4gK3sNCj4gPiArCXN3aXRjaCAoYXR0cikgew0KPiA+ICsJY2FzZSBo d21vbl9wd21faW5wdXQ6DQo+ID4gKwkJcmV0dXJuIDA2NDQ7DQo+ID4gKwlkZWZhdWx0Og0KPiA+ ICsJCXJldHVybiAwOw0KPiA+ICsJfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdW1vZGVf dCBheGlfZmFuX2NvbnRyb2xfdGVtcF9pc192aXNpYmxlKGNvbnN0IHUzMiBhdHRyKQ0KPiA+ICt7 DQo+ID4gKwlzd2l0Y2ggKGF0dHIpIHsNCj4gPiArCWNhc2UgaHdtb25fdGVtcF9pbnB1dDoNCj4g PiArCWNhc2UgaHdtb25fdGVtcF9sYWJlbDoNCj4gPiArCQlyZXR1cm4gMDQ0NDsNCj4gPiArCWRl ZmF1bHQ6DQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4gKwl9DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyB1bW9kZV90IGF4aV9mYW5fY29udHJvbF9pc192aXNpYmxlKGNvbnN0IHZvaWQgKmRhdGEs DQo+ID4gKwkJCQkJICBlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlLA0KPiA+ICsJCQkJCSAg dTMyIGF0dHIsIGludCBjaGFubmVsKQ0KPiA+ICt7DQo+ID4gKwlzd2l0Y2ggKHR5cGUpIHsNCj4g PiArCWNhc2UgaHdtb25fZmFuOg0KPiA+ICsJCXJldHVybiBheGlfZmFuX2NvbnRyb2xfZmFuX2lz X3Zpc2libGUoYXR0cik7DQo+ID4gKwljYXNlIGh3bW9uX3B3bToNCj4gPiArCQlyZXR1cm4gYXhp X2Zhbl9jb250cm9sX3B3bV9pc192aXNpYmxlKGF0dHIpOw0KPiA+ICsJY2FzZSBod21vbl90ZW1w Og0KPiA+ICsJCXJldHVybiBheGlfZmFuX2NvbnRyb2xfdGVtcF9pc192aXNpYmxlKGF0dHIpOw0K PiA+ICsJZGVmYXVsdDoNCj4gPiArCQlyZXR1cm4gMDsNCj4gPiArCX0NCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIGlycXJldHVybl90IGF4aV9mYW5fY29udHJvbF9pcnFfaGFuZGxlcihpbnQg aXJxLCB2b2lkDQo+ID4gKmRhdGEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBheGlfZmFuX2NvbnRy b2xfZGF0YSAqY3RsID0gKHN0cnVjdCBheGlfZmFuX2NvbnRyb2xfZGF0YQ0KPiA+ICopZGF0YTsN Cj4gPiArCXUzMiBpcnFfcGVuZGluZyA9IGF4aV9mYW5fY29udHJvbF9pb3JlYWQoQURJX1JFR19J UlFfUEVORElORywNCj4gPiBjdGwpOw0KPiA+ICsJdTMyIGNsZWFyX21hc2s7DQo+ID4gKw0KPiA+ ICsJaWYgKGlycV9wZW5kaW5nICYgQURJX0lSUV9TUkNfTkVXX01FQVNVUikgew0KPiA+ICsJCXUz MiBuZXdfdGFjaCA9DQo+ID4gYXhpX2Zhbl9jb250cm9sX2lvcmVhZChBRElfUkVHX1RBQ0hfTUVB U1VSLA0KPiA+ICsJCQkJCQkgICAgICBjdGwpOw0KPiA+ICsNCj4gPiArCQlpZiAoY3RsLT51cGRh dGVfdGFjaG9fcGFyYW1zKSB7DQo+ID4gKwkJCS8qIGdldCAyNSUgdG9sZXJhbmNlICovDQo+ID4g KwkJCXUzMiB0YWNoX3RvbCA9IERJVl9ST1VORF9DTE9TRVNUKG5ld190YWNoICogMjUsDQo+ID4g MTAwKTsNCj4gPiArCQkJLyogc2V0IG5ldyB0YWNobyBwYXJhbWV0ZXJzICovDQo+ID4gKwkJCWF4 aV9mYW5fY29udHJvbF9pb3dyaXRlKG5ld190YWNoLA0KPiA+IEFESV9SRUdfVEFDSF9QRVJJT0Qs DQo+ID4gKwkJCQkJCWN0bCk7DQo+ID4gKwkJCWF4aV9mYW5fY29udHJvbF9pb3dyaXRlKHRhY2hf dG9sLA0KPiA+ICsJCQkJCQlBRElfUkVHX1RBQ0hfVE9MRVJBTkNFLA0KPiA+IGN0bCk7DQo+ID4g KwkJCWN0bC0+dXBkYXRlX3RhY2hvX3BhcmFtcyA9IGZhbHNlOw0KPiA+ICsJCX0NCj4gPiArDQo+ ID4gKwkJYXRvbWljX3NldCgmY3RsLT50YWNoLCBuZXdfdGFjaCk7DQo+ID4gKwl9DQo+ID4gKw0K PiA+ICsJaWYgKGlycV9wZW5kaW5nICYgQURJX0lSUV9TUkNfUFdNX0NIQU5HRUQpIHsNCj4gPiAr CQkvKg0KPiA+ICsJCSAqIGlmIHRoZSBwd20gY2hhbmdlcyBvbiBiZWhhbGYgb2Ygc29mdHdhcmUs DQo+ID4gKwkJICogd2UgbmVlZCB0byBwcm92aWRlIG5ldyB0YWNobyBwYXJhbWV0ZXJzIHRvIHRo ZSBjb3JlLg0KPiA+ICsJCSAqIFdhaXQgZm9yIHRoZSBuZXh0IG1lYXN1cmVtZW50IGZvciB0aGF0 Li4uDQo+ID4gKwkJICovDQo+ID4gKwkJaWYgKCFjdGwtPmh3X3B3bV9yZXEpDQo+ID4gKwkJCWN0 bC0+dXBkYXRlX3RhY2hvX3BhcmFtcyA9IHRydWU7DQo+ID4gKw0KPiA+ICsJCS8qIGp1c3Qgc2V0 IHRoaXMgdG8gZmFsc2UgZXZlbiBpZiBpdCBpcyBhbHJlYWR5Li4uICovDQo+ID4gKwkJY3RsLT5o d19wd21fcmVxID0gZmFsc2U7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKGlycV9wZW5kaW5n ICYgQURJX0lSUV9TUkNfVEVNUF9JTkNSRUFTRSkNCj4gPiArCQkvKiBoYXJkd2FyZSByZXF1ZXN0 ZWQgYSBuZXcgcHdtICovDQo+ID4gKwkJY3RsLT5od19wd21fcmVxID0gdHJ1ZTsNCj4gPiArDQo+ IEkgZG9uJ3QgcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGhlcmUuIElmDQo+IEFESV9JUlFf U1JDX1RFTVBfSU5DUkVBU0UgbWVhbnMNCj4gdGhhdCBoYXJkd2FyZSB3YW50cyBhIG5ldyBwd20s IGhvdyBpcyB1c2Vyc3BhY2UgaW5mb3JtZWQgYWJvdXQgdGhhdA0KPiByZXF1ZXN0ID8NCg0KSXQg aXNuJ3QuIFVzZXJzcGFjZSB3b3VsZCBoYXZlIHRvIHJlYWQgdGhlIHB3bSBhdHRyaWJ1dGUgYW5k IGZpZ3VyZQ0KdGhhdCBjaGFuZ2VkLiBTaG91bGQgSSB1c2Ugc29tZXRoaW5nIGxpa2Ugc3lzZnNf bm90aWZ5KCkgb24gdGhlIHB3bQ0KYXR0cmlidXRlPw0KDQo+IEFuZCB3aHkgYXJlIHRoZSB0YWNo byBwYXJhbWF0ZXJzIF9ub3RfIHVwZGF0ZWQgaW4gdGhpcyBjYXNlIGxhdGVyIG9uDQo+ICh1bmxl c3MNCj4gQURJX0lSUV9TUkNfUFdNX0NIQU5HRUQgYW5kIEFESV9JUlFfU1JDX1RFTVBfSU5DUkVB U0UgYXJlIGJvdGggc2V0KSA/DQo+IEl0IG1pZ2h0IGJlIHVzZWZ1bCB0byBkZXNjcmliZSB0aGUg ZXhwZWN0ZWQgc2VxdWVuY2Ugb2YgZXZlbnRzLg0KDQpUaGUgY29yZSBjYW4gY2hhbmdlIHRoZSBQ V00gYnkgaXRzZWxmICh3aGljaCBpcyB3aGVuIHdlIHJlY2VpdmUNCkFESV9JUlFfU1JDX1RFTVBf SU5DUkVBU0UpIGFuZCBpbiB0aGF0IGNhc2UgaXQgd2lsbCB1c2UgcHJlZGVmaW5lZA0KdmFsdWVz IHRvIGV2YWx1YXRlIHRoZSB0YWNobyBzaWduYWwgKHNvIGl0IHdvbid0IHVzZSB0aGUgdmFsdWVz IG9uDQpUQUNIX1BFUklPRCBhbmQgVEFDSF9UT0xFUkFOQ0UpLiBBbHRlcm5hdGl2ZWx5LCB0aGUg dXNlciBjYW4gcmVxdWVzdCBhDQpuZXcgUFdNIGJ5IHdyaXRpbmcgdGhlIHB3bSBhdHRyaWJ1dGUu IEluIHRoaXMgY2FzZSB0aGUgQ09SRSBpcw0KZXhwZWN0aW5nIHRoYXQgVEFDSF9QRVJJT0QgYW5k IFRBQ0hfVE9MRVJBTkNFIGFyZSBnaXZlbiBvdGhlcndpc2UgaXQNCndvbid0IGV2YWx1YXRlIHRo ZSB0YWNobyBzaWduYWwuIE5vdGUgdGhhdCB3aGVuIGlzIHRoZSB1c2VyIHdoaWNoDQpyZXF1ZXN0 cyBhIG5ldyBwd20gd2Ugb25seSBnZXQgQURJX0lSUV9TUkNfUFdNX0NIQU5HRUQgKGFuZCBub3Qg KwkNCmlmIChpcnFfcGVuZGluZyAmIEFESV9JUlFfU1JDX1RFTVBfSU5DUkVBU0UpLCBzbyBJIHVz ZSB0aGF0IHRvIGtub3cNCndoZW4gZG8gSSBoYXZlIHRvIHVwZGF0ZSB0aGUgdGFjaG8gcGFyYW1l dGVycy4NCiANCj4gPiANCikNCg0KPiA+ICsJaWYgKGlycV9wZW5kaW5nICYgQURJX0lSUV9TUkNf VEFDSF9FUlIpDQo+ID4gKwkJY3RsLT5mYW5fZmF1bHQgPSAxOw0KPiANCj4gSXMgaXQgb24gcHVy cG9zZSB0aGF0IHRoaXMgYml0IGlzIG5ldmVyIHJlc2V0ID8NCg0KWWVzLCBhbmQgaXQgaXMgd3Jv bmcuIEkgdGhvdWdoIHRoYXQgdGhlIGNvcmUgd291bGQgbmV2ZXIgY2xlYXIgdGhpcw0KYWxhcm0g YnV0IGl0IGRvZXMgY2xlYXIgaXQgaW4gdGhlIG5leHQgdGVtcGVyYXR1cmUgcmVhZGluZyBjeWNs ZSAoYW5kDQpzZXQgaXQgYWdhaW4gaWYgbmVlZGVkKS4gVGhlbiwgd291bGQgYSBjbGVhciBvbiBy ZWFkIGJlIGEgY29ycmVjdA0KYXBwcm9hY2g/DQo+IA0KPiA+ICsNCj4gPiArCS8qIGNsZWFyIGFs bCBpbnRlcnJ1cHRzICovDQo+ID4gKwljbGVhcl9tYXNrID0gaXJxX3BlbmRpbmcgJiBBRElfSVJR X1NSQ19NQVNLOw0KPiA+ICsJYXhpX2Zhbl9jb250cm9sX2lvd3JpdGUoY2xlYXJfbWFzaywgQURJ X1JFR19JUlFfUEVORElORywgY3RsKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gSVJRX0hBTkRMRUQ7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgYXhpX2Zhbl9jb250cm9sX2luaXQoc3Ry dWN0IGF4aV9mYW5fY29udHJvbF9kYXRhICpjdGwsDQo+ID4gKwkJCQljb25zdCBzdHJ1Y3QgZGV2 aWNlX25vZGUgKm5wKQ0KPiA+ICt7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCS8qIGdl dCBmYW4gcHVsc2VzIHBlciByZXZvbHV0aW9uICovDQo+ID4gKwlyZXQgPSBvZl9wcm9wZXJ0eV9y ZWFkX3UzMihucCwgImFkaSxwdWxzZXMtcGVyLXJldm9sdXRpb24iLA0KPiA+ICZjdGwtPnBwcik7 DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+IA0KPiBTbyBhbGwgcmFuZG9t IHZhbHVlcyBhcmUgYWNjZXB0YWJsZSwgaW5jbHVkaW5nIDAgYW5kIDB4ZmZmZmZmZmYgPw0KDQpZ ZXMsIEknbSBhd2FyZSB0aGF0IDEgYW5kIDIgYXJlIHR5cGljYWwgdmFsdWVzIGJ1dCBJJ20gbm90 IHN1cmUgd2hhdCBpcw0KdGhlIG1heGltdW0gdGhhdCB0eXBpY2FsbHkgZXhpc3RzIHNvIEkgZGlk bid0IHdhbnQgdG8gcHV0IGxpbWl0cyBoZXJlDQp3aXRob3V0IGtub3dpbmcuIFRob3VnaCBhdCBs ZWFzdCAwIG11c3Qgbm90IGJlIGFjY2VwdGVkIHNpbmNlIHRoZW4gd2UNCmFyZSBhbHdheXMgZGl2 aWRpbmcgYnkgMCB3aGVuIHJlYWRpbmcgdGhlIEZBTiBycG0uDQoNCj4gPiArCS8qDQo+ID4gKwkg KiBFbmFibGUgYWxsIElSUXMNCj4gPiArCSAqLw0KPiA+ICsJYXhpX2Zhbl9jb250cm9sX2lvd3Jp dGUoKEFESV9JUlFfTUFTS19PVVRfQUxMICYNCj4gPiArCQkJfihBRElfSVJRX1NSQ19ORVdfTUVB U1VSIHwgQURJX0lSUV9TUkNfVEFDSF9FUlINCj4gPiB8DQo+ID4gKwkJCUFESV9JUlFfU1JDX1BX TV9DSEFOR0VEIHwNCj4gPiBBRElfSVJRX1NSQ19URU1QX0lOQ1JFQVNFKSksDQo+IA0KPiBPbmUg c2V0IG9mICggKSBpcyB1bm5lY2Vzc2FyeS4NCg0KYWNrLg0KDQo+ID4gKwkJCUFESV9SRUdfSVJR X01BU0ssIGN0bCk7DQo+ID4gKw0KPiA+ICsJLyogYnJpbmcgdGhlIGRldmljZSBvdXQgb2YgcmVz ZXQgKi8NCj4gPiArCWF4aV9mYW5fY29udHJvbF9pb3dyaXRlKDB4MDEsIEFESV9SRUdfUlNUTiwg Y3RsKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IGh3bW9uX2NoYW5uZWxfaW5mbyAqYXhpX2Zhbl9jb250cm9sX2luZm9b XSA9IHsNCj4gPiArCUhXTU9OX0NIQU5ORUxfSU5GTyhwd20sIEhXTU9OX1BXTV9JTlBVVCksDQo+ ID4gKwlIV01PTl9DSEFOTkVMX0lORk8oZmFuLCBIV01PTl9GX0lOUFVUIHwgSFdNT05fRl9GQVVM VCB8DQo+ID4gSFdNT05fRl9MQUJFTCksDQo+ID4gKwlIV01PTl9DSEFOTkVMX0lORk8odGVtcCwg SFdNT05fVF9JTlBVVCB8IEhXTU9OX1RfTEFCRUwpLA0KPiA+ICsJTlVMTA0KPiA+ICt9Ow0KPiA+ ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9vcHMgYXhpX2Zhbl9jb250cm9sX2h3 bW9uX29wcyA9IHsNCj4gPiArCS5pc192aXNpYmxlID0gYXhpX2Zhbl9jb250cm9sX2lzX3Zpc2li bGUsDQo+ID4gKwkucmVhZCA9IGF4aV9mYW5fY29udHJvbF9yZWFkLA0KPiA+ICsJLndyaXRlID0g YXhpX2Zhbl9jb250cm9sX3dyaXRlLA0KPiA+ICsJLnJlYWRfc3RyaW5nID0gYXhpX2Zhbl9jb250 cm9sX3JlYWRfbGFiZWxzLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVj dCBod21vbl9jaGlwX2luZm8gYXhpX2Zhbl9jb250cm9sX2NoaXBfaW5mbyA9IHsNCj4gPiArCS5v cHMgPSAmYXhpX2Zhbl9jb250cm9sX2h3bW9uX29wcywNCj4gPiArCS5pbmZvID0gYXhpX2Zhbl9j b250cm9sX2luZm8sDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3QgdTMyIHZlcnNp b25fMV8wXzAgPSBBRElfQVhJX1BDT1JFX1ZFUigxLCAwLCAnYScpOw0KPiA+ICsNCj4gPiArc3Rh dGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXhpX2Zhbl9jb250cm9sX29mX21hdGNoW10g PSB7DQo+ID4gKwl7IC5jb21wYXRpYmxlID0gImFkaSxheGktZmFuLWNvbnRyb2wtMS4wMC5hIiwN Cj4gPiArCQkuZGF0YSA9ICh2b2lkICopJnZlcnNpb25fMV8wXzB9LA0KPiA+ICsJe30sDQo+ID4g K307DQo+ID4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGF4aV9mYW5fY29udHJvbF9vZl9tYXRj aCk7DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGF4aV9mYW5fY29udHJvbF9wcm9iZShzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlICpod21v bl9kZXY7DQo+ID4gKwlzdHJ1Y3QgYXhpX2Zhbl9jb250cm9sX2RhdGEgKmN0bDsNCj4gPiArCWNv bnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKmlkOw0KPiA+ICsJc3RydWN0IHJlc291cmNlICpyZXM7 DQo+ID4gKwl1MzIgdmVyc2lvbjsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJaWQgPSBv Zl9tYXRjaF9ub2RlKGF4aV9mYW5fY29udHJvbF9vZl9tYXRjaCwgcGRldi0NCj4gPiA+ZGV2Lm9m X25vZGUpOw0KPiA+ICsJaWYgKCFpZCkNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ ID4gKwljdGwgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpjdGwpLCBHRlBfS0VS TkVMKTsNCj4gPiArCWlmICghY3RsKQ0KPiA+ICsJCXJldHVybiAtRU5PTUVNOw0KPiA+ICsNCj4g PiArCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7 DQo+ID4gKwljdGwtPmJhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVz KTsNCj4gDQo+IGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZSgpDQoNCmFjay4NCg0KPiA+ ICsJaWYgKElTX0VSUihjdGwtPmJhc2UpKSB7DQo+ID4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAi aW9yZW1hcCBmYWlsZWQgd2l0aCAlbGRcbiIsDQo+ID4gKwkJCVBUUl9FUlIoY3RsLT5iYXNlKSk7 DQo+ID4gKwkJcmV0dXJuIFBUUl9FUlIoY3RsLT5iYXNlKTsNCj4gPiArCX0NCj4gDQo+IFRoaXMg ZG9lcyBub3QgcmVxdWlyZSBhbiBleHRyYSBlcnJvciBtZXNzYWdlLg0KDQphY2suDQoNCj4gPiAr DQo+ID4gKwljdGwtPmNsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsNCj4gPiAr CWlmIChJU19FUlIoY3RsLT5jbGspKSB7DQo+ID4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2xr X2dldCBmYWlsZWQgd2l0aCAlbGRcbiIsDQo+ID4gKwkJCVBUUl9FUlIoY3RsLT5jbGspKTsNCj4g PiArCQlyZXR1cm4gUFRSX0VSUihjdGwtPmNsayk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZGV2 X2RiZygmcGRldi0+ZGV2LCAiUmUtbWFwcGVkIGZyb20gMHglMDhsbFggdG8gJXBcbiIsDQo+ID4g KwkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPnN0YXJ0LCBjdGwtPmJhc2UpOw0KPiA+ICsNCj4g PiArCXZlcnNpb24gPSBheGlfZmFuX2NvbnRyb2xfaW9yZWFkKEFESV9BWElfUkVHX1ZFUlNJT04s IGN0bCk7DQo+ID4gKwlpZiAoQURJX0FYSV9QQ09SRV9WRVJfTUFKT1IodmVyc2lvbikgIT0NCj4g PiArCSAgICBBRElfQVhJX1BDT1JFX1ZFUl9NQUpPUigoKih1MzIgKilpZC0+ZGF0YSkpKSB7DQo+ ID4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiTWFqb3IgdmVyc2lvbiBtaXNtYXRjaC4gRXhwZWN0 ZWQNCj4gPiAlZC4lLjJkLiVjLCBSZXBvcnRlZCAlZC4lLjJkLiVjXG4iLA0KPiA+ICsJCQlBRElf QVhJX1BDT1JFX1ZFUl9NQUpPUigoKih1MzIgKilpZC0+ZGF0YSkpLA0KPiA+ICsJCQlBRElfQVhJ X1BDT1JFX1ZFUl9NSU5PUigoKih1MzIgKilpZC0+ZGF0YSkpLA0KPiA+ICsJCQlBRElfQVhJX1BD T1JFX1ZFUl9QQVRDSCgoKih1MzIgKilpZC0+ZGF0YSkpLA0KPiA+ICsJCQlBRElfQVhJX1BDT1JF X1ZFUl9NQUpPUih2ZXJzaW9uKSwNCj4gPiArCQkJQURJX0FYSV9QQ09SRV9WRVJfTUlOT1IodmVy c2lvbiksDQo+ID4gKwkJCUFESV9BWElfUENPUkVfVkVSX1BBVENIKHZlcnNpb24pKTsNCj4gPiAr CQlyZXR1cm4gLUVOT0RFVjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwljdGwtPmlycSA9IHBsYXRm b3JtX2dldF9pcnEocGRldiwgMCk7DQo+ID4gKwlpZiAoY3RsLT5pcnEgPCAwKSB7DQo+IA0KPiBU aGlzIGNhbiByZXR1cm4gLUVQUk9CRV9ERUZFUi4gT24gdG9wIG9mIHRoYXQsIGl0IGFscmVhZHkg Z2VuZXJhdGVzDQo+IGFuIGVycm9yDQo+IG1lc3NhZ2UsIG1lYW5pbmcgYW5vdGhlciBvbmUgaGVy ZSBpcyB1bm5lY2Vzc2FyeS4NCg0KYWNrLg0KDQo+ID4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAi cGxhdGZvcm1fZ2V0X2lycSBmYWlsZWQgd2l0aA0KPiA+ICVkXG4iLA0KPiA+ICsJCQljdGwtPmly cSk7DQo+ID4gKwkJcmV0dXJuIGN0bC0+aXJxOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldCA9 IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoJnBkZXYtPmRldiwgY3RsLT5pcnEsIE5VTEwsDQo+ ID4gKwkJCQkJYXhpX2Zhbl9jb250cm9sX2lycV9oYW5kbGVyLA0KPiA+ICsJCQkJCUlSUUZfT05F U0hPVCB8DQo+ID4gSVJRRl9UUklHR0VSX0hJR0gsDQo+ID4gKwkJCQkJcGRldi0+ZHJpdmVyX292 ZXJyaWRlLCBjdGwpOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCWRldl9lcnIoJnBkZXYtPmRl diwgImZhaWxlZCB0byByZXF1ZXN0IGFuIGlycSwgJWQiLA0KPiA+IHJldCk7DQo+ID4gKwkJcmV0 dXJuIHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXQgPSBheGlfZmFuX2NvbnRyb2xfaW5p dChjdGwsIHBkZXYtPmRldi5vZl9ub2RlKTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlkZXZf ZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBkZXZpY2VcbiIpOw0KPiA+ICsJ CXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaHdtb25fZGV2ID0gZGV2bV9od21v bl9kZXZpY2VfcmVnaXN0ZXJfd2l0aF9pbmZvKCZwZGV2LT5kZXYsDQo+ID4gKwkJCQkJCSJheGlf ZmFuX2NvbnRyb2wiLA0KPiA+ICsJCQkJCQljdGwsDQo+ID4gKwkJCQkJCSZheGlfZmFuX2NvbnRy b2xfY2hpcF9pDQo+ID4gbmZvLA0KPiA+ICsJCQkJCQlOVUxMKTsNCj4gDQo+IEFub3RoZXIgYWxp Z25tZW50IGlzc3VlLiBTaG9ydGVyIGZ1bmN0aW9uIGFuZCBnbG9iYWwgdmFyaWFibGUgbmFtZXMN Cj4gd291bGQgaGVscC4NCg0KYWNrLg0KDQo+ID4gKw0KPiA+ICsJcmV0dXJuIFBUUl9FUlJfT1Jf WkVSTyhod21vbl9kZXYpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IHBsYXRm b3JtX2RyaXZlciBheGlfZmFuX2NvbnRyb2xfZHJpdmVyID0gew0KPiA+ICsJLmRyaXZlciA9IHsN Cj4gPiArCQkubmFtZSA9ICJheGlfZmFuX2NvbnRyb2xfZHJpdmVyIiwNCj4gPiArCQkub2ZfbWF0 Y2hfdGFibGUgPSBheGlfZmFuX2NvbnRyb2xfb2ZfbWF0Y2gsDQo+ID4gKwl9LA0KPiA+ICsJLnBy b2JlID0gYXhpX2Zhbl9jb250cm9sX3Byb2JlLA0KPiA+ICt9Ow0KPiA+ICttb2R1bGVfcGxhdGZv cm1fZHJpdmVyKGF4aV9mYW5fY29udHJvbF9kcml2ZXIpOw0KPiA+ICsNCj4gPiArTU9EVUxFX0FV VEhPUigiTnVubyBTYSA8bnVuby5zYUBhbmFsb2cuY29tPiIpOw0KPiA+ICtNT0RVTEVfREVTQ1JJ UFRJT04oIkFuYWxvZyBEZXZpY2VzIEZhbiBDb250cm9sIEhETCBDT1JFIGRyaXZlciIpOw0KPiA+ ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7DQo+ID4gLS0gDQo+ID4gMi4yMy4wDQo+ID4gDQoNCg==