From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7842DC4332F for ; Thu, 23 Sep 2021 10:32:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4E572610A0 for ; Thu, 23 Sep 2021 10:32:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240409AbhIWKeI (ORCPT ); Thu, 23 Sep 2021 06:34:08 -0400 Received: from mail-eopbgr40086.outbound.protection.outlook.com ([40.107.4.86]:18816 "EHLO EUR03-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S240354AbhIWKeF (ORCPT ); Thu, 23 Sep 2021 06:34:05 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=mpkbYMClnnn4W3znZnRePgDwWvwntgbp6/2AGn8sEhxFe4IjZjUfF4P2xkDs1XQXihNdGraWGc74pxqkrObJHsPYv09XRFCrPT393U95CTKrVTRicw2WWGI2GPhuB0rJR2R6EOVsFCgBTu56V0E8MOf8H7neW3KGyMhFCljUCJTH6SQeNWloEk5ZuqqHqjvp2KfRlp7slqpE/nIza+ar+KtouYHo+KjQYYHwgTvozuni+e5Tr4l1DspqvOvWnHh3Chlcsbvp+9nK07l239KLGz98RUoGZYVnaiu8RWnDwInUMfKFyuZSVz4n3HfDxKVPWg0RMMZV74HQ9dWh+RQrXg== 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; bh=nvVyLcV4PXaobkcLnGT99TiZuodQMS0Efo4eE2BaaaE=; b=HdFfkl3Pmot3/ndAPIVdgc3Ndqkd4qhQbpy9dSvcpqgZSpWPPQZZdL90YviagI9Q0k/BtINA1I7WdD4pPucIyODpX4ZrRf7z6oYTN064AX68ZolnQsqDrNQVIqZpsNyDk5O/FBPjZB8GOQ+RAGTGsk+QA01XUTmiPlnhU8gk6dUpBP2D2IfuL4OnLdafEV3bC3oUicPljF+5SnDlR3mV3iN3IsGWpmQSwm/ZWesvp051ayYWvdtKmarEUHlNPF2+qnmzcR83xnxPdtjumZcUwPXFdVZGrld72AmslhQ54pXHawYajlMWniOKf8weyvA6jCyCOUMBDHKY3LiNMB/WdQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=nvVyLcV4PXaobkcLnGT99TiZuodQMS0Efo4eE2BaaaE=; b=AFy0L142XLdkctQ3G0wAkwnjl0knLqY/cYfWYkx+834l/wzfgRT8lt+MXaQM7x4gRtji+prGkRSEpt1iJOsvair07YFjKegGPAxzIcELYt7rNrQoTfepojhg8NulcseaXGok+wscsexSkSQzAxYQkgGmDRxNJ8FMn30VM/rICmU= Received: from AM6PR04MB6341.eurprd04.prod.outlook.com (2603:10a6:20b:d8::14) by AS8PR04MB7768.eurprd04.prod.outlook.com (2603:10a6:20b:2a4::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4544.14; Thu, 23 Sep 2021 10:32:30 +0000 Received: from AM6PR04MB6341.eurprd04.prod.outlook.com ([fe80::998c:7f25:6d75:d5f4]) by AM6PR04MB6341.eurprd04.prod.outlook.com ([fe80::998c:7f25:6d75:d5f4%7]) with mapi id 15.20.4523.021; Thu, 23 Sep 2021 10:32:30 +0000 From: Ming Qian To: Nicolas Dufresne , "mchehab@kernel.org" , "shawnguo@kernel.org" , "robh+dt@kernel.org" , "s.hauer@pengutronix.de" CC: "hverkuil-cisco@xs4all.nl" , "kernel@pengutronix.de" , "festevam@gmail.com" , dl-linux-imx , Aisheng Dong , "linux-media@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "devicetree@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" Subject: RE: [EXT] Re: [PATCH v9 04/13] media: amphion: add vpu core driver Thread-Topic: [EXT] Re: [PATCH v9 04/13] media: amphion: add vpu core driver Thread-Index: AQHXqHsNkdGwBy7DL0qWKc3F+U3xwauwFWYAgAFl+QA= Date: Thu, 23 Sep 2021 10:32:29 +0000 Message-ID: References: <51ba61663ce92a9fe71343578689a0e196d0dfea.1631521295.git.ming.qian@nxp.com> <2b543d1c86c2ba3ac507f196ee326908138c1186.camel@ndufresne.ca> In-Reply-To: <2b543d1c86c2ba3ac507f196ee326908138c1186.camel@ndufresne.ca> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: ndufresne.ca; dkim=none (message not signed) header.d=none;ndufresne.ca; dmarc=none action=none header.from=nxp.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 4f3bce0b-1a35-4bc9-61b2-08d97e7d722e x-ms-traffictypediagnostic: AS8PR04MB7768: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:415; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: yGBZJc0FOENpzq5kyUNRWuevQVnTgfCEHJWzwYMaG1PyeD8LXDsosbiXgqoSu12rEcVyNn+VcEYp/h/QDxfIAXZPSbTgD07IHkA7z+FsMPKjCka5nK/VCMDiAHDUdoDEMOBjXXQ+gNlk7Wdg3xGabgGO3cTXbe0J/e2vNk3P9bVPZw6nt9sMFt53MEcegJDLXBpH33Szh96nIn2CMVXJolMnmqJhFT8ofe8WXiyte/qjqhQPTWO2DSYrtk7PlcxDfSPl7LnaFmUxtwWn01yklgehRHFgQs2f08TCz3PiXWpIBO8iq64i7r3ERYQ1qKBzjTBMvYl4+r9qVaLt2RfsxeWi+C9Za+FR45IRhn2psCuQhbvt0H/A3JE/sL+23+NcCCvv+P32N3Wu7dxgUz0PyFeCHhdHjOHVXZ/KNbWwFfzvKQ2Mr2HigWhq+MeSDQqpTmP+L1cdPssifHWBk/2oMYsMiPR4zP3tP2g+mNG3/WSOOxsQ/W7fHjT8QQU8jvJK9L+OeNvG0VdNrrmeBMXK1cuCMBrc7AFkv/LRkFeppjSNj9f0RZWmypvYl1gv9d6Vb2T189jMmso3AThIRWCCgW2JUl8vuVEKpXMEp2LaYXDqVoXQfDpidmOIVlnWjmLt+lJXz7YL/3Hij5Zh8lEljfTpFhSQXHZ8MQwXMqgtRUiWmI/gYtVNb/iXRLcLUNzj8za4QPe+cMlrxVMaF8TOww== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM6PR04MB6341.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(2906002)(8936002)(9686003)(5660300002)(6506007)(53546011)(508600001)(38100700002)(71200400001)(30864003)(66476007)(316002)(66574015)(44832011)(186003)(7696005)(33656002)(55016002)(122000001)(66946007)(38070700005)(83380400001)(54906003)(8676002)(86362001)(76116006)(64756008)(7416002)(66446008)(26005)(66556008)(52536014)(4326008)(110136005)(579004)(559001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?MDJKUURYRW82MzZPdkJRYWNnQktHcDBlM28wTVpFcTVWaE9PS21seS9xaDFq?= =?utf-8?B?NklLVmQwWkFvTXp5ZTZoVGZYQWFZODZFQXZRZUJkL24vMGZxUE1CT1pDNG1y?= =?utf-8?B?UThmeERXYStWbWNzTy92UzhjSGZUWkZlZ0ZtVVAweU95VXYrZmdzZWZHMTRj?= =?utf-8?B?dDArWDFkYVZsZy84SFI3STVvUVF4QmhxY2tpblRBc1ZWYy9jVjVXT3F3ZHlB?= =?utf-8?B?bmNrQ0ZZMGh2WTlybWNldC84cHBueGx3REZJelE2dlNVaTE5eFZYY2ErZTFs?= =?utf-8?B?RGpTaC9vM1ZsV3QrYTRWaHh1Ui90cENzQXZaWmgxU2JkRmppYUx0cDZQY1hE?= =?utf-8?B?bTA4NGhPeGhtR0dhdStZbG1YbURydDl3MmFXZmxEazUxYU9xTXJzVjhLSjFE?= =?utf-8?B?NDRldmxqeTV4WFpqMEVwYjErMktaZEVJalN1cUVzWFp3b0UrNnJKY1RxSTYz?= =?utf-8?B?ajJVNzZwUWZ3emE1dG1sS00yUXp5Vm9OUVJrRnNzL3ZKYTdTci9JcURzdXNr?= =?utf-8?B?cTZUc2cwT3BoYWpCUDB2aGtkNUhzd1VHQlp2eG9kTmJpTnppREtUcTZ5MEtB?= =?utf-8?B?WlNoT2crTk5GYjBja1NzUExQcFJDdTJKb3BHeTYzVlZHNzIzaVIxdnZBZkI4?= =?utf-8?B?NDdzYVR6QlEzOXNQemFzT2NuMFBmcGZhS2NpWnNMWS8zcWJ4RTdCSUVabnFR?= =?utf-8?B?RnNZeXFsVjJ6QklSU2dIQUt5VU9YWXlrc0tzZCtibWNJNkVpUWQyN2ZvNmRS?= =?utf-8?B?eXJ5c2xLUjhXeVlXcUwxclZiSkRpODh6bDBoZGtVRHNzM0hmYndPUlVHRmR3?= =?utf-8?B?MVJ6Q1JjK3VEYVNRMVlTVWdDMUhTUWRwU050YVF1ZFAvYnZzVUtZanVLcnNF?= =?utf-8?B?Tk9QaVN5Q1NnZnJJR1JrdlVzWHRhdHFMZ2d6bUFmSDQ3cDE0SGFBdGZZYWYw?= =?utf-8?B?WmdqbkdNWHJaUGZjQ3gzL25vRElnbk43Qy9zeG4xd2l4R0p0amZHUlpib3dt?= =?utf-8?B?cldpN252Mm5rNmpqcjhNdlFod1htbkFLckQxZGxXWnoxczZNM1F5SFh4ZS8y?= =?utf-8?B?QjdtcDAveXUzODhIUWtRYVdVVzlmWXRqMXNNN1MxWTdFVW95ZXFZTGtuYXBY?= =?utf-8?B?RVRPVmZYN1JDOVMzRGtzVUV1QzhtKytqbm5PZDNraGEvU0thSXNDeEt6KzJ6?= =?utf-8?B?N2R1V2FndzdmaE1TSkNWeU9PcVBRRlhGWFBxeDUxOWxsSEQwS2hWT1U4SDh5?= =?utf-8?B?WlNwWUR0M014MmQ2NkYzaUtFTEU4YzhDTVVJclloUUxLR1BRREM0Q28rcEs3?= =?utf-8?B?RytyZzVqNkhNSGc0b0QzSzVUdTdWNzRzR040aE1wZHpzRk9YUXhST1FBOGN1?= =?utf-8?B?ZGJiL0Y0QnpPY25mdUJySXJRNGtWTjlTU2RKRGJuZUZjYVgrcTd2V3RBZGdL?= =?utf-8?B?QnBlazJIMWw4c3c0ais5Y20zaHFlcUxrREFRb016WE9VRW90UXdvL0dpR3Zk?= =?utf-8?B?VzA1ZHVMdmZHemU1QVZ5dXlxVjZHM1VtU29XU1BEV0NoSlNnc05sa2Evb0E3?= =?utf-8?B?MkdteHVycjNKVzZUWnJWK1ZDT1diL0hpall0MjJmQSt2TXFlN3dIRTk5bGNL?= =?utf-8?B?K2JLM3VFVDRFZEpxSEV6VS9MK1RXbzRSWjdrS2UwejEzamlnWU5BVnlKRTcw?= =?utf-8?B?blc2M3E4b25iZHFoUGdUdTJodmZJYjBIdlFvS0ttQzVyT215VCt3Z0xvN2tq?= =?utf-8?Q?qIyyjPjWTCunCvx5K/8R4o0scVrFdPnx4aTDZ1B?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AM6PR04MB6341.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4f3bce0b-1a35-4bc9-61b2-08d97e7d722e X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Sep 2021 10:32:29.9980 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 7BQNjoksFs0DuNhMWJ+rVvCxIayIF7SYFWP88QOBGJ28mWfzJAQQHhHM7Np4D1qmocMYUD37ySjka7npl9UutQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR04MB7768 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBOaWNvbGFzIER1ZnJlc25lIFtt YWlsdG86bmljb2xhc0BuZHVmcmVzbmUuY2FdDQo+IFNlbnQ6IFdlZG5lc2RheSwgU2VwdGVtYmVy IDIyLCAyMDIxIDk6MTAgUE0NCj4gVG86IE1pbmcgUWlhbiA8bWluZy5xaWFuQG54cC5jb20+OyBt Y2hlaGFiQGtlcm5lbC5vcmc7DQo+IHNoYXduZ3VvQGtlcm5lbC5vcmc7IHJvYmgrZHRAa2VybmVs Lm9yZzsgcy5oYXVlckBwZW5ndXRyb25peC5kZQ0KPiBDYzogaHZlcmt1aWwtY2lzY29AeHM0YWxs Lm5sOyBrZXJuZWxAcGVuZ3V0cm9uaXguZGU7IGZlc3RldmFtQGdtYWlsLmNvbTsNCj4gZGwtbGlu dXgtaW14IDxsaW51eC1pbXhAbnhwLmNvbT47IEFpc2hlbmcgRG9uZyA8YWlzaGVuZy5kb25nQG54 cC5jb20+Ow0KPiBsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LWtlcm5lbEB2Z2Vy Lmtlcm5lbC5vcmc7DQo+IGRldmljZXRyZWVAdmdlci5rZXJuZWwub3JnOyBsaW51eC1hcm0ta2Vy bmVsQGxpc3RzLmluZnJhZGVhZC5vcmcNCj4gU3ViamVjdDogW0VYVF0gUmU6IFtQQVRDSCB2OSAw NC8xM10gbWVkaWE6IGFtcGhpb246IGFkZCB2cHUgY29yZSBkcml2ZXINCj4gDQo+IENhdXRpb246 IEVYVCBFbWFpbA0KPiANCj4gSGkgTWluZywNCj4gDQo+IHNlZW0gY29tbWVudCBiZWxvdy4NCj4g DQo+IGdMZSBsdW5kaSAxMyBzZXB0ZW1icmUgMjAyMSDDoCAxNzoxMSArMDgwMCwgTWluZyBRaWFu IGEgw6ljcml0IDoNCj4gPiBUaGUgdnB1IHN1cHBvcnRzIGVuY29kZXIgYW5kIGRlY29kZXIuDQo+ ID4gaXQgbmVlZHMgbXUgY29yZSB0byBoYW5kbGUgaXQuDQo+ID4gY29yZSB3aWxsIHJ1biBlaXRo ZXIgZW5jb2RlciBvciBkZWNvZGVyIGZpcm13YXJlLg0KPiA+DQo+ID4gVGhpcyBkcml2ZXIgaXMg Zm9yIHN1cHBvcnQgdGhlIHZwdSBjb3JlLg0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogTWluZyBR aWFuIDxtaW5nLnFpYW5AbnhwLmNvbT4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBTaGlqaWUgUWluIDxz aGlqaWUucWluQG54cC5jb20+DQo+ID4gU2lnbmVkLW9mZi1ieTogWmhvdSBQZW5nIDxlYWdsZS56 aG91QG54cC5jb20+DQo+ID4gLS0tDQo+ID4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlv bi92cHVfY29kZWMuaCB8ICA2OCArKw0KPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhp b24vdnB1X2NvcmUuYyAgfCA5MDENCj4gKysrKysrKysrKysrKysrKysrKysrDQo+ID4gIGRyaXZl cnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVfY29yZS5oICB8ICAxNiArDQo+ID4gIGRyaXZl cnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVfZGJnLmMgICB8IDQ5NiArKysrKysrKysrKysN Cj4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV9sb2cuaCAgIHwgIDQ0ICsN Cj4gDQo+IFdoZW4gbG9hZGluZyB0aGlzIGRyaXZlciwgSSBpbW1lZGlhdGVseSBzdHVtYmxlZCBh Y3Jvc3Mgbm9uLXN0YW5kYXJkIGxvZ2dpbmcuDQo+IA0KPiAgICBbICAgMjkuNjE3OTk0XSBbVlBV IENPUkVdY29yZSB2cHVfY29yZSBwcm9iZQ0KPiAgICBbICAgMjkuNjY2NDQ3XSBbVlBVIENPUkVd WzBdIGRlY29kZXIgYm9vdC1yZWdpb24gOg0KPiA8MHgwMDAwMDAwMDg0MDAwMDAwLA0KPiAgICAw eDIwMDAwMDA+DQo+ICAgIFsgICAyOS43MzgxNTJdIFtWUFUgSU1YOFFdaW14OHEgZnVzZSA9IDB4 MA0KPiAgICBbICAgMjkuNzk5NDIxXSBbVlBVIENPUkVdY29yZSB2cHVfY29yZSBwcm9iZTwNCj4g ICAgWyAgIDMwLjExMTgwNV0gW1ZQVSBDT1JFXVswXSBkZWNvZGVyIGJvb3QNCj4gDQo+IEkgcmVt ZW1iZXIgYSB0aHJlYWQgcmVsYXRlZCB0byBWZW51cyBkcml2ZXIsIGFuZCBpdCBzZWVtcyB0aGF0 IGl0cyBiZXN0IHRvDQo+IHJlbW92ZSB0aGlzIGN1c3RvbSBsb2dnaW5nIGluZnJhc3RydWN0dXJl IGFuZCB1c2UgdGhlIGV4aXN0aW5nIGluZnJhc3RydWN0dXJlLg0KDQpPSywgSSdsbCBtYWtlIGEg Y2hhbmdlIHRvIGltcHJvdmUgdGhlIGxvZw0KDQo+IA0KPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRm b3JtL2FtcGhpb24vdnB1X3JwYy5jICAgfCAyNjMgKysrKysrDQo+ID4gIGRyaXZlcnMvbWVkaWEv cGxhdGZvcm0vYW1waGlvbi92cHVfcnBjLmggICB8IDQ2MyArKysrKysrKysrKw0KPiA+ICA3IGZp bGVzIGNoYW5nZWQsIDIyNTEgaW5zZXJ0aW9ucygrKQ0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV9jb2RlYy5oDQo+ID4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X2NvcmUuYw0KPiA+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV9j b3JlLmgNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1w aGlvbi92cHVfZGJnLmMNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxh dGZvcm0vYW1waGlvbi92cHVfbG9nLmgNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv bWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVfcnBjLmMNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVfcnBjLmgNCj4gPg0KPiA+IGRpZmYg LS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X2NvZGVjLmgNCj4gYi9k cml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X2NvZGVjLmgNCj4gPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uNGRjNDFkNjgwOGIxDQo+ID4gLS0t IC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVf Y29kZWMuaA0KPiA+IEBAIC0wLDAgKzEsNjggQEANCj4gPiArLyogU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAgKi8NCj4gPiArLyoNCj4gPiArICogQ29weXJpZ2h0IDIwMjAtMjAyMSBO WFANCj4gPiArICovDQo+ID4gKw0KPiA+ICsjaWZuZGVmIF9BTVBISU9OX1ZQVV9DT0RFQ19IDQo+ ID4gKyNkZWZpbmUgX0FNUEhJT05fVlBVX0NPREVDX0gNCj4gPiArDQo+ID4gK3N0cnVjdCB2cHVf ZW5jb2RlX3BhcmFtcyB7DQo+ID4gKyAgICAgdTMyIGlucHV0X2Zvcm1hdDsNCj4gPiArICAgICB1 MzIgY29kZWNfZm9ybWF0Ow0KPiA+ICsgICAgIHUzMiBwcm9maWxlOw0KPiA+ICsgICAgIHUzMiB0 aWVyOw0KPiA+ICsgICAgIHUzMiBsZXZlbDsNCj4gPiArICAgICB1MzIgZnJhbWVfcmF0ZV9udW07 DQo+ID4gKyAgICAgdTMyIGZyYW1lX3JhdGVfZGVuOw0KPiA+ICsgICAgIHUzMiBzcmNfc3RyaWRl Ow0KPiA+ICsgICAgIHUzMiBzcmNfd2lkdGg7DQo+ID4gKyAgICAgdTMyIHNyY19oZWlnaHQ7DQo+ ID4gKyAgICAgc3RydWN0IHY0bDJfcmVjdCBjcm9wOw0KPiA+ICsgICAgIHUzMiBvdXRfd2lkdGg7 DQo+ID4gKyAgICAgdTMyIG91dF9oZWlnaHQ7DQo+ID4gKw0KPiA+ICsgICAgIHUzMiBnb3BfbGVu Z3RoOw0KPiA+ICsgICAgIHUzMiBiZnJhbWVzOw0KPiA+ICsNCj4gPiArICAgICB1MzIgcmNfbW9k ZTsNCj4gPiArICAgICB1MzIgYml0cmF0ZTsNCj4gPiArICAgICB1MzIgYml0cmF0ZV9taW47DQo+ ID4gKyAgICAgdTMyIGJpdHJhdGVfbWF4Ow0KPiA+ICsNCj4gPiArICAgICB1MzIgaV9mcmFtZV9x cDsNCj4gPiArICAgICB1MzIgcF9mcmFtZV9xcDsNCj4gPiArICAgICB1MzIgYl9mcmFtZV9xcDsN Cj4gPiArICAgICB1MzIgcXBfbWluOw0KPiA+ICsgICAgIHUzMiBxcF9tYXg7DQo+ID4gKyAgICAg dTMyIHFwX21pbl9pOw0KPiA+ICsgICAgIHUzMiBxcF9tYXhfaTsNCj4gPiArDQo+ID4gKyAgICAg c3RydWN0IHsNCj4gPiArICAgICAgICAgICAgIHUzMiBlbmFibGU7DQo+ID4gKyAgICAgICAgICAg ICB1MzIgaWRjOw0KPiA+ICsgICAgICAgICAgICAgdTMyIHdpZHRoOw0KPiA+ICsgICAgICAgICAg ICAgdTMyIGhlaWdodDsNCj4gPiArICAgICB9IHNhcjsNCj4gPiArDQo+ID4gKyAgICAgc3RydWN0 IHsNCj4gPiArICAgICAgICAgICAgIHUzMiBwcmltYXJpZXM7DQo+ID4gKyAgICAgICAgICAgICB1 MzIgdHJhbnNmZXI7DQo+ID4gKyAgICAgICAgICAgICB1MzIgbWF0cml4Ow0KPiA+ICsgICAgICAg ICAgICAgdTMyIGZ1bGxfcmFuZ2U7DQo+ID4gKyAgICAgfSBjb2xvcjsNCj4gPiArfTsNCj4gPiAr DQo+ID4gK3N0cnVjdCB2cHVfZGVjb2RlX3BhcmFtcyB7DQo+ID4gKyAgICAgdTMyIGNvZGVjX2Zv cm1hdDsNCj4gPiArICAgICB1MzIgb3V0cHV0X2Zvcm1hdDsNCj4gPiArICAgICB1MzIgYl9kaXNf cmVvcmRlcjsNCj4gPiArICAgICB1MzIgYl9ub25fZnJhbWU7DQo+ID4gKyAgICAgdTMyIGZyYW1l X2NvdW50Ow0KPiA+ICsgICAgIHUzMiBlbmRfZmxhZzsNCj4gPiArICAgICBzdHJ1Y3Qgew0KPiA+ ICsgICAgICAgICAgICAgdTMyIGJhc2U7DQo+ID4gKyAgICAgICAgICAgICB1MzIgc2l6ZTsNCj4g PiArICAgICB9IHVkYXRhOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArI2VuZGlmDQo+ID4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVfY29yZS5jDQo+IGIvZHJp dmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV9jb3JlLmMNCj4gPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uMzMyYWQzNzEwYWJlDQo+ID4gLS0tIC9k ZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVfY29y ZS5jDQo+ID4gQEAgLTAsMCArMSw5MDEgQEANCj4gPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjANCj4gPiArLyoNCj4gPiArICogQ29weXJpZ2h0IDIwMjAtMjAyMSBOWFANCj4g PiArICovDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFRBRyAgICAgICAgICAiQ09SRSINCj4gPiArDQo+ ID4gKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pbnRlcmNv bm5lY3QuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+DQo+ID4gKyNpbmNsdWRlIDxs aW51eC9saXN0Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCj4gPiArI2luY2x1 ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+DQo+ ID4gKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9w bGF0Zm9ybV9kZXZpY2UuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4NCj4gPiArI2lu Y2x1ZGUgPGxpbnV4L3R5cGVzLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+ DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9wbV9kb21haW4uaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4 L2Zpcm13YXJlLmg+DQo+ID4gKyNpbmNsdWRlICJ2cHUuaCINCj4gPiArI2luY2x1ZGUgInZwdV9k ZWZzLmgiDQo+ID4gKyNpbmNsdWRlICJ2cHVfY29yZS5oIg0KPiA+ICsjaW5jbHVkZSAidnB1X21i b3guaCINCj4gPiArI2luY2x1ZGUgInZwdV9tc2dzLmgiDQo+ID4gKyNpbmNsdWRlICJ2cHVfcnBj LmgiDQo+ID4gKyNpbmNsdWRlICJ2cHVfbG9nLmgiDQo+ID4gKyNpbmNsdWRlICJ2cHVfY21kcy5o Ig0KPiA+ICsNCj4gPiArdW5zaWduZWQgaW50IHZwdV9kYmdfbGV2ZWwgPSBMVkxfRVJSIHwgTFZM X1dBUk4gfCBMVkxfSU5GTzsNCj4gPiArbW9kdWxlX3BhcmFtKHZwdV9kYmdfbGV2ZWwsIHVpbnQs IDA2NDQpOw0KPiA+ICsNCj4gPiArdm9pZCBjc3Jfd3JpdGVsKHN0cnVjdCB2cHVfY29yZSAqY29y ZSwgdTMyIHJlZywgdTMyIHZhbCkNCj4gPiArew0KPiA+ICsgICAgIHdyaXRlbCh2YWwsIGNvcmUt PmJhc2UgKyByZWcpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICt1MzIgY3NyX3JlYWRsKHN0cnVjdCB2 cHVfY29yZSAqY29yZSwgdTMyIHJlZykNCj4gPiArew0KPiA+ICsgICAgIHJldHVybiByZWFkbChj b3JlLT5iYXNlICsgcmVnKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2cHVfY29y ZV9sb2FkX2Zpcm13YXJlKHN0cnVjdCB2cHVfY29yZSAqY29yZSkNCj4gPiArew0KPiA+ICsgICAg IGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqcGZ3ID0gTlVMTDsNCj4gPiArICAgICBpbnQgcmV0ID0g MDsNCj4gPiArDQo+ID4gKyAgICAgV0FSTl9PTighY29yZSB8fCAhY29yZS0+cmVzIHx8ICFjb3Jl LT5yZXMtPmZ3bmFtZSk7DQo+ID4gKyAgICAgaWYgKCFjb3JlLT5mdy52aXJ0KSB7DQo+ID4gKyAg ICAgICAgICAgICBjb3JlX2Vycihjb3JlLCAiZmlybXdhcmUgYnVmZmVyIGlzIG5vdCByZWFkeVxu Iik7DQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gPiArICAgICB9DQo+ID4g Kw0KPiA+ICsgICAgIHJldCA9IHJlcXVlc3RfZmlybXdhcmUoJnBmdywgY29yZS0+cmVzLT5md25h bWUsIGNvcmUtPmRldik7DQo+ID4gKyAgICAgY29yZV9kYmcoY29yZSwgTFZMX0RFQlVHLCAicmVx dWVzdF9maXJtd2FyZSAlcyA6ICVkXG4iLA0KPiBjb3JlLT5yZXMtPmZ3bmFtZSwgcmV0KTsNCj4g PiArICAgICBpZiAocmV0KSB7DQo+ID4gKyAgICAgICAgICAgICBjb3JlX2Vycihjb3JlLCAicmVx dWVzdCBmaXJtd2FyZSAlcyBmYWlsZWQsIHJldCA9ICVkXG4iLA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvcmUtPnJlcy0+ZnduYW1lLCByZXQpOw0KPiA+ICsgICAgICAgICAg ICAgcmV0dXJuIHJldDsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIGlmIChjb3JlLT5m dy5sZW5ndGggPCBwZnctPnNpemUpIHsNCj4gPiArICAgICAgICAgICAgIGNvcmVfZXJyKGNvcmUs ICJmaXJtd2FyZSBidWZmZXIgc2l6ZSB3YW50ICV6dSwgYnV0ICVkXG4iLA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBmdy0+c2l6ZSwgY29yZS0+ZncubGVuZ3RoKTsNCj4gPiAr ICAgICAgICAgICAgIHJldCA9IC1FSU5WQUw7DQo+ID4gKyAgICAgICAgICAgICBnb3RvIGV4aXQ7 DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBtZW1zZXRfaW8oY29yZS0+ZncudmlydCwg MCwgY29yZS0+ZncubGVuZ3RoKTsNCj4gPiArICAgICBtZW1jcHkoY29yZS0+ZncudmlydCwgcGZ3 LT5kYXRhLCBwZnctPnNpemUpOw0KPiA+ICsgICAgIGNvcmUtPmZ3LmJ5dGVzdXNlZCA9IHBmdy0+ c2l6ZTsNCj4gPiArICAgICByZXQgPSB2cHVfaWZhY2Vfb25fZmlybXdhcmVfbG9hZGVkKGNvcmUp Ow0KPiA+ICtleGl0Og0KPiA+ICsgICAgIHJlbGVhc2VfZmlybXdhcmUocGZ3KTsNCj4gPiArICAg ICBwZncgPSBOVUxMOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgaW50IHZwdV9jb3JlX3dhaXRfYm9vdF9kb25lKHN0cnVjdCB2cHVfY29y ZSAqY29yZSkNCj4gPiArew0KPiA+ICsgICAgIGludCByZXQ7DQo+ID4gKyAgICAgdTMyIGZ3X3Zl cnNpb247DQo+ID4gKw0KPiA+ICsgICAgIHJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91 dCgmY29yZS0+Y21wLCBWUFVfVElNRU9VVCk7DQo+ID4gKyAgICAgaWYgKCFyZXQpIHsNCj4gPiAr ICAgICAgICAgICAgIGNvcmVfZXJyKGNvcmUsICJib290IHRpbWVvdXRcbiIpOw0KPiA+ICsgICAg ICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBm d192ZXJzaW9uID0gdnB1X2lmYWNlX2dldF92ZXJzaW9uKGNvcmUpOw0KPiA+ICsgICAgIGNvcmVf ZGJnKGNvcmUsIExWTF9XQVJOLCAiZmlybXdhcmUgdmVyc2lvbiA6ICVkLiVkLiVkXG4iLA0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAoZndfdmVyc2lvbiA+PiAxNikgJiAweGZmLA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAoZndfdmVyc2lvbiA+PiA4KSAmIDB4ZmYsDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgIGZ3X3ZlcnNpb24gJiAweGZmKTsNCj4gPiArICAgICBjb3JlLT5zdXBw b3J0ZWRfaW5zdGFuY2VfY291bnQgPQ0KPiB2cHVfaWZhY2VfZ2V0X21heF9pbnN0YW5jZV9jb3Vu dChjb3JlKTsNCj4gPiArICAgICBpZiAoY29yZS0+cmVzLT5hY3Rfc2l6ZSkgew0KPiA+ICsgICAg ICAgICAgICAgdTMyIGNvdW50ID0gY29yZS0+YWN0Lmxlbmd0aCAvIGNvcmUtPnJlcy0+YWN0X3Np emU7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgY29yZS0+c3VwcG9ydGVkX2luc3RhbmNlX2Nv dW50ID0NCj4gbWluKGNvcmUtPnN1cHBvcnRlZF9pbnN0YW5jZV9jb3VudCwgY291bnQpOw0KPiA+ ICsgICAgIH0NCj4gPiArICAgICBjb3JlLT5md192ZXJzaW9uID0gZndfdmVyc2lvbjsNCj4gPiAr DQo+ID4gKyAgICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdnB1 X2NvcmVfYm9vdChzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUsIGJvb2wgbG9hZCkNCj4gPiArew0KPiA+ ICsgICAgIGludCByZXQ7DQo+ID4gKw0KPiA+ICsgICAgIFdBUk5fT04oIWNvcmUpOw0KPiA+ICsN Cj4gPiArICAgICBpZiAoIWNvcmUtPnJlcy0+c3RhbmRhbG9uZSkNCj4gPiArICAgICAgICAgICAg IHJldHVybiAwOw0KPiA+ICsNCj4gPiArICAgICBjb3JlX2RiZyhjb3JlLCBMVkxfV0FSTiwgImJv b3RcbiIpOw0KPiA+ICsgICAgIHJlaW5pdF9jb21wbGV0aW9uKCZjb3JlLT5jbXApOw0KPiA+ICsg ICAgIGlmIChsb2FkKSB7DQo+ID4gKyAgICAgICAgICAgICByZXQgPSB2cHVfY29yZV9sb2FkX2Zp cm13YXJlKGNvcmUpOw0KPiA+ICsgICAgICAgICAgICAgaWYgKHJldCkNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIHZw dV9pZmFjZV9ib290X2NvcmUoY29yZSk7DQo+ID4gKyAgICAgcmV0dXJuIHZwdV9jb3JlX3dhaXRf Ym9vdF9kb25lKGNvcmUpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZwdV9jb3Jl X3NodXRkb3duKHN0cnVjdCB2cHVfY29yZSAqY29yZSkNCj4gPiArew0KPiA+ICsgICAgIGlmICgh Y29yZS0+cmVzLT5zdGFuZGFsb25lKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIDA7DQo+ID4g KyAgICAgcmV0dXJuIHZwdV9pZmFjZV9zaHV0ZG93bl9jb3JlKGNvcmUpOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgaW50IHZwdV9jb3JlX3Jlc3RvcmUoc3RydWN0IHZwdV9jb3JlICpjb3Jl KQ0KPiA+ICt7DQo+ID4gKyAgICAgaWYgKCFjb3JlLT5yZXMtPnN0YW5kYWxvbmUpDQo+ID4gKyAg ICAgICAgICAgICByZXR1cm4gMDsNCj4gPiArICAgICByZXR1cm4gdnB1X2lmYWNlX3Jlc3RvcmVf Y29yZShjb3JlKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBfX3ZwdV9hbGxvY19k bWEoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdnB1X2J1ZmZlciAqYnVmKQ0KPiA+ICt7DQo+ ID4gKyAgICAgZ2ZwX3QgZ2ZwID0gR0ZQX0tFUk5FTCB8IEdGUF9ETUEzMjsNCj4gPiArDQo+ID4g KyAgICAgV0FSTl9PTighZGV2IHx8ICFidWYpOw0KPiA+ICsNCj4gPiArICAgICBpZiAoIWJ1Zi0+ bGVuZ3RoKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICsgICAgIGJ1 Zi0+dmlydCA9IGRtYV9hbGxvY19jb2hlcmVudChkZXYsIGJ1Zi0+bGVuZ3RoLCAmYnVmLT5waHlz LCBnZnApOw0KPiA+ICsgICAgIGlmICghYnVmLT52aXJ0KQ0KPiA+ICsgICAgICAgICAgICAgcmV0 dXJuIC1FTk9NRU07DQo+ID4gKw0KPiA+ICsgICAgIGJ1Zi0+ZGV2ID0gZGV2Ow0KPiA+ICsNCj4g PiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArdm9pZCB2cHVfZnJlZV9kbWEo c3RydWN0IHZwdV9idWZmZXIgKmJ1ZikNCj4gPiArew0KPiA+ICsgICAgIFdBUk5fT04oIWJ1Zik7 DQo+ID4gKw0KPiA+ICsgICAgIGlmICghYnVmLT52aXJ0IHx8ICFidWYtPmRldikNCj4gPiArICAg ICAgICAgICAgIHJldHVybjsNCj4gPiArDQo+ID4gKyAgICAgZG1hX2ZyZWVfY29oZXJlbnQoYnVm LT5kZXYsIGJ1Zi0+bGVuZ3RoLCBidWYtPnZpcnQsIGJ1Zi0+cGh5cyk7DQo+ID4gKyAgICAgYnVm LT52aXJ0ID0gTlVMTDsNCj4gPiArICAgICBidWYtPnBoeXMgPSAwOw0KPiA+ICsgICAgIGJ1Zi0+ bGVuZ3RoID0gMDsNCj4gPiArICAgICBidWYtPmJ5dGVzdXNlZCA9IDA7DQo+ID4gKyAgICAgYnVm LT5kZXYgPSBOVUxMOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtpbnQgdnB1X2FsbG9jX2RtYShzdHJ1 Y3QgdnB1X2NvcmUgKmNvcmUsIHN0cnVjdCB2cHVfYnVmZmVyICpidWYpDQo+ID4gK3sNCj4gPiAr ICAgICBXQVJOX09OKCFjb3JlIHx8ICFidWYpOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gX192 cHVfYWxsb2NfZG1hKGNvcmUtPmRldiwgYnVmKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IHN0cnVjdCB2cHVfY29yZSAqdnB1X2NvcmVfZmluZF9uZXh0X2J5X3R5cGUoc3RydWN0IHZwdV9k ZXYgKnZwdSwNCj4gdTMyIHR5cGUpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2NvcmUg KmM7DQo+ID4gKw0KPiA+ICsgICAgIFdBUk5fT04oIXZwdSk7DQo+ID4gKw0KPiA+ICsgICAgIGxp c3RfZm9yX2VhY2hfZW50cnkoYywgJnZwdS0+Y29yZXMsIGxpc3QpIHsNCj4gPiArICAgICAgICAg ICAgIGlmIChjLT50eXBlID09IHR5cGUpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJldHVy biBjOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIE5VTEw7DQo+ID4gK30N Cj4gPiArDQo+ID4gK2ludCB2cHVfY29yZV9jaGVja19mbXQoc3RydWN0IHZwdV9jb3JlICpjb3Jl LCB1MzIgcGl4ZWxmbXQpDQo+ID4gK3sNCj4gPiArICAgICBpZiAoIWNvcmUpDQo+ID4gKyAgICAg ICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKyAgICAgaWYgKHZwdV9pZmFjZV9j aGVja19mb3JtYXQoY29yZSwgcGl4ZWxmbXQpKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIDA7 DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dGF0aWMgdm9pZCB2cHVfY29yZV9jaGVja19oYW5nKHN0cnVjdCB2cHVfY29yZSAqY29yZSkNCj4g PiArew0KPiA+ICsgICAgIGlmIChjb3JlLT5oYW5nX21hc2spDQo+ID4gKyAgICAgICAgICAgICBj b3JlLT5zdGF0ZSA9IFZQVV9DT1JFX0hBTkc7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBz dHJ1Y3QgdnB1X2NvcmUgKnZwdV9jb3JlX2ZpbmRfcHJvcGVyX2J5X3R5cGUoc3RydWN0IHZwdV9k ZXYgKnZwdSwNCj4gdTMyIHR5cGUpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2NvcmUg KmNvcmUgPSBOVUxMOw0KPiA+ICsgICAgIGludCByZXF1ZXN0X2NvdW50ID0gSU5UX01BWDsNCj4g PiArICAgICBzdHJ1Y3QgdnB1X2NvcmUgKmM7DQo+ID4gKw0KPiA+ICsgICAgIFdBUk5fT04oIXZw dSk7DQo+ID4gKw0KPiA+ICsgICAgIGxpc3RfZm9yX2VhY2hfZW50cnkoYywgJnZwdS0+Y29yZXMs IGxpc3QpIHsNCj4gPiArICAgICAgICAgICAgIGNvcmVfZGJnKGMsIExWTF9ERUJVRywgImluc3Rh bmNlX21hc2sgPSAweCVseCwgc3RhdGUNCj4gPSAlZFxuIiwNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjLT5pbnN0YW5jZV9tYXNrLA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGMtPnN0YXRlKTsNCj4gPiArICAgICAgICAgICAgIGlmIChjLT50eXBlICE9IHR5 cGUpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KPiA+ICsgICAgICAgICAg ICAgaWYgKGMtPnN0YXRlID09IFZQVV9DT1JFX0RFSU5JVCkgew0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICBjb3JlID0gYzsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4g KyAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgICB2cHVfY29yZV9jaGVja19oYW5nKGMp Ow0KPiA+ICsgICAgICAgICAgICAgaWYgKGMtPnN0YXRlICE9IFZQVV9DT1JFX0FDVElWRSkNCj4g PiArICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQo+ID4gKyAgICAgICAgICAgICBpZiAo Yy0+cmVxdWVzdF9jb3VudCA8IHJlcXVlc3RfY291bnQpIHsNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgcmVxdWVzdF9jb3VudCA9IGMtPnJlcXVlc3RfY291bnQ7DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgIGNvcmUgPSBjOw0KPiA+ICsgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAg ICAgaWYgKCFyZXF1ZXN0X2NvdW50KQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBicmVhazsN Cj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiBjb3JlOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgYm9vbCB2cHVfY29yZV9pc19leGlzdChzdHJ1Y3QgdnB1X2RldiAqdnB1 LCBzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2Nv cmUgKmM7DQo+ID4gKw0KPiA+ICsgICAgIGxpc3RfZm9yX2VhY2hfZW50cnkoYywgJnZwdS0+Y29y ZXMsIGxpc3QpIHsNCj4gPiArICAgICAgICAgICAgIGlmIChjID09IGNvcmUpDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAg ICAgcmV0dXJuIGZhbHNlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB2cHVfY29y ZV9nZXRfdnB1KHN0cnVjdCB2cHVfY29yZSAqY29yZSkNCj4gPiArew0KPiA+ICsgICAgIGNvcmUt PnZwdS0+Z2V0X3ZwdShjb3JlLT52cHUpOw0KPiA+ICsgICAgIGlmIChjb3JlLT50eXBlID09IFZQ VV9DT1JFX1RZUEVfRU5DKQ0KPiA+ICsgICAgICAgICAgICAgY29yZS0+dnB1LT5nZXRfZW5jKGNv cmUtPnZwdSk7DQo+ID4gKyAgICAgaWYgKGNvcmUtPnR5cGUgPT0gVlBVX0NPUkVfVFlQRV9ERUMp DQo+ID4gKyAgICAgICAgICAgICBjb3JlLT52cHUtPmdldF9kZWMoY29yZS0+dnB1KTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2cHVfY29yZV9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNl ICpkZXYsIHN0cnVjdCB2cHVfY29yZSAqY29yZSkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB2 cHVfZGV2ICp2cHUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gPiArICAgICBpbnQgcmV0ID0g MDsNCj4gPiArDQo+ID4gKyAgICAgY29yZV9kYmcoY29yZSwgTFZMX0RFQlVHLCAicmVnaXN0ZXIg Y29yZVxuIik7DQo+ID4gKyAgICAgaWYgKHZwdV9jb3JlX2lzX2V4aXN0KHZwdSwgY29yZSkpDQo+ ID4gKyAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiArDQo+ID4gKyAgICAgY29yZS0+d29ya3F1 ZXVlID0gYWxsb2Nfd29ya3F1ZXVlKCJ2cHUiLCBXUV9VTkJPVU5EIHwNCj4gV1FfTUVNX1JFQ0xB SU0sIDEpOw0KPiA+ICsgICAgIGlmICghY29yZS0+d29ya3F1ZXVlKSB7DQo+ID4gKyAgICAgICAg ICAgICBjb3JlX2Vycihjb3JlLCAiZmFpbCB0byBhbGxvYyB3b3JrcXVldWVcbiIpOw0KPiA+ICsg ICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07DQo+ID4gKyAgICAgfQ0KPiA+ICsgICAgIElOSVRf V09SSygmY29yZS0+bXNnX3dvcmssIHZwdV9tc2dfcnVuX3dvcmspOw0KPiA+ICsgICAgIElOSVRf REVMQVlFRF9XT1JLKCZjb3JlLT5tc2dfZGVsYXllZF93b3JrLA0KPiB2cHVfbXNnX2RlbGF5ZWRf d29yayk7DQo+ID4gKyAgICAgY29yZS0+bXNnX2J1ZmZlcl9zaXplID0NCj4gcm91bmR1cF9wb3df b2ZfdHdvKFZQVV9NU0dfQlVGRkVSX1NJWkUpOw0KPiA+ICsgICAgIGNvcmUtPm1zZ19idWZmZXIg PSB2emFsbG9jKGNvcmUtPm1zZ19idWZmZXJfc2l6ZSk7DQo+ID4gKyAgICAgaWYgKCFjb3JlLT5t c2dfYnVmZmVyKSB7DQo+ID4gKyAgICAgICAgICAgICBjb3JlX2Vycihjb3JlLCAiZmFpbGVkIGFs bG9jYXRlIGJ1ZmZlciBmb3IgZmlmb1xuIik7DQo+ID4gKyAgICAgICAgICAgICByZXQgPSAtRU5P TUVNOw0KPiA+ICsgICAgICAgICAgICAgZ290byBlcnJvcjsNCj4gPiArICAgICB9DQo+ID4gKyAg ICAgcmV0ID0ga2ZpZm9faW5pdCgmY29yZS0+bXNnX2ZpZm8sIGNvcmUtPm1zZ19idWZmZXIsDQo+ IGNvcmUtPm1zZ19idWZmZXJfc2l6ZSk7DQo+ID4gKyAgICAgaWYgKHJldCkgew0KPiA+ICsgICAg ICAgICAgICAgY29yZV9lcnIoY29yZSwgImZhaWxlZCBpbml0IGtmaWZvXG4iKTsNCj4gPiArICAg ICAgICAgICAgIGdvdG8gZXJyb3I7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBsaXN0 X2FkZF90YWlsKCZjb3JlLT5saXN0LCAmdnB1LT5jb3Jlcyk7DQo+ID4gKw0KPiA+ICsgICAgIHZw dV9jb3JlX2dldF92cHUoY29yZSk7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChjb3JlLT50eXBlID09 IFZQVV9DT1JFX1RZUEVfRU5DICYmICF2cHUtPnZkZXZfZW5jKQ0KPiA+ICsgICAgICAgICAgICAg dmVuY19jcmVhdGVfdmlkZW9fZGV2aWNlKHZwdSk7DQo+ID4gKyAgICAgaWYgKGNvcmUtPnR5cGUg PT0gVlBVX0NPUkVfVFlQRV9ERUMgJiYgIXZwdS0+dmRldl9kZWMpDQo+ID4gKyAgICAgICAgICAg ICB2ZGVjX2NyZWF0ZV92aWRlb19kZXZpY2UodnB1KTsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJu IDA7DQo+ID4gK2Vycm9yOg0KPiA+ICsgICAgIGlmIChjb3JlLT5tc2dfYnVmZmVyKSB7DQo+ID4g KyAgICAgICAgICAgICB2ZnJlZShjb3JlLT5tc2dfYnVmZmVyKTsNCj4gPiArICAgICAgICAgICAg IGNvcmUtPm1zZ19idWZmZXIgPSBOVUxMOw0KPiA+ICsgICAgIH0NCj4gPiArICAgICBpZiAoY29y ZS0+d29ya3F1ZXVlKSB7DQo+ID4gKyAgICAgICAgICAgICBkZXN0cm95X3dvcmtxdWV1ZShjb3Jl LT53b3JrcXVldWUpOw0KPiA+ICsgICAgICAgICAgICAgY29yZS0+d29ya3F1ZXVlID0gTlVMTDsN Cj4gPiArICAgICB9DQo+ID4gKyAgICAgcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIHZvaWQgdnB1X2NvcmVfcHV0X3ZwdShzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUpDQo+ID4g K3sNCj4gPiArICAgICBpZiAoY29yZS0+dHlwZSA9PSBWUFVfQ09SRV9UWVBFX0VOQykNCj4gPiAr ICAgICAgICAgICAgIGNvcmUtPnZwdS0+cHV0X2VuYyhjb3JlLT52cHUpOw0KPiA+ICsgICAgIGlm IChjb3JlLT50eXBlID09IFZQVV9DT1JFX1RZUEVfREVDKQ0KPiA+ICsgICAgICAgICAgICAgY29y ZS0+dnB1LT5wdXRfZGVjKGNvcmUtPnZwdSk7DQo+ID4gKyAgICAgY29yZS0+dnB1LT5wdXRfdnB1 KGNvcmUtPnZwdSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdnB1X2NvcmVfdW5y ZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB2cHVfY29yZSAqY29yZSkNCj4gPiAr ew0KPiA+ICsgICAgIHN0cnVjdCB2cHVfZGV2ICp2cHUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsN Cj4gPiArDQo+ID4gKyAgICAgbGlzdF9kZWxfaW5pdCgmY29yZS0+bGlzdCk7DQo+ID4gKw0KPiA+ ICsgICAgIHZwdV9jb3JlX3B1dF92cHUoY29yZSk7DQo+ID4gKyAgICAgY29yZS0+dnB1ID0gTlVM TDsNCj4gPiArICAgICB2ZnJlZShjb3JlLT5tc2dfYnVmZmVyKTsNCj4gPiArICAgICBjb3JlLT5t c2dfYnVmZmVyID0gTlVMTDsNCj4gPiArDQo+ID4gKyAgICAgaWYgKGNvcmUtPndvcmtxdWV1ZSkg ew0KPiA+ICsgICAgICAgICAgICAgY2FuY2VsX3dvcmtfc3luYygmY29yZS0+bXNnX3dvcmspOw0K PiA+ICsgICAgICAgICAgICAgY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZjb3JlLT5tc2dfZGVs YXllZF93b3JrKTsNCj4gPiArICAgICAgICAgICAgIGRlc3Ryb3lfd29ya3F1ZXVlKGNvcmUtPndv cmtxdWV1ZSk7DQo+ID4gKyAgICAgICAgICAgICBjb3JlLT53b3JrcXVldWUgPSBOVUxMOw0KPiA+ ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgaWYgKHZwdV9jb3JlX2ZpbmRfbmV4dF9ieV90eXBl KHZwdSwgY29yZS0+dHlwZSkpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiArDQo+ ID4gKyAgICAgaWYgKGNvcmUtPnR5cGUgPT0gVlBVX0NPUkVfVFlQRV9FTkMpDQo+ID4gKyAgICAg ICAgICAgICB2aWRlb191bnJlZ2lzdGVyX2RldmljZSh2cHUtPnZkZXZfZW5jKTsNCj4gPiArICAg ICBpZiAoY29yZS0+dHlwZSA9PSBWUFVfQ09SRV9UWVBFX0RFQykNCj4gPiArICAgICAgICAgICAg IHZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHZwdS0+dmRldl9kZWMpOw0KPiA+ICsNCj4gPiArICAg ICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2cHVfY29yZV9hY3F1 aXJlX2luc3RhbmNlKHN0cnVjdCB2cHVfY29yZSAqY29yZSkNCj4gPiArew0KPiA+ICsgICAgIGlu dCBpZDsNCj4gPiArDQo+ID4gKyAgICAgV0FSTl9PTighY29yZSk7DQo+ID4gKw0KPiA+ICsgICAg IGlkID0gZmZ6KGNvcmUtPmluc3RhbmNlX21hc2spOw0KPiA+ICsgICAgIGlmIChpZCA+PSBjb3Jl LT5zdXBwb3J0ZWRfaW5zdGFuY2VfY291bnQpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVJ TlZBTDsNCj4gPiArDQo+ID4gKyAgICAgc2V0X2JpdChpZCwgJmNvcmUtPmluc3RhbmNlX21hc2sp Ow0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gaWQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyB2b2lkIHZwdV9jb3JlX3JlbGVhc2VfaW5zdGFuY2Uoc3RydWN0IHZwdV9jb3JlICpjb3JlLCBp bnQgaWQpDQo+ID4gK3sNCj4gPiArICAgICBXQVJOX09OKCFjb3JlKTsNCj4gPiArDQo+ID4gKyAg ICAgaWYgKGlkIDwgMCB8fCBpZCA+PSBjb3JlLT5zdXBwb3J0ZWRfaW5zdGFuY2VfY291bnQpDQo+ ID4gKyAgICAgICAgICAgICByZXR1cm47DQo+ID4gKw0KPiA+ICsgICAgIGNsZWFyX2JpdChpZCwg JmNvcmUtPmluc3RhbmNlX21hc2spOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgdnB1X2lu c3QgKnZwdV9pbnN0X2dldChzdHJ1Y3QgdnB1X2luc3QgKmluc3QpDQo+ID4gK3sNCj4gPiArICAg ICBpZiAoIWluc3QpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gTlVMTDsNCj4gPiArDQo+ID4g KyAgICAgYXRvbWljX2luYygmaW5zdC0+cmVmX2NvdW50KTsNCj4gPiArDQo+ID4gKyAgICAgcmV0 dXJuIGluc3Q7DQo+ID4gK30NCj4gPiArDQo+ID4gK3ZvaWQgdnB1X2luc3RfcHV0KHN0cnVjdCB2 cHVfaW5zdCAqaW5zdCkNCj4gPiArew0KPiA+ICsgICAgIGlmICghaW5zdCkNCj4gPiArICAgICAg ICAgICAgIHJldHVybjsNCj4gPiArICAgICBpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmaW5zdC0+ cmVmX2NvdW50KSkgew0KPiA+ICsgICAgICAgICAgICAgaWYgKGluc3QtPnJlbGVhc2UpDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgIGluc3QtPnJlbGVhc2UoaW5zdCk7DQo+ID4gKyAgICAgfQ0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgdnB1X2NvcmUgKnZwdV9yZXF1ZXN0X2NvcmUoc3Ry dWN0IHZwdV9kZXYgKnZwdSwgZW51bQ0KPiB2cHVfY29yZV90eXBlIHR5cGUpDQo+ID4gK3sNCj4g PiArICAgICBzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUgPSBOVUxMOw0KPiA+ICsgICAgIGludCByZXQ7 DQo+ID4gKw0KPiA+ICsgICAgIG11dGV4X2xvY2soJnZwdS0+bG9jayk7DQo+ID4gKw0KPiA+ICsg ICAgIGNvcmUgPSB2cHVfY29yZV9maW5kX3Byb3Blcl9ieV90eXBlKHZwdSwgdHlwZSk7DQo+ID4g KyAgICAgaWYgKCFjb3JlKQ0KPiA+ICsgICAgICAgICAgICAgZ290byBleGl0Ow0KPiA+ICsNCj4g PiArICAgICBjb3JlX2RiZyhjb3JlLCBMVkxfREVCVUcsICJpcyBmb3VuZFxuIik7DQo+ID4gKyAg ICAgbXV0ZXhfbG9jaygmY29yZS0+bG9jayk7DQo+ID4gKyAgICAgcG1fcnVudGltZV9nZXRfc3lu Yyhjb3JlLT5kZXYpOw0KPiA+ICsNCj4gPiArICAgICBpZiAoY29yZS0+c3RhdGUgPT0gVlBVX0NP UkVfREVJTklUKSB7DQo+ID4gKyAgICAgICAgICAgICByZXQgPSB2cHVfY29yZV9ib290KGNvcmUs IHRydWUpOw0KPiA+ICsgICAgICAgICAgICAgaWYgKHJldCkgew0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICBwbV9ydW50aW1lX3B1dF9zeW5jKGNvcmUtPmRldik7DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgIG11dGV4X3VubG9jaygmY29yZS0+bG9jayk7DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgIGNvcmUgPSBOVUxMOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7 DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgICBjb3JlLT5zdGF0ZSA9IFZQ VV9DT1JFX0FDVElWRTsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIGNvcmUtPnJlcXVl c3RfY291bnQrKzsNCj4gPiArDQo+ID4gKyAgICAgbXV0ZXhfdW5sb2NrKCZjb3JlLT5sb2NrKTsN Cj4gPiArZXhpdDoNCj4gPiArICAgICBtdXRleF91bmxvY2soJnZwdS0+bG9jayk7DQo+ID4gKw0K PiA+ICsgICAgIHJldHVybiBjb3JlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICt2b2lkIHZwdV9yZWxl YXNlX2NvcmUoc3RydWN0IHZwdV9jb3JlICpjb3JlKQ0KPiA+ICt7DQo+ID4gKyAgICAgaWYgKCFj b3JlKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuOw0KPiA+ICsNCj4gPiArICAgICBtdXRleF9s b2NrKCZjb3JlLT5sb2NrKTsNCj4gPiArICAgICBwbV9ydW50aW1lX3B1dF9zeW5jKGNvcmUtPmRl dik7DQo+ID4gKyAgICAgaWYgKGNvcmUtPnJlcXVlc3RfY291bnQpDQo+ID4gKyAgICAgICAgICAg ICBjb3JlLT5yZXF1ZXN0X2NvdW50LS07DQo+ID4gKyAgICAgbXV0ZXhfdW5sb2NrKCZjb3JlLT5s b2NrKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAraW50IHZwdV9pbnN0X3JlZ2lzdGVyKHN0cnVjdCB2 cHVfaW5zdCAqaW5zdCkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB2cHVfY29yZSAqY29yZTsN Cj4gPiArICAgICBpbnQgcmV0ID0gMDsNCj4gPiArDQo+ID4gKyAgICAgV0FSTl9PTighaW5zdCB8 fCAhaW5zdC0+Y29yZSk7DQo+ID4gKw0KPiA+ICsgICAgIGNvcmUgPSBpbnN0LT5jb3JlOw0KPiA+ ICsgICAgIG11dGV4X2xvY2soJmNvcmUtPmxvY2spOw0KPiA+ICsgICAgIGlmIChpbnN0LT5pZCA+ PSAwICYmIGluc3QtPmlkIDwgY29yZS0+c3VwcG9ydGVkX2luc3RhbmNlX2NvdW50KQ0KPiA+ICsg ICAgICAgICAgICAgZ290byBleGl0Ow0KPiA+ICsNCj4gPiArICAgICByZXQgPSB2cHVfY29yZV9h Y3F1aXJlX2luc3RhbmNlKGNvcmUpOw0KPiA+ICsgICAgIGlmIChyZXQgPCAwKQ0KPiA+ICsgICAg ICAgICAgICAgZ290byBleGl0Ow0KPiA+ICsNCj4gPiArICAgICBpbnN0LT5pZCA9IHJldDsNCj4g PiArICAgICBsaXN0X2FkZF90YWlsKCZpbnN0LT5saXN0LCAmY29yZS0+aW5zdGFuY2VzKTsNCj4g PiArICAgICByZXQgPSAwOw0KPiA+ICsgICAgIGlmIChjb3JlLT5yZXMtPmFjdF9zaXplKSB7DQo+ ID4gKyAgICAgICAgICAgICBpbnN0LT5hY3QucGh5cyA9IGNvcmUtPmFjdC5waHlzICsgY29yZS0+ cmVzLT5hY3Rfc2l6ZSAqDQo+IGluc3QtPmlkOw0KPiA+ICsgICAgICAgICAgICAgaW5zdC0+YWN0 LnZpcnQgPSBjb3JlLT5hY3QudmlydCArIGNvcmUtPnJlcy0+YWN0X3NpemUgKiBpbnN0LT5pZDsN Cj4gPiArICAgICAgICAgICAgIGluc3QtPmFjdC5sZW5ndGggPSBjb3JlLT5yZXMtPmFjdF9zaXpl Ow0KPiA+ICsgICAgIH0NCj4gPiArICAgICB2cHVfaW5zdF9jcmVhdGVfZGJnZnNfZmlsZShpbnN0 KTsNCj4gPiArZXhpdDoNCj4gPiArICAgICBtdXRleF91bmxvY2soJmNvcmUtPmxvY2spOw0KPiA+ ICsNCj4gPiArICAgICBpZiAocmV0KQ0KPiA+ICsgICAgICAgICAgICAgY29yZV9lcnIoY29yZSwg InJlZ2lzdGVyIGluc3RhbmNlIGZhaWxcbiIpOw0KPiA+ICsgICAgIHJldHVybiByZXQ7DQo+ID4g K30NCj4gPiArDQo+ID4gK2ludCB2cHVfaW5zdF91bnJlZ2lzdGVyKHN0cnVjdCB2cHVfaW5zdCAq aW5zdCkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB2cHVfY29yZSAqY29yZTsNCj4gPiArDQo+ ID4gKyAgICAgV0FSTl9PTighaW5zdCk7DQo+ID4gKw0KPiA+ICsgICAgIGNvcmUgPSBpbnN0LT5j b3JlOw0KPiA+ICsNCj4gPiArICAgICB2cHVfY2xlYXJfcmVxdWVzdChpbnN0KTsNCj4gPiArICAg ICBtdXRleF9sb2NrKCZjb3JlLT5sb2NrKTsNCj4gPiArICAgICBpZiAoaW5zdC0+aWQgPj0gMCAm JiBpbnN0LT5pZCA8IGNvcmUtPnN1cHBvcnRlZF9pbnN0YW5jZV9jb3VudCkgew0KPiA+ICsgICAg ICAgICAgICAgdnB1X2luc3RfcmVtb3ZlX2RiZ2ZzX2ZpbGUoaW5zdCk7DQo+ID4gKyAgICAgICAg ICAgICBsaXN0X2RlbF9pbml0KCZpbnN0LT5saXN0KTsNCj4gPiArICAgICAgICAgICAgIHZwdV9j b3JlX3JlbGVhc2VfaW5zdGFuY2UoY29yZSwgaW5zdC0+aWQpOw0KPiA+ICsgICAgICAgICAgICAg aW5zdC0+aWQgPSBWUFVfSU5TVF9OVUxMX0lEOw0KPiA+ICsgICAgIH0NCj4gPiArICAgICB2cHVf Y29yZV9jaGVja19oYW5nKGNvcmUpOw0KPiA+ICsgICAgIGlmIChjb3JlLT5zdGF0ZSA9PSBWUFVf Q09SRV9IQU5HICYmICFjb3JlLT5pbnN0YW5jZV9tYXNrKSB7DQo+ID4gKyAgICAgICAgICAgICBj b3JlX2RiZyhjb3JlLCBMVkxfV0FSTiwgInJlc2V0IGhhbmcgY29yZVxuIik7DQo+ID4gKyAgICAg ICAgICAgICBpZiAoIXZwdV9jb3JlX3N3X3Jlc2V0KGNvcmUpKSB7DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgIGNvcmUtPnN0YXRlID0gVlBVX0NPUkVfQUNUSVZFOw0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICBjb3JlLT5oYW5nX21hc2sgPSAwOw0KPiA+ICsgICAgICAgICAgICAgfQ0KPiA+ ICsgICAgIH0NCj4gPiArICAgICBtdXRleF91bmxvY2soJmNvcmUtPmxvY2spOw0KPiA+ICsNCj4g PiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RydWN0IHZwdV9pbnN0ICp2 cHVfY29yZV9maW5kX2luc3RhbmNlKHN0cnVjdCB2cHVfY29yZSAqY29yZSwgdTMyIGluZGV4KQ0K PiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9pbnN0ICppbnN0ID0gTlVMTDsNCj4gPiArICAg ICBzdHJ1Y3QgdnB1X2luc3QgKnRtcDsNCj4gPiArDQo+ID4gKyAgICAgbXV0ZXhfbG9jaygmY29y ZS0+bG9jayk7DQo+ID4gKyAgICAgaWYgKCF0ZXN0X2JpdChpbmRleCwgJmNvcmUtPmluc3RhbmNl X21hc2spKQ0KPiA+ICsgICAgICAgICAgICAgZ290byBleGl0Ow0KPiA+ICsgICAgIGxpc3RfZm9y X2VhY2hfZW50cnkodG1wLCAmY29yZS0+aW5zdGFuY2VzLCBsaXN0KSB7DQo+ID4gKyAgICAgICAg ICAgICBpZiAodG1wLT5pZCA9PSBpbmRleCkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBp bnN0ID0gdnB1X2luc3RfZ2V0KHRtcCk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGJyZWFr Ow0KPiA+ICsgICAgICAgICAgICAgfQ0KPiA+ICsgICAgIH0NCj4gPiArZXhpdDoNCj4gPiArICAg ICBtdXRleF91bmxvY2soJmNvcmUtPmxvY2spOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gaW5z dDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2cHVfY29yZV9wYXJzZV9kdChzdHJ1 Y3QgdnB1X2NvcmUgKmNvcmUsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApDQo+ID4gK3sNCj4gPiAr ICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGU7DQo+ID4gKyAgICAgc3RydWN0IHJlc291cmNl IHJlczsNCj4gPiArDQo+ID4gKyAgICAgaWYgKG9mX2NvdW50X3BoYW5kbGVfd2l0aF9hcmdzKG5w LCAibWVtb3J5LXJlZ2lvbiIsIE5VTEwpIDwgMikgew0KPiA+ICsgICAgICAgICAgICAgY29yZV9l cnIoY29yZSwgIm5lZWQgMiBtZW1vcnktcmVnaW9uIGZvciBib290IGFuZCBycGNcbiIpOw0KPiA+ ICsgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiAr ICAgICBub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShucCwgIm1lbW9yeS1yZWdpb24iLCAwKTsNCj4g PiArICAgICBpZiAoIW5vZGUpIHsNCj4gPiArICAgICAgICAgICAgIGNvcmVfZXJyKGNvcmUsICJi b290LXJlZ2lvbiBvZl9wYXJzZV9waGFuZGxlIGVycm9yXG4iKTsNCj4gPiArICAgICAgICAgICAg IHJldHVybiAtRU5PREVWOw0KPiA+ICsgICAgIH0NCj4gPiArICAgICBpZiAob2ZfYWRkcmVzc190 b19yZXNvdXJjZShub2RlLCAwLCAmcmVzKSkgew0KPiA+ICsgICAgICAgICAgICAgY29yZV9lcnIo Y29yZSwgImJvb3QtcmVnaW9uIG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UNCj4gZXJyb3JcbiIpOw0K PiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4gKyAgICAgfQ0KPiA+ICsgICAg IGNvcmUtPmZ3LnBoeXMgPSByZXMuc3RhcnQ7DQo+ID4gKyAgICAgY29yZS0+ZncubGVuZ3RoID0g cmVzb3VyY2Vfc2l6ZSgmcmVzKTsNCj4gPiArICAgICBjb3JlX2RiZyhjb3JlLCBMVkxfSU5GTywg ImJvb3QtcmVnaW9uIDogPCVwYWQsIDB4JXg+XG4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAmY29yZS0+ZncucGh5cywgY29yZS0+ZncubGVuZ3RoKTsNCj4gPiArDQo+ID4gKyAgICAgbm9k ZSA9IG9mX3BhcnNlX3BoYW5kbGUobnAsICJtZW1vcnktcmVnaW9uIiwgMSk7DQo+ID4gKyAgICAg aWYgKCFub2RlKSB7DQo+ID4gKyAgICAgICAgICAgICBjb3JlX2Vycihjb3JlLCAicnBjLXJlZ2lv biBvZl9wYXJzZV9waGFuZGxlIGVycm9yXG4iKTsNCj4gPiArICAgICAgICAgICAgIHJldHVybiAt RU5PREVWOw0KPiA+ICsgICAgIH0NCj4gPiArICAgICBpZiAob2ZfYWRkcmVzc190b19yZXNvdXJj ZShub2RlLCAwLCAmcmVzKSkgew0KPiA+ICsgICAgICAgICAgICAgY29yZV9lcnIoY29yZSwgInJw Yy1yZWdpb24gb2ZfYWRkcmVzc190b19yZXNvdXJjZSBlcnJvclxuIik7DQo+ID4gKyAgICAgICAg ICAgICByZXR1cm4gLUVJTlZBTDsNCj4gPiArICAgICB9DQo+ID4gKyAgICAgY29yZS0+cnBjLnBo eXMgPSByZXMuc3RhcnQ7DQo+ID4gKyAgICAgY29yZS0+cnBjLmxlbmd0aCA9IHJlc291cmNlX3Np emUoJnJlcyk7DQo+ID4gKyAgICAgY29yZV9kYmcoY29yZSwgTFZMX0RFQlVHLCAicnBjLXJlZ2lv biA6IDwlcGFkLCAweCV4PlxuIiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgJmNvcmUtPnJw Yy5waHlzLCBjb3JlLT5ycGMubGVuZ3RoKTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKGNvcmUtPnJw Yy5sZW5ndGggPCBjb3JlLT5yZXMtPnJwY19zaXplICsgY29yZS0+cmVzLT5md2xvZ19zaXplKSB7 DQo+ID4gKyAgICAgICAgICAgICBjb3JlX2Vycihjb3JlLCAidGhlIHJwYy1yZWdpb24gPCVwYWQs IDB4JXg+IGlzIG5vdA0KPiBlbm91Z2hcbiIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJmNvcmUtPnJwYy5waHlzLCBjb3JlLT5ycGMubGVuZ3RoKTsNCj4gPiArICAgICAgICAg ICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgY29yZS0+ ZncudmlydCA9IGlvcmVtYXBfd2MoY29yZS0+ZncucGh5cywgY29yZS0+ZncubGVuZ3RoKTsNCj4g PiArICAgICBjb3JlLT5ycGMudmlydCA9IGlvcmVtYXBfd2MoY29yZS0+cnBjLnBoeXMsIGNvcmUt PnJwYy5sZW5ndGgpOw0KPiA+ICsgICAgIG1lbXNldF9pbyhjb3JlLT5ycGMudmlydCwgMCwgY29y ZS0+cnBjLmxlbmd0aCk7DQo+ID4gKw0KPiA+ICsgICAgIGlmICh2cHVfaWZhY2VfY2hlY2tfbWVt b3J5X3JlZ2lvbihjb3JlLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUt PnJwYy5waHlzLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUtPnJwYy5s ZW5ndGgpICE9DQo+IFZQVV9DT1JFX01FTU9SWV9VTkNBQ0hFRCkgew0KPiA+ICsgICAgICAgICAg ICAgY29yZV9lcnIoY29yZSwgInJwYyByZWdpb248JXBhZCwgMHgleD4gaXNuJ3QgdW5jYWNoZWRc biIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvcmUtPnJwYy5waHlzLCBj b3JlLT5ycGMubGVuZ3RoKTsNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgY29yZS0+bG9nLnBoeXMgPSBjb3JlLT5ycGMucGh5 cyArIGNvcmUtPnJlcy0+cnBjX3NpemU7DQo+ID4gKyAgICAgY29yZS0+bG9nLnZpcnQgPSBjb3Jl LT5ycGMudmlydCArIGNvcmUtPnJlcy0+cnBjX3NpemU7DQo+ID4gKyAgICAgY29yZS0+bG9nLmxl bmd0aCA9IGNvcmUtPnJlcy0+Zndsb2dfc2l6ZTsNCj4gPiArICAgICBjb3JlLT5hY3QucGh5cyA9 IGNvcmUtPmxvZy5waHlzICsgY29yZS0+bG9nLmxlbmd0aDsNCj4gPiArICAgICBjb3JlLT5hY3Qu dmlydCA9IGNvcmUtPmxvZy52aXJ0ICsgY29yZS0+bG9nLmxlbmd0aDsNCj4gPiArICAgICBjb3Jl LT5hY3QubGVuZ3RoID0gY29yZS0+cnBjLmxlbmd0aCAtIGNvcmUtPnJlcy0+cnBjX3NpemUgLQ0K PiBjb3JlLT5sb2cubGVuZ3RoOw0KPiA+ICsgICAgIGNvcmUtPnJwYy5sZW5ndGggPSBjb3JlLT5y ZXMtPnJwY19zaXplOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIGludCB2cHVfY29yZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsN Cj4gPiArICAgICBzdHJ1Y3QgdnB1X2NvcmUgKmNvcmU7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9k ZXYgKnZwdSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYtPnBhcmVudCk7DQo+ID4gKyAgICAgc3RydWN0 IHZwdV9zaGFyZWRfYWRkciAqaWZhY2U7DQo+ID4gKyAgICAgdTMyIGlmYWNlX2RhdGFfc2l6ZTsN Cj4gPiArICAgICBpbnQgcmV0Ow0KPiA+ICsNCj4gPiArICAgICB2cHVfZGJnKExWTF9XQVJOLCAi Y29yZSAlcyBwcm9iZVxuIiwgcGRldi0+ZGV2Lm9mX25vZGUtPm5hbWUpOw0KPiA+ICsgICAgIGlm ICghdnB1KQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4gKyAgICAgY29y ZSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY29yZSksIEdGUF9LRVJORUwpOw0KPiA+ICsg ICAgIGlmICghY29yZSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOw0KPiA+ICsN Cj4gPiArICAgICBjb3JlLT5wZGV2ID0gcGRldjsNCj4gPiArICAgICBjb3JlLT5kZXYgPSBkZXY7 DQo+ID4gKyAgICAgcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY29yZSk7DQo+ID4gKyAgICAg Y29yZS0+dnB1ID0gdnB1Ow0KPiA+ICsgICAgIElOSVRfTElTVF9IRUFEKCZjb3JlLT5pbnN0YW5j ZXMpOw0KPiA+ICsgICAgIG11dGV4X2luaXQoJmNvcmUtPmxvY2spOw0KPiA+ICsgICAgIG11dGV4 X2luaXQoJmNvcmUtPmNtZF9sb2NrKTsNCj4gPiArICAgICBpbml0X2NvbXBsZXRpb24oJmNvcmUt PmNtcCk7DQo+ID4gKyAgICAgaW5pdF93YWl0cXVldWVfaGVhZCgmY29yZS0+YWNrX3dxKTsNCj4g PiArICAgICBjb3JlLT5zdGF0ZSA9IFZQVV9DT1JFX0RFSU5JVDsNCj4gPiArDQo+ID4gKyAgICAg Y29yZS0+cmVzID0gb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7DQo+ID4gKyAgICAgaWYg KCFjb3JlLT5yZXMpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsNCj4gPiArDQo+ ID4gKyAgICAgY29yZS0+dHlwZSA9IGNvcmUtPnJlcy0+dHlwZTsNCj4gPiArICAgICBjb3JlLT5p ZCA9IG9mX2FsaWFzX2dldF9pZChkZXYtPm9mX25vZGUsICJ2cHVfY29yZSIpOw0KPiA+ICsgICAg IGlmIChjb3JlLT5pZCA8IDApIHsNCj4gPiArICAgICAgICAgICAgIHZwdV9lcnIoImNhbid0IGdl dCB2cHUgY29yZSBpZFxuIik7DQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gY29yZS0+aWQ7DQo+ ID4gKyAgICAgfQ0KPiA+ICsgICAgIHJldCA9IHZwdV9jb3JlX3BhcnNlX2R0KGNvcmUsIGRldi0+ b2Zfbm9kZSk7DQo+ID4gKyAgICAgaWYgKHJldCkNCj4gPiArICAgICAgICAgICAgIHJldHVybiBy ZXQ7DQo+ID4gKw0KPiA+ICsgICAgIGNvcmUtPmJhc2UgPSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBf cmVzb3VyY2UocGRldiwgMCk7DQo+ID4gKyAgICAgaWYgKElTX0VSUihjb3JlLT5iYXNlKSkNCj4g PiArICAgICAgICAgICAgIHJldHVybiBQVFJfRVJSKGNvcmUtPmJhc2UpOw0KPiA+ICsNCj4gPiAr ICAgICBpZiAoIXZwdV9pZmFjZV9jaGVja19jb2RlYyhjb3JlKSkgew0KPiA+ICsgICAgICAgICAg ICAgY29yZV9lcnIoY29yZSwgImlzIG5vdCBzdXBwb3J0ZWRcbiIpOw0KPiA+ICsgICAgICAgICAg ICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICByZXQgPSB2 cHVfbWJveF9pbml0KGNvcmUpOw0KPiA+ICsgICAgIGlmIChyZXQpDQo+ID4gKyAgICAgICAgICAg ICByZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArICAgICBpZmFjZSA9IGRldm1fa3phbGxvYyhkZXYs IHNpemVvZigqaWZhY2UpLCBHRlBfS0VSTkVMKTsNCj4gPiArICAgICBpZiAoIWlmYWNlKQ0KPiA+ ICsgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07DQo+ID4gKw0KPiA+ICsgICAgIGlmYWNlX2Rh dGFfc2l6ZSA9IHZwdV9pZmFjZV9nZXRfZGF0YV9zaXplKGNvcmUpOw0KPiA+ICsgICAgIGlmIChp ZmFjZV9kYXRhX3NpemUpIHsNCj4gPiArICAgICAgICAgICAgIGlmYWNlLT5wcml2ID0gZGV2bV9r emFsbG9jKGRldiwgaWZhY2VfZGF0YV9zaXplLA0KPiBHRlBfS0VSTkVMKTsNCj4gPiArICAgICAg ICAgICAgIGlmICghaWZhY2UtPnByaXYpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJldHVy biAtRU5PTUVNOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgcmV0ID0gdnB1X2lmYWNl X2luaXQoY29yZSwgaWZhY2UsICZjb3JlLT5ycGMsIGNvcmUtPmZ3LnBoeXMpOw0KPiA+ICsgICAg IGlmIChyZXQpIHsNCj4gPiArICAgICAgICAgICAgIGNvcmVfZXJyKGNvcmUsICJpbml0IGlmYWNl IGZhaWwsIHJldCA9ICVkXG4iLCByZXQpOw0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIHJldDsN Cj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIHZwdV9pZmFjZV9jb25maWdfc3lzdGVtKGNv cmUsIHZwdS0+cmVzLT5tcmVnX2Jhc2UsIHZwdS0+YmFzZSk7DQo+ID4gKyAgICAgdnB1X2lmYWNl X3NldF9sb2dfYnVmKGNvcmUsICZjb3JlLT5sb2cpOw0KPiA+ICsNCj4gPiArICAgICBwbV9ydW50 aW1lX2VuYWJsZShkZXYpOw0KPiA+ICsgICAgIHJldCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoZGV2 KTsNCj4gPiArICAgICBpZiAocmV0KSB7DQo+ID4gKyAgICAgICAgICAgICBwbV9ydW50aW1lX3B1 dF9ub2lkbGUoZGV2KTsNCj4gPiArICAgICAgICAgICAgIHBtX3J1bnRpbWVfc2V0X3N1c3BlbmRl ZChkZXYpOw0KPiA+ICsgICAgICAgICAgICAgZ290byBlcnJfcnVudGltZV9kaXNhYmxlOw0KPiA+ ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgaWYgKHZwdV9pZmFjZV9nZXRfcG93ZXJfc3RhdGUo Y29yZSkpDQo+ID4gKyAgICAgICAgICAgICByZXQgPSB2cHVfY29yZV9yZXN0b3JlKGNvcmUpOw0K PiA+ICsgICAgIGlmIChyZXQpDQo+ID4gKyAgICAgICAgICAgICBnb3RvIGVycl9jb3JlX2Jvb3Q7 DQo+ID4gKw0KPiA+ICsgICAgIHJldCA9IHZwdV9jb3JlX3JlZ2lzdGVyKGRldi0+cGFyZW50LCBj b3JlKTsNCj4gPiArICAgICBpZiAocmV0KQ0KPiA+ICsgICAgICAgICAgICAgZ290byBlcnJfY29y ZV9yZWdpc3RlcjsNCj4gPiArICAgICBjb3JlLT5wYXJlbnQgPSBkZXYtPnBhcmVudDsNCj4gPiAr DQo+ID4gKyAgICAgcG1fcnVudGltZV9wdXRfc3luYyhkZXYpOw0KPiA+ICsgICAgIHZwdV9jb3Jl X2NyZWF0ZV9kYmdmc19maWxlKGNvcmUpOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gMDsNCj4g PiArDQo+ID4gK2Vycl9jb3JlX3JlZ2lzdGVyOg0KPiA+ICsgICAgIHZwdV9jb3JlX3NodXRkb3du KGNvcmUpOw0KPiA+ICtlcnJfY29yZV9ib290Og0KPiA+ICsgICAgIHBtX3J1bnRpbWVfcHV0X3N5 bmMoZGV2KTsNCj4gPiArZXJyX3J1bnRpbWVfZGlzYWJsZToNCj4gPiArICAgICBwbV9ydW50aW1l X2Rpc2FibGUoZGV2KTsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIGludCB2cHVfY29yZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldikNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5k ZXY7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9jb3JlICpjb3JlID0gcGxhdGZvcm1fZ2V0X2RydmRh dGEocGRldik7DQo+ID4gKyAgICAgaW50IHJldDsNCj4gPiArDQo+ID4gKyAgICAgdnB1X2NvcmVf cmVtb3ZlX2RiZ2ZzX2ZpbGUoY29yZSk7DQo+ID4gKyAgICAgcmV0ID0gcG1fcnVudGltZV9nZXRf c3luYyhkZXYpOw0KPiA+ICsgICAgIFdBUk5fT04ocmV0IDwgMCk7DQo+ID4gKw0KPiA+ICsgICAg IHZwdV9jb3JlX3NodXRkb3duKGNvcmUpOw0KPiA+ICsgICAgIHBtX3J1bnRpbWVfcHV0X3N5bmMo ZGV2KTsNCj4gPiArICAgICBwbV9ydW50aW1lX2Rpc2FibGUoZGV2KTsNCj4gPiArDQo+ID4gKyAg ICAgdnB1X2NvcmVfdW5yZWdpc3Rlcihjb3JlLT5wYXJlbnQsIGNvcmUpOw0KPiA+ICsgICAgIGlv dW5tYXAoY29yZS0+ZncudmlydCk7DQo+ID4gKyAgICAgaW91bm1hcChjb3JlLT5ycGMudmlydCk7 DQo+ID4gKyAgICAgbXV0ZXhfZGVzdHJveSgmY29yZS0+bG9jayk7DQo+ID4gKyAgICAgbXV0ZXhf ZGVzdHJveSgmY29yZS0+Y21kX2xvY2spOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gMDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBfX21heWJlX3VudXNlZCB2cHVfY29yZV9ydW50 aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3Qg dnB1X2NvcmUgKmNvcmUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gPiArDQo+ID4gKyAgICAg cmV0dXJuIHZwdV9tYm94X3JlcXVlc3QoY29yZSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyBpbnQgX19tYXliZV91bnVzZWQgdnB1X2NvcmVfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZp Y2UgKmRldikNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB2cHVfY29yZSAqY29yZSA9IGRldl9n ZXRfZHJ2ZGF0YShkZXYpOw0KPiA+ICsNCj4gPiArICAgICB2cHVfbWJveF9mcmVlKGNvcmUpOw0K PiA+ICsgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB2cHVf Y29yZV9jYW5jZWxfd29yayhzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUpDQo+ID4gK3sNCj4gPiArICAg ICBzdHJ1Y3QgdnB1X2luc3QgKmluc3QgPSBOVUxMOw0KPiA+ICsNCj4gPiArICAgICBjYW5jZWxf d29ya19zeW5jKCZjb3JlLT5tc2dfd29yayk7DQo+ID4gKyAgICAgY2FuY2VsX2RlbGF5ZWRfd29y a19zeW5jKCZjb3JlLT5tc2dfZGVsYXllZF93b3JrKTsNCj4gPiArDQo+ID4gKyAgICAgbXV0ZXhf bG9jaygmY29yZS0+bG9jayk7DQo+ID4gKyAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeShpbnN0LCAm Y29yZS0+aW5zdGFuY2VzLCBsaXN0KQ0KPiA+ICsgICAgICAgICAgICAgY2FuY2VsX3dvcmtfc3lu YygmaW5zdC0+bXNnX3dvcmspOw0KPiA+ICsgICAgIG11dGV4X3VubG9jaygmY29yZS0+bG9jayk7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHZwdV9jb3JlX3Jlc3VtZV93b3JrKHN0 cnVjdCB2cHVfY29yZSAqY29yZSkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB2cHVfaW5zdCAq aW5zdCA9IE5VTEw7DQo+ID4gKyAgICAgdW5zaWduZWQgbG9uZyBkZWxheSA9IG1zZWNzX3RvX2pp ZmZpZXMoMTApOw0KPiA+ICsNCj4gPiArICAgICBxdWV1ZV93b3JrKGNvcmUtPndvcmtxdWV1ZSwg JmNvcmUtPm1zZ193b3JrKTsNCj4gPiArICAgICBxdWV1ZV9kZWxheWVkX3dvcmsoY29yZS0+d29y a3F1ZXVlLCAmY29yZS0+bXNnX2RlbGF5ZWRfd29yaywNCj4gZGVsYXkpOw0KPiA+ICsNCj4gPiAr ICAgICBtdXRleF9sb2NrKCZjb3JlLT5sb2NrKTsNCj4gPiArICAgICBsaXN0X2Zvcl9lYWNoX2Vu dHJ5KGluc3QsICZjb3JlLT5pbnN0YW5jZXMsIGxpc3QpDQo+ID4gKyAgICAgICAgICAgICBxdWV1 ZV93b3JrKGluc3QtPndvcmtxdWV1ZSwgJmluc3QtPm1zZ193b3JrKTsNCj4gPiArICAgICBtdXRl eF91bmxvY2soJmNvcmUtPmxvY2spOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IF9f bWF5YmVfdW51c2VkIHZwdV9jb3JlX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpDQo+ID4gK3sN Cj4gPiArICAgICBzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsN Cj4gPiArICAgICBpbnQgcmV0ID0gMDsNCj4gPiArDQo+ID4gKyAgICAgaWYgKCFjb3JlLT5yZXMt PnN0YW5kYWxvbmUpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiArDQo+ID4gKyAg ICAgbXV0ZXhfbG9jaygmY29yZS0+bG9jayk7DQo+ID4gKyAgICAgcG1fcnVudGltZV9nZXRfc3lu YyhkZXYpOw0KPiA+ICsgICAgIHZwdV9jb3JlX2dldF92cHUoY29yZSk7DQo+ID4gKyAgICAgaWYg KGNvcmUtPnN0YXRlICE9IFZQVV9DT1JFX1NOQVBTSE9UKQ0KPiA+ICsgICAgICAgICAgICAgZ290 byBleGl0Ow0KPiA+ICsNCj4gPiArICAgICBpZiAoIXZwdV9pZmFjZV9nZXRfcG93ZXJfc3RhdGUo Y29yZSkpIHsNCj4gPiArICAgICAgICAgICAgIGlmICghbGlzdF9lbXB0eSgmY29yZS0+aW5zdGFu Y2VzKSkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICByZXQgPSB2cHVfY29yZV9ib290KGNv cmUsIGZhbHNlKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkgew0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVfZXJyKGNvcmUsICIlcyBib290IGZhaWxc biIsIF9fZnVuY19fKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLT5z dGF0ZSA9IFZQVV9DT1JFX0RFSU5JVDsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBnb3RvIGV4aXQ7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIH0NCj4gPiArICAgICAgICAg ICAgICAgICAgICAgY29yZS0+c3RhdGUgPSBWUFVfQ09SRV9BQ1RJVkU7DQo+ID4gKyAgICAgICAg ICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBjb3JlLT5zdGF0ZSA9IFZQ VV9DT1JFX0RFSU5JVDsNCj4gPiArICAgICAgICAgICAgIH0NCj4gPiArICAgICB9IGVsc2Ugew0K PiA+ICsgICAgICAgICAgICAgaWYgKCFsaXN0X2VtcHR5KCZjb3JlLT5pbnN0YW5jZXMpKSB7DQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgIHJldCA9IHZwdV9jb3JlX3N3X3Jlc2V0KGNvcmUpOw0K PiA+ICsgICAgICAgICAgICAgICAgICAgICBpZiAocmV0KSB7DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29yZV9lcnIoY29yZSwgIiVzIHN3X3Jlc2V0IGZhaWxcbiIsDQo+IF9f ZnVuY19fKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLT5zdGF0ZSA9 IFZQVV9DT1JFX0hBTkc7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBl eGl0Ow0KPiA+ICsgICAgICAgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgICB9DQo+ ID4gKyAgICAgICAgICAgICBjb3JlLT5zdGF0ZSA9IFZQVV9DT1JFX0FDVElWRTsNCj4gPiArICAg ICB9DQo+ID4gKw0KPiA+ICtleGl0Og0KPiA+ICsgICAgIHBtX3J1bnRpbWVfcHV0X3N5bmMoZGV2 KTsNCj4gPiArICAgICBtdXRleF91bmxvY2soJmNvcmUtPmxvY2spOw0KPiA+ICsNCj4gPiArICAg ICB2cHVfY29yZV9yZXN1bWVfd29yayhjb3JlKTsNCj4gPiArICAgICByZXR1cm4gcmV0Ow0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIHZwdV9jb3JlX3N1c3Bl bmQoc3RydWN0IGRldmljZSAqZGV2KQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9jb3Jl ICpjb3JlID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQo+ID4gKyAgICAgaW50IHJldCA9IDA7DQo+ ID4gKw0KPiA+ICsgICAgIGlmICghY29yZS0+cmVzLT5zdGFuZGFsb25lKQ0KPiA+ICsgICAgICAg ICAgICAgcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICsgICAgIG11dGV4X2xvY2soJmNvcmUtPmxvY2sp Ow0KPiA+ICsgICAgIGlmIChjb3JlLT5zdGF0ZSA9PSBWUFVfQ09SRV9BQ1RJVkUpIHsNCj4gPiAr ICAgICAgICAgICAgIGlmICghbGlzdF9lbXB0eSgmY29yZS0+aW5zdGFuY2VzKSkgew0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICByZXQgPSB2cHVfY29yZV9zbmFwc2hvdChjb3JlKTsNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG11dGV4X3VubG9jaygmY29yZS0+bG9jayk7DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgfQ0K PiA+ICsgICAgICAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICAgICAgIGNvcmUtPnN0YXRl ID0gVlBVX0NPUkVfU05BUFNIT1Q7DQo+ID4gKyAgICAgfQ0KPiA+ICsgICAgIG11dGV4X3VubG9j aygmY29yZS0+bG9jayk7DQo+ID4gKw0KPiA+ICsgICAgIHZwdV9jb3JlX2NhbmNlbF93b3JrKGNv cmUpOw0KPiA+ICsNCj4gPiArICAgICBtdXRleF9sb2NrKCZjb3JlLT5sb2NrKTsNCj4gPiArICAg ICB2cHVfY29yZV9wdXRfdnB1KGNvcmUpOw0KPiA+ICsgICAgIG11dGV4X3VubG9jaygmY29yZS0+ bG9jayk7DQo+ID4gKyAgICAgcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHZwdV9jb3JlX3BtX29wcyA9IHsNCj4gPiArICAgICBT RVRfUlVOVElNRV9QTV9PUFModnB1X2NvcmVfcnVudGltZV9zdXNwZW5kLA0KPiB2cHVfY29yZV9y dW50aW1lX3Jlc3VtZSwgTlVMTCkNCj4gPiArICAgICBTRVRfU1lTVEVNX1NMRUVQX1BNX09QUyh2 cHVfY29yZV9zdXNwZW5kLCB2cHVfY29yZV9yZXN1bWUpDQo+ID4gK307DQo+ID4gKw0KPiA+ICtz dGF0aWMgc3RydWN0IHZwdV9jb3JlX3Jlc291cmNlcyBpbXg4cV9lbmMgPSB7DQo+ID4gKyAgICAg LnR5cGUgPSBWUFVfQ09SRV9UWVBFX0VOQywNCj4gPiArICAgICAuZnduYW1lID0gInZwdS92cHVf ZndfaW14OF9lbmMuYmluIiwNCj4gPiArICAgICAuc3RyaWRlID0gMTYsDQo+ID4gKyAgICAgLm1h eF93aWR0aCA9IDE5MjAsDQo+ID4gKyAgICAgLm1heF9oZWlnaHQgPSAxOTIwLA0KPiA+ICsgICAg IC5taW5fd2lkdGggPSA2NCwNCj4gPiArICAgICAubWluX2hlaWdodCA9IDQ4LA0KPiA+ICsgICAg IC5zdGVwX3dpZHRoID0gMiwNCj4gPiArICAgICAuc3RlcF9oZWlnaHQgPSAyLA0KPiA+ICsgICAg IC5ycGNfc2l6ZSA9IDB4ODAwMDAsDQo+ID4gKyAgICAgLmZ3bG9nX3NpemUgPSAweDgwMDAwLA0K PiA+ICsgICAgIC5hY3Rfc2l6ZSA9IDB4YzAwMDAsDQo+ID4gKyAgICAgLnN0YW5kYWxvbmUgPSB0 cnVlLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCB2cHVfY29yZV9yZXNvdXJj ZXMgaW14OHFfZGVjID0gew0KPiA+ICsgICAgIC50eXBlID0gVlBVX0NPUkVfVFlQRV9ERUMsDQo+ ID4gKyAgICAgLmZ3bmFtZSA9ICJ2cHUvdnB1X2Z3X2lteDhfZGVjLmJpbiIsDQo+ID4gKyAgICAg LnN0cmlkZSA9IDI1NiwNCj4gPiArICAgICAubWF4X3dpZHRoID0gODE4OCwNCj4gPiArICAgICAu bWF4X2hlaWdodCA9IDgxODgsDQo+ID4gKyAgICAgLm1pbl93aWR0aCA9IDE2LA0KPiA+ICsgICAg IC5taW5faGVpZ2h0ID0gMTYsDQo+ID4gKyAgICAgLnN0ZXBfd2lkdGggPSAxLA0KPiA+ICsgICAg IC5zdGVwX2hlaWdodCA9IDEsDQo+ID4gKyAgICAgLnJwY19zaXplID0gMHg4MDAwMCwNCj4gPiAr ICAgICAuZndsb2dfc2l6ZSA9IDB4ODAwMDAsDQo+ID4gKyAgICAgLnN0YW5kYWxvbmUgPSB0cnVl LA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQg dnB1X2NvcmVfZHRfbWF0Y2hbXSA9IHsNCj4gPiArICAgICB7IC5jb21wYXRpYmxlID0gIm54cCxp bXg4cS12cHUtZW5jb2RlciIsIC5kYXRhID0gJmlteDhxX2VuYyB9LA0KPiA+ICsgICAgIHsgLmNv bXBhdGlibGUgPSAibnhwLGlteDhxLXZwdS1kZWNvZGVyIiwgLmRhdGEgPSAmaW14OHFfZGVjIH0s DQo+ID4gKyAgICAge30NCj4gPiArfTsNCj4gPiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgdnB1 X2NvcmVfZHRfbWF0Y2gpOw0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2 ZXIgYW1waGlvbl92cHVfY29yZV9kcml2ZXIgPSB7DQo+ID4gKyAgICAgLnByb2JlID0gdnB1X2Nv cmVfcHJvYmUsDQo+ID4gKyAgICAgLnJlbW92ZSA9IHZwdV9jb3JlX3JlbW92ZSwNCj4gPiArICAg ICAuZHJpdmVyID0gew0KPiA+ICsgICAgICAgICAgICAgLm5hbWUgPSAiYW1waGlvbi12cHUtY29y ZSIsDQo+ID4gKyAgICAgICAgICAgICAub2ZfbWF0Y2hfdGFibGUgPSB2cHVfY29yZV9kdF9tYXRj aCwNCj4gPiArICAgICAgICAgICAgIC5wbSA9ICZ2cHVfY29yZV9wbV9vcHMsDQo+ID4gKyAgICAg fSwNCj4gPiArfTsNCj4gPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihhbXBoaW9uX3ZwdV9jb3Jl X2RyaXZlcik7DQo+ID4gKw0KPiA+ICtNT0RVTEVfQVVUSE9SKCJGcmVlc2NhbGUgU2VtaWNvbmR1 Y3RvciwgSW5jLiIpOw0KPiA+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkxpbnV4IFZQVSBkcml2ZXIg Zm9yIEZyZWVzY2FsZSBpLk1YOFEiKTsNCj4gPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOw0K PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X2NvcmUu aA0KPiBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVfY29yZS5oDQo+ID4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjEyODgwZTJlMTRiMg0K PiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhp b24vdnB1X2NvcmUuaA0KPiA+IEBAIC0wLDAgKzEsMTYgQEANCj4gPiArLyogU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjAgKi8NCj4gPiArLyoNCj4gPiArICogQ29weXJpZ2h0IDIwMjAt MjAyMSBOWFANCj4gPiArICovDQo+ID4gKw0KPiA+ICsjaWZuZGVmIF9BTVBISU9OX1ZQVV9DT1JF X0gNCj4gPiArI2RlZmluZSBfQU1QSElPTl9WUFVfQ09SRV9IDQo+ID4gKw0KPiA+ICt2b2lkIGNz cl93cml0ZWwoc3RydWN0IHZwdV9jb3JlICpjb3JlLCB1MzIgcmVnLCB1MzIgdmFsKTsNCj4gPiAr dTMyIGNzcl9yZWFkbChzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUsIHUzMiByZWcpOw0KPiA+ICtpbnQg dnB1X2FsbG9jX2RtYShzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUsIHN0cnVjdCB2cHVfYnVmZmVyICpi dWYpOw0KPiA+ICt2b2lkIHZwdV9mcmVlX2RtYShzdHJ1Y3QgdnB1X2J1ZmZlciAqYnVmKTsNCj4g PiArc3RydWN0IHZwdV9pbnN0ICp2cHVfY29yZV9maW5kX2luc3RhbmNlKHN0cnVjdCB2cHVfY29y ZSAqY29yZSwgdTMyIGluZGV4KTsNCj4gPiAraW50IHZwdV9jb3JlX2NoZWNrX2ZtdChzdHJ1Y3Qg dnB1X2NvcmUgKmNvcmUsIHUzMiBwaXhlbGZtdCk7DQo+ID4gKw0KPiA+ICsjZW5kaWYNCj4gPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV9kYmcuYw0KPiBi L2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVfZGJnLmMNCj4gPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uNGRiZmJkNmQyZjQ2DQo+ID4gLS0t IC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVf ZGJnLmMNCj4gPiBAQCAtMCwwICsxLDQ5NiBAQA0KPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMA0KPiA+ICsvKg0KPiA+ICsgKiBDb3B5cmlnaHQgMjAyMC0yMDIxIE5YUA0K PiA+ICsgKi8NCj4gPiArDQo+ID4gKyNkZWZpbmUgVEFHICAgICAgICAgICJERUJVRyINCj4gPiAr DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9kZXZp Y2UuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51 eC9saXN0Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCj4gPiArI2luY2x1ZGUg PGxpbnV4L2tlcm5lbC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4NCj4gPiArI2lu Y2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4NCj4gPiArI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2 aWNlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+DQo+ID4gKyNpbmNsdWRlICJ2 cHUuaCINCj4gPiArI2luY2x1ZGUgInZwdV9kZWZzLmgiDQo+ID4gKyNpbmNsdWRlICJ2cHVfaGVs cGVycy5oIg0KPiA+ICsjaW5jbHVkZSAidnB1X2NtZHMuaCINCj4gPiArI2luY2x1ZGUgInZwdV9y cGMuaCINCj4gPiArI2luY2x1ZGUgInZwdV9sb2cuaCINCj4gPiArDQo+ID4gK3N0cnVjdCBwcmlu dF9idWZfZGVzYyB7DQo+ID4gKyAgICAgdTMyIHN0YXJ0X2hfcGh5Ow0KPiA+ICsgICAgIHUzMiBz dGFydF9oX3ZpcjsNCj4gPiArICAgICB1MzIgc3RhcnRfbTsNCj4gPiArICAgICB1MzIgYnl0ZXM7 DQo+ID4gKyAgICAgdTMyIHJlYWQ7DQo+ID4gKyAgICAgdTMyIHdyaXRlOw0KPiA+ICsgICAgIGNo YXIgYnVmZmVyWzBdOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNoYXIgKnZiMl9zdGF0 X25hbWVbXSA9IHsNCj4gPiArICAgICBbVkIyX0JVRl9TVEFURV9ERVFVRVVFRF0gPSAiZGVxdWV1 ZWQiLA0KPiA+ICsgICAgIFtWQjJfQlVGX1NUQVRFX0lOX1JFUVVFU1RdID0gImluX3JlcXVlc3Qi LA0KPiA+ICsgICAgIFtWQjJfQlVGX1NUQVRFX1BSRVBBUklOR10gPSAicHJlcGFyaW5nIiwNCj4g PiArICAgICBbVkIyX0JVRl9TVEFURV9RVUVVRURdID0gInF1ZXVlZCIsDQo+ID4gKyAgICAgW1ZC Ml9CVUZfU1RBVEVfQUNUSVZFXSA9ICJhY3RpdmUiLA0KPiA+ICsgICAgIFtWQjJfQlVGX1NUQVRF X0RPTkVdID0gImRvbmUiLA0KPiA+ICsgICAgIFtWQjJfQlVGX1NUQVRFX0VSUk9SXSA9ICJlcnJv ciIsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgY2hhciAqdnB1X3N0YXRfbmFtZVtdID0g ew0KPiA+ICsgICAgIFtWUFVfQlVGX1NUQVRFX0lETEVdID0gImlkbGUiLA0KPiA+ICsgICAgIFtW UFVfQlVGX1NUQVRFX0lOVVNFXSA9ICJpbnVzZSIsDQo+ID4gKyAgICAgW1ZQVV9CVUZfU1RBVEVf REVDT0RFRF0gPSAiZGVjb2RlZCIsDQo+ID4gKyAgICAgW1ZQVV9CVUZfU1RBVEVfUkVBRFldID0g InJlYWR5IiwNCj4gPiArICAgICBbVlBVX0JVRl9TVEFURV9TS0lQXSA9ICJza2lwIiwNCj4gPiAr ICAgICBbVlBVX0JVRl9TVEFURV9FUlJPUl0gPSAiZXJyb3IiLA0KPiA+ICt9Ow0KPiA+ICsNCj4g PiArc3RhdGljIGludCB2cHVfZGJnX2luc3RhbmNlKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAq ZGF0YSkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB2cHVfaW5zdCAqaW5zdCA9IHMtPnByaXZh dGU7DQo+ID4gKyAgICAgY2hhciBzdHJbMTI4XTsNCj4gPiArICAgICBpbnQgbnVtOw0KPiA+ICsg ICAgIHN0cnVjdCB2YjJfcXVldWUgKnZxOw0KPiA+ICsgICAgIGludCBpOw0KPiA+ICsNCj4gPiAr ICAgICBudW0gPSBzY25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIlslc11cbiIsDQo+IHZwdV9j b3JlX3R5cGVfZGVzYyhpbnN0LT50eXBlKSk7DQo+ID4gKyAgICAgaWYgKHNlcV93cml0ZShzLCBz dHIsIG51bSkpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiArDQo+ID4gKyAgICAg bnVtID0gc2NucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICJ0Z2lnID0gJWQscGlkID0gJWRcbiIs IGluc3QtPnRnaWQsDQo+IGluc3QtPnBpZCk7DQo+ID4gKyAgICAgaWYgKHNlcV93cml0ZShzLCBz dHIsIG51bSkpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiArICAgICBudW0gPSBz Y25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgInN0YXRlID0gJWRcbiIsIGluc3QtPnN0YXRlKTsN Cj4gPiArICAgICBpZiAoc2VxX3dyaXRlKHMsIHN0ciwgbnVtKSkNCj4gPiArICAgICAgICAgICAg IHJldHVybiAwOw0KPiA+ICsgICAgIG51bSA9IHNjbnByaW50ZihzdHIsIHNpemVvZihzdHIpLA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAibWluX2J1ZmZlcl9vdXQgPSAlZCwgbWluX2J1ZmZl cl9jYXAgPSAlZFxuIiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgaW5zdC0+bWluX2J1ZmZl cl9vdXQsIGluc3QtPm1pbl9idWZmZXJfY2FwKTsNCj4gPiArICAgICBpZiAoc2VxX3dyaXRlKHMs IHN0ciwgbnVtKSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAwOw0KPiA+ICsNCj4gPiArDQo+ ID4gKyAgICAgdnEgPSB2NGwyX20ybV9nZXRfc3JjX3ZxKGluc3QtPm0ybV9jdHgpOw0KPiA+ICsg ICAgIG51bSA9IHNjbnByaW50ZihzdHIsIHNpemVvZihzdHIpLA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAib3V0cHV0KCVkKSA6IGZtdCA9ICVjJWMlYyVjICVkIHggJWQsICVkOyIsDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgIHZiMl9pc19zdHJlYW1pbmcodnEpLA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICBpbnN0LT5vdXRfZm9ybWF0LnBpeGZtdCwNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgaW5zdC0+b3V0X2Zvcm1hdC5waXhmbXQgPj4gOCwNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgaW5zdC0+b3V0X2Zvcm1hdC5waXhmbXQgPj4gMTYsDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgIGluc3QtPm91dF9mb3JtYXQucGl4Zm10ID4+IDI0LA0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICBpbnN0LT5vdXRfZm9ybWF0LndpZHRoLA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICBpbnN0LT5vdXRfZm9ybWF0LmhlaWdodCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAg dnEtPmxhc3RfYnVmZmVyX2RlcXVldWVkKTsNCj4gPiArICAgICBpZiAoc2VxX3dyaXRlKHMsIHN0 ciwgbnVtKSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAwOw0KPiA+ICsgICAgIGZvciAoaSA9 IDA7IGkgPCBpbnN0LT5vdXRfZm9ybWF0Lm51bV9wbGFuZXM7IGkrKykgew0KPiA+ICsgICAgICAg ICAgICAgbnVtID0gc2NucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIgJWQoJWQpIiwNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0LT5vdXRfZm9ybWF0LnNpemVpbWFnZVtp XSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0LT5vdXRfZm9ybWF0LmJ5 dGVzcGVybGluZVtpXSk7DQo+ID4gKyAgICAgICAgICAgICBpZiAoc2VxX3dyaXRlKHMsIHN0ciwg bnVtKSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7DQo+ID4gKyAgICAgfQ0K PiA+ICsgICAgIGlmIChzZXFfd3JpdGUocywgIlxuIiwgMSkpDQo+ID4gKyAgICAgICAgICAgICBy ZXR1cm4gMDsNCj4gPiArDQo+ID4gKyAgICAgdnEgPSB2NGwyX20ybV9nZXRfZHN0X3ZxKGluc3Qt Pm0ybV9jdHgpOw0KPiA+ICsgICAgIG51bSA9IHNjbnByaW50ZihzdHIsIHNpemVvZihzdHIpLA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAiY2FwdHVyZSglZCk6IGZtdCA9ICVjJWMlYyVjICVk IHggJWQsICVkOyIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHZiMl9pc19zdHJlYW1pbmco dnEpLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBpbnN0LT5jYXBfZm9ybWF0LnBpeGZtdCwN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgaW5zdC0+Y2FwX2Zvcm1hdC5waXhmbXQgPj4gOCwN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgaW5zdC0+Y2FwX2Zvcm1hdC5waXhmbXQgPj4gMTYs DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGluc3QtPmNhcF9mb3JtYXQucGl4Zm10ID4+IDI0 LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBpbnN0LT5jYXBfZm9ybWF0LndpZHRoLA0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICBpbnN0LT5jYXBfZm9ybWF0LmhlaWdodCwNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgdnEtPmxhc3RfYnVmZmVyX2RlcXVldWVkKTsNCj4gPiArICAgICBp ZiAoc2VxX3dyaXRlKHMsIHN0ciwgbnVtKSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAwOw0K PiA+ICsgICAgIGZvciAoaSA9IDA7IGkgPCBpbnN0LT5jYXBfZm9ybWF0Lm51bV9wbGFuZXM7IGkr Kykgew0KPiA+ICsgICAgICAgICAgICAgbnVtID0gc2NucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciks ICIgJWQoJWQpIiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0LT5jYXBf Zm9ybWF0LnNpemVpbWFnZVtpXSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnN0LT5jYXBfZm9ybWF0LmJ5dGVzcGVybGluZVtpXSk7DQo+ID4gKyAgICAgICAgICAgICBpZiAo c2VxX3dyaXRlKHMsIHN0ciwgbnVtKSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJu IDA7DQo+ID4gKyAgICAgfQ0KPiA+ICsgICAgIGlmIChzZXFfd3JpdGUocywgIlxuIiwgMSkpDQo+ ID4gKyAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiArICAgICBudW0gPSBzY25wcmludGYoc3Ry LCBzaXplb2Yoc3RyKSwgImNyb3A6ICglZCwgJWQpICVkIHggJWRcbiIsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgIGluc3QtPmNyb3AubGVmdCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAg aW5zdC0+Y3JvcC50b3AsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGluc3QtPmNyb3Aud2lk dGgsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGluc3QtPmNyb3AuaGVpZ2h0KTsNCj4gPiAr ICAgICBpZiAoc2VxX3dyaXRlKHMsIHN0ciwgbnVtKSkNCj4gPiArICAgICAgICAgICAgIHJldHVy biAwOw0KPiA+ICsNCj4gPiArICAgICB2cSA9IHY0bDJfbTJtX2dldF9zcmNfdnEoaW5zdC0+bTJt X2N0eCk7DQo+ID4gKyAgICAgZm9yIChpID0gMDsgaSA8IHZxLT5udW1fYnVmZmVyczsgaSsrKSB7 DQo+ID4gKyAgICAgICAgICAgICBzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIgPSB2cS0+YnVmc1tpXTsN Cj4gPiArICAgICAgICAgICAgIHN0cnVjdCB2YjJfdjRsMl9idWZmZXIgKnZidWYgPSB0b192YjJf djRsMl9idWZmZXIodmIpOw0KPiA+ICsgICAgICAgICAgICAgc3RydWN0IHZwdV92YjJfYnVmZmVy ICp2cHVfYnVmID0gdG9fdnB1X3ZiMl9idWZmZXIodmJ1Zik7DQo+ID4gKw0KPiA+ICsgICAgICAg ICAgICAgaWYgKHZiLT5zdGF0ZSA9PSBWQjJfQlVGX1NUQVRFX0RFUVVFVUVEKQ0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICBjb250aW51ZTsNCj4gPiArICAgICAgICAgICAgIG51bSA9IHNjbnBy aW50ZihzdHIsIHNpemVvZihzdHIpLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJvdXRwdXQgWyUyZF0gc3RhdGUgPSAlMTBzLCAlOHNcbiIsDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaSwgdmIyX3N0YXRfbmFtZVt2Yi0+c3RhdGVdLA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZwdV9zdGF0X25hbWVbdnB1X2J1Zi0+c3RhdGVdKTsNCj4g PiArICAgICAgICAgICAgIGlmIChzZXFfd3JpdGUocywgc3RyLCBudW0pKQ0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIHZx ID0gdjRsMl9tMm1fZ2V0X2RzdF92cShpbnN0LT5tMm1fY3R4KTsNCj4gPiArICAgICBmb3IgKGkg PSAwOyBpIDwgdnEtPm51bV9idWZmZXJzOyBpKyspIHsNCj4gPiArICAgICAgICAgICAgIHN0cnVj dCB2YjJfYnVmZmVyICp2YiA9IHZxLT5idWZzW2ldOw0KPiA+ICsgICAgICAgICAgICAgc3RydWN0 IHZiMl92NGwyX2J1ZmZlciAqdmJ1ZiA9IHRvX3ZiMl92NGwyX2J1ZmZlcih2Yik7DQo+ID4gKyAg ICAgICAgICAgICBzdHJ1Y3QgdnB1X3ZiMl9idWZmZXIgKnZwdV9idWYgPSB0b192cHVfdmIyX2J1 ZmZlcih2YnVmKTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICBpZiAodmItPnN0YXRlID09IFZC Ml9CVUZfU1RBVEVfREVRVUVVRUQpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl Ow0KPiA+ICsgICAgICAgICAgICAgbnVtID0gc2NucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhcHR1cmVbJTJkXSBzdGF0ZSA9ICUx MHMsICU4c1xuIiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLCB2YjJfc3Rh dF9uYW1lW3ZiLT5zdGF0ZV0sDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnB1 X3N0YXRfbmFtZVt2cHVfYnVmLT5zdGF0ZV0pOw0KPiA+ICsgICAgICAgICAgICAgaWYgKHNlcV93 cml0ZShzLCBzdHIsIG51bSkpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOw0K PiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgbnVtID0gc2NucHJpbnRmKHN0ciwgc2l6ZW9m KHN0ciksICJzZXF1ZW5jZSA9ICVkXG4iLCBpbnN0LT5zZXF1ZW5jZSk7DQo+ID4gKyAgICAgaWYg KHNlcV93cml0ZShzLCBzdHIsIG51bSkpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gMDsNCj4g PiArDQo+ID4gKyAgICAgaWYgKGluc3QtPnVzZV9zdHJlYW1fYnVmZmVyKSB7DQo+ID4gKyAgICAg ICAgICAgICBudW0gPSBzY25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgInN0cmVhbV9idWZmZXIg PSAlZCAvICVkLA0KPiA8JXBhZCwgMHgleD5cbiIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdnB1X2hlbHBlcl9nZXRfdXNlZF9zcGFjZShpbnN0KSwNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnN0LT5zdHJlYW1fYnVmZmVyLmxlbmd0aCwNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5zdC0+c3RyZWFtX2J1ZmZlci5waHlzLA0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3QtPnN0cmVhbV9idWZmZXIubGVuZ3Ro KTsNCj4gPiArICAgICAgICAgICAgIGlmIChzZXFfd3JpdGUocywgc3RyLCBudW0pKQ0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiArICAgICB9DQo+ID4gKyAgICAgbnVt ID0gc2NucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICJrZmlmbyBsZW4gPSAweCV4XG4iLA0KPiBr Zmlmb19sZW4oJmluc3QtPm1zZ19maWZvKSk7DQo+ID4gKyAgICAgaWYgKHNlcV93cml0ZShzLCBz dHIsIG51bSkpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiArDQo+ID4gKyAgICAg bnVtID0gc2NucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICJmbG93IDpcbiIpOw0KPiA+ICsgICAg IGlmIChzZXFfd3JpdGUocywgc3RyLCBudW0pKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIDA7 DQo+ID4gKw0KPiA+ICsgICAgIG11dGV4X2xvY2soJmluc3QtPmNvcmUtPmNtZF9sb2NrKTsNCj4g PiArICAgICBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbnN0LT5mbG93cyk7IGkrKykgew0K PiA+ICsgICAgICAgICAgICAgdTMyIGlkeCA9IChpbnN0LT5mbG93X2lkeCArIGkpICUgKEFSUkFZ X1NJWkUoaW5zdC0+Zmxvd3MpKTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICBpZiAoIWluc3Qt PmZsb3dzW2lkeF0pDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KPiA+ICsg ICAgICAgICAgICAgbnVtID0gc2NucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICJcdFslc10weCV4 XG4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3QtPmZsb3dzW2lkeF0g Pj0gVlBVX01TR19JRF9OT09QID8NCj4gIk0iIDogIkMiLA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGluc3QtPmZsb3dzW2lkeF0pOw0KPiA+ICsgICAgICAgICAgICAgaWYgKHNl cV93cml0ZShzLCBzdHIsIG51bSkpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgbXV0ZXhf dW5sb2NrKCZpbnN0LT5jb3JlLT5jbWRfbG9jayk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAg IHJldHVybiAwOw0KPiA+ICsgICAgICAgICAgICAgfQ0KPiA+ICsgICAgIH0NCj4gPiArICAgICBt dXRleF91bmxvY2soJmluc3QtPmNvcmUtPmNtZF9sb2NrKTsNCj4gPiArDQo+ID4gKyAgICAgaSA9 IDA7DQo+ID4gKyAgICAgd2hpbGUgKHRydWUpIHsNCj4gPiArICAgICAgICAgICAgIG51bSA9IGNh bGxfdm9wKGluc3QsIGdldF9kZWJ1Z19pbmZvLCBzdHIsIHNpemVvZihzdHIpLCBpKyspOw0KPiA+ ICsgICAgICAgICAgICAgaWYgKG51bSA8PSAwKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBi cmVhazsNCj4gPiArICAgICAgICAgICAgIGlmIChzZXFfd3JpdGUocywgc3RyLCBudW0pKQ0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ ICsgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZwdV9kYmdf Y29yZShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpDQo+ID4gK3sNCj4gPiArICAgICBz dHJ1Y3QgdnB1X2NvcmUgKmNvcmUgPSBzLT5wcml2YXRlOw0KPiA+ICsgICAgIHN0cnVjdCB2cHVf c2hhcmVkX2FkZHIgKmlmYWNlID0gY29yZS0+aWZhY2U7DQo+ID4gKyAgICAgY2hhciBzdHJbMTI4 XTsNCj4gPiArICAgICBpbnQgbnVtOw0KPiA+ICsNCj4gPiArICAgICBudW0gPSBzY25wcmludGYo c3RyLCBzaXplb2Yoc3RyKSwgIlslc11cbiIsDQo+IHZwdV9jb3JlX3R5cGVfZGVzYyhjb3JlLT50 eXBlKSk7DQo+ID4gKyAgICAgaWYgKHNlcV93cml0ZShzLCBzdHIsIG51bSkpDQo+ID4gKyAgICAg ICAgICAgICByZXR1cm4gMDsNCj4gPiArDQo+ID4gKyAgICAgbnVtID0gc2NucHJpbnRmKHN0ciwg c2l6ZW9mKHN0ciksICJib290X3JlZ2lvbiAgPSA8JXBhZCwgMHgleD5cbiIsDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICZjb3JlLT5mdy5waHlzLCBjb3JlLT5mdy5sZW5ndGgpOw0KPiA+ICsg ICAgIGlmIChzZXFfd3JpdGUocywgc3RyLCBudW0pKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJu IDA7DQo+ID4gKyAgICAgbnVtID0gc2NucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICJycGNfcmVn aW9uICAgPSA8JXBhZCwgMHgleD4gdXNlZCA9DQo+IDB4JXhcbiIsDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICZjb3JlLT5ycGMucGh5cywgY29yZS0+cnBjLmxlbmd0aCwNCj4gY29yZS0+cnBj LmJ5dGVzdXNlZCk7DQo+ID4gKyAgICAgaWYgKHNlcV93cml0ZShzLCBzdHIsIG51bSkpDQo+ID4g KyAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiArICAgICBudW0gPSBzY25wcmludGYoc3RyLCBz aXplb2Yoc3RyKSwgImZ3bG9nX3JlZ2lvbiA9IDwlcGFkLCAweCV4PlxuIiwNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgJmNvcmUtPmxvZy5waHlzLCBjb3JlLT5sb2cubGVuZ3RoKTsNCj4gPiAr ICAgICBpZiAoc2VxX3dyaXRlKHMsIHN0ciwgbnVtKSkNCj4gPiArICAgICAgICAgICAgIHJldHVy biAwOw0KPiA+ICsNCj4gPiArICAgICBudW0gPSBzY25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwg InN0YXRlID0gJWRcbiIsIGNvcmUtPnN0YXRlKTsNCj4gPiArICAgICBpZiAoc2VxX3dyaXRlKHMs IHN0ciwgbnVtKSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAwOw0KPiA+ICsgICAgIGlmIChj b3JlLT5zdGF0ZSA9PSBWUFVfQ09SRV9ERUlOSVQpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4g MDsNCj4gPiArICAgICBudW0gPSBzY25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgImZ3IHZlcnNp b24gPSAlZC4lZC4lZFxuIiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29y ZS0+ZndfdmVyc2lvbiA+PiAxNikgJiAweGZmLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChjb3JlLT5md192ZXJzaW9uID4+IDgpICYgMHhmZiwNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb3JlLT5md192ZXJzaW9uICYgMHhmZik7DQo+ID4gKyAgICAgaWYg KHNlcV93cml0ZShzLCBzdHIsIG51bSkpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gMDsNCj4g PiArICAgICBudW0gPSBzY25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgImluc3RhbmNlcyA9ICVk LyVkICgweCUwMmx4KSwgJWRcbiIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGh3ZWlnaHQz Mihjb3JlLT5pbnN0YW5jZV9tYXNrKSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgY29yZS0+ c3VwcG9ydGVkX2luc3RhbmNlX2NvdW50LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBjb3Jl LT5pbnN0YW5jZV9tYXNrLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBjb3JlLT5yZXF1ZXN0 X2NvdW50KTsNCj4gPiArICAgICBpZiAoc2VxX3dyaXRlKHMsIHN0ciwgbnVtKSkNCj4gPiArICAg ICAgICAgICAgIHJldHVybiAwOw0KPiA+ICsgICAgIG51bSA9IHNjbnByaW50ZihzdHIsIHNpemVv ZihzdHIpLCAia2ZpZm8gbGVuID0gMHgleFxuIiwNCj4ga2ZpZm9fbGVuKCZjb3JlLT5tc2dfZmlm bykpOw0KPiA+ICsgICAgIGlmIChzZXFfd3JpdGUocywgc3RyLCBudW0pKQ0KPiA+ICsgICAgICAg ICAgICAgcmV0dXJuIDA7DQo+ID4gKyAgICAgbnVtID0gc2NucHJpbnRmKHN0ciwgc2l6ZW9mKHN0 ciksDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICJjbWRfYnVmOlsweCV4LCAweCV4XSwgd3B0 ciA9IDB4JXgsIHJwdHIgPQ0KPiAweCV4XG4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBp ZmFjZS0+Y21kX2Rlc2MtPnN0YXJ0LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBpZmFjZS0+ Y21kX2Rlc2MtPmVuZCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgaWZhY2UtPmNtZF9kZXNj LT53cHRyLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBpZmFjZS0+Y21kX2Rlc2MtPnJwdHIp Ow0KPiA+ICsgICAgIGlmIChzZXFfd3JpdGUocywgc3RyLCBudW0pKQ0KPiA+ICsgICAgICAgICAg ICAgcmV0dXJuIDA7DQo+ID4gKyAgICAgbnVtID0gc2NucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciks DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICJtc2dfYnVmOlsweCV4LCAweCV4XSwgd3B0ciA9 IDB4JXgsIHJwdHIgPQ0KPiAweCV4XG4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBpZmFj ZS0+bXNnX2Rlc2MtPnN0YXJ0LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBpZmFjZS0+bXNn X2Rlc2MtPmVuZCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgaWZhY2UtPm1zZ19kZXNjLT53 cHRyLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBpZmFjZS0+bXNnX2Rlc2MtPnJwdHIpOw0K PiA+ICsgICAgIGlmIChzZXFfd3JpdGUocywgc3RyLCBudW0pKQ0KPiA+ICsgICAgICAgICAgICAg cmV0dXJuIDA7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtzdGF0aWMgaW50IHZwdV9kYmdfZndsb2coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRh KQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9jb3JlICpjb3JlID0gcy0+cHJpdmF0ZTsN Cj4gPiArICAgICBzdHJ1Y3QgcHJpbnRfYnVmX2Rlc2MgKnByaW50X2J1ZjsNCj4gPiArICAgICBp bnQgbGVuZ3RoOw0KPiA+ICsgICAgIHUzMiBycHRyOw0KPiA+ICsgICAgIHUzMiB3cHRyOw0KPiA+ ICsgICAgIGludCByZXQgPSAwOw0KPiA+ICsNCj4gPiArICAgICBpZiAoIWNvcmUtPmxvZy52aXJ0 IHx8IGNvcmUtPnN0YXRlID09IFZQVV9DT1JFX0RFSU5JVCkNCj4gPiArICAgICAgICAgICAgIHJl dHVybiAwOw0KPiA+ICsNCj4gPiArICAgICBwcmludF9idWYgPSBjb3JlLT5sb2cudmlydDsNCj4g PiArICAgICBycHRyID0gcHJpbnRfYnVmLT5yZWFkOw0KPiA+ICsgICAgIHdwdHIgPSBwcmludF9i dWYtPndyaXRlOw0KPiA+ICsNCj4gPiArICAgICBpZiAocnB0ciA9PSB3cHRyKQ0KPiA+ICsgICAg ICAgICAgICAgcmV0dXJuIDA7DQo+ID4gKyAgICAgZWxzZSBpZiAocnB0ciA8IHdwdHIpDQo+ID4g KyAgICAgICAgICAgICBsZW5ndGggPSB3cHRyIC0gcnB0cjsNCj4gPiArICAgICBlbHNlDQo+ID4g KyAgICAgICAgICAgICBsZW5ndGggPSBwcmludF9idWYtPmJ5dGVzICsgd3B0ciAtIHJwdHI7DQo+ ID4gKw0KPiA+ICsgICAgIGlmIChzLT5jb3VudCArIGxlbmd0aCA+PSBzLT5zaXplKSB7DQo+ID4g KyAgICAgICAgICAgICBzLT5jb3VudCA9IHMtPnNpemU7DQo+ID4gKyAgICAgICAgICAgICByZXR1 cm4gMDsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIGlmIChycHRyICsgbGVuZ3RoID49 IHByaW50X2J1Zi0+Ynl0ZXMpIHsNCj4gPiArICAgICAgICAgICAgIGludCBudW0gPSBwcmludF9i dWYtPmJ5dGVzIC0gcnB0cjsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICBpZiAoc2VxX3dyaXRl KHMsIHByaW50X2J1Zi0+YnVmZmVyICsgcnB0ciwgbnVtKSkNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgcmV0ID0gLTE7DQo+ID4gKyAgICAgICAgICAgICBsZW5ndGggLT0gbnVtOw0KPiA+ICsg ICAgICAgICAgICAgcnB0ciA9IDA7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBpZiAo bGVuZ3RoKSB7DQo+ID4gKyAgICAgICAgICAgICBpZiAoc2VxX3dyaXRlKHMsIHByaW50X2J1Zi0+ YnVmZmVyICsgcnB0ciwgbGVuZ3RoKSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgcmV0ID0g LTE7DQo+ID4gKyAgICAgICAgICAgICBycHRyICs9IGxlbmd0aDsNCj4gPiArICAgICB9DQo+ID4g KyAgICAgaWYgKCFyZXQpDQo+ID4gKyAgICAgICAgICAgICBwcmludF9idWYtPnJlYWQgPSBycHRy Ow0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IGludCB2cHVfZGJnX2luc3Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAq ZmlscCkNCj4gPiArew0KPiA+ICsgICAgIHJldHVybiBzaW5nbGVfb3BlbihmaWxwLCB2cHVfZGJn X2luc3RhbmNlLCBpbm9kZS0+aV9wcml2YXRlKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IHNzaXplX3QgdnB1X2RiZ19pbnN0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsIHNpemVfdCBzaXpl LCBsb2ZmX3QNCj4gKnBwb3MpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3Qgc2VxX2ZpbGUgKnMg PSBmaWxlLT5wcml2YXRlX2RhdGE7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9pbnN0ICppbnN0ID0g cy0+cHJpdmF0ZTsNCj4gPiArDQo+ID4gKyAgICAgdnB1X3Nlc3Npb25fZGVidWcoaW5zdCk7DQo+ ID4gKw0KPiA+ICsgICAgIHJldHVybiBzaXplOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg c3NpemVfdCB2cHVfZGJnX2NvcmVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1Ziwgc2l6ZV90IHNpemUs IGxvZmZfdA0KPiAqcHBvcykNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCBzZXFfZmlsZSAqcyA9 IGZpbGUtPnByaXZhdGVfZGF0YTsNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUgPSBz LT5wcml2YXRlOw0KPiA+ICsNCj4gPiArICAgICBwbV9ydW50aW1lX2dldF9zeW5jKGNvcmUtPmRl dik7DQo+ID4gKyAgICAgbXV0ZXhfbG9jaygmY29yZS0+bG9jayk7DQo+ID4gKyAgICAgaWYgKGNv cmUtPnN0YXRlICE9IFZQVV9DT1JFX0RFSU5JVCAmJiAhY29yZS0+aW5zdGFuY2VfbWFzaykgew0K PiA+ICsgICAgICAgICAgICAgY29yZV9kYmcoY29yZSwgTFZMX0lORk8sICJyZXNldCBjb3JlXG4i KTsNCj4gPiArICAgICAgICAgICAgIGlmICghdnB1X2NvcmVfc3dfcmVzZXQoY29yZSkpIHsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgY29yZS0+c3RhdGUgPSBWUFVfQ09SRV9BQ1RJVkU7DQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgIGNvcmUtPmhhbmdfbWFzayA9IDA7DQo+ID4gKyAgICAg ICAgICAgICB9DQo+ID4gKyAgICAgfQ0KPiA+ICsgICAgIG11dGV4X3VubG9jaygmY29yZS0+bG9j ayk7DQo+ID4gKyAgICAgcG1fcnVudGltZV9wdXRfc3luYyhjb3JlLT5kZXYpOw0KPiA+ICsNCj4g PiArICAgICByZXR1cm4gc2l6ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2cHVf ZGJnX2NvcmVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkNCj4g PiArew0KPiA+ICsgICAgIHJldHVybiBzaW5nbGVfb3BlbihmaWxwLCB2cHVfZGJnX2NvcmUsIGlu b2RlLT5pX3ByaXZhdGUpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZwdV9kYmdf Zndsb2dfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkNCj4gPiAr ew0KPiA+ICsgICAgIHJldHVybiBzaW5nbGVfb3BlbihmaWxwLCB2cHVfZGJnX2Z3bG9nLCBpbm9k ZS0+aV9wcml2YXRlKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBm aWxlX29wZXJhdGlvbnMgdnB1X2RiZ19pbnN0X2ZvcHMgPSB7DQo+ID4gKyAgICAgLm93bmVyID0g VEhJU19NT0RVTEUsDQo+ID4gKyAgICAgLm9wZW4gPSB2cHVfZGJnX2luc3Rfb3BlbiwNCj4gPiAr ICAgICAucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLA0KPiA+ICsgICAgIC5yZWFkID0gc2VxX3Jl YWQsDQo+ID4gKyAgICAgLndyaXRlID0gdnB1X2RiZ19pbnN0X3dyaXRlLA0KPiA+ICt9Ow0KPiA+ ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdnB1X2RiZ19jb3Jl X2ZvcHMgPSB7DQo+ID4gKyAgICAgLm93bmVyID0gVEhJU19NT0RVTEUsDQo+ID4gKyAgICAgLm9w ZW4gPSB2cHVfZGJnX2NvcmVfb3BlbiwNCj4gPiArICAgICAucmVsZWFzZSA9IHNpbmdsZV9yZWxl YXNlLA0KPiA+ICsgICAgIC5yZWFkID0gc2VxX3JlYWQsDQo+ID4gKyAgICAgLndyaXRlID0gdnB1 X2RiZ19jb3JlX3dyaXRlLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVj dCBmaWxlX29wZXJhdGlvbnMgdnB1X2RiZ19md2xvZ19mb3BzID0gew0KPiA+ICsgICAgIC5vd25l ciA9IFRISVNfTU9EVUxFLA0KPiA+ICsgICAgIC5vcGVuID0gdnB1X2RiZ19md2xvZ19vcGVuLA0K PiA+ICsgICAgIC5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsDQo+ID4gKyAgICAgLnJlYWQgPSBz ZXFfcmVhZCwNCj4gPiArfTsNCj4gPiArDQo+ID4gK2ludCB2cHVfaW5zdF9jcmVhdGVfZGJnZnNf ZmlsZShzdHJ1Y3QgdnB1X2luc3QgKmluc3QpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1 X2RldiAqdnB1Ow0KPiA+ICsgICAgIGNoYXIgbmFtZVs2NF07DQo+ID4gKw0KPiA+ICsgICAgIGlm ICghaW5zdCB8fCAhaW5zdC0+Y29yZSB8fCAhaW5zdC0+Y29yZS0+dnB1KQ0KPiA+ICsgICAgICAg ICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsgICAgIHZwdSA9IGluc3QtPmNvcmUt PnZwdTsNCj4gPiArICAgICBpZiAoIXZwdS0+ZGVidWdmcykNCj4gPiArICAgICAgICAgICAgIHJl dHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiArICAgICBpZiAoaW5zdC0+ZGVidWdmcykNCj4gPiAr ICAgICAgICAgICAgIHJldHVybiAwOw0KPiA+ICsNCj4gPiArICAgICBzY25wcmludGYobmFtZSwg c2l6ZW9mKG5hbWUpLCAiaW5zdGFuY2UuJWQuJWQiLA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICBpbnN0LT5jb3JlLT5pZCwgaW5zdC0+aWQpOw0KPiA+ICsgICAgIGluc3QtPmRlYnVnZnMgPSBk ZWJ1Z2ZzX2NyZWF0ZV9maWxlKChjb25zdCBjaGFyICopbmFtZSwNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBWRVJJRllfT0NUQUxfUEVSTUlTU0lPTlMoMDY0NCksDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdnB1LT5kZWJ1Z2ZzLA0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGluc3QsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJnZwdV9kYmdfaW5zdF9mb3BzKTsNCj4gPiArICAgICBpZiAoIWluc3QtPmRlYnVnZnMpIHsN Cj4gPiArICAgICAgICAgICAgIHZwdV9lcnIoInZwdSBjcmVhdGUgZGVidWdmcyAlcyBmYWlsXG4i LCBuYW1lKTsNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsgICAgIH0N Cj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK2ludCB2cHVf aW5zdF9yZW1vdmVfZGJnZnNfZmlsZShzdHJ1Y3QgdnB1X2luc3QgKmluc3QpDQo+ID4gK3sNCj4g PiArICAgICBpZiAoIWluc3QpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiArDQo+ ID4gKyAgICAgZGVidWdmc19yZW1vdmUoaW5zdC0+ZGVidWdmcyk7DQo+ID4gKyAgICAgaW5zdC0+ ZGVidWdmcyA9IE5VTEw7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtpbnQgdnB1X2NvcmVfY3JlYXRlX2RiZ2ZzX2ZpbGUoc3RydWN0IHZwdV9jb3JlICpj b3JlKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9kZXYgKnZwdTsNCj4gPiArICAgICBj aGFyIG5hbWVbNjRdOw0KPiA+ICsNCj4gPiArICAgICBpZiAoIWNvcmUgfHwgIWNvcmUtPnZwdSkN Cj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiArICAgICB2cHUg PSBjb3JlLT52cHU7DQo+ID4gKyAgICAgaWYgKCF2cHUtPmRlYnVnZnMpDQo+ID4gKyAgICAgICAg ICAgICByZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKyAgICAgaWYgKCFjb3JlLT5kZWJ1Z2Zz KSB7DQo+ID4gKyAgICAgICAgICAgICBzY25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiY29y ZS4lZCIsIGNvcmUtPmlkKTsNCj4gPiArICAgICAgICAgICAgIGNvcmUtPmRlYnVnZnMgPSBkZWJ1 Z2ZzX2NyZWF0ZV9maWxlKChjb25zdCBjaGFyICopbmFtZSwNCj4gPiArDQo+IFZFUklGWV9PQ1RB TF9QRVJNSVNTSU9OUygwNjQ0KSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZwdS0+ZGVidWdmcywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvcmUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm dnB1X2RiZ19jb3JlX2ZvcHMpOw0KPiA+ICsgICAgICAgICAgICAgaWYgKCFjb3JlLT5kZWJ1Z2Zz KSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHZwdV9lcnIoInZwdSBjcmVhdGUgZGVidWdm cyAlcyBmYWlsXG4iLCBuYW1lKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1F SU5WQUw7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKyAgICAgfQ0KPiA+ICsgICAgIGlmICgh Y29yZS0+ZGVidWdmc19md2xvZykgew0KPiA+ICsgICAgICAgICAgICAgc2NucHJpbnRmKG5hbWUs IHNpemVvZihuYW1lKSwgImZ3bG9nLiVkIiwgY29yZS0+aWQpOw0KPiA+ICsgICAgICAgICAgICAg Y29yZS0+ZGVidWdmc19md2xvZyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoKGNvbnN0IGNoYXINCj4g KiluYW1lLA0KPiA+ICsNCj4gVkVSSUZZX09DVEFMX1BFUk1JU1NJT05TKDA0NDQpLA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnB1LT5kZWJ1Z2ZzLA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZSwNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2cHVfZGJnX2Z3bG9nX2ZvcHMpOw0KPiA+ICsg ICAgICAgICAgICAgaWYgKCFjb3JlLT5kZWJ1Z2ZzX2Z3bG9nKSB7DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgIHZwdV9lcnIoInZwdSBjcmVhdGUgZGVidWdmcyAlcyBmYWlsXG4iLCBuYW1lKTsN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4gKyAgICAgICAg ICAgICB9DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0K PiA+ICsNCj4gPiAraW50IHZwdV9jb3JlX3JlbW92ZV9kYmdmc19maWxlKHN0cnVjdCB2cHVfY29y ZSAqY29yZSkNCj4gPiArew0KPiA+ICsgICAgIGlmICghY29yZSkNCj4gPiArICAgICAgICAgICAg IHJldHVybiAwOw0KPiA+ICsgICAgIGRlYnVnZnNfcmVtb3ZlKGNvcmUtPmRlYnVnZnMpOw0KPiA+ ICsgICAgIGNvcmUtPmRlYnVnZnMgPSBOVUxMOw0KPiA+ICsgICAgIGRlYnVnZnNfcmVtb3ZlKGNv cmUtPmRlYnVnZnNfZndsb2cpOw0KPiA+ICsgICAgIGNvcmUtPmRlYnVnZnNfZndsb2cgPSBOVUxM Ow0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArdm9pZCB2 cHVfaW5zdF9yZWNvcmRfZmxvdyhzdHJ1Y3QgdnB1X2luc3QgKmluc3QsIHUzMiBmbG93KQ0KPiA+ ICt7DQo+ID4gKyAgICAgaWYgKCFpbnN0KQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuOw0KPiA+ ICsNCj4gPiArICAgICBpbnN0LT5mbG93c1tpbnN0LT5mbG93X2lkeF0gPSBmbG93Ow0KPiA+ICsg ICAgIGluc3QtPmZsb3dfaWR4ID0gKGluc3QtPmZsb3dfaWR4ICsgMSkgJSAoQVJSQVlfU0laRShp bnN0LT5mbG93cykpOw0KPiA+ICt9DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxh dGZvcm0vYW1waGlvbi92cHVfbG9nLmgNCj4gYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhp b24vdnB1X2xvZy5oDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAw MDAwMDAuLmZlYzk4MzY4ZmFkMQ0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJz L21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X2xvZy5oDQo+ID4gQEAgLTAsMCArMSw0NCBAQA0K PiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KPiA+ICsvKg0KPiA+ ICsgKiBDb3B5cmlnaHQgMjAyMC0yMDIxIE5YUA0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNpZm5k ZWYgX0FNUEhJT05fVlBVX0xPR19IDQo+ID4gKyNkZWZpbmUgX0FNUEhJT05fVlBVX0xPR19IDQo+ ID4gKw0KPiA+ICsjZGVmaW5lIExWTF9FUlIgICAgICAgICAgICAgICgxIDw8IDApDQo+ID4gKyNk ZWZpbmUgTFZMX1dBUk4gICAgICgxIDw8IDEpDQo+ID4gKyNkZWZpbmUgTFZMX0lORk8gICAgICgx IDw8IDIpDQo+ID4gKyNkZWZpbmUgTFZMX0RFQlVHICAgICgxIDw8IDMpDQo+ID4gKyNkZWZpbmUg TFZMX0lSUSAgICAgICAgICAgICAgKDEgPDwgNCkNCj4gPiArI2RlZmluZSBMVkxfQ01EICAgICAg ICAgICAgICAoMSA8PCA1KQ0KPiA+ICsjZGVmaW5lIExWTF9FVlQgICAgICAgICAgICAgICgxIDw8 IDYpDQo+ID4gKyNkZWZpbmUgTFZMX0NUUkwgICAgICgxIDw8IDcpDQo+ID4gKyNkZWZpbmUgTFZM X1RTICAgICAgICAgICAgICAgKDEgPDwgOCkNCj4gPiArI2RlZmluZSBMVkxfRkxPVyAgICAgKDEg PDwgMTMpDQo+ID4gKw0KPiA+ICtleHRlcm4gdW5zaWduZWQgaW50IHZwdV9kYmdfbGV2ZWw7DQo+ ID4gKw0KPiA+ICsjaWZkZWYgVEFHDQo+ID4gKyNkZWZpbmUgdnB1X2RiZyhsZXZlbCwgZm10LCBh cmcuLi4pIFwNCj4gPiArICAgICBkbyB7IFwNCj4gPiArICAgICAgICAgICAgIGlmICgodnB1X2Ri Z19sZXZlbCAmIChsZXZlbCkpIHx8ICgobGV2ZWwpICYgTFZMX0VSUikpIFwNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgcHJfaW5mbygiW1ZQVSAiVEFHIl0iZm10LCAjIyBhcmcpOyBcDQo+ID4g KyAgICAgfSB3aGlsZSAoMCkNCj4gPiArI2Vsc2UNCj4gPiArI2RlZmluZSB2cHVfZGJnKGxldmVs LCBmbXQsIGFyZy4uLikgXA0KPiA+ICsgICAgIGRvIHsgXA0KPiA+ICsgICAgICAgICAgICAgaWYg KCh2cHVfZGJnX2xldmVsICYgKGxldmVsKSkgfHwgKChsZXZlbCkgJiBMVkxfRVJSKSkgXA0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICBwcl9pbmZvKCJbVlBVXSJmbXQsICMjIGFyZyk7IFwNCj4g PiArICAgICB9IHdoaWxlICgwKQ0KPiA+ICsjZW5kaWYNCj4gPiArDQo+ID4gKyNkZWZpbmUgdnB1 X2VycihmbXQsIGFyZy4uLikgdnB1X2RiZyhMVkxfRVJSLCBmbXQsICMjYXJnKQ0KPiA+ICsjZGVm aW5lIGluc3RfZGJnKGluc3QsIGxldmVsLCBmbXQsIGFyZy4uLikgICAgICAgICAgIFwNCj4gPiAr ICAgICAgICAgICAgIHZwdV9kYmcobGV2ZWwsICJbJWQ6JWRdICJmbXQsIGluc3QtPmNvcmUtPmlk LCBpbnN0LT5pZCwgIyMgYXJnKQ0KPiA+ICsjZGVmaW5lIGluc3RfZXJyKGluc3QsIGZtdCwgYXJn Li4uKSAgaW5zdF9kYmcoaW5zdCwgTFZMX0VSUiwgZm10LCAjIyBhcmcpDQo+ID4gKyNkZWZpbmUg Y29yZV9kYmcoY29yZSwgbGV2ZWwsIGZtdCwgYXJnLi4uKSAgICAgICAgICAgXA0KPiA+ICsgICAg ICAgICAgICAgdnB1X2RiZyhsZXZlbCwgIlslZF0gJXMgImZtdCwgY29yZS0+aWQsDQo+IHZwdV9j b3JlX3R5cGVfZGVzYyhjb3JlLT50eXBlKSwgIyMgYXJnKQ0KPiA+ICsjZGVmaW5lIGNvcmVfZXJy KGNvcmUsIGZtdCwgYXJnLi4uKSAgY29yZV9kYmcoY29yZSwgTFZMX0VSUiwgZm10LCAjIyBhcmcp DQo+ID4gKw0KPiA+ICsjZW5kaWYNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0 Zm9ybS9hbXBoaW9uL3ZwdV9ycGMuYw0KPiBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlv bi92cHVfcnBjLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAw MDAwMC4uMjFjOTViMjBkNDhkDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMv bWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVfcnBjLmMNCj4gPiBAQCAtMCwwICsxLDI2MyBAQA0K PiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPiA+ICsvKg0KPiA+ICsg KiBDb3B5cmlnaHQgMjAyMC0yMDIxIE5YUA0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNkZWZpbmUg VEFHICAgICAgICAgICJSUEMiDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+DQo+ID4gKyNp bmNsdWRlIDxsaW51eC9pbnRlcmNvbm5lY3QuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2lvY3Rs Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9r ZXJuZWwuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiA+ICsjaW5jbHVkZSA8 bGludXgvb2ZfZGV2aWNlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+DQo+ ID4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCj4gPiArI2luY2x1ZGUgPGxp bnV4L2Zpcm13YXJlL2lteC9pcGMuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlL2lt eC9zdmMvbWlzYy5oPg0KPiA+ICsjaW5jbHVkZSAidnB1LmgiDQo+ID4gKyNpbmNsdWRlICJ2cHVf cnBjLmgiDQo+ID4gKyNpbmNsdWRlICJ2cHVfaW14OHEuaCINCj4gPiArI2luY2x1ZGUgInZwdV93 aW5kc29yLmgiDQo+ID4gKyNpbmNsdWRlICJ2cHVfbWFsb25lLmgiDQo+ID4gKyNpbmNsdWRlICJ2 cHVfbG9nLmgiDQo+ID4gKw0KPiA+ICt1MzIgdnB1X2lmYWNlX2NoZWNrX21lbW9yeV9yZWdpb24o c3RydWN0IHZwdV9jb3JlICpjb3JlLCBkbWFfYWRkcl90DQo+IGFkZHIsIHUzMiBzaXplKQ0KPiA+ ICt7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9pZmFjZV9vcHMgKm9wcyA9IHZwdV9pZmFjZV9nZXQo Y29yZSk7DQo+ID4gKw0KPiA+ICsgICAgIGlmICghb3BzIHx8ICFvcHMtPmNoZWNrX21lbW9yeV9y ZWdpb24pDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gVlBVX0NPUkVfTUVNT1JZX0lOVkFMSUQ7 DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiBvcHMtPmNoZWNrX21lbW9yeV9yZWdpb24oY29yZS0+ ZncucGh5cywgYWRkciwgc2l6ZSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB1MzIgdnB1 X3JwY19jaGVja19idWZmZXJfc3BhY2Uoc3RydWN0IHZwdV9ycGNfYnVmZmVyX2Rlc2MgKmRlc2Ms DQo+IGJvb2wgd3JpdGUpDQo+ID4gK3sNCj4gPiArICAgICB1MzIgcHRyMTsNCj4gPiArICAgICB1 MzIgcHRyMjsNCj4gPiArICAgICB1MzIgc2l6ZTsNCj4gPiArDQo+ID4gKyAgICAgV0FSTl9PTigh ZGVzYyk7DQo+ID4gKw0KPiA+ICsgICAgIHNpemUgPSBkZXNjLT5lbmQgLSBkZXNjLT5zdGFydDsN Cj4gPiArICAgICBpZiAod3JpdGUpIHsNCj4gPiArICAgICAgICAgICAgIHB0cjEgPSBkZXNjLT53 cHRyOw0KPiA+ICsgICAgICAgICAgICAgcHRyMiA9IGRlc2MtPnJwdHI7DQo+ID4gKyAgICAgfSBl bHNlIHsNCj4gPiArICAgICAgICAgICAgIHB0cjEgPSBkZXNjLT5ycHRyOw0KPiA+ICsgICAgICAg ICAgICAgcHRyMiA9IGRlc2MtPndwdHI7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBp ZiAocHRyMSA9PSBwdHIyKSB7DQo+ID4gKyAgICAgICAgICAgICBpZiAoIXdyaXRlKQ0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiArICAgICAgICAgICAgIGVsc2UNCj4g PiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNpemU7DQo+ID4gKyAgICAgfQ0KPiA+ICsN Cj4gPiArICAgICByZXR1cm4gKHB0cjIgKyBzaXplIC0gcHRyMSkgJSBzaXplOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZwdV9ycGNfc2VuZF9jbWRfYnVmKHN0cnVjdCB2cHVfc2hh cmVkX2FkZHIgKnNoYXJlZCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZwdV9y cGNfZXZlbnQgKmNtZCkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB2cHVfcnBjX2J1ZmZlcl9k ZXNjICpkZXNjOw0KPiA+ICsgICAgIHUzMiBzcGFjZSA9IDA7DQo+ID4gKyAgICAgdTMyICpkYXRh Ow0KPiA+ICsgICAgIHUzMiB3cHRyOw0KPiA+ICsgICAgIHUzMiBpOw0KPiA+ICsNCj4gPiArICAg ICBXQVJOX09OKCFzaGFyZWQgfHwgIXNoYXJlZC0+Y21kX21lbV92aXIgfHwgIWNtZCk7DQo+ID4g Kw0KPiA+ICsgICAgIGRlc2MgPSBzaGFyZWQtPmNtZF9kZXNjOw0KPiA+ICsgICAgIHNwYWNlID0g dnB1X3JwY19jaGVja19idWZmZXJfc3BhY2UoZGVzYywgdHJ1ZSk7DQo+ID4gKyAgICAgaWYgKHNw YWNlIDwgKCgoY21kLT5oZHIubnVtICsgMSkgPDwgMikgKyAxNikpIHsNCj4gPiArICAgICAgICAg ICAgIHZwdV9lcnIoIkNtZCBCdWZmZXIgaXMgbm8gc3BhY2UgZm9yIFslZF0gJWRcbiIsDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kLT5oZHIuaW5kZXgsIGNtZC0+aGRyLmlk KTsNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsgICAgIH0NCj4gPiAr ICAgICB3cHRyID0gZGVzYy0+d3B0cjsNCj4gPiArICAgICBkYXRhID0gKHUzMiAqKShzaGFyZWQt PmNtZF9tZW1fdmlyICsgZGVzYy0+d3B0ciAtIGRlc2MtPnN0YXJ0KTsNCj4gPiArICAgICAqZGF0 YSA9IDA7DQo+ID4gKyAgICAgKmRhdGEgfD0gKChjbWQtPmhkci5pbmRleCAmIDB4ZmYpIDw8IDI0 KTsNCj4gPiArICAgICAqZGF0YSB8PSAoKGNtZC0+aGRyLm51bSAmIDB4ZmYpIDw8IDE2KTsNCj4g PiArICAgICAqZGF0YSB8PSAoY21kLT5oZHIuaWQgJiAweDNmZmYpOw0KPiA+ICsgICAgIHdwdHIg Kz0gNDsNCj4gPiArICAgICBkYXRhKys7DQo+ID4gKyAgICAgaWYgKHdwdHIgPj0gZGVzYy0+ZW5k KSB7DQo+ID4gKyAgICAgICAgICAgICB3cHRyID0gZGVzYy0+c3RhcnQ7DQo+ID4gKyAgICAgICAg ICAgICBkYXRhID0gc2hhcmVkLT5jbWRfbWVtX3ZpcjsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ ICsgICAgIGZvciAoaSA9IDA7IGkgPCBjbWQtPmhkci5udW07IGkrKykgew0KPiA+ICsgICAgICAg ICAgICAgKmRhdGEgPSBjbWQtPmRhdGFbaV07DQo+ID4gKyAgICAgICAgICAgICB3cHRyICs9IDQ7 DQo+ID4gKyAgICAgICAgICAgICBkYXRhKys7DQo+ID4gKyAgICAgICAgICAgICBpZiAod3B0ciA+ PSBkZXNjLT5lbmQpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgd3B0ciA9IGRlc2MtPnN0 YXJ0Ow0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBkYXRhID0gc2hhcmVkLT5jbWRfbWVtX3Zp cjsNCj4gPiArICAgICAgICAgICAgIH0NCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIC8q dXBkYXRlIHdwdHIgYWZ0ZXIgZGF0YSBpcyB3cml0dGVuKi8NCj4gPiArICAgICBtYigpOw0KPiA+ ICsgICAgIGRlc2MtPndwdHIgPSB3cHRyOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gMDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGJvb2wgdnB1X3JwY19jaGVja19tc2coc3RydWN0IHZw dV9zaGFyZWRfYWRkciAqc2hhcmVkKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9ycGNf YnVmZmVyX2Rlc2MgKmRlc2M7DQo+ID4gKyAgICAgdTMyIHNwYWNlID0gMDsNCj4gPiArICAgICB1 MzIgbXNnd29yZDsNCj4gPiArICAgICB1MzIgbXNnbnVtOw0KPiA+ICsNCj4gPiArICAgICBXQVJO X09OKCFzaGFyZWQgfHwgIXNoYXJlZC0+bXNnX2Rlc2MpOw0KPiA+ICsNCj4gPiArICAgICBkZXNj ID0gc2hhcmVkLT5tc2dfZGVzYzsNCj4gPiArICAgICBzcGFjZSA9IHZwdV9ycGNfY2hlY2tfYnVm ZmVyX3NwYWNlKGRlc2MsIDApOw0KPiA+ICsgICAgIHNwYWNlID0gKHNwYWNlID4+IDIpOw0KPiA+ ICsNCj4gPiArICAgICBpZiAoc3BhY2UpIHsNCj4gPiArICAgICAgICAgICAgIG1zZ3dvcmQgPSAq KHUzMiAqKShzaGFyZWQtPm1zZ19tZW1fdmlyICsgZGVzYy0+cnB0ciAtDQo+IGRlc2MtPnN0YXJ0 KTsNCj4gPiArICAgICAgICAgICAgIG1zZ251bSA9IChtc2d3b3JkICYgMHhmZjAwMDApID4+IDE2 Ow0KPiA+ICsgICAgICAgICAgICAgaWYgKG1zZ251bSA8PSBzcGFjZSkNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIHRydWU7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBy ZXR1cm4gZmFsc2U7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdnB1X3JwY19yZWNl aXZlX21zZ19idWYoc3RydWN0IHZwdV9zaGFyZWRfYWRkciAqc2hhcmVkLCBzdHJ1Y3QNCj4gdnB1 X3JwY19ldmVudCAqbXNnKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9ycGNfYnVmZmVy X2Rlc2MgKmRlc2M7DQo+ID4gKyAgICAgdTMyICpkYXRhOw0KPiA+ICsgICAgIHUzMiBtc2d3b3Jk Ow0KPiA+ICsgICAgIHUzMiBycHRyOw0KPiA+ICsgICAgIHUzMiBpOw0KPiA+ICsNCj4gPiArICAg ICBXQVJOX09OKCFzaGFyZWQgfHwgIXNoYXJlZC0+bXNnX2Rlc2MgfHwgIW1zZyk7DQo+ID4gKw0K PiA+ICsgICAgIGlmICghdnB1X3JwY19jaGVja19tc2coc2hhcmVkKSkNCj4gPiArICAgICAgICAg ICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiArICAgICBkZXNjID0gc2hhcmVkLT5tc2df ZGVzYzsNCj4gPiArICAgICBkYXRhID0gKHUzMiAqKShzaGFyZWQtPm1zZ19tZW1fdmlyICsgZGVz Yy0+cnB0ciAtIGRlc2MtPnN0YXJ0KTsNCj4gPiArICAgICBycHRyID0gZGVzYy0+cnB0cjsNCj4g PiArICAgICBtc2d3b3JkID0gKmRhdGE7DQo+ID4gKyAgICAgZGF0YSsrOw0KPiA+ICsgICAgIHJw dHIgKz0gNDsNCj4gPiArICAgICBpZiAocnB0ciA+PSBkZXNjLT5lbmQpIHsNCj4gPiArICAgICAg ICAgICAgIHJwdHIgPSBkZXNjLT5zdGFydDsNCj4gPiArICAgICAgICAgICAgIGRhdGEgPSBzaGFy ZWQtPm1zZ19tZW1fdmlyOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgbXNnLT5oZHIu aW5kZXggPSAobXNnd29yZCA+PiAyNCkgJiAweGZmOw0KPiA+ICsgICAgIG1zZy0+aGRyLm51bSA9 IChtc2d3b3JkID4+IDE2KSAmIDB4ZmY7DQo+ID4gKyAgICAgbXNnLT5oZHIuaWQgPSBtc2d3b3Jk ICYgMHgzZmZmOw0KPiA+ICsNCj4gPiArICAgICBpZiAobXNnLT5oZHIubnVtID4gQVJSQVlfU0la RShtc2ctPmRhdGEpKSB7DQo+ID4gKyAgICAgICAgICAgICB2cHVfZXJyKCJtc2coJWQpIGRhdGEg bGVuZ3RoKCVkKSBpcyBvdXQgb2YgcmFuZ2VcbiIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbXNnLT5oZHIuaWQsIG1zZy0+aGRyLm51bSk7DQo+ID4gKyAgICAgICAgICAgICBy ZXR1cm4gLUVJTlZBTDsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIGZvciAoaSA9IDA7 IGkgPCBtc2ctPmhkci5udW07IGkrKykgew0KPiA+ICsgICAgICAgICAgICAgbXNnLT5kYXRhW2ld ID0gKmRhdGE7DQo+ID4gKyAgICAgICAgICAgICBkYXRhKys7DQo+ID4gKyAgICAgICAgICAgICBy cHRyICs9IDQ7DQo+ID4gKyAgICAgICAgICAgICBpZiAocnB0ciA+PSBkZXNjLT5lbmQpIHsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgcnB0ciA9IGRlc2MtPnN0YXJ0Ow0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICBkYXRhID0gc2hhcmVkLT5tc2dfbWVtX3ZpcjsNCj4gPiArICAgICAgICAg ICAgIH0NCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIC8qdXBkYXRlIHJwdHIgYWZ0ZXIg ZGF0YSBpcyByZWFkKi8NCj4gPiArICAgICBtYigpOw0KPiA+ICsgICAgIGRlc2MtPnJwdHIgPSBy cHRyOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Ry dWN0IHZwdV9pZmFjZV9vcHMgaW14OHFfcnBjX29wc1tdID0gew0KPiA+ICsgICAgIFtWUFVfQ09S RV9UWVBFX0VOQ10gPSB7DQo+ID4gKyAgICAgICAgICAgICAuY2hlY2tfY29kZWMgPSB2cHVfaW14 OHFfY2hlY2tfY29kZWMsDQo+ID4gKyAgICAgICAgICAgICAuY2hlY2tfZm10ID0gdnB1X2lteDhx X2NoZWNrX2ZtdCwNCj4gPiArICAgICAgICAgICAgIC5ib290X2NvcmUgPSB2cHVfaW14OHFfYm9v dF9jb3JlLA0KPiA+ICsgICAgICAgICAgICAgLmdldF9wb3dlcl9zdGF0ZSA9IHZwdV9pbXg4cV9n ZXRfcG93ZXJfc3RhdGUsDQo+ID4gKyAgICAgICAgICAgICAub25fZmlybXdhcmVfbG9hZGVkID0g dnB1X2lteDhxX29uX2Zpcm13YXJlX2xvYWRlZCwNCj4gPiArICAgICAgICAgICAgIC5nZXRfZGF0 YV9zaXplID0gdnB1X3dpbmRzb3JfZ2V0X2RhdGFfc2l6ZSwNCj4gPiArICAgICAgICAgICAgIC5j aGVja19tZW1vcnlfcmVnaW9uID0NCj4gdnB1X2lteDhxX2NoZWNrX21lbW9yeV9yZWdpb24sDQo+ ID4gKyAgICAgICAgICAgICAuaW5pdF9ycGMgPSB2cHVfd2luZHNvcl9pbml0X3JwYywNCj4gPiAr ICAgICAgICAgICAgIC5zZXRfbG9nX2J1ZiA9IHZwdV93aW5kc29yX3NldF9sb2dfYnVmLA0KPiA+ ICsgICAgICAgICAgICAgLnNldF9zeXN0ZW1fY2ZnID0gdnB1X3dpbmRzb3Jfc2V0X3N5c3RlbV9j ZmcsDQo+ID4gKyAgICAgICAgICAgICAuZ2V0X3ZlcnNpb24gPSB2cHVfd2luZHNvcl9nZXRfdmVy c2lvbiwNCj4gPiArICAgICAgICAgICAgIC5zZW5kX2NtZF9idWYgPSB2cHVfcnBjX3NlbmRfY21k X2J1ZiwNCj4gPiArICAgICAgICAgICAgIC5yZWNlaXZlX21zZ19idWYgPSB2cHVfcnBjX3JlY2Vp dmVfbXNnX2J1ZiwNCj4gPiArICAgICAgICAgICAgIC5wYWNrX2NtZCA9IHZwdV93aW5kc29yX3Bh Y2tfY21kLA0KPiA+ICsgICAgICAgICAgICAgLmNvbnZlcnRfbXNnX2lkID0gdnB1X3dpbmRzb3Jf Y29udmVydF9tc2dfaWQsDQo+ID4gKyAgICAgICAgICAgICAudW5wYWNrX21zZ19kYXRhID0gdnB1 X3dpbmRzb3JfdW5wYWNrX21zZ19kYXRhLA0KPiA+ICsgICAgICAgICAgICAgLmNvbmZpZ19tZW1v cnlfcmVzb3VyY2UgPQ0KPiB2cHVfd2luZHNvcl9jb25maWdfbWVtb3J5X3Jlc291cmNlLA0KPiA+ ICsgICAgICAgICAgICAgLmdldF9zdHJlYW1fYnVmZmVyX3NpemUgPQ0KPiB2cHVfd2luZHNvcl9n ZXRfc3RyZWFtX2J1ZmZlcl9zaXplLA0KPiA+ICsgICAgICAgICAgICAgLmNvbmZpZ19zdHJlYW1f YnVmZmVyID0gdnB1X3dpbmRzb3JfY29uZmlnX3N0cmVhbV9idWZmZXIsDQo+ID4gKyAgICAgICAg ICAgICAuZ2V0X3N0cmVhbV9idWZmZXJfZGVzYyA9DQo+IHZwdV93aW5kc29yX2dldF9zdHJlYW1f YnVmZmVyX2Rlc2MsDQo+ID4gKyAgICAgICAgICAgICAudXBkYXRlX3N0cmVhbV9idWZmZXIgPQ0K PiB2cHVfd2luZHNvcl91cGRhdGVfc3RyZWFtX2J1ZmZlciwNCj4gPiArICAgICAgICAgICAgIC5z ZXRfZW5jb2RlX3BhcmFtcyA9IHZwdV93aW5kc29yX3NldF9lbmNvZGVfcGFyYW1zLA0KPiA+ICsg ICAgICAgICAgICAgLmlucHV0X2ZyYW1lID0gdnB1X3dpbmRzb3JfaW5wdXRfZnJhbWUsDQo+ID4g KyAgICAgICAgICAgICAuZ2V0X21heF9pbnN0YW5jZV9jb3VudCA9DQo+IHZwdV93aW5kc29yX2dl dF9tYXhfaW5zdGFuY2VfY291bnQsDQo+ID4gKyAgICAgfSwNCj4gPiArICAgICBbVlBVX0NPUkVf VFlQRV9ERUNdID0gew0KPiA+ICsgICAgICAgICAgICAgLmNoZWNrX2NvZGVjID0gdnB1X2lteDhx X2NoZWNrX2NvZGVjLA0KPiA+ICsgICAgICAgICAgICAgLmNoZWNrX2ZtdCA9IHZwdV9pbXg4cV9j aGVja19mbXQsDQo+ID4gKyAgICAgICAgICAgICAuYm9vdF9jb3JlID0gdnB1X2lteDhxX2Jvb3Rf Y29yZSwNCj4gPiArICAgICAgICAgICAgIC5nZXRfcG93ZXJfc3RhdGUgPSB2cHVfaW14OHFfZ2V0 X3Bvd2VyX3N0YXRlLA0KPiA+ICsgICAgICAgICAgICAgLm9uX2Zpcm13YXJlX2xvYWRlZCA9IHZw dV9pbXg4cV9vbl9maXJtd2FyZV9sb2FkZWQsDQo+ID4gKyAgICAgICAgICAgICAuZ2V0X2RhdGFf c2l6ZSA9IHZwdV9tYWxvbmVfZ2V0X2RhdGFfc2l6ZSwNCj4gPiArICAgICAgICAgICAgIC5jaGVj a19tZW1vcnlfcmVnaW9uID0NCj4gdnB1X2lteDhxX2NoZWNrX21lbW9yeV9yZWdpb24sDQo+ID4g KyAgICAgICAgICAgICAuaW5pdF9ycGMgPSB2cHVfbWFsb25lX2luaXRfcnBjLA0KPiA+ICsgICAg ICAgICAgICAgLnNldF9sb2dfYnVmID0gdnB1X21hbG9uZV9zZXRfbG9nX2J1ZiwNCj4gPiArICAg ICAgICAgICAgIC5zZXRfc3lzdGVtX2NmZyA9IHZwdV9tYWxvbmVfc2V0X3N5c3RlbV9jZmcsDQo+ ID4gKyAgICAgICAgICAgICAuZ2V0X3ZlcnNpb24gPSB2cHVfbWFsb25lX2dldF92ZXJzaW9uLA0K PiA+ICsgICAgICAgICAgICAgLnNlbmRfY21kX2J1ZiA9IHZwdV9ycGNfc2VuZF9jbWRfYnVmLA0K PiA+ICsgICAgICAgICAgICAgLnJlY2VpdmVfbXNnX2J1ZiA9IHZwdV9ycGNfcmVjZWl2ZV9tc2df YnVmLA0KPiA+ICsgICAgICAgICAgICAgLmdldF9zdHJlYW1fYnVmZmVyX3NpemUgPQ0KPiB2cHVf bWFsb25lX2dldF9zdHJlYW1fYnVmZmVyX3NpemUsDQo+ID4gKyAgICAgICAgICAgICAuY29uZmln X3N0cmVhbV9idWZmZXIgPSB2cHVfbWFsb25lX2NvbmZpZ19zdHJlYW1fYnVmZmVyLA0KPiA+ICsg ICAgICAgICAgICAgLnNldF9kZWNvZGVfcGFyYW1zID0gdnB1X21hbG9uZV9zZXRfZGVjb2RlX3Bh cmFtcywNCj4gPiArICAgICAgICAgICAgIC5wYWNrX2NtZCA9IHZwdV9tYWxvbmVfcGFja19jbWQs DQo+ID4gKyAgICAgICAgICAgICAuY29udmVydF9tc2dfaWQgPSB2cHVfbWFsb25lX2NvbnZlcnRf bXNnX2lkLA0KPiA+ICsgICAgICAgICAgICAgLnVucGFja19tc2dfZGF0YSA9IHZwdV9tYWxvbmVf dW5wYWNrX21zZ19kYXRhLA0KPiA+ICsgICAgICAgICAgICAgLmdldF9zdHJlYW1fYnVmZmVyX2Rl c2MgPQ0KPiB2cHVfbWFsb25lX2dldF9zdHJlYW1fYnVmZmVyX2Rlc2MsDQo+ID4gKyAgICAgICAg ICAgICAudXBkYXRlX3N0cmVhbV9idWZmZXIgPQ0KPiB2cHVfbWFsb25lX3VwZGF0ZV9zdHJlYW1f YnVmZmVyLA0KPiA+ICsgICAgICAgICAgICAgLmFkZF9zY29kZSA9IHZwdV9tYWxvbmVfYWRkX3Nj b2RlLA0KPiA+ICsgICAgICAgICAgICAgLmlucHV0X2ZyYW1lID0gdnB1X21hbG9uZV9pbnB1dF9m cmFtZSwNCj4gPiArICAgICAgICAgICAgIC5wcmVfc2VuZF9jbWQgPSB2cHVfbWFsb25lX3ByZV9j bWQsDQo+ID4gKyAgICAgICAgICAgICAucG9zdF9zZW5kX2NtZCA9IHZwdV9tYWxvbmVfcG9zdF9j bWQsDQo+ID4gKyAgICAgICAgICAgICAuaW5pdF9pbnN0YW5jZSA9IHZwdV9tYWxvbmVfaW5pdF9p bnN0YW5jZSwNCj4gPiArICAgICAgICAgICAgIC5nZXRfbWF4X2luc3RhbmNlX2NvdW50ID0NCj4g dnB1X21hbG9uZV9nZXRfbWF4X2luc3RhbmNlX2NvdW50LA0KPiA+ICsgICAgIH0sDQo+ID4gK307 DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgdnB1X2lmYWNlX29wcyAqdnB1X2lmYWNlX2dldChzdHJ1Y3Qg dnB1X2NvcmUgKmNvcmUpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2lmYWNlX29wcyAq cnBjX29wcyA9IE5VTEw7DQo+ID4gKyAgICAgdTMyIHNpemUgPSAwOw0KPiA+ICsNCj4gPiArICAg ICBXQVJOX09OKCFjb3JlIHx8ICFjb3JlLT52cHUgfHwgIWNvcmUtPnZwdS0+cmVzKTsNCj4gPiAr DQo+ID4gKyAgICAgc3dpdGNoIChjb3JlLT52cHUtPnJlcy0+cGxhdF90eXBlKSB7DQo+ID4gKyAg ICAgY2FzZSBJTVg4UVhQOg0KPiA+ICsgICAgIGNhc2UgSU1YOFFNOg0KPiA+ICsgICAgICAgICAg ICAgcnBjX29wcyA9IGlteDhxX3JwY19vcHM7DQo+ID4gKyAgICAgICAgICAgICBzaXplID0gQVJS QVlfU0laRShpbXg4cV9ycGNfb3BzKTsNCj4gPiArICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsg ICAgIGRlZmF1bHQ6DQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gTlVMTDsNCj4gPiArICAgICB9 DQo+ID4gKw0KPiA+ICsgICAgIGlmIChjb3JlLT50eXBlID49IHNpemUpDQo+ID4gKyAgICAgICAg ICAgICByZXR1cm4gTlVMTDsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuICZycGNfb3BzW2NvcmUt PnR5cGVdOw0KPiA+ICt9DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0v YW1waGlvbi92cHVfcnBjLmgNCj4gYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1 X3JwYy5oDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAu LmIwNjZhODNlNjdkMw0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL21lZGlh L3BsYXRmb3JtL2FtcGhpb24vdnB1X3JwYy5oDQo+ID4gQEAgLTAsMCArMSw0NjMgQEANCj4gPiAr LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8NCj4gPiArLyoNCj4gPiArICog Q29weXJpZ2h0IDIwMjAtMjAyMSBOWFANCj4gPiArICovDQo+ID4gKw0KPiA+ICsjaWZuZGVmIF9B TVBISU9OX1ZQVV9SUENfSA0KPiA+ICsjZGVmaW5lIF9BTVBISU9OX1ZQVV9SUENfSA0KPiA+ICsN Cj4gPiArI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmMi1jb3JlLmg+DQo+ID4gKyNpbmNsdWRlICJ2 cHVfY29kZWMuaCINCj4gPiArDQo+ID4gK3N0cnVjdCB2cHVfcnBjX2J1ZmZlcl9kZXNjIHsNCj4g PiArICAgICB1MzIgd3B0cjsNCj4gPiArICAgICB1MzIgcnB0cjsNCj4gPiArICAgICB1MzIgc3Rh cnQ7DQo+ID4gKyAgICAgdTMyIGVuZDsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCB2cHVf c2hhcmVkX2FkZHIgew0KPiA+ICsgICAgIHZvaWQgKmlmYWNlOw0KPiA+ICsgICAgIHN0cnVjdCB2 cHVfcnBjX2J1ZmZlcl9kZXNjICpjbWRfZGVzYzsNCj4gPiArICAgICB2b2lkICpjbWRfbWVtX3Zp cjsNCj4gPiArICAgICBzdHJ1Y3QgdnB1X3JwY19idWZmZXJfZGVzYyAqbXNnX2Rlc2M7DQo+ID4g KyAgICAgdm9pZCAqbXNnX21lbV92aXI7DQo+ID4gKw0KPiA+ICsgICAgIHVuc2lnbmVkIGxvbmcg Ym9vdF9hZGRyOw0KPiA+ICsgICAgIHN0cnVjdCB2cHVfY29yZSAqY29yZTsNCj4gPiArICAgICB2 b2lkICpwcml2Ow0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IHZwdV9ycGNfZXZlbnRfaGVh ZGVyIHsNCj4gPiArICAgICB1MzIgaW5kZXg7DQo+ID4gKyAgICAgdTMyIGlkOw0KPiA+ICsgICAg IHUzMiBudW07DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgdnB1X3JwY19ldmVudCB7DQo+ ID4gKyAgICAgc3RydWN0IHZwdV9ycGNfZXZlbnRfaGVhZGVyIGhkcjsNCj4gPiArICAgICB1MzIg ZGF0YVsxMjhdOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IHZwdV9pZmFjZV9vcHMgew0K PiA+ICsgICAgIGJvb2wgKCpjaGVja19jb2RlYykoZW51bSB2cHVfY29yZV90eXBlIHR5cGUpOw0K PiA+ICsgICAgIGJvb2wgKCpjaGVja19mbXQpKGVudW0gdnB1X2NvcmVfdHlwZSB0eXBlLCB1MzIg cGl4ZWxmbXQpOw0KPiA+ICsgICAgIHUzMiAoKmdldF9kYXRhX3NpemUpKHZvaWQpOw0KPiA+ICsg ICAgIHUzMiAoKmNoZWNrX21lbW9yeV9yZWdpb24pKGRtYV9hZGRyX3QgYmFzZSwgZG1hX2FkZHJf dCBhZGRyLA0KPiB1MzIgc2l6ZSk7DQo+ID4gKyAgICAgaW50ICgqYm9vdF9jb3JlKShzdHJ1Y3Qg dnB1X2NvcmUgKmNvcmUpOw0KPiA+ICsgICAgIGludCAoKnNodXRkb3duX2NvcmUpKHN0cnVjdCB2 cHVfY29yZSAqY29yZSk7DQo+ID4gKyAgICAgaW50ICgqcmVzdG9yZV9jb3JlKShzdHJ1Y3QgdnB1 X2NvcmUgKmNvcmUpOw0KPiA+ICsgICAgIGludCAoKmdldF9wb3dlcl9zdGF0ZSkoc3RydWN0IHZw dV9jb3JlICpjb3JlKTsNCj4gPiArICAgICBpbnQgKCpvbl9maXJtd2FyZV9sb2FkZWQpKHN0cnVj dCB2cHVfY29yZSAqY29yZSk7DQo+ID4gKyAgICAgdm9pZCAoKmluaXRfcnBjKShzdHJ1Y3QgdnB1 X3NoYXJlZF9hZGRyICpzaGFyZWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2 cHVfYnVmZmVyICpycGMsIGRtYV9hZGRyX3QgYm9vdF9hZGRyKTsNCj4gPiArICAgICB2b2lkICgq c2V0X2xvZ19idWYpKHN0cnVjdCB2cHVfc2hhcmVkX2FkZHIgKnNoYXJlZCwNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IHZwdV9idWZmZXIgKmxvZyk7DQo+ID4gKyAgICAgdm9pZCAo KnNldF9zeXN0ZW1fY2ZnKShzdHJ1Y3QgdnB1X3NoYXJlZF9hZGRyICpzaGFyZWQsDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIHUzMiByZWdzX2Jhc2UsIHZvaWQgX19pb21lbSAqcmVncywgdTMy IGluZGV4KTsNCj4gPiArICAgICB2b2lkICgqc2V0X3N0cmVhbV9jZmcpKHN0cnVjdCB2cHVfc2hh cmVkX2FkZHIgKnNoYXJlZCwgdTMyIGluZGV4KTsNCj4gPiArICAgICB1MzIgKCpnZXRfdmVyc2lv bikoc3RydWN0IHZwdV9zaGFyZWRfYWRkciAqc2hhcmVkKTsNCj4gPiArICAgICB1MzIgKCpnZXRf bWF4X2luc3RhbmNlX2NvdW50KShzdHJ1Y3QgdnB1X3NoYXJlZF9hZGRyICpzaGFyZWQpOw0KPiA+ ICsgICAgIGludCAoKmdldF9zdHJlYW1fYnVmZmVyX3NpemUpKHN0cnVjdCB2cHVfc2hhcmVkX2Fk ZHIgKnNoYXJlZCk7DQo+ID4gKyAgICAgaW50ICgqc2VuZF9jbWRfYnVmKShzdHJ1Y3QgdnB1X3No YXJlZF9hZGRyICpzaGFyZWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2cHVf cnBjX2V2ZW50ICpjbWQpOw0KPiA+ICsgICAgIGludCAoKnJlY2VpdmVfbXNnX2J1Zikoc3RydWN0 IHZwdV9zaGFyZWRfYWRkciAqc2hhcmVkLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgdnB1X3JwY19ldmVudCAqbXNnKTsNCj4gPiArICAgICBpbnQgKCpwYWNrX2NtZCkoc3RydWN0 IHZwdV9ycGNfZXZlbnQgKnBrdCwgdTMyIGluZGV4LCB1MzIgaWQsIHZvaWQNCj4gKmRhdGEpOw0K PiA+ICsgICAgIGludCAoKmNvbnZlcnRfbXNnX2lkKSh1MzIgbXNnX2lkKTsNCj4gPiArICAgICBp bnQgKCp1bnBhY2tfbXNnX2RhdGEpKHN0cnVjdCB2cHVfcnBjX2V2ZW50ICpwa3QsIHZvaWQgKmRh dGEpOw0KPiA+ICsgICAgIGludCAoKmlucHV0X2ZyYW1lKShzdHJ1Y3QgdnB1X3NoYXJlZF9hZGRy ICpzaGFyZWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2cHVfaW5zdCAqaW5z dCwgc3RydWN0IHZiMl9idWZmZXIgKnZiKTsNCj4gPiArICAgICBpbnQgKCpjb25maWdfbWVtb3J5 X3Jlc291cmNlKShzdHJ1Y3QgdnB1X3NoYXJlZF9hZGRyICpzaGFyZWQsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgaW5zdGFuY2UsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgdHlwZSwNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBpbmRleCwNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2cHVfYnVmZmVyICpidWYpOw0KPiA+ICsgICAg IGludCAoKmNvbmZpZ19zdHJlYW1fYnVmZmVyKShzdHJ1Y3QgdnB1X3NoYXJlZF9hZGRyICpzaGFy ZWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgaW5zdGFu Y2UsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdnB1 X2J1ZmZlciAqYnVmKTsNCj4gPiArICAgICBpbnQgKCp1cGRhdGVfc3RyZWFtX2J1ZmZlcikoc3Ry dWN0IHZwdV9zaGFyZWRfYWRkciAqc2hhcmVkLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdTMyIGluc3RhbmNlLCB1MzIgcHRyLCBib29sDQo+IHdyaXRlKTsNCj4g PiArICAgICBpbnQgKCpnZXRfc3RyZWFtX2J1ZmZlcl9kZXNjKShzdHJ1Y3QgdnB1X3NoYXJlZF9h ZGRyICpzaGFyZWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 MzIgaW5zdGFuY2UsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgdnB1X3JwY19idWZmZXJfZGVzYw0KPiAqZGVzYyk7DQo+ID4gKyAgICAgaW50ICgqc2V0 X2VuY29kZV9wYXJhbXMpKHN0cnVjdCB2cHVfc2hhcmVkX2FkZHIgKnNoYXJlZCwNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgdTMyIGluc3RhbmNlLA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgdnB1X2VuY29kZV9wYXJhbXMgKnBhcmFtcywgdTMyIHVwZGF0ZSk7DQo+ID4gKyAg ICAgaW50ICgqc2V0X2RlY29kZV9wYXJhbXMpKHN0cnVjdCB2cHVfc2hhcmVkX2FkZHIgKnNoYXJl ZCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgdTMyIGluc3RhbmNlLA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgdnB1X2RlY29kZV9wYXJhbXMgKnBhcmFtcywgdTMyIHVwZGF0 ZSk7DQo+ID4gKyAgICAgaW50ICgqYWRkX3Njb2RlKShzdHJ1Y3QgdnB1X3NoYXJlZF9hZGRyICpz aGFyZWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIGluc3RhbmNlLA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2cHVfYnVmZmVyICpzdHJl YW1fYnVmZmVyLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBwaXhlbGZv cm1hdCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgc2NvZGVfdHlwZSk7 DQo+ID4gKyAgICAgaW50ICgqcHJlX3NlbmRfY21kKShzdHJ1Y3QgdnB1X3NoYXJlZF9hZGRyICpz aGFyZWQsIHUzMiBpbnN0YW5jZSk7DQo+ID4gKyAgICAgaW50ICgqcG9zdF9zZW5kX2NtZCkoc3Ry dWN0IHZwdV9zaGFyZWRfYWRkciAqc2hhcmVkLCB1MzIgaW5zdGFuY2UpOw0KPiA+ICsgICAgIGlu dCAoKmluaXRfaW5zdGFuY2UpKHN0cnVjdCB2cHVfc2hhcmVkX2FkZHIgKnNoYXJlZCwgdTMyIGlu c3RhbmNlKTsNCj4gPiArfTsNCj4gPiArDQo+ID4gK2VudW0gew0KPiA+ICsgICAgIFZQVV9DT1JF X01FTU9SWV9JTlZBTElEID0gMCwNCj4gPiArICAgICBWUFVfQ09SRV9NRU1PUllfQ0FDSEVELA0K PiA+ICsgICAgIFZQVV9DT1JFX01FTU9SWV9VTkNBQ0hFRA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiAr c3RydWN0IHZwdV9ycGNfcmVnaW9uX3Qgew0KPiA+ICsgICAgIGRtYV9hZGRyX3Qgc3RhcnQ7DQo+ ID4gKyAgICAgZG1hX2FkZHJfdCBlbmQ7DQo+ID4gKyAgICAgZG1hX2FkZHJfdCB0eXBlOw0KPiA+ ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IHZwdV9pZmFjZV9vcHMgKnZwdV9pZmFjZV9nZXQoc3Ry dWN0IHZwdV9jb3JlICpjb3JlKTsNCj4gPiArdTMyIHZwdV9pZmFjZV9jaGVja19tZW1vcnlfcmVn aW9uKHN0cnVjdCB2cHVfY29yZSAqY29yZSwgZG1hX2FkZHJfdA0KPiBhZGRyLCB1MzIgc2l6ZSk7 DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIGJvb2wgdnB1X2lmYWNlX2NoZWNrX2NvZGVjKHN0 cnVjdCB2cHVfY29yZSAqY29yZSkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB2cHVfaWZhY2Vf b3BzICpvcHMgPSB2cHVfaWZhY2VfZ2V0KGNvcmUpOw0KPiA+ICsNCj4gPiArICAgICBpZiAob3Bz ICYmIG9wcy0+Y2hlY2tfY29kZWMpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gb3BzLT5jaGVj a19jb2RlYyhjb3JlLT50eXBlKTsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIHRydWU7DQo+ID4g K30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgYm9vbCB2cHVfaWZhY2VfY2hlY2tfZm9ybWF0 KHN0cnVjdCB2cHVfY29yZSAqY29yZSwgdTMyDQo+IHBpeGVsZm10KQ0KPiA+ICt7DQo+ID4gKyAg ICAgc3RydWN0IHZwdV9pZmFjZV9vcHMgKm9wcyA9IHZwdV9pZmFjZV9nZXQoY29yZSk7DQo+ID4g Kw0KPiA+ICsgICAgIGlmIChvcHMgJiYgb3BzLT5jaGVja19mbXQpDQo+ID4gKyAgICAgICAgICAg ICByZXR1cm4gb3BzLT5jaGVja19mbXQoY29yZS0+dHlwZSwgcGl4ZWxmbXQpOw0KPiA+ICsNCj4g PiArICAgICByZXR1cm4gdHJ1ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSBp bnQgdnB1X2lmYWNlX2Jvb3RfY29yZShzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUpDQo+ID4gK3sNCj4g PiArICAgICBzdHJ1Y3QgdnB1X2lmYWNlX29wcyAqb3BzID0gdnB1X2lmYWNlX2dldChjb3JlKTsN Cj4gPiArDQo+ID4gKyAgICAgaWYgKG9wcyAmJiBvcHMtPmJvb3RfY29yZSkNCj4gPiArICAgICAg ICAgICAgIHJldHVybiBvcHMtPmJvb3RfY29yZShjb3JlKTsNCj4gPiArICAgICByZXR1cm4gMDsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSBpbnQgdnB1X2lmYWNlX2dldF9wb3dl cl9zdGF0ZShzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3Qg dnB1X2lmYWNlX29wcyAqb3BzID0gdnB1X2lmYWNlX2dldChjb3JlKTsNCj4gPiArDQo+ID4gKyAg ICAgaWYgKG9wcyAmJiBvcHMtPmdldF9wb3dlcl9zdGF0ZSkNCj4gPiArICAgICAgICAgICAgIHJl dHVybiBvcHMtPmdldF9wb3dlcl9zdGF0ZShjb3JlKTsNCj4gPiArICAgICByZXR1cm4gMTsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSBpbnQgdnB1X2lmYWNlX3NodXRkb3duX2Nv cmUoc3RydWN0IHZwdV9jb3JlICpjb3JlKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9p ZmFjZV9vcHMgKm9wcyA9IHZwdV9pZmFjZV9nZXQoY29yZSk7DQo+ID4gKw0KPiA+ICsgICAgIGlm IChvcHMgJiYgb3BzLT5zaHV0ZG93bl9jb3JlKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIG9w cy0+c2h1dGRvd25fY29yZShjb3JlKTsNCj4gPiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIGlubGluZSBpbnQgdnB1X2lmYWNlX3Jlc3RvcmVfY29yZShzdHJ1Y3Qg dnB1X2NvcmUgKmNvcmUpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2lmYWNlX29wcyAq b3BzID0gdnB1X2lmYWNlX2dldChjb3JlKTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKG9wcyAmJiBv cHMtPnJlc3RvcmVfY29yZSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiBvcHMtPnJlc3RvcmVf Y29yZShjb3JlKTsNCj4gPiArICAgICByZXR1cm4gLUVJTlZBTDsNCj4gPiArfQ0KPiA+ICsNCj4g PiArc3RhdGljIGlubGluZSBpbnQgdnB1X2lmYWNlX29uX2Zpcm13YXJlX2xvYWRlZChzdHJ1Y3Qg dnB1X2NvcmUgKmNvcmUpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2lmYWNlX29wcyAq b3BzID0gdnB1X2lmYWNlX2dldChjb3JlKTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKG9wcyAmJiBv cHMtPm9uX2Zpcm13YXJlX2xvYWRlZCkNCj4gPiArICAgICAgICAgICAgIHJldHVybiBvcHMtPm9u X2Zpcm13YXJlX2xvYWRlZChjb3JlKTsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIDA7DQo+ID4g K30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgdTMyIHZwdV9pZmFjZV9nZXRfZGF0YV9zaXpl KHN0cnVjdCB2cHVfY29yZSAqY29yZSkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB2cHVfaWZh Y2Vfb3BzICpvcHMgPSB2cHVfaWZhY2VfZ2V0KGNvcmUpOw0KPiA+ICsNCj4gPiArICAgICBpZiAo IW9wcyB8fCAhb3BzLT5nZXRfZGF0YV9zaXplKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIDA7 DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiBvcHMtPmdldF9kYXRhX3NpemUoKTsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIGlubGluZSBpbnQgdnB1X2lmYWNlX2luaXQoc3RydWN0IHZwdV9j b3JlICpjb3JlLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2cHVf c2hhcmVkX2FkZHIgKnNoYXJlZCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgdnB1X2J1ZmZlciAqcnBjLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRtYV9hZGRyX3QgYm9vdF9hZGRyKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9pZmFj ZV9vcHMgKm9wcyA9IHZwdV9pZmFjZV9nZXQoY29yZSk7DQo+ID4gKw0KPiA+ICsgICAgIGlmICgh b3BzIHx8ICFvcHMtPmluaXRfcnBjKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7 DQo+ID4gKw0KPiA+ICsgICAgIG9wcy0+aW5pdF9ycGMoc2hhcmVkLCBycGMsIGJvb3RfYWRkcik7 DQo+ID4gKyAgICAgY29yZS0+aWZhY2UgPSBzaGFyZWQ7DQo+ID4gKyAgICAgc2hhcmVkLT5jb3Jl ID0gY29yZTsNCj4gPiArICAgICBpZiAocnBjLT5ieXRlc3VzZWQgPiBycGMtPmxlbmd0aCkNCj4g PiArICAgICAgICAgICAgIHJldHVybiAtRU5PU1BDOw0KPiA+ICsgICAgIHJldHVybiAwOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIGludCB2cHVfaWZhY2Vfc2V0X2xvZ19idWYo c3RydWN0IHZwdV9jb3JlICpjb3JlLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IHZwdV9idWZmZXIgKmxvZykNCj4gPiArew0KPiA+ICsgICAgIHN0cnVj dCB2cHVfaWZhY2Vfb3BzICpvcHMgPSB2cHVfaWZhY2VfZ2V0KGNvcmUpOw0KPiA+ICsNCj4gPiAr ICAgICBpZiAoIW9wcykNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsN Cj4gPiArICAgICBpZiAob3BzLT5zZXRfbG9nX2J1ZikNCj4gPiArICAgICAgICAgICAgIG9wcy0+ c2V0X2xvZ19idWYoY29yZS0+aWZhY2UsIGxvZyk7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiAw Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIGludCB2cHVfaWZhY2VfY29uZmln X3N5c3RlbShzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUsDQo+ID4gKyAgICAgICAgICAgICB1MzIgcmVn c19iYXNlLCB2b2lkIF9faW9tZW0gKnJlZ3MpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1 X2lmYWNlX29wcyAqb3BzID0gdnB1X2lmYWNlX2dldChjb3JlKTsNCj4gPiArDQo+ID4gKyAgICAg aWYgKCFvcHMpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gPiArICAgICBp ZiAob3BzLT5zZXRfc3lzdGVtX2NmZykNCj4gPiArICAgICAgICAgICAgIG9wcy0+c2V0X3N5c3Rl bV9jZmcoY29yZS0+aWZhY2UsIHJlZ3NfYmFzZSwgcmVncywgY29yZS0+aWQpOw0KPiA+ICsNCj4g PiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSBpbnQg dnB1X2lmYWNlX2dldF9zdHJlYW1fYnVmZmVyX3NpemUoc3RydWN0IHZwdV9jb3JlICpjb3JlKQ0K PiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9pZmFjZV9vcHMgKm9wcyA9IHZwdV9pZmFjZV9n ZXQoY29yZSk7DQo+ID4gKw0KPiA+ICsgICAgIGlmICghb3BzIHx8ICFvcHMtPmdldF9zdHJlYW1f YnVmZmVyX3NpemUpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiArDQo+ID4gKyAg ICAgcmV0dXJuIG9wcy0+Z2V0X3N0cmVhbV9idWZmZXJfc2l6ZShjb3JlLT5pZmFjZSk7DQo+ID4g K30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgaW50IHZwdV9pZmFjZV9jb25maWdfc3RyZWFt KHN0cnVjdCB2cHVfaW5zdCAqaW5zdCkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB2cHVfaWZh Y2Vfb3BzICpvcHMgPSB2cHVfaWZhY2VfZ2V0KGluc3QtPmNvcmUpOw0KPiA+ICsNCj4gPiArICAg ICBXQVJOX09OKGluc3QtPmlkIDwgMCk7DQo+ID4gKyAgICAgaWYgKCFvcHMpDQo+ID4gKyAgICAg ICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gPiArICAgICBpZiAob3BzLT5zZXRfc3RyZWFtX2Nm ZykNCj4gPiArICAgICAgICAgICAgIG9wcy0+c2V0X3N0cmVhbV9jZmcoaW5zdC0+Y29yZS0+aWZh Y2UsIGluc3QtPmlkKTsNCj4gPiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIGlubGluZSBpbnQgdnB1X2lmYWNlX3NlbmRfY21kKHN0cnVjdCB2cHVfY29yZSAqY29y ZSwgc3RydWN0DQo+IHZwdV9ycGNfZXZlbnQgKmNtZCkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVj dCB2cHVfaWZhY2Vfb3BzICpvcHMgPSB2cHVfaWZhY2VfZ2V0KGNvcmUpOw0KPiA+ICsNCj4gPiAr ICAgICBpZiAoIW9wcyB8fCAhb3BzLT5zZW5kX2NtZF9idWYpDQo+ID4gKyAgICAgICAgICAgICBy ZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIG9wcy0+c2VuZF9jbWRfYnVm KGNvcmUtPmlmYWNlLCBjbWQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIGlu dCB2cHVfaWZhY2VfcmVjZWl2ZV9tc2coc3RydWN0IHZwdV9jb3JlICpjb3JlLCBzdHJ1Y3QNCj4g dnB1X3JwY19ldmVudCAqbXNnKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9pZmFjZV9v cHMgKm9wcyA9IHZwdV9pZmFjZV9nZXQoY29yZSk7DQo+ID4gKw0KPiA+ICsgICAgIGlmICghb3Bz IHx8ICFvcHMtPnJlY2VpdmVfbXNnX2J1ZikNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlO VkFMOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gb3BzLT5yZWNlaXZlX21zZ19idWYoY29yZS0+ aWZhY2UsIG1zZyk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgaW50IHZwdV9p ZmFjZV9wYWNrX2NtZChzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUsDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdnB1X3JwY19ldmVudCAqcGt0LA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIGluZGV4LCB1MzIgaWQsIHZv aWQgKmRhdGEpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2lmYWNlX29wcyAqb3BzID0g dnB1X2lmYWNlX2dldChjb3JlKTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKCFvcHMgfHwgIW9wcy0+ cGFja19jbWQpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gPiArICAgICBy ZXR1cm4gb3BzLT5wYWNrX2NtZChwa3QsIGluZGV4LCBpZCwgZGF0YSk7DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyBpbmxpbmUgaW50IHZwdV9pZmFjZV9jb252ZXJ0X21zZ19pZChzdHJ1Y3Qg dnB1X2NvcmUgKmNvcmUsIHUzMg0KPiBtc2dfaWQpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3Qg dnB1X2lmYWNlX29wcyAqb3BzID0gdnB1X2lmYWNlX2dldChjb3JlKTsNCj4gPiArDQo+ID4gKyAg ICAgaWYgKCFvcHMgfHwgIW9wcy0+Y29udmVydF9tc2dfaWQpDQo+ID4gKyAgICAgICAgICAgICBy ZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIG9wcy0+Y29udmVydF9tc2df aWQobXNnX2lkKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSBpbnQgdnB1X2lm YWNlX3VucGFja19tc2dfZGF0YShzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2cHVfcnBjX2V2ZW50 DQo+ICpwa3QsIHZvaWQgKmRhdGEpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2lmYWNl X29wcyAqb3BzID0gdnB1X2lmYWNlX2dldChjb3JlKTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKCFv cHMgfHwgIW9wcy0+dW5wYWNrX21zZ19kYXRhKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1F SU5WQUw7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiBvcHMtPnVucGFja19tc2dfZGF0YShwa3Qs IGRhdGEpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIGludCB2cHVfaWZhY2Vf aW5wdXRfZnJhbWUoc3RydWN0IHZwdV9pbnN0ICppbnN0LA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIpDQo+ID4g K3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2lmYWNlX29wcyAqb3BzID0gdnB1X2lmYWNlX2dldChp bnN0LT5jb3JlKTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKCFvcHMgfHwgIW9wcy0+aW5wdXRfZnJh bWUpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKyAgICAg cmV0dXJuIG9wcy0+aW5wdXRfZnJhbWUoaW5zdC0+Y29yZS0+aWZhY2UsIGluc3QsIHZiKTsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSBpbnQgdnB1X2lmYWNlX2NvbmZpZ19tZW1v cnlfcmVzb3VyY2Uoc3RydWN0IHZwdV9pbnN0ICppbnN0LA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICB1MzIgdHlwZSwgdTMyIGluZGV4LCBzdHJ1Y3QgdnB1X2J1ZmZlciAqYnVmKQ0KPiA+ICt7 DQo+ID4gKyAgICAgc3RydWN0IHZwdV9pZmFjZV9vcHMgKm9wcyA9IHZwdV9pZmFjZV9nZXQoaW5z dC0+Y29yZSk7DQo+ID4gKw0KPiA+ICsgICAgIFdBUk5fT04oaW5zdC0+aWQgPCAwKTsNCj4gPiAr ICAgICBpZiAoIW9wcyB8fCAhb3BzLT5jb25maWdfbWVtb3J5X3Jlc291cmNlKQ0KPiA+ICsgICAg ICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiBvcHMtPmNv bmZpZ19tZW1vcnlfcmVzb3VyY2UoaW5zdC0+Y29yZS0+aWZhY2UsDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0LT5pZCwNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHR5cGUsIGluZGV4LCBidWYpOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgaW5saW5lIGludCB2cHVfaWZhY2VfY29uZmlnX3N0cmVhbV9idWZmZXIoc3Ry dWN0IHZwdV9pbnN0ICppbnN0LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgdnB1X2J1ZmZlciAqYnVmKQ0KPiA+ICt7DQo+ID4gKyAgICAg c3RydWN0IHZwdV9pZmFjZV9vcHMgKm9wcyA9IHZwdV9pZmFjZV9nZXQoaW5zdC0+Y29yZSk7DQo+ ID4gKw0KPiA+ICsgICAgIFdBUk5fT04oaW5zdC0+aWQgPCAwKTsNCj4gPiArICAgICBpZiAoIW9w cyB8fCAhb3BzLT5jb25maWdfc3RyZWFtX2J1ZmZlcikNCj4gPiArICAgICAgICAgICAgIHJldHVy biAtRUlOVkFMOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gb3BzLT5jb25maWdfc3RyZWFtX2J1 ZmZlcihpbnN0LT5jb3JlLT5pZmFjZSwgaW5zdC0+aWQsIGJ1Zik7DQo+ID4gK30NCj4gPiArDQo+ ID4gK3N0YXRpYyBpbmxpbmUgaW50IHZwdV9pZmFjZV91cGRhdGVfc3RyZWFtX2J1ZmZlcihzdHJ1 Y3QgdnB1X2luc3QgKmluc3QsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHUzMiBwdHIsIGJvb2wgd3JpdGUpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1 Y3QgdnB1X2lmYWNlX29wcyAqb3BzID0gdnB1X2lmYWNlX2dldChpbnN0LT5jb3JlKTsNCj4gPiAr DQo+ID4gKyAgICAgV0FSTl9PTihpbnN0LT5pZCA8IDApOw0KPiA+ICsgICAgIGlmICghb3BzIHx8 ICFvcHMtPnVwZGF0ZV9zdHJlYW1fYnVmZmVyKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1F SU5WQUw7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiBvcHMtPnVwZGF0ZV9zdHJlYW1fYnVmZmVy KGluc3QtPmNvcmUtPmlmYWNlLCBpbnN0LT5pZCwgcHRyLA0KPiB3cml0ZSk7DQo+ID4gK30NCj4g PiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgaW50IHZwdV9pZmFjZV9nZXRfc3RyZWFtX2J1ZmZlcl9k ZXNjKHN0cnVjdCB2cHVfaW5zdCAqaW5zdCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCB2cHVfcnBjX2J1ZmZlcl9kZXNjDQo+ICpkZXNjKQ0KPiA+ICt7 DQo+ID4gKyAgICAgc3RydWN0IHZwdV9pZmFjZV9vcHMgKm9wcyA9IHZwdV9pZmFjZV9nZXQoaW5z dC0+Y29yZSk7DQo+ID4gKw0KPiA+ICsgICAgIFdBUk5fT04oaW5zdC0+aWQgPCAwKTsNCj4gPiAr ICAgICBpZiAoIW9wcyB8fCAhb3BzLT5nZXRfc3RyZWFtX2J1ZmZlcl9kZXNjKQ0KPiA+ICsgICAg ICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsgICAgIGlmICghZGVzYykNCj4g PiArICAgICAgICAgICAgIHJldHVybiAwOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gb3BzLT5n ZXRfc3RyZWFtX2J1ZmZlcl9kZXNjKGluc3QtPmNvcmUtPmlmYWNlLCBpbnN0LT5pZCwgZGVzYyk7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgdTMyIHZwdV9pZmFjZV9nZXRfdmVy c2lvbihzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1 X2lmYWNlX29wcyAqb3BzID0gdnB1X2lmYWNlX2dldChjb3JlKTsNCj4gPiArDQo+ID4gKyAgICAg aWYgKCFvcHMgfHwgIW9wcy0+Z2V0X3ZlcnNpb24pDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4g MDsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIG9wcy0+Z2V0X3ZlcnNpb24oY29yZS0+aWZhY2Up Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHUzMiB2cHVfaWZhY2VfZ2V0X21h eF9pbnN0YW5jZV9jb3VudChzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUpDQo+ID4gK3sNCj4gPiArICAg ICBzdHJ1Y3QgdnB1X2lmYWNlX29wcyAqb3BzID0gdnB1X2lmYWNlX2dldChjb3JlKTsNCj4gPiAr DQo+ID4gKyAgICAgaWYgKCFvcHMgfHwgIW9wcy0+Z2V0X21heF9pbnN0YW5jZV9jb3VudCkNCj4g PiArICAgICAgICAgICAgIHJldHVybiAwOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gb3BzLT5n ZXRfbWF4X2luc3RhbmNlX2NvdW50KGNvcmUtPmlmYWNlKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIGlubGluZSBpbnQgdnB1X2lmYWNlX3NldF9lbmNvZGVfcGFyYW1zKHN0cnVjdCB2cHVf aW5zdCAqaW5zdCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdnB1 X2VuY29kZV9wYXJhbXMgKnBhcmFtcywgdTMyDQo+IHVwZGF0ZSkNCj4gPiArew0KPiA+ICsgICAg IHN0cnVjdCB2cHVfaWZhY2Vfb3BzICpvcHMgPSB2cHVfaWZhY2VfZ2V0KGluc3QtPmNvcmUpOw0K PiA+ICsNCj4gPiArICAgICBXQVJOX09OKGluc3QtPmlkIDwgMCk7DQo+ID4gKyAgICAgaWYgKCFv cHMgfHwgIW9wcy0+c2V0X2VuY29kZV9wYXJhbXMpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4g LUVJTlZBTDsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIG9wcy0+c2V0X2VuY29kZV9wYXJhbXMo aW5zdC0+Y29yZS0+aWZhY2UsIGluc3QtPmlkLCBwYXJhbXMsDQo+IHVwZGF0ZSk7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgaW50IHZwdV9pZmFjZV9zZXRfZGVjb2RlX3BhcmFt cyhzdHJ1Y3QgdnB1X2luc3QgKmluc3QsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IHZwdV9kZWNvZGVfcGFyYW1zICpwYXJhbXMsIHUzMg0KPiB1cGRhdGUpDQo+ID4g K3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2lmYWNlX29wcyAqb3BzID0gdnB1X2lmYWNlX2dldChp bnN0LT5jb3JlKTsNCj4gPiArDQo+ID4gKyAgICAgV0FSTl9PTihpbnN0LT5pZCA8IDApOw0KPiA+ ICsgICAgIGlmICghb3BzIHx8ICFvcHMtPnNldF9kZWNvZGVfcGFyYW1zKQ0KPiA+ICsgICAgICAg ICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiBvcHMtPnNldF9k ZWNvZGVfcGFyYW1zKGluc3QtPmNvcmUtPmlmYWNlLCBpbnN0LT5pZCwgcGFyYW1zLA0KPiB1cGRh dGUpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIGludCB2cHVfaWZhY2VfYWRk X3Njb2RlKHN0cnVjdCB2cHVfaW5zdCAqaW5zdCwgdTMyIHNjb2RlX3R5cGUpDQo+ID4gK3sNCj4g PiArICAgICBzdHJ1Y3QgdnB1X2lmYWNlX29wcyAqb3BzID0gdnB1X2lmYWNlX2dldChpbnN0LT5j b3JlKTsNCj4gPiArDQo+ID4gKyAgICAgV0FSTl9PTihpbnN0LT5pZCA8IDApOw0KPiA+ICsgICAg IGlmICghb3BzIHx8ICFvcHMtPmFkZF9zY29kZSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAt RUlOVkFMOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gb3BzLT5hZGRfc2NvZGUoaW5zdC0+Y29y ZS0+aWZhY2UsIGluc3QtPmlkLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZp bnN0LT5zdHJlYW1fYnVmZmVyLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu c3QtPm91dF9mb3JtYXQucGl4Zm10LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNjb2RlX3R5cGUpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIGludCB2cHVf aWZhY2VfcHJlX3NlbmRfY21kKHN0cnVjdCB2cHVfaW5zdCAqaW5zdCkNCj4gPiArew0KPiA+ICsg ICAgIHN0cnVjdCB2cHVfaWZhY2Vfb3BzICpvcHMgPSB2cHVfaWZhY2VfZ2V0KGluc3QtPmNvcmUp Ow0KPiA+ICsNCj4gPiArICAgICBXQVJOX09OKGluc3QtPmlkIDwgMCk7DQo+ID4gKyAgICAgaWYg KG9wcyAmJiBvcHMtPnByZV9zZW5kX2NtZCkNCj4gPiArICAgICAgICAgICAgIHJldHVybiBvcHMt PnByZV9zZW5kX2NtZChpbnN0LT5jb3JlLT5pZmFjZSwgaW5zdC0+aWQpOw0KPiA+ICsgICAgIHJl dHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIGludCB2cHVfaWZhY2Vf cG9zdF9zZW5kX2NtZChzdHJ1Y3QgdnB1X2luc3QgKmluc3QpDQo+ID4gK3sNCj4gPiArICAgICBz dHJ1Y3QgdnB1X2lmYWNlX29wcyAqb3BzID0gdnB1X2lmYWNlX2dldChpbnN0LT5jb3JlKTsNCj4g PiArDQo+ID4gKyAgICAgV0FSTl9PTihpbnN0LT5pZCA8IDApOw0KPiA+ICsgICAgIGlmIChvcHMg JiYgb3BzLT5wb3N0X3NlbmRfY21kKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIG9wcy0+cG9z dF9zZW5kX2NtZChpbnN0LT5jb3JlLT5pZmFjZSwgaW5zdC0+aWQpOw0KPiA+ICsgICAgIHJldHVy biAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIGludCB2cHVfaWZhY2VfaW5p dF9pbnN0YW5jZShzdHJ1Y3QgdnB1X2luc3QgKmluc3QpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1 Y3QgdnB1X2lmYWNlX29wcyAqb3BzID0gdnB1X2lmYWNlX2dldChpbnN0LT5jb3JlKTsNCj4gPiAr DQo+ID4gKyAgICAgV0FSTl9PTihpbnN0LT5pZCA8IDApOw0KPiA+ICsgICAgIGlmIChvcHMgJiYg b3BzLT5pbml0X2luc3RhbmNlKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIG9wcy0+aW5pdF9p bnN0YW5jZShpbnN0LT5jb3JlLT5pZmFjZSwgaW5zdC0+aWQpOw0KPiA+ICsNCj4gPiArICAgICBy ZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArI2VuZGlmDQo+IA0KDQo=