From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jordan Crouse Subject: [PATCH 06/13] drm/msm/gpu: Capture the state of the GPU Date: Tue, 24 Jul 2018 10:33:24 -0600 Message-ID: <20180724163331.18250-7-jcrouse@codeaurora.org> References: <20180724163331.18250-1-jcrouse@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180724163331.18250-1-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 QWRkIHRoZSBpbmZyYXN0cnVjdHVyZSB0byBjYXB0dXJlIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRo ZSBHUFUgYW5kCnN0b3JlIGl0IGluIG1lbW9yeSBzbyB0aGF0IGl0IGNhbiBiZSBkdW1wZWQgbGF0 ZXIuCgpGb3Igbm93IGdyYWIgdGhlIHNhbWUgYmFzaWMgcmluZ2J1ZmZlciBpbmZvcm1hdGlvbiBh bmQgcmVnaXN0ZXJzCnRoYXQgYXJlIHByb3ZpZGVkIGJ5IHRoZSBkZWJ1Z2ZzICdncHUnIG5vZGUg YnV0IG9idmlvdXNseSB0aGlzIHNob3VsZApiZSBleHRlbmRlZCB0byBjYXB0dXJlIGEgbXVjaCBs YXJnZXIgc2V0IG9mIEdQVSBpbmZvcm1hdGlvbi4KClNpZ25lZC1vZmYtYnk6IEpvcmRhbiBDcm91 c2UgPGpjcm91c2VAY29kZWF1cm9yYS5vcmc+Ci0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9hZHJl bm8vYTN4eF9ncHUuYyAgIHwgMTUgKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8v YTR4eF9ncHUuYyAgIHwgMTQgKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTV4 eF9ncHUuYyAgIHwgMjIgKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYWRy ZW5vX2dwdS5jIHwgNTUgKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJt L21zbS9hZHJlbm8vYWRyZW5vX2dwdS5oIHwgIDMgKysKIGRyaXZlcnMvZ3B1L2RybS9tc20vbXNt X2dwdS5oICAgICAgICAgICB8IDIwICsrKysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCAxMjkgaW5z ZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2EzeHhf Z3B1LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hM3h4X2dwdS5jCmluZGV4IDNlYmJl YjNhOWI2OC4uYjcwN2I1YmNhOWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Fk cmVuby9hM3h4X2dwdS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2EzeHhfZ3B1 LmMKQEAgLTQyNyw2ICs0MjcsMTkgQEAgc3RhdGljIHZvaWQgYTN4eF9kdW1wKHN0cnVjdCBtc21f Z3B1ICpncHUpCiAJCQlncHVfcmVhZChncHUsIFJFR19BM1hYX1JCQk1fU1RBVFVTKSk7CiAJYWRy ZW5vX2R1bXAoZ3B1KTsKIH0KKworc3RhdGljIHN0cnVjdCBtc21fZ3B1X3N0YXRlICphM3h4X2dw dV9zdGF0ZV9nZXQoc3RydWN0IG1zbV9ncHUgKmdwdSkKK3sKKwlzdHJ1Y3QgbXNtX2dwdV9zdGF0 ZSAqc3RhdGUgPSBhZHJlbm9fZ3B1X3N0YXRlX2dldChncHUpOworCisJaWYgKElTX0VSUihzdGF0 ZSkpCisJCXJldHVybiBzdGF0ZTsKKworCXN0YXRlLT5yYmJtX3N0YXR1cyA9IGdwdV9yZWFkKGdw dSwgUkVHX0EzWFhfUkJCTV9TVEFUVVMpOworCisJcmV0dXJuIHN0YXRlOworfQorCiAvKiBSZWdp c3RlciBvZmZzZXQgZGVmaW5lcyBmb3IgQTNYWCAqLwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGlu dCBhM3h4X3JlZ2lzdGVyX29mZnNldHNbUkVHX0FEUkVOT19SRUdJU1RFUl9NQVhdID0gewogCVJF R19BRFJFTk9fREVGSU5FKFJFR19BRFJFTk9fQ1BfUkJfQkFTRSwgUkVHX0FYWFhfQ1BfUkJfQkFT RSksCkBAIC00NTMsNiArNDY2LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhZHJlbm9fZ3B1X2Z1 bmNzIGZ1bmNzID0gewogI2lmZGVmIENPTkZJR19ERUJVR19GUwogCQkuc2hvdyA9IGEzeHhfc2hv dywKICNlbmRpZgorCQkuZ3B1X3N0YXRlX2dldCA9IGEzeHhfZ3B1X3N0YXRlX2dldCwKKwkJLmdw dV9zdGF0ZV9wdXQgPSBhZHJlbm9fZ3B1X3N0YXRlX3B1dCwKIAl9LAogfTsKIApkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTR4eF9ncHUuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vYWRyZW5vL2E0eHhfZ3B1LmMKaW5kZXggMTZkM2Q1OTY2MzhlLi4xN2U5N2ViYzEwNzcg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E0eHhfZ3B1LmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTR4eF9ncHUuYwpAQCAtNDY1LDYgKzQ2NSwxOCBA QCBzdGF0aWMgdm9pZCBhNHh4X3Nob3coc3RydWN0IG1zbV9ncHUgKmdwdSwgc3RydWN0IHNlcV9m aWxlICptKQogfQogI2VuZGlmCiAKK3N0YXRpYyBzdHJ1Y3QgbXNtX2dwdV9zdGF0ZSAqYTR4eF9n cHVfc3RhdGVfZ2V0KHN0cnVjdCBtc21fZ3B1ICpncHUpCit7CisJc3RydWN0IG1zbV9ncHVfc3Rh dGUgKnN0YXRlID0gYWRyZW5vX2dwdV9zdGF0ZV9nZXQoZ3B1KTsKKworCWlmIChJU19FUlIoc3Rh dGUpKQorCQlyZXR1cm4gc3RhdGU7CisKKwlzdGF0ZS0+cmJibV9zdGF0dXMgPSBncHVfcmVhZChn cHUsIFJFR19BNFhYX1JCQk1fU1RBVFVTKTsKKworCXJldHVybiBzdGF0ZTsKK30KKwogLyogUmVn aXN0ZXIgb2Zmc2V0IGRlZmluZXMgZm9yIEE0WFgsIGluIG9yZGVyIG9mIGVudW0gYWRyZW5vX3Jl Z3MgKi8KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYTR4eF9yZWdpc3Rlcl9vZmZzZXRzW1JF R19BRFJFTk9fUkVHSVNURVJfTUFYXSA9IHsKIAlSRUdfQURSRU5PX0RFRklORShSRUdfQURSRU5P X0NQX1JCX0JBU0UsIFJFR19BNFhYX0NQX1JCX0JBU0UpLApAQCAtNTQxLDYgKzU1Myw4IEBAIHN0 YXRpYyBjb25zdCBzdHJ1Y3QgYWRyZW5vX2dwdV9mdW5jcyBmdW5jcyA9IHsKICNpZmRlZiBDT05G SUdfREVCVUdfRlMKIAkJLnNob3cgPSBhNHh4X3Nob3csCiAjZW5kaWYKKwkJLmdwdV9zdGF0ZV9n ZXQgPSBhNHh4X2dwdV9zdGF0ZV9nZXQsCisJCS5ncHVfc3RhdGVfcHV0ID0gYWRyZW5vX2dwdV9z dGF0ZV9wdXQsCiAJfSwKIAkuZ2V0X3RpbWVzdGFtcCA9IGE0eHhfZ2V0X3RpbWVzdGFtcCwKIH07 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNXh4X2dwdS5jIGIvZHJp dmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTV4eF9ncHUuYwppbmRleCBkMzk0MDBlNWJjNDIuLjll ODVlNGY3MDE2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTV4eF9n cHUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNXh4X2dwdS5jCkBAIC0xMTk1 LDYgKzExOTUsMjYgQEAgc3RhdGljIGludCBhNXh4X2dldF90aW1lc3RhbXAoc3RydWN0IG1zbV9n cHUgKmdwdSwgdWludDY0X3QgKnZhbHVlKQogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0 IG1zbV9ncHVfc3RhdGUgKmE1eHhfZ3B1X3N0YXRlX2dldChzdHJ1Y3QgbXNtX2dwdSAqZ3B1KQor eworCXN0cnVjdCBtc21fZ3B1X3N0YXRlICpzdGF0ZTsKKworCS8qCisJICogVGVtcG9yYXJpbHkg ZGlzYWJsZSBoYXJkd2FyZSBjbG9jayBnYXRpbmcgYmVmb3JlIGdvaW5nIGludG8KKwkgKiBhZHJl bm9fc2hvdyB0byBhdm9pZCBpc3N1ZXMgd2hpbGUgcmVhZGluZyB0aGUgcmVnaXN0ZXJzCisJICov CisJYTV4eF9zZXRfaHdjZyhncHUsIGZhbHNlKTsKKworCXN0YXRlID0gYWRyZW5vX2dwdV9zdGF0 ZV9nZXQoZ3B1KTsKKworCWlmICghSVNfRVJSKHN0YXRlKSkKKwkJc3RhdGUtPnJiYm1fc3RhdHVz ID0gZ3B1X3JlYWQoZ3B1LCBSRUdfQTVYWF9SQkJNX1NUQVRVUyk7CisKKwlhNXh4X3NldF9od2Nn KGdwdSwgdHJ1ZSk7CisKKwlyZXR1cm4gc3RhdGU7Cit9CisKICNpZmRlZiBDT05GSUdfREVCVUdf RlMKIHN0YXRpYyB2b2lkIGE1eHhfc2hvdyhzdHJ1Y3QgbXNtX2dwdSAqZ3B1LCBzdHJ1Y3Qgc2Vx X2ZpbGUgKm0pCiB7CkBAIC0xMjQ0LDYgKzEyNjQsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFk cmVub19ncHVfZnVuY3MgZnVuY3MgPSB7CiAJCS5kZWJ1Z2ZzX2luaXQgPSBhNXh4X2RlYnVnZnNf aW5pdCwKICNlbmRpZgogCQkuZ3B1X2J1c3kgPSBhNXh4X2dwdV9idXN5LAorCQkuZ3B1X3N0YXRl X2dldCA9IGE1eHhfZ3B1X3N0YXRlX2dldCwKKwkJLmdwdV9zdGF0ZV9wdXQgPSBhZHJlbm9fZ3B1 X3N0YXRlX3B1dCwKIAl9LAogCS5nZXRfdGltZXN0YW1wID0gYTV4eF9nZXRfdGltZXN0YW1wLAog fTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2FkcmVub19ncHUuYyBi L2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2FkcmVub19ncHUuYwppbmRleCBiY2JmOWYyYTI5 ZjkuLjQyODZhNTM5ZjQwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8v YWRyZW5vX2dwdS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2FkcmVub19ncHUu YwpAQCAtMzY4LDYgKzM2OCw2MSBAQCBib29sIGFkcmVub19pZGxlKHN0cnVjdCBtc21fZ3B1ICpn cHUsIHN0cnVjdCBtc21fcmluZ2J1ZmZlciAqcmluZykKIAlyZXR1cm4gZmFsc2U7CiB9CiAKK3N0 cnVjdCBtc21fZ3B1X3N0YXRlICphZHJlbm9fZ3B1X3N0YXRlX2dldChzdHJ1Y3QgbXNtX2dwdSAq Z3B1KQoreworCXN0cnVjdCBhZHJlbm9fZ3B1ICphZHJlbm9fZ3B1ID0gdG9fYWRyZW5vX2dwdShn cHUpOworCXN0cnVjdCBtc21fZ3B1X3N0YXRlICpzdGF0ZTsKKwlpbnQgaSwgY291bnQgPSAwOwor CisJc3RhdGUgPSBremFsbG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0 YXRlKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWRvX2dldHRpbWVvZmRheSgmc3Rh dGUtPnRpbWUpOworCisJZm9yIChpID0gMDsgaSA8IGdwdS0+bnJfcmluZ3M7IGkrKykgeworCQlz dGF0ZS0+cmluZ1tpXS5mZW5jZSA9IGdwdS0+cmJbaV0tPm1lbXB0cnMtPmZlbmNlOworCQlzdGF0 ZS0+cmluZ1tpXS5pb3ZhID0gZ3B1LT5yYltpXS0+aW92YTsKKwkJc3RhdGUtPnJpbmdbaV0uc2Vx bm8gPSBncHUtPnJiW2ldLT5zZXFubzsKKwkJc3RhdGUtPnJpbmdbaV0ucnB0ciA9IGdldF9ycHRy KGFkcmVub19ncHUsIGdwdS0+cmJbaV0pOworCQlzdGF0ZS0+cmluZ1tpXS53cHRyID0gZ2V0X3dw dHIoZ3B1LT5yYltpXSk7CisJfQorCisJLyogQ291bnQgdGhlIG51bWJlciBvZiByZWdpc3RlcnMg Ki8KKwlmb3IgKGkgPSAwOyBhZHJlbm9fZ3B1LT5yZWdpc3RlcnNbaV0gIT0gfjA7IGkgKz0gMikK KwkJY291bnQgKz0gYWRyZW5vX2dwdS0+cmVnaXN0ZXJzW2kgKyAxXSAtCisJCQlhZHJlbm9fZ3B1 LT5yZWdpc3RlcnNbaV0gKyAxOworCisJc3RhdGUtPnJlZ2lzdGVycyA9IGtjYWxsb2MoY291bnQg KiAyLCBzaXplb2YodTMyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHN0YXRlLT5yZWdpc3RlcnMpIHsK KwkJaW50IHBvcyA9IDA7CisKKwkJZm9yIChpID0gMDsgYWRyZW5vX2dwdS0+cmVnaXN0ZXJzW2ld ICE9IH4wOyBpICs9IDIpIHsKKwkJCXUzMiBzdGFydCA9IGFkcmVub19ncHUtPnJlZ2lzdGVyc1tp XTsKKwkJCXUzMiBlbmQgICA9IGFkcmVub19ncHUtPnJlZ2lzdGVyc1tpICsgMV07CisJCQl1MzIg YWRkcjsKKworCQkJZm9yIChhZGRyID0gc3RhcnQ7IGFkZHIgPD0gZW5kOyBhZGRyKyspIHsKKwkJ CQlzdGF0ZS0+cmVnaXN0ZXJzW3BvcysrXSA9IGFkZHI7CisJCQkJc3RhdGUtPnJlZ2lzdGVyc1tw b3MrK10gPSBncHVfcmVhZChncHUsIGFkZHIpOworCQkJfQorCQl9CisKKwkJc3RhdGUtPm5yX3Jl Z2lzdGVycyA9IGNvdW50OworCX0KKworCXJldHVybiBzdGF0ZTsKK30KKwordm9pZCBhZHJlbm9f Z3B1X3N0YXRlX3B1dChzdHJ1Y3QgbXNtX2dwdV9zdGF0ZSAqc3RhdGUpCit7CisJaWYgKElTX0VS Ul9PUl9OVUxMKHN0YXRlKSkKKwkJcmV0dXJuOworCisJa2ZyZWUoc3RhdGUtPnJlZ2lzdGVycyk7 CisJa2ZyZWUoc3RhdGUpOworfQorCiAjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCiB2b2lkIGFkcmVu b19zaG93KHN0cnVjdCBtc21fZ3B1ICpncHUsIHN0cnVjdCBzZXFfZmlsZSAqbSkKIHsKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2FkcmVub19ncHUuaCBiL2RyaXZlcnMv Z3B1L2RybS9tc20vYWRyZW5vL2FkcmVub19ncHUuaAppbmRleCBiYzllYzI3ZTllZDguLjczNGUz MWE5NjMxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYWRyZW5vX2dw dS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2FkcmVub19ncHUuaApAQCAtMjI5 LDYgKzIyOSw5IEBAIGludCBhZHJlbm9fZ3B1X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwg c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKIHZvaWQgYWRyZW5vX2dwdV9jbGVhbnVwKHN0 cnVjdCBhZHJlbm9fZ3B1ICpncHUpOwogCiAKK3N0cnVjdCBtc21fZ3B1X3N0YXRlICphZHJlbm9f Z3B1X3N0YXRlX2dldChzdHJ1Y3QgbXNtX2dwdSAqZ3B1KTsKK3ZvaWQgYWRyZW5vX2dwdV9zdGF0 ZV9wdXQoc3RydWN0IG1zbV9ncHVfc3RhdGUgKnN0YXRlKTsKKwogLyogcmluZ2J1ZmZlciBoZWxw ZXJzICh0aGUgcGFydHMgdGhhdCBhcmUgYWRyZW5vIHNwZWNpZmljKSAqLwogCiBzdGF0aWMgaW5s aW5lIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dwdS5oIGIvZHJp dmVycy9ncHUvZHJtL21zbS9tc21fZ3B1LmgKaW5kZXggYjgyNDExNzkxNzVhLi5kZTcxY2MwNGVj ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dwdS5oCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9tc20vbXNtX2dwdS5oCkBAIC0yNyw2ICsyNyw3IEBACiAKIHN0cnVjdCBtc21f Z2VtX3N1Ym1pdDsKIHN0cnVjdCBtc21fZ3B1X3BlcmZjbnRyOworc3RydWN0IG1zbV9ncHVfc3Rh dGU7CiAKIHN0cnVjdCBtc21fZ3B1X2NvbmZpZyB7CiAJY29uc3QgY2hhciAqaW9uYW1lOwpAQCAt NjksNiArNzAsOCBAQCBzdHJ1Y3QgbXNtX2dwdV9mdW5jcyB7CiAJaW50ICgqZGVidWdmc19pbml0 KShzdHJ1Y3QgbXNtX2dwdSAqZ3B1LCBzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7CiAjZW5kaWYK IAlpbnQgKCpncHVfYnVzeSkoc3RydWN0IG1zbV9ncHUgKmdwdSwgdWludDY0X3QgKnZhbHVlKTsK KwlzdHJ1Y3QgbXNtX2dwdV9zdGF0ZSAqKCpncHVfc3RhdGVfZ2V0KShzdHJ1Y3QgbXNtX2dwdSAq Z3B1KTsKKwl2b2lkICgqZ3B1X3N0YXRlX3B1dCkoc3RydWN0IG1zbV9ncHVfc3RhdGUgKnN0YXRl KTsKIH07CiAKIHN0cnVjdCBtc21fZ3B1IHsKQEAgLTE3NSw2ICsxNzgsMjMgQEAgc3RydWN0IG1z bV9ncHVfc3VibWl0cXVldWUgewogCXN0cnVjdCBrcmVmIHJlZjsKIH07CiAKK3N0cnVjdCBtc21f Z3B1X3N0YXRlIHsKKwlzdHJ1Y3QgdGltZXZhbCB0aW1lOworCisJc3RydWN0IHsKKwkJdTY0IGlv dmE7CisJCXUzMiBmZW5jZTsKKwkJdTMyIHNlcW5vOworCQl1MzIgcnB0cjsKKwkJdTMyIHdwdHI7 CisJfSByaW5nW01TTV9HUFVfTUFYX1JJTkdTXTsKKworCWludCBucl9yZWdpc3RlcnM7CisJdTMy ICpyZWdpc3RlcnM7CisKKwl1MzIgcmJibV9zdGF0dXM7Cit9OworCiBzdGF0aWMgaW5saW5lIHZv aWQgZ3B1X3dyaXRlKHN0cnVjdCBtc21fZ3B1ICpncHUsIHUzMiByZWcsIHUzMiBkYXRhKQogewog CW1zbV93cml0ZWwoZGF0YSwgZ3B1LT5tbWlvICsgKHJlZyA8PCAyKSk7Ci0tIAoyLjE4LjAKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkZyZWVkcmVubyBt YWlsaW5nIGxpc3QKRnJlZWRyZW5vQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZyZWVkcmVubwo=