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 D7201A0C41; Fri, 16 Apr 2021 10:18:48 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C437E141B8C; Fri, 16 Apr 2021 10:18:48 +0200 (CEST) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by mails.dpdk.org (Postfix) with ESMTP id 8CB11141B7E for ; Fri, 16 Apr 2021 10:18:46 +0200 (CEST) IronPort-SDR: RSLq7ah6LV9QpYSeY+GYM3FI9xkOXuglsyVKElqw8HpSB/b97kHuperd495hr6zptslTA1PoMa D7vtqewqGGfg== X-IronPort-AV: E=McAfee;i="6200,9189,9955"; a="194566515" X-IronPort-AV: E=Sophos;i="5.82,226,1613462400"; d="scan'208";a="194566515" Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Apr 2021 01:18:40 -0700 IronPort-SDR: jJOrjQSEdIqh9JdzTKt1mh3wkaV1umFhkLIdXmIRje3sSAvHGqNGKkeZhG75UfnELsRcLuguh4 6/LtvqScSZBw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.82,226,1613462400"; d="scan'208";a="389990185" Received: from fmsmsx604.amr.corp.intel.com ([10.18.126.84]) by fmsmga007.fm.intel.com with ESMTP; 16 Apr 2021 01:18:40 -0700 Received: from shsmsx606.ccr.corp.intel.com (10.109.6.216) by fmsmsx604.amr.corp.intel.com (10.18.126.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2; Fri, 16 Apr 2021 01:18:40 -0700 Received: from shsmsx606.ccr.corp.intel.com (10.109.6.216) by SHSMSX606.ccr.corp.intel.com (10.109.6.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2; Fri, 16 Apr 2021 16:18:38 +0800 Received: from shsmsx606.ccr.corp.intel.com ([10.109.6.216]) by SHSMSX606.ccr.corp.intel.com ([10.109.6.216]) with mapi id 15.01.2106.013; Fri, 16 Apr 2021 16:18:37 +0800 From: "Hu, Jiayu" To: Maxime Coquelin , "dev@dpdk.org" CC: "Xia, Chenbo" , "Wang, Yinan" , "Pai G, Sunil" , "Jiang, Cheng1" Thread-Topic: [PATCH v2 3/4] vhost: avoid deadlock on async register Thread-Index: AQHXJ4o3TGFQBWTUf0K5gqJ5ckYjX6qx3F2AgAFn1ECAABLyAIABfNQg///jRICAAJEZwIAA98YAgACUNCA= Date: Fri, 16 Apr 2021 08:18:37 +0000 Message-ID: <4fc5b419864e4b829623099cd31de9aa@intel.com> References: <1615985773-406787-1-git-send-email-jiayu.hu@intel.com> <1617368642-131298-1-git-send-email-jiayu.hu@intel.com> <1617368642-131298-4-git-send-email-jiayu.hu@intel.com> <0b974e3cd6534947ba6568d93d9431ab@intel.com> <9eb47884f1254cc98b9f1c60dfe9714c@intel.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-reaction: no-action dlp-version: 11.5.1.3 dlp-product: dlpe-windows x-originating-ip: [10.239.127.36] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v2 3/4] vhost: avoid deadlock on async register 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 Sender: "dev" SGkgTWF4aW1lLA0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IE1heGlt ZSBDb3F1ZWxpbiA8bWF4aW1lLmNvcXVlbGluQHJlZGhhdC5jb20+DQo+IFNlbnQ6IEZyaWRheSwg QXByaWwgMTYsIDIwMjEgMjozNSBQTQ0KPiBUbzogSHUsIEppYXl1IDxqaWF5dS5odUBpbnRlbC5j b20+OyBkZXZAZHBkay5vcmcNCj4gQ2M6IFhpYSwgQ2hlbmJvIDxjaGVuYm8ueGlhQGludGVsLmNv bT47IFdhbmcsIFlpbmFuDQo+IDx5aW5hbi53YW5nQGludGVsLmNvbT47IFBhaSBHLCBTdW5pbCA8 c3VuaWwucGFpLmdAaW50ZWwuY29tPjsgSmlhbmcsIENoZW5nMQ0KPiA8Y2hlbmcxLmppYW5nQGlu dGVsLmNvbT4NCj4gU3ViamVjdDogUmU6IFtQQVRDSCB2MiAzLzRdIHZob3N0OiBhdm9pZCBkZWFk bG9jayBvbiBhc3luYyByZWdpc3Rlcg0KPiANCj4gSGkgSmlheXUsDQo+IA0KPiBPbiA0LzE2LzIx IDQ6MTkgQU0sIEh1LCBKaWF5dSB3cm90ZToNCj4gPiBIaSBNYXhpbWUsDQo+ID4+Pj4gT24gNC8x NC8yMSAzOjQwIEFNLCBIdSwgSmlheXUgd3JvdGU6DQo+ID4+Pj4+IEhpIE1heGltZSwNCj4gPj4+ Pj4NCj4gPj4+Pj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4+Pj4+PiBGcm9tOiBN YXhpbWUgQ29xdWVsaW4gPG1heGltZS5jb3F1ZWxpbkByZWRoYXQuY29tPg0KPiA+Pj4+Pj4gU2Vu dDogVHVlc2RheSwgQXByaWwgMTMsIDIwMjEgNzozMyBQTQ0KPiA+Pj4+Pj4gVG86IEh1LCBKaWF5 dSA8amlheXUuaHVAaW50ZWwuY29tPjsgZGV2QGRwZGsub3JnDQo+ID4+Pj4+PiBDYzogWGlhLCBD aGVuYm8gPGNoZW5iby54aWFAaW50ZWwuY29tPjsgV2FuZywgWWluYW4NCj4gPj4+Pj4+IDx5aW5h bi53YW5nQGludGVsLmNvbT47IFBhaSBHLCBTdW5pbCA8c3VuaWwucGFpLmdAaW50ZWwuY29tPjsg SmlhbmcsDQo+ID4+Pj4gQ2hlbmcxDQo+ID4+Pj4+PiA8Y2hlbmcxLmppYW5nQGludGVsLmNvbT4N Cj4gPj4+Pj4+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjIgMy80XSB2aG9zdDogYXZvaWQgZGVhZGxv Y2sgb24gYXN5bmMgcmVnaXN0ZXINCj4gPj4+Pj4+DQo+ID4+Pj4+Pg0KPiA+Pj4+Pj4NCj4gPj4+ Pj4+IE9uIDQvMi8yMSAzOjA0IFBNLCBKaWF5dSBIdSB3cm90ZToNCj4gPj4+Pj4+PiBVc2VycyBj YW4gcmVnaXN0ZXIgYXN5bmMgY29weSBkZXZpY2UgaW4gdnJpbmdfc3RhdGVfY2hhbmdlZCgpLA0K PiA+Pj4+Pj4+IHdoZW4gdmhvc3QgcXVldWUgaXMgZW5hYmxlZC4gSG93ZXZlciwgYSBkZWFkbG9j ayBvY2N1cnMgaW5zaWRlDQo+ID4+Pj4+Pj4gcnRlX3Zob3N0X2FzeW5jX2NoYW5uZWxfcmVnaXN0 ZXIoKSwgaWYNCj4gPj4+Pj4+IFZIT1NUX1VTRVJfRl9QUk9UT0NPTF9GRUFUVVJFUw0KPiA+Pj4+ Pj4+IGlzIG5vdCBzdXBwb3J0ZWQsIGFzIHZob3N0X3VzZXJfbXNnX2hhbmRsZXIoKSB0YWtlcyB2 cS0NCj4gPmFjY2Vzc19sb2NrDQo+ID4+Pj4+Pj4gYmVmb3JlIGNhbGxpbmcgdmhvc3RfdXNlcl9z ZXRfdnJpbmdfa2ljaygpLg0KPiA+Pj4+Pj4+DQo+ID4+Pj4+Pj4gVGhpcyBwYXRjaCBhdm9pZHMg YXN5bmMgcmVnaXN0ZXIgZGVhZGxvY2sgYnkgcmVtb3ZpbmcgY2FsbGluZw0KPiA+Pj4+Pj4+IHZy aW5nX3N0YXRlX2NoYW5nZWQoKSBpbiB2aG9zdF91c2VyX3NldF92cmluZ19raWNrKCkuIEl0J3Mg c2FmZQ0KPiA+Pj4+Pj4+IGFzIHZob3N0X3VzZXJfbXNnX2hhbmRsZXIoKSB3aWxsIGNhbGwgdnJp bmdfc3RhdGVfY2hhbmdlZCgpDQo+IGFueXdheS4NCj4gPj4+Pj4+Pg0KPiA+Pj4+Pj4+IFNpZ25l ZC1vZmYtYnk6IEppYXl1IEh1IDxqaWF5dS5odUBpbnRlbC5jb20+DQo+ID4+Pj4+Pj4gLS0tDQo+ ID4+Pj4+Pj4gIGxpYi9saWJydGVfdmhvc3Qvdmhvc3RfdXNlci5jIHwgMyAtLS0NCj4gPj4+Pj4+ PiAgMSBmaWxlIGNoYW5nZWQsIDMgZGVsZXRpb25zKC0pDQo+ID4+Pj4+Pj4NCj4gPj4+Pj4+PiBk aWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV92aG9zdC92aG9zdF91c2VyLmMNCj4gPj4gYi9saWIvbGli cnRlX3Zob3N0L3Zob3N0X3VzZXIuYw0KPiA+Pj4+Pj4+IGluZGV4IDQ0YzA0NTIuLjhmMGViYTYg MTAwNjQ0DQo+ID4+Pj4+Pj4gLS0tIGEvbGliL2xpYnJ0ZV92aG9zdC92aG9zdF91c2VyLmMNCj4g Pj4+Pj4+PiArKysgYi9saWIvbGlicnRlX3Zob3N0L3Zob3N0X3VzZXIuYw0KPiA+Pj4+Pj4+IEBA IC0xOTE4LDkgKzE5MTgsNiBAQCB2aG9zdF91c2VyX3NldF92cmluZ19raWNrKHN0cnVjdA0KPiB2 aXJ0aW9fbmV0DQo+ID4+Pj4+PiAqKnBkZXYsIHN0cnVjdCBWaG9zdFVzZXJNc2cgKm1zZywNCj4g Pj4+Pj4+PiAgCSAqLw0KPiA+Pj4+Pj4+ICAJaWYgKCEoZGV2LT5mZWF0dXJlcyAmICgxVUxMIDw8 DQo+ID4+Pj4+PiBWSE9TVF9VU0VSX0ZfUFJPVE9DT0xfRkVBVFVSRVMpKSkgew0KPiA+Pj4+Pj4+ ICAJCXZxLT5lbmFibGVkID0gdHJ1ZTsNCj4gPj4+Pj4+PiAtCQlpZiAoZGV2LT5ub3RpZnlfb3Bz LT52cmluZ19zdGF0ZV9jaGFuZ2VkKQ0KPiA+Pj4+Pj4+IC0JCQlkZXYtPm5vdGlmeV9vcHMtPnZy aW5nX3N0YXRlX2NoYW5nZWQoDQo+ID4+Pj4+Pj4gLQkJCQlkZXYtPnZpZCwgZmlsZS5pbmRleCwg MSk7DQo+ID4+Pj4+Pj4gIAl9DQo+ID4+Pj4+Pj4NCj4gPj4+Pj4+PiAgCWlmICh2cS0+cmVhZHkp IHsNCj4gPj4+Pj4+Pg0KPiA+Pj4+Pj4NCj4gPj4+Pj4+IEFzIHJlcGxpZWQgZWFybGllciBvbiB2 MSwgSSBhZ3JlZSB0aGUgY2FsbCB0byB2cmluZ19zdGF0ZV9jaGFuZ2VkIGhlcmUNCj4gPj4+Pj4+ IGlzIG5vdCBuZWVkZWQuIEJ1dCBpdCBtaWdodCBub3QgYmUgZW5vdWdoLCB0aGVyZSBhcmUgb3Ro ZXIgY2FzZXMNCj4gd2hlcmUNCj4gPj4+Pj4+IHlvdSBjb3VsZCBoYXZlIGlzc3Vlcy4NCj4gPj4+ Pj4NCj4gPj4+Pj4gdmhvc3RfdXNlcl9ub3RpZnlfcXVldWVfc3RhdGUoKSBjYW4gYmUgY2FsbGVk IGluIHRocmVlIGNhc2VzOg0KPiA+Pj4+PiAxLiB3aGVuIHZxIHJlYWR5IHN0YXR1cyBjaGFuZ2Vz LCB2aG9zdF91c2VyX21zZ19oYW5kbGVyKCkgY2FsbHMgaXQgdG8NCj4gPj4+PiBub3RpZnkNCj4g Pj4+Pj4gYmFja2VuZC4gQnV0IHZob3N0X3VzZXJfbXNnX2hhbmRsZXIoKSBkb2Vzbid0IHRha2Ug bG9jayBiZWZvcmUNCj4gY2FsbGluZw0KPiA+PiBpdC4NCj4gPj4+Pj4gU28gaW4gdGhpcyBjYXNl LCBubyBkZWFkbG9jayBvY2N1cnMgaW4gYXN5bmMgcmVnaXN0ZXIuDQo+ID4+Pj4+DQo+ID4+Pj4+ IDIuIGlmIHZxLT5yZWFkeSBpcyB0cnVlLCB2aG9zdF91c2VyX3NldF92cmluZ19jYWxsKCkgY2Fs bHMgaXQgdG8gbm90aWZ5DQo+ID4+IGJhY2tlbmQNCj4gPj4+Pj4gdnEgaXMgbm90IGVuYWJsZWQu IEFsdGhvdWdoIHZob3N0X3VzZXJfc2V0X3ZyaW5nX2NhbGwoKSBpcyBwcm90ZWN0ZWQgYnkNCj4g Pj4gbG9jaywNCj4gPj4+Pj4gYXN5bmMgcmVnaXN0ZXIgaXMgY2FsbGVkIG9ubHkgaWYgdnEgaXMg ZW5hYmxlZCwgc28gYXN5bmMgcmVnaXN0ZXIgd2lsbCBub3QNCj4gYmUNCj4gPj4+PiBjYWxsZWQN Cj4gPj4+Pj4gaW4gdGhpcyBjYXNlLg0KPiA+Pj4+Pg0KPiA+Pj4+PiAzLiBJZiB2cS0+cmVhZHkg aXMgdHJ1ZSwgdmhvc3RfdXNlcl9zZXRfdnJpbmdfa2ljaygpIGNhbGxzIGl0IHRvIG5vdGlmeQ0K PiA+PiBiYWNrZW5kDQo+ID4+Pj4+IHZxIGlzIG5vdCBlbmFibGVkLiBTYW1lIGFzICMyLCBhc3lu YyByZWdpc3RlciBpcyBjYWxsZWQgb25seSB3aGVuIHZxIGlzDQo+ID4+Pj4gZW5hYmxlZC4NCj4g Pj4+Pj4gRXZlbiBpZiB2aG9zdF91c2VyX3NldF92cmluZ19raWNrKCkgaXMgcHJvdGVjdGVkIGJ5 IGxvY2ssIHRoZXJlIGlzIG5vDQo+ID4+Pj4gZGVhZGxvY2sgaW4NCj4gPj4+Pj4gYXN5bmMgcmVn aXN0ZXIsIGFzIGl0IHdpbGwgbm90IGJlIGNhbGxlZCBpbiB0aGlzIGNhc2UuDQo+ID4+Pj4+DQo+ ID4+Pj4+IEluIHN1bW1hcnksICBJIHRoaW5rIHRoZXJlIGlzIG5vIGRlYWRsb2NrIGlzc3VlIGlu IGFzeW5jIHJlZ2lzdGVyIGlmIHdlDQo+ID4+Pj4+IGNhbiByZW1vdmUgY2FsbGluZyB2cmluZ19z dGF0ZV9jaGFuZ2UoKSBpbg0KPiB2aG9zdF91c2VyX3NldF92cmluZ19raWNrKCkuDQo+ID4+Pj4N Cj4gPj4+Pg0KPiA+Pj4+IEJ1dCB1bnJlZ2lzdGVyIG9uZSBjb3VsZCBiZSBjYWxsZWQgaW4gdGhl b3J5IG5vPyBPdGhlcndpc2UgaXQgd291bGQNCj4gbG9vaw0KPiA+Pj4+IHVuYmFsYW5jZWQuIEF0 IGxlYXN0IG9uIGRpc2FibGVkIG5vdGlmaWNhdGlvbiwgdGhlIGFwcCBzaG91bGQgbWFrZSBzdXJl DQo+ID4+Pj4gdGhlIERNQSB0cmFuc2ZlcnMgdG8gYW5kIGZyb20gdGhlIHZyaW5nIGFyZSBzdG9w cGVkIGJlZm9yZSBpdCByZXR1cm5zDQo+ID4+Pj4gZnJvbSB0aGUgY2FsbGFiY2suIE90aGVyd2lz ZSBpdCBjb3VsZCBsZWFkIHRvIHVuZGVmaW5lZCBiZWhhdmlvci4NCj4gPj4+DQo+ID4+PiBSaWdo dCwgdXNlcnMgbmVlZCB0byBjYWxsIHVucmVnaXN0ZXIsIGJ1dCB3ZSBjYW5ub3QgcmVtb3ZlIGNh bGxpbmcNCj4gPj4+IHZob3N0X3VzZXJfbm90aWZ5X3F1ZXVlX3N0YXRlKCkgaW4gY2FzZSAjMiBh bmQgIzMsIElNSE8uIFNvIHRvDQo+ID4+PiBhdm9pZCBkZWFkbG9jaywgd2UgcmVjb21tZW5kZWQg dXNlcnMgdG8gY2FsbCBhc3luYyB1bnJlZ2lzdGVyIGluDQo+ID4+PiBkZXN0cm95X2RldmljZSgp LCBpbnN0ZWFkIG9mIG9uIHZyaW5nIGRpc2FibGVkIG5vdGlmaWNhdGlvbi4gRG9lcyBpdA0KPiA+ Pj4gbWFrZSBzZW5zZSB0byB5b3U/DQo+ID4+DQo+ID4+IENhbGxpbmcgYXN5bmMgdW5yZWdpc3Rl ciBpbiBkZXN0cm95IGRldmljZSBpcyBmaW5lIGJ5IG1lLiBCdXQgSSdtIG1vcmUNCj4gPj4gY29u Y2VybmVkIGFib3V0IERNQSB0cmFuc2F0aW9ucyBub3QgYmVpbmcgc3RvcHBlZCB3aGVuIHRoZSBy aW5nDQo+IGJlY29tZXMNCj4gPj4gZGlzYWJsZWQuDQo+ID4gSWYgcmluZyBiZWNvbWVzIGRpc2Fi bGVkLCBubyBtb3JlIG5ldyBwa3RzIGdvIGludG8gYXN5bmMgZGF0YSBwYXRoLCBhcw0KPiA+IHZp cnRpb19kZXZfcnhfYXN5bmNfc3VibWl0KCkgcmV0dXJucyBpZiB2cS0+ZW5hYmxlZCBpcyBmYWxz ZS4NCj4gPg0KPiA+Pg0KPiA+PiBJIGNhbm5vdCBzYXkgaWYgeW91IGFyZSBkb2luZyBpdCByaWdo dCwgYmVjYXVzZSB0aGUgdmhvc3QgZXhhbXBsZSBkb2VzDQo+ID4+IG5vdCBpbXBsZW1lbnQgdGhl IHZyaW5nX3N0YXRlX2NoYW5nZWQgY2FsbGJhY2suDQo+ID4+IEl0IGlzIG5vdCBhIHByb2JsZW0g d2l0aCB0aGUgc3luYyBkYXRhcGF0aCBhcyB3ZSBoYXZlIHRoZSBsb2NrDQo+ID4+IHByb3RlY3Rp b24gKyBlbmFibGVkIHZhcmlhYmxlIHRoYXQgcHJldmVudHMgdG8gcHJvY2VzcyB0aGUgcmluZ3Mg d2hlbiBpdA0KPiA+PiBnZXRzIHN0b3BwZWQuDQo+ID4+IEJ1dCBmb3IgdGhlIGFzeW5jIHBhdGgs IGlmIHlvdSBoYXZlIHByb2dyYW1tZWQgRE1BIHRyYW5zZmVycywgeW91IG5lZWQNCj4gPj4gdG8g cmVseSBvbiB0aGUgdnJpbmdfc3RhdGVfY2hhbmdlIHRvIGJsb2NrIHRoZSBjb250cm9sIHBhdGgg d2hpbGUgdGhlDQo+ID4+IHRyYW5zZmVycyBhcmUgY2FuY2VsbGVkIG9yIGRvbmUuDQo+ID4NCj4g PiBJIGFtIG5vdCBzdXJlIGlmIEkgdW5kZXJzdGFuZCB5b3VyIGNvbmNlcm4gY29ycmVjdGx5LCBi dXQgZm9yIGFzeW5jIGRhdGENCj4gcGF0aCwNCj4gPiBlbmFibGUgdmFyaWFibGUgY2FuIHByZXZl bnQgaXQgZnJvbSBlbnF1ZXVlIG5ldyBwa3RzIHdoZW4gcmluZyBpcw0KPiBkaXNhYmxlZCwgYXMN Cj4gPiB2aXJ0aW9fZGV2X3J4X2FzeW5jX3N1Ym1pdCgpIGNoZWNrIGVuYWJsZSB2YXJpYWJsZSBi ZWZvcmUgcHJvY2Vzc2luZyByaW5nOw0KPiA+IGluIGFkZGl0aW9uLCBsb2NrIHByb3RlY3Rpb24g Y2FuIHN0b3AgYXN5bmMgZGF0YSBwYXRoIGFzDQo+IHZpcnRpb19kZXZfcnhfYXN5bmNfc3VibWl0 KCkNCj4gPiBhY3F1aXJlcyBsb2NrIHRvby4gRm9yIGV4YW1wbGUsIGluIHRoZSBjYXNlIHRoYXQg ZnJvbnQtZW5kIHVwZGF0ZXMga2lja2ZkLA0KPiA+IHNldF92cmluZ19raWNrKCkgd2lsbCBub3Rp ZnkgYmFja2VuZCB0aGF0IHZyaW5nIGlzIHN0b3BwZWQgYnkgY2FsbGluZw0KPiA+IHZob3N0X3Vz ZXJfbm90aWZ5X3F1ZXVlX3N0YXRlKCkuIEluIHRoaXMgY2FzZSwgc3luYyBkYXRhIHBhdGggd2ls bCBzdG9wIGFzIGENCj4gcmVzdWx0IG9mDQo+ID4gbG9jayBwcm90ZWN0aW9uLCBhbmQgSSB0aGlu ayBpdCdzIHRoZSBzYW1lIGZvciBhc3luYyBkYXRhIHBhdGgsIGFzIGl0IGFjcXVpcmVzDQo+IGxv Y2sgYmVmb3JlDQo+ID4gcHJvY2Vzc2luZyByaW5nLg0KPiANCj4gDQo+IFdoYXQgYWJvdXQgbWVt b3J5IGhvdHBsdWcgaGFwcGVuaW5nIHdoaWxlIHRoZSBETUEgdHJhbnNmZXJzIGFyZSBvbi0NCj4g Z29pbmcNCj4gZm9yIGV4YW1wbGU/DQo+IA0KPiBJbiB0aGlzIGNhc2UsIHRoZSBsb2NrIGlzIGVu b3VnaCBmb3Igc3luYyBkYXRhcGF0aCwgYnV0IGlzIG5vdCBmb3IgYXN5bmMNCj4gb25lLg0KPiAN Cj4gSWYgYSBWSE9TVF9VU0VSX1NFVF9NRU1fVEFCTEUgcmVxdWVzdCBpcyByZWNlaXZlZCB3aGls ZQ0KPiB2aXJ0aW9fZGV2X3J4X2FzeW5jX3N1Ym1pdCgpLCBpdCB3aWxsIGJlIGJsb2NrZWQgdW50 aWwNCj4gdmlydGlvX2Rldl9yeF9hc3luY19zdWJtaXQoKSByZXR1cm5zIGJ1dCB0aGUgRE1BIHRy YW5zZmVycyBtYXkgbm90IGJlDQo+IGZpbmlzaGVkIHlldC4NCj4gV2hlbiB1bmJsb2NrZWQgdGhl IGNvbnRyb2wgdGhyZWFkIHdpbGwgY2FsbCB2aG9zdF91c2VyX3NldF9tZW1fdGFibGUoKSwNCj4g d2hpY2ggd2lsbCBtbnVtYXAgdGhlIGN1cnJlbnQgbWVtb3J5IHJlZ2lvbnMgYmVmb3JlIG1tYXBp bmcgdGhlIG5ldw0KPiBvbmVzIHdoaWxlIERNQSB0cmFuc2ZlcnMgYXJlIG9uLWdvaW5nLg0KPiAN Cj4gVG8gZml4IHRoaXMsIHdlIG5lZWQgdG8gY2FsbCB0aGUgdnJpbmdfc3RhdGVfY2hhbmdlZCBj YWxsYmFjayBmb3IgYWxsDQo+IHRoZSB2aXJ0cXVldWVzIHdpdGggZGlzYWJsZSBzdGF0ZS4gaW4g eW91ciBhcHAsIHlvdSBuZWVkIHRvIHN0b3AgRE1BDQo+IHRyYW5zZmVycyB3aGVuIGRpc2FibGVk IHN0YXRlIG5vdGlmaWNhdGlvbiBoYXBwZW5zLCBvciBibG9jayB0aGUNCj4gY2FsbGJhY2sgd2hp bGUgdGhlIHRyYW5zZmVyIGlzIGRvbmUuDQoNCkxldCBtZSBzdW1tYXJpemUgdGhlIHByb2JsZW06 DQp3aGVuIGZyb250ZW5kIG1lbW9yeSBpcyBob3QtcGx1ZywgaG9zdCBhcHBsaWNhdGlvbiBuZWVk cyB0byBzdG9wDQpETUEgdHJhbnNmZXIgZm9yIGFsbCB2aXJ0cXVldWVzLCB3aGljaCBpcyBkb25l IGJ5IGVtcHR5aW5nIGluLWZsaWdodA0KRE1BIGNvcGllcyBhbmQgdW5yZWdpc3RlciBhc3luYyBp bnNpZGUgdnJpbmdfc3RhdGVfY2hhbmdlZCgpLiBCdXQNCnZob3N0IGxpYnJhcnkgdGFrZXMgbG9j ayBiZWZvcmUgZW50ZXJpbmcgdnJpbmdfc3RhdGVfY2hhbmdlZCgpLCBhbmQNCmFzeW5jIHVucmVn aXN0ZXIgYW5kIHJ0ZV92aG9zdF9wb2xsX2VucXVldWVfY29tcGxldGVkKCkgYm90aA0KYWNxdWly ZSBsb2NrLCBzbyBkZWFkbG9jayBvY2N1cnMgaW5zaWRlIHJ0ZV92aG9zdF9wb2xsX2VucXVldWVf DQpjb21wbGV0ZWQoKSBvciBhc3luYyB1bnJlZ2lzdGVyLiAocGxlYXNlIGNvcnJlY3QgbWUgaWYg YW0gd3JvbmcpDQoNClRoZXJlIG1heSBiZSB0d28gcG9zc2libGUgc29sdXRpb25zOg0KMS4gcmVt b3ZlIGxvY2sgYmVmb3JlIGNhbGxpbmcgdnJpbmdfc3RhdGVfY2hhbmdlKCkgaW4gdmhvc3QgbGli cmFyeTsNCjIuIHByb3ZpZGUgYSBuZXcgY2FsbGJhY2sgd2l0aG91dCBhY3F1aXJpbmcgbG9jayBm b3IgRE1BIGFjY2VsZXJhdGVkDQpjYXNlLiBUaGUgY2FsbGJhY2sgaXMgdXNlZCB0byBub3RpZnkg YmFja2VuZCB0aGF0IHlvdSBuZWVkIHRvIHN0b3ANCkRNQSB0cmFuc2Zlci4NCg0KVGhhbmtzLA0K SmlheXUNCg==