From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yu Zhang Subject: Re: [PATCH v5 4/4] x86/ioreq server: Reset outstanding p2m_ioreq_server entries when an ioreq server unmaps. Date: Fri, 2 Sep 2016 19:00:27 +0800 Message-ID: <57C95BCB.5050003@linux.intel.com> References: <1468314129-28465-1-git-send-email-yu.c.zhang@linux.intel.com> <1468314129-28465-5-git-send-email-yu.c.zhang@linux.intel.com> <66dee11c-242c-20ff-9581-f42402c31d8b@citrix.com> <57C57943.5030609@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <57C57943.5030609@linux.intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: George Dunlap , xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org CgpPbiA4LzMwLzIwMTYgODoxNyBQTSwgWXUgWmhhbmcgd3JvdGU6Cj4KPgo+IE9uIDgvMTYvMjAx NiA5OjM1IFBNLCBHZW9yZ2UgRHVubGFwIHdyb3RlOgo+PiBPbiAxMi8wNy8xNiAxMDowMiwgWXUg Wmhhbmcgd3JvdGU6Cj4+PiBUaGlzIHBhdGNoIHJlc2V0cyBwMm1faW9yZXFfc2VydmVyIGVudHJp ZXMgYmFjayB0byBwMm1fcmFtX3J3LAo+Pj4gYWZ0ZXIgYW4gaW9yZXEgc2VydmVyIGhhcyB1bm1h cHBlZC4gVGhlIHJlc3luYyBpcyBkb25lIGJvdGgKPj4+IGFzeW5jaHJvbm91c2x5IHdpdGggdGhl IGN1cnJlbnQgcDJtX2NoYW5nZV9lbnRyeV90eXBlX2dsb2JhbCgpCj4+PiBpbnRlcmZhY2UsIGFu ZCBzeW5jaHJvbm91c2x5IGJ5IGl0ZXJhdGluZyB0aGUgcDJtIHRhYmxlLiBUaGUKPj4+IHN5bmNo cm9ub3VzIHJlc2V0dGluZyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBuZWVkIHRvIGd1YXJhbnRl ZQo+Pj4gdGhlIHAybSB0YWJsZSBpcyBjbGVhbiBiZWZvcmUgYW5vdGhlciBpb3JlcSBzZXJ2ZXIg aXMgbWFwcGVkLgo+Pj4gQW5kIHNpbmNlIHRoZSBzd2VlcGluZyBvZiBwMm0gdGFibGUgY291bGQg YmUgdGltZSBjb25zdW1pbmcsCj4+PiBpdCBpcyBkb25lIHdpdGggaHlwZXJjYWxsIGNvbnRpbnVh dGlvbi4gQXN5bmNocm9ub3VzIGFwcHJvYWNoCj4+PiBpcyBhbHNvIHRha2VuIHNvIHRoYXQgcDJt X2lvcmVxX3NlcnZlciBlbnRyaWVzIGNhbiBhbHNvIGJlIHJlc2V0Cj4+PiB3aGVuIHRoZSBIVk0g aXMgc2NoZWR1bGVkIGJldHdlZW4gaHlwZXJjYWxsIGNvbnRpbnVhdGlvbnMuCj4+Pgo+Pj4gVGhp cyBwYXRjaCBhbHNvIGRpc2FsbG93cyBsaXZlIG1pZ3JhdGlvbiwgd2hlbiB0aGVyZSdzIHN0aWxs IGFueQo+Pj4gb3V0c3RhbmRpbmcgcDJtX2lvcmVxX3NlcnZlciBlbnRyeSBsZWZ0LiBUaGUgY29y ZSByZWFzb24gaXMgb3VyCj4+PiBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIHAybV9jaGFuZ2Vf ZW50cnlfdHlwZV9nbG9iYWwoKSBjYW4gbm90Cj4+PiB0ZWxsIHRoZSBzdGF0ZSBvZiBwMm1faW9y ZXFfc2VydmVyIGVudHJpZXMoY2FuIG5vdCBkZWNpZGUgaWYgYW4KPj4+IGVudHJ5IGlzIHRvIGJl IGVtdWxhdGVkIG9yIHRvIGJlIHJlc3luY2VkKS4KPj4+Cj4+PiBTaWduZWQtb2ZmLWJ5OiBZdSBa aGFuZyA8eXUuYy56aGFuZ0BsaW51eC5pbnRlbC5jb20+Cj4+IFRoYW5rcyBmb3IgZG9pbmcgdGhp cyBZdSBaaGFuZyEgIEEgY291cGxlIG9mIGNvbW1lbnRzLgo+Cj4gVGhhbmtzIGEgbG90IGZvciB5 b3VyIGFkdmljZSwgR2VvcmdlLgo+IEFuZCBzb3JyeSBmb3IgdGhlIGRlbGF5ZWQgcmVwbHkoaGFk IGJlZW4gaW4gYW5udWFsIGxlYXZlIHByZXZpb3VzbHkpLgo+Cj4+PiAtLS0KPj4+IENjOiBQYXVs IER1cnJhbnQgPHBhdWwuZHVycmFudEBjaXRyaXguY29tPgo+Pj4gQ2M6IEphbiBCZXVsaWNoIDxq YmV1bGljaEBzdXNlLmNvbT4KPj4+IENjOiBBbmRyZXcgQ29vcGVyIDxhbmRyZXcuY29vcGVyM0Bj aXRyaXguY29tPgo+Pj4gQ2M6IEdlb3JnZSBEdW5sYXAgPGdlb3JnZS5kdW5sYXBAZXUuY2l0cml4 LmNvbT4KPj4+IENjOiBKdW4gTmFrYWppbWEgPGp1bi5uYWthamltYUBpbnRlbC5jb20+Cj4+PiBD YzogS2V2aW4gVGlhbiA8a2V2aW4udGlhbkBpbnRlbC5jb20+Cj4+PiAtLS0KPj4+ICAgeGVuL2Fy Y2gveDg2L2h2bS9odm0uYyAgICB8IDUyIAo+Pj4gKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKystLS0KPj4+ICAgeGVuL2FyY2gveDg2L21tL2hhcC9oYXAuYyB8ICA5 ICsrKysrKysrCj4+PiAgIHhlbi9hcmNoL3g4Ni9tbS9wMm0tZXB0LmMgfCAgNiArKysrKy0KPj4+ ICAgeGVuL2FyY2gveDg2L21tL3AybS1wdC5jICB8IDEwICsrKysrKystLQo+Pj4gICB4ZW4vYXJj aC94ODYvbW0vcDJtLmMgICAgIHwgIDMgKysrCj4+PiAgIHhlbi9pbmNsdWRlL2FzbS14ODYvcDJt LmggfCAgNSArKysrLQo+Pj4gICA2IGZpbGVzIGNoYW5nZWQsIDc4IGluc2VydGlvbnMoKyksIDcg ZGVsZXRpb25zKC0pCj4+Pgo+Pj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9odm0vaHZtLmMg Yi94ZW4vYXJjaC94ODYvaHZtL2h2bS5jCj4+PiBpbmRleCA0ZDk4Y2M2Li5lNTdjOGI5IDEwMDY0 NAo+Pj4gLS0tIGEveGVuL2FyY2gveDg2L2h2bS9odm0uYwo+Pj4gKysrIGIveGVuL2FyY2gveDg2 L2h2bS9odm0uYwo+Pj4gQEAgLTU0ODUsNiArNTQ4NSw3IEBAIHN0YXRpYyBpbnQgaHZtb3Bfc2V0 X21lbV90eXBlKAo+Pj4gICAgICAgewo+Pj4gICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcGZuID0g YS5maXJzdF9wZm4gKyBzdGFydF9pdGVyOwo+Pj4gICAgICAgICAgIHAybV90eXBlX3QgdDsKPj4+ ICsgICAgICAgIHN0cnVjdCBwMm1fZG9tYWluICpwMm0gPSBwMm1fZ2V0X2hvc3RwMm0oZCk7Cj4+ PiAgICAgICAgICAgICBnZXRfZ2ZuX3Vuc2hhcmUoZCwgcGZuLCAmdCk7Cj4+PiAgICAgICAgICAg aWYgKCBwMm1faXNfcGFnaW5nKHQpICkKPj4+IEBAIC01NTEyLDYgKzU1MTMsMTIgQEAgc3RhdGlj IGludCBodm1vcF9zZXRfbWVtX3R5cGUoCj4+PiAgICAgICAgICAgaWYgKCByYyApCj4+PiAgICAg ICAgICAgICAgIGdvdG8gb3V0Owo+Pj4gICArICAgICAgICBpZiAoIHQgPT0gcDJtX3JhbV9ydyAm JiBtZW10eXBlW2EuaHZtbWVtX3R5cGVdID09IAo+Pj4gcDJtX2lvcmVxX3NlcnZlciApCj4+PiAr ICAgICAgICAgICAgcDJtLT5pb3JlcS5lbnRyeV9jb3VudCsrOwo+Pj4gKwo+Pj4gKyAgICAgICAg aWYgKCB0ID09IHAybV9pb3JlcV9zZXJ2ZXIgJiYgbWVtdHlwZVthLmh2bW1lbV90eXBlXSA9PSAK Pj4+IHAybV9yYW1fcncgKQo+Pj4gKyAgICAgICAgICAgIHAybS0+aW9yZXEuZW50cnlfY291bnQt LTsKPj4gQ2hhbmdpbmcgdGhlc2UgaGVyZSBtaWdodCBtYWtlIHNlbnNlIGlmIHRoZXkgd2VyZSAq b25seSogY2hhbmdlZCBpbiB0aGUKPj4gaHZtIGNvZGU7IGJ1dCBhcyB5b3UgYWxzbyBoYXZlIHRv IG1vZGlmeSB0aGlzIHZhbHVlIGluIHRoZSBwMm0gY29kZSAoaW4KPj4gcmVzb2x2ZV9taXNjb25m aWcpLCBJIHRoaW5rIGl0IG1ha2VzIHNlbnNlIHRvIHRyeSB0byBkbyBhbGwgdGhlIGNvdW50aW5n Cj4+IGluIHRoZSBwMm0gY29kZS4gIFRoYXQgd291bGQgdGFrZSBjYXJlIG9mIGFueSBsb2NraW5n IGlzc3VlcyBhcyB3ZWxsLgo+Pgo+PiBMb2dpY2FsbHkgdGhlIG1vc3Qgc2Vuc2libGUgcGxhY2Ug dG8gZG8gaXQgd291bGQgYmUKPj4gYXRvbWljX3dyaXRlX2VwdF9lbnRyeSgpOyB0aGF0IHdvdWxk IG1ha2UgaXQgYmFzaWNhbGx5IGltcG9zc2libGUgdG8KPj4gbWlzcyBhIGNhc2Ugd2hlcmUgd2Ug Y2hhbmdlIHRvIG9mIGZyb20gcDJtX2lvcmVxX3NlcnZlci4KPj4KPj4gT24gdGhlIG90aGVyIGhh bmQsIGl0IHdvdWxkIG1lYW4gYWRkaW5nIGNvZGUgdG8gYSBjb3JlIHBhdGggZm9yIGFsbCBwMm0K Pj4gdXBkYXRlcy4KPgo+IFdlbGwsIHRoZSBhdG9taWNfd3JpdGVfZXB0X2VudHJ5KCkgaXMgYSBy YXRoZXIgY29yZSBwYXRoLCBhbmQgaXMgb25seSAKPiBmb3IgZXB0LiBBbHRob3VnaCBwMm1faW9y ZXFfc2VydmVyIGlzCj4gbm90IGFjY2VwdGVkIGluIHNoYWRvdyBwYWdlIHRhYmxlIGNvZGUsIEkn ZCBzdGlsbCBsaWtlIHRvIHN1cHBvcnQgaXQgCj4gaW4gQU1EIFNWTSAtIGFsc28gY29uc2lzdGVu dCB3aXRoIHRoZQo+IHAybV9jaGFuZ2VfZW50cnlfdHlwZV9nbG9iYWwoKSBmdW5jdGlvbmFsaXR5 LiA6KQo+Cj4gSSBhbSBjb25zaWRlcmluZyBwMm1fY2hhbmdlX3R5cGVfb25lKCksIHdoaWNoIGhh cyBnZm5fbG9jay91bmxvY2soKSAKPiBpbnNpZGUuIEFuZCBzaW5jZSBwcmV2aW91c2x5IHRoZSBw Mm0KPiB0eXBlIGNoYW5nZXMgdG8vZnJvbSBwMm1faW9yZXFfc2VydmVyIGFyZSBvbmx5IHRyaWdn ZXJlZCBieSBodm1vcCAKPiB3aGljaCBsZWFkcyB0byBwMm1fY2hhbmdlX3R5cGVfb25lKCksCj4g SSBiZWxpZXZlIGNhbGN1bGF0aW5nIHRoZSBlbnRyeV9jb3VudCBoZXJlIHdvdWxkIG1ha2Ugc2Vu c2UuCj4KPiBCZXNpZGVzLCB0aGUgcmVzb2x2ZV9taXNjb25maWcoKS9kb19yZWNhbGMoKSBzdGls bCBuZWVkIHRvIGRlY3JlYXNlIAo+IHRoZSBlbnRyeV9jb3VudCBmb3IgcDJtX2lvcmVxX3NlcnZl ciwKPiBidXQgc2luY2UgYm90aCByb3V0aW5lcyBoYXZlIHAybSBsb2NrZWQgYnkgdGhlaXIgY2Fs bGVyLCBzbyBpdCdzIGFsc28gT0suCj4KPiBPdGhlciBwbGFjZXMgdGhhdCByZWFkIGVudHJ5X2Nv dW50IGNhbiBiZSBwcm90ZWN0ZWQgYnkgCj4gcmVhZF9hdG9taWMoJnAybS0+aW9yZXEuZW50cnlf Y291bnQpLgo+Cj4gRG8geW91IHRoaW5rIHRoaXMgYWNjZXB0YWJsZT8KPgo+Pj4gKwo+Pj4gICAg ICAgICAgIC8qIENoZWNrIGZvciBjb250aW51YXRpb24gaWYgaXQncyBub3QgdGhlIGxhc3QgaW50 ZXJhdGlvbiAqLwo+Pj4gICAgICAgICAgIGlmICggYS5uciA+ICsrc3RhcnRfaXRlciAmJiAhKHN0 YXJ0X2l0ZXIgJiBIVk1PUF9vcF9tYXNrKSAmJgo+Pj4gICAgICAgICAgICAgICAgaHlwZXJjYWxs X3ByZWVtcHRfY2hlY2soKSApCj4+PiBAQCAtNTUzMCwxMSArNTUzNywxMyBAQCBzdGF0aWMgaW50 IGh2bW9wX3NldF9tZW1fdHlwZSgKPj4+ICAgfQo+Pj4gICAgIHN0YXRpYyBpbnQgaHZtb3BfbWFw X21lbV90eXBlX3RvX2lvcmVxX3NlcnZlcigKPj4+IC0gWEVOX0dVRVNUX0hBTkRMRV9QQVJBTSh4 ZW5faHZtX21hcF9tZW1fdHlwZV90b19pb3JlcV9zZXJ2ZXJfdCkgdW9wKQo+Pj4gKyBYRU5fR1VF U1RfSEFORExFX1BBUkFNKHhlbl9odm1fbWFwX21lbV90eXBlX3RvX2lvcmVxX3NlcnZlcl90KSB1 b3AsCj4+PiArICAgIHVuc2lnbmVkIGxvbmcgKml0ZXIpCj4+PiAgIHsKPj4+ICAgICAgIHhlbl9o dm1fbWFwX21lbV90eXBlX3RvX2lvcmVxX3NlcnZlcl90IG9wOwo+Pj4gICAgICAgc3RydWN0IGRv bWFpbiAqZDsKPj4+ICAgICAgIGludCByYzsKPj4+ICsgICAgdW5zaWduZWQgbG9uZyBnZm4gPSAq aXRlcjsKPj4+ICAgICAgICAgaWYgKCBjb3B5X2Zyb21fZ3Vlc3QoJm9wLCB1b3AsIDEpICkKPj4+ ICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKPj4+IEBAIC01NTU5LDcgKzU1NjgsNDIgQEAgc3Rh dGljIGludCBodm1vcF9tYXBfbWVtX3R5cGVfdG9faW9yZXFfc2VydmVyKAo+Pj4gICAgICAgaWYg KCByYyAhPSAwICkKPj4+ICAgICAgICAgICBnb3RvIG91dDsKPj4+ICAgLSAgICByYyA9IGh2bV9t YXBfbWVtX3R5cGVfdG9faW9yZXFfc2VydmVyKGQsIG9wLmlkLCBvcC50eXBlLCAKPj4+IG9wLmZs YWdzKTsKPj4+ICsgICAgaWYgKCBnZm4gPT0gMCB8fCBvcC5mbGFncyAhPSAwICkKPj4+ICsgICAg ICAgIHJjID0gaHZtX21hcF9tZW1fdHlwZV90b19pb3JlcV9zZXJ2ZXIoZCwgb3AuaWQsIG9wLnR5 cGUsIAo+Pj4gb3AuZmxhZ3MpOwo+Pj4gKwo+Pj4gKyAgICAvKgo+Pj4gKyAgICAgKiBJdGVyYXRl IHAybSB0YWJsZSB3aGVuIGFuIGlvcmVxIHNlcnZlciB1bm1hcHMgZnJvbSAKPj4+IHAybV9pb3Jl cV9zZXJ2ZXIsCj4+PiArICAgICAqIGFuZCByZXNldCB0aGUgcmVtYWluaW5nIHAybV9pb3JlcV9z ZXJ2ZXIgZW50cmllcyBiYWNrIHRvIAo+Pj4gcDJtX3JhbV9ydy4KPj4+ICsgICAgICovCj4+PiAr ICAgIGlmICggb3AuZmxhZ3MgPT0gMCAmJiByYyA9PSAwICkKPj4+ICsgICAgewo+Pj4gKyAgICAg ICAgc3RydWN0IHAybV9kb21haW4gKnAybSA9IHAybV9nZXRfaG9zdHAybShkKTsKPj4+ICsKPj4+ ICsgICAgICAgIHdoaWxlICggZ2ZuIDw9IHAybS0+bWF4X21hcHBlZF9wZm4gKQo+Pj4gKyAgICAg ICAgewo+Pj4gKyAgICAgICAgICAgIHAybV90eXBlX3QgdDsKPj4+ICsKPj4+ICsgICAgICAgICAg ICBpZiAoIHAybS0+aW9yZXEuZW50cnlfY291bnQgPT0gMCApCj4+PiArICAgICAgICAgICAgICAg IGJyZWFrOwo+PiBBbnkgcmVhc29uIG5vdCB0byBtYWtlIHRoaXMgcGFydCBvZiB0aGUgd2hpbGUo KSBjb25kaXRpb24/Cj4+Cj4+PiArCj4+PiArICAgICAgICAgICAgZ2V0X2dmbl91bnNoYXJlKGQs IGdmbiwgJnQpOwo+PiBUaGlzIHdpbGwgY29tcGxldGVseSB1bnNoYXJlIGFsbCBwYWdlcyBpbiBh IGRvbWFpbiBiZWxvdyB0aGUgbGFzdAo+PiBkYW5nbGluZyBwMm1faW9yZXFfc2VydmVyIHBhZ2Uu ICBJIGRvbid0IHRoaW5rIHVuc2hhcmluZyBpcyBuZWNlc3NhcnkgYXQKPj4gYWxsOyBpZiBpdCdz IHNoYXJlZCwgaXQgY2VydGFpbmx5IHdvbid0IGJlIG9mIHR5cGUgcDJtX2lvcmVxX3NlcnZlci4K Pj4KPj4gQWN0dWFsbHkgLS0gaXQgc2VlbXMgbGlrZSBlcHRfZ2V0X2VudHJ5KCkgcmVhbGx5IHNo b3VsZCBiZSBjYWxsaW5nCj4+IHJlc29sdmVfbWlzY29uZmlnKCksIHRoZSBzYW1lIHdheSB0aGF0 IGVwdF9zZXRfZW50cnkoKSBkb2VzLiAgSW4gdGhhdAo+PiBjYXNlLCBzaW1wbHkgZ29pbmcgdGhy b3VnaCBhbmQgcmVhZGluZyBhbGwgdGhlIHAybSBlbnRyaWVzIHdvdWxkIHN1ZmZpY2UKPj4gdG8g ZmluaXNoIG9mZiB0aGUgdHlwZSBjaGFuZ2UuCj4KPiBXZWxsLCBJIGhhdmUgZG91YnRzIGFib3V0 IHRoaXMgLSByZXNvbHZlX21pc2NvbmZpZygpIGlzIHN1cHBvc2VkIHRvIAo+IGNoYW5nZSBwMm0g dGFibGUsCj4gYW5kIHNob3VsZCBwcm9iYWJseSBiZSBwcm90ZWN0ZWQgYnkgcDJtIGxvY2suIEJ1 dCBlcHRfZ2V0X2VudHJ5KCkgbWF5IAo+IGJlIHRyaWdnZXJlZAo+IGJ5IHNvbWUgcm91dGluZSBs aWtlIGdldF9nZm5fcXVlcnlfdW5sb2NrZWQoKS4KPgo+IEJlc2lkZXMsIGFsdGhvdWdoIGNhbGxp bmcgcmVzb2x2ZV9taXNjb25maWcoKSB3aWxsIHNwZWVkIHVwIHRoZSBwMm0gCj4gdHlwZSBzd2Vl cGluZywKPiBpdCBhbHNvIGludHJvZHVjZXMgbW9yZSBjb3N0IGVhY2ggdGltZSB3ZSBwZWVrIHRo ZSBwMm0gdGFibGUuCj4KPj4KPj4gQWx0aG91Z2ggcmVhbGx5LCBpdCBzZWVtcyBsaWtlIGhhdmlu ZyBhICJwMm1fZmluaXNoX3R5cGVfY2hhbmdlKCkiCj4+IGZ1bmN0aW9uIHdoaWNoIGxvb2tlZCBm b3IgbWlzY29uZmlndXJlZCBlbnRyaWVzIGFuZCByZXNldCB0aGVtIHdvdWxkIGJlCj4+IGEgc3Rl cCBjbG9zZXIgdG8gdGhlIHJpZ2h0IGRpcmVjdGlvbiwgaW4gdGhhdCBpdCBjb3VsZCBiZSByZS11 c2VkIGluCj4+IG90aGVyIHNpdHVhdGlvbnMgd2hlcmUgdGhlIHR5cGUgY2hhbmdlIG1heSBub3Qg aGF2ZSBmaW5pc2hlZC4KPgo+IFRoYW5rcy4gVGhpcyBzb3VuZHMgYSBnb29kIGlkZWEuIEFuZCBJ J2QgbGlrZSB0byBkZWZpbmUgdGhlIGludGVyZmFjZSAKPiBvZiB0aGlzIHJvdXRpbmUKPiBsaWtl IHRoaXM6Cj4gIHZvaWQgcDJtX2ZpbmlzaF90eXBlX2NoYW5nZShzdHJ1Y3QgZG9tYWluICpkLAo+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVk IGxvbmcgZW5kLAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAybV90eXBlX3Qgb3QsIHAy bV90eXBlX3QgbnQpCj4gU28gaXQgY2FuIGJlIHRyaWdnZXJlZCBieSBodm1vcF9tYXBfbWVtX3R5 cGVfdG9faW9yZXFfc2VydmVyKCkgd2l0aCAKPiBoeXBlcmNhbGwgY29udGludWF0aW9uCj4gbWV0 aG9kLiBEbyB5b3UgdGhpbmsgdGhpcyBPSz8KPgo+IEluIGZhY3QsIEkgaGF2ZSB3b3JrZWQgb3V0 IGEgbmV3IHZlcnNpb24gb2YgdGhpcyBwYXRjaCBhY2NvcmRpbmcgdG8gbXkgCj4gdW5kZXJzdGFu ZGluZywgYW5kIGlmIHlvdQo+IGhhdmUgbm8gbW9yZSBkaXNhZ3JlZW1lbnQgb24gdGhlIGFib3Zl IGlzc3VlcywgSSdsbCBzZW5kIG91dCB0aGUgbmV3IAo+IHBhdGNoIHNvb24gYWZ0ZXIgc29tZSB0 ZXN0Cj4gaW4gWGVuR1QgZW52aXJvbm1lbnQuIDopCj4KCkhpIEdlb3JnZSwgSSBqdXN0IHNlbmQg b3V0IHRoZSB2NiBwYXRjaCBzZXQsIHlvdSBjYW4gaGF2ZSBhIGxvb2sgb24gdGhhdCAKdmVyc2lv biBkaXJlY3RseSB3aGVuIHlvdQpoYXZlIHRpbWUuIFRoYW5rcyEgOikKCll1CgoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcg bGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRl dmVsCg==