From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH] drm/i915/icl: push pll to port mapping/unmapping to ddi encoder hooks Date: Mon, 3 Dec 2018 14:00:08 +0200 Message-ID: <20181203120008.GD9144@intel.com> References: <20181129115715.9152-1-jani.nikula@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id B682389E11 for ; Mon, 3 Dec 2018 12:00:12 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20181129115715.9152-1-jani.nikula@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Jani Nikula Cc: intel-gfx@lists.freedesktop.org, Paulo Zanoni List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBOb3YgMjksIDIwMTggYXQgMDE6NTc6MTVQTSArMDIwMCwgSmFuaSBOaWt1bGEgd3Jv dGU6Cj4gVW5jbHV0dGVyIHRoZSBoYXN3ZWxsX2NydGNfZW5hYmxlKCkgYW5kIGhhc3dlbGxfY3J0 Y19kaXNhYmxlKCkgZnVuY3Rpb25zCj4gYSBiaXQgYnkgbW92aW5nIHRoZSBwbGwgdG8gcG9ydCBt YXBwaW5nIGFuZCB1bm1hcHBpbmcgZnVuY3Rpb25zIHRvIHRoZQo+IGRkaSBlbmNvZGVyIGhvb2tz LiBUaGlzIGFsbG93cyByZW1vdmFsIG9mIGEgYnVuY2ggb2YgYm9pbGVycGxhdGUgY29kZQo+IGZy b20gdGhlIGZ1bmN0aW9ucy4KPiAKPiBBZGRpdGlvbmFsbHksIHRoZSBJQ0wgRFNJIGVuY29kZXIg bmVlZHMgdG8gZG8gdGhlIGNsb2NrIGdhdGluZyBhbmQKPiB1bmdhdGluZyBzbGlnaHRseSBkaWZm ZXJlbnRseSwgYW5kIHRoaXMgYWxsb3dzIGl0cyBvd24gaGFuZGxpbmcgaW4gYQo+IGNsZWFuIGZh c2hpb24uCj4gCj4gQ2M6IE1hZGhhdiBDaGF1aGFuIDxtYWRoYXYuY2hhdWhhbkBpbnRlbC5jb20+ Cj4gQ2M6IFBhdWxvIFphbm9uaSA8cGF1bG8uci56YW5vbmlAaW50ZWwuY29tPgo+IENjOiBWaWxs ZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgo+IFNpZ25lZC1vZmYt Ynk6IEphbmkgTmlrdWxhIDxqYW5pLm5pa3VsYUBpbnRlbC5jb20+CgpSZXZpZXdlZC1ieTogVmls bGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KCj4gLS0tCj4gIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RkaS5jICAgICB8IDg0ICsrKysrKysrKysrKysrKy0t LS0tLS0tLS0tLS0tLS0tLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5 LmMgfCAgNiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggICAgIHwgIDYg LS0tCj4gIDMgZmlsZXMgY2hhbmdlZCwgMzQgaW5zZXJ0aW9ucygrKSwgNjIgZGVsZXRpb25zKC0p Cj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RkaS5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMKPiBpbmRleCBhZDExNTQwYWM0MzYuLjdiYWQ2 Yzg1N2I4MSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZGkuYwo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RkaS5jCj4gQEAgLTI3ODUsNjkgKzI3 ODUsNDUgQEAgdWludDMyX3QgaWNsX2RwY2xrYV9jZmdjcjBfY2xrX29mZihzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiAtdm9pZCBpY2xf bWFwX3BsbHNfdG9fcG9ydHMoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+IC0JCQkgICBzdHJ1Y3Qg aW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiAtCQkJICAgc3RydWN0IGRybV9hdG9taWNf c3RhdGUgKm9sZF9zdGF0ZSkKPiArc3RhdGljIHZvaWQgaWNsX21hcF9wbGxzX3RvX3BvcnRzKHN0 cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ICsJCQkJICBjb25zdCBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiAgewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gdG9faTkxNShlbmNvZGVyLT5iYXNlLmRldik7Cj4gIAlzdHJ1Y3QgaW50ZWxf c2hhcmVkX2RwbGwgKnBsbCA9IGNydGNfc3RhdGUtPnNoYXJlZF9kcGxsOwo+IC0Jc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5kZXYpOwo+IC0Jc3RydWN0 IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGU7Cj4gLQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubjsKPiAtCWludCBpOwo+IC0KPiAtCWZvcl9lYWNoX25ld19jb25uZWN0b3JfaW5fc3Rh dGUob2xkX3N0YXRlLCBjb25uLCBjb25uX3N0YXRlLCBpKSB7Cj4gLQkJc3RydWN0IGludGVsX2Vu Y29kZXIgKmVuY29kZXIgPQo+IC0JCQl0b19pbnRlbF9lbmNvZGVyKGNvbm5fc3RhdGUtPmJlc3Rf ZW5jb2Rlcik7Cj4gLQkJZW51bSBwb3J0IHBvcnQ7Cj4gLQkJdWludDMyX3QgdmFsOwo+IC0KPiAt CQlpZiAoY29ubl9zdGF0ZS0+Y3J0YyAhPSBjcnRjKQo+IC0JCQljb250aW51ZTsKPiAtCj4gLQkJ cG9ydCA9IGVuY29kZXItPnBvcnQ7Cj4gLQkJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmRwbGxfbG9j ayk7Cj4gKwllbnVtIHBvcnQgcG9ydCA9IGVuY29kZXItPnBvcnQ7Cj4gKwl1MzIgdmFsOwo+ICAK PiAtCQl2YWwgPSBJOTE1X1JFQUQoRFBDTEtBX0NGR0NSMF9JQ0wpOwo+IC0JCVdBUk5fT04oKHZh bCAmIGljbF9kcGNsa2FfY2ZnY3IwX2Nsa19vZmYoZGV2X3ByaXYsIHBvcnQpKSA9PSAwKTsKPiAr CW11dGV4X2xvY2soJmRldl9wcml2LT5kcGxsX2xvY2spOwo+ICAKPiAtCQlpZiAoaW50ZWxfcG9y dF9pc19jb21ib3BoeShkZXZfcHJpdiwgcG9ydCkpIHsKPiAtCQkJdmFsICY9IH5EUENMS0FfQ0ZH Q1IwX0RESV9DTEtfU0VMX01BU0socG9ydCk7Cj4gLQkJCXZhbCB8PSBEUENMS0FfQ0ZHQ1IwX0RE SV9DTEtfU0VMKHBsbC0+aW5mby0+aWQsIHBvcnQpOwo+IC0JCQlJOTE1X1dSSVRFKERQQ0xLQV9D RkdDUjBfSUNMLCB2YWwpOwo+IC0JCQlQT1NUSU5HX1JFQUQoRFBDTEtBX0NGR0NSMF9JQ0wpOwo+ IC0JCX0KPiArCXZhbCA9IEk5MTVfUkVBRChEUENMS0FfQ0ZHQ1IwX0lDTCk7Cj4gKwlXQVJOX09O KCh2YWwgJiBpY2xfZHBjbGthX2NmZ2NyMF9jbGtfb2ZmKGRldl9wcml2LCBwb3J0KSkgPT0gMCk7 Cj4gIAo+IC0JCXZhbCAmPSB+aWNsX2RwY2xrYV9jZmdjcjBfY2xrX29mZihkZXZfcHJpdiwgcG9y dCk7Cj4gKwlpZiAoaW50ZWxfcG9ydF9pc19jb21ib3BoeShkZXZfcHJpdiwgcG9ydCkpIHsKPiAr CQl2YWwgJj0gfkRQQ0xLQV9DRkdDUjBfRERJX0NMS19TRUxfTUFTSyhwb3J0KTsKPiArCQl2YWwg fD0gRFBDTEtBX0NGR0NSMF9ERElfQ0xLX1NFTChwbGwtPmluZm8tPmlkLCBwb3J0KTsKPiAgCQlJ OTE1X1dSSVRFKERQQ0xLQV9DRkdDUjBfSUNMLCB2YWwpOwo+IC0KPiAtCQltdXRleF91bmxvY2so JmRldl9wcml2LT5kcGxsX2xvY2spOwo+ICsJCVBPU1RJTkdfUkVBRChEUENMS0FfQ0ZHQ1IwX0lD TCk7Cj4gIAl9Cj4gKwo+ICsJdmFsICY9IH5pY2xfZHBjbGthX2NmZ2NyMF9jbGtfb2ZmKGRldl9w cml2LCBwb3J0KTsKPiArCUk5MTVfV1JJVEUoRFBDTEtBX0NGR0NSMF9JQ0wsIHZhbCk7Cj4gKwo+ ICsJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ZHBsbF9sb2NrKTsKPiAgfQo+ICAKPiAtdm9pZCBp Y2xfdW5tYXBfcGxsc190b19wb3J0cyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gLQkJCSAgICAg c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gLQkJCSAgICAgc3RydWN0IGRy bV9hdG9taWNfc3RhdGUgKm9sZF9zdGF0ZSkKPiArc3RhdGljIHZvaWQgaWNsX3VubWFwX3BsbHNf dG9fcG9ydHMoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIpCj4gIHsKPiAtCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+ZGV2KTsKPiAtCXN0cnVj dCBkcm1fY29ubmVjdG9yX3N0YXRlICpvbGRfY29ubl9zdGF0ZTsKPiAtCXN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uOwo+IC0JaW50IGk7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSB0b19pOTE1KGVuY29kZXItPmJhc2UuZGV2KTsKPiArCWVudW0gcG9ydCBwb3J0ID0g ZW5jb2Rlci0+cG9ydDsKPiArCXUzMiB2YWw7Cj4gIAo+IC0JZm9yX2VhY2hfb2xkX2Nvbm5lY3Rv cl9pbl9zdGF0ZShvbGRfc3RhdGUsIGNvbm4sIG9sZF9jb25uX3N0YXRlLCBpKSB7Cj4gLQkJc3Ry dWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIgPQo+IC0JCQl0b19pbnRlbF9lbmNvZGVyKG9sZF9j b25uX3N0YXRlLT5iZXN0X2VuY29kZXIpOwo+IC0JCWVudW0gcG9ydCBwb3J0Owo+ICsJbXV0ZXhf bG9jaygmZGV2X3ByaXYtPmRwbGxfbG9jayk7Cj4gIAo+IC0JCWlmIChvbGRfY29ubl9zdGF0ZS0+ Y3J0YyAhPSBjcnRjKQo+IC0JCQljb250aW51ZTsKPiArCXZhbCA9IEk5MTVfUkVBRChEUENMS0Ff Q0ZHQ1IwX0lDTCk7Cj4gKwl2YWwgfD0gaWNsX2RwY2xrYV9jZmdjcjBfY2xrX29mZihkZXZfcHJp diwgcG9ydCk7Cj4gKwlJOTE1X1dSSVRFKERQQ0xLQV9DRkdDUjBfSUNMLCB2YWwpOwo+ICAKPiAt CQlwb3J0ID0gZW5jb2Rlci0+cG9ydDsKPiAtCQltdXRleF9sb2NrKCZkZXZfcHJpdi0+ZHBsbF9s b2NrKTsKPiAtCQlJOTE1X1dSSVRFKERQQ0xLQV9DRkdDUjBfSUNMLAo+IC0JCQkgICBJOTE1X1JF QUQoRFBDTEtBX0NGR0NSMF9JQ0wpIHwKPiAtCQkJICAgaWNsX2RwY2xrYV9jZmdjcjBfY2xrX29m ZihkZXZfcHJpdiwgcG9ydCkpOwo+IC0JCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmRwbGxfbG9j ayk7Cj4gLQl9Cj4gKwltdXRleF91bmxvY2soJmRldl9wcml2LT5kcGxsX2xvY2spOwo+ICB9Cj4g IAo+ICB2b2lkIGljbF9zYW5pdGl6ZV9lbmNvZGVyX3BsbF9tYXBwaW5nKHN0cnVjdCBpbnRlbF9l bmNvZGVyICplbmNvZGVyKQo+IEBAIC0zMjA4LDYgKzMxODQsOSBAQCBzdGF0aWMgdm9pZCBpbnRl bF9kZGlfcHJlX2VuYWJsZShzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiAgCj4gIAlX QVJOX09OKGNydGNfc3RhdGUtPmhhc19wY2hfZW5jb2Rlcik7Cj4gIAo+ICsJaWYgKElOVEVMX0dF TihkZXZfcHJpdikgPj0gMTEpCj4gKwkJaWNsX21hcF9wbGxzX3RvX3BvcnRzKGVuY29kZXIsIGNy dGNfc3RhdGUpOwo+ICsKPiAgCWludGVsX3NldF9jcHVfZmlmb191bmRlcnJ1bl9yZXBvcnRpbmco ZGV2X3ByaXYsIHBpcGUsIHRydWUpOwo+ICAKPiAgCWlmIChpbnRlbF9jcnRjX2hhc190eXBlKGNy dGNfc3RhdGUsIElOVEVMX09VVFBVVF9IRE1JKSkgewo+IEBAIC0zMzA2LDYgKzMyODUsOCBAQCBz dGF0aWMgdm9pZCBpbnRlbF9kZGlfcG9zdF9kaXNhYmxlKHN0cnVjdCBpbnRlbF9lbmNvZGVyICpl bmNvZGVyLAo+ICAJCQkJICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm9sZF9jcnRj X3N0YXRlLAo+ICAJCQkJICAgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKm9sZF9j b25uX3N0YXRlKQo+ICB7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0 b19pOTE1KGVuY29kZXItPmJhc2UuZGV2KTsKPiArCj4gIAkvKgo+ICAJICogV2hlbiBjYWxsZWQg ZnJvbSBEUCBNU1QgY29kZToKPiAgCSAqIC0gb2xkX2Nvbm5fc3RhdGUgd2lsbCBiZSBOVUxMCj4g QEAgLTMzMjUsNiArMzMwNiw5IEBAIHN0YXRpYyB2b2lkIGludGVsX2RkaV9wb3N0X2Rpc2FibGUo c3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCj4gIAllbHNlCj4gIAkJaW50ZWxfZGRpX3Bv c3RfZGlzYWJsZV9kcChlbmNvZGVyLAo+ICAJCQkJCSAgb2xkX2NydGNfc3RhdGUsIG9sZF9jb25u X3N0YXRlKTsKPiArCj4gKwlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSkKPiArCQlpY2xf dW5tYXBfcGxsc190b19wb3J0cyhlbmNvZGVyKTsKPiAgfQo+ICAKPiAgdm9pZCBpbnRlbF9kZGlf ZmRpX3Bvc3RfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gaW5kZXggZDA3ZmE0NDU2MTUwLi41NTlkYjk4YjVh NGEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gQEAgLTU3MDQsOSAr NTcwNCw2IEBAIHN0YXRpYyB2b2lkIGhhc3dlbGxfY3J0Y19lbmFibGUoc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKnBpcGVfY29uZmlnLAo+ICAJaWYgKHBpcGVfY29uZmlnLT5zaGFyZWRfZHBsbCkK PiAgCQlpbnRlbF9lbmFibGVfc2hhcmVkX2RwbGwocGlwZV9jb25maWcpOwo+ICAKPiAtCWlmIChJ TlRFTF9HRU4oZGV2X3ByaXYpID49IDExKQo+IC0JCWljbF9tYXBfcGxsc190b19wb3J0cyhjcnRj LCBwaXBlX2NvbmZpZywgb2xkX3N0YXRlKTsKPiAtCj4gIAlpbnRlbF9lbmNvZGVyc19wcmVfZW5h YmxlKGNydGMsIHBpcGVfY29uZmlnLCBvbGRfc3RhdGUpOwo+ICAKPiAgCWlmIChpbnRlbF9jcnRj X2hhc19kcF9lbmNvZGVyKHBpcGVfY29uZmlnKSkKPiBAQCAtNTkwOCw5ICs1OTA1LDYgQEAgc3Rh dGljIHZvaWQgaGFzd2VsbF9jcnRjX2Rpc2FibGUoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKm9s ZF9jcnRjX3N0YXRlLAo+ICAKPiAgCWludGVsX2VuY29kZXJzX3Bvc3RfZGlzYWJsZShjcnRjLCBv bGRfY3J0Y19zdGF0ZSwgb2xkX3N0YXRlKTsKPiAgCj4gLQlpZiAoSU5URUxfR0VOKGRldl9wcml2 KSA+PSAxMSkKPiAtCQlpY2xfdW5tYXBfcGxsc190b19wb3J0cyhjcnRjLCBvbGRfY3J0Y19zdGF0 ZSwgb2xkX3N0YXRlKTsKPiAtCj4gIAlpbnRlbF9lbmNvZGVyc19wb3N0X3BsbF9kaXNhYmxlKGNy dGMsIG9sZF9jcnRjX3N0YXRlLCBvbGRfc3RhdGUpOwo+ICB9Cj4gIAo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2Rydi5oCj4gaW5kZXggNDBlZGIyMTA4N2E3Li45MDE4YmUyMTcxZWUgMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kcnYuaAo+IEBAIC0xNTIyLDEyICsxNTIyLDYgQEAgdTggaW50ZWxfZGRp X2RwX3ByZV9lbXBoYXNpc19tYXgoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCj4gIAkJ CQkgdTggdm9sdGFnZV9zd2luZyk7Cj4gIGludCBpbnRlbF9kZGlfdG9nZ2xlX2hkY3Bfc2lnbmFs bGluZyhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqaW50ZWxfZW5jb2RlciwKPiAgCQkJCSAgICAgYm9v bCBlbmFibGUpOwo+IC12b2lkIGljbF9tYXBfcGxsc190b19wb3J0cyhzdHJ1Y3QgZHJtX2NydGMg KmNydGMsCj4gLQkJCSAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+IC0J CQkgICBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqb2xkX3N0YXRlKTsKPiAtdm9pZCBpY2xfdW5t YXBfcGxsc190b19wb3J0cyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gLQkJCSAgICAgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4gLQkJCSAgICAgc3RydWN0IGRybV9hdG9t aWNfc3RhdGUgKm9sZF9zdGF0ZSk7Cj4gIHZvaWQgaWNsX3Nhbml0aXplX2VuY29kZXJfcGxsX21h cHBpbmcoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIpOwo+ICAKPiAgdW5zaWduZWQgaW50 IGludGVsX2ZiX2FsaWduX2hlaWdodChjb25zdCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwK PiAtLSAKPiAyLjExLjAKCi0tIApWaWxsZSBTeXJqw6Rsw6QKSW50ZWwKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJ bnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==