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.3 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_2 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7329AC4338F for ; Mon, 16 Aug 2021 22:05:00 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4BAC260E90 for ; Mon, 16 Aug 2021 22:05:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233784AbhHPWFb (ORCPT ); Mon, 16 Aug 2021 18:05:31 -0400 Received: from mail-db8eur05on2091.outbound.protection.outlook.com ([40.107.20.91]:2105 "EHLO EUR05-DB8-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S232488AbhHPWFa (ORCPT ); Mon, 16 Aug 2021 18:05:30 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RqebjKE7eH3pPmaJgEdC014oHdmRo9Um0sVguFBl1ij41TZXW/fXKiO3EXs/cvd6c0O14UnOXcOi9j+DDFvMm9XkZHkMwKxCh9Itp8KF5xme79FoJJ0ddmBUILSV0aE2pfYmR79u/hDcZuDHjqKqeHtYpL8lh9hN5GGOE8YN5KyTfJ9vKkmHJ6m4GK5xO385GfJux2rcZdNw4wK+lNlTnmdP5A1jm7x+0tQ4rfbMco1pmxWQaAdHNFr2x5t4lwK3rVT8dlvITfS6oGlLBTFG3U2jEKWp4vILPpxZJTCewt4CICBB18chEtUc9gsgRvapyLg9Y2aEQjAdLRE6rO3RlA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=NjxXs2Fbtpl+SLm1MYY7lrBHUFiooJZiLyAca1zNAUo=; b=YZtV0DSTIvAdSJ+oSeEqaBzb5Sf2J4emND+BMYY2tJFzor3ndVRoUePBBMrdKrEo4tphY9EyG7FQEw2ytazIwvhHo/KZ3pqvGkRPBL4ILxOZIo5iY9wJCBjN5S82os1RxYN68I6PsviaAp1GEcApSrv2jyBVmNmS85pRD0P5RlWrtAvMuBpqtU2ep59nO4/DD3q0Goqn+HR2KEySJkKNoLqLXEKTnSeEqzOU7Qk6RRWICUl76zV8B3C843exRYjjSKgarGb9t/73/HNTk8o9BOtko/c6AecgWxqcsJgy2KHqW3ET9CAgtfolaSv5J/sxxGUOSkU09IqbluoJuB2rCA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=esd.eu; dmarc=pass action=none header.from=esd.eu; dkim=pass header.d=esd.eu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=esdhannover.onmicrosoft.com; s=selector1-esdhannover-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=NjxXs2Fbtpl+SLm1MYY7lrBHUFiooJZiLyAca1zNAUo=; b=bUE0qDruxXA5CbCYiuLi7rG/vxRMqtE6+WWMpo5m267zxIuOhY55/3BnV8KOhvZW+eVLEW8c8s5moGFDTJYQ0MPZWZTLddQJByAUknYjx6jlxnLOxGmKbO962uG3MCb3l4qdpsE4LrdbF/vyr/lGlQp75GDeE8FKVqvsu4xB4K4= Received: from AM9PR03MB6929.eurprd03.prod.outlook.com (2603:10a6:20b:287::7) by VI1PR0302MB3421.eurprd03.prod.outlook.com (2603:10a6:803:1b::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4415.17; Mon, 16 Aug 2021 22:04:53 +0000 Received: from AM9PR03MB6929.eurprd03.prod.outlook.com ([fe80::1846:f0d4:5710:e65d]) by AM9PR03MB6929.eurprd03.prod.outlook.com ([fe80::1846:f0d4:5710:e65d%5]) with mapi id 15.20.4415.023; Mon, 16 Aug 2021 22:04:53 +0000 From: =?utf-8?B?U3RlZmFuIE3DpHRqZQ==?= To: "mkl@pengutronix.de" CC: "netdev@vger.kernel.org" , "linux-can@vger.kernel.org" , "wg@grandegger.com" Subject: Re: [PATCH v2 1/1] can: esd: add support for esd GmbH PCIe/402 CAN interface family Thread-Topic: [PATCH v2 1/1] can: esd: add support for esd GmbH PCIe/402 CAN interface family Thread-Index: AQHXhWm5tiZexLwyk02Hu+PQzH7q16tmg+GAgBBGxQA= Date: Mon, 16 Aug 2021 22:04:53 +0000 Message-ID: <0a3e198ab0a1d03d0c482c1792fd0c3377477bca.camel@esd.eu> References: <20210730173805.3926-1-Stefan.Maetje@esd.eu> <20210730173805.3926-2-Stefan.Maetje@esd.eu> <20210806133125.k7yiz4zood3gvrdc@pengutronix.de> In-Reply-To: <20210806133125.k7yiz4zood3gvrdc@pengutronix.de> Accept-Language: de-DE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: Evolution 3.28.5-0ubuntu0.18.04.2 authentication-results: pengutronix.de; dkim=none (message not signed) header.d=none;pengutronix.de; dmarc=none action=none header.from=esd.eu; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 11b3d42f-3c1a-474c-7a21-08d96101e071 x-ms-traffictypediagnostic: VI1PR0302MB3421: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:7691; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: WyVY3AfCgCleTrPq8kc8ptBpUFNY92QmVmA3O9FLnqgVktlhTndlSazeMO6CzE47iYUOU46n86+UBDwGKnB6C8Sr+DUFk9ADrBMXaLYHLJCtaxtwFo9Sg7hmyVONKAUtGisy1fjM3K/+59z+BV5M59xtMXjM5PhCPcfcW0EPX2A6gUKlBiCCtJm9Sgpkd8vEhudt3q/Oqf/GrA+6PlENPegO4NN96MzmY7hoxgUMibz8m+jgpeEXLDO5w9nQsZ4a6fLGTounGXDSW0fGJxqLyGoS9/JfLYH5+xdGe1xVHqRN0frXDvjURWhLkJV4lc8UFLjGdJCy4PTGBJujx7mOr7X9l/TLrwzVCtz361+T51aYvPfjF3Mq/apC9ClzOhC7Vk9PhXCS/n6eykwtJ+nQSVOvfpuzhOLpJp0/mSAcF6YK9VPm01jgJdSUM+3S81aBlFMRh/Vsaqn5XKgCbh9b6mnvYg52UxB4GV2V8eQb0kmpvxWXBlSPuVJ48VJSa6aAKDgvHzGGmgtUwt+3tybiSgEZdbL9+HCtxVRurJBMJjnJTfhiScL0rxd84nYm000Ksi66pzjYaspq0eWB44NUk5shaVFHubdIz9BGEcLntrCG4qX78I/DT/IQVwD0uG7sWlgoX18Ddd5q+y/JnZjzhuC8OW2mFcZdrUjLP2V2+PRh1Nq0DL3Ti2Oq6FxosTjdIA2XAsDT8+ZKLKrdjkJk4816kM8qowbr2j7rZKg5K7TCPULBmldupj0Tgkhr0NpMm85bu/CbcHYYd40BogIzhxu79FrFeEF4c+8ImaSrcRij8fT+yK0Is7X8PF5oNz/wp/we8oCylUj3VM5Hr2APyXSnWqlPvwjDmY0FyGtvymU= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR03MB6929.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(136003)(376002)(396003)(346002)(39830400003)(122000001)(2906002)(5660300002)(76116006)(4326008)(66446008)(64756008)(66556008)(66476007)(66946007)(30864003)(6916009)(36756003)(38100700002)(91956017)(83380400001)(66574015)(53546011)(6506007)(316002)(85182001)(54906003)(8676002)(2616005)(186003)(86362001)(85202003)(26005)(478600001)(71200400001)(6486002)(8936002)(38070700005)(6512007)(966005)(99106002)(559001)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?QXVFRlVzTzViL2NZQTc2bTV3bUV5TkZwL0dnbkxqYXdLYXBucFJUdFRWbjZi?= =?utf-8?B?T05SNzRSQyt0RlkzSEVqWmZMOU0wM0x6WW5IV0EyMWJUTi9ENEgraS8zYThK?= =?utf-8?B?NTNmUHZCeml3QnBIbDFpTlhHdHJrYzlsTm8vVlFVK2lnNEhJUTU2T3cxQko5?= =?utf-8?B?MEdjSnIvTCtxNUZzUDZiYWEyVk9TRjEzNXpoVHR2TnlsL2taaEZjUDlSNWpB?= =?utf-8?B?T01CL2U3eGZMRmgrbkhmbjRqVnJIWGRKL2gzMGJybnNGWFZ0NHFsNDhoK1dP?= =?utf-8?B?Q081WnkrQ0RxcXVPYnNjbm9oUklFZCtvdFlVZEg1UmJsNU9uOVAzeERPcjNJ?= =?utf-8?B?Vy9EVDR6bmlXaEsvNnlKWC9RNTloRHNVNk42ZkdoZ2d6aFdlcWFUaU8vbGh4?= =?utf-8?B?a1U1NTZBN1BhZXU0Vm1FeEo2NVhDYjRGbXdVeWNVNmJ0MWJwamRVblN1WWdV?= =?utf-8?B?ZzI2dUxYTVBieUgvdmk0ei9YcjlEMmZVc3EyL2JyN0EwQXhOTGwra0p0S3E5?= =?utf-8?B?SkM2M0NsZ2FORzJ3TW85QVhRWTJKN3pGWnhXbC9ha25QaitCU0tyMi8wejA3?= =?utf-8?B?eEJlSHd2S2hiT0hLakxPeUdaNFFDekkvQzlST2w5YkhXYzNURWEvYm45Y24r?= =?utf-8?B?ckd5TDhRQ2t2d2xWN25GNEt4TjlqSmpJcC9CRitYUjNKOW5tMDJxYTJZZEtw?= =?utf-8?B?ZTNnN0x0Y0tzOTRnNkRQR1p6ZmdRbXBvZkp0YWE0OWZPSDZiL3llNkdPUmNI?= =?utf-8?B?YkVlVFpISkt2V09sL2NjZHk4Y1Y3YkFXUGloeGt2VWt0QnRYZFpjVDlnS1lo?= =?utf-8?B?RU03bUJKVVlMR1hPUGZQdjUrLzkvL3A5aDd1SXJQQm02OFY2ZVFLUkxsSlFE?= =?utf-8?B?MGJEVThXSHF3Z3dPOVNYZUYxaSsrcm14SkI0TU9KZkV4Q2lwazd3TUZHWFJj?= =?utf-8?B?V1NIOE1hOHJPWjJWNm4vRmxiTVJOQUtiQU03bVVhQlViQnNqQXNmbHhmM0dw?= =?utf-8?B?UHpNZ01SVVV1TFY5QWF1a0RDc1laZVlhRjVDMkpqUVVSNzU4djBqbEtXRjhr?= =?utf-8?B?NFgzUnlTeFNrcitNVC9CY29QczVidDhkTDg4ckZKOXBaeDhWR2t4d3VPbU13?= =?utf-8?B?eTJQRkYxZ0VaTzRGa0V4MTYvSURTSDlaWTU2TU1hVGZHSjdtWHRSc0g0bGpw?= =?utf-8?B?bzVPUDRnMUpXWDdyR3l0aGl4TEdFZWdFOEc2RGIvclRNTWJucVZLem9qM0NW?= =?utf-8?B?L25SWHAwUS9Pa1pHVVZhd3NsR2lnc1ZsR0o1WEJFaVRCSGVpU2hBWXFESzBo?= =?utf-8?B?QVp2b2dPc2RyN1hTZ2dxaHcreVZaWU5LQmpoZGlHZGJyeEozWUwwUnRRZ1gr?= =?utf-8?B?U3VjMDIvTi9ZOTk2YTZham5IU3IwdWdSUjBNbnlMb3pLS3NrVjFZTkljSFAr?= =?utf-8?B?WkhUUFNFSnNFS0pody9UcjI5emlsQWs0VDVVQkZSTGUwL0wrR0x1YVdteTNl?= =?utf-8?B?dFpwd1Y1ZG9wYWp1clFpbk5VbzZsbnN1MkFWZEIwYngzZklWRDdTdVY3Qm5u?= =?utf-8?B?ZnpuOUFwZ3J0SmRyVGFTK1Bxb053eEl4bHJqbGJxYm1ybXVNSkczSCtuVWRN?= =?utf-8?B?cVBDK0dUakh4VHVybUFRN2swalBkOVVHRndNT2tLZHA1QlQ4Q0lQUTNLS1RE?= =?utf-8?B?bFBLUEVRWTB1UlB1UHZ5K3NvM280RHc4dEpCbGFhQVA2cm50UUowVlJ4SXZM?= =?utf-8?Q?y7qS/ppW/oYvAuMBWANtquQ0aFOXgQlIIz6QEOb?= x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: esd.eu X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AM9PR03MB6929.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 11b3d42f-3c1a-474c-7a21-08d96101e071 X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Aug 2021 22:04:53.6178 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 5a9c3a1d-52db-4235-b74c-9fd851db2e6b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: NIym8UUH4HMTp4xewZdQLeG6A73yK00wg5mDsZkrVRuI/vq62xCCk463C/3po9GV47iFIQDaJByz7/vu9b8zIw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0302MB3421 Precedence: bulk List-ID: X-Mailing-List: linux-can@vger.kernel.org QW0gRnJlaXRhZywgZGVuIDA2LjA4LjIwMjEsIDE1OjMxICswMjAwIHNjaHJpZWIgTWFyYyBLbGVp bmUtQnVkZGU6DQo+IE9uIDMwLjA3LjIwMjEgMTk6Mzg6MDUsIFN0ZWZhbiBNw6R0amUgd3JvdGU6 DQo+ID4gVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBQQ0kgYmFzZWQgUENJZS80MDIg Q0FOIGludGVyZmFjZSBmYW1pbHkNCj4gPiBmcm9tIGVzZCBHbWJIIHRoYXQgaXMgYXZhaWxhYmxl IHdpdGggdmFyaW91cyBmb3JtIGZhY3RvcnMNCj4gPiAoaHR0cHM6Ly9lc2QuZXUvZW4vcHJvZHVj dHMvNDAyLXNlcmllcy1jYW4taW50ZXJmYWNlcykuDQo+IA0KPiBUaGFua3MgZm9yIHRoZSBwYXRj aCENCj4gDQo+ID4gQWxsIGJvYXJkcyB1dGlsaXplIGEgRlBHQSBiYXNlZCBDQU4gY29udHJvbGxl ciBzb2x1dGlvbiBkZXZlbG9wZWQNCj4gPiBieSBlc2QgKGVzZEFDQykuIEZvciBtb3JlIGluZm9y bWF0aW9uIG9uIHRoZSBlc2RBQ0Mgc2VlDQo+ID4gaHR0cHM6Ly9lc2QuZXUvZW4vcHJvZHVjdHMv ZXNkYWNjLg0KPiA+IA0KPiA+IFRoaXMgZHJpdmVyIGRldGVjdHMgYWxsIGF2YWlsYWJsZSBDQU4g aW50ZXJmYWNlIGJvYXJkcyBidXQgYXRtLg0KPiA+IG9wZXJhdGVzIHRoZSBDQU4tRkQgY2FwYWJs ZSBkZXZpY2VzIGluIENsYXNzaWMtQ0FOIG1vZGUgb25seSENCj4gPiBBIGxhdGVyIHBhdGNoIHdp bGwgaW50cm9kdWNlIHRoZSBDQU4tRkQgZnVuY3Rpb25hbGl0eSBpbiB0aGlzDQo+ID4gZHJpdmVy Lg0KPiANCj4gT2ssIHBsZWFzZSByZW1vdmUgd2hhdCdzIGluc2lkZSB0aGUgI2lmIEFDQ19FTkFC TEVfQ0FORkQgZm9yIG5vdywgaXQgY2FuDQo+IGJlIGFkZGVkIGluIGEgbGF0ZXIgcGF0Y2guDQoN CkkndmUgcmVtb3ZlZCB0aGVzZSBwYXJ0cyBmcm9tIHRoZSBwYXRjaC4NCg0KDQo+IE9uZSBnZW5l cmFsIG5vdGUgYWJvdXQgdGhlIGRldm1fKigpIGhlbHBlciBmdW5jdGlvbnMuIFRoZSBpZGVhIGlz IHRoYXQNCj4geW91IGRvbid0IGhhdmUgdG8gZnJlZSB0aGUgcmVzb3VyY2VzIGFsbG9jYXRlZCB3 aXRoIHRoZSBkZXZtXyooKQ0KPiBmdW5jdGlvbnMsIHRoZXkgYXJlIGF1dG9tYXRpY2FsbHkgZnJl ZWQgaW4gcmV2ZXJzZSBvcmRlciBvZiBhbGxvY2F0aW9uLg0KPiBTbyBpdCB1c3VhbGx5IGRvZXNu J3QgbWFrZSBhbnkgc2Vuc2UgdG8gaGF2ZSBkZXZtX2tmcmVlKCkuDQoNCkkgd2lsbCByZWx5IG9u IHRoZSBhdXRvbWF0aWMgcmVsZWFzZSBvZiByZXNvdXJjZXMgYW5kIHJlbW92ZSB0aGUgZGV2bV9r ZnJlZSgpDQpjYWxsIGZvciBhIFYzIHZlcnNpb24gb2YgdGhlIHBhdGNoLg0KDQo+IFNhbWUgZm9y IHRoZSBJUlEgaGFuZGxlci4NCg0KSSBkbyBub3QgZmVlbCBjb21mb3J0YWJsZSB3aXRoIHJlbW92 aW5nIHRoZSBkZXZtX2ZyZWVfaXJxKCkgZnJvbSB0aGUgcGNpNDAyX2ZpbmlzaF9pbnRlcnJ1cHQo KSBmdW5jdGlvbiB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tDQpwY2k0MDJfcmVtb3ZlKCkN CnRoYXQgc2hvdWxkIHNodXQgZG93biB0aGUgZHJpdmVyIGZvciBhIFBDSSBkZXZpY2UuDQoNClRo aXMgaXMgYmVjYXVzZSBJIGNvdWxkIG5vdCBmaW5kIG91dCB3aGVuIHRoZSBmcmVlX2lycSgpIGlz IGludGVybmFsbHkgY2FsbGVkDQpkdXJpbmcgdGhlIHNodXRkb3duIG9mIHRoZSBQQ0kgZGV2aWNl IG9uIGJlaGFsZiBvZiB0aGUgZGV2bV8qIGZyYW1ld29yay4NCg0KVW5kZXIgdGhlIHByZXJlcXVp c2l0ZSB0aGF0IE1TSSBpcyBkaXNhYmxlZCBhbmQgdGhlIFBDSSBpbnRlcnJ1cHQgaXMgcnVubmlu Zw0KcmVhbGx5IGFzIGFuIGludGVycnVwdCBzaGFyZWQgd2l0aCBhbm90aGVyIGRldmljZSBpdCBz ZWVtcyB0byBiZSBjcnVjaWFsIHRoYXQNCnRoZSBwY2k0MDJfaW50ZXJydXB0KCkgaXMgKGFscmVh ZHkpIGRpc2Nvbm5lY3RlZCBmcm9tIHRoZSBpbnRlcnJ1cHQgaW4gcGNpX2ZpbmlzaF9pbnRlcnJ1 cHQoKSB0byBhdm9pZCBhIGNyYXNoIGR1cmluZyB0aGUgZnVydGhlcg0KZXhlY3V0aW9uIG9mIHBj aTQwMl9yZW1vdmUoKS4gVGhpcyBjb3VsZCBiZSB0aGUgY2FzZSB3aGVuIHRoZSBwY2k0MDJfaW50 ZXJydXB0KCkgaXMgY2FsbGVkDQpkdWUgdG8gYW4gaW50ZXJydXB0IGZvciB0aGUgc2hhcmVkIGRl dmljZS4NCg0KVG8gbWFyayB0aGlzIGV4cGxpY2l0IHJlc291cmNlIGhhbmRsaW5nIHNob3VsZCBJ IGluc3RlYWQgdXNlIHJlcXVlc3RfaXJxKCkgLw0KZnJlZV9pcnEoKT8NCg0KPiANCj4gVGhpcyBk ZXZpY2Ugc3VwcG9ydHMgSFcgdGltZXN0YW1waW5nLiBQbGVhc2UgZG9uJ3Qgcm9sbCB5b3VyIG93 bg0KPiBjb252ZXJzaW9uIGZ1bmN0aW9ucy4gUGxlYXNlIG1ha2UgdXNlIG9mIHRoZSB0aW1lY291 bnRlci9jeWNsZWNvdW50ZXINCj4gQVBJLCBoYXZlIGEgbG9vayBhdCB0aGUgbWNwMjUxeGZkIGRy aXZlciBmb3IgZXhhbXBsZToNCj4gDQo+IGh0dHBzOi8vZWxpeGlyLmJvb3RsaW4uY29tL2xpbnV4 L3Y1LjEzL3NvdXJjZS9kcml2ZXJzL25ldC9jYW4vc3BpL21jcDI1MXhmZC9tY3AyNTF4ZmQtdGlt ZXN0YW1wLmMjTDUyDQo+IA0KPiBUaGUgaWRlYSBpcyB0aGF0IHRoZXJlIGlzIGEgY291bnRlciBv ZiBhIGNlcnRhaW4gd2l0aCAoaGVyZSAzMiBiaXQpIHRoYXQNCj4gaGFzIGEgY2VydGFpbiBmcmVx dWVuY3kgKGhlcmU6IHByaXYtPmNhbi5jbG9jay5mcmVxKS4NCj4gDQo+ID4gCWNjLT5yZWFkID0g bWNwMjUxeGZkX3RpbWVzdGFtcF9yZWFkOw0KPiA+IAljYy0+bWFzayA9IENZQ0xFQ09VTlRFUl9N QVNLKDMyKTsNCj4gPiAJY2MtPnNoaWZ0ID0gMTsNCj4gPiAJY2MtPm11bHQgPSBjbG9ja3NvdXJj ZV9oejJtdWx0KHByaXYtPmNhbi5jbG9jay5mcmVxLCBjYy0+c2hpZnQpOw0KPiANCj4gVGhlIGNv bnZlcnNpb24gZnJvbSB0aGUgcmVnaXN0ZXIgdmFsdWUgdG8gbnMgaW4gZG9uZSB3aXRoOg0KPiA+ IG5zID0gKChyZWcgJiBtYXNrKSAqIG11bHQpID4+IHNoaWZ0Ow0KPiBJbiB0aGUgYWJvdmUgZXhh bXBsZSBJJ20gdXNpbmcgYSBzaGlmdCBvZiAiMSIgYXMgMW5zIGlzIGFuIGludGVnZXINCj4gbXVs dGlwbGUgb2YgdGhlIHVzZWQgZnJlcXVlbmN5ICh3aGljaCBpcyAyMCBvciA0MCBNSHopLg0KPiAN Cj4gVG8gY29wZSB3aXRoIG92ZXJmbG93cyBvZiB0aGUgY3ljbGUgY291bnRlciwgcmVhZCB0aGUg Y3VycmVudCB0aW1lc3RhbXANCj4gd2l0aCB0aW1lY291bnRlcl9yZWFkKCkgd2l0aCBhdCBsZWFz dCB0aGUgZG91YmxlIGZyZXF1ZW5jeSBvZiB0aGUNCj4gb3ZlcmZsb3dzIGhhcHBlbmluZyAocGx1 cyBzb21lIHNsYWNrKS4gVGhlIG1jcDI1MXhmZCBkcml2ZXIgc2V0cyB1cCBhDQo+IHdvcmtlciBm b3IgdGhpcy4gVGhlIG1jcDI1MXhmZCBkcml2ZSBkb2VzIHRoaXMgZXZlcnkgNDUgc2Vjb25kcywg d2l0aCBhbg0KPiBvdmVyZmxvdyBoYXBwZW5pbmcgZXZlcnkgMTA3cy4NCg0KQXQgdGhlIG1vbWVu dCBJIGNhbid0IHNlZSB0aGUgcmVhbCBiZW5lZml0IG9mIHRoaXMgQVBJLiBUaGlzIGlzIGJlY2F1 c2UgdGhlDQpkZXZpY2UgZGVsaXZlcnMgdGhlIEhXIHRpbWVzdGFtcCBhcyBhIDY0LWJpdCB2YWx1 ZSB3aXRoIGEgY2VydGFpbiBmcmVxdWVuY3kNCihhdG0uIDgwTUh6KS4gVGhpcyB0aW1lc3RhbXAg d2lsbCB3cmFwIGFmdGVyKCEpIHRoZSB0aGUgcmVzdWx0IGluIG5zIG9mDQprdGltZV90Lg0KDQpU aGUgb3RoZXIgZGV2aWNlcyB3aXRoIDY0LWJpdCBuYXRpdmUgdGltZXN0YW1wcyAobGlrZSBldGFz XzU4eCwgcGVha19jYW5mZC5jDQphbmQga3Zhc2VyX3BjaWVmZC5jKSBhbHNvIGRvIHNpbXBsZSBt dWx0aXBsaWNhdGlvbiAvIGRpdmlzaW9uIG9wZXJhdGlvbnMgb24NCnRoZSA2NC1iaXQgSFcgdGlt ZXN0YW1wDQoNClVzaW5nIHRoZSBzdHJ1Y3QgY3ljbGVjb3VudGVyIHRvIGhvbGQgdGhlIG11bHRp cGxpZXIgYW5kIGRpdmlzb3IgaW4gdGhlDQpzdHJ1Y3QgYWNjX292IChpbnN0ZWFkIG9mIHRoZSBt ZW1iZXJzIHRzMm5zX251bWVyYXRvciBhbmQgdHMybnNfZGVub21pbmF0b3IpDQp3b3VsZCByZXN1 bHQgaW4gc3VjaCBhbiBpbml0aWFsaXphdGlvbiBmb3IgYSBzdHJ1Y3QgY3ljbGVjb3VudGVyIGNj Og0KDQpzdHJ1Y3QgY3ljbGVjb3VudGVyIGNjID0gew0KCS5yZWFkID0gTlVMTCwNCgkubWFzayA9 IENZQ0xFQ09VTlRFUl9NQVNLKDY0KSwNCgkuc2hpZnQgPSAxLA0KCS5tdWx0ID0gY2xvY2tzb3Vy Y2VfaHoybXVsdChvdi0+dGltZXN0YW1wX2ZyZXF1ZW5jeSwgY2MtPnNoaWZ0KSwvKiAyNSAqLw0K fQ0KDQpUaGVuIGluIGFjY190czJrdGltZSgpIHRoZSBmdW5jdGlvbiBjeWNsZWNvdW50ZXJfY3lj Mm5zKCkgY291bGQgYmUgdXNlZCBsaWtlIHRoaXM6DQoNCnN0YXRpYyBrdGltZV90IGFjY190czJr dGltZShzdHJ1Y3QgYWNjX292ICpvdiwgdTY0IHRzKQ0Kew0KCXU2NCB1bnVzZWRfZnJhYzsNCgl1 NjQgbnM7DQoNCglucyA9IGN5Y2xlY291bnRlcl9jeWMybnMob3YtPmNjLCB0cywgMCwgJnVudXNl ZF9mcmFjKTsNCg0KCXJldHVybiBuc190b19rdGltZShucyk7DQp9DQoNCk9uZSBjb25jbHVkaW5n IHF1ZXN0aW9uLiBOZWVkIHRoZSBIVyB0aW1lc3RhbXBzIGJlIG9ubHkgaW4gbnMgKHNpbmNlIHBv d2VydXApIG9yIHNob3VsZCB0aGV5IGFsc28gYmUgaW4gcmVsYXRpb24gdG8gdGhlIGtlcm5lbCB0 aW1lDQpvZiB0aGUgc3RhcnR1cCBsaWtlIGl0IGlzIGRvbmUgaW4gVmluY2VudCdzIGV0YXNfNTh4 IGRyaXZlcj8NCg0KDQo+IFRoaXMgaXMgbm90IGEgY29tcGxldGUgcmV2aWV3IHlldCwgYnV0IHNl ZSBzb21lIGNvbW1lbnRzIGluc2lkZS4NCj4gDQo+ID4gU2lnbmVkLW9mZi1ieTogU3RlZmFuIE3D pHRqZSA8U3RlZmFuLk1hZXRqZUBlc2QuZXU+DQo+ID4gLS0tDQo+ID4gIGRyaXZlcnMvbmV0L2Nh bi9LY29uZmlnICAgICAgICAgICAgICAgIHwgICAxICsNCj4gPiAgZHJpdmVycy9uZXQvY2FuL01h a2VmaWxlICAgICAgICAgICAgICAgfCAgIDEgKw0KPiA+ICBkcml2ZXJzL25ldC9jYW4vZXNkL0tj b25maWcgICAgICAgICAgICB8ICAxMiArDQo+ID4gIGRyaXZlcnMvbmV0L2Nhbi9lc2QvTWFrZWZp bGUgICAgICAgICAgIHwgICA3ICsNCj4gPiAgZHJpdmVycy9uZXQvY2FuL2VzZC9lc2RfNDAyX3Bj aS1jb3JlLmMgfCA1MzAgKysrKysrKysrKysrKysrKysrDQo+ID4gIGRyaXZlcnMvbmV0L2Nhbi9l c2QvZXNkYWNjLmMgICAgICAgICAgIHwgNzE3ICsrKysrKysrKysrKysrKysrKysrKysrKysNCj4g PiAgZHJpdmVycy9uZXQvY2FuL2VzZC9lc2RhY2MuaCAgICAgICAgICAgfCAzOTQgKysrKysrKysr KysrKysNCj4gPiAgNyBmaWxlcyBjaGFuZ2VkLCAxNjYyIGluc2VydGlvbnMoKykNCj4gPiAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L2Nhbi9lc2QvS2NvbmZpZw0KPiA+ICBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvY2FuL2VzZC9NYWtlZmlsZQ0KPiA+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9uZXQvY2FuL2VzZC9lc2RfNDAyX3BjaS1jb3JlLmMNCj4gPiAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L2Nhbi9lc2QvZXNkYWNjLmMNCj4gPiAgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L2Nhbi9lc2QvZXNkYWNjLmgNCj4gPiANCj4gPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL0tjb25maWcgYi9kcml2ZXJzL25ldC9jYW4vS2NvbmZp Zw0KPiA+IGluZGV4IGZmZjI1OTI0N2Q1Mi4uNDdjZmI2YWUwNzcyIDEwMDY0NA0KPiA+IC0tLSBh L2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnDQo+ID4gKysrIGIvZHJpdmVycy9uZXQvY2FuL0tjb25m aWcNCj4gPiBAQCAtMTcwLDYgKzE3MCw3IEBAIGNvbmZpZyBQQ0hfQ0FODQo+ID4gIA0KPiA+ICBz b3VyY2UgImRyaXZlcnMvbmV0L2Nhbi9jX2Nhbi9LY29uZmlnIg0KPiA+ICBzb3VyY2UgImRyaXZl cnMvbmV0L2Nhbi9jYzc3MC9LY29uZmlnIg0KPiA+ICtzb3VyY2UgImRyaXZlcnMvbmV0L2Nhbi9l c2QvS2NvbmZpZyINCj4gPiAgc291cmNlICJkcml2ZXJzL25ldC9jYW4vaWZpX2NhbmZkL0tjb25m aWciDQo+ID4gIHNvdXJjZSAiZHJpdmVycy9uZXQvY2FuL21fY2FuL0tjb25maWciDQo+ID4gIHNv dXJjZSAiZHJpdmVycy9uZXQvY2FuL21zY2FuL0tjb25maWciDQo+ID4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvbmV0L2Nhbi9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2Nhbi9NYWtlZmlsZQ0KPiA+IGlu ZGV4IGEyYjQ0NjNkODQ4MC4uNWQ1YWVhYWYwMmQ3IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMv bmV0L2Nhbi9NYWtlZmlsZQ0KPiA+ICsrKyBiL2RyaXZlcnMvbmV0L2Nhbi9NYWtlZmlsZQ0KPiA+ IEBAIC0xMiw2ICsxMiw3IEBAIG9iai15CQkJCSs9IHJjYXIvDQo+ID4gIG9iai15CQkJCSs9IHNw aS8NCj4gPiAgb2JqLXkJCQkJKz0gdXNiLw0KPiA+ICBvYmoteQkJCQkrPSBzb2Z0aW5nLw0KPiA+ ICtvYmoteQkJCQkrPSBlc2QvDQo+IA0KPiBOaXRwaWNrOg0KPiANCj4gVGhhdCBvYmoteSBsaXN0 IGlzIG5vdCBzb3J0ZWQsIGhvd2V2ZXIgcGxlYXNlIG1vdmUgImVzZC8iIGFmdGVyICJkZXYvIi4N Cj4gDQo+ID4gIA0KPiA+ICBvYmotJChDT05GSUdfQ0FOX0FUOTEpCQkrPSBhdDkxX2Nhbi5vDQo+ ID4gIG9iai0kKENPTkZJR19DQU5fQ0M3NzApCQkrPSBjYzc3MC8NCj4gPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9uZXQvY2FuL2VzZC9LY29uZmlnIGIvZHJpdmVycy9uZXQvY2FuL2VzZC9LY29uZmln DQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjU0YmZj MzY2NjM0Yw0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL25ldC9jYW4vZXNk L0tjb25maWcNCj4gPiBAQCAtMCwwICsxLDEyIEBADQo+ID4gKyMgU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAtb25seQ0KPiA+ICtjb25maWcgQ0FOX0VTRF80MDJfUENJDQo+ID4gKwl0 cmlzdGF0ZSAiZXNkIGVsZWN0cm9uaWNzIGdtYmggQ0FOLVBDSShlKS80MDIgZmFtaWx5Ig0KPiA+ ICsJZGVwZW5kcyBvbiBQQ0kgJiYgSEFTX0RNQQ0KPiA+ICsJaGVscA0KPiA+ICsJICBTdXBwb3J0 IGZvciBDNDAyIGNhcmQgZmFtaWx5IGZyb20gZXNkIGVsZWN0cm9uaWNzIGdtYmguDQo+ID4gKwkg IFRoaXMgY2FyZCBmYW1pbHkgaXMgYmFzZWQgb24gdGhlIEVTREFDQyBDQU4gY29udHJvbGxlciBh bmQNCj4gPiArCSAgYXZhaWxhYmxlIGluIHNldmVyYWwgZm9ybSBmYWN0b3JzOiAgUENJLCBQQ0ll LCBQQ0llIE1pbmksDQo+ID4gKwkgIE0uMiBQQ0llLCBDUENJc2VyaWFsLCBQTUMsIFhNQyAgKHNl ZSBodHRwczovL2VzZC5ldS9lbikNCj4gPiArDQo+ID4gKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNv IGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJbiB0aGlzIGNhc2UgdGhlDQo+ID4gKwkgIG1vZHVsZSB3 aWxsIGJlIGNhbGxlZCBlc2RfNDAyX3BjaS4NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQv Y2FuL2VzZC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2Nhbi9lc2QvTWFrZWZpbGUNCj4gPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uNWRkMmQ0NzBjMjg2DQo+ ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvbmV0L2Nhbi9lc2QvTWFrZWZpbGUN Cj4gPiBAQCAtMCwwICsxLDcgQEANCj4gPiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMC1vbmx5DQo+ID4gKyMNCj4gPiArIyAgTWFrZWZpbGUgZm9yIGVzZCBnbWJoIEVTREFDQyBj b250cm9sbGVyIGRyaXZlcg0KPiA+ICsjDQo+ID4gK2VzZF80MDJfcGNpLW9ianMgOj0gZXNkYWNj Lm8gZXNkXzQwMl9wY2ktY29yZS5vDQo+ID4gKw0KPiA+ICtvYmotJChDT05GSUdfQ0FOX0VTRF80 MDJfUENJKSArPSBlc2RfNDAyX3BjaS5vDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nh bi9lc2QvZXNkXzQwMl9wY2ktY29yZS5jDQo+ID4gYi9kcml2ZXJzL25ldC9jYW4vZXNkL2VzZF80 MDJfcGNpLWNvcmUuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAw MDAwMDAwLi4xOTFlN2Y0NWM1ZDkNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVy cy9uZXQvY2FuL2VzZC9lc2RfNDAyX3BjaS1jb3JlLmMNCj4gPiBAQCAtMCwwICsxLDUzMCBAQA0K PiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5DQo+ID4gKy8qIENv cHlyaWdodCAoQykgMjAxNSAtIDIwMTcgZXNkIGVsZWN0cm9uaWMgc3lzdGVtIGRlc2lnbiBnbWJo DQo+ID4gKyAqIENvcHlyaWdodCAoQykgMjAxNyAtIDIwMjEgZXNkIGVsZWN0cm9uaWNzIGdtYmgN Cj4gPiArICovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+DQo+ID4gKyNp bmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5o Pg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcGNpLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pby5o Pg0KPiA+ICsjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L25l dGRldmljZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4NCj4gPiArI2lu Y2x1ZGUgPGxpbnV4L2Nhbi5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvY2FuL2Rldi5oPg0KPiA+ ICsjaW5jbHVkZSA8bGludXgvY2FuL25ldGxpbmsuaD4NCj4gPiArDQo+ID4gKyNpbmNsdWRlICJl c2RhY2MuaCINCj4gPiArDQo+ID4gKyNkZWZpbmUgRFJWX05BTUUJCQkiZXNkXzQwMl9wY2kiDQo+ ID4gKw0KPiA+ICsjZGVmaW5lIEVTRF9QQ0lfREVWSUNFX0lEX1BDSUU0MDIJMHgwNDAyDQo+ID4g Kw0KPiA+ICsjZGVmaW5lIFBDSTQwMl9GUEdBX1ZFUl9NSU4JCTB4MDAzZA0KPiA+ICsjZGVmaW5l IFBDSTQwMl9NQVhfQ09SRVMJCTQNCj4gPiArI2RlZmluZSBQQ0k0MDJfQkFSCQkJMA0KPiA+ICsj ZGVmaW5lIFBDSTQwMl9JT19PVl9PRkZTCQkwDQo+ID4gKyNkZWZpbmUgUENJNDAyX0lPX1BDSUVQ X09GRlMJCTB4MTAwMDANCj4gPiArI2RlZmluZSBQQ0k0MDJfSU9fTEVOX1RPVEFMCQkweDIwMDAw DQo+ID4gKyNkZWZpbmUgUENJNDAyX0lPX0xFTl9DT1JFCQkweDIwMDANCj4gPiArI2RlZmluZSBQ Q0k0MDJfUENJQ0ZHX01TSUNBUF9DU1IJMHg1Mg0KPiA+ICsjZGVmaW5lIFBDSTQwMl9QQ0lDRkdf TVNJQ0FQX0FERFIJMHg1NA0KPiA+ICsjZGVmaW5lIFBDSTQwMl9QQ0lDRkdfTVNJQ0FQX0RBVEEJ MHg1Yw0KPiA+ICsNCj4gPiArI2RlZmluZSBQQ0k0MDJfRE1BX01BU0sJCQkoRE1BX0JJVF9NQVNL KDMyKSAmIDB4ZmZmZjAwMDApDQo+ID4gKyNkZWZpbmUgUENJNDAyX0RNQV9TSVpFCQkJQUxJR04o MHgxMDAwMCwgUEFHRV9TSVpFKQ0KPiANCj4gVGhlIERNQSBBUEkgZ3VhcmFudGVlcyB0aGUgbWVt b3J5IHRvIGJlIGFsaWduZWQgdG8gcGFnZXMgYW5kIHJlcXVlc3RlZA0KPiBzaXplOg0KPiANCj4g PiBUaGUgQ1BVIHZpcnR1YWwgYWRkcmVzcyBhbmQgdGhlIERNQSBhZGRyZXNzIGFyZSBib3RoIGd1 YXJhbnRlZWQgdG8gYmUNCj4gPiBhbGlnbmVkIHRvIHRoZSBzbWFsbGVzdCBQQUdFX1NJWkUgb3Jk ZXIgd2hpY2ggaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsDQo+ID4gdG8gdGhlIHJlcXVlc3RlZCBz aXplLiBUaGlzIGludmFyaWFudCBleGlzdHMgKGZvciBleGFtcGxlKSB0bw0KPiA+IGd1YXJhbnRl ZSB0aGF0IGlmIHlvdSBhbGxvY2F0ZSBhIGNodW5rIHdoaWNoIGlzIHNtYWxsZXIgdGhhbiBvciBl cXVhbA0KPiA+IHRvIDY0IGtpbG9ieXRlcywgdGhlIGV4dGVudCBvZiB0aGUgYnVmZmVyIHlvdSBy ZWNlaXZlIHdpbGwgbm90IGNyb3NzIGENCj4gPiA2NEsgYm91bmRhcnkuDQoNCldpbGwgdXNlIHRo ZSBETUEgbWFwIEFQSSBkaXJlY3RseSBhbmQgdGhlbiByZW1vdmUgdGhlIGVycm9yIG1lc3NhZ2Ug YWJvdXQNCmEgbWlzYWxpZ25lZCBidWZmZXIuDQoNCj4gPiArDQo+ID4gKyNkZWZpbmUgUENJNDAy X1BDSUVQX09GX0lOVF9FTkFCTEUJMHgwMDUwDQo+ID4gKyNkZWZpbmUgUENJNDAyX1BDSUVQX09G X0JNX0FERFJfTE8JMHgxMDAwDQo+ID4gKyNkZWZpbmUgUENJNDAyX1BDSUVQX09GX0JNX0FERFJf SEkJMHgxMDA0DQo+ID4gKyNkZWZpbmUgUENJNDAyX1BDSUVQX09GX01TSV9BRERSX0xPCTB4MTAw OA0KPiA+ICsjZGVmaW5lIFBDSTQwMl9QQ0lFUF9PRl9NU0lfQUREUl9ISQkweDEwMGMNCj4gPiAr DQo+ID4gKy8qIFRoZSBCVFIgcmVnaXN0ZXIgY2FwYWJpbGl0aWVzIGRlc2NyaWJlZCBieSB0aGUg Y2FuX2JpdHRpbWluZ19jb25zdA0KPiA+IHN0cnVjdHVyZXMNCj4gPiArICogYmVsb3cgYXJlIHZh bGlkIHNpbmNlIEVTREFDQyB2ZXJzaW9uIDB4MDAzMi4NCj4gPiArICovDQo+ID4gKw0KPiA+ICsv KiBVc2VkIGlmIHRoZSBFU0RBQ0MgRlBHQSBpcyBidWlsdCBhcyBDQU4tQ2xhc3NpYyB2ZXJzaW9u LiAqLw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGNhbl9iaXR0aW1pbmdfY29uc3QgcGNpNDAy X2JpdHRpbWluZ19jb25zdCA9IHsNCj4gPiArCS5uYW1lID0gImVzZF80MDIiLA0KPiA+ICsJLnRz ZWcxX21pbiA9IDEsDQo+ID4gKwkudHNlZzFfbWF4ID0gMTYsDQo+ID4gKwkudHNlZzJfbWluID0g MSwNCj4gPiArCS50c2VnMl9tYXggPSA4LA0KPiA+ICsJLnNqd19tYXggPSA0LA0KPiA+ICsJLmJy cF9taW4gPSAxLA0KPiA+ICsJLmJycF9tYXggPSA1MTIsDQo+ID4gKwkuYnJwX2luYyA9IDEsDQo+ ID4gK307DQo+ID4gKw0KPiA+ICsvKiBVc2VkIGlmIHRoZSBFU0RBQ0MgRlBHQSBpcyBidWlsdCBh cyBDQU4tRkQgdmVyc2lvbi4gKi8NCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBjYW5fYml0dGlt aW5nX2NvbnN0IHBjaTQwMl9iaXR0aW1pbmdfY29uc3RfY2FuZmQgPSB7DQo+ID4gKwkubmFtZSA9 ICJlc2RfNDAyZmQiLA0KPiA+ICsJLnRzZWcxX21pbiA9IDEsDQo+ID4gKwkudHNlZzFfbWF4ID0g MjU2LA0KPiA+ICsJLnRzZWcyX21pbiA9IDEsDQo+ID4gKwkudHNlZzJfbWF4ID0gMTI4LA0KPiA+ ICsJLnNqd19tYXggPSAxMjgsDQo+ID4gKwkuYnJwX21pbiA9IDEsDQo+ID4gKwkuYnJwX21heCA9 IDI1NiwNCj4gPiArCS5icnBfaW5jID0gMSwNCj4gPiArfTsNCj4gPiArDQo+ID4gKyNpZiBBQ0Nf RU5BQkxFX0NBTkZEDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2FuX2JpdHRpbWluZ19jb25z dCBwY2k0MDJfYml0dGltaW5nX2NvbnN0X2NhbmZkX2RhdGEgPQ0KPiA+IHsNCj4gPiArCS5uYW1l ID0gImVzZF80MDJmZCIsDQo+ID4gKwkudHNlZzFfbWluID0gMSwNCj4gPiArCS50c2VnMV9tYXgg PSAzMiwNCj4gPiArCS50c2VnMl9taW4gPSAxLA0KPiA+ICsJLnRzZWcyX21heCA9IDE2LA0KPiA+ ICsJLnNqd19tYXggPSAxNiwNCj4gPiArCS5icnBfbWluID0gMSwNCj4gPiArCS5icnBfbWF4ID0g MjU2LA0KPiA+ICsJLmJycF9pbmMgPSAxLA0KPiA+ICt9Ow0KPiA+ICsjZW5kaWYNCj4gPiArDQo+ ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcGNpNDAyX2FjY19uZXRkZXZf b3BzID0gew0KPiA+ICsJLm5kb19vcGVuID0gYWNjX29wZW4sDQo+ID4gKwkubmRvX3N0b3AgPSBh Y2NfY2xvc2UsDQo+ID4gKwkubmRvX3N0YXJ0X3htaXQgPSBhY2Nfc3RhcnRfeG1pdCwNCj4gPiAr CS5uZG9fY2hhbmdlX210dSA9IGNhbl9jaGFuZ2VfbXR1DQo+ID4gK307DQo+ID4gKw0KPiA+ICtz dHJ1Y3QgcGNpNDAyX2NhcmQgew0KPiA+ICsJLyogQWN0dWFsbHkgbWFwcGVkIGlvIHNwYWNlLCBh bGwgb3RoZXIgaW9tZW0gZGVyaXZlZCBmcm9tIHRoaXMgKi8NCj4gPiArCXZvaWQgX19pb21lbSAq YWRkcjsNCj4gPiArCXZvaWQgX19pb21lbSAqYWRkcl9wY2llcDsNCj4gPiArDQo+ID4gKwl2b2lk ICpkbWFfYnVmOw0KPiA+ICsJZG1hX2FkZHJfdCBkbWFfaG5kOw0KPiA+ICsNCj4gPiArCXN0cnVj dCBhY2Nfb3Ygb3Y7DQo+ID4gKwlzdHJ1Y3QgYWNjX2NvcmUgY29yZXNbUENJNDAyX01BWF9DT1JF U107DQo+ID4gKw0KPiA+ICsJYm9vbCBtc2lfZW5hYmxlZDsNCj4gPiArCWludCBpcnFfc3RhY2s7 DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgaXJxcmV0dXJuX3QgcGNpNDAyX2ludGVycnVw dChpbnQgaXJxLCB2b2lkICpkZXZfaWQpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBwY2lfZGV2ICpw ZGV2ID0gZGV2X2lkOw0KPiA+ICsJc3RydWN0IHBjaTQwMl9jYXJkICpjYXJkID0gcGNpX2dldF9k cnZkYXRhKHBkZXYpOw0KPiA+ICsJaXJxcmV0dXJuX3QgaXJxX3N0YXR1czsNCj4gPiArCWludCBp cnFfbGV2ZWxfb3V0Ow0KPiA+ICsJaW50IGlycV9sZXZlbF9pbjsNCj4gPiArDQo+ID4gKwkvKiBV c2UgPGlycV9zdGFjaz4gdG8gY2hlY2sgZm9yIElSUSBtdWx0aSBzZXJ2aWNlIG9uIG11bHRpcGxl IENQVXMuICovDQo+ID4gKwlpcnFfbGV2ZWxfaW4gPSBfX3N5bmNfZmV0Y2hfYW5kX2FkZCgmY2Fy ZC0+aXJxX3N0YWNrLCAxKTsNCj4gPiArDQo+ID4gKwlpcnFfc3RhdHVzID0gYWNjX2NhcmRfaW50 ZXJydXB0KCZjYXJkLT5vdiwgY2FyZC0+Y29yZXMpOw0KPiA+ICsNCj4gPiArCWlycV9sZXZlbF9v dXQgPSBfX3N5bmNfc3ViX2FuZF9mZXRjaCgmY2FyZC0+aXJxX3N0YWNrLCAxKTsNCj4gPiArDQo+ ID4gKwlpZiAoaXJxX2xldmVsX2luIHx8IGlycV9sZXZlbF9vdXQpIHsNCj4gPiArCQlwY2lfd2Fy bihwZGV2LCAiJXMoKTogQmFkIGxldmVsLCBpbiAlZCwgb3V0ICVkXG4iLA0KPiA+ICsJCQkgX19m dW5jX18sIGlycV9sZXZlbF9pbiwgaXJxX2xldmVsX291dCk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ ICsJcmV0dXJuIGlycV9zdGF0dXM7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgcGNp NDAyX3NldF9tc2ljb25maWcoc3RydWN0IHBjaV9kZXYgKnBkZXYpDQo+ID4gK3sNCj4gPiArCXN0 cnVjdCBwY2k0MDJfY2FyZCAqY2FyZCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsNCj4gPiArCXUz MiBhZGRyX2xvX29mZnMgPSAwOw0KPiA+ICsJdTMyIGFkZHJfbG8gPSAwOw0KPiA+ICsJdTMyIGFk ZHJfaGkgPSAwOw0KPiA+ICsJdTMyIGRhdGEgPSAwOw0KPiA+ICsJdTE2IGNzciA9IDA7DQo+ID4g KwlpbnQgZXJyOw0KPiA+ICsNCj4gPiArCWVyciA9IHBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYs IFBDSTQwMl9QQ0lDRkdfTVNJQ0FQX0NTUiwgJmNzcik7DQo+ID4gKwlpZiAoZXJyKQ0KPiA+ICsJ CWdvdG8gZmFpbGVkOw0KPiA+ICsNCj4gPiArCWVyciA9IHBjaV9yZWFkX2NvbmZpZ19kd29yZChw ZGV2LCBQQ0k0MDJfUENJQ0ZHX01TSUNBUF9BRERSLCAmYWRkcl9sbyk7DQo+ID4gKwlpZiAoZXJy KQ0KPiA+ICsJCWdvdG8gZmFpbGVkOw0KPiA+ICsJZXJyID0gcGNpX3JlYWRfY29uZmlnX2R3b3Jk KHBkZXYsIFBDSTQwMl9QQ0lDRkdfTVNJQ0FQX0FERFIgKyA0LA0KPiA+ICsJCQkJICAgICZhZGRy X2hpKTsNCj4gPiArCWlmIChlcnIpDQo+ID4gKwkJZ290byBmYWlsZWQ7DQo+ID4gKw0KPiA+ICsJ ZXJyID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIFBDSTQwMl9QQ0lDRkdfTVNJQ0FQX0RB VEEsICZkYXRhKTsNCj4gPiArCWlmIChlcnIpDQo+ID4gKwkJZ290byBmYWlsZWQ7DQo+ID4gKw0K PiA+ICsJYWRkcl9sb19vZmZzID0gYWRkcl9sbyAmIDB4MDAwMGZmZmY7DQo+ID4gKwlhZGRyX2xv ICY9IDB4ZmZmZjAwMDA7DQo+ID4gKw0KPiA+ICsJaWYgKGFkZHJfaGkpDQo+ID4gKwkJYWRkcl9s byB8PSAxOyAvKiBFbmFibGUgNjQtQml0IGFkZHJlc3NpbmcgaW4gYWRkcmVzcyBzcGFjZSAqLw0K PiA+ICsNCj4gPiArCWlmICghKGNzciAmIDB4MDAwMSkpIHsgLyogRW5hYmxlIGJpdCAqLw0KPiA+ ICsJCWVyciA9IC1FSU5WQUw7DQo+ID4gKwkJZ290byBmYWlsZWQ7DQo+ID4gKwl9DQo+ID4gKw0K PiA+ICsJaW93cml0ZTMyKGFkZHJfbG8sIGNhcmQtPmFkZHJfcGNpZXAgKyBQQ0k0MDJfUENJRVBf T0ZfTVNJX0FERFJfTE8pOw0KPiA+ICsJaW93cml0ZTMyKGFkZHJfaGksIGNhcmQtPmFkZHJfcGNp ZXAgKyBQQ0k0MDJfUENJRVBfT0ZfTVNJX0FERFJfSEkpOw0KPiA+ICsJYWNjX292X3dyaXRlMzIo JmNhcmQtPm92LCBBQ0NfT1ZfT0ZfTVNJX0FERFJFU1NPRkZTRVQsIGFkZHJfbG9fb2Zmcyk7DQo+ ID4gKwlhY2Nfb3Zfd3JpdGUzMigmY2FyZC0+b3YsIEFDQ19PVl9PRl9NU0lfREFUQSwgZGF0YSk7 DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICtmYWlsZWQ6DQo+ID4gKwlwY2lf d2FybihwZGV2LCAiRXJyb3Igd2hpbGUgc2V0dGluZyBNU0kgY29uZmlndXJhdGlvbjpcbiINCj4g PiArCQkgIkNTUjogMHglLjR4LCBhZGRyOiAweCUuOHglLjh4LCBkYXRhOiAweCUuOHhcbiIsDQo+ ID4gKwkJIGNzciwgYWRkcl9oaSwgYWRkcl9sbywgZGF0YSk7DQo+ID4gKw0KPiA+ICsJcmV0dXJu IGVycjsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBwY2k0MDJfaW5pdF9jYXJkKHN0 cnVjdCBwY2lfZGV2ICpwZGV2KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgcGNpNDAyX2NhcmQgKmNh cmQgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7DQo+ID4gKw0KPiA+ICsJY2FyZC0+b3YuYWRkciA9 IGNhcmQtPmFkZHIgKyBQQ0k0MDJfSU9fT1ZfT0ZGUzsNCj4gPiArCWNhcmQtPmFkZHJfcGNpZXAg PSBjYXJkLT5hZGRyICsgUENJNDAyX0lPX1BDSUVQX09GRlM7DQo+ID4gKw0KPiA+ICsJYWNjX3Jl c2V0X2ZwZ2EoJmNhcmQtPm92KTsNCj4gPiArCWFjY19pbml0X292KCZjYXJkLT5vdiwgJnBkZXYt PmRldik7DQo+ID4gKw0KPiA+ICsJaWYgKGNhcmQtPm92LnZlcnNpb24gPCBQQ0k0MDJfRlBHQV9W RVJfTUlOKSB7DQo+ID4gKwkJcGNpX2VycihwZGV2LA0KPiA+ICsJCQkiRVNEQUNDIHZlcnNpb24g KDB4JS40eCkgb3V0ZGF0ZWQsIHBsZWFzZSB1cGRhdGVcbiIsDQo+ID4gKwkJCWNhcmQtPm92LnZl cnNpb24pOw0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlm IChjYXJkLT5vdi5hY3RpdmVfY29yZXMgPiBQQ0k0MDJfTUFYX0NPUkVTKSB7DQo+ID4gKwkJcGNp X3dhcm4ocGRldiwNCj4gPiArCQkJICJDYXJkIGhhcyBtb3JlIGFjdGl2ZSBjb3JlcyB0aGFuIHN1 cHBvcnRlZCBieSBkcml2ZXIsDQo+ID4gJXUgY29yZShzKSB3aWxsIGJlIGlnbm9yZWRcbiIsDQo+ ID4gKwkJCSBjYXJkLT5vdi5hY3RpdmVfY29yZXMgLSBQQ0k0MDJfTUFYX0NPUkVTKTsNCj4gPiAr CQljYXJkLT5vdi5hY3RpdmVfY29yZXMgPSBQQ0k0MDJfTUFYX0NPUkVTOw0KPiANCj4gSXMgdGhp cyBhIHZhbGlkIGNvbmNlcm4/IFlvdSBtYXkgd2FudCB0byBhbGxvY2F0ZSB0aGUgbWVtb3J5IGZv ciB0aGUNCj4gY29yZXMgZHluYW1pY2FsbHkuDQo+IA0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlm IChjYXJkLT5vdi5mZWF0dXJlcyAmIEFDQ19PVl9SRUdfRkVBVF9NQVNLX0NBTkZEKSB7DQo+ID4g KwkJcGNpX3dhcm4ocGRldiwNCj4gPiArCQkJICJFU0RBQ0Mgd2l0aCBDQU4tRkQgZmVhdHVyZSBk ZXRlY3RlZC4gVGhpcyBkcml2ZXINCj4gPiBkb2Vzbid0IHN1cHBvcnQgQ0FOLUZEIHlldC5cbiIp Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArI2lmZGVmIF9fTElUVExFX0VORElBTg0KPiA+ICsJLyog U28gY2FyZCBjb252ZXJ0cyBhbGwgYnVzbWFzdGVyZWQgZGF0YSB0byBMRSBmb3IgdXM6ICovDQo+ ID4gKwlhY2Nfb3Zfc2V0X2JpdHMoJmNhcmQtPm92LCBBQ0NfT1ZfT0ZfTU9ERSwNCj4gPiArCQkJ QUNDX09WX1JFR19NT0RFX01BU0tfRU5ESUFOX0xJVFRMRSk7DQo+ID4gKyNlbmRpZg0KPiA+ICsN Cj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHBjaTQwMl9p bml0X2ludGVycnVwdChzdHJ1Y3QgcGNpX2RldiAqcGRldikNCj4gPiArew0KPiA+ICsJc3RydWN0 IHBjaTQwMl9jYXJkICpjYXJkID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOw0KPiA+ICsJaW50IGVy cjsNCj4gPiArDQo+ID4gKwllcnIgPSBwY2lfZW5hYmxlX21zaShwZGV2KTsNCj4gPiArCWlmICgh ZXJyKSB7DQo+ID4gKwkJZXJyID0gcGNpNDAyX3NldF9tc2ljb25maWcocGRldik7DQo+ID4gKwkJ aWYgKCFlcnIpIHsNCj4gPiArCQkJY2FyZC0+bXNpX2VuYWJsZWQgPSB0cnVlOw0KPiA+ICsJCQlh Y2Nfb3Zfc2V0X2JpdHMoJmNhcmQtPm92LCBBQ0NfT1ZfT0ZfTU9ERSwNCj4gPiArCQkJCQlBQ0Nf T1ZfUkVHX01PREVfTUFTS19NU0lfRU5BQkxFKTsNCj4gPiArCQkJcGNpX2luZm8ocGRldiwgIk1T SSBlbmFibGVkXG4iKTsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZXJyID0gZGV2 bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBwZGV2LT5pcnEsIHBjaTQwMl9pbnRlcnJ1cHQsDQo+ ID4gKwkJCSAgICAgICBJUlFGX1NIQVJFRCwgZGV2X25hbWUoJnBkZXYtPmRldiksIHBkZXYpOw0K PiA+ICsJaWYgKGVycikNCj4gPiArCQlnb3RvIGZhaWx1cmVfbXNpZGlzOw0KPiA+ICsNCj4gPiAr CWlvd3JpdGUzMigxLCBjYXJkLT5hZGRyX3BjaWVwICsgUENJNDAyX1BDSUVQX09GX0lOVF9FTkFC TEUpOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICsNCj4gPiArZmFpbHVyZV9tc2lkaXM6 DQo+ID4gKwlpZiAoY2FyZC0+bXNpX2VuYWJsZWQpIHsNCj4gPiArCQlhY2Nfb3ZfY2xlYXJfYml0 cygmY2FyZC0+b3YsIEFDQ19PVl9PRl9NT0RFLA0KPiA+ICsJCQkJICBBQ0NfT1ZfUkVHX01PREVf TUFTS19NU0lfRU5BQkxFKTsNCj4gPiArCQlwY2lfZGlzYWJsZV9tc2kocGRldik7DQo+ID4gKwkJ Y2FyZC0+bXNpX2VuYWJsZWQgPSBmYWxzZTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4g ZXJyOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBwY2k0MDJfZmluaXNoX2ludGVy cnVwdChzdHJ1Y3QgcGNpX2RldiAqcGRldikNCj4gPiArew0KPiA+ICsJc3RydWN0IHBjaTQwMl9j YXJkICpjYXJkID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOw0KPiA+ICsNCj4gPiArCWlvd3JpdGUz MigwLCBjYXJkLT5hZGRyX3BjaWVwICsgUENJNDAyX1BDSUVQX09GX0lOVF9FTkFCTEUpOw0KPiA+ ICsJZGV2bV9mcmVlX2lycSgmcGRldi0+ZGV2LCBwZGV2LT5pcnEsIHBkZXYpOw0KPiA+ICsNCj4g PiArCWlmIChjYXJkLT5tc2lfZW5hYmxlZCkgew0KPiA+ICsJCWFjY19vdl9jbGVhcl9iaXRzKCZj YXJkLT5vdiwgQUNDX09WX09GX01PREUsDQo+ID4gKwkJCQkgIEFDQ19PVl9SRUdfTU9ERV9NQVNL X01TSV9FTkFCTEUpOw0KPiA+ICsJCXBjaV9kaXNhYmxlX21zaShwZGV2KTsNCj4gPiArCQljYXJk LT5tc2lfZW5hYmxlZCA9IGZhbHNlOw0KPiA+ICsJfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0 aWMgaW50IHBjaTQwMl9pbml0X2RtYShzdHJ1Y3QgcGNpX2RldiAqcGRldikNCj4gPiArew0KPiA+ ICsJc3RydWN0IHBjaTQwMl9jYXJkICpjYXJkID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOw0KPiA+ ICsJaW50IGVycjsNCj4gPiArDQo+ID4gKwllcnIgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21h c2socGRldiwgUENJNDAyX0RNQV9NQVNLKTsNCj4gDQo+IFRoZSBjb25zaXN0ZW50IGZ1bmN0aW9u cyBzZWVtIHRvIGJlIG91dGRhdGVkLCB1c2UgZG1hX3NldF9jb2hlcmVudF9tYXNrDQo+IGluc3Rl YWQuDQoNCkNoYW5nZWQgZm9yIFYzDQoNCj4gPiArCWlmIChlcnIpIHsNCj4gPiArCQlwY2lfZXJy KHBkZXYsICJETUEgc2V0IG1hc2sgZmFpbGVkIVxuIik7DQo+ID4gKwkJcmV0dXJuIGVycjsNCj4g PiArCX0NCj4gPiArDQo+ID4gKwljYXJkLT5kbWFfYnVmID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQo cGRldiwgUENJNDAyX0RNQV9TSVpFLA0KPiA+ICsJCQkJCSAgICAgJmNhcmQtPmRtYV9obmQpOw0K PiANCj4gUGxlYXNlIHVzZSBkbWFfYWxsb2NfY29oZXJlbnQoKSBpbnN0ZWFkLg0KDQpDaGFuZ2Vk IGZvciBWMw0KDQo+ID4gDQo+ID4gKwlpZiAoIWNhcmQtPmRtYV9idWYpIHsNCj4gPiArCQlwY2lf ZXJyKHBkZXYsICJETUEgYWxsb2MgZmFpbGVkIVxuIik7DQo+ID4gKwkJcmV0dXJuIC1FTk9NRU07 DQo+ID4gKwl9DQo+ID4gKwlpZiAoKGNhcmQtPmRtYV9obmQgJiBQQ0k0MDJfRE1BX01BU0spICE9 IGNhcmQtPmRtYV9obmQpIHsNCj4gDQo+IEkgdGhpbmsgdGhlIGRtYSBjb3JlIHdpbGwgZ2l2ZSB5 b3UgcHJvcGVybHkgYWxpZ25lZCBtZW1vcnkuLi4NCg0KUmVtb3ZlZCBjaGVjayBhbmQgZXJyb3Ig bWVzc2FnZSBmb3IgVjMuDQoNCj4gPiANCj4gPiArCQlwY2lfZXJyKHBkZXYsICJNaXNhbGlnbmVk IERNQSBidWZmZXI6IGFkZHJlc3MgJXB4LCBETUEgJXBhZCwNCj4gPiBtYXNrICVsbHhcbiIsDQo+ ID4gKwkJCWNhcmQtPmRtYV9idWYsICZjYXJkLT5kbWFfaG5kLCAodTY0KVBDSTQwMl9ETUFfTUFT Syk7DQo+ID4gKwkJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBQQ0k0MDJfRE1BX1NJWkUsIGNh cmQtPmRtYV9idWYsDQo+ID4gKwkJCQkgICAgY2FyZC0+ZG1hX2huZCk7DQo+ID4gKwkJY2FyZC0+ ZG1hX2J1ZiA9IE5VTEw7DQo+ID4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ID4gKwl9DQo+ID4gKw0K PiA+ICsJYWNjX2luaXRfYm1fcHRyKCZjYXJkLT5vdiwgY2FyZC0+Y29yZXMsIGNhcmQtPmRtYV9i dWYpOw0KPiA+ICsNCj4gPiArCWlvd3JpdGUzMigodTMyKWNhcmQtPmRtYV9obmQsDQo+ID4gKwkJ ICBjYXJkLT5hZGRyX3BjaWVwICsgUENJNDAyX1BDSUVQX09GX0JNX0FERFJfTE8pOw0KPiA+ICsJ aW93cml0ZTMyKDAsIGNhcmQtPmFkZHJfcGNpZXAgKyBQQ0k0MDJfUENJRVBfT0ZfQk1fQUREUl9I SSk7DQo+ID4gKw0KPiA+ICsJcGNpX3NldF9tYXN0ZXIocGRldik7DQo+ID4gKw0KPiA+ICsJYWNj X292X3NldF9iaXRzKCZjYXJkLT5vdiwgQUNDX09WX09GX01PREUsDQo+ID4gKwkJCUFDQ19PVl9S RUdfTU9ERV9NQVNLX0JNX0VOQUJMRSk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHBjaTQwMl9maW5pc2hfZG1hKHN0cnVjdCBwY2lfZGV2 ICpwZGV2KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgcGNpNDAyX2NhcmQgKmNhcmQgPSBwY2lfZ2V0 X2RydmRhdGEocGRldik7DQo+ID4gKwlpbnQgaTsNCj4gPiArDQo+ID4gKwlhY2Nfb3ZfY2xlYXJf Yml0cygmY2FyZC0+b3YsIEFDQ19PVl9PRl9NT0RFLA0KPiA+ICsJCQkgIEFDQ19PVl9SRUdfTU9E RV9NQVNLX0JNX0VOQUJMRSk7DQo+ID4gKw0KPiA+ICsJcGNpX2NsZWFyX21hc3RlcihwZGV2KTsN Cj4gPiArDQo+ID4gKwlpb3dyaXRlMzIoMCwgY2FyZC0+YWRkcl9wY2llcCArIFBDSTQwMl9QQ0lF UF9PRl9CTV9BRERSX0xPKTsNCj4gPiArCWlvd3JpdGUzMigwLCBjYXJkLT5hZGRyX3BjaWVwICsg UENJNDAyX1BDSUVQX09GX0JNX0FERFJfSEkpOw0KPiA+ICsNCj4gPiArCWNhcmQtPm92LmJtZmlm by5tZXNzYWdlcyA9IE5VTEw7DQo+ID4gKwljYXJkLT5vdi5ibWZpZm8uaXJxX2NudCA9IE5VTEw7 DQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+b3YuYWN0aXZlX2NvcmVzOyBpKyspIHsNCj4g PiArCQlzdHJ1Y3QgYWNjX2NvcmUgKmNvcmUgPSAmY2FyZC0+Y29yZXNbaV07DQo+ID4gKw0KPiA+ ICsJCWNvcmUtPmJtZmlmby5tZXNzYWdlcyA9IE5VTEw7DQo+ID4gKwkJY29yZS0+Ym1maWZvLmly cV9jbnQgPSBOVUxMOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXBjaV9mcmVlX2NvbnNpc3RlbnQo cGRldiwgUENJNDAyX0RNQV9TSVpFLCBjYXJkLT5kbWFfYnVmLA0KPiA+ICsJCQkgICAgY2FyZC0+ ZG1hX2huZCk7DQo+ID4gKwljYXJkLT5kbWFfYnVmID0gTlVMTDsNCj4gPiArfQ0KPiA+ICsNCj4g PiArc3RhdGljIGludCBwY2k0MDJfaW5pdF9jb3JlcyhzdHJ1Y3QgcGNpX2RldiAqcGRldikNCj4g PiArew0KPiA+ICsJc3RydWN0IHBjaTQwMl9jYXJkICpjYXJkID0gcGNpX2dldF9kcnZkYXRhKHBk ZXYpOw0KPiA+ICsJaW50IGVycjsNCj4gPiArCWludCBpOw0KPiA+ICsNCj4gPiArCWZvciAoaSA9 IDA7IGkgPCBjYXJkLT5vdi5hY3RpdmVfY29yZXM7IGkrKykgew0KPiA+ICsJCXN0cnVjdCBhY2Nf Y29yZSAqY29yZSA9ICZjYXJkLT5jb3Jlc1tpXTsNCj4gPiArCQlzdHJ1Y3QgYWNjX25ldF9wcml2 ICpwcml2Ow0KPiA+ICsJCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7DQo+ID4gKwkJdTMyIGZp Zm9fY29uZmlnOw0KPiA+ICsNCj4gPiArCQljb3JlLT5hZGRyID0gY2FyZC0+b3YuYWRkciArIChp ICsgMSkgKiBQQ0k0MDJfSU9fTEVOX0NPUkU7DQo+ID4gKw0KPiA+ICsJCWZpZm9fY29uZmlnID0g YWNjX3JlYWQzMihjb3JlLCBBQ0NfQ09SRV9PRl9UWEZJRk9fQ09ORklHKTsNCj4gPiArCQljb3Jl LT50eF9maWZvX3NpemUgPSAodTgpKGZpZm9fY29uZmlnID4+IDI0KTsNCj4gPiArCQlpZiAoY29y ZS0+dHhfZmlmb19zaXplIDw9IDEpIHsNCj4gPiArCQkJcGNpX2VycihwZGV2LCAiSW52YWxpZCB0 eF9maWZvX3NpemUhXG4iKTsNCj4gPiArCQkJZXJyID0gLUVJTlZBTDsNCj4gPiArCQkJZ290byBm YWlsdXJlOw0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJbmV0ZGV2ID0gYWxsb2NfY2FuZGV2KHNp emVvZigqcHJpdiksIGNvcmUtPnR4X2ZpZm9fc2l6ZSk7DQo+ID4gKwkJaWYgKCFuZXRkZXYpIHsN Cj4gPiArCQkJZXJyID0gLUVOT01FTTsNCj4gPiArCQkJZ290byBmYWlsdXJlOw0KPiA+ICsJCX0N Cj4gPiArCQljb3JlLT5uZXRfZGV2ID0gbmV0ZGV2Ow0KPiA+ICsNCj4gPiArCQluZXRkZXYtPmZs YWdzIHw9IElGRl9FQ0hPOw0KPiA+ICsJCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZwY2k0MDJfYWNj X25ldGRldl9vcHM7DQo+ID4gKwkJU0VUX05FVERFVl9ERVYobmV0ZGV2LCAmcGRldi0+ZGV2KTsN Cj4gPiArDQo+ID4gKwkJcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7DQo+ID4gKwkJcHJpdi0+ Y2FuLnN0YXRlID0gQ0FOX1NUQVRFX1NUT1BQRUQ7DQo+ID4gKwkJcHJpdi0+Y2FuLmN0cmxtb2Rl X3N1cHBvcnRlZCA9IENBTl9DVFJMTU9ERV9MSVNURU5PTkxZIHwNCj4gPiArCQkJQ0FOX0NUUkxN T0RFX0JFUlJfUkVQT1JUSU5HIHwNCj4gPiArCQkJQ0FOX0NUUkxNT0RFX0NDX0xFTjhfRExDIHwN Cj4gPiArCQkJQ0FOX0NUUkxNT0RFX0xPT1BCQUNLOw0KPiA+ICsJCXByaXYtPmNhbi5jbG9jay5m cmVxID0gY2FyZC0+b3YuY29yZV9mcmVxdWVuY3k7DQo+ID4gKwkJcHJpdi0+Y2FuLmJpdHRpbWlu Z19jb25zdCA9DQo+ID4gKwkJCShjYXJkLT5vdi5mZWF0dXJlcyAmIEFDQ19PVl9SRUdfRkVBVF9N QVNLX0NBTkZEKSA/DQo+ID4gKwkJCSZwY2k0MDJfYml0dGltaW5nX2NvbnN0X2NhbmZkIDoNCj4g PiArCQkJJnBjaTQwMl9iaXR0aW1pbmdfY29uc3Q7DQo+ID4gKwkJcHJpdi0+Y2FuLmRvX3NldF9i aXR0aW1pbmcgPSBhY2Nfc2V0X2JpdHRpbWluZzsNCj4gPiArCQlwcml2LT5jYW4uZG9fc2V0X21v ZGUgPSBhY2Nfc2V0X21vZGU7DQo+ID4gKwkJcHJpdi0+Y2FuLmRvX2dldF9iZXJyX2NvdW50ZXIg PSBhY2NfZ2V0X2JlcnJfY291bnRlcjsNCj4gPiArDQo+ID4gKwkJcHJpdi0+Y29yZSA9IGNvcmU7 DQo+ID4gKwkJcHJpdi0+b3YgPSAmY2FyZC0+b3Y7DQo+ID4gKw0KPiA+ICsJCWVyciA9IHJlZ2lz dGVyX2NhbmRldihuZXRkZXYpOw0KPiA+ICsJCWlmIChlcnIpIHsNCj4gPiArCQkJZnJlZV9jYW5k ZXYoY29yZS0+bmV0X2Rldik7DQo+ID4gKwkJCWNvcmUtPm5ldF9kZXYgPSBOVUxMOw0KPiA+ICsJ CQlnb3RvIGZhaWx1cmU7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQluZXRkZXZfaW5mbyhuZXRk ZXYsICJyZWdpc3RlcmVkXG4iKTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4g PiArDQo+ID4gK2ZhaWx1cmU6DQo+ID4gKwlmb3IgKGktLTsgaSA+PSAwOyBpLS0pIHsNCj4gPiAr CQlzdHJ1Y3QgYWNjX2NvcmUgKmNvcmUgPSAmY2FyZC0+Y29yZXNbaV07DQo+ID4gKw0KPiA+ICsJ CW5ldGRldl9pbmZvKGNvcmUtPm5ldF9kZXYsICJ1bnJlZ2lzdGVyaW5nLi4uXG4iKTsNCj4gPiAr CQl1bnJlZ2lzdGVyX2NhbmRldihjb3JlLT5uZXRfZGV2KTsNCj4gPiArDQo+ID4gKwkJZnJlZV9j YW5kZXYoY29yZS0+bmV0X2Rldik7DQo+ID4gKwkJY29yZS0+bmV0X2RldiA9IE5VTEw7DQo+ID4g Kwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGVycjsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IHZvaWQgcGNpNDAyX2ZpbmlzaF9jb3JlcyhzdHJ1Y3QgcGNpX2RldiAqcGRldikNCj4gPiArew0K PiA+ICsJc3RydWN0IHBjaTQwMl9jYXJkICpjYXJkID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOw0K PiA+ICsJaW50IGk7DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IGNhcmQtPm92LmFjdGl2 ZV9jb3JlczsgaSsrKSB7DQo+ID4gKwkJc3RydWN0IGFjY19jb3JlICpjb3JlID0gJmNhcmQtPmNv cmVzW2ldOw0KPiA+ICsNCj4gPiArCQluZXRkZXZfaW5mbyhjb3JlLT5uZXRfZGV2LCAidW5yZWdp c3RlclxuIik7DQo+ID4gKwkJdW5yZWdpc3Rlcl9jYW5kZXYoY29yZS0+bmV0X2Rldik7DQo+ID4g Kw0KPiA+ICsJCWZyZWVfY2FuZGV2KGNvcmUtPm5ldF9kZXYpOw0KPiA+ICsJCWNvcmUtPm5ldF9k ZXYgPSBOVUxMOw0KPiA+ICsJfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHBjaTQw Ml9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQN Cj4gPiAqZW50KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgcGNpNDAyX2NhcmQgKmNhcmQgPSBOVUxM Ow0KPiA+ICsJaW50IGVycjsNCj4gPiArDQo+ID4gKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShw ZGV2KTsNCj4gPiArCWlmIChlcnIpDQo+ID4gKwkJcmV0dXJuIGVycjsNCj4gPiArDQo+ID4gKwlj YXJkID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqY2FyZCksIEdGUF9LRVJORUwp Ow0KPiA+ICsJaWYgKCFjYXJkKQ0KPiA+ICsJCWdvdG8gZmFpbHVyZV9kaXNhYmxlX3BjaTsNCj4g PiArDQo+ID4gKwlwY2lfc2V0X2RydmRhdGEocGRldiwgY2FyZCk7DQo+ID4gKw0KPiA+ICsJZXJy ID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBwY2lfbmFtZShwZGV2KSk7DQo+ID4gKwlpZiAo ZXJyKQ0KPiA+ICsJCWdvdG8gZmFpbHVyZV9mcmVlX2NhcmQ7DQo+ID4gKw0KPiA+ICsJY2FyZC0+ YWRkciA9IHBjaV9pb21hcChwZGV2LCBQQ0k0MDJfQkFSLCBQQ0k0MDJfSU9fTEVOX1RPVEFMKTsN Cj4gPiArCWlmICghY2FyZC0+YWRkcikgew0KPiA+ICsJCWVyciA9IC1FTk9NRU07DQo+ID4gKwkJ Z290byBmYWlsdXJlX3JlbGVhc2VfcmVnaW9uczsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwllcnIg PSBwY2k0MDJfaW5pdF9jYXJkKHBkZXYpOw0KPiA+ICsJaWYgKGVycikNCj4gPiArCQlnb3RvIGZh aWx1cmVfdW5tYXA7DQo+ID4gKw0KPiA+ICsJZXJyID0gcGNpNDAyX2luaXRfZG1hKHBkZXYpOw0K PiA+ICsJaWYgKGVycikNCj4gPiArCQlnb3RvIGZhaWx1cmVfdW5tYXA7DQo+ID4gKw0KPiA+ICsJ ZXJyID0gcGNpNDAyX2luaXRfaW50ZXJydXB0KHBkZXYpOw0KPiA+ICsJaWYgKGVycikNCj4gPiAr CQlnb3RvIGZhaWx1cmVfZmluaXNoX2RtYTsNCj4gPiArDQo+ID4gKwllcnIgPSBwY2k0MDJfaW5p dF9jb3JlcyhwZGV2KTsNCj4gPiArCWlmIChlcnIpDQo+ID4gKwkJZ290byBmYWlsdXJlX2Zpbmlz aF9pbnRlcnJ1cHQ7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICtmYWlsdXJl X2ZpbmlzaF9pbnRlcnJ1cHQ6DQo+ID4gKwlwY2k0MDJfZmluaXNoX2ludGVycnVwdChwZGV2KTsN Cj4gPiArDQo+ID4gK2ZhaWx1cmVfZmluaXNoX2RtYToNCj4gPiArCXBjaTQwMl9maW5pc2hfZG1h KHBkZXYpOw0KPiA+ICsNCj4gPiArZmFpbHVyZV91bm1hcDoNCj4gPiArCXBjaV9pb3VubWFwKHBk ZXYsIGNhcmQtPmFkZHIpOw0KPiA+ICsNCj4gPiArZmFpbHVyZV9yZWxlYXNlX3JlZ2lvbnM6DQo+ ID4gKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOw0KPiA+ICsNCj4gPiArZmFpbHVyZV9mcmVl X2NhcmQ6DQo+ID4gKwlkZXZtX2tmcmVlKCZwZGV2LT5kZXYsIGNhcmQpOw0KPiA+ICsNCj4gPiAr ZmFpbHVyZV9kaXNhYmxlX3BjaToNCj4gPiArCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsNCj4g PiArDQo+ID4gKwlyZXR1cm4gZXJyOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBw Y2k0MDJfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3Qg cGNpNDAyX2NhcmQgKmNhcmQgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7DQo+ID4gKw0KPiA+ICsJ cGNpNDAyX2ZpbmlzaF9pbnRlcnJ1cHQocGRldik7DQo+ID4gKwlwY2k0MDJfZmluaXNoX2NvcmVz KHBkZXYpOw0KPiA+ICsJcGNpNDAyX2ZpbmlzaF9kbWEocGRldik7DQo+ID4gKwlwY2lfaW91bm1h cChwZGV2LCBjYXJkLT5hZGRyKTsNCj4gPiArCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7DQo+ ID4gKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7DQo+ID4gKwlkZXZtX2tmcmVlKCZwZGV2LT5k ZXYsIGNhcmQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9k ZXZpY2VfaWQgcGNpNDAyX3RibFtdID0gew0KPiA+ICsJeyBQQ0lfVkVORE9SX0lEX0VTREdNQkgs IEVTRF9QQ0lfREVWSUNFX0lEX1BDSUU0MDIsDQo+ID4gKwkJCVBDSV9BTllfSUQsIFBDSV9BTllf SUQsIH0sDQo+ID4gKwl7IDAsIH0NCj4gPiArfTsNCj4gPiArTU9EVUxFX0RFVklDRV9UQUJMRShw Y2ksIHBjaTQwMl90YmwpOw0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHBj aTQwMl9kcml2ZXIgPSB7DQo+ID4gKwkubmFtZSA9IERSVl9OQU1FLA0KPiA+ICsJLmlkX3RhYmxl ID0gcGNpNDAyX3RibCwNCj4gPiArCS5wcm9iZSA9IHBjaTQwMl9wcm9iZSwNCj4gPiArCS5yZW1v dmUgPSBwY2k0MDJfcmVtb3ZlLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArbW9kdWxlX3BjaV9kcml2 ZXIocGNpNDAyX2RyaXZlcik7DQo+ID4gKw0KPiA+ICtNT0RVTEVfREVTQ1JJUFRJT04oIlNvY2tl dC1DQU4gZHJpdmVyIGZvciBlc2QgQ0FOIFBDSShlKS80MDIgY2FyZHMiKTsNCj4gPiArTU9EVUxF X0FVVEhPUigiVGhvbWFzIEvDtnJwZXIgPHRob21hcy5rb2VycGVyQGVzZC5ldT4iKTsNCj4gPiAr TU9EVUxFX0FVVEhPUigiU3RlZmFuIE3DpHRqZSA8c3RlZmFuLm1hZXRqZUBlc2QuZXU+Iik7DQo+ ID4gK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQv Y2FuL2VzZC9lc2RhY2MuYyBiL2RyaXZlcnMvbmV0L2Nhbi9lc2QvZXNkYWNjLmMNCj4gPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uYmM4NWI5NDhkYjZjDQo+ ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvbmV0L2Nhbi9lc2QvZXNkYWNjLmMN Cj4gPiBAQCAtMCwwICsxLDcxNyBAQA0KPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMC1vbmx5DQo+ID4gKy8qIENvcHlyaWdodCAoQykgMjAxNSAtIDIwMTcgZXNkIGVsZWN0 cm9uaWMgc3lzdGVtIGRlc2lnbiBnbWJoDQo+ID4gKyAqIENvcHlyaWdodCAoQykgMjAxNyAtIDIw MjEgZXNkIGVsZWN0cm9uaWNzIGdtYmgNCj4gPiArICovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8 bGludXgva3RpbWUuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2djZC5oPg0KPiA+ICsjaW5jbHVk ZSA8bGludXgvaW8uaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQo+ID4gKyNpbmNs dWRlICJlc2RhY2MuaCINCj4gPiArDQo+ID4gKy8qIGVjYyB2YWx1ZSBvZiBlc2RBQ0MgZXF1YWxz IFNKQTEwMDAncyBFQ0MgcmVnaXN0ZXIgKi8NCj4gPiArI2RlZmluZSBBQ0NfRUNDX1NFRwkJCTB4 MWYNCj4gPiArI2RlZmluZSBBQ0NfRUNDX0RJUgkJCTB4MjANCj4gPiArI2RlZmluZSBBQ0NfRUND X0JJVAkJCTB4MDANCj4gPiArI2RlZmluZSBBQ0NfRUNDX0ZPUk0JCQkweDQwDQo+ID4gKyNkZWZp bmUgQUNDX0VDQ19TVFVGRgkJCTB4ODANCj4gPiArI2RlZmluZSBBQ0NfRUNDX01BU0sJCQkweGMw DQo+ID4gKw0KPiA+ICsjZGVmaW5lIEFDQ19CTV9JUlFfVU5NQVNLX0FMTAkJMHg1NTU1NTU1NVUN Cj4gPiArI2RlZmluZSBBQ0NfQk1fSVJRX01BU0tfQUxMCQkweGFhYWFhYWFhVQ0KPiA+ICsjZGVm aW5lIEFDQ19CTV9JUlFfTUFTSwkJCTB4MlUNCj4gPiArI2RlZmluZSBBQ0NfQk1fSVJRX1VOTUFT SwkJMHgxVQ0KPiA+ICsjZGVmaW5lIEFDQ19CTV9MRU5GTEFHX1RYCQkweDIwDQo+ID4gKw0KPiA+ ICsjZGVmaW5lIEFDQ19SRUdfU1RBVFVTX0lEWF9TVEFUVVNfRE9TCTE2DQo+ID4gKyNkZWZpbmUg QUNDX1JFR19TVEFUVVNfSURYX1NUQVRVU19FUwkxNw0KPiA+ICsjZGVmaW5lIEFDQ19SRUdfU1RB VFVTX0lEWF9TVEFUVVNfRVAJMTgNCj4gPiArI2RlZmluZSBBQ0NfUkVHX1NUQVRVU19JRFhfU1RB VFVTX0JTCTE5DQo+ID4gKyNkZWZpbmUgQUNDX1JFR19TVEFUVVNfSURYX1NUQVRVU19SQlMJMjAN Cj4gPiArI2RlZmluZSBBQ0NfUkVHX1NUQVRVU19JRFhfU1RBVFVTX1JTCTIxDQo+ID4gKyNkZWZp bmUgQUNDX1JFR19TVEFUVVNfTUFTS19TVEFUVVNfRE9TCUJJVChBQ0NfUkVHX1NUQVRVU19JRFhf U1RBVFVTX0RPDQo+ID4gUykNCj4gPiArI2RlZmluZSBBQ0NfUkVHX1NUQVRVU19NQVNLX1NUQVRV U19FUwlCSVQoQUNDX1JFR19TVEFUVVNfSURYX1NUQVRVU19FUw0KPiA+ICkNCj4gPiArI2RlZmlu ZSBBQ0NfUkVHX1NUQVRVU19NQVNLX1NUQVRVU19FUAlCSVQoQUNDX1JFR19TVEFUVVNfSURYX1NU QVRVU19FUA0KPiA+ICkNCj4gPiArI2RlZmluZSBBQ0NfUkVHX1NUQVRVU19NQVNLX1NUQVRVU19C UwlCSVQoQUNDX1JFR19TVEFUVVNfSURYX1NUQVRVU19CUw0KPiA+ICkNCj4gPiArI2RlZmluZSBB Q0NfUkVHX1NUQVRVU19NQVNLX1NUQVRVU19SQlMJQklUKEFDQ19SRUdfU1RBVFVTX0lEWF9TVEFU VVNfUkINCj4gPiBTKQ0KPiA+ICsjZGVmaW5lIEFDQ19SRUdfU1RBVFVTX01BU0tfU1RBVFVTX1JT CUJJVChBQ0NfUkVHX1NUQVRVU19JRFhfU1RBVFVTX1JTDQo+ID4gKQ0KPiA+ICsNCj4gPiArc3Rh dGljIHZvaWQgYWNjX3Jlc2V0bW9kZV9lbnRlcihzdHJ1Y3QgYWNjX2NvcmUgKmNvcmUpDQo+ID4g K3sNCj4gPiArCWludCBpOw0KPiA+ICsNCj4gPiArCWFjY19zZXRfYml0cyhjb3JlLCBBQ0NfQ09S RV9PRl9DVFJMX01PREUsDQo+ID4gKwkJICAgICBBQ0NfUkVHX0NPTlRST0xfTUFTS19NT0RFX1JF U0VUTU9ERSk7DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsNCj4gPiAr CQlpZiAoYWNjX3Jlc2V0bW9kZV9lbnRlcmVkKGNvcmUpKQ0KPiA+ICsJCQlyZXR1cm47DQo+ID4g Kw0KPiA+ICsJCXVkZWxheSg1KTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwluZXRkZXZfd2Fybihj b3JlLT5uZXRfZGV2LCAiRW50ZXJpbmcgcmVzZXQgbW9kZSB0aW1lZCBvdXRcbiIpOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBhY2NfcmVzZXRtb2RlX2xlYXZlKHN0cnVjdCBhY2Nf Y29yZSAqY29yZSkNCj4gPiArew0KPiA+ICsJaW50IGk7DQo+ID4gKw0KPiA+ICsJYWNjX2NsZWFy X2JpdHMoY29yZSwgQUNDX0NPUkVfT0ZfQ1RSTF9NT0RFLA0KPiA+ICsJCSAgICAgICBBQ0NfUkVH X0NPTlRST0xfTUFTS19NT0RFX1JFU0VUTU9ERSk7DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsg aSA8IDEwOyBpKyspIHsNCj4gPiArCQlpZiAoIWFjY19yZXNldG1vZGVfZW50ZXJlZChjb3JlKSkN Cj4gPiArCQkJcmV0dXJuOw0KPiA+ICsNCj4gPiArCQl1ZGVsYXkoNSk7DQo+ID4gKwl9DQo+ID4g Kw0KPiA+ICsJbmV0ZGV2X3dhcm4oY29yZS0+bmV0X2RldiwgIkxlYXZpbmcgcmVzZXQgbW9kZSB0 aW1lZCBvdXRcbiIpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBhY2NfdHhxX3B1 dChzdHJ1Y3QgYWNjX2NvcmUgKmNvcmUsIHUzMiBhY2NfaWQsIHU4IGFjY19kbGMsDQo+ID4gKwkJ CWNvbnN0IHZvaWQgKmRhdGEpDQo+ID4gK3sNCj4gPiArCWFjY193cml0ZTMyX25vc3dhcChjb3Jl LCBBQ0NfQ09SRV9PRl9UWEZJRk9fREFUQV8xLA0KPiA+ICsJCQkgICAqKChjb25zdCB1MzIgKiko ZGF0YSArIDQpKSk7DQo+ID4gKwlhY2Nfd3JpdGUzMl9ub3N3YXAoY29yZSwgQUNDX0NPUkVfT0Zf VFhGSUZPX0RBVEFfMCwNCj4gPiArCQkJICAgKigoY29uc3QgdTMyICopZGF0YSkpOw0KPiA+ICsJ YWNjX3dyaXRlMzIoY29yZSwgQUNDX0NPUkVfT0ZfVFhGSUZPX0RMQywgYWNjX2RsYyk7DQo+ID4g KwkvKiBDQU4gaWQgbXVzdCBiZSB3cml0dGVuIGF0IGxhc3QuIFRoaXMgd3JpdGUgc3RhcnRzIFRY LiAqLw0KPiA+ICsJYWNjX3dyaXRlMzIoY29yZSwgQUNDX0NPUkVfT0ZfVFhGSUZPX0lELCBhY2Nf aWQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiBQcmVwYXJlIGNvbnZlcnNpb24gZmFjdG9yIGZy b20gRVNEQUNDIHRpbWUgc3RhbXAgdGlja3MgdG8gbnMNCj4gPiArICoNCj4gPiArICogVGhlIGNv bnZlcnNpb24gZmFjdG9yIHRzMm5zIGZyb20gdGltZSBzdGFtcCBjb3VudHMgdG8gbnMgaXMgYmFz aWNhbGx5DQo+ID4gKyAqCXRzMm5zID0gTlNFQ19QRVJfU0VDIC8gdGltZXN0YW1wX2ZyZXF1ZW5j eQ0KPiA+ICsgKg0KPiA+ICsgKiBUbyBhdm9pZCBhbiBvdmVyZmxvdywgdGhlIHRzMm5zIGZyYWN0 aW9uIGlzIHRydW5jYXRlZCB3aXRoIGl0cyBnY2QgYW5kDQo+ID4gKyAqIG9ubHkgdGhlIHRydW5j YXRlZCBudW1lcmF0b3IgYW5kIGRlbm9taW5hdG9yIGFyZSB1c2VkIGZ1cnRoZXIuDQo+ID4gKyAq Lw0KPiA+ICtzdGF0aWMgdm9pZCBhY2NfaW5pdF9vdl90czJucyhzdHJ1Y3QgYWNjX292ICpvdikN Cj4gPiArew0KPiA+ICsJdTMyIHRzMm5zX2djZCA9ICh1MzIpZ2NkKE5TRUNfUEVSX1NFQywgb3Yt PnRpbWVzdGFtcF9mcmVxdWVuY3kpOw0KPiA+ICsNCj4gPiArCW92LT50czJuc19udW1lcmF0b3Ig PSAodTMyKU5TRUNfUEVSX1NFQyAvIHRzMm5zX2djZDsNCj4gPiArCW92LT50czJuc19kZW5vbWlu YXRvciA9IG92LT50aW1lc3RhbXBfZnJlcXVlbmN5IC8gdHMybnNfZ2NkOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMga3RpbWVfdCBhY2NfdHMya3RpbWUoc3RydWN0IGFjY19vdiAqb3YsIHU2 NCB0cykNCj4gPiArew0KPiA+ICsJdTY0IG5zOw0KPiA+ICsNCj4gPiArCXRzID0gdHMgKiBvdi0+ dHMybnNfbnVtZXJhdG9yOw0KPiA+ICsJbnMgPSBkaXZfdTY0KHRzLCBvdi0+dHMybnNfZGVub21p bmF0b3IpOw0KPiA+ICsNCj4gPiArCXJldHVybiBuc190b19rdGltZShucyk7DQo+ID4gK30NCj4g PiArDQo+ID4gK3ZvaWQgYWNjX2luaXRfb3Yoc3RydWN0IGFjY19vdiAqb3YsIHN0cnVjdCBkZXZp Y2UgKmRldikNCj4gPiArew0KPiA+ICsJdTMyIHRlbXA7DQo+ID4gKwkvKiBGb3IgdGhlIGp1c3Rp ZmljYXRpb24gb2YgdGhpcyBzZWUgY29tbWVudCBvbiBzdHJ1Y3QgYWNjX2JtbXNnKg0KPiA+ICsJ ICogaW4gZXNkYWNjLmguDQo+ID4gKwkgKi8NCj4gPiArCUJVSUxEX0JVR19PTihzaXplb2Yoc3Ry dWN0IGFjY19ibW1zZykgIT0gQUNDX0NPUkVfRE1BTVNHX1NJWkUpOw0KPiA+ICsNCj4gPiArCXRl bXAgPSBhY2Nfb3ZfcmVhZDMyKG92LCBBQ0NfT1ZfT0ZfVkVSU0lPTik7DQo+ID4gKwlvdi0+dmVy c2lvbiA9ICh1MTYpdGVtcDsNCj4gPiArCW92LT5mZWF0dXJlcyA9ICh1MTYpKHRlbXAgPj4gMTYp Ow0KPiA+ICsNCj4gPiArCXRlbXAgPSBhY2Nfb3ZfcmVhZDMyKG92LCBBQ0NfT1ZfT0ZfSU5GTyk7 DQo+ID4gKwlvdi0+dG90YWxfY29yZXMgPSAodTgpdGVtcDsNCj4gPiArCW92LT5hY3RpdmVfY29y ZXMgPSAodTgpKHRlbXAgPj4gOCk7DQo+ID4gKw0KPiA+ICsJb3YtPmNvcmVfZnJlcXVlbmN5ID0g YWNjX292X3JlYWQzMihvdiwgQUNDX09WX09GX0NBTkNPUkVfRlJFUSk7DQo+ID4gKwlvdi0+dGlt ZXN0YW1wX2ZyZXF1ZW5jeSA9IGFjY19vdl9yZWFkMzIob3YsIEFDQ19PVl9PRl9UU19GUkVRX0xP KTsNCj4gPiArCWFjY19pbml0X292X3RzMm5zKG92KTsNCj4gPiArDQo+ID4gKwkvKiBEZXBlbmRp bmcgb24gRVNEQUNDIGZlYXR1cmUgTkVXX1BTQyBlbmFibGUgdGhlIG5ldyBwcmVzY2FsZXINCj4g PiArCSAqIG9yIGFkanVzdCBjb3JlX2ZyZXF1ZW5jeSBhY2NvcmRpbmcgdG8gdGhlIGltcGxpY2l0 IGRpdmlzaW9uIGJ5IDIuDQo+ID4gKwkgKi8NCj4gPiArCWlmIChvdi0+ZmVhdHVyZXMgJiBBQ0Nf T1ZfUkVHX0ZFQVRfTUFTS19ORVdfUFNDKSB7DQo+ID4gKwkJYWNjX292X3NldF9iaXRzKG92LCBB Q0NfT1ZfT0ZfTU9ERSwNCj4gPiArCQkJCUFDQ19PVl9SRUdfTU9ERV9NQVNLX05FV19QU0NfRU5B QkxFKTsNCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJb3YtPmNvcmVfZnJlcXVlbmN5IC89IDI7DQo+ ID4gKwl9DQo+ID4gKw0KPiA+ICsJZGV2X2luZm8oZGV2LA0KPiA+ICsJCSAiRVNEQUNDIHYldSwg ZnJlcTogJXUvJXUsIGZlYXQvc3RyYXA6IDB4JXgvMHgleCwgY29yZXM6DQo+ID4gJXUvJXVcbiIs DQo+ID4gKwkJIG92LT52ZXJzaW9uLCBvdi0+Y29yZV9mcmVxdWVuY3ksIG92LT50aW1lc3RhbXBf ZnJlcXVlbmN5LA0KPiA+ICsJCSBvdi0+ZmVhdHVyZXMsIGFjY19vdl9yZWFkMzIob3YsIEFDQ19P Vl9PRl9JTkZPKSA+PiAxNiwNCj4gPiArCQkgb3YtPmFjdGl2ZV9jb3Jlcywgb3YtPnRvdGFsX2Nv cmVzKTsNCj4gPiArCWRldl9kYmcoZGV2LCAiRVNEQUNDIHRzMm5zOiBudW1lcmF0b3IgJXUsIGRl bm9taW5hdG9yICV1XG4iLA0KPiA+ICsJCW92LT50czJuc19udW1lcmF0b3IsIG92LT50czJuc19k ZW5vbWluYXRvcik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3ZvaWQgYWNjX2luaXRfYm1fcHRyKHN0 cnVjdCBhY2Nfb3YgKm92LCBzdHJ1Y3QgYWNjX2NvcmUgKmNvcmVzLCBjb25zdCB2b2lkDQo+ID4g Km1lbSkNCj4gPiArew0KPiA+ICsJdW5zaWduZWQgaW50IHU7DQo+ID4gKw0KPiA+ICsJLyogRE1B IGJ1ZmZlciBsYXlvdXQgYXMgZm9sbG93cyB3aGVyZSBOIGlzIHRoZSBudW1iZXIgb2YgQ0FOIGNv cmVzDQo+ID4gKwkgKiBpbXBsZW1lbnRlZCBpbiB0aGUgRlBHQSwgaS5lLiBOID0gb3YtPnRvdGFs X2NvcmVzDQo+ID4gKwkgKg0KPiA+ICsJICogICBMYXlvdXQgICAgICAgICAgICAgICAgICAgU2Vj dGlvbiBzaXplDQo+ID4gKwkgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQo+ID4gKwkgKiB8 IEZJRk8gQ2FyZC9PdmVydmlldwkgICB8ICBBQ0NfQ09SRV9ETUFCVUZfU0laRQ0KPiA+ICsJICog fAkJCSAgIHwNCj4gPiArCSAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCj4gPiArCSAqIHwg RklGTyBDb3JlMAkJICAgfCAgQUNDX0NPUkVfRE1BQlVGX1NJWkUNCj4gPiArCSAqIHwJCQkgICB8 DQo+ID4gKwkgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQo+ID4gKwkgKiB8IC4uLgkJICAg fCAgLi4uDQo+ID4gKwkgKiB8CQkJICAgfA0KPiA+ICsJICogKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKw0KPiA+ICsJICogfCBGSUZPIENvcmVOCQkgICB8ICBBQ0NfQ09SRV9ETUFCVUZfU0laRQ0K PiA+ICsJICogfAkJCSAgIHwNCj4gPiArCSAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCj4g PiArCSAqIHwgaXJxX2NudCBDYXJkL092ZXJ2aWV3IHwgIHNpemVvZih1MzIpDQo+ID4gKwkgKiAr LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQo+ID4gKwkgKiB8IGlycV9jbnQgQ29yZTAJICAgfCAg c2l6ZW9mKHUzMikNCj4gPiArCSAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCj4gPiArCSAq IHwgLi4uCQkgICB8ICAuLi4NCj4gPiArCSAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCj4g PiArCSAqIHwgaXJxX2NudCBDb3JlTgkgICB8ICBzaXplb2YodTMyKQ0KPiA+ICsJICogKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKw0KPiA+ICsJICovDQo+ID4gKwlvdi0+Ym1maWZvLm1lc3NhZ2Vz ID0gbWVtOw0KPiA+ICsJb3YtPmJtZmlmby5pcnFfY250ID0gbWVtICsgKG92LT50b3RhbF9jb3Jl cyArIDFVKSAqDQo+ID4gQUNDX0NPUkVfRE1BQlVGX1NJWkU7DQo+ID4gKw0KPiA+ICsJZm9yICh1 ID0gMFU7IHUgPCBvdi0+YWN0aXZlX2NvcmVzOyB1KyspIHsNCj4gPiArCQlzdHJ1Y3QgYWNjX2Nv cmUgKmNvcmUgPSAmY29yZXNbdV07DQo+ID4gKw0KPiA+ICsJCWNvcmUtPmJtZmlmby5tZXNzYWdl cyA9IG1lbSArICh1ICsgMVUpICogQUNDX0NPUkVfRE1BQlVGX1NJWkU7DQo+ID4gKwkJY29yZS0+ Ym1maWZvLmlycV9jbnQgPSBvdi0+Ym1maWZvLmlycV9jbnQgKyAodSArIDFVKTsNCj4gPiArCX0N Cj4gPiArfQ0KPiA+ICsNCj4gPiAraW50IGFjY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRk ZXYpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBhY2NfbmV0X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJp dihuZXRkZXYpOw0KPiA+ICsJdTMyIGN0cmxfbW9kZTsNCj4gPiArCWludCBlcnI7DQo+ID4gKw0K PiA+ICsJZXJyID0gb3Blbl9jYW5kZXYobmV0ZGV2KTsNCj4gPiArCWlmIChlcnIpDQo+ID4gKwkJ cmV0dXJuIGVycjsNCj4gPiArDQo+ID4gKwljdHJsX21vZGUgPSBBQ0NfUkVHX0NPTlRST0xfTUFT S19JRV9SWFRYIHwNCj4gPiArCQkJQUNDX1JFR19DT05UUk9MX01BU0tfSUVfVFhFUlJPUiB8DQo+ ID4gKwkJCUFDQ19SRUdfQ09OVFJPTF9NQVNLX0lFX0VSUldBUk4gfA0KPiA+ICsJCQlBQ0NfUkVH X0NPTlRST0xfTUFTS19JRV9PVkVSUlVOIHwNCj4gPiArCQkJQUNDX1JFR19DT05UUk9MX01BU0tf SUVfRVJSUEFTUzsNCj4gPiArDQo+ID4gKwlpZiAocHJpdi0+Y2FuLmN0cmxtb2RlICYgQ0FOX0NU UkxNT0RFX0JFUlJfUkVQT1JUSU5HKQ0KPiA+ICsJCWN0cmxfbW9kZSB8PSBBQ0NfUkVHX0NPTlRS T0xfTUFTS19JRV9CVVNFUlI7DQo+ID4gKw0KPiA+ICsJYWNjX3NldF9iaXRzKHByaXYtPmNvcmUs IEFDQ19DT1JFX09GX0NUUkxfTU9ERSwgY3RybF9tb2RlKTsNCj4gPiArDQo+ID4gKwlwcml2LT5j YW4uc3RhdGUgPSBDQU5fU1RBVEVfRVJST1JfQUNUSVZFOw0KPiA+ICsJbmV0aWZfc3RhcnRfcXVl dWUobmV0ZGV2KTsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtpbnQgYWNj X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBh Y2NfbmV0X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOw0KPiA+ICsNCj4gPiArCWFj Y19jbGVhcl9iaXRzKHByaXYtPmNvcmUsIEFDQ19DT1JFX09GX0NUUkxfTU9ERSwNCj4gPiArCQkg ICAgICAgQUNDX1JFR19DT05UUk9MX01BU0tfSUVfUlhUWCB8DQo+ID4gKwkJICAgICAgIEFDQ19S RUdfQ09OVFJPTF9NQVNLX0lFX1RYRVJST1IgfA0KPiA+ICsJCSAgICAgICBBQ0NfUkVHX0NPTlRS T0xfTUFTS19JRV9FUlJXQVJOIHwNCj4gPiArCQkgICAgICAgQUNDX1JFR19DT05UUk9MX01BU0tf SUVfT1ZFUlJVTiB8DQo+ID4gKwkJICAgICAgIEFDQ19SRUdfQ09OVFJPTF9NQVNLX0lFX0VSUlBB U1MgfA0KPiA+ICsJCSAgICAgICBBQ0NfUkVHX0NPTlRST0xfTUFTS19JRV9CVVNFUlIpOw0KPiA+ ICsNCj4gPiArCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsNCj4gPiArCXByaXYtPmNhbi5zdGF0 ZSA9IENBTl9TVEFURV9TVE9QUEVEOw0KPiA+ICsNCj4gPiArCWNsb3NlX2NhbmRldihuZXRkZXYp Ow0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK25ldGRldl90eF90IGFjY19z dGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYp DQo+ID4gK3sNCj4gPiArCXN0cnVjdCBhY2NfbmV0X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihu ZXRkZXYpOw0KPiA+ICsJc3RydWN0IGFjY19jb3JlICpjb3JlID0gcHJpdi0+Y29yZTsNCj4gPiAr CXN0cnVjdCBjYW5fZnJhbWUgKmNmID0gKHN0cnVjdCBjYW5fZnJhbWUgKilza2ItPmRhdGE7DQo+ ID4gKwl1OCB0eF9maWZvX2hlYWQgPSBjb3JlLT50eF9maWZvX2hlYWQ7DQo+ID4gKwlpbnQgZmlm b191c2FnZTsNCj4gPiArCXUzMiBhY2NfaWQ7DQo+ID4gKwl1OCBhY2NfZGxjOw0KPiA+ICsNCj4g PiArCS8qIEFjY2VzcyBjb3JlLT50eF9maWZvX3RhaWwgb25seSBvbmNlIGJlY2F1c2UgaXQgbWF5 IGJlIGNoYW5nZWQNCj4gPiArCSAqIGZyb20gdGhlIGludGVycnVwdCBsZXZlbC4NCj4gPiArCSAq Lw0KPiA+ICsJZmlmb191c2FnZSA9IHR4X2ZpZm9faGVhZCAtIGNvcmUtPnR4X2ZpZm9fdGFpbDsN Cj4gPiArCWlmIChmaWZvX3VzYWdlIDwgMCkNCj4gPiArCQlmaWZvX3VzYWdlICs9IGNvcmUtPnR4 X2ZpZm9fc2l6ZTsNCj4gPiArDQo+ID4gKwlpZiAoZmlmb191c2FnZSA+PSBjb3JlLT50eF9maWZv X3NpemUgLSAxKSB7DQo+ID4gKwkJbmV0ZGV2X2Vycihjb3JlLT5uZXRfZGV2LA0KPiA+ICsJCQkg ICAiQlVHOiBUWCByaW5nIGZ1bGwgd2hlbiBxdWV1ZSBhd2FrZSFcbiIpOw0KPiA+ICsJCW5ldGlm X3N0b3BfcXVldWUobmV0ZGV2KTsNCj4gPiArCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7DQo+ID4g Kwl9DQo+ID4gKw0KPiA+ICsJaWYgKGZpZm9fdXNhZ2UgPT0gY29yZS0+dHhfZmlmb19zaXplIC0g MikNCj4gPiArCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7DQo+ID4gKw0KPiA+ICsJYWNjX2Rs YyA9IGNhbl9nZXRfY2NfZGxjKGNmLCBwcml2LT5jYW4uY3RybG1vZGUpOw0KPiA+ICsJaWYgKGNm LT5jYW5faWQgJiBDQU5fUlRSX0ZMQUcpDQo+ID4gKwkJYWNjX2RsYyB8PSBBQ0NfQ0FOX1JUUl9G TEFHOw0KPiA+ICsNCj4gPiArCWlmIChjZi0+Y2FuX2lkICYgQ0FOX0VGRl9GTEFHKSB7DQo+ID4g KwkJYWNjX2lkID0gY2YtPmNhbl9pZCAmIENBTl9FRkZfTUFTSzsNCj4gPiArCQlhY2NfaWQgfD0g QUNDX0NBTl9FRkZfRkxBRzsNCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJYWNjX2lkID0gY2YtPmNh bl9pZCAmIENBTl9TRkZfTUFTSzsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwljYW5fcHV0X2VjaG9f c2tiKHNrYiwgbmV0ZGV2LCBjb3JlLT50eF9maWZvX2hlYWQsIDApOw0KPiA+ICsNCj4gPiArCSsr dHhfZmlmb19oZWFkOw0KPiA+ICsJaWYgKHR4X2ZpZm9faGVhZCA+PSBjb3JlLT50eF9maWZvX3Np emUpDQo+ID4gKwkJdHhfZmlmb19oZWFkID0gMFU7DQo+ID4gKwljb3JlLT50eF9maWZvX2hlYWQg PSB0eF9maWZvX2hlYWQ7DQo+ID4gKw0KPiA+ICsJYWNjX3R4cV9wdXQoY29yZSwgYWNjX2lkLCBh Y2NfZGxjLCBjZi0+ZGF0YSk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIE5FVERFVl9UWF9PSzsNCj4g PiArfQ0KPiA+ICsNCj4gPiAraW50IGFjY19nZXRfYmVycl9jb3VudGVyKGNvbnN0IHN0cnVjdCBu ZXRfZGV2aWNlICpuZXRkZXYsDQo+ID4gKwkJCSBzdHJ1Y3QgY2FuX2JlcnJfY291bnRlciAqYmVj KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgYWNjX25ldF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYo bmV0ZGV2KTsNCj4gPiArCXUzMiBjb3JlX3N0YXR1cyA9IGFjY19yZWFkMzIocHJpdi0+Y29yZSwg QUNDX0NPUkVfT0ZfU1RBVFVTKTsNCj4gPiArDQo+ID4gKwliZWMtPnR4ZXJyID0gKGNvcmVfc3Rh dHVzID4+IDgpICYgMHhmZjsNCj4gPiArCWJlYy0+cnhlcnIgPSBjb3JlX3N0YXR1cyAmIDB4ZmY7 DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK2ludCBhY2Nfc2V0 X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgZW51bSBjYW5fbW9kZSBtb2RlKQ0KPiA+ ICt7DQo+ID4gKwlzdHJ1Y3QgYWNjX25ldF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2 KTsNCj4gPiArDQo+ID4gKwlzd2l0Y2ggKG1vZGUpIHsNCj4gPiArCWNhc2UgQ0FOX01PREVfU1RB UlQ6DQo+ID4gKwkJYWNjX3Jlc2V0bW9kZV9sZWF2ZShwcml2LT5jb3JlKTsNCj4gPiArCQluZXRp Zl93YWtlX3F1ZXVlKG5ldGRldik7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKw0KPiA+ICsJZGVmYXVs dDoNCj4gPiArCQlyZXR1cm4gLUVPUE5PVFNVUFA7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0 dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK2ludCBhY2Nfc2V0X2JpdHRpbWluZyhzdHJ1Y3Qg bmV0X2RldmljZSAqbmV0ZGV2KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgYWNjX25ldF9wcml2ICpw cml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsNCj4gPiArCWNvbnN0IHN0cnVjdCBjYW5fYml0dGlt aW5nICpidCA9ICZwcml2LT5jYW4uYml0dGltaW5nOw0KPiA+ICsjaWYgQUNDX0VOQUJMRV9DQU5G RA0KPiA+ICsJY29uc3Qgc3RydWN0IGNhbl9iaXR0aW1pbmcgKmRidCA9ICZwcml2LT5jYW4uZGF0 YV9iaXR0aW1pbmc7DQo+ID4gKyNlbmRpZg0KPiA+ICsJdTMyIGJycCA9IGJ0LT5icnAgLSAxOw0K PiA+ICsJdTMyIGJ0cjsNCj4gPiArDQo+ID4gKwlhY2NfcmVzZXRtb2RlX2VudGVyKHByaXYtPmNv cmUpOw0KPiA+ICsNCj4gPiArCWlmIChwcml2LT5jYW4uY3RybG1vZGUgJiBDQU5fQ1RSTE1PREVf TElTVEVOT05MWSkNCj4gPiArCQlhY2Nfc2V0X2JpdHMocHJpdi0+Y29yZSwgQUNDX0NPUkVfT0Zf Q1RSTF9NT0RFLA0KPiA+ICsJCQkgICAgIEFDQ19SRUdfQ09OVFJPTF9NQVNLX01PREVfTE9NKTsN Cj4gPiArCWVsc2UNCj4gPiArCQlhY2NfY2xlYXJfYml0cyhwcml2LT5jb3JlLCBBQ0NfQ09SRV9P Rl9DVFJMX01PREUsDQo+ID4gKwkJCSAgICAgICBBQ0NfUkVHX0NPTlRST0xfTUFTS19NT0RFX0xP TSk7DQo+ID4gKw0KPiA+ICsJaWYgKHByaXYtPm92LT5mZWF0dXJlcyAmIEFDQ19PVl9SRUdfRkVB VF9NQVNLX0NBTkZEKSB7DQo+ID4gKwkJdTMyIGZidHIgPSAwOw0KPiA+ICsNCj4gPiArCQluZXRk ZXZfZGJnKHByaXYtPmNvcmUtPm5ldF9kZXYsDQo+ID4gKwkJCSAgICJiaXQgdGltaW5nOiBicnAg JXUsIHByb3AgJXUsIHBoMSAldSBwaDIgJXUsIHNqdw0KPiA+ICV1XG4iLA0KPiA+ICsJCQkgICBi dC0+YnJwLCBidC0+cHJvcF9zZWcsDQo+ID4gKwkJCSAgIGJ0LT5waGFzZV9zZWcxLCBidC0+cGhh c2Vfc2VnMiwgYnQtPnNqdyk7DQo+ID4gKw0KPiA+ICsJCS8qIEJSUDogOCBiaXRzIEAgYml0cyA3 Li4wICovDQo+ID4gKwkJYnJwICY9IDB4ZmY7DQo+ID4gKw0KPiA+ICsJCS8qIFRTRUcxOiA4IGJp dHMgQCBiaXRzIDcuLjAgKi8NCj4gPiArCQlidHIgPSAoYnQtPnBoYXNlX3NlZzEgKyBidC0+cHJv cF9zZWcgLSAxKSAmIDB4ZmY7DQo+ID4gKwkJLyogVFNFRzI6IDcgYml0cyBAIGJpdHMgMjIuLjE2 ICovDQo+ID4gKwkJYnRyIHw9ICgoYnQtPnBoYXNlX3NlZzIgLSAxKSAmIDB4N2YpIDw8IDE2Ow0K PiA+ICsJCS8qIFNKVzogNyBiaXRzIEAgYml0cyAzMC4uMjQgKi8NCj4gPiArCQlidHIgfD0gKChi dC0+c2p3IC0gMSkgJiAweDdmKSA8PCAyNDsNCj4gPiArDQo+ID4gKwkJLyogS2VlcCBvcmRlciBv ZiBhY2Nlc3NlcyB0byBBQ0NfQ09SRV9PRl9CUlAgYW5kDQo+ID4gQUNDX0NPUkVfT0ZfQlRSLiAq Lw0KPiA+ICsJCWFjY193cml0ZTMyKHByaXYtPmNvcmUsIEFDQ19DT1JFX09GX0JSUCwgYnJwKTsN Cj4gPiArCQlhY2Nfd3JpdGUzMihwcml2LT5jb3JlLCBBQ0NfQ09SRV9PRl9CVFIsIGJ0cik7DQo+ ID4gKw0KPiA+ICsjaWYgQUNDX0VOQUJMRV9DQU5GRA0KPiA+ICsJCS8qIEFkZCBzZXR1cCBvZiBB Q0NfQ09SRV9PRl9GQlRSIGZvciBDQU4tRkQgZGF0YSBwaGFzZSBoZXJlLiAqLw0KPiA+ICsJCWFj Y193cml0ZTMyKHByaXYtPmNvcmUsIEFDQ19DT1JFX09GX0ZCVFIsIGZidHIpOw0KPiA+ICsjZW5k aWYNCj4gPiArDQo+ID4gKwkJbmV0ZGV2X2luZm8ocHJpdi0+Y29yZS0+bmV0X2RldiwNCj4gPiAr CQkJICAgICJFU0RBQ0M6IEJSUCAldSwgTkJUUiAweCUwOHgsIERCVFIgMHglMDh4IiwNCj4gPiAr CQkJICAgIGJycCwgYnRyLCBmYnRyKTsNCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJbmV0ZGV2X2Ri Zyhwcml2LT5jb3JlLT5uZXRfZGV2LA0KPiA+ICsJCQkgICAiYml0IHRpbWluZzogYnJwICV1LCBw cm9wICV1LCBwaDEgJXUgcGgyICV1LCBzancNCj4gPiAldVxuIiwNCj4gPiArCQkJICAgYnQtPmJy cCwgYnQtPnByb3Bfc2VnLA0KPiA+ICsJCQkgICBidC0+cGhhc2Vfc2VnMSwgYnQtPnBoYXNlX3Nl ZzIsIGJ0LT5zancpOw0KPiA+ICsNCj4gPiArCQkvKiBCUlA6IDkgYml0cyBAIGJpdHMgOC4uMCAq Lw0KPiA+ICsJCWJycCAmPSAweDFmZjsNCj4gPiArDQo+ID4gKwkJLyogVFNFRzE6IDQgYml0cyBA IGJpdHMgMy4uMCAqLw0KPiA+ICsJCWJ0ciA9IChidC0+cGhhc2Vfc2VnMSArIGJ0LT5wcm9wX3Nl ZyAtIDEpICYgMHhmOw0KPiA+ICsJCS8qIFRTRUcyOiAzIGJpdHMgQCBiaXRzIDE4Li4xNiovDQo+ ID4gKwkJYnRyIHw9ICgoYnQtPnBoYXNlX3NlZzIgLSAxKSAmIDB4NykgPDwgMTY7DQo+ID4gKwkJ LyogU0pXOiAyIGJpdHMgQCBiaXRzIDI1Li4yNCAqLw0KPiA+ICsJCWJ0ciB8PSAoKGJ0LT5zancg LSAxKSAmIDB4MykgPDwgMjQ7DQo+ID4gKw0KPiA+ICsJCS8qIEtlZXAgb3JkZXIgb2YgYWNjZXNz ZXMgdG8gQUNDX0NPUkVfT0ZfQlJQIGFuZA0KPiA+IEFDQ19DT1JFX09GX0JUUi4gKi8NCj4gPiAr CQlhY2Nfd3JpdGUzMihwcml2LT5jb3JlLCBBQ0NfQ09SRV9PRl9CUlAsIGJycCk7DQo+ID4gKwkJ YWNjX3dyaXRlMzIocHJpdi0+Y29yZSwgQUNDX0NPUkVfT0ZfQlRSLCBidHIpOw0KPiA+ICsNCj4g PiArCQluZXRkZXZfaW5mbyhwcml2LT5jb3JlLT5uZXRfZGV2LCAiRVNEQUNDOiBCUlAgJXUsIEJU UiAweCUwOHgiLA0KPiA+ICsJCQkgICAgYnJwLCBidHIpOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAr CWFjY19yZXNldG1vZGVfbGVhdmUocHJpdi0+Y29yZSk7DQo+ID4gKwlwcml2LT5jYW4uc3RhdGUg PSBDQU5fU1RBVEVfRVJST1JfQUNUSVZFOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBoYW5kbGVfY29yZV9tc2dfcnh0eGRvbmUoc3RydWN0 IGFjY19jb3JlICpjb3JlLA0KPiA+ICsJCQkJICAgICBjb25zdCBzdHJ1Y3QgYWNjX2JtbXNnX3J4 dHhkb25lICptc2cpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBhY2NfbmV0X3ByaXYgKnByaXYgPSBu ZXRkZXZfcHJpdihjb3JlLT5uZXRfZGV2KTsNCj4gPiArCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRz ICpzdGF0cyA9ICZjb3JlLT5uZXRfZGV2LT5zdGF0czsNCj4gPiArCXN0cnVjdCBza19idWZmICpz a2I7DQo+ID4gKw0KPiA+ICsJaWYgKG1zZy0+ZGxjLnJ4dHgubGVuICYgQUNDX0JNX0xFTkZMQUdf VFgpIHsNCj4gPiArCQl1OCB0eF9maWZvX3RhaWwgPSBjb3JlLT50eF9maWZvX3RhaWw7DQo+ID4g Kw0KPiA+ICsJCWlmIChjb3JlLT50eF9maWZvX2hlYWQgPT0gdHhfZmlmb190YWlsKSB7DQo+ID4g KwkJCW5ldGRldl93YXJuKGNvcmUtPm5ldF9kZXYsDQo+ID4gKwkJCQkgICAgIlRYIGludGVycnVw dCwgYnV0IHF1ZXVlIGlzIGVtcHR5IT9cbiIpOw0KPiA+ICsJCQlyZXR1cm47DQo+ID4gKwkJfQ0K PiA+ICsNCj4gPiArCQkvKiBEaXJlY3QgYWNjZXNzIGVjaG8gc2tiIHRvIGF0dGFjaCBIVyB0aW1l IHN0YW1wLiAqLw0KPiA+ICsJCXNrYiA9IHByaXYtPmNhbi5lY2hvX3NrYlt0eF9maWZvX3RhaWxd Ow0KPiA+ICsJCWlmIChza2IpIHsNCj4gPiArCQkJc2tiX2h3dHN0YW1wcyhza2IpLT5od3RzdGFt cCA9DQo+ID4gKwkJCQlhY2NfdHMya3RpbWUocHJpdi0+b3YsIG1zZy0+dHMpOw0KPiA+ICsJCX0N Cj4gPiArDQo+ID4gKwkJc3RhdHMtPnR4X3BhY2tldHMrKzsNCj4gPiArCQlzdGF0cy0+dHhfYnl0 ZXMgKz0gY2FuX2dldF9lY2hvX3NrYihjb3JlLT5uZXRfZGV2LCB0eF9maWZvX3RhaWwsDQo+ID4g KwkJCQkJCSAgICBOVUxMKTsNCj4gPiArDQo+ID4gKwkJKyt0eF9maWZvX3RhaWw7DQo+ID4gKwkJ aWYgKHR4X2ZpZm9fdGFpbCA+PSBjb3JlLT50eF9maWZvX3NpemUpDQo+ID4gKwkJCXR4X2ZpZm9f dGFpbCA9IDBVOw0KPiA+ICsJCWNvcmUtPnR4X2ZpZm9fdGFpbCA9IHR4X2ZpZm9fdGFpbDsNCj4g PiArDQo+ID4gKwkJbmV0aWZfd2FrZV9xdWV1ZShjb3JlLT5uZXRfZGV2KTsNCj4gPiArDQo+ID4g Kwl9IGVsc2Ugew0KPiA+ICsJCXN0cnVjdCBjYW5fZnJhbWUgKmNmOw0KPiA+ICsNCj4gPiArCQlz a2IgPSBhbGxvY19jYW5fc2tiKGNvcmUtPm5ldF9kZXYsICZjZik7DQo+ID4gKwkJaWYgKCFza2Ip IHsNCj4gPiArCQkJc3RhdHMtPnJ4X2Ryb3BwZWQrKzsNCj4gPiArCQkJcmV0dXJuOw0KPiA+ICsJ CX0NCj4gPiArDQo+ID4gKwkJY2YtPmNhbl9pZCA9IG1zZy0+aWQgJiBDQU5fRUZGX01BU0s7DQo+ ID4gKwkJaWYgKG1zZy0+aWQgJiBBQ0NfQ0FOX0VGRl9GTEFHKQ0KPiA+ICsJCQljZi0+Y2FuX2lk IHw9IENBTl9FRkZfRkxBRzsNCj4gPiArDQo+ID4gKwkJY2FuX2ZyYW1lX3NldF9jY19sZW4oY2Ys IG1zZy0+ZGxjLnJ4LmxlbiAmIEFDQ19DQU5fRExDX01BU0ssDQo+ID4gKwkJCQkgICAgIHByaXYt PmNhbi5jdHJsbW9kZSk7DQo+ID4gKw0KPiA+ICsJCWlmIChtc2ctPmRsYy5yeC5sZW4gJiBBQ0Nf Q0FOX1JUUl9GTEFHKQ0KPiA+ICsJCQljZi0+Y2FuX2lkIHw9IENBTl9SVFJfRkxBRzsNCj4gPiAr CQllbHNlDQo+ID4gKwkJCW1lbWNweShjZi0+ZGF0YSwgbXNnLT5kYXRhLCBjZi0+bGVuKTsNCj4g PiArDQo+ID4gKwkJc2tiX2h3dHN0YW1wcyhza2IpLT5od3RzdGFtcCA9IGFjY190czJrdGltZShw cml2LT5vdiwgbXNnLT50cyk7DQo+ID4gKw0KPiA+ICsJCXN0YXRzLT5yeF9wYWNrZXRzKys7DQo+ ID4gKwkJc3RhdHMtPnJ4X2J5dGVzICs9IGNmLT5sZW47DQo+ID4gKwkJbmV0aWZfcngoc2tiKTsN Cj4gPiArCX0NCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgaGFuZGxlX2NvcmVfbXNn X3R4YWJvcnQoc3RydWN0IGFjY19jb3JlICpjb3JlLA0KPiA+ICsJCQkJICAgIGNvbnN0IHN0cnVj dCBhY2NfYm1tc2dfdHhhYm9ydCAqbXNnKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbmV0X2Rldmlj ZV9zdGF0cyAqc3RhdHMgPSAmY29yZS0+bmV0X2Rldi0+c3RhdHM7DQo+ID4gKwl1bnNpZ25lZCBp bnQgdTsNCj4gPiArDQo+ID4gKwkvKiBhYm9ydF9tYXNrIHNpZ25hbHMgd2hpY2ggZnJhbWVzIHdl cmUgYWJvcnRlZCBpbiBjYXJkJ3MgZmlmbyAqLw0KPiA+ICsJZm9yICh1ID0gMFU7IHUgPCBzaXpl b2YobXNnLT5hYm9ydF9tYXNrKSAqIEJJVFNfUEVSX0JZVEU7IHUrKykgew0KPiA+ICsJCWlmICgh KG1zZy0+YWJvcnRfbWFzayAmICgxVSA8PCB1KSkpDQo+ID4gKwkJCWNvbnRpbnVlOw0KPiA+ICsN Cj4gPiArCQlpZiAoY29yZS0+dHhfZmlmb19oZWFkID09IGNvcmUtPnR4X2ZpZm9fdGFpbCkgew0K PiA+ICsJCQluZXRkZXZfd2Fybihjb3JlLT5uZXRfZGV2LA0KPiA+ICsJCQkJICAgICJUWCBFcnIg aW50ZXJydXB0LCBidXQgcXVldWUgaXMgZW1wdHkhP1xuIik7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ ICsJCX0NCj4gPiArCQlzdGF0cy0+dHhfZXJyb3JzKys7DQo+ID4gKw0KPiA+ICsJCWNhbl9mcmVl X2VjaG9fc2tiKGNvcmUtPm5ldF9kZXYsIGNvcmUtPnR4X2ZpZm9fdGFpbCwgTlVMTCk7DQo+ID4g KwkJY29yZS0+dHhfZmlmb190YWlsKys7DQo+ID4gKwkJaWYgKGNvcmUtPnR4X2ZpZm9fdGFpbCA+ PSBjb3JlLT50eF9maWZvX3NpemUpDQo+ID4gKwkJCWNvcmUtPnR4X2ZpZm9fdGFpbCA9IDA7DQo+ ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKCFhY2NfcmVzZXRtb2RlX2VudGVyZWQoY29yZSkpDQo+ ID4gKwkJbmV0aWZfd2FrZV9xdWV1ZShjb3JlLT5uZXRfZGV2KTsNCj4gPiArfQ0KPiA+ICsNCj4g PiArc3RhdGljIHZvaWQgaGFuZGxlX2NvcmVfbXNnX292ZXJydW4oc3RydWN0IGFjY19jb3JlICpj b3JlLA0KPiA+ICsJCQkJICAgIGNvbnN0IHN0cnVjdCBhY2NfYm1tc2dfb3ZlcnJ1biAqbXNnKQ0K PiA+ICt7DQo+ID4gKwlzdHJ1Y3QgYWNjX25ldF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoY29y ZS0+bmV0X2Rldik7DQo+ID4gKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmY29y ZS0+bmV0X2Rldi0+c3RhdHM7DQo+ID4gKwlzdHJ1Y3QgY2FuX2ZyYW1lICpjZjsNCj4gPiArCXN0 cnVjdCBza19idWZmICpza2I7DQo+ID4gKw0KPiA+ICsJc2tiID0gYWxsb2NfY2FuX2Vycl9za2Io Y29yZS0+bmV0X2RldiwgJmNmKTsNCj4gPiArCWlmICghc2tiKQ0KPiA+ICsJCXJldHVybjsNCj4g PiArDQo+ID4gKwkvKiBsb3N0X2NudCBtYXkgYmUgMCBpZiBub3Qgc3VwcG9ydGVkIGJ5IEVTREFD QyB2ZXJzaW9uICovDQo+ID4gKwlpZiAobXNnLT5sb3N0X2NudCkgew0KPiA+ICsJCXN0YXRzLT5y eF9kcm9wcGVkICs9IG1zZy0+bG9zdF9jbnQ7DQo+ID4gKwkJc3RhdHMtPnJ4X292ZXJfZXJyb3Jz ICs9IG1zZy0+bG9zdF9jbnQ7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCXN0YXRzLT5yeF9kcm9w cGVkKys7DQo+ID4gKwkJc3RhdHMtPnJ4X292ZXJfZXJyb3JzKys7DQo+ID4gKwl9DQo+ID4gKw0K PiA+ICsJY2YtPmNhbl9pZCB8PSBDQU5fRVJSX0NSVEw7DQo+ID4gKwljZi0+ZGF0YVsxXSA9IENB Tl9FUlJfQ1JUTF9SWF9PVkVSRkxPVzsNCj4gPiArDQo+ID4gKwlza2JfaHd0c3RhbXBzKHNrYikt Pmh3dHN0YW1wID0gYWNjX3RzMmt0aW1lKHByaXYtPm92LCBtc2ctPnRzKTsNCj4gPiArDQo+ID4g KwlzdGF0cy0+cnhfcGFja2V0cysrOw0KPiA+ICsJc3RhdHMtPnJ4X2J5dGVzICs9IGNmLT5sZW47 DQo+ID4gKwluZXRpZl9yeChza2IpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBo YW5kbGVfY29yZV9tc2dfYnVzZXJyKHN0cnVjdCBhY2NfY29yZSAqY29yZSwNCj4gPiArCQkJCSAg IGNvbnN0IHN0cnVjdCBhY2NfYm1tc2dfYnVzZXJyICptc2cpDQo+ID4gK3sNCj4gPiArCXN0cnVj dCBhY2NfbmV0X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihjb3JlLT5uZXRfZGV2KTsNCj4gPiAr CXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZjb3JlLT5uZXRfZGV2LT5zdGF0czsN Cj4gPiArCXN0cnVjdCBjYW5fZnJhbWUgKmNmOw0KPiA+ICsJc3RydWN0IHNrX2J1ZmYgKnNrYjsN Cj4gPiArDQo+ID4gKwlwcml2LT5jYW4uY2FuX3N0YXRzLmJ1c19lcnJvcisrOw0KPiA+ICsNCj4g PiArCXNrYiA9IGFsbG9jX2Nhbl9lcnJfc2tiKGNvcmUtPm5ldF9kZXYsICZjZik7DQo+ID4gKwlp ZiAoIXNrYikNCj4gPiArCQlyZXR1cm47DQo+ID4gKw0KPiA+ICsJY2YtPmNhbl9pZCB8PSBDQU5f RVJSX1BST1QgfCBDQU5fRVJSX0JVU0VSUk9SOw0KPiA+ICsNCj4gPiArCS8qIG1zZy0+ZWNjIGFj dHMgbGlrZSBTSkExMDAwJ3MgRUNDIHJlZ2lzdGVyICovDQo+ID4gKwlzd2l0Y2ggKG1zZy0+ZWNj ICYgQUNDX0VDQ19NQVNLKSB7DQo+ID4gKwljYXNlIEFDQ19FQ0NfQklUOg0KPiA+ICsJCWNmLT5k YXRhWzJdIHw9IENBTl9FUlJfUFJPVF9CSVQ7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIEFD Q19FQ0NfRk9STToNCj4gPiArCQljZi0+ZGF0YVsyXSB8PSBDQU5fRVJSX1BST1RfRk9STTsNCj4g PiArCQlicmVhazsNCj4gPiArCWNhc2UgQUNDX0VDQ19TVFVGRjoNCj4gPiArCQljZi0+ZGF0YVsy XSB8PSBDQU5fRVJSX1BST1RfU1RVRkY7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwlkZWZhdWx0Og0K PiA+ICsJCWNmLT5kYXRhWzJdIHw9IENBTl9FUlJfUFJPVF9VTlNQRUM7DQo+ID4gKwkJYnJlYWs7 DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogU2V0IGVycm9yIGxvY2F0aW9uICovDQo+ID4gKwlj Zi0+ZGF0YVszXSA9IG1zZy0+ZWNjICYgQUNDX0VDQ19TRUc7DQo+ID4gKw0KPiA+ICsJLyogRXJy b3Igb2NjdXJyZWQgZHVyaW5nIHRyYW5zbWlzc2lvbj8gKi8NCj4gPiArCWlmICgobXNnLT5lY2Mg JiBBQ0NfRUNDX0RJUikgPT0gMCkgew0KPiA+ICsJCWNmLT5kYXRhWzJdIHw9IENBTl9FUlJfUFJP VF9UWDsNCj4gPiArCQlzdGF0cy0+dHhfZXJyb3JzKys7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJ CXN0YXRzLT5yeF9lcnJvcnMrKzsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlza2JfaHd0c3RhbXBz KHNrYiktPmh3dHN0YW1wID0gYWNjX3RzMmt0aW1lKHByaXYtPm92LCBtc2ctPnRzKTsNCj4gPiAr DQo+ID4gKwlzdGF0cy0+cnhfcGFja2V0cysrOw0KPiA+ICsJc3RhdHMtPnJ4X2J5dGVzICs9IGNm LT5sZW47DQo+ID4gKwluZXRpZl9yeChza2IpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg dm9pZA0KPiA+ICtoYW5kbGVfY29yZV9tc2dfZXJyc3RhdGVjaGFuZ2Uoc3RydWN0IGFjY19jb3Jl ICpjb3JlLA0KPiA+ICsJCQkgICAgICAgY29uc3Qgc3RydWN0IGFjY19ibW1zZ19lcnJzdGF0ZWNo YW5nZSAqbXNnKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgYWNjX25ldF9wcml2ICpwcml2ID0gbmV0 ZGV2X3ByaXYoY29yZS0+bmV0X2Rldik7DQo+ID4gKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAq c3RhdHMgPSAmY29yZS0+bmV0X2Rldi0+c3RhdHM7DQo+ID4gKwlzdHJ1Y3QgY2FuX2ZyYW1lICpj ZiA9IE5VTEw7DQo+ID4gKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOw0KPiA+ICsJY29uc3QgdTMyIHJl Z19zdGF0dXMgPSBtc2ctPnJlZ19zdGF0dXM7DQo+ID4gKwljb25zdCB1OCB0eGVyciA9ICh1OCko cmVnX3N0YXR1cyA+PiA4KTsNCj4gPiArCWNvbnN0IHU4IHJ4ZXJyID0gKHU4KXJlZ19zdGF0dXM7 DQo+ID4gKwllbnVtIGNhbl9zdGF0ZSBuZXdfc3RhdGU7DQo+ID4gKw0KPiA+ICsJaWYgKHJlZ19z dGF0dXMgJiBBQ0NfUkVHX1NUQVRVU19NQVNLX1NUQVRVU19CUykNCj4gPiArCQluZXdfc3RhdGUg PSBDQU5fU1RBVEVfQlVTX09GRjsNCj4gPiArCWVsc2UgaWYgKHJlZ19zdGF0dXMgJiBBQ0NfUkVH X1NUQVRVU19NQVNLX1NUQVRVU19FUCkNCj4gPiArCQluZXdfc3RhdGUgPSBDQU5fU1RBVEVfRVJS T1JfUEFTU0lWRTsNCj4gPiArCWVsc2UgaWYgKHJlZ19zdGF0dXMgJiBBQ0NfUkVHX1NUQVRVU19N QVNLX1NUQVRVU19FUykNCj4gPiArCQluZXdfc3RhdGUgPSBDQU5fU1RBVEVfRVJST1JfV0FSTklO RzsNCj4gPiArCWVsc2UNCj4gPiArCQluZXdfc3RhdGUgPSBDQU5fU1RBVEVfRVJST1JfQUNUSVZF Ow0KPiA+ICsNCj4gPiArCXNrYiA9IGFsbG9jX2Nhbl9lcnJfc2tiKGNvcmUtPm5ldF9kZXYsICZj Zik7DQo+ID4gKw0KPiA+ICsJaWYgKG5ld19zdGF0ZSAhPSBwcml2LT5jYW4uc3RhdGUpIHsNCj4g PiArCQllbnVtIGNhbl9zdGF0ZSB0eF9zdGF0ZSwgcnhfc3RhdGU7DQo+ID4gKw0KPiA+ICsJCXR4 X3N0YXRlID0gKHR4ZXJyID49IHJ4ZXJyKSA/DQo+ID4gKwkJCW5ld19zdGF0ZSA6IENBTl9TVEFU RV9FUlJPUl9BQ1RJVkU7DQo+ID4gKwkJcnhfc3RhdGUgPSAocnhlcnIgPj0gdHhlcnIpID8NCj4g PiArCQkJbmV3X3N0YXRlIDogQ0FOX1NUQVRFX0VSUk9SX0FDVElWRTsNCj4gPiArDQo+ID4gKwkJ LyogQWx3YXlzIGNhbGwgY2FuX2NoYW5nZV9zdGF0ZSgpIHRvIHVwZGF0ZSB0aGUgc3RhdGUNCj4g PiArCQkgKiBldmVuIGlmIGFsbG9jX2Nhbl9lcnJfc2tiKCkgbWF5IGhhdmUgZmFpbGVkLg0KPiA+ ICsJCSAqIGNhbl9jaGFuZ2Vfc3RhdGUoKSBjYW4gY29wZSB3aXRoIGEgTlVMTCBjZiBwb2ludGVy Lg0KPiA+ICsJCSAqLw0KPiA+ICsJCWNhbl9jaGFuZ2Vfc3RhdGUoY29yZS0+bmV0X2RldiwgY2Ys IHR4X3N0YXRlLCByeF9zdGF0ZSk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKHNrYikgew0K PiA+ICsJCWNmLT5kYXRhWzZdID0gdHhlcnI7DQo+ID4gKwkJY2YtPmRhdGFbN10gPSByeGVycjsN Cj4gPiArDQo+ID4gKwkJc2tiX2h3dHN0YW1wcyhza2IpLT5od3RzdGFtcCA9IGFjY190czJrdGlt ZShwcml2LT5vdiwgbXNnLT50cyk7DQo+ID4gKw0KPiA+ICsJCXN0YXRzLT5yeF9wYWNrZXRzKys7 DQo+ID4gKwkJc3RhdHMtPnJ4X2J5dGVzICs9IGNmLT5sZW47DQo+ID4gKwkJbmV0aWZfcngoc2ti KTsNCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJc3RhdHMtPnJ4X2Ryb3BwZWQrKzsNCj4gPiArCX0N Cj4gPiArDQo+ID4gKwlpZiAobmV3X3N0YXRlID09IENBTl9TVEFURV9CVVNfT0ZGKSB7DQo+ID4g KwkJYWNjX3dyaXRlMzIoY29yZSwgQUNDX0NPUkVfT0ZfVFhfQUJPUlRfTUFTSywgMHhmZmZmKTsN Cj4gPiArCQljYW5fYnVzX29mZihjb3JlLT5uZXRfZGV2KTsNCj4gPiArCX0NCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIHZvaWQgaGFuZGxlX2NvcmVfaW50ZXJydXB0KHN0cnVjdCBhY2NfY29y ZSAqY29yZSkNCj4gPiArew0KPiA+ICsJdTMyIG1zZ19maWZvX2hlYWQgPSBjb3JlLT5ibWZpZm8u bG9jYWxfaXJxX2NudCAmIDB4ZmY7DQo+ID4gKw0KPiA+ICsJd2hpbGUgKGNvcmUtPmJtZmlmby5t c2dfZmlmb190YWlsICE9IG1zZ19maWZvX2hlYWQpIHsNCj4gPiArCQljb25zdCBzdHJ1Y3QgYWNj X2JtbXNnICptc2cgPQ0KPiA+ICsJCQkmY29yZS0+Ym1maWZvLm1lc3NhZ2VzW2NvcmUtPmJtZmlm by5tc2dfZmlmb190YWlsXTsNCj4gPiArDQo+ID4gKwkJc3dpdGNoIChtc2ctPnUubXNnX2lkKSB7 DQo+ID4gKwkJY2FzZSBCTV9NU0dfSURfUlhUWERPTkU6DQo+ID4gKwkJCWhhbmRsZV9jb3JlX21z Z19yeHR4ZG9uZShjb3JlLCAmbXNnLT51LnJ4dHhkb25lKTsNCj4gPiArCQkJYnJlYWs7DQo+ID4g Kw0KPiA+ICsJCWNhc2UgQk1fTVNHX0lEX1RYQUJPUlQ6DQo+ID4gKwkJCWhhbmRsZV9jb3JlX21z Z190eGFib3J0KGNvcmUsICZtc2ctPnUudHhhYm9ydCk7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsN Cj4gPiArCQljYXNlIEJNX01TR19JRF9PVkVSUlVOOg0KPiA+ICsJCQloYW5kbGVfY29yZV9tc2df b3ZlcnJ1bihjb3JlLCAmbXNnLT51Lm92ZXJydW4pOw0KPiA+ICsJCQlicmVhazsNCj4gPiArDQo+ ID4gKwkJY2FzZSBCTV9NU0dfSURfQlVTRVJSOg0KPiA+ICsJCQloYW5kbGVfY29yZV9tc2dfYnVz ZXJyKGNvcmUsICZtc2ctPnUuYnVzZXJyKTsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKw0KPiA+ICsJ CWNhc2UgQk1fTVNHX0lEX0VSUlBBU1NJVkU6DQo+ID4gKwkJY2FzZSBCTV9NU0dfSURfRVJSV0FS TjoNCj4gPiArCQkJaGFuZGxlX2NvcmVfbXNnX2VycnN0YXRlY2hhbmdlKGNvcmUsDQo+ID4gKwkJ CQkJCSAgICAgICAmbXNnLT51LmVycnN0YXRlY2hhbmdlKTsNCj4gPiArCQkJYnJlYWs7DQo+ID4g Kw0KPiA+ICsJCWRlZmF1bHQ6DQo+ID4gKwkJCS8qIElnbm9yZSBhbGwgb3RoZXIgQk0gbWVzc2Fn ZXMgKGxpa2UgdGhlIENBTi1GRA0KPiA+IG1lc3NhZ2VzKSAqLw0KPiA+ICsJCQlicmVhazsNCj4g PiArCQl9DQo+ID4gKw0KPiA+ICsJCWNvcmUtPmJtZmlmby5tc2dfZmlmb190YWlsID0NCj4gPiAr CQkJCShjb3JlLT5ibWZpZm8ubXNnX2ZpZm9fdGFpbCArIDEpICYgMHhmZjsNCj4gPiArCX0NCj4g PiArfQ0KPiA+ICsNCj4gPiAraXJxcmV0dXJuX3QgYWNjX2NhcmRfaW50ZXJydXB0KHN0cnVjdCBh Y2Nfb3YgKm92LCBzdHJ1Y3QgYWNjX2NvcmUgKmNvcmVzKQ0KPiA+ICt7DQo+ID4gKwl1MzIJCWly cW1hc2s7DQo+ID4gKwlpbnQJCWk7DQo+ID4gKw0KPiA+ICsJLyogRmlyc3Qgd2UgbG9vayBmb3Ig d2hvbSBpbnRlcnJ1cHRzIGFyZSBwZW5kaW5nLCBjYXJkL292ZXJ2aWV3DQo+ID4gKwkgKiBvciBh bnkgb2YgdGhlIGNvcmVzLiBUd28gYml0cyBpbiBpcnFtYXNrIGFyZSB1c2VkIGZvciBlYWNoOw0K PiA+ICsJICogc2V0IHRvIEFDQ19CTV9JUlFfTUFTSyB0aGVuOg0KPiA+ICsJICovDQo+ID4gKwlp cnFtYXNrID0gMDsNCj4gPiArCWlmICgqb3YtPmJtZmlmby5pcnFfY250ICE9IG92LT5ibWZpZm8u bG9jYWxfaXJxX2NudCkgew0KPiA+ICsJCWlycW1hc2sgfD0gQUNDX0JNX0lSUV9NQVNLOw0KPiA+ ICsJCW92LT5ibWZpZm8ubG9jYWxfaXJxX2NudCA9ICpvdi0+Ym1maWZvLmlycV9jbnQ7DQo+ID4g Kwl9DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IG92LT5hY3RpdmVfY29yZXM7IGkrKykg ew0KPiA+ICsJCXN0cnVjdCBhY2NfY29yZSAqY29yZSA9ICZjb3Jlc1tpXTsNCj4gPiArDQo+ID4g KwkJaWYgKCpjb3JlLT5ibWZpZm8uaXJxX2NudCAhPSBjb3JlLT5ibWZpZm8ubG9jYWxfaXJxX2Nu dCkgew0KPiA+ICsJCQlpcnFtYXNrIHw9IChBQ0NfQk1fSVJRX01BU0sgPDwgKDIgKiAoaSArIDEp KSk7DQo+ID4gKwkJCWNvcmUtPmJtZmlmby5sb2NhbF9pcnFfY250ID0gKmNvcmUtPmJtZmlmby5p cnFfY250Ow0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAoIWlycW1hc2spDQo+ ID4gKwkJcmV0dXJuIElSUV9OT05FOw0KPiA+ICsNCj4gPiArCS8qIEF0IHNlY29uZCB3ZSB0ZWxs IHRoZSBjYXJkIHdlJ3JlIHdvcmtpbmcgb24gdGhlbSBieSB3cml0aW5nIGlycW1hc2ssDQo+ID4g KwkgKiBjYWxsIGhhbmRsZV97b3Z8Y29yZX1faW50ZXJydXB0IGFuZCB0aGVuIGFja25vd2xlZGdl IHRoZQ0KPiA+ICsJICogaW50ZXJydXB0cyBieSB3cml0aW5nIGlycV9jbnQ6DQo+ID4gKwkgKi8N Cj4gPiArCWFjY19vdl93cml0ZTMyKG92LCBBQ0NfT1ZfT0ZfQk1fSVJRX01BU0ssIGlycW1hc2sp Ow0KPiA+ICsNCj4gPiArCWlmIChpcnFtYXNrICYgQUNDX0JNX0lSUV9NQVNLKSB7DQo+ID4gKwkJ LyogaGFuZGxlX292X2ludGVycnVwdCgpOyAtIG5vIHVzZSB5ZXQuICovDQo+ID4gKwkJYWNjX292 X3dyaXRlMzIob3YsIEFDQ19PVl9PRl9CTV9JUlFfQ09VTlRFUiwNCj4gPiArCQkJICAgICAgIG92 LT5ibWZpZm8ubG9jYWxfaXJxX2NudCk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZm9yIChpID0g MDsgaSA8IG92LT5hY3RpdmVfY29yZXM7IGkrKykgew0KPiA+ICsJCXN0cnVjdCBhY2NfY29yZSAq Y29yZSA9ICZjb3Jlc1tpXTsNCj4gPiArDQo+ID4gKwkJaWYgKGlycW1hc2sgJiAoQUNDX0JNX0lS UV9NQVNLIDw8ICgyICogKGkgKyAxKSkpKSB7DQo+ID4gKwkJCWhhbmRsZV9jb3JlX2ludGVycnVw dChjb3JlKTsNCj4gPiArCQkJYWNjX3dyaXRlMzIoY29yZSwgQUNDX09WX09GX0JNX0lSUV9DT1VO VEVSLA0KPiA+ICsJCQkJICAgIGNvcmUtPmJtZmlmby5sb2NhbF9pcnFfY250KTsNCj4gPiArCQl9 DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJYWNjX292X3dyaXRlMzIob3YsIEFDQ19PVl9PRl9CTV9J UlFfTUFTSywgQUNDX0JNX0lSUV9VTk1BU0tfQUxMKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gSVJR X0hBTkRMRUQ7DQo+ID4gK30NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2VzZC9l c2RhY2MuaCBiL2RyaXZlcnMvbmV0L2Nhbi9lc2QvZXNkYWNjLmgNCj4gPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uZjU5NDUxNGMyNmZiDQo+ID4gLS0tIC9k ZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvbmV0L2Nhbi9lc2QvZXNkYWNjLmgNCj4gPiBAQCAt MCwwICsxLDM5NCBAQA0KPiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1v bmx5ICovDQo+ID4gKy8qIENvcHlyaWdodCAoQykgMjAxNSAtIDIwMTcgZXNkIGVsZWN0cm9uaWMg c3lzdGVtIGRlc2lnbiBnbWJoDQo+ID4gKyAqIENvcHlyaWdodCAoQykgMjAxNyAtIDIwMjEgZXNk IGVsZWN0cm9uaWNzIGdtYmgNCj4gPiArICovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8bGludXgv a2VybmVsLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4NCj4gPiArI2luY2x1 ZGUgPGxpbnV4L2Nhbi9kZXYuaD4NCj4gPiArDQo+ID4gKyNkZWZpbmUgQUNDX0VOQUJMRV9DQU5G RAkJCTANCj4gPiArDQo+ID4gKyNkZWZpbmUgQUNDX0NBTl9FRkZfRkxBRwkJCTB4MjAwMDAwMDAN Cj4gPiArI2RlZmluZSBBQ0NfQ0FOX1JUUl9GTEFHCQkJMHgxMA0KPiA+ICsjZGVmaW5lIEFDQ19D QU5fRExDX01BU0sJCQkweDBmDQo+ID4gKw0KPiA+ICsjZGVmaW5lIEFDQ19PVl9PRl9QUk9CRQkJ CQkweDAwMDANCj4gPiArI2RlZmluZSBBQ0NfT1ZfT0ZfVkVSU0lPTgkJCTB4MDAwNA0KPiA+ICsj ZGVmaW5lIEFDQ19PVl9PRl9JTkZPCQkJCTB4MDAwOA0KPiA+ICsjZGVmaW5lIEFDQ19PVl9PRl9D QU5DT1JFX0ZSRVEJCQkweDAwMGMNCj4gPiArI2RlZmluZSBBQ0NfT1ZfT0ZfVFNfRlJFUV9MTwkJ CTB4MDAxMA0KPiA+ICsjZGVmaW5lIEFDQ19PVl9PRl9UU19GUkVRX0hJCQkJMHgwMDE0DQo+ID4g KyNkZWZpbmUgQUNDX09WX09GX0lSUV9TVEFUVVNfQ09SRVMJCTB4MDAxOA0KPiA+ICsjZGVmaW5l IEFDQ19PVl9PRl9UU19DVVJSX0xPCQkJMHgwMDFjDQo+ID4gKyNkZWZpbmUgQUNDX09WX09GX1RT X0NVUlJfSEkJCQkweDAwMjANCj4gPiArI2RlZmluZSBBQ0NfT1ZfT0ZfSVJRX1NUQVRVUwkJCTB4 MDAyOA0KPiA+ICsjZGVmaW5lIEFDQ19PVl9PRl9NT0RFCQkJCTB4MDAyYw0KPiA+ICsjZGVmaW5l IEFDQ19PVl9PRl9CTV9JUlFfQ09VTlRFUgkJMHgwMDcwDQo+ID4gKyNkZWZpbmUgQUNDX09WX09G X0JNX0lSUV9NQVNLCQkJMHgwMDc0DQo+ID4gKyNkZWZpbmUgQUNDX09WX09GX01TSV9EQVRBCQkJ MHgwMDgwDQo+ID4gKyNkZWZpbmUgQUNDX09WX09GX01TSV9BRERSRVNTT0ZGU0VUCQkweDAwODQN Cj4gPiArDQo+ID4gKy8qIEZlYXR1cmUgZmxhZ3MgYXJlIGNvbnRhaW5lZCBpbiB0aGUgdXBwZXIg MTYgYml0IG9mIHRoZSB2ZXJzaW9uDQo+ID4gKyAqIHJlZ2lzdGVyIGF0IEFDQ19PVl9PRl9WRVJT SU9OIGJ1dCBvbmx5IHVzZWQgd2l0aCB0aGVzZSBtYXNrcyBhZnRlcg0KPiA+ICsgKiBleHRyYWN0 aW9uIGludG8gYW4gZXh0cmEgdmFyaWFibGUgPT4gKHh4IC0gMTYpLg0KPiA+ICsgKi8NCj4gPiAr I2RlZmluZSBBQ0NfT1ZfUkVHX0ZFQVRfSURYX0NBTkZECQkoMjcgLSAxNikNCj4gPiArI2RlZmlu ZSBBQ0NfT1ZfUkVHX0ZFQVRfSURYX05FV19QU0MJCSgyOCAtIDE2KQ0KPiA+ICsjZGVmaW5lIEFD Q19PVl9SRUdfRkVBVF9NQVNLX0NBTkZECQlCSVQoQUNDX09WX1JFR19GRUFUX0lEWF9DQU5GRCkN Cj4gPiArI2RlZmluZSBBQ0NfT1ZfUkVHX0ZFQVRfTUFTS19ORVdfUFNDCQlCSVQoQUNDX09WX1JF R19GRUFUX0lEWF8NCj4gPiBORVdfUFNDKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBBQ0NfT1ZfUkVH X01PREVfTUFTS19FTkRJQU5fTElUVExFCTB4MDAwMDAwMDENCj4gPiArI2RlZmluZSBBQ0NfT1Zf UkVHX01PREVfTUFTS19CTV9FTkFCTEUJCTB4MDAwMDAwMDINCj4gPiArI2RlZmluZSBBQ0NfT1Zf UkVHX01PREVfTUFTS19NT0RFX0xFRAkJMHgwMDAwMDAwNA0KPiA+ICsjZGVmaW5lIEFDQ19PVl9S RUdfTU9ERV9NQVNLX1RJTUVSCQkweDAwMDAwMDcwDQo+ID4gKyNkZWZpbmUgQUNDX09WX1JFR19N T0RFX01BU0tfVElNRVJfRU5BQkxFCTB4MDAwMDAwMTANCj4gPiArI2RlZmluZSBBQ0NfT1ZfUkVH X01PREVfTUFTS19USU1FUl9PTkVfU0hPVAkweDAwMDAwMDIwDQo+ID4gKyNkZWZpbmUgQUNDX09W X1JFR19NT0RFX01BU0tfVElNRVJfQUJTT0xVVEUJMHgwMDAwMDA0MA0KPiA+ICsjZGVmaW5lIEFD Q19PVl9SRUdfTU9ERV9NQVNLX1RTX1NSQwkJMHgwMDAwMDE4MA0KPiA+ICsjZGVmaW5lIEFDQ19P Vl9SRUdfTU9ERV9NQVNLX0kyQ19FTkFCTEUJCTB4MDAwMDA4MDANCj4gPiArI2RlZmluZSBBQ0Nf T1ZfUkVHX01PREVfTUFTS19NU0lfRU5BQkxFCQkweDAwMDA0MDAwDQo+ID4gKyNkZWZpbmUgQUND X09WX1JFR19NT0RFX01BU0tfTkVXX1BTQ19FTkFCTEUJMHgwMDAwODAwMA0KPiA+ICsjZGVmaW5l IEFDQ19PVl9SRUdfTU9ERV9NQVNLX0ZQR0FfUkVTRVQJCTB4ODAwMDAwMDANCj4gPiArDQo+ID4g KyNkZWZpbmUgQUNDX0NPUkVfT0ZfQ1RSTF9NT0RFCQkJMHgwMDAwDQo+ID4gKyNkZWZpbmUgQUND X0NPUkVfT0ZfU1RBVFVTX0lSUQkJCTB4MDAwOA0KPiA+ICsjZGVmaW5lIEFDQ19DT1JFX09GX0JS UAkJCQkweDAwMGMNCj4gPiArI2RlZmluZSBBQ0NfQ09SRV9PRl9CVFIJCQkJMHgwMDEwDQo+ID4g KyNkZWZpbmUgQUNDX0NPUkVfT0ZfRkJUUgkJCTB4MDAxNA0KPiA+ICsjZGVmaW5lIEFDQ19DT1JF X09GX1NUQVRVUwkJCTB4MDAzMA0KPiA+ICsjZGVmaW5lIEFDQ19DT1JFX09GX1RYRklGT19DT05G SUcJCTB4MDA0OA0KPiA+ICsjZGVmaW5lIEFDQ19DT1JFX09GX1RYRklGT19TVEFUVVMJCTB4MDA0 Yw0KPiA+ICsjZGVmaW5lIEFDQ19DT1JFX09GX1RYX1NUQVRVU19JUlEJCTB4MDA1MA0KPiA+ICsj ZGVmaW5lIEFDQ19DT1JFX09GX1RYX0FCT1JUX01BU0sJCTB4MDA1NA0KPiA+ICsjZGVmaW5lIEFD Q19DT1JFX09GX0JNX0lSUV9DT1VOVEVSCQkweDAwNzANCj4gPiArI2RlZmluZSBBQ0NfQ09SRV9P Rl9UWEZJRk9fSUQJCQkweDAwYzANCj4gPiArI2RlZmluZSBBQ0NfQ09SRV9PRl9UWEZJRk9fRExD CQkJMHgwMGM0DQo+ID4gKyNkZWZpbmUgQUNDX0NPUkVfT0ZfVFhGSUZPX0RBVEFfMAkJMHgwMGM4 DQo+ID4gKyNkZWZpbmUgQUNDX0NPUkVfT0ZfVFhGSUZPX0RBVEFfMQkJMHgwMGNjDQo+ID4gKw0K PiA+ICsjZGVmaW5lIEFDQ19SRUdfQ09OVFJPTF9JRFhfTU9ERV9SRVNFVE1PREUJMA0KPiA+ICsj ZGVmaW5lIEFDQ19SRUdfQ09OVFJPTF9JRFhfTU9ERV9MT00JCTENCj4gPiArI2RlZmluZSBBQ0Nf UkVHX0NPTlRST0xfSURYX01PREVfU1RNCQkyDQo+ID4gKyNkZWZpbmUgQUNDX1JFR19DT05UUk9M X0lEWF9NT0RFX1RSQU5TRU4JNQ0KPiA+ICsjZGVmaW5lIEFDQ19SRUdfQ09OVFJPTF9JRFhfTU9E RV9UUwkJNg0KPiA+ICsjZGVmaW5lIEFDQ19SRUdfQ09OVFJPTF9JRFhfTU9ERV9TQ0hFRFVMRQk3 DQo+ID4gKyNkZWZpbmUgQUNDX1JFR19DT05UUk9MX01BU0tfTU9ERV9SRVNFVE1PREUJXA0KPiA+ ICsJCQkJQklUKEFDQ19SRUdfQ09OVFJPTF9JRFhfTU9ERV9SRVNFVE1PREUpDQo+ID4gKyNkZWZp bmUgQUNDX1JFR19DT05UUk9MX01BU0tfTU9ERV9MT00JCVwNCj4gPiArCQkJCUJJVChBQ0NfUkVH X0NPTlRST0xfSURYX01PREVfTE9NKQ0KPiA+ICsjZGVmaW5lIEFDQ19SRUdfQ09OVFJPTF9NQVNL X01PREVfU1RNCQlcDQo+ID4gKwkJCQlCSVQoQUNDX1JFR19DT05UUk9MX0lEWF9NT0RFX1NUTSkN Cj4gPiArI2RlZmluZSBBQ0NfUkVHX0NPTlRST0xfTUFTS19NT0RFX1RSQU5TRU4JXA0KPiA+ICsJ CQkJQklUKEFDQ19SRUdfQ09OVFJPTF9JRFhfTU9ERV9UUkFOU0VOKQ0KPiA+ICsjZGVmaW5lIEFD Q19SRUdfQ09OVFJPTF9NQVNLX01PREVfVFMJCVwNCj4gPiArCQkJCUJJVChBQ0NfUkVHX0NPTlRS T0xfSURYX01PREVfVFMpDQo+ID4gKyNkZWZpbmUgQUNDX1JFR19DT05UUk9MX01BU0tfTU9ERV9T Q0hFRFVMRQlcDQo+ID4gKwkJCQlCSVQoQUNDX1JFR19DT05UUk9MX0lEWF9NT0RFX1NDSEVEVUxF KQ0KPiA+ICsNCj4gPiArI2RlZmluZSBBQ0NfUkVHX0NPTlRST0xfSURYX0lFX1JYVFgJOA0KPiA+ ICsjZGVmaW5lIEFDQ19SRUdfQ09OVFJPTF9JRFhfSUVfVFhFUlJPUgk5DQo+ID4gKyNkZWZpbmUg QUNDX1JFR19DT05UUk9MX0lEWF9JRV9FUlJXQVJOCTEwDQo+ID4gKyNkZWZpbmUgQUNDX1JFR19D T05UUk9MX0lEWF9JRV9PVkVSUlVOCTExDQo+ID4gKyNkZWZpbmUgQUNDX1JFR19DT05UUk9MX0lE WF9JRV9UU0kJMTINCj4gPiArI2RlZmluZSBBQ0NfUkVHX0NPTlRST0xfSURYX0lFX0VSUlBBU1MJ MTMNCj4gPiArI2RlZmluZSBBQ0NfUkVHX0NPTlRST0xfSURYX0lFX0JVU0VSUgkxNQ0KPiA+ICsj ZGVmaW5lIEFDQ19SRUdfQ09OVFJPTF9NQVNLX0lFX1JYVFgJQklUKEFDQ19SRUdfQ09OVFJPTF9J RFhfSUVfUlhUWCkNCj4gPiArI2RlZmluZSBBQ0NfUkVHX0NPTlRST0xfTUFTS19JRV9UWEVSUk9S IEJJVChBQ0NfUkVHX0NPTlRST0xfSURYX0lFX1RYRVJST1IpDQo+ID4gKyNkZWZpbmUgQUNDX1JF R19DT05UUk9MX01BU0tfSUVfRVJSV0FSTiBCSVQoQUNDX1JFR19DT05UUk9MX0lEWF9JRV9FUlJX QVJOKQ0KPiA+ICsjZGVmaW5lIEFDQ19SRUdfQ09OVFJPTF9NQVNLX0lFX09WRVJSVU4gQklUKEFD Q19SRUdfQ09OVFJPTF9JRFhfSUVfT1ZFUlJVTikNCj4gPiArI2RlZmluZSBBQ0NfUkVHX0NPTlRS T0xfTUFTS19JRV9UU0kJQklUKEFDQ19SRUdfQ09OVFJPTF9JRFhfSUVfVFNJKQ0KPiA+ICsjZGVm aW5lIEFDQ19SRUdfQ09OVFJPTF9NQVNLX0lFX0VSUlBBU1MgQklUKEFDQ19SRUdfQ09OVFJPTF9J RFhfSUVfRVJSUEFTUykNCj4gPiArI2RlZmluZSBBQ0NfUkVHX0NPTlRST0xfTUFTS19JRV9CVVNF UlIJQklUKEFDQ19SRUdfQ09OVFJPTF9JRFhfSUVfQlVTRVINCj4gPiBSKQ0KPiA+ICsNCj4gPiAr LyogMjU2IEJNX01TR3Mgb2YgMzIgYnl0ZSBzaXplICovDQo+ID4gKyNkZWZpbmUgQUNDX0NPUkVf RE1BTVNHX1NJWkUJCTMyVQ0KPiA+ICsjZGVmaW5lIEFDQ19DT1JFX0RNQUJVRl9TSVpFCQkoMjU2 VSAqIEFDQ19DT1JFX0RNQU1TR19TSVpFKQ0KPiA+ICsNCj4gPiArZW51bSBhY2NfYm1tc2dfaWQg ew0KPiA+ICsJQk1fTVNHX0lEX1JYVFhET05FID0gMHgwMSwNCj4gPiArCUJNX01TR19JRF9UWEFC T1JUID0gMHgwMiwNCj4gPiArCUJNX01TR19JRF9PVkVSUlVOID0gMHgwMywNCj4gPiArCUJNX01T R19JRF9CVVNFUlIgPSAweDA0LA0KPiA+ICsJQk1fTVNHX0lEX0VSUlBBU1NJVkUgPSAweDA1LA0K PiA+ICsJQk1fTVNHX0lEX0VSUldBUk4gPSAweDA2LA0KPiA+ICsJQk1fTVNHX0lEX1RJTUVTTElD RSA9IDB4MDcsDQo+ID4gKwlCTV9NU0dfSURfSFdUSU1FUiA9IDB4MDgsDQo+ID4gKwlCTV9NU0df SURfSE9UUExVRyA9IDB4MDksDQo+ID4gKwlCTV9NU0dfSURfQ0FORkREQVRBMCA9IDB4MGEsDQo+ ID4gKwlCTV9NU0dfSURfQ0FORkREQVRBMSA9IDB4MGINCj4gPiArfTsNCj4gPiArDQo+ID4gKy8q IFRoZSBzdHJ1Y3QgYWNjX2JtbXNnKiBzdHJ1Y3R1cmUgZGVjbGFyYXRpb25zIHRoYXQgZm9sbG93 IGhlcmUgcHJvdmlkZQ0KPiA+ICsgKiBhY2Nlc3MgdG8gdGhlIHJpbmcgYnVmZmVyIG9mIGJ1cyBt YXN0ZXIgbWVzc2FnZXMgbWFpbnRhaW5lZCBieSB0aGUgRlBHQQ0KPiA+ICsgKiBidXMgbWFzdGVy IGVuZ2luZS4gQWxsIGJ1cyBtYXN0ZXIgbWVzc2FnZXMgaGF2ZSB0aGUgc2FtZSBzaXplIG9mDQo+ ID4gKyAqIEFDQ19DT1JFX0RNQU1TR19TSVpFIGFuZCBhIG1pbmltdW0gYWxpZ25tZW50IG9mIEFD Q19DT1JFX0RNQU1TR19TSVpFIGluDQo+ID4gKyAqIG1lbW9yeS4NCj4gPiArICoNCj4gPiArICog QWxsIHN0cnVjdHVyZSBtZW1iZXJzIGFyZSBuYXR1cmFsIGFsaWduZWQuIFRoZXJlZm9yZSB3ZSBz aG91bGQgbm90IG5lZWQNCj4gPiArICogYSBfX3BhY2tlZCBhdHRyaWJ1dGUuIEFsbCBzdHJ1Y3Qg YWNjX2JtbXNnKiBkZWNsYXJhdGlvbnMgaGF2ZSBhdCBsZWFzdA0KPiA+ICsgKiByZXNlcnZlZCog bWVtYmVycyB0byBmaWxsIHRoZSBzdHJ1Y3R1cmUgdG8gdGhlIGZ1bGwNCj4gPiBBQ0NfQ09SRV9E TUFNU0dfU0laRS4NCj4gPiArICoNCj4gPiArICogQSBmYWlsdXJlIG9mIHRoaXMgcHJvcGVydHkg ZHVlIHBhZGRpbmcgd2lsbCBiZSBkZXRlY3RlZCBhdCBjb21waWxlIHRpbWUNCj4gPiArICogYnkg QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgYWNjX2JtbXNnKSAhPSBBQ0NfQ09SRV9ETUFNU0df U0laRSkNCj4gPiArICovDQo+ID4gKw0KPiA+ICtzdHJ1Y3QgYWNjX2JtbXNnX3J4dHhkb25lIHsN Cj4gPiArCXU4IG1zZ19pZDsNCj4gPiArCXU4IHR4Zmlmb19sZXZlbDsNCj4gPiArCXU4IHJlc2Vy dmVkMVsyXTsNCj4gPiArCXU4IHR4dHNmaWZvX2xldmVsOw0KPiA+ICsJdTggcmVzZXJ2ZWQyWzNd Ow0KPiA+ICsJdTMyIGlkOw0KPiA+ICsJdW5pb24gew0KPiA+ICsJCXN0cnVjdCB7DQo+ID4gKwkJ CXU4IGxlbjsNCj4gPiArCQkJdTggcmVzZXJ2ZWQwOw0KPiA+ICsJCQl1OCBiaXRzOw0KPiA+ICsJ CQl1OCBzdGF0ZTsNCj4gPiArCQl9IHJ4dHg7DQo+ID4gKwkJc3RydWN0IHsNCj4gPiArCQkJdTgg bGVuOw0KPiA+ICsJCQl1OCBtc2dfbG9zdDsNCj4gPiArCQkJdTggYml0czsNCj4gPiArCQkJdTgg c3RhdGU7DQo+ID4gKwkJfSByeDsNCj4gPiArCQlzdHJ1Y3Qgew0KPiA+ICsJCQl1OCBsZW47DQo+ ID4gKwkJCXU4IHR4Zmlmb19pZHg7DQo+ID4gKwkJCXU4IGJpdHM7DQo+ID4gKwkJCXU4IHN0YXRl Ow0KPiA+ICsJCX0gdHg7DQo+ID4gKwl9IGRsYzsNCj4gPiArCXU4IGRhdGFbOF07DQo+ID4gKwkv KiBUaW1lIHN0YW1wcyBpbiBzdHJ1Y3QgYWNjX292Ojp0aW1lc3RhbXBfZnJlcXVlbmN5IHRpY2tz LiAqLw0KPiA+ICsJdTY0IHRzOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IGFjY19ibW1z Z190eGFib3J0IHsNCj4gPiArCXU4IG1zZ19pZDsNCj4gPiArCXU4IHR4Zmlmb19sZXZlbDsNCj4g PiArCXUxNiBhYm9ydF9tYXNrOw0KPiA+ICsJdTggdHh0c2ZpZm9fbGV2ZWw7DQo+ID4gKwl1OCBy ZXNlcnZlZDJbMV07DQo+ID4gKwl1MTYgYWJvcnRfbWFza190eHRzOw0KPiA+ICsJdTY0IHRzOw0K PiA+ICsJdTMyIHJlc2VydmVkM1s0XTsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCBhY2Nf Ym1tc2dfb3ZlcnJ1biB7DQo+ID4gKwl1OCBtc2dfaWQ7DQo+ID4gKwl1OCB0eGZpZm9fbGV2ZWw7 DQo+ID4gKwl1OCBsb3N0X2NudDsNCj4gPiArCXU4IHJlc2VydmVkMTsNCj4gPiArCXU4IHR4dHNm aWZvX2xldmVsOw0KPiA+ICsJdTggcmVzZXJ2ZWQyWzNdOw0KPiA+ICsJdTY0IHRzOw0KPiA+ICsJ dTMyIHJlc2VydmVkM1s0XTsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCBhY2NfYm1tc2df YnVzZXJyIHsNCj4gPiArCXU4IG1zZ19pZDsNCj4gPiArCXU4IHR4Zmlmb19sZXZlbDsNCj4gPiAr CXU4IGVjYzsNCj4gPiArCXU4IHJlc2VydmVkMTsNCj4gPiArCXU4IHR4dHNmaWZvX2xldmVsOw0K PiA+ICsJdTggcmVzZXJ2ZWQyWzNdOw0KPiA+ICsJdTY0IHRzOw0KPiA+ICsJdTMyIHJlZ19zdGF0 dXM7DQo+ID4gKwl1MzIgcmVnX2J0cjsNCj4gPiArCXUzMiByZXNlcnZlZDNbMl07DQo+ID4gK307 DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgYWNjX2JtbXNnX2VycnN0YXRlY2hhbmdlIHsNCj4gPiArCXU4 IG1zZ19pZDsNCj4gPiArCXU4IHR4Zmlmb19sZXZlbDsNCj4gPiArCXU4IHJlc2VydmVkMVsyXTsN Cj4gPiArCXU4IHR4dHNmaWZvX2xldmVsOw0KPiA+ICsJdTggcmVzZXJ2ZWQyWzNdOw0KPiA+ICsJ dTY0IHRzOw0KPiA+ICsJdTMyIHJlZ19zdGF0dXM7DQo+ID4gKwl1MzIgcmVzZXJ2ZWQzWzNdOw0K PiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IGFjY19ibW1zZ190aW1lc2xpY2Ugew0KPiA+ICsJ dTggbXNnX2lkOw0KPiA+ICsJdTggdHhmaWZvX2xldmVsOw0KPiA+ICsJdTggcmVzZXJ2ZWQxWzJd Ow0KPiA+ICsJdTggdHh0c2ZpZm9fbGV2ZWw7DQo+ID4gKwl1OCByZXNlcnZlZDJbM107DQo+ID4g Kwl1NjQgdHM7DQo+ID4gKwl1MzIgcmVzZXJ2ZWQzWzRdOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiAr c3RydWN0IGFjY19ibW1zZ19od3RpbWVyIHsNCj4gPiArCXU4IG1zZ19pZDsNCj4gPiArCXU4IHJl c2VydmVkMVszXTsNCj4gPiArCXUzMiByZXNlcnZlZDJbMV07DQo+ID4gKwl1NjQgdGltZXI7DQo+ ID4gKwl1MzIgcmVzZXJ2ZWQzWzRdOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IGFjY19i bW1zZ19ob3RwbHVnIHsNCj4gPiArCXU4IG1zZ19pZDsNCj4gPiArCXU4IHJlc2VydmVkMVszXTsN Cj4gPiArCXUzMiByZXNlcnZlZDJbN107DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgYWNj X2JtbXNnX2NhbmZkZGF0YSB7DQo+ID4gKwl1OCBtc2dfaWQ7DQo+ID4gKwl1OCByZXNlcnZlZDFb M107DQo+ID4gKwl1bmlvbiB7DQo+ID4gKwkJdTggdWk4WzI4XTsNCj4gPiArCQl1MzIgdWkzMls3 XTsNCj4gPiArCX0gZDsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCBhY2NfYm1tc2cgew0K PiA+ICsJdW5pb24gew0KPiA+ICsJCXU4IG1zZ19pZDsNCj4gPiArCQlzdHJ1Y3QgYWNjX2JtbXNn X3J4dHhkb25lIHJ4dHhkb25lOw0KPiA+ICsJCXN0cnVjdCBhY2NfYm1tc2dfY2FuZmRkYXRhIGNh bmZkZGF0YTsNCj4gPiArCQlzdHJ1Y3QgYWNjX2JtbXNnX3R4YWJvcnQgdHhhYm9ydDsNCj4gPiAr CQlzdHJ1Y3QgYWNjX2JtbXNnX292ZXJydW4gb3ZlcnJ1bjsNCj4gPiArCQlzdHJ1Y3QgYWNjX2Jt bXNnX2J1c2VyciBidXNlcnI7DQo+ID4gKwkJc3RydWN0IGFjY19ibW1zZ19lcnJzdGF0ZWNoYW5n ZSBlcnJzdGF0ZWNoYW5nZTsNCj4gPiArCQlzdHJ1Y3QgYWNjX2JtbXNnX3RpbWVzbGljZSB0aW1l c2xpY2U7DQo+ID4gKwkJc3RydWN0IGFjY19ibW1zZ19od3RpbWVyIGh3dGltZXI7DQo+ID4gKwl9 IHU7DQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKiBSZWdhcmRpbmcgRG9jdW1lbnRhdGlvbi9wcm9j ZXNzL3ZvbGF0aWxlLWNvbnNpZGVyZWQtaGFybWZ1bC5yc3QgdGhlDQo+ID4gKyAqIGZvcnRoIGV4 Y2VwdGlvbiBhcHBsaWVzIHRvIHRoZSAiaXJxX2NudCIgbWVtYmVyIG9mIHRoZSBzdHJ1Y3R1cmUN Cj4gPiArICogYmVsb3cuIFRoZSB1MzIgdmFyaWFibGUgImlycV9jbnQiIHBvaW50cyB0byBpcyB1 cGRhdGVkIGJ5IHRoZSBFU0RBQ0MNCj4gPiArICogRlBHQSB2aWEgRE1BLg0KPiA+ICsgKi8NCj4g PiArc3RydWN0IGFjY19ibWZpZm8gew0KPiA+ICsJY29uc3Qgc3RydWN0IGFjY19ibW1zZyAqbWVz c2FnZXM7DQo+ID4gKwkvKiBCaXRzIDAuLjc6IGJtX2ZpZm8gaGVhZCBpbmRleCAqLw0KPiA+ICsJ dm9sYXRpbGUgY29uc3QgdTMyICppcnFfY250Ow0KPiA+ICsJdTMyIGxvY2FsX2lycV9jbnQ7DQo+ ID4gKwl1MzIgbXNnX2ZpZm9fdGFpbDsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCBhY2Nf Y29yZSB7DQo+ID4gKwl2b2lkIF9faW9tZW0gKmFkZHI7DQo+ID4gKwlzdHJ1Y3QgbmV0X2Rldmlj ZSAqbmV0X2RldjsNCj4gPiArCXN0cnVjdCBhY2NfYm1maWZvIGJtZmlmbzsNCj4gPiArCXU4IHR4 X2ZpZm9fc2l6ZTsNCj4gPiArCXU4IHR4X2ZpZm9faGVhZDsNCj4gPiArCXU4IHR4X2ZpZm9fdGFp bDsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCBhY2Nfb3Ygew0KPiA+ICsJdm9pZCBfX2lv bWVtICphZGRyOw0KPiA+ICsJc3RydWN0IGFjY19ibWZpZm8gYm1maWZvOw0KPiA+ICsJdTMyIHRp bWVzdGFtcF9mcmVxdWVuY3k7DQo+ID4gKwl1MzIgdHMybnNfbnVtZXJhdG9yOw0KPiA+ICsJdTMy IHRzMm5zX2Rlbm9taW5hdG9yOw0KPiA+ICsJdTMyIGNvcmVfZnJlcXVlbmN5Ow0KPiA+ICsJdTE2 IHZlcnNpb247DQo+ID4gKwl1MTYgZmVhdHVyZXM7DQo+ID4gKwl1OCB0b3RhbF9jb3JlczsNCj4g PiArCXU4IGFjdGl2ZV9jb3JlczsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCBhY2NfbmV0 X3ByaXYgew0KPiA+ICsJc3RydWN0IGNhbl9wcml2IGNhbjsgLyogbXVzdCBiZSB0aGUgZmlyc3Qg bWVtYmVyISAqLw0KPiA+ICsJc3RydWN0IGFjY19jb3JlICpjb3JlOw0KPiA+ICsJc3RydWN0IGFj Y19vdiAqb3Y7DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHUzMiBhY2NfcmVh ZDMyKHN0cnVjdCBhY2NfY29yZSAqY29yZSwgdW5zaWduZWQgc2hvcnQgb2ZmcykNCj4gPiArew0K PiA+ICsJcmV0dXJuIGlvcmVhZDMyYmUoY29yZS0+YWRkciArIG9mZnMpOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgYWNjX3dyaXRlMzIoc3RydWN0IGFjY19jb3JlICpj b3JlLA0KPiA+ICsJCQkgICAgICAgdW5zaWduZWQgc2hvcnQgb2ZmcywgdTMyIHYpDQo+ID4gK3sN Cj4gPiArCWlvd3JpdGUzMmJlKHYsIGNvcmUtPmFkZHIgKyBvZmZzKTsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIGlubGluZSB2b2lkIGFjY193cml0ZTMyX25vc3dhcChzdHJ1Y3QgYWNjX2Nv cmUgKmNvcmUsDQo+ID4gKwkJCQkgICAgICB1bnNpZ25lZCBzaG9ydCBvZmZzLCB1MzIgdikNCj4g PiArew0KPiA+ICsJaW93cml0ZTMyKHYsIGNvcmUtPmFkZHIgKyBvZmZzKTsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIGlubGluZSB2b2lkIGFjY19zZXRfYml0cyhzdHJ1Y3QgYWNjX2NvcmUg KmNvcmUsDQo+ID4gKwkJCQl1bnNpZ25lZCBzaG9ydCBvZmZzLCB1MzIgbWFzaykNCj4gPiArew0K PiA+ICsJdTMyIHYgPSBhY2NfcmVhZDMyKGNvcmUsIG9mZnMpOw0KPiA+ICsNCj4gPiArCXYgfD0g bWFzazsNCj4gPiArCWFjY193cml0ZTMyKGNvcmUsIG9mZnMsIHYpOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgYWNjX2NsZWFyX2JpdHMoc3RydWN0IGFjY19jb3JlICpj b3JlLA0KPiA+ICsJCQkJICB1bnNpZ25lZCBzaG9ydCBvZmZzLCB1MzIgbWFzaykNCj4gPiArew0K PiA+ICsJdTMyIHYgPSBhY2NfcmVhZDMyKGNvcmUsIG9mZnMpOw0KPiA+ICsNCj4gPiArCXYgJj0g fm1hc2s7DQo+ID4gKwlhY2Nfd3JpdGUzMihjb3JlLCBvZmZzLCB2KTsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIGlubGluZSBpbnQgYWNjX3Jlc2V0bW9kZV9lbnRlcmVkKHN0cnVjdCBhY2Nf Y29yZSAqY29yZSkNCj4gPiArew0KPiA+ICsJdTMyIGN0cmwgPSBhY2NfcmVhZDMyKGNvcmUsIEFD Q19DT1JFX09GX0NUUkxfTU9ERSk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIChjdHJsICYgQUNDX1JF R19DT05UUk9MX01BU0tfTU9ERV9SRVNFVE1PREUpICE9IDA7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyBpbmxpbmUgdTMyIGFjY19vdl9yZWFkMzIoc3RydWN0IGFjY19vdiAqb3YsIHVuc2ln bmVkIHNob3J0IG9mZnMpDQo+ID4gK3sNCj4gPiArCXJldHVybiBpb3JlYWQzMmJlKG92LT5hZGRy ICsgb2Zmcyk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCBhY2Nfb3Zf d3JpdGUzMihzdHJ1Y3QgYWNjX292ICpvdiwNCj4gPiArCQkJCSAgdW5zaWduZWQgc2hvcnQgb2Zm cywgdTMyIHYpDQo+ID4gK3sNCj4gPiArCWlvd3JpdGUzMmJlKHYsIG92LT5hZGRyICsgb2Zmcyk7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCBhY2Nfb3Zfc2V0X2JpdHMo c3RydWN0IGFjY19vdiAqb3YsDQo+ID4gKwkJCQkgICB1bnNpZ25lZCBzaG9ydCBvZmZzLCB1MzIg YikNCj4gPiArew0KPiA+ICsJdTMyIHYgPSBhY2Nfb3ZfcmVhZDMyKG92LCBvZmZzKTsNCj4gPiAr DQo+ID4gKwl2IHw9IGI7DQo+ID4gKwlhY2Nfb3Zfd3JpdGUzMihvdiwgb2Zmcywgdik7DQo+ID4g K30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCBhY2Nfb3ZfY2xlYXJfYml0cyhzdHJ1 Y3QgYWNjX292ICpvdiwNCj4gPiArCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgb2ZmcywgdTMyIGIp DQo+ID4gK3sNCj4gPiArCXUzMiB2ID0gYWNjX292X3JlYWQzMihvdiwgb2Zmcyk7DQo+ID4gKw0K PiA+ICsJdiAmPSB+YjsNCj4gPiArCWFjY19vdl93cml0ZTMyKG92LCBvZmZzLCB2KTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSB2b2lkIGFjY19yZXNldF9mcGdhKHN0cnVjdCBh Y2Nfb3YgKm92KQ0KPiA+ICt7DQo+ID4gKwlhY2Nfb3Zfd3JpdGUzMihvdiwgQUNDX09WX09GX01P REUsIEFDQ19PVl9SRUdfTU9ERV9NQVNLX0ZQR0FfUkVTRVQpOw0KPiA+ICsNCj4gPiArCS8qIEFs c28gcmVzZXQgSV4yQywgdG8gcmUtZGV0ZWN0IGNhcmQgYWRkb25zIGF0IGV2ZXJ5IGRyaXZlciBz dGFydDogKi8NCj4gPiArCWFjY19vdl9jbGVhcl9iaXRzKG92LCBBQ0NfT1ZfT0ZfTU9ERSwgQUND X09WX1JFR19NT0RFX01BU0tfSTJDX0VOQUJMRSk7DQo+ID4gKwltZGVsYXkoMik7DQo+ID4gKwlh Y2Nfb3Zfc2V0X2JpdHMob3YsIEFDQ19PVl9PRl9NT0RFLCBBQ0NfT1ZfUkVHX01PREVfTUFTS19J MkNfRU5BQkxFKTsNCj4gPiArCW1kZWxheSgxMCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3ZvaWQg YWNjX2luaXRfb3Yoc3RydWN0IGFjY19vdiAqb3YsIHN0cnVjdCBkZXZpY2UgKmRldik7DQo+ID4g K3ZvaWQgYWNjX2luaXRfYm1fcHRyKHN0cnVjdCBhY2Nfb3YgKm92LCBzdHJ1Y3QgYWNjX2NvcmUg KmNvcmVzLA0KPiA+ICsJCSAgICAgY29uc3Qgdm9pZCAqbWVtKTsNCj4gPiAraW50IGFjY19vcGVu KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOw0KPiA+ICtpbnQgYWNjX2Nsb3NlKHN0cnVjdCBu ZXRfZGV2aWNlICpuZXRkZXYpOw0KPiA+ICtuZXRkZXZfdHhfdCBhY2Nfc3RhcnRfeG1pdChzdHJ1 Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsNCj4gPiAraW50IGFj Y19nZXRfYmVycl9jb3VudGVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsDQo+ID4g KwkJCSBzdHJ1Y3QgY2FuX2JlcnJfY291bnRlciAqYmVjKTsNCj4gPiAraW50IGFjY19zZXRfbW9k ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBlbnVtIGNhbl9tb2RlIG1vZGUpOw0KPiA+ICtp bnQgYWNjX3NldF9iaXR0aW1pbmcoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7DQo+ID4gK2ly cXJldHVybl90IGFjY19jYXJkX2ludGVycnVwdChzdHJ1Y3QgYWNjX292ICpvdiwgc3RydWN0IGFj Y19jb3JlICpjb3Jlcyk7DQo+ID4gLS0gDQo+ID4gMi4yNS4xDQo+ID4gDQo+ID4gDQo+IA0KPiBN YXJjDQo+IA0KDQoNCg0K