From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [PATCH 2/6] drm/i915: Record the sseu configuration per-context & engine Date: Mon, 14 Jan 2019 13:57:23 +0000 Message-ID: <20190114135727.14851-3-tvrtko.ursulin@linux.intel.com> References: <20190114135727.14851-1-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id 452FF6E8DD for ; Mon, 14 Jan 2019 13:57:34 +0000 (UTC) In-Reply-To: <20190114135727.14851-1-tvrtko.ursulin@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 RnJvbTogTGlvbmVsIExhbmR3ZXJsaW4gPGxpb25lbC5nLmxhbmR3ZXJsaW5AaW50ZWwuY29tPgoK V2Ugd2FudCB0byBleHBvc2UgdGhlIGFiaWxpdHkgdG8gcmVjb25maWd1cmUgdGhlIHNsaWNlcywg c3Vic2xpY2UgYW5kCmV1IHBlciBjb250ZXh0IGFuZCBwZXIgZW5naW5lLiBUbyBmYWNpbGl0YXRl IHRoYXQsIHN0b3JlIHRoZSBjdXJyZW50CmNvbmZpZ3VyYXRpb24gb24gdGhlIGNvbnRleHQgZm9y IGVhY2ggZW5naW5lLCB3aGljaCBpcyBpbml0aWFsbHkgc2V0CnRvIHRoZSBkZXZpY2UgZGVmYXVs dCB1cG9uIGNyZWF0aW9uLgoKdjI6IHJlY29yZCBzc2V1IGNvbmZpZ3VyYXRpb24gcGVyIGNvbnRl eHQgJiBlbmdpbmUgKENocmlzKQoKdjM6IGludHJvZHVjZSB0aGUgaTkxNV9nZW1fY29udGV4dF9z c2V1IHRvIHN0b3JlIHBvd2VyZ2F0aW5nCiAgICBwcm9ncmFtbWluZywgc3NldV9kZXZfaW5mbyBo YXMgZ3Jvd24gcXVpdGUgYSBiaXQgKExpb25lbCkKCnY0OiByZW5hbWUgaTkxNV9nZW1fc3NldSBp bnRvIGludGVsX3NzZXUgKENocmlzKQogICAgdXNlIHRvX2ludGVsX2NvbnRleHQoKSAoQ2hyaXMp Cgp2NTogTW9yZSB0b19pbnRlbF9jb250ZXh0KCkgKFR2cnRrbykKICAgIFN3aXRjaCBpbnRlbF9z c2V1IGZyb20gdW5pb24gdG8gc3RydWN0IChUdnJ0a28pCiAgICBNb3ZlIGNvbnRleHQgZGVmYXVs dCBzc2V1IGluIGV4aXN0aW5nIGxvb3AgKENocmlzKQoKdjY6IHMvaW50ZWxfc3NldV9mcm9tX2Rl dmljZV9zc2V1L2ludGVsX2RldmljZV9kZWZhdWx0X3NzZXUvIChUdnJ0a28pCgpUdnJ0a28gVXJz dWxpbjoKCnY3OgogKiBQYXNzIGludGVsX3NzZXUgYnkgcG9pbnRlciBpbnN0ZWFkIG9mIHZhbHVl IHRvIG1ha2VfcnBjcy4KICogUmViYXNlIGZvciBtYWtlX3JwY3MgY2hhbmdlcy4KCnY4OgogKiBS ZWJhc2UgZm9yIFJQQ1MgZWRpdCBvbiBwaW4uCgp2OToKICogUmViYXNlIGZvciBjb250ZXh0IGlt YWdlIHNldHVwIGNoYW5nZXMuCgp2MTA6CiAqIFJlbmFtZSBkZXZfcHJpdiB0byBpOTE1LiAoQ2hy aXMgV2lsc29uKQoKdjExOgogKiBSZWJhc2UuCgp2MTI6CiAqIFJlYmFzZSBmb3IgSVNfR0VOIGNo YW5nZXMuCgp2MTM6CiAqIFJlYmFzZSBmb3IgUlVOVElNRV9JTkZPLgoKU2lnbmVkLW9mZi1ieTog Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+ClNpZ25lZC1vZmYtYnk6IExp b25lbCBMYW5kd2VybGluIDxsaW9uZWwuZy5sYW5kd2VybGluQGludGVsLmNvbT4KU2lnbmVkLW9m Zi1ieTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KUmV2aWV3ZWQt Ynk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgpSZXZpZXdlZC1ieTog Sm9vbmFzIExhaHRpbmVuIDxqb29uYXMubGFodGluZW5AbGludXguaW50ZWwuY29tPgotLS0KIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICB8IDE0ICsrKysrKysrKysrCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMgfCAgMiArKwogZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5oIHwgIDQgKysrKwogZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9yZXF1ZXN0LmggICAgIHwgMTAgKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2xyYy5jICAgICAgICB8IDMxICsrKysrKysrKysrKystLS0tLS0tLS0tLS0KIDUg ZmlsZXMgY2hhbmdlZCwgNDYgaW5zZXJ0aW9ucygrKSwgMTUgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmgKaW5kZXggNmYzNDE4MjI2NTNjLi5mZTA2MjQ3MjEyZjEgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaApAQCAtMzMwMCw2ICszMzAwLDIwIEBAIG1rd3JpdGVfZGV2aWNlX2lu Zm8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCXJldHVybiAoc3RydWN0IGlu dGVsX2RldmljZV9pbmZvICopSU5URUxfSU5GTyhkZXZfcHJpdik7CiB9CiAKK3N0YXRpYyBpbmxp bmUgc3RydWN0IGludGVsX3NzZXUKK2ludGVsX2RldmljZV9kZWZhdWx0X3NzZXUoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUpCit7CisJY29uc3Qgc3RydWN0IHNzZXVfZGV2X2luZm8gKnNz ZXUgPSAmUlVOVElNRV9JTkZPKGk5MTUpLT5zc2V1OworCXN0cnVjdCBpbnRlbF9zc2V1IHZhbHVl ID0geworCQkuc2xpY2VfbWFzayA9IHNzZXUtPnNsaWNlX21hc2ssCisJCS5zdWJzbGljZV9tYXNr ID0gc3NldS0+c3Vic2xpY2VfbWFza1swXSwKKwkJLm1pbl9ldXNfcGVyX3N1YnNsaWNlID0gc3Nl dS0+bWF4X2V1c19wZXJfc3Vic2xpY2UsCisJCS5tYXhfZXVzX3Blcl9zdWJzbGljZSA9IHNzZXUt Pm1heF9ldXNfcGVyX3N1YnNsaWNlLAorCX07CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKIC8qIG1v ZGVzZXR0aW5nICovCiBleHRlcm4gdm9pZCBpbnRlbF9tb2Rlc2V0X2luaXRfaHcoc3RydWN0IGRy bV9kZXZpY2UgKmRldik7CiBleHRlcm4gaW50IGludGVsX21vZGVzZXRfaW5pdChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X2NvbnRleHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYwppbmRl eCA1OTMzYWRiZTNkOTkuLmExODIwNDVlMzgwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX2NvbnRleHQuYwpAQCAtMzQyLDYgKzM0Miw4IEBAIF9fY3JlYXRlX2h3X2NvbnRleHQoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCQlzdHJ1Y3QgaW50ZWxfY29udGV4dCAq Y2UgPSAmY3R4LT5fX2VuZ2luZVtuXTsKIAogCQljZS0+Z2VtX2NvbnRleHQgPSBjdHg7CisJCS8q IFVzZSB0aGUgd2hvbGUgZGV2aWNlIGJ5IGRlZmF1bHQgKi8KKwkJY2UtPnNzZXUgPSBpbnRlbF9k ZXZpY2VfZGVmYXVsdF9zc2V1KGRldl9wcml2KTsKIAl9CiAKIAlJTklUX1JBRElYX1RSRUUoJmN0 eC0+aGFuZGxlc192bWEsIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fY29udGV4dC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f Y29udGV4dC5oCmluZGV4IGY2ZDg3MGIxZjczZS4uZWYwNGU0MjJjZjlhIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmgKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5oCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRl ICJpOTE1X2dlbS5oIgogI2luY2x1ZGUgImk5MTVfc2NoZWR1bGVyLmgiCisjaW5jbHVkZSAiaW50 ZWxfZGV2aWNlX2luZm8uaCIKIAogc3RydWN0IHBpZDsKIApAQCAtMTcxLDYgKzE3Miw5IEBAIHN0 cnVjdCBpOTE1X2dlbV9jb250ZXh0IHsKIAkJaW50IHBpbl9jb3VudDsKIAogCQljb25zdCBzdHJ1 Y3QgaW50ZWxfY29udGV4dF9vcHMgKm9wczsKKworCQkvKiogc3NldTogQ29udHJvbCBldS9zbGlj ZSBwYXJ0aXRpb25pbmcgKi8KKwkJc3RydWN0IGludGVsX3NzZXUgc3NldTsKIAl9IF9fZW5naW5l W0k5MTVfTlVNX0VOR0lORVNdOwogCiAJLyoqIHJpbmdfc2l6ZTogc2l6ZSBmb3IgYWxsb2NhdGlu ZyB0aGUgcGVyLWVuZ2luZSByaW5nIGJ1ZmZlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9yZXF1ZXN0LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVl c3QuaAppbmRleCBkMDE0YjA2MDU0NDUuLjkwN2JkOGYxMWFlYiAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9yZXF1ZXN0LmgKQEAgLTM4LDYgKzM4LDE2IEBAIHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0Owogc3RydWN0IGk5MTVfcmVxdWVzdDsKIHN0cnVjdCBpOTE1X3RpbWVsaW5lOwogCisvKgor ICogUG93ZXJnYXRpbmcgY29uZmlndXJhdGlvbiBmb3IgYSBwYXJ0aWN1bGFyIChjb250ZXh0LGVu Z2luZSkuCisgKi8KK3N0cnVjdCBpbnRlbF9zc2V1IHsKKwl1OCBzbGljZV9tYXNrOworCXU4IHN1 YnNsaWNlX21hc2s7CisJdTggbWluX2V1c19wZXJfc3Vic2xpY2U7CisJdTggbWF4X2V1c19wZXJf c3Vic2xpY2U7Cit9OworCiBzdHJ1Y3QgaW50ZWxfd2FpdCB7CiAJc3RydWN0IHJiX25vZGUgbm9k ZTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2xyYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKaW5k ZXggMDVjODc4YWE0NzY3Li43MjNhZWU1YWU5ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2xyYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5j CkBAIC0xMTY5LDcgKzExNjksOCBAQCBzdGF0aWMgaW50IF9fY29udGV4dF9waW4oc3RydWN0IGk5 MTVfZ2VtX2NvbnRleHQgKmN0eCwgc3RydWN0IGk5MTVfdm1hICp2bWEpCiAJcmV0dXJuIGk5MTVf dm1hX3Bpbih2bWEsIDAsIDAsIGZsYWdzKTsKIH0KIAotc3RhdGljIHUzMiBtYWtlX3JwY3Moc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKK3N0YXRpYyB1MzIKK21ha2VfcnBjcyhz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgc3RydWN0IGludGVsX3NzZXUgKmN0eF9zc2V1 KTsKIAogc3RhdGljIHZvaWQKIF9fZXhlY2xpc3RzX3VwZGF0ZV9yZWdfc3RhdGUoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lLApAQCAtMTE4NCw3ICsxMTg1LDggQEAgX19leGVjbGlzdHNf dXBkYXRlX3JlZ19zdGF0ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCiAKIAkvKiBS UENTICovCiAJaWYgKGVuZ2luZS0+Y2xhc3MgPT0gUkVOREVSX0NMQVNTKQotCQlyZWdzW0NUWF9S X1BXUl9DTEtfU1RBVEUgKyAxXSA9IG1ha2VfcnBjcyhlbmdpbmUtPmk5MTUpOworCQlyZWdzW0NU WF9SX1BXUl9DTEtfU1RBVEUgKyAxXSA9IG1ha2VfcnBjcyhlbmdpbmUtPmk5MTUsCisJCQkJCQkJ ICAmY2UtPnNzZXUpOwogfQogCiBzdGF0aWMgc3RydWN0IGludGVsX2NvbnRleHQgKgpAQCAtMjMy MiwxOCArMjMyNCwxOSBAQCBpbnQgbG9naWNhbF94Y3NfcmluZ19pbml0KHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZSkKIH0KIAogc3RhdGljIHUzMgotbWFrZV9ycGNzKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKK21ha2VfcnBjcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSwgc3RydWN0IGludGVsX3NzZXUgKmN0eF9zc2V1KQogewotCWJvb2wgc3Vic2xpY2Vf cGcgPSBSVU5USU1FX0lORk8oZGV2X3ByaXYpLT5zc2V1Lmhhc19zdWJzbGljZV9wZzsKLQl1OCBz bGljZXMgPSBod2VpZ2h0OChSVU5USU1FX0lORk8oZGV2X3ByaXYpLT5zc2V1LnNsaWNlX21hc2sp OwotCXU4IHN1YnNsaWNlcyA9IGh3ZWlnaHQ4KFJVTlRJTUVfSU5GTyhkZXZfcHJpdiktPnNzZXUu c3Vic2xpY2VfbWFza1swXSk7CisJY29uc3Qgc3RydWN0IHNzZXVfZGV2X2luZm8gKnNzZXUgPSAm UlVOVElNRV9JTkZPKGk5MTUpLT5zc2V1OworCWJvb2wgc3Vic2xpY2VfcGcgPSBzc2V1LT5oYXNf c3Vic2xpY2VfcGc7CisJdTggc2xpY2VzID0gaHdlaWdodDgoY3R4X3NzZXUtPnNsaWNlX21hc2sp OworCXU4IHN1YnNsaWNlcyA9IGh3ZWlnaHQ4KGN0eF9zc2V1LT5zdWJzbGljZV9tYXNrKTsKIAl1 MzIgcnBjcyA9IDA7CiAKIAkvKgogCSAqIE5vIGV4cGxpY2l0IFJQQ1MgcmVxdWVzdCBpcyBuZWVk ZWQgdG8gZW5zdXJlIGZ1bGwKIAkgKiBzbGljZS9zdWJzbGljZS9FVSBlbmFibGVtZW50IHByaW9y IHRvIEdlbjkuCiAJKi8KLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDkpCisJaWYgKElOVEVM X0dFTihpOTE1KSA8IDkpCiAJCXJldHVybiAwOwogCiAJLyoKQEAgLTIzNjEsNyArMjM2NCw3IEBA IG1ha2VfcnBjcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJICogc3Vic2xp Y2VzIGFyZSBlbmFibGVkLCBvciBhIGNvdW50IGJldHdlZW4gb25lIGFuZCBmb3VyIG9uIHRoZSBm aXJzdAogCSAqIHNsaWNlLgogCSAqLwotCWlmIChJU19HRU4oZGV2X3ByaXYsIDExKSAmJiBzbGlj ZXMgPT0gMSAmJiBzdWJzbGljZXMgPj0gNCkgeworCWlmIChJU19HRU4oaTkxNSwgMTEpICYmIHNs aWNlcyA9PSAxICYmIHN1YnNsaWNlcyA+PSA0KSB7CiAJCUdFTV9CVUdfT04oc3Vic2xpY2VzICYg MSk7CiAKIAkJc3Vic2xpY2VfcGcgPSBmYWxzZTsKQEAgLTIzNzQsMTAgKzIzNzcsMTAgQEAgbWFr ZV9ycGNzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAkgKiBtdXN0IG1ha2Ug YW4gZXhwbGljaXQgcmVxdWVzdCB0aHJvdWdoIFJQQ1MgZm9yIGZ1bGwKIAkgKiBlbmFibGVtZW50 LgogCSovCi0JaWYgKFJVTlRJTUVfSU5GTyhkZXZfcHJpdiktPnNzZXUuaGFzX3NsaWNlX3BnKSB7 CisJaWYgKHNzZXUtPmhhc19zbGljZV9wZykgewogCQl1MzIgbWFzaywgdmFsID0gc2xpY2VzOwog Ci0JCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDExKSB7CisJCWlmIChJTlRFTF9HRU4oaTkx NSkgPj0gMTEpIHsKIAkJCW1hc2sgPSBHRU4xMV9SUENTX1NfQ05UX01BU0s7CiAJCQl2YWwgPDw9 IEdFTjExX1JQQ1NfU19DTlRfU0hJRlQ7CiAJCX0gZWxzZSB7CkBAIC0yNDAyLDE4ICsyNDA1LDE2 IEBAIG1ha2VfcnBjcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAJCXJwY3Mg fD0gR0VOOF9SUENTX0VOQUJMRSB8IEdFTjhfUlBDU19TU19DTlRfRU5BQkxFIHwgdmFsOwogCX0K IAotCWlmIChSVU5USU1FX0lORk8oZGV2X3ByaXYpLT5zc2V1Lmhhc19ldV9wZykgeworCWlmIChz c2V1LT5oYXNfZXVfcGcpIHsKIAkJdTMyIHZhbDsKIAotCQl2YWwgPSBSVU5USU1FX0lORk8oZGV2 X3ByaXYpLT5zc2V1LmV1X3Blcl9zdWJzbGljZSA8PAotCQkgICAgICBHRU44X1JQQ1NfRVVfTUlO X1NISUZUOworCQl2YWwgPSBjdHhfc3NldS0+bWluX2V1c19wZXJfc3Vic2xpY2UgPDwgR0VOOF9S UENTX0VVX01JTl9TSElGVDsKIAkJR0VNX0JVR19PTih2YWwgJiB+R0VOOF9SUENTX0VVX01JTl9N QVNLKTsKIAkJdmFsICY9IEdFTjhfUlBDU19FVV9NSU5fTUFTSzsKIAogCQlycGNzIHw9IHZhbDsK IAotCQl2YWwgPSBSVU5USU1FX0lORk8oZGV2X3ByaXYpLT5zc2V1LmV1X3Blcl9zdWJzbGljZSA8 PAotCQkgICAgICBHRU44X1JQQ1NfRVVfTUFYX1NISUZUOworCQl2YWwgPSBjdHhfc3NldS0+bWF4 X2V1c19wZXJfc3Vic2xpY2UgPDwgR0VOOF9SUENTX0VVX01BWF9TSElGVDsKIAkJR0VNX0JVR19P Tih2YWwgJiB+R0VOOF9SUENTX0VVX01BWF9NQVNLKTsKIAkJdmFsICY9IEdFTjhfUlBDU19FVV9N QVhfTUFTSzsKIAotLSAKMi4xOS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9pbnRlbC1nZngK