From mboxrd@z Thu Jan 1 00:00:00 1970 From: Xiaolin Zhang Subject: [PATCH v10 8/9] drm/i915/gvt: GVTg support ppgtt pv optimization Date: Tue, 17 Sep 2019 13:48:19 +0800 Message-ID: <1568699301-2799-9-git-send-email-xiaolin.zhang@intel.com> References: <1568699301-2799-1-git-send-email-xiaolin.zhang@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1568699301-2799-1-git-send-email-xiaolin.zhang@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-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org Cc: zhenyu.z.wang@intel.com, hang.yuan@intel.com, zhiyuan.lv@intel.com List-Id: intel-gfx@lists.freedesktop.org VGhpcyBwYXRjaCBoYW5kbGVzIHBwZ3R0IHVwZGF0ZSBmcm9tIGcydiBub3RpZmljYXRpb24uCgpJ dCByZWFkIG91dCBwcGd0dCBwdGUgZW50cmllcyBmcm9tIGd1ZXN0IHB0ZSB0YWJsZXMgcGFnZSBh bmQKY29udmVydCB0aGVtIHRvIGhvc3QgcGZucy4KCkl0IGNyZWF0ZXMgbG9jYWwgcHBndHQgdGFi bGVzIGFuZCBpbnNlcnQgdGhlIGNvbnRlbnQgcGFnZXMKaW50byB0aGUgbG9jYWwgcHBndHQgdGFi bGVzIGRpcmVjdGx5LCB3aGljaCBkb2VzIG5vdCB0cmFjawp0aGUgdXNhZ2Ugb2YgZ3Vlc3QgcGFn ZSB0YWJsZSBhbmQgcmVtb3ZlcyB0aGUgY29zdCBvZiB3cml0ZQpwcm90ZWN0aW9uIGZyb20gdGhl IG9yaWdpbmFsIHNoYWRvdyBwYWdlIG1lY2hhbnNpbS4KCnYwOiBSRkMuCnYxOiByZWJhc2UuCnYy OiByZWJhc2UuCnYzOiByZXBvcnQgcHYgcGdndHQgY2FwIHRvIGd1ZXN0Lgp2NDogcmVuYW1lZCBW R1BVX1BWTU1JTyB3aXRoIFZHUFVfUFZDQVAgZm9yIG5hbWUgY29uc2lzdGFuY2UsIG5vIFBWCnN1 cHBvcnQgaWYgZ2Z4IHZ0ZCBlbmFibGVkLgp2NTogcmViYXNlLgp2NjogcmViYXNlLgp2NzogYWRk ZWQgY29tbWFuZCB0cmFuc3BvcnQgYnVmZmVyIHN1cHBvcnQuCgpTaWduZWQtb2ZmLWJ5OiBYaWFv bGluIFpoYW5nIDx4aWFvbGluLnpoYW5nQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0v aTkxNS9ndnQvZ3R0LmMgICAgICB8IDI5OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndHQuaCAgICAgIHwgIDExICsrCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmggICAgICB8ICAgNCArCiBkcml2ZXJzL2dwdS9kcm0v aTkxNS9ndnQvaGFuZGxlcnMuYyB8IDEyNyArKysrKysrKysrKysrKy0KIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d2dC92Z3B1LmMgICAgIHwgICAyICsKIDUgZmlsZXMgY2hhbmdlZCwgNDQxIGluc2Vy dGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndnQvZ3R0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3R0LmMKaW5kZXggNGIwNGFm NS4uYzk0NGFjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d0dC5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndHQuYwpAQCAtMTc3MSw2ICsxNzcxLDI1IEBA IHN0YXRpYyBpbnQgcHBndHRfaGFuZGxlX2d1ZXN0X3dyaXRlX3BhZ2VfdGFibGVfYnl0ZXMoCiAJ cmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGludmFsaWRhdGVfbW1fcHYoc3RydWN0IGludGVs X3ZncHVfbW0gKm1tKQoreworCXN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1ID0gbW0tPnZncHU7CisJ c3RydWN0IGludGVsX2d2dCAqZ3Z0ID0gdmdwdS0+Z3Z0OworCXN0cnVjdCBpbnRlbF9ndnRfZ3R0 ICpndHQgPSAmZ3Z0LT5ndHQ7CisJc3RydWN0IGludGVsX2d2dF9ndHRfcHRlX29wcyAqb3BzID0g Z3R0LT5wdGVfb3BzOworCXN0cnVjdCBpbnRlbF9ndnRfZ3R0X2VudHJ5IHNlOworCisJaTkxNV92 bV9wdXQoJm1tLT5wcGd0dC0+dm0pOworCisJcHBndHRfZ2V0X3NoYWRvd19yb290X2VudHJ5KG1t LCAmc2UsIDApOworCWlmICghb3BzLT50ZXN0X3ByZXNlbnQoJnNlKSkKKwkJcmV0dXJuOworCXNl LnZhbDY0ID0gMDsKKwlwcGd0dF9zZXRfc2hhZG93X3Jvb3RfZW50cnkobW0sICZzZSwgMCk7CisK KwltbS0+cHBndHRfbW0uc2hhZG93ZWQgID0gZmFsc2U7Cit9CisKIHN0YXRpYyB2b2lkIGludmFs aWRhdGVfcHBndHRfbW0oc3RydWN0IGludGVsX3ZncHVfbW0gKm1tKQogewogCXN0cnVjdCBpbnRl bF92Z3B1ICp2Z3B1ID0gbW0tPnZncHU7CkBAIC0xNzgzLDYgKzE4MDIsMTEgQEAgc3RhdGljIHZv aWQgaW52YWxpZGF0ZV9wcGd0dF9tbShzdHJ1Y3QgaW50ZWxfdmdwdV9tbSAqbW0pCiAJaWYgKCFt bS0+cHBndHRfbW0uc2hhZG93ZWQpCiAJCXJldHVybjsKIAorCWlmIChWR1BVX1BWQ0FQKG1tLT52 Z3B1LCBQVl9QUEdUVF9VUERBVEUpKSB7CisJCWludmFsaWRhdGVfbW1fcHYobW0pOworCQlyZXR1 cm47CisJfQorCiAJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgQVJSQVlfU0laRShtbS0+cHBndHRf bW0uc2hhZG93X3BkcHMpOyBpbmRleCsrKSB7CiAJCXBwZ3R0X2dldF9zaGFkb3dfcm9vdF9lbnRy eShtbSwgJnNlLCBpbmRleCk7CiAKQEAgLTE4MDAsNiArMTgyNCwyNiBAQCBzdGF0aWMgdm9pZCBp bnZhbGlkYXRlX3BwZ3R0X21tKHN0cnVjdCBpbnRlbF92Z3B1X21tICptbSkKIAltbS0+cHBndHRf bW0uc2hhZG93ZWQgPSBmYWxzZTsKIH0KIAorc3RhdGljIGludCBzaGFkb3dfbW1fcHYoc3RydWN0 IGludGVsX3ZncHVfbW0gKm1tKQoreworCXN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1ID0gbW0tPnZn cHU7CisJc3RydWN0IGludGVsX2d2dCAqZ3Z0ID0gdmdwdS0+Z3Z0OworCXN0cnVjdCBpbnRlbF9n dnRfZ3R0X2VudHJ5IHNlOworCisJbW0tPnBwZ3R0ID0gaTkxNV9wcGd0dF9jcmVhdGUoZ3Z0LT5k ZXZfcHJpdik7CisJaWYgKElTX0VSUihtbS0+cHBndHQpKSB7CisJCWd2dF92Z3B1X2VycigiZmFp bCB0byBjcmVhdGUgcHBndHQgZm9yIHBkcCAweCVsbHhcbiIsCisJCQkJcHhfZG1hKG1tLT5wcGd0 dC0+cGQpKTsKKwkJcmV0dXJuIFBUUl9FUlIobW0tPnBwZ3R0KTsKKwl9CisKKwlzZS50eXBlID0g R1RUX1RZUEVfUFBHVFRfUk9PVF9MNF9FTlRSWTsKKwlzZS52YWw2NCA9IHB4X2RtYShtbS0+cHBn dHQtPnBkKTsKKwlwcGd0dF9zZXRfc2hhZG93X3Jvb3RfZW50cnkobW0sICZzZSwgMCk7CisJbW0t PnBwZ3R0X21tLnNoYWRvd2VkICA9IHRydWU7CisKKwlyZXR1cm4gMDsKK30KIAogc3RhdGljIGlu dCBzaGFkb3dfcHBndHRfbW0oc3RydWN0IGludGVsX3ZncHVfbW0gKm1tKQogewpAQCAtMTgxNCw2 ICsxODU4LDkgQEAgc3RhdGljIGludCBzaGFkb3dfcHBndHRfbW0oc3RydWN0IGludGVsX3ZncHVf bW0gKm1tKQogCWlmIChtbS0+cHBndHRfbW0uc2hhZG93ZWQpCiAJCXJldHVybiAwOwogCisJaWYg KFZHUFVfUFZDQVAobW0tPnZncHUsIFBWX1BQR1RUX1VQREFURSkpCisJCXJldHVybiBzaGFkb3df bW1fcHYobW0pOworCiAJbW0tPnBwZ3R0X21tLnNoYWRvd2VkID0gdHJ1ZTsKIAogCWZvciAoaW5k ZXggPSAwOyBpbmRleCA8IEFSUkFZX1NJWkUobW0tPnBwZ3R0X21tLmd1ZXN0X3BkcHMpOyBpbmRl eCsrKSB7CkBAIC0yODI1LDMgKzI4NzIsMjU0IEBAIHZvaWQgaW50ZWxfdmdwdV9yZXNldF9ndHQo c3RydWN0IGludGVsX3ZncHUgKnZncHUpCiAJaW50ZWxfdmdwdV9kZXN0cm95X2FsbF9wcGd0dF9t bSh2Z3B1KTsKIAlpbnRlbF92Z3B1X3Jlc2V0X2dndHQodmdwdSwgdHJ1ZSk7CiB9CisKKyNkZWZp bmUgR0VOOF9QREVfU0hJRlQJCTIxCisjZGVmaW5lIEdFTjhfUE1MNEVfU0hJRlQJMzkKKyNkZWZp bmUgR0VOOF9QRFBFX1NISUZUCTMwCisjZGVmaW5lIEdFTjhfUE1MNEVfU0laRQkoMVVMIDw8IEdF TjhfUE1MNEVfU0hJRlQpCisjZGVmaW5lIEdFTjhfUE1MNEVfU0laRV9NQVNLCSh+KEdFTjhfUE1M NEVfU0laRSAtIDEpKQorI2RlZmluZSBHRU44X1BEUEVfU0laRQkJKDFVTCA8PCBHRU44X1BEUEVf U0hJRlQpCisjZGVmaW5lIEdFTjhfUERQRV9TSVpFX01BU0sJKH4oR0VOOF9QRFBFX1NJWkUgLSAx KSkKKyNkZWZpbmUgR0VOOF9QREVfU0laRQkJKDFVTCA8PCBHRU44X1BERV9TSElGVCkKKyNkZWZp bmUgR0VOOF9QREVfU0laRV9NQVNLCSh+KEdFTjhfUERFX1NJWkUgLSAxKSkKKworI2RlZmluZSBw bWw0X2FkZHJfZW5kKGFkZHIsIGVuZCkJCQkJCVwKKyh7CXVuc2lnbmVkIGxvbmcgX19ib3VuZGFy eSA9IFwKKwkJCSgoYWRkcikgKyBHRU44X1BNTDRFX1NJWkUpICYgR0VOOF9QTUw0RV9TSVpFX01B U0s7IFwKKwkoX19ib3VuZGFyeSA8IChlbmQpKSA/IF9fYm91bmRhcnkgOiAoZW5kKTsJCVwKK30p CisKKyNkZWZpbmUgcGRwX2FkZHJfZW5kKGFkZHIsIGVuZCkJCQkJCQlcCisoewl1bnNpZ25lZCBs b25nIF9fYm91bmRhcnkgPSBcCisJCQkoKGFkZHIpICsgR0VOOF9QRFBFX1NJWkUpICYgR0VOOF9Q RFBFX1NJWkVfTUFTSzsgXAorCShfX2JvdW5kYXJ5IDwgKGVuZCkpID8gX19ib3VuZGFyeSA6IChl bmQpOwkJXAorfSkKKworI2RlZmluZSBwZF9hZGRyX2VuZChhZGRyLCBlbmQpCQkJCQkJXAorKHsJ dW5zaWduZWQgbG9uZyBfX2JvdW5kYXJ5ID0gXAorCQkJKChhZGRyKSArIEdFTjhfUERFX1NJWkUp ICYgR0VOOF9QREVfU0laRV9NQVNLOwlcCisJKF9fYm91bmRhcnkgPCAoZW5kKSkgPyBfX2JvdW5k YXJ5IDogKGVuZCk7CQlcCit9KQorCitzdHJ1Y3QgcHBndHRfd2FsayB7CisJdW5zaWduZWQgbG9u ZyAqbWZuczsKKwlpbnQgbWZuX2luZGV4OworCXVuc2lnbmVkIGxvbmcgKnB0OworfTsKKworc3Rh dGljIGludCB3YWxrX3B0X3JhbmdlKHN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1LCB1NjQgcHQsCisJ CQkJdTY0IHN0YXJ0LCB1NjQgZW5kLCBzdHJ1Y3QgcHBndHRfd2FsayAqd2FsaykKK3sKKwljb25z dCBzdHJ1Y3QgaW50ZWxfZ3Z0X2RldmljZV9pbmZvICppbmZvID0gJnZncHUtPmd2dC0+ZGV2aWNl X2luZm87CisJc3RydWN0IGludGVsX2d2dF9ndHRfZ21hX29wcyAqZ21hX29wcyA9IHZncHUtPmd2 dC0+Z3R0LmdtYV9vcHM7CisJdW5zaWduZWQgbG9uZyBzdGFydF9pbmRleCwgZW5kX2luZGV4Owor CWludCByZXQ7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBtZm4sIGdmbjsKKworCXN0YXJ0X2lu ZGV4ID0gZ21hX29wcy0+Z21hX3RvX3B0ZV9pbmRleChzdGFydCk7CisJZW5kX2luZGV4ID0gKChl bmQgLSBzdGFydCkgPj4gUEFHRV9TSElGVCkgKyBzdGFydF9pbmRleDsKKworCXJldCA9IGludGVs X2d2dF9oeXBlcnZpc29yX3JlYWRfZ3BhKHZncHUsCisJCShwdCAmIFBBR0VfTUFTSykgKyAoc3Rh cnRfaW5kZXggPDwgaW5mby0+Z3R0X2VudHJ5X3NpemVfc2hpZnQpLAorCQl3YWxrLT5wdCArIHN0 YXJ0X2luZGV4LAorCQkoZW5kX2luZGV4IC0gc3RhcnRfaW5kZXgpIDw8IGluZm8tPmd0dF9lbnRy eV9zaXplX3NoaWZ0KTsKKwlpZiAocmV0KSB7CisJCWd2dF92Z3B1X2VycigiZmFpbCB0byByZWFk IGdwYSAlbGx4XG4iLCBwdCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZm9yIChpID0gc3RhcnRf aW5kZXg7IGkgPCBlbmRfaW5kZXg7IGkrKykgeworCQlnZm4gPSB3YWxrLT5wdFtpXSA+PiBQQUdF X1NISUZUOworCQltZm4gPSBpbnRlbF9ndnRfaHlwZXJ2aXNvcl9nZm5fdG9fbWZuKHZncHUsIGdm bik7CisJCWlmIChtZm4gPT0gSU5URUxfR1ZUX0lOVkFMSURfQUREUikgeworCQkJZ3Z0X3ZncHVf ZXJyKCJmYWlsIHRvIHRyYW5zbGF0ZSBnZm46IDB4JWx4XG4iLCBnZm4pOworCQkJcmV0dXJuIC1F TlhJTzsKKwkJfQorCQl3YWxrLT5tZm5zW3dhbGstPm1mbl9pbmRleCsrXSA9IG1mbiA8PCBQQUdF X1NISUZUOworCX0KKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgd2Fsa19wZF9yYW5n ZShzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSwgdTY0IHBkLAorCQkJCXU2NCBzdGFydCwgdTY0IGVu ZCwgc3RydWN0IHBwZ3R0X3dhbGsgKndhbGspCit7CisJY29uc3Qgc3RydWN0IGludGVsX2d2dF9k ZXZpY2VfaW5mbyAqaW5mbyA9ICZ2Z3B1LT5ndnQtPmRldmljZV9pbmZvOworCXN0cnVjdCBpbnRl bF9ndnRfZ3R0X2dtYV9vcHMgKmdtYV9vcHMgPSB2Z3B1LT5ndnQtPmd0dC5nbWFfb3BzOworCXVu c2lnbmVkIGxvbmcgaW5kZXg7CisJdTY0IHB0LCBuZXh0OworCWludCByZXQgID0gMDsKKworCWRv IHsKKwkJaW5kZXggPSBnbWFfb3BzLT5nbWFfdG9fcGRlX2luZGV4KHN0YXJ0KTsKKworCQlyZXQg PSBpbnRlbF9ndnRfaHlwZXJ2aXNvcl9yZWFkX2dwYSh2Z3B1LAorCQkJKHBkICYgUEFHRV9NQVNL KSArIChpbmRleCA8PAorCQkJaW5mby0+Z3R0X2VudHJ5X3NpemVfc2hpZnQpLCAmcHQsIDgpOwor CQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJbmV4dCA9IHBkX2FkZHJfZW5kKHN0YXJ0LCBl bmQpOworCQl3YWxrX3B0X3JhbmdlKHZncHUsIHB0LCBzdGFydCwgbmV4dCwgd2Fsayk7CisKKwkJ c3RhcnQgPSBuZXh0OworCX0gd2hpbGUgKHN0YXJ0ICE9IGVuZCk7CisKKwlyZXR1cm4gcmV0Owor fQorCisKK3N0YXRpYyBpbnQgd2Fsa19wZHBfcmFuZ2Uoc3RydWN0IGludGVsX3ZncHUgKnZncHUs IHU2NCBwZHAsCisJCQkJICB1NjQgc3RhcnQsIHU2NCBlbmQsIHN0cnVjdCBwcGd0dF93YWxrICp3 YWxrKQoreworCWNvbnN0IHN0cnVjdCBpbnRlbF9ndnRfZGV2aWNlX2luZm8gKmluZm8gPSAmdmdw dS0+Z3Z0LT5kZXZpY2VfaW5mbzsKKwlzdHJ1Y3QgaW50ZWxfZ3Z0X2d0dF9nbWFfb3BzICpnbWFf b3BzID0gdmdwdS0+Z3Z0LT5ndHQuZ21hX29wczsKKwl1bnNpZ25lZCBsb25nIGluZGV4OworCXU2 NCBwZCwgbmV4dDsKKwlpbnQgcmV0ICA9IDA7CisKKwlkbyB7CisJCWluZGV4ID0gZ21hX29wcy0+ Z21hX3RvX2w0X3BkcF9pbmRleChzdGFydCk7CisKKwkJcmV0ID0gaW50ZWxfZ3Z0X2h5cGVydmlz b3JfcmVhZF9ncGEodmdwdSwKKwkJCShwZHAgJiBQQUdFX01BU0spICsgKGluZGV4IDw8CisJCQlp bmZvLT5ndHRfZW50cnlfc2l6ZV9zaGlmdCksICZwZCwgOCk7CisJCWlmIChyZXQpCisJCQlyZXR1 cm4gcmV0OworCQluZXh0ID0gcGRwX2FkZHJfZW5kKHN0YXJ0LCBlbmQpOworCQl3YWxrX3BkX3Jh bmdlKHZncHUsIHBkLCBzdGFydCwgbmV4dCwgd2Fsayk7CisJCXN0YXJ0ID0gbmV4dDsKKwl9IHdo aWxlIChzdGFydCAhPSBlbmQpOworCisJcmV0dXJuIHJldDsKK30KKworCitzdGF0aWMgaW50IHdh bGtfcG1sNF9yYW5nZShzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSwgdTY0IHBtbDQsCisJCQkJdTY0 IHN0YXJ0LCB1NjQgZW5kLCBzdHJ1Y3QgcHBndHRfd2FsayAqd2FsaykKK3sKKwljb25zdCBzdHJ1 Y3QgaW50ZWxfZ3Z0X2RldmljZV9pbmZvICppbmZvID0gJnZncHUtPmd2dC0+ZGV2aWNlX2luZm87 CisJc3RydWN0IGludGVsX2d2dF9ndHRfZ21hX29wcyAqZ21hX29wcyA9IHZncHUtPmd2dC0+Z3R0 LmdtYV9vcHM7CisJdW5zaWduZWQgbG9uZyBpbmRleDsKKwl1NjQgcGRwLCBuZXh0OworCWludCBy ZXQgID0gMDsKKworCWRvIHsKKwkJaW5kZXggPSBnbWFfb3BzLT5nbWFfdG9fcG1sNF9pbmRleChz dGFydCk7CisJCXJldCA9IGludGVsX2d2dF9oeXBlcnZpc29yX3JlYWRfZ3BhKHZncHUsCisJCQko cG1sNCAmIFBBR0VfTUFTSykgKyAoaW5kZXggPDwKKwkJCWluZm8tPmd0dF9lbnRyeV9zaXplX3No aWZ0KSwgJnBkcCwgOCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQluZXh0ID0gcG1s NF9hZGRyX2VuZChzdGFydCwgZW5kKTsKKwkJd2Fsa19wZHBfcmFuZ2UodmdwdSwgcGRwLCBzdGFy dCwgbmV4dCwgd2Fsayk7CisJCXN0YXJ0ID0gbmV4dDsKKwl9IHdoaWxlIChzdGFydCAhPSBlbmQp OworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpbnRlbF92Z3B1X3B2X3BwZ3R0X2lu c2VydF80bHZsKHN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1LAorCQlzdHJ1Y3QgaW50ZWxfdmdwdV9t bSAqbW0sCisJCXU2NCBwbWw0LCB1NjQgc3RhcnQsIHU2NCBsZW5ndGgsIHUzMiBjYWNoZV9sZXZl bCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgc2dfdGFibGUgc3Q7CisJc3RydWN0IHNjYXR0 ZXJsaXN0ICpzZyA9IE5VTEw7CisJaW50IG51bV9wYWdlczsKKwlzdHJ1Y3QgaTkxNV92bWEgdm1h OworCXN0cnVjdCBwcGd0dF93YWxrIHdhbGs7CisJaW50IGk7CisKKwludW1fcGFnZXMgPSBsZW5n dGggPj4gUEFHRV9TSElGVDsKKworCXdhbGsubWZuX2luZGV4ID0gMDsKKwl3YWxrLm1mbnMgPSBO VUxMOworCXdhbGsucHQgPSBOVUxMOworCisJd2Fsay5tZm5zID0ga21hbGxvY19hcnJheShudW1f cGFnZXMsCisJCQlzaXplb2YodW5zaWduZWQgbG9uZyksIEdGUF9LRVJORUwpOworCWlmICghd2Fs ay5tZm5zKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDsKKwl9CisKKwl3YWxrLnB0 ID0gKHVuc2lnbmVkIGxvbmcgKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIDApOworCWlm ICghd2Fsay5wdCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCisJaWYg KHNnX2FsbG9jX3RhYmxlKCZzdCwgbnVtX3BhZ2VzLCBHRlBfS0VSTkVMKSkgeworCQlyZXQgPSAt RU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCisJcmV0ID0gd2Fsa19wbWw0X3JhbmdlKHZncHUs IHBtbDQsIHN0YXJ0LCBzdGFydCArIGxlbmd0aCwgJndhbGspOworCWlmIChyZXQpCisJCWdvdG8g ZmFpbF9mcmVlX3NnOworCisJV0FSTl9PTihudW1fcGFnZXMgIT0gd2Fsay5tZm5faW5kZXgpOwor CisJZm9yX2VhY2hfc2coc3Quc2dsLCBzZywgbnVtX3BhZ2VzLCBpKSB7CisJCXNnLT5vZmZzZXQg PSAwOworCQlzZy0+bGVuZ3RoID0gUEFHRV9TSVpFOworCQlzZ19kbWFfYWRkcmVzcyhzZykgPSB3 YWxrLm1mbnNbaV07CisJCXNnX2RtYV9sZW4oc2cpID0gUEFHRV9TSVpFOworCX0KKworCW1lbXNl dCgmdm1hLCAwLCBzaXplb2Yodm1hKSk7CisJdm1hLm5vZGUuc3RhcnQgPSBzdGFydDsKKwl2bWEu cGFnZXMgPSAmc3Q7CisJbW0tPnBwZ3R0LT52bS5pbnNlcnRfZW50cmllcygmbW0tPnBwZ3R0LT52 bSwgJnZtYSwgY2FjaGVfbGV2ZWwsIDApOworCitmYWlsX2ZyZWVfc2c6CisJc2dfZnJlZV90YWJs ZSgmc3QpOworZmFpbDoKKwlrZnJlZSh3YWxrLm1mbnMpOworCWZyZWVfcGFnZSgodW5zaWduZWQg bG9uZyl3YWxrLnB0KTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBpbnRlbF92Z3B1X2hhbmRs ZV9wdl9wcGd0dF91cGRhdGUoc3RydWN0IGludGVsX3ZncHUgKnZncHUsCisJCXUzMiBhY3Rpb24s IHN0cnVjdCBwdl9wcGd0dF91cGRhdGUgKnB2X3BwZ3R0KQoreworCXN0cnVjdCBpbnRlbF92Z3B1 X21tICptbTsKKwl1NjQgcGRwLCBzdGFydCwgbGVuZ3RoOworCXUzMiBjYWNoZV9sZXZlbDsKKwlp bnQgcmV0ID0gMDsKKworCXBkcCA9IHB2X3BwZ3R0LT5wZHA7CisJc3RhcnQgPSBwdl9wcGd0dC0+ c3RhcnQ7CisJbGVuZ3RoID0gcHZfcHBndHQtPmxlbmd0aDsKKwljYWNoZV9sZXZlbCA9IHB2X3Bw Z3R0LT5jYWNoZV9sZXZlbDsKKworCW1tID0gaW50ZWxfdmdwdV9maW5kX3BwZ3R0X21tKHZncHUs ICZwZHApOworCWlmICghbW0pIHsKKwkJZ3Z0X3ZncHVfZXJyKCJmYWlsZWQgdG8gZmluZCBwZHAg MHglbGx4XG4iLCBwZHApOworCQlyZXQgPSAtRUlOVkFMOworCX0KKworCWlmIChhY3Rpb24gPT0g UFZfQUNUSU9OX1BQR1RUX0w0X0FMTE9DKSB7CisJCXJldCA9IG1tLT5wcGd0dC0+dm0uYWxsb2Nh dGVfdmFfcmFuZ2UoJm1tLT5wcGd0dC0+dm0sCisJCQkJc3RhcnQsIGxlbmd0aCk7CisJCWlmIChy ZXQpCisJCQlndnRfdmdwdV9lcnIoImZhaWxlZCB0byBhbGxvYyAlbGx4XG4iLCBwZHApOworCX0K KworCWlmIChhY3Rpb24gPT0gUFZfQUNUSU9OX1BQR1RUX0w0X0NMRUFSKSB7CisJCW1tLT5wcGd0 dC0+dm0uY2xlYXJfcmFuZ2UoJm1tLT5wcGd0dC0+dm0sCisJCQkJc3RhcnQsIGxlbmd0aCk7CisJ fQorCisJaWYgKGFjdGlvbiA9PSAgUFZfQUNUSU9OX1BQR1RUX0w0X0lOU0VSVCkgeworCQlyZXQg PSBpbnRlbF92Z3B1X3B2X3BwZ3R0X2luc2VydF80bHZsKHZncHUsIG1tLAorCQkJCXBkcCwgc3Rh cnQsIGxlbmd0aCwgY2FjaGVfbGV2ZWwpOworCQlpZiAocmV0KQorCQkJZ3Z0X3ZncHVfZXJyKCJm YWlsZWQgdG8gaW5zZXJ0ICVsbHhcbiIsIHBkcCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndHQuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d2dC9ndHQuaAppbmRleCA4ODc4OTMxLi5hOTY5MzMxIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3R0LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0 L2d0dC5oCkBAIC0xNDEsNiArMTQxLDcgQEAgc3RydWN0IGludGVsX2d2dF9wYXJ0aWFsX3B0ZSB7 CiAKIHN0cnVjdCBpbnRlbF92Z3B1X21tIHsKIAllbnVtIGludGVsX2d2dF9tbV90eXBlIHR5cGU7 CisJc3RydWN0IGk5MTVfcHBndHQgKnBwZ3R0OwogCXN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1Owog CiAJc3RydWN0IGtyZWYgcmVmOwpAQCAtMjUzLDYgKzI1NCwxNCBAQCBzdHJ1Y3QgaW50ZWxfdmdw dV9wcGd0dF9zcHQgewogCXN0cnVjdCBsaXN0X2hlYWQgcG9zdF9zaGFkb3dfbGlzdDsKIH07CiAK Ky8qIHBwZ3R0IHB2IHN1cHBvcnQgZGF0YSBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBwdl9wcGd0dF91 cGRhdGUgeworCXU2NCBwZHA7CisJdTY0IHN0YXJ0OworCXU2NCBsZW5ndGg7CisJdTMyIGNhY2hl X2xldmVsOworfTsKKwogaW50IGludGVsX3ZncHVfc3luY19vb3NfcGFnZXMoc3RydWN0IGludGVs X3ZncHUgKnZncHUpOwogCiBpbnQgaW50ZWxfdmdwdV9mbHVzaF9wb3N0X3NoYWRvdyhzdHJ1Y3Qg aW50ZWxfdmdwdSAqdmdwdSk7CkBAIC0yNzgsNCArMjg3LDYgQEAgaW50IGludGVsX3ZncHVfZW11 bGF0ZV9nZ3R0X21taW9fcmVhZChzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSwKIGludCBpbnRlbF92 Z3B1X2VtdWxhdGVfZ2d0dF9tbWlvX3dyaXRlKHN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1LAogCXVu c2lnbmVkIGludCBvZmYsIHZvaWQgKnBfZGF0YSwgdW5zaWduZWQgaW50IGJ5dGVzKTsKIAoraW50 IGludGVsX3ZncHVfaGFuZGxlX3B2X3BwZ3R0X3VwZGF0ZShzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdw dSwKKwkJdTMyIGFjdGlvbiwgc3RydWN0IHB2X3BwZ3R0X3VwZGF0ZSAqcHZfcHBndHQpOwogI2Vu ZGlmIC8qIF9HVlRfR1RUX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dnQvZ3Z0LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmgKaW5kZXggNzEyMTNlMC4u NGU2NThhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2dC5oCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQuaApAQCAtNTMsNiArNTMsMTAgQEAKIAogI2Rl ZmluZSBHVlRfTUFYX1ZHUFUgOAogCisjZGVmaW5lIFZHUFVfUFZDQVAodmdwdSwgY2FwKQlcCisJ KCh2Z3B1X3ZyZWdfdCh2Z3B1LCB2Z3RpZl9yZWcocHZfY2FwcykpICYgKGNhcCkpIFwKKwkJCSYm IHZncHUtPnNoYXJlZF9wYWdlX2VuYWJsZWQpCisKIHN0cnVjdCBpbnRlbF9ndnRfaG9zdCB7CiAJ c3RydWN0IGRldmljZSAqZGV2OwogCWJvb2wgaW5pdGlhbGl6ZWQ7CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndnQvaGFuZGxlcnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2 dC9oYW5kbGVycy5jCmluZGV4IGViMDkwMDMuLjcxNzY4MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d2dC9oYW5kbGVycy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2 dC9oYW5kbGVycy5jCkBAIC0xMjA5LDYgKzEyMDksMTI3IEBAIHN0YXRpYyBpbnQgcHZpbmZvX21t aW9fcmVhZChzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSwgdW5zaWduZWQgaW50IG9mZnNldCwKIAly ZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3RfaGVhZGVyX2dldF9s ZW4odTMyIGhlYWRlcikKK3sKKwlyZXR1cm4gKGhlYWRlciA+PiBQVl9DVF9NU0dfTEVOX1NISUZU KSAmIFBWX0NUX01TR19MRU5fTUFTSzsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQg Y3RfaGVhZGVyX2dldF9hY3Rpb24odTMyIGhlYWRlcikKK3sKKwlyZXR1cm4gKGhlYWRlciA+PiBQ Vl9DVF9NU0dfQUNUSU9OX1NISUZUKSAmIFBWX0NUX01TR19BQ1RJT05fTUFTSzsKK30KKworc3Rh dGljIGludCBmZXRjaF9wdl9jb21tYW5kX2J1ZmZlcihzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSwK KwkJc3RydWN0IHZncHVfcHZfY3RfYnVmZmVyX2Rlc2MgKmRlc2MsCisJCXUzMiAqZmVuY2UsIHUz MiAqYWN0aW9uLCB1MzIgKmRhdGEpCit7CisJdTMyIGhlYWQsIHRhaWwsIGxlbiwgc2l6ZSwgb2Zm OworCXUzMiBjbWRfaGVhZDsKKwl1MzIgYXZhaWw7CisJdTMyIHJldDsKKworCS8qIGZldGNoIGNv bW1hbmQgZGVzY3JpcHRvciAqLworCW9mZiA9IFBWX0RFU0NfT0ZGOworCXJldCA9IGludGVsX2d2 dF9yZWFkX3NoYXJlZF9wYWdlKHZncHUsIG9mZiwgZGVzYywgc2l6ZW9mKCpkZXNjKSk7CisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKworCUdFTV9CVUdfT04oZGVzYy0+c2l6ZSAlIDQpOworCUdF TV9CVUdfT04oZGVzYy0+aGVhZCAlIDQpOworCUdFTV9CVUdfT04oZGVzYy0+dGFpbCAlIDQpOwor CUdFTV9CVUdfT04odGFpbCA+PSBzaXplKTsKKwlHRU1fQlVHX09OKGhlYWQgPj0gc2l6ZSk7CisK KwkvKiB0YWlsID09IGhlYWQgY29uZGl0aW9uIGluZGljYXRlcyBlbXB0eSAqLworCWhlYWQgPSBk ZXNjLT5oZWFkLzQ7CisJdGFpbCA9IGRlc2MtPnRhaWwvNDsKKwlzaXplID0gZGVzYy0+c2l6ZS80 OworCisJaWYgKHVubGlrZWx5KCh0YWlsIC0gaGVhZCkgPT0gMCkpCisJCXJldHVybiAtRU5PREFU QTsKKworCS8qIGZldGNoIGNvbW1hbmQgaGVhZCAqLworCW9mZiA9IGRlc2MtPmFkZHIgKyBoZWFk ICogNDsKKwlyZXQgPSBpbnRlbF9ndnRfcmVhZF9zaGFyZWRfcGFnZSh2Z3B1LCBvZmYsICZjbWRf aGVhZCwgNCk7CisJaGVhZCA9IChoZWFkICsgMSkgJSBzaXplOworCWlmIChyZXQpCisJCWdvdG8g ZXJyOworCisJbGVuID0gY3RfaGVhZGVyX2dldF9sZW4oY21kX2hlYWQpIC0gMTsKKwkqYWN0aW9u ID0gY3RfaGVhZGVyX2dldF9hY3Rpb24oY21kX2hlYWQpOworCisJLyogZmV0Y2ggY29tbWFuZCBm ZW5jZSAqLworCW9mZiA9IGRlc2MtPmFkZHIgKyBoZWFkICogNDsKKwlyZXQgPSBpbnRlbF9ndnRf cmVhZF9zaGFyZWRfcGFnZSh2Z3B1LCBvZmYsIGZlbmNlLCA0KTsKKwloZWFkID0gKGhlYWQgKyAx KSAlIHNpemU7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwkvKiBubyBjb21tYW5kIGRhdGEg Ki8KKwlpZiAobGVuID09IDApCisJCWdvdG8gZXJyOworCisJLyogZmV0Y2ggY29tbWFuZCBkYXRh ICovCisJYXZhaWwgPSBzaXplIC0gaGVhZDsKKwlpZiAobGVuIDw9IGF2YWlsKSB7CisJCW9mZiA9 ICBkZXNjLT5hZGRyICsgaGVhZCAqIDQ7CisJCXJldCA9IGludGVsX2d2dF9yZWFkX3NoYXJlZF9w YWdlKHZncHUsIG9mZiwgZGF0YSwgbGVuICogNCk7CisJCWhlYWQgPSAoaGVhZCArIGxlbikgJSBz aXplOworCQlpZiAocmV0KQorCQkJZ290byBlcnI7CisJfSBlbHNlIHsKKwkJLyogc3dhcCBjYXNl ICovCisJCW9mZiA9ICBkZXNjLT5hZGRyICsgaGVhZCAqIDQ7CisJCXJldCA9IGludGVsX2d2dF9y ZWFkX3NoYXJlZF9wYWdlKHZncHUsIG9mZiwgZGF0YSwgYXZhaWwgKiA0KTsKKwkJaGVhZCA9ICho ZWFkICsgYXZhaWwpICUgc2l6ZTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyOworCisJCW9mZiA9 IGRlc2MtPmFkZHI7CisJCXJldCA9IGludGVsX2d2dF9yZWFkX3NoYXJlZF9wYWdlKHZncHUsIG9m ZiwgJmRhdGFbYXZhaWxdLAorCQkJCShsZW4gLSBhdmFpbCkgKiA0KTsKKwkJaGVhZCA9IChoZWFk ICsgbGVuIC0gYXZhaWwpICUgc2l6ZTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyOworCX0KKwor ZXJyOgorCWRlc2MtPmhlYWQgPSBoZWFkICogNDsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMg aW50IGhhbmRsZV9wdl9hY3Rpb25zKHN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1KQoreworCXN0cnVj dCB2Z3B1X3B2X2N0X2J1ZmZlcl9kZXNjIGRlc2M7CisJdTMyIGZlbmNlLCBhY3Rpb247CisJdTMy IGRhdGFbMzJdOworCWludCByZXQ7CisJc3RydWN0IHB2X3BwZ3R0X3VwZGF0ZSAqcHBndHQ7CisK KwlyZXQgPSBmZXRjaF9wdl9jb21tYW5kX2J1ZmZlcih2Z3B1LCAmZGVzYywgJmZlbmNlLCAmYWN0 aW9uLCBkYXRhKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJc3dpdGNoIChhY3Rpb24p IHsKKwljYXNlIFBWX0FDVElPTl9QUEdUVF9MNF9BTExPQzoKKwljYXNlIFBWX0FDVElPTl9QUEdU VF9MNF9DTEVBUjoKKwljYXNlIFBWX0FDVElPTl9QUEdUVF9MNF9JTlNFUlQ6CisJCXBwZ3R0ID0g KHN0cnVjdCBwdl9wcGd0dF91cGRhdGUgKilkYXRhOworCQlyZXQgPSBpbnRlbF92Z3B1X2hhbmRs ZV9wdl9wcGd0dF91cGRhdGUodmdwdSwgYWN0aW9uLCBwcGd0dCk7CisJCWJyZWFrOworCWRlZmF1 bHQ6CisJCWJyZWFrOworCX0KKworCS8qIHdyaXRlIGNvbW1hbmQgZGVzY3JpcHRvciBiYWNrICov CisJZGVzYy5mZW5jZSA9IGZlbmNlOworCWRlc2Muc3RhdHVzID0gcmV0OworCisJcmV0ID0gaW50 ZWxfZ3Z0X3dyaXRlX3NoYXJlZF9wYWdlKHZncHUsIFBWX0RFU0NfT0ZGLAorCQkJJmRlc2MsIHNp emVvZihkZXNjKSk7CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCBoYW5kbGVfZzJ2X25v dGlmaWNhdGlvbihzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSwgaW50IG5vdGlmaWNhdGlvbikKIHsK IAllbnVtIGludGVsX2d2dF9ndHRfdHlwZSByb290X2VudHJ5X3R5cGUgPSBHVFRfVFlQRV9QUEdU VF9ST09UX0w0X0VOVFJZOwpAQCAtMTIxNyw2ICsxMzM4LDcgQEAgc3RhdGljIGludCBoYW5kbGVf ZzJ2X25vdGlmaWNhdGlvbihzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSwgaW50IG5vdGlmaWNhdGlv bikKIAl1bnNpZ25lZCBsb25nIGdwYSwgZ2ZuOwogCXUxNiB2ZXJfbWFqb3IgPSBQVl9NQUpPUjsK IAl1MTYgdmVyX21pbm9yID0gUFZfTUlOT1I7CisJaW50IHJldCA9IDA7CiAKIAlwZHBzID0gKHU2 NCAqKSZ2Z3B1X3ZyZWc2NF90KHZncHUsIHZndGlmX3JlZyhwZHBbMF0pKTsKIApAQCAtMTI0Myw2 ICsxMzY1LDkgQEAgc3RhdGljIGludCBoYW5kbGVfZzJ2X25vdGlmaWNhdGlvbihzdHJ1Y3QgaW50 ZWxfdmdwdSAqdmdwdSwgaW50IG5vdGlmaWNhdGlvbikKIAkJaW50ZWxfZ3Z0X3dyaXRlX3NoYXJl ZF9wYWdlKHZncHUsIDAsICZ2ZXJfbWFqb3IsIDIpOwogCQlpbnRlbF9ndnRfd3JpdGVfc2hhcmVk X3BhZ2UodmdwdSwgMiwgJnZlcl9taW5vciwgMik7CiAJCWJyZWFrOworCWNhc2UgVkdUX0cyVl9Q Vl9TRU5EX1RSSUdHRVI6CisJCXJldCA9IGhhbmRsZV9wdl9hY3Rpb25zKHZncHUpOworCQlicmVh azsKIAljYXNlIFZHVF9HMlZfRVhFQ0xJU1RfQ09OVEVYVF9DUkVBVEU6CiAJY2FzZSBWR1RfRzJW X0VYRUNMSVNUX0NPTlRFWFRfREVTVFJPWToKIAljYXNlIDE6CS8qIFJlbW92ZSB0aGlzIGluIGd1 ZXN0IGRyaXZlci4gKi8KQEAgLTEyNTAsNyArMTM3NSw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2cy dl9ub3RpZmljYXRpb24oc3RydWN0IGludGVsX3ZncHUgKnZncHUsIGludCBub3RpZmljYXRpb24p CiAJZGVmYXVsdDoKIAkJZ3Z0X3ZncHVfZXJyKCJJbnZhbGlkIFBWIG5vdGlmaWNhdGlvbiAlZFxu Iiwgbm90aWZpY2F0aW9uKTsKIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3Rh dGljIGludCBzZW5kX2Rpc3BsYXlfcmVhZHlfdWV2ZW50KHN0cnVjdCBpbnRlbF92Z3B1ICp2Z3B1 LCBpbnQgcmVhZHkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvdmdwdS5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L3ZncHUuYwppbmRleCA4MTFlZGJiLi5lOGE5NTdh IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvdmdwdS5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d2dC92Z3B1LmMKQEAgLTQ5LDYgKzQ5LDggQEAgdm9pZCBwb3B1bGF0 ZV9wdmluZm9fcGFnZShzdHJ1Y3QgaW50ZWxfdmdwdSAqdmdwdSkKIAl2Z3B1X3ZyZWdfdCh2Z3B1 LCB2Z3RpZl9yZWcodmd0X2NhcHMpKSB8PSBWR1RfQ0FQU19IVUdFX0dUVDsKIAl2Z3B1X3ZyZWdf dCh2Z3B1LCB2Z3RpZl9yZWcodmd0X2NhcHMpKSB8PSBWR1RfQ0FQU19QVjsKIAorCWlmICghaW50 ZWxfdnRkX2FjdGl2ZSgpKQorCQl2Z3B1X3ZyZWdfdCh2Z3B1LCB2Z3RpZl9yZWcocHZfY2Fwcykp ID0gUFZfUFBHVFRfVVBEQVRFOwogCXZncHVfdnJlZ190KHZncHUsIHZndGlmX3JlZyhhdmFpbF9y cy5tYXBwYWJsZV9nbWFkci5iYXNlKSkgPQogCQl2Z3B1X2FwZXJ0dXJlX2dtYWRyX2Jhc2Uodmdw dSk7CiAJdmdwdV92cmVnX3QodmdwdSwgdmd0aWZfcmVnKGF2YWlsX3JzLm1hcHBhYmxlX2dtYWRy LnNpemUpKSA9Ci0tIAoxLjguMy4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9pbnRlbC1nZng=