From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 11D6ECF9C6C for ; Mon, 23 Sep 2024 01:05:22 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ssXVI-0006hM-O9; Sun, 22 Sep 2024 21:04:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ssXVG-0006gs-RB for qemu-devel@nongnu.org; Sun, 22 Sep 2024 21:04:38 -0400 Received: from szxga06-in.huawei.com ([45.249.212.32]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ssXVD-0001Zo-Ah for qemu-devel@nongnu.org; Sun, 22 Sep 2024 21:04:38 -0400 Received: from mail.maildlp.com (unknown [172.19.88.234]) by szxga06-in.huawei.com (SkyGuard) with ESMTP id 4XBlBW0q9Kz1ymDV; Mon, 23 Sep 2024 09:04:19 +0800 (CST) Received: from dggpeml100006.china.huawei.com (unknown [7.185.36.169]) by mail.maildlp.com (Postfix) with ESMTPS id F34DD140259; Mon, 23 Sep 2024 09:04:17 +0800 (CST) Received: from dggpemf200006.china.huawei.com (7.185.36.61) by dggpeml100006.china.huawei.com (7.185.36.169) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 23 Sep 2024 09:04:17 +0800 Received: from dggpemf200006.china.huawei.com ([7.185.36.61]) by dggpemf200006.china.huawei.com ([7.185.36.61]) with mapi id 15.02.1544.011; Mon, 23 Sep 2024 09:04:17 +0800 To: Michael Galaxy , "Michael S. Tsirkin" , Peter Xu CC: "qemu-devel@nongnu.org" , "yu.zhang@ionos.com" , "elmar.gerdes@ionos.com" , zhengchuan , "berrange@redhat.com" , "armbru@redhat.com" , "lizhijian@fujitsu.com" , "pbonzini@redhat.com" , Xiexiangyou , "linux-rdma@vger.kernel.org" , "lixiao (H)" , "jinpu.wang@ionos.com" , Wangjialin Subject: RE: [PATCH 0/6] refactor RDMA live migration based on rsocket API Thread-Topic: [PATCH 0/6] refactor RDMA live migration based on rsocket API Thread-Index: AQHatni5B+Psi4bf8k2CmAL8rvKhtrI7iLoAgAALpYCAKMQMgIAA4w2Q Date: Mon, 23 Sep 2024 01:04:17 +0000 Message-ID: <84c74f1a95a648b18c9d41b8c5ef2f60@huawei.com> References: <1717503252-51884-1-git-send-email-arei.gonglei@huawei.com> <20240827165643-mutt-send-email-mst@kernel.org> <027c4f24-f515-4fdb-8770-6bf2433e0f43@akamai.com> In-Reply-To: <027c4f24-f515-4fdb-8770-6bf2433e0f43@akamai.com> Accept-Language: zh-CN, en-US Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.173.124.235] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Received-SPF: pass client-ip=45.249.212.32; envelope-from=arei.gonglei@huawei.com; helo=szxga06-in.huawei.com X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-to: "Gonglei (Arei)" From: "Gonglei (Arei)" via Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org SGksDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTWljaGFlbCBHYWxh eHkgW21haWx0bzptZ2FsYXh5QGFrYW1haS5jb21dDQo+IFNlbnQ6IE1vbmRheSwgU2VwdGVtYmVy IDIzLCAyMDI0IDM6MjkgQU0NCj4gVG86IE1pY2hhZWwgUy4gVHNpcmtpbiA8bXN0QHJlZGhhdC5j b20+OyBQZXRlciBYdSA8cGV0ZXJ4QHJlZGhhdC5jb20+DQo+IENjOiBHb25nbGVpIChBcmVpKSA8 YXJlaS5nb25nbGVpQGh1YXdlaS5jb20+OyBxZW11LWRldmVsQG5vbmdudS5vcmc7DQo+IHl1Lnpo YW5nQGlvbm9zLmNvbTsgZWxtYXIuZ2VyZGVzQGlvbm9zLmNvbTsgemhlbmdjaHVhbg0KPiA8emhl bmdjaHVhbkBodWF3ZWkuY29tPjsgYmVycmFuZ2VAcmVkaGF0LmNvbTsgYXJtYnJ1QHJlZGhhdC5j b207DQo+IGxpemhpamlhbkBmdWppdHN1LmNvbTsgcGJvbnppbmlAcmVkaGF0LmNvbTsgWGlleGlh bmd5b3UNCj4gPHhpZXhpYW5neW91QGh1YXdlaS5jb20+OyBsaW51eC1yZG1hQHZnZXIua2VybmVs Lm9yZzsgbGl4aWFvIChIKQ0KPiA8bGl4aWFvOTFAaHVhd2VpLmNvbT47IGppbnB1LndhbmdAaW9u b3MuY29tOyBXYW5namlhbGluDQo+IDx3YW5namlhbGluMjNAaHVhd2VpLmNvbT4NCj4gU3ViamVj dDogUmU6IFtQQVRDSCAwLzZdIHJlZmFjdG9yIFJETUEgbGl2ZSBtaWdyYXRpb24gYmFzZWQgb24g cnNvY2tldCBBUEkNCj4gDQo+IEhpIEFsbCwNCj4gDQo+IEkgaGF2ZSBtZXQgd2l0aCB0aGUgdGVh bSBmcm9tIElPTk9TIGFib3V0IHRoZWlyIHRlc3Rpbmcgb24gYWN0dWFsIElCDQo+IGhhcmR3YXJl IGhlcmUgYXQgS1ZNIEZvcnVtIHRvZGF5IGFuZCB0aGUgcmVxdWlyZW1lbnRzIGFyZSBzdGFydGlu ZyB0byBtYWtlDQo+IG1vcmUgc2Vuc2UgdG8gbWUuIEkgZGlkbid0IHNheSBtdWNoIGluIG91ciBw cmV2aW91cyB0aHJlYWQgYmVjYXVzZSBJDQo+IG1pc3VuZGVyc3Rvb2QgdGhlIHJlcXVpcmVtZW50 cywgc28gbGV0IG1lIHRyeSB0byBleHBsYWluIGFuZCBzZWUgaWYgd2UncmUgYWxsIG9uDQo+IHRo ZSBzYW1lIHBhZ2UuIFRoZXJlIGFwcGVhcnMgdG8gYmUgYSBmdW5kYW1lbnRhbCBsaW1pdGF0aW9u IGhlcmUgd2l0aCByc29ja2V0LA0KPiBmb3Igd2hpY2ggSSBkb24ndCBzZWUgaG93IGl0IGlzIHBv c3NpYmxlIHRvIG92ZXJjb21lLg0KPiANCj4gVGhlIGJhc2ljIHByb2JsZW0gaXMgdGhhdCByc29j a2V0IGlzIHRyeWluZyB0byBwcmVzZW50IGEgc3RyZWFtIGFic3RyYWN0aW9uLCBhDQo+IGNvbmNl cHQgdGhhdCBpcyBmdW5kYW1lbnRhbGx5IGluY29tcGF0aWJsZSB3aXRoIFJETUEuIFRoZSB3aG9s ZSBwb2ludCBvZg0KPiB1c2luZyBSRE1BIGluIHRoZSBmaXJzdCBwbGFjZSBpcyB0byBhdm9pZCB1 c2luZyB0aGUgQ1BVLCBhbmQgdG8gZG8gdGhhdCwgYWxsIG9mIHRoZQ0KPiBtZW1vcnkgKHBvdGVu dGlhbGx5IGh1bmRyZWRzIG9mIGdpZ2FieXRlcykgbmVlZCB0byBiZSByZWdpc3RlcmVkIHdpdGgg dGhlDQo+IGhhcmR3YXJlICppbiBhZHZhbmNlKiAodGhpcyBpcyBob3cgdGhlIG9yaWdpbmFsIGlt cGxlbWVudGF0aW9uIHdvcmtzKS4NCj4gDQo+IFRoZSBuZWVkIHRvIGZha2UgYSBzb2NrZXQvYnl0 ZXN0cmVhbSBhYnN0cmFjdGlvbiBldmVudHVhbGx5IGJyZWFrcyBkb3duID0+DQo+IFRoZXJlIGlz IGEgbGltaXQgKGEgZmV3IEdCKSBpbiByc29ja2V0ICh3aGljaCB0aGUgSU9OT1MgdGVhbSBwcmV2 aW91cyByZXBvcnRlZA0KPiBpbiB0ZXN0aW5nLi4uLiBzZWUgdGhhdCBlbWFpbCksIGl0IGFwcGVh cnMgdGhhdCBtZWFucyB0aGF0IHJzb2NrZXQgaXMgb25seSBnb2luZyB0bw0KPiBiZSBhYmxlIHRv IG1hcCBhIGNlcnRhaW4gbGltaXRlZCBhbW91bnQgb2YgbWVtb3J5IHdpdGggdGhlIGhhcmR3YXJl IHVudGlsIGl0cw0KPiBpbnRlcm5hbCAiYnVmZmVyIiBydW5zIG91dCBiZWZvcmUgaXQgY2FuIHRo ZW4gdW5tYXAgYW5kIHJlbWFwIHRoZSBuZXh0IGJhdGNoDQo+IG9mIG1lbW9yeSB3aXRoIHRoZSBo YXJkd2FyZSB0byBjb250aW51ZSBhbG9uZyB3aXRoIHRoZSBmYWtlIGJ5dGVzdHJlYW0uIFRoaXMN Cj4gaXMgdmVyeSBtdWNoIHN0aWNraW5nIGEgc3F1YXJlIHBlZyBpbiBhIHJvdW5kIGhvbGUuIElm IHlvdSB3ZXJlIHRvICJyZWxheCIgdGhlDQo+IHJzb2NrZXQgaW1wbGVtZW50YXRpb24gdG8gcmVn aXN0ZXIgdGhlIGVudGlyZSBWTSBtZW1vcnkgc3BhY2UgKGFzIG15DQo+IG9yaWdpbmFsIGltcGxl bWVudGF0aW9uIGRvZXMpLCB0aGVuIHRoZXJlIHdvdWxkbid0IGJlIGFueSBuZWVkIGZvciByc29j a2V0IGluDQo+IHRoZSBmaXJzdCBwbGFjZS4NCj4gDQoNClRoYW5rIHlvdSBmb3IgeW91ciBvcGlu aW9uLiBZb3UncmUgcmlnaHQuIFJTb2NrZXQgaGFzIGVuY291bnRlcmVkIGRpZmZpY3VsdGllcyBp biANCnRyYW5zZmVycmluZyBsYXJnZSBhbW91bnRzIG9mIGRhdGEuIFdlIGhhdmVuJ3QgZXZlbiBm aWd1cmVkIGl0IG91dCB5ZXQuIEFsdGhvdWdoDQppbiB0aGlzIHByYWN0aWNlLCB3ZSBzb2x2ZWQg c2V2ZXJhbCBwcm9ibGVtcyB3aXRoIHJzb2NrZXQuDQoNCkluIG91ciBwcmFjdGljZSwgd2UgbmVl ZCB0byBxdWlja2x5IGNvbXBsZXRlIFZNIGxpdmUgbWlncmF0aW9uIGFuZCB0aGUgZG93bnRpbWUg DQpvZiBsaXZlIG1pZ3JhdGlvbiBtdXN0IGJlIHdpdGhpbiA1MCBtcyBvciBsZXNzLiBUaGVyZWZv cmUsIHdlIHVzZSBSRE1BLCB3aGljaCBpcyANCmFuIGVzc2VudGlhbCByZXF1aXJlbWVudC4gTmV4 dCwgSSB0aGluayB3ZSdsbCBkbyBpdCBiYXNlZCBvbiBRZW11J3MgbmF0aXZlIFJETUEgDQpsaXZl IG1pZ3JhdGlvbiBzb2x1dGlvbi4gRHVyaW5nIHRoaXMgcGVyaW9kLCB3ZSByZWFsbHkgZG91YnRl ZCB3aGV0aGVyIFJETUEgbGl2ZSANCm1pZ3JhdGlvbiB3YXMgcmVhbGx5IGZlYXNpYmxlIHRocm91 Z2ggcnNvY2tldCByZWZhY3RvcmluZywgc28gdGhlIHJlZmFjdG9yaW5nIHBsYW4gDQp3YXMgc2hl bHZlZC4NCg0KDQpSZWdhcmRzLA0KLUdvbmdsZWkNCg0KPiBJIHRoaW5rIHRoZXJlIGlzIGp1c3Qg c29tZSBtaXN1bmRlcnN0YW5kaW5nIGhlcmUgaW4gdGhlIGdyb3VwIGluIHRoZSB3YXkNCj4gaW5m aW5pYmFuZCBpcyBpbnRlbmRlZCB0byB3b3JrLiBEb2VzIHRoYXQgbWFrZSBzZW5zZSBzbyBmYXI/ IEkgZG8gdW5kZXJzdGFuZA0KPiB0aGUgbmVlZCBmb3IgdGVzdGluZywgYnV0IHJzb2NrZXQgaXMg c2ltcGx5IG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGZvciBraW5kIG9mDQo+IG1hc3NpdmUgYnVs ayBkYXRhIHRyYW5zZmVyIHB1cnBvc2VzIHRoYXQgd2UncmUgcHJvcG9zaW5nIHVzaW5nIGl0IGhl cmUgZm9yLA0KPiBzaW1wbHkgZm9yIHRoZSBwdXJwb3NlcyBvZiBtYWtpbmcgb3VyIGxpdmVzIGJl dHRlciBpbiB0ZXN0aW5nLg0KPiANCj4gUmVnYXJkaW5nIHRlc3Rpbmc6IER1cmluZyBvdXIgcHJl dmlvdXMgdGhyZWFkIGVhcmxpZXIgdGhpcyBzdW1tZXIsIHdoeSBkaWQgd2UNCj4gbm90IGNvbnNp ZGVyIG1ha2luZyBhIGJldHRlciBpbnRlZ3JhdGlvbiB0ZXN0IHRvIHNvbHZlIHRoZSB0ZXN0IGJ1 cmRlbiBwcm9ibGVtPw0KPiBUbyBleHBsYWluIGJldHRlcjogSWYgYSBuZXcgaW50ZWdyYXRpb24g dGVzdCB3ZXJlIHdyaXR0ZW4gZm9yIFFFTVUgYW5kDQo+IHN1Ym1pdHRlZCBhbmQgcmV2aWV3ZWQg KGEgcmVhc29uYWJseSBjb21wbGV4IHRlc3QgdGhhdCB3YXMgaW4gbGluZSB3aXRoIGENCj4gdHJh ZGl0aW9uYWwgbGl2ZSBtaWdyYXRpb24gaW50ZWdyYXRpb24gdGVzdCB0aGF0IGFjdHVhbGx5IHNw aW5zIHVwIFFFTVUpIHdoaWNoDQo+IHVzZWQgc29mdFJvQ0UgaW4gYSBsb2NhbGhvc3QgY29uZmln dXJhdGlvbiB0aGF0IGhhcyBmdWxsIGxpYmlidmVyYnMgc3VwcG9ydHMgYW5kDQo+IHN0aWxsIGFs bG93ZWQgZm9yIGNvbXBhdGliaWxpdHkgdGVzdGluZyB3aXRoIFFFTVUsIHdvdWxkIHN1Y2ggYW4g aW50ZWdyYXRpb24gbm90DQo+IGJlIHN1ZmZpY2llbnQgdG8gaGFuZGxlIHRoZSB0ZXN0aW5nIGJ1 cmRlbj8NCj4gDQo+IENvbW1lbnRzIHdlbGNvbWUsDQo+IC0gTWljaGFlbA0KPiANCj4gT24gOC8y Ny8yNCAxNTo1NywgTWljaGFlbCBTLiBUc2lya2luIHdyb3RlOg0KPiA+ICEtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0K PiA+ICAgIFRoaXMgTWVzc2FnZSBJcyBGcm9tIGFuIEV4dGVybmFsIFNlbmRlcg0KPiA+ICAgIFRo aXMgbWVzc2FnZSBjYW1lIGZyb20gb3V0c2lkZSB5b3VyIG9yZ2FuaXphdGlvbi4NCj4gPiB8LS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSENCj4gPg0KPiA+IE9uIFR1ZSwgQXVnIDI3LCAyMDI0IGF0IDA0OjE1OjQyUE0gLTA0 MDAsIFBldGVyIFh1IHdyb3RlOg0KPiA+PiBPbiBUdWUsIEp1biAwNCwgMjAyNCBhdCAwODoxNDow NlBNICswODAwLCBHb25nbGVpIHdyb3RlOg0KPiA+Pj4gRnJvbTogSmlhbGluIFdhbmcgPHdhbmdq aWFsaW4yM0BodWF3ZWkuY29tPg0KPiA+Pj4NCj4gPj4+IEhpLA0KPiA+Pj4NCj4gPj4+IFRoaXMg cGF0Y2ggc2VyaWVzIGF0dGVtcHRzIHRvIHJlZmFjdG9yIFJETUEgbGl2ZSBtaWdyYXRpb24gYnkN Cj4gPj4+IGludHJvZHVjaW5nIGEgbmV3IFFJT0NoYW5uZWxSRE1BIGNsYXNzIGJhc2VkIG9uIHRo ZSByc29ja2V0IEFQSS4NCj4gPj4+DQo+ID4+PiBUaGUgL3Vzci9pbmNsdWRlL3JkbWEvcnNvY2tl dC5oIHByb3ZpZGVzIGEgaGlnaGVyIGxldmVsIHJzb2NrZXQgQVBJDQo+ID4+PiB0aGF0IGlzIGEg MS0xIG1hdGNoIG9mIHRoZSBub3JtYWwga2VybmVsICdzb2NrZXRzJyBBUEksIHdoaWNoIGhpZGVz DQo+ID4+PiB0aGUgZGV0YWlsIG9mIHJkbWEgcHJvdG9jb2wgaW50byByc29ja2V0IGFuZCBhbGxv d3MgdXMgdG8gYWRkDQo+ID4+PiBzdXBwb3J0IGZvciBzb21lIG1vZGVybiBmZWF0dXJlcyBsaWtl IG11bHRpZmQgbW9yZSBlYXNpbHkuDQo+ID4+Pg0KPiA+Pj4gSGVyZSBpcyB0aGUgcHJldmlvdXMg ZGlzY3Vzc2lvbiBvbiByZWZhY3RvcmluZyBSRE1BIGxpdmUgbWlncmF0aW9uDQo+ID4+PiB1c2lu ZyB0aGUgcnNvY2tldCBBUEk6DQo+ID4+Pg0KPiA+Pj4gaHR0cHM6Ly91cmxkZWZlbnNlLmNvbS92 My9fX2h0dHBzOi8vbG9yZS5rZXJuZWwub3JnL3FlbXUtZGV2ZWwvMjAyNDANCj4gPj4+DQo+IDMy ODEzMDI1NS41MjI1Ny0xLXBoaWxtZEBsaW5hcm8ub3JnL19fOyEhR2p2VHpfdmshVHVSYW90Ty15 TWo4Mm8ya1FvDQo+ID4+PiAzeDc0M2pMb0RFbFlnclhtcDJ3T2ZNVHVDUzFZNGsyU29uMVdHc1Ju WkdfWVlTOVpnQlo4dVJIUSQNCj4gPj4+DQo+ID4+PiBXZSBoYXZlIGVuY291bnRlcmVkIHNvbWUg YnVncyB3aGVuIHVzaW5nIHJzb2NrZXQgYW5kIHBsYW4gdG8gc3VibWl0DQo+ID4+PiB0aGVtIHRv IHRoZSByZG1hLWNvcmUgY29tbXVuaXR5Lg0KPiA+Pj4NCj4gPj4+IEluIGFkZGl0aW9uLCB0aGUg dXNlIG9mIHJzb2NrZXQgbWFrZXMgb3VyIHByb2dyYW1taW5nIG1vcmUNCj4gPj4+IGNvbnZlbmll bnQsIGJ1dCBpdCBtdXN0IGJlIG5vdGVkIHRoYXQgdGhpcyBtZXRob2QgaW50cm9kdWNlcw0KPiA+ Pj4gbXVsdGlwbGUgbWVtb3J5IGNvcGllcywgd2hpY2ggY2FuIGJlIGltYWdpbmVkIHRoYXQgdGhl cmUgd2lsbCBiZSBhDQo+ID4+PiBjZXJ0YWluIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uLCBob3Bp bmcgdGhhdCBmcmllbmRzIHdpdGggUkRNQSBuZXR3b3JrDQo+IGNhcmRzIGNhbiBoZWxwIHZlcmlm eSwgdGhhbmsgeW91IQ0KPiA+Pj4NCj4gPj4+IEppYWxpbiBXYW5nICg2KToNCj4gPj4+ICAgIG1p Z3JhdGlvbjogcmVtb3ZlIFJETUEgbGl2ZSBtaWdyYXRpb24gdGVtcG9yYXJpbHkNCj4gPj4+ICAg IGlvOiBhZGQgUUlPQ2hhbm5lbFJETUEgY2xhc3MNCj4gPj4+ICAgIGlvL2NoYW5uZWwtcmRtYTog c3VwcG9ydCB3b3JraW5nIGluIGNvcm91dGluZQ0KPiA+Pj4gICAgdGVzdHMvdW5pdDogYWRkIHRl c3QtaW8tY2hhbm5lbC1yZG1hLmMNCj4gPj4+ICAgIG1pZ3JhdGlvbjogaW50cm9kdWNlIG5ldyBS RE1BIGxpdmUgbWlncmF0aW9uDQo+ID4+PiAgICBtaWdyYXRpb24vcmRtYTogc3VwcG9ydCBtdWx0 aWZkIGZvciBSRE1BIG1pZ3JhdGlvbg0KPiA+PiBUaGlzIHNlcmllcyBoYXMgYmVlbiBpZGxlIGZv ciBhIHdoaWxlOyB3ZSBzdGlsbCBuZWVkIHRvIGtub3cgaG93IHRvDQo+ID4+IG1vdmUgZm9yd2Fy ZC4NCj4gPg0KPiA+IFdoYXQgZXhhY3RseSBpcyB0aGUgcXVlc3Rpb24/IFRoaXMgZ290IGEgYnVu Y2ggb2YgY29tbWVudHMsIHRoZSBmaXJzdA0KPiA+IHRoaW5nIHRvIGRvIHdvdWxkIGJlIHRvIGFk ZHJlc3MgdGhlbS4NCj4gPg0KPiA+DQo+ID4+ICAgSSBndWVzcyBJIGxvc3QgdGhlIGxhdGVzdCBz dGF0dXMgcXVvLi4NCj4gPj4NCj4gPj4gQW55IHVwZGF0ZSAoZnJvbSBhbnlvbmUuLikgb24gd2hh dCBzdGFnZSBhcmUgd2UgaW4/DQo+ID4+DQo+ID4+IFRoYW5rcywNCj4gPj4gLS0NCj4gPj4gUGV0 ZXIgWHUNCg0K