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 Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 93527C433F5 for ; Thu, 19 May 2022 03:43:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233274AbiESDnG (ORCPT ); Wed, 18 May 2022 23:43:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56920 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231445AbiESDm6 (ORCPT ); Wed, 18 May 2022 23:42:58 -0400 Received: from APC01-TYZ-obe.outbound.protection.outlook.com (mail-tyzapc01on2132.outbound.protection.outlook.com [40.107.117.132]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AE49C6E8D6; Wed, 18 May 2022 20:42:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JMUzEZ3NUz3V00SU7zCoNXbaSZFXSRCCjgYIxaE270FhY64r/XF1QwwjIkoeOwW82laovwXXVUqzJtdRNkUuo087of1k9g/Oy5EkOy4dEdzxAz4mComG74rFGlh8FJyOXjLYODEISNShHeVQtTvJy+EquuYZsH7t/gT2+hnyO38V2VpA/qoSAf09Ndp3xqDjN06DdSSFuuku7+srUGkAHDMfOyuJb7lSH3+yS0o/paTL8FzrTM+uNXqgJpIidgn5kST6Bwrsmmh/O7V+00QqC5O13Wz2b97JmHgIDty/j2+mvQeQbF8NZQXDUihwYAjpCHNjAPd29HOCk35RU3sVvw== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=vMClzoIu4V6KkMZ6lQev1kLwRJGQtcsluxmEKLL/684=; b=be8ahF5AqDUzR6q5qOGjeJGUdQKIaHlUBG/r5IWkZf44siWO7FBfIzlM5RK4twuhZkE1bo1JNgJQXmN0ZlkTWFSZboplP4ih85iBsVMAutOiZq1AuM9htz7mkZtbR79G8lq1mH0/NOUlH/dv6qiszBzNwtH1FhCOkiQDZcMwckC4Zvwr5N9Apvb66sifw2kTTBkylWbrVoRRftAo7X4JYicTuEqJZtX5w3d/9e1FQMWb7iD3oKCtnjOsNESyCeeJv8cIK7ZyaLE2UDmCsnkdl1a3aAMe+tjYGKq4tYTIrWkEhKzEKMR6bvC6h6x/Yt2WId5hB+KS60pSHAPLiv3hbQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=aspeedtech.com; dmarc=pass action=none header.from=aspeedtech.com; dkim=pass header.d=aspeedtech.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aspeedtech.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=vMClzoIu4V6KkMZ6lQev1kLwRJGQtcsluxmEKLL/684=; b=dsWucRurT4/ba9IayvHwOM78MYKj+ZfglBr3zcz5Npa0YRj/WECvypVgIynR4mR9w6g3b+xNy4CyN5B0jxsu00510WTKQwQMw/QdOZgeGQK+HzKFslmqPtUtNU1Z+wwaVMEc/5OltnLIGa9IPwuoGJrB9Ekaf/v+NIQbuPqTxyA4G9074UgpJ5qiKVt6XgPcdIisEgLeoEUaSIwY6NWNXByI+WVGQeWvMloBdFH3C0EomMjmJxsZLQq8eRpfyf/F3ekixbktTUOWTbaShcSnBnd78U3QyxwwF8zT9ffkovpWgNJVJxCMKSZPoCNlI9Q+9fOoI1eVHkFcbq9V2Kq0LQ== Received: from HK0PR06MB3779.apcprd06.prod.outlook.com (2603:1096:203:b8::10) by SI2PR06MB4583.apcprd06.prod.outlook.com (2603:1096:4:143::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5273.14; Thu, 19 May 2022 03:42:47 +0000 Received: from HK0PR06MB3779.apcprd06.prod.outlook.com ([fe80::5058:cb66:c181:f869]) by HK0PR06MB3779.apcprd06.prod.outlook.com ([fe80::5058:cb66:c181:f869%5]) with mapi id 15.20.5273.014; Thu, 19 May 2022 03:42:47 +0000 From: ChiaWei Wang To: Christophe JAILLET CC: "a.kartashev@yadro.com" , "andrew@aj.id.au" , "devicetree@vger.kernel.org" , "dphadke@linux.microsoft.com" , "jk@codeconstruct.com.au" , "joel@jms.id.au" , "linux-arm-kernel@lists.infradead.org" , "linux-aspeed@lists.ozlabs.org" , "linux-kernel@vger.kernel.org" , "lkp@intel.com" , "openbmc@lists.ozlabs.org" , "patrick.rudolph@9elements.com" , "robh+dt@kernel.org" , Ryan Chen Subject: RE: [PATCH v5 3/4] soc: aspeed: Add eSPI driver Thread-Topic: [PATCH v5 3/4] soc: aspeed: Add eSPI driver Thread-Index: AQHYaL/mgFQag8NhWUe4UBmcBi5EoK0lBQ8AgACIhVA= Date: Thu, 19 May 2022 03:42:47 +0000 Message-ID: References: <20220516005412.4844-1-chiawei_wang@aspeedtech.com> <20220516005412.4844-4-chiawei_wang@aspeedtech.com> <56bb279d-ad87-7dfb-ed1f-fede14f5a6f3@wanadoo.fr> In-Reply-To: <56bb279d-ad87-7dfb-ed1f-fede14f5a6f3@wanadoo.fr> Accept-Language: zh-TW, en-US Content-Language: zh-TW X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=aspeedtech.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 33e49126-2056-4ecd-812b-08da3949a40b x-ms-traffictypediagnostic: SI2PR06MB4583:EE_ x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: kc2BvRaBWS1J+FAVqJ/hu/P/aiv88SGC1qcQj6Ah1JKLUoYw+hXM4p94BDaXY9X82QbDDwo9by+QVEdSMAhv0kwpnfvHpAC4/EfMHDzPwztdnbTMgIYz/e/QtA5IXkO/eNw0fA5ZJhA9Fb5B9SUBiYZEMw47odSRTUf0jKs6zgBXJYnOhg+qkNp1qMv5mYsTQO8UFgnVt0UPyFt3F1eKNxy6FRldmWdjMe5Bt4H/KKXGTvVwd3v6UoKSZrMCFpcoccjdj6d48YgXpg8bKSMP+jW++wdlG5J1Dv5ZAuAV5Jr1akDRbQJkb7D8E7ToWERPDHgOPWL/cLGCwE2pVtzT+yvBC4ZV9zTS5T0/lu5OznIAwyoGd6sQk/h8q5i9ln2z8R7KaqnTvZO7dFzjtfql21y483iJooVhFR8Ft1xssKxlvg+mWFIrX+yZ6BX+osim94xnHYppWJCMSZo0uucoG1OuhHJlih55MOB66d8R5uvsh+ZJaWTdUMdJUDF2rNdwe9NOWamwS/j6Kh7eKB1Gtr6hRNH6BIII3UYTRbCacaf2oAZjGtpN+ILnxfh5GMh3JTxd7MP+FHSWl1pPogfoihyl7a8664cbXm7OuW6AIWSrw8bObBrM1fOIK58XGFNirVT22+5cjJHSY2NGI8gCUe7LzVqLHFUfFfzQqRfXBf4AtXS5X3LcYjmdR4EnH+uTfuZ6hECSakazlaXm+VStkLP9Z7xZmWi/h/kB9jZy9iCYsKod+rSn3wmi3eGtZ6c+ydknuviYonS+3YUM229pmFD1fHQ7I1dieHItNy6rK5k= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:HK0PR06MB3779.apcprd06.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(376002)(346002)(39830400003)(136003)(396003)(316002)(2906002)(7416002)(5660300002)(52536014)(122000001)(186003)(54906003)(38070700005)(6916009)(83380400001)(107886003)(55016003)(33656002)(66574015)(86362001)(7696005)(30864003)(38100700002)(66946007)(966005)(9686003)(71200400001)(76116006)(8936002)(4326008)(8676002)(41300700001)(64756008)(6506007)(66476007)(66556008)(26005)(66446008)(508600001)(579004)(559001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?ZWpCRGw3THdYRUpKdWdXcXRLaWpHQWt4bkpSOU1TYlBqU2k3eWx0NXJFOXhW?= =?utf-8?B?dHhGMWZDREdGSHlha1ZzTFRoak8xU1VxeTZjUHRmOXMzOVBkN2lyWGtWbG9Q?= =?utf-8?B?cFpZWUdGRzlOaFZ0bmxraHYwZTNXVFY0NkYxVHRlK1QyT1V4Y0VmN3lpRG1I?= =?utf-8?B?a1VudldYcWF1MkVNZ0h1R0s5ajBCUVczUWlSdG03enRwM3VmK0dGUWdqK0Ru?= =?utf-8?B?QU1XOFNjbGhmYW5LOGZLbTJSaGdtdURIWjdIcnlNb2dQU0srYmNlMGtYRUVu?= =?utf-8?B?MnQvL3luZnRaREdNVWdUQ0lTY09WT1pzcUFrVTR3aHhNY3pPaWdNY3R5cmpl?= =?utf-8?B?SmJPOHJBY2RzYkdSdVVnL015dWhKaFlsYU41ejVmQmx4UHpLVG55bnlyeVVV?= =?utf-8?B?ZlRhSUM1dDRIYnZ4bWhpV21TN3dqVUcrWmtLb2x1czVmSnVzWTdQU3UzZjNM?= =?utf-8?B?TXM2NDIxY2ZnTFhrNzdQcXVkbVhSVXR6eEZ4RTl4cUZ5V3pPTWlYNVVRUVFE?= =?utf-8?B?NjJIZTZvUERSdjJmamJMdzFtU3FjRTI0TzI5NXcwNVQ2U050d2x3STBGWGZF?= =?utf-8?B?T09JRlJPN01WNmxuYVhiTjVINlg1MVN2VmdCaGR2ZEpPSkd4ODhLWk9rTXIr?= =?utf-8?B?M0N2TjYzM1huYU50amh0TkNPR1FRSk5jSWdldTIzSVdoekNlTmNadnB6cHBK?= =?utf-8?B?MUg0VjhsU0VLRmRXTjh5S0Q3ekxveFRTeHBpUDB6d1JXVERHdWhMczQvRk1R?= =?utf-8?B?a1RLaUZuOXZqY3lNdWxUbjB1UUsvQjJrVG52RTRmVm1HOWVTME95TWh5VVRP?= =?utf-8?B?Q2pEVUFoYjNiQzVRZEZ4c05YVFhhSkhBWVRwdTljV3cwMzB5aUZNRXM0V1Er?= =?utf-8?B?eWpmckZXWXdlMGp4SHJrT1BsaGtaNmVxdFFIWVhvekJVSTIzWTNZQ1VvSm5W?= =?utf-8?B?TENwY0lRVjY2TWZhcFhvU213MVZDUGdIcjFoR25NUlNZNU9pQnJRb1gwcFZ0?= =?utf-8?B?TUs0RThLRit2TEhJR0xTVDA0N1lObkJOQUNMQUtwSWo1MG1yVFNyOXVyVFpv?= =?utf-8?B?dTAwRDBFa3VyVktoQ2RyVVluWDgxYjVIMTNTZEY0WEhHWkNTL20rYWxQNnEv?= =?utf-8?B?UXdzYnZET2JxcVFKRXpPbDlEdHA3MzNxQnFIam83Ykhrb000dzVsMEEyWkR3?= =?utf-8?B?ZCt4dWdndlF3T0gzRWVzS21oT3AySW9jSndaUTJHUExUUjFEUENIR1lSNGdN?= =?utf-8?B?YjZCcnJCaTVNZy9hQWQyVSt0ZXdVWERaUGNkY3hpNkxwQStSU2RHSXpBVW03?= =?utf-8?B?RDRDa1lXZXFiQlZETWRGdGxSaEtEQ0lyaFdkUDNpRWNaejNYTXkyYWpNWFdu?= =?utf-8?B?bkM5Y0JEcFR2OU9Fb2lSRGpZS3VnLzI4MDI1MFBGMDB3U2U5ZWZiU1hUVVI0?= =?utf-8?B?L3NEckZqWFB4dk9yMVlIcTlSSWcyaXMvR2FoR04rTFJHOGNSMTd6bS90WGtO?= =?utf-8?B?UFYrQW5wRW9VRFZSQ3QxSkJHSDlQMGtDRGpidUVLd0NrSU0rODhYTndQcGE3?= =?utf-8?B?OUI1cXhLMHFic0Izb2lnSVlnc1hLR3R5TUNXSDFybXhMNVRxVjNjQi8zUVZT?= =?utf-8?B?b2tMSGVITVVNUzFDV3NSK0QxN2U5NmtKS1F4eG5iU2g2N2w2ZTNjR3BQSTNX?= =?utf-8?B?aHBJWVBncHFSSWg3NW9GVlp3bk83MVlMK1BDQmt0L04wWXpxTGtMdm4yWU9K?= =?utf-8?B?dVlXODlIaUNIdE13amdxUldNdlRTd2kwK2FiVFFVNU5MMlpwTDlDQi8zYXd1?= =?utf-8?B?NGk1WERQMUd2RVZ2Rndja1haUEZLRWo5Ny9WTSt6am4xZy9VdnVUdmZaNHZS?= =?utf-8?B?N2dIWGNnakQ4enBCQlBvaWhCUFNpeXpNYTVMSUpDZ1krZW5iMWNEbnBteXFz?= =?utf-8?B?bWNWKzU1MnZMUkVYb3VJNHhIUnFadXhpQkVEQUNLT3A5UHh5TUdkYlZsRkdn?= =?utf-8?B?ajdtL1kwRnhwbTRZNTR6bVFmd2JJU3g1ZDg4Mi9sUHlGN21aNXRibHozTkw2?= =?utf-8?B?Wk1NQytrRi9Eb0k0dXMrWFNZYVdtOGwzRVdVbmM2ZXJrVFZPL25HZHlXMGUz?= =?utf-8?B?eHNWNE1QZ3N5dVVTTWVsREZMaXRMS2NveWpqa3p5TGpXajdhVUs5ZW83OTRk?= =?utf-8?B?dTBOVkVjK1JuU002blk0SCtNcG9SWktxc1BGeDB2ZmV0WSt3M3YvZDMrRmxE?= =?utf-8?B?aXU3eWRoeGRRaDJDZ0FGdmZTOEQyUjJIU1RKMkc5Y1RUQW5kZ1B0Sk00YURE?= =?utf-8?B?WEh4TGp2TjBQcGlIbzNyK1ZjMk16Z05pUlN1VEswMG9HR1E2NjFObE54RjRM?= =?utf-8?Q?lmRWYUH56h5n8WiA=3D?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: aspeedtech.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: HK0PR06MB3779.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 33e49126-2056-4ecd-812b-08da3949a40b X-MS-Exchange-CrossTenant-originalarrivaltime: 19 May 2022 03:42:47.3491 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43d4aa98-e35b-4575-8939-080e90d5a249 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: z3wZpgVd7su4lPCmSXV6aU2xG5M4UGt1c+Auh8W0YAiDRuh9YJekrnXJEh3egpMtf24QyG7+aoZie6RmzTjmWLANhTozZAO0a8f5yXklPR8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SI2PR06MB4583 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org PiBGcm9tOiBDaHJpc3RvcGhlIEpBSUxMRVQgPGNocmlzdG9waGUuamFpbGxldEB3YW5hZG9vLmZy Pg0KPiBTZW50OiBUaHVyc2RheSwgTWF5IDE5LCAyMDIyIDM6MTMgQU0NCj4gDQo+IEhpLA0KPiAN Cj4gaW5saW5lIGEgZmV3IGNvbW1lbnRzIGFib3V0IHJlc291cmNlcyBub3QgZnJlZWQgaW4gZXJy b3IgaGFuZGxpbmcgcGF0aHMNCj4gaW4gY2FzZSBpdCBoZWxwcy4NCj4gDQo+IENKDQo+IA0KPiBM ZSAxNi8wNS8yMDIyIMOgIDAyOjU0LCBDaGlhLVdlaSBXYW5nIGEgw6ljcml0wqA6DQo+ID4gVGhl IEFzcGVlZCBlU1BJIGNvbnRyb2xsZXIgaXMgc2xhdmUgZGV2aWNlIHRvIGNvbW11bmljYXRlIHdp dGgNCj4gPiB0aGUgbWFzdGVyIHRocm91Z2ggdGhlIEVuaGFuY2VkIFNlcmlhbCBQZXJpcGhlcmFs IEludGVyZmFjZSAoZVNQSSkuDQo+ID4gQWxsIG9mIHRoZSBmb3VyIGVTUEkgY2hhbm5lbHMsIG5h bWVseSBwZXJpcGhlcmFsLCB2aXJ0dWFsIHdpcmUsDQo+ID4gb3V0LW9mLWJhbmQsIGFuZCBmbGFz aCBhcmUgc3VwcG9ydGVkLg0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogQ2hpYS1XZWkgV2FuZw0K PiA8Y2hpYXdlaV93YW5nLVNBbFhEbUFubU9BcURKNmRvKy9TYVFAcHVibGljLmdtYW5lLm9yZz4N Cj4gPiBSZXBvcnRlZC1ieToga2VybmVsIHRlc3Qgcm9ib3QNCj4gPGxrcC1yYWwySlFDcmh1RUF2 eHRpdU13eDN3QHB1YmxpYy5nbWFuZS5vcmc+DQo+ID4gLS0tDQo+ID4gICBkcml2ZXJzL3NvYy9h c3BlZWQvS2NvbmZpZyAgICAgICAgICAgICB8ICAxMSArDQo+ID4gICBkcml2ZXJzL3NvYy9hc3Bl ZWQvTWFrZWZpbGUgICAgICAgICAgICB8ICAgNSArDQo+ID4gICBkcml2ZXJzL3NvYy9hc3BlZWQv YXNwZWVkLWVzcGktY3RybC5jICB8IDIxNCArKysrKysrKysrDQo+ID4gICBkcml2ZXJzL3NvYy9h c3BlZWQvYXNwZWVkLWVzcGktY3RybC5oICB8IDMwOSArKysrKysrKysrKysrKw0KPiA+ICAgZHJp dmVycy9zb2MvYXNwZWVkL2FzcGVlZC1lc3BpLWZsYXNoLmMgfCAzNTIgKysrKysrKysrKysrKysr Kw0KPiA+ICAgZHJpdmVycy9zb2MvYXNwZWVkL2FzcGVlZC1lc3BpLWZsYXNoLmggfCAgNDUgKysN Cj4gPiAgIGRyaXZlcnMvc29jL2FzcGVlZC9hc3BlZWQtZXNwaS1pb2MuaCAgIHwgMTk1ICsrKysr KysrKw0KPiA+ICAgZHJpdmVycy9zb2MvYXNwZWVkL2FzcGVlZC1lc3BpLW9vYi5jICAgfCA1NTgN Cj4gKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiA+ICAgZHJpdmVycy9zb2MvYXNwZWVkL2Fz cGVlZC1lc3BpLW9vYi5oICAgfCAgNzAgKysrKw0KPiA+ICAgZHJpdmVycy9zb2MvYXNwZWVkL2Fz cGVlZC1lc3BpLXBlcmlmLmMgfCA1MTEgKysrKysrKysrKysrKysrKysrKysrKw0KPiA+ICAgZHJp dmVycy9zb2MvYXNwZWVkL2FzcGVlZC1lc3BpLXBlcmlmLmggfCAgNDUgKysNCj4gPiAgIGRyaXZl cnMvc29jL2FzcGVlZC9hc3BlZWQtZXNwaS12dy5jICAgIHwgMTQyICsrKysrKysNCj4gPiAgIGRy aXZlcnMvc29jL2FzcGVlZC9hc3BlZWQtZXNwaS12dy5oICAgIHwgIDIxICsNCj4gPiAgIDEzIGZp bGVzIGNoYW5nZWQsIDI0NzggaW5zZXJ0aW9ucygrKQ0KPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvc29jL2FzcGVlZC9hc3BlZWQtZXNwaS1jdHJsLmMNCj4gPiAgIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL3NvYy9hc3BlZWQvYXNwZWVkLWVzcGktY3RybC5oDQo+ID4gICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zb2MvYXNwZWVkL2FzcGVlZC1lc3BpLWZsYXNoLmMNCj4g PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3NvYy9hc3BlZWQvYXNwZWVkLWVzcGktZmxh c2guaA0KPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc29jL2FzcGVlZC9hc3BlZWQt ZXNwaS1pb2MuaA0KPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc29jL2FzcGVlZC9h c3BlZWQtZXNwaS1vb2IuYw0KPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc29jL2Fz cGVlZC9hc3BlZWQtZXNwaS1vb2IuaA0KPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv c29jL2FzcGVlZC9hc3BlZWQtZXNwaS1wZXJpZi5jDQo+ID4gICBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9zb2MvYXNwZWVkL2FzcGVlZC1lc3BpLXBlcmlmLmgNCj4gPiAgIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL3NvYy9hc3BlZWQvYXNwZWVkLWVzcGktdncuYw0KPiA+ICAgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvc29jL2FzcGVlZC9hc3BlZWQtZXNwaS12dy5oDQo+ID4NCj4g PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MvYXNwZWVkL0tjb25maWcgYi9kcml2ZXJzL3NvYy9h c3BlZWQvS2NvbmZpZw0KPiA+IGluZGV4IGY1NzllZTBiNWFmYS4uYjU2NDE0ZGMwNzQzIDEwMDY0 NA0KPiA+IC0tLSBhL2RyaXZlcnMvc29jL2FzcGVlZC9LY29uZmlnDQo+ID4gKysrIGIvZHJpdmVy cy9zb2MvYXNwZWVkL0tjb25maWcNCj4gPiBAQCAtNTIsNiArNTIsMTcgQEAgY29uZmlnIEFTUEVF RF9TT0NJTkZPDQo+ID4gICAJaGVscA0KPiA+ICAgCSAgU2F5IHllcyB0byBzdXBwb3J0IGRlY29k aW5nIG9mIEFTUEVFRCBCTUMgaW5mb3JtYXRpb24uDQo+ID4NCj4gPiArY29uZmlnIEFTUEVFRF9F U1BJDQo+ID4gKwlib29sICJBU1BFRUQgZVNQSSBzbGF2ZSBkcml2ZXIiDQo+ID4gKwlzZWxlY3Qg UkVHTUFQDQo+ID4gKwlzZWxlY3QgTUZEX1NZU0NPTg0KPiA+ICsJZGVmYXVsdCBuDQo+ID4gKwlo ZWxwDQo+ID4gKwkgIEVuYWJsZSBkcml2ZXIgc3VwcG9ydCBmb3IgdGhlIEFzcGVlZCBlU1BJIGVu Z2luZS4gVGhlIGVTUEkgZW5naW5lDQo+ID4gKwkgIHBsYXlzIGFzIGEgc2xhdmUgZGV2aWNlIGlu IEJNQyB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBIb3N0IG92ZXINCj4gPiArCSAgdGhlIGVTUEkg aW50ZXJmYWNlLiBUaGUgZm91ciBlU1BJIGNoYW5uZWxzLCBuYW1lbHkgcGVyaXBoZXJhbCwNCj4g PiArCSAgdmlydHVhbCB3aXJlLCBvdXQtb2YtYmFuZCwgYW5kIGZsYXNoIGFyZSBzdXBwb3J0ZWQu DQo+ID4gKw0KPiA+ICAgZW5kbWVudQ0KPiA+DQo+ID4gICBlbmRpZg0KPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL3NvYy9hc3BlZWQvTWFrZWZpbGUgYi9kcml2ZXJzL3NvYy9hc3BlZWQvTWFrZWZp bGUNCj4gPiBpbmRleCBiMzVkNzQ1OTI5NjQuLjFiYzQzM2JlN2U5MyAxMDA2NDQNCj4gPiAtLS0g YS9kcml2ZXJzL3NvYy9hc3BlZWQvTWFrZWZpbGUNCj4gPiArKysgYi9kcml2ZXJzL3NvYy9hc3Bl ZWQvTWFrZWZpbGUNCj4gPiBAQCAtNCwzICs0LDggQEAgb2JqLSQoQ09ORklHX0FTUEVFRF9MUENf U05PT1ApCQkrPQ0KPiBhc3BlZWQtbHBjLXNub29wLm8NCj4gPiAgIG9iai0kKENPTkZJR19BU1BF RURfVUFSVF9ST1VUSU5HKQkrPSBhc3BlZWQtdWFydC1yb3V0aW5nLm8NCj4gPiAgIG9iai0kKENP TkZJR19BU1BFRURfUDJBX0NUUkwpCQkrPSBhc3BlZWQtcDJhLWN0cmwubw0KPiA+ICAgb2JqLSQo Q09ORklHX0FTUEVFRF9TT0NJTkZPKQkJKz0gYXNwZWVkLXNvY2luZm8ubw0KPiA+ICtvYmotJChD T05GSUdfQVNQRUVEX0VTUEkpCQkrPSBhc3BlZWQtZXNwaS1jdHJsLm8gXA0KPiA+ICsJCQkJCSAg IGFzcGVlZC1lc3BpLXBlcmlmLm8gXA0KPiA+ICsJCQkJCSAgIGFzcGVlZC1lc3BpLXZ3Lm8gXA0K PiA+ICsJCQkJCSAgIGFzcGVlZC1lc3BpLW9vYi5vIFwNCj4gPiArCQkJCQkgICBhc3BlZWQtZXNw aS1mbGFzaC5vDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL2FzcGVlZC9hc3BlZWQtZXNw aS1jdHJsLmMNCj4gYi9kcml2ZXJzL3NvYy9hc3BlZWQvYXNwZWVkLWVzcGktY3RybC5jDQo+ID4g bmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLmNlMjk2N2Y4NTFm Mg0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL3NvYy9hc3BlZWQvYXNwZWVk LWVzcGktY3RybC5jDQo+ID4gQEAgLTAsMCArMSwyMTQgQEANCj4gPiArLy8gU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjArDQo+ID4gKy8qDQo+ID4gKyAqIENvcHlyaWdodCAyMDIxIEFz cGVlZCBUZWNobm9sb2d5IEluYy4NCj4gPiArICovDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pby5o Pg0KPiA+ICsjaW5jbHVkZSA8bGludXgvaXJxLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9jbGsu aD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgv b2ZfZGV2aWNlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4NCj4gPiArI2lu Y2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbWlz Y2RldmljZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4NCj4gPiArI2lu Y2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5o Pg0KPiA+ICsjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgv dm1hbGxvYy5oPg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgImFzcGVlZC1lc3BpLWlvYy5oIg0KPiA+ ICsjaW5jbHVkZSAiYXNwZWVkLWVzcGktY3RybC5oIg0KPiA+ICsjaW5jbHVkZSAiYXNwZWVkLWVz cGktcGVyaWYuaCINCj4gPiArI2luY2x1ZGUgImFzcGVlZC1lc3BpLXZ3LmgiDQo+ID4gKyNpbmNs dWRlICJhc3BlZWQtZXNwaS1vb2IuaCINCj4gPiArI2luY2x1ZGUgImFzcGVlZC1lc3BpLWZsYXNo LmgiDQo+ID4gKw0KPiA+ICsjZGVmaW5lIERFVklDRV9OQU1FICJhc3BlZWQtZXNwaS1jdHJsIg0K PiA+ICsNCj4gPiArc3RhdGljIGlycXJldHVybl90IGFzcGVlZF9lc3BpX2N0cmxfaXNyKGludCBp cnEsIHZvaWQgKmFyZykNCj4gPiArew0KPiA+ICsJdWludDMyX3Qgc3RzOw0KPiA+ICsJc3RydWN0 IGFzcGVlZF9lc3BpX2N0cmwgKmVzcGlfY3RybCA9IChzdHJ1Y3QgYXNwZWVkX2VzcGlfY3RybCAq KWFyZzsNCj4gPiArDQo+ID4gKwlyZWdtYXBfcmVhZChlc3BpX2N0cmwtPm1hcCwgRVNQSV9JTlRf U1RTLCAmc3RzKTsNCj4gPiArDQo+ID4gKwlpZiAoc3RzICYgRVNQSV9JTlRfU1RTX1BFUklGX0JJ VFMpIHsNCj4gPiArCQlhc3BlZWRfZXNwaV9wZXJpZl9ldmVudChzdHMsIGVzcGlfY3RybC0+cGVy aWYpOw0KPiA+ICsJCXJlZ21hcF93cml0ZShlc3BpX2N0cmwtPm1hcCwgRVNQSV9JTlRfU1RTLCBz dHMgJg0KPiBFU1BJX0lOVF9TVFNfUEVSSUZfQklUUyk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJ aWYgKHN0cyAmIEVTUElfSU5UX1NUU19WV19CSVRTKSB7DQo+ID4gKwkJYXNwZWVkX2VzcGlfdndf ZXZlbnQoc3RzLCBlc3BpX2N0cmwtPnZ3KTsNCj4gPiArCQlyZWdtYXBfd3JpdGUoZXNwaV9jdHJs LT5tYXAsIEVTUElfSU5UX1NUUywgc3RzICYNCj4gRVNQSV9JTlRfU1RTX1ZXX0JJVFMpOw0KPiA+ ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChzdHMgJiAoRVNQSV9JTlRfU1RTX09PQl9CSVRTKSkgew0K PiA+ICsJCWFzcGVlZF9lc3BpX29vYl9ldmVudChzdHMsIGVzcGlfY3RybC0+b29iKTsNCj4gPiAr CQlyZWdtYXBfd3JpdGUoZXNwaV9jdHJsLT5tYXAsIEVTUElfSU5UX1NUUywgc3RzICYNCj4gRVNQ SV9JTlRfU1RTX09PQl9CSVRTKTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAoc3RzICYgRVNQ SV9JTlRfU1RTX0ZMQVNIX0JJVFMpIHsNCj4gPiArCQlhc3BlZWRfZXNwaV9mbGFzaF9ldmVudChz dHMsIGVzcGlfY3RybC0+Zmxhc2gpOw0KPiA+ICsJCXJlZ21hcF93cml0ZShlc3BpX2N0cmwtPm1h cCwgRVNQSV9JTlRfU1RTLCBzdHMgJg0KPiBFU1BJX0lOVF9TVFNfRkxBU0hfQklUUyk7DQo+ID4g Kwl9DQo+ID4gKw0KPiA+ICsJaWYgKHN0cyAmIEVTUElfSU5UX1NUU19IV19SU1RfREVBU1NFUlQp IHsNCj4gPiArCQlhc3BlZWRfZXNwaV9wZXJpZl9lbmFibGUoZXNwaV9jdHJsLT5wZXJpZik7DQo+ ID4gKwkJYXNwZWVkX2VzcGlfdndfZW5hYmxlKGVzcGlfY3RybC0+dncpOw0KPiA+ICsJCWFzcGVl ZF9lc3BpX29vYl9lbmFibGUoZXNwaV9jdHJsLT5vb2IpOw0KPiA+ICsJCWFzcGVlZF9lc3BpX2Zs YXNoX2VuYWJsZShlc3BpX2N0cmwtPmZsYXNoKTsNCj4gPiArDQo+ID4gKwkJcmVnbWFwX3dyaXRl KGVzcGlfY3RybC0+bWFwLCBFU1BJX1NZU0VWVF9JTlRfVDAsIDB4MCk7DQo+ID4gKwkJcmVnbWFw X3dyaXRlKGVzcGlfY3RybC0+bWFwLCBFU1BJX1NZU0VWVF9JTlRfVDEsIDB4MCk7DQo+ID4gKwkJ cmVnbWFwX3dyaXRlKGVzcGlfY3RybC0+bWFwLCBFU1BJX1NZU0VWVF9JTlRfRU4sIDB4ZmZmZmZm ZmYpOw0KPiA+ICsNCj4gPiArCQlyZWdtYXBfd3JpdGUoZXNwaV9jdHJsLT5tYXAsIEVTUElfU1lT RVZUMV9JTlRfVDAsIDB4MSk7DQo+ID4gKwkJcmVnbWFwX3dyaXRlKGVzcGlfY3RybC0+bWFwLCBF U1BJX1NZU0VWVDFfSU5UX0VOLCAweDEpOw0KPiA+ICsNCj4gPiArCQlpZiAoZXNwaV9jdHJsLT5t b2RlbC0+dmVyc2lvbiA9PSBFU1BJX0FTVDI1MDApDQo+ID4gKwkJCXJlZ21hcF93cml0ZShlc3Bp X2N0cmwtPm1hcCwgRVNQSV9TWVNFVlRfSU5UX1QyLA0KPiA+ICsJCQkJICAgICBFU1BJX1NZU0VW VF9JTlRfVDJfSE9TVF9SU1RfV0FSTiB8DQo+ID4gKwkJCQkgICAgIEVTUElfU1lTRVZUX0lOVF9U Ml9PT0JfUlNUX1dBUk4pOw0KPiA+ICsNCj4gPiArCQlyZWdtYXBfdXBkYXRlX2JpdHMoZXNwaV9j dHJsLT5tYXAsIEVTUElfSU5UX0VOLA0KPiA+ICsJCQkJICAgRVNQSV9JTlRfRU5fSFdfUlNUX0RF QVNTRVJULA0KPiA+ICsJCQkJICAgRVNQSV9JTlRfRU5fSFdfUlNUX0RFQVNTRVJUKTsNCj4gPiAr DQo+ID4gKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGVzcGlfY3RybC0+bWFwLCBFU1BJX1NZU0VWVCwN Cj4gPiArCQkJCSAgIEVTUElfU1lTRVZUX1NMVl9CT09UX1NUUyB8DQo+IEVTUElfU1lTRVZUX1NM Vl9CT09UX0RPTkUsDQo+ID4gKwkJCQkgICBFU1BJX1NZU0VWVF9TTFZfQk9PVF9TVFMgfA0KPiBF U1BJX1NZU0VWVF9TTFZfQk9PVF9ET05FKTsNCj4gPiArDQo+ID4gKwkJcmVnbWFwX3dyaXRlKGVz cGlfY3RybC0+bWFwLCBFU1BJX0lOVF9TVFMsDQo+IEVTUElfSU5UX1NUU19IV19SU1RfREVBU1NF UlQpOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiBJUlFfSEFORExFRDsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIGludCBhc3BlZWRfZXNwaV9jdHJsX3Byb2JlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ID4gK3sNCj4gPiArCWludCByYyA9IDA7DQo+ID4gKwlzdHJ1 Y3QgYXNwZWVkX2VzcGlfY3RybCAqZXNwaV9jdHJsOw0KPiA+ICsJc3RydWN0IGRldmljZSAqZGV2 ID0gJnBkZXYtPmRldjsNCj4gPiArDQo+ID4gKwllc3BpX2N0cmwgPSBkZXZtX2t6YWxsb2MoZGV2 LCBzaXplb2YoKmVzcGlfY3RybCksIEdGUF9LRVJORUwpOw0KPiA+ICsJaWYgKCFlc3BpX2N0cmwp DQo+ID4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ID4gKw0KPiA+ICsJZXNwaV9jdHJsLT5tb2RlbCA9 IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpOw0KPiA+ICsNCj4gPiArCWVzcGlfY3RybC0+ bWFwID0gc3lzY29uX25vZGVfdG9fcmVnbWFwKGRldi0+cGFyZW50LT5vZl9ub2RlKTsNCj4gPiAr CWlmIChJU19FUlIoZXNwaV9jdHJsLT5tYXApKSB7DQo+ID4gKwkJZGV2X2VycihkZXYsICJjYW5u b3QgZ2V0IHJlbWFwXG4iKTsNCj4gPiArCQlyZXR1cm4gLUVOT0RFVjsNCj4gPiArCX0NCj4gPiAr DQo+ID4gKwllc3BpX2N0cmwtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7DQo+ID4g KwlpZiAoZXNwaV9jdHJsLT5pcnEgPCAwKQ0KPiA+ICsJCXJldHVybiBlc3BpX2N0cmwtPmlycTsN Cj4gPiArDQo+ID4gKwllc3BpX2N0cmwtPmNsayA9IGRldm1fY2xrX2dldChkZXYsIE5VTEwpOw0K PiA+ICsJaWYgKElTX0VSUihlc3BpX2N0cmwtPmNsaykpIHsNCj4gPiArCQlkZXZfZXJyKGRldiwg ImNhbm5vdCBnZXQgY2xvY2tcbiIpOw0KPiA+ICsJCXJldHVybiAtRU5PREVWOw0KPiA+ICsJfQ0K PiA+ICsNCj4gPiArCXJjID0gY2xrX3ByZXBhcmVfZW5hYmxlKGVzcGlfY3RybC0+Y2xrKTsNCj4g PiArCWlmIChyYykgew0KPiA+ICsJCWRldl9lcnIoZGV2LCAiY2Fubm90IGVuYWJsZSBjbG9ja1xu Iik7DQo+ID4gKwkJcmV0dXJuIHJjOw0KPiA+ICsJfQ0KPiANCj4gVGhpcyBpcyBuZXZlciByZXZl cnRlZCwgbmVpdGhlciBpbiBhbiBlcnJvciBoYW5kbGluZyBwYXRoLCBub3IgaW4gYQ0KPiAucmVt b3ZlIGZ1bmN0aW9uLiBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoKT8NCg0KVGhhbmtzIGZvciBy ZW1pbmRpbmcuIFRoZSBjbG9jayBzaGFsbCBiZSBkaXNhYmxlZCBpbiAucmVtb3ZlIGZ1bmN0aW9u Lg0KDQo+IA0KPiA+ICsNCj4gPiArCWVzcGlfY3RybC0+cGVyaWYgPSBhc3BlZWRfZXNwaV9wZXJp Zl9hbGxvYyhkZXYsIGVzcGlfY3RybCk7DQo+ID4gKwlpZiAoSVNfRVJSKGVzcGlfY3RybC0+cGVy aWYpKSB7DQo+ID4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgcGVyaXBoZXJh bCBjaGFubmVsXG4iKTsNCj4gPiArCQlyZXR1cm4gUFRSX0VSUihlc3BpX2N0cmwtPnBlcmlmKTsN Cj4gPiArCX0NCj4gPiArDQo+ID4gKwllc3BpX2N0cmwtPnZ3ID0gYXNwZWVkX2VzcGlfdndfYWxs b2MoZGV2LCBlc3BpX2N0cmwpOw0KPiA+ICsJaWYgKElTX0VSUihlc3BpX2N0cmwtPnZ3KSkgew0K PiA+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIHZpcnR1YWwgd2lyZSBjaGFu bmVsXG4iKTsNCj4gPiArCQlyZXR1cm4gUFRSX0VSUihlc3BpX2N0cmwtPnZ3KTsNCj4gPiArCX0N Cj4gPiArDQo+ID4gKwllc3BpX2N0cmwtPm9vYiA9IGFzcGVlZF9lc3BpX29vYl9hbGxvYyhkZXYs IGVzcGlfY3RybCk7DQo+ID4gKwlpZiAoSVNfRVJSKGVzcGlfY3RybC0+b29iKSkgew0KPiA+ICsJ CWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIG91dC1vZi1iYW5kIGNoYW5uZWxcbiIp Ow0KPiA+ICsJCXJldHVybiBQVFJfRVJSKGVzcGlfY3RybC0+b29iKTsNCj4gPiArCX0NCj4gPiAr DQo+ID4gKwllc3BpX2N0cmwtPmZsYXNoID0gYXNwZWVkX2VzcGlfZmxhc2hfYWxsb2MoZGV2LCBl c3BpX2N0cmwpOw0KPiA+ICsJaWYgKHJjKSB7DQo+ID4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQg dG8gYWxsb2NhdGUgZmxhc2ggY2hhbm5lbFxuIik7DQo+ID4gKwkJcmV0dXJuIFBUUl9FUlIoZXNw aV9jdHJsLT5mbGFzaCk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmVnbWFwX3dyaXRlKGVzcGlf Y3RybC0+bWFwLCBFU1BJX1NZU0VWVF9JTlRfVDAsIDB4MCk7DQo+ID4gKwlyZWdtYXBfd3JpdGUo ZXNwaV9jdHJsLT5tYXAsIEVTUElfU1lTRVZUX0lOVF9UMSwgMHgwKTsNCj4gPiArCXJlZ21hcF93 cml0ZShlc3BpX2N0cmwtPm1hcCwgRVNQSV9TWVNFVlRfSU5UX0VOLCAweGZmZmZmZmZmKTsNCj4g PiArDQo+ID4gKwlyZWdtYXBfd3JpdGUoZXNwaV9jdHJsLT5tYXAsIEVTUElfU1lTRVZUMV9JTlRf VDAsIDB4MSk7DQo+ID4gKwlyZWdtYXBfd3JpdGUoZXNwaV9jdHJsLT5tYXAsIEVTUElfU1lTRVZU MV9JTlRfRU4sIDB4MSk7DQo+ID4gKw0KPiA+ICsJcmMgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwg ZXNwaV9jdHJsLT5pcnEsDQo+ID4gKwkJCSAgICAgIGFzcGVlZF9lc3BpX2N0cmxfaXNyLA0KPiA+ ICsJCQkgICAgICAwLCBERVZJQ0VfTkFNRSwgZXNwaV9jdHJsKTsNCj4gPiArCWlmIChyYykgew0K PiA+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgSVJRXG4iKTsNCj4gPiArCQly ZXR1cm4gcmM7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmVnbWFwX3VwZGF0ZV9iaXRzKGVzcGlf Y3RybC0+bWFwLCBFU1BJX0lOVF9FTiwNCj4gPiArCQkJICAgRVNQSV9JTlRfRU5fSFdfUlNUX0RF QVNTRVJULA0KPiA+ICsJCQkgICBFU1BJX0lOVF9FTl9IV19SU1RfREVBU1NFUlQpOw0KPiA+ICsN Cj4gPiArCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGVzcGlfY3RybCk7DQo+ID4gKw0KPiA+ICsJZGV2 X2luZm8oZGV2LCAibW9kdWxlIGxvYWRlZFxuIik7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgYXNwZWVkX2VzcGlfY3RybF9yZW1vdmUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gPiArew0KPiA+ICsJc3RydWN0IGRldmljZSAq ZGV2ID0gJnBkZXYtPmRldjsNCj4gPiArCXN0cnVjdCBhc3BlZWRfZXNwaV9jdHJsICplc3BpX2N0 cmwgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gPiArDQo+ID4gKwlhc3BlZWRfZXNwaV9wZXJp Zl9mcmVlKGRldiwgZXNwaV9jdHJsLT5wZXJpZik7DQo+ID4gKwlhc3BlZWRfZXNwaV92d19mcmVl KGRldiwgZXNwaV9jdHJsLT52dyk7DQo+ID4gKwlhc3BlZWRfZXNwaV9vb2JfZnJlZShkZXYsIGVz cGlfY3RybC0+b29iKTsNCj4gPiArCWFzcGVlZF9lc3BpX2ZsYXNoX2ZyZWUoZGV2LCBlc3BpX2N0 cmwtPmZsYXNoKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIGNvbnN0IHN0cnVjdCBhc3BlZWRfZXNwaV9tb2RlbCBhc3QyNTAwX21vZGVsID0gew0K PiA+ICsJLnZlcnNpb24gPSBFU1BJX0FTVDI1MDAsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IGFzcGVlZF9lc3BpX21vZGVsIGFzdDI2MDBfbW9kZWwgPSB7DQo+ID4g KwkudmVyc2lvbiA9IEVTUElfQVNUMjYwMCwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBj b25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGFzcGVlZF9lc3BpX2N0cmxfb2ZfbWF0Y2hlc1tdID0g ew0KPiA+ICsJeyAuY29tcGF0aWJsZSA9ICJhc3BlZWQsYXN0MjUwMC1lc3BpLWN0cmwiLA0KPiA+ ICsJICAuZGF0YSA9ICZhc3QyNTAwX21vZGVsIH0sDQo+ID4gKwl7IC5jb21wYXRpYmxlID0gImFz cGVlZCxhc3QyNjAwLWVzcGktY3RybCIsDQo+ID4gKwkgIC5kYXRhID0gJmFzdDI2MDBfbW9kZWwg fSwNCj4gPiArCXsgfSwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZv cm1fZHJpdmVyIGFzcGVlZF9lc3BpX2N0cmxfZHJpdmVyID0gew0KPiA+ICsJLmRyaXZlciA9IHsN Cj4gPiArCQkubmFtZSA9IERFVklDRV9OQU1FLA0KPiA+ICsJCS5vZl9tYXRjaF90YWJsZSA9IGFz cGVlZF9lc3BpX2N0cmxfb2ZfbWF0Y2hlcywNCj4gPiArCX0sDQo+ID4gKwkucHJvYmUgPSBhc3Bl ZWRfZXNwaV9jdHJsX3Byb2JlLA0KPiA+ICsJLnJlbW92ZSA9IGFzcGVlZF9lc3BpX2N0cmxfcmVt b3ZlLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihhc3BlZWRf ZXNwaV9jdHJsX2RyaXZlcik7DQo+ID4gKw0KPiA+ICtNT0RVTEVfQVVUSE9SKCJDaGlhLVdlaSBX YW5nDQo+IDxjaGlhd2VpX3dhbmctU0FsWERtQW5tT0FxREo2ZG8rL1NhUUBwdWJsaWMuZ21hbmUu b3JnPiIpOw0KPiA+ICtNT0RVTEVfQVVUSE9SKCJSeWFuIENoZW4NCj4gPHJ5YW5fY2hlbi1TQWxY RG1Bbm1PQXFESjZkbysvU2FRQHB1YmxpYy5nbWFuZS5vcmc+Iik7DQo+ID4gK01PRFVMRV9ERVND UklQVElPTigiQ29udHJvbCBvZiBBc3BlZWQgZVNQSSBTbGF2ZSBEZXZpY2UiKTsNCj4gPiArTU9E VUxFX0xJQ0VOU0UoIkdQTCB2MiIpOw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy9hc3Bl ZWQvYXNwZWVkLWVzcGktY3RybC5oDQo+IGIvZHJpdmVycy9zb2MvYXNwZWVkL2FzcGVlZC1lc3Bp LWN0cmwuaA0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAw Li44ZTI2Y2Q2NDdhN2YNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9zb2Mv YXNwZWVkL2FzcGVlZC1lc3BpLWN0cmwuaA0KPiA+IEBAIC0wLDAgKzEsMzA5IEBADQo+ID4gKy8q IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKyAqLw0KPiA+ICsvKg0KPiA+ICsgKiBD b3B5cmlnaHQgMjAyMSBBc3BlZWQgVGVjaG5vbG9neSBJbmMuDQo+ID4gKyAqLw0KPiA+ICsjaWZu ZGVmIF9BU1BFRURfRVNQSV9DVFJMX0hfDQo+ID4gKyNkZWZpbmUgX0FTUEVFRF9FU1BJX0NUUkxf SF8NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9iaXRzLmg+DQo+ID4gKw0KPiA+ICtlbnVt IGFzcGVlZF9lc3BpX3ZlcnNpb24gew0KPiA+ICsJRVNQSV9BU1QyNTAwLA0KPiA+ICsJRVNQSV9B U1QyNjAwLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IGFzcGVlZF9lc3BpX21vZGVsIHsN Cj4gPiArCXVpbnQzMl90IHZlcnNpb247DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgYXNw ZWVkX2VzcGlfY3RybCB7DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7DQo+ID4gKw0KPiA+ICsJ c3RydWN0IHJlZ21hcCAqbWFwOw0KPiA+ICsJc3RydWN0IGNsayAqY2xrOw0KPiA+ICsNCj4gPiAr CWludCBpcnE7DQo+ID4gKw0KPiA+ICsJc3RydWN0IGFzcGVlZF9lc3BpX3BlcmlmICpwZXJpZjsN Cj4gPiArCXN0cnVjdCBhc3BlZWRfZXNwaV92dyAqdnc7DQo+ID4gKwlzdHJ1Y3QgYXNwZWVkX2Vz cGlfb29iICpvb2I7DQo+ID4gKwlzdHJ1Y3QgYXNwZWVkX2VzcGlfZmxhc2ggKmZsYXNoOw0KPiA+ ICsNCj4gPiArCWNvbnN0IHN0cnVjdCBhc3BlZWRfZXNwaV9tb2RlbCAqbW9kZWw7DQo+ID4gK307 DQo+ID4gKw0KPiA+ICsvKiBlU1BJIHJlZ2lzdGVyIG9mZnNldCAqLw0KPiA+ICsjZGVmaW5lIEVT UElfQ1RSTAkJMHgwMDANCj4gPiArI2RlZmluZSAgIEVTUElfQ1RSTF9PT0JfUlhfU1dfUlNUCQlC SVQoMjgpDQo+ID4gKyNkZWZpbmUgICBFU1BJX0NUUkxfRkxBU0hfVFhfRE1BX0VOCQlCSVQoMjMp DQo+ID4gKyNkZWZpbmUgICBFU1BJX0NUUkxfRkxBU0hfUlhfRE1BX0VOCQlCSVQoMjIpDQo+ID4g KyNkZWZpbmUgICBFU1BJX0NUUkxfT09CX1RYX0RNQV9FTgkJQklUKDIxKQ0KPiA+ICsjZGVmaW5l ICAgRVNQSV9DVFJMX09PQl9SWF9ETUFfRU4JCUJJVCgyMCkNCj4gPiArI2RlZmluZSAgIEVTUElf Q1RSTF9QRVJJRl9OUF9UWF9ETUFfRU4JCUJJVCgxOSkNCj4gPiArI2RlZmluZSAgIEVTUElfQ1RS TF9QRVJJRl9QQ19UWF9ETUFfRU4JCUJJVCgxNykNCj4gPiArI2RlZmluZSAgIEVTUElfQ1RSTF9Q RVJJRl9QQ19SWF9ETUFfRU4JCUJJVCgxNikNCj4gPiArI2RlZmluZSAgIEVTUElfQ1RSTF9GTEFT SF9TV19NT0RFX01BU0sJCUdFTk1BU0soMTEsIDEwKQ0KPiA+ICsjZGVmaW5lICAgRVNQSV9DVFJM X0ZMQVNIX1NXX01PREVfU0hJRlQJCTEwDQo+ID4gKyNkZWZpbmUgICBFU1BJX0NUUkxfUEVSSUZf UENfUlhfRE1BX0VOCQlCSVQoMTYpDQo+ID4gKyNkZWZpbmUgICBFU1BJX0NUUkxfVldfR1BJT19T V19NT0RFCQlCSVQoOSkNCj4gPiArI2RlZmluZSAgIEVTUElfQ1RSTF9GTEFTSF9TV19SRFkJCUJJ VCg3KQ0KPiA+ICsjZGVmaW5lICAgRVNQSV9DVFJMX09PQl9TV19SRFkJCQlCSVQoNCkNCj4gPiAr I2RlZmluZSAgIEVTUElfQ1RSTF9WV19TV19SRFkJCQlCSVQoMykNCj4gPiArI2RlZmluZSAgIEVT UElfQ1RSTF9QRVJJRl9TV19SRFkJCUJJVCgxKQ0KPiA+ICsjZGVmaW5lIEVTUElfU1RTCQkweDAw NA0KPiA+ICsjZGVmaW5lIEVTUElfSU5UX1NUUwkJMHgwMDgNCj4gPiArI2RlZmluZSAgIEVTUElf SU5UX1NUU19IV19SU1RfREVBU1NFUlQJCUJJVCgzMSkNCj4gPiArI2RlZmluZSAgIEVTUElfSU5U X1NUU19PT0JfUlhfVE1PVVQJCUJJVCgyMykNCj4gPiArI2RlZmluZSAgIEVTUElfSU5UX1NUU19W V19TWVNFVlQxCQlCSVQoMjIpDQo+ID4gKyNkZWZpbmUgICBFU1BJX0lOVF9TVFNfRkxBU0hfVFhf RVJSCQlCSVQoMjEpDQo+ID4gKyNkZWZpbmUgICBFU1BJX0lOVF9TVFNfT09CX1RYX0VSUgkJQklU KDIwKQ0KPiA+ICsjZGVmaW5lICAgRVNQSV9JTlRfU1RTX0ZMQVNIX1RYX0FCVAkJQklUKDE5KQ0K PiA+ICsjZGVmaW5lICAgRVNQSV9JTlRfU1RTX09PQl9UWF9BQlQJCUJJVCgxOCkNCj4gPiArI2Rl ZmluZSAgIEVTUElfSU5UX1NUU19QRVJJRl9OUF9UWF9BQlQJCUJJVCgxNykNCj4gPiArI2RlZmlu ZSAgIEVTUElfSU5UX1NUU19QRVJJRl9QQ19UWF9BQlQJCUJJVCgxNikNCj4gPiArI2RlZmluZSAg IEVTUElfSU5UX1NUU19GTEFTSF9SWF9BQlQJCUJJVCgxNSkNCj4gPiArI2RlZmluZSAgIEVTUElf SU5UX1NUU19PT0JfUlhfQUJUCQlCSVQoMTQpDQo+ID4gKyNkZWZpbmUgICBFU1BJX0lOVF9TVFNf UEVSSUZfTlBfUlhfQUJUCQlCSVQoMTMpDQo+ID4gKyNkZWZpbmUgICBFU1BJX0lOVF9TVFNfUEVS SUZfUENfUlhfQUJUCQlCSVQoMTIpDQo+ID4gKyNkZWZpbmUgICBFU1BJX0lOVF9TVFNfUEVSSUZf TlBfVFhfRVJSCQlCSVQoMTEpDQo+ID4gKyNkZWZpbmUgICBFU1BJX0lOVF9TVFNfUEVSSUZfUENf VFhfRVJSCQlCSVQoMTApDQo+ID4gKyNkZWZpbmUgICBFU1BJX0lOVF9TVFNfVldfR1BJT0VWVAkJ QklUKDkpDQo+ID4gKyNkZWZpbmUgICBFU1BJX0lOVF9TVFNfVldfU1lTRVZUCQlCSVQoOCkNCj4g PiArI2RlZmluZSAgIEVTUElfSU5UX1NUU19GTEFTSF9UWF9DTVBMVAkJQklUKDcpDQo+ID4gKyNk ZWZpbmUgICBFU1BJX0lOVF9TVFNfRkxBU0hfUlhfQ01QTFQJCUJJVCg2KQ0KPiA+ICsjZGVmaW5l ICAgRVNQSV9JTlRfU1RTX09PQl9UWF9DTVBMVAkJQklUKDUpDQo+ID4gKyNkZWZpbmUgICBFU1BJ X0lOVF9TVFNfT09CX1JYX0NNUExUCQlCSVQoNCkNCj4gPiArI2RlZmluZSAgIEVTUElfSU5UX1NU U19QRVJJRl9OUF9UWF9DTVBMVAlCSVQoMykNCj4gPiArI2RlZmluZSAgIEVTUElfSU5UX1NUU19Q RVJJRl9QQ19UWF9DTVBMVAlCSVQoMSkNCj4gPiArI2RlZmluZSAgIEVTUElfSU5UX1NUU19QRVJJ Rl9QQ19SWF9DTVBMVAlCSVQoMCkNCj4gPiArI2RlZmluZSBFU1BJX0lOVF9FTgkJMHgwMGMNCj4g PiArI2RlZmluZSAgIEVTUElfSU5UX0VOX0hXX1JTVF9ERUFTU0VSVAkJQklUKDMxKQ0KPiA+ICsj ZGVmaW5lICAgRVNQSV9JTlRfRU5fT09CX1JYX1RNT1VUCQlCSVQoMjMpDQo+ID4gKyNkZWZpbmUg ICBFU1BJX0lOVF9FTl9WV19TWVNFVlQxCQlCSVQoMjIpDQo+ID4gKyNkZWZpbmUgICBFU1BJX0lO VF9FTl9GTEFTSF9UWF9FUlIJCUJJVCgyMSkNCj4gPiArI2RlZmluZSAgIEVTUElfSU5UX0VOX09P Ql9UWF9FUlIJCUJJVCgyMCkNCj4gPiArI2RlZmluZSAgIEVTUElfSU5UX0VOX0ZMQVNIX1RYX0FC VAkJQklUKDE5KQ0KPiA+ICsjZGVmaW5lICAgRVNQSV9JTlRfRU5fT09CX1RYX0FCVAkJQklUKDE4 KQ0KPiA+ICsjZGVmaW5lICAgRVNQSV9JTlRfRU5fUEVSSUZfTlBfVFhfQUJUCQlCSVQoMTcpDQo+ ID4gKyNkZWZpbmUgICBFU1BJX0lOVF9FTl9QRVJJRl9QQ19UWF9BQlQJCUJJVCgxNikNCj4gPiAr I2RlZmluZSAgIEVTUElfSU5UX0VOX0ZMQVNIX1JYX0FCVAkJQklUKDE1KQ0KPiA+ICsjZGVmaW5l ICAgRVNQSV9JTlRfRU5fT09CX1JYX0FCVAkJQklUKDE0KQ0KPiA+ICsjZGVmaW5lICAgRVNQSV9J TlRfRU5fUEVSSUZfTlBfUlhfQUJUCQlCSVQoMTMpDQo+ID4gKyNkZWZpbmUgICBFU1BJX0lOVF9F Tl9QRVJJRl9QQ19SWF9BQlQJCUJJVCgxMikNCj4gPiArI2RlZmluZSAgIEVTUElfSU5UX0VOX1BF UklGX05QX1RYX0VSUgkJQklUKDExKQ0KPiA+ICsjZGVmaW5lICAgRVNQSV9JTlRfRU5fUEVSSUZf UENfVFhfRVJSCQlCSVQoMTApDQo+ID4gKyNkZWZpbmUgICBFU1BJX0lOVF9FTl9WV19HUElPRVZU CQlCSVQoOSkNCj4gPiArI2RlZmluZSAgIEVTUElfSU5UX0VOX1ZXX1NZU0VWVAkJCUJJVCg4KQ0K PiA+ICsjZGVmaW5lICAgRVNQSV9JTlRfRU5fRkxBU0hfVFhfQ01QTFQJCUJJVCg3KQ0KPiA+ICsj ZGVmaW5lICAgRVNQSV9JTlRfRU5fRkxBU0hfUlhfQ01QTFQJCUJJVCg2KQ0KPiA+ICsjZGVmaW5l ICAgRVNQSV9JTlRfRU5fT09CX1RYX0NNUExUCQlCSVQoNSkNCj4gPiArI2RlZmluZSAgIEVTUElf SU5UX0VOX09PQl9SWF9DTVBMVAkJQklUKDQpDQo+ID4gKyNkZWZpbmUgICBFU1BJX0lOVF9FTl9Q RVJJRl9OUF9UWF9DTVBMVAkJQklUKDMpDQo+ID4gKyNkZWZpbmUgICBFU1BJX0lOVF9FTl9QRVJJ Rl9QQ19UWF9DTVBMVAkJQklUKDEpDQo+ID4gKyNkZWZpbmUgICBFU1BJX0lOVF9FTl9QRVJJRl9Q Q19SWF9DTVBMVAkJQklUKDApDQo+ID4gKyNkZWZpbmUgRVNQSV9QRVJJRl9QQ19SWF9ETUEJMHgw MTANCj4gPiArI2RlZmluZSBFU1BJX1BFUklGX1BDX1JYX0NUUkwJMHgwMTQNCj4gPiArI2RlZmlu ZSAgIEVTUElfUEVSSUZfUENfUlhfQ1RSTF9QRU5EX1NFUlYJQklUKDMxKQ0KPiA+ICsjZGVmaW5l ICAgRVNQSV9QRVJJRl9QQ19SWF9DVFJMX0xFTl9NQVNLCUdFTk1BU0soMjMsIDEyKQ0KPiA+ICsj ZGVmaW5lICAgRVNQSV9QRVJJRl9QQ19SWF9DVFJMX0xFTl9TSElGVAkxMg0KPiA+ICsjZGVmaW5l ICAgRVNQSV9QRVJJRl9QQ19SWF9DVFJMX1RBR19NQVNLCUdFTk1BU0soMTEsIDgpDQo+ID4gKyNk ZWZpbmUgICBFU1BJX1BFUklGX1BDX1JYX0NUUkxfVEFHX1NISUZUCTgNCj4gPiArI2RlZmluZSAg IEVTUElfUEVSSUZfUENfUlhfQ1RSTF9DWUNfTUFTSwlHRU5NQVNLKDcsIDApDQo+ID4gKyNkZWZp bmUgICBFU1BJX1BFUklGX1BDX1JYX0NUUkxfQ1lDX1NISUZUCTANCj4gPiArI2RlZmluZSBFU1BJ X1BFUklGX1BDX1JYX1BPUlQJMHgwMTgNCj4gPiArI2RlZmluZSBFU1BJX1BFUklGX1BDX1RYX0RN QQkweDAyMA0KPiA+ICsjZGVmaW5lIEVTUElfUEVSSUZfUENfVFhfQ1RSTAkweDAyNA0KPiA+ICsj ZGVmaW5lCSAgRVNQSV9QRVJJRl9QQ19UWF9DVFJMX1RSSUdHRVIJCUJJVCgzMSkNCj4gPiArI2Rl ZmluZQkgIEVTUElfUEVSSUZfUENfVFhfQ1RSTF9MRU5fTUFTSwlHRU5NQVNLKDIzLCAxMikNCj4g PiArI2RlZmluZQkgIEVTUElfUEVSSUZfUENfVFhfQ1RSTF9MRU5fU0hJRlQJMTINCj4gPiArI2Rl ZmluZQkgIEVTUElfUEVSSUZfUENfVFhfQ1RSTF9UQUdfTUFTSwlHRU5NQVNLKDExLCA4KQ0KPiA+ ICsjZGVmaW5lCSAgRVNQSV9QRVJJRl9QQ19UWF9DVFJMX1RBR19TSElGVAk4DQo+ID4gKyNkZWZp bmUJICBFU1BJX1BFUklGX1BDX1RYX0NUUkxfQ1lDX01BU0sJR0VOTUFTSyg3LCAwKQ0KPiA+ICsj ZGVmaW5lCSAgRVNQSV9QRVJJRl9QQ19UWF9DVFJMX0NZQ19TSElGVAkwDQo+ID4gKyNkZWZpbmUg RVNQSV9QRVJJRl9QQ19UWF9QT1JUCTB4MDI4DQo+ID4gKyNkZWZpbmUgRVNQSV9QRVJJRl9OUF9U WF9ETUEJMHgwMzANCj4gPiArI2RlZmluZSBFU1BJX1BFUklGX05QX1RYX0NUUkwJMHgwMzQNCj4g PiArI2RlZmluZSAgIEVTUElfUEVSSUZfTlBfVFhfQ1RSTF9UUklHR0VSCQlCSVQoMzEpDQo+ID4g KyNkZWZpbmUJICBFU1BJX1BFUklGX05QX1RYX0NUUkxfTEVOX01BU0sJR0VOTUFTSygyMywgMTIp DQo+ID4gKyNkZWZpbmUJICBFU1BJX1BFUklGX05QX1RYX0NUUkxfTEVOX1NISUZUCTEyDQo+ID4g KyNkZWZpbmUJICBFU1BJX1BFUklGX05QX1RYX0NUUkxfVEFHX01BU0sJR0VOTUFTSygxMSwgOCkN Cj4gPiArI2RlZmluZQkgIEVTUElfUEVSSUZfTlBfVFhfQ1RSTF9UQUdfU0hJRlQJOA0KPiA+ICsj ZGVmaW5lCSAgRVNQSV9QRVJJRl9OUF9UWF9DVFJMX0NZQ19NQVNLCUdFTk1BU0soNywgMCkNCj4g PiArI2RlZmluZQkgIEVTUElfUEVSSUZfTlBfVFhfQ1RSTF9DWUNfU0hJRlQJMA0KPiA+ICsjZGVm aW5lIEVTUElfUEVSSUZfTlBfVFhfUE9SVAkweDAzOA0KPiA+ICsjZGVmaW5lIEVTUElfT09CX1JY X0RNQQkJMHgwNDANCj4gPiArI2RlZmluZSBFU1BJX09PQl9SWF9DVFJMCTB4MDQ0DQo+ID4gKyNk ZWZpbmUJICBFU1BJX09PQl9SWF9DVFJMX1BFTkRfU0VSVgkJQklUKDMxKQ0KPiA+ICsjZGVmaW5l CSAgRVNQSV9PT0JfUlhfQ1RSTF9MRU5fTUFTSwkJR0VOTUFTSygyMywgMTIpDQo+ID4gKyNkZWZp bmUJICBFU1BJX09PQl9SWF9DVFJMX0xFTl9TSElGVAkJMTINCj4gPiArI2RlZmluZQkgIEVTUElf T09CX1JYX0NUUkxfVEFHX01BU0sJCUdFTk1BU0soMTEsIDgpDQo+ID4gKyNkZWZpbmUJICBFU1BJ X09PQl9SWF9DVFJMX1RBR19TSElGVAkJOA0KPiA+ICsjZGVmaW5lCSAgRVNQSV9PT0JfUlhfQ1RS TF9DWUNfTUFTSwkJR0VOTUFTSyg3LCAwKQ0KPiA+ICsjZGVmaW5lCSAgRVNQSV9PT0JfUlhfQ1RS TF9DWUNfU0hJRlQJCTANCj4gPiArI2RlZmluZSBFU1BJX09PQl9SWF9QT1JUCTB4MDQ4DQo+ID4g KyNkZWZpbmUgRVNQSV9PT0JfVFhfRE1BCQkweDA1MA0KPiA+ICsjZGVmaW5lIEVTUElfT09CX1RY X0NUUkwJMHgwNTQNCj4gPiArI2RlZmluZQkgIEVTUElfT09CX1RYX0NUUkxfVFJJR0dFUgkJQklU KDMxKQ0KPiA+ICsjZGVmaW5lCSAgRVNQSV9PT0JfVFhfQ1RSTF9MRU5fTUFTSwkJR0VOTUFTSygy MywgMTIpDQo+ID4gKyNkZWZpbmUJICBFU1BJX09PQl9UWF9DVFJMX0xFTl9TSElGVAkJMTINCj4g PiArI2RlZmluZQkgIEVTUElfT09CX1RYX0NUUkxfVEFHX01BU0sJCUdFTk1BU0soMTEsIDgpDQo+ ID4gKyNkZWZpbmUJICBFU1BJX09PQl9UWF9DVFJMX1RBR19TSElGVAkJOA0KPiA+ICsjZGVmaW5l CSAgRVNQSV9PT0JfVFhfQ1RSTF9DWUNfTUFTSwkJR0VOTUFTSyg3LCAwKQ0KPiA+ICsjZGVmaW5l CSAgRVNQSV9PT0JfVFhfQ1RSTF9DWUNfU0hJRlQJCTANCj4gPiArI2RlZmluZSBFU1BJX09PQl9U WF9QT1JUCTB4MDU4DQo+ID4gKyNkZWZpbmUgRVNQSV9GTEFTSF9SWF9ETUEJMHgwNjANCj4gPiAr I2RlZmluZSBFU1BJX0ZMQVNIX1JYX0NUUkwJMHgwNjQNCj4gPiArI2RlZmluZQkgIEVTUElfRkxB U0hfUlhfQ1RSTF9QRU5EX1NFUlYJCUJJVCgzMSkNCj4gPiArI2RlZmluZQkgIEVTUElfRkxBU0hf UlhfQ1RSTF9MRU5fTUFTSwkJR0VOTUFTSygyMywgMTIpDQo+ID4gKyNkZWZpbmUJICBFU1BJX0ZM QVNIX1JYX0NUUkxfTEVOX1NISUZUCQkxMg0KPiA+ICsjZGVmaW5lCSAgRVNQSV9GTEFTSF9SWF9D VFJMX1RBR19NQVNLCQlHRU5NQVNLKDExLCA4KQ0KPiA+ICsjZGVmaW5lCSAgRVNQSV9GTEFTSF9S WF9DVFJMX1RBR19TSElGVAkJOA0KPiA+ICsjZGVmaW5lCSAgRVNQSV9GTEFTSF9SWF9DVFJMX0NZ Q19NQVNLCQlHRU5NQVNLKDcsIDApDQo+ID4gKyNkZWZpbmUJICBFU1BJX0ZMQVNIX1JYX0NUUkxf Q1lDX1NISUZUCQkwDQo+ID4gKyNkZWZpbmUgRVNQSV9GTEFTSF9SWF9QT1JUCTB4MDY4DQo+ID4g KyNkZWZpbmUgRVNQSV9GTEFTSF9UWF9ETUEJMHgwNzANCj4gPiArI2RlZmluZSBFU1BJX0ZMQVNI X1RYX0NUUkwJMHgwNzQNCj4gPiArI2RlZmluZQkgIEVTUElfRkxBU0hfVFhfQ1RSTF9UUklHR0VS CQlCSVQoMzEpDQo+ID4gKyNkZWZpbmUJICBFU1BJX0ZMQVNIX1RYX0NUUkxfTEVOX01BU0sJCUdF Tk1BU0soMjMsIDEyKQ0KPiA+ICsjZGVmaW5lCSAgRVNQSV9GTEFTSF9UWF9DVFJMX0xFTl9TSElG VAkJMTINCj4gPiArI2RlZmluZQkgIEVTUElfRkxBU0hfVFhfQ1RSTF9UQUdfTUFTSwkJR0VOTUFT SygxMSwgOCkNCj4gPiArI2RlZmluZQkgIEVTUElfRkxBU0hfVFhfQ1RSTF9UQUdfU0hJRlQJCTgN Cj4gPiArI2RlZmluZQkgIEVTUElfRkxBU0hfVFhfQ1RSTF9DWUNfTUFTSwkJR0VOTUFTSyg3LCAw KQ0KPiA+ICsjZGVmaW5lCSAgRVNQSV9GTEFTSF9UWF9DVFJMX0NZQ19TSElGVAkJMA0KPiA+ICsj ZGVmaW5lIEVTUElfRkxBU0hfVFhfUE9SVAkweDA3OA0KPiA+ICsjZGVmaW5lIEVTUElfQ1RSTDIJ CTB4MDgwDQo+ID4gKyNkZWZpbmUgICBFU1BJX0NUUkwyX01FTUNZQ19SRF9ESVMJCUJJVCg2KQ0K PiA+ICsjZGVmaW5lICAgRVNQSV9DVFJMMl9NRU1DWUNfV1JfRElTCQlCSVQoNCkNCj4gPiArI2Rl ZmluZSBFU1BJX1BFUklGX1BDX1JYX1NBRERSCTB4MDg0DQo+ID4gKyNkZWZpbmUgRVNQSV9QRVJJ Rl9QQ19SWF9UQUREUgkweDA4OA0KPiA+ICsjZGVmaW5lIEVTUElfUEVSSUZfUENfUlhfTUFTSwkw eDA4Yw0KPiA+ICsjZGVmaW5lICAgRVNQSV9QRVJJRl9QQ19SWF9NQVNLX0NGR19XUAkJQklUKDAp DQo+ID4gKyNkZWZpbmUgRVNQSV9TWVNFVlRfSU5UX0VOCTB4MDk0DQo+ID4gKyNkZWZpbmUgRVNQ SV9TWVNFVlQJCTB4MDk4DQo+ID4gKyNkZWZpbmUgICBFU1BJX1NZU0VWVF9IT1NUX1JTVF9BQ0sJ CUJJVCgyNykNCj4gPiArI2RlZmluZSAgIEVTUElfU1lTRVZUX1JTVF9DUFVfSU5JVAkJQklUKDI2 KQ0KPiA+ICsjZGVmaW5lICAgRVNQSV9TWVNFVlRfU0xWX0JPT1RfU1RTCQlCSVQoMjMpDQo+ID4g KyNkZWZpbmUgICBFU1BJX1NZU0VWVF9OT05fRkFUQUxfRVJSCQlCSVQoMjIpDQo+ID4gKyNkZWZp bmUgICBFU1BJX1NZU0VWVF9GQVRBTF9FUlIJCQlCSVQoMjEpDQo+ID4gKyNkZWZpbmUgICBFU1BJ X1NZU0VWVF9TTFZfQk9PVF9ET05FCQlCSVQoMjApDQo+ID4gKyNkZWZpbmUgICBFU1BJX1NZU0VW VF9PT0JfUlNUX0FDSwkJQklUKDE2KQ0KPiA+ICsjZGVmaW5lICAgRVNQSV9TWVNFVlRfTk1JX09V VAkJCUJJVCgxMCkNCj4gPiArI2RlZmluZSAgIEVTUElfU1lTRVZUX1NNSV9PVVQJCQlCSVQoOSkN Cj4gPiArI2RlZmluZSAgIEVTUElfU1lTRVZUX0hPU1RfUlNUX1dBUk4JCUJJVCg4KQ0KPiA+ICsj ZGVmaW5lICAgRVNQSV9TWVNFVlRfT09CX1JTVF9XQVJOCQlCSVQoNikNCj4gPiArI2RlZmluZSAg IEVTUElfU1lTRVZUX1BMVFJTVE4JCQlCSVQoNSkNCj4gPiArI2RlZmluZSAgIEVTUElfU1lTRVZU X1NVU1BFTkQJCQlCSVQoNCkNCj4gPiArI2RlZmluZSAgIEVTUElfU1lTRVZUX1M1X1NMRUVQCQkJ QklUKDIpDQo+ID4gKyNkZWZpbmUgICBFU1BJX1NZU0VWVF9TNF9TTEVFUAkJCUJJVCgxKQ0KPiA+ ICsjZGVmaW5lICAgRVNQSV9TWVNFVlRfUzNfU0xFRVAJCQlCSVQoMCkNCj4gPiArI2RlZmluZSBF U1BJX1ZXX0dQSU9fVkFMCTB4MDljDQo+ID4gKyNkZWZpbmUgRVNQSV9HRU5fQ0FQX05fQ09ORgkw eDBhMA0KPiA+ICsjZGVmaW5lIEVTUElfQ0gwX0NBUF9OX0NPTkYJMHgwYTQNCj4gPiArI2RlZmlu ZSBFU1BJX0NIMV9DQVBfTl9DT05GCTB4MGE4DQo+ID4gKyNkZWZpbmUgRVNQSV9DSDJfQ0FQX05f Q09ORgkweDBhYw0KPiA+ICsjZGVmaW5lIEVTUElfQ0gzX0NBUF9OX0NPTkYJMHgwYjANCj4gPiAr I2RlZmluZSBFU1BJX0NIM19DQVBfTl9DT05GMgkweDBiNA0KPiA+ICsjZGVmaW5lIEVTUElfU1lT RVZUMV9JTlRfRU4JMHgxMDANCj4gPiArI2RlZmluZSBFU1BJX1NZU0VWVDEJCTB4MTA0DQo+ID4g KyNkZWZpbmUgICBFU1BJX1NZU0VWVDFfU1VTUEVORF9BQ0sJCUJJVCgyMCkNCj4gPiArI2RlZmlu ZSAgIEVTUElfU1lTRVZUMV9TVVNQRU5EX1dBUk4JCUJJVCgwKQ0KPiA+ICsjZGVmaW5lIEVTUElf U1lTRVZUX0lOVF9UMAkweDExMA0KPiA+ICsjZGVmaW5lIEVTUElfU1lTRVZUX0lOVF9UMQkweDEx NA0KPiA+ICsjZGVmaW5lIEVTUElfU1lTRVZUX0lOVF9UMgkweDExOA0KPiA+ICsjZGVmaW5lICAg RVNQSV9TWVNFVlRfSU5UX1QyX0hPU1RfUlNUX1dBUk4NCj4gCUVTUElfU1lTRVZUX0hPU1RfUlNU X1dBUk4NCj4gPiArI2RlZmluZSAgIEVTUElfU1lTRVZUX0lOVF9UMl9PT0JfUlNUX1dBUk4NCj4g CUVTUElfU1lTRVZUX09PQl9SU1RfV0FSTg0KPiA+ICsjZGVmaW5lIEVTUElfU1lTRVZUX0lOVF9T VFMJMHgxMWMNCj4gPiArI2RlZmluZSAgIEVTUElfU1lTRVZUX0lOVF9TVFNfTk1JX09VVAkJRVNQ SV9TWVNFVlRfTk1JX09VVA0KPiA+ICsjZGVmaW5lICAgRVNQSV9TWVNFVlRfSU5UX1NUU19TTUlf T1VUCQlFU1BJX1NZU0VWVF9TTUlfT1VUDQo+ID4gKyNkZWZpbmUgICBFU1BJX1NZU0VWVF9JTlRf U1RTX0hPU1RfUlNUX1dBUk4NCj4gCUVTUElfU1lTRVZUX0hPU1RfUlNUX1dBUk4NCj4gPiArI2Rl ZmluZSAgIEVTUElfU1lTRVZUX0lOVF9TVFNfT09CX1JTVF9XQVJODQo+IAlFU1BJX1NZU0VWVF9P T0JfUlNUX1dBUk4NCj4gPiArI2RlZmluZSAgIEVTUElfU1lTRVZUX0lOVF9TVFNfUExUUlNUTgkJ RVNQSV9TWVNFVlRfUExUUlNUTg0KPiA+ICsjZGVmaW5lICAgRVNQSV9TWVNFVlRfSU5UX1NUU19T VVNQRU5ECQlFU1BJX1NZU0VWVF9TVVNQRU5EDQo+ID4gKyNkZWZpbmUgICBFU1BJX1NZU0VWVF9J TlRfU1RTX1M1X1NMRUVQDQo+IAlFU1BJX1NZU0VWVF9JTlRfUzVfU0xFRVANCj4gPiArI2RlZmlu ZSAgIEVTUElfU1lTRVZUX0lOVF9TVFNfUzRfU0xFRVANCj4gCUVTUElfU1lTRVZUX0lOVF9TNF9T TEVFUA0KPiA+ICsjZGVmaW5lICAgRVNQSV9TWVNFVlRfSU5UX1NUU19TM19TTEVFUA0KPiAJRVNQ SV9TWVNFVlRfSU5UX1MzX1NMRUVQDQo+ID4gKyNkZWZpbmUgRVNQSV9TWVNFVlQxX0lOVF9UMAkw eDEyMA0KPiA+ICsjZGVmaW5lIEVTUElfU1lTRVZUMV9JTlRfVDEJMHgxMjQNCj4gPiArI2RlZmlu ZSBFU1BJX1NZU0VWVDFfSU5UX1QyCTB4MTI4DQo+ID4gKyNkZWZpbmUgRVNQSV9TWVNFVlQxX0lO VF9TVFMJMHgxMmMNCj4gPiArI2RlZmluZSAgIEVTUElfU1lTRVZUMV9JTlRfU1RTX1NVU1BFTkRf V0FSTg0KPiAJRVNQSV9TWVNFVlQxX1NVU1BFTkRfV0FSTg0KPiA+ICsjZGVmaW5lIEVTUElfT09C X1JYX0RNQV9SQl9TSVpFCTB4MTMwDQo+ID4gKyNkZWZpbmUgRVNQSV9PT0JfUlhfRE1BX1JEX1BU UgkweDEzNA0KPiA+ICsjZGVmaW5lCSAgRVNQSV9PT0JfUlhfRE1BX1JEX1BUUl9VUERBVEUJCUJJ VCgzMSkNCj4gPiArI2RlZmluZSBFU1BJX09PQl9SWF9ETUFfV1NfUFRSCTB4MTM4DQo+ID4gKyNk ZWZpbmUgICBFU1BJX09PQl9SWF9ETUFfV1NfUFRSX1JFQ1ZfRU4JQklUKDMxKQ0KPiA+ICsjZGVm aW5lICAgRVNQSV9PT0JfUlhfRE1BX1dTX1BUUl9TUF9NQVNLCUdFTk1BU0soMjcsIDE2KQ0KPiA+ ICsjZGVmaW5lICAgRVNQSV9PT0JfUlhfRE1BX1dTX1BUUl9TUF9TSElGVAkxNg0KPiA+ICsjZGVm aW5lICAgRVNQSV9PT0JfUlhfRE1BX1dTX1BUUl9XUF9NQVNLCUdFTk1BU0soMTEsIDApDQo+ID4g KyNkZWZpbmUgICBFU1BJX09PQl9SWF9ETUFfV1NfUFRSX1dQX1NISUZUCTANCj4gPiArI2RlZmlu ZSBFU1BJX09PQl9UWF9ETUFfUkJfU0laRQkweDE0MA0KPiA+ICsjZGVmaW5lIEVTUElfT09CX1RY X0RNQV9SRF9QVFIJMHgxNDQNCj4gPiArI2RlZmluZQkgIEVTUElfT09CX1RYX0RNQV9SRF9QVFJf VVBEQVRFCQlCSVQoMzEpDQo+ID4gKyNkZWZpbmUgRVNQSV9PT0JfVFhfRE1BX1dSX1BUUgkweDE0 OA0KPiA+ICsjZGVmaW5lCSAgRVNQSV9PT0JfVFhfRE1BX1dSX1BUUl9TRU5EX0VOCUJJVCgzMSkN Cj4gPiArDQo+ID4gKy8qIGNvbGxlY3QgRVNQSV9JTlRfU1RTIGJpdHMgb2YgZVNQSSBjaGFubmVs cyBmb3IgY29udmVuaWVuY2UgKi8NCj4gPiArI2RlZmluZSBFU1BJX0lOVF9TVFNfUEVSSUZfQklU UwkJCVwNCj4gPiArCShFU1BJX0lOVF9TVFNfUEVSSUZfTlBfVFhfQUJUIHwJCVwNCj4gPiArCSBF U1BJX0lOVF9TVFNfUEVSSUZfUENfVFhfQUJUIHwJCVwNCj4gPiArCSBFU1BJX0lOVF9TVFNfUEVS SUZfTlBfUlhfQUJUIHwJCVwNCj4gPiArCSBFU1BJX0lOVF9TVFNfUEVSSUZfUENfUlhfQUJUIHwJ CVwNCj4gPiArCSBFU1BJX0lOVF9TVFNfUEVSSUZfTlBfVFhfRVJSIHwJCVwNCj4gPiArCSBFU1BJ X0lOVF9TVFNfUEVSSUZfUENfVFhfRVJSIHwJCVwNCj4gPiArCSBFU1BJX0lOVF9TVFNfUEVSSUZf TlBfVFhfQ01QTFQgfAlcDQo+ID4gKwkgRVNQSV9JTlRfU1RTX1BFUklGX1BDX1RYX0NNUExUIHwJ XA0KPiA+ICsJIEVTUElfSU5UX1NUU19QRVJJRl9QQ19SWF9DTVBMVCkNCj4gPiArDQo+ID4gKyNk ZWZpbmUgRVNQSV9JTlRfU1RTX1ZXX0JJVFMJCVwNCj4gPiArCShFU1BJX0lOVF9TVFNfVldfU1lT RVZUMSB8CVwNCj4gPiArCSBFU1BJX0lOVF9TVFNfVldfR1BJT0VWVCB8CVwNCj4gPiArCSBFU1BJ X0lOVF9TVFNfVldfU1lTRVZUKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBFU1BJX0lOVF9TVFNfT09C X0JJVFMJCVwNCj4gPiArCShFU1BJX0lOVF9TVFNfT09CX1JYX1RNT1VUIHwJXA0KPiA+ICsJIEVT UElfSU5UX1NUU19PT0JfVFhfRVJSIHwJXA0KPiA+ICsJIEVTUElfSU5UX1NUU19PT0JfVFhfQUJU IHwJXA0KPiA+ICsJIEVTUElfSU5UX1NUU19PT0JfUlhfQUJUIHwJXA0KPiA+ICsJIEVTUElfSU5U X1NUU19PT0JfVFhfQ01QTFQgfAlcDQo+ID4gKwkgRVNQSV9JTlRfU1RTX09PQl9SWF9DTVBMVCkN Cj4gPiArDQo+ID4gKyNkZWZpbmUgRVNQSV9JTlRfU1RTX0ZMQVNIX0JJVFMJCVwNCj4gPiArCShF U1BJX0lOVF9TVFNfRkxBU0hfVFhfRVJSIHwJXA0KPiA+ICsJIEVTUElfSU5UX1NUU19GTEFTSF9U WF9BQlQgfAlcDQo+ID4gKwkgRVNQSV9JTlRfU1RTX0ZMQVNIX1JYX0FCVCB8CVwNCj4gPiArCSBF U1BJX0lOVF9TVFNfRkxBU0hfVFhfQ01QTFQgfAlcDQo+ID4gKwkgRVNQSV9JTlRfU1RTX0ZMQVNI X1JYX0NNUExUKQ0KPiA+ICsNCj4gPiArLyogY29sbGVjdCBFU1BJX0lOVF9FTiBiaXRzIG9mIGVT UEkgY2hhbm5lbHMgZm9yIGNvbnZlbmllbmNlICovDQo+ID4gKyNkZWZpbmUgRVNQSV9JTlRfRU5f UEVSSUZfQklUUwkJCVwNCj4gPiArCShFU1BJX0lOVF9FTl9QRVJJRl9OUF9UWF9BQlQgfAkJXA0K PiA+ICsJIEVTUElfSU5UX0VOX1BFUklGX1BDX1RYX0FCVCB8CQlcDQo+ID4gKwkgRVNQSV9JTlRf RU5fUEVSSUZfTlBfUlhfQUJUIHwJCVwNCj4gPiArCSBFU1BJX0lOVF9FTl9QRVJJRl9QQ19SWF9B QlQgfAkJXA0KPiA+ICsJIEVTUElfSU5UX0VOX1BFUklGX05QX1RYX0VSUiB8CQlcDQo+ID4gKwkg RVNQSV9JTlRfRU5fUEVSSUZfUENfVFhfRVJSIHwJCVwNCj4gPiArCSBFU1BJX0lOVF9FTl9QRVJJ Rl9OUF9UWF9DTVBMVCB8CVwNCj4gPiArCSBFU1BJX0lOVF9FTl9QRVJJRl9QQ19UWF9DTVBMVCB8 CVwNCj4gPiArCSBFU1BJX0lOVF9FTl9QRVJJRl9QQ19SWF9DTVBMVCkNCj4gPiArDQo+ID4gKyNk ZWZpbmUgRVNQSV9JTlRfRU5fVldfQklUUwkJXA0KPiA+ICsJKEVTUElfSU5UX0VOX1ZXX1NZU0VW VDEgfAlcDQo+ID4gKwkgRVNQSV9JTlRfRU5fVldfR1BJT0VWVCB8CVwNCj4gPiArCSBFU1BJX0lO VF9FTl9WV19TWVNFVlQpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIEVTUElfSU5UX0VOX09PQl9CSVRT CQlcDQo+ID4gKwkoRVNQSV9JTlRfRU5fT09CX1JYX1RNT1VUIHwJXA0KPiA+ICsJIEVTUElfSU5U X0VOX09PQl9UWF9FUlIgfAlcDQo+ID4gKwkgRVNQSV9JTlRfRU5fT09CX1RYX0FCVCB8CVwNCj4g PiArCSBFU1BJX0lOVF9FTl9PT0JfUlhfQUJUIHwJXA0KPiA+ICsJIEVTUElfSU5UX0VOX09PQl9U WF9DTVBMVCB8CVwNCj4gPiArCSBFU1BJX0lOVF9FTl9PT0JfUlhfQ01QTFQpDQo+ID4gKw0KPiA+ ICsjZGVmaW5lIEVTUElfSU5UX0VOX0ZMQVNIX0JJVFMJCVwNCj4gPiArCShFU1BJX0lOVF9FTl9G TEFTSF9UWF9FUlIgfAlcDQo+ID4gKwkgRVNQSV9JTlRfRU5fRkxBU0hfVFhfQUJUIHwJXA0KPiA+ ICsJIEVTUElfSU5UX0VOX0ZMQVNIX1JYX0FCVCB8CVwNCj4gPiArCSBFU1BJX0lOVF9FTl9GTEFT SF9UWF9DTVBMVCB8CVwNCj4gPiArCSBFU1BJX0lOVF9FTl9GTEFTSF9SWF9DTVBMVCkNCj4gPiAr DQo+ID4gKyNlbmRpZg0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy9hc3BlZWQvYXNwZWVk LWVzcGktZmxhc2guYw0KPiBiL2RyaXZlcnMvc29jL2FzcGVlZC9hc3BlZWQtZXNwaS1mbGFzaC5j DQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLmQxZWRl MjJmMjJlMw0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL3NvYy9hc3BlZWQv YXNwZWVkLWVzcGktZmxhc2guYw0KPiA+IEBAIC0wLDAgKzEsMzUyIEBADQo+ID4gKy8vIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKw0KPiA+ICsvKg0KPiA+ICsgKiBDb3B5cmlnaHQg MjAyMSBBU1BFRUQgVGVjaG5vbG9neSBJbmMuDQo+ID4gKyAqLw0KPiA+ICsjaW5jbHVkZSA8bGlu dXgvZnMuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPg0KPiA+ICsjaW5jbHVk ZSA8bGludXgvbWlzY2RldmljZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5o Pg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC91 YWNjZXNzLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+DQo+ID4gKyNpbmNsdWRl IDxsaW51eC9taXNjZGV2aWNlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5o Pg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgImFzcGVlZC1lc3BpLWlvYy5oIg0KPiA+ICsjaW5jbHVk ZSAiYXNwZWVkLWVzcGktY3RybC5oIg0KPiA+ICsjaW5jbHVkZSAiYXNwZWVkLWVzcGktZmxhc2gu aCINCj4gPiArDQo+ID4gKyNkZWZpbmUgRkxBU0hfTURFVl9OQU1FCSJhc3BlZWQtZXNwaS1mbGFz aCINCj4gPiArDQo+ID4gK3N0YXRpYyBsb25nIGFzcGVlZF9lc3BpX2ZsYXNoX2dldF9yeChzdHJ1 Y3QgZmlsZSAqZnAsDQo+ID4gKwkJCQkgICAgIHN0cnVjdCBhc3BlZWRfZXNwaV9pb2MgKmlvYywN Cj4gPiArCQkJCSAgICAgc3RydWN0IGFzcGVlZF9lc3BpX2ZsYXNoICplc3BpX2ZsYXNoKQ0KPiA+ ICt7DQo+ID4gKwlpbnQgaSwgcmMgPSAwOw0KPiA+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsNCj4g PiArCXVpbnQzMl90IHJlZzsNCj4gPiArCXVpbnQzMl90IGN5YywgdGFnLCBsZW47DQo+ID4gKwl1 aW50OF90ICpwa3Q7DQo+ID4gKwl1aW50MzJfdCBwa3RfbGVuOw0KPiA+ICsJc3RydWN0IGVzcGlf Y29tbV9oZHIgKmhkcjsNCj4gPiArCXN0cnVjdCBhc3BlZWRfZXNwaV9jdHJsICplc3BpX2N0cmwg PSBlc3BpX2ZsYXNoLT5jdHJsOw0KPiA+ICsNCj4gPiArCWlmIChmcC0+Zl9mbGFncyAmIE9fTk9O QkxPQ0spIHsNCj4gPiArCQlpZiAobXV0ZXhfdHJ5bG9jaygmZXNwaV9mbGFzaC0+Z2V0X3J4X210 eCkpDQo+ID4gKwkJCXJldHVybiAtRUJVU1k7DQo+ID4gKw0KPiA+ICsJCWlmICghZXNwaV9mbGFz aC0+cnhfcmVhZHkpIHsNCj4gPiArCQkJcmMgPSAtRU5PREFUQTsNCj4gPiArCQkJZ290byB1bmxv Y2tfbXR4X25fb3V0Ow0KPiA+ICsJCX0NCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJbXV0ZXhfbG9j aygmZXNwaV9mbGFzaC0+Z2V0X3J4X210eCk7DQo+ID4gKw0KPiA+ICsJCWlmICghZXNwaV9mbGFz aC0+cnhfcmVhZHkpIHsNCj4gPiArCQkJcmMgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZXNw aV9mbGFzaC0+d3EsDQo+ID4gKwkJCQkJCSAgICAgIGVzcGlfZmxhc2gtPnJ4X3JlYWR5KTsNCj4g PiArCQkJaWYgKHJjID09IC1FUkVTVEFSVFNZUykgew0KPiA+ICsJCQkJcmMgPSAtRUlOVFI7DQo+ ID4gKwkJCQlnb3RvIHVubG9ja19tdHhfbl9vdXQ7DQo+ID4gKwkJCX0NCj4gPiArCQl9DQo+ID4g Kwl9DQo+ID4gKw0KPiA+ICsJLyogY29tbW9uIGhlYWRlciAoaS5lLiBjeWNsZSB0eXBlLCB0YWcs IGFuZCBsZW5ndGgpIGlzIHRha2VuIGJ5IEhXICovDQo+ID4gKwlyZWdtYXBfcmVhZChlc3BpX2N0 cmwtPm1hcCwgRVNQSV9GTEFTSF9SWF9DVFJMLCAmcmVnKTsNCj4gPiArCWN5YyA9IChyZWcgJiBF U1BJX0ZMQVNIX1JYX0NUUkxfQ1lDX01BU0spID4+DQo+IEVTUElfRkxBU0hfUlhfQ1RSTF9DWUNf U0hJRlQ7DQo+ID4gKwl0YWcgPSAocmVnICYgRVNQSV9GTEFTSF9SWF9DVFJMX1RBR19NQVNLKSA+ Pg0KPiBFU1BJX0ZMQVNIX1JYX0NUUkxfVEFHX1NISUZUOw0KPiA+ICsJbGVuID0gKHJlZyAmIEVT UElfRkxBU0hfUlhfQ1RSTF9MRU5fTUFTSykgPj4NCj4gRVNQSV9GTEFTSF9SWF9DVFJMX0xFTl9T SElGVDsNCj4gPiArDQo+ID4gKwkvKg0KPiA+ICsJICogY2FsY3VsYXRlIHRoZSBsZW5ndGggb2Yg dGhlIHJlc3QgcGFydCBvZiB0aGUNCj4gPiArCSAqIGVTUEkgcGFja2V0IHRvIGJlIHJlYWQgZnJv bSBIVyBhbmQgY29waWVkIHRvDQo+ID4gKwkgKiB1c2VyIHNwYWNlLg0KPiA+ICsJICovDQo+ID4g Kwlzd2l0Y2ggKGN5Yykgew0KPiA+ICsJY2FzZSBFU1BJX0ZMQVNIX1JFQUQ6DQo+ID4gKwljYXNl IEVTUElfRkxBU0hfV1JJVEU6DQo+ID4gKwljYXNlIEVTUElfRkxBU0hfRVJBU0U6DQo+ID4gKwkJ cGt0X2xlbiA9ICgobGVuKSA/IGxlbiA6IEVTUElfUExEX0xFTl9NQVgpICsNCj4gPiArCQkJICBz aXplb2Yoc3RydWN0IGVzcGlfZmxhc2hfcndlKTsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2Ug RVNQSV9GTEFTSF9TVUNfQ01QTFRfRF9NSURETEU6DQo+ID4gKwljYXNlIEVTUElfRkxBU0hfU1VD X0NNUExUX0RfRklSU1Q6DQo+ID4gKwljYXNlIEVTUElfRkxBU0hfU1VDX0NNUExUX0RfTEFTVDoN Cj4gPiArCWNhc2UgRVNQSV9GTEFTSF9TVUNfQ01QTFRfRF9PTkxZOg0KPiA+ICsJCXBrdF9sZW4g PSAoKGxlbikgPyBsZW4gOiBFU1BJX1BMRF9MRU5fTUFYKSArDQo+ID4gKwkJCSAgc2l6ZW9mKHN0 cnVjdCBlc3BpX2ZsYXNoX2NtcGx0KTsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgRVNQSV9G TEFTSF9TVUNfQ01QTFQ6DQo+ID4gKwljYXNlIEVTUElfRkxBU0hfVU5TVUNfQ01QTFQ6DQo+ID4g KwkJcGt0X2xlbiA9IGxlbiArIHNpemVvZihzdHJ1Y3QgZXNwaV9mbGFzaF9jbXBsdCk7DQo+ID4g KwkJYnJlYWs7DQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJCXJjID0gLUVGQVVMVDsNCj4gPiArCQln b3RvIHVubG9ja19tdHhfbl9vdXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKGlvYy0+cGt0 X2xlbiA8IHBrdF9sZW4pIHsNCj4gPiArCQlyYyA9IC1FSU5WQUw7DQo+ID4gKwkJZ290byB1bmxv Y2tfbXR4X25fb3V0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXBrdCA9IHZtYWxsb2MocGt0X2xl bik7DQo+ID4gKwlpZiAoIXBrdCkgew0KPiA+ICsJCXJjID0gLUVOT01FTTsNCj4gPiArCQlnb3Rv IHVubG9ja19tdHhfbl9vdXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaGRyID0gKHN0cnVjdCBl c3BpX2NvbW1faGRyICopcGt0Ow0KPiA+ICsJaGRyLT5jeWMgPSBjeWM7DQo+ID4gKwloZHItPnRh ZyA9IHRhZzsNCj4gPiArCWhkci0+bGVuX2ggPSBsZW4gPj4gODsNCj4gPiArCWhkci0+bGVuX2wg PSBsZW4gJiAweGZmOw0KPiA+ICsNCj4gPiArCWlmIChlc3BpX2ZsYXNoLT5kbWFfbW9kZSkgew0K PiA+ICsJCW1lbWNweShoZHIgKyAxLCBlc3BpX2ZsYXNoLT5kbWEucnhfdmlydCwNCj4gPiArCQkg ICAgICAgcGt0X2xlbiAtIHNpemVvZigqaGRyKSk7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCWZv ciAoaSA9IHNpemVvZigqaGRyKTsgaSA8IHBrdF9sZW47ICsraSkgew0KPiA+ICsJCQlyZWdtYXBf cmVhZChlc3BpX2N0cmwtPm1hcCwNCj4gPiArCQkJCSAgICBFU1BJX0ZMQVNIX1JYX1BPUlQsICZy ZWcpOw0KPiA+ICsJCQlwa3RbaV0gPSByZWcgJiAweGZmOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4g PiArDQo+ID4gKwlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWlvYy0+cGt0LCBwa3Qs IHBrdF9sZW4pKSB7DQo+ID4gKwkJcmMgPSAtRUZBVUxUOw0KPiA+ICsJCWdvdG8gZnJlZV9uX291 dDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmZXNwaV9mbGFzaC0+ bG9jaywgZmxhZ3MpOw0KPiA+ICsNCj4gPiArCXJlZ21hcF93cml0ZV9iaXRzKGVzcGlfY3RybC0+ bWFwLCBFU1BJX0ZMQVNIX1JYX0NUUkwsDQo+ID4gKwkJCSAgRVNQSV9GTEFTSF9SWF9DVFJMX1BF TkRfU0VSViwNCj4gPiArCQkJICBFU1BJX0ZMQVNIX1JYX0NUUkxfUEVORF9TRVJWKTsNCj4gPiAr DQo+ID4gKwllc3BpX2ZsYXNoLT5yeF9yZWFkeSA9IDA7DQo+ID4gKw0KPiA+ICsJc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZSgmZXNwaV9mbGFzaC0+bG9jaywgZmxhZ3MpOw0KPiA+ICsNCj4gPiArZnJl ZV9uX291dDoNCj4gPiArCXZmcmVlKHBrdCk7DQo+ID4gKw0KPiA+ICt1bmxvY2tfbXR4X25fb3V0 Og0KPiA+ICsJbXV0ZXhfdW5sb2NrKCZlc3BpX2ZsYXNoLT5nZXRfcnhfbXR4KTsNCj4gPiArDQo+ ID4gKwlyZXR1cm4gcmM7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBsb25nIGFzcGVlZF9l c3BpX2ZsYXNoX3B1dF90eChzdHJ1Y3QgZmlsZSAqZnAsDQo+ID4gKwkJCQkgICAgIHN0cnVjdCBh c3BlZWRfZXNwaV9pb2MgKmlvYywNCj4gPiArCQkJCSAgICAgc3RydWN0IGFzcGVlZF9lc3BpX2Zs YXNoICplc3BpX2ZsYXNoKQ0KPiA+ICt7DQo+ID4gKwlpbnQgaSwgcmMgPSAwOw0KPiA+ICsJdWlu dDMyX3QgcmVnOw0KPiA+ICsJdWludDMyX3QgY3ljLCB0YWcsIGxlbjsNCj4gPiArCXVpbnQ4X3Qg KnBrdDsNCj4gPiArCXN0cnVjdCBlc3BpX2NvbW1faGRyICpoZHI7DQo+ID4gKwlzdHJ1Y3QgYXNw ZWVkX2VzcGlfY3RybCAqZXNwaV9jdHJsID0gZXNwaV9mbGFzaC0+Y3RybDsNCj4gPiArDQo+ID4g KwlpZiAoIW11dGV4X3RyeWxvY2soJmVzcGlfZmxhc2gtPnB1dF90eF9tdHgpKQ0KPiA+ICsJCXJl dHVybiAtRUFHQUlOOw0KPiA+ICsNCj4gPiArCXJlZ21hcF9yZWFkKGVzcGlfY3RybC0+bWFwLCBF U1BJX0ZMQVNIX1RYX0NUUkwsICZyZWcpOw0KPiA+ICsJaWYgKHJlZyAmIEVTUElfRkxBU0hfVFhf Q1RSTF9UUklHR0VSKSB7DQo+ID4gKwkJcmMgPSAtRUJVU1k7DQo+ID4gKwkJZ290byB1bmxvY2tf bXR4X25fb3V0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXBrdCA9IHZtYWxsb2MoaW9jLT5wa3Rf bGVuKTsNCj4gPiArCWlmICghcGt0KSB7DQo+ID4gKwkJcmMgPSAtRU5PTUVNOw0KPiA+ICsJCWdv dG8gdW5sb2NrX210eF9uX291dDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwloZHIgPSAoc3RydWN0 IGVzcGlfY29tbV9oZHIgKilwa3Q7DQo+ID4gKw0KPiA+ICsJaWYgKGNvcHlfZnJvbV91c2VyKHBr dCwgKHZvaWQgX191c2VyICopaW9jLT5wa3QsIGlvYy0+cGt0X2xlbikpIHsNCj4gPiArCQlyYyA9 IC1FRkFVTFQ7DQo+ID4gKwkJZ290byBmcmVlX25fb3V0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAr CS8qDQo+ID4gKwkgKiBjb21tb24gaGVhZGVyIChpLmUuIGN5Y2xlIHR5cGUsIHRhZywgYW5kIGxl bmd0aCkNCj4gPiArCSAqIHBhcnQgaXMgd3JpdHRlbiB0byBIVyByZWdpc3RlcnMNCj4gPiArCSAq Lw0KPiA+ICsJaWYgKGVzcGlfZmxhc2gtPmRtYV9tb2RlKSB7DQo+ID4gKwkJbWVtY3B5KGVzcGlf Zmxhc2gtPmRtYS50eF92aXJ0LCBoZHIgKyAxLA0KPiA+ICsJCSAgICAgICBpb2MtPnBrdF9sZW4g LSBzaXplb2YoKmhkcikpOw0KPiA+ICsJCWRtYV93bWIoKTsNCj4gPiArCX0gZWxzZSB7DQo+ID4g KwkJZm9yIChpID0gc2l6ZW9mKCpoZHIpOyBpIDwgaW9jLT5wa3RfbGVuOyArK2kpDQo+ID4gKwkJ CXJlZ21hcF93cml0ZShlc3BpX2N0cmwtPm1hcCwNCj4gPiArCQkJCSAgICAgRVNQSV9GTEFTSF9U WF9QT1JULCBwa3RbaV0pOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWN5YyA9IGhkci0+Y3ljOw0K PiA+ICsJdGFnID0gaGRyLT50YWc7DQo+ID4gKwlsZW4gPSAoaGRyLT5sZW5faCA8PCA4KSB8ICho ZHItPmxlbl9sICYgMHhmZik7DQo+ID4gKw0KPiA+ICsJcmVnID0gKChjeWMgPDwgRVNQSV9GTEFT SF9UWF9DVFJMX0NZQ19TSElGVCkgJg0KPiBFU1BJX0ZMQVNIX1RYX0NUUkxfQ1lDX01BU0spDQo+ ID4gKwkJfCAoKHRhZyA8PCBFU1BJX0ZMQVNIX1RYX0NUUkxfVEFHX1NISUZUKSAmDQo+IEVTUElf RkxBU0hfVFhfQ1RSTF9UQUdfTUFTSykNCj4gPiArCQl8ICgobGVuIDw8IEVTUElfRkxBU0hfVFhf Q1RSTF9MRU5fU0hJRlQpICYNCj4gRVNQSV9GTEFTSF9UWF9DVFJMX0xFTl9NQVNLKQ0KPiA+ICsJ CXwgRVNQSV9GTEFTSF9UWF9DVFJMX1RSSUdHRVI7DQo+ID4gKw0KPiA+ICsJcmVnbWFwX3dyaXRl KGVzcGlfY3RybC0+bWFwLCBFU1BJX0ZMQVNIX1RYX0NUUkwsIHJlZyk7DQo+ID4gKw0KPiA+ICtm cmVlX25fb3V0Og0KPiA+ICsJdmZyZWUocGt0KTsNCj4gPiArDQo+ID4gK3VubG9ja19tdHhfbl9v dXQ6DQo+ID4gKwltdXRleF91bmxvY2soJmVzcGlfZmxhc2gtPnB1dF90eF9tdHgpOw0KPiA+ICsN Cj4gPiArCXJldHVybiByYzsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGxvbmcgYXNwZWVk X2VzcGlfZmxhc2hfaW9jdGwoc3RydWN0IGZpbGUgKmZwLCB1bnNpZ25lZCBpbnQgY21kLA0KPiB1 bnNpZ25lZCBsb25nIGFyZykNCj4gPiArew0KPiA+ICsJc3RydWN0IGFzcGVlZF9lc3BpX2lvYyBp b2M7DQo+ID4gKwlzdHJ1Y3QgYXNwZWVkX2VzcGlfZmxhc2ggKmVzcGlfZmxhc2ggPSBjb250YWlu ZXJfb2YoDQo+ID4gKwkJCWZwLT5wcml2YXRlX2RhdGEsDQo+ID4gKwkJCXN0cnVjdCBhc3BlZWRf ZXNwaV9mbGFzaCwNCj4gPiArCQkJbWRldik7DQo+ID4gKw0KPiA+ICsJaWYgKGNvcHlfZnJvbV91 c2VyKCZpb2MsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGlvYykpKQ0KPiA+ICsJCXJldHVy biAtRUZBVUxUOw0KPiA+ICsNCj4gPiArCWlmIChpb2MucGt0X2xlbiA+IEVTUElfUEtUX0xFTl9N QVgpDQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsJc3dpdGNoIChjbWQpIHsN Cj4gPiArCWNhc2UgQVNQRUVEX0VTUElfRkxBU0hfR0VUX1JYOg0KPiA+ICsJCXJldHVybiBhc3Bl ZWRfZXNwaV9mbGFzaF9nZXRfcngoZnAsICZpb2MsIGVzcGlfZmxhc2gpOw0KPiA+ICsJY2FzZSBB U1BFRURfRVNQSV9GTEFTSF9QVVRfVFg6DQo+ID4gKwkJcmV0dXJuIGFzcGVlZF9lc3BpX2ZsYXNo X3B1dF90eChmcCwgJmlvYywgZXNwaV9mbGFzaCk7DQo+ID4gKwl9Ow0KPiA+ICsNCj4gPiArCXJl dHVybiAtRUlOVkFMOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICt2b2lkIGFzcGVlZF9lc3BpX2ZsYXNo X2V2ZW50KHVpbnQzMl90IHN0cywgc3RydWN0IGFzcGVlZF9lc3BpX2ZsYXNoDQo+ICplc3BpX2Zs YXNoKQ0KPiA+ICt7DQo+ID4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KPiA+ICsNCj4gPiArCWlm IChzdHMgJiBFU1BJX0lOVF9TVFNfRkxBU0hfUlhfQ01QTFQpIHsNCj4gPiArCQlzcGluX2xvY2tf aXJxc2F2ZSgmZXNwaV9mbGFzaC0+bG9jaywgZmxhZ3MpOw0KPiA+ICsJCWVzcGlfZmxhc2gtPnJ4 X3JlYWR5ID0gMTsNCj4gPiArCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlc3BpX2ZsYXNoLT5s b2NrLCBmbGFncyk7DQo+ID4gKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZlc3BpX2ZsYXNoLT53 cSk7DQo+ID4gKwl9DQo+ID4gK30NCj4gPiArDQo+ID4gK3ZvaWQgYXNwZWVkX2VzcGlfZmxhc2hf ZW5hYmxlKHN0cnVjdCBhc3BlZWRfZXNwaV9mbGFzaCAqZXNwaV9mbGFzaCkNCj4gPiArew0KPiA+ ICsJc3RydWN0IGFzcGVlZF9lc3BpX2ZsYXNoX2RtYSAqZG1hID0gJmVzcGlfZmxhc2gtPmRtYTsN Cj4gPiArCXN0cnVjdCBhc3BlZWRfZXNwaV9jdHJsICplc3BpX2N0cmwgPSBlc3BpX2ZsYXNoLT5j dHJsOw0KPiA+ICsNCj4gPiArCXJlZ21hcF91cGRhdGVfYml0cyhlc3BpX2N0cmwtPm1hcCwgRVNQ SV9DVFJMLA0KPiA+ICsJCQkgICBFU1BJX0NUUkxfRkxBU0hfU1dfTU9ERV9NQVNLLA0KPiA+ICsJ CQkgICAoZXNwaV9mbGFzaC0+c2Fmc19tb2RlIDw8DQo+IEVTUElfQ1RSTF9GTEFTSF9TV19NT0RF X1NISUZUKSk7DQo+ID4gKw0KPiA+ICsJaWYgKGVzcGlfZmxhc2gtPmRtYV9tb2RlKSB7DQo+ID4g KwkJcmVnbWFwX3dyaXRlKGVzcGlfY3RybC0+bWFwLCBFU1BJX0ZMQVNIX1RYX0RNQSwNCj4gZG1h LT50eF9hZGRyKTsNCj4gPiArCQlyZWdtYXBfd3JpdGUoZXNwaV9jdHJsLT5tYXAsIEVTUElfRkxB U0hfUlhfRE1BLA0KPiBkbWEtPnJ4X2FkZHIpOw0KPiA+ICsJCXJlZ21hcF91cGRhdGVfYml0cyhl c3BpX2N0cmwtPm1hcCwgRVNQSV9DVFJMLA0KPiA+ICsJCQkJICAgRVNQSV9DVFJMX0ZMQVNIX1RY X0RNQV9FTiB8DQo+IEVTUElfQ1RSTF9GTEFTSF9SWF9ETUFfRU4sDQo+ID4gKwkJCQkgICBFU1BJ X0NUUkxfRkxBU0hfVFhfRE1BX0VOIHwNCj4gRVNQSV9DVFJMX0ZMQVNIX1JYX0RNQV9FTik7DQo+ ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmVnbWFwX3dyaXRlKGVzcGlfY3RybC0+bWFwLCBFU1BJX0lO VF9TVFMsDQo+ID4gKwkJICAgICBFU1BJX0lOVF9TVFNfRkxBU0hfQklUUyk7DQo+ID4gKw0KPiA+ ICsJcmVnbWFwX3VwZGF0ZV9iaXRzKGVzcGlfY3RybC0+bWFwLCBFU1BJX0lOVF9FTiwNCj4gPiAr CQkJICAgRVNQSV9JTlRfRU5fRkxBU0hfQklUUywNCj4gPiArCQkJICAgRVNQSV9JTlRfRU5fRkxB U0hfQklUUyk7DQo+ID4gKw0KPiA+ICsJcmVnbWFwX3VwZGF0ZV9iaXRzKGVzcGlfY3RybC0+bWFw LCBFU1BJX0NUUkwsDQo+ID4gKwkJCSAgIEVTUElfQ1RSTF9GTEFTSF9TV19SRFksDQo+ID4gKwkJ CSAgIEVTUElfQ1RSTF9GTEFTSF9TV19SRFkpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhc3BlZWRfZXNwaV9mbGFzaF9mb3BzID0gew0K PiA+ICsJLm93bmVyID0gVEhJU19NT0RVTEUsDQo+ID4gKwkudW5sb2NrZWRfaW9jdGwgPSBhc3Bl ZWRfZXNwaV9mbGFzaF9pb2N0bCwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3ZvaWQgKmFzcGVlZF9l c3BpX2ZsYXNoX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGFzcGVlZF9lc3BpX2N0 cmwNCj4gKmVzcGlfY3RybCkNCj4gPiArew0KPiA+ICsJaW50IHJjID0gMDsNCj4gPiArCXN0cnVj dCBhc3BlZWRfZXNwaV9mbGFzaCAqZXNwaV9mbGFzaDsNCj4gPiArCXN0cnVjdCBhc3BlZWRfZXNw aV9mbGFzaF9kbWEgKmRtYTsNCj4gPiArDQo+ID4gKwllc3BpX2ZsYXNoID0gZGV2bV9remFsbG9j KGRldiwgc2l6ZW9mKCplc3BpX2ZsYXNoKSwgR0ZQX0tFUk5FTCk7DQo+ID4gKwlpZiAoIWVzcGlf Zmxhc2gpDQo+ID4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7DQo+ID4gKw0KPiA+ICsJZXNw aV9mbGFzaC0+Y3RybCA9IGVzcGlfY3RybDsNCj4gPiArDQo+ID4gKwlpbml0X3dhaXRxdWV1ZV9o ZWFkKCZlc3BpX2ZsYXNoLT53cSk7DQo+ID4gKw0KPiA+ICsJc3Bpbl9sb2NrX2luaXQoJmVzcGlf Zmxhc2gtPmxvY2spOw0KPiA+ICsNCj4gPiArCW11dGV4X2luaXQoJmVzcGlfZmxhc2gtPnB1dF90 eF9tdHgpOw0KPiA+ICsJbXV0ZXhfaW5pdCgmZXNwaV9mbGFzaC0+Z2V0X3J4X210eCk7DQo+ID4g Kw0KPiA+ICsJaWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYtPm9mX25vZGUsICJmbGFzaCxk bWEtbW9kZSIpKQ0KPiA+ICsJCWVzcGlfZmxhc2gtPmRtYV9tb2RlID0gMTsNCj4gPiArDQo+ID4g KwlvZl9wcm9wZXJ0eV9yZWFkX3UzMihkZXYtPm9mX25vZGUsICJmbGFzaCxzYWZzLW1vZGUiLA0K PiAmZXNwaV9mbGFzaC0+c2Fmc19tb2RlKTsNCj4gPiArCWlmIChlc3BpX2ZsYXNoLT5zYWZzX21v ZGUgPj0gU0FGU19NT0RFUykgew0KPiA+ICsJCWRldl9lcnIoZGV2LCAiaW52YWxpZCBTQUZTIG1v ZGVcbiIpOw0KPiA+ICsJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOw0KPiA+ICsJfQ0KPiA+ICsN Cj4gPiArCWlmIChlc3BpX2ZsYXNoLT5kbWFfbW9kZSkgew0KPiA+ICsJCWRtYSA9ICZlc3BpX2Zs YXNoLT5kbWE7DQo+ID4gKw0KPiA+ICsJCWRtYS0+dHhfdmlydCA9IGRtYV9hbGxvY19jb2hlcmVu dChkZXYsIFBBR0VfU0laRSwNCj4gPiArCQkJCQkJICAmZG1hLT50eF9hZGRyLCBHRlBfS0VSTkVM KTsNCj4gPiArCQlpZiAoIWRtYS0+dHhfdmlydCkgew0KPiBIZXJlIGFuZCBhIGZldyBsaW5lcyBi ZWxvdywgZG1hX2FsbG9jX2NvaGVyZW50KCkgY291bGQgYmUgcmVwbGFjZWQgYnkNCj4gZG1hbV9h bGxvY19jb2hlcmVudCgpIChpdHMgbWFuYWdlZCB2ZXJzaW9uKSB0byBzaW1wbGlmeSBlcnJvciBo YW5kbGluZw0KPiBhbmQgZnJlZWluZyBvZiByZXNvdXJjZXMuDQoNCldpbGwgcmV2aXNlIGFzIHN1 Z2dlc3RlZC4NCg0KVGhhbmtzIGZvciB0aGUgcmV2aWV3Lg0KDQpDaGlhd2VpDQoNCj4gDQo+ID4g KwkJCWRldl9lcnIoZGV2LCAiY2Fubm90IGFsbG9jYXRlIERNQSBUWCBidWZmZXJcbiIpOw0KPiA+ ICsJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCWRt YS0+cnhfdmlydCA9IGRtYV9hbGxvY19jb2hlcmVudChkZXYsIFBBR0VfU0laRSwNCj4gPiArCQkJ CQkJICAmZG1hLT5yeF9hZGRyLCBHRlBfS0VSTkVMKTsNCj4gPiArCQlpZiAoIWRtYS0+cnhfdmly dCkgew0KPiA+ICsJCQlkZXZfZXJyKGRldiwgImNhbm5vdCBhbGxvY2F0ZSBETUEgUlggYnVmZmVy XG4iKTsNCj4gPiArCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7DQo+ID4gKwkJfQ0KPiA+ICsJ fQ0KPiA+ICsNCj4gPiArCWVzcGlfZmxhc2gtPm1kZXYucGFyZW50ID0gZGV2Ow0KPiA+ICsJZXNw aV9mbGFzaC0+bWRldi5taW5vciA9IE1JU0NfRFlOQU1JQ19NSU5PUjsNCj4gPiArCWVzcGlfZmxh c2gtPm1kZXYubmFtZSA9IGRldm1fa2FzcHJpbnRmKGRldiwgR0ZQX0tFUk5FTCwgIiVzIiwNCj4g RkxBU0hfTURFVl9OQU1FKTsNCj4gPiArCWVzcGlfZmxhc2gtPm1kZXYuZm9wcyA9ICZhc3BlZWRf ZXNwaV9mbGFzaF9mb3BzOw0KPiA+ICsJcmMgPSBtaXNjX3JlZ2lzdGVyKCZlc3BpX2ZsYXNoLT5t ZGV2KTsNCj4gPiArCWlmIChyYykgew0KPiA+ICsJCWRldl9lcnIoZGV2LCAiY2Fubm90IHJlZ2lz dGVyIGRldmljZVxuIik7DQo+ID4gKwkJcmV0dXJuIEVSUl9QVFIocmMpOw0KPiA+ICsJfQ0KPiA+ ICsNCj4gPiArCWFzcGVlZF9lc3BpX2ZsYXNoX2VuYWJsZShlc3BpX2ZsYXNoKTsNCj4gPiArDQo+ ID4gKwlyZXR1cm4gZXNwaV9mbGFzaDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArdm9pZCBhc3BlZWRf ZXNwaV9mbGFzaF9mcmVlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGFzcGVlZF9lc3BpX2Zs YXNoDQo+ICplc3BpX2ZsYXNoKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgYXNwZWVkX2VzcGlfZmxh c2hfZG1hICpkbWEgPSAmZXNwaV9mbGFzaC0+ZG1hOw0KPiA+ICsNCj4gPiArCWlmIChlc3BpX2Zs YXNoLT5kbWFfbW9kZSkgew0KPiA+ICsJCWRtYV9mcmVlX2NvaGVyZW50KGRldiwgUEFHRV9TSVpF LCBkbWEtPnR4X3ZpcnQsIGRtYS0+dHhfYWRkcik7DQo+ID4gKwkJZG1hX2ZyZWVfY29oZXJlbnQo ZGV2LCBQQUdFX1NJWkUsIGRtYS0+cnhfdmlydCwgZG1hLT5yeF9hZGRyKTsNCj4gPiArCX0NCj4g PiArDQo+ID4gKwltdXRleF9kZXN0cm95KCZlc3BpX2ZsYXNoLT5wdXRfdHhfbXR4KTsNCj4gPiAr CW11dGV4X2Rlc3Ryb3koJmVzcGlfZmxhc2gtPmdldF9yeF9tdHgpOw0KPiA+ICsNCj4gPiArCW1p c2NfZGVyZWdpc3RlcigmZXNwaV9mbGFzaC0+bWRldik7DQo+ID4gK30NCj4gPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9zb2MvYXNwZWVkL2FzcGVlZC1lc3BpLWZsYXNoLmgNCj4gYi9kcml2ZXJzL3Nv Yy9hc3BlZWQvYXNwZWVkLWVzcGktZmxhc2guaA0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ ID4gaW5kZXggMDAwMDAwMDAwMDAwLi5iZDUxNzczMjllNTANCj4gPiAtLS0gL2Rldi9udWxsDQo+ ID4gKysrIGIvZHJpdmVycy9zb2MvYXNwZWVkL2FzcGVlZC1lc3BpLWZsYXNoLmgNCj4gPiBAQCAt MCwwICsxLDQ1IEBADQo+ID4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKyAq Lw0KPiA+ICsvKg0KPiA+ICsgKiBDb3B5cmlnaHQgMjAyMSBBU1BFRUQgVGVjaG5vbG9neSBJbmMu DQo+ID4gKyAqLw0KPiA+ICsjaWZuZGVmIF9BU1BFRURfRVNQSV9GTEFTSF9IXw0KPiA+ICsjZGVm aW5lIF9BU1BFRURfRVNQSV9GTEFTSF9IXw0KPiA+ICsNCj4gPiArZW51bSBhc3BlZWRfZXNwaV9m bGFzaF9zYWZzX21vZGUgew0KPiA+ICsJU0FGU19NT0RFX01JWCwNCj4gPiArCVNBRlNfTU9ERV9T VywNCj4gPiArCVNBRlNfTU9ERV9IVywNCj4gPiArCVNBRlNfTU9ERVMsDQo+ID4gK307DQo+ID4g Kw0KPiA+ICtzdHJ1Y3QgYXNwZWVkX2VzcGlfZmxhc2hfZG1hIHsNCj4gPiArCXZvaWQgKnR4X3Zp cnQ7DQo+ID4gKwlkbWFfYWRkcl90IHR4X2FkZHI7DQo+ID4gKwl2b2lkICpyeF92aXJ0Ow0KPiA+ ICsJZG1hX2FkZHJfdCByeF9hZGRyOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IGFzcGVl ZF9lc3BpX2ZsYXNoIHsNCj4gPiArCXVpbnQzMl90IHNhZnNfbW9kZTsNCj4gPiArDQo+ID4gKwl1 aW50MzJfdCBkbWFfbW9kZTsNCj4gPiArCXN0cnVjdCBhc3BlZWRfZXNwaV9mbGFzaF9kbWEgZG1h Ow0KPiA+ICsNCj4gPiArCXVpbnQzMl90IHJ4X3JlYWR5Ow0KPiA+ICsJd2FpdF9xdWV1ZV9oZWFk X3Qgd3E7DQo+ID4gKw0KPiA+ICsJc3RydWN0IG11dGV4IGdldF9yeF9tdHg7DQo+ID4gKwlzdHJ1 Y3QgbXV0ZXggcHV0X3R4X210eDsNCj4gPiArDQo+ID4gKwlzcGlubG9ja190IGxvY2s7DQo+ID4g Kw0KPiA+ICsJc3RydWN0IG1pc2NkZXZpY2UgbWRldjsNCj4gPiArCXN0cnVjdCBhc3BlZWRfZXNw aV9jdHJsICpjdHJsOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArdm9pZCBhc3BlZWRfZXNwaV9mbGFz aF9ldmVudCh1aW50MzJfdCBzdHMsIHN0cnVjdCBhc3BlZWRfZXNwaV9mbGFzaA0KPiAqZXNwaV9m bGFzaCk7DQo+ID4gK3ZvaWQgYXNwZWVkX2VzcGlfZmxhc2hfZW5hYmxlKHN0cnVjdCBhc3BlZWRf ZXNwaV9mbGFzaCAqZXNwaV9mbGFzaCk7DQo+ID4gK3ZvaWQgKmFzcGVlZF9lc3BpX2ZsYXNoX2Fs bG9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGFzcGVlZF9lc3BpX2N0cmwNCj4gKmVzcGlf Y3RybCk7DQo+ID4gK3ZvaWQgYXNwZWVkX2VzcGlfZmxhc2hfZnJlZShzdHJ1Y3QgZGV2aWNlICpk ZXYsIHN0cnVjdCBhc3BlZWRfZXNwaV9mbGFzaA0KPiAqZXNwaV9mbGFzaCk7DQo+ID4gKw0KPiA+ ICsjZW5kaWYNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MvYXNwZWVkL2FzcGVlZC1lc3Bp LWlvYy5oDQo+IGIvZHJpdmVycy9zb2MvYXNwZWVkL2FzcGVlZC1lc3BpLWlvYy5oDQo+ID4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLmE3OGYxMDY5ODQxZg0K PiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL3NvYy9hc3BlZWQvYXNwZWVkLWVz cGktaW9jLmgNCj4gPiBAQCAtMCwwICsxLDE5NSBAQA0KPiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMCsgKi8NCj4gPiArLyoNCj4gPiArICogQ29weXJpZ2h0IDIwMjEgQXNw ZWVkIFRlY2hub2xvZ3kgSW5jLg0KPiA+ICsgKi8NCj4gPiArI2lmbmRlZiBfQVNQRUVEX0VTUElf SU9DX0gNCj4gPiArI2RlZmluZSBfQVNQRUVEX0VTUElfSU9DX0gNCj4gPiArDQo+ID4gKyNpbmNs dWRlIDxsaW51eC9pb2N0bC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4NCj4gPiAr DQo+ID4gKy8qDQo+ID4gKyAqIGVTUEkgY3ljbGUgdHlwZSBlbmNvZGluZw0KPiA+ICsgKg0KPiA+ ICsgKiBTZWN0aW9uIDUuMSBDeWNsZSBUeXBlcyBhbmQgUGFja2V0IEZvcm1hdCwNCj4gPiArICog SW50ZWwgZVNQSSBJbnRlcmZhY2UgQmFzZSBTcGVjaWZpY2F0aW9uLCBSZXYgMS4wLCBKYW4uIDIw MTYuDQo+ID4gKyAqLw0KPiA+ICsjZGVmaW5lIEVTUElfUEVSSUZfTUVNUkQzMgkJMHgwMA0KPiA+ ICsjZGVmaW5lIEVTUElfUEVSSUZfTUVNUkQ2NAkJMHgwMg0KPiA+ICsjZGVmaW5lIEVTUElfUEVS SUZfTUVNV1IzMgkJMHgwMQ0KPiA+ICsjZGVmaW5lIEVTUElfUEVSSUZfTUVNV1I2NAkJMHgwMw0K PiA+ICsjZGVmaW5lIEVTUElfUEVSSUZfTVNHCQkJMHgxMA0KPiA+ICsjZGVmaW5lIEVTUElfUEVS SUZfTVNHX0QJCTB4MTENCj4gPiArI2RlZmluZSBFU1BJX1BFUklGX1NVQ19DTVBMVAkJMHgwNg0K PiA+ICsjZGVmaW5lIEVTUElfUEVSSUZfU1VDX0NNUExUX0RfTUlERExFCTB4MDkNCj4gPiArI2Rl ZmluZSBFU1BJX1BFUklGX1NVQ19DTVBMVF9EX0ZJUlNUCTB4MGINCj4gPiArI2RlZmluZSBFU1BJ X1BFUklGX1NVQ19DTVBMVF9EX0xBU1QJMHgwZA0KPiA+ICsjZGVmaW5lIEVTUElfUEVSSUZfU1VD X0NNUExUX0RfT05MWQkweDBmDQo+ID4gKyNkZWZpbmUgRVNQSV9QRVJJRl9VTlNVQ19DTVBMVAkJ MHgwYw0KPiA+ICsjZGVmaW5lIEVTUElfT09CX01TRwkJCTB4MjENCj4gPiArI2RlZmluZSBFU1BJ X0ZMQVNIX1JFQUQJCQkweDAwDQo+ID4gKyNkZWZpbmUgRVNQSV9GTEFTSF9XUklURQkJMHgwMQ0K PiA+ICsjZGVmaW5lIEVTUElfRkxBU0hfRVJBU0UJCTB4MDINCj4gPiArI2RlZmluZSBFU1BJX0ZM QVNIX1NVQ19DTVBMVAkJMHgwNg0KPiA+ICsjZGVmaW5lIEVTUElfRkxBU0hfU1VDX0NNUExUX0Rf TUlERExFCTB4MDkNCj4gPiArI2RlZmluZSBFU1BJX0ZMQVNIX1NVQ19DTVBMVF9EX0ZJUlNUCTB4 MGINCj4gPiArI2RlZmluZSBFU1BJX0ZMQVNIX1NVQ19DTVBMVF9EX0xBU1QJMHgwZA0KPiA+ICsj ZGVmaW5lIEVTUElfRkxBU0hfU1VDX0NNUExUX0RfT05MWQkweDBmDQo+ID4gKyNkZWZpbmUgRVNQ SV9GTEFTSF9VTlNVQ19DTVBMVAkJMHgwYw0KPiA+ICsNCj4gPiArLyoNCj4gPiArICogZVNQSSBw YWNrZXQgZm9ybWF0IHN0cnVjdHVyZQ0KPiA+ICsgKg0KPiA+ICsgKiBTZWN0aW9uIDUuMSBDeWNs ZSBUeXBlcyBhbmQgUGFja2V0IEZvcm1hdCwNCj4gPiArICogSW50ZWwgZVNQSSBJbnRlcmZhY2Ug QmFzZSBTcGVjaWZpY2F0aW9uLCBSZXYgMS4wLCBKYW4uIDIwMTYuDQo+ID4gKyAqLw0KPiA+ICtz dHJ1Y3QgZXNwaV9jb21tX2hkciB7DQo+ID4gKwl1aW50OF90IGN5YzsNCj4gPiArCXVpbnQ4X3Qg bGVuX2ggOiA0Ow0KPiA+ICsJdWludDhfdCB0YWcgOiA0Ow0KPiA+ICsJdWludDhfdCBsZW5fbDsN Cj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCBlc3BpX3BlcmlmX21lbTMyIHsNCj4gPiArCXVp bnQ4X3QgY3ljOw0KPiA+ICsJdWludDhfdCBsZW5faCA6IDQ7DQo+ID4gKwl1aW50OF90IHRhZyA6 IDQ7DQo+ID4gKwl1aW50OF90IGxlbl9sOw0KPiA+ICsJdWludDMyX3QgYWRkcl9iZTsNCj4gPiAr CXVpbnQ4X3QgZGF0YVtdOw0KPiA+ICt9IF9fcGFja2VkOw0KPiA+ICsNCj4gPiArc3RydWN0IGVz cGlfcGVyaWZfbWVtNjQgew0KPiA+ICsJdWludDhfdCBjeWM7DQo+ID4gKwl1aW50OF90IGxlbl9o IDogNDsNCj4gPiArCXVpbnQ4X3QgdGFnIDogNDsNCj4gPiArCXVpbnQ4X3QgbGVuX2w7DQo+ID4g Kwl1aW50MzJfdCBhZGRyX2JlOw0KPiA+ICsJdWludDhfdCBkYXRhW107DQo+ID4gK30gX19wYWNr ZWQ7DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgZXNwaV9wZXJpZl9tc2cgew0KPiA+ICsJdWludDhfdCBj eWM7DQo+ID4gKwl1aW50OF90IGxlbl9oIDogNDsNCj4gPiArCXVpbnQ4X3QgdGFnIDogNDsNCj4g PiArCXVpbnQ4X3QgbGVuX2w7DQo+ID4gKwl1aW50OF90IG1zZ19jb2RlOw0KPiA+ICsJdWludDhf dCBtc2dfYnl0ZVs0XTsNCj4gPiArCXVpbnQ4X3QgZGF0YVtdOw0KPiA+ICt9IF9fcGFja2VkOw0K PiA+ICsNCj4gPiArc3RydWN0IGVzcGlfcGVyaWZfY21wbHQgew0KPiA+ICsJdWludDhfdCBjeWM7 DQo+ID4gKwl1aW50OF90IGxlbl9oIDogNDsNCj4gPiArCXVpbnQ4X3QgdGFnIDogNDsNCj4gPiAr CXVpbnQ4X3QgbGVuX2w7DQo+ID4gKwl1aW50OF90IGRhdGFbXTsNCj4gPiArfSBfX3BhY2tlZDsN Cj4gPiArDQo+ID4gK3N0cnVjdCBlc3BpX29vYl9tc2cgew0KPiA+ICsJdWludDhfdCBjeWM7DQo+ ID4gKwl1aW50OF90IGxlbl9oIDogNDsNCj4gPiArCXVpbnQ4X3QgdGFnIDogNDsNCj4gPiArCXVp bnQ4X3QgbGVuX2w7DQo+ID4gKwl1aW50OF90IGRhdGFbXTsNCj4gPiArfTsNCj4gPiArDQo+ID4g K3N0cnVjdCBlc3BpX2ZsYXNoX3J3ZSB7DQo+ID4gKwl1aW50OF90IGN5YzsNCj4gPiArCXVpbnQ4 X3QgbGVuX2ggOiA0Ow0KPiA+ICsJdWludDhfdCB0YWcgOiA0Ow0KPiA+ICsJdWludDhfdCBsZW5f bDsNCj4gPiArCXVpbnQzMl90IGFkZHJfYmU7DQo+ID4gKwl1aW50OF90IGRhdGFbXTsNCj4gPiAr fSBfX3BhY2tlZDsNCj4gPiArDQo+ID4gK3N0cnVjdCBlc3BpX2ZsYXNoX2NtcGx0IHsNCj4gPiAr CXVpbnQ4X3QgY3ljOw0KPiA+ICsJdWludDhfdCBsZW5faCA6IDQ7DQo+ID4gKwl1aW50OF90IHRh ZyA6IDQ7DQo+ID4gKwl1aW50OF90IGxlbl9sOw0KPiA+ICsJdWludDhfdCBkYXRhW107DQo+ID4g K30gX19wYWNrZWQ7DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgYXNwZWVkX2VzcGlfaW9jIHsNCj4gPiAr CXVpbnQzMl90IHBrdF9sZW47DQo+ID4gKwl1aW50OF90ICpwa3Q7DQo+ID4gK307DQo+ID4gKw0K PiA+ICsvKg0KPiA+ICsgKiB3ZSBjaG9vc2UgdGhlIGxvbmdlc3QgaGVhZGVyIGFuZCB0aGUgbWF4 IHBheWxvYWQgc2l6ZQ0KPiA+ICsgKiBiYXNlZCBvbiB0aGUgSW50ZWwgc3BlY2lmaWNhdGlvbiB0 byBkZWZpbmUgdGhlIG1heGltdW0NCj4gPiArICogZVNQSSBwYWNrZXQgbGVuZ3RoDQo+ID4gKyAq Lw0KPiA+ICsjZGVmaW5lIEVTUElfUExEX0xFTl9NSU4JKDFVTCA8PCA2KQ0KPiA+ICsjZGVmaW5l IEVTUElfUExEX0xFTl9NQVgJKDFVTCA8PCAxMikNCj4gPiArI2RlZmluZSBFU1BJX1BLVF9MRU5f TUFYCShzaXplb2Yoc3RydWN0IGVzcGlfcGVyaWZfbXNnKSArDQo+IEVTUElfUExEX0xFTl9NQVgp DQo+ID4gKw0KPiA+ICsjZGVmaW5lIF9fQVNQRUVEX0VTUElfSU9DVExfTUFHSUMJMHhiOA0KPiA+ ICsNCj4gPiArLyoNCj4gPiArICogVGhlIElPQ1RMLWJhc2VkIGludGVyZmFjZSB3b3JrcyBpbiB0 aGUgZVNQSSBwYWNrZXQgaW4vb3V0IHBhcmFkaWdtLg0KPiA+ICsgKg0KPiA+ICsgKiBPbmx5IHRo ZSB2aXJ0dWFsIHdpcmUgSU9DVEwgaXMgYSBzcGVjaWFsIGNhc2Ugd2hpY2ggZG9lcyBub3Qgc2Vu ZA0KPiA+ICsgKiBvciByZWNlaXZlIGFuIGVTUEkgcGFja2V0LiBIb3dldmVyLCB0byBrZWVwIGEg bW9yZSBjb25zaXN0ZW4gdXNlIGZyb20NCj4gPiArICogdXNlcnNwYWNlLCB3ZSBtYWtlIGFsbCBv ZiB0aGUgZm91ciBjaGFubmVsIGRyaXZlcnMgc2VydmUgdGhyb3VnaCB0aGUNCj4gPiArICogSU9D VEwgaW50ZXJmYWNlLg0KPiA+ICsgKg0KPiA+ICsgKiBGb3IgdGhlIGVTUEkgcGFja2V0IGZvcm1h dCwgcmVmZXIgdG8NCj4gPiArICogICBTZWN0aW9uIDUuMSBDeWNsZSBUeXBlcyBhbmQgUGFja2V0 IEZvcm1hdCwNCj4gPiArICogICBJbnRlbCBlU1BJIEludGVyZmFjZSBCYXNlIFNwZWNpZmljYXRp b24sIFJldiAxLjAsIEphbi4gMjAxNi4NCj4gPiArICoNCj4gPiArICogRm9yIHRoZSBleGFtcGxl IHVzZXIgYXBwcyB1c2luZyB0aGVzZSBJT0NUTCwgcmVmZXIgdG8NCj4gPiArICoNCj4gaHR0cHM6 Ly9naXRodWIuY29tL0FzcGVlZFRlY2gtQk1DL2FzcGVlZF9hcHAvdHJlZS9tYXN0ZXIvZXNwaV90 ZXN0DQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArLyoNCj4gPiArICogUGVyaXBoZXJhbCBDaGFubmVs IChDSDApDQo+ID4gKyAqICAtIEFTUEVFRF9FU1BJX1BFUklGX1BDX0dFVF9SWA0KPiA+ICsgKiAg ICAgIFJlY2VpdmUgYW4gZVNQSSBQb3N0ZWQvQ29tcGxldGlvbiBwYWNrZXQNCj4gPiArICogIC0g QVNQRUVEX0VTUElfUEVSSUZfUENfUFVUX1RYDQo+ID4gKyAqICAgICAgVHJhbnNtaXQgYW4gZVNQ SSBQb3N0ZWQvQ29tcGxldGlvbiBwYWNrZXQNCj4gPiArICogIC0gQVNQRUVEX0VTUElfUEVSSUZf TlBfUFVUX1RYDQo+ID4gKyAqICAgICAgVHJhbnNtaXQgYW4gZVNQSSBOb24tUG9zdGVkIHBhY2tl dA0KPiA+ICsgKi8NCj4gPiArI2RlZmluZSBBU1BFRURfRVNQSV9QRVJJRl9QQ19HRVRfUlgNCj4g CV9JT1IoX19BU1BFRURfRVNQSV9JT0NUTF9NQUdJQywgXA0KPiA+ICsJCQkJCSAgICAgMHgwMCwg c3RydWN0IGFzcGVlZF9lc3BpX2lvYykNCj4gPiArI2RlZmluZSBBU1BFRURfRVNQSV9QRVJJRl9Q Q19QVVRfVFgNCj4gCV9JT1coX19BU1BFRURfRVNQSV9JT0NUTF9NQUdJQywgXA0KPiA+ICsJCQkJ CSAgICAgMHgwMSwgc3RydWN0IGFzcGVlZF9lc3BpX2lvYykNCj4gPiArI2RlZmluZSBBU1BFRURf RVNQSV9QRVJJRl9OUF9QVVRfVFgNCj4gCV9JT1coX19BU1BFRURfRVNQSV9JT0NUTF9NQUdJQywg XA0KPiA+ICsJCQkJCSAgICAgMHgwMiwgc3RydWN0IGFzcGVlZF9lc3BpX2lvYykNCj4gPiArLyoN Cj4gPiArICogVmlydHVhbCBXaXJlIENoYW5uZWwgKENIMSkNCj4gPiArICogIC0gQVNQRUVEX0VT UElfVldfR0VUX0dQSU9fVkFMDQo+ID4gKyAqICAgICAgUmVhZCB0aGUgaW5wdXQgdmFsdWUgb2Yg R1BJTyBvdmVyIHRoZSBWVyBjaGFubmVsDQo+ID4gKyAqICAtIEFTUEVFRF9FU1BJX1ZXX1BVVF9H UElPX1ZBTA0KPiA+ICsgKiAgICAgIFdyaXRlIHRoZSBvdXRwdXQgdmFsdWUgb2YgR1BJTyBvdmVy IHRoZSBWVyBjaGFubmVsDQo+ID4gKyAqLw0KPiA+ICsjZGVmaW5lIEFTUEVFRF9FU1BJX1ZXX0dF VF9HUElPX1ZBTA0KPiAJX0lPUihfX0FTUEVFRF9FU1BJX0lPQ1RMX01BR0lDLCBcDQo+ID4gKwkJ CQkJICAgICAweDEwLCB1aW50OF90KQ0KPiA+ICsjZGVmaW5lIEFTUEVFRF9FU1BJX1ZXX1BVVF9H UElPX1ZBTA0KPiAJX0lPVyhfX0FTUEVFRF9FU1BJX0lPQ1RMX01BR0lDLCBcDQo+ID4gKwkJCQkJ ICAgICAweDExLCB1aW50OF90KQ0KPiA+ICsvKg0KPiA+ICsgKiBPdXQtb2YtYmFuZCBDaGFubmVs IChDSDIpDQo+ID4gKyAqICAtIEFTUEVFRF9FU1BJX09PQl9HRVRfUlgNCj4gPiArICogICAgICBS ZWNlaXZlIGFuIGVTUEkgT09CIHBhY2tldA0KPiA+ICsgKiAgLSBBU1BFRURfRVNQSV9PT0JfUFVU X1RYDQo+ID4gKyAqICAgICAgVHJhbnNtaXQgYW4gZVNQSSBPT0IgcGFja2V0DQo+ID4gKyAqLw0K PiA+ICsjZGVmaW5lIEFTUEVFRF9FU1BJX09PQl9HRVRfUlgNCj4gCV9JT1IoX19BU1BFRURfRVNQ SV9JT0NUTF9NQUdJQywgXA0KPiA+ICsJCQkJCSAgICAgMHgyMCwgc3RydWN0IGFzcGVlZF9lc3Bp X2lvYykNCj4gPiArI2RlZmluZSBBU1BFRURfRVNQSV9PT0JfUFVUX1RYDQo+IAlfSU9XKF9fQVNQ RUVEX0VTUElfSU9DVExfTUFHSUMsIFwNCj4gPiArCQkJCQkgICAgIDB4MjEsIHN0cnVjdCBhc3Bl ZWRfZXNwaV9pb2MpDQo+ID4gKy8qDQo+ID4gKyAqIEZsYXNoIENoYW5uZWwgKENIMykNCj4gPiAr ICogIC0gQVNQRUVEX0VTUElfRkxBU0hfR0VUX1JYDQo+ID4gKyAqICAgICAgUmVjZWl2ZSBhbiBl U1BJIGZsYXNoIHBhY2tldA0KPiA+ICsgKiAgLSBBU1BFRURfRVNQSV9GTEFTSF9QVVRfVFgNCj4g PiArICogICAgICBUcmFuc21pdCBhbiBlU1BJIGZsYXNoIHBhY2tldA0KPiA+ICsgKi8NCj4gPiAr I2RlZmluZSBBU1BFRURfRVNQSV9GTEFTSF9HRVRfUlgNCj4gCV9JT1IoX19BU1BFRURfRVNQSV9J T0NUTF9NQUdJQywgXA0KPiA+ICsJCQkJCSAgICAgMHgzMCwgc3RydWN0IGFzcGVlZF9lc3BpX2lv YykNCj4gPiArI2RlZmluZSBBU1BFRURfRVNQSV9GTEFTSF9QVVRfVFgNCj4gCV9JT1coX19BU1BF RURfRVNQSV9JT0NUTF9NQUdJQywgXA0KPiA+ICsJCQkJCSAgICAgMHgzMSwgc3RydWN0IGFzcGVl ZF9lc3BpX2lvYykNCj4gPiArDQo+ID4gKyNlbmRpZg0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJz L3NvYy9hc3BlZWQvYXNwZWVkLWVzcGktb29iLmMNCj4gYi9kcml2ZXJzL3NvYy9hc3BlZWQvYXNw ZWVkLWVzcGktb29iLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAw MDAwMDAwMC4uMmUwY2M0MjdiNmMxDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZl cnMvc29jL2FzcGVlZC9hc3BlZWQtZXNwaS1vb2IuYw0KPiA+IEBAIC0wLDAgKzEsNTU4IEBADQo+ ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKw0KPiA+ICsvKg0KPiA+ICsg KiBDb3B5cmlnaHQgMjAyMSBBc3BlZWQgVGVjaG5vbG9neSBJbmMuDQo+ID4gKyAqLw0KPiA+ICsj aW5jbHVkZSA8bGludXgvZnMuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPg0K PiA+ICsjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgv bWZkL3N5c2Nvbi5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+DQo+ID4gKyNpbmNs dWRlIDxsaW51eC91YWNjZXNzLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+DQo+ ID4gKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9k bWEtbWFwcGluZy5oPg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgImFzcGVlZC1lc3BpLWlvYy5oIg0K PiA+ICsjaW5jbHVkZSAiYXNwZWVkLWVzcGktY3RybC5oIg0KPiA+ICsjaW5jbHVkZSAiYXNwZWVk LWVzcGktb29iLmgiDQo+ID4gKw0KPiA+ICsjZGVmaW5lIE9PQl9NREVWX05BTUUJImFzcGVlZC1l c3BpLW9vYiINCj4gPiArDQo+ID4gKy8qIERNQSBkZXNjcmlwdG9yIGlzIHN1cHBvcnRlZCBzaW5j ZSBBU1QyNjAwICovDQo+ID4gKyNkZWZpbmUgT09CX0RNQV9ERVNDX01BWF9OVU0JMTAyNA0KPiA+ ICsjZGVmaW5lIE9PQl9ETUFfVFhfREVTQ19DVVNUCTB4MDQNCj4gPiArDQo+ID4gKy8qIGRlc2Ny aXB0b3ItYmFzZWQgUlggRE1BIGhhbmRsaW5nICovDQo+ID4gK3N0YXRpYyBsb25nIGFzcGVlZF9l c3BpX29vYl9kbWFfZGVzY19nZXRfcngoc3RydWN0IGZpbGUgKmZwLA0KPiA+ICsJCQkJCSAgICBz dHJ1Y3QgYXNwZWVkX2VzcGlfaW9jICppb2MsDQo+ID4gKwkJCQkJICAgIHN0cnVjdCBhc3BlZWRf ZXNwaV9vb2IgKmVzcGlfb29iKQ0KPiA+ICt7DQo+ID4gKwlpbnQgcmMgPSAwOw0KPiA+ICsJdW5z aWduZWQgbG9uZyBmbGFnczsNCj4gPiArCXVpbnQzMl90IHJlZzsNCj4gPiArCXVpbnQzMl90IHdw dHIsIHNwdHI7DQo+ID4gKwl1aW50OF90ICpwa3Q7DQo+ID4gKwl1aW50MzJfdCBwa3RfbGVuOw0K PiA+ICsJc3RydWN0IGVzcGlfY29tbV9oZHIgKmhkcjsNCj4gPiArCXN0cnVjdCBvb2JfcnhfZG1h X2Rlc2MgKmQ7DQo+ID4gKwlzdHJ1Y3QgYXNwZWVkX2VzcGlfY3RybCAqZXNwaV9jdHJsID0gZXNw aV9vb2ItPmN0cmw7DQo+ID4gKw0KPiA+ICsJcmVnbWFwX3JlYWQoZXNwaV9jdHJsLT5tYXAsIEVT UElfT09CX1JYX0RNQV9XU19QVFIsICZyZWcpOw0KPiA+ICsJd3B0ciA9IChyZWcgJiBFU1BJX09P Ql9SWF9ETUFfV1NfUFRSX1dQX01BU0spID4+DQo+IEVTUElfT09CX1JYX0RNQV9XU19QVFJfV1Bf U0hJRlQ7DQo+ID4gKwlzcHRyID0gKHJlZyAmIEVTUElfT09CX1JYX0RNQV9XU19QVFJfU1BfTUFT SykgPj4NCj4gRVNQSV9PT0JfUlhfRE1BX1dTX1BUUl9TUF9TSElGVDsNCj4gPiArDQo+ID4gKwlk ID0gJmVzcGlfb29iLT5kbWEucnhfZGVzY1tzcHRyXTsNCj4gPiArDQo+ID4gKwlpZiAoIWQtPmRp cnR5KQ0KPiA+ICsJCXJldHVybiAtRUZBVUxUOw0KPiA+ICsNCj4gPiArCXBrdF9sZW4gPSAoKGQt PmxlbikgPyBkLT5sZW4gOiAweDEwMDApICsgc2l6ZW9mKHN0cnVjdCBlc3BpX2NvbW1faGRyKTsN Cj4gPiArDQo+ID4gKwlpZiAoaW9jLT5wa3RfbGVuIDwgcGt0X2xlbikNCj4gPiArCQlyZXR1cm4g LUVJTlZBTDsNCj4gPiArDQo+ID4gKwlwa3QgPSB2bWFsbG9jKHBrdF9sZW4pOw0KPiA+ICsJaWYg KCFwa3QpDQo+ID4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ID4gKw0KPiA+ICsJaGRyID0gKHN0cnVj dCBlc3BpX2NvbW1faGRyICopcGt0Ow0KPiA+ICsJaGRyLT5jeWMgPSBkLT5jeWM7DQo+ID4gKwlo ZHItPnRhZyA9IGQtPnRhZzsNCj4gPiArCWhkci0+bGVuX2ggPSBkLT5sZW4gPj4gODsNCj4gPiAr CWhkci0+bGVuX2wgPSBkLT5sZW4gJiAweGZmOw0KPiA+ICsJbWVtY3B5KGhkciArIDEsIGVzcGlf b29iLT5kbWEucnhfdmlydCArIChQQUdFX1NJWkUgKiBzcHRyKSwgcGt0X2xlbiAtDQo+IHNpemVv ZigqaGRyKSk7DQo+ID4gKw0KPiA+ICsJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilp b2MtPnBrdCwgcGt0LCBwa3RfbGVuKSkgew0KPiA+ICsJCXJjID0gLUVGQVVMVDsNCj4gPiArCQln b3RvIGZyZWVfbl9vdXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJc3Bpbl9sb2NrX2lycXNhdmUo JmVzcGlfb29iLT5sb2NrLCBmbGFncyk7DQo+ID4gKw0KPiA+ICsJLyogbWFrZSBjdXJyZW50IGRl c2NyaXB0b3IgYXZhaWxhYmxlIGFnYWluICovDQo+ID4gKwlkLT5kaXJ0eSA9IDA7DQo+ID4gKw0K PiA+ICsJc3B0ciA9IChzcHRyICsgMSkgJSBlc3BpX29vYi0+ZG1hLnJ4X2Rlc2NfbnVtOw0KPiA+ ICsJd3B0ciA9ICh3cHRyICsgMSkgJSBlc3BpX29vYi0+ZG1hLnJ4X2Rlc2NfbnVtOw0KPiA+ICsN Cj4gPiArCXJlZyA9ICgod3B0ciA8PCBFU1BJX09PQl9SWF9ETUFfV1NfUFRSX1dQX1NISUZUKSAm DQo+IEVTUElfT09CX1JYX0RNQV9XU19QVFJfV1BfTUFTSykNCj4gPiArCQl8ICgoc3B0ciA8PCBF U1BJX09PQl9SWF9ETUFfV1NfUFRSX1NQX1NISUZUKSAmDQo+IEVTUElfT09CX1JYX0RNQV9XU19Q VFJfU1BfTUFTSykNCj4gPiArCQl8IEVTUElfT09CX1JYX0RNQV9XU19QVFJfUkVDVl9FTjsNCj4g PiArCXJlZ21hcF93cml0ZShlc3BpX2N0cmwtPm1hcCwgRVNQSV9PT0JfUlhfRE1BX1dTX1BUUiwg cmVnKTsNCj4gPiArDQo+ID4gKwkvKiBzZXQgcmVhZHkgZmxhZyBiYXNlIG9uIHRoZSBuZXh0IFJY IGRlc2NyaXB0b3IgKi8NCj4gPiArCWVzcGlfb29iLT5yeF9yZWFkeSA9IGVzcGlfb29iLT5kbWEu cnhfZGVzY1tzcHRyXS5kaXJ0eTsNCj4gPiArDQo+ID4gKwlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZlc3BpX29vYi0+bG9jaywgZmxhZ3MpOw0KPiA+ICsNCj4gPiArZnJlZV9uX291dDoNCj4gPiAr CXZmcmVlKHBrdCk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHJjOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtzdGF0aWMgbG9uZyBhc3BlZWRfZXNwaV9vb2JfZ2V0X3J4KHN0cnVjdCBmaWxlICpmcCwNCj4g PiArCQkJCSAgIHN0cnVjdCBhc3BlZWRfZXNwaV9pb2MgKmlvYywNCj4gPiArCQkJCSAgIHN0cnVj dCBhc3BlZWRfZXNwaV9vb2IgKmVzcGlfb29iKQ0KPiA+ICt7DQo+ID4gKwlpbnQgaSwgcmMgPSAw Ow0KPiA+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsNCj4gPiArCXVpbnQzMl90IHJlZzsNCj4gPiAr CXVpbnQzMl90IGN5YywgdGFnLCBsZW47DQo+ID4gKwl1aW50OF90ICpwa3Q7DQo+ID4gKwl1aW50 MzJfdCBwa3RfbGVuOw0KPiA+ICsJc3RydWN0IGVzcGlfY29tbV9oZHIgKmhkcjsNCj4gPiArCXN0 cnVjdCBhc3BlZWRfZXNwaV9jdHJsICplc3BpX2N0cmwgPSBlc3BpX29vYi0+Y3RybDsNCj4gPiAr DQo+ID4gKwlpZiAoZnAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7DQo+ID4gKwkJaWYgKG11dGV4 X3RyeWxvY2soJmVzcGlfb29iLT5nZXRfcnhfbXR4KSkNCj4gPiArCQkJcmV0dXJuIC1FQlVTWTsN Cj4gPiArDQo+ID4gKwkJaWYgKCFlc3BpX29vYi0+cnhfcmVhZHkpIHsNCj4gPiArCQkJcmMgPSAt RU5PREFUQTsNCj4gPiArCQkJZ290byB1bmxvY2tfbXR4X25fb3V0Ow0KPiA+ICsJCX0NCj4gPiAr CX0gZWxzZSB7DQo+ID4gKwkJbXV0ZXhfbG9jaygmZXNwaV9vb2ItPmdldF9yeF9tdHgpOw0KPiA+ ICsNCj4gPiArCQlpZiAoIWVzcGlfb29iLT5yeF9yZWFkeSkgew0KPiA+ICsJCQlyYyA9IHdhaXRf ZXZlbnRfaW50ZXJydXB0aWJsZShlc3BpX29vYi0+d3EsDQo+ID4gKwkJCQkJCSAgICAgIGVzcGlf b29iLT5yeF9yZWFkeSk7DQo+ID4gKwkJCWlmIChyYyA9PSAtRVJFU1RBUlRTWVMpIHsNCj4gPiAr CQkJCXJjID0gLUVJTlRSOw0KPiA+ICsJCQkJZ290byB1bmxvY2tfbXR4X25fb3V0Ow0KPiA+ICsJ CQl9DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChlc3BpX29vYi0+ZG1hX21v ZGUgJiYgZXNwaV9jdHJsLT5tb2RlbC0+dmVyc2lvbiAhPSBFU1BJX0FTVDI1MDApDQo+IHsNCj4g PiArCQlyYyA9IGFzcGVlZF9lc3BpX29vYl9kbWFfZGVzY19nZXRfcngoZnAsIGlvYywgZXNwaV9v b2IpOw0KPiA+ICsJCWdvdG8gdW5sb2NrX210eF9uX291dDsNCj4gPiArCX0NCj4gPiArDQo+ID4g KwkvKiBjb21tb24gaGVhZGVyIChpLmUuIGN5Y2xlIHR5cGUsIHRhZywgYW5kIGxlbmd0aCkgaXMg dGFrZW4gYnkgSFcgKi8NCj4gPiArCXJlZ21hcF9yZWFkKGVzcGlfY3RybC0+bWFwLCBFU1BJX09P Ql9SWF9DVFJMLCAmcmVnKTsNCj4gPiArCWN5YyA9IChyZWcgJiBFU1BJX09PQl9SWF9DVFJMX0NZ Q19NQVNLKSA+Pg0KPiBFU1BJX09PQl9SWF9DVFJMX0NZQ19TSElGVDsNCj4gPiArCXRhZyA9IChy ZWcgJiBFU1BJX09PQl9SWF9DVFJMX1RBR19NQVNLKSA+Pg0KPiBFU1BJX09PQl9SWF9DVFJMX1RB R19TSElGVDsNCj4gPiArCWxlbiA9IChyZWcgJiBFU1BJX09PQl9SWF9DVFJMX0xFTl9NQVNLKSA+ Pg0KPiBFU1BJX09PQl9SWF9DVFJMX0xFTl9TSElGVDsNCj4gPiArDQo+ID4gKwkvKg0KPiA+ICsJ ICogY2FsY3VsYXRlIHRoZSBsZW5ndGggb2YgdGhlIHJlc3QgcGFydCBvZiB0aGUNCj4gPiArCSAq IGVTUEkgcGFja2V0IHRvIGJlIHJlYWQgZnJvbSBIVyBhbmQgY29waWVkIHRvDQo+ID4gKwkgKiB1 c2VyIHNwYWNlLg0KPiA+ICsJICovDQo+ID4gKwlwa3RfbGVuID0gKChsZW4pID8gbGVuIDogRVNQ SV9QTERfTEVOX01BWCkgKyBzaXplb2Yoc3RydWN0DQo+IGVzcGlfY29tbV9oZHIpOw0KPiA+ICsN Cj4gPiArCWlmIChpb2MtPnBrdF9sZW4gPCBwa3RfbGVuKSB7DQo+ID4gKwkJcmMgPSAtRUlOVkFM Ow0KPiA+ICsJCWdvdG8gdW5sb2NrX210eF9uX291dDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlw a3QgPSB2bWFsbG9jKHBrdF9sZW4pOw0KPiA+ICsJaWYgKCFwa3QpIHsNCj4gPiArCQlyYyA9IC1F Tk9NRU07DQo+ID4gKwkJZ290byB1bmxvY2tfbXR4X25fb3V0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4g PiArCWhkciA9IChzdHJ1Y3QgZXNwaV9jb21tX2hkciAqKXBrdDsNCj4gPiArCWhkci0+Y3ljID0g Y3ljOw0KPiA+ICsJaGRyLT50YWcgPSB0YWc7DQo+ID4gKwloZHItPmxlbl9oID0gbGVuID4+IDg7 DQo+ID4gKwloZHItPmxlbl9sID0gbGVuICYgMHhmZjsNCj4gPiArDQo+ID4gKwlpZiAoZXNwaV9v b2ItPmRtYV9tb2RlKSB7DQo+ID4gKwkJbWVtY3B5KGhkciArIDEsIGVzcGlfb29iLT5kbWEucnhf dmlydCwNCj4gPiArCQkgICAgICAgcGt0X2xlbiAtIHNpemVvZigqaGRyKSk7DQo+ID4gKwl9IGVs c2Ugew0KPiA+ICsJCWZvciAoaSA9IHNpemVvZigqaGRyKTsgaSA8IHBrdF9sZW47ICsraSkgew0K PiA+ICsJCQlyZWdtYXBfcmVhZChlc3BpX2N0cmwtPm1hcCwNCj4gPiArCQkJCSAgICBFU1BJX09P Ql9SWF9QT1JULCAmcmVnKTsNCj4gPiArCQkJcGt0W2ldID0gcmVnICYgMHhmZjsNCj4gPiArCQl9 DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilp b2MtPnBrdCwgcGt0LCBwa3RfbGVuKSkgew0KPiA+ICsJCXJjID0gLUVGQVVMVDsNCj4gPiArCQln b3RvIGZyZWVfbl9vdXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJc3Bpbl9sb2NrX2lycXNhdmUo JmVzcGlfb29iLT5sb2NrLCBmbGFncyk7DQo+ID4gKw0KPiA+ICsJcmVnbWFwX3dyaXRlX2JpdHMo ZXNwaV9jdHJsLT5tYXAsIEVTUElfT09CX1JYX0NUUkwsDQo+ID4gKwkJCSAgRVNQSV9PT0JfUlhf Q1RSTF9QRU5EX1NFUlYsDQo+ID4gKwkJCSAgRVNQSV9PT0JfUlhfQ1RSTF9QRU5EX1NFUlYpOw0K PiA+ICsNCj4gPiArCWVzcGlfb29iLT5yeF9yZWFkeSA9IDA7DQo+ID4gKw0KPiA+ICsJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmZXNwaV9vb2ItPmxvY2ssIGZsYWdzKTsNCj4gPiArDQo+ID4gK2Zy ZWVfbl9vdXQ6DQo+ID4gKwl2ZnJlZShwa3QpOw0KPiA+ICsNCj4gPiArdW5sb2NrX210eF9uX291 dDoNCj4gPiArCW11dGV4X3VubG9jaygmZXNwaV9vb2ItPmdldF9yeF9tdHgpOw0KPiA+ICsNCj4g PiArCXJldHVybiByYzsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogZGVzY3JpcHRvci1iYXNlZCBU WCBETUEgaGFuZGxpbmcgKi8NCj4gPiArc3RhdGljIGxvbmcgYXNwZWVkX2VzcGlfb29iX2RtYV9k ZXNjX3B1dF90eChzdHJ1Y3QgZmlsZSAqZnAsDQo+ID4gKwkJCQkJICAgIHN0cnVjdCBhc3BlZWRf ZXNwaV9pb2MgKmlvYywNCj4gPiArCQkJCQkgICAgc3RydWN0IGFzcGVlZF9lc3BpX29vYiAqZXNw aV9vb2IpDQo+ID4gK3sNCj4gPiArCWludCByYyA9IDA7DQo+ID4gKwl1aW50MzJfdCBycHRyLCB3 cHRyOw0KPiA+ICsJdWludDhfdCAqcGt0Ow0KPiA+ICsJc3RydWN0IGVzcGlfY29tbV9oZHIgKmhk cjsNCj4gPiArCXN0cnVjdCBvb2JfdHhfZG1hX2Rlc2MgKmQ7DQo+ID4gKwlzdHJ1Y3QgYXNwZWVk X2VzcGlfY3RybCAqZXNwaV9jdHJsID0gZXNwaV9vb2ItPmN0cmw7DQo+ID4gKw0KPiA+ICsJcGt0 ID0gdnphbGxvYyhpb2MtPnBrdF9sZW4pOw0KPiA+ICsJaWYgKCFwa3QpDQo+ID4gKwkJcmV0dXJu IC1FTk9NRU07DQo+ID4gKw0KPiA+ICsJaGRyID0gKHN0cnVjdCBlc3BpX2NvbW1faGRyICopcGt0 Ow0KPiA+ICsNCj4gPiArCWlmIChjb3B5X2Zyb21fdXNlcihwa3QsICh2b2lkIF9fdXNlciAqKWlv Yy0+cGt0LCBpb2MtPnBrdF9sZW4pKSB7DQo+ID4gKwkJcmMgPSAtRUZBVUxUOw0KPiA+ICsJCWdv dG8gZnJlZV9uX291dDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBraWNrIEhXIHRvIHJlZmxl Y3QgdGhlIHVwLXRvLWRhdGUgcmVhZC93cml0ZSBwb2ludGVyICovDQo+ID4gKwlyZWdtYXBfd3Jp dGUoZXNwaV9jdHJsLT5tYXAsIEVTUElfT09CX1RYX0RNQV9SRF9QVFIsDQo+ID4gKwkJICAgICBF U1BJX09PQl9UWF9ETUFfUkRfUFRSX1VQREFURSk7DQo+ID4gKw0KPiA+ICsJcmVnbWFwX3JlYWQo ZXNwaV9jdHJsLT5tYXAsIEVTUElfT09CX1RYX0RNQV9SRF9QVFIsICZycHRyKTsNCj4gPiArCXJl Z21hcF9yZWFkKGVzcGlfY3RybC0+bWFwLCBFU1BJX09PQl9UWF9ETUFfV1JfUFRSLCAmd3B0cik7 DQo+ID4gKw0KPiA+ICsJaWYgKCgod3B0ciArIDEpICUgZXNwaV9vb2ItPmRtYS50eF9kZXNjX251 bSkgPT0gcnB0cikgew0KPiA+ICsJCXJjID0gLUVCVVNZOw0KPiA+ICsJCWdvdG8gZnJlZV9uX291 dDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlkID0gJmVzcGlfb29iLT5kbWEudHhfZGVzY1t3cHRy XTsNCj4gPiArCWQtPmN5YyA9IGhkci0+Y3ljOw0KPiA+ICsJZC0+dGFnID0gaGRyLT50YWc7DQo+ ID4gKwlkLT5sZW4gPSAoaGRyLT5sZW5faCA8PCA4KSB8IChoZHItPmxlbl9sICYgMHhmZik7DQo+ ID4gKwlkLT5tc2dfdHlwZSA9IE9PQl9ETUFfVFhfREVTQ19DVVNUOw0KPiA+ICsNCj4gPiArCW1l bWNweShlc3BpX29vYi0+ZG1hLnR4X3ZpcnQgKyAoUEFHRV9TSVpFICogd3B0ciksIGhkciArIDEs DQo+ID4gKwkgICAgICAgaW9jLT5wa3RfbGVuIC0gc2l6ZW9mKCpoZHIpKTsNCj4gPiArDQo+ID4g KwlkbWFfd21iKCk7DQo+ID4gKw0KPiA+ICsJd3B0ciA9ICh3cHRyICsgMSkgJSBlc3BpX29vYi0+ ZG1hLnR4X2Rlc2NfbnVtOw0KPiA+ICsJd3B0ciB8PSBFU1BJX09PQl9UWF9ETUFfV1JfUFRSX1NF TkRfRU47DQo+ID4gKwlyZWdtYXBfd3JpdGUoZXNwaV9jdHJsLT5tYXAsIEVTUElfT09CX1RYX0RN QV9XUl9QVFIsIHdwdHIpOw0KPiA+ICsNCj4gPiArZnJlZV9uX291dDoNCj4gPiArCXZmcmVlKHBr dCk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHJjOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg bG9uZyBhc3BlZWRfZXNwaV9vb2JfcHV0X3R4KHN0cnVjdCBmaWxlICpmcCwNCj4gPiArCQkJCSAg IHN0cnVjdCBhc3BlZWRfZXNwaV9pb2MgKmlvYywNCj4gPiArCQkJCSAgIHN0cnVjdCBhc3BlZWRf ZXNwaV9vb2IgKmVzcGlfb29iKQ0KPiA+ICt7DQo+ID4gKwlpbnQgaSwgcmMgPSAwOw0KPiA+ICsJ dWludDMyX3QgcmVnOw0KPiA+ICsJdWludDMyX3QgY3ljLCB0YWcsIGxlbjsNCj4gPiArCXVpbnQ4 X3QgKnBrdDsNCj4gPiArCXN0cnVjdCBlc3BpX2NvbW1faGRyICpoZHI7DQo+ID4gKwlzdHJ1Y3Qg YXNwZWVkX2VzcGlfY3RybCAqZXNwaV9jdHJsID0gZXNwaV9vb2ItPmN0cmw7DQo+ID4gKw0KPiA+ ICsJaWYgKCFtdXRleF90cnlsb2NrKCZlc3BpX29vYi0+cHV0X3R4X210eCkpDQo+ID4gKwkJcmV0 dXJuIC1FQlVTWTsNCj4gPiArDQo+ID4gKwlpZiAoZXNwaV9vb2ItPmRtYV9tb2RlICYmIGVzcGlf Y3RybC0+bW9kZWwtPnZlcnNpb24gIT0gRVNQSV9BU1QyNTAwKQ0KPiB7DQo+ID4gKwkJcmMgPSBh c3BlZWRfZXNwaV9vb2JfZG1hX2Rlc2NfcHV0X3R4KGZwLCBpb2MsIGVzcGlfb29iKTsNCj4gPiAr CQlnb3RvIHVubG9ja19tdHhfbl9vdXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmVnbWFwX3Jl YWQoZXNwaV9jdHJsLT5tYXAsIEVTUElfT09CX1RYX0NUUkwsICZyZWcpOw0KPiA+ICsJaWYgKHJl ZyAmIEVTUElfT09CX1RYX0NUUkxfVFJJR0dFUikgew0KPiA+ICsJCXJjID0gLUVCVVNZOw0KPiA+ ICsJCWdvdG8gdW5sb2NrX210eF9uX291dDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAoaW9j LT5wa3RfbGVuID4gRVNQSV9QS1RfTEVOX01BWCkgew0KPiA+ICsJCXJjID0gLUVJTlZBTDsNCj4g PiArCQlnb3RvIHVubG9ja19tdHhfbl9vdXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcGt0ID0g dm1hbGxvYyhpb2MtPnBrdF9sZW4pOw0KPiA+ICsJaWYgKCFwa3QpIHsNCj4gPiArCQlyYyA9IC1F Tk9NRU07DQo+ID4gKwkJZ290byB1bmxvY2tfbXR4X25fb3V0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4g PiArCWhkciA9IChzdHJ1Y3QgZXNwaV9jb21tX2hkciAqKXBrdDsNCj4gPiArDQo+ID4gKwlpZiAo Y29weV9mcm9tX3VzZXIocGt0LCAodm9pZCBfX3VzZXIgKilpb2MtPnBrdCwgaW9jLT5wa3RfbGVu KSkgew0KPiA+ICsJCXJjID0gLUVGQVVMVDsNCj4gPiArCQlnb3RvIGZyZWVfbl9vdXQ7DQo+ID4g Kwl9DQo+ID4gKw0KPiA+ICsJLyoNCj4gPiArCSAqIGNvbW1vbiBoZWFkZXIgKGkuZS4gY3ljbGUg dHlwZSwgdGFnLCBhbmQgbGVuZ3RoKQ0KPiA+ICsJICogcGFydCBpcyB3cml0dGVuIHRvIEhXIHJl Z2lzdGVycw0KPiA+ICsJICovDQo+ID4gKwlpZiAoZXNwaV9vb2ItPmRtYV9tb2RlKSB7DQo+ID4g KwkJbWVtY3B5KGVzcGlfb29iLT5kbWEudHhfdmlydCwgaGRyICsgMSwNCj4gPiArCQkgICAgICAg aW9jLT5wa3RfbGVuIC0gc2l6ZW9mKCpoZHIpKTsNCj4gPiArCQlkbWFfd21iKCk7DQo+ID4gKwl9 IGVsc2Ugew0KPiA+ICsJCWZvciAoaSA9IHNpemVvZigqaGRyKTsgaSA8IGlvYy0+cGt0X2xlbjsg KytpKQ0KPiA+ICsJCQlyZWdtYXBfd3JpdGUoZXNwaV9jdHJsLT5tYXAsDQo+ID4gKwkJCQkgICAg IEVTUElfT09CX1RYX1BPUlQsIHBrdFtpXSk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJY3ljID0g aGRyLT5jeWM7DQo+ID4gKwl0YWcgPSBoZHItPnRhZzsNCj4gPiArCWxlbiA9IChoZHItPmxlbl9o IDw8IDgpIHwgKGhkci0+bGVuX2wgJiAweGZmKTsNCj4gPiArDQo+ID4gKwlyZWcgPSAoKGN5YyA8 PCBFU1BJX09PQl9UWF9DVFJMX0NZQ19TSElGVCkgJg0KPiBFU1BJX09PQl9UWF9DVFJMX0NZQ19N QVNLKQ0KPiA+ICsJCXwgKCh0YWcgPDwgRVNQSV9PT0JfVFhfQ1RSTF9UQUdfU0hJRlQpICYNCj4g RVNQSV9PT0JfVFhfQ1RSTF9UQUdfTUFTSykNCj4gPiArCQl8ICgobGVuIDw8IEVTUElfT09CX1RY X0NUUkxfTEVOX1NISUZUKSAmDQo+IEVTUElfT09CX1RYX0NUUkxfTEVOX01BU0spDQo+ID4gKwkJ fCBFU1BJX09PQl9UWF9DVFJMX1RSSUdHRVI7DQo+ID4gKw0KPiA+ICsJcmVnbWFwX3dyaXRlKGVz cGlfY3RybC0+bWFwLCBFU1BJX09PQl9UWF9DVFJMLCByZWcpOw0KPiA+ICsNCj4gPiArZnJlZV9u X291dDoNCj4gPiArCXZmcmVlKHBrdCk7DQo+ID4gKw0KPiA+ICt1bmxvY2tfbXR4X25fb3V0Og0K PiA+ICsJbXV0ZXhfdW5sb2NrKCZlc3BpX29vYi0+cHV0X3R4X210eCk7DQo+ID4gKw0KPiA+ICsJ cmV0dXJuIHJjOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgbG9uZyBhc3BlZWRfZXNwaV9v b2JfaW9jdGwoc3RydWN0IGZpbGUgKmZwLCB1bnNpZ25lZCBpbnQgY21kLA0KPiB1bnNpZ25lZCBs b25nIGFyZykNCj4gPiArew0KPiA+ICsJc3RydWN0IGFzcGVlZF9lc3BpX2lvYyBpb2M7DQo+ID4g KwlzdHJ1Y3QgYXNwZWVkX2VzcGlfb29iICplc3BpX29vYiA9IGNvbnRhaW5lcl9vZigNCj4gPiAr CQkJZnAtPnByaXZhdGVfZGF0YSwNCj4gPiArCQkJc3RydWN0IGFzcGVlZF9lc3BpX29vYiwNCj4g PiArCQkJbWRldik7DQo+ID4gKw0KPiA+ICsJaWYgKGNvcHlfZnJvbV91c2VyKCZpb2MsICh2b2lk IF9fdXNlciAqKWFyZywgc2l6ZW9mKGlvYykpKQ0KPiA+ICsJCXJldHVybiAtRUZBVUxUOw0KPiA+ ICsNCj4gPiArCWlmIChpb2MucGt0X2xlbiA+IEVTUElfUEtUX0xFTl9NQVgpDQo+ID4gKwkJcmV0 dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsJc3dpdGNoIChjbWQpIHsNCj4gPiArCWNhc2UgQVNQ RUVEX0VTUElfT09CX0dFVF9SWDoNCj4gPiArCQlyZXR1cm4gYXNwZWVkX2VzcGlfb29iX2dldF9y eChmcCwgJmlvYywgZXNwaV9vb2IpOw0KPiA+ICsJY2FzZSBBU1BFRURfRVNQSV9PT0JfUFVUX1RY Og0KPiA+ICsJCXJldHVybiBhc3BlZWRfZXNwaV9vb2JfcHV0X3R4KGZwLCAmaW9jLCBlc3BpX29v Yik7DQo+ID4gKwl9Ow0KPiA+ICsNCj4gPiArCXJldHVybiAtRUlOVkFMOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICt2b2lkIGFzcGVlZF9lc3BpX29vYl9ldmVudCh1aW50MzJfdCBzdHMsIHN0cnVjdCBh c3BlZWRfZXNwaV9vb2INCj4gKmVzcGlfb29iKQ0KPiA+ICt7DQo+ID4gKwl1bnNpZ25lZCBsb25n IGZsYWdzOw0KPiA+ICsNCj4gPiArCWlmIChzdHMgJiBFU1BJX0lOVF9TVFNfT09CX1JYX0NNUExU KSB7DQo+ID4gKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmVzcGlfb29iLT5sb2NrLCBmbGFncyk7DQo+ ID4gKwkJZXNwaV9vb2ItPnJ4X3JlYWR5ID0gMTsNCj4gPiArCQlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZlc3BpX29vYi0+bG9jaywgZmxhZ3MpOw0KPiA+ICsNCj4gPiArCQl3YWtlX3VwX2ludGVy cnVwdGlibGUoJmVzcGlfb29iLT53cSk7DQo+ID4gKwl9DQo+ID4gK30NCj4gPiArDQo+ID4gK3Zv aWQgYXNwZWVkX2VzcGlfb29iX2VuYWJsZShzdHJ1Y3QgYXNwZWVkX2VzcGlfb29iICplc3BpX29v YikNCj4gPiArew0KPiA+ICsJaW50IGk7DQo+ID4gKwlzdHJ1Y3QgYXNwZWVkX2VzcGlfb29iX2Rt YSAqZG1hID0gJmVzcGlfb29iLT5kbWE7DQo+ID4gKwlzdHJ1Y3QgYXNwZWVkX2VzcGlfY3RybCAq ZXNwaV9jdHJsID0gZXNwaV9vb2ItPmN0cmw7DQo+ID4gKw0KPiA+ICsJcmVnbWFwX3VwZGF0ZV9i aXRzKGVzcGlfY3RybC0+bWFwLCBFU1BJX0NUUkwsDQo+ID4gKwkJCSAgIEVTUElfQ1RSTF9PT0Jf U1dfUkRZIHwgRVNQSV9DVFJMX09PQl9SWF9TV19SU1QsDQo+IDApOw0KPiA+ICsNCj4gPiArCWlm IChlc3BpX29vYi0+ZG1hX21vZGUpDQo+ID4gKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGVzcGlfY3Ry bC0+bWFwLCBFU1BJX0NUUkwsDQo+ID4gKwkJCQkgICBFU1BJX0NUUkxfT09CX1RYX0RNQV9FTiB8 DQo+IEVTUElfQ1RSTF9PT0JfUlhfRE1BX0VOLCAwKTsNCj4gPiArCWVsc2UNCj4gPiArCQlyZWdt YXBfd3JpdGUoZXNwaV9jdHJsLT5tYXAsIEVTUElfT09CX1JYX0NUUkwsDQo+IEVTUElfT09CX1JY X0NUUkxfUEVORF9TRVJWKTsNCj4gPiArDQo+ID4gKwkvKg0KPiA+ICsJICogY2xlYW51cCBPT0Ig UlggRklGTyB0byBnZXQgcmlkIG9mIHRoZSBkYXRhDQo+ID4gKwkgKiBvZiBPT0IgZWFybHkgaW5p dCBzaWRlLWVmZmVjdA0KPiA+ICsJICovDQo+ID4gKwlyZWdtYXBfdXBkYXRlX2JpdHMoZXNwaV9j dHJsLT5tYXAsIEVTUElfQ1RSTCwNCj4gPiArCQkJICAgRVNQSV9DVFJMX09PQl9SWF9TV19SU1Qs DQo+IEVTUElfQ1RSTF9PT0JfUlhfU1dfUlNUKTsNCj4gPiArDQo+ID4gKwlyZWdtYXBfd3JpdGUo ZXNwaV9jdHJsLT5tYXAsIEVTUElfT09CX1JYX0NUUkwsDQo+ID4gKwkJICAgICBFU1BJX09PQl9S WF9DVFJMX1BFTkRfU0VSVik7DQo+ID4gKw0KPiA+ICsJaWYgKGVzcGlfb29iLT5kbWFfbW9kZSkg ew0KPiA+ICsJCXJlZ21hcF91cGRhdGVfYml0cyhlc3BpX2N0cmwtPm1hcCwgRVNQSV9DVFJMLA0K PiA+ICsJCQkJICAgRVNQSV9DVFJMX09PQl9UWF9ETUFfRU4gfA0KPiBFU1BJX0NUUkxfT09CX1JY X0RNQV9FTiwNCj4gPiArCQkJCSAgIEVTUElfQ1RSTF9PT0JfVFhfRE1BX0VOIHwNCj4gRVNQSV9D VFJMX09PQl9SWF9ETUFfRU4pOw0KPiA+ICsNCj4gPiArCQlpZiAoZXNwaV9jdHJsLT5tb2RlbC0+ dmVyc2lvbiA9PSBFU1BJX0FTVDI1MDApIHsNCj4gPiArCQkJcmVnbWFwX3dyaXRlKGVzcGlfY3Ry bC0+bWFwLCBFU1BJX09PQl9UWF9ETUEsDQo+IGRtYS0+dHhfYWRkcik7DQo+ID4gKwkJCXJlZ21h cF93cml0ZShlc3BpX2N0cmwtPm1hcCwgRVNQSV9PT0JfUlhfRE1BLA0KPiBkbWEtPnJ4X2FkZHIp Ow0KPiA+ICsJCX0gZWxzZSB7DQo+ID4gKwkJCWZvciAoaSA9IDA7IGkgPCBkbWEtPnR4X2Rlc2Nf bnVtOyArK2kpDQo+ID4gKwkJCQlkbWEtPnR4X2Rlc2NbaV0uZGF0YV9hZGRyID0gZG1hLT50eF9h ZGRyICsgKGkgKg0KPiBQQUdFX1NJWkUpOw0KPiA+ICsNCj4gPiArCQkJZm9yIChpID0gMDsgaSA8 IGRtYS0+cnhfZGVzY19udW07ICsraSkgew0KPiA+ICsJCQkJZG1hLT5yeF9kZXNjW2ldLmRhdGFf YWRkciA9IGRtYS0+cnhfYWRkciArIChpICoNCj4gUEFHRV9TSVpFKTsNCj4gPiArCQkJCWRtYS0+ cnhfZGVzY1tpXS5kaXJ0eSA9IDA7DQo+ID4gKwkJCX0NCj4gPiArDQo+ID4gKwkJCXJlZ21hcF93 cml0ZShlc3BpX2N0cmwtPm1hcCwgRVNQSV9PT0JfVFhfRE1BLA0KPiBkbWEtPnR4X2Rlc2NfYWRk cik7DQo+ID4gKwkJCXJlZ21hcF93cml0ZShlc3BpX2N0cmwtPm1hcCwgRVNQSV9PT0JfVFhfRE1B X1JCX1NJWkUsDQo+IGRtYS0+dHhfZGVzY19udW0pOw0KPiA+ICsNCj4gPiArCQkJcmVnbWFwX3dy aXRlKGVzcGlfY3RybC0+bWFwLCBFU1BJX09PQl9SWF9ETUEsDQo+IGRtYS0+cnhfZGVzY19hZGRy KTsNCj4gPiArCQkJcmVnbWFwX3dyaXRlKGVzcGlfY3RybC0+bWFwLCBFU1BJX09PQl9SWF9ETUFf UkJfU0laRSwNCj4gZG1hLT5yeF9kZXNjX251bSk7DQo+ID4gKwkJCXJlZ21hcF91cGRhdGVfYml0 cyhlc3BpX2N0cmwtPm1hcCwNCj4gRVNQSV9PT0JfUlhfRE1BX1dTX1BUUiwNCj4gPiArCQkJCQkg ICBFU1BJX09PQl9SWF9ETUFfV1NfUFRSX1JFQ1ZfRU4sDQo+ID4gKwkJCQkJICAgRVNQSV9PT0Jf UlhfRE1BX1dTX1BUUl9SRUNWX0VOKTsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJ cmVnbWFwX3dyaXRlKGVzcGlfY3RybC0+bWFwLCBFU1BJX0lOVF9TVFMsDQo+ID4gKwkJICAgICBF U1BJX0lOVF9TVFNfT09CX0JJVFMpOw0KPiA+ICsNCj4gPiArCXJlZ21hcF91cGRhdGVfYml0cyhl c3BpX2N0cmwtPm1hcCwgRVNQSV9JTlRfRU4sDQo+ID4gKwkJCSAgIEVTUElfSU5UX0VOX09PQl9C SVRTLA0KPiA+ICsJCQkgICBFU1BJX0lOVF9FTl9PT0JfQklUUyk7DQo+ID4gKw0KPiA+ICsJcmVn bWFwX3VwZGF0ZV9iaXRzKGVzcGlfY3RybC0+bWFwLCBFU1BJX0NUUkwsDQo+ID4gKwkJCSAgIEVT UElfQ1RSTF9PT0JfU1dfUkRZLA0KPiA+ICsJCQkgICBFU1BJX0NUUkxfT09CX1NXX1JEWSk7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFz cGVlZF9lc3BpX29vYl9mb3BzID0gew0KPiA+ICsJLm93bmVyID0gVEhJU19NT0RVTEUsDQo+ID4g KwkudW5sb2NrZWRfaW9jdGwgPSBhc3BlZWRfZXNwaV9vb2JfaW9jdGwsDQo+ID4gK307DQo+ID4g Kw0KPiA+ICt2b2lkICphc3BlZWRfZXNwaV9vb2JfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBz dHJ1Y3QgYXNwZWVkX2VzcGlfY3RybA0KPiAqZXNwaV9jdHJsKQ0KPiA+ICt7DQo+ID4gKwlpbnQg cmMgPSAwOw0KPiA+ICsJc3RydWN0IGFzcGVlZF9lc3BpX29vYiAqZXNwaV9vb2I7DQo+ID4gKwlz dHJ1Y3QgYXNwZWVkX2VzcGlfb29iX2RtYSAqZG1hOw0KPiA+ICsNCj4gPiArCWVzcGlfb29iID0g ZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCplc3BpX29vYiksIEdGUF9LRVJORUwpOw0KPiA+ICsJ aWYgKCFlc3BpX29vYikNCj4gPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsNCj4gPiArDQo+ ID4gKwllc3BpX29vYi0+Y3RybCA9IGVzcGlfY3RybDsNCj4gPiArDQo+ID4gKwlpbml0X3dhaXRx dWV1ZV9oZWFkKCZlc3BpX29vYi0+d3EpOw0KPiA+ICsNCj4gPiArCXNwaW5fbG9ja19pbml0KCZl c3BpX29vYi0+bG9jayk7DQo+ID4gKw0KPiA+ICsJbXV0ZXhfaW5pdCgmZXNwaV9vb2ItPnB1dF90 eF9tdHgpOw0KPiA+ICsJbXV0ZXhfaW5pdCgmZXNwaV9vb2ItPmdldF9yeF9tdHgpOw0KPiA+ICsN Cj4gPiArCWlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woZGV2LT5vZl9ub2RlLCAib29iLGRtYS1t b2RlIikpDQo+ID4gKwkJZXNwaV9vb2ItPmRtYV9tb2RlID0gMTsNCj4gPiArDQo+ID4gKwlpZiAo ZXNwaV9vb2ItPmRtYV9tb2RlKSB7DQo+ID4gKwkJZG1hID0gJmVzcGlfb29iLT5kbWE7DQo+ID4g Kw0KPiA+ICsJCS8qIERlc2NyaXB0b3IgYmFzZWQgT09CIERNQSBpcyBzdXBwb3J0ZWQgc2luY2Ug QVNUMjYwMCAqLw0KPiA+ICsJCWlmIChlc3BpX2N0cmwtPm1vZGVsLT52ZXJzaW9uICE9IEVTUElf QVNUMjUwMCkgew0KPiA+ICsJCQlvZl9wcm9wZXJ0eV9yZWFkX3UzMihkZXYtPm9mX25vZGUsICJv b2IsZG1hLXR4LWRlc2MtbnVtIiwNCj4gPiArCQkJCQkgICAgICZkbWEtPnR4X2Rlc2NfbnVtKTsN Cj4gPiArCQkJb2ZfcHJvcGVydHlfcmVhZF91MzIoZGV2LT5vZl9ub2RlLCAib29iLGRtYS1yeC1k ZXNjLW51bSIsDQo+ID4gKwkJCQkJICAgICAmZG1hLT5yeF9kZXNjX251bSk7DQo+ID4gKw0KPiA+ ICsJCQlpZiAoIWRtYS0+dHhfZGVzY19udW0gfHwgIWRtYS0+cnhfZGVzY19udW0pIHsNCj4gPiAr CQkJCWRldl9lcnIoZGV2LCAiaW52YWxpZCB6ZXJvIG51bWJlciBvZiBETUEgY2hhbm5lbHNcbiIp Ow0KPiA+ICsJCQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7DQo+ID4gKwkJCX0NCj4gPiArDQo+ ID4gKwkJCWlmIChkbWEtPnR4X2Rlc2NfbnVtID49IE9PQl9ETUFfREVTQ19NQVhfTlVNIHx8DQo+ ID4gKwkJCSAgICBkbWEtPnJ4X2Rlc2NfbnVtID49IE9PQl9ETUFfREVTQ19NQVhfTlVNKSB7DQo+ ID4gKwkJCQlkZXZfZXJyKGRldiwgInRvbyBtYW55IG51bWJlciBvZiBETUEgY2hhbm5lbHNcbiIp Ow0KPiA+ICsJCQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7DQo+ID4gKwkJCX0NCj4gPiArDQo+ ID4gKwkJCWRtYS0+dHhfZGVzYyA9IGRtYV9hbGxvY19jb2hlcmVudChkZXYsDQo+ID4gKwkJCQkJ CQkgIHNpemVvZigqZG1hLT50eF9kZXNjKSAqDQo+IGRtYS0+dHhfZGVzY19udW0sDQo+ID4gKwkJ CQkJCQkgICZkbWEtPnR4X2Rlc2NfYWRkciwgR0ZQX0tFUk5FTCk7DQo+IA0KPiBIZXJlIGFuZCBh IGZldyBsaW5lcyBiZWxvdywgZG1hX2FsbG9jX2NvaGVyZW50KCkgY291bGQgYmUgcmVwbGFjZWQg YnkNCj4gZG1hbV9hbGxvY19jb2hlcmVudCgpIChpdHMgbWFuYWdlZCB2ZXJzaW9uKSB0byBzaW1w bGlmeSBlcnJvciBoYW5kbGluZw0KPiBhbmQgZnJlZWluZyBvZiByZXNvdXJjZXMuDQo+IA0KPiA+ ICsJCQlpZiAoIWRtYS0+dHhfZGVzYykgew0KPiA+ICsJCQkJZGV2X2VycihkZXYsICJjYW5ub3Qg YWxsb2NhdGUgRE1BIFRYIGRlc2NyaXB0b3JcbiIpOw0KPiA+ICsJCQkJcmV0dXJuIEVSUl9QVFIo LUVOT01FTSk7DQo+ID4gKwkJCX0NCj4gPiArDQo+ID4gKwkJCWRtYS0+cnhfZGVzYyA9IGRtYV9h bGxvY19jb2hlcmVudChkZXYsDQo+ID4gKwkJCQkJCQkgIHNpemVvZigqZG1hLT5yeF9kZXNjKSAq DQo+IGRtYS0+cnhfZGVzY19udW0sDQo+ID4gKwkJCQkJCQkgICZkbWEtPnJ4X2Rlc2NfYWRkciwg R0ZQX0tFUk5FTCk7DQo+ID4gKwkJCWlmICghZG1hLT5yeF9kZXNjKSB7DQo+ID4gKwkJCQlkZXZf ZXJyKGRldiwgImNhbm5vdCBhbGxvY2F0ZSBETUEgUlggZGVzY3JpcHRvclxuIik7DQo+ID4gKwkJ CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsNCj4gPiArCQkJfQ0KPiA+ICsJCX0NCj4gPiArDQo+ ID4gKwkJLyoNCj4gPiArCQkgKiBETUEgZGVzY3JpcHRvcnMgYXJlIGNvbnN1bWVkIGluIHRoZSBj aXJjdWxhcg0KPiA+ICsJCSAqIHF1ZXVlIHBhcmFkaWdtLiBUaGVyZWZvcmUsIG9uZSBkdW1teSBz bG90IGlzDQo+ID4gKwkJICogcmVzZXJ2ZWQgdG8gZGV0ZWN0IHRoZSBmdWxsIGNvbmRpdGlvbi4N Cj4gPiArCQkgKg0KPiA+ICsJCSAqIEZvciBBU1QyNTAwIHdpdGhvdXQgRE1BIGRlc2NyaXB0b3Jz IHN1cHBvcnRlZCwNCj4gPiArCQkgKiB0aGUgbnVtYmVyIG9mIHRoZSBxdWV1ZSBzbG90IHNob3Vs ZCBiZSAxIGhlcmUuDQo+ID4gKwkJICovDQo+ID4gKwkJZG1hLT50eF9kZXNjX251bSArPSAxOw0K PiA+ICsJCWRtYS0+cnhfZGVzY19udW0gKz0gMTsNCj4gPiArDQo+ID4gKwkJZG1hLT50eF92aXJ0 ID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgUEFHRV9TSVpFICoNCj4gZG1hLT50eF9kZXNjX251 bSwNCj4gPiArCQkJCQkJICAmZG1hLT50eF9hZGRyLCBHRlBfS0VSTkVMKTsNCj4gPiArCQlpZiAo IWRtYS0+dHhfdmlydCkgew0KPiA+ICsJCQlkZXZfZXJyKGRldiwgImNhbm5vdCBhbGxvY2F0ZSBE TUEgVFggYnVmZmVyXG4iKTsNCj4gPiArCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7DQo+ID4g KwkJfQ0KPiA+ICsNCj4gPiArCQlkbWEtPnJ4X3ZpcnQgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2 LCBQQUdFX1NJWkUgKg0KPiBkbWEtPnJ4X2Rlc2NfbnVtLA0KPiA+ICsJCQkJCQkgICZkbWEtPnJ4 X2FkZHIsIEdGUF9LRVJORUwpOw0KPiA+ICsJCWlmICghZG1hLT5yeF92aXJ0KSB7DQo+ID4gKwkJ CWRldl9lcnIoZGV2LCAiY2Fubm90IGFsbG9jYXRlIERNQSBSWCBidWZmZXJcbiIpOw0KPiA+ICsJ CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ ICsJZXNwaV9vb2ItPm1kZXYucGFyZW50ID0gZGV2Ow0KPiA+ICsJZXNwaV9vb2ItPm1kZXYubWlu b3IgPSBNSVNDX0RZTkFNSUNfTUlOT1I7DQo+ID4gKwllc3BpX29vYi0+bWRldi5uYW1lID0gZGV2 bV9rYXNwcmludGYoZGV2LCBHRlBfS0VSTkVMLCAiJXMiLA0KPiBPT0JfTURFVl9OQU1FKTsNCj4g PiArCWVzcGlfb29iLT5tZGV2LmZvcHMgPSAmYXNwZWVkX2VzcGlfb29iX2ZvcHM7DQo+ID4gKwly YyA9IG1pc2NfcmVnaXN0ZXIoJmVzcGlfb29iLT5tZGV2KTsNCj4gPiArCWlmIChyYykgew0KPiA+ ICsJCWRldl9lcnIoZGV2LCAiY2Fubm90IHJlZ2lzdGVyIGRldmljZVxuIik7DQo+ID4gKwkJcmV0 dXJuIEVSUl9QVFIocmMpOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWFzcGVlZF9lc3BpX29vYl9l bmFibGUoZXNwaV9vb2IpOw0KPiA+ICsNCj4gPiArCXJldHVybiBlc3BpX29vYjsNCj4gPiArfQ0K PiA+ICsNCj4gPiArdm9pZCBhc3BlZWRfZXNwaV9vb2JfZnJlZShzdHJ1Y3QgZGV2aWNlICpkZXYs IHN0cnVjdCBhc3BlZWRfZXNwaV9vb2INCj4gKmVzcGlfb29iKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1 Y3QgYXNwZWVkX2VzcGlfb29iX2RtYSAqZG1hID0gJmVzcGlfb29iLT5kbWE7DQo+ID4gKw0KPiA+ ICsJaWYgKGVzcGlfb29iLT5kbWFfbW9kZSkgew0KPiA+ICsJCWRtYV9mcmVlX2NvaGVyZW50KGRl diwgc2l6ZW9mKCpkbWEtPnR4X2Rlc2MpICoNCj4gZG1hLT50eF9kZXNjX251bSwNCj4gPiArCQkJ CSAgZG1hLT50eF9kZXNjLCBkbWEtPnR4X2Rlc2NfYWRkcik7DQo+ID4gKwkJZG1hX2ZyZWVfY29o ZXJlbnQoZGV2LCBzaXplb2YoKmRtYS0+cnhfZGVzYykgKg0KPiBkbWEtPnJ4X2Rlc2NfbnVtLA0K PiA+ICsJCQkJICBkbWEtPnJ4X2Rlc2MsIGRtYS0+cnhfZGVzY19hZGRyKTsNCj4gPiArCQlkbWFf ZnJlZV9jb2hlcmVudChkZXYsIFBBR0VfU0laRSAqIGRtYS0+dHhfZGVzY19udW0sDQo+ID4gKwkJ CQkgIGRtYS0+dHhfdmlydCwgZG1hLT50eF9hZGRyKTsNCj4gPiArCQlkbWFfZnJlZV9jb2hlcmVu dChkZXYsIFBBR0VfU0laRSAqIGRtYS0+cnhfZGVzY19udW0sDQo+ID4gKwkJCQkgIGRtYS0+cnhf dmlydCwgZG1hLT5yeF9hZGRyKTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwltdXRleF9kZXN0cm95 KCZlc3BpX29vYi0+cHV0X3R4X210eCk7DQo+ID4gKwltdXRleF9kZXN0cm95KCZlc3BpX29vYi0+ Z2V0X3J4X210eCk7DQo+ID4gKw0KPiA+ICsJbWlzY19kZXJlZ2lzdGVyKCZlc3BpX29vYi0+bWRl dik7DQo+ID4gK30NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MvYXNwZWVkL2FzcGVlZC1l c3BpLW9vYi5oDQo+IGIvZHJpdmVycy9zb2MvYXNwZWVkL2FzcGVlZC1lc3BpLW9vYi5oDQo+ID4g bmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjAzZDc0ZWYzOWU4 Yg0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL3NvYy9hc3BlZWQvYXNwZWVk LWVzcGktb29iLmgNCj4gPiBAQCAtMCwwICsxLDcwIEBADQo+ID4gKy8qIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wKyAqLw0KPiA+ICsvKg0KPiA+ICsgKiBDb3B5cmlnaHQgMjAyMSBB c3BlZWQgVGVjaG5vbG9neSBJbmMuDQo+ID4gKyAqLw0KPiA+ICsjaWZuZGVmIF9BU1BFRURfRVNQ SV9PT0JfSF8NCj4gPiArI2RlZmluZSBfQVNQRUVEX0VTUElfT09CX0hfDQo+ID4gKw0KPiA+ICtz dHJ1Y3Qgb29iX3R4X2RtYV9kZXNjIHsNCj4gPiArCXVpbnQzMl90IGRhdGFfYWRkcjsNCj4gPiAr CXVpbnQ4X3QgY3ljOw0KPiA+ICsJdWludDE2X3QgdGFnIDogNDsNCj4gPiArCXVpbnQxNl90IGxl biA6IDEyOw0KPiA+ICsJdWludDhfdCBtc2dfdHlwZSA6IDM7DQo+ID4gKwl1aW50OF90IHJhejAg OiAxOw0KPiA+ICsJdWludDhfdCBwZWMgOiAxOw0KPiA+ICsJdWludDhfdCBpbnRfZW4gOiAxOw0K PiA+ICsJdWludDhfdCBwYXVzZSA6IDE7DQo+ID4gKwl1aW50OF90IHJhejEgOiAxOw0KPiA+ICsJ dWludDMyX3QgcmF6MjsNCj4gPiArCXVpbnQzMl90IHJhejM7DQo+ID4gK30gX19wYWNrZWQ7DQo+ ID4gKw0KPiA+ICtzdHJ1Y3Qgb29iX3J4X2RtYV9kZXNjIHsNCj4gPiArCXVpbnQzMl90IGRhdGFf YWRkcjsNCj4gPiArCXVpbnQ4X3QgY3ljOw0KPiA+ICsJdWludDE2X3QgdGFnIDogNDsNCj4gPiAr CXVpbnQxNl90IGxlbiA6IDEyOw0KPiA+ICsJdWludDhfdCByYXogOiA3Ow0KPiA+ICsJdWludDhf dCBkaXJ0eSA6IDE7DQo+ID4gK30gX19wYWNrZWQ7DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgYXNwZWVk X2VzcGlfb29iX2RtYSB7DQo+ID4gKwl1aW50MzJfdCB0eF9kZXNjX251bTsNCj4gPiArCXVpbnQz Ml90IHJ4X2Rlc2NfbnVtOw0KPiA+ICsNCj4gPiArCXN0cnVjdCBvb2JfdHhfZG1hX2Rlc2MgKnR4 X2Rlc2M7DQo+ID4gKwlkbWFfYWRkcl90IHR4X2Rlc2NfYWRkcjsNCj4gPiArDQo+ID4gKwlzdHJ1 Y3Qgb29iX3J4X2RtYV9kZXNjICpyeF9kZXNjOw0KPiA+ICsJZG1hX2FkZHJfdCByeF9kZXNjX2Fk ZHI7DQo+ID4gKw0KPiA+ICsJdm9pZCAqdHhfdmlydDsNCj4gPiArCWRtYV9hZGRyX3QgdHhfYWRk cjsNCj4gPiArDQo+ID4gKwl2b2lkICpyeF92aXJ0Ow0KPiA+ICsJZG1hX2FkZHJfdCByeF9hZGRy Ow0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IGFzcGVlZF9lc3BpX29vYiB7DQo+ID4gKwl1 aW50MzJfdCBkbWFfbW9kZTsNCj4gPiArCXN0cnVjdCBhc3BlZWRfZXNwaV9vb2JfZG1hIGRtYTsN Cj4gPiArDQo+ID4gKwl1aW50MzJfdCByeF9yZWFkeTsNCj4gPiArCXdhaXRfcXVldWVfaGVhZF90 IHdxOw0KPiA+ICsNCj4gPiArCXN0cnVjdCBtdXRleCBnZXRfcnhfbXR4Ow0KPiA+ICsJc3RydWN0 IG11dGV4IHB1dF90eF9tdHg7DQo+ID4gKw0KPiA+ICsJc3BpbmxvY2tfdCBsb2NrOw0KPiA+ICsN Cj4gPiArCXN0cnVjdCBtaXNjZGV2aWNlIG1kZXY7DQo+ID4gKwlzdHJ1Y3QgYXNwZWVkX2VzcGlf Y3RybCAqY3RybDsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3ZvaWQgYXNwZWVkX2VzcGlfb29iX2V2 ZW50KHVpbnQzMl90IHN0cywgc3RydWN0IGFzcGVlZF9lc3BpX29vYg0KPiAqZXNwaV9vb2IpOw0K PiA+ICt2b2lkIGFzcGVlZF9lc3BpX29vYl9lbmFibGUoc3RydWN0IGFzcGVlZF9lc3BpX29vYiAq ZXNwaV9vb2IpOw0KPiA+ICt2b2lkICphc3BlZWRfZXNwaV9vb2JfYWxsb2Moc3RydWN0IGRldmlj ZSAqZGV2LCBzdHJ1Y3QgYXNwZWVkX2VzcGlfY3RybA0KPiAqZXNwaV9jdHJsKTsNCj4gPiArdm9p ZCBhc3BlZWRfZXNwaV9vb2JfZnJlZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBhc3BlZWRf ZXNwaV9vb2INCj4gKmVzcGlfb29iKTsNCj4gPiArDQo+ID4gKyNlbmRpZg0KPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL3NvYy9hc3BlZWQvYXNwZWVkLWVzcGktcGVyaWYuYw0KPiBiL2RyaXZlcnMv c29jL2FzcGVlZC9hc3BlZWQtZXNwaS1wZXJpZi5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN Cj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLmViZjNkOTk3OGI0YQ0KPiA+IC0tLSAvZGV2L251bGwN Cj4gPiArKysgYi9kcml2ZXJzL3NvYy9hc3BlZWQvYXNwZWVkLWVzcGktcGVyaWYuYw0KPiA+IEBA IC0wLDAgKzEsNTExIEBADQo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w Kw0KPiA+ICsvKg0KPiA+ICsgKiBDb3B5cmlnaHQgMjAyMSBBU1BFRUQgVGVjaG5vbG9neSBJbmMu DQo+ID4gKyAqLw0KPiA+ICsjaW5jbHVkZSA8bGludXgvZnMuaD4NCj4gPiArI2luY2x1ZGUgPGxp bnV4L29mX2RldmljZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPg0KPiA+ ICsjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcmVn bWFwLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+DQo+ID4gKyNpbmNsdWRlIDxs aW51eC92bWFsbG9jLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+DQo+ID4g KyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgImFz cGVlZC1lc3BpLWlvYy5oIg0KPiA+ICsjaW5jbHVkZSAiYXNwZWVkLWVzcGktY3RybC5oIg0KPiA+ ICsjaW5jbHVkZSAiYXNwZWVkLWVzcGktcGVyaWYuaCINCj4gPiArDQo+ID4gKyNkZWZpbmUgUEVS SUZfTURFVl9OQU1FCQkiYXNwZWVkLWVzcGktcGVyaXBoZXJhbCINCj4gPiArI2RlZmluZSBQRVJJ Rl9NRU1DWUNfVU5MT0NLX0tFWQkweGZlZGM3NTZlDQo+ID4gKyNkZWZpbmUgUEVSSUZfTUVNQ1lD X1NJWkVfTUlOCTB4MTAwMDANCj4gPiArDQo+ID4gK3N0YXRpYyBsb25nIGFzcGVlZF9lc3BpX3Bl cmlmX3BjX2dldF9yeChzdHJ1Y3QgZmlsZSAqZnAsDQo+ID4gKwkJCQkJc3RydWN0IGFzcGVlZF9l c3BpX2lvYyAqaW9jLA0KPiA+ICsJCQkJCXN0cnVjdCBhc3BlZWRfZXNwaV9wZXJpZiAqZXNwaV9w ZXJpZikNCj4gPiArew0KPiA+ICsJaW50IGksIHJjID0gMDsNCj4gPiArCXVpbnQzMl90IHJlZzsN Cj4gPiArCXVpbnQzMl90IGN5YywgdGFnLCBsZW47DQo+ID4gKwl1aW50OF90ICpwa3Q7DQo+ID4g Kwl1aW50MzJfdCBwa3RfbGVuOw0KPiA+ICsJc3RydWN0IGVzcGlfY29tbV9oZHIgKmhkcjsNCj4g PiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ID4gKwlzdHJ1Y3QgYXNwZWVkX2VzcGlfY3RybCAq ZXNwaV9jdHJsID0gZXNwaV9wZXJpZi0+Y3RybDsNCj4gPiArDQo+ID4gKwlpZiAoZnAtPmZfZmxh Z3MgJiBPX05PTkJMT0NLKSB7DQo+ID4gKwkJaWYgKG11dGV4X3RyeWxvY2soJmVzcGlfcGVyaWYt PnBjX3J4X210eCkpDQo+ID4gKwkJCXJldHVybiAtRUJVU1k7DQo+ID4gKw0KPiA+ICsJCWlmICgh ZXNwaV9wZXJpZi0+cnhfcmVhZHkpIHsNCj4gPiArCQkJcmMgPSAtRU5PREFUQTsNCj4gPiArCQkJ Z290byB1bmxvY2tfbXR4X25fb3V0Ow0KPiA+ICsJCX0NCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJ bXV0ZXhfbG9jaygmZXNwaV9wZXJpZi0+cGNfcnhfbXR4KTsNCj4gPiArDQo+ID4gKwkJaWYgKCFl c3BpX3BlcmlmLT5yeF9yZWFkeSkgew0KPiA+ICsJCQlyYyA9IHdhaXRfZXZlbnRfaW50ZXJydXB0 aWJsZShlc3BpX3BlcmlmLT53cSwNCj4gPiArCQkJCQkJICAgICAgZXNwaV9wZXJpZi0+cnhfcmVh ZHkpOw0KPiA+ICsJCQlpZiAocmMgPT0gLUVSRVNUQVJUU1lTKSB7DQo+ID4gKwkJCQlyYyA9IC1F SU5UUjsNCj4gPiArCQkJCWdvdG8gdW5sb2NrX210eF9uX291dDsNCj4gPiArCQkJfQ0KPiA+ICsJ CX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBjb21tb24gaGVhZGVyIChpLmUuIGN5Y2xlIHR5 cGUsIHRhZywgYW5kIGxlbmd0aCkgaXMgdGFrZW4gYnkgSFcgKi8NCj4gPiArCXJlZ21hcF9yZWFk KGVzcGlfY3RybC0+bWFwLCBFU1BJX1BFUklGX1BDX1JYX0NUUkwsICZyZWcpOw0KPiA+ICsJY3lj ID0gKHJlZyAmIEVTUElfUEVSSUZfUENfUlhfQ1RSTF9DWUNfTUFTSykgPj4NCj4gRVNQSV9QRVJJ Rl9QQ19SWF9DVFJMX0NZQ19TSElGVDsNCj4gPiArCXRhZyA9IChyZWcgJiBFU1BJX1BFUklGX1BD X1JYX0NUUkxfVEFHX01BU0spID4+DQo+IEVTUElfUEVSSUZfUENfUlhfQ1RSTF9UQUdfU0hJRlQ7 DQo+ID4gKwlsZW4gPSAocmVnICYgRVNQSV9QRVJJRl9QQ19SWF9DVFJMX0xFTl9NQVNLKSA+Pg0K PiBFU1BJX1BFUklGX1BDX1JYX0NUUkxfTEVOX1NISUZUOw0KPiA+ICsNCj4gPiArCS8qDQo+ID4g KwkgKiBjYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiB0aGUgcmVzdCBwYXJ0IG9mIHRoZQ0KPiA+ICsJ ICogZVNQSSBwYWNrZXQgdG8gYmUgcmVhZCBmcm9tIEhXIGFuZCBjb3BpZWQgdG8NCj4gPiArCSAq IHVzZXIgc3BhY2UuDQo+ID4gKwkgKi8NCj4gPiArCXN3aXRjaCAoY3ljKSB7DQo+ID4gKwljYXNl IEVTUElfUEVSSUZfTVNHOg0KPiA+ICsJCXBrdF9sZW4gPSBsZW4gKyBzaXplb2Yoc3RydWN0IGVz cGlfcGVyaWZfbXNnKTsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgRVNQSV9QRVJJRl9NU0df RDoNCj4gPiArCQlwa3RfbGVuID0gKChsZW4pID8gbGVuIDogRVNQSV9QTERfTEVOX01BWCkgKw0K PiA+ICsJCQkgIHNpemVvZihzdHJ1Y3QgZXNwaV9wZXJpZl9tc2cpOw0KPiA+ICsJCWJyZWFrOw0K PiA+ICsJY2FzZSBFU1BJX1BFUklGX1NVQ19DTVBMVF9EX01JRERMRToNCj4gPiArCWNhc2UgRVNQ SV9QRVJJRl9TVUNfQ01QTFRfRF9GSVJTVDoNCj4gPiArCWNhc2UgRVNQSV9QRVJJRl9TVUNfQ01Q TFRfRF9MQVNUOg0KPiA+ICsJY2FzZSBFU1BJX1BFUklGX1NVQ19DTVBMVF9EX09OTFk6DQo+ID4g KwkJcGt0X2xlbiA9ICgobGVuKSA/IGxlbiA6IEVTUElfUExEX0xFTl9NQVgpICsNCj4gPiArCQkJ ICBzaXplb2Yoc3RydWN0IGVzcGlfcGVyaWZfY21wbHQpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJ Y2FzZSBFU1BJX1BFUklGX1NVQ19DTVBMVDoNCj4gPiArCWNhc2UgRVNQSV9QRVJJRl9VTlNVQ19D TVBMVDoNCj4gPiArCQlwa3RfbGVuID0gbGVuICsgc2l6ZW9mKHN0cnVjdCBlc3BpX3BlcmlmX2Nt cGx0KTsNCj4gPiArCQlicmVhazsNCj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJcmMgPSAtRUZBVUxU Ow0KPiA+ICsJCWdvdG8gdW5sb2NrX210eF9uX291dDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlp ZiAoaW9jLT5wa3RfbGVuIDwgcGt0X2xlbikgew0KPiA+ICsJCXJjID0gLUVJTlZBTDsNCj4gPiAr CQlnb3RvIHVubG9ja19tdHhfbl9vdXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcGt0ID0gdm1h bGxvYyhwa3RfbGVuKTsNCj4gPiArCWlmICghcGt0KSB7DQo+ID4gKwkJcmMgPSAtRU5PTUVNOw0K PiA+ICsJCWdvdG8gdW5sb2NrX210eF9uX291dDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwloZHIg PSAoc3RydWN0IGVzcGlfY29tbV9oZHIgKilwa3Q7DQo+ID4gKwloZHItPmN5YyA9IGN5YzsNCj4g PiArCWhkci0+dGFnID0gdGFnOw0KPiA+ICsJaGRyLT5sZW5faCA9IGxlbiA+PiA4Ow0KPiA+ICsJ aGRyLT5sZW5fbCA9IGxlbiAmIDB4ZmY7DQo+ID4gKw0KPiA+ICsJaWYgKGVzcGlfcGVyaWYtPmRt YV9tb2RlKSB7DQo+ID4gKwkJbWVtY3B5KGhkciArIDEsIGVzcGlfcGVyaWYtPmRtYS5wY19yeF92 aXJ0LA0KPiA+ICsJCSAgICAgICBwa3RfbGVuIC0gc2l6ZW9mKCpoZHIpKTsNCj4gPiArCX0gZWxz ZSB7DQo+ID4gKwkJZm9yIChpID0gc2l6ZW9mKCpoZHIpOyBpIDwgcGt0X2xlbjsgKytpKSB7DQo+ ID4gKwkJCXJlZ21hcF9yZWFkKGVzcGlfY3RybC0+bWFwLA0KPiA+ICsJCQkJICAgIEVTUElfUEVS SUZfUENfUlhfUE9SVCwgJnJlZyk7DQo+ID4gKwkJCXBrdFtpXSA9IHJlZyAmIDB4ZmY7DQo+ID4g KwkJfQ0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2Vy ICopaW9jLT5wa3QsIHBrdCwgcGt0X2xlbikpIHsNCj4gPiArCQlyYyA9IC1FRkFVTFQ7DQo+ID4g KwkJZ290byBmcmVlX25fb3V0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXNwaW5fbG9ja19pcnFz YXZlKCZlc3BpX3BlcmlmLT5sb2NrLCBmbGFncyk7DQo+ID4gKw0KPiA+ICsJcmVnbWFwX3dyaXRl X2JpdHMoZXNwaV9jdHJsLT5tYXAsIEVTUElfUEVSSUZfUENfUlhfQ1RSTCwNCj4gPiArCQkJICBF U1BJX1BFUklGX1BDX1JYX0NUUkxfUEVORF9TRVJWLA0KPiA+ICsJCQkgIEVTUElfUEVSSUZfUENf UlhfQ1RSTF9QRU5EX1NFUlYpOw0KPiA+ICsNCj4gPiArCWVzcGlfcGVyaWYtPnJ4X3JlYWR5ID0g MDsNCj4gPiArDQo+ID4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlc3BpX3BlcmlmLT5sb2Nr LCBmbGFncyk7DQo+ID4gKw0KPiA+ICtmcmVlX25fb3V0Og0KPiA+ICsJdmZyZWUocGt0KTsNCj4g PiArDQo+ID4gK3VubG9ja19tdHhfbl9vdXQ6DQo+ID4gKwltdXRleF91bmxvY2soJmVzcGlfcGVy aWYtPnBjX3J4X210eCk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIHJjOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgbG9uZyBhc3BlZWRfZXNwaV9wZXJpZl9wY19wdXRfdHgoc3RydWN0IGZpbGUg KmZwLA0KPiA+ICsJCQkJCXN0cnVjdCBhc3BlZWRfZXNwaV9pb2MgKmlvYywNCj4gPiArCQkJCQlz dHJ1Y3QgYXNwZWVkX2VzcGlfcGVyaWYgKmVzcGlfcGVyaWYpDQo+ID4gK3sNCj4gPiArCWludCBp LCByYyA9IDA7DQo+ID4gKwl1aW50MzJfdCByZWc7DQo+ID4gKwl1aW50MzJfdCBjeWMsIHRhZywg bGVuOw0KPiA+ICsJdWludDhfdCAqcGt0Ow0KPiA+ICsJc3RydWN0IGVzcGlfY29tbV9oZHIgKmhk cjsNCj4gPiArCXN0cnVjdCBhc3BlZWRfZXNwaV9jdHJsICplc3BpX2N0cmwgPSBlc3BpX3Blcmlm LT5jdHJsOw0KPiA+ICsNCj4gPiArCWlmICghbXV0ZXhfdHJ5bG9jaygmZXNwaV9wZXJpZi0+cGNf dHhfbXR4KSkNCj4gPiArCQlyZXR1cm4gLUVBR0FJTjsNCj4gPiArDQo+ID4gKwlyZWdtYXBfcmVh ZChlc3BpX2N0cmwtPm1hcCwgRVNQSV9QRVJJRl9QQ19UWF9DVFJMLCAmcmVnKTsNCj4gPiArCWlm IChyZWcgJiBFU1BJX1BFUklGX1BDX1RYX0NUUkxfVFJJR0dFUikgew0KPiA+ICsJCXJjID0gLUVC VVNZOw0KPiA+ICsJCWdvdG8gdW5sb2NrX25fb3V0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXBr dCA9IHZtYWxsb2MoaW9jLT5wa3RfbGVuKTsNCj4gPiArCWlmICghcGt0KSB7DQo+ID4gKwkJcmMg PSAtRU5PTUVNOw0KPiA+ICsJCWdvdG8gdW5sb2NrX25fb3V0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4g PiArCWhkciA9IChzdHJ1Y3QgZXNwaV9jb21tX2hkciAqKXBrdDsNCj4gPiArDQo+ID4gKwlpZiAo Y29weV9mcm9tX3VzZXIocGt0LCAodm9pZCBfX3VzZXIgKilpb2MtPnBrdCwgaW9jLT5wa3RfbGVu KSkgew0KPiA+ICsJCXJjID0gLUVGQVVMVDsNCj4gPiArCQlnb3RvIGZyZWVfbl9vdXQ7DQo+ID4g Kwl9DQo+ID4gKw0KPiA+ICsJLyoNCj4gPiArCSAqIGNvbW1vbiBoZWFkZXIgKGkuZS4gY3ljbGUg dHlwZSwgdGFnLCBhbmQgbGVuZ3RoKQ0KPiA+ICsJICogcGFydCBpcyB3cml0dGVuIHRvIEhXIHJl Z2lzdGVycw0KPiA+ICsJICovDQo+ID4gKwlpZiAoZXNwaV9wZXJpZi0+ZG1hX21vZGUpIHsNCj4g PiArCQltZW1jcHkoZXNwaV9wZXJpZi0+ZG1hLnBjX3R4X3ZpcnQsIGhkciArIDEsDQo+ID4gKwkJ ICAgICAgIGlvYy0+cGt0X2xlbiAtIHNpemVvZigqaGRyKSk7DQo+ID4gKwkJZG1hX3dtYigpOw0K PiA+ICsJfSBlbHNlIHsNCj4gPiArCQlmb3IgKGkgPSBzaXplb2YoKmhkcik7IGkgPCBpb2MtPnBr dF9sZW47ICsraSkNCj4gPiArCQkJcmVnbWFwX3dyaXRlKGVzcGlfY3RybC0+bWFwLA0KPiA+ICsJ CQkJICAgICBFU1BJX1BFUklGX1BDX1RYX1BPUlQsIHBrdFtpXSk7DQo+ID4gKwl9DQo+ID4gKw0K PiA+ICsJY3ljID0gaGRyLT5jeWM7DQo+ID4gKwl0YWcgPSBoZHItPnRhZzsNCj4gPiArCWxlbiA9 IChoZHItPmxlbl9oIDw8IDgpIHwgKGhkci0+bGVuX2wgJiAweGZmKTsNCj4gPiArDQo+ID4gKwly ZWcgPSAoKGN5YyA8PCBFU1BJX1BFUklGX1BDX1RYX0NUUkxfQ1lDX1NISUZUKSAmDQo+IEVTUElf UEVSSUZfUENfVFhfQ1RSTF9DWUNfTUFTSykNCj4gPiArCQl8ICgodGFnIDw8IEVTUElfUEVSSUZf UENfVFhfQ1RSTF9UQUdfU0hJRlQpICYNCj4gRVNQSV9QRVJJRl9QQ19UWF9DVFJMX1RBR19NQVNL KQ0KPiA+ICsJCXwgKChsZW4gPDwgRVNQSV9QRVJJRl9QQ19UWF9DVFJMX0xFTl9TSElGVCkgJg0K PiBFU1BJX1BFUklGX1BDX1RYX0NUUkxfTEVOX01BU0spDQo+ID4gKwkJfCBFU1BJX1BFUklGX1BD X1RYX0NUUkxfVFJJR0dFUjsNCj4gPiArDQo+ID4gKwlyZWdtYXBfd3JpdGUoZXNwaV9jdHJsLT5t YXAsIEVTUElfUEVSSUZfUENfVFhfQ1RSTCwgcmVnKTsNCj4gPiArDQo+ID4gK2ZyZWVfbl9vdXQ6 DQo+ID4gKwl2ZnJlZShwa3QpOw0KPiA+ICsNCj4gPiArdW5sb2NrX25fb3V0Og0KPiA+ICsJbXV0 ZXhfdW5sb2NrKCZlc3BpX3BlcmlmLT5wY190eF9tdHgpOw0KPiA+ICsNCj4gPiArCXJldHVybiBy YzsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGxvbmcgYXNwZWVkX2VzcGlfcGVyaWZfbnBf cHV0X3R4KHN0cnVjdCBmaWxlICpmcCwNCj4gPiArCQkJCQlzdHJ1Y3QgYXNwZWVkX2VzcGlfaW9j ICppb2MsDQo+ID4gKwkJCQkJc3RydWN0IGFzcGVlZF9lc3BpX3BlcmlmICplc3BpX3BlcmlmKQ0K PiA+ICt7DQo+ID4gKwlpbnQgaSwgcmMgPSAwOw0KPiA+ICsJdWludDMyX3QgcmVnOw0KPiA+ICsJ dWludDMyX3QgY3ljLCB0YWcsIGxlbjsNCj4gPiArCXVpbnQ4X3QgKnBrdDsNCj4gPiArCXN0cnVj dCBlc3BpX2NvbW1faGRyICpoZHI7DQo+ID4gKwlzdHJ1Y3QgYXNwZWVkX2VzcGlfY3RybCAqZXNw aV9jdHJsID0gZXNwaV9wZXJpZi0+Y3RybDsNCj4gPiArDQo+ID4gKwlpZiAoIW11dGV4X3RyeWxv Y2soJmVzcGlfcGVyaWYtPm5wX3R4X210eCkpDQo+ID4gKwkJcmV0dXJuIC1FQUdBSU47DQo+ID4g Kw0KPiA+ICsJcmVnbWFwX3JlYWQoZXNwaV9jdHJsLT5tYXAsIEVTUElfUEVSSUZfTlBfVFhfQ1RS TCwgJnJlZyk7DQo+ID4gKwlpZiAocmVnICYgRVNQSV9QRVJJRl9OUF9UWF9DVFJMX1RSSUdHRVIp IHsNCj4gPiArCQlyYyA9IC1FQlVTWTsNCj4gPiArCQlnb3RvIHVubG9ja19uX291dDsNCj4gPiAr CX0NCj4gPiArDQo+ID4gKwlwa3QgPSB2bWFsbG9jKGlvYy0+cGt0X2xlbik7DQo+ID4gKwlpZiAo IXBrdCkgew0KPiA+ICsJCXJjID0gLUVOT01FTTsNCj4gPiArCQlnb3RvIHVubG9ja19uX291dDsN Cj4gPiArCX0NCj4gPiArDQo+ID4gKwloZHIgPSAoc3RydWN0IGVzcGlfY29tbV9oZHIgKilwa3Q7 DQo+ID4gKw0KPiA+ICsJaWYgKGNvcHlfZnJvbV91c2VyKHBrdCwgKHZvaWQgX191c2VyICopaW9j LT5wa3QsIGlvYy0+cGt0X2xlbikpIHsNCj4gPiArCQlyYyA9IC1FRkFVTFQ7DQo+ID4gKwkJZ290 byBmcmVlX25fb3V0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qDQo+ID4gKwkgKiBjb21tb24g aGVhZGVyIChpLmUuIGN5Y2xlIHR5cGUsIHRhZywgYW5kIGxlbmd0aCkNCj4gPiArCSAqIHBhcnQg aXMgd3JpdHRlbiB0byBIVyByZWdpc3RlcnMNCj4gPiArCSAqLw0KPiA+ICsJaWYgKGVzcGlfcGVy aWYtPmRtYV9tb2RlKSB7DQo+ID4gKwkJbWVtY3B5KGVzcGlfcGVyaWYtPmRtYS5ucF90eF92aXJ0 LCBoZHIgKyAxLA0KPiA+ICsJCSAgICAgICBpb2MtPnBrdF9sZW4gLSBzaXplb2YoKmhkcikpOw0K PiA+ICsJCWRtYV93bWIoKTsNCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJZm9yIChpID0gc2l6ZW9m KCpoZHIpOyBpIDwgaW9jLT5wa3RfbGVuOyArK2kpDQo+ID4gKwkJCXJlZ21hcF93cml0ZShlc3Bp X2N0cmwtPm1hcCwNCj4gPiArCQkJCSAgICAgRVNQSV9QRVJJRl9OUF9UWF9QT1JULCBwa3RbaV0p Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWN5YyA9IGhkci0+Y3ljOw0KPiA+ICsJdGFnID0gaGRy LT50YWc7DQo+ID4gKwlsZW4gPSAoaGRyLT5sZW5faCA8PCA4KSB8IChoZHItPmxlbl9sICYgMHhm Zik7DQo+ID4gKw0KPiA+ICsJcmVnID0gKChjeWMgPDwgRVNQSV9QRVJJRl9OUF9UWF9DVFJMX0NZ Q19TSElGVCkgJg0KPiBFU1BJX1BFUklGX05QX1RYX0NUUkxfQ1lDX01BU0spDQo+ID4gKwkJfCAo KHRhZyA8PCBFU1BJX1BFUklGX05QX1RYX0NUUkxfVEFHX1NISUZUKSAmDQo+IEVTUElfUEVSSUZf TlBfVFhfQ1RSTF9UQUdfTUFTSykNCj4gPiArCQl8ICgobGVuIDw8IEVTUElfUEVSSUZfTlBfVFhf Q1RSTF9MRU5fU0hJRlQpICYNCj4gRVNQSV9QRVJJRl9OUF9UWF9DVFJMX0xFTl9NQVNLKQ0KPiA+ ICsJCXwgRVNQSV9QRVJJRl9OUF9UWF9DVFJMX1RSSUdHRVI7DQo+ID4gKw0KPiA+ICsJcmVnbWFw X3dyaXRlKGVzcGlfY3RybC0+bWFwLCBFU1BJX1BFUklGX05QX1RYX0NUUkwsIHJlZyk7DQo+ID4g Kw0KPiA+ICtmcmVlX25fb3V0Og0KPiA+ICsJdmZyZWUocGt0KTsNCj4gPiArDQo+ID4gK3VubG9j a19uX291dDoNCj4gPiArCW11dGV4X3VubG9jaygmZXNwaV9wZXJpZi0+bnBfdHhfbXR4KTsNCj4g PiArDQo+ID4gKwlyZXR1cm4gcmM7DQo+ID4gKw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg bG9uZyBhc3BlZWRfZXNwaV9wZXJpZl9pb2N0bChzdHJ1Y3QgZmlsZSAqZnAsIHVuc2lnbmVkIGlu dCBjbWQsDQo+IHVuc2lnbmVkIGxvbmcgYXJnKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgYXNwZWVk X2VzcGlfaW9jIGlvYzsNCj4gPiArCXN0cnVjdCBhc3BlZWRfZXNwaV9wZXJpZiAqZXNwaV9wZXJp ZiA9IGNvbnRhaW5lcl9vZigNCj4gPiArCQkJZnAtPnByaXZhdGVfZGF0YSwNCj4gPiArCQkJc3Ry dWN0IGFzcGVlZF9lc3BpX3BlcmlmLA0KPiA+ICsJCQltZGV2KTsNCj4gPiArDQo+ID4gKwlpZiAo Y29weV9mcm9tX3VzZXIoJmlvYywgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YoaW9jKSkpDQo+ ID4gKwkJcmV0dXJuIC1FRkFVTFQ7DQo+ID4gKw0KPiA+ICsJaWYgKGlvYy5wa3RfbGVuID4gRVNQ SV9QS1RfTEVOX01BWCkNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwlzd2l0 Y2ggKGNtZCkgew0KPiA+ICsJY2FzZSBBU1BFRURfRVNQSV9QRVJJRl9QQ19HRVRfUlg6DQo+ID4g KwkJcmV0dXJuIGFzcGVlZF9lc3BpX3BlcmlmX3BjX2dldF9yeChmcCwgJmlvYywgZXNwaV9wZXJp Zik7DQo+ID4gKwljYXNlIEFTUEVFRF9FU1BJX1BFUklGX1BDX1BVVF9UWDoNCj4gPiArCQlyZXR1 cm4gYXNwZWVkX2VzcGlfcGVyaWZfcGNfcHV0X3R4KGZwLCAmaW9jLCBlc3BpX3BlcmlmKTsNCj4g PiArCWNhc2UgQVNQRUVEX0VTUElfUEVSSUZfTlBfUFVUX1RYOg0KPiA+ICsJCXJldHVybiBhc3Bl ZWRfZXNwaV9wZXJpZl9ucF9wdXRfdHgoZnAsICZpb2MsIGVzcGlfcGVyaWYpOw0KPiA+ICsJfTsN Cj4gPiArDQo+ID4gKwlyZXR1cm4gLUVJTlZBTDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IGludCBhc3BlZWRfZXNwaV9wZXJpZl9tbWFwKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IHZtX2Fy ZWFfc3RydWN0DQo+ICp2bWEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBhc3BlZWRfZXNwaV9wZXJp ZiAqZXNwaV9wZXJpZiA9IGNvbnRhaW5lcl9vZigNCj4gPiArCQkJZnAtPnByaXZhdGVfZGF0YSwN Cj4gPiArCQkJc3RydWN0IGFzcGVlZF9lc3BpX3BlcmlmLA0KPiA+ICsJCQltZGV2KTsNCj4gPiAr CXVuc2lnbmVkIGxvbmcgdm1fc2l6ZSA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydDsNCj4g PiArCXBncHJvdF90IHByb3QgPSB2bWEtPnZtX3BhZ2VfcHJvdDsNCj4gPiArDQo+ID4gKwlpZiAo IWVzcGlfcGVyaWYtPm1jeWNfZW5hYmxlKQ0KPiA+ICsJCXJldHVybiAtRVBFUk07DQo+ID4gKw0K PiA+ICsJaWYgKCgodm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUKSArIHZtX3NpemUpID4gZXNw aV9wZXJpZi0+bWN5Y19zaXplKQ0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiAr CXByb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKHByb3QpOw0KPiA+ICsNCj4gPiArCWlmIChyZW1hcF9w Zm5fcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LA0KPiA+ICsJCQkgICAgKGVzcGlfcGVyaWYtPm1j eWNfdGFkZHIgPj4gUEFHRV9TSElGVCkgKw0KPiB2bWEtPnZtX3Bnb2ZmLA0KPiA+ICsJCQkgICAg dm1fc2l6ZSwgcHJvdCkpDQo+ID4gKwkJcmV0dXJuIC1FQUdBSU47DQo+ID4gKw0KPiA+ICsJcmV0 dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3ZvaWQgYXNwZWVkX2VzcGlfcGVyaWZfZXZlbnQo dWludDMyX3Qgc3RzLCBzdHJ1Y3QgYXNwZWVkX2VzcGlfcGVyaWYNCj4gKmVzcGlfcGVyaWYpDQo+ ID4gK3sNCj4gPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ID4gKw0KPiA+ICsJaWYgKHN0cyAm IEVTUElfSU5UX1NUU19QRVJJRl9QQ19SWF9DTVBMVCkgew0KPiA+ICsJCXNwaW5fbG9ja19pcnFz YXZlKCZlc3BpX3BlcmlmLT5sb2NrLCBmbGFncyk7DQo+ID4gKwkJZXNwaV9wZXJpZi0+cnhfcmVh ZHkgPSAxOw0KPiA+ICsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVzcGlfcGVyaWYtPmxvY2ss IGZsYWdzKTsNCj4gPiArDQo+ID4gKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZlc3BpX3Blcmlm LT53cSk7DQo+ID4gKwl9DQo+ID4gK30NCj4gPiArDQo+ID4gK3ZvaWQgYXNwZWVkX2VzcGlfcGVy aWZfZW5hYmxlKHN0cnVjdCBhc3BlZWRfZXNwaV9wZXJpZiAqZXNwaV9wZXJpZikNCj4gPiArew0K PiA+ICsJc3RydWN0IGFzcGVlZF9lc3BpX3BlcmlmX2RtYSAqZG1hID0gJmVzcGlfcGVyaWYtPmRt YTsNCj4gPiArCXN0cnVjdCBhc3BlZWRfZXNwaV9jdHJsICplc3BpX2N0cmwgPSBlc3BpX3Blcmlm LT5jdHJsOw0KPiA+ICsNCj4gPiArCWlmIChlc3BpX3BlcmlmLT5tY3ljX2VuYWJsZSkgew0KPiA+ ICsJCWlmIChlc3BpX2N0cmwtPm1vZGVsLT52ZXJzaW9uID09IEVTUElfQVNUMjUwMCkgew0KPiA+ ICsJCQlyZWdtYXBfd3JpdGUoZXNwaV9jdHJsLT5tYXAsIEVTUElfUEVSSUZfUENfUlhfTUFTSywN Cj4gPiArCQkJCSAgICAgUEVSSUZfTUVNQ1lDX1VOTE9DS19LRVkpOw0KPiA+ICsJCQlyZWdtYXBf d3JpdGUoZXNwaV9jdHJsLT5tYXAsIEVTUElfUEVSSUZfUENfUlhfTUFTSywNCj4gPiArCQkJCSAg ICAgZXNwaV9wZXJpZi0+bWN5Y19tYXNrKTsNCj4gPiArCQl9IGVsc2Ugew0KPiA+ICsJCQlyZWdt YXBfd3JpdGUoZXNwaV9jdHJsLT5tYXAsIEVTUElfUEVSSUZfUENfUlhfTUFTSywNCj4gPiArCQkJ CSAgICAgZXNwaV9wZXJpZi0+bWN5Y19tYXNrIHwNCj4gRVNQSV9QRVJJRl9QQ19SWF9NQVNLX0NG R19XUCk7DQo+ID4gKwkJCXJlZ21hcF91cGRhdGVfYml0cyhlc3BpX2N0cmwtPm1hcCwgRVNQSV9D VFJMMiwNCj4gPiArCQkJCQkgICBFU1BJX0NUUkwyX01FTUNZQ19SRF9ESVMgfA0KPiBFU1BJX0NU UkwyX01FTUNZQ19XUl9ESVMsIDApOw0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJcmVnbWFwX3dy aXRlKGVzcGlfY3RybC0+bWFwLCBFU1BJX1BFUklGX1BDX1JYX1NBRERSLA0KPiBlc3BpX3Blcmlm LT5tY3ljX3NhZGRyKTsNCj4gPiArCQlyZWdtYXBfd3JpdGUoZXNwaV9jdHJsLT5tYXAsIEVTUElf UEVSSUZfUENfUlhfVEFERFIsDQo+IGVzcGlfcGVyaWYtPm1jeWNfdGFkZHIpOw0KPiA+ICsJfQ0K PiA+ICsNCj4gPiArCWlmIChlc3BpX3BlcmlmLT5kbWFfbW9kZSkgew0KPiA+ICsJCXJlZ21hcF93 cml0ZShlc3BpX2N0cmwtPm1hcCwgRVNQSV9QRVJJRl9QQ19SWF9ETUEsDQo+IGRtYS0+cGNfcnhf YWRkcik7DQo+ID4gKwkJcmVnbWFwX3dyaXRlKGVzcGlfY3RybC0+bWFwLCBFU1BJX1BFUklGX1BD X1RYX0RNQSwNCj4gZG1hLT5wY190eF9hZGRyKTsNCj4gPiArCQlyZWdtYXBfd3JpdGUoZXNwaV9j dHJsLT5tYXAsIEVTUElfUEVSSUZfTlBfVFhfRE1BLA0KPiBkbWEtPm5wX3R4X2FkZHIpOw0KPiA+ ICsNCj4gPiArCQlyZWdtYXBfdXBkYXRlX2JpdHMoZXNwaV9jdHJsLT5tYXAsIEVTUElfQ1RSTCwN Cj4gPiArCQkJCSAgIEVTUElfQ1RSTF9QRVJJRl9OUF9UWF9ETUFfRU4gfA0KPiA+ICsJCQkJICAg RVNQSV9DVFJMX1BFUklGX1BDX1RYX0RNQV9FTiB8DQo+ID4gKwkJCQkgICBFU1BJX0NUUkxfUEVS SUZfUENfUlhfRE1BX0VOLA0KPiA+ICsJCQkJICAgRVNQSV9DVFJMX1BFUklGX05QX1RYX0RNQV9F TiB8DQo+ID4gKwkJCQkgICBFU1BJX0NUUkxfUEVSSUZfUENfVFhfRE1BX0VOIHwNCj4gPiArCQkJ CSAgIEVTUElfQ1RSTF9QRVJJRl9QQ19SWF9ETUFfRU4pOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAr CXJlZ21hcF93cml0ZShlc3BpX2N0cmwtPm1hcCwgRVNQSV9JTlRfU1RTLA0KPiA+ICsJCSAgICAg RVNQSV9JTlRfU1RTX1BFUklGX0JJVFMpOw0KPiA+ICsNCj4gPiArCXJlZ21hcF91cGRhdGVfYml0 cyhlc3BpX2N0cmwtPm1hcCwgRVNQSV9JTlRfRU4sDQo+ID4gKwkJCSAgIEVTUElfSU5UX0VOX1BF UklGX0JJVFMsDQo+ID4gKwkJCSAgIEVTUElfSU5UX0VOX1BFUklGX0JJVFMpOw0KPiA+ICsNCj4g PiArCXJlZ21hcF91cGRhdGVfYml0cyhlc3BpX2N0cmwtPm1hcCwgRVNQSV9DVFJMLA0KPiA+ICsJ CQkgICBFU1BJX0NUUkxfUEVSSUZfU1dfUkRZLA0KPiA+ICsJCQkgICBFU1BJX0NUUkxfUEVSSUZf U1dfUkRZKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29w ZXJhdGlvbnMgYXNwZWVkX2VzcGlfcGVyaWZfZm9wcyA9IHsNCj4gPiArCS5vd25lciA9IFRISVNf TU9EVUxFLA0KPiA+ICsJLm1tYXAgPSBhc3BlZWRfZXNwaV9wZXJpZl9tbWFwLA0KPiA+ICsJLnVu bG9ja2VkX2lvY3RsID0gYXNwZWVkX2VzcGlfcGVyaWZfaW9jdGwsDQo+ID4gK307DQo+ID4gKw0K PiA+ICt2b2lkICphc3BlZWRfZXNwaV9wZXJpZl9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0 cnVjdCBhc3BlZWRfZXNwaV9jdHJsDQo+ICplc3BpX2N0cmwpDQo+ID4gK3sNCj4gPiArCWludCBy YzsNCj4gPiArCXN0cnVjdCBhc3BlZWRfZXNwaV9wZXJpZiAqZXNwaV9wZXJpZjsNCj4gPiArCXN0 cnVjdCBhc3BlZWRfZXNwaV9wZXJpZl9kbWEgKmRtYTsNCj4gPiArDQo+ID4gKwllc3BpX3Blcmlm ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCplc3BpX3BlcmlmKSwgR0ZQX0tFUk5FTCk7DQo+ ID4gKwlpZiAoIWVzcGlfcGVyaWYpDQo+ID4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7DQo+ ID4gKw0KPiA+ICsJZXNwaV9wZXJpZi0+Y3RybCA9IGVzcGlfY3RybDsNCj4gPiArDQo+ID4gKwlp bml0X3dhaXRxdWV1ZV9oZWFkKCZlc3BpX3BlcmlmLT53cSk7DQo+ID4gKw0KPiA+ICsJc3Bpbl9s b2NrX2luaXQoJmVzcGlfcGVyaWYtPmxvY2spOw0KPiA+ICsNCj4gPiArCW11dGV4X2luaXQoJmVz cGlfcGVyaWYtPnBjX3J4X210eCk7DQo+ID4gKwltdXRleF9pbml0KCZlc3BpX3BlcmlmLT5wY190 eF9tdHgpOw0KPiA+ICsJbXV0ZXhfaW5pdCgmZXNwaV9wZXJpZi0+bnBfdHhfbXR4KTsNCj4gPiAr DQo+ID4gKwllc3BpX3BlcmlmLT5tY3ljX2VuYWJsZSA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChk ZXYtPm9mX25vZGUsDQo+ICJwZXJpZixtZW1jeWMtZW5hYmxlIik7DQo+ID4gKwlpZiAoZXNwaV9w ZXJpZi0+bWN5Y19lbmFibGUpIHsNCj4gPiArCQlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKGRl di0+b2Zfbm9kZSwgInBlcmlmLG1lbWN5Yy1zcmMtYWRkciIsDQo+ID4gKwkJCQkJICAmZXNwaV9w ZXJpZi0+bWN5Y19zYWRkcik7DQo+ID4gKwkJaWYgKHJjKSB7DQo+ID4gKwkJCWRldl9lcnIoZGV2 LCAiY2Fubm90IGdldCBIb3N0IHNvdXJjZSBhZGRyZXNzIGZvciBtZW1vcnkNCj4gY3ljbGVcbiIp Ow0KPiA+ICsJCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ ICsJCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIoZGV2LT5vZl9ub2RlLCAicGVyaWYsbWVtY3lj LXNpemUiLA0KPiA+ICsJCQkJCSAgJmVzcGlfcGVyaWYtPm1jeWNfc2l6ZSk7DQo+ID4gKwkJaWYg KHJjKSB7DQo+ID4gKwkJCWRldl9lcnIoZGV2LCAiY2Fubm90IGdldCBzaXplIGZvciBtZW1vcnkg Y3ljbGVcbiIpOw0KPiA+ICsJCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsNCj4gPiArCQl9DQo+ ID4gKw0KPiA+ICsJCWlmIChlc3BpX3BlcmlmLT5tY3ljX3NpemUgPCBQRVJJRl9NRU1DWUNfU0la RV9NSU4pDQo+ID4gKwkJCWVzcGlfcGVyaWYtPm1jeWNfc2l6ZSA9IFBFUklGX01FTUNZQ19TSVpF X01JTjsNCj4gPiArCQllbHNlDQo+ID4gKwkJCWVzcGlfcGVyaWYtPm1jeWNfc2l6ZSA9DQo+IHJv dW5kdXBfcG93X29mX3R3byhlc3BpX3BlcmlmLT5tY3ljX3NpemUpOw0KPiA+ICsNCj4gPiArCQll c3BpX3BlcmlmLT5tY3ljX21hc2sgPSB+KGVzcGlfcGVyaWYtPm1jeWNfc2l6ZSAtIDEpOw0KPiA+ ICsJCWVzcGlfcGVyaWYtPm1jeWNfdmlydCA9IGRtYV9hbGxvY19jb2hlcmVudChkZXYsDQo+IGVz cGlfcGVyaWYtPm1jeWNfc2l6ZSwNCj4gPiArCQkJCQkJCSAgICZlc3BpX3BlcmlmLT5tY3ljX3Rh ZGRyLCBHRlBfS0VSTkVMKTsNCj4gDQo+IEhlcmUgYW5kIGEgZmV3IGxpbmVzIGJlbG93LCBkbWFf YWxsb2NfY29oZXJlbnQoKSBjb3VsZCBiZSByZXBsYWNlZCBieQ0KPiBkbWFtX2FsbG9jX2NvaGVy ZW50KCkgKGl0cyBtYW5hZ2VkIHZlcnNpb24pIHRvIHNpbXBsaWZ5IGVycm9yIGhhbmRsaW5nDQo+ IGFuZCBmcmVlaW5nIG9mIHJlc291cmNlcy4NCj4gDQo+IA0KPiA+ICsJCWlmICghZXNwaV9wZXJp Zi0+bWN5Y192aXJ0KSB7DQo+ID4gKwkJCWRldl9lcnIoZGV2LCAiY2Fubm90IGFsbG9jYXRlIG1l bW9yeSBjeWNsZSByZWdpb25cbiIpOw0KPiA+ICsJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsN Cj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9v bChkZXYtPm9mX25vZGUsICJwZXJpZixkbWEtbW9kZSIpKSB7DQo+ID4gKwkJZG1hID0gJmVzcGlf cGVyaWYtPmRtYTsNCj4gPiArDQo+ID4gKwkJZG1hLT5wY190eF92aXJ0ID0gZG1hX2FsbG9jX2Nv aGVyZW50KGRldiwgUEFHRV9TSVpFLA0KPiA+ICsJCQkJCQkgICAgICZkbWEtPnBjX3R4X2FkZHIs IEdGUF9LRVJORUwpOw0KPiA+ICsJCWlmICghZG1hLT5wY190eF92aXJ0KSB7DQo+ID4gKwkJCWRl dl9lcnIoZGV2LCAiY2Fubm90IGFsbG9jYXRlIHBvc3RlZCBUWCBETUEgYnVmZmVyXG4iKTsNCj4g PiArCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQlk bWEtPnBjX3J4X3ZpcnQgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LCBQQUdFX1NJWkUsDQo+ID4g KwkJCQkJCSAgICAgJmRtYS0+cGNfcnhfYWRkciwgR0ZQX0tFUk5FTCk7DQo+ID4gKwkJaWYgKCFk bWEtPnBjX3J4X3ZpcnQpIHsNCj4gPiArCQkJZGV2X2VycihkZXYsICJjYW5ub3QgYWxsb2NhdGUg cG9zdGVkIFJYIERNQSBidWZmZXJcbiIpOw0KPiA+ICsJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVN KTsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCWRtYS0+bnBfdHhfdmlydCA9IGRtYV9hbGxvY19j b2hlcmVudChkZXYsIFBBR0VfU0laRSwNCj4gPiArCQkJCSZkbWEtPm5wX3R4X2FkZHIsIEdGUF9L RVJORUwpOw0KPiA+ICsJCWlmICghZG1hLT5ucF90eF92aXJ0KSB7DQo+ID4gKwkJCWRldl9lcnIo ZGV2LCAiY2Fubm90IGFsbG9jYXRlIG5vbi1wb3N0ZWQgVFggRE1BIGJ1ZmZlclxuIik7DQo+ID4g KwkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOw0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJZXNw aV9wZXJpZi0+ZG1hX21vZGUgPSAxOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWVzcGlfcGVyaWYt Pm1kZXYucGFyZW50ID0gZGV2Ow0KPiA+ICsJZXNwaV9wZXJpZi0+bWRldi5taW5vciA9IE1JU0Nf RFlOQU1JQ19NSU5PUjsNCj4gPiArCWVzcGlfcGVyaWYtPm1kZXYubmFtZSA9IGRldm1fa2FzcHJp bnRmKGRldiwgR0ZQX0tFUk5FTCwgIiVzIiwNCj4gUEVSSUZfTURFVl9OQU1FKTsNCj4gPiArCWVz cGlfcGVyaWYtPm1kZXYuZm9wcyA9ICZhc3BlZWRfZXNwaV9wZXJpZl9mb3BzOw0KPiA+ICsJcmMg PSBtaXNjX3JlZ2lzdGVyKCZlc3BpX3BlcmlmLT5tZGV2KTsNCj4gPiArCWlmIChyYykgew0KPiA+ ICsJCWRldl9lcnIoZGV2LCAiY2Fubm90IHJlZ2lzdGVyIGRldmljZVxuIik7DQo+ID4gKwkJcmV0 dXJuIEVSUl9QVFIocmMpOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWFzcGVlZF9lc3BpX3Blcmlm X2VuYWJsZShlc3BpX3BlcmlmKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gZXNwaV9wZXJpZjsNCj4g PiArfQ0KPiA+ICsNCj4gPiArdm9pZCBhc3BlZWRfZXNwaV9wZXJpZl9mcmVlKHN0cnVjdCBkZXZp Y2UgKmRldiwgc3RydWN0IGFzcGVlZF9lc3BpX3BlcmlmDQo+ICplc3BpX3BlcmlmKQ0KPiA+ICt7 DQo+ID4gKwlzdHJ1Y3QgYXNwZWVkX2VzcGlfcGVyaWZfZG1hICpkbWEgPSAmZXNwaV9wZXJpZi0+ ZG1hOw0KPiA+ICsNCj4gPiArCWlmIChlc3BpX3BlcmlmLT5tY3ljX3ZpcnQpDQo+ID4gKwkJZG1h X2ZyZWVfY29oZXJlbnQoZGV2LCBlc3BpX3BlcmlmLT5tY3ljX3NpemUsDQo+ID4gKwkJCQkgIGVz cGlfcGVyaWYtPm1jeWNfdmlydCwNCj4gPiArCQkJCSAgZXNwaV9wZXJpZi0+bWN5Y190YWRkcik7 DQo+ID4gKw0KPiA+ICsJaWYgKGVzcGlfcGVyaWYtPmRtYV9tb2RlKSB7DQo+ID4gKwkJZG1hX2Zy ZWVfY29oZXJlbnQoZGV2LCBQQUdFX1NJWkUsIGRtYS0+cGNfdHhfdmlydCwNCj4gPiArCQkJCSAg ZG1hLT5wY190eF9hZGRyKTsNCj4gPiArCQlkbWFfZnJlZV9jb2hlcmVudChkZXYsIFBBR0VfU0la RSwgZG1hLT5wY19yeF92aXJ0LA0KPiA+ICsJCQkJICBkbWEtPnBjX3J4X2FkZHIpOw0KPiA+ICsJ CWRtYV9mcmVlX2NvaGVyZW50KGRldiwgUEFHRV9TSVpFLCBkbWEtPm5wX3R4X3ZpcnQsDQo+ID4g KwkJCQkgIGRtYS0+bnBfdHhfYWRkcik7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJbXV0ZXhfZGVz dHJveSgmZXNwaV9wZXJpZi0+cGNfdHhfbXR4KTsNCj4gPiArCW11dGV4X2Rlc3Ryb3koJmVzcGlf cGVyaWYtPm5wX3R4X210eCk7DQo+ID4gKw0KPiA+ICsJbWlzY19kZXJlZ2lzdGVyKCZlc3BpX3Bl cmlmLT5tZGV2KTsNCj4gPiArfQ0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy9hc3BlZWQv YXNwZWVkLWVzcGktcGVyaWYuaA0KPiBiL2RyaXZlcnMvc29jL2FzcGVlZC9hc3BlZWQtZXNwaS1w ZXJpZi5oDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAu LjFiOTY0ZTQ2ODBmNQ0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL3NvYy9h c3BlZWQvYXNwZWVkLWVzcGktcGVyaWYuaA0KPiA+IEBAIC0wLDAgKzEsNDUgQEANCj4gPiArLyog U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArICovDQo+ID4gKy8qDQo+ID4gKyAqIENv cHlyaWdodCAyMDIxIEFTUEVFRCBUZWNobm9sb2d5IEluYy4NCj4gPiArICovDQo+ID4gKyNpZm5k ZWYgX0FTUEVFRF9FU1BJX1BFUklGX0hfDQo+ID4gKyNkZWZpbmUgX0FTUEVFRF9FU1BJX1BFUklG X0hfDQo+ID4gKw0KPiA+ICtzdHJ1Y3QgYXNwZWVkX2VzcGlfcGVyaWZfZG1hIHsNCj4gPiArCXZv aWQgKnBjX3R4X3ZpcnQ7DQo+ID4gKwlkbWFfYWRkcl90IHBjX3R4X2FkZHI7DQo+ID4gKwl2b2lk ICpwY19yeF92aXJ0Ow0KPiA+ICsJZG1hX2FkZHJfdCBwY19yeF9hZGRyOw0KPiA+ICsJdm9pZCAq bnBfdHhfdmlydDsNCj4gPiArCWRtYV9hZGRyX3QgbnBfdHhfYWRkcjsNCj4gPiArfTsNCj4gPiAr DQo+ID4gK3N0cnVjdCBhc3BlZWRfZXNwaV9wZXJpZiB7DQo+ID4gKwl1aW50MzJfdCBtY3ljX2Vu YWJsZTsNCj4gPiArCXZvaWQgKm1jeWNfdmlydDsNCj4gPiArCXVpbnQzMl90IG1jeWNfc2FkZHI7 DQo+ID4gKwlwaHlzX2FkZHJfdCBtY3ljX3RhZGRyOw0KPiA+ICsJdWludDMyX3QgbWN5Y19zaXpl Ow0KPiA+ICsJdWludDMyX3QgbWN5Y19tYXNrOw0KPiA+ICsNCj4gPiArCXVpbnQzMl90IGRtYV9t b2RlOw0KPiA+ICsJc3RydWN0IGFzcGVlZF9lc3BpX3BlcmlmX2RtYSBkbWE7DQo+ID4gKw0KPiA+ ICsJdWludDMyX3QgcnhfcmVhZHk7DQo+ID4gKwl3YWl0X3F1ZXVlX2hlYWRfdCB3cTsNCj4gPiAr DQo+ID4gKwlzcGlubG9ja190IGxvY2s7DQo+ID4gKwlzdHJ1Y3QgbXV0ZXggcGNfcnhfbXR4Ow0K PiA+ICsJc3RydWN0IG11dGV4IHBjX3R4X210eDsNCj4gPiArCXN0cnVjdCBtdXRleCBucF90eF9t dHg7DQo+ID4gKw0KPiA+ICsJc3RydWN0IG1pc2NkZXZpY2UgbWRldjsNCj4gPiArCXN0cnVjdCBh c3BlZWRfZXNwaV9jdHJsICpjdHJsOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArdm9pZCBhc3BlZWRf ZXNwaV9wZXJpZl9ldmVudCh1aW50MzJfdCBzdHMsIHN0cnVjdCBhc3BlZWRfZXNwaV9wZXJpZg0K PiAqZXNwaV9wZXJpZik7DQo+ID4gK3ZvaWQgYXNwZWVkX2VzcGlfcGVyaWZfZW5hYmxlKHN0cnVj dCBhc3BlZWRfZXNwaV9wZXJpZiAqZXNwaV9wZXJpZik7DQo+ID4gK3ZvaWQgKmFzcGVlZF9lc3Bp X3BlcmlmX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGFzcGVlZF9lc3BpX2N0cmwN Cj4gKmVzcGlfY3RybCk7DQo+ID4gK3ZvaWQgYXNwZWVkX2VzcGlfcGVyaWZfZnJlZShzdHJ1Y3Qg ZGV2aWNlICpkZXYsIHN0cnVjdCBhc3BlZWRfZXNwaV9wZXJpZg0KPiAqZXNwaV9wZXJpZik7DQo+ ID4gKw0KPiA+ICsjZW5kaWYNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MvYXNwZWVkL2Fz cGVlZC1lc3BpLXZ3LmMNCj4gYi9kcml2ZXJzL3NvYy9hc3BlZWQvYXNwZWVkLWVzcGktdncuYw0K PiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi4yYmRmZWRm ZWExMmUNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9zb2MvYXNwZWVkL2Fz cGVlZC1lc3BpLXZ3LmMNCj4gPiBAQCAtMCwwICsxLDE0MiBAQA0KPiA+ICsvLyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMCsNCj4gPiArLyoNCj4gPiArICogQ29weXJpZ2h0IDIwMjEg QVNQRUVEIFRlY2hub2xvZ3kgSW5jLg0KPiA+ICsgKi8NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2Zz Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4NCj4gPiArI2luY2x1ZGUgPGxp bnV4L21pc2NkZXZpY2UuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4NCj4g PiArI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvdWFjY2Vz cy5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPg0KPiA+ICsjaW5jbHVkZSA8bGlu dXgvbWlzY2RldmljZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4NCj4g PiArDQo+ID4gKyNpbmNsdWRlICJhc3BlZWQtZXNwaS1pb2MuaCINCj4gPiArI2luY2x1ZGUgImFz cGVlZC1lc3BpLWN0cmwuaCINCj4gPiArI2luY2x1ZGUgImFzcGVlZC1lc3BpLXZ3LmgiDQo+ID4g Kw0KPiA+ICsjZGVmaW5lIFZXX01ERVZfTkFNRQkiYXNwZWVkLWVzcGktdnciDQo+ID4gKw0KPiA+ ICtzdGF0aWMgbG9uZyBhc3BlZWRfZXNwaV92d19pb2N0bChzdHJ1Y3QgZmlsZSAqZnAsIHVuc2ln bmVkIGludCBjbWQsIHVuc2lnbmVkDQo+IGxvbmcgYXJnKQ0KPiA+ICt7DQo+ID4gKwl1aW50MzJf dCB2YWw7DQo+ID4gKw0KPiA+ICsJc3RydWN0IGFzcGVlZF9lc3BpX3Z3ICplc3BpX3Z3ID0gY29u dGFpbmVyX29mKGZwLT5wcml2YXRlX2RhdGEsDQo+ID4gKwkJCQkJCSAgICAgIHN0cnVjdCBhc3Bl ZWRfZXNwaV92dywNCj4gPiArCQkJCQkJICAgICAgbWRldik7DQo+ID4gKwlzdHJ1Y3QgYXNwZWVk X2VzcGlfY3RybCAqZXNwaV9jdHJsID0gZXNwaV92dy0+Y3RybDsNCj4gPiArDQo+ID4gKwlzd2l0 Y2ggKGNtZCkgew0KPiA+ICsJY2FzZSBBU1BFRURfRVNQSV9WV19HRVRfR1BJT19WQUw6DQo+ID4g KwkJcmVnbWFwX3JlYWQoZXNwaV9jdHJsLT5tYXAsIEVTUElfVldfR1BJT19WQUwsICZ2YWwpOw0K PiA+ICsJCWlmIChwdXRfdXNlcih2YWwsICh1aW50MzJfdCBfX3VzZXIgKilhcmcpKQ0KPiA+ICsJ CQlyZXR1cm4gLUVGQVVMVDsNCj4gPiArCQlicmVhazsNCj4gPiArDQo+ID4gKwljYXNlIEFTUEVF RF9FU1BJX1ZXX1BVVF9HUElPX1ZBTDoNCj4gPiArCQlpZiAoZ2V0X3VzZXIodmFsLCAodWludDMy X3QgX191c2VyICopYXJnKSkNCj4gPiArCQkJcmV0dXJuIC1FRkFVTFQ7DQo+ID4gKwkJcmVnbWFw X3dyaXRlKGVzcGlfY3RybC0+bWFwLCBFU1BJX1ZXX0dQSU9fVkFMLCB2YWwpOw0KPiA+ICsJCWJy ZWFrOw0KPiA+ICsNCj4gPiArCWRlZmF1bHQ6DQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4g Kwl9Ow0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICt2b2lkIGFz cGVlZF9lc3BpX3Z3X2V2ZW50KHVpbnQzMl90IHN0cywgc3RydWN0IGFzcGVlZF9lc3BpX3Z3ICpl c3BpX3Z3KQ0KPiA+ICt7DQo+ID4gKwl1aW50MzJfdCBzeXNldnRfc3RzOw0KPiA+ICsJc3RydWN0 IGFzcGVlZF9lc3BpX2N0cmwgKmVzcGlfY3RybCA9IGVzcGlfdnctPmN0cmw7DQo+ID4gKw0KPiA+ ICsJcmVnbWFwX3JlYWQoZXNwaV9jdHJsLT5tYXAsIEVTUElfSU5UX1NUUywgJnN0cyk7DQo+ID4g Kw0KPiA+ICsJaWYgKHN0cyAmIEVTUElfSU5UX1NUU19WV19TWVNFVlQpIHsNCj4gPiArCQlyZWdt YXBfcmVhZChlc3BpX2N0cmwtPm1hcCwgRVNQSV9TWVNFVlRfSU5UX1NUUywgJnN5c2V2dF9zdHMp Ow0KPiA+ICsNCj4gPiArCQlpZiAoZXNwaV9jdHJsLT5tb2RlbC0+dmVyc2lvbiA9PSBFU1BJX0FT VDI1MDApIHsNCj4gPiArCQkJaWYgKHN5c2V2dF9zdHMgJiBFU1BJX1NZU0VWVF9JTlRfU1RTX0hP U1RfUlNUX1dBUk4pDQo+ID4gKwkJCQlyZWdtYXBfdXBkYXRlX2JpdHMoZXNwaV9jdHJsLT5tYXAs IEVTUElfU1lTRVZULA0KPiA+ICsJCQkJCQkgICBFU1BJX1NZU0VWVF9IT1NUX1JTVF9BQ0ssDQo+ ID4gKwkJCQkJCSAgIEVTUElfU1lTRVZUX0hPU1RfUlNUX0FDSyk7DQo+ID4gKw0KPiA+ICsJCQlp ZiAoc3lzZXZ0X3N0cyAmIEVTUElfU1lTRVZUX0lOVF9TVFNfT09CX1JTVF9XQVJOKQ0KPiA+ICsJ CQkJcmVnbWFwX3VwZGF0ZV9iaXRzKGVzcGlfY3RybC0+bWFwLCBFU1BJX1NZU0VWVCwNCj4gPiAr CQkJCQkJICAgRVNQSV9TWVNFVlRfT09CX1JTVF9BQ0ssDQo+ID4gKwkJCQkJCSAgIEVTUElfU1lT RVZUX09PQl9SU1RfQUNLKTsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCXJlZ21hcF93cml0ZShl c3BpX2N0cmwtPm1hcCwgRVNQSV9TWVNFVlRfSU5UX1NUUywgc3lzZXZ0X3N0cyk7DQo+ID4gKwl9 DQo+ID4gKw0KPiA+ICsJaWYgKHN0cyAmIEVTUElfSU5UX1NUU19WV19TWVNFVlQxKSB7DQo+ID4g KwkJcmVnbWFwX3JlYWQoZXNwaV9jdHJsLT5tYXAsIEVTUElfU1lTRVZUMV9JTlRfU1RTLCAmc3lz ZXZ0X3N0cyk7DQo+ID4gKw0KPiA+ICsJCWlmIChzeXNldnRfc3RzICYgRVNQSV9TWVNFVlQxX0lO VF9TVFNfU1VTUEVORF9XQVJOKQ0KPiA+ICsJCQlyZWdtYXBfdXBkYXRlX2JpdHMoZXNwaV9jdHJs LT5tYXAsIEVTUElfU1lTRVZUMSwNCj4gPiArCQkJCQkgICBFU1BJX1NZU0VWVDFfU1VTUEVORF9B Q0ssDQo+ID4gKwkJCQkJICAgRVNQSV9TWVNFVlQxX1NVU1BFTkRfQUNLKTsNCj4gPiArDQo+ID4g KwkJcmVnbWFwX3dyaXRlKGVzcGlfY3RybC0+bWFwLCBFU1BJX1NZU0VWVDFfSU5UX1NUUywgc3lz ZXZ0X3N0cyk7DQo+ID4gKwl9DQo+ID4gK30NCj4gPiArDQo+ID4gK3ZvaWQgYXNwZWVkX2VzcGlf dndfZW5hYmxlKHN0cnVjdCBhc3BlZWRfZXNwaV92dyAqZXNwaV92dykNCj4gPiArew0KPiA+ICsJ c3RydWN0IGFzcGVlZF9lc3BpX2N0cmwgKmVzcGlfY3RybCA9IGVzcGlfdnctPmN0cmw7DQo+ID4g Kw0KPiA+ICsJcmVnbWFwX3dyaXRlKGVzcGlfY3RybC0+bWFwLCBFU1BJX0lOVF9TVFMsDQo+ID4g KwkJICAgICBFU1BJX0lOVF9TVFNfVldfQklUUyk7DQo+ID4gKw0KPiA+ICsJcmVnbWFwX3VwZGF0 ZV9iaXRzKGVzcGlfY3RybC0+bWFwLCBFU1BJX0lOVF9FTiwNCj4gPiArCQkJICAgRVNQSV9JTlRf RU5fVldfQklUUywNCj4gPiArCQkJICAgRVNQSV9JTlRfRU5fVldfQklUUyk7DQo+ID4gKw0KPiA+ ICsJLyoNCj4gPiArCSAqIEVuZm9yY2UgVlcgR1BJTyB0byBTVyBtb2RlIGR1ZSB0byBzZWN1cml0 eSBjb25jZXJuLg0KPiA+ICsJICogVGhlIEhXIG1vZGUgYWxsb3dzIHRoZSBIb3N0IHRvIG1hbmlw dWxhdGUgQk1DIEdQSU9zDQo+ID4gKwkgKiB3aXRob3V0IG5vdGlmaWZpY2F0aW9ucy4NCj4gPiAr CSAqLw0KPiA+ICsJcmVnbWFwX3VwZGF0ZV9iaXRzKGVzcGlfY3RybC0+bWFwLCBFU1BJX0NUUkws DQo+ID4gKwkJCSAgIEVTUElfQ1RSTF9WV19HUElPX1NXX01PREUgfA0KPiBFU1BJX0NUUkxfVldf U1dfUkRZLA0KPiA+ICsJCQkgICBFU1BJX0NUUkxfVldfR1BJT19TV19NT0RFIHwNCj4gRVNQSV9D VFJMX1ZXX1NXX1JEWSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZmlsZV9vcGVyYXRpb25zIGFzcGVlZF9lc3BpX3Z3X2ZvcHMgPSB7DQo+ID4gKwkub3duZXIgPSBU SElTX01PRFVMRSwNCj4gPiArCS51bmxvY2tlZF9pb2N0bCA9IGFzcGVlZF9lc3BpX3Z3X2lvY3Rs LA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArdm9pZCAqYXNwZWVkX2VzcGlfdndfYWxsb2Moc3RydWN0 IGRldmljZSAqZGV2LCBzdHJ1Y3QgYXNwZWVkX2VzcGlfY3RybA0KPiAqZXNwaV9jdHJsKQ0KPiA+ ICt7DQo+ID4gKwlpbnQgcmM7DQo+ID4gKwlzdHJ1Y3QgYXNwZWVkX2VzcGlfdncgKmVzcGlfdnc7 DQo+ID4gKw0KPiA+ICsJZXNwaV92dyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZXNwaV92 dyksIEdGUF9LRVJORUwpOw0KPiA+ICsJaWYgKCFlc3BpX3Z3KQ0KPiA+ICsJCXJldHVybiBFUlJf UFRSKC1FTk9NRU0pOw0KPiA+ICsNCj4gPiArCWVzcGlfdnctPmN0cmwgPSBlc3BpX2N0cmw7DQo+ ID4gKw0KPiA+ICsJZXNwaV92dy0+bWRldi5wYXJlbnQgPSBkZXY7DQo+ID4gKwllc3BpX3Z3LT5t ZGV2Lm1pbm9yID0gTUlTQ19EWU5BTUlDX01JTk9SOw0KPiA+ICsJZXNwaV92dy0+bWRldi5uYW1l ID0gZGV2bV9rYXNwcmludGYoZGV2LCBHRlBfS0VSTkVMLCAiJXMiLA0KPiBWV19NREVWX05BTUUp Ow0KPiA+ICsJZXNwaV92dy0+bWRldi5mb3BzID0gJmFzcGVlZF9lc3BpX3Z3X2ZvcHM7DQo+ID4g KwlyYyA9IG1pc2NfcmVnaXN0ZXIoJmVzcGlfdnctPm1kZXYpOw0KPiA+ICsJaWYgKHJjKSB7DQo+ ID4gKwkJZGV2X2VycihkZXYsICJjYW5ub3QgcmVnaXN0ZXIgZGV2aWNlXG4iKTsNCj4gPiArCQly ZXR1cm4gRVJSX1BUUihyYyk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJYXNwZWVkX2VzcGlfdndf ZW5hYmxlKGVzcGlfdncpOw0KPiA+ICsNCj4gPiArCXJldHVybiBlc3BpX3Z3Ow0KPiA+ICt9DQo+ ID4gKw0KPiA+ICt2b2lkIGFzcGVlZF9lc3BpX3Z3X2ZyZWUoc3RydWN0IGRldmljZSAqZGV2LCBz dHJ1Y3QgYXNwZWVkX2VzcGlfdncNCj4gKmVzcGlfdncpDQo+ID4gK3sNCj4gPiArCW1pc2NfZGVy ZWdpc3RlcigmZXNwaV92dy0+bWRldik7DQo+ID4gK30NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9zb2MvYXNwZWVkL2FzcGVlZC1lc3BpLXZ3LmgNCj4gYi9kcml2ZXJzL3NvYy9hc3BlZWQvYXNw ZWVkLWVzcGktdncuaA0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAw MDAwMDAwLi5hYmE5YzQxNGFjMWINCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVy cy9zb2MvYXNwZWVkL2FzcGVlZC1lc3BpLXZ3LmgNCj4gPiBAQCAtMCwwICsxLDIxIEBADQo+ID4g Ky8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKyAqLw0KPiA+ICsvKg0KPiA+ICsg KiBDb3B5cmlnaHQgMjAyMSBBU1BFRUQgVGVjaG5vbG9neSBJbmMuDQo+ID4gKyAqLw0KPiA+ICsj aWZuZGVmIF9BU1BFRURfRVNQSV9WV19IXw0KPiA+ICsjZGVmaW5lIF9BU1BFRURfRVNQSV9WV19I Xw0KPiA+ICsNCj4gPiArc3RydWN0IGFzcGVlZF9lc3BpX3Z3IHsNCj4gPiArCWludCBpcnE7DQo+ ID4gKwlpbnQgaXJxX3Jlc2V0Ow0KPiA+ICsNCj4gPiArCXN0cnVjdCBtaXNjZGV2aWNlIG1kZXY7 DQo+ID4gKwlzdHJ1Y3QgYXNwZWVkX2VzcGlfY3RybCAqY3RybDsNCj4gPiArfTsNCj4gPiArDQo+ ID4gK3ZvaWQgYXNwZWVkX2VzcGlfdndfZXZlbnQodWludDMyX3Qgc3RzLCBzdHJ1Y3QgYXNwZWVk X2VzcGlfdncgKmVzcGlfdncpOw0KPiA+ICt2b2lkIGFzcGVlZF9lc3BpX3Z3X2VuYWJsZShzdHJ1 Y3QgYXNwZWVkX2VzcGlfdncgKmVzcGlfdncpOw0KPiA+ICt2b2lkICphc3BlZWRfZXNwaV92d19h bGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBhc3BlZWRfZXNwaV9jdHJsDQo+ICplc3Bp X2N0cmwpOw0KPiA+ICt2b2lkIGFzcGVlZF9lc3BpX3Z3X2ZyZWUoc3RydWN0IGRldmljZSAqZGV2 LCBzdHJ1Y3QgYXNwZWVkX2VzcGlfdncNCj4gKmVzcGlfdncpOw0KPiA+ICsNCj4gPiArI2VuZGlm DQoNCg==