From mboxrd@z Thu Jan 1 00:00:00 1970 From: Evan Quan Subject: [PATCH 3/4] drm/amd/powerplay: support retrieving and adjusting fclock power levels Date: Mon, 14 Jan 2019 18:01:41 +0800 Message-ID: <20190114100142.16922-3-evan.quan@amd.com> References: <20190114100142.16922-1-evan.quan@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190114100142.16922-1-evan.quan-5C7GfCeVMHo@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: Alexander.Deucher-5C7GfCeVMHo@public.gmane.org, Evan Quan VXNlciBjYW4gdXNlICJwcF9kcG1fZmNsayIgdG8gcmV0cmlldmUgYW5kIGFkanVzdCBmY2xvY2sg cG93ZXIKbGV2ZWxzLgoKQ2hhbmdlLUlkOiBJYjUzMjVhOTUzM2I1ZmU4YzEyNTczOGEyZjI2ZTdi OTc2ZDNlYzk5MQpTaWduZWQtb2ZmLWJ5OiBFdmFuIFF1YW4gPGV2YW4ucXVhbkBhbWQuY29tPgot LS0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9wbS5jICAgICAgICB8IDQ5ICsr KysrKysrKysrKystCiAuLi4vZ3B1L2RybS9hbWQvaW5jbHVkZS9rZ2RfcHBfaW50ZXJmYWNlLmgg ICAgfCAgMSArCiAuLi4vZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvdmVnYTIwX2h3bWdyLmMgICAg fCA2NCArKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDExMiBpbnNlcnRpb25z KCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3BtLmMK aW5kZXggZjczNTExOGE2MDcwLi5mNjY0NmE1MjJjMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9wbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9wbS5jCkBAIC03MzEsMTEgKzczMSwxMSBAQCBzdGF0aWMgc3NpemVfdCBhbWRn cHVfZ2V0X3BwZmVhdHVyZV9zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2LAogfQogCiAvKioKLSAq IERPQzogcHBfZHBtX3NjbGsgcHBfZHBtX21jbGsgcHBfZHBtX3NvY2NsayBwcF9kcG1fcGNpZQor ICogRE9DOiBwcF9kcG1fc2NsayBwcF9kcG1fbWNsayBwcF9kcG1fc29jY2xrIHBwX2RwbV9mY2xr IHBwX2RwbV9wY2llCiAgKgogICogVGhlIGFtZGdwdSBkcml2ZXIgcHJvdmlkZXMgYSBzeXNmcyBB UEkgZm9yIGFkanVzdGluZyB3aGF0IHBvd2VyIGxldmVscwogICogYXJlIGVuYWJsZWQgZm9yIGEg Z2l2ZW4gcG93ZXIgc3RhdGUuICBUaGUgZmlsZXMgcHBfZHBtX3NjbGssIHBwX2RwbV9tY2xrLAot ICogcHBfZHBtX3NvY2NsayBhbmQgcHBfZHBtX3BjaWUgYXJlIHVzZWQgZm9yIHRoaXMuCisgKiBw cF9kcG1fc29jY2xrLCBwcF9kcG1fZmNsayBhbmQgcHBfZHBtX3BjaWUgYXJlIHVzZWQgZm9yIHRo aXMuCiAgKgogICogUmVhZGluZyBiYWNrIHRoZSBmaWxlcyB3aWxsIHNob3cgeW91IHRoZSBhdmFp bGFibGUgcG93ZXIgbGV2ZWxzIHdpdGhpbgogICogdGhlIHBvd2VyIHN0YXRlIGFuZCB0aGUgY2xv Y2sgaW5mb3JtYXRpb24gZm9yIHRob3NlIGxldmVscy4KQEAgLTg5MSw2ICs4OTEsNDIgQEAgc3Rh dGljIHNzaXplX3QgYW1kZ3B1X3NldF9wcF9kcG1fc29jY2xrKHN0cnVjdCBkZXZpY2UgKmRldiwK IAlyZXR1cm4gY291bnQ7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IGFtZGdwdV9nZXRfcHBfZHBtX2Zj bGsoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwK KwkJY2hhciAqYnVmKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gZGV2X2dldF9kcnZk YXRhKGRldik7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBkZGV2LT5kZXZfcHJpdmF0 ZTsKKworCWlmIChhZGV2LT5wb3dlcnBsYXkucHBfZnVuY3MtPnByaW50X2Nsb2NrX2xldmVscykK KwkJcmV0dXJuIGFtZGdwdV9kcG1fcHJpbnRfY2xvY2tfbGV2ZWxzKGFkZXYsIFBQX0ZDTEssIGJ1 Zik7CisJZWxzZQorCQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJcbiIpOworfQor CitzdGF0aWMgc3NpemVfdCBhbWRncHVfc2V0X3BwX2RwbV9mY2xrKHN0cnVjdCBkZXZpY2UgKmRl diwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNvbnN0IGNoYXIgKmJ1ZiwK KwkJc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gZGV2X2dldF9k cnZkYXRhKGRldik7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBkZGV2LT5kZXZfcHJp dmF0ZTsKKwlpbnQgcmV0OworCXVpbnQzMl90IG1hc2sgPSAwOworCisJcmV0ID0gYW1kZ3B1X3Jl YWRfbWFzayhidWYsIGNvdW50LCAmbWFzayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwor CWlmIChhZGV2LT5wb3dlcnBsYXkucHBfZnVuY3MtPmZvcmNlX2Nsb2NrX2xldmVsKQorCQlyZXQg PSBhbWRncHVfZHBtX2ZvcmNlX2Nsb2NrX2xldmVsKGFkZXYsIFBQX0ZDTEssIG1hc2spOworCisJ aWYgKHJldCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKIHN0YXRp YyBzc2l6ZV90IGFtZGdwdV9nZXRfcHBfZHBtX3BjaWUoc3RydWN0IGRldmljZSAqZGV2LAogCQlz dHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJY2hhciAqYnVmKQpAQCAtMTE3Nyw2ICsx MjEzLDkgQEAgc3RhdGljIERFVklDRV9BVFRSKHBwX2RwbV9tY2xrLCBTX0lSVUdPIHwgU19JV1VT UiwKIHN0YXRpYyBERVZJQ0VfQVRUUihwcF9kcG1fc29jY2xrLCBTX0lSVUdPIHwgU19JV1VTUiwK IAkJYW1kZ3B1X2dldF9wcF9kcG1fc29jY2xrLAogCQlhbWRncHVfc2V0X3BwX2RwbV9zb2NjbGsp Oworc3RhdGljIERFVklDRV9BVFRSKHBwX2RwbV9mY2xrLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJ YW1kZ3B1X2dldF9wcF9kcG1fZmNsaywKKwkJYW1kZ3B1X3NldF9wcF9kcG1fZmNsayk7CiBzdGF0 aWMgREVWSUNFX0FUVFIocHBfZHBtX3BjaWUsIFNfSVJVR08gfCBTX0lXVVNSLAogCQlhbWRncHVf Z2V0X3BwX2RwbV9wY2llLAogCQlhbWRncHVfc2V0X3BwX2RwbV9wY2llKTsKQEAgLTIzNDMsNiAr MjM4MiwxMSBAQCBpbnQgYW1kZ3B1X3BtX3N5c2ZzX2luaXQoc3RydWN0IGFtZGdwdV9kZXZpY2Ug KmFkZXYpCiAJCURSTV9FUlJPUigiZmFpbGVkIHRvIGNyZWF0ZSBkZXZpY2UgZmlsZSBwcF9kcG1f c29jY2xrXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CisJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxl KGFkZXYtPmRldiwgJmRldl9hdHRyX3BwX2RwbV9mY2xrKTsKKwlpZiAocmV0KSB7CisJCURSTV9F UlJPUigiZmFpbGVkIHRvIGNyZWF0ZSBkZXZpY2UgZmlsZSBwcF9kcG1fZmNsa1xuIik7CisJCXJl dHVybiByZXQ7CisJfQogCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZShhZGV2LT5kZXYsICZkZXZf YXR0cl9wcF9kcG1fcGNpZSk7CiAJaWYgKHJldCkgewogCQlEUk1fRVJST1IoImZhaWxlZCB0byBj cmVhdGUgZGV2aWNlIGZpbGUgcHBfZHBtX3BjaWVcbiIpOwpAQCAtMjQyOSw2ICsyNDczLDcgQEAg dm9pZCBhbWRncHVfcG1fc3lzZnNfZmluaShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKIAlk ZXZpY2VfcmVtb3ZlX2ZpbGUoYWRldi0+ZGV2LCAmZGV2X2F0dHJfcHBfZHBtX21jbGspOwogCWRl dmljZV9yZW1vdmVfZmlsZShhZGV2LT5kZXYsICZkZXZfYXR0cl9wcF9kcG1fc29jY2xrKTsKIAlk ZXZpY2VfcmVtb3ZlX2ZpbGUoYWRldi0+ZGV2LCAmZGV2X2F0dHJfcHBfZHBtX3BjaWUpOworCWRl dmljZV9yZW1vdmVfZmlsZShhZGV2LT5kZXYsICZkZXZfYXR0cl9wcF9kcG1fZmNsayk7CiAJZGV2 aWNlX3JlbW92ZV9maWxlKGFkZXYtPmRldiwgJmRldl9hdHRyX3BwX3NjbGtfb2QpOwogCWRldmlj ZV9yZW1vdmVfZmlsZShhZGV2LT5kZXYsICZkZXZfYXR0cl9wcF9tY2xrX29kKTsKIAlkZXZpY2Vf cmVtb3ZlX2ZpbGUoYWRldi0+ZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9p bmNsdWRlL2tnZF9wcF9pbnRlcmZhY2UuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9r Z2RfcHBfaW50ZXJmYWNlLmgKaW5kZXggZjVlYzI1YTZhYjU0Li5mODJkZTE0ZjY1NjAgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9rZ2RfcHBfaW50ZXJmYWNlLmgKKysr IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2tnZF9wcF9pbnRlcmZhY2UuaApAQCAtOTMs NiArOTMsNyBAQCBlbnVtIHBwX2Nsb2NrX3R5cGUgewogCVBQX01DTEssCiAJUFBfUENJRSwKIAlQ UF9TT0NDTEssCisJUFBfRkNMSywKIAlPRF9TQ0xLLAogCU9EX01DTEssCiAJT0RfVkREQ19DVVJW RSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL3ZlZ2Ey MF9od21nci5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvdmVnYTIwX2h3 bWdyLmMKaW5kZXggNjE1ODNkNmZjMjBlLi4xODMyZGNiOTY1YjEgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL3ZlZ2EyMF9od21nci5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL3ZlZ2EyMF9od21nci5jCkBAIC0xNzM1LDYg KzE3MzUsMTcgQEAgc3RhdGljIGludCB2ZWdhMjBfdXBsb2FkX2RwbV9taW5fbGV2ZWwoc3RydWN0 IHBwX2h3bWdyICpod21nciwgdWludDMyX3QgZmVhdHVyZV8KIAkJCQkJcmV0dXJuIHJldCk7CiAJ fQogCisJaWYgKGRhdGEtPnNtdV9mZWF0dXJlc1tHTkxEX0RQTV9GQ0xLXS5lbmFibGVkICYmCisJ ICAgKGZlYXR1cmVfbWFzayAmIEZFQVRVUkVfRFBNX0ZDTEtfTUFTSykpIHsKKwkJbWluX2ZyZXEg PSBkYXRhLT5kcG1fdGFibGUuZmNsa190YWJsZS5kcG1fc3RhdGUuc29mdF9taW5fbGV2ZWw7CisK KwkJUFBfQVNTRVJUX1dJVEhfQ09ERSghKHJldCA9IHNtdW1fc2VuZF9tc2dfdG9fc21jX3dpdGhf cGFyYW1ldGVyKAorCQkJCQlod21nciwgUFBTTUNfTVNHX1NldFNvZnRNaW5CeUZyZXEsCisJCQkJ CShQUENMS19GQ0xLIDw8IDE2KSB8IChtaW5fZnJlcSAmIDB4ZmZmZikpKSwKKwkJCQkJIkZhaWxl ZCB0byBzZXQgc29mdCBtaW4gZmNsayEiLAorCQkJCQlyZXR1cm4gcmV0KTsKKwl9CisKIAlyZXR1 cm4gcmV0OwogfQogCkBAIC0xODA3LDYgKzE4MTgsMTcgQEAgc3RhdGljIGludCB2ZWdhMjBfdXBs b2FkX2RwbV9tYXhfbGV2ZWwoc3RydWN0IHBwX2h3bWdyICpod21nciwgdWludDMyX3QgZmVhdHVy ZV8KIAkJCQkJcmV0dXJuIHJldCk7CiAJfQogCisJaWYgKGRhdGEtPnNtdV9mZWF0dXJlc1tHTkxE X0RQTV9GQ0xLXS5lbmFibGVkICYmCisJICAgKGZlYXR1cmVfbWFzayAmIEZFQVRVUkVfRFBNX0ZD TEtfTUFTSykpIHsKKwkJbWF4X2ZyZXEgPSBkYXRhLT5kcG1fdGFibGUuZmNsa190YWJsZS5kcG1f c3RhdGUuc29mdF9tYXhfbGV2ZWw7CisKKwkJUFBfQVNTRVJUX1dJVEhfQ09ERSghKHJldCA9IHNt dW1fc2VuZF9tc2dfdG9fc21jX3dpdGhfcGFyYW1ldGVyKAorCQkJCQlod21nciwgUFBTTUNfTVNH X1NldFNvZnRNYXhCeUZyZXEsCisJCQkJCShQUENMS19GQ0xLIDw8IDE2KSB8IChtYXhfZnJlcSAm IDB4ZmZmZikpKSwKKwkJCQkJIkZhaWxlZCB0byBzZXQgc29mdCBtYXggZmNsayEiLAorCQkJCQly ZXR1cm4gcmV0KTsKKwl9CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMzIzLDYgKzIzNDUsMzQg QEAgc3RhdGljIGludCB2ZWdhMjBfZm9yY2VfY2xvY2tfbGV2ZWwoc3RydWN0IHBwX2h3bWdyICpo d21nciwKIAogCQlicmVhazsKIAorCWNhc2UgUFBfRkNMSzoKKwkJc29mdF9taW5fbGV2ZWwgPSBt YXNrID8gKGZmcyhtYXNrKSAtIDEpIDogMDsKKwkJc29mdF9tYXhfbGV2ZWwgPSBtYXNrID8gKGZs cyhtYXNrKSAtIDEpIDogMDsKKworCQlpZiAoc29mdF9tYXhfbGV2ZWwgPj0gZGF0YS0+ZHBtX3Rh YmxlLmZjbGtfdGFibGUuY291bnQpIHsKKwkJCXByX2VycigiQ2xvY2sgbGV2ZWwgc3BlY2lmaWVk ICVkIGlzIG92ZXIgbWF4IGFsbG93ZWQgJWRcbiIsCisJCQkJCXNvZnRfbWF4X2xldmVsLAorCQkJ CQlkYXRhLT5kcG1fdGFibGUuZmNsa190YWJsZS5jb3VudCAtIDEpOworCQkJcmV0dXJuIC1FSU5W QUw7CisJCX0KKworCQlkYXRhLT5kcG1fdGFibGUuZmNsa190YWJsZS5kcG1fc3RhdGUuc29mdF9t aW5fbGV2ZWwgPQorCQkJZGF0YS0+ZHBtX3RhYmxlLmZjbGtfdGFibGUuZHBtX2xldmVsc1tzb2Z0 X21pbl9sZXZlbF0udmFsdWU7CisJCWRhdGEtPmRwbV90YWJsZS5mY2xrX3RhYmxlLmRwbV9zdGF0 ZS5zb2Z0X21heF9sZXZlbCA9CisJCQlkYXRhLT5kcG1fdGFibGUuZmNsa190YWJsZS5kcG1fbGV2 ZWxzW3NvZnRfbWF4X2xldmVsXS52YWx1ZTsKKworCQlyZXQgPSB2ZWdhMjBfdXBsb2FkX2RwbV9t aW5fbGV2ZWwoaHdtZ3IsIEZFQVRVUkVfRFBNX0ZDTEtfTUFTSyk7CisJCVBQX0FTU0VSVF9XSVRI X0NPREUoIXJldCwKKwkJCSJGYWlsZWQgdG8gdXBsb2FkIGJvb3QgbGV2ZWwgdG8gbG93ZXN0ISIs CisJCQlyZXR1cm4gcmV0KTsKKworCQlyZXQgPSB2ZWdhMjBfdXBsb2FkX2RwbV9tYXhfbGV2ZWwo aHdtZ3IsIEZFQVRVUkVfRFBNX0ZDTEtfTUFTSyk7CisJCVBQX0FTU0VSVF9XSVRIX0NPREUoIXJl dCwKKwkJCSJGYWlsZWQgdG8gdXBsb2FkIGRwbSBtYXggbGV2ZWwgdG8gaGlnaGVzdCEiLAorCQkJ cmV0dXJuIHJldCk7CisKKwkJYnJlYWs7CisKIAljYXNlIFBQX1BDSUU6CiAJCXNvZnRfbWluX2xl dmVsID0gbWFzayA/IChmZnMobWFzaykgLSAxKSA6IDA7CiAJCXNvZnRfbWF4X2xldmVsID0gbWFz ayA/IChmbHMobWFzaykgLSAxKSA6IDA7CkBAIC0yOTE5LDYgKzI5NjksOCBAQCBzdGF0aWMgaW50 IHZlZ2EyMF9wcmludF9jbG9ja19sZXZlbHMoc3RydWN0IHBwX2h3bWdyICpod21nciwKIAlQUFRh YmxlX3QgKnBwdGFibGUgPSAoUFBUYWJsZV90ICopcHB0YWJsZV9pbmZvcm1hdGlvbi0+c21jX3Bw dGFibGU7CiAJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBod21nci0+YWRldjsKIAlzdHJ1 Y3QgcHBfY2xvY2tfbGV2ZWxzX3dpdGhfbGF0ZW5jeSBjbG9ja3M7CisJc3RydWN0IHZlZ2EyMF9z aW5nbGVfZHBtX3RhYmxlICpmY2xrX2RwbV90YWJsZSA9CisJCQkmKGRhdGEtPmRwbV90YWJsZS5m Y2xrX3RhYmxlKTsKIAlpbnQgaSwgbm93LCBzaXplID0gMDsKIAlpbnQgcmV0ID0gMDsKIAl1aW50 MzJfdCBnZW5fc3BlZWQsIGxhbmVfd2lkdGg7CkBAIC0yOTc1LDYgKzMwMjcsMTggQEAgc3RhdGlj IGludCB2ZWdhMjBfcHJpbnRfY2xvY2tfbGV2ZWxzKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsCiAJ CQkJKGNsb2Nrcy5kYXRhW2ldLmNsb2Nrc19pbl9raHogPT0gbm93ICogMTApID8gIioiIDogIiIp OwogCQlicmVhazsKIAorCWNhc2UgUFBfRkNMSzoKKwkJcmV0ID0gdmVnYTIwX2dldF9jdXJyZW50 X2Nsa19mcmVxKGh3bWdyLCBQUENMS19GQ0xLLCAmbm93KTsKKwkJUFBfQVNTRVJUX1dJVEhfQ09E RSghcmV0LAorCQkJCSJBdHRlbXB0IHRvIGdldCBjdXJyZW50IGZjbGsgZnJlcSBGYWlsZWQhIiwK KwkJCQlyZXR1cm4gcmV0KTsKKworCQlmb3IgKGkgPSAwOyBpIDwgZmNsa19kcG1fdGFibGUtPmNv dW50OyBpKyspCisJCQlzaXplICs9IHNwcmludGYoYnVmICsgc2l6ZSwgIiVkOiAldU1oeiAlc1xu IiwKKwkJCQlpLCBmY2xrX2RwbV90YWJsZS0+ZHBtX2xldmVsc1tpXS52YWx1ZSwKKwkJCQlmY2xr X2RwbV90YWJsZS0+ZHBtX2xldmVsc1tpXS52YWx1ZSA9PSAobm93IC8gMTAwKSA/ICIqIiA6ICIi KTsKKwkJYnJlYWs7CisKIAljYXNlIFBQX1BDSUU6CiAJCWdlbl9zcGVlZCA9IChSUkVHMzJfUENJ RShzbW5QQ0lFX0xDX1NQRUVEX0NOVEwpICYKIAkJCSAgICAgUFNXVVNQMF9QQ0lFX0xDX1NQRUVE X0NOVExfX0xDX0NVUlJFTlRfREFUQV9SQVRFX01BU0spCi0tIAoyLjIwLjEKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmFtZC1nZnggbWFpbGluZyBsaXN0 CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeAo=