From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: Re: [PATCH v4 14/26] x86/cpu: Rework AMD masking MSR setup Date: Tue, 5 Apr 2016 17:44:28 +0100 Message-ID: <5703EB6C.4090902@citrix.com> References: <1458750989-28967-1-git-send-email-andrew.cooper3@citrix.com> <1458750989-28967-15-git-send-email-andrew.cooper3@citrix.com> <20160328185523.GM17944@char.us.oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20160328185523.GM17944@char.us.oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Konrad Rzeszutek Wilk Cc: Xen-devel List-Id: xen-devel@lists.xenproject.org T24gMjgvMDMvMTYgMTk6NTUsIEtvbnJhZCBSemVzenV0ZWsgV2lsayB3cm90ZToKPiBPbiBXZWQs IE1hciAyMywgMjAxNiBhdCAwNDozNjoxN1BNICswMDAwLCBBbmRyZXcgQ29vcGVyIHdyb3RlOgo+ PiBUaGlzIHBhdGNoIGlzIGJlc3QgcmV2aWV3ZWQgYXMgaXRzIGVuZCByZXN1bHQgcmF0aGVyIHRo YW4gYXMgYSBkaWZmLCBhcyBpdAo+PiByZXdyaXRlcyBhbG1vc3QgYWxsIG9mIHRoZSBzZXR1cC4K Pj4KPj4gT24gdGhlIEJTUCwgY3B1aWQgaW5mb3JtYXRpb24gaXMgdXNlZCB0byBldmFsdWF0ZSB0 aGUgcG90ZW50aWFsIGF2YWlsYWJsZSBzZXQKPj4gb2YgbWFza2luZyBNU1JzLCBhbmQgdGhleSBh cmUgdW5jb25kaXRpb25hbGx5IHByb2JlZCwgZmlsbGluZyBpbiB0aGUKPj4gYXZhaWxhYmlsaXR5 IGluZm9ybWF0aW9uIGFuZCBoYXJkd2FyZSBkZWZhdWx0cy4KPj4KPj4gVGhlIGNvbW1hbmQgbGlu ZSBwYXJhbWV0ZXJzIGFyZSB0aGVuIGNvbWJpbmVkIHdpdGggdGhlIGhhcmR3YXJlIGRlZmF1bHRz IHRvCj4+IGZ1cnRoZXIgcmVzdHJpY3QgdGhlIFhlbiBkZWZhdWx0IG1hc2tpbmcgbGV2ZWwuICBF YWNoIGNwdSBpcyB0aGVuIGNvbnRleHQKPj4gc3dpdGNoZWQgaW50byB0aGUgZGVmYXVsdCBsZXZl bGxpbmcgc3RhdGUuCj4gQ29udGV4dCBzd2l0Y2hlZD8gV2h5IG5vdCBqdXN0IHNheToKPgo+IFdo ZW4gYm9vdGluZyB1cCBDUFVzIHdlIHNldCB0aGUgc2FtZSBNU1IgbWFzayBmb3IgZWFjaCBDUFUu Cj4KPiBUaGUgYW1kX2N0eHRfc3dpdGNoX2xldmVsbGluZyBjYW4gYmUgYWxzbyB1c2VkIChpbiBw YXRjaCBYWVopIHRvIHN3YXAKPiBsZXZlbGxpbmcgcGVyIGd1ZXN0IGdyYW51bGFyaXR5Lgo+Cj4+ IFNpZ25lZC1vZmYtYnk6IEFuZHJldyBDb29wZXIgPGFuZHJldy5jb29wZXIzQGNpdHJpeC5jb20+ Cj4+IFJldmlld2VkLWJ5OiBKYW4gQmV1bGljaCA8SkJldWxpY2hAc3VzZS5jb20+Cj4+IC0tLQo+ PiB2MjoKPj4gICogUHJvdmlkZSBleHRyYSBpbmZvcm1hdGlvbiBpZiBvcHRfY3B1X2luZm8KPj4g ICogRXh0cmEgY29tbWVudCBpbmRpY2F0aW5nIHRoZSBleHBlY3RlZCB1c2Ugb2YgYW1kX2N0eHRf c3dpdGNoX2xldmVsbGluZygpCj4+IHYzOgo+PiAgKiBGaXggdGhlIGludGVyYWN0aW9uIG9mIHRo ZSBmYXN0LWZvcndhcmQgYml0cyB3aXRoIHRoZSBvdmVycmlkZSBNU1JzLgo+PiAgKiBTdHlsZSBm aXh1cHMuCj4+IC0tLQo+PiAgeGVuL2FyY2gveDg2L2NwdS9hbWQuYyB8IDI3NiArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tCj4+ICAxIGZpbGUgY2hhbmdl ZCwgMTc5IGluc2VydGlvbnMoKyksIDk3IGRlbGV0aW9ucygtKQo+Pgo+PiBkaWZmIC0tZ2l0IGEv eGVuL2FyY2gveDg2L2NwdS9hbWQuYyBiL3hlbi9hcmNoL3g4Ni9jcHUvYW1kLmMKPj4gaW5kZXgg NTUxNjc3Ny4uMGUxYzhiOSAxMDA2NDQKPj4gLS0tIGEveGVuL2FyY2gveDg2L2NwdS9hbWQuYwo+ PiArKysgYi94ZW4vYXJjaC94ODYvY3B1L2FtZC5jCj4+IEBAIC04MCw2ICs4MCwxMyBAQCBzdGF0 aWMgaW5saW5lIGludCB3cm1zcl9hbWRfc2FmZSh1bnNpZ25lZCBpbnQgbXNyLCB1bnNpZ25lZCBp bnQgbG8sCj4+ICAJcmV0dXJuIGVycjsKPj4gIH0KPj4gIAo+PiArc3RhdGljIHZvaWQgd3Jtc3Jf YW1kKHVuc2lnbmVkIGludCBtc3IsIHVpbnQ2NF90IHZhbCkKPj4gK3sKPj4gKwlhc20gdm9sYXRp bGUoIndybXNyIiA6Ogo+PiArCQkgICAgICJjIiAobXNyKSwgImEiICgodWludDMyX3QpdmFsKSwK Pj4gKwkJICAgICAiZCIgKHZhbCA+PiAzMiksICJEIiAoMHg5YzVhMjAzYSkpOwo+PiArfQo+PiAr Cj4+ICBzdGF0aWMgY29uc3Qgc3RydWN0IGNwdWlkbWFzayB7Cj4+ICAJdWludDE2X3QgZmFtOwo+ PiAgCWNoYXIgcmV2WzJdOwo+PiBAQCAtMTI2LDEyNiArMTMzLDE5OCBAQCBzdGF0aWMgY29uc3Qg c3RydWN0IGNwdWlkbWFzayAqX19pbml0IG5vaW5saW5lIGdldF9jcHVpZG1hc2soY29uc3QgY2hh ciAqb3B0KQo+PiAgfQo+PiAgCj4+ICAvKgo+PiArICogU2V0cyBjYXBzIGluIGV4cGVjdGVkX2xl dmVsbGluZ19jYXAsIHByb2JlcyBmb3IgdGhlIHNwZWNpZmllZCBtYXNrIE1TUiwgYW5kCj4+ICsg KiBzZXQgY2FwcyBpbiBsZXZlbGxpbmdfY2FwcyBpZiBpdCBpcyBmb3VuZC4gIFByb2Nlc3NvcnMg cHJpb3IgdG8gRmFtIDEwaAo+PiArICogcmVxdWlyZWQgYSAzMi1iaXQgcGFzc3dvcmQgZm9yIG1h c2tpbmcgTVNScy4gIFJldHVybnMgdGhlIGRlZmF1bHQgdmFsdWUuCj4+ICsgKi8KPj4gK3N0YXRp YyB1aW50NjRfdCBfX2luaXQgX3Byb2JlX21hc2tfbXNyKHVuc2lnbmVkIGludCBtc3IsIHVpbnQ2 NF90IGNhcHMpCj4+ICt7Cj4+ICsJdW5zaWduZWQgaW50IGhpLCBsbzsKPj4gKwo+PiArCWV4cGVj dGVkX2xldmVsbGluZ19jYXAgfD0gY2FwczsKPj4gKwo+PiArCWlmICgocmRtc3JfYW1kX3NhZmUo bXNyLCAmbG8sICZoaSkgPT0gMCkgJiYKPj4gKwkgICAgKHdybXNyX2FtZF9zYWZlKG1zciwgbG8s IGhpKSA9PSAwKSkKPj4gKwkJbGV2ZWxsaW5nX2NhcHMgfD0gY2FwczsKPj4gKwo+PiArCXJldHVy biAoKHVpbnQ2NF90KWhpIDw8IDMyKSB8IGxvOwo+PiArfQo+PiArCj4+ICsvKgo+PiArICogUHJv YmUgZm9yIHRoZSBleGlzdGFuY2Ugb2YgdGhlIGV4cGVjdGVkIG1hc2tpbmcgTVNScy4gIFRoZXkg bWlnaHQgZWFzaWx5Cj4+ICsgKiBub3QgYmUgYXZhaWxhYmxlIGlmIFhlbiBpcyBydW5uaW5nIHZp cnR1YWxpc2VkLgo+PiArICovCj4+ICtzdGF0aWMgdm9pZCBfX2luaXQgbm9pbmxpbmUgcHJvYmVf bWFza2luZ19tc3JzKHZvaWQpCj4gV2h5IG5vbmlubGluZT8KClNvIHRoaXMgbGFyZ2UgcXVhbnRp dHkgb2YgX19pbml0IGNvZGUgZG9lc24ndCBnZXQgaW5saW5lZCBpbnRvIGl0cyBzb2xlCmNhbGxl ciwgd2hpY2ggaXMgbm90IF9faW5pdC4KCj4KPj4gK3sKPj4gKwljb25zdCBzdHJ1Y3QgY3B1aW5m b194ODYgKmMgPSAmYm9vdF9jcHVfZGF0YTsKPj4gKwo+PiArCS8qCj4+ICsJICogRmlyc3QsIHdv cmsgb3V0IHdoaWNoIG1hc2tpbmcgTVNScyB3ZSBzaG91bGQgaGF2ZSwgYmFzZWQgb24KPj4gKwkg KiByZXZpc2lvbiBhbmQgY3B1aWQuCj4+ICsJICovCj4+ICsKPj4gKwkvKiBGYW0xMSBkb2Vzbid0 IHN1cHBvcnQgbWFza2luZyBhdCBhbGwuICovCj4+ICsJaWYgKGMtPng4NiA9PSAweDExKQo+PiAr CQlyZXR1cm47Cj4+ICsKPj4gKwljcHVpZG1hc2tfZGVmYXVsdHMuXzFjZCA9Cj4+ICsJCV9wcm9i ZV9tYXNrX21zcihNU1JfSzhfRkVBVFVSRV9NQVNLLCBMQ0FQXzFjZCk7Cj4+ICsJY3B1aWRtYXNr X2RlZmF1bHRzLmUxY2QgPQo+PiArCQlfcHJvYmVfbWFza19tc3IoTVNSX0s4X0VYVF9GRUFUVVJF X01BU0ssIExDQVBfZTFjZCk7Cj4+ICsKPj4gKwlpZiAoYy0+Y3B1aWRfbGV2ZWwgPj0gNykKPj4g KwkJY3B1aWRtYXNrX2RlZmF1bHRzLl83YWIwID0KPj4gKwkJCV9wcm9iZV9tYXNrX21zcihNU1Jf QU1EX0w3UzBfRkVBVFVSRV9NQVNLLCBMQ0FQXzdhYjApOwo+PiArCj4+ICsJaWYgKGMtPng4NiA9 PSAweDE1ICYmIGMtPmNwdWlkX2xldmVsID49IDYgJiYgY3B1aWRfZWN4KDYpKQo+PiArCQljcHVp ZG1hc2tfZGVmYXVsdHMuXzZjID0KPj4gKwkJCV9wcm9iZV9tYXNrX21zcihNU1JfQU1EX1RIUk1f RkVBVFVSRV9NQVNLLCBMQ0FQXzZjKTsKPj4gKwo+PiArCS8qCj4+ICsJICogRG9uJ3QgYm90aGVy IHdhcm5pbmcgYWJvdXQgYSBtaXNtYXRjaCBpZiB2aXJ0dWFsaXNlZC4gIFRoZXNlIE1TUnMKPj4g KwkgKiBhcmUgbm90IGFyY2hpdGVjdHVyYWwgYW5kIGFsbW9zdCBuZXZlciB2aXJ0dWFsaXNlZC4K Pj4gKwkgKi8KPj4gKwlpZiAoKGV4cGVjdGVkX2xldmVsbGluZ19jYXAgPT0gbGV2ZWxsaW5nX2Nh cHMpIHx8Cj4+ICsJICAgIGNwdV9oYXNfaHlwZXJ2aXNvcikKPj4gKwkJcmV0dXJuOwo+PiArCj4+ ICsJcHJpbnRrKFhFTkxPR19XQVJOSU5HICJNaXNtYXRjaCBiZXR3ZWVuIGV4cGVjdGVkICglI3gp ICIKPj4gKwkgICAgICAgImFuZCByZWFsICglI3gpIGxldmVsbGluZyBjYXBzOiBtaXNzaW5nICUj eFxuIiwKPj4gKwkgICAgICAgZXhwZWN0ZWRfbGV2ZWxsaW5nX2NhcCwgbGV2ZWxsaW5nX2NhcHMs Cj4+ICsJICAgICAgIChleHBlY3RlZF9sZXZlbGxpbmdfY2FwIF4gbGV2ZWxsaW5nX2NhcHMpICYg bGV2ZWxsaW5nX2NhcHMpOwo+PiArCXByaW50ayhYRU5MT0dfV0FSTklORyAiRmFtICUjeCwgbW9k ZWwgJSN4IGxldmVsICUjeFxuIiwKPj4gKwkgICAgICAgYy0+eDg2LCBjLT54ODZfbW9kZWwsIGMt PmNwdWlkX2xldmVsKTsKPj4gKwlwcmludGsoWEVOTE9HX1dBUk5JTkcKPj4gKwkgICAgICAgIklm IG5vdCBydW5uaW5nIHZpcnR1YWxpc2VkLCBwbGVhc2UgcmVwb3J0IGEgYnVnXG4iKTsKPiBZb3Ug YWxyZWFkeSBoYXZlIGFuIGNwdV9oYXNfaHlwZXJ2aXNvciBjaGVjayBhYm92ZT8gT3IgaXMgdGhh dCBmb3IKPiB0aGUgaHlwZXJ2aXNvciB3aGljaCBkbyBub3Qgc2V0IHRoYXQgYml0PwoKQ29ycmVj dC4KCj4KPj4gK30KPj4gKwo+PiArLyoKPj4gKyAqIENvbnRleHQgc3dpdGNoIGxldmVsbGluZyBz dGF0ZSB0byB0aGUgbmV4dCBkb21haW4uICBBIHBhcmFtZXRlciBvZiBOVUxMIGlzCj4+ICsgKiB1 c2VkIHRvIGNvbnRleHQgc3dpdGNoIHRvIHRoZSBkZWZhdWx0IGhvc3Qgc3RhdGUsIGFuZCBpcyB1 c2VkIGJ5IHRoZSBCU1AvQVAKPj4gKyAqIHN0YXJ0dXAgY29kZS4KPiBPSywgaG93IGFib3V0Ogo+ PiArICovCj4+ICtzdGF0aWMgdm9pZCBhbWRfY3R4dF9zd2l0Y2hfbGV2ZWxsaW5nKGNvbnN0IHN0 cnVjdCBkb21haW4gKm5leHRkKQo+PiArewo+PiArCXN0cnVjdCBjcHVpZG1hc2tzICp0aGVzZV9t YXNrcyA9ICZ0aGlzX2NwdShjcHVpZG1hc2tzKTsKPj4gKwljb25zdCBzdHJ1Y3QgY3B1aWRtYXNr cyAqbWFza3MgPSAmY3B1aWRtYXNrX2RlZmF1bHRzOwo+PiArCj4gCUFTU0VSVCghZCAmJiBzeXN0 ZW1fc3RhdGUgIT0gU1lTX1NUQVRFX2FjdGl2ZSk7ID8KCkJlY2F1c2UgY29udGV4dCBzd2l0Y2hp bmcgYmFjayB0byBOVUxMIGlzIGluIG90aGVyIHNpdHVhdGlvbnMsIHN1Y2ggYXMKdGhlIGNyYXNo IHBhdGguCgo+PiArCQkJZWN4ICY9IG9wdF9jcHVpZF9tYXNrX2VjeDsKPj4gKwkJCWVkeCAmPSBv cHRfY3B1aWRfbWFza19lZHg7Cj4+ICsJCX0gZWxzZSBpZiAobSkgewo+PiArCQkJZWN4ICY9IG0t PmVjeDsKPj4gKwkJCWVkeCAmPSBtLT5lZHg7Cj4+ICAJCX0KPj4gLQkJZmVhdF9lY3ggPSBtLT5l Y3g7Cj4+IC0JCWZlYXRfZWR4ID0gbS0+ZWR4Owo+PiAtCQlleHRmZWF0X2VjeCA9IG0tPmV4dF9l Y3g7Cj4+IC0JCWV4dGZlYXRfZWR4ID0gbS0+ZXh0X2VkeDsKPj4gKwo+PiArCQkvKiBGYXN0LWZv cndhcmQgYml0cyAtIE11c3QgYmUgc2V0LiAqLwo+PiArCQlpZiAoZWN4ICYgY3B1ZmVhdF9tYXNr KFg4Nl9GRUFUVVJFX1hTQVZFKSkKPj4gKwkJCWVjeCB8PSBjcHVmZWF0X21hc2soWDg2X0ZFQVRV UkVfT1NYU0FWRSk7Cj4+ICsJCWVkeCB8PSBjcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfQVBJQyk7 Cj4+ICsKPj4gKwkJLyogQWxsb3cgdGhlIEhZUEVSVklTT1IgYml0IHRvIGJlIHNldCB2aWEgZ3Vl c3QgcG9saWN5LiAqLwo+PiArCQllY3ggfD0gY3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX0hZUEVS VklTT1IpOwo+IEhtbS4gVGhlIGh0dHA6Ly9zdXBwb3J0LmFtZC5jb20vVGVjaERvY3MvNTI3NDBf MTZoX01vZGVsc18zMGgtM0ZoX0JLREcucGRmCj4gcGcgNjI0IG1lbnRpb25zIHRoaXMgKGJpdCA2 MykgYXMgJ1Jlc2VydmVkJy4gU2hvdWxkIHdlIHJlYWxseSBzZXQgaXQ/Cj4gQWgsIGJ1dCB0aGVu IGVhcmxpZXIgKHBnIDUzMCkgaXQgc2F5cyAnUmVzZXJ2ZWQgZm9yIHVzZSBieSBoeXBlcnZpc29y IHRvIGluZGljYXRlCj4gZ3Vlc3Qgc3RhdHVzLgo+Cj4KPj4gKwo+PiArCQljcHVpZG1hc2tfZGVm YXVsdHMuXzFjZCA9ICgodWludDY0X3QpZWN4IDw8IDMyKSB8IGVkeDsKPiBDb25zaWRlcmluZyB0 aGUgZG9jdW1lbnQgbWVudGlvbnMgUmVzZXJ2ZWQgc2hvdWxkIHdlIHByZXNlcnZlIHRoZSBiaXRz IHRoYXQKPiBhcmUgc2V0IGJ5IHRoZSBpbml0aWFsIGNhbGwgdGhhdCBmaWxscyBvdXQgdGhlIGNw dWlkbWFza19kZWZhdWx0PwoKV2UgYWxyZWFkeSBkby4gIE9ic2VydmUgdGhhdCB0aGUgZGVmYXVs dHMgd2lsbCBiZSByZWZsZWN0ZWQgYnkgdGhlCmNwdWlkKCkgY2FsbC4KCj4KPiBUaGUgb3JpZ2lu YWwgY29kZSBhbHNvIGhhZDoKPj4gIAl9Cj4+ICAKPj4gLSAgICAgICAgLyogU2V0dGluZyBiaXRz IGluIHRoZSBDUFVJRCBtYXNrIE1TUiB0aGF0IGFyZSBub3Qgc2V0IGluIHRoZQo+PiAtICAgICAg ICAgKiB1bm1hc2tlZCBDUFVJRCByZXNwb25zZSBjYW4gY2F1c2UgdGhvc2UgYml0cyB0byBiZSBz ZXQgaW4gdGhlCj4+IC0gICAgICAgICAqIG1hc2tlZCByZXNwb25zZS4gIEF2b2lkIHRoYXQgYnkg ZXhwbGljaXRseSBtYXNraW5nIGluIHNvZnR3YXJlLiAqLwo+ICB0aGF0IGNvbW1lbnQgaW4gaXQu IFdvdWxkIGl0IG1ha2Ugc2Vuc2UgdG8gaW5jbHVkZSBpdCAob3IgYSByZXdvcmsgb2YgaXQgc2lu Y2UKPiBJIHdhc24ndCBleGFjdGx5IHN1cmUgd2hhdCBpdCB3YXMgc2F5aW5nKS4KClRoZXNlIE1T UnMgYXJlIG92ZXJyaWRlcywgd2hpY2ggaW4gcHJhY3RpY2UgYWxsb3cgeW91IHRvIGFkdmVydGlz ZQpmZWF0dXJlcyB3aGljaCBhcmUgbm90IGFjdHVhbGx5IHN1cHBvcnRlZCBieSBoYXJkd2FyZS4g IFRoaXMgaXMgYmFkLCBhcwp0aGUgYXR0ZW1wdGluZyB0byB1c2UgdGhlIGZlYXR1cmUgd2lsbCBz dGlsbCBjYXVzZSBhICNVRCBmYXVsdC4KCj4KPj4gKwkJCWVjeCAmPSBvcHRfY3B1aWRfbWFza19l eHRfZWN4Owo+PiArCQkJZWR4ICY9IG9wdF9jcHVpZF9tYXNrX2V4dF9lZHg7Cj4+ICsJCX0gZWxz ZSBpZiAobSkgewo+PiArCQkJZWN4ICY9IG0tPmV4dF9lY3g7Cj4+ICsJCQllZHggJj0gbS0+ZXh0 X2VkeDsKPj4gKwkJfQo+PiArCj4+ICsJCS8qIEZhc3QtZm9yd2FyZCBiaXRzIC0gTXVzdCBiZSBz ZXQuICovCj4+ICsJCWVkeCB8PSBjcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfQVBJQyk7Cj4+ICsK Pj4gKwkJY3B1aWRtYXNrX2RlZmF1bHRzLmUxY2QgPSAoKHVpbnQ2NF90KWVjeCA8PCAzMikgfCBl ZHg7Cj4gU2hvdWxkIHRoaXMgYmUgJj0gPwoKTm8sIGJlY2F1c2UgdGhhdCB3b3VsZCBwcmV2ZW50 IGNvcnJlY3QgaGFuZGxpbmcgb2YgdGhlIGZhc3QgZm9yd2FyZCBiaXRzLgoKPj4gKwkJCWVheCAm PSBvcHRfY3B1aWRfbWFza19sN3MwX2VheDsKPj4gKwkJCWVieCAmPSBvcHRfY3B1aWRfbWFza19s N3MwX2VieDsKPj4gKwkJfQo+PiArCj4+ICsJCWNwdWlkbWFza19kZWZhdWx0cy5fN2FiMCAmPSAo KHVpbnQ2NF90KWVheCA8PCAzMikgfCBlYng7Cj4+ICAJfQo+PiAgCj4+IC0JaWYgKCFza2lwX2w3 czBfZWF4X2VieCAmJgo+PiAtCSAgICB3cm1zcl9hbWRfc2FmZShNU1JfQU1EX0w3UzBfRkVBVFVS RV9NQVNLLCBsN3MwX2VieCwgbDdzMF9lYXgpKSB7Cj4+IC0JCXNraXBfbDdzMF9lYXhfZWJ4ID0g MTsKPj4gLQkJcHJpbnRrKCJGYWlsZWQgdG8gc2V0IENQVUlEIGxlYWYgNyBzdWJsZWFmIDAgZmVh dHVyZSBtYXNrXG4iKTsKPj4gKwlpZiAoKGxldmVsbGluZ19jYXBzICYgTENBUF82YykgPT0gTENB UF82Yykgewo+PiArCQl1aW50MzJfdCBlY3ggPSBjcHVpZF9lY3goNik7Cj4+ICsKPj4gKwkJaWYg KH5vcHRfY3B1aWRfbWFza190aGVybWFsX2VjeCkKPj4gKwkJCWVjeCAmPSBvcHRfY3B1aWRfbWFz a190aGVybWFsX2VjeDsKPj4gKwo+PiArCQljcHVpZG1hc2tfZGVmYXVsdHMuXzZjICY9ICh+MFVM TCA8PCAzMikgfCBlY3g7Cj4KPiBJcyB0aGVyZSBhbnkgZG9jdW1lbnRhdGlvbiBhYm91dCB0aGlz PyBUaGUgQktERyBmcm9tIDAzLzIwMTYgZG9lcyBub3QgbWVudGlvbgo+IHRoaXMgTVNSIChDMDAx XzEwMDMpLiBBaCBidXQgaXQgaXMgbWVudGlvbmVkIGluIGRvY3MgZm9yIEZhbWlseSAxNXRoLiBI b3cgbmljZS4KClRoZSBkb2N1bWVudGF0aW9uIGluIHRoaXMgcmVnYXJkIGlzIHJlbWFya2FibHkg cG9vci4KCj4KPj4gIAl9Lgo+PiAgCj4+IC0JaWYgKCFza2lwX3RoZXJtYWxfZWN4ICYmCj4+IC0J ICAgIChyZG1zcl9hbWRfc2FmZShNU1JfQU1EX1RIUk1fRkVBVFVSRV9NQVNLLCAmZWF4LCAmZWR4 KSB8fAo+PiAtCSAgICAgd3Jtc3JfYW1kX3NhZmUoTVNSX0FNRF9USFJNX0ZFQVRVUkVfTUFTSywg dGhlcm1hbF9lY3gsIGVkeCkpKXsKPj4gLQkJc2tpcF90aGVybWFsX2VjeCA9IDE7Cj4+IC0JCXBy aW50aygiRmFpbGVkIHRvIHNldCBDUFVJRCB0aGVybWFsL3Bvd2VyIGZlYXR1cmUgbWFza1xuIik7 Cj4+ICsJaWYgKG9wdF9jcHVfaW5mbykgewo+PiArCQlwcmludGsoWEVOTE9HX0lORk8gIkxldmVs bGluZyBjYXBzOiAlI3hcbiIsIGxldmVsbGluZ19jYXBzKTsKPj4gKwkJcHJpbnRrKFhFTkxPR19J TkZPCj4+ICsJCSAgICAgICAiTVNSIGRlZmF1bHRzOiAxZCAweCUwOHgsIDFjIDB4JTA4eCwgZTFk IDB4JTA4eCwgIgo+PiArCQkgICAgICAgImUxYyAweCUwOHgsIDdhMCAweCUwOHgsIDdiMCAweCUw OHgsIDZjIDB4JTA4eFxuIiwKPj4gKwkJICAgICAgICh1aW50MzJfdCljcHVpZG1hc2tfZGVmYXVs dHMuXzFjZCwKPj4gKwkJICAgICAgICh1aW50MzJfdCkoY3B1aWRtYXNrX2RlZmF1bHRzLl8xY2Qg Pj4gMzIpLAo+PiArCQkgICAgICAgKHVpbnQzMl90KWNwdWlkbWFza19kZWZhdWx0cy5lMWNkLAo+ PiArCQkgICAgICAgKHVpbnQzMl90KShjcHVpZG1hc2tfZGVmYXVsdHMuZTFjZCA+PiAzMiksCj4+ ICsJCSAgICAgICAodWludDMyX3QpKGNwdWlkbWFza19kZWZhdWx0cy5fN2FiMCA+PiAzMiksCj4+ ICsJCSAgICAgICAodWludDMyX3QpY3B1aWRtYXNrX2RlZmF1bHRzLl83YWIwLAo+PiArCQkgICAg ICAgKHVpbnQzMl90KWNwdWlkbWFza19kZWZhdWx0cy5fNmMpOwo+IFdoeSBkb24ndCB5b3UgYml0 IHNoaWZ0IGNwdWlkbWFza19kZWZhdWx0cy5fNmMgdG9vPwoKQmVjYXVzZSBvbmx5IHRoZSBib3R0 b20gMzJiaXQgYXJlIHJlbGV2YW50LgoKfkFuZHJldwoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxA bGlzdHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK