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 EADC642CBF; Thu, 15 Jun 2023 04:25:21 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id CBDBF42DC8; Thu, 15 Jun 2023 04:25:21 +0200 (CEST) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mails.dpdk.org (Postfix) with ESMTP id B304642DB5; Thu, 15 Jun 2023 04:25:19 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1686795920; x=1718331920; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=unbQXFg7CvtFDXePtVbB3fDeVQzYqKlRm3eJiKY/JAY=; b=RImfHiDQyhZBRjdiv7Iiiey5pJNc12ydVivquC/acaI1NiRCcTM+Nn4m PveXEpHF7ZnqvZSvIuqEiSIX14P3ukm+IzsGi1wcy4ZAd7o4ALwthNCX4 I9SCMiIb7hes+cuBjvczbpcU5jx49S2yN7P306/ej0aWiRMBuVHUbsZH7 bKEg+qUGbx1w9dFbjiHwjJwRwkWrns/jT1ODPHX5gzGIrrYYHptyD9Tr/ 6XV1D0cOIqtfBfAob6uli8dPEd82DrTB4uuUpCrbLLQ1Vz09KspCHEQJt bnXM+P0M8RKgSWx1cNRJV0+LimcAUaUOhD3UKOnbM0YpQi3gMc2GgwO4L w==; X-IronPort-AV: E=McAfee;i="6600,9927,10741"; a="338420892" X-IronPort-AV: E=Sophos;i="6.00,243,1681196400"; d="scan'208";a="338420892" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Jun 2023 19:25:07 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10741"; a="742072397" X-IronPort-AV: E=Sophos;i="6.00,243,1681196400"; d="scan'208";a="742072397" Received: from orsmsx603.amr.corp.intel.com ([10.22.229.16]) by orsmga008.jf.intel.com with ESMTP; 14 Jun 2023 19:25:06 -0700 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) by ORSMSX603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Wed, 14 Jun 2023 19:25:05 -0700 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx610.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23 via Frontend Transport; Wed, 14 Jun 2023 19:25:05 -0700 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.168) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.23; Wed, 14 Jun 2023 19:25:05 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FfCbUJRlIMYB++iSS4HNt238wsda+qMFNx8m9AVQAZAANY3QwJGbelIISIPDaxOttFVmMq8VkvqwIHEbvUxg77CYuyDJB4pHkGT3yZpFGsiHEijEqbCwcPDUrB+Zuqm5nwKAZQLbIzz8cWvHoXlpQoia+40HG5hRvmaFSdS5CIsLzys3k4SnXF+UJuLLF6oDF3Lf89uUoKHezMDJ1bo2Z6EyvMKM/sry5SA4TAoeEGGi0a9dJRIUicFMTrvq6S3D4NRBAfbkftiBs2/SNxjnIS1fVpS4F7cuSZrilj8WA2RdqGy8xmsvrpiJkUPJd+ZxVRPmotrRFNcASbWJA31cAA== 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=unbQXFg7CvtFDXePtVbB3fDeVQzYqKlRm3eJiKY/JAY=; b=huyCBTcIU6m9fm+sGDow2Sdi0Gxd/hfSamD6RZwkusd+BUYvdiB17ywyQ/aa+JnFRP/P46UdQoFrkQaQYaLiPR+40e6MaWA/SUS7JfBIsI797cZDjZ/DnB6OqGTAcStdARAaKzHrPE60brf7m30PKaacM5rE9K3l1iyORqYi2kYe0qEZOn3eTTdoEnG5ucb9/h+G4WrVp26PE0lMpMVPQosK9R4JLvHOqDZwKt5aV+xGZNZwInihMxNItIbdNrWTT8Ek7zlVr6iLrJqfY2nhOTvKGfW2M74hRuTBqEEyxuVady5awqHyNHiutSLXYC3bvPPjsIzSUq/VclhYSomNcw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from DM4PR11MB5994.namprd11.prod.outlook.com (2603:10b6:8:5d::20) by SA1PR11MB7112.namprd11.prod.outlook.com (2603:10b6:806:2b7::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6455.44; Thu, 15 Jun 2023 02:25:02 +0000 Received: from DM4PR11MB5994.namprd11.prod.outlook.com ([fe80::e570:d9a7:df1b:1589]) by DM4PR11MB5994.namprd11.prod.outlook.com ([fe80::e570:d9a7:df1b:1589%6]) with mapi id 15.20.6477.037; Thu, 15 Jun 2023 02:25:01 +0000 From: "Zhang, Qi Z" To: Ori Kam , "NBU-Contact-Thomas Monjalon (EXTERNAL)" , "david.marchand@redhat.com" , "Richardson, Bruce" , "jerinj@marvell.com" , "ferruh.yigit@amd.com" CC: "Mcnamara, John" , "Zhang, Helin" , "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: AQHZnNl/YukvwyUJXUylZdiSr9fMFq+Kou2AgABcbMA= Date: Thu, 15 Jun 2023 02:25:01 +0000 Message-ID: References: <20230612111539.462084-1-qi.z.zhang@intel.com> In-Reply-To: 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=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DM4PR11MB5994:EE_|SA1PR11MB7112:EE_ x-ms-office365-filtering-correlation-id: 3197f6ca-21f6-4202-38b3-08db6d47b91a x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: iUDIqd4DXTu7fDJiMc4AWrC3+5SDibPTi+/Q6huOqNvaoqt/xbzT57VYa62gQfB50JwP1YwrvmQYfONPTj8YlqCU3ITcO1eqv1IR+ZyVH9BgwZq93v89M5gYSga41YrzUfqyFJFEPAUIFBeYPqFyF+iPCBFZiF9Dl0H0WomM3InPsqhQiyjnuZuGYrT9ZcH5GpnTpsQvLNXZ3n5HTUM/fn+no718QorJwLl+n+YQI3sJZrJNDyqJbSrnV/s3LzjkrRA+BZ4frteC6ACdpgjhtmQo7MHJikYLeEWoKGJzkN6AmanM/gBw/FA6yxIMs3d54XaoWtkn9d7XUB55iQjJiKJA0yxJPjRviz/3BfYIB41+2sHJz3kCQ61weIe9RZk58gzlefzxYfRikjDycJChxYYn5G343/Vz52lHF90Mo9OKfOBoTzbOba1AnnBoVPCpDL1brR4KrLkj020uF1uR/ATEEtDNh2Xq1qewo0Mg72icXYyiUsb3+dPDfejYE/YD5NSmRIp2mse0ATTjEwri9uVmlXl+x4R03n18Z3AOxARg0fZBFpnEdzrM6/RkvmcpoAvM8WilQgomAr9+YOhd5BrQ/oDuwcRyeqcQu0ze2kejYjcEdDvO5tRkmQMnYZXVvcXw374YElP3GgjqE+4o/g== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM4PR11MB5994.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(376002)(346002)(39860400002)(366004)(396003)(136003)(451199021)(54906003)(66556008)(66946007)(64756008)(66476007)(76116006)(66446008)(66899021)(8676002)(5660300002)(8936002)(52536014)(110136005)(71200400001)(478600001)(4326008)(41300700001)(966005)(316002)(7696005)(55016003)(122000001)(38100700002)(82960400001)(6506007)(2906002)(186003)(53546011)(9686003)(38070700005)(30864003)(83380400001)(86362001)(26005)(33656002)(559001)(579004); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?NU42eDJYanBhVTdXYi9sa0k3Nlp2WVB0UUhvTWprY0hjKzJ6MENvSFJKTThH?= =?utf-8?B?SDZjZi80WmcxR0J3b0lkbkRCbTlhaG5ScisrdWJ5Y2FpNG50clFVbmcvaldh?= =?utf-8?B?NnVVU21lSGZWYzJKR1RZQk9UMW55Wm50S1c5TWp3VnE0MVlmQlEyZFN2YWRQ?= =?utf-8?B?a1hwUWFGd09BYVc0UE9pblA3ZnBlN1VleHIrRllmQmljcDdlbXovYWNSMVFm?= =?utf-8?B?Z1pSbHluaDN0QnR4UVl1bUFjTERBdUlnWHUvVnFBR0wwTXVmemhqVGtSdElF?= =?utf-8?B?djZIWEp0UDQzUzZUOUd2Yk03Y2szUXp6eG5LS2ZyajM2UEtlRk5ERnFDYTZ1?= =?utf-8?B?a21ieU4zWjJGQVlVb01xN1N4RWtteHAzSmNOYU93V2l6VVpoUHVvdzhMOTBS?= =?utf-8?B?VDl1RGhtaStiRFFvcTQyYjFXRStBWE5rS2hyenp1RDh5WGhvNFNYejEvSER4?= =?utf-8?B?bWJKU21UTjU5OEFyaVc1YnNWYnYrM1Z4aTZPaXFQekhzWlYxcmw5OWRWMmMv?= =?utf-8?B?OGtNOWJUZVdkb3N1RHpsNTNUVEtNcTlra0ZoL2ZRK1V5Yk8wRHNSM2JwVEx6?= =?utf-8?B?ZWx4WUhpS25GS0dtdGNhcUdrcWlrM0Z5ZEdqMnlXZHZYakRaRUZnUkltSXRq?= =?utf-8?B?MGkyWW9LQ01UeTF1akJ0eGtKWndNRk5DOGREMU9iVzhub2tTOFUvdGJhVG9v?= =?utf-8?B?WXl3UzBTL0Q4UldBczdTN3dGSllWOUFMOXZTUG9RZE9ZenZaZlJDWmVsQlNJ?= =?utf-8?B?cWVFVlJBTXhvUENtclRCL2RjRE9rN085WkU3bTRLRDY4NTBvczlxNkdwUFIw?= =?utf-8?B?YUU3ZzY4dGEzV2pYTE5YUzlFK05uYzR5d0p2Qk5oeGhNSXdLUThGeWhDS29w?= =?utf-8?B?OE1yWUtVbEFoNnhpQ2JhWXJrcHB4MWorM0ljYzVWTzRPa0ZjQ0Z1a1FaT3BN?= =?utf-8?B?c2JNanRFV3NiVUd0NG5YV094cjdwanN5MFlDREpiTWw5T0dBR1RBUmJheEdP?= =?utf-8?B?STQ5U0dIRTZldEZSUEpyYkx5aWgrWGxVb1ZFb1h2bHhpTGdYMXBGSjNSbEgz?= =?utf-8?B?YVhyamVyR1EvVWRLVW1OMFgzMzg5Z0I5Z1Jnb2I4clpzYnlwdGZJemtUOVRR?= =?utf-8?B?OUduR3M2UVdFcFFkMEhISlJXeDRQZlZWMCs3N0dVa2hyQmduRjZzSE5MYkhi?= =?utf-8?B?L2JUTHdwWUh3Y3VJeTQvSThrdHh6V1o4cTVaM2xoSUp4OFlMS2FJdG8vOTdU?= =?utf-8?B?UWFucGlkd2hGbGJpUE9GNXlQb0ZQemNOYVZKNjhlMkVjbUdFQ21QNFErdzJ5?= =?utf-8?B?anZxa0p6OHNQaGZGNUllQ2JzeXFILzFCL2RmZ3AvcTR1UVYxalZCbVgyendE?= =?utf-8?B?ZllzTEprUFJHbTNZYzk1OW80U28wZ2lRVjZpZTJUdnZKTXZkSWZPYVFVZ2s3?= =?utf-8?B?UC91WktRRHpDcFpUUGVOSEVFQTgxN09MaVVpWlBtT3N1ZGRKeHVaMkJOb2p2?= =?utf-8?B?ZlE2L2JvSDAyQ1hXMFYxTThydVNzVGZubThVNzZTMUh1OWhVU1JFckl6NU15?= =?utf-8?B?c1BZNXI2V3N5MU4rRzMyMllIS0hXUGVxYVNrbjM1NGRNL2M3cmNSNXNEWEdK?= =?utf-8?B?YU9ZdUNhVURmemx4a0R4L0UvOTkzdXJ4cXNsNjhFbmdoa2VXb1FNcE42bUNZ?= =?utf-8?B?U1NxeW1Ta292bXNxdlZHSG9XUnJiU3c5RlBxNDY3LzVLNmY5bHVvM0tZZFN6?= =?utf-8?B?WG15M0cxSzNoOVZTQjExYVU3NVE1cVZiV1pGVVI3SUNzVktwZ1R6MmNGZXE3?= =?utf-8?B?anZYcjYxN0ZlRkhVMUlRK0Q5NWYwU2lNVis0Rmw3UGRaU2xaMm0rU1YrWlFD?= =?utf-8?B?blUrbFRIM3VwVWw4VzdITFRXR29VUmJORFprbmNXVTUyUE95UmFGMW9OLzJ6?= =?utf-8?B?d2RxdktiZXMrZnRJZWZkQUtPVi9DNEVuSkV2cDczM2tESGZTNWtWZjR1Tm9G?= =?utf-8?B?Wi8xaEkxNjFUN2lmM2xsdWN5NS9lK2NnRmR5L0dRa24vQ0NNU0QycEhzayt5?= =?utf-8?B?ekJTZFJFV1NqdTU3Y2pZYUpOTXc5VGFObDdkUVp5MERrVVIvdjc5ZUNhOXNY?= =?utf-8?Q?zlEOgedyOnteracxRtCuH4gdS?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM4PR11MB5994.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3197f6ca-21f6-4202-38b3-08db6d47b91a X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Jun 2023 02:25:01.8502 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: qYsjr65PFYeuhcu/NPMd1b5d60D//dEseSsJ5ZHq6xG7XoDWU7AduNffyJEfVUyZoXWmQzgp5NaxQ3Dng6cnWg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR11MB7112 X-OriginatorOrg: intel.com 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 SGkgT3JpOg0KDQoJVGhhbmsgeW91IGZvciB5b3VyIHJldmlldyENCglDb21tZW50IGlubGluZS4N CglQbGVhc2UgbGV0IG1lIGtub3cgaWYgYW55dGhpbmcgSSBtaXNzZWQuDQoNClRoYW5rcw0KUWkN Cg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBPcmkgS2FtIDxvcmlrYUBu dmlkaWEuY29tPg0KPiBTZW50OiBUaHVyc2RheSwgSnVuZSAxNSwgMjAyMyAyOjMxIEFNDQo+IFRv OiBaaGFuZywgUWkgWiA8cWkuei56aGFuZ0BpbnRlbC5jb20+OyBOQlUtQ29udGFjdC1UaG9tYXMg TW9uamFsb24NCj4gKEVYVEVSTkFMKSA8dGhvbWFzQG1vbmphbG9uLm5ldD47IGRhdmlkLm1hcmNo YW5kQHJlZGhhdC5jb207DQo+IFJpY2hhcmRzb24sIEJydWNlIDxicnVjZS5yaWNoYXJkc29uQGlu dGVsLmNvbT47IGplcmluakBtYXJ2ZWxsLmNvbTsNCj4gZmVycnVoLnlpZ2l0QGFtZC5jb20NCj4g Q2M6IE1jbmFtYXJhLCBKb2huIDxqb2huLm1jbmFtYXJhQGludGVsLmNvbT47IFpoYW5nLCBIZWxp bg0KPiA8aGVsaW4uemhhbmdAaW50ZWwuY29tPjsgdGVjaGJvYXJkQGRwZGsub3JnOyBkZXZAZHBk ay5vcmcNCj4gU3ViamVjdDogUkU6IFtSRkNdIGxpYi9ldGhkZXY6IGludHJvZHVjZSB0YWJsZSBk cml2ZW4gQVBJcw0KPiANCj4gSGkgUWksDQo+IA0KPiANCj4gMS4gaXQgbWF5IGJlIHVzZWZ1bCB0 byBnZXQgc29tZSBnZW5lcmFsIGNhbGxpbmcgZmxvdyB3aGF0IGNvbWVzIGZyb20gdGhlDQo+IGFw cGxpY2F0aW9uLCB3aGF0IGNvbWVzIGZyb20gdGhlIGNvbXBpbGVyLg0KPiBTaW1wbGUgZXhhbXBs ZSB3aWxsIGJlIGdvb2QuDQoNCkFuIGV4YW1wbGUgb2YgZGVjYXAgVlhMQU4gVENQIGZsb3cgaXMg ZXhwbGFpbmVkIGluIHByb2JsZW0gc3RhdGVtZW50IChodHRwOi8vbWFpbHMuZHBkay5vcmcvYXJj aGl2ZXMvZGV2LzIwMjMtTWF5LzI2NzcxOS5odG1sKQ0KY292ZXJpbmcgdGhlIGZvbGxvd2luZyBp bmZvcm1hdGlvbi4NCg0KMS4gdGhlIHA0IHNvdXJjZSBjb2RlLCB0aGUgZGVmaW5pdGlvbiBvZiB0 aGUgdGFibGUgYW5kIGFjdGlvbnMNCjIuIHRoZSB0YWJsZSAvIGFjdGlvbiBoaW50cyBnZW5lcmF0 ZWQgYnkgdGhlIGNvbXBpbGVyLCBkZXRhaWxzIHRvIGVhY2ggZmllbGRzLg0KMy4gSG93IHRoZSBD b250cm9sIFBsYW5lIEFwcGxpY2F0aW9uIHV0aWxpemVzIHRoZSBQNCBSdW50aW1lIEFQSSB0byBw cm9ncmFtIHRoZSBydWxlIHdpdGggdGhlIHJlc3BlY3RpdmUgdGFibGUgYW5kIGFjdGlvbiBJRHMN Cg0KVGhlIERQREsgUE1EIGlzIHJlc3BvbnNpYmxlIGZvciBsb2FkaW5nIHRoZSBoaW50cyBnZW5l cmF0ZWQgYnkgdGhlIGNvbXBpbGVyLiANClRoaXMgZW5hYmxlcyB0aGUgUE1EIHRvIGFjY2VwdCBy ZXF1ZXN0cyBmcm9tIHRoZSBQNCBSdW50aW1lIGFuZCByZWplY3QgYW55IGluY29tcGF0aWJsZSBy ZXF1ZXN0Lg0KDQo+IA0KPiAyLiBJIGdhdmUgc29tZSBjb21tZW50cyBhYm91dCBuYW1lcyBidXQg dGhvc2UgYXJlIGluIGxvdyBwcmlvcml0eSwgZmlyc3QsIHdlDQo+IG5lZWQgdG8gdW5kZXJzdGFu ZCB3aGF0IGlzIHRoZSBiYXNpYyBmbG93Lg0KPiANCj4gMy4gaW4geW91ciBzdWdnZXN0ZWQgQVBJ IHRoZXJlIGlzIG5vIHVzZSBvZiBSVEVfRkxPVyBhbmQgSSBhc3N1bWUgdGhhdCB0aGUNCj4gUE1E IGltcGxlbWVudGF0aW9uIHdpbGwganVzdCBvZmZsb2FkIHRoZSBydWxlcyB0byB0aGUgSFcuDQo+ IGlmIHNvIHRoaXMgd2lsbCByZXN1bHQgaW4gZHVwbGljYXRlIEFQSXMgYW5kIG1haW50ZW5hbmNl IGlzc3Vlcy4NCj4gSSB0aGluayB3ZSBzaG91bGQgbGV2ZXJhZ2UgdGhlIGZhY3QgdGhhdCBQNCBo YXMgYSBjb21wbGllciB3aGljaCBjYW4gZ2l2ZXMgdXMNCj4gYWxsIHRoZSBpbnB1dCB3ZSBuZWVk Lg0KDQpUaGUgcHVycG9zZSBvZiB0aGUgUkZDICBpcyB0byBpbnRyb2R1Y2UgYSBmcm9udC1lbmQg QVBJIHRoYXQgYWRkcmVzc2VzIHRoZSBwcmV2aW91c2x5IG1lbnRpb25lZCBwcm9ibGVtIHN0YXRl bWVudC4NCg0KSW4gb3JkZXIgdG8gZmFjaWxpdGF0ZSBQNCBydW50aW1lLCB0aGUgaW1wbGVtZW50 YXRpb24gb2YgYSBmcm9udC1lbmQgdGFibGUtZHJpdmVuIEFQSSBzaG93cyBwcm9taXNlLiANClRo aXMgQVBJIHNpbXBsaWZpZXMgdGhlIHVzZXIncyB0YXNrIG9mIGVuYWJsaW5nIGEgUDQgcnVudGlt ZSBiYWNrZW5kLCBlbGltaW5hdGluZyB0aGUgbmVlZCB0byBoYW5kbGUgdGhlIHRyYW5zbGF0aW9u IG9mIHRhYmxlIGFuZCBhY3Rpb24gSURzIGludG8gdGhlIHJ0ZV9mbG93IHByb3RvY29scy4NCg0K U29tZSBjdXN0b21lcnMgbWF5IHN0aWxsIHByZWZlciB0aGUgcHJvdG9jb2wtYmFzZWQgcnRlX2Zs b3cgYXBwcm9hY2gsIGVzcGVjaWFsbHkgaWYgdGhleSBkbyBub3QgbWFrZSB1c2Ugb2YgUDQgcnVu dGltZS4NClNvLCBJIGJlbGlldmUgdGhhdCB0aGlzIHByb3Bvc2FsIHNlcnZlcyBhcyBhbiBleHRl bnNpb24gdG8gdGhlIHJ0ZV9mbG93IEFQSSwgcHJvdmlkaW5nIHN1cHBvcnQgZm9yIG5ldyB1c2Ug Y2FzZSwgYnV0IG5vdCBhIGR1cGxpY2F0ZSBpbXBsZW1lbnRhdGlvbi4NCg0KPiANCj4gNC4gRnJv bSByZWFkaW5nIHRoZSBjb2RlLCBJIGhhdmUgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgY29tcGxp ZXIgcHJvZ3JhbXMNCj4gdGhlIEhXIGFuZCB0aGUgUE1EIHJlYWRzIHRoaXMgaW5mbyBhbSBJIGNv cnJlY3Q/DQoNClllcywgdHlwaWNhbGx5LCB0aGUgY29tcGlsZXIgY29tcGlsZXMgdGhlIFA0IHNv dXJjZSBjb2RlIGludG8gYSBiaW5hcnkgZm9ybWF0IHRoYXQgaXMgdGhlbiBwcm9ncmFtbWVkIGlu dG8gdGhlIGhhcmR3YXJlLiANCkluIGFkZGl0aW9uLCB0aGUgY29tcGlsZXIgYWxzbyBwcm9kdWNl cyBhIGhpbnQgZmlsZSwgb2Z0ZW4gaW4gSlNPTiBmb3JtYXQsIHdoaWNoIHNlcnZlcyBhcyBhIGd1 aWRlIGZvciB0aGUgUE1ELg0KDQo+IA0KPiA1LiBhcyBJIHNlZSBpdCB0aGVyZSBzaG91bGQgYmUg c29tZSBjb250cm9sIHN0YWdlIHdoZXJlIGV2ZXJ5dGhpbmcgaXMNCj4gY29uZmlndXJlZCBhbmQg dGhlbiBhcHBsaWNhdGlvbiBqdXN0IG9mZmxvYWQgdGhlIHJ1bGVzLCB0aGVyZSBpcyBubyByZWFz b24gdG8NCj4gcXVlcnkgZGF0YSBhYm91dCBrZXlzIGFuZCB0YWJsZXMuDQoNCkkgYXNzdW1lIHlv dSBhcmUgcXVlc3Rpb24gYWJvdXQgdGhlIGxlYXJuaW5nIEFQSSB3aGljaCBJIHRoaW5rIGl0IG9m ZmVycyBiZWxvdyBwb3RlbnRpYWwgYmVuZWZpdHMuIA0KDQoxLiBJdCBhaWRzIGluIGRpYWdub3N0 aWNzLCBzdWNoIGFzIHVzaW5nIHRlc3RwbWQgdG8gZXhhbWluZSB0YWJsZXMsIGRlYnVnIGVudHJp ZXMsIG9yIGV4cG9zZSBwaXBlbGluZSBkZWZpbml0aW9uIHRocm91Z2ggdGVsZW1ldHJpYyAuLi4N CjIuIEl0IGFzc2lzdHMgYXBwbGljYXRpb25zIGluIG5lZ290aWF0aW5nIHdpdGggaGFyZHdhcmUg d2hlbiBtYWludGFpbmluZyBkaWZmZXJlbnQgcGlwZWxpbmUgZGVwbG95bWVudHMsIGVuc3VyaW5n IGNvbXBhdGliaWxpdHkuDQoNCj4gDQo+IDYuIEkgZGlkbid0IGZ1bGx5IHJldmlldyB0aGUgQVBJ IGJlbG93IGJ1dCBoYXZlIHNvbWUgY29tbWVudHMgaW5saW5lLg0KPiANCj4gDQo+IFRoYW5rcywN Cj4gT3JpDQo+IA0KPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gRnJvbTogUWkg WmhhbmcgPHFpLnouemhhbmdAaW50ZWwuY29tPg0KPiA+IFNlbnQ6IE1vbmRheSwgSnVuZSAxMiwg MjAyMyAyOjE2IFBNDQo+ID4NCj4gPiBUaGUgcGF0Y2ggYWRkcmVzc2VzIHRoZSBwcm9ibGVtIHN0 YXRlbWVudCBbMV0gYnkgaW50cm9kdWNpbmcgYSBzZXQgb2YNCj4gPiAiVGFibGUtRHJpdmVuIiBB UElzIGluIHJ0ZV9mbG93Lg0KPiA+DQo+ID4gVGhpcyBhcHByb2FjaCBpcyBpbnNwaXJlZCBieSBw NGxhbmQvdGRpIFsyXSBhbmQgaXMgcGFydGljdWxhcmx5DQo+ID4gYmVuZWZpY2lhbCBmb3IgUDQg cHJvZ3JhbW1hYmxlIG5ldHdvcmsgY29udHJvbGxlciBkcml2ZXJzLg0KPiA+IEl0IHByb3ZpZGVz IHRoZSBmb2xsb3dpbmcgYWR2YW50YWdlczoNCj4gPg0KPiA+ICogRWFzeSBpbnRlZ3JhdGlvbiBv ZiBEUERLIGFzIGEgUDQgcnVudGltZSBbM10gYmFja2VuZC4NCj4gPiAqIFJlZHVjZWQgZWZmb3J0 IGZvciBQTURzIHRvIGVuYWJsZSBmbG93IG9mZmxvYWRpbmcgd2hlbiB0aGUgcGFja2V0DQo+ID4g ICBwcm9jZXNzaW5nIHVuaXQgaXMgYWJzdHJhY3RlZCBhcyBhIHBpcGVsaW5lIG9mIG1hdGNoL2Fj dGlvbiB0YWJsZXMNCj4gPiAgIGluIGxvdy1sZXZlbCBkcml2ZXJzLg0KPiA+DQo+ID4gVGhlIG5l dyBBUElzIGNhbiBiZSBjYXRlZ29yaWVkIGludG8gNSB0eXBlcw0KPiA+DQo+ID4gMS4gTGVhcm5p bmcgQVBJcw0KPiA+DQo+ID4gICAgUmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgYXR0cmlidXRl cyBzdXBwb3J0ZWQgYnkgZWFjaCB0YWJsZQ0KPiA+ICAgIGFuZCBhY3Rpb24gc3BlY2lmaWNhdGlv biBpbiB0aGUgY3VycmVudCBwaXBlbGluZS4NCj4gPg0KPiA+ICAgIHJ0ZV9mbG93X3RhYmxlX2xp c3RfZ2V0DQo+ID4gICAgcnRlX2Zsb3dfdGFibGVfaW5mb19nZXQNCj4gPiAgICBydGVfZmxvd190 YWJsZV9pbmZvX2dldF9ieV9uYW1lDQo+ID4gICAgcnRlX2Zsb3dfdGFibGVfa2V5X2ZpZWxkX2lu Zm9fZ2V0DQo+ID4gICAgcnRlX2Zsb3dfdGFibGVfa2V5X2ZpZWxkX2luZm9fZ2V0X2J5X25hbWUN Cj4gPiAgICBydGVfZmxvd19hY3Rpb25fc3BlY19saXN0X2dyb3VwDQo+ID4gICAgcnRlX2Zsb3df YWN0aW9uX3NwZWNfaW5mb19nZXQNCj4gPiAgICBydGVfZmxvd19hY3Rpb25fc3BlY19pbmZvX2dl dF9ieV9uYW1lDQo+ID4gICAgcnRlX2Zsb3dfYWN0aW9uX3NwZWNfZmllbGRfaW5mb19nZXRfYnlf bmFtZQ0KPiA+DQo+IA0KPiBXaGF0IGlzIHRoZSBpZGVhIHRvIHF1ZXJ5IHRoZSB0YWJsZXM/IElz bid0IHRoZSBpZGVhIHRoYXQgYXBwbGljYXRpb24gd2lsbA0KPiBjcmVhdGUgdGhlbT8NCg0KVGhp cyBpcyBleHBsYWluZWQgYWJvdmUuDQoNCj4gDQo+ID4gMi4gS2V5IC8gQWN0aW9uIE9iamVjdCBN YW5hZ2VtZW50IEFQSToNCj4gPg0KPiA+ICAgIENyZWF0ZSwgZGVzdHJveSwgYW5kIGNsb25lIGtl eSBhbmQgYWN0aW9uIG9iamVjdHMuDQo+ID4NCj4gPiAgICBydGVfZmxvd190YWJsZV9rZXlfY3Jl YXRlDQo+IA0KPiBUaGlzIGNyZWF0ZXMgYSBuZXcgdGFibGU/DQoNCk5vLCBpdCBjcmVhdGVzIGEg a2V5IG9iamVjdCAob3IgaW5zdGFuY2UpIGZvciBhIHRhYmxlLCANCllvdSBjYW4gYXNzdW1lIG1l bW9yeSB3aWxsIGJlIGFsbG9jYXRlZCB0byBzdG9yZSB0aGUga2V5IHZhbHVlcyB3aXRoIGJlbG93 IGtleV9maWVsZCBBUElzLg0KDQo+ID4gICAgcnRlX2Zsb3dfdGFibGVfa2V5X2Rlc3Ryb3kNCj4g PiAgICBydGVfZmxvd190YWJsZV9rZXlfY2xvbmUNCj4gPiAgICBydGVfZmxvd190YWJsZV9rZXlf ZmllbGRfc2V0DQo+ID4gICAgcnRlX2Zsb3dfdGFibGVfa2V5X2ZpZWxkX3NldF9ieV9uYW1lDQo+ ID4gICAgcnRlX2Zsb3dfdGFibGVfa2V5X2ZpZWxkX3NldF93aXRoX21hc2sNCj4gPiAgICBydGVf Zmxvd190YWJsZV9rZXlfZmllbGRfc2V0X3dpdGhfbWFza19ieV9uYW1lDQo+ID4gICAgcnRlX2Zs b3dfdGFibGVfa2V5X2ZpZWxkX3NldF93aXRoX3JhbmdlDQo+ID4gICAgcnRlX2Zsb3dfdGFibGVf a2V5X2ZpZWxkX3NldF93aXRoX3JhbmdlX2J5X25hbWUNCj4gPiAgICBydGVfZmxvd190YWJsZV9r ZXlfZmllbGRfc2V0X3dpdGhfcHJlZml4Xw0KPiA+ICAgIHJ0ZV9mbG93X3RhYmxlX2tleV9maWVs ZF9zZXRfd2l0aF9wcmVmaXhfYnlfbmFtZQ0KPiA+DQo+IA0KPiBXaHkgZG8gd2UgbmVlZCBzbyBt YW55IGZ1bmN0aW9ucz8gV2UgY2FuIGNyZWF0ZSBhIHRhYmxlIHdpdGggdGhlIGtleXM/DQo+IEkg YXNzdW1lIHRoYXQga2V5cyBhcmUgdGhlIG1hdGNoaW5nIHZhbHVlcyByaWdodD8NCg0KQSBrZXkg b2JqZWN0IGlzIGNvbXBvc2VkIGJ5IGEgc2V0IG9mIGZpZWxkcywgZWFjaCBmaWVsZHMgaGFzIGRp ZmZlcmVudCBtYXRjaCB0eXBlLCBpdCBjb3VsZCBiZSBleGFjdCBtYXRjaCwgd2lsZGNhcmQgKG1h c2sgaXMgbmVlZGVkKSAsIHJhbmdlIChtaW4sIG1heCkgb3IgbHBtIChhIHByZWZpeCBiaXQgd2lk dGggaXMgcmVxdWlyZWQpDQoNCg0KPiANCj4gPiAgICBydGVfZmxvd190YWJsZV9hY3Rpb25fY3Jl YXRlDQo+IA0KPiBUaGlzIGNyZWF0ZXMgYSBzaW5nbGUgYWN0aW9uIGluIHNlbGVjdGVkIHRhYmxl Pw0KDQoNClllcywgdGhpcyBjcmVhdGVkIGFuIGFjdGlvbiBpbnN0YW5jZSwgd2hpY2ggY2FuIGJl IHBhaXJlZCB3aXRoIGEga2V5IG9iamVjdCBhbmQgYmUgYWRkZWQgaW50byBhIHRhYmxlIGFzIGEg cnVsZSBlbnRyeS4NCg0KVGhlIGFjdGlvbiBpbnN0YW5jZSBpcyBhIGxpdHRsZSBiaXQgZGlmZmVy ZW5jZSB3aXRoIHJ0ZV9mbG93X2FjdGlvbi4uDQoNCk9uZSBhY3Rpb24gaW5zdGFuY2UgaXMgY29t cG9zZWQgYXQgb2YgYWN0aW9uIGZpZWxkcywgdHlwaWNhbGx5IGVhY2ggYWN0aW9uIGZpZWxkIGNh biBiZSBtYXBwZWQgdG8gcnRlX2Zsb3dfYWNpdG9uLCAgKHRvIHF1ZXVlLCBkcm9wIC4uLikgZnJv bSBoYXJkd2FyZSdzIHBvaW50ZXIgb2Ygdmlldy4NCg0KUDQgdXNlIGJlbG93IHN5bnRheCBkZWZp bmUgdGFibGUgLyBhY3Rpb25zDQoNCnRhYmxlIGRlY2FwX3Z4bGFuX3RjcF90YWJsZSB7DQogICAg ICAuLi4uLg0KCWFjdGlvbnMgPSB7DQogICAgICAgIEB0YWJsZW9ubHkgZGVjYXBfdnhsYW5fZndk Ow0KICAgICAgICBAdGFibGVvbmx5IGRlY2FwX3Z4bGFuX2RuYXRfZndkOw0KICAgICAgICBAdGFi bGVvbmx5IGRlY2FwX3Z4bGFuX3NuYXRfZndkOw0KICAgICAgICBAZGVmYXVsdG9ubHkgc2V0X2V4 Y2VwdGlvbjsNCiAgICB9ICANCn0NCg0KVGFibGUgZGVjYXBfdnhsYW5fdGNwX3RhYmxlICBhY2Nl cHQgNCBraW5kIG9mIGFjdGlvbiwgYnV0IG9ubHkgb25lIGFjdGlvbiBjYW4gYmUgc2VsZWN0ZWQg Zm9yIGVhY2ggcnVsZS4NCg0KYWN0aW9uIGRlY2FwX3Z4bGFuX2Z3ZChQb3J0SWRfdCBwb3J0X2lk KSB7DQogICAgbWV0YS5tb2RfYWN0aW9uID0gKGJpdDwxMT4pVlhMQU5fREVDQVBfT1VURVJfSVBW NDsNCiAgICBzZW5kX3RvX3BvcnQocG9ydF9pZCk7DQp9DQoNCkhlcmUgdGhlIHBvcnRfaWQgaXMg dGhlIG9ubHkgZmllbGQgb2YgdGhlIGFjdGlvbiBkZWNhcF92eGxhbl9md2QsIHRoaXMgaXMgZXhw b3NlZCBieSB0aGUgY29tcGlsZXIuDQoNCg0KPiANCj4gPiAgICBydGVfZmxvd190YWJsZV9hY3Rp b25fZGVzdHJveQ0KPiA+ICAgIHJ0ZV9mbG93X3RhYmxlX2FjdGlvbl9jbG9uZQ0KPiA+ICAgIHJ0 ZV9mbG93X3RhYmxlX2FjdGlvbl9maWVsZF9nZXQNCj4gPiAgICBydGVfZmxvd190YWJsZV9hY3Rp b25fZmllbGRfc2V0DQo+ID4gICAgcnRlX2Zsb3dfdGFibGVfYWN0aW9uX2ZpZWxkX3NldF9ieV9u YW1lDQo+ID4NCj4gDQo+IEFnYWluIEkgZG9uJ3QgdW5kZXJzdGFuZCB3aHkgc28gbWFueSBmdW5j dGlvbnMuDQo+IA0KPiA+IDMuIFRhYmxlIEVudHJ5IFVwZGF0ZSBTeW5jaHJvbml6ZWQgQVBJczoN Cj4gPg0KPiA+ICAgIEVuYWJsZSBzeW5jaHJvbml6ZWQgdGFibGUgdXBkYXRlcywgZW5zdXJpbmcg dGhlIHVwZGF0ZXMgYXJlDQo+ID4gICAgcnVuLXRvLWNvbXBsZXRpb24uDQo+ID4NCj4gPiAgICBy dGVfZmxvd190YWJsZV9lbnRyeV9hZGQNCj4gPiAgICBydGVfZmxvd190YWJsZV9lbnRyeV9xdWVy eQ0KPiA+ICAgIHJ0ZV9mbG93X3RhYmxlX2VudHJ5X2RlbA0KPiA+ICAgIHJ0ZV9mbG93X3RhYmxl X2VudHJ5X2NvdW50X3F1ZXJ5DQo+ID4gICAgcnRlX2Zsb3dfdGFibGVfZGVmYXVsdF9hY3Rpb25f c2V0DQo+ID4gICAgcnRlX2Zsb3dfdGFibGVfZGVmYXVsdF9hY3Rpb25fY2FuY2VsDQo+ID4NCj4g PiA0LiBUYWJsZSBFbnRyeSBVcGRhdGUgQXN5bmNocm9uaXplZCBBUElzDQo+ID4NCj4gPiAgICBQ cm92aWRlIGFzeW5jaHJvbm91cyB0YWJsZSB1cGRhdGUgbW9kZSB1c2luZyBhDQo+ID4gICAgcHJl cGFyZS9jb21taXQvcHVsbCBwYXR0ZXJuLg0KPiA+DQo+ID4gICAgcnRlX2Zsb3dfdGFibGVfZW50 cnlfYWRkX3ByZXBhcmUNCj4gPiAgICBydGVfZmxvd190YWJsZV9lbnRyeV9kZWxfcHJlcGFyZQ0K PiA+ICAgIHJ0ZV9mbG93X3RhYmxlX3VwZGF0ZV9zdGF0dXNfY29tbWl0DQo+ID4gICAgcnRlX2Zs b3dfdGFibGVfdXBkYXRlX3N0YXR1c19wdWxsDQo+ID4NCj4gSW4gZ2VuZXJhbCBJIHRoaW5rIGFz eW5jIGZ1bmN0aW9uIHNob3VsZCBoYXZlIHRoZSB3b3JkIGFzeW5jDQoNCk9mIGNhdXNlLCB3ZSBj YW4gYWRkLg0KPiANCj4gPiA1LiBEUERLIHRvIFBOQSBJbnRlcnByZXRhdGlvbiBBUElzDQo+ID4N Cj4gPiAgICBGYWNpbGl0YXRlIEFQSXMgdGhhdCBtYXAgdGhlIERQREsgY29udGV4dCB0byB0aGUg UDQgUG9ydGFibGUNCj4gPiAgICBOSUMgQXJjaGl0ZWN0dXJlIChQTkEpIGNvbnRleHQsIGVuYWJs aW5nIGludGVyb3BlcmFiaWxpdHkgYmV0d2Vlbg0KPiA+ICAgIERQREsgYW5kIFBOQSBhcHBsaWNh dGlvbnMNCj4gPg0KPiANCj4gVGhpcyBBUEkgaXMgZm9yIHJlZ2lzdGVyaW5nIHF1ZXVlcyBpbiBE UERLIHdoaWNoIGNhbiBiZSB1c2VkIGJ5IG5vbiBEUERLDQo+IGFwcGxpY2F0aW9uPw0KDQpQTkEg KFA0IFBvcnRhYmxlIE5JQyBBcmNoaXRlY3R1cmUpIGlzIGFuIG9uZ29pbmcgc3BlY2lmaWNhdGlv bi4gaHR0cHM6Ly9wNC5vcmcvcDQtc3BlYy9kb2NzL1BOQS5odG1sDQpJdCBkZWZpbmVzIHRoZSBo YXJkd2FyZSBhYnN0cmFjdGlvbiB3aXRoIHNvbWUgZGF0YSBzdHJ1Y3R1cmUgKGUuZy4gcG9ydCwg cXVldWUuLikNCg0KVGhhdCdzIHdoeSBJIHRoaW5rIGl0IG1heSB3b3J0aCB0byBoYXZlIHNvbWUg aGVscCBBUElzIHRoYXQgYWxsb3dzIHVzZXIgdG8gY29udmVydCBmcm9tIERQREsgY29udGV4dCB0 byBQTkEuDQpDdXJyZW50bHkgd2UgY2FuIHRha2UgdGhpcyBhcyBhbiBvcGVuLCBJIHdpbGwgbm90 IGluc2lzdCB0byBoYXZlIHRoZW0sIGp1c3Qgd2hhdCB0byBnZXQgbW9yZSBpbnB1dHMuDQoNCj4g DQo+ID4gICAgcnRlX2Zsb3dfcG5hX3BvcnRfZ2V0DQo+ID4gICAgcnRlX2Zsb3dfcG5hX3J4X3F1 ZXVlX2dldA0KPiA+ICAgIHJ0ZV9mbG93X3BuYV90eF9xdWV1ZV9nZXQNCj4gPg0KPiA+IEZvbGxv dyB0aGUgZXhhbXBsZSBpbiBQcm9ibGVtIFN0YXRlbWVudCBbMV0sIHRvIGNyZWF0ZSBhIHJ1bGUg Zm9yDQo+ID4gdGFibGUgZGVjYXBfdnhsYW5fdGNwX3RhYmxlIHdpdGggYWN0aW9uIGRlY2FwX3Z4 bGFuX2Z3ZCwgd2UgY2FuIHVzZQ0KPiA+IHRoZSBmb2xsb3dpbmcgY29kZS4NCj4gPg0KPiA+IENv ZGUgU25pcHBldDoNCj4gPg0KPiA+IC8qIEdldCB0aGUgdGFibGUgaW5mbyAqLw0KPiA+IHN0cnVj dCBydGVfZmxvd190YWJsZV9pbmZvIHRibF9pbmZvOw0KPiA+IHJ0ZV9mbG93X3RhYmxlX2luZm9f Z2V0X2J5X25hbWUocG9ydF9pZCwgImRlY2FwX3Z4bGFuX3RjcF90YWJsZSIsDQo+ID4gJnRibF9p bmZvKTsNCj4gPg0KPiA+IC8qIENyZWF0ZSB0aGUga2V5ICovDQo+ID4gc3RydWN0IHJ0ZV9mbG93 X3RhYmxlX2tleSAqa2V5Ow0KPiA+IHJ0ZV9mbG93X3RhYmxlX2tleV9jcmVhdGUocG9ydF9pZCwg dGJsX2luZm8tPmlkLCAma2V5KTsNCj4gPg0KPiA+IC8qIFNldCB0aGUga2V5IGZpZWxkcyAqLw0K PiA+IHJ0ZV9mbG93X3RhYmxlX2tleV9maWVsZF9zZXRfYnlfbmFtZShwb3J0X2lkLCBrZXksICJ3 aXJlX3BvcnQiLA0KPiA+ICZ3aXJlX3BvcnQsIDIpOw0KPiANCj4gVGhpcyBmdW5jdGlvbiBzaG91 bGQgYmUgY2FsbGVkIHBlciBlYWNoIGVudGVyeSByaWdodD8NCg0KWWVzLCBidXQgYWdhaW4sIHdl IGNhbiBhbHdheXMgYWdncmVnYXRlIGFsbCBrZXkgZmllbGRzICBpbnRvIGFuIGFycmF5IHdpdGgg b25lIEFQSSBjYWxscy4NCg0KPiBUaGUgdmFsdWVzIHNob3VsZCBhcnJpdmUgZnJvbSBnUlBDIHJp Z2h0Pw0KDQpGb3IgUDRydW50aW1lIGNhc2UsIHllcywgaXRzIGZyb20gZ1BSQyBjbGllbnQsIGJ1 dCBnUlBDIHdpbGwgYWdncmVnYXRlLg0KDQo+IA0KPiA+IHJ0ZV9mbG93X3RhYmxlX2tleV9maWVs ZF9zZXRfYnlfbmFtZShwb3J0X2lkLCBrZXksICJ0dW5faXBfc3JjIiwNCj4gPiAmdHVuX2lwX3Ny YywgNCk7IHJ0ZV9mbG93X3RhYmxlX2tleV9maWVsZF9zZXRfYnlfbmFtZShwb3J0X2lkLCBrZXks DQo+ID4gInR1bl9pcF9kc3QiLCAmdHVuX2lwX2RzdCwgNCk7DQo+ID4gcnRlX2Zsb3dfdGFibGVf a2V5X2ZpZWxkX3NldF9ieV9uYW1lKHBvcnRfaWQsIGtleSwgInZuaSIsICZ2bmksIDMpOw0KPiA+ IHJ0ZV9mbG93X3RhYmxlX2tleV9maWVsZF9zZXRfYnlfbmFtZShwb3J0X2lkLCBrZXksICJpcHY0 X3NyYyIsDQo+ID4gJmlwdjRfc3JjLCA0KTsgcnRlX2Zsb3dfdGFibGVfa2V5X2ZpZWxkX3NldF9i eV9uYW1lKHBvcnRfaWQsIGtleSwNCj4gPiAiaXB2NF9kc3QiLCAmaXB2NF9kc3QsIDQpOw0KPiA+ IHJ0ZV9mbG93X3RhYmxlX2tleV9maWVsZF9zZXRfYnlfbmFtZShwb3J0X2lkLCBrZXksICJzcmNf cG9ydCIsDQo+ID4gJnNyY19wb3J0LCAyKTsgcnRlX2Zsb3dfdGFibGVfa2V5X2ZpZWxkX3NldF9i eV9uYW1lKHBvcnRfaWQsIGtleSwNCj4gPiAiZHN0X3BvcnQiLCAmZHN0X3BvcnQsIDIpOw0KPiA+ DQo+ID4gLyogR2V0IHRoZSBhY3Rpb24gc3BlYyBpbmZvICovDQo+ID4gc3RydWN0IHJ0ZV9mbG93 X2FjdGlvbl9zcGVjX2luZm8gYXNfaW5mbzsNCj4gPiBydGVfZmxvd19hY3Rpb25fc3BlY19pbmZv X2dldF9ieV9uYW1lKHBvcnRfaWQsICJkZWNhcF92eGxhbl9md2QiLA0KPiA+ICZhc19pbmZvKTsN Cj4gPg0KPiBXaGVyZSBhcmUgd2UgZ2V0dGluZyB0aGUgYWN0aW9uIGZyb20gaXMgdGhpcyB0aGUg cmVzdWx0IG9mIHRoZSBjb21wbGllcj8NCg0KWWVzLCBhbiBhY3Rpb25zIHNwZWMgZGVmaW5lcyBh bGwgdGhlIGZpZWxkcyBuYW1lIC8gc2l6ZSAvIGJ5dGUgb3JkZXIvIGJpdHdpZHRoIG9mIGFuIGFj dGlvbiB0eXBlLg0KDQo+IA0KPiA+IC8qIENyZWF0ZSB0aGUgYWN0aW9uICovDQo+ID4gc3RydWN0 IHJ0ZV9mbG93X3RhYmxlX2FjdGlvbiAqYWN0aW9uOw0KPiA+IHJ0ZV9mbG93X3RhYmxlX2FjdGlv bl9jcmVhdGUocG9ydF9pZCwgYXNfaW5mby0+aWQsICZhY3Rpb24pOw0KPiA+DQo+ID4gLyogU2V0 IHRoZSBhY3Rpb24gZmllbGRzICovDQo+ID4gcnRlX2Zsb3dfdGFibGVfYWN0aW9uX2ZpZWxkX3Nl dF9ieV9uYW1lKHBvcnRfaWQsIGFjdGlvbiwgIm1vZF9pZCIsDQo+ID4gJm1vZF9pZCwgMyk7IHJ0 ZV9mbG93X3RhYmxlX2FjdGlvbl9maWVsZF9zZXRfYnlfbmFtZShwb3J0X2lkLCBhY3Rpb24sDQo+ ID4gInBvcnRfaWQiLCAmdGFyZ2V0X3BvcnRfaWQsIDIpOw0KPiA+DQo+ID4gLyogQWRkIHRoZSBl bnRyeSAqLw0KPiA+IHJ0ZV9mbG93X3RhYmxlX2VudHJ5X2FkZChwb3J0X2lkLCB0YmxfaW5mby0+ aWQsIGtleSwgYWN0aW9uKTsNCj4gPg0KPiA+IC8qIGRlc3Ryb3kga2V5IGFuZCBhY3Rpb24gKi8N Cj4gPiBydGVfZmxvd190YWJsZV9hY3Rpb25fZGVzdHJveShwb3J0X2lkLCBhY3Rpb24pOw0KPiA+ IHJ0ZV9mbG93X3RhYmxlX2tleV9kZXN0cm95KHBvcnRfaWQsIGtleSk7DQo+ID4NCj4gPiAuLi4N Cj4gPg0KPiA+IEJlbG93IGNvZGUgZGVtb25zdHJhdGVzIGhvdyB0byB1c2UgdGhlIHByZXBhcmUv Y29tbWl0L3B1bGwgZm9yIGhpZ2gNCj4gPiBwZXJmb3JtYW5jZSB0YWJsZSBlbnRyeSB1cGRhdGVz Lg0KPiA+DQo+ID4gQ29kZSBTbmlwcGVkOg0KPiA+DQo+ID4gc3RydWN0IHJ0ZV9mbG93X3RhYmxl X2tleSAqa2V5c1tCQVRDSF9TSVpFXTsgc3RydWN0DQo+ID4gcnRlX2Zsb3dfdGFibGVfYWN0aW9u ICphY3Rpb25zW0JBVENIX1NJWkVdOyBzdHJ1Y3QNCj4gPiBydGVfZmxvd190YWJsZV91cGRhdGVf c3RhdHVzIHN0YXRzW0JBVENIX1NJWkVdOw0KPiA+DQo+ID4gLyogQ3JlYXRlIEtleXMgYW5kIEFj dGlvbnMgKi8NCj4gPiBmb3IgKGkgPSAwOyBpIDwgQkFUQ0hfU0laRTsgaSsrKSB7DQo+ID4gICAg IHJ0ZV9mbG93X3RhYmxlX2tleV9jcmVhdGUocG9ydF9pZCwgdGFibGVfaWQsICZrZXlzW2ldKTsN Cj4gDQo+IFRoaXMgaXMgdGhlIGNvbmZpZ3VyYXRpb24gc3RhZ2UgcmlnaHQ/DQoNClllcywgYmFz aWNhbGx5IHRoaXMgaXMgdHJ5aW5nIHRvIHJlc2VydmUgYSBzZXQgb2Yga2V5IG9iamVjdHMgaW4g bWVtb3J5Lg0KDQo+IA0KPiA+ICAgICAvKiBzZXQga2V5IGZpZWxkICovDQo+ID4gICAgIHJ0ZV9m bG93X3RhYmxlX2tleV9maWVsZF9zZXQoLi4uKQ0KPiA+DQo+ID4gICAgIHJ0ZV9mbG93X3RhYmxl X2FjdGlvbl9jcmVhdGUocG9ydF9pZCwgdGFibGVfaWQsIHNwZWNfaWQsICZhY3Rpb25zW2ldKTsN Cj4gPiAgICAgLyogc2V0IGFjdGlvbiBmaWVsZCAqLw0KPiA+ICAgICBydGVfZmxvd190YWJsZV9h Y3Rpb25fZmllbGRfc2V0KC4uLikNCj4gPiB9DQo+ID4NCj4gPiAvKiBwcm9ncmFtIGxvb3AgKi8N Cj4gPiBXaGlsZSAoY29uZGl0aW9uID0gdHJ1ZSkgew0KPiA+DQo+ID4gICAgIC8qIFByZXBhcmUg ZW50cnkgYWRkaW5nICovDQo+ID4gICAgIGZvciAoaSA9IDA7IGkgPCBCQVRDSF9TSVpFOyBpKysp IHsNCj4gPiAgICAgICAgIHN0cnVjdCBydGVfZmxvd190YWJsZV9rZXkgKmtleSA9IGtleXNbaV07 DQo+ID4gICAgICAgICBzdHJ1Y3QgcnRlX2Zsb3dfdGFibGVfYWN0aW9uICphY3Rpb24gPSBhY3Rp b25zW2ldOw0KPiA+DQo+ID4gICAgICAgICBydGVfZmxvd190YWJsZV9lbnRyeV9hZGRfcHJlcGFy ZShwb3J0X2lkLCBUQUJMRV9JRCwga2V5LA0KPiA+IGFjdGlvbik7DQo+IA0KPiBGb3IgZWFjaCBj YWxsIHlvdSBhZGQgY29tcGxldGUgcnVsZSBvciBqdXN0IG9uZSBtYXRjaGluZyBhbmQgb25lIGFj dGlvbj8NCg0KVGhlIGFjdGlvbiBoZXJlIGlzIGFuIGluc3RhbmNlIG9mIGFjdGlvbiANCkFuIGFj dGlvbiBpbnN0YW5jZSBpcyBjb21wb3NlZCBvZiBhIHNldCBvZiBhY3Rpb24gZmllbGRzIHdoaWNo IEkgaGF2ZSBleHBsYWluZWQgcHJldmlvdXMuDQoNCj4gV2h5IG5vdCBnaXZlIGEgbGlzdCBvZiBh Y3Rpb25zIGFuZCBrZXlzIHRvIGF2b2lkIGV4dHJhIGZ1bmN0aW9uIGNhbGxzPw0KDQpPZiBjYXVz ZSBpdCBpcyB3b3J0aHdoaWxlIHRvIHN1cHBvcnQgd2hhdCB5b3Ugc3VnZ2VzdGVkIGhlcmUuDQoN Cg0KPiANCj4gPiAgICAgfQ0KPiA+DQo+ID4gICAgIC8qIENvbW1pdCB0byBoYXJkd2FyZSAqLw0K PiA+ICAgICBydGVfZmxvd190YWJsZV91cGRhdGVfY29tbWl0KHBvcnRfaWQpOw0KPiA+DQo+ID4g ICAgIC8qIHB1bGwgc3RhdHVzICovDQo+ID4gICAgIGludCBjb3VudCA9IDA7DQo+ID4gICAgIHdo aWxlIChjb3VudCA8IEJBVENIX1NJWkUpIHsNCj4gPiAgICAgICAgIGNvdW50ICs9IHJ0ZV9mbG93 X3RhYmxlX3VwZGF0ZV9zdGF0dXNfcHVsbChwb3J0X2lkLCBzdGF0cywNCj4gPiBCQVRDSF9TSVpF LCBOVUxMKTsNCj4gPiAgICAgfQ0KPiA+DQo+ID4gICAgIC8qIHJldXNlZCBLZXkgYW5kIEFjdGlv biBvYmplY3QgKi8NCj4gPiAgICAgZm9yIChpID0gMDsgaTwgQkFUQ0hfU0laRTsgaSsrKSB7DQo+ ID4gICAgICAgICAgICAgc3RydWN0IHJ0ZV9mbG93X3RhYmxlX2tleSAqa2V5ID0gc3RhdHNbaV0u a2V5Ow0KPiA+ICAgICAgICAgICAgIHN0cnVjdCBydGVfZmxvd190YWJsZV9hY3Rpb24gKmFjdGlv biA9IHN0YXRzW2ldLmFjdGlvbjsNCj4gPg0KPiA+ICAgICAgICAgICAgIHJ0ZV9mbG93X3RhYmxl X2tleV9maWVsZF9zZXQoLi4uKTsNCj4gPiAgICAgICAgICAgICBydGVfZmxvd190YWJsZV9hY3Rp b25fZmllbGRfc2V0KC4uLikNCj4gPiAgICAgfQ0KPiA+IH0NCj4gPg0KPiA+IC4uLg0KPiA+DQo+ ID4gTk9URTogRm9yIHNpbXBsaWNpdHksIGVycm9yIGNoZWNrIGFuZCB0aGUgcnRlX2Zsb3dfZXJy b3IgcGFyYW1ldGVyIGZvcg0KPiA+IGVhY2ggQVBJIGhhcyBiZWVuIG9taXR0ZWQ6DQo+ID4NCj4g PiBbMV0uIGh0dHA6Ly9tYWlscy5kcGRrLm9yZy9hcmNoaXZlcy9kZXYvMjAyMy1NYXkvMjY3NzE5 Lmh0bWwNCj4gPiBbMl0uIGh0dHBzOi8vZ2l0aHViLmNvbS9wNGxhbmcvdGRpLw0KPiA+IFszXS4g aHR0cHM6Ly9wNC5vcmcvcDQtc3BlYy9wNHJ1bnRpbWUvbWFpbi9QNFJ1bnRpbWUtU3BlYy5odG1s DQo+ID4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBRaSBaaGFuZyA8cWkuei56aGFuZ0BpbnRlbC5jb20+ DQo+ID4gLS0tDQo+ID4gIGxpYi9ldGhkZXYvcnRlX2Zsb3dfdGFibGUuaCB8IDEyNjENCj4gPiAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiA+ICAxIGZpbGUgY2hhbmdlZCwg MTI2MSBpbnNlcnRpb25zKCspDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvZXRoZGV2L3J0 ZV9mbG93X3RhYmxlLmgNCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9saWIvZXRoZGV2L3J0ZV9mbG93 X3RhYmxlLmggYi9saWIvZXRoZGV2L3J0ZV9mbG93X3RhYmxlLmgNCj4gPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NCBpbmRleCAwMDAwMDAwMDAwLi4zMWVkZjU3YTBmDQo+ID4gLS0tIC9kZXYvbnVsbA0K PiA+ICsrKyBiL2xpYi9ldGhkZXYvcnRlX2Zsb3dfdGFibGUuaA0KPiA+IEBAIC0wLDAgKzEsMTI2 MSBAQA0KPiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+ID4g KyAqIENvcHlyaWdodCAyMDIzIEludGVsIENvcnBvcmF0aW9uLg0KPiA+ICsgKi8NCj4gPiArDQo+ ID4gKyNpZm5kZWYgUlRFX0ZMT1dfVEFCTEVfSF8NCj4gPiArI2RlZmluZSBSVEVfRkxPV19UQUJM RV9IXw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPHN0ZGludC5oPg0KPiA+ICsjaW5jbHVkZSA8c3Rk Ym9vbC5oPg0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIE1heCBudW1iZXIgb2Yga2V5IGZpZWxk IGluIGEgdGFibGUuDQo+ID4gKyAqLw0KPiA+ICsjZGVmaW5lIFJURV9GTE9XX1RBQkxFX0tFWV9G SUVMRF9OVU1fTUFYCTI1Ng0KPiA+ICsvKioNCj4gPiArICogTWF4IG51bWJlciBvZiBhY3Rpb24g c3BlYyBpbiBhIHRhYmxlLg0KPiA+ICsgKi8NCj4gPiArI2RlZmluZSBSVEVfRkxPV19UQUJMRV9B Q1RJT05fU1BFQ19OVU1fTUFYCTY0DQo+ID4gKy8qKg0KPiA+ICsgKiBNYXggbnVtYmVyIG9mIGZp ZWxkIGluIGFuIGFjdGlvbiBzcGVjLg0KPiA+ICsgKi8NCj4gPiArI2RlZmluZSBSVEVfRkxPV19B Q1RJT05fU1BFQ19GSUVMRF9OVU1fTUFYCTE2DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogQHdh cm5pbmcNCj4gPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhv dXQgcHJpb3Igbm90aWNlLg0KPiA+ICsgKg0KPiA+ICsgKiBUYWJsZSBrZXkgbWF0Y2ggdHlwZS4N Cj4gPiArICoNCj4gPiArICogVG8gc3BlY2lmeSB0aGUga2V5IG1hdGNoIHR5cGUgb2YgYSB0YWJs ZS4NCj4gPiArICovDQo+ID4gK2VudW0gcnRlX2Zsb3dfdGFibGVfa2V5X21hdGNoX3R5cGUgew0K PiA+ICsJUlRFX0ZMT1dfVEFCTEVfS0VZX01BVENIX1RZUEVfRVhBQ1QsIC8qKjwgRXhhY3QgbWF0 Y2guICovDQo+ID4gKwlSVEVfRkxPV19UQUJMRV9LRVlfTUFUQ0hfVFlQRV9XSUxEQ0FSRCwgLyoq PCBXaWxkY2FyZA0KPiA+IG1hdGNoLiAqLw0KPiA+ICsJUlRFX0ZMT1dfVEFCTEVfS0VZX01BVENI X1RZUEVfUkFOR0UsIC8qKjwgUmFuZ2UgbWF0Y2guICovDQo+ID4gKwlSVEVfRkxPV19UQUJMRV9L RVlfTUFUQ0hfVFlQRV9MUE0sIC8qKjwgbG9uZ2VzdCBwcmVmaXgNCj4gPiBtYXRjaC4gKi8NCj4g PiArfTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBAd2FybmluZw0KPiA+ICsgKiBAYiBFWFBF UklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UuDQo+ID4g KyAqDQo+ID4gKyAqIEJ5dGUgb3JkZXIuDQo+ID4gKyAqDQo+ID4gKyAqIFRvIHNwZWNpZnkgdGhl IGJ5dGUgb3JkZXIgb2YgdGFibGUga2V5IC8gYWN0aW9uIGZpZWxkIHZhbHVlIGluIGJ5dGVzLg0K PiA+ICsgKi8NCj4gPiArZW51bSBydGVfZmxvd19ieXRlX29yZGVyIHsNCj4gPiArCVJURV9GTE9X X0JZVEVfT1JERVJfSE9TVCwgLyoqPCBmb2xsb3cgaG9zdCBieXRlIG9yZGVyLiAqLw0KPiA+ICsJ UlRFX0ZMT1dfQllURV9PUkRFUl9ORVRXT1JLLCAvKio8IGZvbGxvdyBuZXR3b3JrIGJ5dGUNCj4g PiBvcmRlci4gKi8NCj4gPiArfTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBAd2FybmluZw0K PiA+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlv ciBub3RpY2UuDQo+ID4gKyAqDQo+ID4gKyAqIEZsb3cgcnVsZSB0YWJsZSBpbmZvLg0KPiA+ICsg Kg0KPiA+ICsgKiBBIHN0cnVjdHVyZSBzdG9yZXMgdGhlIHByb3BlcnRpZXMgb2YgYSBmbG93IHJ1 bGUgdGFibGUuDQo+ID4gKyAqIFR5cGljYWxseSwgYSBmbG93IHJ1bGUgdGFibGUgcmVwcmVzZW50 cyB0byBhIFA0IHRhYmxlIHdoaWNoDQo+ID4gK2Rlc2NyaWJlIGENCj4gPiArICogbWF0Y2gvYWN0 aW9uIHVuaXQgaW4gcGFja2V0IHByb2Nlc3MgcGlwZWxpbmUuDQo+ID4gKyAqLw0KPiA+ICtzdHJ1 Y3QgcnRlX2Zsb3dfdGFibGVfaW5mbyB7DQo+ID4gKwl1aW50MzJfdCBpZDsgLyoqPCBJZGVudGlm aWVyIG9mIGEgdGFibGUgd2l0aGluIHRoZSBldGhkZXYuICovDQo+ID4gKwljb25zdCBjaGFyICpu YW1lOyAvKio8IE5hbWUgb2YgdGhlIHRhYmxlLiAqLw0KPiA+ICsJY29uc3QgY2hhciAqYW5ub3Rh dGlvbjsgLyoqPCBIdW1hbiByZWFkYWJsZSBtZXNzYWdlIGFib3V0IHRoaXMNCj4gPiB0YWJsZS4g Ki8NCj4gPiArCXVpbnQxNl90IGtleV9maWVsZF9udW07IC8qKjwgTnVtYmVyIG9mIGtleSBmaWVs ZC4gKi8NCj4gPiArCXVpbnQzMl90IGtleV9maWVsZHNbUlRFX0ZMT1dfVEFCTEVfS0VZX0ZJRUxE X05VTV9NQVhdOyAvKio8DQo+ID4gS2V5IGZpZWxkIGlkIGFycmF5LiAqLw0KPiA+ICsJdWludDE2 X3QgYWN0aW9uX3NwZWNfbnVtOyAvKio8IE51bWJlciBvZiBhY3Rpb24gc3BlYy4gKi8NCj4gPiAr CXVpbnQzMl90DQo+ID4gYWN0aW9uX3NwZWNzW1JURV9GTE9XX1RBQkxFX0FDVElPTl9TUEVDX05V TV9NQVhdOyAvKio8IEFjdGlvbg0KPiBzcGVjIGlkDQo+ID4gYXJyYXkgKi8NCj4gPiArfTsNCj4g PiArDQo+IA0KPiBXaHkgZG8gd2UgbmVlZCB0aGlzIGluZm8/DQo+IA0KPiA+ICsvKioNCj4gPiAr ICogQHdhcm5pbmcNCj4gPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdl IHdpdGhvdXQgcHJpb3Igbm90aWNlLg0KPiA+ICsgKg0KPiA+ICsgKiBUYWJsZSBrZXkgZmllbGQg aW5mby4NCj4gPiArICoNCj4gPiArICogQSBzdHJ1Y3R1cmUgc3RvcmVzIHRoZSBwcm9wZXJ0aWVz IG9mIGEgdGFibGUga2V5IGZpZWxkLg0KPiA+ICsgKi8NCj4gPiArc3RydWN0IHJ0ZV9mbG93X3Rh YmxlX2tleV9maWVsZF9pbmZvIHsNCj4gPiArCXVpbnQzMl90IHRhYmxlX2lkOyAvKio8IElkZW50 aWZpZXIgb2YgYSB0YWJsZSB3aXRoaW4gdGhlIGV0aGRldi4gKi8NCj4gPiArCXVpbnQzMl90IGZp ZWxkX2lkOyAvKio8IElkZW50aWZpZXIgb2YgdGhlIGtleSBmaWVsZCB3aXRoaW4gdGhlIHRhYmxl LiAqLw0KPiA+ICsJY29uc3QgY2hhciAqbmFtZTsgIC8qKjwgTmFtZSBvZiB0aGUga2V5IGZpZWxk LiAqLw0KPiA+ICsJY29uc3QgY2hhciAqYW5ub3RhdGlvbjsgLyoqPCBIdW1hbiByZWFkYWJsZSBt ZXNzYWdlIGFib3V0IHRoaXMNCj4gPiBrZXkgZmllbGQuICovDQo+ID4gKwllbnVtIHJ0ZV9mbG93 X3RhYmxlX2tleV9tYXRjaF90eXBlIG1hdGNoX3R5cGU7IC8qKjwgS2V5IG1hdGNoDQo+ID4gdHlw ZS4gKi8NCj4gPiArCXVpbnQxNl90IGJpdF93aWR0aDsgLyoqPCBCaXQgd2lkdGggb2YgdGhlIGZp ZWxkIHZhbHVlLiAqLw0KPiA+ICsJdWludDE2X3QgYnl0ZV93aWR0aDsgLyoqPCBOdW1iZXIgb2Yg Ynl0ZXMgdG8gc3RvcmUgdGhlIGZpZWxkIHZhbHVlLg0KPiA+ICovDQo+ID4gKwkvKioNCj4gPiAr CSAqIEJ5dGUgb3JkZXIgb2YgdGhlIGJ5dGUgYXJyYXkgdGhhdCBzdG9yZSB0aGUga2V5IHZhbHVl Lg0KPiA+ICsJICovDQo+ID4gKwllbnVtIHJ0ZV9mbG93X2J5dGVfb3JkZXIgYnl0ZV9vcmRlcjsg fTsNCj4gPiArDQo+IA0KPiBMaWtlIGFib3ZlIHdoeSBpcyBpdCBuZWVkZWQ/DQo+IA0KPiA+ICsv KioNCj4gPiArICogQHdhcm5pbmcNCj4gPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBt YXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlLg0KPiA+ICsgKg0KPiA+ICsgKiBBY3Rpb24g c3BlYyBpbmZvLg0KPiA+ICsgKg0KPiA+ICsgKiBBIHN0cnVjdHVyZSBzdG9yZXMgdGhlIHByb3Bl cnRpZXMgb2YgYSBhY3Rpb24gc3BlY2lmaWNhdGlvbi4NCj4gPiArICogVHlwaWNhbGx5LCBhIGFj dGlvbiBzcGVjaWZpY2F0aW9uIHJlcHJlc2VudHMgYSBQNCBBY3Rpb24uDQo+ID4gKyAqLw0KPiA+ ICtzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX3NwZWNfaW5mbyB7DQo+ID4gKwl1aW50MzJfdCBpZDsg LyoqPCBJZGVudGlmaWVyIG9mIGEgYWN0aW9uIHNwZWMgd2l0aGluIHRoZSBldGhkZXYuICovDQo+ ID4gKwljb25zdCBjaGFyICpuYW1lOyAvKio8IE5hbWUgb2YgdGhlIGFjdGlvbiBzcGVjLiAqLw0K PiA+ICsJY29uc3QgY2hhciAqYW5ub3RhdGlvbjsgLyoqPCBIdW1hbiByZWFkYWJsZSBtZXNzYWdl IGFib3V0IHRoaXMNCj4gPiBhY3Rpb24gc3BlYyAqLw0KPiA+ICsJdWludDE2X3QgZmllbGRfbnVt OyAvKio8IE51bWJlciBvZiBmaWVsZHMgKi8NCj4gPiArCXVpbnQzMl90IGZpZWxkc1tSVEVfRkxP V19BQ1RJT05fU1BFQ19GSUVMRF9OVU1fTUFYXTsgLyoqPA0KPiA+IEZpZWxkIGlkIGFycmF5ICov DQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogQHdhcm5pbmcNCj4gPiArICogQGIg RVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlLg0K PiA+ICsgKg0KPiA+ICsgKiBBY3Rpb24gc3BlYyBmaWVsZCBpbmZvLg0KPiA+ICsgKg0KPiA+ICsg KiBBIHN0cnVjdHVyZSBzdG9yZXMgdGhlIHByb3BlcnRpZXMgb2YgYSBhY3Rpb24gc3BlYyBmaWVs ZC4NCj4gPiArICovDQo+ID4gK3N0cnVjdCBydGVfZmxvd19hY3Rpb25fc3BlY19maWVsZF9pbmZv IHsNCj4gPiArCXVpbnQzMl90IHNwZWNfaWQ7IC8qKjwgSWRlbnRpZmllciBvZiBhIGFjdGlvbiBz cGVjIHdpdGhpbiB0aGUgZXRoZGV2Lg0KPiA+ICovDQo+ID4gKwl1aW50MzJfdCBmaWVsZF9pZDsg LyoqPCBJZGVudGlmaWVyIG9mIHRoZSBmaWVsZCB3aXRoaW4gdGhlIGFjdGlvbiBzcGVjLg0KPiA+ ICovDQo+ID4gKwljb25zdCBjaGFyICpuYW1lOyAvKio8IE5hbWUgb2YgdGhlIGZpZWxkLiAqLw0K PiA+ICsJY29uc3QgY2hhciAqYW5ub3RhdGlvbjsgLyoqPCBIdW1hbiByZWFkYWJsZSBtZXNzYWdl IGFib3V0IHRoaXMNCj4gPiBhY3Rpb24gc3BlYy4gKi8NCj4gPiArCXVpbnQxNl90IGJpdF93aWR0 aDsgLyoqPCBCaXQgd2lkdGggb2YgdGhlIGZpZWxkIHZhbHVlICovDQo+ID4gKwl1aW50MTZfdCBi eXRlX3dpZHRoOyAvKio8IE51bWJlciBvZiBieXRlcyB0byBzdG9yZSB0aGUgZmllbGQgdmFsdWUu DQo+ID4gKi8NCj4gPiArCS8qKg0KPiA+ICsJICogQnl0ZSBvcmRlciBvZiB0aGUgYnl0ZSBhcnJh eSB0aGF0IHN0b3JlcyB0aGUga2V5IHZhbHVlLg0KPiA+ICsJICovDQo+ID4gKwllbnVtIHJ0ZV9m bG93X2J5dGVfb3JkZXIgYnl0ZV9vcmRlcjsgfTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBA d2FybmluZw0KPiA+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0 aG91dCBwcmlvciBub3RpY2UuDQo+ID4gKyAqDQo+ID4gKyAqIFRhYmxlIEtleSBvYmplY3QuDQo+ ID4gKyAqDQo+ID4gKyAqIEEgc3RydWN0dXJlIHJlcHJlc2VudCBhIHRhYmxlIGtleSBvYmplY3Qs IHNob3VsZCBiZSBjcmVhdGVkIC8NCj4gPiArZGVzdHJveWVkDQo+ID4gYnkNCj4gPiArICogcnRl X2Zsb3dfdGFibGVfa2V5X2NyZWF0ZSBhbmQgcnRlX2Zsb3dfdGFibGVfa2V5X2Rlc3Ryb3kuDQo+ ID4gKyAqLw0KPiA+ICtzdHJ1Y3QgcnRlX2Zsb3dfdGFibGVfa2V5IHsNCj4gPiArCXVpbnQzMl90 IHRhYmxlX2lkOyAvKio8IEluZGljYXRlIHdoaWNoIHRhYmxlIHRoZSBrZXkgaW5zdGFuY2UNCj4g PiArYmVsb25ncw0KPiA+IHRvLiAqLw0KPiA+ICsJaW50IHJlZl9jbnQ7IC8qKjwgUmVmZXJlbmNl IGNvdW50LCBpbiBhc3luYyBvcHMgaXQgcHJldmVudHMgdGhlDQo+ID4gK29iamVjdA0KPiA+IGJl IGRlc3RvcmllZCAuKi8NCj4gPiArCXVpbnQ4X3QgZGF0YVtdOyAvKio8IFBNRCBzcGVjaWZpYyBk YXRhLiAqLyB9Ow0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIEB3YXJuaW5nDQo+ID4gKyAqIEBi IEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZS4N Cj4gPiArICoNCj4gPiArICogQWN0aW9uIG9iamVjdC4NCj4gPiArICoNCj4gPiArICogQSBzdHJ1 Y3R1cmUgcmVwcmVzZW50IGEgdGFibGUgYWN0aW9uIG9iamVjdCwgc2hvdWxkIGJlIGNyZWF0ZWQg Lw0KPiA+IGRlc3Ryb3llZCBieQ0KPiA+ICsgKiBydGVfZmxvd190YWJsZV9hY3Rpb25fY3JlYXRl IGFuZCBydGVfZmxvd190YWJsZV9hY3Rpb25fZGVzdHJveS4NCj4gPiArICovDQo+ID4gK3N0cnVj dCBydGVfZmxvd190YWJsZV9hY3Rpb24gew0KPiA+ICsJdWludDMyX3QgdGFibGVfaWQ7IC8qKjwg SW5kaWNhdGUgd2hpY2ggdGFibGUgdGhlIGFjdGlvbiBpbnN0YW5jZQ0KPiA+IGJlbG9uZ3MgdG8u ICovDQo+ID4gKwl1aW50MzJfdCBzcGVjX2lkOyAvKio8IEluZGljYXRlIHdoaWNoIGFjdGlvbiBz cGVjIHRoZSBhY3Rpb24gZm9sbG93Lg0KPiA+ICovDQo+ID4gKwlpbnQgcmVmX2NudDsgLyoqPCBS ZWZlcmVuY2UgY291bnQsIGluIGFzeW5jIG9wcyBpdCBwcmV2ZW50cyB0aGUNCj4gPiArb2JqZWN0 DQo+ID4gYmUgZGVzdG9yaWVkIC4qLw0KPiA+ICsJdWludDhfdCBkYXRhW107IC8qKjwgUE1EIHNw ZWNpZmljIGRhdGEuICovIH07DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogQHdhcm5pbmcNCj4g PiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Ig bm90aWNlLg0KPiA+ICsgKg0KPiA+ICsgKiBJRCBsaXN0Lg0KPiA+ICsgKg0KPiA+ICsgKiBBbiBp ZCBsaXN0IHdpdGggdmFyaWFudCBzaXplLCBzaG91bGQgYmUgY3JlYXRlZCBieQ0KPiA+ICsgKiBy dGVfZmxvd190YWJsZV9saXN0X3BvcHVwIG9yIHJ0ZV9mbG93X2FjdGlvbl9zcGVjX2xpc3RfcG9w dXAuDQo+ID4gKyAqDQo+ID4gKyAqIEFwcGxpY2F0aW9uIG5lZWQgdG8gZnJlZSB0aGUgbGlzdCBi eSBydGVfZnJlZS4NCj4gPiArICovDQo+ID4gK3N0cnVjdCBydGVfZmxvd19pZF9saXN0IHsNCj4g PiArCXVpbnQzMl90IG51bTsgLyoqPCBOdW1iZXIgb2YgdGhlIGlkIGxpc3QgKi8NCj4gPiArCXVp bnQzMl90IGlkc1tdOyAvKio8IElEIGFycmF5ICovDQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKioN Cj4gPiArICogQHdhcm5pbmcNCj4gPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkg Y2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlLg0KPiA+ICsgKg0KPiA+ICsgKiBQb3B1cCB0YWJs ZSBpZCBsaXN0Lg0KPiA+ICsgKg0KPiA+ICsgKiBBIHZhcmlhbnQgc2l6ZSBsaXN0IHRoYXQgc3Rv cmUgYWxsIHRhYmxlIGlkZW50aWZpZXJzIHdpbGwgYmUgY3JlYXRlZC4NCj4gPiArICogQXBwbGlj YXRpb24gbmVlZCB0byBmcmVlIHRoZSBsaXN0IGJ5IHJ0ZV9mcmVlLg0KPiA+ICsgKg0KPiA+ICsg KiBAcGFyYW1baW5dIHBvcnRfaWQNCj4gPiArICogICAgUG9ydCBpZGVudGlmaWVyIG9mIHRoZSBF dGhlcm5ldCBkZXZpY2UuDQo+ID4gKyAqIEBwYXJhbVtvdXRdIGxpc3QNCj4gPiArICogICAgQSB2 YXJpYW50IHNpemUgaWQgbGlzdCwgc3RvcmUgYWxsIHRhYmxlIGlkZW50aWZpZXJzIG9mIGN1cnJl bnQgZXRoZXJuZXQNCj4gPiArICogICAgZGV2aWNlLg0KPiA+ICsgKiBAcGFyYW1bb3V0XSBlcnJv cg0KPiA+ICsgKiAgICBQZXJmb3JtIHZlcmJvc2UgZXJyb3IgcmVwb3J0aW5nIGlmIG5vdCBOVUxM LiBQTURzIGluaXRpYWxpemUgdGhpcw0KPiA+ICsgKiAgICBzdHJ1Y3R1cmUgaW4gY2FzZSBvZiBl cnJvciBvbmx5Lg0KPiA+ICsgKg0KPiA+ICsgKiBAcmV0dXJuDQo+ID4gKyAqICAgIDAgb24gc3Vj Y2VzcywgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZSBvdGhlcndpc2UgYW5kIHJ0ZV9lcnJubyBpcyBz ZXQuDQo+ID4gKyAqLw0KPiA+ICtfX3J0ZV9leHBlcmltZW50YWwgaW50DQo+ID4gK3J0ZV9mbG93 X3RhYmxlX2xpc3RfcG9wdXAodWludDE2X3QgcG9ydF9pZCwNCj4gPiArCQkJICBzdHJ1Y3QgcnRl X2Zsb3dfaWRfbGlzdCAqKmxpc3QsDQo+ID4gKwkJCSAgc3RydWN0IHJ0ZV9mbG93X2Vycm9yICpl cnJvcik7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogQHdhcm5pbmcNCj4gPiArICogQGIgRVhQ RVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlLg0KPiA+ ICsgKg0KPiA+ICsgKiBHZXQgdGFibGUgaW5mbyBieSBpZGVudGlmaWVyLg0KPiA+ICsgKg0KPiA+ ICsgKiBAcGFyYW1baW5dIHBvcnRfaWQNCj4gPiArICogICAgUG9ydCBpZGVudGlmaWVyIG9mIHRo ZSBFdGhlcm5ldCBkZXZpY2UuDQo+ID4gKyAqIEBwYXJhbVtpbl0gdGFibGVfaWQNCj4gPiArICog ICAgVGFibGUgaWRlbnRpZmllci4NCj4gPiArICogQHBhcmFtW291dF0gaW5mbw0KPiA+ICsgKiAg ICBQb2ludGVyIHRvIHN0b3JlIHRoZSB0YWJsZSBpbmZvLg0KPiA+ICsgKiBAcGFyYW1bb3V0XSBl cnJvcg0KPiA+ICsgKiAgICBQZXJmb3JtIHZlcmJvc2UgZXJyb3IgcmVwb3J0aW5nIGlmIG5vdCBO VUxMLiBQTURzIGluaXRpYWxpemUgdGhpcw0KPiA+ICsgKiAgICBzdHJ1Y3R1cmUgaW4gY2FzZSBv ZiBlcnJvciBvbmx5Lg0KPiA+ICsgKg0KPiA+ICsgKiBAcmV0dXJuDQo+ID4gKyAqICAgIDAgb24g c3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZSBvdGhlcndpc2UgYW5kIHJ0ZV9lcnJubyBp cyBzZXQuDQo+ID4gKyAqLw0KPiA+ICtfX3J0ZV9leHBlcmltZW50YWwgaW50DQo+ID4gK3J0ZV9m bG93X3RhYmxlX2luZm9fZ2V0KHVpbnQxNl90IHBvcnRfaWQsDQo+ID4gKwkJCXVpbnQzMl90IHRh YmxlX2lkLA0KPiA+ICsJCQlzdHJ1Y3QgcnRlX2Zsb3dfdGFibGVfaW5mbyAqaW5mbywNCj4gPiAr CQkJc3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJvcik7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiAr ICogQHdhcm5pbmcNCj4gPiArKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ug d2l0aG91dCBwcmlvciBub3RpY2UuDQo+ID4gKyAqDQo+ID4gKyAqIEdldCB0YWJsZSBpbmZvIGJ5 IG5hbWUuDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbVtpbl0gcG9ydF9pZA0KPiA+ICsgKiAgICBQ b3J0IGlkZW50aWZpZXIgb2YgdGhlIEV0aGVybmV0IGRldmljZS4NCj4gPiArICogQHBhcmFtW2lu XSBuYW1lDQo+ID4gKyAqICAgIFRhYmxlIG5hbWUuDQo+ID4gKyAqIEBwYXJhbVtvdXRdIGluZm8N Cj4gPiArICogICAgUG9pbnRlciB0byBzdG9yZSB0aGUgdGFibGUgaW5mby4NCj4gPiArICogQHBh cmFtW291dF0gZXJyb3INCj4gPiArICogICAgUGVyZm9ybSB2ZXJib3NlIGVycm9yIHJlcG9ydGlu ZyBpZiBub3QgTlVMTC4gUE1EcyBpbml0aWFsaXplIHRoaXMNCj4gPiArICogICAgc3RydWN0dXJl IGluIGNhc2Ugb2YgZXJyb3Igb25seS4NCj4gPiArICoNCj4gPiArICogQHJldHVybg0KPiA+ICsg KiAgICAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUgb3RoZXJ3aXNlIGFuZCBy dGVfZXJybm8gaXMgc2V0Lg0KPiA+ICsgKi8NCj4gPiArX19ydGVfZXhwZXJpbWVudGFsIGludA0K PiA+ICtydGVfZmxvd190YWJsZV9pbmZvX2dldF9ieV9uYW1lKHVpbnQxNl90IHBvcnRfaWQsDQo+ ID4gKwkJCQljb25zdCBjaGFyICpuYW1lLA0KPiA+ICsJCQkJc3RydWN0IHJ0ZV9mbG93X3RhYmxl X2luZm8gKmluZm8sDQo+ID4gKwkJCQlzdHJ1Y3QgcnRlX2Zsb3dfZXJyb3IgKmVycm9yKTsNCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgKiBAd2FybmluZw0KPiA+ICsgKiBAYiBFWFBFUklNRU5UQUw6 IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UuDQo+ID4gKyAqDQo+ID4g KyAqIEdldCB0YWJsZSBrZXkgaW5mbyBieSBpZGVudGlmaWVyLg0KPiA+ICsgKg0KPiA+ICsgKiBA cGFyYW1baW5dIHBvcnRfaWQNCj4gPiArICogICAgUG9ydCBpZGVudGlmaWVyIG9mIHRoZSBFdGhl cm5ldCBkZXZpY2UuDQo+ID4gKyAqIEBwYXJhbVtpbl0gdGFibGVfaWQNCj4gPiArICogICAgVGFi bGUgaWRlbnRpZmllci4NCj4gPiArICogQHBhcmFtW2luXSBmaWVsZF9pZA0KPiA+ICsgKiAgICBL ZXkgZmllbGQgaWRlbnRpZmllci4NCj4gPiArICogQHBhcmFtW2luZm9dIGluZm8NCj4gPiArICog ICAgUG9pbnRlciB0byBzdG9yZSB0aGUgdGFibGUga2V5IGZpZWxkIGluZm8uDQo+ID4gKyAqIEBw YXJhbVtvdXRdIGVycm9yDQo+ID4gKyAqICAgIFBlcmZvcm0gdmVyYm9zZSBlcnJvciByZXBvcnRp bmcgaWYgbm90IE5VTEwuIFBNRHMgaW5pdGlhbGl6ZSB0aGlzDQo+ID4gKyAqICAgIHN0cnVjdHVy ZSBpbiBjYXNlIG9mIGVycm9yIG9ubHkuDQo+ID4gKyAqDQo+ID4gKyAqIEByZXR1cm4NCj4gPiAr ICogICAgMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlIG90aGVyd2lzZSBhbmQg cnRlX2Vycm5vIGlzIHNldC4NCj4gPiArICovDQo+ID4gK19fcnRlX2V4cGVyaW1lbnRhbCBpbnQN Cj4gPiArcnRlX2Zsb3dfdGFibGVfa2V5X2ZpZWxkX2luZm9fZ2V0KHVpbnQxNl90IHBvcnRfaWQs DQo+ID4gKwkJCQkgIHVpbnQzMl90IHRhYmxlX2lkLA0KPiA+ICsJCQkJICB1aW50MzJfdCBmaWVs ZF9pZCwNCj4gPiArCQkJCSAgc3RydWN0IHJ0ZV9mbG93X3RhYmxlX2tleV9maWVsZF9pbmZvICpp bmZvLA0KPiA+ICsJCQkJICBzdHJ1Y3QgcnRlX2Zsb3dfZXJyb3IgKmVycm9yKTsNCj4gPiArDQo+ ID4gKy8qKg0KPiA+ICsgKiBAd2FybmluZw0KPiA+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMg QVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UuDQo+ID4gKyAqDQo+ID4gKyAqIFBv cHVwIGFjdGlvbiBzcGVjIGlkIGxpc3QuDQo+ID4gKyAqDQo+ID4gKyAqIEEgdmFyaWFudCBzaXpl IGxpc3QgdGhhdCBzdG9yZSBhbGwgYWN0aW9uIHNwZWMgaWRlbnRpZmllcnMgd2lsbCBiZSBjcmVh dGVkLg0KPiA+ICsgKiBBcHBsaWNhdGlvbiBuZWVkIHRvIGZyZWUgdGhlIGxpc3QgYnkgcnRlX2Zy ZWUuDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbVtpbl0gcG9ydF9pZA0KPiA+ICsgKiAgICBQb3J0 IGlkZW50aWZpZXIgb2YgdGhlIEV0aGVybmV0IGRldmljZS4NCj4gPiArICogQHBhcmFtW291dF0g ZXJyb3INCj4gPiArICogICAgUGVyZm9ybSB2ZXJib3NlIGVycm9yIHJlcG9ydGluZyBpZiBub3Qg TlVMTC4gUE1EcyBpbml0aWFsaXplIHRoaXMNCj4gPiArICogICAgc3RydWN0dXJlIGluIGNhc2Ug b2YgZXJyb3Igb25seS4NCj4gPiArICoNCj4gPiArICogQHJldHVybg0KPiA+ICsgKiAgICAwIG9u IHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUgb3RoZXJ3aXNlIGFuZCBydGVfZXJybm8g aXMgc2V0Lg0KPiA+ICsgKi8NCj4gPiArX19ydGVfZXhwZXJpbWVudGFsIGludA0KPiA+ICtydGVf Zmxvd19hY3Rpb25fc3BlY19saXN0X3BvcHVwKHVpbnQxNl90IHBvcnRfaWQsDQo+ID4gKwkJCQlz dHJ1Y3QgcnRlX2Zsb3dfaWRfbGlzdCAqKmxpc3QsDQo+ID4gKwkJCQlzdHJ1Y3QgcnRlX2Zsb3df ZXJyb3IgKmVycm9yKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBAd2FybmluZw0KPiA+ICsg KiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3Rp Y2UuDQo+ID4gKyAqDQo+ID4gKyAqIEdldCBhY3Rpb24gc3BlYyBpbmZvIGJ5IGlkZW50aWZpZXIu DQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbVtpbl0gcG9ydF9pZA0KPiA+ICsgKiAgICBQb3J0IGlk ZW50aWZpZXIgb2YgdGhlIEV0aGVybmV0IGRldmljZS4NCj4gPiArICogQHBhcmFtW2luXSBzcGVj X2lkDQo+ID4gKyAqICAgIEFjdGlvbiBzcGVjIGlkZW50aWZpZXIuDQo+ID4gKyAqIEBpbmZvW291 dF0gaW5mbw0KPiA+ICsgKiAgICBQb2ludGVyIHRvIHN0b3JlIHRoZSBhY3Rpb24gc3BlYyBpbmZv Lg0KPiA+ICsgKiBAcGFyYW1bb3V0XSBlcnJvcg0KPiA+ICsgKiAgICBQZXJmb3JtIHZlcmJvc2Ug ZXJyb3IgcmVwb3J0aW5nIGlmIG5vdCBOVUxMLiBQTURzIGluaXRpYWxpemUgdGhpcw0KPiA+ICsg KiAgICBzdHJ1Y3R1cmUgaW4gY2FzZSBvZiBlcnJvciBvbmx5Lg0KPiA+ICsgKg0KPiA+ICsgKiBA cmV0dXJuDQo+ID4gKyAqICAgIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZSBv dGhlcndpc2UgYW5kIHJ0ZV9lcnJubyBpcyBzZXQuDQo+ID4gKyAqLw0KPiA+ICtfX3J0ZV9leHBl cmltZW50YWwgaW50DQo+ID4gK3J0ZV9mbG93X2FjdGlvbl9zcGVjX2luZm9fZ2V0KHVpbnQxNl90 IHBvcnRfaWQsDQo+ID4gKwkJCSAgICAgIHVpbnQzMl90IHNwZWNfaWQsDQo+ID4gKwkJCSAgICAg IHN0cnVjdCBydGVfZmxvd19hY3Rpb25fc3BlY19pbmZvICppbmZvLA0KPiA+ICsJCQkgICAgICBz dHJ1Y3QgcnRlX2Zsb3dfZXJyb3IgKmVycm9yKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBA d2FybmluZw0KPiA+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0 aG91dCBwcmlvciBub3RpY2UuDQo+ID4gKyAqDQo+ID4gKyAqIEdldCBhY3Rpb24gc3BlYyBpbmZv IGJ5IG5hbWUuDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbVtpbl0gcG9ydF9pZA0KPiA+ICsgKiAg ICBQb3J0IGlkZW50aWZpZXIgb2YgdGhlIEV0aGVybmV0IGRldmljZS4NCj4gPiArICogQHBhcmFt W2luXSBuYW1lDQo+ID4gKyAqICAgIEFjdGlvbiBzcGVjIG5hbWUuDQo+ID4gKyAqIEBpbmZvW291 dF0gaW5mbw0KPiA+ICsgKiAgICBQb2ludGVyIHRvIHN0b3JlIHRoZSBhY3Rpb24gc3BlYyBpbmZv Lg0KPiA+ICsgKiBAcGFyYW1bb3V0XSBlcnJvcg0KPiA+ICsgKiAgICBQZXJmb3JtIHZlcmJvc2Ug ZXJyb3IgcmVwb3J0aW5nIGlmIG5vdCBOVUxMLiBQTURzIGluaXRpYWxpemUgdGhpcw0KPiA+ICsg KiAgICBzdHJ1Y3R1cmUgaW4gY2FzZSBvZiBlcnJvciBvbmx5Lg0KPiA+ICsgKg0KPiA+ICsgKiBA cmV0dXJuDQo+ID4gKyAqICAgIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZSBv dGhlcndpc2UgYW5kIHJ0ZV9lcnJubyBpcyBzZXQuDQo+ID4gKyAqLw0KPiA+ICtfX3J0ZV9leHBl cmltZW50YWwgaW50DQo+ID4gK3J0ZV9mbG93X2FjdGlvbl9zcGVjX2luZm9fZ2V0X2J5X25hbWUo dWludDE2X3QgcG9ydF9pZCwNCj4gPiArCQkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsDQo+ID4g KwkJCQkgICAgICBzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX3NwZWNfaW5mbyAqaW5mbywNCj4gPiAr CQkJCSAgICAgIHN0cnVjdCBydGVfZmxvd19lcnJvciAqZXJyb3IpOw0KPiA+ICsNCj4gPiArLyoq DQo+ID4gKyAqIEB3YXJuaW5nDQo+ID4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5 IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZS4NCj4gPiArICoNCj4gPiArICogR2V0IGFjdGlv biBzcGVjIGZpZWxkIGluZm8gYnkgaWRlbnRpZmllci4NCj4gPiArICoNCj4gPiArICogQHBhcmFt W2luXSBwb3J0X2lkDQo+ID4gKyAqICAgIFBvcnQgaWRlbnRpZmllciBvZiB0aGUgRXRoZXJuZXQg ZGV2aWNlLg0KPiA+ICsgKiBAcGFyYW1baW5dIHNwZWNfaWQNCj4gPiArICogICAgQWN0aW9uIHNw ZWMgaWRlbnRpZmllci4NCj4gPiArICogQHBhcmFtW2luXSBmaWVsZF9pZA0KPiA+ICsgKiAgICBG aWVsZCBpZGVudGlmaWVyLg0KPiA+ICsgKiBAcGFyYW1bb3V0XSBpbmZvDQo+ID4gKyAqICAgIFBv aW50ZXIgdG8gc3RvcmUgdGhlIGFjdGlvbiBzcGVjIGZpZWxkIGluZm8uDQo+ID4gKyAqIEBwYXJh bVtvdXRdIGVycm9yDQo+ID4gKyAqICAgIFBlcmZvcm0gdmVyYm9zZSBlcnJvciByZXBvcnRpbmcg aWYgbm90IE5VTEwuIFBNRHMgaW5pdGlhbGl6ZSB0aGlzDQo+ID4gKyAqICAgIHN0cnVjdHVyZSBp biBjYXNlIG9mIGVycm9yIG9ubHkuDQo+ID4gKyAqDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICog ICAgMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlIG90aGVyd2lzZSBhbmQgcnRl X2Vycm5vIGlzIHNldC4NCj4gPiArICovDQo+ID4gK19fcnRlX2V4cGVyaW1lbnRhbCBpbnQNCj4g PiArcnRlX2Zsb3dfYWN0aW9uX3NwZWNfZmllbGRfaW5mb19nZXQodWludDE2X3QgcG9ydF9pZCwN Cj4gPiArCQkJCSAgICB1aW50MzJfdCBzcGVjX2lkLA0KPiA+ICsJCQkJICAgIHVpbnQzMl90IGZp ZWxkX2lkLA0KPiA+ICsJCQkJICAgIHN0cnVjdCBydGVfZmxvd19hY3Rpb25fc3BlY19maWVsZF9p bmZvDQo+ID4gKmluZm8sDQo+ID4gKwkJCQkgICAgc3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJv cik7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogQHdhcm5pbmcNCj4gPiArICogQGIgRVhQRVJJ TUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlLg0KPiA+ICsg Kg0KPiA+ICsgKiBDcmVhdGUgYSB0YWJsZSBrZXkgb2JqZWN0Lg0KPiA+ICsgKg0KPiA+ICsgKiBB cHBsaWNhdGlvbiBuZWVkIHRvIGNhbGwgcnRlX2Zsb3dfdGFibGVfa2V5X2Rlc3Ryb3kgdG8gZnJl ZSB0aGUNCj4gPiAra2V5DQo+ID4gb2JqZWN0Lg0KPiA+ICsgKg0KPiA+ICsgKiBAcGFyYW1baW5d IHBvcnRfaWQNCj4gPiArICogICAgUG9ydCBpZGVudGlmaWVyIG9mIHRoZSBFdGhlcm5ldCBkZXZp Y2UuDQo+ID4gKyAqIEBwYXJhbVtpbl0gdGFibGVfaWQNCj4gPiArICogICAgVGFibGUgaWRlbnRp Zmllci4NCj4gPiArICogQHBhcmFtW291dF0ga2V5DQo+ID4gKyAqICAgIFRhYmxlIGtleSBvYmpl Y3QgY3JlYXRlZCBieSBQTUQuDQo+ID4gKyAqIEBwYXJhbVtvdXRdIGVycm9yDQo+ID4gKyAqICAg IFBlcmZvcm0gdmVyYm9zZSBlcnJvciByZXBvcnRpbmcgaWYgbm90IE5VTEwuIFBNRHMgaW5pdGlh bGl6ZSB0aGlzDQo+ID4gKyAqICAgIHN0cnVjdHVyZSBpbiBjYXNlIG9mIGVycm9yIG9ubHkuDQo+ ID4gKyAqDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogICAgMCBvbiBzdWNjZXNzLCBhIG5lZ2F0 aXZlIGVycm5vIHZhbHVlIG90aGVyd2lzZSBhbmQgcnRlX2Vycm5vIGlzIHNldC4NCj4gPiArICov DQo+ID4gK19fcnRlX2V4cGVyaW1lbnRhbCBpbnQNCj4gPiArcnRlX2Zsb3dfdGFibGVfa2V5X2Ny ZWF0ZSh1aW50MTZfdCBwb3J0X2lkLA0KPiA+ICsJCQkgIHVpbnQzMl90IHRhYmxlX2lkLA0KPiA+ ICsJCQkgIHN0cnVjdCBydGVfZmxvd190YWJsZV9rZXkgKiprZXksDQo+ID4gKwkJCSAgc3RydWN0 IHJ0ZV9mbG93X2Vycm9yICplcnJvcik7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogQHdhcm5p bmcNCj4gPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQg cHJpb3Igbm90aWNlLg0KPiA+ICsgKg0KPiA+ICsgKiBEZXN0cm95IGEgdGFibGUga2V5IG9iamVj dC4NCj4gPiArICoNCj4gPiArICogQHBhcmFtW2luXSBwb3J0X2lkDQo+ID4gKyAqICAgIFBvcnQg aWRlbnRpZmllciBvZiB0aGUgRXRoZXJuZXQgZGV2aWNlLg0KPiA+ICsgKiBAcGFyYW1baW5dIGtl eQ0KPiA+ICsgKiAgICBUYWJsZSBrZXkgb2JqZWN0IHRvIGRlc3Ryb3kuDQo+ID4gKyAqIEBwYXJh bVtvdXRdIGVycm9yDQo+ID4gKyAqICAgIFBlcmZvcm0gdmVyYm9zZSBlcnJvciByZXBvcnRpbmcg aWYgbm90IE5VTEwuIFBNRHMgaW5pdGlhbGl6ZSB0aGlzDQo+ID4gKyAqICAgIHN0cnVjdHVyZSBp biBjYXNlIG9mIGVycm9yIG9ubHkuDQo+ID4gKyAqDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICog ICAgMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlIG90aGVyd2lzZSBhbmQgcnRl X2Vycm5vIGlzIHNldC4NCj4gPiArICovDQo+ID4gK19fcnRlX2V4cGVyaW1lbnRhbCBpbnQNCj4g PiArcnRlX2Zsb3dfdGFibGVfa2V5X2Rlc3Ryb3kodWludDE2X3QgcG9ydF9pZCwNCj4gPiArCQkJ ICAgc3RydWN0IHJ0ZV9mbG93X3RhYmxlX2tleSAqa2V5LA0KPiA+ICsJCQkgICBzdHJ1Y3QgcnRl X2Zsb3dfZXJyb3IgKmVycm9yKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBAd2FybmluZw0K PiA+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlv ciBub3RpY2UuDQo+ID4gKyAqDQo+ID4gKyAqIENyZWF0ZSBhbiB0YWJsZSBhY3Rpb24gb2JqZWN0 Lg0KPiA+ICsgKg0KPiA+ICsgKiBAcGFyYW1baW5dIHBvcnRfaWQNCj4gPiArICogICAgUG9ydCBp ZGVudGlmaWVyIG9mIHRoZSBFdGhlcm5ldCBkZXZpY2UuDQo+ID4gKyAqIEBwYXJhbVtpbl0gdGFi bGVfaWQNCj4gPiArICogICAgVGFibGUgaWRlbnRpZmllci4NCj4gPiArICogQHBhcmFtW2luXSBz cGVjX2lkDQo+ID4gKyAqICAgIEFjdGlvbiBzcGVjIGlkZW50aWZpZXIuDQo+ID4gKyAqIEBwYXJh bVtvdXRdIGFjdGlvbg0KPiA+ICsgKiAgICBBY3Rpb24ga2V5IGNyZWF0ZWQgYnkgUE1ELg0KPiA+ ICsgKiBAcGFyYW1bb3V0XSBlcnJvcg0KPiA+ICsgKiAgICBQZXJmb3JtIHZlcmJvc2UgZXJyb3Ig cmVwb3J0aW5nIGlmIG5vdCBOVUxMLiBQTURzIGluaXRpYWxpemUgdGhpcw0KPiA+ICsgKiAgICBz dHJ1Y3R1cmUgaW4gY2FzZSBvZiBlcnJvciBvbmx5Lg0KPiA+ICsgKg0KPiA+ICsgKiBAcmV0dXJu DQo+ID4gKyAqICAgIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZSBvdGhlcndp c2UgYW5kIHJ0ZV9lcnJubyBpcyBzZXQuDQo+ID4gKyAqLw0KPiA+ICtfX3J0ZV9leHBlcmltZW50 YWwgaW50DQo+ID4gK3J0ZV9mbG93X3RhYmxlX2FjdGlvbl9jcmVhdGUodWludDE2X3QgcG9ydF9p ZCwNCj4gPiArCQkJICAgICB1aW50MzJfdCB0YWJsZV9pZCwNCj4gPiArCQkJICAgICB1aW50MzJf dCBzcGVjX2lkLA0KPiA+ICsJCQkgICAgIHN0cnVjdCBydGVfZmxvd190YWJsZV9hY3Rpb24gKiph Y3Rpb24sDQo+ID4gKwkJCSAgICAgc3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJvcik7DQo+ID4g Kw0KPiA+ICsvKioNCj4gPiArICogQHdhcm5pbmcNCj4gPiArICogQGIgRVhQRVJJTUVOVEFMOiB0 aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlLg0KPiA+ICsgKg0KPiA+ICsg KiBEZXN0cm95IGFuIHRhYmxlIGFjdGlvbiBvYmplY3QuDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJh bVtpbl0gcG9ydF9pZA0KPiA+ICsgKiAgICBQb3J0IGlkZW50aWZpZXIgb2YgdGhlIEV0aGVybmV0 IGRldmljZS4NCj4gPiArICogQHBhcmFtW2luXSBhY3Rpb24NCj4gPiArICogICAgQWN0aW9uIG9i amVjdCB0byBkZXN0cm95Lg0KPiA+ICsgKiBAcGFyYW1bb3V0XSBlcnJvcg0KPiA+ICsgKiAgICBQ ZXJmb3JtIHZlcmJvc2UgZXJyb3IgcmVwb3J0aW5nIGlmIG5vdCBOVUxMLiBQTURzIGluaXRpYWxp emUgdGhpcw0KPiA+ICsgKiAgICBzdHJ1Y3R1cmUgaW4gY2FzZSBvZiBlcnJvciBvbmx5Lg0KPiA+ ICsgKg0KPiA+ICsgKiBAcmV0dXJuDQo+ID4gKyAqICAgIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2 ZSBlcnJubyB2YWx1ZSBvdGhlcndpc2UgYW5kIHJ0ZV9lcnJubyBpcyBzZXQuDQo+ID4gKyAqLw0K PiA+ICtfX3J0ZV9leHBlcmltZW50YWwgaW50DQo+ID4gK3J0ZV9mbG93X3RhYmxlX2FjdGlvbl9k ZXN0cm95KHVpbnQxNl90IHBvcnRfaWQsDQo+ID4gKwkJCSAgICAgIHN0cnVjdCBydGVfZmxvd190 YWJsZV9hY3Rpb24gKmFjdGlvbiwNCj4gPiArCQkJICAgICAgc3RydWN0IHJ0ZV9mbG93X2Vycm9y ICplcnJvcik7DQo+ID4gKw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIEB3YXJuaW5nDQo+ID4g KyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5v dGljZS4NCj4gPiArICoNCj4gPiArICogU2V0IHRhYmxlIGtleSBmaWVsZCB2YWx1ZSBieSBpZGVu dGlmaWVyLg0KPiA+ICsgKg0KPiA+ICsgKiBAcGFyYW1baW5dIHBvcnRfaWQNCj4gPiArICogICAg UG9ydCBpZGVudGlmaWVyIG9mIHRoZSBFdGhlcm5ldCBkZXZpY2UuDQo+ID4gKyAqIEBwYXJhbVtp bl0ga2V5DQo+ID4gKyAqICAgIFRhYmxlIGtleSBvYmplY3QgdG8gdXBkYXRlLg0KPiA+ICsgKiBA cGFyYW1baW5dIGZpZWxkX2lkDQo+ID4gKyAqICAgIGtleSBmaWVsZCBpZGVudGlmaWVyLg0KPiA+ ICsgKiBAcGFyYW1baW5dIHZhbHVlDQo+ID4gKyAqICAgIEJ5dGUgYXJyYXkgdG8gc3RvcmUgdGhl IHZhbHVlDQo+ID4gKyAqIEBwYXJhbVtpbl0gc2l6ZQ0KPiA+ICsgKiAgICBTaXplIG9mIHRoZSBi eXRlIGFycmF5Lg0KPiA+ICsgKiBAcGFyYW1bb3V0XSBlcnJvcg0KPiA+ICsgKiAgICBQZXJmb3Jt IHZlcmJvc2UgZXJyb3IgcmVwb3J0aW5nIGlmIG5vdCBOVUxMLiBQTURzIGluaXRpYWxpemUgdGhp cw0KPiA+ICsgKiAgICBzdHJ1Y3R1cmUgaW4gY2FzZSBvZiBlcnJvciBvbmx5Lg0KPiA+ICsgKg0K PiA+ICsgKiBAcmV0dXJuDQo+ID4gKyAqICAgIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJu byB2YWx1ZSBvdGhlcndpc2UgYW5kIHJ0ZV9lcnJubyBpcyBzZXQuDQo+ID4gKyAqLw0KPiA+ICtf X3J0ZV9leHBlcmltZW50YWwgaW50DQo+ID4gK3J0ZV9mbG93X3RhYmxlX2tleV9maWVsZF9zZXQo dWludDE2X3QgcG9ydF9pZCwNCj4gPiArCQkJICAgICBzdHJ1Y3QgcnRlX2Zsb3dfdGFibGVfa2V5 ICprZXksDQo+ID4gKwkJCSAgICAgdWludDMyX3QgZmllbGRfaWQsDQo+ID4gKwkJCSAgICAgY29u c3QgdWludDhfdCAqdmFsdWUsDQo+ID4gKwkJCSAgICAgdWludDE2X3Qgc2l6ZSwNCj4gPiArCQkJ ICAgICBzdHJ1Y3QgcnRlX2Zsb3dfZXJyb3IgKmVycm9yKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ ICsgKiBAd2FybmluZw0KPiA+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFu Z2Ugd2l0aG91dCBwcmlvciBub3RpY2UuDQo+ID4gKyAqDQo+ID4gKyAqIFNldCB0YWJsZSBrZXkg ZmllbGQgdmFsdWUgYnkgbmFtZS4NCj4gPiArICoNCj4gPiArICogQHBhcmFtW2luXSBwb3J0X2lk DQo+ID4gKyAqICAgIFBvcnQgaWRlbnRpZmllciBvZiB0aGUgRXRoZXJuZXQgZGV2aWNlLg0KPiA+ ICsgKiBAcGFyYW1baW5dIGtleQ0KPiA+ICsgKiAgICBUYWJsZSBrZXkgb2JqZWN0IHRvIHVwZGF0 ZS4NCj4gPiArICogQHBhcmFtW2luXSBuYW1lDQo+ID4gKyAqICAgIGtleSBmaWVsZCBuYW1lLg0K PiA+ICsgKiBAcGFyYW1baW5dIHZhbHVlDQo+ID4gKyAqICAgIEJ5dGUgYXJyYXkgdG8gc3RvcmUg dGhlIHZhbHVlIHRvIG1hdGNoLg0KPiA+ICsgKiBAcGFyYW1baW5dIHNpemUNCj4gPiArICogICAg U2l6ZSBvZiB0aGUgYnl0ZSBhcnJheS4NCj4gPiArICogQHBhcmFtW291dF0gZXJyb3INCj4gPiAr ICogICAgUGVyZm9ybSB2ZXJib3NlIGVycm9yIHJlcG9ydGluZyBpZiBub3QgTlVMTC4gUE1EcyBp bml0aWFsaXplIHRoaXMNCj4gPiArICogICAgc3RydWN0dXJlIGluIGNhc2Ugb2YgZXJyb3Igb25s eS4NCj4gPiArICoNCj4gPiArICogQHJldHVybg0KPiA+ICsgKiAgICAwIG9uIHN1Y2Nlc3MsIGEg bmVnYXRpdmUgZXJybm8gdmFsdWUgb3RoZXJ3aXNlIGFuZCBydGVfZXJybm8gaXMgc2V0Lg0KPiA+ ICsgKi8NCj4gPiArX19ydGVfZXhwZXJpbWVudGFsIGludA0KPiA+ICtydGVfZmxvd190YWJsZV9r ZXlfZmllbGRfc2V0X2J5X25hbWUodWludDE2X3QgcG9ydF9pZCwNCj4gPiArCQkJCSAgICAgc3Ry dWN0IHJ0ZV9mbG93X3RhYmxlX2tleSAqa2V5LA0KPiA+ICsJCQkJICAgICBjb25zdCBjaGFyICpu YW1lLA0KPiA+ICsJCQkJICAgICBjb25zdCB1aW50OF90ICp2YWx1ZSwNCj4gPiArCQkJCSAgICAg dWludDE2X3Qgc2l6ZSwNCj4gPiArCQkJCSAgICAgc3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJv cik7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogQHdhcm5pbmcNCj4gPiArICogQGIgRVhQRVJJ TUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlLg0KPiA+ICsg Kg0KPiA+ICsgKiBTZXQgd2lsZGNhcmQgbWF0Y2gga2V5IGZpZWxkIGJ5IGlkZW50aWZpZXIuDQo+ ID4gKyAqDQo+ID4gKyAqIEZvciB3aWxkY2FyZCBtYXRjaCwgb25seSBhIGJpdCBzZXQgaW4gbWFz ayBzaG91bGQgYmUgbWF0Y2hlZC4NCj4gPiArICoNCj4gPiArICogQHBhcmFtW2luXSBwb3J0X2lk DQo+ID4gKyAqICAgIFBvcnQgaWRlbnRpZmllciBvZiB0aGUgRXRoZXJuZXQgZGV2aWNlLg0KPiA+ ICsgKiBAcGFyYW1baW5dIGtleQ0KPiA+ICsgKiAgICBUYWJsZSBrZXkgb2JqZWN0IHRvIHVwZGF0 ZS4NCj4gPiArICogQHBhcmFtW2luXSBmaWVsZF9pZA0KPiA+ICsgKiAgICBLZXkgZmllbGQgaWRl bnRpZmllci4NCj4gPiArICogQHBhcmFtW2luXSB2YWx1ZQ0KPiA+ICsgKiAgICBCeXRlIGFycmF5 IHN0b3JlcyB0aGUgdmFsdWUgdG8gbWF0Y2guDQo+ID4gKyAqIEBwYXJhbVtpbl0gbWFzaw0KPiA+ ICsgKiAgICBCeXRlIGFycmF5IHN0b3JlcyB0aGUgYml0IG1hc2suDQo+ID4gKyAqIEBwYXJhbVtp bl0gc2l6ZQ0KPiA+ICsgKiAgICBTaXplIG9mIHZhbHVlIGFuZCBtYXNrIGJ5dGUgYXJyYXkuDQo+ ID4gKyAqIEBwYXJhbVtvdXRdIGVycm9yDQo+ID4gKyAqICAgIFBlcmZvcm0gdmVyYm9zZSBlcnJv ciByZXBvcnRpbmcgaWYgbm90IE5VTEwuIFBNRHMgaW5pdGlhbGl6ZSB0aGlzDQo+ID4gKyAqICAg IHN0cnVjdHVyZSBpbiBjYXNlIG9mIGVycm9yIG9ubHkuDQo+ID4gKyAqDQo+ID4gKyAqIEByZXR1 cm4NCj4gPiArICogICAgMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlIG90aGVy d2lzZSBhbmQgcnRlX2Vycm5vIGlzIHNldC4NCj4gPiArICovDQo+ID4gK19fcnRlX2V4cGVyaW1l bnRhbCBpbnQNCj4gPiArcnRlX2Zsb3dfdGFibGVfa2V5X2ZpZWxkX3NldF93aXRoX21hc2sodWlu dDE2X3QgcG9ydF9pZCwNCj4gPiArCQkJCSAgICAgICBzdHJ1Y3QgcnRlX2Zsb3dfdGFibGVfa2V5 ICprZXksDQo+ID4gKwkJCQkgICAgICAgdWludDMyX3QgZmllbGRfaWQsDQo+ID4gKwkJCQkgICAg ICAgY29uc3QgdWludDhfdCAqdmFsdWUsDQo+ID4gKwkJCQkgICAgICAgY29uc3QgdWludDhfdCAq bWFzaywNCj4gPiArCQkJCSAgICAgICB1aW50MTZfdCBzaXplLA0KPiA+ICsJCQkJICAgICAgIHN0 cnVjdCBydGVfZmxvd19lcnJvciAqZXJyb3IpOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIEB3 YXJuaW5nDQo+ID4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRo b3V0IHByaW9yIG5vdGljZS4NCj4gPiArICoNCj4gPiArICogU2V0IHdpbGRjYXJkIG1hdGNoIGtl eSBmaWVsZCBieSBuYW1lLg0KPiA+ICsgKg0KPiA+ICsgKiBAcGFyYW1baW5dIHBvcnRfaWQNCj4g PiArICogICAgUG9ydCBpZGVudGlmaWVyIG9mIHRoZSBFdGhlcm5ldCBkZXZpY2UuDQo+ID4gKyAq IEBwYXJhbVtpbl0ga2V5DQo+ID4gKyAqICAgIFRhYmxlIGtleSBvYmplY3QgdG8gdXBkYXRlLg0K PiA+ICsgKiBAcGFyYW1baW5dIG5hbWUNCj4gPiArICogICAgS2V5IGZpZWxkIG5hbWUuDQo+ID4g KyAqIEBwYXJhbVtpbl0gdmFsdWUNCj4gPiArICogICAgQnl0ZSBhcnJheSBzdG9yZXMgdGhlIHZh bHVlIHRvIG1hdGNoLg0KPiA+ICsgKiBAcGFyYW1baW5dIG1hc2sNCj4gPiArICogICAgQnl0ZSBh cnJheSBzdG9yZXMgdGhlIGJpdCBtYXNrLg0KPiA+ICsgKiBAcGFyYW1baW5dIHNpemUNCj4gPiAr ICogICAgU2l6ZSBvZiB2YWx1ZSBhbmQgbWFzayBieXRlIGFycmF5Lg0KPiA+ICsgKiBAcGFyYW1b b3V0XSBlcnJvcg0KPiA+ICsgKiAgICBQZXJmb3JtIHZlcmJvc2UgZXJyb3IgcmVwb3J0aW5nIGlm IG5vdCBOVUxMLiBQTURzIGluaXRpYWxpemUgdGhpcw0KPiA+ICsgKiAgICBzdHJ1Y3R1cmUgaW4g Y2FzZSBvZiBlcnJvciBvbmx5Lg0KPiA+ICsgKg0KPiA+ICsgKiBAcmV0dXJuDQo+ID4gKyAqICAg IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZSBvdGhlcndpc2UgYW5kIHJ0ZV9l cnJubyBpcyBzZXQuDQo+ID4gKyAqLw0KPiA+ICtfX3J0ZV9leHBlcmltZW50YWwgaW50DQo+ID4g K3J0ZV9mbG93X3RhYmxlX2tleV9maWVsZF9zZXRfd2l0aF9tYXNrX2J5X25hbWUodWludDE2X3Qg cG9ydF9pZCwNCj4gPiArCQkJCQkgICAgICAgc3RydWN0IHJ0ZV9mbG93X3RhYmxlX2tleSAqa2V5 LA0KPiA+ICsJCQkJCSAgICAgICBjb25zdCBjaGFyICpuYW1lLA0KPiA+ICsJCQkJCSAgICAgICBj b25zdCB1aW50OF90ICp2YWx1ZSwNCj4gPiArCQkJCQkgICAgICAgY29uc3QgdWludDhfdCAqbWFz aywNCj4gPiArCQkJCQkgICAgICAgdWludDE2X3Qgc2l6ZSwNCj4gPiArCQkJCQkgICAgICAgc3Ry dWN0IHJ0ZV9mbG93X2Vycm9yICplcnJvcik7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogQHdh cm5pbmcNCj4gPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhv dXQgcHJpb3Igbm90aWNlLg0KPiA+ICsgKg0KPiA+ICsgKiBTZXQgcmFuZ2UgbWF0Y2gga2V5IGZp ZWxkIGJ5IGlkZW50aWZpZXIuDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbVtpbl0gcG9ydF9pZA0K PiA+ICsgKiAgICBQb3J0IGlkZW50aWZpZXIgb2YgdGhlIEV0aGVybmV0IGRldmljZS4NCj4gPiAr ICogQHBhcmFtW2luXSBrZXkNCj4gPiArICogICAgVGFibGUga2V5IG9iamVjdCB0byB1cGRhdGUu DQo+ID4gKyAqIEBwYXJhbVtpbl0gZmllbGRfaWQNCj4gPiArICogICAgS2V5IGZpZWxkIGlkZW50 aWZpZXIuDQo+ID4gKyAqIEBwYXJhbVtpbl0gbWluDQo+ID4gKyAqICAgIEJ5dGUgYXJyYXkgc3Rv cmVzIHRoZSBtaW4gdmFsdWUgb2YgdGhlIHJhbmdlIHRvIG1hdGNoDQo+ID4gKyAqIEBwYXJhbVtp bl0gbWF4DQo+ID4gKyAqICAgIEJ5dGUgYXJyYXkgc3RvcmVzIHRoZSBtYXggdmFsdWUgb2YgdGhl IHJhbmdlIHRvIG1hdGNoDQo+ID4gKyAqIEBwYXJhbVtpbl0gc2l6ZQ0KPiA+ICsgKiAgICBTaXpl IG9mIHRoZSBtaW4gYW5kIG1heCBieXRlIGFycmF5DQo+ID4gKyAqIEBwYXJhbVtvdXRdIGVycm9y DQo+ID4gKyAqICAgIFBlcmZvcm0gdmVyYm9zZSBlcnJvciByZXBvcnRpbmcgaWYgbm90IE5VTEwu IFBNRHMgaW5pdGlhbGl6ZSB0aGlzDQo+ID4gKyAqICAgIHN0cnVjdHVyZSBpbiBjYXNlIG9mIGVy cm9yIG9ubHkuDQo+ID4gKyAqDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogICAgMCBvbiBzdWNj ZXNzLCBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlIG90aGVyd2lzZSBhbmQgcnRlX2Vycm5vIGlzIHNl dC4NCj4gPiArICovDQo+ID4gK19fcnRlX2V4cGVyaW1lbnRhbCBpbnQNCj4gPiArcnRlX2Zsb3df dGFibGVfa2V5X2ZpZWxkX3NldF93aXRoX3JhbmdlKHVpbnQxNl90IHBvcnRfaWQsDQo+ID4gKwkJ CQkgICAgICAgIHN0cnVjdCBydGVfZmxvd190YWJsZV9rZXkgKmtleSwNCj4gPiArCQkJCQl1aW50 MzJfdCBmaWVsZF9pZCwNCj4gPiArCQkJCQljb25zdCB1aW50OF90ICptaW4sDQo+ID4gKwkJCQkJ Y29uc3QgdWludDhfdCAqbWF4LA0KPiA+ICsJCQkJCXVpbnQxNl90IHNpemUsDQo+ID4gKwkJCQkJ c3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJvcik7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICog QHdhcm5pbmcNCj4gPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdp dGhvdXQgcHJpb3Igbm90aWNlLg0KPiA+ICsgKg0KPiA+ICsgKiBTZXQgcmFuZ2UgbWF0Y2gga2V5 IGZpZWxkIGJ5IG5hbWUuDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbVtpbl0gcG9ydF9pZA0KPiA+ ICsgKiAgICBQb3J0IGlkZW50aWZpZXIgb2YgdGhlIEV0aGVybmV0IGRldmljZS4NCj4gPiArICog QHBhcmFtW2luXSBrZXkNCj4gPiArICogICAgVGFibGUga2V5IG9iamVjdCB0byB1cGRhdGUuDQo+ ID4gKyAqIEBwYXJhbVtpbl0gbmFtZQ0KPiA+ICsgKiAgICBLZXkgZmllbGQgbmFtZS4NCj4gPiAr ICogQHBhcmFtW2luXSBtaW4NCj4gPiArICogICAgQnl0ZSBhcnJheSBzdG9yZXMgdGhlIG1pbiB2 YWx1ZSBvZiB0aGUgcmFuZ2UgdG8gbWF0Y2gNCj4gPiArICogQHBhcmFtW2luXSBtYXgNCj4gPiAr ICogICAgQnl0ZSBhcnJheSBzdG9yZXMgdGhlIG1heCB2YWx1ZSBvZiB0aGUgcmFuZ2UgdG8gbWF0 Y2gNCj4gPiArICogQHBhcmFtW2luXSBzaXplDQo+ID4gKyAqICAgIFNpemUgb2YgdGhlIG1pbiBh bmQgbWF4IGJ5dGUgYXJyYXkNCj4gPiArICogQHBhcmFtW291dF0gZXJyb3INCj4gPiArICogICAg UGVyZm9ybSB2ZXJib3NlIGVycm9yIHJlcG9ydGluZyBpZiBub3QgTlVMTC4gUE1EcyBpbml0aWFs aXplIHRoaXMNCj4gPiArICogICAgc3RydWN0dXJlIGluIGNhc2Ugb2YgZXJyb3Igb25seS4NCj4g PiArICoNCj4gPiArICogQHJldHVybg0KPiA+ICsgKiAgICAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRp dmUgZXJybm8gdmFsdWUgb3RoZXJ3aXNlIGFuZCBydGVfZXJybm8gaXMgc2V0Lg0KPiA+ICsgKi8N Cj4gPiArX19ydGVfZXhwZXJpbWVudGFsIGludA0KPiA+ICtydGVfZmxvd190YWJsZV9rZXlfZmll bGRfc2V0X3dpdGhfcmFuZ2VfYnlfbmFtZSh1aW50MTZfdCBwb3J0X2lkLA0KPiA+ICsJCQkJCQlz dHJ1Y3QgcnRlX2Zsb3dfdGFibGVfa2V5DQo+ID4gKmtleSwNCj4gPiArCQkJCQkJY29uc3QgY2hh ciAqbmFtZSwNCj4gPiArCQkJCQkJY29uc3QgdWludDhfdCAqbWluLA0KPiA+ICsJCQkJCQljb25z dCB1aW50OF90ICptYXgsDQo+ID4gKwkJCQkJCXVpbnQxNl90IHNpemUsDQo+ID4gKwkJCQkJCXN0 cnVjdCBydGVfZmxvd19lcnJvciAqZXJyb3IpOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIEB3 YXJuaW5nDQo+ID4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRo b3V0IHByaW9yIG5vdGljZS4NCj4gPiArICoNCj4gPiArICogU2V0IGxwbSBtYXRjaCBrZXkgZmll bGQgYnkgaWRlbnRpZmllci4NCj4gPiArICoNCj4gPiArICogQHBhcmFtW2luXSBwb3J0X2lkDQo+ ID4gKyAqICAgIFBvcnQgaWRlbnRpZmllciBvZiB0aGUgRXRoZXJuZXQgZGV2aWNlLg0KPiA+ICsg KiBAcGFyYW1baW5dIGtleQ0KPiA+ICsgKiAgICBUYWJsZSBrZXkgb2JqZWN0IHRvIHVwZGF0ZS4N Cj4gPiArICogQHBhcmFtW2luXSBmaWVsZF9pZA0KPiA+ICsgKiAgICBLZXkgZmllbGQgaWRlbnRp Zmllci4NCj4gPiArICogQHBhcmFtW2luXSB2YWx1ZQ0KPiA+ICsgKiAgICBCeXRlIGFycmF5IHN0 b3JlcyB0aGUgdmFsdWUgdG8gbWF0Y2guDQo+ID4gKyAqIEBwYXJhbVtpbl0gc2l6ZQ0KPiA+ICsg KiAgICBTaXplIG9mIHZhbHVlIGJ5dGUgYXJyYXkuDQo+ID4gKyAqIEBwYXJhbVtpbl0gcHJlZml4 DQo+ID4gKyAqICAgIEJpdHMgb2YgdGhlIHByZWZpeCB0byBtYXRjaCwgbXVzdCA8PSAoOCAqIHNp emUpDQo+ID4gKyAqIEBwYXJhbVtvdXRdIGVycm9yDQo+ID4gKyAqICAgIFBlcmZvcm0gdmVyYm9z ZSBlcnJvciByZXBvcnRpbmcgaWYgbm90IE5VTEwuIFBNRHMgaW5pdGlhbGl6ZSB0aGlzDQo+ID4g KyAqICAgIHN0cnVjdHVyZSBpbiBjYXNlIG9mIGVycm9yIG9ubHkuDQo+ID4gKyAqDQo+ID4gKyAq IEByZXR1cm4NCj4gPiArICogICAgMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIHZhbHVl IG90aGVyd2lzZSBhbmQgcnRlX2Vycm5vIGlzIHNldC4NCj4gPiArICovDQo+ID4gK19fcnRlX2V4 cGVyaW1lbnRhbCBpbnQNCj4gPiArcnRlX2Zsb3dfdGFibGVfa2V5X2ZpZWxkX3NldF93aXRoX3By ZWZpeCh1aW50MTZfdCBwb3J0X2lkLA0KPiA+ICsJCQkJCSBzdHJ1Y3QgcnRlX2Zsb3dfdGFibGVf a2V5ICprZXksDQo+ID4gKwkJCQkJIHVpbnQzMl90IGZpZWxkX2lkLA0KPiA+ICsJCQkJCSBjb25z dCB1aW50OF90ICp2YWx1ZSwNCj4gPiArCQkJCQkgdWludDE2X3Qgc2l6ZSwNCj4gPiArCQkJCQkg dWludDE2X3QgcHJlZml4LA0KPiA+ICsJCQkJCSBzdHJ1Y3QgcnRlX2Zsb3dfZXJyb3IgKmVycm9y KTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBAd2FybmluZw0KPiA+ICsgKiBAYiBFWFBFUklN RU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UuDQo+ID4gKyAq DQo+ID4gKyAqIFNldCBscG0gbWF0Y2gga2V5IGZpZWxkIGJ5IG5hbWUuDQo+ID4gKyAqDQo+ID4g KyAqIEBwYXJhbVtpbl0gcG9ydF9pZA0KPiA+ICsgKiAgICBQb3J0IGlkZW50aWZpZXIgb2YgdGhl IEV0aGVybmV0IGRldmljZS4NCj4gPiArICogQHBhcmFtW2luXSBrZXkNCj4gPiArICogICAgVGFi bGUga2V5IG9iamVjdCB0byB1cGRhdGUuDQo+ID4gKyAqIEBwYXJhbVtpbl0gbmFtZQ0KPiA+ICsg KiAgICBLZXkgZmllbGQgbmFtZS4NCj4gPiArICogQHBhcmFtW2luXSB2YWx1ZQ0KPiA+ICsgKiAg ICBCeXRlIGFycmF5IHN0b3JlcyB0aGUgdmFsdWUgdG8gbWF0Y2guDQo+ID4gKyAqIEBwYXJhbVtp bl0gc2l6ZQ0KPiA+ICsgKiAgICBTaXplIG9mIHZhbHVlIGJ5dGUgYXJyYXkuDQo+ID4gKyAqIEBw YXJhbVtpbl0gcHJlZml4DQo+ID4gKyAqICAgIEJpdHMgb2YgdGhlIHByZWZpeCB0byBtYXRjaCwg bXVzdCA8PSAoOCAqIHNpemUpDQo+ID4gKyAqIEBwYXJhbVtvdXRdIGVycm9yDQo+ID4gKyAqICAg IFBlcmZvcm0gdmVyYm9zZSBlcnJvciByZXBvcnRpbmcgaWYgbm90IE5VTEwuIFBNRHMgaW5pdGlh bGl6ZSB0aGlzDQo+ID4gKyAqICAgIHN0cnVjdHVyZSBpbiBjYXNlIG9mIGVycm9yIG9ubHkuDQo+ ID4gKyAqDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogICAgMCBvbiBzdWNjZXNzLCBhIG5lZ2F0 aXZlIGVycm5vIHZhbHVlIG90aGVyd2lzZSBhbmQgcnRlX2Vycm5vIGlzIHNldC4NCj4gPiArICov DQo+ID4gK19fcnRlX2V4cGVyaW1lbnRhbCBpbnQNCj4gPiArcnRlX2Zsb3dfdGFibGVfa2V5X2Zp ZWxkX3NldF93aXRoX3ByZWZpeF9ieV9uYW1lKHVpbnQxNl90IHBvcnRfaWQsDQo+ID4gKwkJCQkJ CSBzdHJ1Y3QgcnRlX2Zsb3dfdGFibGVfa2V5DQo+ID4gKmtleSwNCj4gPiArCQkJCQkJIGNvbnN0 IGNoYXIqIG5hbWUsDQo+ID4gKwkJCQkJCSBjb25zdCB1aW50OF90ICp2YWx1ZSwNCj4gPiArCQkJ CQkJIHVpbnQxNl90IHNpemUsDQo+ID4gKwkJCQkJCSB1aW50MTZfdCBwcmVmaXgsDQo+ID4gKwkJ CQkJCSBzdHJ1Y3QgcnRlX2Zsb3dfZXJyb3INCj4gPiAqZXJyb3IpOw0KPiA+ICsNCj4gPiArLyoq DQo+ID4gKyAqIEB3YXJuaW5nDQo+ID4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5 IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZS4NCj4gPiArICoNCj4gPiArICogU2V0IGFjdGlv biBmaWVsZCB2YWx1ZS4NCj4gPiArICoNCj4gPiArICogQHBhcmFtW2luXSBwb3J0X2lkDQo+ID4g KyAqICAgIFBvcnQgaWRlbnRpZmllciBvZiB0aGUgRXRoZXJuZXQgZGV2aWNlLg0KPiA+ICsgKiBA cGFyYW1baW5dIGFjdGlvbg0KPiA+ICsgKiAgICBBY3Rpb24gb2JqZWN0IHRvIHVwZGF0ZS4NCj4g PiArICogQHBhcmFtW2luXSBmaWVsZF9pZA0KPiA+ICsgKiAgICBGaWVsZCBpZGVudGlmaWVyLg0K PiA+ICsgKiBAcGFyYW1baW5dIHZhbHVlDQo+ID4gKyAqICAgIEJ5dGUgYXJyYXkgc3RvcmVzIHRo ZSB2YWx1ZSBvZiB0aGUgZmllbGQuDQo+ID4gKyAqIEBwYXJhbVtpbl0gc2l6ZQ0KPiA+ICsgKiAg ICBTaXplIG9mIHRoZSBieXRlIGFycmF5Lg0KPiA+ICsgKiBAcGFyYW1bb3V0XSBlcnJvcg0KPiA+ ICsgKiAgICBQZXJmb3JtIHZlcmJvc2UgZXJyb3IgcmVwb3J0aW5nIGlmIG5vdCBOVUxMLiBQTURz IGluaXRpYWxpemUgdGhpcw0KPiA+ICsgKiAgICBzdHJ1Y3R1cmUgaW4gY2FzZSBvZiBlcnJvciBv bmx5Lg0KPiA+ICsgKg0KPiA+ICsgKiBAcmV0dXJuDQo+ID4gKyAqICAgIDAgb24gc3VjY2Vzcywg YSBuZWdhdGl2ZSBlcnJubyB2YWx1ZSBvdGhlcndpc2UgYW5kIHJ0ZV9lcnJubyBpcyBzZXQuDQo+ ID4gKyAqLw0KPiA+ICtfX3J0ZV9leHBlcmltZW50YWwgaW50DQo+ID4gK3J0ZV9mbG93X3RhYmxl X2FjdGlvbl9maWVsZF9zZXQodWludDE2X3QgcG9ydF9pZCwNCj4gPiArCQkJCXN0cnVjdCBydGVf Zmxvd190YWJsZV9hY3Rpb24gKmFjdGlvbiwNCj4gPiArCQkJCXVpbnQzMl90IGZpZWxkX2lkLA0K PiA+ICsJCQkJY29uc3QgdWludDhfdCAqdmFsdWUsDQo+ID4gKwkJCQl1aW50MTZfdCBzaXplLA0K PiA+ICsJCQkJc3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJvcik7DQo+ID4gKw0KPiA+ICsvKioN Cj4gPiArICogQHdhcm5pbmcNCj4gPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkg Y2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlLg0KPiA+ICsgKg0KPiA+ICsgKiBnZXQgYWN0aW9u IGZpZWxkIHZhbHVlLCBhcHBsaWNhdGlvbiBtYXkgdXNlDQo+ID4gK3J0ZV9mbG93X3RhYmxlX2Vu dHJ5X3F1ZXJ5DQo+ID4gKyAqIHRvIHF1ZXJ5IGJ5IGtleSBhbmQgdXNlIHRoaXMgQVBJIHRvIGZp Z3VyZSBvdXQgZWFjaCBhY3Rpb24gZmllbGQuDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbVtpbl0g cG9ydF9pZA0KPiA+ICsgKiAgICBQb3J0IGlkZW50aWZpZXIgb2YgdGhlIEV0aGVybmV0IGRldmlj ZS4NCj4gPiArICogQHBhcmFtW2luXSBhY3Rpb24NCj4gPiArICogICAgQWN0aW9uIG9iamVjdCB0 byBxdWVyeS4NCj4gPiArICogQHBhcmFtW2luXSBmaWVsZF9pZA0KPiA+ICsgKiAgICBGaWVsZCBp ZGVudGlmaWVyLg0KPiA+ICsgKiBAcGFyYW1bb3V0XSB2YWx1ZQ0KPiA+ICsgKiAgICBCeXRlIGFy cmF5IHN0b3JlcyB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkLg0KPiA+ICsgKiBAcGFyYW1baW4gfCBv dXRdIHNpemUNCj4gPiArICogICAgSW5wdXQgYXMgc2l6ZSBvZiB0aGUgYnl0ZSBhcnJheSwgcmV0 dXJuIHRoZSBzaXplIG9mIHRoZSB2YWx1ZS4NCj4gPiArICogQHBhcmFtW291dF0gZXJyb3INCj4g PiArICogICAgUGVyZm9ybSB2ZXJib3NlIGVycm9yIHJlcG9ydGluZyBpZiBub3QgTlVMTC4gUE1E cyBpbml0aWFsaXplIHRoaXMNCj4gPiArICogICAgc3RydWN0dXJlIGluIGNhc2Ugb2YgZXJyb3Ig b25seS4NCj4gPiArICoNCj4gPiArICogQHJldHVybg0KPiA+ICsgKiAgICAwIG9uIHN1Y2Nlc3Ms IGEgbmVnYXRpdmUgZXJybm8gdmFsdWUgb3RoZXJ3aXNlIGFuZCBydGVfZXJybm8gaXMgc2V0Lg0K PiA+ICsgKi8NCj4gPiArX19ydGVfZXhwZXJpbWVudGFsIGludA0KPiA+ICtydGVfZmxvd190YWJs ZV9hY3Rpb25fZmllbGRfZ2V0KHVpbnQxNl90IHBvcnRfaWQsDQo+ID4gKwkJCQljb25zdCBzdHJ1 Y3QgcnRlX2Zsb3dfdGFibGVfYWN0aW9uICphY3Rpb24sDQo+ID4gKwkJCQl1aW50MzJfdCBmaWVs ZF9pZCwNCj4gPiArCQkJCXVpbnQ4X3QgKnZhbHVlLA0KPiA+ICsJCQkJdWludDE2X3QgKnNpemUs DQo+ID4gKwkJCQlzdHJ1Y3QgcnRlX2Zsb3dfZXJyb3IgKmVycm9yKTsNCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgKiBAd2FybmluZw0KPiA+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1h eSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UuDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbVtp bl0gcG9ydF9pZA0KPiA+ICsgKiAgICBQb3J0IGlkZW50aWZpZXIgb2YgdGhlIEV0aGVybmV0IGRl dmljZS4NCj4gPiArICogQHBhcmFtW2luXSBhY3Rpb24NCj4gPiArICogICAgQWN0aW9uIG9iamVj dCB0byB1cGRhdGUuDQo+ID4gKyAqIEBwYXJhbVtpbl0gbmFtZQ0KPiA+ICsgKiAgICBGaWVsZCBu YW1lLg0KPiA+ICsgKiBAcGFyYW1baW5dIHZhbHVlDQo+ID4gKyAqICAgIEJ5dGUgYXJyYXkgc3Rv cmVzIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQuDQo+ID4gKyAqIEBwYXJhbVtpbl0gc2l6ZQ0KPiA+ ICsgKiAgICBTaXplIG9mIHRoZSBieXRlIGFycmF5Lg0KPiA+ICsgKiBAcGFyYW1bb3V0XSBlcnJv cg0KPiA+ICsgKiAgICBQZXJmb3JtIHZlcmJvc2UgZXJyb3IgcmVwb3J0aW5nIGlmIG5vdCBOVUxM LiBQTURzIGluaXRpYWxpemUgdGhpcw0KPiA+ICsgKiAgICBzdHJ1Y3R1cmUgaW4gY2FzZSBvZiBl cnJvciBvbmx5Lg0KPiA+ICsgKg0KPiA+ICsgKiBAcmV0dXJuDQo+ID4gKyAqICAgIDAgb24gc3Vj Y2VzcywgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZSBvdGhlcndpc2UgYW5kIHJ0ZV9lcnJubyBpcyBz ZXQuDQo+ID4gKyAqLw0KPiA+ICtfX3J0ZV9leHBlcmltZW50YWwgaW50DQo+ID4gK3J0ZV9mbG93 X3RhYmxlX2FjdGlvbl9maWVsZF9zZXRfYnlfbmFtZSh1aW50MTZfdCBwb3J0X2lkLA0KPiA+ICsJ CQkJCXN0cnVjdCBydGVfZmxvd19hY3Rpb24gKmFjdGlvbiwNCj4gPiArCQkJCQljb25zdCBjaGFy ICpuYW1lLA0KPiA+ICsJCQkJCWNvbnN0IHVpbnQ4X3QgKnZhbHVlLA0KPiA+ICsJCQkJCXVpbnQx Nl90IHNpemUsDQo+ID4gKwkJCQkJc3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJvcik7DQo+ID4g Kw0KPiA+ICsvKioNCj4gPiArICogQHdhcm5pbmcNCj4gPiArICogQGIgRVhQRVJJTUVOVEFMOiB0 aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlLg0KPiA+ICsgKg0KPiA+ICsg KiBTZXQgdGFibGUgZGVmYXVsdCBhY3Rpb24uDQo+ID4gKyAqDQo+ID4gKyAqIFRoZSBkZWZhdWx0 IGFjdGlvbiB3aWxsIHRha2UgZWZmZWN0IHdoZW4gYSBwYWNrZXQgaGl0IG5vIHJ1bGVzLg0KPiA+ ICsgKg0KPiA+ICsgKiBAcGFyYW1baW5dIHBvcnRfaWQNCj4gPiArICogICAgUG9ydCBpZGVudGlm aWVyIG9mIHRoZSBFdGhlcm5ldCBkZXZpY2UuDQo+ID4gKyAqIEBwYXJhbVtpbl0gdGFibGVfaWQN Cj4gPiArICogICAgVGFibGUgaWRlbnRpZmllcg0KPiA+ICsgKiBAcGFyYW1baW5dIGFjdGlvbg0K PiA+ICsgKiAgICBEZWZhdWx0IGFjdGlvbiBvYmplY3QuDQo+ID4gKyAqIEBwYXJhbVtvdXRdIGVy cm9yDQo+ID4gKyAqICAgIFBlcmZvcm0gdmVyYm9zZSBlcnJvciByZXBvcnRpbmcgaWYgbm90IE5V TEwuIFBNRHMgaW5pdGlhbGl6ZSB0aGlzDQo+ID4gKyAqICAgIHN0cnVjdHVyZSBpbiBjYXNlIG9m IGVycm9yIG9ubHkuDQo+ID4gKyAqDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogICAgMCBvbiBz dWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlIG90aGVyd2lzZSBhbmQgcnRlX2Vycm5vIGlz IHNldC4NCj4gPiArICovDQo+ID4gK19fcnRlX2V4cGVyaW1lbnRhbCBpbnQNCj4gPiArcnRlX2Zs b3dfdGFibGVfZGVmYXVsdF9hY3Rpb25fc2V0KHVpbnQxNl90IHBvcnRfaWQsDQo+ID4gKwkJCQkg IHVpbnQzMl90IHRhYmxlX2lkLA0KPiA+ICsJCQkJICBjb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfdGFi bGVfYWN0aW9uICphY3Rpb24sDQo+ID4gKwkJCQkgIHN0cnVjdCBydGVfZmxvd19lcnJvciAqZXJy b3IpOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIEB3YXJuaW5nDQo+ID4gKyAqIEBiIEVYUEVS SU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZS4NCj4gPiAr ICoNCj4gPiArICogQ2FuY2VsIHRhYmxlIGRlZmF1bHQgYWN0aW9uDQo+ID4gKyAqDQo+ID4gKyAq IEBwYXJhbVtpbl0gcG9ydF9pZA0KPiA+ICsgKiAgICBQb3J0IGlkZW50aWZpZXIgb2YgdGhlIEV0 aGVybmV0IGRldmljZS4NCj4gPiArICogQHBhcmFtW2luXSB0YWJsZV9pZA0KPiA+ICsgKiAgICBU YWJsZSBpZGVudGlmaWVyLg0KPiA+ICsgKiBAcGFyYW1bb3V0XSBlcnJvcg0KPiA+ICsgKiAgICBQ ZXJmb3JtIHZlcmJvc2UgZXJyb3IgcmVwb3J0aW5nIGlmIG5vdCBOVUxMLiBQTURzIGluaXRpYWxp emUgdGhpcw0KPiA+ICsgKiAgICBzdHJ1Y3R1cmUgaW4gY2FzZSBvZiBlcnJvciBvbmx5Lg0KPiA+ ICsgKg0KPiA+ICsgKiBAcmV0dXJuDQo+ID4gKyAqICAgIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2 ZSBlcnJubyB2YWx1ZSBvdGhlcndpc2UgYW5kIHJ0ZV9lcnJubyBpcyBzZXQuDQo+ID4gKyAqLw0K PiA+ICtfX3J0ZV9leHBlcmltZW50YWwgaW50DQo+ID4gK3J0ZV9mbG93X3RhYmxlX2RlZmF1bHRf YWN0aW9uX2NhbmNlbCh1aW50MzJfdCBwb3J0X2lkLA0KPiA+ICsJCQkJICAgICB1aW50MzJfdCB0 YWJsZV9pZCwNCj4gPiArCQkJCSAgICAgc3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJvcik7DQo+ ID4gKw0KPiA+ICsvKioNCj4gPiArICogQHdhcm5pbmcNCj4gPiArICogQGIgRVhQRVJJTUVOVEFM OiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlLg0KPiA+ICsgKg0KPiA+ ICsgKiBBZGQgbWF0Y2hpbmcgcnVsZSBhcyBhIHRhYmxlIGVudHJ5LCB0aGUgcnVsZSB0YWtlIGVm ZmVjdA0KPiA+ICtpbW1lZGlhdGVseQ0KPiA+ICsgKiBhZnRlciB0aGUgQVBJIGNhbGwuDQo+ID4g KyAqDQo+ID4gKyAqIEBwYXJhbVtpbl0gcG9ydF9pZA0KPiA+ICsgKiAgICBQb3J0IGlkZW50aWZp ZXIgb2YgdGhlIEV0aGVybmV0IGRldmljZS4NCj4gPiArICogQHBhcmFtW2luXSB0YWJsZV9pZA0K PiA+ICsgKiAgICBUYWJsZSBpZGVudGlmaWVyLg0KPiA+ICsgKiBAcGFyYW1baW5dIGtleQ0KPiA+ ICsgKiAgICBUYWJsZSBrZXkgb2JqZWN0Lg0KPiA+ICsgKiBAcGFyYW1baW5dIGFjdGlvbg0KPiA+ ICsgKiAgICBBY3Rpb24gb2JqZWN0Lg0KPiA+ICsgKiBAcGFyYW1bb3V0XSBlcnJvcg0KPiA+ICsg KiAgICBQZXJmb3JtIHZlcmJvc2UgZXJyb3IgcmVwb3J0aW5nIGlmIG5vdCBOVUxMLiBQTURzIGlu aXRpYWxpemUgdGhpcw0KPiA+ICsgKiAgICBzdHJ1Y3R1cmUgaW4gY2FzZSBvZiBlcnJvciBvbmx5 Lg0KPiA+ICsgKg0KPiA+ICsgKiBAcmV0dXJuDQo+ID4gKyAqICAgIDAgb24gc3VjY2VzcywgYSBu ZWdhdGl2ZSBlcnJubyB2YWx1ZSBvdGhlcndpc2UgYW5kIHJ0ZV9lcnJubyBpcyBzZXQuDQo+ID4g KyAqLw0KPiA+ICtfX3J0ZV9leHBlcmltZW50YWwgaW50DQo+ID4gK3J0ZV9mbG93X3RhYmxlX2Vu dHJ5X2FkZCh1aW50MTZfdCBwb3J0X2lkLA0KPiA+ICsJCQkgdWludDMyX3QgdGFibGVfaWQsDQo+ ID4gKwkJCSBjb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfdGFibGVfa2V5ICprZXksDQo+ID4gKwkJCSBj b25zdCBzdHJ1Y3QgcnRlX2Zsb3dfdGFibGVfYWN0aW9uICphY3Rpb24sDQo+ID4gKwkJCSBzdHJ1 Y3QgcnRlX2Zsb3dfZXJyb3IgKmVycm9yKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBAd2Fy bmluZw0KPiA+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91 dCBwcmlvciBub3RpY2UuDQo+ID4gKyAqDQo+ID4gKyAqIFF1ZXJ5IGFjdGlvbiBvZiBhIHRhYmxl IGVudHJ5Lg0KPiA+ICsgKg0KPiA+ICsgKiBJZiBzdWNjZXNzLCBhIG5ldyBydGVfZmxvd190YWJs ZV9hY3Rpb24gb2JqZWN0IHdpbGwgYmUgY3JlYXRlZC4NCj4gPiArICogVXNlIHJ0ZV9mbG93X3Rh YmxlX2FjdGlvbl9kZXN0cm95IHRvIGZyZWUgdGhlIHJlc291cmNlLg0KPiA+ICsgKg0KPiA+ICsg KiBAcGFyYW1baW5dIHBvcnRfaWQNCj4gPiArICogICAgUG9ydCBpZGVudGlmaWVyIG9mIHRoZSBF dGhlcm5ldCBkZXZpY2UuDQo+ID4gKyAqIEBwYXJhbVtpbl0gdGFibGVfaWQNCj4gPiArICogICAg VGFibGUgaWRlbnRpZmllci4NCj4gPiArICogQHBhcmFtW2luXSBrZXkNCj4gPiArICogICAgVGFi bGUga2V5IG9iamVjdC4NCj4gPiArICogQHBhcmFtW291dF0gYWN0aW9uDQo+ID4gKyAqICAgIEFj dGlvbiBvYmplY3QgcmV0dXJuZWQuDQo+ID4gKyAqIEBwYXJhbVtvdXRdIGVycm9yDQo+ID4gKyAq ICAgIFBlcmZvcm0gdmVyYm9zZSBlcnJvciByZXBvcnRpbmcgaWYgbm90IE5VTEwuIFBNRHMgaW5p dGlhbGl6ZSB0aGlzDQo+ID4gKyAqICAgIHN0cnVjdHVyZSBpbiBjYXNlIG9mIGVycm9yIG9ubHku DQo+ID4gKyAqDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogICAgMCBvbiBzdWNjZXNzLCBhIG5l Z2F0aXZlIGVycm5vIHZhbHVlIG90aGVyd2lzZSBhbmQgcnRlX2Vycm5vIGlzIHNldC4NCj4gPiAr ICovDQo+ID4gK19fcnRlX2V4cGVyaW1lbnRhbCBpbnQNCj4gPiArcnRlX2Zsb3dfdGFibGVfZW50 cnlfcXVlcnkodWludDE2X3QgcG9ydF9pZCwNCj4gPiArCQkJICAgdWludDMyX3QgdGFibGVfaWQs DQo+ID4gKwkJCSAgIGNvbnN0IHN0cnVjdCBydGVfZmxvd190YWJsZV9rZXkgKmtleSwNCj4gPiAr CQkJICAgc3RydWN0IHJ0ZV9mbG93X3RhYmxlX2FjdGlvbiAqKmFjdGlvbiwNCj4gPiArCQkJICAg c3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJvcik7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICog QHdhcm5pbmcNCj4gPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdp dGhvdXQgcHJpb3Igbm90aWNlLg0KPiA+ICsgKg0KPiA+ICsgKiBEZWxldGUgYSB0YWJsZSBlbnRy eSwgdGhpcyB0YWtlIGVmZmVjdCBpbW1laWRhdGx5IGFmdGVyIHRoZSBBUEkgY2FsbC4NCj4gPiAr ICoNCj4gPiArICogQHBhcmFtW2luXSBwb3J0X2lkDQo+ID4gKyAqICAgIFBvcnQgaWRlbnRpZmll ciBvZiB0aGUgRXRoZXJuZXQgZGV2aWNlLg0KPiA+ICsgKiBAcGFyYW1baW5dIHRhYmxlX2lkDQo+ ID4gKyAqICAgIFRhYmxlIGlkZW50aWZpZXIuDQo+ID4gKyAqIEBwYXJhbVtpbl0ga2V5DQo+ID4g KyAqICAgIFRhYmxlIGtleSBvYmplY3QgdG8gbWF0Y2guDQo+ID4gKyAqIEBwYXJhbVtvdXRdIGVy cm9yDQo+ID4gKyAqICAgIFBlcmZvcm0gdmVyYm9zZSBlcnJvciByZXBvcnRpbmcgaWYgbm90IE5V TEwuIFBNRHMgaW5pdGlhbGl6ZSB0aGlzDQo+ID4gKyAqICAgIHN0cnVjdHVyZSBpbiBjYXNlIG9m IGVycm9yIG9ubHkuDQo+ID4gKyAqDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogICAgMCBvbiBz dWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlIG90aGVyd2lzZSBhbmQgcnRlX2Vycm5vIGlz IHNldC4NCj4gPiArICovDQo+ID4gK19fcnRlX2V4cGVyaW1lbnRhbCBpbnQNCj4gPiArcnRlX2Zs b3dfdGFibGVfZW50cnlfZGVsKHVpbnQxNl90IHBvcnRfaWQsDQo+ID4gKwkJCSB1aW50MzJfdCB0 YWJsZV9pZCwNCj4gPiArCQkJIGNvbnN0IHN0cnVjdCBydGVfZmxvd190YWJsZV9rZXkgKmtleSwN Cj4gPiArCQkJIHN0cnVjdCBydGVfZmxvd19lcnJvciAqZXJyb3IpOw0KPiA+ICsNCj4gPiArLyoq DQo+ID4gKyAqIEB3YXJuaW5nDQo+ID4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5 IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZS4NCj4gPiArICoNCj4gPiArICogUXVlcnkgcnVs ZSBoaXQgY291bnRlcnMuDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbVtpbl0gcG9ydF9pZA0KPiA+ ICsgKiAgICBQb3J0IGlkZW50aWZpZXIgb2YgdGhlIEV0aGVybmV0IGRldmljZS4NCj4gPiArICog QHBhcmFtW2luXSB0YWJsZV9pZA0KPiA+ICsgKiAgICBUYWJsZSBpZGVudGlmaWVyLg0KPiA+ICsg KiBAcGFyYW1baW5dIGtleQ0KPiA+ICsgKiAgICBUYWJsZSBrZXkgb2JqZWN0IHRvIG1hdGNoLg0K PiA+ICsgKiBAcGFyYW1bb3V0XSBjb3VudA0KPiA+ICsgKiAgICBQb2ludGVyIHN0b3JlcyB0aGUg aGl0IGNvdW50ZXJzLg0KPiA+ICsgKiBAcGFyYW1bb3V0XSBlcnJvcg0KPiA+ICsgKiAgICBQZXJm b3JtIHZlcmJvc2UgZXJyb3IgcmVwb3J0aW5nIGlmIG5vdCBOVUxMLiBQTURzIGluaXRpYWxpemUg dGhpcw0KPiA+ICsgKiAgICBzdHJ1Y3R1cmUgaW4gY2FzZSBvZiBlcnJvciBvbmx5Lg0KPiA+ICsg Kg0KPiA+ICsgKiBAcmV0dXJuDQo+ID4gKyAqICAgIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBl cnJubyB2YWx1ZSBvdGhlcndpc2UgYW5kIHJ0ZV9lcnJubyBpcyBzZXQuDQo+ID4gKyAqLw0KPiA+ ICtfX3J0ZV9leHBlcmltZW50YWwgaW50DQo+ID4gK3J0ZV9mbG93X3RhYmxlX2VudHJ5X2NvdW50 X3F1ZXJ5KHVpbnQxNl90IHBvcnRfaWQsDQo+ID4gKwkJCQkgdWludDMyX3QgdGFibGVfaWQsDQo+ ID4gKwkJCQkgY29uc3Qgc3RydWN0IHJ0ZV9mbG93X3RhYmxlX2tleSAqa2V5LA0KPiA+ICsJCQkJ IHN0cnVjdCBydGVfZmxvd19xdWVyeV9jb3VudCAqY291bnQsDQo+ID4gKwkJCQkgc3RydWN0IHJ0 ZV9mbG93X2Vycm9yICplcnJvcik7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogQHdhcm5pbmcN Cj4gPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJp b3Igbm90aWNlLg0KPiA+ICsgKg0KPiA+ICsgKiBDbG9uZSBhIHRhYmxlIGtleSBvYmplY3QuDQo+ ID4gKyAqDQo+ID4gKyAqIEBwYXJhbVtpbl0gcG9ydF9pZA0KPiA+ICsgKiAgICBQb3J0IGlkZW50 aWZpZXIgb2YgdGhlIEV0aGVybmV0IGRldmljZS4NCj4gPiArICogQHBhcmFtW2luXSBrZXkNCj4g PiArICogICAgVGFibGUga2V5IG9iamVjdCB0byBjbG9uZS4NCj4gPiArICogQHBhcmFtW291dF0g bmV3X2tleQ0KPiA+ICsgKiAgICBOZXcgdGFibGUga2V5IG9iamVjdCBiZSBjcmVhdGVkIGJ5IFBN RC4NCj4gPiArICogQHBhcmFtW291dF0gZXJyb3INCj4gPiArICogICAgUGVyZm9ybSB2ZXJib3Nl IGVycm9yIHJlcG9ydGluZyBpZiBub3QgTlVMTC4gUE1EcyBpbml0aWFsaXplIHRoaXMNCj4gPiAr ICogICAgc3RydWN0dXJlIGluIGNhc2Ugb2YgZXJyb3Igb25seS4NCj4gPiArICoNCj4gPiArICog QHJldHVybg0KPiA+ICsgKiAgICAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUg b3RoZXJ3aXNlIGFuZCBydGVfZXJybm8gaXMgc2V0Lg0KPiA+ICsgKi8NCj4gPiArX19ydGVfZXhw ZXJpbWVudGFsIGludA0KPiA+ICtydGVfZmxvd190YWJsZV9rZXlfY2xvbmUodWludDE2X3QgcG9y dF9pZCwNCj4gPiArCQkJIGNvbnN0IHN0cnVjdCBydGVfZmxvd190YWJsZV9rZXkgKmtleSwNCj4g PiArCQkJIHN0cnVjdCBydGVfZmxvd190YWJsZV9rZXkgKipuZXdfa2V5LA0KPiA+ICsJCQkgc3Ry dWN0IHJ0ZV9mbG93X2Vycm9yICplcnJvcik7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogQHdh cm5pbmcNCj4gPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhv dXQgcHJpb3Igbm90aWNlLg0KPiA+ICsgKg0KPiA+ICsgKiBDbG9uZSBhIGFjdGlvbiBvYmplY3Qu DQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbVtpbl0gcG9ydF9pZA0KPiA+ICsgKiAgICBQb3J0IGlk ZW50aWZpZXIgb2YgdGhlIEV0aGVybmV0IGRldmljZS4NCj4gPiArICogQHBhcmFtW2luXSBhY3Rp b24NCj4gPiArICogICAgQWN0aW9uIG9iamVjdCB0byBjbG9uZS4NCj4gPiArICogQHBhcmFtW291 dF0gbmV3X2FjdGlvbg0KPiA+ICsgKiAgICBOZXcgYWN0aW9uIG9iamVjdCBiZSBjcmVhdGVkIGJ5 IFBNRC4NCj4gPiArICogQHBhcmFtW291dF0gZXJyb3INCj4gPiArICogICAgUGVyZm9ybSB2ZXJi b3NlIGVycm9yIHJlcG9ydGluZyBpZiBub3QgTlVMTC4gUE1EcyBpbml0aWFsaXplIHRoaXMNCj4g PiArICogICAgc3RydWN0dXJlIGluIGNhc2Ugb2YgZXJyb3Igb25seS4NCj4gPiArICoNCj4gPiAr ICogQHJldHVybg0KPiA+ICsgKiAgICAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gdmFs dWUgb3RoZXJ3aXNlIGFuZCBydGVfZXJybm8gaXMgc2V0Lg0KPiA+ICsgKi8NCj4gPiArX19ydGVf ZXhwZXJpbWVudGFsIGludA0KPiA+ICtydGVfZmxvd190YWJsZV9hY3Rpb25fY2xvbmUodWludDE2 X3QgcG9ydF9pZCwNCj4gPiArCQkJICAgIGNvbnN0IHN0cnVjdCBydGVfZmxvd19hY3Rpb24gKmFj dGlvbiwNCj4gPiArCQkJICAgIHN0cnVjdCBydGVfZmxvd19hY3Rpb24gKipuZXdfYWN0aW9uLA0K PiA+ICsJCQkgICAgc3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJvcik7DQo+ID4gKw0KPiA+ICsv KioNCj4gPiArICogQHdhcm5pbmcNCj4gPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBt YXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlLg0KPiA+ICsgKg0KPiA+ICsgKiBQcmVwYXJl IHRhYmxlIGVudHJ5IGFkZGluZy4NCj4gPiArICoNCj4gPiArICogQHBhcmFtW2luXSBwb3J0X2lk DQo+ID4gKyAqICAgIFBvcnQgaWRlbnRpZmllciBvZiB0aGUgRXRoZXJuZXQgZGV2aWNlLg0KPiA+ ICsgKiBAcGFyYW1baW5dIHRhYmxlX2lkDQo+ID4gKyAqICAgIFRhYmxlIGlkZW50aWZpZXIuDQo+ ID4gKyAqIEBwYXJhbVtpbl0ga2V5DQo+ID4gKyAqICAgIFRhYmxlIGtleSBvYmplY3QuDQo+ID4g KyAqIEBwYXJhbVtpbl0gYWN0aW9uDQo+ID4gKyAqICAgIEFjdGlvbiBvYmplY3QuDQo+ID4gKyAq IEBwYXJhbVtvdXRdIGVycm9yDQo+ID4gKyAqICAgIFBlcmZvcm0gdmVyYm9zZSBlcnJvciByZXBv cnRpbmcgaWYgbm90IE5VTEwuIFBNRHMgaW5pdGlhbGl6ZSB0aGlzDQo+ID4gKyAqICAgIHN0cnVj dHVyZSBpbiBjYXNlIG9mIGVycm9yIG9ubHkuDQo+ID4gKyAqDQo+ID4gKyAqIEByZXR1cm4NCj4g PiArICogICAgMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlIG90aGVyd2lzZSBh bmQgcnRlX2Vycm5vIGlzIHNldC4NCj4gPiArICovDQo+ID4gK19fcnRlX2V4cGVyaW1lbnRhbCBp bnQNCj4gPiArcnRlX2Zsb3dfdGFibGVfZW50cnlfYWRkX3ByZXBhcmUodWludDE2X3QgcG9ydF9p ZCwNCj4gPiArCQkJCSB1aW50MzJfdCB0YWJsZV9pZCwNCj4gPiArCQkJCSBzdHJ1Y3QgcnRlX2Zs b3dfdGFibGVfa2V5ICprZXksDQo+ID4gKwkJCQkgc3RydWN0IHJ0ZV9mbG93X3RhYmxlX2FjdGlv biAqYWN0aW9uLA0KPiA+ICsJCQkJIHN0cnVjdCBydGVfZmxvd19lcnJvciAqZXJyb3IpOw0KPiA+ ICsNCj4gPiArLyoqDQo+ID4gKyAqIEB3YXJuaW5nDQo+ID4gKyAqIEBiIEVYUEVSSU1FTlRBTDog dGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZS4NCj4gPiArICoNCj4gPiAr ICogUHJlcGFyZSB0YWJsZSBlbnRyeSBkZWxldGlvbi4NCj4gPiArICoNCj4gPiArICogQHBhcmFt W2luXSBwb3J0X2lkDQo+ID4gKyAqICAgIFBvcnQgaWRlbnRpZmllciBvZiB0aGUgRXRoZXJuZXQg ZGV2aWNlLg0KPiA+ICsgKiBAcGFyYW1baW5dIHRhYmxlX2lkDQo+ID4gKyAqICAgIFRhYmxlIGlk ZW50aWZpZXIuDQo+ID4gKyAqIEBwYXJhbVtpbl0ga2V5DQo+ID4gKyAqICAgIFRhYmxlIGtleSBv YmplY3QgdG8gbWF0Y2guDQo+ID4gKyAqIEBwYXJhbVtvdXRdIGVycm9yDQo+ID4gKyAqICAgIFBl cmZvcm0gdmVyYm9zZSBlcnJvciByZXBvcnRpbmcgaWYgbm90IE5VTEwuIFBNRHMgaW5pdGlhbGl6 ZSB0aGlzDQo+ID4gKyAqICAgIHN0cnVjdHVyZSBpbiBjYXNlIG9mIGVycm9yIG9ubHkuDQo+ID4g KyAqDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogICAgMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZl IGVycm5vIHZhbHVlIG90aGVyd2lzZSBhbmQgcnRlX2Vycm5vIGlzIHNldC4NCj4gPiArICovDQo+ ID4gK19fcnRlX2V4cGVyaW1lbnRhbCBpbnQNCj4gPiArcnRlX2Zsb3dfdGFibGVfZW50cnlfZGVs X3ByZXBhcmUodWludDE2X3QgcG9ydF9pZCwNCj4gPiArCQkJCSB1aW50MzJfdCB0YWJsZV9pZCwN Cj4gPiArCQkJCSBzdHJ1Y3QgcnRlX2Zsb3dfdGFibGVfa2V5ICprZXksDQo+ID4gKwkJCQkgc3Ry dWN0IHJ0ZV9mbG93X2Vycm9yICplcnJvcik7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogQHdh cm5pbmcNCj4gPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhv dXQgcHJpb3Igbm90aWNlLg0KPiA+ICsgKg0KPiA+ICsgKiBDb21taXQgYWxsIHByZXBhcmVkIGFk ZGluZyBhbmQgZGVsZXRpb24gcmVxdWVzdHMuDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbVtpbl0g cG9ydF9pZA0KPiA+ICsgKiAgICBQb3J0IGlkZW50aWZpZXIgb2YgdGhlIEV0aGVybmV0IGRldmlj ZS4NCj4gPiArICogQHBhcmFtW291dF0gZXJyb3INCj4gPiArICogICAgUGVyZm9ybSB2ZXJib3Nl IGVycm9yIHJlcG9ydGluZyBpZiBub3QgTlVMTC4gUE1EcyBpbml0aWFsaXplIHRoaXMNCj4gPiAr ICogICAgc3RydWN0dXJlIGluIGNhc2Ugb2YgZXJyb3Igb25seS4NCj4gPiArICoNCj4gPiArICog QHJldHVybg0KPiA+ICsgKiAgICAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUg b3RoZXJ3aXNlIGFuZCBydGVfZXJybm8gaXMgc2V0Lg0KPiA+ICsgKi8NCj4gPiArX19ydGVfZXhw ZXJpbWVudGFsIGludA0KPiA+ICtydGVfZmxvd190YWJsZV91cGRhdGVfY29tbWl0KHVpbnQxNl90 IHBvcnRfaWQsDQo+ID4gKwkJCSAgICAgc3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJvcik7DQo+ ID4gKw0KPiA+ICsvKioNCj4gPiArICogQHdhcm5pbmcNCj4gPiArICogQGIgRVhQRVJJTUVOVEFM OiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlLg0KPiA+ICsgKg0KPiA+ ICsgKiBUYWJsZSBlbnRyeSBvcGVyYXRpb24gdHlwZS4NCj4gPiArICovDQo+ID4gKw0KPiA+ICtl bnVtIHJ0ZV9mbG93X3RhYmxlX3VwZGF0ZV9vcCB7DQo+ID4gKwlSVEVfRkxPV19UQUJMRV9FTlRS WV9PUF9BREQsIC8qIEFkZCBhbiBlbnRyeSAqLw0KPiA+ICsJUlRFX0ZMT1dfVEFCTEVfRU5UUllf T1BfREVMLCAvKiBEZWxldGUgYW4gZW50cnkgKi8NCj4gPiArCVJURV9GTE9XX1RBQkxFX0VOVFJZ X09QX1FSWSwgLyogUXVlcnkgYW4gZW50cnkgKi8gfTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsg KiBAd2FybmluZw0KPiA+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ug d2l0aG91dCBwcmlvciBub3RpY2UuDQo+ID4gKyAqDQo+ID4gKyAqIFRhYmxlIGVudHJ5IHVwZGF0 ZSBzdGF0dXMuDQo+ID4gKyAqLw0KPiA+ICtzdHJ1Y3QgcnRlX2Zsb3dfdGFibGVfdXBkYXRlX3N0 YXR1cyB7DQo+ID4gKwlzdHJ1Y3QgcnRlX2Zsb3dfdGFibGVfa2V5ICprZXk7IC8qKjwgVGFibGUg a2V5IG9iamVjdCBvZiB0aGUgZW50cnkgKi8NCj4gPiArCXN0cnVjdCBydGVfZmxvd190YWJsZV9h Y3Rpb24gKmFjdGlvbjsgLyoqPCBBY3Rpb24gb2JqZWN0IG9mIHRoZQ0KPiA+ICtlbnRyeQ0KPiA+ ICovDQo+ID4gKwllbnVtIHJ0ZV9mbG93X3RhYmxlX3VwZGF0ZV9vcCBvcDsgLyoqPCBPcGVyYXRp b24gdHlwZSAqLw0KPiA+ICsJZW51bSBydGVfZmxvd19lcnJvcl90eXBlIGVycjsgLyoqPCBFcnJv ciB0eXBlICovIH07DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogQHdhcm5pbmcNCj4gPiArICog QGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNl Lg0KPiA+ICsgKg0KPiA+ICsgKiBQdWxsIHRhYmxlIGVudHJ5IHVwZGF0ZSBzdGF0dXMuDQo+ID4g KyAqDQo+ID4gKyAqIEBwYXJhbVtpbl0gcG9ydF9pZA0KPiA+ICsgKiAgICBQb3J0IGlkZW50aWZp ZXIgb2YgdGhlIEV0aGVybmV0IGRldmljZS4NCj4gPiArICogQHBhcmFtW291dF0gc3RhdHMNCj4g PiArICogICAgQW4gYXJyYXkgc3RvcmVzIHRoZSBzdGF0dXMgb2YgYWxsIGZpbmlzaGVkIGVudHJ5 IGFkZGluZyAvIGRlbGV0ZQ0KPiA+ICsgKiAgICByZXF1ZXN0cy4NCj4gPiArICogQHBhcmFtW2lu XSBzaXplDQo+ID4gKyAqICAgIFNpemUgb2YgdGhlIGlucHV0IGFycmF5Lg0KPiA+ICsgKiBAcGFy YW1bb3V0XSBlcnJvcg0KPiA+ICsgKiAgICBQZXJmb3JtIHZlcmJvc2UgZXJyb3IgcmVwb3J0aW5n IGlmIG5vdCBOVUxMLiBQTURzIGluaXRpYWxpemUgdGhpcw0KPiA+ICsgKiAgICBzdHJ1Y3R1cmUg aW4gY2FzZSBvZiBlcnJvciBvbmx5Lg0KPiA+ICsgKg0KPiA+ICsgKiBAcmV0dXJuDQo+ID4gKyAq ICAgID49MCBvbiBzdWNjZXNzLCBpbmRpYXRlcyB0aGUgbnVtYmVyIG9mIHN0YXR1cyBiZSBwdWxs ZWQuDQo+ID4gKyAqICAgIEEgbmVnYXRpdmUgZXJybm8gdmFsdWUgb3RoZXJ3aXNlIGFuZCBydGVf ZXJybm8gaXMgc2V0Lg0KPiA+ICsgKi8NCj4gPiArX19ydGVfZXhwZXJpbWVudGFsIGludA0KPiA+ ICtydGVfZmxvd190YWJsZV91cGRhdGVfc3RhdHVzX3B1bGwodWludDE2X3QgcG9ydF9pZCwNCj4g PiArCQkJCSAgc3RydWN0IHJ0ZV9mbG93X3RhYmxlX3VwZGF0ZV9zdGF0dXMgKnN0YXRzLA0KPiA+ ICsJCQkJICBpbnQgc2l6ZSwNCj4gPiArCQkJCSAgc3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJv cik7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogQHdhcm5pbmcNCj4gPiArICogQGIgRVhQRVJJ TUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlLg0KPiA+ICsg Kg0KPiA+ICsgKiBHZXQgUE5BIHBvcnQgaWRlbnRpZmllci4NCj4gPiArICoNCj4gPiArICogQHBh cmFtW2luXSBwb3J0X2lkDQo+ID4gKyAqICAgIFBvcnQgaWRlbnRpZmllciBvZiB0aGUgRXRoZXJu ZXQgZGV2aWNlLg0KPiA+ICsgKiBAcGFyYW1baW5dIGV0aGRldl9wb3J0X2lkDQo+ID4gKyAqICAg IEV0aGRldiBwb3J0IGlkZW50aWZpZXIgbWFwcyB0byB0aGUgcmVxdWlyZWQgUE5BIHBvcnQuDQo+ ID4gKyAqIEBwYXJhbVtvdXRdIHBuYV9wb3J0X2lkDQo+ID4gKyAqICAgIFBvaW50ZXIgc3RvcmVz IHRoZSBQTkEgcG9ydCBpZGVudGlmaWVyLg0KPiA+ICsgKiBAcGFyYW1bb3V0XSBlcnJvcg0KPiA+ ICsgKiAgICBQZXJmb3JtIHZlcmJvc2UgZXJyb3IgcmVwb3J0aW5nIGlmIG5vdCBOVUxMLiBQTURz IGluaXRpYWxpemUgdGhpcw0KPiA+ICsgKiAgICBzdHJ1Y3R1cmUgaW4gY2FzZSBvZiBlcnJvciBv bmx5Lg0KPiA+ICsgKg0KPiA+ICsgKiBAcmV0dXJuDQo+ID4gKyAqICAgIDAgb24gc3VjY2Vzcywg YSBuZWdhdGl2ZSBlcnJubyB2YWx1ZSBvdGhlcndpc2UgYW5kIHJ0ZV9lcnJubyBpcyBzZXQuDQo+ ID4gKyAqLw0KPiA+ICtfX3J0ZV9leHBlcmltZW50YWwgaW50DQo+ID4gK3J0ZV9mbG93X3BuYV9w b3J0X2dldCh1aW50MTZfdCBwb3J0X2lkLA0KPiA+ICsJCSAgICAgIHVpbnQxNl90IGV0aGRldl9w b3J0X2lkLA0KPiA+ICsJCSAgICAgIHVpbnQzMl90ICpod19wb3J0X2lkLA0KPiA+ICsJCSAgICAg IHN0cnVjdCBydGVfZmxvd19lcnJvciAqZXJyb3IpOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAq IEB3YXJuaW5nDQo+ID4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3 aXRob3V0IHByaW9yIG5vdGljZS4NCj4gPiArICoNCj4gPiArICogR2V0IGEgUE5BIHF1ZXVlIGlk ZW50aWZlciBmcm9tIGEgZXRoZGV2IFJ4IHF1ZXVlLg0KPiA+ICsgKg0KPiA+ICsgKiBAcGFyYW1b aW5dIHBvcnRfaWQNCj4gPiArICogICAgUG9ydCBpZGVudGlmaWVyIG9mIHRoZSBFdGhlcm5ldCBk ZXZpY2UuDQo+ID4gKyAqIEBwYXJhbVtpbl0gZXRoZGV2X3BvcnRfaWQNCj4gPiArICogICAgRXRo ZGV2IHBvcnQgaWRlbnRpZmllciB0aGUgUnggcXVldWUgYmVsb25ncyB0by4NCj4gPiArICogQHBh cmFtW2luXSBldGhkZXZfcXVldWVfaWQNCj4gPiArICogICAgRXRoZGV2IFJ4IHF1ZXVlIGluZGV4 IHRoYXQgbWFwcyB0byB0aGUgcmVxdWlyZWQgUE5BIHF1ZXVlDQo+IGlkZW50aWZpZXIuDQo+ID4g KyAqIEBwYXJhbVtvdXRdIHBuYV9xdWV1ZV9pZA0KPiA+ICsgKiAgICBQb2ludGVyIHN0b3JlcyB0 aGUgUE5BIHF1ZXVlIGlkZW50aWZpZXIuDQo+ID4gKyAqIEBwYXJhbVtvdXRdIGVycm9yDQo+ID4g KyAqICAgIFBlcmZvcm0gdmVyYm9zZSBlcnJvciByZXBvcnRpbmcgaWYgbm90IE5VTEwuIFBNRHMg aW5pdGlhbGl6ZSB0aGlzDQo+ID4gKyAqICAgIHN0cnVjdHVyZSBpbiBjYXNlIG9mIGVycm9yIG9u bHkuDQo+ID4gKyAqDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogICAgMCBvbiBzdWNjZXNzLCBh IG5lZ2F0aXZlIGVycm5vIHZhbHVlIG90aGVyd2lzZSBhbmQgcnRlX2Vycm5vIGlzIHNldC4NCj4g PiArICovDQo+ID4gK19fcnRlX2V4cGVyaW1lbnRhbCBpbnQNCj4gPiArcnRlX2Zsb3dfcG5hX3J4 X3F1ZXVlX2dldCh1aW50MTZfdCBwb3J0X2lkLA0KPiA+ICsJCQkgIHVpbnQxNl90IGV0aGRldl9w b3J0X2lkLA0KPiA+ICsJCQkgIHVpbnQxNl90IGV0aGRldl9xdWV1ZV9pZCwNCj4gPiArCQkJICB1 aW50MzJfdCAqaHdfcXVldWVfaWQsDQo+ID4gKwkJCSAgc3RydWN0IHJ0ZV9mbG93X2Vycm9yICpl cnJvcik7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogQHdhcm5pbmcNCj4gPiArICogQGIgRVhQ RVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlLg0KPiA+ ICsgKg0KPiA+ICsgKiBHZXQgYSBQTkEgcXVldWUgaWRlbnRpZmVyIGZyb20gYSBldGhkZXYgVHgg cXVldWUuDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbVtpbl0gcG9ydF9pZA0KPiA+ICsgKiAgICBQ b3J0IGlkZW50aWZpZXIgb2YgdGhlIEV0aGVybmV0IGRldmljZS4NCj4gPiArICogQHBhcmFtW2lu XSBldGhkZXZfcG9ydF9pZA0KPiA+ICsgKiAgICBFdGhkZXYgcG9ydCBpZGVudGlmaWVyIHRoZSBU eCBxdWV1ZSBiZWxvbmdzIHRvLg0KPiA+ICsgKiBAcGFyYW1baW5dIGV0aGRldl9xdWV1ZV9pZA0K PiA+ICsgKiAgICBFdGhkZXYgVHggcXVldWUgaW5kZXggdGhhdCBtYXBzIHRvIHRoZSByZXF1aXJl ZCBQTkEgcXVldWUNCj4gaWRlbnRpZmllci4NCj4gPiArICogQHBhcmFtW291dF0gcG5hX3F1ZXVl X2lkDQo+ID4gKyAqICAgIFBvaW50ZXIgc3RvcmVzIHRoZSBQTkEgcXVldWUgaWRlbnRpZmllci4N Cj4gPiArICogQHBhcmFtW291dF0gZXJyb3INCj4gPiArICogICAgUGVyZm9ybSB2ZXJib3NlIGVy cm9yIHJlcG9ydGluZyBpZiBub3QgTlVMTC4gUE1EcyBpbml0aWFsaXplIHRoaXMNCj4gPiArICog ICAgc3RydWN0dXJlIGluIGNhc2Ugb2YgZXJyb3Igb25seS4NCj4gPiArICoNCj4gPiArICogQHJl dHVybg0KPiA+ICsgKiAgICAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUgb3Ro ZXJ3aXNlIGFuZCBydGVfZXJybm8gaXMgc2V0Lg0KPiA+ICsgKi8NCj4gPiArX19ydGVfZXhwZXJp bWVudGFsIGludA0KPiA+ICtydGVfZmxvd19wbmFfdHhfcXVldWVfZ2V0KHVpbnQxNl90IHBvcnRf aWQsDQo+ID4gKwkJCSAgdWludDE2X3QgZXRoZGV2X3BvcnRfaWQsDQo+ID4gKwkJCSAgdWludDE2 X3QgZXRoZGV2X3F1ZXVlX2lkLA0KPiA+ICsJCQkgIHVpbnQzMl90ICpod19xdWV1ZV9pZCwNCj4g PiArCQkJICBzdHJ1Y3QgcnRlX2Zsb3dfZXJyb3IgKmVycm9yKTsNCj4gPiArI2VuZGlmDQo+ID4g LS0NCj4gPiAyLjMxLjENCg0K