From mboxrd@z Thu Jan 1 00:00:00 1970 From: Quan Xu Subject: [PATCH v2 09/11] IOMMU: propagate IOMMU Device-TLB flush error up to IOMMU suspending Date: Mon, 18 Apr 2016 22:00:09 +0800 Message-ID: <1460988011-17758-10-git-send-email-quan.xu@intel.com> References: <1460988011-17758-1-git-send-email-quan.xu@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1460988011-17758-1-git-send-email-quan.xu@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: Kevin Tian , Keir Fraser , Quan Xu , Liu Jinsong , dario.faggioli@citrix.com, Julien Grall , Stefano Stabellini , Jan Beulich , Andrew Cooper , Feng Wu , Suravee Suthikulpanit List-Id: xen-devel@lists.xenproject.org V2hpbGUgSU9NTVUgRGV2aWNlLVRMQiBmbHVzaCB0aW1lZCBvdXQsIHhlbiBjYWxscyBwYW5pYygp IGF0IHByZXNlbnQuCkhvd2V2ZXIgdGhlIGV4aXN0aW5nIHBhbmljKCkgaXMgZ29pbmcgdG8gYmUg ZWxpbWluYXRlZCwgc28gd2UgbXVzdApwcm9wYWdhdGUgdGhlIElPTU1VIERldmljZS1UTEIgZmx1 c2ggZXJyb3IgdXAgdG8gSU9NTVUgc3VzcGVuZGluZy4KClNpZ25lZC1vZmYtYnk6IFF1YW4gWHUg PHF1YW4ueHVAaW50ZWwuY29tPgoKQ0M6IEphbiBCZXVsaWNoIDxqYmV1bGljaEBzdXNlLmNvbT4K Q0M6IExpdSBKaW5zb25nIDxqaW5zb25nLmxpdUBhbGliYWJhLWluYy5jb20+CkNDOiBLZWlyIEZy YXNlciA8a2VpckB4ZW4ub3JnPgpDQzogQW5kcmV3IENvb3BlciA8YW5kcmV3LmNvb3BlcjNAY2l0 cml4LmNvbT4KQ0M6IFN1cmF2ZWUgU3V0aGlrdWxwYW5pdCA8c3VyYXZlZS5zdXRoaWt1bHBhbml0 QGFtZC5jb20+CkNDOiBTdGVmYW5vIFN0YWJlbGxpbmkgPHN0ZWZhbm8uc3RhYmVsbGluaUBjaXRy aXguY29tPgpDQzogSnVsaWVuIEdyYWxsIDxqdWxpZW4uZ3JhbGxAYXJtLmNvbT4KQ0M6IEtldmlu IFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPgpDQzogRmVuZyBXdSA8ZmVuZy53dUBpbnRlbC5j b20+Ci0tLQogeGVuL2FyY2gveDg2L2FjcGkvcG93ZXIuYyAgICAgICAgICAgICAgICAgICAgIHwg MTQgKysrKysrKysrKysrKy0KIHhlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FtZC9pb21tdV9pbml0 LmMgICAgICB8ICA5ICsrKysrKysrLQogeGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYW1kL3BjaV9h bWRfaW9tbXUuYyAgIHwgIDIgKy0KIHhlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9zbW11LmMg ICAgICAgICAgICB8IDEwICsrKysrKy0tLS0KIHhlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2lvbW11 LmMgICAgICAgICAgICAgICB8ICA3ICsrKysrLS0KIHhlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0 ZC9pb21tdS5jICAgICAgICAgICB8IDIyICsrKysrKysrKysrKysrKysrLS0tLS0KIHhlbi9pbmNs dWRlL2FzbS14ODYvaHZtL3N2bS9hbWQtaW9tbXUtcHJvdG8uaCB8ICAyICstCiB4ZW4vaW5jbHVk ZS94ZW4vaW9tbXUuaCAgICAgICAgICAgICAgICAgICAgICAgfCAgNCArKy0tCiA4IGZpbGVzIGNo YW5nZWQsIDUzIGluc2VydGlvbnMoKyksIDE3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3hl bi9hcmNoL3g4Ni9hY3BpL3Bvd2VyLmMgYi94ZW4vYXJjaC94ODYvYWNwaS9wb3dlci5jCmluZGV4 IDI4ODVlMzEuLjliODdmMDAgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9hY3BpL3Bvd2VyLmMK KysrIGIveGVuL2FyY2gveDg2L2FjcGkvcG93ZXIuYwpAQCAtNDUsMTkgKzQ1LDMxIEBAIHZvaWQg ZG9fc3VzcGVuZF9sb3dsZXZlbCh2b2lkKTsKIAogc3RhdGljIGludCBkZXZpY2VfcG93ZXJfZG93 bih2b2lkKQogeworICAgIGludCBlcnI7CisKICAgICBjb25zb2xlX3N1c3BlbmQoKTsKIAogICAg IHRpbWVfc3VzcGVuZCgpOwogCiAgICAgaTgyNTlBX3N1c3BlbmQoKTsKIAotICAgIGlvYXBpY19z dXNwZW5kKCk7CisgICAgZXJyID0gaW9tbXVfc3VzcGVuZCgpOworICAgIGlmICggZXJyICkKKyAg ICAgICAgZ290byBpb21tdV9zdXNwZW5kX2Vycm9yOwogCiAgICAgaW9tbXVfc3VzcGVuZCgpOwog CiAgICAgbGFwaWNfc3VzcGVuZCgpOwogCiAgICAgcmV0dXJuIDA7CisKKyBpb21tdV9zdXNwZW5k X2Vycm9yOgorICAgIGlvYXBpY19yZXN1bWUoKTsKKyAgICBpODI1OUFfcmVzdW1lKCk7CisgICAg dGltZV9yZXN1bWUoKTsKKyAgICBjb25zb2xlX3Jlc3VtZSgpOworCisgICAgcmV0dXJuIGVycjsK IH0KIAogc3RhdGljIHZvaWQgZGV2aWNlX3Bvd2VyX3VwKHZvaWQpCmRpZmYgLS1naXQgYS94ZW4v ZHJpdmVycy9wYXNzdGhyb3VnaC9hbWQvaW9tbXVfaW5pdC5jIGIveGVuL2RyaXZlcnMvcGFzc3Ro cm91Z2gvYW1kL2lvbW11X2luaXQuYwppbmRleCA0NTM2MTA2Li4wMjU4OGFhIDEwMDY0NAotLS0g YS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hbWQvaW9tbXVfaW5pdC5jCisrKyBiL3hlbi9kcml2 ZXJzL3Bhc3N0aHJvdWdoL2FtZC9pb21tdV9pbml0LmMKQEAgLTEzMzksMTIgKzEzMzksMTkgQEAg c3RhdGljIHZvaWQgaW52YWxpZGF0ZV9hbGxfZGV2aWNlcyh2b2lkKQogICAgIGl0ZXJhdGVfaXZy c19tYXBwaW5ncyhfaW52YWxpZGF0ZV9hbGxfZGV2aWNlcyk7CiB9CiAKLXZvaWQgYW1kX2lvbW11 X3N1c3BlbmQodm9pZCkKK2ludCBhbWRfaW9tbXVfc3VzcGVuZCh2b2lkKQogewogICAgIHN0cnVj dCBhbWRfaW9tbXUgKmlvbW11OwogCiAgICAgZm9yX2VhY2hfYW1kX2lvbW11ICggaW9tbXUgKQog ICAgICAgICBkaXNhYmxlX2lvbW11KGlvbW11KTsKKworICAgIHJldHVybiAwOworfQorCit2b2lk IGFtZF9pb21tdV9jcmFzaF9zaHV0ZG93bih2b2lkKQoreworICAgIGFtZF9pb21tdV9zdXNwZW5k KCk7CiB9CiAKIHZvaWQgYW1kX2lvbW11X3Jlc3VtZSh2b2lkKQpkaWZmIC0tZ2l0IGEveGVuL2Ry aXZlcnMvcGFzc3Rocm91Z2gvYW1kL3BjaV9hbWRfaW9tbXUuYyBiL3hlbi9kcml2ZXJzL3Bhc3N0 aHJvdWdoL2FtZC9wY2lfYW1kX2lvbW11LmMKaW5kZXggYzhlZThkYy4uZmI4ZTgxNiAxMDA2NDQK LS0tIGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYW1kL3BjaV9hbWRfaW9tbXUuYworKysgYi94 ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hbWQvcGNpX2FtZF9pb21tdS5jCkBAIC02MjgsNiArNjI4 LDYgQEAgY29uc3Qgc3RydWN0IGlvbW11X29wcyBhbWRfaW9tbXVfb3BzID0gewogICAgIC5zdXNw ZW5kID0gYW1kX2lvbW11X3N1c3BlbmQsCiAgICAgLnJlc3VtZSA9IGFtZF9pb21tdV9yZXN1bWUs CiAgICAgLnNoYXJlX3AybSA9IGFtZF9pb21tdV9zaGFyZV9wMm0sCi0gICAgLmNyYXNoX3NodXRk b3duID0gYW1kX2lvbW11X3N1c3BlbmQsCisgICAgLmNyYXNoX3NodXRkb3duID0gYW1kX2lvbW11 X2NyYXNoX3NodXRkb3duLAogICAgIC5kdW1wX3AybV90YWJsZSA9IGFtZF9kdW1wX3AybV90YWJs ZSwKIH07CmRpZmYgLS1naXQgYS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vc21tdS5jIGIv eGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL3NtbXUuYwppbmRleCA2MmRhMDg3Li4zNmMyYzgz IDEwMDY0NAotLS0gYS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vc21tdS5jCisrKyBiL3hl bi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9zbW11LmMKQEAgLTI1NDAsNyArMjU0MCw3IEBAIHN0 YXRpYyBpbnQgZm9yY2Vfc3RhZ2UgPSAyOwogICovCiBzdGF0aWMgdTMyIHBsYXRmb3JtX2ZlYXR1 cmVzID0gQVJNX1NNTVVfRkVBVF9DT0hFUkVOVF9XQUxLOwogCi1zdGF0aWMgdm9pZCBhcm1fc21t dV9pb3RsYl9mbHVzaF9hbGwoc3RydWN0IGRvbWFpbiAqZCkKK3N0YXRpYyBpbnQgYXJtX3NtbXVf aW90bGJfZmx1c2hfYWxsKHN0cnVjdCBkb21haW4gKmQpCiB7CiAJc3RydWN0IGFybV9zbW11X3hl bl9kb21haW4gKnNtbXVfZG9tYWluID0gZG9tYWluX2h2bV9pb21tdShkKS0+YXJjaC5wcml2Owog CXN0cnVjdCBpb21tdV9kb21haW4gKmNmZzsKQEAgLTI1NTcsMTMgKzI1NTcsMTUgQEAgc3RhdGlj IHZvaWQgYXJtX3NtbXVfaW90bGJfZmx1c2hfYWxsKHN0cnVjdCBkb21haW4gKmQpCiAJCWFybV9z bW11X3RsYl9pbnZfY29udGV4dChjZmctPnByaXYpOwogCX0KIAlzcGluX3VubG9jaygmc21tdV9k b21haW4tPmxvY2spOworCisgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGFybV9zbW11 X2lvdGxiX2ZsdXNoKHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGxvbmcgZ2ZuLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBhZ2VfY291bnQpCitzdGF0 aWMgaW50IGFybV9zbW11X2lvdGxiX2ZsdXNoKHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGxv bmcgZ2ZuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcGFn ZV9jb3VudCkKIHsKICAgICAvKiBBUk0gU01NVSB2MSBkb2Vzbid0IGhhdmUgZmx1c2ggYnkgVk1B IGFuZCBWTUlEICovCi0gICAgYXJtX3NtbXVfaW90bGJfZmx1c2hfYWxsKGQpOworICAgIHJldHVy biBhcm1fc21tdV9pb3RsYl9mbHVzaF9hbGwoZCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaW9tbXVf ZG9tYWluICphcm1fc21tdV9nZXRfZG9tYWluKHN0cnVjdCBkb21haW4gKmQsCmRpZmYgLS1naXQg YS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9pb21tdS5jIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91 Z2gvaW9tbXUuYwppbmRleCBkNDRmYzM5Li45OGI5MzRiIDEwMDY0NAotLS0gYS94ZW4vZHJpdmVy cy9wYXNzdGhyb3VnaC9pb21tdS5jCisrKyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2lvbW11 LmMKQEAgLTM5MiwxMSArMzkyLDE0IEBAIGludCBpb21tdV9kb19kb21jdGwoCiAgICAgcmV0dXJu IHJldDsKIH0KIAotdm9pZCBpb21tdV9zdXNwZW5kKCkKK2ludCBpb21tdV9zdXNwZW5kKCkKIHsK ICAgICBjb25zdCBzdHJ1Y3QgaW9tbXVfb3BzICpvcHMgPSBpb21tdV9nZXRfb3BzKCk7CisKICAg ICBpZiAoIGlvbW11X2VuYWJsZWQgKQotICAgICAgICBvcHMtPnN1c3BlbmQoKTsKKyAgICAgICAg cmV0dXJuIG9wcy0+c3VzcGVuZCgpOworCisgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgaW9tbXVf c2hhcmVfcDJtX3RhYmxlKHN0cnVjdCBkb21haW4qIGQpCmRpZmYgLS1naXQgYS94ZW4vZHJpdmVy cy9wYXNzdGhyb3VnaC92dGQvaW9tbXUuYyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC9p b21tdS5jCmluZGV4IDkzMDY2MWEuLmE4MjEzMDYgMTAwNjQ0Ci0tLSBhL3hlbi9kcml2ZXJzL3Bh c3N0aHJvdWdoL3Z0ZC9pb21tdS5jCisrKyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC9p b21tdS5jCkBAIC01NDIsMTEgKzU0MiwxMiBAQCBzdGF0aWMgaW50IGlvbW11X2ZsdXNoX2lvdGxi X3BzaSgKICAgICByZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgdm9pZCBpb21tdV9mbHVzaF9h bGwodm9pZCkKK3N0YXRpYyBpbnQgaW9tbXVfZmx1c2hfYWxsKHZvaWQpCiB7CiAgICAgc3RydWN0 IGFjcGlfZHJoZF91bml0ICpkcmhkOwogICAgIHN0cnVjdCBpb21tdSAqaW9tbXU7CiAgICAgaW50 IGZsdXNoX2Rldl9pb3RsYjsKKyAgICBpbnQgcmMgPSAwOwogCiAgICAgZmx1c2hfYWxsX2NhY2hl KCk7CiAgICAgZm9yX2VhY2hfZHJoZF91bml0ICggZHJoZCApCkBAIC01NTQsOCArNTU1LDEzIEBA IHN0YXRpYyB2b2lkIGlvbW11X2ZsdXNoX2FsbCh2b2lkKQogICAgICAgICBpb21tdSA9IGRyaGQt PmlvbW11OwogICAgICAgICBpb21tdV9mbHVzaF9jb250ZXh0X2dsb2JhbChpb21tdSwgMCk7CiAg ICAgICAgIGZsdXNoX2Rldl9pb3RsYiA9IGZpbmRfYXRzX2Rldl9kcmhkKGlvbW11KSA/IDEgOiAw OwotICAgICAgICBpb21tdV9mbHVzaF9pb3RsYl9nbG9iYWwoaW9tbXUsIDAsIGZsdXNoX2Rldl9p b3RsYik7CisgICAgICAgIHJjID0gaW9tbXVfZmx1c2hfaW90bGJfZ2xvYmFsKGlvbW11LCAwLCBm bHVzaF9kZXZfaW90bGIpOworCisgICAgICAgIGlmICggcmMgKQorICAgICAgICAgICAgYnJlYWs7 CiAgICAgfQorCisgICAgcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IGlvbW11X2ZsdXNoX2lv dGxiKHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGxvbmcgZ2ZuLApAQCAtMjQyMSwxNiArMjQy NywyMCBAQCBzdGF0aWMgaW50IGludGVsX2lvbW11X2dyb3VwX2lkKHUxNiBzZWcsIHU4IGJ1cywg dTggZGV2Zm4pCiB9CiAKIHN0YXRpYyB1MzIgaW9tbXVfc3RhdGVbTUFYX0lPTU1VU11bTUFYX0lP TU1VX1JFR1NdOwotc3RhdGljIHZvaWQgdnRkX3N1c3BlbmQodm9pZCkKK3N0YXRpYyBpbnQgdnRk X3N1c3BlbmQodm9pZCkKIHsKICAgICBzdHJ1Y3QgYWNwaV9kcmhkX3VuaXQgKmRyaGQ7CiAgICAg c3RydWN0IGlvbW11ICppb21tdTsKICAgICB1MzIgICAgaTsKKyAgICBpbnQgcmM7CiAKICAgICBp ZiAoICFpb21tdV9lbmFibGVkICkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gMDsK IAotICAgIGlvbW11X2ZsdXNoX2FsbCgpOworICAgIHJjID0gaW9tbXVfZmx1c2hfYWxsKCk7CisK KyAgICBpZiAoIHJjICkKKyAgICAgICAgcmV0dXJuIHJjOwogCiAgICAgZm9yX2VhY2hfZHJoZF91 bml0ICggZHJoZCApCiAgICAgewpAQCAtMjQ1OSw2ICsyNDY5LDggQEAgc3RhdGljIHZvaWQgdnRk X3N1c3BlbmQodm9pZCkKICAgICAgICAgaWYgKCAhaW9tbXVfaW50cmVtYXAgJiYgaW9tbXVfcWlu dmFsICkKICAgICAgICAgICAgIGRpc2FibGVfcWludmFsKGlvbW11KTsKICAgICB9CisKKyAgICBy ZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgdnRkX2NyYXNoX3NodXRkb3duKHZvaWQpCmRpZmYg LS1naXQgYS94ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9zdm0vYW1kLWlvbW11LXByb3RvLmggYi94 ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9zdm0vYW1kLWlvbW11LXByb3RvLmgKaW5kZXggOWM1MTE3 Mi4uZjU0MGZjOCAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vc3ZtL2FtZC1p b21tdS1wcm90by5oCisrKyBiL3hlbi9pbmNsdWRlL2FzbS14ODYvaHZtL3N2bS9hbWQtaW9tbXUt cHJvdG8uaApAQCAtMTE5LDcgKzExOSw3IEBAIGV4dGVybiB1bnNpZ25lZCBsb25nICpzaGFyZWRf aW50cmVtYXBfaW51c2U7CiAKIC8qIHBvd2VyIG1hbmFnZW1lbnQgc3VwcG9ydCAqLwogdm9pZCBh bWRfaW9tbXVfcmVzdW1lKHZvaWQpOwotdm9pZCBhbWRfaW9tbXVfc3VzcGVuZCh2b2lkKTsKK2lu dCBhbWRfaW9tbXVfc3VzcGVuZCh2b2lkKTsKIHZvaWQgYW1kX2lvbW11X2NyYXNoX3NodXRkb3du KHZvaWQpOwogCiAvKiBndWVzdCBpb21tdSBzdXBwb3J0ICovCmRpZmYgLS1naXQgYS94ZW4vaW5j bHVkZS94ZW4vaW9tbXUuaCBiL3hlbi9pbmNsdWRlL3hlbi9pb21tdS5oCmluZGV4IGNhMWM0MDku Ljg3MTBkZmUgMTAwNjQ0Ci0tLSBhL3hlbi9pbmNsdWRlL3hlbi9pb21tdS5oCisrKyBiL3hlbi9p bmNsdWRlL3hlbi9pb21tdS5oCkBAIC0xNTcsNyArMTU3LDcgQEAgc3RydWN0IGlvbW11X29wcyB7 CiAgICAgdW5zaWduZWQgaW50ICgqcmVhZF9hcGljX2Zyb21faXJlKSh1bnNpZ25lZCBpbnQgYXBp YywgdW5zaWduZWQgaW50IHJlZyk7CiAgICAgaW50ICgqc2V0dXBfaHBldF9tc2kpKHN0cnVjdCBt c2lfZGVzYyAqKTsKICNlbmRpZiAvKiBDT05GSUdfWDg2ICovCi0gICAgdm9pZCAoKnN1c3BlbmQp KHZvaWQpOworICAgIGludCAoKnN1c3BlbmQpKHZvaWQpOwogICAgIHZvaWQgKCpyZXN1bWUpKHZv aWQpOwogICAgIHZvaWQgKCpzaGFyZV9wMm0pKHN0cnVjdCBkb21haW4gKmQpOwogICAgIHZvaWQg KCpjcmFzaF9zaHV0ZG93bikodm9pZCk7CkBAIC0xNjcsNyArMTY3LDcgQEAgc3RydWN0IGlvbW11 X29wcyB7CiAgICAgdm9pZCAoKmR1bXBfcDJtX3RhYmxlKShzdHJ1Y3QgZG9tYWluICpkKTsKIH07 CiAKLXZvaWQgaW9tbXVfc3VzcGVuZCh2b2lkKTsKK2ludCBpb21tdV9zdXNwZW5kKHZvaWQpOwog dm9pZCBpb21tdV9yZXN1bWUodm9pZCk7CiB2b2lkIGlvbW11X2NyYXNoX3NodXRkb3duKHZvaWQp OwogaW50IGlvbW11X2dldF9yZXNlcnZlZF9kZXZpY2VfbWVtb3J5KGlvbW11X2dyZG1fdCAqLCB2 b2lkICopOwotLSAKMS45LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3Jn Cmh0dHA6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=