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=-8.3 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_2 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 03912C43603 for ; Wed, 4 Dec 2019 12:25:04 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 8794A207DD for ; Wed, 4 Dec 2019 12:25:03 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=nxp.com header.i=@nxp.com header.b="Ok1EXvHj" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727508AbfLDMZD (ORCPT ); Wed, 4 Dec 2019 07:25:03 -0500 Received: from mail-eopbgr30053.outbound.protection.outlook.com ([40.107.3.53]:46158 "EHLO EUR03-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727469AbfLDMZC (ORCPT ); Wed, 4 Dec 2019 07:25:02 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WkC+PvggHpjHIu/lDSI7S0Xr/zT22k8DyBP5nwwTDtAyxk+sRldvfjudC/dEQiW3wZDcawnXDN01oUyWRVOfMsjBRSWHIrV0XPhvOcnZ3yb3t8BuvGiNa6GPewi/NEQL5K92Z8ozesdkEVxIAGGIR7H/woAcTefCLOsCtgKeJMdmppwiIPfniCPMUiZydsgveaKvfLB1lKM1JGwiWMF3KEdBbLwBcEMWZyhwQQbAuKG4oBdtrBau9LCqiyZGVi8Ngn+991Y8yqEW8JlFs7VmCK9ohRPnVTg1xYHkOu6VuK4wVaX423Lpr9kT40Lwg4V+AshOhkabMMk/GHzKHXzWLg== 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=KiHwY+IawD+aFEw5VijoXMjy5VPVoqWqbyV+eKDUX+Y=; b=XyO/NTb+SwfyRyc0zuUlTTN74xwXEtcPaE8uNjxdnlgcwspe2htn7mLh5ce/pDMcqoA3rZqAqQ75ZvWYyjjsr7/42fQrPqW2nzA4aLsRaknhEJVRAkPTNbYCQp6OmllwLyHa+UFh7H7GMx+oTF9BI/AhcaemDyoo1ck5OCZHoTPmfOCye0AxmzUldH9Cj3FjYBuERI4/uwAF0Cjk5N/7fwNoL4LHJJN9L80Lt/D1Ape4/CmjKpPw802eOnUyDF8NNPsjwxOGu7I5VtKWSuajUNEAYUQ8z8FwwIdhjfNWUTQnFRZkVUUsNDRVqDk/xX5/fYY69AmEY41+9pf01TqLIg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KiHwY+IawD+aFEw5VijoXMjy5VPVoqWqbyV+eKDUX+Y=; b=Ok1EXvHjgmz75V0yitkiiERwwOU6Cx8tXMy3REfD519KWU5g9MrH+7F8csEIWrbNO6PkercJcqy1jAStHVR236TDL372c47oSCblZi1pHA7r5gXRkaPvmdLkZ0Nhc2pH2FZ0OpWh7YnJnlnhG4AnFsQxVvHoZZ5g6WUq3Q4VC6E= Received: from VI1PR04MB3278.eurprd04.prod.outlook.com (10.170.226.16) by VI1PR04MB4160.eurprd04.prod.outlook.com (52.133.12.140) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2516.13; Wed, 4 Dec 2019 12:24:39 +0000 Received: from VI1PR04MB3278.eurprd04.prod.outlook.com ([fe80::2047:380c:ad37:68a9]) by VI1PR04MB3278.eurprd04.prod.outlook.com ([fe80::2047:380c:ad37:68a9%3]) with mapi id 15.20.2516.003; Wed, 4 Dec 2019 12:24:39 +0000 From: Robert Chiras To: "agx@sigxcpu.org" CC: dl-linux-imx , "linux-kernel@vger.kernel.org" , "robh+dt@kernel.org" , "narmstrong@baylibre.com" , "devicetree@vger.kernel.org" , "festevam@gmail.com" , "lee.jones@linaro.org" , "jernej.skrabec@siol.net" , "daniel@ffwll.ch" , "mark.rutland@arm.com" , "a.hajda@samsung.com" , "dri-devel@lists.freedesktop.org" , "jonas@kwiboo.se" , "shawnguo@kernel.org" , "linux-arm-kernel@lists.infradead.org" , "airlied@linux.ie" , "sam@ravnborg.org" , "Laurent.pinchart@ideasonboard.com" , "kernel@pengutronix.de" , "arnd@arndb.de" , "s.hauer@pengutronix.de" Subject: Re: [EXT] [PATCH v8 2/2] drm/bridge: Add NWL MIPI DSI host controller support Thread-Topic: [EXT] [PATCH v8 2/2] drm/bridge: Add NWL MIPI DSI host controller support Thread-Index: AQHVqUeii4HpgjhtXkmMEhgV0QanA6eoK3cAgAG4iQCAAAUGgA== Date: Wed, 4 Dec 2019 12:24:39 +0000 Message-ID: <1575462277.6423.71.camel@nxp.com> References: <1575366594.6423.61.camel@nxp.com> <20191204120638.GB18094@bogon.m.sigxcpu.org> In-Reply-To: <20191204120638.GB18094@bogon.m.sigxcpu.org> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: Evolution 3.18.5.2-0ubuntu3.2 authentication-results: spf=none (sender IP is ) smtp.mailfrom=robert.chiras@nxp.com; x-originating-ip: [89.37.124.34] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 41c18c7c-06aa-4962-e533-08d778b4ef20 x-ms-traffictypediagnostic: VI1PR04MB4160:|VI1PR04MB4160: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:3631; x-forefront-prvs: 0241D5F98C x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(4636009)(396003)(136003)(39860400002)(346002)(366004)(376002)(189003)(199004)(4326008)(54906003)(6512007)(76176011)(99286004)(76116006)(66946007)(6246003)(6436002)(316002)(229853002)(5640700003)(91956017)(6486002)(44832011)(102836004)(186003)(26005)(66574012)(5660300002)(2616005)(25786009)(66446008)(64756008)(66556008)(11346002)(36756003)(66476007)(30864003)(2351001)(6506007)(14454004)(478600001)(2501003)(86362001)(2906002)(6116002)(6916009)(5024004)(71190400001)(71200400001)(7736002)(8936002)(103116003)(14444005)(81156014)(81166006)(1730700003)(7416002)(50226002)(3846002)(8676002)(305945005)(99106002)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:VI1PR04MB4160;H:VI1PR04MB3278.eurprd04.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 2Lnx7Bq8pnQYrsj9p1/4HTRLwaFdEV6TWk2ZAoY6CRvYewDr5nqTcVFOzESjgr+UO+AjHMlPXiwmHU78pqdSzcbcgjFupoXGL6le19msiHuCoU4+eQnEm+QAZucs8RFbdBduXpz+HPTd+Rff0Mnft3PrfII3LATPHEcC51yN7uSt88XD1d12rL5a7vdujqdYd2Od3K1mYZ7sTOWfPqVLVHBCotUJedC3aPL9D5jDBEkqka6LRxJ96BBJlvJIrBXetiI8s7K0RhRKWJaFUufbWyvOx4AQUKDL2zZigJ7xc+AVj2x3clJFN8b+U9JLlpm7GlTaM1YTTpREM5pnk0W290+NTHCX9xWvAwbZuD4mD+d3/M0m/hWUGhB5MQtwKB4fbo4EWlOtBNdGrylB1DOAY0WbM6zYJGlHIHzltnpbO+EJ0nXWjhAjtiCbpBQrEeWP/KD/tKQaA9jHH3aQwRIjmW8AL/wUOK70/yDwCYJjCvx7nI6XTNrmsHdj4z/X/eXr Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 41c18c7c-06aa-4962-e533-08d778b4ef20 X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Dec 2019 12:24:39.5522 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: ashmBKFEE6YX2Vz8kYFJSzVBuSuZzBozSc6auPh24WZEo4wa1TqC42MNqU7bSine36hrcGmbTUO27XXmg4RnVg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4160 Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org T24gTWksIDIwMTktMTItMDQgYXQgMTM6MDYgKzAxMDAsIEd1aWRvIEfDvG50aGVyIHdyb3RlOg0K PiBIaSBSb2JlcnQsDQo+IE9uIFR1ZSwgRGVjIDAzLCAyMDE5IGF0IDA5OjUwOjAzQU0gKzAwMDAs IFJvYmVydCBDaGlyYXMgd3JvdGU6DQo+ID4gDQo+ID4gSGkgR3VpZG8sDQo+ID4gDQo+ID4gU2lu Y2UgeW91ciBsYXN0IHJldmlzaW9uIHNlbnQsIEkndmUgZG9uZSBtb3JlIHRlc3RzIGhlcmUgYW5k IGZvdW5kDQo+ID4gYQ0KPiA+IGZldyBtb3JlIGltcHJvdmVtZW50cyB0aGF0IGNvdWxkIGJlIGFk ZGVkIHRvIHRoaXMgZHJpdmVyLg0KPiA+IFNlZSBpbmxpbmUuDQo+ID4gDQo+ID4gT24gTHUsIDIw MTktMTItMDIgYXQgMjA6MzUgKzAxMDAsIEd1aWRvIEfDvG50aGVyIHdyb3RlOg0KPiA+ID4gDQo+ ID4gPiBDYXV0aW9uOiBFWFQgRW1haWwNCj4gPiA+IA0KPiA+ID4gVGhpcyBhZGRzIGluaXRpYWwg c3VwcG9ydCBmb3IgdGhlIE5XTCBNSVBJIERTSSBIb3N0IGNvbnRyb2xsZXINCj4gPiA+IGZvdW5k DQo+ID4gPiBvbg0KPiA+ID4gaS5NWDggU29Dcy4NCj4gPiA+IA0KPiA+ID4gSXQgYWRkcyBzdXBw b3J0IGZvciB0aGUgaS5NWDhNUSBidXQgdGhlIHNhbWUgSVAgY2FuIGJlIGZvdW5kIG9uDQo+ID4g PiBlLmcuIHRoZSBpLk1YOFFYUC4NCj4gPiA+IA0KPiA+ID4gSXQgaGFzIGJlZW4gdGVzdGVkIG9u IHRoZSBMaWJyZW0gNSBkZXZraXQgdXNpbmcgbXhzZmIuDQo+ID4gPiANCj4gPiA+IFNpZ25lZC1v ZmYtYnk6IEd1aWRvIEfDvG50aGVyIDxhZ3hAc2lneGNwdS5vcmc+DQo+ID4gPiBDby1kZXZlbG9w ZWQtYnk6IFJvYmVydCBDaGlyYXMgPHJvYmVydC5jaGlyYXNAbnhwLmNvbT4NCj4gPiA+IFNpZ25l ZC1vZmYtYnk6IFJvYmVydCBDaGlyYXMgPHJvYmVydC5jaGlyYXNAbnhwLmNvbT4NCj4gPiA+IFRl c3RlZC1ieTogUm9iZXJ0IENoaXJhcyA8cm9iZXJ0LmNoaXJhc0BueHAuY29tPg0KPiA+ID4gLS0t DQo+ID4gPiDCoGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZ8KgwqDCoHzCoMKgwqAxNiAr DQo+ID4gPiDCoGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGXCoMKgfMKgwqDCoMKgMyAr DQo+ID4gPiDCoGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRzaS5jIHwgMTIzMA0KPiA+ID4g KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ID4gPiDCoGRyaXZlcnMvZ3B1L2RybS9i cmlkZ2UvbndsLWRzaS5oIHzCoMKgMTQ0ICsrKysNCj4gPiA+IMKgNCBmaWxlcyBjaGFuZ2VkLCAx MzkzIGluc2VydGlvbnMoKykNCj4gPiA+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9icmlkZ2UvbndsLWRzaS5jDQo+ID4gPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vYnJpZGdlL253bC1kc2kuaA0KPiA+ID4gDQo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnDQo+ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9icmlk Z2UvS2NvbmZpZw0KPiA+ID4gaW5kZXggMzQzNjI5NzZjZDZmLi42ZmI1MzRmNTVkMjIgMTAwNjQ0 DQo+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcNCj4gPiA+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZw0KPiA+ID4gQEAgLTY1LDYgKzY1LDIyIEBA IGNvbmZpZyBEUk1fTUVHQUNISVBTX1NURFBYWFhYX0dFX0I4NTBWM19GVw0KPiA+ID4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHRvIERQKysuIFRoaXMgaXMgdXNlZCB3aXRoIHRoZSBpLk1YNiBpbXgt bGRiDQo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJpdmVyLiBZb3UgYXJlIGxpa2VseSB0 byBzYXkgTiBoZXJlLg0KPiA+ID4gDQo+ID4gPiArY29uZmlnIERSTV9OV0xfTUlQSV9EU0kNCj4g PiA+ICvCoMKgwqDCoMKgwqDCoHRyaXN0YXRlICJOb3J0aHdlc3QgTG9naWMgTUlQSSBEU0kgSG9z dCBjb250cm9sbGVyIg0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgZGVwZW5kcyBvbiBEUk0NCj4gPiA+ ICvCoMKgwqDCoMKgwqDCoGRlcGVuZHMgb24gQ09NTU9OX0NMSw0KPiA+ID4gK8KgwqDCoMKgwqDC oMKgZGVwZW5kcyBvbiBPRiAmJiBIQVNfSU9NRU0NCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHNlbGVj dCBEUk1fS01TX0hFTFBFUg0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc2VsZWN0IERSTV9NSVBJX0RT SQ0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc2VsZWN0IERSTV9QQU5FTF9CUklER0UNCj4gPiA+ICvC oMKgwqDCoMKgwqDCoHNlbGVjdCBHRU5FUklDX1BIWV9NSVBJX0RQSFkNCj4gPiA+ICvCoMKgwqDC oMKgwqDCoHNlbGVjdCBNRkRfU1lTQ09ODQo+ID4gPiArwqDCoMKgwqDCoMKgwqBzZWxlY3QgTVVM VElQTEVYRVINCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHNlbGVjdCBSRUdNQVBfTU1JTw0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgaGVscA0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoFRoaXMgZW5hYmxl cyB0aGUgTm9ydGh3ZXN0IExvZ2ljIE1JUEkgRFNJIEhvc3QNCj4gPiA+IGNvbnRyb2xsZXINCj4g PiA+IGFzDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgZm9yIGV4YW1wbGUgZm91bmQgb24gTlhQ J3MgaS5NWDggUHJvY2Vzc29ycy4NCj4gPiA+ICsNCj4gPiA+IMKgY29uZmlnIERSTV9OWFBfUFRO MzQ2MA0KPiA+ID4gwqDCoMKgwqDCoMKgwqDCoHRyaXN0YXRlICJOWFAgUFROMzQ2MCBEUC9MVkRT IGJyaWRnZSINCj4gPiA+IMKgwqDCoMKgwqDCoMKgwqBkZXBlbmRzIG9uIE9GDQo+ID4gPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZQ0KPiA+ID4gYi9kcml2ZXJz L2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlDQo+ID4gPiBpbmRleCA0OTM0ZmNmNWE2ZjguLmMzZjNh NDNlOWI4ZiAxMDA2NDQNCj4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZp bGUNCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUNCj4gPiA+IEBA IC0xNiw0ICsxNiw3IEBAIG9iai0kKENPTkZJR19EUk1fQU5BTE9HSVhfRFApICs9IGFuYWxvZ2l4 Lw0KPiA+ID4gwqBvYmotJChDT05GSUdfRFJNX0kyQ19BRFY3NTExKSArPSBhZHY3NTExLw0KPiA+ ID4gwqBvYmotJChDT05GSUdfRFJNX1RJX1NONjVEU0k4NikgKz0gdGktc242NWRzaTg2Lm8NCj4g PiA+IMKgb2JqLSQoQ09ORklHX0RSTV9USV9URlA0MTApICs9IHRpLXRmcDQxMC5vDQo+ID4gPiAr b2JqLSQoQ09ORklHX0RSTV9OV0xfTUlQSV9EU0kpICs9IG53bC1kc2kubw0KPiA+ID4gwqBvYmot eSArPSBzeW5vcHN5cy8NCj4gPiA+ICsNCj4gPiA+ICtoZWFkZXItdGVzdC15ICs9IG53bC1kc2ku aA0KPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRzaS5jDQo+ ID4gPiBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRzaS5jDQo+ID4gPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPiA+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi4wMjMxOTE4OTRmZTQNCj4gPiA+ IC0tLSAvZGV2L251bGwNCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRz aS5jDQo+ID4gPiBAQCAtMCwwICsxLDEyMzAgQEANCj4gPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMCsNCj4gPiA+ICsvKg0KPiA+ID4gKyAqIGkuTVg4IE5XTCBNSVBJIERT SSBob3N0IGRyaXZlcg0KPiA+ID4gKyAqDQo+ID4gPiArICogQ29weXJpZ2h0IChDKSAyMDE3IE5Y UA0KPiA+ID4gKyAqIENvcHlyaWdodCAoQykgMjAxOSBQdXJpc20gU1BDDQo+ID4gPiArICovDQo+ ID4gPiArDQo+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2JpdGZpZWxkLmg+DQo+ID4gPiArI2luY2x1 ZGUgPGxpbnV4L2Nsay5oPg0KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4NCj4gPiA+ICsj aW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+DQo+ID4gPiArI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNj b24uaD4NCj4gPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+ID4gPiArI2luY2x1ZGUg PGxpbnV4L211eC9jb25zdW1lci5oPg0KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9vZi5oPg0KPiA+ ID4gKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPg0KPiA+ID4gKyNpbmNsdWRlIDxsaW51 eC9waHkvcGh5Lmg+DQo+ID4gPiArI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPg0KPiA+ID4gKyNp bmNsdWRlIDxsaW51eC9yZXNldC5oPg0KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9zeXNfc29jLmg+ DQo+ID4gPiArI2luY2x1ZGUgPGxpbnV4L3RpbWU2NC5oPg0KPiA+ID4gKw0KPiA+ID4gKyNpbmNs dWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4NCj4gPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9i cmlkZ2UuaD4NCj4gPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9taXBpX2RzaS5oPg0KPiA+ID4gKyNp bmNsdWRlIDxkcm0vZHJtX29mLmg+DQo+ID4gPiArI2luY2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4N Cj4gPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9wcmludC5oPg0KPiA+ID4gKyNpbmNsdWRlIDxkcm0v ZHJtX3Byb2JlX2hlbHBlci5oPg0KPiA+ID4gKw0KPiA+ID4gKyNpbmNsdWRlIDx2aWRlby9taXBp X2Rpc3BsYXkuaD4NCj4gPiA+ICsjaW5jbHVkZSA8dmlkZW8vdmlkZW9tb2RlLmg+DQo+ID4gPiAr DQo+ID4gPiArI2luY2x1ZGUgIm53bC1kc2kuaCINCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIERS Vl9OQU1FICJud2wtZHNpIg0KPiA+ID4gKw0KPiA+ID4gKy8qIGkuTVg4IE5XTCBxdWlya3MgKi8N Cj4gPiA+ICsvKiBpLk1YOE1RIGVycmF0YSBFMTE0MTggKi8NCj4gPiA+ICsjZGVmaW5lIEUxMTQx OF9IU19NT0RFX1FVSVJLwqDCoMKgQklUKDApDQo+ID4gPiArDQo+ID4gPiArI2RlZmluZSBOV0xf RFNJX01JUElfRklGT19USU1FT1VUIG1zZWNzX3RvX2ppZmZpZXMoNTAwKQ0KPiA+ID4gKw0KPiA+ ID4gK2VudW0gdHJhbnNmZXJfZGlyZWN0aW9uIHsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoERTSV9Q QUNLRVRfU0VORCwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoERTSV9QQUNLRVRfUkVDRUlWRSwNCj4g PiA+ICt9Ow0KPiA+ID4gKw0KPiA+ID4gKy8qIFBvc3NpYmxlIHBsYXRmb3JtIHNwZWNpZmljIGNs b2NrcyAqLw0KPiA+ID4gKyNkZWZpbmUgTldMX0RTSV9DTEtfQ09SRcKgwqDCoMKgwqDCoMKgwqDC oMKgwqAiY29yZSINCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfTUFYX1BMQVRGT1JNX0NMT0NLUyAx DQo+ID4gPiArDQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX0VORFBPSU5UX0xDRElGIDANCj4gPiA+ ICsjZGVmaW5lIE5XTF9EU0lfRU5EUE9JTlRfRENTUyAxDQo+ID4gPiArDQo+ID4gPiArc3RydWN0 IG53bF9kc2lfcGxhdF9jbGtfY29uZmlnIHsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGNvbnN0IGNo YXIgKmlkOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGNsayAqY2xrOw0KPiA+ID4gK8Kg wqDCoMKgwqDCoMKgYm9vbCBwcmVzZW50Ow0KPiA+ID4gK307DQo+ID4gPiArDQo+ID4gPiArc3Ry dWN0IG53bF9kc2lfdHJhbnNmZXIgew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0 IG1pcGlfZHNpX21zZyAqbXNnOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG1pcGlfZHNp X3BhY2tldCBwYWNrZXQ7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgY29tcGxldGlvbiBj b21wbGV0ZWQ7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqBpbnQgc3RhdHVzOyAvKiBz dGF0dXMgb2YgdHJhbnNtaXNzaW9uICovDQo+ID4gPiArwqDCoMKgwqDCoMKgwqBlbnVtIHRyYW5z ZmVyX2RpcmVjdGlvbiBkaXJlY3Rpb247DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBib29sIG5lZWRf YnRhOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgdTggY21kOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKg dTE2IHJ4X3dvcmRfY291bnQ7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBzaXplX3QgdHhfbGVuOyAv KiBpbiBieXRlcyAqLw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc2l6ZV90IHJ4X2xlbjsgLyogaW4g Ynl0ZXMgKi8NCj4gPiA+ICt9Ow0KPiA+ID4gKw0KPiA+ID4gK3N0cnVjdCBud2xfZHNpIHsNCj4g PiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fYnJpZGdlIGJyaWRnZTsNCj4gPiA+ICvCoMKg wqDCoMKgwqDCoHN0cnVjdCBtaXBpX2RzaV9ob3N0IGRzaV9ob3N0Ow0KPiA+ID4gK8KgwqDCoMKg wqDCoMKgc3RydWN0IGRybV9icmlkZ2UgKnBhbmVsX2JyaWRnZTsNCj4gPiA+ICvCoMKgwqDCoMKg wqDCoHN0cnVjdCBkZXZpY2UgKmRldjsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBwaHkg KnBoeTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHVuaW9uIHBoeV9jb25maWd1cmVfb3B0cyBwaHlf Y2ZnOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgaW50IHF1aXJrczsNCj4gPiA+ICsN Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCByZWdtYXAgKnJlZ21hcDsNCj4gPiA+ICvCoMKg wqDCoMKgwqDCoGludCBpcnE7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcmVzZXRfY29u dHJvbCAqcnN0YzsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBtdXhfY29udHJvbCAqbXV4 Ow0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgLyogRFNJIGNsb2NrcyAqLw0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgc3RydWN0IGNsayAqcGh5X3JlZl9jbGs7DQo+ID4gPiArwqDCoMKgwqDC oMKgwqBzdHJ1Y3QgY2xrICpyeF9lc2NfY2xrOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0 IGNsayAqdHhfZXNjX2NsazsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoC8qIFBsYXRmb3JtIGRlcGVu ZGVudCBjbG9ja3MgKi8NCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBud2xfZHNpX3BsYXRf Y2xrX2NvbmZpZw0KPiA+ID4gY2xrX2NvbmZpZ1tOV0xfRFNJX01BWF9QTEFURk9STV9DTE9DS1Nd Ow0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgLyogZHNpIGxhbmVzICovDQo+ID4gPiAr wqDCoMKgwqDCoMKgwqB1MzIgbGFuZXM7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBlbnVtIG1pcGlf ZHNpX3BpeGVsX2Zvcm1hdCBmb3JtYXQ7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSBtb2RlOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgbG9uZyBk c2lfbW9kZV9mbGFnczsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGludCBlcnJvcjsNCj4gPiA+ICsN Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBud2xfZHNpX3RyYW5zZmVyICp4ZmVyOw0KPiA+ ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0IG53bF9kc2lfcGxhdGZvcm1f ZGF0YSAqcGRhdGE7DQo+ID4gPiArfTsNCj4gPiA+ICsNCj4gPiA+ICsvKiBQbGF0Zm9ybSBzcGVj aWZpYyBob29rcyB0byBlbmFibGUgb3RoZXIgU29DcyBsaWtlIHRoZSBpLk1YOFFNDQo+ID4gPiAq Lw0KPiA+ID4gK3N0cnVjdCBud2xfZHNpX3BsYXRmb3JtX2RhdGEgew0KPiA+ID4gK8KgwqDCoMKg wqDCoMKgaW50ICgqcG93ZXJvbikoc3RydWN0IG53bF9kc2kgKmRzaSk7DQo+ID4gPiArwqDCoMKg wqDCoMKgwqBpbnQgKCpwb3dlcm9mZikoc3RydWN0IG53bF9kc2kgKmRzaSk7DQo+ID4gPiArwqDC oMKgwqDCoMKgwqBpbnQgKCpzZWxlY3RfaW5wdXQpKHN0cnVjdCBud2xfZHNpICpkc2kpOw0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgaW50ICgqZGVzZWxlY3RfaW5wdXQpKHN0cnVjdCBud2xfZHNpICpk c2kpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG53bF9kc2lfcGxhdF9jbGtfY29uZmln DQo+ID4gPiBjbGtfY29uZmlnW05XTF9EU0lfTUFYX1BMQVRGT1JNX0NMT0NLU107DQo+ID4gPiAr fTsNCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgbnds X2RzaV9yZWdtYXBfY29uZmlnID0gew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgLnJlZ19iaXRzID0g MTYsDQo+ID4gPiArwqDCoMKgwqDCoMKgwqAudmFsX2JpdHMgPSAzMiwNCj4gPiA+ICvCoMKgwqDC oMKgwqDCoC5yZWdfc3RyaWRlID0gNCwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoC5tYXhfcmVnaXN0 ZXIgPSBOV0xfRFNJX0lSUV9NQVNLMiwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoC5uYW1lID0gRFJW X05BTUUsDQo+ID4gPiArfTsNCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBu d2xfZHNpICpicmlkZ2VfdG9fZHNpKHN0cnVjdCBkcm1fYnJpZGdlDQo+ID4gPiAqYnJpZGdlKQ0K PiA+ID4gK3sNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBjb250YWluZXJfb2YoYnJpZGdl LCBzdHJ1Y3QgbndsX2RzaSwgYnJpZGdlKTsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArc3Rh dGljIGludCBud2xfZHNpX2NsZWFyX2Vycm9yKHN0cnVjdCBud2xfZHNpICpkc2kpDQo+ID4gPiAr ew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgaW50IHJldCA9IGRzaS0+ZXJyb3I7DQo+ID4gPiArDQo+ ID4gPiArwqDCoMKgwqDCoMKgwqBkc2ktPmVycm9yID0gMDsNCj4gPiA+ICvCoMKgwqDCoMKgwqDC oHJldHVybiByZXQ7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyB2b2lkIG53bF9k c2lfd3JpdGUoc3RydWN0IG53bF9kc2kgKmRzaSwgdW5zaWduZWQgaW50IHJlZywNCj4gPiA+IHUz Mg0KPiA+ID4gdmFsKQ0KPiA+ID4gK3sNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7DQo+ ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAoZHNpLT5lcnJvcikNCj4gPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47DQo+ID4gPiArDQo+ID4gPiArwqDCoMKg wqDCoMKgwqByZXQgPSByZWdtYXBfd3JpdGUoZHNpLT5yZWdtYXAsIHJlZywgdmFsKTsNCj4gPiA+ ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKSB7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJPUihkc2ktPmRldiwNCj4gPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIkZhaWxlZCB0byB3 cml0ZSBOV0wgRFNJIHJlZyAweCV4Og0KPiA+ID4gJWRcbiIsIHJlZywNCj4gPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0KTsN Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkc2ktPmVycm9yID0gcmV0Ow0K PiA+ID4gK8KgwqDCoMKgwqDCoMKgfQ0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMg dTMyIG53bF9kc2lfcmVhZChzdHJ1Y3QgbndsX2RzaSAqZHNpLCB1MzIgcmVnKQ0KPiA+ID4gK3sN Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGludCB2YWw7DQo+ID4gPiArwqDCoMKgwqDC oMKgwqBpbnQgcmV0Ow0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGRzaS0+ZXJy b3IpDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIDA7DQo+ID4g PiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSByZWdtYXBfcmVhZChkc2ktPnJlZ21hcCwg cmVnLCAmdmFsKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKSB7DQo+ID4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZh aWxlZCB0byByZWFkIE5XTCBEU0kNCj4gPiA+IHJlZw0KPiA+ID4gMHgleDogJWRcbiIsDQo+ID4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJlZywgcmV0KTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkc2kt PmVycm9yID0gcmV0Ow0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgfQ0KPiA+ID4gK8KgwqDCoMKgwqDC oMKgcmV0dXJuIHZhbDsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIGludCBud2xf ZHNpX2dldF9kcGlfcGl4ZWxfZm9ybWF0KGVudW0NCj4gPiA+IG1pcGlfZHNpX3BpeGVsX2Zvcm1h dA0KPiA+ID4gZm9ybWF0KQ0KPiA+ID4gK3sNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHN3aXRjaCAo Zm9ybWF0KSB7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBjYXNlIE1JUElfRFNJX0ZNVF9SR0I1NjU6 DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIE5XTF9EU0lfUElY RUxfRk9STUFUXzE2Ow0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgY2FzZSBNSVBJX0RTSV9GTVRfUkdC NjY2Og0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBOV0xfRFNJ X1BJWEVMX0ZPUk1BVF8xOEw7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBjYXNlIE1JUElfRFNJX0ZN VF9SR0I2NjZfUEFDS0VEOg0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJl dHVybiBOV0xfRFNJX1BJWEVMX0ZPUk1BVF8xODsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGNhc2Ug TUlQSV9EU0lfRk1UX1JHQjg4ODoNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXR1cm4gTldMX0RTSV9QSVhFTF9GT1JNQVRfMjQ7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBk ZWZhdWx0Og0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUlO VkFMOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgfQ0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICsv Kg0KPiA+ID4gKyAqIHBzMmJjIC0gUGljb3NlY29uZHMgdG8gYnl0ZSBjbG9jayBjeWNsZXMNCj4g PiA+ICsgKi8NCj4gPiA+ICtzdGF0aWMgdTMyIHBzMmJjKHN0cnVjdCBud2xfZHNpICpkc2ksIHVu c2lnbmVkIGxvbmcgbG9uZyBwcykNCj4gPiA+ICt7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqB1MzIg YnBwID0gbWlwaV9kc2lfcGl4ZWxfZm9ybWF0X3RvX2JwcChkc2ktPmZvcm1hdCk7DQo+ID4gPiAr DQo+ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gRElWNjRfVTY0X1JPVU5EX1VQKHBzICogZHNp LT5tb2RlLmNsb2NrICogYnBwLA0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRzaS0+bGFuZXMgKiA4ICogTlNF Q19QRVJfU0VDKTsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLyoNCj4gPiA+ICsgKiB1aTJi YyAtIFVJIHRpbWUgcGVyaW9kcyB0byBieXRlIGNsb2NrIGN5Y2xlcw0KPiA+ID4gKyAqLw0KPiA+ ID4gK3N0YXRpYyB1MzIgdWkyYmMoc3RydWN0IG53bF9kc2kgKmRzaSwgdW5zaWduZWQgbG9uZyBs b25nIHVpKQ0KPiA+ID4gK3sNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHUzMiBicHAgPSBtaXBpX2Rz aV9waXhlbF9mb3JtYXRfdG9fYnBwKGRzaS0+Zm9ybWF0KTsNCj4gPiA+ICsNCj4gPiA+ICvCoMKg wqDCoMKgwqDCoHJldHVybiBESVY2NF9VNjRfUk9VTkRfVVAodWkgKiBkc2ktPmxhbmVzLA0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGRzaS0+bW9kZS5jbG9jayAqIDEwMDAgKiBicHApOw0KPiA+ID4gK30NCj4g PiA+ICsNCj4gPiA+ICsvKg0KPiA+ID4gKyAqIHVzMmJjIC0gbWljcm8gc2Vjb25kcyB0byBscCBj bG9jayBjeWNsZXMNCj4gPiA+ICsgKi8NCj4gPiA+ICtzdGF0aWMgdTMyIHVzMmxwKHUzMiBscF9j bGtfcmF0ZSwgdW5zaWduZWQgbG9uZyB1cykNCj4gPiA+ICt7DQo+ID4gPiArwqDCoMKgwqDCoMKg wqByZXR1cm4gRElWX1JPVU5EX1VQKHVzICogbHBfY2xrX3JhdGUsIFVTRUNfUEVSX1NFQyk7DQo+ ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBpbnQgbndsX2RzaV9jb25maWdfaG9zdChz dHJ1Y3QgbndsX2RzaSAqZHNpKQ0KPiA+ID4gK3sNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHUzMiBj eWNsZXM7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcGh5X2NvbmZpZ3VyZV9vcHRzX21p cGlfZHBoeSAqY2ZnID0gJmRzaS0NCj4gPiA+ID4gDQo+ID4gPiA+IHBoeV9jZmcubWlwaV9kcGh5 Ow0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGRzaS0+bGFuZXMgPCAxIHx8IGRz aS0+bGFuZXMgPiA0KQ0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy biAtRUlOVkFMOw0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgRFJNX0RFVl9ERUJVR19E UklWRVIoZHNpLT5kZXYsICJEU0kgTGFuZXMgJWRcbiIsIGRzaS0NCj4gPiA+ID5sYW5lcyk7DQo+ ID4gPiArwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9DRkdfTlVNX0xB TkVTLCBkc2ktPmxhbmVzIC0NCj4gPiA+IDEpOw0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDC oMKgaWYgKGRzaS0+ZHNpX21vZGVfZmxhZ3MgJiBNSVBJX0RTSV9DTE9DS19OT05fQ09OVElOVU9V UykNCj4gPiA+IHsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBud2xfZHNp X3dyaXRlKGRzaSwgTldMX0RTSV9DRkdfTk9OQ09OVElOVU9VU19DTEssDQo+ID4gPiAweDAxKTsN Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwg TldMX0RTSV9DRkdfQVVUT0lOU0VSVF9FT1RQLA0KPiA+ID4gMHgwMSk7DQo+ID4gPiArwqDCoMKg wqDCoMKgwqB9IGVsc2Ugew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG53 bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0NGR19OT05DT05USU5VT1VTX0NMSywNCj4gPiA+IDB4 MDApOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUo ZHNpLCBOV0xfRFNJX0NGR19BVVRPSU5TRVJUX0VPVFAsDQo+ID4gPiAweDAwKTsNCj4gPiA+ICvC oMKgwqDCoMKgwqDCoH0NCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoC8qIHZhbHVlcyBp biBieXRlIGNsb2NrIGN5Y2xlcyAqLw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgY3ljbGVzID0gdWky YmMoZHNpLCBjZmctPmNsa19wcmUpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgRFJNX0RFVl9ERUJV R19EUklWRVIoZHNpLT5kZXYsICJjZmdfdF9wcmU6IDB4JXhcbiIsDQo+ID4gPiBjeWNsZXMpOw0K PiA+ID4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfQ0ZHX1RfUFJF LCBjeWNsZXMpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgY3ljbGVzID0gcHMyYmMoZHNpLCBjZmct PmxweCArIGNmZy0+Y2xrX3ByZXBhcmUgKyBjZmctDQo+ID4gPiA+IA0KPiA+ID4gPiBjbGtfemVy byk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwg ImNmZ190eF9nYXAgKHByZSk6DQo+ID4gPiAweCV4XG4iLA0KPiA+ID4gY3ljbGVzKTsNCj4gPiA+ ICvCoMKgwqDCoMKgwqDCoGN5Y2xlcyArPSB1aTJiYyhkc2ksIGNmZy0+Y2xrX3ByZSk7DQo+ID4g PiArwqDCoMKgwqDCoMKgwqBEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgImNmZ190X3Bv c3Q6IDB4JXhcbiIsDQo+ID4gPiBjeWNsZXMpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgbndsX2Rz aV93cml0ZShkc2ksIE5XTF9EU0lfQ0ZHX1RfUE9TVCwgY3ljbGVzKTsNCj4gPiA+ICvCoMKgwqDC oMKgwqDCoGN5Y2xlcyA9IHBzMmJjKGRzaSwgY2ZnLT5oc19leGl0KTsNCj4gPiA+ICvCoMKgwqDC oMKgwqDCoERSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAiY2ZnX3R4X2dhcDogMHgleFxu IiwNCj4gPiA+IGN5Y2xlcyk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRz aSwgTldMX0RTSV9DRkdfVFhfR0FQLCBjeWNsZXMpOw0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKg wqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfQ0ZHX0VYVFJBX0NNRFNfQUZURVJfRU9U UCwNCj4gPiA+IDB4MDEpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ks IE5XTF9EU0lfQ0ZHX0hUWF9UT19DT1VOVCwgMHgwMCk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBu d2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9DRkdfTFJYX0hfVE9fQ09VTlQsIDB4MDApOw0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfQ0ZHX0JUQV9IX1RP X0NPVU5ULCAweDAwKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoC8qIEluIExQIGNsb2NrIGN5Y2xl cyAqLw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgY3ljbGVzID0gdXMybHAoY2ZnLT5scF9jbGtfcmF0 ZSwgY2ZnLT53YWtldXApOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgRFJNX0RFVl9ERUJVR19EUklW RVIoZHNpLT5kZXYsICJjZmdfdHdha2V1cDogMHgleFxuIiwNCj4gPiA+IGN5Y2xlcyk7DQo+ID4g PiArwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9DRkdfVFdBS0VVUCwg Y3ljbGVzKTsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBud2xfZHNpX2Ns ZWFyX2Vycm9yKGRzaSk7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBpbnQgbnds X2RzaV9jb25maWdfZHBpKHN0cnVjdCBud2xfZHNpICpkc2kpDQo+ID4gPiArew0KPiA+ID4gK8Kg wqDCoMKgwqDCoMKgdTMyIG1vZGU7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBpbnQgY29sb3JfZm9y bWF0Ow0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgYm9vbCBidXJzdF9tb2RlOw0KPiA+ID4gK8KgwqDC oMKgwqDCoMKgaW50IGhmcm9udF9wb3JjaCwgaGJhY2tfcG9yY2gsIHZmcm9udF9wb3JjaCwgdmJh Y2tfcG9yY2g7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBpbnQgaHN5bmNfbGVuLCB2c3luY19sZW47 DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqBoZnJvbnRfcG9yY2ggPSBkc2ktPm1vZGUu aHN5bmNfc3RhcnQgLSBkc2ktDQo+ID4gPiA+bW9kZS5oZGlzcGxheTsNCj4gPiA+ICvCoMKgwqDC oMKgwqDCoGhzeW5jX2xlbiA9IGRzaS0+bW9kZS5oc3luY19lbmQgLSBkc2ktPm1vZGUuaHN5bmNf c3RhcnQ7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBoYmFja19wb3JjaCA9IGRzaS0+bW9kZS5odG90 YWwgLSBkc2ktPm1vZGUuaHN5bmNfZW5kOw0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKg dmZyb250X3BvcmNoID0gZHNpLT5tb2RlLnZzeW5jX3N0YXJ0IC0gZHNpLQ0KPiA+ID4gPm1vZGUu dmRpc3BsYXk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqB2c3luY19sZW4gPSBkc2ktPm1vZGUudnN5 bmNfZW5kIC0gZHNpLT5tb2RlLnZzeW5jX3N0YXJ0Ow0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgdmJh Y2tfcG9yY2ggPSBkc2ktPm1vZGUudnRvdGFsIC0gZHNpLT5tb2RlLnZzeW5jX2VuZDsNCj4gPiA+ ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoERSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAi aGZyb250X3BvcmNoID0gJWRcbiIsDQo+ID4gPiBoZnJvbnRfcG9yY2gpOw0KPiA+ID4gK8KgwqDC oMKgwqDCoMKgRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJoYmFja19wb3JjaCA9ICVk XG4iLA0KPiA+ID4gaGJhY2tfcG9yY2gpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgRFJNX0RFVl9E RUJVR19EUklWRVIoZHNpLT5kZXYsICJoc3luY19sZW4gPSAlZFxuIiwNCj4gPiA+IGhzeW5jX2xl bik7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwg ImhkaXNwbGF5ID0gJWRcbiIsIGRzaS0NCj4gPiA+ID4gDQo+ID4gPiA+IG1vZGUuaGRpc3BsYXkp Ow0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJ2 ZnJvbnRfcG9yY2ggPSAlZFxuIiwNCj4gPiA+IHZmcm9udF9wb3JjaCk7DQo+ID4gPiArwqDCoMKg wqDCoMKgwqBEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgInZiYWNrX3BvcmNoID0gJWRc biIsDQo+ID4gPiB2YmFja19wb3JjaCk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBEUk1fREVWX0RF QlVHX0RSSVZFUihkc2ktPmRldiwgInZzeW5jX2xlbiA9ICVkXG4iLA0KPiA+ID4gdnN5bmNfbGVu KTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoERSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAi dmFjdGl2ZSA9ICVkXG4iLCBkc2ktDQo+ID4gPiA+IA0KPiA+ID4gPiBtb2RlLnZkaXNwbGF5KTsN Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoERSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAiY2xv Y2sgPSAlZCBrSHpcbiIsIGRzaS0NCj4gPiA+ID4gDQo+ID4gPiA+IG1vZGUuY2xvY2spOw0KPiA+ ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgY29sb3JfZm9ybWF0ID0gbndsX2RzaV9nZXRfZHBp X3BpeGVsX2Zvcm1hdChkc2ktPmZvcm1hdCk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAoY29s b3JfZm9ybWF0IDwgMCkgew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERS TV9ERVZfRVJST1IoZHNpLT5kZXYsICJJbnZhbGlkIGNvbG9yIGZvcm1hdA0KPiA+ID4gMHgleFxu IiwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgZHNpLT5mb3JtYXQpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJldHVybiBjb2xvcl9mb3JtYXQ7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqB9DQo+ID4g PiArwqDCoMKgwqDCoMKgwqBEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgInBpeGVsIGZt dCA9ICVkXG4iLCBkc2ktDQo+ID4gPiA+IA0KPiA+ID4gPiBmb3JtYXQpOw0KPiA+ID4gKw0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfSU5URVJGQUNFX0NP TE9SX0NPRElORywNCj4gPiA+IE5XTF9EU0lfRFBJXzI0X0JJVCk7DQo+ID4gPiArwqDCoMKgwqDC oMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9QSVhFTF9GT1JNQVQsIGNvbG9yX2Zvcm1h dCk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqAvKg0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqAqIEFk anVzdGluZyBpbnB1dCBwb2xhcml0eSBiYXNlZCBvbiB0aGUgdmlkZW8gbW9kZQ0KPiA+ID4gcmVz dWx0cw0KPiA+ID4gaW4NCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgKiBhIGJsYWNrIHNjcmVlbiBz byBhbHdheXMgcGljayBhY3RpdmUgbG93Og0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqAqLw0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfVlNZTkNfUE9MQVJJ VFksDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgTldM X0RTSV9WU1lOQ19QT0xBUklUWV9BQ1RJVkVfTE9XKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoG53 bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0hTWU5DX1BPTEFSSVRZLA0KPiA+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoE5XTF9EU0lfSFNZTkNfUE9MQVJJVFlf QUNUSVZFX0xPVyk7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqBidXJzdF9tb2RlID0g KGRzaS0+ZHNpX21vZGVfZmxhZ3MgJg0KPiA+ID4gTUlQSV9EU0lfTU9ERV9WSURFT19CVVJTVCkg JiYNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIShkc2kt PmRzaV9tb2RlX2ZsYWdzICYNCj4gPiA+IE1JUElfRFNJX01PREVfVklERU9fU1lOQ19QVUxTRSk7 DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAoYnVyc3RfbW9kZSkgew0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJ X1ZJREVPX01PREUsDQo+ID4gPiBOV0xfRFNJX1ZNX0JVUlNUX01PREUpOw0KPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1BJWEVM X0ZJRk9fU0VORF9MRVZFTCwNCj4gPiA+IDI1Nik7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqB9IGVs c2Ugew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1vZGUgPSAoKGRzaS0+ ZHNpX21vZGVfZmxhZ3MgJg0KPiA+ID4gTUlQSV9EU0lfTU9ERV9WSURFT19TWU5DX1BVTFNFKSA/ DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBOV0xfRFNJX1ZNX0JVUlNUX01PREVfV0lUSF9TWU5DX1ANCj4gPiA+IFVM U0UNCj4gPiA+IFMgOg0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgTldMX0RTSV9WTV9OT05fQlVSU1RfTU9ERV9XSVRI X1NZDQo+ID4gPiBOQ19FDQo+ID4gPiBWRU5UUyk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfVklERU9fTU9ERSwgbW9kZSk7 DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ks IE5XTF9EU0lfUElYRUxfRklGT19TRU5EX0xFVkVMLA0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkc2ktPm1vZGUuaGRpc3Bs YXkpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgfQ0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDC oMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfSEZQLCBoZnJvbnRfcG9yY2gpOw0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfSEJQLCBoYmFja19wb3Jj aCk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9IU0Es IGhzeW5jX2xlbik7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dyaXRl KGRzaSwgTldMX0RTSV9FTkFCTEVfTVVMVF9QS1RTLCAweDApOw0KPiA+ID4gK8KgwqDCoMKgwqDC oMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfQkxMUF9NT0RFLCAweDEpOw0KPiA+ID4gK8Kg wqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfVVNFX05VTExfUEtUX0JMTFAs IDB4MCk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9W QywgMHgwKTsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUoZHNp LCBOV0xfRFNJX1BJWEVMX1BBWUxPQURfU0laRSwgZHNpLQ0KPiA+ID4gPiANCj4gPiA+ID4gbW9k ZS5oZGlzcGxheSk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldM X0RTSV9WQUNUSVZFLCBkc2ktPm1vZGUudmRpc3BsYXkgLQ0KPiA+ID4gMSk7DQo+ID4gPiArwqDC oMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9WQlAsIHZiYWNrX3BvcmNoKTsN Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1ZGUCwgdmZy b250X3BvcmNoKTsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBud2xfZHNp X2NsZWFyX2Vycm9yKGRzaSk7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBpbnQg bndsX2RzaV9pbml0X2ludGVycnVwdHMoc3RydWN0IG53bF9kc2kgKmRzaSkNCj4gPiA+ICt7DQo+ ID4gPiArwqDCoMKgwqDCoMKgwqB1MzIgaXJxX2VuYWJsZTsNCj4gPiA+ICsNCj4gPiA+ICvCoMKg wqDCoMKgwqDCoG53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0lSUV9NQVNLLCAweGZmZmZmZmZm KTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0lSUV9N QVNLMiwgMHg3KTsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGlycV9lbmFibGUgPSB+ KHUzMikoTldMX0RTSV9UWF9QS1RfRE9ORV9NQVNLIHwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBOV0xfRFNJX1JYX1BLVF9IRFJf UkNWRF9NQVNLIHwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBOV0xfRFNJX1RYX0ZJRk9fT1ZGTFdfTUFTSyB8DQo+ID4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgTldMX0RT SV9IU19UWF9USU1FT1VUX01BU0spOw0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgbnds X2RzaV93cml0ZShkc2ksIE5XTF9EU0lfSVJRX01BU0ssIGlycV9lbmFibGUpOw0KPiA+ID4gKw0K PiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIG53bF9kc2lfY2xlYXJfZXJyb3IoZHNpKTsNCj4g PiA+ICt9DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIGludCBud2xfZHNpX2hvc3RfYXR0YWNoKHN0 cnVjdCBtaXBpX2RzaV9ob3N0ICpkc2lfaG9zdCwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbWlwaV9kc2lf ZGV2aWNlICpkZXZpY2UpDQo+ID4gPiArew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG53 bF9kc2kgKmRzaSA9IGNvbnRhaW5lcl9vZihkc2lfaG9zdCwgc3RydWN0DQo+ID4gPiBud2xfZHNp LA0KPiA+ID4gZHNpX2hvc3QpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRldmljZSAq ZGV2ID0gZHNpLT5kZXY7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2JyaWRnZSAq YnJpZGdlOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9wYW5lbCAqcGFuZWw7DQo+ ID4gPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Ow0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDC oMKgRFJNX0RFVl9JTkZPKGRldiwgImxhbmVzPSV1LCBmb3JtYXQ9MHgleCBmbGFncz0weCVseFxu IiwNCj4gPiA+IGRldmljZS0+bGFuZXMsDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGRldmljZS0+Zm9ybWF0LCBkZXZpY2UtPm1vZGVfZmxhZ3MpOw0KPiA+ ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGRldmljZS0+bGFuZXMgPCAxIHx8IGRldmlj ZS0+bGFuZXMgPiA0KQ0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy biAtRUlOVkFMOw0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgZHNpLT5sYW5lcyA9IGRl dmljZS0+bGFuZXM7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBkc2ktPmZvcm1hdCA9IGRldmljZS0+ Zm9ybWF0Ow0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgZHNpLT5kc2lfbW9kZV9mbGFncyA9IGRldmlj ZS0+bW9kZV9mbGFnczsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGRybV9v Zl9maW5kX3BhbmVsX29yX2JyaWRnZShkc2ktPmRldi0+b2Zfbm9kZSwgMSwNCj4gPiA+IDAsDQo+ ID4gPiAmcGFuZWwsDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCZicmlkZ2UpOw0K PiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gcmV0Ow0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYg KHBhbmVsKSB7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJpZGdlID0g ZHJtX3BhbmVsX2JyaWRnZV9hZGQocGFuZWwpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGlmIChJU19FUlIoYnJpZGdlKSkNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIFBUUl9FUlIoYnJpZGdlKTsNCj4gPiA+ ICvCoMKgwqDCoMKgwqDCoH0NCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGRzaS0+cGFu ZWxfYnJpZGdlID0gYnJpZGdlOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgZHJtX2JyaWRnZV9hZGQo JmRzaS0+YnJpZGdlKTsNCj4gPiBUaGlzIHdvcmtzIG9ubHkgd2l0aCBhIHBhbmVsLCBidXQgbm90 IHdpdGggYSBicmlkZ2UuIEZvciBleGFtcGxlLA0KPiA+IGFkdjc1MTEgYnJpZGdlLCB3aWxsIGNh bCBkc2lfaG9zdF9hdHRhY2ggaW4gaXQncyBkcm1fYnJpZGdlX2F0dGFjaA0KPiA+IGNhbGxiYWNr LiBTaW5jZSB5b3UgYWRkIG91ciBicmlkZ2Ugb25seSBoZXJlLCB0aGUgYnJpZGdlX2F0dGFjaA0K PiA+IGZyb20NCj4gPiBhZHY3NTExIHdpbGwgbmV2ZXIgYmUgY2FsbGVkIHNvIHRoaXMgY2FsbGJh Y2sgd2lsbCBuZXZlciBiZSBjYWxsZWQuDQo+ID4gU28sIEknZCBzdWdnZXN0IHRvIGNhbGwgZHJt X2JyaWRnZV9hZGQgaW4gcHJvYmUsIGFuZA0KPiA+IG1vdmXCoGRybV9vZl9maW5kX3BhbmVsX29y X2JyaWRnZSBpbiBvdXIgYnJpZGdlX2F0dGFjaC4gQmFzaWNhbGx5LA0KPiA+IHlvdQ0KPiA+IG5l ZWQgdG8gc2VwYXJhdGUgdGhlIGJyaWRnZV9hdHRhY2ggb3BlcmF0aW9ucyBmcm9tIHRoZQ0KPiA+ IGRzaV9ob3N0X2F0dGFjaA0KPiA+IG9wZXJhdGlvbnMuDQo+IE1ha2VzIHNlbnNlLg0KPiANCj4g PiANCj4gPiANCj4gPiA+IA0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7 DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBpbnQgbndsX2RzaV9ob3N0X2RldGFj aChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqZHNpX2hvc3QsDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IG1pcGlf ZHNpX2RldmljZSAqZGV2aWNlKQ0KPiA+ID4gK3sNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVj dCBud2xfZHNpICpkc2kgPSBjb250YWluZXJfb2YoZHNpX2hvc3QsIHN0cnVjdA0KPiA+ID4gbnds X2RzaSwNCj4gPiA+IGRzaV9ob3N0KTsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGRy bV9vZl9wYW5lbF9icmlkZ2VfcmVtb3ZlKGRzaS0+ZGV2LT5vZl9ub2RlLCAxLCAwKTsNCj4gPiA+ ICvCoMKgwqDCoMKgwqDCoGRybV9icmlkZ2VfcmVtb3ZlKCZkc2ktPmJyaWRnZSk7DQo+ID4gQWxz bywgdGhlc2UgcmVtb3ZlcyBzaG91bGQgYmUgZG9uZSBpbiBvdXIgYnJpZGdlX3JlbW92ZS4gVGhl c2UgYXJlDQo+ID4gbm90DQo+ID4gcmVsYXRlZCB0byB0aGUgZHNpX2RldmljZS4NCj4gPiANCj4g PiA+IA0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7DQo+ID4gPiArfQ0K PiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBib29sIG53bF9kc2lfcmVhZF9wYWNrZXQoc3RydWN0IG53 bF9kc2kgKmRzaSwgdTMyIHN0YXR1cykNCj4gPiA+ICt7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgZGV2aWNlICpkZXYgPSBkc2ktPmRldjsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVj dCBud2xfZHNpX3RyYW5zZmVyICp4ZmVyID0gZHNpLT54ZmVyOw0KPiA+ID4gK8KgwqDCoMKgwqDC oMKgaW50IGVycjsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHU4ICpwYXlsb2FkID0geGZlci0+bXNn LT5yeF9idWY7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqB1MzIgdmFsOw0KPiA+ID4gK8KgwqDCoMKg wqDCoMKgdTE2IHdvcmRfY291bnQ7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqB1OCBjaGFubmVsOw0K PiA+ID4gK8KgwqDCoMKgwqDCoMKgdTggZGF0YV90eXBlOw0KPiA+ID4gKw0KPiA+ID4gK8KgwqDC oMKgwqDCoMKgeGZlci0+c3RhdHVzID0gMDsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDC oGlmICh4ZmVyLT5yeF93b3JkX2NvdW50ID09IDApIHsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBpZiAoIShzdGF0dXMgJiBOV0xfRFNJX1JYX1BLVF9IRFJfUkNWRCkpDQo+ ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy biBmYWxzZTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBHZXQgdGhl IFJYIGhlYWRlciBhbmQgcGFyc2UgaXQgKi8NCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqB2YWwgPSBud2xfZHNpX3JlYWQoZHNpLCBOV0xfRFNJX1JYX1BLVF9IRUFERVIpOw0K PiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVyciA9IG53bF9kc2lfY2xlYXJf ZXJyb3IoZHNpKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoZXJy KQ0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4 ZmVyLT5zdGF0dXMgPSBlcnI7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg d29yZF9jb3VudCA9IE5XTF9EU0lfV0ModmFsKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBjaGFubmVsID0gTldMX0RTSV9SWF9WQyh2YWwpOw0KPiA+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRhdGFfdHlwZSA9IE5XTF9EU0lfUlhfRFQodmFsKTsNCj4g PiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoY2hhbm5lbCAh PSB4ZmVyLT5tc2ctPmNoYW5uZWwpIHsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJPUihkZXYsDQo+ID4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAiWyUwMlhdIENoYW5uZWwgbWlzbWF0Y2gNCj4gPiA+ICgldSAhPQ0KPiA+ID4gJXUp XG4iLA0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGZlci0+Y21kLCBjaGFubmVsLCB4ZmVyLQ0K PiA+ID4gPm1zZy0NCj4gPiA+ID4gDQo+ID4gPiA+IGNoYW5uZWwpOw0KPiA+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZmVyLT5zdGF0dXMgPSAtRUlO VkFMOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXR1cm4gdHJ1ZTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9DQo+ ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3dpdGNoIChkYXRh X3R5cGUpIHsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjYXNlDQo+ID4g PiBNSVBJX0RTSV9SWF9HRU5FUklDX1NIT1JUX1JFQURfUkVTUE9OU0VfMkJZVEU6DQo+ID4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIEZhbGwgdGhy b3VnaCAqLw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNhc2UgTUlQSV9E U0lfUlhfRENTX1NIT1JUX1JFQURfUkVTUE9OU0VfMkJZVEU6DQo+ID4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICh4ZmVyLT5tc2ctPnJ4X2xlbiA+ IDEpIHsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoC8qIHJlYWQgc2Vjb25kIGJ5dGUgKi8NCj4gPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBh eWxvYWRbMV0gPSB3b3JkX2NvdW50ID4+IDg7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqArK3hmZXItPnJ4X2xlbjsN Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQ0K PiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBG YWxsIHRocm91Z2ggKi8NCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjYXNl DQo+ID4gPiBNSVBJX0RTSV9SWF9HRU5FUklDX1NIT1JUX1JFQURfUkVTUE9OU0VfMUJZVEU6DQo+ ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIEZh bGwgdGhyb3VnaCAqLw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNhc2Ug TUlQSV9EU0lfUlhfRENTX1NIT1JUX1JFQURfUkVTUE9OU0VfMUJZVEU6DQo+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICh4ZmVyLT5tc2ctPnJ4 X2xlbiA+IDApIHsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIHJlYWQgZmlyc3QgYnl0ZSAqLw0KPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcGF5bG9hZFswXSA9IHdvcmRfY291bnQgJiAweGZmOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKyt4ZmVyLT5y eF9sZW47DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoH0NCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgeGZlci0+c3RhdHVzID0geGZlci0+cnhfbGVuOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gdHJ1ZTsNCj4gPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjYXNlIE1JUElfRFNJX1JYX0FDS05PV0xFREdFX0FORF9F UlJPUl9SRVBPUlQ6DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHdvcmRfY291bnQgJj0gMHhmZjsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJPUihkZXYsICJbJTAyWF0gRFNJ IGVycm9yDQo+ID4gPiByZXBvcnQ6DQo+ID4gPiAweCUwMnhcbiIsDQo+ID4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqB4ZmVyLT5jbWQsIHdvcmRfY291bnQpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZmVyLT5zdGF0dXMgPSAtRVBST1RPOw0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g dHJ1ZTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9DQo+ID4gPiArDQo+ ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHdvcmRfY291bnQgPiB4ZmVy LT5tc2ctPnJ4X2xlbikgew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBEUk1fREVWX0VSUk9SKA0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2LA0KPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIlslMDJYXSBSZWNlaXZlIGJ1ZmZlciB0b28gc21hbGw6DQo+ID4gPiAlenUNCj4gPiA+ICg8 ICV1KVxuIiwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhmZXItPmNtZCwgeGZlci0+bXNnLT5yeF9sZW4sDQo+ID4g PiB3b3JkX2NvdW50KTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgeGZlci0+c3RhdHVzID0gLUVJTlZBTDsNCj4gPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHRydWU7DQo+ID4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQ0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHhmZXItPnJ4X3dvcmRfY291bnQgPSB3b3JkX2NvdW50Ow0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgfSBlbHNlIHsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAvKiBTZXQgd29yZF9jb3VudCBmcm9tIHByZXZpb3VzIGhlYWRlciByZWFkICovDQo+ ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgd29yZF9jb3VudCA9IHhmZXItPnJ4 X3dvcmRfY291bnQ7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqB9DQo+ID4gPiArDQo+ID4gPiArwqDC oMKgwqDCoMKgwqAvKiBJZiBSWCBwYXlsb2FkIGlzIG5vdCB5ZXQgcmVjZWl2ZWQsIHdhaXQgZm9y IGl0ICovDQo+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAoIShzdGF0dXMgJiBOV0xfRFNJX1JYX1BL VF9QQVlMT0FEX0RBVEFfUkNWRCkpDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0dXJuIGZhbHNlOw0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgLyogUmVhZCB0 aGUgUlggcGF5bG9hZCAqLw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgd2hpbGUgKHdvcmRfY291bnQg Pj0gNCkgew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZhbCA9IG53bF9k c2lfcmVhZChkc2ksIE5XTF9EU0lfUlhfUEFZTE9BRCk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcGF5bG9hZFswXSA9ICh2YWwgPj4gMCkgJiAweGZmOw0KPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBheWxvYWRbMV0gPSAodmFsID4+IDgpICYgMHhm ZjsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYXlsb2FkWzJdID0gKHZh bCA+PiAxNikgJiAweGZmOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBh eWxvYWRbM10gPSAodmFsID4+IDI0KSAmIDB4ZmY7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcGF5bG9hZCArPSA0Ow0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHhmZXItPnJ4X2xlbiArPSA0Ow0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHdvcmRfY291bnQgLT0gNDsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoH0NCj4gPiA+ICsN Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmICh3b3JkX2NvdW50ID4gMCkgew0KPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZhbCA9IG53bF9kc2lfcmVhZChkc2ksIE5XTF9EU0lf UlhfUEFZTE9BRCk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3dpdGNo ICh3b3JkX2NvdW50KSB7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2Fz ZSAzOg0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBwYXlsb2FkWzJdID0gKHZhbCA+PiAxNikgJiAweGZmOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqArK3hmZXItPnJ4X2xlbjsNCj4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogRmFsbCB0aHJv dWdoICovDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2FzZSAyOg0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYXlsb2Fk WzFdID0gKHZhbCA+PiA4KSAmIDB4ZmY7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCsreGZlci0+cnhfbGVuOw0KPiA+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBGYWxsIHRocm91Z2ggKi8NCj4g PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjYXNlIDE6DQo+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBheWxvYWRbMF0gPSAodmFs ID4+IDApICYgMHhmZjsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgKyt4ZmVyLT5yeF9sZW47DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoH0NCj4gPiA+ICvCoMKgwqDCoMKgwqDCoH0NCj4gPiA+ICsNCj4gPiA+ICvC oMKgwqDCoMKgwqDCoHhmZXItPnN0YXR1cyA9IHhmZXItPnJ4X2xlbjsNCj4gPiA+ICvCoMKgwqDC oMKgwqDCoGVyciA9IG53bF9kc2lfY2xlYXJfZXJyb3IoZHNpKTsNCj4gPiA+ICvCoMKgwqDCoMKg wqDCoGlmIChlcnIpDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGZlci0+ c3RhdHVzID0gZXJyOw0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHRydWU7 DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyB2b2lkIG53bF9kc2lfZmluaXNoX3Ry YW5zbWlzc2lvbihzdHJ1Y3QgbndsX2RzaSAqZHNpLCB1MzINCj4gPiA+IHN0YXR1cykNCj4gPiA+ ICt7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbndsX2RzaV90cmFuc2ZlciAqeGZlciA9 IGRzaS0+eGZlcjsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGJvb2wgZW5kX3BhY2tldCA9IGZhbHNl Ow0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCF4ZmVyKQ0KPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybjsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDC oMKgwqDCoGlmICh4ZmVyLT5kaXJlY3Rpb24gPT0gRFNJX1BBQ0tFVF9TRU5EICYmDQo+ID4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0YXR1cyAmIE5XTF9EU0lfVFhfUEtUX0RPTkUpIHsNCj4g PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZmVyLT5zdGF0dXMgPSB4ZmVyLT50 eF9sZW47DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZW5kX3BhY2tldCA9 IHRydWU7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqB9IGVsc2UgaWYgKHN0YXR1cyAmIE5XTF9EU0lf RFBIWV9ESVJFQ1RJT04gJiYNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAoKHN0YXR1cyAmIChOV0xfRFNJX1JYX1BLVF9IRFJfUkNWRCB8DQo+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgTldM X0RTSV9SWF9QS1RfUEFZTE9BRF9EQVRBX1JDVkQpKQ0KPiA+ID4gKSkgew0KPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVuZF9wYWNrZXQgPSBud2xfZHNpX3JlYWRfcGFja2V0 KGRzaSwgc3RhdHVzKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoH0NCj4gPiA+ICsNCj4gPiA+ICvC oMKgwqDCoMKgwqDCoGlmIChlbmRfcGFja2V0KQ0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGNvbXBsZXRlKCZ4ZmVyLT5jb21wbGV0ZWQpOw0KPiA+ID4gK30NCj4gPiA+ICsN Cj4gPiA+ICtzdGF0aWMgdm9pZCBud2xfZHNpX2JlZ2luX3RyYW5zbWlzc2lvbihzdHJ1Y3Qgbnds X2RzaSAqZHNpKQ0KPiA+ID4gK3sNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBud2xfZHNp X3RyYW5zZmVyICp4ZmVyID0gZHNpLT54ZmVyOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0 IG1pcGlfZHNpX3BhY2tldCAqcGt0ID0gJnhmZXItPnBhY2tldDsNCj4gPiA+ICvCoMKgwqDCoMKg wqDCoGNvbnN0IHU4ICpwYXlsb2FkOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc2l6ZV90IGxlbmd0 aDsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHUxNiB3b3JkX2NvdW50Ow0KPiA+ID4gK8KgwqDCoMKg wqDCoMKgdTggaHNfbW9kZTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHUzMiB2YWw7DQo+ID4gPiAr wqDCoMKgwqDCoMKgwqB1MzIgaHNfd29ya2Fyb3VuZCA9IDA7DQo+ID4gPiArDQo+ID4gPiArwqDC oMKgwqDCoMKgwqAvKiBTZW5kIHRoZSBwYXlsb2FkLCBpZiBhbnkgKi8NCj4gPiA+ICvCoMKgwqDC oMKgwqDCoGxlbmd0aCA9IHBrdC0+cGF5bG9hZF9sZW5ndGg7DQo+ID4gPiArwqDCoMKgwqDCoMKg wqBwYXlsb2FkID0gcGt0LT5wYXlsb2FkOw0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKg d2hpbGUgKGxlbmd0aCA+PSA0KSB7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgdmFsID0gKih1MzIgKilwYXlsb2FkOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGhzX3dvcmthcm91bmQgfD0gISh2YWwgJiAweEZGRkYwMCk7DQo+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfVFhfUEFZ TE9BRCwgdmFsKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYXlsb2Fk ICs9IDQ7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGVuZ3RoIC09IDQ7 DQo+ID4gPiArwqDCoMKgwqDCoMKgwqB9DQo+ID4gPiArwqDCoMKgwqDCoMKgwqAvKiBTZW5kIHRo ZSByZXN0IG9mIHRoZSBwYXlsb2FkICovDQo+ID4gPiArwqDCoMKgwqDCoMKgwqB2YWwgPSAwOw0K PiA+ID4gK8KgwqDCoMKgwqDCoMKgc3dpdGNoIChsZW5ndGgpIHsNCj4gPiA+ICvCoMKgwqDCoMKg wqDCoGNhc2UgMzoNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2YWwgfD0g cGF5bG9hZFsyXSA8PCAxNjsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAv KiBGYWxsIHRocm91Z2ggKi8NCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGNhc2UgMjoNCj4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2YWwgfD0gcGF5bG9hZFsxXSA8PCA4Ow0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGhzX3dvcmthcm91bmQgfD0gISh2YWwg JiAweEZGRkYwMCk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogRmFs bCB0aHJvdWdoICovDQo+ID4gPiArwqDCoMKgwqDCoMKgwqBjYXNlIDE6DQo+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdmFsIHw9IHBheWxvYWRbMF07DQo+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfVFhfUEFZ TE9BRCwgdmFsKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsN Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoH0NCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHhmZXItPnR4X2xl biA9IHBrdC0+cGF5bG9hZF9sZW5ndGg7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqAv Kg0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqAqIFNlbmQgdGhlIGhlYWRlcg0KPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqAqIGhlYWRlclswXSA9IFZpcnR1YWwgQ2hhbm5lbCArIERhdGEgVHlwZQ0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqAqIGhlYWRlclsxXSA9IFdvcmQgQ291bnQgTFNCIChMUCkgb3Ig Zmlyc3QgcGFyYW0gKFNQKQ0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqAqIGhlYWRlclsyXSA9IFdv cmQgQ291bnQgTVNCIChMUCkgb3Igc2Vjb25kIHBhcmFtIChTUCkNCj4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgKi8NCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHdvcmRfY291bnQgPSBwa3QtPmhlYWRlclsx XSB8IChwa3QtPmhlYWRlclsyXSA8PCA4KTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChoc193 b3JrYXJvdW5kICYmIChkc2ktPnF1aXJrcyAmDQo+ID4gPiBFMTE0MThfSFNfTU9ERV9RVUlSSykp IHsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0RFQlVHX0RS SVZFUihkc2ktPmRldiwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiVXNpbmcgaHMgbW9kZSB3b3Jr YXJvdW5kDQo+ID4gPiBmb3INCj4gPiA+IGNtZCAweCV4XG4iLA0KPiA+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHhmZXItPmNtZCk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaHNf bW9kZSA9IDE7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqB9IGVsc2Ugew0KPiA+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGhzX21vZGUgPSAoeGZlci0+bXNnLT5mbGFncyAmDQo+ID4g PiBNSVBJX0RTSV9NU0dfVVNFX0xQTSkgPw0KPiA+ID4gMCA6IDE7DQo+ID4gPiArwqDCoMKgwqDC oMKgwqB9DQo+ID4gPiArwqDCoMKgwqDCoMKgwqB2YWwgPSBOV0xfRFNJX1dDKHdvcmRfY291bnQp IHwgTldMX0RTSV9UWF9WQyh4ZmVyLT5tc2ctDQo+ID4gPiA+IA0KPiA+ID4gPiBjaGFubmVsKSB8 DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBOV0xfRFNJX1RYX0RUKHhmZXItPm1z Zy0+dHlwZSkgfA0KPiA+ID4gTldMX0RTSV9IU19TRUwoaHNfbW9kZSkgfA0KPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgTldMX0RTSV9CVEFfVFgoeGZlci0+bmVlZF9idGEpOw0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfUEtUX0NPTlRST0ws IHZhbCk7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqAvKiBTZW5kIHBhY2tldCBjb21t YW5kICovDQo+ID4gPiArwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9T RU5EX1BBQ0tFVCwgMHgxKTsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIHNzaXpl X3QgbndsX2RzaV9ob3N0X3RyYW5zZmVyKHN0cnVjdCBtaXBpX2RzaV9ob3N0DQo+ID4gPiAqZHNp X2hvc3QsDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0IG1pcGlfZHNpX21zZw0K PiA+ID4gKm1zZykNCj4gPiA+ICt7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbndsX2Rz aSAqZHNpID0gY29udGFpbmVyX29mKGRzaV9ob3N0LCBzdHJ1Y3QNCj4gPiA+IG53bF9kc2ksDQo+ ID4gPiBkc2lfaG9zdCk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbndsX2RzaV90cmFu c2ZlciB4ZmVyOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3NpemVfdCByZXQgPSAwOw0KPiA+ID4g Kw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgLyogQ3JlYXRlIHBhY2tldCB0byBiZSBzZW50ICovDQo+ ID4gPiArwqDCoMKgwqDCoMKgwqBkc2ktPnhmZXIgPSAmeGZlcjsNCj4gPiA+ICvCoMKgwqDCoMKg wqDCoHJldCA9IG1pcGlfZHNpX2NyZWF0ZV9wYWNrZXQoJnhmZXIucGFja2V0LCBtc2cpOw0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCA8IDApIHsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBkc2ktPnhmZXIgPSBOVUxMOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldHVybiByZXQ7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqB9DQo+ID4gPiAr DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAoKG1zZy0+dHlwZSAmIE1JUElfRFNJX0dFTkVSSUNf UkVBRF9SRVFVRVNUXzBfUEFSQU0gfHwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBt c2ctPnR5cGUgJiBNSVBJX0RTSV9HRU5FUklDX1JFQURfUkVRVUVTVF8xX1BBUkFNIHx8DQo+ID4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbXNnLT50eXBlICYgTUlQSV9EU0lfR0VORVJJQ19S RUFEX1JFUVVFU1RfMl9QQVJBTSB8fA0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1z Zy0+dHlwZSAmIE1JUElfRFNJX0RDU19SRUFEKSAmJg0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqBtc2ctPnJ4X2xlbiA+IDAgJiYgbXNnLT5yeF9idWYgIT0gTlVMTCkNCj4gPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZmVyLmRpcmVjdGlvbiA9IERTSV9QQUNLRVRfUkVD RUlWRTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGVsc2UNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB4ZmVyLmRpcmVjdGlvbiA9IERTSV9QQUNLRVRfU0VORDsNCj4gPiA+ICsN Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoHhmZXIubmVlZF9idGEgPSAoeGZlci5kaXJlY3Rpb24gPT0g RFNJX1BBQ0tFVF9SRUNFSVZFKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHhmZXIubmVlZF9idGEg fD0gKG1zZy0+ZmxhZ3MgJiBNSVBJX0RTSV9NU0dfUkVRX0FDSykgPyAxDQo+ID4gPiA6IDA7DQo+ ID4gPiArwqDCoMKgwqDCoMKgwqB4ZmVyLm1zZyA9IG1zZzsNCj4gPiA+ICvCoMKgwqDCoMKgwqDC oHhmZXIuc3RhdHVzID0gLUVUSU1FRE9VVDsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHhmZXIucnhf d29yZF9jb3VudCA9IDA7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqB4ZmVyLnJ4X2xlbiA9IDA7DQo+ ID4gPiArwqDCoMKgwqDCoMKgwqB4ZmVyLmNtZCA9IDB4MDA7DQo+ID4gPiArwqDCoMKgwqDCoMKg wqBpZiAobXNnLT50eF9sZW4gPiAwKQ0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHhmZXIuY21kID0gKCh1OCAqKShtc2ctPnR4X2J1ZikpWzBdOw0KPiA+ID4gK8KgwqDCoMKg wqDCoMKgaW5pdF9jb21wbGV0aW9uKCZ4ZmVyLmNvbXBsZXRlZCk7DQo+ID4gPiArDQo+ID4gPiAr wqDCoMKgwqDCoMKgwqByZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5yeF9lc2NfY2xrKTsN Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKSB7DQo+ID4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBlbmFi bGUgcnhfZXNjDQo+ID4gPiBjbGs6DQo+ID4gPiAlemRcbiIsDQo+ID4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCk7DQo+ID4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4gPiA+ICvCoMKg wqDCoMKgwqDCoH0NCj4gPiA+ICvCoMKgwqDCoMKgwqDCoERSTV9ERVZfREVCVUdfRFJJVkVSKGRz aS0+ZGV2LCAiRW5hYmxlZCByeF9lc2MgY2xrIEAlbHUNCj4gPiA+IEh6XG4iLA0KPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2xr X2dldF9yYXRlKGRzaS0+cnhfZXNjX2NsaykpOw0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDC oMKgLyogSW5pdGlhdGUgdGhlIERTSSBwYWNrZXQgdHJhbnNtaXNpb24gKi8NCj4gPiA+ICvCoMKg wqDCoMKgwqDCoG53bF9kc2lfYmVnaW5fdHJhbnNtaXNzaW9uKGRzaSk7DQo+ID4gPiArDQo+ID4g PiArwqDCoMKgwqDCoMKgwqBpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmeGZlci5j b21wbGV0ZWQsDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBOV0xfRFNJX01JUElfRklG T19USU1FT1UNCj4gPiA+IFQpKQ0KPiA+ID4gew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoERSTV9ERVZfRVJST1IoZHNpX2hvc3QtPmRldiwgIlslMDJYXSBEU0kgdHJhbnNm ZXINCj4gPiA+IHRpbWVkIG91dFxuIiwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGZlci5jbWQpOw0KPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IC1FVElNRURPVVQ7DQo+ID4gPiArwqDCoMKg wqDCoMKgwqB9IGVsc2Ugew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJl dCA9IHhmZXIuc3RhdHVzOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgfQ0KPiA+ID4gKw0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+cnhfZXNjX2Nsayk7DQo+ ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Ow0KPiA+ID4gK30NCj4gPiA+ ICsNCj4gPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG1pcGlfZHNpX2hvc3Rfb3BzIG53bF9kc2lf aG9zdF9vcHMgPSB7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqAuYXR0YWNoID0gbndsX2RzaV9ob3N0 X2F0dGFjaCwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoC5kZXRhY2ggPSBud2xfZHNpX2hvc3RfZGV0 YWNoLA0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgLnRyYW5zZmVyID0gbndsX2RzaV9ob3N0X3RyYW5z ZmVyLA0KPiA+ID4gK307DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIGlycXJldHVybl90IG53bF9k c2lfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkNCj4gPiA+ICt7DQo+ID4gPiArwqDC oMKgwqDCoMKgwqB1MzIgaXJxX3N0YXR1czsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBu d2xfZHNpICpkc2kgPSBkYXRhOw0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgaXJxX3N0 YXR1cyA9IG53bF9kc2lfcmVhZChkc2ksIE5XTF9EU0lfSVJRX1NUQVRVUyk7DQo+ID4gPiArDQo+ ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAoaXJxX3N0YXR1cyAmIE5XTF9EU0lfVFhfRklGT19PVkZM VykNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0VSUk9SX1JB VEVMSU1JVEVEKGRzaS0+ZGV2LCAidHggZmlmbw0KPiA+ID4gb3ZlcmZsb3dcbiIpOw0KPiA+ID4g Kw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGlycV9zdGF0dXMgJiBOV0xfRFNJX0hTX1RYX1RJ TUVPVVQpDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJP Ul9SQVRFTElNSVRFRChkc2ktPmRldiwgIkhTIHR4DQo+ID4gPiB0aW1lb3V0XG4iKTsNCj4gPiA+ ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChpcnFfc3RhdHVzICYgTldMX0RTSV9UWF9QS1Rf RE9ORSB8fA0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqBpcnFfc3RhdHVzICYgTldMX0RT SV9SWF9QS1RfSERSX1JDVkQgfHwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaXJxX3N0 YXR1cyAmIE5XTF9EU0lfUlhfUEtUX1BBWUxPQURfREFUQV9SQ1ZEKQ0KPiA+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoG53bF9kc2lfZmluaXNoX3RyYW5zbWlzc2lvbihkc2ksIGly cV9zdGF0dXMpOw0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIElSUV9IQU5E TEVEOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgaW50IG53bF9kc2lfZW5hYmxl KHN0cnVjdCBud2xfZHNpICpkc2kpDQo+ID4gPiArew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3Ry dWN0IGRldmljZSAqZGV2ID0gZHNpLT5kZXY7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqB1bmlvbiBw aHlfY29uZmlndXJlX29wdHMgKnBoeV9jZmcgPSAmZHNpLT5waHlfY2ZnOw0KPiA+ID4gK8KgwqDC oMKgwqDCoMKgaW50IHJldDsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmICghZHNp LT5sYW5lcykgew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZf RVJST1IoZGV2LCAiTmVlZCBEU0kgbGFuZXM6ICVkXG4iLCBkc2ktDQo+ID4gPiA+IA0KPiA+ID4g PiBsYW5lcyk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1F SU5WQUw7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqB9DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDC oMKgwqByZXQgPSBwaHlfaW5pdChkc2ktPnBoeSk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAo cmV0IDwgMCkgew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZf RVJST1IoZGV2LCAiRmFpbGVkIHRvIGluaXQgRFNJIHBoeToNCj4gPiA+ICVkXG4iLA0KPiA+ID4g cmV0KTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Ow0K PiA+ID4gK8KgwqDCoMKgwqDCoMKgfQ0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0 ID0gcGh5X2NvbmZpZ3VyZShkc2ktPnBoeSwgcGh5X2NmZyk7DQo+ID4gPiArwqDCoMKgwqDCoMKg wqBpZiAocmV0IDwgMCkgew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERS TV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBEU0kgcGh5Og0KPiA+ID4gJWRc biIsIHJldCk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byB1bmlu aXRfcGh5Ow0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgfQ0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKg wqDCoMKgcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+dHhfZXNjX2Nsayk7DQo+ID4gPiAr wqDCoMKgwqDCoMKgwqBpZiAocmV0IDwgMCkgew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoERSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIHR4X2Vz Yw0KPiA+ID4gY2xrOg0KPiA+ID4gJWRcbiIsDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCk7DQo+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byB1bmluaXRfcGh5Ow0KPiA+ID4gK8KgwqDCoMKg wqDCoMKgfQ0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5k ZXYsICJFbmFibGVkIHR4X2VzYyBjbGsgQCVsdQ0KPiA+ID4gSHpcbiIsDQo+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjbGtfZ2V0 X3JhdGUoZHNpLT50eF9lc2NfY2xrKSk7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqBy ZXQgPSBud2xfZHNpX2NvbmZpZ19ob3N0KGRzaSk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAo cmV0IDwgMCkgew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZf RVJST1IoZGV2LCAiRmFpbGVkIHRvIHNldCB1cCBEU0k6ICVkIiwNCj4gPiA+IHJldCk7DQo+ID4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBkaXNhYmxlX2Nsb2NrOw0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgfQ0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0g bndsX2RzaV9jb25maWdfZHBpKGRzaSk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0IDwg MCkgew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfRVJST1Io ZGV2LCAiRmFpbGVkIHRvIHNldCB1cCBEUEk6ICVkIiwNCj4gPiA+IHJldCk7DQo+ID4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBkaXNhYmxlX2Nsb2NrOw0KPiA+ID4gK8Kg wqDCoMKgwqDCoMKgfQ0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gcGh5X3Bv d2VyX29uKGRzaS0+cGh5KTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKSB7DQo+ ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJPUihkZXYsICJG YWlsZWQgdG8gcG93ZXIgb24gRFBIWQ0KPiA+ID4gKCVkKVxuIiwNCj4gPiA+IHJldCk7DQo+ID4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBkaXNhYmxlX2Nsb2NrOw0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgfQ0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0ID0g bndsX2RzaV9pbml0X2ludGVycnVwdHMoZHNpKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChy ZXQgPCAwKQ0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gcG93ZXJf b2ZmX3BoeTsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7DQo+ID4g PiArDQo+ID4gPiArcG93ZXJfb2ZmX3BoeToNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHBoeV9wb3dl cl9vZmYoZHNpLT5waHkpOw0KPiA+ID4gK2Rpc2FibGVfY2xvY2s6DQo+ID4gPiArwqDCoMKgwqDC oMKgwqBjbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT50eF9lc2NfY2xrKTsNCj4gPiA+ICt1bmlu aXRfcGh5Og0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgcGh5X2V4aXQoZHNpLT5waHkpOw0KPiA+ID4g Kw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ ID4gPiArc3RhdGljIGludCBud2xfZHNpX2Rpc2FibGUoc3RydWN0IG53bF9kc2kgKmRzaSkNCj4g PiA+ICt7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkc2ktPmRl djsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoERSTV9ERVZfREVCVUdfRFJJVkVSKGRl diwgIkRpc2FibGluZyBjbG9ja3MgYW5kIHBoeVxuIik7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKg wqDCoMKgwqBwaHlfcG93ZXJfb2ZmKGRzaS0+cGh5KTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHBo eV9leGl0KGRzaS0+cGh5KTsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoC8qIERpc2Fi bGluZyB0aGUgY2xvY2sgYmVmb3JlIHRoZSBwaHkgYnJlYWtzIGVuYWJsaW5nIGRzaQ0KPiA+ID4g YWdhaW4gKi8NCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGNsa19kaXNhYmxlX3VucHJlcGFyZShkc2kt PnR4X2VzY19jbGspOw0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7DQo+ ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBpbnQgbndsX2RzaV9zZXRfcGxhdGZvcm1f Y2xvY2tzKHN0cnVjdCBud2xfZHNpICpkc2ksIGJvb2wNCj4gPiA+IGVuYWJsZSkNCj4gPiA+ICt7 DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkc2ktPmRldjsNCj4g PiA+ICvCoMKgwqDCoMKgwqDCoGNvbnN0IGNoYXIgKmlkOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKg c3RydWN0IGNsayAqY2xrOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc2l6ZV90IGk7DQo+ID4gPiAr wqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBsb25nIHJhdGU7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBp bnQgcmV0LCByZXN1bHQgPSAwOw0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgRFJNX0RF Vl9ERUJVR19EUklWRVIoZGV2LCAiJXMgcGxhdGZvcm0gY2xvY2tzXG4iLA0KPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZW5hYmxl ID8gImVuYWJsaW5nIiA6ICJkaXNhYmxpbmciKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGZvciAo aSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRzaS0+cGRhdGEtPmNsa19jb25maWcpOyBpKyspDQo+ID4g PiB7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFkc2ktPmNsa19j b25maWdbaV0ucHJlc2VudCkNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgY29udGludWU7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgaWQgPSBkc2ktPmNsa19jb25maWdbaV0uaWQ7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgY2xrID0gZHNpLT5jbGtfY29uZmlnW2ldLmNsazsNCj4gPiA+ICsNCj4g PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoZW5hYmxlKSB7DQo+ID4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IGNsa19w cmVwYXJlX2VuYWJsZShjbGspOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBpZiAocmV0IDwgMCkgew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJP UihkZXYsDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIkZhaWxlZCB0 byBlbmFibGUNCj4gPiA+ICVzDQo+ID4gPiBjbGs6ICVkXG4iLA0KPiA+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlkLCByZXQpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVzdWx0ID0gcmVz dWx0ID86IHJldDsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgfQ0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqByYXRlID0gY2xrX2dldF9yYXRlKGNsayk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwg IkVuYWJsZWQgJXMgY2xrDQo+ID4gPiBAJWx1IEh6XG4iLA0KPiA+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBpZCwgcmF0ZSk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgfSBlbHNlIHsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNsayk7DQo+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfREVCVUdfRFJJ VkVSKGRldiwgIkRpc2FibGVkICVzDQo+ID4gPiBjbGtcbiIsIGlkKTsNCj4gPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9DQo+ID4gPiArwqDCoMKgwqDCoMKgwqB9DQo+ID4gPiAr DQo+ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcmVzdWx0Ow0KPiA+ID4gK30NCj4gPiA+ICsN Cj4gPiA+ICtzdGF0aWMgaW50IG53bF9kc2lfcGxhdF9lbmFibGUoc3RydWN0IG53bF9kc2kgKmRz aSkNCj4gPiA+ICt7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZGV2aWNlICpkZXYgPSBk c2ktPmRldjsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7DQo+ID4gPiArDQo+ID4gPiAr wqDCoMKgwqDCoMKgwqBpZiAoZHNpLT5wZGF0YS0+c2VsZWN0X2lucHV0KSB7DQo+ID4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gZHNpLT5wZGF0YS0+c2VsZWN0X2lucHV0 KGRzaSk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJldCA8IDAp DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJl dHVybiByZXQ7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqB9DQo+ID4gU2luY2UgdGhlIHNlbGVjdF9p bnB1dCBhbHdheXMgcmVhZHMgdGhlIGR0YiAoYW5kIGF0IHJ1bnRpbWUgdGhpcw0KPiA+IG5vZGUN Cj4gPiBuZXZlciBjaGFuZ2VzIGFueXdheSkgSSB0aGluayBpdCdzIGJlc3QgdG8gdXNlIHRoZSBz ZWxlY3RfaW5wdXQgYXQNCj4gPiBwcm9iZSBzaW5jZSBpdCBpcyBvbmx5IG5lZWRlZCBvbmNlIGFu ZCBhbHNvIGRyb3AgdGhlDQo+ID4gZGVzZWxlY3RfaW5wdXQuDQo+ID4gDQo+ID4gDQo+ID4gPiAN Cj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldCA9IG53bF9kc2lfc2V0X3BsYXRmb3Jt X2Nsb2Nrcyhkc2ksIHRydWUpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCA8IDApDQo+ ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4gPiA+ICsN Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGRzaS0+cGRhdGEtPnBvd2Vyb24oZHNpKTsNCj4g PiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKQ0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoERSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHBvd2VyIG9uIERTSToN Cj4gPiA+ICVkXG4iLA0KPiA+ID4gcmV0KTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBy ZXQ7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyB2b2lkIG53bF9kc2lfcGxhdF9k aXNhYmxlKHN0cnVjdCBud2xfZHNpICpkc2kpDQo+ID4gPiArew0KPiA+ID4gK8KgwqDCoMKgwqDC oMKgZHNpLT5wZGF0YS0+cG93ZXJvZmYoZHNpKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoG53bF9k c2lfc2V0X3BsYXRmb3JtX2Nsb2Nrcyhkc2ksIGZhbHNlKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDC oGlmIChkc2ktPnBkYXRhLT5kZXNlbGVjdF9pbnB1dCkNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBkc2ktPnBkYXRhLT5kZXNlbGVjdF9pbnB1dChkc2kpOw0KPiA+ID4gK30N Cj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgdm9pZCBud2xfZHNpX2JyaWRnZV9kaXNhYmxlKHN0cnVj dCBkcm1fYnJpZGdlICpicmlkZ2UpDQo+ID4gPiArew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3Ry dWN0IG53bF9kc2kgKmRzaSA9IGJyaWRnZV90b19kc2koYnJpZGdlKTsNCj4gPiA+ICsNCj4gPiA+ ICvCoMKgwqDCoMKgwqDCoG53bF9kc2lfZGlzYWJsZShkc2kpOw0KPiA+ID4gK8KgwqDCoMKgwqDC oMKgbndsX2RzaV9wbGF0X2Rpc2FibGUoZHNpKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHBtX3J1 bnRpbWVfcHV0KGRzaS0+ZGV2KTsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIGlu dCBud2xfZHNpX2dldF9kcGh5X3BhcmFtcyhzdHJ1Y3QgbndsX2RzaSAqZHNpLA0KPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUNCj4gPiA+ICptb2RlLA0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgdW5pb24gcGh5X2NvbmZpZ3VyZV9vcHRzDQo+ID4gPiAqcGh5X29wdHMp DQo+ID4gPiArew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgbG9uZyByYXRlOw0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDC oGlmIChkc2ktPmxhbmVzIDwgMSB8fCBkc2ktPmxhbmVzID4gNCkNCj4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsNCj4gPiA+ICsNCj4gPiA+ICvCoMKg wqDCoMKgwqDCoC8qDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoCogU28gZmFyIHRoZSBEUEhZIHNw ZWMgbWluaW1hbCB0aW1pbmdzIHdvcmsgZm9yIGJvdGgNCj4gPiA+IG1peGVsDQo+ID4gPiArwqDC oMKgwqDCoMKgwqDCoCogZHBoeSBhbmQgbndsIGRzaSBob3N0DQo+ID4gPiArwqDCoMKgwqDCoMKg wqDCoCovDQo+ID4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSBwaHlfbWlwaV9kcGh5X2dldF9kZWZh dWx0X2NvbmZpZygNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtb2RlLT5j cnRjX2Nsb2NrICogMTAwMCwNCj4gPiBXaHkgYXJlIHlvdSB1c2luZyBjcnRjX2Nsb2NrIGhlcmU/ IEkgdGhpcyB0aGlzIHNob3VsZCBiZSB1c2VkIG9ubHkNCj4gPiBieQ0KPiA+IHRoZSBDUlRDIGNv bXBvbmVudC4gSSdkIHN1Z2dlc3QgdG8gdXNlIG1vZGUtPmNsb2NrIGhlcmUsIHNpbmNlIGl0DQo+ ID4gaXMNCj4gPiBhYm91dCB0aGUgb3V0cHV0IGNsb2NrIG9mIHRoZSBEU0ksIG5vdCB0aGUgaW5w dXQgY2xvY2sgb24gdGhlIERQSQ0KPiA+IGludGVyZmFjZSwgdGhhdCBpcyBjb21pbmcgZnJvbSBD UlRDLg0KPiBjcnRjX2Nsb2NrIGlzIHRoZSBhY3R1YWwgcGl4ZWwgZG90IGNsb2NrIHVzZWQgd2hp Y2ggc291bmRzIGxpa2UgdGhlDQo+IG9uZSB3ZSB3YW50IHRvIGJhc2Ugb3VyIGNhbGN1YWxhdGlv bnMgb24sIG5vPw0KDQpGcm9tIGhvdyBJIHNlZSB0aGluZ3MgaGVyZSwgbW9kZS0+Y3J0Y19jbG9j ayBzaG91bGQgYmUgdGhlIHBpeGVsLWNsb2NrDQpjb21pbmcgdG8gdGhlIERQSSBpbnRlcmZhY2Ug ZnJvbSBDUlRDIChpbnB1dCksIHdoaWxlIG1vZGUtPmNsb2NrIHNob3VsZA0KYmUgdGhlIHBpeGVs LWNsb2NrIHRoYXQgdGhlIERTSSBwZXJpaGVyYWwgZXhwZWN0cyAob3V0cHV0KS4NCkFzIEkgdG9s ZCB5b3UgaW4gYW5vdGhlciB0aHJlYWQsIEkgaGF2ZSBhIHBhbmVsICh0aGF0IHJlcXVpcmVzIGEg cGl4ZWwtDQpjbG9jayBvZiAxMzJNKSB0aGF0IHdvcmtzIG9ubHkgd2hlbiB1c2luZyBhIHNtYWxs ZXIgcGl4ZWwtY2xvY2sgYXQgRFBJDQppbnRlcmZhY2UuIEluIHRoYXQgY2FzZSwgSSBjaGFuZ2Ug dGhlIGNydGNfY2xvY2sgdG8gYSBsb3dlciB2YWx1ZQ0KKGV2ZW5seSBkaXZpc2libGUgYnkgdGhl IHJhdGUgb2YgcGh5X3JlZiwgZm9yIGV4OiAxMjZNKSBpbiBtb2RlX2ZpeHVwLA0Kd2hpbGUga2Vl cGluZyB0aGUgYWN0dWFsIGNsb2NrIChvZiAxMzJNKSBhdCBEU0kgb3VwdXQuIFdoaWNoIGlzIGhl cmUsDQp3aGVyZSB0aGUgRFBIWSBzcGVlZCBpcyBjb25maWd1cmVkLg0KQW5kLCB0aGF0J3Mgd2h5 IEkgc3VnZ2VzdGVkIHVzaW5nIG1vZGUtPmNsb2NrIGhlcmUuDQoNCj4gDQo+ID4gDQo+ID4gwqAN Cj4gPiA+IA0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1pcGlfZHNpX3Bp eGVsX2Zvcm1hdF90b19icHAoZHNpLT5mb3JtYXQpLCBkc2ktDQo+ID4gPiA+IA0KPiA+ID4gPiBs YW5lcywNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAmcGh5X29wdHMtPm1p cGlfZHBoeSk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0IDwgMCkNCj4gPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Ow0KPiA+ID4gKw0KPiA+ID4gK8Kg wqDCoMKgwqDCoMKgcmF0ZSA9IGNsa19nZXRfcmF0ZShkc2ktPnR4X2VzY19jbGspOw0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJMUCBjbGsgaXMg QCVsdSBIelxuIiwNCj4gPiA+IHJhdGUpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgcGh5X29wdHMt Pm1pcGlfZHBoeS5scF9jbGtfcmF0ZSA9IHJhdGU7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDC oMKgwqByZXR1cm4gMDsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIGJvb2wgbnds X2RzaV9icmlkZ2VfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLA0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0DQo+ID4gPiBkcm1fZGlzcGxheV9tb2RlDQo+ ID4gPiAqbW9kZSwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZGlzcGxheV9t b2RlDQo+ID4gPiAqYWRqdXN0ZWRfbW9kZSkNCj4gPiA+ICt7DQo+ID4gPiArwqDCoMKgwqDCoMKg wqAvKiBBdCBsZWFzdCBMQ0RJRiArIE5XTCBuZWVkcyBhY3RpdmUgaGlnaCBzeW5jICovDQo+ID4g PiArwqDCoMKgwqDCoMKgwqBhZGp1c3RlZF9tb2RlLT5mbGFncyB8PSAoRFJNX01PREVfRkxBR19Q SFNZTkMgfA0KPiA+ID4gRFJNX01PREVfRkxBR19QVlNZTkMpOw0KPiA+ID4gK8KgwqDCoMKgwqDC oMKgYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJj0gfihEUk1fTU9ERV9GTEFHX05IU1lOQyB8DQo+ID4g PiBEUk1fTU9ERV9GTEFHX05WU1lOQyk7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqBy ZXR1cm4gdHJ1ZTsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIGVudW0gZHJtX21v ZGVfc3RhdHVzDQo+ID4gPiArbndsX2RzaV9icmlkZ2VfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Jy aWRnZSAqYnJpZGdlLA0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpDQo+ID4g PiArew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG53bF9kc2kgKmRzaSA9IGJyaWRnZV90 b19kc2koYnJpZGdlKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGludCBicHAgPSBtaXBpX2RzaV9w aXhlbF9mb3JtYXRfdG9fYnBwKGRzaS0+Zm9ybWF0KTsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDC oMKgwqDCoGlmIChtb2RlLT5jbG9jayAqIGJwcCA+IDE1MDAwMDAwICogZHNpLT5sYW5lcykNCj4g PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gTU9ERV9DTE9DS19ISUdI Ow0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKG1vZGUtPmNsb2NrICogYnBwIDwg ODAwMDAgKiBkc2ktPmxhbmVzKQ0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJldHVybiBNT0RFX0NMT0NLX0xPVzsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHJl dHVybiBNT0RFX09LOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgdm9pZA0KPiA+ ID4gK253bF9kc2lfYnJpZGdlX21vZGVfc2V0KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsDQo+ ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnN0 IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLA0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZQ0KPiA+ID4gKmFkanVzdGVkX21vZGUpDQo+ID4gPiArew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKg c3RydWN0IG53bF9kc2kgKmRzaSA9IGJyaWRnZV90b19kc2koYnJpZGdlKTsNCj4gPiA+ICvCoMKg wqDCoMKgwqDCoHN0cnVjdCBkZXZpY2UgKmRldiA9IGRzaS0+ZGV2Ow0KPiA+ID4gK8KgwqDCoMKg wqDCoMKgdW5pb24gcGh5X2NvbmZpZ3VyZV9vcHRzIG5ld19jZmc7DQo+ID4gPiArwqDCoMKgwqDC oMKgwqB1bnNpZ25lZCBsb25nIHBoeV9yZWZfcmF0ZTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGlu dCByZXQ7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSBud2xfZHNpX2dldF9k cGh5X3BhcmFtcyhkc2ksIGFkanVzdGVkX21vZGUsDQo+ID4gPiAmbmV3X2NmZyk7DQo+ID4gPiAr wqDCoMKgwqDCoMKgwqBpZiAocmV0IDwgMCkNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqByZXR1cm47DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqAvKg0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgwqAqIElmIGhzIGNsb2NrIGlzIHVuY2hhbmdlZCwgd2UncmUgYWxsIGdv b2QgLSBhbGwNCj4gPiA+IHBhcmFtZXRlcnMNCj4gPiA+IGFyZQ0KPiA+ID4gK8KgwqDCoMKgwqDC oMKgwqAqIGRlcml2ZWQgZnJvbSBpdCBhdG0uDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoCovDQo+ ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAobmV3X2NmZy5taXBpX2RwaHkuaHNfY2xrX3JhdGUgPT0g ZHNpLQ0KPiA+ID4gPiANCj4gPiA+ID4gcGh5X2NmZy5taXBpX2RwaHkuaHNfY2xrX3JhdGUpDQo+ ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuOw0KPiA+ID4gKw0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgcGh5X3JlZl9yYXRlID0gY2xrX2dldF9yYXRlKGRzaS0+cGh5X3Jl Zl9jbGspOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAi UEhZIGF0IHJlZiByYXRlOiAlbHVcbiIsDQo+ID4gPiBwaHlfcmVmX3JhdGUpOw0KPiA+ID4gK8Kg wqDCoMKgwqDCoMKgLyogU2F2ZSB0aGUgbmV3IGRlc2lyZWQgcGh5IGNvbmZpZyAqLw0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgbWVtY3B5KCZkc2ktPnBoeV9jZmcsICZuZXdfY2ZnLCBzaXplb2YobmV3 X2NmZykpOw0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgbWVtY3B5KCZkc2ktPm1vZGUs IGFkanVzdGVkX21vZGUsIHNpemVvZihkc2ktPm1vZGUpKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDC oGRybV9tb2RlX2RlYnVnX3ByaW50bW9kZWxpbmUoYWRqdXN0ZWRfbW9kZSk7DQo+ID4gPiArfQ0K PiA+ID4gKw0KPiA+ID4gK3N0YXRpYyB2b2lkIG53bF9kc2lfYnJpZGdlX3ByZV9lbmFibGUoc3Ry dWN0IGRybV9icmlkZ2UgKmJyaWRnZSkNCj4gPiA+ICt7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgbndsX2RzaSAqZHNpID0gYnJpZGdlX3RvX2RzaShicmlkZ2UpOw0KPiA+ID4gKw0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgcG1fcnVudGltZV9nZXRfc3luYyhkc2ktPmRldik7DQo+ID4gPiAr wqDCoMKgwqDCoMKgwqBud2xfZHNpX3BsYXRfZW5hYmxlKGRzaSk7DQo+ID4gPiArwqDCoMKgwqDC oMKgwqBud2xfZHNpX2VuYWJsZShkc2kpOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0 aWMgaW50IG53bF9kc2lfYnJpZGdlX2F0dGFjaChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQ0K PiA+ID4gK3sNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBud2xfZHNpICpkc2kgPSBicmlk Z2VfdG9fZHNpKGJyaWRnZSk7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4g ZHJtX2JyaWRnZV9hdHRhY2goYnJpZGdlLT5lbmNvZGVyLCBkc2ktDQo+ID4gPiA+cGFuZWxfYnJp ZGdlLA0KPiA+ID4gYnJpZGdlKTsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIGNv bnN0IHN0cnVjdCBkcm1fYnJpZGdlX2Z1bmNzIG53bF9kc2lfYnJpZGdlX2Z1bmNzID0gew0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgLnByZV9lbmFibGUgPSBud2xfZHNpX2JyaWRnZV9wcmVfZW5hYmxl LA0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgLmRpc2FibGXCoMKgwqDCoD0gbndsX2RzaV9icmlkZ2Vf ZGlzYWJsZSwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoC5tb2RlX2ZpeHVwID0gbndsX2RzaV9icmlk Z2VfbW9kZV9maXh1cCwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoC5tb2RlX3NldMKgwqDCoD0gbnds X2RzaV9icmlkZ2VfbW9kZV9zZXQsDQo+ID4gPiArwqDCoMKgwqDCoMKgwqAubW9kZV92YWxpZCA9 IG53bF9kc2lfYnJpZGdlX21vZGVfdmFsaWQsDQo+ID4gPiArwqDCoMKgwqDCoMKgwqAuYXR0YWNo wqDCoMKgwqDCoD0gbndsX2RzaV9icmlkZ2VfYXR0YWNoLA0KPiA+ID4gK307DQo+ID4gPiArDQo+ ID4gPiArc3RhdGljIGludCBud2xfZHNpX3BhcnNlX2R0KHN0cnVjdCBud2xfZHNpICpkc2kpDQo+ ID4gPiArew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl diA9IHRvX3BsYXRmb3JtX2RldmljZShkc2ktDQo+ID4gPiA+ZGV2KTsNCj4gPiA+ICvCoMKgwqDC oMKgwqDCoHN0cnVjdCBjbGsgKmNsazsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGNvbnN0IGNoYXIg KmNsa19pZDsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHZvaWQgX19pb21lbSAqYmFzZTsNCj4gPiA+ ICvCoMKgwqDCoMKgwqDCoGludCBpLCByZXQ7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKg wqBkc2ktPnBoeSA9IGRldm1fcGh5X2dldChkc2ktPmRldiwgImRwaHkiKTsNCj4gPiA+ICvCoMKg wqDCoMKgwqDCoGlmIChJU19FUlIoZHNpLT5waHkpKSB7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0ID0gUFRSX0VSUihkc2ktPnBoeSk7DQo+ID4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJldCAhPSAtRVBST0JFX0RFRkVSKQ0KPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0VSUk9S KGRzaS0+ZGV2LCAiQ291bGQgbm90IGdldA0KPiA+ID4gUEhZOg0KPiA+ID4gJWRcbiIsIHJldCk7 DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4gPiA+ ICvCoMKgwqDCoMKgwqDCoH0NCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoC8qIFBsYXRm b3JtIGRlcGVuZGVudCBjbG9ja3MgKi8NCj4gPiA+ICvCoMKgwqDCoMKgwqDCoG1lbWNweShkc2kt PmNsa19jb25maWcsIGRzaS0+cGRhdGEtPmNsa19jb25maWcsDQo+ID4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHNpemVvZihkc2ktPnBkYXRhLT5jbGtfY29uZmlnKSk7DQo+ID4gPiAr DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkc2ktPnBk YXRhLT5jbGtfY29uZmlnKTsgaSsrKQ0KPiA+ID4gew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGlmICghZHNpLT5jbGtfY29uZmlnW2ldLnByZXNlbnQpDQo+ID4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnRpbnVlOw0KPiA+ ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNsa19pZCA9IGRzaS0+ Y2xrX2NvbmZpZ1tpXS5pZDsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBj bGsgPSBkZXZtX2Nsa19nZXQoZHNpLT5kZXYsIGNsa19pZCk7DQo+ID4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgaWYgKElTX0VSUihjbGspKSB7DQo+ID4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IFBUUl9FUlIoY2xrKTsNCj4g PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RF Vl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBnZXQgJXMNCj4gPiA+IGNsb2NrOiAlZFxuIiwN Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNsa19pZCwgcmV0KTsNCj4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJTZXR1cCBjbGsgJXMN Cj4gPiA+IChyYXRlOg0KPiA+ID4gJWx1KVxuIiwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjbGtf aWQsIGNsa19nZXRfcmF0ZShjbGspKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBkc2ktPmNsa19jb25maWdbaV0uY2xrID0gY2xrOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKg fQ0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgLyogRFNJIGNsb2NrcyAqLw0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgY2xrID0gZGV2bV9jbGtfZ2V0KGRzaS0+ZGV2LCAicGh5X3JlZiIpOw0K PiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKElTX0VSUihjbGspKSB7DQo+ID4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gUFRSX0VSUihjbGspOw0KPiA+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8g Z2V0IHBoeV9yZWYNCj4gPiA+IGNsb2NrOg0KPiA+ID4gJWRcbiIsDQo+ID4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCk7DQo+ ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4gPiA+ICvC oMKgwqDCoMKgwqDCoH0NCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGRzaS0+cGh5X3JlZl9jbGsgPSBj bGs7DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqBjbGsgPSBkZXZtX2Nsa19nZXQoZHNp LT5kZXYsICJyeF9lc2MiKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChJU19FUlIoY2xrKSkg ew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IFBUUl9FUlIoY2xr KTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0VSUk9SKGRz aS0+ZGV2LCAiRmFpbGVkIHRvIGdldCByeF9lc2MNCj4gPiA+IGNsb2NrOg0KPiA+ID4gJWRcbiIs DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldCk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0 dXJuIHJldDsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoH0NCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGRz aS0+cnhfZXNjX2NsayA9IGNsazsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGNsayA9 IGRldm1fY2xrX2dldChkc2ktPmRldiwgInR4X2VzYyIpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKg aWYgKElTX0VSUihjbGspKSB7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0ID0gUFRSX0VSUihjbGspOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oERSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gZ2V0IHR4X2VzYw0KPiA+ID4gY2xv Y2s6DQo+ID4gPiAlZFxuIiwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0KTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Ow0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgfQ0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgZHNpLT50eF9lc2NfY2xrID0gY2xrOw0KPiA+ID4gKw0KPiA+ID4gK8Kg wqDCoMKgwqDCoMKgZHNpLT5tdXggPSBkZXZtX211eF9jb250cm9sX2dldChkc2ktPmRldiwgTlVM TCk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAoSVNfRVJSKGRzaS0+bXV4KSkgew0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IFBUUl9FUlIoZHNpLT5tdXgpOw0K PiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyZXQgIT0gLUVQUk9CRV9E RUZFUikNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBnZXQNCj4gPiA+IG11eDoNCj4g PiA+ICVkXG4iLCByZXQpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJl dHVybiByZXQ7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqB9DQo+ID4gPiArDQo+ID4gPiArwqDCoMKg wqDCoMKgwqBiYXNlID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDApOw0K PiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKElTX0VSUihiYXNlKSkNCj4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gUFRSX0VSUihiYXNlKTsNCj4gPiA+ICsNCj4gPiA+ ICvCoMKgwqDCoMKgwqDCoGRzaS0+cmVnbWFwID0NCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBkZXZtX3JlZ21hcF9pbml0X21taW8oZHNpLT5kZXYsIGJhc2UsDQo+ID4gPiAm bndsX2RzaV9yZWdtYXBfY29uZmlnKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChJU19FUlIo ZHNpLT5yZWdtYXApKSB7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0 ID0gUFRSX0VSUihkc2ktPnJlZ21hcCk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBjcmVhdGUgTldMIERTSQ0K PiA+ID4gcmVnbWFwOiAlZFxuIiwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0KTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Ow0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgfQ0KPiA+ ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgZHNpLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBk ZXYsIDApOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGRzaS0+aXJxIDwgMCkgew0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJG YWlsZWQgdG8gZ2V0IGRldmljZQ0KPiA+ID4gSVJROg0KPiA+ID4gJWRcbiIsDQo+ID4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRz aS0+aXJxKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZHNp LT5pcnE7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqB9DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDC oMKgwqBkc2ktPnJzdGMgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfYXJyYXlfZ2V0KGRzaS0+ZGV2LCBm YWxzZSwNCj4gPiA+IHRydWUpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKElTX0VSUihkc2kt PnJzdGMpKSB7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gUFRS X0VSUihkc2ktPnJzdGMpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlm IChyZXQgIT0gLUVQUk9CRV9ERUZFUikNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBn ZXQNCj4gPiA+IHJlc2V0czogJWRcbiIsDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQpOw0K PiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7DQo+ID4gPiAr wqDCoMKgwqDCoMKgwqB9DQo+ID4gU2luY2UgeW91IGRyb3BwZWQgdGhlIHJlc2V0IHF1aXJrICh3 aGljaCBpcyBhIGdvb2QgaWRlYSwgYnV0IGl0DQo+ID4gbmVlZHMgYQ0KPiA+IGJhY2t1cCksIEkg d291bGQgbGlrZSB0byB0ZWxsIHlvdSBhYm91dCBvdXIgZmluZGluZ3MuIFNvLCBhcyB5b3UNCj4g PiBrbm93LA0KPiA+IERTaSBjYW4gcmVjZWl2ZSBpbnB1dCBmcm9tIERDU1Mgb3IgTENESUYgKHRo aXMgaXMgZG9uZSB0aHJvdWdoIGENCj4gPiBtdXgpLg0KPiA+IE5vdywgdGhlIHJlc2V0IG9mIHRo ZSBEU0kgYmxvY2sgaXMgbm90IGhhbmRsZWQgZGlyZWN0bHkgdGhyb3VnaCB0aGUNCj4gPiBTeXN0 ZW0gUmVzZXQgQ29udHJvbGxlciAoYXMgaW5pdGlhbGx5IEkgdGhvdWdoKS4gVGhlIHNpZ25hbHMg Y29taW5nDQo+ID4gZnJvbSBTUkMgYXJlIGdvaW5nIGludG8gYSByZXNldF9zeW5jIChSZXNldCBT eW5jaHJvbnl6ZXIgYmxvY2spLA0KPiA+IGJlY2F1c2UgdGhlIERTSSBibG9jayBuZWVkcyB0aGUg cmVzZXQgc2lnbmFscyB0byBiZcKgc3luY2hyb25vdXMgZGUtDQo+ID4gYXNzZXJ0ZWQuDQo+ID4g UmVjZW50bHksIHdlIGRpc2NvdmVyZWQgdGhlIGJ1ZyB0aGF0IHdhcyBub3QgYWxsb3dpbmcgdXMg dG8NCj4gPiBjb3JyZWN0bHkNCj4gPiByZXNldCB0aGUgRFNJIGFuZCBhbHNvIHdoeSB0aGF0IHF1 aXJrIHdhcyBpbml0aWFsbHkgdXNlZC4NCj4gPiBOb3JtYWxseSwgdGhlIG91dHB1dCBwaXhlbC1j bG9jayB0aGF0IHdhcyBjb21pbmcgZnJvbSB0aGF0IG11eA0KPiA+IHNob3VsZA0KPiA+IGJlIHVz ZWQgYXMgYSBjbG9jayBmb3IgdGhlIHJlc2V0X3N5bmMsIGJ1dCBkdWUgdG8gYSBkZXNpZ24gaXNz dWUgaW4NCj4gPiB0aGUNCj4gPiBjb3JlLCB0aGUgTENESUYgcGl4ZWwtY2xvY2sgd2FzIHVzZWQg dG8gZHJpdmUgdGhpcyByZXNldF9zeW5jLg0KPiA+IFNvLCBzaW5jZSBIVyBidWcgaGVyZSB3aGlj aCBjYW4gYmUgbWFuYWdlZCBpbiBTVywgd2hhdCB3ZSBkaWQgaXMgdG8NCj4gPiBhZGQNCj4gPiB0 aGUgTENESUYgcGl4ZWwtY2xvY2sgdG8gdGhpcyBkcml2ZXIgKGluIGR0cyBpdCBjYW4gYmUgYWRk ZWQgYXMgYW4NCj4gPiBleHRlcm5hbCBjbG9jayBuZWVkZWQgZm9yIHJlc2V0X3N5bmMpLiBJIGtu b3cgaXQgaXMgYSBuYXN0eQ0KPiA+IGV4dGVybmFsDQo+ID4gZGVwZW5jZW5jeSwgYnV0IHRoaXMg aXMgdGhlIHBhcnQgaW4gU1cgdGhhdCBmaXhlcyB0aGUgaXNzdWUgaW4gSFcuDQo+ID4gTm93OiB0 aGUgTENESUYgcGl4ZWwtY2xvY2sgbmVlZHMgYm8gYmUgb24gZm9yIHRoZSB3aG9sZSBkdXJhdGlv biBvZg0KPiA+IHRoZQ0KPiA+IERTSSBvcGVyYXRpb24sIFRoaXMgbWVhbnMgdGhhdCBMQ0RJRiBz aG91bGQgYmUgZW5hYmxlZCBiZWZvcmUgZGUtDQo+ID4gYXNzZXJ0aW5nIHRoZSByZXNldCBzaWdu YWxzLCB0aGVuIGRpc2FibGVkIGFmdGVyIHdlIGFyZSBkb25lIHdpdGgNCj4gPiBEU0kNCj4gPiBh bmQgYXNzZXJ0IHRoZSByZXNldCBzaWduYWxzIGJhY2suDQo+IFB1bGxpbmcgaW4gdGhlIGxjZGlm IGNsb2NrIGFzIG9wdGlvbmFsIGNsb2NrIHdvcmtzIGJ1dCBob3cgZG8gdGhpbmdzDQo+IHdvcmsg d2l0aCBEQ1NTPyBXaGF0IGNsb2NrIHdpbGwgcmVzZXQgbmVlZCB0byBiZSBzeW5jZWQgdGhlcmUg dG9vPw0KPiAncGl4Jz8NCg0KVGhhdCdzIHRoZSB0aGluZy4gVGhlIGxjZGlmIGNsb2NrIGlzIHZp YWJsZSBpbiB0aGlzIGNhc2UgZXNwZWNpYWxsbHkNCndoZW4gRENTUyBpcyB1c2VkIGFzIGlucHV0 IHNvdXJjZS4gU2luY2UsIGJ5IGRlZmF1bHQsIGxjZGlmIGNsb2NrIGlzDQpvZmYgd2hlbiB1c2lu ZyBEQ1NTLCB0aGUgRFNJIHJlc2V0IHdvbid0IHdvcmsuIFdoZW4gdXNpbmcgTENESUYgYXMNCmlu cHV0IHNvdXJjZSwgRFNJIHJlc2V0IHdvcmtzLCBzaW5jZSB0aGUgbGNkaWYgY2xvY2sgaXMgb24g KGVuYWJsZWQgYnkNCk1YU0ZCIGRyaXZlcikuDQpPbiBzaG9ydDogbGNkaWYgcGl4ZWwtY2xvY2sg aXMgbmVlZGVkIGhlcmUgd2hlbiBEQ1NTIGlzIHVzZWQgYXMgaW5wdXQtDQpzb3VyY2UuDQoNCj4g DQo+ID4gDQo+ID4gDQo+ID4gTmV4dCwgSSB3YW50IHRvIGRldGFpbCB5b3UgdGhlIHNlcXVlbmNl IG9mIHRoZSBvcGVyYXRpb25zIHRoYXQNCj4gPiBuZWVkcyB0bw0KPiA+IGJlIGRvbmUsIHNpbmNl IHdoaWxlIGRlYnVnZ2luZyB0aGlzIGlzc3VlIHdlIHJlY2VpdmVkIHRoZSBjb3JyZWN0DQo+ID4g c2VxdWVuY2UgZnJvbSBOb3J0aHdlc3QgTG9naWMgcmVwcmVzZW50YXRpdmVzLiBUaGlzIHNlcXVl bmNlIGlzIGFuDQo+ID4gYWJzb2x1dGUgcmVxdWlyZW1lbnQgZm9yIGEgcHJvcGVyIGluaXRpYWxp emF0aW9uIGFuZCBJIHdpbGwgZGV0YWlsDQo+ID4gaXQNCj4gPiBiZWxvdzoNCj4gPiAxLiBEZS1h c3NlcnQgJ3BjbGsnIHJlc2V0ICh0aGlzIGlzIG5lZWRlZCB0byBoYXZlIGFjY2VzIHRvIHRoZSBE U0kNCj4gPiByZWdpc3RlcnMpDQo+ID4gMi4gQ29uZmlndXJlIERTSSBIb3N0DQo+ID4gMy4gQ29u ZmlndXJlIERIUFkNCj4gPiA0LiBFbmFibGUgRFBIWQ0KPiA+IDUuIERlLWFzc2VydCAnZXNjJyBh bmQgJ2J5dGUnIHJlc2V0cyAodGhlc2UgYXJlIG5lZWRlZCBmb3IgSG9zdCBUWA0KPiA+IG9wZXJh dGlvbnMpDQo+ID4gNi4gU2VuZCBEU0kgY29tbWFuZHMgKGlmIHRoZSBEU0kgcGVyaXBoZXJhbCBu ZWVkcyBjb25maWd1cmF0aW9uKQ0KPiA+IDcuIERlLWFzc2VydCAnZHBpJyByZXNldCAoZGUtYXNz ZXJ0aW5nIHRoaXMgcmVzZXQsIHdpbGwgZW5hYmxlIHRoZQ0KPiA+IERQSQ0KPiA+IHRvIHN0YXJ0 IGZldGNoaW5nIGRhdGEgZnJvbSBpdCdzIGlucHV0IGFuZCBzdGFydCBzdHJlYW1pbmcgRFNJDQo+ ID4gZGF0YSkNCj4gVmVyeSBuaWNlISBFc3BlY2lhbGx5IHRoZSBsYXN0IHBhcnQgKGUuZy4ga2Vl cGluZyB0aGUgZHNpIGxhbmVzIGZyZWUNCj4gb2YNCj4gc2lnbmFsIG91dHB1dCB1bnRpbCB0aGUg ZHNpIHNldHVwIGNvbW1hbmRzIHdlbnQgdGhyb3VnaCkgYW5zd2VycyBzb21lDQo+IHF1ZXN0aW9u cyBJIGFza2VkIE5YUCBhIHdoaWxlIGFnbyBpbiB0aGUgZm9ydW1zIGJ1dCBkaWQgbm90IGdldCBh DQo+IHJlcGx5LiBUaGF0IHNob3VsZCBtYWtlIHRoaW5ncyB3YXkgbW9yZSByb2J1c3QuDQo+IA0K PiA+IA0KPiA+IFlvdSB3aWxsIHNlZSB0aGF0IEkgbGVmdCB0aGUgJ2RwaScgcmVzZXQgYXQgdGhl IGVuZCwgc28gdGhhdCB0aGUNCj4gPiAnRFNJDQo+ID4gcGVyaXBoZXJhbCBpbml0aWFsaXphdGlv bicgc3RlcCB3aWxsIGJlIGNsZWFuLiBEU0kgbGFuZXMgbmVlZHMgdG8NCj4gPiBiZQ0KPiA+IGNs ZWFuIGR1cmluZyB0aGlzIHBoYXNlIGFuZCBub3QgYmUgInBvbHV0ZWQiIGJ5IGFueSBwaXhlbCBk YXRhIHRoYXQNCj4gPiBEUEkNCj4gPiB0aGlua3MgaXQgbmVlZHMgdG8gc3RyZWFtLiBPbiBteSBz aWRlLCBJIHRyaWVkIHRvIHNlcGFyYXRlIHRoZQ0KPiA+IGFib3ZlDQo+ID4gc3RlcHMgYnkgaW1w bGVtZW50aW5nIHN0ZXBzIDEtNSBpbiBicmlkZ2VfcHJlX2VuYWJsZSwgaG9waW5nIHRoYXQNCj4g PiB0aGUNCj4gPiBzdGVwIDYgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHJ1biBpbiBwYW5lbCBlbmFi bGUgcGhhc2UsIGFuZCBmaW5hbGx5DQo+ID4gaGF2ZSBzdGVwIDcgaW1wbGVtZW50ZWQgaW4gYnJp ZGdlX2VuYWJsZS4gVW5mb3J0dW5hdGVsbHksIHRoZSBvcmRlcg0KPiA+IG9mDQo+ID4gY2FsbHMg Zm9yIGVuYWJsZSBpcyBleGFjdGx5IHRoZSBvcG9zaXRlIHdheSBhcyBmb3IgcHJlX2VuYWJsZSwN Cj4gPiB3aGljaA0KPiA+IG1ha2VzIGltcG9zc2libGUgdG8gaGF2ZSB0aGUgc3RlcCA3IGV4ZWN1 dGVkIEFGVEVSIHN0ZXAgNi4NCj4gPiBJbiBicmlkZ2VfcHJlX2VuYWJsZSwgdGhlIHByZV9lbmFi bGUgZm9yIHRoZSBicmlkZ2UgY2hhaW4gaXMNCj4gPiBleGVjdXRlZA0KPiA+IGZpcnN0LCB0aGVu IG91ciBwcmVfZW5hYmxlIGlzIGV4ZWN1dGVkLg0KPiA+IEluIGJyaWRnZV9lbmFibGUsIG91ciBl bmFibGUgaXMgZXhlY3V0ZWQgZmlyc3QsIHRoZW4gdGhlIGVuYWJsZSBmb3INCj4gPiBicmlnZGUg Y2hhaW4gaXMgZXhlY3V0ZWQuIFRoaXMgbWVhbnMgdGhhdCBzdGVwIDcgd2lsbCBlbmQgdXANCj4g PiBleGVjdXRlZA0KPiA+IGJlZm9yZSBzdGVwIDYsIGNhdXNpbmcgdGhlICdEU0kgbGFuZSBwb2x1 dGlvbicgSSB3YXMgdGFsa2luZyBhYm92ZS4NCj4gPiBBcyBvZiBub3csIEkgZGlkbid0IG1hbmFn ZSB0byBmaW5kIGEgd2F5IHRvIGZpeCB0aGlzLCBidXQgSSB3aWxsDQo+ID4ga2VlcA0KPiA+IGlu dmVzdGlnYXRpbmcuIElmIHlvdSBoYXZlIGEgZ29vZCBpZGVlYSBmb3IgdGhpcyBpdCB3b3VsZSBi ZSBncmVhdC4NCj4gPiBTbywgd2l0aCBhbGwgdGhlIGFib3ZlIGRldGFpbHMsIEkgdGhpbmsgeW91 IHdpbGwgbmVlZCB0byB0cmVhdCBlYWNoDQo+ID4gcmVzZXQgaW5kaXZpZHVhbGx5LCBpbnN0ZWFk IG9mIHRyZWF0aW5nIHRoZW0gYXMgYW4gYXJyYXkuDQo+ID4gDQo+ID4gPiANCj4gPiA+ICsNCj4g PiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtz dGF0aWMgaW50IGlteDhtcV9kc2lfc2VsZWN0X2lucHV0KHN0cnVjdCBud2xfZHNpICpkc2kpDQo+ ID4gPiArew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRldmljZV9ub2RlICpyZW1vdGU7 DQo+ID4gPiArwqDCoMKgwqDCoMKgwqB1MzIgdXNlX2Rjc3MgPSAxOw0KPiA+ID4gK8KgwqDCoMKg wqDCoMKgaW50IHJldDsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHJlbW90ZSA9IG9m X2dyYXBoX2dldF9yZW1vdGVfbm9kZShkc2ktPmRldi0+b2Zfbm9kZSwgMCwNCj4gPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgTldMX0RTSV9FTkRQT0lOVF9MQ0RJRikNCj4gPiA+IDsNCj4g PiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZW1vdGUpIHsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB1c2VfZGNzcyA9IDA7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqB9IGVsc2Ug ew0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJlbW90ZSA9IG9mX2dyYXBo X2dldF9yZW1vdGVfbm9kZShkc2ktPmRldi0NCj4gPiA+ID5vZl9ub2RlLA0KPiA+ID4gMCwNCj4g PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoE5XTF9EU0lfRU5E UE9JTg0KPiA+ID4gVF9EQw0KPiA+ID4gU1MpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGlmICghcmVtb3RlKSB7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfRVJST1IoZHNpLT5kZXYsDQo+ID4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAiTm8gdmFsaWQgaW5wdXQgZW5kcG9pbnQNCj4gPiA+IGZvdW5kXG4iKTsN Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0 dXJuIC1FSU5WQUw7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQ0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgfQ0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgRFJNX0RF Vl9JTkZPKGRzaS0+ZGV2LCAiVXNpbmcgJXMgYXMgaW5wdXQgc291cmNlXG4iLA0KPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAodXNlX2Rjc3MpID8gIkRDU1Mi IDogIkxDRElGIik7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqByZXQgPSBtdXhfY29udHJvbF90cnlf c2VsZWN0KGRzaS0+bXV4LCB1c2VfZGNzcyk7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0 IDwgMCkNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0VSUk9S KGRzaS0+ZGV2LCAiRmFpbGVkIHRvIHNlbGVjdCBpbnB1dDoNCj4gPiA+ICVkXG4iLCByZXQpOw0K PiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgb2Zfbm9kZV9wdXQocmVtb3RlKTsNCj4gPiA+ ICvCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0 YXRpYyBpbnQgaW14OG1xX2RzaV9kZXNlbGVjdF9pbnB1dChzdHJ1Y3QgbndsX2RzaSAqZHNpKQ0K PiA+ID4gK3sNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7DQo+ID4gPiArDQo+ID4gPiAr wqDCoMKgwqDCoMKgwqByZXQgPSBtdXhfY29udHJvbF9kZXNlbGVjdChkc2ktPm11eCk7DQo+ID4g PiArwqDCoMKgwqDCoMKgwqBpZiAocmV0IDwgMCkNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGRlc2VsZWN0DQo+ ID4gPiBpbnB1dDoNCj4gPiA+ICVkXG4iLCByZXQpOw0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKg wqDCoMKgcmV0dXJuIHJldDsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArDQo+ID4gPiArc3Rh dGljIGludCBpbXg4bXFfZHNpX3Bvd2Vyb24oc3RydWN0IG53bF9kc2kgKmRzaSkNCj4gPiA+ICt7 DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0ID0gMDsNCj4gPiA+ICsNCj4gPiA+ICvCoMKg wqDCoMKgwqDCoC8qIG90aGVyd2lzZSB0aGUgZGlzcGxheSBzdGF5cyBibGFuayAqLw0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgdXNsZWVwX3JhbmdlKDIwMCwgMzAwKTsNCj4gPiBJZiB5b3UgaW1wbGVt ZW50IHRoZSBwYXJ0IHdpdGggTENESUYgY2xvY2sgZGV0YWlsZWQgYWJvdmUsIHlvdSBjYW4NCj4g PiBkcm9wDQo+ID4gdGhpcyBzbGVlcC4gQWxzbywgcG93ZXJvbiBzaG91bGQgYmUgcmVwbGFjZWQg YnkgdmFyaW91cyByZXNldA0KPiA+IGNhbGxiYWNrcw0KPiA+IChleDogcGNsa19yZXNldCwgbWlw aV9yZXNldCwgZHBpX3Jlc2V0KS4NCj4gPiANCj4gPiA+IA0KPiA+ID4gKw0KPiA+ID4gK8KgwqDC oMKgwqDCoMKgaWYgKGRzaS0+cnN0YykNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZXQgPSByZXNldF9jb250cm9sX2RlYXNzZXJ0KGRzaS0+cnN0Yyk7DQo+ID4gPiArDQo+ ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Ow0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ ICtzdGF0aWMgaW50IGlteDhtcV9kc2lfcG93ZXJvZmYoc3RydWN0IG53bF9kc2kgKmRzaSkNCj4g PiA+ICt7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0ID0gMDsNCj4gPiA+ICsNCj4gPiA+ ICvCoMKgwqDCoMKgwqDCoGlmIChkc2ktPnJzdGMpDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0ID0gcmVzZXRfY29udHJvbF9hc3NlcnQoZHNpLT5yc3RjKTsNCj4gPiA+ ICvCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2JyaWRnZV90aW1pbmdzIG53bF9kc2lfdGltaW5ncyA9IHsN Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoC5pbnB1dF9idXNfZmxhZ3MgPSBEUk1fQlVTX0ZMQUdfREVf TE9XLA0KPiA+ID4gK307DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBud2xf ZHNpX3BsYXRmb3JtX2RhdGEgaW14OG1xX2RldiA9IHsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoC5w b3dlcm9uID0gJmlteDhtcV9kc2lfcG93ZXJvbiwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoC5wb3dl cm9mZiA9ICZpbXg4bXFfZHNpX3Bvd2Vyb2ZmLA0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgLnNlbGVj dF9pbnB1dCA9ICZpbXg4bXFfZHNpX3NlbGVjdF9pbnB1dCwNCj4gPiA+ICvCoMKgwqDCoMKgwqDC oC5kZXNlbGVjdF9pbnB1dCA9ICZpbXg4bXFfZHNpX2Rlc2VsZWN0X2lucHV0LA0KPiA+ID4gK8Kg wqDCoMKgwqDCoMKgLmNsa19jb25maWcgPSB7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgeyAuaWQgPSBOV0xfRFNJX0NMS19DT1JFLCAucHJlc2VudCA9IHRydWUgfSwNCj4g PiA+ICvCoMKgwqDCoMKgwqDCoH0sDQo+ID4gPiArfTsNCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBud2xfZHNpX2R0X2lkc1tdID0gew0KPiA+ID4gK8Kg wqDCoMKgwqDCoMKgeyAuY29tcGF0aWJsZSA9ICJmc2wsaW14OG1xLW53bC1kc2kiLCAuZGF0YSA9 DQo+ID4gPiAmaW14OG1xX2RldiwgfSwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHsgLyogc2VudGlu ZWwgKi8gfQ0KPiA+ID4gK307DQo+ID4gPiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbndsX2Rz aV9kdF9pZHMpOw0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2Rldmlj ZV9hdHRyaWJ1dGUgbndsX2RzaV9xdWlya3NfbWF0Y2hbXQ0KPiA+ID4gPSB7DQo+ID4gPiArwqDC oMKgwqDCoMKgwqB7IC5zb2NfaWQgPSAiaS5NWDhNUSIsIC5yZXZpc2lvbiA9ICIyLjAiLA0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoC5kYXRhID0gKHZvaWQgKilFMTE0MThfSFNfTU9ERV9RVUlS SyB9LA0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgeyAvKiBzZW50aW5lbC4gKi8gfSwNCj4gPiA+ICt9 Ow0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBpbnQgbndsX2RzaV9wcm9iZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQ0KPiA+ID4gK3sNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBk ZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBjb25zdCBzdHJ1 Y3Qgb2ZfZGV2aWNlX2lkICpvZl9pZCA9DQo+ID4gPiBvZl9tYXRjaF9kZXZpY2UobndsX2RzaV9k dF9pZHMsIGRldik7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBjb25zdCBzdHJ1Y3QgbndsX2RzaV9w bGF0Zm9ybV9kYXRhICpwZGF0YSA9IG9mX2lkLT5kYXRhOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKg Y29uc3Qgc3RydWN0IHNvY19kZXZpY2VfYXR0cmlidXRlICphdHRyOw0KPiA+ID4gK8KgwqDCoMKg wqDCoMKgc3RydWN0IG53bF9kc2kgKmRzaTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7 DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqBkc2kgPSBkZXZtX2t6YWxsb2MoZGV2LCBz aXplb2YoKmRzaSksIEdGUF9LRVJORUwpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCFkc2kp DQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FTk9NRU07DQo+ ID4gPiArDQo+ID4gPiArwqDCoMKgwqDCoMKgwqBkc2ktPmRldiA9IGRldjsNCj4gPiA+ICvCoMKg wqDCoMKgwqDCoGRzaS0+cGRhdGEgPSBwZGF0YTsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKg wqDCoHJldCA9IG53bF9kc2lfcGFyc2VfZHQoZHNpKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGlm IChyZXQpDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsN Cj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGRldm1fcmVxdWVzdF9pcnEoZGV2 LCBkc2ktPmlycSwNCj4gPiA+IG53bF9kc2lfaXJxX2hhbmRsZXIsIDAsDQo+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2 X25hbWUoZGV2KSwgZHNpKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKSB7DQo+ ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJPUihkZXYsICJG YWlsZWQgdG8gcmVxdWVzdCBJUlEgJWQ6DQo+ID4gPiAlZFxuIiwNCj4gPiA+IGRzaS0+aXJxLA0K PiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqByZXQpOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy biByZXQ7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqB9DQo+ID4gPiArDQo+ID4gPiArwqDCoMKgwqDC oMKgwqBkc2ktPmRzaV9ob3N0Lm9wcyA9ICZud2xfZHNpX2hvc3Rfb3BzOw0KPiA+ID4gK8KgwqDC oMKgwqDCoMKgZHNpLT5kc2lfaG9zdC5kZXYgPSBkZXY7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqBy ZXQgPSBtaXBpX2RzaV9ob3N0X3JlZ2lzdGVyKCZkc2ktPmRzaV9ob3N0KTsNCj4gPiA+ICvCoMKg wqDCoMKgwqDCoGlmIChyZXQpIHsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBNSVBJIGhvc3Q6DQo+ID4g PiAlZFxuIiwgcmV0KTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gcmV0Ow0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgfQ0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKg wqDCoMKgYXR0ciA9IHNvY19kZXZpY2VfbWF0Y2gobndsX2RzaV9xdWlya3NfbWF0Y2gpOw0KPiA+ ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGF0dHIpDQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgZHNpLT5xdWlya3MgPSAodWludHB0cl90KWF0dHItPmRhdGE7DQo+ID4gPiArDQo+ ID4gPiArwqDCoMKgwqDCoMKgwqBkc2ktPmJyaWRnZS5kcml2ZXJfcHJpdmF0ZSA9IGRzaTsNCj4g PiA+ICvCoMKgwqDCoMKgwqDCoGRzaS0+YnJpZGdlLmZ1bmNzID0gJm53bF9kc2lfYnJpZGdlX2Z1 bmNzOw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgZHNpLT5icmlkZ2Uub2Zfbm9kZSA9IGRldi0+b2Zf bm9kZTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoGRzaS0+YnJpZGdlLnRpbWluZ3MgPSAmbndsX2Rz aV90aW1pbmdzOw0KPiA+ID4gKw0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgZGV2X3NldF9kcnZkYXRh KGRldiwgZHNpKTsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHBtX3J1bnRpbWVfZW5hYmxlKGRldik7 DQo+ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4g PiArc3RhdGljIGludCBud2xfZHNpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 KQ0KPiA+ID4gK3sNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBud2xfZHNpICpkc2kgPSBw bGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsNCj4gPiA+ICsNCj4gPiA+ICvCoMKgwqDCoMKgwqDC oG1pcGlfZHNpX2hvc3RfdW5yZWdpc3RlcigmZHNpLT5kc2lfaG9zdCk7DQo+ID4gPiArwqDCoMKg wqDCoMKgwqBwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7DQo+ID4gPiArwqDCoMKgwqDC oMKgwqByZXR1cm4gMDsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIHN0cnVjdCBw bGF0Zm9ybV9kcml2ZXIgbndsX2RzaV9kcml2ZXIgPSB7DQo+ID4gPiArwqDCoMKgwqDCoMKgwqAu cHJvYmXCoMKgwqDCoMKgwqDCoMKgwqDCoD0gbndsX2RzaV9wcm9iZSwNCj4gPiA+ICvCoMKgwqDC oMKgwqDCoC5yZW1vdmXCoMKgwqDCoMKgwqDCoMKgwqA9IG53bF9kc2lfcmVtb3ZlLA0KPiA+ID4g K8KgwqDCoMKgwqDCoMKgLmRyaXZlcsKgwqDCoMKgwqDCoMKgwqDCoD0gew0KPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5vZl9tYXRjaF90YWJsZSA9IG53bF9kc2lfZHRfaWRz LA0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5uYW1lwqDCoMKgPSBEUlZf TkFNRSwNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoH0sDQo+ID4gPiArfTsNCj4gPiA+ICsNCj4gPiA+ ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG53bF9kc2lfZHJpdmVyKTsNCj4gPiA+ICsNCj4gPiA+ ICtNT0RVTEVfQVVUSE9SKCJOWFAgU2VtaWNvbmR1Y3RvciIpOw0KPiA+ID4gK01PRFVMRV9BVVRI T1IoIlB1cmlzbSBTUEMiKTsNCj4gPiA+ICtNT0RVTEVfREVTQ1JJUFRJT04oIk5vcnRod2VzdCBM b2dpYyBNSVBJLURTSSBkcml2ZXIiKTsNCj4gPiA+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7IC8q IEdQTHYyIG9yIGxhdGVyICovDQo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2Jy aWRnZS9ud2wtZHNpLmgNCj4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpLmgN Cj4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLmEy NDdhOGExMWM3Yw0KPiA+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ID4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2JyaWRnZS9ud2wtZHNpLmgNCj4gPiA+IEBAIC0wLDAgKzEsMTQ0IEBADQo+ID4gPiArLyog U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArICovDQo+ID4gPiArLyoNCj4gPiA+ICsg KiBOV0wgTUlQSSBEU0kgaG9zdCBkcml2ZXINCj4gPiA+ICsgKg0KPiA+ID4gKyAqIENvcHlyaWdo dCAoQykgMjAxNyBOWFANCj4gPiA+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTkgUHVyaXNtIFNQQw0K PiA+ID4gKyAqLw0KPiA+ID4gKyNpZm5kZWYgX19OV0xfRFNJX0hfXw0KPiA+ID4gKyNkZWZpbmUg X19OV0xfRFNJX0hfXw0KPiA+ID4gKw0KPiA+ID4gKy8qIERTSSBIT1NUIHJlZ2lzdGVycyAqLw0K PiA+ID4gKyNkZWZpbmUgTldMX0RTSV9DRkdfTlVNX0xBTkVTwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgMHgwDQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX0NGR19OT05DT05USU5V T1VTX0NMS8KgwqDCoMKgwqDCoMKgwqDCoMKgMHg0DQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX0NG R19UX1BSRcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHg4DQo+ ID4gPiArI2RlZmluZSBOV0xfRFNJX0NGR19UX1BPU1TCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAweGMNCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfQ0ZHX1RYX0dBUMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MTANCj4gPiA+ICsjZGVm aW5lIE5XTF9EU0lfQ0ZHX0FVVE9JTlNFUlRfRU9UUMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4 MTQNCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfQ0ZHX0VYVFJBX0NNRFNfQUZURVJfRU9UUMKgwqDC oMKgwqDCoDB4MTgNCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfQ0ZHX0hUWF9UT19DT1VOVMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MWMNCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfQ0ZH X0xSWF9IX1RPX0NPVU5UwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDIwDQo+ID4gPiArI2Rl ZmluZSBOV0xfRFNJX0NGR19CVEFfSF9UT19DT1VOVMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg MHgyNA0KPiA+ID4gKyNkZWZpbmUgTldMX0RTSV9DRkdfVFdBS0VVUMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDI4DQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX0NGR19T VEFUVVNfT1VUwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MmMNCj4gPiA+ICsj ZGVmaW5lIE5XTF9EU0lfUlhfRVJST1JfU1RBVFVTwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgzMA0KPiA+ID4gKw0KPiA+ID4gKy8qIERTSSBEUEkgcmVn aXN0ZXJzICovDQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX1BJWEVMX1BBWUxPQURfU0laRcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyMDANCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfUElYRUxf RklGT19TRU5EX0xFVkVMwqDCoMKgwqDCoMKgwqDCoMKgwqAweDIwNA0KPiA+ID4gKyNkZWZpbmUg TldMX0RTSV9JTlRFUkZBQ0VfQ09MT1JfQ09ESU5HwqDCoMKgwqDCoMKgwqDCoMKgMHgyMDgNCj4g PiA+ICsjZGVmaW5lIE5XTF9EU0lfUElYRUxfRk9STUFUwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAweDIwYw0KPiA+ID4gKyNkZWZpbmUgTldMX0RTSV9WU1lOQ19QT0xBUklU WcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDIxMA0KPiA+ID4gKyNkZWZpbmUg TldMX0RTSV9WU1lOQ19QT0xBUklUWV9BQ1RJVkVfTE9XwqDCoMKgwqDCoMKgMA0KPiA+ID4gKyNk ZWZpbmUgTldMX0RTSV9WU1lOQ19QT0xBUklUWV9BQ1RJVkVfSElHSMKgwqDCoMKgwqBCSVQoMSkN Cj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfSFNZTkNfUE9MQVJJVFnCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyMTQNCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfSFNZ TkNfUE9MQVJJVFlfQUNUSVZFX0xPV8KgwqDCoMKgwqDCoDANCj4gPiA+ICsjZGVmaW5lIE5XTF9E U0lfSFNZTkNfUE9MQVJJVFlfQUNUSVZFX0hJR0jCoMKgwqDCoMKgQklUKDEpDQo+ID4gPiArDQo+ ID4gPiArI2RlZmluZSBOV0xfRFNJX1ZJREVPX01PREXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAweDIxOA0KPiA+ID4gKyNkZWZpbmUgTldMX0RTSV9IRlDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MjFjDQo+ ID4gPiArI2RlZmluZSBOV0xfRFNJX0hCUMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyMjANCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfSFNB wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAw eDIyNA0KPiA+ID4gKyNkZWZpbmUgTldMX0RTSV9FTkFCTEVfTVVMVF9QS1RTwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgMHgyMjgNCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfVkJQwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDIyYw0K PiA+ID4gKyNkZWZpbmUgTldMX0RTSV9WRlDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MjMwDQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX0JM TFBfTU9ERcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyMzQN Cj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfVVNFX05VTExfUEtUX0JMTFDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgMHgyMzgNCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfVkFDVElWRcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAw eDIzYw0KPiA+ID4gKyNkZWZpbmUgTldMX0RTSV9WQ8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDI0MA0KPiA+ID4gKw0KPiA+ID4gKy8q IERTSSBBUEIgUEtUIGNvbnRyb2wgKi8NCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfVFhfUEFZTE9B RMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MjgwDQo+ID4gPiAr I2RlZmluZSBOV0xfRFNJX1BLVF9DT05UUk9MwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoDB4Mjg0DQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX1NFTkRfUEFDS0VUwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4Mjg4DQo+ID4gPiArI2RlZmluZSBO V0xfRFNJX1BLVF9TVEFUVVPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAweDI4Yw0KPiA+ID4gKyNkZWZpbmUgTldMX0RTSV9QS1RfRklGT19XUl9MRVZFTMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAweDI5MA0KPiA+ID4gKyNkZWZpbmUgTldMX0RTSV9QS1RfRklG T19SRF9MRVZFTMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDI5NA0KPiA+ID4gKyNkZWZp bmUgTldMX0RTSV9SWF9QQVlMT0FEwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgMHgyOTgNCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfUlhfUEtUX0hFQURFUsKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MjljDQo+ID4gPiArDQo+ID4gPiArLyogRFNJ IElSUSBoYW5kbGluZyAqLw0KPiA+ID4gKyNkZWZpbmUgTldMX0RTSV9JUlFfU1RBVFVTwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyYTANCj4gPiA+ICsjZGVmaW5l IE5XTF9EU0lfU01fTk9UX0lETEXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgQklUKDApDQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX1RYX1BLVF9ET05FwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCgxKQ0KPiA+ID4gKyNkZWZpbmUgTldMX0RT SV9EUEhZX0RJUkVDVElPTsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoMikN Cj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfVFhfRklGT19PVkZMV8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoEJJVCgzKQ0KPiA+ID4gKyNkZWZpbmUgTldMX0RTSV9UWF9GSUZPX1VE RkxXwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDQpDQo+ID4gPiArI2Rl ZmluZSBOV0xfRFNJX1JYX0ZJRk9fT1ZGTFfCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBCSVQoNSkNCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfUlhfRklGT19VREZMV8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCg2KQ0KPiA+ID4gKyNkZWZpbmUgTldMX0RT SV9SWF9QS1RfSERSX1JDVkTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBCSVQoNykNCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfUlhfUEtUX1BBWUxPQURfREFU QV9SQ1ZEwqDCoMKgwqDCoMKgwqBCSVQoOCkNCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfQlRBX1RJ TUVPVVTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDI5KQ0KPiA+ ID4gKyNkZWZpbmUgTldMX0RTSV9MUF9SWF9USU1FT1VUwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgQklUKDMwKQ0KPiA+ID4gKyNkZWZpbmUgTldMX0RTSV9IU19UWF9USU1FT1VU wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDMxKQ0KPiA+ID4gKw0KPiA+ ID4gKyNkZWZpbmUgTldMX0RTSV9JUlFfU1RBVFVTMsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAweDJhNA0KPiA+ID4gKyNkZWZpbmUgTldMX0RTSV9TSU5HTEVfQklUX0VD Q19FUlLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCgwKQ0KPiA+ID4gKyNkZWZpbmUgTldM X0RTSV9NVUxUSV9CSVRfRUNDX0VSUsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoMSkN Cj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfQ1JDX0VSUsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoMikNCj4gPiA+ICsNCj4g PiA+ICsjZGVmaW5lIE5XTF9EU0lfSVJRX01BU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgMHgyYTgNCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfU01fTk9UX0lE TEVfTUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCgwKQ0KPiA+ID4gKyNkZWZp bmUgTldMX0RTSV9UWF9QS1RfRE9ORV9NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg QklUKDEpDQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX0RQSFlfRElSRUNUSU9OX01BU0vCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBCSVQoMikNCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfVFhfRklGT19P VkZMV19NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoMykNCj4gPiA+ICsjZGVmaW5l IE5XTF9EU0lfVFhfRklGT19VREZMV19NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQo NCkNCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfUlhfRklGT19PVkZMV19NQVNLwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBCSVQoNSkNCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfUlhfRklGT19VREZM V19NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoNikNCj4gPiA+ICsjZGVmaW5lIE5X TF9EU0lfUlhfUEtUX0hEUl9SQ1ZEX01BU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDcpDQo+ ID4gPiArI2RlZmluZSBOV0xfRFNJX1JYX1BLVF9QQVlMT0FEX0RBVEFfUkNWRF9NQVNLwqDCoEJJ VCg4KQ0KPiA+ID4gKyNkZWZpbmUgTldMX0RTSV9CVEFfVElNRU9VVF9NQVNLwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgQklUKDI5KQ0KPiA+ID4gKyNkZWZpbmUgTldMX0RTSV9MUF9SWF9U SU1FT1VUX01BU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCgzMCkNCj4gPiA+ICsjZGVm aW5lIE5XTF9EU0lfSFNfVFhfVElNRU9VVF9NQVNLwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBC SVQoMzEpDQo+ID4gPiArDQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX0lSUV9NQVNLMsKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyYWMNCj4gPiA+ICsjZGVmaW5l IE5XTF9EU0lfU0lOR0xFX0JJVF9FQ0NfRVJSX01BU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoEJJVCgwKQ0KPiA+ID4gKyNkZWZpbmUgTldMX0RTSV9NVUxUSV9CSVRfRUNDX0VSUl9N QVNLwqDCoMKgwqDCoMKgwqDCoMKgQklUKDEpDQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX0NSQ19F UlJfTUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDIpDQo+ID4g PiArDQo+ID4gPiArLyoNCj4gPiA+ICsgKiBQS1RfQ09OVFJPTCBmb3JtYXQ6DQo+ID4gPiArICog WzE1OiAwXSAtIHdvcmQgY291bnQNCj4gPiA+ICsgKiBbMTc6MTZdIC0gdmlydHVhbCBjaGFubmVs DQo+ID4gPiArICogWzIzOjE4XSAtIGRhdGEgdHlwZQ0KPiA+ID4gKyAqIFsyNF3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgLSBMUCBvciBIUyBzZWxlY3QgKDAgLSBMUCwgMSAtIEhTKQ0KPiA+ID4gKyAq IFsyNV3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgLSBwZXJmb3JtIEJUQSBhZnRlciBwYWNrZXQgaXMg c2VudA0KPiA+ID4gKyAqIFsyNl3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgLSBwZXJmb3JtIEJUQSBv bmx5LCBubyBwYWNrZXQgdHgNCj4gPiA+ICsgKi8NCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfV0Mo eCnCoMKgwqDCoMKgwqDCoMKgwqDCoEZJRUxEX1BSRVAoR0VOTUFTSygxNSwgMCksICh4KSkNCj4g PiA+ICsjZGVmaW5lIE5XTF9EU0lfVFhfVkMoeCnCoMKgwqDCoMKgwqDCoEZJRUxEX1BSRVAoR0VO TUFTSygxNywgMTYpLCAoeCkpDQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX1RYX0RUKHgpwqDCoMKg wqDCoMKgwqBGSUVMRF9QUkVQKEdFTk1BU0soMjMsIDE4KSwgKHgpKQ0KPiA+ID4gKyNkZWZpbmUg TldMX0RTSV9IU19TRUwoeCnCoMKgwqDCoMKgwqBGSUVMRF9QUkVQKEdFTk1BU0soMjQsIDI0KSwg KHgpKQ0KPiA+ID4gKyNkZWZpbmUgTldMX0RTSV9CVEFfVFgoeCnCoMKgwqDCoMKgwqBGSUVMRF9Q UkVQKEdFTk1BU0soMjUsIDI1KSwgKHgpKQ0KPiA+ID4gKyNkZWZpbmUgTldMX0RTSV9CVEFfTk9f VFgoeCnCoMKgwqBGSUVMRF9QUkVQKEdFTk1BU0soMjYsIDI2KSwgKHgpKQ0KPiA+ID4gKw0KPiA+ ID4gKy8qDQo+ID4gPiArICogUlhfUEtUX0hFQURFUiBmb3JtYXQ6DQo+ID4gPiArICogWzE1OiAw XSAtIHdvcmQgY291bnQNCj4gPiA+ICsgKiBbMjE6MTZdIC0gZGF0YSB0eXBlDQo+ID4gPiArICog WzIzOjIyXSAtIHZpcnR1YWwgY2hhbm5lbA0KPiA+ID4gKyAqLw0KPiA+ID4gKyNkZWZpbmUgTldM X0RTSV9SWF9EVCh4KcKgwqDCoMKgwqDCoMKgRklFTERfR0VUKEdFTk1BU0soMjEsIDE2KSwgKHgp KQ0KPiA+ID4gKyNkZWZpbmUgTldMX0RTSV9SWF9WQyh4KcKgwqDCoMKgwqDCoMKgRklFTERfR0VU KEdFTk1BU0soMjMsIDIyKSwgKHgpKQ0KPiA+ID4gKw0KPiA+ID4gKy8qIERTSSBWaWRlbyBtb2Rl ICovDQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX1ZNX0JVUlNUX01PREVfV0lUSF9TWU5DX1BVTFNF U8KgwqDCoMKgwqDCoMKgwqDCoDANCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfVk1fTk9OX0JVUlNU X01PREVfV0lUSF9TWU5DX0VWRU5UU8KgwqDCoMKgwqBCSVQoMCkNCj4gPiA+ICsjZGVmaW5lIE5X TF9EU0lfVk1fQlVSU1RfTU9ERcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBCSVQoMSkNCj4gPiA+ICsNCj4gPiA+ICsvKiAqIERQSSBjb2xvciBjb2Rp bmcgKi8NCj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfRFBJXzE2X0JJVF81NjVfUEFDS0VEwqDCoDAN Cj4gPiA+ICsjZGVmaW5lIE5XTF9EU0lfRFBJXzE2X0JJVF81NjVfQUxJR05FRCAxDQo+ID4gPiAr I2RlZmluZSBOV0xfRFNJX0RQSV8xNl9CSVRfNTY1X1NISUZURUQgMg0KPiA+ID4gKyNkZWZpbmUg TldMX0RTSV9EUElfMThfQklUX1BBQ0tFRMKgwqDCoMKgwqDCoDMNCj4gPiA+ICsjZGVmaW5lIE5X TF9EU0lfRFBJXzE4X0JJVF9BTElHTkVEwqDCoMKgwqDCoDQNCj4gPiA+ICsjZGVmaW5lIE5XTF9E U0lfRFBJXzI0X0JJVMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgNQ0KPiA+ID4gKw0KPiA+ID4g Ky8qICogRFBJIFBpeGVsIGZvcm1hdCAqLw0KPiA+ID4gKyNkZWZpbmUgTldMX0RTSV9QSVhFTF9G T1JNQVRfMTbCoMKgMA0KPiA+ID4gKyNkZWZpbmUgTldMX0RTSV9QSVhFTF9GT1JNQVRfMTjCoMKg QklUKDApDQo+ID4gPiArI2RlZmluZSBOV0xfRFNJX1BJWEVMX0ZPUk1BVF8xOEwgQklUKDEpDQo+ ID4gPiArI2RlZmluZSBOV0xfRFNJX1BJWEVMX0ZPUk1BVF8yNMKgwqAoQklUKDApIHwgQklUKDEp KQ0KPiA+ID4gKw0KPiA+ID4gKyNlbmRpZiAvKiBfX05XTF9EU0lfSF9fICovDQo+ID4gPiAtLQ0K PiA+ID4gMi4yMy4wDQo+ID4gPiANCj4gPiA+IA0KPiA+IEkga25vdyBpdCdzIGEgbG90IG9mIGlu Zm9ybWF0aW9uIGhlcmUgYW5kLCBzaW5jZSBJIGFscmVhZHkgaGF2ZQ0KPiA+IHRoYXQNCj4gPiBp bXBsZW1lbnRlZCBvbiBteSBzaWRlLCBkbyB5b3Ugd2FudCBtZSB0byBzZW5kIHRoZSBuZXh0IHJl dmlzaW9uLA0KPiA+IG9yIGRvDQo+ID4geW91IHdhbnQgdG8gaW1wbGVtZW50IGl0IG9uIHlvdXIg b3duPw0KPiBJJ20gZmluZSB3aXRoIG1ha2luZyAoYW5kIHRlc3RpbmcpIHRoZSBjaGFuZ2VzIGJ1 dCBpZiB5b3UgaGF2ZSBzb21lDQo+IGNvZGUNCj4gKGV2ZW4gYWdhaW5zdCBhbiBvbGRlciBkcml2 ZXIgdmVyc2lvbikgaSBjYW4gYm9ycm93IGZyb20gaW4gYSB0cmVlDQo+IHNvbWV3aGVyZSB5b3Ug Y2FuIGxpbmsgdG8gKG9yIHNlbmQgdmlhIG1haWwpIHRoYXQnZCBjZXJ0YWlubHkgc3BlZWQNCj4g dXANCj4gdGhpbmdzLg0KDQpTdXJlLiBJIGNhbiBzZW5kIHlvdSB3aGF0IEkgaGF2ZSwgYnV0IG15 IGxvY2FsIHZlcnNpb24gaXMgYmFzZWQgb24gdjMNCm9mIHRoaXMgcGF0Y2gtc2V0LiBTdGlsbCwg eW91IGNhbiBtYWtlIGFuIGlkZWEgb2YgaG93IHRoaW5ncyBzaG91bGQgYmUNCmRvbmUuDQpJIHdp bGwgc2VuZCB5b3UgaW4gcHJpdmF0ZSB0aGUgcGF0Y2hlcy4NCg0KQmVzdCByZWdhcmRzLA0KUm9i ZXJ0DQoNCj4gDQo+IENoZWVycywNCj4gwqAtLSBHdWlkbw0KPiANCj4gPiANCj4gPiANCj4gPiBC ZXN0IHJlZ2FyZHMsDQo+ID4gUm9iZXJ0