From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: Re: [RFC] drm/atomic+msm: add helper to implement legacy dirtyfb Date: Wed, 4 Apr 2018 13:49:07 +0200 Message-ID: <4386c0a5-e8e4-34d7-a977-4136e1dec44f@linux.intel.com> References: <20180403224225.26776-1-robdclark@gmail.com> <20180404100300.GE3881@phenom.ffwll.local> <20180404102108.GF3881@phenom.ffwll.local> <4976c166-32b2-75ef-ee78-7e7893dd4121@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Rob Clark Cc: Thomas Hellstrom , David Airlie , linux-arm-msm , Linux Kernel Mailing List , dri-devel , Sean Paul , =?UTF-8?B?VmlsbGUgU3lyasOkbMOk?= , Gustavo Padovan , Deepak Singh Rawat , freedreno , Lukasz Spintzyk List-Id: linux-arm-msm@vger.kernel.org T3AgMDQtMDQtMTggb20gMTM6Mzcgc2NocmVlZiBSb2IgQ2xhcms6Cj4gT24gV2VkLCBBcHIgNCwg MjAxOCBhdCA2OjM2IEFNLCBNYWFydGVuIExhbmtob3JzdAo+IDxtYWFydGVuLmxhbmtob3JzdEBs aW51eC5pbnRlbC5jb20+IHdyb3RlOgo+PiBPcCAwNC0wNC0xOCBvbSAxMjoyMSBzY2hyZWVmIERh bmllbCBWZXR0ZXI6Cj4+PiBPbiBXZWQsIEFwciAwNCwgMjAxOCBhdCAxMjowMzowMFBNICswMjAw LCBEYW5pZWwgVmV0dGVyIHdyb3RlOgo+Pj4+IE9uIFR1ZSwgQXByIDAzLCAyMDE4IGF0IDA2OjQy OjIzUE0gLTA0MDAsIFJvYiBDbGFyayB3cm90ZToKPj4+Pj4gQWRkIGFuIGF0b21pYyBoZWxwZXIg dG8gaW1wbGVtZW50IGRpcnR5ZmIgc3VwcG9ydC4gIFRoaXMgaXMgbmVlZGVkIHRvCj4+Pj4+IHN1 cHBvcnQgRFNJIGNvbW1hbmQtbW9kZSBwYW5lbHMgd2l0aCB4MTEgdXNlcnNwYWNlIChpZS4gd2hl biB3ZSBjYW4ndAo+Pj4+PiByZWx5IG9uIHBhZ2VmbGlwcyB0byB0cmlnZ2VyIGEgZmx1c2ggdG8g dGhlIHBhbmVsKS4KPj4+Pj4KPj4+Pj4gVG8gc2lnbmFsIHRvIHRoZSBkcml2ZXIgdGhhdCB0aGUg YXN5bmMgYXRvbWljIHVwZGF0ZSBuZWVkcyB0bwo+Pj4+PiBzeW5jaHJvbml6ZSB3aXRoIGZlbmNl cywgZXZlbiB0aG91Z2ggdGhlIGZiIGRpZG4ndCBjaGFuZ2UsIHRoZQo+Pj4+PiBkcm1fYXRvbWlj X3N0YXRlOjpkaXJ0eSBmbGFnIGlzIGFkZGVkLgo+Pj4+Pgo+Pj4+PiBTaWduZWQtb2ZmLWJ5OiBS b2IgQ2xhcmsgPHJvYmRjbGFya0BnbWFpbC5jb20+Cj4+Pj4+IC0tLQo+Pj4+PiBCYWNrZ3JvdW5k OiB0aGVyZSBhcmUgYSBudW1iZXIgb2YgZGlmZmVyZW50IGZvbGtzIHdvcmtpbmcgb24gZ2V0dGlu Zwo+Pj4+PiB1cHN0cmVhbSBrZXJuZWwgd29ya2luZyBvbiB2YXJpb3VzIGRpZmZlcmVudCBwaG9u ZXMvdGFibGV0cyB3aXRoIHFjb20KPj4+Pj4gU29DJ3MuLiBtYW55IG9mIHRoZW0gaGF2ZSBjb21t YW5kIG1vZGUgcGFuZWxzLCBzbyB3ZSBraW5kIG9mIG5lZWQgYQo+Pj4+PiB3YXkgdG8gc3VwcG9y dCB0aGUgbGVnYWN5IGRpcnR5ZmIgaW9jdGwgZm9yIHgxMSBzdXBwb3J0Lgo+Pj4+Pgo+Pj4+PiBJ IGtub3cgdGhlcmUgaXMgd29yayBvbiBhIHByb3ByZXIgbm9uLWxlZ2FjeSBhdG9taWMgcHJvcGVy dHkgZm9yCj4+Pj4+IHVzZXJzcGFjZSB0byBjb21tdW5pY2F0ZSBkaXJ0eS1yZWN0KHMpIHRvIHRo ZSBrZXJuZWwsIHNvIHRoaXMgY2FuCj4+Pj4+IGJlIGltcHJvdmVkIGZyb20gdHJpZ2dlcmluZyBh IGZ1bGwtZnJhbWUgZmx1c2ggb25jZSB0aGF0IGlzIGluCj4+Pj4+IHBsYWNlLiAgQnV0IHdlIGtp bmRhIG5lZWRhIGEgc3RvcC1nYXAgc29sdXRpb24uCj4+Pj4+Cj4+Pj4+IEkgaGFkIGNvbnNpZGVy ZWQgYW4gaW4tZHJpdmVyIHNvbHV0aW9uIGZvciB0aGlzLCBidXQgdGhpbmdzIGdldCBhCj4+Pj4+ IGJpdCB0cmlja3kgaWYgdXNlcnNwYWNlIGFuZHMgdXAgY29tYmluaW5nIGRpcnR5ZmIgaW9jdGxz IHdpdGggcGFnZS0KPj4+Pj4gZmxpcHMsIGJlY2F1c2Ugd2UgbmVlZCB0byBzeW5jaHJvbml6ZSBz ZXR0aW5nIHZhcmlvdXMgQ1RMLkZMVVNIIGJpdHMKPj4+Pj4gd2l0aCBzZXR0aW5nIHRoZSBDVEwu U1RBUlQgYml0LiAgKGllLiByZWFsbHkgYWxsIHdlIG5lZWQgdG8gZG8gZm9yCj4+Pj4+IGNtZCBt b2RlIHBhbmVscyBpcyBiYW5nIENUTC5TVEFSVCwgYnV0IGlzIHRoaXMgZW5kcyB1cCByYWNpbmcg d2l0aAo+Pj4+PiBwYWdlZmxpcHMgc2V0dGluZyBGTFVTSCBiaXRzLCB0aGVuIGJhZCB0aGluZ3Mu KSAgVGhlIGVhc2llc3Qgc29sbgo+Pj4+PiBpcyB0byB3cmFwIHRoaXMgdXAgYXMgYW4gYXRvbWlj IGNvbW1pdCBhbmQgcmVseSBvbiB0aGUgd29ya2VyIHRvCj4+Pj4+IHNlcmlhbGl6ZSB0aGluZ3Mu ICBIZW5jZSBhZGRpbmcgYW4gYXRvbWljIGRpcnR5ZmIgaGVscGVyLgo+Pj4+Pgo+Pj4+PiBJIGd1 ZXNzIGF0IGxlYXN0IHRoZSBoZWxwZXIsIHdpdGggc29tZSBzbWFsbCBhZGRpdGlvbiB0byB0cmFu c2xhdGUKPj4+Pj4gYW5kIHBhc3MtdGhydSB0aGUgZGlydHkgcmVjdChzKSBpcyB1c2VmdWwgdG8g dGhlIGZpbmFsIGF0b21pYyBkaXJ0eS0KPj4+Pj4gcmVjdCBwcm9wZXJ0eSBzb2x1dGlvbi4gIERl cGVuZGluZyBvbiBob3cgZmFyIG9mZiB0aGF0IGlzLCBhIHN0b3AtCj4+Pj4+IGdhcCBzb2x1dGlv biBjb3VsZCBiZSB1c2VmdWwuCj4+Pj4+Cj4+Pj4+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21p Y19oZWxwZXIuYyB8IDY2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4+ Pj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2F0b21pYy5jICAgIHwgIDUgKystCj4+Pj4+ICBk cml2ZXJzL2dwdS9kcm0vbXNtL21zbV9mYi5jICAgICAgICB8ICAxICsKPj4+Pj4gIGluY2x1ZGUv ZHJtL2RybV9hdG9taWNfaGVscGVyLmggICAgIHwgIDQgKysrCj4+Pj4+ICBpbmNsdWRlL2RybS9k cm1fcGxhbmUuaCAgICAgICAgICAgICB8ICA5ICsrKysrCj4+Pj4+ICA1IGZpbGVzIGNoYW5nZWQs IDg0IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPj4+Pj4KPj4+Pj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2Ry bV9hdG9taWNfaGVscGVyLmMKPj4+Pj4gaW5kZXggYzM1NjU0NTkxYzEyLi5hNTc4ZGM2ODFiMjcg MTAwNjQ0Cj4+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX2hlbHBlci5jCj4+ Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX2hlbHBlci5jCj4+Pj4+IEBAIC0z NTA0LDYgKzM1MDQsNyBAQCB2b2lkIF9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRl X3N0YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+Pj4+PiAgICAgaWYgKHN0YXRlLT5mYikK Pj4+Pj4gICAgICAgICAgICAgZHJtX2ZyYW1lYnVmZmVyX2dldChzdGF0ZS0+ZmIpOwo+Pj4+Pgo+ Pj4+PiArICAgc3RhdGUtPmRpcnR5ID0gZmFsc2U7Cj4+Pj4+ICAgICBzdGF0ZS0+ZmVuY2UgPSBO VUxMOwo+Pj4+PiAgICAgc3RhdGUtPmNvbW1pdCA9IE5VTEw7Cj4+Pj4+ICB9Cj4+Pj4+IEBAIC0z ODQ3LDYgKzM4NDgsNzEgQEAgaW50IGRybV9hdG9taWNfaGVscGVyX2xlZ2FjeV9nYW1tYV9zZXQo c3RydWN0IGRybV9jcnRjICpjcnRjLAo+Pj4+PiAgfQo+Pj4+PiAgRVhQT1JUX1NZTUJPTChkcm1f YXRvbWljX2hlbHBlcl9sZWdhY3lfZ2FtbWFfc2V0KTsKPj4+Pj4KPj4+Pj4gKy8qKgo+Pj4+PiAr ICogZHJtX2F0b21pY19oZWxwZXJfZGlydHlmYiAtIGhlbHBlciBmb3IgZGlydHlmYgo+Pj4+PiAr ICoKPj4+Pj4gKyAqIEEgaGVscGVyIHRvIGltcGxlbWVudCBkcm1fZnJhbWVidWZmZXJfZnVuY3M6 OmRpcnR5Cj4+Pj4+ICsgKi8KPj4+Pj4gK2ludCBkcm1fYXRvbWljX2hlbHBlcl9kaXJ0eWZiKHN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAo+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LCB1bnNpZ25lZCBmbGFncywKPj4+Pj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb2xvciwgc3RydWN0IGRybV9jbGlwX3JlY3Qg KmNsaXBzLAo+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bV9jbGlw cykKPj4+Pj4gK3sKPj4+Pj4gKyAgIHN0cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0eCBjdHg7 Cj4+Pj4+ICsgICBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGU7Cj4+Pj4+ICsgICBzdHJ1 Y3QgZHJtX3BsYW5lICpwbGFuZTsKPj4+Pj4gKyAgIGludCByZXQgPSAwOwo+Pj4+PiArCj4+Pj4+ ICsgICAvKgo+Pj4+PiArICAgICogV2hlbiBjYWxsZWQgZnJvbSBpb2N0bCwgd2UgYXJlIGludGVy cnVwdGFibGUsIGJ1dCBub3Qgd2hlbgo+Pj4+PiArICAgICogY2FsbGVkIGludGVybmFsbHkgKGll LiBkZWZpbyB3b3JrZXIpCj4+Pj4+ICsgICAgKi8KPj4+Pj4gKyAgIGRybV9tb2Rlc2V0X2FjcXVp cmVfaW5pdCgmY3R4LAo+Pj4+PiArICAgICAgICAgICBmaWxlX3ByaXYgPyBEUk1fTU9ERVNFVF9B Q1FVSVJFX0lOVEVSUlVQVElCTEUgOiAwKTsKPj4+Pj4gKwo+Pj4+PiArICAgc3RhdGUgPSBkcm1f YXRvbWljX3N0YXRlX2FsbG9jKGZiLT5kZXYpOwo+Pj4+PiArICAgaWYgKCFzdGF0ZSkgewo+Pj4+ PiArICAgICAgICAgICByZXQgPSAtRU5PTUVNOwo+Pj4+PiArICAgICAgICAgICBnb3RvIG91dDsK Pj4+Pj4gKyAgIH0KPj4+Pj4gKyAgIHN0YXRlLT5hY3F1aXJlX2N0eCA9ICZjdHg7Cj4+Pj4+ICsK Pj4+Pj4gK3JldHJ5Ogo+Pj4+PiArICAgZHJtX2Zvcl9lYWNoX3BsYW5lKHBsYW5lLCBmYi0+ZGV2 KSB7Cj4+Pj4+ICsgICAgICAgICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRl Owo+Pj4+PiArCj4+Pj4+ICsgICAgICAgICAgIGlmIChwbGFuZS0+c3RhdGUtPmZiICE9IGZiKQo+ Pj4+PiArICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+Pj4+PiArCj4+Pj4+ICsgICAgICAg ICAgIHBsYW5lX3N0YXRlID0gZHJtX2F0b21pY19nZXRfcGxhbmVfc3RhdGUoc3RhdGUsIHBsYW5l KTsKPj4+Pj4gKyAgICAgICAgICAgaWYgKElTX0VSUihwbGFuZV9zdGF0ZSkpIHsKPj4+Pj4gKyAg ICAgICAgICAgICAgICAgICByZXQgPSBQVFJfRVJSKHBsYW5lX3N0YXRlKTsKPj4+Pj4gKyAgICAg ICAgICAgICAgICAgICBnb3RvIG91dDsKPj4+Pj4gKyAgICAgICAgICAgfQo+Pj4+PiArCj4+Pj4+ ICsgICAgICAgICAgIHBsYW5lX3N0YXRlLT5kaXJ0eSA9IHRydWU7Cj4+Pj4+ICsgICB9Cj4+Pj4+ ICsKPj4+Pj4gKyAgIHJldCA9IGRybV9hdG9taWNfbm9uYmxvY2tpbmdfY29tbWl0KHN0YXRlKTsK Pj4+Pj4gKwo+Pj4+PiArb3V0Ogo+Pj4+PiArICAgaWYgKHJldCA9PSAtRURFQURMSykgewo+Pj4+ PiArICAgICAgICAgICBkcm1fYXRvbWljX3N0YXRlX2NsZWFyKHN0YXRlKTsKPj4+Pj4gKyAgICAg ICAgICAgcmV0ID0gZHJtX21vZGVzZXRfYmFja29mZigmY3R4KTsKPj4+Pj4gKyAgICAgICAgICAg aWYgKCFyZXQpCj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgZ290byByZXRyeTsKPj4+Pj4gKyAg IH0KPj4+Pj4gKwo+Pj4+PiArICAgZHJtX2F0b21pY19zdGF0ZV9wdXQoc3RhdGUpOwo+Pj4+PiAr Cj4+Pj4+ICsgICBkcm1fbW9kZXNldF9kcm9wX2xvY2tzKCZjdHgpOwo+Pj4+PiArICAgZHJtX21v ZGVzZXRfYWNxdWlyZV9maW5pKCZjdHgpOwo+Pj4+PiArCj4+Pj4+ICsgICByZXR1cm4gcmV0Owo+ Pj4+PiArCj4+Pj4+ICt9Cj4+Pj4+ICtFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfaGVscGVyX2Rp cnR5ZmIpOwo+Pj4+PiArCj4+Pj4+ICAvKioKPj4+Pj4gICAqIF9fZHJtX2F0b21pY19oZWxwZXJf cHJpdmF0ZV9kdXBsaWNhdGVfc3RhdGUgLSBjb3B5IGF0b21pYyBwcml2YXRlIHN0YXRlCj4+Pj4+ ICAgKiBAb2JqOiBDUlRDIG9iamVjdAo+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L21zbS9tc21fYXRvbWljLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9hdG9taWMuYwo+Pj4+ PiBpbmRleCBiZjVmOGMzOWYzNGQuLmJiNTVhMDQ4ZTk4YiAxMDA2NDQKPj4+Pj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL21zbS9tc21fYXRvbWljLmMKPj4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L21zbS9tc21fYXRvbWljLmMKPj4+Pj4gQEAgLTIwMSw3ICsyMDEsMTAgQEAgaW50IG1zbV9hdG9t aWNfY29tbWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4+Pj4+ICAgICAgKiBGaWd1cmUgb3V0 IHdoYXQgZmVuY2UgdG8gd2FpdCBmb3I6Cj4+Pj4+ICAgICAgKi8KPj4+Pj4gICAgIGZvcl9lYWNo X29sZG5ld19wbGFuZV9pbl9zdGF0ZShzdGF0ZSwgcGxhbmUsIG9sZF9wbGFuZV9zdGF0ZSwgbmV3 X3BsYW5lX3N0YXRlLCBpKSB7Cj4+Pj4+IC0gICAgICAgICAgIGlmICgobmV3X3BsYW5lX3N0YXRl LT5mYiAhPSBvbGRfcGxhbmVfc3RhdGUtPmZiKSAmJiBuZXdfcGxhbmVfc3RhdGUtPmZiKSB7Cj4+ Pj4+ICsgICAgICAgICAgIGJvb2wgc3luY19mYiA9IG5ld19wbGFuZV9zdGF0ZS0+ZmIgJiYKPj4+ Pj4gKyAgICAgICAgICAgICAgICAgICAoKG5ld19wbGFuZV9zdGF0ZS0+ZmIgIT0gb2xkX3BsYW5l X3N0YXRlLT5mYikgfHwKPj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgbmV3X3BsYW5lX3N0YXRl LT5kaXJ0eSk7Cj4+Pj4gV2h5IGRvIHlvdSBoYXZlIHRoaXMgb3B0aW1pemF0aW9uIGV2ZW4gaGVy ZT8gSW1vIGZsaXBwaW5nIHRvIHRoZSBzYW1lIGZiCj4+Pj4gc2hvdWxkIHJlc3VsdCBpbiB0aGUg ZmIgZ2V0dGluZyBmdWxseSB1cGxvYWRlZCwgd2hldGhlciB5b3UncmUgZG9pbmcgYQo+Pj4+IGxl Z2FjeSBwYWdlX2ZsaXAsIGFuZCBhdG9taWMgb25lIG9yIGp1c3QgYSBwbGFuZSB1cGRhdGUuCj4+ Pj4KPj4+PiBJaXJjIHNvbWUgdXNlcnNwYWNlIGRvZXMgdXNlIHRoYXQgYXMgZXNzZW50aWFsbHkg YSBmdWxsLXBsYW5lIGZyb250YnVmZmVyCj4+Pj4gcmVuZGVyaW5nIGZsdXNoIGFscmVhZHkuIElP VyBJIGRvbid0IHRoaW5rIHdlIG5lZWQgeW91cgo+Pj4+IHBsYW5lX3N0YXRlLT5kaXJ0eSwgaXQn cyBpbXBsaWVkIHRvIGFsd2F5cyBiZSB0cnVlIC0gd2h5IHdvdWxkIHVzZXJzcGFjZQo+Pj4+IGRv IGEgZmxpcCBvdGhlcndpc2U/Cj4+Pj4KPj4+PiBUaGUgaGVscGVyIGl0c2VsZiB0byBtYXAgZGly dHlmYiB0byBhIG5vbmJsb2NraW5nIGF0b21pYyBjb21taXQgbG9va3MKPj4+PiByZWFzb25hYmxl LCBidXQgbWlzc2VzIGEgYnVuY2ggb2YgdGhlIHRyaWNrZXJ5IGRpc2N1c3NlZCB3aXRoIE5vcmFs ZiBhbmQKPj4+PiBvdGhlcnMgSSB0aGluay4KPj4+IE9rLCBJJ3ZlIGRvbmUgc29tZSBoaXN0b3J5 IGRpZ2dpbmc6Cj4+Pgo+Pj4gLSBpOTE1IGFuZCBub3V2ZWF1IHVuY29uZGl0aW9uYWxseSB3YWl0 IGZvciBmZW5jZXMsIGV2ZW4gZm9yIHNhbWUtZmIKPj4+ICAgZmxpcHMuCj4+PiAtIG5vIGlkZWEg d2hhdCBhbWRncHUgYW5kIHZtd2dmeCBhcmUgZG9pbmcsIHRoZXkncmUgbm90IHVzaW5nCj4+PiAg IHBsYW5lX3N0YXRlLT5mZW5jZSBmb3IgaW1wbGljaXQgZmVuY2VzLgo+PiBJIHRob3VnaHQgcGxh bmVfc3RhdGUtPmZlbmNlIHdhcyB1c2VkIGZvciBleHBsaWNpdCBmZW5jZXMsIHNvIGl0cyB1c2Ug YnkgZHJpdmVycwo+PiB3b3VsZCBpbnRlcmZlcmUgd2l0aCBpdD8gSSBkb24ndCB0aGluayBmZW5j aW5nIHdvdWxkIHdvcmsgb24gbXNtIG9yIHZjNC4uCj4gZm9yIGltcGxpY2l0IGZlbmNpbmcgd2Ug ZmlzaCBvdXQgdGhlIGltcGxpY2l0IGZlbmNlIGFuZCBzdHVmZiBpdCBpbgo+IHBsYW5lX3N0YXRl LT5mZW5jZS4uCldoYXQgaGFwcGVucyB3aGVuIHVzZXJzcGFjZSBwYXNzZXMgYSBmZW5jZSBmZCB0 byBpbl9mZW5jZV9mZD8KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KRnJlZWRyZW5vIG1haWxpbmcgbGlzdApGcmVlZHJlbm9AbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZnJlZWRy ZW5vCg==