From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jordan Crouse Subject: [PATCH 3/8] drm/msm/gpu: Capture the state of the GPU Date: Thu, 8 Feb 2018 10:31:52 -0700 Message-ID: <1518111117-7408-4-git-send-email-jcrouse@codeaurora.org> References: <1518111117-7408-1-git-send-email-jcrouse@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1518111117-7408-1-git-send-email-jcrouse-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: freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org QWRkIHRoZSBpbmZyYXN0cnVjdHVyZSB0byBjYXB0dXJlIHRoZSBzdGF0ZSBjdXJyZW50IHN0YXRl IG9mIHRoZQpHUFUgYW5kIHN0b3JlIGl0IGluIG1lbW9yeS4gVGhpcyBpcyB1c2VmdWwgZm9yIHN0 b3JpbmcgdGhlIHN0YXRlCm9mIGEgaHVuZyBHUFUgc28gaXQgY2FuIGJlIGR1bXBlZCBsYXRlci4K CkZvciBub3cgZ3JhYiB0aGUgc2FtZSBiYXNpYyByaW5nYnVmZmVyIGluZm9ybWF0aW9uIGFuZCBy ZWdpc3RlcnMKdGhhdCBhcmUgcHJvdmlkZWQgYnkgdGhlIGRlYnVnZnMgJ2dwdScgbm9kZSBidXQg b2J2aW91c2x5IHRoaXMgY2FuCmJlIGV4dGVuZGVkIHRvIGNhcHR1cmUgYSBtdWNoIGxhcmdlciBz ZXQgb2YgR1BVIGluZm9ybWF0aW9uLgoKU2lnbmVkLW9mZi1ieTogSm9yZGFuIENyb3VzZSA8amNy b3VzZUBjb2RlYXVyb3JhLm9yZz4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hM3h4 X2dwdS5jICAgfCAxNSArKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E0eHhf Z3B1LmMgICB8IDE0ICsrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTV4eF9n cHUuYyAgIHwgMjIgKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2Fk cmVub19ncHUuYyB8IDU0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVy cy9ncHUvZHJtL21zbS9hZHJlbm8vYWRyZW5vX2dwdS5oIHwgIDMgKysKIGRyaXZlcnMvZ3B1L2Ry bS9tc20vbXNtX2dwdS5oICAgICAgICAgICB8IDE5ICsrKysrKysrKysrKwogNiBmaWxlcyBjaGFu Z2VkLCAxMjcgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20v YWRyZW5vL2EzeHhfZ3B1LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hM3h4X2dwdS5j CmluZGV4IDFkZDg0ZDMuLmMzNTEyOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20v YWRyZW5vL2EzeHhfZ3B1LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTN4eF9n cHUuYwpAQCAtNDI2LDYgKzQyNiwxOSBAQCBzdGF0aWMgdm9pZCBhM3h4X2R1bXAoc3RydWN0IG1z bV9ncHUgKmdwdSkKIAkJCWdwdV9yZWFkKGdwdSwgUkVHX0EzWFhfUkJCTV9TVEFUVVMpKTsKIAlh ZHJlbm9fZHVtcChncHUpOwogfQorCitzdGF0aWMgc3RydWN0IG1zbV9ncHVfc3RhdGUgKmEzeHhf Z3B1X3N0YXRlX2dldChzdHJ1Y3QgbXNtX2dwdSAqZ3B1KQoreworCXN0cnVjdCBtc21fZ3B1X3N0 YXRlICpzdGF0ZSA9IGFkcmVub19ncHVfc3RhdGVfZ2V0KGdwdSk7CisKKwlpZiAoSVNfRVJSKHN0 YXRlKSkKKwkJcmV0dXJuIHN0YXRlOworCisJc3RhdGUtPnJiYm1fc3RhdHVzID0gZ3B1X3JlYWQo Z3B1LCBSRUdfQTNYWF9SQkJNX1NUQVRVUyk7CisKKwlyZXR1cm4gc3RhdGU7Cit9CisKIC8qIFJl Z2lzdGVyIG9mZnNldCBkZWZpbmVzIGZvciBBM1hYICovCiBzdGF0aWMgY29uc3QgdW5zaWduZWQg aW50IGEzeHhfcmVnaXN0ZXJfb2Zmc2V0c1tSRUdfQURSRU5PX1JFR0lTVEVSX01BWF0gPSB7CiAJ UkVHX0FEUkVOT19ERUZJTkUoUkVHX0FEUkVOT19DUF9SQl9CQVNFLCBSRUdfQVhYWF9DUF9SQl9C QVNFKSwKQEAgLTQ1Miw2ICs0NjUsOCBAQCBzdGF0aWMgdm9pZCBhM3h4X2R1bXAoc3RydWN0IG1z bV9ncHUgKmdwdSkKICNpZmRlZiBDT05GSUdfREVCVUdfRlMKIAkJLnNob3cgPSBhM3h4X3Nob3cs CiAjZW5kaWYKKwkJLmdwdV9zdGF0ZV9nZXQgPSBhM3h4X2dwdV9zdGF0ZV9nZXQsCisJCS5ncHVf c3RhdGVfcHV0ID0gYWRyZW5vX2dwdV9zdGF0ZV9wdXQsCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E0eHhfZ3B1LmMgYi9kcml2ZXJzL2dwdS9kcm0v bXNtL2FkcmVuby9hNHh4X2dwdS5jCmluZGV4IDI4ODRiMWIuLmZhZjVkNjAgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E0eHhfZ3B1LmMKKysrIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9hZHJlbm8vYTR4eF9ncHUuYwpAQCAtNDY0LDYgKzQ2NCwxOCBAQCBzdGF0aWMgdm9p ZCBhNHh4X3Nob3coc3RydWN0IG1zbV9ncHUgKmdwdSwgc3RydWN0IHNlcV9maWxlICptKQogfQog I2VuZGlmCiAKK3N0YXRpYyBzdHJ1Y3QgbXNtX2dwdV9zdGF0ZSAqYTR4eF9ncHVfc3RhdGVfZ2V0 KHN0cnVjdCBtc21fZ3B1ICpncHUpCit7CisJc3RydWN0IG1zbV9ncHVfc3RhdGUgKnN0YXRlID0g YWRyZW5vX2dwdV9zdGF0ZV9nZXQoZ3B1KTsKKworCWlmIChJU19FUlIoc3RhdGUpKQorCQlyZXR1 cm4gc3RhdGU7CisKKwlzdGF0ZS0+cmJibV9zdGF0dXMgPSBncHVfcmVhZChncHUsIFJFR19BNFhY X1JCQk1fU1RBVFVTKTsKKworCXJldHVybiBzdGF0ZTsKK30KKwogLyogUmVnaXN0ZXIgb2Zmc2V0 IGRlZmluZXMgZm9yIEE0WFgsIGluIG9yZGVyIG9mIGVudW0gYWRyZW5vX3JlZ3MgKi8KIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBpbnQgYTR4eF9yZWdpc3Rlcl9vZmZzZXRzW1JFR19BRFJFTk9fUkVH SVNURVJfTUFYXSA9IHsKIAlSRUdfQURSRU5PX0RFRklORShSRUdfQURSRU5PX0NQX1JCX0JBU0Us IFJFR19BNFhYX0NQX1JCX0JBU0UpLApAQCAtNTQwLDYgKzU1Miw4IEBAIHN0YXRpYyBpbnQgYTR4 eF9nZXRfdGltZXN0YW1wKHN0cnVjdCBtc21fZ3B1ICpncHUsIHVpbnQ2NF90ICp2YWx1ZSkKICNp ZmRlZiBDT05GSUdfREVCVUdfRlMKIAkJLnNob3cgPSBhNHh4X3Nob3csCiAjZW5kaWYKKwkJLmdw dV9zdGF0ZV9nZXQgPSBhNHh4X2dwdV9zdGF0ZV9nZXQsCisJCS5ncHVfc3RhdGVfcHV0ID0gYWRy ZW5vX2dwdV9zdGF0ZV9wdXQsCiAJfSwKIAkuZ2V0X3RpbWVzdGFtcCA9IGE0eHhfZ2V0X3RpbWVz dGFtcCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNXh4X2dw dS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTV4eF9ncHUuYwppbmRleCBhNGY2OGFm Li4wOGYyNTc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNXh4X2dw dS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E1eHhfZ3B1LmMKQEAgLTExOTUs NiArMTE5NSwyNiBAQCBzdGF0aWMgaW50IGE1eHhfZ2V0X3RpbWVzdGFtcChzdHJ1Y3QgbXNtX2dw dSAqZ3B1LCB1aW50NjRfdCAqdmFsdWUpCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qg bXNtX2dwdV9zdGF0ZSAqYTV4eF9ncHVfc3RhdGVfZ2V0KHN0cnVjdCBtc21fZ3B1ICpncHUpCit7 CisJc3RydWN0IG1zbV9ncHVfc3RhdGUgKnN0YXRlOworCisJLyoKKwkgKiBUZW1wb3JhcmlseSBk aXNhYmxlIGhhcmR3YXJlIGNsb2NrIGdhdGluZyBiZWZvcmUgZ29pbmcgaW50bworCSAqIGFkcmVu b19zaG93IHRvIGF2b2lkIGlzc3VlcyB3aGlsZSByZWFkaW5nIHRoZSByZWdpc3RlcnMKKwkgKi8K KwlhNXh4X3NldF9od2NnKGdwdSwgZmFsc2UpOworCisJc3RhdGUgPSBhZHJlbm9fZ3B1X3N0YXRl X2dldChncHUpOworCisJaWYgKCFJU19FUlIoc3RhdGUpKQorCQlzdGF0ZS0+cmJibV9zdGF0dXMg PSBncHVfcmVhZChncHUsIFJFR19BNVhYX1JCQk1fU1RBVFVTKTsKKworCWE1eHhfc2V0X2h3Y2co Z3B1LCB0cnVlKTsKKworCXJldHVybiBzdGF0ZTsKK30KKwogI2lmZGVmIENPTkZJR19ERUJVR19G Uwogc3RhdGljIHZvaWQgYTV4eF9zaG93KHN0cnVjdCBtc21fZ3B1ICpncHUsIHN0cnVjdCBzZXFf ZmlsZSAqbSkKIHsKQEAgLTEyNDQsNiArMTI2NCw4IEBAIHN0YXRpYyBpbnQgYTV4eF9ncHVfYnVz eShzdHJ1Y3QgbXNtX2dwdSAqZ3B1LCB1aW50NjRfdCAqdmFsdWUpCiAJCS5kZWJ1Z2ZzX2luaXQg PSBhNXh4X2RlYnVnZnNfaW5pdCwKICNlbmRpZgogCQkuZ3B1X2J1c3kgPSBhNXh4X2dwdV9idXN5 LAorCQkuZ3B1X3N0YXRlX2dldCA9IGE1eHhfZ3B1X3N0YXRlX2dldCwKKwkJLmdwdV9zdGF0ZV9w dXQgPSBhZHJlbm9fZ3B1X3N0YXRlX3B1dCwKIAl9LAogCS5nZXRfdGltZXN0YW1wID0gYTV4eF9n ZXRfdGltZXN0YW1wLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5v L2FkcmVub19ncHUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2FkcmVub19ncHUuYwpp bmRleCA4NzEzM2M2Yy4uMzViNzdmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9h ZHJlbm8vYWRyZW5vX2dwdS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2FkcmVu b19ncHUuYwpAQCAtMzgyLDYgKzM4Miw2MCBAQCBib29sIGFkcmVub19pZGxlKHN0cnVjdCBtc21f Z3B1ICpncHUsIHN0cnVjdCBtc21fcmluZ2J1ZmZlciAqcmluZykKIAlyZXR1cm4gZmFsc2U7CiB9 CiAKK3N0cnVjdCBtc21fZ3B1X3N0YXRlICphZHJlbm9fZ3B1X3N0YXRlX2dldChzdHJ1Y3QgbXNt X2dwdSAqZ3B1KQoreworCXN0cnVjdCBhZHJlbm9fZ3B1ICphZHJlbm9fZ3B1ID0gdG9fYWRyZW5v X2dwdShncHUpOworCXN0cnVjdCBtc21fZ3B1X3N0YXRlICpzdGF0ZTsKKwlpbnQgaSwgY291bnQg PSAwOworCisJc3RhdGUgPSBremFsbG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlp ZiAoIXN0YXRlKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWRvX2dldHRpbWVvZmRh eSgmc3RhdGUtPnRpbWUpOworCisJZm9yIChpID0gMDsgaSA8IGdwdS0+bnJfcmluZ3M7IGkrKykg eworCQlzdGF0ZS0+cmluZ1tpXS5mZW5jZSA9IGdwdS0+cmJbaV0tPm1lbXB0cnMtPmZlbmNlOwor CQlzdGF0ZS0+cmluZ1tpXS5zZXFubyA9IGdwdS0+cmJbaV0tPnNlcW5vOworCQlzdGF0ZS0+cmlu Z1tpXS5ycHRyID0gZ2V0X3JwdHIoYWRyZW5vX2dwdSwgZ3B1LT5yYltpXSk7CisJCXN0YXRlLT5y aW5nW2ldLndwdHIgPSBnZXRfd3B0cihncHUtPnJiW2ldKTsKKwl9CisKKwkvKiBDb3VudCB0aGUg bnVtYmVyIG9mIHJlZ2lzdGVycyAqLworCWZvciAoaSA9IDA7IGFkcmVub19ncHUtPnJlZ2lzdGVy c1tpXSAhPSB+MDsgaSArPSAyKQorCQljb3VudCArPSBhZHJlbm9fZ3B1LT5yZWdpc3RlcnNbaSAr IDFdIC0KKwkJCWFkcmVub19ncHUtPnJlZ2lzdGVyc1tpXSArIDE7CisKKwlzdGF0ZS0+cmVnaXN0 ZXJzID0ga2NhbGxvYyhjb3VudCAqIDIsIHNpemVvZih1MzIpLCBHRlBfS0VSTkVMKTsKKwlpZiAo c3RhdGUtPnJlZ2lzdGVycykgeworCQlpbnQgcG9zID0gMDsKKworCQlmb3IgKGkgPSAwOyBhZHJl bm9fZ3B1LT5yZWdpc3RlcnNbaV0gIT0gfjA7IGkgKz0gMikgeworCQkJdWludDMyX3Qgc3RhcnQg PSBhZHJlbm9fZ3B1LT5yZWdpc3RlcnNbaV07CisJCQl1aW50MzJfdCBlbmQgICA9IGFkcmVub19n cHUtPnJlZ2lzdGVyc1tpKzFdOworCQkJdWludDMyX3QgYWRkcjsKKworCQkJZm9yIChhZGRyID0g c3RhcnQ7IGFkZHIgPD0gZW5kOyBhZGRyKyspIHsKKwkJCQlzdGF0ZS0+cmVnaXN0ZXJzW3Bvcysr XSA9IGFkZHI7CisJCQkJc3RhdGUtPnJlZ2lzdGVyc1twb3MrK10gPSBncHVfcmVhZChncHUsIGFk ZHIpOworCQkJfQorCQl9CisKKwkJc3RhdGUtPm5yX3JlZ2lzdGVycyA9IGNvdW50OworCX0KKwor CXJldHVybiBzdGF0ZTsKK30KKwordm9pZCBhZHJlbm9fZ3B1X3N0YXRlX3B1dChzdHJ1Y3QgbXNt X2dwdV9zdGF0ZSAqc3RhdGUpCit7CisJaWYgKElTX0VSUl9PUl9OVUxMKHN0YXRlKSkKKwkJcmV0 dXJuOworCisJa2ZyZWUoc3RhdGUtPnJlZ2lzdGVycyk7CisJa2ZyZWUoc3RhdGUpOworfQorCiAj aWZkZWYgQ09ORklHX0RFQlVHX0ZTCiB2b2lkIGFkcmVub19zaG93KHN0cnVjdCBtc21fZ3B1ICpn cHUsIHN0cnVjdCBzZXFfZmlsZSAqbSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9t c20vYWRyZW5vL2FkcmVub19ncHUuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2FkcmVu b19ncHUuaAppbmRleCBkNmIwZTdiLi4wYmViMDc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vbXNtL2FkcmVuby9hZHJlbm9fZ3B1LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJl bm8vYWRyZW5vX2dwdS5oCkBAIC0yMjgsNiArMjI4LDkgQEAgaW50IGFkcmVub19ncHVfaW5pdChz dHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAogdm9p ZCBhZHJlbm9fZ3B1X2NsZWFudXAoc3RydWN0IGFkcmVub19ncHUgKmdwdSk7CiAKIAorc3RydWN0 IG1zbV9ncHVfc3RhdGUgKmFkcmVub19ncHVfc3RhdGVfZ2V0KHN0cnVjdCBtc21fZ3B1ICpncHUp Owordm9pZCBhZHJlbm9fZ3B1X3N0YXRlX3B1dChzdHJ1Y3QgbXNtX2dwdV9zdGF0ZSAqc3RhdGUp OworCiAvKiByaW5nYnVmZmVyIGhlbHBlcnMgKHRoZSBwYXJ0cyB0aGF0IGFyZSBhZHJlbm8gc3Bl Y2lmaWMpICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL21zbS9tc21fZ3B1LmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9ncHUuaAppbmRleCBi ODI0MTE3Li40YmU3MmE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9ncHUu aAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9ncHUuaApAQCAtMjcsNiArMjcsNyBAQAog CiBzdHJ1Y3QgbXNtX2dlbV9zdWJtaXQ7CiBzdHJ1Y3QgbXNtX2dwdV9wZXJmY250cjsKK3N0cnVj dCBtc21fZ3B1X3N0YXRlOwogCiBzdHJ1Y3QgbXNtX2dwdV9jb25maWcgewogCWNvbnN0IGNoYXIg KmlvbmFtZTsKQEAgLTY5LDYgKzcwLDggQEAgc3RydWN0IG1zbV9ncHVfZnVuY3MgewogCWludCAo KmRlYnVnZnNfaW5pdCkoc3RydWN0IG1zbV9ncHUgKmdwdSwgc3RydWN0IGRybV9taW5vciAqbWlu b3IpOwogI2VuZGlmCiAJaW50ICgqZ3B1X2J1c3kpKHN0cnVjdCBtc21fZ3B1ICpncHUsIHVpbnQ2 NF90ICp2YWx1ZSk7CisJc3RydWN0IG1zbV9ncHVfc3RhdGUgKigqZ3B1X3N0YXRlX2dldCkoc3Ry dWN0IG1zbV9ncHUgKmdwdSk7CisJdm9pZCAoKmdwdV9zdGF0ZV9wdXQpKHN0cnVjdCBtc21fZ3B1 X3N0YXRlICpzdGF0ZSk7CiB9OwogCiBzdHJ1Y3QgbXNtX2dwdSB7CkBAIC0xNzUsNiArMTc4LDIy IEBAIHN0cnVjdCBtc21fZ3B1X3N1Ym1pdHF1ZXVlIHsKIAlzdHJ1Y3Qga3JlZiByZWY7CiB9Owog CitzdHJ1Y3QgbXNtX2dwdV9zdGF0ZSB7CisJc3RydWN0IHRpbWV2YWwgdGltZTsKKworCXN0cnVj dCB7CisJCXUzMiBmZW5jZTsKKwkJdTMyIHNlcW5vOworCQl1MzIgcnB0cjsKKwkJdTMyIHdwdHI7 CisJfSByaW5nW01TTV9HUFVfTUFYX1JJTkdTXTsKKworCWludCBucl9yZWdpc3RlcnM7CisJdTMy ICpyZWdpc3RlcnM7CisKKwl1MzIgcmJibV9zdGF0dXM7Cit9OworCiBzdGF0aWMgaW5saW5lIHZv aWQgZ3B1X3dyaXRlKHN0cnVjdCBtc21fZ3B1ICpncHUsIHUzMiByZWcsIHUzMiBkYXRhKQogewog CW1zbV93cml0ZWwoZGF0YSwgZ3B1LT5tbWlvICsgKHJlZyA8PCAyKSk7Ci0tIAoxLjkuMQoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRnJlZWRyZW5vIG1h aWxpbmcgbGlzdApGcmVlZHJlbm9AbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZnJlZWRyZW5vCg==