From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matthew Auld Subject: [PATCH v3 01/37] drm/i915: buddy allocator Date: Fri, 9 Aug 2019 23:26:07 +0100 Message-ID: <20190809222643.23142-2-matthew.auld@intel.com> References: <20190809222643.23142-1-matthew.auld@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190809222643.23142-1-matthew.auld@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: intel-gfx@lists.freedesktop.org Cc: dri-devel@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org U2ltcGxlIGJ1ZGR5IGFsbG9jYXRvci4gV2Ugd2FudCB0byBhbGxvY2F0ZSBwcm9wZXJseSBhbGln bmVkCnBvd2VyLW9mLXR3byBibG9ja3MgdG8gcHJvbW90ZSB1c2FnZSBvZiBodWdlLXBhZ2VzIGZv ciB0aGUgR1RULCBzbyA2NEssCjJNIGFuZCBwb3NzaWJseSBldmVuIDFHLiBXaGlsZSB3ZSBkbyBz dXBwb3J0IGFsbG9jYXRpbmcgc3R1ZmYgYXQgYQpzcGVjaWZpYyBvZmZzZXQsIGl0IGlzIG1vcmUg aW50ZW5kZWQgZm9yIHByZWFsbG9jYXRpbmcgcG9ydGlvbnMgb2YgdGhlCmFkZHJlc3Mgc3BhY2Us IHNheSBmb3IgYW4gaW5pdGlhbCBmcmFtZWJ1ZmZlciwgZm9yIG90aGVyIHVzZXMgZHJtX21tIGlz CnByb2JhYmx5IGEgbXVjaCBiZXR0ZXIgZml0LiBBbnl3YXksIGhvcGVmdWxseSB0aGlzIGNhbiBh bGwgYmUgdGhyb3duCmF3YXkgaWYgd2UgZXZlbnR1YWxseSBtb3ZlIHRvIGhhdmluZyB0aGUgY29y ZSBNTSBtYW5hZ2UgZGV2aWNlIG1lbW9yeS4KClNpZ25lZC1vZmYtYnk6IE1hdHRoZXcgQXVsZCA8 bWF0dGhldy5hdWxkQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZSAgICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9idWRk eS5jICAgICAgICAgICAgIHwgNDMzICsrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2J1ZGR5LmggICAgICAgICAgICAgfCAxMjYgKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dsb2JhbHMuYyAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nbG9iYWxzLmggICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0 ZXN0cy9pOTE1X2J1ZGR5LmMgICB8IDcxOSArKysrKysrKysrKysrKysrKysKIC4uLi9kcm0vaTkx NS9zZWxmdGVzdHMvaTkxNV9tb2NrX3NlbGZ0ZXN0cy5oICB8ICAgMSArCiA3IGZpbGVzIGNoYW5n ZWQsIDEyODIgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfYnVkZHkuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfYnVkZHkuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1 L3NlbGZ0ZXN0cy9pOTE1X2J1ZGR5LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IGQzY2E0NmRj NTRhZS4uMzk2MmQ5NzI4ZGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtl ZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQpAQCAtMTI2LDYgKzEyNiw3 IEBAIGdlbS15ICs9IFwKIGk5MTUteSArPSBcCiAJICAkKGdlbS15KSBcCiAJICBpOTE1X2FjdGl2 ZS5vIFwKKwkgIGk5MTVfYnVkZHkubyBcCiAJICBpOTE1X2NtZF9wYXJzZXIubyBcCiAJICBpOTE1 X2dlbV9ldmljdC5vIFwKIAkgIGk5MTVfZ2VtX2ZlbmNlX3JlZy5vIFwKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfYnVkZHkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfYnVkZHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmUzMDM5 ZTEyNzNlZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfYnVk ZHkuYwpAQCAtMCwwICsxLDQzMyBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAor LyoKKyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCisgKi8KKworI2luY2x1 ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgImk5MTVfYnVkZHkuaCIKKworI2luY2x1ZGUg Imk5MTVfZ2VtLmgiCisjaW5jbHVkZSAiaTkxNV9nbG9iYWxzLmgiCisjaW5jbHVkZSAiaTkxNV91 dGlscy5oIgorCitzdGF0aWMgc3RydWN0IGk5MTVfZ2xvYmFsX2Jsb2NrIHsKKwlzdHJ1Y3QgaTkx NV9nbG9iYWwgYmFzZTsKKwlzdHJ1Y3Qga21lbV9jYWNoZSAqc2xhYl9ibG9ja3M7Cit9IGdsb2Jh bDsKKworc3RhdGljIHZvaWQgaTkxNV9nbG9iYWxfYnVkZHlfc2hyaW5rKHZvaWQpCit7CisJa21l bV9jYWNoZV9zaHJpbmsoZ2xvYmFsLnNsYWJfYmxvY2tzKTsKK30KKworc3RhdGljIHZvaWQgaTkx NV9nbG9iYWxfYnVkZHlfZXhpdCh2b2lkKQoreworCWttZW1fY2FjaGVfZGVzdHJveShnbG9iYWwu c2xhYl9ibG9ja3MpOworfQorCitzdGF0aWMgc3RydWN0IGk5MTVfZ2xvYmFsX2Jsb2NrIGdsb2Jh bCA9IHsgeworCS5zaHJpbmsgPSBpOTE1X2dsb2JhbF9idWRkeV9zaHJpbmssCisJLmV4aXQgPSBp OTE1X2dsb2JhbF9idWRkeV9leGl0LAorfSB9OworCitpbnQgX19pbml0IGk5MTVfZ2xvYmFsX2J1 ZGR5X2luaXQodm9pZCkKK3sKKwlnbG9iYWwuc2xhYl9ibG9ja3MgPSBLTUVNX0NBQ0hFKGk5MTVf YnVkZHlfYmxvY2ssIFNMQUJfSFdDQUNIRV9BTElHTik7CisJaWYgKCFnbG9iYWwuc2xhYl9ibG9j a3MpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qg aTkxNV9idWRkeV9ibG9jayAqaTkxNV9ibG9ja19hbGxvYyhzdHJ1Y3QgaTkxNV9idWRkeV9ibG9j ayAqcGFyZW50LAorCQkJCQkJIHVuc2lnbmVkIGludCBvcmRlciwKKwkJCQkJCSB1NjQgb2Zmc2V0 KQoreworCXN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICpibG9jazsKKworCWJsb2NrID0ga21lbV9j YWNoZV96YWxsb2MoZ2xvYmFsLnNsYWJfYmxvY2tzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJsb2Nr KQorCQlyZXR1cm4gTlVMTDsKKworCWJsb2NrLT5oZWFkZXIgPSBvZmZzZXQ7CisJYmxvY2stPmhl YWRlciB8PSBvcmRlcjsKKwlibG9jay0+cGFyZW50ID0gcGFyZW50OworCisJcmV0dXJuIGJsb2Nr OworfQorCitzdGF0aWMgdm9pZCBpOTE1X2Jsb2NrX2ZyZWUoc3RydWN0IGk5MTVfYnVkZHlfYmxv Y2sgKmJsb2NrKQoreworCWttZW1fY2FjaGVfZnJlZShnbG9iYWwuc2xhYl9ibG9ja3MsIGJsb2Nr KTsKK30KKworc3RhdGljIHZvaWQgbWFya19hbGxvY2F0ZWQoc3RydWN0IGk5MTVfYnVkZHlfYmxv Y2sgKmJsb2NrKQoreworCWJsb2NrLT5oZWFkZXIgJj0gfkk5MTVfQlVERFlfSEVBREVSX1NUQVRF OworCWJsb2NrLT5oZWFkZXIgfD0gSTkxNV9CVUREWV9BTExPQ0FURUQ7CisKKwlsaXN0X2RlbCgm YmxvY2stPmxpbmspOworfQorCitzdGF0aWMgdm9pZCBtYXJrX2ZyZWUoc3RydWN0IGk5MTVfYnVk ZHlfbW0gKm1tLAorCQkgICAgICBzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAqYmxvY2spCit7CisJ YmxvY2stPmhlYWRlciAmPSB+STkxNV9CVUREWV9IRUFERVJfU1RBVEU7CisJYmxvY2stPmhlYWRl ciB8PSBJOTE1X0JVRERZX0ZSRUU7CisKKwlsaXN0X2FkZCgmYmxvY2stPmxpbmssCisJCSAmbW0t PmZyZWVfbGlzdFtpOTE1X2J1ZGR5X2Jsb2NrX29yZGVyKGJsb2NrKV0pOworfQorCitzdGF0aWMg dm9pZCBtYXJrX3NwbGl0KHN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICpibG9jaykKK3sKKwlibG9j ay0+aGVhZGVyICY9IH5JOTE1X0JVRERZX0hFQURFUl9TVEFURTsKKwlibG9jay0+aGVhZGVyIHw9 IEk5MTVfQlVERFlfU1BMSVQ7CisKKwlsaXN0X2RlbCgmYmxvY2stPmxpbmspOworfQorCitpbnQg aTkxNV9idWRkeV9pbml0KHN0cnVjdCBpOTE1X2J1ZGR5X21tICptbSwgdTY0IHNpemUsIHU2NCBj aHVua19zaXplKQoreworCXVuc2lnbmVkIGludCBpOworCXU2NCBvZmZzZXQ7CisKKwlpZiAoc2l6 ZSA8IGNodW5rX3NpemUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNodW5rX3NpemUgPCBQ QUdFX1NJWkUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFpc19wb3dlcl9vZl8yKGNodW5r X3NpemUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNpemUgPSByb3VuZF9kb3duKHNpemUsIGNo dW5rX3NpemUpOworCisJbW0tPnNpemUgPSBzaXplOworCW1tLT5jaHVua19zaXplID0gY2h1bmtf c2l6ZTsKKwltbS0+bWF4X29yZGVyID0gaWxvZzIoc2l6ZSkgLSBpbG9nMihjaHVua19zaXplKTsK KworCUdFTV9CVUdfT04obW0tPm1heF9vcmRlciA+IEk5MTVfQlVERFlfTUFYX09SREVSKTsKKwor CW1tLT5mcmVlX2xpc3QgPSBrbWFsbG9jX2FycmF5KG1tLT5tYXhfb3JkZXIgKyAxLAorCQkJCSAg ICAgIHNpemVvZihzdHJ1Y3QgbGlzdF9oZWFkKSwKKwkJCQkgICAgICBHRlBfS0VSTkVMKTsKKwlp ZiAoIW1tLT5mcmVlX2xpc3QpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8 PSBtbS0+bWF4X29yZGVyOyArK2kpCisJCUlOSVRfTElTVF9IRUFEKCZtbS0+ZnJlZV9saXN0W2ld KTsKKworCW1tLT5uX3Jvb3RzID0gaHdlaWdodDY0KHNpemUpOworCisJbW0tPnJvb3RzID0ga21h bGxvY19hcnJheShtbS0+bl9yb290cywKKwkJCQkgIHNpemVvZihzdHJ1Y3QgaTkxNV9idWRkeV9i bG9jayAqKSwKKwkJCQkgIEdGUF9LRVJORUwpOworCWlmICghbW0tPnJvb3RzKQorCQlnb3RvIG91 dF9mcmVlX2xpc3Q7CisKKwlvZmZzZXQgPSAwOworCWkgPSAwOworCisJLyoKKwkgKiBTcGxpdCBp bnRvIHBvd2VyLW9mLXR3byBibG9ja3MsIGluIGNhc2Ugd2UgYXJlIGdpdmVuIGEgc2l6ZSB0aGF0 IGlzCisJICogbm90IGl0c2VsZiBhIHBvd2VyLW9mLXR3by4KKwkgKi8KKwlkbyB7CisJCXN0cnVj dCBpOTE1X2J1ZGR5X2Jsb2NrICpyb290OworCQl1bnNpZ25lZCBpbnQgb3JkZXI7CisJCXU2NCBy b290X3NpemU7CisKKwkJcm9vdF9zaXplID0gcm91bmRkb3duX3Bvd19vZl90d28oc2l6ZSk7CisJ CW9yZGVyID0gaWxvZzIocm9vdF9zaXplKSAtIGlsb2cyKGNodW5rX3NpemUpOworCisJCXJvb3Qg PSBpOTE1X2Jsb2NrX2FsbG9jKE5VTEwsIG9yZGVyLCBvZmZzZXQpOworCQlpZiAoIXJvb3QpCisJ CQlnb3RvIG91dF9mcmVlX3Jvb3RzOworCisJCW1hcmtfZnJlZShtbSwgcm9vdCk7CisKKwkJR0VN X0JVR19PTihpID4gbW0tPm1heF9vcmRlcik7CisJCUdFTV9CVUdfT04oaTkxNV9idWRkeV9ibG9j a19zaXplKG1tLCByb290KSA8IGNodW5rX3NpemUpOworCisJCW1tLT5yb290c1tpXSA9IHJvb3Q7 CisKKwkJb2Zmc2V0ICs9IHJvb3Rfc2l6ZTsKKwkJc2l6ZSAtPSByb290X3NpemU7CisJCWkrKzsK Kwl9IHdoaWxlIChzaXplKTsKKworCXJldHVybiAwOworCitvdXRfZnJlZV9yb290czoKKwl3aGls ZSAoaS0tKQorCQlpOTE1X2Jsb2NrX2ZyZWUobW0tPnJvb3RzW2ldKTsKKwlrZnJlZShtbS0+cm9v dHMpOworb3V0X2ZyZWVfbGlzdDoKKwlrZnJlZShtbS0+ZnJlZV9saXN0KTsKKwlyZXR1cm4gLUVO T01FTTsKK30KKwordm9pZCBpOTE1X2J1ZGR5X2Zpbmkoc3RydWN0IGk5MTVfYnVkZHlfbW0gKm1t KQoreworCWludCBlcnIgPSAwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG1tLT5uX3Jv b3RzOyArK2kpIHsKKwkJaWYgKCFpOTE1X2J1ZGR5X2Jsb2NrX2lzX2ZyZWUobW0tPnJvb3RzW2ld KSkgeworCQkJZXJyID0gLUVCVVNZOworCQkJY29udGludWU7CisJCX0KKworCQlpOTE1X2Jsb2Nr X2ZyZWUobW0tPnJvb3RzW2ldKTsKKwl9CisKKwlrZnJlZShtbS0+cm9vdHMpOworCWtmcmVlKG1t LT5mcmVlX2xpc3QpOworfQorCitzdGF0aWMgaW50IHNwbGl0X2Jsb2NrKHN0cnVjdCBpOTE1X2J1 ZGR5X21tICptbSwKKwkJICAgICAgIHN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICpibG9jaykKK3sK Kwl1bnNpZ25lZCBpbnQgYmxvY2tfb3JkZXIgPSBpOTE1X2J1ZGR5X2Jsb2NrX29yZGVyKGJsb2Nr KSAtIDE7CisJdTY0IG9mZnNldCA9IGk5MTVfYnVkZHlfYmxvY2tfb2Zmc2V0KGJsb2NrKTsKKwor CUdFTV9CVUdfT04oIWk5MTVfYnVkZHlfYmxvY2tfaXNfZnJlZShibG9jaykpOworCUdFTV9CVUdf T04oIWk5MTVfYnVkZHlfYmxvY2tfb3JkZXIoYmxvY2spKTsKKworCWJsb2NrLT5sZWZ0ID0gaTkx NV9ibG9ja19hbGxvYyhibG9jaywgYmxvY2tfb3JkZXIsIG9mZnNldCk7CisJaWYgKCFibG9jay0+ bGVmdCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlibG9jay0+cmlnaHQgPSBpOTE1X2Jsb2NrX2Fs bG9jKGJsb2NrLCBibG9ja19vcmRlciwKKwkJCQkJb2Zmc2V0ICsgKG1tLT5jaHVua19zaXplIDw8 IGJsb2NrX29yZGVyKSk7CisJaWYgKCFibG9jay0+cmlnaHQpIHsKKwkJaTkxNV9ibG9ja19mcmVl KGJsb2NrLT5sZWZ0KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWFya19mcmVlKG1tLCBi bG9jay0+bGVmdCk7CisJbWFya19mcmVlKG1tLCBibG9jay0+cmlnaHQpOworCisJbWFya19zcGxp dChibG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpOTE1X2J1ZGR5X2Js b2NrICoKK2dldF9idWRkeShzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAqYmxvY2spCit7CisJc3Ry dWN0IGk5MTVfYnVkZHlfYmxvY2sgKnBhcmVudDsKKworCXBhcmVudCA9IGJsb2NrLT5wYXJlbnQ7 CisJaWYgKCFwYXJlbnQpCisJCXJldHVybiBOVUxMOworCisJaWYgKHBhcmVudC0+bGVmdCA9PSBi bG9jaykKKwkJcmV0dXJuIHBhcmVudC0+cmlnaHQ7CisKKwlyZXR1cm4gcGFyZW50LT5sZWZ0Owor fQorCitzdGF0aWMgdm9pZCBfX2k5MTVfYnVkZHlfZnJlZShzdHJ1Y3QgaTkxNV9idWRkeV9tbSAq bW0sCisJCQkgICAgICBzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAqYmxvY2spCit7CisJc3RydWN0 IGk5MTVfYnVkZHlfYmxvY2sgKnBhcmVudDsKKworCXdoaWxlICgocGFyZW50ID0gYmxvY2stPnBh cmVudCkpIHsKKwkJc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKmJ1ZGR5OworCisJCWJ1ZGR5ID0g Z2V0X2J1ZGR5KGJsb2NrKTsKKworCQlpZiAoIWk5MTVfYnVkZHlfYmxvY2tfaXNfZnJlZShidWRk eSkpCisJCQlicmVhazsKKworCQlsaXN0X2RlbCgmYnVkZHktPmxpbmspOworCisJCWk5MTVfYmxv Y2tfZnJlZShibG9jayk7CisJCWk5MTVfYmxvY2tfZnJlZShidWRkeSk7CisKKwkJYmxvY2sgPSBw YXJlbnQ7CisJfQorCisJbWFya19mcmVlKG1tLCBibG9jayk7Cit9CisKK3ZvaWQgaTkxNV9idWRk eV9mcmVlKHN0cnVjdCBpOTE1X2J1ZGR5X21tICptbSwKKwkJICAgICBzdHJ1Y3QgaTkxNV9idWRk eV9ibG9jayAqYmxvY2spCit7CisJR0VNX0JVR19PTighaTkxNV9idWRkeV9ibG9ja19pc19hbGxv Y2F0ZWQoYmxvY2spKTsKKwlfX2k5MTVfYnVkZHlfZnJlZShtbSwgYmxvY2spOworfQorCit2b2lk IGk5MTVfYnVkZHlfZnJlZV9saXN0KHN0cnVjdCBpOTE1X2J1ZGR5X21tICptbSwgc3RydWN0IGxp c3RfaGVhZCAqb2JqZWN0cykKK3sKKwlzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAqYmxvY2ssICpv bjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShibG9jaywgb24sIG9iamVjdHMsIGxpbmsp CisJCWk5MTVfYnVkZHlfZnJlZShtbSwgYmxvY2spOworCUlOSVRfTElTVF9IRUFEKG9iamVjdHMp OworfQorCisvKgorICogQWxsb2NhdGUgcG93ZXItb2YtdHdvIGJsb2NrLiBUaGUgb3JkZXIgdmFs dWUgaGVyZSB0cmFuc2xhdGVzIHRvOgorICoKKyAqICAgMCA9IDJeMCAqIG1tLT5jaHVua19zaXpl CisgKiAgIDEgPSAyXjEgKiBtbS0+Y2h1bmtfc2l6ZQorICogICAyID0gMl4yICogbW0tPmNodW5r X3NpemUKKyAqICAgLi4uCisgKi8KK3N0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICoKK2k5MTVfYnVk ZHlfYWxsb2Moc3RydWN0IGk5MTVfYnVkZHlfbW0gKm1tLCB1bnNpZ25lZCBpbnQgb3JkZXIpCit7 CisJc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKmJsb2NrID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQg aTsKKwlpbnQgZXJyOworCisJZm9yIChpID0gb3JkZXI7IGkgPD0gbW0tPm1heF9vcmRlcjsgKytp KSB7CisJCWJsb2NrID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKCZtbS0+ZnJlZV9saXN0W2ld LAorCQkJCQkJIHN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrLAorCQkJCQkJIGxpbmspOworCQlpZiAo YmxvY2spCisJCQlicmVhazsKKwl9CisKKwlpZiAoIWJsb2NrKQorCQlyZXR1cm4gRVJSX1BUUigt RU5PU1BDKTsKKworCUdFTV9CVUdfT04oIWk5MTVfYnVkZHlfYmxvY2tfaXNfZnJlZShibG9jaykp OworCisJd2hpbGUgKGkgIT0gb3JkZXIpIHsKKwkJZXJyID0gc3BsaXRfYmxvY2sobW0sIGJsb2Nr KTsKKwkJaWYgKHVubGlrZWx5KGVycikpCisJCQlnb3RvIG91dF9mcmVlOworCisJCS8qIEdvIGxv dyAqLworCQlibG9jayA9IGJsb2NrLT5sZWZ0OworCQlpLS07CisJfQorCisJbWFya19hbGxvY2F0 ZWQoYmxvY2spOworCXJldHVybiBibG9jazsKKworb3V0X2ZyZWU6CisJX19pOTE1X2J1ZGR5X2Zy ZWUobW0sIGJsb2NrKTsKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQorCitzdGF0aWMgaW5saW5l IGJvb2wgb3ZlcmxhcHModTY0IHMxLCB1NjQgZTEsIHU2NCBzMiwgdTY0IGUyKQoreworCXJldHVy biBzMSA8PSBlMiAmJiBlMSA+PSBzMjsKK30KKworc3RhdGljIGlubGluZSBib29sIGNvbnRhaW5z KHU2NCBzMSwgdTY0IGUxLCB1NjQgczIsIHU2NCBlMikKK3sKKwlyZXR1cm4gczEgPD0gczIgJiYg ZTEgPj0gZTI7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSByYW5nZS4gTm90ZSB0aGF0IGl0J3Mgc2Fm ZSB0byBjaGFpbiB0b2dldGhlciBtdWx0aXBsZSBhbGxvY19yYW5nZXMKKyAqIHdpdGggdGhlIHNh bWUgYmxvY2tzIGxpc3QuCisgKgorICogSW50ZW5kZWQgZm9yIHByZS1hbGxvY2F0aW5nIHBvcnRp b25zIG9mIHRoZSBhZGRyZXNzIHNwYWNlLCBmb3IgZXhhbXBsZSB0bworICogcmVzZXJ2ZSBhIGJs b2NrIGZvciB0aGUgaW5pdGlhbCBmcmFtZWJ1ZmZlciBvciBzaW1pbGFyLCBoZW5jZSB0aGUgZXhw ZWN0YXRpb24KKyAqIGhlcmUgaXMgdGhhdCBpOTE1X2J1ZGR5X2FsbG9jKCkgaXMgc3RpbGwgdGhl IG1haW4gdmVoaWNsZSBmb3IKKyAqIGFsbG9jYXRpb25zLCBzbyBpZiB0aGF0J3Mgbm90IHRoZSBj YXNlIHRoZW4gdGhlIGRybV9tbSByYW5nZSBhbGxvY2F0b3IgaXMKKyAqIHByb2JhYmx5IGEgbXVj aCBiZXR0ZXIgZml0LCBhbmQgc28geW91IHNob3VsZCBwcm9iYWJseSBnbyB1c2UgdGhhdCBpbnN0 ZWFkLgorICovCitpbnQgaTkxNV9idWRkeV9hbGxvY19yYW5nZShzdHJ1Y3QgaTkxNV9idWRkeV9t bSAqbW0sCisJCQkgICBzdHJ1Y3QgbGlzdF9oZWFkICpibG9ja3MsCisJCQkgICB1NjQgc3RhcnQs IHU2NCBzaXplKQoreworCXN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICpibG9jazsKKwlzdHJ1Y3Qg aTkxNV9idWRkeV9ibG9jayAqYnVkZHk7CisJTElTVF9IRUFEKGFsbG9jYXRlZCk7CisJTElTVF9I RUFEKGRmcyk7CisJdTY0IGVuZDsKKwlpbnQgZXJyOworCWludCBpOworCisJaWYgKHNpemUgPCBt bS0+Y2h1bmtfc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIUlTX0FMSUdORUQoc3Rh cnQsIG1tLT5jaHVua19zaXplKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIXNpemUgfHwg IUlTX0FMSUdORUQoc2l6ZSwgbW0tPmNodW5rX3NpemUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwor CWlmIChyYW5nZV9vdmVyZmxvd3Moc3RhcnQsIHNpemUsIG1tLT5zaXplKSkKKwkJcmV0dXJuIC1F SU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgbW0tPm5fcm9vdHM7ICsraSkKKwkJbGlzdF9hZGRf dGFpbCgmbW0tPnJvb3RzW2ldLT50bXBfbGluaywgJmRmcyk7CisKKwllbmQgPSBzdGFydCArIHNp emUgLSAxOworCisJZG8geworCQl1NjQgYmxvY2tfc3RhcnQ7CisJCXU2NCBibG9ja19lbmQ7CisK KwkJYmxvY2sgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoJmRmcywKKwkJCQkJCSBzdHJ1Y3Qg aTkxNV9idWRkeV9ibG9jaywKKwkJCQkJCSB0bXBfbGluayk7CisJCWlmICghYmxvY2spCisJCQli cmVhazsKKworCQlsaXN0X2RlbCgmYmxvY2stPnRtcF9saW5rKTsKKworCQlibG9ja19zdGFydCA9 IGk5MTVfYnVkZHlfYmxvY2tfb2Zmc2V0KGJsb2NrKTsKKwkJYmxvY2tfZW5kID0gYmxvY2tfc3Rh cnQgKyBpOTE1X2J1ZGR5X2Jsb2NrX3NpemUobW0sIGJsb2NrKSAtIDE7CisKKwkJaWYgKCFvdmVy bGFwcyhzdGFydCwgZW5kLCBibG9ja19zdGFydCwgYmxvY2tfZW5kKSkKKwkJCWNvbnRpbnVlOwor CisJCWlmIChpOTE1X2J1ZGR5X2Jsb2NrX2lzX2FsbG9jYXRlZChibG9jaykpIHsKKwkJCWVyciA9 IC1FTk9TUEM7CisJCQlnb3RvIGVycl9mcmVlOworCQl9CisKKwkJaWYgKGNvbnRhaW5zKHN0YXJ0 LCBlbmQsIGJsb2NrX3N0YXJ0LCBibG9ja19lbmQpKSB7CisJCQlpZiAoIWk5MTVfYnVkZHlfYmxv Y2tfaXNfZnJlZShibG9jaykpIHsKKwkJCQllcnIgPSAtRU5PU1BDOworCQkJCWdvdG8gZXJyX2Zy ZWU7CisJCQl9CisKKwkJCW1hcmtfYWxsb2NhdGVkKGJsb2NrKTsKKwkJCWxpc3RfYWRkX3RhaWwo JmJsb2NrLT5saW5rLCAmYWxsb2NhdGVkKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFp OTE1X2J1ZGR5X2Jsb2NrX2lzX3NwbGl0KGJsb2NrKSkgeworCQkJZXJyID0gc3BsaXRfYmxvY2so bW0sIGJsb2NrKTsKKwkJCWlmICh1bmxpa2VseShlcnIpKQorCQkJCWdvdG8gZXJyX3VuZG87CisJ CX0KKworCQlsaXN0X2FkZCgmYmxvY2stPnJpZ2h0LT50bXBfbGluaywgJmRmcyk7CisJCWxpc3Rf YWRkKCZibG9jay0+bGVmdC0+dG1wX2xpbmssICZkZnMpOworCX0gd2hpbGUgKDEpOworCisJbGlz dF9zcGxpY2VfdGFpbCgmYWxsb2NhdGVkLCBibG9ja3MpOworCXJldHVybiAwOworCitlcnJfdW5k bzoKKwkvKgorCSAqIFdlIHJlYWxseSBkb24ndCB3YW50IHRvIGxlYXZlIGFyb3VuZCBhIGJ1bmNo IG9mIHNwbGl0IGJsb2Nrcywgc2luY2UKKwkgKiBiaWdnZXIgaXMgYmV0dGVyLCBzbyBtYWtlIHN1 cmUgd2UgbWVyZ2UgZXZlcnl0aGluZyBiYWNrIGJlZm9yZSB3ZQorCSAqIGZyZWUgdGhlIGFsbG9j YXRlZCBibG9ja3MuCisJICovCisJYnVkZHkgPSBnZXRfYnVkZHkoYmxvY2spOworCWlmIChidWRk eSAmJiAoaTkxNV9idWRkeV9ibG9ja19pc19mcmVlKGJsb2NrKSAmJgorCSAgICBpOTE1X2J1ZGR5 X2Jsb2NrX2lzX2ZyZWUoYnVkZHkpKSkKKwkJX19pOTE1X2J1ZGR5X2ZyZWUobW0sIGJsb2NrKTsK KworZXJyX2ZyZWU6CisJaTkxNV9idWRkeV9mcmVlX2xpc3QobW0sICZhbGxvY2F0ZWQpOworCXJl dHVybiBlcnI7Cit9CisKKyNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fSTkxNV9TRUxGVEVTVCkK KyNpbmNsdWRlICJzZWxmdGVzdHMvaTkxNV9idWRkeS5jIgorI2VuZGlmCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2J1ZGR5LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2J1ZGR5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi43NmMy MDk0MWFlZDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2J1 ZGR5LmgKQEAgLTAsMCArMSwxMjYgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQg Ki8KKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNp Zm5kZWYgX19JOTE1X0JVRERZX0hfXworI2RlZmluZSBfX0k5MTVfQlVERFlfSF9fCisKKyNpbmNs dWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKK3N0cnVjdCBp OTE1X2J1ZGR5X2Jsb2NrIHsKKyNkZWZpbmUgSTkxNV9CVUREWV9IRUFERVJfT0ZGU0VUIEdFTk1B U0tfVUxMKDYzLCAxMikKKyNkZWZpbmUgSTkxNV9CVUREWV9IRUFERVJfU1RBVEUgIEdFTk1BU0tf VUxMKDExLCAxMCkKKyNkZWZpbmUgICBJOTE1X0JVRERZX0FMTE9DQVRFRAkgICAoMSA8PCAxMCkK KyNkZWZpbmUgICBJOTE1X0JVRERZX0ZSRUUJICAgKDIgPDwgMTApCisjZGVmaW5lICAgSTkxNV9C VUREWV9TUExJVAkgICAoMyA8PCAxMCkKKyNkZWZpbmUgSTkxNV9CVUREWV9IRUFERVJfT1JERVIg IEdFTk1BU0tfVUxMKDksIDApCisJdTY0IGhlYWRlcjsKKworCXN0cnVjdCBpOTE1X2J1ZGR5X2Js b2NrICpsZWZ0OworCXN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICpyaWdodDsKKwlzdHJ1Y3QgaTkx NV9idWRkeV9ibG9jayAqcGFyZW50OworCisJLyoKKwkgKiBXaGlsZSB0aGUgYmxvY2sgaXMgYWxs b2NhdGVkIGJ5IHRoZSB1c2VyIHRocm91Z2ggaTkxNV9idWRkeV9hbGxvYyosCisJICogdGhlIHVz ZXIgaGFzIG93bmVyc2hpcCBvZiB0aGUgbGluaywgZm9yIGV4YW1wbGUgdG8gbWFpbnRhaW4gd2l0 aGluCisJICogYSBsaXN0LCBpZiBzbyBkZXNpcmVkLiBBcyBzb29uIGFzIHRoZSBibG9jayBpcyBm cmVlZCB3aXRoCisJICogaTkxNV9idWRkeV9mcmVlKiBvd25lcnNoaXAgaXMgZ2l2ZW4gYmFjayB0 byB0aGUgbW0uCisJICovCisJc3RydWN0IGxpc3RfaGVhZCBsaW5rOworCXN0cnVjdCBsaXN0X2hl YWQgdG1wX2xpbms7Cit9OworCisjZGVmaW5lIEk5MTVfQlVERFlfTUFYX09SREVSICBJOTE1X0JV RERZX0hFQURFUl9PUkRFUgorCisvKgorICogQmluYXJ5IEJ1ZGR5IFN5c3RlbS4KKyAqCisgKiBM b2NraW5nIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHRoZSB1c2VyLCBhIHNpbXBsZSBtdXRleCBhcm91 bmQKKyAqIGk5MTVfYnVkZHlfYWxsb2MqIGFuZCBpOTE1X2J1ZGR5X2ZyZWUqIHNob3VsZCBzdWZm aWNlLgorICovCitzdHJ1Y3QgaTkxNV9idWRkeV9tbSB7CisJLyogTWFpbnRhaW4gYSBmcmVlIGxp c3QgZm9yIGVhY2ggb3JkZXIuICovCisJc3RydWN0IGxpc3RfaGVhZCAqZnJlZV9saXN0OworCisJ LyoKKwkgKiBNYWludGFpbiBleHBsaWNpdCBiaW5hcnkgdHJlZShzKSB0byB0cmFjayB0aGUgYWxs b2NhdGlvbiBvZiB0aGUKKwkgKiBhZGRyZXNzIHNwYWNlLiBUaGlzIGdpdmVzIHVzIGEgc2ltcGxl IHdheSBvZiBmaW5kaW5nIGEgYnVkZHkgYmxvY2sKKwkgKiBhbmQgcGVyZm9ybWluZyB0aGUgcG90 ZW50aWFsbHkgcmVjdXJzaXZlIG1lcmdlIHN0ZXAgd2hlbiBmcmVlaW5nIGEKKwkgKiBibG9jay4g IE5vZGVzIGFyZSBlaXRoZXIgYWxsb2NhdGVkIG9yIGZyZWUsIGluIHdoaWNoIGNhc2UgdGhleSB3 aWxsCisJICogYWxzbyBleGlzdCBvbiB0aGUgcmVzcGVjdGl2ZSBmcmVlIGxpc3QuCisJICovCisJ c3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKipyb290czsKKworCS8qCisJICogQW55dGhpbmcgZnJv bSBoZXJlIGlzIHB1YmxpYywgYW5kIHJlbWFpbnMgc3RhdGljIGZvciB0aGUgbGlmZXRpbWUgb2YK KwkgKiB0aGUgbW0uIEV2ZXJ5dGhpbmcgYWJvdmUgaXMgY29uc2lkZXJlZCBkby1ub3QtdG91Y2gu CisJICovCisJdW5zaWduZWQgaW50IG5fcm9vdHM7CisJdW5zaWduZWQgaW50IG1heF9vcmRlcjsK KworCS8qIE11c3QgYmUgYXQgbGVhc3QgUEFHRV9TSVpFICovCisJdTY0IGNodW5rX3NpemU7CisJ dTY0IHNpemU7Cit9OworCitzdGF0aWMgaW5saW5lIHU2NAoraTkxNV9idWRkeV9ibG9ja19vZmZz ZXQoc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKmJsb2NrKQoreworCXJldHVybiBibG9jay0+aGVh ZGVyICYgSTkxNV9CVUREWV9IRUFERVJfT0ZGU0VUOworfQorCitzdGF0aWMgaW5saW5lIHVuc2ln bmVkIGludAoraTkxNV9idWRkeV9ibG9ja19vcmRlcihzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAq YmxvY2spCit7CisJcmV0dXJuIGJsb2NrLT5oZWFkZXIgJiBJOTE1X0JVRERZX0hFQURFUl9PUkRF UjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK2k5MTVfYnVkZHlfYmxvY2tfc3Rh dGUoc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKmJsb2NrKQoreworCXJldHVybiBibG9jay0+aGVh ZGVyICYgSTkxNV9CVUREWV9IRUFERVJfU1RBVEU7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAor aTkxNV9idWRkeV9ibG9ja19pc19hbGxvY2F0ZWQoc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKmJs b2NrKQoreworCXJldHVybiBpOTE1X2J1ZGR5X2Jsb2NrX3N0YXRlKGJsb2NrKSA9PSBJOTE1X0JV RERZX0FMTE9DQVRFRDsKK30KKworc3RhdGljIGlubGluZSBib29sCitpOTE1X2J1ZGR5X2Jsb2Nr X2lzX2ZyZWUoc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKmJsb2NrKQoreworCXJldHVybiBpOTE1 X2J1ZGR5X2Jsb2NrX3N0YXRlKGJsb2NrKSA9PSBJOTE1X0JVRERZX0ZSRUU7Cit9CisKK3N0YXRp YyBpbmxpbmUgYm9vbAoraTkxNV9idWRkeV9ibG9ja19pc19zcGxpdChzdHJ1Y3QgaTkxNV9idWRk eV9ibG9jayAqYmxvY2spCit7CisJcmV0dXJuIGk5MTVfYnVkZHlfYmxvY2tfc3RhdGUoYmxvY2sp ID09IEk5MTVfQlVERFlfU1BMSVQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0CitpOTE1X2J1ZGR5 X2Jsb2NrX3NpemUoc3RydWN0IGk5MTVfYnVkZHlfbW0gKm1tLAorCQkgICAgICBzdHJ1Y3QgaTkx NV9idWRkeV9ibG9jayAqYmxvY2spCit7CisJcmV0dXJuIG1tLT5jaHVua19zaXplIDw8IGk5MTVf YnVkZHlfYmxvY2tfb3JkZXIoYmxvY2spOworfQorCitpbnQgaTkxNV9idWRkeV9pbml0KHN0cnVj dCBpOTE1X2J1ZGR5X21tICptbSwgdTY0IHNpemUsIHU2NCBjaHVua19zaXplKTsKKwordm9pZCBp OTE1X2J1ZGR5X2Zpbmkoc3RydWN0IGk5MTVfYnVkZHlfbW0gKm1tKTsKKworc3RydWN0IGk5MTVf YnVkZHlfYmxvY2sgKgoraTkxNV9idWRkeV9hbGxvYyhzdHJ1Y3QgaTkxNV9idWRkeV9tbSAqbW0s IHVuc2lnbmVkIGludCBvcmRlcik7CisKK2ludCBpOTE1X2J1ZGR5X2FsbG9jX3JhbmdlKHN0cnVj dCBpOTE1X2J1ZGR5X21tICptbSwKKwkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKmJsb2NrcywKKwkJ CSAgIHU2NCBzdGFydCwgdTY0IHNpemUpOworCit2b2lkIGk5MTVfYnVkZHlfZnJlZShzdHJ1Y3Qg aTkxNV9idWRkeV9tbSAqbW0sIHN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICpibG9jayk7CisKK3Zv aWQgaTkxNV9idWRkeV9mcmVlX2xpc3Qoc3RydWN0IGk5MTVfYnVkZHlfbW0gKm1tLCBzdHJ1Y3Qg bGlzdF9oZWFkICpvYmplY3RzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dsb2JhbHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2xvYmFs cy5jCmluZGV4IDJkNWZjYmE5ODg0MS4uYmUxMjdjZDI4OTMxIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dsb2JhbHMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dsb2JhbHMuYwpAQCAtNjIsNiArNjIsNyBAQCBzdGF0aWMgdm9pZCBfX2k5MTVfZ2xvYmFs c19jbGVhbnVwKHZvaWQpCiAKIHN0YXRpYyBfX2luaXRjb25zdCBpbnQgKCogY29uc3QgaW5pdGZu W10pKHZvaWQpID0gewogCWk5MTVfZ2xvYmFsX2FjdGl2ZV9pbml0LAorCWk5MTVfZ2xvYmFsX2J1 ZGR5X2luaXQsCiAJaTkxNV9nbG9iYWxfY29udGV4dF9pbml0LAogCWk5MTVfZ2xvYmFsX2dlbV9j b250ZXh0X2luaXQsCiAJaTkxNV9nbG9iYWxfb2JqZWN0c19pbml0LApkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nbG9iYWxzLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dsb2JhbHMuaAppbmRleCAyZDE5OWY0MTFhNGEuLmIyZjVjZDliOWIxYSAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nbG9iYWxzLmgKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nbG9iYWxzLmgKQEAgLTI3LDYgKzI3LDcgQEAgdm9pZCBpOTE1X2dsb2Jh bHNfZXhpdCh2b2lkKTsKIAogLyogY29uc3RydWN0b3JzICovCiBpbnQgaTkxNV9nbG9iYWxfYWN0 aXZlX2luaXQodm9pZCk7CitpbnQgaTkxNV9nbG9iYWxfYnVkZHlfaW5pdCh2b2lkKTsKIGludCBp OTE1X2dsb2JhbF9jb250ZXh0X2luaXQodm9pZCk7CiBpbnQgaTkxNV9nbG9iYWxfZ2VtX2NvbnRl eHRfaW5pdCh2b2lkKTsKIGludCBpOTE1X2dsb2JhbF9vYmplY3RzX2luaXQodm9pZCk7CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9idWRkeS5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfYnVkZHkuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmI4MzlkZDk5ZGQxZgotLS0gL2Rldi9udWxsCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2J1ZGR5LmMKQEAgLTAsMCArMSw3 MTkgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKKy8qCisgKiBDb3B5cmlnaHQg wqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wcmltZV9u dW1iZXJzLmg+CisKKyNpbmNsdWRlICIuLi9pOTE1X3NlbGZ0ZXN0LmgiCisjaW5jbHVkZSAiaTkx NV9yYW5kb20uaCIKKworI2RlZmluZSBTWl84RyAoMVVMTCA8PCAzMykKKworc3RhdGljIHZvaWQg X19pZ3RfZHVtcF9ibG9jayhzdHJ1Y3QgaTkxNV9idWRkeV9tbSAqbW0sCisJCQkgICAgIHN0cnVj dCBpOTE1X2J1ZGR5X2Jsb2NrICpibG9jaywKKwkJCSAgICAgYm9vbCBidWRkeSkKK3sKKwlwcl9l cnIoImJsb2NrIGluZm86IGhlYWRlcj0lbGx4LCBzdGF0ZT0ldSwgb3JkZXI9JWQsIG9mZnNldD0l bGx4IHNpemU9JWxseCByb290PSVzIGJ1ZGR5PSVzXG4iLAorCSAgICAgICBibG9jay0+aGVhZGVy LAorCSAgICAgICBpOTE1X2J1ZGR5X2Jsb2NrX3N0YXRlKGJsb2NrKSwKKwkgICAgICAgaTkxNV9i dWRkeV9ibG9ja19vcmRlcihibG9jayksCisJICAgICAgIGk5MTVfYnVkZHlfYmxvY2tfb2Zmc2V0 KGJsb2NrKSwKKwkgICAgICAgaTkxNV9idWRkeV9ibG9ja19zaXplKG1tLCBibG9jayksCisJICAg ICAgIHllc25vKCFibG9jay0+cGFyZW50KSwKKwkgICAgICAgeWVzbm8oYnVkZHkpKTsKK30KKwor c3RhdGljIHZvaWQgaWd0X2R1bXBfYmxvY2soc3RydWN0IGk5MTVfYnVkZHlfbW0gKm1tLAorCQkJ ICAgc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKmJsb2NrKQoreworCXN0cnVjdCBpOTE1X2J1ZGR5 X2Jsb2NrICpidWRkeTsKKworCV9faWd0X2R1bXBfYmxvY2sobW0sIGJsb2NrLCBmYWxzZSk7CisK KwlidWRkeSA9IGdldF9idWRkeShibG9jayk7CisJaWYgKGJ1ZGR5KQorCQlfX2lndF9kdW1wX2Js b2NrKG1tLCBidWRkeSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyBpbnQgaWd0X2NoZWNrX2Jsb2NrKHN0 cnVjdCBpOTE1X2J1ZGR5X21tICptbSwKKwkJCSAgIHN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICpi bG9jaykKK3sKKwlzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAqYnVkZHk7CisJdW5zaWduZWQgaW50 IGJsb2NrX3N0YXRlOworCXU2NCBibG9ja19zaXplOworCXU2NCBvZmZzZXQ7CisJaW50IGVyciA9 IDA7CisKKwlibG9ja19zdGF0ZSA9IGk5MTVfYnVkZHlfYmxvY2tfc3RhdGUoYmxvY2spOworCisJ aWYgKGJsb2NrX3N0YXRlICE9IEk5MTVfQlVERFlfQUxMT0NBVEVEICYmCisJICAgIGJsb2NrX3N0 YXRlICE9IEk5MTVfQlVERFlfRlJFRSAmJgorCSAgICBibG9ja19zdGF0ZSAhPSBJOTE1X0JVRERZ X1NQTElUKSB7CisJCXByX2VycigiYmxvY2sgc3RhdGUgbWlzbWF0Y2hcbiIpOworCQllcnIgPSAt RUlOVkFMOworCX0KKworCWJsb2NrX3NpemUgPSBpOTE1X2J1ZGR5X2Jsb2NrX3NpemUobW0sIGJs b2NrKTsKKwlvZmZzZXQgPSBpOTE1X2J1ZGR5X2Jsb2NrX29mZnNldChibG9jayk7CisKKwlpZiAo YmxvY2tfc2l6ZSA8IG1tLT5jaHVua19zaXplKSB7CisJCXByX2VycigiYmxvY2sgc2l6ZSBzbWFs bGVyIHRoYW4gbWluIHNpemVcbiIpOworCQllcnIgPSAtRUlOVkFMOworCX0KKworCWlmICghaXNf cG93ZXJfb2ZfMihibG9ja19zaXplKSkgeworCQlwcl9lcnIoImJsb2NrIHNpemUgbm90IHBvd2Vy IG9mIHR3b1xuIik7CisJCWVyciA9IC1FSU5WQUw7CisJfQorCisJaWYgKCFJU19BTElHTkVEKGJs b2NrX3NpemUsIG1tLT5jaHVua19zaXplKSkgeworCQlwcl9lcnIoImJsb2NrIHNpemUgbm90IGFs aWduZWQgdG8gbWluIHNpemVcbiIpOworCQllcnIgPSAtRUlOVkFMOworCX0KKworCWlmICghSVNf QUxJR05FRChvZmZzZXQsIG1tLT5jaHVua19zaXplKSkgeworCQlwcl9lcnIoImJsb2NrIG9mZnNl dCBub3QgYWxpZ25lZCB0byBtaW4gc2l6ZVxuIik7CisJCWVyciA9IC1FSU5WQUw7CisJfQorCisJ aWYgKCFJU19BTElHTkVEKG9mZnNldCwgYmxvY2tfc2l6ZSkpIHsKKwkJcHJfZXJyKCJibG9jayBv ZmZzZXQgbm90IGFsaWduZWQgdG8gYmxvY2sgc2l6ZVxuIik7CisJCWVyciA9IC1FSU5WQUw7CisJ fQorCisJYnVkZHkgPSBnZXRfYnVkZHkoYmxvY2spOworCisJaWYgKCFidWRkeSAmJiBibG9jay0+ cGFyZW50KSB7CisJCXByX2VycigiYnVkZHkgaGFzIGdvbmUgZmlzaGluZ1xuIik7CisJCWVyciA9 IC1FSU5WQUw7CisJfQorCisJaWYgKGJ1ZGR5KSB7CisJCWlmIChpOTE1X2J1ZGR5X2Jsb2NrX29m ZnNldChidWRkeSkgIT0gKG9mZnNldCBeIGJsb2NrX3NpemUpKSB7CisJCQlwcl9lcnIoImJ1ZGR5 IGhhcyB3cm9uZyBvZmZzZXRcbiIpOworCQkJZXJyID0gLUVJTlZBTDsKKwkJfQorCisJCWlmIChp OTE1X2J1ZGR5X2Jsb2NrX3NpemUobW0sIGJ1ZGR5KSAhPSBibG9ja19zaXplKSB7CisJCQlwcl9l cnIoImJ1ZGR5IHNpemUgbWlzbWF0Y2hcbiIpOworCQkJZXJyID0gLUVJTlZBTDsKKwkJfQorCisJ CWlmIChpOTE1X2J1ZGR5X2Jsb2NrX3N0YXRlKGJ1ZGR5KSA9PSBibG9ja19zdGF0ZSAmJgorCQkg ICAgYmxvY2tfc3RhdGUgPT0gSTkxNV9CVUREWV9GUkVFKSB7CisJCQlwcl9lcnIoImJsb2NrIGFu ZCBpdHMgYnVkZHkgYXJlIGZyZWVcbiIpOworCQkJZXJyID0gLUVJTlZBTDsKKwkJfQorCX0KKwor CXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgaWd0X2NoZWNrX2Jsb2NrcyhzdHJ1Y3QgaTkx NV9idWRkeV9tbSAqbW0sCisJCQkgICAgc3RydWN0IGxpc3RfaGVhZCAqYmxvY2tzLAorCQkJICAg IHU2NCBleHBlY3RlZF9zaXplLAorCQkJICAgIGJvb2wgaXNfY29udGlndW91cykKK3sKKwlzdHJ1 Y3QgaTkxNV9idWRkeV9ibG9jayAqYmxvY2s7CisJc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKnBy ZXY7CisJdTY0IHRvdGFsOworCWludCBlcnIgPSAwOworCisJYmxvY2sgPSBOVUxMOworCXByZXYg PSBOVUxMOworCXRvdGFsID0gMDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoYmxvY2ssIGJsb2Nr cywgbGluaykgeworCQllcnIgPSBpZ3RfY2hlY2tfYmxvY2sobW0sIGJsb2NrKTsKKworCQlpZiAo IWk5MTVfYnVkZHlfYmxvY2tfaXNfYWxsb2NhdGVkKGJsb2NrKSkgeworCQkJcHJfZXJyKCJibG9j ayBub3QgYWxsb2NhdGVkXG4iKSwKKwkJCWVyciA9IC1FSU5WQUw7CisJCX0KKworCQlpZiAoaXNf Y29udGlndW91cyAmJiBwcmV2KSB7CisJCQl1NjQgcHJldl9ibG9ja19zaXplOworCQkJdTY0IHBy ZXZfb2Zmc2V0OworCQkJdTY0IG9mZnNldDsKKworCQkJcHJldl9vZmZzZXQgPSBpOTE1X2J1ZGR5 X2Jsb2NrX29mZnNldChwcmV2KTsKKwkJCXByZXZfYmxvY2tfc2l6ZSA9IGk5MTVfYnVkZHlfYmxv Y2tfc2l6ZShtbSwgcHJldik7CisJCQlvZmZzZXQgPSBpOTE1X2J1ZGR5X2Jsb2NrX29mZnNldChi bG9jayk7CisKKwkJCWlmIChvZmZzZXQgIT0gKHByZXZfb2Zmc2V0ICsgcHJldl9ibG9ja19zaXpl KSkgeworCQkJCXByX2VycigiYmxvY2sgb2Zmc2V0IG1pc21hdGNoXG4iKTsKKwkJCQllcnIgPSAt RUlOVkFMOworCQkJfQorCQl9CisKKwkJaWYgKGVycikKKwkJCWJyZWFrOworCisJCXRvdGFsICs9 IGk5MTVfYnVkZHlfYmxvY2tfc2l6ZShtbSwgYmxvY2spOworCQlwcmV2ID0gYmxvY2s7CisJfQor CisJaWYgKCFlcnIpIHsKKwkJaWYgKHRvdGFsICE9IGV4cGVjdGVkX3NpemUpIHsKKwkJCXByX2Vy cigic2l6ZSBtaXNtYXRjaCwgZXhwZWN0ZWQ9JWxseCwgZm91bmQ9JWxseFxuIiwKKwkJCSAgICAg ICBleHBlY3RlZF9zaXplLCB0b3RhbCk7CisJCQllcnIgPSAtRUlOVkFMOworCQl9CisJCXJldHVy biBlcnI7CisJfQorCisJaWYgKHByZXYpIHsKKwkJcHJfZXJyKCJwcmV2IGJsb2NrLCBkdW1wOlxu Iik7CisJCWlndF9kdW1wX2Jsb2NrKG1tLCBwcmV2KTsKKwl9CisKKwlpZiAoYmxvY2spIHsKKwkJ cHJfZXJyKCJiYWQgYmxvY2ssIGR1bXA6XG4iKTsKKwkJaWd0X2R1bXBfYmxvY2sobW0sIGJsb2Nr KTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGlndF9jaGVja19tbShzdHJ1 Y3QgaTkxNV9idWRkeV9tbSAqbW0pCit7CisJc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKnJvb3Q7 CisJc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKnByZXY7CisJdW5zaWduZWQgaW50IGk7CisJdTY0 IHRvdGFsOworCWludCBlcnIgPSAwOworCisJaWYgKCFtbS0+bl9yb290cykgeworCQlwcl9lcnIo Im5fcm9vdHMgaXMgemVyb1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChtbS0+ bl9yb290cyAhPSBod2VpZ2h0NjQobW0tPnNpemUpKSB7CisJCXByX2Vycigibl9yb290cyBtaXNt YXRjaCwgbl9yb290cz0ldSwgZXhwZWN0ZWQ9JWx1XG4iLAorCQkgICAgICAgbW0tPm5fcm9vdHMs IGh3ZWlnaHQ2NChtbS0+c2l6ZSkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyb290ID0g TlVMTDsKKwlwcmV2ID0gTlVMTDsKKwl0b3RhbCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbW0t Pm5fcm9vdHM7ICsraSkgeworCQlzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAqYmxvY2s7CisJCXVu c2lnbmVkIGludCBvcmRlcjsKKworCQlyb290ID0gbW0tPnJvb3RzW2ldOworCQlpZiAoIXJvb3Qp IHsKKwkJCXByX2Vycigicm9vdCgldSkgaXMgTlVMTFxuIiwgaSk7CisJCQllcnIgPSAtRUlOVkFM OworCQkJYnJlYWs7CisJCX0KKworCQllcnIgPSBpZ3RfY2hlY2tfYmxvY2sobW0sIHJvb3QpOwor CisJCWlmICghaTkxNV9idWRkeV9ibG9ja19pc19mcmVlKHJvb3QpKSB7CisJCQlwcl9lcnIoInJv b3Qgbm90IGZyZWVcbiIpOworCQkJZXJyID0gLUVJTlZBTDsKKwkJfQorCisJCW9yZGVyID0gaTkx NV9idWRkeV9ibG9ja19vcmRlcihyb290KTsKKworCQlpZiAoIWkpIHsKKwkJCWlmIChvcmRlciAh PSBtbS0+bWF4X29yZGVyKSB7CisJCQkJcHJfZXJyKCJtYXggb3JkZXIgcm9vdCBtaXNzaW5nXG4i KTsKKwkJCQllcnIgPSAtRUlOVkFMOworCQkJfQorCQl9CisKKwkJaWYgKHByZXYpIHsKKwkJCXU2 NCBwcmV2X2Jsb2NrX3NpemU7CisJCQl1NjQgcHJldl9vZmZzZXQ7CisJCQl1NjQgb2Zmc2V0Owor CisJCQlwcmV2X29mZnNldCA9IGk5MTVfYnVkZHlfYmxvY2tfb2Zmc2V0KHByZXYpOworCQkJcHJl dl9ibG9ja19zaXplID0gaTkxNV9idWRkeV9ibG9ja19zaXplKG1tLCBwcmV2KTsKKwkJCW9mZnNl dCA9IGk5MTVfYnVkZHlfYmxvY2tfb2Zmc2V0KHJvb3QpOworCisJCQlpZiAob2Zmc2V0ICE9IChw cmV2X29mZnNldCArIHByZXZfYmxvY2tfc2l6ZSkpIHsKKwkJCQlwcl9lcnIoInJvb3Qgb2Zmc2V0 IG1pc21hdGNoXG4iKTsKKwkJCQllcnIgPSAtRUlOVkFMOworCQkJfQorCQl9CisKKwkJYmxvY2sg PSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoJm1tLT5mcmVlX2xpc3Rbb3JkZXJdLAorCQkJCQkJ IHN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrLAorCQkJCQkJIGxpbmspOworCQlpZiAoYmxvY2sgIT0g cm9vdCkgeworCQkJcHJfZXJyKCJyb290IG1pc21hdGNoIGF0IG9yZGVyPSV1XG4iLCBvcmRlcik7 CisJCQllcnIgPSAtRUlOVkFMOworCQl9CisKKwkJaWYgKGVycikKKwkJCWJyZWFrOworCisJCXBy ZXYgPSByb290OworCQl0b3RhbCArPSBpOTE1X2J1ZGR5X2Jsb2NrX3NpemUobW0sIHJvb3QpOwor CX0KKworCWlmICghZXJyKSB7CisJCWlmICh0b3RhbCAhPSBtbS0+c2l6ZSkgeworCQkJcHJfZXJy KCJleHBlY3RlZCBtbSBzaXplPSVsbHgsIGZvdW5kPSVsbHhcbiIsIG1tLT5zaXplLAorCQkJICAg ICAgIHRvdGFsKTsKKwkJCWVyciA9IC1FSU5WQUw7CisJCX0KKwkJcmV0dXJuIGVycjsKKwl9CisK KwlpZiAocHJldikgeworCQlwcl9lcnIoInByZXYgcm9vdCgldSksIGR1bXA6XG4iLCBpIC0gMSk7 CisJCWlndF9kdW1wX2Jsb2NrKG1tLCBwcmV2KTsKKwl9CisKKwlpZiAocm9vdCkgeworCQlwcl9l cnIoImJhZCByb290KCV1KSwgZHVtcDpcbiIsIGkpOworCQlpZ3RfZHVtcF9ibG9jayhtbSwgcm9v dCk7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgaWd0X21tX2NvbmZpZyh1 NjQgKnNpemUsIHU2NCAqY2h1bmtfc2l6ZSkKK3sKKwlJOTE1X1JORF9TVEFURShwcm5nKTsKKwl1 NjQgcywgbXM7CisKKwkvKiBOb3RoaW5nIGZhbmN5LCBqdXN0IHRyeSB0byBnZXQgYW4gaW50ZXJl c3RpbmcgYml0IHBhdHRlcm4gKi8KKworCXByYW5kb21fc2VlZF9zdGF0ZSgmcHJuZywgaTkxNV9z ZWxmdGVzdC5yYW5kb21fc2VlZCk7CisKKwlzID0gaTkxNV9wcmFuZG9tX3U2NF9zdGF0ZSgmcHJu ZykgJiAoU1pfOEcgLSAxKTsKKwltcyA9IEJJVF9VTEwoMTIgKyAocHJhbmRvbV91MzJfc3RhdGUo JnBybmcpICUgaWxvZzIocyA+PiAxMikpKTsKKwlzID0gbWF4KHMgJiAtbXMsIG1zKTsKKworCSpj aHVua19zaXplID0gbXM7CisJKnNpemUgPSBzOworfQorCitzdGF0aWMgaW50IGlndF9idWRkeV9h bGxvY19zbW9rZSh2b2lkICphcmcpCit7CisJc3RydWN0IGk5MTVfYnVkZHlfbW0gbW07CisJaW50 IG1heF9vcmRlcjsKKwl1NjQgY2h1bmtfc2l6ZTsKKwl1NjQgbW1fc2l6ZTsKKwlpbnQgZXJyOwor CisJaWd0X21tX2NvbmZpZygmbW1fc2l6ZSwgJmNodW5rX3NpemUpOworCisJcHJfaW5mbygiYnVk ZHlfaW5pdCB3aXRoIHNpemU9JWxseCwgY2h1bmtfc2l6ZT0lbGx4XG4iLCBtbV9zaXplLCBjaHVu a19zaXplKTsKKworCWVyciA9IGk5MTVfYnVkZHlfaW5pdCgmbW0sIG1tX3NpemUsIGNodW5rX3Np emUpOworCWlmIChlcnIpIHsKKwkJcHJfZXJyKCJidWRkeV9pbml0IGZhaWxlZCglZClcbiIsIGVy cik7CisJCXJldHVybiBlcnI7CisJfQorCisJZm9yIChtYXhfb3JkZXIgPSBtbS5tYXhfb3JkZXI7 IG1heF9vcmRlciA+PSAwOyBtYXhfb3JkZXItLSkgeworCQlzdHJ1Y3QgaTkxNV9idWRkeV9ibG9j ayAqYmxvY2s7CisJCWludCBvcmRlcjsKKwkJTElTVF9IRUFEKGJsb2Nrcyk7CisJCXU2NCB0b3Rh bDsKKworCQllcnIgPSBpZ3RfY2hlY2tfbW0oJm1tKTsKKwkJaWYgKGVycikgeworCQkJcHJfZXJy KCJwcmUtbW0gY2hlY2sgZmFpbGVkLCBhYm9ydFxuIik7CisJCQlicmVhazsKKwkJfQorCisJCXBy X2luZm8oImZpbGxpbmcgZnJvbSBtYXhfb3JkZXI9JXVcbiIsIG1heF9vcmRlcik7CisKKwkJb3Jk ZXIgPSBtYXhfb3JkZXI7CisJCXRvdGFsID0gMDsKKworCQlkbyB7CityZXRyeToKKwkJCWJsb2Nr ID0gaTkxNV9idWRkeV9hbGxvYygmbW0sIG9yZGVyKTsKKwkJCWlmIChJU19FUlIoYmxvY2spKSB7 CisJCQkJZXJyID0gUFRSX0VSUihibG9jayk7CisJCQkJaWYgKGVyciA9PSAtRU5PTUVNKSB7CisJ CQkJCXByX2luZm8oImJ1ZGR5X2FsbG9jIGhpdCAtRU5PTUVNIHdpdGggb3JkZXI9JWRcbiIsCisJ CQkJCQlvcmRlcik7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKG9yZGVyLS0pIHsKKwkJCQkJCWVy ciA9IDA7CisJCQkJCQlnb3RvIHJldHJ5OworCQkJCQl9CisKKwkJCQkJcHJfZXJyKCJidWRkeV9h bGxvYyB3aXRoIG9yZGVyPSVkIGZhaWxlZCglZClcbiIsCisJCQkJCSAgICAgICBvcmRlciwgZXJy KTsKKwkJCQl9CisKKwkJCQlicmVhazsKKwkJCX0KKworCQkJbGlzdF9hZGRfdGFpbCgmYmxvY2st PmxpbmssICZibG9ja3MpOworCisJCQlpZiAoaTkxNV9idWRkeV9ibG9ja19vcmRlcihibG9jaykg IT0gb3JkZXIpIHsKKwkJCQlwcl9lcnIoImJ1ZGR5X2FsbG9jIG9yZGVyIG1pc21hdGNoXG4iKTsK KwkJCQllcnIgPSAtRUlOVkFMOworCQkJCWJyZWFrOworCQkJfQorCisJCQl0b3RhbCArPSBpOTE1 X2J1ZGR5X2Jsb2NrX3NpemUoJm1tLCBibG9jayk7CisJCX0gd2hpbGUgKHRvdGFsIDwgbW0uc2l6 ZSk7CisKKwkJaWYgKCFlcnIpCisJCQllcnIgPSBpZ3RfY2hlY2tfYmxvY2tzKCZtbSwgJmJsb2Nr cywgdG90YWwsIGZhbHNlKTsKKworCQlpOTE1X2J1ZGR5X2ZyZWVfbGlzdCgmbW0sICZibG9ja3Mp OworCisJCWlmICghZXJyKSB7CisJCQllcnIgPSBpZ3RfY2hlY2tfbW0oJm1tKTsKKwkJCWlmIChl cnIpCisJCQkJcHJfZXJyKCJwb3N0LW1tIGNoZWNrIGZhaWxlZFxuIik7CisJCX0KKworCQlpZiAo ZXJyKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGVyciA9PSAtRU5PTUVNKQorCQllcnIgPSAwOwor CisJaTkxNV9idWRkeV9maW5pKCZtbSk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50 IGlndF9idWRkeV9hbGxvY19wZXNzaW1pc3RpYyh2b2lkICphcmcpCit7CisJY29uc3QgdW5zaWdu ZWQgaW50IG1heF9vcmRlciA9IDE2OworCXN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICpibG9jaywg KmJuOworCXN0cnVjdCBpOTE1X2J1ZGR5X21tIG1tOworCXVuc2lnbmVkIGludCBvcmRlcjsKKwlM SVNUX0hFQUQoYmxvY2tzKTsKKwlpbnQgZXJyOworCisJLyoKKwkgKiBDcmVhdGUgYSBwb3Qtc2l6 ZWQgbW0sIHRoZW4gYWxsb2NhdGUgb25lIG9mIGVhY2ggcG9zc2libGUKKwkgKiBvcmRlciB3aXRo aW4uIFRoaXMgc2hvdWxkIGxlYXZlIHRoZSBtbSB3aXRoIGV4YWN0bHkgb25lCisJICogcGFnZSBs ZWZ0LgorCSAqLworCisJZXJyID0gaTkxNV9idWRkeV9pbml0KCZtbSwgUEFHRV9TSVpFIDw8IG1h eF9vcmRlciwgUEFHRV9TSVpFKTsKKwlpZiAoZXJyKSB7CisJCXByX2VycigiYnVkZHlfaW5pdCBm YWlsZWQoJWQpXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKwlHRU1fQlVHX09OKG1tLm1h eF9vcmRlciAhPSBtYXhfb3JkZXIpOworCisJZm9yIChvcmRlciA9IDA7IG9yZGVyIDwgbWF4X29y ZGVyOyBvcmRlcisrKSB7CisJCWJsb2NrID0gaTkxNV9idWRkeV9hbGxvYygmbW0sIG9yZGVyKTsK KwkJaWYgKElTX0VSUihibG9jaykpIHsKKwkJCXByX2luZm8oImJ1ZGR5X2FsbG9jIGhpdCAtRU5P TUVNIHdpdGggb3JkZXI9JWRcbiIsCisJCQkJb3JkZXIpOworCQkJZXJyID0gUFRSX0VSUihibG9j ayk7CisJCQlnb3RvIGVycjsKKwkJfQorCisJCWxpc3RfYWRkX3RhaWwoJmJsb2NrLT5saW5rLCAm YmxvY2tzKTsKKwl9CisKKwkvKiBBbmQgbm93IHRoZSBsYXN0IHJlbWFpbmluZyBibG9jayBhdmFp bGFibGUgKi8KKwlibG9jayA9IGk5MTVfYnVkZHlfYWxsb2MoJm1tLCAwKTsKKwlpZiAoSVNfRVJS KGJsb2NrKSkgeworCQlwcl9pbmZvKCJidWRkeV9hbGxvYyBoaXQgLUVOT01FTSBvbiBmaW5hbCBh bGxvY1xuIik7CisJCWVyciA9IFBUUl9FUlIoYmxvY2spOworCQlnb3RvIGVycjsKKwl9CisJbGlz dF9hZGRfdGFpbCgmYmxvY2stPmxpbmssICZibG9ja3MpOworCisJLyogU2hvdWxkIGJlIGNvbXBs ZXRlbHkgZnVsbCEgKi8KKwlmb3IgKG9yZGVyID0gbWF4X29yZGVyOyBvcmRlci0tOyApIHsKKwkJ YmxvY2sgPSBpOTE1X2J1ZGR5X2FsbG9jKCZtbSwgb3JkZXIpOworCQlpZiAoIUlTX0VSUihibG9j aykpIHsKKwkJCXByX2luZm8oImJ1ZGR5X2FsbG9jIHVuZXhwZWN0ZWRseSBzdWNjZWVkZWQgYXQg b3JkZXIgJWQsIGl0IHNob3VsZCBiZSBmdWxsISIsCisJCQkJb3JkZXIpOworCQkJbGlzdF9hZGRf dGFpbCgmYmxvY2stPmxpbmssICZibG9ja3MpOworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8g ZXJyOworCQl9CisJfQorCisJYmxvY2sgPSBsaXN0X2xhc3RfZW50cnkoJmJsb2NrcywgdHlwZW9m KCpibG9jayksIGxpbmspOworCWxpc3RfZGVsKCZibG9jay0+bGluayk7CisJaTkxNV9idWRkeV9m cmVlKCZtbSwgYmxvY2spOworCisJLyogQXMgd2UgZnJlZSBpbiBpbmNyZWFzaW5nIHNpemUsIHdl IG1ha2UgYXZhaWxhYmxlIGxhcmdlciBibG9ja3MgKi8KKwlvcmRlciA9IDE7CisJbGlzdF9mb3Jf ZWFjaF9lbnRyeV9zYWZlKGJsb2NrLCBibiwgJmJsb2NrcywgbGluaykgeworCQlsaXN0X2RlbCgm YmxvY2stPmxpbmspOworCQlpOTE1X2J1ZGR5X2ZyZWUoJm1tLCBibG9jayk7CisKKwkJYmxvY2sg PSBpOTE1X2J1ZGR5X2FsbG9jKCZtbSwgb3JkZXIpOworCQlpZiAoSVNfRVJSKGJsb2NrKSkgewor CQkJcHJfaW5mbygiYnVkZHlfYWxsb2MgKHJlYWxsb2MpIGhpdCAtRU5PTUVNIHdpdGggb3JkZXI9 JWRcbiIsCisJCQkJb3JkZXIpOworCQkJZXJyID0gUFRSX0VSUihibG9jayk7CisJCQlnb3RvIGVy cjsKKwkJfQorCQlpOTE1X2J1ZGR5X2ZyZWUoJm1tLCBibG9jayk7CisJCW9yZGVyKys7CisJfQor CisJLyogVG8gY29uZmlybSwgbm93IHRoZSB3aG9sZSBtbSBzaG91bGQgYmUgYXZhaWxhYmxlICov CisJYmxvY2sgPSBpOTE1X2J1ZGR5X2FsbG9jKCZtbSwgbWF4X29yZGVyKTsKKwlpZiAoSVNfRVJS KGJsb2NrKSkgeworCQlwcl9pbmZvKCJidWRkeV9hbGxvYyAocmVhbGxvYykgaGl0IC1FTk9NRU0g d2l0aCBvcmRlcj0lZFxuIiwKKwkJCW1heF9vcmRlcik7CisJCWVyciA9IFBUUl9FUlIoYmxvY2sp OworCQlnb3RvIGVycjsKKwl9CisJaTkxNV9idWRkeV9mcmVlKCZtbSwgYmxvY2spOworCitlcnI6 CisJaTkxNV9idWRkeV9mcmVlX2xpc3QoJm1tLCAmYmxvY2tzKTsKKwlpOTE1X2J1ZGR5X2Zpbmko Jm1tKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGlndF9idWRkeV9hbGxvY19vcHRp bWlzdGljKHZvaWQgKmFyZykKK3sKKwljb25zdCBpbnQgbWF4X29yZGVyID0gMTY7CisJc3RydWN0 IGk5MTVfYnVkZHlfYmxvY2sgKmJsb2NrOworCXN0cnVjdCBpOTE1X2J1ZGR5X21tIG1tOworCUxJ U1RfSEVBRChibG9ja3MpOworCWludCBvcmRlcjsKKwlpbnQgZXJyOworCisJLyoKKwkgKiBDcmVh dGUgYSBtbSB3aXRoIG9uZSBibG9jayBvZiBlYWNoIG9yZGVyIGF2YWlsYWJsZSwgYW5kCisJICog dHJ5IHRvIGFsbG9jYXRlIHRoZW0gYWxsLgorCSAqLworCisJZXJyID0gaTkxNV9idWRkeV9pbml0 KCZtbSwKKwkJCSAgICAgIFBBR0VfU0laRSAqICgoMSA8PCAobWF4X29yZGVyICsgMSkpIC0gMSks CisJCQkgICAgICBQQUdFX1NJWkUpOworCWlmIChlcnIpIHsKKwkJcHJfZXJyKCJidWRkeV9pbml0 IGZhaWxlZCglZClcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCUdFTV9CVUdfT04obW0u bWF4X29yZGVyICE9IG1heF9vcmRlcik7CisKKwlmb3IgKG9yZGVyID0gMDsgb3JkZXIgPD0gbWF4 X29yZGVyOyBvcmRlcisrKSB7CisJCWJsb2NrID0gaTkxNV9idWRkeV9hbGxvYygmbW0sIG9yZGVy KTsKKwkJaWYgKElTX0VSUihibG9jaykpIHsKKwkJCXByX2luZm8oImJ1ZGR5X2FsbG9jIGhpdCAt RU5PTUVNIHdpdGggb3JkZXI9JWRcbiIsCisJCQkJb3JkZXIpOworCQkJZXJyID0gUFRSX0VSUihi bG9jayk7CisJCQlnb3RvIGVycjsKKwkJfQorCisJCWxpc3RfYWRkX3RhaWwoJmJsb2NrLT5saW5r LCAmYmxvY2tzKTsKKwl9CisKKwkvKiBTaG91bGQgYmUgY29tcGxldGVseSBmdWxsISAqLworCWJs b2NrID0gaTkxNV9idWRkeV9hbGxvYygmbW0sIDApOworCWlmICghSVNfRVJSKGJsb2NrKSkgewor CQlwcl9pbmZvKCJidWRkeV9hbGxvYyB1bmV4cGVjdGVkbHkgc3VjY2VlZGVkLCBpdCBzaG91bGQg YmUgZnVsbCEiKTsKKwkJbGlzdF9hZGRfdGFpbCgmYmxvY2stPmxpbmssICZibG9ja3MpOworCQll cnIgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKKwl9CisKK2VycjoKKwlpOTE1X2J1ZGR5X2ZyZWVf bGlzdCgmbW0sICZibG9ja3MpOworCWk5MTVfYnVkZHlfZmluaSgmbW0pOworCXJldHVybiBlcnI7 Cit9CisKK3N0YXRpYyBpbnQgaWd0X2J1ZGR5X2FsbG9jX3BhdGhvbG9naWNhbCh2b2lkICphcmcp Cit7CisJY29uc3QgaW50IG1heF9vcmRlciA9IDE2OworCXN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2Nr ICpibG9jazsKKwlzdHJ1Y3QgaTkxNV9idWRkeV9tbSBtbTsKKwlMSVNUX0hFQUQoYmxvY2tzKTsK KwlMSVNUX0hFQUQoaG9sZXMpOworCWludCBvcmRlciwgdG9wOworCWludCBlcnI7CisKKwkvKgor CSAqIENyZWF0ZSBhIHBvdC1zaXplZCBtbSwgdGhlbiBhbGxvY2F0ZSBvbmUgb2YgZWFjaCBwb3Nz aWJsZQorCSAqIG9yZGVyIHdpdGhpbi4gVGhpcyBzaG91bGQgbGVhdmUgdGhlIG1tIHdpdGggZXhh Y3RseSBvbmUKKwkgKiBwYWdlIGxlZnQuIEZyZWUgdGhlIGxhcmdlc3QgYmxvY2ssIHRoZW4gd2hp dHRsZSBkb3duIGFnYWluLgorCSAqIEV2ZW50dWFsbHkgd2Ugd2lsbCBoYXZlIGEgZnVsbHkgNTAl IGZyYWdtZW50ZWQgbW0uCisJICovCisKKwllcnIgPSBpOTE1X2J1ZGR5X2luaXQoJm1tLCBQQUdF X1NJWkUgPDwgbWF4X29yZGVyLCBQQUdFX1NJWkUpOworCWlmIChlcnIpIHsKKwkJcHJfZXJyKCJi dWRkeV9pbml0IGZhaWxlZCglZClcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCUdFTV9C VUdfT04obW0ubWF4X29yZGVyICE9IG1heF9vcmRlcik7CisKKwlmb3IgKHRvcCA9IG1heF9vcmRl cjsgdG9wOyB0b3AtLSkgeworCQkvKiBNYWtlIHJvb20gYnkgZnJlZWluZyB0aGUgbGFyZ2VzdCBh bGxvY2F0ZWQgYmxvY2sgKi8KKwkJYmxvY2sgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoJmJs b2NrcywgdHlwZW9mKCpibG9jayksIGxpbmspOworCQlpZiAoYmxvY2spIHsKKwkJCWxpc3RfZGVs KCZibG9jay0+bGluayk7CisJCQlpOTE1X2J1ZGR5X2ZyZWUoJm1tLCBibG9jayk7CisJCX0KKwor CQlmb3IgKG9yZGVyID0gdG9wOyBvcmRlci0tOyApIHsKKwkJCWJsb2NrID0gaTkxNV9idWRkeV9h bGxvYygmbW0sIG9yZGVyKTsKKwkJCWlmIChJU19FUlIoYmxvY2spKSB7CisJCQkJcHJfaW5mbygi YnVkZHlfYWxsb2MgaGl0IC1FTk9NRU0gd2l0aCBvcmRlcj0lZCwgdG9wPSVkXG4iLAorCQkJCQlv cmRlciwgdG9wKTsKKwkJCQllcnIgPSBQVFJfRVJSKGJsb2NrKTsKKwkJCQlnb3RvIGVycjsKKwkJ CX0KKwkJCWxpc3RfYWRkX3RhaWwoJmJsb2NrLT5saW5rLCAmYmxvY2tzKTsKKwkJfQorCisJCS8q IFRoZXJlIHNob3VsZCBiZSBvbmUgZmluYWwgcGFnZSBmb3IgdGhpcyBzdWItYWxsb2NhdGlvbiAq LworCQlibG9jayA9IGk5MTVfYnVkZHlfYWxsb2MoJm1tLCAwKTsKKwkJaWYgKElTX0VSUihibG9j aykpIHsKKwkJCXByX2luZm8oImJ1ZGR5X2FsbG9jIGhpdCAtRU5PTUVNIGZvciBob2xlXG4iKTsK KwkJCWVyciA9IFBUUl9FUlIoYmxvY2spOworCQkJZ290byBlcnI7CisJCX0KKwkJbGlzdF9hZGRf dGFpbCgmYmxvY2stPmxpbmssICZob2xlcyk7CisKKwkJYmxvY2sgPSBpOTE1X2J1ZGR5X2FsbG9j KCZtbSwgdG9wKTsKKwkJaWYgKCFJU19FUlIoYmxvY2spKSB7CisJCQlwcl9pbmZvKCJidWRkeV9h bGxvYyB1bmV4cGVjdGVkbHkgc3VjY2VlZGVkIGF0IHRvcC1vcmRlciAlZC8lZCwgaXQgc2hvdWxk IGJlIGZ1bGwhIiwKKwkJCQl0b3AsIG1heF9vcmRlcik7CisJCQlsaXN0X2FkZF90YWlsKCZibG9j ay0+bGluaywgJmJsb2Nrcyk7CisJCQllcnIgPSAtRUlOVkFMOworCQkJZ290byBlcnI7CisJCX0K Kwl9CisKKwlpOTE1X2J1ZGR5X2ZyZWVfbGlzdCgmbW0sICZob2xlcyk7CisKKwkvKiBOb3RoaW5n IGxhcmdlciB0aGFuIGJsb2NrcyBvZiBjaHVua19zaXplIG5vdyBhdmFpbGFibGUgKi8KKwlmb3Ig KG9yZGVyID0gMTsgb3JkZXIgPD0gbWF4X29yZGVyOyBvcmRlcisrKSB7CisJCWJsb2NrID0gaTkx NV9idWRkeV9hbGxvYygmbW0sIG9yZGVyKTsKKwkJaWYgKCFJU19FUlIoYmxvY2spKSB7CisJCQlw cl9pbmZvKCJidWRkeV9hbGxvYyB1bmV4cGVjdGVkbHkgc3VjY2VlZGVkIGF0IG9yZGVyICVkLCBp dCBzaG91bGQgYmUgZnVsbCEiLAorCQkJCW9yZGVyKTsKKwkJCWxpc3RfYWRkX3RhaWwoJmJsb2Nr LT5saW5rLCAmYmxvY2tzKTsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIGVycjsKKwkJfQor CX0KKworZXJyOgorCWxpc3Rfc3BsaWNlX3RhaWwoJmhvbGVzLCAmYmxvY2tzKTsKKwlpOTE1X2J1 ZGR5X2ZyZWVfbGlzdCgmbW0sICZibG9ja3MpOworCWk5MTVfYnVkZHlfZmluaSgmbW0pOworCXJl dHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgaWd0X2J1ZGR5X2FsbG9jX3JhbmdlKHZvaWQgKmFy ZykKK3sKKwlzdHJ1Y3QgaTkxNV9idWRkeV9tbSBtbTsKKwl1bnNpZ25lZCBsb25nIHBhZ2VfbnVt OworCUxJU1RfSEVBRChibG9ja3MpOworCXU2NCBjaHVua19zaXplOworCXU2NCBvZmZzZXQ7CisJ dTY0IHNpemU7CisJdTY0IHJlbTsKKwlpbnQgZXJyOworCisJaWd0X21tX2NvbmZpZygmc2l6ZSwg JmNodW5rX3NpemUpOworCisJcHJfaW5mbygiYnVkZHlfaW5pdCB3aXRoIHNpemU9JWxseCwgY2h1 bmtfc2l6ZT0lbGx4XG4iLCBzaXplLCBjaHVua19zaXplKTsKKworCWVyciA9IGk5MTVfYnVkZHlf aW5pdCgmbW0sIHNpemUsIGNodW5rX3NpemUpOworCWlmIChlcnIpIHsKKwkJcHJfZXJyKCJidWRk eV9pbml0IGZhaWxlZCglZClcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0g aWd0X2NoZWNrX21tKCZtbSk7CisJaWYgKGVycikgeworCQlwcl9lcnIoInByZS1tbSBjaGVjayBm YWlsZWQsIGFib3J0LCBhYm9ydCwgYWJvcnQhXG4iKTsKKwkJZ290byBlcnJfZmluaTsKKwl9CisK KwlyZW0gPSBtbS5zaXplOworCW9mZnNldCA9IDA7CisKKwlmb3JfZWFjaF9wcmltZV9udW1iZXJf ZnJvbShwYWdlX251bSwgMSwgVUxPTkdfTUFYIC0gMSkgeworCQlzdHJ1Y3QgaTkxNV9idWRkeV9i bG9jayAqYmxvY2s7CisJCUxJU1RfSEVBRCh0bXApOworCisJCXNpemUgPSBtaW4ocGFnZV9udW0g KiBtbS5jaHVua19zaXplLCByZW0pOworCisJCWVyciA9IGk5MTVfYnVkZHlfYWxsb2NfcmFuZ2Uo Jm1tLCAmdG1wLCBvZmZzZXQsIHNpemUpOworCQlpZiAoZXJyKSB7CisJCQlpZiAoZXJyID09IC1F Tk9NRU0pIHsKKwkJCQlwcl9pbmZvKCJhbGxvY19yYW5nZSBoaXQgLUVOT01FTSB3aXRoIHNpemU9 JWxseFxuIiwKKwkJCQkJc2l6ZSk7CisJCQl9IGVsc2UgeworCQkJCXByX2VycigiYWxsb2NfcmFu Z2Ugd2l0aCBvZmZzZXQ9JWxseCwgc2l6ZT0lbGx4IGZhaWxlZCglZClcbiIsCisJCQkJICAgICAg IG9mZnNldCwgc2l6ZSwgZXJyKTsKKwkJCX0KKworCQkJYnJlYWs7CisJCX0KKworCQlibG9jayA9 IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgmdG1wLAorCQkJCQkJIHN0cnVjdCBpOTE1X2J1ZGR5 X2Jsb2NrLAorCQkJCQkJIGxpbmspOworCQlpZiAoIWJsb2NrKSB7CisJCQlwcl9lcnIoImFsbG9j X3JhbmdlIGhhcyBubyBibG9ja3NcbiIpOworCQkJZXJyID0gLUVJTlZBTDsKKwkJfQorCisJCWlm IChpOTE1X2J1ZGR5X2Jsb2NrX29mZnNldChibG9jaykgIT0gb2Zmc2V0KSB7CisJCQlwcl9lcnIo ImFsbG9jX3JhbmdlIHN0YXJ0IG9mZnNldCBtaXNtYXRjaCwgZm91bmQ9JWxseCwgZXhwZWN0ZWQ9 JWxseFxuIiwKKwkJCSAgICAgICBpOTE1X2J1ZGR5X2Jsb2NrX29mZnNldChibG9jayksIG9mZnNl dCk7CisJCQllcnIgPSAtRUlOVkFMOworCQl9CisKKwkJaWYgKCFlcnIpCisJCQllcnIgPSBpZ3Rf Y2hlY2tfYmxvY2tzKCZtbSwgJnRtcCwgc2l6ZSwgdHJ1ZSk7CisKKwkJbGlzdF9zcGxpY2VfdGFp bCgmdG1wLCAmYmxvY2tzKTsKKworCQlpZiAoZXJyKQorCQkJYnJlYWs7CisKKwkJb2Zmc2V0ICs9 IHNpemU7CisKKwkJcmVtIC09IHNpemU7CisJCWlmICghcmVtKQorCQkJYnJlYWs7CisJfQorCisJ aWYgKGVyciA9PSAtRU5PTUVNKQorCQllcnIgPSAwOworCisJaTkxNV9idWRkeV9mcmVlX2xpc3Qo Jm1tLCAmYmxvY2tzKTsKKworCWlmICghZXJyKSB7CisJCWVyciA9IGlndF9jaGVja19tbSgmbW0p OworCQlpZiAoZXJyKQorCQkJcHJfZXJyKCJwb3N0LW1tIGNoZWNrIGZhaWxlZFxuIik7CisJfQor CitlcnJfZmluaToKKwlpOTE1X2J1ZGR5X2ZpbmkoJm1tKTsKKworCXJldHVybiBlcnI7Cit9CisK K2ludCBpOTE1X2J1ZGR5X21vY2tfc2VsZnRlc3RzKHZvaWQpCit7CisJc3RhdGljIGNvbnN0IHN0 cnVjdCBpOTE1X3N1YnRlc3QgdGVzdHNbXSA9IHsKKwkJU1VCVEVTVChpZ3RfYnVkZHlfYWxsb2Nf cGVzc2ltaXN0aWMpLAorCQlTVUJURVNUKGlndF9idWRkeV9hbGxvY19vcHRpbWlzdGljKSwKKwkJ U1VCVEVTVChpZ3RfYnVkZHlfYWxsb2NfcGF0aG9sb2dpY2FsKSwKKwkJU1VCVEVTVChpZ3RfYnVk ZHlfYWxsb2Nfc21va2UpLAorCQlTVUJURVNUKGlndF9idWRkeV9hbGxvY19yYW5nZSksCisJfTsK KworCXJldHVybiBpOTE1X3N1YnRlc3RzKHRlc3RzLCBOVUxMKTsKK30KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X21vY2tfc2VsZnRlc3RzLmggYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9tb2NrX3NlbGZ0ZXN0cy5oCmluZGV4IGI1 NWRhNGQ5Y2NiYS4uYjg4MDg0ZmUzMjY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9zZWxmdGVzdHMvaTkxNV9tb2NrX3NlbGZ0ZXN0cy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9pOTE1X21vY2tfc2VsZnRlc3RzLmgKQEAgLTI1LDMgKzI1LDQgQEAgc2Vs ZnRlc3QoZXZpY3QsIGk5MTVfZ2VtX2V2aWN0X21vY2tfc2VsZnRlc3RzKQogc2VsZnRlc3QoZ3R0 LCBpOTE1X2dlbV9ndHRfbW9ja19zZWxmdGVzdHMpCiBzZWxmdGVzdChodWdlcGFnZXMsIGk5MTVf Z2VtX2h1Z2VfcGFnZV9tb2NrX3NlbGZ0ZXN0cykKIHNlbGZ0ZXN0KGNvbnRleHRzLCBpOTE1X2dl bV9jb250ZXh0X21vY2tfc2VsZnRlc3RzKQorc2VsZnRlc3QoYnVkZHksIGk5MTVfYnVkZHlfbW9j a19zZWxmdGVzdHMpCi0tIAoyLjIwLjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2RyaS1kZXZlbA==