From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Michael S. Tsirkin" Subject: Re: [RFC v2] virtio: support packed ring Date: Tue, 17 Apr 2018 05:37:19 +0300 Message-ID: <20180417053526-mutt-send-email-mst@kernel.org> References: <20180401141216.8969-1-tiwei.bie@intel.com> <20180413071529.f4esh654dakodf4f@debian> <8dee7d62-ac0b-54ba-6bec-4bc4a6fb34e9@redhat.com> <20180417051343-mutt-send-email-mst@kernel.org> <665c828e-6699-7688-cfea-b23b2b0f5fe3@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, virtualization@lists.linux-foundation.org, wexu@redhat.com To: Jason Wang Return-path: Content-Disposition: inline In-Reply-To: <665c828e-6699-7688-cfea-b23b2b0f5fe3@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org List-Id: netdev.vger.kernel.org T24gVHVlLCBBcHIgMTcsIDIwMTggYXQgMTA6MjQ6MzJBTSArMDgwMCwgSmFzb24gV2FuZyB3cm90 ZToKPiAKPiAKPiBPbiAyMDE45bm0MDTmnIgxN+aXpSAxMDoxNywgTWljaGFlbCBTLiBUc2lya2lu IHdyb3RlOgo+ID4gT24gVHVlLCBBcHIgMTcsIDIwMTggYXQgMTA6MTE6NThBTSArMDgwMCwgSmFz b24gV2FuZyB3cm90ZToKPiA+ID4gCj4gPiA+IE9uIDIwMTjlubQwNOaciDEz5pelIDE1OjE1LCBU aXdlaSBCaWUgd3JvdGU6Cj4gPiA+ID4gT24gRnJpLCBBcHIgMTMsIDIwMTggYXQgMTI6MzA6MjRQ TSArMDgwMCwgSmFzb24gV2FuZyB3cm90ZToKPiA+ID4gPiA+IE9uIDIwMTjlubQwNOaciDAx5pel IDIyOjEyLCBUaXdlaSBCaWUgd3JvdGU6Cj4gPiA+ID4gPiA+IEhlbGxvIGV2ZXJ5b25lLAo+ID4g PiA+ID4gPiAKPiA+ID4gPiA+ID4gVGhpcyBSRkMgaW1wbGVtZW50cyBwYWNrZWQgcmluZyBzdXBw b3J0IGZvciB2aXJ0aW8gZHJpdmVyLgo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gVGhlIGNvZGUg d2FzIHRlc3RlZCB3aXRoIERQREsgdmhvc3QgKHRlc3RwbWQvdmhvc3QtUE1EKSBpbXBsZW1lbnRl ZAo+ID4gPiA+ID4gPiBieSBKZW5zIGF0IGh0dHA6Ly9kcGRrLm9yZy9tbC9hcmNoaXZlcy9kZXYv MjAxOC1KYW51YXJ5LzA4OTQxNy5odG1sCj4gPiA+ID4gPiA+IE1pbm9yIGNoYW5nZXMgYXJlIG5l ZWRlZCBmb3IgdGhlIHZob3N0IGNvZGUsIGUuZy4gdG8ga2ljayB0aGUgZ3Vlc3QuCj4gPiA+ID4g PiA+IAo+ID4gPiA+ID4gPiBUT0RPOgo+ID4gPiA+ID4gPiAtIFJlZmluZW1lbnRzIGFuZCBidWcg Zml4ZXM7Cj4gPiA+ID4gPiA+IC0gU3BsaXQgaW50byBzbWFsbCBwYXRjaGVzOwo+ID4gPiA+ID4g PiAtIFRlc3QgaW5kaXJlY3QgZGVzY3JpcHRvciBzdXBwb3J0Owo+ID4gPiA+ID4gPiAtIFRlc3Qv Zml4IGV2ZW50IHN1cHByZXNzaW9uIHN1cHBvcnQ7Cj4gPiA+ID4gPiA+IC0gVGVzdCBkZXZpY2Vz IG90aGVyIHRoYW4gbmV0Owo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gUkZDIHYxIC0+IFJGQyB2 MjoKPiA+ID4gPiA+ID4gLSBBZGQgaW5kaXJlY3QgZGVzY3JpcHRvciBzdXBwb3J0IC0gY29tcGls ZSB0ZXN0IG9ubHk7Cj4gPiA+ID4gPiA+IC0gQWRkIGV2ZW50IHN1cHByZXNzaW9uIHN1cHBydCAt IGNvbXBpbGUgdGVzdCBvbmx5Owo+ID4gPiA+ID4gPiAtIE1vdmUgdnJpbmdfcGFja2VkX2luaXQo KSBvdXQgb2YgdWFwaSAoSmFzb24sIE1TVCk7Cj4gPiA+ID4gPiA+IC0gTWVyZ2UgdHdvIGxvb3Bz IGludG8gb25lIGluIHZpcnRxdWV1ZV9hZGRfcGFja2VkKCkgKEphc29uKTsKPiA+ID4gPiA+ID4g LSBTcGxpdCB2cmluZ191bm1hcF9vbmUoKSBmb3IgcGFja2VkIHJpbmcgYW5kIHNwbGl0IHJpbmcg KEphc29uKTsKPiA+ID4gPiA+ID4gLSBBdm9pZCB1c2luZyAnJScgb3BlcmF0b3IgKEphc29uKTsK PiA+ID4gPiA+ID4gLSBSZW5hbWUgZnJlZV9oZWFkIC0+IG5leHRfYXZhaWxfaWR4IChKYXNvbik7 Cj4gPiA+ID4gPiA+IC0gQWRkIGNvbW1lbnRzIGZvciB2aXJ0aW9fd21iKCkgaW4gdmlydHF1ZXVl X2FkZF9wYWNrZWQoKSAoSmFzb24pOwo+ID4gPiA+ID4gPiAtIFNvbWUgb3RoZXIgcmVmaW5lbWVu dHMgYW5kIGJ1ZyBmaXhlczsKPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+IFRoYW5rcyEKPiA+ID4g PiA+ID4gCj4gPiA+ID4gPiA+IFNpZ25lZC1vZmYtYnk6IFRpd2VpIEJpZSA8dGl3ZWkuYmllQGlu dGVsLmNvbT4KPiA+ID4gPiA+ID4gLS0tCj4gPiA+ID4gPiA+ICAgICBkcml2ZXJzL3ZpcnRpby92 aXJ0aW9fcmluZy5jICAgICAgIHwgMTA5NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0t LS0tLS0KPiA+ID4gPiA+ID4gICAgIGluY2x1ZGUvbGludXgvdmlydGlvX3JpbmcuaCAgICAgICAg fCAgICA4ICstCj4gPiA+ID4gPiA+ICAgICBpbmNsdWRlL3VhcGkvbGludXgvdmlydGlvX2NvbmZp Zy5oIHwgICAxMiArLQo+ID4gPiA+ID4gPiAgICAgaW5jbHVkZS91YXBpL2xpbnV4L3ZpcnRpb19y aW5nLmggICB8ICAgNjEgKysKPiA+ID4gPiA+ID4gICAgIDQgZmlsZXMgY2hhbmdlZCwgOTgwIGlu c2VydGlvbnMoKyksIDE5NSBkZWxldGlvbnMoLSkKPiA+ID4gPiBbLi4uXQo+IAo+IFsuLi5dCj4g Cj4gPiA+ID4gPiBJdCBsb29rcyB0byBtZSB3ZSBzaG91bGQgZXhhbWluZSBSSU5HX0VWRU5UX0ZM QUdTX0RFU0MgaW4gZGVzY19ldmVudF9mbGFncwo+ID4gPiA+ID4gaW5zdGVhZCBvZiB2cS0+ZXZl bnQgaGVyZS4gU3BlYyBkb2VzIG5vdCBmb3JjZXMgdG8gdXNlIGV2ZW5mX29mZiBhbmQKPiA+ID4g PiA+IGV2ZW50X3dyYXAgaWYgZXZlbnQgaW5kZXggaXMgZW5hYmxlZC4KPiA+ID4gPiA+IAo+ID4g PiA+ID4gPiArCQkvLyBGSVhNRTogZml4IHRoaXMhCj4gPiA+ID4gPiA+ICsJCW5lZWRzX2tpY2sg PSAoKG9mZl93cmFwID4+IDE1KSA9PSB2cS0+d3JhcF9jb3VudGVyKSAmJgo+ID4gPiA+ID4gPiAr CQkJICAgICB2cmluZ19uZWVkX2V2ZW50KG9mZl93cmFwICYgfigxPDwxNSksIG5ldywgb2xkKTsK PiA+ID4gPiA+IFdoeSBuZWVkIGEgJiBoZXJlPwo+ID4gPiA+IEJlY2F1c2Ugd3JhcF9jb3VudGVy ICh0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgaW4gb2ZmX3dyYXApCj4gPiA+ID4gaXNuJ3QgcGFy dCBvZiB0aGUgaW5kZXguCj4gPiA+ID4gCj4gPiA+ID4gPiA+ICsJfSBlbHNlIHsKPiA+ID4gPiA+ IE5lZWQgYSBzbXBfcm1iKCkgdG8gbWFrZSBzdXJlIGRlc2NfZXZlbnRfZmxhZ3Mgd2FzIGNoZWNr ZWQgYmVmb3JlIGZsYWdzLgo+ID4gPiA+IEkgZG9uJ3QgZ2V0IHlvdXIgcG9pbnQsIGlmIG15IHVu ZGVyc3RhbmRpbmcgaXMgY29ycmVjdCwKPiA+ID4gPiBkZXNjX2V2ZW50X2ZsYWdzIGlzIHZxLT52 cmluZ19wYWNrZWQuZGV2aWNlLT5mbGFncy4gU28KPiA+ID4gPiB3aGF0J3MgdGhlICJmbGFncyI/ Cj4gPiA+IFNvcnJ5LCBJIG1lYW4gd2UgbmVlZCBjaGVjayBkZXZpY2UuZmxhZ3MgYmVmb3JlIG9m Zl93YXJwLiBTbyBpdCBuZWVkcyBhbgo+ID4gPiBzbXBfcm1iKCkgaW4gdGhlIG1pZGRsZS4KPiA+ IEl0J3MgYmVzdCB0byBqdXN0IHJlYWQgYWxsIGZsYWdzIGF0b21pY2FsbHkgYXMgdTMyLgo+IAo+ IFllcyBpdCBpcy4KPiAKPiA+IAo+ID4gPiBJdCBsb29rcyB0byBtZSB0aGVyZSdzIG5vIGd1YXJh bnRlZSB0aGF0Cj4gPiA+IFZSSU5HX0VWRU5UX0ZfREVTQyBpcyBzZXQgaWYgZXZlbnQgaW5kZXgg aXMgc3VwcG9ydGVkLgo+ID4gPiAKPiA+ID4gPiA+ID4gKwkJbmVlZHNfa2ljayA9ICh2cS0+dnJp bmdfcGFja2VkLmRldmljZS0+ZmxhZ3MgIT0KPiA+ID4gPiA+ID4gKwkJCSAgICAgIGNwdV90b192 aXJ0aW8xNihfdnEtPnZkZXYsIFZSSU5HX0VWRU5UX0ZfRElTQUJMRSkpOwo+ID4gPiA+ID4gPiAr CX0KPiA+ID4gPiA+ID4gKwlFTkRfVVNFKHZxKTsKPiA+ID4gPiA+ID4gKwlyZXR1cm4gbmVlZHNf a2ljazsKPiA+ID4gPiA+ID4gK30KPiA+ID4gPiBbLi4uXQo+ID4gPiA+ID4gPiArc3RhdGljIGlu dCBkZXRhY2hfYnVmX3BhY2tlZChzdHJ1Y3QgdnJpbmdfdmlydHF1ZXVlICp2cSwgdW5zaWduZWQg aW50IGhlYWQsCj4gPiA+ID4gPiA+ICsJCQkgICAgICB2b2lkICoqY3R4KQo+ID4gPiA+ID4gPiAr ewo+ID4gPiA+ID4gPiArCXN0cnVjdCB2cmluZ19wYWNrZWRfZGVzYyAqZGVzYzsKPiA+ID4gPiA+ ID4gKwl1bnNpZ25lZCBpbnQgaSwgajsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArCS8qIENs ZWFyIGRhdGEgcHRyLiAqLwo+ID4gPiA+ID4gPiArCXZxLT5kZXNjX3N0YXRlW2hlYWRdLmRhdGEg PSBOVUxMOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsJaSA9IGhlYWQ7Cj4gPiA+ID4gPiA+ ICsKPiA+ID4gPiA+ID4gKwlmb3IgKGogPSAwOyBqIDwgdnEtPmRlc2Nfc3RhdGVbaGVhZF0ubnVt OyBqKyspIHsKPiA+ID4gPiA+ID4gKwkJZGVzYyA9ICZ2cS0+dnJpbmdfcGFja2VkLmRlc2NbaV07 Cj4gPiA+ID4gPiA+ICsJCXZyaW5nX3VubWFwX29uZV9wYWNrZWQodnEsIGRlc2MpOwo+ID4gPiA+ ID4gPiArCQlkZXNjLT5mbGFncyA9IDB4MDsKPiA+ID4gPiA+IExvb2tzIGxpa2UgdGhpcyBpcyB1 bm5lY2Vzc2FyeS4KPiA+ID4gPiBJdCdzIHNhZmVyIHRvIHplcm8gaXQuIElmIHdlIGRvbid0IHpl cm8gaXQsIGFmdGVyIHdlCj4gPiA+ID4gY2FsbCB2aXJ0cXVldWVfZGV0YWNoX3VudXNlZF9idWZf cGFja2VkKCkgd2hpY2ggY2FsbHMKPiA+ID4gPiB0aGlzIGZ1bmN0aW9uLCB0aGUgZGVzYyBpcyBz dGlsbCBhdmFpbGFibGUgdG8gdGhlCj4gPiA+ID4gZGV2aWNlLgo+ID4gPiBXZWxsIGRldGFjaF91 bnVzZWRfYnVmX3BhY2tlZCgpIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgZGV2aWNlIGlzIHN0b3Bw ZWQsCj4gPiA+IG90aGVyd2lzZSBldmVuIGlmIHlvdSB0cnkgdG8gY2xlYXIsIHRoZXJlIHdpbGwg c3RpbGwgYmUgYSB3aW5kb3cgdGhhdCBkZXZpY2UKPiA+ID4gbWF5IHVzZSBpdC4KPiA+ID4gCj4g PiA+ID4gPiA+ICsJCWkrKzsKPiA+ID4gPiA+ID4gKwkJaWYgKGkgPj0gdnEtPnZyaW5nX3BhY2tl ZC5udW0pCj4gPiA+ID4gPiA+ICsJCQlpID0gMDsKPiA+ID4gPiA+ID4gKwl9Cj4gPiA+ID4gWy4u Ll0KPiA+ID4gPiA+ID4gK3N0YXRpYyB1bnNpZ25lZCB2aXJ0cXVldWVfZW5hYmxlX2NiX3ByZXBh cmVfcGFja2VkKHN0cnVjdCB2aXJ0cXVldWUgKl92cSkKPiA+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ ID4gKwlzdHJ1Y3QgdnJpbmdfdmlydHF1ZXVlICp2cSA9IHRvX3Z2cShfdnEpOwo+ID4gPiA+ID4g PiArCXUxNiBsYXN0X3VzZWRfaWR4LCB3cmFwX2NvdW50ZXIsIG9mZl93cmFwOwo+ID4gPiA+ID4g PiArCj4gPiA+ID4gPiA+ICsJU1RBUlRfVVNFKHZxKTsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4g PiArCWxhc3RfdXNlZF9pZHggPSB2cS0+bGFzdF91c2VkX2lkeDsKPiA+ID4gPiA+ID4gKwl3cmFw X2NvdW50ZXIgPSB2cS0+d3JhcF9jb3VudGVyOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsJ aWYgKGxhc3RfdXNlZF9pZHggPiB2cS0+bmV4dF9hdmFpbF9pZHgpCj4gPiA+ID4gPiA+ICsJCXdy YXBfY291bnRlciBePSAxOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsJb2ZmX3dyYXAgPSBs YXN0X3VzZWRfaWR4IHwgKHdyYXBfY291bnRlciA8PCAxNSk7Cj4gPiA+ID4gPiA+ICsKPiA+ID4g PiA+ID4gKwkvKiBXZSBvcHRpbWlzdGljYWxseSB0dXJuIGJhY2sgb24gaW50ZXJydXB0cywgdGhl biBjaGVjayBpZiB0aGVyZSB3YXMKPiA+ID4gPiA+ID4gKwkgKiBtb3JlIHRvIGRvLiAqLwo+ID4g PiA+ID4gPiArCS8qIERlcGVuZGluZyBvbiB0aGUgVklSVElPX1JJTkdfRl9FVkVOVF9JRFggZmVh dHVyZSwgd2UgbmVlZCB0bwo+ID4gPiA+ID4gPiArCSAqIGVpdGhlciBjbGVhciB0aGUgZmxhZ3Mg Yml0IG9yIHBvaW50IHRoZSBldmVudCBpbmRleCBhdCB0aGUgbmV4dAo+ID4gPiA+ID4gPiArCSAq IGVudHJ5LiBBbHdheXMgZG8gYm90aCB0byBrZWVwIGNvZGUgc2ltcGxlLiAqLwo+ID4gPiA+ID4g PiArCWlmICh2cS0+ZXZlbnRfZmxhZ3Nfc2hhZG93ID09IFZSSU5HX0VWRU5UX0ZfRElTQUJMRSkg ewo+ID4gPiA+ID4gPiArCQl2cS0+ZXZlbnRfZmxhZ3Nfc2hhZG93ID0gdnEtPmV2ZW50ID8gVlJJ TkdfRVZFTlRfRl9ERVNDOgo+ID4gPiA+ID4gPiArCQkJCQkJICAgICBWUklOR19FVkVOVF9GX0VO QUJMRTsKPiA+ID4gPiA+ID4gKwkJdnEtPnZyaW5nX3BhY2tlZC5kcml2ZXItPmZsYWdzID0gY3B1 X3RvX3ZpcnRpbzE2KF92cS0+dmRldiwKPiA+ID4gPiA+ID4gKwkJCQkJCQl2cS0+ZXZlbnRfZmxh Z3Nfc2hhZG93KTsKPiA+ID4gPiA+ID4gKwl9Cj4gPiA+ID4gPiBBIHNtcF93bWIoKSBpcyBtaXNz ZWQgaGVyZT8KPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiArCXZxLT52cmluZ19wYWNrZWQuZHJpdmVy LT5vZmZfd3JhcCA9IGNwdV90b192aXJ0aW8xNihfdnEtPnZkZXYsIG9mZl93cmFwKTsKPiA+ID4g PiA+IEFuZCBhY2NvcmRpbmcgdG8gdGhlIHNwZWMsIGl0IGxvb2tzIHRvIG1lIHdyaXRlIGEgVlJJ TkdfRVZFTlRfRl9FTkFCTEUgaXMKPiA+ID4gPiA+IHN1ZmZpY2llbnQgaGVyZS4KPiA+ID4gPiBJ IGRpZG4ndCB0aGluayBtdWNoIHdoZW4gaW1wbGVtZW50aW5nIHRoZSBldmVudCBzdXBwcmVzc2lv bgo+ID4gPiA+IGZvciBwYWNrZWQgcmluZyBwcmV2aW91c2x5LiBBZnRlciBJIHNhdyB5b3VyIGNv bW1lbnRzLCBJIGZvdW5kCj4gPiA+ID4gc29tZXRoaW5nIG5ldy4gSW5kZWVkLCB1bmxpa2UgdGhl IHNwbGl0IHJpbmcsIGZvciB0aGUgcGFja2VkCj4gPiA+ID4gcmluZywgc3BlYyBkb2Vzbid0IHNh eSB3ZSBtdXN0IHVzZSBWUklOR19FVkVOVF9GX0RFU0Mgd2hlbgo+ID4gPiA+IEVWRU5UX0lEWCBp cyBuZWdvdGlhdGVkLiBTbyBkbyB5b3UgdGhpbmsgYmVsb3cgdGhvdWdodCBpcwo+ID4gPiA+IHJp Z2h0IG9yIG1ha2VzIHNlbnNlPwo+ID4gPiA+IAo+ID4gPiA+IC0gRm9yIHZpcnRxdWV1ZV9lbmFi bGVfY2JfcHJlcGFyZSgpLCB3ZSBqdXN0IG5lZWQgdG8gZW5hYmxlCj4gPiA+ID4gICAgIHRoZSBy aW5nIGJ5IHNldHRpbmcgZmxhZ3MgdG8gVlJJTkdfRVZFTlRfRl9FTkFCTEUgaW4gYW55Cj4gPiA+ ID4gICAgIGNhc2UuCj4gPiA+ID4gCj4gPiA+ID4gLSBXZSB3aWxsIHRyeSB0byB1c2UgVlJJTkdf RVZFTlRfRl9ERVNDIChpZiBFVkVOVF9JRFggaXMKPiA+ID4gPiAgICAgbmVnb3RpYXRlZCkgb25s eSB3aGVuIHdlIHdhbnQgdG8gZGVsYXkgdGhlIGludGVycnVwdHMKPiA+ID4gPiAgICAgdmlydHF1 ZXVlX2VuYWJsZV9jYl9kZWxheWVkKCkuCj4gPiA+IFRoaXMgbG9va3MgZ29vZCB0byBtZS4KPiA+ IEkgc3VzcGVjdCB0aGlzIHdpbGwgbGVhZCB0byBleHRyYSBpbnRlcnJ1cHRzIGlmIGhvc3QgaXMg ZmFzdC4KPiA+IFNvIEkgdGhpbmsgZm9yIG5vdyB3ZSBzaG91bGQgYWx3YXlzIHVzZSBWUklOR19F VkVOVF9GX0RFU0MKPiA+IGlmIEVWRU5UX0lEWCBpcyBuZWdvdGlhdGVkLgo+IAo+IFJpZ2h0LCBz byBpZiB0aGlzIGlzIHRydWUsIG1heWJlIHdlJ2QgYmV0dGVyIGZvcmNlIHRoaXMgaW4gdGhlIHNw ZWM/Cj4gCj4gVGhhbmtzCgpJIGRpZCBjb25zaWRlciB0aGlzLgoKV2h5IGl0IGlzIHRoZSB3YXkg aXQgaXM6CgotIGlmIHdlIGFsbG93IERJU0FCTEUgaXQgc2VlbXMgbmljZXIgdG8gYWxsb3cgRU5B QkxFIGFzIHdlbGwKZm9yIHN5bW1ldHJ5LgoKLSBFTkFCTEUgaXMgaGFuZHkgZm9yIGhhcmR3YXJl IG9mZmxvYWQgZGV2aWNlcwp3aGVyZSBraWNrcyBkbyBub3QgdHJpZ2dlciBhbiBleGl0IHNvIG5v dCB3b3J0aCBib3RoZXIKd2l0aCwgYnV0IGludGVycnVwdHMgc3RpbGwgc2xvdyB0aGUgc3lzdGVt IGRvd24gc28KZXZlbnQgaW5kZXggbWlnaHQgYmUgd29ydGggaXQuCgo+ID4gCj4gPiBWUklOR19F VkVOVF9GX0RJU0FCTEUgbWFrZXMgbW9yZSBzZW5zZSB0byBtZS4KPiA+IAo+IAo+IFsuLi5dCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClZpcnR1YWxpemF0 aW9uIG1haWxpbmcgbGlzdApWaXJ0dWFsaXphdGlvbkBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9y ZwpodHRwczovL2xpc3RzLmxpbnV4Zm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby92aXJ0 dWFsaXphdGlvbg==