From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id DBF98A04F1; Thu, 18 Jun 2020 12:03:09 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 4B9541BEB7; Thu, 18 Jun 2020 12:03:09 +0200 (CEST) Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-eopbgr00075.outbound.protection.outlook.com [40.107.0.75]) by dpdk.org (Postfix) with ESMTP id 232441B951 for ; Thu, 18 Jun 2020 12:03:08 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WNhg8EO/8uj/IOlOceFjbus2WJVFaQYDovGZtoYSXNKJdsB1anek0MnB09VrIJtCohSRqU5wmk0fiXFJO1NkfKAK9HMoagEe3uLWSDRQfyiRmtd0CPQjXs210I2tMKmjMfslonHUqTk287qVFfwf2kxp+abQ+ua2pXmypH00yQWkTyIcbq+M9xpkC7L8D2PnZKymUysOt/emXFbuGrTvBWrT0CeWmTSeMV8buPFoXu+ptHL/df/EKRTzJZx2JxSd9cpRUEiaZOs9Po3aKUb/hDO3iyNHlx5ulhjKs3rao5F7/BigUNkI8nsyAmo6jVHhtf0NWZ3uWXmScBteuKPp5Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=GNGRUDatsA7baeVpWhmJfFG3hRw2hlDIjKs72bdgkxE=; b=cOAP3J+k4uOP90ou7I5HLjZ07DCh7X22nKxNOvWPQuvLa7FaSwXd0+LrkONPVRvk0MJU0MbldTO9PDTdR+WwQ5P0sh8dvpSPdTAp1qNXNxAAh0eXEydTiRDvUVC61oI8iUCwW+1/u9dfJowdM6MjTMkfuusyJ7I4MtT/ljUn5xKzZBahdu8SxtGrIb0wit9rEhEU3AMde2B5l4tIsUSskK5Bf1Ztb7C6Sxd29/ZX0NvEWzh5uWrRyf/ILzwaXf0YGAPnq4XXkNVQnJxGsfwhg/OIXQoQE3X4LCJSg4lqskbZDR3aSWl2aYNidie7/xitLd/McTciX327b9PdrGv78g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mellanox.com; dmarc=pass action=none header.from=mellanox.com; dkim=pass header.d=mellanox.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=GNGRUDatsA7baeVpWhmJfFG3hRw2hlDIjKs72bdgkxE=; b=ltCm5eoEogggJNVXsNn5IskuZbstYWs0eDejgABtSaJYoiAft3IKnJf80/vrR+rbU3XtYkRYyV8VgGlDIj5RHzbQmqvidxEO6DtfxzQSZneuhWyzvHM714BKtsgBMgMqNG+4Gf/zi4N1zf5vyEnBsh5pTt4TMtGxjhUCWJkq8dA= Received: from AM0PR05MB4866.eurprd05.prod.outlook.com (2603:10a6:208:c0::32) by AM0PR05MB6385.eurprd05.prod.outlook.com (2603:10a6:208:13d::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3109.22; Thu, 18 Jun 2020 10:03:06 +0000 Received: from AM0PR05MB4866.eurprd05.prod.outlook.com ([fe80::d44d:a804:c730:d2b7]) by AM0PR05MB4866.eurprd05.prod.outlook.com ([fe80::d44d:a804:c730:d2b7%2]) with mapi id 15.20.3109.021; Thu, 18 Jun 2020 10:03:06 +0000 From: Parav Pandit To: =?utf-8?B?R2HDq3RhbiBSaXZldA==?= CC: "dev@dpdk.org" , "ferruh.yigit@intel.com" , Ori Kam , Matan Azrad Thread-Topic: [dpdk-dev] [RFC PATCH 5/6] bus/mlx5_pci: register a PCI driver Thread-Index: AQHWP0sgnAq5w4k+Xk2Dotj1MrQIfajaPkaAgAPtRtA= Date: Thu, 18 Jun 2020 10:03:06 +0000 Message-ID: References: <20200610171728.89-1-parav@mellanox.com> <20200610171728.89-6-parav@mellanox.com> <20200615214631.lmubncrd6xggq3hu@u256.net> In-Reply-To: <20200615214631.lmubncrd6xggq3hu@u256.net> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: u256.net; dkim=none (message not signed) header.d=none;u256.net; dmarc=none action=none header.from=mellanox.com; x-originating-ip: [106.51.29.68] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 578bc90d-3496-409f-07eb-08d8136ecc20 x-ms-traffictypediagnostic: AM0PR05MB6385: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8882; x-forefront-prvs: 0438F90F17 x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 2E+W4CLWLckqczVfeoocA6EuNtyS3GYq8Ub1gKxMZzrQLEh0TvbzjK410XPrlGKOIK5Ak3hfEw5RRy7tZ3+LQUOupb5dZ7gnbl7lr3g8MqP0O6tljY8x3BABv0kr1eYrj97JSI2DHDfHG/tfQFZsTYef5O6SqkStt65cySL+DqX2ak2wKB7ICeMrPE9wnfL0vDVmZbb4/4aUwn9Z3V1NMR/7xvjCpeRyJWEKORKujoIiBvVj3zGL5Y3LUNZzl7HbLJTZEld6ouC/oVIKzFov/QXbVUp2oOr9L+8R0SSQRMNGQDHh5wp94rOFmEeXsbReqM4MBEDZffwynO76wW0Fm9npRlm76GTwEP8CCnRxtd9N+NcOoZC5F3IvU6vmmaC6 x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM0PR05MB4866.eurprd05.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(39860400002)(396003)(346002)(136003)(366004)(376002)(186003)(83380400001)(86362001)(30864003)(107886003)(66574015)(8676002)(2906002)(8936002)(64756008)(66476007)(66946007)(26005)(6916009)(5660300002)(33656002)(7696005)(52536014)(9686003)(4326008)(54906003)(6506007)(71200400001)(55016002)(53546011)(478600001)(66446008)(66556008)(55236004)(316002)(76116006)(266184004); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata: sH6IZUyHrjgULrp5o13JZrhWuR9yP7urjBYgvT2JfBjhm+VheNDftSU6YK/ThqMX32Fpn1y2qAb/dp4sjhu2rGRk8P2qjTvm6TBHc4hB/LVnASAkPSYvezIPmVQNZwj2QXGYN/Nqxkjj1M09M0eItTETWmT6AGWaZ5HxmEXZKELOYWbxkEbhJ15KlOM96+itXS7SnQiPnPvQLCJbAt4n53MQNjgyXR7Wt8uOPU9E5eFcO91f6/YDrdpk9zi5MsN/G28mhXtg1mVhdDliRZQU4BSi4AEenem7AR/GtrE0+IC/WXKyzEovlDg9JIxa6rvWO4iKjDez8dDSH38mw5gsTMogYCF5jboEBqyioVGhlq/JZHaepoI4YWIuVHAiGbKrTj25RkoCgvSkDUUDMQW/dKk4J+JmkDrh2/JYlCF7lshJwBO9i1+bZ8tn2VIIUAvwDMikUilRKNbLkfpV/4ubaDiGV+htPf5JUauTQAIwluw= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 578bc90d-3496-409f-07eb-08d8136ecc20 X-MS-Exchange-CrossTenant-originalarrivaltime: 18 Jun 2020 10:03:06.3147 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 7+5rSIE8JoHn1jDCg6BD7y4KszvUmO63vjarwgUqx6yOGE0eQjQ7aF6xYiYbQdKMrun2l0hPvqEZqa4XVqHnjg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR05MB6385 Subject: Re: [dpdk-dev] [RFC PATCH 5/6] bus/mlx5_pci: register a PCI driver X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" DQo+IEZyb206IEdhw6t0YW4gUml2ZXQgPGdyaXZlQHUyNTYubmV0Pg0KPiBTZW50OiBUdWVzZGF5 LCBKdW5lIDE2LCAyMDIwIDM6MTcgQU0NCj4gDQo+IE9uIDEwLzA2LzIwIDE3OjE3ICswMDAwLCBQ YXJhdiBQYW5kaXQgd3JvdGU6DQo+ID4gQ3JlYXRlIGEgbWx4NSBidXMgZHJpdmVyIGZyYW1ld29y ayBmb3IgaW52b2tpbmcgZHJpdmVycyBvZiBtdWx0aXBsZQ0KPiA+IGNsYXNzZXMgd2hvIGhhdmUg cmVnaXN0ZXJlZCB3aXRoIHRoZSBtbHg1X3BjaSBidXMgZHJpdmVyLg0KPiA+DQo+ID4gVmFsaWRh dGUgdXNlciBjbGFzcyBhcmd1bWVudHMgZm9yIHN1cHBvcnRlZCBjbGFzcyBjb21iaW5hdGlvbnMu DQo+ID4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBQYXJhdiBQYW5kaXQgPHBhcmF2QG1lbGxhbm94LmNv bT4NCj4gPiAtLS0NCj4gPiAgZHJpdmVycy9idXMvbWx4NV9wY2kvTWFrZWZpbGUgICAgICAgICAg IHwgICAxICsNCj4gPiAgZHJpdmVycy9idXMvbWx4NV9wY2kvbWVzb24uYnVpbGQgICAgICAgIHwg ICAyICstDQo+ID4gIGRyaXZlcnMvYnVzL21seDVfcGNpL21seDVfcGNpX2J1cy5jICAgICB8IDI1 Mw0KPiArKysrKysrKysrKysrKysrKysrKysrKysNCj4gPiAgZHJpdmVycy9idXMvbWx4NV9wY2kv cnRlX2J1c19tbHg1X3BjaS5oIHwgICAxICsNCj4gPiAgNCBmaWxlcyBjaGFuZ2VkLCAyNTYgaW5z ZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQ0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv YnVzL21seDVfcGNpL01ha2VmaWxlDQo+ID4gYi9kcml2ZXJzL2J1cy9tbHg1X3BjaS9NYWtlZmls ZSBpbmRleCBiMzY5MTZlNTIuLjMyNzA3NmZlNCAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL2J1 cy9tbHg1X3BjaS9NYWtlZmlsZQ0KPiA+ICsrKyBiL2RyaXZlcnMvYnVzL21seDVfcGNpL01ha2Vm aWxlDQo+ID4gQEAgLTE1LDYgKzE1LDcgQEAgQ0ZMQUdTICs9IC1JJChCVUlMRERJUikvZHJpdmVy cy9jb21tb24vbWx4NQ0KPiBDRkxBR1MNCj4gPiArPSAtSSQoUlRFX1NESykvZHJpdmVycy9idXMv cGNpICBDRkxBR1MgKz0gLVduby1zdHJpY3QtcHJvdG90eXBlcw0KPiA+IExETElCUyArPSAtbHJ0 ZV9lYWwNCj4gPiArTERMSUJTICs9IC1scnRlX2t2YXJncw0KPiA+ICBMRExJQlMgKz0gLWxydGVf Y29tbW9uX21seDUNCj4gPiAgTERMSUJTICs9IC1scnRlX3BjaSAtbHJ0ZV9idXNfcGNpDQo+ID4N Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9idXMvbWx4NV9wY2kvbWVzb24uYnVpbGQNCj4gPiBi L2RyaXZlcnMvYnVzL21seDVfcGNpL21lc29uLmJ1aWxkDQo+ID4gaW5kZXggY2M0YTg0ZTIzLi41 MTExYmFhNGUgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9idXMvbWx4NV9wY2kvbWVzb24uYnVp bGQNCj4gPiArKysgYi9kcml2ZXJzL2J1cy9tbHg1X3BjaS9tZXNvbi5idWlsZA0KPiA+IEBAIC0x LDYgKzEsNiBAQA0KPiA+ICAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2Ug ICMgQ29weXJpZ2h0KGMpIDIwMjAgTWVsbGFub3gNCj4gPiBUZWNobm9sb2dpZXMgTHRkDQo+ID4N Cj4gPiAtZGVwcyArPSBbJ3BjaScsICdidXNfcGNpJywgJ2NvbW1vbl9tbHg1J10NCj4gPiArZGVw cyArPSBbJ3BjaScsICdidXNfcGNpJywgJ2NvbW1vbl9tbHg1JywgJ2t2YXJncyddDQo+ID4gIGlu c3RhbGxfaGVhZGVycygncnRlX2J1c19tbHg1X3BjaS5oJykNCj4gPiAgc291cmNlcyA9IGZpbGVz KCdtbHg1X3BjaV9idXMuYycpDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvYnVzL21seDVfcGNp L21seDVfcGNpX2J1cy5jDQo+ID4gYi9kcml2ZXJzL2J1cy9tbHg1X3BjaS9tbHg1X3BjaV9idXMu Yw0KPiA+IGluZGV4IDY2ZGIzYzdiMC4uODEwOGUzNWVhIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZl cnMvYnVzL21seDVfcGNpL21seDVfcGNpX2J1cy5jDQo+ID4gKysrIGIvZHJpdmVycy9idXMvbWx4 NV9wY2kvbWx4NV9wY2lfYnVzLmMNCj4gPiBAQCAtMywxMiArMywyNjUgQEANCj4gPiAgICovDQo+ ID4NCj4gPiAgI2luY2x1ZGUgInJ0ZV9idXNfbWx4NV9wY2kuaCINCj4gPiArI2luY2x1ZGUgPG1s eDVfY29tbW9uX3V0aWxzLmg+DQo+ID4NCj4gPiAgc3RhdGljIFRBSUxRX0hFQUQobWx4NV9wY2lf YnVzX2Rydl9oZWFkLCBydGVfbWx4NV9wY2lfZHJpdmVyKSBkcnZfbGlzdA0KPiA9DQo+ID4gIAkJ CQlUQUlMUV9IRUFEX0lOSVRJQUxJWkVSKGRydl9saXN0KTsNCj4gPg0KPiA+ICtzdHJ1Y3QgY2xh c3NfbWFwIHsNCj4gPiArCWNvbnN0IGNoYXIgKm5hbWU7DQo+ID4gKwllbnVtIG1seDVfY2xhc3Mg ZGV2X2NsYXNzOw0KPiA+ICt9Ow0KPiANCj4gRGVmaW5pbmcgYSB0eXBlIGhlcmUgZG9lcyBub3Qg c2VlbSB1c2VmdWwuDQo+IFlvdSBjb3VsZCByZXR1cm4gYW4gImVudW0gbWx4NV9jbGFzcyIgZnJv bSB0aGUgZnVuY3Rpb24gaXNfdmFsaWRfY2xhc3MoKQ0KPiBmdXJ0aGVyIGJlbG93LCBpbnN0ZWFk IG9mIGEgY2xhc3NfbWFwIGVudHJ5LiBZb3UgaGF2ZSB0aGUNCj4gTUxYNV9DTEFTU19JTlZBTElE IHNlbnRpbmVsIHZhbHVlIHRvIG1hcmsgdGhlIGluZXhpc3RhbnQgbWFwcGluZy4NCj4gDQo+IE1h a2luZyB0aGlzIHR5cGUgYW5vbnltb3VzLCB5b3Ugc2hvdWxkIG1lcmdlIGl0IHdpdGggdGhlIGFy cmF5IGJlbG93Og0KPiANCj4gc3RhdGljIGNvbnN0IHN0cnVjdCB7DQo+IAljb25zdCBjaGFyICpu YW1lOw0KPiAJZW51bSBtbHg1X2NsYXNzIGNsYXNzOyAvLyBSZW1lbWJlciB0byBjaGFuZ2UgdGhp cyBlbnVtIHRvIGENCj4gCQkJICAgICAgIC8vIGZpeGVkIHdpZHRoIHR5cGUgYnkgdGhlIHdheS4N ClllcywgSSBhY2tlZCB0byBjaGFuZ2VkIHRvIGRlZmluZSwgYnV0IEkgZm9yZ290IHRoYXQgSSB1 c2UgdGhlIGVudW0gaGVyZS4NClNvIEkgYW0gZ29pbmcgdG8ga2VlcCB0aGUgZW51bSBhcyBjb2Rl IHJlYWRzIG1vcmUgY2xlYXIgd2l0aCBlbnVtLg0KDQo+IH0gbWx4NV9jbGFzc2VzW10gPSB7DQo+ IAkuLi4NCj4gfTsNCj4gDQo+ID4gKw0KPiA+ICtjb25zdCBzdHJ1Y3QgY2xhc3NfbWFwIG1seDVf Y2xhc3Nlc1tdID0gew0KPiANCj4gVGhpcyBpcyBub3QgcmVhbGx5IGEgY2xhc3MgbGlzdCwgYnV0 IGFzIHRoZSB0eXBlIGRlc2NyaWJlcywgYSBtYXBwaW5nIGJldHdlZW4NCj4gbmFtZXMgYW5kIGJp bmFyeSBpZC4NCj4gDQo+IEkgdGhpbmsgbWx4NV9jbGFzc19uYW1lcyB3b3VsZCBmaXQgYmV0dGVy Lg0Kby5rLg0KPiANCj4gPiArCXsgLm5hbWUgPSAidmRwYSIsIC5kZXZfY2xhc3MgPSBNTFg1X0NM QVNTX1ZEUEEgfSwNCj4gPiArCXsgLm5hbWUgPSAibmV0IiwgLmRldl9jbGFzcyA9IE1MWDVfQ0xB U1NfTkVUIH0sIH07DQo+IA0KPiBHbG9iYWxzIHNob3VsZCBiZSBzdGF0aWMgZXZlbiBpZiBub3Qg ZXhwb3NlZCB0aHJvdWdoIGhlYWRlci4NClllcy4NCj4gDQo+ID4gKw0KPiA+ICtzdGF0aWMgY29u c3QgZW51bSBtbHg1X2NsYXNzIG1seDVfdmFsaWRfY2xhc3NfY29tYm9bXSA9IHsNCj4gPiArCU1M WDVfQ0xBU1NfTkVULA0KPiA+ICsJTUxYNV9DTEFTU19WRFBBLA0KPiANCj4gSG93IGRvIHlvdSBk ZXNjcmliZSBmdXR1cmUgY29tYm9zPw0KPiBTaG91bGQgd2UgZXhwZWN0IE1MWDVfQ0xBU1NfTkVU IHwgTUxYNV9DTEFTU19SRUdFWCBmb3IgZXhhbXBsZT8NCj4gDQpDb3JyZWN0Lg0KDQo+ID4gKwkv KiBOZXcgY2xhc3MgY29tYmluYXRpb24gc2hvdWxkIGJlIGFkZGVkIGhlcmUgKi8gfTsNCj4gPiAr DQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xhc3NfbWFwICppc192YWxpZF9jbGFzcyhjb25z dCBjaGFyICpjbGFzc19uYW1lKQ0KPiANCj4gSSBkb24ndCB0aGluayB0aGUgZnVuY3Rpb24gbmFt ZSBjb252ZXlzIGl0cyBhY3R1YWwgdXNlLg0KPiBtbHg1X2NsYXNzX2Zyb21fbmFtZSgpIGZvciBl eGFtcGxlIHdvdWxkIGFsaWduIHdpdGggb3RoZXIgRFBESyBBUElzLg0KTWFrZSBzZW5zZS4gV2ls bCBjaGFuZ2UuDQo+IA0KPiA+ICt7DQo+ID4gKwl1bnNpZ25lZCBpbnQgaTsNCj4gPiArDQo+ID4g Kwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKG1seDVfY2xhc3NlcykgLyBzaXplb2Yoc3RydWN0IGNs YXNzX21hcCk7DQo+IA0KPiBSVEVfRElNKG1seDVfY2xhc3NlcykgbXVzdCBiZSB1c2VkIGluc3Rl YWQuDQo+IA0KPiA+ICsJICAgICBpKyspIHsNCj4gPiArCQlpZiAoc3RyY21wKGNsYXNzX25hbWUs IG1seDVfY2xhc3Nlc1tpXS5uYW1lKSA9PSAwKQ0KPiA+ICsJCQlyZXR1cm4gJm1seDVfY2xhc3Nl c1tpXTsNCj4gPiArDQo+ID4gKwl9DQo+ID4gKwlyZXR1cm4gTlVMTDsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIGludCBpc192YWxpZF9jbGFzc19jb21ibyhjb25zdCBjaGFyICpjbGFzc19u YW1lcykgew0KPiA+ICsJZW51bSBtbHg1X2NsYXNzIHVzZXJfY2xhc3NlcyA9IDA7DQo+ID4gKwlj aGFyICpuc3RyID0gc3RyZHVwKGNsYXNzX25hbWVzKTsNCj4gDQo+IE5vdCBhIGZhbiBvZiBhc3Np Z25tZW50IHdpdGggbWFsbG9jIGRpcmVjdGx5IGF0IHZhciBkZWNsYXJhdGlvbiwgeW91IGFyZQ0K PiBtaXNzaW5nIHNvbWUgY2hlY2tzIGhlcmUuDQo+IA0KT2suIHdpbGwgZG8gYXNzaWdubWVudCBl eHBsaWNpdGx5IGFuZCBkbyB0aGUgY2hlY2suDQoNCj4gPiArCWNvbnN0IHN0cnVjdCBjbGFzc19t YXAgKmVudHJ5Ow0KPiA+ICsJY2hhciAqY29weSA9IG5zdHI7DQo+IA0KPiBjb3B5IGlzIG5vbmRl c2NyaXB0IGFuZCBkYW5nZXJvdXMuIEknZCB1c2UgbnN0cl9vcmlnIGluc3RlYWQuDQpPay4gd2ls bCBjaGFuZ2UgdmFyaWFsYmxlIG5hbWUgZnJvbSBjb3B5IHRvIG5zdHJfb3JpZy4NCg0KPiANCj4g PiArCWludCBpbnZhbGlkID0gMDsNCj4gPiArCXVuc2lnbmVkIGludCBpOw0KPiA+ICsJY2hhciAq Zm91bmQ7DQo+IA0KPiBSZWFkaW5nIHRoZSBjb2RlIGJlbG93LCBpdCBzZWVtcyB0aGF0IHRoZSBr dmxpc3Qgc2hvdWxkIG9ubHkgYmUgZGVmaW5lZCBpZiB0aGUNCj4gZGV2YXJncyBsZW5ndGggaXMg PiAwLCBzbyBjbGFzc19uYW1lcyBoZXJlIHNob3VsZCBiZSBkZWZpbmVkLg0KPiANCj4gSG93ZXZl ciB5b3UgZG8gbm90IGhhbmRsZSB0aGUgT09NIGNhc2UgZXhwbGljaXRseSBoZXJlLCBpZiBuc3Ry IGNhbm5vdCBiZQ0KPiBhbGxvY2F0ZWQgb24gc3RyZHVwKCkuDQo+IA0KV2lsbCByZXR1cm4gZXJy b3Igb24gT09NLg0KDQo+ID4gKw0KPiA+ICsJd2hpbGUgKG5zdHIpIHsNCj4gPiArCQkvKiBFeHRy YWN0IGVhY2ggaW5kaXZpZHVhbCBjbGFzcyBuYW1lICovDQo+ID4gKwkJZm91bmQgPSBzdHJzZXAo Jm5zdHIsICI6Iik7DQo+IA0KPiBJIGhhdmUgbm90IHNlZW4gdGhlIGZlYXR1cmUgdGVzdCBtYWNy b3MgKF9ERUZBVUxUX1NPVVJDRSkgaW4gdGhlDQo+IE1ha2VmaWxlLCBpdCBzZWVtcyByZXF1aXJl ZCBmb3Igc3Ryc2VwKCk/DQo+IA0KSWYgaXRzIG1hbmRhdG9yeSBtZXNvbiBidWlsZCBzaG91bGQg aGF2ZSBjb21wbGFpbmVkPw0KDQo+ID4gKwkJaWYgKCFmb3VuZCkNCj4gPiArCQkJY29udGludWU7 DQo+ID4gKw0KPiA+ICsJCS8qIENoZWNrIGlmIGl0cyBhIHZhbGlkIGNsYXNzICovDQo+ID4gKwkJ ZW50cnkgPSBpc192YWxpZF9jbGFzcyhmb3VuZCk7DQo+IA0KPiBBcyBzYWlkIGVhcmxpZXIsIHlv dSBoYXZlIG5vIHVzZSBmb3IgdGhlIGZ1bGwgbWFwIGVudHJ5LCB5b3UgY291bGQgcmV0dXJuIHRo ZQ0KPiBtbHg1X2NsYXNzIHR5cGUgaW5zdGVhZCwgYXMgeW91IGhhdmUgdGhlIE1MWDVfQ0xBU1Nf SU5WQUxJRCBzZW50aW5lbA0KPiBhdmFpbGFibGUgdG8gbWFyayB0aGUgIWZvdW5kIGNhc2UuDQo+ IA0KPiA+ICsJCWlmICghZW50cnkpIHsNCj4gPiArCQkJaW52YWxpZCA9IEVJTlZBTDsNCj4gDQo+ IEp1c3QgdG9nZ2xpbmcgaW52YWxpZCA9IDE7IGhlcmUgd291bGQgYmUgYmV0dGVyLg0KPiBSZXR1 cm4gRUlOVkFMIGV4cGxpY2l0bHkgaWYgKGludmFsaWQpLg0KPiANCj4gPiArCQkJYnJlYWs7DQo+ ID4gKwkJfQ0KPiA+ICsJCXVzZXJfY2xhc3NlcyB8PSBlbnRyeS0+ZGV2X2NsYXNzOw0KPiA+ICsJ fQ0KPiA+ICsJaWYgKGNvcHkpDQo+ID4gKwkJZnJlZShjb3B5KTsNCj4gPiArCWlmIChpbnZhbGlk KQ0KPiA+ICsJCXJldHVybiBpbnZhbGlkOw0KPiANCj4gWW91IGFyZSByZXR1cm5pbmcgRUlOVkFM IGhlcmUsIGJ1dCAtRUlOVkFMIGJlbG93Lg0KPiBJdCBzaG91bGQgYmUgYWxpZ25lZCwgaW4gRFBE SyB1c3VhbGx5IGVycm9yIHJldHVybiB2YWx1ZXMgYXJlIG5lZ2F0aXZlLg0KPiBwb3NpdGl2ZSBl cnJubyBzaG91bGQgb25seSBiZSB1c2VkIGZvciBydGVfZXJybm8uDQo+IA0KPiA+ICsNCj4gPiAr CS8qIFZlcmlmeSBpZiB1c2VyIHNwZWNpZmllZCB2YWxpZCBzdXBwb3J0ZWQgY29tYmluYXRpb24g Ki8NCj4gPiArCWZvciAoaSA9IDA7DQo+ID4gKwkgICAgIGkgPCBzaXplb2YobWx4NV92YWxpZF9j bGFzc19jb21ibykgLyBzaXplb2YoZW51bSBtbHg1X2NsYXNzKTsNCj4gDQo+IFJURV9ESU0oKSBo ZXJlOw0KPiANCkFjay4NCg0KPiA+ICsJICAgICBpKyspIHsNCj4gPiArCQlpZiAobWx4NV92YWxp ZF9jbGFzc19jb21ib1tpXSA9PSB1c2VyX2NsYXNzZXMpDQo+IA0KPiByZXR1cm4gMDsgZGlyZWN0 bHk/DQo+IA0KWWVzLg0KDQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJfQ0KPiA+ICsJLyogTm90IGZv dW5kIGFueSB2YWxpZCBjbGFzcyBjb21iaW5hdGlvbiAqLw0KPiA+ICsJaWYgKGkgPT0gc2l6ZW9m KG1seDVfdmFsaWRfY2xhc3NfY29tYm8pIC8gc2l6ZW9mKGVudW0gbWx4NV9jbGFzcykpDQo+IA0K PiBUaGlzIHdvdWxkIHNpbXBsaWZ5IHRoaXMgY2hlY2ssIHdoZXJlIHlvdSBjYW4gZGlyZWN0bHkg cmV0dXJuIC1FTk9ERVYgZm9yDQo+IGV4YW1wbGUgdG8gZGlmZmVyZW50aWF0ZSBmcm9tIGludmFs aWQgY2xhc3MgbmFtZSBhbmQgaW52YWxpZCBjb21iby4NCj4gDQo+ID4gKwkJcmV0dXJuIC1FSU5W QUw7DQo+ID4gKwllbHNlDQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyBpbnQNCj4gPiArbWx4NV9idXNfb3B0X2hhbmRsZXIoX19ydGVfdW51c2VkIGNvbnN0IGNo YXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUsDQo+ID4gKwkJICAgICAgIHZvaWQgKm9wYXF1ZSkN Cj4gPiArew0KPiA+ICsJaW50ICpyZXQgPSBvcGFxdWU7DQo+ID4gKw0KPiA+ICsJKnJldCA9IGlz X3ZhbGlkX2NsYXNzX2NvbWJvKHZhbHVlKTsNCj4gPiArCWlmICgqcmV0KQ0KPiA+ICsJCURSVl9M T0coRVJSLCAiSW52YWxpZCBtbHg1IGNsYXNzZXMgJXMuIE1heWJlIHR5cG8gaW4NCj4gZGV2aWNl Ig0KPiA+ICsJCQkiIGNsYXNzIGFyZ3VtZW50IHNldHRpbmc/IiwgdmFsdWUpOw0KPiANCj4gRXJy b3IgbWVzc2FnZSBzaG91bGQgbm90IGJlIGN1dCBpbiBoYWxmLCBpdCBtYWtlcyBpdCBkaWZmaWN1 bHQgdG8gZ3JlcC4NCj4gSWYgeW91IGRpZmZlcmVudGlhdGUgYmV0d2VlbiB0eXBvIGluIG5hbWUg YW5kIGludmFsaWQgY29tYm8geW91IGNvdWxkDQo+IGRpcmVjdGx5IHdhcm4gdGhlIHVzZXIgYWJv dXQgdGhlIHByb3BlciBlcnJvci4NCj4gDQpXaWxsIGhhdmUgaXQgaW4gb25lIGxpbmUuDQoNCj4g KFlvdSBjYW4gaWdub3JlIHRoZSB3YXJuaW5nIGZyb20gY2hlY2twYXRjaC5zaCBhYm91dCB0aGUg bG9uZyBsaW5lcyBvbiBhDQo+IHN0cmluZyBpZiB0aGVyZSBpcyBvbmUuKQ0KPiANCj4gPiArCXJl dHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50DQo+ID4gK21seDVfYnVzX29w dGlvbnNfdmFsaWQoY29uc3Qgc3RydWN0IHJ0ZV9kZXZhcmdzICpkZXZhcmdzKSB7DQo+ID4gKwlz dHJ1Y3QgcnRlX2t2YXJncyAqa3ZsaXN0Ow0KPiA+ICsJY29uc3QgY2hhciAqa2V5ID0gTUxYNV9D TEFTU19BUkdfTkFNRTsNCj4gPiArCWludCByZXQgPSAwOw0KPiA+ICsNCj4gPiArCWlmIChkZXZh cmdzID09IE5VTEwpDQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4gKwlrdmxpc3QgPSBydGVfa3Zhcmdz X3BhcnNlKGRldmFyZ3MtPmFyZ3MsIE5VTEwpOw0KPiA+ICsJaWYgKGt2bGlzdCA9PSBOVUxMKQ0K PiA+ICsJCXJldHVybiAwOw0KPiA+ICsJaWYgKHJ0ZV9rdmFyZ3NfY291bnQoa3ZsaXN0LCBrZXkp KQ0KPiA+ICsJCXJ0ZV9rdmFyZ3NfcHJvY2Vzcyhrdmxpc3QsIGtleSwgbWx4NV9idXNfb3B0X2hh bmRsZXIsDQo+ICZyZXQpOw0KPiA+ICsJcnRlX2t2YXJnc19mcmVlKGt2bGlzdCk7DQo+ID4gKwly ZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICB2b2lkDQo+ID4gIHJ0ZV9tbHg1X3BjaV9k cml2ZXJfcmVnaXN0ZXIoc3RydWN0IHJ0ZV9tbHg1X3BjaV9kcml2ZXIgKmRyaXZlcikgIHsNCj4g PiAgCVRBSUxRX0lOU0VSVF9UQUlMKCZkcnZfbGlzdCwgZHJpdmVyLCBuZXh0KTsgIH0NCj4gPiAr DQo+ID4gK3N0YXRpYyBib29sDQo+ID4gK21seDVfYnVzX21hdGNoKGNvbnN0IHN0cnVjdCBydGVf bWx4NV9wY2lfZHJpdmVyICpkcnYsDQo+ID4gKwkJIGNvbnN0IHN0cnVjdCBydGVfcGNpX2Rldmlj ZSAqcGNpX2Rldikgew0KPiA+ICsJY29uc3Qgc3RydWN0IHJ0ZV9wY2lfaWQgKmlkX3RhYmxlOw0K PiA+ICsNCj4gPiArCWZvciAoaWRfdGFibGUgPSBkcnYtPmlkX3RhYmxlOyBpZF90YWJsZS0+dmVu ZG9yX2lkICE9IDA7IGlkX3RhYmxlKyspIHsNCj4gPiArCQkvKiBjaGVjayBpZiBkZXZpY2UncyBp ZHMgbWF0Y2ggdGhlIGNsYXNzIGRyaXZlcidzIG9uZXMgKi8NCj4gPiArCQlpZiAoaWRfdGFibGUt PnZlbmRvcl9pZCAhPSBwY2lfZGV2LT5pZC52ZW5kb3JfaWQgJiYNCj4gPiArCQkJCWlkX3RhYmxl LT52ZW5kb3JfaWQgIT0gUENJX0FOWV9JRCkNCj4gPiArCQkJY29udGludWU7DQo+ID4gKwkJaWYg KGlkX3RhYmxlLT5kZXZpY2VfaWQgIT0gcGNpX2Rldi0+aWQuZGV2aWNlX2lkICYmDQo+ID4gKwkJ CQlpZF90YWJsZS0+ZGV2aWNlX2lkICE9IFBDSV9BTllfSUQpDQo+ID4gKwkJCWNvbnRpbnVlOw0K PiA+ICsJCWlmIChpZF90YWJsZS0+c3Vic3lzdGVtX3ZlbmRvcl9pZCAhPQ0KPiA+ICsJCSAgICBw Y2lfZGV2LT5pZC5zdWJzeXN0ZW1fdmVuZG9yX2lkICYmDQo+ID4gKwkJICAgIGlkX3RhYmxlLT5z dWJzeXN0ZW1fdmVuZG9yX2lkICE9IFBDSV9BTllfSUQpDQo+ID4gKwkJCWNvbnRpbnVlOw0KPiA+ ICsJCWlmIChpZF90YWJsZS0+c3Vic3lzdGVtX2RldmljZV9pZCAhPQ0KPiA+ICsJCSAgICBwY2lf ZGV2LT5pZC5zdWJzeXN0ZW1fZGV2aWNlX2lkICYmDQo+ID4gKwkJICAgIGlkX3RhYmxlLT5zdWJz eXN0ZW1fZGV2aWNlX2lkICE9IFBDSV9BTllfSUQpDQo+ID4gKwkJCWNvbnRpbnVlOw0KPiA+ICsJ CWlmIChpZF90YWJsZS0+Y2xhc3NfaWQgIT0gcGNpX2Rldi0+aWQuY2xhc3NfaWQgJiYNCj4gPiAr CQkJCWlkX3RhYmxlLT5jbGFzc19pZCAhPSBSVEVfQ0xBU1NfQU5ZX0lEKQ0KPiA+ICsJCQljb250 aW51ZTsNCj4gPiArDQo+ID4gKwkJcmV0dXJuIHRydWU7DQo+ID4gKwl9DQo+ID4gKwlyZXR1cm4g ZmFsc2U7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBEUERLIGNhbGxiYWNrIHRv IHJlZ2lzdGVyIHRvIHByb2JlIG11bHRpcGxlIFBDSSBjbGFzcyBkZXZpY2VzLg0KPiA+ICsgKg0K PiA+ICsgKiBAcGFyYW1baW5dIHBjaV9kcnYNCj4gPiArICogICBQQ0kgZHJpdmVyIHN0cnVjdHVy ZS4NCj4gPiArICogQHBhcmFtW2luXSBkZXYNCj4gPiArICogICBQQ0kgZGV2aWNlIGluZm9ybWF0 aW9uLg0KPiA+ICsgKg0KPiA+ICsgKiBAcmV0dXJuDQo+ID4gKyAqICAgMCBvbiBzdWNjZXNzLCAx IHRvIHNraXAgdGhpcyBkcml2ZXIsIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUgb3RoZXJ3aXNlDQo+ ID4gKyAqICAgYW5kIHJ0ZV9lcnJubyBpcyBzZXQuDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50 DQo+ID4gK21seDVfYnVzX3BjaV9wcm9iZShzdHJ1Y3QgcnRlX3BjaV9kcml2ZXIgKmRydiBfX3J0 ZV91bnVzZWQsDQo+ID4gKwkJICAgICBzdHJ1Y3QgcnRlX3BjaV9kZXZpY2UgKmRldikNCj4gPiAr ew0KPiA+ICsJc3RydWN0IHJ0ZV9tbHg1X3BjaV9kcml2ZXIgKmNsYXNzOw0KPiA+ICsJaW50IHJl dCA9IDA7DQo+ID4gKw0KPiA+ICsJcmV0ID0gbWx4NV9idXNfb3B0aW9uc192YWxpZChkZXYtPmRl dmljZS5kZXZhcmdzKTsNCj4gPiArCWlmIChyZXQpDQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiAr DQo+ID4gKwlUQUlMUV9GT1JFQUNIKGNsYXNzLCAmZHJ2X2xpc3QsIG5leHQpIHsNCj4gPiArCQlp ZiAoIW1seDVfYnVzX21hdGNoKGNsYXNzLCBkZXYpKQ0KPiA+ICsJCQljb250aW51ZTsNCj4gPiAr DQo+ID4gKwkJaWYgKCFtbHg1X2NsYXNzX2VuYWJsZWQoZGV2LT5kZXZpY2UuZGV2YXJncywgY2xh c3MtDQo+ID5kZXZfY2xhc3MpKQ0KPiA+ICsJCQljb250aW51ZTsNCj4gPiArDQo+ID4gKwkJcmV0 ID0gY2xhc3MtPnByb2JlKGRydiwgZGV2KTsNCj4gPiArCQlpZiAoIXJldCkNCj4gPiArCQkJY2xh c3MtPmxvYWRlZCA9IHRydWU7DQo+ID4gKwl9DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArLyoqDQo+ID4gKyAqIERQREsgY2FsbGJhY2sgdG8gcmVtb3ZlIG9uZSBvciBtb3Jl IGNsYXNzIGRldmljZXMgZm9yIGEgUENJIGRldmljZS4NCj4gPiArICoNCj4gPiArICogVGhpcyBm dW5jdGlvbiByZW1vdmVzIGFsbCBjbGFzcyBkZXZpY2VzIGJlbG9uZyB0byBhIGdpdmVuIFBDSSBk ZXZpY2UuDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbVtpbl0gcGNpX2Rldg0KPiA+ICsgKiAgIFBv aW50ZXIgdG8gdGhlIFBDSSBkZXZpY2UuDQo+ID4gKyAqDQo+ID4gKyAqIEByZXR1cm4NCj4gPiAr ICogICAwIG9uIHN1Y2Nlc3MsIHRoZSBmdW5jdGlvbiBjYW5ub3QgZmFpbC4NCj4gPiArICovDQo+ ID4gK3N0YXRpYyBpbnQNCj4gPiArbWx4NV9idXNfcGNpX3JlbW92ZShzdHJ1Y3QgcnRlX3BjaV9k ZXZpY2UgKmRldikgew0KPiA+ICsJc3RydWN0IHJ0ZV9tbHg1X3BjaV9kcml2ZXIgKmNsYXNzOw0K PiA+ICsNCj4gPiArCS8qIFJlbW92ZSBlYWNoIGNsYXNzIGRyaXZlciBpbiByZXZlcnNlIG9yZGVy ICovDQo+IA0KPiBXaHkgdXNlIGEgcmV2ZXNlIG9yZGVyIHNwZWNpZmljYWxseT8NCj4gDQo+ID4g KwlUQUlMUV9GT1JFQUNIX1JFVkVSU0UoY2xhc3MsICZkcnZfbGlzdCwgbWx4NV9wY2lfYnVzX2Ry dl9oZWFkLA0KPiBuZXh0KSB7DQo+ID4gKwkJaWYgKCFtbHg1X2NsYXNzX2VuYWJsZWQoZGV2LT5k ZXZpY2UuZGV2YXJncywgY2xhc3MtDQo+ID5kZXZfY2xhc3MpKQ0KPiANCj4gWW91IGFyZSBwYXJz aW5nIHRoZSBkZXZhcmdzIGVhY2ggdGltZSB0byBjaGVjayBhIHNpbmdsZSBjbGFzcy4NCj4gSWYg eW91IHJldHVybiB0aGUgcHJvcGVyIGJpdG1hcCBpbnN0ZWFkLCBkbyBub3QgcGFyc2UgdGhlIGRl dmFyZ3Mgd2l0aGluIHRoaXMNCj4gbG9vcCwgZG8gaXQgYmVmb3JlaGFuZCBhbmQgY2hlY2sgb25s eSB0aGF0IChkZXZhcmdzX2NsYXNzX2JpdHMgJiBjbGFzcy0NCj4gPmRldl9jbGFzcykuDQo+IA0K PiBTYW1lIHRoaW5nIGluIHRoZSBwcm9iZSgpLg0KPiANCj4gPiArCQkJY29udGludWU7DQo+ID4g Kw0KPiA+ICsJCWlmIChjbGFzcy0+bG9hZGVkKQ0KPiA+ICsJCQljbGFzcy0+cmVtb3ZlKGRldik7 DQo+ID4gKwl9DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlu dA0KPiA+ICttbHg1X2J1c19wY2lfZG1hX21hcChzdHJ1Y3QgcnRlX3BjaV9kZXZpY2UgKmRldiwg dm9pZCAqYWRkciwNCj4gPiArCQkgICAgIHVpbnQ2NF90IGlvdmEsIHNpemVfdCBsZW4pDQo+ID4g K3sNCj4gPiArCXN0cnVjdCBydGVfbWx4NV9wY2lfZHJpdmVyICpjbGFzczsNCj4gPiArCWludCBy ZXQgPSAtRUlOVkFMOw0KPiA+ICsNCj4gPiArCVRBSUxRX0ZPUkVBQ0goY2xhc3MsICZkcnZfbGlz dCwgbmV4dCkgew0KPiA+ICsJCWlmICghY2xhc3MtPmRtYV9tYXApDQo+ID4gKwkJCWNvbnRpbnVl Ow0KPiA+ICsNCj4gPiArCQlyZXR1cm4gY2xhc3MtPmRtYV9tYXAoZGV2LCBhZGRyLCBpb3ZhLCBs ZW4pOw0KPiANCj4gSXMgdGhlcmUgYSBzcGVjaWZpYyBjbGFzcyB0aGF0IGNvdWxkIGhhdmUgcHJp b3JpdHkgZm9yIHRoZSBETUE/DQo+IA0KTm8uDQoNCj4gPiArCX0NCj4gPiArCXJldHVybiByZXQ7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQNCj4gPiArbWx4NV9idXNfcGNpX2RtYV91 bm1hcChzdHJ1Y3QgcnRlX3BjaV9kZXZpY2UgKmRldiwgdm9pZCAqYWRkciwNCj4gPiArCQkgICAg ICAgdWludDY0X3QgaW92YSwgc2l6ZV90IGxlbikNCj4gPiArew0KPiA+ICsJc3RydWN0IHJ0ZV9t bHg1X3BjaV9kcml2ZXIgKmNsYXNzOw0KPiA+ICsJaW50IHJldCA9IC1FSU5WQUw7DQo+ID4gKw0K PiA+ICsJVEFJTFFfRk9SRUFDSF9SRVZFUlNFKGNsYXNzLCAmZHJ2X2xpc3QsIG1seDVfcGNpX2J1 c19kcnZfaGVhZCwNCj4gbmV4dCkgew0KPiA+ICsJCWlmICghY2xhc3MtPmRtYV91bm1hcCkNCj4g PiArCQkJY29udGludWU7DQo+ID4gKw0KPiA+ICsJCXJldHVybiBjbGFzcy0+ZG1hX3VubWFwKGRl diwgYWRkciwgaW92YSwgbGVuKTsNCj4gDQo+IElmIHlvdSBoYXZlIHR3byBjbGFzc2VzIEEgLT4g QiBoYXZpbmcgZG1hX21hcCgpICsgZG1hX3VubWFwKCksIHlvdSB3aWxsDQo+IGRtYV9tYXAoKSB3 aXRoIEEgdGhlbiBkbWFfdW5tYXAoKSB3aXRoIEIsIGR1ZSB0byB0aGUgX1JFVkVSU0UoKQ0KPiBp dGVyYXRpb24/DQo+IA0KVGhlcmUgaXNuJ3QgcGxhbiBmb3IgdHdvIGRyaXZlcnMgdG8gZG8gc28u DQpJZiB0d28gY2xhc3NlcyBkbyB0aGF0IGl0cyBzb3VyY2Ugb2YgYW4gZXJyb3IuDQpXaWxsIGVu aGFuY2UgdGhlIGJ1cyB3aGVuIHRoYXQgbmVlZCBhcmlzZS4NCg0KPiBXaHkgdXNlIHJldmVyc2Vk IGl0ZXJhdGlvbiBhdCBhbGwgYnkgdGhlIHdheSBmb3IgZGluaXQ/IElmIHlvdXIgb3BzIGlzIHNv dW5kDQo+IGFueSBvcmRlciBzaG91bGQgYmUgb2suDQo+IA0KQmVjYXVzZSBkZWluaXQgbXVzdCBi ZSBhbHdheXMgcmV2ZXJzZSBvZiBpbml0KCkgY29kZSByZWdhcmRsZXNzLg0KDQo+ID4gKwl9DQo+ ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo=