From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kahola Subject: [PATCH v6 8/8] drm/i915: HSW cdclk support Date: Wed, 3 Jun 2015 15:45:14 +0300 Message-ID: <1433335514-4156-9-git-send-email-mika.kahola@intel.com> References: <1433335514-4156-1-git-send-email-mika.kahola@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id 2159372129 for ; Wed, 3 Jun 2015 05:44:32 -0700 (PDT) In-Reply-To: <1433335514-4156-1-git-send-email-mika.kahola@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 RnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KCklt cGxlbWVudCBzdXBwb3J0IGZvciBjaGFuZ2luZyB0aGUgY2RjbGsgZnJlcXVlbmN5IGR1cmluZyBy dW50aW1lIG9uCkhTVy4gVkxWL0NIViBhbHJlYWR5IGhhdmUgc3VwcG9ydCBmb3IgdGhpcywgc28g d2UgY2FuIGZvbGxvdyB0aGVpcgpleGFtcGxlIGZvciB0aGUgbW9zdCBwYXJ0LiBPbmx5IHRoZSBh Y3R1YWwgaGFyZHdhcmUgcHJvZ3JhbW1pbmcgZGlmZmVycywKdGhlIHJlc3QgaXMgcHJldHR5IG11 Y2ggdGhlIHNhbWUuCgpUaGUgcGlwZSBwaXhlbCByYXRlIHN0dWZmIGlzIGhhbmRsZWQgYSBiaXQg ZGlmZmVyZW50bHkgZm9yIG5vdyBkdWUgdG8KdGhlIGRpZmZlcmVuY2UgaW4gcGNoIHZzLiBnbWNo IHBmaXQgaGFuZGxpbmcuIEV2ZW50dWFsbHkgd2Ugc2hvdWxkIHVuaWZ5CnRoYXQgcGFydCB0byBl bGltaW5hdGUgd2hhdCBpcyBlc3NlbnRpYWxseSBkdXBsaWNhdGVkIGNvZGUuCgp2MjogR3JhYiBy cHMuaHdfbG9jayBhcm91bmQgc2FuZHlicmlkZ2VfcGNvZGVfd3JpdGUoKQp2MzogUmViYXNlIGR1 ZSB0byBwb3dlciB3ZWxsIHZzLiAuZ2xvYmFsX3Jlc291cmNlcygpIHJlb3JkZXJpbmcKdjQ6IFJl YmFzZWQgdG8gdGhlIGxhdGVzdAp2NTogUmVmb3JtYXR0aW5nICdoYXN3ZWxsX21vZGVzZXRfZ2xv YmFsX3BpcGVzJyBmdW5jdGlvbiB0bwogICAgc3VwcG9ydCBhdG9taWMgc3RhdGUKdjY6IFNodWZm bGluZyB0aGUgcGF0Y2ggb3JkZXIgc28gdGhlIEJyb2Fkd2VsbCBDRCBjbG9jayBwYXRjaAogICAg Y2FuIGJlIGFwcGxpZWQgYmVmb3JlIHRoaXMgSGFzd2VsbCBDRCBjbG9jayBwYXRjaAp2NzogRml4 IGZvciBwYXRjaCBzdHlsZSBwcm9ibGVtcwoKU2lnbmVkLW9mZi1ieTogVmlsbGUgU3lyasOkbMOk IDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTogTWlrYSBLYWhv bGEgPG1pa2Eua2Fob2xhQGludGVsLmNvbT4KCkF1dGhvcjogICAgVmlsbGUgU3lyasOkbMOkIDx2 aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3JlZy5oICAgICAgfCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxh eS5jIHwgMTM3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCiAyIGZpbGVzIGNo YW5nZWQsIDEzNiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X3JlZy5oCmluZGV4IDBmNzJjMGUuLjQxOGQxNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaApA QCAtNjcwNSw2ICs2NzA1LDcgQEAgZW51bSBza2xfZGlzcF9wb3dlcl93ZWxscyB7CiAjZGVmaW5l CSAgR0VONl9QQ09ERV9SRUFEX1JDNlZJRFMJCTB4NQogI2RlZmluZSAgICAgR0VONl9FTkNPREVf UkM2X1ZJRChtdikJCSgoKG12KSAtIDI0NSkgLyA1KQogI2RlZmluZSAgICAgR0VONl9ERUNPREVf UkM2X1ZJRCh2aWRzKQkJKCgodmlkcykgKiA1KSArIDI0NSkKKyNkZWZpbmUgICBIU1dfUENPREVf REVfV1JJVEVfRlJFUV9SRVEJCTB4MTcKICNkZWZpbmUgICBCRFdfUENPREVfRElTUExBWV9GUkVR X0NIQU5HRV9SRVEJMHgxOAogI2RlZmluZSAgIEdFTjlfUENPREVfUkVBRF9NRU1fTEFURU5DWQkJ MHg2CiAjZGVmaW5lICAgICBHRU45X01FTV9MQVRFTkNZX0xFVkVMX01BU0sJCTB4RkYKQEAgLTcx NjcsNiArNzE2OCw3IEBAIGVudW0gc2tsX2Rpc3BfcG93ZXJfd2VsbHMgewogI2RlZmluZSAgTENQ TExfUExMX0xPQ0sJCQkoMTw8MzApCiAjZGVmaW5lICBMQ1BMTF9DTEtfRlJFUV9NQVNLCQkoMzw8 MjYpCiAjZGVmaW5lICBMQ1BMTF9DTEtfRlJFUV80NTAJCSgwPDwyNikKKyNkZWZpbmUgIExDUExM X0NMS19GUkVRX0FMVF9IU1cJCSgxPDwyNikgLyogMzM3LjUgKFVMWCkgb3IgNTQwICovCiAjZGVm aW5lICBMQ1BMTF9DTEtfRlJFUV81NE9fQkRXCQkoMTw8MjYpCiAjZGVmaW5lICBMQ1BMTF9DTEtf RlJFUV8zMzdfNV9CRFcJKDI8PDI2KQogI2RlZmluZSAgTENQTExfQ0xLX0ZSRVFfNjc1X0JEVwkJ KDM8PDI2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCmluZGV4IGIxZTIwNjkuLjRi OTkwN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwor KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTU3NTEsNyArNTc1 MSwxNiBAQCBzdGF0aWMgdm9pZCBpbnRlbF91cGRhdGVfbWF4X2NkY2xrKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5k ZXZfcHJpdmF0ZTsKIAotCWlmIChJU19CUk9BRFdFTEwoZGV2KSkgIHsKKwlpZiAoSVNfSEFTV0VM TChkZXYpKSB7CisJCWlmIChJOTE1X1JFQUQoRlVTRV9TVFJBUCkgJiBIU1dfQ0RDTEtfTElNSVQp CisJCQlkZXZfcHJpdi0+bWF4X2NkY2xrX2ZyZXEgPSA0NTAwMDA7CisJCWVsc2UgaWYgKElTX0hT V19VTFgoZGV2KSkKKwkJCWRldl9wcml2LT5tYXhfY2RjbGtfZnJlcSA9IDMzNzUwMDsKKwkJZWxz ZSBpZiAoSVNfSFNXX1VMVChkZXYpKQorCQkJZGV2X3ByaXYtPm1heF9jZGNsa19mcmVxID0gNDUw MDAwOworCQllbHNlCisJCQlkZXZfcHJpdi0+bWF4X2NkY2xrX2ZyZXEgPSA1NDAwMDA7CisJfSBl bHNlIGlmIChJU19CUk9BRFdFTEwoZGV2KSkgIHsKIAkJLyoKIAkJICogRklYTUUgd2l0aCBleHRy YSBjb29saW5nIHdlIGNhbiBhbGxvdwogCQkgKiA1NDAgTUh6IGZvciBVTFggYW5kIDY3NSBNaHog Zm9yIFVMVC4KQEAgLTk3NTUsNiArOTc2NCw4MCBAQCBzdGF0aWMgaW50IGJyb2Fkd2VsbF9jYWxj X2NkY2xrKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAlyZXR1cm4gY2RjbGs7 CiB9CiAKK3N0YXRpYyB2b2lkIGhhc3dlbGxfc2V0X2NkY2xrKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsIGludCBjZGNsaykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBk ZXYtPmRldl9wcml2YXRlOworCXVpbnQzMl90IHZhbDsKKworCWlmIChXQVJOKChJOTE1X1JFQUQo TENQTExfQ1RMKSAmCisJCSAgKExDUExMX1BMTF9ESVNBQkxFIHwgTENQTExfUExMX0xPQ0sgfAor CQkgICBMQ1BMTF9DRF9DTE9DS19ESVNBQkxFIHwgTENQTExfUk9PVF9DRF9DTE9DS19ESVNBQkxF IHwKKwkJICAgTENQTExfQ0QyWF9DTE9DS19ESVNBQkxFIHwgTENQTExfUE9XRVJfRE9XTl9BTExP VyB8CisJCSAgIExDUExMX0NEX1NPVVJDRV9GQ0xLKSkgIT0gTENQTExfUExMX0xPQ0ssCisJCSAi dHJ5aW5nIHRvIGNoYW5nZSBjZGNsayBmcmVxdWVuY3kgd2l0aCBjZGNsayBub3QgZW5hYmxlZFxu IikpCisJCXJldHVybjsKKworCXZhbCA9IEk5MTVfUkVBRChMQ1BMTF9DVEwpOworCXZhbCAmPSB+ TENQTExfQ0xLX0ZSRVFfTUFTSzsKKworCXN3aXRjaCAoY2RjbGspIHsKKwljYXNlIDQ1MDAwMDoK KwkJdmFsIHw9IExDUExMX0NMS19GUkVRXzQ1MDsKKwkJYnJlYWs7CisJY2FzZSAzMzc1MDA6CisJ Y2FzZSA1NDAwMDA6CisJCXZhbCB8PSBMQ1BMTF9DTEtfRlJFUV9BTFRfSFNXOworCQlicmVhazsK KwlkZWZhdWx0OgorCQlXQVJOKDEsICJpbnZhbGlkIGNkY2xrIGZyZXF1ZW5jeVxuIik7CisJCXJl dHVybjsKKwl9CisKKwlJOTE1X1dSSVRFKExDUExMX0NUTCwgdmFsKTsKKworCWlmIChJU19IU1df VUxYKGRldikpIHsKKwkJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnJwcy5od19sb2NrKTsKKwkJc2Fu ZHlicmlkZ2VfcGNvZGVfd3JpdGUoZGV2X3ByaXYsIEhTV19QQ09ERV9ERV9XUklURV9GUkVRX1JF USwKKwkJCQkJY2RjbGsgPT0gMzM3NTAwKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cnBz Lmh3X2xvY2spOworCX0KKworCWludGVsX3VwZGF0ZV9jZGNsayhkZXYpOworCisJV0FSTihjZGNs ayAhPSBkZXZfcHJpdi0+Y2RjbGtfZnJlcSwKKwkgICAgICJjZGNsayByZXF1ZXN0ZWQgJWQga0h6 IGJ1dCBnb3QgJWQga0h6XG4iLAorCSAgICAgY2RjbGssIGRldl9wcml2LT5jZGNsa19mcmVxKTsK K30KKworc3RhdGljIGludCBoYXN3ZWxsX2NhbGNfY2RjbGsoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LAorCQkJICAgICAgaW50IG1heF9waXhlbF9yYXRlKQoreworCWludCBjZGNs azsKKworCS8qCisJICogRklYTUUgc2hvdWxkIGFsc28gYWNjb3VudCBmb3IgcGxhbmUgcmF0aW8K KwkgKiBvbmNlIDY0YnBwIHBpeGVsIGZvcm1hdHMgYXJlIHN1cHBvcnRlZC4KKwkgKi8KKwlpZiAo bWF4X3BpeGVsX3JhdGUgPiA0NTAwMDApCisJCWNkY2xrID0gNTQwMDAwOworCWVsc2UgaWYgKG1h eF9waXhlbF9yYXRlID4gMzM3NTAwIHx8ICFJU19IU1dfVUxYKGRldl9wcml2KSkKKwkJY2RjbGsg PSA0NTAwMDA7CisJZWxzZQorCQljZGNsayA9IDMzNzUwMDsKKworCS8qCisJICogRklYTUUgbW92 ZSB0aGUgY2RjbGsgY2FjbHVsYXRpb24gdG8KKwkgKiBjb21wdXRlX2NvbmZpZygpIHNvIHdlIGNh biBmYWlsIGdyYWNlZ3VsbHkuCisJICovCisJaWYgKGNkY2xrID4gZGV2X3ByaXYtPm1heF9jZGNs a19mcmVxKSB7CisJCURSTV9FUlJPUigicmVxdWVzdGVkIGNkY2xrICglZCBrSHopIGV4Y2VlZHMg bWF4ICglZCBrSHopXG4iLAorCQkJICBjZGNsaywgZGV2X3ByaXYtPm1heF9jZGNsa19mcmVxKTsK KwkJY2RjbGsgPSBkZXZfcHJpdi0+bWF4X2NkY2xrX2ZyZXE7CisJfQorCisJcmV0dXJuIGNkY2xr OworfQorCiBzdGF0aWMgaW50IGJyb2Fkd2VsbF9tb2Rlc2V0X2dsb2JhbF9waXBlcyhzdHJ1Y3Qg ZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gdG9faTkxNShzdGF0ZS0+ZGV2KTsKQEAgLTk3OTcsNiArOTg4MCw0OSBAQCBzdGF0 aWMgdm9pZCBicm9hZHdlbGxfbW9kZXNldF9nbG9iYWxfcmVzb3VyY2VzKHN0cnVjdCBkcm1fYXRv bWljX3N0YXRlICpzdGF0ZSkKIAkJYnJvYWR3ZWxsX3NldF9jZGNsayhkZXYsIHJlcV9jZGNsayk7 CiB9CiAKK3N0YXRpYyBpbnQgaGFzd2VsbF9tb2Rlc2V0X2dsb2JhbF9waXBlcyhzdHJ1Y3QgZHJt X2F0b21pY19zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gdG9faTkxNShzdGF0ZS0+ZGV2KTsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJc3Ry dWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOworCWludCBtYXhfcGl4Y2xrID0gaWxrX21h eF9waXhlbF9yYXRlKGRldl9wcml2KTsKKwlpbnQgY2RjbGssIGk7CisKKwljZGNsayA9IGhhc3dl bGxfY2FsY19jZGNsayhkZXZfcHJpdiwgbWF4X3BpeGNsayk7CisKKwlpZiAoY2RjbGsgPT0gZGV2 X3ByaXYtPmNkY2xrX2ZyZXEpCisJCXJldHVybiAwOworCisJLyogYWRkIGFsbCBhY3RpdmUgcGlw ZXMgdG8gdGhlIHN0YXRlICovCisJZm9yX2VhY2hfY3J0YyhzdGF0ZS0+ZGV2LCBjcnRjKSB7CisJ CWlmICghY3J0Yy0+c3RhdGUtPmVuYWJsZSkKKwkJCWNvbnRpbnVlOworCisJCWNydGNfc3RhdGUg PSBkcm1fYXRvbWljX2dldF9jcnRjX3N0YXRlKHN0YXRlLCBjcnRjKTsKKwkJaWYgKElTX0VSUihj cnRjX3N0YXRlKSkKKwkJCXJldHVybiBQVFJfRVJSKGNydGNfc3RhdGUpOworCX0KKworCS8qIGRp c2FibGUvZW5hYmxlIGFsbCBjdXJyZW50bHkgYWN0aXZlIHBpcGVzIHdoaWxlIHdlIGNoYW5nZSBj ZGNsayAqLworCWZvcl9lYWNoX2NydGNfaW5fc3RhdGUoc3RhdGUsIGNydGMsIGNydGNfc3RhdGUs IGkpCisJCWlmIChjcnRjX3N0YXRlLT5lbmFibGUpCisJCQljcnRjX3N0YXRlLT5tb2RlX2NoYW5n ZWQgPSB0cnVlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGhhc3dlbGxfbW9kZXNl dF9nbG9iYWxfcmVzb3VyY2VzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKK3sKKwlz dHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gc3RhdGUtPmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBtYXhfcGl4ZWxfcmF0ZSA9 IGlsa19tYXhfcGl4ZWxfcmF0ZShkZXZfcHJpdik7CisJaW50IHJlcV9jZGNsayA9IGhhc3dlbGxf Y2FsY19jZGNsayhkZXZfcHJpdiwgbWF4X3BpeGVsX3JhdGUpOworCisJaWYgKHJlcV9jZGNsayAh PSBkZXZfcHJpdi0+Y2RjbGtfZnJlcSkgeworCQloYXN3ZWxsX3NldF9jZGNsayhkZXYsIHJlcV9j ZGNsayk7CisJfQorfQorCiBzdGF0aWMgaW50IGhhc3dlbGxfY3J0Y19jb21wdXRlX2Nsb2NrKHN0 cnVjdCBpbnRlbF9jcnRjICpjcnRjLAogCQkJCSAgICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpjcnRjX3N0YXRlKQogewpAQCAtMTI5NzcsMTEgKzEzMTAzLDEzIEBAIHN0YXRpYyBpbnQgX19p bnRlbF9zZXRfbW9kZV9jaGVja3Moc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQogCSAq IG1vZGUgc2V0IG9uIHRoaXMgY3J0Yy4gIEZvciBvdGhlciBjcnRjcyB3ZSBuZWVkIHRvIHVzZSB0 aGUKIAkgKiBhZGp1c3RlZF9tb2RlIGJpdHMgaW4gdGhlIGNydGMgZGlyZWN0bHkuCiAJICovCi0J aWYgKElTX1ZBTExFWVZJRVcoZGV2KSB8fCBJU19CUk9YVE9OKGRldikgfHwgSVNfQlJPQURXRUxM KGRldikpIHsKKwlpZiAoSVNfVkFMTEVZVklFVyhkZXYpIHx8IElTX0JST1hUT04oZGV2KSB8fCBJ U19CUk9BRFdFTEwoZGV2KSB8fCBJU19IQVNXRUxMKGRldikpIHsKIAkJaWYgKElTX1ZBTExFWVZJ RVcoZGV2KSB8fCBJU19CUk9YVE9OKGRldikpCiAJCQlyZXQgPSB2YWxsZXl2aWV3X21vZGVzZXRf Z2xvYmFsX3BpcGVzKHN0YXRlKTsKLQkJZWxzZQorCQllbHNlIGlmIChJU19CUk9BRFdFTEwoZGV2 KSkKIAkJCXJldCA9IGJyb2Fkd2VsbF9tb2Rlc2V0X2dsb2JhbF9waXBlcyhzdGF0ZSk7CisJCWVs c2UKKwkJCXJldCA9IGhhc3dlbGxfbW9kZXNldF9nbG9iYWxfcGlwZXMoc3RhdGUpOwogCiAJCWlm IChyZXQpCiAJCQlyZXR1cm4gcmV0OwpAQCAtMTQ4NzMsNiArMTUwMDEsOSBAQCBzdGF0aWMgdm9p ZCBpbnRlbF9pbml0X2Rpc3BsYXkoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAkJaWYgKElTX0JS T0FEV0VMTChkZXYpKQogCQkJZGV2X3ByaXYtPmRpc3BsYXkubW9kZXNldF9nbG9iYWxfcmVzb3Vy Y2VzID0KIAkJCQlicm9hZHdlbGxfbW9kZXNldF9nbG9iYWxfcmVzb3VyY2VzOworCQllbHNlCisJ CQlkZXZfcHJpdi0+ZGlzcGxheS5tb2Rlc2V0X2dsb2JhbF9yZXNvdXJjZXMgPQorCQkJCWhhc3dl bGxfbW9kZXNldF9nbG9iYWxfcmVzb3VyY2VzOwogCX0gZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhk ZXYpKSB7CiAJCWRldl9wcml2LT5kaXNwbGF5Lm1vZGVzZXRfZ2xvYmFsX3Jlc291cmNlcyA9CiAJ CQl2YWxsZXl2aWV3X21vZGVzZXRfZ2xvYmFsX3Jlc291cmNlczsKLS0gCjEuOS4xCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGlu ZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=