From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 3/4] drm/i915/guc: refactor doorbell management code Date: Wed, 8 Jun 2016 14:11:41 +0100 Message-ID: <5758198D.5020407@linux.intel.com> References: <1465383329-14885-1-git-send-email-david.s.gordon@intel.com> <1465383329-14885-4-git-send-email-david.s.gordon@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id 6534B6E9F8 for ; Wed, 8 Jun 2016 13:15:31 +0000 (UTC) In-Reply-To: <1465383329-14885-4-git-send-email-david.s.gordon@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Dave Gordon , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDA4LzA2LzE2IDExOjU1LCBEYXZlIEdvcmRvbiB3cm90ZToKPiBEdXJpbmcgYSBoaWJlcm5h dGUvcmVzdW1lIGN5Y2xlLCB0aGUgZHJpdmVyLCB0aGUgR3VDLCBhbmQgdGhlIGRvb3JiZWxsCj4g aGFyZHdhcmUgY2FuIGVuZCB1cCBpbiBpbmNvbnNpc3RlbnQgc3RhdGVzLiBUaGlzIHBhdGNoIHJl ZmFjdG9ycyB0aGUKPiBkcml2ZXIncyBoYW5kbGluZyBhbmQgdHJhY2tpbmcgb2YgZG9vcmJlbGxz LCBpbiBwcmVwYXJhdGlvbiBmb3IgYSBsYXRlcgo+IG9uZSB3aGljaCB3aWxsIHJlc29sdmUgdGhl IGlzc3VlLgoKUGVyaGFwcyBhIGZldyB3b3JkIG9uIHRoZSBnb2FsLCBtZXRob2QgYW5kIHJlc3Vs dCBvZiByZWZhY3RvcmluZy4gV291bGQgCmJlIGdvb2QgZm9yIGRvY3VtZW50YXRpb24gYW5kIGVh c2llciByZXZpZXcuCgo+IFNpZ25lZC1vZmYtYnk6IERhdmUgR29yZG9uIDxkYXZpZC5zLmdvcmRv bkBpbnRlbC5jb20+Cj4gLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19zdWJt aXNzaW9uLmMgfCA4NyArKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KPiAgIDEgZmlsZSBj aGFuZ2VkLCA1MyBpbnNlcnRpb25zKCspLCAzNCBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19zdWJtaXNzaW9uLmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2d1Y19zdWJtaXNzaW9uLmMKPiBpbmRleCA3NTEwODQxLi5lZWY2N2M4 IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3VjX3N1Ym1pc3Npb24u Ywo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3VjX3N1Ym1pc3Npb24uYwo+IEBA IC0xNzQsMzYgKzE3NCw2MyBAQCBzdGF0aWMgaW50IGhvc3QyZ3VjX3NhbXBsZV9mb3JjZXdha2Uo c3RydWN0IGludGVsX2d1YyAqZ3VjLAo+ICAgICogY2xpZW50IG9iamVjdCB3aGljaCBjb250YWlu cyB0aGUgcGFnZSBiZWluZyB1c2VkIGZvciB0aGUgZG9vcmJlbGwKPiAgICAqLwo+Cj4gLXN0YXRp YyB2b2lkIGd1Y19pbml0X2Rvb3JiZWxsKHN0cnVjdCBpbnRlbF9ndWMgKmd1YywKPiAtCQkJICAg ICAgc3RydWN0IGk5MTVfZ3VjX2NsaWVudCAqY2xpZW50KQo+ICtzdGF0aWMgaW50IGd1Y191cGRh dGVfZG9vcmJlbGxfaWQoc3RydWN0IGk5MTVfZ3VjX2NsaWVudCAqY2xpZW50LAo+ICsJCQkJICBz dHJ1Y3QgZ3VjX2Rvb3JiZWxsX2luZm8gKmRvb3JiZWxsLAo+ICsJCQkJICB1MTYgbmV3X2lkKQo+ ICAgewo+IC0Jc3RydWN0IGd1Y19kb29yYmVsbF9pbmZvICpkb29yYmVsbDsKPiArCXN0cnVjdCBz Z190YWJsZSAqc2cgPSBjbGllbnQtPmd1Yy0+Y3R4X3Bvb2xfb2JqLT5wYWdlczsKPiArCXZvaWQg KmRvb3JiZWxsX2JpdG1hcCA9IGNsaWVudC0+Z3VjLT5kb29yYmVsbF9iaXRtYXA7Cj4gKwlzdHJ1 Y3QgZ3VjX2NvbnRleHRfZGVzYyBkZXNjOwo+ICsJc2l6ZV90IGxlbjsKPiArCj4gKwlpZiAoY2xp ZW50LT5kb29yYmVsbF9pZCAhPSBHVUNfSU5WQUxJRF9ET09SQkVMTF9JRCAmJgo+ICsJICAgIHRl c3RfYml0KGNsaWVudC0+ZG9vcmJlbGxfaWQsIGRvb3JiZWxsX2JpdG1hcCkpIHsKPiArCQkvKiBE ZWFjdGl2YXRlIHRoZSBvbGQgZG9vcmJlbGwgKi8KPiArCQlkb29yYmVsbC0+ZGJfc3RhdHVzID0g R1VDX0RPT1JCRUxMX0RJU0FCTEVEOwo+ICsJCSh2b2lkKWhvc3QyZ3VjX3JlbGVhc2VfZG9vcmJl bGwoY2xpZW50LT5ndWMsIGNsaWVudCk7Cj4gKwkJY2xlYXJfYml0KGNsaWVudC0+ZG9vcmJlbGxf aWQsIGRvb3JiZWxsX2JpdG1hcCk7Cj4gKwl9Cj4KPiAtCWRvb3JiZWxsID0gY2xpZW50LT5jbGll bnRfYmFzZSArIGNsaWVudC0+ZG9vcmJlbGxfb2Zmc2V0Owo+ICsJLyogVXBkYXRlIHRoZSBHdUMn cyBpZGVhIG9mIHRoZSBkb29yYmVsbCBJRCAqLwo+ICsJbGVuID0gc2dfcGNvcHlfdG9fYnVmZmVy KHNnLT5zZ2wsIHNnLT5uZW50cywgJmRlc2MsIHNpemVvZihkZXNjKSwKPiArCQkJICAgICBzaXpl b2YoZGVzYykgKiBjbGllbnQtPmN0eF9pbmRleCk7Cj4gKwlpZiAobGVuICE9IHNpemVvZihkZXNj KSkKPiArCQlyZXR1cm4gLUVGQVVMVDsKPiArCWRlc2MuZGJfaWQgPSBuZXdfaWQ7Cj4gKwlsZW4g PSBzZ19wY29weV9mcm9tX2J1ZmZlcihzZy0+c2dsLCBzZy0+bmVudHMsICZkZXNjLCBzaXplb2Yo ZGVzYyksCj4gKwkJCSAgICAgc2l6ZW9mKGRlc2MpICogY2xpZW50LT5jdHhfaW5kZXgpOwo+ICsJ aWYgKGxlbiAhPSBzaXplb2YoZGVzYykpCj4gKwkJcmV0dXJuIC1FRkFVTFQ7Cj4gKwo+ICsJY2xp ZW50LT5kb29yYmVsbF9pZCA9IG5ld19pZDsKPiArCWlmIChuZXdfaWQgPT0gR1VDX0lOVkFMSURf RE9PUkJFTExfSUQpCj4gKwkJcmV0dXJuIDA7Cj4KPiArCS8qIEFjdGl2YXRlIHRoZSBuZXcgZG9v cmJlbGwgKi8KPiArCXNldF9iaXQoY2xpZW50LT5kb29yYmVsbF9pZCwgZG9vcmJlbGxfYml0bWFw KTsKPiAgIAlkb29yYmVsbC0+ZGJfc3RhdHVzID0gR1VDX0RPT1JCRUxMX0VOQUJMRUQ7Cj4gICAJ ZG9vcmJlbGwtPmNvb2tpZSA9IDA7Cj4gKwlyZXR1cm4gaG9zdDJndWNfYWxsb2NhdGVfZG9vcmJl bGwoY2xpZW50LT5ndWMsIGNsaWVudCk7CgpBIGJ1bmNoIG9mIG5ldyBjb2RlIGhlcmUgd2hpY2gg d2Fzbid0IGRvbmUgb24gZG9vcmJlbGwgaW5pdCBiZWZvcmUuIApQb3B1bGF0aW5nIHRoZSBjdHhf cG9vbF9vYmogYW5kIGh1c3QyZ3VjIGNhbGwuIEkgdGhpbmsgdGhlIGNvbW1pdCBuZWVkcyAKdG8g ZXhwbGFpbiB3aGF0IGlzIGhhcHBlbmluZyBoZXJlLgoKTWF5YmUgaXQgaXMgbW9zdGx5IGEgbWF0 dGVyIG9mIGNvcHlpbmcgb3ZlciBzb21lIHRleHQgZnJvbSB0aGUgY292ZXIgCmxldHRlciwgYnV0 IGlkZWFsbHkgaXQgc2hvdWxkIGV4cGxhaW4gd2hhdCBpdCBpcyBkb2luZyBtb3JlIHByZWNpc2Vs eS4KCj4gICB9Cj4KPiAtc3RhdGljIHZvaWQgZ3VjX2Rpc2FibGVfZG9vcmJlbGwoc3RydWN0IGlu dGVsX2d1YyAqZ3VjLAo+IC0JCQkJIHN0cnVjdCBpOTE1X2d1Y19jbGllbnQgKmNsaWVudCkKPiAr c3RhdGljIHZvaWQgZ3VjX2luaXRfZG9vcmJlbGwoc3RydWN0IGludGVsX2d1YyAqZ3VjLAo+ICsJ CQkgICAgICBzdHJ1Y3QgaTkxNV9ndWNfY2xpZW50ICpjbGllbnQsCj4gKwkJCSAgICAgIHVpbnQx Nl90IGRiX2lkKQo+ICAgewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g Z3VjX3RvX2k5MTUoZ3VjKTsKPiAgIAlzdHJ1Y3QgZ3VjX2Rvb3JiZWxsX2luZm8gKmRvb3JiZWxs Owo+IC0JaTkxNV9yZWdfdCBkcmJyZWcgPSBHRU44X0RSQlJFR0woY2xpZW50LT5kb29yYmVsbF9p ZCk7Cj4gLQlpbnQgdmFsdWU7Cj4KPiAgIAlkb29yYmVsbCA9IGNsaWVudC0+Y2xpZW50X2Jhc2Ug KyBjbGllbnQtPmRvb3JiZWxsX29mZnNldDsKPgo+IC0JZG9vcmJlbGwtPmRiX3N0YXR1cyA9IEdV Q19ET09SQkVMTF9ESVNBQkxFRDsKPiAtCj4gLQlJOTE1X1dSSVRFKGRyYnJlZywgSTkxNV9SRUFE KGRyYnJlZykgJiB+R0VOOF9EUkJfVkFMSUQpOwo+ICsJZ3VjX3VwZGF0ZV9kb29yYmVsbF9pZChj bGllbnQsIGRvb3JiZWxsLCBkYl9pZCk7Cj4gK30KClRoaXMgZnVuY3Rpb24gZG9lcyBub3QgZW5k IHVwIGRvaW5nIGFueXRoaW5nIG5vdywganVzdCBhIHBhc3MtdGhyb3VnaCB0byAKZ3VjX3VwZGF0 ZV9kb29yYmVsbF9pZC4KCldoYXQgaGFwcGVucyB0byB0aGUgd3JpdGUgdG8gZHJicmVnID8gSXQg aXMgY29tcGxldGVseSBnb25lIGFuZCBhbHNvIApmcm9tIHRoZSBpbml0IGRvb3JiZWxsIHBhdGgg dG9nZXRoZXIgd2l0aCB0aGUgd3JpdGUgdG8gYW5vdGhlciByZWdpc3Rlci4KCj4KPiAtCXZhbHVl ID0gSTkxNV9SRUFEKGRyYnJlZyk7Cj4gLQlXQVJOX09OKCh2YWx1ZSAmIEdFTjhfRFJCX1ZBTElE KSAhPSAwKTsKPiArc3RhdGljIHZvaWQgZ3VjX2Rpc2FibGVfZG9vcmJlbGwoc3RydWN0IGludGVs X2d1YyAqZ3VjLAo+ICsJCQkJIHN0cnVjdCBpOTE1X2d1Y19jbGllbnQgKmNsaWVudCkKPiArewo+ ICsJc3RydWN0IGd1Y19kb29yYmVsbF9pbmZvICpkb29yYmVsbDsKPgo+IC0JSTkxNV9XUklURShH RU44X0RSQlJFR1UoY2xpZW50LT5kb29yYmVsbF9pZCksIDApOwo+IC0JSTkxNV9XUklURShkcmJy ZWcsIDApOwo+ICsJZG9vcmJlbGwgPSBjbGllbnQtPmNsaWVudF9iYXNlICsgY2xpZW50LT5kb29y YmVsbF9vZmZzZXQ7Cj4gKwlndWNfdXBkYXRlX2Rvb3JiZWxsX2lkKGNsaWVudCwgZG9vcmJlbGws IEdVQ19JTlZBTElEX0RPT1JCRUxMX0lEKTsKPgo+ICAgCS8qIFhYWDogd2FpdCBmb3IgYW55IGlu dGVycnVwdHMgKi8KPiAgIAkvKiBYWFg6IHdhaXQgZm9yIHdvcmtxdWV1ZSB0byBkcmFpbiAqLwo+ IEBAIC0yNTEsNyArMjc4LDcgQEAgc3RhdGljIHVpbnQxNl90IGFzc2lnbl9kb29yYmVsbChzdHJ1 Y3QgaW50ZWxfZ3VjICpndWMsIHVpbnQzMl90IHByaW9yaXR5KQo+ICAgCWlmIChpZCA9PSBlbmQp Cj4gICAJCWlkID0gR1VDX0lOVkFMSURfRE9PUkJFTExfSUQ7Cj4gICAJZWxzZQo+IC0JCWJpdG1h cF9zZXQoZ3VjLT5kb29yYmVsbF9iaXRtYXAsIGlkLCAxKTsKPiArCQlzZXRfYml0KGlkLCBndWMt PmRvb3JiZWxsX2JpdG1hcCk7CgpzZXRfYml0IGlzIGF0b21pYyAtIGlzIHRoZXJlIGEgcmVhc29u IGl0IGlzIHJlcXVpcmVkIGhlcmU/CgpBY3R1YWxseSB0aGUgc2FtZSBxdWVzdGlvbiBmb3IgdGhl IGNsZWFyX2JpdCBhYm92ZSwgd2hlcmUgaXQgd2FzIApiaXRtYXBfY2xlYXIgYmVmb3JlLgoKPgo+ ICAgCURSTV9ERUJVR19EUklWRVIoImFzc2lnbmVkICVzIHByaW9yaXR5IGRvb3JiZWxsIGlkIDB4 JXhcbiIsCj4gICAJCQloaV9wcmkgPyAiaGlnaCIgOiAibm9ybWFsIiwgaWQpOwo+IEBAIC0yNTks MTEgKzI4Niw2IEBAIHN0YXRpYyB1aW50MTZfdCBhc3NpZ25fZG9vcmJlbGwoc3RydWN0IGludGVs X2d1YyAqZ3VjLCB1aW50MzJfdCBwcmlvcml0eSkKPiAgIAlyZXR1cm4gaWQ7Cj4gICB9Cj4KPiAt c3RhdGljIHZvaWQgcmVsZWFzZV9kb29yYmVsbChzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsIHVpbnQx Nl90IGlkKQo+IC17Cj4gLQliaXRtYXBfY2xlYXIoZ3VjLT5kb29yYmVsbF9iaXRtYXAsIGlkLCAx KTsKPiAtfQo+IC0KPiAgIC8qCj4gICAgKiBJbml0aWFsaXNlIHRoZSBwcm9jZXNzIGRlc2NyaXB0 b3Igc2hhcmVkIHdpdGggdGhlIEd1QyBmaXJtd2FyZS4KPiAgICAqLwo+IEBAIC02NTcsOCArNjc5 LDYgQEAgc3RhdGljIHZvaWQgZ3VjX2NsaWVudF9mcmVlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs Cj4gICAJICovCj4KPiAgIAlpZiAoY2xpZW50LT5jbGllbnRfYmFzZSkgewo+IC0JCXVpbnQxNl90 IGRiX2lkID0gY2xpZW50LT5kb29yYmVsbF9pZDsKPiAtCj4gICAJCS8qCj4gICAJCSAqIElmIHdl IGdvdCBhcyBmYXIgYXMgc2V0dGluZyB1cCBhIGRvb3JiZWxsLCBtYWtlIHN1cmUKPiAgIAkJICog d2Ugc2h1dCBpdCBkb3duIGJlZm9yZSB1bm1hcHBpbmcgJiBkZWFsbG9jYXRpbmcgdGhlCj4gQEAg LTY2NiwxMiArNjg2LDggQEAgc3RhdGljIHZvaWQgZ3VjX2NsaWVudF9mcmVlKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCj4gICAJCSAqIEd1QyB0aGF0IHdlJ3ZlIGZpbmlzaGVkIHdpdGggaXQsIGZp bmFsbHkgZGVhbGxvY2F0ZQo+ICAgCQkgKiBpdCBpbiBvdXIgYml0bWFwCj4gICAJCSAqLwo+IC0J CWlmIChkYl9pZCAhPSBHVUNfSU5WQUxJRF9ET09SQkVMTF9JRCkgewo+ICsJCWlmIChjbGllbnQt PmRvb3JiZWxsX2lkICE9IEdVQ19JTlZBTElEX0RPT1JCRUxMX0lEKQo+ICAgCQkJZ3VjX2Rpc2Fi bGVfZG9vcmJlbGwoZ3VjLCBjbGllbnQpOwo+IC0JCQlpZiAodGVzdF9iaXQoZGJfaWQsIGd1Yy0+ ZG9vcmJlbGxfYml0bWFwKSkKPiAtCQkJCWhvc3QyZ3VjX3JlbGVhc2VfZG9vcmJlbGwoZ3VjLCBj bGllbnQpOwo+IC0JCQlyZWxlYXNlX2Rvb3JiZWxsKGd1YywgZGJfaWQpOwo+IC0JCX0KPgo+ICAg CQlrdW5tYXAoa21hcF90b19wYWdlKGNsaWVudC0+Y2xpZW50X2Jhc2UpKTsKPiAgIAl9Cj4gQEAg LTcwNiw2ICs3MjIsNyBAQCBzdGF0aWMgc3RydWN0IGk5MTVfZ3VjX2NsaWVudCAqZ3VjX2NsaWVu dF9hbGxvYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAgCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gICAJc3RydWN0IGludGVsX2d1YyAq Z3VjID0gJmRldl9wcml2LT5ndWM7Cj4gICAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i ajsKPiArCXVpbnQxNl90IGRiX2lkOwo+Cj4gICAJY2xpZW50ID0ga3phbGxvYyhzaXplb2YoKmNs aWVudCksIEdGUF9LRVJORUwpOwo+ICAgCWlmICghY2xpZW50KQo+IEBAIC03NDYsMjIgKzc2Mywy NCBAQCBzdGF0aWMgc3RydWN0IGk5MTVfZ3VjX2NsaWVudCAqZ3VjX2NsaWVudF9hbGxvYyhzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAgCWVsc2UKPiAgIAkJY2xpZW50LT5wcm9jX2Rlc2Nfb2Zm c2V0ID0gKEdVQ19EQl9TSVpFIC8gMik7Cj4KPiAtCWNsaWVudC0+ZG9vcmJlbGxfaWQgPSBhc3Np Z25fZG9vcmJlbGwoZ3VjLCBjbGllbnQtPnByaW9yaXR5KTsKPiAtCWlmIChjbGllbnQtPmRvb3Ji ZWxsX2lkID09IEdVQ19JTlZBTElEX0RPT1JCRUxMX0lEKQo+ICsJZGJfaWQgPSBhc3NpZ25fZG9v cmJlbGwoZ3VjLCBjbGllbnQtPnByaW9yaXR5KTsKPiArCWlmIChkYl9pZCA9PSBHVUNfSU5WQUxJ RF9ET09SQkVMTF9JRCkKPiAgIAkJLyogWFhYOiBldmljdCBhIGRvb3JiZWxsIGluc3RlYWQgKi8K PiAgIAkJZ290byBlcnI7Cj4KPiAgIAlndWNfaW5pdF9wcm9jX2Rlc2MoZ3VjLCBjbGllbnQpOwo+ ICAgCWd1Y19pbml0X2N0eF9kZXNjKGd1YywgY2xpZW50KTsKPiAtCWd1Y19pbml0X2Rvb3JiZWxs KGd1YywgY2xpZW50KTsKPiArCWd1Y19pbml0X2Rvb3JiZWxsKGd1YywgY2xpZW50LCBkYl9pZCk7 Cj4KPiAgIAkvKiBYWFg6IEFueSBjYWNoZSBmbHVzaGVzIG5lZWRlZD8gR2VuZXJhbCBkb21haW4g bWdtdCBjYWxscz8gKi8KPgo+ICAgCWlmIChob3N0Mmd1Y19hbGxvY2F0ZV9kb29yYmVsbChndWMs IGNsaWVudCkpCj4gICAJCWdvdG8gZXJyOwo+Cj4gLQlEUk1fREVCVUdfRFJJVkVSKCJuZXcgcHJp b3JpdHkgJXUgY2xpZW50ICVwOiBjdHhfaW5kZXggJXUgZGJfaWQgJXVcbiIsCj4gLQkJcHJpb3Jp dHksIGNsaWVudCwgY2xpZW50LT5jdHhfaW5kZXgsIGNsaWVudC0+ZG9vcmJlbGxfaWQpOwo+ICsJ RFJNX0RFQlVHX0RSSVZFUigibmV3IHByaW9yaXR5ICV1IGNsaWVudCAlcDogY3R4X2luZGV4ICV1 XG4iLAo+ICsJCXByaW9yaXR5LCBjbGllbnQsIGNsaWVudC0+Y3R4X2luZGV4KTsKPiArCURSTV9E RUJVR19EUklWRVIoImRvb3JiZWxsIGlkICV1LCBjYWNoZWxpbmUgb2Zmc2V0IDB4JXhcbiIsCj4g KwkJY2xpZW50LT5kb29yYmVsbF9pZCwgY2xpZW50LT5kb29yYmVsbF9vZmZzZXQpOwo+Cj4gICAJ cmV0dXJuIGNsaWVudDsKPgo+CgpSZWdhcmRzLAoKVHZydGtvCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=