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.7 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,URIBL_BLOCKED autolearn=unavailable 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 24335C433E0 for ; Wed, 27 May 2020 12:04:35 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E69AF207CB for ; Wed, 27 May 2020 12:04:34 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=xilinx.onmicrosoft.com header.i=@xilinx.onmicrosoft.com header.b="lpOQgoLY" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725872AbgE0MEd (ORCPT ); Wed, 27 May 2020 08:04:33 -0400 Received: from mail-bn8nam12on2086.outbound.protection.outlook.com ([40.107.237.86]:6199 "EHLO NAM12-BN8-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725801AbgE0ME1 (ORCPT ); Wed, 27 May 2020 08:04:27 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=C5bEo/1Y6a+MFwJB7DcarBxZd/I7oXORNQFK+EZCI0uj3fIh+HTgYKHLJGftivac0qyrUuJ50ZVGcPLA481FWvicc3YkKG5XtroEi4iPo3vnshoLIYtcimvwWYpibM+vxbqtm2/QFZhntWB83q0m8Vl+J9IkrSrVJhCE1Kym/lKAnmObqSSCMP9Sn/slrkiXF3Agzr20zzo60QwvDfz8HViLzmIZjffQ4Qf2WEe3tRYQcoHZCDEqlGX63ld98daYMLFJe8+wLh9ot8FWPA0oh++oiKGpztNagwgdRGf8yVRf8jxl0iuJsAoNmzSN9aEQD8ejQ9XXbqHHcMEitKc6tQ== 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=N3ltENmdkfmsAuhUNrrbl/VzTKY2cRxu55rczO0DHLk=; b=SagotewYOANNaDWKObGGCRsz0eDnTML7fYOZTww6tTpksGRUd4X8Hs/nrRdFUT8sCdBX6bHHgdkBlznneTpeJSsXaqND/nG9B4YkXe+INosSvyiQUisTlYEeqh+LVX5wDHOsH5B9+lUPbPLkP75VL94wSVB6pPbFnsBYJe6emQwMPaWagdPj1EIZ9btg8TntqnCAywfFDpXIQIl8aEjLEMStHTzggpHP7OHfB+o0iBnWqhst1CAN9udKJGy4yp1tUd28Vjjzj98nOo//ca1uv2qX+8bBW/IhkR7iFu1x4eTB7MNbj57+8b4TZOLnEYmtnwqLTRvNaWAC21LCFDevAg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=xilinx.com; dmarc=pass action=none header.from=xilinx.com; dkim=pass header.d=xilinx.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xilinx.onmicrosoft.com; s=selector2-xilinx-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=N3ltENmdkfmsAuhUNrrbl/VzTKY2cRxu55rczO0DHLk=; b=lpOQgoLYTbslDzWiq5HAU5wuZcBQUKy0UN4paDxsnluqi8q4xER0AdcCgOKUjkbKi2TihN3At6uq5ve/c+aT+9cAQjq25V2MUHIUV+5DjSR2InAlOSxh8SeY/5FV0/Kn3m5axzjEpzO9S+UDD0vZ9ogSn3/9fRYBX/mRyJ2jycY= Received: from DM6PR02MB6876.namprd02.prod.outlook.com (2603:10b6:5:22c::11) by DM6PR02MB5658.namprd02.prod.outlook.com (2603:10b6:5:79::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3045.17; Wed, 27 May 2020 12:03:35 +0000 Received: from DM6PR02MB6876.namprd02.prod.outlook.com ([fe80::ad68:d392:e519:f671]) by DM6PR02MB6876.namprd02.prod.outlook.com ([fe80::ad68:d392:e519:f671%9]) with mapi id 15.20.3021.029; Wed, 27 May 2020 12:03:35 +0000 From: Vishal Sagar To: Laurent Pinchart CC: Hyun Kwon , "mchehab@kernel.org" , "robh+dt@kernel.org" , "mark.rutland@arm.com" , Michal Simek , "linux-media@vger.kernel.org" , "devicetree@vger.kernel.org" , "hans.verkuil@cisco.com" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , Dinesh Kumar , Sandip Kothari , Luca Ceresoli , Jacopo Mondi , Hyun Kwon Subject: RE: [PATCH v13 2/2] media: v4l: xilinx: Add Xilinx MIPI CSI-2 Rx Subsystem driver Thread-Topic: [PATCH v13 2/2] media: v4l: xilinx: Add Xilinx MIPI CSI-2 Rx Subsystem driver Thread-Index: AQHWKHDtmNA7/cHPMEikRWeI+eR8g6i2lNMAgAVVECA= Date: Wed, 27 May 2020 12:03:35 +0000 Message-ID: References: <20200512151947.120348-1-vishal.sagar@xilinx.com> <20200512151947.120348-3-vishal.sagar@xilinx.com> <20200524022722.GC6026@pendragon.ideasonboard.com> In-Reply-To: <20200524022722.GC6026@pendragon.ideasonboard.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-MS-TNEF-Correlator: authentication-results: ideasonboard.com; dkim=none (message not signed) header.d=none;ideasonboard.com; dmarc=none action=none header.from=xilinx.com; x-originating-ip: [149.199.50.130] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 35b2409c-5210-44a0-d787-08d80235fbd1 x-ms-traffictypediagnostic: DM6PR02MB5658: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:288; x-forefront-prvs: 04163EF38A x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: Fj2xEQ8D7aPMrm/QZJzAUN2PssaVCJe2kHbo8ixUKINs6HYv1FPSrZ+jXdiQu6VyOIEJP0D6HiCnjE5J2xZWJwZl7gNorQh2DyBe5uF561GAOY99LoD24swjeGd9CTtQ+YomvwXWgfB0y42cwOC0gqM3G2yokxKwEarfOIUCTBQgrAOgQu7yid5e0XFG9jodhWbQbb/s1IApBccbb8oVPPTSi86t3OreiyONREIIzzZDpHEsvRQo2LGcRebqu0R8Gv0Ja9m7LJ8yUx0bewfJOvGehQWRWj0MM8teNJwM7P5dgP4ppn3FEycYbTc0Zx98 x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR02MB6876.namprd02.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(376002)(366004)(39860400002)(346002)(136003)(396003)(26005)(66946007)(76116006)(6916009)(71200400001)(66446008)(64756008)(66556008)(66476007)(55016002)(7416002)(8936002)(186003)(5660300002)(7696005)(4326008)(83380400001)(8676002)(30864003)(2906002)(316002)(53546011)(6506007)(86362001)(52536014)(478600001)(9686003)(33656002)(107886003)(54906003)(559001)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata: MD4nO+0Ntx/jdnwzy0f0RKeDRWIv2UmyDximhtRHuFqdLhrFHd5EhF71xjIJJLYVVPZzerUl708nU0QstTf8RcndHbJQW/s6bLhpY2hFnjK+vRHc0i1AmdgH+1ojk6lR0868lyBHwX+dMHIRGSH75dn3rQlyUuKVsOcC2b/U9ZWqwylCB8L9xx313olrIN8/0zSerS8X6LvkDigrLvCUN0QPiv4HYTXDdmd2QrHIaXsCyxgBkC/CmBXIp7HV6wFK9MQXML8zL+0Xf1dCJ8sNc9CRIsWtuq2rLYrCbwIsF16YL4PhhbTGX+lpdjBbWZ8Y7lSmW2IWSmjy2Wpkwq6DqB53381ZG5vwhaO1vaniEp6R69CsUzlxpMe6sJgetWrLoFKE/lsBDq0C+AcbB21QzCWiXb+qml/LvWEI+06BYTbLsTpqZ9PobOT+HVHmisclplYTHhqWDPYNkmOt2Vwn4UlU+0JcvuKDBilvcCdzSrt0M03LGlyBb1kMTcLdP5Fc Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-Network-Message-Id: 35b2409c-5210-44a0-d787-08d80235fbd1 X-MS-Exchange-CrossTenant-originalarrivaltime: 27 May 2020 12:03:35.2329 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: vTw5kImGI1I2/OiiuEGsyegcU+biUYoEhWGdG3FZOw6KIavOq+ChfOCrC2vKDLhCKL25U/BVz2YyX/PcGtUD4w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR02MB5658 Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org SGkgTGF1cmVudCwNCg0KVGhhbmtzIGZvciByZXZpZXdpbmcgdGhpcyBwYXRjaC4NCg0KPiAtLS0t LU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBMYXVyZW50IFBpbmNoYXJ0IDxsYXVyZW50 LnBpbmNoYXJ0QGlkZWFzb25ib2FyZC5jb20+DQo+IFNlbnQ6IFN1bmRheSwgTWF5IDI0LCAyMDIw IDc6NTcgQU0NCj4gVG86IFZpc2hhbCBTYWdhciA8dnNhZ2FyQHhpbGlueC5jb20+DQo+IENjOiBI eXVuIEt3b24gPGh5dW5rQHhpbGlueC5jb20+OyBtY2hlaGFiQGtlcm5lbC5vcmc7DQo+IHJvYmgr ZHRAa2VybmVsLm9yZzsgbWFyay5ydXRsYW5kQGFybS5jb207IE1pY2hhbCBTaW1law0KPiA8bWlj aGFsc0B4aWxpbnguY29tPjsgbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnOw0KPiBkZXZpY2V0 cmVlQHZnZXIua2VybmVsLm9yZzsgaGFucy52ZXJrdWlsQGNpc2NvLmNvbTsgbGludXgtYXJtLQ0K PiBrZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZzsgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9y ZzsgRGluZXNoIEt1bWFyDQo+IDxkaW5lc2hrQHhpbGlueC5jb20+OyBTYW5kaXAgS290aGFyaSA8 c2FuZGlwa0B4aWxpbnguY29tPjsgTHVjYSBDZXJlc29saQ0KPiA8bHVjYUBsdWNhY2VyZXNvbGku bmV0PjsgSmFjb3BvIE1vbmRpIDxqYWNvcG9Aam1vbmRpLm9yZz47IEh5dW4gS3dvbg0KPiA8aHl1 bmtAeGlsaW54LmNvbT4NCj4gU3ViamVjdDogUmU6IFtQQVRDSCB2MTMgMi8yXSBtZWRpYTogdjRs OiB4aWxpbng6IEFkZCBYaWxpbnggTUlQSSBDU0ktMiBSeA0KPiBTdWJzeXN0ZW0gZHJpdmVyDQo+ IA0KPiBIaSBWaXNoYWwsDQo+IA0KPiBUaGFuayB5b3UgZm9yIHRoZSBwYXRjaC4NCj4gDQo+IE9u IFR1ZSwgTWF5IDEyLCAyMDIwIGF0IDA4OjQ5OjQ3UE0gKzA1MzAsIFZpc2hhbCBTYWdhciB3cm90 ZToNCj4gPiBUaGUgWGlsaW54IE1JUEkgQ1NJLTIgUnggU3Vic3lzdGVtIHNvZnQgSVAgaXMgdXNl ZCB0byBjYXB0dXJlIGltYWdlcw0KPiA+IGZyb20gTUlQSSBDU0ktMiBjYW1lcmEgc2Vuc29ycyBh bmQgb3V0cHV0IEFYSTQtU3RyZWFtIHZpZGVvIGRhdGEgcmVhZHkNCj4gPiBmb3IgaW1hZ2UgcHJv Y2Vzc2luZy4gUGxlYXNlIHJlZmVyIHRvIFBHMjMyIGZvciBkZXRhaWxzLg0KPiA+DQo+ID4gVGhl IENTSTIgUnggY29udHJvbGxlciBmaWx0ZXJzIG91dCBhbGwgcGFja2V0cyBleGNlcHQgZm9yIHRo ZSBwYWNrZXRzDQo+ID4gd2l0aCBkYXRhIHR5cGUgZml4ZWQgaW4gaGFyZHdhcmUuIFJBVzggcGFj a2V0cyBhcmUgYWx3YXlzIGFsbG93ZWQgdG8NCj4gPiBwYXNzIHRocm91Z2guDQo+ID4NCj4gPiBJ dCBpcyBhbHNvIHVzZWQgdG8gc2V0dXAgYW5kIGhhbmRsZSBpbnRlcnJ1cHRzIGFuZCBlbmFibGUg dGhlIGNvcmUuIEl0DQo+ID4gbG9ncyBhbGwgdGhlIGV2ZW50cyBpbiByZXNwZWN0aXZlIGNvdW50 ZXJzIGJldHdlZW4gc3RyZWFtaW5nIG9uIGFuZCBvZmYuDQo+ID4NCj4gPiBUaGUgZHJpdmVyIHN1 cHBvcnRzIG9ubHkgdGhlIHZpZGVvIGZvcm1hdCBicmlkZ2UgZW5hYmxlZCBjb25maWd1cmF0aW9u Lg0KPiA+IFNvbWUgZGF0YSB0eXBlcyBsaWtlIFlVViA0MjIgMTBicGMsIFJBVzE2LCBSQVcyMCBh cmUgc3VwcG9ydGVkIHdoZW4NCj4gPiB0aGUgQ1NJIHYyLjAgZmVhdHVyZSBpcyBlbmFibGVkIGlu IGRlc2lnbi4gV2hlbiB0aGUgVkNYIGZlYXR1cmUgaXMNCj4gPiBlbmFibGVkLCB0aGUgbWF4aW11 bSBudW1iZXIgb2YgdmlydHVhbCBjaGFubmVscyBiZWNvbWVzIDE2IGZyb20gNC4NCj4gPg0KPiA+ IFNpZ25lZC1vZmYtYnk6IFZpc2hhbCBTYWdhciA8dmlzaGFsLnNhZ2FyQHhpbGlueC5jb20+DQo+ ID4gUmV2aWV3ZWQtYnk6IEh5dW4gS3dvbiA8aHl1bi5rd29uQHhpbGlueC5jb20+DQo+ID4gUmV2 aWV3ZWQtYnk6IExhdXJlbnQgUGluY2hhcnQgPGxhdXJlbnQucGluY2hhcnRAaWRlYXNvbmJvYXJk LmNvbT4NCj4gPiAtLS0NCj4gPiB2MTMNCj4gPiAtIEJhc2VkIG9uIExhdXJlbnQncyBzdWdnZXN0 aW9ucw0KPiA+IC0gUmVtb3ZlZCB1bm5lY2Vzc2FyeSBkZWJ1ZyBzdGF0ZW1lbnQgZm9yIHZlcA0K PiA+IC0gQWRkZWQgVE9ETyBmb3IgY2xvY2sgdG8gZW5hYmxlIGRpc2FibGUgYXQgc3RyZWFtb24v b2ZmDQo+ID4gLSBGaXggZm9yIGluZGV4IHRvIHN0YXJ0IGZyb20gMCBmb3IgZ2V0X250aF9tYnVz X2Zvcm1hdA0KPiA+IC0gUmVtb3ZlZCBtYWNybyBYQ1NJX1RJTUVPVVRfVkFMDQo+ID4gLSBSZW1v dmUgbmRlbGF5IGZyb20gaGFyZCByZXNldA0KPiA+IC0gUmVtb3ZlIGhhcmQgcmVzZXQgZnJvbSBp cnEgaGFuZGxlcg0KPiA+IC0gRml4IHNob3J0IHBhY2tldCBmaWZvIGNsZWFyDQo+ID4gLSBBZGQg VE9ETyBmb3IgdjRsMl9zdWJkZXZfbm90aWZ5IGZvciBTTEJGIGVycm9yDQo+ID4gLSBGaXggdGhl IGVuYWJsZSBjb25kaXRpb24gaW4gc19zdHJlYW0NCj4gPiAtIEZpeCBjb25kaXRpb24gaW4geGNz aTJyeHNzX3NldF9mb3JtYXQNCj4gPiAtIEZpeCBlbnVtX21idXNfY29kZSBmb3IgZG91YmxlIGVu dW1lcmF0aW9uIG9mIFJBVzggRGF0YSB0eXBlDQo+ID4gLSBSZW1vdmVkIGNvcmUgc3RydWN0DQo+ ID4gLSBBZGRlZCByZXZpZXdlZCBieSBMYXVyZW50DQo+ID4NCj4gPiB2MTINCj4gPiAtIENoYW5n ZXMgZG9uZSBhcyBzdWdnZXN0ZWQgYnkgTGF1cmVudCBQaW5jaGFydCBhbmQgTHVjYSBDZXJlc29s aQ0KPiA+IC0gUmVtb3ZlZCB1bnVzZWQgbWFjcm9zDQo+ID4gLSBObyBsb2NhbCBzdG9yYWdlIG9m IHN1cHBvcnRlZCBmb3JtYXRzDQo+ID4gLSBEcm9wcGVkIGluaXQgbWJ1cyBmbXRzIGFuZCByZW1v dmVkIHhjc2kycnhzc19pbml0X21idXNfZm10cygpDQo+ID4gLSBYQ1NJX0dFVF9CSVRTRVRfU1RS IHJlbW92ZWQNCj4gPiAtIEFkZCBkYXRhIHR5cGUgYW5kIG1idXMgTFVUDQo+ID4gICAtIEFkZGVk IHhjc2kycnhzc19nZXRfbnRoX21idXMoKSBhbmQgeGNzaTJyeHNzX2dldF9kdCgpDQo+ID4gLSBS ZXBsYWNlZCBhbGwgY29yZS0+ZGV2IHdpdGggZGV2IGluIGRldl9kYmcoKSBhbmQgcmVsYXRlZCBk ZWJ1Zw0KPiA+IHByaW50cw0KPiA+IC0gUmVwbGFjZWQgeGNzaTJyeHNzX2xvZ19pcGNvbmZpZygp IHdpdGggc2luZ2xlIGxpbmUNCj4gPiAtIFJlbW92ZWQgc21hbGwgZnVuY3Rpb25zIHRvIGVuYWJs ZS9kaXNhYmxlIGludGVycnVwdHMgYW5kIGNvcmUNCj4gPiAtIE5vdyBzYXZlIHJlbW90ZSBzdWJk ZXYgaW4gc3RhdGUgc3RydWN0IGJlZm9yZSBzdHJlYW1pbmcgb24NCj4gPiAtIE1hZGUgeGNzaTJy eHNzX3Jlc2V0IGFzIHNvZnRfcmVzZXQoKQ0KPiA+IC0gQWRkZWQgaGFyZCByZXNldCB1c2luZyB2 aWRlby1yZXNldCBncGlvDQo+ID4gICAtIDIgbW9kZXMgb25lIHdpdGggZGVsYXkgYW5kIGFub3Ro ZXIgc2xlZXANCj4gPiAtIEluc3RlYWQgb2YgcmVzZXQtZ3Bpb3MgaXQgaXMgbm90IHZpZGVvLXJl c2V0LWdwaW9zDQo+ID4gLSBJbiBpcnEgaGFuZGxlcg0KPiA+ICAgLSBNb3ZlZCBjbGVhcmluZyBv ZiBJU1IgdXANCj4gPiAgIC0gRHVtcCAvIGVtcHR5IHNob3J0IHBhY2tldCBmaWZvDQo+ID4gICAt IElycSBoYW5kbGVyIGlzIG5vdyB0aHJlYWRlZA0KPiA+IC0gQWRkZWQgaW5pdF9jZmcgcGFkIG9w cyBhbmQgcmVtb3ZlZCBvcGVuKCkNCj4gPiAtIFVwZGF0ZWQgeGNzaTJyeHNzX3NldF9mb3JtYXQo KSwgeGNzaTJyeHNzX2VudW1fbWJ1c19jb2RlKCkgdG8gdXNlDQo+ID4gdGhlIGR0IG1idXMgbHV0 DQo+ID4gLSB4Y3NpMnJ4c3Nfc2V0X2RlZmF1bHRfZm9ybWF0KCkgdXBkYXRlZA0KPiA+IC0gTW92 ZWQgbXV0ZXhfaW5pdCgpDQo+ID4gLSBVcGRhdGVkIGdyYXBoIGhhbmRsaW5nDQo+ID4gLSBSZW1v dmVkIHVubmVjZXNzYXJ5IHByaW50cw0KPiA+IC0gVXNlIGRldm1fcGxhdGZvcm1faW9yZW1hcF9y ZXNvdXJjZSgpIGFuZCBwbGF0Zm9ybV9nZXRfaXJxKCkNCj4gPiAtIFVwZGF0ZSBLQ29uZmlnIGRl c2NyaXB0aW9uDQo+ID4NCj4gPiB2MTENCj4gPiAtIEZpeGVkIGNoYW5nZXMgYXMgc3VnZ2VzdGVk IGJ5IFNha2FyaSBBaWx1cw0KPiA+IC0gUmVtb3ZlZCBWSURFT19YSUxJTlggZnJvbSBLQ29uZmln DQo+ID4gLSBNaW5vciBmb3JtYXR0aW5nDQo+ID4gLSBTdGFydCAvIFN0b3AgdXBzdHJlYW0gc3Vi LWRldmljZSBpbiB4Y3NpMnJ4c3Nfc3RhcnRfc3RyZWFtKCkNCj4gPiAgIGFuZCB4Y3NpMnJ4c3Nf c3RvcF9zdHJlYW0oKQ0KPiA+IC0gQWRkZWQgdjRsMl9zdWJkZXZfbGlua192YWxpZGF0ZV9kZWZh dWx0KCkgaW4gdjRsMl9zdWJkZXZfcGFkX29wcygpDQo+ID4gLSBVc2UgZndub2RlX2dyYXBoX2dl dF9lbmRwb2ludF9ieV9pZCgpIGluc3RlYWQgb2YgcGFyc2luZyBieSBzZWxmDQo+ID4gLSBTZXQg YnVzIHR5cGUgYXMgVjRMMl9NQlVTX0NTSTJfRFBIWSBpbiBzdHJ1Y3QgdjRsMl9md25vZGVfZW5k cG9pbnQNCj4gPiAtIFJlbW92ZSBudW1fY2xrcyBmcm9tIGNvcmUuIEluc3RlYWQgdXNlIEFSUkFZ X1NJWkUoKQ0KPiA+IC0gRml4ZWQgU1BEWCBoZWFkZXIgdG8gR1BMLTIuMA0KPiA+IC0gVXBkYXRl IGNvcHlyaWdodCB5ZWFyIHRvIDIwMjANCj4gPg0KPiA+IHYxMA0KPiA+IC0gUmVtb3ZlZCBhbGwg VjRMMiBjb250cm9scyBhbmQgZXZlbnRzIGJhc2VkIG9uIFNha2FyaSdzIGNvbW1lbnRzLg0KPiA+ IC0gTm93IHN0b3Bfc3RyZWFtKCkgYmVmb3JlIHRvZ2dsaW5nIHJzdF9ncGlvDQo+ID4gLSBVcGRh dGVkIGluaXRfbWJ1cygpIHRvIHRocm93IGVycm9yIG9uIGFycmF5IG91dCBvZiBib3VuZCBhY2Nl c3MNCj4gPiAtIE1ha2UgZXZlbnRzIGFuZCB2Y3hfZXZlbnRzIGFzIGNvdW50ZXJzIGluc3RlYWQg b2Ygc3RydWN0dXJlcw0KPiA+IC0gTWlub3IgZml4ZXMgaW4gc2V0X2Zvcm1hdCgpIGVudW1fbWJ1 c19jb2RlKCkgYXMgc3VnZ2VzdGVkIGJ5IFNha2FyaQ0KPiA+DQo+ID4gdjkNCj4gPiAtIE1vdmVk IGFsbCBjb250cm9scyBhbmQgZXZlbnRzIHRvIHhpbGlueC1jc2kycnhzcy5oDQo+ID4gLSBVcGRh dGVkIG5hbWUgYW5kIGRlc2NyaXB0aW9uIG9mIGNvbnRyb2xzIGFuZCBldmVudHMNCj4gPiAtIEdl dCBjb250cm9sIGJhc2UgYWRkcmVzcyBmcm9tIHY0bDItY29udHJvbHMuaCAoMHgxMGMwKQ0KPiA+ IC0gRml4IEtDb25maWcgZm9yIGRlcGVuZGVuY3kgb24gVklERU9fWElMSU5YDQo+ID4gLSBBZGRl ZCBlbnVtX21idXNfY29kZSgpIHN1cHBvcnQNCj4gPiAtIEFkZGVkIGRlZmF1bHQgZm9ybWF0IHRv IGJlIHJldHVybmVkIG9uIG9wZW4oKQ0KPiA+IC0gTWFyayB2YXJpYWJsZXMgYXJlIGNvbnN0DQo+ ID4gLSBSZW1vdmUgcmVmZXJlbmNlcyB0byBzaG9ydCBwYWNrZXQgaW4gY29tbWVudHMNCj4gPiAt IEFkZCBjaGVjayBmb3Igc3RyZWFtaW5nIGJlZm9yZSBzZXR0aW5nIGFjdGl2ZSBsYW5lcyBjb250 cm9sDQo+ID4gLSBzdHJsY3B5IC0+IHN0cnNjcHkNCj4gPiAtIEZpeCB4Y3NpMnJ4c3Nfc2V0X2Zv cm1hdCgpDQo+ID4NCj4gPiB2OA0KPiA+IC0gVXNlIGNsa19idWxrKiBBUElzDQo+ID4gLSBBZGQg Z3BpbyByZXNldCBmb3IgYXNzZXJ0aW5nIHZpZGVvX2FyZXNldG4gd2hlbiBzdHJlYW0gbGluZSBi dWZmZXINCj4gPiBvY2N1cnMNCj4gPiAtIFJlbW92ZWQgc2hvcnQgcGFja2V0IHJlbGF0ZWQgZXZl bnRzIGFuZCBpcnEgaGFuZGxpbmcNCj4gPiAgIC0gVjRMMl9FVkVOVF9YTE5YQ1NJUlhfU1BLVCBh bmQgVjRMMl9FVkVOVF9YTE5YQ1NJUlhfU1BLVF9PVkYNCj4gPiByZW1vdmVkDQo+ID4gLSBSZW1v dmVkIGZyYW1lIGNvdW50ZXIgY29udHJvbA0KPiBWNEwyX0NJRF9YSUxJTlhfTUlQSUNTSVNTX0ZS QU1FX0NPVU5URVINCj4gPiAgIGFuZCB4Y3NpMnJ4c3NfZ192b2xhdGlsZV9jdHJsKCkNCj4gPiAt IE1pbm9yIGZvcm1hdHRpbmcgZml4ZXMNCj4gPg0KPiA+IHY3DQo+ID4gLSBObyBjaGFuZ2UNCj4g Pg0KPiA+IHY2DQo+ID4gLSBObyBjaGFuZ2UNCj4gPg0KPiA+IHY1DQo+ID4gLSBSZW1vdmVkIGJh eWVyIGFuZCB1cGRhdGVkIHJlbGF0ZWQgcGFydHMgbGlrZSBzZXQgZGVmYXVsdCBmb3JtYXQgYmFz ZWQNCj4gPiAgIG9uIEx1Y2EgQ2Vyc29saSdzIGNvbW1lbnRzLg0KPiA+IC0gQWRkZWQgY29ycmVj dCBZVVY0MjIgMTBicGMgbWVkaWEgYnVzIGZvcm1hdA0KPiA+DQo+ID4gdjQNCj4gPiAtIFJlbW92 ZWQgaXJxIG1lbWJlciBmcm9tIGNvcmUgc3RydWN0dXJlDQo+ID4gLSBDb25zb2xpZGF0ZWQgSVAg Y29uZmlnIHByaW50cyBpbiB4Y3NpMnJ4c3NfbG9nX2lwY29uZmlnKCkNCj4gPiAtIFJldHVybiAt RUlOVkFMIGluIGNhc2Ugb2YgaW52YWxpZCBpb2N0bA0KPiA+IC0gQ29kZSBmb3JtYXR0aW5nDQo+ ID4gLSBBZGRlZCByZXZpZXdlZCBieSBIeXVuIEt3b24NCj4gPg0KPiA+IHYzDQo+ID4gLSBGaXhl ZCBjb21tZW50cyBnaXZlbiBieSBIeXVuLg0KPiA+IC0gUmVtb3ZlZCBEUEhZIDIwMCBNSHogY2xv Y2suIFRoaXMgd2lsbCBiZSBjb250cm9sbGVkIGJ5IERQSFkgZHJpdmVyDQo+ID4gLSBNaW5vciBj b2RlIGZvcm1hdHRpbmcNCj4gPiAtIGVuX2NzaV92MjAgYW5kIHZmYiBtZW1iZXJzIHJlbW92ZWQg ZnJvbSBzdHJ1Y3QgYW5kIG1hZGUgbG9jYWwgdG8gZHQNCj4gPiBwYXJzaW5nDQo+ID4gLSBsb2Nr IGRlc2NyaXB0aW9uIHVwZGF0ZWQNCj4gPiAtIGNoYW5nZWQgdG8gcmF0ZWxpbWl0ZWQgdHlwZSBm b3IgYWxsIGRldiBwcmludHMgaW4gaXJxIGhhbmRsZXINCj4gPiAtIFJlbW92ZWQgWVVWIDQyMiAx MGJwYyBtZWRpYSBmb3JtYXQNCj4gPg0KPiA+IHYyDQo+ID4gLSBGaXhlZCBjb21tZW50cyBnaXZl biBieSBIeXVuIGFuZCBTYWthcmkuDQo+ID4gLSBNYWRlIGFsbCBiaXRtYXNrIHVzaW5nIEJJVCgp IGFuZCBHRU5NQVNLKCkNCj4gPiAtIFJlbW92ZWQgdW51c2VkIGRlZmluaXRpb25zDQo+ID4gLSBS ZW1vdmVkIERQSFkgYWNjZXNzLiBUaGlzIHdpbGwgYmUgZG9uZSBieSBzZXBhcmF0ZSBEUEhZIFBI WSBkcml2ZXIuDQo+ID4gLSBBZGRlZCBzdXBwb3J0IGZvciBDU0kgdjIuMCBmb3IgWVVWIDQyMiAx MGJwYywgUkFXMTYsIFJBVzIwIGFuZCBleHRyYQ0KPiA+ICAgdmlydHVhbCBjaGFubmVscw0KPiA+ IC0gRml4ZWQgdGhlIHBvcnRzIGFzIHNpbmsgYW5kIHNvdXJjZQ0KPiA+IC0gTm93IHVzZSB0aGUg djRsMmZ3bm9kZSBBUEkgdG8gZ2V0IG51bWJlciBvZiBkYXRhLWxhbmVzDQo+ID4gLSBBZGRlZCBj bG9jayBmcmFtZXdvcmsgc3VwcG9ydA0KPiA+IC0gUmVtb3ZlZCB0aGUgY2xvc2UoKSBmdW5jdGlv bg0KPiA+IC0gdXBkYXRlZCB0aGUgc2V0IGZvcm1hdCBmdW5jdGlvbg0KPiA+IC0gc3VwcG9ydCBv bmx5IFZGQiBlbmFibGVkIGNvbmZpZ3VyYXRpb24NCj4gPg0KPiA+ICBkcml2ZXJzL21lZGlhL3Bs YXRmb3JtL3hpbGlueC9LY29uZmlnICAgICAgICAgfCAgICA3ICsNCj4gPiAgZHJpdmVycy9tZWRp YS9wbGF0Zm9ybS94aWxpbngvTWFrZWZpbGUgICAgICAgIHwgICAgMSArDQo+ID4gIC4uLi9tZWRp YS9wbGF0Zm9ybS94aWxpbngveGlsaW54LWNzaTJyeHNzLmMgICB8IDExMTQgKysrKysrKysrKysr KysrKysNCj4gPiAgMyBmaWxlcyBjaGFuZ2VkLCAxMTIyIGluc2VydGlvbnMoKykNCj4gPiAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L3hpbGlueC1jc2ky cnhzcy5jDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS94aWxp bngvS2NvbmZpZw0KPiA+IGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS94aWxpbngvS2NvbmZpZw0K PiA+IGluZGV4IDAxYzk2ZmI2NjQxNC4uNDQ1ODdkY2NhY2YxIDEwMDY0NA0KPiA+IC0tLSBhL2Ry aXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L0tjb25maWcNCj4gPiArKysgYi9kcml2ZXJzL21l ZGlhL3BsYXRmb3JtL3hpbGlueC9LY29uZmlnDQo+ID4gQEAgLTEyLDYgKzEyLDEzIEBAIGNvbmZp ZyBWSURFT19YSUxJTlgNCj4gPg0KPiA+ICBpZiBWSURFT19YSUxJTlgNCj4gPg0KPiA+ICtjb25m aWcgVklERU9fWElMSU5YX0NTSTJSWFNTDQo+ID4gKwl0cmlzdGF0ZSAiWGlsaW54IENTSS0yIFJ4 IFN1YnN5c3RlbSINCj4gPiArCWhlbHANCj4gPiArCSAgRHJpdmVyIGZvciBYaWxpbnggTUlQSSBD U0ktMiBSeCBTdWJzeXN0ZW0uIFRoaXMgaXMgYSBWNEwgc3ViLWRldmljZQ0KPiA+ICsJICBiYXNl ZCBkcml2ZXIgdGhhdCB0YWtlcyBpbnB1dCBmcm9tIENTSS0yIFR4IHNvdXJjZSBhbmQgY29udmVy dHMNCj4gPiArCSAgaXQgaW50byBhbiBBWEk0LVN0cmVhbS4NCj4gPiArDQo+ID4gIGNvbmZpZyBW SURFT19YSUxJTlhfVFBHDQo+ID4gIAl0cmlzdGF0ZSAiWGlsaW54IFZpZGVvIFRlc3QgUGF0dGVy biBHZW5lcmF0b3IiDQo+ID4gIAlkZXBlbmRzIG9uIFZJREVPX1hJTElOWA0KPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlueC9NYWtlZmlsZQ0KPiA+IGIvZHJpdmVy cy9tZWRpYS9wbGF0Zm9ybS94aWxpbngvTWFrZWZpbGUNCj4gPiBpbmRleCA0Y2RjMGIxZWM3YTUu LjYxMTlhMzRmMzA0MyAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3hp bGlueC9NYWtlZmlsZQ0KPiA+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L01h a2VmaWxlDQo+ID4gQEAgLTMsNSArMyw2IEBADQo+ID4gIHhpbGlueC12aWRlby1vYmpzICs9IHhp bGlueC1kbWEubyB4aWxpbngtdmlwLm8geGlsaW54LXZpcHAubw0KPiA+DQo+ID4gIG9iai0kKENP TkZJR19WSURFT19YSUxJTlgpICs9IHhpbGlueC12aWRlby5vDQo+ID4gK29iai0kKENPTkZJR19W SURFT19YSUxJTlhfQ1NJMlJYU1MpICs9IHhpbGlueC1jc2kycnhzcy5vDQo+ID4gIG9iai0kKENP TkZJR19WSURFT19YSUxJTlhfVFBHKSArPSB4aWxpbngtdHBnLm8NCj4gPiAgb2JqLSQoQ09ORklH X1ZJREVPX1hJTElOWF9WVEMpICs9IHhpbGlueC12dGMubyBkaWZmIC0tZ2l0DQo+ID4gYS9kcml2 ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlueC94aWxpbngtY3NpMnJ4c3MuYw0KPiA+IGIvZHJpdmVy cy9tZWRpYS9wbGF0Zm9ybS94aWxpbngveGlsaW54LWNzaTJyeHNzLmMNCj4gPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uY2FjMDgxNDlhZTdhDQo+ID4gLS0t IC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L3hpbGlu eC1jc2kycnhzcy5jDQo+ID4gQEAgLTAsMCArMSwxMTE0IEBADQo+ID4gKy8vIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+ID4gKy8qDQo+ID4gKyAqIERyaXZlciBmb3IgWGlsaW54 IE1JUEkgQ1NJLTIgUnggU3Vic3lzdGVtDQo+ID4gKyAqDQo+ID4gKyAqIENvcHlyaWdodCAoQykg MjAxNiAtIDIwMjAgWGlsaW54LCBJbmMuDQo+ID4gKyAqDQo+ID4gKyAqIENvbnRhY3RzOiBWaXNo YWwgU2FnYXIgPHZpc2hhbC5zYWdhckB4aWxpbnguY29tPg0KPiA+ICsgKg0KPiA+ICsgKi8NCj4g PiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4N Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4NCj4gPiArI2luY2x1ZGUgPGxp bnV4L2ludGVycnVwdC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+ID4gKyNp bmNsdWRlIDxsaW51eC9tdXRleC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4NCj4gPiAr I2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1f ZGV2aWNlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC92NGwyLXN1YmRldi5oPg0KPiA+ICsjaW5j bHVkZSA8bWVkaWEvbWVkaWEtZW50aXR5Lmg+DQo+ID4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNv bW1vbi5oPg0KPiA+ICsjaW5jbHVkZSA8bWVkaWEvdjRsMi1jdHJscy5oPg0KPiA+ICsjaW5jbHVk ZSA8bWVkaWEvdjRsMi1md25vZGUuaD4NCj4gPiArI2luY2x1ZGUgPG1lZGlhL3Y0bDItc3ViZGV2 Lmg+DQo+ID4gKyNpbmNsdWRlICJ4aWxpbngtdmlwLmgiDQo+ID4gKw0KPiA+ICsvKiBSZWdpc3Rl ciByZWdpc3RlciBtYXAgKi8NCj4gPiArI2RlZmluZSBYQ1NJX0NDUl9PRkZTRVQJCTB4MDANCj4g PiArI2RlZmluZSBYQ1NJX0NDUl9TT0ZUUkVTRVQJQklUKDEpDQo+ID4gKyNkZWZpbmUgWENTSV9D Q1JfRU5BQkxFCQlCSVQoMCkNCj4gPiArDQo+ID4gKyNkZWZpbmUgWENTSV9QQ1JfT0ZGU0VUCQkw eDA0DQo+ID4gKyNkZWZpbmUgWENTSV9QQ1JfTUFYTEFORVNfTUFTSwlHRU5NQVNLKDQsIDMpDQo+ ID4gKyNkZWZpbmUgWENTSV9QQ1JfQUNUTEFORVNfTUFTSwlHRU5NQVNLKDEsIDApDQo+ID4gKw0K PiA+ICsjZGVmaW5lIFhDU0lfQ1NSX09GRlNFVAkJMHgxMA0KPiA+ICsjZGVmaW5lIFhDU0lfQ1NS X1BLVENOVAkJR0VOTUFTSygzMSwgMTYpDQo+ID4gKyNkZWZpbmUgWENTSV9DU1JfU1BGSUZPRlVM TAlCSVQoMykNCj4gPiArI2RlZmluZSBYQ1NJX0NTUl9TUEZJRk9ORQlCSVQoMikNCj4gPiArI2Rl ZmluZSBYQ1NJX0NTUl9TTEJGCQlCSVQoMSkNCj4gPiArI2RlZmluZSBYQ1NJX0NTUl9SSVBDRAkJ QklUKDApDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhDU0lfR0lFUl9PRkZTRVQJMHgyMA0KPiA+ICsj ZGVmaW5lIFhDU0lfR0lFUl9HSUUJCUJJVCgwKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBYQ1NJX0lT Ul9PRkZTRVQJCTB4MjQNCj4gPiArI2RlZmluZSBYQ1NJX0lFUl9PRkZTRVQJCTB4MjgNCj4gPiAr DQo+ID4gKyNkZWZpbmUgWENTSV9JU1JfRlIJCUJJVCgzMSkNCj4gPiArI2RlZmluZSBYQ1NJX0lT Ul9WQ1hGRQkJQklUKDMwKQ0KPiA+ICsjZGVmaW5lIFhDU0lfSVNSX1dDQwkJQklUKDIyKQ0KPiA+ ICsjZGVmaW5lIFhDU0lfSVNSX0lMQwkJQklUKDIxKQ0KPiA+ICsjZGVmaW5lIFhDU0lfSVNSX1NQ RklGT0YJQklUKDIwKQ0KPiA+ICsjZGVmaW5lIFhDU0lfSVNSX1NQRklGT05FCUJJVCgxOSkNCj4g PiArI2RlZmluZSBYQ1NJX0lTUl9TTEJGCQlCSVQoMTgpDQo+ID4gKyNkZWZpbmUgWENTSV9JU1Jf U1RPUAkJQklUKDE3KQ0KPiA+ICsjZGVmaW5lIFhDU0lfSVNSX1NPVEVSUgkJQklUKDEzKQ0KPiA+ ICsjZGVmaW5lIFhDU0lfSVNSX1NPVFNZTkNFUlIJQklUKDEyKQ0KPiA+ICsjZGVmaW5lIFhDU0lf SVNSX0VDQzJCRVJSCUJJVCgxMSkNCj4gPiArI2RlZmluZSBYQ1NJX0lTUl9FQ0MxQkVSUglCSVQo MTApDQo+ID4gKyNkZWZpbmUgWENTSV9JU1JfQ1JDRVJSCQlCSVQoOSkNCj4gPiArI2RlZmluZSBY Q1NJX0lTUl9EQVRBSURFUlIJQklUKDgpDQo+ID4gKyNkZWZpbmUgWENTSV9JU1JfVkMzRlNZTkNF UlIJQklUKDcpDQo+ID4gKyNkZWZpbmUgWENTSV9JU1JfVkMzRkxWTEVSUglCSVQoNikNCj4gPiAr I2RlZmluZSBYQ1NJX0lTUl9WQzJGU1lOQ0VSUglCSVQoNSkNCj4gPiArI2RlZmluZSBYQ1NJX0lT Ul9WQzJGTFZMRVJSCUJJVCg0KQ0KPiA+ICsjZGVmaW5lIFhDU0lfSVNSX1ZDMUZTWU5DRVJSCUJJ VCgzKQ0KPiA+ICsjZGVmaW5lIFhDU0lfSVNSX1ZDMUZMVkxFUlIJQklUKDIpDQo+ID4gKyNkZWZp bmUgWENTSV9JU1JfVkMwRlNZTkNFUlIJQklUKDEpDQo+ID4gKyNkZWZpbmUgWENTSV9JU1JfVkMw RkxWTEVSUglCSVQoMCkNCj4gPiArDQo+ID4gKyNkZWZpbmUgWENTSV9JU1JfQUxMSU5UUl9NQVNL CSgweGMwN2UzZmZmKQ0KPiA+ICsNCj4gPiArLyoNCj4gPiArICogUmVtb3ZlZCBWQ1hGRSBtYXNr IGFzIGl0IGRvZXNuJ3QgZXhpc3QgaW4gSUVSDQo+ID4gKyAqIFJlbW92ZWQgU1RPUCBzdGF0ZSBp cnEgYXMgdGhpcyB3aWxsIGtlZXAgZHJpdmVyIGluIGlycSBoYW5kbGVyDQo+ID4gK29ubHkgICov DQo+ID4gKyNkZWZpbmUgWENTSV9JRVJfSU5UUl9NQVNLCShYQ1NJX0lTUl9BTExJTlRSX01BU0sg JlwNCj4gPiArCQkJCSB+KFhDU0lfSVNSX1NUT1AgfCBYQ1NJX0lTUl9WQ1hGRSkpDQo+ID4gKw0K PiA+ICsjZGVmaW5lIFhDU0lfU1BLVFJfT0ZGU0VUCTB4MzANCj4gPiArI2RlZmluZSBYQ1NJX1NQ S1RSX0RBVEEJCUdFTk1BU0soMjMsIDgpDQo+ID4gKyNkZWZpbmUgWENTSV9TUEtUUl9WQwkJR0VO TUFTSyg3LCA2KQ0KPiA+ICsjZGVmaW5lIFhDU0lfU1BLVFJfRFQJCUdFTk1BU0soNSwgMCkNCj4g PiArI2RlZmluZSBYQ1NJX1NQS1RfRklGT19ERVBUSAkzMQ0KPiA+ICsNCj4gPiArI2RlZmluZSBY Q1NJX1ZDWFJfT0ZGU0VUCTB4MzQNCj4gPiArI2RlZmluZSBYQ1NJX1ZDWFJfVkNFUlIJCUdFTk1B U0soMjMsIDApDQo+ID4gKyNkZWZpbmUgWENTSV9WQ1hSX0ZTWU5DRVJSCUJJVCgxKQ0KPiA+ICsj ZGVmaW5lIFhDU0lfVkNYUl9GTFZMRVJSCUJJVCgwKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBYQ1NJ X0NMS0lORlJfT0ZGU0VUCTB4M0MNCj4gPiArI2RlZmluZSBYQ1NJX0NMS0lORlJfU1RPUAlCSVQo MSkNCj4gPiArDQo+ID4gKyNkZWZpbmUgWENTSV9ETFhJTkZSX09GRlNFVAkweDQwDQo+ID4gKyNk ZWZpbmUgWENTSV9ETFhJTkZSX1NUT1AJQklUKDUpDQo+ID4gKyNkZWZpbmUgWENTSV9ETFhJTkZS X1NPVEVSUglCSVQoMSkNCj4gPiArI2RlZmluZSBYQ1NJX0RMWElORlJfU09UU1lOQ0VSUglCSVQo MCkNCj4gPiArI2RlZmluZSBYQ1NJX01BWERMX0NPVU5UCTB4NA0KPiA+ICsNCj4gPiArI2RlZmlu ZSBYQ1NJX1ZDWElORjFSX09GRlNFVAkJMHg2MA0KPiA+ICsjZGVmaW5lIFhDU0lfVkNYSU5GMVJf TElORUNPVU5UCQlHRU5NQVNLKDMxLCAxNikNCj4gPiArI2RlZmluZSBYQ1NJX1ZDWElORjFSX0xJ TkVDT1VOVF9TSElGVAkxNg0KPiA+ICsjZGVmaW5lIFhDU0lfVkNYSU5GMVJfQllURUNPVU5UCQlH RU5NQVNLKDE1LCAwKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBYQ1NJX1ZDWElORjJSX09GRlNFVAkw eDY0DQo+ID4gKyNkZWZpbmUgWENTSV9WQ1hJTkYyUl9EVAlHRU5NQVNLKDUsIDApDQo+ID4gKyNk ZWZpbmUgWENTSV9NQVhWQ1hfQ09VTlQJMTYNCj4gPiArDQo+ID4gKy8qDQo+ID4gKyAqIFNpbmsg cGFkIGNvbm5lY3RlZCB0byBzZW5zb3Igc291cmNlIHBhZC4NCj4gPiArICogU291cmNlIHBhZCBj b25uZWN0ZWQgdG8gbmV4dCBtb2R1bGUgbGlrZSBkZW1vc2FpYy4NCj4gPiArICovDQo+ID4gKyNk ZWZpbmUgWENTSV9NRURJQV9QQURTCQkyDQo+ID4gKyNkZWZpbmUgWENTSV9ERUZBVUxUX1dJRFRI CTE5MjANCj4gPiArI2RlZmluZSBYQ1NJX0RFRkFVTFRfSEVJR0hUCTEwODANCj4gPiArDQo+ID4g Ky8qIE1JUEkgQ1NJLTIgRGF0YSBUeXBlcyBmcm9tIHNwZWMgKi8NCj4gPiArI2RlZmluZSBYQ1NJ X0RUX1lVVjQyMjhCCTB4MWUNCj4gPiArI2RlZmluZSBYQ1NJX0RUX1lVVjQyMjEwQgkweDFmDQo+ ID4gKyNkZWZpbmUgWENTSV9EVF9SR0I0NDQJCTB4MjANCj4gPiArI2RlZmluZSBYQ1NJX0RUX1JH QjU1NQkJMHgyMQ0KPiA+ICsjZGVmaW5lIFhDU0lfRFRfUkdCNTY1CQkweDIyDQo+ID4gKyNkZWZp bmUgWENTSV9EVF9SR0I2NjYJCTB4MjMNCj4gPiArI2RlZmluZSBYQ1NJX0RUX1JHQjg4OAkJMHgy NA0KPiA+ICsjZGVmaW5lIFhDU0lfRFRfUkFXNgkJMHgyOA0KPiA+ICsjZGVmaW5lIFhDU0lfRFRf UkFXNwkJMHgyOQ0KPiA+ICsjZGVmaW5lIFhDU0lfRFRfUkFXOAkJMHgyYQ0KPiA+ICsjZGVmaW5l IFhDU0lfRFRfUkFXMTAJCTB4MmINCj4gPiArI2RlZmluZSBYQ1NJX0RUX1JBVzEyCQkweDJjDQo+ ID4gKyNkZWZpbmUgWENTSV9EVF9SQVcxNAkJMHgyZA0KPiA+ICsjZGVmaW5lIFhDU0lfRFRfUkFX MTYJCTB4MmUNCj4gPiArI2RlZmluZSBYQ1NJX0RUX1JBVzIwCQkweDJmDQo+ID4gKw0KPiA+ICsj ZGVmaW5lIFhDU0lfVkNYX1NUQVJUCQk0DQo+ID4gKyNkZWZpbmUgWENTSV9NQVhfVkMJCTQNCj4g PiArI2RlZmluZSBYQ1NJX01BWF9WQ1gJCTE2DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhDU0lfTkVY VFJFR19PRkZTRVQJNA0KPiA+ICsNCj4gPiArLyogVGhlcmUgYXJlIDIgZXZlbnRzIGZyYW1lIHN5 bmMgYW5kIGZyYW1lIGxldmVsIGVycm9yIHBlciBWQyAqLw0KPiA+ICsjZGVmaW5lIFhDU0lfVkNY X05VTV9FVkVOVFMJKChYQ1NJX01BWF9WQ1ggLSBYQ1NJX01BWF9WQykgKiAyKQ0KPiA+ICsNCj4g PiArLyoqDQo+ID4gKyAqIHN0cnVjdCB4Y3NpMnJ4c3NfZXZlbnQgLSBFdmVudCBsb2cgc3RydWN0 dXJlDQo+ID4gKyAqIEBtYXNrOiBFdmVudCBtYXNrDQo+ID4gKyAqIEBuYW1lOiBOYW1lIG9mIHRo ZSBldmVudA0KPiA+ICsgKi8NCj4gPiArc3RydWN0IHhjc2kycnhzc19ldmVudCB7DQo+ID4gKwl1 MzIgbWFzazsNCj4gPiArCWNvbnN0IGNoYXIgKm5hbWU7DQo+ID4gK307DQo+ID4gKw0KPiA+ICtz dGF0aWMgY29uc3Qgc3RydWN0IHhjc2kycnhzc19ldmVudCB4Y3NpMnJ4c3NfZXZlbnRzW10gPSB7 DQo+ID4gKwl7IFhDU0lfSVNSX0ZSLCAiRnJhbWUgUmVjZWl2ZWQiIH0sDQo+ID4gKwl7IFhDU0lf SVNSX1ZDWEZFLCAiVkNYIEZyYW1lIEVycm9ycyIgfSwNCj4gPiArCXsgWENTSV9JU1JfV0NDLCAi V29yZCBDb3VudCBFcnJvcnMiIH0sDQo+ID4gKwl7IFhDU0lfSVNSX0lMQywgIkludmFsaWQgTGFu ZSBDb3VudCBFcnJvciIgfSwNCj4gPiArCXsgWENTSV9JU1JfU1BGSUZPRiwgIlNob3J0IFBhY2tl dCBGSUZPIE92ZXJGbG93IEVycm9yIiB9LA0KPiA+ICsJeyBYQ1NJX0lTUl9TUEZJRk9ORSwgIlNo b3J0IFBhY2tldCBGSUZPIE5vdCBFbXB0eSIgfSwNCj4gPiArCXsgWENTSV9JU1JfU0xCRiwgIlN0 cmVhbWxpbmUgQnVmZmVyIEZ1bGwgRXJyb3IiIH0sDQo+ID4gKwl7IFhDU0lfSVNSX1NUT1AsICJM YW5lIFN0b3AgU3RhdGUiIH0sDQo+ID4gKwl7IFhDU0lfSVNSX1NPVEVSUiwgIlNPVCBFcnJvciIg fSwNCj4gPiArCXsgWENTSV9JU1JfU09UU1lOQ0VSUiwgIlNPVCBTeW5jIEVycm9yIiB9LA0KPiA+ ICsJeyBYQ1NJX0lTUl9FQ0MyQkVSUiwgIjIgQml0IEVDQyBVbnJlY292ZXJhYmxlIEVycm9yIiB9 LA0KPiA+ICsJeyBYQ1NJX0lTUl9FQ0MxQkVSUiwgIjEgQml0IEVDQyBSZWNvdmVyYWJsZSBFcnJv ciIgfSwNCj4gPiArCXsgWENTSV9JU1JfQ1JDRVJSLCAiQ1JDIEVycm9yIiB9LA0KPiA+ICsJeyBY Q1NJX0lTUl9EQVRBSURFUlIsICJEYXRhIElkIEVycm9yIiB9LA0KPiA+ICsJeyBYQ1NJX0lTUl9W QzNGU1lOQ0VSUiwgIlZpcnR1YWwgQ2hhbm5lbCAzIEZyYW1lIFN5bmMgRXJyb3IiIH0sDQo+ID4g Kwl7IFhDU0lfSVNSX1ZDM0ZMVkxFUlIsICJWaXJ0dWFsIENoYW5uZWwgMyBGcmFtZSBMZXZlbCBF cnJvciIgfSwNCj4gPiArCXsgWENTSV9JU1JfVkMyRlNZTkNFUlIsICJWaXJ0dWFsIENoYW5uZWwg MiBGcmFtZSBTeW5jIEVycm9yIiB9LA0KPiA+ICsJeyBYQ1NJX0lTUl9WQzJGTFZMRVJSLCAiVmly dHVhbCBDaGFubmVsIDIgRnJhbWUgTGV2ZWwgRXJyb3IiIH0sDQo+ID4gKwl7IFhDU0lfSVNSX1ZD MUZTWU5DRVJSLCAiVmlydHVhbCBDaGFubmVsIDEgRnJhbWUgU3luYyBFcnJvciIgfSwNCj4gPiAr CXsgWENTSV9JU1JfVkMxRkxWTEVSUiwgIlZpcnR1YWwgQ2hhbm5lbCAxIEZyYW1lIExldmVsIEVy cm9yIiB9LA0KPiA+ICsJeyBYQ1NJX0lTUl9WQzBGU1lOQ0VSUiwgIlZpcnR1YWwgQ2hhbm5lbCAw IEZyYW1lIFN5bmMgRXJyb3IiIH0sDQo+ID4gKwl7IFhDU0lfSVNSX1ZDMEZMVkxFUlIsICJWaXJ0 dWFsIENoYW5uZWwgMCBGcmFtZSBMZXZlbCBFcnJvciIgfSB9Ow0KPiA+ICsNCj4gPiArI2RlZmlu ZSBYQ1NJX05VTV9FVkVOVFMJCUFSUkFZX1NJWkUoeGNzaTJyeHNzX2V2ZW50cykNCj4gPiArDQo+ ID4gKy8qDQo+ID4gKyAqIFRoaXMgdGFibGUgcHJvdmlkZXMgYSBtYXBwaW5nIGJldHdlZW4gQ1NJ LTIgRGF0YSB0eXBlDQo+ID4gKyAqIGFuZCBtZWRpYSBidXMgZm9ybWF0cw0KPiA+ICsgKi8NCj4g PiArc3RhdGljIGNvbnN0IHUzMiB4Y3NpMmR0X21idXNfbHV0W11bMl0gPSB7DQo+ID4gKwl7IFhD U0lfRFRfWVVWNDIyOEIsIE1FRElBX0JVU19GTVRfVVlWWThfMVgxNiB9LA0KPiA+ICsJeyBYQ1NJ X0RUX1lVVjQyMjEwQiwgTUVESUFfQlVTX0ZNVF9VWVZZMTBfMVgyMCB9LA0KPiA+ICsJeyBYQ1NJ X0RUX1JHQjQ0NCwgMCB9LA0KPiA+ICsJeyBYQ1NJX0RUX1JHQjU1NSwgMCB9LA0KPiA+ICsJeyBY Q1NJX0RUX1JHQjU2NSwgMCB9LA0KPiA+ICsJeyBYQ1NJX0RUX1JHQjY2NiwgMCB9LA0KPiA+ICsJ eyBYQ1NJX0RUX1JHQjg4OCwgTUVESUFfQlVTX0ZNVF9SQkc4ODhfMVgyNCB9LA0KPiA+ICsJeyBY Q1NJX0RUX1JBVzYsIDAgfSwNCj4gPiArCXsgWENTSV9EVF9SQVc3LCAwIH0sDQo+ID4gKwl7IFhD U0lfRFRfUkFXOCwgTUVESUFfQlVTX0ZNVF9TUkdHQjhfMVg4IH0sDQo+ID4gKwl7IFhDU0lfRFRf UkFXOCwgTUVESUFfQlVTX0ZNVF9TQkdHUjhfMVg4IH0sDQo+ID4gKwl7IFhDU0lfRFRfUkFXOCwg TUVESUFfQlVTX0ZNVF9TR0JSRzhfMVg4IH0sDQo+ID4gKwl7IFhDU0lfRFRfUkFXOCwgTUVESUFf QlVTX0ZNVF9TR1JCRzhfMVg4IH0sDQo+ID4gKwl7IFhDU0lfRFRfUkFXMTAsIE1FRElBX0JVU19G TVRfU1JHR0IxMF8xWDEwIH0sDQo+ID4gKwl7IFhDU0lfRFRfUkFXMTAsIE1FRElBX0JVU19GTVRf U0JHR1IxMF8xWDEwIH0sDQo+ID4gKwl7IFhDU0lfRFRfUkFXMTAsIE1FRElBX0JVU19GTVRfU0dC UkcxMF8xWDEwIH0sDQo+ID4gKwl7IFhDU0lfRFRfUkFXMTAsIE1FRElBX0JVU19GTVRfU0dSQkcx MF8xWDEwIH0sDQo+ID4gKwl7IFhDU0lfRFRfUkFXMTIsIE1FRElBX0JVU19GTVRfU1JHR0IxMl8x WDEyIH0sDQo+ID4gKwl7IFhDU0lfRFRfUkFXMTIsIE1FRElBX0JVU19GTVRfU0JHR1IxMl8xWDEy IH0sDQo+ID4gKwl7IFhDU0lfRFRfUkFXMTIsIE1FRElBX0JVU19GTVRfU0dCUkcxMl8xWDEyIH0s DQo+ID4gKwl7IFhDU0lfRFRfUkFXMTIsIE1FRElBX0JVU19GTVRfU0dSQkcxMl8xWDEyIH0sDQo+ ID4gKwl7IFhDU0lfRFRfUkFXMTYsIE1FRElBX0JVU19GTVRfU1JHR0IxNl8xWDE2IH0sDQo+ID4g Kwl7IFhDU0lfRFRfUkFXMTYsIE1FRElBX0JVU19GTVRfU0JHR1IxNl8xWDE2IH0sDQo+ID4gKwl7 IFhDU0lfRFRfUkFXMTYsIE1FRElBX0JVU19GTVRfU0dCUkcxNl8xWDE2IH0sDQo+ID4gKwl7IFhD U0lfRFRfUkFXMTYsIE1FRElBX0JVU19GTVRfU0dSQkcxNl8xWDE2IH0sDQo+ID4gKwl7IFhDU0lf RFRfUkFXMjAsIDAgfSwNCj4gPiArfTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBzdHJ1Y3Qg eGNzaTJyeHNzX3N0YXRlIC0gQ1NJLTIgUnggU3Vic3lzdGVtIGRldmljZSBzdHJ1Y3R1cmUNCj4g PiArICogQHN1YmRldjogVGhlIHY0bDIgc3ViZGV2IHN0cnVjdHVyZQ0KPiA+ICsgKiBAZm9ybWF0 OiBBY3RpdmUgVjRMMiBmb3JtYXRzIG9uIGVhY2ggcGFkDQo+ID4gKyAqIEBkZWZhdWx0X2Zvcm1h dDogRGVmYXVsdCBWNEwyIGZvcm1hdA0KPiA+ICsgKiBAZXZlbnRzOiBjb3VudGVyIGZvciBldmVu dHMNCj4gPiArICogQHZjeF9ldmVudHM6IGNvdW50ZXIgZm9yIHZjeF9ldmVudHMNCj4gPiArICog QGRldjogUGxhdGZvcm0gc3RydWN0dXJlDQo+ID4gKyAqIEByc3ViZGV2OiBSZW1vdGUgc3ViZGV2 IGNvbm5lY3RlZCB0byBzaW5rIHBhZA0KPiA+ICsgKiBAcnN0X2dwaW86IHJlc2V0IHRvIHZpZGVv X2FyZXNldG4NCj4gPiArICogQGNsa3M6IGFycmF5IG9mIGNsb2Nrcw0KPiA+ICsgKiBAaW9tZW06 IEJhc2UgYWRkcmVzcyBvZiBzdWJzeXN0ZW0NCj4gPiArICogQG1heF9udW1fbGFuZXM6IE1heGlt dW0gbnVtYmVyIG9mIGxhbmVzIHByZXNlbnQNCj4gPiArICogQGRhdGF0eXBlOiBEYXRhIHR5cGUg ZmlsdGVyDQo+ID4gKyAqIEBsb2NrOiBtdXRleCBmb3IgYWNjZXNzaW5nIHRoaXMgc3RydWN0dXJl DQo+ID4gKyAqIEBwYWRzOiBtZWRpYSBwYWRzDQo+ID4gKyAqIEBzdHJlYW1pbmc6IEZsYWcgZm9y IHN0b3Jpbmcgc3RyZWFtaW5nIHN0YXRlDQo+ID4gKyAqIEBlbmFibGVfYWN0aXZlX2xhbmVzOiBJ ZiBudW1iZXIgb2YgYWN0aXZlIGxhbmVzIGNhbiBiZSBtb2RpZmllZA0KPiA+ICsgKiBAZW5fdmN4 OiBJZiBtb3JlIHRoYW4gNCBWQyBhcmUgZW5hYmxlZA0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIHN0 cnVjdHVyZSBjb250YWlucyB0aGUgZGV2aWNlIGRyaXZlciByZWxhdGVkIHBhcmFtZXRlcnMgICov DQo+ID4gK3N0cnVjdCB4Y3NpMnJ4c3Nfc3RhdGUgew0KPiA+ICsJc3RydWN0IHY0bDJfc3ViZGV2 IHN1YmRldjsNCj4gPiArCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgZm9ybWF0Ow0KPiA+ICsJ c3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCBkZWZhdWx0X2Zvcm1hdDsNCj4gPiArCXUzMiBldmVu dHNbWENTSV9OVU1fRVZFTlRTXTsNCj4gPiArCXUzMiB2Y3hfZXZlbnRzW1hDU0lfVkNYX05VTV9F VkVOVFNdOw0KPiA+ICsJc3RydWN0IGRldmljZSAqZGV2Ow0KPiA+ICsJc3RydWN0IHY0bDJfc3Vi ZGV2ICpyc3ViZGV2Ow0KPiA+ICsJc3RydWN0IGdwaW9fZGVzYyAqcnN0X2dwaW87DQo+ID4gKwlz dHJ1Y3QgY2xrX2J1bGtfZGF0YSAqY2xrczsNCj4gPiArCXZvaWQgX19pb21lbSAqaW9tZW07DQo+ ID4gKwl1MzIgbWF4X251bV9sYW5lczsNCj4gPiArCXUzMiBkYXRhdHlwZTsNCj4gPiArCS8qIHVz ZWQgdG8gcHJvdGVjdCBhY2Nlc3MgdG8gdGhpcyBzdHJ1Y3QgKi8NCj4gPiArCXN0cnVjdCBtdXRl eCBsb2NrOw0KPiA+ICsJc3RydWN0IG1lZGlhX3BhZCBwYWRzW1hDU0lfTUVESUFfUEFEU107DQo+ ID4gKwlib29sIHN0cmVhbWluZzsNCj4gPiArCWJvb2wgZW5hYmxlX2FjdGl2ZV9sYW5lczsNCj4g PiArCWJvb2wgZW5fdmN4Ow0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVj dCBjbGtfYnVsa19kYXRhIHhjc2kycnhzc19jbGtzW10gPSB7DQo+ID4gKwl7IC5pZCA9ICJsaXRl X2FjbGsiIH0sDQo+ID4gKwl7IC5pZCA9ICJ2aWRlb19hY2xrIiB9LA0KPiA+ICt9Ow0KPiA+ICsN Cj4gPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgeGNzaTJyeHNzX3N0YXRlICogdG9feGNzaTJyeHNz c3RhdGUoc3RydWN0DQo+ID4gK3Y0bDJfc3ViZGV2ICpzdWJkZXYpIHsNCj4gPiArCXJldHVybiBj b250YWluZXJfb2Yoc3ViZGV2LCBzdHJ1Y3QgeGNzaTJyeHNzX3N0YXRlLCBzdWJkZXYpOyB9DQo+ ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBSZWdpc3RlciByZWxhdGVkIG9wZXJhdGlvbnMNCj4gPiAr ICovDQo+ID4gK3N0YXRpYyBpbmxpbmUgdTMyIHhjc2kycnhzc19yZWFkKHN0cnVjdCB4Y3NpMnJ4 c3Nfc3RhdGUgKnhjc2kycnhzcywNCj4gPiArdTMyIGFkZHIpIHsNCj4gPiArCXJldHVybiBpb3Jl YWQzMih4Y3NpMnJ4c3MtPmlvbWVtICsgYWRkcik7IH0NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxp bmUgdm9pZCB4Y3NpMnJ4c3Nfd3JpdGUoc3RydWN0IHhjc2kycnhzc19zdGF0ZSAqeGNzaTJyeHNz LCB1MzIgYWRkciwNCj4gPiArCQkJCSAgIHUzMiB2YWx1ZSkNCj4gPiArew0KPiA+ICsJaW93cml0 ZTMyKHZhbHVlLCB4Y3NpMnJ4c3MtPmlvbWVtICsgYWRkcik7IH0NCj4gPiArDQo+ID4gK3N0YXRp YyBpbmxpbmUgdm9pZCB4Y3NpMnJ4c3NfY2xyKHN0cnVjdCB4Y3NpMnJ4c3Nfc3RhdGUgKnhjc2ky cnhzcywgdTMyIGFkZHIsDQo+ID4gKwkJCQkgdTMyIGNscikNCj4gPiArew0KPiA+ICsJeGNzaTJy eHNzX3dyaXRlKHhjc2kycnhzcywgYWRkciwNCj4gPiArCQkJeGNzaTJyeHNzX3JlYWQoeGNzaTJy eHNzLCBhZGRyKSAmIH5jbHIpOyB9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgeGNz aTJyeHNzX3NldChzdHJ1Y3QgeGNzaTJyeHNzX3N0YXRlICp4Y3NpMnJ4c3MsIHUzMiBhZGRyLA0K PiA+ICsJCQkJIHUzMiBzZXQpDQo+ID4gK3sNCj4gPiArCXhjc2kycnhzc193cml0ZSh4Y3NpMnJ4 c3MsIGFkZHIsIHhjc2kycnhzc19yZWFkKHhjc2kycnhzcywgYWRkcikgfA0KPiA+ICtzZXQpOyB9 DQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG50aCBt YnVzIGZvciBhIGRhdGEgdHlwZS4NCj4gPiArICogSW4gY2FzZSBvZiBlcnJvciwgbWJ1cyBjb2Rl IHJldHVybmVkIGlzIDAuDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgdTMyIHhjc2kycnhzc19nZXRf bnRoX21idXModTMyIGR0LCB1MzIgbikgew0KPiA+ICsJdW5zaWduZWQgaW50IGk7DQo+ID4gKw0K PiA+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoeGNzaTJkdF9tYnVzX2x1dCk7IGkrKykg ew0KPiA+ICsJCWlmICh4Y3NpMmR0X21idXNfbHV0W2ldWzBdID09IGR0KSB7DQo+ID4gKwkJCWlm IChuLS0gPT0gMCkNCj4gPiArCQkJCXJldHVybiB4Y3NpMmR0X21idXNfbHV0W2ldWzFdOw0KPiA+ ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4g PiArLyogVGhpcyByZXR1cm5zIHRoZSBkYXRhIHR5cGUgZm9yIGEgbWVkaWEgYnVzIGZvcm1hdCBl bHNlIDAgKi8gc3RhdGljDQo+ID4gK3UzMiB4Y3NpMnJ4c3NfZ2V0X2R0KHUzMiBtYnVzKSB7DQo+ ID4gKwl1bnNpZ25lZCBpbnQgaTsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRSh4Y3NpMmR0X21idXNfbHV0KTsgaSsrKSB7DQo+ID4gKwkJaWYgKHhjc2kyZHRfbWJ1c19s dXRbaV1bMV0gPT0gbWJ1cykNCj4gPiArCQkJcmV0dXJuIHhjc2kyZHRfbWJ1c19sdXRbaV1bMF07 DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgKiB4Y3NpMnJ4c3Nfc29mdF9yZXNldCAtIERvZXMgYSBzb2Z0IHJlc2V0IG9mIHRo ZSBNSVBJIENTSS0yIFJ4DQo+ID4gK1N1YnN5c3RlbQ0KPiA+ICsgKiBAc3RhdGU6IFhpbGlueCBD U0ktMiBSeCBTdWJzeXN0ZW0gc3RydWN0dXJlIHBvaW50ZXINCj4gPiArICoNCj4gPiArICogQ29y ZSB0YWtlcyBsZXNzIHRoYW4gMTAwIHZpZGVvIGNsb2NrIGN5Y2xlcyB0byByZXNldC4NCj4gPiAr ICogU28gYSBsYXJnZXIgdGltZW91dCB2YWx1ZSBpcyBjaG9zZW4gZm9yIG1hcmdpbi4NCj4gPiAr ICoNCj4gPiArICogUmV0dXJuOiAwIC0gb24gc3VjY2VzcyBPUiAtRVRJTUUgaWYgcmVzZXQgdGlt ZXMgb3V0ICAqLyBzdGF0aWMgaW50DQo+ID4gK3hjc2kycnhzc19zb2Z0X3Jlc2V0KHN0cnVjdCB4 Y3NpMnJ4c3Nfc3RhdGUgKnN0YXRlKSB7DQo+ID4gKwl1MzIgdGltZW91dCA9IDEwMDA7IC8qIHVz ICovDQo+ID4gKw0KPiA+ICsJeGNzaTJyeHNzX3NldChzdGF0ZSwgWENTSV9DQ1JfT0ZGU0VULCBY Q1NJX0NDUl9TT0ZUUkVTRVQpOw0KPiA+ICsNCj4gPiArCXdoaWxlICh4Y3NpMnJ4c3NfcmVhZChz dGF0ZSwgWENTSV9DU1JfT0ZGU0VUKSAmIFhDU0lfQ1NSX1JJUENEKSB7DQo+ID4gKwkJaWYgKHRp bWVvdXQgPT0gMCkgew0KPiA+ICsJCQlkZXZfZXJyKHN0YXRlLT5kZXYsICJzb2Z0IHJlc2V0IHRp bWVkIG91dCFcbiIpOw0KPiA+ICsJCQlyZXR1cm4gLUVUSU1FOw0KPiA+ICsJCX0NCj4gPiArDQo+ ID4gKwkJdGltZW91dC0tOw0KPiA+ICsJCXVkZWxheSgxKTsNCj4gPiArCX0NCj4gPiArDQo+ID4g Kwl4Y3NpMnJ4c3NfY2xyKHN0YXRlLCBYQ1NJX0NDUl9PRkZTRVQsIFhDU0lfQ0NSX1NPRlRSRVNF VCk7DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgeGNz aTJyeHNzX2hhcmRfcmVzZXQoc3RydWN0IHhjc2kycnhzc19zdGF0ZSAqc3RhdGUpIHsNCj4gPiAr CWlmICghc3RhdGUtPnJzdF9ncGlvKQ0KPiA+ICsJCXJldHVybjsNCj4gPiArDQo+ID4gKwkvKiBt aW5pbXVtIG9mIDQwIGRwaHlfY2xrXzIwME0gY3ljbGVzICovDQo+ID4gKwlncGlvZF9zZXRfdmFs dWVfY2Fuc2xlZXAoc3RhdGUtPnJzdF9ncGlvLCAxKTsNCj4gPiArCXVzbGVlcF9yYW5nZSgxLCAy KTsNCj4gPiArCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChzdGF0ZS0+cnN0X2dwaW8sIDApOyB9 DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB4Y3NpMnJ4c3NfcmVzZXRfZXZlbnRfY291bnRlcnMo c3RydWN0IHhjc2kycnhzc19zdGF0ZQ0KPiA+ICsqc3RhdGUpIHsNCj4gPiArCXVuc2lnbmVkIGlu dCBpOw0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBYQ1NJX05VTV9FVkVOVFM7IGkrKykN Cj4gPiArCQlzdGF0ZS0+ZXZlbnRzW2ldID0gMDsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBp IDwgWENTSV9WQ1hfTlVNX0VWRU5UUzsgaSsrKQ0KPiA+ICsJCXN0YXRlLT52Y3hfZXZlbnRzW2ld ID0gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogUHJpbnQgZXZlbnQgY291bnRlcnMgKi8NCj4g PiArc3RhdGljIHZvaWQgeGNzaTJyeHNzX2xvZ19jb3VudGVycyhzdHJ1Y3QgeGNzaTJyeHNzX3N0 YXRlICpzdGF0ZSkgew0KPiA+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gc3RhdGUtPmRldjsNCj4g PiArCXVuc2lnbmVkIGludCBpOw0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBYQ1NJX05V TV9FVkVOVFM7IGkrKykgew0KPiA+ICsJCWlmIChzdGF0ZS0+ZXZlbnRzW2ldID4gMCkgew0KPiA+ ICsJCQlkZXZfaW5mbyhkZXYsICIlcyBldmVudHM6ICVkXG4iLA0KPiA+ICsJCQkJIHhjc2kycnhz c19ldmVudHNbaV0ubmFtZSwNCj4gPiArCQkJCSBzdGF0ZS0+ZXZlbnRzW2ldKTsNCj4gPiArCQl9 DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKHN0YXRlLT5lbl92Y3gpIHsNCj4gPiArCQlmb3Ig KGkgPSAwOyBpIDwgWENTSV9WQ1hfTlVNX0VWRU5UUzsgaSsrKSB7DQo+ID4gKwkJCWlmIChzdGF0 ZS0+dmN4X2V2ZW50c1tpXSA+IDApIHsNCj4gPiArCQkJCWRldl9pbmZvKGRldiwNCj4gPiArCQkJ CQkgIlZDICVkIEZyYW1lICVzIGVyciB2Y3ggZXZlbnRzOg0KPiAlZFxuIiwNCj4gPiArCQkJCQkg KGkgLyAyKSArIFhDU0lfVkNYX1NUQVJULA0KPiA+ICsJCQkJCSBpICYgMSA/ICJTeW5jIiA6ICJM ZXZlbCIsDQo+ID4gKwkJCQkJIHN0YXRlLT52Y3hfZXZlbnRzW2ldKTsNCj4gPiArCQkJfQ0KPiA+ ICsJCX0NCj4gPiArCX0NCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHhjc2kycnhz c19sb2dfc3RhdHVzIC0gTG9ncyB0aGUgc3RhdHVzIG9mIHRoZSBDU0ktMiBSZWNlaXZlcg0KPiA+ ICsgKiBAc2Q6IFBvaW50ZXIgdG8gVjRMMiBzdWJkZXZpY2Ugc3RydWN0dXJlDQo+ID4gKyAqDQo+ ID4gKyAqIFRoaXMgZnVuY3Rpb24gcHJpbnRzIHRoZSBjdXJyZW50IHN0YXR1cyBvZiBYaWxpbngg TUlQSSBDU0ktMg0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcw0KPiA+ICsg Ki8NCj4gPiArc3RhdGljIGludCB4Y3NpMnJ4c3NfbG9nX3N0YXR1cyhzdHJ1Y3QgdjRsMl9zdWJk ZXYgKnNkKSB7DQo+ID4gKwlzdHJ1Y3QgeGNzaTJyeHNzX3N0YXRlICp4Y3NpMnJ4c3MgPSB0b194 Y3NpMnJ4c3NzdGF0ZShzZCk7DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB4Y3NpMnJ4c3Mt PmRldjsNCj4gPiArCWNvbnN0IGNoYXIgKnRyID0gInRydWUiOw0KPiA+ICsJY29uc3QgY2hhciAq ZmEgPSAiZmFsc2UiOw0KPiANCj4gSSBkaWRuJ3Qgbm90aWNlIHRoaXMgaW4gdGhlIHByZXZpb3Vz IHZlcnNpb24sIGJ1dCB5b3UgY291bGQganVzdCB3cml0ZSAidHJ1ZSIgYW5kDQo+ICJmYWxzZSIg YmVsb3cuIFRoZSBjb21waWxlciBzaG91bGQgcGVyZm9ybSBzdHJpbmcgZGUtZHVwbGljYXRpb24g YXV0b21hdGljYWxseS4NCj4gDQoNCkkgaGFkIHRoaXMgYXMgYSBtYWNybyBYQ1NJX0dFVF9CSVRT RVRfU1RSIHRpbGwgdjExIGFuZCByZW1vdmVkIGluIHYxMg0KLyogTWFjcm8gdG8gcmV0dXJuICJ0 cnVlIiBvciAiZmFsc2UiIHN0cmluZyBpZiBiaXQgaXMgc2V0ICovDQojZGVmaW5lIFhDU0lfR0VU X0JJVFNFVF9TVFIodmFsLCBtYXNrKQkodmFsKSAmIChtYXNrKSA/ICJ0cnVlIiA6ICJmYWxzZSIN Cg0KSSB3aWxsIHVwZGF0ZSB0aGlzIHRvICJ0cnVlIiBhbmQgImZhbHNlIi4NCg0KPiA+ICsJdTMy IHJlZywgZGF0YTsNCj4gPiArCXVuc2lnbmVkIGludCBpLCBtYXhfdmM7DQo+ID4gKw0KPiA+ICsJ bXV0ZXhfbG9jaygmeGNzaTJyeHNzLT5sb2NrKTsNCj4gPiArDQo+ID4gKwl4Y3NpMnJ4c3NfbG9n X2NvdW50ZXJzKHhjc2kycnhzcyk7DQo+ID4gKw0KPiA+ICsJZGV2X2luZm8oZGV2LCAiKioqKiog Q29yZSBTdGF0dXMgKioqKipcbiIpOw0KPiA+ICsJZGF0YSA9IHhjc2kycnhzc19yZWFkKHhjc2ky cnhzcywgWENTSV9DU1JfT0ZGU0VUKTsNCj4gPiArCWRldl9pbmZvKGRldiwgIlNob3J0IFBhY2tl dCBGSUZPIEZ1bGwgPSAlc1xuIiwNCj4gPiArCQkgZGF0YSAmIFhDU0lfQ1NSX1NQRklGT0ZVTEwg PyB0ciA6IGZhKTsNCj4gPiArCWRldl9pbmZvKGRldiwgIlNob3J0IFBhY2tldCBGSUZPIE5vdCBF bXB0eSA9ICVzXG4iLA0KPiA+ICsJCSBkYXRhICYgWENTSV9DU1JfU1BGSUZPTkUgPyB0ciA6IGZh KTsNCj4gPiArCWRldl9pbmZvKGRldiwgIlN0cmVhbSBsaW5lIGJ1ZmZlciBmdWxsID0gJXNcbiIs DQo+ID4gKwkJIGRhdGEgJiBYQ1NJX0NTUl9TTEJGID8gdHIgOiBmYSk7DQo+ID4gKwlkZXZfaW5m byhkZXYsICJTb2Z0IHJlc2V0L0NvcmUgZGlzYWJsZSBpbiBwcm9ncmVzcyA9ICVzXG4iLA0KPiA+ ICsJCSBkYXRhICYgWENTSV9DU1JfUklQQ0QgPyB0ciA6IGZhKTsNCj4gPiArDQo+ID4gKwkvKiBD bGsgJiBMYW5lIEluZm8gICovDQo+ID4gKwlkZXZfaW5mbyhkZXYsICIqKioqKioqKiBDbG9jayBM YW5lIEluZm8gKioqKioqKioqXG4iKTsNCj4gPiArCWRhdGEgPSB4Y3NpMnJ4c3NfcmVhZCh4Y3Np MnJ4c3MsIFhDU0lfQ0xLSU5GUl9PRkZTRVQpOw0KPiA+ICsJZGV2X2luZm8oZGV2LCAiQ2xvY2sg TGFuZSBpbiBTdG9wIFN0YXRlID0gJXNcbiIsDQo+ID4gKwkJIGRhdGEgJiBYQ1NJX0NMS0lORlJf U1RPUCA/IHRyIDogZmEpOw0KPiA+ICsNCj4gPiArCWRldl9pbmZvKGRldiwgIioqKioqKioqIERh dGEgTGFuZSBJbmZvICoqKioqKioqKlxuIik7DQo+ID4gKwlkZXZfaW5mbyhkZXYsICJMYW5lXHRT b1QgRXJyb3JcdFNvVCBTeW5jIEVycm9yXHRTdG9wIFN0YXRlXG4iKTsNCj4gPiArCXJlZyA9IFhD U0lfRExYSU5GUl9PRkZTRVQ7DQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgWENTSV9NQVhETF9DT1VO VDsgaSsrKSB7DQo+ID4gKwkJZGF0YSA9IHhjc2kycnhzc19yZWFkKHhjc2kycnhzcywgcmVnKTsN Cj4gPiArDQo+ID4gKwkJZGV2X2luZm8oZGV2LCAiJWRcdCVzXHRcdCVzXHRcdCVzXG4iLCBpLA0K PiA+ICsJCQkgZGF0YSAmIFhDU0lfRExYSU5GUl9TT1RFUlIgPyB0ciA6IGZhLA0KPiA+ICsJCQkg ZGF0YSAmIFhDU0lfRExYSU5GUl9TT1RTWU5DRVJSID8gdHIgOiBmYSwNCj4gPiArCQkJIGRhdGEg JiBYQ1NJX0RMWElORlJfU1RPUCA/IHRyIDogZmEpOw0KPiA+ICsNCj4gPiArCQlyZWcgKz0gWENT SV9ORVhUUkVHX09GRlNFVDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBWaXJ0dWFsIENoYW5u ZWwgSW1hZ2UgSW5mb3JtYXRpb24gKi8NCj4gPiArCWRldl9pbmZvKGRldiwgIioqKioqKioqKiog VmlydHVhbCBDaGFubmVsIEluZm8gKioqKioqKioqKioqXG4iKTsNCj4gPiArCWRldl9pbmZvKGRl diwgIlZDXHRMaW5lIENvdW50XHRCeXRlIENvdW50XHREYXRhIFR5cGVcbiIpOw0KPiA+ICsJaWYg KHhjc2kycnhzcy0+ZW5fdmN4KQ0KPiA+ICsJCW1heF92YyA9IFhDU0lfTUFYX1ZDWDsNCj4gPiAr CWVsc2UNCj4gPiArCQltYXhfdmMgPSBYQ1NJX01BWF9WQzsNCj4gPiArDQo+ID4gKwlyZWcgPSBY Q1NJX1ZDWElORjFSX09GRlNFVDsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBtYXhfdmM7IGkrKykg ew0KPiA+ICsJCXUzMiBsaW5lX2NvdW50LCBieXRlX2NvdW50LCBkYXRhX3R5cGU7DQo+ID4gKw0K PiA+ICsJCS8qIEdldCBsaW5lIGFuZCBieXRlIGNvdW50IGZyb20gVkNYSU5GUjEgUmVnaXN0ZXIg Ki8NCj4gPiArCQlkYXRhID0geGNzaTJyeHNzX3JlYWQoeGNzaTJyeHNzLCByZWcpOw0KPiA+ICsJ CWJ5dGVfY291bnQgPSBkYXRhICYgWENTSV9WQ1hJTkYxUl9CWVRFQ09VTlQ7DQo+ID4gKwkJbGlu ZV9jb3VudCA9IGRhdGEgJiBYQ1NJX1ZDWElORjFSX0xJTkVDT1VOVDsNCj4gPiArCQlsaW5lX2Nv dW50ID4+PSBYQ1NJX1ZDWElORjFSX0xJTkVDT1VOVF9TSElGVDsNCj4gPiArDQo+ID4gKwkJLyog R2V0IGRhdGEgdHlwZSBmcm9tIFZDWElORlIyIFJlZ2lzdGVyICovDQo+ID4gKwkJcmVnICs9IFhD U0lfTkVYVFJFR19PRkZTRVQ7DQo+ID4gKwkJZGF0YSA9IHhjc2kycnhzc19yZWFkKHhjc2kycnhz cywgcmVnKTsNCj4gPiArCQlkYXRhX3R5cGUgPSBkYXRhICYgWENTSV9WQ1hJTkYyUl9EVDsNCj4g PiArDQo+ID4gKwkJZGV2X2luZm8oZGV2LCAiJWRcdCVkXHRcdCVkXHRcdDB4JXhcbiIsIGksIGxp bmVfY291bnQsDQo+ID4gKwkJCSBieXRlX2NvdW50LCBkYXRhX3R5cGUpOw0KPiA+ICsNCj4gPiAr CQkvKiBNb3ZlIHRvIG5leHQgcGFpciBvZiBWQyBJbmZvIHJlZ2lzdGVycyAqLw0KPiA+ICsJCXJl ZyArPSBYQ1NJX05FWFRSRUdfT0ZGU0VUOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCW11dGV4X3Vu bG9jaygmeGNzaTJyeHNzLT5sb2NrKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldiAqeGNzaTJyeHNzX2dldF9yZW1v dGVfc3ViZGV2KHN0cnVjdA0KPiA+ICttZWRpYV9wYWQgKmxvY2FsKSB7DQo+ID4gKwlzdHJ1Y3Qg bWVkaWFfcGFkICpyZW1vdGU7DQo+ID4gKw0KPiA+ICsJcmVtb3RlID0gbWVkaWFfZW50aXR5X3Jl bW90ZV9wYWQobG9jYWwpOw0KPiA+ICsJaWYgKCFyZW1vdGUgfHwgIWlzX21lZGlhX2VudGl0eV92 NGwyX3N1YmRldihyZW1vdGUtPmVudGl0eSkpDQo+ID4gKwkJcmV0dXJuIE5VTEw7DQo+ID4gKw0K PiA+ICsJcmV0dXJuIG1lZGlhX2VudGl0eV90b192NGwyX3N1YmRldihyZW1vdGUtPmVudGl0eSk7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgeGNzaTJyeHNzX3N0YXJ0X3N0cmVhbShz dHJ1Y3QgeGNzaTJyeHNzX3N0YXRlICpzdGF0ZSkgew0KPiA+ICsJaW50IHJldCA9IDA7DQo+ID4g Kw0KPiA+ICsJLyogZW5hYmxlIGNvcmUgKi8NCj4gPiArCXhjc2kycnhzc19zZXQoc3RhdGUsIFhD U0lfQ0NSX09GRlNFVCwgWENTSV9DQ1JfRU5BQkxFKTsNCj4gPiArDQo+ID4gKwlyZXQgPSB4Y3Np MnJ4c3Nfc29mdF9yZXNldChzdGF0ZSk7DQo+ID4gKwlpZiAocmV0IDwgMCkgew0KPiA+ICsJCXN0 YXRlLT5zdHJlYW1pbmcgPSBmYWxzZTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ ICsNCj4gPiArCS8qIGVuYWJsZSBpbnRlcnJ1cHRzICovDQo+ID4gKwl4Y3NpMnJ4c3NfY2xyKHN0 YXRlLCBYQ1NJX0dJRVJfT0ZGU0VULCBYQ1NJX0dJRVJfR0lFKTsNCj4gPiArCXhjc2kycnhzc193 cml0ZShzdGF0ZSwgWENTSV9JRVJfT0ZGU0VULCBYQ1NJX0lFUl9JTlRSX01BU0spOw0KPiA+ICsJ eGNzaTJyeHNzX3NldChzdGF0ZSwgWENTSV9HSUVSX09GRlNFVCwgWENTSV9HSUVSX0dJRSk7DQo+ ID4gKw0KPiA+ICsJc3RhdGUtPnN0cmVhbWluZyA9IHRydWU7DQo+ID4gKw0KPiA+ICsJc3RhdGUt PnJzdWJkZXYgPQ0KPiA+ICsJCXhjc2kycnhzc19nZXRfcmVtb3RlX3N1YmRldigmc3RhdGUtPnBh ZHNbWFZJUF9QQURfU0lOS10pOw0KPiA+ICsNCj4gPiArCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwo c3RhdGUtPnJzdWJkZXYsIHZpZGVvLCBzX3N0cmVhbSwgMSk7DQo+ID4gKwlpZiAocmV0KSB7DQo+ ID4gKwkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovDQo+ID4gKwkJeGNzaTJyeHNzX2NscihzdGF0 ZSwgWENTSV9JRVJfT0ZGU0VULCBYQ1NJX0lFUl9JTlRSX01BU0spOw0KPiA+ICsJCXhjc2kycnhz c19jbHIoc3RhdGUsIFhDU0lfR0lFUl9PRkZTRVQsIFhDU0lfR0lFUl9HSUUpOw0KPiA+ICsNCj4g PiArCQkvKiBkaXNhYmxlIGNvcmUgKi8NCj4gPiArCQl4Y3NpMnJ4c3NfY2xyKHN0YXRlLCBYQ1NJ X0NDUl9PRkZTRVQsIFhDU0lfQ0NSX0VOQUJMRSk7DQo+ID4gKwkJc3RhdGUtPnN0cmVhbWluZyA9 IGZhbHNlOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiByZXQ7DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyB2b2lkIHhjc2kycnhzc19zdG9wX3N0cmVhbShzdHJ1Y3QgeGNzaTJyeHNz X3N0YXRlICpzdGF0ZSkgew0KPiA+ICsJdjRsMl9zdWJkZXZfY2FsbChzdGF0ZS0+cnN1YmRldiwg dmlkZW8sIHNfc3RyZWFtLCAwKTsNCj4gPiArDQo+ID4gKwkvKiBkaXNhYmxlIGludGVycnVwdHMg Ki8NCj4gPiArCXhjc2kycnhzc19jbHIoc3RhdGUsIFhDU0lfSUVSX09GRlNFVCwgWENTSV9JRVJf SU5UUl9NQVNLKTsNCj4gPiArCXhjc2kycnhzc19jbHIoc3RhdGUsIFhDU0lfR0lFUl9PRkZTRVQs IFhDU0lfR0lFUl9HSUUpOw0KPiA+ICsNCj4gPiArCS8qIGRpc2FibGUgY29yZSAqLw0KPiA+ICsJ eGNzaTJyeHNzX2NscihzdGF0ZSwgWENTSV9DQ1JfT0ZGU0VULCBYQ1NJX0NDUl9FTkFCTEUpOw0K PiA+ICsJc3RhdGUtPnN0cmVhbWluZyA9IGZhbHNlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioN Cj4gPiArICogeGNzaTJyeHNzX2lycV9oYW5kbGVyIC0gSW50ZXJydXB0IGhhbmRsZXIgZm9yIENT SS0yDQo+ID4gKyAqIEBpcnE6IElSUSBudW1iZXINCj4gPiArICogQGRhdGE6IFBvaW50ZXIgdG8g ZGV2aWNlIHN0YXRlDQo+ID4gKyAqDQo+ID4gKyAqIEluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwg YSBsaXN0IG9mIGV2ZW50IGNvdW50ZXJzIGFyZSB1cGRhdGVkIGZvcg0KPiA+ICsgKiBjb3JyZXNw b25kaW5nIGludGVycnVwdHMuIFRoaXMgaXMgdXNlZnVsIHRvIGdldCBzdGF0dXMgLyBkZWJ1Zy4N Cj4gPiArICoNCj4gPiArICogUmV0dXJuOiBJUlFfSEFORExFRCBhZnRlciBoYW5kbGluZyBpbnRl cnJ1cHRzICAqLyBzdGF0aWMNCj4gPiAraXJxcmV0dXJuX3QgeGNzaTJyeHNzX2lycV9oYW5kbGVy KGludCBpcnEsIHZvaWQgKmRhdGEpIHsNCj4gPiArCXN0cnVjdCB4Y3NpMnJ4c3Nfc3RhdGUgKnN0 YXRlID0gKHN0cnVjdCB4Y3NpMnJ4c3Nfc3RhdGUgKilkYXRhOw0KPiA+ICsJc3RydWN0IGRldmlj ZSAqZGV2ID0gc3RhdGUtPmRldjsNCj4gPiArCXUzMiBzdGF0dXM7DQo+ID4gKw0KPiA+ICsJc3Rh dHVzID0geGNzaTJyeHNzX3JlYWQoc3RhdGUsIFhDU0lfSVNSX09GRlNFVCkgJg0KPiBYQ1NJX0lT Ul9BTExJTlRSX01BU0s7DQo+ID4gKwl4Y3NpMnJ4c3Nfd3JpdGUoc3RhdGUsIFhDU0lfSVNSX09G RlNFVCwgc3RhdHVzKTsNCj4gPiArDQo+ID4gKwkvKiBSZWNlaXZlZCBhIHNob3J0IHBhY2tldCAq Lw0KPiA+ICsJaWYgKHN0YXR1cyAmIFhDU0lfSVNSX1NQRklGT05FKSB7DQo+ID4gKwkJdTMyIGNv dW50ID0gMDsNCj4gPiArDQo+ID4gKwkJLyoNCj4gPiArCQkgKiBEcmFpbiBnZW5lcmljIHNob3J0 IHBhY2tldCBGSUZPIGJ5IHJlYWRpbmcgbWF4IDMxDQo+ID4gKwkJICogKGZpZm8gZGVwdGgpIHNo b3J0IHBhY2tldHMgZnJvbSBmaWZvIG9yIHRpbGwgZmlmbyBpcyBlbXB0eS4NCj4gPiArCQkgKi8N Cj4gPiArCQlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBYQ1NJX1NQS1RfRklGT19ERVBUSDsgKytj b3VudCkgew0KPiA+ICsJCQl1MzIgc3BmaWZvc3RhdCwgc3BrdDsNCj4gPiArDQo+ID4gKwkJCXNw a3QgPSB4Y3NpMnJ4c3NfcmVhZChzdGF0ZSwgWENTSV9TUEtUUl9PRkZTRVQpOw0KPiA+ICsJCQlk ZXZfZGJnKGRldiwgIlNob3J0IHBhY2tldCA9IDB4JTA4eFxuIiwgc3BrdCk7DQo+ID4gKwkJCXNw Zmlmb3N0YXQgPSB4Y3NpMnJ4c3NfcmVhZChzdGF0ZSwgWENTSV9JU1JfT0ZGU0VUKTsNCj4gPiAr CQkJc3BmaWZvc3RhdCAmPSBYQ1NJX0lTUl9TUEZJRk9ORTsNCj4gPiArCQkJaWYgKCFzcGZpZm9z dGF0KQ0KPiA+ICsJCQkJYnJlYWs7DQo+ID4gKwkJCXhjc2kycnhzc193cml0ZShzdGF0ZSwgWENT SV9JU1JfT0ZGU0VULCBzcGZpZm9zdGF0KTsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ ICsJLyogU2hvcnQgcGFja2V0IEZJRk8gb3ZlcmZsb3cgKi8NCj4gPiArCWlmIChzdGF0dXMgJiBY Q1NJX0lTUl9TUEZJRk9GKQ0KPiA+ICsJCWRldl9kYmdfcmF0ZWxpbWl0ZWQoZGV2LCAiU2hvcnQg cGFja2V0IEZJRk8gb3ZlcmZsb3dlZFxuIik7DQo+ID4gKw0KPiA+ICsJLyoNCj4gPiArCSAqIFN0 cmVhbSBsaW5lIGJ1ZmZlciBmdWxsDQo+ID4gKwkgKiBUaGlzIG1lYW5zIHRoZXJlIGlzIGEgYmFj a3ByZXNzdXJlIGZyb20gZG93bnN0cmVhbSBJUA0KPiA+ICsJICovDQo+ID4gKwlpZiAoc3RhdHVz ICYgWENTSV9JU1JfU0xCRikgew0KPiA+ICsJCWRldl9hbGVydF9yYXRlbGltaXRlZChkZXYsICJT dHJlYW0gTGluZSBCdWZmZXIgRnVsbCFcbiIpOw0KPiA+ICsNCj4gPiArCQkvKiBkaXNhYmxlIGlu dGVycnVwdHMgKi8NCj4gPiArCQl4Y3NpMnJ4c3NfY2xyKHN0YXRlLCBYQ1NJX0lFUl9PRkZTRVQs IFhDU0lfSUVSX0lOVFJfTUFTSyk7DQo+ID4gKwkJeGNzaTJyeHNzX2NscihzdGF0ZSwgWENTSV9H SUVSX09GRlNFVCwgWENTSV9HSUVSX0dJRSk7DQo+ID4gKw0KPiA+ICsJCS8qIGRpc2FibGUgY29y ZSAqLw0KPiA+ICsJCXhjc2kycnhzc19jbHIoc3RhdGUsIFhDU0lfQ0NSX09GRlNFVCwgWENTSV9D Q1JfRU5BQkxFKTsNCj4gPiArCQlzdGF0ZS0+c3RyZWFtaW5nID0gZmFsc2U7DQo+IA0KPiBJZiB5 b3Ugc2V0IHN0cmVhbWluZyB0byBmYWxzZSwgYSBsYXRlciBjYWxsIHRvIHhjc2kycnhzc19zX3N0 cmVhbSgwKSB3aWxsIGNvbnNpZGVyDQo+IHRoYXQgdGhlIHN0cmVhbSBpcyBhbHJlYWR5IHN0b3Bw ZWQsIGFuZCBza2lwIGNhbGxpbmcNCj4geGNzaTJyeHNzX3N0b3Bfc3RyZWFtKCkgYW5kIHhjc2ky cnhzc19oYXJkX3Jlc2V0KCkuIE5vdyB0aGF0IHlvdSBoYXZlDQo+IGRyb3BwZWQgdGhlIGhhcmQg cmVzZXQgZnJvbSB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIHdlIG5lZWQgdG8gcmVseSBvbiBpdCBi ZWluZw0KPiBjYWxsZWQgYXQgc3RyZWFtIHN0b3AgdGltZS4gU2hvdWxkIHlvdSBqdXN0IGRyb3Ag dGhlIGxpbmUgaGVyZSA/DQo+IA0KDQpZZXMgSSBjYW4gZHJvcCB0aGUgbGluZSAic3RhdGUtPnN0 cmVhbWluZyA9IGZhbHNlIiBoZXJlIGluIG5leHQgdmVyc2lvbi4NClRoZSBjb21tZW50IGJlbG93 IHNob3VsZCBndWlkZSB0aGUgdXNlciB0byBzdG9wIHN0cmVhbWluZyBpbiBzdHJlYW0gbGluZSBi dWZmZXIgZnVsbCBjYXNlLg0KDQo+ID4gKw0KPiA+ICsJCS8qDQo+ID4gKwkJICogVGhlIElQIG5l ZWRzIHRvIGJlIGhhcmQgcmVzZXQgYmVmb3JlIGl0IGNhbiBiZSB1c2VkIG5vdy4NCj4gPiArCQkg KiBUaGlzIHdpbGwgYmUgZG9uZSBpbiBzdHJlYW1vZmYuDQo+ID4gKwkJICovDQo+ID4gKw0KPiA+ ICsJCS8qDQo+ID4gKwkJICogVE9ETzogTm90aWZ5IHRoZSB3aG9sZSBwaXBlbGluZSB3aXRoIHY0 bDJfc3ViZGV2X25vdGlmeSgpDQo+IHRvDQo+ID4gKwkJICogaW5mb3JtIHVzZXJzcGFjZS4NCj4g PiArCQkgKi8NCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBJbmNyZW1lbnQgZXZlbnQgY291bnRl cnMgKi8NCj4gPiArCWlmIChzdGF0dXMgJiBYQ1NJX0lTUl9BTExJTlRSX01BU0spIHsNCj4gPiAr CQl1bnNpZ25lZCBpbnQgaTsNCj4gPiArDQo+ID4gKwkJZm9yIChpID0gMDsgaSA8IFhDU0lfTlVN X0VWRU5UUzsgaSsrKSB7DQo+ID4gKwkJCWlmICghKHN0YXR1cyAmIHhjc2kycnhzc19ldmVudHNb aV0ubWFzaykpDQo+ID4gKwkJCQljb250aW51ZTsNCj4gPiArCQkJc3RhdGUtPmV2ZW50c1tpXSsr Ow0KPiA+ICsJCQlkZXZfZGJnX3JhdGVsaW1pdGVkKGRldiwgIiVzOiAldVxuIiwNCj4gPiArCQkJ CQkgICAgeGNzaTJyeHNzX2V2ZW50c1tpXS5uYW1lLA0KPiA+ICsJCQkJCSAgICBzdGF0ZS0+ZXZl bnRzW2ldKTsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCWlmIChzdGF0dXMgJiBYQ1NJX0lTUl9W Q1hGRSAmJiBzdGF0ZS0+ZW5fdmN4KSB7DQo+ID4gKwkJCXUzMiB2Y3hzdGF0dXM7DQo+ID4gKw0K PiA+ICsJCQl2Y3hzdGF0dXMgPSB4Y3NpMnJ4c3NfcmVhZChzdGF0ZSwgWENTSV9WQ1hSX09GRlNF VCk7DQo+ID4gKwkJCXZjeHN0YXR1cyAmPSBYQ1NJX1ZDWFJfVkNFUlI7DQo+ID4gKwkJCWZvciAo aSA9IDA7IGkgPCBYQ1NJX1ZDWF9OVU1fRVZFTlRTOyBpKyspIHsNCj4gPiArCQkJCWlmICghKHZj eHN0YXR1cyAmICgxIDw8IGkpKSkNCj4gPiArCQkJCQljb250aW51ZTsNCj4gPiArCQkJCXN0YXRl LT52Y3hfZXZlbnRzW2ldKys7DQo+ID4gKwkJCX0NCj4gPiArCQkJeGNzaTJyeHNzX3dyaXRlKHN0 YXRlLCBYQ1NJX1ZDWFJfT0ZGU0VULCB2Y3hzdGF0dXMpOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4g PiArDQo+ID4gKwlyZXR1cm4gSVJRX0hBTkRMRUQ7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0K PiA+ICsgKiB4Y3NpMnJ4c3Nfc19zdHJlYW0gLSBJdCBpcyB1c2VkIHRvIHN0YXJ0L3N0b3AgdGhl IHN0cmVhbWluZy4NCj4gPiArICogQHNkOiBWNEwyIFN1YiBkZXZpY2UNCj4gPiArICogQGVuYWJs ZTogRmxhZyAoVHJ1ZSAvIEZhbHNlKQ0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIGNv bnRyb2xzIHRoZSBzdGFydCBvciBzdG9wIG9mIHN0cmVhbWluZyBmb3IgdGhlDQo+ID4gKyAqIFhp bGlueCBNSVBJIENTSS0yIFJ4IFN1YnN5c3RlbS4NCj4gPiArICoNCj4gPiArICogUmV0dXJuOiAw IG9uIHN1Y2Nlc3MsIGVycm9ycyBvdGhlcndpc2UgICovIHN0YXRpYyBpbnQNCj4gPiAreGNzaTJy eHNzX3Nfc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUpIHsNCj4gPiAr CXN0cnVjdCB4Y3NpMnJ4c3Nfc3RhdGUgKnhjc2kycnhzcyA9IHRvX3hjc2kycnhzc3N0YXRlKHNk KTsNCj4gPiArCWludCByZXQgPSAwOw0KPiA+ICsNCj4gPiArCW11dGV4X2xvY2soJnhjc2kycnhz cy0+bG9jayk7DQo+ID4gKw0KPiA+ICsJaWYgKGVuYWJsZSA9PSB4Y3NpMnJ4c3MtPnN0cmVhbWlu ZykNCj4gPiArCQlnb3RvIHN0cmVhbV9kb25lOw0KPiA+ICsNCj4gPiArCWlmIChlbmFibGUpIHsN Cj4gPiArCQl4Y3NpMnJ4c3NfcmVzZXRfZXZlbnRfY291bnRlcnMoeGNzaTJyeHNzKTsNCj4gPiAr CQlyZXQgPSB4Y3NpMnJ4c3Nfc3RhcnRfc3RyZWFtKHhjc2kycnhzcyk7DQo+ID4gKwl9IGVsc2Ug ew0KPiA+ICsJCXhjc2kycnhzc19zdG9wX3N0cmVhbSh4Y3NpMnJ4c3MpOw0KPiA+ICsJCXhjc2ky cnhzc19oYXJkX3Jlc2V0KHhjc2kycnhzcyk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICtzdHJlYW1f ZG9uZToNCj4gPiArCW11dGV4X3VubG9jaygmeGNzaTJyeHNzLT5sb2NrKTsNCj4gPiArCXJldHVy biByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1l Zm10ICoNCj4gPiArX194Y3NpMnJ4c3NfZ2V0X3BhZF9mb3JtYXQoc3RydWN0IHhjc2kycnhzc19z dGF0ZSAqeGNzaTJyeHNzLA0KPiA+ICsJCQkgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX2NvbmZp ZyAqY2ZnLA0KPiA+ICsJCQkgICB1bnNpZ25lZCBpbnQgcGFkLCB1MzIgd2hpY2gpDQo+ID4gK3sN Cj4gPiArCXN3aXRjaCAod2hpY2gpIHsNCj4gPiArCWNhc2UgVjRMMl9TVUJERVZfRk9STUFUX1RS WToNCj4gPiArCQlyZXR1cm4gdjRsMl9zdWJkZXZfZ2V0X3RyeV9mb3JtYXQoJnhjc2kycnhzcy0+ c3ViZGV2LCBjZmcsDQo+IHBhZCk7DQo+ID4gKwljYXNlIFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJ VkU6DQo+ID4gKwkJcmV0dXJuICZ4Y3NpMnJ4c3MtPmZvcm1hdDsNCj4gPiArCWRlZmF1bHQ6DQo+ ID4gKwkJcmV0dXJuIE5VTEw7DQo+ID4gKwl9DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ ICsgKiB4Y3NpMnJ4c3NfaW5pdF9jZmcgLSBJbml0aWFsaXNlIHRoZSBwYWQgZm9ybWF0IGNvbmZp ZyB0byBkZWZhdWx0DQo+ID4gKyAqIEBzZDogUG9pbnRlciB0byBWNEwyIFN1YiBkZXZpY2Ugc3Ry dWN0dXJlDQo+ID4gKyAqIEBjZmc6IFBvaW50ZXIgdG8gc3ViIGRldmljZSBwYWQgaW5mb3JtYXRp b24gc3RydWN0dXJlDQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBp bml0aWFsaXplIHRoZSBwYWQgZm9ybWF0IHdpdGggdGhlDQo+ID4gK2RlZmF1bHQNCj4gPiArICog dmFsdWVzLg0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcw0KPiA+ICsgKi8N Cj4gPiArc3RhdGljIGludCB4Y3NpMnJ4c3NfaW5pdF9jZmcoc3RydWN0IHY0bDJfc3ViZGV2ICpz ZCwNCj4gPiArCQkJICAgICAgc3RydWN0IHY0bDJfc3ViZGV2X3BhZF9jb25maWcgKmNmZykgew0K PiA+ICsJc3RydWN0IHhjc2kycnhzc19zdGF0ZSAqeGNzaTJyeHNzID0gdG9feGNzaTJyeHNzc3Rh dGUoc2QpOw0KPiA+ICsJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqZm9ybWF0Ow0KPiA+ICsJ dW5zaWduZWQgaW50IGk7DQo+ID4gKw0KPiA+ICsJbXV0ZXhfbG9jaygmeGNzaTJyeHNzLT5sb2Nr KTsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBYQ1NJX01FRElBX1BBRFM7IGkrKykgew0KPiA+ICsJ CWZvcm1hdCA9IHY0bDJfc3ViZGV2X2dldF90cnlfZm9ybWF0KHNkLCBjZmcsIGkpOw0KPiA+ICsJ CSpmb3JtYXQgPSB4Y3NpMnJ4c3MtPmRlZmF1bHRfZm9ybWF0Ow0KPiA+ICsJfQ0KPiA+ICsJbXV0 ZXhfdW5sb2NrKCZ4Y3NpMnJ4c3MtPmxvY2spOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogeGNzaTJyeHNzX2dldF9mb3JtYXQgLSBHZXQg dGhlIHBhZCBmb3JtYXQNCj4gPiArICogQHNkOiBQb2ludGVyIHRvIFY0TDIgU3ViIGRldmljZSBz dHJ1Y3R1cmUNCj4gPiArICogQGNmZzogUG9pbnRlciB0byBzdWIgZGV2aWNlIHBhZCBpbmZvcm1h dGlvbiBzdHJ1Y3R1cmUNCj4gPiArICogQGZtdDogUG9pbnRlciB0byBwYWQgbGV2ZWwgbWVkaWEg YnVzIGZvcm1hdA0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZ2V0 IHRoZSBwYWQgZm9ybWF0IGluZm9ybWF0aW9uLg0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46IDAg b24gc3VjY2Vzcw0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCB4Y3NpMnJ4c3NfZ2V0X2Zvcm1h dChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLA0KPiA+ICsJCQkJc3RydWN0IHY0bDJfc3ViZGV2X3Bh ZF9jb25maWcgKmNmZywNCj4gPiArCQkJCXN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgKmZtdCkN Cj4gPiArew0KPiA+ICsJc3RydWN0IHhjc2kycnhzc19zdGF0ZSAqeGNzaTJyeHNzID0gdG9feGNz aTJyeHNzc3RhdGUoc2QpOw0KPiA+ICsNCj4gPiArCW11dGV4X2xvY2soJnhjc2kycnhzcy0+bG9j ayk7DQo+ID4gKwlmbXQtPmZvcm1hdCA9ICpfX3hjc2kycnhzc19nZXRfcGFkX2Zvcm1hdCh4Y3Np MnJ4c3MsIGNmZywgZm10LT5wYWQsDQo+ID4gKwkJCQkJCSAgZm10LT53aGljaCk7DQo+ID4gKwlt dXRleF91bmxvY2soJnhjc2kycnhzcy0+bG9jayk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiB4Y3NpMnJ4c3Nfc2V0X2Zvcm1hdCAtIFRo aXMgaXMgdXNlZCB0byBzZXQgdGhlIHBhZCBmb3JtYXQNCj4gPiArICogQHNkOiBQb2ludGVyIHRv IFY0TDIgU3ViIGRldmljZSBzdHJ1Y3R1cmUNCj4gPiArICogQGNmZzogUG9pbnRlciB0byBzdWIg ZGV2aWNlIHBhZCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUNCj4gPiArICogQGZtdDogUG9pbnRlciB0 byBwYWQgbGV2ZWwgbWVkaWEgYnVzIGZvcm1hdA0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIGZ1bmN0 aW9uIGlzIHVzZWQgdG8gc2V0IHRoZSBwYWQgZm9ybWF0LiBTaW5jZSB0aGUgcGFkIGZvcm1hdA0K PiA+ICtpcyBmaXhlZA0KPiA+ICsgKiBpbiBoYXJkd2FyZSwgaXQgY2FuJ3QgYmUgbW9kaWZpZWQg b24gcnVuIHRpbWUuIFNvIHdoZW4gYSBmb3JtYXQNCj4gPiArc2V0IGlzDQo+ID4gKyAqIHJlcXVl c3RlZCBieSBhcHBsaWNhdGlvbiwgYWxsIHBhcmFtZXRlcnMgZXhjZXB0IHRoZSBmb3JtYXQgdHlw ZSBpcw0KPiA+ICtzYXZlZA0KPiA+ICsgKiBmb3IgdGhlIHBhZCBhbmQgdGhlIG9yaWdpbmFsIHBh ZCBmb3JtYXQgaXMgc2VudCBiYWNrIHRvIHRoZSBhcHBsaWNhdGlvbi4NCj4gPiArICoNCj4gPiAr ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MNCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQgeGNzaTJy eHNzX3NldF9mb3JtYXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwNCj4gPiArCQkJCXN0cnVjdCB2 NGwyX3N1YmRldl9wYWRfY29uZmlnICpjZmcsDQo+ID4gKwkJCQlzdHJ1Y3QgdjRsMl9zdWJkZXZf Zm9ybWF0ICpmbXQpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCB4Y3NpMnJ4c3Nfc3RhdGUgKnhjc2ky cnhzcyA9IHRvX3hjc2kycnhzc3N0YXRlKHNkKTsNCj4gPiArCXN0cnVjdCB2NGwyX21idXNfZnJh bWVmbXQgKl9fZm9ybWF0Ow0KPiA+ICsJdTMyIGR0Ow0KPiA+ICsNCj4gPiArCS8qIG9ubHkgc2lu ayBwYWQgZm9ybWF0IGNhbiBiZSB1cGRhdGVkICovDQo+ID4gKwltdXRleF9sb2NrKCZ4Y3NpMnJ4 c3MtPmxvY2spOw0KPiA+ICsNCj4gPiArCS8qDQo+ID4gKwkgKiBPbmx5IHRoZSBmb3JtYXQtPmNv ZGUgcGFyYW1ldGVyIG1hdHRlcnMgZm9yIENTSSBhcyB0aGUNCj4gPiArCSAqIENTSSBmb3JtYXQg Y2Fubm90IGJlIGNoYW5nZWQgYXQgcnVudGltZS4NCj4gPiArCSAqIEVuc3VyZSB0aGF0IGZvcm1h dCB0byBzZXQgaXMgY29waWVkIHRvIG92ZXIgdG8gQ1NJIHBhZCBmb3JtYXQNCj4gPiArCSAqLw0K PiA+ICsJX19mb3JtYXQgPSBfX3hjc2kycnhzc19nZXRfcGFkX2Zvcm1hdCh4Y3NpMnJ4c3MsIGNm ZywNCj4gPiArCQkJCQkgICAgICBmbXQtPnBhZCwgZm10LT53aGljaCk7DQo+ID4gKw0KPiA+ICsJ aWYgKGZtdC0+cGFkID09IFhWSVBfUEFEX1NPVVJDRSkgew0KPiA+ICsJCWZtdC0+Zm9ybWF0ID0g Kl9fZm9ybWF0Ow0KPiA+ICsJCW11dGV4X3VubG9jaygmeGNzaTJyeHNzLT5sb2NrKTsNCj4gPiAr CQlyZXR1cm4gMDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKg0KPiA+ICsJICogUkFXOCBpcyBz dXBwb3J0ZWQgaW4gYWxsIGRhdGF0eXBlcy4gU28gaWYgcmVxdWVzdGVkIG1lZGlhIGJ1cw0KPiBm b3JtYXQNCj4gPiArCSAqIGlzIG9mIFJBVzggdHlwZSwgdGhlbiBhbGxvdyB0byBiZSBzZXQuIElu IGNhc2UgY29yZSBpcyBjb25maWd1cmVkIHRvDQo+ID4gKwkgKiBvdGhlciBSQVcsIFlVVjQyMiA4 LzEwIG9yIFJHQjg4OCwgc2V0IGFwcHJvcHJpYXRlIG1lZGlhIGJ1cw0KPiBmb3JtYXQuDQo+ID4g KwkgKi8NCj4gPiArCWR0ID0geGNzaTJyeHNzX2dldF9kdChmbXQtPmZvcm1hdC5jb2RlKTsNCj4g PiArCWlmIChkdCAhPSB4Y3NpMnJ4c3MtPmRhdGF0eXBlICYmIGR0ICE9IFhDU0lfRFRfUkFXOCkg ew0KPiA+ICsJCWRldl9kYmcoeGNzaTJyeHNzLT5kZXYsICJVbnN1cHBvcnRlZCBtZWRpYSBidXMg Zm9ybWF0Iik7DQo+ID4gKwkJLyogc2V0IHRoZSBkZWZhdWx0IGZvcm1hdCBmb3IgdGhlIGRhdGEg dHlwZSAqLw0KPiA+ICsJCWZtdC0+Zm9ybWF0LmNvZGUgPSB4Y3NpMnJ4c3NfZ2V0X250aF9tYnVz KHhjc2kycnhzcy0NCj4gPmRhdGF0eXBlLA0KPiA+ICsJCQkJCQkJICAwKTsNCj4gPiArCX0NCj4g PiArDQo+ID4gKwkqX19mb3JtYXQgPSBmbXQtPmZvcm1hdDsNCj4gPiArCW11dGV4X3VubG9jaygm eGNzaTJyeHNzLT5sb2NrKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArLyoNCj4gPiArICogeGNzaTJyeHNzX2VudW1fbWJ1c19jb2RlIC0gSGFuZGxlIHBpeGVs IGZvcm1hdCBlbnVtZXJhdGlvbg0KPiA+ICsgKiBAc2QgOiBwb2ludGVyIHRvIHY0bDIgc3ViZGV2 IHN0cnVjdHVyZQ0KPiA+ICsgKiBAY2ZnOiBWNEwyIHN1YmRldiBwYWQgY29uZmlndXJhdGlvbg0K PiA+ICsgKiBAY29kZSA6IHBvaW50ZXIgdG8gdjRsMl9zdWJkZXZfbWJ1c19jb2RlX2VudW0gc3Ry dWN0dXJlDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjogLUVJTlZBTCBvciB6ZXJvIG9uIHN1Y2Nl c3MgICovIGludA0KPiA+ICt4Y3NpMnJ4c3NfZW51bV9tYnVzX2NvZGUoc3RydWN0IHY0bDJfc3Vi ZGV2ICpzZCwNCj4gPiArCQkJICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX2NvbmZpZyAqY2Zn LA0KPiA+ICsJCQkgICAgIHN0cnVjdCB2NGwyX3N1YmRldl9tYnVzX2NvZGVfZW51bSAqY29kZSkN Cj4gDQo+IEFzIGNvbW1lbnRlZCBieSB0aGUga2J1aWxkIGJvdCwgdGhpcyBmdW5jdGlvbiBzaG91 bGQgYmUgc3RhdGljLg0KDQpZZXMgSSB3aWxsIHVwZGF0ZSB0aGlzIGluIG5leHQgdmVyc2lvbi4N Cg0KPiANCj4gUmV2aWV3ZWQtYnk6IExhdXJlbnQgUGluY2hhcnQgPGxhdXJlbnQucGluY2hhcnRA aWRlYXNvbmJvYXJkLmNvbT4NCj4gDQo+IEdvb2QgdG8gZ28gOi0pDQo+IA0KDQpHcmVhdCEg8J+Y iiANCg0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgeGNzaTJyeHNzX3N0YXRlICpzdGF0ZSA9IHRvX3hj c2kycnhzc3N0YXRlKHNkKTsNCj4gPiArCXUzMiBkdCwgbjsNCj4gPiArCWludCByZXQgPSAwOw0K PiA+ICsNCj4gPiArCS8qIFJBVzggZHQgcGFja2V0cyBhcmUgYXZhaWxhYmxlIGluIGFsbCBEVCBj b25maWd1cmF0aW9ucyAqLw0KPiA+ICsJaWYgKGNvZGUtPmluZGV4IDwgNCkgew0KPiA+ICsJCW4g PSBjb2RlLT5pbmRleDsNCj4gPiArCQlkdCA9IFhDU0lfRFRfUkFXODsNCj4gPiArCX0gZWxzZSBp ZiAoc3RhdGUtPmRhdGF0eXBlICE9IFhDU0lfRFRfUkFXOCkgew0KPiA+ICsJCW4gPSBjb2RlLT5p bmRleCAtIDQ7DQo+ID4gKwkJZHQgPSBzdGF0ZS0+ZGF0YXR5cGU7DQo+ID4gKwl9IGVsc2Ugew0K PiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWNvZGUtPmNvZGUg PSB4Y3NpMnJ4c3NfZ2V0X250aF9tYnVzKGR0LCBuKTsNCj4gPiArCWlmICghY29kZS0+Y29kZSkN Cj4gPiArCQlyZXQgPSAtRUlOVkFMOw0KPiA+ICsNCj4gPiArCXJldHVybiByZXQ7DQo+ID4gK30N Cj4gPiArDQo+ID4gKy8qDQo+ID4gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+ICstLS0tLS0tLQ0KPiA+ICsg KiBNZWRpYSBPcGVyYXRpb25zDQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBtZWRpYV9lbnRpdHlfb3BlcmF0aW9ucyB4Y3NpMnJ4c3NfbWVkaWFfb3BzID0gew0KPiA+ ICsJLmxpbmtfdmFsaWRhdGUgPSB2NGwyX3N1YmRldl9saW5rX3ZhbGlkYXRlIH07DQo+ID4gKw0K PiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHhjc2kycnhzc19j b3JlX29wcyA9IHsNCj4gPiArCS5sb2dfc3RhdHVzID0geGNzaTJyeHNzX2xvZ19zdGF0dXMsDQo+ ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVv X29wcyB4Y3NpMnJ4c3NfdmlkZW9fb3BzID0gew0KPiA+ICsJLnNfc3RyZWFtID0geGNzaTJyeHNz X3Nfc3RyZWFtDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJf c3ViZGV2X3BhZF9vcHMgeGNzaTJyeHNzX3BhZF9vcHMgPSB7DQo+ID4gKwkuaW5pdF9jZmcgPSB4 Y3NpMnJ4c3NfaW5pdF9jZmcsDQo+ID4gKwkuZ2V0X2ZtdCA9IHhjc2kycnhzc19nZXRfZm9ybWF0 LA0KPiA+ICsJLnNldF9mbXQgPSB4Y3NpMnJ4c3Nfc2V0X2Zvcm1hdCwNCj4gPiArCS5lbnVtX21i dXNfY29kZSA9IHhjc2kycnhzc19lbnVtX21idXNfY29kZSwNCj4gPiArCS5saW5rX3ZhbGlkYXRl ID0gdjRsMl9zdWJkZXZfbGlua192YWxpZGF0ZV9kZWZhdWx0LA0KPiA+ICt9Ow0KPiA+ICsNCj4g PiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgeGNzaTJyeHNzX29wcyA9IHsN Cj4gPiArCS5jb3JlID0gJnhjc2kycnhzc19jb3JlX29wcywNCj4gPiArCS52aWRlbyA9ICZ4Y3Np MnJ4c3NfdmlkZW9fb3BzLA0KPiA+ICsJLnBhZCA9ICZ4Y3NpMnJ4c3NfcGFkX29wcw0KPiA+ICt9 Ow0KPiA+ICsNCj4gPiArc3RhdGljIGludCB4Y3NpMnJ4c3NfcGFyc2Vfb2Yoc3RydWN0IHhjc2ky cnhzc19zdGF0ZSAqeGNzaTJyeHNzKSB7DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB4Y3Np MnJ4c3MtPmRldjsNCj4gPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IGRldi0+b2Zfbm9k ZTsNCj4gPiArDQo+ID4gKwlzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZXA7DQo+ID4gKwlzdHJ1Y3Qg djRsMl9md25vZGVfZW5kcG9pbnQgdmVwID0gew0KPiA+ICsJCS5idXNfdHlwZSA9IFY0TDJfTUJV U19DU0kyX0RQSFkNCj4gPiArCX07DQo+ID4gKwlib29sIGVuX2NzaV92MjAsIHZmYjsNCj4gPiAr CWludCByZXQ7DQo+ID4gKw0KPiA+ICsJZW5fY3NpX3YyMCA9IG9mX3Byb3BlcnR5X3JlYWRfYm9v bChub2RlLCAieGxueCxlbi1jc2ktdjItMCIpOw0KPiA+ICsJaWYgKGVuX2NzaV92MjApDQo+ID4g KwkJeGNzaTJyeHNzLT5lbl92Y3ggPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobm9kZSwgInhsbngs ZW4tDQo+IHZjeCIpOw0KPiA+ICsNCj4gPiArCXhjc2kycnhzcy0+ZW5hYmxlX2FjdGl2ZV9sYW5l cyA9DQo+ID4gKwkJb2ZfcHJvcGVydHlfcmVhZF9ib29sKG5vZGUsICJ4bG54LGVuLWFjdGl2ZS1s YW5lcyIpOw0KPiA+ICsNCj4gPiArCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJ4 bG54LGNzaS1weGwtZm9ybWF0IiwNCj4gPiArCQkJCSAgICZ4Y3NpMnJ4c3MtPmRhdGF0eXBlKTsN Cj4gPiArCWlmIChyZXQgPCAwKSB7DQo+ID4gKwkJZGV2X2VycihkZXYsICJtaXNzaW5nIHhsbngs Y3NpLXB4bC1mb3JtYXQgcHJvcGVydHlcbiIpOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9 DQo+ID4gKw0KPiA+ICsJc3dpdGNoICh4Y3NpMnJ4c3MtPmRhdGF0eXBlKSB7DQo+ID4gKwljYXNl IFhDU0lfRFRfWVVWNDIyOEI6DQo+ID4gKwljYXNlIFhDU0lfRFRfUkdCNDQ0Og0KPiA+ICsJY2Fz ZSBYQ1NJX0RUX1JHQjU1NToNCj4gPiArCWNhc2UgWENTSV9EVF9SR0I1NjU6DQo+ID4gKwljYXNl IFhDU0lfRFRfUkdCNjY2Og0KPiA+ICsJY2FzZSBYQ1NJX0RUX1JHQjg4ODoNCj4gPiArCWNhc2Ug WENTSV9EVF9SQVc2Og0KPiA+ICsJY2FzZSBYQ1NJX0RUX1JBVzc6DQo+ID4gKwljYXNlIFhDU0lf RFRfUkFXODoNCj4gPiArCWNhc2UgWENTSV9EVF9SQVcxMDoNCj4gPiArCWNhc2UgWENTSV9EVF9S QVcxMjoNCj4gPiArCWNhc2UgWENTSV9EVF9SQVcxNDoNCj4gPiArCQlicmVhazsNCj4gPiArCWNh c2UgWENTSV9EVF9ZVVY0MjIxMEI6DQo+ID4gKwljYXNlIFhDU0lfRFRfUkFXMTY6DQo+ID4gKwlj YXNlIFhDU0lfRFRfUkFXMjA6DQo+ID4gKwkJaWYgKCFlbl9jc2lfdjIwKSB7DQo+ID4gKwkJCXJl dCA9IC1FSU5WQUw7DQo+ID4gKwkJCWRldl9kYmcoZGV2LCAiZW5hYmxlIGNzaSB2MiBmb3IgdGhp cyBwaXhlbCBmb3JtYXQiKTsNCj4gPiArCQl9DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwlkZWZhdWx0 Og0KPiA+ICsJCXJldCA9IC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKwlpZiAocmV0IDwgMCkgew0K PiA+ICsJCWRldl9lcnIoZGV2LCAiaW52YWxpZCBjc2ktcHhsLWZvcm1hdCBwcm9wZXJ0eSFcbiIp Ow0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJdmZiID0gb2ZfcHJv cGVydHlfcmVhZF9ib29sKG5vZGUsICJ4bG54LHZmYiIpOw0KPiA+ICsJaWYgKCF2ZmIpIHsNCj4g PiArCQlkZXZfZXJyKGRldiwgIm9wZXJhdGlvbiB3aXRob3V0IFZGQiBpcyBub3Qgc3VwcG9ydGVk XG4iKTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwllcCA9 IGZ3bm9kZV9ncmFwaF9nZXRfZW5kcG9pbnRfYnlfaWQoZGV2X2Z3bm9kZShkZXYpLA0KPiA+ICsJ CQkJCSAgICAgWFZJUF9QQURfU0lOSywgMCwNCj4gPiArDQo+IEZXTk9ERV9HUkFQSF9FTkRQT0lO VF9ORVhUKTsNCj4gPiArCWlmICghZXApIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgIm5vIHNpbmsg cG9ydCBmb3VuZCIpOw0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4g PiArCXJldCA9IHY0bDJfZndub2RlX2VuZHBvaW50X3BhcnNlKGVwLCAmdmVwKTsNCj4gPiArCWZ3 bm9kZV9oYW5kbGVfcHV0KGVwKTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlkZXZfZXJyKGRl diwgImVycm9yIHBhcnNpbmcgc2luayBwb3J0Iik7DQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiAr CX0NCj4gPiArDQo+ID4gKwlkZXZfZGJnKGRldiwgIm1pcGkgbnVtYmVyIGxhbmVzID0gJWRcbiIs DQo+ID4gKwkJdmVwLmJ1cy5taXBpX2NzaTIubnVtX2RhdGFfbGFuZXMpOw0KPiA+ICsNCj4gPiAr CXhjc2kycnhzcy0+bWF4X251bV9sYW5lcyA9IHZlcC5idXMubWlwaV9jc2kyLm51bV9kYXRhX2xh bmVzOw0KPiA+ICsNCj4gPiArCWVwID0gZndub2RlX2dyYXBoX2dldF9lbmRwb2ludF9ieV9pZChk ZXZfZndub2RlKGRldiksDQo+ID4gKwkJCQkJICAgICBYVklQX1BBRF9TT1VSQ0UsIDAsDQo+ID4g Kw0KPiBGV05PREVfR1JBUEhfRU5EUE9JTlRfTkVYVCk7DQo+ID4gKwlpZiAoIWVwKSB7DQo+ID4g KwkJZGV2X2VycihkZXYsICJubyBzb3VyY2UgcG9ydCBmb3VuZCIpOw0KPiA+ICsJCXJldHVybiAt RUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWZ3bm9kZV9oYW5kbGVfcHV0KGVwKTsNCj4g PiArDQo+ID4gKwlkZXZfZGJnKGRldiwgInZjeCAlcywgJXUgZGF0YSBsYW5lcyAoJXMpLCBkYXRh IHR5cGUgMHglMDJ4XG4iLA0KPiA+ICsJCXhjc2kycnhzcy0+ZW5fdmN4ID8gImVuYWJsZWQiIDog ImRpc2FibGVkIiwNCj4gPiArCQl4Y3NpMnJ4c3MtPm1heF9udW1fbGFuZXMsDQo+ID4gKwkJeGNz aTJyeHNzLT5lbmFibGVfYWN0aXZlX2xhbmVzID8gImR5bmFtaWMiIDogInN0YXRpYyIsDQo+ID4g KwkJeGNzaTJyeHNzLT5kYXRhdHlwZSk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgeGNzaTJyeHNzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpIHsNCj4gPiArCXN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2Ow0KPiA+ICsJ c3RydWN0IHhjc2kycnhzc19zdGF0ZSAqeGNzaTJyeHNzOw0KPiA+ICsJaW50IG51bV9jbGtzID0g QVJSQVlfU0laRSh4Y3NpMnJ4c3NfY2xrcyk7DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAm cGRldi0+ZGV2Ow0KPiA+ICsJaW50IGlycSwgcmV0Ow0KPiA+ICsNCj4gPiArCXhjc2kycnhzcyA9 IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqeGNzaTJyeHNzKSwgR0ZQX0tFUk5FTCk7DQo+ID4g KwlpZiAoIXhjc2kycnhzcykNCj4gPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gPiArDQo+ID4gKwl4 Y3NpMnJ4c3MtPmRldiA9IGRldjsNCj4gPiArDQo+ID4gKwl4Y3NpMnJ4c3MtPmNsa3MgPSBkZXZt X2ttZW1kdXAoZGV2LCB4Y3NpMnJ4c3NfY2xrcywNCj4gPiArCQkJCSAgICAgICBzaXplb2YoeGNz aTJyeHNzX2Nsa3MpLCBHRlBfS0VSTkVMKTsNCj4gPiArCWlmICgheGNzaTJyeHNzLT5jbGtzKQ0K PiA+ICsJCXJldHVybiAtRU5PTUVNOw0KPiA+ICsNCj4gPiArCS8qIFJlc2V0IEdQSU8gKi8NCj4g PiArCXhjc2kycnhzcy0+cnN0X2dwaW8gPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChkZXYsICJ2 aWRlby1yZXNldCIsDQo+ID4gKwkJCQkJCSAgICAgIEdQSU9EX09VVF9ISUdIKTsNCj4gPiArCWlm IChJU19FUlIoeGNzaTJyeHNzLT5yc3RfZ3BpbykpIHsNCj4gPiArCQlpZiAoUFRSX0VSUih4Y3Np MnJ4c3MtPnJzdF9ncGlvKSAhPSAtRVBST0JFX0RFRkVSKQ0KPiA+ICsJCQlkZXZfZXJyKGRldiwg IlZpZGVvIFJlc2V0IEdQSU8gbm90IHNldHVwIGluIERUIik7DQo+ID4gKwkJcmV0dXJuIFBUUl9F UlIoeGNzaTJyeHNzLT5yc3RfZ3Bpbyk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0ID0geGNz aTJyeHNzX3BhcnNlX29mKHhjc2kycnhzcyk7DQo+ID4gKwlpZiAocmV0IDwgMCkNCj4gPiArCQly ZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArCXhjc2kycnhzcy0+aW9tZW0gPSBkZXZtX3BsYXRmb3Jt X2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMCk7DQo+ID4gKwlpZiAoSVNfRVJSKHhjc2kycnhzcy0+ aW9tZW0pKQ0KPiA+ICsJCXJldHVybiBQVFJfRVJSKHhjc2kycnhzcy0+aW9tZW0pOw0KPiA+ICsN Cj4gPiArCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7DQo+ID4gKwlpZiAoaXJxIDwg MCkNCj4gPiArCQlyZXR1cm4gaXJxOw0KPiA+ICsNCj4gPiArCXJldCA9IGRldm1fcmVxdWVzdF90 aHJlYWRlZF9pcnEoZGV2LCBpcnEsIE5VTEwsDQo+ID4gKwkJCQkJeGNzaTJyeHNzX2lycV9oYW5k bGVyLA0KPiBJUlFGX09ORVNIT1QsDQo+ID4gKwkJCQkJZGV2X25hbWUoZGV2KSwgeGNzaTJyeHNz KTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlkZXZfZXJyKGRldiwgIkVyciA9ICVkIEludGVy cnVwdCBoYW5kbGVyIHJlZyBmYWlsZWQhXG4iLCByZXQpOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0ID0gY2xrX2J1bGtfZ2V0KGRldiwgbnVtX2Nsa3MsIHhj c2kycnhzcy0+Y2xrcyk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4g Kw0KPiA+ICsJLyogVE9ETzogRW5hYmxlL2Rpc2FibGUgY2xvY2tzIGF0IHN0cmVhbSBvbi9vZmYg dGltZS4gKi8NCj4gPiArCXJldCA9IGNsa19idWxrX3ByZXBhcmVfZW5hYmxlKG51bV9jbGtzLCB4 Y3NpMnJ4c3MtPmNsa3MpOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlnb3RvIGVycl9jbGtfcHV0 Ow0KPiA+ICsNCj4gPiArCW11dGV4X2luaXQoJnhjc2kycnhzcy0+bG9jayk7DQo+ID4gKw0KPiA+ ICsJeGNzaTJyeHNzX2hhcmRfcmVzZXQoeGNzaTJyeHNzKTsNCj4gPiArCXhjc2kycnhzc19zb2Z0 X3Jlc2V0KHhjc2kycnhzcyk7DQo+ID4gKw0KPiA+ICsJLyogSW5pdGlhbGl6ZSBWNEwyIHN1YmRl dmljZSBhbmQgbWVkaWEgZW50aXR5ICovDQo+ID4gKwl4Y3NpMnJ4c3MtPnBhZHNbWFZJUF9QQURf U0lOS10uZmxhZ3MgPSBNRURJQV9QQURfRkxfU0lOSzsNCj4gPiArCXhjc2kycnhzcy0+cGFkc1tY VklQX1BBRF9TT1VSQ0VdLmZsYWdzID0gTUVESUFfUEFEX0ZMX1NPVVJDRTsNCj4gPiArDQo+ID4g KwkvKiBJbml0aWFsaXplIHRoZSBkZWZhdWx0IGZvcm1hdCAqLw0KPiA+ICsJeGNzaTJyeHNzLT5k ZWZhdWx0X2Zvcm1hdC5jb2RlID0NCj4gPiArCQl4Y3NpMnJ4c3NfZ2V0X250aF9tYnVzKHhjc2ky cnhzcy0+ZGF0YXR5cGUsIDApOw0KPiA+ICsJeGNzaTJyeHNzLT5kZWZhdWx0X2Zvcm1hdC5maWVs ZCA9IFY0TDJfRklFTERfTk9ORTsNCj4gPiArCXhjc2kycnhzcy0+ZGVmYXVsdF9mb3JtYXQuY29s b3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCOw0KPiA+ICsJeGNzaTJyeHNzLT5kZWZhdWx0 X2Zvcm1hdC53aWR0aCA9IFhDU0lfREVGQVVMVF9XSURUSDsNCj4gPiArCXhjc2kycnhzcy0+ZGVm YXVsdF9mb3JtYXQuaGVpZ2h0ID0gWENTSV9ERUZBVUxUX0hFSUdIVDsNCj4gPiArCXhjc2kycnhz cy0+Zm9ybWF0ID0geGNzaTJyeHNzLT5kZWZhdWx0X2Zvcm1hdDsNCj4gPiArDQo+ID4gKwkvKiBJ bml0aWFsaXplIFY0TDIgc3ViZGV2aWNlIGFuZCBtZWRpYSBlbnRpdHkgKi8NCj4gPiArCXN1YmRl diA9ICZ4Y3NpMnJ4c3MtPnN1YmRldjsNCj4gPiArCXY0bDJfc3ViZGV2X2luaXQoc3ViZGV2LCAm eGNzaTJyeHNzX29wcyk7DQo+ID4gKwlzdWJkZXYtPmRldiA9IGRldjsNCj4gPiArCXN0cnNjcHko c3ViZGV2LT5uYW1lLCBkZXZfbmFtZShkZXYpLCBzaXplb2Yoc3ViZGV2LT5uYW1lKSk7DQo+ID4g KwlzdWJkZXYtPmZsYWdzIHw9IFY0TDJfU1VCREVWX0ZMX0hBU19FVkVOVFMgfA0KPiBWNEwyX1NV QkRFVl9GTF9IQVNfREVWTk9ERTsNCj4gPiArCXN1YmRldi0+ZW50aXR5Lm9wcyA9ICZ4Y3NpMnJ4 c3NfbWVkaWFfb3BzOw0KPiA+ICsJdjRsMl9zZXRfc3ViZGV2ZGF0YShzdWJkZXYsIHhjc2kycnhz cyk7DQo+ID4gKw0KPiA+ICsJcmV0ID0gbWVkaWFfZW50aXR5X3BhZHNfaW5pdCgmc3ViZGV2LT5l bnRpdHksIFhDU0lfTUVESUFfUEFEUywNCj4gPiArCQkJCSAgICAgeGNzaTJyeHNzLT5wYWRzKTsN Cj4gPiArCWlmIChyZXQgPCAwKQ0KPiA+ICsJCWdvdG8gZXJyb3I7DQo+ID4gKw0KPiA+ICsJcGxh dGZvcm1fc2V0X2RydmRhdGEocGRldiwgeGNzaTJyeHNzKTsNCj4gPiArDQo+ID4gKwlyZXQgPSB2 NGwyX2FzeW5jX3JlZ2lzdGVyX3N1YmRldihzdWJkZXYpOw0KPiA+ICsJaWYgKHJldCA8IDApIHsN Cj4gPiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBzdWJkZXZcbiIpOw0KPiA+ ICsJCWdvdG8gZXJyb3I7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK2Vy cm9yOg0KPiA+ICsJbWVkaWFfZW50aXR5X2NsZWFudXAoJnN1YmRldi0+ZW50aXR5KTsNCj4gPiAr CW11dGV4X2Rlc3Ryb3koJnhjc2kycnhzcy0+bG9jayk7DQo+ID4gKwljbGtfYnVsa19kaXNhYmxl X3VucHJlcGFyZShudW1fY2xrcywgeGNzaTJyeHNzLT5jbGtzKTsNCj4gPiArZXJyX2Nsa19wdXQ6 DQo+ID4gKwljbGtfYnVsa19wdXQobnVtX2Nsa3MsIHhjc2kycnhzcy0+Y2xrcyk7DQo+ID4gKwly ZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHhjc2kycnhzc19yZW1v dmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikgew0KPiA+ICsJc3RydWN0IHhjc2kycnhz c19zdGF0ZSAqeGNzaTJyeHNzID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7DQo+ID4gKwlz dHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldiA9ICZ4Y3NpMnJ4c3MtPnN1YmRldjsNCj4gPiArCWlu dCBudW1fY2xrcyA9IEFSUkFZX1NJWkUoeGNzaTJyeHNzX2Nsa3MpOw0KPiA+ICsNCj4gPiArCXY0 bDJfYXN5bmNfdW5yZWdpc3Rlcl9zdWJkZXYoc3ViZGV2KTsNCj4gPiArCW1lZGlhX2VudGl0eV9j bGVhbnVwKCZzdWJkZXYtPmVudGl0eSk7DQo+ID4gKwltdXRleF9kZXN0cm95KCZ4Y3NpMnJ4c3Mt PmxvY2spOw0KPiA+ICsJY2xrX2J1bGtfZGlzYWJsZV91bnByZXBhcmUobnVtX2Nsa3MsIHhjc2ky cnhzcy0+Y2xrcyk7DQo+ID4gKwljbGtfYnVsa19wdXQobnVtX2Nsa3MsIHhjc2kycnhzcy0+Y2xr cyk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBj b25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHhjc2kycnhzc19vZl9pZF90YWJsZVtdID0gew0KPiA+ ICsJeyAuY29tcGF0aWJsZSA9ICJ4bG54LG1pcGktY3NpMi1yeC1zdWJzeXN0ZW0tNS4wIiwgfSwN Cj4gPiArCXsgfQ0KPiA+ICt9Ow0KPiA+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB4Y3NpMnJ4 c3Nfb2ZfaWRfdGFibGUpOw0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2 ZXIgeGNzaTJyeHNzX2RyaXZlciA9IHsNCj4gPiArCS5kcml2ZXIgPSB7DQo+ID4gKwkJLm5hbWUJ CT0gInhpbGlueC1jc2kycnhzcyIsDQo+ID4gKwkJLm9mX21hdGNoX3RhYmxlCT0geGNzaTJyeHNz X29mX2lkX3RhYmxlLA0KPiA+ICsJfSwNCj4gPiArCS5wcm9iZQkJCT0geGNzaTJyeHNzX3Byb2Jl LA0KPiA+ICsJLnJlbW92ZQkJCT0geGNzaTJyeHNzX3JlbW92ZSwNCj4gPiArfTsNCj4gPiArDQo+ ID4gK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoeGNzaTJyeHNzX2RyaXZlcik7DQo+ID4gKw0KPiA+ ICtNT0RVTEVfQVVUSE9SKCJWaXNoYWwgU2FnYXIgPHZzYWdhckB4aWxpbnguY29tPiIpOw0KPiA+ ICtNT0RVTEVfREVTQ1JJUFRJT04oIlhpbGlueCBNSVBJIENTSS0yIFJ4IFN1YnN5c3RlbSBEcml2 ZXIiKTsNCj4gPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOw0KPiANCj4gLS0NCj4gUmVnYXJk cywNCj4gDQo+IExhdXJlbnQgUGluY2hhcnQNCg0KUmVnYXJkcw0KVmlzaGFsIFNhZ2FyDQoNCg0K