From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH] drm/i915/userptr: Avoid struct_mutex recursion for mmu_invalidate_range_start Date: Tue, 15 Jan 2019 12:44:42 +0000 Message-ID: <20190115124442.3500-1-chris@chris-wilson.co.uk> References: <20190115121705.23837-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1ECFF6E685 for ; Tue, 15 Jan 2019 12:44:53 +0000 (UTC) In-Reply-To: <20190115121705.23837-1-chris@chris-wilson.co.uk> 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 U2luY2UgY29tbWl0IDkzMDY1YWM3NTNlNCAoIm1tLCBvb206IGRpc3Rpbmd1aXNoIGJsb2NrYWJs ZSBtb2RlIGZvciBtbXUKbm90aWZpZXJzIikgd2UgaGF2ZSBiZWVuIGFibGUgdG8gcmVwb3J0IGZh aWx1cmUgZnJvbQptbXVfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCB3aGljaCBhbGxvd3MgdXMgdG8g dXNlIGEgdHJ5bG9jayBvbiB0aGUKc3RydWN0X211dGV4IHRvIGF2b2lkIHBvdGVudGlhbCByZWN1 cnNpb24gYW5kIHJlcG9ydCAtRUJVU1kgaW5zdGVhZC4KRnVydGhlcm1vcmUsIHRoaXMgYWxsb3dz IHVzIHRvIHB1bGwgdGhlIHdvcmsgaW50byB0aGUgbWFpbiBjYWxsYmFjayBhbmQKYXZvaWQgdGhl IHNsZWlnaHQtb2YtaGFuZCBpbiB1c2luZyBhIHdvcmtxdWV1ZSB0byBhdm9pZCBsb2NrZGVwLgoK SG93ZXZlciwgbm90IGFsbCBwYXRocyB0byBtbXVfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCBhcmUg cHJlcGFyZWQgdG8KaGFuZGxlIGZhaWx1cmUsIHNvIGluc3RlYWQgb2YgcmVwb3J0aW5nIHRoZSBy ZWN1cnNpb24sIGRlYWwgd2l0aCBpdCBieQpwcm9wYWdhdGluZyB0aGUgZmFpbHVyZSB1cHdhcmRz LCB3aG8gY2FuIGRlY2lkZSB0aGVtc2VsdmVzIHRvIGhhbmRsZSBpdApvciByZXBvcnQgaXQuCgp2 MjogTWFyayB1cCB0aGUgcmVjdXJzaXZlIGxvY2sgYmVoYXZpb3VyIGFuZCBjb21tZW50IG9uIHRo ZSB2YXJpb3VzIHdlYWsKcG9pbnRzLgoKdjM6IEZvbGxvdyBjb21taXQgMzgyNGU0MTk3NWFlICgi ZHJtL2k5MTU6IFVzZSBtdXRleF9sb2NrX2tpbGxhYmxlKCkgZnJvbQppbnNpZGUgdGhlIHNocmlu a2VyIikgYW5kIGFsc28gdXNlIG11dGV4X2xvY2tfa2lsbGVhYmxlKCkuCnYzLjE6IE5vIGxlYWsg b24gRUlOVFIuCgpCdWd6aWxsYTogaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1 Zy5jZ2k/aWQ9MTA4Mzc1ClJlZmVyZW5jZXM6IDkzMDY1YWM3NTNlNCAoIm1tLCBvb206IGRpc3Rp bmd1aXNoIGJsb2NrYWJsZSBtb2RlIGZvciBtbXUgbm90aWZpZXJzIikKU2lnbmVkLW9mZi1ieTog Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CkNjOiBUdnJ0a28gVXJzdWxp biA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgpSZXZpZXdlZC1ieTogVHZydGtvIFVyc3VsaW4g PHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5oICAgICAgICAgfCAgIDQgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMg ICAgICAgICB8ICAzMCArKystCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9vYmplY3Qu aCAgfCAgIDcgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0ci5jIHwgMjI0 ICsrKysrKysrKysrKy0tLS0tLS0tLS0tLQogNCBmaWxlcyBjaGFuZ2VkLCAxMzkgaW5zZXJ0aW9u cygrKSwgMTI2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IDk1NmMx Yzg2ZjkwZC4uZGEwNTVhODZkYjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTI5MzUs OCArMjkzNSw4IEBAIGVudW0gaTkxNV9tbV9zdWJjbGFzcyB7IC8qIGxvY2tkZXAgc3ViY2xhc3Mg Zm9yIG9iai0+bW0ubG9jay9zdHJ1Y3RfbXV0ZXggKi8KIAlJOTE1X01NX1NIUklOS0VSIC8qIGNh bGxlZCAicmVjdXJzaXZlbHkiIGZyb20gZGlyZWN0LXJlY2xhaW0tZXNxdWUgKi8KIH07CiAKLXZv aWQgX19pOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmosCi0JCQkJIGVudW0gaTkxNV9tbV9zdWJjbGFzcyBzdWJjbGFzcyk7CitpbnQgX19pOTE1 X2dlbV9vYmplY3RfcHV0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCisJ CQkJZW51bSBpOTE1X21tX3N1YmNsYXNzIHN1YmNsYXNzKTsKIHZvaWQgX19pOTE1X2dlbV9vYmpl Y3RfaW52YWxpZGF0ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKIAogZW51bSBp OTE1X21hcF90eXBlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCmluZGV4IDBiZmVkMzMxNzhlMS4u OTBjMTY3ZjcxMzQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKQEAgLTIzMDMsOCArMjMwMyw4 IEBAIF9faTkxNV9nZW1fb2JqZWN0X3Vuc2V0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmopCiAJc3RydWN0IHNnX3RhYmxlICpwYWdlczsKIAogCXBhZ2VzID0gZmV0Y2hfYW5k X3plcm8oJm9iai0+bW0ucGFnZXMpOwotCWlmICghcGFnZXMpCi0JCXJldHVybiBOVUxMOworCWlm IChJU19FUlJfT1JfTlVMTChwYWdlcykpCisJCXJldHVybiBwYWdlczsKIAogCXNwaW5fbG9jaygm aTkxNS0+bW0ub2JqX2xvY2spOwogCWxpc3RfZGVsKCZvYmotPm1tLmxpbmspOwpAQCAtMjMyOCwy MiArMjMyOCwyMyBAQCBfX2k5MTVfZ2VtX29iamVjdF91bnNldF9wYWdlcyhzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqKQogCXJldHVybiBwYWdlczsKIH0KIAotdm9pZCBfX2k5MTVfZ2Vt X29iamVjdF9wdXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKLQkJCQkg ZW51bSBpOTE1X21tX3N1YmNsYXNzIHN1YmNsYXNzKQoraW50IF9faTkxNV9nZW1fb2JqZWN0X3B1 dF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAorCQkJCWVudW0gaTkxNV9t bV9zdWJjbGFzcyBzdWJjbGFzcykKIHsKIAlzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzOworCWludCBy ZXQ7CiAKIAlpZiAoaTkxNV9nZW1fb2JqZWN0X2hhc19waW5uZWRfcGFnZXMob2JqKSkKLQkJcmV0 dXJuOworCQlyZXR1cm4gLUVCVVNZOwogCiAJR0VNX0JVR19PTihvYmotPmJpbmRfY291bnQpOwot CWlmICghaTkxNV9nZW1fb2JqZWN0X2hhc19wYWdlcyhvYmopKQotCQlyZXR1cm47CiAKIAkvKiBN YXkgYmUgY2FsbGVkIGJ5IHNocmlua2VyIGZyb20gd2l0aGluIGdldF9wYWdlcygpIChvbiBhbm90 aGVyIGJvKSAqLwogCW11dGV4X2xvY2tfbmVzdGVkKCZvYmotPm1tLmxvY2ssIHN1YmNsYXNzKTsK LQlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJm9iai0+bW0ucGFnZXNfcGluX2NvdW50KSkpCisJ aWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZvYmotPm1tLnBhZ2VzX3Bpbl9jb3VudCkpKSB7CisJ CXJldCA9IC1FQlVTWTsKIAkJZ290byB1bmxvY2s7CisJfQogCiAJLyoKIAkgKiAtPnB1dF9wYWdl cyBtaWdodCBuZWVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGJpdDE3IHN3aXp6bGUKQEAg LTIzNTEsMTEgKzIzNTIsMjQgQEAgdm9pZCBfX2k5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMoc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkgKiBsaXN0cyBlYXJseS4KIAkgKi8KIAlw YWdlcyA9IF9faTkxNV9nZW1fb2JqZWN0X3Vuc2V0X3BhZ2VzKG9iaik7CisKKwkvKgorCSAqIFhY WCBUZW1wb3JhcnkgaGlqaW54IHRvIGF2b2lkIHVwZGF0aW5nIGFsbCBiYWNrZW5kcyB0byBoYW5k bGUKKwkgKiBOVUxMIHBhZ2VzLiBJbiB0aGUgZnV0dXJlLCB3aGVuIHdlIGhhdmUgbW9yZSBhc3lu Y2hyb25vdXMKKwkgKiBnZXRfcGFnZXMgYmFja2VuZHMgd2Ugc2hvdWxkIGJlIGJldHRlciBhYmxl IHRvIGhhbmRsZSB0aGUKKwkgKiBjYW5jZWxsYXRpb24gb2YgdGhlIGFzeW5jIHRhc2sgaW4gYSBt b3JlIHVuaWZvcm0gbWFubmVyLgorCSAqLworCWlmICghcGFnZXMgJiYgIWk5MTVfZ2VtX29iamVj dF9uZWVkc19hc3luY19jYW5jZWwob2JqKSkKKwkJcGFnZXMgPSBFUlJfUFRSKC1FSU5WQUwpOwor CiAJaWYgKCFJU19FUlIocGFnZXMpKQogCQlvYmotPm9wcy0+cHV0X3BhZ2VzKG9iaiwgcGFnZXMp OwogCisJcmV0ID0gMDsKIHVubG9jazoKIAltdXRleF91bmxvY2soJm9iai0+bW0ubG9jayk7CisK KwlyZXR1cm4gcmV0OwogfQogCiBib29sIGk5MTVfc2dfdHJpbShzdHJ1Y3Qgc2dfdGFibGUgKm9y aWdfc3QpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9vYmplY3Qu aCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX29iamVjdC5oCmluZGV4IGZmM2RhNjQ0 NzBkZC4uY2IxYjAxNDRkMjc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV9vYmplY3QuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9vYmplY3Qu aApAQCAtNTcsNiArNTcsNyBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdF9vcHMgewogI2Rl ZmluZSBJOTE1X0dFTV9PQkpFQ1RfSEFTX1NUUlVDVF9QQUdFCUJJVCgwKQogI2RlZmluZSBJOTE1 X0dFTV9PQkpFQ1RfSVNfU0hSSU5LQUJMRQlCSVQoMSkKICNkZWZpbmUgSTkxNV9HRU1fT0JKRUNU X0lTX1BST1hZCUJJVCgyKQorI2RlZmluZSBJOTE1X0dFTV9PQkpFQ1RfQVNZTkNfQ0FOQ0VMCUJJ VCgzKQogCiAJLyogSW50ZXJmYWNlIGJldHdlZW4gdGhlIEdFTSBvYmplY3QgYW5kIGl0cyBiYWNr aW5nIHN0b3JhZ2UuCiAJICogZ2V0X3BhZ2VzKCkgaXMgY2FsbGVkIG9uY2UgcHJpb3IgdG8gdGhl IHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBzZXQKQEAgLTM4Nyw2ICszODgsMTIgQEAgaTkxNV9nZW1f b2JqZWN0X2lzX3Byb3h5KGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiAJ cmV0dXJuIG9iai0+b3BzLT5mbGFncyAmIEk5MTVfR0VNX09CSkVDVF9JU19QUk9YWTsKIH0KIAor c3RhdGljIGlubGluZSBib29sCitpOTE1X2dlbV9vYmplY3RfbmVlZHNfYXN5bmNfY2FuY2VsKGNv bnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCit7CisJcmV0dXJuIG9iai0+b3Bz LT5mbGFncyAmIEk5MTVfR0VNX09CSkVDVF9BU1lOQ19DQU5DRUw7Cit9CisKIHN0YXRpYyBpbmxp bmUgYm9vbAogaTkxNV9nZW1fb2JqZWN0X2lzX2FjdGl2ZShjb25zdCBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fdXNlcnB0ci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdXNlcnB0ci5j CmluZGV4IDFmYjZhN2JiNTA1NC4uMzhlMTlhNDJlMGY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbV91c2VycHRyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW1fdXNlcnB0ci5jCkBAIC00OSw3NyArNDksNjcgQEAgc3RydWN0IGk5MTVfbW11X25v dGlmaWVyIHsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSBub2RlOwogCXN0cnVjdCBtbXVfbm90aWZpZXIg bW47CiAJc3RydWN0IHJiX3Jvb3RfY2FjaGVkIG9iamVjdHM7Ci0Jc3RydWN0IHdvcmtxdWV1ZV9z dHJ1Y3QgKndxOworCXN0cnVjdCBpOTE1X21tX3N0cnVjdCAqbW07CiB9OwogCiBzdHJ1Y3QgaTkx NV9tbXVfb2JqZWN0IHsKIAlzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgKm1uOwogCXN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CiAJc3RydWN0IGludGVydmFsX3RyZWVfbm9kZSBpdDsK LQlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Ci0JYm9v bCBhdHRhY2hlZDsKIH07CiAKLXN0YXRpYyB2b2lkIGNhbmNlbF91c2VycHRyKHN0cnVjdCB3b3Jr X3N0cnVjdCAqd29yaykKK3N0YXRpYyB2b2lkIGFkZF9vYmplY3Qoc3RydWN0IGk5MTVfbW11X29i amVjdCAqbW8pCiB7Ci0Jc3RydWN0IGk5MTVfbW11X29iamVjdCAqbW8gPSBjb250YWluZXJfb2Yo d29yaywgdHlwZW9mKCptbyksIHdvcmspOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmogPSBtby0+b2JqOwotCXN0cnVjdCB3b3JrX3N0cnVjdCAqYWN0aXZlOwotCi0JLyogQ2FuY2Vs IGFueSBhY3RpdmUgd29ya2VyIGFuZCBmb3JjZSB1cyB0byByZS1ldmFsdWF0ZSBndXAgKi8KLQlt dXRleF9sb2NrKCZvYmotPm1tLmxvY2spOwotCWFjdGl2ZSA9IGZldGNoX2FuZF96ZXJvKCZvYmot PnVzZXJwdHIud29yayk7Ci0JbXV0ZXhfdW5sb2NrKCZvYmotPm1tLmxvY2spOwotCWlmIChhY3Rp dmUpCi0JCWdvdG8gb3V0OwotCi0JaTkxNV9nZW1fb2JqZWN0X3dhaXQob2JqLCBJOTE1X1dBSVRf QUxMLCBNQVhfU0NIRURVTEVfVElNRU9VVCwgTlVMTCk7Ci0KLQltdXRleF9sb2NrKCZvYmotPmJh c2UuZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCi0JLyogV2UgYXJlIGluc2lkZSBhIGt0aHJlYWQgY29u dGV4dCBhbmQgY2FuJ3QgYmUgaW50ZXJydXB0ZWQgKi8KLQlpZiAoaTkxNV9nZW1fb2JqZWN0X3Vu YmluZChvYmopID09IDApCi0JCV9faTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhvYmosIEk5MTVf TU1fTk9STUFMKTsKLQlXQVJOX09OQ0UoaTkxNV9nZW1fb2JqZWN0X2hhc19wYWdlcyhvYmopLAot CQkgICJGYWlsZWQgdG8gcmVsZWFzZSBwYWdlczogYmluZF9jb3VudD0lZCwgcGFnZXNfcGluX2Nv dW50PSVkLCBwaW5fZ2xvYmFsPSVkXG4iLAotCQkgIG9iai0+YmluZF9jb3VudCwKLQkJICBhdG9t aWNfcmVhZCgmb2JqLT5tbS5wYWdlc19waW5fY291bnQpLAotCQkgIG9iai0+cGluX2dsb2JhbCk7 Ci0KLQltdXRleF91bmxvY2soJm9iai0+YmFzZS5kZXYtPnN0cnVjdF9tdXRleCk7Ci0KLW91dDoK LQlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7CisJR0VNX0JVR19PTighUkJfRU1QVFlfTk9ERSgm bW8tPml0LnJiKSk7CisJaW50ZXJ2YWxfdHJlZV9pbnNlcnQoJm1vLT5pdCwgJm1vLT5tbi0+b2Jq ZWN0cyk7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZF9vYmplY3Qoc3RydWN0IGk5MTVfbW11X29iamVj dCAqbW8pCitzdGF0aWMgdm9pZCBkZWxfb2JqZWN0KHN0cnVjdCBpOTE1X21tdV9vYmplY3QgKm1v KQogewotCWlmIChtby0+YXR0YWNoZWQpCisJaWYgKFJCX0VNUFRZX05PREUoJm1vLT5pdC5yYikp CiAJCXJldHVybjsKIAotCWludGVydmFsX3RyZWVfaW5zZXJ0KCZtby0+aXQsICZtby0+bW4tPm9i amVjdHMpOwotCW1vLT5hdHRhY2hlZCA9IHRydWU7CisJaW50ZXJ2YWxfdHJlZV9yZW1vdmUoJm1v LT5pdCwgJm1vLT5tbi0+b2JqZWN0cyk7CisJUkJfQ0xFQVJfTk9ERSgmbW8tPml0LnJiKTsKIH0K IAotc3RhdGljIHZvaWQgZGVsX29iamVjdChzdHJ1Y3QgaTkxNV9tbXVfb2JqZWN0ICptbykKK3N0 YXRpYyB2b2lkCitfX2k5MTVfZ2VtX3VzZXJwdHJfc2V0X2FjdGl2ZShzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqLCBib29sIHZhbHVlKQogewotCWlmICghbW8tPmF0dGFjaGVkKQorCXN0 cnVjdCBpOTE1X21tdV9vYmplY3QgKm1vID0gb2JqLT51c2VycHRyLm1tdV9vYmplY3Q7CisKKwkv KgorCSAqIER1cmluZyBtbV9pbnZhbGlkYXRlX3JhbmdlIHdlIG5lZWQgdG8gY2FuY2VsIGFueSB1 c2VycHRyIHRoYXQKKwkgKiBvdmVybGFwcyB0aGUgcmFuZ2UgYmVpbmcgaW52YWxpZGF0ZWQuIERv aW5nIHNvIHJlcXVpcmVzIHRoZQorCSAqIHN0cnVjdF9tdXRleCwgYW5kIHRoYXQgcmlza3MgcmVj dXJzaW9uLiBJbiBvcmRlciB0byBjYXVzZQorCSAqIHJlY3Vyc2lvbiwgdGhlIHVzZXIgbXVzdCBh bGlhcyB0aGUgdXNlcnB0ciBhZGRyZXNzIHNwYWNlIHdpdGgKKwkgKiBhIEdUVCBtbWFwcGluZyAo cG9zc2libGUgd2l0aCBhIE1BUF9GSVhFRCkgLSB0aGVuIHdoZW4gd2UgaGF2ZQorCSAqIHRvIGlu dmFsaWRhdGUgdGhhdCBtbWFwaW5nLCBtbV9pbnZhbGlkYXRlX3JhbmdlIGlzIGNhbGxlZCB3aXRo CisJICogdGhlIHVzZXJwdHIgYWRkcmVzcyAqYW5kKiB0aGUgc3RydWN0X211dGV4IGhlbGQuICBU byBwcmV2ZW50IHRoYXQKKwkgKiB3ZSBzZXQgYSBmbGFnIHVuZGVyIHRoZSBpOTE1X21tdV9ub3Rp ZmllciBzcGlubG9jayB0byBpbmRpY2F0ZQorCSAqIHdoZXRoZXIgdGhpcyBvYmplY3QgaXMgdmFs aWQuCisJICovCisJaWYgKCFtbykKIAkJcmV0dXJuOwogCi0JaW50ZXJ2YWxfdHJlZV9yZW1vdmUo Jm1vLT5pdCwgJm1vLT5tbi0+b2JqZWN0cyk7Ci0JbW8tPmF0dGFjaGVkID0gZmFsc2U7CisJc3Bp bl9sb2NrKCZtby0+bW4tPmxvY2spOworCWlmICh2YWx1ZSkKKwkJYWRkX29iamVjdChtbyk7CisJ ZWxzZQorCQlkZWxfb2JqZWN0KG1vKTsKKwlzcGluX3VubG9jaygmbW8tPm1uLT5sb2NrKTsKIH0K IAotc3RhdGljIGludCBpOTE1X2dlbV91c2VycHRyX21uX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQo c3RydWN0IG1tdV9ub3RpZmllciAqX21uLAotCQkJY29uc3Qgc3RydWN0IG1tdV9ub3RpZmllcl9y YW5nZSAqcmFuZ2UpCitzdGF0aWMgaW50Cit1c2VycHRyX21uX2ludmFsaWRhdGVfcmFuZ2Vfc3Rh cnQoc3RydWN0IG1tdV9ub3RpZmllciAqX21uLAorCQkJCSAgY29uc3Qgc3RydWN0IG1tdV9ub3Rp Zmllcl9yYW5nZSAqcmFuZ2UpCiB7CiAJc3RydWN0IGk5MTVfbW11X25vdGlmaWVyICptbiA9CiAJ CWNvbnRhaW5lcl9vZihfbW4sIHN0cnVjdCBpOTE1X21tdV9ub3RpZmllciwgbW4pOwotCXN0cnVj dCBpOTE1X21tdV9vYmplY3QgKm1vOwogCXN0cnVjdCBpbnRlcnZhbF90cmVlX25vZGUgKml0Owot CUxJU1RfSEVBRChjYW5jZWxsZWQpOworCXN0cnVjdCBtdXRleCAqdW5sb2NrID0gTlVMTDsKIAl1 bnNpZ25lZCBsb25nIGVuZDsKKwlpbnQgcmV0ID0gMDsKIAogCWlmIChSQl9FTVBUWV9ST09UKCZt bi0+b2JqZWN0cy5yYl9yb290KSkKIAkJcmV0dXJuIDA7CkBAIC0xMzAsMTEgKzEyMCwxNSBAQCBz dGF0aWMgaW50IGk5MTVfZ2VtX3VzZXJwdHJfbW5faW52YWxpZGF0ZV9yYW5nZV9zdGFydChzdHJ1 Y3QgbW11X25vdGlmaWVyICpfbW4sCiAJc3Bpbl9sb2NrKCZtbi0+bG9jayk7CiAJaXQgPSBpbnRl cnZhbF90cmVlX2l0ZXJfZmlyc3QoJm1uLT5vYmplY3RzLCByYW5nZS0+c3RhcnQsIGVuZCk7CiAJ d2hpbGUgKGl0KSB7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CisKIAkJaWYg KCFyYW5nZS0+YmxvY2thYmxlKSB7Ci0JCQlzcGluX3VubG9jaygmbW4tPmxvY2spOwotCQkJcmV0 dXJuIC1FQUdBSU47CisJCQlyZXQgPSAtRUFHQUlOOworCQkJYnJlYWs7CiAJCX0KLQkJLyogVGhl IG1tdV9vYmplY3QgaXMgcmVsZWFzZWQgbGF0ZSB3aGVuIGRlc3Ryb3lpbmcgdGhlCisKKwkJLyoK KwkJICogVGhlIG1tdV9vYmplY3QgaXMgcmVsZWFzZWQgbGF0ZSB3aGVuIGRlc3Ryb3lpbmcgdGhl CiAJCSAqIEdFTSBvYmplY3Qgc28gaXQgaXMgZW50aXJlbHkgcG9zc2libGUgdG8gZ2FpbiBhCiAJ CSAqIHJlZmVyZW5jZSBvbiBhbiBvYmplY3QgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZnJlZWQK IAkJICogc2luY2Ugb3VyIHNlcmlhbGlzYXRpb24gaXMgdmlhIHRoZSBzcGlubG9jayBhbmQgbm90 CkBAIC0xNDMsMjkgKzEzNyw2NSBAQCBzdGF0aWMgaW50IGk5MTVfZ2VtX3VzZXJwdHJfbW5faW52 YWxpZGF0ZV9yYW5nZV9zdGFydChzdHJ1Y3QgbW11X25vdGlmaWVyICpfbW4sCiAJCSAqIHVzZS1h ZnRlci1mcmVlIHdlIG9ubHkgYWNxdWlyZSBhIHJlZmVyZW5jZSBvbiB0aGUKIAkJICogb2JqZWN0 IGlmIGl0IGlzIG5vdCBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBkZXN0cm95ZWQuCiAJCSAqLwot CQltbyA9IGNvbnRhaW5lcl9vZihpdCwgc3RydWN0IGk5MTVfbW11X29iamVjdCwgaXQpOwotCQlp ZiAoa3JlZl9nZXRfdW5sZXNzX3plcm8oJm1vLT5vYmotPmJhc2UucmVmY291bnQpKQotCQkJcXVl dWVfd29yayhtbi0+d3EsICZtby0+d29yayk7CisJCW9iaiA9IGNvbnRhaW5lcl9vZihpdCwgc3Ry dWN0IGk5MTVfbW11X29iamVjdCwgaXQpLT5vYmo7CisJCWlmICgha3JlZl9nZXRfdW5sZXNzX3pl cm8oJm9iai0+YmFzZS5yZWZjb3VudCkpIHsKKwkJCWl0ID0gaW50ZXJ2YWxfdHJlZV9pdGVyX25l eHQoaXQsIHJhbmdlLT5zdGFydCwgZW5kKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXNwaW5fdW5s b2NrKCZtbi0+bG9jayk7CisKKwkJaWYgKCF1bmxvY2spIHsKKwkJCXVubG9jayA9ICZtbi0+bW0t Pmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXg7CisKKwkJCXN3aXRjaCAobXV0ZXhfdHJ5bG9ja19yZWN1 cnNpdmUodW5sb2NrKSkgeworCQkJZGVmYXVsdDoKKwkJCWNhc2UgTVVURVhfVFJZTE9DS19GQUlM RUQ6CisJCQkJaWYgKCFtdXRleF9sb2NrX2tpbGxhYmxlX25lc3RlZCh1bmxvY2ssIEk5MTVfTU1f U0hSSU5LRVIpKSB7CisJCQkJCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKKwkJCQkJcmV0dXJu IC1FSU5UUjsKKwkJCQl9CisJCQkJLyogZmFsbCB0aHJvdWdoICovCisJCQljYXNlIE1VVEVYX1RS WUxPQ0tfU1VDQ0VTUzoKKwkJCQlicmVhazsKKworCQkJY2FzZSBNVVRFWF9UUllMT0NLX1JFQ1VS U0lWRToKKwkJCQl1bmxvY2sgPSBFUlJfUFRSKC1FRVhJU1QpOworCQkJCWJyZWFrOworCQkJfQor CQl9CisKKwkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3VuYmluZChvYmopOworCQlpZiAocmV0ID09 IDApCisJCQlyZXQgPSBfX2k5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMob2JqLCBJOTE1X01NX1NI UklOS0VSKTsKKwkJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOworCQlpZiAocmV0KQorCQkJZ290 byB1bmxvY2s7CiAKLQkJbGlzdF9hZGQoJm1vLT5saW5rLCAmY2FuY2VsbGVkKTsKLQkJaXQgPSBp bnRlcnZhbF90cmVlX2l0ZXJfbmV4dChpdCwgcmFuZ2UtPnN0YXJ0LCBlbmQpOworCQlzcGluX2xv Y2soJm1uLT5sb2NrKTsKKworCQkvKgorCQkgKiBBcyB3ZSBkbyBub3QgKHlldCkgcHJvdGVjdCB0 aGUgbW11IGZyb20gY29uY3VycmVudCBpbnNlcnRpb24KKwkJICogb3ZlciB0aGlzIHJhbmdlLCB0 aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCB0aGlzIHNlYXJjaCB3aWxsCisJCSAqIHRlcm1pbmF0 ZSBnaXZlbiBhIHBhdGhvbG9naWMgd29ya2xvYWQuCisJCSAqLworCQlpdCA9IGludGVydmFsX3Ry ZWVfaXRlcl9maXJzdCgmbW4tPm9iamVjdHMsIHJhbmdlLT5zdGFydCwgZW5kKTsKIAl9Ci0JbGlz dF9mb3JfZWFjaF9lbnRyeShtbywgJmNhbmNlbGxlZCwgbGluaykKLQkJZGVsX29iamVjdChtbyk7 CiAJc3Bpbl91bmxvY2soJm1uLT5sb2NrKTsKIAotCWlmICghbGlzdF9lbXB0eSgmY2FuY2VsbGVk KSkKLQkJZmx1c2hfd29ya3F1ZXVlKG1uLT53cSk7Cit1bmxvY2s6CisJaWYgKCFJU19FUlJfT1Jf TlVMTCh1bmxvY2spKQorCQltdXRleF91bmxvY2sodW5sb2NrKTsKKworCXJldHVybiByZXQ7CiAK LQlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfb3BzIGk5 MTVfZ2VtX3VzZXJwdHJfbm90aWZpZXIgPSB7Ci0JLmludmFsaWRhdGVfcmFuZ2Vfc3RhcnQgPSBp OTE1X2dlbV91c2VycHRyX21uX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQsCisJLmludmFsaWRhdGVf cmFuZ2Vfc3RhcnQgPSB1c2VycHRyX21uX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQsCiB9OwogCiBz dGF0aWMgc3RydWN0IGk5MTVfbW11X25vdGlmaWVyICoKLWk5MTVfbW11X25vdGlmaWVyX2NyZWF0 ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK2k5MTVfbW11X25vdGlmaWVyX2NyZWF0ZShzdHJ1Y3Qg aTkxNV9tbV9zdHJ1Y3QgKm1tKQogewogCXN0cnVjdCBpOTE1X21tdV9ub3RpZmllciAqbW47CiAK QEAgLTE3NiwxMyArMjA2LDcgQEAgaTkxNV9tbXVfbm90aWZpZXJfY3JlYXRlKHN0cnVjdCBtbV9z dHJ1Y3QgKm1tKQogCXNwaW5fbG9ja19pbml0KCZtbi0+bG9jayk7CiAJbW4tPm1uLm9wcyA9ICZp OTE1X2dlbV91c2VycHRyX25vdGlmaWVyOwogCW1uLT5vYmplY3RzID0gUkJfUk9PVF9DQUNIRUQ7 Ci0JbW4tPndxID0gYWxsb2Nfd29ya3F1ZXVlKCJpOTE1LXVzZXJwdHItcmVsZWFzZSIsCi0JCQkJ IFdRX1VOQk9VTkQgfCBXUV9NRU1fUkVDTEFJTSwKLQkJCQkgMCk7Ci0JaWYgKG1uLT53cSA9PSBO VUxMKSB7Ci0JCWtmcmVlKG1uKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0JfQorCW1u LT5tbSA9IG1tOwogCiAJcmV0dXJuIG1uOwogfQpAQCAtMTkyLDE2ICsyMTYsMTQgQEAgaTkxNV9n ZW1fdXNlcnB0cl9yZWxlYXNlX19tbXVfbm90aWZpZXIoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaikKIHsKIAlzdHJ1Y3QgaTkxNV9tbXVfb2JqZWN0ICptbzsKIAotCW1vID0gb2JqLT51 c2VycHRyLm1tdV9vYmplY3Q7Ci0JaWYgKG1vID09IE5VTEwpCisJbW8gPSBmZXRjaF9hbmRfemVy bygmb2JqLT51c2VycHRyLm1tdV9vYmplY3QpOworCWlmICghbW8pCiAJCXJldHVybjsKIAogCXNw aW5fbG9jaygmbW8tPm1uLT5sb2NrKTsKIAlkZWxfb2JqZWN0KG1vKTsKIAlzcGluX3VubG9jaygm bW8tPm1uLT5sb2NrKTsKIAlrZnJlZShtbyk7Ci0KLQlvYmotPnVzZXJwdHIubW11X29iamVjdCA9 IE5VTEw7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaTkxNV9tbXVfbm90aWZpZXIgKgpAQCAtMjE0LDcg KzIzNiw3IEBAIGk5MTVfbW11X25vdGlmaWVyX2ZpbmQoc3RydWN0IGk5MTVfbW1fc3RydWN0ICpt bSkKIAlpZiAobW4pCiAJCXJldHVybiBtbjsKIAotCW1uID0gaTkxNV9tbXVfbm90aWZpZXJfY3Jl YXRlKG1tLT5tbSk7CisJbW4gPSBpOTE1X21tdV9ub3RpZmllcl9jcmVhdGUobW0pOwogCWlmIChJ U19FUlIobW4pKQogCQllcnIgPSBQVFJfRVJSKG1uKTsKIApAQCAtMjM3LDEwICsyNTksOCBAQCBp OTE1X21tdV9ub3RpZmllcl9maW5kKHN0cnVjdCBpOTE1X21tX3N0cnVjdCAqbW0pCiAJbXV0ZXhf dW5sb2NrKCZtbS0+aTkxNS0+bW1fbG9jayk7CiAJdXBfd3JpdGUoJm1tLT5tbS0+bW1hcF9zZW0p OwogCi0JaWYgKG1uICYmICFJU19FUlIobW4pKSB7Ci0JCWRlc3Ryb3lfd29ya3F1ZXVlKG1uLT53 cSk7CisJaWYgKG1uICYmICFJU19FUlIobW4pKQogCQlrZnJlZShtbik7Ci0JfQogCiAJcmV0dXJu IGVyciA/IEVSUl9QVFIoZXJyKSA6IG1tLT5tbjsKIH0KQEAgLTI2MywxNCArMjgzLDE0IEBAIGk5 MTVfZ2VtX3VzZXJwdHJfaW5pdF9fbW11X25vdGlmaWVyKHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmosCiAJCXJldHVybiBQVFJfRVJSKG1uKTsKIAogCW1vID0ga3phbGxvYyhzaXplb2Yo Km1vKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKG1vID09IE5VTEwpCisJaWYgKCFtbykKIAkJcmV0dXJu IC1FTk9NRU07CiAKIAltby0+bW4gPSBtbjsKIAltby0+b2JqID0gb2JqOwogCW1vLT5pdC5zdGFy dCA9IG9iai0+dXNlcnB0ci5wdHI7CiAJbW8tPml0Lmxhc3QgPSBvYmotPnVzZXJwdHIucHRyICsg b2JqLT5iYXNlLnNpemUgLSAxOwotCUlOSVRfV09SSygmbW8tPndvcmssIGNhbmNlbF91c2VycHRy KTsKKwlSQl9DTEVBUl9OT0RFKCZtby0+aXQucmIpOwogCiAJb2JqLT51c2VycHRyLm1tdV9vYmpl Y3QgPSBtbzsKIAlyZXR1cm4gMDsKQEAgLTI4NCwxMiArMzA0LDE2IEBAIGk5MTVfbW11X25vdGlm aWVyX2ZyZWUoc3RydWN0IGk5MTVfbW11X25vdGlmaWVyICptbiwKIAkJcmV0dXJuOwogCiAJbW11 X25vdGlmaWVyX3VucmVnaXN0ZXIoJm1uLT5tbiwgbW0pOwotCWRlc3Ryb3lfd29ya3F1ZXVlKG1u LT53cSk7CiAJa2ZyZWUobW4pOwogfQogCiAjZWxzZQogCitzdGF0aWMgdm9pZAorX19pOTE1X2dl bV91c2VycHRyX3NldF9hY3RpdmUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgYm9v bCB2YWx1ZSkKK3sKK30KKwogc3RhdGljIHZvaWQKIGk5MTVfZ2VtX3VzZXJwdHJfcmVsZWFzZV9f bW11X25vdGlmaWVyKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiB7CkBAIC00NTgs NDIgKzQ4Miw2IEBAIF9faTkxNV9nZW1fdXNlcnB0cl9hbGxvY19wYWdlcyhzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqLAogCXJldHVybiBzdDsKIH0KIAotc3RhdGljIGludAotX19pOTE1 X2dlbV91c2VycHRyX3NldF9hY3RpdmUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwK LQkJCSAgICAgIGJvb2wgdmFsdWUpCi17Ci0JaW50IHJldCA9IDA7Ci0KLQkvKiBEdXJpbmcgbW1f aW52YWxpZGF0ZV9yYW5nZSB3ZSBuZWVkIHRvIGNhbmNlbCBhbnkgdXNlcnB0ciB0aGF0Ci0JICog b3ZlcmxhcHMgdGhlIHJhbmdlIGJlaW5nIGludmFsaWRhdGVkLiBEb2luZyBzbyByZXF1aXJlcyB0 aGUKLQkgKiBzdHJ1Y3RfbXV0ZXgsIGFuZCB0aGF0IHJpc2tzIHJlY3Vyc2lvbi4gSW4gb3JkZXIg dG8gY2F1c2UKLQkgKiByZWN1cnNpb24sIHRoZSB1c2VyIG11c3QgYWxpYXMgdGhlIHVzZXJwdHIg YWRkcmVzcyBzcGFjZSB3aXRoCi0JICogYSBHVFQgbW1hcHBpbmcgKHBvc3NpYmxlIHdpdGggYSBN QVBfRklYRUQpIC0gdGhlbiB3aGVuIHdlIGhhdmUKLQkgKiB0byBpbnZhbGlkYXRlIHRoYXQgbW1h cGluZywgbW1faW52YWxpZGF0ZV9yYW5nZSBpcyBjYWxsZWQgd2l0aAotCSAqIHRoZSB1c2VycHRy IGFkZHJlc3MgKmFuZCogdGhlIHN0cnVjdF9tdXRleCBoZWxkLiAgVG8gcHJldmVudCB0aGF0Ci0J ICogd2Ugc2V0IGEgZmxhZyB1bmRlciB0aGUgaTkxNV9tbXVfbm90aWZpZXIgc3BpbmxvY2sgdG8g aW5kaWNhdGUKLQkgKiB3aGV0aGVyIHRoaXMgb2JqZWN0IGlzIHZhbGlkLgotCSAqLwotI2lmIGRl ZmluZWQoQ09ORklHX01NVV9OT1RJRklFUikKLQlpZiAob2JqLT51c2VycHRyLm1tdV9vYmplY3Qg PT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0KLQlzcGluX2xvY2soJm9iai0+dXNlcnB0ci5tbXVfb2Jq ZWN0LT5tbi0+bG9jayk7Ci0JLyogSW4gb3JkZXIgdG8gc2VyaWFsaXNlIGdldF9wYWdlcyB3aXRo IGFuIG91dHN0YW5kaW5nCi0JICogY2FuY2VsX3VzZXJwdHIsIHdlIG11c3QgZHJvcCB0aGUgc3Ry dWN0X211dGV4IGFuZCB0cnkgYWdhaW4uCi0JICovCi0JaWYgKCF2YWx1ZSkKLQkJZGVsX29iamVj dChvYmotPnVzZXJwdHIubW11X29iamVjdCk7Ci0JZWxzZSBpZiAoIXdvcmtfcGVuZGluZygmb2Jq LT51c2VycHRyLm1tdV9vYmplY3QtPndvcmspKQotCQlhZGRfb2JqZWN0KG9iai0+dXNlcnB0ci5t bXVfb2JqZWN0KTsKLQllbHNlCi0JCXJldCA9IC1FQUdBSU47Ci0Jc3Bpbl91bmxvY2soJm9iai0+ dXNlcnB0ci5tbXVfb2JqZWN0LT5tbi0+bG9jayk7Ci0jZW5kaWYKLQotCXJldHVybiByZXQ7Ci19 Ci0KIHN0YXRpYyB2b2lkCiBfX2k5MTVfZ2VtX3VzZXJwdHJfZ2V0X3BhZ2VzX3dvcmtlcihzdHJ1 Y3Qgd29ya19zdHJ1Y3QgKl93b3JrKQogewpAQCAtNjc5LDggKzY2NywxMSBAQCBpOTE1X2dlbV91 c2VycHRyX3B1dF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCXN0cnVj dCBzZ3RfaXRlciBzZ3RfaXRlcjsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAotCUJVR19PTihvYmot PnVzZXJwdHIud29yayAhPSBOVUxMKTsKKwkvKiBDYW5jZWwgYW55IGluZmxpZ2h0IHdvcmsgYW5k IGZvcmNlIHRoZW0gdG8gcmVzdGFydCB0aGVpciBndXAgKi8KKwlvYmotPnVzZXJwdHIud29yayA9 IE5VTEw7CiAJX19pOTE1X2dlbV91c2VycHRyX3NldF9hY3RpdmUob2JqLCBmYWxzZSk7CisJaWYg KCFwYWdlcykKKwkJcmV0dXJuOwogCiAJaWYgKG9iai0+bW0ubWFkdiAhPSBJOTE1X01BRFZfV0lM TE5FRUQpCiAJCW9iai0+bW0uZGlydHkgPSBmYWxzZTsKQEAgLTcxOCw3ICs3MDksOCBAQCBpOTE1 X2dlbV91c2VycHRyX2RtYWJ1Zl9leHBvcnQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aikKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0X29wcyBpOTE1X2dl bV91c2VycHRyX29wcyA9IHsKIAkuZmxhZ3MgPSBJOTE1X0dFTV9PQkpFQ1RfSEFTX1NUUlVDVF9Q QUdFIHwKLQkJIEk5MTVfR0VNX09CSkVDVF9JU19TSFJJTktBQkxFLAorCQkgSTkxNV9HRU1fT0JK RUNUX0lTX1NIUklOS0FCTEUgfAorCQkgSTkxNV9HRU1fT0JKRUNUX0FTWU5DX0NBTkNFTCwKIAku Z2V0X3BhZ2VzID0gaTkxNV9nZW1fdXNlcnB0cl9nZXRfcGFnZXMsCiAJLnB1dF9wYWdlcyA9IGk5 MTVfZ2VtX3VzZXJwdHJfcHV0X3BhZ2VzLAogCS5kbWFidWZfZXhwb3J0ID0gaTkxNV9nZW1fdXNl cnB0cl9kbWFidWZfZXhwb3J0LAotLSAKMi4yMC4xCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9pbnRlbC1nZngK