From mboxrd@z Thu Jan 1 00:00:00 1970 From: Neil Armstrong Subject: [PATCH 2/3] drm/meson: add RDMA module driver Date: Tue, 15 Oct 2019 13:33:16 +0200 Message-ID: <20191015113317.8870-3-narmstrong@baylibre.com> References: <20191015113317.8870-1-narmstrong@baylibre.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wr1-x441.google.com (mail-wr1-x441.google.com [IPv6:2a00:1450:4864:20::441]) by gabe.freedesktop.org (Postfix) with ESMTPS id E676D6E2C8 for ; Tue, 15 Oct 2019 11:33:22 +0000 (UTC) Received: by mail-wr1-x441.google.com with SMTP id p14so23408788wro.4 for ; Tue, 15 Oct 2019 04:33:22 -0700 (PDT) In-Reply-To: <20191015113317.8870-1-narmstrong@baylibre.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: khilman@baylibre.com, linux-amlogic@lists.infradead.org, linux-arm-kernel@lists.infradead.org, Neil Armstrong List-Id: dri-devel@lists.freedesktop.org VGhlIFZQVSBlbWJlZHMgYSAiUmVnaXN0ZXIgRE1BIiB0aGF0IGNhbiB3cml0ZSBhIHNlcXVlbmNl IG9mIHJlZ2lzdGVycwpvbiB0aGUgVlBVIEFIQiBidXMsIGVpdGhlciBtYW51YWxseSBvciB0cmln Z2VyZWQgYnkgYW4gaW50ZXJuYWwgSVJRCmV2ZW50IGxpa2UgVlNZTkMgb3IgYSBsaW5lIGlucHV0 IGNvdW50ZXIuCgpUaGUgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBoYW5kbGVzIGEgc2luZ2xlIGNo YW5uZWwgKG92ZXIgOCksIHRyaWdnZXJlZApieSB0aGUgVlNZTkMgaXJxIGFuZCBkb2VzIG5vdCBo YW5kbGUgdGhlIFJETUEgaXJxLgoKVGhlIFJETUEgd2lsbCBiZSB1c2VmdWxsIHRvIHJlc2V0IGFu ZCBwcm9ncmFtIHRoZSBBRkJDIGRlY29kZXIgdW5pdApvbiBlYWNoIHZzeW5jIHdpdGhvdXQgaW52 b2x2aW5nIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB0aGF0IGNhbgpiZSBtYXNrZWQgZm9yIGEgbG9u ZyBwZXJpb2Qgb2YgdGltZSwgcHJvZHVjaW5nIGRpc3BsYXkgZ2xpdGNoZXMuCgpTaWduZWQtb2Zm LWJ5OiBOZWlsIEFybXN0cm9uZyA8bmFybXN0cm9uZ0BiYXlsaWJyZS5jb20+Ci0tLQogZHJpdmVy cy9ncHUvZHJtL21lc29uL01ha2VmaWxlICAgICB8ICAgMiArLQogZHJpdmVycy9ncHUvZHJtL21l c29uL21lc29uX2Rydi5jICB8ICAxNCArKystCiBkcml2ZXJzL2dwdS9kcm0vbWVzb24vbWVzb25f ZHJ2LmggIHwgICA2ICsrCiBkcml2ZXJzL2dwdS9kcm0vbWVzb24vbWVzb25fcmRtYS5jIHwgMTIz ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVzb24vbWVz b25fcmRtYS5oIHwgIDIwICsrKysrCiA1IGZpbGVzIGNoYW5nZWQsIDE2MSBpbnNlcnRpb25zKCsp LCA0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZXNv bi9tZXNvbl9yZG1hLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVzb24v bWVzb25fcmRtYS5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lc29uL01ha2VmaWxl IGIvZHJpdmVycy9ncHUvZHJtL21lc29uL01ha2VmaWxlCmluZGV4IGIxZmEwNTVhYWVkMy4uOWUz NmYwYzdiODE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWVzb24vTWFrZWZpbGUKKysr IGIvZHJpdmVycy9ncHUvZHJtL21lc29uL01ha2VmaWxlCkBAIC0xLDcgKzEsNyBAQAogIyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiBtZXNvbi1kcm0teSA6PSBtZXNvbl9k cnYubyBtZXNvbl9wbGFuZS5vIG1lc29uX2NydGMubyBtZXNvbl92ZW5jX2N2YnMubwogbWVzb24t ZHJtLXkgKz0gbWVzb25fdml1Lm8gbWVzb25fdnBwLm8gbWVzb25fdmVuYy5vIG1lc29uX3ZjbGsu byBtZXNvbl9vdmVybGF5Lm8KLW1lc29uLWRybS15ICs9IG1lc29uX29zZF9hZmJjZC5vCittZXNv bi1kcm0teSArPSBtZXNvbl9vc2RfYWZiY2QubyBtZXNvbl9yZG1hLm8KIAogb2JqLSQoQ09ORklH X0RSTV9NRVNPTikgKz0gbWVzb24tZHJtLm8KIG9iai0kKENPTkZJR19EUk1fTUVTT05fRFdfSERN SSkgKz0gbWVzb25fZHdfaGRtaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVzb24v bWVzb25fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVzb24vbWVzb25fZHJ2LmMKaW5kZXggMGYz MWU3MGJiOTRmLi4yMjAwZDhiNTI1MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZXNv bi9tZXNvbl9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVzb24vbWVzb25fZHJ2LmMKQEAg LTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJtZXNvbl92ZW5jX2N2YnMuaCIKICNpbmNsdWRlICJt ZXNvbl92aXUuaCIKICNpbmNsdWRlICJtZXNvbl92cHAuaCIKKyNpbmNsdWRlICJtZXNvbl9yZG1h LmgiCiAKICNkZWZpbmUgRFJJVkVSX05BTUUgIm1lc29uIgogI2RlZmluZSBEUklWRVJfREVTQyAi QW1sb2dpYyBNZXNvbiBEUk0gZHJpdmVyIgpAQCAtMjk1LDggKzI5NiwxMSBAQCBzdGF0aWMgaW50 IG1lc29uX2Rydl9iaW5kX21hc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgaGFzX2NvbXBv bmVudHMpCiAJbWVzb25fdmVuY19pbml0KHByaXYpOwogCW1lc29uX3ZwcF9pbml0KHByaXYpOwog CW1lc29uX3ZpdV9pbml0KHByaXYpOwotCWlmIChwcml2LT5hZmJjZC5vcHMpCi0JCXByaXYtPmFm YmNkLm9wcy0+aW5pdChwcml2KTsKKwlpZiAocHJpdi0+YWZiY2Qub3BzKSB7CisJCXJldCA9IHBy aXYtPmFmYmNkLm9wcy0+aW5pdChwcml2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJ fQogCiAJLyogRW5jb2RlciBJbml0aWFsaXphdGlvbiAqLwogCkBAIC0zNjcsMTIgKzM3MSwxNiBA QCBzdGF0aWMgdm9pZCBtZXNvbl9kcnZfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIAkJbWVz b25fY2FudmFzX2ZyZWUocHJpdi0+Y2FudmFzLCBwcml2LT5jYW52YXNfaWRfdmQxXzIpOwogCX0K IAorCWlmIChwcml2LT5hZmJjZC5vcHMpIHsKKwkJcHJpdi0+YWZiY2Qub3BzLT5yZXNldChwcml2 KTsKKwkJbWVzb25fcmRtYV9mcmVlKHByaXYpOworCX0KKwogCWRybV9kZXZfdW5yZWdpc3Rlcihk cm0pOwogCWRybV9pcnFfdW5pbnN0YWxsKGRybSk7CiAJZHJtX2ttc19oZWxwZXJfcG9sbF9maW5p KGRybSk7CiAJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZHJtKTsKIAlkcm1fZGV2X3B1dChkcm0p OwotCiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X21hc3Rlcl9vcHMgbWVzb25f ZHJ2X21hc3Rlcl9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVzb24vbWVz b25fZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vbWVzb24vbWVzb25fZHJ2LmgKaW5kZXggZGUyNTM0 OWJlOGFhLi45OTk1ZDc0YzVkZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZXNvbi9t ZXNvbl9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVzb24vbWVzb25fZHJ2LmgKQEAgLTEz OSw2ICsxMzksMTIgQEAgc3RydWN0IG1lc29uX2RybSB7CiAJCXU2NCBtb2RpZmllcjsKIAkJdTMy IGZvcm1hdDsKIAl9IGFmYmNkOworCisJc3RydWN0IHsKKwkJZG1hX2FkZHJfdCBhZGRyX3BoeXM7 CisJCXVpbnQzMl90ICphZGRyOworCQl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCX0gcmRtYTsKIH07 CiAKIHN0YXRpYyBpbmxpbmUgaW50IG1lc29uX3ZwdV9pc19jb21wYXRpYmxlKHN0cnVjdCBtZXNv bl9kcm0gKnByaXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVzb24vbWVzb25fcmRt YS5jIGIvZHJpdmVycy9ncHUvZHJtL21lc29uL21lc29uX3JkbWEuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjEzZmQ5YjE3MzQzOQotLS0gL2Rldi9udWxsCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9tZXNvbi9tZXNvbl9yZG1hLmMKQEAgLTAsMCArMSwxMjMgQEAKKy8v IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKworLyoKKyAqIENvcHlyaWdodCAoQykg MjAxOSBCYXlMaWJyZSwgU0FTCisgKiBBdXRob3I6IE5laWwgQXJtc3Ryb25nIDxuYXJtc3Ryb25n QGJheWxpYnJlLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvYml0ZmllbGQuaD4KKyNpbmNs dWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorCisjaW5jbHVkZSAibWVzb25fZHJ2LmgiCisjaW5j bHVkZSAibWVzb25fcmVnaXN0ZXJzLmgiCisjaW5jbHVkZSAibWVzb25fcmRtYS5oIgorCisvKgor ICogVGhlIFZQVSBlbWJlZHMgYSAiUmVnaXN0ZXIgRE1BIiB0aGF0IGNhbiB3cml0ZSBhIHNlcXVl bmNlIG9mIHJlZ2lzdGVycworICogb24gdGhlIFZQVSBBSEIgYnVzLCBlaXRoZXIgbWFudWFsbHkg b3IgdHJpZ2dlcmVkIGJ5IGFuIGludGVybmFsIElSUQorICogZXZlbnQgbGlrZSBWU1lOQyBvciBh IGxpbmUgaW5wdXQgY291bnRlci4KKyAqIFRoZSBpbml0aWFsIGltcGxlbWVudGF0aW9uIGhhbmRs ZXMgYSBzaW5nbGUgY2hhbm5lbCAob3ZlciA4KSwgdHJpZ2dlcmVkCisgKiBieSB0aGUgVlNZTkMg aXJxIGFuZCBkb2VzIG5vdCBoYW5kbGUgdGhlIFJETUEgaXJxLgorICovCisKK2ludCBtZXNvbl9y ZG1hX2luaXQoc3RydWN0IG1lc29uX2RybSAqcHJpdikKK3sKKwkvKiBBbGxvY2F0ZSBhIFBBR0Ug YnVmZmVyICovCisJcHJpdi0+cmRtYS5hZGRyID0gZG1hX2FsbG9jX2NvaGVyZW50KHByaXYtPmRl diwgU1pfNEssCisJCQkJCSAgICAgJnByaXYtPnJkbWEuYWRkcl9waHlzLAorCQkJCQkgICAgIEdG UF9LRVJORUwpOworCWlmICghcHJpdi0+cmRtYS5hZGRyKQorCQlyZXR1cm4gLUVOT01FTTsKKwor CXByaXYtPnJkbWEub2Zmc2V0ID0gMDsKKworCXdyaXRlbF9yZWxheGVkKFJETUFfQ1RSTF9TV19S RVNFVCwKKwkJICAgICAgIHByaXYtPmlvX2Jhc2UgKyBfUkVHKFJETUFfQ1RSTCkpOworCXdyaXRl bF9yZWxheGVkKFJETUFfREVGQVVMVF9DT05GSUcgfAorCQkgICAgICAgRklFTERfUFJFUChSRE1B X0NUUkxfQUhCX1dSX0JVUlNULCAzKSB8CisJCSAgICAgICBGSUVMRF9QUkVQKFJETUFfQ1RSTF9B SEJfUkRfQlVSU1QsIDApLAorCQkgICAgICAgcHJpdi0+aW9fYmFzZSArIF9SRUcoUkRNQV9DVFJM KSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBtZXNvbl9yZG1hX2ZyZWUoc3RydWN0IG1lc29u X2RybSAqcHJpdikKK3sKKwlpZiAoIXByaXYtPnJkbWEuYWRkciAmJiAhcHJpdi0+cmRtYS5hZGRy X3BoeXMpCisJCXJldHVybjsKKworCW1lc29uX3JkbWFfc3RvcChwcml2KTsKKworCWRtYV9mcmVl X2NvaGVyZW50KHByaXYtPmRldiwgU1pfNEssCisJCQkgIHByaXYtPnJkbWEuYWRkciwgcHJpdi0+ cmRtYS5hZGRyX3BoeXMpOworCisJcHJpdi0+cmRtYS5hZGRyID0gTlVMTDsKKwlwcml2LT5yZG1h LmFkZHJfcGh5cyA9IChkbWFfYWRkcl90KU5VTEw7Cit9CisKK3ZvaWQgbWVzb25fcmRtYV9zZXR1 cChzdHJ1Y3QgbWVzb25fZHJtICpwcml2KQoreworCS8qIENoYW5uZWwgMTogV3JpdGUgRmxhZywg Tm8gQWRkcmVzcyBJbmNyZW1lbnQgKi8KKwl3cml0ZWxfYml0c19yZWxheGVkKFJETUFfQUNDRVNT X1JXX0ZMQUdfQ0hBTjEgfAorCQkJICAgIFJETUFfQUNDRVNTX0FERFJfSU5DX0NIQU4xLAorCQkJ ICAgIFJETUFfQUNDRVNTX1JXX0ZMQUdfQ0hBTjEsCisJCQkgICAgcHJpdi0+aW9fYmFzZSArIF9S RUcoUkRNQV9BQ0NFU1NfQVVUTykpOworfQorCit2b2lkIG1lc29uX3JkbWFfc3RvcChzdHJ1Y3Qg bWVzb25fZHJtICpwcml2KQoreworCXdyaXRlbF9iaXRzX3JlbGF4ZWQoUkRNQV9JUlFfQ0xFQVJf Q0hBTjEsCisJCQkgICAgUkRNQV9JUlFfQ0xFQVJfQ0hBTjEsCisJCQkgICAgcHJpdi0+aW9fYmFz ZSArIF9SRUcoUkRNQV9DVFJMKSk7CisKKwkvKiBTdG9wIENoYW5uZWwgMSAqLworCXdyaXRlbF9i aXRzX3JlbGF4ZWQoUkRNQV9BQ0NFU1NfVFJJR0dFUl9DSEFOMSwKKwkJCSAgICBGSUVMRF9QUkVQ KFJETUFfQUNDRVNTX0FERFJfSU5DX0NIQU4xLAorCQkJCSAgICAgICBSRE1BX0FDQ0VTU19UUklH R0VSX1NUT1ApLAorCQkJICAgIHByaXYtPmlvX2Jhc2UgKyBfUkVHKFJETUFfQUNDRVNTX0FVVE8p KTsKK30KKworc3RhdGljIHZvaWQgbWVzb25fcmRtYV93cml0ZWwoc3RydWN0IG1lc29uX2RybSAq cHJpdiwgdWludDMyX3QgdmFsLAorCQkJICAgICAgdWludDMyX3QgcmVnKQoreworCWlmIChwcml2 LT5yZG1hLm9mZnNldCA9PSBTWl80SykgeworCQlkZXZfd2Fybl9vbmNlKHByaXYtPmRldiwgIiVz OiBvdmVyZmxvd1xuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJcHJpdi0+cmRtYS5h ZGRyW3ByaXYtPnJkbWEub2Zmc2V0KytdID0gcmVnOworCXByaXYtPnJkbWEuYWRkcltwcml2LT5y ZG1hLm9mZnNldCsrXSA9IHZhbDsKK30KKworLyoKKyAqIFRoaXMgd2lsbCBhZGQgdGhlIHJlZ2lz dGVyIHRvIHRoZSBSRE1BIGJ1ZmZlciBhbmQgd3JpdGUgaXQgdG8gdGhlCisgKiBoYXJkd2FyZSBh dCB0aGUgc2FtZSB0aW1lLgorICogV2hlbiBtZXNvbl9yZG1hX2ZsdXNoIGlzIGNhbGxlZCwgdGhl IFJETUEgd2lsbCByZXBsYXkgdGhlIHJlZ2lzdGVyCisgKiB3cml0ZXMgaW4gb3JkZXIuCisgKi8K K3ZvaWQgbWVzb25fcmRtYV93cml0ZWxfc3luYyhzdHJ1Y3QgbWVzb25fZHJtICpwcml2LCB1aW50 MzJfdCB2YWwsIHVpbnQzMl90IHJlZykKK3sKKwltZXNvbl9yZG1hX3dyaXRlbChwcml2LCB2YWws IHJlZyk7CisKKwl3cml0ZWxfcmVsYXhlZCh2YWwsIHByaXYtPmlvX2Jhc2UgKyBfUkVHKHJlZykp OworfQorCit2b2lkIG1lc29uX3JkbWFfZmx1c2goc3RydWN0IG1lc29uX2RybSAqcHJpdikKK3sK KwltZXNvbl9yZG1hX3N0b3AocHJpdik7CisKKwkvKiBTdGFydCBvZiBDaGFubmVsIDEgcmVnaXN0 ZXIgd3JpdGVzIGJ1ZmZlciAqLworCXdyaXRlbChwcml2LT5yZG1hLmFkZHJfcGh5cywKKwkgICAg ICAgcHJpdi0+aW9fYmFzZSArIF9SRUcoUkRNQV9BSEJfU1RBUlRfQUREUl8xKSk7CisKKwkvKiBM YXN0IGJ5dGUgb24gQ2hhbm5lbCAxIHJlZ2lzdGVyIHdyaXRlcyBidWZmZXIgKi8KKwl3cml0ZWwo cHJpdi0+cmRtYS5hZGRyX3BoeXMgKyAocHJpdi0+cmRtYS5vZmZzZXQgKiA4KSAtIDEsCisJICAg ICAgIHByaXYtPmlvX2Jhc2UgKyBfUkVHKFJETUFfQUhCX0VORF9BRERSXzEpKTsKKworCS8qIFRy aWdnZXIgQ2hhbm5lbCAxIG9uIFZTWU5DIGV2ZW50ICovCisJd3JpdGVsX2JpdHNfcmVsYXhlZChS RE1BX0FDQ0VTU19UUklHR0VSX0NIQU4xLAorCQkJICAgIEZJRUxEX1BSRVAoUkRNQV9BQ0NFU1Nf VFJJR0dFUl9DSEFOMSwKKwkJCQkgICAgICAgUkRNQV9BQ0NFU1NfVFJJR0dFUl9WU1lOQyksCisJ CQkgICAgcHJpdi0+aW9fYmFzZSArIF9SRUcoUkRNQV9BQ0NFU1NfQVVUTykpOworCisJcHJpdi0+ cmRtYS5vZmZzZXQgPSAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lc29uL21l c29uX3JkbWEuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZXNvbi9tZXNvbl9yZG1hLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44NGM4ODJmOTdkMjgKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVzb24vbWVzb25fcmRtYS5oCkBAIC0wLDAgKzEsMjAg QEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKyAqLworLyoKKyAqIENvcHly aWdodCAoQykgMjAxOSBCYXlMaWJyZSwgU0FTCisgKiBBdXRob3I6IE5laWwgQXJtc3Ryb25nIDxu YXJtc3Ryb25nQGJheWxpYnJlLmNvbT4KKyAqLworCisjaWZuZGVmIF9fTUVTT05fUkRNQV9ICisj ZGVmaW5lIF9fTUVTT05fUkRNQV9ICisKKyNpbmNsdWRlICJtZXNvbl9kcnYuaCIKKworaW50IG1l c29uX3JkbWFfaW5pdChzdHJ1Y3QgbWVzb25fZHJtICpwcml2KTsKK3ZvaWQgbWVzb25fcmRtYV9m cmVlKHN0cnVjdCBtZXNvbl9kcm0gKnByaXYpOwordm9pZCBtZXNvbl9yZG1hX3NldHVwKHN0cnVj dCBtZXNvbl9kcm0gKnByaXYpOwordm9pZCBtZXNvbl9yZG1hX3N0b3Aoc3RydWN0IG1lc29uX2Ry bSAqcHJpdik7CisKK3ZvaWQgbWVzb25fcmRtYV93cml0ZWxfc3luYyhzdHJ1Y3QgbWVzb25fZHJt ICpwcml2LCB1aW50MzJfdCB2YWwsIHVpbnQzMl90IHJlZyk7Cit2b2lkIG1lc29uX3JkbWFfZmx1 c2goc3RydWN0IG1lc29uX2RybSAqcHJpdik7CisKKyNlbmRpZiAvKiBfX01FU09OX1JETUFfSCAq LwotLSAKMi4yMi4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2 ZWw=