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 11E6241D8F; Mon, 27 Feb 2023 10:19:35 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 983A440A84; Mon, 27 Feb 2023 10:19:34 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by mails.dpdk.org (Postfix) with ESMTP id D7B92400D5 for ; Mon, 27 Feb 2023 10:19:32 +0100 (CET) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 31R2W5v0026362; Mon, 27 Feb 2023 01:19:32 -0800 Received: from nam10-bn7-obe.outbound.protection.outlook.com (mail-bn7nam10lp2100.outbound.protection.outlook.com [104.47.70.100]) by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3nyjqtq0ke-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 27 Feb 2023 01:19:31 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NnZThukHojN8TON8QFYXePCEkC1vLV2k2+YM2JwN9JLvSC/NUmL4Wo7iNBUF+dz1NGnTPyUjQncpf436EMHM0K+jJZg5ViuYEGWyi5LJTezaSKxHM+7lCmedpeutduAwINqi+6Z/IsuAETN9xom/0uB0cNePzcPl0hXD3DzPkr6je8i+oE7IIqjZga2NY+jw1Wo7JP1F7RhIk1bz+nJq+k6tSAWKGduw0nhWhg4s558Xd8QqouBxEJSJP+IPhDZSkQ1c2L4Og9m5Xed25NgAu6scJCeSM/vEe7UYhVYYc3S5s9T54ldWdnwLkAVHdrC1Awklj/30Q0dJICA7V0xLDQ== 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=4ID/W00OKb2t+bCmMx/yR/Uty532BkEQdg0SeBq7A6k=; b=axmPoy3oAqj+kvDILbYh3kWvmfkX6nwT+eeIN4o9XLXlsQfy+ltxutyBWRPE7+Ds+wL9ODUFMtlgYMPiO6txFn/6rXkix3ZAFTY5XvtRbfyjsXqgc5jM9Vk+iXfrE4YEQOa5PkrOqJs6J8vZDEr7gNJ0+xU8WXV7/mFIshwlWSfvoRkZBamE/ke4kiV2D7LmNTLTYjPkGypGAduhCClSh81sIO6SGaeRiKkXA/g/9o3TKrld7PZK3eiAuTsf640bVwFXsxTSDhPPElLWDPCAm+7GHYaJMkoyZQ93cqhczPXEp2GVxoGVQ0qgXYpJCwHzOhuGyJ12RJQrBtvhyH0ajQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=marvell.com; dmarc=pass action=none header.from=marvell.com; dkim=pass header.d=marvell.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.onmicrosoft.com; s=selector1-marvell-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4ID/W00OKb2t+bCmMx/yR/Uty532BkEQdg0SeBq7A6k=; b=jk2Q1E1gkTyh2jZ5DvvVqN0xlijmZZb5IijoCM//Uwl9wqEuAM+QLLhTSOjvTP494+BWi7IuX1/hscztkPJGLHTeuFqwVbp03J9i9uJ4iMQkHeDgT48PmaX2IlSNp/P474GFs4sBE31Z4qJlUzADuEbVOl2CDF3e1pk4uUVSj4Y= Received: from DM4PR18MB4368.namprd18.prod.outlook.com (2603:10b6:5:39d::6) by SA3PR18MB5274.namprd18.prod.outlook.com (2603:10b6:806:2fa::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6134.27; Mon, 27 Feb 2023 09:19:26 +0000 Received: from DM4PR18MB4368.namprd18.prod.outlook.com ([fe80::6d6a:99da:de:ea6b]) by DM4PR18MB4368.namprd18.prod.outlook.com ([fe80::6d6a:99da:de:ea6b%7]) with mapi id 15.20.6134.029; Mon, 27 Feb 2023 09:19:26 +0000 From: Tomasz Duszynski To: Konstantin Ananyev , "dev@dpdk.org" Subject: RE: [EXT] Re: [PATCH v11 1/4] lib: add generic support for reading PMU events Thread-Topic: [EXT] Re: [PATCH v11 1/4] lib: add generic support for reading PMU events Thread-Index: AQHZQi/ugndN0uHRZEy+gbr3w2CIfa7YsNGAgAnSLtA= Date: Mon, 27 Feb 2023 09:19:26 +0000 Message-ID: References: <20230213113156.385482-1-tduszynski@marvell.com> <20230216175502.3164820-1-tduszynski@marvell.com> <20230216175502.3164820-2-tduszynski@marvell.com> <5dfb1803-ae7f-5361-6453-70f767041928@yandex.ru> In-Reply-To: <5dfb1803-ae7f-5361-6453-70f767041928@yandex.ru> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DM4PR18MB4368:EE_|SA3PR18MB5274:EE_ x-ms-office365-filtering-correlation-id: 69a165dd-c188-4dac-2ddd-08db18a3b8f3 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: szhlgU0Xzr6bxY9k+BaTpINHXkJc3EG4njsIAdVXfHu1fQ8j0S3CNjDREtrM6jXQYUDH/td+Z8EWVwfUxoBuJTolIqStpP9vv7OQqntU8DwXETOxx5IePkDcJyhKIjk7aglbEGnkXMCWmn+WQdRmKkiibL41rMlD2iq5+wHlW1/bnYY9Wtnb4G3Dd7or5zEFClWOhn5gLiCfXIqMOlB4gPmb8qMVASPziAzPqexybpjyPjwt9a3my5+NZ5X/3eTeOL4TG36LE+dQC3zeuCiSIgiFJIFe89PH/3MZAsd7HxNZe06HCrKlSg4eOqynRVCflk6rqff22gVC/mAqsY0IDhm7GfnhlZT/iJxr52c9TwINiiuQ6inU+Oo9Pdu26ddML47zgWceMordKeFhvSmD16gfJr0dROr/o8vbOVi2LMioe8rcfmzvbb0eIi0scNtRyoHSSLcHRXlgIAEpH6SP0w5eniusBqModqOnVBoFvPdZbKoCSBxZ2vSMldFeRXhJLTjMWOElZIonMYYKMso1eJroCdwG5fEsf/AGokjDt8pfcAiQOqM+WRVePTKA4Baizm8PHzup+pbHXHIncR80di7vUY9yfaw5iu+0g5wpryYVOjkgIu7c/Rpe94Y7Gk06IgM5wUZX5ObsolcZgRSVSxy00a5FMZfZiLYiZh0raeTwltGUChar9irYEupJ57sGIIMZhsQhd2he9BZ7eompYJdEI+qY4G5lSaAu6FV2VmE= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM4PR18MB4368.namprd18.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230025)(4636009)(346002)(376002)(39860400002)(396003)(136003)(366004)(451199018)(33656002)(86362001)(110136005)(186003)(9686003)(2906002)(5660300002)(30864003)(66556008)(76116006)(66476007)(66446008)(8676002)(66946007)(41300700001)(8936002)(64756008)(6506007)(478600001)(66574015)(26005)(71200400001)(55016003)(7696005)(38100700002)(52536014)(122000001)(83380400001)(38070700005)(316002)(41533002)(579004); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?L3VFMVUzTm5KTGdqMC84c0drSVROcFc4dGJxY3BIL1ZoTXovaVlaUGU5NVBz?= =?utf-8?B?bnpxSWttemllSnFxVHdRWFFVZVhvdjNJV3orOFZoQzRrMFdsa1lnS2JEbTVw?= =?utf-8?B?SGxpWWs2eFRaV2orUjVIQ1VsZXlhVTczbk11ckg2SHM4L2JtTW1LblRMTU8x?= =?utf-8?B?WEVZVHhBeDJMTlo5K3dJVS9pQlUydjZHZndTT3BnbTRKTmtZLy9TQTQyaG1w?= =?utf-8?B?VWR2cFVBMXprcklNZXBzSHFzQnBkdkNZMWJUUzRBZ0NqUlRyU3F1L3JucXhp?= =?utf-8?B?QytRdTBlbGhpRTF5QmR4SmlGZmVUWWhYWlZQcTc5UDcrNWwyMmQ5c2lkT0lr?= =?utf-8?B?YTVaVDBrVVlIWTRrd1gwYTJOMDljL01SQnZ1RktaalA2d1BQSUJJWThpa2ds?= =?utf-8?B?cHNzNEdyS05kWHMwRE9kUGx5eHhkbFduWUUwNTlCNkVTWHppN2c4dkhucW8x?= =?utf-8?B?YU1GK0tzK0JxQU52ek5zdHVFNTZOT3pHdGkvT0sxeDQySGJMZ3E1Zkp6enFh?= =?utf-8?B?N1V3UG8yL1h0RkJpUU1LMUhOMWY4WE9NRXJYY1lEQUp1VlFNb2YrWDJCR2Vm?= =?utf-8?B?K0x5UmNlekNkQndDcXhQUkNaOWU1VmJsbmMwZTJ5ZGpGSVcvUjV2c08ydzVm?= =?utf-8?B?WTVXVHpocng3VWlIRXNzUmZVK1NJR2tEU1h4OEdwK1d0OTBqRHlNYW9zNkxT?= =?utf-8?B?ejJFbm9mTkRoN1JBTDQ5cStVZ3VOd3ZwU0NJVitqNzRqMlQrQVNJeTRMMHE3?= =?utf-8?B?L3I1V0d1MWF6M2pRMzVLL3NpdHZLdExFYjlFcnJQTUFOOUd0ODZJSzNFaVNF?= =?utf-8?B?YjFEOWhabGdJQkdLbWgyMkZPTElVSERhQUlDRHY3c1RWZ1B2eHpsS29LWlBC?= =?utf-8?B?UEtjcERWMStiSGJUMzNNekZoeDlWdk03ZTNQcVlNdkgzQ21WeGdKdGsvdmt4?= =?utf-8?B?SllxMnYxdkFDcitxOGQyUHdmbThqeDJNQWs5VGdqWEZwR2Q0ZFlpU0xQSC9W?= =?utf-8?B?U245NExuZS9WbGUzOXFzcEJGYXJydjFuTWJrVlV4dW14RDNjT3BpT2RzK040?= =?utf-8?B?OWt6Sk50cExLR1FYZHNHMFdiQWVYNnRjbjhlbmFLWVoyaW5QdVpoS1NnM095?= =?utf-8?B?UW5DVXJDK1liZkUrMEszbUZwU1Y2TXl3cHIzbXNKQnZTUFlieVl0ajRYRHc0?= =?utf-8?B?TG5WOU1WL1JCb0ZTd0wzQWZLY0hoMzdrME5KajFLaGdjSGFIQXNXQnRKemdW?= =?utf-8?B?SjF1ZzYrZE1KZjUrVHphclRyZm1LeHJxNjNtblBLUi9vKzEwb2FGTXAwUFJW?= =?utf-8?B?cVJLYkp6dXE3dU10S25yWWJKTG1kMnArdmNuTVhjRVk0MnZoUlNKTDJnM2Rn?= =?utf-8?B?YWZuVVF1Sk1OYitUVlZqQlh1bHBWck43bk5kbk9UYitDVUZxbU5hMDUxdnd1?= =?utf-8?B?eG5sTHRsZXcwbERwUHlEOXRzdCtVVjZacER2S1B5SlVqbHRrVGx1TkVwZ2tt?= =?utf-8?B?ODZSdUp4OE15Y3JYS29jQ0lkMDVBT01PRDcxNDRndU1aSlBHRFRIWFJsZ3dM?= =?utf-8?B?Wmp6WFIzNTJhNFQ1NmdSbGVpRTF5MWRMZE8zYXJDNkdTVTg3Z1JMVEVRME1P?= =?utf-8?B?TlNVb1c1VFBja3l1RkkwRGVzK05QSWRwWXQzbWJBRTMxQmpvYUc0aWkyQXJu?= =?utf-8?B?bFFUVXhEOHhleUxEKzZnVWZ6RzZ5YXZSVjByelZ5OXFFaVVRKy9SS3dNR3Vq?= =?utf-8?B?K2NveUVlSVphVzQ1eXZXRTViaVlyTERUYzU1dEV1ZkZqdUVMcjY2aUtndjMr?= =?utf-8?B?OFpnRjJhYlUzc0ZvazRGNWZFN0Mvd3FaakF6OG12M3NHcE94dDRDMG01MHR4?= =?utf-8?B?WWx6dHhYR3AxME1FY0F3QWhEQzEyZlZPcTdSOG1idXNQR3kzYWFsdmNsWUVB?= =?utf-8?B?OFMvaDlVYjY1elE1SmJiMERDSElzT0F0b0JCWnZMM3I5RC81SVpTby8rMnAr?= =?utf-8?B?aXVxYkNwNzlLT2dscSs4WkRBZTVicGxXRGVOaVcwMVVsTXNqYkNPSzdwNjNO?= =?utf-8?B?dDVjaFJtTXJ4bU9PWmMvZG9kNWYxUXJDbDRxUjZhdVduMWI1S3JDeEV4REdC?= =?utf-8?Q?0t8ZeotydaiERoN7IPo1UXtD7?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: marvell.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM4PR18MB4368.namprd18.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 69a165dd-c188-4dac-2ddd-08db18a3b8f3 X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Feb 2023 09:19:26.4581 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 70e1fb47-1155-421d-87fc-2e58f638b6e0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: FazpTIA2wBa5GRYcKFXOWYiVcEXi7Q4woldbKrtJrQE2/MQPFgALEa9XTMjp/pE8rHE2/Kn3B7ujwNgjythJuw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA3PR18MB5274 X-Proofpoint-ORIG-GUID: ft9Hf34mKyiFQnzK1WkCIvbcEek9fGNx X-Proofpoint-GUID: ft9Hf34mKyiFQnzK1WkCIvbcEek9fGNx X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.219,Aquarius:18.0.930,Hydra:6.0.562,FMLib:17.11.170.22 definitions=2023-02-26_22,2023-02-24_01,2023-02-09_01 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 DQoNCj4tLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPkZyb206IEtvbnN0YW50aW4gQW5hbnll diA8a29uc3RhbnRpbi52LmFuYW55ZXZAeWFuZGV4LnJ1Pg0KPlNlbnQ6IFR1ZXNkYXksIEZlYnJ1 YXJ5IDIxLCAyMDIzIDM6MTcgQU0NCj5UbzogZGV2QGRwZGsub3JnDQo+U3ViamVjdDogW0VYVF0g UmU6IFtQQVRDSCB2MTEgMS80XSBsaWI6IGFkZCBnZW5lcmljIHN1cHBvcnQgZm9yIHJlYWRpbmcg UE1VIGV2ZW50cw0KPg0KPkV4dGVybmFsIEVtYWlsDQo+DQo+LS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPg0KPj4g QWRkIHN1cHBvcnQgZm9yIHByb2dyYW1taW5nIFBNVSBjb3VudGVycyBhbmQgcmVhZGluZyB0aGVp ciB2YWx1ZXMgaW4NCj4+IHJ1bnRpbWUgYnlwYXNzaW5nIGtlcm5lbCBjb21wbGV0ZWx5Lg0KPj4N Cj4+IFRoaXMgaXMgZXNwZWNpYWxseSB1c2VmdWwgaW4gY2FzZXMgd2hlcmUgQ1BVIGNvcmVzIGFy ZSBpc29sYXRlZCBpLmUNCj4+IHJ1biBkZWRpY2F0ZWQgdGFza3MuIEluIHN1Y2ggY2FzZXMgb25l IGNhbm5vdCB1c2Ugc3RhbmRhcmQgcGVyZg0KPj4gdXRpbGl0eSB3aXRob3V0IHNhY3JpZmljaW5n IGxhdGVuY3kgYW5kIHBlcmZvcm1hbmNlLg0KPj4NCj4+IFNpZ25lZC1vZmYtYnk6IFRvbWFzeiBE dXN6eW5za2kgPHRkdXN6eW5za2lAbWFydmVsbC5jb20+DQo+PiBBY2tlZC1ieTogTW9ydGVuIEJy w7hydXAgPG1iQHNtYXJ0c2hhcmVzeXN0ZW1zLmNvbT4NCj4NCj5GZXcgbW9yZSBjb21tZW50cy9x dWVzdGlvbnMgYmVsb3cuDQo+DQo+DQo+PiBkaWZmIC0tZ2l0IGEvbGliL3BtdS9ydGVfcG11LmMg Yi9saWIvcG11L3J0ZV9wbXUuYyBuZXcgZmlsZSBtb2RlDQo+PiAxMDA2NDQgaW5kZXggMDAwMDAw MDAwMC4uOTUwZjk5OWNiNw0KPj4gLS0tIC9kZXYvbnVsbA0KPj4gKysrIGIvbGliL3BtdS9ydGVf cG11LmMNCj4+IEBAIC0wLDAgKzEsNDYwIEBADQo+PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEJTRC0zLUNsYXVzZQ0KPj4gKyAqIENvcHlyaWdodChDKSAyMDIzIE1hcnZlbGwgSW50ZXJu YXRpb25hbCBMdGQuDQo+PiArICovDQo+PiArDQo+PiArI2luY2x1ZGUgPGN0eXBlLmg+DQo+PiAr I2luY2x1ZGUgPGRpcmVudC5oPg0KPj4gKyNpbmNsdWRlIDxlcnJuby5oPg0KPj4gKyNpbmNsdWRl IDxyZWdleC5oPg0KPj4gKyNpbmNsdWRlIDxzdGRsaWIuaD4NCj4+ICsjaW5jbHVkZSA8c3RyaW5n Lmg+DQo+PiArI2luY2x1ZGUgPHN5cy9pb2N0bC5oPg0KPj4gKyNpbmNsdWRlIDxzeXMvbW1hbi5o Pg0KPj4gKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4NCj4+ICsjaW5jbHVkZSA8c3lzL3N5c2NhbGwu aD4NCj4+ICsjaW5jbHVkZSA8dW5pc3RkLmg+DQo+PiArDQo+PiArI2luY2x1ZGUgPHJ0ZV9hdG9t aWMuaD4NCj4+ICsjaW5jbHVkZSA8cnRlX3Blcl9sY29yZS5oPg0KPj4gKyNpbmNsdWRlIDxydGVf cG11Lmg+DQo+PiArI2luY2x1ZGUgPHJ0ZV9zcGlubG9jay5oPg0KPj4gKyNpbmNsdWRlIDxydGVf dGFpbHEuaD4NCj4+ICsNCj4+ICsjaW5jbHVkZSAicG11X3ByaXZhdGUuaCINCj4+ICsNCj4+ICsj ZGVmaW5lIEVWRU5UX1NPVVJDRV9ERVZJQ0VTX1BBVEggIi9zeXMvYnVzL2V2ZW50X3NvdXJjZS9k ZXZpY2VzIg0KPj4gKw0KPj4gKyNkZWZpbmUgR0VOTUFTS19VTEwoaCwgbCkgKCh+MFVMTCAtICgx VUxMIDw8IChsKSkgKyAxKSAmICh+MFVMTCA+Pg0KPj4gKygoNjQgLSAxIC0gKGgpKSkpKSAjZGVm aW5lIEZJRUxEX1BSRVAobSwgdikgKCgodWludDY0X3QpKHYpIDw8DQo+PiArKF9fYnVpbHRpbl9m ZnNsbChtKSAtIDEpKSAmIChtKSkNCj4+ICsNCj4+ICtSVEVfREVGSU5FX1BFUl9MQ09SRShzdHJ1 Y3QgcnRlX3BtdV9ldmVudF9ncm91cCwgX2V2ZW50X2dyb3VwKTsNCj4+ICtzdHJ1Y3QgcnRlX3Bt dSBydGVfcG11Ow0KPj4gKw0KPj4gKy8qDQo+PiArICogRm9sbG93aW5nIF9fcnRlX3dlYWsgZnVu Y3Rpb25zIHByb3ZpZGUgZGVmYXVsdCBuby1vcC4NCj4+ICtBcmNoaXRlY3R1cmVzIHNob3VsZCBv dmVycmlkZSB0aGVtIGlmDQo+PiArICogbmVjZXNzYXJ5Lg0KPj4gKyAqLw0KPj4gKw0KPj4gK2lu dA0KPj4gK19fcnRlX3dlYWsgcG11X2FyY2hfaW5pdCh2b2lkKQ0KPj4gK3sNCj4+ICsJcmV0dXJu IDA7DQo+PiArfQ0KPj4gKw0KPj4gK3ZvaWQNCj4+ICtfX3J0ZV93ZWFrIHBtdV9hcmNoX2Zpbmko dm9pZCkNCj4+ICt7DQo+PiArfQ0KPj4gKw0KPj4gK3ZvaWQNCj4+ICtfX3J0ZV93ZWFrIHBtdV9h cmNoX2ZpeHVwX2NvbmZpZyh1aW50NjRfdCBfX3J0ZV91bnVzZWQgY29uZmlnWzNdKSB7IH0NCj4+ ICsNCj4+ICtzdGF0aWMgaW50DQo+PiArZ2V0X3Rlcm1fZm9ybWF0KGNvbnN0IGNoYXIgKm5hbWUs IGludCAqbnVtLCB1aW50NjRfdCAqbWFzaykgew0KPj4gKwljaGFyIHBhdGhbUEFUSF9NQVhdOw0K Pj4gKwljaGFyICpjb25maWcgPSBOVUxMOw0KPj4gKwlpbnQgaGlnaCwgbG93LCByZXQ7DQo+PiAr CUZJTEUgKmZwOw0KPj4gKw0KPj4gKwkqbnVtID0gKm1hc2sgPSAwOw0KPj4gKwlzbnByaW50Zihw YXRoLCBzaXplb2YocGF0aCksIEVWRU5UX1NPVVJDRV9ERVZJQ0VTX1BBVEggIi8lcy9mb3JtYXQv JXMiLCBydGVfcG11Lm5hbWUsIG5hbWUpOw0KPj4gKwlmcCA9IGZvcGVuKHBhdGgsICJyIik7DQo+ PiArCWlmIChmcCA9PSBOVUxMKQ0KPj4gKwkJcmV0dXJuIC1lcnJubzsNCj4+ICsNCj4+ICsJZXJy bm8gPSAwOw0KPj4gKwlyZXQgPSBmc2NhbmYoZnAsICIlbVteOl06JWQtJWQiLCAmY29uZmlnLCAm bG93LCAmaGlnaCk7DQo+PiArCWlmIChyZXQgPCAyKSB7DQo+PiArCQlyZXQgPSAtRU5PREFUQTsN Cj4+ICsJCWdvdG8gb3V0Ow0KPj4gKwl9DQo+PiArCWlmIChlcnJubykgew0KPj4gKwkJcmV0ID0g LWVycm5vOw0KPj4gKwkJZ290byBvdXQ7DQo+PiArCX0NCj4+ICsNCj4+ICsJaWYgKHJldCA9PSAy KQ0KPj4gKwkJaGlnaCA9IGxvdzsNCj4+ICsNCj4+ICsJKm1hc2sgPSBHRU5NQVNLX1VMTChoaWdo LCBsb3cpOw0KPj4gKwkvKiBMYXN0IGRpZ2l0IHNob3VsZCBiZSBbMDEyXS4gSWYgbGFzdCBkaWdp dCBpcyBtaXNzaW5nIDAgaXMgaW1wbGllZC4gKi8NCj4+ICsJKm51bSA9IGNvbmZpZ1tzdHJsZW4o Y29uZmlnKSAtIDFdOw0KPj4gKwkqbnVtID0gaXNkaWdpdCgqbnVtKSA/ICpudW0gLSAnMCcgOiAw Ow0KPj4gKw0KPj4gKwlyZXQgPSAwOw0KPj4gK291dDoNCj4+ICsJZnJlZShjb25maWcpOw0KPj4g KwlmY2xvc2UoZnApOw0KPj4gKw0KPj4gKwlyZXR1cm4gcmV0Ow0KPj4gK30NCj4+ICsNCj4+ICtz dGF0aWMgaW50DQo+PiArcGFyc2VfZXZlbnQoY2hhciAqYnVmLCB1aW50NjRfdCBjb25maWdbM10p IHsNCj4+ICsJY2hhciAqdG9rZW4sICp0ZXJtOw0KPj4gKwlpbnQgbnVtLCByZXQsIHZhbDsNCj4+ ICsJdWludDY0X3QgbWFzazsNCj4+ICsNCj4+ICsJY29uZmlnWzBdID0gY29uZmlnWzFdID0gY29u ZmlnWzJdID0gMDsNCj4+ICsNCj4+ICsJdG9rZW4gPSBzdHJ0b2soYnVmLCAiLCIpOw0KPj4gKwl3 aGlsZSAodG9rZW4pIHsNCj4+ICsJCWVycm5vID0gMDsNCj4+ICsJCS8qIDx0ZXJtPj08dmFsdWU+ ICovDQo+PiArCQlyZXQgPSBzc2NhbmYodG9rZW4sICIlbVtePV09JWkiLCAmdGVybSwgJnZhbCk7 DQo+PiArCQlpZiAocmV0IDwgMSkNCj4+ICsJCQlyZXR1cm4gLUVOT0RBVEE7DQo+PiArCQlpZiAo ZXJybm8pDQo+PiArCQkJcmV0dXJuIC1lcnJubzsNCj4+ICsJCWlmIChyZXQgPT0gMSkNCj4+ICsJ CQl2YWwgPSAxOw0KPj4gKw0KPj4gKwkJcmV0ID0gZ2V0X3Rlcm1fZm9ybWF0KHRlcm0sICZudW0s ICZtYXNrKTsNCj4+ICsJCWZyZWUodGVybSk7DQo+PiArCQlpZiAocmV0KQ0KPj4gKwkJCXJldHVy biByZXQ7DQo+PiArDQo+PiArCQljb25maWdbbnVtXSB8PSBGSUVMRF9QUkVQKG1hc2ssIHZhbCk7 DQo+PiArCQl0b2tlbiA9IHN0cnRvayhOVUxMLCAiLCIpOw0KPj4gKwl9DQo+PiArDQo+PiArCXJl dHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50DQo+PiArZ2V0X2V2ZW50X2NvbmZp Zyhjb25zdCBjaGFyICpuYW1lLCB1aW50NjRfdCBjb25maWdbM10pIHsNCj4+ICsJY2hhciBwYXRo W1BBVEhfTUFYXSwgYnVmW0JVRlNJWl07DQo+PiArCUZJTEUgKmZwOw0KPj4gKwlpbnQgcmV0Ow0K Pj4gKw0KPj4gKwlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIEVWRU5UX1NPVVJDRV9ERVZJ Q0VTX1BBVEggIi8lcy9ldmVudHMvJXMiLCBydGVfcG11Lm5hbWUsIG5hbWUpOw0KPj4gKwlmcCA9 IGZvcGVuKHBhdGgsICJyIik7DQo+PiArCWlmIChmcCA9PSBOVUxMKQ0KPj4gKwkJcmV0dXJuIC1l cnJubzsNCj4+ICsNCj4+ICsJcmV0ID0gZnJlYWQoYnVmLCAxLCBzaXplb2YoYnVmKSwgZnApOw0K Pj4gKwlpZiAocmV0ID09IDApIHsNCj4+ICsJCWZjbG9zZShmcCk7DQo+PiArDQo+PiArCQlyZXR1 cm4gLUVJTlZBTDsNCj4+ICsJfQ0KPj4gKwlmY2xvc2UoZnApOw0KPj4gKwlidWZbcmV0XSA9ICdc MCc7DQo+PiArDQo+PiArCXJldHVybiBwYXJzZV9ldmVudChidWYsIGNvbmZpZyk7DQo+PiArfQ0K Pj4gKw0KPj4gK3N0YXRpYyBpbnQNCj4+ICtkb19wZXJmX2V2ZW50X29wZW4odWludDY0X3QgY29u ZmlnWzNdLCBpbnQgZ3JvdXBfZmQpIHsNCj4+ICsJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBhdHRy ID0gew0KPj4gKwkJLnNpemUgPSBzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciksDQo+PiAr CQkudHlwZSA9IFBFUkZfVFlQRV9SQVcsDQo+PiArCQkuZXhjbHVkZV9rZXJuZWwgPSAxLA0KPj4g KwkJLmV4Y2x1ZGVfaHYgPSAxLA0KPj4gKwkJLmRpc2FibGVkID0gMSwNCj4+ICsJfTsNCj4+ICsN Cj4+ICsJcG11X2FyY2hfZml4dXBfY29uZmlnKGNvbmZpZyk7DQo+PiArDQo+PiArCWF0dHIuY29u ZmlnID0gY29uZmlnWzBdOw0KPj4gKwlhdHRyLmNvbmZpZzEgPSBjb25maWdbMV07DQo+PiArCWF0 dHIuY29uZmlnMiA9IGNvbmZpZ1syXTsNCj4+ICsNCj4+ICsJcmV0dXJuIHN5c2NhbGwoU1lTX3Bl cmZfZXZlbnRfb3BlbiwgJmF0dHIsIDAsIC0xLCBncm91cF9mZCwgMCk7IH0NCj4+ICsNCj4+ICtz dGF0aWMgaW50DQo+PiArb3Blbl9ldmVudHMoc3RydWN0IHJ0ZV9wbXVfZXZlbnRfZ3JvdXAgKmdy b3VwKSB7DQo+PiArCXN0cnVjdCBydGVfcG11X2V2ZW50ICpldmVudDsNCj4+ICsJdWludDY0X3Qg Y29uZmlnWzNdOw0KPj4gKwlpbnQgbnVtID0gMCwgcmV0Ow0KPj4gKw0KPj4gKwkvKiBncm91cCBs ZWFkZXIgZ2V0cyBjcmVhdGVkIGZpcnN0LCB3aXRoIGZkID0gLTEgKi8NCj4+ICsJZ3JvdXAtPmZk c1swXSA9IC0xOw0KPj4gKw0KPj4gKwlUQUlMUV9GT1JFQUNIKGV2ZW50LCAmcnRlX3BtdS5ldmVu dF9saXN0LCBuZXh0KSB7DQo+PiArCQlyZXQgPSBnZXRfZXZlbnRfY29uZmlnKGV2ZW50LT5uYW1l LCBjb25maWcpOw0KPj4gKwkJaWYgKHJldCkNCj4+ICsJCQljb250aW51ZTsNCj4+ICsNCj4+ICsJ CXJldCA9IGRvX3BlcmZfZXZlbnRfb3Blbihjb25maWcsIGdyb3VwLT5mZHNbMF0pOw0KPj4gKwkJ aWYgKHJldCA9PSAtMSkgew0KPj4gKwkJCXJldCA9IC1lcnJubzsNCj4+ICsJCQlnb3RvIG91dDsN Cj4+ICsJCX0NCj4+ICsNCj4+ICsJCWdyb3VwLT5mZHNbZXZlbnQtPmluZGV4XSA9IHJldDsNCj4+ ICsJCW51bSsrOw0KPj4gKwl9DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gK291dDoNCj4+ICsJ Zm9yICgtLW51bTsgbnVtID49IDA7IG51bS0tKSB7DQo+PiArCQljbG9zZShncm91cC0+ZmRzW251 bV0pOw0KPj4gKwkJZ3JvdXAtPmZkc1tudW1dID0gLTE7DQo+PiArCX0NCj4+ICsNCj4+ICsNCj4+ ICsJcmV0dXJuIHJldDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludA0KPj4gK21tYXBfZXZl bnRzKHN0cnVjdCBydGVfcG11X2V2ZW50X2dyb3VwICpncm91cCkgew0KPj4gKwlsb25nIHBhZ2Vf c2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VfU0laRSk7DQo+PiArCXVuc2lnbmVkIGludCBpOw0KPj4g Kwl2b2lkICphZGRyOw0KPj4gKwlpbnQgcmV0Ow0KPj4gKw0KPj4gKwlmb3IgKGkgPSAwOyBpIDwg cnRlX3BtdS5udW1fZ3JvdXBfZXZlbnRzOyBpKyspIHsNCj4+ICsJCWFkZHIgPSBtbWFwKDAsIHBh Z2Vfc2l6ZSwgUFJPVF9SRUFELCBNQVBfU0hBUkVELCBncm91cC0+ZmRzW2ldLCAwKTsNCj4+ICsJ CWlmIChhZGRyID09IE1BUF9GQUlMRUQpIHsNCj4+ICsJCQlyZXQgPSAtZXJybm87DQo+PiArCQkJ Z290byBvdXQ7DQo+PiArCQl9DQo+PiArDQo+PiArCQlncm91cC0+bW1hcF9wYWdlc1tpXSA9IGFk ZHI7DQo+PiArCQlpZiAoIWdyb3VwLT5tbWFwX3BhZ2VzW2ldLT5jYXBfdXNlcl9yZHBtYykgew0K Pj4gKwkJCXJldCA9IC1FUEVSTTsNCj4+ICsJCQlnb3RvIG91dDsNCj4+ICsJCX0NCj4+ICsJfQ0K Pj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICtvdXQ6DQo+PiArCWZvciAoOyBpOyBpLS0pIHsNCj4+ ICsJCW11bm1hcChncm91cC0+bW1hcF9wYWdlc1tpIC0gMV0sIHBhZ2Vfc2l6ZSk7DQo+PiArCQln cm91cC0+bW1hcF9wYWdlc1tpIC0gMV0gPSBOVUxMOw0KPj4gKwl9DQo+PiArDQo+PiArCXJldHVy biByZXQ7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkDQo+PiArY2xlYW51cF9ldmVudHMo c3RydWN0IHJ0ZV9wbXVfZXZlbnRfZ3JvdXAgKmdyb3VwKSB7DQo+PiArCXVuc2lnbmVkIGludCBp Ow0KPj4gKw0KPj4gKwlpZiAoZ3JvdXAtPmZkc1swXSAhPSAtMSkNCj4+ICsJCWlvY3RsKGdyb3Vw LT5mZHNbMF0sIFBFUkZfRVZFTlRfSU9DX0RJU0FCTEUsIFBFUkZfSU9DX0ZMQUdfR1JPVVApOw0K Pj4gKw0KPj4gKwlmb3IgKGkgPSAwOyBpIDwgcnRlX3BtdS5udW1fZ3JvdXBfZXZlbnRzOyBpKysp IHsNCj4+ICsJCWlmIChncm91cC0+bW1hcF9wYWdlc1tpXSkgew0KPj4gKwkJCW11bm1hcChncm91 cC0+bW1hcF9wYWdlc1tpXSwgc3lzY29uZihfU0NfUEFHRV9TSVpFKSk7DQo+PiArCQkJZ3JvdXAt Pm1tYXBfcGFnZXNbaV0gPSBOVUxMOw0KPj4gKwkJfQ0KPj4gKw0KPj4gKwkJaWYgKGdyb3VwLT5m ZHNbaV0gIT0gLTEpIHsNCj4+ICsJCQljbG9zZShncm91cC0+ZmRzW2ldKTsNCj4+ICsJCQlncm91 cC0+ZmRzW2ldID0gLTE7DQo+PiArCQl9DQo+PiArCX0NCj4+ICsNCj4+ICsJZ3JvdXAtPmVuYWJs ZWQgPSBmYWxzZTsNCj4+ICt9DQo+PiArDQo+PiAraW50DQo+PiArX19ydGVfcG11X2VuYWJsZV9n cm91cCh2b2lkKQ0KPj4gK3sNCj4+ICsJc3RydWN0IHJ0ZV9wbXVfZXZlbnRfZ3JvdXAgKmdyb3Vw ID0gJlJURV9QRVJfTENPUkUoX2V2ZW50X2dyb3VwKTsNCj4+ICsJaW50IHJldDsNCj4+ICsNCj4+ ICsJaWYgKHJ0ZV9wbXUubnVtX2dyb3VwX2V2ZW50cyA9PSAwKQ0KPj4gKwkJcmV0dXJuIC1FTk9E RVY7DQo+PiArDQo+PiArCXJldCA9IG9wZW5fZXZlbnRzKGdyb3VwKTsNCj4+ICsJaWYgKHJldCkN Cj4+ICsJCWdvdG8gb3V0Ow0KPj4gKw0KPj4gKwlyZXQgPSBtbWFwX2V2ZW50cyhncm91cCk7DQo+ PiArCWlmIChyZXQpDQo+PiArCQlnb3RvIG91dDsNCj4+ICsNCj4+ICsJaWYgKGlvY3RsKGdyb3Vw LT5mZHNbMF0sIFBFUkZfRVZFTlRfSU9DX1JFU0VULCBQRVJGX0lPQ19GTEFHX0dST1VQKSA9PSAt MSkgew0KPj4gKwkJcmV0ID0gLWVycm5vOw0KPj4gKwkJZ290byBvdXQ7DQo+PiArCX0NCj4+ICsN Cj4+ICsJaWYgKGlvY3RsKGdyb3VwLT5mZHNbMF0sIFBFUkZfRVZFTlRfSU9DX0VOQUJMRSwgUEVS Rl9JT0NfRkxBR19HUk9VUCkgPT0gLTEpIHsNCj4+ICsJCXJldCA9IC1lcnJubzsNCj4+ICsJCWdv dG8gb3V0Ow0KPj4gKwl9DQo+PiArDQo+PiArCXJ0ZV9zcGlubG9ja19sb2NrKCZydGVfcG11Lmxv Y2spOw0KPj4gKwlUQUlMUV9JTlNFUlRfVEFJTCgmcnRlX3BtdS5ldmVudF9ncm91cF9saXN0LCBn cm91cCwgbmV4dCk7DQo+DQo+SG1tLi4gc28gd2UgaW5zZXJ0IHBvaW50ZXIgdG8gVExTIHZhcmlh YmxlIGludG8gdGhlIGdsb2JhbCBsaXN0Pw0KPldvbmRlciB3aGF0IHdvdWxkIGhhcHBlbiBpZiB0 aGF0IHRocmVhZCBnZXQgdGVybWluYXRlZD8NCg0KTm90aGluZyBzcGVjaWFsLiBBbnkgcG9pbnRl cnMgdG8gdGhhdCB0aHJlYWQtbG9jYWwgaW4gdGhhdCB0aHJlYWQgYXJlIGludmFsaWRlZC4NCg0K PkNhbiBtZW1vcnkgZnJvbSBpdHMgVExTIGJsb2NrIGdldCByZS11c2VkIChieSBvdGhlciB0aHJl YWQgb3IgZm9yIG90aGVyIHB1cnBvc2VzKT8NCj4NCg0KV2h5IHdvdWxkIGFueSBvdGhlciB0aHJl YWQgcmV1c2UgdGhhdD8gRXZlbnR1YWxseSBtYWluIHRocmVhZCB3aWxsIG5lZWQgdGhhdCBkYXRh IHRvIGRvIHRoZSBjbGVhbnVwLiANCg0KPg0KPj4gKwlydGVfc3BpbmxvY2tfdW5sb2NrKCZydGVf cG11LmxvY2spOw0KPj4gKwlncm91cC0+ZW5hYmxlZCA9IHRydWU7DQo+PiArDQo+PiArCXJldHVy biAwOw0KPj4gKw0KPj4gK291dDoNCj4+ICsJY2xlYW51cF9ldmVudHMoZ3JvdXApOw0KPj4gKw0K Pj4gKwlyZXR1cm4gcmV0Ow0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50DQo+PiArc2Nhbl9w bXVzKHZvaWQpDQo+PiArew0KPj4gKwljaGFyIHBhdGhbUEFUSF9NQVhdOw0KPj4gKwlzdHJ1Y3Qg ZGlyZW50ICpkZW50Ow0KPj4gKwljb25zdCBjaGFyICpuYW1lOw0KPj4gKwlESVIgKmRpcnA7DQo+ PiArDQo+PiArCWRpcnAgPSBvcGVuZGlyKEVWRU5UX1NPVVJDRV9ERVZJQ0VTX1BBVEgpOw0KPj4g KwlpZiAoZGlycCA9PSBOVUxMKQ0KPj4gKwkJcmV0dXJuIC1lcnJubzsNCj4+ICsNCj4+ICsJd2hp bGUgKChkZW50ID0gcmVhZGRpcihkaXJwKSkpIHsNCj4+ICsJCW5hbWUgPSBkZW50LT5kX25hbWU7 DQo+PiArCQlpZiAobmFtZVswXSA9PSAnLicpDQo+PiArCQkJY29udGludWU7DQo+PiArDQo+PiAr CQkvKiBzeXNmcyBlbnRyeSBzaG91bGQgZWl0aGVyIGNvbnRhaW4gY3B1cyBvciBiZSBhIGNwdSAq Lw0KPj4gKwkJaWYgKCFzdHJjbXAobmFtZSwgImNwdSIpKQ0KPj4gKwkJCWJyZWFrOw0KPj4gKw0K Pj4gKwkJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBFVkVOVF9TT1VSQ0VfREVWSUNFU19Q QVRIICIvJXMvY3B1cyIsIG5hbWUpOw0KPj4gKwkJaWYgKGFjY2VzcyhwYXRoLCBGX09LKSA9PSAw KQ0KPj4gKwkJCWJyZWFrOw0KPj4gKwl9DQo+PiArDQo+PiArCWlmIChkZW50KSB7DQo+PiArCQly dGVfcG11Lm5hbWUgPSBzdHJkdXAobmFtZSk7DQo+PiArCQlpZiAocnRlX3BtdS5uYW1lID09IE5V TEwpIHsNCj4+ICsJCQljbG9zZWRpcihkaXJwKTsNCj4+ICsNCj4+ICsJCQlyZXR1cm4gLUVOT01F TTsNCj4+ICsJCX0NCj4+ICsJfQ0KPj4gKw0KPj4gKwljbG9zZWRpcihkaXJwKTsNCj4+ICsNCj4+ ICsJcmV0dXJuIHJ0ZV9wbXUubmFtZSA/IDAgOiAtRU5PREVWOw0KPj4gK30NCj4+ICsNCj4+ICtz dGF0aWMgc3RydWN0IHJ0ZV9wbXVfZXZlbnQgKg0KPj4gK25ld19ldmVudChjb25zdCBjaGFyICpu YW1lKQ0KPj4gK3sNCj4+ICsJc3RydWN0IHJ0ZV9wbXVfZXZlbnQgKmV2ZW50Ow0KPj4gKw0KPj4g KwlldmVudCA9IGNhbGxvYygxLCBzaXplb2YoKmV2ZW50KSk7DQo+PiArCWlmIChldmVudCA9PSBO VUxMKQ0KPj4gKwkJZ290byBvdXQ7DQo+PiArDQo+PiArCWV2ZW50LT5uYW1lID0gc3RyZHVwKG5h bWUpOw0KPj4gKwlpZiAoZXZlbnQtPm5hbWUgPT0gTlVMTCkgew0KPj4gKwkJZnJlZShldmVudCk7 DQo+PiArCQlldmVudCA9IE5VTEw7DQo+PiArCX0NCj4+ICsNCj4+ICtvdXQ6DQo+PiArCXJldHVy biBldmVudDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQNCj4+ICtmcmVlX2V2ZW50KHN0 cnVjdCBydGVfcG11X2V2ZW50ICpldmVudCkNCj4+ICt7DQo+PiArCWZyZWUoZXZlbnQtPm5hbWUp Ow0KPj4gKwlmcmVlKGV2ZW50KTsNCj4+ICt9DQo+PiArDQo+PiAraW50DQo+PiArcnRlX3BtdV9h ZGRfZXZlbnQoY29uc3QgY2hhciAqbmFtZSkNCj4+ICt7DQo+PiArCXN0cnVjdCBydGVfcG11X2V2 ZW50ICpldmVudDsNCj4+ICsJY2hhciBwYXRoW1BBVEhfTUFYXTsNCj4+ICsNCj4+ICsJaWYgKHJ0 ZV9wbXUubmFtZSA9PSBOVUxMKQ0KPj4gKwkJcmV0dXJuIC1FTk9ERVY7DQo+PiArDQo+PiArCWlm IChydGVfcG11Lm51bV9ncm91cF9ldmVudHMgKyAxID49IE1BWF9OVU1fR1JPVVBfRVZFTlRTKQ0K Pj4gKwkJcmV0dXJuIC1FTk9TUEM7DQo+PiArDQo+PiArCXNucHJpbnRmKHBhdGgsIHNpemVvZihw YXRoKSwgRVZFTlRfU09VUkNFX0RFVklDRVNfUEFUSCAiLyVzL2V2ZW50cy8lcyIsIHJ0ZV9wbXUu bmFtZSwgbmFtZSk7DQo+PiArCWlmIChhY2Nlc3MocGF0aCwgUl9PSykpDQo+PiArCQlyZXR1cm4g LUVOT0RFVjsNCj4+ICsNCj4+ICsJVEFJTFFfRk9SRUFDSChldmVudCwgJnJ0ZV9wbXUuZXZlbnRf bGlzdCwgbmV4dCkgew0KPj4gKwkJaWYgKCFzdHJjbXAoZXZlbnQtPm5hbWUsIG5hbWUpKQ0KPj4g KwkJCXJldHVybiBldmVudC0+aW5kZXg7DQo+PiArCQljb250aW51ZTsNCj4+ICsJfQ0KPj4gKw0K Pj4gKwlldmVudCA9IG5ld19ldmVudChuYW1lKTsNCj4+ICsJaWYgKGV2ZW50ID09IE5VTEwpDQo+ PiArCQlyZXR1cm4gLUVOT01FTTsNCj4+ICsNCj4+ICsJZXZlbnQtPmluZGV4ID0gcnRlX3BtdS5u dW1fZ3JvdXBfZXZlbnRzKys7DQo+PiArCVRBSUxRX0lOU0VSVF9UQUlMKCZydGVfcG11LmV2ZW50 X2xpc3QsIGV2ZW50LCBuZXh0KTsNCj4+ICsNCj4+ICsJcmV0dXJuIGV2ZW50LT5pbmRleDsNCj4+ ICt9DQo+PiArDQo+PiAraW50DQo+PiArcnRlX3BtdV9pbml0KHZvaWQpDQo+PiArew0KPj4gKwlp bnQgcmV0Ow0KPj4gKw0KPj4gKwkvKiBBbGxvdyBjYWxsaW5nIGluaXQgZnJvbSBtdWx0aXBsZSBj b250ZXh0cyB3aXRoaW4gYSBzaW5nbGUgdGhyZWFkLiBUaGlzIHNpbXBsaWZpZXMNCj4+ICsJICog cmVzb3VyY2UgbWFuYWdlbWVudCBhIGJpdCBlLmcgaW4gY2FzZSBmYXN0LXBhdGggdHJhY2Vwb2lu dCBoYXMgYWxyZWFkeSBiZWVuIGVuYWJsZWQNCj4+ICsJICogdmlhIGNvbW1hbmQgbGluZSBidXQg YXBwbGljYXRpb24gZG9lc24ndCBjYXJlIGVub3VnaCBhbmQgcGVyZm9ybXMgaW5pdC9maW5pIGFn YWluLg0KPj4gKwkgKi8NCj4+ICsJaWYgKHJ0ZV9wbXUuaW5pdGlhbGl6ZWQgIT0gMCkgew0KPj4g KwkJcnRlX3BtdS5pbml0aWFsaXplZCsrOw0KPj4gKwkJcmV0dXJuIDA7DQo+PiArCX0NCj4+ICsN Cj4+ICsJcmV0ID0gc2Nhbl9wbXVzKCk7DQo+PiArCWlmIChyZXQpDQo+PiArCQlnb3RvIG91dDsN Cj4+ICsNCj4+ICsJcmV0ID0gcG11X2FyY2hfaW5pdCgpOw0KPj4gKwlpZiAocmV0KQ0KPj4gKwkJ Z290byBvdXQ7DQo+PiArDQo+PiArCVRBSUxRX0lOSVQoJnJ0ZV9wbXUuZXZlbnRfbGlzdCk7DQo+ PiArCVRBSUxRX0lOSVQoJnJ0ZV9wbXUuZXZlbnRfZ3JvdXBfbGlzdCk7DQo+PiArCXJ0ZV9zcGlu bG9ja19pbml0KCZydGVfcG11LmxvY2spOw0KPj4gKwlydGVfcG11LmluaXRpYWxpemVkID0gMTsN Cj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArb3V0Og0KPj4gKwlmcmVlKHJ0ZV9wbXUubmFtZSk7 DQo+PiArCXJ0ZV9wbXUubmFtZSA9IE5VTEw7DQo+PiArDQo+PiArCXJldHVybiByZXQ7DQo+PiAr fQ0KPj4gKw0KPj4gK3ZvaWQNCj4+ICtydGVfcG11X2Zpbmkodm9pZCkNCj4+ICt7DQo+PiArCXN0 cnVjdCBydGVfcG11X2V2ZW50X2dyb3VwICpncm91cCwgKnRtcF9ncm91cDsNCj4+ICsJc3RydWN0 IHJ0ZV9wbXVfZXZlbnQgKmV2ZW50LCAqdG1wX2V2ZW50Ow0KPj4gKw0KPj4gKwkvKiBjbGVhbnVw IG9uY2UgaW5pdCBjb3VudCBkcm9wcyB0byB6ZXJvICovDQo+PiArCWlmIChydGVfcG11LmluaXRp YWxpemVkID09IDAgfHwgLS1ydGVfcG11LmluaXRpYWxpemVkICE9IDApDQo+PiArCQlyZXR1cm47 DQo+PiArDQo+PiArCVJURV9UQUlMUV9GT1JFQUNIX1NBRkUoZXZlbnQsICZydGVfcG11LmV2ZW50 X2xpc3QsIG5leHQsIHRtcF9ldmVudCkgew0KPj4gKwkJVEFJTFFfUkVNT1ZFKCZydGVfcG11LmV2 ZW50X2xpc3QsIGV2ZW50LCBuZXh0KTsNCj4+ICsJCWZyZWVfZXZlbnQoZXZlbnQpOw0KPj4gKwl9 DQo+PiArDQo+PiArCVJURV9UQUlMUV9GT1JFQUNIX1NBRkUoZ3JvdXAsICZydGVfcG11LmV2ZW50 X2dyb3VwX2xpc3QsIG5leHQsIHRtcF9ncm91cCkgew0KPj4gKwkJVEFJTFFfUkVNT1ZFKCZydGVf cG11LmV2ZW50X2dyb3VwX2xpc3QsIGdyb3VwLCBuZXh0KTsNCj4+ICsJCWNsZWFudXBfZXZlbnRz KGdyb3VwKTsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlwbXVfYXJjaF9maW5pKCk7DQo+PiArCWZyZWUo cnRlX3BtdS5uYW1lKTsNCj4+ICsJcnRlX3BtdS5uYW1lID0gTlVMTDsNCj4+ICsJcnRlX3BtdS5u dW1fZ3JvdXBfZXZlbnRzID0gMDsNCj4+ICt9DQo+PiBkaWZmIC0tZ2l0IGEvbGliL3BtdS9ydGVf cG11LmggYi9saWIvcG11L3J0ZV9wbXUuaA0KPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4+IGlu ZGV4IDAwMDAwMDAwMDAuLjZiNjY0YzMzMzYNCj4+IC0tLSAvZGV2L251bGwNCj4+ICsrKyBiL2xp Yi9wbXUvcnRlX3BtdS5oDQo+PiBAQCAtMCwwICsxLDIxMiBAQA0KPj4gKy8qIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UNCj4+ICsgKiBDb3B5cmlnaHQoYykgMjAyMyBNYXJ2 ZWxsDQo+PiArICovDQo+PiArDQo+PiArI2lmbmRlZiBfUlRFX1BNVV9IXw0KPj4gKyNkZWZpbmUg X1JURV9QTVVfSF8NCj4+ICsNCj4+ICsvKioNCj4+ICsgKiBAZmlsZQ0KPj4gKyAqDQo+PiArICog UE1VIGV2ZW50IHRyYWNpbmcgb3BlcmF0aW9ucw0KPj4gKyAqDQo+PiArICogVGhpcyBmaWxlIGRl ZmluZXMgZ2VuZXJpYyBBUEkgYW5kIHR5cGVzIG5lY2Vzc2FyeSB0byBzZXR1cCBQTVUgYW5kDQo+ PiArICogcmVhZCBzZWxlY3RlZCBjb3VudGVycyBpbiBydW50aW1lLg0KPj4gKyAqLw0KPj4gKw0K Pj4gKyNpZmRlZiBfX2NwbHVzcGx1cw0KPj4gK2V4dGVybiAiQyIgew0KPj4gKyNlbmRpZg0KPj4g Kw0KPj4gKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+DQo+PiArDQo+PiArI2luY2x1ZGUg PHJ0ZV9hdG9taWMuaD4NCj4+ICsjaW5jbHVkZSA8cnRlX2JyYW5jaF9wcmVkaWN0aW9uLmg+DQo+ PiArI2luY2x1ZGUgPHJ0ZV9jb21tb24uaD4NCj4+ICsjaW5jbHVkZSA8cnRlX2NvbXBhdC5oPg0K Pj4gKyNpbmNsdWRlIDxydGVfc3BpbmxvY2suaD4NCj4+ICsNCj4+ICsvKiogTWF4aW11bSBudW1i ZXIgb2YgZXZlbnRzIGluIGEgZ3JvdXAgKi8NCj4+ICsjZGVmaW5lIE1BWF9OVU1fR1JPVVBfRVZF TlRTIDgNCj4NCj5mb3Jnb3QgUlRFXyBwcmVmaXguDQo+SW4gZmFjdCwgZG8geW91IHJlYWxseSBu ZWVkIG51bWJlciBvZiBldmVudHMgaW4gZ3JvdXAgdG8gYmUgaGFyZC1jb2RlZD8NCj5Db3VsZG4n dCBtbWFwX3BhZ2VzW10gYW5kIGZkc1tdIGJlIGFsbG9jYXRlZCBkeW5hbWljYWxseSBieSBlbmFi bGVfZ3JvdXAoKT8NCj4NCg0KOCBpcyByZWFzb25hYmxlIG51bWJlciBJIHRoaW5rLiBYODYvQVJN IGhhdmUgYWN0dWFsbHkgbGVzcyB0aGF0IHRoYXQgKHdhcyB0aGF0IHNvbWV0aGluZyBsaWtlIDQ/ KS4gDQpNb3Jlb3ZlciBldmVudHMgYXJlIHNjaGVkdWxlZCBhcyBhIGdyb3VwIHNvIHRoZXJlIG11 c3QgYmUgZW5vdWdoIGh3IGNvdW50ZXJzIGF2YWlsYWJsZQ0KZm9yIHRoYXQgdG8gc3VjY2VlZC4g U28gdGhpcyBudW1iZXIgc2hvdWxkIGNvdmVyIGN1cnJlbnQgbmVlZHMuICANCg0KPj4gKw0KPj4g Ky8qKg0KPj4gKyAqIEEgc3RydWN0dXJlIGRlc2NyaWJpbmcgYSBncm91cCBvZiBldmVudHMuDQo+ PiArICovDQo+PiArc3RydWN0IHJ0ZV9wbXVfZXZlbnRfZ3JvdXAgew0KPj4gKwlzdHJ1Y3QgcGVy Zl9ldmVudF9tbWFwX3BhZ2UgKm1tYXBfcGFnZXNbTUFYX05VTV9HUk9VUF9FVkVOVFNdOyAvKio8 IGFycmF5IG9mIHVzZXIgcGFnZXMgKi8NCj4+ICsJaW50IGZkc1tNQVhfTlVNX0dST1VQX0VWRU5U U107IC8qKjwgYXJyYXkgb2YgZXZlbnQgZGVzY3JpcHRvcnMgKi8NCj4+ICsJYm9vbCBlbmFibGVk OyAvKio8IHRydWUgaWYgZ3JvdXAgd2FzIGVuYWJsZWQgb24gcGFydGljdWxhciBsY29yZSAqLw0K Pj4gKwlUQUlMUV9FTlRSWShydGVfcG11X2V2ZW50X2dyb3VwKSBuZXh0OyAvKio8IGxpc3QgZW50 cnkgKi8NCj4+ICt9IF9fcnRlX2NhY2hlX2FsaWduZWQ7DQo+PiArDQo+DQo+RXZlbiBpZiB3ZSdk IGRlY2lkZSB0byBrZWVwIHJ0ZV9wbXVfcmVhZCgpIGFzIHN0YXRpYyBpbmxpbmUgKHN0aWxsIG5v dA0KPnN1cmUgaXQgaXMgYSBnb29kIGlkZWEpLA0KDQpXZSB3YW50IHRvIHNhdmUgYXMgbXVjaCBj cHUgY3ljbGVzIGFzIHdlIHBvc3NpYmx5IGNhbiBhbmQgaW5saW5pbmcgZG9lcyBoZWxwcw0KaW4g dGhhdCBtYXR0ZXIuDQoNCj53aHkgdGhlc2UgdHdvIHN0cnVjdCBiZWxvdyAocnRlX3BtdV9ldmVu dCBhbmQgcnRlX3BtdSkgaGF2ZSB0byBiZSBwdWJsaWM/DQo+SSB0aGluayBib3RoIGNhbiBiZSBz YWZlbHkgbW92ZWQgYXdheSBmcm9tIHB1YmxpYyBoZWFkZXJzLg0KPg0KDQpzdHJ1Y3QgcnRlX3Bt dV9ldmVudCBjYW4gYmUgaGlkZGVuIEkgZ3Vlc3MuIA0Kc3RydWN0IHJ0ZV9wbXUgaXMgdXNlZCBp biB0aGlzIGhlYWRlciBoZW5jZSBjYW5ub3QgYmUgbW92ZWQgZWxzZXdoZXJlLiANCg0KPg0KPj4g Ky8qKg0KPj4gKyAqIEEgc3RydWN0dXJlIGRlc2NyaWJpbmcgYW4gZXZlbnQuDQo+PiArICovDQo+ PiArc3RydWN0IHJ0ZV9wbXVfZXZlbnQgew0KPj4gKwljaGFyICpuYW1lOyAvKio8IG5hbWUgb2Yg YW4gZXZlbnQgKi8NCj4+ICsJdW5zaWduZWQgaW50IGluZGV4OyAvKio8IGV2ZW50IGluZGV4IGlu dG8gZmRzL21tYXBfcGFnZXMgKi8NCj4+ICsJVEFJTFFfRU5UUlkocnRlX3BtdV9ldmVudCkgbmV4 dDsgLyoqPCBsaXN0IGVudHJ5ICovDQo+PiArfTsNCj4NCj4+ICsNCj4+ICsvKioNCj4+ICsgKiBB IFBNVSBzdGF0ZSBjb250YWluZXIuDQo+PiArICovDQo+PiArc3RydWN0IHJ0ZV9wbXUgew0KPj4g KwljaGFyICpuYW1lOyAvKio8IG5hbWUgb2YgY29yZSBQTVUgbGlzdGVkIHVuZGVyIC9zeXMvYnVz L2V2ZW50X3NvdXJjZS9kZXZpY2VzICovDQo+PiArCXJ0ZV9zcGlubG9ja190IGxvY2s7IC8qKjwg c2VyaWFsaXplIGFjY2VzcyB0byBldmVudCBncm91cCBsaXN0ICovDQo+PiArCVRBSUxRX0hFQUQo LCBydGVfcG11X2V2ZW50X2dyb3VwKSBldmVudF9ncm91cF9saXN0OyAvKio8IGxpc3Qgb2YgZXZl bnQgZ3JvdXBzICovDQo+PiArCXVuc2lnbmVkIGludCBudW1fZ3JvdXBfZXZlbnRzOyAvKio8IG51 bWJlciBvZiBldmVudHMgaW4gYSBncm91cCAqLw0KPj4gKwlUQUlMUV9IRUFEKCwgcnRlX3BtdV9l dmVudCkgZXZlbnRfbGlzdDsgLyoqPCBsaXN0IG9mIG1hdGNoaW5nIGV2ZW50cyAqLw0KPj4gKwl1 bnNpZ25lZCBpbnQgaW5pdGlhbGl6ZWQ7IC8qKjwgaW5pdGlhbGl6YXRpb24gY291bnRlciAqLw0K Pj4gK307DQo+PiArDQo+PiArLyoqIGxjb3JlIGV2ZW50IGdyb3VwICovDQo+PiArUlRFX0RFQ0xB UkVfUEVSX0xDT1JFKHN0cnVjdCBydGVfcG11X2V2ZW50X2dyb3VwLCBfZXZlbnRfZ3JvdXApOw0K Pj4gKw0KPj4gKy8qKiBQTVUgc3RhdGUgY29udGFpbmVyICovDQo+PiArZXh0ZXJuIHN0cnVjdCBy dGVfcG11IHJ0ZV9wbXU7DQo+PiArDQo+PiArLyoqIEVhY2ggYXJjaGl0ZWN0dXJlIHN1cHBvcnRp bmcgUE1VIG5lZWRzIHRvIHByb3ZpZGUgaXRzIG93biB2ZXJzaW9uICovDQo+PiArI2lmbmRlZiBy dGVfcG11X3BtY19yZWFkDQo+PiArI2RlZmluZSBydGVfcG11X3BtY19yZWFkKGluZGV4KSAoeyAw OyB9KQ0KPj4gKyNlbmRpZg0KPj4gKw0KPj4gKy8qKg0KPj4gKyAqIEB3YXJuaW5nDQo+PiArICog QGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNl DQo+PiArICoNCj4+ICsgKiBSZWFkIFBNVSBjb3VudGVyLg0KPj4gKyAqDQo+PiArICogQHdhcm5p bmcgVGhpcyBzaG91bGQgYmUgbm90IGNhbGxlZCBkaXJlY3RseS4NCj4+ICsgKg0KPj4gKyAqIEBw YXJhbSBwYw0KPj4gKyAqICAgUG9pbnRlciB0byB0aGUgbW1hcHBlZCB1c2VyIHBhZ2UuDQo+PiAr ICogQHJldHVybg0KPj4gKyAqICAgQ291bnRlciB2YWx1ZSByZWFkIGZyb20gaGFyZHdhcmUuDQo+ PiArICovDQo+PiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdWludDY0X3QNCj4+ICtfX3J0 ZV9wbXVfcmVhZF91c2VycGFnZShzdHJ1Y3QgcGVyZl9ldmVudF9tbWFwX3BhZ2UgKnBjKQ0KPj4g K3sNCj4+ICsJdWludDY0X3Qgd2lkdGgsIG9mZnNldDsNCj4+ICsJdWludDMyX3Qgc2VxLCBpbmRl eDsNCj4+ICsJaW50NjRfdCBwbWM7DQo+PiArDQo+PiArCWZvciAoOzspIHsNCj4+ICsJCXNlcSA9 IHBjLT5sb2NrOw0KPj4gKwkJcnRlX2NvbXBpbGVyX2JhcnJpZXIoKTsNCj4+ICsJCWluZGV4ID0g cGMtPmluZGV4Ow0KPj4gKwkJb2Zmc2V0ID0gcGMtPm9mZnNldDsNCj4+ICsJCXdpZHRoID0gcGMt PnBtY193aWR0aDsNCj4+ICsNCj4+ICsJCS8qIGluZGV4IHNldCB0byAwIG1lYW5zIHRoYXQgcGFy dGljdWxhciBjb3VudGVyIGNhbm5vdCBiZSB1c2VkICovDQo+PiArCQlpZiAobGlrZWx5KHBjLT5j YXBfdXNlcl9yZHBtYyAmJiBpbmRleCkpIHsNCj4NCj5JbiBtbWFwX2V2ZW50cygpIHlvdSByZXR1 cm4gRVBFUk0gaWYgY2FwX3VzZXJfcmRwbWMgaXMgbm90IGVuYWJsZWQuDQo+RG8geW91IG5lZWQg YW5vdGhlciBjaGVjayBoZXJlPyBPciB0aGlzIGNhcGFiaWxpdHkgY2FuIGJlIGRpc2FibGVkIGJ5 DQo+a2VybmVsIGF0IHJ1bi10aW1lPw0KPg0KDQpUaGF0IGV4dHJhIGNoZWNrIGluIG1tYXBfZXZl bnQoKSBtYXkgYmUgcmVtb3ZlZCBhY3R1YWxseS4gU29tZSBhcmNocyBhbGxvdw0KZGlzYWJsaW5n IHJlYWRpbmcgcmRwbWMgKEkgdGhpbmsgdGhhdCBvbiB4ODYgb25lIGNhbiBkbyB0aGF0KSBzbyB0 aGlzIGNoZWNrIG5lZWRzIHRvIHN0YXkuIA0KDQo+DQo+PiArCQkJcG1jID0gcnRlX3BtdV9wbWNf cmVhZChpbmRleCAtIDEpOw0KPj4gKwkJCXBtYyA8PD0gNjQgLSB3aWR0aDsNCj4+ICsJCQlwbWMg Pj49IDY0IC0gd2lkdGg7DQo+PiArCQkJb2Zmc2V0ICs9IHBtYzsNCj4+ICsJCX0NCj4+ICsNCj4+ ICsJCXJ0ZV9jb21waWxlcl9iYXJyaWVyKCk7DQo+PiArDQo+PiArCQlpZiAobGlrZWx5KHBjLT5s b2NrID09IHNlcSkpDQo+PiArCQkJcmV0dXJuIG9mZnNldDsNCj4+ICsJfQ0KPj4gKw0KPj4gKwly ZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArLyoqDQo+PiArICogQHdhcm5pbmcNCj4+ICsgKiBA YiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UN Cj4+ICsgKg0KPj4gKyAqIEVuYWJsZSBncm91cCBvZiBldmVudHMgb24gdGhlIGNhbGxpbmcgbGNv cmUuDQo+PiArICoNCj4+ICsgKiBAd2FybmluZyBUaGlzIHNob3VsZCBiZSBub3QgY2FsbGVkIGRp cmVjdGx5Lg0KPg0KPl9fcnRlX2ludGVybmFsID8NCj4NCg0KTm8gdGhpcyBjYW5ub3QgYmUgaW50 ZXJuYWwgYmVjYXVzZSB0aGF0IHdpbGwgbWFrZSBmdW5jdGlvbnMgY2FsbGluZyBpdCANCmludGVy bmFsIGFzIHdlbGwgaGVuY2UgYXBwcyB3b24ndCBiZSBhYmxlIHRvIHVzZSB0aGF0LiBUaGlzIGhh cw0KYWxyZWFkeSBiZWVuIGJyb3VnaHQgdXAgYnkgb25lIG9mIHRoZSByZXZpZXdlcnMuIA0KDQo+ PiArICoNCj4+ICsgKiBAcmV0dXJuDQo+PiArICogICAwIGluIGNhc2Ugb2Ygc3VjY2VzcywgbmVn YXRpdmUgdmFsdWUgb3RoZXJ3aXNlLg0KPj4gKyAqLw0KPj4gK19fcnRlX2V4cGVyaW1lbnRhbA0K Pj4gK2ludA0KPj4gK19fcnRlX3BtdV9lbmFibGVfZ3JvdXAodm9pZCk7DQo+PiArDQo+PiArLyoq DQo+PiArICogQHdhcm5pbmcNCj4+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBj aGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UNCj4+ICsgKg0KPj4gKyAqIEluaXRpYWxpemUgUE1V IGxpYnJhcnkuDQo+PiArICoNCj4+ICsgKiBAd2FybmluZyBUaGlzIHNob3VsZCBiZSBub3QgY2Fs bGVkIGRpcmVjdGx5Lg0KPg0KPkhtbS4uIHRoZW4gd2hvIHNob3VsZCBjYWxsIGl0Pw0KPklmIGl0 IG5vdCBzdXBwb3NlZCB0byBiZSBjYWxsZWQgZGlyZWN0bHksIHdoeSB0byBkZWNsYXJlIGl0IGhl cmU/DQo+DQoNClRoaXMgaXMgaW5saW5lZCBhbmQgaGFzIG9uZSBjYWxsZXIgaS5lIHJ0ZV9wbXVf cmVhZCgpLiANCg0KPj4gKyAqDQo+PiArICogQHJldHVybg0KPj4gKyAqICAgMCBpbiBjYXNlIG9m IHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4NCj4+ICsgKi8NCj4NCj5Qcm9iYWJs eSB3b3J0aCB0byBtZW50aW9uIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBub3QgTVQgc2FmZS4NCj5T YW1lIGZvciBfZmluaV8gYW5kIGFkZF9ldmVudC4NCj5BbHNvIHdvcnRoIHRvIG1lbnRpb24gdGhh dCBhbGwgY29udHJvbC1wYXRoIGZ1bmN0aW9ucw0KPihpbml0L2ZpbmkvYWRkX2V2ZW50KSBhbmQg ZGF0YS1wYXRoIChwbXVfcmVhZCkgY2FuJ3QgYmUgY2FsbGVkIGNvbmN1cnJlbnRseS4NCj4NCg0K WWVzIHRoZXkgYXJlIG1lYW50IHRvIGJlIGNhbGxlZCBmcm9tIG1haW4gdGhyZWFkLiANCg0KPj4g K19fcnRlX2V4cGVyaW1lbnRhbA0KPj4gK2ludA0KPj4gK3J0ZV9wbXVfaW5pdCh2b2lkKTsNCj4+ ICsNCj4+ICsvKioNCj4+ICsgKiBAd2FybmluZw0KPj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhp cyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZQ0KPj4gKyAqDQo+PiArICogRmlu YWxpemUgUE1VIGxpYnJhcnkuIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBhZnRlciBQTVUgY291bnRl cnMgYXJlIG5vIGxvbmdlciBiZWluZyByZWFkLg0KPj4gKyAqLw0KPj4gK19fcnRlX2V4cGVyaW1l bnRhbA0KPj4gK3ZvaWQNCj4+ICtydGVfcG11X2Zpbmkodm9pZCk7DQo+PiArDQo+PiArLyoqDQo+ PiArICogQHdhcm5pbmcNCj4+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFu Z2Ugd2l0aG91dCBwcmlvciBub3RpY2UNCj4+ICsgKg0KPj4gKyAqIEFkZCBldmVudCB0byB0aGUg Z3JvdXAgb2YgZW5hYmxlZCBldmVudHMuDQo+PiArICoNCj4+ICsgKiBAcGFyYW0gbmFtZQ0KPj4g KyAqICAgTmFtZSBvZiBhbiBldmVudCBsaXN0ZWQgdW5kZXIgL3N5cy9idXMvZXZlbnRfc291cmNl L2RldmljZXMvcG11L2V2ZW50cy4NCj4+ICsgKiBAcmV0dXJuDQo+PiArICogICBFdmVudCBpbmRl eCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4NCj4+ICsgKi8N Cj4+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4+ICtpbnQNCj4+ICtydGVfcG11X2FkZF9ldmVudChj b25zdCBjaGFyICpuYW1lKTsNCj4+ICsNCj4+ICsvKioNCj4+ICsgKiBAd2FybmluZw0KPj4gKyAq IEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGlj ZQ0KPj4gKyAqDQo+PiArICogUmVhZCBoYXJkd2FyZSBjb3VudGVyIGNvbmZpZ3VyZWQgdG8gY291 bnQgb2NjdXJyZW5jZXMgb2YgYW4gZXZlbnQuDQo+PiArICoNCj4+ICsgKiBAcGFyYW0gaW5kZXgN Cj4+ICsgKiAgIEluZGV4IG9mIGFuIGV2ZW50IHRvIGJlIHJlYWQuDQo+PiArICogQHJldHVybg0K Pj4gKyAqICAgRXZlbnQgdmFsdWUgcmVhZCBmcm9tIHJlZ2lzdGVyLiBJbiBjYXNlIG9mIGVycm9y cyBvciBsYWNrIG9mIHN1cHBvcnQNCj4+ICsgKiAgIDAgaXMgcmV0dXJuZWQuIEluIG90aGVyIHdv cmRzLCBzdHJlYW0gb2YgemVyb3MgaW4gYSB0cmFjZSBmaWxlDQo+PiArICogICBpbmRpY2F0ZXMg cHJvYmxlbSB3aXRoIHJlYWRpbmcgcGFydGljdWxhciBQTVUgZXZlbnQgcmVnaXN0ZXIuDQo+PiAr ICovDQo+PiArX19ydGVfZXhwZXJpbWVudGFsDQo+PiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxp bmUgdWludDY0X3QNCj4+ICtydGVfcG11X3JlYWQodW5zaWduZWQgaW50IGluZGV4KQ0KPj4gK3sN Cj4+ICsJc3RydWN0IHJ0ZV9wbXVfZXZlbnRfZ3JvdXAgKmdyb3VwID0gJlJURV9QRVJfTENPUkUo X2V2ZW50X2dyb3VwKTsNCj4+ICsJaW50IHJldDsNCj4+ICsNCj4+ICsJaWYgKHVubGlrZWx5KCFy dGVfcG11LmluaXRpYWxpemVkKSkNCj4+ICsJCXJldHVybiAwOw0KPj4gKw0KPj4gKwlpZiAodW5s aWtlbHkoIWdyb3VwLT5lbmFibGVkKSkgew0KPj4gKwkJcmV0ID0gX19ydGVfcG11X2VuYWJsZV9n cm91cCgpOw0KPj4gKwkJaWYgKHJldCkNCj4+ICsJCQlyZXR1cm4gMDsNCj4+ICsJfQ0KPj4gKw0K Pj4gKwlpZiAodW5saWtlbHkoaW5kZXggPj0gcnRlX3BtdS5udW1fZ3JvdXBfZXZlbnRzKSkNCj4+ ICsJCXJldHVybiAwOw0KPj4gKw0KPj4gKwlyZXR1cm4gX19ydGVfcG11X3JlYWRfdXNlcnBhZ2Uo Z3JvdXAtPm1tYXBfcGFnZXNbaW5kZXhdKTsNCj4+ICt9DQo+PiArDQo+PiArI2lmZGVmIF9fY3Bs dXNwbHVzDQo+PiArfQ0KPj4gKyNlbmRpZg0KPj4gKw0KPj4gKyNlbmRpZiAvKiBfUlRFX1BNVV9I XyAqLw0KPj4gZGlmZiAtLWdpdCBhL2xpYi9wbXUvdmVyc2lvbi5tYXAgYi9saWIvcG11L3ZlcnNp b24ubWFwDQo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPj4gaW5kZXggMDAwMDAwMDAwMC4uMzlh NGYyNzljMQ0KPj4gLS0tIC9kZXYvbnVsbA0KPj4gKysrIGIvbGliL3BtdS92ZXJzaW9uLm1hcA0K Pj4gQEAgLTAsMCArMSwxNSBAQA0KPj4gK0RQREtfMjMgew0KPj4gKwlsb2NhbDogKjsNCj4+ICt9 Ow0KPj4gKw0KPj4gK0VYUEVSSU1FTlRBTCB7DQo+PiArCWdsb2JhbDoNCj4+ICsNCj4+ICsJX19y dGVfcG11X2VuYWJsZV9ncm91cDsNCj4+ICsJcGVyX2xjb3JlX19ldmVudF9ncm91cDsNCj4+ICsJ cnRlX3BtdTsNCj4+ICsJcnRlX3BtdV9hZGRfZXZlbnQ7DQo+PiArCXJ0ZV9wbXVfZmluaTsNCj4+ ICsJcnRlX3BtdV9pbml0Ow0KPj4gKwlydGVfcG11X3JlYWQ7DQo+PiArfTsNCg0K