From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: Re: [PATCH v2 4/5] drm/i915: Make updating pipe without modeset atomic. Date: Thu, 27 Aug 2015 16:06:46 +0200 Message-ID: <55DF1976.9010007@linux.intel.com> References: <1440683046-27110-1-git-send-email-maarten.lankhorst@linux.intel.com> <1440683046-27110-5-git-send-email-maarten.lankhorst@linux.intel.com> <20150827135821.GE5176@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id 4FA0E6ED3D for ; Thu, 27 Aug 2015 07:06:48 -0700 (PDT) In-Reply-To: <20150827135821.GE5176@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: =?UTF-8?B?VmlsbGUgU3lyasOkbMOk?= Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T3AgMjctMDgtMTUgb20gMTU6NTggc2NocmVlZiBWaWxsZSBTeXJqw6Rsw6Q6Cj4gT24gVGh1LCBB dWcgMjcsIDIwMTUgYXQgMDM6NDQ6MDVQTSArMDIwMCwgTWFhcnRlbiBMYW5raG9yc3Qgd3JvdGU6 Cj4+IEluc3RlYWQgb2YgZG9pbmcgYSBoYWNrIGR1cmluZyBwcmltYXJ5IHBsYW5lIGNvbW1pdCB0 aGUgc3RhdGUKPj4gaXMgdXBkYXRlZCBkdXJpbmcgYXRvbWljIGV2YXNpb24uIEl0IGhhbmRsZXMg ZGlmZmVyZW5jZXMgaW4KPj4gcGlwZSBzaXplIGFuZCB0aGUgcGFuZWwgZml0dGVyLgo+Pgo+PiBU aGlzIGlzIGNvbnRpbnVpbmcgb24gdG9wIG9mIERhbmllbCdzIHdvcmsgdG8gbWFrZSBmYXN0ZXIK Pj4gbW9kZXNldHMgYXRvbWljLCBhbmQgbm90IHlldCBlbmFibGVkIGJ5IGRlZmF1bHQuCj4+Cj4+ IFNpZ25lZC1vZmYtYnk6IE1hYXJ0ZW4gTGFua2hvcnN0IDxtYWFydGVuLmxhbmtob3JzdEBsaW51 eC5pbnRlbC5jb20+Cj4+IC0tLQo+PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXRvbWlj LmMgIHwgICAyICstCj4+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgfCAx MTAgKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0KPj4gIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2Rydi5oICAgICB8ICAgMiArCj4+ICAzIGZpbGVzIGNoYW5nZWQsIDcyIGlu c2VydGlvbnMoKyksIDQyIGRlbGV0aW9ucygtKQo+Pgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfYXRvbWljLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9h dG9taWMuYwo+PiBpbmRleCA5MzM2ZTgwMzA5ODAuLjgyODdiODEyODdhMCAxMDA2NDQKPj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXRvbWljLmMKPj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfYXRvbWljLmMKPj4gQEAgLTk4LDggKzk4LDggQEAgaW50ZWxfY3J0 Y19kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+PiAgCQlyZXR1cm4gTlVM TDsKPj4gIAo+PiAgCV9fZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kdXBsaWNhdGVfc3RhdGUoY3J0 YywgJmNydGNfc3RhdGUtPmJhc2UpOwo+PiAtCj4+ICAJY3J0Y19zdGF0ZS0+YmFzZS5jcnRjID0g Y3J0YzsKPj4gKwljcnRjX3N0YXRlLT51cGRhdGVfcGlwZSA9IGZhbHNlOwo+PiAgCj4+ICAJcmV0 dXJuICZjcnRjX3N0YXRlLT5iYXNlOwo+PiAgfQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlz cGxheS5jCj4+IGluZGV4IDdiNWRmZTJmN2IyZC4uZDM4NzRhNjhjZGI5IDEwMDY0NAo+PiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4+IEBAIC0xMDgsNiArMTA4LDkgQEAgc3RhdGlj IHZvaWQgc2tsX2luaXRfc2NhbGVycyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgaW50 ZWxfY3J0YyAqaW50ZWxfY3IKPj4gIAlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSk7Cj4+ICBzdGF0aWMgaW50IGk5eHhfZ2V0X3JlZmNsayhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPj4gIAkJCSAgIGludCBudW1fY29ubmVjdG9ycyk7Cj4+ICtz dGF0aWMgdm9pZCBza3lsYWtlX3BmaXRfZW5hYmxlKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKTsK Pj4gK3N0YXRpYyB2b2lkIGlyb25sYWtlX3BmaXRfZGlzYWJsZShzdHJ1Y3QgaW50ZWxfY3J0YyAq Y3J0YywgYm9vbCBmb3JjZSk7Cj4+ICtzdGF0aWMgdm9pZCBpcm9ubGFrZV9wZml0X2VuYWJsZShz dHJ1Y3QgaW50ZWxfY3J0YyAqY3J0Yyk7Cj4+ICBzdGF0aWMgdm9pZCBpbnRlbF9tb2Rlc2V0X3Nl dHVwX2h3X3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+PiAgCj4+ICB0eXBlZGVmIHN0 cnVjdCB7Cj4+IEBAIC0zMzA1LDE0ICszMzA4LDIwIEBAIHN0YXRpYyBib29sIGludGVsX2NydGNf aGFzX3BlbmRpbmdfZmxpcChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4+ICAJcmV0dXJuIHBlbmRp bmc7Cj4+ICB9Cj4+ICAKPj4gLXN0YXRpYyB2b2lkIGludGVsX3VwZGF0ZV9waXBlX3NpemUoc3Ry dWN0IGludGVsX2NydGMgKmNydGMpCj4+ICtzdGF0aWMgdm9pZCBpbnRlbF91cGRhdGVfcGlwZV9j b25maWcoc3RydWN0IGludGVsX2NydGMgKmNydGMsCj4+ICsJCQkJICAgICBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUpCj4+ICB7Cj4+ICAJc3RydWN0IGRybV9kZXZpY2Ug KmRldiA9IGNydGMtPmJhc2UuZGV2Owo+PiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4+IC0JY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKmFkanVzdGVkX21vZGU7Cj4+ICsJc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29u ZmlnID0KPj4gKwkJdG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjLT5iYXNlLnN0YXRlKTsKPj4gIAo+ PiAtCWlmICghaTkxNS5mYXN0Ym9vdCkKPj4gLQkJcmV0dXJuOwo+PiArCS8qIGRybV9hdG9taWNf aGVscGVyX3VwZGF0ZV9sZWdhY3lfbW9kZXNldF9zdGF0ZSBtaWdodCBub3QgYmUgY2FsbGVkLiAq Lwo+PiArCWNydGMtPmJhc2UubW9kZSA9IGNydGMtPmJhc2Uuc3RhdGUtPm1vZGU7Cj4+ICsKPj4g KwlEUk1fREVCVUdfS01TKCJVcGRhdGluZyBwaXBlIHNpemUgJWl4JWkgLT4gJWl4JWlcbiIsCj4+ ICsJCSAgICAgIG9sZF9jcnRjX3N0YXRlLT5waXBlX3NyY193LCBvbGRfY3J0Y19zdGF0ZS0+cGlw ZV9zcmNfaCwKPj4gKwkJICAgICAgcGlwZV9jb25maWctPnBpcGVfc3JjX3csIHBpcGVfY29uZmln LT5waXBlX3NyY19oKTsKPj4gIAo+PiAgCWlmIChIQVNfRERJKGRldikpCj4+ICAJCWludGVsX3Nl dF9waXBlX2NzYygmY3J0Yy0+YmFzZSk7Cj4+IEBAIC0zMzI0LDI3ICszMzMzLDI2IEBAIHN0YXRp YyB2b2lkIGludGVsX3VwZGF0ZV9waXBlX3NpemUoc3RydWN0IGludGVsX2NydGMgKmNydGMpCj4+ ICAJICogZmFzdGJvb3QgY2FzZSwgd2UnbGwgZmxpcCwgYnV0IGlmIHdlIGRvbid0IHVwZGF0ZSB0 aGUgcGlwZXNyYyBhbmQKPj4gIAkgKiBwZml0IHN0YXRlLCB3ZSdsbCBlbmQgdXAgd2l0aCBhIGJp ZyBmYiBzY2FubmVkIG91dCBpbnRvIHRoZSB3cm9uZwo+PiAgCSAqIHNpemVkIHN1cmZhY2UuCj4+ IC0JICoKPj4gLQkgKiBUbyBmaXggdGhpcyBwcm9wZXJseSwgd2UgbmVlZCB0byBob2lzdCB0aGUg Y2hlY2tzIHVwIGludG8KPj4gLQkgKiBjb21wdXRlX21vZGVfY2hhbmdlcyAob3IgYWJvdmUpLCBj aGVjayB0aGUgYWN0dWFsIHBmaXQgc3RhdGUgYW5kCj4+IC0JICogd2hldGhlciB0aGUgcGxhdGZv cm0gYWxsb3dzIHBmaXQgZGlzYWJsZSB3aXRoIHBpcGUgYWN0aXZlLCBhbmQgb25seQo+PiAtCSAq IHRoZW4gdXBkYXRlIHRoZSBwaXBlc3JjIGFuZCBwZml0IHN0YXRlLCBldmVuIG9uIHRoZSBmbGlw IHBhdGguCj4+ICAJICovCj4+ICAKPj4gLQlhZGp1c3RlZF9tb2RlID0gJmNydGMtPmNvbmZpZy0+ YmFzZS5hZGp1c3RlZF9tb2RlOwo+PiAtCj4+ICAJSTkxNV9XUklURShQSVBFU1JDKGNydGMtPnBp cGUpLAo+PiAtCQkgICAoKGFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXkgLSAxKSA8PCAxNikg fAo+PiAtCQkgICAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSAtIDEpKTsKPj4gLQlpZiAo IWNydGMtPmNvbmZpZy0+cGNoX3BmaXQuZW5hYmxlZCAmJgo+PiAtCSAgICAoaW50ZWxfcGlwZV9o YXNfdHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfTFZEUykgfHwKPj4gLQkgICAgIGludGVsX3BpcGVf aGFzX3R5cGUoY3J0YywgSU5URUxfT1VUUFVUX0VEUCkpKSB7Cj4+IC0JCUk5MTVfV1JJVEUoUEZf Q1RMKGNydGMtPnBpcGUpLCAwKTsKPj4gLQkJSTkxNV9XUklURShQRl9XSU5fUE9TKGNydGMtPnBp cGUpLCAwKTsKPj4gLQkJSTkxNV9XUklURShQRl9XSU5fU1ooY3J0Yy0+cGlwZSksIDApOwo+PiAr CQkgICAoKHBpcGVfY29uZmlnLT5waXBlX3NyY193IC0gMSkgPDwgMTYpIHwKPj4gKwkJICAgKHBp cGVfY29uZmlnLT5waXBlX3NyY19oIC0gMSkpOwo+PiArCj4+ICsJLyogb24gc2t5bGFrZSB0aGlz IGlzIGRvbmUgYnkgZGV0YWNoaW5nIHNjYWxlcnMgKi8KPj4gKwlpZiAoSU5URUxfSU5GTyhkZXYp LT5nZW4gPT0gOSkgewo+PiArCQlza2xfZGV0YWNoX3NjYWxlcnMoY3J0Yyk7Cj4+ICsKPj4gKwkJ aWYgKHBpcGVfY29uZmlnLT5wY2hfcGZpdC5lbmFibGVkKQo+PiArCQkJc2t5bGFrZV9wZml0X2Vu YWJsZShjcnRjKTsKPj4gKwl9Cj4+ICsJZWxzZSBpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPCA5 ICYmCj4+ICsJICAgICAgICAgSEFTX1BDSF9TUExJVChkZXYpKSB7Cj4+ICsJCWlmIChwaXBlX2Nv bmZpZy0+cGNoX3BmaXQuZW5hYmxlZCkKPj4gKwkJCWlyb25sYWtlX3BmaXRfZW5hYmxlKGNydGMp Owo+PiArCQllbHNlIGlmIChvbGRfY3J0Y19zdGF0ZS0+cGNoX3BmaXQuZW5hYmxlZCkKPj4gKwkJ CWlyb25sYWtlX3BmaXRfZGlzYWJsZShjcnRjLCB0cnVlKTsKPj4gIAl9Cj4+IC0JY3J0Yy0+Y29u ZmlnLT5waXBlX3NyY193ID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheTsKPj4gLQljcnRj LT5jb25maWctPnBpcGVfc3JjX2ggPSBhZGp1c3RlZF9tb2RlLT5jcnRjX3ZkaXNwbGF5Owo+PiAg fQo+PiAgCj4+ICBzdGF0aWMgdm9pZCBpbnRlbF9mZGlfbm9ybWFsX3RyYWluKHN0cnVjdCBkcm1f Y3J0YyAqY3J0YykKPj4gQEAgLTUwMDMsNyArNTAxMSw3IEBAIHN0YXRpYyB2b2lkIGhhc3dlbGxf Y3J0Y19lbmFibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+PiAgCX0KPj4gIH0KPj4gIAo+PiAt c3RhdGljIHZvaWQgaXJvbmxha2VfcGZpdF9kaXNhYmxlKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRj KQo+PiArc3RhdGljIHZvaWQgaXJvbmxha2VfcGZpdF9kaXNhYmxlKHN0cnVjdCBpbnRlbF9jcnRj ICpjcnRjLCBib29sIGZvcmNlKQo+PiAgewo+PiAgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBj cnRjLT5iYXNlLmRldjsKPj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBk ZXYtPmRldl9wcml2YXRlOwo+PiBAQCAtNTAxMSw3ICs1MDE5LDcgQEAgc3RhdGljIHZvaWQgaXJv bmxha2VfcGZpdF9kaXNhYmxlKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQo+PiAgCj4+ICAJLyog VG8gYXZvaWQgdXBzZXR0aW5nIHRoZSBwb3dlciB3ZWxsIG9uIGhhc3dlbGwgb25seSBkaXNhYmxl IHRoZSBwZml0IGlmCj4+ICAJICogaXQncyBpbiB1c2UuIFRoZSBodyBzdGF0ZSBjb2RlIHdpbGwg bWFrZSBzdXJlIHdlIGdldCB0aGlzIHJpZ2h0LiAqLwo+PiAtCWlmIChjcnRjLT5jb25maWctPnBj aF9wZml0LmVuYWJsZWQpIHsKPj4gKwlpZiAoZm9yY2UgfHwgY3J0Yy0+Y29uZmlnLT5wY2hfcGZp dC5lbmFibGVkKSB7Cj4+ICAJCUk5MTVfV1JJVEUoUEZfQ1RMKHBpcGUpLCAwKTsKPj4gIAkJSTkx NV9XUklURShQRl9XSU5fUE9TKHBpcGUpLCAwKTsKPj4gIAkJSTkxNV9XUklURShQRl9XSU5fU1oo cGlwZSksIDApOwo+PiBAQCAtNTAzOCw3ICs1MDQ2LDcgQEAgc3RhdGljIHZvaWQgaXJvbmxha2Vf Y3J0Y19kaXNhYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPj4gIAo+PiAgCWludGVsX2Rpc2Fi bGVfcGlwZShpbnRlbF9jcnRjKTsKPj4gIAo+PiAtCWlyb25sYWtlX3BmaXRfZGlzYWJsZShpbnRl bF9jcnRjKTsKPj4gKwlpcm9ubGFrZV9wZml0X2Rpc2FibGUoaW50ZWxfY3J0YywgZmFsc2UpOwo+ PiAgCj4+ICAJaWYgKGludGVsX2NydGMtPmNvbmZpZy0+aGFzX3BjaF9lbmNvZGVyKQo+PiAgCQlp cm9ubGFrZV9mZGlfZGlzYWJsZShjcnRjKTsKPj4gQEAgLTUxMDEsNyArNTEwOSw3IEBAIHN0YXRp YyB2b2lkIGhhc3dlbGxfY3J0Y19kaXNhYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPj4gIAlp ZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPT0gOSkKPj4gIAkJc2t5bGFrZV9zY2FsZXJfZGlzYWJs ZShpbnRlbF9jcnRjKTsKPj4gIAllbHNlIGlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA8IDkpCj4+ IC0JCWlyb25sYWtlX3BmaXRfZGlzYWJsZShpbnRlbF9jcnRjKTsKPj4gKwkJaXJvbmxha2VfcGZp dF9kaXNhYmxlKGludGVsX2NydGMsIGZhbHNlKTsKPj4gIAllbHNlCj4+ICAJCU1JU1NJTkdfQ0FT RShJTlRFTF9JTkZPKGRldiktPmdlbik7Cj4+ICAKPj4gQEAgLTEyMjQ2LDcgKzEyMjU0LDYgQEAg c3RhdGljIGJvb2wgaW50ZWxfZnV6enlfY2xvY2tfY2hlY2soaW50IGNsb2NrMSwgaW50IGNsb2Nr MikKPj4gIAkJCSAgICBiYXNlLmhlYWQpIFwKPj4gIAkJaWYgKG1hc2sgJiAoMSA8PChpbnRlbF9j cnRjKS0+cGlwZSkpCj4+ICAKPj4gLQo+PiAgc3RhdGljIGJvb2wKPj4gIGludGVsX2NvbXBhcmVf bV9uKHVuc2lnbmVkIGludCBtLCB1bnNpZ25lZCBpbnQgbiwKPj4gIAkJICB1bnNpZ25lZCBpbnQg bTIsIHVuc2lnbmVkIGludCBuMiwKPj4gQEAgLTEyNDY3LDggKzEyNDc0LDE2IEBAIGludGVsX3Bp cGVfY29uZmlnX2NvbXBhcmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPj4gIAkJCQkgICAgICBE Uk1fTU9ERV9GTEFHX05WU1lOQyk7Cj4+ICAJfQo+PiAgCj4+IC0JUElQRV9DT05GX0NIRUNLX0ko cGlwZV9zcmNfdyk7Cj4+IC0JUElQRV9DT05GX0NIRUNLX0kocGlwZV9zcmNfaCk7Cj4+ICsJaWYg KCFhZGp1c3QpIHsKPj4gKwkJUElQRV9DT05GX0NIRUNLX0kocGlwZV9zcmNfdyk7Cj4+ICsJCVBJ UEVfQ09ORl9DSEVDS19JKHBpcGVfc3JjX2gpOwo+PiArCj4+ICsJCVBJUEVfQ09ORl9DSEVDS19J KHBjaF9wZml0LmVuYWJsZWQpOwo+PiArCQlpZiAoY3VycmVudF9jb25maWctPnBjaF9wZml0LmVu YWJsZWQpIHsKPj4gKwkJCVBJUEVfQ09ORl9DSEVDS19JKHBjaF9wZml0LnBvcyk7Cj4+ICsJCQlQ SVBFX0NPTkZfQ0hFQ0tfSShwY2hfcGZpdC5zaXplKTsKPj4gKwkJfQo+PiArCX0KPiBXaGF0J3Mg dGhpcyBoYWNrIG5vdz8gQXJlbid0IHlvdSBjb21wdXRpbmcgdGhlIGNvcnJlY3QgY29uZmlnIG9y IHdoeSBkbwo+IHlvdSBuZWVkIHRvIHNraXAgdGhlIHN0YXRlIGNoZWNrPwo+ClRoaXMgaXMgbm90 IGEgaGFjayBidXQgaW50ZW50aW9uYWwuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggYWRq dXN0PXRydWUgd2hlbiBjb21wYXJpbmcgdGhlIHN0YXRlCnRvIHNlZSBpZiBhIGZ1bGwgYmxvd24g bW9kZXNldCBpcyBuZWVkZWQgb3Igbm90LiBCZWNhdXNlICBpbnRlbF91cGRhdGVfcGlwZV9jb25m aWcgY2FuIG1vZGlmeQpwY2hfcGZpdCBhbmQgcGlwZV9zcmMqIHRoZXJlJ3Mgbm8gbmVlZCB0byBj b25zaWRlciBpdCB3aGVuIGRvaW5nIGEgbW9kZXNldC4KCkJ1dCB5b3UgZG8gbmVlZCB0aGUgdHJ1 ZSB2YWx1ZXMsIG9yIGludGVsX3VwZGF0ZV9waXBlX2NvbmZpZyB3aWxsIGRvIHRoZSB3cm9uZyB0 aGluZy4KCn5NYWFydGVuCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwt Z2Z4Cg==