From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andy Lutomirski Subject: [PATCH v5 1/9] x86/head: Pass a real pt_regs and trapnr to early_fixup_exception Date: Sat, 2 Apr 2016 07:01:32 -0700 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: In-Reply-To: References: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: X86 ML Cc: KVM list , Peter Zijlstra , Linus Torvalds , linux-kernel@vger.kernel.org, xen-devel , Borislav Petkov , Andy Lutomirski , Paolo Bonzini , Andrew Morton , Arjan van de Ven List-Id: xen-devel@lists.xenproject.org ZWFybHlfZml4dXBfZXhjZXB0aW9uIGlzIGxpbWl0ZWQgYnkgdGhlIGZhY3QgdGhhdCBpdCBkb2Vz bid0IGhhdmUgYQpyZWFsIHN0cnVjdCBwdF9yZWdzLiAgQ2hhbmdlIGJvdGggdGhlIDMyLWJpdCBh bmQgNjQtYml0IGFzbSBhbmQgdGhlCkMgY29kZSB0byBwYXNzIGFuZCBhY2NlcHQgYSByZWFsIHB0 X3JlZ3MuCgpTaWduZWQtb2ZmLWJ5OiBBbmR5IEx1dG9taXJza2kgPGx1dG9Aa2VybmVsLm9yZz4K LS0tCiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmggfCAgMiArLQogYXJjaC94ODYva2Vy bmVsL2hlYWRfMzIuUyAgICAgIHwgNzQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0t LS0tLS0tLS0tCiBhcmNoL3g4Ni9rZXJuZWwvaGVhZF82NC5TICAgICAgfCA2OCArKysrKysrKysr KysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLQogYXJjaC94ODYvbW0vZXh0YWJsZS5jICAgICAg ICAgIHwgIDYgKystLQogNCBmaWxlcyBjaGFuZ2VkLCA5MiBpbnNlcnRpb25zKCspLCA1OCBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmggYi9h cmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgKaW5kZXggYzBmMjdkN2VhN2ZmLi5hM2FmYjcy NTk3NTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAorKysgYi9h cmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgKQEAgLTExMSw3ICsxMTEsNyBAQCBzdHJ1Y3Qg ZXhjZXB0aW9uX3RhYmxlX2VudHJ5IHsKIAogZXh0ZXJuIGludCBmaXh1cF9leGNlcHRpb24oc3Ry dWN0IHB0X3JlZ3MgKnJlZ3MsIGludCB0cmFwbnIpOwogZXh0ZXJuIGJvb2wgZXhfaGFzX2ZhdWx0 X2hhbmRsZXIodW5zaWduZWQgbG9uZyBpcCk7Ci1leHRlcm4gaW50IGVhcmx5X2ZpeHVwX2V4Y2Vw dGlvbih1bnNpZ25lZCBsb25nICppcCk7CitleHRlcm4gaW50IGVhcmx5X2ZpeHVwX2V4Y2VwdGlv bihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHRyYXBucik7CiAKIC8qCiAgKiBUaGVzZSBhcmUg dGhlIG1haW4gc2luZ2xlLXZhbHVlIHRyYW5zZmVyIHJvdXRpbmVzLiAgVGhleSBhdXRvbWF0aWNh bGx5CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TIGIvYXJjaC94ODYva2Vy bmVsL2hlYWRfMzIuUwppbmRleCA2YmM5YWUyNGI2ZDIuLmJlZjNlNmM0OWI1NiAxMDA2NDQKLS0t IGEvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8z Mi5TCkBAIC01NjIsMjkgKzU2Miw2NCBAQCBlYXJseV9pZHRfaGFuZGxlcl9jb21tb246CiAJamUg aGx0X2xvb3AKIAlpbmNsICVzczplYXJseV9yZWN1cnNpb25fZmxhZwogCi0JcHVzaCAlZWF4CQkj IDE2KCVlc3ApCi0JcHVzaCAlZWN4CQkjIDEyKCVlc3ApCi0JcHVzaCAlZWR4CQkjICA4KCVlc3Ap Ci0JcHVzaCAlZHMJCSMgIDQoJWVzcCkKLQlwdXNoICVlcwkJIyAgMCglZXNwKQotCW1vdmwgJChf X0tFUk5FTF9EUyksJWVheAotCW1vdmwgJWVheCwlZHMKLQltb3ZsICVlYXgsJWVzCisJLyogVGhl IHZlY3RvciBudW1iZXIgaXMgaW4gcHRfcmVncy0+Z3MgKi8KIAotCWNtcGwgJChfX0tFUk5FTF9D UyksMzIoJWVzcCkKKwljbGQKKwlwdXNobAklZnMJCS8qIHB0X3JlZ3MtPmZzICovCisJbW92dwkk MCwgMiglZXNwKQkvKiBjbGVhciBoaWdoIGJpdHMgKHNvbWUgQ1BVcyBsZWF2ZSBnYXJiYWdlKSAq LworCXB1c2hsCSVlcwkJLyogcHRfcmVncy0+ZXMgKi8KKwltb3Z3CSQwLCAyKCVlc3ApCS8qIGNs ZWFyIGhpZ2ggYml0cyAoc29tZSBDUFVzIGxlYXZlIGdhcmJhZ2UpICovCisJcHVzaGwJJWRzCQkv KiBwdF9yZWdzLT5kcyAqLworCW1vdncJJDAsIDIoJWVzcCkJLyogY2xlYXIgaGlnaCBiaXRzIChz b21lIENQVXMgbGVhdmUgZ2FyYmFnZSkgKi8KKwlwdXNobAklZWF4CQkvKiBwdF9yZWdzLT5heCAq LworCXB1c2hsCSVlYnAJCS8qIHB0X3JlZ3MtPmJwICovCisJcHVzaGwJJWVkaQkJLyogcHRfcmVn cy0+ZGkgKi8KKwlwdXNobAklZXNpCQkvKiBwdF9yZWdzLT5zaSAqLworCXB1c2hsCSVlZHgJCS8q IHB0X3JlZ3MtPmR4ICovCisJcHVzaGwJJWVjeAkJLyogcHRfcmVncy0+Y3ggKi8KKwlwdXNobAkl ZWJ4CQkvKiBwdF9yZWdzLT5ieCAqLworCisJLyogRml4IHVwIERTIGFuZCBFUyAqLworCW1vdmwJ JChfX0tFUk5FTF9EUyksICVlY3gKKwltb3ZsCSVlY3gsICVkcworCW1vdmwJJWVjeCwgJWVzCisK KwkvKiBMb2FkIHRoZSB2ZWN0b3IgbnVtYmVyIGludG8gRURYICovCisJbW92bAlQVF9HUyglZXNw KSwgJWVkeAorCisJLyogTG9hZCBHUyBpbnRvIHB0X3JlZ3MtPmdzIGFuZCBjbGVhciBoaWdoIGJp dHMgKi8KKwltb3Z3CSVncywgUFRfR1MoJWVzcCkKKwltb3Z3CSQwLCBQVF9HUysyKCVlc3ApCisK KwljbXBsICQoX19LRVJORUxfQ1MpLFBUX0NTKCVlc3ApCiAJam5lIDEwZgogCi0JbGVhbCAyOCgl ZXNwKSwlZWF4CSMgUG9pbnRlciB0byAlZWlwCi0JY2FsbCBlYXJseV9maXh1cF9leGNlcHRpb24K LQlhbmRsICVlYXgsJWVheAotCWpueiBleF9lbnRyeQkJLyogZm91bmQgYW4gZXhjZXB0aW9uIGVu dHJ5ICovCisJbW92bAklZXNwLCAlZWF4CS8qIGFyZ3MgYXJlIHB0X3JlZ3MgKEVBWCksIHRyYXBu ciAoRURYKSAqLworCWNhbGwJZWFybHlfZml4dXBfZXhjZXB0aW9uCisJYW5kbAklZWF4LCVlYXgK KwlqegkxMGYJCS8qIEV4Y2VwdGlvbiB3YXNuJ3QgZml4ZWQgdXAgKi8KKworCXBvcGwJJWVieAkJ LyogcHRfcmVncy0+YnggKi8KKwlwb3BsCSVlY3gJCS8qIHB0X3JlZ3MtPmN4ICovCisJcG9wbAkl ZWR4CQkvKiBwdF9yZWdzLT5keCAqLworCXBvcGwJJWVzaQkJLyogcHRfcmVncy0+c2kgKi8KKwlw b3BsCSVlZGkJCS8qIHB0X3JlZ3MtPmRpICovCisJcG9wbAklZWJwCQkvKiBwdF9yZWdzLT5icCAq LworCXBvcGwJJWVheAkJLyogcHRfcmVncy0+YXggKi8KKwlwb3BsCSVkcwkJLyogcHRfcmVncy0+ ZHMgKi8KKwlwb3BsCSVlcwkJLyogcHRfcmVncy0+ZXMgKi8KKwlwb3BsCSVmcwkJLyogcHRfcmVn cy0+ZnMgKi8KKwlwb3BsCSVncwkJLyogcHRfcmVncy0+Z3MgKi8KKwlkZWNsCSVzczplYXJseV9y ZWN1cnNpb25fZmxhZworCWFkZGwJJDQsICVlc3AJLyogcG9wIHB0X3JlZ3MtPm9yaWdfYXggKi8K KwlpcmV0CiAKIDEwOgogI2lmZGVmIENPTkZJR19QUklOVEsKIAl4b3JsICVlYXgsJWVheAotCW1v dncgJWF4LDIoJWVzcCkJLyogY2xlYW4gdXAgdGhlIHNlZ21lbnQgdmFsdWVzIG9uIHNvbWUgY3B1 cyAqLwotCW1vdncgJWF4LDYoJWVzcCkKLQltb3Z3ICVheCwzNCglZXNwKQorCW1vdncgJWF4LFBU X0ZTKzIoJWVzcCkJLyogY2xlYW4gdXAgdGhlIHNlZ21lbnQgdmFsdWVzIG9uIHNvbWUgY3B1cyAq LworCW1vdncgJWF4LFBUX0RTKzIoJWVzcCkKKwltb3Z3ICVheCxQVF9FUysyKCVlc3ApCiAJbGVh bCAgNDAoJWVzcCksJWVheAogCXB1c2hsICVlYXgJCS8qICVlc3AgYmVmb3JlIHRoZSBleGNlcHRp b24gKi8KIAlwdXNobCAlZWJ4CkBAIC02MDIsMTMgKzYzNyw2IEBAIGhsdF9sb29wOgogCWhsdAog CWptcCBobHRfbG9vcAogCi1leF9lbnRyeToKLQlwb3AgJWVzCi0JcG9wICVkcwotCXBvcCAlZWR4 Ci0JcG9wICVlY3gKLQlwb3AgJWVheAotCWRlY2wgJXNzOmVhcmx5X3JlY3Vyc2lvbl9mbGFnCiAu TGlzX25taToKIAlhZGRsICQ4LCVlc3AJCS8qIGRyb3AgdmVjdG9yIG51bWJlciBhbmQgZXJyb3Ig Y29kZSAqLwogCWlyZXQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9oZWFkXzY0LlMgYi9h cmNoL3g4Ni9rZXJuZWwvaGVhZF82NC5TCmluZGV4IGZmZGMwZTg2MDM5MC4uZjhkNmRhZDQxZThk IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZF82NC5TCisrKyBiL2FyY2gveDg2L2tl cm5lbC9oZWFkXzY0LlMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29y LWZsYWdzLmg+CiAjaW5jbHVkZSA8YXNtL3BlcmNwdS5oPgogI2luY2x1ZGUgPGFzbS9ub3BzLmg+ CisjaW5jbHVkZSAiLi4vZW50cnkvY2FsbGluZy5oIgogCiAjaWZkZWYgQ09ORklHX1BBUkFWSVJU CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CkBAIC0zNjAsMzkgKzM2MSw1MiBAQCBlYXJs eV9pZHRfaGFuZGxlcl9jb21tb246CiAJanogIDFmCiAJaW5jbCBlYXJseV9yZWN1cnNpb25fZmxh ZyglcmlwKQogCi0JcHVzaHEgJXJheAkJIyA2NCglcnNwKQotCXB1c2hxICVyY3gJCSMgNTYoJXJz cCkKLQlwdXNocSAlcmR4CQkjIDQ4KCVyc3ApCi0JcHVzaHEgJXJzaQkJIyA0MCglcnNwKQotCXB1 c2hxICVyZGkJCSMgMzIoJXJzcCkKLQlwdXNocSAlcjgJCSMgMjQoJXJzcCkKLQlwdXNocSAlcjkJ CSMgMTYoJXJzcCkKLQlwdXNocSAlcjEwCQkjICA4KCVyc3ApCi0JcHVzaHEgJXIxMQkJIyAgMCgl cnNwKQotCi0JY21wbCAkX19LRVJORUxfQ1MsOTYoJXJzcCkKKwkvKiBUaGUgdmVjdG9yIG51bWJl ciBpcyBjdXJyZW50bHkgaW4gdGhlIHB0X3JlZ3MtPmRpIHNsb3QuICovCisJcHVzaHEgJXJzaQkJ CQkvKiBwdF9yZWdzLT5zaSAqLworCW1vdnEgOCglcnNwKSwgJXJzaQkJCS8qIFJTSSA9IHZlY3Rv ciBudW1iZXIgKi8KKwltb3ZxICVyZGksIDgoJXJzcCkJCQkvKiBwdF9yZWdzLT5kaSA9IFJESSAq LworCXB1c2hxICVyZHgJCQkJLyogcHRfcmVncy0+ZHggKi8KKwlwdXNocSAlcmN4CQkJCS8qIHB0 X3JlZ3MtPmN4ICovCisJcHVzaHEgJXJheAkJCQkvKiBwdF9yZWdzLT5heCAqLworCXB1c2hxICVy OAkJCQkvKiBwdF9yZWdzLT5yOCAqLworCXB1c2hxICVyOQkJCQkvKiBwdF9yZWdzLT5yOSAqLwor CXB1c2hxICVyMTAJCQkJLyogcHRfcmVncy0+cjEwICovCisJcHVzaHEgJXIxMQkJCQkvKiBwdF9y ZWdzLT5yMTEgKi8KKwlwdXNocSAlcmJ4CQkJCS8qIHB0X3JlZ3MtPmJ4ICovCisJcHVzaHEgJXJi cAkJCQkvKiBwdF9yZWdzLT5icCAqLworCXB1c2hxICVyMTIJCQkJLyogcHRfcmVncy0+cjEyICov CisJcHVzaHEgJXIxMwkJCQkvKiBwdF9yZWdzLT5yMTMgKi8KKwlwdXNocSAlcjE0CQkJCS8qIHB0 X3JlZ3MtPnIxNCAqLworCXB1c2hxICVyMTUJCQkJLyogcHRfcmVncy0+cjE1ICovCisKKwljbXBs ICRfX0tFUk5FTF9DUyxDUyglcnNwKQogCWpuZSAxMWYKIAotCWNtcGwgJDE0LDcyKCVyc3ApCSMg UGFnZSBmYXVsdD8KKwljbXBxICQxNCwlcnNpCQkvKiBQYWdlIGZhdWx0PyAqLwogCWpueiAxMGYK LQlHRVRfQ1IyX0lOVE8oJXJkaSkJIyBjYW4gY2xvYmJlciBhbnkgdm9sYXRpbGUgcmVnaXN0ZXIg aWYgcHYKKwlHRVRfQ1IyX0lOVE8oJXJkaSkJLyogQ2FuIGNsb2JiZXIgYW55IHZvbGF0aWxlIHJl Z2lzdGVyIGlmIHB2ICovCiAJY2FsbCBlYXJseV9tYWtlX3BndGFibGUKIAlhbmRsICVlYXgsJWVh eAotCWp6IDIwZgkJCSMgQWxsIGdvb2QKKwlqeiAyMGYJCQkvKiBBbGwgZ29vZCAqLwogCiAxMDoK LQlsZWFxIDg4KCVyc3ApLCVyZGkJIyBQb2ludGVyIHRvICVyaXAKKwltb3ZxICVyc3AsJXJkaQkJ LyogUkRJID0gcHRfcmVnczsgUlNJIGlzIGFscmVhZHkgdHJhcG5yICovCiAJY2FsbCBlYXJseV9m aXh1cF9leGNlcHRpb24KIAlhbmRsICVlYXgsJWVheAogCWpueiAyMGYJCQkjIEZvdW5kIGFuIGV4 Y2VwdGlvbiBlbnRyeQogCiAxMToKICNpZmRlZiBDT05GSUdfRUFSTFlfUFJJTlRLCi0JR0VUX0NS Ml9JTlRPKCVyOSkJIyBjYW4gY2xvYmJlciBhbnkgdm9sYXRpbGUgcmVnaXN0ZXIgaWYgcHYKLQlt b3ZsIDgwKCVyc3ApLCVyOGQJIyBlcnJvciBjb2RlCi0JbW92bCA3MiglcnNwKSwlZXNpCSMgdmVj dG9yIG51bWJlcgotCW1vdmwgOTYoJXJzcCksJWVkeAkjICVjcwotCW1vdnEgODgoJXJzcCksJXJj eAkjICVyaXAKKwkvKgorCSAqIE9uIHBhcmF2aXJ0IGtlcm5lbHMsIEdFVF9DUjJfSU5UTyBjbG9i YmVycyBjYWxsZWUtY2xvYmJlcmVkIHJlZ3MuCisJICogV2Ugb25seSBjYXJlIGFib3V0IFJTSSwg c28gd2UgbmVlZCB0byBzYXZlIGl0LgorCSAqLworCW1vdnEgJXJzaSwlcmJ4CQkvKiBTYXZlIHZl Y3RvciBudW1iZXIgKi8KKwlHRVRfQ1IyX0lOVE8oJXI5KQorCW1vdnEgT1JJR19SQVgoJXJzcCks JXI4CS8qIGVycm9yIGNvZGUgKi8KKwltb3ZxICVyYngsJXJzaQkJLyogdmVjdG9yIG51bWJlciAq LworCW1vdnEgQ1MoJXJzcCksJXJkeAorCW1vdnEgUklQKCVyc3ApLCVyY3gKIAl4b3JsICVlYXgs JWVheAogCWxlYXEgZWFybHlfaWR0X21zZyglcmlwKSwlcmRpCiAJY2FsbCBlYXJseV9wcmludGsK QEAgLTQwMSwyNCArNDE1LDE2IEBAIGVhcmx5X2lkdF9oYW5kbGVyX2NvbW1vbjoKIAljYWxsIGR1 bXBfc3RhY2sKICNpZmRlZiBDT05GSUdfS0FMTFNZTVMJCiAJbGVhcSBlYXJseV9pZHRfcmlwbXNn KCVyaXApLCVyZGkKLQltb3ZxIDQwKCVyc3ApLCVyc2kJIyAlcmlwIGFnYWluCisJbW92cSBSSVAo JXJzcCksJXJzaQkjICVyaXAgYWdhaW4KIAljYWxsIF9fcHJpbnRfc3ltYm9sCiAjZW5kaWYKICNl bmRpZiAvKiBFQVJMWV9QUklOVEsgKi8KIDE6CWhsdAogCWptcCAxYgogCi0yMDoJIyBFeGNlcHRp b24gdGFibGUgZW50cnkgZm91bmQgb3IgcGFnZSB0YWJsZSBnZW5lcmF0ZWQKLQlwb3BxICVyMTEK LQlwb3BxICVyMTAKLQlwb3BxICVyOQotCXBvcHEgJXI4Ci0JcG9wcSAlcmRpCi0JcG9wcSAlcnNp Ci0JcG9wcSAlcmR4Ci0JcG9wcSAlcmN4Ci0JcG9wcSAlcmF4CisyMDoJLyogRXhjZXB0aW9uIHRh YmxlIGVudHJ5IGZvdW5kIG9yIHBhZ2UgdGFibGUgZ2VuZXJhdGVkICovCiAJZGVjbCBlYXJseV9y ZWN1cnNpb25fZmxhZyglcmlwKQorCWptcCByZXN0b3JlX3JlZ3NfYW5kX2lyZXQKIC5MaXNfbm1p OgogCWFkZHEgJDE2LCVyc3AJCSMgZHJvcCB2ZWN0b3IgbnVtYmVyIGFuZCBlcnJvciBjb2RlCiAJ SU5URVJSVVBUX1JFVFVSTgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vZXh0YWJsZS5jIGIvYXJj aC94ODYvbW0vZXh0YWJsZS5jCmluZGV4IDlkZDdlNGI3ZmNkZS4uMTc2ZTQ4ZGUyNWQ0IDEwMDY0 NAotLS0gYS9hcmNoL3g4Ni9tbS9leHRhYmxlLmMKKysrIGIvYXJjaC94ODYvbW0vZXh0YWJsZS5j CkBAIC05MCwxMyArOTAsMTMgQEAgaW50IGZpeHVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAq cmVncywgaW50IHRyYXBucikKIH0KIAogLyogUmVzdHJpY3RlZCB2ZXJzaW9uIHVzZWQgZHVyaW5n IHZlcnkgZWFybHkgYm9vdCAqLwotaW50IF9faW5pdCBlYXJseV9maXh1cF9leGNlcHRpb24odW5z aWduZWQgbG9uZyAqaXApCitpbnQgX19pbml0IGVhcmx5X2ZpeHVwX2V4Y2VwdGlvbihzdHJ1Y3Qg cHRfcmVncyAqcmVncywgaW50IHRyYXBucikKIHsKIAljb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3Rh YmxlX2VudHJ5ICplOwogCXVuc2lnbmVkIGxvbmcgbmV3X2lwOwogCWV4X2hhbmRsZXJfdCBoYW5k bGVyOwogCi0JZSA9IHNlYXJjaF9leGNlcHRpb25fdGFibGVzKCppcCk7CisJZSA9IHNlYXJjaF9l eGNlcHRpb25fdGFibGVzKHJlZ3MtPmlwKTsKIAlpZiAoIWUpCiAJCXJldHVybiAwOwogCkBAIC0x MDcsNyArMTA3LDcgQEAgaW50IF9faW5pdCBlYXJseV9maXh1cF9leGNlcHRpb24odW5zaWduZWQg bG9uZyAqaXApCiAJaWYgKGhhbmRsZXIgIT0gZXhfaGFuZGxlcl9kZWZhdWx0KQogCQlyZXR1cm4g MDsKIAotCSppcCA9IG5ld19pcDsKKwlyZWdzLT5pcCA9IG5ld19pcDsKIAlyZXR1cm4gMTsKIH0K IAotLSAKMi41LjUKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHA6 Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=