From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: [PATCH 2/7] drm/i915: Program gen3- watermarks atomically Date: Mon, 7 Aug 2017 12:48:23 +0200 Message-ID: <20170807104828.21046-3-maarten.lankhorst@linux.intel.com> References: <20170807104828.21046-1-maarten.lankhorst@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mblankhorst.nl (mblankhorst.nl [IPv6:2a02:2308::216:3eff:fe92:dfa3]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4A7198979F for ; Mon, 7 Aug 2017 10:48:41 +0000 (UTC) In-Reply-To: <20170807104828.21046-1-maarten.lankhorst@linux.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 List-Id: intel-gfx@lists.freedesktop.org V2l0aCB0aGUgYXRvbWljIHdhdGVybWFyayBjYWxjdWxhdGlvbnMgY2FsY3VsYXRlIGludGVybWVk aWFyeSB3YXRlcm1hcmsKdmFsdWVzIGFuZCB1cGRhdGUgdGhlIHdhdGVybWFya3MgYXRvbWljYWxs eS4KClNpZ25lZC1vZmYtYnk6IE1hYXJ0ZW4gTGFua2hvcnN0IDxtYWFydGVuLmxhbmtob3JzdEBs aW51eC5pbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgfCAg IDUgKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIHwgICAyICstCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jICB8IDEwMyArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKystLS0tLS0KIDMgZmlsZXMgY2hhbmdlZCwgOTUgaW5zZXJ0aW9ucygrKSwgMTUgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggOTA3NjAzY2JhNDQ3Li4zYWMx N2YwZjQwNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMTc3NCw2ICsxNzc0LDEwIEBA IHN0cnVjdCBnNHhfd21fdmFsdWVzIHsKIAlib29sIGZiY19lbjsKIH07CiAKK3N0cnVjdCBpOXh4 X3dtX3ZhbHVlcyB7CisJYm9vbCBjeHNyOworfTsKKwogc3RydWN0IHNrbF9kZGJfZW50cnkgewog CXVpbnQxNl90IHN0YXJ0LCBlbmQ7CS8qIGluIG51bWJlciBvZiBibG9ja3MsICdlbmQnIGlzIGV4 Y2x1c2l2ZSAqLwogfTsKQEAgLTI0MzgsNiArMjQ0Miw3IEBAIHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlIHsKIAkJCXN0cnVjdCBza2xfd21fdmFsdWVzIHNrbF9odzsKIAkJCXN0cnVjdCB2bHZfd21f dmFsdWVzIHZsdjsKIAkJCXN0cnVjdCBnNHhfd21fdmFsdWVzIGc0eDsKKwkJCXN0cnVjdCBpOXh4 X3dtX3ZhbHVlcyBpOXh4OwogCQl9OwogCiAJCXVpbnQ4X3QgbWF4X2xldmVsOwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kcnYuaAppbmRleCBkNTNkMzQ3NTYwNDguLjE3NjI3NGQ5OWVlNiAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZHJ2LmgKQEAgLTYwMSw3ICs2MDEsNyBAQCBzdHJ1Y3QgaW50ZWxfY3J0Y193 bV9zdGF0ZSB7CiAJCQlzdHJ1Y3QgZzR4X3dtX3N0YXRlIG9wdGltYWw7CiAJCX0gZzR4OwogCQlz dHJ1Y3QgewotCQkJc3RydWN0IGk5eHhfd21fc3RhdGUgb3B0aW1hbDsKKwkJCXN0cnVjdCBpOXh4 X3dtX3N0YXRlIG9wdGltYWwsIGludGVybWVkaWF0ZTsKIAkJfSBpOXh4OwogCX07CiAKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9wbS5jCmluZGV4IDgwN2M5YTczMDAyMC4uMDhmZDM1OTMwN2U2IDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3BtLmMKQEAgLTQzOSw2ICs0MzksOCBAQCBib29sIGludGVsX3NldF9tZW1v cnlfY3hzcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGJvb2wgZW5hYmxlKQog CQlkZXZfcHJpdi0+d20udmx2LmN4c3IgPSBlbmFibGU7CiAJZWxzZSBpZiAoSVNfRzRYKGRldl9w cml2KSkKIAkJZGV2X3ByaXYtPndtLmc0eC5jeHNyID0gZW5hYmxlOworCWVsc2UgaWYgKElOVEVM X0dFTihkZXZfcHJpdikgPD0gNCkKKwkJZGV2X3ByaXYtPndtLmk5eHguY3hzciA9IGVuYWJsZTsK IAltdXRleF91bmxvY2soJmRldl9wcml2LT53bS53bV9tdXRleCk7CiAKIAlyZXR1cm4gcmV0OwpA QCAtMjMxNSw2ICsyMzE3LDQ0IEBAIHN0YXRpYyBpbnQgaTl4eF9jb21wdXRlX3BpcGVfd20oc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRp YyBpbnQgaTl4eF9jb21wdXRlX2ludGVybWVkaWF0ZV93bShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LAorCQkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YywKKwkJCQkgICAgICAg c3RydWN0IGludGVsX2NydGNfc3RhdGUgKm5ld3N0YXRlKQoreworCXN0cnVjdCBpOXh4X3dtX3N0 YXRlICppbnRlcm1lZGlhdGUgPSAmbmV3c3RhdGUtPndtLmk5eHguaW50ZXJtZWRpYXRlOworCWNv bnN0IHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX2RybV9zdGF0ZSA9CisJCWRybV9hdG9taWNf Z2V0X29sZF9jcnRjX3N0YXRlKG5ld3N0YXRlLT5iYXNlLnN0YXRlLCAmaW50ZWxfY3J0Yy0+YmFz ZSk7CisJY29uc3Qgc3RydWN0IGk5eHhfd21fc3RhdGUgKm9sZCA9ICZ0b19pbnRlbF9jcnRjX3N0 YXRlKG9sZF9kcm1fc3RhdGUpLT53bS5pOXh4Lm9wdGltYWw7CisJY29uc3Qgc3RydWN0IGk5eHhf d21fc3RhdGUgKm9wdGltYWwgPSAmbmV3c3RhdGUtPndtLmk5eHgub3B0aW1hbDsKKworCS8qCisJ ICogU3RhcnQgd2l0aCB0aGUgZmluYWwsIHRhcmdldCB3YXRlcm1hcmtzLCB0aGVuIGNvbWJpbmUg d2l0aCB0aGUKKwkgKiBjdXJyZW50bHkgYWN0aXZlIHdhdGVybWFya3MgdG8gZ2V0IHZhbHVlcyB0 aGF0IGFyZSBzYWZlIGJvdGggYmVmb3JlCisJICogYW5kIGFmdGVyIHRoZSB2YmxhbmsuCisJICov CisJKmludGVybWVkaWF0ZSA9ICpvcHRpbWFsOworCWlmIChuZXdzdGF0ZS0+ZGlzYWJsZV9jeHNy KQorCQlpbnRlcm1lZGlhdGUtPmN4c3IgPSBmYWxzZTsKKworCWlmICghbmV3c3RhdGUtPmJhc2Uu YWN0aXZlIHx8CisJICAgIGRybV9hdG9taWNfY3J0Y19uZWVkc19tb2Rlc2V0KCZuZXdzdGF0ZS0+ YmFzZSkpCisJCWdvdG8gb3V0OworCisJaW50ZXJtZWRpYXRlLT5wbGFuZV93bSA9IG1pbihvbGQt PnBsYW5lX3dtLCBvcHRpbWFsLT5wbGFuZV93bSk7CisJaW50ZXJtZWRpYXRlLT5zci5wbGFuZSA9 IG1pbihvbGQtPnNyLnBsYW5lLCBvcHRpbWFsLT5zci5wbGFuZSk7CisKK291dDoKKwkvKgorCSAq IElmIG91ciBpbnRlcm1lZGlhdGUgV00gYXJlIGlkZW50aWNhbCB0byB0aGUgZmluYWwgV00sIHRo ZW4gd2UgY2FuCisJICogb21pdCB0aGUgcG9zdC12YmxhbmsgcHJvZ3JhbW1pbmc7IG9ubHkgdXBk YXRlIGlmIGl0J3MgZGlmZmVyZW50LgorCSAqLworCWlmIChuZXdzdGF0ZS0+YmFzZS5hY3RpdmUg JiYKKwkgICAgbWVtY21wKGludGVybWVkaWF0ZSwgb3B0aW1hbCwgc2l6ZW9mKCppbnRlcm1lZGlh dGUpKSAhPSAwKQorCQluZXdzdGF0ZS0+d20ubmVlZF9wb3N0dmJsX3VwZGF0ZSA9IHRydWU7CisK KwlyZXR1cm4gMDsKK30KKwogdm9pZCBpOXh4X3dtX2dldF9od19zdGF0ZShzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5 MTUoZGV2KTsKQEAgLTIzNDMsMTcgKzIzODMsMTUgQEAgdm9pZCBpOXh4X3dtX2dldF9od19zdGF0 ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCX0KIH0KIAotc3RhdGljIHZvaWQgaTl4eF91cGRh dGVfd20oc3RydWN0IGludGVsX2NydGMgKmNydGMpCitzdGF0aWMgdm9pZCBpOXh4X3Byb2dyYW1f d2F0ZXJtYXJrcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7Ci0Jc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7CisJ c3RydWN0IGludGVsX2NydGMgKmNydGM7CiAJdWludDMyX3QgZndhdGVyX2xvOwogCXVpbnQzMl90 IGZ3YXRlcl9oaTsKIAlpbnQgY3dtLCBzcndtID0gLTE7CiAJaW50IHBsYW5lYV93bSwgcGxhbmVi X3dtOwogCXN0cnVjdCBpbnRlbF9jcnRjICplbmFibGVkID0gTlVMTDsKIAotCWNydGMtPndtLmFj dGl2ZS5pOXh4ID0gY3J0Yy0+Y29uZmlnLT53bS5pOXh4Lm9wdGltYWw7Ci0KIAljcnRjID0gaW50 ZWxfZ2V0X2NydGNfZm9yX3BsYW5lKGRldl9wcml2LCAwKTsKIAlwbGFuZWFfd20gPSBjcnRjLT53 bS5hY3RpdmUuaTl4eC5wbGFuZV93bTsKIAlpZiAoaW50ZWxfY3J0Y19hY3RpdmUoY3J0YykpCkBA IC0yMzc5LDcgKzI0MTcsNyBAQCBzdGF0aWMgdm9pZCBpOXh4X3VwZGF0ZV93bShzdHJ1Y3QgaW50 ZWxfY3J0YyAqY3J0YykKIAljd20gPSAyOwogCiAJLyogUGxheSBzYWZlIGFuZCBkaXNhYmxlIHNl bGYtcmVmcmVzaCBiZWZvcmUgYWRqdXN0aW5nIHdhdGVybWFya3MuICovCi0JaW50ZWxfc2V0X21l bW9yeV9jeHNyKGRldl9wcml2LCBmYWxzZSk7CisJX2ludGVsX3NldF9tZW1vcnlfY3hzcihkZXZf cHJpdiwgZmFsc2UpOwogCiAJLyogQ2FsYyBzciBlbnRyaWVzIGZvciBvbmUgcGxhbmUgY29uZmln cyAqLwogCWlmIChlbmFibGVkKSB7CkBAIC0yNDA2LDE5ICsyNDQ0LDE3IEBAIHN0YXRpYyB2b2lk IGk5eHhfdXBkYXRlX3dtKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQogCUk5MTVfV1JJVEUoRldf QkxDMiwgZndhdGVyX2hpKTsKIAogCWlmIChlbmFibGVkKQotCQlpbnRlbF9zZXRfbWVtb3J5X2N4 c3IoZGV2X3ByaXYsIHRydWUpOworCQlfaW50ZWxfc2V0X21lbW9yeV9jeHNyKGRldl9wcml2LCB0 cnVlKTsKKworCWRldl9wcml2LT53bS5pOXh4LmN4c3IgPSBlbmFibGVkOwogfQogCi1zdGF0aWMg dm9pZCBpODQ1X3VwZGF0ZV93bShzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykKK3N0YXRpYyB2b2lk IGk4NDVfcHJvZ3JhbV93YXRlcm1hcmtzKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQogewogCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYp OwogCXVpbnQzMl90IGZ3YXRlcl9sbzsKIAlpbnQgcGxhbmVhX3dtOwogCi0JaWYgKCFpbnRlbF9j cnRjX2FjdGl2ZShjcnRjKSkKLQkJcmV0dXJuOwotCi0JY3J0Yy0+d20uYWN0aXZlLmk5eHggPSBj cnRjLT5jb25maWctPndtLmk5eHgub3B0aW1hbDsKIAlwbGFuZWFfd20gPSBjcnRjLT53bS5hY3Rp dmUuaTl4eC5wbGFuZV93bTsKIAogCWZ3YXRlcl9sbyA9IEk5MTVfUkVBRChGV19CTEMpICYgfjB4 ZmZmOwpAQCAtMjQyOSw2ICsyNDY1LDQxIEBAIHN0YXRpYyB2b2lkIGk4NDVfdXBkYXRlX3dtKHN0 cnVjdCBpbnRlbF9jcnRjICpjcnRjKQogCUk5MTVfV1JJVEUoRldfQkxDLCBmd2F0ZXJfbG8pOwog fQogCisKK3N0YXRpYyB2b2lkIGk5eHhfaW5pdGlhbF93YXRlcm1hcmtzKHN0cnVjdCBpbnRlbF9h dG9taWNfc3RhdGUgKnN0YXRlLAorCQkJCSAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRj X3N0YXRlKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUo Y3J0Y19zdGF0ZS0+YmFzZS5jcnRjLT5kZXYpOworCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0g dG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT5iYXNlLmNydGMpOworCXN0cnVjdCBpbnRlbF9jcnRj ICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT5iYXNlLmNydGMpOworCisJ bXV0ZXhfbG9jaygmZGV2X3ByaXYtPndtLndtX211dGV4KTsKKwljcnRjLT53bS5hY3RpdmUuaTl4 eCA9IGNydGNfc3RhdGUtPndtLmk5eHguaW50ZXJtZWRpYXRlOworCWlmIChJTlRFTF9JTkZPKGRl dl9wcml2KS0+bnVtX3BpcGVzID09IDEpCisJCWk4NDVfcHJvZ3JhbV93YXRlcm1hcmtzKGludGVs X2NydGMpOworCWVsc2UKKwkJaTl4eF9wcm9ncmFtX3dhdGVybWFya3MoZGV2X3ByaXYpOworCW11 dGV4X3VubG9jaygmZGV2X3ByaXYtPndtLndtX211dGV4KTsKK30KKworc3RhdGljIHZvaWQgaTl4 eF9vcHRpbWl6ZV93YXRlcm1hcmtzKHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlLAor CQkJCSAgICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGNfc3RhdGUtPmJhc2UuY3J0 Yy0+ZGV2KTsKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMo Y3J0Y19zdGF0ZS0+YmFzZS5jcnRjKTsKKworCWlmICghY3J0Y19zdGF0ZS0+d20ubmVlZF9wb3N0 dmJsX3VwZGF0ZSkKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPndtLndtX211 dGV4KTsKKwlpbnRlbF9jcnRjLT53bS5hY3RpdmUuaTl4eCA9IGNydGNfc3RhdGUtPndtLmk5eHgu b3B0aW1hbDsKKwlpZiAoSU5URUxfSU5GTyhkZXZfcHJpdiktPm51bV9waXBlcyA9PSAxKQorCQlp ODQ1X3Byb2dyYW1fd2F0ZXJtYXJrcyhpbnRlbF9jcnRjKTsKKwllbHNlCisJCWk5eHhfcHJvZ3Jh bV93YXRlcm1hcmtzKGRldl9wcml2KTsKKwltdXRleF91bmxvY2soJmRldl9wcml2LT53bS53bV9t dXRleCk7Cit9CisKIC8qIGxhdGVuY3kgbXVzdCBiZSBpbiAwLjF1cyB1bml0cy4gKi8KIHN0YXRp YyB1bnNpZ25lZCBpbnQgaWxrX3dtX21ldGhvZDEodW5zaWduZWQgaW50IHBpeGVsX3JhdGUsCiAJ CQkJICAgdW5zaWduZWQgaW50IGNwcCwKQEAgLTg4NTEsMTcgKzg5MjIsMjEgQEAgdm9pZCBpbnRl bF9pbml0X3BtKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAkJZGV2X3ByaXYt PmRpc3BsYXkudXBkYXRlX3dtID0gaTk2NV91cGRhdGVfd207CiAJfSBlbHNlIGlmIChJU19HRU4z KGRldl9wcml2KSkgewogCQlkZXZfcHJpdi0+ZGlzcGxheS5jb21wdXRlX3BpcGVfd20gPSBpOXh4 X2NvbXB1dGVfcGlwZV93bTsKLQkJZGV2X3ByaXYtPmRpc3BsYXkudXBkYXRlX3dtID0gaTl4eF91 cGRhdGVfd207CisJCWRldl9wcml2LT5kaXNwbGF5LmNvbXB1dGVfaW50ZXJtZWRpYXRlX3dtID0g aTl4eF9jb21wdXRlX2ludGVybWVkaWF0ZV93bTsKKworCQlkZXZfcHJpdi0+ZGlzcGxheS5pbml0 aWFsX3dhdGVybWFya3MgPSBpOXh4X2luaXRpYWxfd2F0ZXJtYXJrczsKKwkJZGV2X3ByaXYtPmRp c3BsYXkub3B0aW1pemVfd2F0ZXJtYXJrcyA9IGk5eHhfb3B0aW1pemVfd2F0ZXJtYXJrczsKIAog CQlkZXZfcHJpdi0+ZGlzcGxheS5nZXRfZmlmb19zaXplID0gaTl4eF9nZXRfZmlmb19zaXplOwog CX0gZWxzZSBpZiAoSVNfR0VOMihkZXZfcHJpdikpIHsKIAkJZGV2X3ByaXYtPmRpc3BsYXkuY29t cHV0ZV9waXBlX3dtID0gaTl4eF9jb21wdXRlX3BpcGVfd207CisJCWRldl9wcml2LT5kaXNwbGF5 LmNvbXB1dGVfaW50ZXJtZWRpYXRlX3dtID0gaTl4eF9jb21wdXRlX2ludGVybWVkaWF0ZV93bTsK KwkJZGV2X3ByaXYtPmRpc3BsYXkuaW5pdGlhbF93YXRlcm1hcmtzID0gaTl4eF9pbml0aWFsX3dh dGVybWFya3M7CisJCWRldl9wcml2LT5kaXNwbGF5Lm9wdGltaXplX3dhdGVybWFya3MgPSBpOXh4 X29wdGltaXplX3dhdGVybWFya3M7CiAKIAkJaWYgKElOVEVMX0lORk8oZGV2X3ByaXYpLT5udW1f cGlwZXMgPT0gMSkgewotCQkJZGV2X3ByaXYtPmRpc3BsYXkudXBkYXRlX3dtID0gaTg0NV91cGRh dGVfd207CiAJCQlkZXZfcHJpdi0+ZGlzcGxheS5nZXRfZmlmb19zaXplID0gaTg0NV9nZXRfZmlm b19zaXplOwogCQl9IGVsc2UgewotCQkJZGV2X3ByaXYtPmRpc3BsYXkudXBkYXRlX3dtID0gaTl4 eF91cGRhdGVfd207CiAJCQlkZXZfcHJpdi0+ZGlzcGxheS5nZXRfZmlmb19zaXplID0gaTgzMF9n ZXRfZmlmb19zaXplOwogCQl9CiAJfSBlbHNlIHsKLS0gCjIuMTEuMAoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJ bnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==