From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Yu, Zhang" Subject: Re: [PATCH v2 3/3] x86/ioreq server: Add HVMOP to map guest ram with p2m_ioreq_server to an ioreq server Date: Tue, 12 Apr 2016 17:37:38 +0800 Message-ID: <570CC1E2.1010408@linux.intel.com> References: <1459421618-5991-1-git-send-email-yu.c.zhang@linux.intel.com> <1459421618-5991-4-git-send-email-yu.c.zhang@linux.intel.com> <57083EA202000078000E623A@prv-mh.provo.novell.com> <570B871E.7040703@linux.intel.com> <570BDF8E02000078000E63F1@prv-mh.provo.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <570BDF8E02000078000E63F1@prv-mh.provo.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Jan Beulich , Paul Durrant Cc: Kevin Tian , Keir Fraser , George Dunlap , Andrew Cooper , Tim Deegan , xen-devel@lists.xen.org, zhiyuan.lv@intel.com, Jun Nakajima List-Id: xen-devel@lists.xenproject.org CgpPbiA0LzEyLzIwMTYgMTI6MzEgQU0sIEphbiBCZXVsaWNoIHdyb3RlOgo+Pj4+IE9uIDExLjA0 LjE2IGF0IDEzOjE0LCA8eXUuYy56aGFuZ0BsaW51eC5pbnRlbC5jb20+IHdyb3RlOgo+PiBPbiA0 LzkvMjAxNiA2OjI4IEFNLCBKYW4gQmV1bGljaCB3cm90ZToKPj4+Pj4+IE9uIDMxLjAzLjE2IGF0 IDEyOjUzLCA8eXUuYy56aGFuZ0BsaW51eC5pbnRlbC5jb20+IHdyb3RlOgo+Pj4+IEBAIC0xNjgs MTMgKzIyNiw3MiBAQCBzdGF0aWMgaW50IGh2bWVtdWxfZG9faW8oCj4+Pj4gICAgICAgICAgICBi cmVhazsKPj4+PiAgICAgICAgY2FzZSBYODZFTVVMX1VOSEFORExFQUJMRToKPj4+PiAgICAgICAg ewo+Pj4+IC0gICAgICAgIHN0cnVjdCBodm1faW9yZXFfc2VydmVyICpzID0KPj4+PiAtICAgICAg ICAgICAgaHZtX3NlbGVjdF9pb3JlcV9zZXJ2ZXIoY3Vyci0+ZG9tYWluLCAmcCk7Cj4+Pj4gKyAg ICAgICAgc3RydWN0IGh2bV9pb3JlcV9zZXJ2ZXIgKnM7Cj4+Pj4gKyAgICAgICAgcDJtX3R5cGVf dCBwMm10Owo+Pj4+ICsKPj4+PiArICAgICAgICBpZiAoIGlzX21taW8gKQo+Pj4+ICsgICAgICAg IHsKPj4+PiArICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBnbWZuID0gcGFkZHJfdG9fcGZuKGFk ZHIpOwo+Pj4+ICsKPj4+PiArICAgICAgICAgICAgKHZvaWQpIGdldF9nZm5fcXVlcnlfdW5sb2Nr ZWQoY3VycmQsIGdtZm4sICZwMm10KTsKPj4+PiArCj4+Pj4gKyAgICAgICAgICAgIHN3aXRjaCAo IHAybXQgKQo+Pj4+ICsgICAgICAgICAgICB7Cj4+Pj4gKyAgICAgICAgICAgICAgICBjYXNlIHAy bV9pb3JlcV9zZXJ2ZXI6Cj4+Pj4gKyAgICAgICAgICAgICAgICB7Cj4+Pj4gKyAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKPj4+PiArCj4+Pj4gKyAgICAgICAgICAgICAg ICAgICAgcDJtX2dldF9pb3JlcV9zZXJ2ZXIoY3VycmQsICZmbGFncywgJnMpOwo+Pj4KPj4+IEFz IHRoZSBmdW5jdGlvbiBhcHBhcmVudGx5IHJldHVybnMgbm8gdmFsdWUgcmlnaHQgbm93LCBwbGVh c2UgYXZvaWQKPj4+IHRoZSBpbmRpcmVjdGlvbiBvbiBib3RoIHZhbHVlcyB5b3UncmUgYWZ0ZXIg LSBvbmUgb2YgdGhlIHR3bwo+Pj4gKHByZXN1bWFibHkgcykgY2FuIGJlIHRoZSBmdW5jdGlvbidz IHJldHVybiB2YWx1ZS4KPj4KPj4gV2VsbCwgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBwMm1f Z2V0X2lvcmVxX3NlcnZlcigpIGhhcyBzcGluX2xvY2svCj4+IHNwaW5fdW5sb2NrIHN1cnJvdW5k aW5nIHRoZSByZWFkaW5nIG9mIGZsYWdzIGFuZCB0aGUgcywgYnV0IEkgYmVsaWV2ZQo+PiB3ZSBj YW4gYWxzbyB1c2UgdGhlIHMgYXMgcmV0dXJuIHZhbHVlLgo+Cj4gVGhlIHVzZSBvZiBhIGxvY2sg aW5zaWRlIHRoZSBmdW5jdGlvbiBoYXMgbm90aGluZyB0byBkbyB3aXRoIGhvdyBpdAo+IHJldHVy bnMgdmFsdWVzIHRvIHRoZSBjYWxsZXIuCj4KCkFncmVlLiBJJ2xsIHVzZSBzIGFzIHJldHVybiB2 YWx1ZSB0aGVuLgoKPj4+PiAgICAgICAgICAgIC8qIElmIHRoZXJlIGlzIG5vIHN1aXRhYmxlIGJh Y2tpbmcgRE0sIGp1c3QgaWdub3JlIGFjY2Vzc2VzICovCj4+Pj4gICAgICAgICAgICBpZiAoICFz ICkKPj4+PiAgICAgICAgICAgIHsKPj4+PiAtICAgICAgICAgICAgcmMgPSBodm1fcHJvY2Vzc19p b19pbnRlcmNlcHQoJm51bGxfaGFuZGxlciwgJnApOwo+Pj4+ICsgICAgICAgICAgICBzd2l0Y2gg KCBwMm10ICkKPj4+PiArICAgICAgICAgICAgewo+Pj4+ICsgICAgICAgICAgICBjYXNlIHAybV9p b3JlcV9zZXJ2ZXI6Cj4+Pj4gKyAgICAgICAgICAgIC8qCj4+Pj4gKyAgICAgICAgICAgICAqIFJh Y2UgY29uZGl0aW9ucyBtYXkgZXhpc3Qgd2hlbiBhY2Nlc3MgdG8gYSBnZm4gd2l0aAo+Pj4+ICsg ICAgICAgICAgICAgKiBwMm1faW9yZXFfc2VydmVyIGlzIGludGVyY2VwdGVkIGJ5IGh5cGVydmlz b3IsIGR1cmluZwo+Pj4+ICsgICAgICAgICAgICAgKiB3aGljaCB0aW1lIHAybSB0eXBlIG9mIHRo aXMgZ2ZuIGlzIHJlY2FsY3VsYXRlZCBiYWNrCj4+Pj4gKyAgICAgICAgICAgICAqIHRvIHAybV9y YW1fcncuIG1lbV9oYW5kbGVyIGlzIHVzZWQgdG8gaGFuZGxlIHRoaXMKPj4+PiArICAgICAgICAg ICAgICogY29ybmVyIGNhc2UuCj4+Pj4gKyAgICAgICAgICAgICAqLwo+Pj4KPj4+IE5vdyBpZiB0 aGVyZSBpcyBzdWNoIGEgcmFjZSBjb25kaXRpb24sIHRoZSByYWNlIGNvdWxkIGFsc28gYmUgd2l0 aCBhCj4+PiBwYWdlIGNoYW5naW5nIGZpcnN0IHRvIHJhbV9ydyBhbmQgdGhlbiBpbW1lZGlhdGVs eSBmdXJ0aGVyIHRvIGUuZy4KPj4+IHJhbV9yby4gU2VlIHRoZSBlYXJsaWVyIGNvbW1lbnQgYWJv dXQgYXNzdW1pbmcgdGhlIHBhZ2UgdG8gYmUKPj4+IHdyaXRhYmxlLgo+Pj4KPj4KPj4gVGhhbmtz LCBKYW4uIEFmdGVyIHJlY2hlY2tpbmcgdGhlIGNvZGUsIEkgc3VwcG9zZSB0aGUgcmFjZSBjb25k aXRpb24KPj4gd2lsbCBub3QgaGFwcGVuLiBJbiBodm1lbXVsX2RvX2lvKCksIGdldF9nZm5fcXVl cnlfdW5sb2NrZWQoKSBpcyB1c2VkCj4+IHRvIHBlZWsgdGhlIHAybXQgZm9yIHRoZSBnZm4sIGJ1 dCBnZXRfZ2ZuX3R5cGVfYWNjZXNzKCkgaXMgY2FsbGVkIGluc2lkZQo+PiBodm1faGFwX25lc3Rl ZF9wYWdlX2ZhdWx0KCksIGFuZCB0aGlzIHdpbGwgZ3VhcmFudGVlIG5vIHAybSBjaGFuZ2Ugc2hh bGwKPj4gb2NjdXIgZHVyaW5nIHRoZSBlbXVsYXRpb24uCj4+IElzIHRoaXMgdW5kZXJzdGFuZGlu ZyBjb3JyZWN0Pwo+Cj4gQWgsIHllcywgSSB0aGluayBzby4gU28gdGhlIGNvbW1lbnQgaXMgbWlz bGVhZGluZy4KPgoKSSdsbCByZW1vdmUgdGhlIGNvbW1lbnQsIHRvZ2V0aGVyIHdpdGggdGhlIHAy bV9yYW1fcncgY2FzZS4gVGhhbmtzLiA6KQoKPj4+PiArc3RhdGljIGludCBodm1fbWFwX21lbV90 eXBlX3RvX2lvcmVxX3NlcnZlcihzdHJ1Y3QgZG9tYWluICpkLAo+Pj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc2VydmlkX3QgaWQsCj4+Pj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHZtbWVtX3R5cGVfdCB0eXBl LAo+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQz Ml90IGZsYWdzKQo+Pj4+ICt7Cj4+Pj4gKyAgICBzdHJ1Y3QgaHZtX2lvcmVxX3NlcnZlciAqczsK Pj4+PiArICAgIGludCByYzsKPj4+PiArCj4+Pj4gKyAgICAvKiBGb3Igbm93LCBvbmx5IEhWTU1F TV9pb3JlcV9zZXJ2ZXIgaXMgc3VwcG9ydGVkICovCj4+Pj4gKyAgICBpZiAoIHR5cGUgIT0gSFZN TUVNX2lvcmVxX3NlcnZlciApCj4+Pj4gKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+Pj4gKwo+ Pj4+ICsgICAgaWYgKCBmbGFncyAmIH4oSFZNT1BfSU9SRVFfTUVNX0FDQ0VTU19SRUFEIHwKPj4+ PiArICAgICAgICAgICAgICAgICAgIEhWTU9QX0lPUkVRX01FTV9BQ0NFU1NfV1JJVEUpICkKPj4+ PiArICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4+PiArCj4+Pj4gKyAgICBzcGluX2xvY2soJmQt PmFyY2guaHZtX2RvbWFpbi5pb3JlcV9zZXJ2ZXIubG9jayk7Cj4+Pj4gKwo+Pj4+ICsgICAgcmMg PSAtRU5PRU5UOwo+Pj4+ICsgICAgbGlzdF9mb3JfZWFjaF9lbnRyeSAoIHMsCj4+Pj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgJmQtPmFyY2guaHZtX2RvbWFpbi5pb3JlcV9zZXJ2ZXIubGlz dCwKPj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0X2VudHJ5ICkKPj4+PiArICAg IHsKPj4+PiArICAgICAgICBpZiAoIHMgPT0gZC0+YXJjaC5odm1fZG9tYWluLmRlZmF1bHRfaW9y ZXFfc2VydmVyICkKPj4+PiArICAgICAgICAgICAgY29udGludWU7Cj4+Pj4gKwo+Pj4+ICsgICAg ICAgIGlmICggcy0+aWQgPT0gaWQgKQo+Pj4+ICsgICAgICAgIHsKPj4+PiArICAgICAgICAgICAg cmMgPSBwMm1fc2V0X2lvcmVxX3NlcnZlcihkLCBmbGFncywgcyk7Cj4+Pj4gKyAgICAgICAgICAg IGlmICggcmMgPT0gMCApCj4+Pj4gKyAgICAgICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfREVC VUcsICIldSAlcyB0eXBlIEhWTU1FTV9pb3JlcV9zZXJ2ZXIuXG4iLAo+Pj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgcy0+aWQsIChmbGFncyAhPSAwKSA/ICJtYXBwZWQgdG8iIDogInVubWFw cGVkIGZyb20iKTsKPj4+Cj4+PiBXaHkgZ2RwcmludGsoKT8gSSBkb24ndCB0aGluayB0aGUgY3Vy cmVudCBkb21haW4gaXMgb2YgbXVjaAo+Pj4gaW50ZXJlc3QgaGVyZS4gV2hhdCB3b3VsZCBiZSBv ZiBpbnRlcmVzdCBpcyB0aGUgc3ViamVjdCBkb21haW4uCj4+Pgo+Pgo+PiBzLT5pZCBpcyBub3Qg dGhlIGRvbWFpbl9pZCwgYnV0IGlkIG9mIHRoZSBpb3JlcSBzZXJ2ZXIuCj4KPiBUaGF0J3MgdW5k ZXJzdG9vZC4gQnV0IGdkcHJpbnRrKCkgaXRzZWxmIGxvZ3MgdGhlIGN1cnJlbnQgZG9tYWluLAo+ IHdoaWNoIGlzbid0IGFzIHVzZWZ1bCBhcyB0aGUgc3ViamVjdCBvbmUuCj4KCk9oLCBJIHNlZS4g U28gdGhlIGNvcnJlY3Qgcm91dGluZSBoZXJlIHNob3VsZCBiZSBkcHJpbnRrKCksIHJpZ2h0PwoK Pj4+PiAtLS0gYS94ZW4vYXJjaC94ODYvbW0vcDJtLWVwdC5jCj4+Pj4gKysrIGIveGVuL2FyY2gv eDg2L21tL3AybS1lcHQuYwo+Pj4+IEBAIC0xMzIsNiArMTMyLDE5IEBAIHN0YXRpYyB2b2lkIGVw dF9wMm1fdHlwZV90b19mbGFncyhzdHJ1Y3QgcDJtX2RvbWFpbgo+Pj4+ICpwMm0sIGVwdF9lbnRy eV90ICplbnRyeSwKPj4+PiAgICAgICAgICAgICAgICBlbnRyeS0+ciA9IGVudHJ5LT53ID0gZW50 cnktPnggPSAxOwo+Pj4+ICAgICAgICAgICAgICAgIGVudHJ5LT5hID0gZW50cnktPmQgPSAhIWNw dV9oYXNfdm14X2VwdF9hZDsKPj4+PiAgICAgICAgICAgICAgICBicmVhazsKPj4+PiArICAgICAg ICBjYXNlIHAybV9pb3JlcV9zZXJ2ZXI6Cj4+Pj4gKyAgICAgICAgICAgIGVudHJ5LT5yID0gIShw Mm0tPmlvcmVxLmZsYWdzICYgUDJNX0lPUkVRX0hBTkRMRV9SRUFEX0FDQ0VTUyk7Cj4+Pj4gKwkg ICAgLyoKPj4+PiArCSAgICAgKiB3cml0ZSBhY2Nlc3MgcmlnaHQgaXMgZGlzYWJsZWQgd2hlbiBl bnRyeS0+ciBpcyAwLCBidXQgd2hldGhlcgo+Pj4+ICsJICAgICAqIHdyaXRlIGFjY2Vzc2VzIGFy ZSBlbXVsYXRlZCBieSBoeXBlcnZpc29yIG9yIGZvcndhcmRlZCB0byBhbgo+Pj4+ICsJICAgICAq IGlvcmVxIHNlcnZlciBkZXBlbmRzIG9uIHRoZSBzZXR0aW5nIG9mIHAybS0+aW9yZXEuZmxhZ3Mu Cj4+Pj4gKwkgICAgICovCj4+Pj4gKyAgICAgICAgICAgIGVudHJ5LT53ID0gKGVudHJ5LT5yICYm Cj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICEocDJtLT5pb3JlcS5mbGFncyAmIFAyTV9J T1JFUV9IQU5ETEVfV1JJVEVfQUNDRVNTKSk7Cj4+Pj4gKyAgICAgICAgICAgIGVudHJ5LT54ID0g ZW50cnktPnI7Cj4+Pgo+Pj4gV2h5IHdvdWxkIHdlIHdhbnQgdG8gYWxsb3cgaW5zdHJ1Y3Rpb24g ZXhlY3V0aW9uIGZyb20gc3VjaCBwYWdlcz8KPj4+IEFuZCB3aXRoIGFsbCB0aHJlZSBiaXRzIG5v dyBwb3NzaWJseSBiZWluZyBjbGVhciwgYXJlbid0IHdlIHJpc2tpbmcgdGhlCj4+PiBlbnRyaWVz IHRvIGJlIG1pcy10cmVhdGVkIGFzIG5vdC1wcmVzZW50IG9uZXM/Cj4+Pgo+Pgo+PiBIYWguIFlv dSBnb3QgbWUuIFRoYW5rcyEgOikKPj4gTm93IEkgcmVhbGl6ZWQgaXQgd291bGQgYmUgZGlmZmlj dWx0IGlmIHdlIHdhbm5hIHRvIGVtdWxhdGUgdGhlIHJlYWQKPj4gb3BlcmF0aW9ucyBmb3IgSFZN LiBBY2NvcmRpbmcgdG8gSW50ZWwgbWFubnVhbCwgZW50cnktPnIgaXMgdG8gYmUKPj4gY2xlYXJl ZCwgc28gc2hvdWxkIGVudHJ5LT53IGlmIHdlIGRvIG5vdCB3YW50IGVwdCBtaXNjb25maWcuIEFu ZAo+PiB3aXRoIGJvdGggcmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbnMgYmVpbmcgZm9yYmlkZGVu LCBlbnRyeS0+eCBjYW4gYmUKPj4gc2V0IG9ubHkgb24gcHJvY2Vzc29ycyB3aXRoIEVYRUNVVEVf T05MWSBjYXBhYmlsaXR5Lgo+PiBUbyBhdm9pZCBhbnkgZW50cnkgdG8gYmUgbWlzLXRyZWF0ZWQg YXMgbm90LXByZXNlbnQuIFdlIGhhdmUgc2V2ZXJhbAo+PiBzb2x1dGlvbnM6Cj4+IGE+IGRvIG5v dCBzdXBwb3J0IHRoZSByZWFkIGVtdWxhdGlvbiBmb3Igbm93IC0gd2UgaGF2ZSBubyBzdWNoIHVz YWdlCj4+IGNhc2U7Cj4+IGI+IGFkZCB0aGUgY2hlY2sgb2YgcDJtX3QgYWdhaW5zdCBwMm1faW9y ZXFfc2VydmVyIGluIGlzX2VwdGVfcHJlc2VudCAtCj4+IGEgYml0IHdlaXJkIHRvIG1lLgo+PiBX aGljaCBvbmUgZG8geW91IHByZWZlcj8gb3IgYW55IG90aGVyIHN1Z2dlc3Rpb25zPwo+Cj4gVGhh dCBxdWVzdGlvbiB3b3VsZCBhbHNvIG5lZWQgdG8gYmUgYXNrZWQgdG8gb3RoZXJzIHdobyBoYWQK PiBzdWdnZXN0ZWQgc3VwcG9ydGluZyBib3RoLiBJJ2QgYmUgZmluZSB3aXRoIGEsIGJ1dCBJIGFs c28gZG9uJ3Qgdmlldwo+IGIgYXMgdG9vIGF3a3dhcmQuCj4KCkFjY29yZGluZyB0byBJbnRlbCBt YW5udWFsLCBhbiBlbnRyeSBpcyByZWdhcmRlZCBhcyBub3QgcHJlc2VudCwgaWYKYml0MDoyIGlz IDAuIFNvIGFkZGluZyBhIHAybSB0eXBlIGNoZWNrIGluIGlzX2VwdGVfcHJlc2VudCgpIG1lYW5z IHdlCndpbGwgY2hhbmdlIGl0cyBzZW1hbnRpY3MsIGlmIHRoaXMgaXMgYWNjZXB0YWJsZSh3aXRo IG5vIGh1cnQgdG8KaHlwZXJ2aXNvcikuIEknZCBwcmVmZXIgb3B0aW9uIGI+CgpEb2VzIGFueW9u ZSBlbHNlIGhhdmUgZGlmZmVyZW50IHN1Z2dlc3Rpb25zIG90aGVyIHRoYW4gYj4gPwoKCj4+Pj4g KyAgICAvKgo+Pj4+ICsgICAgICogRWFjaCB0aW1lIHdlIG1hcC91bm1hcCBhbiBpb3JlcSBzZXJ2 ZXIgdG8vZnJvbSBwMm1faW9yZXFfc2VydmVyLAo+Pj4+ICsgICAgICogd2UgbWFyayB0aGUgcDJt IHRhYmxlIHRvIGJlIHJlY2FsY3VsYXRlZCwgc28gdGhhdCBnZm5zIHdoaWNoIHdlcmUKPj4+PiAr ICAgICAqIHByZXZpb3VzbHkgbWFya2VkIHdpdGggcDJtX2lvcmVxX3NlcnZlciBjYW4gYmUgcmVz eW5jZWQuCj4+Pj4gKyAgICAgKi8KPj4+PiArICAgIHAybV9jaGFuZ2VfZW50cnlfdHlwZV9nbG9i YWwoZCwgcDJtX2lvcmVxX3NlcnZlciwgcDJtX3JhbV9ydyk7Cj4+Pgo+Pj4gV2hhdCBkb2VzICJy ZXN5bmNlZCIgaGVyZSBtZWFuPyBJLmUuIEkgY2FuIHNlZSB3aHkgdGhpcyBpcyB3YW50ZWQKPj4+ IHdoZW4gdW5tYXBwaW5nIGEgc2VydmVyLCBidXQgd2hlbiBtYXBwaW5nIGEgc2VydmVyIHRoZXJl IHNob3VsZG4ndAo+Pj4gYmUgYW55IHN1Y2ggcGFnZXMgaW4gdGhlIGZpcnN0IHBsYWNlLgo+Pj4K Pj4KPj4gVGhlcmUgc2hvdWxkbid0IGJlLiBCdXQgaWYgdGhlcmUgaXMobWlzYmVoYXZpb3IgZnJv bSB0aGUgZGV2aWNlIG1vZGVsCj4+IHNpZGUpLCBpdCBjYW4gYmUgcmVjYWxjdWxhdGVkIGJhY2sg dG8gcDJtX3JhbV9ydyh3aGljaCBpcyBub3QgcXVpdGUKPj4gbmVjZXNzYXJ5IGFzIHRoZSB1bm1h cHBpbmcgY2FzZSkuCj4KPiBETSBtaXNiZWhhdmlvciBzaG91bGQgbm90IHJlc3VsdCBpbiBzdWNo IGEgcHJvYmxlbSAtIHRoZSBoeXBlcnZpc29yCj4gc2hvdWxkIHJlZnVzZSBhbnkgYmFkIHJlcXVl c3RzLgo+Ck9LLiBJIGNhbiBhZGQgY29kZSB0byBndWFyYW50ZWUgZnJvbSBoeXBlcnZpc29yIHNp ZGUgbm8gZW50cmllcyBjaGFuZ2VkCnRvIHAybV9pb3JlcV9zZXJ2ZXIgYmVmb3JlIHRoZSBtYXBw aW5nIGhhcHBlbnMuCgpCLlIuCll1CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4u b3JnCmh0dHA6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=