From mboxrd@z Thu Jan 1 00:00:00 1970 From: Haozhong Zhang Subject: [PATCH v6 4/5] vmx: Add VMX RDTSC(P) scaling support Date: Sun, 28 Feb 2016 20:54:53 +0800 Message-ID: <1456664094-5161-5-git-send-email-haozhong.zhang@intel.com> References: <1456664094-5161-1-git-send-email-haozhong.zhang@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1456664094-5161-1-git-send-email-haozhong.zhang@intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: Haozhong Zhang , Kevin Tian , Keir Fraser , Jan Beulich , Andrew Cooper , Jun Nakajima List-Id: xen-devel@lists.xenproject.org VGhpcyBwYXRjaCBhZGRzIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgc2V0dXAgY29kZSBmb3IgVk1Y IFRTQyBzY2FsaW5nLgoKU2lnbmVkLW9mZi1ieTogSGFvemhvbmcgWmhhbmcgPGhhb3pob25nLnpo YW5nQGludGVsLmNvbT4KQWNrZWQtYnk6IEphbiBCZXVsaWNoIDxqYmV1bGljaEBzdXNlLmNvbT4K QWNrZWQtYnk6IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPgotLS0KQ0M6IEtlaXIg RnJhc2VyIDxrZWlyQHhlbi5vcmc+CkNDOiBKYW4gQmV1bGljaCA8amJldWxpY2hAc3VzZS5jb20+ CkNDOiBBbmRyZXcgQ29vcGVyIDxhbmRyZXcuY29vcGVyM0BjaXRyaXguY29tPgpDQzogSnVuIE5h a2FqaW1hIDxqdW4ubmFrYWppbWFAaW50ZWwuY29tPgpDQzogS2V2aW4gVGlhbiA8a2V2aW4udGlh bkBpbnRlbC5jb20+Ci0tLQpDaGFuZ2VzIGluIHY2OgogKiBBZGFwdCB0byB0aGUgbWFjcm8gcmVu YW1pbmcgaW4gcGF0Y2ggMS4KICogTm8gZnVuY3Rpb25hbGl0eSBjaGFuZ2VzLgotLS0KIHhlbi9h cmNoL3g4Ni9odm0vaHZtLmMgICAgICAgICAgICAgfCAgNiArKysrKysKIHhlbi9hcmNoL3g4Ni9o dm0vdm14L3ZtY3MuYyAgICAgICAgfCAxMiArKysrKysrKystLS0KIHhlbi9hcmNoL3g4Ni9odm0v dm14L3ZteC5jICAgICAgICAgfCAxNyArKysrKysrKysrKysrKysrKwogeGVuL2luY2x1ZGUvYXNt LXg4Ni9odm0vaHZtLmggICAgICB8ICAzICsrKwogeGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vdm14 L3ZtY3MuaCB8ICA3ICsrKysrKysKIDUgZmlsZXMgY2hhbmdlZCwgNDIgaW5zZXJ0aW9ucygrKSwg MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvaHZtL2h2bS5jIGIveGVu L2FyY2gveDg2L2h2bS9odm0uYwppbmRleCA1MGU1YTVjLi45MDU5YmJjIDEwMDY0NAotLS0gYS94 ZW4vYXJjaC94ODYvaHZtL2h2bS5jCisrKyBiL3hlbi9hcmNoL3g4Ni9odm0vaHZtLmMKQEAgLTIx MjMsNiArMjEyMyw5IEBAIHN0YXRpYyBpbnQgaHZtX2xvYWRfY3B1X2N0eHQoc3RydWN0IGRvbWFp biAqZCwgaHZtX2RvbWFpbl9jb250ZXh0X3QgKmgpCiAgICAgaWYgKCBodm1fZnVuY3MubG9hZF9j cHVfY3R4dCh2LCAmY3R4dCkgPCAwICkKICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CiAKKyAgICBp ZiAoIGh2bV9mdW5jcy50c2Nfc2NhbGluZy5zZXR1cCApCisgICAgICAgIGh2bV9mdW5jcy50c2Nf c2NhbGluZy5zZXR1cCh2KTsKKwogICAgIHYtPmFyY2guaHZtX3ZjcHUubXNyX3RzY19hdXggPSBj dHh0Lm1zcl90c2NfYXV4OwogCiAgICAgaHZtX3NldF9ndWVzdF90c2NfZml4ZWQodiwgY3R4dC50 c2MsIGQtPmFyY2guaHZtX2RvbWFpbi5zeW5jX3RzYyk7CkBAIC01NjM4LDYgKzU2NDEsOSBAQCB2 b2lkIGh2bV92Y3B1X3Jlc2V0X3N0YXRlKHN0cnVjdCB2Y3B1ICp2LCB1aW50MTZfdCBjcywgdWlu dDE2X3QgaXApCiAgICAgaHZtX3NldF9zZWdtZW50X3JlZ2lzdGVyKHYsIHg4Nl9zZWdfZ2R0ciwg JnJlZyk7CiAgICAgaHZtX3NldF9zZWdtZW50X3JlZ2lzdGVyKHYsIHg4Nl9zZWdfaWR0ciwgJnJl Zyk7CiAKKyAgICBpZiAoIGh2bV9mdW5jcy50c2Nfc2NhbGluZy5zZXR1cCApCisgICAgICAgIGh2 bV9mdW5jcy50c2Nfc2NhbGluZy5zZXR1cCh2KTsKKwogICAgIC8qIFN5bmMgQVAncyBUU0Mgd2l0 aCBCU1Ancy4gKi8KICAgICB2LT5hcmNoLmh2bV92Y3B1LmNhY2hlX3RzY19vZmZzZXQgPQogICAg ICAgICB2LT5kb21haW4tPnZjcHVbMF0tPmFyY2guaHZtX3ZjcHUuY2FjaGVfdHNjX29mZnNldDsK ZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9odm0vdm14L3ZtY3MuYyBiL3hlbi9hcmNoL3g4Ni9o dm0vdm14L3ZtY3MuYwppbmRleCA1YmMzYzc0Li5kNTA2ZjgwIDEwMDY0NAotLS0gYS94ZW4vYXJj aC94ODYvaHZtL3ZteC92bWNzLmMKKysrIGIveGVuL2FyY2gveDg2L2h2bS92bXgvdm1jcy5jCkBA IC0xNDksNiArMTQ5LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHZteF9kaXNwbGF5X2ZlYXR1cmVz KHZvaWQpCiAgICAgUChjcHVfaGFzX3ZteF92bWZ1bmMsICJWTSBGdW5jdGlvbnMiKTsKICAgICBQ KGNwdV9oYXNfdm14X3ZpcnRfZXhjZXB0aW9ucywgIlZpcnR1YWxpc2F0aW9uIEV4Y2VwdGlvbnMi KTsKICAgICBQKGNwdV9oYXNfdm14X3BtbCwgIlBhZ2UgTW9kaWZpY2F0aW9uIExvZ2dpbmciKTsK KyAgICBQKGNwdV9oYXNfdm14X3RzY19zY2FsaW5nLCAiVFNDIFNjYWxpbmciKTsKICN1bmRlZiBQ CiAKICAgICBpZiAoICFwcmludGVkICkKQEAgLTI0Myw3ICsyNDQsOCBAQCBzdGF0aWMgaW50IHZt eF9pbml0X3ZtY3NfY29uZmlnKHZvaWQpCiAgICAgICAgICAgICAgICBTRUNPTkRBUllfRVhFQ19F TkFCTEVfVk1fRlVOQ1RJT05TIHwKICAgICAgICAgICAgICAgIFNFQ09OREFSWV9FWEVDX0VOQUJM RV9WSVJUX0VYQ0VQVElPTlMgfAogICAgICAgICAgICAgICAgU0VDT05EQVJZX0VYRUNfWFNBVkVT IHwKLSAgICAgICAgICAgICAgIFNFQ09OREFSWV9FWEVDX1BDT01NSVQpOworICAgICAgICAgICAg ICAgU0VDT05EQVJZX0VYRUNfUENPTU1JVCB8CisgICAgICAgICAgICAgICBTRUNPTkRBUllfRVhF Q19UU0NfU0NBTElORyk7CiAgICAgICAgIHJkbXNybChNU1JfSUEzMl9WTVhfTUlTQywgX3ZteF9t aXNjX2NhcCk7CiAgICAgICAgIGlmICggX3ZteF9taXNjX2NhcCAmIFZNWF9NSVNDX1ZNV1JJVEVf QUxMICkKICAgICAgICAgICAgIG9wdCB8PSBTRUNPTkRBUllfRVhFQ19FTkFCTEVfVk1DU19TSEFE T1dJTkc7CkBAIC0xMDAwLDcgKzEwMDIsNyBAQCBzdGF0aWMgaW50IGNvbnN0cnVjdF92bWNzKHN0 cnVjdCB2Y3B1ICp2KQogICAgIF9fdm13cml0ZShQSU5fQkFTRURfVk1fRVhFQ19DT05UUk9MLCB2 bXhfcGluX2Jhc2VkX2V4ZWNfY29udHJvbCk7CiAKICAgICB2LT5hcmNoLmh2bV92bXguZXhlY19j b250cm9sID0gdm14X2NwdV9iYXNlZF9leGVjX2NvbnRyb2w7Ci0gICAgaWYgKCBkLT5hcmNoLnZ0 c2MgKQorICAgIGlmICggZC0+YXJjaC52dHNjICYmICFjcHVfaGFzX3ZteF90c2Nfc2NhbGluZyAp CiAgICAgICAgIHYtPmFyY2guaHZtX3ZteC5leGVjX2NvbnRyb2wgfD0gQ1BVX0JBU0VEX1JEVFND X0VYSVRJTkc7CiAKICAgICB2LT5hcmNoLmh2bV92bXguc2Vjb25kYXJ5X2V4ZWNfY29udHJvbCA9 IHZteF9zZWNvbmRhcnlfZXhlY19jb250cm9sOwpAQCAtMTI4OCw2ICsxMjkwLDkgQEAgc3RhdGlj IGludCBjb25zdHJ1Y3Rfdm1jcyhzdHJ1Y3QgdmNwdSAqdikKICAgICBpZiAoIGNwdV9oYXNfdm14 X3hzYXZlcyApCiAgICAgICAgIF9fdm13cml0ZShYU1NfRVhJVF9CSVRNQVAsIDApOwogCisgICAg aWYgKCBjcHVfaGFzX3ZteF90c2Nfc2NhbGluZyApCisgICAgICAgIF9fdm13cml0ZShUU0NfTVVM VElQTElFUiwgZC0+YXJjaC5odm1fZG9tYWluLnRzY19zY2FsaW5nX3JhdGlvKTsKKwogICAgIHZt eF92bWNzX2V4aXQodik7CiAKICAgICAvKiBQVkg6IHBhZ2luZyBtb2RlIGlzIHVwZGF0ZWQgYnkg YXJjaF9zZXRfaW5mb19ndWVzdCgpLiAqLwpAQCAtMTg3MCw3ICsxODc1LDggQEAgdm9pZCB2bWNz X2R1bXBfdmNwdShzdHJ1Y3QgdmNwdSAqdikKICAgICAgICAgICAgdm1yMzIoVk1fRVhJVF9SRUFT T04pLCB2bXIoRVhJVF9RVUFMSUZJQ0FUSU9OKSk7CiAgICAgcHJpbnRrKCJJRFRWZWN0b3Jpbmc6 IGluZm89JTA4eCBlcnJjb2RlPSUwOHhcbiIsCiAgICAgICAgICAgIHZtcjMyKElEVF9WRUNUT1JJ TkdfSU5GTyksIHZtcjMyKElEVF9WRUNUT1JJTkdfRVJST1JfQ09ERSkpOwotICAgIHByaW50aygi VFNDIE9mZnNldCA9IDB4JTAxNmx4XG4iLCB2bXIoVFNDX09GRlNFVCkpOworICAgIHByaW50aygi VFNDIE9mZnNldCA9IDB4JTAxNmx4ICBUU0MgTXVsdGlwbGllciA9IDB4JTAxNmx4XG4iLAorICAg ICAgICAgICB2bXIoVFNDX09GRlNFVCksIHZtcihUU0NfTVVMVElQTElFUikpOwogICAgIGlmICgg KHYtPmFyY2guaHZtX3ZteC5leGVjX2NvbnRyb2wgJiBDUFVfQkFTRURfVFBSX1NIQURPVykgfHwK ICAgICAgICAgICh2bXhfcGluX2Jhc2VkX2V4ZWNfY29udHJvbCAmIFBJTl9CQVNFRF9QT1NURURf SU5URVJSVVBUKSApCiAgICAgICAgIHByaW50aygiVFBSIFRocmVzaG9sZCA9IDB4JTAyeCAgUG9z dGVkSW50clZlYyA9IDB4JTAyeFxuIiwKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9odm0vdm14 L3ZteC5jIGIveGVuL2FyY2gveDg2L2h2bS92bXgvdm14LmMKaW5kZXggYjk0OWQ5Yy4uYTIwMWI3 NCAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L2h2bS92bXgvdm14LmMKKysrIGIveGVuL2FyY2gv eDg2L2h2bS92bXgvdm14LmMKQEAgLTExMjIsNiArMTEyMiwxNiBAQCBzdGF0aWMgdm9pZCB2bXhf aGFuZGxlX2NkKHN0cnVjdCB2Y3B1ICp2LCB1bnNpZ25lZCBsb25nIHZhbHVlKQogICAgIH0KIH0K IAorc3RhdGljIHZvaWQgdm14X3NldHVwX3RzY19zY2FsaW5nKHN0cnVjdCB2Y3B1ICp2KQorewor ICAgIGlmICggIWh2bV90c2Nfc2NhbGluZ19zdXBwb3J0ZWQgfHwgdi0+ZG9tYWluLT5hcmNoLnZ0 c2MgKQorICAgICAgICByZXR1cm47CisKKyAgICB2bXhfdm1jc19lbnRlcih2KTsKKyAgICBfX3Zt d3JpdGUoVFNDX01VTFRJUExJRVIsIGh2bV90c2Nfc2NhbGluZ19yYXRpbyh2LT5kb21haW4pKTsK KyAgICB2bXhfdm1jc19leGl0KHYpOworfQorCiBzdGF0aWMgdm9pZCB2bXhfc2V0X3RzY19vZmZz ZXQoc3RydWN0IHZjcHUgKnYsIHU2NCBvZmZzZXQsIHU2NCBhdF90c2MpCiB7CiAgICAgdm14X3Zt Y3NfZW50ZXIodik7CkBAIC0yMDE2LDYgKzIwMjYsMTAgQEAgc3RhdGljIHN0cnVjdCBodm1fZnVu Y3Rpb25fdGFibGUgX19pbml0ZGF0YSB2bXhfZnVuY3Rpb25fdGFibGUgPSB7CiAgICAgLmFsdHAy bV92Y3B1X3VwZGF0ZV92bWZ1bmNfdmUgPSB2bXhfdmNwdV91cGRhdGVfdm1mdW5jX3ZlLAogICAg IC5hbHRwMm1fdmNwdV9lbXVsYXRlX3ZlID0gdm14X3ZjcHVfZW11bGF0ZV92ZSwKICAgICAuYWx0 cDJtX3ZjcHVfZW11bGF0ZV92bWZ1bmMgPSB2bXhfdmNwdV9lbXVsYXRlX3ZtZnVuYywKKyAgICAu dHNjX3NjYWxpbmcgPSB7CisgICAgICAgIC5tYXhfcmF0aW8gPSBWTVhfVFNDX01VTFRJUExJRVJf TUFYLAorICAgICAgICAuc2V0dXAgICAgID0gdm14X3NldHVwX3RzY19zY2FsaW5nLAorICAgIH0s CiB9OwogCiAvKiBIYW5kbGUgVlQtZCBwb3N0ZWQtaW50ZXJydXB0IHdoZW4gVkNQVSBpcyBydW5u aW5nLiAqLwpAQCAtMjEyMCw2ICsyMTM0LDkgQEAgY29uc3Qgc3RydWN0IGh2bV9mdW5jdGlvbl90 YWJsZSAqIF9faW5pdCBzdGFydF92bXgodm9pZCkKICAgICAgICAgICYmIGNwdV9oYXNfdm14X3Nl Y29uZGFyeV9leGVjX2NvbnRyb2wgKQogICAgICAgICB2bXhfZnVuY3Rpb25fdGFibGUucHZoX3N1 cHBvcnRlZCA9IDE7CiAKKyAgICBpZiAoIGNwdV9oYXNfdm14X3RzY19zY2FsaW5nICkKKyAgICAg ICAgdm14X2Z1bmN0aW9uX3RhYmxlLnRzY19zY2FsaW5nLnJhdGlvX2ZyYWNfYml0cyA9IDQ4Owor CiAgICAgc2V0dXBfdm1jc19kdW1wKCk7CiAKICAgICByZXR1cm4gJnZteF9mdW5jdGlvbl90YWJs ZTsKZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL2FzbS14ODYvaHZtL2h2bS5oIGIveGVuL2luY2x1 ZGUvYXNtLXg4Ni9odm0vaHZtLmgKaW5kZXggYzVjOTMyOC4uMTIyMDlkNSAxMDA2NDQKLS0tIGEv eGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vaHZtLmgKKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9o dm0vaHZtLmgKQEAgLTIzMSw2ICsyMzEsOSBAQCBzdHJ1Y3QgaHZtX2Z1bmN0aW9uX3RhYmxlIHsK ICAgICAgICAgdWludDhfdCAgcmF0aW9fZnJhY19iaXRzOwogICAgICAgICAvKiBtYXhpbXVtLWFs bG93ZWQgVFNDIHNjYWxpbmcgcmF0aW8gKi8KICAgICAgICAgdWludDY0X3QgbWF4X3JhdGlvOwor CisgICAgICAgIC8qIEFyY2hpdGVjdHVyZSBmdW5jdGlvbiB0byBzZXR1cCBUU0Mgc2NhbGluZyBy YXRpbyAqLworICAgICAgICB2b2lkICgqc2V0dXApKHN0cnVjdCB2Y3B1ICp2KTsKICAgICB9IHRz Y19zY2FsaW5nOwogfTsKIApkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vdm14 L3ZtY3MuaCBiL3hlbi9pbmNsdWRlL2FzbS14ODYvaHZtL3ZteC92bWNzLmgKaW5kZXggYTVlN2Fl ZS4uMGQ3YzZkMiAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vdm14L3ZtY3Mu aAorKysgYi94ZW4vaW5jbHVkZS9hc20teDg2L2h2bS92bXgvdm1jcy5oCkBAIC0yMzcsNiArMjM3 LDcgQEAgZXh0ZXJuIHUzMiB2bXhfdm1lbnRyeV9jb250cm9sOwogI2RlZmluZSBTRUNPTkRBUllf RVhFQ19FTkFCTEVfVklSVF9FWENFUFRJT05TICAgMHgwMDA0MDAwMAogI2RlZmluZSBTRUNPTkRB UllfRVhFQ19YU0FWRVMgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAogI2RlZmluZSBTRUNP TkRBUllfRVhFQ19QQ09NTUlUICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBT RUNPTkRBUllfRVhFQ19UU0NfU0NBTElORyAgICAgICAgICAgICAgMHgwMjAwMDAwMAogZXh0ZXJu IHUzMiB2bXhfc2Vjb25kYXJ5X2V4ZWNfY29udHJvbDsKIAogI2RlZmluZSBWTVhfRVBUX0VYRUNf T05MWV9TVVBQT1JURUQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQpAQCAtMjU5 LDYgKzI2MCw4IEBAIGV4dGVybiB1NjQgdm14X2VwdF92cGlkX2NhcDsKICNkZWZpbmUgVk1YX01J U0NfQ1IzX1RBUkdFVCAgICAgICAgICAgICAgICAgICAgIDB4MDFmZjAwMDAKICNkZWZpbmUgVk1Y X01JU0NfVk1XUklURV9BTEwgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKIAorI2RlZmlu ZSBWTVhfVFNDX01VTFRJUExJRVJfTUFYICAgICAgICAgICAgICAgICAgMHhmZmZmZmZmZmZmZmZm ZmZmVUxMCisKICNkZWZpbmUgY3B1X2hhc193YmludmRfZXhpdGluZyBcCiAgICAgKHZteF9zZWNv bmRhcnlfZXhlY19jb250cm9sICYgU0VDT05EQVJZX0VYRUNfV0JJTlZEX0VYSVRJTkcpCiAjZGVm aW5lIGNwdV9oYXNfdm14X3ZpcnR1YWxpemVfYXBpY19hY2Nlc3NlcyBcCkBAIC0zMDYsNiArMzA5 LDkgQEAgZXh0ZXJuIHU2NCB2bXhfZXB0X3ZwaWRfY2FwOwogICAgICh2bXhfc2Vjb25kYXJ5X2V4 ZWNfY29udHJvbCAmIFNFQ09OREFSWV9FWEVDX1hTQVZFUykKICNkZWZpbmUgY3B1X2hhc192bXhf cGNvbW1pdCBcCiAgICAgKHZteF9zZWNvbmRhcnlfZXhlY19jb250cm9sICYgU0VDT05EQVJZX0VY RUNfUENPTU1JVCkKKyNkZWZpbmUgY3B1X2hhc192bXhfdHNjX3NjYWxpbmcgXAorICAgICh2bXhf c2Vjb25kYXJ5X2V4ZWNfY29udHJvbCAmIFNFQ09OREFSWV9FWEVDX1RTQ19TQ0FMSU5HKQorCiAj ZGVmaW5lIFZNQ1NfUklEX1RZUEVfTUFTSyAgICAgICAgICAgICAgMHg4MDAwMDAwMAogCiAvKiBH VUVTVF9JTlRFUlJVUFRJQklMSVRZX0lORk8gZmxhZ3MuICovCkBAIC0zODAsNiArMzg2LDcgQEAg ZW51bSB2bWNzX2ZpZWxkIHsKICAgICBWTVdSSVRFX0JJVE1BUCAgICAgICAgICAgICAgICAgID0g MHgwMDAwMjAyOCwKICAgICBWSVJUX0VYQ0VQVElPTl9JTkZPICAgICAgICAgICAgID0gMHgwMDAw MjAyYSwKICAgICBYU1NfRVhJVF9CSVRNQVAgICAgICAgICAgICAgICAgID0gMHgwMDAwMjAyYywK KyAgICBUU0NfTVVMVElQTElFUiAgICAgICAgICAgICAgICAgID0gMHgwMDAwMjAzMiwKICAgICBH VUVTVF9QSFlTSUNBTF9BRERSRVNTICAgICAgICAgID0gMHgwMDAwMjQwMCwKICAgICBWTUNTX0xJ TktfUE9JTlRFUiAgICAgICAgICAgICAgID0gMHgwMDAwMjgwMCwKICAgICBHVUVTVF9JQTMyX0RF QlVHQ1RMICAgICAgICAgICAgID0gMHgwMDAwMjgwMiwKLS0gCjIuNy4yCgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlz dApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK