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=-7.0 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED 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 020BCC43381 for ; Mon, 11 Mar 2019 04:36:51 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id AC85B206DF for ; Mon, 11 Mar 2019 04:36:51 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="mOQTyRVr"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=xilinx.onmicrosoft.com header.i=@xilinx.onmicrosoft.com header.b="bCkd9n5r" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org AC85B206DF Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=xilinx.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:In-Reply-To:References: Message-ID:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=NRdL+VUZkS2wACQFwZCIKvHdoHKZhlzKqI1fOVKZZhg=; b=mOQTyRVrRj8MLD 45f2I+nlNezL6xST+i9F8afYcNzu7Bk0XtlYspOXBD1xdI/Em7/AGjwIKZVJ17VGmN3zH+P3dVQTi cNRfnF4NOsIR0SpvKZNhetPgwYYJDvpkbHImvsqXfe8F5KmzeeuP6MWFkvW0pBSrglvz/2YUXjKXR ufQdM2WuV6FXXcD+Socxo3Iy357AT5s8G1u5fJp8xVGUp6L241a8wB8syUrT73qks1n7JJSLnwuVt A/vYdxKFv+ytuaRS9GvKWFpvkiaoh/t2a6hVnQzXpsEXfdb2LNTj5fiTVoK4GExZ6PdphKra59EgV lJiEC2ji0V2lGV5tJVLg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1h3CgC-0000nG-2H; Mon, 11 Mar 2019 04:36:48 +0000 Received: from mail-eopbgr730077.outbound.protection.outlook.com ([40.107.73.77] helo=NAM05-DM3-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1h3Cg6-0000mT-BS for linux-mtd@lists.infradead.org; Mon, 11 Mar 2019 04:36:46 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xilinx.onmicrosoft.com; s=selector1-xilinx-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=spNJJ8Vo0kA/OPVer70jsdN0Y1UGBEGU56GQwyPUxNY=; b=bCkd9n5rE8jJ2an2Q7JwxFkUQhKo90Z2xcXmmGjp+wLFE+9dtCYGw4SflTomxJ/pWVP50nESr1/CwdVbunxlSr7TQHFMDsyocWjGHsyNtYExEiiQnmq3Gx8kU+Z1zJMdGsfsriHP/PFP0qcuUUKPVEUUomCbElFiUtSenXpMX4o= Received: from MWHPR02MB2623.namprd02.prod.outlook.com (10.168.206.9) by MWHPR02MB2222.namprd02.prod.outlook.com (10.168.243.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1686.18; Mon, 11 Mar 2019 04:36:38 +0000 Received: from MWHPR02MB2623.namprd02.prod.outlook.com ([fe80::c89d:e485:cb5e:89cf]) by MWHPR02MB2623.namprd02.prod.outlook.com ([fe80::c89d:e485:cb5e:89cf%5]) with mapi id 15.20.1686.021; Mon, 11 Mar 2019 04:36:38 +0000 From: Naga Sureshkumar Relli To: Naga Sureshkumar Relli , Miquel Raynal Subject: RE: [LINUX PATCH v13] rawnand: pl353: Add basic driver for arm pl353 smc nand interface Thread-Topic: [LINUX PATCH v13] rawnand: pl353: Add basic driver for arm pl353 smc nand interface Thread-Index: AQHUwEH1zZQS3QRob0y10ZaiOKtLVqX7XMyAgAAduPCACow1sA== Date: Mon, 11 Mar 2019 04:36:38 +0000 Message-ID: References: <1549694247-24625-1-git-send-email-naga.sureshkumar.relli@xilinx.com> <20190304104301.062ccc1e@xps13> In-Reply-To: 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: x-originating-ip: [149.199.50.133] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 348bfe4e-a49c-45dc-1b13-08d6a5db26ce x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(4618075)(2017052603328)(7153060)(7193020); SRVR:MWHPR02MB2222; x-ms-traffictypediagnostic: MWHPR02MB2222: x-ms-exchange-purlcount: 2 x-microsoft-exchange-diagnostics: =?utf-8?B?MTtNV0hQUjAyTUIyMjIyOzIzOlZwV0JreVBxclZYRjdlNGsxYk80WkRRSnly?= =?utf-8?B?K2E4TkZsMzVsZEc4TmhaZkg2VGdBMFhicUFuNE5iaGt5MTlQNzkzeXZUOUox?= =?utf-8?B?dmgwMFN2aG0vQ1hDYUdDSU1udDAzUngvUzFiV3lYRitBVlhyZ3pFcElNZjVl?= =?utf-8?B?RGNqZFRCTUplbEJWZ3R1S0xaVFJoaEZ6VVFEb0hINnNCbjhJMTJaSXVLS0Ru?= =?utf-8?B?enhIdGowZXVRRTNyVmdZV0xFYVQyekhJUmFQckF2R01Idkw4Y3I1S1QwSGJi?= =?utf-8?B?aVMrYTBFdm0zWllUeHI1MDlPZWM3dEs5b0k4Zk5VSTNnRy9HcE0xS1YzbkFR?= =?utf-8?B?MU0yNjd4SXUzVU5jalFRYTlUY2NiTEhsb3lxUTJBeWFReUp3NTdlVU5KK2dI?= =?utf-8?B?WXlYNFVsZkJCR09KakpRWW1nWEdnZDgySHlXVEpYNmVsejNwYmNkd2V6YlQw?= =?utf-8?B?L3RlTG1PNFk0UUhCT0lXYmpkNHcwd21LaVp1R255dTZwUEUwT0dSUW5PbVU4?= =?utf-8?B?eWRRMmxPV0hKblFybW5KM0FkSjFVNk9HNnU3Q0JsT09hSUlyMjJySzJsam5m?= =?utf-8?B?QThSanAxeHl2Y29zT3VENjRKSmRtVnZnNUdJRnNrdVc3aHFmOWNwV3hSR1F0?= =?utf-8?B?aExOa1dFSlVPb3JjQTJBbHhHRGpyMDFJRU4yQTdEcklSVVhtNm9vUGMvWEx5?= =?utf-8?B?aEt6QTF0NTY4Z3RUYitJeUNQWUljV1Q2WnNwdE5SMHFmdmxYMjZ4UzUyWmRt?= =?utf-8?B?S1dyRGJnblRFeW9UeGZnS09Rc1pEcjg4RWFhNGVtRkZFRUV3dkZoVmtPeHBL?= =?utf-8?B?eTZ0WWJNQzFQdzdYQkRqS0tMd1FyRUNES2c0OUtyRWRnRksxK1FOdFNGUVF2?= =?utf-8?B?YkJNS3JGVStYNGwzUmphbk15UU54c0hwMEJmbFh2dXY2c0xrOEUwRHRmWGVo?= =?utf-8?B?aWtlMjZ4a2JRUWRLeDZuQmtFYlBlK2pCQTlKY1gvRUlKZlRIVVIybjZqV05T?= =?utf-8?B?SUJ0aTBiZmUyM1dFU0cxWkVSK1VGTEgzR3lkTWVKdjgrN0dmV3dzSDFmSTJ2?= =?utf-8?B?WjFHd3NQZGRocjFoc1o1UktjWlNKMXEzcklHM2NXY1JKYkprTWxvUTdDNWkw?= =?utf-8?B?UjNWMEN3N1dBTXd2M1BKNWdNN0l2UThvNUxKQXFpb0Z6b1czZ2lCSjZhTU1T?= =?utf-8?B?SU5YcFYrdDJudnllUXArTU9RSXA5dWJqd29DUzMxTTVDTHU2bU1jMmtLcUsw?= =?utf-8?B?bDRuSTg5amVNSG1HSkUzTEtpUUpyMWVIaDlKbUFtNnNBVFRFcGowc3RIOVVy?= =?utf-8?B?RUFMbjY1ZzJ6NWdIQnFxKzJyU2RYcm5ONmRXaThSZEFYb0hieDFIaGdFd0Zj?= =?utf-8?B?RGtoV0IvbC9pZEplZFcrek5iVXBEbGxTS3RwNk5DTjNzU2dNUitJUTkvNTAx?= =?utf-8?B?a2FxQVk1QVVkeVFiQWtjWVplWUdCS0ZKU2RiNXM2d3UreThnS1YxYk90dElI?= =?utf-8?B?bjd3TmQxZElzQjgzQXV6TVhlcDgrWFp5NG1nK2NhQlN1T2RjeTVxTW01ZGJF?= =?utf-8?B?OHVGcVpQMHpXTUt1VzYwckplK0dVRjhZaHdtUzMyYmRuYVFsREwxV05WckI5?= =?utf-8?B?ZzN1T0JGZ01JT2k4Tno1NSszQVhQRU45RzJsSi9YYnN2NGpGQmRSY2xsWjN1?= =?utf-8?B?VmRGTjBjNjZ1V2lnYjhneEJsMmkrSmpheENSOThpWEpuOVJibWtvOWlVWXhs?= =?utf-8?B?MmJLTTErcDI4eG1UR3VsVjNzQXhsd2EyZ1VVUXdoVGF4blJnRHNIZkRBYWpR?= =?utf-8?B?cUNNR0JuRFJnb1lEQU9BU2gxbTgvZjQ0MnNFWWVndnloSitiVlVIOGZ4T01q?= =?utf-8?B?dmF1N3dOME9YZFUvQzRQTmM5NVdOT0t2WlpFaFNYTkdMVUp5eFkvNTBBbVkz?= =?utf-8?B?OEozK2ZEL3ZrT09pNTBzUVRkbG9XZk9oalNDc0dybDBMUjUyWVpacFN6aG04?= =?utf-8?B?ekVxMjE0N1BRUkc0aFBqSWxNNTdVNHQzdjJ1dz09?= x-microsoft-antispam-prvs: x-forefront-prvs: 09730BD177 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39860400002)(136003)(376002)(396003)(346002)(366004)(189003)(199004)(51914003)(13464003)(14454004)(7696005)(478600001)(102836004)(53546011)(14444005)(6116002)(6246003)(6346003)(105586002)(106356001)(5024004)(33656002)(76176011)(3846002)(966005)(6436002)(71190400001)(71200400001)(66066001)(186003)(6506007)(229853002)(316002)(8676002)(446003)(26005)(55016002)(476003)(486006)(2906002)(8936002)(25786009)(97736004)(68736007)(256004)(4326008)(86362001)(30864003)(99286004)(53936002)(54906003)(110136005)(305945005)(6306002)(81156014)(81166006)(11346002)(5660300002)(74316002)(52536013)(9686003)(7736002)(66574012)(53946003)(559001)(579004)(569006); DIR:OUT; SFP:1101; SCL:1; SRVR:MWHPR02MB2222; H:MWHPR02MB2623.namprd02.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: xilinx.com does not designate permitted sender hosts) authentication-results: spf=none (sender IP is ) smtp.mailfrom=nagasure@xilinx.com; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: SXB8eToKiPWYVGpGcm+vYKN5MjTVoS2kx/oy9BxJC4CyH/ZbtGtrjqVPDxPmJ3eJRKHXqNSkWTxWBSWSAeMi8ak0O3vv5mBn9yPniLQ7Ji26AbBjs2gbLXoulgmX0iGEHN1SAdcYchz8IXo5/W3+P8pCltokn7e6xbt2nJ/QIRfwtIx9PynelaoaxTJMQETBSb2kIsl50EjU9uDDANwrC2Xa6Hd8TnVCrSRb9Y0oZFNYtGRxgl/grzUrn4eQhJymSBdPvp/c/yAieNZEuGkcMTtYhi8WT4zZnC3IEASoEzWajsARqSgzhaGnXf6gpNvYXJTmdqv9q8VhmUdsZExmSPEth568MSZNtFn6vpYkFLYV7qxTAE3VVeu0lCajFOMx3TyWuFIeKm2Tba9JvWRATmZHPt3P7fZtW74zyYxkDcw= MIME-Version: 1.0 X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-Network-Message-Id: 348bfe4e-a49c-45dc-1b13-08d6a5db26ce X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Mar 2019 04:36:38.5705 (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-Transport-CrossTenantHeadersStamped: MWHPR02MB2222 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190310_213642_498980_404A9D82 X-CRM114-Status: GOOD ( 26.79 ) X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "bbrezillon@kernel.org" , "richard@nod.at" , "linux-kernel@vger.kernel.org" , "marek.vasut@gmail.com" , "linux-mtd@lists.infradead.org" , "nagasureshkumarrelli@gmail.com" , Michal Simek , "computersforpeace@gmail.com" , "dwmw2@infradead.org" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org SGkgTWlxdWVsLA0KDQpUaGFua3MgZm9yIHRoZSByZXZpZXcuDQpJIHdpbGwgdXBkYXRlIHRoZSBk cml2ZXIgdG8gcmVtb3ZlIGxlZ2FjeSBob29rcy4NCkFwYXJ0IGZyb20gdGhhdCwgRG8geW91IGhh dmUgYW55IG90aGVyIGNvbW1lbnRzIG9uIHRoaXMgZHJpdmVyPw0KSWYgYW55LCBJIHdpbGwgZml4 IHRob3NlLg0KDQpUaGFua3MsDQpOYWdhIFN1cmVzaGt1bWFyIFJlbGxpDQoNCj4gLS0tLS1Pcmln aW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTmFnYSBTdXJlc2hrdW1hciBSZWxsaSA8bmFnYXN1 cmVAeGlsaW54LmNvbT4NCj4gU2VudDogTW9uZGF5LCBNYXJjaCA0LCAyMDE5IDU6MTcgUE0NCj4g VG86IE1pcXVlbCBSYXluYWwgPG1pcXVlbC5yYXluYWxAYm9vdGxpbi5jb20+DQo+IENjOiBiYnJl emlsbG9uQGtlcm5lbC5vcmc7IHJpY2hhcmRAbm9kLmF0OyBkd213MkBpbmZyYWRlYWQub3JnOw0K PiBjb21wdXRlcnNmb3JwZWFjZUBnbWFpbC5jb207IG1hcmVrLnZhc3V0QGdtYWlsLmNvbTsgbGlu dXgtbXRkQGxpc3RzLmluZnJhZGVhZC5vcmc7IGxpbnV4LQ0KPiBrZXJuZWxAdmdlci5rZXJuZWwu b3JnOyBNaWNoYWwgU2ltZWsgPG1pY2hhbHNAeGlsaW54LmNvbT47DQo+IG5hZ2FzdXJlc2hrdW1h cnJlbGxpQGdtYWlsLmNvbQ0KPiBTdWJqZWN0OiBSRTogW0xJTlVYIFBBVENIIHYxM10gcmF3bmFu ZDogcGwzNTM6IEFkZCBiYXNpYyBkcml2ZXIgZm9yIGFybSBwbDM1MyBzbWMgbmFuZA0KPiBpbnRl cmZhY2UNCj4gDQo+IEhpIE1pcXVlbCwNCj4gDQo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0t LS0NCj4gPiBGcm9tOiBNaXF1ZWwgUmF5bmFsIDxtaXF1ZWwucmF5bmFsQGJvb3RsaW4uY29tPg0K PiA+IFNlbnQ6IE1vbmRheSwgTWFyY2ggNCwgMjAxOSAzOjEzIFBNDQo+ID4gVG86IE5hZ2EgU3Vy ZXNoa3VtYXIgUmVsbGkgPG5hZ2FzdXJlQHhpbGlueC5jb20+DQo+ID4gQ2M6IGJicmV6aWxsb25A a2VybmVsLm9yZzsgcmljaGFyZEBub2QuYXQ7IGR3bXcyQGluZnJhZGVhZC5vcmc7DQo+ID4gY29t cHV0ZXJzZm9ycGVhY2VAZ21haWwuY29tOyBtYXJlay52YXN1dEBnbWFpbC5jb207IGxpbnV4LW10 ZEBsaXN0cy5pbmZyYWRlYWQub3JnOw0KPiBsaW51eC0NCj4gPiBrZXJuZWxAdmdlci5rZXJuZWwu b3JnOyBNaWNoYWwgU2ltZWsgPG1pY2hhbHNAeGlsaW54LmNvbT47DQo+ID4gbmFnYXN1cmVzaGt1 bWFycmVsbGlAZ21haWwuY29tDQo+ID4gU3ViamVjdDogUmU6IFtMSU5VWCBQQVRDSCB2MTNdIHJh d25hbmQ6IHBsMzUzOiBBZGQgYmFzaWMgZHJpdmVyIGZvciBhcm0gcGwzNTMgc21jDQo+IG5hbmQN Cj4gPiBpbnRlcmZhY2UNCj4gPg0KPiA+IEhpIE5hZ2EsDQo+ID4NCj4gPiBOYWdhIFN1cmVzaGt1 bWFyIFJlbGxpIDxuYWdhLnN1cmVzaGt1bWFyLnJlbGxpQHhpbGlueC5jb20+IHdyb3RlIG9uDQo+ ID4gU2F0LCA5IEZlYiAyMDE5IDEyOjA3OjI3ICswNTMwOg0KPiA+DQo+ID4gPiBBZGQgZHJpdmVy IGZvciBhcm0gcGwzNTMgc3RhdGljIG1lbW9yeSBjb250cm9sbGVyIG5hbmQgaW50ZXJmYWNlIHdp dGgNCj4gPiA+IEhXIEVDQyBzdXBwb3J0LiBUaGlzIGNvbnRyb2xsZXIgaXMgdXNlZCBpbiBYaWxp bnggWnlucSBTb0MgZm9yDQo+ID4gPiBpbnRlcmZhY2luZyB0aGUgTkFORCBmbGFzaCBtZW1vcnku DQo+ID4gPg0KPiA+ID4gU2lnbmVkLW9mZi1ieTogTmFnYSBTdXJlc2hrdW1hciBSZWxsaSA8bmFn YS5zdXJlc2hrdW1hci5yZWxsaUB4aWxpbnguY29tPg0KPiA+ID4gLS0tDQo+ID4gPiB4aWxpbngg enlucSBUUk0gbGluazoNCj4gPiA+IGh0dHBzOi8vd3d3LnhpbGlueC5jb20vc3VwcG9ydC9kb2N1 bWVudGF0aW9uL3VzZXJfZ3VpZGVzL3VnNTg1LVp5bnEtNzAwMC0NCj4gVFJNLnBkZg0KPiA+ID4N Cj4gPiA+IEFSTSBwbDM1MyBzbWMgVFJNIGxpbms6DQo+ID4gPg0KPiA+DQo+IGh0dHA6Ly9pbmZv Y2VudGVyLmFybS5jb20vaGVscC90b3BpYy9jb20uYXJtLmRvYy5kZGkwMzgwZy9EREkwMzgwR19z bWNfcGwzNTBfc2VyaWVzXw0KPiA+IHIycDFfdHJtLnBkZg0KPiA+ID4NCj4gPiA+IFRlc3RlZCBN aWNyb24gTVQyOUYyRzA4QUJBRUFXUCAoT24tZGllIGNhcGFibGUpIGFuZCBBTUQvU3BhbnNpb24N Cj4gPiBTMzRNTDAxRzEuDQo+ID4gPg0KPiA+ID4gU01DIG1lbW9yeSBjb250cm9sbGVyIGRyaXZl ciBpcyBhdCBkcml2ZXJzL21lbW9yeS9wbDM1My1zbWMuYw0KPiA+ID4NCj4gPiA+IENoYW5nZXMg aW4gdjEzOg0KPiA+ID4gIC0gUmViYXNlZCB0aGUgZHJpdmVyIHRvIG10ZC9uZXh0DQo+ID4gPiBD aGFuZ2VzIGluIHYxMjoNCj4gPiA+ICAtIFJlYmFzZWQgdGhlIGRyaXZlciBvbiB0b3Agb2YgdjQu MTkgbmFuZCB0cmVlDQo+ID4gPiAgLSBSZW1vdmVkIG5hbmRfc2Nhbl9pZGVudCgpIGFuZCBuYW5k X3NjYW5fdGFpbCgpLCBhbmQgYWRkZWQgbmFuZF9jb250cm9sbGVyX29wcw0KPiA+ID4gICAgd2l0 aCAtPmF0dGFjaF9jaGlwKCkgYW5kIHVzZWQgbmFuZF9zY2FuKCkgaW5zdGVhZC4NCj4gPiA+ICAt IFJlbmFtZWQgcGwzNTNfbmFuZF9pbmZvIHN0cnVjdHVyZSB0byBwbDM1M19uYW5kX2NvbnRyb2xs ZXINCj4gPiA+ICAtIFJlbmFtZWQgbmFuZF9iYXNlIGFuZCBuYW5kYWRkciBpbiBwbDM1M19uYW5k X2NvbnRyb2xsZXIgdG8gJ3JlZ3MnIGFuZCAnYnVmX2FkZHInDQo+ID4gPiAgLSBBZGRlZCBuZXcg QVBJIHBsMzUzX3dhaXRfZm9yX2VjY19kb25lKCkgdG8gd2FpdCBmb3IgZWNjIGRvbmUgYW5kIGNh bGwgaXQgZnJvbQ0KPiA+ID4gICAgcGwzNTNfbmFuZF93cml0ZV9wYWdlX2h3ZWNjKCkgYW5kIHBs MzUzX25hbmRfcmVhZF9wYWdlX2h3ZWNjKCkNCj4gPiA+ICAtIERlZmluZWQgbmV3IG1hY3JvIGZv ciBtYXggRUNDIGJsb2Nrcw0KPiA+ID4gIC0gQWRkZWQgcmV0dXJuIHZhbHVlIGNoZWNrIGZvciBl Y2MuY2FsY3VsYXRlKCkNCj4gPiA+ICAtIFJlbmFtZWQgcGwzNTNfbmFuZF9jbWRfZnVuY3Rpb24o KSB0byBwbDM1M19uYW5kX2V4ZWNfb3BfY21kKCkNCj4gPiA+ICAtIEFkZGVkIHgxNiBidXMtd2lk dGggc3VwcG9ydA0KPiA+ID4gIC0gVGhlIGRlcGVuZGVudCBkcml2ZXIgcGwzNTMtc21jIGlzIGFs cmVhZHkgcmV2aWV3ZWQgYW5kIGhlbmNlIGRyb3BwZWQgdGhlDQo+ID4gPiAgICBzbWMgZHJpdmVy DQo+ID4gPiBDaGFuZ2VzIGluIHYxMToNCj4gPiA+ICAtIFJlbW92ZWQgRG9jdW1lbnRhdGlvbiBw YXRjaCBhbmQgYWRkZWQgdGhlIHJlcXVpcmVkIGluZm8gaW4gZHJpdmVyIGFzDQo+ID4gPiAgICBw ZXIgQm9yaXMgY29tbWVudHMuDQo+ID4gPiAgLSBSZW1vdmVkIHVud2FudGVkIHZhcmlhYmxlcyBm cm9tIHBsMzUzX25hbmRfaW5mbyBhcyBwZXIgTWlxdWVsIGNvbW1lbnRzDQo+ID4gPiAgLSBSZW1v dmVkIElPX0FERFJfUi9XLg0KPiA+ID4gIC0gUmVwbGFjZWQgb25ob3QoKSB3aXRoIGh3ZWlnaHQz MigpDQo+ID4gPiAgLSBEZWZpbmVkIG1hY3JvcyBmb3Igc3RhdGljIHZhbHVlcyBpbiBmdW5jdGlv biBwbDM1M19uYW5kX2NvcnJlY3RfZGF0YSgpDQo+ID4gPiAgLSBSZW1vdmVkIGFsbCB1bm5lY2Vz c2FyeSBkZWxheXMNCj4gPiA+ICAtIFVzZWQgbmFuZF93YWl0X3JlYWR5KCkgd2hlcmUgZXZlciBp cyByZXF1aXJlZA0KPiA+ID4gIC0gTW9kaWZlZCB0aGUgcGwzNTNfc2V0dXBfZGF0YV9pbnRlcmZh Y2UoKSBsb2dpYyBhcyBwZXIgTWlxdWVsIGNvbW1lbnRzLg0KPiA+ID4gIC0gVGFrZW4gYXJyYXkg aW5zdGVhZCBvZiA3IHZhbHVlcyBpbiBwbDM1M19zZXR1cF9kYXRhX2ludGVyZmFjZSgpIGFuZCBw YXNzDQo+ID4gPiAgICBpdCB0byBzbWMgZHJpdmVyLg0KPiA+ID4gIC0gQWRkZWQgY2hlY2sgdG8g Y29sbGVjdCB0aGUgcmV0dXJuIHZhbHVlIG9mIG10ZF9kZXZpY2VfcmVnaXN0ZXIoKS4NCj4gPiA+ IENoYW5nZXMgaW4gMTA6DQo+ID4gPiAgLSBUeXBvcyBjb3JyZWN0aW9uIGxpa2UgbmFuZCB0byBO QU5EIGFuZCBzb2MgdG8gU09DIGV0Yy4uDQo+ID4gPiAgLSBEZWZpbmVkIG1hY3JvcyBmb3IgdGhl IHZhbHVlcyBpbiBwbDM1M19uYW5kX2NhbGN1bGF0ZV9od2VjYygpDQo+ID4gPiAgLSBNb2RpZmVk IGVjY19zdGF0dXMgZnJvbSBpbnQgdG8gY2hhciBpbiBwbDM1M19uYW5kX2NhbGN1bGF0ZV9od2Vj YygpDQo+ID4gPiAgLSBDaGFuZ2VkIHRoZSByZXR1cm4gdHlwZSBmb3JtIGludCB0byBib29sIHRv IHRoZSBmdW5jdGlvbg0KPiA+ID4gICAgb25laG90KCkNCj4gPiA+ICAtIFJlbW92ZWQgdWRlbGF5 KDEwMDApIGluIHBsMzUzX2NtZF9mdW5jdGlvbiwgYXMgaXQgaXMgbm90IHJlcXVpcmVkDQo+ID4g PiAgLSBEcm9wcGVkIGVjYy0+aHdjdGwgPSBOVUxMIGluIHBsMzUzX2VjY19pbml0KCkNCj4gPiA+ ICAtIEFkZGVkIGFuIGVycm9yIG1lc3NhZ2UgaW4gcGwzNTNfZWNjX2luaXQoKSwgd2hlbiB0aGVy ZSBpcyBubyBtYXRjaGluZw0KPiA+ID4gICAgb29ic2l6ZQ0KPiA+ID4gIC0gQ2hhbmdlZCB0aGUg dmFyaWFibGUgZnJvbSB4bmFuZCB0byB4bmZjDQo+ID4gPiAgLSBBZGRlZCBsb2dpYyB0byBnZXQg bXRkLT5uYW1lIGZyb20gRFQsIGlmIGl0IGlzIHNwZWNpZmllZCBpbiBEVA0KPiA+ID4gQ2hhbmdl cyBpbiB2OToNCj4gPiA+ICAtIEFkZHJlc3NlZCB0aGUgYmVsb3cgY29tbWVudHMgZ2l2ZW4gYnkg TWlxdWVsDQo+ID4gPiAgLSBpbnN0ZWFkIG9mIHVzaW5nIHBsMzUzX25hbmRfd3JpdGUzMiwgdXNl IGRpcmVjdGx5IHdyaXRlbF9yZWxheGVkDQo+ID4gPiAgLSBGaXhlZCBjaGVjayBwYXRjaCB3YXJu aW5ncw0KPiA+ID4gIC0gUmVuYW1lZCB3cml0ZV9idWYvcmVhZF9idWYgdG8gd3JpdGVfZGF0YV9v cC9yZWFkX2RhdGFfb3ANCj4gPiA+ICAtIHVzZSBCSVQgbWFjcm8gaW5zdGVhZCBvZiAxIDw8IG5y DQo+ID4gPiAgLSBVc2UgTkFORF9ST1dfQUREUl8zIGZsYWcNCj4gPiA+ICAtIFVzZSBuYW5kX3dh aXRfcmVhZHkoKQ0KPiA+ID4gIC0gUmVtb3ZlZCBzd2VjYyBmdW5jdGlvbnMNCj4gPiA+ICAtIFVz ZSBhZGRyZXNzIGN5Y2xlcyBhcyBwZXIgc2l6ZSwgaW5zdGVhZCBvZiByZWFkaW5nIGl0IGZyb20g UGFyYW1ldGVyIHBhZ2UNCj4gPiA+ICAtIEluc3RlYWQgb2Ygd3JpdGluZyB0b28gbWFueSBwYXR0 ZXJucywgdXNlIG9wdGlvbmFsIHByb3BlcnR5DQo+ID4gPiBDaGFuZ2VzIGluIHY4Og0KPiA+ID4g IC0gQWRkZWQgZXhlY19vcCgpIGltcGxlbWVudGF0aW9uDQo+ID4gPiAgLSBGaXhlZCB0aGUgYmVs b3cgdjcgcmV2aWV3IGNvbW1lbnRzDQo+ID4gPiAgLSByZW1vdmVkIG10ZF9pbmZvIGZyb20gcGwz NTNfbmFuZF9pbmZvIHN0cnVjdA0KPiA+ID4gIC0gQ29ycmVjdGVkIGVjYyBsYXlvdXQgb2Zmc2V0 cw0KPiA+ID4gIC0gQWRkZWQgb24tZGllIGVjYyBzdXBwb3J0DQo+ID4gPiBDaGFuZ2VzIGluIHY3 Og0KPiA+ID4gIC0gQ3VycmVudGx5IG5vdCBpbXBsZW1lbnRlZCB0aGUgbWVtY2xrIHJhdGUgYWRq dXN0bWVudHMuIEkgd2lsbA0KPiA+ID4gICAgbG9vayBpbnRvIHRoaXMgbGF0ZXIgYW5kIG9uY2Ug dGhlIGJhc2ljIGRyaXZlciBpcyBhY2NlcHRlZC4NCj4gPiA+ICAtIEZpeGVkIEdQTCBsaWNlbmNl IGlkZW50DQo+ID4gPiBDaGFuZ2VzIGluIHY2Og0KPiA+ID4gIC0gRml4ZWQgdGhlIGNoZWNrcGF0 Y2gucGwgcmVwb3J0ZWQgd2FybmluZ3MNCj4gPiA+ICAtIFVzaW5nIHRoZSBhZGRyZXNzIGN5Y2xl cyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBvbmZpIHBhcmFtIHBhZ2UNCj4gPiA+ICAgIGVhcmxpZXIg aXQgaXMgaGFyZGNvZGVkIHRvIDUgaW4gZHJpdmVyDQo+ID4gPiBDaGFuZ2VzIGluIHY1Og0KPiA+ ID4gIC0gQ29uZmlndXJlIHRoZSBuYW5kIHRpbWluZyBwYXJhbWV0ZXJzIGFzIHBlciB0aGUgb25m aSBzcGVjIENoYW5nZXMgaW4gdjQ6DQo+ID4gPiAgLSBVcGRhdGVkIHRoZSBkcml2ZXIgdG8gc3lu YyB3aXRoIHBsMzUzX3NtYyBkcml2ZXIgQVBJcw0KPiA+ID4gQ2hhbmdlcyBpbiB2MzoNCj4gPiA+ ICAtIGltcGxlbWVudGVkIHRoZSBwcm9wZXIgZXJyb3IgY29kZXMNCj4gPiA+ICAtIGZ1cnRoZXIg YnJlYWtkb3duIHRoaXMgcGF0Y2ggdG8gbXVsdGlwbGUgc2V0cw0KPiA+ID4gIC0gYWRkZWQgdGhl IGNvbnRyb2xsZXIgYW5kIGRyaXZlciBkZXRhaWxzIHRvIERvY3VtZW50YXRpb24gc2VjdGlvbg0K PiA+ID4gIC0gdXBkYXRlZCB0aGUgbGljZW5lY2UgdG8gR1BMdjINCj4gPiA+ICAtIHJlb3JnYW5p emVkIHRoZSBwbDM1M19uYW5kX2VjY19pbml0IGZ1bmN0aW9uDQo+ID4gPiBDaGFuZ2VzIGluIHYy Og0KPiA+ID4gIC0gdXNlICJkZXBlbmRzIG9uIiByYXRoZXIgdGhhbiAic2VsZWN0IiBvcHRpb24g aW4ga2NvbmZpZw0KPiA+ID4gIC0gcmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBwYXJ0cw0KPiA+ID4g LS0tDQo+ID4gPiAgZHJpdmVycy9tdGQvbmFuZC9yYXcvS2NvbmZpZyAgICAgIHwgICAgOCArDQo+ ID4gPiAgZHJpdmVycy9tdGQvbmFuZC9yYXcvTWFrZWZpbGUgICAgIHwgICAgMSArDQo+ID4gPiAg ZHJpdmVycy9tdGQvbmFuZC9yYXcvcGwzNTNfbmFuZC5jIHwgMTM4MA0KPiA+ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gPiA+ICAzIGZpbGVzIGNoYW5nZWQsIDEzODkg aW5zZXJ0aW9ucygrKQ0KPiA+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL210ZC9uYW5k L3Jhdy9wbDM1M19uYW5kLmMNCj4gPiA+DQo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQv bmFuZC9yYXcvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL25hbmQvcmF3L0tjb25maWcNCj4gPiA+IGlu ZGV4IDFhNTVkM2UuLmJjNmMwYTAgMTAwNjQ0DQo+ID4gPiAtLS0gYS9kcml2ZXJzL210ZC9uYW5k L3Jhdy9LY29uZmlnDQo+ID4gPiArKysgYi9kcml2ZXJzL210ZC9uYW5kL3Jhdy9LY29uZmlnDQo+ ID4gPiBAQCAtNTQxLDQgKzU0MSwxMiBAQCBjb25maWcgTVREX05BTkRfVEVHUkENCj4gPiA+ICAJ ICBpcyBzdXBwb3J0ZWQuIEV4dHJhIE9PQiBieXRlcyB3aGVuIHVzaW5nIEhXIEVDQyBhcmUgY3Vy cmVudGx5DQo+ID4gPiAgCSAgbm90IHN1cHBvcnRlZC4NCj4gPiA+DQo+ID4gPiArY29uZmlnIE1U RF9OQU5EX1BMMzUzDQo+ID4gPiArCXRyaXN0YXRlICJBUk0gUGwzNTMgTkFORCBmbGFzaCBkcml2 ZXIiDQo+ID4gPiArCWRlcGVuZHMgb24gTVREX05BTkQgJiYgQVJNDQo+ID4gPiArCWRlcGVuZHMg b24gUEwzNTNfU01DDQo+ID4gPiArCWhlbHANCj4gPiA+ICsJICBFbmFibGVzIHN1cHBvcnQgZm9y IFByaW1lQ2VsbCBTdGF0aWMgTWVtb3J5IENvbnRyb2xsZXIgUEwzNTMuDQo+ID4gPiArDQo+ID4g PiArDQo+ID4gPiAgZW5kaWYgIyBNVERfTkFORA0KPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv bXRkL25hbmQvcmF3L01ha2VmaWxlIGIvZHJpdmVycy9tdGQvbmFuZC9yYXcvTWFrZWZpbGUNCj4g PiA+IGluZGV4IDU3MTU5YjMuLjlkM2M0OGQgMTAwNjQ0DQo+ID4gPiAtLS0gYS9kcml2ZXJzL210 ZC9uYW5kL3Jhdy9NYWtlZmlsZQ0KPiA+ID4gKysrIGIvZHJpdmVycy9tdGQvbmFuZC9yYXcvTWFr ZWZpbGUNCj4gPiA+IEBAIC01Niw2ICs1Niw3IEBAIG9iai0kKENPTkZJR19NVERfTkFORF9CUkNN TkFORCkJCSs9DQo+IGJyY21uYW5kLw0KPiA+ID4gIG9iai0kKENPTkZJR19NVERfTkFORF9RQ09N KQkJKz0gcWNvbV9uYW5kYy5vDQo+ID4gPiAgb2JqLSQoQ09ORklHX01URF9OQU5EX01USykJCSs9 IG10a19lY2MubyBtdGtfbmFuZC5vDQo+ID4gPiAgb2JqLSQoQ09ORklHX01URF9OQU5EX1RFR1JB KQkJKz0gdGVncmFfbmFuZC5vDQo+ID4gPiArb2JqLSQoQ09ORklHX01URF9OQU5EX1BMMzUzKQkJ Kz0gcGwzNTNfbmFuZC5vDQo+ID4gPg0KPiA+ID4gIG5hbmQtb2JqcyA6PSBuYW5kX2Jhc2UubyBu YW5kX2xlZ2FjeS5vIG5hbmRfYmJ0Lm8gbmFuZF90aW1pbmdzLm8gbmFuZF9pZHMubw0KPiA+ID4g IG5hbmQtb2JqcyArPSBuYW5kX29uZmkubw0KPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRk L25hbmQvcmF3L3BsMzUzX25hbmQuYw0KPiBiL2RyaXZlcnMvbXRkL25hbmQvcmF3L3BsMzUzX25h bmQuYw0KPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiA+IGluZGV4IDAwMDAwMDAuLjFk YmFhZTUNCj4gPiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ICsrKyBiL2RyaXZlcnMvbXRkL25hbmQv cmF3L3BsMzUzX25hbmQuYw0KPiA+ID4gQEAgLTAsMCArMSwxMzgwIEBADQo+ID4gPiArLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCj4gPiA+ICsvKg0KPiA+ID4gKyAqIEFSTSBQ TDM1MyBOQU5EIGZsYXNoIGNvbnRyb2xsZXIgZHJpdmVyDQo+ID4gPiArICoNCj4gPiA+ICsgKiBD b3B5cmlnaHQgKEMpIDIwMTcgWGlsaW54LCBJbmMNCj4gPiA+ICsgKiBBdXRob3I6IFB1bm5haWFo IGNob3dkYXJ5IGthbGx1cmkgPHB1bm5haWFoQHhpbGlueC5jb20+DQo+ID4gPiArICogQXV0aG9y OiBOYWdhIFN1cmVzaGt1bWFyIFJlbGxpIDxuYWdhc3VyZUB4aWxpbnguY29tPg0KPiA+ID4gKyAq DQo+ID4gPiArICovDQo+ID4gPiArDQo+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2Vyci5oPg0KPiA+ ID4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9pbnRl cnJ1cHQuaD4NCj4gPiA+ICsjaW5jbHVkZSA8bGludXgvaW8uaD4NCj4gPiA+ICsjaW5jbHVkZSA8 bGludXgvaW9wb3J0Lmg+DQo+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2lycS5oPg0KPiA+ID4gKyNp bmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCj4gPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFy YW0uaD4NCj4gPiA+ICsjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPg0KPiA+ID4gKyNpbmNsdWRl IDxsaW51eC9tdGQvcmF3bmFuZC5oPg0KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZF9l Y2MuaD4NCj4gPiA+ICsjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4NCj4gPiA+ICsj aW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPg0KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9vZl9k ZXZpY2UuaD4NCj4gPiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4NCj4gPiA+ICsj aW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQo+ID4gPiArI2luY2x1ZGUgPGxpbnV4 L3NsYWIuaD4NCj4gPiA+ICsjaW5jbHVkZSA8bGludXgvcGwzNTMtc21jLmg+DQo+ID4gPiArI2lu Y2x1ZGUgPGxpbnV4L2Nsay5oPg0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgUEwzNTNfTkFORF9E UklWRVJfTkFNRSAicGwzNTMtbmFuZCINCj4gPiA+ICsNCj4gPiA+ICsvKiBOQU5EIGZsYXNoIGRy aXZlciBkZWZpbmVzICovDQo+ID4gPiArI2RlZmluZSBQTDM1M19OQU5EX0NNRF9QSEFTRQkxCS8q IEVuZCBjb21tYW5kIHZhbGlkIGluIGNvbW1hbmQNCj4gPiBwaGFzZSAqLw0KPiA+ID4gKyNkZWZp bmUgUEwzNTNfTkFORF9EQVRBX1BIQVNFCTIJLyogRW5kIGNvbW1hbmQgdmFsaWQgaW4gZGF0YSBw aGFzZQ0KPiA+ICovDQo+ID4gPiArI2RlZmluZSBQTDM1M19OQU5EX0VDQ19TSVpFCTUxMgkvKiBT aXplIG9mIGRhdGEgZm9yIEVDQyBvcGVyYXRpb24gKi8NCj4gPiA+ICsNCj4gPiA+ICsvKiBGbGFz aCBtZW1vcnkgY29udHJvbGxlciBvcGVyYXRpbmcgcGFyYW1ldGVycyAqLw0KPiA+ID4gKw0KPiA+ ID4gKyNkZWZpbmUgUEwzNTNfTkFORF9FQ0NfQ09ORklHCShCSVQoNCkgIHwJLyogRUNDIHJlYWQg YXQgZW5kIG9mIHBhZ2UgKi8NCj4gPiBcDQo+ID4gPiArCQkJCSAoMCA8PCA1KSkJLyogTm8gSnVt cGluZyAqLw0KPiA+ID4gKw0KPiA+ID4gKy8qIEFYSSBBZGRyZXNzIGRlZmluaXRpb25zICovDQo+ ID4gPiArI2RlZmluZSBTVEFSVF9DTURfU0hJRlQJCTMNCj4gPiA+ICsjZGVmaW5lIEVORF9DTURf U0hJRlQJCTExDQo+ID4gPiArI2RlZmluZSBFTkRfQ01EX1ZBTElEX1NISUZUCTIwDQo+ID4gPiAr I2RlZmluZSBBRERSX0NZQ0xFU19TSElGVAkyMQ0KPiA+ID4gKyNkZWZpbmUgQ0xFQVJfQ1NfU0hJ RlQJCTIxDQo+ID4gPiArI2RlZmluZSBFQ0NfTEFTVF9TSElGVAkJMTANCj4gPiA+ICsjZGVmaW5l IENPTU1BTkRfUEhBU0UJCSgwIDw8IDE5KQ0KPiA+ID4gKyNkZWZpbmUgREFUQV9QSEFTRQkJQklU KDE5KQ0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgUEwzNTNfTkFORF9FQ0NfTEFTVAlCSVQoRUND X0xBU1RfU0hJRlQpCS8qIFNldA0KPiA+IEVDQ19MYXN0ICovDQo+ID4gPiArI2RlZmluZSBQTDM1 M19OQU5EX0NMRUFSX0NTCUJJVChDTEVBUl9DU19TSElGVCkJLyogQ2xlYXIgY2hpcA0KPiA+IHNl bGVjdCAqLw0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgUEwzNTNfTkFORF9FQ0NfQlVTWV9USU1F T1VUCSgxICogSFopDQo+ID4gPiArI2RlZmluZSBQTDM1M19OQU5EX0RFVl9CVVNZX1RJTUVPVVQJ KDEgKiBIWikNCj4gPiA+ICsjZGVmaW5lIFBMMzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgJ NA0KPiA+ID4gKyNkZWZpbmUgUEwzNTNfTkFORF9FQ0NfVkFMSURfU0hJRlQJMjQNCj4gPiA+ICsj ZGVmaW5lIFBMMzUzX05BTkRfRUNDX1ZBTElEX01BU0sJMHg0MA0KPiA+ID4gKyNkZWZpbmUgUEwz NTNfRUNDX0JJVFNfQllURU9GRl9NQVNLCTB4MUZGDQo+ID4gPiArI2RlZmluZSBQTDM1M19FQ0Nf QklUU19CSVRPRkZfTUFTSwkweDcNCj4gPiA+ICsjZGVmaW5lIFBMMzUzX0VDQ19CSVRfTUFTSwkJ MHhGRkYNCj4gPiA+ICsjZGVmaW5lIFBMMzUzX1RSRUFfTUFYX1ZBTFVFCQkxDQo+ID4gPiArI2Rl ZmluZSBQTDM1M19NQVhfRUNDX0NIVU5LUwkJNA0KPiA+ID4gKyNkZWZpbmUgUEwzNTNfTUFYX0VD Q19CWVRFUwkJMw0KPiA+ID4gKw0KPiA+ID4gK3N0cnVjdCBwbDM1M19uZmNfb3Agew0KPiA+ID4g Kwl1MzIgY21uZHNbNF07DQo+ID4gPiArCXUzMiBlbmRfY21kOw0KPiA+ID4gKwl1MzIgYWRkcnM7 DQo+ID4gPiArCXUzMiBuYWRkcnM7DQo+ID4gPiArCXUzMiBhZGRyNTsNCj4gPiA+ICsJdTMyIGFk ZHI2Ow0KPiA+ID4gKwl1bnNpZ25lZCBpbnQgZGF0YV9pbnN0cl9pZHg7DQo+ID4gPiArCXVuc2ln bmVkIGludCByZHlfdGltZW91dF9tczsNCj4gPiA+ICsJdW5zaWduZWQgaW50IHJkeV9kZWxheV9u czsNCj4gPiA+ICsJdW5zaWduZWQgaW50IGNsZV9hbGVfZGVsYXlfbnM7DQo+ID4gPiArCWNvbnN0 IHN0cnVjdCBuYW5kX29wX2luc3RyICpkYXRhX2luc3RyOw0KPiA+ID4gK307DQo+ID4gPiArDQo+ ID4gPiArLyoqDQo+ID4gPiArICogc3RydWN0IHBsMzUzX25hbmRfY29udHJvbGxlciAtIERlZmlu ZXMgdGhlIE5BTkQgZmxhc2ggY29udHJvbGxlciBkcml2ZXINCj4gPiA+ICsgKgkJCQkgIGluc3Rh bmNlDQo+ID4gPiArICogQGNoaXA6CQlOQU5EIGNoaXAgaW5mb3JtYXRpb24gc3RydWN0dXJlDQo+ ID4gPiArICogQGRldjoJCVBhcmVudCBkZXZpY2UgKHVzZWQgdG8gcHJpbnQgZXJyb3IgbWVzc2Fn ZXMpDQo+ID4gPiArICogQHJlZ3M6CQlWaXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIE5BTkQgZmxhc2gg ZGV2aWNlDQo+ID4gPiArICogQGJ1Zl9hZGRyOgkJVmlydHVhbCBhZGRyZXNzIG9mIHRoZSBOQU5E IGZsYXNoIGRldmljZSBmb3INCj4gPiA+ICsgKgkJCWRhdGEgcmVhZC93cml0ZXMNCj4gPiA+ICsg KiBAYWRkcl9jeWNsZXM6CUFkZHJlc3MgY3ljbGVzDQo+ID4gPiArICogQG1jbGs6CQlNZW1vcnkg Y29udHJvbGxlciBjbG9jaw0KPiA+ID4gKyAqIEBidXN3aWR0aDoJCUJ1cyB3aWR0aCA4IG9yIDE2 DQo+ID4gPiArICovDQo+ID4gPiArc3RydWN0IHBsMzUzX25hbmRfY29udHJvbGxlciB7DQo+ID4g PiArCXN0cnVjdCBuYW5kX2NvbnRyb2xsZXIgY29udHJvbGxlcjsNCj4gPiA+ICsJc3RydWN0IG5h bmRfY2hpcCBjaGlwOw0KPiA+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7DQo+ID4gPiArCXZvaWQg X19pb21lbSAqcmVnczsNCj4gPiA+ICsJdm9pZCBfX2lvbWVtICpidWZfYWRkcjsNCj4gPiA+ICsJ dTggYWRkcl9jeWNsZXM7DQo+ID4gPiArCXN0cnVjdCBjbGsgKm1jbGs7DQo+ID4gPiArCXUzMiBi dXN3aWR0aDsNCj4gPiA+ICt9Ow0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBpbnQgcGwzNTNfZWNj X29vYmxheW91dDE2X2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHNlY3Rpb24sDQo+ID4g PiArCQkJCSAgICAgc3RydWN0IG10ZF9vb2JfcmVnaW9uICpvb2JyZWdpb24pDQo+ID4gPiArew0K PiA+ID4gKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkX3RvX25hbmQobXRkKTsNCj4gPiA+ ICsNCj4gPiA+ICsJaWYgKHNlY3Rpb24gPj0gY2hpcC0+ZWNjLnN0ZXBzKQ0KPiA+ID4gKwkJcmV0 dXJuIC1FUkFOR0U7DQo+ID4gPiArDQo+ID4gPiArCW9vYnJlZ2lvbi0+b2Zmc2V0ID0gKHNlY3Rp b24gKiBjaGlwLT5lY2MuYnl0ZXMpOw0KPiA+ID4gKwlvb2JyZWdpb24tPmxlbmd0aCA9IGNoaXAt PmVjYy5ieXRlczsNCj4gPiA+ICsNCj4gPiA+ICsJcmV0dXJuIDA7DQo+ID4gPiArfQ0KPiA+ID4g Kw0KPiA+ID4gK3N0YXRpYyBpbnQgcGwzNTNfZWNjX29vYmxheW91dDE2X2ZyZWUoc3RydWN0IG10 ZF9pbmZvICptdGQsIGludCBzZWN0aW9uLA0KPiA+ID4gKwkJCQkgICAgICBzdHJ1Y3QgbXRkX29v Yl9yZWdpb24gKm9vYnJlZ2lvbikNCj4gPiA+ICt7DQo+ID4gPiArCXN0cnVjdCBuYW5kX2NoaXAg KmNoaXAgPSBtdGRfdG9fbmFuZChtdGQpOw0KPiA+ID4gKw0KPiA+ID4gKwlpZiAoc2VjdGlvbiA+ PSBjaGlwLT5lY2Muc3RlcHMpDQo+ID4gPiArCQlyZXR1cm4gLUVSQU5HRTsNCj4gPiA+ICsNCj4g PiA+ICsJb29icmVnaW9uLT5vZmZzZXQgPSAoc2VjdGlvbiAqIGNoaXAtPmVjYy5ieXRlcykgKyA4 Ow0KPiA+ID4gKwlvb2JyZWdpb24tPmxlbmd0aCA9IDg7DQo+ID4gPiArDQo+ID4gPiArCXJldHVy biAwOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG10ZF9v b2JsYXlvdXRfb3BzIHBsMzUzX2VjY19vb2JsYXlvdXQxNl9vcHMgPSB7DQo+ID4gPiArCS5lY2Mg PSBwbDM1M19lY2Nfb29ibGF5b3V0MTZfZWNjLA0KPiA+ID4gKwkuZnJlZSA9IHBsMzUzX2VjY19v b2JsYXlvdXQxNl9mcmVlLA0KPiA+ID4gK307DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIGludCBw bDM1M19lY2Nfb29ibGF5b3V0NjRfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgc2VjdGlv biwNCj4gPiA+ICsJCQkJICAgICBzdHJ1Y3QgbXRkX29vYl9yZWdpb24gKm9vYnJlZ2lvbikNCj4g PiA+ICt7DQo+ID4gPiArCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGRfdG9fbmFuZChtdGQp Ow0KPiA+ID4gKw0KPiA+ID4gKwlpZiAoc2VjdGlvbiA+PSBjaGlwLT5lY2Muc3RlcHMpDQo+ID4g PiArCQlyZXR1cm4gLUVSQU5HRTsNCj4gPiA+ICsNCj4gPiA+ICsJb29icmVnaW9uLT5vZmZzZXQg PSAoc2VjdGlvbiAqIGNoaXAtPmVjYy5ieXRlcykgKyA1MjsNCj4gPiA+ICsJb29icmVnaW9uLT5s ZW5ndGggPSBjaGlwLT5lY2MuYnl0ZXM7DQo+ID4gPiArDQo+ID4gPiArCXJldHVybiAwOw0KPiA+ ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgaW50IHBsMzUzX2VjY19vb2JsYXlvdXQ2NF9m cmVlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgc2VjdGlvbiwNCj4gPiA+ICsJCQkJICAgICAg c3RydWN0IG10ZF9vb2JfcmVnaW9uICpvb2JyZWdpb24pDQo+ID4gPiArew0KPiA+ID4gKwlzdHJ1 Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkX3RvX25hbmQobXRkKTsNCj4gPiA+ICsNCj4gPiA+ICsJ aWYgKHNlY3Rpb24pDQo+ID4gPiArCQlyZXR1cm4gLUVSQU5HRTsNCj4gPiA+ICsNCj4gPiA+ICsJ aWYgKHNlY3Rpb24gPj0gY2hpcC0+ZWNjLnN0ZXBzKQ0KPiA+ID4gKwkJcmV0dXJuIC1FUkFOR0U7 DQo+ID4gPiArDQo+ID4gPiArCW9vYnJlZ2lvbi0+b2Zmc2V0ID0gKHNlY3Rpb24gKiBjaGlwLT5l Y2MuYnl0ZXMpICsgMjsNCj4gPiA+ICsJb29icmVnaW9uLT5sZW5ndGggPSA1MDsNCj4gPiA+ICsN Cj4gPiA+ICsJcmV0dXJuIDA7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBjb25z dCBzdHJ1Y3QgbXRkX29vYmxheW91dF9vcHMgcGwzNTNfZWNjX29vYmxheW91dDY0X29wcyA9IHsN Cj4gPiA+ICsJLmVjYyA9IHBsMzUzX2VjY19vb2JsYXlvdXQ2NF9lY2MsDQo+ID4gPiArCS5mcmVl ID0gcGwzNTNfZWNjX29vYmxheW91dDY0X2ZyZWUsDQo+ID4gPiArfTsNCj4gPiA+ICsNCj4gPiA+ ICsvKiBHZW5lcmljIGZsYXNoIGJidCBkZWNyaXB0b3JzICovDQo+ID4gPiArc3RhdGljIHU4IGJi dF9wYXR0ZXJuW10gPSB7ICdCJywgJ2InLCAndCcsICcwJyB9Ow0KPiA+ID4gK3N0YXRpYyB1OCBt aXJyb3JfcGF0dGVybltdID0geyAnMScsICd0JywgJ2InLCAnQicgfTsNCj4gPiA+ICsNCj4gPiA+ ICtzdGF0aWMgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyIGJidF9tYWluX2Rlc2NyID0gew0KPiA+ID4g Kwkub3B0aW9ucyA9IE5BTkRfQkJUX0xBU1RCTE9DSyB8IE5BTkRfQkJUX0NSRUFURSB8DQo+ID4g TkFORF9CQlRfV1JJVEUNCj4gPiA+ICsJCXwgTkFORF9CQlRfMkJJVCB8IE5BTkRfQkJUX1ZFUlNJ T04gfCBOQU5EX0JCVF9QRVJDSElQLA0KPiA+ID4gKwkub2ZmcyA9IDQsDQo+ID4gPiArCS5sZW4g PSA0LA0KPiA+ID4gKwkudmVyb2ZmcyA9IDIwLA0KPiA+ID4gKwkubWF4YmxvY2tzID0gNCwNCj4g PiA+ICsJLnBhdHRlcm4gPSBiYnRfcGF0dGVybg0KPiA+ID4gK307DQo+ID4gPiArDQo+ID4gPiAr c3RhdGljIHN0cnVjdCBuYW5kX2JidF9kZXNjciBiYnRfbWlycm9yX2Rlc2NyID0gew0KPiA+ID4g Kwkub3B0aW9ucyA9IE5BTkRfQkJUX0xBU1RCTE9DSyB8IE5BTkRfQkJUX0NSRUFURSB8DQo+ID4g TkFORF9CQlRfV1JJVEUNCj4gPiA+ICsJCXwgTkFORF9CQlRfMkJJVCB8IE5BTkRfQkJUX1ZFUlNJ T04gfCBOQU5EX0JCVF9QRVJDSElQLA0KPiA+ID4gKwkub2ZmcyA9IDQsDQo+ID4gPiArCS5sZW4g PSA0LA0KPiA+ID4gKwkudmVyb2ZmcyA9IDIwLA0KPiA+ID4gKwkubWF4YmxvY2tzID0gNCwNCj4g PiA+ICsJLnBhdHRlcm4gPSBtaXJyb3JfcGF0dGVybg0KPiA+ID4gK307DQo+ID4gPiArDQo+ID4g PiArc3RhdGljIHZvaWQgcGwzNTNfbmZjX2ZvcmNlX2J5dGVfYWNjZXNzKHN0cnVjdCBuYW5kX2No aXAgKmNoaXAsDQo+ID4gPiArCQkJCQlib29sIGZvcmNlXzhiaXQpDQo+ID4gPiArew0KPiA+ID4g KwlzdHJ1Y3QgcGwzNTNfbmFuZF9jb250cm9sbGVyICp4bmZjID0NCj4gPiA+ICsJCWNvbnRhaW5l cl9vZihjaGlwLCBzdHJ1Y3QgcGwzNTNfbmFuZF9jb250cm9sbGVyLCBjaGlwKTsNCj4gPiA+ICsN Cj4gPiA+ICsJaWYgKCEoY2hpcC0+b3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTYpKQ0KPiA+ID4g KwkJcmV0dXJuOw0KPiA+ID4gKw0KPiA+ID4gKwlpZiAoZm9yY2VfOGJpdCkNCj4gPiA+ICsJCXBs MzUzX3NtY19zZXRfYnVzd2lkdGgoUEwzNTNfU01DX01FTV9XSURUSF84KTsNCj4gPiA+ICsJZWxz ZQ0KPiA+ID4gKwkJcGwzNTNfc21jX3NldF9idXN3aWR0aChQTDM1M19TTUNfTUVNX1dJRFRIXzE2 KTsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICogcGwzNTNfbmFuZF9y ZWFkX2RhdGFfb3AgLSByZWFkIGNoaXAgZGF0YSBpbnRvIGJ1ZmZlcg0KPiA+ID4gKyAqIEBjaGlw OglQb2ludGVyIHRvIHRoZSBOQU5EIGNoaXAgaW5mbyBzdHJ1Y3R1cmUNCj4gPiA+ICsgKiBAaW46 CQlQb2ludGVyIHRvIHRoZSBidWZmZXIgdG8gc3RvcmUgcmVhZCBkYXRhDQo+ID4gPiArICogQGxl bjoJTnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQNCj4gPiA+ICsgKiBAZm9yY2VfOGJpdDoJRm9yY2Ug OC1iaXQgYnVzIGFjY2Vzcw0KPiA+ID4gKyAqIFJldHVybjoJQWx3YXlzIHJldHVybiB6ZXJvDQo+ ID4gPiArICovDQo+ID4gPiArc3RhdGljIGludCBwbDM1M19uYW5kX3JlYWRfZGF0YV9vcChzdHJ1 Y3QgbmFuZF9jaGlwICpjaGlwLA0KPiA+ID4gKwkJCQkgICB1OCAqaW4sDQo+ID4gPiArCQkJCSAg IHVuc2lnbmVkIGludCBsZW4sIGJvb2wgZm9yY2VfOGJpdCkNCj4gPiA+ICt7DQo+ID4gPiArCWlu dCBpOw0KPiA+ID4gKwlzdHJ1Y3QgcGwzNTNfbmFuZF9jb250cm9sbGVyICp4bmZjID0NCj4gPiA+ ICsJCWNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgcGwzNTNfbmFuZF9jb250cm9sbGVyLCBjaGlw KTsNCj4gPiA+ICsNCj4gPiA+ICsJaWYgKGZvcmNlXzhiaXQpDQo+ID4gPiArCQlwbDM1M19uZmNf Zm9yY2VfYnl0ZV9hY2Nlc3MoY2hpcCwgdHJ1ZSk7DQo+ID4gPiArDQo+ID4gPiArCWlmICgoSVNf QUxJR05FRCgodWludDMyX3QpaW4sIHNpemVvZih1aW50MzJfdCkpICYmDQo+ID4gPiArCSAgICAg SVNfQUxJR05FRChsZW4sIHNpemVvZih1aW50MzJfdCkpKSB8fCAhZm9yY2VfOGJpdCkgew0KPiA+ ID4gKwkJdTMyICpwdHIgPSAodTMyICopaW47DQo+ID4gPiArDQo+ID4gPiArCQlsZW4gLz0gNDsN Cj4gPiA+ICsJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykNCj4gPiA+ICsJCQlwdHJbaV0gPSBy ZWFkbCh4bmZjLT5idWZfYWRkcik7DQo+ID4gPiArCX0gZWxzZSB7DQo+ID4gPiArCQlmb3IgKGkg PSAwOyBpIDwgbGVuOyBpKyspDQo+ID4gPiArCQkJaW5baV0gPSByZWFkYih4bmZjLT5idWZfYWRk cik7DQo+ID4gPiArCX0NCj4gPiA+ICsJaWYgKGZvcmNlXzhiaXQpDQo+ID4gPiArCQlwbDM1M19u ZmNfZm9yY2VfYnl0ZV9hY2Nlc3MoY2hpcCwgZmFsc2UpOw0KPiA+ID4gKw0KPiA+ID4gKwlyZXR1 cm4gMDsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICogcGwzNTNfbmFu ZF93cml0ZV9idWYgLSB3cml0ZSBidWZmZXIgdG8gY2hpcA0KPiA+ID4gKyAqIEBtdGQ6CVBvaW50 ZXIgdG8gdGhlIG10ZCBpbmZvIHN0cnVjdHVyZQ0KPiA+ID4gKyAqIEBidWY6CVBvaW50ZXIgdG8g dGhlIGJ1ZmZlciB0byBzdG9yZSB3cml0ZSBkYXRhDQo+ID4gPiArICogQGxlbjoJTnVtYmVyIG9m IGJ5dGVzIHRvIHdyaXRlDQo+ID4gPiArICogQGZvcmNlXzhiaXQ6CUZvcmNlIDgtYml0IGJ1cyBh Y2Nlc3MNCj4gPiA+ICsgKi8NCj4gPiA+ICtzdGF0aWMgdm9pZCBwbDM1M19uYW5kX3dyaXRlX2Rh dGFfb3Aoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgY29uc3QgdTggKmJ1ZiwNCj4gPiA+ICsJCQkJ ICAgICBpbnQgbGVuLCBib29sIGZvcmNlXzhiaXQpDQo+ID4gPiArew0KPiA+ID4gKwlpbnQgaTsN Cj4gPiA+ICsJc3RydWN0IHBsMzUzX25hbmRfY29udHJvbGxlciAqeG5mYyA9DQo+ID4gPiArCQlj b250YWluZXJfb2YoY2hpcCwgc3RydWN0IHBsMzUzX25hbmRfY29udHJvbGxlciwgY2hpcCk7DQo+ ID4gPiArDQo+ID4gPiArCWlmIChmb3JjZV84Yml0KQ0KPiA+ID4gKwkJcGwzNTNfbmZjX2ZvcmNl X2J5dGVfYWNjZXNzKGNoaXAsIHRydWUpOw0KPiA+ID4gKw0KPiA+ID4gKwlpZiAoKElTX0FMSUdO RUQoKHVpbnQzMl90KWJ1Ziwgc2l6ZW9mKHVpbnQzMl90KSkgJiYNCj4gPiA+ICsJICAgICBJU19B TElHTkVEKGxlbiwgc2l6ZW9mKHVpbnQzMl90KSkpIHx8ICFmb3JjZV84Yml0KSB7DQo+ID4gPiAr CQl1MzIgKnB0ciA9ICh1MzIgKilidWY7DQo+ID4gPiArDQo+ID4gPiArCQlsZW4gLz0gNDsNCj4g PiA+ICsJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykNCj4gPiA+ICsJCQl3cml0ZWwocHRyW2ld LCB4bmZjLT5idWZfYWRkcik7DQo+ID4gPiArCX0gZWxzZSB7DQo+ID4gPiArCQlmb3IgKGkgPSAw OyBpIDwgbGVuOyBpKyspDQo+ID4gPiArCQkJd3JpdGViKGJ1ZltpXSwgeG5mYy0+YnVmX2FkZHIp Ow0KPiA+ID4gKwl9DQo+ID4gPiArCWlmIChmb3JjZV84Yml0KQ0KPiA+ID4gKwkJcGwzNTNfbmZj X2ZvcmNlX2J5dGVfYWNjZXNzKGNoaXAsIGZhbHNlKTsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4g PiArc3RhdGljIGludCBwbDM1M193YWl0X2Zvcl9lY2NfZG9uZSh2b2lkKQ0KPiA+ID4gK3sNCj4g PiA+ICsJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIFBMMzUzX05BTkRfRUNDX0JV U1lfVElNRU9VVDsNCj4gPiA+ICsNCj4gPiA+ICsJZG8gew0KPiA+ID4gKwkJaWYgKHBsMzUzX3Nt Y19lY2NfaXNfYnVzeSgpKQ0KPiA+ID4gKwkJCWNwdV9yZWxheCgpOw0KPiA+ID4gKwkJZWxzZQ0K PiA+ID4gKwkJCWJyZWFrOw0KPiA+ID4gKwl9IHdoaWxlICghdGltZV9hZnRlcl9lcShqaWZmaWVz LCB0aW1lb3V0KSk7DQo+ID4gPiArDQo+ID4gPiArCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMs IHRpbWVvdXQpKSB7DQo+ID4gPiArCQlwcl9lcnIoIiVzIHRpbWVkIG91dFxuIiwgX19mdW5jX18p Ow0KPiA+ID4gKwkJcmV0dXJuIC1FVElNRURPVVQ7DQo+ID4gPiArCX0NCj4gPiA+ICsNCj4gPiA+ ICsJcmV0dXJuIDA7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAqIHBs MzUzX25hbmRfY2FsY3VsYXRlX2h3ZWNjIC0gQ2FsY3VsYXRlIEhhcmR3YXJlIEVDQw0KPiA+ID4g KyAqIEBtdGQ6CVBvaW50ZXIgdG8gdGhlIG10ZF9pbmZvIHN0cnVjdHVyZQ0KPiA+ID4gKyAqIEBk YXRhOglQb2ludGVyIHRvIHRoZSBwYWdlIGRhdGENCj4gPiA+ICsgKiBAZWNjOglQb2ludGVyIHRv IHRoZSBFQ0MgYnVmZmVyIHdoZXJlIEVDQyBkYXRhIG5lZWRzIHRvIGJlIHN0b3JlZA0KPiA+ID4g KyAqDQo+ID4gPiArICogVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIEhhcmR3YXJlIEVDQyBk YXRhIGZyb20gdGhlIGNvbnRyb2xsZXIgYW5kIHJldHVybnMNCj4gPiA+ICsgKiBFQ0MgZGF0YSBi YWNrIHRvIHRoZSBNVEQgc3Vic3lzdGVtLg0KPiA+ID4gKyAqIEl0IG9wZXJhdGVzIG9uIGEgbnVt YmVyIG9mIDUxMiBieXRlIGJsb2NrcyBvZiBOQU5EIG1lbW9yeSBhbmQgY2FuIGJlDQo+ID4gPiAr ICogcHJvZ3JhbW1lZCB0byBzdG9yZSB0aGUgRUNDIGNvZGVzIGFmdGVyIHRoZSBkYXRhIGluIG1l bW9yeS4gRm9yIHdyaXRlcywNCj4gPiA+ICsgKiB0aGUgRUNDIGlzIHdyaXR0ZW4gdG8gdGhlIHNw YXJlIGFyZWEgb2YgdGhlIHBhZ2UuIEZvciByZWFkcywgdGhlIHJlc3VsdCBvZg0KPiA+ID4gKyAq IGEgYmxvY2sgRUNDIGNoZWNrIGFyZSBtYWRlIGF2YWlsYWJsZSB0byB0aGUgZGV2aWNlIGRyaXZl ci4NCj4gPiA+ICsgKg0KPiA+ID4gKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+ID4gKyAqIHwgICAg ICAgICAgICAgICBuICogNTEyIGJsb2NrcyAgICAgICAgICAgICAgICAgIHwgZXh0cmEgIHwgZWNj ICAgIHwgICAgIHwNCj4gPiA+ICsgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8IGJsb2NrICB8IGNvZGVzICB8ICAgICB8DQo+ID4gPiArICogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQo+ID4gPiArICoNCj4gPiA+ICsgKiBUaGUgRUNDIGNhbGN1bGF0aW9uIHVzZXMg YSBzaW1wbGUgSGFtbWluZyBjb2RlLCB1c2luZyAxLWJpdCBjb3JyZWN0aW9uIDItYml0DQo+ID4g PiArICogZGV0ZWN0aW9uLiBJdCBzdGFydHMgd2hlbiBhIHZhbGlkIHJlYWQgb3Igd3JpdGUgY29t bWFuZCB3aXRoIGEgNTEyIGJ5dGUNCj4gPiA+ICsgKiBhbGlnbmVkIGFkZHJlc3MgaXMgZGV0ZWN0 ZWQgb24gdGhlIG1lbW9yeSBpbnRlcmZhY2UuDQo+ID4gPiArICoNCj4gPiA+ICsgKiBSZXR1cm46 CTAgb24gc3VjY2VzcyBvciBlcnJvciB2YWx1ZSBvbiBmYWlsdXJlDQo+ID4gPiArICovDQo+ID4g PiArc3RhdGljIGludCBwbDM1M19uYW5kX2NhbGN1bGF0ZV9od2VjYyhzdHJ1Y3QgbmFuZF9jaGlw ICpjaGlwLA0KPiA+ID4gKwkJCQkgICAgICBjb25zdCB1OCAqZGF0YSwgdTggKmVjYykNCj4gPiA+ ICt7DQo+ID4gPiArCXUzMiBlY2NfdmFsdWU7DQo+ID4gPiArCXU4IGNodW5rLCBlY2NfYnl0ZSwg ZWNjX3N0YXR1czsNCj4gPiA+ICsNCj4gPiA+ICsJZm9yIChjaHVuayA9IDA7IGNodW5rIDwgUEwz NTNfTUFYX0VDQ19DSFVOS1M7IGNodW5rKyspIHsNCj4gPiA+ICsJCS8qIFJlYWQgRUNDIHZhbHVl IGZvciBlYWNoIGJsb2NrICovDQo+ID4gPiArCQllY2NfdmFsdWUgPSBwbDM1M19zbWNfZ2V0X2Vj Y192YWwoY2h1bmspOw0KPiA+ID4gKwkJZWNjX3N0YXR1cyA9IChlY2NfdmFsdWUgPj4gUEwzNTNf TkFORF9FQ0NfVkFMSURfU0hJRlQpOw0KPiA+ID4gKw0KPiA+ID4gKwkJLyogRUNDIHZhbHVlIHZh bGlkICovDQo+ID4gPiArCQlpZiAoZWNjX3N0YXR1cyAmIFBMMzUzX05BTkRfRUNDX1ZBTElEX01B U0spIHsNCj4gPiA+ICsJCQlmb3IgKGVjY19ieXRlID0gMDsgZWNjX2J5dGUgPCBQTDM1M19NQVhf RUNDX0JZVEVTOw0KPiA+ID4gKwkJCSAgICAgZWNjX2J5dGUrKykgew0KPiA+ID4gKwkJCQkvKiBD b3B5IEVDQyBieXRlcyB0byBNVEQgYnVmZmVyICovDQo+ID4gPiArCQkJCSplY2MgPSB+ZWNjX3Zh bHVlICYgMHhGRjsNCj4gPiA+ICsJCQkJZWNjX3ZhbHVlID0gZWNjX3ZhbHVlID4+IDg7DQo+ID4g PiArCQkJCWVjYysrOw0KPiA+ID4gKwkJCX0NCj4gPiA+ICsJCX0gZWxzZSB7DQo+ID4gPiArCQkJ cHJfd2FybigiJXMgc3RhdHVzIGZhaWxlZFxuIiwgX19mdW5jX18pOw0KPiA+ID4gKwkJCXJldHVy biAtMTsNCj4gPiA+ICsJCX0NCj4gPiA+ICsJfQ0KPiA+ID4gKw0KPiA+ID4gKwlyZXR1cm4gMDsN Cj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICogcGwzNTNfbmFuZF9jb3Jy ZWN0X2RhdGEgLSBFQ0MgY29ycmVjdGlvbiBmdW5jdGlvbg0KPiA+ID4gKyAqIEBtdGQ6CVBvaW50 ZXIgdG8gdGhlIG10ZF9pbmZvIHN0cnVjdHVyZQ0KPiA+ID4gKyAqIEBidWY6CVBvaW50ZXIgdG8g dGhlIHBhZ2UgZGF0YQ0KPiA+ID4gKyAqIEByZWFkX2VjYzoJUG9pbnRlciB0byB0aGUgRUNDIHZh bHVlIHJlYWQgZnJvbSBzcGFyZSBkYXRhIGFyZWENCj4gPiA+ICsgKiBAY2FsY19lY2M6CVBvaW50 ZXIgdG8gdGhlIGNhbGN1bGF0ZWQgRUNDIHZhbHVlDQo+ID4gPiArICoNCj4gPiA+ICsgKiBUaGlz IGZ1bmN0aW9uIGNvcnJlY3RzIHRoZSBFQ0Mgc2luZ2xlIGJpdCBlcnJvcnMgJiBkZXRlY3RzIDIt Yml0IGVycm9ycy4NCj4gPiA+ICsgKg0KPiA+ID4gKyAqIFJldHVybjoJMCBpZiBubyBFQ0MgZXJy b3JzIGZvdW5kDQo+ID4gPiArICoJCTEgaWYgc2luZ2xlIGJpdCBlcnJvciBmb3VuZCBhbmQgY29y cmVjdGVkLg0KPiA+ID4gKyAqCQktMSBpZiBtdWx0aXBsZSB1bmNvcnJlY3RhYmxlIEVDQyBlcnJv cnMgZm91bmQuDQo+ID4gPiArICovDQo+ID4gPiArc3RhdGljIGludCBwbDM1M19uYW5kX2NvcnJl Y3RfZGF0YShzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCB1bnNpZ25lZCBjaGFyICpidWYsDQo+ID4g PiArCQkJCSAgIHVuc2lnbmVkIGNoYXIgKnJlYWRfZWNjLA0KPiA+ID4gKwkJCQkgICB1bnNpZ25l ZCBjaGFyICpjYWxjX2VjYykNCj4gPg0KPiA+IElzbid0IGl0IGEgcmVndWxhciBIYW1taW5nIHNv ZnR3YXJlIEVDQyBhbGdvcml0aG0/IENhbid0IHlvdSByZS11c2UgdGhlDQo+ID4gaW1wbGVtZW50 YXRpb24gYWxyZWFkeSBleGlzdGluZz8NCj4gVGhpcyBpcyBjYWxsZWQgZnJvbSBwbDM1M19uYW5k X3JlYWRfcGFnZV9od2VjYyB0byBjaGVjayB0aGUgZXJyb3JzIHVzaW5nDQo+IGNoaXAtPmVjYy5j b3JyZWN0KG10ZCwgcCwgJmVjY19jb2RlW2ldLCAmZWNjX2NhbGNbaV0pLCBvbmNlIHRoZSBwYWdl IHJlYWQoaHdlY2MpIGlzIGRvbmUuDQo+IEFuZCB0aGlzIG5lZWRzIHNvbWUgY3VzdG9tIG1hc2tz IGRlZmluZWQgYmVsb3cuDQo+ID4NCj4gPiA+ICt7DQo+ID4gPiArCXVuc2lnbmVkIGNoYXIgYml0 X2FkZHI7DQo+ID4gPiArCXVuc2lnbmVkIGludCBieXRlX2FkZHI7DQo+ID4gPiArCXVuc2lnbmVk IHNob3J0IGVjY19vZGQsIGVjY19ldmVuLCByZWFkX2VjY19sb3dlciwgcmVhZF9lY2NfdXBwZXI7 DQo+ID4gPiArCXVuc2lnbmVkIHNob3J0IGNhbGNfZWNjX2xvd2VyLCBjYWxjX2VjY191cHBlcjsN Cj4gPiA+ICsNCj4gPiA+ICsJcmVhZF9lY2NfbG93ZXIgPSAocmVhZF9lY2NbMF0gfCAocmVhZF9l Y2NbMV0gPDwgOCkpICYNCj4gPiA+ICsJCQkgIFBMMzUzX0VDQ19CSVRfTUFTSzsNCj4gPiA+ICsJ cmVhZF9lY2NfdXBwZXIgPSAoKHJlYWRfZWNjWzFdID4+IDQpIHwgKHJlYWRfZWNjWzJdIDw8IDQp KSAmDQo+ID4gPiArCQkJICBQTDM1M19FQ0NfQklUX01BU0s7DQo+ID4gPiArDQo+ID4gPiArCWNh bGNfZWNjX2xvd2VyID0gKGNhbGNfZWNjWzBdIHwgKGNhbGNfZWNjWzFdIDw8IDgpKSAmDQo+ID4g PiArCQkJICBQTDM1M19FQ0NfQklUX01BU0s7DQo+ID4gPiArCWNhbGNfZWNjX3VwcGVyID0gKChj YWxjX2VjY1sxXSA+PiA0KSB8IChjYWxjX2VjY1syXSA8PCA0KSkgJg0KPiA+ID4gKwkJCSAgUEwz NTNfRUNDX0JJVF9NQVNLOw0KPiA+ID4gKw0KPiA+ID4gKwllY2Nfb2RkID0gcmVhZF9lY2NfbG93 ZXIgXiBjYWxjX2VjY19sb3dlcjsNCj4gPiA+ICsJZWNjX2V2ZW4gPSByZWFkX2VjY191cHBlciBe IGNhbGNfZWNjX3VwcGVyOw0KPiA+ID4gKw0KPiA+ID4gKwkvKiBubyBlcnJvciAqLw0KPiA+ID4g KwlpZiAoIWVjY19vZGQgJiYgIWVjY19ldmVuKQ0KPiA+ID4gKwkJcmV0dXJuIDA7DQo+ID4gPiAr DQo+ID4gPiArCWlmIChlY2Nfb2RkID09ICh+ZWNjX2V2ZW4gJiBQTDM1M19FQ0NfQklUX01BU0sp KSB7DQo+ID4gPiArCQkvKiBiaXRzIFsxMTozXSBvZiBlcnJvciBjb2RlIGlzIGJ5dGUgb2Zmc2V0 ICovDQo+ID4gPiArCQlieXRlX2FkZHIgPSAoZWNjX29kZCA+PiAzKSAmIFBMMzUzX0VDQ19CSVRT X0JZVEVPRkZfTUFTSzsNCj4gPiA+ICsJCS8qIGJpdHMgWzI6MF0gb2YgZXJyb3IgY29kZSBpcyBi aXQgb2Zmc2V0ICovDQo+ID4gPiArCQliaXRfYWRkciA9IGVjY19vZGQgJiBQTDM1M19FQ0NfQklU U19CSVRPRkZfTUFTSzsNCj4gPiA+ICsJCS8qIFRvZ2dsaW5nIGVycm9yIGJpdCAqLw0KPiA+ID4g KwkJYnVmW2J5dGVfYWRkcl0gXj0gKEJJVChiaXRfYWRkcikpOw0KPiA+ID4gKwkJcmV0dXJuIDE7 DQo+ID4gPiArCX0NCj4gPiA+ICsNCj4gPiA+ICsJLyogb25lIGVycm9yIGluIHBhcml0eSAqLw0K PiA+ID4gKwlpZiAoaHdlaWdodDMyKGVjY19vZGQgfCBlY2NfZXZlbikgPT0gMSkNCj4gPiA+ICsJ CXJldHVybiAxOw0KPiA+ID4gKw0KPiA+ID4gKwkvKiBVbmNvcnJlY3RhYmxlIGVycm9yICovDQo+ ID4gPiArCXJldHVybiAtMTsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIHZvaWQg cGwzNTNfcHJlcGFyZV9jbWQoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwNCj4gPiA+ICsJCQkgICAg ICBpbnQgcGFnZSwgaW50IGNvbHVtbiwgaW50IHN0YXJ0X2NtZCwgaW50IGVuZF9jbWQsDQo+ID4g PiArCQkJICAgICAgYm9vbCByZWFkKQ0KPiA+ID4gK3sNCj4gPiA+ICsJdW5zaWduZWQgbG9uZyBk YXRhX3BoYXNlX2FkZHI7DQo+ID4gPiArCXUzMiBlbmRfY21kX3ZhbGlkID0gMDsNCj4gPiA+ICsJ dW5zaWduZWQgbG9uZyBjbWRfcGhhc2VfYWRkciA9IDAsIGNtZF9waGFzZV9kYXRhID0gMDsNCj4g PiA+ICsJc3RydWN0IG10ZF9pbmZvICptdGQgPSBuYW5kX3RvX210ZChjaGlwKTsNCj4gPiA+ICsN Cj4gPiA+ICsJc3RydWN0IHBsMzUzX25hbmRfY29udHJvbGxlciAqeG5mYyA9DQo+ID4gPiArCQlj b250YWluZXJfb2YoY2hpcCwgc3RydWN0IHBsMzUzX25hbmRfY29udHJvbGxlciwgY2hpcCk7DQo+ ID4gPiArDQo+ID4gPiArCWVuZF9jbWRfdmFsaWQgPSByZWFkID8gMSA6IDA7DQo+ID4gPiArDQo+ ID4gPiArCWNtZF9waGFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcgX19mb3JjZSl4bmZjLT5yZWdz ICsNCj4gPiA+ICsJCQkgKCh4bmZjLT5hZGRyX2N5Y2xlcw0KPiA+ID4gKwkJCSA8PCBBRERSX0NZ Q0xFU19TSElGVCkgfA0KPiA+ID4gKwkJCSAoZW5kX2NtZF92YWxpZCA8PCBFTkRfQ01EX1ZBTElE X1NISUZUKSB8DQo+ID4gPiArCQkJIChDT01NQU5EX1BIQVNFKSB8DQo+ID4gPiArCQkJIChlbmRf Y21kIDw8IEVORF9DTURfU0hJRlQpIHwNCj4gPiA+ICsJCQkgKHN0YXJ0X2NtZCA8PCBTVEFSVF9D TURfU0hJRlQpKTsNCj4gPiA+ICsNCj4gPiA+ICsJLyogR2V0IHRoZSBkYXRhIHBoYXNlIGFkZHJl c3MgKi8NCj4gPiA+ICsJZGF0YV9waGFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcgX19mb3JjZSl4 bmZjLT5yZWdzICsNCj4gPiA+ICsJCQkgICgoMHgwIDw8IENMRUFSX0NTX1NISUZUKSB8DQo+ID4g PiArCQkJICAoMCA8PCBFTkRfQ01EX1ZBTElEX1NISUZUKSB8DQo+ID4gPiArCQkJICAoREFUQV9Q SEFTRSkgfA0KPiA+ID4gKwkJCSAgKGVuZF9jbWQgPDwgRU5EX0NNRF9TSElGVCkgfA0KPiA+ID4g KwkJCSAgKDB4MCA8PCBFQ0NfTEFTVF9TSElGVCkpOw0KPiA+ID4gKw0KPiA+ID4gKwl4bmZjLT5i dWZfYWRkciA9ICh2b2lkIF9faW9tZW0gKiBfX2ZvcmNlKWRhdGFfcGhhc2VfYWRkcjsNCj4gPiA+ ICsNCj4gPiA+ICsJaWYgKGNoaXAtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KQ0KPiA+ID4g KwkJY29sdW1uIC89IDI7DQo+ID4gPiArCWNtZF9waGFzZV9kYXRhID0gY29sdW1uOw0KPiA+ID4g KwlpZiAobXRkLT53cml0ZXNpemUgPiBQTDM1M19OQU5EX0VDQ19TSVpFKSB7DQo+ID4gPiArCQlj bWRfcGhhc2VfZGF0YSB8PSBwYWdlIDw8IDE2Ow0KPiA+ID4gKwkJLyogQW5vdGhlciBhZGRyZXNz IGN5Y2xlIGZvciBkZXZpY2VzID4gMTI4TWlCICovDQo+ID4gPiArCQlpZiAoY2hpcC0+b3B0aW9u cyAmIE5BTkRfUk9XX0FERFJfMykgew0KPiA+ID4gKwkJCXdyaXRlbF9yZWxheGVkKGNtZF9waGFz ZV9kYXRhLA0KPiA+ID4gKwkJCQkgICAgICAgKHZvaWQgX19pb21lbSAqIF9fZm9yY2UpY21kX3Bo YXNlX2FkZHIpOw0KPiA+ID4gKwkJCWNtZF9waGFzZV9kYXRhID0gKHBhZ2UgPj4gMTYpOw0KPiA+ ID4gKwkJfQ0KPiA+ID4gKwl9IGVsc2Ugew0KPiA+ID4gKwkJY21kX3BoYXNlX2RhdGEgfD0gcGFn ZSA8PCA4Ow0KPiA+ID4gKwl9DQo+ID4gPiArDQo+ID4gPiArCXdyaXRlbF9yZWxheGVkKGNtZF9w aGFzZV9kYXRhLCAodm9pZCBfX2lvbWVtICogX19mb3JjZSljbWRfcGhhc2VfYWRkcik7DQo+ID4g PiArfQ0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAqIHBsMzUzX25hbmRfcmVhZF9vb2Ig LSBbUkVQTEFDRUFCTEVdIHRoZSBtb3N0IGNvbW1vbiBPT0IgZGF0YSByZWFkDQo+IGZ1bmN0aW9u DQo+ID4gPiArICogQG10ZDoJUG9pbnRlciB0byB0aGUgbXRkX2luZm8gc3RydWN0dXJlDQo+ID4g PiArICogQGNoaXA6CVBvaW50ZXIgdG8gdGhlIG5hbmRfY2hpcCBzdHJ1Y3R1cmUNCj4gPiA+ICsg KiBAcGFnZToJUGFnZSBudW1iZXIgdG8gcmVhZA0KPiA+ID4gKyAqDQo+ID4gPiArICogUmV0dXJu OglBbHdheXMgcmV0dXJuIHplcm8NCj4gPiA+ICsgKi8NCj4gPiA+ICtzdGF0aWMgaW50IHBsMzUz X25hbmRfcmVhZF9vb2Ioc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwNCj4gPiA+ICsJCQkgICAgICAg aW50IHBhZ2UpDQo+ID4gPiArew0KPiA+ID4gKwl1bnNpZ25lZCBsb25nIGRhdGFfcGhhc2VfYWRk cjsNCj4gPiA+ICsJdTggKnA7DQo+ID4gPiArCXN0cnVjdCBwbDM1M19uYW5kX2NvbnRyb2xsZXIg KnhuZmMgPQ0KPiA+ID4gKwkJY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBwbDM1M19uYW5kX2Nv bnRyb2xsZXIsIGNoaXApOw0KPiA+ID4gKwl1bnNpZ25lZCBsb25nIG5hbmRfb2Zmc2V0ID0gKHVu c2lnbmVkIGxvbmcgX19mb3JjZSl4bmZjLT5yZWdzOw0KPiA+ID4gKwlzdHJ1Y3QgbXRkX2luZm8g Km10ZCA9IG5hbmRfdG9fbXRkKGNoaXApOw0KPiA+ID4gKw0KPiA+ID4gKwljaGlwLT5wYWdlYnVm ID0gLTE7DQo+ID4gPiArCWlmIChtdGQtPndyaXRlc2l6ZSA8IFBMMzUzX05BTkRfRUNDX1NJWkUp DQo+ID4gPiArCQlyZXR1cm4gMDsNCj4gPiA+ICsNCj4gPiA+ICsJcGwzNTNfcHJlcGFyZV9jbWQo Y2hpcCwgcGFnZSwgbXRkLT53cml0ZXNpemUsIE5BTkRfQ01EX1JFQUQwLA0KPiA+ID4gKwkJCSAg TkFORF9DTURfUkVBRFNUQVJULCAxKTsNCj4gPiA+ICsNCj4gPiA+ICsJbmFuZF93YWl0X3JlYWR5 KGNoaXApOw0KPiA+ID4gKw0KPiA+ID4gKwlwID0gY2hpcC0+b29iX3BvaTsNCj4gPiA+ICsJcGwz NTNfbmFuZF9yZWFkX2RhdGFfb3AoY2hpcCwgcCwNCj4gPiA+ICsJCQkJKG10ZC0+b29ic2l6ZSAt DQo+ID4gPiArCQkJCVBMMzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgpLCBmYWxzZSk7DQo+ ID4gPiArCXAgKz0gKG10ZC0+b29ic2l6ZSAtIFBMMzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5H VEgpOw0KPiA+ID4gKwlkYXRhX3BoYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKXhu ZmMtPmJ1Zl9hZGRyOw0KPiA+ID4gKwlkYXRhX3BoYXNlX2FkZHIgLT0gbmFuZF9vZmZzZXQ7DQo+ ID4gPiArCWRhdGFfcGhhc2VfYWRkciB8PSBQTDM1M19OQU5EX0NMRUFSX0NTOw0KPiA+ID4gKwlk YXRhX3BoYXNlX2FkZHIgKz0gbmFuZF9vZmZzZXQ7DQo+ID4gPiArCXhuZmMtPmJ1Zl9hZGRyID0g KHZvaWQgX19pb21lbSAqIF9fZm9yY2UpZGF0YV9waGFzZV9hZGRyOw0KPiA+ID4gKwlwbDM1M19u YW5kX3JlYWRfZGF0YV9vcChjaGlwLCBwLCBQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RI LA0KPiA+ID4gKwkJCQlmYWxzZSk7DQo+ID4gPiArDQo+ID4gPiArCXJldHVybiAwOw0KPiA+ID4g K30NCj4gPiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgKiBwbDM1M19uYW5kX3dyaXRlX29vYiAt IFtSRVBMQUNFQUJMRV0gdGhlIG1vc3QgY29tbW9uIE9PQiBkYXRhIHdyaXRlDQo+ID4gZnVuY3Rp b24NCj4gPiA+ICsgKiBAbXRkOglQb2ludGVyIHRvIHRoZSBtdGQgaW5mbyBzdHJ1Y3R1cmUNCj4g PiA+ICsgKiBAY2hpcDoJUG9pbnRlciB0byB0aGUgTkFORCBjaGlwIGluZm8gc3RydWN0dXJlDQo+ ID4gPiArICogQHBhZ2U6CVBhZ2UgbnVtYmVyIHRvIHdyaXRlDQo+ID4gPiArICoNCj4gPiA+ICsg KiBSZXR1cm46CVplcm8gb24gc3VjY2VzcyBhbmQgRUlPIG9uIGZhaWx1cmUNCj4gPiA+ICsgKi8N Cj4gPiA+ICtzdGF0aWMgaW50IHBsMzUzX25hbmRfd3JpdGVfb29iKHN0cnVjdCBuYW5kX2NoaXAg KmNoaXAsDQo+ID4gPiArCQkJCWludCBwYWdlKQ0KPiA+ID4gK3sNCj4gPiA+ICsJY29uc3QgdTgg KmJ1ZiA9IGNoaXAtPm9vYl9wb2k7DQo+ID4gPiArCXVuc2lnbmVkIGxvbmcgZGF0YV9waGFzZV9h ZGRyOw0KPiA+ID4gKwlzdHJ1Y3QgcGwzNTNfbmFuZF9jb250cm9sbGVyICp4bmZjID0NCj4gPiA+ ICsJCWNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgcGwzNTNfbmFuZF9jb250cm9sbGVyLCBjaGlw KTsNCj4gPiA+ICsJdW5zaWduZWQgbG9uZyBuYW5kX29mZnNldCA9ICh1bnNpZ25lZCBsb25nIF9f Zm9yY2UpeG5mYy0+cmVnczsNCj4gPiA+ICsJc3RydWN0IG10ZF9pbmZvICptdGQgPSBuYW5kX3Rv X210ZChjaGlwKTsNCj4gPiA+ICsJdTMyIGFkZHJjeWNsZXMgPSAwOw0KPiA+ID4gKw0KPiA+ID4g KwljaGlwLT5wYWdlYnVmID0gLTE7DQo+ID4gPiArCWFkZHJjeWNsZXMgPSB4bmZjLT5hZGRyX2N5 Y2xlczsNCj4gPiA+ICsJcGwzNTNfcHJlcGFyZV9jbWQoY2hpcCwgcGFnZSwgbXRkLT53cml0ZXNp emUsIE5BTkRfQ01EX1NFUUlOLA0KPiA+ID4gKwkJCSAgTkFORF9DTURfUEFHRVBST0csIDApOw0K PiA+ID4gKw0KPiA+ID4gKwlwbDM1M19uYW5kX3dyaXRlX2RhdGFfb3AoY2hpcCwgYnVmLA0KPiA+ ID4gKwkJCQkgKG10ZC0+b29ic2l6ZSAtDQo+ID4gPiArCQkJCSBQTDM1M19OQU5EX0xBU1RfVFJB TlNGRVJfTEVOR1RIKSwgZmFsc2UpOw0KPiA+ID4gKwlidWYgKz0gKG10ZC0+b29ic2l6ZSAtIFBM MzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgpOw0KPiA+ID4gKw0KPiA+ID4gKwlkYXRhX3Bo YXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKXhuZmMtPmJ1Zl9hZGRyOw0KPiA+ID4g KwlkYXRhX3BoYXNlX2FkZHIgLT0gbmFuZF9vZmZzZXQ7DQo+ID4gPiArCWRhdGFfcGhhc2VfYWRk ciB8PSBQTDM1M19OQU5EX0NMRUFSX0NTOw0KPiA+ID4gKwlkYXRhX3BoYXNlX2FkZHIgfD0gKDEg PDwgRU5EX0NNRF9WQUxJRF9TSElGVCk7DQo+ID4gPiArCWRhdGFfcGhhc2VfYWRkciArPSBuYW5k X29mZnNldDsNCj4gPiA+ICsJeG5mYy0+YnVmX2FkZHIgPSAodm9pZCBfX2lvbWVtICogX19mb3Jj ZSlkYXRhX3BoYXNlX2FkZHI7DQo+ID4gPiArCXBsMzUzX25hbmRfd3JpdGVfZGF0YV9vcChjaGlw LCBidWYsIFBMMzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgsDQo+ID4gPiArCQkJCSBmYWxz ZSk7DQo+ID4gPiArCW5hbmRfd2FpdF9yZWFkeShjaGlwKTsNCj4gPiA+ICsNCj4gPiA+ICsJcmV0 dXJuIDA7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAqIHBsMzUzX25h bmRfcmVhZF9wYWdlX3JhdyAtIFtJbnRlcm5dIHJlYWQgcmF3IHBhZ2UgZGF0YSB3aXRob3V0IGVj Yw0KPiA+ID4gKyAqIEBtdGQ6CQlQb2ludGVyIHRvIHRoZSBtdGQgaW5mbyBzdHJ1Y3R1cmUNCj4g PiA+ICsgKiBAY2hpcDoJCVBvaW50ZXIgdG8gdGhlIE5BTkQgY2hpcCBpbmZvIHN0cnVjdHVyZQ0K PiA+ID4gKyAqIEBidWY6CQlQb2ludGVyIHRvIHRoZSBkYXRhIGJ1ZmZlcg0KPiA+ID4gKyAqIEBv b2JfcmVxdWlyZWQ6CUNhbGxlciByZXF1aXJlcyBPT0IgZGF0YSByZWFkIHRvIGNoaXAtPm9vYl9w b2kNCj4gPiA+ICsgKiBAcGFnZToJCVBhZ2UgbnVtYmVyIHRvIHJlYWQNCj4gPiA+ICsgKg0KPiA+ ID4gKyAqIFJldHVybjoJQWx3YXlzIHJldHVybiB6ZXJvDQo+ID4gPiArICovDQo+ID4gPiArc3Rh dGljIGludCBwbDM1M19uYW5kX3JlYWRfcGFnZV9yYXcoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwN Cj4gPiA+ICsJCQkJICAgIHU4ICpidWYsIGludCBvb2JfcmVxdWlyZWQsIGludCBwYWdlKQ0KPiA+ ID4gK3sNCj4gPiA+ICsJdW5zaWduZWQgbG9uZyBkYXRhX3BoYXNlX2FkZHI7DQo+ID4gPiArCXU4 ICpwOw0KPiA+ID4gKwlzdHJ1Y3QgcGwzNTNfbmFuZF9jb250cm9sbGVyICp4bmZjID0NCj4gPiA+ ICsJCWNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgcGwzNTNfbmFuZF9jb250cm9sbGVyLCBjaGlw KTsNCj4gPiA+ICsJdW5zaWduZWQgbG9uZyBuYW5kX29mZnNldCA9ICh1bnNpZ25lZCBsb25nIF9f Zm9yY2UpeG5mYy0+cmVnczsNCj4gPiA+ICsJc3RydWN0IG10ZF9pbmZvICptdGQgPSBuYW5kX3Rv X210ZChjaGlwKTsNCj4gPiA+ICsNCj4gPiA+ICsJcGwzNTNfcHJlcGFyZV9jbWQoY2hpcCwgcGFn ZSwgMCwgTkFORF9DTURfUkVBRDAsDQo+ID4gPiArCQkJICBOQU5EX0NNRF9SRUFEU1RBUlQsIDEp Ow0KPiA+ID4gKwluYW5kX3dhaXRfcmVhZHkoY2hpcCk7DQo+ID4gPiArCXBsMzUzX25hbmRfcmVh ZF9kYXRhX29wKGNoaXAsIGJ1ZiwgbXRkLT53cml0ZXNpemUsIGZhbHNlKTsNCj4gPiA+ICsJcCA9 IGNoaXAtPm9vYl9wb2k7DQo+ID4gPiArCXBsMzUzX25hbmRfcmVhZF9kYXRhX29wKGNoaXAsIHAs DQo+ID4gPiArCQkJCShtdGQtPm9vYnNpemUgLQ0KPiA+ID4gKwkJCQlQTDM1M19OQU5EX0xBU1Rf VFJBTlNGRVJfTEVOR1RIKSwgZmFsc2UpOw0KPiA+ID4gKwlwICs9IChtdGQtPm9vYnNpemUgLSBQ TDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RIKTsNCj4gPiA+ICsNCj4gPiA+ICsJZGF0YV9w aGFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcgX19mb3JjZSl4bmZjLT5idWZfYWRkcjsNCj4gPiA+ ICsJZGF0YV9waGFzZV9hZGRyIC09IG5hbmRfb2Zmc2V0Ow0KPiA+ID4gKwlkYXRhX3BoYXNlX2Fk ZHIgfD0gUEwzNTNfTkFORF9DTEVBUl9DUzsNCj4gPiA+ICsJZGF0YV9waGFzZV9hZGRyICs9IG5h bmRfb2Zmc2V0Ow0KPiA+ID4gKwl4bmZjLT5idWZfYWRkciA9ICh2b2lkIF9faW9tZW0gKiBfX2Zv cmNlKWRhdGFfcGhhc2VfYWRkcjsNCj4gPiA+ICsNCj4gPiA+ICsJcGwzNTNfbmFuZF9yZWFkX2Rh dGFfb3AoY2hpcCwgcCwgUEwzNTNfTkFORF9MQVNUX1RSQU5TRkVSX0xFTkdUSCwNCj4gPiA+ICsJ CQkJZmFsc2UpOw0KPiA+ID4gKw0KPiA+ID4gKwlyZXR1cm4gMDsNCj4gPiA+ICt9DQo+ID4gPiAr DQo+ID4gPiArLyoqDQo+ID4gPiArICogcGwzNTNfbmFuZF93cml0ZV9wYWdlX3JhdyAtIFtJbnRl cm5dIHJhdyBwYWdlIHdyaXRlIGZ1bmN0aW9uDQo+ID4gPiArICogQG10ZDoJCVBvaW50ZXIgdG8g dGhlIG10ZCBpbmZvIHN0cnVjdHVyZQ0KPiA+ID4gKyAqIEBjaGlwOgkJUG9pbnRlciB0byB0aGUg TkFORCBjaGlwIGluZm8gc3RydWN0dXJlDQo+ID4gPiArICogQGJ1ZjoJCVBvaW50ZXIgdG8gdGhl IGRhdGEgYnVmZmVyDQo+ID4gPiArICogQG9vYl9yZXF1aXJlZDoJQ2FsbGVyIHJlcXVpcmVzIE9P QiBkYXRhIHJlYWQgdG8gY2hpcC0+b29iX3BvaQ0KPiA+ID4gKyAqIEBwYWdlOgkJUGFnZSBudW1i ZXIgdG8gd3JpdGUNCj4gPiA+ICsgKg0KPiA+ID4gKyAqIFJldHVybjoJQWx3YXlzIHJldHVybiB6 ZXJvDQo+ID4gPiArICovDQo+ID4gPiArc3RhdGljIGludCBwbDM1M19uYW5kX3dyaXRlX3BhZ2Vf cmF3KHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsDQo+ID4gPiArCQkJCSAgICAgY29uc3QgdTggKmJ1 ZiwgaW50IG9vYl9yZXF1aXJlZCwNCj4gPiA+ICsJCQkJICAgICBpbnQgcGFnZSkNCj4gPiA+ICt7 DQo+ID4gPiArCXVuc2lnbmVkIGxvbmcgZGF0YV9waGFzZV9hZGRyOw0KPiA+ID4gKwl1OCAqcDsN Cj4gPiA+ICsJc3RydWN0IHBsMzUzX25hbmRfY29udHJvbGxlciAqeG5mYyA9DQo+ID4gPiArCQlj b250YWluZXJfb2YoY2hpcCwgc3RydWN0IHBsMzUzX25hbmRfY29udHJvbGxlciwgY2hpcCk7DQo+ ID4gPiArCXVuc2lnbmVkIGxvbmcgbmFuZF9vZmZzZXQgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNl KXhuZmMtPnJlZ3M7DQo+ID4gPiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQo Y2hpcCk7DQo+ID4gPiArDQo+ID4gPiArCXBsMzUzX3ByZXBhcmVfY21kKGNoaXAsIHBhZ2UsIDAs IE5BTkRfQ01EX1NFUUlOLA0KPiA+ID4gKwkJCSAgTkFORF9DTURfUEFHRVBST0csIDApOw0KPiA+ ID4gKwlwbDM1M19uYW5kX3dyaXRlX2RhdGFfb3AoY2hpcCwgYnVmLCBtdGQtPndyaXRlc2l6ZSwg ZmFsc2UpOw0KPiA+ID4gKwlwID0gY2hpcC0+b29iX3BvaTsNCj4gPiA+ICsJcGwzNTNfbmFuZF93 cml0ZV9kYXRhX29wKGNoaXAsIHAsDQo+ID4gPiArCQkJCSAobXRkLT5vb2JzaXplIC0NCj4gPiA+ ICsJCQkJIFBMMzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgpLCBmYWxzZSk7DQo+ID4gPiAr CXAgKz0gKG10ZC0+b29ic2l6ZSAtIFBMMzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgpOw0K PiA+ID4gKw0KPiA+ID4gKwlkYXRhX3BoYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNl KXhuZmMtPmJ1Zl9hZGRyOw0KPiA+ID4gKwlkYXRhX3BoYXNlX2FkZHIgLT0gbmFuZF9vZmZzZXQ7 DQo+ID4gPiArCWRhdGFfcGhhc2VfYWRkciB8PSBQTDM1M19OQU5EX0NMRUFSX0NTOw0KPiA+ID4g KwlkYXRhX3BoYXNlX2FkZHIgfD0gKDEgPDwgRU5EX0NNRF9WQUxJRF9TSElGVCk7DQo+ID4gPiAr CWRhdGFfcGhhc2VfYWRkciArPSBuYW5kX29mZnNldDsNCj4gPiA+ICsJeG5mYy0+YnVmX2FkZHIg PSAodm9pZCBfX2lvbWVtICogX19mb3JjZSlkYXRhX3BoYXNlX2FkZHI7DQo+ID4gPiArCXBsMzUz X25hbmRfd3JpdGVfZGF0YV9vcChjaGlwLCBwLCBQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVO R1RILA0KPiA+ID4gKwkJCQkgZmFsc2UpOw0KPiA+ID4gKw0KPiA+ID4gKwlyZXR1cm4gMDsNCj4g PiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICogbmFuZF93cml0ZV9wYWdlX2h3 ZWNjIC0gSGFyZHdhcmUgRUNDIGJhc2VkIHBhZ2Ugd3JpdGUgZnVuY3Rpb24NCj4gPiA+ICsgKiBA bXRkOgkJUG9pbnRlciB0byB0aGUgbXRkIGluZm8gc3RydWN0dXJlDQo+ID4gPiArICogQGNoaXA6 CQlQb2ludGVyIHRvIHRoZSBOQU5EIGNoaXAgaW5mbyBzdHJ1Y3R1cmUNCj4gPiA+ICsgKiBAYnVm OgkJUG9pbnRlciB0byB0aGUgZGF0YSBidWZmZXINCj4gPiA+ICsgKiBAb29iX3JlcXVpcmVkOglD YWxsZXIgcmVxdWlyZXMgT09CIGRhdGEgcmVhZCB0byBjaGlwLT5vb2JfcG9pDQo+ID4gPiArICog QHBhZ2U6CQlQYWdlIG51bWJlciB0byB3cml0ZQ0KPiA+ID4gKyAqDQo+ID4gPiArICogVGhpcyBm dW5jdGlvbnMgd3JpdGVzIGRhdGEgYW5kIGhhcmR3YXJlIGdlbmVyYXRlZCBFQ0MgdmFsdWVzIGlu IHRvIHRoZSBwYWdlLg0KPiA+ID4gKyAqDQo+ID4gPiArICogUmV0dXJuOglBbHdheXMgcmV0dXJu IHplcm8NCj4gPiA+ICsgKi8NCj4gPiA+ICtzdGF0aWMgaW50IHBsMzUzX25hbmRfd3JpdGVfcGFn ZV9od2VjYyhzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLA0KPiA+ID4gKwkJCQkgICAgICAgY29uc3Qg dTggKmJ1ZiwgaW50IG9vYl9yZXF1aXJlZCwNCj4gPiA+ICsJCQkJICAgICAgIGludCBwYWdlKQ0K PiA+ID4gK3sNCj4gPiA+ICsJaW50IGVjY3NpemUgPSBjaGlwLT5lY2Muc2l6ZTsNCj4gPiA+ICsJ aW50IGVjY3N0ZXBzID0gY2hpcC0+ZWNjLnN0ZXBzOw0KPiA+ID4gKwl1OCAqZWNjX2NhbGMgPSBj aGlwLT5lY2MuY2FsY19idWY7DQo+ID4gPiArCXU4ICpvb2JfcHRyOw0KPiA+ID4gKwljb25zdCB1 OCAqcCA9IGJ1ZjsNCj4gPiA+ICsJdTMyIHJldDsNCj4gPiA+ICsJdW5zaWduZWQgbG9uZyBkYXRh X3BoYXNlX2FkZHI7DQo+ID4gPiArCXN0cnVjdCBwbDM1M19uYW5kX2NvbnRyb2xsZXIgKnhuZmMg PQ0KPiA+ID4gKwkJY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBwbDM1M19uYW5kX2NvbnRyb2xs ZXIsIGNoaXApOw0KPiA+ID4gKwl1bnNpZ25lZCBsb25nIG5hbmRfb2Zmc2V0ID0gKHVuc2lnbmVk IGxvbmcgX19mb3JjZSl4bmZjLT5yZWdzOw0KPiA+ID4gKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9 IG5hbmRfdG9fbXRkKGNoaXApOw0KPiA+ID4gKw0KPiA+ID4gKwlwbDM1M19wcmVwYXJlX2NtZChj aGlwLCBwYWdlLCAwLCBOQU5EX0NNRF9TRVFJTiwNCj4gPiA+ICsJCQkgIE5BTkRfQ01EX1BBR0VQ Uk9HLCAwKTsNCj4gPiA+ICsNCj4gPiA+ICsJZm9yICggOyAoZWNjc3RlcHMgLSAxKTsgZWNjc3Rl cHMtLSkgew0KPiA+ID4gKwkJcGwzNTNfbmFuZF93cml0ZV9kYXRhX29wKGNoaXAsIHAsIGVjY3Np emUsIGZhbHNlKTsNCj4gPiA+ICsJCXAgKz0gZWNjc2l6ZTsNCj4gPiA+ICsJfQ0KPiA+ID4gKwlw bDM1M19uYW5kX3dyaXRlX2RhdGFfb3AoY2hpcCwgcCwNCj4gPiA+ICsJCQkJIChlY2NzaXplIC0g UEwzNTNfTkFORF9MQVNUX1RSQU5TRkVSX0xFTkdUSCksDQo+ID4gPiArCQkJCSBmYWxzZSk7DQo+ ID4gPiArCXAgKz0gKGVjY3NpemUgLSBQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RIKTsN Cj4gPiA+ICsNCj4gPiA+ICsJLyogU2V0IEVDQyBMYXN0IGJpdCB0byAxICovDQo+ID4gPiArCWRh dGFfcGhhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpeG5mYy0+YnVmX2FkZHI7DQo+ ID4gPiArCWRhdGFfcGhhc2VfYWRkciAtPSBuYW5kX29mZnNldDsNCj4gPiA+ICsJZGF0YV9waGFz ZV9hZGRyIHw9IFBMMzUzX05BTkRfRUNDX0xBU1Q7DQo+ID4gPiArCWRhdGFfcGhhc2VfYWRkciAr PSBuYW5kX29mZnNldDsNCj4gPiA+ICsJeG5mYy0+YnVmX2FkZHIgPSAodm9pZCBfX2lvbWVtICog X19mb3JjZSlkYXRhX3BoYXNlX2FkZHI7DQo+ID4gPiArCXBsMzUzX25hbmRfd3JpdGVfZGF0YV9v cChjaGlwLCBwLCBQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RILA0KPiA+ID4gKwkJCQkg ZmFsc2UpOw0KPiA+ID4gKw0KPiA+ID4gKwkvKiBXYWl0IHRpbGwgdGhlIEVDQyBvcGVyYXRpb24g aXMgY29tcGxldGUgb3IgdGltZW91dCAqLw0KPiA+ID4gKwlyZXQgPSBwbDM1M193YWl0X2Zvcl9l Y2NfZG9uZSgpOw0KPiA+ID4gKwlpZiAocmV0KQ0KPiA+ID4gKwkJZGV2X2Vycih4bmZjLT5kZXYs ICJFQ0MgVGltZW91dFxuIik7DQo+ID4gPiArCXAgPSBidWY7DQo+ID4gPiArCXJldCA9IGNoaXAt PmVjYy5jYWxjdWxhdGUoY2hpcCwgcCwgJmVjY19jYWxjWzBdKTsNCj4gPiA+ICsJaWYgKHJldCkN Cj4gPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gPiArDQo+ID4gPiArCS8qIFdhaXQgZm9yIEVDQyB0 byBiZSBjYWxjdWxhdGVkIGFuZCByZWFkIHRoZSBlcnJvciB2YWx1ZXMgKi8NCj4gPiA+ICsJcmV0 ID0gbXRkX29vYmxheW91dF9zZXRfZWNjYnl0ZXMobXRkLCBlY2NfY2FsYywgY2hpcC0+b29iX3Bv aSwNCj4gPiA+ICsJCQkJCSAwLCBjaGlwLT5lY2MudG90YWwpOw0KPiA+ID4gKwlpZiAocmV0KQ0K PiA+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiA+ICsJLyogQ2xlYXIgRUNDIGxhc3QgYml0ICovDQo+ ID4gPiArCWRhdGFfcGhhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpeG5mYy0+YnVm X2FkZHI7DQo+ID4gPiArCWRhdGFfcGhhc2VfYWRkciAtPSBuYW5kX29mZnNldDsNCj4gPiA+ICsJ ZGF0YV9waGFzZV9hZGRyICY9IH5QTDM1M19OQU5EX0VDQ19MQVNUOw0KPiA+ID4gKwlkYXRhX3Bo YXNlX2FkZHIgKz0gbmFuZF9vZmZzZXQ7DQo+ID4gPiArCXhuZmMtPmJ1Zl9hZGRyID0gKHZvaWQg X19pb21lbSAqIF9fZm9yY2UpZGF0YV9waGFzZV9hZGRyOw0KPiA+ID4gKw0KPiA+ID4gKwkvKiBX cml0ZSB0aGUgc3BhcmUgYXJlYSB3aXRoIEVDQyBieXRlcyAqLw0KPiA+ID4gKwlvb2JfcHRyID0g Y2hpcC0+b29iX3BvaTsNCj4gPiA+ICsJcGwzNTNfbmFuZF93cml0ZV9kYXRhX29wKGNoaXAsIG9v Yl9wdHIsDQo+ID4gPiArCQkJCSAobXRkLT5vb2JzaXplIC0NCj4gPiA+ICsJCQkJIFBMMzUzX05B TkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgpLCBmYWxzZSk7DQo+ID4gPiArDQo+ID4gPiArCWRhdGFf cGhhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpeG5mYy0+YnVmX2FkZHI7DQo+ID4g PiArCWRhdGFfcGhhc2VfYWRkciAtPSBuYW5kX29mZnNldDsNCj4gPiA+ICsJZGF0YV9waGFzZV9h ZGRyIHw9IFBMMzUzX05BTkRfQ0xFQVJfQ1M7DQo+ID4gPiArCWRhdGFfcGhhc2VfYWRkciB8PSAo MSA8PCBFTkRfQ01EX1ZBTElEX1NISUZUKTsNCj4gPiA+ICsJZGF0YV9waGFzZV9hZGRyICs9IG5h bmRfb2Zmc2V0Ow0KPiA+ID4gKwl4bmZjLT5idWZfYWRkciA9ICh2b2lkIF9faW9tZW0gKiBfX2Zv cmNlKWRhdGFfcGhhc2VfYWRkcjsNCj4gPiA+ICsJb29iX3B0ciArPSAobXRkLT5vb2JzaXplIC0g UEwzNTNfTkFORF9MQVNUX1RSQU5TRkVSX0xFTkdUSCk7DQo+ID4gPiArCXBsMzUzX25hbmRfd3Jp dGVfZGF0YV9vcChjaGlwLCBvb2JfcHRyLA0KPiA+IFBMMzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9M RU5HVEgsDQo+ID4gPiArCQkJCSBmYWxzZSk7DQo+ID4gPiArCW5hbmRfd2FpdF9yZWFkeShjaGlw KTsNCj4gPiA+ICsNCj4gPiA+ICsJcmV0dXJuIDA7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4g Ky8qKg0KPiA+ID4gKyAqIHBsMzUzX25hbmRfcmVhZF9wYWdlX2h3ZWNjIC0gSGFyZHdhcmUgRUND IGJhc2VkIHBhZ2UgcmVhZCBmdW5jdGlvbg0KPiA+ID4gKyAqIEBtdGQ6CQlQb2ludGVyIHRvIHRo ZSBtdGQgaW5mbyBzdHJ1Y3R1cmUNCj4gPiA+ICsgKiBAY2hpcDoJCVBvaW50ZXIgdG8gdGhlIE5B TkQgY2hpcCBpbmZvIHN0cnVjdHVyZQ0KPiA+ID4gKyAqIEBidWY6CQlQb2ludGVyIHRvIHRoZSBi dWZmZXIgdG8gc3RvcmUgcmVhZCBkYXRhDQo+ID4gPiArICogQG9vYl9yZXF1aXJlZDoJQ2FsbGVy IHJlcXVpcmVzIE9PQiBkYXRhIHJlYWQgdG8gY2hpcC0+b29iX3BvaQ0KPiA+ID4gKyAqIEBwYWdl OgkJUGFnZSBudW1iZXIgdG8gcmVhZA0KPiA+ID4gKyAqDQo+ID4gPiArICogVGhpcyBmdW5jdGlv bnMgcmVhZHMgZGF0YSBhbmQgY2hlY2tzIHRoZSBkYXRhIGludGVncml0eSBieSBjb21wYXJpbmcN Cj4gPiA+ICsgKiBoYXJkd2FyZSBnZW5lcmF0ZWQgRUNDIHZhbHVlcyBhbmQgcmVhZCBFQ0MgdmFs dWVzIGZyb20gc3BhcmUgYXJlYS4NCj4gPiA+ICsgKiBUaGVyZSBpcyBhIGxpbWl0YXRpb24gaW4g U01DIGNvbnRyb2xsZXIsIHRoYXQgd2UgbXVzdCBzZXQgRUNDIExBU1Qgb24NCj4gPiA+ICsgKiBs YXN0IGRhdGEgcGhhc2UgYWNjZXNzLCB0byB0ZWxsIEVDQyBibG9jayBub3QgdG8gZXhwZWN0IGFu eSBkYXRhIGZ1cnRoZXIuDQo+ID4gPiArICogRXg6ICBXaGVuIG51bWJlciBvZiBFQ0MgU1RFUFMg YXJlIDQsIHRoZW4gdGlsbCAzIHdlIHdpbGwgd3JpdGUgdG8gZmxhc2gNCj4gPiA+ICsgKiB1c2lu ZyBTTUMgd2l0aCBIVyBFQ0MgZW5hYmxlZC4gQW5kIGZvciB0aGUgbGFzdCBFQ0MgU1RFUCwgd2Ug d2lsbCBzdWJ0cmFjdA0KPiA+ID4gKyAqIDRieXRlcyBmcm9tIHBhZ2Ugc2l6ZSwgYW5kIHdpbGwg aW5pdGlhdGUgYSB0cmFuc2Zlci4gQW5kIHRoZSByZW1haW5pbmcgNCBhcw0KPiA+ID4gKyAqIG9u ZSBtb3JlIHRyYW5zZmVyIHdpdGggRUNDX0xBU1QgYml0IHNldCBpbiBOQU5EIGRhdGEgcGhhc2Ug cmVnaXN0ZXIgdG8NCj4gPiA+ICsgKiBub3RpZnkgRUNDIGJsb2NrIG5vdCB0byBleHBlY3QgYW55 IG1vcmUgZGF0YS4gVGhlIGxhc3QgYmxvY2sgc2hvdWxkIGJlIGFsaWduDQo+ID4gPiArICogd2l0 aCBlbmQgb2YgNTEyIGJ5dGUgYmxvY2suIEJlY2F1c2Ugb2YgdGhpcyBsaW1pdGF0aW9uLCB3ZSBh cmUgbm90IHVzaW5nDQo+ID4gPiArICogY29yZSByb3V0aW5lcy4NCj4gPiA+ICsgKg0KPiA+ID4g KyAqIFJldHVybjoJMCBhbHdheXMgYW5kIHVwZGF0ZXMgRUNDIG9wZXJhdGlvbiBzdGF0dXMgaW4g dG8gTVREIHN0cnVjdHVyZQ0KPiA+ID4gKyAqLw0KPiA+ID4gK3N0YXRpYyBpbnQgcGwzNTNfbmFu ZF9yZWFkX3BhZ2VfaHdlY2Moc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwNCj4gPiA+ICsJCQkJICAg ICAgdTggKmJ1ZiwgaW50IG9vYl9yZXF1aXJlZCwgaW50IHBhZ2UpDQo+ID4gPiArew0KPiA+ID4g KwlpbnQgaSwgc3RhdCwgZWNjc2l6ZSA9IGNoaXAtPmVjYy5zaXplOw0KPiA+ID4gKwlpbnQgZWNj Ynl0ZXMgPSBjaGlwLT5lY2MuYnl0ZXM7DQo+ID4gPiArCWludCBlY2NzdGVwcyA9IGNoaXAtPmVj Yy5zdGVwczsNCj4gPiA+ICsJdTggKnAgPSBidWY7DQo+ID4gPiArCXU4ICplY2NfY2FsYyA9IGNo aXAtPmVjYy5jYWxjX2J1ZjsNCj4gPiA+ICsJdTggKmVjYyA9IGNoaXAtPmVjYy5jb2RlX2J1ZjsN Cj4gPiA+ICsJdW5zaWduZWQgaW50IG1heF9iaXRmbGlwcyA9IDA7DQo+ID4gPiArCXU4ICpvb2Jf cHRyOw0KPiA+ID4gKwl1MzIgcmV0Ow0KPiA+ID4gKwl1bnNpZ25lZCBsb25nIGRhdGFfcGhhc2Vf YWRkcjsNCj4gPiA+ICsJc3RydWN0IHBsMzUzX25hbmRfY29udHJvbGxlciAqeG5mYyA9DQo+ID4g PiArCQljb250YWluZXJfb2YoY2hpcCwgc3RydWN0IHBsMzUzX25hbmRfY29udHJvbGxlciwgY2hp cCk7DQo+ID4gPiArCXVuc2lnbmVkIGxvbmcgbmFuZF9vZmZzZXQgPSAodW5zaWduZWQgbG9uZyBf X2ZvcmNlKXhuZmMtPnJlZ3M7DQo+ID4gPiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90 b19tdGQoY2hpcCk7DQo+ID4gPiArDQo+ID4gPiArCXBsMzUzX3ByZXBhcmVfY21kKGNoaXAsIHBh Z2UsIDAsIE5BTkRfQ01EX1JFQUQwLA0KPiA+ID4gKwkJCSAgTkFORF9DTURfUkVBRFNUQVJULCAx KTsNCj4gPiA+ICsJbmFuZF93YWl0X3JlYWR5KGNoaXApOw0KPiA+ID4gKw0KPiA+ID4gKwlmb3Ig KCA7IChlY2NzdGVwcyAtIDEpOyBlY2NzdGVwcy0tKSB7DQo+ID4gPiArCQlwbDM1M19uYW5kX3Jl YWRfZGF0YV9vcChjaGlwLCBwLCBlY2NzaXplLCBmYWxzZSk7DQo+ID4gPiArCQlwICs9IGVjY3Np emU7DQo+ID4gPiArCX0NCj4gPiA+ICsJcGwzNTNfbmFuZF9yZWFkX2RhdGFfb3AoY2hpcCwgcCwN Cj4gPiA+ICsJCQkJKGVjY3NpemUgLSBQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJfTEVOR1RIKSwN Cj4gPiA+ICsJCQkJZmFsc2UpOw0KPiA+ID4gKwlwICs9IChlY2NzaXplIC0gUEwzNTNfTkFORF9M QVNUX1RSQU5TRkVSX0xFTkdUSCk7DQo+ID4gPiArDQo+ID4gPiArCS8qIFNldCBFQ0MgTGFzdCBi aXQgdG8gMSAqLw0KPiA+ID4gKwlkYXRhX3BoYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZyBfX2Zv cmNlKXhuZmMtPmJ1Zl9hZGRyOw0KPiA+ID4gKwlkYXRhX3BoYXNlX2FkZHIgLT0gbmFuZF9vZmZz ZXQ7DQo+ID4gPiArCWRhdGFfcGhhc2VfYWRkciB8PSBQTDM1M19OQU5EX0VDQ19MQVNUOw0KPiA+ ID4gKwlkYXRhX3BoYXNlX2FkZHIgKz0gbmFuZF9vZmZzZXQ7DQo+ID4gPiArCXhuZmMtPmJ1Zl9h ZGRyID0gKHZvaWQgX19pb21lbSAqIF9fZm9yY2UpZGF0YV9waGFzZV9hZGRyOw0KPiA+ID4gKwlw bDM1M19uYW5kX3JlYWRfZGF0YV9vcChjaGlwLCBwLCBQTDM1M19OQU5EX0xBU1RfVFJBTlNGRVJf TEVOR1RILA0KPiA+ID4gKwkJCQlmYWxzZSk7DQo+ID4gPiArDQo+ID4gPiArCS8qIFdhaXQgdGls bCB0aGUgRUNDIG9wZXJhdGlvbiBpcyBjb21wbGV0ZSBvciB0aW1lb3V0ICovDQo+ID4gPiArCXJl dCA9IHBsMzUzX3dhaXRfZm9yX2VjY19kb25lKCk7DQo+ID4gPiArCWlmIChyZXQpDQo+ID4gPiAr CQlkZXZfZXJyKHhuZmMtPmRldiwgIkVDQyBUaW1lb3V0XG4iKTsNCj4gPiA+ICsNCj4gPiA+ICsJ LyogUmVhZCB0aGUgY2FsY3VsYXRlZCBFQ0MgdmFsdWUgKi8NCj4gPiA+ICsJcCA9IGJ1ZjsNCj4g PiA+ICsJcmV0ID0gY2hpcC0+ZWNjLmNhbGN1bGF0ZShjaGlwLCBwLCAmZWNjX2NhbGNbMF0pOw0K PiA+ID4gKwlpZiAocmV0KQ0KPiA+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiA+ICsNCj4gPiA+ICsJ LyogQ2xlYXIgRUNDIGxhc3QgYml0ICovDQo+ID4gPiArCWRhdGFfcGhhc2VfYWRkciA9ICh1bnNp Z25lZCBsb25nIF9fZm9yY2UpeG5mYy0+YnVmX2FkZHI7DQo+ID4gPiArCWRhdGFfcGhhc2VfYWRk ciAtPSBuYW5kX29mZnNldDsNCj4gPiA+ICsJZGF0YV9waGFzZV9hZGRyICY9IH5QTDM1M19OQU5E X0VDQ19MQVNUOw0KPiA+ID4gKwlkYXRhX3BoYXNlX2FkZHIgKz0gbmFuZF9vZmZzZXQ7DQo+ID4g PiArCXhuZmMtPmJ1Zl9hZGRyID0gKHZvaWQgX19pb21lbSAqIF9fZm9yY2UpZGF0YV9waGFzZV9h ZGRyOw0KPiA+ID4gKw0KPiA+ID4gKwkvKiBSZWFkIHRoZSBzdG9yZWQgRUNDIHZhbHVlICovDQo+ ID4gPiArCW9vYl9wdHIgPSBjaGlwLT5vb2JfcG9pOw0KPiA+ID4gKwlwbDM1M19uYW5kX3JlYWRf ZGF0YV9vcChjaGlwLCBvb2JfcHRyLA0KPiA+ID4gKwkJCQkobXRkLT5vb2JzaXplIC0NCj4gPiA+ ICsJCQkJUEwzNTNfTkFORF9MQVNUX1RSQU5TRkVSX0xFTkdUSCksIGZhbHNlKTsNCj4gPiA+ICsN Cj4gPiA+ICsJLyogZGUtYXNzZXJ0IGNoaXAgc2VsZWN0ICovDQo+ID4gPiArCWRhdGFfcGhhc2Vf YWRkciA9ICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpeG5mYy0+YnVmX2FkZHI7DQo+ID4gPiArCWRh dGFfcGhhc2VfYWRkciAtPSBuYW5kX29mZnNldDsNCj4gPiA+ICsJZGF0YV9waGFzZV9hZGRyIHw9 IFBMMzUzX05BTkRfQ0xFQVJfQ1M7DQo+ID4gPiArCWRhdGFfcGhhc2VfYWRkciArPSBuYW5kX29m ZnNldDsNCj4gPiA+ICsJeG5mYy0+YnVmX2FkZHIgPSAodm9pZCBfX2lvbWVtICogX19mb3JjZSlk YXRhX3BoYXNlX2FkZHI7DQo+ID4gPiArDQo+ID4gPiArCW9vYl9wdHIgKz0gKG10ZC0+b29ic2l6 ZSAtIFBMMzUzX05BTkRfTEFTVF9UUkFOU0ZFUl9MRU5HVEgpOw0KPiA+ID4gKwlwbDM1M19uYW5k X3JlYWRfZGF0YV9vcChjaGlwLCBvb2JfcHRyLA0KPiA+IFBMMzUzX05BTkRfTEFTVF9UUkFOU0ZF Ul9MRU5HVEgsDQo+ID4gPiArCQkJCWZhbHNlKTsNCj4gPiA+ICsNCj4gPiA+ICsJcmV0ID0gbXRk X29vYmxheW91dF9nZXRfZWNjYnl0ZXMobXRkLCBlY2MsIGNoaXAtPm9vYl9wb2ksIDAsDQo+ID4g PiArCQkJCQkgY2hpcC0+ZWNjLnRvdGFsKTsNCj4gPiA+ICsJaWYgKHJldCkNCj4gPiA+ICsJCXJl dHVybiByZXQ7DQo+ID4gPiArDQo+ID4gPiArCWVjY3N0ZXBzID0gY2hpcC0+ZWNjLnN0ZXBzOw0K PiA+ID4gKwlwID0gYnVmOw0KPiA+ID4gKw0KPiA+ID4gKwkvKiBDaGVjayBFQ0MgZXJyb3IgZm9y IGFsbCBibG9ja3MgYW5kIGNvcnJlY3QgaWYgaXQgaXMgY29ycmVjdGFibGUgKi8NCj4gPiA+ICsJ Zm9yIChpID0gMCA7IGVjY3N0ZXBzOyBlY2NzdGVwcy0tLCBpICs9IGVjY2J5dGVzLCBwICs9IGVj Y3NpemUpIHsNCj4gPiA+ICsJCXN0YXQgPSBjaGlwLT5lY2MuY29ycmVjdChjaGlwLCBwLCAmZWNj W2ldLCAmZWNjX2NhbGNbaV0pOw0KPiA+ID4gKwkJaWYgKHN0YXQgPCAwKSB7DQo+ID4gPiArCQkJ bXRkLT5lY2Nfc3RhdHMuZmFpbGVkKys7DQo+ID4gPiArCQl9IGVsc2Ugew0KPiA+ID4gKwkJCW10 ZC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCArPSBzdGF0Ow0KPiA+ID4gKwkJCW1heF9iaXRmbGlwcyA9 IG1heF90KHVuc2lnbmVkIGludCwgbWF4X2JpdGZsaXBzLCBzdGF0KTsNCj4gPiA+ICsJCX0NCj4g PiA+ICsJfQ0KPiA+ID4gKw0KPiA+ID4gKwlyZXR1cm4gbWF4X2JpdGZsaXBzOw0KPiA+ID4gK30N Cj4gPiA+ICsNCj4gPiA+ICsvKiBOQU5EIGZyYW1ld29yayAtPmV4ZWNfb3AoKSBob29rcyBhbmQg cmVsYXRlZCBoZWxwZXJzICovDQo+ID4gPiArc3RhdGljIHZvaWQgcGwzNTNfbmZjX3BhcnNlX2lu c3RydWN0aW9ucyhzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLA0KPiA+ID4gKwkJCQkJIGNvbnN0IHN0 cnVjdCBuYW5kX3N1Ym9wICpzdWJvcCwNCj4gPiA+ICsJCQkJCSBzdHJ1Y3QgcGwzNTNfbmZjX29w ICpuZmNfb3ApDQo+ID4gPiArew0KPiA+ID4gKwljb25zdCBzdHJ1Y3QgbmFuZF9vcF9pbnN0ciAq aW5zdHIgPSBOVUxMOw0KPiA+ID4gKwl1bnNpZ25lZCBpbnQgb3BfaWQsIG9mZnNldCwgbmFkZHJz Ow0KPiA+ID4gKwlpbnQgaTsNCj4gPiA+ICsJY29uc3QgdTggKmFkZHJzOw0KPiA+ID4gKw0KPiA+ ID4gKwltZW1zZXQobmZjX29wLCAwLCBzaXplb2Yoc3RydWN0IHBsMzUzX25mY19vcCkpOw0KPiA+ ID4gKwlmb3IgKG9wX2lkID0gMDsgb3BfaWQgPCBzdWJvcC0+bmluc3Ryczsgb3BfaWQrKykgew0K PiA+ID4gKwkJaW5zdHIgPSAmc3Vib3AtPmluc3Ryc1tvcF9pZF07DQo+ID4gPiArDQo+ID4gPiAr CQlzd2l0Y2ggKGluc3RyLT50eXBlKSB7DQo+ID4gPiArCQljYXNlIE5BTkRfT1BfQ01EX0lOU1RS Og0KPiA+ID4gKwkJCWlmIChvcF9pZCkNCj4gPiA+ICsJCQkJbmZjX29wLT5jbW5kc1sxXSA9IGlu c3RyLT5jdHguY21kLm9wY29kZTsNCj4gPiA+ICsJCQllbHNlDQo+ID4gPiArCQkJCW5mY19vcC0+ Y21uZHNbMF0gPSBpbnN0ci0+Y3R4LmNtZC5vcGNvZGU7DQo+ID4gPiArCQkJbmZjX29wLT5jbGVf YWxlX2RlbGF5X25zID0gaW5zdHItPmRlbGF5X25zOw0KPiA+ID4gKwkJCWJyZWFrOw0KPiA+ID4g Kw0KPiA+ID4gKwkJY2FzZSBOQU5EX09QX0FERFJfSU5TVFI6DQo+ID4gPiArCQkJb2Zmc2V0ID0g bmFuZF9zdWJvcF9nZXRfYWRkcl9zdGFydF9vZmYoc3Vib3AsIG9wX2lkKTsNCj4gPiA+ICsJCQlu YWRkcnMgPSBuYW5kX3N1Ym9wX2dldF9udW1fYWRkcl9jeWMoc3Vib3AsIG9wX2lkKTsNCj4gPiA+ ICsJCQlhZGRycyA9ICZpbnN0ci0+Y3R4LmFkZHIuYWRkcnNbb2Zmc2V0XTsNCj4gPiA+ICsJCQlu ZmNfb3AtPmFkZHJzID0gaW5zdHItPmN0eC5hZGRyLmFkZHJzW29mZnNldF07DQo+ID4gPiArCQkJ Zm9yIChpID0gMDsgaSA8IG1pbl90KHVuc2lnbmVkIGludCwgNCwgbmFkZHJzKTsgaSsrKSB7DQo+ ID4gPiArCQkJCW5mY19vcC0+YWRkcnMgfD0gaW5zdHItPmN0eC5hZGRyLmFkZHJzW2ldIDw8DQo+ ID4gPiArCQkJCQkJICg4ICogaSk7DQo+ID4gPiArCQkJfQ0KPiA+ID4gKw0KPiA+ID4gKwkJCWlm IChuYWRkcnMgPj0gNSkNCj4gPiA+ICsJCQkJbmZjX29wLT5hZGRyNSA9IGFkZHJzWzRdOw0KPiA+ ID4gKwkJCWlmIChuYWRkcnMgPj0gNikNCj4gPiA+ICsJCQkJbmZjX29wLT5hZGRyNiA9IGFkZHJz WzVdOw0KPiA+ID4gKwkJCW5mY19vcC0+bmFkZHJzID0gbmFuZF9zdWJvcF9nZXRfbnVtX2FkZHJf Y3ljKHN1Ym9wLA0KPiA+ID4gKwkJCQkJCQkJICAgICBvcF9pZCk7DQo+ID4gPiArCQkJbmZjX29w LT5jbGVfYWxlX2RlbGF5X25zID0gaW5zdHItPmRlbGF5X25zOw0KPiA+ID4gKwkJCWJyZWFrOw0K PiA+ID4gKw0KPiA+ID4gKwkJY2FzZSBOQU5EX09QX0RBVEFfSU5fSU5TVFI6DQo+ID4gPiArCQkJ bmZjX29wLT5kYXRhX2luc3RyID0gaW5zdHI7DQo+ID4gPiArCQkJbmZjX29wLT5kYXRhX2luc3Ry X2lkeCA9IG9wX2lkOw0KPiA+ID4gKwkJCWJyZWFrOw0KPiA+ID4gKw0KPiA+ID4gKwkJY2FzZSBO QU5EX09QX0RBVEFfT1VUX0lOU1RSOg0KPiA+ID4gKwkJCW5mY19vcC0+ZGF0YV9pbnN0ciA9IGlu c3RyOw0KPiA+ID4gKwkJCW5mY19vcC0+ZGF0YV9pbnN0cl9pZHggPSBvcF9pZDsNCj4gPiA+ICsJ CQlicmVhazsNCj4gPiA+ICsNCj4gPiA+ICsJCWNhc2UgTkFORF9PUF9XQUlUUkRZX0lOU1RSOg0K PiA+ID4gKwkJCW5mY19vcC0+cmR5X3RpbWVvdXRfbXMgPSBpbnN0ci0+Y3R4LndhaXRyZHkudGlt ZW91dF9tczsNCj4gPiA+ICsJCQluZmNfb3AtPnJkeV9kZWxheV9ucyA9IGluc3RyLT5kZWxheV9u czsNCj4gPiA+ICsJCQlicmVhazsNCj4gPiA+ICsJCX0NCj4gPiA+ICsJfQ0KPiA+ID4gK30NCj4g PiA+ICsNCj4gPiA+ICtzdGF0aWMgdm9pZCBjb25kX2RlbGF5KHVuc2lnbmVkIGludCBucykNCj4g PiA+ICt7DQo+ID4gPiArCWlmICghbnMpDQo+ID4gPiArCQlyZXR1cm47DQo+ID4gPiArDQo+ID4g PiArCWlmIChucyA8IDEwMDAwKQ0KPiA+ID4gKwkJbmRlbGF5KG5zKTsNCj4gPiA+ICsJZWxzZQ0K PiA+ID4gKwkJdWRlbGF5KERJVl9ST1VORF9VUChucywgMTAwMCkpOw0KPiA+ID4gK30NCj4gPiA+ ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgKiBwbDM1M19uYW5kX2V4ZWNfb3BfY21kIC0gU2VuZCBj b21tYW5kIHRvIE5BTkQgZGV2aWNlDQo+ID4gPiArICogQGNoaXA6CVBvaW50ZXIgdG8gdGhlIE5B TkQgY2hpcCBpbmZvIHN0cnVjdHVyZQ0KPiA+ID4gKyAqIEBzdWJvcDoJUG9pbnRlciB0byBhcnJh eSBvZiBpbnN0cnVjdGlvbnMNCj4gPiA+ICsgKiBSZXR1cm46CUFsd2F5cyByZXR1cm4gemVybw0K PiA+ID4gKyAqLw0KPiA+ID4gK3N0YXRpYyBpbnQgcGwzNTNfbmFuZF9leGVjX29wX2NtZChzdHJ1 Y3QgbmFuZF9jaGlwICpjaGlwLA0KPiA+ID4gKwkJCQkgIGNvbnN0IHN0cnVjdCBuYW5kX3N1Ym9w ICpzdWJvcCkNCj4gPiA+ICt7DQo+ID4gPiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90 b19tdGQoY2hpcCk7DQo+ID4gPiArCWNvbnN0IHN0cnVjdCBuYW5kX29wX2luc3RyICppbnN0cjsN Cj4gPiA+ICsJc3RydWN0IHBsMzUzX25mY19vcCBuZmNfb3AgPSB7fTsNCj4gPiA+ICsJc3RydWN0 IHBsMzUzX25hbmRfY29udHJvbGxlciAqeG5mYyA9DQo+ID4gPiArCQljb250YWluZXJfb2YoY2hp cCwgc3RydWN0IHBsMzUzX25hbmRfY29udHJvbGxlciwgY2hpcCk7DQo+ID4gPiArCXVuc2lnbmVk IGxvbmcgY21kX3BoYXNlX2RhdGEgPSAwLCBlbmRfY21kX3ZhbGlkID0gMDsNCj4gPiA+ICsJdW5z aWduZWQgbG9uZyBjbWRfcGhhc2VfYWRkciwgZGF0YV9waGFzZV9hZGRyLCBlbmRfY21kOw0KPiA+ ID4gKwl1bnNpZ25lZCBpbnQgb3BfaWQsIGxlbiwgb2Zmc2V0Ow0KPiA+ID4gKwlib29sIHJlYWRp bmc7DQo+ID4gPiArDQo+ID4gPiArCXBsMzUzX25mY19wYXJzZV9pbnN0cnVjdGlvbnMoY2hpcCwg c3Vib3AsICZuZmNfb3ApOw0KPiA+ID4gKwlpbnN0ciA9IG5mY19vcC5kYXRhX2luc3RyOw0KPiA+ ID4gKwlvcF9pZCA9IG5mY19vcC5kYXRhX2luc3RyX2lkeDsNCj4gPiA+ICsNCj4gPiA+ICsJb2Zm c2V0ID0gbmFuZF9zdWJvcF9nZXRfZGF0YV9zdGFydF9vZmYoc3Vib3AsIG9wX2lkKTsNCj4gPiA+ ICsNCj4gPiA+ICsJcGwzNTNfc21jX2Nscl9uYW5kX2ludCgpOw0KPiA+ID4gKwkvKiBHZXQgdGhl IGNvbW1hbmQgcGhhc2UgYWRkcmVzcyAqLw0KPiA+ID4gKwlpZiAobmZjX29wLmNtbmRzWzFdICE9 IDApIHsNCj4gPiA+ICsJCWlmIChuZmNfb3AuY21uZHNbMF0gPT0gTkFORF9DTURfU0VRSU4pDQo+ ID4gPiArCQkJZW5kX2NtZF92YWxpZCA9IDA7DQo+ID4gPiArCQllbHNlDQo+ID4gPiArCQkJZW5k X2NtZF92YWxpZCA9IDE7DQo+ID4gPiArCQllbmRfY21kID0gbmZjX29wLmNtbmRzWzFdOw0KPiA+ ID4gKwl9ICBlbHNlIHsNCj4gPiA+ICsJCWVuZF9jbWQgPSAweDA7DQo+ID4gPiArCX0NCj4gPiA+ ICsNCj4gPiA+ICsJLyoNCj4gPiA+ICsJICogVGhlIFNNQyBkZWZpbmVzIHR3byBwaGFzZXMgb2Yg Y29tbWFuZHMgd2hlbiB0cmFuc2ZlcnJpbmcgZGF0YSB0byBvcg0KPiA+ID4gKwkgKiBmcm9tIE5B TkQgZmxhc2guDQo+ID4gPiArCSAqIENvbW1hbmQgcGhhc2U6IENvbW1hbmRzIGFuZCBvcHRpb25h bCBhZGRyZXNzIGluZm9ybWF0aW9uIGFyZSB3cml0dGVuDQo+ID4gPiArCSAqIHRvIHRoZSBOQU5E IGZsYXNoLlRoZSBjb21tYW5kIGFuZCBhZGRyZXNzIGNhbiBiZSBhc3NvY2lhdGVkIHdpdGgNCj4g PiA+ICsJICogZWl0aGVyIGEgZGF0YSBwaGFzZSBvcGVyYXRpb24gdG8gd3JpdGUgdG8gb3IgcmVh ZCBmcm9tIHRoZSBhcnJheSwNCj4gPiA+ICsJICogb3IgYSBzdGF0dXMvSUQgcmVnaXN0ZXIgdHJh bnNmZXIuDQo+ID4gPiArCSAqIERhdGEgcGhhc2U6IERhdGEgaXMgZWl0aGVyIHdyaXR0ZW4gdG8g b3IgcmVhZCBmcm9tIHRoZSBOQU5EIGZsYXNoLg0KPiA+ID4gKwkgKiBUaGlzIGRhdGEgY2FuIGJl IGVpdGhlciBkYXRhIHRyYW5zZmVycmVkIHRvIG9yIGZyb20gdGhlIGFycmF5LA0KPiA+ID4gKwkg KiBvciBzdGF0dXMvSUQgcmVnaXN0ZXIgaW5mb3JtYXRpb24uDQo+ID4gPiArCSAqLw0KPiA+ID4g KwljbWRfcGhhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpeG5mYy0+cmVncyArDQo+ ID4gPiArCQkJICgobmZjX29wLm5hZGRycyA8PCBBRERSX0NZQ0xFU19TSElGVCkgfA0KPiA+ID4g KwkJCSAoZW5kX2NtZF92YWxpZCA8PCBFTkRfQ01EX1ZBTElEX1NISUZUKSB8DQo+ID4gPiArCQkJ IChDT01NQU5EX1BIQVNFKSB8DQo+ID4gPiArCQkJIChlbmRfY21kIDw8IEVORF9DTURfU0hJRlQp IHwNCj4gPiA+ICsJCQkgKG5mY19vcC5jbW5kc1swXSA8PCBTVEFSVF9DTURfU0hJRlQpKTsNCj4g PiA+ICsNCj4gPiA+ICsJLyogR2V0IHRoZSBkYXRhIHBoYXNlIGFkZHJlc3MgKi8NCj4gPiA+ICsJ ZW5kX2NtZF92YWxpZCA9IDA7DQo+ID4gPiArDQo+ID4gPiArCWRhdGFfcGhhc2VfYWRkciA9ICh1 bnNpZ25lZCBsb25nIF9fZm9yY2UpeG5mYy0+cmVncyArDQo+ID4gPiArCQkJICAoKDB4MCA8PCBD TEVBUl9DU19TSElGVCkgfA0KPiA+ID4gKwkJCSAgKGVuZF9jbWRfdmFsaWQgPDwgRU5EX0NNRF9W QUxJRF9TSElGVCkgfA0KPiA+ID4gKwkJCSAgKERBVEFfUEhBU0UpIHwNCj4gPiA+ICsJCQkgIChl bmRfY21kIDw8IEVORF9DTURfU0hJRlQpIHwNCj4gPiA+ICsJCQkgICgweDAgPDwgRUNDX0xBU1Rf U0hJRlQpKTsNCj4gPiA+ICsJeG5mYy0+YnVmX2FkZHIgPSAodm9pZCBfX2lvbWVtICogX19mb3Jj ZSlkYXRhX3BoYXNlX2FkZHI7DQo+ID4gPiArDQo+ID4gPiArCS8qIENvbW1hbmQgcGhhc2UgQVhJ IFJlYWQgJiBXcml0ZSAqLw0KPiA+ID4gKwlpZiAobmZjX29wLm5hZGRycyA+PSA1KSB7DQo+ID4g PiArCQlpZiAobXRkLT53cml0ZXNpemUgPiBQTDM1M19OQU5EX0VDQ19TSVpFKSB7DQo+ID4gPiAr CQkJY21kX3BoYXNlX2RhdGEgPSBuZmNfb3AuYWRkcnM7DQo+ID4gPiArCQkJLyogQW5vdGhlciBh ZGRyZXNzIGN5Y2xlIGZvciBkZXZpY2VzID4gMTI4TWlCICovDQo+ID4gPiArCQkJaWYgKGNoaXAt Pm9wdGlvbnMgJiBOQU5EX1JPV19BRERSXzMpIHsNCj4gPiA+ICsJCQkJd3JpdGVsX3JlbGF4ZWQo Y21kX3BoYXNlX2RhdGEsDQo+ID4gPiArCQkJCQkgICAgICAgKHZvaWQgX19pb21lbSAqIF9fZm9y Y2UpDQo+ID4gPiArCQkJCQkgICAgICAgY21kX3BoYXNlX2FkZHIpOw0KPiA+ID4gKwkJCQljbWRf cGhhc2VfZGF0YSA9IG5mY19vcC5hZGRyNTsNCj4gPiA+ICsJCQkJaWYgKG5mY19vcC5uYWRkcnMg Pj0gNikNCj4gPiA+ICsJCQkJCWNtZF9waGFzZV9kYXRhIHw9IChuZmNfb3AuYWRkcjYgPDwgOCk7 DQo+ID4gPiArCQkJfQ0KPiA+ID4gKwkJfQ0KPiA+ID4gKwl9ICBlbHNlIHsNCj4gPiA+ICsJCWlm IChuZmNfb3AuYWRkcnMgIT0gLTEpIHsNCj4gPiA+ICsJCQlpbnQgY29sdW1uID0gbmZjX29wLmFk ZHJzOw0KPiA+ID4gKwkJCS8qDQo+ID4gPiArCQkJICogQ2hhbmdlIHJlYWQvd3JpdGUgY29sdW1u LCByZWFkIGlkIGV0Yw0KPiA+ID4gKwkJCSAqIEFkanVzdCBjb2x1bW5zIGZvciAxNiBiaXQgYnVz IHdpZHRoDQo+ID4gPiArCQkJICovDQo+ID4gPiArCQkJaWYgKChjaGlwLT5vcHRpb25zICYgTkFO RF9CVVNXSURUSF8xNikgJiYNCj4gPiA+ICsJCQkgICAgKG5mY19vcC5jbW5kc1swXSA9PSBOQU5E X0NNRF9SRUFEMCB8fA0KPiA+ID4gKwkJCQluZmNfb3AuY21uZHNbMF0gPT0gTkFORF9DTURfU0VR SU4gfHwNCj4gPiA+ICsJCQkJbmZjX29wLmNtbmRzWzBdID09IE5BTkRfQ01EX1JORE9VVCB8fA0K PiA+ID4gKwkJCQluZmNfb3AuY21uZHNbMF0gPT0gTkFORF9DTURfUk5ESU4pKSB7DQo+ID4gPiAr CQkJCWNvbHVtbiA+Pj0gMTsNCj4gPiA+ICsJCQl9DQo+ID4gPiArCQkJY21kX3BoYXNlX2RhdGEg PSBjb2x1bW47DQo+ID4gPiArCQl9DQo+ID4gPiArCX0NCj4gPiA+ICsJd3JpdGVsX3JlbGF4ZWQo Y21kX3BoYXNlX2RhdGEsICh2b2lkIF9faW9tZW0gKiBfX2ZvcmNlKWNtZF9waGFzZV9hZGRyKTsN Cj4gPiA+ICsNCj4gPiA+ICsJaWYgKCFuZmNfb3AuZGF0YV9pbnN0cikgew0KPiA+ID4gKwkJaWYg KG5mY19vcC5yZHlfdGltZW91dF9tcykNCj4gPiA+ICsJCQluYW5kX3dhaXRfcmVhZHkoY2hpcCk7 DQo+ID4gPiArCQlyZXR1cm4gMDsNCj4gPiA+ICsJfQ0KPiA+ID4gKw0KPiA+ID4gKwlyZWFkaW5n ID0gKG5mY19vcC5kYXRhX2luc3RyLT50eXBlID09IE5BTkRfT1BfREFUQV9JTl9JTlNUUik7DQo+ ID4gPiArCWlmICghcmVhZGluZykgew0KPiA+ID4gKwkJbGVuID0gbmFuZF9zdWJvcF9nZXRfZGF0 YV9sZW4oc3Vib3AsIG9wX2lkKTsNCj4gPiA+ICsJCXBsMzUzX25hbmRfd3JpdGVfZGF0YV9vcChj aGlwLCBpbnN0ci0+Y3R4LmRhdGEuYnVmLm91dCwNCj4gPiA+ICsJCQkJCSBsZW4sIGluc3RyLT5j dHguZGF0YS5mb3JjZV84Yml0KTsNCj4gPiA+ICsJCWlmIChuZmNfb3AucmR5X3RpbWVvdXRfbXMp DQo+ID4gPiArCQkJbmFuZF93YWl0X3JlYWR5KGNoaXApOw0KPiA+ID4gKwkJY29uZF9kZWxheShu ZmNfb3AucmR5X2RlbGF5X25zKTsNCj4gPiA+ICsJfQ0KPiA+DQo+ID4gZWxzZSA/DQo+IElmIChy ZWFkaW5nKSBpcyBub3RoaW5nIGJ1dCBlbHNlLCBidXQgaXQgaXMgbG9va2luZyBvZGQuIEkgd2ls bCBjaGFuZ2UgaXQuDQo+ID4NCj4gPiA+ICsJaWYgKHJlYWRpbmcpIHsNCj4gPiA+ICsJCWxlbiA9 IG5hbmRfc3Vib3BfZ2V0X2RhdGFfbGVuKHN1Ym9wLCBvcF9pZCk7DQo+ID4gPiArCQljb25kX2Rl bGF5KG5mY19vcC5yZHlfZGVsYXlfbnMpOw0KPiA+ID4gKwkJaWYgKG5mY19vcC5yZHlfdGltZW91 dF9tcykNCj4gPiA+ICsJCQluYW5kX3dhaXRfcmVhZHkoY2hpcCk7DQo+ID4gPiArCQlwbDM1M19u YW5kX3JlYWRfZGF0YV9vcChjaGlwLCBpbnN0ci0+Y3R4LmRhdGEuYnVmLmluLCBsZW4sDQo+ID4g PiArCQkJCQlpbnN0ci0+Y3R4LmRhdGEuZm9yY2VfOGJpdCk7DQo+ID4gPiArCX0NCj4gPiA+ICsN Cj4gPiA+ICsJcmV0dXJuIDA7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBjb25z dCBzdHJ1Y3QgbmFuZF9vcF9wYXJzZXIgcGwzNTNfbmZjX29wX3BhcnNlciA9IE5BTkRfT1BfUEFS U0VSDQo+ID4gPiArCShOQU5EX09QX1BBUlNFUl9QQVRURVJODQo+ID4gPiArCQkocGwzNTNfbmFu ZF9leGVjX29wX2NtZCwNCj4gPiA+ICsJCU5BTkRfT1BfUEFSU0VSX1BBVF9DTURfRUxFTSh0cnVl KSwNCj4gPiA+ICsJCU5BTkRfT1BfUEFSU0VSX1BBVF9BRERSX0VMRU0odHJ1ZSwgNyksDQo+ID4g PiArCQlOQU5EX09QX1BBUlNFUl9QQVRfV0FJVFJEWV9FTEVNKHRydWUpLA0KPiA+ID4gKwkJTkFO RF9PUF9QQVJTRVJfUEFUX0RBVEFfSU5fRUxFTShmYWxzZSwgMjA0OCkpLA0KPiA+ID4gKwlOQU5E X09QX1BBUlNFUl9QQVRURVJODQo+ID4gPiArCQkocGwzNTNfbmFuZF9leGVjX29wX2NtZCwNCj4g PiA+ICsJCU5BTkRfT1BfUEFSU0VSX1BBVF9DTURfRUxFTShmYWxzZSksDQo+ID4gPiArCQlOQU5E X09QX1BBUlNFUl9QQVRfQUREUl9FTEVNKGZhbHNlLCA3KSwNCj4gPiA+ICsJCU5BTkRfT1BfUEFS U0VSX1BBVF9DTURfRUxFTShmYWxzZSksDQo+ID4gPiArCQlOQU5EX09QX1BBUlNFUl9QQVRfV0FJ VFJEWV9FTEVNKGZhbHNlKSwNCj4gPiA+ICsJCU5BTkRfT1BfUEFSU0VSX1BBVF9EQVRBX0lOX0VM RU0oZmFsc2UsIDIwNDgpKSwNCj4gPiA+ICsJTkFORF9PUF9QQVJTRVJfUEFUVEVSTg0KPiA+ID4g KwkJKHBsMzUzX25hbmRfZXhlY19vcF9jbWQsDQo+ID4gPiArCQlOQU5EX09QX1BBUlNFUl9QQVRf Q01EX0VMRU0oZmFsc2UpLA0KPiA+ID4gKwkJTkFORF9PUF9QQVJTRVJfUEFUX0FERFJfRUxFTSh0 cnVlLCA3KSwNCj4gPiA+ICsJCU5BTkRfT1BfUEFSU0VSX1BBVF9DTURfRUxFTSh0cnVlKSwNCj4g PiA+ICsJCU5BTkRfT1BfUEFSU0VSX1BBVF9XQUlUUkRZX0VMRU0oZmFsc2UpKSwNCj4gPiA+ICsJ TkFORF9PUF9QQVJTRVJfUEFUVEVSTg0KPiA+ID4gKwkJKHBsMzUzX25hbmRfZXhlY19vcF9jbWQs DQo+ID4gPiArCQlOQU5EX09QX1BBUlNFUl9QQVRfQ01EX0VMRU0oZmFsc2UpLA0KPiA+ID4gKwkJ TkFORF9PUF9QQVJTRVJfUEFUX0FERFJfRUxFTShmYWxzZSwgOCksDQo+ID4gPiArCQlOQU5EX09Q X1BBUlNFUl9QQVRfREFUQV9PVVRfRUxFTShmYWxzZSwgMjA0OCksDQo+ID4gPiArCQlOQU5EX09Q X1BBUlNFUl9QQVRfQ01EX0VMRU0odHJ1ZSksDQo+ID4gPiArCQlOQU5EX09QX1BBUlNFUl9QQVRf V0FJVFJEWV9FTEVNKHRydWUpKSwNCj4gPiA+ICsJTkFORF9PUF9QQVJTRVJfUEFUVEVSTg0KPiA+ ID4gKwkJKHBsMzUzX25hbmRfZXhlY19vcF9jbWQsDQo+ID4gPiArCQlOQU5EX09QX1BBUlNFUl9Q QVRfQ01EX0VMRU0oZmFsc2UpKSwNCj4gPiA+ICsJKTsNCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMg aW50IHBsMzUzX25mY19leGVjX29wKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsDQo+ID4gPiArCQkJ ICAgICBjb25zdCBzdHJ1Y3QgbmFuZF9vcGVyYXRpb24gKm9wLA0KPiA+ID4gKwkJCSAgICAgYm9v bCBjaGVja19vbmx5KQ0KPiA+ID4gK3sNCj4gPiA+ICsJcmV0dXJuIG5hbmRfb3BfcGFyc2VyX2V4 ZWNfb3AoY2hpcCwgJnBsMzUzX25mY19vcF9wYXJzZXIsDQo+ID4gPiArCQkJCQkgICAgICBvcCwg Y2hlY2tfb25seSk7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAqIHBs MzUzX25hbmRfZGV2aWNlX3JlYWR5IC0gQ2hlY2sgZGV2aWNlIHJlYWR5L2J1c3kgbGluZQ0KPiA+ ID4gKyAqIEBtdGQ6CVBvaW50ZXIgdG8gdGhlIG10ZF9pbmZvIHN0cnVjdHVyZQ0KPiA+ID4gKyAq DQo+ID4gPiArICogUmV0dXJuOgkwIG9uIGJ1c3kgb3IgMSBvbiByZWFkeSBzdGF0ZQ0KPiA+ID4g KyAqLw0KPiA+ID4gK3N0YXRpYyBpbnQgcGwzNTNfbmFuZF9kZXZpY2VfcmVhZHkoc3RydWN0IG5h bmRfY2hpcCAqY2hpcCkNCj4gPiA+ICt7DQo+ID4gPiArCWlmIChwbDM1M19zbWNfZ2V0X25hbmRf aW50X3N0YXR1c19yYXcoKSkgew0KPiA+ID4gKwkJcGwzNTNfc21jX2Nscl9uYW5kX2ludCgpOw0K PiA+ID4gKwkJcmV0dXJuIDE7DQo+ID4gPiArCX0NCj4gPiA+ICsNCj4gPiA+ICsJcmV0dXJuIDA7 DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAqIHBsMzUzX25hbmRfZWNj X2luaXQgLSBJbml0aWFsaXplIHRoZSBlY2MgaW5mb3JtYXRpb24gYXMgcGVyIHRoZSBlY2MgbW9k ZQ0KPiA+ID4gKyAqIEBtdGQ6CVBvaW50ZXIgdG8gdGhlIG10ZF9pbmZvIHN0cnVjdHVyZQ0KPiA+ ID4gKyAqIEBlY2M6CVBvaW50ZXIgdG8gRUNDIGNvbnRyb2wgc3RydWN0dXJlDQo+ID4gPiArICog QGVjY19tb2RlOglvbmRpZSBlY2Mgc3RhdHVzDQo+ID4gPiArICoNCj4gPiA+ICsgKiBUaGlzIGZ1 bmN0aW9uIGluaXRpYWxpemVzIHRoZSBlY2MgYmxvY2sgYW5kIGZ1bmN0aW9uYWwgcG9pbnRlcnMg YXMgcGVyIHRoZQ0KPiA+ID4gKyAqIGVjYyBtb2RlDQo+ID4gPiArICoNCj4gPiA+ICsgKiBSZXR1 cm46CTAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJuby4NCj4gPiA+ICsgKi8NCj4gPiA+ICtz dGF0aWMgaW50IHBsMzUzX25hbmRfZWNjX2luaXQoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVj dCBuYW5kX2VjY19jdHJsICplY2MsDQo+ID4gPiArCQkJICAgICAgIGludCBlY2NfbW9kZSkNCj4g PiA+ICt7DQo+ID4gPiArCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGRfdG9fbmFuZChtdGQp Ow0KPiA+ID4gKwlzdHJ1Y3QgcGwzNTNfbmFuZF9jb250cm9sbGVyICp4bmZjID0NCj4gPiA+ICsJ CWNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgcGwzNTNfbmFuZF9jb250cm9sbGVyLCBjaGlwKTsN Cj4gPiA+ICsJaW50IGVyciA9IDA7DQo+ID4gPiArDQo+ID4gPiArCWVjYy0+d3JpdGVfcGFnZV9y YXcgPSBwbDM1M19uYW5kX3dyaXRlX3BhZ2VfcmF3Ow0KPiA+ID4gKwllY2MtPnJlYWRfcGFnZV9y YXcgPSBwbDM1M19uYW5kX3JlYWRfcGFnZV9yYXc7DQo+ID4gPiArCWVjYy0+cmVhZF9vb2IgPSBw bDM1M19uYW5kX3JlYWRfb29iOw0KPiA+ID4gKwllY2MtPndyaXRlX29vYiA9IHBsMzUzX25hbmRf d3JpdGVfb29iOw0KPiA+ID4gKw0KPiA+ID4gKwlpZiAoZWNjX21vZGUgPT0gTkFORF9FQ0NfT05f RElFKSB7DQo+ID4gPiArCQlwbDM1M19zbWNfc2V0X2VjY19tb2RlKFBMMzUzX1NNQ19FQ0NNT0RF X0JZUEFTUyk7DQo+ID4gPiArCQkvKg0KPiA+ID4gKwkJICogT24tRGllIEVDQyBzcGFyZSBieXRl cyBvZmZzZXQgOCBpcyB1c2VkIGZvciBFQ0MgY29kZXMNCj4gPiA+ICsJCSAqIFVzZSB0aGUgQkJU IHBhdHRlcm4gZGVzY3JpcHRvcnMNCj4gPiA+ICsJCSAqLw0KPiA+ID4gKwkJY2hpcC0+YmJ0X3Rk ID0gJmJidF9tYWluX2Rlc2NyOw0KPiA+ID4gKwkJY2hpcC0+YmJ0X21kID0gJmJidF9taXJyb3Jf ZGVzY3I7DQo+ID4gPiArCX0gZWxzZSB7DQo+ID4gPiArCQllY2MtPm1vZGUgPSBOQU5EX0VDQ19I VzsNCj4gPiA+ICsJCS8qIEhhcmR3YXJlIEVDQyBnZW5lcmF0ZXMgMyBieXRlcyBFQ0MgY29kZSBm b3IgZWFjaCA1MTIgYnl0ZXMgKi8NCj4gPiA+ICsJCWVjYy0+Ynl0ZXMgPSAzOw0KPiA+ID4gKwkJ ZWNjLT5zdHJlbmd0aCA9IDE7DQo+ID4gPiArCQllY2MtPmNhbGN1bGF0ZSA9IHBsMzUzX25hbmRf Y2FsY3VsYXRlX2h3ZWNjOw0KPiA+ID4gKwkJZWNjLT5jb3JyZWN0ID0gcGwzNTNfbmFuZF9jb3Jy ZWN0X2RhdGE7DQo+ID4gPiArCQllY2MtPnJlYWRfcGFnZSA9IHBsMzUzX25hbmRfcmVhZF9wYWdl X2h3ZWNjOw0KPiA+ID4gKwkJZWNjLT5zaXplID0gUEwzNTNfTkFORF9FQ0NfU0laRTsNCj4gPiA+ ICsJCWVjYy0+cmVhZF9wYWdlID0gcGwzNTNfbmFuZF9yZWFkX3BhZ2VfaHdlY2M7DQo+ID4gPiAr CQllY2MtPndyaXRlX3BhZ2UgPSBwbDM1M19uYW5kX3dyaXRlX3BhZ2VfaHdlY2M7DQo+ID4gPiAr CQlwbDM1M19zbWNfc2V0X2VjY19wZ19zaXplKG10ZC0+d3JpdGVzaXplKTsNCj4gPiA+ICsJCXN3 aXRjaCAobXRkLT53cml0ZXNpemUpIHsNCj4gPiA+ICsJCWNhc2UgU1pfNTEyOg0KPiA+ID4gKwkJ Y2FzZSBTWl8xSzoNCj4gPiA+ICsJCWNhc2UgU1pfMks6DQo+ID4gPiArCQkJcGwzNTNfc21jX3Nl dF9lY2NfbW9kZShQTDM1M19TTUNfRUNDTU9ERV9BUEIpOw0KPiA+ID4gKwkJCWJyZWFrOw0KPiA+ ID4gKwkJZGVmYXVsdDoNCj4gPiA+ICsJCQllY2MtPmNhbGN1bGF0ZSA9IG5hbmRfY2FsY3VsYXRl X2VjYzsNCj4gPiA+ICsJCQllY2MtPmNvcnJlY3QgPSBuYW5kX2NvcnJlY3RfZGF0YTsNCj4gPiA+ ICsJCQllY2MtPnNpemUgPSAyNTY7DQo+ID4gPiArCQkJYnJlYWs7DQo+ID4gPiArCQl9DQo+ID4g PiArDQo+ID4gPiArCQlpZiAobXRkLT5vb2JzaXplID09IDE2KSB7DQo+ID4gPiArCQkJbXRkX3Nl dF9vb2JsYXlvdXQobXRkLCAmcGwzNTNfZWNjX29vYmxheW91dDE2X29wcyk7DQo+ID4gPiArCQl9 IGVsc2UgaWYgKG10ZC0+b29ic2l6ZSA9PSA2NCkgew0KPiA+ID4gKwkJCW10ZF9zZXRfb29ibGF5 b3V0KG10ZCwgJnBsMzUzX2VjY19vb2JsYXlvdXQ2NF9vcHMpOw0KPiA+ID4gKwkJfSBlbHNlIHsN Cj4gPiA+ICsJCQllcnIgPSAtRU5YSU87DQo+ID4gPiArCQkJZGV2X2Vycih4bmZjLT5kZXYsICJV bnN1cHBvcnRlZCBvb2IgTGF5b3V0XG4iKTsNCj4gPiA+ICsJCX0NCj4gPiA+ICsJfQ0KPiA+ID4g Kw0KPiA+ID4gKwlyZXR1cm4gZXJyOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMg aW50IHBsMzUzX25mY19zZXR1cF9kYXRhX2ludGVyZmFjZShzdHJ1Y3QgbmFuZF9jaGlwICpjaGlw LCBpbnQgY3NsaW5lLA0KPiA+ID4gKwkJCQkJICBjb25zdCBzdHJ1Y3QgbmFuZF9kYXRhX2ludGVy ZmFjZQ0KPiA+ID4gKwkJCQkJICAqY29uZikNCj4gPiA+ICt7DQo+ID4gPiArCXN0cnVjdCBwbDM1 M19uYW5kX2NvbnRyb2xsZXIgKnhuZmMgPQ0KPiA+ID4gKwkJY29udGFpbmVyX29mKGNoaXAsIHN0 cnVjdCBwbDM1M19uYW5kX2NvbnRyb2xsZXIsIGNoaXApOw0KPiA+ID4gKwljb25zdCBzdHJ1Y3Qg bmFuZF9zZHJfdGltaW5ncyAqc2RyOw0KPiA+ID4gKwl1MzIgdGltaW5nc1s3XSwgbWNrcGVyaW9k cHM7DQo+ID4gPiArDQo+ID4gPiArCWlmIChjc2xpbmUgPT0gTkFORF9EQVRBX0lGQUNFX0NIRUNL X09OTFkpDQo+ID4gPiArCQlyZXR1cm4gMDsNCj4gPiA+ICsNCj4gPiA+ICsJc2RyID0gbmFuZF9n ZXRfc2RyX3RpbWluZ3MoY29uZik7DQo+ID4gPiArCWlmIChJU19FUlIoc2RyKSkNCj4gPiA+ICsJ CXJldHVybiBQVFJfRVJSKHNkcik7DQo+ID4gPiArDQo+ID4gPiArCS8qDQo+ID4gPiArCSAqIFNE UiB0aW1pbmdzIGFyZSBnaXZlbiBpbiBwaWNvLXNlY29uZHMgd2hpbGUgTkZDIHRpbWluZ3MgbXVz dCBiZQ0KPiA+ID4gKwkgKiBleHByZXNzZWQgaW4gTkFORCBjb250cm9sbGVyIGNsb2NrIGN5Y2xl cy4NCj4gPiA+ICsJICovDQo+ID4gPiArCW1ja3BlcmlvZHBzID0gTlNFQ19QRVJfU0VDIC8gY2xr X2dldF9yYXRlKHhuZmMtPm1jbGspOw0KPiA+ID4gKwltY2twZXJpb2RwcyAqPSAxMDAwOw0KPiA+ ID4gKwlpZiAoc2RyLT50UkNfbWluIDw9IDIwMDAwKQ0KPiA+ID4gKwkJLyoNCj4gPiA+ICsJCSAq IFBMMzUzIFNNQyBuZWVkcyBvbmUgZXh0cmEgcmVhZCBjeWNsZSBpbiBTRFIgTW9kZSA1DQo+ID4g PiArCQkgKiBUaGlzIGlzIG5vdCB3cml0dGVuIGFueXdoZXJlIGluIHRoZSBkYXRhc2hlZXQgYnV0 DQo+ID4gPiArCQkgKiB0aGUgcmVzdWx0cyBvYnNlcnZlZCBkdXJpbmcgdGVzdGluZy4NCj4gPiA+ ICsJCSAqLw0KPiA+ID4gKwkJdGltaW5nc1swXSA9IERJVl9ST1VORF9VUChzZHItPnRSQ19taW4s IG1ja3BlcmlvZHBzKSArIDE7DQo+ID4gPiArCWVsc2UNCj4gPiA+ICsJCXRpbWluZ3NbMF0gPSBE SVZfUk9VTkRfVVAoc2RyLT50UkNfbWluLCBtY2twZXJpb2Rwcyk7DQo+ID4gPiArDQo+ID4gPiAr CXRpbWluZ3NbMV0gPSBESVZfUk9VTkRfVVAoc2RyLT50V0NfbWluLCBtY2twZXJpb2Rwcyk7DQo+ ID4gPiArCS8qDQo+ID4gPiArCSAqIEZvciBhbGwgU0RSIG1vZGVzLCBQTDM1MyBTTUMgbmVlZHMg dFJFQSBtYXggdmFsdWUgYXMgMSwNCj4gPiA+ICsJICogUmVzdWx0cyBvYnNlcnZlZCBkdXJpbmcg dGVzdGluZy4NCj4gPiA+ICsJICovDQo+ID4gPiArCXRpbWluZ3NbMl0gPSBQTDM1M19UUkVBX01B WF9WQUxVRTsNCj4gPiA+ICsJdGltaW5nc1szXSA9IERJVl9ST1VORF9VUChzZHItPnRXUF9taW4s IG1ja3BlcmlvZHBzKTsNCj4gPiA+ICsJdGltaW5nc1s0XSA9IERJVl9ST1VORF9VUChzZHItPnRD TFJfbWluLCBtY2twZXJpb2Rwcyk7DQo+ID4gPiArCXRpbWluZ3NbNV0gPSBESVZfUk9VTkRfVVAo c2RyLT50QVJfbWluLCBtY2twZXJpb2Rwcyk7DQo+ID4gPiArCXRpbWluZ3NbNl0gPSBESVZfUk9V TkRfVVAoc2RyLT50UlJfbWluLCBtY2twZXJpb2Rwcyk7DQo+ID4gPiArCXBsMzUzX3NtY19zZXRf Y3ljbGVzKHRpbWluZ3MpOw0KPiA+ID4gKw0KPiA+ID4gKwlyZXR1cm4gMDsNCj4gPiA+ICt9DQo+ ID4gPiArDQo+ID4gPiArc3RhdGljIGludCBwbDM1M19uYW5kX2F0dGFjaF9jaGlwKHN0cnVjdCBu YW5kX2NoaXAgKmNoaXApDQo+ID4gPiArew0KPiA+ID4gKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9 IG5hbmRfdG9fbXRkKGNoaXApOw0KPiA+ID4gKwlzdHJ1Y3QgcGwzNTNfbmFuZF9jb250cm9sbGVy ICp4bmZjID0NCj4gPiA+ICsJCWNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgcGwzNTNfbmFuZF9j b250cm9sbGVyLCBjaGlwKTsNCj4gPiA+ICsJdTMyIHJldDsNCj4gPiA+ICsNCj4gPiA+ICsJaWYg KGNoaXAtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KQ0KPiA+ID4gKwkJcGwzNTNfc21jX3Nl dF9idXN3aWR0aChQTDM1M19TTUNfTUVNX1dJRFRIXzE2KTsNCj4gPiA+ICsNCj4gPiA+ICsJaWYg KG10ZC0+d3JpdGVzaXplIDw9IFNaXzUxMikNCj4gPiA+ICsJCXhuZmMtPmFkZHJfY3ljbGVzID0g MTsNCj4gPiA+ICsJZWxzZQ0KPiA+ID4gKwkJeG5mYy0+YWRkcl9jeWNsZXMgPSAyOw0KPiA+ID4g Kw0KPiA+ID4gKwlpZiAoY2hpcC0+b3B0aW9ucyAmIE5BTkRfUk9XX0FERFJfMykNCj4gPiA+ICsJ CXhuZmMtPmFkZHJfY3ljbGVzICs9IDM7DQo+ID4gPiArCWVsc2UNCj4gPiA+ICsJCXhuZmMtPmFk ZHJfY3ljbGVzICs9IDI7DQo+ID4gPiArDQo+ID4gPiArCXJldCA9IHBsMzUzX25hbmRfZWNjX2lu aXQobXRkLCAmY2hpcC0+ZWNjLCBjaGlwLT5lY2MubW9kZSk7DQo+ID4gPiArCWlmIChyZXQpIHsN Cj4gPiA+ICsJCWRldl9lcnIoeG5mYy0+ZGV2LCAiRUNDIGluaXQgZmFpbGVkXG4iKTsNCj4gPiA+ ICsJCXJldHVybiByZXQ7DQo+ID4gPiArCX0NCj4gPiA+ICsNCj4gPiA+ICsJaWYgKCFtdGQtPm5h bWUpIHsNCj4gPiA+ICsJCS8qDQo+ID4gPiArCQkgKiBJZiB0aGUgbmV3IGJpbmRpbmdzIGFyZSB1 c2VkIGFuZCB0aGUgYm9vdGxvYWRlciBoYXMgbm90IGJlZW4NCj4gPiA+ICsJCSAqIHVwZGF0ZWQg dG8gcGFzcyBhIG5ldyBtdGRwYXJ0cyBwYXJhbWV0ZXIgb24gdGhlIGNtZGxpbmUsIHlvdQ0KPiA+ ID4gKwkJICogc2hvdWxkIGRlZmluZSB0aGUgZm9sbG93aW5nIHByb3BlcnR5IGluIHlvdXIgTkFO RCBub2RlLCBpZToNCj4gPiA+ICsJCSAqDQo+ID4gPiArCQkgKglsYWJlbCA9ICJwbDM1My1uYW5k IjsNCj4gPiA+ICsJCSAqDQo+ID4gPiArCQkgKiBUaGlzIHdheSwgbXRkLT5uYW1lIHdpbGwgYmUg c2V0IGJ5IHRoZSBjb3JlIHdoZW4NCj4gPiA+ICsJCSAqIG5hbmRfc2V0X2ZsYXNoX25vZGUoKSBp cyBjYWxsZWQuDQo+ID4gPiArCQkgKi8NCj4gPiA+ICsJCW10ZC0+bmFtZSA9IGRldm1fa2FzcHJp bnRmKHhuZmMtPmRldiwgR0ZQX0tFUk5FTCwNCj4gPiA+ICsJCQkJCSAgICIlcyIsIFBMMzUzX05B TkRfRFJJVkVSX05BTUUpOw0KPiA+ID4gKwkJaWYgKCFtdGQtPm5hbWUpIHsNCj4gPiA+ICsJCQlk ZXZfZXJyKHhuZmMtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBtdGQtPm5hbWVcbiIpOw0KPiA+ ID4gKwkJCXJldHVybiAtRU5PTUVNOw0KPiA+ID4gKwkJfQ0KPiA+ID4gKwl9DQo+ID4gPiArDQo+ ID4gPiArCXJldHVybiAwOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgY29uc3Qg c3RydWN0IG5hbmRfY29udHJvbGxlcl9vcHMgcGwzNTNfbmFuZF9jb250cm9sbGVyX29wcyA9IHsN Cj4gPiA+ICsJLmF0dGFjaF9jaGlwID0gcGwzNTNfbmFuZF9hdHRhY2hfY2hpcCwNCj4gPiA+ICsJ LmV4ZWNfb3AgPSBwbDM1M19uZmNfZXhlY19vcCwNCj4gPiA+ICsJLnNldHVwX2RhdGFfaW50ZXJm YWNlID0gcGwzNTNfbmZjX3NldHVwX2RhdGFfaW50ZXJmYWNlLA0KPiA+ID4gK307DQo+ID4gPiAr DQo+ID4gPiArLyoqDQo+ID4gPiArICogcGwzNTNfbmFuZF9wcm9iZSAtIFByb2JlIG1ldGhvZCBm b3IgdGhlIE5BTkQgZHJpdmVyDQo+ID4gPiArICogQHBkZXY6CVBvaW50ZXIgdG8gdGhlIHBsYXRm b3JtX2RldmljZSBzdHJ1Y3R1cmUNCj4gPiA+ICsgKg0KPiA+ID4gKyAqIFRoaXMgZnVuY3Rpb24g aW5pdGlhbGl6ZXMgdGhlIGRyaXZlciBkYXRhIHN0cnVjdHVyZXMgYW5kIHRoZSBoYXJkd2FyZS4N Cj4gPiA+ICsgKiBUaGUgTkFORCBkcml2ZXIgaGFzIGRlcGVuZGVuY3kgd2l0aCB0aGUgcGwzNTNf c21jIG1lbW9yeSBjb250cm9sbGVyDQo+ID4gPiArICogZHJpdmVyIGZvciBpbml0aWFsaXppbmcg dGhlIE5BTkQgdGltaW5nIHBhcmFtZXRlcnMsIGJ1cyB3aWR0aCwgRUNDIG1vZGVzLA0KPiA+ID4g KyAqIGNvbnRyb2wgYW5kIHN0YXR1cyBpbmZvcm1hdGlvbi4NCj4gPiA+ICsgKg0KPiA+ID4gKyAq IFJldHVybjoJMCBvbiBzdWNjZXNzIG9yIGVycm9yIHZhbHVlIG9uIGZhaWx1cmUNCj4gPiA+ICsg Ki8NCj4gPiA+ICtzdGF0aWMgaW50IHBsMzUzX25hbmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikNCj4gPiA+ICt7DQo+ID4gPiArCXN0cnVjdCBwbDM1M19uYW5kX2NvbnRyb2xs ZXIgKnhuZmM7DQo+ID4gPiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkOw0KPiA+ID4gKwlzdHJ1Y3Qg bmFuZF9jaGlwICpjaGlwOw0KPiA+ID4gKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsNCj4gPiA+ICsJ c3RydWN0IGRldmljZV9ub2RlICpucCwgKmRuOw0KPiA+ID4gKwl1MzIgcmV0LCB2YWw7DQo+ID4g PiArDQo+ID4gPiArCXhuZmMgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCp4bmZj KSwgR0ZQX0tFUk5FTCk7DQo+ID4gPiArCWlmICgheG5mYykNCj4gPiA+ICsJCXJldHVybiAtRU5P TUVNOw0KPiA+ID4gKwl4bmZjLT5kZXYgPSAmcGRldi0+ZGV2Ow0KPiA+ID4gKw0KPiA+ID4gKwlu YW5kX2NvbnRyb2xsZXJfaW5pdCgmeG5mYy0+Y29udHJvbGxlcik7DQo+ID4gPiArCXhuZmMtPmNv bnRyb2xsZXIub3BzID0gJnBsMzUzX25hbmRfY29udHJvbGxlcl9vcHM7DQo+ID4gPiArCS8qIE1h cCBwaHlzaWNhbCBhZGRyZXNzIG9mIE5BTkQgZmxhc2ggKi8NCj4gPiA+ICsJcmVzID0gcGxhdGZv cm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsNCj4gPiA+ICsJeG5mYy0+ cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSh4bmZjLT5kZXYsIHJlcyk7DQo+ID4gPiArCWlm IChJU19FUlIoeG5mYy0+cmVncykpDQo+ID4gPiArCQlyZXR1cm4gUFRSX0VSUih4bmZjLT5yZWdz KTsNCj4gPiA+ICsNCj4gPiA+ICsJY2hpcCA9ICZ4bmZjLT5jaGlwOw0KPiA+ID4gKwljaGlwLT5j b250cm9sbGVyID0gJnhuZmMtPmNvbnRyb2xsZXI7DQo+ID4gPiArCW10ZCA9IG5hbmRfdG9fbXRk KGNoaXApOw0KPiA+ID4gKwluYW5kX3NldF9jb250cm9sbGVyX2RhdGEoY2hpcCwgeG5mYyk7DQo+ ID4gPiArCW10ZC0+cHJpdiA9IGNoaXA7DQo+ID4gPiArCW10ZC0+b3duZXIgPSBUSElTX01PRFVM RTsNCj4gPiA+ICsJbmFuZF9zZXRfZmxhc2hfbm9kZShjaGlwLCB4bmZjLT5kZXYtPm9mX25vZGUp Ow0KPiA+ID4gKw0KPiA+ID4gKwkvKiBTZXQgdGhlIGRyaXZlciBlbnRyeSBwb2ludHMgZm9yIE1U RCAqLw0KPiA+ID4gKwljaGlwLT5sZWdhY3kuZGV2X3JlYWR5ID0gcGwzNTNfbmFuZF9kZXZpY2Vf cmVhZHk7DQo+ID4NCj4gPiBQbGVhc2UgZG8gbm90IGltcGxlbWVudCBsZWdhY3kgaW50ZXJmYWNl cy4NCj4gT2ssIG5vdyBpdCBpcyBtb3ZlZCB0byBuYW5kX2xlZ2FjeS5jLCBJIHdpbGwgdXBkYXRl IGl0Lg0KPiANCj4gVGhhbmtzLA0KPiBOYWdhIFN1cmVzaGt1bWFyIFJlbGxpDQo+ID4NCj4gPiA+ ICsJLyogSWYgd2UgZG9uJ3Qgc2V0IHRoaXMgZGVsYXkgZHJpdmVyIHNldHMgMjB1cyBieSBkZWZh dWx0ICovDQo+ID4gPiArCW5wID0gb2ZfZ2V0X25leHRfcGFyZW50KHhuZmMtPmRldi0+b2Zfbm9k ZSk7DQo+ID4gPiArCXhuZmMtPm1jbGsgPSBvZl9jbGtfZ2V0KG5wLCAwKTsNCj4gPiA+ICsJaWYg KElTX0VSUih4bmZjLT5tY2xrKSkgew0KPiA+ID4gKwkJZGV2X2Vycih4bmZjLT5kZXYsICJGYWls ZWQgdG8gcmV0cmlldmUgTUNLIGNsa1xuIik7DQo+ID4gPiArCQlyZXR1cm4gUFRSX0VSUih4bmZj LT5tY2xrKTsNCj4gPiA+ICsJfQ0KPiA+ID4gKw0KPiA+ID4gKwlkbiA9IG5hbmRfZ2V0X2ZsYXNo X25vZGUoY2hpcCk7DQo+ID4gPiArDQo+ID4gPiArCS8qIFNldCB0aGUgZGV2aWNlIG9wdGlvbiBh bmQgZmxhc2ggd2lkdGggKi8NCj4gPiA+ICsJY2hpcC0+b3B0aW9ucyA9IE5BTkRfQlVTV0lEVEhf QVVUTzsNCj4gPiA+ICsJY2hpcC0+YmJ0X29wdGlvbnMgPSBOQU5EX0JCVF9VU0VfRkxBU0g7DQo+ ID4gPiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHhuZmMpOw0KPiA+ID4gKwlyZXQgPSBu YW5kX3NjYW4oY2hpcCwgMSk7DQo+ID4gPiArCWlmIChyZXQpIHsNCj4gPiA+ICsJCWRldl9lcnIo eG5mYy0+ZGV2LCAiY291bGQgbm90IHNjYW4gdGhlIG5hbmQgY2hpcFxuIik7DQo+ID4gPiArCQly ZXR1cm4gcmV0Ow0KPiA+ID4gKwl9DQo+ID4gPiArDQo+ID4gPiArCXJldCA9IG10ZF9kZXZpY2Vf cmVnaXN0ZXIobXRkLCBOVUxMLCAwKTsNCj4gPiA+ICsJaWYgKHJldCkgew0KPiA+ID4gKwkJZGV2 X2Vycih4bmZjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgbXRkIGRldmljZTogJWRcbiIsIHJl dCk7DQo+ID4gPiArCQluYW5kX2NsZWFudXAoY2hpcCk7DQo+ID4gPiArCQlyZXR1cm4gcmV0Ow0K PiA+ID4gKwl9DQo+ID4gPiArDQo+ID4gPiArCXJldHVybiAwOw0KPiA+ID4gK30NCj4gPiA+ICsN Cj4gPiA+ICsvKioNCj4gPiA+ICsgKiBwbDM1M19uYW5kX3JlbW92ZSAtIFJlbW92ZSBtZXRob2Qg Zm9yIHRoZSBOQU5EIGRyaXZlcg0KPiA+ID4gKyAqIEBwZGV2OglQb2ludGVyIHRvIHRoZSBwbGF0 Zm9ybV9kZXZpY2Ugc3RydWN0dXJlDQo+ID4gPiArICoNCj4gPiA+ICsgKiBUaGlzIGZ1bmN0aW9u IGlzIGNhbGxlZCBpZiB0aGUgZHJpdmVyIG1vZHVsZSBpcyBiZWluZyB1bmxvYWRlZC4gSXQgZnJl ZXMgYWxsDQo+ID4gPiArICogcmVzb3VyY2VzIGFsbG9jYXRlZCB0byB0aGUgZGV2aWNlLg0KPiA+ ID4gKyAqDQo+ID4gPiArICogUmV0dXJuOgkwIG9uIHN1Y2Nlc3Mgb3IgZXJyb3IgdmFsdWUgb24g ZmFpbHVyZQ0KPiA+ID4gKyAqLw0KPiA+ID4gK3N0YXRpYyBpbnQgcGwzNTNfbmFuZF9yZW1vdmUo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gPiA+ICt7DQo+ID4gPiArCXN0cnVjdCBw bDM1M19uYW5kX2NvbnRyb2xsZXIgKnhuZmMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsN Cj4gPiA+ICsJc3RydWN0IG10ZF9pbmZvICptdGQgPSBuYW5kX3RvX210ZCgmeG5mYy0+Y2hpcCk7 DQo+ID4gPiArCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGRfdG9fbmFuZChtdGQpOw0KPiA+ ID4gKw0KPiA+ID4gKwkvKiBSZWxlYXNlIHJlc291cmNlcywgdW5yZWdpc3RlciBkZXZpY2UgKi8N Cj4gPiA+ICsJbmFuZF9yZWxlYXNlKGNoaXApOw0KPiA+ID4gKw0KPiA+ID4gKwlyZXR1cm4gMDsN Cj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLyogTWF0Y2ggdGFibGUgZm9yIGRldmljZSB0cmVl IGJpbmRpbmcgKi8NCj4gPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBwbDM1 M19uYW5kX29mX21hdGNoW10gPSB7DQo+ID4gPiArCXsgLmNvbXBhdGlibGUgPSAiYXJtLHBsMzUz LW5hbmQtcjJwMSIgfSwNCj4gPiA+ICsJe30sDQo+ID4gPiArfTsNCj4gPiA+ICtNT0RVTEVfREVW SUNFX1RBQkxFKG9mLCBwbDM1M19uYW5kX29mX21hdGNoKTsNCj4gPiA+ICsNCj4gPiA+ICsvKg0K PiA+ID4gKyAqIHBsMzUzX25hbmRfZHJpdmVyIC0gVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyB0aGUg TkFORCBzdWJzeXN0ZW0gcGxhdGZvcm0gZHJpdmVyDQo+ID4gPiArICovDQo+ID4gPiArc3RhdGlj IHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcGwzNTNfbmFuZF9kcml2ZXIgPSB7DQo+ID4gPiArCS5w cm9iZQkJPSBwbDM1M19uYW5kX3Byb2JlLA0KPiA+ID4gKwkucmVtb3ZlCQk9IHBsMzUzX25hbmRf cmVtb3ZlLA0KPiA+ID4gKwkuZHJpdmVyCQk9IHsNCj4gPiA+ICsJCS5uYW1lCT0gUEwzNTNfTkFO RF9EUklWRVJfTkFNRSwNCj4gPiA+ICsJCS5vZl9tYXRjaF90YWJsZSA9IHBsMzUzX25hbmRfb2Zf bWF0Y2gsDQo+ID4gPiArCX0sDQo+ID4gPiArfTsNCj4gPiA+ICsNCj4gPiA+ICttb2R1bGVfcGxh dGZvcm1fZHJpdmVyKHBsMzUzX25hbmRfZHJpdmVyKTsNCj4gPiA+ICsNCj4gPiA+ICtNT0RVTEVf QVVUSE9SKCJYaWxpbngsIEluYy4iKTsNCj4gPiA+ICtNT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIg UEwzNTNfTkFORF9EUklWRVJfTkFNRSk7DQo+ID4gPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJBUk0g UEwzNTMgTkFORCBGbGFzaCBEcml2ZXIiKTsNCj4gPiA+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7 DQo+ID4NCj4gPg0KPiA+IFRoYW5rcywNCj4gPiBNaXF1w6hsDQpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXggTVREIGRpc2N1c3Npb24g bWFpbGluZyBsaXN0Cmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8v bGludXgtbXRkLwo=