From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id CB73042CBA; Wed, 14 Jun 2023 20:30:41 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id BA41D40E0F; Wed, 14 Jun 2023 20:30:41 +0200 (CEST) Received: from NAM04-DM6-obe.outbound.protection.outlook.com (mail-dm6nam04on2043.outbound.protection.outlook.com [40.107.102.43]) by mails.dpdk.org (Postfix) with ESMTP id 14F7040DDB; Wed, 14 Jun 2023 20:30:40 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ifCrkCwOCWHdVPTu9JK8Lt8yDMhG1FUpokxDbVhpndoRbJ8aChlwfSrD+7KFZNDngxS3LVMEUkK5KNB5v85j3OXAH8iBlqWl4rfWdcFE38YKTqYrCp4oyweHGytg4ouFjHPoiwnwbrOcOo21FnlRyydU8b8hLuGtJ38fGbGW+O6BB2QXaWx6qg/zA5MCdpT7appcNWYtcwaOJtVdCJQBhO1bMrULiS8NUI+aLhUWEeABHvuI4Nhj10uwyPUCmlJ8dnr6OL1KxXyOuZrxocIb0rDSiBNpN8sd9pfd7mEmaJFJandqR9p8ucDfDy1Z6AxrfPFYtL6wv4WurO070IVu6Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=wbJd0ETJH7zPwu77EKdH6ZiknEbamQvQ6y4pxp9b8pI=; b=nXLod0L0pPJj7JQcJRpbUX+eR9J04QZSMcvP1wyGq0A5duOFtldWjgWXRbseTVjcLwDUlmOah+nwUsUAXMgRqc7l1vEqfRI0wrtTUtSfAE1R5mSdmp1Lo5nIDwtowCIIWPiZvw/ZZMj58eEHG5XGhXzdsg96AXSgZGjqq+uA0RWs6HTCMe6fvQt4wJxncGRumJuFpQqjL8/lKL+k+wCHuLoepNUs2s1SnQvdxDAvzj3xa/77Sz8J/rDUVAMLDLfaXSMoLTc7JMyCnlhBOGyP/q5N+dL52KnuPjnX8NyPUY1aZD1Qp0KZ0IUZ1PqIaxUAT2+X5lGU8Fgi7IxREWT34A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=wbJd0ETJH7zPwu77EKdH6ZiknEbamQvQ6y4pxp9b8pI=; b=jPYrEOQM96H1fscchNakcm5tnxasY5CkxDo0j1RHCz73AlijVeTADlyxGQHHMlSoJ+5EiJAoxVsj17atO78QzS0tAmegegq0MBpA8Rp0Xda8x/EJfCI3AAecCCnX5fYtKFdypEWgxDKSdK7GnPhoJJotYRcaAkldFhjbFIDFjou8+Zg6SMAv6WE2ExM1sN4LrnuIo2FpN7xN1SCBiKVwCqTtULqZJp3x6zQp5tR0t2jvXeMRxjeRSvLYrRZrW5AQBEHBa/6xxWMIYy84kai+L+svNt2B51EnJOg0uHvt1PVQoH5Romrhi+OVfQfR+y7KlMOsAcUFjGF6q73NBndQ7g== Received: from MW2PR12MB4666.namprd12.prod.outlook.com (2603:10b6:302:13::22) by SA0PR12MB7076.namprd12.prod.outlook.com (2603:10b6:806:2d5::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6477.37; Wed, 14 Jun 2023 18:30:37 +0000 Received: from MW2PR12MB4666.namprd12.prod.outlook.com ([fe80::2283:65bb:1559:9dcf]) by MW2PR12MB4666.namprd12.prod.outlook.com ([fe80::2283:65bb:1559:9dcf%4]) with mapi id 15.20.6477.028; Wed, 14 Jun 2023 18:30:37 +0000 From: Ori Kam To: Qi Zhang , "NBU-Contact-Thomas Monjalon (EXTERNAL)" , "david.marchand@redhat.com" , "bruce.richardson@intel.com" , "jerinj@marvell.com" , "ferruh.yigit@amd.com" CC: "john.mcnamara@intel.com" , "helin.zhang@intel.com" , "techboard@dpdk.org" , "dev@dpdk.org" Subject: RE: [RFC] lib/ethdev: introduce table driven APIs Thread-Topic: [RFC] lib/ethdev: introduce table driven APIs Thread-Index: AQHZnNl7QaukXs71V0i1hjoK2jupA6+Kkc0w Date: Wed, 14 Jun 2023 18:30:37 +0000 Message-ID: References: <20230612111539.462084-1-qi.z.zhang@intel.com> In-Reply-To: <20230612111539.462084-1-qi.z.zhang@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MW2PR12MB4666:EE_|SA0PR12MB7076:EE_ x-ms-office365-filtering-correlation-id: b6e338bc-1d18-416e-46c3-08db6d0572cc x-ld-processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: kWvtCIxhrIVWaIhI3Ph3BRLa1Z9ZNUe4Oyaabsq05WtZCL6BXO+4zSIQPEPpkWZoYlktOYO8w1yVtS7th/VB9xeQ/Ge+gP4UmYyaxYU4lB739s8eweo5V3AoWOYVXfVxLZYDA4shoR36GIuJbSsNi5gKj4nIrMh0XEFryHtwZz/lnapv78GPmbdOCn+zRseG0kz9t+dZBNy4v+2bHBJlWAu+2kMbujrxnOXELCVw2vGthNBj+iCMD9I5RnrHVhrsUv0GBWShf33oz/y6X/uOw0i7r7XJdUiQ+l1oQUH32rtJOJbMjc+XWNXOvE9LyRIAD7DCqsP9FmKvzP6Q9uaqu7YrihKBbJ8xCY+V6MnveoKrKC6dB86UZbSbr2b0OH7BYryZ3ZZf9LsqNfYyGfQKTp42ScuKtkJr18rkBP63R2xvY4DUkbvOQ0Us7GIv0s2HHgLStBULG4N5MwPG6t40rZSnTaHNYqerso9L8gO787tKGbADo0xxn/UUeCVpaLwJt6ZcseKeqVjcxUhx830bJg83Qs30o33RUmv9C6yuMruou/cUUPG52RTDBIqEZ4bepiiubi0sBzjHMCx++M5bqQnEtJRTRUUwLjpp9QviuKm5QdNTGRBfhB7cFArtiaPrZodvMkzNqEk9O7nbyE3xGqoScuzCFvH76lgi6tnlq29XCeZ1aAxpSj6eV3F58+y0 x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MW2PR12MB4666.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(4636009)(376002)(136003)(346002)(366004)(39860400002)(396003)(451199021)(478600001)(52536014)(2906002)(30864003)(110136005)(54906003)(71200400001)(8936002)(8676002)(5660300002)(76116006)(66946007)(66446008)(66476007)(66556008)(64756008)(4326008)(316002)(38100700002)(41300700001)(38070700005)(7416002)(55016003)(122000001)(26005)(6506007)(9686003)(33656002)(186003)(86362001)(83380400001)(7696005)(966005)(579004)(559001); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?NVdHekFWcUxMaUErWG9MRXozbFR6WDVjWFo0Y2lXV3JwSGRCcGp6TXg3bzBJ?= =?utf-8?B?WE14SzBpblZSQUJnbGduWE9DeEVNMzBGa1JCUWxNcG1JQTdxQkdwUnpQOWRY?= =?utf-8?B?dFR4Y1lDclV0dkZFZlJ5ekUxbElBb3g4QnhlUitLS2ZnMmozb0ludW1jcE9p?= =?utf-8?B?dytic2gwdHVrS1R4NFJ6dmlvdkkyd1VnUjNGbWJ4SkdGR3FuZ2JITDBrNzh3?= =?utf-8?B?OGtjK2VsZGhJS2RUeEFNeWRtWGo0WXJtOFY1RTNqUDhxbUtyTWRpeG1JT2ZV?= =?utf-8?B?WkZ2Rnk2U1lGakhoZU1IbVZ0ZTRWWENsdk10VlZBVnFaR2JzV3ZIbVRKcW53?= =?utf-8?B?TVRqb1pzRW11WkJWRUwxWWlDNit6Ulp3UHhpZHlnSUliZXliM2dzSmpnQWFY?= =?utf-8?B?Yy91UThVaXNOWEZic1lCRTJIc2plZVRtUkEwQzNVcUYwWCtvSkEzOHRONEk2?= =?utf-8?B?d1JVMytFb0g4cXc1Z3ZLc2Nhd0ZvNmlNRmRCTnJWY0s1QXd2NUJ4UUhEMm5X?= =?utf-8?B?aGdmY1l5YXEyeEhTT3YwTWNoekRmWXU1TjQvcnhOMXNzZTJ3YzdjbEdvbG56?= =?utf-8?B?SEh5YURFOTNkbkY0UjdmZnhnVHVQZm9hQm1HRVdhbHdVaHNMWFFOQVBFclZm?= =?utf-8?B?OEFlYUkxNEJZUzJlTExBN2FIWVZhMjBVbW1Gd0Q5TTQxUTB6aFJ3cU9lZ09L?= =?utf-8?B?cVVBRlpsY1ZuUTgrY2dOV0lFWHUycTVWK1ZSZDViLzVqeG1qaXV2QmJpNVJ6?= =?utf-8?B?Yk1Sa3BnUUtMUHlGdzA0VW9GY0dBbDMyazZmZGQzd2FTRkJTMkxMcEFQTjFk?= =?utf-8?B?c1JMY0o2MEhRcE9CWi9rSHJpZSs3ZmorclYxRDA2MVJxYXJwMHRjR0ZFYk9n?= =?utf-8?B?bVBnbjFUK00yRkNUVmp4cVd5TkpITXY1TmVrYVJDUmM4K2hhRk9qK0orZGFV?= =?utf-8?B?bEZKa1I1SWx2Z2MwQzZVRjJ1ekd5QUNTNGtvVUdXaHdmVlV5Q0FqLzdjN0g5?= =?utf-8?B?V1dBTEw0N3hMQXFkcFFaMnpyZmM3Z0VVZFFESk5MSHBxclBxeFhaekJvQTFO?= =?utf-8?B?U2Q0dFJ3RkJVNnBja0dqdHNZSXFsRmVvNHVuTGsvVTZpRUY1Z1BOUENIdGR1?= =?utf-8?B?cHhFZjE4dHRDWnp2bUttNGkrSDJtcHpWNXRlU3VxbEV3NHduakEzMUMwbFIw?= =?utf-8?B?emJxcGpSVmRJQW52NyttNEpoQ3o3ZHhGVTNaaDQ5aktEUDQvZndyNnhTQnl1?= =?utf-8?B?UGZGdTZremYxcHpCTVVIbS9Bc2dHWm4ydXdGS1dpazdEWkZDUFhCd3JPWkV1?= =?utf-8?B?bVlIYWYxWURjTDdYdnNDQUpYV0NyYVJySG11ay84N1NheWduclhnVWFndUtk?= =?utf-8?B?YjQrYVhML1Z2TGFQK05oWm01NFRYWVpzbGV0Qm95OEE0RlMwQTk0RnFHekUv?= =?utf-8?B?V2xaMUdZY2VpS3hNdm9VdVFiQm13UklQdjBGNWwxeXVKSlZ1UmVMTjlQbzdt?= =?utf-8?B?dnlGVEtXTlpiK0tkbmRkTm40U2d3OVF2aytGd2ZjdXhQNzBFeWIxWUJtYUJh?= =?utf-8?B?aUJ5SE1Ubk9rNEUvK3RnMkJUVVBVUmRndTVUdU8yMnk1QWkxTEtySW5QL3Fp?= =?utf-8?B?NURkZmdlYUNHem1ORlN6bm9LR1pzSW4vcTljTjlEODFiSlRGcHE0UHhPZm9M?= =?utf-8?B?WHluSEd6UGJWd2NSNEpVUlVKK1dUWUFDbThJUDk2NmR3eUpJOGFRK3ovaUow?= =?utf-8?B?MFFuZGRPb2w0Yzd3N1pzSXdUcElOVmZiYjZNaVFLNGw1N2JLVjQ2ZzY0bWlV?= =?utf-8?B?bGNUNEpKSHh4MUpsVldpaCsxbXpRdzJLVm0yT3VWcXJVa09kSnl2eEFpOHZN?= =?utf-8?B?WXpQNjZNYmg1Vktlb3NnbU9RQ201UUZ3SVZDdkRBRExCY0NiekRNQ3FNTmhY?= =?utf-8?B?NEpaQkN1ZUY5QVZMNVpaSk9ycHQwTzFuN055eUFlSGczYjUxWTNhUHArZEw2?= =?utf-8?B?VEpETkZOZmVZSXdpNUhNbEdDOE9VWjRPOHN5Y0Q2RTZuRmdhM1BkbW83RTB2?= =?utf-8?B?MzRvbWVTeUVHUVhrQ2ZSQ1NSWU85amxmQzJoandnc253RzA0cUZReDAyWkdz?= =?utf-8?Q?bKUc=3D?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW2PR12MB4666.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b6e338bc-1d18-416e-46c3-08db6d0572cc X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Jun 2023 18:30:37.0847 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 15l8VJi16v8902JhDFYDztUUfGwhN2d86L7QHHlgI8RQM2kT29LSD243sGUJOFjg8G17ZfQoccK/4ve2KIlI9w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR12MB7076 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org SGkgUWksDQoNCg0KMS4gaXQgbWF5IGJlIHVzZWZ1bCB0byBnZXQgc29tZSBnZW5lcmFsIGNhbGxp bmcgZmxvdyB3aGF0IGNvbWVzIGZyb20gdGhlIGFwcGxpY2F0aW9uLA0Kd2hhdCBjb21lcyBmcm9t IHRoZSBjb21waWxlci4NClNpbXBsZSBleGFtcGxlIHdpbGwgYmUgZ29vZC4NCg0KMi4gSSBnYXZl IHNvbWUgY29tbWVudHMgYWJvdXQgbmFtZXMgYnV0IHRob3NlIGFyZSBpbiBsb3cgcHJpb3JpdHks DQpmaXJzdCwgd2UgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXMgdGhlIGJhc2ljIGZsb3cuDQoN CjMuIGluIHlvdXIgc3VnZ2VzdGVkIEFQSSB0aGVyZSBpcyBubyB1c2Ugb2YgUlRFX0ZMT1cgYW5k IEkgYXNzdW1lDQp0aGF0IHRoZSBQTUQgaW1wbGVtZW50YXRpb24gd2lsbCBqdXN0IG9mZmxvYWQg dGhlIHJ1bGVzIHRvIHRoZSBIVy4NCmlmIHNvIHRoaXMgd2lsbCByZXN1bHQgaW4gZHVwbGljYXRl IEFQSXMgYW5kIG1haW50ZW5hbmNlIGlzc3Vlcy4NCkkgdGhpbmsgd2Ugc2hvdWxkIGxldmVyYWdl IHRoZSBmYWN0IHRoYXQgUDQgaGFzIGEgY29tcGxpZXIgd2hpY2gNCmNhbiBnaXZlcyB1cyBhbGwg dGhlIGlucHV0IHdlIG5lZWQuDQoNCjQuIEZyb20gcmVhZGluZyB0aGUgY29kZSwgSSBoYXZlIHRo ZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGNvbXBsaWVyIHByb2dyYW1zIHRoZSBIVw0KYW5kIHRoZSBQ TUQgcmVhZHMgdGhpcyBpbmZvIGFtIEkgY29ycmVjdD8NCg0KNS4gYXMgSSBzZWUgaXQgdGhlcmUg c2hvdWxkIGJlIHNvbWUgY29udHJvbCBzdGFnZSB3aGVyZSBldmVyeXRoaW5nIGlzIGNvbmZpZ3Vy ZWQNCmFuZCB0aGVuIGFwcGxpY2F0aW9uIGp1c3Qgb2ZmbG9hZCB0aGUgcnVsZXMsIHRoZXJlIGlz IG5vIHJlYXNvbiB0byBxdWVyeSBkYXRhIGFib3V0DQprZXlzIGFuZCB0YWJsZXMuDQoNCjYuIEkg ZGlkbid0IGZ1bGx5IHJldmlldyB0aGUgQVBJIGJlbG93IGJ1dCBoYXZlIHNvbWUgY29tbWVudHMg aW5saW5lLg0KDQoNClRoYW5rcywNCk9yaQ0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0t DQo+IEZyb206IFFpIFpoYW5nIDxxaS56LnpoYW5nQGludGVsLmNvbT4NCj4gU2VudDogTW9uZGF5 LCBKdW5lIDEyLCAyMDIzIDI6MTYgUE0NCj4gDQo+IFRoZSBwYXRjaCBhZGRyZXNzZXMgdGhlIHBy b2JsZW0gc3RhdGVtZW50IFsxXSBieSBpbnRyb2R1Y2luZw0KPiBhIHNldCBvZiAiVGFibGUtRHJp dmVuIiBBUElzIGluIHJ0ZV9mbG93Lg0KPiANCj4gVGhpcyBhcHByb2FjaCBpcyBpbnNwaXJlZCBi eSBwNGxhbmQvdGRpIFsyXSBhbmQgaXMgcGFydGljdWxhcmx5DQo+IGJlbmVmaWNpYWwgZm9yIFA0 IHByb2dyYW1tYWJsZSBuZXR3b3JrIGNvbnRyb2xsZXIgZHJpdmVycy4NCj4gSXQgcHJvdmlkZXMg dGhlIGZvbGxvd2luZyBhZHZhbnRhZ2VzOg0KPiANCj4gKiBFYXN5IGludGVncmF0aW9uIG9mIERQ REsgYXMgYSBQNCBydW50aW1lIFszXSBiYWNrZW5kLg0KPiAqIFJlZHVjZWQgZWZmb3J0IGZvciBQ TURzIHRvIGVuYWJsZSBmbG93IG9mZmxvYWRpbmcgd2hlbiB0aGUgcGFja2V0DQo+ICAgcHJvY2Vz c2luZyB1bml0IGlzIGFic3RyYWN0ZWQgYXMgYSBwaXBlbGluZSBvZiBtYXRjaC9hY3Rpb24gdGFi bGVzDQo+ICAgaW4gbG93LWxldmVsIGRyaXZlcnMuDQo+IA0KPiBUaGUgbmV3IEFQSXMgY2FuIGJl IGNhdGVnb3JpZWQgaW50byA1IHR5cGVzDQo+IA0KPiAxLiBMZWFybmluZyBBUElzDQo+IA0KPiAg ICBSZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCBhdHRyaWJ1dGVzIHN1cHBvcnRlZCBieSBlYWNo IHRhYmxlDQo+ICAgIGFuZCBhY3Rpb24gc3BlY2lmaWNhdGlvbiBpbiB0aGUgY3VycmVudCBwaXBl bGluZS4NCj4gDQo+ICAgIHJ0ZV9mbG93X3RhYmxlX2xpc3RfZ2V0DQo+ICAgIHJ0ZV9mbG93X3Rh YmxlX2luZm9fZ2V0DQo+ICAgIHJ0ZV9mbG93X3RhYmxlX2luZm9fZ2V0X2J5X25hbWUNCj4gICAg cnRlX2Zsb3dfdGFibGVfa2V5X2ZpZWxkX2luZm9fZ2V0DQo+ICAgIHJ0ZV9mbG93X3RhYmxlX2tl eV9maWVsZF9pbmZvX2dldF9ieV9uYW1lDQo+ICAgIHJ0ZV9mbG93X2FjdGlvbl9zcGVjX2xpc3Rf Z3JvdXANCj4gICAgcnRlX2Zsb3dfYWN0aW9uX3NwZWNfaW5mb19nZXQNCj4gICAgcnRlX2Zsb3df YWN0aW9uX3NwZWNfaW5mb19nZXRfYnlfbmFtZQ0KPiAgICBydGVfZmxvd19hY3Rpb25fc3BlY19m aWVsZF9pbmZvX2dldF9ieV9uYW1lDQo+IA0KDQpXaGF0IGlzIHRoZSBpZGVhIHRvIHF1ZXJ5IHRo ZSB0YWJsZXM/IElzbid0IHRoZSBpZGVhIHRoYXQNCmFwcGxpY2F0aW9uIHdpbGwgY3JlYXRlIHRo ZW0/DQoNCj4gMi4gS2V5IC8gQWN0aW9uIE9iamVjdCBNYW5hZ2VtZW50IEFQSToNCj4gDQo+ICAg IENyZWF0ZSwgZGVzdHJveSwgYW5kIGNsb25lIGtleSBhbmQgYWN0aW9uIG9iamVjdHMuDQo+IA0K PiAgICBydGVfZmxvd190YWJsZV9rZXlfY3JlYXRlDQoNClRoaXMgY3JlYXRlcyBhIG5ldyB0YWJs ZT8NCj4gICAgcnRlX2Zsb3dfdGFibGVfa2V5X2Rlc3Ryb3kNCj4gICAgcnRlX2Zsb3dfdGFibGVf a2V5X2Nsb25lDQo+ICAgIHJ0ZV9mbG93X3RhYmxlX2tleV9maWVsZF9zZXQNCj4gICAgcnRlX2Zs b3dfdGFibGVfa2V5X2ZpZWxkX3NldF9ieV9uYW1lDQo+ICAgIHJ0ZV9mbG93X3RhYmxlX2tleV9m aWVsZF9zZXRfd2l0aF9tYXNrDQo+ICAgIHJ0ZV9mbG93X3RhYmxlX2tleV9maWVsZF9zZXRfd2l0 aF9tYXNrX2J5X25hbWUNCj4gICAgcnRlX2Zsb3dfdGFibGVfa2V5X2ZpZWxkX3NldF93aXRoX3Jh bmdlDQo+ICAgIHJ0ZV9mbG93X3RhYmxlX2tleV9maWVsZF9zZXRfd2l0aF9yYW5nZV9ieV9uYW1l DQo+ICAgIHJ0ZV9mbG93X3RhYmxlX2tleV9maWVsZF9zZXRfd2l0aF9wcmVmaXhfDQo+ICAgIHJ0 ZV9mbG93X3RhYmxlX2tleV9maWVsZF9zZXRfd2l0aF9wcmVmaXhfYnlfbmFtZQ0KPiANCg0KV2h5 IGRvIHdlIG5lZWQgc28gbWFueSBmdW5jdGlvbnM/IFdlIGNhbiBjcmVhdGUgYSB0YWJsZSB3aXRo IHRoZSBrZXlzPw0KSSBhc3N1bWUgdGhhdCBrZXlzIGFyZSB0aGUgbWF0Y2hpbmcgdmFsdWVzIHJp Z2h0Pw0KDQo+ICAgIHJ0ZV9mbG93X3RhYmxlX2FjdGlvbl9jcmVhdGUNCg0KVGhpcyBjcmVhdGVz IGEgc2luZ2xlIGFjdGlvbiBpbiBzZWxlY3RlZCB0YWJsZT8NCg0KPiAgICBydGVfZmxvd190YWJs ZV9hY3Rpb25fZGVzdHJveQ0KPiAgICBydGVfZmxvd190YWJsZV9hY3Rpb25fY2xvbmUNCj4gICAg cnRlX2Zsb3dfdGFibGVfYWN0aW9uX2ZpZWxkX2dldA0KPiAgICBydGVfZmxvd190YWJsZV9hY3Rp b25fZmllbGRfc2V0DQo+ICAgIHJ0ZV9mbG93X3RhYmxlX2FjdGlvbl9maWVsZF9zZXRfYnlfbmFt ZQ0KPiANCg0KQWdhaW4gSSBkb24ndCB1bmRlcnN0YW5kIHdoeSBzbyBtYW55IGZ1bmN0aW9ucy4N Cg0KPiAzLiBUYWJsZSBFbnRyeSBVcGRhdGUgU3luY2hyb25pemVkIEFQSXM6DQo+IA0KPiAgICBF bmFibGUgc3luY2hyb25pemVkIHRhYmxlIHVwZGF0ZXMsIGVuc3VyaW5nIHRoZSB1cGRhdGVzIGFy ZQ0KPiAgICBydW4tdG8tY29tcGxldGlvbi4NCj4gDQo+ICAgIHJ0ZV9mbG93X3RhYmxlX2VudHJ5 X2FkZA0KPiAgICBydGVfZmxvd190YWJsZV9lbnRyeV9xdWVyeQ0KPiAgICBydGVfZmxvd190YWJs ZV9lbnRyeV9kZWwNCj4gICAgcnRlX2Zsb3dfdGFibGVfZW50cnlfY291bnRfcXVlcnkNCj4gICAg cnRlX2Zsb3dfdGFibGVfZGVmYXVsdF9hY3Rpb25fc2V0DQo+ICAgIHJ0ZV9mbG93X3RhYmxlX2Rl ZmF1bHRfYWN0aW9uX2NhbmNlbA0KPiANCj4gNC4gVGFibGUgRW50cnkgVXBkYXRlIEFzeW5jaHJv bml6ZWQgQVBJcw0KPiANCj4gICAgUHJvdmlkZSBhc3luY2hyb25vdXMgdGFibGUgdXBkYXRlIG1v ZGUgdXNpbmcgYQ0KPiAgICBwcmVwYXJlL2NvbW1pdC9wdWxsIHBhdHRlcm4uDQo+IA0KPiAgICBy dGVfZmxvd190YWJsZV9lbnRyeV9hZGRfcHJlcGFyZQ0KPiAgICBydGVfZmxvd190YWJsZV9lbnRy eV9kZWxfcHJlcGFyZQ0KPiAgICBydGVfZmxvd190YWJsZV91cGRhdGVfc3RhdHVzX2NvbW1pdA0K PiAgICBydGVfZmxvd190YWJsZV91cGRhdGVfc3RhdHVzX3B1bGwNCj4gDQpJbiBnZW5lcmFsIEkg dGhpbmsgYXN5bmMgZnVuY3Rpb24gc2hvdWxkIGhhdmUgdGhlIHdvcmQgYXN5bmMNCg0KPiA1LiBE UERLIHRvIFBOQSBJbnRlcnByZXRhdGlvbiBBUElzDQo+IA0KPiAgICBGYWNpbGl0YXRlIEFQSXMg dGhhdCBtYXAgdGhlIERQREsgY29udGV4dCB0byB0aGUgUDQgUG9ydGFibGUNCj4gICAgTklDIEFy Y2hpdGVjdHVyZSAoUE5BKSBjb250ZXh0LCBlbmFibGluZyBpbnRlcm9wZXJhYmlsaXR5IGJldHdl ZW4NCj4gICAgRFBESyBhbmQgUE5BIGFwcGxpY2F0aW9ucw0KPiANCg0KVGhpcyBBUEkgaXMgZm9y IHJlZ2lzdGVyaW5nIHF1ZXVlcyBpbiBEUERLIHdoaWNoIGNhbiBiZSB1c2VkDQpieSBub24gRFBE SyBhcHBsaWNhdGlvbj8NCg0KPiAgICBydGVfZmxvd19wbmFfcG9ydF9nZXQNCj4gICAgcnRlX2Zs b3dfcG5hX3J4X3F1ZXVlX2dldA0KPiAgICBydGVfZmxvd19wbmFfdHhfcXVldWVfZ2V0DQo+IA0K PiBGb2xsb3cgdGhlIGV4YW1wbGUgaW4gUHJvYmxlbSBTdGF0ZW1lbnQgWzFdLCB0byBjcmVhdGUg YSBydWxlIGZvcg0KPiB0YWJsZSBkZWNhcF92eGxhbl90Y3BfdGFibGUgd2l0aCBhY3Rpb24gZGVj YXBfdnhsYW5fZndkLCB3ZSBjYW4NCj4gdXNlIHRoZSBmb2xsb3dpbmcgY29kZS4NCj4gDQo+IENv ZGUgU25pcHBldDoNCj4gDQo+IC8qIEdldCB0aGUgdGFibGUgaW5mbyAqLw0KPiBzdHJ1Y3QgcnRl X2Zsb3dfdGFibGVfaW5mbyB0YmxfaW5mbzsNCj4gcnRlX2Zsb3dfdGFibGVfaW5mb19nZXRfYnlf bmFtZShwb3J0X2lkLCAiZGVjYXBfdnhsYW5fdGNwX3RhYmxlIiwNCj4gJnRibF9pbmZvKTsNCj4g DQo+IC8qIENyZWF0ZSB0aGUga2V5ICovDQo+IHN0cnVjdCBydGVfZmxvd190YWJsZV9rZXkgKmtl eTsNCj4gcnRlX2Zsb3dfdGFibGVfa2V5X2NyZWF0ZShwb3J0X2lkLCB0YmxfaW5mby0+aWQsICZr ZXkpOw0KPiANCj4gLyogU2V0IHRoZSBrZXkgZmllbGRzICovDQo+IHJ0ZV9mbG93X3RhYmxlX2tl eV9maWVsZF9zZXRfYnlfbmFtZShwb3J0X2lkLCBrZXksICJ3aXJlX3BvcnQiLA0KPiAmd2lyZV9w b3J0LCAyKTsNCg0KVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHBlciBlYWNoIGVudGVy eSByaWdodD8NClRoZSB2YWx1ZXMgc2hvdWxkIGFycml2ZSBmcm9tIGdSUEMgcmlnaHQ/DQoNCj4g cnRlX2Zsb3dfdGFibGVfa2V5X2ZpZWxkX3NldF9ieV9uYW1lKHBvcnRfaWQsIGtleSwgInR1bl9p cF9zcmMiLA0KPiAmdHVuX2lwX3NyYywgNCk7DQo+IHJ0ZV9mbG93X3RhYmxlX2tleV9maWVsZF9z ZXRfYnlfbmFtZShwb3J0X2lkLCBrZXksICJ0dW5faXBfZHN0IiwNCj4gJnR1bl9pcF9kc3QsIDQp Ow0KPiBydGVfZmxvd190YWJsZV9rZXlfZmllbGRfc2V0X2J5X25hbWUocG9ydF9pZCwga2V5LCAi dm5pIiwgJnZuaSwgMyk7DQo+IHJ0ZV9mbG93X3RhYmxlX2tleV9maWVsZF9zZXRfYnlfbmFtZShw b3J0X2lkLCBrZXksICJpcHY0X3NyYyIsICZpcHY0X3NyYywNCj4gNCk7DQo+IHJ0ZV9mbG93X3Rh YmxlX2tleV9maWVsZF9zZXRfYnlfbmFtZShwb3J0X2lkLCBrZXksICJpcHY0X2RzdCIsICZpcHY0 X2RzdCwNCj4gNCk7DQo+IHJ0ZV9mbG93X3RhYmxlX2tleV9maWVsZF9zZXRfYnlfbmFtZShwb3J0 X2lkLCBrZXksICJzcmNfcG9ydCIsICZzcmNfcG9ydCwNCj4gMik7DQo+IHJ0ZV9mbG93X3RhYmxl X2tleV9maWVsZF9zZXRfYnlfbmFtZShwb3J0X2lkLCBrZXksICJkc3RfcG9ydCIsICZkc3RfcG9y dCwNCj4gMik7DQo+IA0KPiAvKiBHZXQgdGhlIGFjdGlvbiBzcGVjIGluZm8gKi8NCj4gc3RydWN0 IHJ0ZV9mbG93X2FjdGlvbl9zcGVjX2luZm8gYXNfaW5mbzsNCj4gcnRlX2Zsb3dfYWN0aW9uX3Nw ZWNfaW5mb19nZXRfYnlfbmFtZShwb3J0X2lkLCAiZGVjYXBfdnhsYW5fZndkIiwNCj4gJmFzX2lu Zm8pOw0KPiANCldoZXJlIGFyZSB3ZSBnZXR0aW5nIHRoZSBhY3Rpb24gZnJvbSBpcyB0aGlzIHRo ZSByZXN1bHQgb2YgdGhlIGNvbXBsaWVyPw0KDQo+IC8qIENyZWF0ZSB0aGUgYWN0aW9uICovDQo+ IHN0cnVjdCBydGVfZmxvd190YWJsZV9hY3Rpb24gKmFjdGlvbjsNCj4gcnRlX2Zsb3dfdGFibGVf YWN0aW9uX2NyZWF0ZShwb3J0X2lkLCBhc19pbmZvLT5pZCwgJmFjdGlvbik7DQo+IA0KPiAvKiBT ZXQgdGhlIGFjdGlvbiBmaWVsZHMgKi8NCj4gcnRlX2Zsb3dfdGFibGVfYWN0aW9uX2ZpZWxkX3Nl dF9ieV9uYW1lKHBvcnRfaWQsIGFjdGlvbiwgIm1vZF9pZCIsDQo+ICZtb2RfaWQsIDMpOw0KPiBy dGVfZmxvd190YWJsZV9hY3Rpb25fZmllbGRfc2V0X2J5X25hbWUocG9ydF9pZCwgYWN0aW9uLCAi cG9ydF9pZCIsDQo+ICZ0YXJnZXRfcG9ydF9pZCwgMik7DQo+IA0KPiAvKiBBZGQgdGhlIGVudHJ5 ICovDQo+IHJ0ZV9mbG93X3RhYmxlX2VudHJ5X2FkZChwb3J0X2lkLCB0YmxfaW5mby0+aWQsIGtl eSwgYWN0aW9uKTsNCj4gDQo+IC8qIGRlc3Ryb3kga2V5IGFuZCBhY3Rpb24gKi8NCj4gcnRlX2Zs b3dfdGFibGVfYWN0aW9uX2Rlc3Ryb3kocG9ydF9pZCwgYWN0aW9uKTsNCj4gcnRlX2Zsb3dfdGFi bGVfa2V5X2Rlc3Ryb3kocG9ydF9pZCwga2V5KTsNCj4gDQo+IC4uLg0KPiANCj4gQmVsb3cgY29k ZSBkZW1vbnN0cmF0ZXMgaG93IHRvIHVzZSB0aGUgcHJlcGFyZS9jb21taXQvcHVsbCBmb3INCj4g aGlnaCBwZXJmb3JtYW5jZSB0YWJsZSBlbnRyeSB1cGRhdGVzLg0KPiANCj4gQ29kZSBTbmlwcGVk Og0KPiANCj4gc3RydWN0IHJ0ZV9mbG93X3RhYmxlX2tleSAqa2V5c1tCQVRDSF9TSVpFXTsNCj4g c3RydWN0IHJ0ZV9mbG93X3RhYmxlX2FjdGlvbiAqYWN0aW9uc1tCQVRDSF9TSVpFXTsNCj4gc3Ry dWN0IHJ0ZV9mbG93X3RhYmxlX3VwZGF0ZV9zdGF0dXMgc3RhdHNbQkFUQ0hfU0laRV07DQo+IA0K PiAvKiBDcmVhdGUgS2V5cyBhbmQgQWN0aW9ucyAqLw0KPiBmb3IgKGkgPSAwOyBpIDwgQkFUQ0hf U0laRTsgaSsrKSB7DQo+ICAgICBydGVfZmxvd190YWJsZV9rZXlfY3JlYXRlKHBvcnRfaWQsIHRh YmxlX2lkLCAma2V5c1tpXSk7DQoNClRoaXMgaXMgdGhlIGNvbmZpZ3VyYXRpb24gc3RhZ2Ugcmln aHQ/DQoNCj4gICAgIC8qIHNldCBrZXkgZmllbGQgKi8NCj4gICAgIHJ0ZV9mbG93X3RhYmxlX2tl eV9maWVsZF9zZXQoLi4uKQ0KPiANCj4gICAgIHJ0ZV9mbG93X3RhYmxlX2FjdGlvbl9jcmVhdGUo cG9ydF9pZCwgdGFibGVfaWQsIHNwZWNfaWQsICZhY3Rpb25zW2ldKTsNCj4gICAgIC8qIHNldCBh Y3Rpb24gZmllbGQgKi8NCj4gICAgIHJ0ZV9mbG93X3RhYmxlX2FjdGlvbl9maWVsZF9zZXQoLi4u KQ0KPiB9DQo+IA0KPiAvKiBwcm9ncmFtIGxvb3AgKi8NCj4gV2hpbGUgKGNvbmRpdGlvbiA9IHRy dWUpIHsNCj4gDQo+ICAgICAvKiBQcmVwYXJlIGVudHJ5IGFkZGluZyAqLw0KPiAgICAgZm9yIChp ID0gMDsgaSA8IEJBVENIX1NJWkU7IGkrKykgew0KPiAgICAgICAgIHN0cnVjdCBydGVfZmxvd190 YWJsZV9rZXkgKmtleSA9IGtleXNbaV07DQo+ICAgICAgICAgc3RydWN0IHJ0ZV9mbG93X3RhYmxl X2FjdGlvbiAqYWN0aW9uID0gYWN0aW9uc1tpXTsNCj4gDQo+ICAgICAgICAgcnRlX2Zsb3dfdGFi bGVfZW50cnlfYWRkX3ByZXBhcmUocG9ydF9pZCwgVEFCTEVfSUQsIGtleSwgYWN0aW9uKTsNCg0K Rm9yIGVhY2ggY2FsbCB5b3UgYWRkIGNvbXBsZXRlIHJ1bGUgb3IganVzdCBvbmUgbWF0Y2hpbmcg YW5kIG9uZSBhY3Rpb24/DQpXaHkgbm90IGdpdmUgYSBsaXN0IG9mIGFjdGlvbnMgYW5kIGtleXMg dG8gYXZvaWQgZXh0cmEgZnVuY3Rpb24gY2FsbHM/DQoNCj4gICAgIH0NCj4gDQo+ICAgICAvKiBD b21taXQgdG8gaGFyZHdhcmUgKi8NCj4gICAgIHJ0ZV9mbG93X3RhYmxlX3VwZGF0ZV9jb21taXQo cG9ydF9pZCk7DQo+IA0KPiAgICAgLyogcHVsbCBzdGF0dXMgKi8NCj4gICAgIGludCBjb3VudCA9 IDA7DQo+ICAgICB3aGlsZSAoY291bnQgPCBCQVRDSF9TSVpFKSB7DQo+ICAgICAgICAgY291bnQg Kz0gcnRlX2Zsb3dfdGFibGVfdXBkYXRlX3N0YXR1c19wdWxsKHBvcnRfaWQsIHN0YXRzLA0KPiBC QVRDSF9TSVpFLCBOVUxMKTsNCj4gICAgIH0NCj4gDQo+ICAgICAvKiByZXVzZWQgS2V5IGFuZCBB Y3Rpb24gb2JqZWN0ICovDQo+ICAgICBmb3IgKGkgPSAwOyBpPCBCQVRDSF9TSVpFOyBpKyspIHsN Cj4gICAgICAgICAgICAgc3RydWN0IHJ0ZV9mbG93X3RhYmxlX2tleSAqa2V5ID0gc3RhdHNbaV0u a2V5Ow0KPiAgICAgICAgICAgICBzdHJ1Y3QgcnRlX2Zsb3dfdGFibGVfYWN0aW9uICphY3Rpb24g PSBzdGF0c1tpXS5hY3Rpb247DQo+IA0KPiAgICAgICAgICAgICBydGVfZmxvd190YWJsZV9rZXlf ZmllbGRfc2V0KC4uLik7DQo+ICAgICAgICAgICAgIHJ0ZV9mbG93X3RhYmxlX2FjdGlvbl9maWVs ZF9zZXQoLi4uKQ0KPiAgICAgfQ0KPiB9DQo+IA0KPiAuLi4NCj4gDQo+IE5PVEU6IEZvciBzaW1w bGljaXR5LCBlcnJvciBjaGVjayBhbmQgdGhlIHJ0ZV9mbG93X2Vycm9yDQo+IHBhcmFtZXRlciBm b3IgZWFjaCBBUEkgaGFzIGJlZW4gb21pdHRlZDoNCj4gDQo+IFsxXS4gaHR0cDovL21haWxzLmRw ZGsub3JnL2FyY2hpdmVzL2Rldi8yMDIzLU1heS8yNjc3MTkuaHRtbA0KPiBbMl0uIGh0dHBzOi8v Z2l0aHViLmNvbS9wNGxhbmcvdGRpLw0KPiBbM10uIGh0dHBzOi8vcDQub3JnL3A0LXNwZWMvcDRy dW50aW1lL21haW4vUDRSdW50aW1lLVNwZWMuaHRtbA0KPiANCj4gU2lnbmVkLW9mZi1ieTogUWkg WmhhbmcgPHFpLnouemhhbmdAaW50ZWwuY29tPg0KPiAtLS0NCj4gIGxpYi9ldGhkZXYvcnRlX2Zs b3dfdGFibGUuaCB8IDEyNjENCj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysN Cj4gIDEgZmlsZSBjaGFuZ2VkLCAxMjYxIGluc2VydGlvbnMoKykNCj4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBsaWIvZXRoZGV2L3J0ZV9mbG93X3RhYmxlLmgNCj4gDQo+IGRpZmYgLS1naXQgYS9saWIv ZXRoZGV2L3J0ZV9mbG93X3RhYmxlLmggYi9saWIvZXRoZGV2L3J0ZV9mbG93X3RhYmxlLmgNCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMC4uMzFlZGY1N2EwZg0KPiAt LS0gL2Rldi9udWxsDQo+ICsrKyBiL2xpYi9ldGhkZXYvcnRlX2Zsb3dfdGFibGUuaA0KPiBAQCAt MCwwICsxLDEyNjEgQEANCj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1 c2UNCj4gKyAqIENvcHlyaWdodCAyMDIzIEludGVsIENvcnBvcmF0aW9uLg0KPiArICovDQo+ICsN Cj4gKyNpZm5kZWYgUlRFX0ZMT1dfVEFCTEVfSF8NCj4gKyNkZWZpbmUgUlRFX0ZMT1dfVEFCTEVf SF8NCj4gKw0KPiArI2luY2x1ZGUgPHN0ZGludC5oPg0KPiArI2luY2x1ZGUgPHN0ZGJvb2wuaD4N Cj4gKw0KPiArLyoqDQo+ICsgKiBNYXggbnVtYmVyIG9mIGtleSBmaWVsZCBpbiBhIHRhYmxlLg0K PiArICovDQo+ICsjZGVmaW5lIFJURV9GTE9XX1RBQkxFX0tFWV9GSUVMRF9OVU1fTUFYCTI1Ng0K PiArLyoqDQo+ICsgKiBNYXggbnVtYmVyIG9mIGFjdGlvbiBzcGVjIGluIGEgdGFibGUuDQo+ICsg Ki8NCj4gKyNkZWZpbmUgUlRFX0ZMT1dfVEFCTEVfQUNUSU9OX1NQRUNfTlVNX01BWAk2NA0KPiAr LyoqDQo+ICsgKiBNYXggbnVtYmVyIG9mIGZpZWxkIGluIGFuIGFjdGlvbiBzcGVjLg0KPiArICov DQo+ICsjZGVmaW5lIFJURV9GTE9XX0FDVElPTl9TUEVDX0ZJRUxEX05VTV9NQVgJMTYNCj4gKw0K PiArLyoqDQo+ICsgKiBAd2FybmluZw0KPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBt YXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlLg0KPiArICoNCj4gKyAqIFRhYmxlIGtleSBt YXRjaCB0eXBlLg0KPiArICoNCj4gKyAqIFRvIHNwZWNpZnkgdGhlIGtleSBtYXRjaCB0eXBlIG9m IGEgdGFibGUuDQo+ICsgKi8NCj4gK2VudW0gcnRlX2Zsb3dfdGFibGVfa2V5X21hdGNoX3R5cGUg ew0KPiArCVJURV9GTE9XX1RBQkxFX0tFWV9NQVRDSF9UWVBFX0VYQUNULCAvKio8IEV4YWN0IG1h dGNoLiAqLw0KPiArCVJURV9GTE9XX1RBQkxFX0tFWV9NQVRDSF9UWVBFX1dJTERDQVJELCAvKio8 IFdpbGRjYXJkDQo+IG1hdGNoLiAqLw0KPiArCVJURV9GTE9XX1RBQkxFX0tFWV9NQVRDSF9UWVBF X1JBTkdFLCAvKio8IFJhbmdlIG1hdGNoLiAqLw0KPiArCVJURV9GTE9XX1RBQkxFX0tFWV9NQVRD SF9UWVBFX0xQTSwgLyoqPCBsb25nZXN0IHByZWZpeA0KPiBtYXRjaC4gKi8NCj4gK307DQo+ICsN Cj4gKy8qKg0KPiArICogQHdhcm5pbmcNCj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkg bWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZS4NCj4gKyAqDQo+ICsgKiBCeXRlIG9yZGVy Lg0KPiArICoNCj4gKyAqIFRvIHNwZWNpZnkgdGhlIGJ5dGUgb3JkZXIgb2YgdGFibGUga2V5IC8g YWN0aW9uIGZpZWxkIHZhbHVlIGluIGJ5dGVzLg0KPiArICovDQo+ICtlbnVtIHJ0ZV9mbG93X2J5 dGVfb3JkZXIgew0KPiArCVJURV9GTE9XX0JZVEVfT1JERVJfSE9TVCwgLyoqPCBmb2xsb3cgaG9z dCBieXRlIG9yZGVyLiAqLw0KPiArCVJURV9GTE9XX0JZVEVfT1JERVJfTkVUV09SSywgLyoqPCBm b2xsb3cgbmV0d29yayBieXRlDQo+IG9yZGVyLiAqLw0KPiArfTsNCj4gKw0KPiArLyoqDQo+ICsg KiBAd2FybmluZw0KPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdp dGhvdXQgcHJpb3Igbm90aWNlLg0KPiArICoNCj4gKyAqIEZsb3cgcnVsZSB0YWJsZSBpbmZvLg0K PiArICoNCj4gKyAqIEEgc3RydWN0dXJlIHN0b3JlcyB0aGUgcHJvcGVydGllcyBvZiBhIGZsb3cg cnVsZSB0YWJsZS4NCj4gKyAqIFR5cGljYWxseSwgYSBmbG93IHJ1bGUgdGFibGUgcmVwcmVzZW50 cyB0byBhIFA0IHRhYmxlIHdoaWNoIGRlc2NyaWJlIGENCj4gKyAqIG1hdGNoL2FjdGlvbiB1bml0 IGluIHBhY2tldCBwcm9jZXNzIHBpcGVsaW5lLg0KPiArICovDQo+ICtzdHJ1Y3QgcnRlX2Zsb3df dGFibGVfaW5mbyB7DQo+ICsJdWludDMyX3QgaWQ7IC8qKjwgSWRlbnRpZmllciBvZiBhIHRhYmxl IHdpdGhpbiB0aGUgZXRoZGV2LiAqLw0KPiArCWNvbnN0IGNoYXIgKm5hbWU7IC8qKjwgTmFtZSBv ZiB0aGUgdGFibGUuICovDQo+ICsJY29uc3QgY2hhciAqYW5ub3RhdGlvbjsgLyoqPCBIdW1hbiBy ZWFkYWJsZSBtZXNzYWdlIGFib3V0IHRoaXMNCj4gdGFibGUuICovDQo+ICsJdWludDE2X3Qga2V5 X2ZpZWxkX251bTsgLyoqPCBOdW1iZXIgb2Yga2V5IGZpZWxkLiAqLw0KPiArCXVpbnQzMl90IGtl eV9maWVsZHNbUlRFX0ZMT1dfVEFCTEVfS0VZX0ZJRUxEX05VTV9NQVhdOyAvKio8DQo+IEtleSBm aWVsZCBpZCBhcnJheS4gKi8NCj4gKwl1aW50MTZfdCBhY3Rpb25fc3BlY19udW07IC8qKjwgTnVt YmVyIG9mIGFjdGlvbiBzcGVjLiAqLw0KPiArCXVpbnQzMl90DQo+IGFjdGlvbl9zcGVjc1tSVEVf RkxPV19UQUJMRV9BQ1RJT05fU1BFQ19OVU1fTUFYXTsgLyoqPCBBY3Rpb24NCj4gc3BlYyBpZCBh cnJheSAqLw0KPiArfTsNCj4gKw0KDQpXaHkgZG8gd2UgbmVlZCB0aGlzIGluZm8/DQoNCj4gKy8q Kg0KPiArICogQHdhcm5pbmcNCj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNo YW5nZSB3aXRob3V0IHByaW9yIG5vdGljZS4NCj4gKyAqDQo+ICsgKiBUYWJsZSBrZXkgZmllbGQg aW5mby4NCj4gKyAqDQo+ICsgKiBBIHN0cnVjdHVyZSBzdG9yZXMgdGhlIHByb3BlcnRpZXMgb2Yg YSB0YWJsZSBrZXkgZmllbGQuDQo+ICsgKi8NCj4gK3N0cnVjdCBydGVfZmxvd190YWJsZV9rZXlf ZmllbGRfaW5mbyB7DQo+ICsJdWludDMyX3QgdGFibGVfaWQ7IC8qKjwgSWRlbnRpZmllciBvZiBh IHRhYmxlIHdpdGhpbiB0aGUgZXRoZGV2LiAqLw0KPiArCXVpbnQzMl90IGZpZWxkX2lkOyAvKio8 IElkZW50aWZpZXIgb2YgdGhlIGtleSBmaWVsZCB3aXRoaW4gdGhlIHRhYmxlLiAqLw0KPiArCWNv bnN0IGNoYXIgKm5hbWU7ICAvKio8IE5hbWUgb2YgdGhlIGtleSBmaWVsZC4gKi8NCj4gKwljb25z dCBjaGFyICphbm5vdGF0aW9uOyAvKio8IEh1bWFuIHJlYWRhYmxlIG1lc3NhZ2UgYWJvdXQgdGhp cw0KPiBrZXkgZmllbGQuICovDQo+ICsJZW51bSBydGVfZmxvd190YWJsZV9rZXlfbWF0Y2hfdHlw ZSBtYXRjaF90eXBlOyAvKio8IEtleSBtYXRjaA0KPiB0eXBlLiAqLw0KPiArCXVpbnQxNl90IGJp dF93aWR0aDsgLyoqPCBCaXQgd2lkdGggb2YgdGhlIGZpZWxkIHZhbHVlLiAqLw0KPiArCXVpbnQx Nl90IGJ5dGVfd2lkdGg7IC8qKjwgTnVtYmVyIG9mIGJ5dGVzIHRvIHN0b3JlIHRoZSBmaWVsZCB2 YWx1ZS4NCj4gKi8NCj4gKwkvKioNCj4gKwkgKiBCeXRlIG9yZGVyIG9mIHRoZSBieXRlIGFycmF5 IHRoYXQgc3RvcmUgdGhlIGtleSB2YWx1ZS4NCj4gKwkgKi8NCj4gKwllbnVtIHJ0ZV9mbG93X2J5 dGVfb3JkZXIgYnl0ZV9vcmRlcjsNCj4gK307DQo+ICsNCg0KTGlrZSBhYm92ZSB3aHkgaXMgaXQg bmVlZGVkPw0KDQo+ICsvKioNCj4gKyAqIEB3YXJuaW5nDQo+ICsgKiBAYiBFWFBFUklNRU5UQUw6 IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UuDQo+ICsgKg0KPiArICog QWN0aW9uIHNwZWMgaW5mby4NCj4gKyAqDQo+ICsgKiBBIHN0cnVjdHVyZSBzdG9yZXMgdGhlIHBy b3BlcnRpZXMgb2YgYSBhY3Rpb24gc3BlY2lmaWNhdGlvbi4NCj4gKyAqIFR5cGljYWxseSwgYSBh Y3Rpb24gc3BlY2lmaWNhdGlvbiByZXByZXNlbnRzIGEgUDQgQWN0aW9uLg0KPiArICovDQo+ICtz dHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX3NwZWNfaW5mbyB7DQo+ICsJdWludDMyX3QgaWQ7IC8qKjwg SWRlbnRpZmllciBvZiBhIGFjdGlvbiBzcGVjIHdpdGhpbiB0aGUgZXRoZGV2LiAqLw0KPiArCWNv bnN0IGNoYXIgKm5hbWU7IC8qKjwgTmFtZSBvZiB0aGUgYWN0aW9uIHNwZWMuICovDQo+ICsJY29u c3QgY2hhciAqYW5ub3RhdGlvbjsgLyoqPCBIdW1hbiByZWFkYWJsZSBtZXNzYWdlIGFib3V0IHRo aXMNCj4gYWN0aW9uIHNwZWMgKi8NCj4gKwl1aW50MTZfdCBmaWVsZF9udW07IC8qKjwgTnVtYmVy IG9mIGZpZWxkcyAqLw0KPiArCXVpbnQzMl90IGZpZWxkc1tSVEVfRkxPV19BQ1RJT05fU1BFQ19G SUVMRF9OVU1fTUFYXTsgLyoqPA0KPiBGaWVsZCBpZCBhcnJheSAqLw0KPiArfTsNCj4gKw0KPiAr LyoqDQo+ICsgKiBAd2FybmluZw0KPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkg Y2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlLg0KPiArICoNCj4gKyAqIEFjdGlvbiBzcGVjIGZp ZWxkIGluZm8uDQo+ICsgKg0KPiArICogQSBzdHJ1Y3R1cmUgc3RvcmVzIHRoZSBwcm9wZXJ0aWVz IG9mIGEgYWN0aW9uIHNwZWMgZmllbGQuDQo+ICsgKi8NCj4gK3N0cnVjdCBydGVfZmxvd19hY3Rp b25fc3BlY19maWVsZF9pbmZvIHsNCj4gKwl1aW50MzJfdCBzcGVjX2lkOyAvKio8IElkZW50aWZp ZXIgb2YgYSBhY3Rpb24gc3BlYyB3aXRoaW4gdGhlIGV0aGRldi4NCj4gKi8NCj4gKwl1aW50MzJf dCBmaWVsZF9pZDsgLyoqPCBJZGVudGlmaWVyIG9mIHRoZSBmaWVsZCB3aXRoaW4gdGhlIGFjdGlv biBzcGVjLg0KPiAqLw0KPiArCWNvbnN0IGNoYXIgKm5hbWU7IC8qKjwgTmFtZSBvZiB0aGUgZmll bGQuICovDQo+ICsJY29uc3QgY2hhciAqYW5ub3RhdGlvbjsgLyoqPCBIdW1hbiByZWFkYWJsZSBt ZXNzYWdlIGFib3V0IHRoaXMNCj4gYWN0aW9uIHNwZWMuICovDQo+ICsJdWludDE2X3QgYml0X3dp ZHRoOyAvKio8IEJpdCB3aWR0aCBvZiB0aGUgZmllbGQgdmFsdWUgKi8NCj4gKwl1aW50MTZfdCBi eXRlX3dpZHRoOyAvKio8IE51bWJlciBvZiBieXRlcyB0byBzdG9yZSB0aGUgZmllbGQgdmFsdWUu DQo+ICovDQo+ICsJLyoqDQo+ICsJICogQnl0ZSBvcmRlciBvZiB0aGUgYnl0ZSBhcnJheSB0aGF0 IHN0b3JlcyB0aGUga2V5IHZhbHVlLg0KPiArCSAqLw0KPiArCWVudW0gcnRlX2Zsb3dfYnl0ZV9v cmRlciBieXRlX29yZGVyOw0KPiArfTsNCj4gKw0KPiArLyoqDQo+ICsgKiBAd2FybmluZw0KPiAr ICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90 aWNlLg0KPiArICoNCj4gKyAqIFRhYmxlIEtleSBvYmplY3QuDQo+ICsgKg0KPiArICogQSBzdHJ1 Y3R1cmUgcmVwcmVzZW50IGEgdGFibGUga2V5IG9iamVjdCwgc2hvdWxkIGJlIGNyZWF0ZWQgLyBk ZXN0cm95ZWQNCj4gYnkNCj4gKyAqIHJ0ZV9mbG93X3RhYmxlX2tleV9jcmVhdGUgYW5kIHJ0ZV9m bG93X3RhYmxlX2tleV9kZXN0cm95Lg0KPiArICovDQo+ICtzdHJ1Y3QgcnRlX2Zsb3dfdGFibGVf a2V5IHsNCj4gKwl1aW50MzJfdCB0YWJsZV9pZDsgLyoqPCBJbmRpY2F0ZSB3aGljaCB0YWJsZSB0 aGUga2V5IGluc3RhbmNlIGJlbG9uZ3MNCj4gdG8uICovDQo+ICsJaW50IHJlZl9jbnQ7IC8qKjwg UmVmZXJlbmNlIGNvdW50LCBpbiBhc3luYyBvcHMgaXQgcHJldmVudHMgdGhlIG9iamVjdA0KPiBi ZSBkZXN0b3JpZWQgLiovDQo+ICsJdWludDhfdCBkYXRhW107IC8qKjwgUE1EIHNwZWNpZmljIGRh dGEuICovDQo+ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAqIEB3YXJuaW5nDQo+ICsgKiBAYiBFWFBF UklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UuDQo+ICsg Kg0KPiArICogQWN0aW9uIG9iamVjdC4NCj4gKyAqDQo+ICsgKiBBIHN0cnVjdHVyZSByZXByZXNl bnQgYSB0YWJsZSBhY3Rpb24gb2JqZWN0LCBzaG91bGQgYmUgY3JlYXRlZCAvDQo+IGRlc3Ryb3ll ZCBieQ0KPiArICogcnRlX2Zsb3dfdGFibGVfYWN0aW9uX2NyZWF0ZSBhbmQgcnRlX2Zsb3dfdGFi bGVfYWN0aW9uX2Rlc3Ryb3kuDQo+ICsgKi8NCj4gK3N0cnVjdCBydGVfZmxvd190YWJsZV9hY3Rp b24gew0KPiArCXVpbnQzMl90IHRhYmxlX2lkOyAvKio8IEluZGljYXRlIHdoaWNoIHRhYmxlIHRo ZSBhY3Rpb24gaW5zdGFuY2UNCj4gYmVsb25ncyB0by4gKi8NCj4gKwl1aW50MzJfdCBzcGVjX2lk OyAvKio8IEluZGljYXRlIHdoaWNoIGFjdGlvbiBzcGVjIHRoZSBhY3Rpb24gZm9sbG93Lg0KPiAq Lw0KPiArCWludCByZWZfY250OyAvKio8IFJlZmVyZW5jZSBjb3VudCwgaW4gYXN5bmMgb3BzIGl0 IHByZXZlbnRzIHRoZSBvYmplY3QNCj4gYmUgZGVzdG9yaWVkIC4qLw0KPiArCXVpbnQ4X3QgZGF0 YVtdOyAvKio8IFBNRCBzcGVjaWZpYyBkYXRhLiAqLw0KPiArfTsNCj4gKw0KPiArLyoqDQo+ICsg KiBAd2FybmluZw0KPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdp dGhvdXQgcHJpb3Igbm90aWNlLg0KPiArICoNCj4gKyAqIElEIGxpc3QuDQo+ICsgKg0KPiArICog QW4gaWQgbGlzdCB3aXRoIHZhcmlhbnQgc2l6ZSwgc2hvdWxkIGJlIGNyZWF0ZWQgYnkNCj4gKyAq IHJ0ZV9mbG93X3RhYmxlX2xpc3RfcG9wdXAgb3IgcnRlX2Zsb3dfYWN0aW9uX3NwZWNfbGlzdF9w b3B1cC4NCj4gKyAqDQo+ICsgKiBBcHBsaWNhdGlvbiBuZWVkIHRvIGZyZWUgdGhlIGxpc3QgYnkg cnRlX2ZyZWUuDQo+ICsgKi8NCj4gK3N0cnVjdCBydGVfZmxvd19pZF9saXN0IHsNCj4gKwl1aW50 MzJfdCBudW07IC8qKjwgTnVtYmVyIG9mIHRoZSBpZCBsaXN0ICovDQo+ICsJdWludDMyX3QgaWRz W107IC8qKjwgSUQgYXJyYXkgKi8NCj4gK307DQo+ICsNCj4gKy8qKg0KPiArICogQHdhcm5pbmcN Cj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9y IG5vdGljZS4NCj4gKyAqDQo+ICsgKiBQb3B1cCB0YWJsZSBpZCBsaXN0Lg0KPiArICoNCj4gKyAq IEEgdmFyaWFudCBzaXplIGxpc3QgdGhhdCBzdG9yZSBhbGwgdGFibGUgaWRlbnRpZmllcnMgd2ls bCBiZSBjcmVhdGVkLg0KPiArICogQXBwbGljYXRpb24gbmVlZCB0byBmcmVlIHRoZSBsaXN0IGJ5 IHJ0ZV9mcmVlLg0KPiArICoNCj4gKyAqIEBwYXJhbVtpbl0gcG9ydF9pZA0KPiArICogICAgUG9y dCBpZGVudGlmaWVyIG9mIHRoZSBFdGhlcm5ldCBkZXZpY2UuDQo+ICsgKiBAcGFyYW1bb3V0XSBs aXN0DQo+ICsgKiAgICBBIHZhcmlhbnQgc2l6ZSBpZCBsaXN0LCBzdG9yZSBhbGwgdGFibGUgaWRl bnRpZmllcnMgb2YgY3VycmVudCBldGhlcm5ldA0KPiArICogICAgZGV2aWNlLg0KPiArICogQHBh cmFtW291dF0gZXJyb3INCj4gKyAqICAgIFBlcmZvcm0gdmVyYm9zZSBlcnJvciByZXBvcnRpbmcg aWYgbm90IE5VTEwuIFBNRHMgaW5pdGlhbGl6ZSB0aGlzDQo+ICsgKiAgICBzdHJ1Y3R1cmUgaW4g Y2FzZSBvZiBlcnJvciBvbmx5Lg0KPiArICoNCj4gKyAqIEByZXR1cm4NCj4gKyAqICAgIDAgb24g c3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZSBvdGhlcndpc2UgYW5kIHJ0ZV9lcnJubyBp cyBzZXQuDQo+ICsgKi8NCj4gK19fcnRlX2V4cGVyaW1lbnRhbCBpbnQNCj4gK3J0ZV9mbG93X3Rh YmxlX2xpc3RfcG9wdXAodWludDE2X3QgcG9ydF9pZCwNCj4gKwkJCSAgc3RydWN0IHJ0ZV9mbG93 X2lkX2xpc3QgKipsaXN0LA0KPiArCQkJICBzdHJ1Y3QgcnRlX2Zsb3dfZXJyb3IgKmVycm9yKTsN Cj4gKw0KPiArLyoqDQo+ICsgKiBAd2FybmluZw0KPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlz IEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlLg0KPiArICoNCj4gKyAqIEdldCB0 YWJsZSBpbmZvIGJ5IGlkZW50aWZpZXIuDQo+ICsgKg0KPiArICogQHBhcmFtW2luXSBwb3J0X2lk DQo+ICsgKiAgICBQb3J0IGlkZW50aWZpZXIgb2YgdGhlIEV0aGVybmV0IGRldmljZS4NCj4gKyAq IEBwYXJhbVtpbl0gdGFibGVfaWQNCj4gKyAqICAgIFRhYmxlIGlkZW50aWZpZXIuDQo+ICsgKiBA cGFyYW1bb3V0XSBpbmZvDQo+ICsgKiAgICBQb2ludGVyIHRvIHN0b3JlIHRoZSB0YWJsZSBpbmZv Lg0KPiArICogQHBhcmFtW291dF0gZXJyb3INCj4gKyAqICAgIFBlcmZvcm0gdmVyYm9zZSBlcnJv ciByZXBvcnRpbmcgaWYgbm90IE5VTEwuIFBNRHMgaW5pdGlhbGl6ZSB0aGlzDQo+ICsgKiAgICBz dHJ1Y3R1cmUgaW4gY2FzZSBvZiBlcnJvciBvbmx5Lg0KPiArICoNCj4gKyAqIEByZXR1cm4NCj4g KyAqICAgIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZSBvdGhlcndpc2UgYW5k IHJ0ZV9lcnJubyBpcyBzZXQuDQo+ICsgKi8NCj4gK19fcnRlX2V4cGVyaW1lbnRhbCBpbnQNCj4g K3J0ZV9mbG93X3RhYmxlX2luZm9fZ2V0KHVpbnQxNl90IHBvcnRfaWQsDQo+ICsJCQl1aW50MzJf dCB0YWJsZV9pZCwNCj4gKwkJCXN0cnVjdCBydGVfZmxvd190YWJsZV9pbmZvICppbmZvLA0KPiAr CQkJc3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJvcik7DQo+ICsNCj4gKy8qKg0KPiArICogQHdh cm5pbmcNCj4gKyogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQg cHJpb3Igbm90aWNlLg0KPiArICoNCj4gKyAqIEdldCB0YWJsZSBpbmZvIGJ5IG5hbWUuDQo+ICsg Kg0KPiArICogQHBhcmFtW2luXSBwb3J0X2lkDQo+ICsgKiAgICBQb3J0IGlkZW50aWZpZXIgb2Yg dGhlIEV0aGVybmV0IGRldmljZS4NCj4gKyAqIEBwYXJhbVtpbl0gbmFtZQ0KPiArICogICAgVGFi bGUgbmFtZS4NCj4gKyAqIEBwYXJhbVtvdXRdIGluZm8NCj4gKyAqICAgIFBvaW50ZXIgdG8gc3Rv cmUgdGhlIHRhYmxlIGluZm8uDQo+ICsgKiBAcGFyYW1bb3V0XSBlcnJvcg0KPiArICogICAgUGVy Zm9ybSB2ZXJib3NlIGVycm9yIHJlcG9ydGluZyBpZiBub3QgTlVMTC4gUE1EcyBpbml0aWFsaXpl IHRoaXMNCj4gKyAqICAgIHN0cnVjdHVyZSBpbiBjYXNlIG9mIGVycm9yIG9ubHkuDQo+ICsgKg0K PiArICogQHJldHVybg0KPiArICogICAgMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIHZh bHVlIG90aGVyd2lzZSBhbmQgcnRlX2Vycm5vIGlzIHNldC4NCj4gKyAqLw0KPiArX19ydGVfZXhw ZXJpbWVudGFsIGludA0KPiArcnRlX2Zsb3dfdGFibGVfaW5mb19nZXRfYnlfbmFtZSh1aW50MTZf dCBwb3J0X2lkLA0KPiArCQkJCWNvbnN0IGNoYXIgKm5hbWUsDQo+ICsJCQkJc3RydWN0IHJ0ZV9m bG93X3RhYmxlX2luZm8gKmluZm8sDQo+ICsJCQkJc3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJv cik7DQo+ICsNCj4gKy8qKg0KPiArICogQHdhcm5pbmcNCj4gKyAqIEBiIEVYUEVSSU1FTlRBTDog dGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZS4NCj4gKyAqDQo+ICsgKiBH ZXQgdGFibGUga2V5IGluZm8gYnkgaWRlbnRpZmllci4NCj4gKyAqDQo+ICsgKiBAcGFyYW1baW5d IHBvcnRfaWQNCj4gKyAqICAgIFBvcnQgaWRlbnRpZmllciBvZiB0aGUgRXRoZXJuZXQgZGV2aWNl Lg0KPiArICogQHBhcmFtW2luXSB0YWJsZV9pZA0KPiArICogICAgVGFibGUgaWRlbnRpZmllci4N Cj4gKyAqIEBwYXJhbVtpbl0gZmllbGRfaWQNCj4gKyAqICAgIEtleSBmaWVsZCBpZGVudGlmaWVy Lg0KPiArICogQHBhcmFtW2luZm9dIGluZm8NCj4gKyAqICAgIFBvaW50ZXIgdG8gc3RvcmUgdGhl IHRhYmxlIGtleSBmaWVsZCBpbmZvLg0KPiArICogQHBhcmFtW291dF0gZXJyb3INCj4gKyAqICAg IFBlcmZvcm0gdmVyYm9zZSBlcnJvciByZXBvcnRpbmcgaWYgbm90IE5VTEwuIFBNRHMgaW5pdGlh bGl6ZSB0aGlzDQo+ICsgKiAgICBzdHJ1Y3R1cmUgaW4gY2FzZSBvZiBlcnJvciBvbmx5Lg0KPiAr ICoNCj4gKyAqIEByZXR1cm4NCj4gKyAqICAgIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJu byB2YWx1ZSBvdGhlcndpc2UgYW5kIHJ0ZV9lcnJubyBpcyBzZXQuDQo+ICsgKi8NCj4gK19fcnRl X2V4cGVyaW1lbnRhbCBpbnQNCj4gK3J0ZV9mbG93X3RhYmxlX2tleV9maWVsZF9pbmZvX2dldCh1 aW50MTZfdCBwb3J0X2lkLA0KPiArCQkJCSAgdWludDMyX3QgdGFibGVfaWQsDQo+ICsJCQkJICB1 aW50MzJfdCBmaWVsZF9pZCwNCj4gKwkJCQkgIHN0cnVjdCBydGVfZmxvd190YWJsZV9rZXlfZmll bGRfaW5mbyAqaW5mbywNCj4gKwkJCQkgIHN0cnVjdCBydGVfZmxvd19lcnJvciAqZXJyb3IpOw0K PiArDQo+ICsvKioNCj4gKyAqIEB3YXJuaW5nDQo+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMg QVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UuDQo+ICsgKg0KPiArICogUG9wdXAg YWN0aW9uIHNwZWMgaWQgbGlzdC4NCj4gKyAqDQo+ICsgKiBBIHZhcmlhbnQgc2l6ZSBsaXN0IHRo YXQgc3RvcmUgYWxsIGFjdGlvbiBzcGVjIGlkZW50aWZpZXJzIHdpbGwgYmUgY3JlYXRlZC4NCj4g KyAqIEFwcGxpY2F0aW9uIG5lZWQgdG8gZnJlZSB0aGUgbGlzdCBieSBydGVfZnJlZS4NCj4gKyAq DQo+ICsgKiBAcGFyYW1baW5dIHBvcnRfaWQNCj4gKyAqICAgIFBvcnQgaWRlbnRpZmllciBvZiB0 aGUgRXRoZXJuZXQgZGV2aWNlLg0KPiArICogQHBhcmFtW291dF0gZXJyb3INCj4gKyAqICAgIFBl cmZvcm0gdmVyYm9zZSBlcnJvciByZXBvcnRpbmcgaWYgbm90IE5VTEwuIFBNRHMgaW5pdGlhbGl6 ZSB0aGlzDQo+ICsgKiAgICBzdHJ1Y3R1cmUgaW4gY2FzZSBvZiBlcnJvciBvbmx5Lg0KPiArICoN Cj4gKyAqIEByZXR1cm4NCj4gKyAqICAgIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyB2 YWx1ZSBvdGhlcndpc2UgYW5kIHJ0ZV9lcnJubyBpcyBzZXQuDQo+ICsgKi8NCj4gK19fcnRlX2V4 cGVyaW1lbnRhbCBpbnQNCj4gK3J0ZV9mbG93X2FjdGlvbl9zcGVjX2xpc3RfcG9wdXAodWludDE2 X3QgcG9ydF9pZCwNCj4gKwkJCQlzdHJ1Y3QgcnRlX2Zsb3dfaWRfbGlzdCAqKmxpc3QsDQo+ICsJ CQkJc3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJvcik7DQo+ICsNCj4gKy8qKg0KPiArICogQHdh cm5pbmcNCj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0 IHByaW9yIG5vdGljZS4NCj4gKyAqDQo+ICsgKiBHZXQgYWN0aW9uIHNwZWMgaW5mbyBieSBpZGVu dGlmaWVyLg0KPiArICoNCj4gKyAqIEBwYXJhbVtpbl0gcG9ydF9pZA0KPiArICogICAgUG9ydCBp ZGVudGlmaWVyIG9mIHRoZSBFdGhlcm5ldCBkZXZpY2UuDQo+ICsgKiBAcGFyYW1baW5dIHNwZWNf aWQNCj4gKyAqICAgIEFjdGlvbiBzcGVjIGlkZW50aWZpZXIuDQo+ICsgKiBAaW5mb1tvdXRdIGlu Zm8NCj4gKyAqICAgIFBvaW50ZXIgdG8gc3RvcmUgdGhlIGFjdGlvbiBzcGVjIGluZm8uDQo+ICsg KiBAcGFyYW1bb3V0XSBlcnJvcg0KPiArICogICAgUGVyZm9ybSB2ZXJib3NlIGVycm9yIHJlcG9y dGluZyBpZiBub3QgTlVMTC4gUE1EcyBpbml0aWFsaXplIHRoaXMNCj4gKyAqICAgIHN0cnVjdHVy ZSBpbiBjYXNlIG9mIGVycm9yIG9ubHkuDQo+ICsgKg0KPiArICogQHJldHVybg0KPiArICogICAg MCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlIG90aGVyd2lzZSBhbmQgcnRlX2Vy cm5vIGlzIHNldC4NCj4gKyAqLw0KPiArX19ydGVfZXhwZXJpbWVudGFsIGludA0KPiArcnRlX2Zs b3dfYWN0aW9uX3NwZWNfaW5mb19nZXQodWludDE2X3QgcG9ydF9pZCwNCj4gKwkJCSAgICAgIHVp bnQzMl90IHNwZWNfaWQsDQo+ICsJCQkgICAgICBzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX3NwZWNf aW5mbyAqaW5mbywNCj4gKwkJCSAgICAgIHN0cnVjdCBydGVfZmxvd19lcnJvciAqZXJyb3IpOw0K PiArDQo+ICsvKioNCj4gKyAqIEB3YXJuaW5nDQo+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMg QVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UuDQo+ICsgKg0KPiArICogR2V0IGFj dGlvbiBzcGVjIGluZm8gYnkgbmFtZS4NCj4gKyAqDQo+ICsgKiBAcGFyYW1baW5dIHBvcnRfaWQN Cj4gKyAqICAgIFBvcnQgaWRlbnRpZmllciBvZiB0aGUgRXRoZXJuZXQgZGV2aWNlLg0KPiArICog QHBhcmFtW2luXSBuYW1lDQo+ICsgKiAgICBBY3Rpb24gc3BlYyBuYW1lLg0KPiArICogQGluZm9b b3V0XSBpbmZvDQo+ICsgKiAgICBQb2ludGVyIHRvIHN0b3JlIHRoZSBhY3Rpb24gc3BlYyBpbmZv Lg0KPiArICogQHBhcmFtW291dF0gZXJyb3INCj4gKyAqICAgIFBlcmZvcm0gdmVyYm9zZSBlcnJv ciByZXBvcnRpbmcgaWYgbm90IE5VTEwuIFBNRHMgaW5pdGlhbGl6ZSB0aGlzDQo+ICsgKiAgICBz dHJ1Y3R1cmUgaW4gY2FzZSBvZiBlcnJvciBvbmx5Lg0KPiArICoNCj4gKyAqIEByZXR1cm4NCj4g KyAqICAgIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZSBvdGhlcndpc2UgYW5k IHJ0ZV9lcnJubyBpcyBzZXQuDQo+ICsgKi8NCj4gK19fcnRlX2V4cGVyaW1lbnRhbCBpbnQNCj4g K3J0ZV9mbG93X2FjdGlvbl9zcGVjX2luZm9fZ2V0X2J5X25hbWUodWludDE2X3QgcG9ydF9pZCwN Cj4gKwkJCQkgICAgICBjb25zdCBjaGFyICpuYW1lLA0KPiArCQkJCSAgICAgIHN0cnVjdCBydGVf Zmxvd19hY3Rpb25fc3BlY19pbmZvICppbmZvLA0KPiArCQkJCSAgICAgIHN0cnVjdCBydGVfZmxv d19lcnJvciAqZXJyb3IpOw0KPiArDQo+ICsvKioNCj4gKyAqIEB3YXJuaW5nDQo+ICsgKiBAYiBF WFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UuDQo+ ICsgKg0KPiArICogR2V0IGFjdGlvbiBzcGVjIGZpZWxkIGluZm8gYnkgaWRlbnRpZmllci4NCj4g KyAqDQo+ICsgKiBAcGFyYW1baW5dIHBvcnRfaWQNCj4gKyAqICAgIFBvcnQgaWRlbnRpZmllciBv ZiB0aGUgRXRoZXJuZXQgZGV2aWNlLg0KPiArICogQHBhcmFtW2luXSBzcGVjX2lkDQo+ICsgKiAg ICBBY3Rpb24gc3BlYyBpZGVudGlmaWVyLg0KPiArICogQHBhcmFtW2luXSBmaWVsZF9pZA0KPiAr ICogICAgRmllbGQgaWRlbnRpZmllci4NCj4gKyAqIEBwYXJhbVtvdXRdIGluZm8NCj4gKyAqICAg IFBvaW50ZXIgdG8gc3RvcmUgdGhlIGFjdGlvbiBzcGVjIGZpZWxkIGluZm8uDQo+ICsgKiBAcGFy YW1bb3V0XSBlcnJvcg0KPiArICogICAgUGVyZm9ybSB2ZXJib3NlIGVycm9yIHJlcG9ydGluZyBp ZiBub3QgTlVMTC4gUE1EcyBpbml0aWFsaXplIHRoaXMNCj4gKyAqICAgIHN0cnVjdHVyZSBpbiBj YXNlIG9mIGVycm9yIG9ubHkuDQo+ICsgKg0KPiArICogQHJldHVybg0KPiArICogICAgMCBvbiBz dWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlIG90aGVyd2lzZSBhbmQgcnRlX2Vycm5vIGlz IHNldC4NCj4gKyAqLw0KPiArX19ydGVfZXhwZXJpbWVudGFsIGludA0KPiArcnRlX2Zsb3dfYWN0 aW9uX3NwZWNfZmllbGRfaW5mb19nZXQodWludDE2X3QgcG9ydF9pZCwNCj4gKwkJCQkgICAgdWlu dDMyX3Qgc3BlY19pZCwNCj4gKwkJCQkgICAgdWludDMyX3QgZmllbGRfaWQsDQo+ICsJCQkJICAg IHN0cnVjdCBydGVfZmxvd19hY3Rpb25fc3BlY19maWVsZF9pbmZvDQo+ICppbmZvLA0KPiArCQkJ CSAgICBzdHJ1Y3QgcnRlX2Zsb3dfZXJyb3IgKmVycm9yKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBA d2FybmluZw0KPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhv dXQgcHJpb3Igbm90aWNlLg0KPiArICoNCj4gKyAqIENyZWF0ZSBhIHRhYmxlIGtleSBvYmplY3Qu DQo+ICsgKg0KPiArICogQXBwbGljYXRpb24gbmVlZCB0byBjYWxsIHJ0ZV9mbG93X3RhYmxlX2tl eV9kZXN0cm95IHRvIGZyZWUgdGhlIGtleQ0KPiBvYmplY3QuDQo+ICsgKg0KPiArICogQHBhcmFt W2luXSBwb3J0X2lkDQo+ICsgKiAgICBQb3J0IGlkZW50aWZpZXIgb2YgdGhlIEV0aGVybmV0IGRl dmljZS4NCj4gKyAqIEBwYXJhbVtpbl0gdGFibGVfaWQNCj4gKyAqICAgIFRhYmxlIGlkZW50aWZp ZXIuDQo+ICsgKiBAcGFyYW1bb3V0XSBrZXkNCj4gKyAqICAgIFRhYmxlIGtleSBvYmplY3QgY3Jl YXRlZCBieSBQTUQuDQo+ICsgKiBAcGFyYW1bb3V0XSBlcnJvcg0KPiArICogICAgUGVyZm9ybSB2 ZXJib3NlIGVycm9yIHJlcG9ydGluZyBpZiBub3QgTlVMTC4gUE1EcyBpbml0aWFsaXplIHRoaXMN Cj4gKyAqICAgIHN0cnVjdHVyZSBpbiBjYXNlIG9mIGVycm9yIG9ubHkuDQo+ICsgKg0KPiArICog QHJldHVybg0KPiArICogICAgMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlIG90 aGVyd2lzZSBhbmQgcnRlX2Vycm5vIGlzIHNldC4NCj4gKyAqLw0KPiArX19ydGVfZXhwZXJpbWVu dGFsIGludA0KPiArcnRlX2Zsb3dfdGFibGVfa2V5X2NyZWF0ZSh1aW50MTZfdCBwb3J0X2lkLA0K PiArCQkJICB1aW50MzJfdCB0YWJsZV9pZCwNCj4gKwkJCSAgc3RydWN0IHJ0ZV9mbG93X3RhYmxl X2tleSAqKmtleSwNCj4gKwkJCSAgc3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJvcik7DQo+ICsN Cj4gKy8qKg0KPiArICogQHdhcm5pbmcNCj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkg bWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZS4NCj4gKyAqDQo+ICsgKiBEZXN0cm95IGEg dGFibGUga2V5IG9iamVjdC4NCj4gKyAqDQo+ICsgKiBAcGFyYW1baW5dIHBvcnRfaWQNCj4gKyAq ICAgIFBvcnQgaWRlbnRpZmllciBvZiB0aGUgRXRoZXJuZXQgZGV2aWNlLg0KPiArICogQHBhcmFt W2luXSBrZXkNCj4gKyAqICAgIFRhYmxlIGtleSBvYmplY3QgdG8gZGVzdHJveS4NCj4gKyAqIEBw YXJhbVtvdXRdIGVycm9yDQo+ICsgKiAgICBQZXJmb3JtIHZlcmJvc2UgZXJyb3IgcmVwb3J0aW5n IGlmIG5vdCBOVUxMLiBQTURzIGluaXRpYWxpemUgdGhpcw0KPiArICogICAgc3RydWN0dXJlIGlu IGNhc2Ugb2YgZXJyb3Igb25seS4NCj4gKyAqDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgICAwIG9u IHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUgb3RoZXJ3aXNlIGFuZCBydGVfZXJybm8g aXMgc2V0Lg0KPiArICovDQo+ICtfX3J0ZV9leHBlcmltZW50YWwgaW50DQo+ICtydGVfZmxvd190 YWJsZV9rZXlfZGVzdHJveSh1aW50MTZfdCBwb3J0X2lkLA0KPiArCQkJICAgc3RydWN0IHJ0ZV9m bG93X3RhYmxlX2tleSAqa2V5LA0KPiArCQkJICAgc3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJv cik7DQo+ICsNCj4gKy8qKg0KPiArICogQHdhcm5pbmcNCj4gKyAqIEBiIEVYUEVSSU1FTlRBTDog dGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZS4NCj4gKyAqDQo+ICsgKiBD cmVhdGUgYW4gdGFibGUgYWN0aW9uIG9iamVjdC4NCj4gKyAqDQo+ICsgKiBAcGFyYW1baW5dIHBv cnRfaWQNCj4gKyAqICAgIFBvcnQgaWRlbnRpZmllciBvZiB0aGUgRXRoZXJuZXQgZGV2aWNlLg0K PiArICogQHBhcmFtW2luXSB0YWJsZV9pZA0KPiArICogICAgVGFibGUgaWRlbnRpZmllci4NCj4g KyAqIEBwYXJhbVtpbl0gc3BlY19pZA0KPiArICogICAgQWN0aW9uIHNwZWMgaWRlbnRpZmllci4N Cj4gKyAqIEBwYXJhbVtvdXRdIGFjdGlvbg0KPiArICogICAgQWN0aW9uIGtleSBjcmVhdGVkIGJ5 IFBNRC4NCj4gKyAqIEBwYXJhbVtvdXRdIGVycm9yDQo+ICsgKiAgICBQZXJmb3JtIHZlcmJvc2Ug ZXJyb3IgcmVwb3J0aW5nIGlmIG5vdCBOVUxMLiBQTURzIGluaXRpYWxpemUgdGhpcw0KPiArICog ICAgc3RydWN0dXJlIGluIGNhc2Ugb2YgZXJyb3Igb25seS4NCj4gKyAqDQo+ICsgKiBAcmV0dXJu DQo+ICsgKiAgICAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUgb3RoZXJ3aXNl IGFuZCBydGVfZXJybm8gaXMgc2V0Lg0KPiArICovDQo+ICtfX3J0ZV9leHBlcmltZW50YWwgaW50 DQo+ICtydGVfZmxvd190YWJsZV9hY3Rpb25fY3JlYXRlKHVpbnQxNl90IHBvcnRfaWQsDQo+ICsJ CQkgICAgIHVpbnQzMl90IHRhYmxlX2lkLA0KPiArCQkJICAgICB1aW50MzJfdCBzcGVjX2lkLA0K PiArCQkJICAgICBzdHJ1Y3QgcnRlX2Zsb3dfdGFibGVfYWN0aW9uICoqYWN0aW9uLA0KPiArCQkJ ICAgICBzdHJ1Y3QgcnRlX2Zsb3dfZXJyb3IgKmVycm9yKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBA d2FybmluZw0KPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhv dXQgcHJpb3Igbm90aWNlLg0KPiArICoNCj4gKyAqIERlc3Ryb3kgYW4gdGFibGUgYWN0aW9uIG9i amVjdC4NCj4gKyAqDQo+ICsgKiBAcGFyYW1baW5dIHBvcnRfaWQNCj4gKyAqICAgIFBvcnQgaWRl bnRpZmllciBvZiB0aGUgRXRoZXJuZXQgZGV2aWNlLg0KPiArICogQHBhcmFtW2luXSBhY3Rpb24N Cj4gKyAqICAgIEFjdGlvbiBvYmplY3QgdG8gZGVzdHJveS4NCj4gKyAqIEBwYXJhbVtvdXRdIGVy cm9yDQo+ICsgKiAgICBQZXJmb3JtIHZlcmJvc2UgZXJyb3IgcmVwb3J0aW5nIGlmIG5vdCBOVUxM LiBQTURzIGluaXRpYWxpemUgdGhpcw0KPiArICogICAgc3RydWN0dXJlIGluIGNhc2Ugb2YgZXJy b3Igb25seS4NCj4gKyAqDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgICAwIG9uIHN1Y2Nlc3MsIGEg bmVnYXRpdmUgZXJybm8gdmFsdWUgb3RoZXJ3aXNlIGFuZCBydGVfZXJybm8gaXMgc2V0Lg0KPiAr ICovDQo+ICtfX3J0ZV9leHBlcmltZW50YWwgaW50DQo+ICtydGVfZmxvd190YWJsZV9hY3Rpb25f ZGVzdHJveSh1aW50MTZfdCBwb3J0X2lkLA0KPiArCQkJICAgICAgc3RydWN0IHJ0ZV9mbG93X3Rh YmxlX2FjdGlvbiAqYWN0aW9uLA0KPiArCQkJICAgICAgc3RydWN0IHJ0ZV9mbG93X2Vycm9yICpl cnJvcik7DQo+ICsNCj4gKw0KPiArLyoqDQo+ICsgKiBAd2FybmluZw0KPiArICogQGIgRVhQRVJJ TUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlLg0KPiArICoN Cj4gKyAqIFNldCB0YWJsZSBrZXkgZmllbGQgdmFsdWUgYnkgaWRlbnRpZmllci4NCj4gKyAqDQo+ ICsgKiBAcGFyYW1baW5dIHBvcnRfaWQNCj4gKyAqICAgIFBvcnQgaWRlbnRpZmllciBvZiB0aGUg RXRoZXJuZXQgZGV2aWNlLg0KPiArICogQHBhcmFtW2luXSBrZXkNCj4gKyAqICAgIFRhYmxlIGtl eSBvYmplY3QgdG8gdXBkYXRlLg0KPiArICogQHBhcmFtW2luXSBmaWVsZF9pZA0KPiArICogICAg a2V5IGZpZWxkIGlkZW50aWZpZXIuDQo+ICsgKiBAcGFyYW1baW5dIHZhbHVlDQo+ICsgKiAgICBC eXRlIGFycmF5IHRvIHN0b3JlIHRoZSB2YWx1ZQ0KPiArICogQHBhcmFtW2luXSBzaXplDQo+ICsg KiAgICBTaXplIG9mIHRoZSBieXRlIGFycmF5Lg0KPiArICogQHBhcmFtW291dF0gZXJyb3INCj4g KyAqICAgIFBlcmZvcm0gdmVyYm9zZSBlcnJvciByZXBvcnRpbmcgaWYgbm90IE5VTEwuIFBNRHMg aW5pdGlhbGl6ZSB0aGlzDQo+ICsgKiAgICBzdHJ1Y3R1cmUgaW4gY2FzZSBvZiBlcnJvciBvbmx5 Lg0KPiArICoNCj4gKyAqIEByZXR1cm4NCj4gKyAqICAgIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2 ZSBlcnJubyB2YWx1ZSBvdGhlcndpc2UgYW5kIHJ0ZV9lcnJubyBpcyBzZXQuDQo+ICsgKi8NCj4g K19fcnRlX2V4cGVyaW1lbnRhbCBpbnQNCj4gK3J0ZV9mbG93X3RhYmxlX2tleV9maWVsZF9zZXQo dWludDE2X3QgcG9ydF9pZCwNCj4gKwkJCSAgICAgc3RydWN0IHJ0ZV9mbG93X3RhYmxlX2tleSAq a2V5LA0KPiArCQkJICAgICB1aW50MzJfdCBmaWVsZF9pZCwNCj4gKwkJCSAgICAgY29uc3QgdWlu dDhfdCAqdmFsdWUsDQo+ICsJCQkgICAgIHVpbnQxNl90IHNpemUsDQo+ICsJCQkgICAgIHN0cnVj dCBydGVfZmxvd19lcnJvciAqZXJyb3IpOw0KPiArDQo+ICsvKioNCj4gKyAqIEB3YXJuaW5nDQo+ ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBu b3RpY2UuDQo+ICsgKg0KPiArICogU2V0IHRhYmxlIGtleSBmaWVsZCB2YWx1ZSBieSBuYW1lLg0K PiArICoNCj4gKyAqIEBwYXJhbVtpbl0gcG9ydF9pZA0KPiArICogICAgUG9ydCBpZGVudGlmaWVy IG9mIHRoZSBFdGhlcm5ldCBkZXZpY2UuDQo+ICsgKiBAcGFyYW1baW5dIGtleQ0KPiArICogICAg VGFibGUga2V5IG9iamVjdCB0byB1cGRhdGUuDQo+ICsgKiBAcGFyYW1baW5dIG5hbWUNCj4gKyAq ICAgIGtleSBmaWVsZCBuYW1lLg0KPiArICogQHBhcmFtW2luXSB2YWx1ZQ0KPiArICogICAgQnl0 ZSBhcnJheSB0byBzdG9yZSB0aGUgdmFsdWUgdG8gbWF0Y2guDQo+ICsgKiBAcGFyYW1baW5dIHNp emUNCj4gKyAqICAgIFNpemUgb2YgdGhlIGJ5dGUgYXJyYXkuDQo+ICsgKiBAcGFyYW1bb3V0XSBl cnJvcg0KPiArICogICAgUGVyZm9ybSB2ZXJib3NlIGVycm9yIHJlcG9ydGluZyBpZiBub3QgTlVM TC4gUE1EcyBpbml0aWFsaXplIHRoaXMNCj4gKyAqICAgIHN0cnVjdHVyZSBpbiBjYXNlIG9mIGVy cm9yIG9ubHkuDQo+ICsgKg0KPiArICogQHJldHVybg0KPiArICogICAgMCBvbiBzdWNjZXNzLCBh IG5lZ2F0aXZlIGVycm5vIHZhbHVlIG90aGVyd2lzZSBhbmQgcnRlX2Vycm5vIGlzIHNldC4NCj4g KyAqLw0KPiArX19ydGVfZXhwZXJpbWVudGFsIGludA0KPiArcnRlX2Zsb3dfdGFibGVfa2V5X2Zp ZWxkX3NldF9ieV9uYW1lKHVpbnQxNl90IHBvcnRfaWQsDQo+ICsJCQkJICAgICBzdHJ1Y3QgcnRl X2Zsb3dfdGFibGVfa2V5ICprZXksDQo+ICsJCQkJICAgICBjb25zdCBjaGFyICpuYW1lLA0KPiAr CQkJCSAgICAgY29uc3QgdWludDhfdCAqdmFsdWUsDQo+ICsJCQkJICAgICB1aW50MTZfdCBzaXpl LA0KPiArCQkJCSAgICAgc3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJvcik7DQo+ICsNCj4gKy8q Kg0KPiArICogQHdhcm5pbmcNCj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNo YW5nZSB3aXRob3V0IHByaW9yIG5vdGljZS4NCj4gKyAqDQo+ICsgKiBTZXQgd2lsZGNhcmQgbWF0 Y2gga2V5IGZpZWxkIGJ5IGlkZW50aWZpZXIuDQo+ICsgKg0KPiArICogRm9yIHdpbGRjYXJkIG1h dGNoLCBvbmx5IGEgYml0IHNldCBpbiBtYXNrIHNob3VsZCBiZSBtYXRjaGVkLg0KPiArICoNCj4g KyAqIEBwYXJhbVtpbl0gcG9ydF9pZA0KPiArICogICAgUG9ydCBpZGVudGlmaWVyIG9mIHRoZSBF dGhlcm5ldCBkZXZpY2UuDQo+ICsgKiBAcGFyYW1baW5dIGtleQ0KPiArICogICAgVGFibGUga2V5 IG9iamVjdCB0byB1cGRhdGUuDQo+ICsgKiBAcGFyYW1baW5dIGZpZWxkX2lkDQo+ICsgKiAgICBL ZXkgZmllbGQgaWRlbnRpZmllci4NCj4gKyAqIEBwYXJhbVtpbl0gdmFsdWUNCj4gKyAqICAgIEJ5 dGUgYXJyYXkgc3RvcmVzIHRoZSB2YWx1ZSB0byBtYXRjaC4NCj4gKyAqIEBwYXJhbVtpbl0gbWFz aw0KPiArICogICAgQnl0ZSBhcnJheSBzdG9yZXMgdGhlIGJpdCBtYXNrLg0KPiArICogQHBhcmFt W2luXSBzaXplDQo+ICsgKiAgICBTaXplIG9mIHZhbHVlIGFuZCBtYXNrIGJ5dGUgYXJyYXkuDQo+ ICsgKiBAcGFyYW1bb3V0XSBlcnJvcg0KPiArICogICAgUGVyZm9ybSB2ZXJib3NlIGVycm9yIHJl cG9ydGluZyBpZiBub3QgTlVMTC4gUE1EcyBpbml0aWFsaXplIHRoaXMNCj4gKyAqICAgIHN0cnVj dHVyZSBpbiBjYXNlIG9mIGVycm9yIG9ubHkuDQo+ICsgKg0KPiArICogQHJldHVybg0KPiArICog ICAgMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlIG90aGVyd2lzZSBhbmQgcnRl X2Vycm5vIGlzIHNldC4NCj4gKyAqLw0KPiArX19ydGVfZXhwZXJpbWVudGFsIGludA0KPiArcnRl X2Zsb3dfdGFibGVfa2V5X2ZpZWxkX3NldF93aXRoX21hc2sodWludDE2X3QgcG9ydF9pZCwNCj4g KwkJCQkgICAgICAgc3RydWN0IHJ0ZV9mbG93X3RhYmxlX2tleSAqa2V5LA0KPiArCQkJCSAgICAg ICB1aW50MzJfdCBmaWVsZF9pZCwNCj4gKwkJCQkgICAgICAgY29uc3QgdWludDhfdCAqdmFsdWUs DQo+ICsJCQkJICAgICAgIGNvbnN0IHVpbnQ4X3QgKm1hc2ssDQo+ICsJCQkJICAgICAgIHVpbnQx Nl90IHNpemUsDQo+ICsJCQkJICAgICAgIHN0cnVjdCBydGVfZmxvd19lcnJvciAqZXJyb3IpOw0K PiArDQo+ICsvKioNCj4gKyAqIEB3YXJuaW5nDQo+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMg QVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UuDQo+ICsgKg0KPiArICogU2V0IHdp bGRjYXJkIG1hdGNoIGtleSBmaWVsZCBieSBuYW1lLg0KPiArICoNCj4gKyAqIEBwYXJhbVtpbl0g cG9ydF9pZA0KPiArICogICAgUG9ydCBpZGVudGlmaWVyIG9mIHRoZSBFdGhlcm5ldCBkZXZpY2Uu DQo+ICsgKiBAcGFyYW1baW5dIGtleQ0KPiArICogICAgVGFibGUga2V5IG9iamVjdCB0byB1cGRh dGUuDQo+ICsgKiBAcGFyYW1baW5dIG5hbWUNCj4gKyAqICAgIEtleSBmaWVsZCBuYW1lLg0KPiAr ICogQHBhcmFtW2luXSB2YWx1ZQ0KPiArICogICAgQnl0ZSBhcnJheSBzdG9yZXMgdGhlIHZhbHVl IHRvIG1hdGNoLg0KPiArICogQHBhcmFtW2luXSBtYXNrDQo+ICsgKiAgICBCeXRlIGFycmF5IHN0 b3JlcyB0aGUgYml0IG1hc2suDQo+ICsgKiBAcGFyYW1baW5dIHNpemUNCj4gKyAqICAgIFNpemUg b2YgdmFsdWUgYW5kIG1hc2sgYnl0ZSBhcnJheS4NCj4gKyAqIEBwYXJhbVtvdXRdIGVycm9yDQo+ ICsgKiAgICBQZXJmb3JtIHZlcmJvc2UgZXJyb3IgcmVwb3J0aW5nIGlmIG5vdCBOVUxMLiBQTURz IGluaXRpYWxpemUgdGhpcw0KPiArICogICAgc3RydWN0dXJlIGluIGNhc2Ugb2YgZXJyb3Igb25s eS4NCj4gKyAqDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgICAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRp dmUgZXJybm8gdmFsdWUgb3RoZXJ3aXNlIGFuZCBydGVfZXJybm8gaXMgc2V0Lg0KPiArICovDQo+ ICtfX3J0ZV9leHBlcmltZW50YWwgaW50DQo+ICtydGVfZmxvd190YWJsZV9rZXlfZmllbGRfc2V0 X3dpdGhfbWFza19ieV9uYW1lKHVpbnQxNl90IHBvcnRfaWQsDQo+ICsJCQkJCSAgICAgICBzdHJ1 Y3QgcnRlX2Zsb3dfdGFibGVfa2V5ICprZXksDQo+ICsJCQkJCSAgICAgICBjb25zdCBjaGFyICpu YW1lLA0KPiArCQkJCQkgICAgICAgY29uc3QgdWludDhfdCAqdmFsdWUsDQo+ICsJCQkJCSAgICAg ICBjb25zdCB1aW50OF90ICptYXNrLA0KPiArCQkJCQkgICAgICAgdWludDE2X3Qgc2l6ZSwNCj4g KwkJCQkJICAgICAgIHN0cnVjdCBydGVfZmxvd19lcnJvciAqZXJyb3IpOw0KPiArDQo+ICsvKioN Cj4gKyAqIEB3YXJuaW5nDQo+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFu Z2Ugd2l0aG91dCBwcmlvciBub3RpY2UuDQo+ICsgKg0KPiArICogU2V0IHJhbmdlIG1hdGNoIGtl eSBmaWVsZCBieSBpZGVudGlmaWVyLg0KPiArICoNCj4gKyAqIEBwYXJhbVtpbl0gcG9ydF9pZA0K PiArICogICAgUG9ydCBpZGVudGlmaWVyIG9mIHRoZSBFdGhlcm5ldCBkZXZpY2UuDQo+ICsgKiBA cGFyYW1baW5dIGtleQ0KPiArICogICAgVGFibGUga2V5IG9iamVjdCB0byB1cGRhdGUuDQo+ICsg KiBAcGFyYW1baW5dIGZpZWxkX2lkDQo+ICsgKiAgICBLZXkgZmllbGQgaWRlbnRpZmllci4NCj4g KyAqIEBwYXJhbVtpbl0gbWluDQo+ICsgKiAgICBCeXRlIGFycmF5IHN0b3JlcyB0aGUgbWluIHZh bHVlIG9mIHRoZSByYW5nZSB0byBtYXRjaA0KPiArICogQHBhcmFtW2luXSBtYXgNCj4gKyAqICAg IEJ5dGUgYXJyYXkgc3RvcmVzIHRoZSBtYXggdmFsdWUgb2YgdGhlIHJhbmdlIHRvIG1hdGNoDQo+ ICsgKiBAcGFyYW1baW5dIHNpemUNCj4gKyAqICAgIFNpemUgb2YgdGhlIG1pbiBhbmQgbWF4IGJ5 dGUgYXJyYXkNCj4gKyAqIEBwYXJhbVtvdXRdIGVycm9yDQo+ICsgKiAgICBQZXJmb3JtIHZlcmJv c2UgZXJyb3IgcmVwb3J0aW5nIGlmIG5vdCBOVUxMLiBQTURzIGluaXRpYWxpemUgdGhpcw0KPiAr ICogICAgc3RydWN0dXJlIGluIGNhc2Ugb2YgZXJyb3Igb25seS4NCj4gKyAqDQo+ICsgKiBAcmV0 dXJuDQo+ICsgKiAgICAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUgb3RoZXJ3 aXNlIGFuZCBydGVfZXJybm8gaXMgc2V0Lg0KPiArICovDQo+ICtfX3J0ZV9leHBlcmltZW50YWwg aW50DQo+ICtydGVfZmxvd190YWJsZV9rZXlfZmllbGRfc2V0X3dpdGhfcmFuZ2UodWludDE2X3Qg cG9ydF9pZCwNCj4gKwkJCQkgICAgICAgIHN0cnVjdCBydGVfZmxvd190YWJsZV9rZXkgKmtleSwN Cj4gKwkJCQkJdWludDMyX3QgZmllbGRfaWQsDQo+ICsJCQkJCWNvbnN0IHVpbnQ4X3QgKm1pbiwN Cj4gKwkJCQkJY29uc3QgdWludDhfdCAqbWF4LA0KPiArCQkJCQl1aW50MTZfdCBzaXplLA0KPiAr CQkJCQlzdHJ1Y3QgcnRlX2Zsb3dfZXJyb3IgKmVycm9yKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBA d2FybmluZw0KPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhv dXQgcHJpb3Igbm90aWNlLg0KPiArICoNCj4gKyAqIFNldCByYW5nZSBtYXRjaCBrZXkgZmllbGQg YnkgbmFtZS4NCj4gKyAqDQo+ICsgKiBAcGFyYW1baW5dIHBvcnRfaWQNCj4gKyAqICAgIFBvcnQg aWRlbnRpZmllciBvZiB0aGUgRXRoZXJuZXQgZGV2aWNlLg0KPiArICogQHBhcmFtW2luXSBrZXkN Cj4gKyAqICAgIFRhYmxlIGtleSBvYmplY3QgdG8gdXBkYXRlLg0KPiArICogQHBhcmFtW2luXSBu YW1lDQo+ICsgKiAgICBLZXkgZmllbGQgbmFtZS4NCj4gKyAqIEBwYXJhbVtpbl0gbWluDQo+ICsg KiAgICBCeXRlIGFycmF5IHN0b3JlcyB0aGUgbWluIHZhbHVlIG9mIHRoZSByYW5nZSB0byBtYXRj aA0KPiArICogQHBhcmFtW2luXSBtYXgNCj4gKyAqICAgIEJ5dGUgYXJyYXkgc3RvcmVzIHRoZSBt YXggdmFsdWUgb2YgdGhlIHJhbmdlIHRvIG1hdGNoDQo+ICsgKiBAcGFyYW1baW5dIHNpemUNCj4g KyAqICAgIFNpemUgb2YgdGhlIG1pbiBhbmQgbWF4IGJ5dGUgYXJyYXkNCj4gKyAqIEBwYXJhbVtv dXRdIGVycm9yDQo+ICsgKiAgICBQZXJmb3JtIHZlcmJvc2UgZXJyb3IgcmVwb3J0aW5nIGlmIG5v dCBOVUxMLiBQTURzIGluaXRpYWxpemUgdGhpcw0KPiArICogICAgc3RydWN0dXJlIGluIGNhc2Ug b2YgZXJyb3Igb25seS4NCj4gKyAqDQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgICAwIG9uIHN1Y2Nl c3MsIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUgb3RoZXJ3aXNlIGFuZCBydGVfZXJybm8gaXMgc2V0 Lg0KPiArICovDQo+ICtfX3J0ZV9leHBlcmltZW50YWwgaW50DQo+ICtydGVfZmxvd190YWJsZV9r ZXlfZmllbGRfc2V0X3dpdGhfcmFuZ2VfYnlfbmFtZSh1aW50MTZfdCBwb3J0X2lkLA0KPiArCQkJ CQkJc3RydWN0IHJ0ZV9mbG93X3RhYmxlX2tleQ0KPiAqa2V5LA0KPiArCQkJCQkJY29uc3QgY2hh ciAqbmFtZSwNCj4gKwkJCQkJCWNvbnN0IHVpbnQ4X3QgKm1pbiwNCj4gKwkJCQkJCWNvbnN0IHVp bnQ4X3QgKm1heCwNCj4gKwkJCQkJCXVpbnQxNl90IHNpemUsDQo+ICsJCQkJCQlzdHJ1Y3QgcnRl X2Zsb3dfZXJyb3IgKmVycm9yKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBAd2FybmluZw0KPiArICog QGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNl Lg0KPiArICoNCj4gKyAqIFNldCBscG0gbWF0Y2gga2V5IGZpZWxkIGJ5IGlkZW50aWZpZXIuDQo+ ICsgKg0KPiArICogQHBhcmFtW2luXSBwb3J0X2lkDQo+ICsgKiAgICBQb3J0IGlkZW50aWZpZXIg b2YgdGhlIEV0aGVybmV0IGRldmljZS4NCj4gKyAqIEBwYXJhbVtpbl0ga2V5DQo+ICsgKiAgICBU YWJsZSBrZXkgb2JqZWN0IHRvIHVwZGF0ZS4NCj4gKyAqIEBwYXJhbVtpbl0gZmllbGRfaWQNCj4g KyAqICAgIEtleSBmaWVsZCBpZGVudGlmaWVyLg0KPiArICogQHBhcmFtW2luXSB2YWx1ZQ0KPiAr ICogICAgQnl0ZSBhcnJheSBzdG9yZXMgdGhlIHZhbHVlIHRvIG1hdGNoLg0KPiArICogQHBhcmFt W2luXSBzaXplDQo+ICsgKiAgICBTaXplIG9mIHZhbHVlIGJ5dGUgYXJyYXkuDQo+ICsgKiBAcGFy YW1baW5dIHByZWZpeA0KPiArICogICAgQml0cyBvZiB0aGUgcHJlZml4IHRvIG1hdGNoLCBtdXN0 IDw9ICg4ICogc2l6ZSkNCj4gKyAqIEBwYXJhbVtvdXRdIGVycm9yDQo+ICsgKiAgICBQZXJmb3Jt IHZlcmJvc2UgZXJyb3IgcmVwb3J0aW5nIGlmIG5vdCBOVUxMLiBQTURzIGluaXRpYWxpemUgdGhp cw0KPiArICogICAgc3RydWN0dXJlIGluIGNhc2Ugb2YgZXJyb3Igb25seS4NCj4gKyAqDQo+ICsg KiBAcmV0dXJuDQo+ICsgKiAgICAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUg b3RoZXJ3aXNlIGFuZCBydGVfZXJybm8gaXMgc2V0Lg0KPiArICovDQo+ICtfX3J0ZV9leHBlcmlt ZW50YWwgaW50DQo+ICtydGVfZmxvd190YWJsZV9rZXlfZmllbGRfc2V0X3dpdGhfcHJlZml4KHVp bnQxNl90IHBvcnRfaWQsDQo+ICsJCQkJCSBzdHJ1Y3QgcnRlX2Zsb3dfdGFibGVfa2V5ICprZXks DQo+ICsJCQkJCSB1aW50MzJfdCBmaWVsZF9pZCwNCj4gKwkJCQkJIGNvbnN0IHVpbnQ4X3QgKnZh bHVlLA0KPiArCQkJCQkgdWludDE2X3Qgc2l6ZSwNCj4gKwkJCQkJIHVpbnQxNl90IHByZWZpeCwN Cj4gKwkJCQkJIHN0cnVjdCBydGVfZmxvd19lcnJvciAqZXJyb3IpOw0KPiArDQo+ICsvKioNCj4g KyAqIEB3YXJuaW5nDQo+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ug d2l0aG91dCBwcmlvciBub3RpY2UuDQo+ICsgKg0KPiArICogU2V0IGxwbSBtYXRjaCBrZXkgZmll bGQgYnkgbmFtZS4NCj4gKyAqDQo+ICsgKiBAcGFyYW1baW5dIHBvcnRfaWQNCj4gKyAqICAgIFBv cnQgaWRlbnRpZmllciBvZiB0aGUgRXRoZXJuZXQgZGV2aWNlLg0KPiArICogQHBhcmFtW2luXSBr ZXkNCj4gKyAqICAgIFRhYmxlIGtleSBvYmplY3QgdG8gdXBkYXRlLg0KPiArICogQHBhcmFtW2lu XSBuYW1lDQo+ICsgKiAgICBLZXkgZmllbGQgbmFtZS4NCj4gKyAqIEBwYXJhbVtpbl0gdmFsdWUN Cj4gKyAqICAgIEJ5dGUgYXJyYXkgc3RvcmVzIHRoZSB2YWx1ZSB0byBtYXRjaC4NCj4gKyAqIEBw YXJhbVtpbl0gc2l6ZQ0KPiArICogICAgU2l6ZSBvZiB2YWx1ZSBieXRlIGFycmF5Lg0KPiArICog QHBhcmFtW2luXSBwcmVmaXgNCj4gKyAqICAgIEJpdHMgb2YgdGhlIHByZWZpeCB0byBtYXRjaCwg bXVzdCA8PSAoOCAqIHNpemUpDQo+ICsgKiBAcGFyYW1bb3V0XSBlcnJvcg0KPiArICogICAgUGVy Zm9ybSB2ZXJib3NlIGVycm9yIHJlcG9ydGluZyBpZiBub3QgTlVMTC4gUE1EcyBpbml0aWFsaXpl IHRoaXMNCj4gKyAqICAgIHN0cnVjdHVyZSBpbiBjYXNlIG9mIGVycm9yIG9ubHkuDQo+ICsgKg0K PiArICogQHJldHVybg0KPiArICogICAgMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIHZh bHVlIG90aGVyd2lzZSBhbmQgcnRlX2Vycm5vIGlzIHNldC4NCj4gKyAqLw0KPiArX19ydGVfZXhw ZXJpbWVudGFsIGludA0KPiArcnRlX2Zsb3dfdGFibGVfa2V5X2ZpZWxkX3NldF93aXRoX3ByZWZp eF9ieV9uYW1lKHVpbnQxNl90IHBvcnRfaWQsDQo+ICsJCQkJCQkgc3RydWN0IHJ0ZV9mbG93X3Rh YmxlX2tleQ0KPiAqa2V5LA0KPiArCQkJCQkJIGNvbnN0IGNoYXIqIG5hbWUsDQo+ICsJCQkJCQkg Y29uc3QgdWludDhfdCAqdmFsdWUsDQo+ICsJCQkJCQkgdWludDE2X3Qgc2l6ZSwNCj4gKwkJCQkJ CSB1aW50MTZfdCBwcmVmaXgsDQo+ICsJCQkJCQkgc3RydWN0IHJ0ZV9mbG93X2Vycm9yDQo+ICpl cnJvcik7DQo+ICsNCj4gKy8qKg0KPiArICogQHdhcm5pbmcNCj4gKyAqIEBiIEVYUEVSSU1FTlRB TDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZS4NCj4gKyAqDQo+ICsg KiBTZXQgYWN0aW9uIGZpZWxkIHZhbHVlLg0KPiArICoNCj4gKyAqIEBwYXJhbVtpbl0gcG9ydF9p ZA0KPiArICogICAgUG9ydCBpZGVudGlmaWVyIG9mIHRoZSBFdGhlcm5ldCBkZXZpY2UuDQo+ICsg KiBAcGFyYW1baW5dIGFjdGlvbg0KPiArICogICAgQWN0aW9uIG9iamVjdCB0byB1cGRhdGUuDQo+ ICsgKiBAcGFyYW1baW5dIGZpZWxkX2lkDQo+ICsgKiAgICBGaWVsZCBpZGVudGlmaWVyLg0KPiAr ICogQHBhcmFtW2luXSB2YWx1ZQ0KPiArICogICAgQnl0ZSBhcnJheSBzdG9yZXMgdGhlIHZhbHVl IG9mIHRoZSBmaWVsZC4NCj4gKyAqIEBwYXJhbVtpbl0gc2l6ZQ0KPiArICogICAgU2l6ZSBvZiB0 aGUgYnl0ZSBhcnJheS4NCj4gKyAqIEBwYXJhbVtvdXRdIGVycm9yDQo+ICsgKiAgICBQZXJmb3Jt IHZlcmJvc2UgZXJyb3IgcmVwb3J0aW5nIGlmIG5vdCBOVUxMLiBQTURzIGluaXRpYWxpemUgdGhp cw0KPiArICogICAgc3RydWN0dXJlIGluIGNhc2Ugb2YgZXJyb3Igb25seS4NCj4gKyAqDQo+ICsg KiBAcmV0dXJuDQo+ICsgKiAgICAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUg b3RoZXJ3aXNlIGFuZCBydGVfZXJybm8gaXMgc2V0Lg0KPiArICovDQo+ICtfX3J0ZV9leHBlcmlt ZW50YWwgaW50DQo+ICtydGVfZmxvd190YWJsZV9hY3Rpb25fZmllbGRfc2V0KHVpbnQxNl90IHBv cnRfaWQsDQo+ICsJCQkJc3RydWN0IHJ0ZV9mbG93X3RhYmxlX2FjdGlvbiAqYWN0aW9uLA0KPiAr CQkJCXVpbnQzMl90IGZpZWxkX2lkLA0KPiArCQkJCWNvbnN0IHVpbnQ4X3QgKnZhbHVlLA0KPiAr CQkJCXVpbnQxNl90IHNpemUsDQo+ICsJCQkJc3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJvcik7 DQo+ICsNCj4gKy8qKg0KPiArICogQHdhcm5pbmcNCj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhp cyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZS4NCj4gKyAqDQo+ICsgKiBnZXQg YWN0aW9uIGZpZWxkIHZhbHVlLCBhcHBsaWNhdGlvbiBtYXkgdXNlIHJ0ZV9mbG93X3RhYmxlX2Vu dHJ5X3F1ZXJ5DQo+ICsgKiB0byBxdWVyeSBieSBrZXkgYW5kIHVzZSB0aGlzIEFQSSB0byBmaWd1 cmUgb3V0IGVhY2ggYWN0aW9uIGZpZWxkLg0KPiArICoNCj4gKyAqIEBwYXJhbVtpbl0gcG9ydF9p ZA0KPiArICogICAgUG9ydCBpZGVudGlmaWVyIG9mIHRoZSBFdGhlcm5ldCBkZXZpY2UuDQo+ICsg KiBAcGFyYW1baW5dIGFjdGlvbg0KPiArICogICAgQWN0aW9uIG9iamVjdCB0byBxdWVyeS4NCj4g KyAqIEBwYXJhbVtpbl0gZmllbGRfaWQNCj4gKyAqICAgIEZpZWxkIGlkZW50aWZpZXIuDQo+ICsg KiBAcGFyYW1bb3V0XSB2YWx1ZQ0KPiArICogICAgQnl0ZSBhcnJheSBzdG9yZXMgdGhlIHZhbHVl IG9mIHRoZSBmaWVsZC4NCj4gKyAqIEBwYXJhbVtpbiB8IG91dF0gc2l6ZQ0KPiArICogICAgSW5w dXQgYXMgc2l6ZSBvZiB0aGUgYnl0ZSBhcnJheSwgcmV0dXJuIHRoZSBzaXplIG9mIHRoZSB2YWx1 ZS4NCj4gKyAqIEBwYXJhbVtvdXRdIGVycm9yDQo+ICsgKiAgICBQZXJmb3JtIHZlcmJvc2UgZXJy b3IgcmVwb3J0aW5nIGlmIG5vdCBOVUxMLiBQTURzIGluaXRpYWxpemUgdGhpcw0KPiArICogICAg c3RydWN0dXJlIGluIGNhc2Ugb2YgZXJyb3Igb25seS4NCj4gKyAqDQo+ICsgKiBAcmV0dXJuDQo+ ICsgKiAgICAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUgb3RoZXJ3aXNlIGFu ZCBydGVfZXJybm8gaXMgc2V0Lg0KPiArICovDQo+ICtfX3J0ZV9leHBlcmltZW50YWwgaW50DQo+ ICtydGVfZmxvd190YWJsZV9hY3Rpb25fZmllbGRfZ2V0KHVpbnQxNl90IHBvcnRfaWQsDQo+ICsJ CQkJY29uc3Qgc3RydWN0IHJ0ZV9mbG93X3RhYmxlX2FjdGlvbiAqYWN0aW9uLA0KPiArCQkJCXVp bnQzMl90IGZpZWxkX2lkLA0KPiArCQkJCXVpbnQ4X3QgKnZhbHVlLA0KPiArCQkJCXVpbnQxNl90 ICpzaXplLA0KPiArCQkJCXN0cnVjdCBydGVfZmxvd19lcnJvciAqZXJyb3IpOw0KPiArDQo+ICsv KioNCj4gKyAqIEB3YXJuaW5nDQo+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBj aGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UuDQo+ICsgKg0KPiArICogQHBhcmFtW2luXSBwb3J0 X2lkDQo+ICsgKiAgICBQb3J0IGlkZW50aWZpZXIgb2YgdGhlIEV0aGVybmV0IGRldmljZS4NCj4g KyAqIEBwYXJhbVtpbl0gYWN0aW9uDQo+ICsgKiAgICBBY3Rpb24gb2JqZWN0IHRvIHVwZGF0ZS4N Cj4gKyAqIEBwYXJhbVtpbl0gbmFtZQ0KPiArICogICAgRmllbGQgbmFtZS4NCj4gKyAqIEBwYXJh bVtpbl0gdmFsdWUNCj4gKyAqICAgIEJ5dGUgYXJyYXkgc3RvcmVzIHRoZSB2YWx1ZSBvZiB0aGUg ZmllbGQuDQo+ICsgKiBAcGFyYW1baW5dIHNpemUNCj4gKyAqICAgIFNpemUgb2YgdGhlIGJ5dGUg YXJyYXkuDQo+ICsgKiBAcGFyYW1bb3V0XSBlcnJvcg0KPiArICogICAgUGVyZm9ybSB2ZXJib3Nl IGVycm9yIHJlcG9ydGluZyBpZiBub3QgTlVMTC4gUE1EcyBpbml0aWFsaXplIHRoaXMNCj4gKyAq ICAgIHN0cnVjdHVyZSBpbiBjYXNlIG9mIGVycm9yIG9ubHkuDQo+ICsgKg0KPiArICogQHJldHVy bg0KPiArICogICAgMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlIG90aGVyd2lz ZSBhbmQgcnRlX2Vycm5vIGlzIHNldC4NCj4gKyAqLw0KPiArX19ydGVfZXhwZXJpbWVudGFsIGlu dA0KPiArcnRlX2Zsb3dfdGFibGVfYWN0aW9uX2ZpZWxkX3NldF9ieV9uYW1lKHVpbnQxNl90IHBv cnRfaWQsDQo+ICsJCQkJCXN0cnVjdCBydGVfZmxvd19hY3Rpb24gKmFjdGlvbiwNCj4gKwkJCQkJ Y29uc3QgY2hhciAqbmFtZSwNCj4gKwkJCQkJY29uc3QgdWludDhfdCAqdmFsdWUsDQo+ICsJCQkJ CXVpbnQxNl90IHNpemUsDQo+ICsJCQkJCXN0cnVjdCBydGVfZmxvd19lcnJvciAqZXJyb3IpOw0K PiArDQo+ICsvKioNCj4gKyAqIEB3YXJuaW5nDQo+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMg QVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UuDQo+ICsgKg0KPiArICogU2V0IHRh YmxlIGRlZmF1bHQgYWN0aW9uLg0KPiArICoNCj4gKyAqIFRoZSBkZWZhdWx0IGFjdGlvbiB3aWxs IHRha2UgZWZmZWN0IHdoZW4gYSBwYWNrZXQgaGl0IG5vIHJ1bGVzLg0KPiArICoNCj4gKyAqIEBw YXJhbVtpbl0gcG9ydF9pZA0KPiArICogICAgUG9ydCBpZGVudGlmaWVyIG9mIHRoZSBFdGhlcm5l dCBkZXZpY2UuDQo+ICsgKiBAcGFyYW1baW5dIHRhYmxlX2lkDQo+ICsgKiAgICBUYWJsZSBpZGVu dGlmaWVyDQo+ICsgKiBAcGFyYW1baW5dIGFjdGlvbg0KPiArICogICAgRGVmYXVsdCBhY3Rpb24g b2JqZWN0Lg0KPiArICogQHBhcmFtW291dF0gZXJyb3INCj4gKyAqICAgIFBlcmZvcm0gdmVyYm9z ZSBlcnJvciByZXBvcnRpbmcgaWYgbm90IE5VTEwuIFBNRHMgaW5pdGlhbGl6ZSB0aGlzDQo+ICsg KiAgICBzdHJ1Y3R1cmUgaW4gY2FzZSBvZiBlcnJvciBvbmx5Lg0KPiArICoNCj4gKyAqIEByZXR1 cm4NCj4gKyAqICAgIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZSBvdGhlcndp c2UgYW5kIHJ0ZV9lcnJubyBpcyBzZXQuDQo+ICsgKi8NCj4gK19fcnRlX2V4cGVyaW1lbnRhbCBp bnQNCj4gK3J0ZV9mbG93X3RhYmxlX2RlZmF1bHRfYWN0aW9uX3NldCh1aW50MTZfdCBwb3J0X2lk LA0KPiArCQkJCSAgdWludDMyX3QgdGFibGVfaWQsDQo+ICsJCQkJICBjb25zdCBzdHJ1Y3QgcnRl X2Zsb3dfdGFibGVfYWN0aW9uICphY3Rpb24sDQo+ICsJCQkJICBzdHJ1Y3QgcnRlX2Zsb3dfZXJy b3IgKmVycm9yKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBAd2FybmluZw0KPiArICogQGIgRVhQRVJJ TUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlLg0KPiArICoN Cj4gKyAqIENhbmNlbCB0YWJsZSBkZWZhdWx0IGFjdGlvbg0KPiArICoNCj4gKyAqIEBwYXJhbVtp bl0gcG9ydF9pZA0KPiArICogICAgUG9ydCBpZGVudGlmaWVyIG9mIHRoZSBFdGhlcm5ldCBkZXZp Y2UuDQo+ICsgKiBAcGFyYW1baW5dIHRhYmxlX2lkDQo+ICsgKiAgICBUYWJsZSBpZGVudGlmaWVy Lg0KPiArICogQHBhcmFtW291dF0gZXJyb3INCj4gKyAqICAgIFBlcmZvcm0gdmVyYm9zZSBlcnJv ciByZXBvcnRpbmcgaWYgbm90IE5VTEwuIFBNRHMgaW5pdGlhbGl6ZSB0aGlzDQo+ICsgKiAgICBz dHJ1Y3R1cmUgaW4gY2FzZSBvZiBlcnJvciBvbmx5Lg0KPiArICoNCj4gKyAqIEByZXR1cm4NCj4g KyAqICAgIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZSBvdGhlcndpc2UgYW5k IHJ0ZV9lcnJubyBpcyBzZXQuDQo+ICsgKi8NCj4gK19fcnRlX2V4cGVyaW1lbnRhbCBpbnQNCj4g K3J0ZV9mbG93X3RhYmxlX2RlZmF1bHRfYWN0aW9uX2NhbmNlbCh1aW50MzJfdCBwb3J0X2lkLA0K PiArCQkJCSAgICAgdWludDMyX3QgdGFibGVfaWQsDQo+ICsJCQkJICAgICBzdHJ1Y3QgcnRlX2Zs b3dfZXJyb3IgKmVycm9yKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBAd2FybmluZw0KPiArICogQGIg RVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlLg0K PiArICoNCj4gKyAqIEFkZCBtYXRjaGluZyBydWxlIGFzIGEgdGFibGUgZW50cnksIHRoZSBydWxl IHRha2UgZWZmZWN0IGltbWVkaWF0ZWx5DQo+ICsgKiBhZnRlciB0aGUgQVBJIGNhbGwuDQo+ICsg Kg0KPiArICogQHBhcmFtW2luXSBwb3J0X2lkDQo+ICsgKiAgICBQb3J0IGlkZW50aWZpZXIgb2Yg dGhlIEV0aGVybmV0IGRldmljZS4NCj4gKyAqIEBwYXJhbVtpbl0gdGFibGVfaWQNCj4gKyAqICAg IFRhYmxlIGlkZW50aWZpZXIuDQo+ICsgKiBAcGFyYW1baW5dIGtleQ0KPiArICogICAgVGFibGUg a2V5IG9iamVjdC4NCj4gKyAqIEBwYXJhbVtpbl0gYWN0aW9uDQo+ICsgKiAgICBBY3Rpb24gb2Jq ZWN0Lg0KPiArICogQHBhcmFtW291dF0gZXJyb3INCj4gKyAqICAgIFBlcmZvcm0gdmVyYm9zZSBl cnJvciByZXBvcnRpbmcgaWYgbm90IE5VTEwuIFBNRHMgaW5pdGlhbGl6ZSB0aGlzDQo+ICsgKiAg ICBzdHJ1Y3R1cmUgaW4gY2FzZSBvZiBlcnJvciBvbmx5Lg0KPiArICoNCj4gKyAqIEByZXR1cm4N Cj4gKyAqICAgIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZSBvdGhlcndpc2Ug YW5kIHJ0ZV9lcnJubyBpcyBzZXQuDQo+ICsgKi8NCj4gK19fcnRlX2V4cGVyaW1lbnRhbCBpbnQN Cj4gK3J0ZV9mbG93X3RhYmxlX2VudHJ5X2FkZCh1aW50MTZfdCBwb3J0X2lkLA0KPiArCQkJIHVp bnQzMl90IHRhYmxlX2lkLA0KPiArCQkJIGNvbnN0IHN0cnVjdCBydGVfZmxvd190YWJsZV9rZXkg KmtleSwNCj4gKwkJCSBjb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfdGFibGVfYWN0aW9uICphY3Rpb24s DQo+ICsJCQkgc3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJvcik7DQo+ICsNCj4gKy8qKg0KPiAr ICogQHdhcm5pbmcNCj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3 aXRob3V0IHByaW9yIG5vdGljZS4NCj4gKyAqDQo+ICsgKiBRdWVyeSBhY3Rpb24gb2YgYSB0YWJs ZSBlbnRyeS4NCj4gKyAqDQo+ICsgKiBJZiBzdWNjZXNzLCBhIG5ldyBydGVfZmxvd190YWJsZV9h Y3Rpb24gb2JqZWN0IHdpbGwgYmUgY3JlYXRlZC4NCj4gKyAqIFVzZSBydGVfZmxvd190YWJsZV9h Y3Rpb25fZGVzdHJveSB0byBmcmVlIHRoZSByZXNvdXJjZS4NCj4gKyAqDQo+ICsgKiBAcGFyYW1b aW5dIHBvcnRfaWQNCj4gKyAqICAgIFBvcnQgaWRlbnRpZmllciBvZiB0aGUgRXRoZXJuZXQgZGV2 aWNlLg0KPiArICogQHBhcmFtW2luXSB0YWJsZV9pZA0KPiArICogICAgVGFibGUgaWRlbnRpZmll ci4NCj4gKyAqIEBwYXJhbVtpbl0ga2V5DQo+ICsgKiAgICBUYWJsZSBrZXkgb2JqZWN0Lg0KPiAr ICogQHBhcmFtW291dF0gYWN0aW9uDQo+ICsgKiAgICBBY3Rpb24gb2JqZWN0IHJldHVybmVkLg0K PiArICogQHBhcmFtW291dF0gZXJyb3INCj4gKyAqICAgIFBlcmZvcm0gdmVyYm9zZSBlcnJvciBy ZXBvcnRpbmcgaWYgbm90IE5VTEwuIFBNRHMgaW5pdGlhbGl6ZSB0aGlzDQo+ICsgKiAgICBzdHJ1 Y3R1cmUgaW4gY2FzZSBvZiBlcnJvciBvbmx5Lg0KPiArICoNCj4gKyAqIEByZXR1cm4NCj4gKyAq ICAgIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZSBvdGhlcndpc2UgYW5kIHJ0 ZV9lcnJubyBpcyBzZXQuDQo+ICsgKi8NCj4gK19fcnRlX2V4cGVyaW1lbnRhbCBpbnQNCj4gK3J0 ZV9mbG93X3RhYmxlX2VudHJ5X3F1ZXJ5KHVpbnQxNl90IHBvcnRfaWQsDQo+ICsJCQkgICB1aW50 MzJfdCB0YWJsZV9pZCwNCj4gKwkJCSAgIGNvbnN0IHN0cnVjdCBydGVfZmxvd190YWJsZV9rZXkg KmtleSwNCj4gKwkJCSAgIHN0cnVjdCBydGVfZmxvd190YWJsZV9hY3Rpb24gKiphY3Rpb24sDQo+ ICsJCQkgICBzdHJ1Y3QgcnRlX2Zsb3dfZXJyb3IgKmVycm9yKTsNCj4gKw0KPiArLyoqDQo+ICsg KiBAd2FybmluZw0KPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdp dGhvdXQgcHJpb3Igbm90aWNlLg0KPiArICoNCj4gKyAqIERlbGV0ZSBhIHRhYmxlIGVudHJ5LCB0 aGlzIHRha2UgZWZmZWN0IGltbWVpZGF0bHkgYWZ0ZXIgdGhlIEFQSSBjYWxsLg0KPiArICoNCj4g KyAqIEBwYXJhbVtpbl0gcG9ydF9pZA0KPiArICogICAgUG9ydCBpZGVudGlmaWVyIG9mIHRoZSBF dGhlcm5ldCBkZXZpY2UuDQo+ICsgKiBAcGFyYW1baW5dIHRhYmxlX2lkDQo+ICsgKiAgICBUYWJs ZSBpZGVudGlmaWVyLg0KPiArICogQHBhcmFtW2luXSBrZXkNCj4gKyAqICAgIFRhYmxlIGtleSBv YmplY3QgdG8gbWF0Y2guDQo+ICsgKiBAcGFyYW1bb3V0XSBlcnJvcg0KPiArICogICAgUGVyZm9y bSB2ZXJib3NlIGVycm9yIHJlcG9ydGluZyBpZiBub3QgTlVMTC4gUE1EcyBpbml0aWFsaXplIHRo aXMNCj4gKyAqICAgIHN0cnVjdHVyZSBpbiBjYXNlIG9mIGVycm9yIG9ubHkuDQo+ICsgKg0KPiAr ICogQHJldHVybg0KPiArICogICAgMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIHZhbHVl IG90aGVyd2lzZSBhbmQgcnRlX2Vycm5vIGlzIHNldC4NCj4gKyAqLw0KPiArX19ydGVfZXhwZXJp bWVudGFsIGludA0KPiArcnRlX2Zsb3dfdGFibGVfZW50cnlfZGVsKHVpbnQxNl90IHBvcnRfaWQs DQo+ICsJCQkgdWludDMyX3QgdGFibGVfaWQsDQo+ICsJCQkgY29uc3Qgc3RydWN0IHJ0ZV9mbG93 X3RhYmxlX2tleSAqa2V5LA0KPiArCQkJIHN0cnVjdCBydGVfZmxvd19lcnJvciAqZXJyb3IpOw0K PiArDQo+ICsvKioNCj4gKyAqIEB3YXJuaW5nDQo+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMg QVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UuDQo+ICsgKg0KPiArICogUXVlcnkg cnVsZSBoaXQgY291bnRlcnMuDQo+ICsgKg0KPiArICogQHBhcmFtW2luXSBwb3J0X2lkDQo+ICsg KiAgICBQb3J0IGlkZW50aWZpZXIgb2YgdGhlIEV0aGVybmV0IGRldmljZS4NCj4gKyAqIEBwYXJh bVtpbl0gdGFibGVfaWQNCj4gKyAqICAgIFRhYmxlIGlkZW50aWZpZXIuDQo+ICsgKiBAcGFyYW1b aW5dIGtleQ0KPiArICogICAgVGFibGUga2V5IG9iamVjdCB0byBtYXRjaC4NCj4gKyAqIEBwYXJh bVtvdXRdIGNvdW50DQo+ICsgKiAgICBQb2ludGVyIHN0b3JlcyB0aGUgaGl0IGNvdW50ZXJzLg0K PiArICogQHBhcmFtW291dF0gZXJyb3INCj4gKyAqICAgIFBlcmZvcm0gdmVyYm9zZSBlcnJvciBy ZXBvcnRpbmcgaWYgbm90IE5VTEwuIFBNRHMgaW5pdGlhbGl6ZSB0aGlzDQo+ICsgKiAgICBzdHJ1 Y3R1cmUgaW4gY2FzZSBvZiBlcnJvciBvbmx5Lg0KPiArICoNCj4gKyAqIEByZXR1cm4NCj4gKyAq ICAgIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZSBvdGhlcndpc2UgYW5kIHJ0 ZV9lcnJubyBpcyBzZXQuDQo+ICsgKi8NCj4gK19fcnRlX2V4cGVyaW1lbnRhbCBpbnQNCj4gK3J0 ZV9mbG93X3RhYmxlX2VudHJ5X2NvdW50X3F1ZXJ5KHVpbnQxNl90IHBvcnRfaWQsDQo+ICsJCQkJ IHVpbnQzMl90IHRhYmxlX2lkLA0KPiArCQkJCSBjb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfdGFibGVf a2V5ICprZXksDQo+ICsJCQkJIHN0cnVjdCBydGVfZmxvd19xdWVyeV9jb3VudCAqY291bnQsDQo+ ICsJCQkJIHN0cnVjdCBydGVfZmxvd19lcnJvciAqZXJyb3IpOw0KPiArDQo+ICsvKioNCj4gKyAq IEB3YXJuaW5nDQo+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0 aG91dCBwcmlvciBub3RpY2UuDQo+ICsgKg0KPiArICogQ2xvbmUgYSB0YWJsZSBrZXkgb2JqZWN0 Lg0KPiArICoNCj4gKyAqIEBwYXJhbVtpbl0gcG9ydF9pZA0KPiArICogICAgUG9ydCBpZGVudGlm aWVyIG9mIHRoZSBFdGhlcm5ldCBkZXZpY2UuDQo+ICsgKiBAcGFyYW1baW5dIGtleQ0KPiArICog ICAgVGFibGUga2V5IG9iamVjdCB0byBjbG9uZS4NCj4gKyAqIEBwYXJhbVtvdXRdIG5ld19rZXkN Cj4gKyAqICAgIE5ldyB0YWJsZSBrZXkgb2JqZWN0IGJlIGNyZWF0ZWQgYnkgUE1ELg0KPiArICog QHBhcmFtW291dF0gZXJyb3INCj4gKyAqICAgIFBlcmZvcm0gdmVyYm9zZSBlcnJvciByZXBvcnRp bmcgaWYgbm90IE5VTEwuIFBNRHMgaW5pdGlhbGl6ZSB0aGlzDQo+ICsgKiAgICBzdHJ1Y3R1cmUg aW4gY2FzZSBvZiBlcnJvciBvbmx5Lg0KPiArICoNCj4gKyAqIEByZXR1cm4NCj4gKyAqICAgIDAg b24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZSBvdGhlcndpc2UgYW5kIHJ0ZV9lcnJu byBpcyBzZXQuDQo+ICsgKi8NCj4gK19fcnRlX2V4cGVyaW1lbnRhbCBpbnQNCj4gK3J0ZV9mbG93 X3RhYmxlX2tleV9jbG9uZSh1aW50MTZfdCBwb3J0X2lkLA0KPiArCQkJIGNvbnN0IHN0cnVjdCBy dGVfZmxvd190YWJsZV9rZXkgKmtleSwNCj4gKwkJCSBzdHJ1Y3QgcnRlX2Zsb3dfdGFibGVfa2V5 ICoqbmV3X2tleSwNCj4gKwkJCSBzdHJ1Y3QgcnRlX2Zsb3dfZXJyb3IgKmVycm9yKTsNCj4gKw0K PiArLyoqDQo+ICsgKiBAd2FybmluZw0KPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBt YXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlLg0KPiArICoNCj4gKyAqIENsb25lIGEgYWN0 aW9uIG9iamVjdC4NCj4gKyAqDQo+ICsgKiBAcGFyYW1baW5dIHBvcnRfaWQNCj4gKyAqICAgIFBv cnQgaWRlbnRpZmllciBvZiB0aGUgRXRoZXJuZXQgZGV2aWNlLg0KPiArICogQHBhcmFtW2luXSBh Y3Rpb24NCj4gKyAqICAgIEFjdGlvbiBvYmplY3QgdG8gY2xvbmUuDQo+ICsgKiBAcGFyYW1bb3V0 XSBuZXdfYWN0aW9uDQo+ICsgKiAgICBOZXcgYWN0aW9uIG9iamVjdCBiZSBjcmVhdGVkIGJ5IFBN RC4NCj4gKyAqIEBwYXJhbVtvdXRdIGVycm9yDQo+ICsgKiAgICBQZXJmb3JtIHZlcmJvc2UgZXJy b3IgcmVwb3J0aW5nIGlmIG5vdCBOVUxMLiBQTURzIGluaXRpYWxpemUgdGhpcw0KPiArICogICAg c3RydWN0dXJlIGluIGNhc2Ugb2YgZXJyb3Igb25seS4NCj4gKyAqDQo+ICsgKiBAcmV0dXJuDQo+ ICsgKiAgICAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUgb3RoZXJ3aXNlIGFu ZCBydGVfZXJybm8gaXMgc2V0Lg0KPiArICovDQo+ICtfX3J0ZV9leHBlcmltZW50YWwgaW50DQo+ ICtydGVfZmxvd190YWJsZV9hY3Rpb25fY2xvbmUodWludDE2X3QgcG9ydF9pZCwNCj4gKwkJCSAg ICBjb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uICphY3Rpb24sDQo+ICsJCQkgICAgc3RydWN0 IHJ0ZV9mbG93X2FjdGlvbiAqKm5ld19hY3Rpb24sDQo+ICsJCQkgICAgc3RydWN0IHJ0ZV9mbG93 X2Vycm9yICplcnJvcik7DQo+ICsNCj4gKy8qKg0KPiArICogQHdhcm5pbmcNCj4gKyAqIEBiIEVY UEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZS4NCj4g KyAqDQo+ICsgKiBQcmVwYXJlIHRhYmxlIGVudHJ5IGFkZGluZy4NCj4gKyAqDQo+ICsgKiBAcGFy YW1baW5dIHBvcnRfaWQNCj4gKyAqICAgIFBvcnQgaWRlbnRpZmllciBvZiB0aGUgRXRoZXJuZXQg ZGV2aWNlLg0KPiArICogQHBhcmFtW2luXSB0YWJsZV9pZA0KPiArICogICAgVGFibGUgaWRlbnRp Zmllci4NCj4gKyAqIEBwYXJhbVtpbl0ga2V5DQo+ICsgKiAgICBUYWJsZSBrZXkgb2JqZWN0Lg0K PiArICogQHBhcmFtW2luXSBhY3Rpb24NCj4gKyAqICAgIEFjdGlvbiBvYmplY3QuDQo+ICsgKiBA cGFyYW1bb3V0XSBlcnJvcg0KPiArICogICAgUGVyZm9ybSB2ZXJib3NlIGVycm9yIHJlcG9ydGlu ZyBpZiBub3QgTlVMTC4gUE1EcyBpbml0aWFsaXplIHRoaXMNCj4gKyAqICAgIHN0cnVjdHVyZSBp biBjYXNlIG9mIGVycm9yIG9ubHkuDQo+ICsgKg0KPiArICogQHJldHVybg0KPiArICogICAgMCBv biBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlIG90aGVyd2lzZSBhbmQgcnRlX2Vycm5v IGlzIHNldC4NCj4gKyAqLw0KPiArX19ydGVfZXhwZXJpbWVudGFsIGludA0KPiArcnRlX2Zsb3df dGFibGVfZW50cnlfYWRkX3ByZXBhcmUodWludDE2X3QgcG9ydF9pZCwNCj4gKwkJCQkgdWludDMy X3QgdGFibGVfaWQsDQo+ICsJCQkJIHN0cnVjdCBydGVfZmxvd190YWJsZV9rZXkgKmtleSwNCj4g KwkJCQkgc3RydWN0IHJ0ZV9mbG93X3RhYmxlX2FjdGlvbiAqYWN0aW9uLA0KPiArCQkJCSBzdHJ1 Y3QgcnRlX2Zsb3dfZXJyb3IgKmVycm9yKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBAd2FybmluZw0K PiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Ig bm90aWNlLg0KPiArICoNCj4gKyAqIFByZXBhcmUgdGFibGUgZW50cnkgZGVsZXRpb24uDQo+ICsg Kg0KPiArICogQHBhcmFtW2luXSBwb3J0X2lkDQo+ICsgKiAgICBQb3J0IGlkZW50aWZpZXIgb2Yg dGhlIEV0aGVybmV0IGRldmljZS4NCj4gKyAqIEBwYXJhbVtpbl0gdGFibGVfaWQNCj4gKyAqICAg IFRhYmxlIGlkZW50aWZpZXIuDQo+ICsgKiBAcGFyYW1baW5dIGtleQ0KPiArICogICAgVGFibGUg a2V5IG9iamVjdCB0byBtYXRjaC4NCj4gKyAqIEBwYXJhbVtvdXRdIGVycm9yDQo+ICsgKiAgICBQ ZXJmb3JtIHZlcmJvc2UgZXJyb3IgcmVwb3J0aW5nIGlmIG5vdCBOVUxMLiBQTURzIGluaXRpYWxp emUgdGhpcw0KPiArICogICAgc3RydWN0dXJlIGluIGNhc2Ugb2YgZXJyb3Igb25seS4NCj4gKyAq DQo+ICsgKiBAcmV0dXJuDQo+ICsgKiAgICAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8g dmFsdWUgb3RoZXJ3aXNlIGFuZCBydGVfZXJybm8gaXMgc2V0Lg0KPiArICovDQo+ICtfX3J0ZV9l eHBlcmltZW50YWwgaW50DQo+ICtydGVfZmxvd190YWJsZV9lbnRyeV9kZWxfcHJlcGFyZSh1aW50 MTZfdCBwb3J0X2lkLA0KPiArCQkJCSB1aW50MzJfdCB0YWJsZV9pZCwNCj4gKwkJCQkgc3RydWN0 IHJ0ZV9mbG93X3RhYmxlX2tleSAqa2V5LA0KPiArCQkJCSBzdHJ1Y3QgcnRlX2Zsb3dfZXJyb3Ig KmVycm9yKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBAd2FybmluZw0KPiArICogQGIgRVhQRVJJTUVO VEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlLg0KPiArICoNCj4g KyAqIENvbW1pdCBhbGwgcHJlcGFyZWQgYWRkaW5nIGFuZCBkZWxldGlvbiByZXF1ZXN0cy4NCj4g KyAqDQo+ICsgKiBAcGFyYW1baW5dIHBvcnRfaWQNCj4gKyAqICAgIFBvcnQgaWRlbnRpZmllciBv ZiB0aGUgRXRoZXJuZXQgZGV2aWNlLg0KPiArICogQHBhcmFtW291dF0gZXJyb3INCj4gKyAqICAg IFBlcmZvcm0gdmVyYm9zZSBlcnJvciByZXBvcnRpbmcgaWYgbm90IE5VTEwuIFBNRHMgaW5pdGlh bGl6ZSB0aGlzDQo+ICsgKiAgICBzdHJ1Y3R1cmUgaW4gY2FzZSBvZiBlcnJvciBvbmx5Lg0KPiAr ICoNCj4gKyAqIEByZXR1cm4NCj4gKyAqICAgIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJu byB2YWx1ZSBvdGhlcndpc2UgYW5kIHJ0ZV9lcnJubyBpcyBzZXQuDQo+ICsgKi8NCj4gK19fcnRl X2V4cGVyaW1lbnRhbCBpbnQNCj4gK3J0ZV9mbG93X3RhYmxlX3VwZGF0ZV9jb21taXQodWludDE2 X3QgcG9ydF9pZCwNCj4gKwkJCSAgICAgc3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJvcik7DQo+ ICsNCj4gKy8qKg0KPiArICogQHdhcm5pbmcNCj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBB UEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZS4NCj4gKyAqDQo+ICsgKiBUYWJsZSBl bnRyeSBvcGVyYXRpb24gdHlwZS4NCj4gKyAqLw0KPiArDQo+ICtlbnVtIHJ0ZV9mbG93X3RhYmxl X3VwZGF0ZV9vcCB7DQo+ICsJUlRFX0ZMT1dfVEFCTEVfRU5UUllfT1BfQURELCAvKiBBZGQgYW4g ZW50cnkgKi8NCj4gKwlSVEVfRkxPV19UQUJMRV9FTlRSWV9PUF9ERUwsIC8qIERlbGV0ZSBhbiBl bnRyeSAqLw0KPiArCVJURV9GTE9XX1RBQkxFX0VOVFJZX09QX1FSWSwgLyogUXVlcnkgYW4gZW50 cnkgKi8NCj4gK307DQo+ICsNCj4gKy8qKg0KPiArICogQHdhcm5pbmcNCj4gKyAqIEBiIEVYUEVS SU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZS4NCj4gKyAq DQo+ICsgKiBUYWJsZSBlbnRyeSB1cGRhdGUgc3RhdHVzLg0KPiArICovDQo+ICtzdHJ1Y3QgcnRl X2Zsb3dfdGFibGVfdXBkYXRlX3N0YXR1cyB7DQo+ICsJc3RydWN0IHJ0ZV9mbG93X3RhYmxlX2tl eSAqa2V5OyAvKio8IFRhYmxlIGtleSBvYmplY3Qgb2YgdGhlIGVudHJ5ICovDQo+ICsJc3RydWN0 IHJ0ZV9mbG93X3RhYmxlX2FjdGlvbiAqYWN0aW9uOyAvKio8IEFjdGlvbiBvYmplY3Qgb2YgdGhl IGVudHJ5DQo+ICovDQo+ICsJZW51bSBydGVfZmxvd190YWJsZV91cGRhdGVfb3Agb3A7IC8qKjwg T3BlcmF0aW9uIHR5cGUgKi8NCj4gKwllbnVtIHJ0ZV9mbG93X2Vycm9yX3R5cGUgZXJyOyAvKio8 IEVycm9yIHR5cGUgKi8NCj4gK307DQo+ICsNCj4gKy8qKg0KPiArICogQHdhcm5pbmcNCj4gKyAq IEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGlj ZS4NCj4gKyAqDQo+ICsgKiBQdWxsIHRhYmxlIGVudHJ5IHVwZGF0ZSBzdGF0dXMuDQo+ICsgKg0K PiArICogQHBhcmFtW2luXSBwb3J0X2lkDQo+ICsgKiAgICBQb3J0IGlkZW50aWZpZXIgb2YgdGhl IEV0aGVybmV0IGRldmljZS4NCj4gKyAqIEBwYXJhbVtvdXRdIHN0YXRzDQo+ICsgKiAgICBBbiBh cnJheSBzdG9yZXMgdGhlIHN0YXR1cyBvZiBhbGwgZmluaXNoZWQgZW50cnkgYWRkaW5nIC8gZGVs ZXRlDQo+ICsgKiAgICByZXF1ZXN0cy4NCj4gKyAqIEBwYXJhbVtpbl0gc2l6ZQ0KPiArICogICAg U2l6ZSBvZiB0aGUgaW5wdXQgYXJyYXkuDQo+ICsgKiBAcGFyYW1bb3V0XSBlcnJvcg0KPiArICog ICAgUGVyZm9ybSB2ZXJib3NlIGVycm9yIHJlcG9ydGluZyBpZiBub3QgTlVMTC4gUE1EcyBpbml0 aWFsaXplIHRoaXMNCj4gKyAqICAgIHN0cnVjdHVyZSBpbiBjYXNlIG9mIGVycm9yIG9ubHkuDQo+ ICsgKg0KPiArICogQHJldHVybg0KPiArICogICAgPj0wIG9uIHN1Y2Nlc3MsIGluZGlhdGVzIHRo ZSBudW1iZXIgb2Ygc3RhdHVzIGJlIHB1bGxlZC4NCj4gKyAqICAgIEEgbmVnYXRpdmUgZXJybm8g dmFsdWUgb3RoZXJ3aXNlIGFuZCBydGVfZXJybm8gaXMgc2V0Lg0KPiArICovDQo+ICtfX3J0ZV9l eHBlcmltZW50YWwgaW50DQo+ICtydGVfZmxvd190YWJsZV91cGRhdGVfc3RhdHVzX3B1bGwodWlu dDE2X3QgcG9ydF9pZCwNCj4gKwkJCQkgIHN0cnVjdCBydGVfZmxvd190YWJsZV91cGRhdGVfc3Rh dHVzICpzdGF0cywNCj4gKwkJCQkgIGludCBzaXplLA0KPiArCQkJCSAgc3RydWN0IHJ0ZV9mbG93 X2Vycm9yICplcnJvcik7DQo+ICsNCj4gKy8qKg0KPiArICogQHdhcm5pbmcNCj4gKyAqIEBiIEVY UEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZS4NCj4g KyAqDQo+ICsgKiBHZXQgUE5BIHBvcnQgaWRlbnRpZmllci4NCj4gKyAqDQo+ICsgKiBAcGFyYW1b aW5dIHBvcnRfaWQNCj4gKyAqICAgIFBvcnQgaWRlbnRpZmllciBvZiB0aGUgRXRoZXJuZXQgZGV2 aWNlLg0KPiArICogQHBhcmFtW2luXSBldGhkZXZfcG9ydF9pZA0KPiArICogICAgRXRoZGV2IHBv cnQgaWRlbnRpZmllciBtYXBzIHRvIHRoZSByZXF1aXJlZCBQTkEgcG9ydC4NCj4gKyAqIEBwYXJh bVtvdXRdIHBuYV9wb3J0X2lkDQo+ICsgKiAgICBQb2ludGVyIHN0b3JlcyB0aGUgUE5BIHBvcnQg aWRlbnRpZmllci4NCj4gKyAqIEBwYXJhbVtvdXRdIGVycm9yDQo+ICsgKiAgICBQZXJmb3JtIHZl cmJvc2UgZXJyb3IgcmVwb3J0aW5nIGlmIG5vdCBOVUxMLiBQTURzIGluaXRpYWxpemUgdGhpcw0K PiArICogICAgc3RydWN0dXJlIGluIGNhc2Ugb2YgZXJyb3Igb25seS4NCj4gKyAqDQo+ICsgKiBA cmV0dXJuDQo+ICsgKiAgICAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUgb3Ro ZXJ3aXNlIGFuZCBydGVfZXJybm8gaXMgc2V0Lg0KPiArICovDQo+ICtfX3J0ZV9leHBlcmltZW50 YWwgaW50DQo+ICtydGVfZmxvd19wbmFfcG9ydF9nZXQodWludDE2X3QgcG9ydF9pZCwNCj4gKwkJ ICAgICAgdWludDE2X3QgZXRoZGV2X3BvcnRfaWQsDQo+ICsJCSAgICAgIHVpbnQzMl90ICpod19w b3J0X2lkLA0KPiArCQkgICAgICBzdHJ1Y3QgcnRlX2Zsb3dfZXJyb3IgKmVycm9yKTsNCj4gKw0K PiArLyoqDQo+ICsgKiBAd2FybmluZw0KPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBt YXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlLg0KPiArICoNCj4gKyAqIEdldCBhIFBOQSBx dWV1ZSBpZGVudGlmZXIgZnJvbSBhIGV0aGRldiBSeCBxdWV1ZS4NCj4gKyAqDQo+ICsgKiBAcGFy YW1baW5dIHBvcnRfaWQNCj4gKyAqICAgIFBvcnQgaWRlbnRpZmllciBvZiB0aGUgRXRoZXJuZXQg ZGV2aWNlLg0KPiArICogQHBhcmFtW2luXSBldGhkZXZfcG9ydF9pZA0KPiArICogICAgRXRoZGV2 IHBvcnQgaWRlbnRpZmllciB0aGUgUnggcXVldWUgYmVsb25ncyB0by4NCj4gKyAqIEBwYXJhbVtp bl0gZXRoZGV2X3F1ZXVlX2lkDQo+ICsgKiAgICBFdGhkZXYgUnggcXVldWUgaW5kZXggdGhhdCBt YXBzIHRvIHRoZSByZXF1aXJlZCBQTkEgcXVldWUgaWRlbnRpZmllci4NCj4gKyAqIEBwYXJhbVtv dXRdIHBuYV9xdWV1ZV9pZA0KPiArICogICAgUG9pbnRlciBzdG9yZXMgdGhlIFBOQSBxdWV1ZSBp ZGVudGlmaWVyLg0KPiArICogQHBhcmFtW291dF0gZXJyb3INCj4gKyAqICAgIFBlcmZvcm0gdmVy Ym9zZSBlcnJvciByZXBvcnRpbmcgaWYgbm90IE5VTEwuIFBNRHMgaW5pdGlhbGl6ZSB0aGlzDQo+ ICsgKiAgICBzdHJ1Y3R1cmUgaW4gY2FzZSBvZiBlcnJvciBvbmx5Lg0KPiArICoNCj4gKyAqIEBy ZXR1cm4NCj4gKyAqICAgIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZSBvdGhl cndpc2UgYW5kIHJ0ZV9lcnJubyBpcyBzZXQuDQo+ICsgKi8NCj4gK19fcnRlX2V4cGVyaW1lbnRh bCBpbnQNCj4gK3J0ZV9mbG93X3BuYV9yeF9xdWV1ZV9nZXQodWludDE2X3QgcG9ydF9pZCwNCj4g KwkJCSAgdWludDE2X3QgZXRoZGV2X3BvcnRfaWQsDQo+ICsJCQkgIHVpbnQxNl90IGV0aGRldl9x dWV1ZV9pZCwNCj4gKwkJCSAgdWludDMyX3QgKmh3X3F1ZXVlX2lkLA0KPiArCQkJICBzdHJ1Y3Qg cnRlX2Zsb3dfZXJyb3IgKmVycm9yKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBAd2FybmluZw0KPiAr ICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90 aWNlLg0KPiArICoNCj4gKyAqIEdldCBhIFBOQSBxdWV1ZSBpZGVudGlmZXIgZnJvbSBhIGV0aGRl diBUeCBxdWV1ZS4NCj4gKyAqDQo+ICsgKiBAcGFyYW1baW5dIHBvcnRfaWQNCj4gKyAqICAgIFBv cnQgaWRlbnRpZmllciBvZiB0aGUgRXRoZXJuZXQgZGV2aWNlLg0KPiArICogQHBhcmFtW2luXSBl dGhkZXZfcG9ydF9pZA0KPiArICogICAgRXRoZGV2IHBvcnQgaWRlbnRpZmllciB0aGUgVHggcXVl dWUgYmVsb25ncyB0by4NCj4gKyAqIEBwYXJhbVtpbl0gZXRoZGV2X3F1ZXVlX2lkDQo+ICsgKiAg ICBFdGhkZXYgVHggcXVldWUgaW5kZXggdGhhdCBtYXBzIHRvIHRoZSByZXF1aXJlZCBQTkEgcXVl dWUgaWRlbnRpZmllci4NCj4gKyAqIEBwYXJhbVtvdXRdIHBuYV9xdWV1ZV9pZA0KPiArICogICAg UG9pbnRlciBzdG9yZXMgdGhlIFBOQSBxdWV1ZSBpZGVudGlmaWVyLg0KPiArICogQHBhcmFtW291 dF0gZXJyb3INCj4gKyAqICAgIFBlcmZvcm0gdmVyYm9zZSBlcnJvciByZXBvcnRpbmcgaWYgbm90 IE5VTEwuIFBNRHMgaW5pdGlhbGl6ZSB0aGlzDQo+ICsgKiAgICBzdHJ1Y3R1cmUgaW4gY2FzZSBv ZiBlcnJvciBvbmx5Lg0KPiArICoNCj4gKyAqIEByZXR1cm4NCj4gKyAqICAgIDAgb24gc3VjY2Vz cywgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZSBvdGhlcndpc2UgYW5kIHJ0ZV9lcnJubyBpcyBzZXQu DQo+ICsgKi8NCj4gK19fcnRlX2V4cGVyaW1lbnRhbCBpbnQNCj4gK3J0ZV9mbG93X3BuYV90eF9x dWV1ZV9nZXQodWludDE2X3QgcG9ydF9pZCwNCj4gKwkJCSAgdWludDE2X3QgZXRoZGV2X3BvcnRf aWQsDQo+ICsJCQkgIHVpbnQxNl90IGV0aGRldl9xdWV1ZV9pZCwNCj4gKwkJCSAgdWludDMyX3Qg Kmh3X3F1ZXVlX2lkLA0KPiArCQkJICBzdHJ1Y3QgcnRlX2Zsb3dfZXJyb3IgKmVycm9yKTsNCj4g KyNlbmRpZg0KPiAtLQ0KPiAyLjMxLjENCg0K