From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [PATCH 6/8] drm/i915: Engine busy time tracking Date: Mon, 18 Sep 2017 12:38:12 +0100 Message-ID: <20170918113814.2591-7-tvrtko.ursulin@linux.intel.com> References: <20170918113814.2591-1-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-wr0-x243.google.com (mail-wr0-x243.google.com [IPv6:2a00:1450:400c:c0c::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id E0ABE6E34C for ; Mon, 18 Sep 2017 11:38:27 +0000 (UTC) Received: by mail-wr0-x243.google.com with SMTP id n64so159379wrb.2 for ; Mon, 18 Sep 2017 04:38:27 -0700 (PDT) In-Reply-To: <20170918113814.2591-1-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 RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KClRyYWNrIHRv dGFsIHRpbWUgcmVxdWVzdHMgaGF2ZSBiZWVuIGV4ZWN1dGluZyBvbiB0aGUgaGFyZHdhcmUuCgpX ZSBhZGQgbmV3IGtlcm5lbCBBUEkgdG8gYWxsb3cgc29mdHdhcmUgdHJhY2tpbmcgb2YgdGltZSBH UFUKZW5naW5lcyBhcmUgc3BlbmRpbmcgZXhlY3V0aW5nIHJlcXVlc3RzLgoKQm90aCBwZXItZW5n aW5lIGFuZCBnbG9iYWwgQVBJIGlzIGFkZGVkIHdpdGggdGhlIGxhdHRlciBhbHNvCmJlaW5nIGV4 cG9ydGVkIGZvciB1c2UgYnkgZXh0ZXJuYWwgdXNlcnMuCgp2MjoKICogU3F1YXNoZWQgd2l0aCB0 aGUgaW50ZXJuYWwgQVBJLgogKiBEcm9wcGVkIHN0YXRpYyBrZXkuCiAqIE1hZGUgcGVyLWVuZ2lu ZS4KICogU3RvcmUgdGltZSBpbiBtb25vdG9uaWMga3RpbWUuCgp2MzogTW92ZWQgc3RhdHMgY2xl YXJpbmcgdG8gZGlzYWJsZS4KCnY0OgogKiBDb21tZW50cy4KICogRG9uJ3QgZXhwb3J0IHRoZSBB UEkganVzdCB5ZXQuCgp2NTogV2hpdGVzcGFjZSBjbGVhbnVwLgoKdjY6CiAqIFJlbmFtZSByZWYg dG8gYWN0aXZlLgogKiBEcm9wIGVuZ2luZSBhZ2dyZWdhdGUgc3RhdHMgZm9yIG5vdy4KICogQWNj b3VudCBpbml0aWFsIGJ1c3kgcGVyaW9kIGFmdGVyIGVuYWJsaW5nIHN0YXRzLgoKU2lnbmVkLW9m Zi1ieTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KLS0tCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYyAgfCA4NCArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jICAgICAgICB8 ICAyICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaCB8IDkyICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAxNzggaW5zZXJ0 aW9ucygrKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9j cy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZW5naW5lX2NzLmMKaW5kZXggODI1MTBk OTcxYzdkLi5jYmY5NzhkMzkwNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2VuZ2luZV9jcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9j cy5jCkBAIC0yMzIsNiArMjMyLDggQEAgaW50ZWxfZW5naW5lX3NldHVwKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwKIAkvKiBOb3RoaW5nIHRvIGRvIGhlcmUsIGV4ZWN1dGUgaW4g b3JkZXIgb2YgZGVwZW5kZW5jaWVzICovCiAJZW5naW5lLT5zY2hlZHVsZSA9IE5VTEw7CiAKKwlz cGluX2xvY2tfaW5pdCgmZW5naW5lLT5zdGF0cy5sb2NrKTsKKwogCUFUT01JQ19JTklUX05PVElG SUVSX0hFQUQoJmVuZ2luZS0+Y29udGV4dF9zdGF0dXNfbm90aWZpZXIpOwogCiAJZGV2X3ByaXYt PmVuZ2luZV9jbGFzc1tpbmZvLT5jbGFzc11baW5mby0+aW5zdGFuY2VdID0gZW5naW5lOwpAQCAt MTU1Niw2ICsxNTU4LDg4IEBAIGJvb2wgaW50ZWxfZW5naW5lX2Nhbl9zdG9yZV9kd29yZChzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJfQogfQogCisvKioKKyAqIGludGVsX2VuYWJs ZV9lbmdpbmVfc3RhdHMoKSAtIEVuYWJsZSBlbmdpbmUgYnVzeSB0cmFja2luZyBvbiBlbmdpbmUK KyAqIEBlbmdpbmU6IGVuZ2luZSB0byBlbmFibGUgc3RhdHMgY29sbGVjdGlvbgorICoKKyAqIFN0 YXJ0IGNvbGxlY3RpbmcgdGhlIGVuZ2luZSBidXN5bmVzcyBkYXRhIGZvciBAZW5naW5lLgorICoK KyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KKyAqLwor aW50IGludGVsX2VuYWJsZV9lbmdpbmVfc3RhdHMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIWk5MTUuZW5hYmxlX2V4ZWNs aXN0cykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZW5naW5lLT5z dGF0cy5sb2NrLCBmbGFncyk7CisJaWYgKGVuZ2luZS0+c3RhdHMuZW5hYmxlZCA9PSB+MCkKKwkJ Z290byBidXN5OworCWlmIChlbmdpbmUtPnN0YXRzLmVuYWJsZWQrKyA9PSAwKQorCQllbmdpbmUt PnN0YXRzLmVuYWJsZWRfYXQgPSBrdGltZV9nZXQoKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZlbmdpbmUtPnN0YXRzLmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworCitidXN5OgorCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuZ2luZS0+c3RhdHMubG9jaywgZmxhZ3MpOworCisJcmV0 dXJuIC1FQlVTWTsKK30KKworLyoqCisgKiBpbnRlbF9kaXNhYmxlX2VuZ2luZV9zdGF0cygpIC0g RGlzYWJsZSBlbmdpbmUgYnVzeSB0cmFja2luZyBvbiBlbmdpbmUKKyAqIEBlbmdpbmU6IGVuZ2lu ZSB0byBkaXNhYmxlIHN0YXRzIGNvbGxlY3Rpb24KKyAqCisgKiBTdG9wcyBjb2xsZWN0aW5nIHRo ZSBlbmdpbmUgYnVzeW5lc3MgZGF0YSBmb3IgQGVuZ2luZS4KKyAqLwordm9pZCBpbnRlbF9kaXNh YmxlX2VuZ2luZV9zdGF0cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCit7CisJdW5z aWduZWQgbG9uZyBmbGFnczsKKworCWlmICghaTkxNS5lbmFibGVfZXhlY2xpc3RzKQorCQlyZXR1 cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZW5naW5lLT5zdGF0cy5sb2NrLCBmbGFncyk7CisJ V0FSTl9PTl9PTkNFKGVuZ2luZS0+c3RhdHMuZW5hYmxlZCA9PSAwKTsKKwlpZiAoLS1lbmdpbmUt PnN0YXRzLmVuYWJsZWQgPT0gMCkgeworCQllbmdpbmUtPnN0YXRzLmVuYWJsZWRfYXQgPSAwOwor CQllbmdpbmUtPnN0YXRzLmFjdGl2ZSA9IDA7CisJCWVuZ2luZS0+c3RhdHMuc3RhcnQgPSAwOwor CQllbmdpbmUtPnN0YXRzLnRvdGFsID0gMDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm ZW5naW5lLT5zdGF0cy5sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogaW50ZWxfZW5naW5lX2dl dF9idXN5X3RpbWUoKSAtIFJldHVybiBjdXJyZW50IGFjY3VtdWxhdGVkIGVuZ2luZSBidXN5bmVz cworICogQGVuZ2luZTogZW5naW5lIHRvIHJlcG9ydCBvbgorICoKKyAqIFJldHVybnMgYWNjdW11 bGF0ZWQgdGltZSBAZW5naW5lIHdhcyBidXN5IHNpbmNlIGVuZ2luZSBzdGF0cyB3ZXJlIGVuYWJs ZWQuCisgKi8KK2t0aW1lX3QgaW50ZWxfZW5naW5lX2dldF9idXN5X3RpbWUoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lKQoreworCWt0aW1lX3QgdG90YWw7CisJdW5zaWduZWQgbG9uZyBm bGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZlbmdpbmUtPnN0YXRzLmxvY2ssIGZsYWdzKTsK KworCXRvdGFsID0gZW5naW5lLT5zdGF0cy50b3RhbDsKKworCS8qCisJICogSWYgdGhlIGVuZ2lu ZSBpcyBleGVjdXRpbmcgc29tZXRoaW5nIGF0IHRoZSBtb21lbnQKKwkgKiBhZGQgaXQgdG8gdGhl IHRvdGFsLgorCSAqLworCWlmIChlbmdpbmUtPnN0YXRzLmFjdGl2ZSkKKwkJdG90YWwgPSBrdGlt ZV9hZGQodG90YWwsCisJCQkJICBrdGltZV9zdWIoa3RpbWVfZ2V0KCksIGVuZ2luZS0+c3RhdHMu c3RhcnQpKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuZ2luZS0+c3RhdHMubG9jaywg ZmxhZ3MpOworCisJcmV0dXJuIHRvdGFsOworfQorCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRFJN X0k5MTVfU0VMRlRFU1QpCiAjaW5jbHVkZSAic2VsZnRlc3RzL21vY2tfZW5naW5lLmMiCiAjZW5k aWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKaW5kZXggYmE5MWRiNDNmMTYzLi43ZjI4NjEwMTQ0 NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCkBAIC0zMDQsMTIgKzMwNCwxNCBAQCBleGVj bGlzdHNfY29udGV4dF9zdGF0dXNfY2hhbmdlKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAq cnEsCiBzdGF0aWMgaW5saW5lIHZvaWQKIGV4ZWNsaXN0c19jb250ZXh0X3NjaGVkdWxlX2luKHN0 cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcnEpCiB7CisJaW50ZWxfZW5naW5lX2NvbnRleHRf aW4ocnEtPmVuZ2luZSk7CiAJZXhlY2xpc3RzX2NvbnRleHRfc3RhdHVzX2NoYW5nZShycSwgSU5U RUxfQ09OVEVYVF9TQ0hFRFVMRV9JTik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogZXhlY2xp c3RzX2NvbnRleHRfc2NoZWR1bGVfb3V0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcnEp CiB7CisJaW50ZWxfZW5naW5lX2NvbnRleHRfb3V0KHJxLT5lbmdpbmUpOwogCWV4ZWNsaXN0c19j b250ZXh0X3N0YXR1c19jaGFuZ2UocnEsIElOVEVMX0NPTlRFWFRfU0NIRURVTEVfT1VUKTsKIH0K IApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCmluZGV4IGNiZDE3MzQ3NTli OC4uYWUwYTRjNDk4YTBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9y aW5nYnVmZmVyLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5o CkBAIC00NjUsNiArNDY1LDM4IEBAIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgewogCSAqIGNlcnRh aW4gYml0cyB0byBlbmNvZGUgdGhlIGNvbW1hbmQgbGVuZ3RoIGluIHRoZSBoZWFkZXIpLgogCSAq LwogCXUzMiAoKmdldF9jbWRfbGVuZ3RoX21hc2spKHUzMiBjbWRfaGVhZGVyKTsKKworCXN0cnVj dCB7CisJCS8qKgorCQkgKiBAbG9jazogTG9jayBwcm90ZWN0aW5nIHRoZSBiZWxvdyBmaWVsZHMu CisJCSAqLworCQlzcGlubG9ja190IGxvY2s7CisJCS8qKgorCQkgKiBAZW5hYmxlZDogUmVmZXJl bmNlIGNvdW50IGluZGljYXRpbmcgbnVtYmVyIG9mIGxpc3RlbmVycy4KKwkJICovCisJCXVuc2ln bmVkIGludCBlbmFibGVkOworCQkvKioKKwkJICogQGFjdGl2ZTogTnVtYmVyIG9mIGNvbnRleHRz IGN1cnJlbnRseSBzY2hlZHVsZWQgaW4uCisJCSAqLworCQl1bnNpZ25lZCBpbnQgYWN0aXZlOwor CQkvKioKKwkJICogQGVuYWJsZWRfYXQ6IFRpbWVzdGFtcCB3aGVuIGJ1c3kgc3RhdHMgd2VyZSBl bmFibGVkLgorCQkgKi8KKwkJa3RpbWVfdCBlbmFibGVkX2F0OworCQkvKioKKwkJICogQHN0YXJ0 OiBUaW1lc3RhbXAgb2YgdGhlIGxhc3QgaWRsZSB0byBhY3RpdmUgdHJhbnNpdGlvbi4KKwkJICoK KwkJICogSWRsZSBpcyBkZWZpbmVkIGFzIGFjdGl2ZSA9PSAwLCBhY3RpdmUgaXMgYWN0aXZlID4g MC4KKwkJICovCisJCWt0aW1lX3Qgc3RhcnQ7CisJCS8qKgorCQkgKiBAdG90YWw6IFRvdGFsIHRp bWUgdGhpcyBlbmdpbmUgd2FzIGJ1c3kuCisJCSAqCisJCSAqIEFjY3VtdWxhdGVkIHRpbWUgbm90 IGNvdW50aW5nIHRoZSBtb3N0IHJlY2VudCBibG9jayBpbiBjYXNlcworCQkgKiB3aGVyZSBlbmdp bmUgaXMgY3VycmVudGx5IGJ1c3kgKGFjdGl2ZSA+IDApLgorCQkgKi8KKwkJa3RpbWVfdCB0b3Rh bDsKKwl9IHN0YXRzOwogfTsKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKQEAgLTc2OCw0 ICs4MDAsNjQgQEAgYm9vbCBpbnRlbF9lbmdpbmVfY2FuX3N0b3JlX2R3b3JkKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSk7CiBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICoKIGludGVsX2Vu Z2luZV9sb29rdXBfdXNlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgdTggY2xhc3Ms IHU4IGluc3RhbmNlKTsKIAorc3RhdGljIGlubGluZSB2b2lkIGludGVsX2VuZ2luZV9jb250ZXh0 X2luKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZs YWdzOworCisJaWYgKFJFQURfT05DRShlbmdpbmUtPnN0YXRzLmVuYWJsZWQpID09IDApCisJCXJl dHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZlbmdpbmUtPnN0YXRzLmxvY2ssIGZsYWdzKTsK KworCWlmIChlbmdpbmUtPnN0YXRzLmVuYWJsZWQgPiAwKSB7CisJCWlmIChlbmdpbmUtPnN0YXRz LmFjdGl2ZSsrID09IDApCisJCQllbmdpbmUtPnN0YXRzLnN0YXJ0ID0ga3RpbWVfZ2V0KCk7CisJ CUdFTV9CVUdfT04oZW5naW5lLT5zdGF0cy5hY3RpdmUgPT0gMCk7CisJfQorCisJc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZSgmZW5naW5lLT5zdGF0cy5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBp bmxpbmUgdm9pZCBpbnRlbF9lbmdpbmVfY29udGV4dF9vdXQoc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoUkVBRF9PTkNFKGVu Z2luZS0+c3RhdHMuZW5hYmxlZCkgPT0gMCkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNh dmUoJmVuZ2luZS0+c3RhdHMubG9jaywgZmxhZ3MpOworCisJaWYgKGVuZ2luZS0+c3RhdHMuZW5h YmxlZCA+IDApIHsKKwkJa3RpbWVfdCBsYXN0LCBub3cgPSBrdGltZV9nZXQoKTsKKworCQlpZiAo ZW5naW5lLT5zdGF0cy5hY3RpdmUgJiYgLS1lbmdpbmUtPnN0YXRzLmFjdGl2ZSA9PSAwKSB7CisJ CQkvKgorCQkJICogRGVjcmVtZW50IHRoZSBhY3RpdmUgY29udGV4dCBjb3VudCBhbmQgaW4gY2Fz ZSBHUFUKKwkJCSAqIGlzIG5vdyBpZGxlIGFkZCB1cCB0byB0aGUgcnVubmluZyB0b3RhbC4KKwkJ CSAqLworCQkJbGFzdCA9IGt0aW1lX3N1Yihub3csIGVuZ2luZS0+c3RhdHMuc3RhcnQpOworCisJ CQllbmdpbmUtPnN0YXRzLnRvdGFsID0ga3RpbWVfYWRkKGVuZ2luZS0+c3RhdHMudG90YWwsCisJ CQkJCQkJbGFzdCk7CisJCX0gZWxzZSBpZiAoZW5naW5lLT5zdGF0cy5hY3RpdmUgPT0gMCkgewor CQkJLyoKKwkJCSAqIEFmdGVyIHR1cm5pbmcgb24gZW5naW5lIHN0YXRzLCBjb250ZXh0IG91dCBt aWdodCBiZQorCQkJICogdGhlIGZpcnN0IGV2ZW50IGluIHdoaWNoIGNhc2Ugd2UgYWNjb3VudCBm cm9tIHRoZQorCQkJICogdGltZSBzdGF0cyBnYXRoZXJpbmcgd2FzIHR1cm5lZCBvbi4KKwkJCSAq LworCQkJbGFzdCA9IGt0aW1lX3N1Yihub3csIGVuZ2luZS0+c3RhdHMuZW5hYmxlZF9hdCk7CisK KwkJCWVuZ2luZS0+c3RhdHMudG90YWwgPSBrdGltZV9hZGQoZW5naW5lLT5zdGF0cy50b3RhbCwK KwkJCQkJCQlsYXN0KTsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuZ2lu ZS0+c3RhdHMubG9jaywgZmxhZ3MpOworfQorCitpbnQgaW50ZWxfZW5hYmxlX2VuZ2luZV9zdGF0 cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwordm9pZCBpbnRlbF9kaXNhYmxlX2Vu Z2luZV9zdGF0cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOworCitrdGltZV90IGlu dGVsX2VuZ2luZV9nZXRfYnVzeV90aW1lKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7 CisKICNlbmRpZiAvKiBfSU5URUxfUklOR0JVRkZFUl9IXyAqLwotLSAKMi45LjUKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5n IGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=