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=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,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 0D456C3A59F for ; Thu, 29 Aug 2019 09:40:35 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C46A3233A1 for ; Thu, 29 Aug 2019 09:40:34 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="K8j2isX7"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=nxp.com header.i=@nxp.com header.b="Brvth9cg" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C46A3233A1 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Content-ID:In-Reply-To: References:Message-ID:Date:Subject:To:From:Reply-To:Cc:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=s/q3AUkuj3E0lKj8wNlQyxMyR0kP1RIF+uqA2CGLGj4=; b=K8j2isX7OB0Izr lIuCkyaqckvJWo+Ugp1JfFyvDvMpE/5ZOxHGK9AEWT2+L+RpIHu5YVYpFRIYC1UI7GYW52JkGlwHF AxRmTVha/B2SdOXOFY90DF49XsDu+/vxj0SvMWa1nqe34VcPrQQ3Re9sOo64tlQ75UEBEqRiw7SNc /YCbJEWcfoqyhBDW2GvlS7DsVXU5ZRNtq7F8e9viOQKDHKJEA3DgEg8LhUSKqZWZRD/+uYTB0QwC5 P3PL9pADjQUyqGVV6688lEg9hzZh+EgcOOhZGMKRMKbCVSiXBqKPFmhy+DA9Xm6d5nw5cfFApHcWC E+2DMdW7vEZ3Tru5nV3g==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1i3Guw-0001gL-85; Thu, 29 Aug 2019 09:40:34 +0000 Received: from mail-eopbgr70053.outbound.protection.outlook.com ([40.107.7.53] helo=EUR04-HE1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1i3Guo-0001fp-Ug for linux-arm-kernel@lists.infradead.org; Thu, 29 Aug 2019 09:40:31 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ps2OKSEIUBVoTqyM+uaUGX4lvi9a1+z+jYQP+B1BNEIdzbQENhR4JHWS2kBpUrCqu3yh6OY0P1bDXyvdbPJqOH9lPGmlaDRu+9CuYFzB8s3+WQLsklGH9NcJrdNpDZFlF9Lhz7vH2mwQ3kSlg6fRkb4dMrqaVFPEyFCEzmbQPlemtp7QU+6lVhPoXTqRG+6PBK5sN4PEbVzMF67gfq8vG6egS+P7QVjulxb1UmS7GIGj6fJYKz5Gtbo755JaCfPcChjreuSieGDc3299i3ezPjJoXQbz106PgG/UtMdN/UmuKzPvMuyyzPD6/OgCeVlHzSC2DxoBah3Zlz2MlW9O2Q== 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=AfStXhfmKOJUYYcrZfehqLl3gbF1VXATjyIW9v5RMJ8=; b=GQwuz4l8kUWRTscIsOJFxTwweBv7aj+VIqMadq3eZYTlppR+yqIrE950KmzrSDmU8/obh9mOnpnaRkTmfByydqeqHdRTQZkN/qn+nV7L+uEprZqHaLJO3bKHxkbJzluWs04xPNdnkdX9WeMYpZ4mfZf7h1/6RIcaV/WjREvaxMcVx/82t94/a4Ixy3xqkT1atPUlNiRRZHvOX5hb7KOvrh9W+q+1y/JDBrcRHur+KCBWLiF5kBD2PrPeZLPjL/BCFD66p9Bd5HIK5LKhRr7mDFrB3u0FRAEa8AXczva8dRIVgyn0CC/T8q7bGvYOrvUdD/xC2+2Ht1glPIXMvjiVIg== 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=AfStXhfmKOJUYYcrZfehqLl3gbF1VXATjyIW9v5RMJ8=; b=Brvth9cg3jo3t7ZW1O6IQl/nAlyRnC2pnp2HC+6O+pGEuvc4vNcsBSHnOrUesmXUskMPBmRjTIrF1Hg/OEXkuFDrxQb9Tg+WXpGRqLrp2d3WhZkePB+g9qVsXHUniw72COOJ+3szHv102RnAylo4s9y9xKPI5/48WsoRbtzDYpU= Received: from DB8PR04MB6715.eurprd04.prod.outlook.com (20.179.251.14) by DB8PR04MB7066.eurprd04.prod.outlook.com (52.135.63.78) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2199.21; Thu, 29 Aug 2019 09:40:20 +0000 Received: from DB8PR04MB6715.eurprd04.prod.outlook.com ([fe80::b0ab:d127:ca27:e1fa]) by DB8PR04MB6715.eurprd04.prod.outlook.com ([fe80::b0ab:d127:ca27:e1fa%7]) with mapi id 15.20.2199.021; Thu, 29 Aug 2019 09:40:20 +0000 From: Robert Chiras To: dl-linux-imx , "narmstrong@baylibre.com" , "robh+dt@kernel.org" , "linux-kernel@vger.kernel.org" , "lee.jones@linaro.org" , "devicetree@vger.kernel.org" , "agx@sigxcpu.org" , "festevam@gmail.com" , "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" , "sam@ravnborg.org" , "airlied@linux.ie" , "Laurent.pinchart@ideasonboard.com" , "kernel@pengutronix.de" , "arnd@arndb.de" , "s.hauer@pengutronix.de" Subject: Re: [EXT] [PATCH v3 2/2] drm/bridge: Add NWL MIPI DSI host controller support Thread-Topic: [EXT] [PATCH v3 2/2] drm/bridge: Add NWL MIPI DSI host controller support Thread-Index: AQHVWNaTAvmbOg/Q4kSx8LbxMJJTHacR6dqA Date: Thu, 29 Aug 2019 09:40:20 +0000 Message-ID: <1567071617.3209.127.camel@nxp.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: Evolution 3.18.5.2-0ubuntu3.2 authentication-results: spf=none (sender IP is ) smtp.mailfrom=robert.chiras@nxp.com; x-originating-ip: [89.37.124.34] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 0ea691ef-5e1b-429b-504d-08d72c64e8c4 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020); SRVR:DB8PR04MB7066; x-ms-traffictypediagnostic: DB8PR04MB7066: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8882; x-forefront-prvs: 0144B30E41 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(39860400002)(346002)(396003)(136003)(366004)(376002)(199004)(189003)(30864003)(53936002)(102836004)(25786009)(64756008)(2501003)(66446008)(3846002)(91956017)(6246003)(66946007)(76116006)(229853002)(53946003)(6116002)(66556008)(316002)(66476007)(99286004)(81156014)(305945005)(110136005)(6512007)(81166006)(86362001)(8676002)(7736002)(2201001)(11346002)(446003)(71200400001)(7416002)(6436002)(8936002)(478600001)(36756003)(66574012)(76176011)(6486002)(66066001)(6506007)(5660300002)(186003)(103116003)(5024004)(256004)(2616005)(476003)(14444005)(2906002)(71190400001)(44832011)(50226002)(14454004)(26005)(486006)(99106002)(921003)(1121003)(579004)(559001)(569006); DIR:OUT; SFP:1101; SCL:1; SRVR:DB8PR04MB7066; H:DB8PR04MB6715.eurprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: jkTBqU2G2yKKsiuAkjA1pWc0vVquJcfNxoFEUz4rn4C1oOBp/T76FXQsXGAwAigvNa3grD7qHgcaDee0Zs0lDTosrUc3/DcKJexcx5vlI+wKEBQ5J5pNjTdt115i3zlh/1MJlArxkDhoNY2ZTmurT+Fg/8ReI42gmQsegdxH73yKx57yJJtRWKB+co2pxtiss6EZ1+WfBVmbFVXEonNiXR8hNC0GWAxh9C5gAKVXXFbNSaK1IlSXeYYq8ugBklsd3QzQpyupuO2dCSC5B0U2yzXCDBBx2KQLP7DMRmEDoXuYmkySwpTN5iiSM27LiesQ/fLMXyYHJ8f52z476cpswbvBk1EQUD3cnVrm4WfrZTxbhxKMX0IW/Oo9UOQjan+GfKcBfSTLDejwxEhKSMd0h/6CvYj2JrYTYSRAVgorKlo= Content-ID: <4E08A3ADA2389B45BB88346ACEC23918@eurprd04.prod.outlook.com> MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0ea691ef-5e1b-429b-504d-08d72c64e8c4 X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Aug 2019 09:40:20.7497 (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: fHEWZl6BlAoxz6JOC3pBAwP+1dJZgwc1M4lFpm/wV81FvMl9mCqYL9+KKhy+4eU8y4OHWymOyrdKIVueSp75Eg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB7066 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190829_024027_468765_ED62BA74 X-CRM114-Status: GOOD ( 20.95 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgR3VpZG8sDQoNCk9uZSBtb3JlIHRoaW5nIGZvciB5b3UgdG8gYWRkIGluIHY0LCBzZWUgaW5s aW5lLg0KDQpPbiBKbywgMjAxOS0wOC0yMiBhdCAxMjo0NCArMDIwMCwgR3VpZG8gR8O8bnRoZXIg d3JvdGU6DQo+IFRoaXMgYWRkcyBpbml0aWFsIHN1cHBvcnQgZm9yIHRoZSBOV0wgTUlQSSBEU0kg SG9zdCBjb250cm9sbGVyIGZvdW5kDQo+IG9uDQo+IGkuTVg4IFNvQ3MuDQo+IA0KPiBJdCBhZGRz IHN1cHBvcnQgZm9yIHRoZSBpLk1YOE1RIGJ1dCB0aGUgc2FtZSBJUCBjYW4gYmUgZm91bmQgb24N Cj4gZS5nLiB0aGUgaS5NWDhRWFAuDQo+IA0KPiBJdCBoYXMgYmVlbiB0ZXN0ZWQgb24gdGhlIExp YnJlbSA1IGRldmtpdCB1c2luZyBteHNmYi4NCj4gDQo+IFNpZ25lZC1vZmYtYnk6IEd1aWRvIEfD vG50aGVyIDxhZ3hAc2lneGNwdS5vcmc+DQo+IENvLWRldmVsb3BlZC1ieTogUm9iZXJ0IENoaXJh cyA8cm9iZXJ0LmNoaXJhc0BueHAuY29tPg0KPiAtLS0NCj4gwqBkcml2ZXJzL2dwdS9kcm0vYnJp ZGdlL0tjb25maWfCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqDCoDIgKw0KPiDCoGRyaXZlcnMv Z3B1L2RybS9icmlkZ2UvTWFrZWZpbGXCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgwqAxICsNCj4g wqBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kvS2NvbmZpZ8KgwqDCoHzCoMKgMTYgKw0K PiDCoGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRzaS9NYWtlZmlsZcKgwqB8wqDCoMKgNCAr DQo+IMKgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpL253bC1kcnYuYyB8IDUwMSArKysr KysrKysrKysrKysrDQo+IMKgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpL253bC1kcnYu aCB8wqDCoDY1ICsrKw0KPiDCoGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRzaS9ud2wtZHNp LmMgfCA3MDANCj4gKysrKysrKysrKysrKysrKysrKysrKysNCj4gwqBkcml2ZXJzL2dwdS9kcm0v YnJpZGdlL253bC1kc2kvbndsLWRzaS5oIHwgMTEyICsrKysNCj4gwqA4IGZpbGVzIGNoYW5nZWQs IDE0MDEgaW5zZXJ0aW9ucygrKQ0KPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vYnJpZGdlL253bC1kc2kvS2NvbmZpZw0KPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vYnJpZGdlL253bC1kc2kvTWFrZWZpbGUNCj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpL253bC1kcnYuYw0KPiDCoGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kvbndsLWRydi5oDQo+IMKgY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRzaS9ud2wtZHNpLmMN Cj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpL253 bC1kc2kuaA0KPiANCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZp Zw0KPiBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZw0KPiBpbmRleCAxY2M5ZjUwMmMx ZjIuLjc5ODBiNWMyMTU2ZiAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9L Y29uZmlnDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZw0KPiBAQCAtMTU0 LDYgKzE1NCw4IEBAIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9LY29u ZmlnIg0KPiANCj4gwqBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYWR2NzUxMS9LY29u ZmlnIg0KPiANCj4gK3NvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpL0tjb25m aWciDQo+ICsNCj4gwqBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc3lub3BzeXMvS2Nv bmZpZyINCj4gDQo+IMKgZW5kbWVudQ0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2Jy aWRnZS9NYWtlZmlsZQ0KPiBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUNCj4gaW5k ZXggNDkzNGZjZjVhNmY4Li5kOWY2YzBmNzc1OTIgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9icmlkZ2UvTWFrZWZpbGUNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtl ZmlsZQ0KPiBAQCAtMTYsNCArMTYsNSBAQCBvYmotJChDT05GSUdfRFJNX0FOQUxPR0lYX0RQKSAr PSBhbmFsb2dpeC8NCj4gwqBvYmotJChDT05GSUdfRFJNX0kyQ19BRFY3NTExKSArPSBhZHY3NTEx Lw0KPiDCoG9iai0kKENPTkZJR19EUk1fVElfU042NURTSTg2KSArPSB0aS1zbjY1ZHNpODYubw0K PiDCoG9iai0kKENPTkZJR19EUk1fVElfVEZQNDEwKSArPSB0aS10ZnA0MTAubw0KPiArb2JqLSQo Q09ORklHX0RSTV9OV0xfTUlQSV9EU0kpICs9IG53bC1kc2kvDQo+IMKgb2JqLXkgKz0gc3lub3Bz eXMvDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kvS2NvbmZp Zw0KPiBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRzaS9LY29uZmlnDQo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uM2IxNTdhOWYyMjI5DQo+IC0tLSAv ZGV2L251bGwNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpL0tjb25maWcN Cj4gQEAgLTAsMCArMSwxNiBAQA0KPiArY29uZmlnIERSTV9OV0xfTUlQSV9EU0kNCj4gK8KgwqDC oMKgwqDCoMKgdHJpc3RhdGUgIlN1cHBvcnQgZm9yIE5vcnRod2VzdCBMb2dpYyBNSVBJIERTSSBI b3N0DQo+IGNvbnRyb2xsZXIiDQo+ICvCoMKgwqDCoMKgwqDCoGRlcGVuZHMgb24gRFJNDQo+ICvC oMKgwqDCoMKgwqDCoGRlcGVuZHMgb24gQ09NTU9OX0NMSw0KPiArwqDCoMKgwqDCoMKgwqBkZXBl bmRzIG9uIE9GICYmIEhBU19JT01FTQ0KPiArwqDCoMKgwqDCoMKgwqBzZWxlY3QgRFJNX0tNU19I RUxQRVINCj4gK8KgwqDCoMKgwqDCoMKgc2VsZWN0IERSTV9NSVBJX0RTSQ0KPiArwqDCoMKgwqDC oMKgwqBzZWxlY3QgRFJNX1BBTkVMX0JSSURHRQ0KPiArwqDCoMKgwqDCoMKgwqBzZWxlY3QgR0VO RVJJQ19QSFlfTUlQSV9EUEhZDQo+ICvCoMKgwqDCoMKgwqDCoHNlbGVjdCBNRkRfU1lTQ09ODQo+ ICvCoMKgwqDCoMKgwqDCoHNlbGVjdCBNVUxUSVBMRVhFUg0KPiArwqDCoMKgwqDCoMKgwqBzZWxl Y3QgUkVHTUFQX01NSU8NCj4gK8KgwqDCoMKgwqDCoMKgaGVscA0KPiArwqDCoMKgwqDCoMKgwqDC oMKgVGhpcyBlbmFibGVzIHRoZSBOb3J0aHdlc3QgTG9naWMgTUlQSSBEU0kgSG9zdCBjb250cm9s bGVyDQo+IGFzDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqBmb3IgZXhhbXBsZSBmb3VuZCBvbiBOWFAn cyBpLk1YOCBQcm9jZXNzb3JzLg0KPiArDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v YnJpZGdlL253bC1kc2kvTWFrZWZpbGUNCj4gYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1k c2kvTWFrZWZpbGUNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAw Li44MDRiYWYyZjE5MTYNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v YnJpZGdlL253bC1kc2kvTWFrZWZpbGUNCj4gQEAgLTAsMCArMSw0IEBADQo+ICsjIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+ICtud2wtbWlwaS1kc2kteSA6PSBud2wtZHJ2Lm8g bndsLWRzaS5vDQo+ICtvYmotJChDT05GSUdfRFJNX05XTF9NSVBJX0RTSSkgKz0gbndsLW1pcGkt ZHNpLm8NCj4gK2hlYWRlci10ZXN0LXkgKz0gbndsLWRydi5oIG53bC1kc2kuaA0KPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpL253bC1kcnYuYw0KPiBiL2RyaXZl cnMvZ3B1L2RybS9icmlkZ2UvbndsLWRzaS9ud2wtZHJ2LmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi5lNDU3NDM4NzM4YzANCj4gLS0tIC9kZXYvbnVsbA0K PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kvbndsLWRydi5jDQo+IEBAIC0w LDAgKzEsNTAxIEBADQo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsNCj4g Ky8qDQo+ICsgKiBpLk1YOCBOV0wgTUlQSSBEU0kgaG9zdCBkcml2ZXINCj4gKyAqDQo+ICsgKiBD b3B5cmlnaHQgKEMpIDIwMTcgTlhQDQo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTkgUHVyaXNtIFNQ Qw0KPiArICovDQo+ICsNCj4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4NCj4gKyNpbmNsdWRlIDxs aW51eC9pcnEuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+DQo+ICsjaW5jbHVk ZSA8bGludXgvbW9kdWxlLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvbXV4L2NvbnN1bWVyLmg+DQo+ ICsjaW5jbHVkZSA8bGludXgvb2YuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5o Pg0KPiArI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9yZXNl dC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3N5 c19zb2MuaD4NCj4gKw0KPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPg0KPiAr I2luY2x1ZGUgPGRybS9kcm1fb2YuaD4NCj4gKyNpbmNsdWRlIDxkcm0vZHJtX3ByaW50Lmg+DQo+ ICsjaW5jbHVkZSA8ZHJtL2RybV9wcm9iZV9oZWxwZXIuaD4NCj4gKw0KPiArI2luY2x1ZGUgIm53 bC1kcnYuaCINCj4gKyNpbmNsdWRlICJud2wtZHNpLmgiDQo+ICsNCj4gKyNkZWZpbmUgRFJWX05B TUUgIm53bC1kc2kiDQo+ICsNCj4gKy8qIFBvc3NpYmxlIHBsYXRmb3JtIHNwZWNpZmljIGNsb2Nr cyAqLw0KPiArI2RlZmluZSBOV0xfRFNJX0NMS19DT1JFwqDCoMKgwqDCoMKgwqAiY29yZSINCj4g Kw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIG53bF9kc2lfcmVnbWFwX2Nv bmZpZyA9IHsNCj4gK8KgwqDCoMKgwqDCoMKgLnJlZ19iaXRzID0gMTYsDQo+ICvCoMKgwqDCoMKg wqDCoC52YWxfYml0cyA9IDMyLA0KPiArwqDCoMKgwqDCoMKgwqAucmVnX3N0cmlkZSA9IDQsDQo+ ICvCoMKgwqDCoMKgwqDCoC5tYXhfcmVnaXN0ZXIgPSBOV0xfRFNJX0lSUV9NQVNLMiwNCj4gK8Kg wqDCoMKgwqDCoMKgLm5hbWUgPSBEUlZfTkFNRSwNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBud2xf ZHNpX3BsYXRmb3JtX2RhdGEgew0KPiArwqDCoMKgwqDCoMKgwqBpbnQgKCpwb3dlcm9uKShzdHJ1 Y3QgbndsX2RzaSAqZHNpKTsNCj4gK8KgwqDCoMKgwqDCoMKgaW50ICgqcG93ZXJvZmYpKHN0cnVj dCBud2xfZHNpICpkc2kpOw0KPiArwqDCoMKgwqDCoMKgwqBpbnQgKCpzZWxlY3RfaW5wdXQpKHN0 cnVjdCBud2xfZHNpICpkc2kpOw0KPiArwqDCoMKgwqDCoMKgwqBpbnQgKCpkZXNlbGVjdF9pbnB1 dCkoc3RydWN0IG53bF9kc2kgKmRzaSk7DQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBud2xfZHNp X3BsYXRfY2xrX2NvbmZpZw0KPiBjbGtfY29uZmlnW05XTF9EU0lfTUFYX1BMQVRGT1JNX0NMT0NL U107DQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBud2xfZHNpICpicmlkZ2Vf dG9fZHNpKHN0cnVjdCBkcm1fYnJpZGdlDQo+ICpicmlkZ2UpDQo+ICt7DQo+ICvCoMKgwqDCoMKg wqDCoHJldHVybiBjb250YWluZXJfb2YoYnJpZGdlLCBzdHJ1Y3QgbndsX2RzaSwgYnJpZGdlKTsN Cj4gK30NCj4gKw0KPiArc3RhdGljIGludCBud2xfZHNpX3NldF9wbGF0Zm9ybV9jbG9ja3Moc3Ry dWN0IG53bF9kc2kgKmRzaSwgYm9vbA0KPiBlbmFibGUpDQo+ICt7DQo+ICvCoMKgwqDCoMKgwqDC oHN0cnVjdCBkZXZpY2UgKmRldiA9IGRzaS0+ZGV2Ow0KPiArwqDCoMKgwqDCoMKgwqBjb25zdCBj aGFyICppZDsNCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGNsayAqY2xrOw0KPiArwqDCoMKgwqDC oMKgwqBzaXplX3QgaTsNCj4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQgbG9uZyByYXRlOw0KPiAr wqDCoMKgwqDCoMKgwqBpbnQgcmV0LCByZXN1bHQgPSAwOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDC oERSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIiVzIHBsYXRmb3JtIGNsb2Nrc1xuIiwNCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZW5h YmxlID8gImVuYWJsaW5nIiA6ICJkaXNhYmxpbmciKTsNCj4gK8KgwqDCoMKgwqDCoMKgZm9yIChp ID0gMDsgaSA8IEFSUkFZX1NJWkUoZHNpLT5wZGF0YS0+Y2xrX2NvbmZpZyk7IGkrKykgew0KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFkc2ktPmNsa19jb25maWdbaV0ucHJl c2VudCkNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBj b250aW51ZTsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlkID0gZHNpLT5jbGtf Y29uZmlnW2ldLmlkOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2xrID0gZHNp LT5jbGtfY29uZmlnW2ldLmNsazsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgaWYgKGVuYWJsZSkgew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShjbGspOw0KPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKSB7DQo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oERSTV9ERVZfRVJST1IoZGV2LA0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IkZhaWxlZCB0byBlbmFibGUgJXMNCj4gY2xrOiAlZFxuIiwNCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGlkLCByZXQpOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXN1bHQgPSByZXN1bHQgPzogcmV0 Ow0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0NCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByYXRlID0gY2xr X2dldF9yYXRlKGNsayk7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiRW5hYmxlZCAlcyBjbGsNCj4gQCVs dSBIelxuIiwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZCwgcmF0ZSk7DQo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9IGVsc2Ugew0KPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNsa19kaXNhYmxlX3VucHJlcGFyZShj bGspOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERS TV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIkRpc2FibGVkICVzDQo+IGNsa1xuIiwgaWQpOw0KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQ0KPiArwqDCoMKgwqDCoMKgwqB9DQo+ICsN Cj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHJlc3VsdDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlu dCBud2xfZHNpX3BsYXRfZW5hYmxlKHN0cnVjdCBud2xfZHNpICpkc2kpDQo+ICt7DQo+ICvCoMKg wqDCoMKgwqDCoHN0cnVjdCBkZXZpY2UgKmRldiA9IGRzaS0+ZGV2Ow0KPiArwqDCoMKgwqDCoMKg wqBpbnQgcmV0Ow0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoGlmIChkc2ktPnBkYXRhLT5zZWxlY3Rf aW5wdXQpDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkc2ktPnBkYXRhLT5zZWxl Y3RfaW5wdXQoZHNpKTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqByZXQgPSBud2xfZHNpX3NldF9w bGF0Zm9ybV9jbG9ja3MoZHNpLCB0cnVlKTsNCj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCA8IDAp DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Ow0KPiArDQo+ICvC oMKgwqDCoMKgwqDCoHJldCA9IGRzaS0+cGRhdGEtPnBvd2Vyb24oZHNpKTsNCj4gK8KgwqDCoMKg wqDCoMKgaWYgKHJldCA8IDApDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1f REVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBwb3dlciBvbiBEU0k6ICVkXG4iLA0KPiByZXQpOw0K PiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBu d2xfZHNpX3BsYXRfZGlzYWJsZShzdHJ1Y3QgbndsX2RzaSAqZHNpKQ0KPiArew0KPiArwqDCoMKg wqDCoMKgwqBkc2ktPnBkYXRhLT5wb3dlcm9mZihkc2kpOw0KPiArwqDCoMKgwqDCoMKgwqBud2xf ZHNpX3NldF9wbGF0Zm9ybV9jbG9ja3MoZHNpLCBmYWxzZSk7DQo+ICvCoMKgwqDCoMKgwqDCoGlm IChkc2ktPnBkYXRhLT5kZXNlbGVjdF9pbnB1dCkNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGRzaS0+cGRhdGEtPmRlc2VsZWN0X2lucHV0KGRzaSk7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyB2b2lkIG53bF9kc2lfYnJpZGdlX2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRn ZSkNCj4gK3sNCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG53bF9kc2kgKmRzaSA9IGJyaWRnZV90 b19kc2koYnJpZGdlKTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBud2xfZHNpX2Rpc2FibGUoZHNp KTsNCj4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV9wbGF0X2Rpc2FibGUoZHNpKTsNCj4gK8KgwqDC oMKgwqDCoMKgcG1fcnVudGltZV9wdXQoZHNpLT5kZXYpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg aW50IG53bF9kc2lfZ2V0X2RwaHlfcGFyYW1zKHN0cnVjdCBud2xfZHNpICpkc2ksDQo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlDQo+ICptb2RlLA0KPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB1bmlvbiBwaHlfY29uZmlndXJlX29wdHMNCj4gKnBoeV9vcHRzKQ0KPiArew0KPiArwqDC oMKgwqDCoMKgwqB1bnNpZ25lZCBsb25nIHJhdGU7DQo+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7 DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgaWYgKGRzaS0+bGFuZXMgPCAxIHx8IGRzaS0+bGFuZXMg PiA0KQ0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7DQo+ ICsNCj4gK8KgwqDCoMKgwqDCoMKgLyoNCj4gK8KgwqDCoMKgwqDCoMKgwqAqIFNvIGZhciB0aGUg RFBIWSBzcGVjIG1pbmltYWwgdGltaW5ncyB3b3JrIGZvciBib3RoIG1peGVsDQo+ICvCoMKgwqDC oMKgwqDCoMKgKiBkcGh5IGFuZCBud2wgZHNpIGhvc3QNCj4gK8KgwqDCoMKgwqDCoMKgwqAqLw0K PiArwqDCoMKgwqDCoMKgwqByZXQgPSBwaHlfbWlwaV9kcGh5X2dldF9kZWZhdWx0X2NvbmZpZygN Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1vZGUtPmNydGNfY2xvY2sgKiAxMDAw LA0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbWlwaV9kc2lfcGl4ZWxfZm9ybWF0 X3RvX2JwcChkc2ktPmZvcm1hdCksIGRzaS0NCj4gPmxhbmVzLA0KPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgJnBoeV9vcHRzLT5taXBpX2RwaHkpOw0KPiArwqDCoMKgwqDCoMKgwqBp ZiAocmV0IDwgMCkNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7 DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgcmF0ZSA9IGNsa19nZXRfcmF0ZShkc2ktPnR4X2VzY19j bGspOw0KPiArwqDCoMKgwqDCoMKgwqBEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgIkxQ IGNsayBpcyBAJWx1IEh6XG4iLCByYXRlKTsNCj4gK8KgwqDCoMKgwqDCoMKgcGh5X29wdHMtPm1p cGlfZHBoeS5scF9jbGtfcmF0ZSA9IHJhdGU7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJu IDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBib29sIG53bF9kc2lfYnJpZGdlX21vZGVfZml4dXAo c3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29uc3Qgc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUNCj4gKm1vZGUsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVj dCBkcm1fZGlzcGxheV9tb2RlDQo+ICphZGp1c3RlZF9tb2RlKQ0KPiArew0KPiArwqDCoMKgwqDC oMKgwqAvKiBBdCBsZWFzdCBMQ0RJRiArIE5XTCBuZWVkcyBhY3RpdmUgaGlnaCBzeW5jICovDQo+ ICvCoMKgwqDCoMKgwqDCoGFkanVzdGVkX21vZGUtPmZsYWdzIHw9IChEUk1fTU9ERV9GTEFHX1BI U1lOQyB8DQo+IERSTV9NT0RFX0ZMQUdfUFZTWU5DKTsNCj4gK8KgwqDCoMKgwqDCoMKgYWRqdXN0 ZWRfbW9kZS0+ZmxhZ3MgJj0gfihEUk1fTU9ERV9GTEFHX05IU1lOQyB8DQo+IERSTV9NT0RFX0ZM QUdfTlZTWU5DKTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gdHJ1ZTsNCj4gK30NCj4g Kw0KPiArc3RhdGljIGVudW0gZHJtX21vZGVfc3RhdHVzDQo+ICtud2xfZHNpX2JyaWRnZV9tb2Rl X3ZhbGlkKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICptb2RlKQ0KPiArew0KPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbndsX2RzaSAqZHNpID0g YnJpZGdlX3RvX2RzaShicmlkZ2UpOw0KPiArwqDCoMKgwqDCoMKgwqBpbnQgYnBwID0gbWlwaV9k c2lfcGl4ZWxfZm9ybWF0X3RvX2JwcChkc2ktPmZvcm1hdCk7DQo+ICsNCj4gK8KgwqDCoMKgwqDC oMKgaWYgKG1vZGUtPmNsb2NrICogYnBwID4gMTUwMDAwMDApDQo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXR1cm4gTU9ERV9DTE9DS19ISUdIOw0KPiArDQo+ICvCoMKgwqDCoMKg wqDCoGlmIChtb2RlLT5jbG9jayAqIGJwcCA8IDgwMDAwKQ0KPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0dXJuIE1PREVfQ0xPQ0tfTE9XOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDC oHJldHVybiBNT0RFX09LOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZA0KPiArbndsX2RzaV9i cmlkZ2VfbW9kZV9zZXQoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwNCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqbW9kZSwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkNCj4g K3sNCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG53bF9kc2kgKmRzaSA9IGJyaWRnZV90b19kc2ko YnJpZGdlKTsNCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRldmljZSAqZGV2ID0gZHNpLT5kZXY7 DQo+ICvCoMKgwqDCoMKgwqDCoHVuaW9uIHBoeV9jb25maWd1cmVfb3B0cyBuZXdfY2ZnOw0KPiAr wqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBsb25nIHBoeV9yZWZfcmF0ZTsNCj4gK8KgwqDCoMKgwqDC oMKgaW50IHJldDsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqByZXQgPSBud2xfZHNpX2dldF9kcGh5 X3BhcmFtcyhkc2ksIGFkanVzdGVkX21vZGUsICZuZXdfY2ZnKTsNCj4gK8KgwqDCoMKgwqDCoMKg aWYgKHJldCA8IDApDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47DQo+ ICsNCj4gK8KgwqDCoMKgwqDCoMKgLyoNCj4gK8KgwqDCoMKgwqDCoMKgwqAqIElmIGhzIGNsb2Nr IGlzIHVuY2hhbmdlZCwgd2UncmUgYWxsIGdvb2QgLSBhbGwgcGFyYW1ldGVycw0KPiBhcmUNCj4g K8KgwqDCoMKgwqDCoMKgwqAqIGRlcml2ZWQgZnJvbSBpdCBhdG0uDQo+ICvCoMKgwqDCoMKgwqDC oMKgKi8NCj4gK8KgwqDCoMKgwqDCoMKgaWYgKG5ld19jZmcubWlwaV9kcGh5LmhzX2Nsa19yYXRl ID09IGRzaS0NCj4gPnBoeV9jZmcubWlwaV9kcGh5LmhzX2Nsa19yYXRlKQ0KPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoHBoeV9y ZWZfcmF0ZSA9IGNsa19nZXRfcmF0ZShkc2ktPnBoeV9yZWZfY2xrKTsNCj4gK8KgwqDCoMKgwqDC oMKgRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiUEhZIGF0IHJlZiByYXRlOiAlbHVcbiIsDQo+ IHBoeV9yZWZfcmF0ZSk7DQo+ICvCoMKgwqDCoMKgwqDCoC8qIFNhdmUgdGhlIG5ldyBkZXNpcmVk IHBoeSBjb25maWcgKi8NCj4gK8KgwqDCoMKgwqDCoMKgbWVtY3B5KCZkc2ktPnBoeV9jZmcsICZu ZXdfY2ZnLCBzaXplb2YobmV3X2NmZykpOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoG1lbWNweSgm ZHNpLT5tb2RlLCBhZGp1c3RlZF9tb2RlLCBzaXplb2YoZHNpLT5tb2RlKSk7DQo+ICvCoMKgwqDC oMKgwqDCoGRybV9tb2RlX2RlYnVnX3ByaW50bW9kZWxpbmUoYWRqdXN0ZWRfbW9kZSk7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyB2b2lkIG53bF9kc2lfYnJpZGdlX3ByZV9lbmFibGUoc3RydWN0IGRy bV9icmlkZ2UgKmJyaWRnZSkNCj4gK3sNCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG53bF9kc2kg KmRzaSA9IGJyaWRnZV90b19kc2koYnJpZGdlKTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBwbV9y dW50aW1lX2dldF9zeW5jKGRzaS0+ZGV2KTsNCj4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV9wbGF0 X2VuYWJsZShkc2kpOw0KPiArwqDCoMKgwqDCoMKgwqBud2xfZHNpX2VuYWJsZShkc2kpOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgaW50IG53bF9kc2lfYnJpZGdlX2F0dGFjaChzdHJ1Y3QgZHJtX2Jy aWRnZSAqYnJpZGdlKQ0KPiArew0KPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbndsX2RzaSAqZHNp ID0gYnJpZGdlLT5kcml2ZXJfcHJpdmF0ZTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqByZXR1cm4g ZHJtX2JyaWRnZV9hdHRhY2goYnJpZGdlLT5lbmNvZGVyLCBkc2ktPnBhbmVsX2JyaWRnZSwNCj4g YnJpZGdlKTsNCkhhdmUgeW91IHRlc3RlZCB0aGlzIGFzIGEgbW9kdWxlPyBJIHRlc3RlZCB0aGlz IGFzIGJ1aWx0LWluIGFuZCBpdA0Kd29ya2VkLCBidXQgdG9kYXkgSSByYW4gYSB0ZXN0IHdpdGgg ZHJpdmVycyBhcyBtb2R1bGVzIGFuZCBpdCBmYWlscw0KaGVyZSwgc2luY2UgdGhlIHBhbmVsIGlz IG5vdCB5ZXQgcHJvYmVkIChoZW5jZSwgZHNpLT5wYW5lbF9icmlkZ2UgaXMNCk5VTEwpLiBIZXJl IGlzIG15IGRtZXNnOg0KW8KgwqDCoDExLjE0MTE3N10gbXhzZmIgMzAzMjAwMDAubGNkaWY6IENh bm5vdCBjb25uZWN0IGJyaWRnZTogLTIyDQpbwqDCoMKgMTEuMTYxMDYyXSBteHNmYjogcHJvYmUg b2YgMzAzMjAwMDAubGNkaWYgZmFpbGVkIHdpdGggZXJyb3IgLTIyDQouLi4NClvCoMKgwqAxMi40 MTY5NjRdIG53bC1kc2kgMzBhMDAwMDAubWlwaV9kc2k6IFtkcm06bndsX2RzaV9ob3N0X2F0dGFj aA0KW253bF9taXBpX2RzaV1dIGxhbmVzPTQsIGZvcm1hdD0weDAgZmxhZ3M9MHgxNQ0KWW91IGNh biBzZWUgdGhhdCB0aGUgcGFuZWwgYXR0YWNoZXMgbGF0ZXIgb24sIGJ1dCB0aGVyZSBpcyBubyBy ZXRyeQ0Kc2NlbmFyaW8gaGVyZS4NCg0KU28sIEkgdGhpbmsgeW91IHNob3VsZCBoYW5kbGUgdGhp cyBjYXNlIGhlcmUsIG90aGVyd2lzZSB0aGUgZHJpdmVyIHdpbGwNCmZhaWwgYXMgYSBtb2R1bGUu DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2JyaWRnZV9mdW5jcyBud2xf ZHNpX2JyaWRnZV9mdW5jcyA9IHsNCj4gK8KgwqDCoMKgwqDCoMKgLnByZV9lbmFibGUgPSBud2xf ZHNpX2JyaWRnZV9wcmVfZW5hYmxlLA0KPiArwqDCoMKgwqDCoMKgwqAuZGlzYWJsZcKgwqDCoMKg PSBud2xfZHNpX2JyaWRnZV9kaXNhYmxlLA0KPiArwqDCoMKgwqDCoMKgwqAubW9kZV9maXh1cCA9 IG53bF9kc2lfYnJpZGdlX21vZGVfZml4dXAsDQo+ICvCoMKgwqDCoMKgwqDCoC5tb2RlX3NldMKg wqDCoD0gbndsX2RzaV9icmlkZ2VfbW9kZV9zZXQsDQo+ICvCoMKgwqDCoMKgwqDCoC5tb2RlX3Zh bGlkID0gbndsX2RzaV9icmlkZ2VfbW9kZV92YWxpZCwNCj4gK8KgwqDCoMKgwqDCoMKgLmF0dGFj aMKgwqDCoMKgwqA9IG53bF9kc2lfYnJpZGdlX2F0dGFjaCwNCj4gK307DQo+ICsNCj4gK3N0YXRp YyBpbnQgbndsX2RzaV9wYXJzZV9kdChzdHJ1Y3QgbndsX2RzaSAqZHNpKQ0KPiArew0KPiArwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2 aWNlKGRzaS0+ZGV2KTsNCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGNsayAqY2xrOw0KPiArwqDC oMKgwqDCoMKgwqBjb25zdCBjaGFyICpjbGtfaWQ7DQo+ICvCoMKgwqDCoMKgwqDCoHZvaWQgX19p b21lbSAqYmFzZTsNCj4gK8KgwqDCoMKgwqDCoMKgaW50IGksIHJldDsNCj4gKw0KPiArwqDCoMKg wqDCoMKgwqBkc2ktPnBoeSA9IGRldm1fcGh5X2dldChkc2ktPmRldiwgImRwaHkiKTsNCj4gK8Kg wqDCoMKgwqDCoMKgaWYgKElTX0VSUihkc2ktPnBoeSkpIHsNCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldCA9IFBUUl9FUlIoZHNpLT5waHkpOw0KPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgaWYgKHJldCAhPSAtRVBST0JFX0RFRkVSKQ0KPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfRVJST1IoZHNpLT5kZXYs ICJDb3VsZCBub3QgZ2V0IFBIWToNCj4gJWRcbiIsIHJldCk7DQo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Ow0KPiArwqDCoMKgwqDCoMKgwqB9DQo+ICsNCj4gK8Kg wqDCoMKgwqDCoMKgLyogUGxhdGZvcm0gZGVwZW5kZW50IGNsb2NrcyAqLw0KPiArwqDCoMKgwqDC oMKgwqBtZW1jcHkoZHNpLT5jbGtfY29uZmlnLCBkc2ktPnBkYXRhLT5jbGtfY29uZmlnLA0KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNpemVvZihkc2ktPnBkYXRhLT5jbGtfY29uZmln KSk7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHNp LT5wZGF0YS0+Y2xrX2NvbmZpZyk7IGkrKykgew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgaWYgKCFkc2ktPmNsa19jb25maWdbaV0ucHJlc2VudCkNCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb250aW51ZTsNCj4gKw0KPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2xrX2lkID0gZHNpLT5jbGtfY29uZmlnW2ldLmlkOw0K PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2xrID0gZGV2bV9jbGtfZ2V0KGRzaS0+ ZGV2LCBjbGtfaWQpOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKElTX0VS UihjbGspKSB7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0ID0gUFRSX0VSUihjbGspOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gZ2V0ICVz DQo+IGNsb2NrOiAlZFxuIiwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2xrX2lkLCByZXQpOw0KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7 DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9DQo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgIlNldHVwIGNsayAl cyAocmF0ZToNCj4gJWx1KVxuIiwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNsa19pZCwgY2xrX2dldF9y YXRlKGNsaykpOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHNpLT5jbGtfY29u ZmlnW2ldLmNsayA9IGNsazsNCj4gK8KgwqDCoMKgwqDCoMKgfQ0KPiArDQo+ICvCoMKgwqDCoMKg wqDCoC8qIERTSSBjbG9ja3MgKi8NCj4gK8KgwqDCoMKgwqDCoMKgY2xrID0gZGV2bV9jbGtfZ2V0 KGRzaS0+ZGV2LCAicGh5X3JlZiIpOw0KPiArwqDCoMKgwqDCoMKgwqBpZiAoSVNfRVJSKGNsaykp IHsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IFBUUl9FUlIoY2xrKTsN Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfRVJST1IoZHNpLT5kZXYs ICJGYWlsZWQgdG8gZ2V0IHBoeV9yZWYgY2xvY2s6DQo+ICVkXG4iLA0KPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCk7DQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Ow0KPiArwqDCoMKgwqDCoMKg wqB9DQo+ICvCoMKgwqDCoMKgwqDCoGRzaS0+cGh5X3JlZl9jbGsgPSBjbGs7DQo+ICsNCj4gK8Kg wqDCoMKgwqDCoMKgY2xrID0gZGV2bV9jbGtfZ2V0KGRzaS0+ZGV2LCAicnhfZXNjIik7DQo+ICvC oMKgwqDCoMKgwqDCoGlmIChJU19FUlIoY2xrKSkgew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmV0ID0gUFRSX0VSUihjbGspOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkZhaWxlZCB0byBnZXQgcnhfZXNjIGNsb2Nr Og0KPiAlZFxuIiwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXQpOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIHJldDsNCj4gK8KgwqDCoMKgwqDCoMKgfQ0KPiArwqDCoMKgwqDCoMKgwqBkc2ktPnJ4 X2VzY19jbGsgPSBjbGs7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgY2xrID0gZGV2bV9jbGtfZ2V0 KGRzaS0+ZGV2LCAidHhfZXNjIik7DQo+ICvCoMKgwqDCoMKgwqDCoGlmIChJU19FUlIoY2xrKSkg ew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gUFRSX0VSUihjbGspOw0K PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJPUihkc2ktPmRldiwg IkZhaWxlZCB0byBnZXQgdHhfZXNjIGNsb2NrOg0KPiAlZFxuIiwNCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQpOw0KPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4gK8KgwqDCoMKgwqDCoMKg fQ0KPiArwqDCoMKgwqDCoMKgwqBkc2ktPnR4X2VzY19jbGsgPSBjbGs7DQo+ICsNCj4gK8KgwqDC oMKgwqDCoMKgZHNpLT5tdXggPSBkZXZtX211eF9jb250cm9sX2dldChkc2ktPmRldiwgTlVMTCk7 DQo+ICvCoMKgwqDCoMKgwqDCoGlmIChJU19FUlIoZHNpLT5tdXgpKSB7DQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBQVFJfRVJSKGRzaS0+bXV4KTsNCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyZXQgIT0gLUVQUk9CRV9ERUZFUikNCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0VSUk9SKGRz aS0+ZGV2LCAiRmFpbGVkIHRvIGdldCBtdXg6DQo+ICVkXG4iLCByZXQpOw0KPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4gK8KgwqDCoMKgwqDCoMKgfQ0KPiAr DQo+ICvCoMKgwqDCoMKgwqDCoGJhc2UgPSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVzb3VyY2Uo cGRldiwgMCk7DQo+ICvCoMKgwqDCoMKgwqDCoGlmIChJU19FUlIoYmFzZSkpDQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gUFRSX0VSUihiYXNlKTsNCj4gKw0KPiArwqDC oMKgwqDCoMKgwqBkc2ktPnJlZ21hcCA9DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBkZXZtX3JlZ21hcF9pbml0X21taW8oZHNpLT5kZXYsIGJhc2UsDQo+ICZud2xfZHNpX3JlZ21h cF9jb25maWcpOw0KPiArwqDCoMKgwqDCoMKgwqBpZiAoSVNfRVJSKGRzaS0+cmVnbWFwKSkgew0K PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0gUFRSX0VSUihkc2ktPnJlZ21h cCk7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0VSUk9SKGRzaS0+ ZGV2LCAiRmFpbGVkIHRvIGNyZWF0ZSBOV0wgRFNJDQo+IHJlZ21hcDogJWRcbiIsDQo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0 KTsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7DQo+ICvCoMKg wqDCoMKgwqDCoH0NCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBkc2ktPmlycSA9IHBsYXRmb3JtX2dl dF9pcnEocGRldiwgMCk7DQo+ICvCoMKgwqDCoMKgwqDCoGlmIChkc2ktPmlycSA8IDApIHsNCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJG YWlsZWQgdG8gZ2V0IGRldmljZSBJUlE6DQo+ICVkXG4iLA0KPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRzaS0+aXJxKTsNCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBkc2ktPmlycTsNCj4gK8KgwqDCoMKg wqDCoMKgfQ0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoGRzaS0+cnN0YyA9IGRldm1fcmVzZXRfY29u dHJvbF9hcnJheV9nZXQoZHNpLT5kZXYsIGZhbHNlLA0KPiB0cnVlKTsNCj4gK8KgwqDCoMKgwqDC oMKgaWYgKElTX0VSUihkc2ktPnJzdGMpKSB7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGdldCByZXNldHM6DQo+ICVs ZFxuIiwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBQVFJfRVJSKGRzaS0+cnN0YykpOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmV0dXJuIFBUUl9FUlIoZHNpLT5yc3RjKTsNCj4gK8KgwqDCoMKgwqDCoMKgfQ0K PiArDQo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50 IGlteDhtcV9kc2lfc2VsZWN0X2lucHV0KHN0cnVjdCBud2xfZHNpICpkc2kpDQo+ICt7DQo+ICvC oMKgwqDCoMKgwqDCoHN0cnVjdCBkZXZpY2Vfbm9kZSAqcmVtb3RlOw0KPiArwqDCoMKgwqDCoMKg wqB1MzIgdXNlX2Rjc3MgPSAxOw0KPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Ow0KPiArDQo+ICvC oMKgwqDCoMKgwqDCoHJlbW90ZSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfbm9kZShkc2ktPmRldi0+ b2Zfbm9kZSwgMCwgMCk7DQo+ICvCoMKgwqDCoMKgwqDCoGlmIChzdHJjbXAocmVtb3RlLT5uYW1l LCAibGNkaWYiKSA9PSAwKQ0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdXNlX2Rj c3MgPSAwOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoERSTV9ERVZfSU5GTyhkc2ktPmRldiwgIlVz aW5nICVzIGFzIGlucHV0IHNvdXJjZVxuIiwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAodXNlX2Rjc3MpID8gIkRDU1MiIDogIkxDRElGIik7DQo+ICsNCj4gK8Kg wqDCoMKgwqDCoMKgcmV0ID0gbXV4X2NvbnRyb2xfdHJ5X3NlbGVjdChkc2ktPm11eCwgdXNlX2Rj c3MpOw0KPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0IDwgMCkNCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoERSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8gc2VsZWN0IGlu cHV0Og0KPiAlZFxuIiwgcmV0KTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBvZl9ub2RlX3B1dChy ZW1vdGUpOw0KPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ICsNCj4g K3N0YXRpYyBpbnQgaW14OG1xX2RzaV9kZXNlbGVjdF9pbnB1dChzdHJ1Y3QgbndsX2RzaSAqZHNp KQ0KPiArew0KPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Ow0KPiArDQo+ICvCoMKgwqDCoMKgwqDC oHJldCA9IG11eF9jb250cm9sX2Rlc2VsZWN0KGRzaS0+bXV4KTsNCj4gK8KgwqDCoMKgwqDCoMKg aWYgKHJldCA8IDApDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0VS Uk9SKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGRlc2VsZWN0IGlucHV0Og0KPiAlZFxuIiwgcmV0KTsN Cj4gKw0KPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ICsNCj4gK3N0 YXRpYyBpbnQgaW14OG1xX2RzaV9wb3dlcm9uKHN0cnVjdCBud2xfZHNpICpkc2kpDQo+ICt7DQo+ ICvCoMKgwqDCoMKgwqDCoGludCByZXQgPSAwOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoC8qIG90 aGVyd2lzZSB0aGUgZGlzcGxheSBzdGF5cyBibGFuayAqLw0KPiArwqDCoMKgwqDCoMKgwqB1c2xl ZXBfcmFuZ2UoMjAwLCAzMDApOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoGlmIChkc2ktPnJzdGMp DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSByZXNldF9jb250cm9sX2Rl YXNzZXJ0KGRzaS0+cnN0Yyk7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4g K30NCj4gKw0KPiArc3RhdGljIGludCBpbXg4bXFfZHNpX3Bvd2Vyb2ZmKHN0cnVjdCBud2xfZHNp ICpkc2kpDQo+ICt7DQo+ICvCoMKgwqDCoMKgwqDCoGludCByZXQgPSAwOw0KPiArDQo+ICvCoMKg wqDCoMKgwqDCoGlmIChkc2ktPnF1aXJrcyAmIFNSQ19SRVNFVF9RVUlSSykNCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAwOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoGlm IChkc2ktPnJzdGMpDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSByZXNl dF9jb250cm9sX2Fzc2VydChkc2ktPnJzdGMpOw0KPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0 Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9icmlkZ2VfdGltaW5ncyBu d2xfZHNpX3RpbWluZ3MgPSB7DQo+ICvCoMKgwqDCoMKgwqDCoC5pbnB1dF9idXNfZmxhZ3MgPSBE Uk1fQlVTX0ZMQUdfREVfTE9XLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBu d2xfZHNpX3BsYXRmb3JtX2RhdGEgaW14OG1xX2RldiA9IHsNCj4gK8KgwqDCoMKgwqDCoMKgLnBv d2Vyb24gPSAmaW14OG1xX2RzaV9wb3dlcm9uLA0KPiArwqDCoMKgwqDCoMKgwqAucG93ZXJvZmYg PSAmaW14OG1xX2RzaV9wb3dlcm9mZiwNCj4gK8KgwqDCoMKgwqDCoMKgLnNlbGVjdF9pbnB1dCA9 ICZpbXg4bXFfZHNpX3NlbGVjdF9pbnB1dCwNCj4gK8KgwqDCoMKgwqDCoMKgLmRlc2VsZWN0X2lu cHV0ID0gJmlteDhtcV9kc2lfZGVzZWxlY3RfaW5wdXQsDQo+ICvCoMKgwqDCoMKgwqDCoC5jbGtf Y29uZmlnID0gew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeyAuaWQgPSBOV0xf RFNJX0NMS19DT1JFLCAucHJlc2VudCA9IHRydWUgfSwNCj4gK8KgwqDCoMKgwqDCoMKgfSwNCj4g K307DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG53bF9kc2lfZHRf aWRzW10gPSB7DQo+ICvCoMKgwqDCoMKgwqDCoHsgLmNvbXBhdGlibGUgPSAiZnNsLGlteDhtcS1u d2wtZHNpIiwgLmRhdGEgPSAmaW14OG1xX2RldiwgfSwNCj4gK8KgwqDCoMKgwqDCoMKgeyAvKiBz ZW50aW5lbCAqLyB9DQo+ICt9Ow0KPiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbndsX2RzaV9k dF9pZHMpOw0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHNvY19kZXZpY2VfYXR0cmlidXRl IG53bF9kc2lfcXVpcmtzX21hdGNoW10gPSB7DQo+ICvCoMKgwqDCoMKgwqDCoHsgLnNvY19pZCA9 ICJpLk1YOE1RIiwgLnJldmlzaW9uID0gIjIuMCIsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqAuZGF0 YSA9ICh2b2lkICopKEUxMTQxOF9IU19NT0RFX1FVSVJLIHwgU1JDX1JFU0VUX1FVSVJLKSB9LA0K PiArwqDCoMKgwqDCoMKgwqB7IC8qIHNlbnRpbmVsLiAqLyB9LA0KPiArfTsNCj4gKw0KPiArc3Rh dGljIGludCBud2xfZHNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ICt7 DQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7DQo+ICvC oMKgwqDCoMKgwqDCoGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9mX2lkID0NCj4gb2ZfbWF0 Y2hfZGV2aWNlKG53bF9kc2lfZHRfaWRzLCBkZXYpOw0KPiArwqDCoMKgwqDCoMKgwqBjb25zdCBz dHJ1Y3QgbndsX2RzaV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IG9mX2lkLT5kYXRhOw0KPiArwqDC oMKgwqDCoMKgwqBjb25zdCBzdHJ1Y3Qgc29jX2RldmljZV9hdHRyaWJ1dGUgKmF0dHI7DQo+ICvC oMKgwqDCoMKgwqDCoHN0cnVjdCBud2xfZHNpICpkc2k7DQo+ICvCoMKgwqDCoMKgwqDCoGludCBy ZXQ7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgZHNpID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9m KCpkc2kpLCBHRlBfS0VSTkVMKTsNCj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFkc2kpDQo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVOT01FTTsNCj4gKw0KPiArwqDCoMKg wqDCoMKgwqBkc2ktPmRldiA9IGRldjsNCj4gK8KgwqDCoMKgwqDCoMKgZHNpLT5wZGF0YSA9IHBk YXRhOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoHJldCA9IG53bF9kc2lfcGFyc2VfZHQoZHNpKTsN Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldHVybiByZXQ7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gZGV2bV9yZXF1ZXN0 X2lycShkZXYsIGRzaS0+aXJxLCBud2xfZHNpX2lycV9oYW5kbGVyLCAwLA0KPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X25h bWUoZGV2KSwgZHNpKTsNCj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCA8IDApIHsNCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHJl cXVlc3QgSVJRICVkOiAlZFxuIiwNCj4gZHNpLT5pcnEsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0KTsNCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7DQo+ICvCoMKgwqDCoMKgwqDCoH0NCj4g Kw0KPiArwqDCoMKgwqDCoMKgwqBkc2ktPmRzaV9ob3N0Lm9wcyA9ICZud2xfZHNpX2hvc3Rfb3Bz Ow0KPiArwqDCoMKgwqDCoMKgwqBkc2ktPmRzaV9ob3N0LmRldiA9IGRldjsNCj4gK8KgwqDCoMKg wqDCoMKgcmV0ID0gbWlwaV9kc2lfaG9zdF9yZWdpc3RlcigmZHNpLT5kc2lfaG9zdCk7DQo+ICvC oMKgwqDCoMKgwqDCoGlmIChyZXQpIHsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oERSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIE1JUEkgaG9zdDoNCj4gJWRc biIsIHJldCk7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Ow0K PiArwqDCoMKgwqDCoMKgwqB9DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgYXR0ciA9IHNvY19kZXZp Y2VfbWF0Y2gobndsX2RzaV9xdWlya3NfbWF0Y2gpOw0KPiArwqDCoMKgwqDCoMKgwqBpZiAoYXR0 cikNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRzaS0+cXVpcmtzID0gKHVpbnRw dHJfdClhdHRyLT5kYXRhOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoGRzaS0+YnJpZGdlLmRyaXZl cl9wcml2YXRlID0gZHNpOw0KPiArwqDCoMKgwqDCoMKgwqBkc2ktPmJyaWRnZS5mdW5jcyA9ICZu d2xfZHNpX2JyaWRnZV9mdW5jczsNCj4gK8KgwqDCoMKgwqDCoMKgZHNpLT5icmlkZ2Uub2Zfbm9k ZSA9IGRldi0+b2Zfbm9kZTsNCj4gK8KgwqDCoMKgwqDCoMKgZHNpLT5icmlkZ2UudGltaW5ncyA9 ICZud2xfZHNpX3RpbWluZ3M7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgZHJtX2JyaWRnZV9hZGQo JmRzaS0+YnJpZGdlKTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBkZXZfc2V0X2RydmRhdGEoZGV2 LCBkc2kpOw0KPiArwqDCoMKgwqDCoMKgwqBwbV9ydW50aW1lX2VuYWJsZShkZXYpOw0KPiArwqDC oMKgwqDCoMKgwqByZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBud2xfZHNpX3Jl bW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiArew0KPiArwqDCoMKgwqDCoMKg wqBzdHJ1Y3QgbndsX2RzaSAqZHNpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7DQo+ICsN Cj4gK8KgwqDCoMKgwqDCoMKgbWlwaV9kc2lfaG9zdF91bnJlZ2lzdGVyKCZkc2ktPmRzaV9ob3N0 KTsNCj4gK8KgwqDCoMKgwqDCoMKgcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOw0KPiAr wqDCoMKgwqDCoMKgwqByZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHN0cnVjdCBwbGF0 Zm9ybV9kcml2ZXIgbndsX2RzaV9kcml2ZXIgPSB7DQo+ICvCoMKgwqDCoMKgwqDCoC5wcm9iZcKg wqDCoMKgwqDCoMKgwqDCoMKgPSBud2xfZHNpX3Byb2JlLA0KPiArwqDCoMKgwqDCoMKgwqAucmVt b3ZlwqDCoMKgwqDCoMKgwqDCoMKgPSBud2xfZHNpX3JlbW92ZSwNCj4gK8KgwqDCoMKgwqDCoMKg LmRyaXZlcsKgwqDCoMKgwqDCoMKgwqDCoD0gew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgLm9mX21hdGNoX3RhYmxlID0gbndsX2RzaV9kdF9pZHMsDQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAubmFtZcKgwqDCoD0gRFJWX05BTUUsDQo+ICvCoMKgwqDCoMKgwqDC oH0sDQo+ICt9Ow0KPiArDQo+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG53bF9kc2lfZHJpdmVy KTsNCj4gKw0KPiArTU9EVUxFX0FVVEhPUigiTlhQIFNlbWljb25kdWN0b3IiKTsNCj4gK01PRFVM RV9BVVRIT1IoIlB1cmlzbSBTUEMiKTsNCj4gK01PRFVMRV9ERVNDUklQVElPTigiTm9ydGh3ZXN0 IExvZ2ljIE1JUEktRFNJIGRyaXZlciIpOw0KPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOyAvKiBH UEx2MiBvciBsYXRlciAqLw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9u d2wtZHNpL253bC1kcnYuaA0KPiBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRzaS9ud2wt ZHJ2LmgNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi4xZTcy YTkyMjE0MDENCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdl L253bC1kc2kvbndsLWRydi5oDQo+IEBAIC0wLDAgKzEsNjUgQEANCj4gKy8qIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wKyAqLw0KPiArLyoNCj4gKyAqIE5XTCBNSVBJIERTSSBob3N0 IGRyaXZlcg0KPiArICoNCj4gKyAqIENvcHlyaWdodCAoQykgMjAxNyBOWFANCj4gKyAqIENvcHly aWdodCAoQykgMjAxOSBQdXJpc20gU1BDDQo+ICsgKi8NCj4gKw0KPiArI2lmbmRlZiBfX05XTF9E UlZfSF9fDQo+ICsjZGVmaW5lIF9fTldMX0RSVl9IX18NCj4gKw0KPiArI2luY2x1ZGUgPGxpbnV4 L211eC9jb25zdW1lci5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4NCj4gKw0KPiAr I2luY2x1ZGUgPGRybS9kcm1fYnJpZGdlLmg+DQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9taXBpX2Rz aS5oPg0KPiArDQo+ICtzdHJ1Y3QgbndsX2RzaV9wbGF0Zm9ybV9kYXRhOw0KPiArDQo+ICsvKiBp Lk1YOCBOV0wgcXVpcmtzICovDQo+ICsvKiBpLk1YOE1RIGVycmF0YSBFMTE0MTggKi8NCj4gKyNk ZWZpbmUgRTExNDE4X0hTX01PREVfUVVJUkvCoMKgwqDCoMKgwqDCoEJJVCgwKQ0KPiArLyogU2tp cCBEU0kgYml0cyBpbiBTUkMgb24gZGlzYWJsZSB0byBhdm9pZCBibGFuayBkaXNwbGF5IG9uIGVu YWJsZQ0KPiAqLw0KPiArI2RlZmluZSBTUkNfUkVTRVRfUVVJUkvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDEpDQo+ICsNCj4gKyNkZWZpbmUgTldMX0RTSV9NQVhf UExBVEZPUk1fQ0xPQ0tTIDENCj4gK3N0cnVjdCBud2xfZHNpX3BsYXRfY2xrX2NvbmZpZyB7DQo+ ICvCoMKgwqDCoMKgwqDCoGNvbnN0IGNoYXIgKmlkOw0KPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qg Y2xrICpjbGs7DQo+ICvCoMKgwqDCoMKgwqDCoGJvb2wgcHJlc2VudDsNCj4gK307DQo+ICsNCj4g K3N0cnVjdCBud2xfZHNpIHsNCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9icmlkZ2UgYnJp ZGdlOw0KPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbWlwaV9kc2lfaG9zdCBkc2lfaG9zdDsNCj4g K8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9icmlkZ2UgKnBhbmVsX2JyaWRnZTsNCj4gK8KgwqDC oMKgwqDCoMKgc3RydWN0IGRldmljZSAqZGV2Ow0KPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcGh5 ICpwaHk7DQo+ICvCoMKgwqDCoMKgwqDCoHVuaW9uIHBoeV9jb25maWd1cmVfb3B0cyBwaHlfY2Zn Ow0KPiArwqDCoMKgwqDCoMKgwqB1bnNpZ25lZCBpbnQgcXVpcmtzOw0KPiArDQo+ICvCoMKgwqDC oMKgwqDCoHN0cnVjdCByZWdtYXAgKnJlZ21hcDsNCj4gK8KgwqDCoMKgwqDCoMKgaW50IGlycTsN Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHJlc2V0X2NvbnRyb2wgKnJzdGM7DQo+ICvCoMKgwqDC oMKgwqDCoHN0cnVjdCBtdXhfY29udHJvbCAqbXV4Ow0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoC8q IERTSSBjbG9ja3MgKi8NCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGNsayAqcGh5X3JlZl9jbGs7 DQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBjbGsgKnJ4X2VzY19jbGs7DQo+ICvCoMKgwqDCoMKg wqDCoHN0cnVjdCBjbGsgKnR4X2VzY19jbGs7DQo+ICvCoMKgwqDCoMKgwqDCoC8qIFBsYXRmb3Jt IGRlcGVuZGVudCBjbG9ja3MgKi8NCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IG53bF9kc2lfcGxh dF9jbGtfY29uZmlnDQo+IGNsa19jb25maWdbTldMX0RTSV9NQVhfUExBVEZPUk1fQ0xPQ0tTXTsN Cj4gKw0KPiArwqDCoMKgwqDCoMKgwqAvKiBkc2kgbGFuZXMgKi8NCj4gK8KgwqDCoMKgwqDCoMKg dTMyIGxhbmVzOw0KPiArwqDCoMKgwqDCoMKgwqBlbnVtIG1pcGlfZHNpX3BpeGVsX2Zvcm1hdCBm b3JtYXQ7DQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIG1vZGU7DQo+ ICvCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGxvbmcgZHNpX21vZGVfZmxhZ3M7DQo+ICsNCj4gK8Kg wqDCoMKgwqDCoMKgc3RydWN0IG53bF9kc2lfdHJhbnNmZXIgKnhmZXI7DQo+ICsNCj4gK8KgwqDC oMKgwqDCoMKgY29uc3Qgc3RydWN0IG53bF9kc2lfcGxhdGZvcm1fZGF0YSAqcGRhdGE7DQo+ICt9 Ow0KPiArDQo+ICsjZW5kaWYgLyogX19OV0xfRFJWX0hfXyAqLw0KPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpL253bC1kc2kuYw0KPiBiL2RyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvbndsLWRzaS9ud2wtZHNpLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5k ZXggMDAwMDAwMDAwMDAwLi5mZDAzMGFmNTViYjQNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kvbndsLWRzaS5jDQo+IEBAIC0wLDAgKzEsNzAw IEBADQo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsNCj4gKy8qDQo+ICsg KiBOV0wgTUlQSSBEU0kgaG9zdCBkcml2ZXINCj4gKyAqDQo+ICsgKiBDb3B5cmlnaHQgKEMpIDIw MTcgTlhQDQo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTkgUHVyaXNtIFNQQw0KPiArICovDQo+ICsN Cj4gKyNpbmNsdWRlIDxsaW51eC9iaXRmaWVsZC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2Nsay5o Pg0KPiArI2luY2x1ZGUgPGxpbnV4L2lycS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5o Pg0KPiArI2luY2x1ZGUgPGxpbnV4L3RpbWU2NC5oPg0KPiArDQo+ICsjaW5jbHVkZSA8dmlkZW8v bWlwaV9kaXNwbGF5Lmg+DQo+ICsjaW5jbHVkZSA8dmlkZW8vdmlkZW9tb2RlLmg+DQo+ICsNCj4g KyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4NCj4gKyNpbmNsdWRlIDxkcm0vZHJt X2NydGNfaGVscGVyLmg+DQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9vZi5oPg0KPiArI2luY2x1ZGUg PGRybS9kcm1fcGFuZWwuaD4NCj4gKyNpbmNsdWRlIDxkcm0vZHJtX3ByaW50Lmg+DQo+ICsNCj4g KyNpbmNsdWRlICJud2wtZHJ2LmgiDQo+ICsjaW5jbHVkZSAibndsLWRzaS5oIg0KPiArDQo+ICsj ZGVmaW5lIE5XTF9EU0lfTUlQSV9GSUZPX1RJTUVPVVQgbXNlY3NfdG9famlmZmllcyg1MDApDQo+ ICsNCj4gKy8qDQo+ICsgKiBQS1RfQ09OVFJPTCBmb3JtYXQ6DQo+ICsgKiBbMTU6IDBdIC0gd29y ZCBjb3VudA0KPiArICogWzE3OjE2XSAtIHZpcnR1YWwgY2hhbm5lbA0KPiArICogWzIzOjE4XSAt IGRhdGEgdHlwZQ0KPiArICogWzI0XcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAtIExQIG9yIEhTIHNl bGVjdCAoMCAtIExQLCAxIC0gSFMpDQo+ICsgKiBbMjVdwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC0g cGVyZm9ybSBCVEEgYWZ0ZXIgcGFja2V0IGlzIHNlbnQNCj4gKyAqIFsyNl3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgLSBwZXJmb3JtIEJUQSBvbmx5LCBubyBwYWNrZXQgdHgNCj4gKyAqLw0KPiArI2Rl ZmluZSBOV0xfRFNJX1dDKHgpwqDCoMKgwqDCoMKgwqDCoMKgwqBGSUVMRF9QUkVQKEdFTk1BU0so MTUsIDApLCAoeCkpDQo+ICsjZGVmaW5lIE5XTF9EU0lfVFhfVkMoeCnCoMKgwqDCoMKgwqDCoEZJ RUxEX1BSRVAoR0VOTUFTSygxNywgMTYpLCAoeCkpDQo+ICsjZGVmaW5lIE5XTF9EU0lfVFhfRFQo eCnCoMKgwqDCoMKgwqDCoEZJRUxEX1BSRVAoR0VOTUFTSygyMywgMTgpLCAoeCkpDQo+ICsjZGVm aW5lIE5XTF9EU0lfSFNfU0VMKHgpwqDCoMKgwqDCoMKgRklFTERfUFJFUChHRU5NQVNLKDI0LCAy NCksICh4KSkNCj4gKyNkZWZpbmUgTldMX0RTSV9CVEFfVFgoeCnCoMKgwqDCoMKgwqBGSUVMRF9Q UkVQKEdFTk1BU0soMjUsIDI1KSwgKHgpKQ0KPiArI2RlZmluZSBOV0xfRFNJX0JUQV9OT19UWCh4 KcKgwqDCoEZJRUxEX1BSRVAoR0VOTUFTSygyNiwgMjYpLCAoeCkpDQo+ICsNCj4gKy8qDQo+ICsg KiBSWF9QS1RfSEVBREVSIGZvcm1hdDoNCj4gKyAqIFsxNTogMF0gLSB3b3JkIGNvdW50DQo+ICsg KiBbMjE6MTZdIC0gZGF0YSB0eXBlDQo+ICsgKiBbMjM6MjJdIC0gdmlydHVhbCBjaGFubmVsDQo+ ICsgKi8NCj4gKyNkZWZpbmUgTldMX0RTSV9SWF9EVCh4KcKgwqDCoMKgwqDCoMKgRklFTERfR0VU KEdFTk1BU0soMjEsIDE2KSwgKHgpKQ0KPiArI2RlZmluZSBOV0xfRFNJX1JYX1ZDKHgpwqDCoMKg wqDCoMKgwqBGSUVMRF9HRVQoR0VOTUFTSygyMywgMjIpLCAoeCkpDQo+ICsNCj4gKy8qIERTSSBW aWRlbyBtb2RlICovDQo+ICsjZGVmaW5lIE5XTF9EU0lfVk1fQlVSU1RfTU9ERV9XSVRIX1NZTkNf UFVMU0VTwqDCoMKgwqDCoMKgwqDCoMKgMA0KPiArI2RlZmluZSBOV0xfRFNJX1ZNX05PTl9CVVJT VF9NT0RFX1dJVEhfU1lOQ19FVkVOVFPCoMKgwqDCoMKgQklUKDApDQo+ICsjZGVmaW5lIE5XTF9E U0lfVk1fQlVSU1RfTU9ERcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBCSVQoMSkNCj4gKw0KPiArLyogKiBEUEkgY29sb3IgY29kaW5nICovDQo+ICsj ZGVmaW5lIE5XTF9EU0lfRFBJXzE2X0JJVF81NjVfUEFDS0VEwqDCoDANCj4gKyNkZWZpbmUgTldM X0RTSV9EUElfMTZfQklUXzU2NV9BTElHTkVEIDENCj4gKyNkZWZpbmUgTldMX0RTSV9EUElfMTZf QklUXzU2NV9TSElGVEVEIDINCj4gKyNkZWZpbmUgTldMX0RTSV9EUElfMThfQklUX1BBQ0tFRMKg wqDCoMKgwqDCoDMNCj4gKyNkZWZpbmUgTldMX0RTSV9EUElfMThfQklUX0FMSUdORUTCoMKgwqDC oMKgNA0KPiArI2RlZmluZSBOV0xfRFNJX0RQSV8yNF9CSVTCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoDUNCj4gKw0KPiArLyogKiBEUEkgUGl4ZWwgZm9ybWF0ICovDQo+ICsjZGVmaW5lIE5XTF9E U0lfUElYRUxfRk9STUFUXzE2wqDCoDANCj4gKyNkZWZpbmUgTldMX0RTSV9QSVhFTF9GT1JNQVRf MTjCoMKgQklUKDApDQo+ICsjZGVmaW5lIE5XTF9EU0lfUElYRUxfRk9STUFUXzE4TCBCSVQoMSkN Cj4gKyNkZWZpbmUgTldMX0RTSV9QSVhFTF9GT1JNQVRfMjTCoMKgKEJJVCgwKSB8IEJJVCgxKSkN Cj4gKw0KPiArZW51bSB0cmFuc2Zlcl9kaXJlY3Rpb24gew0KPiArwqDCoMKgwqDCoMKgwqBEU0lf UEFDS0VUX1NFTkQsDQo+ICvCoMKgwqDCoMKgwqDCoERTSV9QQUNLRVRfUkVDRUlWRSwNCj4gK307 DQo+ICsNCj4gK3N0cnVjdCBud2xfZHNpX3RyYW5zZmVyIHsNCj4gK8KgwqDCoMKgwqDCoMKgY29u c3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqbXNnOw0KPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbWlw aV9kc2lfcGFja2V0IHBhY2tldDsNCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGNvbXBsZXRpb24g Y29tcGxldGVkOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoGludCBzdGF0dXM7IC8qIHN0YXR1cyBv ZiB0cmFuc21pc3Npb24gKi8NCj4gK8KgwqDCoMKgwqDCoMKgZW51bSB0cmFuc2Zlcl9kaXJlY3Rp b24gZGlyZWN0aW9uOw0KPiArwqDCoMKgwqDCoMKgwqBib29sIG5lZWRfYnRhOw0KPiArwqDCoMKg wqDCoMKgwqB1OCBjbWQ7DQo+ICvCoMKgwqDCoMKgwqDCoHUxNiByeF93b3JkX2NvdW50Ow0KPiAr wqDCoMKgwqDCoMKgwqBzaXplX3QgdHhfbGVuOyAvKiBpbiBieXRlcyAqLw0KPiArwqDCoMKgwqDC oMKgwqBzaXplX3QgcnhfbGVuOyAvKiBpbiBieXRlcyAqLw0KPiArfTsNCj4gKw0KPiArc3RhdGlj IGludCBud2xfZHNpX3dyaXRlKHN0cnVjdCBud2xfZHNpICpkc2ksIHVuc2lnbmVkIGludCByZWcs IHUzMg0KPiB2YWwpDQo+ICt7DQo+ICvCoMKgwqDCoMKgwqDCoGludCByZXQ7DQo+ICsNCj4gK8Kg wqDCoMKgwqDCoMKgcmV0ID0gcmVnbWFwX3dyaXRlKGRzaS0+cmVnbWFwLCByZWcsIHZhbCk7DQo+ ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKQ0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgRFJNX0RFVl9FUlJPUihkc2ktPmRldiwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiRmFpbGVkIHRvIHdyaXRlIE5XTCBE U0kgcmVnIDB4JXg6DQo+ICVkXG4iLCByZWcsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0KTsNCj4gK8KgwqDCoMKgwqDCoMKg cmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHUzMiBud2xfZHNpX3JlYWQoc3RydWN0 IG53bF9kc2kgKmRzaSwgdTMyIHJlZykNCj4gK3sNCj4gK8KgwqDCoMKgwqDCoMKgdW5zaWduZWQg aW50IHZhbDsNCj4gK8KgwqDCoMKgwqDCoMKgaW50IHJldDsNCj4gKw0KPiArwqDCoMKgwqDCoMKg wqByZXQgPSByZWdtYXBfcmVhZChkc2ktPnJlZ21hcCwgcmVnLCAmdmFsKTsNCj4gK8KgwqDCoMKg wqDCoMKgaWYgKHJldCA8IDApDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1f REVWX0VSUk9SKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIHJlYWQgTldMIERTSSByZWcNCj4gMHgleDog JWRcbiIsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmVnLCByZXQpOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiB2YWw7 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB1MzIgbndsX2RzaV9nZXRfZHBpX3BpeGVsX2Zvcm1hdChl bnVtIG1pcGlfZHNpX3BpeGVsX2Zvcm1hdA0KPiBmb3JtYXQpDQo+ICt7DQo+ICvCoMKgwqDCoMKg wqDCoHN3aXRjaCAoZm9ybWF0KSB7DQo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgTUlQSV9EU0lfRk1U X1JHQjU2NToNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBOV0xfRFNJ X1BJWEVMX0ZPUk1BVF8xNjsNCj4gK8KgwqDCoMKgwqDCoMKgY2FzZSBNSVBJX0RTSV9GTVRfUkdC NjY2Og0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIE5XTF9EU0lfUElY RUxfRk9STUFUXzE4TDsNCj4gK8KgwqDCoMKgwqDCoMKgY2FzZSBNSVBJX0RTSV9GTVRfUkdCNjY2 X1BBQ0tFRDoNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBOV0xfRFNJ X1BJWEVMX0ZPUk1BVF8xODsNCj4gK8KgwqDCoMKgwqDCoMKgY2FzZSBNSVBJX0RTSV9GTVRfUkdC ODg4Og0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIE5XTF9EU0lfUElY RUxfRk9STUFUXzI0Ow0KPiArwqDCoMKgwqDCoMKgwqBkZWZhdWx0Og0KPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7DQo+ICvCoMKgwqDCoMKgwqDCoH0NCj4g K30NCj4gKw0KPiArI2RlZmluZSBQU0VDX1BFUl9TRUMgMTAwMDAwMDAwMDAwMExMDQo+ICsvKg0K PiArICogcHMyYmMgLSBQaWNvc2Vjb25kcyB0byBieXRlIGNsb2NrIGN5Y2xlcw0KPiArICovDQo+ ICtzdGF0aWMgdTMyIHBzMmJjKHN0cnVjdCBud2xfZHNpICpkc2ksIHVuc2lnbmVkIGxvbmcgbG9u ZyBwcykNCj4gK3sNCj4gK8KgwqDCoMKgwqDCoMKgaW50IGJwcCA9IG1pcGlfZHNpX3BpeGVsX2Zv cm1hdF90b19icHAoZHNpLT5mb3JtYXQpOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBE SVZfUk9VTkRfVVAocHMgKiBkc2ktPm1vZGUuY2xvY2sgKiAxMDAwICogYnBwLA0KPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZHNpLT5sYW5l cyAqIDggKiBQU0VDX1BFUl9TRUMpOw0KPiArfQ0KPiArDQo+ICsvKg0KPiArICogdWkyYmMgLSBV SSB0aW1lIHBlcmlvZHMgdG8gYnl0ZSBjbG9jayBjeWNsZXMNCj4gKyAqLw0KPiArc3RhdGljIHUz MiB1aTJiYyhzdHJ1Y3QgbndsX2RzaSAqZHNpLCB1bnNpZ25lZCBsb25nIGxvbmcgdWkpDQo+ICt7 DQo+ICvCoMKgwqDCoMKgwqDCoGludCBicHAgPSBtaXBpX2RzaV9waXhlbF9mb3JtYXRfdG9fYnBw KGRzaS0+Zm9ybWF0KTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gRElWX1JPVU5EX1VQ KHVpICogZHNpLT5sYW5lcywgZHNpLT5tb2RlLmNsb2NrICogMTAwMCAqDQo+IGJwcCk7DQo+ICt9 DQo+ICsNCj4gKy8qDQo+ICsgKiB1czJiYyAtIG1pY3JvIHNlY29uZHMgdG8gbHAgY2xvY2sgY3lj bGVzDQo+ICsgKi8NCj4gK3N0YXRpYyB1MzIgdXMybHAodTMyIGxwX2Nsa19yYXRlLCB1bnNpZ25l ZCBsb25nIHVzKQ0KPiArew0KPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gRElWX1JPVU5EX1VQKHVz ICogbHBfY2xrX3JhdGUsIFVTRUNfUEVSX1NFQyk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQg bndsX2RzaV9jb25maWdfaG9zdChzdHJ1Y3QgbndsX2RzaSAqZHNpKQ0KPiArew0KPiArwqDCoMKg wqDCoMKgwqB1MzIgY3ljbGVzOw0KPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcGh5X2NvbmZpZ3Vy ZV9vcHRzX21pcGlfZHBoeSAqY2ZnID0gJmRzaS0NCj4gPnBoeV9jZmcubWlwaV9kcGh5Ow0KPiAr DQo+ICvCoMKgwqDCoMKgwqDCoGlmIChkc2ktPmxhbmVzIDwgMSB8fCBkc2ktPmxhbmVzID4gNCkN Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUlOVkFMOw0KPiArDQo+ ICvCoMKgwqDCoMKgwqDCoERSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAiRFNJIExhbmVz ICVkXG4iLCBkc2ktPmxhbmVzKTsNCj4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ks IE5XTF9EU0lfQ0ZHX05VTV9MQU5FUywgZHNpLT5sYW5lcyAtIDEpOw0KPiArDQo+ICvCoMKgwqDC oMKgwqDCoGlmIChkc2ktPmRzaV9tb2RlX2ZsYWdzICYgTUlQSV9EU0lfQ0xPQ0tfTk9OX0NPTlRJ TlVPVVMpIHsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUo ZHNpLCBOV0xfRFNJX0NGR19OT05DT05USU5VT1VTX0NMSywNCj4gMHgwMSk7DQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9DRkdfQVVU T0lOU0VSVF9FT1RQLA0KPiAweDAxKTsNCj4gK8KgwqDCoMKgwqDCoMKgfSBlbHNlIHsNCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0NG R19OT05DT05USU5VT1VTX0NMSywNCj4gMHgwMCk7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9DRkdfQVVUT0lOU0VSVF9FT1RQLA0K PiAweDAwKTsNCj4gK8KgwqDCoMKgwqDCoMKgfQ0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoC8qIHZh bHVlcyBpbiBieXRlIGNsb2NrIGN5Y2xlcyAqLw0KPiArwqDCoMKgwqDCoMKgwqBjeWNsZXMgPSB1 aTJiYyhkc2ksIGNmZy0+Y2xrX3ByZSk7DQo+ICvCoMKgwqDCoMKgwqDCoERSTV9ERVZfREVCVUdf RFJJVkVSKGRzaS0+ZGV2LCAiY2ZnX3RfcHJlOiAweCV4XG4iLCBjeWNsZXMpOw0KPiArwqDCoMKg wqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9DRkdfVF9QUkUsIGN5Y2xlcyk7DQo+ ICvCoMKgwqDCoMKgwqDCoGN5Y2xlcyA9IHBzMmJjKGRzaSwgY2ZnLT5scHggKyBjZmctPmNsa19w cmVwYXJlICsgY2ZnLQ0KPiA+Y2xrX3plcm8pOw0KPiArwqDCoMKgwqDCoMKgwqBEUk1fREVWX0RF QlVHX0RSSVZFUihkc2ktPmRldiwgImNmZ190eF9nYXAgKHByZSk6IDB4JXhcbiIsDQo+IGN5Y2xl cyk7DQo+ICvCoMKgwqDCoMKgwqDCoGN5Y2xlcyArPSB1aTJiYyhkc2ksIGNmZy0+Y2xrX3ByZSk7 DQo+ICvCoMKgwqDCoMKgwqDCoERSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAiY2ZnX3R4 X2dhcDogMHgleFxuIiwgY3ljbGVzKTsNCj4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShk c2ksIE5XTF9EU0lfQ0ZHX1RfUE9TVCwgY3ljbGVzKTsNCj4gK8KgwqDCoMKgwqDCoMKgY3ljbGVz ID0gcHMyYmMoZHNpLCBjZmctPmhzX2V4aXQpOw0KPiArwqDCoMKgwqDCoMKgwqBEUk1fREVWX0RF QlVHX0RSSVZFUihkc2ktPmRldiwgImNmZ190eF9nYXA6IDB4JXhcbiIsIGN5Y2xlcyk7DQo+ICvC oMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0NGR19UWF9HQVAsIGN5Y2xl cyk7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfQ0ZH X0VYVFJBX0NNRFNfQUZURVJfRU9UUCwgMHgwMSk7DQo+ICvCoMKgwqDCoMKgwqDCoG53bF9kc2lf d3JpdGUoZHNpLCBOV0xfRFNJX0NGR19IVFhfVE9fQ09VTlQsIDB4MDApOw0KPiArwqDCoMKgwqDC oMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9DRkdfTFJYX0hfVE9fQ09VTlQsIDB4MDAp Ow0KPiArwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9DRkdfQlRBX0hf VE9fQ09VTlQsIDB4MDApOw0KPiArwqDCoMKgwqDCoMKgwqAvKiBJbiBMUCBjbG9jayBjeWNsZXMg Ki8NCj4gK8KgwqDCoMKgwqDCoMKgY3ljbGVzID0gdXMybHAoY2ZnLT5scF9jbGtfcmF0ZSwgY2Zn LT53YWtldXApOw0KPiArwqDCoMKgwqDCoMKgwqBEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRl diwgImNmZ190d2FrZXVwOiAweCV4XG4iLA0KPiBjeWNsZXMpOw0KPiArwqDCoMKgwqDCoMKgwqBu d2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9DRkdfVFdBS0VVUCwgY3ljbGVzKTsNCj4gKw0KPiAr wqDCoMKgwqDCoMKgwqByZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBud2xfZHNp X2NvbmZpZ19kcGkoc3RydWN0IG53bF9kc2kgKmRzaSkNCj4gK3sNCj4gK8KgwqDCoMKgwqDCoMKg dTMyIGNvbG9yX2Zvcm1hdCwgbW9kZTsNCj4gK8KgwqDCoMKgwqDCoMKgYm9vbCBidXJzdF9tb2Rl Ow0KPiArwqDCoMKgwqDCoMKgwqBpbnQgaGZyb250X3BvcmNoLCBoYmFja19wb3JjaCwgdmZyb250 X3BvcmNoLCB2YmFja19wb3JjaDsNCj4gK8KgwqDCoMKgwqDCoMKgaW50IGhzeW5jX2xlbiwgdnN5 bmNfbGVuOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoGhmcm9udF9wb3JjaCA9IGRzaS0+bW9kZS5o c3luY19zdGFydCAtIGRzaS0+bW9kZS5oZGlzcGxheTsNCj4gK8KgwqDCoMKgwqDCoMKgaHN5bmNf bGVuID0gZHNpLT5tb2RlLmhzeW5jX2VuZCAtIGRzaS0+bW9kZS5oc3luY19zdGFydDsNCj4gK8Kg wqDCoMKgwqDCoMKgaGJhY2tfcG9yY2ggPSBkc2ktPm1vZGUuaHRvdGFsIC0gZHNpLT5tb2RlLmhz eW5jX2VuZDsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqB2ZnJvbnRfcG9yY2ggPSBkc2ktPm1vZGUu dnN5bmNfc3RhcnQgLSBkc2ktPm1vZGUudmRpc3BsYXk7DQo+ICvCoMKgwqDCoMKgwqDCoHZzeW5j X2xlbiA9IGRzaS0+bW9kZS52c3luY19lbmQgLSBkc2ktPm1vZGUudnN5bmNfc3RhcnQ7DQo+ICvC oMKgwqDCoMKgwqDCoHZiYWNrX3BvcmNoID0gZHNpLT5tb2RlLnZ0b3RhbCAtIGRzaS0+bW9kZS52 c3luY19lbmQ7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgRFJNX0RFVl9ERUJVR19EUklWRVIoZHNp LT5kZXYsICJoZnJvbnRfcG9yY2ggPSAlZFxuIiwNCj4gaGZyb250X3BvcmNoKTsNCj4gK8KgwqDC oMKgwqDCoMKgRFJNX0RFVl9ERUJVR19EUklWRVIoZHNpLT5kZXYsICJoYmFja19wb3JjaCA9ICVk XG4iLA0KPiBoYmFja19wb3JjaCk7DQo+ICvCoMKgwqDCoMKgwqDCoERSTV9ERVZfREVCVUdfRFJJ VkVSKGRzaS0+ZGV2LCAiaHN5bmNfbGVuID0gJWRcbiIsDQo+IGhzeW5jX2xlbik7DQo+ICvCoMKg wqDCoMKgwqDCoERSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAiaGRpc3BsYXkgPSAlZFxu IiwgZHNpLQ0KPiA+bW9kZS5oZGlzcGxheSk7DQo+ICvCoMKgwqDCoMKgwqDCoERSTV9ERVZfREVC VUdfRFJJVkVSKGRzaS0+ZGV2LCAidmZyb250X3BvcmNoID0gJWRcbiIsDQo+IHZmcm9udF9wb3Jj aCk7DQo+ICvCoMKgwqDCoMKgwqDCoERSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAidmJh Y2tfcG9yY2ggPSAlZFxuIiwNCj4gdmJhY2tfcG9yY2gpOw0KPiArwqDCoMKgwqDCoMKgwqBEUk1f REVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgInZzeW5jX2xlbiA9ICVkXG4iLA0KPiB2c3luY19s ZW4pOw0KPiArwqDCoMKgwqDCoMKgwqBEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgInZh Y3RpdmUgPSAlZFxuIiwgZHNpLQ0KPiA+bW9kZS52ZGlzcGxheSk7DQo+ICvCoMKgwqDCoMKgwqDC oERSTV9ERVZfREVCVUdfRFJJVkVSKGRzaS0+ZGV2LCAiY2xvY2sgPSAlZCBrSHpcbiIsIGRzaS0N Cj4gPm1vZGUuY2xvY2spOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoGNvbG9yX2Zvcm1hdCA9IG53 bF9kc2lfZ2V0X2RwaV9waXhlbF9mb3JtYXQoZHNpLT5mb3JtYXQpOw0KPiArwqDCoMKgwqDCoMKg wqBpZiAoY29sb3JfZm9ybWF0IDwgMCkgew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgRFJNX0RFVl9FUlJPUihkc2ktPmRldiwgIkludmFsaWQgY29sb3IgZm9ybWF0DQo+IDB4JXhc biIsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgZHNpLT5mb3JtYXQpOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIGNvbG9yX2Zvcm1hdDsNCj4gK8KgwqDCoMKgwqDCoMKgfQ0KPiArwqDCoMKgwqDCoMKg wqBEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgInBpeGVsIGZtdCA9ICVkXG4iLCBkc2kt DQo+ID5mb3JtYXQpOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUoZHNpLCBO V0xfRFNJX0lOVEVSRkFDRV9DT0xPUl9DT0RJTkcsDQo+IE5XTF9EU0lfRFBJXzI0X0JJVCk7DQo+ ICvCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1BJWEVMX0ZPUk1BVCwg Y29sb3JfZm9ybWF0KTsNCj4gK8KgwqDCoMKgwqDCoMKgLyoNCj4gK8KgwqDCoMKgwqDCoMKgwqAq IEFkanVzdGluZyBpbnB1dCBwb2xhcml0eSBiYXNlZCBvbiB0aGUgdmlkZW8gbW9kZSByZXN1bHRz DQo+IGluDQo+ICvCoMKgwqDCoMKgwqDCoMKgKiBhIGJsYWNrIHNjcmVlbiBzbyBhbHdheXMgcGlj ayBhY3RpdmUgbG93Og0KPiArwqDCoMKgwqDCoMKgwqDCoCovDQo+ICvCoMKgwqDCoMKgwqDCoG53 bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1ZTWU5DX1BPTEFSSVRZLA0KPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgTldMX0RTSV9WU1lOQ19QT0xBUklUWV9BQ1RJ VkVfTE9XKTsNCj4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfSFNZ TkNfUE9MQVJJVFksDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBOV0xfRFNJX0hTWU5DX1BPTEFSSVRZX0FDVElWRV9MT1cpOw0KPiArDQo+ICvCoMKgwqDCoMKg wqDCoGJ1cnN0X21vZGUgPSAoZHNpLT5kc2lfbW9kZV9mbGFncyAmDQo+IE1JUElfRFNJX01PREVf VklERU9fQlVSU1QpICYmDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIShkc2ktPmRzaV9tb2RlX2ZsYWdzICYNCj4gTUlQSV9EU0lfTU9ERV9WSURFT19TWU5DX1BV TFNFKTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBpZiAoYnVyc3RfbW9kZSkgew0KPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfVklERU9f TU9ERSwNCj4gTldMX0RTSV9WTV9CVVJTVF9NT0RFKTsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoG53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1BJWEVMX0ZJRk9fU0VORF9MRVZF TCwNCj4gMjU2KTsNCj4gK8KgwqDCoMKgwqDCoMKgfSBlbHNlIHsNCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoG1vZGUgPSAoKGRzaS0+ZHNpX21vZGVfZmxhZ3MgJg0KPiBNSVBJX0RT SV9NT0RFX1ZJREVPX1NZTkNfUFVMU0UpID8NCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgTldMX0RTSV9WTV9CVVJTVF9NT0RF X1dJVEhfU1lOQ19QVUxTRQ0KPiBTIDoNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgTldMX0RTSV9WTV9OT05fQlVSU1RfTU9E RV9XSVRIX1NZTkNfRQ0KPiBWRU5UUyk7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBud2xfZHNpX3dyaXRlKGRzaSwgTldMX0RTSV9WSURFT19NT0RFLCBtb2RlKTsNCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1BJWEVM X0ZJRk9fU0VORF9MRVZFTCwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkc2ktPm1vZGUuaGRpc3BsYXkpOw0KPiArwqDCoMKgwqDC oMKgwqB9DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lf SEZQLCBoZnJvbnRfcG9yY2gpOw0KPiArwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwg TldMX0RTSV9IQlAsIGhiYWNrX3BvcmNoKTsNCj4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0 ZShkc2ksIE5XTF9EU0lfSFNBLCBoc3luY19sZW4pOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoG53 bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0VOQUJMRV9NVUxUX1BLVFMsIDB4MCk7DQo+ICvCoMKg wqDCoMKgwqDCoG53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX0JMTFBfTU9ERSwgMHgxKTsNCj4g K8KgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfRU5BQkxFX01VTFRfUEtU UywgMHgwKTsNCj4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfVVNF X05VTExfUEtUX0JMTFAsIDB4MCk7DQo+ICvCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUoZHNp LCBOV0xfRFNJX1ZDLCAweDApOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUo ZHNpLCBOV0xfRFNJX1BJWEVMX1BBWUxPQURfU0laRSwgZHNpLQ0KPiA+bW9kZS5oZGlzcGxheSk7 DQo+ICvCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1ZBQ1RJVkUsIGRz aS0+bW9kZS52ZGlzcGxheSAtIDEpOw0KPiArwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRz aSwgTldMX0RTSV9WQlAsIHZiYWNrX3BvcmNoKTsNCj4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV93 cml0ZShkc2ksIE5XTF9EU0lfVkZQLCB2ZnJvbnRfcG9yY2gpOw0KPiArDQo+ICvCoMKgwqDCoMKg wqDCoHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBud2xfZHNpX2luaXRfaW50 ZXJydXB0cyhzdHJ1Y3QgbndsX2RzaSAqZHNpKQ0KPiArew0KPiArwqDCoMKgwqDCoMKgwqB1MzIg aXJxX2VuYWJsZTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dyaXRlKGRzaSwgTldM X0RTSV9JUlFfTUFTSywgMHhmZmZmZmZmZik7DQo+ICvCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3Jp dGUoZHNpLCBOV0xfRFNJX0lSUV9NQVNLMiwgMHg3KTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBp cnFfZW5hYmxlID0gfih1MzIpKE5XTF9EU0lfVFhfUEtUX0RPTkVfTUFTSyB8DQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBOV0xfRFNJX1JY X1BLVF9IRFJfUkNWRF9NQVNLIHwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoE5XTF9EU0lfVFhfRklGT19PVkZMV19NQVNLIHwNCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoE5XTF9E U0lfSFNfVFhfVElNRU9VVF9NQVNLKTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBud2xfZHNpX3dy aXRlKGRzaSwgTldMX0RTSV9JUlFfTUFTSywgaXJxX2VuYWJsZSk7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyBpbnQgbndsX2RzaV9ob3N0X2F0dGFjaChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqZHNpX2hv c3QsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkZXZpY2UpDQo+ICt7DQo+ICvCoMKg wqDCoMKgwqDCoHN0cnVjdCBud2xfZHNpICpkc2kgPSBjb250YWluZXJfb2YoZHNpX2hvc3QsIHN0 cnVjdCBud2xfZHNpLA0KPiBkc2lfaG9zdCk7DQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkZXZp Y2UgKmRldiA9IGRzaS0+ZGV2Ow0KPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX2JyaWRnZSAq YnJpZGdlOw0KPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbDsNCj4gK8Kg wqDCoMKgwqDCoMKgaW50IHJldDsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBEUk1fREVWX0lORk8o ZGV2LCAibGFuZXM9JXUsIGZvcm1hdD0weCV4IGZsYWdzPTB4JWx4XG4iLA0KPiBkZXZpY2UtPmxh bmVzLA0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldmljZS0+ Zm9ybWF0LCBkZXZpY2UtPm1vZGVfZmxhZ3MpOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoGlmIChk ZXZpY2UtPmxhbmVzIDwgMSB8fCBkZXZpY2UtPmxhbmVzID4gNCkNCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUlOVkFMOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoGRz aS0+bGFuZXMgPSBkZXZpY2UtPmxhbmVzOw0KPiArwqDCoMKgwqDCoMKgwqBkc2ktPmZvcm1hdCA9 IGRldmljZS0+Zm9ybWF0Ow0KPiArwqDCoMKgwqDCoMKgwqBkc2ktPmRzaV9tb2RlX2ZsYWdzID0g ZGV2aWNlLT5tb2RlX2ZsYWdzOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGRybV9vZl9m aW5kX3BhbmVsX29yX2JyaWRnZShkc2ktPmRldi0+b2Zfbm9kZSwgMSwgMCwNCj4gJnBhbmVsLA0K PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCZicmlkZ2UpOw0KPiArwqDCoMKgwqDCoMKgwqBp ZiAocmV0KQ0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4g Kw0KPiArwqDCoMKgwqDCoMKgwqBpZiAocGFuZWwpIHsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGJyaWRnZSA9IGRybV9wYW5lbF9icmlkZ2VfYWRkKHBhbmVsLA0KPiBEUk1fTU9E RV9DT05ORUNUT1JfRFNJKTsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChJ U19FUlIoYnJpZGdlKSkNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqByZXR1cm4gUFRSX0VSUihicmlkZ2UpOw0KPiArwqDCoMKgwqDCoMKgwqB9DQo+ICsN Cj4gK8KgwqDCoMKgwqDCoMKgZHNpLT5wYW5lbF9icmlkZ2UgPSBicmlkZ2U7DQo+ICvCoMKgwqDC oMKgwqDCoGRybV9icmlkZ2VfYWRkKCZkc2ktPmJyaWRnZSk7DQo+ICsNCj4gK8KgwqDCoMKgwqDC oMKgcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgbndsX2RzaV9ob3N0X2RldGFj aChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqZHNpX2hvc3QsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbWlwaV9kc2lf ZGV2aWNlICpkZXZpY2UpDQo+ICt7DQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBud2xfZHNpICpk c2kgPSBjb250YWluZXJfb2YoZHNpX2hvc3QsIHN0cnVjdCBud2xfZHNpLA0KPiBkc2lfaG9zdCk7 DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgZHJtX29mX3BhbmVsX2JyaWRnZV9yZW1vdmUoZHNpLT5k ZXYtPm9mX25vZGUsIDEsIDApOw0KPiArwqDCoMKgwqDCoMKgwqBkcm1fYnJpZGdlX3JlbW92ZSgm ZHNpLT5icmlkZ2UpOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgYm9vbCBud2xfZHNpX3JlYWRfcGFja2V0KHN0cnVjdCBud2xfZHNpICpkc2ks IHUzMiBzdGF0dXMpDQo+ICt7DQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkZXZpY2UgKmRldiA9 IGRzaS0+ZGV2Ow0KPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbndsX2RzaV90cmFuc2ZlciAqeGZl ciA9IGRzaS0+eGZlcjsNCj4gK8KgwqDCoMKgwqDCoMKgdTggKnBheWxvYWQgPSB4ZmVyLT5tc2ct PnJ4X2J1ZjsNCj4gK8KgwqDCoMKgwqDCoMKgdTMyIHZhbDsNCj4gK8KgwqDCoMKgwqDCoMKgdTE2 IHdvcmRfY291bnQ7DQo+ICvCoMKgwqDCoMKgwqDCoHU4IGNoYW5uZWw7DQo+ICvCoMKgwqDCoMKg wqDCoHU4IGRhdGFfdHlwZTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqB4ZmVyLT5zdGF0dXMgPSAw Ow0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoGlmICh4ZmVyLT5yeF93b3JkX2NvdW50ID09IDApIHsN Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghKHN0YXR1cyAmIE5XTF9EU0lf UlhfUEtUX0hEUl9SQ1ZEKSkNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gZmFsc2U7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAvKiBHZXQgdGhlIFJYIGhlYWRlciBhbmQgcGFyc2UgaXQgKi8NCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHZhbCA9IG53bF9kc2lfcmVhZChkc2ksIE5XTF9EU0lfUlhfUEtUX0hF QURFUik7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB3b3JkX2NvdW50ID0gTldM X0RTSV9XQyh2YWwpOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hhbm5lbCA9 IE5XTF9EU0lfUlhfVkModmFsKTsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRh dGFfdHlwZSA9IE5XTF9EU0lfUlhfRFQodmFsKTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgaWYgKGNoYW5uZWwgIT0geGZlci0+bXNnLT5jaGFubmVsKSB7DQo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJPUihk ZXYsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJbJTAyWF0gQ2hhbm5lbCBtaXNtYXRjaCAoJXUgIT0N Cj4gJXUpXG4iLA0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZmVyLT5jbWQsIGNoYW5uZWwsIHhmZXIt Pm1zZy0NCj4gPmNoYW5uZWwpOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldHVybiB0cnVlOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgfQ0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzd2l0Y2ggKGRhdGFf dHlwZSkgew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2FzZSBNSVBJX0RTSV9S WF9HRU5FUklDX1NIT1JUX1JFQURfUkVTUE9OU0VfMkJZVEU6DQo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogRmFsbCB0aHJvdWdoICovDQo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjYXNlIE1JUElfRFNJX1JYX0RDU19TSE9SVF9SRUFE X1JFU1BPTlNFXzJCWVRFOg0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGlmICh4ZmVyLT5tc2ctPnJ4X2xlbiA+IDEpIHsNCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogcmVhZCBz ZWNvbmQgYnl0ZSAqLw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYXlsb2FkWzFdID0gd29yZF9jb3VudCA+PiA4Ow0KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqArK3hmZXItPnJ4X2xlbjsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB9DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgLyogRmFsbCB0aHJvdWdoICovDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBjYXNlIE1JUElfRFNJX1JYX0dFTkVSSUNfU0hPUlRfUkVBRF9SRVNQT05TRV8xQllURToN Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBGYWxs IHRocm91Z2ggKi8NCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNhc2UgTUlQSV9E U0lfUlhfRENTX1NIT1JUX1JFQURfUkVTUE9OU0VfMUJZVEU6DQo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHhmZXItPm1zZy0+cnhfbGVuID4gMCkg ew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAvKiByZWFkIGZpcnN0IGJ5dGUgKi8NCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGF5bG9hZFswXSA9IHdv cmRfY291bnQgJiAweGZmOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqArK3hmZXItPnJ4X2xlbjsNCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9DQo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGZlci0+c3RhdHVzID0geGZlci0+cnhfbGVu Ow0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy biB0cnVlOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2FzZSBNSVBJX0RTSV9S WF9BQ0tOT1dMRURHRV9BTkRfRVJST1JfUkVQT1JUOg0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHdvcmRfY291bnQgJj0gMHhmZjsNCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0VSUk9SKGRldiwg IlslMDJYXSBEU0kgZXJyb3IgcmVwb3J0Og0KPiAweCUwMnhcbiIsDQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHhmZXItPmNtZCwgd29yZF9jb3VudCk7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgeGZlci0+c3RhdHVzID0gLUVQUk9UTzsNCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gdHJ1ZTsNCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0NCj4gKw0KPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgaWYgKHdvcmRfY291bnQgPiB4ZmVyLT5tc2ctPnJ4X2xlbikgew0KPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfRVJST1Io DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGRldiwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIlslMDJYXSBSZWNlaXZlIGJ1ZmZlciB0b28gc21hbGw6 ICVsdQ0KPiAoPCAldSlcbiIsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhmZXItPmNtZCwgeGZlci0+bXNnLT5yeF9sZW4s DQo+IHdvcmRfY291bnQpOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldHVybiB0cnVlOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg fQ0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4ZmVyLT5yeF93b3JkX2Nv dW50ID0gd29yZF9jb3VudDsNCj4gK8KgwqDCoMKgwqDCoMKgfSBlbHNlIHsNCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIFNldCB3b3JkX2NvdW50IGZyb20gcHJldmlvdXMgaGVh ZGVyIHJlYWQgKi8NCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHdvcmRfY291bnQg PSB4ZmVyLT5yeF93b3JkX2NvdW50Ow0KPiArwqDCoMKgwqDCoMKgwqB9DQo+ICsNCj4gK8KgwqDC oMKgwqDCoMKgLyogSWYgUlggcGF5bG9hZCBpcyBub3QgeWV0IHJlY2VpdmVkLCB3YWl0IGZvciBp dCAqLw0KPiArwqDCoMKgwqDCoMKgwqBpZiAoIShzdGF0dXMgJiBOV0xfRFNJX1JYX1BLVF9QQVlM T0FEX0RBVEFfUkNWRCkpDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g ZmFsc2U7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgLyogUmVhZCB0aGUgUlggcGF5bG9hZCAqLw0K PiArwqDCoMKgwqDCoMKgwqB3aGlsZSAod29yZF9jb3VudCA+PSA0KSB7DQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB2YWwgPSBud2xfZHNpX3JlYWQoZHNpLCBOV0xfRFNJX1JYX1BB WUxPQUQpOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGF5bG9hZFswXSA9ICh2 YWwgPj4gMCkgJiAweGZmOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGF5bG9h ZFsxXSA9ICh2YWwgPj4gOCkgJiAweGZmOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcGF5bG9hZFsyXSA9ICh2YWwgPj4gMTYpICYgMHhmZjsNCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHBheWxvYWRbM10gPSAodmFsID4+IDI0KSAmIDB4ZmY7DQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYXlsb2FkICs9IDQ7DQo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB4ZmVyLT5yeF9sZW4gKz0gNDsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHdvcmRfY291bnQgLT0gNDsNCj4gK8KgwqDCoMKgwqDCoMKgfQ0KPiArDQo+ICvC oMKgwqDCoMKgwqDCoGlmICh3b3JkX2NvdW50ID4gMCkgew0KPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgdmFsID0gbndsX2RzaV9yZWFkKGRzaSwgTldMX0RTSV9SWF9QQVlMT0FEKTsN Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN3aXRjaCAod29yZF9jb3VudCkgew0K PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2FzZSAzOg0KPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBheWxvYWRbMl0gPSAodmFsID4+IDE2 KSAmIDB4ZmY7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgKyt4ZmVyLT5yeF9sZW47DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgLyogRmFsbCB0aHJvdWdoICovDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBjYXNlIDI6DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcGF5bG9hZFsxXSA9ICh2YWwgPj4gOCkgJiAweGZmOw0KPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCsreGZlci0+cnhfbGVuOw0KPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIEZhbGwgdGhyb3Vn aCAqLw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2FzZSAxOg0KPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBheWxvYWRbMF0gPSAodmFs ID4+IDApICYgMHhmZjsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqArK3hmZXItPnJ4X2xlbjsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBicmVhazsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oH0NCj4gK8KgwqDCoMKgwqDCoMKgfQ0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoHhmZXItPnN0YXR1 cyA9IHhmZXItPnJ4X2xlbjsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gdHJ1ZTsNCj4g K30NCj4gKw0KPiArc3RhdGljIHZvaWQgbndsX2RzaV9maW5pc2hfdHJhbnNtaXNzaW9uKHN0cnVj dCBud2xfZHNpICpkc2ksIHUzMg0KPiBzdGF0dXMpDQo+ICt7DQo+ICvCoMKgwqDCoMKgwqDCoHN0 cnVjdCBud2xfZHNpX3RyYW5zZmVyICp4ZmVyID0gZHNpLT54ZmVyOw0KPiArwqDCoMKgwqDCoMKg wqBib29sIGVuZF9wYWNrZXQgPSBmYWxzZTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBpZiAoIXhm ZXIpDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47DQo+ICsNCj4gK8Kg wqDCoMKgwqDCoMKgaWYgKHN0YXR1cyAmIE5XTF9EU0lfVFhfRklGT19PVkZMVykgew0KPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJPUl9SQVRFTElNSVRFRChkc2kt PmRldiwgInR4IGZpZm8NCj4gb3ZlcmZsb3dcbiIpOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmV0dXJuOw0KPiArwqDCoMKgwqDCoMKgwqB9DQo+ICsNCj4gK8KgwqDCoMKgwqDC oMKgaWYgKHN0YXR1cyAmIE5XTF9EU0lfSFNfVFhfVElNRU9VVCkgew0KPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJPUl9SQVRFTElNSVRFRChkc2ktPmRldiwgIkhT IHR4DQo+IHRpbWVvdXRcbiIpOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0 dXJuOw0KPiArwqDCoMKgwqDCoMKgwqB9DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgaWYgKHhmZXIt PmRpcmVjdGlvbiA9PSBEU0lfUEFDS0VUX1NFTkQgJiYNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqBzdGF0dXMgJiBOV0xfRFNJX1RYX1BLVF9ET05FKSB7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB4ZmVyLT5zdGF0dXMgPSB4ZmVyLT50eF9sZW47DQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBlbmRfcGFja2V0ID0gdHJ1ZTsNCj4gK8KgwqDCoMKgwqDCoMKgfSBl bHNlIGlmIChzdGF0dXMgJiBOV0xfRFNJX0RQSFlfRElSRUNUSU9OICYmDQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoKHN0YXR1cyAmIChOV0xfRFNJX1JYX1BLVF9IRFJf UkNWRCB8DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBOV0xfRFNJX1JYX1BLVF9QQVlMT0FEX0RBVEFfUkNWRCkpKSkgew0KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZW5kX3BhY2tldCA9IG53bF9kc2lfcmVhZF9w YWNrZXQoZHNpLCBzdGF0dXMpOw0KPiArwqDCoMKgwqDCoMKgwqB9DQo+ICsNCj4gK8KgwqDCoMKg wqDCoMKgaWYgKGVuZF9wYWNrZXQpDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBj b21wbGV0ZSgmeGZlci0+Y29tcGxldGVkKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgbnds X2RzaV9iZWdpbl90cmFuc21pc3Npb24oc3RydWN0IG53bF9kc2kgKmRzaSkNCj4gK3sNCj4gK8Kg wqDCoMKgwqDCoMKgc3RydWN0IG53bF9kc2lfdHJhbnNmZXIgKnhmZXIgPSBkc2ktPnhmZXI7DQo+ ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBtaXBpX2RzaV9wYWNrZXQgKnBrdCA9ICZ4ZmVyLT5wYWNr ZXQ7DQo+ICvCoMKgwqDCoMKgwqDCoGNvbnN0IHU4ICpwYXlsb2FkOw0KPiArwqDCoMKgwqDCoMKg wqBzaXplX3QgbGVuZ3RoOw0KPiArwqDCoMKgwqDCoMKgwqB1MTYgd29yZF9jb3VudDsNCj4gK8Kg wqDCoMKgwqDCoMKgdTggaHNfbW9kZTsNCj4gK8KgwqDCoMKgwqDCoMKgdTMyIHZhbDsNCj4gK8Kg wqDCoMKgwqDCoMKgdTMyIGhzX3dvcmthcm91bmQgPSAwOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDC oC8qIFNlbmQgdGhlIHBheWxvYWQsIGlmIGFueSAqLw0KPiArwqDCoMKgwqDCoMKgwqBsZW5ndGgg PSBwa3QtPnBheWxvYWRfbGVuZ3RoOw0KPiArwqDCoMKgwqDCoMKgwqBwYXlsb2FkID0gcGt0LT5w YXlsb2FkOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoHdoaWxlIChsZW5ndGggPj0gNCkgew0KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdmFsID0gKih1MzIgKilwYXlsb2FkOw0KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaHNfd29ya2Fyb3VuZCB8PSAhKHZhbCAmIDB4 RkZGRjAwKTsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG53bF9kc2lfd3JpdGUo ZHNpLCBOV0xfRFNJX1RYX1BBWUxPQUQsIHZhbCk7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBwYXlsb2FkICs9IDQ7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBs ZW5ndGggLT0gNDsNCj4gK8KgwqDCoMKgwqDCoMKgfQ0KPiArwqDCoMKgwqDCoMKgwqAvKiBTZW5k IHRoZSByZXN0IG9mIHRoZSBwYXlsb2FkICovDQo+ICvCoMKgwqDCoMKgwqDCoHZhbCA9IDA7DQo+ ICvCoMKgwqDCoMKgwqDCoHN3aXRjaCAobGVuZ3RoKSB7DQo+ICvCoMKgwqDCoMKgwqDCoGNhc2Ug MzoNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZhbCB8PSBwYXlsb2FkWzJdIDw8 IDE2Ow0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogRmFsbCB0aHJvdWdoICov DQo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgMjoNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHZhbCB8PSBwYXlsb2FkWzFdIDw8IDg7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBoc193b3JrYXJvdW5kIHw9ICEodmFsICYgMHhGRkZGMDApOw0KPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgLyogRmFsbCB0aHJvdWdoICovDQo+ICvCoMKgwqDCoMKgwqDCoGNh c2UgMToNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZhbCB8PSBwYXlsb2FkWzBd Ow0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbndsX2RzaV93cml0ZShkc2ksIE5X TF9EU0lfVFhfUEFZTE9BRCwgdmFsKTsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGJyZWFrOw0KPiArwqDCoMKgwqDCoMKgwqB9DQo+ICvCoMKgwqDCoMKgwqDCoHhmZXItPnR4X2xl biA9IHBrdC0+cGF5bG9hZF9sZW5ndGg7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgLyoNCj4gK8Kg wqDCoMKgwqDCoMKgwqAqIFNlbmQgdGhlIGhlYWRlcg0KPiArwqDCoMKgwqDCoMKgwqDCoCogaGVh ZGVyWzBdID0gVmlydHVhbCBDaGFubmVsICsgRGF0YSBUeXBlDQo+ICvCoMKgwqDCoMKgwqDCoMKg KiBoZWFkZXJbMV0gPSBXb3JkIENvdW50IExTQiAoTFApIG9yIGZpcnN0IHBhcmFtIChTUCkNCj4g K8KgwqDCoMKgwqDCoMKgwqAqIGhlYWRlclsyXSA9IFdvcmQgQ291bnQgTVNCIChMUCkgb3Igc2Vj b25kIHBhcmFtIChTUCkNCj4gK8KgwqDCoMKgwqDCoMKgwqAqLw0KPiArwqDCoMKgwqDCoMKgwqB3 b3JkX2NvdW50ID0gcGt0LT5oZWFkZXJbMV0gfCAocGt0LT5oZWFkZXJbMl0gPDwgOCk7DQo+ICvC oMKgwqDCoMKgwqDCoGlmIChoc193b3JrYXJvdW5kICYmIChkc2ktPnF1aXJrcyAmIEUxMTQxOF9I U19NT0RFX1FVSVJLKSkgew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RF Vl9ERUJVR19EUklWRVIoZHNpLT5kZXYsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiVXNpbmcgaHMgbW9k ZSB3b3JrYXJvdW5kIGZvcg0KPiBjbWQgMHgleFxuIiwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhmZXIt PmNtZCk7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBoc19tb2RlID0gMTsNCj4g K8KgwqDCoMKgwqDCoMKgfSBlbHNlIHsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGhzX21vZGUgPSAoeGZlci0+bXNnLT5mbGFncyAmIE1JUElfRFNJX01TR19VU0VfTFBNKSA/DQo+ IDAgOiAxOw0KPiArwqDCoMKgwqDCoMKgwqB9DQo+ICvCoMKgwqDCoMKgwqDCoHZhbCA9IE5XTF9E U0lfV0Mod29yZF9jb3VudCkgfCBOV0xfRFNJX1RYX1ZDKHhmZXItPm1zZy0NCj4gPmNoYW5uZWwp IHwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgTldMX0RTSV9UWF9EVCh4ZmVyLT5tc2ct PnR5cGUpIHwNCj4gTldMX0RTSV9IU19TRUwoaHNfbW9kZSkgfA0KPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBOV0xfRFNJX0JUQV9UWCh4ZmVyLT5uZWVkX2J0YSk7DQo+ICvCoMKgwqDCoMKg wqDCoG53bF9kc2lfd3JpdGUoZHNpLCBOV0xfRFNJX1BLVF9DT05UUk9MLCB2YWwpOw0KPiArDQo+ ICvCoMKgwqDCoMKgwqDCoC8qIFNlbmQgcGFja2V0IGNvbW1hbmQgKi8NCj4gK8KgwqDCoMKgwqDC oMKgbndsX2RzaV93cml0ZShkc2ksIE5XTF9EU0lfU0VORF9QQUNLRVQsIDB4MSk7DQo+ICt9DQo+ ICsNCj4gK3N0YXRpYyBzc2l6ZV90IG53bF9kc2lfaG9zdF90cmFuc2ZlcihzdHJ1Y3QgbWlwaV9k c2lfaG9zdCAqZHNpX2hvc3QsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25zdCBzdHJ1Y3QgbWlwaV9k c2lfbXNnICptc2cpDQo+ICt7DQo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBud2xfZHNpICpkc2kg PSBjb250YWluZXJfb2YoZHNpX2hvc3QsIHN0cnVjdCBud2xfZHNpLA0KPiBkc2lfaG9zdCk7DQo+ ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBud2xfZHNpX3RyYW5zZmVyIHhmZXI7DQo+ICvCoMKgwqDC oMKgwqDCoHNzaXplX3QgcmV0ID0gMDsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqAvKiBDcmVhdGUg cGFja2V0IHRvIGJlIHNlbnQgKi8NCj4gK8KgwqDCoMKgwqDCoMKgZHNpLT54ZmVyID0gJnhmZXI7 DQo+ICvCoMKgwqDCoMKgwqDCoHJldCA9IG1pcGlfZHNpX2NyZWF0ZV9wYWNrZXQoJnhmZXIucGFj a2V0LCBtc2cpOw0KPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0IDwgMCkgew0KPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZHNpLT54ZmVyID0gTlVMTDsNCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7DQo+ICvCoMKgwqDCoMKgwqDCoH0NCj4gKw0KPiAr wqDCoMKgwqDCoMKgwqBpZiAoKG1zZy0+dHlwZSAmIE1JUElfRFNJX0dFTkVSSUNfUkVBRF9SRVFV RVNUXzBfUEFSQU0gfHwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1zZy0+dHlwZSAmIE1J UElfRFNJX0dFTkVSSUNfUkVBRF9SRVFVRVNUXzFfUEFSQU0gfHwNCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoG1zZy0+dHlwZSAmIE1JUElfRFNJX0dFTkVSSUNfUkVBRF9SRVFVRVNUXzJfUEFS QU0gfHwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1zZy0+dHlwZSAmIE1JUElfRFNJX0RD U19SRUFEKSAmJg0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1zZy0+cnhfbGVuID4gMCAmJiBt c2ctPnJ4X2J1ZiAhPSBOVUxMKQ0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGZl ci5kaXJlY3Rpb24gPSBEU0lfUEFDS0VUX1JFQ0VJVkU7DQo+ICvCoMKgwqDCoMKgwqDCoGVsc2UN Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhmZXIuZGlyZWN0aW9uID0gRFNJX1BB Q0tFVF9TRU5EOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoHhmZXIubmVlZF9idGEgPSAoeGZlci5k aXJlY3Rpb24gPT0gRFNJX1BBQ0tFVF9SRUNFSVZFKTsNCj4gK8KgwqDCoMKgwqDCoMKgeGZlci5u ZWVkX2J0YSB8PSAobXNnLT5mbGFncyAmIE1JUElfRFNJX01TR19SRVFfQUNLKSA/IDEgOiAwOw0K PiArwqDCoMKgwqDCoMKgwqB4ZmVyLm1zZyA9IG1zZzsNCj4gK8KgwqDCoMKgwqDCoMKgeGZlci5z dGF0dXMgPSAtRVRJTUVET1VUOw0KPiArwqDCoMKgwqDCoMKgwqB4ZmVyLnJ4X3dvcmRfY291bnQg PSAwOw0KPiArwqDCoMKgwqDCoMKgwqB4ZmVyLnJ4X2xlbiA9IDA7DQo+ICvCoMKgwqDCoMKgwqDC oHhmZXIuY21kID0gMHgwMDsNCj4gK8KgwqDCoMKgwqDCoMKgaWYgKG1zZy0+dHhfbGVuID4gMCkN Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhmZXIuY21kID0gKCh1OCAqKShtc2ct PnR4X2J1ZikpWzBdOw0KPiArwqDCoMKgwqDCoMKgwqBpbml0X2NvbXBsZXRpb24oJnhmZXIuY29t cGxldGVkKTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqByZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUo ZHNpLT5yeF9lc2NfY2xrKTsNCj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCA8IDApIHsNCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWls ZWQgdG8gZW5hYmxlIHJ4X2VzYyBjbGs6DQo+ICV6ZFxuIiwNCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQpOw0KPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4gK8KgwqDCoMKgwqDCoMKgfQ0K PiArwqDCoMKgwqDCoMKgwqBEUk1fREVWX0RFQlVHX0RSSVZFUihkc2ktPmRldiwgIkVuYWJsZWQg cnhfZXNjIGNsayBAJWx1DQo+IEh6XG4iLA0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjbGtfZ2V0X3JhdGUoZHNpLT5yeF9lc2NfY2xr KSk7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgLyogSW5pdGlhdGUgdGhlIERTSSBwYWNrZXQgdHJh bnNtaXNpb24gKi8NCj4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV9iZWdpbl90cmFuc21pc3Npb24o ZHNpKTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGlt ZW91dCgmeGZlci5jb21wbGV0ZWQsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoE5XTF9EU0lf TUlQSV9GSUZPX1RJTUVPVVQpKQ0KPiB7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBEUk1fREVWX0VSUk9SKGRzaV9ob3N0LT5kZXYsICJbJTAyWF0gRFNJIHRyYW5zZmVyDQo+IHRp bWVkIG91dFxuIiwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB4ZmVyLmNtZCk7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZXQgPSAtRVRJTUVET1VUOw0KPiArwqDCoMKgwqDCoMKgwqB9IGVsc2Ugew0KPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0ID0geGZlci5zdGF0dXM7DQo+ICvCoMKgwqDC oMKgwqDCoH0NCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBjbGtfZGlzYWJsZV91bnByZXBhcmUoZHNp LT5yeF9lc2NfY2xrKTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Ow0KPiArfQ0K PiArDQo+ICtjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfaG9zdF9vcHMgbndsX2RzaV9ob3N0X29wcyA9 IHsNCj4gK8KgwqDCoMKgwqDCoMKgLmF0dGFjaCA9IG53bF9kc2lfaG9zdF9hdHRhY2gsDQo+ICvC oMKgwqDCoMKgwqDCoC5kZXRhY2ggPSBud2xfZHNpX2hvc3RfZGV0YWNoLA0KPiArwqDCoMKgwqDC oMKgwqAudHJhbnNmZXIgPSBud2xfZHNpX2hvc3RfdHJhbnNmZXIsDQo+ICt9Ow0KPiArDQo+ICtp cnFyZXR1cm5fdCBud2xfZHNpX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpDQo+ICt7 DQo+ICvCoMKgwqDCoMKgwqDCoHUzMiBpcnFfc3RhdHVzOw0KPiArwqDCoMKgwqDCoMKgwqBzdHJ1 Y3QgbndsX2RzaSAqZHNpID0gZGF0YTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBpcnFfc3RhdHVz ID0gbndsX2RzaV9yZWFkKGRzaSwgTldMX0RTSV9JUlFfU1RBVFVTKTsNCj4gKw0KPiArwqDCoMKg wqDCoMKgwqBpZiAoaXJxX3N0YXR1cyAmIE5XTF9EU0lfVFhfUEtUX0RPTkUgfHwNCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqBpcnFfc3RhdHVzICYgTldMX0RTSV9SWF9QS1RfSERSX1JDVkQgfHwN Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqBpcnFfc3RhdHVzICYgTldMX0RTSV9SWF9QS1RfUEFZ TE9BRF9EQVRBX1JDVkQpDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBud2xfZHNp X2ZpbmlzaF90cmFuc21pc3Npb24oZHNpLCBpcnFfc3RhdHVzKTsNCj4gKw0KPiArwqDCoMKgwqDC oMKgwqByZXR1cm4gSVJRX0hBTkRMRUQ7DQo+ICt9DQo+ICsNCj4gK2ludCBud2xfZHNpX2VuYWJs ZShzdHJ1Y3QgbndsX2RzaSAqZHNpKQ0KPiArew0KPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZGV2 aWNlICpkZXYgPSBkc2ktPmRldjsNCj4gK8KgwqDCoMKgwqDCoMKgdW5pb24gcGh5X2NvbmZpZ3Vy ZV9vcHRzICpwaHlfY2ZnID0gJmRzaS0+cGh5X2NmZzsNCj4gK8KgwqDCoMKgwqDCoMKgaW50IHJl dDsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqBpZiAoIWRzaS0+bGFuZXMpIHsNCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfRVJST1IoZGV2LCAiTmVlZCBEU0kgbGFuZXM6 ICVkXG4iLCBkc2ktDQo+ID5sYW5lcyk7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXR1cm4gLUVJTlZBTDsNCj4gK8KgwqDCoMKgwqDCoMKgfQ0KPiArDQo+ICvCoMKgwqDCoMKg wqDCoHJldCA9IHBoeV9pbml0KGRzaS0+cGh5KTsNCj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCA8 IDApIHsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9ERVZfRVJST1IoZGV2 LCAiRmFpbGVkIHRvIGluaXQgRFNJIHBoeTogJWRcbiIsDQo+IHJldCk7DQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Ow0KPiArwqDCoMKgwqDCoMKgwqB9DQo+ICsN Cj4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gcGh5X2NvbmZpZ3VyZShkc2ktPnBoeSwgcGh5X2NmZyk7 DQo+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKSB7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBjb25maWd1cmUgRFNJIHBo eToNCj4gJWRcbiIsIHJldCk7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gcmV0Ow0KPiArwqDCoMKgwqDCoMKgwqB9DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgcmV0ID0g Y2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+dHhfZXNjX2Nsayk7DQo+ICvCoMKgwqDCoMKgwqDCoGlm IChyZXQgPCAwKSB7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fREVWX0VS Uk9SKGRzaS0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSB0eF9lc2MgY2xrOg0KPiAlZFxuIiwNCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXQpOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4g K8KgwqDCoMKgwqDCoMKgfQ0KPiArwqDCoMKgwqDCoMKgwqBEUk1fREVWX0RFQlVHX0RSSVZFUihk c2ktPmRldiwgIkVuYWJsZWQgdHhfZXNjIGNsayBAJWx1DQo+IEh6XG4iLA0KPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjbGtfZ2V0X3Jh dGUoZHNpLT50eF9lc2NfY2xrKSk7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gbndsX2Rz aV9jb25maWdfaG9zdChkc2kpOw0KPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0IDwgMCkgew0KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQg dG8gc2V0IHVwIERTSTogJWQiLCByZXQpOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0dXJuIHJldDsNCj4gK8KgwqDCoMKgwqDCoMKgfQ0KPiArDQo+ICvCoMKgwqDCoMKgwqDC oHJldCA9IG53bF9kc2lfY29uZmlnX2RwaShkc2kpOw0KPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0 IDwgMCkgew0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFVl9FUlJPUihk ZXYsICJGYWlsZWQgdG8gc2V0IHVwIERQSTogJWQiLCByZXQpOw0KPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJldDsNCj4gK8KgwqDCoMKgwqDCoMKgfQ0KPiArDQo+ICvC oMKgwqDCoMKgwqDCoHJldCA9IHBoeV9wb3dlcl9vbihkc2ktPnBoeSk7DQo+ICvCoMKgwqDCoMKg wqDCoGlmIChyZXQgPCAwKSB7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1f REVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBwb3dlciBvbiBEUEhZICglZClcbiIsDQo+IHJldCk7 DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Ow0KPiArwqDCoMKg wqDCoMKgwqB9DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgbndsX2RzaV9pbml0X2ludGVycnVwdHMo ZHNpKTsNCj4gKw0KPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsNCj4gK30NCj4gKw0KPiAraW50 IG53bF9kc2lfZGlzYWJsZShzdHJ1Y3QgbndsX2RzaSAqZHNpKQ0KPiArew0KPiArwqDCoMKgwqDC oMKgwqBzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkc2ktPmRldjsNCj4gKw0KPiArwqDCoMKgwqDCoMKg wqBEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJEaXNhYmxpbmcgY2xvY2tzIGFuZCBwaHlcbiIp Ow0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoHBoeV9wb3dlcl9vZmYoZHNpLT5waHkpOw0KPiArwqDC oMKgwqDCoMKgwqBwaHlfZXhpdChkc2ktPnBoeSk7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgLyog RGlzYWJsaW5nIHRoZSBjbG9jayBiZWZvcmUgdGhlIHBoeSBicmVha3MgZW5hYmxpbmcgZHNpDQo+ IGFnYWluICovDQo+ICvCoMKgwqDCoMKgwqDCoGNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPnR4 X2VzY19jbGspOw0KPiArDQo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOw0KPiArfQ0KPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9ud2wtZHNpL253bC1kc2kuaA0KPiBiL2Ry aXZlcnMvZ3B1L2RybS9icmlkZ2UvbndsLWRzaS9ud2wtZHNpLmgNCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi41NzliMzY2ZGU2NTINCj4gLS0tIC9kZXYvbnVs bA0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL253bC1kc2kvbndsLWRzaS5oDQo+IEBA IC0wLDAgKzEsMTEyIEBADQo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsg Ki8NCj4gKy8qDQo+ICsgKiBOV0wgTUlQSSBEU0kgaG9zdCBkcml2ZXINCj4gKyAqDQo+ICsgKiBD b3B5cmlnaHQgKEMpIDIwMTcgTlhQDQo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTkgUHVyaXNtIFNQ Qw0KPiArICovDQo+ICsjaWZuZGVmIF9fTldMX0RTSV9IX18NCj4gKyNkZWZpbmUgX19OV0xfRFNJ X0hfXw0KPiArDQo+ICsjaW5jbHVkZSA8bGludXgvaXJxcmV0dXJuLmg+DQo+ICsNCj4gKyNpbmNs dWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+DQo+ICsNCj4gKyNpbmNsdWRlICJud2wtZHJ2LmgiDQo+ ICsNCj4gKy8qIERTSSBIT1NUIHJlZ2lzdGVycyAqLw0KPiArI2RlZmluZSBOV0xfRFNJX0NGR19O VU1fTEFORVPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDANCj4gKyNkZWZp bmUgTldMX0RTSV9DRkdfTk9OQ09OVElOVU9VU19DTEvCoMKgwqDCoMKgwqDCoMKgwqDCoDB4NA0K PiArI2RlZmluZSBOV0xfRFNJX0NGR19UX1BSRcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgMHg4DQo+ICsjZGVmaW5lIE5XTF9EU0lfQ0ZHX1RfUE9TVMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4Yw0KPiArI2RlZmluZSBOV0xfRFNJ X0NGR19UWF9HQVDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDEw DQo+ICsjZGVmaW5lIE5XTF9EU0lfQ0ZHX0FVVE9JTlNFUlRfRU9UUMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoDB4MTQNCj4gKyNkZWZpbmUgTldMX0RTSV9DRkdfRVhUUkFfQ01EU19BRlRFUl9FT1RQ wqDCoMKgwqDCoMKgMHgxOA0KPiArI2RlZmluZSBOV0xfRFNJX0NGR19IVFhfVE9fQ09VTlTCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDFjDQo+ICsjZGVmaW5lIE5XTF9EU0lfQ0ZHX0xS WF9IX1RPX0NPVU5UwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDIwDQo+ICsjZGVmaW5lIE5X TF9EU0lfQ0ZHX0JUQV9IX1RPX0NPVU5UwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDI0DQo+ ICsjZGVmaW5lIE5XTF9EU0lfQ0ZHX1RXQUtFVVDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgMHgyOA0KPiArI2RlZmluZSBOV0xfRFNJX0NGR19TVEFUVVNfT1VUwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MmMNCj4gKyNkZWZpbmUgTldMX0RTSV9SWF9F UlJPUl9TVEFUVVPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAweDMwDQo+ICsNCj4gKy8qIERTSSBEUEkgcmVnaXN0ZXJzICovDQo+ICsjZGVmaW5lIE5XTF9E U0lfUElYRUxfUEFZTE9BRF9TSVpFwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDIwMA0KPiAr I2RlZmluZSBOV0xfRFNJX1BJWEVMX0ZJRk9fU0VORF9MRVZFTMKgwqDCoMKgwqDCoMKgwqDCoMKg MHgyMDQNCj4gKyNkZWZpbmUgTldMX0RTSV9JTlRFUkZBQ0VfQ09MT1JfQ09ESU5HwqDCoMKgwqDC oMKgwqDCoMKgMHgyMDgNCj4gKyNkZWZpbmUgTldMX0RTSV9QSVhFTF9GT1JNQVTCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MjBjDQo+ICsjZGVmaW5lIE5XTF9EU0lfVlNZ TkNfUE9MQVJJVFnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyMTANCj4gKyNk ZWZpbmUgTldMX0RTSV9WU1lOQ19QT0xBUklUWV9BQ1RJVkVfTE9XwqDCoMKgwqDCoMKgMA0KPiAr I2RlZmluZSBOV0xfRFNJX1ZTWU5DX1BPTEFSSVRZX0FDVElWRV9ISUdIwqDCoMKgwqDCoEJJVCgx KQ0KPiArDQo+ICsjZGVmaW5lIE5XTF9EU0lfSFNZTkNfUE9MQVJJVFnCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgMHgyMTQNCj4gKyNkZWZpbmUgTldMX0RTSV9IU1lOQ19QT0xBUklU WV9BQ1RJVkVfTE9XwqDCoMKgwqDCoMKgMA0KPiArI2RlZmluZSBOV0xfRFNJX0hTWU5DX1BPTEFS SVRZX0FDVElWRV9ISUdIwqDCoMKgwqDCoEJJVCgxKQ0KPiArDQo+ICsjZGVmaW5lIE5XTF9EU0lf VklERU9fTU9ERcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MjE4 DQo+ICsjZGVmaW5lIE5XTF9EU0lfSEZQwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDIxYw0KPiArI2RlZmluZSBOV0xfRFNJX0hCUMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyMjAN Cj4gKyNkZWZpbmUgTldMX0RTSV9IU0HCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MjI0DQo+ICsjZGVmaW5lIE5XTF9EU0lfRU5BQkxFX01V TFRfUEtUU8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MjI4DQo+ICsjZGVmaW5lIE5X TF9EU0lfVkJQwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAweDIyYw0KPiArI2RlZmluZSBOV0xfRFNJX1ZGUMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyMzANCj4gKyNkZWZpbmUgTldM X0RTSV9CTExQX01PREXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oDB4MjM0DQo+ICsjZGVmaW5lIE5XTF9EU0lfVVNFX05VTExfUEtUX0JMTFDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgMHgyMzgNCj4gKyNkZWZpbmUgTldMX0RTSV9WQUNUSVZFwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4 MjNjDQo+ICsjZGVmaW5lIE5XTF9EU0lfVkPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyNDANCj4gKw0KPiArLyogRFNJIEFQQiBQS1Qg Y29udHJvbCAqLw0KPiArI2RlZmluZSBOV0xfRFNJX1RYX1BBWUxPQUTCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDI4MA0KPiArI2RlZmluZSBOV0xfRFNJX1BLVF9D T05UUk9MwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4Mjg0DQo+ICsj ZGVmaW5lIE5XTF9EU0lfU0VORF9QQUNLRVTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgMHgyODgNCj4gKyNkZWZpbmUgTldMX0RTSV9QS1RfU1RBVFVTwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyOGMNCj4gKyNkZWZpbmUgTldMX0RTSV9Q S1RfRklGT19XUl9MRVZFTMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDI5MA0KPiArI2Rl ZmluZSBOV0xfRFNJX1BLVF9GSUZPX1JEX0xFVkVMwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oDB4Mjk0DQo+ICsjZGVmaW5lIE5XTF9EU0lfUlhfUEFZTE9BRMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4Mjk4DQo+ICsjZGVmaW5lIE5XTF9EU0lfUlhfUEtUX0hF QURFUsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MjljDQo+ICsNCj4gKy8q IERTSSBJUlEgaGFuZGxpbmcgKi8NCj4gKyNkZWZpbmUgTldMX0RTSV9JUlFfU1RBVFVTwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgyYTANCj4gKyNkZWZpbmUgTldM X0RTSV9TTV9OT1RfSURMRcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBC SVQoMCkNCj4gKyNkZWZpbmUgTldMX0RTSV9UWF9QS1RfRE9ORcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoMSkNCj4gKyNkZWZpbmUgTldMX0RTSV9EUEhZX0RJUkVD VElPTsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoMikNCj4gKyNkZWZpbmUg TldMX0RTSV9UWF9GSUZPX09WRkxXwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg QklUKDMpDQo+ICsjZGVmaW5lIE5XTF9EU0lfVFhfRklGT19VREZMV8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoEJJVCg0KQ0KPiArI2RlZmluZSBOV0xfRFNJX1JYX0ZJRk9fT1ZG TFfCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoNSkNCj4gKyNkZWZpbmUg TldMX0RTSV9SWF9GSUZPX1VERkxXwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg QklUKDYpDQo+ICsjZGVmaW5lIE5XTF9EU0lfUlhfUEtUX0hEUl9SQ1ZEwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDcpDQo+ICsjZGVmaW5lIE5XTF9E U0lfUlhfUEtUX1BBWUxPQURfREFUQV9SQ1ZEwqDCoMKgwqDCoMKgwqBCSVQoOCkNCj4gKyNkZWZp bmUgTldMX0RTSV9CVEFfVElNRU9VVMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBCSVQoMjkpDQo+ICsjZGVmaW5lIE5XTF9EU0lfTFBfUlhfVElNRU9VVMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCgzMCkNCj4gKyNkZWZpbmUgTldMX0RTSV9IU19U WF9USU1FT1VUwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDMxKQ0KPiAr DQo+ICsjZGVmaW5lIE5XTF9EU0lfSVJRX1NUQVRVUzLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgMHgyYTQNCj4gKyNkZWZpbmUgTldMX0RTSV9TSU5HTEVfQklUX0VDQ19F UlLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCgwKQ0KPiArI2RlZmluZSBOV0xfRFNJX01V TFRJX0JJVF9FQ0NfRVJSwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCgxKQ0KPiArI2Rl ZmluZSBOV0xfRFNJX0NSQ19FUlLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDIpDQo+ICsNCj4gKyNkZWZpbmUgTldMX0RT SV9JUlFfTUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAw eDJhOA0KPiArI2RlZmluZSBOV0xfRFNJX1NNX05PVF9JRExFX01BU0vCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBCSVQoMCkNCj4gKyNkZWZpbmUgTldMX0RTSV9UWF9QS1RfRE9ORV9NQVNL wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDEpDQo+ICsjZGVmaW5lIE5XTF9EU0lf RFBIWV9ESVJFQ1RJT05fTUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCgyKQ0KPiArI2Rl ZmluZSBOV0xfRFNJX1RYX0ZJRk9fT1ZGTFdfTUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg QklUKDMpDQo+ICsjZGVmaW5lIE5XTF9EU0lfVFhfRklGT19VREZMV19NQVNLwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBCSVQoNCkNCj4gKyNkZWZpbmUgTldMX0RTSV9SWF9GSUZPX09WRkxXX01B U0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCg1KQ0KPiArI2RlZmluZSBOV0xfRFNJX1JY X0ZJRk9fVURGTFdfTUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDYpDQo+ICsjZGVm aW5lIE5XTF9EU0lfUlhfUEtUX0hEUl9SQ1ZEX01BU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklU KDcpDQo+ICsjZGVmaW5lIE5XTF9EU0lfUlhfUEtUX1BBWUxPQURfREFUQV9SQ1ZEX01BU0vCoMKg QklUKDgpDQo+ICsjZGVmaW5lIE5XTF9EU0lfQlRBX1RJTUVPVVRfTUFTS8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoEJJVCgyOSkNCj4gKyNkZWZpbmUgTldMX0RTSV9MUF9SWF9USU1FT1VU X01BU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCgzMCkNCj4gKyNkZWZpbmUgTldMX0RT SV9IU19UWF9USU1FT1VUX01BU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCgzMSkNCj4g Kw0KPiArI2RlZmluZSBOV0xfRFNJX0lSUV9NQVNLMsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgMHgyYWMNCj4gKyNkZWZpbmUgTldMX0RTSV9TSU5HTEVfQklUX0VD Q19FUlJfTUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDApDQo+ICsjZGVm aW5lIE5XTF9EU0lfTVVMVElfQklUX0VDQ19FUlJfTUFTS8KgwqDCoMKgwqDCoMKgwqDCoEJJVCgx KQ0KPiArI2RlZmluZSBOV0xfRFNJX0NSQ19FUlJfTUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgQklUKDIpDQo+ICsNCj4gK2V4dGVybiBjb25zdCBzdHJ1Y3QgbWlwaV9k c2lfaG9zdF9vcHMgbndsX2RzaV9ob3N0X29wczsNCj4gKw0KPiAraXJxcmV0dXJuX3QgbndsX2Rz aV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKTsNCj4gK2ludCBud2xfZHNpX2VuYWJs ZShzdHJ1Y3QgbndsX2RzaSAqZHNpKTsNCj4gK2ludCBud2xfZHNpX2Rpc2FibGUoc3RydWN0IG53 bF9kc2kgKmRzaSk7DQo+ICsNCj4gKyNlbmRpZiAvKiBfX05XTF9EU0lfSF9fICovDQo+IC0tDQo+ IDIuMjAuMQ0KPiANCj4gDQpCZXN0IHJlZ2FyZHMsDQpSb2JlcnQKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxp c3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZy YWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=