From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [RFC] drm/i915: Infrastructure for supporting different GGTT views per object Date: Thu, 6 Nov 2014 14:39:25 +0000 Message-ID: <1415284765-25613-1-git-send-email-tvrtko.ursulin@linux.intel.com> References: <1414687178-18562-1-git-send-email-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTP id B20F46F005 for ; Thu, 6 Nov 2014 06:39:40 -0800 (PST) In-Reply-To: <1414687178-18562-1-git-send-email-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 Cc: Daniel Vetter List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KClRoaW5ncyBs aWtlIHJlbGlhYmxlIEdHVFQgbW1hcHMgYW5kIG1pcnJvcmVkIDJkLW9uLTNkIGRpc3BsYXkgd2ls bCBuZWVkCnRvIG1hcCBvYmplY3RzIGludG8gdGhlIHNhbWUgYWRkcmVzcyBzcGFjZSBtdWx0aXBs ZSB0aW1lcy4KClRoaXMgYWxzbyBtZWFucyB0aGF0IG9iamVjdHMgbm93IGNhbiBoYXZlIG11bHRp cGxlIFZNQSBlbnRyaWVzLgoKQWRkZWQgYSBHR1RUIHZpZXcgY29uY2VwdCBhbmQgbGlua2VkIGl0 IHdpdGggdGhlIFZNQSB0byBkaXN0aW5ndWlzaCBiZXR3ZW4KbXVsdGlwbGUgaW5zdGFuY2VzIHBl ciBhZGRyZXNzIHNwYWNlLgoKTmV3IG9iamVjdHMgYW5kIEdFTSBmdW5jdGlvbnMgd2hpY2ggZG8g bm90IHRha2UgdGhpcyBuZXcgdmlldyBhcyBhIHBhcmFtZXRlcgphc3N1bWUgdGhlIGRlZmF1bHQg b2YgemVybyAoSTkxNV9HR1RUX1ZJRVdfTk9STUFMKSB3aGljaCBwcmVzZXJ2ZXMgdGhlCnByZXZp b3VzIGJlaGF2aW91ci4KClNpZ25lZC1vZmYtYnk6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJz dWxpbkBpbnRlbC5jb20+CkNjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xsLmNo PgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jICAgICAgICB8ICA0ICst CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAgICAgfCA0NCArKysrKysr KysrKysrLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgICAgICAgICAgICB8IDg4 ICsrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fY29udGV4dC5jICAgIHwgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X2V4ZWNidWZmZXIuYyB8ICAyICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQu YyAgICAgICAgfCA3MSArKysrKysrKysrKysrKysrKystLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX2d0dC5oICAgICAgICB8IDI5ICsrKysrKysrKy0KIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMgICAgICB8ICA4ICstLQogOCBmaWxlcyBjaGFuZ2VkLCAx NzkgaW5zZXJ0aW9ucygrKSwgNjkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rl YnVnZnMuYwppbmRleCAwYTY5ODEzLi4zZjIzYzUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2RlYnVnZnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rl YnVnZnMuYwpAQCAtMTU0LDggKzE1NCw4IEBAIGRlc2NyaWJlX29iaihzdHJ1Y3Qgc2VxX2ZpbGUg Km0sIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiAJCQlzZXFfcHV0cyhtLCAiIChw cCIpOwogCQllbHNlCiAJCQlzZXFfcHV0cyhtLCAiIChnIik7Ci0JCXNlcV9wcmludGYobSwgImd0 dCBvZmZzZXQ6ICUwOGx4LCBzaXplOiAlMDhseCkiLAotCQkJICAgdm1hLT5ub2RlLnN0YXJ0LCB2 bWEtPm5vZGUuc2l6ZSk7CisJCXNlcV9wcmludGYobSwgImd0dCBvZmZzZXQ6ICUwOGx4LCBzaXpl OiAlMDhseCwgdHlwZTogJXUpIiwKKwkJCSAgIHZtYS0+bm9kZS5zdGFydCwgdm1hLT5ub2RlLnNp emUsIHZtYS0+Z2d0dF92aWV3LnR5cGUpOwogCX0KIAlpZiAob2JqLT5zdG9sZW4pCiAJCXNlcV9w cmludGYobSwgIiAoc3RvbGVuOiAlMDhseCkiLCBvYmotPnN0b2xlbi0+c3RhcnQpOwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmgKaW5kZXggNTQ2OTFiYy4uNTAxMDlmYSAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5oCkBAIC0yNDIwLDEwICsyNDIwLDIzIEBAIHZvaWQgaTkxNV9nZW1fdm1hX2Rlc3Ryb3ko c3RydWN0IGk5MTVfdm1hICp2bWEpOwogI2RlZmluZSBQSU5fR0xPQkFMIDB4NAogI2RlZmluZSBQ SU5fT0ZGU0VUX0JJQVMgMHg4CiAjZGVmaW5lIFBJTl9PRkZTRVRfTUFTSyAofjQwOTUpCitpbnQg X19tdXN0X2NoZWNrIGk5MTVfZ2VtX29iamVjdF9waW5fdmlldyhzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLAorCQkJCQkgIHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAorCQkJ CQkgIHVpbnQzMl90IGFsaWdubWVudCwKKwkJCQkJICB1aW50NjRfdCBmbGFncywKKwkJCQkJICBj b25zdCBzdHJ1Y3QgaTkxNV9nZ3R0X3ZpZXcgKnZpZXcpOworc3RhdGljIGlubGluZQogaW50IF9f bXVzdF9jaGVjayBpOTE1X2dlbV9vYmplY3RfcGluKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmosCiAJCQkJICAgICBzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKIAkJCQkgICAg IHVpbnQzMl90IGFsaWdubWVudCwKLQkJCQkgICAgIHVpbnQ2NF90IGZsYWdzKTsKKwkJCQkgICAg IHVpbnQ2NF90IGZsYWdzKQoreworCXJldHVybiBpOTE1X2dlbV9vYmplY3RfcGluX3ZpZXcob2Jq LCB2bSwgYWxpZ25tZW50LCBmbGFncywKKwkJCQkJCSZpOTE1X2dndHRfdmlld19ub3JtYWwpOwor fQorCit2b2lkIGk5MTVfdm1hX2JpbmQoc3RydWN0IGk5MTVfdm1hICp2bWEsIGVudW0gaTkxNV9j YWNoZV9sZXZlbCBjYWNoZV9sZXZlbCwKKwkJCXUzMiBmbGFncyk7CiBpbnQgX19tdXN0X2NoZWNr IGk5MTVfdm1hX3VuYmluZChzdHJ1Y3QgaTkxNV92bWEgKnZtYSk7CiBpbnQgaTkxNV9nZW1fb2Jq ZWN0X3B1dF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKIHZvaWQgaTkx NV9nZW1fcmVsZWFzZV9hbGxfbW1hcHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KTsKQEAgLTI1NzAsMTggKzI1ODMsNDEgQEAgc3RydWN0IGRtYV9idWYgKmk5MTVfZ2VtX3ByaW1l X2V4cG9ydChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCiB2b2lkIGk5MTVfZ2VtX3Jlc3RvcmVf ZmVuY2VzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCit1bnNpZ25lZCBsb25nIGk5MTVfZ2Vt X29ial9vZmZzZXRfdmlldyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqbywKKwkJCQkgICAg ICAgc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCisJCQkJICAgICAgIGVudW0gaTkxNV9n Z3R0X3ZpZXdfdHlwZSB2aWV3KTsKK3N0YXRpYyBpbmxpbmUKIHVuc2lnbmVkIGxvbmcgaTkxNV9n ZW1fb2JqX29mZnNldChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqbywKLQkJCQkgIHN0cnVj dCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKTsKKwkJCQkgIHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3Bh Y2UgKnZtKQoreworCXJldHVybiBpOTE1X2dlbV9vYmpfb2Zmc2V0X3ZpZXcobywgdm0sIEk5MTVf R0dUVF9WSUVXX05PUk1BTCk7Cit9CiBib29sIGk5MTVfZ2VtX29ial9ib3VuZF9hbnkoc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm8pOwogYm9vbCBpOTE1X2dlbV9vYmpfYm91bmQoc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm8sCiAJCQlzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2 bSk7CiB1bnNpZ25lZCBsb25nIGk5MTVfZ2VtX29ial9zaXplKHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvLAogCQkJCXN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKTsKK3N0cnVjdCBp OTE1X3ZtYSAqaTkxNV9nZW1fb2JqX3RvX3ZtYV92aWV3KHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmosCisJCQkJICAgICAgICAgIHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAor CQkJCQkgIGNvbnN0IHN0cnVjdCBpOTE1X2dndHRfdmlldyAqdmlldyk7CitzdGF0aWMgaW5saW5l CiBzdHJ1Y3QgaTkxNV92bWEgKmk5MTVfZ2VtX29ial90b192bWEoc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaiwKLQkJCQkgICAgIHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKTsK KwkJCQkgICAgIHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQoreworCXJldHVybiBpOTE1 X2dlbV9vYmpfdG9fdm1hX3ZpZXcob2JqLCB2bSwgJmk5MTVfZ2d0dF92aWV3X25vcm1hbCk7Cit9 CitzdHJ1Y3QgaTkxNV92bWEgKgoraTkxNV9nZW1fb2JqX2xvb2t1cF9vcl9jcmVhdGVfdm1hX3Zp ZXcoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJCQkgICAgICAgc3RydWN0IGk5 MTVfYWRkcmVzc19zcGFjZSAqdm0sCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpOTE1X2dndHRf dmlldyAqdmlldyk7CitzdGF0aWMgaW5saW5lCiBzdHJ1Y3QgaTkxNV92bWEgKgogaTkxNV9nZW1f b2JqX2xvb2t1cF9vcl9jcmVhdGVfdm1hKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmos Ci0JCQkJICBzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSk7CisJCQkJICBzdHJ1Y3QgaTkx NV9hZGRyZXNzX3NwYWNlICp2bSkKK3sKKwlyZXR1cm4gaTkxNV9nZW1fb2JqX2xvb2t1cF9vcl9j cmVhdGVfdm1hX3ZpZXcob2JqLCB2bSwKKwkJCQkJCSZpOTE1X2dndHRfdmlld19ub3JtYWwpOwor fQogCiBzdHJ1Y3QgaTkxNV92bWEgKmk5MTVfZ2VtX29ial90b19nZ3R0KHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmopOwogc3RhdGljIGlubGluZSBib29sIGk5MTVfZ2VtX29ial9pc19w aW5uZWQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikgewpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtLmMKaW5kZXggMWRlOTRjYy4uYjQ2YTBmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCkBA IC0yMDA3LDggKzIwMDcsNyBAQCBpOTE1X2dlbV9zaHJpbmsoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LAogCQkJLyogRm9yIHRoZSB1bmJvdW5kIHBoYXNlLCB0aGlzIHNob3VsZCBi ZSBhIG5vLW9wISAqLwogCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZtYSwgdiwKIAkJCQkJ CSAmb2JqLT52bWFfbGlzdCwgdm1hX2xpbmspCi0JCQkJaWYgKGk5MTVfdm1hX3VuYmluZCh2bWEp KQotCQkJCQlicmVhazsKKwkJCQlpOTE1X3ZtYV91bmJpbmQodm1hKTsKIAogCQkJaWYgKGk5MTVf Z2VtX29iamVjdF9wdXRfcGFnZXMob2JqKSA9PSAwKQogCQkJCWNvdW50ICs9IG9iai0+YmFzZS5z aXplID4+IFBBR0VfU0hJRlQ7CkBAIC0yMjA5LDE3ICsyMjA4LDE0IEBAIHZvaWQgaTkxNV92bWFf bW92ZV90b19hY3RpdmUoc3RydWN0IGk5MTVfdm1hICp2bWEsCiBzdGF0aWMgdm9pZAogaTkxNV9n ZW1fb2JqZWN0X21vdmVfdG9faW5hY3RpdmUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aikKIHsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBvYmotPmJhc2UuZGV2 LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bTsKIAlzdHJ1Y3Qg aTkxNV92bWEgKnZtYTsKIAogCUJVR19PTihvYmotPmJhc2Uud3JpdGVfZG9tYWluICYgfkk5MTVf R0VNX0dQVV9ET01BSU5TKTsKIAlCVUdfT04oIW9iai0+YWN0aXZlKTsKIAotCWxpc3RfZm9yX2Vh Y2hfZW50cnkodm0sICZkZXZfcHJpdi0+dm1fbGlzdCwgZ2xvYmFsX2xpbmspIHsKLQkJdm1hID0g aTkxNV9nZW1fb2JqX3RvX3ZtYShvYmosIHZtKTsKLQkJaWYgKHZtYSAmJiAhbGlzdF9lbXB0eSgm dm1hLT5tbV9saXN0KSkKLQkJCWxpc3RfbW92ZV90YWlsKCZ2bWEtPm1tX2xpc3QsICZ2bS0+aW5h Y3RpdmVfbGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsICZvYmotPnZtYV9saXN0LCB2 bWFfbGluaykgeworCQlpZiAoIWxpc3RfZW1wdHkoJnZtYS0+bW1fbGlzdCkpCisJCQlsaXN0X21v dmVfdGFpbCgmdm1hLT5tbV9saXN0LCAmdm1hLT52bS0+aW5hY3RpdmVfbGlzdCk7CiAJfQogCiAJ aW50ZWxfZmJfb2JqX2ZsdXNoKG9iaiwgdHJ1ZSk7CkBAIC0yOTMwLDYgKzI5MjYsMjEgQEAgc3Rh dGljIHZvaWQgaTkxNV9nZW1fb2JqZWN0X2ZpbmlzaF9ndHQoc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaikKIAkJCQkJICAgIG9sZF93cml0ZV9kb21haW4pOwogfQogCitzdGF0aWMgdW5z aWduZWQgaW50IGNvdW50X2dndHRfbWFwcGluZ3Moc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaikKK3sKKwlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKKwl1bnNpZ25lZCBpbnQgY291bnQgPSAw OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsICZvYmotPnZtYV9saXN0LCB2bWFfbGluaykg eworCQlpZiAodm1hLT52bSAhPSBpOTE1X29ial90b19nZ3R0KG9iaikpCisJCQljb250aW51ZTsK KwkJaWYgKHZtYS0+Ym91bmQgJiBHTE9CQUxfQklORCkKKwkJCWNvdW50Kys7CisJfQorCisJcmV0 dXJuIGNvdW50OworfQorCiBpbnQgaTkxNV92bWFfdW5iaW5kKHN0cnVjdCBpOTE1X3ZtYSAqdm1h KQogewogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSB2bWEtPm9iajsKQEAgLTI5 NjAsNyArMjk3MSw3IEBAIGludCBpOTE1X3ZtYV91bmJpbmQoc3RydWN0IGk5MTVfdm1hICp2bWEp CiAJLyogVGhyb3cgYXdheSB0aGUgYWN0aXZlIHJlZmVyZW5jZSBiZWZvcmUgbW92aW5nIHRvIHRo ZSB1bmJvdW5kIGxpc3QgKi8KIAlpOTE1X2dlbV9vYmplY3RfcmV0aXJlKG9iaik7CiAKLQlpZiAo aTkxNV9pc19nZ3R0KHZtYS0+dm0pKSB7CisJaWYgKGk5MTVfaXNfZ2d0dCh2bWEtPnZtKSAmJiBj b3VudF9nZ3R0X21hcHBpbmdzKG9iaikgPT0gMSkgewogCQlpOTE1X2dlbV9vYmplY3RfZmluaXNo X2d0dChvYmopOwogCiAJCS8qIHJlbGVhc2UgdGhlIGZlbmNlIHJlZyBfYWZ0ZXJfIGZsdXNoaW5n ICovCkBAIC0yOTgzLDcgKzI5OTQsNyBAQCBpbnQgaTkxNV92bWFfdW5iaW5kKHN0cnVjdCBpOTE1 X3ZtYSAqdm1hKQogCS8qIFNpbmNlIHRoZSB1bmJvdW5kIGxpc3QgaXMgZ2xvYmFsLCBvbmx5IG1v dmUgdG8gdGhhdCBsaXN0IGlmCiAJICogbm8gbW9yZSBWTUFzIGV4aXN0LiAqLwogCWlmIChsaXN0 X2VtcHR5KCZvYmotPnZtYV9saXN0KSkgewotCQlpOTE1X2dlbV9ndHRfZmluaXNoX29iamVjdChv YmopOworCQlpOTE1X2dlbV9ndHRfZmluaXNoX29iamVjdChvYmosICZ2bWEtPmdndHRfdmlldyk7 CiAJCWxpc3RfbW92ZV90YWlsKCZvYmotPmdsb2JhbF9saXN0LCAmZGV2X3ByaXYtPm1tLnVuYm91 bmRfbGlzdCk7CiAJfQogCkBAIC0zMzkzLDcgKzM0MDQsOCBAQCBzdGF0aWMgc3RydWN0IGk5MTVf dm1hICoKIGk5MTVfZ2VtX29iamVjdF9iaW5kX3RvX3ZtKHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmosCiAJCQkgICBzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKIAkJCSAgIHVu c2lnbmVkIGFsaWdubWVudCwKLQkJCSAgIHVpbnQ2NF90IGZsYWdzKQorCQkJICAgdWludDY0X3Qg ZmxhZ3MsCisJCQkgICBjb25zdCBzdHJ1Y3QgaTkxNV9nZ3R0X3ZpZXcgKnZpZXcpCiB7CiAJc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+YmFzZS5kZXY7CiAJc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKQEAgLTM0NDMsNyArMzQ1NSw3IEBA IGk5MTVfZ2VtX29iamVjdF9iaW5kX3RvX3ZtKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmosCiAKIAlpOTE1X2dlbV9vYmplY3RfcGluX3BhZ2VzKG9iaik7CiAKLQl2bWEgPSBpOTE1X2dl bV9vYmpfbG9va3VwX29yX2NyZWF0ZV92bWEob2JqLCB2bSk7CisJdm1hID0gaTkxNV9nZW1fb2Jq X2xvb2t1cF9vcl9jcmVhdGVfdm1hX3ZpZXcob2JqLCB2bSwgdmlldyk7CiAJaWYgKElTX0VSUih2 bWEpKQogCQlnb3RvIGVycl91bnBpbjsKIApAQCAtMzQ2OSwxNSArMzQ4MSwxNiBAQCBzZWFyY2hf ZnJlZToKIAkJZ290byBlcnJfcmVtb3ZlX25vZGU7CiAJfQogCi0JcmV0ID0gaTkxNV9nZW1fZ3R0 X3ByZXBhcmVfb2JqZWN0KG9iaik7CisJcmV0ID0gaTkxNV9nZW1fZ3R0X3ByZXBhcmVfb2JqZWN0 KG9iaiwgJnZtYS0+Z2d0dF92aWV3KTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl9yZW1vdmVfbm9k ZTsKIAotCWxpc3RfbW92ZV90YWlsKCZvYmotPmdsb2JhbF9saXN0LCAmZGV2X3ByaXYtPm1tLmJv dW5kX2xpc3QpOworCWlmICh2bWEtPmdndHRfdmlldy50eXBlID09IEk5MTVfR0dUVF9WSUVXX05P Uk1BTCkKKwkJbGlzdF9tb3ZlX3RhaWwoJm9iai0+Z2xvYmFsX2xpc3QsICZkZXZfcHJpdi0+bW0u Ym91bmRfbGlzdCk7CiAJbGlzdF9hZGRfdGFpbCgmdm1hLT5tbV9saXN0LCAmdm0tPmluYWN0aXZl X2xpc3QpOwogCiAJdHJhY2VfaTkxNV92bWFfYmluZCh2bWEsIGZsYWdzKTsKLQl2bWEtPmJpbmRf dm1hKHZtYSwgb2JqLT5jYWNoZV9sZXZlbCwKKwlpOTE1X3ZtYV9iaW5kKHZtYSwgb2JqLT5jYWNo ZV9sZXZlbCwKIAkJICAgICAgZmxhZ3MgJiBQSU5fR0xPQkFMID8gR0xPQkFMX0JJTkQgOiAwKTsK IAogCXJldHVybiB2bWE7CkBAIC0zNjg1LDcgKzM2OTgsNyBAQCBpbnQgaTkxNV9nZW1fb2JqZWN0 X3NldF9jYWNoZV9sZXZlbChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCiAJCWxp c3RfZm9yX2VhY2hfZW50cnkodm1hLCAmb2JqLT52bWFfbGlzdCwgdm1hX2xpbmspCiAJCQlpZiAo ZHJtX21tX25vZGVfYWxsb2NhdGVkKCZ2bWEtPm5vZGUpKQotCQkJCXZtYS0+YmluZF92bWEodm1h LCBjYWNoZV9sZXZlbCwKKwkJCQlpOTE1X3ZtYV9iaW5kKHZtYSwgY2FjaGVfbGV2ZWwsCiAJCQkJ CQl2bWEtPmJvdW5kICYgR0xPQkFMX0JJTkQpOwogCX0KIApAQCAtNDA0MCwxMCArNDA1MywxMSBA QCBpOTE1X3ZtYV9taXNwbGFjZWQoc3RydWN0IGk5MTVfdm1hICp2bWEsIHVpbnQzMl90IGFsaWdu bWVudCwgdWludDY0X3QgZmxhZ3MpCiB9CiAKIGludAotaTkxNV9nZW1fb2JqZWN0X3BpbihzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAotCQkgICAgc3RydWN0IGk5MTVfYWRkcmVzc19z cGFjZSAqdm0sCi0JCSAgICB1aW50MzJfdCBhbGlnbm1lbnQsCi0JCSAgICB1aW50NjRfdCBmbGFn cykKK2k5MTVfZ2VtX29iamVjdF9waW5fdmlldyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqLAorCQkJIHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAorCQkJIHVpbnQzMl90IGFs aWdubWVudCwKKwkJCSB1aW50NjRfdCBmbGFncywKKwkJCSBjb25zdCBzdHJ1Y3QgaTkxNV9nZ3R0 X3ZpZXcgKnZpZXcpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gb2Jq LT5iYXNlLmRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGk5MTVfdm1hICp2bWE7CkBAIC00MDU5 LDcgKzQwNzMsNyBAQCBpOTE1X2dlbV9vYmplY3RfcGluKHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmosCiAJaWYgKFdBUk5fT04oKGZsYWdzICYgKFBJTl9NQVBQQUJMRSB8IFBJTl9HTE9C QUwpKSA9PSBQSU5fTUFQUEFCTEUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXZtYSA9IGk5MTVf Z2VtX29ial90b192bWEob2JqLCB2bSk7CisJdm1hID0gaTkxNV9nZW1fb2JqX3RvX3ZtYV92aWV3 KG9iaiwgdm0sIHZpZXcpOwogCWlmICh2bWEpIHsKIAkJaWYgKFdBUk5fT04odm1hLT5waW5fY291 bnQgPT0gRFJNX0k5MTVfR0VNX09CSkVDVF9NQVhfUElOX0NPVU5UKSkKIAkJCXJldHVybiAtRUJV U1k7CkBAIC00MDY5LDcgKzQwODMsNyBAQCBpOTE1X2dlbV9vYmplY3RfcGluKHN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJCQkgICAgICJibyBpcyBhbHJlYWR5IHBpbm5lZCB3aXRo IGluY29ycmVjdCBhbGlnbm1lbnQ6IgogCQkJICAgICAiIG9mZnNldD0lbHgsIHJlcS5hbGlnbm1l bnQ9JXgsIHJlcS5tYXBfYW5kX2ZlbmNlYWJsZT0lZCwiCiAJCQkgICAgICIgb2JqLT5tYXBfYW5k X2ZlbmNlYWJsZT0lZFxuIiwKLQkJCSAgICAgaTkxNV9nZW1fb2JqX29mZnNldChvYmosIHZtKSwg YWxpZ25tZW50LAorCQkJICAgICBpOTE1X2dlbV9vYmpfb2Zmc2V0X3ZpZXcob2JqLCB2bSwgdmll dy0+dHlwZSksIGFsaWdubWVudCwKIAkJCSAgICAgISEoZmxhZ3MgJiBQSU5fTUFQUEFCTEUpLAog CQkJICAgICBvYmotPm1hcF9hbmRfZmVuY2VhYmxlKTsKIAkJCXJldCA9IGk5MTVfdm1hX3VuYmlu ZCh2bWEpOwpAQCAtNDA4MiwxMyArNDA5NiwxNCBAQCBpOTE1X2dlbV9vYmplY3RfcGluKHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAKIAlib3VuZCA9IHZtYSA/IHZtYS0+Ym91bmQg OiAwOwogCWlmICh2bWEgPT0gTlVMTCB8fCAhZHJtX21tX25vZGVfYWxsb2NhdGVkKCZ2bWEtPm5v ZGUpKSB7Ci0JCXZtYSA9IGk5MTVfZ2VtX29iamVjdF9iaW5kX3RvX3ZtKG9iaiwgdm0sIGFsaWdu bWVudCwgZmxhZ3MpOworCQl2bWEgPSBpOTE1X2dlbV9vYmplY3RfYmluZF90b192bShvYmosIHZt LCBhbGlnbm1lbnQsCisJCQkJCQkJZmxhZ3MsIHZpZXcpOwogCQlpZiAoSVNfRVJSKHZtYSkpCiAJ CQlyZXR1cm4gUFRSX0VSUih2bWEpOwogCX0KIAogCWlmIChmbGFncyAmIFBJTl9HTE9CQUwgJiYg ISh2bWEtPmJvdW5kICYgR0xPQkFMX0JJTkQpKQotCQl2bWEtPmJpbmRfdm1hKHZtYSwgb2JqLT5j YWNoZV9sZXZlbCwgR0xPQkFMX0JJTkQpOworCQlpOTE1X3ZtYV9iaW5kKHZtYSwgb2JqLT5jYWNo ZV9sZXZlbCwgR0xPQkFMX0JJTkQpOwogCiAJaWYgKChib3VuZCBeIHZtYS0+Ym91bmQpICYgR0xP QkFMX0JJTkQpIHsKIAkJYm9vbCBtYXBwYWJsZSwgZmVuY2VhYmxlOwpAQCAtNDUwMiwxMiArNDUx NywxMyBAQCB2b2lkIGk5MTVfZ2VtX2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAq Z2VtX29iaikKIAlpbnRlbF9ydW50aW1lX3BtX3B1dChkZXZfcHJpdik7CiB9CiAKLXN0cnVjdCBp OTE1X3ZtYSAqaTkxNV9nZW1fb2JqX3RvX3ZtYShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqLAotCQkJCSAgICAgc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0pCitzdHJ1Y3QgaTkx NV92bWEgKmk5MTVfZ2VtX29ial90b192bWFfdmlldyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqLAorCQkJCSAgICAgICAgICBzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKKwkJ CQkJICBjb25zdCBzdHJ1Y3QgaTkxNV9nZ3R0X3ZpZXcgKnZpZXcpCiB7CiAJc3RydWN0IGk5MTVf dm1hICp2bWE7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsICZvYmotPnZtYV9saXN0LCB2bWFf bGluaykKLQkJaWYgKHZtYS0+dm0gPT0gdm0pCisJCWlmICh2bWEtPnZtID09IHZtICYmIHZtYS0+ Z2d0dF92aWV3LnR5cGUgPT0gdmlldy0+dHlwZSkKIAkJCXJldHVybiB2bWE7CiAKIAlyZXR1cm4g TlVMTDsKQEAgLTUxOTEsOCArNTIwNyw5IEBAIGk5MTVfZ2VtX3Nocmlua2VyX2NvdW50KHN0cnVj dCBzaHJpbmtlciAqc2hyaW5rZXIsIHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpCiB9CiAKIC8q IEFsbCB0aGUgbmV3IFZNIHN0dWZmICovCi11bnNpZ25lZCBsb25nIGk5MTVfZ2VtX29ial9vZmZz ZXQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm8sCi0JCQkJICBzdHJ1Y3QgaTkxNV9hZGRy ZXNzX3NwYWNlICp2bSkKK3Vuc2lnbmVkIGxvbmcgaTkxNV9nZW1fb2JqX29mZnNldF92aWV3KHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvLAorCQkJCSAgICAgICBzdHJ1Y3QgaTkxNV9hZGRy ZXNzX3NwYWNlICp2bSwKKwkJCQkgICAgICAgZW51bSBpOTE1X2dndHRfdmlld190eXBlIHZpZXcp CiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gby0+YmFzZS5kZXYtPmRl dl9wcml2YXRlOwogCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwpAQCAtNTIwMCw3ICs1MjE3LDcgQEAg dW5zaWduZWQgbG9uZyBpOTE1X2dlbV9vYmpfb2Zmc2V0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvLAogCVdBUk5fT04odm0gPT0gJmRldl9wcml2LT5tbS5hbGlhc2luZ19wcGd0dC0+YmFz ZSk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgJm8tPnZtYV9saXN0LCB2bWFfbGluaykg ewotCQlpZiAodm1hLT52bSA9PSB2bSkKKwkJaWYgKHZtYS0+dm0gPT0gdm0gJiYgdm1hLT5nZ3R0 X3ZpZXcudHlwZSA9PSB2aWV3KQogCQkJcmV0dXJuIHZtYS0+bm9kZS5zdGFydDsKIAogCX0KQEAg LTUzNDksOSArNTM2NiwxMiBAQCBzdHJ1Y3QgaTkxNV92bWEgKmk5MTVfZ2VtX29ial90b19nZ3R0 KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiB7CiAJc3RydWN0IGk5MTVfdm1hICp2 bWE7CiAKLQl2bWEgPSBsaXN0X2ZpcnN0X2VudHJ5KCZvYmotPnZtYV9saXN0LCB0eXBlb2YoKnZt YSksIHZtYV9saW5rKTsKLQlpZiAodm1hLT52bSAhPSBpOTE1X29ial90b19nZ3R0KG9iaikpCi0J CXJldHVybiBOVUxMOworCWxpc3RfZm9yX2VhY2hfZW50cnkodm1hLCAmb2JqLT52bWFfbGlzdCwg dm1hX2xpbmspIHsKKwkJaWYgKHZtYS0+dm0gIT0gaTkxNV9vYmpfdG9fZ2d0dChvYmopKQorCQkJ Y29udGludWU7CisJCWlmICh2bWEtPmdndHRfdmlldy50eXBlID09IEk5MTVfR0dUVF9WSUVXX05P Uk1BTCkKKwkJCXJldHVybiB2bWE7CisJfQogCi0JcmV0dXJuIHZtYTsKKwlyZXR1cm4gTlVMTDsK IH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYwppbmRleCA3ZDMyNTcxLi5m ODE1NTY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0 LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCkBAIC01NzQs NyArNTc0LDcgQEAgc3RhdGljIGludCBkb19zd2l0Y2goc3RydWN0IGludGVsX2VuZ2luZV9jcyAq cmluZywKIAogCXZtYSA9IGk5MTVfZ2VtX29ial90b19nZ3R0KHRvLT5sZWdhY3lfaHdfY3R4LnJj c19zdGF0ZSk7CiAJaWYgKCEodm1hLT5ib3VuZCAmIEdMT0JBTF9CSU5EKSkKLQkJdm1hLT5iaW5k X3ZtYSh2bWEsIHRvLT5sZWdhY3lfaHdfY3R4LnJjc19zdGF0ZS0+Y2FjaGVfbGV2ZWwsCisJCWk5 MTVfdm1hX2JpbmQodm1hLCB0by0+bGVnYWN5X2h3X2N0eC5yY3Nfc3RhdGUtPmNhY2hlX2xldmVs LAogCQkJCUdMT0JBTF9CSU5EKTsKIAogCWlmICghdG8tPmxlZ2FjeV9od19jdHguaW5pdGlhbGl6 ZWQgfHwgaTkxNV9nZW1fY29udGV4dF9pc19kZWZhdWx0KHRvKSkKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwppbmRleCBlMWVkODVhLi4wN2UyODcyIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCkBAIC0zNTgsNyArMzU4LDcg QEAgaTkxNV9nZW1fZXhlY2J1ZmZlcl9yZWxvY2F0ZV9lbnRyeShzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLAogCWlmICh1bmxpa2VseShJU19HRU42KGRldikgJiYKIAkgICAgcmVsb2Mt PndyaXRlX2RvbWFpbiA9PSBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04gJiYKIAkgICAgISh0 YXJnZXRfdm1hLT5ib3VuZCAmIEdMT0JBTF9CSU5EKSkpCi0JCXRhcmdldF92bWEtPmJpbmRfdm1h KHRhcmdldF92bWEsIHRhcmdldF9pOTE1X29iai0+Y2FjaGVfbGV2ZWwsCisJCWk5MTVfdm1hX2Jp bmQodGFyZ2V0X3ZtYSwgdGFyZ2V0X2k5MTVfb2JqLT5jYWNoZV9sZXZlbCwKIAkJCQlHTE9CQUxf QklORCk7CiAKIAkvKiBWYWxpZGF0ZSB0aGF0IHRoZSB0YXJnZXQgaXMgaW4gYSB2YWxpZCByL3cg R1BVIGRvbWFpbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f Z3R0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwppbmRleCBkZTEyMDE3 Li4zZjg4ODFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQu YworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwpAQCAtMzAsNiArMzAs OCBAQAogI2luY2x1ZGUgImk5MTVfdHJhY2UuaCIKICNpbmNsdWRlICJpbnRlbF9kcnYuaCIKIAor Y29uc3Qgc3RydWN0IGk5MTVfZ2d0dF92aWV3IGk5MTVfZ2d0dF92aWV3X25vcm1hbDsKKwogc3Rh dGljIHZvaWQgYmR3X3NldHVwX3ByaXZhdGVfcHBhdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpOwogc3RhdGljIHZvaWQgY2h2X3NldHVwX3ByaXZhdGVfcHBhdChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogCkBAIC03MSw3ICs3Myw3IEBAIHN0YXRpYyBpbnQg c2FuaXRpemVfZW5hYmxlX3BwZ3R0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBlbmFibGVf cHBndHQpCiB9CiAKIAotc3RhdGljIHZvaWQgcHBndHRfYmluZF92bWEoc3RydWN0IGk5MTVfdm1h ICp2bWEsCitzdGF0aWMgdm9pZCBwcGd0dF9iaW5kX3ZtYShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwg c3RydWN0IHNnX3RhYmxlICpwYWdlcywKIAkJCSAgIGVudW0gaTkxNV9jYWNoZV9sZXZlbCBjYWNo ZV9sZXZlbCwKIAkJCSAgIHUzMiBmbGFncyk7CiBzdGF0aWMgdm9pZCBwcGd0dF91bmJpbmRfdm1h KHN0cnVjdCBpOTE1X3ZtYSAqdm1hKTsKQEAgLTExOTQsNyArMTE5Niw3IEBAIHZvaWQgIGk5MTVf cHBndHRfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKIH0KIAogc3RhdGljIHZvaWQKLXBwZ3R0 X2JpbmRfdm1hKHN0cnVjdCBpOTE1X3ZtYSAqdm1hLAorcHBndHRfYmluZF92bWEoc3RydWN0IGk5 MTVfdm1hICp2bWEsIHN0cnVjdCBzZ190YWJsZSAqcGFnZXMsCiAJICAgICAgIGVudW0gaTkxNV9j YWNoZV9sZXZlbCBjYWNoZV9sZXZlbCwKIAkgICAgICAgdTMyIGZsYWdzKQogewpAQCAtMTIwMiw3 ICsxMjA0LDcgQEAgcHBndHRfYmluZF92bWEoc3RydWN0IGk5MTVfdm1hICp2bWEsCiAJaWYgKHZt YS0+b2JqLT5ndF9ybykKIAkJZmxhZ3MgfD0gUFRFX1JFQURfT05MWTsKIAotCXZtYS0+dm0tPmlu c2VydF9lbnRyaWVzKHZtYS0+dm0sIHZtYS0+b2JqLT5wYWdlcywgdm1hLT5ub2RlLnN0YXJ0LAor CXZtYS0+dm0tPmluc2VydF9lbnRyaWVzKHZtYS0+dm0sIHBhZ2VzLCB2bWEtPm5vZGUuc3RhcnQs CiAJCQkJY2FjaGVfbGV2ZWwsIGZsYWdzKTsKIH0KIApAQCAtMTMzNyw3ICsxMzM5LDcgQEAgdm9p ZCBpOTE1X2dlbV9yZXN0b3JlX2d0dF9tYXBwaW5ncyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQog CQkgKiB3aXRob3V0IHRlbGxpbmcgb3VyIG9iamVjdCBhYm91dCBpdC4gU28gd2UgbmVlZCB0byBm YWtlIGl0LgogCQkgKi8KIAkJdm1hLT5ib3VuZCAmPSB+R0xPQkFMX0JJTkQ7Ci0JCXZtYS0+Ymlu ZF92bWEodm1hLCBvYmotPmNhY2hlX2xldmVsLCBHTE9CQUxfQklORCk7CisJCWk5MTVfdm1hX2Jp bmQodm1hLCBvYmotPmNhY2hlX2xldmVsLCBHTE9CQUxfQklORCk7CiAJfQogCiAKQEAgLTEzNjQs OSArMTM2NiwxMCBAQCB2b2lkIGk5MTVfZ2VtX3Jlc3RvcmVfZ3R0X21hcHBpbmdzKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCiAJaTkxNV9nZ3R0X2ZsdXNoKGRldl9wcml2KTsKIH0KIAotaW50IGk5 MTVfZ2VtX2d0dF9wcmVwYXJlX29iamVjdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq KQoraW50IGk5MTVfZ2VtX2d0dF9wcmVwYXJlX29iamVjdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqLAorCQkJCWNvbnN0IHN0cnVjdCBpOTE1X2dndHRfdmlldyAqdmlldykKIHsKLQlp ZiAob2JqLT5oYXNfZG1hX21hcHBpbmcpCisJaWYgKG9iai0+aGFzX2RtYV9tYXBwaW5nIHx8IHZp ZXctPnR5cGUgIT0gSTkxNV9HR1RUX1ZJRVdfTk9STUFMKQogCQlyZXR1cm4gMDsKIAogCWlmICgh ZG1hX21hcF9zZygmb2JqLT5iYXNlLmRldi0+cGRldi0+ZGV2LApAQCAtMTUyMyw3ICsxNTI2LDcg QEAgc3RhdGljIHZvaWQgZ2VuNl9nZ3R0X2NsZWFyX3JhbmdlKHN0cnVjdCBpOTE1X2FkZHJlc3Nf c3BhY2UgKnZtLAogfQogCiAKLXN0YXRpYyB2b2lkIGk5MTVfZ2d0dF9iaW5kX3ZtYShzdHJ1Y3Qg aTkxNV92bWEgKnZtYSwKK3N0YXRpYyB2b2lkIGk5MTVfZ2d0dF9iaW5kX3ZtYShzdHJ1Y3QgaTkx NV92bWEgKnZtYSwgc3RydWN0IHNnX3RhYmxlICpwYWdlcywKIAkJCSAgICAgICBlbnVtIGk5MTVf Y2FjaGVfbGV2ZWwgY2FjaGVfbGV2ZWwsCiAJCQkgICAgICAgdTMyIHVudXNlZCkKIHsKQEAgLTE1 MzIsNyArMTUzNSw3IEBAIHN0YXRpYyB2b2lkIGk5MTVfZ2d0dF9iaW5kX3ZtYShzdHJ1Y3QgaTkx NV92bWEgKnZtYSwKIAkJQUdQX1VTRVJfTUVNT1JZIDogQUdQX1VTRVJfQ0FDSEVEX01FTU9SWTsK IAogCUJVR19PTighaTkxNV9pc19nZ3R0KHZtYS0+dm0pKTsKLQlpbnRlbF9ndHRfaW5zZXJ0X3Nn X2VudHJpZXModm1hLT5vYmotPnBhZ2VzLCBlbnRyeSwgZmxhZ3MpOworCWludGVsX2d0dF9pbnNl cnRfc2dfZW50cmllcyhwYWdlcywgZW50cnksIGZsYWdzKTsKIAl2bWEtPmJvdW5kID0gR0xPQkFM X0JJTkQ7CiB9CiAKQEAgLTE1NTYsNyArMTU1OSw3IEBAIHN0YXRpYyB2b2lkIGk5MTVfZ2d0dF91 bmJpbmRfdm1hKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQogCWludGVsX2d0dF9jbGVhcl9yYW5nZShm aXJzdCwgc2l6ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGdndHRfYmluZF92bWEoc3RydWN0IGk5MTVf dm1hICp2bWEsCitzdGF0aWMgdm9pZCBnZ3R0X2JpbmRfdm1hKHN0cnVjdCBpOTE1X3ZtYSAqdm1h LCBzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzLAogCQkJICBlbnVtIGk5MTVfY2FjaGVfbGV2ZWwgY2Fj aGVfbGV2ZWwsCiAJCQkgIHUzMiBmbGFncykKIHsKQEAgLTE1ODIsNyArMTU4NSw3IEBAIHN0YXRp YyB2b2lkIGdndHRfYmluZF92bWEoc3RydWN0IGk5MTVfdm1hICp2bWEsCiAJaWYgKCFkZXZfcHJp di0+bW0uYWxpYXNpbmdfcHBndHQgfHwgZmxhZ3MgJiBHTE9CQUxfQklORCkgewogCQlpZiAoISh2 bWEtPmJvdW5kICYgR0xPQkFMX0JJTkQpIHx8CiAJCSAgICAoY2FjaGVfbGV2ZWwgIT0gb2JqLT5j YWNoZV9sZXZlbCkpIHsKLQkJCXZtYS0+dm0tPmluc2VydF9lbnRyaWVzKHZtYS0+dm0sIG9iai0+ cGFnZXMsCisJCQl2bWEtPnZtLT5pbnNlcnRfZW50cmllcyh2bWEtPnZtLCBwYWdlcywKIAkJCQkJ CXZtYS0+bm9kZS5zdGFydCwKIAkJCQkJCWNhY2hlX2xldmVsLCBmbGFncyk7CiAJCQl2bWEtPmJv dW5kIHw9IEdMT0JBTF9CSU5EOwpAQCAtMTU5NCw3ICsxNTk3LDcgQEAgc3RhdGljIHZvaWQgZ2d0 dF9iaW5kX3ZtYShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKIAkgICAgIChjYWNoZV9sZXZlbCAhPSBv YmotPmNhY2hlX2xldmVsKSkpIHsKIAkJc3RydWN0IGk5MTVfaHdfcHBndHQgKmFwcGd0dCA9IGRl dl9wcml2LT5tbS5hbGlhc2luZ19wcGd0dDsKIAkJYXBwZ3R0LT5iYXNlLmluc2VydF9lbnRyaWVz KCZhcHBndHQtPmJhc2UsCi0JCQkJCSAgICB2bWEtPm9iai0+cGFnZXMsCisJCQkJCSAgICBwYWdl cywKIAkJCQkJICAgIHZtYS0+bm9kZS5zdGFydCwKIAkJCQkJICAgIGNhY2hlX2xldmVsLCBmbGFn cyk7CiAJCXZtYS0+Ym91bmQgfD0gTE9DQUxfQklORDsKQEAgLTE2MjUsNyArMTYyOCw4IEBAIHN0 YXRpYyB2b2lkIGdndHRfdW5iaW5kX3ZtYShzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKIAl9CiB9CiAK LXZvaWQgaTkxNV9nZW1fZ3R0X2ZpbmlzaF9vYmplY3Qoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaikKK3ZvaWQgaTkxNV9nZW1fZ3R0X2ZpbmlzaF9vYmplY3Qoc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaiwKKwkJCQljb25zdCBzdHJ1Y3QgaTkxNV9nZ3R0X3ZpZXcgKnZpZXcp CiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+YmFzZS5kZXY7CiAJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKQEAgLTE2MzMsNyAr MTYzNyw3IEBAIHZvaWQgaTkxNV9nZW1fZ3R0X2ZpbmlzaF9vYmplY3Qoc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaikKIAogCWludGVycnVwdGlibGUgPSBkb19pZGxpbmcoZGV2X3ByaXYp OwogCi0JaWYgKCFvYmotPmhhc19kbWFfbWFwcGluZykKKwlpZiAoIW9iai0+aGFzX2RtYV9tYXBw aW5nICYmIHZpZXctPnR5cGUgPT0gSTkxNV9HR1RUX1ZJRVdfTk9STUFMKQogCQlkbWFfdW5tYXBf c2coJmRldi0+cGRldi0+ZGV2LAogCQkJICAgICBvYmotPnBhZ2VzLT5zZ2wsIG9iai0+cGFnZXMt Pm5lbnRzLAogCQkJICAgICBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwpAQCAtMjEzNSw3ICsyMTM5 LDggQEAgaW50IGk5MTVfZ2VtX2d0dF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB9CiAK IHN0YXRpYyBzdHJ1Y3QgaTkxNV92bWEgKl9faTkxNV9nZW1fdm1hX2NyZWF0ZShzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqLAotCQkJCQkgICAgICBzdHJ1Y3QgaTkxNV9hZGRyZXNzX3Nw YWNlICp2bSkKKwkJCQkJICAgICAgc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCisJCQkJ CSAgICAgIGNvbnN0IHN0cnVjdCBpOTE1X2dndHRfdmlldyAqdmlldykKIHsKIAlzdHJ1Y3QgaTkx NV92bWEgKnZtYSA9IGt6YWxsb2Moc2l6ZW9mKCp2bWEpLCBHRlBfS0VSTkVMKTsKIAlpZiAodm1h ID09IE5VTEwpCkBAIC0yMTQ2LDYgKzIxNTEsNyBAQCBzdGF0aWMgc3RydWN0IGk5MTVfdm1hICpf X2k5MTVfZ2VtX3ZtYV9jcmVhdGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAlJ TklUX0xJU1RfSEVBRCgmdm1hLT5leGVjX2xpc3QpOwogCXZtYS0+dm0gPSB2bTsKIAl2bWEtPm9i aiA9IG9iajsKKwl2bWEtPmdndHRfdmlldyA9ICp2aWV3OwogCiAJc3dpdGNoIChJTlRFTF9JTkZP KHZtLT5kZXYpLT5nZW4pIHsKIAljYXNlIDk6CkBAIC0yMTg0LDE0ICsyMTkwLDQzIEBAIHN0YXRp YyBzdHJ1Y3QgaTkxNV92bWEgKl9faTkxNV9nZW1fdm1hX2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqLAogfQogCiBzdHJ1Y3QgaTkxNV92bWEgKgotaTkxNV9nZW1fb2JqX2xv b2t1cF9vcl9jcmVhdGVfdm1hKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCi0JCQkJ ICBzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSkKK2k5MTVfZ2VtX29ial9sb29rdXBfb3Jf Y3JlYXRlX3ZtYV92aWV3KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCQkJICAg ICAgIHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAorCQkJCSAgICAgICBjb25zdCBzdHJ1 Y3QgaTkxNV9nZ3R0X3ZpZXcgKnZpZXcpCiB7CiAJc3RydWN0IGk5MTVfdm1hICp2bWE7CiAKLQl2 bWEgPSBpOTE1X2dlbV9vYmpfdG9fdm1hKG9iaiwgdm0pOworCXZtYSA9IGk5MTVfZ2VtX29ial90 b192bWFfdmlldyhvYmosIHZtLCB2aWV3KTsKIAlpZiAoIXZtYSkKLQkJdm1hID0gX19pOTE1X2dl bV92bWFfY3JlYXRlKG9iaiwgdm0pOworCQl2bWEgPSBfX2k5MTVfZ2VtX3ZtYV9jcmVhdGUob2Jq LCB2bSwgdmlldyk7CiAKIAlyZXR1cm4gdm1hOwogfQorCitzdGF0aWMgaW5saW5lCitzdHJ1Y3Qg c2dfdGFibGUgKmk5MTVfZ2d0dF92aWV3X3BhZ2VzKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQorewor CXN0cnVjdCBzZ190YWJsZSAqcGFnZXMgPSBFUlJfUFRSKC1FSU5WQUwpOworCisJaWYgKHZtYS0+ Z2d0dF92aWV3LnR5cGUgPT0gSTkxNV9HR1RUX1ZJRVdfTk9STUFMKQorCQlwYWdlcyA9IHZtYS0+ b2JqLT5wYWdlczsKKwllbHNlCisJCVdBUk4oMSwgIk5vdCBpbXBsZW1lbnRlZCFcbiIpOworCisJ cmV0dXJuIHBhZ2VzOworfQorCit2b2lkIGk5MTVfdm1hX2JpbmQoc3RydWN0IGk5MTVfdm1hICp2 bWEsIGVudW0gaTkxNV9jYWNoZV9sZXZlbCBjYWNoZV9sZXZlbCwKKwkJCXUzMiBmbGFncykKK3sK KwlzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzID0gaTkxNV9nZ3R0X3ZpZXdfcGFnZXModm1hKTsKKwor CWlmIChwYWdlcyAmJiAhSVNfRVJSKHBhZ2VzKSkgeworCQl2bWEtPmJpbmRfdm1hKHZtYSwgcGFn ZXMsIGNhY2hlX2xldmVsLCBmbGFncyk7CisKKwkJaWYgKHZtYS0+Z2d0dF92aWV3LnR5cGUgIT0g STkxNV9HR1RUX1ZJRVdfTk9STUFMKSB7CisJCQlzZ19mcmVlX3RhYmxlKHBhZ2VzKTsKKwkJCWtm cmVlKHBhZ2VzKTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtX2d0dC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmgKaW5k ZXggZDA1NjJkMC4uZGI2YWM2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fZ3R0LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmgKQEAg LTEwOSw3ICsxMDksMTggQEAgdHlwZWRlZiBnZW44X2d0dF9wdGVfdCBnZW44X3BwZ3R0X3BkZV90 OwogI2RlZmluZSBHRU44X1BQQVRfRUxMQ19PVkVSUklERQkJKDA8PDIpCiAjZGVmaW5lIEdFTjhf UFBBVChpLCB4KQkJCSgodWludDY0X3QpICh4KSA8PCAoKGkpICogOCkpCiAKK2VudW0gaTkxNV9n Z3R0X3ZpZXdfdHlwZSB7CisJSTkxNV9HR1RUX1ZJRVdfTk9STUFMID0gMCwKK307CisKK3N0cnVj dCBpOTE1X2dndHRfdmlldyB7CisJZW51bSBpOTE1X2dndHRfdmlld190eXBlIHR5cGU7Cit9Owor CitleHRlcm4gY29uc3Qgc3RydWN0IGk5MTVfZ2d0dF92aWV3IGk5MTVfZ2d0dF92aWV3X25vcm1h bDsKKwogZW51bSBpOTE1X2NhY2hlX2xldmVsOworCiAvKioKICAqIEEgVk1BIHJlcHJlc2VudHMg YSBHRU0gQk8gdGhhdCBpcyBib3VuZCBpbnRvIGFuIGFkZHJlc3Mgc3BhY2UuIFRoZXJlZm9yZSwg YQogICogVk1BJ3MgcHJlc2VuY2UgY2Fubm90IGJlIGd1YXJhbnRlZWQgYmVmb3JlIGJpbmRpbmcs IG9yIGFmdGVyIHVuYmluZGluZyB0aGUKQEAgLTEyOSw2ICsxNDAsMTUgQEAgc3RydWN0IGk5MTVf dm1hIHsKICNkZWZpbmUgUFRFX1JFQURfT05MWQkoMTw8MikKIAl1bnNpZ25lZCBpbnQgYm91bmQg OiA0OwogCisJLyoqCisJICogU3VwcG9ydCBkaWZmZXJlbnQgR0dUVCB2aWV3cyBpbnRvIHRoZSBz YW1lIG9iamVjdC4KKwkgKiBUaGlzIG1lYW5zIHRoZXJlIGNhbiBiZSBtdWx0aXBsZSBWTUEgbWFw cGluZ3MgcGVyIG9iamVjdCBhbmQgcGVyIFZNLgorCSAqIGk5MTVfZ2d0dF92aWV3X3R5cGUgaXMg dXNlZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRob3NlIGVudHJpZXMuCisJICogVGhlIGRlZmF1 bHQgb25lIG9mIHplcm8gKEk5MTVfR0dUVF9WSUVXX05PUk1BTCkgaXMgZGVmYXVsdCBhbmQgYWxz bworCSAqIGFzc3VtZWQgaW4gR0VNIGZ1bmN0aW9ucyB3aGljaCB0YWtlIG5vIGdndHQgdmlldyBw YXJhbWV0ZXIuCisJICovCisJc3RydWN0IGk5MTVfZ2d0dF92aWV3IGdndHRfdmlldzsKKwogCS8q KiBUaGlzIG9iamVjdCdzIHBsYWNlIG9uIHRoZSBhY3RpdmUvaW5hY3RpdmUgbGlzdHMgKi8KIAlz dHJ1Y3QgbGlzdF9oZWFkIG1tX2xpc3Q7CiAKQEAgLTE2MSw3ICsxODEsNyBAQCBzdHJ1Y3QgaTkx NV92bWEgewogCSAqIHNldHRpbmcgdGhlIHZhbGlkIFBURSBlbnRyaWVzIHRvIGEgcmVzZXJ2ZWQg c2NyYXRjaCBwYWdlLiAqLwogCXZvaWQgKCp1bmJpbmRfdm1hKShzdHJ1Y3QgaTkxNV92bWEgKnZt YSk7CiAJLyogTWFwIGFuIG9iamVjdCBpbnRvIGFuIGFkZHJlc3Mgc3BhY2Ugd2l0aCB0aGUgZ2l2 ZW4gY2FjaGUgZmxhZ3MuICovCi0Jdm9pZCAoKmJpbmRfdm1hKShzdHJ1Y3QgaTkxNV92bWEgKnZt YSwKKwl2b2lkICgqYmluZF92bWEpKHN0cnVjdCBpOTE1X3ZtYSAqdm1hLCBzdHJ1Y3Qgc2dfdGFi bGUgKnBhZ2VzLAogCQkJIGVudW0gaTkxNV9jYWNoZV9sZXZlbCBjYWNoZV9sZXZlbCwKIAkJCSB1 MzIgZmxhZ3MpOwogfTsKQEAgLTI5OSw3ICszMTksMTAgQEAgdm9pZCBpOTE1X2NoZWNrX2FuZF9j bGVhcl9mYXVsdHMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiB2b2lkIGk5MTVfZ2VtX3N1c3Bl bmRfZ3R0X21hcHBpbmdzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogdm9pZCBpOTE1X2dlbV9y ZXN0b3JlX2d0dF9tYXBwaW5ncyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIAotaW50IF9fbXVz dF9jaGVjayBpOTE1X2dlbV9ndHRfcHJlcGFyZV9vYmplY3Qoc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaik7Ci12b2lkIGk5MTVfZ2VtX2d0dF9maW5pc2hfb2JqZWN0KHN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmopOworaW50IF9fbXVzdF9jaGVjaworaTkxNV9nZW1fZ3R0X3By ZXBhcmVfb2JqZWN0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJCQkgICAgY29u c3Qgc3RydWN0IGk5MTVfZ2d0dF92aWV3ICp2aWV3KTsKK3ZvaWQgaTkxNV9nZW1fZ3R0X2Zpbmlz aF9vYmplY3Qoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJCQljb25zdCBzdHJ1 Y3QgaTkxNV9nZ3R0X3ZpZXcgKnZpZXcpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dwdV9lcnJvci5jCmluZGV4IGQxNzM2MGIuLjhlYmU0NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9ncHVfZXJyb3IuYwpAQCAtNzE3LDEwICs3MTcsOCBAQCBzdGF0aWMgdTMyIGNhcHR1cmVf cGlubmVkX2JvKHN0cnVjdCBkcm1faTkxNV9lcnJvcl9idWZmZXIgKmVyciwKIAkJCWJyZWFrOwog CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkodm1hLCAmb2JqLT52bWFfbGlzdCwgdm1hX2xpbmspCi0J CQlpZiAodm1hLT52bSA9PSB2bSAmJiB2bWEtPnBpbl9jb3VudCA+IDApIHsKKwkJCWlmICh2bWEt PnZtID09IHZtICYmIHZtYS0+cGluX2NvdW50ID4gMCkKIAkJCQljYXB0dXJlX2JvKGVycisrLCB2 bWEpOwotCQkJCWJyZWFrOwotCQkJfQogCX0KIAogCXJldHVybiBlcnIgLSBmaXJzdDsKQEAgLTEw OTYsMTAgKzEwOTQsOCBAQCBzdGF0aWMgdm9pZCBpOTE1X2dlbV9jYXB0dXJlX3ZtKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqLCAm ZGV2X3ByaXYtPm1tLmJvdW5kX2xpc3QsIGdsb2JhbF9saXN0KSB7CiAJCWxpc3RfZm9yX2VhY2hf ZW50cnkodm1hLCAmb2JqLT52bWFfbGlzdCwgdm1hX2xpbmspCi0JCQlpZiAodm1hLT52bSA9PSB2 bSAmJiB2bWEtPnBpbl9jb3VudCA+IDApIHsKKwkJCWlmICh2bWEtPnZtID09IHZtICYmIHZtYS0+ cGluX2NvdW50ID4gMCkKIAkJCQlpKys7Ci0JCQkJYnJlYWs7Ci0JCQl9CiAJfQogCWVycm9yLT5w aW5uZWRfYm9fY291bnRbbmR4XSA9IGkgLSBlcnJvci0+YWN0aXZlX2JvX2NvdW50W25keF07CiAK LS0gCjIuMS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=