From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-eopbgr70052.outbound.protection.outlook.com [40.107.7.52]) by dpdk.org (Postfix) with ESMTP id DDE0A5F36 for ; Thu, 7 Mar 2019 23:14:23 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector1-arm-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QlWsLEeb9MyO+KRTlXAuxUkqQO9EvqLwZUF6JcuHQu4=; b=is7DVrfPSi/rL/vYVg81v4mIssQeukFkeZxWNLeUVrsBrMKPOK4hTchq4l0YUgLdBBNadxG9DMzVUxigCDL+ZhUI/FCW/jYFgGGfD6DYQNLWrnMxLoiEoVMpFa6eJ0FTNq6JdCYCHNzzNOABZ+nlkZbBMmzxsC+2Cd8T0Mq0hUs= Received: from VI1PR08MB3390.eurprd08.prod.outlook.com (20.177.58.220) by VI1PR08MB4143.eurprd08.prod.outlook.com (20.178.204.77) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1686.16; Thu, 7 Mar 2019 22:14:21 +0000 Received: from VI1PR08MB3390.eurprd08.prod.outlook.com ([fe80::e5e8:665f:c21e:2fa3]) by VI1PR08MB3390.eurprd08.prod.outlook.com ([fe80::e5e8:665f:c21e:2fa3%2]) with mapi id 15.20.1686.016; Thu, 7 Mar 2019 22:14:21 +0000 From: Dharmik Thakkar To: "Wang, Yipeng1" CC: "Gobriel, Sameh" , "Richardson, Bruce" , "De Lara Guarch, Pablo" , "Mcnamara, John" , "Kovacevic, Marko" , "dev@dpdk.org" , "Tai, Charlie" , Honnappa Nagarahalli , nd Thread-Topic: [RFC 1/2] hash: add lock free support for extendable bucket Thread-Index: AQHU0I5AM81Un2IGzU6mnfOek3E+qqYAeyMAgABJ+QA= Date: Thu, 7 Mar 2019 22:14:21 +0000 Message-ID: References: <20190302002334.7911-1-dharmik.thakkar@arm.com> <20190302002334.7911-2-dharmik.thakkar@arm.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Dharmik.Thakkar@arm.com; x-originating-ip: [217.140.111.135] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 3d3fa4ee-6ea9-4e7d-0785-08d6a34a400f x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(4618075)(2017052603328)(7153060)(7193020); SRVR:VI1PR08MB4143; x-ms-traffictypediagnostic: VI1PR08MB4143: nodisclaimer: True x-microsoft-exchange-diagnostics: 1; VI1PR08MB4143; 20:AjM/8vf5gYg+ON/IdtHUXCWIvTB6EykSgm/M4vlwkaCvQDeCDSRSi1vkUCpq8ujZHi8/rgXzwS/RbnjnJ2JQv1bR40hX6IAzlSOuL0nKbRQ6ZBU4VLHOwZw5I3UIjvFwmRXsrBy5hlue3x//wSdivmZyOFRkL3lMBcCiL5XaP3g= x-microsoft-antispam-prvs: x-forefront-prvs: 096943F07A x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(396003)(346002)(376002)(366004)(39860400002)(136003)(13464003)(199004)(189003)(25786009)(6512007)(81166006)(106356001)(8676002)(53546011)(53936002)(14454004)(305945005)(2906002)(83716004)(7736002)(33656002)(316002)(68736007)(6246003)(6116002)(26005)(102836004)(66066001)(3846002)(81156014)(30864003)(105586002)(99286004)(76176011)(6506007)(4326008)(54906003)(6436002)(186003)(486006)(8936002)(2616005)(72206003)(11346002)(446003)(6916009)(36756003)(14444005)(71190400001)(256004)(86362001)(71200400001)(5660300002)(476003)(82746002)(478600001)(97736004)(229853002)(6486002)(21314003); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR08MB4143; H:VI1PR08MB3390.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: vymHMiHe4yfPZlub1fRKTOpBJ65TKnta9eIzYGTsdnbnUUY6/s6va5tZwOQiewtF9Jrw5gjvbFC3cmwUFDCNliS90hk3GBhoOBuPut3EsBUBxVA6unrXKFQwQcfW2ZLsLpabgSIwVE0tA+tGCPlbNaTGCZY9CNkuggC7S5kSGFDkPONH8K+k3udw5QiU4f7Soo17ODRqT+tDofCVBsNaKoJ9xXj4dK7jhbgeRmfSQtj2FnQoreTpaclXHJIM5L6cPUfuq43mAmc0Me5z5GwralLyVkIRv246Tnid5pmci6NlDwSLoIAziolNvMtVY8HMSNGHjKZIhaFGtXLyCEcSW+3JvBTlu1BeTr20rKsWADuxn5iGZiHp/byNNrpKUEtmbq5vBzABhRfDE6bK7WADVSGjVwZlOkrFOdmmvEYyF78= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3d3fa4ee-6ea9-4e7d-0785-08d6a34a400f X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Mar 2019 22:14:21.5687 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB4143 Subject: Re: [dpdk-dev] [RFC 1/2] hash: add lock free support for extendable bucket 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: , X-List-Received-Date: Thu, 07 Mar 2019 22:14:24 -0000 KyBIb25uYXBwYQ0KDQpIaSBZaXBlbmcsDQoNClRoYW5rIHlvdSBmb3IgdGhlIHJldmlldyBjb21t ZW50cyENCg0KDQo+IE9uIE1hciA3LCAyMDE5LCBhdCAxMTo0OSBBTSwgV2FuZywgWWlwZW5nMSA8 eWlwZW5nMS53YW5nQGludGVsLmNvbT4gd3JvdGU6DQo+IA0KPiBUaGFua3MgZm9yIHRoaXMgcGF0 Y2ghIFNvbWUgaW5pdGlhbCBjb21tZW50cyBpbmxpbmVkOg0KPiANCj4+IC0tLS0tT3JpZ2luYWwg TWVzc2FnZS0tLS0tDQo+PiBGcm9tOiBEaGFybWlrIFRoYWtrYXIgW21haWx0bzpkaGFybWlrLnRo YWtrYXJAYXJtLmNvbV0NCj4+IFNlbnQ6IEZyaWRheSwgTWFyY2ggMSwgMjAxOSA0OjI0IFBNDQo+ PiBUbzogV2FuZywgWWlwZW5nMSA8eWlwZW5nMS53YW5nQGludGVsLmNvbT47IEdvYnJpZWwsIFNh bWVoIDxzYW1laC5nb2JyaWVsQGludGVsLmNvbT47IFJpY2hhcmRzb24sIEJydWNlDQo+PiA8YnJ1 Y2UucmljaGFyZHNvbkBpbnRlbC5jb20+OyBEZSBMYXJhIEd1YXJjaCwgUGFibG8gPHBhYmxvLmRl LmxhcmEuZ3VhcmNoQGludGVsLmNvbT47IE1jbmFtYXJhLCBKb2huDQo+PiA8am9obi5tY25hbWFy YUBpbnRlbC5jb20+OyBLb3ZhY2V2aWMsIE1hcmtvIDxtYXJrby5rb3ZhY2V2aWNAaW50ZWwuY29t Pg0KPj4gQ2M6IGRldkBkcGRrLm9yZzsgRGhhcm1payBUaGFra2FyIDxkaGFybWlrLnRoYWtrYXJA YXJtLmNvbT4NCj4+IFN1YmplY3Q6IFtSRkMgMS8yXSBoYXNoOiBhZGQgbG9jayBmcmVlIHN1cHBv cnQgZm9yIGV4dGVuZGFibGUgYnVja2V0DQo+PiANCj4+IFRoaXMgcGF0Y2ggZW5hYmxlcyBsb2Nr LWZyZWUgcmVhZC13cml0ZSBjb25jdXJyZW5jeSBzdXBwb3J0IGZvcg0KPj4gZXh0ZW5kYWJsZSBi dWNrZXQgZmVhdHVyZS4NCj4+IA0KPj4gU3VnZ2VzdGVkLWJ5OiBIb25uYXBwYSBOYWdhcmFoYWxs aSA8aG9ubmFwcGEubmFnYXJhaGFsbGlAYXJtLmNvbT4NCj4+IFNpZ25lZC1vZmYtYnk6IERoYXJt aWsgVGhha2thciA8ZGhhcm1pay50aGFra2FyQGFybS5jb20+DQo+PiAtLS0NCj4+IGRvYy9ndWlk ZXMvcHJvZ19ndWlkZS9oYXNoX2xpYi5yc3QgfCAgIDMgKy0NCj4+IGxpYi9saWJydGVfaGFzaC9y dGVfY3Vja29vX2hhc2guYyAgfCAxNTAgKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0NCj4+ IGxpYi9saWJydGVfaGFzaC9ydGVfY3Vja29vX2hhc2guaCAgfCAgIDggKysNCj4+IDMgZmlsZXMg Y2hhbmdlZCwgMTEwIGluc2VydGlvbnMoKyksIDUxIGRlbGV0aW9ucygtKQ0KPj4gDQo+PiBkaWZm IC0tZ2l0IGEvZG9jL2d1aWRlcy9wcm9nX2d1aWRlL2hhc2hfbGliLnJzdCBiL2RvYy9ndWlkZXMv cHJvZ19ndWlkZS9oYXNoX2xpYi5yc3QNCj4+IGluZGV4IDg1YTZlZGZhOGIxNi4uYjAwNDQ2ZTk0 OWJhIDEwMDY0NA0KPj4gLS0tIGEvZG9jL2d1aWRlcy9wcm9nX2d1aWRlL2hhc2hfbGliLnJzdA0K Pj4gKysrIGIvZG9jL2d1aWRlcy9wcm9nX2d1aWRlL2hhc2hfbGliLnJzdA0KPj4gQEAgLTEwOCw4 ICsxMDgsNyBAQCBFeHRlbmRhYmxlIEJ1Y2tldCBGdW5jdGlvbmFsaXR5IHN1cHBvcnQNCj4+IEFu IGV4dHJhIGZsYWcgaXMgdXNlZCB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5IChmbGFnIGlz IG5vdCBzZXQgYnkgZGVmYXVsdCkuIFdoZW4gdGhlIChSVEVfSEFTSF9FWFRSQV9GTEFHU19FWFRf VEFCTEUpIGlzIHNldA0KPj4gYW5kDQo+PiBpbiB0aGUgdmVyeSB1bmxpa2VseSBjYXNlIGR1ZSB0 byBleGNlc3NpdmUgaGFzaCBjb2xsaXNpb25zIHRoYXQgYSBrZXkgaGFzIGZhaWxlZCB0byBiZSBp bnNlcnRlZCwgdGhlIGhhc2ggdGFibGUgYnVja2V0IGlzIGV4dGVuZGVkIHdpdGggYQ0KPj4gbGlu a2VkDQo+PiBsaXN0IHRvIGluc2VydCB0aGVzZSBmYWlsZWQga2V5cy4gVGhpcyBmZWF0dXJlIGlz IGltcG9ydGFudCBmb3IgdGhlIHdvcmtsb2FkcyAoZS5nLiB0ZWxjbyB3b3JrbG9hZHMpIHRoYXQg bmVlZCB0byBpbnNlcnQgdXAgdG8gMTAwJSBvZiB0aGUNCj4+IC1oYXNoIHRhYmxlIHNpemUgYW5k IGNhbid0IHRvbGVyYXRlIGFueSBrZXkgaW5zZXJ0aW9uIGZhaWx1cmUgKGV2ZW4gaWYgdmVyeSBm ZXcpLiBDdXJyZW50bHkgdGhlIGV4dGVuZGFibGUgYnVja2V0IGlzIG5vdCBzdXBwb3J0ZWQNCj4+ IC13aXRoIHRoZSBsb2NrLWZyZWUgY29uY3VycmVuY3kgaW1wbGVtZW50YXRpb24gKFJURV9IQVNI X0VYVFJBX0ZMQUdTX1JXX0NPTkNVUlJFTkNZX0xGKS4NCj4+ICtoYXNoIHRhYmxlIHNpemUgYW5k IGNhbid0IHRvbGVyYXRlIGFueSBrZXkgaW5zZXJ0aW9uIGZhaWx1cmUgKGV2ZW4gaWYgdmVyeSBm ZXcpLg0KPj4gDQo+PiANCj4+IEltcGxlbWVudGF0aW9uIERldGFpbHMgKG5vbiBFeHRlbmRhYmxl IEJ1Y2tldCBDYXNlKQ0KPj4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfaGFzaC9ydGVfY3Vja29v X2hhc2guYyBiL2xpYi9saWJydGVfaGFzaC9ydGVfY3Vja29vX2hhc2guYw0KPj4gaW5kZXggYzAx NDg5YmE1MTkzLi41NDc2MjUzM2NlMzYgMTAwNjQ0DQo+PiAtLS0gYS9saWIvbGlicnRlX2hhc2gv cnRlX2N1Y2tvb19oYXNoLmMNCj4+ICsrKyBiL2xpYi9saWJydGVfaGFzaC9ydGVfY3Vja29vX2hh c2guYw0KPj4gQEAgLTE3MCwxNSArMTcwLDYgQEAgcnRlX2hhc2hfY3JlYXRlKGNvbnN0IHN0cnVj dCBydGVfaGFzaF9wYXJhbWV0ZXJzICpwYXJhbXMpDQo+PiAJCXJldHVybiBOVUxMOw0KPj4gCX0N Cj4+IA0KPj4gLQlpZiAoKHBhcmFtcy0+ZXh0cmFfZmxhZyAmIFJURV9IQVNIX0VYVFJBX0ZMQUdT X1JXX0NPTkNVUlJFTkNZX0xGKSAmJg0KPj4gLQkgICAgKHBhcmFtcy0+ZXh0cmFfZmxhZyAmIFJU RV9IQVNIX0VYVFJBX0ZMQUdTX0VYVF9UQUJMRSkpIHsNCj4+IC0JCXJ0ZV9lcnJubyA9IEVJTlZB TDsNCj4+IC0JCVJURV9MT0coRVJSLCBIQVNILCAicnRlX2hhc2hfY3JlYXRlOiBleHRlbmRhYmxl IGJ1Y2tldCAiDQo+PiAtCQkJImZlYXR1cmUgbm90IHN1cHBvcnRlZCB3aXRoIHJ3IGNvbmN1cnJl bmN5ICINCj4+IC0JCQkibG9jayBmcmVlXG4iKTsNCj4+IC0JCXJldHVybiBOVUxMOw0KPj4gLQl9 DQo+PiAtDQo+PiAJLyogQ2hlY2sgZXh0cmEgZmxhZ3MgZmllbGQgdG8gY2hlY2sgZXh0cmEgb3B0 aW9ucy4gKi8NCj4+IAlpZiAocGFyYW1zLT5leHRyYV9mbGFnICYgUlRFX0hBU0hfRVhUUkFfRkxB R1NfVFJBTlNfTUVNX1NVUFBPUlQpDQo+PiAJCWh3X3RyYW5zX21lbV9zdXBwb3J0ID0gMTsNCj4+ IEBAIC0xMDU0LDcgKzEwNDUsMTUgQEAgX19ydGVfaGFzaF9hZGRfa2V5X3dpdGhfaGFzaChjb25z dCBzdHJ1Y3QgcnRlX2hhc2ggKmgsIGNvbnN0IHZvaWQgKmtleSwNCj4+IAkJCS8qIENoZWNrIGlm IHNsb3QgaXMgYXZhaWxhYmxlICovDQo+PiAJCQlpZiAobGlrZWx5KGN1cl9ia3QtPmtleV9pZHhb aV0gPT0gRU1QVFlfU0xPVCkpIHsNCj4+IAkJCQljdXJfYmt0LT5zaWdfY3VycmVudFtpXSA9IHNo b3J0X3NpZzsNCj4+IC0JCQkJY3VyX2JrdC0+a2V5X2lkeFtpXSA9IG5ld19pZHg7DQo+PiArCQkJ CS8qIEtleSBjYW4gYmUgb2YgYXJiaXRyYXJ5IGxlbmd0aCwgc28gaXQgaXMNCj4+ICsJCQkJICog bm90IHBvc3NpYmxlIHRvIHN0b3JlIGl0IGF0b21pY2FsbHkuDQo+PiArCQkJCSAqIEhlbmNlIHRo ZSBuZXcga2V5IGVsZW1lbnQncyBtZW1vcnkgc3RvcmVzDQo+PiArCQkJCSAqIChrZXkgYXMgd2Vs bCBhcyBkYXRhKSBzaG91bGQgYmUgY29tcGxldGUNCj4+ICsJCQkJICogYmVmb3JlIGl0IGlzIHJl ZmVyZW5jZWQuDQo+PiArCQkJCSAqLw0KPj4gKwkJCQlfX2F0b21pY19zdG9yZV9uKCZjdXJfYmt0 LT5rZXlfaWR4W2ldLA0KPj4gKwkJCQkJCSBuZXdfaWR4LA0KPj4gKwkJCQkJCSBfX0FUT01JQ19S RUxFQVNFKTsNCj4+IAkJCQlfX2hhc2hfcndfd3JpdGVyX3VubG9jayhoKTsNCj4+IAkJCQlyZXR1 cm4gbmV3X2lkeCAtIDE7DQo+PiAJCQl9DQo+PiBAQCAtMTA3MiwxMCArMTA3MSwyMyBAQCBfX3J0 ZV9oYXNoX2FkZF9rZXlfd2l0aF9oYXNoKGNvbnN0IHN0cnVjdCBydGVfaGFzaCAqaCwgY29uc3Qg dm9pZCAqa2V5LA0KPj4gCWJrdF9pZCA9ICh1aW50MzJfdCkoKHVpbnRwdHJfdClleHRfYmt0X2lk KSAtIDE7DQo+PiAJLyogVXNlIHRoZSBmaXJzdCBsb2NhdGlvbiBvZiB0aGUgbmV3IGJ1Y2tldCAq Lw0KPj4gCShoLT5idWNrZXRzX2V4dFtia3RfaWRdKS5zaWdfY3VycmVudFswXSA9IHNob3J0X3Np ZzsNCj4+IC0JKGgtPmJ1Y2tldHNfZXh0W2JrdF9pZF0pLmtleV9pZHhbMF0gPSBuZXdfaWR4Ow0K Pj4gKwkvKiBLZXkgY2FuIGJlIG9mIGFyYml0cmFyeSBsZW5ndGgsIHNvIGl0IGlzDQo+PiArCSAq IG5vdCBwb3NzaWJsZSB0byBzdG9yZSBpdCBhdG9taWNhbGx5Lg0KPj4gKwkgKiBIZW5jZSB0aGUg bmV3IGtleSBlbGVtZW50J3MgbWVtb3J5IHN0b3Jlcw0KPj4gKwkgKiAoa2V5IGFzIHdlbGwgYXMg ZGF0YSkgc2hvdWxkIGJlIGNvbXBsZXRlDQo+PiArCSAqIGJlZm9yZSBpdCBpcyByZWZlcmVuY2Vk Lg0KPj4gKwkgKi8NCj4+ICsJX19hdG9taWNfc3RvcmVfbigmKGgtPmJ1Y2tldHNfZXh0W2JrdF9p ZF0pLmtleV9pZHhbMF0sDQo+PiArCQkJIG5ld19pZHgsDQo+PiArCQkJIF9fQVRPTUlDX1JFTEVB U0UpOw0KPiBbV2FuZywgWWlwZW5nXSBTaW5jZSBpdCBoYXMgbm90IGJlZW4gbGlua2VkIGFuZCBs YXRlciBvbiB0aGUgbGlua2luZyBpcyBwcm90ZWN0ZWQgYnkNCj4gcmVsZWFzZSwgZG8gd2UgcmVh bGx5IG5lZWQgYXRvbWljIHN0b3JlIGhlcmU/DQpBdG9taWMgc3RvcmUgaXMgdXNlZCBoZXJlIHRv IG1haW50YWluIHRoZSBjb2RlIGNvbnNpc3RlbmN5Lg0KPiANCj4+IAkvKiBMaW5rIHRoZSBuZXcg YnVja2V0IHRvIHNlYyBidWNrZXQgbGlua2VkIGxpc3QgKi8NCj4+IAlsYXN0ID0gcnRlX2hhc2hf Z2V0X2xhc3RfYmt0KHNlY19ia3QpOw0KPj4gLQlsYXN0LT5uZXh0ID0gJmgtPmJ1Y2tldHNfZXh0 W2JrdF9pZF07DQo+PiArCS8qIE5ldyBidWNrZXQncyBtZW1vcnkgc3RvcmVzIChrZXkgYXMgd2Vs bCBhcyBkYXRhKQ0KPj4gKwkgKiBzaG91bGQgYmUgY29tcGxldGUgYmVmb3JlIGl0IGlzIHJlZmVy ZW5jZWQNCj4+ICsJICovDQo+PiArCV9fYXRvbWljX3N0b3JlX24oJmxhc3QtPm5leHQsDQo+PiAr CQkJICZoLT5idWNrZXRzX2V4dFtia3RfaWRdLA0KPj4gKwkJCSBfX0FUT01JQ19SRUxFQVNFKTsN Cj4+IAlfX2hhc2hfcndfd3JpdGVyX3VubG9jayhoKTsNCj4+IAlyZXR1cm4gbmV3X2lkeCAtIDE7 DQo+PiANCj4+IEBAIC0xMzY2LDcgKzEzNzgsOCBAQCByZW1vdmVfZW50cnkoY29uc3Qgc3RydWN0 IHJ0ZV9oYXNoICpoLCBzdHJ1Y3QgcnRlX2hhc2hfYnVja2V0ICpia3QsIHVuc2lnbmVkIGkpDQo+ PiAqIGVtcHR5IHNsb3QuDQo+PiAqLw0KPj4gc3RhdGljIGlubGluZSB2b2lkDQo+PiAtX19ydGVf aGFzaF9jb21wYWN0X2xsKHN0cnVjdCBydGVfaGFzaF9idWNrZXQgKmN1cl9ia3QsIGludCBwb3Mp IHsNCj4+ICtfX3J0ZV9oYXNoX2NvbXBhY3RfbGwoY29uc3Qgc3RydWN0IHJ0ZV9oYXNoICpoLA0K Pj4gKwkJCXN0cnVjdCBydGVfaGFzaF9idWNrZXQgKmN1cl9ia3QsIGludCBwb3MpIHsNCj4+IAlp bnQgaTsNCj4+IAlzdHJ1Y3QgcnRlX2hhc2hfYnVja2V0ICpsYXN0X2JrdDsNCj4+IA0KPj4gQEAg LTEzNzcsMTAgKzEzOTAsMjcgQEAgX19ydGVfaGFzaF9jb21wYWN0X2xsKHN0cnVjdCBydGVfaGFz aF9idWNrZXQgKmN1cl9ia3QsIGludCBwb3MpIHsNCj4+IA0KPj4gCWZvciAoaSA9IFJURV9IQVNI X0JVQ0tFVF9FTlRSSUVTIC0gMTsgaSA+PSAwOyBpLS0pIHsNCj4+IAkJaWYgKGxhc3RfYmt0LT5r ZXlfaWR4W2ldICE9IEVNUFRZX1NMT1QpIHsNCj4+IC0JCQljdXJfYmt0LT5rZXlfaWR4W3Bvc10g PSBsYXN0X2JrdC0+a2V5X2lkeFtpXTsNCj4+IAkJCWN1cl9ia3QtPnNpZ19jdXJyZW50W3Bvc10g PSBsYXN0X2JrdC0+c2lnX2N1cnJlbnRbaV07DQo+PiArCQkJX19hdG9taWNfc3RvcmVfbigmY3Vy X2JrdC0+a2V5X2lkeFtwb3NdLA0KPj4gKwkJCQkJIGxhc3RfYmt0LT5rZXlfaWR4W2ldLA0KPj4g KwkJCQkJIF9fQVRPTUlDX1JFTEVBU0UpOw0KPj4gKwkJCWlmIChoLT5yZWFkd3JpdGVfY29uY3Vy X2xmX3N1cHBvcnQpIHsNCj4+ICsJCQkJLyogSW5mb3JtIHRoZSByZWFkZXJzIHRoYXQgdGhlIHRh YmxlIGhhcyBjaGFuZ2VkDQo+PiArCQkJCSAqIFNpbmNlIHRoZXJlIGlzIG9uZSB3cml0ZXIsIGxv YWQgYWNxdWlyZXMgb24NCj4+ICsJCQkJICogdGJsX2NobmdfY250IGFyZSBub3QgcmVxdWlyZWQu DQo+PiArCQkJCSAqLw0KPj4gKwkJCQlfX2F0b21pY19zdG9yZV9uKGgtPnRibF9jaG5nX2NudCwN Cj4+ICsJCQkJCSAqaC0+dGJsX2NobmdfY250ICsgMSwNCj4+ICsJCQkJCSBfX0FUT01JQ19SRUxF QVNFKTsNCj4+ICsJCQkJLyogVGhlIHN0b3JlcyB0byBzaWdfYWx0IGFuZCBzaWdfY3VycmVudCBz aG91bGQNCj4+ICsJCQkJICogbm90IG1vdmUgYWJvdmUgdGhlIHN0b3JlIHRvIHRibF9jaG5nX2Nu dC4NCj4+ICsJCQkJICovDQo+PiArCQkJCV9fYXRvbWljX3RocmVhZF9mZW5jZShfX0FUT01JQ19S RUxFQVNFKTsNCj4+ICsJCQl9DQo+PiAJCQlsYXN0X2JrdC0+c2lnX2N1cnJlbnRbaV0gPSBOVUxM X1NJR05BVFVSRTsNCj4+IC0JCQlsYXN0X2JrdC0+a2V5X2lkeFtpXSA9IEVNUFRZX1NMT1Q7DQo+ PiArCQkJX19hdG9taWNfc3RvcmVfbigmbGFzdF9ia3QtPmtleV9pZHhbaV0sDQo+PiArCQkJCQkg RU1QVFlfU0xPVCwNCj4+ICsJCQkJCSBfX0FUT01JQ19SRUxFQVNFKTsNCj4+IAkJCXJldHVybjsN Cj4+IAkJfQ0KPj4gCX0NCj4+IEBAIC0xNDQ5LDcgKzE0NzksNyBAQCBfX3J0ZV9oYXNoX2RlbF9r ZXlfd2l0aF9oYXNoKGNvbnN0IHN0cnVjdCBydGVfaGFzaCAqaCwgY29uc3Qgdm9pZCAqa2V5LA0K Pj4gCS8qIGxvb2sgZm9yIGtleSBpbiBwcmltYXJ5IGJ1Y2tldCAqLw0KPj4gCXJldCA9IHNlYXJj aF9hbmRfcmVtb3ZlKGgsIGtleSwgcHJpbV9ia3QsIHNob3J0X3NpZywgJnBvcyk7DQo+PiAJaWYg KHJldCAhPSAtMSkgew0KPj4gLQkJX19ydGVfaGFzaF9jb21wYWN0X2xsKHByaW1fYmt0LCBwb3Mp Ow0KPj4gKwkJX19ydGVfaGFzaF9jb21wYWN0X2xsKGgsIHByaW1fYmt0LCBwb3MpOw0KPj4gCQls YXN0X2JrdCA9IHByaW1fYmt0LT5uZXh0Ow0KPj4gCQlwcmV2X2JrdCA9IHByaW1fYmt0Ow0KPj4g CQlnb3RvIHJldHVybl9ia3Q7DQo+PiBAQCAtMTQ2MSw3ICsxNDkxLDcgQEAgX19ydGVfaGFzaF9k ZWxfa2V5X3dpdGhfaGFzaChjb25zdCBzdHJ1Y3QgcnRlX2hhc2ggKmgsIGNvbnN0IHZvaWQgKmtl eSwNCj4+IAlGT1JfRUFDSF9CVUNLRVQoY3VyX2JrdCwgc2VjX2JrdCkgew0KPj4gCQlyZXQgPSBz ZWFyY2hfYW5kX3JlbW92ZShoLCBrZXksIGN1cl9ia3QsIHNob3J0X3NpZywgJnBvcyk7DQo+PiAJ CWlmIChyZXQgIT0gLTEpIHsNCj4+IC0JCQlfX3J0ZV9oYXNoX2NvbXBhY3RfbGwoY3VyX2JrdCwg cG9zKTsNCj4+ICsJCQlfX3J0ZV9oYXNoX2NvbXBhY3RfbGwoaCwgY3VyX2JrdCwgcG9zKTsNCj4+ IAkJCWxhc3RfYmt0ID0gc2VjX2JrdC0+bmV4dDsNCj4+IAkJCXByZXZfYmt0ID0gc2VjX2JrdDsN Cj4+IAkJCWdvdG8gcmV0dXJuX2JrdDsNCj4+IEBAIC0xNDg4LDExICsxNTE4LDIxIEBAIF9fcnRl X2hhc2hfZGVsX2tleV93aXRoX2hhc2goY29uc3Qgc3RydWN0IHJ0ZV9oYXNoICpoLCBjb25zdCB2 b2lkICprZXksDQo+PiAJfQ0KPj4gCS8qIGZvdW5kIGVtcHR5IGJ1Y2tldCBhbmQgcmVjeWNsZSAq Lw0KPj4gCWlmIChpID09IFJURV9IQVNIX0JVQ0tFVF9FTlRSSUVTKSB7DQo+PiAtCQlwcmV2X2Jr dC0+bmV4dCA9IGxhc3RfYmt0LT5uZXh0ID0gTlVMTDsNCj4+ICsJCV9fYXRvbWljX3N0b3JlX24o JnByZXZfYmt0LT5uZXh0LA0KPj4gKwkJCQkgTlVMTCwNCj4+ICsJCQkJIF9fQVRPTUlDX1JFTEVB U0UpOw0KPj4gCQl1aW50MzJfdCBpbmRleCA9IGxhc3RfYmt0IC0gaC0+YnVja2V0c19leHQgKyAx Ow0KPj4gLQkJcnRlX3Jpbmdfc3BfZW5xdWV1ZShoLT5mcmVlX2V4dF9ia3RzLCAodm9pZCAqKSh1 aW50cHRyX3QpaW5kZXgpOw0KPj4gLQl9DQo+PiArCQlpZiAoIWgtPm5vX2ZyZWVfb25fZGVsKQ0K Pj4gKwkJCXJ0ZV9yaW5nX3NwX2VucXVldWUoaC0+ZnJlZV9leHRfYmt0cywgKHZvaWQgKikodWlu dHB0cl90KWluZGV4KTsNCj4+ICsJCWVsc2Ugew0KPj4gKwkJCXN0cnVjdCBydGVfaGFzaF9rZXkg KmtleV9zbG90ID0NCj4+ICsJCQkJKHN0cnVjdCBydGVfaGFzaF9rZXkgKikoDQo+PiArCQkJCShj aGFyICopaC0+a2V5X3N0b3JlICsNCj4+ICsJCQkJcmV0ICogaC0+a2V5X2VudHJ5X3NpemUpOw0K Pj4gKwkJCWtleV9zbG90LT5leHRfYmt0X3RvX2ZyZWUgPSBpbmRleDsNCj4gW1dhbmcsIFlpcGVu Z10gSXMgdGhlcmUgY2hhbmNlIHRoYXQgYSBrZXlfc2xvdCBtYXkgYWxyZWFkeSBoYXZlIG9uZSBw cmV2aW91cyBleHRfYmt0DQo+IGFuZCBub3cgZ290IG92ZXJ3cml0dGVuLCBzbyB0aGF0IHRoZSBw cmV2aW91cyBvbmUgZ29uZSBmb3JldmVyPw0KTm8sIGl0IGlzIG5vdCBwb3NzaWJsZS4gU2luY2Us IHRoZSBpbmRleCBpcyBiZWluZyBzdG9yZWQgaW4gYSBrZXlfc2xvdCB3aGljaCBpcyBhc3NvY2lh dGVkIHdpdGggYSBkZWxldGVkIGtleS4NCj4+IA0KPj4gKwkJfQ0KPj4gKwl9DQo+PiAJX19oYXNo X3J3X3dyaXRlcl91bmxvY2soaCk7DQo+PiAJcmV0dXJuIHJldDsNCj4+IH0NCj4+IEBAIC0xNTY3 LDYgKzE2MDcsMTQgQEAgcnRlX2hhc2hfZnJlZV9rZXlfd2l0aF9wb3NpdGlvbihjb25zdCBzdHJ1 Y3QgcnRlX2hhc2ggKmgsDQo+PiAJCQkJKHZvaWQgKikoKHVpbnRwdHJfdClwb3NpdGlvbikpOw0K Pj4gCX0NCj4+IA0KPj4gKwljb25zdCBzdHJ1Y3QgcnRlX2hhc2hfa2V5ICprZXlfc2xvdCA9IChj b25zdCBzdHJ1Y3QgcnRlX2hhc2hfa2V5ICopKA0KPj4gKwkJCQkJCShjb25zdCBjaGFyICopaC0+ a2V5X3N0b3JlICsNCj4+ICsJCQkJCQlwb3NpdGlvbiAqIGgtPmtleV9lbnRyeV9zaXplKTsNCj4+ ICsJdWludDMyX3QgaW5kZXggPSBrZXlfc2xvdC0+ZXh0X2JrdF90b19mcmVlOw0KPj4gKwlpZiAo IWluZGV4KQ0KPj4gKwkJLyogUmVjeWNsZSBlbXB0eSBleHQgYmt0IHRvIGZyZWUgbGlzdC4gKi8N Cj4+ICsJCXJ0ZV9yaW5nX3NwX2VucXVldWUoaC0+ZnJlZV9leHRfYmt0cywgKHZvaWQgKikodWlu dHB0cl90KWluZGV4KTsNCj4+ICsNCj4+IAlyZXR1cm4gMDsNCj4+IH0NCj4+IA0KPj4gQEAgLTE4 NTUsNiArMTkwMyw5IEBAIF9fcnRlX2hhc2hfbG9va3VwX2J1bGtfbGYoY29uc3Qgc3RydWN0IHJ0 ZV9oYXNoICpoLCBjb25zdCB2b2lkICoqa2V5cywNCj4+IAkJcnRlX3ByZWZldGNoMChzZWNvbmRh cnlfYmt0W2ldKTsNCj4+IAl9DQo+PiANCj4+ICsJZm9yIChpID0gMDsgaSA8IG51bV9rZXlzOyBp KyspDQo+PiArCQlwb3NpdGlvbnNbaV0gPSAtRU5PRU5UOw0KPiBbV2FuZywgWWlwZW5nXSBTbyBp cyB0aGlzIGZvciBwZXJmb3JtYW5jZSByZWFzb24/DQpSZXNldHRpbmcgcG9zaXRpb25zW10gb24g ZWFjaCBpdGVyYXRpb24gb2YgZG/igKZ3aGlsZSgpIHJlcXVpcmUg4oCYaGl0c+KAmSB0byBiZSBy ZXNldCBhcyB3ZWxsLCB3aGljaCBjYXVzZXMgcGVyZm9ybWFuY2UgaGl0Lg0KPj4gKw0KPj4gCWRv IHsNCj4+IAkJLyogTG9hZCB0aGUgdGFibGUgY2hhbmdlIGNvdW50ZXIgYmVmb3JlIHRoZSBsb29r dXANCj4+IAkJICogc3RhcnRzLiBBY3F1aXJlIHNlbWFudGljcyB3aWxsIG1ha2Ugc3VyZSB0aGF0 DQo+PiBAQCAtMTg5OSw3ICsxOTUwLDYgQEAgX19ydGVfaGFzaF9sb29rdXBfYnVsa19sZihjb25z dCBzdHJ1Y3QgcnRlX2hhc2ggKmgsIGNvbnN0IHZvaWQgKiprZXlzLA0KPj4gDQo+PiAJCS8qIENv bXBhcmUga2V5cywgZmlyc3QgaGl0cyBpbiBwcmltYXJ5IGZpcnN0ICovDQo+PiAJCWZvciAoaSA9 IDA7IGkgPCBudW1fa2V5czsgaSsrKSB7DQo+PiAtCQkJcG9zaXRpb25zW2ldID0gLUVOT0VOVDsN Cj4+IAkJCXdoaWxlIChwcmltX2hpdG1hc2tbaV0pIHsNCj4+IAkJCQl1aW50MzJfdCBoaXRfaW5k ZXggPQ0KPj4gCQkJCQkJX19idWlsdGluX2N0emwocHJpbV9oaXRtYXNrW2ldKQ0KPj4gQEAgLTE5 NzIsNiArMjAyMiwzNiBAQCBfX3J0ZV9oYXNoX2xvb2t1cF9idWxrX2xmKGNvbnN0IHN0cnVjdCBy dGVfaGFzaCAqaCwgY29uc3Qgdm9pZCAqKmtleXMsDQo+PiAJCQljb250aW51ZTsNCj4+IAkJfQ0K Pj4gDQo+PiArDQo+PiArCQkvKiBhbGwgZm91bmQsIGRvIG5vdCBuZWVkIHRvIGdvIHRocm91Z2gg ZXh0IGJrdCAqLw0KPj4gKwkJaWYgKGhpdHMgPT0gKCgxVUxMIDw8IG51bV9rZXlzKSAtIDEpKSB7 DQo+PiArCQkJaWYgKGhpdF9tYXNrICE9IE5VTEwpDQo+PiArCQkJCSpoaXRfbWFzayA9IGhpdHM7 DQo+IA0KPiBbV2FuZywgWWlwZW5nXSBJIHRoaW5rIHlvdSBuZWVkIHRvIGNoZWNrIHRoZSB2ZXJz aW9uIGNvdW50ZXIgYmVmb3JlIHJldHVybiwNCj4gYW5kIGhvdyBhYm91dCB0aGUgZmVuY2U/DQpJ ZiBhbGwgdGhlIGtleXMgYXJlIGZvdW5kLCB0aGVyZSBpcyBubyBuZWVkIHRvIGNoZWNrIHRoZSBj b3VudGVyLg0KPj4gKwkJCXJldHVybjsNCj4+ICsJCX0NCj4+ICsJCS8qIG5lZWQgdG8gY2hlY2sg ZXh0IGJ1Y2tldHMgZm9yIG1hdGNoICovDQo+PiArCQlpZiAoaC0+ZXh0X3RhYmxlX3N1cHBvcnQp IHsNCj4+ICsJCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2tleXM7IGkrKykgew0KPj4gKwkJCQlpZiAo KGhpdHMgJiAoMVVMTCA8PCBpKSkgIT0gMCkNCj4+ICsJCQkJCWNvbnRpbnVlOw0KPj4gKwkJCQlu ZXh0X2JrdCA9IHNlY29uZGFyeV9ia3RbaV0tPm5leHQ7DQo+PiArCQkJCUZPUl9FQUNIX0JVQ0tF VChjdXJfYmt0LCBuZXh0X2JrdCkgew0KPj4gKwkJCQkJaWYgKGRhdGEgIT0gTlVMTCkNCj4+ICsJ CQkJCQlyZXQgPSBzZWFyY2hfb25lX2J1Y2tldF9sZihoLA0KPj4gKwkJCQkJCQlrZXlzW2ldLCBz aWdbaV0sDQo+PiArCQkJCQkJCSZkYXRhW2ldLCBjdXJfYmt0KTsNCj4+ICsJCQkJCWVsc2UNCj4+ ICsJCQkJCQlyZXQgPSBzZWFyY2hfb25lX2J1Y2tldF9sZihoLA0KPj4gKwkJCQkJCQkJa2V5c1tp XSwgc2lnW2ldLA0KPj4gKwkJCQkJCQkJTlVMTCwgY3VyX2JrdCk7DQo+PiArCQkJCQlpZiAocmV0 ICE9IC0xKSB7DQo+PiArCQkJCQkJcG9zaXRpb25zW2ldID0gcmV0Ow0KPj4gKwkJCQkJCWhpdHMg fD0gMVVMTCA8PCBpOw0KPj4gKwkJCQkJCWJyZWFrOw0KPj4gKwkJCQkJfQ0KPj4gKwkJCQl9DQo+ PiArCQkJfQ0KPj4gKwkJfQ0KPj4gCQkvKiBUaGUgbG9hZHMgb2Ygc2lnX2N1cnJlbnQgaW4gY29t cGFyZV9zaWduYXR1cmVzDQo+PiAJCSAqIHNob3VsZCBub3QgbW92ZSBiZWxvdyB0aGUgbG9hZCBm cm9tIHRibF9jaG5nX2NudC4NCj4+IAkJICovDQo+PiBAQCAtMTk4OCwzNCArMjA2OCw2IEBAIF9f cnRlX2hhc2hfbG9va3VwX2J1bGtfbGYoY29uc3Qgc3RydWN0IHJ0ZV9oYXNoICpoLCBjb25zdCB2 b2lkICoqa2V5cywNCj4+IAkJCQkJX19BVE9NSUNfQUNRVUlSRSk7DQo+PiAJfSB3aGlsZSAoY250 X2IgIT0gY250X2EpOw0KPj4gDQo+PiAtCS8qIGFsbCBmb3VuZCwgZG8gbm90IG5lZWQgdG8gZ28g dGhyb3VnaCBleHQgYmt0ICovDQo+PiAtCWlmICgoaGl0cyA9PSAoKDFVTEwgPDwgbnVtX2tleXMp IC0gMSkpIHx8ICFoLT5leHRfdGFibGVfc3VwcG9ydCkgew0KPj4gLQkJaWYgKGhpdF9tYXNrICE9 IE5VTEwpDQo+PiAtCQkJKmhpdF9tYXNrID0gaGl0czsNCj4+IC0JCV9faGFzaF9yd19yZWFkZXJf dW5sb2NrKGgpOw0KPj4gLQkJcmV0dXJuOw0KPj4gLQl9DQo+PiAtDQo+PiAtCS8qIG5lZWQgdG8g Y2hlY2sgZXh0IGJ1Y2tldHMgZm9yIG1hdGNoICovDQo+PiAtCWZvciAoaSA9IDA7IGkgPCBudW1f a2V5czsgaSsrKSB7DQo+PiAtCQlpZiAoKGhpdHMgJiAoMVVMTCA8PCBpKSkgIT0gMCkNCj4+IC0J CQljb250aW51ZTsNCj4+IC0JCW5leHRfYmt0ID0gc2Vjb25kYXJ5X2JrdFtpXS0+bmV4dDsNCj4+ IC0JCUZPUl9FQUNIX0JVQ0tFVChjdXJfYmt0LCBuZXh0X2JrdCkgew0KPj4gLQkJCWlmIChkYXRh ICE9IE5VTEwpDQo+PiAtCQkJCXJldCA9IHNlYXJjaF9vbmVfYnVja2V0X2xmKGgsIGtleXNbaV0s DQo+PiAtCQkJCQkJc2lnW2ldLCAmZGF0YVtpXSwgY3VyX2JrdCk7DQo+PiAtCQkJZWxzZQ0KPj4g LQkJCQlyZXQgPSBzZWFyY2hfb25lX2J1Y2tldF9sZihoLCBrZXlzW2ldLA0KPj4gLQkJCQkJCXNp Z1tpXSwgTlVMTCwgY3VyX2JrdCk7DQo+PiAtCQkJaWYgKHJldCAhPSAtMSkgew0KPj4gLQkJCQlw b3NpdGlvbnNbaV0gPSByZXQ7DQo+PiAtCQkJCWhpdHMgfD0gMVVMTCA8PCBpOw0KPj4gLQkJCQli cmVhazsNCj4+IC0JCQl9DQo+PiAtCQl9DQo+PiAtCX0NCj4+IC0NCj4+IAlpZiAoaGl0X21hc2sg IT0gTlVMTCkNCj4+IAkJKmhpdF9tYXNrID0gaGl0czsNCj4+IH0NCj4+IGRpZmYgLS1naXQgYS9s aWIvbGlicnRlX2hhc2gvcnRlX2N1Y2tvb19oYXNoLmggYi9saWIvbGlicnRlX2hhc2gvcnRlX2N1 Y2tvb19oYXNoLmgNCj4+IGluZGV4IGVhY2RhYThkNDY4NC4uMDYyY2MyZGQwMjk2IDEwMDY0NA0K Pj4gLS0tIGEvbGliL2xpYnJ0ZV9oYXNoL3J0ZV9jdWNrb29faGFzaC5oDQo+PiArKysgYi9saWIv bGlicnRlX2hhc2gvcnRlX2N1Y2tvb19oYXNoLmgNCj4+IEBAIC0xMjksNiArMTI5LDE0IEBAIHN0 cnVjdCBsY29yZV9jYWNoZSB7DQo+PiANCj4+IC8qIFN0cnVjdHVyZSB0aGF0IHN0b3JlcyBrZXkt dmFsdWUgcGFpciAqLw0KPj4gc3RydWN0IHJ0ZV9oYXNoX2tleSB7DQo+PiArCS8qIFN0b3JlcyBp bmRleCBvZiBhbiBlbXB0eSBleHQgYmt0IHRvIGJlIHJlY3ljbGVkIG9uIGNhbGxpbmcNCj4+ICsJ ICogcnRlX2hhc2hfZGVsX3h4eCBBUElzLiBXaGVuIGxvY2sgZnJlZSByZWFkLXdyaWUgY29uY3Vy cmVuY3kgaXMNCj4gW1dhbmcsIFlpcGVuZ10gdHlwbw0KV2lsbCB1cGRhdGUgaXQgaW4gdGhlIG5l eHQgdmVyc2lvbi4NCj4+ICsJICogZW5hYmxlZCwgYW4gZW1wdHkgZXh0IGJrdCBjYW5ub3QgYmUg cHV0IGludG8gZnJlZSBsaXN0IGltbWVkaWF0ZWx5DQo+PiArCSAqIChhcyByZWFkZXJzIG1pZ2h0 IGJlIHVzaW5nIGl0IHN0aWxsKS4gSGVuY2UgZnJlZWluZyBvZiB0aGUgZXh0IGJrdA0KPj4gKwkg KiBpcyBwaWdneS1iYWNrZWQgdG8gZnJlZWluZyBvZiB0aGUga2V5IGluZGV4Lg0KPj4gKwkgKi8N Cj4gW1dhbmcsIFlpcGVuZ10gSSBhbSB0aGlua2luZyBpZiB0aGlzIGJyZWFrcyB0aGUgImd1YXJh bnRlZSIgcHJvdmlkZWQgYnkgZXh0IHRhYmxlLCBTaW5jZQ0KPiBhIHdob2xlIGJ1Y2tldCBjb3Vs ZCBub3QgYmUgcmV1c2VkIGlmIG9uZSBrZXkgbm90IGZyZWVkLiBJcyB0aGVyZSBhbnkgZnVuZGFt ZW50YWwgaXNzdWUgd2l0aA0KPiBhIG5ldyBBUEkgdG8gcmVjeWNsZSBleHQgYnVja2V0IG9yIHlv dSBqdXN0IGRvIG5vdCB3YW50IHRvIGFkZCBhIG5ldyBBUEk/DQpXaXRoIGxvY2stZnJlZSBmZWF0 dXJlLCDigJhkZWxldGXigJkgYmVjb21lcyBhIHR3byBzdGVwIHByb2Nlc3Mgb2Yg4oCYZGVsZXRl 4oCZIGFuZCDigJhmcmVl4oCZLiBJbiBvdGhlciB3b3JkcywNCml0IGNhbiBiZSB2aWV3ZWQgYnkg dGhlIGFwcGxpY2F0aW9ucyBhcyBhICdwcm9sb25nZWQgZGVsZXRl4oCZLiBJ4oCZbSBub3Qgc3Vy ZSBob3cgYWRkaW5nIGEgbmV3IEFQSQ0KdG8gcmVjeWNsZSBleHQgYnVja2V0IHdpbGwgaGVscCBz b2x2aW5nIHRoZSBpc3N1ZS4NCj4+ICsJdWludDMyX3QgZXh0X2JrdF90b19mcmVlOw0KPj4gKw0K Pj4gCXVuaW9uIHsNCj4+IAkJdWludHB0cl90IGlkYXRhOw0KPj4gCQl2b2lkICpwZGF0YTsNCj4+ IC0tDQo+PiAyLjE3LjENCg0K