From mboxrd@z Thu Jan 1 00:00:00 1970 From: Vivek Gautam Subject: [Patch v15 2/5] iommu/arm-smmu: Invoke pm_runtime during probe, add/remove device Date: Mon, 27 Aug 2018 16:25:48 +0530 Message-ID: <20180827105551.16346-3-vivek.gautam@codeaurora.org> References: <20180827105551.16346-1-vivek.gautam@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180827105551.16346-1-vivek.gautam-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org, robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, robin.murphy-5wv7dgnIgG8@public.gmane.org, will.deacon-5wv7dgnIgG8@public.gmane.org, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: mark.rutland-5wv7dgnIgG8@public.gmane.org, architt-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, linux-pm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, sboyd-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, sricharan-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, rjw-LthD3rsA81gm4RdzfppkhA@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, tfiga-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org, Vivek Gautam , linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, andy.gross-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org, jcrouse-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org RnJvbTogU3JpY2hhcmFuIFIgPHNyaWNoYXJhbkBjb2RlYXVyb3JhLm9yZz4KClRoZSBzbW11IGRl dmljZSBwcm9iZS9yZW1vdmUgYW5kIGFkZC9yZW1vdmUgbWFzdGVyIGRldmljZSBjYWxsYmFja3MK Z2V0cyBjYWxsZWQgd2hlbiB0aGUgc21tdSBpcyBub3QgbGlua2VkIHRvIGl0cyBtYXN0ZXIsIHRo YXQgaXMgd2l0aG91dAp0aGUgY29udGV4dCBvZiB0aGUgbWFzdGVyIGRldmljZS4gU28gY2FsbGlu ZyBydW50aW1lIGFwaXMgaW4gdGhvc2UgcGxhY2VzCnNlcGFyYXRlbHkuCgpTaWduZWQtb2ZmLWJ5 OiBTcmljaGFyYW4gUiA8c3JpY2hhcmFuQGNvZGVhdXJvcmEub3JnPgpbdml2ZWs6IENsZWFudXAg cG0gcnVudGltZSBjYWxsc10KU2lnbmVkLW9mZi1ieTogVml2ZWsgR2F1dGFtIDx2aXZlay5nYXV0 YW1AY29kZWF1cm9yYS5vcmc+ClJldmlld2VkLWJ5OiBUb21hc3ogRmlnYSA8dGZpZ2FAY2hyb21p dW0ub3JnPgpUZXN0ZWQtYnk6IFNyaW5pdmFzIEthbmRhZ2F0bGEgPHNyaW5pdmFzLmthbmRhZ2F0 bGFAbGluYXJvLm9yZz4KLS0tCgpDaGFuZ2VzIHNpbmNlIHYxNDoKIC0gbm9uZS4KCiBkcml2ZXJz L2lvbW11L2FybS1zbW11LmMgfCAxMDEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKy0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA5MyBpbnNlcnRpb25zKCspLCA4IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvYXJtLXNtbXUuYyBiL2RyaXZlcnMv aW9tbXUvYXJtLXNtbXUuYwppbmRleCBhODEyMjRiYzY2MzcuLjIzYjRhNjAxNDliNiAxMDA2NDQK LS0tIGEvZHJpdmVycy9pb21tdS9hcm0tc21tdS5jCisrKyBiL2RyaXZlcnMvaW9tbXUvYXJtLXNt bXUuYwpAQCAtMjY4LDYgKzI2OCwyMCBAQCBzdGF0aWMgc3RydWN0IGFybV9zbW11X29wdGlvbl9w cm9wIGFybV9zbW11X29wdGlvbnNbXSA9IHsKIAl7IDAsIE5VTEx9LAogfTsKIAorc3RhdGljIGlu bGluZSBpbnQgYXJtX3NtbXVfcnBtX2dldChzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11KQor eworCWlmIChwbV9ydW50aW1lX2VuYWJsZWQoc21tdS0+ZGV2KSkKKwkJcmV0dXJuIHBtX3J1bnRp bWVfZ2V0X3N5bmMoc21tdS0+ZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5l IHZvaWQgYXJtX3NtbXVfcnBtX3B1dChzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11KQorewor CWlmIChwbV9ydW50aW1lX2VuYWJsZWQoc21tdS0+ZGV2KSkKKwkJcG1fcnVudGltZV9wdXQoc21t dS0+ZGV2KTsKK30KKwogc3RhdGljIHN0cnVjdCBhcm1fc21tdV9kb21haW4gKnRvX3NtbXVfZG9t YWluKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbSkKIHsKIAlyZXR1cm4gY29udGFpbmVyX29mKGRv bSwgc3RydWN0IGFybV9zbW11X2RvbWFpbiwgZG9tYWluKTsKQEAgLTkxMywxMSArOTI3LDE1IEBA IHN0YXRpYyB2b2lkIGFybV9zbW11X2Rlc3Ryb3lfZG9tYWluX2NvbnRleHQoc3RydWN0IGlvbW11 X2RvbWFpbiAqZG9tYWluKQogCXN0cnVjdCBhcm1fc21tdV9kb21haW4gKnNtbXVfZG9tYWluID0g dG9fc21tdV9kb21haW4oZG9tYWluKTsKIAlzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11ID0g c21tdV9kb21haW4tPnNtbXU7CiAJc3RydWN0IGFybV9zbW11X2NmZyAqY2ZnID0gJnNtbXVfZG9t YWluLT5jZmc7Ci0JaW50IGlycTsKKwlpbnQgcmV0LCBpcnE7CiAKIAlpZiAoIXNtbXUgfHwgZG9t YWluLT50eXBlID09IElPTU1VX0RPTUFJTl9JREVOVElUWSkKIAkJcmV0dXJuOwogCisJcmV0ID0g YXJtX3NtbXVfcnBtX2dldChzbW11KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuOworCiAJLyoK IAkgKiBEaXNhYmxlIHRoZSBjb250ZXh0IGJhbmsgYW5kIGZyZWUgdGhlIHBhZ2UgdGFibGVzIGJl Zm9yZSBmcmVlaW5nCiAJICogaXQuCkBAIC05MzIsNiArOTUwLDggQEAgc3RhdGljIHZvaWQgYXJt X3NtbXVfZGVzdHJveV9kb21haW5fY29udGV4dChzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4p CiAKIAlmcmVlX2lvX3BndGFibGVfb3BzKHNtbXVfZG9tYWluLT5wZ3RibF9vcHMpOwogCV9fYXJt X3NtbXVfZnJlZV9iaXRtYXAoc21tdS0+Y29udGV4dF9tYXAsIGNmZy0+Y2JuZHgpOworCisJYXJt X3NtbXVfcnBtX3B1dChzbW11KTsKIH0KIAogc3RhdGljIHN0cnVjdCBpb21tdV9kb21haW4gKmFy bV9zbW11X2RvbWFpbl9hbGxvYyh1bnNpZ25lZCB0eXBlKQpAQCAtMTIxMywxMCArMTIzMywxNSBA QCBzdGF0aWMgaW50IGFybV9zbW11X2F0dGFjaF9kZXYoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9t YWluLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJCXJldHVybiAtRU5PREVWOwogCiAJc21tdSA9IGZ3 c3BlY19zbW11KGZ3c3BlYyk7CisKKwlyZXQgPSBhcm1fc21tdV9ycG1fZ2V0KHNtbXUpOworCWlm IChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCiAJLyogRW5zdXJlIHRoYXQgdGhlIGRvbWFpbiBp cyBmaW5hbGlzZWQgKi8KIAlyZXQgPSBhcm1fc21tdV9pbml0X2RvbWFpbl9jb250ZXh0KGRvbWFp biwgc21tdSk7CiAJaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7CisJCWdvdG8gcnBtX3B1dDsK IAogCS8qCiAJICogU2FuaXR5IGNoZWNrIHRoZSBkb21haW4uIFdlIGRvbid0IHN1cHBvcnQgZG9t YWlucyBhY3Jvc3MKQEAgLTEyMjYsMzMgKzEyNTEsNTAgQEAgc3RhdGljIGludCBhcm1fc21tdV9h dHRhY2hfZGV2KHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwgc3RydWN0IGRldmljZSAqZGV2 KQogCQlkZXZfZXJyKGRldiwKIAkJCSJjYW5ub3QgYXR0YWNoIHRvIFNNTVUgJXMgd2hpbHN0IGFs cmVhZHkgYXR0YWNoZWQgdG8gZG9tYWluIG9uIFNNTVUgJXNcbiIsCiAJCQlkZXZfbmFtZShzbW11 X2RvbWFpbi0+c21tdS0+ZGV2KSwgZGV2X25hbWUoc21tdS0+ZGV2KSk7Ci0JCXJldHVybiAtRUlO VkFMOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIHJwbV9wdXQ7CiAJfQogCiAJLyogTG9va3Mg b2ssIHNvIGFkZCB0aGUgZGV2aWNlIHRvIHRoZSBkb21haW4gKi8KLQlyZXR1cm4gYXJtX3NtbXVf ZG9tYWluX2FkZF9tYXN0ZXIoc21tdV9kb21haW4sIGZ3c3BlYyk7CisJcmV0ID0gYXJtX3NtbXVf ZG9tYWluX2FkZF9tYXN0ZXIoc21tdV9kb21haW4sIGZ3c3BlYyk7CisKK3JwbV9wdXQ6CisJYXJt X3NtbXVfcnBtX3B1dChzbW11KTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGFybV9z bW11X21hcChzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGxvbmcgaW92YSwK IAkJCXBoeXNfYWRkcl90IHBhZGRyLCBzaXplX3Qgc2l6ZSwgaW50IHByb3QpCiB7CiAJc3RydWN0 IGlvX3BndGFibGVfb3BzICpvcHMgPSB0b19zbW11X2RvbWFpbihkb21haW4pLT5wZ3RibF9vcHM7 CisJc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSA9IHRvX3NtbXVfZG9tYWluKGRvbWFpbikt PnNtbXU7CisJaW50IHJldDsKIAogCWlmICghb3BzKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJl dHVybiBvcHMtPm1hcChvcHMsIGlvdmEsIHBhZGRyLCBzaXplLCBwcm90KTsKKwlhcm1fc21tdV9y cG1fZ2V0KHNtbXUpOworCXJldCA9IG9wcy0+bWFwKG9wcywgaW92YSwgcGFkZHIsIHNpemUsIHBy b3QpOworCWFybV9zbW11X3JwbV9wdXQoc21tdSk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0 aWMgc2l6ZV90IGFybV9zbW11X3VubWFwKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwgdW5z aWduZWQgbG9uZyBpb3ZhLAogCQkJICAgICBzaXplX3Qgc2l6ZSkKIHsKIAlzdHJ1Y3QgaW9fcGd0 YWJsZV9vcHMgKm9wcyA9IHRvX3NtbXVfZG9tYWluKGRvbWFpbiktPnBndGJsX29wczsKKwlzdHJ1 Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11ID0gdG9fc21tdV9kb21haW4oZG9tYWluKS0+c21tdTsK KwlzaXplX3QgcmV0OwogCiAJaWYgKCFvcHMpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIG9wcy0+ dW5tYXAob3BzLCBpb3ZhLCBzaXplKTsKKwlhcm1fc21tdV9ycG1fZ2V0KHNtbXUpOworCXJldCA9 IG9wcy0+dW5tYXAob3BzLCBpb3ZhLCBzaXplKTsKKwlhcm1fc21tdV9ycG1fcHV0KHNtbXUpOwor CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgYXJtX3NtbXVfaW90bGJfc3luYyhzdHJ1 Y3QgaW9tbXVfZG9tYWluICpkb21haW4pCkBAIC0xNDA3LDcgKzE0NDksMTMgQEAgc3RhdGljIGlu dCBhcm1fc21tdV9hZGRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKIAl3aGlsZSAoaS0tKQog CQljZmctPnNtZW5keFtpXSA9IElOVkFMSURfU01FTkRYOwogCisJcmV0ID0gYXJtX3NtbXVfcnBt X2dldChzbW11KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfY2ZnX2ZyZWU7CisKIAlyZXQg PSBhcm1fc21tdV9tYXN0ZXJfYWxsb2Nfc21lcyhkZXYpOworCWFybV9zbW11X3JwbV9wdXQoc21t dSk7CisKIAlpZiAocmV0KQogCQlnb3RvIG91dF9jZmdfZnJlZTsKIApAQCAtMTQyNyw3ICsxNDc1 LDcgQEAgc3RhdGljIHZvaWQgYXJtX3NtbXVfcmVtb3ZlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpk ZXYpCiAJc3RydWN0IGlvbW11X2Z3c3BlYyAqZndzcGVjID0gZGV2LT5pb21tdV9md3NwZWM7CiAJ c3RydWN0IGFybV9zbW11X21hc3Rlcl9jZmcgKmNmZzsKIAlzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNl ICpzbW11OwotCisJaW50IHJldDsKIAogCWlmICghZndzcGVjIHx8IGZ3c3BlYy0+b3BzICE9ICZh cm1fc21tdV9vcHMpCiAJCXJldHVybjsKQEAgLTE0MzUsOCArMTQ4MywxNSBAQCBzdGF0aWMgdm9p ZCBhcm1fc21tdV9yZW1vdmVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKIAljZmcgID0gZndz cGVjLT5pb21tdV9wcml2OwogCXNtbXUgPSBjZmctPnNtbXU7CiAKKwlyZXQgPSBhcm1fc21tdV9y cG1fZ2V0KHNtbXUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm47CisKIAlpb21tdV9kZXZpY2Vf dW5saW5rKCZzbW11LT5pb21tdSwgZGV2KTsKIAlhcm1fc21tdV9tYXN0ZXJfZnJlZV9zbWVzKGZ3 c3BlYyk7CisKKwlhcm1fc21tdV9ycG1fcHV0KHNtbXUpOworCiAJaW9tbXVfZ3JvdXBfcmVtb3Zl X2RldmljZShkZXYpOwogCWtmcmVlKGZ3c3BlYy0+aW9tbXVfcHJpdik7CiAJaW9tbXVfZndzcGVj X2ZyZWUoZGV2KTsKQEAgLTIxMjMsNiArMjE3OCw4IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2 aWNlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJCXNtbXUtPmlycXNbaV0g PSBpcnE7CiAJfQogCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgc21tdSk7CisKIAllcnIg PSBkZXZtX2Nsa19idWxrX2dldChzbW11LT5kZXYsIHNtbXUtPm51bV9jbGtzLCBzbW11LT5jbGtz KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtMjEzMSw2ICsyMTg4LDI2IEBAIHN0YXRp YyBpbnQgYXJtX3NtbXVfZGV2aWNlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAorCS8qCisJICogV2Ugd2FudCB0byBhdm9pZCB0 b3VjaGluZyBkZXYtPnBvd2VyLmxvY2sgaW4gZmFzdHBhdGhzIHVubGVzcworCSAqIGl0J3MgcmVh bGx5IGdvaW5nIHRvIGRvIHNvbWV0aGluZyB1c2VmdWwgLSBwbV9ydW50aW1lX2VuYWJsZWQoKQor CSAqIGNhbiBzZXJ2ZSBhcyBhbiBpZGVhbCBwcm94eSBmb3IgdGhhdCBkZWNpc2lvbi4gU28sIGNv bmRpdGlvbmFsbHkKKwkgKiBlbmFibGUgcG1fcnVudGltZS4KKwkgKi8KKwlpZiAoZGV2LT5wbV9k b21haW4pCisJCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7CisKKwllcnIgPSBhcm1fc21tdV9ycG1f Z2V0KHNtbXUpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJLyogRW5hYmxlIGNs b2NrcyBleHBsaWNpdGx5IGlmIHJ1bnRpbWUgUE0gaXMgZGlzYWJsZWQgKi8KKwlpZiAoIXBtX3J1 bnRpbWVfZW5hYmxlZChkZXYpKSB7CisJCWVyciA9IGNsa19idWxrX2VuYWJsZShzbW11LT5udW1f Y2xrcywgc21tdS0+Y2xrcyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKwogCWVy ciA9IGFybV9zbW11X2RldmljZV9jZmdfcHJvYmUoc21tdSk7CiAJaWYgKGVycikKIAkJcmV0dXJu IGVycjsKQEAgLTIxNzYsMTAgKzIyNTMsMTEgQEAgc3RhdGljIGludCBhcm1fc21tdV9kZXZpY2Vf cHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAkJcmV0dXJuIGVycjsKIAl9CiAK LQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBzbW11KTsKIAlhcm1fc21tdV9kZXZpY2VfcmVz ZXQoc21tdSk7CiAJYXJtX3NtbXVfdGVzdF9zbXJfbWFza3Moc21tdSk7CiAKKwlhcm1fc21tdV9y cG1fcHV0KHNtbXUpOworCiAJLyoKIAkgKiBGb3IgQUNQSSBhbmQgZ2VuZXJpYyBEVCBiaW5kaW5n cywgYW4gU01NVSB3aWxsIGJlIHByb2JlZCBiZWZvcmUKIAkgKiBhbnkgZGV2aWNlIHdoaWNoIG1p Z2h0IG5lZWQgaXQsIHNvIHdlIHdhbnQgdGhlIGJ1cyBvcHMgaW4gcGxhY2UKQEAgLTIyMTUsOCAr MjI5MywxNSBAQCBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9yZW1vdmUoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldikKIAlpZiAoIWJpdG1hcF9lbXB0eShzbW11LT5jb250ZXh0X21hcCwg QVJNX1NNTVVfTUFYX0NCUykpCiAJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlbW92aW5nIGRldmlj ZSB3aXRoIGFjdGl2ZSBkb21haW5zIVxuIik7CiAKKwlhcm1fc21tdV9ycG1fZ2V0KHNtbXUpOwog CS8qIFR1cm4gdGhlIHRoaW5nIG9mZiAqLwogCXdyaXRlbChzQ1IwX0NMSUVOVFBELCBBUk1fU01N VV9HUjBfTlMoc21tdSkgKyBBUk1fU01NVV9HUjBfc0NSMCk7CisJYXJtX3NtbXVfcnBtX3B1dChz bW11KTsKKworCWlmIChwbV9ydW50aW1lX2VuYWJsZWQoc21tdS0+ZGV2KSkKKwkJcG1fcnVudGlt ZV9mb3JjZV9zdXNwZW5kKHNtbXUtPmRldik7CisJZWxzZQorCQljbGtfYnVsa19kaXNhYmxlKHNt bXUtPm51bV9jbGtzLCBzbW11LT5jbGtzKTsKIAogCWNsa19idWxrX3VucHJlcGFyZShzbW11LT5u dW1fY2xrcywgc21tdS0+Y2xrcyk7CiAKLS0gClFVQUxDT01NIElORElBLCBvbiBiZWhhbGYgb2Yg UXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gaXMgYSBtZW1iZXIKb2YgQ29kZSBBdXJv cmEgRm9ydW0sIGhvc3RlZCBieSBUaGUgTGludXggRm91bmRhdGlvbgoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRnJlZWRyZW5vIG1haWxpbmcgbGlzdApG cmVlZHJlbm9AbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vZnJlZWRyZW5vCg==