From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mohit Gambhir Subject: Re: [PATCH v3 2/2][XTF] xtf/vpmu: MSR read/write tests for VPMU Date: Thu, 4 May 2017 17:36:11 -0400 Message-ID: <5a11fdc2-4db9-bf6c-d845-8989810971ae@oracle.com> References: <20170424175430.395-1-mohit.gambhir@oracle.com> <20170424175430.395-3-mohit.gambhir@oracle.com> <9d12b9e0-cc3e-1ad6-6168-706068729e47@citrix.com> <710894a2-c8c0-8337-ef98-51f238be362b@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <710894a2-c8c0-8337-ef98-51f238be362b@oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Andrew Cooper , xen-devel@lists.xen.org Cc: boris.ostrovsky@oracle.com, mgambhir@outlook.com List-Id: xen-devel@lists.xenproject.org QWRkaW5nIHBlcnNvbmFsIGVtYWlsIGlkIGZvciBmdXR1cmUgY29ycmVzcG9uZGVuY2Ugb24gdGhp cyB0aHJlYWQgLSAKbWdhbWJoaXJAb3V0bG9vay5jb20KCk9uIDA1LzA0LzIwMTcgMDU6MTMgUE0s IE1vaGl0IEdhbWJoaXIgd3JvdGU6Cj4KPgo+IE9uIDA1LzAzLzIwMTcgMDQ6NDEgUE0sIEFuZHJl dyBDb29wZXIgd3JvdGU6Cj4+IE9uIDI1LzA0LzE3IDIyOjQ1LCBNb2hpdCBHYW1iaGlyIHdyb3Rl Ogo+Pj4+PiBkaWZmIC0tZ2l0IGEvdGVzdHMvdnBtdS9NYWtlZmlsZSBiL3Rlc3RzL3ZwbXUvTWFr ZWZpbGUKPj4+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4+Pj4gaW5kZXggMDAwMDAwMC4uMWVh ZjQzNgo+Pj4+PiAtLS0gL2Rldi9udWxsCj4+Pj4+ICsrKyBiL3Rlc3RzL3ZwbXUvTWFrZWZpbGUK Pj4+Pj4gQEAgLTAsMCArMSw5IEBACj4+Pj4+ICtpbmNsdWRlICQoUk9PVCkvYnVpbGQvY29tbW9u Lm1rCj4+Pj4+ICsKPj4+Pj4gK05BTUUgICAgICA6PSB2cG11Cj4+Pj4+ICtDQVRFR09SWSAgOj0g dXRpbGl0eQo+Pj4+IHV0aWxpdGllcyBkb24ndCBnZXQgcnVuIGF1dG9tYXRpY2FsbHkuICBJcyB0 aGlzIGludGVudGlvbmFsPyAgSWYgaXQKPj4+PiBpc24ndCwgd2hhdCBpcyB0aGUgcGxhbiBmb3Ig bWFraW5nIGl0IGF1dG9tYXRpY2FsbHkgcnVuPyB2cG11IGlzIHN0aWxsCj4+Pj4gZGlzYWJsZWQg YnkgZGVmYXVsdCBpbiBhbGwgYnJhbmNoZXMgZHVlIHRvIHRoZSBzZWN1cml0eSAKPj4+PiB2dWxu ZXJhYmlsaXRpZXMsCj4+Pj4gc28gZXZlbiBpZiB0aGlzIHZwbXUgdGVzdCB3YXMgYXV0b21hdGlj YWxseSBydW4sIGl0IHdvdWxkIHNraXAgZHVlIHRvCj4+Pj4gdnBtdSBub3QgYmVpbmcgdmlzaWJs ZS4KPj4+IFRoZSByZWFzb24gSSB3YW50ZWQgaXQgdG8gbm90IHJ1biBhdXRvbWF0aWNhbGx5IHdh cyBiZWNhdXNlIEkgdGhvdWdodAo+Pj4gaXQgd2lsbCBmYWlsIHdoZW4gdnBtdQo+Pj4gaXMgbm90 IGVuYWJsZWQgLSB3aGljaCBpcyB0aGUgZGVmYXVsdCBjYXNlLiBCdXQgaWYgWFRGIHdpbGwgc2tp cCB2cG11Cj4+PiB0ZXN0cyB3aGVuIGl0IGlzIGRpc2FibGVkCj4+PiB0aGVuIHdlIGNhbiBydW4g dGhlIHRlc3RzIGF1dG9tYXRpY2FsbHkuIFNob3VsZCB0aGUgQ0FURUdPUlkgYmUKPj4+IGZ1bmN0 aW9uYWwgaW4gdGhhdCBjYXNlPwo+Pj4+IEFzIGEgdGFuZ2VudCwgSSB3b25kZXIgaWYgaXQgd291 bGQgYmUgYSB1c2VmdWwgdG8gaGF2ZSBhIHNlcGFyYXRlCj4+Pj4gY2F0ZWdvcnkgZm9yIGluY29t cGxldGUgdGVzdHMsIGJ1dCB3aGljaCBhcmUgc3RpbGwgdXNlZnVsIHRvIGhhdmUgZm9yCj4+Pj4g bWFudWFsIHJ1bm5pbmcuCj4+PiBQb3NzaWJseS4gVXRpbGl0eSBjYXRlZ29yeSBzZWVtcyB0byBk byBqdXN0IHRoYXQgYnV0IEkgY2FuIHNlZSB0aGF0IGl0Cj4+PiBpcyByZWFsbHkgbm90IG1lYW50 IGZvcgo+Pj4gZnVuY3Rpb25hbCB0ZXN0cy4gVGhlcmUgYXJlIHNpdHVhdGlvbnMgd2hlcmUgd3Jp dGluZyB0ZXN0cyBiZWZvcmUgb3IKPj4+IHdoaWxlIGltcGxlbWVudGluZyBhCj4+PiBmZWF0dXJl IGlzIHVzZWZ1bCAgYW5kIGluIHRoYXQgY2FzZSB0aGlzIG5ldyBjYXRlZ29yeSBjYW4gYmUKPj4+ IGJlbmVmaWNpYWwuIEl0IHdvdWxkIGFsc28gYmVuZWZpdAo+Pj4gdG8gaGF2ZSBzb21lIGtpbmQg b2YgImV4cGVjdGVkIGZhaWx1cmUiIHJldHVybiB0eXBlLgo+PiBIb3BlZnVsbHkgSSBoYXZlIGNv dmVyZWQgYWxsIG9mIHRoZXNlIHBvaW50cyBzdWZmaWNpZW50bHkgaW4gdGhlIDAvMgo+PiB0aHJl YWQuICBJbiB0aGUgbWVhbnRpbWUsIEknbGwgY29uc2lkZXIgaG93IGJlc3QgdG8gaW50cm9kdWNl IGEgIm5vdAo+PiBxdWl0ZSBmdWxseSBiYWtlZCB5ZXQiIGNhdGVnb3J5Lgo+Pgo+Pj4+PiArVEVT VC1FTlZTIDo9ICQoQUxMX0VOVklST05NRU5UUykKPj4+PiBZb3UgYnVpbGQgZm9yIGFsbCBlbnZp cm9ubWVudHMsIGJ1dCB0aGVuIGhhdmUgUFYgdW5pbGF0ZXJhbGx5IHNraXAuCj4+Pj4gQWdhaW4s IGlzIHRoaXMgaW50ZW50aW9uYWw/Cj4+PiBZZXMsIEkgdGhvdWdodCBJIHdvdWxkIGdvIGJhY2sg YW5kIGFkZCBQVi9BTUQgdGVzdHMgaW4gVjIgYnV0IEkgY2FuCj4+PiBsZWF2ZSB0aG9zZSBURVNU LUVOVlMKPj4+IG91dCBmb3Igbm93IGFuZCAic2tpcCB0aGUgc2tpcCIgOikgaWYgdGhhdCdzIHBy ZWZlcmFibGUuCj4+Pj4gRm9yIEhWTSwgd2h5IGFsbCBlbnZpcm9ubWVudHM/ICBkb2VzIFBNVSBo YXZlIGFueSBpbnRlcmFjdGlvbiB3aXRoIHRoZQo+Pj4+IG9wZXJhdGluZyBvciBwYWdpbmcgbW9k ZSBpbiB1c2UgYXQgdGhlIHRpbWUgb2YgdGhlIHNhbXBsZXM/Cj4+PiBOb3QgdGhhdCBJIGtub3cg b2YuIFNvIHNob3VsZCBpdCBqdXN0IGJlIGh2bTY0Pwo+PiBGb3Igbm93LCBJJ2Qgc3RpY2sgd2l0 aCBqdXN0IGh2bTY0LiAgKEEgY29tcGxpY2F0aW9uIHdoaWNoIEkgaGF2ZSB5ZXQgdG8KPj4gc29y dCBvdXQgaXMgdGhlIFRFU1QtUkVWSVNJT04gYnVpbGRzLCBzbyBhZGRpbmcgbmV3IGxvZ2ljYWwg Y29udGVudCB0bwo+PiBhbiBleGlzdGluZyB0ZXN0IGRvZXNuJ3QgaW50ZXJmZXJlIHdpdGggT1NT VGVzdHMgYmlzZWN0aW9uIGxvZ2ljLCBidXQKPj4gdGhhdCBpc24ndCBhbiBpbW1lZGlhdGUgcHJv YmxlbS4pCj4gRml4ZWQgaW4gdjUuCj4+Pj4+ICsKPj4+Pj4gKyAgICBwcmludGsoIi0tLS0tLS0t LS0tLS0tLS0tXG4iKTsKPj4+Pj4gKyAgICBwcmludGsoIlRlc3RpbmcgdmVyc2lvbiAxXG4iKTsK Pj4+Pj4gKyAgICBwcmludGsoIi0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKPj4+Pj4gKwo+Pj4+PiAr ICAgIC8qIGZvciBhbGwgZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXJzICovCj4+Pj4+ICsgICAgZm9y ICggaSA9IDA7IGkgPCBuZzsgaSsrICkKPj4+Pj4gKyAgICB7Cj4+Pj4+ICsgICAgICAgIC8qIHRl c3Qgd3JpdGluZyB0byBJQTMyX1BNQ3ggKi8KPj4+Pj4gKyAgICAgICAgaWR4ID0gTVNSX0lBMzJf UE1DKGkpOwo+Pj4+PiArCj4+Pj4+ICsgICAgICAgIC8qIHRlc3Qgd2UgY2FuIHdyaXRlIHRvIGFs bCB2YWxpZCBiaXRzIGluIHRoZSBjb3VudGVycyAqLwo+Pj4+PiArICAgICAgICAvKiBkb24ndCBz ZXQgYml0IDMxIHNpbmNlIHRoYXQgZ2V0cyBzaWduLWV4dGVuZGVkICovCj4+Pj4gV2hhdCBpcyB3 cm9uZyB3aXRoIGJpdCAzMSBiZWluZyBzaWduIGV4dGVuZGVkPwo+Pj4gVGhlIHByb2JsZW0gdGhl cmUgaXMgdGhhdCBzZXR0aW5nIFBNQ3ggdG8gMHhmZmZmZmZmZiBzaWduIGV4dGVuZHMgMzFzdAo+ Pj4gYml0IHRvCj4+PiB0aGUgcmVtYWluaW5nIGJpdHMuIFNvIFBNQ3ggYmVjb21lcyAweGZmZmZm ZmZmZmZmZiAod2hlbiBiaXQgd2lkdGggaXMKPj4+IDQ4KS4gcmRtc3IgdGhlbgo+Pj4gcmVhZHMg YWxsIDQ4IGJpdHMgYW5kIHRoZSB2YWx1ZSBtaXNtYXRjaGVzIHRoZSBvbmUgdGhhdCB3YXMgd3Jp dHRlbi4KPj4gVGhhdCBiZWhhdmlvdXIgc291bmRzIG1hZCwgYnV0IEkgc2VlIGl0IG5vdyBkZXNj cmliZWQgaW4gdGhlIG1hbnVhbHMuCj4+IE9oIHdlbGwuLi4KPj4KPj4+IEEgc21hcnRlciB0ZXN0 IHdvdWxkIHByb3ZpZGUgYm90aCAtIHdyaXRlIHZhbHVlIHRvIHdyaXRlIGFuZCByZWFkCj4+PiB2 YWx1ZSB0byBjaGVjayBhZ2FpbnN0Lgo+Pj4gQnV0IHRlc3RfdmFsaWRfbXNyX3dyaXRlKCkgb25s eSB0YWtlcyB3dmFsIGFuZCBjaGVja3MgdG8gc2VlIGlmIHdlCj4+PiByZWFkIHRoZSBzYW1lIHZh bHVlCj4+PiB0aGF0IHdlIHdyb3RlLgo+PiBXZWxsIC0geW91IGRpZCBpbnRyb2R1Y2UgdGhhdCBm dW5jdGlvbi4gIElmIGFsdGVyaW5nIGl0IHdvdWxkIGJlIGEKPj4gc21hcnRlciB0ZXN0LCB0aGVu IHBlcmhhcHMgdGhhdCBpcyB0aGUgYmV0dGVyIG9wdGlvbiB0byB0YWtlLgo+IEZpeGVkIGluIHY1 Cj4+Pj4+ICsgICAgICAgIHd2YWwgPSAoKDF1bGwgPDwgMzEpIC0gMSkgOwo+Pj4+PiArCj4+Pj4+ ICsgICAgICAgIGlmICggIXRlc3RfdmFsaWRfbXNyX3dyaXRlKGlkeCwgd3ZhbCkgKQo+Pj4+PiAr ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+Pj4+PiArCj4+Pj4+ICsgICAgICAgIC8qIHNldCBh bGwgdmFsaWQgYml0cyBpbiBNU1JfSUEzMl9FVkVOVFNFTHggKi8KPj4+Pj4gKyAgICAgICAgaWR4 ID0gTVNSX0lBMzJfUEVSRkVWVFNFTChpKTsKPj4+Pj4gKyAgICAgICAgd3ZhbCA9ICgoMXVsbCA8 PCAzMikgLSAxKSBeCj4+Pj4+IChJQTMyX1BFUkZFVkVOVFNFTHhfRU5BQkxFX0FOWVRIUkVBRCB8 Cj4+Pj4+ICsgICAgICAgICAgICAgICAgSUEzMl9QRVJGRVZFTlRTRUx4X0VOQUJMRV9QQ0IpOwo+ Pj4+IFdoYXQgaXMgd3Jvbmcgd2l0aCBQaW4gQ29udHJvbCBpbiB0aGlzIHJlZ2lzdGVyPyBBcmNo aXRlY3R1cmFsbHksIAo+Pj4+IGl0IGlzCj4+Pj4gYSBzb2Z0d2FyZSBjb25maWd1cmFibGUgYml0 Lgo+Pj4gTG9vayBhdCB0aGlzIHBhdGNoIG9uIHhlbi1kZXZlbAo+Pj4KPj4+IFtQQVRDSF0gRml4 IGh5cGVydmlzb3IgY3Jhc2ggd2hlbiB3cml0aW5nIHRvIFZQTVUgTVNSCj4+Pgo+Pj4gSSBmb3Vu ZCB0aGF0IG91dCB3aGlsZSB3cml0aW5nIHRoaXMgdGVzdC4KPj4gV2VsY29tZSB0byB0aGUgdmVy eSBncmV5IGFyZWFzIG9mIHByb2Nlc3NvcnMgd2hpY2ggWFRGIGhhcyBhIGhhYml0IG9mCj4+IGZp bmRpbmcuICAoSSByZWFsbHkgbmVlZCB0byBjb3JyZWxhdGUgYWxsIHRoZSBzdXNwZWN0ZWQgZXJy YXRhIGluIHRoZQo+PiBkb3h5Z2VuIGNvbW1lbnRzKS4KPj4KPj4gT2J2aW91c2x5LCBYZW4gc2hv dWxkbid0IGNyYXNoLCBidXQgd2UgYXJlIGdvaW5nIHRvIG5lZWQgZmVlZGJhY2sgZnJvbQo+PiBJ bnRlbCBiZWZvcmUgd29ya2luZyBvdXQgaG93IHRvIHByb2NlZWQuCj4+Cj4+Pj4+ICsgICAgLyog dGVzdCBJQTMyX0RFQlVHQ1RMICovCj4+Pj4+ICsgICAgaWR4ID0gTVNSX0lBMzJfREVCVUdDVEw7 Cj4+Pj4+ICsKPj4+Pj4gKyAgICAvKiBUZXN0IElBMzJfREVCVUdDVEwgZmFjaWxpdGllcyBlbmFi bGVkIGJ5IHYyICovCj4+Pj4+ICsgICAgd3ZhbCA9IElBMzJfREVCVUdDVExfRnJlZXplX0xCUl9P Tl9QTUkgfAo+Pj4+PiBJQTMyX0RFQlVHQ1RMX0ZyZWV6ZV9QZXJmTW9uX09uX1BNSTsKPj4+Pj4g Kwo+Pj4+PiArICAgIC8qIEZJWE1FOiBUaGlzIHNob3VsZCByZWFsbHkgYmUgYSB2YWxpZCB3cml0 ZSBidXQgaXQgaXNudAo+Pj4+PiBzdXBwb3J0ZWQgYnkgdGhlCj4+Pj4+ICsgICAgICogVlBNVSB5 ZXQgKi8KPj4+PiBJbiB3aGljaCBjYXNlIHRoZSB0ZXN0IHNob3VsZCBiZSBjb3JyZWN0IGhlcmUs IGFuZCBoaWdobGlnaHQgdGhhdCAKPj4+PiB0aGVyZQo+Pj4+IGlzIGEgYnVnIGluIFhlbi4KPj4+ IEJ1dCB0aGVuLCBzaG91bGQgdGhlIG1haW4gdGVzdCByZXR1cm4geHRmX3N1Y2Nlc3MsIHh0Zl9z a2lwIG9yCj4+PiB4dGZfZmFpbHVyZT8KPj4gRmFpbHVyZS4gIFhlbiBpcyBwcm92YWJseSBtYWxm dW5jdGlvbmluZy4KPiBGaXhlZCBpbiB2NS4gVGhlIHRlc3RzIG5vdyBmYWlsLgo+Pgo+Pj4+PiAr ICAgIC8qIEdldCBwZXJmIGNhcGFiaWx0aWVzICovCj4+Pj4+ICsgICAgaWYgKCByZG1zcl9zYWZl KE1TUl9JQTMyX1BFUkZfQ0FQQUJJTElUSUVTLCAmY2FwcykgKQo+Pj4+PiArICAgIHsKPj4+Pj4g KyAgICAgICAgcHJpbnRrKCJGYXVsdCB3aGlsZSByZWFkaW5nIE1TUl9JQTMyX1BFUkZfQ0FQQUJJ TElUSUVTXG4iKTsKPj4+PiBUaGUgUEVSRl9DQVBBQklMSVRJRVMgTVNSIGlzIG9ubHkgdmFsaWQg dG8gcmVhZCBpZiBQRENNIGlzIAo+Pj4+IGFkdmVydGlzZWQgaW4KPj4+PiBDUFVJRC4KPj4+Pgo+ Pj4+IFdlIGN1cnJlbnRseSBuZXZlciBhZHZlcnRpc2UgUENETSwgYW5kIGlzIGEgYnVnIHRoYXQK Pj4+PiBNU1JfUEVSRl9DQVBBQklMSVRJRVMgaXMgYWNjZXNzYWJsZSBhdCBhbGwgaW4gZ3Vlc3Qg Y29udGV4dC4KPj4+PiAoc3BlY2lmaWNhbGx5LCBpdCBpcyBiZWNhdXNlIFhlbiBsZWFrcyBhbG1v c3QgYWxsIGhvc3QgTVNSIHN0YXRlIGludG8KPj4+PiBndWVzdHMpLgo+Pj4gU28gSSBzdXBwb3Nl IEkgY2FuJ3QgdGVzdCBmdWxsLWJpdCB3aWR0aCB3cml0ZXMgdGhlbj8KPj4gV2VsbCwgdGhlIGNv ZGUgc2hvdWxkIGJlIGFyY2hpdGVjdHVyYWxseSBjb3JyZWN0IHRvIHN0YXJ0IHdpdGguIEFmdGVy Cj4+IHRoYXQsIGl0IGlzIHJlYXNvbmFibGUgdG8gZXhwbGFpbiB0aGF0IFhlbiB1c2VkIHRvIGxl YWsKPj4gUEVSRl9DQVBBQklMSVRJRVMgaW50byBndWVzdHMgdmlldywgYXQgd2hpY2ggcG9pbnQg cHJvYmluZyBpdCBpcyBhCj4+IGxlZ2l0aW1hdGUgdGhpbmcgdG8gZG8uCj4+Cj4+IEhvd2V2ZXIs IHlvdSBzaG91bGQgdGFrZSBjYXJlIHRoYXQgeW91ciBsb2dpYyBkb2Vzbid0IGJlZ2luIHRvIGZh aWwgYXQKPj4gdGhlIHBvaW50IHRoYXQgWGVuIGlzIGZpeGVkIHRvIGJlaGF2ZSBhcmNoaXRlY3R1 cmFsbHkgKGFuZCBhY3R1YWxseQo+PiByZXR1cm4gI0dQWzBdIGlmIFBEQ00gaXNuJ3QgYWR2ZXJ0 aXNlZCB0byB0aGUgZ3Vlc3QpLCBiZWNhdXNlIEkgd2lsbAo+PiBkZWZpbml0ZWx5IGJlIGZpeGlu ZyB0aGUgTVNSIGxlYWthZ2UgcHJvYmxlbXMgKGlmIG5vb25lIGJlYXRzIG1lIHRvIGl0KS4KPiBG aXhlZCBpbiB2NSAoIEkgdGhpbmshKQo+Pj4+PiArICAgICAgICByZXR1cm4gZmFsc2U7Cj4+Pj4+ ICsgICAgfQo+Pj4+PiArCj4+Pj4+ICsgICAgaWYgKCAhKGNhcHMgPj4gMTMpICYgMSApCj4+Pj4g VGhpcyBsYWNrcyBzdWZmaWNpZW50IGJyYWNrZXRzIGZvciB3aGF0IHlvdSBhcmUgaW50ZW5kaW5n IHRvIGRvLiAgCj4+Pj4gQWxzbywKPj4+PiBpdCBsb29rcyBsaWtlIHlvdSBwcm9iYWJseSB3YW50 IGEgI2RlZmluZSBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlIGZvcgo+Pj4+IHRoaXMgY29uc3RhbnQu Cj4+PiAhIGFuZCAmIGhhdmUgdGhlIHNhbWUgcHJlY2VkZW5jZSBhbmQgcmlnaHQgdG8gbGVmdCBh c3NvY2lhdGl2aXR5LiBTbwo+Pj4gdGVjaG5pY2FsbHkgaXQgc2hvdWxkCj4+PiBkbyB3aGF0IGl0 IGlzIGludGVuZGVkIHRvIGRvLiBCdXQgSSB3aWxsIG1ha2UgaXQgbG9vayBiZXR0ZXIuCj4+IExv Z2ljYWwgTk9UIGFuZCBBZGRyZXNzLW9mIGhhdmUgdGhlIHNhbWUgcHJlY2VkZW5jZS4gIExvZ2lj YWwgTk9UIGhhcyBhCj4+IGhpZ2hlciBwcmVjZWRlbmNlIHRoYW4gQml0d2lzZSBBTkQuCj4+Cj4+ IEFuZCB0byByZXNvbHZlIGFueSBkb3VidCwgaGVyZSBpcyB3aGF0IENsYW5nIHRoaW5nczoKPj4K Pj4gYW5kcmV3Y29vcEBhbmRyZXdjb29wOi9sb2NhbC94ZW4tdGVzdC1mcmFtZXdvcmsuZ2l0JCBt YWtlIENDPWNsYW5nLTQuMAo+PiAtajQgLXMKPj4gbWFpbi5jOjM5NjoxMDogZXJyb3I6IGxvZ2lj YWwgbm90IGlzIG9ubHkgYXBwbGllZCB0byB0aGUgbGVmdCBoYW5kIHNpZGUKPj4gb2YgdGhpcyBi aXR3aXNlIG9wZXJhdG9yIFstV2Vycm9yLC1XbG9naWNhbC1ub3QtcGFyZW50aGVzZXNdCj4+ICAg ICAgaWYgKCAhKGNhcHMgPj4gMTMpICYgMSApCj4+ICAgICAgICAgICBeICAgICAgICAgICAgIH4K PiBIYXJkIHRvIGFyZ3VlIHRoYXQuIEZpeGVkIGluIHY1Lgo+Pj4+PiArCj4+Pj4+ICsgICAgICAg IGNhc2UgMzoKPj4+Pj4gKyAgICAgICAgICAgICAgICAvKiB0ZXN0IHZlcnNpb24gMyBmYWNpbGl0 aWVzICovCj4+Pj4+ICsgICAgICAgICAgICAgICAgaWYgKCAhdGVzdF9pbnRlbF9wbXVfdmVyMygg bmdyZWdzLCBuZnJlZ3MpICkKPj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHh0Zl9m YWlsdXJlKCJGYWlsOiBGYWlsZWQgVlBNVSB2ZXJzaW9uCj4+Pj4+IDNcbiIpOwo+Pj4+PiArICAg ICAgICAgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwo+Pj4+PiArCj4+Pj4+ICsgICAgICAgIGNh c2UgMjoKPj4+Pj4gKyAgICAgICAgICAgICAgICAvKiB0ZXN0IHZlcnNpb24gMiBmYWNpbGl0aWVz ICovCj4+Pj4+ICsgICAgICAgICAgICAgICAgaWYgKCAhdGVzdF9pbnRlbF9wbXVfdmVyMihuZ3Jl Z3MsIG5mcmVncykgKQo+Pj4+PiArICAgICAgICAgICAgICAgICAgICByZXR1cm4geHRmX2ZhaWx1 cmUoIkZhaWw6IEZhaWxlZCBWUE1VIHZlcnNpb24KPj4+Pj4gMlxuIik7Cj4+Pj4+ICsKPj4+Pj4g KyAgICAgICAgICAgICAgICAvKiB0ZXN0IHZlcnNpb24gMSBmYWNpbGl0aWVzICovCj4+Pj4+ICsg ICAgICAgICAgICAgICAgaWYgKCAhdGVzdF9pbnRlbF9wbXVfdmVyMShuZ3JlZ3MpICkKPj4+Pj4g KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHh0Zl9mYWlsdXJlKCJGYWlsOiBGYWlsZWQgVlBN VSB2ZXJzaW9uCj4+Pj4+IDFcbiIpOwo+Pj4+PiArCj4+Pj4+ICsgICAgICAgICAgICAgICAgLyog dGVzdCBmdWxsIHdpZHRoIGNvdW50ZXJzICovCj4+Pj4+ICsgICAgICAgICAgICAgICAgaWYgKCAh dGVzdF9mdWxsX3dpZHRoX2NudHMobmdyZWdzLCBuZ2JpdHMpICkKPj4+Pj4gKyAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIHh0Zl9mYWlsdXJlKCJGYWlsOiBGYWlsZWQgZnVsbCB3aWR0aAo+Pj4+ PiB0ZXN0XG4iKTsKPj4+Pj4gKwo+Pj4+PiArICAgICAgICAgICAgICAgIGJyZWFrOwo+Pj4+PiAr Cj4+Pj4+ICsgICAgICAgIGNhc2UgMToKPj4+Pj4gKyAgICAgICAgICAgICAgICAvKiB2ZXJzaW9u IDEgdW5zdXBwb3J0ZWQgKi8KPj4+PiBZb3UgaGF2ZSBhIHYxIHRlc3QgZnVuY3Rpb24sIHlldCBp dCBpcyB1bnN1cHBvcnRlZD8KPj4+IFllcywgZnJvbSBWUE1VcyBwZXJzcGVjdGl2ZSwgdjEgaW4g aXRzZWxmIGlzIHVuc3VwcG9ydGVkIGJlY2F1c2UgdGhhdAo+Pj4gd291bGQKPj4+IGhhdmUgcmVx dWlyZWQgZGlzYWJsaW5nIGFjY2VzcyB0byBQRVJGX0dMT0JBTF9TVEFUVVMgYW5kCj4+PiBQRVJG X0dMT0JBTF9DVFJMIE1TUnMuCj4+PiBIb3dldmVyLCBlYWNoIHZlcnNpb24gZG9lcyBzdXBwb3J0 IGZhY2lsaXRpZXMgaW50cm9kdWNlZCBpbiB0aGUKPj4+IHByZXZpb3VzIHZlcnNpb24uCj4+PiBU aHVzLCB0ZXN0X2ludGVsX3BtdV92ZXIxKCkgaXMgaW50ZW5kZWQgZm9yIHYyIHRlc3RpbmcgYW5k IGhlbHBzCj4+PiBicmVha2luZyB0aGUKPj4+IHRlc3RfaW50ZWxfcG11X3ZlcjIoKSAgZnVuY3Rp b24gaW50byBmYWNpbGl0aWVzIGludHJvZHVjZWQgYnkgdGhlCj4+PiBhcmNoaXRlY3R1cmUgaW4K Pj4+IHR3byBzZXBhcmF0ZSB2ZXJzaW9ucyAtIHYxIGFuZCB2Mgo+PiBZb3UgYXJlIGxvZ2ljYWxs eSBjb25mdXNpbmcgWGVuJ3MgcmVhc29uaW5nIGZvciBzdXBwb3J0aW5nIGRpZmZlcmVudAo+PiB2 ZXJzaW9ucyBvZiBoYXJkd2FyZSBQTVUsIHdpdGggdGhlIHZlcnNpb24gaXQgZGVjaWRlcyB0byBh ZHZlcnRpc2UgdG8KPj4gZ3Vlc3RzLgo+Pgo+PiBJdCBpcyBjZXJ0YWlubHkgcmVhc29uYWJsZSBm b3IgdGhlIHZQTVUgZHJpdmVyIGluIFhlbiB0byBkZWNpZGUgdGhhdCwKPj4gd2l0aG91dCBQTVUg djIsIGl0IGlzIHVuYWNjZXB0YWJseSBjb21wbGljYXRlZCB0byBkZWFsIHdpdGggY29udGV4dAo+ PiBzd2l0Y2hpbmcgdGhlIGNvdW50ZXIgc3RhdGUuICBIb3dldmVyLCB0aGlzIGhhcyBubyBiZWFy aW5nIG9uIHdoaWNoCj4+IHZlcnNpb24gb2YgUE1VIGlzIGVtdWxhdGVkIHRvIHRoZSBndWVzdCwg YW5kIGl0IHdvdWxkIGNlcnRhaW5seSBzaG91bGQKPj4gYmUgcG9zc2libGUgdG8gY29uZmlndXJl IFhlbiB0byBvbmx5IGFkdmVydGlzZSB2MSB0byBndWVzdHMsIHdoaWxlIHRoZQo+PiByZWFsIGhh cmR3YXJlIGFjdHVhbGx5IHN1cHBvcnRzIHYyLiAgKEFmdGVyIGFsbCwgd2UgYWxyZWFkeSBkb3du Z3JhZGUgdjQKPj4gdG8gdjMgaW4gYSBndWVzdHMgdmlldykuCj4gWWVzLCBJIHRoaW5rIEkgdW5k ZXJzdGFuZCB3aGF0IHlvdSBhcmUgc2F5aW5nLiBJIHN0aWxsIGRvIHN0YW5kIGJ5IHRoZSAKPiBk ZWNpc2lvbiBvZiAgaGF2aW5nIGEKPiBzZXBhcmF0ZSBmdW5jdGlvbiB0byB0ZXN0IHYxIGZhY2ls aXRpZXMgZm9yIC0KPiBBKSBtb2R1bGFyaXR5Cj4gQikgTG9jYWxpemluZyB0aGUga25vd2xlZGdl IG9mIHhlbiBpbnRlcm5hbHMgdG8gdGVzdF9tYWluKCkgZnVuY3Rpb24uIAo+IFRoZSByZXN0IG9m IHRoZSBjb2RlCj4gaXMgd3JpdHRlbiB0byB0ZXN0IHRoZSBmYWNpbGl0aWVzICBhcyBkZXNjcmli ZWQgaW4gdGhlIFNETS4KPj4gT24gYW5vdGhlciBub3RlIGFib3V0IHRoZSBNU1IgbGVha2FnZSwg dGhlIHYkTiB0ZXN0IGNhc2Ugc2hvdWxkIGlkZWFsbHkKPj4gY2hlY2sgdGhhdCBub25lIG9mIHRo ZSB2JE4rMSBjYXBhYmlsaXRpZXMvZmVhdHVyZXMgYXJlIGxlYWtlZCBpbnRvIHRoZQo+PiBndWVz dCwgYnV0IHRoaXMgc21lbGxzIGxpa2UgYSBzaW1pbGFyIHF1YW50aXR5IG9mICJyZWRvaW5nIGl0 IHByb3Blcmx5Cj4+IHRoZSAybmQgdGltZSBhcm91bmQiIGFzIG15IGF0dGVtcHRzIHRvIGZpeCBD UFVJRCBoYW5kbGluZyBpbiBYZW4uCj4gTWF5YmUgc29tZXRoaW5nIHRoYXQgd2UgY2FuIGFkZCBp biBhIGZ1dHVyZSBwYXRjaD8KPj4gfkFuZHJldwo+Pgo+PiBfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwo+PiBYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Cj4+IFhl bi1kZXZlbEBsaXN0cy54ZW4ub3JnCj4+IGh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK PgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1k ZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54 ZW4ub3JnL3hlbi1kZXZlbAo=