From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [PATCH i-g-t v2 6/9] intel-gpu-overlay: Use RAPL PMU for power reading Date: Tue, 10 Oct 2017 12:30:42 +0100 Message-ID: <20171010113042.23935-1-tvrtko.ursulin@linux.intel.com> References: <20171010093008.22804-7-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x243.google.com (mail-wm0-x243.google.com [IPv6:2a00:1450:400c:c09::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7B40F6E413 for ; Tue, 10 Oct 2017 11:30:51 +0000 (UTC) Received: by mail-wm0-x243.google.com with SMTP id b189so4166635wmd.4 for ; Tue, 10 Oct 2017 04:30:51 -0700 (PDT) In-Reply-To: <20171010093008.22804-7-tvrtko.ursulin@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KCldpcmUgdXAg dG8gdGhlIFJBUEwgUE1VIGZvciBHUFUgZW5lcmd5IHJlYWRpbmdzLgoKVGhlIG9ubHkgY29tcGxp Y2F0aW9uIGlzIHRoYXQgd2UgaGF2ZSB0byBhZGQgY29kZSB0byBwYXJzZToKCiAjIGNhdCAvc3lz L2RldmljZXMvcG93ZXIvZXZlbnRzL2VuZXJneS1ncHUuc2NhbGUKIDIuMzI4MzA2NDM2NTM4Njk2 Mjg5MDYyNWUtMTAKCnYyOiBMaW5rIHdpdGggLWxtLgoKU2lnbmVkLW9mZi1ieTogVHZydGtvIFVy c3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KLS0tCiBsaWIvaWd0X3BlcmYuYyAgICAg IHwgIDE2ICsrKystLQogbGliL2lndF9wZXJmLmggICAgICB8ICAgMSArCiBvdmVybGF5L01ha2Vm aWxlLmFtIHwgICAyICstCiBvdmVybGF5L3Bvd2VyLmMgICAgIHwgMTU2ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0KIG92ZXJsYXkvcG93ZXIuaCAg ICAgfCAgIDIgKwogNSBmaWxlcyBjaGFuZ2VkLCAxMzQgaW5zZXJ0aW9ucygrKSwgNDMgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvbGliL2lndF9wZXJmLmMgYi9saWIvaWd0X3BlcmYuYwppbmRl eCAyMDg0NzQzMDJmY2MuLjAyMjE0NjFlOTE4ZiAxMDA2NDQKLS0tIGEvbGliL2lndF9wZXJmLmMK KysrIGIvbGliL2lndF9wZXJmLmMKQEAgLTI3LDExICsyNywxMiBAQCB1aW50NjRfdCBpOTE1X3R5 cGVfaWQodm9pZCkKIAlyZXR1cm4gc3RydG91bGwoYnVmLCBOVUxMLCAwKTsKIH0KIAotc3RhdGlj IGludCBfcGVyZl9vcGVuKHVpbnQ2NF90IGNvbmZpZywgaW50IGdyb3VwLCB1aW50NjRfdCBmb3Jt YXQpCitzdGF0aWMgaW50CitfcGVyZl9vcGVuKHVpbnQ2NF90IHR5cGUsIHVpbnQ2NF90IGNvbmZp ZywgaW50IGdyb3VwLCB1aW50NjRfdCBmb3JtYXQpCiB7CiAJc3RydWN0IHBlcmZfZXZlbnRfYXR0 ciBhdHRyID0geyB9OwogCi0JYXR0ci50eXBlID0gaTkxNV90eXBlX2lkKCk7CisJYXR0ci50eXBl ID0gdHlwZTsKIAlpZiAoYXR0ci50eXBlID09IDApCiAJCXJldHVybiAtRU5PRU5UOwogCkBAIC00 NiwxMSArNDcsMTggQEAgc3RhdGljIGludCBfcGVyZl9vcGVuKHVpbnQ2NF90IGNvbmZpZywgaW50 IGdyb3VwLCB1aW50NjRfdCBmb3JtYXQpCiAKIGludCBwZXJmX2k5MTVfb3Blbih1aW50NjRfdCBj b25maWcpCiB7Ci0JcmV0dXJuIF9wZXJmX29wZW4oY29uZmlnLCAtMSwgUEVSRl9GT1JNQVRfVE9U QUxfVElNRV9FTkFCTEVEKTsKKwlyZXR1cm4gX3BlcmZfb3BlbihpOTE1X3R5cGVfaWQoKSwgY29u ZmlnLCAtMSwKKwkJCSAgUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9FTkFCTEVEKTsKIH0KIAogaW50 IHBlcmZfaTkxNV9vcGVuX2dyb3VwKHVpbnQ2NF90IGNvbmZpZywgaW50IGdyb3VwKQogewotCXJl dHVybiBfcGVyZl9vcGVuKGNvbmZpZywgZ3JvdXAsCisJcmV0dXJuIF9wZXJmX29wZW4oaTkxNV90 eXBlX2lkKCksIGNvbmZpZywgZ3JvdXAsCiAJCQkgIFBFUkZfRk9STUFUX1RPVEFMX1RJTUVfRU5B QkxFRCB8IFBFUkZfRk9STUFUX0dST1VQKTsKIH0KKworaW50IGlndF9wZXJmX29wZW4odWludDY0 X3QgdHlwZSwgdWludDY0X3QgY29uZmlnKQoreworCXJldHVybiBfcGVyZl9vcGVuKHR5cGUsIGNv bmZpZywgLTEsCisJCQkgIFBFUkZfRk9STUFUX1RPVEFMX1RJTUVfRU5BQkxFRCk7Cit9CmRpZmYg LS1naXQgYS9saWIvaWd0X3BlcmYuaCBiL2xpYi9pZ3RfcGVyZi5oCmluZGV4IDI4NTgyMzc4NjMy NC4uYjFmNTI1NzM5YzY5IDEwMDY0NAotLS0gYS9saWIvaWd0X3BlcmYuaAorKysgYi9saWIvaWd0 X3BlcmYuaApAQCAtOTksNSArOTksNiBAQCBwZXJmX2V2ZW50X29wZW4oc3RydWN0IHBlcmZfZXZl bnRfYXR0ciAqYXR0ciwKIHVpbnQ2NF90IGk5MTVfdHlwZV9pZCh2b2lkKTsKIGludCBwZXJmX2k5 MTVfb3Blbih1aW50NjRfdCBjb25maWcpOwogaW50IHBlcmZfaTkxNV9vcGVuX2dyb3VwKHVpbnQ2 NF90IGNvbmZpZywgaW50IGdyb3VwKTsKK2ludCBpZ3RfcGVyZl9vcGVuKHVpbnQ2NF90IHR5cGUs IHVpbnQ2NF90IGNvbmZpZyk7CiAKICNlbmRpZiAvKiBJOTE1X1BFUkZfSCAqLwpkaWZmIC0tZ2l0 IGEvb3ZlcmxheS9NYWtlZmlsZS5hbSBiL292ZXJsYXkvTWFrZWZpbGUuYW0KaW5kZXggY2VmZGUy ZDA0MGY4Li5mNDlmNTRhYzM1OTAgMTAwNjQ0Ci0tLSBhL292ZXJsYXkvTWFrZWZpbGUuYW0KKysr IGIvb3ZlcmxheS9NYWtlZmlsZS5hbQpAQCAtNjMsNyArNjMsNyBAQCBpbnRlbF9ncHVfb3Zlcmxh eV9TT1VSQ0VTICs9IFwKIAogaW50ZWxfZ3B1X292ZXJsYXlfU09VUkNFUyArPSAkKGJvdGhfeDEx X3NvdXJjZXMpCiAKLWludGVsX2dwdV9vdmVybGF5X0xEQUREID0gJChMREFERCkgLWxydAoraW50 ZWxfZ3B1X292ZXJsYXlfTERBREQgPSAkKExEQUREKSAtbHJ0IC1sbQogCiBFWFRSQV9ESVNUPSBc CiAJUkVBRE1FIFwKZGlmZiAtLWdpdCBhL292ZXJsYXkvcG93ZXIuYyBiL292ZXJsYXkvcG93ZXIu YwppbmRleCA4MDVmNGNhNzgwNWMuLjM1ZTQ0NmU2YmNlNSAxMDA2NDQKLS0tIGEvb3ZlcmxheS9w b3dlci5jCisrKyBiL292ZXJsYXkvcG93ZXIuYwpAQCAtMzAsNjAgKzMwLDEzOCBAQAogI2luY2x1 ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8dGltZS5oPgogI2luY2x1ZGUgPGVycm5vLmg+CisjaW5j bHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CiAKICNpbmNsdWRlICJpZ3RfcGVyZi5o IgogCiAjaW5jbHVkZSAicG93ZXIuaCIKICNpbmNsdWRlICJkZWJ1Z2ZzLmgiCiAKLS8qIFhYWCBJ cyB0aGlzIGV4cG9zZWQgdGhyb3VnaCBSQVBMPyAqLworc3RhdGljIHVpbnQ2NF90IGZpbGVuYW1l X3RvX3U2NChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGJhc2UpCit7CisJY2hhciBidWZbNjRd LCAqYjsKKwlzc2l6ZV90IHJldDsKKwlpbnQgZmQ7CiAKLWludCBwb3dlcl9pbml0KHN0cnVjdCBw b3dlciAqcG93ZXIpCisJZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSk7CisJaWYgKGZkIDwg MCkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSByZWFkKGZkLCBidWYsIHNpemVvZihidWYpIC0gMSk7 CisJY2xvc2UoZmQpOworCWlmIChyZXQgPCAxKQorCQlyZXR1cm4gMDsKKworCWJ1ZltyZXRdID0g J1wwJzsKKworCWIgPSBidWY7CisJd2hpbGUgKCpiICYmICFpc2RpZ2l0KCpiKSkKKwkJYisrOwor CisJcmV0dXJuIHN0cnRvdWxsKGIsIE5VTEwsIGJhc2UpOworfQorCitzdGF0aWMgdWludDY0X3Qg ZGVidWdmc19maWxlX3RvX3U2NChjb25zdCBjaGFyICpuYW1lKQogewotCWNoYXIgYnVmWzQwOTZd OwotCWludCBmZCwgbGVuOworCWNoYXIgYnVmWzEwMjRdOwogCi0JbWVtc2V0KHBvd2VyLCAwLCBz aXplb2YoKnBvd2VyKSk7CisJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzLyVzIiwgZGVi dWdmc19kcmlfcGF0aCwgbmFtZSk7CisKKwlyZXR1cm4gZmlsZW5hbWVfdG9fdTY0KGJ1ZiwgMCk7 Cit9CiAKLQlwb3dlci0+ZmQgPSAtMTsKK3N0YXRpYyB1aW50NjRfdCByYXBsX3R5cGVfaWQodm9p ZCkKK3sKKwlyZXR1cm4gZmlsZW5hbWVfdG9fdTY0KCIvc3lzL2RldmljZXMvcG93ZXIvdHlwZSIs IDEwKTsKK30KIAotCXNwcmludGYoYnVmLCAiJXMvaTkxNV9lbmVyZ3lfdUoiLCBkZWJ1Z2ZzX2Ry aV9wYXRoKTsKLQlmZCA9IG9wZW4oYnVmLCAwKTsKK3N0YXRpYyB1aW50NjRfdCByYXBsX2dwdV9w b3dlcih2b2lkKQoreworCXJldHVybiBmaWxlbmFtZV90b191NjQoIi9zeXMvZGV2aWNlcy9wb3dl ci9ldmVudHMvZW5lcmd5LWdwdSIsIDApOworfQorCitzdGF0aWMgZG91YmxlIGZpbGVuYW1lX3Rv X2RvdWJsZShjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwljaGFyICpkb3QgPSBOVUxMLCAqZSA9 IE5VTEw7CisJdW5zaWduZWQgbG9uZyBsb25nIGludCBkZWNpbWFsOworCWNoYXIgYnVmWzY0XSwg KmI7CisJbG9uZyBpbnQgdmFsOworCWxvbmcgaW50IGV4cG9uZW50OworCWRvdWJsZSByZXN1bHQ7 CisJc3NpemVfdCByZXQ7CisJaW50IGZkOworCisJZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05M WSk7CiAJaWYgKGZkIDwgMCkKLQkJcmV0dXJuIHBvd2VyLT5lcnJvciA9IGVycm5vOworCQlyZXR1 cm4gTkFOOwogCi0JbGVuID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSk7CisJcmV0ID0gcmVh ZChmZCwgYnVmLCBzaXplb2YoYnVmKSAtIDEpOwogCWNsb3NlKGZkKTsKKwlpZiAocmV0IDwgMSkK KwkJcmV0dXJuIE5BTjsKKworCWJ1ZltyZXRdID0gJ1wwJzsKKworCWIgPSBidWY7CisJd2hpbGUg KCpiKSB7CisJCWlmICgqYiA9PSAnLicpCisJCQlkb3QgPSBiOworCQllbHNlIGlmICgqYiA9PSAn ZScpCisJCQllID0gYjsKKwkJYisrOworCX0KIAotCWlmIChsZW4gPCAwKQotCQlyZXR1cm4gcG93 ZXItPmVycm9yID0gZXJybm87CisJaWYgKCFkb3QgfHwgIWUpCisJCXJldHVybiBOQU47CiAKLQli dWZbbGVuXSA9ICdcMCc7Ci0JaWYgKHN0cnRvdWxsKGJ1ZiwgMCwgMCkgPT0gMCkKLQkJcmV0dXJu IHBvd2VyLT5lcnJvciA9IEVJTlZBTDsKKwkqZG90ID0gJ1wwJzsKKwkqZSA9ICdcMCc7CiAKLQly ZXR1cm4gMDsKKwkvKiBSZWR1Y2UgcHJlY2lzaW9uIHRvIGZpdCBpbiBsb25nIGludC4gKi8KKwlp ZiAoKGUgLSBkb3QpID4gMTgpCisJCWRvdFsxOF0gPSAnXDAnOworCisJdmFsID0gc3RydG9sbChi dWYsIE5VTEwsIDEwKTsKKwlkZWNpbWFsID0gc3RydG91bGwoKytkb3QsIE5VTEwsIDEwKTsKKwll eHBvbmVudCA9IHN0cnRvbGwoKytlLCBOVUxMLCAxMCk7CisKKwlyZXN1bHQgPSAoZG91YmxlKWRl Y2ltYWw7CisJcmVzdWx0IC89IHJvdW5kKHBvdygxMCwgc3RybGVuKGRvdCkpKTsKKwlyZXN1bHQg Kz0gdmFsOworCXJlc3VsdCAqPSBwb3coMTAsIGV4cG9uZW50KTsKKworCXJldHVybiByZXN1bHQ7 CiB9CiAKLXN0YXRpYyB1aW50NjRfdCBmaWxlX3RvX3U2NChjb25zdCBjaGFyICpuYW1lKQorc3Rh dGljIGRvdWJsZSByYXBsX2dwdV9wb3dlcl9zY2FsZSh2b2lkKQogewotCWNoYXIgYnVmWzQwOTZd OwotCWludCBmZCwgbGVuOworCXJldHVybiBmaWxlbmFtZV90b19kb3VibGUoIi9zeXMvZGV2aWNl cy9wb3dlci9ldmVudHMvZW5lcmd5LWdwdS5zY2FsZSIpOworfQogCi0Jc3ByaW50ZihidWYsICIl cy8lcyIsIGRlYnVnZnNfZHJpX3BhdGgsIG5hbWUpOwotCWZkID0gb3BlbihidWYsIDApOwotCWlm IChmZCA8IDApCi0JCXJldHVybiAwOworaW50IHBvd2VyX2luaXQoc3RydWN0IHBvd2VyICpwb3dl cikKK3sKKwl1aW50NjRfdCB2YWw7CiAKLQlsZW4gPSByZWFkKGZkLCBidWYsIHNpemVvZihidWYp LTEpOwotCWNsb3NlKGZkKTsKKwltZW1zZXQocG93ZXIsIDAsIHNpemVvZigqcG93ZXIpKTsKIAot CWlmIChsZW4gPCAwKQotCQlyZXR1cm4gMDsKKwlwb3dlci0+ZmQgPSBpZ3RfcGVyZl9vcGVuKHJh cGxfdHlwZV9pZCgpLCByYXBsX2dwdV9wb3dlcigpKTsKKwlpZiAocG93ZXItPmZkID49IDApIHsK KwkJcG93ZXItPnJhcGxfc2NhbGUgPSByYXBsX2dwdV9wb3dlcl9zY2FsZSgpOworCisJCWlmIChw b3dlci0+cmFwbF9zY2FsZSAhPSBOQU4pIHsKKwkJCXBvd2VyLT5yYXBsX3NjYWxlICo9IDFlMzsg LyogZnJvbSBuYW5vIHRvIG1pY3JvICovCisJCQlyZXR1cm4gMDsKKwkJfQorCX0KIAotCWJ1Zlts ZW5dID0gJ1wwJzsKKwl2YWwgPSBkZWJ1Z2ZzX2ZpbGVfdG9fdTY0KCJpOTE1X2VuZXJneV91SiIp OworCWlmICh2YWwgPT0gLTEpCisJCXJldHVybiBwb3dlci0+ZXJyb3IgPSBlcnJubzsKKwllbHNl IGlmICh2YWwgPT0gMCkKKwkJcmV0dXJuIHBvd2VyLT5lcnJvciA9IEVJTlZBTDsKIAotCXJldHVy biBzdHJ0b3VsbChidWYsIDAsIDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdWludDY0X3Qg Y2xvY2tfbXNfdG9fdTY0KHZvaWQpCkBAIC05MywzMCArMTcxLDMwIEBAIHN0YXRpYyB1aW50NjRf dCBjbG9ja19tc190b191NjQodm9pZCkKIAlpZiAoY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9O SUMsICZ0dikgPCAwKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiAodWludDY0X3QpdHYudHZfc2Vj ICogMTAwMCArIHR2LnR2X25zZWMgLyAxMDAwMDAwOworCXJldHVybiAodWludDY0X3QpdHYudHZf c2VjICogMWUzICsgdHYudHZfbnNlYyAvIDFlNjsKIH0KIAogaW50IHBvd2VyX3VwZGF0ZShzdHJ1 Y3QgcG93ZXIgKnBvd2VyKQogewotCXN0cnVjdCBwb3dlcl9zdGF0ICpzID0gJnBvd2VyLT5zdGF0 W3Bvd2VyLT5jb3VudCsrJjFdOwotCXN0cnVjdCBwb3dlcl9zdGF0ICpkID0gJnBvd2VyLT5zdGF0 W3Bvd2VyLT5jb3VudCYxXTsKKwlzdHJ1Y3QgcG93ZXJfc3RhdCAqcyA9ICZwb3dlci0+c3RhdFtw b3dlci0+Y291bnQrKyAmIDFdOworCXN0cnVjdCBwb3dlcl9zdGF0ICpkID0gJnBvd2VyLT5zdGF0 W3Bvd2VyLT5jb3VudCAmIDFdOwogCXVpbnQ2NF90IGRfdGltZTsKIAogCWlmIChwb3dlci0+ZXJy b3IpCiAJCXJldHVybiBwb3dlci0+ZXJyb3I7CiAKLQlpZiAocG93ZXItPmZkICE9IC0xKSB7CisJ aWYgKHBvd2VyLT5mZCA+PSAwKSB7CiAJCXVpbnQ2NF90IGRhdGFbMl07CiAJCWludCBsZW47CiAK IAkJbGVuID0gcmVhZChwb3dlci0+ZmQsIGRhdGEsIHNpemVvZihkYXRhKSk7Ci0JCWlmIChsZW4g PCAwKQorCQlpZiAobGVuICE9IHNpemVvZihkYXRhKSkKIAkJCXJldHVybiBwb3dlci0+ZXJyb3Ig PSBlcnJubzsKIAotCQlzLT5lbmVyZ3kgPSBkYXRhWzBdOwotCQlzLT50aW1lc3RhbXAgPSBkYXRh WzFdIC8gKDEwMDAqMTAwMCk7CisJCXMtPmVuZXJneSA9IGxscm91bmQoKGRvdWJsZSlkYXRhWzBd ICogcG93ZXItPnJhcGxfc2NhbGUpOworCQlzLT50aW1lc3RhbXAgPSBkYXRhWzFdIC8gMWU2Owog CX0gZWxzZSB7Ci0JCXMtPmVuZXJneSA9IGZpbGVfdG9fdTY0KCJpOTE1X2VuZXJneV91SiIpOwor CQlzLT5lbmVyZ3kgPSBkZWJ1Z2ZzX2ZpbGVfdG9fdTY0KCJpOTE1X2VuZXJneV91SiIpIC8gMWUz OwogCQlzLT50aW1lc3RhbXAgPSBjbG9ja19tc190b191NjQoKTsKIAl9CiAKQEAgLTEyNCw3ICsy MDIsOSBAQCBpbnQgcG93ZXJfdXBkYXRlKHN0cnVjdCBwb3dlciAqcG93ZXIpCiAJCXJldHVybiBF QUdBSU47CiAKIAlkX3RpbWUgPSBzLT50aW1lc3RhbXAgLSBkLT50aW1lc3RhbXA7Ci0JcG93ZXIt PnBvd2VyX21XID0gKHMtPmVuZXJneSAtIGQtPmVuZXJneSkgLyBkX3RpbWU7CisJcG93ZXItPnBv d2VyX21XID0gcm91bmQoKGRvdWJsZSkocy0+ZW5lcmd5IC0gZC0+ZW5lcmd5KSAqCisJCQkJKDFl M2YgLyBkX3RpbWUpKTsKIAlwb3dlci0+bmV3X3NhbXBsZSA9IDE7CisKIAlyZXR1cm4gMDsKIH0K ZGlmZiAtLWdpdCBhL292ZXJsYXkvcG93ZXIuaCBiL292ZXJsYXkvcG93ZXIuaAppbmRleCBiZjgz NDZjZTQ2YjQuLjI4YWJmYzMyMjM0YiAxMDA2NDQKLS0tIGEvb3ZlcmxheS9wb3dlci5oCisrKyBi L292ZXJsYXkvcG93ZXIuaApAQCAtMzksNiArMzksOCBAQCBzdHJ1Y3QgcG93ZXIgewogCWludCBu ZXdfc2FtcGxlOwogCiAJdWludDY0X3QgcG93ZXJfbVc7CisKKwlkb3VibGUgcmFwbF9zY2FsZTsK IH07CiAKIGludCBwb3dlcl9pbml0KHN0cnVjdCBwb3dlciAqcG93ZXIpOwotLSAKMi45LjUKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBt YWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=