From mboxrd@z Thu Jan 1 00:00:00 1970 From: Shashank Sharma Subject: [PATCH v12 5/8] drm/i915: Add AVI infoframe support for LSPCON Date: Fri, 12 Oct 2018 11:53:11 +0530 Message-ID: <1539325394-20788-5-git-send-email-shashank.sharma@intel.com> References: <1539325394-20788-1-git-send-email-shashank.sharma@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 431526E442 for ; Fri, 12 Oct 2018 06:16:22 +0000 (UTC) In-Reply-To: <1539325394-20788-1-git-send-email-shashank.sharma@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 Cc: Imre Deak List-Id: intel-gfx@lists.freedesktop.org SW4gb3JkZXIgdG8gcGFzcyBBVkkgaW5mb2ZyYW1lcyB0byBMU1BDT04gZGV2aWNlcywgYSBzb3Vy Y2UgaGFzIHRvCndyaXRlIHRoZW0gaW4gYSB2ZW5kb3IgcmVjb21tZW5kZWQgbWV0aG9kIGFuZCBs b2NhdGlvbi4KClRoaXMgcGF0Y2ggc2VyaWVzOgotIGFkZHMgZ2VuZXJpYyBMU1BDT04gaW5mb2Zy YW1lIHNldHVwIGZ1bmN0aW9ucy4KLSByZWdpc3RlcnMgdGhlc2UgZnVuY3Rpb25zIGludG8gZXhp c3RpbmcgQVZJIGluZm9mcmFtZSBmcmFtZXdvcmsuCi0gdHJpZ2dlcnMgdGhlc2UgZnVuY3Rpb25z IGZyb20gbW9kZXNldCBzZXF1ZW5jZS4KCk5leHQgcGF0Y2hlcyBpbiB0aGUgc2VyaWVzIHdpbGwg YWRkIHZlbmRvciBzcGVjaWZpYyBjb2RlLgoKVjI6IEFkZGVkIG5ldyBwYXJhbWV0ZXIgdG8gYWxp Z24gd2l0aCBuZXcgZGVmaW5pdGlvbiBvZgogICAgZHJtX2hkbWlfYXZpX2luZm9mcmFtZV9xdWFu dF9yYW5nZQpWMzogQWRkZWQgci1iIGZyb20gTWFhcnRlbiAoZm9yIFYyKQogICAgQWRkZWQgbmV3 IHBhcmFtZXRlciBvdXRwdXRfZm9ybWF0IGluIHN0cnVjdCBsc3Bjb24gdG8gYWNjb21tb2RhdGUK ICAgIFZpbGxlJ3MgcmV2aWV3IGNvbW1lbnRzIG9uIGxhc3QgcGF0Y2ggb2YgdGhlIHNlcmllcwpW NDogQWRkcmVzc2VkIFZpbGxlJ3MgcmV2aWV3IGNvbW1lbnQKICAgIC0gRG8gbm90IGFkZCBvdXRw dXRfZm9ybWF0IGluIExTUENPTiBzdGF0ZSwgYXMgaXRzIG5vbi1hdG9taWMuIEFkZAogICAgICB0 aGlzIGludG8gQ1JUQyBzdGF0ZSAoYWRkZWQgaW4gYSBsYXRlciBwYXRjaCkuClY1OiBSZWJhc2UK VjY6IFJlYmFzZQpWNzogUmViYXNlClY4OiBSZWJhc2UKVjk6IFJlYmFzZQpWMTA6IFJlYmFzZQpW MTE6IEFjY29tbW9kYXRlZCByZWJhc2luZyBjaGFuZ2VzIGluIGludGVsX2dpdF9wb3J0IGZwdHJz IChzZXRfaW5mb2ZyYW1lcyBhbmQgaW5mb2ZyYW1lX2VuYWJsZWQpCgpDYzogVmlsbGUgU3lyamFs YSA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+CkNjOiBJbXJlIERlYWsgPGltcmUuZGVh a0BsaW51eC5pbnRlbC5jb20+CkNjOiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9y c3RAbGludXguaW50ZWwuY29tPgpSZXZpZXdlZC1ieTogTWFhcnRlbiBMYW5raG9yc3QgPG1hYXJ0 ZW4ubGFua2hvcnN0QGxpbnV4LmludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTogU2hhc2hhbmsgU2hh cm1hIDxzaGFzaGFuay5zaGFybWFAaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2RkaS5jICAgIHwgMTkgKysrKysrKysrKystLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2Rydi5oICAgIHwgMTMgKysrKysrKysrLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfaGRtaS5jICAgfCAxMyArKysrKysrLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9s c3Bjb24uYyB8IDQ5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDQgZmls ZXMgY2hhbmdlZCwgODYgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kZGkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2RkaS5jCmluZGV4IDdkODY4ZjUuLmJlMjExMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2RkaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2RkaS5jCkBAIC0yOTc4LDEwICsyOTc4LDIyIEBAIHN0YXRpYyB2b2lkIGludGVsX2RkaV9wcmVf ZW5hYmxlKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAogCiAJaW50ZWxfc2V0X2NwdV9m aWZvX3VuZGVycnVuX3JlcG9ydGluZyhkZXZfcHJpdiwgcGlwZSwgdHJ1ZSk7CiAKLQlpZiAoaW50 ZWxfY3J0Y19oYXNfdHlwZShjcnRjX3N0YXRlLCBJTlRFTF9PVVRQVVRfSERNSSkpCisJaWYgKGlu dGVsX2NydGNfaGFzX3R5cGUoY3J0Y19zdGF0ZSwgSU5URUxfT1VUUFVUX0hETUkpKSB7CiAJCWlu dGVsX2RkaV9wcmVfZW5hYmxlX2hkbWkoZW5jb2RlciwgY3J0Y19zdGF0ZSwgY29ubl9zdGF0ZSk7 Ci0JZWxzZQorCX0gZWxzZSB7CisJCXN0cnVjdCBpbnRlbF9sc3Bjb24gKmxzcGNvbiA9CisJCQkJ ZW5jX3RvX2ludGVsX2xzcGNvbigmZW5jb2Rlci0+YmFzZSk7CisKIAkJaW50ZWxfZGRpX3ByZV9l bmFibGVfZHAoZW5jb2RlciwgY3J0Y19zdGF0ZSwgY29ubl9zdGF0ZSk7CisJCWlmIChsc3Bjb24t PmFjdGl2ZSkgeworCQkJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqZGlnX3BvcnQgPQorCQkJ CQllbmNfdG9fZGlnX3BvcnQoJmVuY29kZXItPmJhc2UpOworCisJCQlkaWdfcG9ydC0+c2V0X2lu Zm9mcmFtZXMoZW5jb2RlciwKKwkJCQkJCSBjcnRjX3N0YXRlLT5oYXNfaW5mb2ZyYW1lLAorCQkJ CQkJIGNydGNfc3RhdGUsIGNvbm5fc3RhdGUpOworCQl9CisJfQogfQogCiBzdGF0aWMgdm9pZCBp bnRlbF9kaXNhYmxlX2RkaV9idWYoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIpCkBAIC0z ODQ1LDggKzM4NTcsNiBAQCB2b2lkIGludGVsX2RkaV9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwgZW51bSBwb3J0IHBvcnQpCiAJCU1JU1NJTkdfQ0FTRShwb3J0KTsKIAl9 CiAKLQlpbnRlbF9pbmZvZnJhbWVfaW5pdChpbnRlbF9kaWdfcG9ydCk7Ci0KIAlpZiAoaW5pdF9k cCkgewogCQlpZiAoIWludGVsX2RkaV9pbml0X2RwX2Nvbm5lY3RvcihpbnRlbF9kaWdfcG9ydCkp CiAJCQlnb3RvIGVycjsKQEAgLTM4NzUsNiArMzg4NSw3IEBAIHZvaWQgaW50ZWxfZGRpX2luaXQo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBlbnVtIHBvcnQgcG9ydCkKIAkJCQlw b3J0X25hbWUocG9ydCkpOwogCX0KIAorCWludGVsX2luZm9mcmFtZV9pbml0KGludGVsX2RpZ19w b3J0KTsKIAlyZXR1cm47CiAKIGVycjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKaW5kZXggNjk4 MWU3Mi4uOGM0MDJkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2 LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKQEAgLTEzMTgsNiArMTMx OCwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaW50ZWxfZW5jb2Rlcl9pc19kcChzdHJ1Y3QgaW50 ZWxfZW5jb2RlciAqZW5jb2RlcikKIAl9CiB9CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGludGVs X2xzcGNvbiAqCitlbmNfdG9faW50ZWxfbHNwY29uKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rl cikKK3sKKwlyZXR1cm4gJmVuY190b19kaWdfcG9ydChlbmNvZGVyKS0+bHNwY29uOworfQorCiBz dGF0aWMgaW5saW5lIHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKgogZHBfdG9fZGlnX3BvcnQo c3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKIHsKQEAgLTE4NzksNyArMTg4NSw2IEBAIGJvb2wg aW50ZWxfaGRtaV9oYW5kbGVfc2lua19zY3JhbWJsaW5nKHN0cnVjdCBpbnRlbF9lbmNvZGVyICpl bmNvZGVyLAogdm9pZCBpbnRlbF9kcF9kdWFsX21vZGVfc2V0X3RtZHNfb3V0cHV0KHN0cnVjdCBp bnRlbF9oZG1pICpoZG1pLCBib29sIGVuYWJsZSk7CiB2b2lkIGludGVsX2luZm9mcmFtZV9pbml0 KHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0KTsKIAotCiAvKiBpbnRl bF9sdmRzLmMgKi8KIGJvb2wgaW50ZWxfbHZkc19wb3J0X2VuYWJsZWQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LAogCQkJICAgICBpOTE1X3JlZ190IGx2ZHNfcmVnLCBlbnVtIHBp cGUgKnBpcGUpOwpAQCAtMjIxMCw2ICsyMjE1LDEyIEBAIHZvaWQgaW50ZWxfY29sb3JfbG9hZF9s dXRzKHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSk7CiBib29sIGxzcGNvbl9pbml0 KHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0KTsKIHZvaWQgbHNwY29u X3Jlc3VtZShzdHJ1Y3QgaW50ZWxfbHNwY29uICpsc3Bjb24pOwogdm9pZCBsc3Bjb25fd2FpdF9w Y29uX21vZGUoc3RydWN0IGludGVsX2xzcGNvbiAqbHNwY29uKTsKK3ZvaWQgbHNwY29uX3NldF9p bmZvZnJhbWVzKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAorCQkJICAgYm9vbCBlbmFi bGUsCisJCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJ CSAgIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlKTsKK2Jvb2wg bHNwY29uX2luZm9mcmFtZV9lbmFibGVkKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAor CQkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKnBpcGVfY29uZmlnKTsKIAog LyogaW50ZWxfcGlwZV9jcmMuYyAqLwogI2lmZGVmIENPTkZJR19ERUJVR19GUwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfaGRtaS5jCmluZGV4IGUyY2M1ZWQuLmQyMjMyZTMgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9oZG1pLmMKQEAgLTIzMjEsOSArMjMyMSwxNiBAQCB2b2lkIGludGVsX2luZm9mcmFtZV9p bml0KHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0KQogCQlpbnRlbF9k aWdfcG9ydC0+c2V0X2luZm9mcmFtZXMgPSBnNHhfc2V0X2luZm9mcmFtZXM7CiAJCWludGVsX2Rp Z19wb3J0LT5pbmZvZnJhbWVfZW5hYmxlZCA9IGc0eF9pbmZvZnJhbWVfZW5hYmxlZDsKIAl9IGVs c2UgaWYgKEhBU19EREkoZGV2X3ByaXYpKSB7Ci0JCWludGVsX2RpZ19wb3J0LT53cml0ZV9pbmZv ZnJhbWUgPSBoc3dfd3JpdGVfaW5mb2ZyYW1lOwotCQlpbnRlbF9kaWdfcG9ydC0+c2V0X2luZm9m cmFtZXMgPSBoc3dfc2V0X2luZm9mcmFtZXM7Ci0JCWludGVsX2RpZ19wb3J0LT5pbmZvZnJhbWVf ZW5hYmxlZCA9IGhzd19pbmZvZnJhbWVfZW5hYmxlZDsKKwkJaWYgKGludGVsX2RpZ19wb3J0LT5s c3Bjb24uYWN0aXZlKSB7CisJCQlpbnRlbF9kaWdfcG9ydC0+c2V0X2luZm9mcmFtZXMgPSBsc3Bj b25fc2V0X2luZm9mcmFtZXM7CisJCQlpbnRlbF9kaWdfcG9ydC0+aW5mb2ZyYW1lX2VuYWJsZWQg PQorCQkJCQkJbHNwY29uX2luZm9mcmFtZV9lbmFibGVkOworCQl9IGVsc2UgeworCQkJaW50ZWxf ZGlnX3BvcnQtPnNldF9pbmZvZnJhbWVzID0gaHN3X3NldF9pbmZvZnJhbWVzOworCQkJaW50ZWxf ZGlnX3BvcnQtPmluZm9mcmFtZV9lbmFibGVkID0KKwkJCQkJCWhzd19pbmZvZnJhbWVfZW5hYmxl ZDsKKwkJCWludGVsX2RpZ19wb3J0LT53cml0ZV9pbmZvZnJhbWUgPSBoc3dfd3JpdGVfaW5mb2Zy YW1lOworCQl9CiAJfSBlbHNlIGlmIChIQVNfUENIX0lCWChkZXZfcHJpdikpIHsKIAkJaW50ZWxf ZGlnX3BvcnQtPndyaXRlX2luZm9mcmFtZSA9IGlieF93cml0ZV9pbmZvZnJhbWU7CiAJCWludGVs X2RpZ19wb3J0LT5zZXRfaW5mb2ZyYW1lcyA9IGlieF9zZXRfaW5mb2ZyYW1lczsKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xzcGNvbi5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfbHNwY29uLmMKaW5kZXggNTZmODBiNy4uOGQ0OTcyNyAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHNwY29uLmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfbHNwY29uLmMKQEAgLTIzNCw2ICsyMzQsNTUgQEAgc3RhdGljIHZvaWQgbHNw Y29uX3Jlc3VtZV9pbl9wY29uX3dhKHN0cnVjdCBpbnRlbF9sc3Bjb24gKmxzcGNvbikKIAlEUk1f REVCVUdfS01TKCJMU1BDT04gRFAgZGVzY3JpcHRvciBtaXNtYXRjaCBhZnRlciByZXN1bWVcbiIp OwogfQogCit2b2lkIGxzcGNvbl9zZXRfaW5mb2ZyYW1lcyhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAq ZW5jb2RlciwKKwkJCSAgIGJvb2wgZW5hYmxlLAorCQkJICAgY29uc3Qgc3RydWN0IGludGVsX2Ny dGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkgICBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9z dGF0ZSAqY29ubl9zdGF0ZSkKK3sKKwlzc2l6ZV90IHJldDsKKwl1bmlvbiBoZG1pX2luZm9mcmFt ZSBmcmFtZTsKKwl1aW50OF90IGJ1ZltWSURFT19ESVBfREFUQV9TSVpFXTsKKwlzdHJ1Y3QgaW50 ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9ydCA9IGVuY190b19kaWdfcG9ydCgmZW5jb2Rlci0+YmFz ZSk7CisJc3RydWN0IGludGVsX2xzcGNvbiAqbHNwY29uID0gJmRpZ19wb3J0LT5sc3Bjb247CisJ c3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9ICZkaWdfcG9ydC0+ZHA7CisJc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvciA9ICZpbnRlbF9kcC0+YXR0YWNoZWRfY29ubmVjdG9yLT5iYXNl OworCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gJmNydGNfc3RhdGUtPmJh c2UuYWRqdXN0ZWRfbW9kZTsKKwlib29sIGlzX2hkbWkyX3NpbmsgPSBjb25uZWN0b3ItPmRpc3Bs YXlfaW5mby5oZG1pLnNjZGMuc3VwcG9ydGVkOworCisJaWYgKCFsc3Bjb24tPmFjdGl2ZSkgewor CQlEUk1fRVJST1IoIldyaXRpbmcgaW5mb2ZyYW1lcyB3aGlsZSBMU1BDT04gZGlzYWJsZWQgP1xu Iik7CisJCXJldHVybjsKKwl9CisKKwlyZXQgPSBkcm1faGRtaV9hdmlfaW5mb2ZyYW1lX2Zyb21f ZGlzcGxheV9tb2RlKCZmcmFtZS5hdmksCisJCQkJCQkgICAgICAgbW9kZSwgaXNfaGRtaTJfc2lu ayk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0VSUk9SKCJjb3VsZG4ndCBmaWxsIEFWSSBpbmZv ZnJhbWVcbiIpOworCQlyZXR1cm47CisJfQorCisJZHJtX2hkbWlfYXZpX2luZm9mcmFtZV9xdWFu dF9yYW5nZSgmZnJhbWUuYXZpLCBtb2RlLAorCQkJCQkgICBjcnRjX3N0YXRlLT5saW1pdGVkX2Nv bG9yX3JhbmdlID8KKwkJCQkJICAgSERNSV9RVUFOVElaQVRJT05fUkFOR0VfTElNSVRFRCA6CisJ CQkJCSAgIEhETUlfUVVBTlRJWkFUSU9OX1JBTkdFX0ZVTEwsCisJCQkJCSAgIGZhbHNlLCBpc19o ZG1pMl9zaW5rKTsKKworCXJldCA9IGhkbWlfaW5mb2ZyYW1lX3BhY2soJmZyYW1lLCBidWYsIHNp emVvZihidWYpKTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBwYWNr IEFWSSBJRlxuIik7CisJCXJldHVybjsKKwl9CisKKwlkaWdfcG9ydC0+d3JpdGVfaW5mb2ZyYW1l KGVuY29kZXIsIGNydGNfc3RhdGUsIEhETUlfSU5GT0ZSQU1FX1RZUEVfQVZJLAorCQkJCSAgYnVm LCByZXQpOworfQorCitib29sIGxzcGNvbl9pbmZvZnJhbWVfZW5hYmxlZChzdHJ1Y3QgaW50ZWxf ZW5jb2RlciAqZW5jb2RlciwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRl ICpwaXBlX2NvbmZpZykKK3sKKwlyZXR1cm4gZW5jX3RvX2ludGVsX2xzcGNvbigmZW5jb2Rlci0+ YmFzZSktPmFjdGl2ZTsKK30KKwogdm9pZCBsc3Bjb25fcmVzdW1lKHN0cnVjdCBpbnRlbF9sc3Bj b24gKmxzcGNvbikKIHsKIAllbnVtIGRybV9sc3Bjb25fbW9kZSBleHBlY3RlZF9tb2RlOwotLSAK Mi43LjQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCklu dGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw czovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=