From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matthew Auld Subject: [PATCH 17/22] drm/i915/selftests: huge page tests Date: Tue, 15 Aug 2017 19:12:10 +0100 Message-ID: <20170815181215.18310-18-matthew.auld@intel.com> References: <20170815181215.18310-1-matthew.auld@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3A0266E342 for ; Tue, 15 Aug 2017 18:17:08 +0000 (UTC) In-Reply-To: <20170815181215.18310-1-matthew.auld@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 djI6IG1vY2sgdGVzdCBwYWdlIHN1cHBvcnQgY29uZmlndXJhdGlvbnMgYW5kIGFkZCBNSV9TVE9S RV9EV09SRCB0ZXN0Cgp2MzogcnVuIGFsbCBtb2NrYWJsZSBodWdlIHBhZ2UgdGVzdHMgb24gYWxs IHBsYXRmb3JtcyB2aWEgdGhlIG1vY2tfZGV2aWNlCgp2NDogYWRkIHBpbl91cGRhdGUgcmVncmVz c2lvbiB0ZXN0CiAgICB2YXJpb3VzIGltcHJvdmVtZW50cyBzdWdnZXN0ZWQgYnkgQ2hyaXMKCnY0 OiBmaXggaXNzdWVzIHJlcG9ydGVkIGJ5IGtidWlsZAogICAgdGVzdCBzaW5nbGUgc2cgc3Bhbm5p bmcgbXVsdGlwbGUgcGFnZSBzaXplcwogICAgZG9uJ3QgZXhwbG9kZSB3aGVuIHJ1bm5pbmcgdGhl IGxpdmUtdGVzdHMgdGhyb3VnaCB0aGUgYXBwZ3R0CgpTaWduZWQtb2ZmLWJ5OiBNYXR0aGV3IEF1 bGQgPG1hdHRoZXcuYXVsZEBpbnRlbC5jb20+CkNjOiBKb29uYXMgTGFodGluZW4gPGpvb25hcy5s YWh0aW5lbkBsaW51eC5pbnRlbC5jb20+CkNjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdp bHNvbi5jby51az4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAgICAg ICAgICAgICAgICB8ICAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2h1Z2Vf cGFnZXMuYyAgICAgICAgfCAxMjgxICsrKysrKysrKysrKysrKysrKysrCiAuLi4vZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9pOTE1X2xpdmVfc2VsZnRlc3RzLmggICB8ICAgIDEgKwogLi4uL2dwdS9k cm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9tb2NrX3NlbGZ0ZXN0cy5oICAgfCAgICAxICsKIDQgZmls ZXMgY2hhbmdlZCwgMTI4NCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2h1Z2VfcGFnZXMuYwoKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bS5jCmluZGV4IGY5MjRhMzM2YWFhMS4uNzM5M2I2MWYxZjE3IDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtLmMKQEAgLTU0MjMsNiArNTQyMyw3IEBAIGludCBpOTE1X2dlbV9vYmplY3RfYXR0YWNoX3Bo eXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgaW50IGFsaWduKQogI2luY2x1ZGUg InNlbGZ0ZXN0cy9zY2F0dGVybGlzdC5jIgogI2luY2x1ZGUgInNlbGZ0ZXN0cy9tb2NrX2dlbV9k ZXZpY2UuYyIKICNpbmNsdWRlICJzZWxmdGVzdHMvaHVnZV9nZW1fb2JqZWN0LmMiCisjaW5jbHVk ZSAic2VsZnRlc3RzL2h1Z2VfcGFnZXMuYyIKICNpbmNsdWRlICJzZWxmdGVzdHMvaTkxNV9nZW1f b2JqZWN0LmMiCiAjaW5jbHVkZSAic2VsZnRlc3RzL2k5MTVfZ2VtX2NvaGVyZW5jeS5jIgogI2Vu ZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaHVnZV9wYWdl cy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2h1Z2VfcGFnZXMuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjQ1MjMwMzQ4YzhkMwotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9odWdlX3BhZ2VzLmMKQEAg LTAsMCArMSwxMjgxIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTcgSW50ZWwgQ29ycG9yYXRp b24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwg dG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBh c3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRl YWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0 IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBw dWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9m IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0 d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25k aXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUg aW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAq IFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJ TkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwK KyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQu ICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMg QkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwg V0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklT SU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBP UiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICov CisKKyNpbmNsdWRlICIuLi9pOTE1X3NlbGZ0ZXN0LmgiCisKKyNpbmNsdWRlIDxsaW51eC9wcmlt ZV9udW1iZXJzLmg+CisKKyNpbmNsdWRlICJtb2NrX2RybS5oIgorCitzdGF0aWMgY29uc3QgdW5z aWduZWQgaW50IHBhZ2Vfc2l6ZXNbXSA9IHsKKwlJOTE1X0dUVF9QQUdFX1NJWkVfMUcsCisJSTkx NV9HVFRfUEFHRV9TSVpFXzJNLAorCUk5MTVfR1RUX1BBR0VfU0laRV82NEssCisJSTkxNV9HVFRf UEFHRV9TSVpFXzRLLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGludCBnZXRfbGFyZ2VzdF9wYWdl X3NpemUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCisJCQkJCSAgc2l6ZV90IHJlbSkK K3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBhZ2Vfc2l6ZXMpOyAr K2kpIHsKKwkJdW5zaWduZWQgaW50IHBhZ2Vfc2l6ZSA9IHBhZ2Vfc2l6ZXNbaV07CisKKwkJaWYg KEhBU19QQUdFX1NJWkUoaTkxNSwgcGFnZV9zaXplKSAmJiByZW0gPj0gcGFnZV9zaXplKQorCQkJ cmV0dXJuIHBhZ2Vfc2l6ZTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBz Z190YWJsZSAqCitmYWtlX2dldF9odWdlX3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmosCisJCSAgICB1bnNpZ25lZCBpbnQgKnNnX21hc2spCit7CisjZGVmaW5lIEdGUCAoR0ZQ X0tFUk5FTCB8IF9fR0ZQX05PV0FSTiB8IF9fR0ZQX05PUkVUUlkpCisJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUgPSB0b19pOTE1KG9iai0+YmFzZS5kZXYpOworCXNpemVfdCBtYXhfbGVu ID0gcm91bmRkb3duX3Bvd19vZl90d28oVUlOVF9NQVgpOworCXN0cnVjdCBzZ190YWJsZSAqc3Q7 CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlzaXplX3QgcmVtOworCisJc3QgPSBrbWFsbG9j KHNpemVvZigqc3QpLCBHRlApOworCWlmICghc3QpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0p OworCisJaWYgKHNnX2FsbG9jX3RhYmxlKHN0LCBvYmotPmJhc2Uuc2l6ZSA+PiBQQUdFX1NISUZU LCBHRlApKSB7CisJCWtmcmVlKHN0KTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQor CisJLyogVXNlIG9wdGltYWwgcGFnZSBzaXplZCBjaHVua3MgdG8gZmlsbCBpbiB0aGUgc2cgdGFi bGUgKi8KKwlyZW0gPSBvYmotPmJhc2Uuc2l6ZTsKKwlzZyA9IHN0LT5zZ2w7CisJc3QtPm5lbnRz ID0gMDsKKwlkbyB7CisJCXVuc2lnbmVkIGludCBwYWdlX3NpemUgPSBnZXRfbGFyZ2VzdF9wYWdl X3NpemUoaTkxNSwgcmVtKTsKKwkJdW5zaWduZWQgaW50IGxlbiA9IG1pbihwYWdlX3NpemUgKiAo cmVtIC8gcGFnZV9zaXplKSwgbWF4X2xlbik7CisKKwkJR0VNX0JVR19PTighcGFnZV9zaXplKTsK KworCQlzZy0+b2Zmc2V0ID0gMDsKKwkJc2ctPmxlbmd0aCA9IGxlbjsKKwkJc2dfZG1hX2xlbihz ZykgPSBsZW47CisJCXNnX2RtYV9hZGRyZXNzKHNnKSA9IHBhZ2Vfc2l6ZTsKKworCQkqc2dfbWFz ayB8PSBsZW47CisKKwkJc3QtPm5lbnRzKys7CisKKwkJcmVtIC09IGxlbjsKKwkJaWYgKCFyZW0p IHsKKwkJCXNnX21hcmtfZW5kKHNnKTsKKwkJCWJyZWFrOworCQl9CisKKwkJc2cgPSBzZ19uZXh0 KHNnKTsKKwl9IHdoaWxlICgxKTsKKworCW9iai0+bW0ubWFkdiA9IEk5MTVfTUFEVl9ET05UTkVF RDsKKworCXJldHVybiBzdDsKK30KKworc3RhdGljIHN0cnVjdCBzZ190YWJsZSAqCitmYWtlX2dl dF9odWdlX3BhZ2VzX3NpbmdsZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJ ICAgdW5zaWduZWQgaW50ICpzZ19tYXNrKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1ID0gdG9faTkxNShvYmotPmJhc2UuZGV2KTsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnN0OworCXN0 cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJdW5zaWduZWQgaW50IHBhZ2Vfc2l6ZTsKKworCXN0ID0g a21hbGxvYyhzaXplb2YoKnN0KSwgR0ZQKTsKKwlpZiAoIXN0KQorCQlyZXR1cm4gRVJSX1BUUigt RU5PTUVNKTsKKworCWlmIChzZ19hbGxvY190YWJsZShzdCwgMSwgR0ZQKSkgeworCQlrZnJlZShz dCk7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KKworCXNnID0gc3QtPnNnbDsKKwlz dC0+bmVudHMgPSAxOworCisJcGFnZV9zaXplID0gZ2V0X2xhcmdlc3RfcGFnZV9zaXplKGk5MTUs IG9iai0+YmFzZS5zaXplKTsKKworCUdFTV9CVUdfT04oIXBhZ2Vfc2l6ZSk7CisKKwlzZy0+b2Zm c2V0ID0gMDsKKwlzZy0+bGVuZ3RoID0gb2JqLT5iYXNlLnNpemU7CisJc2dfZG1hX2xlbihzZykg PSBvYmotPmJhc2Uuc2l6ZTsKKwlzZ19kbWFfYWRkcmVzcyhzZykgPSBwYWdlX3NpemU7CisKKwkq c2dfbWFzayB8PSBvYmotPmJhc2Uuc2l6ZTsKKworCW9iai0+bW0ubWFkdiA9IEk5MTVfTUFEVl9E T05UTkVFRDsKKworCXJldHVybiBzdDsKKyN1bmRlZiBHRlAKK30KKworc3RhdGljIHZvaWQgZmFr ZV9mcmVlX2h1Z2VfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJCQkg c3RydWN0IHNnX3RhYmxlICpwYWdlcykKK3sKKwlzZ19mcmVlX3RhYmxlKHBhZ2VzKTsKKwlrZnJl ZShwYWdlcyk7Cit9CisKK3N0YXRpYyB2b2lkIGZha2VfcHV0X2h1Z2VfcGFnZXMoc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJCQlzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzKQorewor CWZha2VfZnJlZV9odWdlX3BhZ2VzKG9iaiwgcGFnZXMpOworCW9iai0+bW0uZGlydHkgPSBmYWxz ZTsKKwlvYmotPm1tLm1hZHYgPSBJOTE1X01BRFZfV0lMTE5FRUQ7Cit9CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdF9vcHMgZmFrZV9vcHMgPSB7CisJLmZsYWdzID0g STkxNV9HRU1fT0JKRUNUX0lTX1NIUklOS0FCTEUsCisJLmdldF9wYWdlcyA9IGZha2VfZ2V0X2h1 Z2VfcGFnZXMsCisJLnB1dF9wYWdlcyA9IGZha2VfcHV0X2h1Z2VfcGFnZXMsCit9OworCitzdGF0 aWMgY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Rfb3BzIGZha2Vfb3BzX3NpbmdsZSA9 IHsKKwkuZmxhZ3MgPSBJOTE1X0dFTV9PQkpFQ1RfSVNfU0hSSU5LQUJMRSwKKwkuZ2V0X3BhZ2Vz ID0gZmFrZV9nZXRfaHVnZV9wYWdlc19zaW5nbGUsCisJLnB1dF9wYWdlcyA9IGZha2VfcHV0X2h1 Z2VfcGFnZXMsCit9OworCitzdGF0aWMgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKgorZmFr ZV9odWdlX3BhZ2VzX29iamVjdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgdTY0IHNp emUsIGJvb2wgc2luZ2xlKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CisK KwlHRU1fQlVHX09OKCFzaXplKTsKKwlHRU1fQlVHX09OKCFJU19BTElHTkVEKHNpemUsIEk5MTVf R1RUX1BBR0VfU0laRSkpOworCisJaWYgKHNpemUgPj4gUEFHRV9TSElGVCA+IFVJTlRfTUFYKQor CQlyZXR1cm4gRVJSX1BUUigtRTJCSUcpOworCisJaWYgKG92ZXJmbG93c190eXBlKHNpemUsIG9i ai0+YmFzZS5zaXplKSkKKwkJcmV0dXJuIEVSUl9QVFIoLUUyQklHKTsKKworCW9iaiA9IGk5MTVf Z2VtX29iamVjdF9hbGxvYyhpOTE1KTsKKwlpZiAoIW9iaikKKwkJcmV0dXJuIEVSUl9QVFIoLUVO T01FTSk7CisKKwlkcm1fZ2VtX3ByaXZhdGVfb2JqZWN0X2luaXQoJmk5MTUtPmRybSwgJm9iai0+ YmFzZSwgc2l6ZSk7CisKKwlpZiAoc2luZ2xlKQorCQlpOTE1X2dlbV9vYmplY3RfaW5pdChvYmos ICZmYWtlX29wc19zaW5nbGUpOworCWVsc2UKKwkJaTkxNV9nZW1fb2JqZWN0X2luaXQob2JqLCAm ZmFrZV9vcHMpOworCisJb2JqLT5iYXNlLndyaXRlX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9D UFU7CisJb2JqLT5iYXNlLnJlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RPTUFJTl9DUFU7CisJb2Jq LT5jYWNoZV9sZXZlbCA9IEk5MTVfQ0FDSEVfTk9ORTsKKworCXJldHVybiBvYmo7Cit9CisKK3N0 YXRpYyBpbnQgaWd0X21vY2tfZXhoYXVzdF9kZXZpY2Vfc3VwcG9ydGVkX3BhZ2VzKHZvaWQgKmFy ZykKK3sKKwlzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQgPSBhcmc7CisJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUgPSBwcGd0dC0+YmFzZS5pOTE1OworCXVuc2lnbmVkIGludCBzYXZl ZF9tYXNrID0gSU5URUxfSU5GTyhpOTE1KS0+cGFnZV9zaXplX21hc2s7CisJc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iajsKKwlpbnQgaSwgaiwgc2luZ2xlOworCWludCBlcnI7CisKKwkv KiBTYW5pdHkgY2hlY2sgY3JlYXRpbmcgb2JqZWN0cyB3aXRoIGV2ZXJ5IHZhbGlkIHBhZ2Ugc3Vw cG9ydAorCSAqIGNvbWJpbmF0aW9uIGZvciBvdXIgbW9jayBkZXZpY2UuCisJICovCisKKwlmb3Ig KGkgPSAxOyBpIDwgQklUKEFSUkFZX1NJWkUocGFnZV9zaXplcykpOyBpKyspIHsKKwkJdW5zaWdu ZWQgaW50IGNvbWJpbmF0aW9uID0gMDsKKwkJc3RydWN0IGk5MTVfdm1hICp2bWE7CisKKwkJZm9y IChqID0gMDsgaiA8IEFSUkFZX1NJWkUocGFnZV9zaXplcyk7IGorKykgeworCQkJaWYgKGkgJiBC SVQoaikpCisJCQkJY29tYmluYXRpb24gfD0gcGFnZV9zaXplc1tqXTsKKwkJfQorCisJCW1rd3Jp dGVfZGV2aWNlX2luZm8oaTkxNSktPnBhZ2Vfc2l6ZV9tYXNrID0gY29tYmluYXRpb247CisKKwkJ Zm9yIChzaW5nbGUgPSAwOyBzaW5nbGUgPD0gMTsgKytzaW5nbGUpIHsKKwkJCW9iaiA9IGZha2Vf aHVnZV9wYWdlc19vYmplY3QoaTkxNSwgY29tYmluYXRpb24sICEhc2luZ2xlKTsKKwkJCWlmIChJ U19FUlIob2JqKSkgeworCQkJCWVyciA9IFBUUl9FUlIob2JqKTsKKwkJCQlnb3RvIG91dF9kZXZp Y2U7CisJCQl9CisKKwkJCUdFTV9CVUdfT04ob2JqLT5iYXNlLnNpemUgIT0gY29tYmluYXRpb24p OworCisJCQllcnIgPSBpOTE1X2dlbV9vYmplY3RfcGluX3BhZ2VzKG9iaik7CisJCQlpZiAoZXJy KQorCQkJCWdvdG8gb3V0X3B1dDsKKworCQkJR0VNX0JVR19PTihvYmotPm1tLnBhZ2Vfc2l6ZXMu c2cgIT0gY29tYmluYXRpb24pOworCisJCQl2bWEgPSBpOTE1X3ZtYV9pbnN0YW5jZShvYmosICZw cGd0dC0+YmFzZSwgTlVMTCk7CisJCQlpZiAoSVNfRVJSKHZtYSkpIHsKKwkJCQllcnIgPSBQVFJf RVJSKHZtYSk7CisJCQkJZ290byBvdXRfdW5waW47CisJCQl9CisKKwkJCWVyciA9IGk5MTVfdm1h X3Bpbih2bWEsIDAsIDAsIFBJTl9VU0VSKTsKKwkJCWlmIChlcnIpIHsKKwkJCQlpOTE1X3ZtYV9j bG9zZSh2bWEpOworCQkJCWdvdG8gb3V0X3VucGluOworCQkJfQorCisJCQlHRU1fQlVHX09OKG9i ai0+bW0ucGFnZV9zaXplcy5ndHQpOworCQkJR0VNX0JVR19PTighdm1hLT5wYWdlX3NpemVzLnNn KTsKKwkJCUdFTV9CVUdfT04oIXZtYS0+cGFnZV9zaXplcy5waHlzKTsKKworCQkJR0VNX0JVR19P Tih2bWEtPnBhZ2Vfc2l6ZXMuZ3R0ICYgfmNvbWJpbmF0aW9uKTsKKworCQkJaTkxNV92bWFfdW5w aW4odm1hKTsKKwkJCWk5MTVfdm1hX2Nsb3NlKHZtYSk7CisKKwkJCWk5MTVfZ2VtX29iamVjdF91 bnBpbl9wYWdlcyhvYmopOworCQkJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOworCQl9CisJfQor CisJZ290byBvdXRfZGV2aWNlOworCitvdXRfdW5waW46CisJaTkxNV9nZW1fb2JqZWN0X3VucGlu X3BhZ2VzKG9iaik7CitvdXRfcHV0OgorCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKK291dF9k ZXZpY2U6CisJbWt3cml0ZV9kZXZpY2VfaW5mbyhpOTE1KS0+cGFnZV9zaXplX21hc2sgPSBzYXZl ZF9tYXNrOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBpZ3RfbW9ja19wcGd0dF9t aXNhbGlnbmVkX2RtYSh2b2lkICphcmcpCit7CisJc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0 ID0gYXJnOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gcHBndHQtPmJhc2UuaTkx NTsKKwl1bnNpZ25lZCBsb25nIHN1cHBvcnRlZCA9IElOVEVMX0lORk8oaTkxNSktPnBhZ2Vfc2l6 ZV9tYXNrOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CisJaW50IGJpdDsKKwlp bnQgZXJyOworCisJLyogU2FuaXR5IGNoZWNrIGRtYSBtaXNhbGlnbm1lbnQgZm9yIGh1Z2UgcGFn ZXMgLS0gdGhlIGRtYSBhZGRyZXNzZXMgd2UKKwkgKiBpbnNlcnQgaW50byB0aGUgcGFnaW5nIHN0 cnVjdHVyZXMgbmVlZCB0byBhbHdheXMgcmVzcGVjdCB0aGUgcGFnZQorCSAqIHNpemUgYWxpZ25t ZW50LgorCSAqLworCisJYml0ID0gaWxvZzIoSTkxNV9HVFRfUEFHRV9TSVpFXzY0Syk7CisKKwlm b3JfZWFjaF9zZXRfYml0X2Zyb20oYml0LCAmc3VwcG9ydGVkLCBCSVRTX1BFUl9MT05HKSB7CisJ CUlHVF9USU1FT1VUKGVuZF90aW1lKTsKKwkJdW5zaWduZWQgaW50IHBhZ2Vfc2l6ZSA9IEJJVChi aXQpOworCQl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBQSU5fVVNFUiB8IFBJTl9PRkZTRVRfRklYRUQ7 CisJCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOworCQl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCQl1bnNp Z25lZCBpbnQgc2l6ZSA9CisJCQlyb3VuZF91cChwYWdlX3NpemUsIEk5MTVfR1RUX1BBR0VfU0la RV8yTSkgPDwgMTsKKworCQlvYmogPSBmYWtlX2h1Z2VfcGFnZXNfb2JqZWN0KGk5MTUsIHNpemUs IHRydWUpOworCQlpZiAoSVNfRVJSKG9iaikpCisJCQlyZXR1cm4gUFRSX0VSUihvYmopOworCisJ CUdFTV9CVUdfT04ob2JqLT5iYXNlLnNpemUgIT0gc2l6ZSk7CisKKwkJZXJyID0gaTkxNV9nZW1f b2JqZWN0X3Bpbl9wYWdlcyhvYmopOworCQlpZiAoZXJyKQorCQkJZ290byBvdXRfcHV0OworCisJ CUdFTV9CVUdfT04oIShvYmotPm1tLnBhZ2Vfc2l6ZXMuc2cgJiBwYWdlX3NpemUpKTsKKworCQkv KiBGb3JjZSB0aGUgcGFnZSBzaXplIGZvciB0aGlzIG9iamVjdCAqLworCQlvYmotPm1tLnBhZ2Vf c2l6ZXMuc2cgPSBwYWdlX3NpemU7CisKKwkJdm1hID0gaTkxNV92bWFfaW5zdGFuY2Uob2JqLCAm cHBndHQtPmJhc2UsIE5VTEwpOworCQlpZiAoSVNfRVJSKHZtYSkpIHsKKwkJCWVyciA9IFBUUl9F UlIodm1hKTsKKwkJCWdvdG8gb3V0X3VucGluOworCQl9CisKKwkJZXJyID0gaTkxNV92bWFfcGlu KHZtYSwgMCwgMCwgZmxhZ3MpOworCQlpZiAoZXJyKSB7CisJCQlpOTE1X3ZtYV9jbG9zZSh2bWEp OworCQkJZ290byBvdXRfdW5waW47CisJCX0KKworCQlHRU1fQlVHX09OKHZtYS0+cGFnZV9zaXpl cy5ndHQgIT0gcGFnZV9zaXplKTsKKworCQlpOTE1X3ZtYV91bnBpbih2bWEpOworCQllcnIgPSBp OTE1X3ZtYV91bmJpbmQodm1hKTsKKwkJaWYgKGVycikgeworCQkJaTkxNV92bWFfY2xvc2Uodm1h KTsKKwkJCWdvdG8gb3V0X3VucGluOworCQl9CisKKwkJLyogVHJ5IGFsbCB0aGUgb3RoZXIgdmFs aWQgb2Zmc2V0cyB1bnRpbCB0aGUgbmV4dAorCQkgKiBib3VuZGFyeSAtLSBzaG91bGQgYWx3YXlz IGZhbGwgYmFjayB0byB1c2luZyA0SworCQkgKiBwYWdlcy4KKwkJICovCisJCWZvciAob2Zmc2V0 ID0gNDA5Njsgb2Zmc2V0IDwgcGFnZV9zaXplOyBvZmZzZXQgKz0gNDA5NikgeworCQkJZXJyID0g aTkxNV92bWFfcGluKHZtYSwgMCwgMCwgZmxhZ3MgfCBvZmZzZXQpOworCQkJaWYgKGVycikgewor CQkJCWk5MTVfdm1hX2Nsb3NlKHZtYSk7CisJCQkJZ290byBvdXRfdW5waW47CisJCQl9CisKKwkJ CUdFTV9CVUdfT04odm1hLT5wYWdlX3NpemVzLmd0dCAhPQorCQkJCSAgIEk5MTVfR1RUX1BBR0Vf U0laRV80Syk7CisKKwkJCWk5MTVfdm1hX3VucGluKHZtYSk7CisJCQllcnIgPSBpOTE1X3ZtYV91 bmJpbmQodm1hKTsKKwkJCWlmIChlcnIpIHsKKwkJCQlpOTE1X3ZtYV9jbG9zZSh2bWEpOworCQkJ CWdvdG8gb3V0X3VucGluOworCQkJfQorCisJCQlpZiAoaWd0X3RpbWVvdXQoZW5kX3RpbWUsCisJ CQkJCSIlcyB0aW1lZCBvdXQgYXQgb2Zmc2V0ICV4IHdpdGggcGFnZS1zaXplICV4XG4iLAorCQkJ CQlfX2Z1bmNfXywgb2Zmc2V0LCBwYWdlX3NpemUpKQorCQkJCWJyZWFrOworCQl9CisKKwkJaTkx NV92bWFfY2xvc2Uodm1hKTsKKworCQlpOTE1X2dlbV9vYmplY3RfdW5waW5fcGFnZXMob2JqKTsK KwkJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOworCX0KKworCXJldHVybiAwOworCitvdXRfdW5w aW46CisJaTkxNV9nZW1fb2JqZWN0X3VucGluX3BhZ2VzKG9iaik7CitvdXRfcHV0OgorCWk5MTVf Z2VtX29iamVjdF9wdXQob2JqKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGNs b3NlX29iamVjdF9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKm9iamVjdHMsCisJCQkgICAgICBzdHJ1 Y3QgaTkxNV9od19wcGd0dCAqcHBndHQpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaiwgKm9uOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG9iaiwgb24sIG9iamVjdHMs IHN0X2xpbmspIHsKKwkJc3RydWN0IGk5MTVfdm1hICp2bWE7CisKKwkJdm1hID0gaTkxNV92bWFf aW5zdGFuY2Uob2JqLCAmcHBndHQtPmJhc2UsIE5VTEwpOworCQlpZiAoIUlTX0VSUih2bWEpKQor CQkJaTkxNV92bWFfY2xvc2Uodm1hKTsKKworCQlsaXN0X2RlbCgmb2JqLT5zdF9saW5rKTsKKwkJ aTkxNV9nZW1fb2JqZWN0X3VucGluX3BhZ2VzKG9iaik7CisJCWk5MTVfZ2VtX29iamVjdF9wdXQo b2JqKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaWd0X21vY2tfcHBndHRfaHVnZV9maWxsKHZvaWQg KmFyZykKK3sKKwlzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQgPSBhcmc7CisJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBwcGd0dC0+YmFzZS5pOTE1OworCXVuc2lnbmVkIGxvbmcg bWF4X3BhZ2VzID0gcHBndHQtPmJhc2UudG90YWwgPj4gUEFHRV9TSElGVDsKKwl1bnNpZ25lZCBs b25nIHBhZ2VfbnVtOworCWJvb2wgc2luZ2xlID0gZmFsc2U7CisJTElTVF9IRUFEKG9iamVjdHMp OworCUlHVF9USU1FT1VUKGVuZF90aW1lKTsKKwlpbnQgZXJyOworCisJZm9yX2VhY2hfcHJpbWVf bnVtYmVyX2Zyb20ocGFnZV9udW0sIDEsIG1heF9wYWdlcykgeworCQlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqOworCQlzaXplX3Qgc2l6ZSA9IHBhZ2VfbnVtIDw8IFBBR0VfU0hJRlQ7 CisJCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOworCQl1bnNpZ25lZCBpbnQgZXhwZWN0ZWRfZ3R0ID0g MDsKKwkJaW50IGk7CisKKwkJb2JqID0gZmFrZV9odWdlX3BhZ2VzX29iamVjdChpOTE1LCBzaXpl LCBzaW5nbGUpOworCQlpZiAoSVNfRVJSKG9iaikpIHsKKwkJCWVyciA9IFBUUl9FUlIob2JqKTsK KwkJCWJyZWFrOworCQl9CisKKwkJR0VNX0JVR19PTihvYmotPmJhc2Uuc2l6ZSAhPSBzaXplKTsK KworCQllcnIgPSBpOTE1X2dlbV9vYmplY3RfcGluX3BhZ2VzKG9iaik7CisJCWlmIChlcnIpIHsK KwkJCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKKwkJCWJyZWFrOworCQl9CisKKwkJbGlzdF9h ZGQoJm9iai0+c3RfbGluaywgJm9iamVjdHMpOworCisJCUdFTV9CVUdfT04oIW9iai0+bW0ucGFn ZV9zaXplcy5zZyk7CisKKwkJdm1hID0gaTkxNV92bWFfaW5zdGFuY2Uob2JqLCAmcHBndHQtPmJh c2UsIE5VTEwpOworCQlpZiAoSVNfRVJSKHZtYSkpIHsKKwkJCWVyciA9IFBUUl9FUlIodm1hKTsK KwkJCWJyZWFrOworCQl9CisKKwkJZXJyID0gaTkxNV92bWFfcGluKHZtYSwgMCwgMCwgUElOX1VT RVIpOworCQlpZiAoZXJyKQorCQkJYnJlYWs7CisKKwkJR0VNX0JVR19PTihvYmotPm1tLnBhZ2Vf c2l6ZXMuZ3R0KTsKKwkJR0VNX0JVR19PTighdm1hLT5wYWdlX3NpemVzLnNnKTsKKwkJR0VNX0JV R19PTighdm1hLT5wYWdlX3NpemVzLnBoeXMpOworCisJCS8qIEZpZ3VyZSBvdXQgdGhlIGV4cGVj dGVkIGd0dCBwYWdlIHNpemUga25vd2luZyB0aGF0IHdlIGdvIGZyb20KKwkJICogbGFyZ2VzdCB0 byBzbWFsbGVzdCBwYWdlIHNpemUgc2cgY2h1bmtzLCBhbmQgdGhhdCB3ZSBhbGlnbiB0bworCQkg KiB0aGUgbGFyZ2VzdCBwYWdlIHNpemUuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRShwYWdlX3NpemVzKTsgKytpKSB7CisJCQl1bnNpZ25lZCBpbnQgcGFnZV9zaXplID0gcGFn ZV9zaXplc1tpXTsKKworCQkJaWYgKEhBU19QQUdFX1NJWkUoaTkxNSwgcGFnZV9zaXplKSAmJgor CQkJICAgIHNpemUgPj0gcGFnZV9zaXplKSB7CisJCQkJZXhwZWN0ZWRfZ3R0IHw9IHBhZ2Vfc2l6 ZTsKKwkJCQlzaXplICY9IHBhZ2Vfc2l6ZS0xOworCQkJfQorCQl9CisKKwkJR0VNX0JVR19PTigh ZXhwZWN0ZWRfZ3R0KTsKKwkJR0VNX0JVR19PTihzaXplKTsKKworCQlpZiAoZXhwZWN0ZWRfZ3R0 ICYgSTkxNV9HVFRfUEFHRV9TSVpFXzRLKQorCQkJZXhwZWN0ZWRfZ3R0ICY9IH5JOTE1X0dUVF9Q QUdFX1NJWkVfNjRLOworCisJCUdFTV9CVUdfT04odm1hLT5wYWdlX3NpemVzLmd0dCAhPSBleHBl Y3RlZF9ndHQpOworCisJCWlmICh2bWEtPnBhZ2Vfc2l6ZXMuc2cgJiBJOTE1X0dUVF9QQUdFX1NJ WkVfNjRLKSB7CisJCQlHRU1fQlVHX09OKCFJU19BTElHTkVEKHZtYS0+bm9kZS5zdGFydCwKKwkJ CQkJICAgICAgIEk5MTVfR1RUX1BBR0VfU0laRV8yTSkpOworCQkJR0VNX0JVR19PTighSVNfQUxJ R05FRCh2bWEtPm5vZGUuc2l6ZSwKKwkJCQkJICAgICAgIEk5MTVfR1RUX1BBR0VfU0laRV8yTSkp OworCQl9CisKKwkJaTkxNV92bWFfdW5waW4odm1hKTsKKworCQlpZiAoaWd0X3RpbWVvdXQoZW5k X3RpbWUsCisJCQkJIiVzIHRpbWVkIG91dCBhdCBzaXplICV6ZFxuIiwKKwkJCQlfX2Z1bmNfXywg b2JqLT5iYXNlLnNpemUpKQorCQkJYnJlYWs7CisKKwkJc2luZ2xlID0gIXNpbmdsZTsKKwl9CisK KwljbG9zZV9vYmplY3RfbGlzdCgmb2JqZWN0cywgcHBndHQpOworCisJaWYgKGVyciA9PSAtRU5P TUVNIHx8IGVyciA9PSAtRU5PU1BDKQorCQllcnIgPSAwOworCisJcmV0dXJuIGVycjsKK30KKwor c3RhdGljIGludCBpZ3RfbW9ja19wcGd0dF82NEsodm9pZCAqYXJnKQoreworCXN0cnVjdCBpOTE1 X2h3X3BwZ3R0ICpwcGd0dCA9IGFyZzsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9 IHBwZ3R0LT5iYXNlLmk5MTU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKKwlj b25zdCBzdHJ1Y3Qgb2JqZWN0X2luZm8geworCQl1bnNpZ25lZCBpbnQgc2l6ZTsKKwkJdW5zaWdu ZWQgaW50IGd0dDsKKwkJdW5zaWduZWQgaW50IG9mZnNldDsKKwl9IG9iamVjdHNbXSA9IHsKKwkJ LyogQ2FzZXMgd2l0aCBmb3JjZWQgcGFkZGluZy9hbGlnbm1lbnQgKi8KKwkJeworCQkJLnNpemUg PSBTWl82NEssCisJCQkuZ3R0ID0gSTkxNV9HVFRfUEFHRV9TSVpFXzY0SywKKwkJCS5vZmZzZXQg PSAwLAorCQl9LAorCQl7CisJCQkuc2l6ZSA9IFNaXzY0SyArIFNaXzRLLAorCQkJLmd0dCA9IEk5 MTVfR1RUX1BBR0VfU0laRV80SywKKwkJCS5vZmZzZXQgPSAwLgorCQl9LAorCQl7CisJCQkuc2l6 ZSA9IFNaXzJNIC0gU1pfNEssCisJCQkuZ3R0ID0gSTkxNV9HVFRfUEFHRV9TSVpFXzRLLAorCQkJ Lm9mZnNldCA9IDAsCisJCX0sCisJCXsKKwkJCS5zaXplID0gU1pfMk0gKyBTWl82NEssCisJCQku Z3R0ID0gSTkxNV9HVFRfUEFHRV9TSVpFXzY0SywKKwkJCS5vZmZzZXQgPSAwLAorCQl9LAorCQl7 CisJCQkuc2l6ZSA9IFNaXzJNICsgU1pfNEssCisJCQkuZ3R0ID0gSTkxNV9HVFRfUEFHRV9TSVpF XzY0SyB8IEk5MTVfR1RUX1BBR0VfU0laRV80SywKKwkJCS5vZmZzZXQgPSAwLAorCQl9LAorCQkv KiBUcnkgd2l0aG91dCBhbnkgZm9yY2VkIHBhZGRpbmcvYWxpZ25tZW50ICovCisJCXsKKwkJCS5z aXplID0gU1pfNjRLLAorCQkJLm9mZnNldCA9IFNaXzJNLAorCQkJLmd0dCA9IEk5MTVfR1RUX1BB R0VfU0laRV80SywKKwkJfSwKKwkJeworCQkJLnNpemUgPSBTWl8xMjhLLAorCQkJLm9mZnNldCA9 IFNaXzJNIC0gU1pfNjRLLAorCQkJLmd0dCA9IEk5MTVfR1RUX1BBR0VfU0laRV80SywKKwkJfSwK Kwl9OworCWludCBpLCBzaW5nbGU7CisJaW50IGVycjsKKworCS8qIFNhbml0eSBjaGVjayBzb21l IG9mIHRoZSB0cmlja2luZXNzIHdpdGggNjRLIHBhZ2VzIC0tIGVpdGhlciB3ZSBjYW4KKwkgKiBz YWZlbHkgbWFyayB0aGUgd2hvbGUgcGFnZS10YWJsZSgyTSBibG9jaykgYXMgNjRLLCBvciB3ZSBo YXZlIHRvCisJICogYWx3YXlzIGZhbGxiYWNrIHRvIDRLLgorCSAqLworCisJaWYgKCFIQVNfUEFH RV9TSVpFKGk5MTUsIEk5MTVfR1RUX1BBR0VfU0laRV82NEspKQorCQlyZXR1cm4gMDsKKworCWZv ciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG9iamVjdHMpOyArK2kpIHsKKwkJdW5zaWduZWQgaW50 IHNpemUgPSBvYmplY3RzW2ldLnNpemU7CisJCXVuc2lnbmVkIGludCBleHBlY3RlZF9ndHQgPSBv YmplY3RzW2ldLmd0dDsKKwkJdW5zaWduZWQgaW50IG9mZnNldCA9IG9iamVjdHNbaV0ub2Zmc2V0 OworCQlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKKwkJdW5zaWduZWQgaW50IGZsYWdzID0gUElOX1VT RVI7CisKKwkJZm9yIChzaW5nbGUgPSAwOyBzaW5nbGUgPD0gMTsgc2luZ2xlKyspIHsKKwkJCW9i aiA9IGZha2VfaHVnZV9wYWdlc19vYmplY3QoaTkxNSwgc2l6ZSwgISFzaW5nbGUpOworCQkJaWYg KElTX0VSUihvYmopKQorCQkJCXJldHVybiBQVFJfRVJSKG9iaik7CisKKwkJCWVyciA9IGk5MTVf Z2VtX29iamVjdF9waW5fcGFnZXMob2JqKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBvdXRfcHV0 OworCisJCQlHRU1fQlVHX09OKCFvYmotPm1tLnBhZ2Vfc2l6ZXMuc2cpOworCisJCQkvKiBEaXNh YmxlIDJNIHBhZ2VzIC0tIFdlIG9ubHkgd2FudCB0byB1c2UgNjRLLzRLIHBhZ2VzCisJCQkgKiBm b3IgdGhpcyB0ZXN0LgorCQkJICovCisJCQlvYmotPm1tLnBhZ2Vfc2l6ZXMuc2cgJj0gfkk5MTVf R1RUX1BBR0VfU0laRV8yTTsKKworCQkJdm1hID0gaTkxNV92bWFfaW5zdGFuY2Uob2JqLCAmcHBn dHQtPmJhc2UsIE5VTEwpOworCQkJaWYgKElTX0VSUih2bWEpKSB7CisJCQkJZXJyID0gUFRSX0VS Uih2bWEpOworCQkJCWdvdG8gb3V0X3VucGluOworCQkJfQorCisJCQlpZiAob2Zmc2V0KQorCQkJ CWZsYWdzIHw9IFBJTl9PRkZTRVRfRklYRUQgfCBvZmZzZXQ7CisKKwkJCWVyciA9IGk5MTVfdm1h X3Bpbih2bWEsIDAsIDAsIGZsYWdzKTsKKwkJCWlmIChlcnIpIHsKKwkJCQlpOTE1X3ZtYV9jbG9z ZSh2bWEpOworCQkJCWdvdG8gb3V0X3VucGluOworCQkJfQorCisJCQlHRU1fQlVHX09OKG9iai0+ bW0ucGFnZV9zaXplcy5ndHQpOworCQkJR0VNX0JVR19PTighdm1hLT5wYWdlX3NpemVzLnNnKTsK KwkJCUdFTV9CVUdfT04oIXZtYS0+cGFnZV9zaXplcy5waHlzKTsKKworCQkJR0VNX0JVR19PTih2 bWEtPnBhZ2Vfc2l6ZXMuZ3R0ICE9IGV4cGVjdGVkX2d0dCk7CisKKwkJCWlmICghb2Zmc2V0ICYm IHZtYS0+cGFnZV9zaXplcy5zZyAmIEk5MTVfR1RUX1BBR0VfU0laRV82NEspIHsKKwkJCQlHRU1f QlVHX09OKCFJU19BTElHTkVEKHZtYS0+bm9kZS5zdGFydCwKKwkJCQkJCQlJOTE1X0dUVF9QQUdF X1NJWkVfMk0pKTsKKwkJCQlHRU1fQlVHX09OKCFJU19BTElHTkVEKHZtYS0+bm9kZS5zaXplLAor CQkJCQkJCUk5MTVfR1RUX1BBR0VfU0laRV8yTSkpOworCQkJfQorCisJCQlpOTE1X3ZtYV91bnBp bih2bWEpOworCQkJaTkxNV92bWFfY2xvc2Uodm1hKTsKKworCQkJaTkxNV9nZW1fb2JqZWN0X3Vu cGluX3BhZ2VzKG9iaik7CisJCQlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7CisJCX0KKwl9CisK KwlyZXR1cm4gMDsKKworb3V0X3VucGluOgorCWk5MTVfZ2VtX29iamVjdF91bnBpbl9wYWdlcyhv YmopOworb3V0X3B1dDoKKwlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7CisKKwlyZXR1cm4gZXJy OworfQorCitzdGF0aWMgc3RydWN0IGk5MTVfdm1hICoKK2dwdV93cml0ZV9kdyhzdHJ1Y3QgaTkx NV92bWEgKnZtYSwgdTY0IG9mZnNldCwgdTMyIHZhbCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSA9IHRvX2k5MTUodm1hLT5vYmotPmJhc2UuZGV2KTsKKwljb25zdCBpbnQgZ2Vu ID0gSU5URUxfR0VOKHZtYS0+dm0tPmk5MTUpOworCXVuc2lnbmVkIGludCBjb3VudCA9IHZtYS0+ c2l6ZSA+PiBQQUdFX1NISUZUOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CisJ c3RydWN0IGk5MTVfdm1hICpiYXRjaDsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKwl1MzIgKmNtZDsK KwlpbnQgbjsKKwlpbnQgZXJyOworCisJR0VNX0JVR19PTighaWd0X2Nhbl9taV9zdG9yZV9kd29y ZF9pbW0oaTkxNSkpOworCisJc2l6ZSA9IDEgKyA0ICogY291bnQgKiBzaXplb2YodTMyKTsKKwlz aXplID0gcm91bmRfdXAoc2l6ZSwgUEFHRV9TSVpFKTsKKwlvYmogPSBpOTE1X2dlbV9vYmplY3Rf Y3JlYXRlX2ludGVybmFsKGk5MTUsIHNpemUpOworCWlmIChJU19FUlIob2JqKSkKKwkJcmV0dXJu IEVSUl9DQVNUKG9iaik7CisKKwljbWQgPSBpOTE1X2dlbV9vYmplY3RfcGluX21hcChvYmosIEk5 MTVfTUFQX1dCKTsKKwlpZiAoSVNfRVJSKGNtZCkpIHsKKwkJZXJyID0gUFRSX0VSUihjbWQpOwor CQlnb3RvIGVycjsKKwl9CisKKwlvZmZzZXQgKz0gdm1hLT5ub2RlLnN0YXJ0OworCisJZm9yIChu ID0gMDsgbiA8IGNvdW50OyBuKyspIHsKKwkJaWYgKGdlbiA+PSA4KSB7CisJCQkqY21kKysgPSBN SV9TVE9SRV9EV09SRF9JTU1fR0VONDsKKwkJCSpjbWQrKyA9IGxvd2VyXzMyX2JpdHMob2Zmc2V0 KTsKKwkJCSpjbWQrKyA9IHVwcGVyXzMyX2JpdHMob2Zmc2V0KTsKKwkJCSpjbWQrKyA9IHZhbDsK KwkJfSBlbHNlIGlmIChnZW4gPj0gNCkgeworCQkJKmNtZCsrID0gTUlfU1RPUkVfRFdPUkRfSU1N X0dFTjQgfAorCQkJCShnZW4gPCA2ID8gMSA8PCAyMiA6IDApOworCQkJKmNtZCsrID0gMDsKKwkJ CSpjbWQrKyA9IG9mZnNldDsKKwkJCSpjbWQrKyA9IHZhbDsKKwkJfSBlbHNlIHsKKwkJCSpjbWQr KyA9IE1JX1NUT1JFX0RXT1JEX0lNTSB8IDEgPDwgMjI7CisJCQkqY21kKysgPSBvZmZzZXQ7CisJ CQkqY21kKysgPSB2YWw7CisJCX0KKworCQlvZmZzZXQgKz0gUEFHRV9TSVpFOworCX0KKworCSpj bWQgPSBNSV9CQVRDSF9CVUZGRVJfRU5EOworCisJaTkxNV9nZW1fb2JqZWN0X3VucGluX21hcChv YmopOworCisJZXJyID0gaTkxNV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluKG9iaiwgZmFs c2UpOworCWlmIChlcnIpCisJCWdvdG8gZXJyOworCisJYmF0Y2ggPSBpOTE1X3ZtYV9pbnN0YW5j ZShvYmosIHZtYS0+dm0sIE5VTEwpOworCWlmIChJU19FUlIoYmF0Y2gpKSB7CisJCWVyciA9IFBU Ul9FUlIoYmF0Y2gpOworCQlnb3RvIGVycjsKKwl9CisKKwllcnIgPSBpOTE1X3ZtYV9waW4oYmF0 Y2gsIDAsIDAsIFBJTl9VU0VSKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjsKKworCXJldHVybiBi YXRjaDsKKworZXJyOgorCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKKworCXJldHVybiBFUlJf UFRSKGVycik7Cit9CisKK3N0YXRpYyBpbnQgZ3B1X3dyaXRlKHN0cnVjdCBpOTE1X3ZtYSAqdm1h LAorCQkgICAgIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCisJCSAgICAgdTMyIGR3b3Jk LAorCQkgICAgIHUzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9 IHRvX2k5MTUodm1hLT5vYmotPmJhc2UuZGV2KTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVl c3QgKnJxOworCXN0cnVjdCBpOTE1X3ZtYSAqYmF0Y2g7CisJaW50IGZsYWdzID0gMDsKKwlpbnQg ZXJyOworCisJZXJyID0gaTkxNV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluKHZtYS0+b2Jq LCB0cnVlKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcnEgPSBpOTE1X2dlbV9yZXF1 ZXN0X2FsbG9jKGk5MTUtPmVuZ2luZVtSQ1NdLCBjdHgpOworCWlmIChJU19FUlIocnEpKQorCQly ZXR1cm4gUFRSX0VSUihycSk7CisKKwliYXRjaCA9IGdwdV93cml0ZV9kdyh2bWEsIGR3b3JkICog c2l6ZW9mKHUzMiksIHZhbHVlKTsKKwlpZiAoSVNfRVJSKGJhdGNoKSkgeworCQllcnIgPSBQVFJf RVJSKGJhdGNoKTsKKwkJZ290byBlcnJfcmVxdWVzdDsKKwl9CisKKwlpOTE1X3ZtYV9tb3ZlX3Rv X2FjdGl2ZShiYXRjaCwgcnEsIDApOworCWk5MTVfZ2VtX29iamVjdF9zZXRfYWN0aXZlX3JlZmVy ZW5jZShiYXRjaC0+b2JqKTsKKwlpOTE1X3ZtYV91bnBpbihiYXRjaCk7CisJaTkxNV92bWFfY2xv c2UoYmF0Y2gpOworCisJZXJyID0gcnEtPmVuZ2luZS0+ZW1pdF9mbHVzaChycSwgRU1JVF9JTlZB TElEQVRFKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9yZXF1ZXN0OworCisJZXJyID0gaTkxNV9z d2l0Y2hfY29udGV4dChycSk7CisJaWYgKGVycikKKwkJZ290byBlcnJfcmVxdWVzdDsKKworCWVy ciA9IHJxLT5lbmdpbmUtPmVtaXRfYmJfc3RhcnQocnEsCisJCQliYXRjaC0+bm9kZS5zdGFydCwg YmF0Y2gtPm5vZGUuc2l6ZSwKKwkJCWZsYWdzKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9yZXF1 ZXN0OworCisJaTkxNV92bWFfbW92ZV90b19hY3RpdmUodm1hLCBycSwgMCk7CisKKwlyZXNlcnZh dGlvbl9vYmplY3RfbG9jayh2bWEtPnJlc3YsIE5VTEwpOworCXJlc2VydmF0aW9uX29iamVjdF9h ZGRfZXhjbF9mZW5jZSh2bWEtPnJlc3YsICZycS0+ZmVuY2UpOworCXJlc2VydmF0aW9uX29iamVj dF91bmxvY2sodm1hLT5yZXN2KTsKKworZXJyX3JlcXVlc3Q6CisJX19pOTE1X2FkZF9yZXF1ZXN0 KHJxLCBlcnIgPT0gMCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHVubWFwX21h cHBpbmcoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3sKKwl2b2lkICpwdHI7CisJ aW50IGVycjsKKworCWVyciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmb2JqLT5tbS5sb2Nr KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcHRyID0gcGFnZV9tYXNrX2JpdHMob2Jq LT5tbS5tYXBwaW5nKTsKKwlpZiAocHRyKSB7CisJCWlmIChpc192bWFsbG9jX2FkZHIocHRyKSkK KwkJCXZ1bm1hcChwdHIpOworCQllbHNlCisJCQlrdW5tYXAoa21hcF90b19wYWdlKHB0cikpOwor CisJCW9iai0+bW0ubWFwcGluZyA9IE5VTEw7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZvYmotPm1t LmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgRFdPUkRTX1BFUl9QQUdFIChQQUdF X1NJWkUvc2l6ZW9mKHUzMikpCisKK3N0YXRpYyBpbnQgY3B1X2NoZWNrKHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmosIHUzMiBkd29yZCwgdTMyIHZhbCkKK3sKKwllbnVtIGk5MTVfbWFw X3R5cGUgbGV2ZWw7CisJaW50IGVycjsKKworCWZvciAobGV2ZWwgPSBJOTE1X01BUF9XQjsgbGV2 ZWwgPD0gSTkxNV9NQVBfV0M7IGxldmVsKyspIHsKKwkJdTMyICptYXAsIG9mZnNldDsKKworCQlp ZiAobGV2ZWwgPT0gSTkxNV9NQVBfV0IpCisJCQllcnIgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X3Rv X2NwdV9kb21haW4ob2JqLCBmYWxzZSk7CisJCWVsc2UKKwkJCWVyciA9IGk5MTVfZ2VtX29iamVj dF9zZXRfdG9fd2NfZG9tYWluKG9iaiwgZmFsc2UpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVy cjsKKworCQl1bm1hcF9tYXBwaW5nKG9iaik7CisJCW1hcCA9IGk5MTVfZ2VtX29iamVjdF9waW5f bWFwKG9iaiwgbGV2ZWwpOworCQlpZiAoSVNfRVJSKG1hcCkpCisJCQlyZXR1cm4gUFRSX0VSUiht YXApOworCisJCWZvciAob2Zmc2V0ID0gZHdvcmQ7IG9mZnNldCA8IG9iai0+YmFzZS5zaXplL3Np emVvZih1MzIpOworCQkgICAgIG9mZnNldCArPSBEV09SRFNfUEVSX1BBR0UpIHsKKwkJCWlmICht YXBbb2Zmc2V0XSAhPSB2YWwpIHsKKwkJCQlwcl9lcnIoIm1hcFsldV0gPSAldSwgZXhwZWN0ZWQg JXVcbiIsCisJCQkJICAgICAgIG9mZnNldCwgbWFwW29mZnNldF0sIHZhbCk7CisJCQkJZXJyID0g LUVJTlZBTDsKKwkJCQlnb3RvIG91dF9jbG9zZTsKKwkJCX0KKwkJfQorCisJCWk5MTVfZ2VtX29i amVjdF91bnBpbl9tYXAob2JqKTsKKwl9CisKKwlyZXR1cm4gMDsKKworb3V0X2Nsb3NlOgorCWk5 MTVfZ2VtX29iamVjdF91bnBpbl9tYXAob2JqKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRp YyBpbnQgaWd0X3dyaXRlX2h1Z2Uoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKK3sK KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IHRvX2k5MTUob2JqLT5iYXNlLmRldik7 CisJdW5zaWduZWQgbG9uZyBzdXBwb3J0ZWQgPSBJTlRFTF9JTkZPKGk5MTUpLT5wYWdlX3NpemVf bWFzazsKKwlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4ID0gaTkxNS0+a2VybmVsX2NvbnRl eHQ7CisJc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0gPSBjdHgtPnBwZ3R0ID8gJmN0eC0+ cHBndHQtPmJhc2UgOiAmaTkxNS0+Z2d0dC5iYXNlOworCXVuc2lnbmVkIGludCBmbGFncyA9IFBJ Tl9VU0VSIHwgUElOX09GRlNFVF9GSVhFRDsKKwlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKKwlpbnQg Yml0LCBsYXN0OworCWludCBlcnI7CisKKwlHRU1fQlVHX09OKG9iai0+YmFzZS5zaXplICE9IFNa XzJNKTsKKworCWVyciA9IGk5MTVfZ2VtX29iamVjdF9waW5fcGFnZXMob2JqKTsKKwlpZiAoZXJy KQorCQlyZXR1cm4gZXJyOworCisJLyogV2Ugd2FudCB0byBydW4gdGhlIHRlc3QgZXZlbiBpZiB0 aGUgcGxhdGZvcm0gZG9lc24ndCBzdXBwb3J0IGh1Z2UgZ3R0CisJICogcGFnZXMgLS0gb3VyIG9u bHkgcmVxdWlyZW1lbnQgaXMgdGhhdCB3ZSB3ZXJlIGFibGUgdG8gYWxsb2NhdGUgYQorCSAqICJo dWdlLXBhZ2UiLgorCSAqLworCWlmIChvYmotPm1tLnBhZ2Vfc2l6ZXMucGh5cyA8IEk5MTVfR1RU X1BBR0VfU0laRV8yTSkgeworCQlwcl9pbmZvKCJVbmFibGUgdG8gYWxsb2NhdGUgaHVnZS1wYWdl LCBmaW5pc2hpbmcgdGVzdCBlYXJseVxuIik7CisJCWdvdG8gb3V0X3VucGluOworCX0KKworCXZt YSA9IGk5MTVfdm1hX2luc3RhbmNlKG9iaiwgdm0sIE5VTEwpOworCWlmIChJU19FUlIodm1hKSkg eworCQllcnIgPSBQVFJfRVJSKHZtYSk7CisJCWdvdG8gb3V0X3VucGluOworCX0KKworCWxhc3Qg PSBpbG9nMihJOTE1X0dUVF9QQUdFX1NJWkVfMk0pOworCisJZm9yX2VhY2hfc2V0X2JpdChiaXQs ICZzdXBwb3J0ZWQsIGxhc3QgKyAxKSB7CisJCUlHVF9USU1FT1VUKGVuZF90aW1lKTsKKwkJdW5z aWduZWQgaW50IHBhZ2Vfc2l6ZSA9IEJJVChiaXQpOworCQl1MzIgbWF4ID0gdm0tPnRvdGFsIC8g STkxNV9HVFRfUEFHRV9TSVpFXzJNIC0gMTsKKwkJdTMyIG51bTsKKworCQkvKiBGb3JjZSB0aGUg cGFnZSBzaXplICovCisJCXZtYS0+cGFnZV9zaXplcy5zZyA9IG9iai0+bW0ucGFnZV9zaXplcy5z ZyA9IHBhZ2Vfc2l6ZTsKKworCQkvKiBUcnkgdmFyaW91cyBvZmZzZXRzIHVudGlsIHdlIHRpbWVv dXQgLS0gd2Ugd2FudCB0byBhdm9pZAorCQkgKiBpc3N1ZXMgaGlkZGVuIGJ5IGVmZmVjdGl2ZWx5 IGFsd2F5cyB1c2luZyBvZmZzZXQgPSAwLgorCQkgKi8KKwkJZm9yX2VhY2hfcHJpbWVfbnVtYmVy X2Zyb20obnVtLCAwLCBtYXgpIHsKKwkJCXU2NCBvZmZzZXQgPSBudW0gKiBJOTE1X0dUVF9QQUdF X1NJWkVfMk07CisJCQl1MzIgZHdvcmQ7CisKKwkJCWVyciA9IGk5MTVfdm1hX3VuYmluZCh2bWEp OworCQkJaWYgKGVycikKKwkJCQlnb3RvIG91dF9jbG9zZTsKKworCQkJZXJyID0gaTkxNV92bWFf cGluKHZtYSwgMCwgMCwgZmxhZ3MgfCBvZmZzZXQpOworCQkJaWYgKGVycikgeworCQkJCS8qIFRo ZSBnZ3R0IG1heSBoYXZlIHNvbWUgcGFnZXMgcmVzZXJ2ZWQgc28KKwkJCQkgKiByZWZyYWluIGZy b20gZXJyb3Jpbmcgb3V0LgorCQkJCSAqLworCQkJCWlmIChlcnIgPT0gLUVOT1NQQyAmJiBpOTE1 X2lzX2dndHQodm0pKQorCQkJCQljb250aW51ZTsKKworCQkJCWdvdG8gb3V0X2Nsb3NlOworCQkJ fQorCisJCQlHRU1fQlVHX09OKG9iai0+bW0ucGFnZV9zaXplcy5ndHQpOworCQkJR0VNX0JVR19P Tih2bWEtPnBhZ2Vfc2l6ZXMuc2cgIT0gcGFnZV9zaXplKTsKKwkJCUdFTV9CVUdfT04oIXZtYS0+ cGFnZV9zaXplcy5waHlzKTsKKworCQkJaWYgKHZtYS0+cGFnZV9zaXplcy5ndHQgIT0gcGFnZV9z aXplKSB7CisJCQkJZG1hX2FkZHJfdCBhZGRyID0KKwkJCQkJaTkxNV9nZW1fb2JqZWN0X2dldF9k bWFfYWRkcmVzcyhvYmosIDApOworCisJCQkJLyogVGhlIG9ubHkgdmFsaWQgcmVhc29uIGZvciB0 aGlzIHRvIGV2ZXIgZmFpbAorCQkJCSAqIHdvdWxkIGJlIGlmIHRoZSBkbWEtbWFwcGVyIHNjcmV3 ZWQgdXMgb3ZlcgorCQkJCSAqIHdoZW4gd2UgZGlkIHRoZSBkbWFfbWFwX3NnKCksIHNpbmNlIGl0 IGhhcworCQkJCSAqIHRoZSBmaW5hbCBzYXkgb3ZlciB0aGUgZG1hIGFkZHJlc3MuCisJCQkJICov CisJCQkJR0VNX0JVR19PTihJU19BTElHTkVEKGFkZHIsCisJCQkJCQkgICAgICBJOTE1X0dUVF9Q QUdFX1NJWkVfMk0pKTsKKworCQkJCXByX2luZm8oImRtYSBhZGRyZXNzIG1pc2FsaWduZWQsIGhv YmJsaW5nIG9uXG4iKTsKKwkJCX0KKworCQkJZm9yIChkd29yZCA9IDA7IGR3b3JkIDwgRFdPUkRT X1BFUl9QQUdFOyArK2R3b3JkKSB7CisJCQkJZXJyID0gZ3B1X3dyaXRlKHZtYSwgY3R4LCBkd29y ZCwgbnVtICsgMSk7CisJCQkJaWYgKGVycikgeworCQkJCQlwcl9lcnIoImdwdV93cml0ZSBmYWls ZWQgd2l0aCBwYWdlLXNpemUgJXhcbiIsCisJCQkJCSAgICAgICBwYWdlX3NpemUpOworCQkJCQlp OTE1X3ZtYV91bnBpbih2bWEpOworCQkJCQlnb3RvIG91dF9jbG9zZTsKKwkJCQl9CisKKwkJCQll cnIgPSBjcHVfY2hlY2sob2JqLCBkd29yZCwgbnVtICsgMSk7CisJCQkJaWYgKGVycikgeworCQkJ CQlwcl9lcnIoImNwdV9jaGVjayBmYWlsZWQgd2l0aCBwYWdlLXNpemUgJXhcbiIsCisJCQkJCSAg ICAgICBwYWdlX3NpemUpOworCQkJCQlpOTE1X3ZtYV91bnBpbih2bWEpOworCQkJCQlnb3RvIG91 dF9jbG9zZTsKKwkJCQl9CisJCQl9CisKKwkJCWk5MTVfdm1hX3VucGluKHZtYSk7CisKKwkJCWlm IChudW0gPiAwICYmCisJCQkgICAgaWd0X3RpbWVvdXQoZW5kX3RpbWUsCisJCQkJCSIlcyB0aW1l ZCBvdXQgYXQgb2Zmc2V0ICVsbHggd2l0aCBwcyAleFxuIiwKKwkJCQkJX19mdW5jX18sIG9mZnNl dCwgcGFnZV9zaXplKSkKKwkJCQlicmVhazsKKwkJfQorCX0KKworb3V0X2Nsb3NlOgorCWk5MTVf dm1hX2Nsb3NlKHZtYSk7CitvdXRfdW5waW46CisJaTkxNV9nZW1fb2JqZWN0X3VucGluX3BhZ2Vz KG9iaik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGlndF9wcGd0dF93cml0ZV9o dWdlKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGFyZzsK KwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOworCWludCBlcnI7CisKKwkvKiBTYW5p dHkgY2hlY2sgdGhhdCB0aGUgSFcgdXNlcyBodWdlIHBhZ2VzIGNvcnJlY3RseSAtLSBlbnN1cmUg dGhhdAorCSAqIG91ciB3cml0ZXMgbGFuZCBpbiB0aGUgcmlnaHQgcGxhY2UKKwkgKi8KKworCWlm ICghaWd0X2Nhbl9taV9zdG9yZV9kd29yZF9pbW0oaTkxNSkpIHsKKwkJcHJfaW5mbygic3RvcmUt ZHdvcmQtaW1tIG5vdCBzdXBwb3J0ZWQsIHNraXBwaW5nXG4iKTsKKwkJcmV0dXJuIDA7CisJfQor CisJLyogVHJ5IHdpdGhvdXQgdGhwICovCisJb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9p bnRlcm5hbChpOTE1LCBTWl8yTSk7CisJaWYgKElTX0VSUihvYmopKQorCQlyZXR1cm4gUFRSX0VS UihvYmopOworCisJZXJyID0gaWd0X3dyaXRlX2h1Z2Uob2JqKTsKKwlpOTE1X2dlbV9vYmplY3Rf cHV0KG9iaik7CisJaWYgKGVycikgeworCQlwcl9lcnIoIndyaXRlLWh1Z2UgZmFpbGVkIHdpdGgg aW50ZXJuYWwgYWxsb2NhdG9yXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAoIWhhc190 cmFuc3BhcmVudF9odWdlcGFnZSgpKSB7CisJCXByX2luZm8oInRocCBub3Qgc3VwcG9ydGVkLCBz a2lwcGluZ1xuIik7CisJCXJldHVybiAwOworCX0KKworCS8qIFRyeSB3aXRoIHRocCB0aHJvdWdo IGdlbWZzICovCisJb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZShpOTE1LCBTWl8yTSk7CisJ aWYgKElTX0VSUihvYmopKQorCQlyZXR1cm4gUFRSX0VSUihvYmopOworCisJZXJyID0gaWd0X3dy aXRlX2h1Z2Uob2JqKTsKKwlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7CisJaWYgKGVycikKKwkJ cHJfZXJyKCJ3cml0ZS1odWdlIGZhaWxlZCB3aXRoIHRocFxuIik7CisKKwlyZXR1cm4gZXJyOwor fQorCitzdGF0aWMgaW50IGlndF9wcGd0dF9waW5fdXBkYXRlKHZvaWQgKmFyZykKK3sKKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBhcmc7CisJdW5zaWduZWQgbG9uZyBzdXBw b3J0ZWQgPSBJTlRFTF9JTkZPKGRldl9wcml2KS0+cGFnZV9zaXplX21hc2s7CisJc3RydWN0IGk5 MTVfaHdfcHBndHQgKnBwZ3R0ID0gZGV2X3ByaXYtPmtlcm5lbF9jb250ZXh0LT5wcGd0dDsKKwlz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwor CXVuc2lnbmVkIGludCBmbGFncyA9IFBJTl9VU0VSIHwgUElOX09GRlNFVF9GSVhFRDsKKwl1bnNp Z25lZCBpbnQgbmVlZHNfZmx1c2g7CisJaW50IGJpdCwgbGFzdDsKKwl1MzIgKnB0cjsKKwlpbnQg ZXJyOworCisJLyogTWFrZSBzdXJlIHRoZXJlJ3Mgbm8gZnVubnkgYnVzaW5lc3Mgd2hlbiBkb2lu ZyBhIFBJTl9VUERBVEUgLS0gaW4gdGhlCisJICogcGFzdCB3ZSBoYWQgYSBzdWJ0bGUgaXNzdWUg d2l0aCBiZWluZyBhYmxlIHRvIGluY29ycmVjdGx5IGRvIG11bHRpcGxlCisJICogYWxsb2MgdmEg cmFuZ2VzIG9uIHRoZSBzYW1lIG9iamVjdCB3aGVuIGRvaW5nIGEgUElOX1VQREFURSwgd2hpY2gK KwkgKiByZXN1bHRlZCBpbiBzb21lIHByZXR0eSBuYXN0eSBidWdzLCB0aG91Z2ggb25seSB3aGVu IHVzaW5nCisJICogaHVnZS1ndHQtcGFnZXMuCisJICovCisKKwlpZiAoIVVTRVNfRlVMTF80OEJJ VF9QUEdUVChkZXZfcHJpdikpIHsKKwkJcHJfaW5mbygiNDhiIFBQR1RUIG5vdCBzdXBwb3J0ZWQs IHNraXBwaW5nXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJYml0ID0gaWxvZzIoSTkxNV9HVFRf UEFHRV9TSVpFXzY0Syk7CisJbGFzdCA9IGlsb2cyKEk5MTVfR1RUX1BBR0VfU0laRV8yTSk7CisK Kwlmb3JfZWFjaF9zZXRfYml0X2Zyb20oYml0LCAmc3VwcG9ydGVkLCBsYXN0ICsgMSkgeworCQl1 bnNpZ25lZCBpbnQgcGFnZV9zaXplID0gQklUKGJpdCk7CisKKwkJb2JqID0gaTkxNV9nZW1fb2Jq ZWN0X2NyZWF0ZV9pbnRlcm5hbChkZXZfcHJpdiwgU1pfMk0pOworCQlpZiAoSVNfRVJSKG9iaikp CisJCQlyZXR1cm4gUFRSX0VSUihvYmopOworCisJCXZtYSA9IGk5MTVfdm1hX2luc3RhbmNlKG9i aiwgJnBwZ3R0LT5iYXNlLCBOVUxMKTsKKwkJaWYgKElTX0VSUih2bWEpKSB7CisJCQllcnIgPSBQ VFJfRVJSKHZtYSk7CisJCQlnb3RvIG91dF9wdXQ7CisJCX0KKworCQllcnIgPSBpOTE1X3ZtYV9w aW4odm1hLCAwLCAwLCBmbGFncyk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dF9jbG9zZTsKKwor CQlpZiAodm1hLT5wYWdlX3NpemVzLnNnIDwgcGFnZV9zaXplKSB7CisJCQlwcl9pbmZvKCJVbmFi bGUgdG8gYWxsb2NhdGUgcGFnZS1zaXplICV4LCBmaW5pc2hpbmcgdGVzdCBlYXJseVxuIiwKKwkJ CQlwYWdlX3NpemUpOworCQkJZ290byBvdXRfdW5waW47CisJCX0KKworCQlpZiAodm1hLT5wYWdl X3NpemVzLmd0dCAhPSBwYWdlX3NpemUpIHsKKwkJCWRtYV9hZGRyX3QgYWRkciA9IGk5MTVfZ2Vt X29iamVjdF9nZXRfZG1hX2FkZHJlc3Mob2JqLCAwKTsKKworCQkJLyogVGhlIG9ubHkgdmFsaWQg cmVhc29uIGZvciB0aGlzIHRvIGV2ZXIgZmFpbCB3b3VsZCBiZQorCQkJICogaWYgdGhlIGRtYS1t YXBwZXIgc2NyZXdlZCB1cyBvdmVyIHdoZW4gd2UgZGlkIHRoZQorCQkJICogZG1hX21hcF9zZygp LCBzaW5jZSBpdCBoYXMgdGhlIGZpbmFsIHNheSBvdmVyIHRoZSBkbWEKKwkJCSAqIGFkZHJlc3Mu CisJCQkgKi8KKwkJCUdFTV9CVUdfT04oSVNfQUxJR05FRChhZGRyLCBwYWdlX3NpemUpKTsKKwor CQkJcHJfaW5mbygiZG1hIGFkZHJlc3MgbWlzYWxpZ25lZCwgZmluaXNoaW5nIHRlc3QgZWFybHlc biIpOworCQkJZ290byBvdXRfdW5waW47CisJCX0KKworCQllcnIgPSBpOTE1X3ZtYV9iaW5kKHZt YSwgSTkxNV9DQUNIRV9OT05FLCBQSU5fVVBEQVRFKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0 X3VucGluOworCisJCWk5MTVfdm1hX3VucGluKHZtYSk7CisJCWk5MTVfdm1hX2Nsb3NlKHZtYSk7 CisKKwkJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOworCX0KKworCW9iaiA9IGk5MTVfZ2VtX29i amVjdF9jcmVhdGVfaW50ZXJuYWwoZGV2X3ByaXYsIFBBR0VfU0laRSk7CisJaWYgKElTX0VSUihv YmopKQorCQlyZXR1cm4gUFRSX0VSUihvYmopOworCisJdm1hID0gaTkxNV92bWFfaW5zdGFuY2Uo b2JqLCAmcHBndHQtPmJhc2UsIE5VTEwpOworCWlmIChJU19FUlIodm1hKSkgeworCQllcnIgPSBQ VFJfRVJSKHZtYSk7CisJCWdvdG8gb3V0X3B1dDsKKwl9CisKKwllcnIgPSBpOTE1X3ZtYV9waW4o dm1hLCAwLCAwLCBmbGFncyk7CisJaWYgKGVycikKKwkJZ290byBvdXRfY2xvc2U7CisKKwkvKiBN YWtlIHN1cmUgd2UgZG9uJ3QgZW5kIHVwIHdpdGggc29tZXRoaW5nIGxpa2Ugd2hlcmUgdGhlIHBk ZSBpcyBzdGlsbAorCSAqIHBvaW50aW5nIHRvIHRoZSAyTSBwYWdlLCBhbmQgdGhlIHB0IHdlIGp1 c3QgZmlsbGVkLWluIGlzIGRhbmdsaW5nIC0tCisJICogd2UgY2FuIGNoZWNrIHRoaXMgYnkgd3Jp dGluZyB0byB0aGUgZmlyc3QgcGFnZSB3aGVyZSBpdCB3b3VsZCB0aGVuCisJICogbGFuZCBpbiB0 aGUgbm93IHN0YWxlIDJNIHBhZ2UuCisJICovCisKKwllcnIgPSBncHVfd3JpdGUodm1hLCBkZXZf cHJpdi0+a2VybmVsX2NvbnRleHQsIDAsIDB4ZGVhZGJlYWYpOworCWlmIChlcnIpCisJCWdvdG8g b3V0X3VucGluOworCisJZXJyID0gaTkxNV9nZW1fb2JqX3ByZXBhcmVfc2htZW1fcmVhZChvYmos ICZuZWVkc19mbHVzaCk7CisJaWYgKGVycikKKwkJZ290byBvdXRfdW5waW47CisKKwlwdHIgPSBr bWFwX2F0b21pYyhpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2Uob2JqLCAwKSk7CisJaWYgKG5lZWRz X2ZsdXNoICYgQ0xGTFVTSF9CRUZPUkUpCisJCWRybV9jbGZsdXNoX3ZpcnRfcmFuZ2UocHRyLCBQ QUdFX1NJWkUpOworCisJaWYgKCpwdHIgIT0gMHhkZWFkYmVhZikgeworCQlwcl9lcnIoInB0ciA9 ICV4LCBleHBlY3RlZCAleFxuIiwgKnB0ciwgMHhkZWFkYmVhZik7CisJCWVyciA9IC1FSU5WQUw7 CisJfQorCisJa3VubWFwX2F0b21pYyhwdHIpOworCisJaTkxNV9nZW1fb2JqX2ZpbmlzaF9zaG1l bV9hY2Nlc3Mob2JqKTsKKworb3V0X3VucGluOgorCWk5MTVfdm1hX3VucGluKHZtYSk7CitvdXRf Y2xvc2U6CisJaTkxNV92bWFfY2xvc2Uodm1hKTsKK291dF9wdXQ6CisJaTkxNV9nZW1fb2JqZWN0 X3B1dChvYmopOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBpZ3RfcHBndHRfZ2Vt ZnNfaHVnZSh2b2lkICphcmcpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBh cmc7CisJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCA9IGk5MTUtPmtlcm5lbF9jb250ZXh0 OworCXN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtID0gY3R4LT5wcGd0dCA/ICZjdHgtPnBw Z3R0LT5iYXNlIDogJmk5MTUtPmdndHQuYmFzZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqOworCWNvbnN0IHVuc2lnbmVkIGludCBvYmplY3Rfc2l6ZXNbXSA9IHsKKwkJSTkxNV9H VFRfUEFHRV9TSVpFXzJNLAorCQlJOTE1X0dUVF9QQUdFX1NJWkVfMk0gKyBJOTE1X0dUVF9QQUdF X1NJWkVfNEssCisJfTsKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBQSU5fVVNFUjsKKwlpbnQgZXJy OworCWludCBpOworCisJLyogU2FuaXR5IGNoZWNrIFRIUCB0aHJvdWdoIGdlbWZzICovCisKKwlp ZiAoIWhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKSB7CisJCXByX2luZm8oInRocCBub3Qgc3Vw cG9ydGVkLCBza2lwcGluZ1xuIik7CisJCXJldHVybiAwOworCX0KKworCWZvciAoaSA9IDA7IGkg PCBBUlJBWV9TSVpFKG9iamVjdF9zaXplcyk7ICsraSkgeworCQl1bnNpZ25lZCBpbnQgc2l6ZSA9 IG9iamVjdF9zaXplc1tpXTsKKwkJc3RydWN0IGk5MTVfdm1hICp2bWE7CisKKwkJb2JqID0gaTkx NV9nZW1fb2JqZWN0X2NyZWF0ZShpOTE1LCBzaXplKTsKKwkJaWYgKElTX0VSUihvYmopKQorCQkJ cmV0dXJuIFBUUl9FUlIob2JqKTsKKworCQllcnIgPSBpOTE1X2dlbV9vYmplY3RfcGluX3BhZ2Vz KG9iaik7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dF9wdXQ7CisKKwkJR0VNX0JVR19PTighb2Jq LT5tbS5wYWdlX3NpemVzLnNnKTsKKworCQlpZiAob2JqLT5tbS5wYWdlX3NpemVzLnBoeXMgPCBJ OTE1X0dUVF9QQUdFX1NJWkVfMk0pIHsKKwkJCXByX2luZm8oIlVuYWJsZSB0byBhbGxvY2F0ZSB0 aHAsIGZpbmlzaGluZyB0ZXN0IGVhcmx5XG4iKTsKKwkJCWdvdG8gb3V0X3VucGluOworCQl9CisK KwkJdm1hID0gaTkxNV92bWFfaW5zdGFuY2Uob2JqLCB2bSwgTlVMTCk7CisJCWlmIChJU19FUlIo dm1hKSkgeworCQkJZXJyID0gUFRSX0VSUih2bWEpOworCQkJZ290byBvdXRfdW5waW47CisJCX0K KworCQllcnIgPSBpOTE1X3ZtYV9waW4odm1hLCAwLCAwLCBmbGFncyk7CisJCWlmIChlcnIpIHsK KwkJCWk5MTVfdm1hX2Nsb3NlKHZtYSk7CisJCQlnb3RvIG91dF91bnBpbjsKKwkJfQorCisJCUdF TV9CVUdfT04ob2JqLT5tbS5wYWdlX3NpemVzLmd0dCk7CisJCUdFTV9CVUdfT04oIXZtYS0+cGFn ZV9zaXplcy5zZyk7CisJCUdFTV9CVUdfT04oIXZtYS0+cGFnZV9zaXplcy5waHlzKTsKKworCQlp ZiAodm1hLT5wYWdlX3NpemVzLnNnICYgSTkxNV9HVFRfUEFHRV9TSVpFXzJNKSB7CisJCQlpZiAo dm1hLT5wYWdlX3NpemVzLmd0dCAhPSBzaXplKSB7CisJCQkJZG1hX2FkZHJfdCBhZGRyID0KKwkJ CQkJaTkxNV9nZW1fb2JqZWN0X2dldF9kbWFfYWRkcmVzcyhvYmosIDApOworCisJCQkJLyogVGhl IG9ubHkgdmFsaWQgcmVhc29uIGZvciB0aGlzIHRvIGV2ZXIgZmFpbAorCQkJCSAqIHdvdWxkIGJl IGlmIHRoZSBkbWEtbWFwcGVyIHNjcmV3ZWQgdXMgb3ZlcgorCQkJCSAqIHdoZW4gd2UgZGlkIHRo ZSBkbWFfbWFwX3NnKCksIHNpbmNlIGl0IGhhcworCQkJCSAqIHRoZSBmaW5hbCBzYXkgb3ZlciB0 aGUgZG1hIGFkZHJlc3MuCisJCQkJICovCisJCQkJR0VNX0JVR19PTihJU19BTElHTkVEKGFkZHIs CisJCQkJCQkgICAgICBJOTE1X0dUVF9QQUdFX1NJWkVfMk0pKTsKKwkJCQlwcl9pbmZvKCJkbWEg YWRkcmVzcyB1bmFsaWduZWRcbiIpOworCQkJfQorCisJCQlHRU1fQlVHX09OKCFJU19BTElHTkVE KHZtYS0+bm9kZS5zdGFydCwKKwkJCQkJICAgICAgIEk5MTVfR1RUX1BBR0VfU0laRV8yTSkpOwor CQl9CisKKwkJaWYgKHZtYS0+cGFnZV9zaXplcy5zZyAmIEk5MTVfR1RUX1BBR0VfU0laRV82NEsp IHsKKwkJCUdFTV9CVUdfT04oIUlTX0FMSUdORUQodm1hLT5ub2RlLnNpemUsCisJCQkJCSAgICAg ICBJOTE1X0dUVF9QQUdFX1NJWkVfMk0pKTsKKwkJfQorCisJCWk5MTVfdm1hX3VucGluKHZtYSk7 CisJCWk5MTVfdm1hX2Nsb3NlKHZtYSk7CisKKwkJaTkxNV9nZW1fb2JqZWN0X3VucGluX3BhZ2Vz KG9iaik7CisJCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKKwl9CisKKwlyZXR1cm4gMDsKKwor b3V0X3VucGluOgorCWk5MTVfZ2VtX29iamVjdF91bnBpbl9wYWdlcyhvYmopOworb3V0X3B1dDoK KwlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgaTkx NV9nZW1faHVnZV9wYWdlX21vY2tfc2VsZnRlc3RzKHZvaWQpCit7CisJc3RhdGljIGNvbnN0IHN0 cnVjdCBpOTE1X3N1YnRlc3QgdGVzdHNbXSA9IHsKKwkJU1VCVEVTVChpZ3RfbW9ja19leGhhdXN0 X2RldmljZV9zdXBwb3J0ZWRfcGFnZXMpLAorCQlTVUJURVNUKGlndF9tb2NrX3BwZ3R0X21pc2Fs aWduZWRfZG1hKSwKKwkJU1VCVEVTVChpZ3RfbW9ja19wcGd0dF9odWdlX2ZpbGwpLAorCQlTVUJU RVNUKGlndF9tb2NrX3BwZ3R0XzY0SyksCisJfTsKKwlpbnQgc2F2ZWRfcHBndHQgPSBpOTE1LmVu YWJsZV9wcGd0dDsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXY7CisJc3RydWN0 IHBjaV9kZXYgKnBkZXY7CisJc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0OworCWludCBlcnI7 CisKKwlkZXZfcHJpdiA9IG1vY2tfZ2VtX2RldmljZSgpOworCWlmICghZGV2X3ByaXYpCisJCXJl dHVybiAtRU5PTUVNOworCisJLyogUHJldGVuZCB0byBiZSBhIGRldmljZSB3aGljaCBzdXBwb3J0 cyB0aGUgNDhiIFBQR1RUICovCisJaTkxNS5lbmFibGVfcHBndHQgPSAzOworCisJcGRldiA9IGRl dl9wcml2LT5kcm0ucGRldjsKKwlkbWFfY29lcmNlX21hc2tfYW5kX2NvaGVyZW50KCZwZGV2LT5k ZXYsIERNQV9CSVRfTUFTSygzOSkpOworCisJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmRybS5zdHJ1 Y3RfbXV0ZXgpOworCXBwZ3R0ID0gaTkxNV9wcGd0dF9jcmVhdGUoZGV2X3ByaXYsIEVSUl9QVFIo LUVOT0RFViksICJtb2NrIik7CisJaWYgKElTX0VSUihwcGd0dCkpIHsKKwkJZXJyID0gUFRSX0VS UihwcGd0dCk7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlHRU1fQlVHX09OKCFpOTE1X3Zt X2lzXzQ4Yml0KCZwcGd0dC0+YmFzZSkpOworCisJZXJyID0gaTkxNV9zdWJ0ZXN0cyh0ZXN0cywg cHBndHQpOworCisJaTkxNV9wcGd0dF9jbG9zZSgmcHBndHQtPmJhc2UpOworCWk5MTVfcHBndHRf cHV0KHBwZ3R0KTsKKworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJmRldl9wcml2LT5kcm0u c3RydWN0X211dGV4KTsKKworCWk5MTUuZW5hYmxlX3BwZ3R0ID0gc2F2ZWRfcHBndHQ7CisKKwlk cm1fZGV2X3VucmVmKCZkZXZfcHJpdi0+ZHJtKTsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCBp OTE1X2dlbV9odWdlX3BhZ2VfbGl2ZV9zZWxmdGVzdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2KQoreworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTkxNV9zdWJ0ZXN0IHRlc3RzW10g PSB7CisJCVNVQlRFU1QoaWd0X3BwZ3R0X2dlbWZzX2h1Z2UpLAorCQlTVUJURVNUKGlndF9wcGd0 dF9waW5fdXBkYXRlKSwKKwkJU1VCVEVTVChpZ3RfcHBndHRfd3JpdGVfaHVnZSksCisJfTsKKwlp bnQgZXJyOworCisJaWYgKCFVU0VTX1BQR1RUKGRldl9wcml2KSkgeworCQlwcl9pbmZvKCJQUEdU VCBub3Qgc3VwcG9ydGVkLCBza2lwcGluZyBsaXZlLXNlbGZ0ZXN0c1xuIik7CisJCXJldHVybiAw OworCX0KKworCW11dGV4X2xvY2soJmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4KTsKKwllcnIg PSBpOTE1X3N1YnRlc3RzKHRlc3RzLCBkZXZfcHJpdik7CisJbXV0ZXhfdW5sb2NrKCZkZXZfcHJp di0+ZHJtLnN0cnVjdF9tdXRleCk7CisKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfbGl2ZV9zZWxmdGVzdHMuaCBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2xpdmVfc2VsZnRlc3RzLmgKaW5kZXggMThi MTc0ZDg1NWNhLi42NGFjZDdlY2NjNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L3NlbGZ0ZXN0cy9pOTE1X2xpdmVfc2VsZnRlc3RzLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvc2VsZnRlc3RzL2k5MTVfbGl2ZV9zZWxmdGVzdHMuaApAQCAtMTUsNSArMTUsNiBAQCBzZWxm dGVzdChvYmplY3RzLCBpOTE1X2dlbV9vYmplY3RfbGl2ZV9zZWxmdGVzdHMpCiBzZWxmdGVzdChk bWFidWYsIGk5MTVfZ2VtX2RtYWJ1Zl9saXZlX3NlbGZ0ZXN0cykKIHNlbGZ0ZXN0KGNvaGVyZW5j eSwgaTkxNV9nZW1fY29oZXJlbmN5X2xpdmVfc2VsZnRlc3RzKQogc2VsZnRlc3QoZ3R0LCBpOTE1 X2dlbV9ndHRfbGl2ZV9zZWxmdGVzdHMpCitzZWxmdGVzdChodWdlcGFnZXMsIGk5MTVfZ2VtX2h1 Z2VfcGFnZV9saXZlX3NlbGZ0ZXN0cykKIHNlbGZ0ZXN0KGNvbnRleHRzLCBpOTE1X2dlbV9jb250 ZXh0X2xpdmVfc2VsZnRlc3RzKQogc2VsZnRlc3QoaGFuZ2NoZWNrLCBpbnRlbF9oYW5nY2hlY2tf bGl2ZV9zZWxmdGVzdHMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVz dHMvaTkxNV9tb2NrX3NlbGZ0ZXN0cy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3Rz L2k5MTVfbW9ja19zZWxmdGVzdHMuaAppbmRleCBmYzc0Njg3NTAxYmEuLjk5NjFiNDRmNzZlZCAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfbW9ja19zZWxm dGVzdHMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9tb2NrX3Nl bGZ0ZXN0cy5oCkBAIC0yMSwzICsyMSw0IEBAIHNlbGZ0ZXN0KGRtYWJ1ZiwgaTkxNV9nZW1fZG1h YnVmX21vY2tfc2VsZnRlc3RzKQogc2VsZnRlc3Qodm1hLCBpOTE1X3ZtYV9tb2NrX3NlbGZ0ZXN0 cykKIHNlbGZ0ZXN0KGV2aWN0LCBpOTE1X2dlbV9ldmljdF9tb2NrX3NlbGZ0ZXN0cykKIHNlbGZ0 ZXN0KGd0dCwgaTkxNV9nZW1fZ3R0X21vY2tfc2VsZnRlc3RzKQorc2VsZnRlc3QoaHVnZXBhZ2Vz LCBpOTE1X2dlbV9odWdlX3BhZ2VfbW9ja19zZWxmdGVzdHMpCi0tIAoyLjEzLjQKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5n IGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=