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 D2EE941DFF; Tue, 7 Mar 2023 10:57:05 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6C07640E03; Tue, 7 Mar 2023 10:57:05 +0100 (CET) Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by mails.dpdk.org (Postfix) with ESMTP id AB54E4067E for ; Tue, 7 Mar 2023 10:57:02 +0100 (CET) Received: from dggpeml100024.china.huawei.com (unknown [172.30.72.53]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4PW9nW12v6zrS5s; Tue, 7 Mar 2023 17:56:15 +0800 (CST) Received: from frapeml500007.china.huawei.com (7.182.85.172) by dggpeml100024.china.huawei.com (7.185.36.115) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.21; Tue, 7 Mar 2023 17:56:59 +0800 Received: from frapeml500007.china.huawei.com ([7.182.85.172]) by frapeml500007.china.huawei.com ([7.182.85.172]) with mapi id 15.01.2507.021; Tue, 7 Mar 2023 10:56:57 +0100 From: Konstantin Ananyev To: Honnappa Nagarahalli , Konstantin Ananyev , "dev@dpdk.org" , Fengchengwen , "thomas@monjalon.net" , Ferruh Yigit , Andrew Rybchenko , Kalesh AP , "Ajit Khaparde (ajit.khaparde@broadcom.com)" CC: nd , nd Subject: RE: [PATCH 1/5] ethdev: fix race-condition of proactive error handling mode Thread-Topic: [PATCH 1/5] ethdev: fix race-condition of proactive error handling mode Thread-Index: AQHZS+uvQnCnmh+sv0S0/W2/2wgHVa7oFW4AgAAOQYCAAeJVgIACPlMAgAJ/8ACAAFjwsA== Date: Tue, 7 Mar 2023 09:56:57 +0000 Message-ID: References: <20230301030610.49468-1-fengchengwen@huawei.com> <20230301030610.49468-2-fengchengwen@huawei.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.48.149.130] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-CFilter-Loop: Reflected 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 DQoNCj4gPg0KPiA+DQo+ID4gPj4+Pg0KPiA+ID4+Pj4gSW4gdGhlIHByb2FjdGl2ZSBlcnJvciBo YW5kbGluZyBtb2RlLCB0aGUgUE1EIHdpbGwgc2V0IHRoZSBkYXRhDQo+ID4gPj4+PiBwYXRoIHBv aW50ZXJzIHRvIGR1bW15IGZ1bmN0aW9ucyBhbmQgdGhlbiB0cnkgcmVjb3ZlcnksIGluIHRoaXMN Cj4gPiA+Pj4+IHBlcmlvZCB0aGUgYXBwbGljYXRpb24gbWF5IHN0aWxsIGludm9raW5nIGRhdGEg cGF0aCBBUEkuIFRoaXMgd2lsbA0KPiA+ID4+Pj4gaW50cm9kdWNlIGEgcmFjZS1jb25kaXRpb24g d2l0aCBkYXRhIHBhdGggd2hpY2ggbWF5IGxlYWQgdG8gY3Jhc2ggWzFdLg0KPiA+ID4+Pj4NCj4g PiA+Pj4+IEFsdGhvdWdoIHRoZSBQTUQgYWRkZWQgZGVsYXkgYWZ0ZXIgc2V0dGluZyBkYXRhIHBh dGggcG9pbnRlcnMgdG8NCj4gPiA+Pj4+IGNvdmVyIHRoZSBhYm92ZSByYWNlLWNvbmRpdGlvbiwg aXQgcmVkdWNlcyB0aGUgcHJvYmFiaWxpdHksIGJ1dCBpdA0KPiA+ID4+Pj4gZG9lc24ndCBzb2x2 ZSB0aGUgcHJvYmxlbS4NCj4gPiA+Pj4+DQo+ID4gPj4+PiBUbyBzb2x2ZSB0aGUgcmFjZS1jb25k aXRpb24gcHJvYmxlbSBmdW5kYW1lbnRhbGx5LCB0aGUgZm9sbG93aW5nDQo+ID4gPj4+PiByZXF1 aXJlbWVudHMgYXJlIGFkZGVkOg0KPiA+ID4+Pj4gMS4gVGhlIFBNRCBzaG91bGQgc2V0IHRoZSBk YXRhIHBhdGggcG9pbnRlcnMgdG8gZHVtbXkgZnVuY3Rpb25zIGFmdGVyDQo+ID4gPj4+PiAgICAg IHJlcG9ydCBSVEVfRVRIX0VWRU5UX0VSUl9SRUNPVkVSSU5HIGV2ZW50Lg0KPiA+ID4+PiBEbyB5 b3UgbWVhbiB0byBzYXksIFBNRCBzaG91bGQgc2V0IHRoZSBkYXRhIHBhdGggcG9pbnRlcnMgYWZ0 ZXINCj4gPiA+Pj4gY2FsbGluZyB0aGUNCj4gPiA+PiBjYWxsIGJhY2sgZnVuY3Rpb24/DQo+ID4g Pj4+IFRoZSBQTUQgaXMgcnVubmluZyBpbiB0aGUgY29udGV4dCBvZiBtdWx0aXBsZSBFQUwgdGhy ZWFkcy4gSG93IGRvDQo+ID4gPj4+IHRoZXNlDQo+ID4gPj4gdGhyZWFkcyBzeW5jaHJvbml6ZSBz dWNoIHRoYXQgb25seSBvbmUgdGhyZWFkIHNldHMgdGhlc2UgZGF0YSBwb2ludGVycz8NCj4gPiA+ Pg0KPiA+ID4+IEFzIEkgdW5kZXJzdGFuZCB0aGlzIGV2ZW50IGNhbGxiYWNrIHN1cHBvc2VkIHRv IGJlIGNhbGxlZCBpbiB0aGUNCj4gPiA+PiBjb250ZXh0IG9mIEVBTCBpbnRlcnJ1cHQgdGhyZWFk ICh3aG9ldmVyIGlzIG1vcmUgZmFtaWxpYXIgd2l0aA0KPiA+ID4+IG9yaWdpbmFsIGlkZWEsIGZl ZWwgZnJlZSB0byBjb3JyZWN0IG1lIGlmIEkgbWlzc2VkIHNvbWV0aGluZykuDQo+ID4gPiBJIGNv dWxkIG5vdCBmaWd1cmUgdGhpcyBvdXQuIEl0IGxvb2tzIHRvIGJlIGNhbGxlZCBmcm9tIHRoZSBk YXRhIHBsYW5lIHRocmVhZA0KPiA+IGNvbnRleHQuDQo+ID4gPiBJIGFsc28gaGF2ZSBhIHRob3Vn aHQgb24gYWx0ZXJuYXRlIGRlc2lnbiBhdCB0aGUgZW5kLCBhcHByZWNpYXRlIGlmIHlvdSBjYW4N Cj4gPiB0YWtlIGEgbG9vay4NCj4gPiA+DQo+ID4gPj4gSG93IGl0IGlzIGdvaW5nIHRvIHNpZ25h bCBkYXRhLXBhdGggdGhyZWFkcyB0aGF0IHRoZXkgbmVlZCB0bw0KPiA+ID4+IHN0b3Avc3VzcGVu ZCBjYWxsaW5nIGRhdGEtcGF0aCBBUEkgLSB0aGF0J3MgSSBzdXBwb3NlIGlzIGxlZnQgdG8gYXBw bGljYXRpb24NCj4gPiB0byBkZWNpZGUuLi4NCj4gPiA+PiBTYW1lIGFzIHJpZ2h0IG5vdyBpdCBp cyBhcHBsaWNhdGlvbiByZXNwb25zaWJpbGl0eSB0byBzdG9wIGRhdGEtcGF0aA0KPiA+ID4+IHRo cmVhZHMgYmVmb3JlIGRvaW5nIGRldl9zdG9wKCkvZGV2L19jb25maWcoKS9ldGMuDQo+ID4gPiBP aywgZ29vZCwgdGhpcyBleHBlY3RhdGlvbiBpcyBub3QgbmV3LiBUaGUgYXBwbGljYXRpb24gbXVz dCBoYXZlIGENCj4gPiBtZWNoYW5pc20gYWxyZWFkeS4NCj4gPiA+DQo+ID4gPj4NCj4gPiA+Pg0K PiA+ID4+Pg0KPiA+ID4+Pj4gMi4gVGhlIGFwcGxpY2F0aW9uIHNob3VsZCBzdG9wIGRhdGEgcGF0 aCBBUEkgaW52b2NhdGlvbiB3aGVuIHByb2Nlc3MNCj4gPiA+Pj4+ICAgICAgdGhlIFJURV9FVEhf RVZFTlRfRVJSX1JFQ09WRVJJTkcgZXZlbnQuDQo+ID4gPj4+IEFueSB0aG91Z2h0cyBvbiBob3cg YW4gYXBwbGljYXRpb24gY2FuIGRvIHRoaXM/DQo+ID4gPiBXZSBjYW4gaWdub3JlIHRoaXMgcXVl c3Rpb24gYXMgdGhlcmUgaXMgYWxyZWFkeSBzaW1pbGFyIGV4cGVjdGF0aW9uIHNldCBmb3INCj4g PiBlYXJsaWVyIGZ1bmN0aW9uYWxpdGllcy4NCj4gPiA+DQo+ID4gPj4+DQo+ID4gPj4+PiAzLiBU aGUgUE1EIHNob3VsZCBzZXQgdGhlIGRhdGEgcGF0aCBwb2ludGVycyB0byB2YWxpZCBmdW5jdGlv bnMgYmVmb3JlDQo+ID4gPj4+PiAgICAgIHJlcG9ydCBSVEVfRVRIX0VWRU5UX1JFQ09WRVJZX1NV Q0NFU1MgZXZlbnQuDQo+ID4gPj4+PiA0LiBUaGUgYXBwbGljYXRpb24gc2hvdWxkIGVuYWJsZSBk YXRhIHBhdGggQVBJIGludm9jYXRpb24gd2hlbiBwcm9jZXNzDQo+ID4gPj4+PiAgICAgIHRoZSBS VEVfRVRIX0VWRU5UX1JFQ09WRVJZX1NVQ0NFU1MgZXZlbnQuDQo+ID4gPj4+IERvIHlvdSBtZWFu IHRvIHNheSB0aGF0IHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgbm90IGNhbGwgdGhlIGRhdGFwYXRo DQo+ID4gPj4+IEFQSXMNCj4gPiA+PiB3aGlsZSB0aGUgUE1EIGlzIHJ1bm5pbmcgdGhlIHJlY292 ZXJ5IHByb2Nlc3M/DQo+ID4gPj4NCj4gPiA+PiBZZXMsIEkgYmVsaWV2ZSB0aGF0J3MgdGhlIGlu dGVudGlvbi4NCj4gPiA+IE9rLCB0aGlzIGlzIGdvb2QgYW5kIG1ha2VzIHNlbnNlLg0KPiA+ID4N Cj4gPiA+Pg0KPiA+ID4+Pj4NCj4gPiA+Pj4+IEFsc28sIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGEg ZHJpdmVyIGludGVybmFsIGZ1bmN0aW9uDQo+ID4gPj4+PiBydGVfZXRoX2ZwX29wc19zZXR1cCB3 aGljaCB1c2VkIGFzIGFuIGhlbHAgZnVuY3Rpb24gZm9yIFBNRC4NCj4gPiA+Pj4+DQo+ID4gPj4+ PiBbMV0NCj4gPiA+Pj4+DQo+ID4gPj4NCj4gPiBodHRwOi8vcGF0Y2h3b3JrLmRwZGsub3JnL3By b2plY3QvZHBkay9wYXRjaC8yMDIzMDIyMDA2MDgzOS4xMjY3MzQ5LTINCj4gPiA+Pj4+IC0NCj4g PiA+Pj4+IGFzaG9rLmsua2FsYWRpQGludGVsLmNvbS8NCj4gPiA+Pj4+DQo+ID4gPj4+PiBGaXhl czogZWIwZDQ3MWE4OTQxICgiZXRoZGV2OiBhZGQgcHJvYWN0aXZlIGVycm9yIGhhbmRsaW5nIG1v ZGUiKQ0KPiA+ID4+Pj4gQ2M6IHN0YWJsZUBkcGRrLm9yZw0KPiA+ID4+Pj4NCj4gPiA+Pj4+IFNp Z25lZC1vZmYtYnk6IENoZW5nd2VuIEZlbmcgPGZlbmdjaGVuZ3dlbkBodWF3ZWkuY29tPg0KPiA+ ID4+Pj4gLS0tDQo+ID4gPj4+PiAgICBkb2MvZ3VpZGVzL3Byb2dfZ3VpZGUvcG9sbF9tb2RlX2Ry di5yc3QgfCAyMCArKysrKysrLS0tLS0tLS0tDQo+ID4gPj4+PiAgICBsaWIvZXRoZGV2L2V0aGRl dl9kcml2ZXIuYyAgICAgICAgICAgICAgfCAgOCArKysrKysrDQo+ID4gPj4+PiAgICBsaWIvZXRo ZGV2L2V0aGRldl9kcml2ZXIuaCAgICAgICAgICAgICAgfCAxMCArKysrKysrKw0KPiA+ID4+Pj4g ICAgbGliL2V0aGRldi9ydGVfZXRoZGV2LmggICAgICAgICAgICAgICAgIHwgMzIgKysrKysrKysr KysrKysrLS0tLS0tLS0tLQ0KPiA+ID4+Pj4gICAgbGliL2V0aGRldi92ZXJzaW9uLm1hcCAgICAg ICAgICAgICAgICAgIHwgIDEgKw0KPiA+ID4+Pj4gICAgNSBmaWxlcyBjaGFuZ2VkLCA0NiBpbnNl cnRpb25zKCspLCAyNSBkZWxldGlvbnMoLSkNCj4gPiA+Pj4+DQo+ID4gPj4+PiBkaWZmIC0tZ2l0 IGEvZG9jL2d1aWRlcy9wcm9nX2d1aWRlL3BvbGxfbW9kZV9kcnYucnN0DQo+ID4gPj4+PiBiL2Rv Yy9ndWlkZXMvcHJvZ19ndWlkZS9wb2xsX21vZGVfZHJ2LnJzdA0KPiA+ID4+Pj4gaW5kZXggYzE0 NWE5MDY2Yy4uZTM4MGZmMTM1YSAxMDA2NDQNCj4gPiA+Pj4+IC0tLSBhL2RvYy9ndWlkZXMvcHJv Z19ndWlkZS9wb2xsX21vZGVfZHJ2LnJzdA0KPiA+ID4+Pj4gKysrIGIvZG9jL2d1aWRlcy9wcm9n X2d1aWRlL3BvbGxfbW9kZV9kcnYucnN0DQo+ID4gPj4+PiBAQCAtNjM4LDE0ICs2MzgsOSBAQCBk aWZmZXJlbnQgZnJvbSB0aGUgYXBwbGljYXRpb24gaW52b2tlcw0KPiA+ID4+Pj4gcmVjb3Zlcnkg aW4gUEFTU0lWRSBtb2RlLCAgdGhlIFBNRCBhdXRvbWF0aWNhbGx5IHJlY292ZXJzIGZyb20NCj4g PiA+Pj4+IGVycm9yIGluIFBST0FDVElWRSBtb2RlLCAgYW5kIG9ubHkgYSBzbWFsbCBhbW91bnQg b2Ygd29yayBpcw0KPiA+ID4+Pj4gcmVxdWlyZWQgZm9yIHRoZQ0KPiA+ID4+IGFwcGxpY2F0aW9u Lg0KPiA+ID4+Pj4NCj4gPiA+Pj4+IC1EdXJpbmcgZXJyb3IgZGV0ZWN0aW9uIGFuZCBhdXRvbWF0 aWMgcmVjb3ZlcnksIC10aGUgUE1EIHNldHMgdGhlDQo+ID4gPj4+PiBkYXRhIHBhdGggcG9pbnRl cnMgdG8gZHVtbXkgZnVuY3Rpb25zIC0od2hpY2ggd2lsbCBwcmV2ZW50IHRoZQ0KPiA+ID4+Pj4g Y3Jhc2gpLCAtYW5kIGFsc28gbWFrZSBzdXJlIHRoZSBjb250cm9sIHBhdGggb3BlcmF0aW9ucyBm YWlsIHdpdGggYQ0KPiA+ID4+Pj4gcmV0dXJuDQo+ID4gPj4gY29kZSBgYC1FQlVTWWBgLg0KPiA+ ID4+Pj4gLQ0KPiA+ID4+Pj4gLUJlY2F1c2UgdGhlIFBNRCByZWNvdmVycyBhdXRvbWF0aWNhbGx5 LCAtdGhlIGFwcGxpY2F0aW9uIGNhbiBvbmx5DQo+ID4gPj4+PiBzZW5zZSB0aGF0IHRoZSBkYXRh IGZsb3cgaXMgZGlzY29ubmVjdGVkIGZvciBhIHdoaWxlIC1hbmQgdGhlDQo+ID4gPj4+PiBjb250 cm9sIEFQSSByZXR1cm5zIGFuIGVycm9yIGluIHRoaXMgcGVyaW9kLg0KPiA+ID4+Pj4gK0R1cmlu ZyBlcnJvciBkZXRlY3Rpb24gYW5kIGF1dG9tYXRpYyByZWNvdmVyeSwgdGhlIFBNRCBzZXRzIHRo ZQ0KPiA+ID4+Pj4gK2RhdGEgcGF0aCBwb2ludGVycyB0byBkdW1teSBmdW5jdGlvbnMgYW5kIGFs c28gbWFrZSBzdXJlIHRoZQ0KPiA+ID4+Pj4gK2NvbnRyb2wgcGF0aCBvcGVyYXRpb25zIGZhaWxl ZCB3aXRoIGEgcmV0dXJuIGNvZGUgYGAtRUJVU1lgYC4NCj4gPiA+Pj4+DQo+ID4gPj4+PiAgICBJ biBvcmRlciB0byBzZW5zZSB0aGUgZXJyb3IgaGFwcGVuaW5nL3JlY292ZXJpbmcsICBhcyB3ZWxs IGFzIHRvDQo+ID4gPj4+PiByZXN0b3JlIHNvbWUgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uLCBA QCAtNjUzLDkgKzY0OCw5IEBAIHRocmVlDQo+ID4gPj4+PiBldmVudHMNCj4gPiA+PiBhcmUgYXZh aWxhYmxlOg0KPiA+ID4+Pj4NCj4gPiA+Pj4+ICAgIGBgUlRFX0VUSF9FVkVOVF9FUlJfUkVDT1ZF UklOR2BgDQo+ID4gPj4+PiAgICAgICBOb3RpZnkgdGhlIGFwcGxpY2F0aW9uIHRoYXQgYW4gZXJy b3IgaXMgZGV0ZWN0ZWQNCj4gPiA+Pj4+IC0gICBhbmQgdGhlIHJlY292ZXJ5IGlzIGJlaW5nIHN0 YXJ0ZWQuDQo+ID4gPj4+PiArICAgYW5kIHRoZSByZWNvdmVyeSBpcyBhYm91dCB0byBzdGFydC4N Cj4gPiA+Pj4+ICAgICAgIFVwb24gcmVjZWl2aW5nIHRoZSBldmVudCwgdGhlIGFwcGxpY2F0aW9u IHNob3VsZCBub3QgaW52b2tlDQo+ID4gPj4+PiAtICAgYW55IGNvbnRyb2wgcGF0aCBmdW5jdGlv biB1bnRpbCByZWNlaXZpbmcNCj4gPiA+Pj4+ICsgICBhbnkgY29udHJvbCBhbmQgZGF0YSBwYXRo IEFQSSB1bnRpbCByZWNlaXZpbmcNCj4gPiA+Pj4+ICAgICAgIGBgUlRFX0VUSF9FVkVOVF9SRUNP VkVSWV9TVUNDRVNTYGAgb3INCj4gPiA+Pj4+IGBgUlRFX0VUSF9FVkVOVF9SRUNPVkVSWV9GQUlM RURgYCBldmVudC4NCj4gPiA+Pj4+DQo+ID4gPj4+PiAgICAuLiBub3RlOjoNCj4gPiA+Pj4+IEBA IC02NjYsOCArNjYxLDkgQEAgdGhyZWUgZXZlbnRzIGFyZSBhdmFpbGFibGU6DQo+ID4gPj4+Pg0K PiA+ID4+Pj4gICAgYGBSVEVfRVRIX0VWRU5UX1JFQ09WRVJZX1NVQ0NFU1NgYA0KPiA+ID4+Pj4g ICAgICAgTm90aWZ5IHRoZSBhcHBsaWNhdGlvbiB0aGF0IHRoZSByZWNvdmVyeSBmcm9tIGVycm9y IGlzIHN1Y2Nlc3NmdWwsDQo+ID4gPj4+PiAtICAgdGhlIFBNRCBhbHJlYWR5IHJlLWNvbmZpZ3Vy ZXMgdGhlIHBvcnQsDQo+ID4gPj4+PiAtICAgYW5kIHRoZSBlZmZlY3QgaXMgdGhlIHNhbWUgYXMg YSByZXN0YXJ0IG9wZXJhdGlvbi4NCj4gPiA+Pj4+ICsgICB0aGUgUE1EIGFscmVhZHkgcmUtY29u ZmlndXJlcyB0aGUgcG9ydC4NCj4gPiA+Pj4+ICsgICBUaGUgYXBwbGljYXRpb24gc2hvdWxkIHJl c3RvcmUgc29tZSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24sDQo+ID4gPj4+PiArIGFuZCB0aGVu DQo+ID4gPj4+IFdoYXQgaXMgdGhlIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbj8gSXMgdGhpcyBz cGVjaWZpYyB0byBlYWNoIE5JQy9QTUQ/DQo+ID4gPj4+IEkgdGhvdWdodCwgdGhpcyBpcyBhbiBh dXRvIHJlY292ZXJ5IHByb2Nlc3MgYW5kIHRoZSBhcHBsaWNhdGlvbiBkb2VzDQo+ID4gPj4+IG5v dCByZXF1aXJlDQo+ID4gPj4gdG8gcmVjb25maWd1cmUgYW55dGhpbmcuIElmIHRoZSBhcHBsaWNh dGlvbiBoYXMgdG8gcmVzdG9yZSB0aGUNCj4gPiA+PiBjb25maWd1cmF0aW9uLCBob3cgZG9lcyBh dXRvIHJlY292ZXJ5IGRpZmZlciBmcm9tIHR5cGljYWwgcmVjb3ZlcnkNCj4gPiBwcm9jZXNzPw0K PiA+ID4+Pg0KPiA+ID4+Pj4gKyAgIGVuYWJsZSBkYXRhIHBhdGggQVBJIGludm9jYXRpb24uDQo+ ID4gPj4+Pg0KPiA+ID4+Pj4gICAgYGBSVEVfRVRIX0VWRU5UX1JFQ09WRVJZX0ZBSUxFRGBgDQo+ ID4gPj4+PiAgICAgICBOb3RpZnkgdGhlIGFwcGxpY2F0aW9uIHRoYXQgdGhlIHJlY292ZXJ5IGZy b20gZXJyb3IgZmFpbGVkLA0KPiA+ID4+Pj4gZGlmZiAtLWdpdCBhL2xpYi9ldGhkZXYvZXRoZGV2 X2RyaXZlci5jDQo+ID4gPj4+PiBiL2xpYi9ldGhkZXYvZXRoZGV2X2RyaXZlci5jIGluZGV4DQo+ ID4gPj4+PiAwYmUxZThjYTA0Li5mOTk0NjUzZmU5IDEwMDY0NA0KPiA+ID4+Pj4gLS0tIGEvbGli L2V0aGRldi9ldGhkZXZfZHJpdmVyLmMNCj4gPiA+Pj4+ICsrKyBiL2xpYi9ldGhkZXYvZXRoZGV2 X2RyaXZlci5jDQo+ID4gPj4+PiBAQCAtNTE1LDYgKzUxNSwxNCBAQCBydGVfZXRoX2RtYV96b25l X2ZyZWUoY29uc3Qgc3RydWN0DQo+ID4gcnRlX2V0aF9kZXYNCj4gPiA+Pj4+ICpkZXYsIGNvbnN0 IGNoYXIgKnJpbmdfbmFtZSwNCj4gPiA+Pj4+ICAgIAlyZXR1cm4gcmM7DQo+ID4gPj4+PiAgICB9 DQo+ID4gPj4+Pg0KPiA+ID4+Pj4gK3ZvaWQNCj4gPiA+Pj4+ICtydGVfZXRoX2ZwX29wc19zZXR1 cChzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldikgew0KPiA+ID4+Pj4gKwlpZiAoZGV2ID09IE5VTEwp DQo+ID4gPj4+PiArCQlyZXR1cm47DQo+ID4gPj4+PiArCWV0aF9kZXZfZnBfb3BzX3NldHVwKHJ0 ZV9ldGhfZnBfb3BzICsgZGV2LT5kYXRhLT5wb3J0X2lkLCBkZXYpOyB9DQo+ID4gPj4+PiArDQo+ ID4gPj4+PiAgICBjb25zdCBzdHJ1Y3QgcnRlX21lbXpvbmUgKg0KPiA+ID4+Pj4gICAgcnRlX2V0 aF9kbWFfem9uZV9yZXNlcnZlKGNvbnN0IHN0cnVjdCBydGVfZXRoX2RldiAqZGV2LCBjb25zdA0K PiA+ID4+Pj4gY2hhciAqcmluZ19uYW1lLA0KPiA+ID4+Pj4gICAgCQkJIHVpbnQxNl90IHF1ZXVl X2lkLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgaW50IGFsaWduLCBkaWZmDQo+ID4gLQ0KPiA+ID4+ IC1naXQNCj4gPiA+Pj4+IGEvbGliL2V0aGRldi9ldGhkZXZfZHJpdmVyLmggYi9saWIvZXRoZGV2 L2V0aGRldl9kcml2ZXIuaCBpbmRleA0KPiA+ID4+Pj4gMmM5ZDYxNWZiNS4uMGQ5NjRkMWY2NyAx MDA2NDQNCj4gPiA+Pj4+IC0tLSBhL2xpYi9ldGhkZXYvZXRoZGV2X2RyaXZlci5oDQo+ID4gPj4+ PiArKysgYi9saWIvZXRoZGV2L2V0aGRldl9kcml2ZXIuaA0KPiA+ID4+Pj4gQEAgLTE2MjEsNiAr MTYyMSwxNiBAQCBpbnQNCj4gPiA+Pj4+ICAgIHJ0ZV9ldGhfZG1hX3pvbmVfZnJlZShjb25zdCBz dHJ1Y3QgcnRlX2V0aF9kZXYgKmV0aF9kZXYsIGNvbnN0DQo+ID4gPj4+PiBjaGFyICpuYW1lLA0K PiA+ID4+Pj4gICAgCQkgdWludDE2X3QgcXVldWVfaWQpOw0KPiA+ID4+Pj4NCj4gPiA+Pj4+ICsv KioNCj4gPiA+Pj4+ICsgKiBAaW50ZXJuYWwNCj4gPiA+Pj4+ICsgKiBTZXR1cCBldGggZmFzdC1w YXRoIEFQSSB0byBldGhkZXYgdmFsdWVzLg0KPiA+ID4+Pj4gKyAqDQo+ID4gPj4+PiArICogQHBh cmFtIGRldg0KPiA+ID4+Pj4gKyAqICBQb2ludGVyIHRvIHN0cnVjdCBydGVfZXRoX2Rldi4NCj4g PiA+Pj4+ICsgKi8NCj4gPiA+Pj4+ICtfX3J0ZV9pbnRlcm5hbA0KPiA+ID4+Pj4gK3ZvaWQgcnRl X2V0aF9mcF9vcHNfc2V0dXAoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYpOw0KPiA+ID4+Pj4gKw0K PiA+ID4+Pj4gICAgLyoqDQo+ID4gPj4+PiAgICAgKiBAaW50ZXJuYWwNCj4gPiA+Pj4+ICAgICAq IEF0b21pY2FsbHkgc2V0IHRoZSBsaW5rIHN0YXR1cyBmb3IgdGhlIHNwZWNpZmljIGRldmljZS4N Cj4gPiA+Pj4+IGRpZmYgLS1naXQgYS9saWIvZXRoZGV2L3J0ZV9ldGhkZXYuaCBiL2xpYi9ldGhk ZXYvcnRlX2V0aGRldi5oDQo+ID4gPj4+PiBpbmRleA0KPiA+ID4+Pj4gMDQ5NjQxZDU3Yy4uNDRl ZTcyMjljMSAxMDA2NDQNCj4gPiA+Pj4+IC0tLSBhL2xpYi9ldGhkZXYvcnRlX2V0aGRldi5oDQo+ ID4gPj4+PiArKysgYi9saWIvZXRoZGV2L3J0ZV9ldGhkZXYuaA0KPiA+ID4+Pj4gQEAgLTM5NDQs MjUgKzM5NDQsMjggQEAgZW51bSBydGVfZXRoX2V2ZW50X3R5cGUgew0KPiA+ID4+Pj4gICAgCSAq Lw0KPiA+ID4+Pj4gICAgCVJURV9FVEhfRVZFTlRfUlhfQVZBSUxfVEhSRVNILA0KPiA+ID4+Pj4g ICAgCS8qKiBQb3J0IHJlY292ZXJpbmcgZnJvbSBhIGhhcmR3YXJlIG9yIGZpcm13YXJlIGVycm9y Lg0KPiA+ID4+Pj4gLQkgKiBJZiBQTUQgc3VwcG9ydHMgcHJvYWN0aXZlIGVycm9yIHJlY292ZXJ5 LA0KPiA+ID4+Pj4gLQkgKiBpdCBzaG91bGQgdHJpZ2dlciB0aGlzIGV2ZW50IHRvIG5vdGlmeSBh cHBsaWNhdGlvbg0KPiA+ID4+Pj4gLQkgKiB0aGF0IGl0IGRldGVjdGVkIGFuIGVycm9yIGFuZCB0 aGUgcmVjb3ZlcnkgaXMgYmVpbmcgc3RhcnRlZC4NCj4gPiA+Pj4+IC0JICogVXBvbiByZWNlaXZp bmcgdGhlIGV2ZW50LCB0aGUgYXBwbGljYXRpb24gc2hvdWxkIG5vdCBpbnZva2UgYW55DQo+ID4g Pj4+PiBjb250cm9sIHBhdGggQVBJDQo+ID4gPj4+PiAtCSAqIChzdWNoIGFzIHJ0ZV9ldGhfZGV2 X2NvbmZpZ3VyZS9ydGVfZXRoX2Rldl9zdG9wLi4uKSB1bnRpbCByZWNlaXZpbmcNCj4gPiA+Pj4+ IC0JICogUlRFX0VUSF9FVkVOVF9SRUNPVkVSWV9TVUNDRVNTIG9yDQo+ID4gPj4+PiBSVEVfRVRI X0VWRU5UX1JFQ09WRVJZX0ZBSUxFRCBldmVudC4NCj4gPiA+Pj4+IC0JICogVGhlIFBNRCB3aWxs IHNldCB0aGUgZGF0YSBwYXRoIHBvaW50ZXJzIHRvIGR1bW15IGZ1bmN0aW9ucywNCj4gPiA+Pj4+ IC0JICogYW5kIHJlLXNldCB0aGUgZGF0YSBwYXRoIHBvaW50ZXJzIHRvIG5vbi1kdW1teSBmdW5j dGlvbnMNCj4gPiA+Pj4+IC0JICogYmVmb3JlIHJlcG9ydGluZyBSVEVfRVRIX0VWRU5UX1JFQ09W RVJZX1NVQ0NFU1MgZXZlbnQuDQo+ID4gPj4+PiAtCSAqIEl0IG1lYW5zIHRoYXQgdGhlIGFwcGxp Y2F0aW9uIGNhbm5vdCBzZW5kIG9yIHJlY2VpdmUgYW55IHBhY2tldHMNCj4gPiA+Pj4+IC0JICog ZHVyaW5nIHRoaXMgcGVyaW9kLg0KPiA+ID4+Pj4gKwkgKg0KPiA+ID4+Pj4gKwkgKiBJZiBQTUQg c3VwcG9ydHMgcHJvYWN0aXZlIGVycm9yIHJlY292ZXJ5LCBpdCBzaG91bGQgdHJpZ2dlciB0aGlz DQo+ID4gPj4+PiArCSAqIGV2ZW50IHRvIG5vdGlmeSBhcHBsaWNhdGlvbiB0aGF0IGl0IGRldGVj dGVkIGFuIGVycm9yIGFuZCB0aGUNCj4gPiA+Pj4+ICsJICogcmVjb3ZlcnkgaXMgYWJvdXQgdG8g c3RhcnQuDQo+ID4gPj4+PiArCSAqDQo+ID4gPj4+PiArCSAqIFVwb24gcmVjZWl2aW5nIHRoZSBl dmVudCwgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBub3QgaW52b2tlIGFueQ0KPiA+ID4+Pj4gKwkg KiBjb250cm9sIGFuZCBkYXRhIHBhdGggQVBJIHVudGlsIHJlY2VpdmluZw0KPiA+ID4+Pj4gKwkg KiBSVEVfRVRIX0VWRU5UX1JFQ09WRVJZX1NVQ0NFU1Mgb3INCj4gPiA+Pj4+IFJURV9FVEhfRVZF TlRfUkVDT1ZFUllfRkFJTEVEDQo+ID4gPj4+PiArCSAqIGV2ZW50Lg0KPiA+ID4+Pj4gKwkgKg0K PiA+ID4+Pj4gKwkgKiBPbmNlIHRoaXMgZXZlbnQgaXMgcmVwb3J0ZWQsIHRoZSBQTUQgd2lsbCBz ZXQgdGhlIGRhdGEgcGF0aCBwb2ludGVycw0KPiA+ID4+Pj4gKwkgKiB0byBkdW1teSBmdW5jdGlv bnMsIGFuZCByZS1zZXQgdGhlIGRhdGEgcGF0aCBwb2ludGVycyB0byB2YWxpZA0KPiA+ID4+Pj4g KwkgKiBmdW5jdGlvbnMgYmVmb3JlIHJlcG9ydGluZyBSVEVfRVRIX0VWRU5UX1JFQ09WRVJZX1NV Q0NFU1MNCj4gPiA+Pj4+IGV2ZW50Lg0KPiA+ID4+PiBXaHkgZG8gd2UgbmVlZCB0byBzZXQgdGhl IGRhdGEgcGF0aCBwb2ludGVycyB0byBkdW1teSBmdW5jdGlvbnMgaWYNCj4gPiA+Pj4gdGhlDQo+ ID4gPj4gYXBwbGljYXRpb24gaXMgcmVzdHJpY3RlZCBmcm9tIGludm9raW5nIGFueSBjb250cm9s IGFuZCBkYXRhIHBhdGgNCj4gPiA+PiBBUElzIHRpbGwgdGhlIHJlY292ZXJ5IHByb2Nlc3MgaXMg Y29tcGxldGVkPw0KPiA+ID4+DQo+ID4gPj4gWW91IGFyZSByaWdodCwgaW4gdGhlb3J5IGl0IGlz IG5vdCBtYW5kYXRvcnkuDQo+ID4gPj4gVGhvdWdoIGl0IGhlbHBzIHRvIGZsYWcgYSBwcm9ibGVt IGlmIHVzZXIgd2lsbCBzdGlsbCB0cnkgdG8gY2FsbCB0aGVtDQo+ID4gPj4gd2hpbGUgcmVjb3Zl cnkgaXMgaW4gcHJvZ3Jlc3MuDQo+ID4gPiBPaywgbWF5IGJlIGluIGRlYnVnIG1vZGUuDQo+ID4g PiBJIG1lYW4sIHdlIGhhdmUgYWxyZWFkeSBzZXQgYW4gZXhwZWN0YXRpb24gdG8gdGhlIGFwcGxp Y2F0aW9uIHRoYXQgaXQgc2hvdWxkDQo+ID4gbm90IGNhbGwgYW5kIHRoZSBhcHBsaWNhdGlvbiBo YXMgaW1wbGVtZW50ZWQgYSBtZXRob2QgdG8gZG8gdGhlIHNhbWUuIFdoeQ0KPiA+IGRvIHdlIG5l ZWQgdG8gY29tcGxpY2F0ZSB0aGlzPw0KPiA+ID4gSWYgdGhlIGFwcGxpY2F0aW9uIGNhbGxzIHRo ZSBBUElzLCBpdCBpcyBhIHByb2dyYW1taW5nIGVycm9yLg0KPiA+DQo+ID4NCj4gPiBNeSBwcmVm ZXJlbmNlIHdvdWxkIGJlIHRvIGtlZXAgaXQgdGhpcyB3YXkgZm9yIGJvdGggZGVidWcgYW5kIG5v bi1kZWJ1Zw0KPiA+IG1vZGUuDQo+ID4gSXQgZG9lc24ndCBjb3N0IGFueXRoaW5nIHRvIHVzIGlu IHRlcm1zIG9mIHBlcmZvbWFuY2UsIGJ1dCBoZWxwcyB0byBjYXRjaA0KPiA+IHByb2JsZW1zIHdp dGggd3JvbmcgYmVoYXZpbmcgYXBwLg0KPiANCj4gVGhpcyBpcyBhbHNvIGNhdXNpbmcgYSBzeW5j aHJvbml6YXRpb24gcHJvYmxlbS4gaS5lLiBpZiB0aGlzIGhhcyB0byBiZSBkb25lIGNvcnJlY3Rs eSwgd2UgbmVlZCB0byB1c2UgY29ycmVjdCBzeW5jaHJvbml6YXRpb24NCj4gbWVjaGFuaXNtcy4N Cj4gV2UgY2Fubm90IHNldCB0aGUgZnVuY3Rpb24gcG9pbnRlcnMgYW5kIGFzc3VtZSB0aGF0IGRh dGEgd2lsbCBiZSB2aXNpYmxlIHRvIG90aGVyIHRocmVhZHMvY29yZXMgaW4gdGhlIGNvcnJlY3Qg b3JkZXIuDQo+IEEgcG9zc2libGUgbWVjaGFuaXNtICh0aG91Z2ggSSBzZWUgc29tZSBwcm9ibGVt cyB3aXRoIHRoaXMpIGNvdWxkIGJlIHRvIHVzZSBhIGd1YXJkIHZhcmlhYmxlLCB3aGljaCBpbmRp Y2F0ZXMgd2hlbiBpdCBpcyBzYWZlIHRvIHVzZQ0KPiB0aGUgZnVuY3Rpb24gcG9pbnRlcnMgb24g dGhlIGRhdGEgcGxhbmUgdGhyZWFkcy4gVGhpcyB3b3VsZCByZXF1aXJlIGEgbG9hZC1hY3F1aXJl IGluIHRoZSBkYXRhIHBsYW5lIHRocmVhZHMuDQoNCkkgZG8gcmVhbGl6ZSB0aGF0IGl0IGRvZXNu J3QgcHJvdmlkZSBhbnkgc3luY2hyb25pemF0aW9uIGJ5IGl0c2VsZi4gDQpJdCBpcyBqdXN0IGJl c3QgZWZmb3J0IGFwcHJvYWNoIChubyBndWFyYW50ZWUpIHRvIGZsYWcgYSBwb3NzaWJsZSBwcm9i bGVtIHRvIHRoZSBhcHAgZGV2ZWxvcGVyL21haW50YWluZXIsIG5vdGhpbmcgbW9yZS4NCkJ1dCBp dCBzaG93ZWQgaXRzZWxmIHVzZWZ1bGwgYWxyZWFkeSAtIGFzIEkgcmVtZW1iZXIgd2UgY2FjaGVk IGZldyBidWdzIHdpdGggaXQgZm9yIGRldl9zdG9wLCBldGMuDQpQbHVzIGl0IGNvc3RzIHVzIG5v dGhpbmcgaW4gdGVybXMgb2YgcGVyZm9ybWFuY2UsIHNvIHdoeSBub3QgdG8gaGF2ZSBpdC4NCg0K PiA+DQo+ID4gPg0KPiA+ID4+IEFnYWluLCBzYW1lIGFzIHdlIGRvaW5nIGluIGRldl9zdG9wKCku DQo+ID4gPg0KPiA+ID4+DQo+ID4gPj4+DQo+ID4gPj4+PiArCSAqDQo+ID4gPj4+PiAgICAJICog QG5vdGUgQmVmb3JlIHRoZSBQTUQgcmVwb3J0cyB0aGUgcmVjb3ZlcnkgcmVzdWx0LA0KPiA+ID4+ Pj4gICAgCSAqIHRoZSBQTUQgbWF5IHJlcG9ydCB0aGUgUlRFX0VUSF9FVkVOVF9FUlJfUkVDT1ZF UklORyBldmVudA0KPiA+ID4+Pj4gYWdhaW4sDQo+ID4gPj4+PiAgICAJICogYmVjYXVzZSBhIGxh cmdlciBlcnJvciBtYXkgb2NjdXIgZHVyaW5nIHRoZSByZWNvdmVyeS4NCj4gPiA+Pj4+ICAgIAkg Ki8NCj4gPiA+Pj4+ICAgIAlSVEVfRVRIX0VWRU5UX0VSUl9SRUNPVkVSSU5HLA0KPiA+ID4+PiBJ IHVuZGVyc3RhbmQgdGhpcyBpcyBub3QgYSBjaGFuZ2UgaW4gdGhpcyBwYXRjaC4gQnV0LCBqdXN0 DQo+ID4gPj4+IHdvbmRlcmluZywgd2hhdCBpcyB0aGUNCj4gPiA+PiBwdXJwb3NlIG9mIHRoaXM/ IEhvdyBpcyB0aGUgYXBwbGljYXRpb24gc3VwcG9zZWQgdG8gdXNlIHRoaXM/DQo+ID4gPj4+DQo+ ID4gPj4+PiAgICAJLyoqIFBvcnQgcmVjb3ZlcnMgc3VjY2Vzc2Z1bGx5IGZyb20gdGhlIGVycm9y Lg0KPiA+ID4+Pj4gLQkgKiBUaGUgUE1EIGFscmVhZHkgcmUtY29uZmlndXJlZCB0aGUgcG9ydCwN Cj4gPiA+Pj4+IC0JICogYW5kIHRoZSBlZmZlY3QgaXMgdGhlIHNhbWUgYXMgYSByZXN0YXJ0IG9w ZXJhdGlvbi4NCj4gPiA+Pj4+ICsJICoNCj4gPiA+Pj4+ICsJICogVGhlIFBNRCBhbHJlYWR5IHJl LWNvbmZpZ3VyZWQgdGhlIHBvcnQ6DQo+ID4gPj4+PiAgICAJICogYSkgVGhlIGZvbGxvd2luZyBv cGVyYXRpb24gd2lsbCBiZSByZXRhaW5lZDogKGFscGhhYmV0aWNhbGx5KQ0KPiA+ID4+Pj4gICAg CSAqICAgIC0gRENCIGNvbmZpZ3VyYXRpb24NCj4gPiA+Pj4+ICAgIAkgKiAgICAtIEZFQyBjb25m aWd1cmF0aW9uDQo+ID4gPj4+PiBAQCAtMzk4OSw2ICszOTkyLDkgQEAgZW51bSBydGVfZXRoX2V2 ZW50X3R5cGUgew0KPiA+ID4+Pj4gICAgCSAqICAgICAgKEBzZWUgUlRFX0VUSF9ERVZfQ0FQQV9G TE9XX1NIQVJFRF9PQkpFQ1RfS0VFUCkNCj4gPiA+Pj4+ICAgIAkgKiBjKSBBbnkgb3RoZXIgY29u ZmlndXJhdGlvbiB3aWxsIG5vdCBiZSBzdG9yZWQNCj4gPiA+Pj4+ICAgIAkgKiAgICBhbmQgd2ls bCBuZWVkIHRvIGJlIHJlLWNvbmZpZ3VyZWQuDQo+ID4gPj4+PiArCSAqDQo+ID4gPj4+PiArCSAq IFRoZSBhcHBsaWNhdGlvbiBzaG91bGQgcmVzdG9yZSBzb21lIGFkZGl0aW9uYWwgY29uZmlndXJh dGlvbg0KPiA+ID4+Pj4gKwkgKiAoc2VlIGFib3ZlIGNhc2UgYi9jKSwgYW5kIHRoZW4gZW5hYmxl IGRhdGEgcGF0aCBBUEkgaW52b2NhdGlvbi4NCj4gPiA+Pj4+ICAgIAkgKi8NCj4gPiA+Pj4+ICAg IAlSVEVfRVRIX0VWRU5UX1JFQ09WRVJZX1NVQ0NFU1MsDQo+ID4gPj4+PiAgICAJLyoqIFBvcnQg cmVjb3ZlcnkgZmFpbGVkLg0KPiA+ID4+Pj4gZGlmZiAtLWdpdCBhL2xpYi9ldGhkZXYvdmVyc2lv bi5tYXAgYi9saWIvZXRoZGV2L3ZlcnNpb24ubWFwIGluZGV4DQo+ID4gPj4+PiAzNTdkMWE4OGMw Li5jMjczZTBiZGFlIDEwMDY0NA0KPiA+ID4+Pj4gLS0tIGEvbGliL2V0aGRldi92ZXJzaW9uLm1h cA0KPiA+ID4+Pj4gKysrIGIvbGliL2V0aGRldi92ZXJzaW9uLm1hcA0KPiA+ID4+Pj4gQEAgLTMy MCw2ICszMjAsNyBAQCBJTlRFUk5BTCB7DQo+ID4gPj4+PiAgICAJcnRlX2V0aF9kZXZpY2VzOw0K PiA+ID4+Pj4gICAgCXJ0ZV9ldGhfZG1hX3pvbmVfZnJlZTsNCj4gPiA+Pj4+ICAgIAlydGVfZXRo X2RtYV96b25lX3Jlc2VydmU7DQo+ID4gPj4+PiArCXJ0ZV9ldGhfZnBfb3BzX3NldHVwOw0KPiA+ ID4+Pj4gICAgCXJ0ZV9ldGhfaGFpcnBpbl9xdWV1ZV9wZWVyX2JpbmQ7DQo+ID4gPj4+PiAgICAJ cnRlX2V0aF9oYWlycGluX3F1ZXVlX3BlZXJfdW5iaW5kOw0KPiA+ID4+Pj4gICAgCXJ0ZV9ldGhf aGFpcnBpbl9xdWV1ZV9wZWVyX3VwZGF0ZTsNCj4gPiA+Pj4+IC0tDQo+ID4gPj4+PiAyLjE3LjEN Cj4gPiA+Pj4NCj4gPiA+DQo+ID4gPiBJcyB0aGVyZSBhbnkgcmVhc29uIG5vdCB0byBkZXNpZ24g dGhpcyBpbiB0aGUgc2FtZSB3YXkgYXMNCj4gPiAncnRlX2V0aF9kZXZfcmVzZXQnPyBXaHkgZG9l cyB0aGUgUE1EIGhhdmUgdG8gcmVjb3ZlciBieSBpdHNlbGY/DQo+ID4NCj4gPiBJIHN1cHBvc2Ug aXQgaXMgYSBxdWVzdGlvbiBmb3IgdGhlIGF1dGhvcnMgb2Ygb3JpZ2luYWwgcGF0Y2guLi4NCj4g QXBwcmVjaWF0ZSBpZiB0aGUgYXV0aG9ycyBjb3VsZCBjb21tZW50IG9uIHRoaXMuDQo+IA0KPiA+ DQo+ID4gPiBXZSBjb3VsZCBoYXZlIGEgc2ltaWxhciBBUEkgJ3J0ZV9ldGhfZGV2X3JlY292ZXIn IHRvIGRvIHRoZSByZWNvdmVyeQ0KPiA+IGZ1bmN0aW9uYWxpdHkuDQo+ID4NCj4gPiBJIHN1cHBv c2Ugc3VjaCBhcHByb2FjaCBpcyBhbHNvIHBvc3NpYmxlLg0KPiA+IFBlcnNvbmFsbHkgSSBhbSBm aW5lIHdpdGggYm90aCB3YXlzOiBlaXRoZXIgZXhpc3Rpbmcgb25lIG9yIHdoYXQgeW91IHByb3Bv c2UsDQo+ID4gYXMgbG9uZyBhcyB3ZSdsbCBmaXggZXhpc3RpbmcgcmFjZS1jb25kaXRpb24uDQo+ ID4gV2hhdCBpcyBnb29kIHdpdGggd2hhdCB5b3Ugc3VnZ2VzdCAtIHRoYXQgd2F5IHdlIHByb2Jh Ymx5IGRvbid0IG5lZWQgdG8NCj4gPiB3b3JyeSBob3cgdG8gYWxsb3cgdXNlciB0byBlbmFibGUv ZGlzYWJsZSBhdXRvLXJlY292ZXJ5IGluc2lkZSBQTUQuDQo+ID4NCj4gPiBLb25zdGFudGluDQo+ ID4NCg0K