From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matthew Auld Subject: [PATCH v2 01/37] drm/i915: buddy allocator Date: Thu, 27 Jun 2019 21:55:57 +0100 Message-ID: <20190627205633.1143-2-matthew.auld@intel.com> References: <20190627205633.1143-1-matthew.auld@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 363AE6E817 for ; Thu, 27 Jun 2019 20:56:37 +0000 (UTC) In-Reply-To: <20190627205633.1143-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 U2ltcGxlIGJ1ZGR5IGFsbG9jYXRvci4gV2Ugd2FudCB0byBhbGxvY2F0ZSBwcm9wZXJseSBhbGln bmVkCnBvd2VyLW9mLXR3byBibG9ja3MgdG8gcHJvbW90ZSB1c2FnZSBvZiBodWdlLXBhZ2VzIGZv ciB0aGUgR1RULCBzbyA2NEssCjJNIGFuZCBwb3NzaWJseSBldmVuIDFHLiBXaGlsZSB3ZSBkbyBz dXBwb3J0IGFsbG9jYXRpbmcgc3R1ZmYgYXQgYQpzcGVjaWZpYyBvZmZzZXQsIGl0IGlzIG1vcmUg aW50ZW5kZWQgZm9yIHByZWFsbG9jYXRpbmcgcG9ydGlvbnMgb2YgdGhlCmFkZHJlc3Mgc3BhY2Us IHNheSBmb3IgYW4gaW5pdGlhbCBmcmFtZWJ1ZmZlciwgZm9yIG90aGVyIHVzZXMgZHJtX21tIGlz CnByb2JhYmx5IGEgbXVjaCBiZXR0ZXIgZml0LiBBbnl3YXksIGhvcGVmdWxseSB0aGlzIGNhbiBh bGwgYmUgdGhyb3duCmF3YXkgaWYgd2UgZXZlbnR1YWxseSBtb3ZlIHRvIGhhdmluZyB0aGUgY29y ZSBNTSBtYW5hZ2UgZGV2aWNlIG1lbW9yeS4KClNpZ25lZC1vZmYtYnk6IE1hdHRoZXcgQXVsZCA8 bWF0dGhldy5hdWxkQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZSAgICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9idWRk eS5jICAgICAgICAgICAgIHwgNDEzICsrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9idWRkeS5oICAgICAgICAgICAgIHwgMTE1ICsrKysKIGRyaXZlcnMvZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9pOTE1X2J1ZGR5LmMgICB8IDQ5MSArKysrKysrKysrKysrKysrKysKIC4u Li9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9tb2NrX3NlbGZ0ZXN0cy5oICB8ICAgMSArCiA1IGZp bGVzIGNoYW5nZWQsIDEwMjEgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfYnVkZHkuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfYnVkZHkuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2J1ZGR5LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4 IDNiZDhmMDM0OWE4YS4uY2I2NmNmMWE1YTEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtMTE3 LDYgKzExNyw3IEBAIGdlbS15ICs9IFwKIGk5MTUteSArPSBcCiAJICAkKGdlbS15KSBcCiAJICBp OTE1X2FjdGl2ZS5vIFwKKwkgIGk5MTVfYnVkZHkubyBcCiAJICBpOTE1X2NtZF9wYXJzZXIubyBc CiAJICBpOTE1X2dlbV9iYXRjaF9wb29sLm8gXAogCSAgaTkxNV9nZW1fZXZpY3QubyBcCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2J1ZGR5LmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2J1ZGR5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi5jMGFjNjhkNzFkOTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2J1ZGR5LmMKQEAgLTAsMCArMSw0MTMgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBNSVQKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICov CisKKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCisj aW5jbHVkZSAiaTkxNV9idWRkeS5oIgorCisjaW5jbHVkZSAiaTkxNV9nZW0uaCIKKyNpbmNsdWRl ICJpOTE1X3V0aWxzLmgiCisKK3N0YXRpYyB2b2lkIG1hcmtfYWxsb2NhdGVkKHN0cnVjdCBpOTE1 X2J1ZGR5X2Jsb2NrICpibG9jaykKK3sKKwlibG9jay0+aGVhZGVyICY9IH5JOTE1X0JVRERZX0hF QURFUl9TVEFURTsKKwlibG9jay0+aGVhZGVyIHw9IEk5MTVfQlVERFlfQUxMT0NBVEVEOworCisJ bGlzdF9kZWxfaW5pdCgmYmxvY2stPmxpbmspOworfQorCitzdGF0aWMgdm9pZCBtYXJrX2ZyZWUo c3RydWN0IGk5MTVfYnVkZHlfbW0gKm1tLAorCQkgICAgICBzdHJ1Y3QgaTkxNV9idWRkeV9ibG9j ayAqYmxvY2spCit7CisJYmxvY2stPmhlYWRlciAmPSB+STkxNV9CVUREWV9IRUFERVJfU1RBVEU7 CisJYmxvY2stPmhlYWRlciB8PSBJOTE1X0JVRERZX0ZSRUU7CisKKwlsaXN0X2FkZCgmYmxvY2st PmxpbmssCisJCSAmbW0tPmZyZWVfbGlzdFtpOTE1X2J1ZGR5X2Jsb2NrX29yZGVyKGJsb2NrKV0p OworfQorCitzdGF0aWMgdm9pZCBtYXJrX3NwbGl0KHN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICpi bG9jaykKK3sKKwlibG9jay0+aGVhZGVyICY9IH5JOTE1X0JVRERZX0hFQURFUl9TVEFURTsKKwli bG9jay0+aGVhZGVyIHw9IEk5MTVfQlVERFlfU1BMSVQ7CisKKwlsaXN0X2RlbF9pbml0KCZibG9j ay0+bGluayk7Cit9CisKK2ludCBpOTE1X2J1ZGR5X2luaXQoc3RydWN0IGk5MTVfYnVkZHlfbW0g Km1tLCB1NjQgc2l6ZSwgdTY0IG1pbl9zaXplKQoreworCXVuc2lnbmVkIGludCBpOworCXU2NCBv ZmZzZXQ7CisKKwlpZiAoc2l6ZSA8IG1pbl9zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlm IChtaW5fc2l6ZSA8IFBBR0VfU0laRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWlzX3Bv d2VyX29mXzIobWluX3NpemUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNpemUgPSByb3VuZF9k b3duKHNpemUsIG1pbl9zaXplKTsKKworCW1tLT5zaXplID0gc2l6ZTsKKwltbS0+bWluX3NpemUg PSBtaW5fc2l6ZTsKKwltbS0+bWF4X29yZGVyID0gaWxvZzIocm91bmRkb3duX3Bvd19vZl90d28o c2l6ZSkpIC0gaWxvZzIobWluX3NpemUpOworCisJR0VNX0JVR19PTihtbS0+bWF4X29yZGVyID4g STkxNV9CVUREWV9NQVhfT1JERVIpOworCisJbW0tPmZyZWVfbGlzdCA9IGttYWxsb2NfYXJyYXko bW0tPm1heF9vcmRlciArIDEsCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBsaXN0X2hlYWQpLAor CQkJCSAgICAgIEdGUF9LRVJORUwpOworCWlmICghbW0tPmZyZWVfbGlzdCkKKwkJcmV0dXJuIC1F Tk9NRU07CisKKwlmb3IgKGkgPSAwOyBpIDw9IG1tLT5tYXhfb3JkZXI7ICsraSkKKwkJSU5JVF9M SVNUX0hFQUQoJm1tLT5mcmVlX2xpc3RbaV0pOworCisJbW0tPmJsb2NrcyA9IEtNRU1fQ0FDSEUo aTkxNV9idWRkeV9ibG9jaywgU0xBQl9IV0NBQ0hFX0FMSUdOKTsKKwlpZiAoIW1tLT5ibG9ja3Mp CisJCWdvdG8gb3V0X2ZyZWVfbGlzdDsKKworCW1tLT5uX3Jvb3RzID0gaHdlaWdodDY0KHNpemUp OworCisJbW0tPnJvb3RzID0ga21hbGxvY19hcnJheShtbS0+bl9yb290cywKKwkJCQkgIHNpemVv ZihzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAqKSwKKwkJCQkgIEdGUF9LRVJORUwpOworCWlmICgh bW0tPnJvb3RzKQorCQlnb3RvIG91dF9mcmVlX2Jsb2NrczsKKworCW9mZnNldCA9IDA7CisJaSA9 IDA7CisKKwkvKgorCSAqIFNwbGl0IGludG8gcG93ZXItb2YtdHdvIGJsb2NrcywgaW4gY2FzZSB3 ZSBhcmUgZ2l2ZW4gYSBzaXplIHRoYXQgaXMKKwkgKiBub3QgaXRzZWxmIGEgcG93ZXItb2YtdHdv LgorCSAqLworCWRvIHsKKwkJc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKnJvb3Q7CisJCXVuc2ln bmVkIGludCBvcmRlcjsKKwkJdTY0IHJvb3Rfc2l6ZTsKKworCQlyb290ID0ga21lbV9jYWNoZV96 YWxsb2MobW0tPmJsb2NrcywgR0ZQX0tFUk5FTCk7CisJCWlmICghcm9vdCkKKwkJCWdvdG8gb3V0 X2ZyZWVfcm9vdHM7CisKKwkJcm9vdF9zaXplID0gcm91bmRkb3duX3Bvd19vZl90d28oc2l6ZSk7 CisJCW9yZGVyID0gaWxvZzIocm9vdF9zaXplKSAtIGlsb2cyKG1pbl9zaXplKTsKKworCQlyb290 LT5oZWFkZXIgPSBvZmZzZXQ7CisJCXJvb3QtPmhlYWRlciB8PSBvcmRlcjsKKworCQltYXJrX2Zy ZWUobW0sIHJvb3QpOworCisJCUdFTV9CVUdfT04oaSA+IG1tLT5tYXhfb3JkZXIpOworCQlHRU1f QlVHX09OKGk5MTVfYnVkZHlfYmxvY2tfc2l6ZShtbSwgcm9vdCkgPCBtaW5fc2l6ZSk7CisKKwkJ bW0tPnJvb3RzW2ldID0gcm9vdDsKKworCQlvZmZzZXQgKz0gcm9vdF9zaXplOworCQlzaXplIC09 IHJvb3Rfc2l6ZTsKKwkJaSsrOworCX0gd2hpbGUgKHNpemUpOworCisJcmV0dXJuIDA7CisKK291 dF9mcmVlX3Jvb3RzOgorCXdoaWxlIChpLS0pCisJCWttZW1fY2FjaGVfZnJlZShtbS0+YmxvY2tz LCBtbS0+cm9vdHNbaV0pOworCWtmcmVlKG1tLT5yb290cyk7CitvdXRfZnJlZV9ibG9ja3M6CisJ a21lbV9jYWNoZV9kZXN0cm95KG1tLT5ibG9ja3MpOworb3V0X2ZyZWVfbGlzdDoKKwlrZnJlZSht bS0+ZnJlZV9saXN0KTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKwordm9pZCBpOTE1X2J1ZGR5X2Zp bmkoc3RydWN0IGk5MTVfYnVkZHlfbW0gKm1tKQoreworCWludCBlcnIgPSAwOworCWludCBpOwor CisJZm9yIChpID0gMDsgaSA8IG1tLT5uX3Jvb3RzOyArK2kpIHsKKwkJaWYgKCFpOTE1X2J1ZGR5 X2Jsb2NrX2ZyZWUobW0tPnJvb3RzW2ldKSkgeworCQkJZXJyID0gLUVCVVNZOworCQkJY29udGlu dWU7CisJCX0KKworCQlrbWVtX2NhY2hlX2ZyZWUobW0tPmJsb2NrcywgbW0tPnJvb3RzW2ldKTsK Kwl9CisKKwkvKgorCSAqIFhYWDogUmF0aGVyIGxlYWsgbWVtb3J5IGZvciBub3csIHRoYW4gaGl0 IGEgcG90ZW50aWFsIHVzZXItYWZ0ZXItZnJlZQorCSAqLworCWlmIChXQVJOX09OKGVycikpCisJ CXJldHVybjsKKworCWtmcmVlKG1tLT5yb290cyk7CisJa2ZyZWUobW0tPmZyZWVfbGlzdCk7CisJ a21lbV9jYWNoZV9kZXN0cm95KG1tLT5ibG9ja3MpOworfQorCitzdGF0aWMgaW50IHNwbGl0X2Js b2NrKHN0cnVjdCBpOTE1X2J1ZGR5X21tICptbSwKKwkJICAgICAgIHN0cnVjdCBpOTE1X2J1ZGR5 X2Jsb2NrICpibG9jaykKK3sKKwl1bnNpZ25lZCBpbnQgb3JkZXIgPSBpOTE1X2J1ZGR5X2Jsb2Nr X29yZGVyKGJsb2NrKTsKKwl1NjQgb2Zmc2V0ID0gaTkxNV9idWRkeV9ibG9ja19vZmZzZXQoYmxv Y2spOworCisJR0VNX0JVR19PTighaTkxNV9idWRkeV9ibG9ja19mcmVlKGJsb2NrKSk7CisJR0VN X0JVR19PTighb3JkZXIpOworCisJYmxvY2stPmxlZnQgPSBrbWVtX2NhY2hlX3phbGxvYyhtbS0+ YmxvY2tzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJsb2NrLT5sZWZ0KQorCQlyZXR1cm4gLUVOT01F TTsKKworCWJsb2NrLT5sZWZ0LT5oZWFkZXIgPSBvZmZzZXQ7CisJYmxvY2stPmxlZnQtPmhlYWRl ciB8PSBvcmRlciAtIDE7CisKKwlibG9jay0+bGVmdC0+cGFyZW50ID0gYmxvY2s7CisKKwlJTklU X0xJU1RfSEVBRCgmYmxvY2stPmxlZnQtPmxpbmspOworCUlOSVRfTElTVF9IRUFEKCZibG9jay0+ bGVmdC0+dG1wX2xpbmspOworCisJYmxvY2stPnJpZ2h0ID0ga21lbV9jYWNoZV96YWxsb2MobW0t PmJsb2NrcywgR0ZQX0tFUk5FTCk7CisJaWYgKCFibG9jay0+cmlnaHQpIHsKKwkJa21lbV9jYWNo ZV9mcmVlKG1tLT5ibG9ja3MsIGJsb2NrLT5sZWZ0KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQor CisJYmxvY2stPnJpZ2h0LT5oZWFkZXIgPSBvZmZzZXQgKyAoQklUX1VMTChvcmRlciAtIDEpICog bW0tPm1pbl9zaXplKTsKKwlibG9jay0+cmlnaHQtPmhlYWRlciB8PSBvcmRlciAtIDE7CisKKwli bG9jay0+cmlnaHQtPnBhcmVudCA9IGJsb2NrOworCisJSU5JVF9MSVNUX0hFQUQoJmJsb2NrLT5y aWdodC0+bGluayk7CisJSU5JVF9MSVNUX0hFQUQoJmJsb2NrLT5yaWdodC0+dG1wX2xpbmspOwor CisJbWFya19mcmVlKG1tLCBibG9jay0+bGVmdCk7CisJbWFya19mcmVlKG1tLCBibG9jay0+cmln aHQpOworCisJbWFya19zcGxpdChibG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0 cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICoKK2dldF9idWRkeShzdHJ1Y3QgaTkxNV9idWRkeV9ibG9j ayAqYmxvY2spCit7CisJc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKnBhcmVudDsKKworCXBhcmVu dCA9IGJsb2NrLT5wYXJlbnQ7CisJaWYgKCFwYXJlbnQpCisJCXJldHVybiBOVUxMOworCisJaWYg KHBhcmVudC0+bGVmdCA9PSBibG9jaykKKwkJcmV0dXJuIHBhcmVudC0+cmlnaHQ7CisKKwlyZXR1 cm4gcGFyZW50LT5sZWZ0OworfQorCitzdGF0aWMgdm9pZCBfX2k5MTVfYnVkZHlfZnJlZShzdHJ1 Y3QgaTkxNV9idWRkeV9tbSAqbW0sCisJCQkgICAgICBzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAq YmxvY2spCit7CisJbGlzdF9kZWxfaW5pdCgmYmxvY2stPmxpbmspOyAvKiBXZSBoYXZlIG93bmVy c2hpcCBub3cgKi8KKworCXdoaWxlIChibG9jay0+cGFyZW50KSB7CisJCXN0cnVjdCBpOTE1X2J1 ZGR5X2Jsb2NrICpidWRkeTsKKworCQlidWRkeSA9IGdldF9idWRkeShibG9jayk7CisKKwkJaWYg KCFpOTE1X2J1ZGR5X2Jsb2NrX2ZyZWUoYnVkZHkpKQorCQkJYnJlYWs7CisKKwkJbGlzdF9kZWwo JmJ1ZGR5LT5saW5rKTsKKworCQlrbWVtX2NhY2hlX2ZyZWUobW0tPmJsb2NrcywgYmxvY2spOwor CQlrbWVtX2NhY2hlX2ZyZWUobW0tPmJsb2NrcywgYnVkZHkpOworCisJCWJsb2NrID0gYmxvY2st PnBhcmVudDsKKwl9CisKKwltYXJrX2ZyZWUobW0sIGJsb2NrKTsKK30KKwordm9pZCBpOTE1X2J1 ZGR5X2ZyZWUoc3RydWN0IGk5MTVfYnVkZHlfbW0gKm1tLAorCQkgICAgIHN0cnVjdCBpOTE1X2J1 ZGR5X2Jsb2NrICpibG9jaykKK3sKKwlHRU1fQlVHX09OKCFpOTE1X2J1ZGR5X2Jsb2NrX2FsbG9j YXRlZChibG9jaykpOworCV9faTkxNV9idWRkeV9mcmVlKG1tLCBibG9jayk7Cit9CisKK3ZvaWQg aTkxNV9idWRkeV9mcmVlX2xpc3Qoc3RydWN0IGk5MTVfYnVkZHlfbW0gKm1tLAorCQkJICAgICAg c3RydWN0IGxpc3RfaGVhZCAqb2JqZWN0cykKK3sKKwlzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAq YmxvY2ssICpvbjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShibG9jaywgb24sIG9iamVj dHMsIGxpbmspCisJCWk5MTVfYnVkZHlfZnJlZShtbSwgYmxvY2spOworfQorCisvKgorICogQWxs b2NhdGUgcG93ZXItb2YtdHdvIGJsb2NrLiBUaGUgb3JkZXIgdmFsdWUgaGVyZSB0cmFuc2xhdGVz IHRvOgorICoKKyAqICAgMCA9IDJeMCAqIG1tLT5taW5fc2l6ZQorICogICAxID0gMl4xICogbW0t Pm1pbl9zaXplCisgKiAgIDIgPSAyXjIgKiBtbS0+bWluX3NpemUKKyAqICAgLi4uCisgKi8KK3N0 cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICoKK2k5MTVfYnVkZHlfYWxsb2Moc3RydWN0IGk5MTVfYnVk ZHlfbW0gKm1tLCB1bnNpZ25lZCBpbnQgb3JkZXIpCit7CisJc3RydWN0IGk5MTVfYnVkZHlfYmxv Y2sgKmJsb2NrID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgZXJyOworCisJZm9yIChp ID0gb3JkZXI7IGkgPD0gbW0tPm1heF9vcmRlcjsgKytpKSB7CisJCWJsb2NrID0gbGlzdF9maXJz dF9lbnRyeV9vcl9udWxsKCZtbS0+ZnJlZV9saXN0W2ldLAorCQkJCQkJIHN0cnVjdCBpOTE1X2J1 ZGR5X2Jsb2NrLAorCQkJCQkJIGxpbmspOworCQlpZiAoYmxvY2spCisJCQlicmVhazsKKwl9CisK KwlpZiAoIWJsb2NrKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTsKKworCUdFTV9CVUdfT04o IWk5MTVfYnVkZHlfYmxvY2tfZnJlZShibG9jaykpOworCisJd2hpbGUgKGkgIT0gb3JkZXIpIHsK KwkJZXJyID0gc3BsaXRfYmxvY2sobW0sIGJsb2NrKTsKKwkJaWYgKHVubGlrZWx5KGVycikpCisJ CQlnb3RvIG91dF9mcmVlOworCisJCS8qIEdvIGxvdyAqLworCQlibG9jayA9IGJsb2NrLT5sZWZ0 OworCQlpLS07CisJfQorCisJbWFya19hbGxvY2F0ZWQoYmxvY2spOworCXJldHVybiBibG9jazsK Kworb3V0X2ZyZWU6CisJX19pOTE1X2J1ZGR5X2ZyZWUobW0sIGJsb2NrKTsKKwlyZXR1cm4gRVJS X1BUUihlcnIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgb3ZlcmxhcHModTY0IHMxLCB1NjQg ZTEsIHU2NCBzMiwgdTY0IGUyKQoreworCXJldHVybiBzMSA8PSBlMiAmJiBlMSA+PSBzMjsKK30K Kworc3RhdGljIGlubGluZSBib29sIGNvbnRhaW5zKHU2NCBzMSwgdTY0IGUxLCB1NjQgczIsIHU2 NCBlMikKK3sKKwlyZXR1cm4gczEgPD0gczIgJiYgZTEgPj0gZTI7Cit9CisKKy8qCisgKiBBbGxv Y2F0ZSByYW5nZS4gTm90ZSB0aGF0IGl0J3Mgc2FmZSB0byBjaGFpbiB0b2dldGhlciBtdWx0aXBs ZSBhbGxvY19yYW5nZXMKKyAqIHdpdGggdGhlIHNhbWUgYmxvY2tzIGxpc3QuCisgKgorICogSW50 ZW5kZWQgZm9yIHByZS1hbGxvY2F0aW5nIHBvcnRpb25zIG9mIHRoZSBhZGRyZXNzIHNwYWNlLCBm b3IgZXhhbXBsZSB0bworICogcmVzZXJ2ZSBhIGJsb2NrIGZvciB0aGUgaW5pdGlhbCBmcmFtZWJ1 ZmZlciBvciBzaW1pbGFyLCBoZW5jZSB0aGUgZXhwZWN0YXRpb24KKyAqIGhlcmUgaXMgdGhhdCBp OTE1X2J1ZGR5X2FsbG9jKCkgaXMgc3RpbGwgdGhlIG1haW4gdmVoaWNsZSBmb3IKKyAqIGFsbG9j YXRpb25zLCBzbyBpZiB0aGF0J3Mgbm90IHRoZSBjYXNlIHRoZW4gdGhlIGRybV9tbSByYW5nZSBh bGxvY2F0b3IgaXMKKyAqIHByb2JhYmx5IGEgbXVjaCBiZXR0ZXIgZml0LCBhbmQgc28geW91IHNo b3VsZCBwcm9iYWJseSBnbyB1c2UgdGhhdCBpbnN0ZWFkLgorICovCitpbnQgaTkxNV9idWRkeV9h bGxvY19yYW5nZShzdHJ1Y3QgaTkxNV9idWRkeV9tbSAqbW0sCisJCQkgICBzdHJ1Y3QgbGlzdF9o ZWFkICpibG9ja3MsCisJCQkgICB1NjQgc3RhcnQsIHU2NCBzaXplKQoreworCXN0cnVjdCBpOTE1 X2J1ZGR5X2Jsb2NrICpibG9jazsKKwlzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAqYnVkZHk7CisJ TElTVF9IRUFEKGFsbG9jYXRlZCk7CisJTElTVF9IRUFEKGRmcyk7CisJdTY0IGVuZDsKKwlpbnQg ZXJyOworCWludCBpOworCisJaWYgKHNpemUgPCBtbS0+bWluX3NpemUpCisJCXJldHVybiAtRUlO VkFMOworCisJaWYgKCFJU19BTElHTkVEKHN0YXJ0LCBtbS0+bWluX3NpemUpKQorCQlyZXR1cm4g LUVJTlZBTDsKKworCWlmICghc2l6ZSB8fCAhSVNfQUxJR05FRChzaXplLCBtbS0+bWluX3NpemUp KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChyYW5nZV9vdmVyZmxvd3Moc3RhcnQsIHNpemUs IG1tLT5zaXplKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgbW0tPm5f cm9vdHM7ICsraSkKKwkJbGlzdF9hZGRfdGFpbCgmbW0tPnJvb3RzW2ldLT50bXBfbGluaywgJmRm cyk7CisKKwllbmQgPSBzdGFydCArIHNpemUgLSAxOworCisJZG8geworCQl1NjQgYmxvY2tfc3Rh cnQ7CisJCXU2NCBibG9ja19lbmQ7CisKKwkJYmxvY2sgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251 bGwoJmRmcywKKwkJCQkJCSBzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jaywKKwkJCQkJCSB0bXBfbGlu ayk7CisJCWlmICghYmxvY2spCisJCQlicmVhazsKKworCQlsaXN0X2RlbCgmYmxvY2stPnRtcF9s aW5rKTsKKworCQlibG9ja19zdGFydCA9IGk5MTVfYnVkZHlfYmxvY2tfb2Zmc2V0KGJsb2NrKTsK KwkJYmxvY2tfZW5kID0gYmxvY2tfc3RhcnQgKyBpOTE1X2J1ZGR5X2Jsb2NrX3NpemUobW0sIGJs b2NrKSAtIDE7CisKKwkJaWYgKCFvdmVybGFwcyhzdGFydCwgZW5kLCBibG9ja19zdGFydCwgYmxv Y2tfZW5kKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChpOTE1X2J1ZGR5X2Jsb2NrX2FsbG9jYXRl ZChibG9jaykpIHsKKwkJCWVyciA9IC1FTk9TUEM7CisJCQlnb3RvIGVycl9mcmVlOworCQl9CisK KwkJaWYgKGNvbnRhaW5zKHN0YXJ0LCBlbmQsIGJsb2NrX3N0YXJ0LCBibG9ja19lbmQpKSB7CisJ CQlpZiAoIWk5MTVfYnVkZHlfYmxvY2tfZnJlZShibG9jaykpIHsKKwkJCQllcnIgPSAtRU5PU1BD OworCQkJCWdvdG8gZXJyX2ZyZWU7CisJCQl9CisKKwkJCW1hcmtfYWxsb2NhdGVkKGJsb2NrKTsK KwkJCWxpc3RfYWRkX3RhaWwoJmJsb2NrLT5saW5rLCAmYWxsb2NhdGVkKTsKKwkJCWNvbnRpbnVl OworCQl9CisKKwkJaWYgKCFpOTE1X2J1ZGR5X2Jsb2NrX3NwbGl0KGJsb2NrKSkgeworCQkJZXJy ID0gc3BsaXRfYmxvY2sobW0sIGJsb2NrKTsKKwkJCWlmICh1bmxpa2VseShlcnIpKQorCQkJCWdv dG8gZXJyX3VuZG87CisJCX0KKworCQlsaXN0X2FkZCgmYmxvY2stPnJpZ2h0LT50bXBfbGluaywg JmRmcyk7CisJCWxpc3RfYWRkKCZibG9jay0+bGVmdC0+dG1wX2xpbmssICZkZnMpOworCX0gd2hp bGUgKDEpOworCisJbGlzdF9zcGxpY2VfdGFpbCgmYWxsb2NhdGVkLCBibG9ja3MpOworCXJldHVy biAwOworCitlcnJfdW5kbzoKKwkvKgorCSAqIFdlIHJlYWxseSBkb24ndCB3YW50IHRvIGxlYXZl IGFyb3VuZCBhIGJ1bmNoIG9mIHNwbGl0IGJsb2Nrcywgc2luY2UKKwkgKiBiaWdnZXIgaXMgYmV0 dGVyLCBzbyBtYWtlIHN1cmUgd2UgbWVyZ2UgZXZlcnl0aGluZyBiYWNrIGJlZm9yZSB3ZQorCSAq IGZyZWUgdGhlIGFsbG9jYXRlZCBibG9ja3MuCisJICovCisJYnVkZHkgPSBnZXRfYnVkZHkoYmxv Y2spOworCWlmIChidWRkeSAmJiAoaTkxNV9idWRkeV9ibG9ja19mcmVlKGJsb2NrKSAmJgorCSAg ICBpOTE1X2J1ZGR5X2Jsb2NrX2ZyZWUoYnVkZHkpKSkKKwkJX19pOTE1X2J1ZGR5X2ZyZWUobW0s IGJsb2NrKTsKKworZXJyX2ZyZWU6CisJaTkxNV9idWRkeV9mcmVlX2xpc3QobW0sICZhbGxvY2F0 ZWQpOworCXJldHVybiBlcnI7Cit9CisKKyNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fSTkxNV9T RUxGVEVTVCkKKyNpbmNsdWRlICJzZWxmdGVzdHMvaTkxNV9idWRkeS5jIgorI2VuZGlmCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2J1ZGR5LmggYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2J1ZGR5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi42MTVlZWNkN2NmNGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2J1ZGR5LmgKQEAgLTAsMCArMSwxMTUgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBNSVQgKi8KKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgor ICovCisKKyNpZm5kZWYgX19JOTE1X0JVRERZX0hfXworI2RlZmluZSBfX0k5MTVfQlVERFlfSF9f CisKKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKworc3RydWN0IGxpc3RfaGVhZDsKKworc3Ry dWN0IGk5MTVfYnVkZHlfYmxvY2sgeworI2RlZmluZSBJOTE1X0JVRERZX0hFQURFUl9PRkZTRVQg R0VOTUFTS19VTEwoNjMsIDEyKQorI2RlZmluZSBJOTE1X0JVRERZX0hFQURFUl9TVEFURSAgR0VO TUFTS19VTEwoMTEsIDEwKQorI2RlZmluZSAgIEk5MTVfQlVERFlfQUxMT0NBVEVEICgxPDwxMCkK KyNkZWZpbmUgICBJOTE1X0JVRERZX0ZSRUUJICAgKDI8PDEwKQorI2RlZmluZSAgIEk5MTVfQlVE RFlfU1BMSVQJICAgKDM8PDEwKQorI2RlZmluZSBJOTE1X0JVRERZX0hFQURFUl9PUkRFUiAgR0VO TUFTS19VTEwoOSwgMCkKKwl1NjQgaGVhZGVyOworCisJc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sg KmxlZnQ7CisJc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKnJpZ2h0OworCXN0cnVjdCBpOTE1X2J1 ZGR5X2Jsb2NrICpwYXJlbnQ7CisKKwkvKiBYWFg6IHNvbXdld2hhdCBmdW5reSAqLworCXN0cnVj dCBsaXN0X2hlYWQgbGluazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHRtcF9saW5rOworfTsKKworI2Rl ZmluZSBJOTE1X0JVRERZX01BWF9PUkRFUiAgSTkxNV9CVUREWV9IRUFERVJfT1JERVIKKworLyog QmluYXJ5IEJ1ZGR5IFN5c3RlbSAqLworc3RydWN0IGk5MTVfYnVkZHlfbW0geworCXN0cnVjdCBr bWVtX2NhY2hlICpibG9ja3M7CisKKwkvKiBNYWludGFpbiBhIGZyZWUgbGlzdCBmb3IgZWFjaCBv cmRlci4gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkICpmcmVlX2xpc3Q7CisKKwkvKgorCSAqIE1haW50 YWluIGV4cGxpY2l0IGJpbmFyeSB0cmVlKHMpIHRvIHRyYWNrIHRoZSBhbGxvY2F0aW9uIG9mIHRo ZQorCSAqIGFkZHJlc3Mgc3BhY2UuIFRoaXMgZ2l2ZXMgdXMgYSBzaW1wbGUgd2F5IG9mIGZpbmRp bmcgYSBidWRkeSBibG9jaworCSAqIGFuZCBwZXJmb3JtaW5nIHRoZSBwb3RlbnRpYWxseSByZWN1 cnNpdmUgbWVyZ2Ugc3RlcCB3aGVuIGZyZWVpbmcgYQorCSAqIGJsb2NrLiAgTm9kZXMgYXJlIGVp dGhlciBhbGxvY2F0ZWQgb3IgZnJlZSwgaW4gd2hpY2ggY2FzZSB0aGV5IHdpbGwKKwkgKiBhbHNv IGV4aXN0IG9uIHRoZSByZXNwZWN0aXZlIGZyZWUgbGlzdC4KKwkgKi8KKwlzdHJ1Y3QgaTkxNV9i dWRkeV9ibG9jayAqKnJvb3RzOworCisJdW5zaWduZWQgaW50IG5fcm9vdHM7CisJdW5zaWduZWQg aW50IG1heF9vcmRlcjsKKworCS8qIE11c3QgYmUgYXQgbGVhc3QgUEFHRV9TSVpFICovCisJdTY0 IG1pbl9zaXplOworCXU2NCBzaXplOworfTsKKworc3RhdGljIGlubGluZSB1NjQKK2k5MTVfYnVk ZHlfYmxvY2tfb2Zmc2V0KHN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICpibG9jaykKK3sKKwlyZXR1 cm4gYmxvY2stPmhlYWRlciAmIEk5MTVfQlVERFlfSEVBREVSX09GRlNFVDsKK30KKworc3RhdGlj IGlubGluZSB1bnNpZ25lZCBpbnQKK2k5MTVfYnVkZHlfYmxvY2tfb3JkZXIoc3RydWN0IGk5MTVf YnVkZHlfYmxvY2sgKmJsb2NrKQoreworCXJldHVybiBibG9jay0+aGVhZGVyICYgSTkxNV9CVURE WV9IRUFERVJfT1JERVI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CitpOTE1X2J1 ZGR5X2Jsb2NrX3N0YXRlKHN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICpibG9jaykKK3sKKwlyZXR1 cm4gYmxvY2stPmhlYWRlciAmIEk5MTVfQlVERFlfSEVBREVSX1NUQVRFOworfQorCitzdGF0aWMg aW5saW5lIGJvb2wKK2k5MTVfYnVkZHlfYmxvY2tfYWxsb2NhdGVkKHN0cnVjdCBpOTE1X2J1ZGR5 X2Jsb2NrICpibG9jaykKK3sKKwlyZXR1cm4gaTkxNV9idWRkeV9ibG9ja19zdGF0ZShibG9jaykg PT0gSTkxNV9CVUREWV9BTExPQ0FURUQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAoraTkxNV9i dWRkeV9ibG9ja19mcmVlKHN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICpibG9jaykKK3sKKwlyZXR1 cm4gaTkxNV9idWRkeV9ibG9ja19zdGF0ZShibG9jaykgPT0gSTkxNV9CVUREWV9GUkVFOworfQor CitzdGF0aWMgaW5saW5lIGJvb2wKK2k5MTVfYnVkZHlfYmxvY2tfc3BsaXQoc3RydWN0IGk5MTVf YnVkZHlfYmxvY2sgKmJsb2NrKQoreworCXJldHVybiBpOTE1X2J1ZGR5X2Jsb2NrX3N0YXRlKGJs b2NrKSA9PSBJOTE1X0JVRERZX1NQTElUOworfQorCitzdGF0aWMgaW5saW5lIHU2NAoraTkxNV9i dWRkeV9ibG9ja19zaXplKHN0cnVjdCBpOTE1X2J1ZGR5X21tICptbSwKKwkJICAgICAgc3RydWN0 IGk5MTVfYnVkZHlfYmxvY2sgKmJsb2NrKQoreworCXJldHVybiBCSVQoaTkxNV9idWRkeV9ibG9j a19vcmRlcihibG9jaykpICogbW0tPm1pbl9zaXplOworfQorCitpbnQgaTkxNV9idWRkeV9pbml0 KHN0cnVjdCBpOTE1X2J1ZGR5X21tICptbSwgdTY0IHNpemUsIHU2NCBtaW5fc2l6ZSk7CisKK3Zv aWQgaTkxNV9idWRkeV9maW5pKHN0cnVjdCBpOTE1X2J1ZGR5X21tICptbSk7CisKK3N0cnVjdCBp OTE1X2J1ZGR5X2Jsb2NrICoKK2k5MTVfYnVkZHlfYWxsb2Moc3RydWN0IGk5MTVfYnVkZHlfbW0g Km1tLCB1bnNpZ25lZCBpbnQgb3JkZXIpOworCitpbnQgaTkxNV9idWRkeV9hbGxvY19yYW5nZShz dHJ1Y3QgaTkxNV9idWRkeV9tbSAqbW0sCisJCQkgICBzdHJ1Y3QgbGlzdF9oZWFkICpibG9ja3Ms CisJCQkgICB1NjQgc3RhcnQsIHU2NCBzaXplKTsKKwordm9pZCBpOTE1X2J1ZGR5X2ZyZWUoc3Ry dWN0IGk5MTVfYnVkZHlfbW0gKm1tLCBzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAqYmxvY2spOwor Cit2b2lkIGk5MTVfYnVkZHlfZnJlZV9saXN0KHN0cnVjdCBpOTE1X2J1ZGR5X21tICptbSwgc3Ry dWN0IGxpc3RfaGVhZCAqb2JqZWN0cyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfYnVkZHkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L3NlbGZ0ZXN0cy9pOTE1X2J1ZGR5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAwLi4yMTU5YWE5ZjQ4NjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9zZWxmdGVzdHMvaTkxNV9idWRkeS5jCkBAIC0wLDAgKzEsNDkxIEBACisvLyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogTUlUCisvKgorICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29y cG9yYXRpb24KKyAqLworCisjaW5jbHVkZSA8bGludXgvcHJpbWVfbnVtYmVycy5oPgorCisjaW5j bHVkZSAiLi4vaTkxNV9zZWxmdGVzdC5oIgorI2luY2x1ZGUgImk5MTVfcmFuZG9tLmgiCisKKyNk ZWZpbmUgU1pfOEcgKDFVTEwgPDwgMzMpCisKK3N0YXRpYyB2b2lkIF9faWd0X2R1bXBfYmxvY2so c3RydWN0IGk5MTVfYnVkZHlfbW0gKm1tLAorCQkJICAgICBzdHJ1Y3QgaTkxNV9idWRkeV9ibG9j ayAqYmxvY2ssCisJCQkgICAgIGJvb2wgYnVkZHkpCit7CisJcHJfZXJyKCJibG9jayBpbmZvOiBo ZWFkZXI9JWxseCwgc3RhdGU9JXUsIG9yZGVyPSVkLCBvZmZzZXQ9JWxseCBzaXplPSVsbHggcm9v dD0lcyBidWRkeT0lc1xuIiwKKwkgICAgICAgYmxvY2stPmhlYWRlciwKKwkgICAgICAgaTkxNV9i dWRkeV9ibG9ja19zdGF0ZShibG9jayksCisJICAgICAgIGk5MTVfYnVkZHlfYmxvY2tfb3JkZXIo YmxvY2spLAorCSAgICAgICBpOTE1X2J1ZGR5X2Jsb2NrX29mZnNldChibG9jayksCisJICAgICAg IGk5MTVfYnVkZHlfYmxvY2tfc2l6ZShtbSwgYmxvY2spLAorCSAgICAgICB5ZXNubyghYmxvY2st PnBhcmVudCksCisJICAgICAgIHllc25vKGJ1ZGR5KSk7Cit9CisKK3N0YXRpYyB2b2lkIGlndF9k dW1wX2Jsb2NrKHN0cnVjdCBpOTE1X2J1ZGR5X21tICptbSwKKwkJCSAgIHN0cnVjdCBpOTE1X2J1 ZGR5X2Jsb2NrICpibG9jaykKK3sKKwlzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAqYnVkZHk7CisK KwlfX2lndF9kdW1wX2Jsb2NrKG1tLCBibG9jaywgZmFsc2UpOworCisJYnVkZHkgPSBnZXRfYnVk ZHkoYmxvY2spOworCWlmIChidWRkeSkKKwkJX19pZ3RfZHVtcF9ibG9jayhtbSwgYnVkZHksIHRy dWUpOworfQorCitzdGF0aWMgaW50IGlndF9jaGVja19ibG9jayhzdHJ1Y3QgaTkxNV9idWRkeV9t bSAqbW0sCisJCQkgICBzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAqYmxvY2spCit7CisJc3RydWN0 IGk5MTVfYnVkZHlfYmxvY2sgKmJ1ZGR5OworCXVuc2lnbmVkIGludCBibG9ja19zdGF0ZTsKKwl1 NjQgYmxvY2tfc2l6ZTsKKwl1NjQgb2Zmc2V0OworCWludCBlcnIgPSAwOworCisJYmxvY2tfc3Rh dGUgPSBpOTE1X2J1ZGR5X2Jsb2NrX3N0YXRlKGJsb2NrKTsKKworCWlmIChibG9ja19zdGF0ZSAh PSBJOTE1X0JVRERZX0FMTE9DQVRFRCAmJgorCSAgICBibG9ja19zdGF0ZSAhPSBJOTE1X0JVRERZ X0ZSRUUgJiYKKwkgICAgYmxvY2tfc3RhdGUgIT0gSTkxNV9CVUREWV9TUExJVCkgeworCQlwcl9l cnIoImJsb2NrIHN0YXRlIG1pc21hdGNoXG4iKTsKKwkJZXJyID0gLUVJTlZBTDsKKwl9CisKKwli bG9ja19zaXplID0gaTkxNV9idWRkeV9ibG9ja19zaXplKG1tLCBibG9jayk7CisJb2Zmc2V0ID0g aTkxNV9idWRkeV9ibG9ja19vZmZzZXQoYmxvY2spOworCisJaWYgKGJsb2NrX3NpemUgPCBtbS0+ bWluX3NpemUpIHsKKwkJcHJfZXJyKCJibG9jayBzaXplIHNtYWxsZXIgdGhhbiBtaW4gc2l6ZVxu Iik7CisJCWVyciA9IC1FSU5WQUw7CisJfQorCisJaWYgKCFpc19wb3dlcl9vZl8yKGJsb2NrX3Np emUpKSB7CisJCXByX2VycigiYmxvY2sgc2l6ZSBub3QgcG93ZXIgb2YgdHdvXG4iKTsKKwkJZXJy ID0gLUVJTlZBTDsKKwl9CisKKwlpZiAoIUlTX0FMSUdORUQoYmxvY2tfc2l6ZSwgbW0tPm1pbl9z aXplKSkgeworCQlwcl9lcnIoImJsb2NrIHNpemUgbm90IGFsaWduZWQgdG8gbWluIHNpemVcbiIp OworCQllcnIgPSAtRUlOVkFMOworCX0KKworCWlmICghSVNfQUxJR05FRChvZmZzZXQsIG1tLT5t aW5fc2l6ZSkpIHsKKwkJcHJfZXJyKCJibG9jayBvZmZzZXQgbm90IGFsaWduZWQgdG8gbWluIHNp emVcbiIpOworCQllcnIgPSAtRUlOVkFMOworCX0KKworCWlmICghSVNfQUxJR05FRChvZmZzZXQs IGJsb2NrX3NpemUpKSB7CisJCXByX2VycigiYmxvY2sgb2Zmc2V0IG5vdCBhbGlnbmVkIHRvIGJs b2NrIHNpemVcbiIpOworCQllcnIgPSAtRUlOVkFMOworCX0KKworCWJ1ZGR5ID0gZ2V0X2J1ZGR5 KGJsb2NrKTsKKworCWlmICghYnVkZHkgJiYgYmxvY2stPnBhcmVudCkgeworCQlwcl9lcnIoImJ1 ZGR5IGhhcyBnb25lIGZpc2hpbmdcbiIpOworCQllcnIgPSAtRUlOVkFMOworCX0KKworCWlmIChi dWRkeSkgeworCQlpZiAoaTkxNV9idWRkeV9ibG9ja19vZmZzZXQoYnVkZHkpICE9IChvZmZzZXQg XiBibG9ja19zaXplKSkgeworCQkJcHJfZXJyKCJidWRkeSBoYXMgd3Jvbmcgb2Zmc2V0XG4iKTsK KwkJCWVyciA9IC1FSU5WQUw7CisJCX0KKworCQlpZiAoaTkxNV9idWRkeV9ibG9ja19zaXplKG1t LCBidWRkeSkgIT0gYmxvY2tfc2l6ZSkgeworCQkJcHJfZXJyKCJidWRkeSBzaXplIG1pc21hdGNo XG4iKTsKKwkJCWVyciA9IC1FSU5WQUw7CisJCX0KKworCQlpZiAoaTkxNV9idWRkeV9ibG9ja19z dGF0ZShidWRkeSkgPT0gYmxvY2tfc3RhdGUgJiYKKwkJICAgIGJsb2NrX3N0YXRlID09IEk5MTVf QlVERFlfRlJFRSkgeworCQkJcHJfZXJyKCJibG9jayBhbmQgaXRzIGJ1ZGR5IGFyZSBmcmVlXG4i KTsKKwkJCWVyciA9IC1FSU5WQUw7CisJCX0KKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0 aWMgaW50IGlndF9jaGVja19ibG9ja3Moc3RydWN0IGk5MTVfYnVkZHlfbW0gKm1tLAorCQkJICAg IHN0cnVjdCBsaXN0X2hlYWQgKmJsb2NrcywKKwkJCSAgICB1NjQgZXhwZWN0ZWRfc2l6ZSwKKwkJ CSAgICBib29sIGlzX2NvbnRpZ3VvdXMpCit7CisJc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKmJs b2NrOworCXN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICpwcmV2OworCXU2NCB0b3RhbDsKKwlpbnQg ZXJyID0gMDsKKworCWJsb2NrID0gTlVMTDsKKwlwcmV2ID0gTlVMTDsKKwl0b3RhbCA9IDA7CisK KwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJsb2NrLCBibG9ja3MsIGxpbmspIHsKKwkJZXJyID0gaWd0 X2NoZWNrX2Jsb2NrKG1tLCBibG9jayk7CisKKwkJaWYgKCFpOTE1X2J1ZGR5X2Jsb2NrX2FsbG9j YXRlZChibG9jaykpIHsKKwkJCXByX2VycigiYmxvY2sgbm90IGFsbG9jYXRlZFxuIiksCisJCQll cnIgPSAtRUlOVkFMOworCQl9CisKKwkJaWYgKGlzX2NvbnRpZ3VvdXMgJiYgcHJldikgeworCQkJ dTY0IHByZXZfYmxvY2tfc2l6ZTsKKwkJCXU2NCBwcmV2X29mZnNldDsKKwkJCXU2NCBvZmZzZXQ7 CisKKwkJCXByZXZfb2Zmc2V0ID0gaTkxNV9idWRkeV9ibG9ja19vZmZzZXQocHJldik7CisJCQlw cmV2X2Jsb2NrX3NpemUgPSBpOTE1X2J1ZGR5X2Jsb2NrX3NpemUobW0sIHByZXYpOworCQkJb2Zm c2V0ID0gaTkxNV9idWRkeV9ibG9ja19vZmZzZXQoYmxvY2spOworCisJCQlpZiAob2Zmc2V0ICE9 IChwcmV2X29mZnNldCArIHByZXZfYmxvY2tfc2l6ZSkpIHsKKwkJCQlwcl9lcnIoImJsb2NrIG9m ZnNldCBtaXNtYXRjaFxuIik7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCX0KKwkJfQorCisJCWlm IChlcnIpCisJCQlicmVhazsKKworCQl0b3RhbCArPSBpOTE1X2J1ZGR5X2Jsb2NrX3NpemUobW0s IGJsb2NrKTsKKwkJcHJldiA9IGJsb2NrOworCX0KKworCWlmICghZXJyKSB7CisJCWlmICh0b3Rh bCAhPSBleHBlY3RlZF9zaXplKSB7CisJCQlwcl9lcnIoInNpemUgbWlzbWF0Y2gsIGV4cGVjdGVk PSVsbHgsIGZvdW5kPSVsbHhcbiIsCisJCQkgICAgICAgZXhwZWN0ZWRfc2l6ZSwgdG90YWwpOwor CQkJZXJyID0gLUVJTlZBTDsKKwkJfQorCQlyZXR1cm4gZXJyOworCX0KKworCWlmIChwcmV2KSB7 CisJCXByX2VycigicHJldiBibG9jaywgZHVtcDpcbiIpOworCQlpZ3RfZHVtcF9ibG9jayhtbSwg cHJldik7CisJfQorCisJaWYgKGJsb2NrKSB7CisJCXByX2VycigiYmFkIGJsb2NrLCBkdW1wOlxu Iik7CisJCWlndF9kdW1wX2Jsb2NrKG1tLCBibG9jayk7CisJfQorCisJcmV0dXJuIGVycjsKK30K Kworc3RhdGljIGludCBpZ3RfY2hlY2tfbW0oc3RydWN0IGk5MTVfYnVkZHlfbW0gKm1tKQorewor CXN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICpyb290OworCXN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2Nr ICpwcmV2OworCXVuc2lnbmVkIGludCBpOworCXU2NCB0b3RhbDsKKwlpbnQgZXJyID0gMDsKKwor CWlmICghbW0tPm5fcm9vdHMpIHsKKwkJcHJfZXJyKCJuX3Jvb3RzIGlzIHplcm9cbiIpOworCQly ZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAobW0tPm5fcm9vdHMgIT0gaHdlaWdodDY0KG1tLT5z aXplKSkgeworCQlwcl9lcnIoIm5fcm9vdHMgbWlzbWF0Y2gsIG5fcm9vdHM9JXUsIGV4cGVjdGVk PSVsdVxuIiwKKwkJICAgICAgIG1tLT5uX3Jvb3RzLCBod2VpZ2h0NjQobW0tPnNpemUpKTsKKwkJ cmV0dXJuIC1FSU5WQUw7CisJfQorCisJcm9vdCA9IE5VTEw7CisJcHJldiA9IE5VTEw7CisJdG90 YWwgPSAwOworCisJZm9yIChpID0gMDsgaSA8IG1tLT5uX3Jvb3RzOyArK2kpIHsKKwkJc3RydWN0 IGk5MTVfYnVkZHlfYmxvY2sgKmJsb2NrOworCQl1bnNpZ25lZCBpbnQgb3JkZXI7CisKKwkJcm9v dCA9IG1tLT5yb290c1tpXTsKKwkJaWYgKCFyb290KSB7CisJCQlwcl9lcnIoInJvb3QoJXUpIGlz IE5VTExcbiIsIGkpOworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJZXJy ID0gaWd0X2NoZWNrX2Jsb2NrKG1tLCByb290KTsKKworCQlpZiAoIWk5MTVfYnVkZHlfYmxvY2tf ZnJlZShyb290KSkgeworCQkJcHJfZXJyKCJyb290IG5vdCBmcmVlXG4iKTsKKwkJCWVyciA9IC1F SU5WQUw7CisJCX0KKworCQlvcmRlciA9IGk5MTVfYnVkZHlfYmxvY2tfb3JkZXIocm9vdCk7CisK KwkJaWYgKCFpKSB7CisJCQlpZiAob3JkZXIgIT0gbW0tPm1heF9vcmRlcikgeworCQkJCXByX2Vy cigibWF4IG9yZGVyIHJvb3QgbWlzc2luZ1xuIik7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCX0K KwkJfQorCisJCWlmIChwcmV2KSB7CisJCQl1NjQgcHJldl9ibG9ja19zaXplOworCQkJdTY0IHBy ZXZfb2Zmc2V0OworCQkJdTY0IG9mZnNldDsKKworCQkJcHJldl9vZmZzZXQgPSBpOTE1X2J1ZGR5 X2Jsb2NrX29mZnNldChwcmV2KTsKKwkJCXByZXZfYmxvY2tfc2l6ZSA9IGk5MTVfYnVkZHlfYmxv Y2tfc2l6ZShtbSwgcHJldik7CisJCQlvZmZzZXQgPSBpOTE1X2J1ZGR5X2Jsb2NrX29mZnNldChy b290KTsKKworCQkJaWYgKG9mZnNldCAhPSAocHJldl9vZmZzZXQgKyBwcmV2X2Jsb2NrX3NpemUp KSB7CisJCQkJcHJfZXJyKCJyb290IG9mZnNldCBtaXNtYXRjaFxuIik7CisJCQkJZXJyID0gLUVJ TlZBTDsKKwkJCX0KKwkJfQorCisJCWJsb2NrID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKCZt bS0+ZnJlZV9saXN0W29yZGVyXSwKKwkJCQkJCSBzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jaywKKwkJ CQkJCSBsaW5rKTsKKwkJaWYgKGJsb2NrICE9IHJvb3QpIHsKKwkJCXByX2Vycigicm9vdCBtaXNt YXRjaCBhdCBvcmRlcj0ldVxuIiwgb3JkZXIpOworCQkJZXJyID0gLUVJTlZBTDsKKwkJfQorCisJ CWlmIChlcnIpCisJCQlicmVhazsKKworCQlwcmV2ID0gcm9vdDsKKwkJdG90YWwgKz0gaTkxNV9i dWRkeV9ibG9ja19zaXplKG1tLCByb290KTsKKwl9CisKKwlpZiAoIWVycikgeworCQlpZiAodG90 YWwgIT0gbW0tPnNpemUpIHsKKwkJCXByX2VycigiZXhwZWN0ZWQgbW0gc2l6ZT0lbGx4LCBmb3Vu ZD0lbGx4XG4iLCBtbS0+c2l6ZSwKKwkJCSAgICAgICB0b3RhbCk7CisJCQllcnIgPSAtRUlOVkFM OworCQl9CisJCXJldHVybiBlcnI7CisJfQorCisJaWYgKHByZXYpIHsKKwkJcHJfZXJyKCJwcmV2 IHJvb3QoJXUpLCBkdW1wOlxuIiwgaSAtIDEpOworCQlpZ3RfZHVtcF9ibG9jayhtbSwgcHJldik7 CisJfQorCisJaWYgKHJvb3QpIHsKKwkJcHJfZXJyKCJiYWQgcm9vdCgldSksIGR1bXA6XG4iLCBp KTsKKwkJaWd0X2R1bXBfYmxvY2sobW0sIHJvb3QpOworCX0KKworCXJldHVybiBlcnI7Cit9CisK K3N0YXRpYyB2b2lkIGlndF9tbV9jb25maWcodTY0ICpzaXplLCB1NjQgKm1pbl9zaXplKQorewor CUk5MTVfUk5EX1NUQVRFKHBybmcpOworCXU2NCBzLCBtczsKKworCS8qIE5vdGhpbmcgZmFuY3ks IGp1c3QgdHJ5IHRvIGdldCBhbiBpbnRlcmVzdGluZyBiaXQgcGF0dGVybiAqLworCisJcHJhbmRv bV9zZWVkX3N0YXRlKCZwcm5nLCBpOTE1X3NlbGZ0ZXN0LnJhbmRvbV9zZWVkKTsKKworCXMgPSBp OTE1X3ByYW5kb21fdTY0X3N0YXRlKCZwcm5nKSAmIChTWl84RyAtIDEpOworCW1zID0gQklUX1VM TCgxMiArIChwcmFuZG9tX3UzMl9zdGF0ZSgmcHJuZykgJSBpbG9nMihzID4+IDEyKSkpOworCXMg PSBtYXgocyAmIC1tcywgbXMpOworCisJKm1pbl9zaXplID0gbXM7CisJKnNpemUgPSBzOworfQor CitzdGF0aWMgaW50IGlndF9idWRkeV9hbGxvYyh2b2lkICphcmcpCit7CisJc3RydWN0IGk5MTVf YnVkZHlfbW0gbW07CisJaW50IG1heF9vcmRlcjsKKwl1NjQgbWluX3NpemU7CisJdTY0IG1tX3Np emU7CisJaW50IGVycjsKKworCWlndF9tbV9jb25maWcoJm1tX3NpemUsICZtaW5fc2l6ZSk7CisK Kwlwcl9pbmZvKCJidWRkeV9pbml0IHdpdGggc2l6ZT0lbGx4LCBtaW5fc2l6ZT0lbGx4XG4iLCBt bV9zaXplLCBtaW5fc2l6ZSk7CisKKwllcnIgPSBpOTE1X2J1ZGR5X2luaXQoJm1tLCBtbV9zaXpl LCBtaW5fc2l6ZSk7CisJaWYgKGVycikgeworCQlwcl9lcnIoImJ1ZGR5X2luaXQgZmFpbGVkKCVk KVxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlmb3IgKG1heF9vcmRlciA9IG1tLm1h eF9vcmRlcjsgbWF4X29yZGVyID49IDA7IG1heF9vcmRlci0tKSB7CisJCXN0cnVjdCBpOTE1X2J1 ZGR5X2Jsb2NrICpibG9jazsKKwkJaW50IG9yZGVyOworCQlMSVNUX0hFQUQoYmxvY2tzKTsKKwkJ dTY0IHRvdGFsOworCisJCWVyciA9IGlndF9jaGVja19tbSgmbW0pOworCQlpZiAoZXJyKSB7CisJ CQlwcl9lcnIoInByZS1tbSBjaGVjayBmYWlsZWQsIGFib3J0XG4iKTsKKwkJCWJyZWFrOworCQl9 CisKKwkJcHJfaW5mbygiZmlsbGluZyBmcm9tIG1heF9vcmRlcj0ldVxuIiwgbWF4X29yZGVyKTsK KworCQlvcmRlciA9IG1heF9vcmRlcjsKKwkJdG90YWwgPSAwOworCisJCWRvIHsKK3JldHJ5Ogor CQkJYmxvY2sgPSBpOTE1X2J1ZGR5X2FsbG9jKCZtbSwgb3JkZXIpOworCQkJaWYgKElTX0VSUihi bG9jaykpIHsKKwkJCQllcnIgPSBQVFJfRVJSKGJsb2NrKTsKKwkJCQlpZiAoZXJyID09IC1FTk9N RU0pIHsKKwkJCQkJcHJfaW5mbygiYnVkZHlfYWxsb2MgaGl0IC1FTk9NRU0gd2l0aCBvcmRlcj0l ZFxuIiwKKwkJCQkJCW9yZGVyKTsKKwkJCQl9IGVsc2UgeworCQkJCQlpZiAob3JkZXItLSkgewor CQkJCQkJZXJyID0gMDsKKwkJCQkJCWdvdG8gcmV0cnk7CisJCQkJCX0KKworCQkJCQlwcl9lcnIo ImJ1ZGR5X2FsbG9jIHdpdGggb3JkZXI9JWQgZmFpbGVkKCVkKVxuIiwKKwkJCQkJICAgICAgIG9y ZGVyLCBlcnIpOworCQkJCX0KKworCQkJCWJyZWFrOworCQkJfQorCisJCQlsaXN0X2FkZF90YWls KCZibG9jay0+bGluaywgJmJsb2Nrcyk7CisKKwkJCWlmIChpOTE1X2J1ZGR5X2Jsb2NrX29yZGVy KGJsb2NrKSAhPSBvcmRlcikgeworCQkJCXByX2VycigiYnVkZHlfYWxsb2Mgb3JkZXIgbWlzbWF0 Y2hcbiIpOworCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCXRvdGFs ICs9IGk5MTVfYnVkZHlfYmxvY2tfc2l6ZSgmbW0sIGJsb2NrKTsKKwkJfSB3aGlsZSAodG90YWwg PCBtbS5zaXplKTsKKworCQlpZiAoIWVycikKKwkJCWVyciA9IGlndF9jaGVja19ibG9ja3MoJm1t LCAmYmxvY2tzLCB0b3RhbCwgZmFsc2UpOworCisJCWk5MTVfYnVkZHlfZnJlZV9saXN0KCZtbSwg JmJsb2Nrcyk7CisKKwkJaWYgKCFlcnIpIHsKKwkJCWVyciA9IGlndF9jaGVja19tbSgmbW0pOwor CQkJaWYgKGVycikKKwkJCQlwcl9lcnIoInBvc3QtbW0gY2hlY2sgZmFpbGVkXG4iKTsKKwkJfQor CisJCWlmIChlcnIpCisJCQlicmVhazsKKwl9CisKKwlpZiAoZXJyID09IC1FTk9NRU0pCisJCWVy ciA9IDA7CisKKwlpOTE1X2J1ZGR5X2ZpbmkoJm1tKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0 YXRpYyBpbnQgaWd0X2J1ZGR5X2FsbG9jX3JhbmdlKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgaTkx NV9idWRkeV9tbSBtbTsKKwl1bnNpZ25lZCBsb25nIHBhZ2VfbnVtOworCUxJU1RfSEVBRChibG9j a3MpOworCXU2NCBtaW5fc2l6ZTsKKwl1NjQgb2Zmc2V0OworCXU2NCBzaXplOworCXU2NCByZW07 CisJaW50IGVycjsKKworCWlndF9tbV9jb25maWcoJnNpemUsICZtaW5fc2l6ZSk7CisKKwlwcl9p bmZvKCJidWRkeV9pbml0IHdpdGggc2l6ZT0lbGx4LCBtaW5fc2l6ZT0lbGx4XG4iLCBzaXplLCBt aW5fc2l6ZSk7CisKKwllcnIgPSBpOTE1X2J1ZGR5X2luaXQoJm1tLCBzaXplLCBtaW5fc2l6ZSk7 CisJaWYgKGVycikgeworCQlwcl9lcnIoImJ1ZGR5X2luaXQgZmFpbGVkKCVkKVxuIiwgZXJyKTsK KwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBpZ3RfY2hlY2tfbW0oJm1tKTsKKwlpZiAoZXJy KSB7CisJCXByX2VycigicHJlLW1tIGNoZWNrIGZhaWxlZCwgYWJvcnQsIGFib3J0LCBhYm9ydCFc biIpOworCQlnb3RvIGVycl9maW5pOworCX0KKworCXJlbSA9IG1tLnNpemU7CisJb2Zmc2V0ID0g MDsKKworCWZvcl9lYWNoX3ByaW1lX251bWJlcl9mcm9tKHBhZ2VfbnVtLCAxLCBVTE9OR19NQVgg LSAxKSB7CisJCXN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICpibG9jazsKKwkJTElTVF9IRUFEKHRt cCk7CisKKwkJc2l6ZSA9IG1pbihwYWdlX251bSAqIG1tLm1pbl9zaXplLCByZW0pOworCisJCWVy ciA9IGk5MTVfYnVkZHlfYWxsb2NfcmFuZ2UoJm1tLCAmdG1wLCBvZmZzZXQsIHNpemUpOworCQlp ZiAoZXJyKSB7CisJCQlpZiAoZXJyID09IC1FTk9NRU0pIHsKKwkJCQlwcl9pbmZvKCJhbGxvY19y YW5nZSBoaXQgLUVOT01FTSB3aXRoIHNpemU9JWxseFxuIiwKKwkJCQkJc2l6ZSk7CisJCQl9IGVs c2UgeworCQkJCXByX2VycigiYWxsb2NfcmFuZ2Ugd2l0aCBvZmZzZXQ9JWxseCwgc2l6ZT0lbGx4 IGZhaWxlZCglZClcbiIsCisJCQkJICAgICAgIG9mZnNldCwgc2l6ZSwgZXJyKTsKKwkJCX0KKwor CQkJYnJlYWs7CisJCX0KKworCQlibG9jayA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgmdG1w LAorCQkJCQkJIHN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrLAorCQkJCQkJIGxpbmspOworCQlpZiAo IWJsb2NrKSB7CisJCQlwcl9lcnIoImFsbG9jX3JhbmdlIGhhcyBubyBibG9ja3NcbiIpOworCQkJ ZXJyID0gLUVJTlZBTDsKKwkJfQorCisJCWlmIChpOTE1X2J1ZGR5X2Jsb2NrX29mZnNldChibG9j aykgIT0gb2Zmc2V0KSB7CisJCQlwcl9lcnIoImFsbG9jX3JhbmdlIHN0YXJ0IG9mZnNldCBtaXNt YXRjaCwgZm91bmQ9JWxseCwgZXhwZWN0ZWQ9JWxseFxuIiwKKwkJCSAgICAgICBpOTE1X2J1ZGR5 X2Jsb2NrX29mZnNldChibG9jayksIG9mZnNldCk7CisJCQllcnIgPSAtRUlOVkFMOworCQl9CisK KwkJaWYgKCFlcnIpCisJCQllcnIgPSBpZ3RfY2hlY2tfYmxvY2tzKCZtbSwgJnRtcCwgc2l6ZSwg dHJ1ZSk7CisKKwkJbGlzdF9zcGxpY2VfdGFpbCgmdG1wLCAmYmxvY2tzKTsKKworCQlpZiAoZXJy KQorCQkJYnJlYWs7CisKKwkJb2Zmc2V0ICs9IHNpemU7CisKKwkJcmVtIC09IHNpemU7CisJCWlm ICghcmVtKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGVyciA9PSAtRU5PTUVNKQorCQllcnIgPSAw OworCisJaTkxNV9idWRkeV9mcmVlX2xpc3QoJm1tLCAmYmxvY2tzKTsKKworCWlmICghZXJyKSB7 CisJCWVyciA9IGlndF9jaGVja19tbSgmbW0pOworCQlpZiAoZXJyKQorCQkJcHJfZXJyKCJwb3N0 LW1tIGNoZWNrIGZhaWxlZFxuIik7CisJfQorCitlcnJfZmluaToKKwlpOTE1X2J1ZGR5X2Zpbmko Jm1tKTsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCBpOTE1X2J1ZGR5X21vY2tfc2VsZnRlc3Rz KHZvaWQpCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X3N1YnRlc3QgdGVzdHNbXSA9IHsK KwkJU1VCVEVTVChpZ3RfYnVkZHlfYWxsb2MpLAorCQlTVUJURVNUKGlndF9idWRkeV9hbGxvY19y YW5nZSksCisJfTsKKworCXJldHVybiBpOTE1X3N1YnRlc3RzKHRlc3RzLCBOVUxMKTsKK30KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X21vY2tfc2VsZnRl c3RzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9tb2NrX3NlbGZ0ZXN0 cy5oCmluZGV4IGI1NWRhNGQ5Y2NiYS4uYjg4MDg0ZmUzMjY5IDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9tb2NrX3NlbGZ0ZXN0cy5oCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X21vY2tfc2VsZnRlc3RzLmgKQEAgLTI1LDMg KzI1LDQgQEAgc2VsZnRlc3QoZXZpY3QsIGk5MTVfZ2VtX2V2aWN0X21vY2tfc2VsZnRlc3RzKQog c2VsZnRlc3QoZ3R0LCBpOTE1X2dlbV9ndHRfbW9ja19zZWxmdGVzdHMpCiBzZWxmdGVzdChodWdl cGFnZXMsIGk5MTVfZ2VtX2h1Z2VfcGFnZV9tb2NrX3NlbGZ0ZXN0cykKIHNlbGZ0ZXN0KGNvbnRl eHRzLCBpOTE1X2dlbV9jb250ZXh0X21vY2tfc2VsZnRlc3RzKQorc2VsZnRlc3QoYnVkZHksIGk5 MTVfYnVkZHlfbW9ja19zZWxmdGVzdHMpCi0tIAoyLjIwLjEKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeA==