From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: [PATCH v6 26/26] xen/arm: split domain_build.c Date: Fri, 2 Nov 2018 16:45:18 -0700 Message-ID: <1541202318-9840-26-git-send-email-sstabellini@kernel.org> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: julien.grall@arm.com Cc: Stefano Stabellini , Achin.Gupta@arm.com, sstabellini@kernel.org, andrii_anisov@epam.com, xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org ZG9tYWluX2J1aWxkLmMgaXMgdG9vIGxhcmdlLgoKTW92ZSBhbGwgdGhlIEFDUEkgc3BlY2lmaWMg ZGV2aWNlIHRyZWUgZ2VuZXJhdGluZyBmdW5jdGlvbnMgZnJvbQpkb21haW5fYnVpbGQuYyB0byBh Y3BpL2RvbWFpbl9idWlsZC5jLgoKU2lnbmVkLW9mZi1ieTogU3RlZmFubyBTdGFiZWxsaW5pIDxz dGVmYW5vc0B4aWxpbnguY29tPgoKLS0tCgpDaGFuZ2VzIGluIHY2OgotIGZpeCBsaWNlbnNlCgpD aGFuZ2VzIGluIHY0OgotIHJlbmFtZSBhY3BpX2R0X2J1aWxkIHRvIGRvbWFpbl9idWlsZC5jCi0g YWRkIGNvcHlyaWdodCBoZWFkZXIKLSByZW1vdmUgdXNlbGVzcyAjaW5jbHVkZQotIHJlbW92ZSBh Y3BpX2R0X2J1aWxkLmgsIGFkZCBkb21haW5fYnVpbGQuaAotLS0KIHhlbi9hcmNoL2FybS9hY3Bp L01ha2VmaWxlICAgICAgICAgfCAgIDEgKwogeGVuL2FyY2gvYXJtL2FjcGkvZG9tYWluX2J1aWxk LmMgICB8IDU5MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB4ZW4vYXJj aC9hcm0vZG9tYWluX2J1aWxkLmMgICAgICAgIHwgNTg1ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQogeGVuL2luY2x1ZGUvYXNtLWFybS9kb21haW5fYnVpbGQuaCB8ICAzMSAr KwogNCBmaWxlcyBjaGFuZ2VkLCA2MjggaW5zZXJ0aW9ucygrKSwgNTgwIGRlbGV0aW9ucygtKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9hcmNoL2FybS9hY3BpL2RvbWFpbl9idWlsZC5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgeGVuL2luY2x1ZGUvYXNtLWFybS9kb21haW5fYnVpbGQuaAoKZGlmZiAt LWdpdCBhL3hlbi9hcmNoL2FybS9hY3BpL01ha2VmaWxlIGIveGVuL2FyY2gvYXJtL2FjcGkvTWFr ZWZpbGUKaW5kZXggMjM5NjNmOC4uOTRhZTI0OSAxMDA2NDQKLS0tIGEveGVuL2FyY2gvYXJtL2Fj cGkvTWFrZWZpbGUKKysrIGIveGVuL2FyY2gvYXJtL2FjcGkvTWFrZWZpbGUKQEAgLTEsMiArMSwz IEBACiBvYmoteSArPSBsaWIubworb2JqLXkgKz0gZG9tYWluX2J1aWxkLm8KIG9iai15ICs9IGJv b3QuaW5pdC5vCmRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vYWNwaS9kb21haW5fYnVpbGQuYyBi L3hlbi9hcmNoL2FybS9hY3BpL2RvbWFpbl9idWlsZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLmVkMDk3ZDUKLS0tIC9kZXYvbnVsbAorKysgYi94ZW4vYXJjaC9hcm0vYWNw aS9kb21haW5fYnVpbGQuYwpAQCAtMCwwICsxLDU5MSBAQAorLyoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl cnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8eGVuL21tLmg+Cisj aW5jbHVkZSA8eGVuL3NjaGVkLmg+CisjaW5jbHVkZSA8eGVuL2FjcGkuaD4KKyNpbmNsdWRlIDx4 ZW4vZXZlbnQuaD4KKyNpbmNsdWRlIDx4ZW4vaW9jYXAuaD4KKyNpbmNsdWRlIDx4ZW4vZGV2aWNl X3RyZWUuaD4KKyNpbmNsdWRlIDx4ZW4vbGliZmR0L2xpYmZkdC5oPgorI2luY2x1ZGUgPGFjcGkv YWN0YWJsZXMuaD4KKyNpbmNsdWRlIDxhc20va2VybmVsLmg+CisjaW5jbHVkZSA8YXNtL2RvbWFp bl9idWlsZC5oPgorCisvKiBPdmVycmlkZSBtYWNyb3MgZnJvbSBhc20vcGFnZS5oIHRvIG1ha2Ug dGhlbSB3b3JrIHdpdGggbWZuX3QgKi8KKyN1bmRlZiB2aXJ0X3RvX21mbgorI2RlZmluZSB2aXJ0 X3RvX21mbih2YSkgX21mbihfX3ZpcnRfdG9fbWZuKHZhKSkKKworI2RlZmluZSBBQ1BJX0RPTTBf RkRUX01JTl9TSVpFIDQwOTYKKworc3RhdGljIGludCBfX2luaXQgYWNwaV9pb21lbV9kZW55X2Fj Y2VzcyhzdHJ1Y3QgZG9tYWluICpkKQoreworICAgIGFjcGlfc3RhdHVzIHN0YXR1czsKKyAgICBz dHJ1Y3QgYWNwaV90YWJsZV9zcGNyICpzcGNyID0gTlVMTDsKKyAgICB1bnNpZ25lZCBsb25nIG1m bjsKKyAgICBpbnQgcmM7CisKKyAgICAvKiBGaXJzdGx5IHBlcm1pdCBmdWxsIE1NSU8gY2FwYWJp bGl0aWVzLiAqLworICAgIHJjID0gaW9tZW1fcGVybWl0X2FjY2VzcyhkLCAwVUwsIH4wVUwpOwor ICAgIGlmICggcmMgKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICAvKiBUT0RPOiBEZW55IE1N SU8gYWNjZXNzIGZvciBTTU1VLCBHSUMgSVRTICovCisgICAgc3RhdHVzID0gYWNwaV9nZXRfdGFi bGUoQUNQSV9TSUdfU1BDUiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0 IGFjcGlfdGFibGVfaGVhZGVyICoqKSZzcGNyKTsKKworICAgIGlmICggQUNQSV9GQUlMVVJFKHN0 YXR1cykgKQorICAgIHsKKyAgICAgICAgcHJpbnRrKCJGYWlsZWQgdG8gZ2V0IFNQQ1IgdGFibGVc biIpOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisKKyAgICBtZm4gPSBzcGNyLT5z ZXJpYWxfcG9ydC5hZGRyZXNzID4+IFBBR0VfU0hJRlQ7CisgICAgLyogRGVueSBNTUlPIGFjY2Vz cyBmb3IgVUFSVCAqLworICAgIHJjID0gaW9tZW1fZGVueV9hY2Nlc3MoZCwgbWZuLCBtZm4gKyAx KTsKKyAgICBpZiAoIHJjICkKKyAgICAgICAgcmV0dXJuIHJjOworCisgICAgLyogRGVueSBNTUlP IGFjY2VzcyBmb3IgR0lDIHJlZ2lvbnMgKi8KKyAgICByZXR1cm4gZ2ljX2lvbWVtX2RlbnlfYWNj ZXNzKGQpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBhY3BpX3JvdXRlX3NwaXMoc3RydWN0IGRv bWFpbiAqZCkKK3sKKyAgICBpbnQgaSwgcmVzOworICAgIHN0cnVjdCBpcnFfZGVzYyAqZGVzYzsK KworICAgIC8qCisgICAgICogUm91dGUgdGhlIElSUSB0byBoYXJkd2FyZSBkb21haW4gYW5kIHBl cm1pdCB0aGUgYWNjZXNzLgorICAgICAqIFRoZSBpbnRlcnJ1cHQgdHlwZSB3aWxsIGJlIHNldCBi eSBzZXQgYnkgdGhlIGhhcmR3YXJlIGRvbWFpbi4KKyAgICAgKi8KKyAgICBmb3IoIGkgPSBOUl9M T0NBTF9JUlFTOyBpIDwgdmdpY19udW1faXJxcyhkKTsgaSsrICkKKyAgICB7CisgICAgICAgIC8q CisgICAgICAgICAqIFRPRE86IEV4Y2x1ZGUgdGhlIFNQSXMgU01NVSB1c2VzIHdoaWNoIHNob3Vs ZCBub3QgYmUgcm91dGVkIHRvCisgICAgICAgICAqIHRoZSBoYXJkd2FyZSBkb21haW4uCisgICAg ICAgICAqLworICAgICAgICBkZXNjID0gaXJxX3RvX2Rlc2MoaSk7CisgICAgICAgIGlmICggZGVz Yy0+YWN0aW9uICE9IE5VTEwpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvKiBY WFg6IFNoYWxsIHdlIHVzZSBhIHByb3BlciBkZXZuYW1lPyAqLworICAgICAgICByZXMgPSBtYXBf aXJxX3RvX2RvbWFpbihkLCBpLCB0cnVlLCAiQUNQSSIpOworICAgICAgICBpZiAoIHJlcyApCisg ICAgICAgICAgICByZXR1cm4gcmVzOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0 aWMgaW50IF9faW5pdCBhY3BpX21ha2VfaHlwZXJ2aXNvcl9ub2RlKGNvbnN0IHN0cnVjdCBrZXJu ZWxfaW5mbyAqa2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBtZW1iYW5rIHRibF9hZGRbXSkKK3sKKyAgICBjb25zdCBjaGFyIGNvbXBhdFtd ID0KKyAgICAgICAgInhlbix4ZW4tIl9fc3RyaW5naWZ5KFhFTl9WRVJTSU9OKSIuIl9fc3RyaW5n aWZ5KFhFTl9TVUJWRVJTSU9OKSJcMCIKKyAgICAgICAgInhlbix4ZW4iOworICAgIGludCByZXM7 CisgICAgLyogQ29udmVuaWVuY2UgYWxpYXMgKi8KKyAgICB2b2lkICpmZHQgPSBraW5mby0+ZmR0 OworCisgICAgZHRfZHByaW50aygiQ3JlYXRlIGh5cGVydmlzb3Igbm9kZVxuIik7CisKKyAgICAv KiBTZWUgbGludXggRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS94ZW4udHh0 ICovCisgICAgcmVzID0gZmR0X2JlZ2luX25vZGUoZmR0LCAiaHlwZXJ2aXNvciIpOworICAgIGlm ICggcmVzICkKKyAgICAgICAgcmV0dXJuIHJlczsKKworICAgIC8qIENhbm5vdCB1c2UgZmR0X3By b3BlcnR5X3N0cmluZyBkdWUgdG8gZW1iZWRkZWQgbnVsbHMgKi8KKyAgICByZXMgPSBmZHRfcHJv cGVydHkoZmR0LCAiY29tcGF0aWJsZSIsIGNvbXBhdCwgc2l6ZW9mKGNvbXBhdCkpOworICAgIGlm ICggcmVzICkKKyAgICAgICAgcmV0dXJuIHJlczsKKworICAgIHJlcyA9IGFjcGlfbWFrZV9lZmlf bm9kZXMoZmR0LCB0YmxfYWRkKTsKKyAgICBpZiAoIHJlcyApCisgICAgICAgIHJldHVybiByZXM7 CisKKyAgICByZXMgPSBmZHRfZW5kX25vZGUoZmR0KTsKKworICAgIHJldHVybiByZXM7Cit9CisK Ky8qCisgKiBQcmVwYXJlIGEgbWluaW1hbCBEVEIgZm9yIERvbTAgd2hpY2ggY29udGFpbnMgYm9v dGFyZ3MsIGluaXRyZCwgbWVtb3J5CisgKiBpbmZvcm1hdGlvbiwgRUZJIHRhYmxlLgorICovCitz dGF0aWMgaW50IF9faW5pdCBjcmVhdGVfYWNwaV9kdGIoc3RydWN0IGtlcm5lbF9pbmZvICpraW5m bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWVtYmFuayB0Ymxf YWRkW10pCit7CisgICAgaW50IG5ld19zaXplOworICAgIGludCByZXQ7CisKKyAgICBkdF9kcHJp bnRrKCJQcmVwYXJlIGEgbWluIERUQiBmb3IgRE9NMFxuIik7CisKKyAgICAvKiBBbGxvY2F0ZSBt aW4gc2l6ZSBmb3IgRFQgKi8KKyAgICBuZXdfc2l6ZSA9IEFDUElfRE9NMF9GRFRfTUlOX1NJWkU7 CisgICAga2luZm8tPmZkdCA9IHhtYWxsb2NfYnl0ZXMobmV3X3NpemUpOworCisgICAgaWYgKCBr aW5mby0+ZmR0ID09IE5VTEwgKQorICAgICAgICByZXR1cm4gLUVOT01FTTsKKworICAgIC8qIENy ZWF0ZSBhIG5ldyBlbXB0eSBEVCBmb3IgRE9NMCAqLworICAgIHJldCA9IGZkdF9jcmVhdGUoa2lu Zm8tPmZkdCwgbmV3X3NpemUpOworICAgIGlmICggcmV0IDwgMCApCisgICAgICAgIGdvdG8gZXJy OworCisgICAgcmV0ID0gZmR0X2ZpbmlzaF9yZXNlcnZlbWFwKGtpbmZvLT5mZHQpOworICAgIGlm ICggcmV0IDwgMCApCisgICAgICAgIGdvdG8gZXJyOworCisgICAgcmV0ID0gZmR0X2JlZ2luX25v ZGUoa2luZm8tPmZkdCwgIi8iKTsKKyAgICBpZiAoIHJldCA8IDAgKQorICAgICAgICBnb3RvIGVy cjsKKworICAgIHJldCA9IGZkdF9wcm9wZXJ0eV9jZWxsKGtpbmZvLT5mZHQsICIjYWRkcmVzcy1j ZWxscyIsIDIpOworICAgIGlmICggcmV0ICkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJl dCA9IGZkdF9wcm9wZXJ0eV9jZWxsKGtpbmZvLT5mZHQsICIjc2l6ZS1jZWxscyIsIDEpOworICAg IGlmICggcmV0ICkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIC8qIENyZWF0ZSBhIGNob3Nl biBub2RlIGZvciBET00wICovCisgICAgcmV0ID0gbWFrZV9jaG9zZW5fbm9kZShraW5mbyk7Cisg ICAgaWYgKCByZXQgKQorICAgICAgICBnb3RvIGVycjsKKworICAgIHJldCA9IGFjcGlfbWFrZV9o eXBlcnZpc29yX25vZGUoa2luZm8sIHRibF9hZGQpOworICAgIGlmICggcmV0ICkKKyAgICAgICAg Z290byBlcnI7CisKKyAgICByZXQgPSBmZHRfZW5kX25vZGUoa2luZm8tPmZkdCk7CisgICAgaWYg KCByZXQgPCAwICkKKyAgICAgICAgZ290byBlcnI7CisKKyAgICByZXQgPSBmZHRfZmluaXNoKGtp bmZvLT5mZHQpOworICAgIGlmICggcmV0IDwgMCApCisgICAgICAgIGdvdG8gZXJyOworCisgICAg cmV0dXJuIDA7CisKKyAgZXJyOgorICAgIHByaW50aygiRGV2aWNlIHRyZWUgZ2VuZXJhdGlvbiBm YWlsZWQgKCVkKS5cbiIsIHJldCk7CisgICAgeGZyZWUoa2luZm8tPmZkdCk7CisgICAgcmV0dXJu IC1FSU5WQUw7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhY3BpX21hcF9vdGhlcl90YWJsZXMo c3RydWN0IGRvbWFpbiAqZCkKK3sKKyAgICBpbnQgaTsKKyAgICB1bnNpZ25lZCBsb25nIHJlczsK KyAgICB1NjQgYWRkciwgc2l6ZTsKKworICAgIC8qIE1hcCBhbGwgQUNQSSB0YWJsZXMgdG8gRG9t MCB1c2luZyAxOjEgbWFwcGluZ3MuICovCisgICAgZm9yKCBpID0gMDsgaSA8IGFjcGlfZ2JsX3Jv b3RfdGFibGVfbGlzdC5jb3VudDsgaSsrICkKKyAgICB7CisgICAgICAgIGFkZHIgPSBhY3BpX2di bF9yb290X3RhYmxlX2xpc3QudGFibGVzW2ldLmFkZHJlc3M7CisgICAgICAgIHNpemUgPSBhY3Bp X2dibF9yb290X3RhYmxlX2xpc3QudGFibGVzW2ldLmxlbmd0aDsKKyAgICAgICAgcmVzID0gbWFw X3JlZ2lvbnNfcDJtdChkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhZGRyX3Rv X2dmbihhZGRyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQRk5fVVAoc2l6ZSks CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFkZHJfdG9fbWZuKGFkZHIpLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAybV9tbWlvX2RpcmVjdF9jKTsKKyAgICAgICAg aWYgKCByZXMgKQorICAgICAgICB7CisgICAgICAgICAgICAgcGFuaWMoWEVOTE9HX0VSUiAiVW5h YmxlIHRvIG1hcCBBQ1BJIHJlZ2lvbiAweCUiUFJJeDY0CisgICAgICAgICAgICAgICAgICAgIiAt IDB4JSJQUkl4NjQiIGluIGRvbWFpblxuIiwKKyAgICAgICAgICAgICAgICAgICBhZGRyICYgUEFH RV9NQVNLLCBQQUdFX0FMSUdOKGFkZHIgKyBzaXplKSAtIDEpOworICAgICAgICB9CisgICAgfQor fQorCitzdGF0aWMgaW50IF9faW5pdCBhY3BpX2NyZWF0ZV9yc2RwKHN0cnVjdCBkb21haW4gKmQs IHN0cnVjdCBtZW1iYW5rIHRibF9hZGRbXSkKK3sKKworICAgIHN0cnVjdCBhY3BpX3RhYmxlX3Jz ZHAgKnJzZHAgPSBOVUxMOworICAgIHU2NCBhZGRyOworICAgIHU2NCB0YWJsZV9zaXplID0gc2l6 ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX3JzZHApOworICAgIHU4ICpiYXNlX3B0cjsKKyAgICB1OCBj aGVja3N1bTsKKworICAgIGFkZHIgPSBhY3BpX29zX2dldF9yb290X3BvaW50ZXIoKTsKKyAgICBp ZiAoICFhZGRyICApCisgICAgeworICAgICAgICBwcmludGsoIlVuYWJsZSB0byBnZXQgYWNwaSBy b290IHBvaW50ZXJcbiIpOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisgICAgcnNk cCA9IGFjcGlfb3NfbWFwX21lbW9yeShhZGRyLCB0YWJsZV9zaXplKTsKKyAgICBiYXNlX3B0ciA9 IGQtPmFyY2guZWZpX2FjcGlfdGFibGUKKyAgICAgICAgICAgICAgICsgYWNwaV9nZXRfdGFibGVf b2Zmc2V0KHRibF9hZGQsIFRCTF9SU0RQKTsKKyAgICBtZW1jcHkoYmFzZV9wdHIsIHJzZHAsIHRh YmxlX3NpemUpOworICAgIGFjcGlfb3NfdW5tYXBfbWVtb3J5KHJzZHAsIHRhYmxlX3NpemUpOwor CisgICAgcnNkcCA9IChzdHJ1Y3QgYWNwaV90YWJsZV9yc2RwICopYmFzZV9wdHI7CisgICAgLyog UmVwbGFjZSB4c2R0X3BoeXNpY2FsX2FkZHJlc3MgKi8KKyAgICByc2RwLT54c2R0X3BoeXNpY2Fs X2FkZHJlc3MgPSB0YmxfYWRkW1RCTF9YU0RUXS5zdGFydDsKKyAgICBjaGVja3N1bSA9IGFjcGlf dGJfY2hlY2tzdW0oQUNQSV9DQVNUX1BUUih1OCwgcnNkcCksIHRhYmxlX3NpemUpOworICAgIHJz ZHAtPmNoZWNrc3VtID0gcnNkcC0+Y2hlY2tzdW0gLSBjaGVja3N1bTsKKworICAgIHRibF9hZGRb VEJMX1JTRFBdLnN0YXJ0ID0gZC0+YXJjaC5lZmlfYWNwaV9ncGEKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICsgYWNwaV9nZXRfdGFibGVfb2Zmc2V0KHRibF9hZGQsIFRCTF9SU0RQKTsK KyAgICB0YmxfYWRkW1RCTF9SU0RQXS5zaXplID0gdGFibGVfc2l6ZTsKKworICAgIHJldHVybiAw OworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgYWNwaV94c2R0X21vZGlmeV9lbnRyeSh1NjQgZW50 cnlbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGxvbmcgZW50cnlfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjaGFyICpzaWduYXR1cmUsIHU2NCBhZGRyKQoreworICAgIGludCBpOworICAgIHN0cnVj dCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGU7CisgICAgdTY0IHNpemUgPSBzaXplb2Yoc3RydWN0 IGFjcGlfdGFibGVfaGVhZGVyKTsKKworICAgIGZvciggaSA9IDA7IGkgPCBlbnRyeV9jb3VudDsg aSsrICkKKyAgICB7CisgICAgICAgIHRhYmxlID0gYWNwaV9vc19tYXBfbWVtb3J5KGVudHJ5W2ld LCBzaXplKTsKKyAgICAgICAgaWYgKCBBQ1BJX0NPTVBBUkVfTkFNRSh0YWJsZS0+c2lnbmF0dXJl LCBzaWduYXR1cmUpICkKKyAgICAgICAgeworICAgICAgICAgICAgZW50cnlbaV0gPSBhZGRyOwor ICAgICAgICAgICAgYWNwaV9vc191bm1hcF9tZW1vcnkodGFibGUsIHNpemUpOworICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYWNwaV9vc191bm1hcF9tZW1vcnkodGFibGUs IHNpemUpOworICAgIH0KK30KKworc3RhdGljIGludCBfX2luaXQgYWNwaV9jcmVhdGVfeHNkdChz dHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgbWVtYmFuayB0YmxfYWRkW10pCit7CisgICAgc3RydWN0 IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSA9IE5VTEw7CisgICAgc3RydWN0IGFjcGlfdGFibGVf cnNkcCAqcnNkcF90Ymw7CisgICAgc3RydWN0IGFjcGlfdGFibGVfeHNkdCAqeHNkdCA9IE5VTEw7 CisgICAgdTY0IHRhYmxlX3NpemUsIGFkZHI7CisgICAgdW5zaWduZWQgbG9uZyBlbnRyeV9jb3Vu dDsKKyAgICB1OCAqYmFzZV9wdHI7CisgICAgdTggY2hlY2tzdW07CisKKyAgICBhZGRyID0gYWNw aV9vc19nZXRfcm9vdF9wb2ludGVyKCk7CisgICAgaWYgKCAhYWRkciApCisgICAgeworICAgICAg ICBwcmludGsoIlVuYWJsZSB0byBnZXQgYWNwaSByb290IHBvaW50ZXJcbiIpOworICAgICAgICBy ZXR1cm4gLUVJTlZBTDsKKyAgICB9CisgICAgcnNkcF90YmwgPSBhY3BpX29zX21hcF9tZW1vcnko YWRkciwgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX3JzZHApKTsKKyAgICB0YWJsZSA9IGFjcGlf b3NfbWFwX21lbW9yeShyc2RwX3RibC0+eHNkdF9waHlzaWNhbF9hZGRyZXNzLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIpKTsK KworICAgIC8qIEFkZCBwbGFjZSBmb3IgU1RBTyB0YWJsZSBpbiBYU0RUIHRhYmxlICovCisgICAg dGFibGVfc2l6ZSA9IHRhYmxlLT5sZW5ndGggKyBzaXplb2YodTY0KTsKKyAgICBlbnRyeV9jb3Vu dCA9ICh0YWJsZS0+bGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcikpCisg ICAgICAgICAgICAgICAgICAvIHNpemVvZih1NjQpOworICAgIGJhc2VfcHRyID0gZC0+YXJjaC5l ZmlfYWNwaV90YWJsZQorICAgICAgICAgICAgICAgKyBhY3BpX2dldF90YWJsZV9vZmZzZXQodGJs X2FkZCwgVEJMX1hTRFQpOworICAgIG1lbWNweShiYXNlX3B0ciwgdGFibGUsIHRhYmxlLT5sZW5n dGgpOworICAgIGFjcGlfb3NfdW5tYXBfbWVtb3J5KHRhYmxlLCBzaXplb2Yoc3RydWN0IGFjcGlf dGFibGVfaGVhZGVyKSk7CisgICAgYWNwaV9vc191bm1hcF9tZW1vcnkocnNkcF90YmwsIHNpemVv ZihzdHJ1Y3QgYWNwaV90YWJsZV9yc2RwKSk7CisKKyAgICB4c2R0ID0gKHN0cnVjdCBhY3BpX3Rh YmxlX3hzZHQgKiliYXNlX3B0cjsKKyAgICBhY3BpX3hzZHRfbW9kaWZ5X2VudHJ5KHhzZHQtPnRh YmxlX29mZnNldF9lbnRyeSwgZW50cnlfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBBQ1BJX1NJR19GQURULCB0YmxfYWRkW1RCTF9GQURUXS5zdGFydCk7CisgICAgYWNwaV94c2R0 X21vZGlmeV9lbnRyeSh4c2R0LT50YWJsZV9vZmZzZXRfZW50cnksIGVudHJ5X2NvdW50LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgQUNQSV9TSUdfTUFEVCwgdGJsX2FkZFtUQkxfTUFEVF0u c3RhcnQpOworICAgIHhzZHQtPnRhYmxlX29mZnNldF9lbnRyeVtlbnRyeV9jb3VudF0gPSB0Ymxf YWRkW1RCTF9TVEFPXS5zdGFydDsKKworICAgIHhzZHQtPmhlYWRlci5sZW5ndGggPSB0YWJsZV9z aXplOworICAgIGNoZWNrc3VtID0gYWNwaV90Yl9jaGVja3N1bShBQ1BJX0NBU1RfUFRSKHU4LCB4 c2R0KSwgdGFibGVfc2l6ZSk7CisgICAgeHNkdC0+aGVhZGVyLmNoZWNrc3VtIC09IGNoZWNrc3Vt OworCisgICAgdGJsX2FkZFtUQkxfWFNEVF0uc3RhcnQgPSBkLT5hcmNoLmVmaV9hY3BpX2dwYQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBhY3BpX2dldF90YWJsZV9vZmZzZXQodGJs X2FkZCwgVEJMX1hTRFQpOworICAgIHRibF9hZGRbVEJMX1hTRFRdLnNpemUgPSB0YWJsZV9zaXpl OworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGFjcGlfY3JlYXRlX3N0 YW8oc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IG1lbWJhbmsgdGJsX2FkZFtdKQoreworICAgIHN0 cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGUgPSBOVUxMOworICAgIHN0cnVjdCBhY3BpX3Rh YmxlX3N0YW8gKnN0YW8gPSBOVUxMOworICAgIHUzMiB0YWJsZV9zaXplID0gc2l6ZW9mKHN0cnVj dCBhY3BpX3RhYmxlX3N0YW8pOworICAgIHUzMiBvZmZzZXQgPSBhY3BpX2dldF90YWJsZV9vZmZz ZXQodGJsX2FkZCwgVEJMX1NUQU8pOworICAgIGFjcGlfc3RhdHVzIHN0YXR1czsKKyAgICB1OCAq YmFzZV9wdHIsIGNoZWNrc3VtOworCisgICAgLyogQ29weSBPRU0gYW5kIEFTTCBjb21waWxlciBm aWVsZHMgZnJvbSBhbm90aGVyIHRhYmxlLCB1c2UgTUFEVCAqLworICAgIHN0YXR1cyA9IGFjcGlf Z2V0X3RhYmxlKEFDUElfU0lHX01BRFQsIDAsICZ0YWJsZSk7CisKKyAgICBpZiAoIEFDUElfRkFJ TFVSRShzdGF0dXMpICkKKyAgICB7CisgICAgICAgIGNvbnN0IGNoYXIgKm1zZyA9IGFjcGlfZm9y bWF0X2V4Y2VwdGlvbihzdGF0dXMpOworCisgICAgICAgIHByaW50aygiU1RBTzogRmFpbGVkIHRv IGdldCBNQURUIHRhYmxlLCAlc1xuIiwgbXNnKTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cisg ICAgfQorCisgICAgYmFzZV9wdHIgPSBkLT5hcmNoLmVmaV9hY3BpX3RhYmxlICsgb2Zmc2V0Owor ICAgIG1lbWNweShiYXNlX3B0ciwgdGFibGUsIHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9oZWFk ZXIpKTsKKworICAgIHN0YW8gPSAoc3RydWN0IGFjcGlfdGFibGVfc3RhbyAqKWJhc2VfcHRyOwor ICAgIG1lbWNweShzdGFvLT5oZWFkZXIuc2lnbmF0dXJlLCBBQ1BJX1NJR19TVEFPLCA0KTsKKyAg ICBzdGFvLT5oZWFkZXIucmV2aXNpb24gPSAxOworICAgIHN0YW8tPmhlYWRlci5sZW5ndGggPSB0 YWJsZV9zaXplOworICAgIHN0YW8tPmlnbm9yZV91YXJ0ID0gMTsKKyAgICBjaGVja3N1bSA9IGFj cGlfdGJfY2hlY2tzdW0oQUNQSV9DQVNUX1BUUih1OCwgc3RhbyksIHRhYmxlX3NpemUpOworICAg IHN0YW8tPmhlYWRlci5jaGVja3N1bSAtPSBjaGVja3N1bTsKKworICAgIHRibF9hZGRbVEJMX1NU QU9dLnN0YXJ0ID0gZC0+YXJjaC5lZmlfYWNwaV9ncGEgKyBvZmZzZXQ7CisgICAgdGJsX2FkZFtU QkxfU1RBT10uc2l6ZSA9IHRhYmxlX3NpemU7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBfX2luaXQgYWNwaV9jcmVhdGVfbWFkdChzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgbWVt YmFuayB0YmxfYWRkW10pCit7CisgICAgc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSA9 IE5VTEw7CisgICAgc3RydWN0IGFjcGlfdGFibGVfbWFkdCAqbWFkdCA9IE5VTEw7CisgICAgc3Ry dWN0IGFjcGlfc3VidGFibGVfaGVhZGVyICpoZWFkZXI7CisgICAgc3RydWN0IGFjcGlfbWFkdF9n ZW5lcmljX2Rpc3RyaWJ1dG9yICpnaWNkOworICAgIHUzMiB0YWJsZV9zaXplID0gc2l6ZW9mKHN0 cnVjdCBhY3BpX3RhYmxlX21hZHQpOworICAgIHUzMiBvZmZzZXQgPSBhY3BpX2dldF90YWJsZV9v ZmZzZXQodGJsX2FkZCwgVEJMX01BRFQpOworICAgIGludCByZXQ7CisgICAgYWNwaV9zdGF0dXMg c3RhdHVzOworICAgIHU4ICpiYXNlX3B0ciwgY2hlY2tzdW07CisKKyAgICBzdGF0dXMgPSBhY3Bp X2dldF90YWJsZShBQ1BJX1NJR19NQURULCAwLCAmdGFibGUpOworCisgICAgaWYgKCBBQ1BJX0ZB SUxVUkUoc3RhdHVzKSApCisgICAgeworICAgICAgICBjb25zdCBjaGFyICptc2cgPSBhY3BpX2Zv cm1hdF9leGNlcHRpb24oc3RhdHVzKTsKKworICAgICAgICBwcmludGsoIkZhaWxlZCB0byBnZXQg TUFEVCB0YWJsZSwgJXNcbiIsIG1zZyk7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0K KworICAgIGJhc2VfcHRyID0gZC0+YXJjaC5lZmlfYWNwaV90YWJsZSArIG9mZnNldDsKKyAgICBt ZW1jcHkoYmFzZV9wdHIsIHRhYmxlLCB0YWJsZV9zaXplKTsKKworICAgIC8qIEFkZCBHZW5lcmlj IERpc3RyaWJ1dG9yLiAqLworICAgIGhlYWRlciA9IGFjcGlfdGFibGVfZ2V0X2VudHJ5X21hZHQo QUNQSV9NQURUX1RZUEVfR0VORVJJQ19ESVNUUklCVVRPUiwgMCk7CisgICAgaWYgKCAhaGVhZGVy ICkKKyAgICB7CisgICAgICAgIHByaW50aygiQ2FuJ3QgZ2V0IEdJQ0QgZW50cnlcbiIpOworICAg ICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisgICAgZ2ljZCA9IGNvbnRhaW5lcl9vZihoZWFk ZXIsIHN0cnVjdCBhY3BpX21hZHRfZ2VuZXJpY19kaXN0cmlidXRvciwgaGVhZGVyKTsKKyAgICBt ZW1jcHkoYmFzZV9wdHIgKyB0YWJsZV9zaXplLCBnaWNkLAorICAgICAgICAgICAgICAgIHNpemVv ZihzdHJ1Y3QgYWNwaV9tYWR0X2dlbmVyaWNfZGlzdHJpYnV0b3IpKTsKKyAgICB0YWJsZV9zaXpl ICs9IHNpemVvZihzdHJ1Y3QgYWNwaV9tYWR0X2dlbmVyaWNfZGlzdHJpYnV0b3IpOworCisgICAg LyogQWRkIG90aGVyIHN1YnRhYmxlcy4gKi8KKyAgICByZXQgPSBnaWNfbWFrZV9od2RvbV9tYWR0 KGQsIG9mZnNldCArIHRhYmxlX3NpemUpOworICAgIGlmICggcmV0IDwgMCApCisgICAgeworICAg ICAgICBwcmludGsoIkZhaWxlZCB0byBnZXQgb3RoZXIgc3VidGFibGVzXG4iKTsKKyAgICAgICAg cmV0dXJuIC1FSU5WQUw7CisgICAgfQorICAgIHRhYmxlX3NpemUgKz0gcmV0OworCisgICAgbWFk dCA9IChzdHJ1Y3QgYWNwaV90YWJsZV9tYWR0ICopYmFzZV9wdHI7CisgICAgbWFkdC0+aGVhZGVy Lmxlbmd0aCA9IHRhYmxlX3NpemU7CisgICAgY2hlY2tzdW0gPSBhY3BpX3RiX2NoZWNrc3VtKEFD UElfQ0FTVF9QVFIodTgsIG1hZHQpLCB0YWJsZV9zaXplKTsKKyAgICBtYWR0LT5oZWFkZXIuY2hl Y2tzdW0gLT0gY2hlY2tzdW07CisKKyAgICB0YmxfYWRkW1RCTF9NQURUXS5zdGFydCA9IGQtPmFy Y2guZWZpX2FjcGlfZ3BhICsgb2Zmc2V0OworICAgIHRibF9hZGRbVEJMX01BRFRdLnNpemUgPSB0 YWJsZV9zaXplOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGFjcGlf Y3JlYXRlX2ZhZHQoc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IG1lbWJhbmsgdGJsX2FkZFtdKQor eworICAgIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGUgPSBOVUxMOworICAgIHN0cnVj dCBhY3BpX3RhYmxlX2ZhZHQgKmZhZHQgPSBOVUxMOworICAgIHU2NCB0YWJsZV9zaXplOworICAg IGFjcGlfc3RhdHVzIHN0YXR1czsKKyAgICB1OCAqYmFzZV9wdHI7CisgICAgdTggY2hlY2tzdW07 CisKKyAgICBzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19GQURULCAwLCAmdGFibGUp OworCisgICAgaWYgKCBBQ1BJX0ZBSUxVUkUoc3RhdHVzKSApCisgICAgeworICAgICAgICBjb25z dCBjaGFyICptc2cgPSBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKTsKKworICAgICAgICBw cmludGsoIkZhaWxlZCB0byBnZXQgRkFEVCB0YWJsZSwgJXNcbiIsIG1zZyk7CisgICAgICAgIHJl dHVybiAtRUlOVkFMOworICAgIH0KKworICAgIHRhYmxlX3NpemUgPSB0YWJsZS0+bGVuZ3RoOwor ICAgIGJhc2VfcHRyID0gZC0+YXJjaC5lZmlfYWNwaV90YWJsZQorICAgICAgICAgICAgICAgKyBh Y3BpX2dldF90YWJsZV9vZmZzZXQodGJsX2FkZCwgVEJMX0ZBRFQpOworICAgIG1lbWNweShiYXNl X3B0ciwgdGFibGUsIHRhYmxlX3NpemUpOworICAgIGZhZHQgPSAoc3RydWN0IGFjcGlfdGFibGVf ZmFkdCAqKWJhc2VfcHRyOworCisgICAgLyogU2V0IFBTQ0lfQ09NUExJQU5UIGFuZCBQU0NJX1VT RV9IVkMgKi8KKyAgICBmYWR0LT5hcm1fYm9vdF9mbGFncyB8PSAoQUNQSV9GQURUX1BTQ0lfQ09N UExJQU5UIHwgQUNQSV9GQURUX1BTQ0lfVVNFX0hWQyk7CisgICAgY2hlY2tzdW0gPSBhY3BpX3Ri X2NoZWNrc3VtKEFDUElfQ0FTVF9QVFIodTgsIGZhZHQpLCB0YWJsZV9zaXplKTsKKyAgICBmYWR0 LT5oZWFkZXIuY2hlY2tzdW0gLT0gY2hlY2tzdW07CisKKyAgICB0YmxfYWRkW1RCTF9GQURUXS5z dGFydCA9IGQtPmFyY2guZWZpX2FjcGlfZ3BhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICArIGFjcGlfZ2V0X3RhYmxlX29mZnNldCh0YmxfYWRkLCBUQkxfRkFEVCk7CisgICAgdGJsX2Fk ZFtUQkxfRkFEVF0uc2l6ZSA9IHRhYmxlX3NpemU7CisKKyAgICByZXR1cm4gMDsKK30KKworc3Rh dGljIGludCBfX2luaXQgZXN0aW1hdGVfYWNwaV9lZmlfc2l6ZShzdHJ1Y3QgZG9tYWluICpkLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga2VybmVsX2lu Zm8gKmtpbmZvKQoreworICAgIHNpemVfdCBlZmlfc2l6ZSwgYWNwaV9zaXplLCBtYWR0X3NpemU7 CisgICAgdTY0IGFkZHI7CisgICAgc3RydWN0IGFjcGlfdGFibGVfcnNkcCAqcnNkcF90Ymw7Cisg ICAgc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZTsKKworICAgIGVmaV9zaXplID0gZXN0 aW1hdGVfZWZpX3NpemUoa2luZm8tPm1lbS5ucl9iYW5rcyk7CisKKyAgICBhY3BpX3NpemUgPSBS T1VORFVQKHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9mYWR0KSwgOCk7CisgICAgYWNwaV9zaXpl ICs9IFJPVU5EVVAoc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX3N0YW8pLCA4KTsKKworICAgIG1h ZHRfc2l6ZSA9IGdpY19nZXRfaHdkb21fbWFkdF9zaXplKGQpOworICAgIGFjcGlfc2l6ZSArPSBS T1VORFVQKG1hZHRfc2l6ZSwgOCk7CisKKyAgICBhZGRyID0gYWNwaV9vc19nZXRfcm9vdF9wb2lu dGVyKCk7CisgICAgaWYgKCAhYWRkciApCisgICAgeworICAgICAgICBwcmludGsoIlVuYWJsZSB0 byBnZXQgYWNwaSByb290IHBvaW50ZXJcbiIpOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAg ICB9CisKKyAgICByc2RwX3RibCA9IGFjcGlfb3NfbWFwX21lbW9yeShhZGRyLCBzaXplb2Yoc3Ry dWN0IGFjcGlfdGFibGVfcnNkcCkpOworICAgIGlmICggIXJzZHBfdGJsICkKKyAgICB7CisgICAg ICAgIHByaW50aygiVW5hYmxlIHRvIG1hcCBSU0RQIHRhYmxlXG4iKTsKKyAgICAgICAgcmV0dXJu IC1FSU5WQUw7CisgICAgfQorCisgICAgdGFibGUgPSBhY3BpX29zX21hcF9tZW1vcnkocnNkcF90 YmwtPnhzZHRfcGh5c2ljYWxfYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyKSk7CisgICAgYWNwaV9vc191bm1hcF9t ZW1vcnkocnNkcF90YmwsIHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9yc2RwKSk7CisgICAgaWYg KCAhdGFibGUgKQorICAgIHsKKyAgICAgICAgcHJpbnRrKCJVbmFibGUgdG8gbWFwIFhTRFQgdGFi bGVcbiIpOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisKKyAgICAvKiBBZGQgcGxh Y2UgZm9yIFNUQU8gdGFibGUgaW4gWFNEVCB0YWJsZSAqLworICAgIGFjcGlfc2l6ZSArPSBST1VO RFVQKHRhYmxlLT5sZW5ndGggKyBzaXplb2YodTY0KSwgOCk7CisgICAgYWNwaV9vc191bm1hcF9t ZW1vcnkodGFibGUsIHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIpKTsKKworICAgIGFj cGlfc2l6ZSArPSBST1VORFVQKHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9yc2RwKSwgOCk7Cisg ICAgZC0+YXJjaC5lZmlfYWNwaV9sZW4gPSBQQUdFX0FMSUdOKFJPVU5EVVAoZWZpX3NpemUsIDgp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgUk9VTkRVUChhY3BpX3Np emUsIDgpKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBwcmVwYXJl X2FjcGkoc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IGtlcm5lbF9pbmZvICpraW5mbykKK3sKKyAg ICBpbnQgcmMgPSAwOworICAgIGludCBvcmRlcjsKKyAgICBzdHJ1Y3QgbWVtYmFuayB0YmxfYWRk W1RCTF9NTUFYXSA9IHt9OworCisgICAgcmMgPSBlc3RpbWF0ZV9hY3BpX2VmaV9zaXplKGQsIGtp bmZvKTsKKyAgICBpZiAoIHJjICE9IDAgKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICBvcmRl ciA9IGdldF9vcmRlcl9mcm9tX2J5dGVzKGQtPmFyY2guZWZpX2FjcGlfbGVuKTsKKyAgICBkLT5h cmNoLmVmaV9hY3BpX3RhYmxlID0gYWxsb2NfeGVuaGVhcF9wYWdlcyhvcmRlciwgMCk7CisgICAg aWYgKCBkLT5hcmNoLmVmaV9hY3BpX3RhYmxlID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgcHJp bnRrKCJ1bmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IVxuIik7CisgICAgICAgIHJldHVybiAtRU5P TUVNOworICAgIH0KKyAgICBtZW1zZXQoZC0+YXJjaC5lZmlfYWNwaV90YWJsZSwgMCwgZC0+YXJj aC5lZmlfYWNwaV9sZW4pOworCisgICAgLyoKKyAgICAgKiBGb3IgQUNQSSwgRG9tMCBkb2Vzbid0 IHVzZSBraW5mby0+Z250dGFiX3N0YXJ0IHRvIGdldCB0aGUgZ3JhbnQgdGFibGUKKyAgICAgKiBy ZWdpb24uIFNvIHdlIHVzZSBpdCBhcyB0aGUgQUNQSSB0YWJsZSBtYXBwZWQgYWRkcmVzcy4gQWxz byBpdCBuZWVkcyB0bworICAgICAqIGNoZWNrIGlmIHRoZSBzaXplIG9mIGdyYW50IHRhYmxlIHJl Z2lvbiBpcyBlbm91Z2ggZm9yIHRob3NlIEFDUEkgdGFibGVzLgorICAgICAqLworICAgIGQtPmFy Y2guZWZpX2FjcGlfZ3BhID0ga2luZm8tPmdudHRhYl9zdGFydDsKKyAgICBpZiAoIGtpbmZvLT5n bnR0YWJfc2l6ZSA8IGQtPmFyY2guZWZpX2FjcGlfbGVuICkKKyAgICB7CisgICAgICAgIHByaW50 aygiVGhlIGdyYW50IHRhYmxlIHJlZ2lvbiBpcyBub3QgZW5vdWdoIHRvIGZpdCB0aGUgQUNQSSB0 YWJsZXMhXG4iKTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorCisgICAgcmMgPSBh Y3BpX2NyZWF0ZV9mYWR0KGQsIHRibF9hZGQpOworICAgIGlmICggcmMgIT0gMCApCisgICAgICAg IHJldHVybiByYzsKKworICAgIHJjID0gYWNwaV9jcmVhdGVfbWFkdChkLCB0YmxfYWRkKTsKKyAg ICBpZiAoIHJjICE9IDAgKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICByYyA9IGFjcGlfY3Jl YXRlX3N0YW8oZCwgdGJsX2FkZCk7CisgICAgaWYgKCByYyAhPSAwICkKKyAgICAgICAgcmV0dXJu IHJjOworCisgICAgcmMgPSBhY3BpX2NyZWF0ZV94c2R0KGQsIHRibF9hZGQpOworICAgIGlmICgg cmMgIT0gMCApCisgICAgICAgIHJldHVybiByYzsKKworICAgIHJjID0gYWNwaV9jcmVhdGVfcnNk cChkLCB0YmxfYWRkKTsKKyAgICBpZiAoIHJjICE9IDAgKQorICAgICAgICByZXR1cm4gcmM7CisK KyAgICBhY3BpX21hcF9vdGhlcl90YWJsZXMoZCk7CisgICAgYWNwaV9jcmVhdGVfZWZpX3N5c3Rl bV90YWJsZShkLCB0YmxfYWRkKTsKKyAgICBhY3BpX2NyZWF0ZV9lZmlfbW1hcF90YWJsZShkLCAm a2luZm8tPm1lbSwgdGJsX2FkZCk7CisKKyAgICAvKiBNYXAgdGhlIEVGSSBhbmQgQUNQSSB0YWJs ZXMgdG8gRG9tMCAqLworICAgIHJjID0gbWFwX3JlZ2lvbnNfcDJtdChkLAorICAgICAgICAgICAg ICAgICAgICAgICAgICBnYWRkcl90b19nZm4oZC0+YXJjaC5lZmlfYWNwaV9ncGEpLAorICAgICAg ICAgICAgICAgICAgICAgICAgICBQRk5fVVAoZC0+YXJjaC5lZmlfYWNwaV9sZW4pLAorICAgICAg ICAgICAgICAgICAgICAgICAgICB2aXJ0X3RvX21mbihkLT5hcmNoLmVmaV9hY3BpX3RhYmxlKSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgcDJtX21taW9fZGlyZWN0X2MpOworICAgIGlmICgg cmMgIT0gMCApCisgICAgeworICAgICAgICBwcmludGsoWEVOTE9HX0VSUiAiVW5hYmxlIHRvIG1h cCBFRkkvQUNQSSB0YWJsZSAweCUiUFJJeDY0CisgICAgICAgICAgICAgICAiIC0gMHglIlBSSXg2 NCIgaW4gZG9tYWluICVkXG4iLAorICAgICAgICAgICAgICAgZC0+YXJjaC5lZmlfYWNwaV9ncGEg JiBQQUdFX01BU0ssCisgICAgICAgICAgICAgICBQQUdFX0FMSUdOKGQtPmFyY2guZWZpX2FjcGlf Z3BhICsgZC0+YXJjaC5lZmlfYWNwaV9sZW4pIC0gMSwKKyAgICAgICAgICAgICAgIGQtPmRvbWFp bl9pZCk7CisgICAgICAgIHJldHVybiByYzsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEZsdXNo IHRoZSBjYWNoZSBmb3IgdGhpcyByZWdpb24sIG90aGVyd2lzZSBET00wIG1heSByZWFkIHdyb25n IGRhdGEgd2hlbgorICAgICAqIHRoZSBjYWNoZSBpcyBkaXNhYmxlZC4KKyAgICAgKi8KKyAgICBj bGVhbl9hbmRfaW52YWxpZGF0ZV9kY2FjaGVfdmFfcmFuZ2UoZC0+YXJjaC5lZmlfYWNwaV90YWJs ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC0+YXJjaC5lZmlf YWNwaV9sZW4pOworCisgICAgcmMgPSBjcmVhdGVfYWNwaV9kdGIoa2luZm8sIHRibF9hZGQpOwor ICAgIGlmICggcmMgIT0gMCApCisgICAgICAgIHJldHVybiByYzsKKworICAgIHJjID0gYWNwaV9y b3V0ZV9zcGlzKGQpOworICAgIGlmICggcmMgIT0gMCApCisgICAgICAgIHJldHVybiByYzsKKwor ICAgIHJjID0gYWNwaV9pb21lbV9kZW55X2FjY2VzcyhkKTsKKyAgICBpZiAoIHJjICE9IDAgKQor ICAgICAgICByZXR1cm4gcmM7CisKKyAgICAvKgorICAgICAqIEFsbCBQUElzIGhhdmUgYmVlbiBy ZWdpc3RlcmVkLCBhbGxvY2F0ZSB0aGUgZXZlbnQgY2hhbm5lbAorICAgICAqIGludGVycnVwdHMu CisgICAgICovCisgICAgZXZ0Y2huX2FsbG9jYXRlKGQpOworCisgICAgcmV0dXJuIDA7Cit9CmRp ZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vZG9tYWluX2J1aWxkLmMgYi94ZW4vYXJjaC9hcm0vZG9t YWluX2J1aWxkLmMKaW5kZXggMzJlZDVhYS4uN2ExZGQ1NiAxMDA2NDQKLS0tIGEveGVuL2FyY2gv YXJtL2RvbWFpbl9idWlsZC5jCisrKyBiL3hlbi9hcmNoL2FybS9kb21haW5fYnVpbGQuYwpAQCAt MjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGFzbS9wc2NpLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVw Lmg+CiAjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KKyNpbmNsdWRlIDxhc20vZG9tYWluX2J1 aWxkLmg+CiAKICNpbmNsdWRlIDx4ZW4vaXJxLmg+CiAjaW5jbHVkZSA8eGVuL2dyYW50X3RhYmxl Lmg+CkBAIC02NzksOCArNjgwLDYgQEAgc3RhdGljIGludCBfX2luaXQgbWFrZV9tZW1vcnlfbm9k ZShjb25zdCBzdHJ1Y3QgZG9tYWluICpkLAogICAgIHJldHVybiByZXM7CiB9CiAKLXN0YXRpYyB2 b2lkIGV2dGNobl9hbGxvY2F0ZShzdHJ1Y3QgZG9tYWluICpkKTsKLQogc3RhdGljIGludCBfX2lu aXQgbWFrZV9oeXBlcnZpc29yX25vZGUoc3RydWN0IGRvbWFpbiAqZCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfaW5mbyAqa2luZm8s CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWRkcmNlbGxzLCBp bnQgc2l6ZWNlbGxzKQpAQCAtMTA0MSw3ICsxMDQwLDcgQEAgc3RhdGljIGludCBfX2luaXQgbWFr ZV90aW1lcl9ub2RlKGNvbnN0IHN0cnVjdCBkb21haW4gKmQsIHZvaWQgKmZkdCwKICAqIG9uIEFD UEkgc3lzdGVtcywgYW5kIERvbVVzIHN0YXJ0ZWQgZGlyZWN0bHkgZnJvbSBYZW4gYmFzZWQgb24g ZGV2aWNlCiAgKiB0cmVlIGluZm9ybWF0aW9uLgogICovCi1zdGF0aWMgaW50IF9faW5pdCBtYWtl X2Nob3Nlbl9ub2RlKGNvbnN0IHN0cnVjdCBrZXJuZWxfaW5mbyAqa2luZm8pCitpbnQgX19pbml0 IG1ha2VfY2hvc2VuX25vZGUoY29uc3Qgc3RydWN0IGtlcm5lbF9pbmZvICpraW5mbykKIHsKICAg ICBpbnQgcmVzOwogICAgIGNvbnN0IGNoYXIgKmJvb3RhcmdzID0gTlVMTDsKQEAgLTEwODIsOCAr MTA4MSw4IEBAIHN0YXRpYyBpbnQgX19pbml0IG1ha2VfY2hvc2VuX25vZGUoY29uc3Qgc3RydWN0 IGtlcm5lbF9pbmZvICpraW5mbykKICAgICByZXR1cm4gcmVzOwogfQogCi1zdGF0aWMgaW50IF9f aW5pdCBtYXBfaXJxX3RvX2RvbWFpbihzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBpbnQgaXJx LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBuZWVkX21hcHBpbmcs IGNvbnN0IGNoYXIgKmRldm5hbWUpCitpbnQgX19pbml0IG1hcF9pcnFfdG9fZG9tYWluKHN0cnVj dCBkb21haW4gKmQsIHVuc2lnbmVkIGludCBpcnEsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJvb2wgbmVlZF9tYXBwaW5nLCBjb25zdCBjaGFyICpkZXZuYW1lKQogewogICAgIGludCBy ZXM7CiAKQEAgLTE3OTcsNTgwICsxNzk2LDYgQEAgc3RhdGljIGludCBfX2luaXQgcHJlcGFyZV9k dGJfaHdkb20oc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IGtlcm5lbF9pbmZvICpraW5mbykKICAg ICByZXR1cm4gLUVJTlZBTDsKIH0KIAotI2lmZGVmIENPTkZJR19BQ1BJCi0jZGVmaW5lIEFDUElf RE9NMF9GRFRfTUlOX1NJWkUgNDA5NgotCi1zdGF0aWMgaW50IF9faW5pdCBhY3BpX2lvbWVtX2Rl bnlfYWNjZXNzKHN0cnVjdCBkb21haW4gKmQpCi17Ci0gICAgYWNwaV9zdGF0dXMgc3RhdHVzOwot ICAgIHN0cnVjdCBhY3BpX3RhYmxlX3NwY3IgKnNwY3IgPSBOVUxMOwotICAgIHVuc2lnbmVkIGxv bmcgbWZuOwotICAgIGludCByYzsKLQotICAgIC8qIEZpcnN0bHkgcGVybWl0IGZ1bGwgTU1JTyBj YXBhYmlsaXRpZXMuICovCi0gICAgcmMgPSBpb21lbV9wZXJtaXRfYWNjZXNzKGQsIDBVTCwgfjBV TCk7Ci0gICAgaWYgKCByYyApCi0gICAgICAgIHJldHVybiByYzsKLQotICAgIC8qIFRPRE86IERl bnkgTU1JTyBhY2Nlc3MgZm9yIFNNTVUsIEdJQyBJVFMgKi8KLSAgICBzdGF0dXMgPSBhY3BpX2dl dF90YWJsZShBQ1BJX1NJR19TUENSLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChz dHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKiopJnNwY3IpOwotCi0gICAgaWYgKCBBQ1BJX0ZBSUxV UkUoc3RhdHVzKSApCi0gICAgewotICAgICAgICBwcmludGsoIkZhaWxlZCB0byBnZXQgU1BDUiB0 YWJsZVxuIik7Ci0gICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgIH0KLQotICAgIG1mbiA9IHNw Y3ItPnNlcmlhbF9wb3J0LmFkZHJlc3MgPj4gUEFHRV9TSElGVDsKLSAgICAvKiBEZW55IE1NSU8g YWNjZXNzIGZvciBVQVJUICovCi0gICAgcmMgPSBpb21lbV9kZW55X2FjY2VzcyhkLCBtZm4sIG1m biArIDEpOwotICAgIGlmICggcmMgKQotICAgICAgICByZXR1cm4gcmM7Ci0KLSAgICAvKiBEZW55 IE1NSU8gYWNjZXNzIGZvciBHSUMgcmVnaW9ucyAqLwotICAgIHJldHVybiBnaWNfaW9tZW1fZGVu eV9hY2Nlc3MoZCk7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGFjcGlfcm91dGVfc3BpcyhzdHJ1 Y3QgZG9tYWluICpkKQotewotICAgIGludCBpLCByZXM7Ci0gICAgc3RydWN0IGlycV9kZXNjICpk ZXNjOwotCi0gICAgLyoKLSAgICAgKiBSb3V0ZSB0aGUgSVJRIHRvIGhhcmR3YXJlIGRvbWFpbiBh bmQgcGVybWl0IHRoZSBhY2Nlc3MuCi0gICAgICogVGhlIGludGVycnVwdCB0eXBlIHdpbGwgYmUg c2V0IGJ5IHNldCBieSB0aGUgaGFyZHdhcmUgZG9tYWluLgotICAgICAqLwotICAgIGZvciggaSA9 IE5SX0xPQ0FMX0lSUVM7IGkgPCB2Z2ljX251bV9pcnFzKGQpOyBpKysgKQotICAgIHsKLSAgICAg ICAgLyoKLSAgICAgICAgICogVE9ETzogRXhjbHVkZSB0aGUgU1BJcyBTTU1VIHVzZXMgd2hpY2gg c2hvdWxkIG5vdCBiZSByb3V0ZWQgdG8KLSAgICAgICAgICogdGhlIGhhcmR3YXJlIGRvbWFpbi4K LSAgICAgICAgICovCi0gICAgICAgIGRlc2MgPSBpcnFfdG9fZGVzYyhpKTsKLSAgICAgICAgaWYg KCBkZXNjLT5hY3Rpb24gIT0gTlVMTCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg IC8qIFhYWDogU2hhbGwgd2UgdXNlIGEgcHJvcGVyIGRldm5hbWU/ICovCi0gICAgICAgIHJlcyA9 IG1hcF9pcnFfdG9fZG9tYWluKGQsIGksIHRydWUsICJBQ1BJIik7Ci0gICAgICAgIGlmICggcmVz ICkKLSAgICAgICAgICAgIHJldHVybiByZXM7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0K LXN0YXRpYyBpbnQgX19pbml0IGFjcGlfbWFrZV9oeXBlcnZpc29yX25vZGUoY29uc3Qgc3RydWN0 IGtlcm5lbF9pbmZvICpraW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IG1lbWJhbmsgdGJsX2FkZFtdKQotewotICAgIGNvbnN0IGNoYXIgY29t cGF0W10gPQotICAgICAgICAieGVuLHhlbi0iX19zdHJpbmdpZnkoWEVOX1ZFUlNJT04pIi4iX19z dHJpbmdpZnkoWEVOX1NVQlZFUlNJT04pIlwwIgotICAgICAgICAieGVuLHhlbiI7Ci0gICAgaW50 IHJlczsKLSAgICAvKiBDb252ZW5pZW5jZSBhbGlhcyAqLwotICAgIHZvaWQgKmZkdCA9IGtpbmZv LT5mZHQ7Ci0KLSAgICBkdF9kcHJpbnRrKCJDcmVhdGUgaHlwZXJ2aXNvciBub2RlXG4iKTsKLQot ICAgIC8qIFNlZSBsaW51eCBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL3hl bi50eHQgKi8KLSAgICByZXMgPSBmZHRfYmVnaW5fbm9kZShmZHQsICJoeXBlcnZpc29yIik7Ci0g ICAgaWYgKCByZXMgKQotICAgICAgICByZXR1cm4gcmVzOwotCi0gICAgLyogQ2Fubm90IHVzZSBm ZHRfcHJvcGVydHlfc3RyaW5nIGR1ZSB0byBlbWJlZGRlZCBudWxscyAqLwotICAgIHJlcyA9IGZk dF9wcm9wZXJ0eShmZHQsICJjb21wYXRpYmxlIiwgY29tcGF0LCBzaXplb2YoY29tcGF0KSk7Ci0g ICAgaWYgKCByZXMgKQotICAgICAgICByZXR1cm4gcmVzOwotCi0gICAgcmVzID0gYWNwaV9tYWtl X2VmaV9ub2RlcyhmZHQsIHRibF9hZGQpOwotICAgIGlmICggcmVzICkKLSAgICAgICAgcmV0dXJu IHJlczsKLQotICAgIHJlcyA9IGZkdF9lbmRfbm9kZShmZHQpOwotCi0gICAgcmV0dXJuIHJlczsK LX0KLQotLyoKLSAqIFByZXBhcmUgYSBtaW5pbWFsIERUQiBmb3IgRG9tMCB3aGljaCBjb250YWlu cyBib290YXJncywgaW5pdHJkLCBtZW1vcnkKLSAqIGluZm9ybWF0aW9uLCBFRkkgdGFibGUuCi0g Ki8KLXN0YXRpYyBpbnQgX19pbml0IGNyZWF0ZV9hY3BpX2R0YihzdHJ1Y3Qga2VybmVsX2luZm8g KmtpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtZW1iYW5r IHRibF9hZGRbXSkKLXsKLSAgICBpbnQgbmV3X3NpemU7Ci0gICAgaW50IHJldDsKLQotICAgIGR0 X2RwcmludGsoIlByZXBhcmUgYSBtaW4gRFRCIGZvciBET00wXG4iKTsKLQotICAgIC8qIEFsbG9j YXRlIG1pbiBzaXplIGZvciBEVCAqLwotICAgIG5ld19zaXplID0gQUNQSV9ET00wX0ZEVF9NSU5f U0laRTsKLSAgICBraW5mby0+ZmR0ID0geG1hbGxvY19ieXRlcyhuZXdfc2l6ZSk7Ci0KLSAgICBp ZiAoIGtpbmZvLT5mZHQgPT0gTlVMTCApCi0gICAgICAgIHJldHVybiAtRU5PTUVNOwotCi0gICAg LyogQ3JlYXRlIGEgbmV3IGVtcHR5IERUIGZvciBET00wICovCi0gICAgcmV0ID0gZmR0X2NyZWF0 ZShraW5mby0+ZmR0LCBuZXdfc2l6ZSk7Ci0gICAgaWYgKCByZXQgPCAwICkKLSAgICAgICAgZ290 byBlcnI7Ci0KLSAgICByZXQgPSBmZHRfZmluaXNoX3Jlc2VydmVtYXAoa2luZm8tPmZkdCk7Ci0g ICAgaWYgKCByZXQgPCAwICkKLSAgICAgICAgZ290byBlcnI7Ci0KLSAgICByZXQgPSBmZHRfYmVn aW5fbm9kZShraW5mby0+ZmR0LCAiLyIpOwotICAgIGlmICggcmV0IDwgMCApCi0gICAgICAgIGdv dG8gZXJyOwotCi0gICAgcmV0ID0gZmR0X3Byb3BlcnR5X2NlbGwoa2luZm8tPmZkdCwgIiNhZGRy ZXNzLWNlbGxzIiwgMik7Ci0gICAgaWYgKCByZXQgKQotICAgICAgICByZXR1cm4gcmV0OwotCi0g ICAgcmV0ID0gZmR0X3Byb3BlcnR5X2NlbGwoa2luZm8tPmZkdCwgIiNzaXplLWNlbGxzIiwgMSk7 Ci0gICAgaWYgKCByZXQgKQotICAgICAgICByZXR1cm4gcmV0OwotCi0gICAgLyogQ3JlYXRlIGEg Y2hvc2VuIG5vZGUgZm9yIERPTTAgKi8KLSAgICByZXQgPSBtYWtlX2Nob3Nlbl9ub2RlKGtpbmZv KTsKLSAgICBpZiAoIHJldCApCi0gICAgICAgIGdvdG8gZXJyOwotCi0gICAgcmV0ID0gYWNwaV9t YWtlX2h5cGVydmlzb3Jfbm9kZShraW5mbywgdGJsX2FkZCk7Ci0gICAgaWYgKCByZXQgKQotICAg ICAgICBnb3RvIGVycjsKLQotICAgIHJldCA9IGZkdF9lbmRfbm9kZShraW5mby0+ZmR0KTsKLSAg ICBpZiAoIHJldCA8IDAgKQotICAgICAgICBnb3RvIGVycjsKLQotICAgIHJldCA9IGZkdF9maW5p c2goa2luZm8tPmZkdCk7Ci0gICAgaWYgKCByZXQgPCAwICkKLSAgICAgICAgZ290byBlcnI7Ci0K LSAgICByZXR1cm4gMDsKLQotICBlcnI6Ci0gICAgcHJpbnRrKCJEZXZpY2UgdHJlZSBnZW5lcmF0 aW9uIGZhaWxlZCAoJWQpLlxuIiwgcmV0KTsKLSAgICB4ZnJlZShraW5mby0+ZmR0KTsKLSAgICBy ZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IGFjcGlfbWFwX290aGVyX3Rh YmxlcyhzdHJ1Y3QgZG9tYWluICpkKQotewotICAgIGludCBpOwotICAgIHVuc2lnbmVkIGxvbmcg cmVzOwotICAgIHU2NCBhZGRyLCBzaXplOwotCi0gICAgLyogTWFwIGFsbCBBQ1BJIHRhYmxlcyB0 byBEb20wIHVzaW5nIDE6MSBtYXBwaW5ncy4gKi8KLSAgICBmb3IoIGkgPSAwOyBpIDwgYWNwaV9n Ymxfcm9vdF90YWJsZV9saXN0LmNvdW50OyBpKysgKQotICAgIHsKLSAgICAgICAgYWRkciA9IGFj cGlfZ2JsX3Jvb3RfdGFibGVfbGlzdC50YWJsZXNbaV0uYWRkcmVzczsKLSAgICAgICAgc2l6ZSA9 IGFjcGlfZ2JsX3Jvb3RfdGFibGVfbGlzdC50YWJsZXNbaV0ubGVuZ3RoOwotICAgICAgICByZXMg PSBtYXBfcmVnaW9uc19wMm10KGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Fk ZHJfdG9fZ2ZuKGFkZHIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBGTl9VUChz aXplKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWRkcl90b19tZm4oYWRkciks Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcDJtX21taW9fZGlyZWN0X2MpOwotICAg ICAgICBpZiAoIHJlcyApCi0gICAgICAgIHsKLSAgICAgICAgICAgICBwYW5pYyhYRU5MT0dfRVJS ICJVbmFibGUgdG8gbWFwIEFDUEkgcmVnaW9uIDB4JSJQUkl4NjQKLSAgICAgICAgICAgICAgICAg ICAiIC0gMHglIlBSSXg2NCIgaW4gZG9tYWluXG4iLAotICAgICAgICAgICAgICAgICAgIGFkZHIg JiBQQUdFX01BU0ssIFBBR0VfQUxJR04oYWRkciArIHNpemUpIC0gMSk7Ci0gICAgICAgIH0KLSAg ICB9Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGFjcGlfY3JlYXRlX3JzZHAoc3RydWN0IGRvbWFp biAqZCwgc3RydWN0IG1lbWJhbmsgdGJsX2FkZFtdKQotewotCi0gICAgc3RydWN0IGFjcGlfdGFi bGVfcnNkcCAqcnNkcCA9IE5VTEw7Ci0gICAgdTY0IGFkZHI7Ci0gICAgdTY0IHRhYmxlX3NpemUg PSBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfcnNkcCk7Ci0gICAgdTggKmJhc2VfcHRyOwotICAg IHU4IGNoZWNrc3VtOwotCi0gICAgYWRkciA9IGFjcGlfb3NfZ2V0X3Jvb3RfcG9pbnRlcigpOwot ICAgIGlmICggIWFkZHIgICkKLSAgICB7Ci0gICAgICAgIHByaW50aygiVW5hYmxlIHRvIGdldCBh Y3BpIHJvb3QgcG9pbnRlclxuIik7Ci0gICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgIH0KLSAg ICByc2RwID0gYWNwaV9vc19tYXBfbWVtb3J5KGFkZHIsIHRhYmxlX3NpemUpOwotICAgIGJhc2Vf cHRyID0gZC0+YXJjaC5lZmlfYWNwaV90YWJsZQotICAgICAgICAgICAgICAgKyBhY3BpX2dldF90 YWJsZV9vZmZzZXQodGJsX2FkZCwgVEJMX1JTRFApOwotICAgIG1lbWNweShiYXNlX3B0ciwgcnNk cCwgdGFibGVfc2l6ZSk7Ci0gICAgYWNwaV9vc191bm1hcF9tZW1vcnkocnNkcCwgdGFibGVfc2l6 ZSk7Ci0KLSAgICByc2RwID0gKHN0cnVjdCBhY3BpX3RhYmxlX3JzZHAgKiliYXNlX3B0cjsKLSAg ICAvKiBSZXBsYWNlIHhzZHRfcGh5c2ljYWxfYWRkcmVzcyAqLwotICAgIHJzZHAtPnhzZHRfcGh5 c2ljYWxfYWRkcmVzcyA9IHRibF9hZGRbVEJMX1hTRFRdLnN0YXJ0OwotICAgIGNoZWNrc3VtID0g YWNwaV90Yl9jaGVja3N1bShBQ1BJX0NBU1RfUFRSKHU4LCByc2RwKSwgdGFibGVfc2l6ZSk7Ci0g ICAgcnNkcC0+Y2hlY2tzdW0gPSByc2RwLT5jaGVja3N1bSAtIGNoZWNrc3VtOwotCi0gICAgdGJs X2FkZFtUQkxfUlNEUF0uc3RhcnQgPSBkLT5hcmNoLmVmaV9hY3BpX2dwYQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKyBhY3BpX2dldF90YWJsZV9vZmZzZXQodGJsX2FkZCwgVEJMX1JT RFApOwotICAgIHRibF9hZGRbVEJMX1JTRFBdLnNpemUgPSB0YWJsZV9zaXplOwotCi0gICAgcmV0 dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhY3BpX3hzZHRfbW9kaWZ5X2VudHJ5KHU2 NCBlbnRyeVtdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgbG9uZyBlbnRyeV9jb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKnNpZ25hdHVyZSwgdTY0IGFkZHIpCi17Ci0gICAgaW50IGk7Ci0gICAg c3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZTsKLSAgICB1NjQgc2l6ZSA9IHNpemVvZihz dHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIpOwotCi0gICAgZm9yKCBpID0gMDsgaSA8IGVudHJ5X2Nv dW50OyBpKysgKQotICAgIHsKLSAgICAgICAgdGFibGUgPSBhY3BpX29zX21hcF9tZW1vcnkoZW50 cnlbaV0sIHNpemUpOwotICAgICAgICBpZiAoIEFDUElfQ09NUEFSRV9OQU1FKHRhYmxlLT5zaWdu YXR1cmUsIHNpZ25hdHVyZSkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBlbnRyeVtpXSA9IGFk ZHI7Ci0gICAgICAgICAgICBhY3BpX29zX3VubWFwX21lbW9yeSh0YWJsZSwgc2l6ZSk7Ci0gICAg ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBhY3BpX29zX3VubWFwX21lbW9yeSh0 YWJsZSwgc2l6ZSk7Ci0gICAgfQotfQotCi1zdGF0aWMgaW50IF9faW5pdCBhY3BpX2NyZWF0ZV94 c2R0KHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdCBtZW1iYW5rIHRibF9hZGRbXSkKLXsKLSAgICBz dHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlID0gTlVMTDsKLSAgICBzdHJ1Y3QgYWNwaV90 YWJsZV9yc2RwICpyc2RwX3RibDsKLSAgICBzdHJ1Y3QgYWNwaV90YWJsZV94c2R0ICp4c2R0ID0g TlVMTDsKLSAgICB1NjQgdGFibGVfc2l6ZSwgYWRkcjsKLSAgICB1bnNpZ25lZCBsb25nIGVudHJ5 X2NvdW50OwotICAgIHU4ICpiYXNlX3B0cjsKLSAgICB1OCBjaGVja3N1bTsKLQotICAgIGFkZHIg PSBhY3BpX29zX2dldF9yb290X3BvaW50ZXIoKTsKLSAgICBpZiAoICFhZGRyICkKLSAgICB7Ci0g ICAgICAgIHByaW50aygiVW5hYmxlIHRvIGdldCBhY3BpIHJvb3QgcG9pbnRlclxuIik7Ci0gICAg ICAgIHJldHVybiAtRUlOVkFMOwotICAgIH0KLSAgICByc2RwX3RibCA9IGFjcGlfb3NfbWFwX21l bW9yeShhZGRyLCBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfcnNkcCkpOwotICAgIHRhYmxlID0g YWNwaV9vc19tYXBfbWVtb3J5KHJzZHBfdGJsLT54c2R0X3BoeXNpY2FsX2FkZHJlc3MsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRl cikpOwotCi0gICAgLyogQWRkIHBsYWNlIGZvciBTVEFPIHRhYmxlIGluIFhTRFQgdGFibGUgKi8K LSAgICB0YWJsZV9zaXplID0gdGFibGUtPmxlbmd0aCArIHNpemVvZih1NjQpOwotICAgIGVudHJ5 X2NvdW50ID0gKHRhYmxlLT5sZW5ndGggLSBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVy KSkKLSAgICAgICAgICAgICAgICAgIC8gc2l6ZW9mKHU2NCk7Ci0gICAgYmFzZV9wdHIgPSBkLT5h cmNoLmVmaV9hY3BpX3RhYmxlCi0gICAgICAgICAgICAgICArIGFjcGlfZ2V0X3RhYmxlX29mZnNl dCh0YmxfYWRkLCBUQkxfWFNEVCk7Ci0gICAgbWVtY3B5KGJhc2VfcHRyLCB0YWJsZSwgdGFibGUt Pmxlbmd0aCk7Ci0gICAgYWNwaV9vc191bm1hcF9tZW1vcnkodGFibGUsIHNpemVvZihzdHJ1Y3Qg YWNwaV90YWJsZV9oZWFkZXIpKTsKLSAgICBhY3BpX29zX3VubWFwX21lbW9yeShyc2RwX3RibCwg c2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX3JzZHApKTsKLQotICAgIHhzZHQgPSAoc3RydWN0IGFj cGlfdGFibGVfeHNkdCAqKWJhc2VfcHRyOwotICAgIGFjcGlfeHNkdF9tb2RpZnlfZW50cnkoeHNk dC0+dGFibGVfb2Zmc2V0X2VudHJ5LCBlbnRyeV9jb3VudCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgIEFDUElfU0lHX0ZBRFQsIHRibF9hZGRbVEJMX0ZBRFRdLnN0YXJ0KTsKLSAgICBhY3Bp X3hzZHRfbW9kaWZ5X2VudHJ5KHhzZHQtPnRhYmxlX29mZnNldF9lbnRyeSwgZW50cnlfY291bnQs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBBQ1BJX1NJR19NQURULCB0YmxfYWRkW1RCTF9N QURUXS5zdGFydCk7Ci0gICAgeHNkdC0+dGFibGVfb2Zmc2V0X2VudHJ5W2VudHJ5X2NvdW50XSA9 IHRibF9hZGRbVEJMX1NUQU9dLnN0YXJ0OwotCi0gICAgeHNkdC0+aGVhZGVyLmxlbmd0aCA9IHRh YmxlX3NpemU7Ci0gICAgY2hlY2tzdW0gPSBhY3BpX3RiX2NoZWNrc3VtKEFDUElfQ0FTVF9QVFIo dTgsIHhzZHQpLCB0YWJsZV9zaXplKTsKLSAgICB4c2R0LT5oZWFkZXIuY2hlY2tzdW0gLT0gY2hl Y2tzdW07Ci0KLSAgICB0YmxfYWRkW1RCTF9YU0RUXS5zdGFydCA9IGQtPmFyY2guZWZpX2FjcGlf Z3BhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGFjcGlfZ2V0X3RhYmxlX29mZnNl dCh0YmxfYWRkLCBUQkxfWFNEVCk7Ci0gICAgdGJsX2FkZFtUQkxfWFNEVF0uc2l6ZSA9IHRhYmxl X3NpemU7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfX2luaXQgYWNwaV9jcmVh dGVfc3RhbyhzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgbWVtYmFuayB0YmxfYWRkW10pCi17Ci0g ICAgc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSA9IE5VTEw7Ci0gICAgc3RydWN0IGFj cGlfdGFibGVfc3RhbyAqc3RhbyA9IE5VTEw7Ci0gICAgdTMyIHRhYmxlX3NpemUgPSBzaXplb2Yo c3RydWN0IGFjcGlfdGFibGVfc3Rhbyk7Ci0gICAgdTMyIG9mZnNldCA9IGFjcGlfZ2V0X3RhYmxl X29mZnNldCh0YmxfYWRkLCBUQkxfU1RBTyk7Ci0gICAgYWNwaV9zdGF0dXMgc3RhdHVzOwotICAg IHU4ICpiYXNlX3B0ciwgY2hlY2tzdW07Ci0KLSAgICAvKiBDb3B5IE9FTSBhbmQgQVNMIGNvbXBp bGVyIGZpZWxkcyBmcm9tIGFub3RoZXIgdGFibGUsIHVzZSBNQURUICovCi0gICAgc3RhdHVzID0g YWNwaV9nZXRfdGFibGUoQUNQSV9TSUdfTUFEVCwgMCwgJnRhYmxlKTsKLQotICAgIGlmICggQUNQ SV9GQUlMVVJFKHN0YXR1cykgKQotICAgIHsKLSAgICAgICAgY29uc3QgY2hhciAqbXNnID0gYWNw aV9mb3JtYXRfZXhjZXB0aW9uKHN0YXR1cyk7Ci0KLSAgICAgICAgcHJpbnRrKCJTVEFPOiBGYWls ZWQgdG8gZ2V0IE1BRFQgdGFibGUsICVzXG4iLCBtc2cpOwotICAgICAgICByZXR1cm4gLUVJTlZB TDsKLSAgICB9Ci0KLSAgICBiYXNlX3B0ciA9IGQtPmFyY2guZWZpX2FjcGlfdGFibGUgKyBvZmZz ZXQ7Ci0gICAgbWVtY3B5KGJhc2VfcHRyLCB0YWJsZSwgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxl X2hlYWRlcikpOwotCi0gICAgc3RhbyA9IChzdHJ1Y3QgYWNwaV90YWJsZV9zdGFvICopYmFzZV9w dHI7Ci0gICAgbWVtY3B5KHN0YW8tPmhlYWRlci5zaWduYXR1cmUsIEFDUElfU0lHX1NUQU8sIDQp OwotICAgIHN0YW8tPmhlYWRlci5yZXZpc2lvbiA9IDE7Ci0gICAgc3Rhby0+aGVhZGVyLmxlbmd0 aCA9IHRhYmxlX3NpemU7Ci0gICAgc3Rhby0+aWdub3JlX3VhcnQgPSAxOwotICAgIGNoZWNrc3Vt ID0gYWNwaV90Yl9jaGVja3N1bShBQ1BJX0NBU1RfUFRSKHU4LCBzdGFvKSwgdGFibGVfc2l6ZSk7 Ci0gICAgc3Rhby0+aGVhZGVyLmNoZWNrc3VtIC09IGNoZWNrc3VtOwotCi0gICAgdGJsX2FkZFtU QkxfU1RBT10uc3RhcnQgPSBkLT5hcmNoLmVmaV9hY3BpX2dwYSArIG9mZnNldDsKLSAgICB0Ymxf YWRkW1RCTF9TVEFPXS5zaXplID0gdGFibGVfc2l6ZTsKLQotICAgIHJldHVybiAwOwotfQotCi1z dGF0aWMgaW50IF9faW5pdCBhY3BpX2NyZWF0ZV9tYWR0KHN0cnVjdCBkb21haW4gKmQsIHN0cnVj dCBtZW1iYW5rIHRibF9hZGRbXSkKLXsKLSAgICBzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRh YmxlID0gTlVMTDsKLSAgICBzdHJ1Y3QgYWNwaV90YWJsZV9tYWR0ICptYWR0ID0gTlVMTDsKLSAg ICBzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIgKmhlYWRlcjsKLSAgICBzdHJ1Y3QgYWNwaV9t YWR0X2dlbmVyaWNfZGlzdHJpYnV0b3IgKmdpY2Q7Ci0gICAgdTMyIHRhYmxlX3NpemUgPSBzaXpl b2Yoc3RydWN0IGFjcGlfdGFibGVfbWFkdCk7Ci0gICAgdTMyIG9mZnNldCA9IGFjcGlfZ2V0X3Rh YmxlX29mZnNldCh0YmxfYWRkLCBUQkxfTUFEVCk7Ci0gICAgaW50IHJldDsKLSAgICBhY3BpX3N0 YXR1cyBzdGF0dXM7Ci0gICAgdTggKmJhc2VfcHRyLCBjaGVja3N1bTsKLQotICAgIHN0YXR1cyA9 IGFjcGlfZ2V0X3RhYmxlKEFDUElfU0lHX01BRFQsIDAsICZ0YWJsZSk7Ci0KLSAgICBpZiAoIEFD UElfRkFJTFVSRShzdGF0dXMpICkKLSAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKm1zZyA9IGFj cGlfZm9ybWF0X2V4Y2VwdGlvbihzdGF0dXMpOwotCi0gICAgICAgIHByaW50aygiRmFpbGVkIHRv IGdldCBNQURUIHRhYmxlLCAlc1xuIiwgbXNnKTsKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0g ICAgfQotCi0gICAgYmFzZV9wdHIgPSBkLT5hcmNoLmVmaV9hY3BpX3RhYmxlICsgb2Zmc2V0Owot ICAgIG1lbWNweShiYXNlX3B0ciwgdGFibGUsIHRhYmxlX3NpemUpOwotCi0gICAgLyogQWRkIEdl bmVyaWMgRGlzdHJpYnV0b3IuICovCi0gICAgaGVhZGVyID0gYWNwaV90YWJsZV9nZXRfZW50cnlf bWFkdChBQ1BJX01BRFRfVFlQRV9HRU5FUklDX0RJU1RSSUJVVE9SLCAwKTsKLSAgICBpZiAoICFo ZWFkZXIgKQotICAgIHsKLSAgICAgICAgcHJpbnRrKCJDYW4ndCBnZXQgR0lDRCBlbnRyeVxuIik7 Ci0gICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgIH0KLSAgICBnaWNkID0gY29udGFpbmVyX29m KGhlYWRlciwgc3RydWN0IGFjcGlfbWFkdF9nZW5lcmljX2Rpc3RyaWJ1dG9yLCBoZWFkZXIpOwot ICAgIG1lbWNweShiYXNlX3B0ciArIHRhYmxlX3NpemUsIGdpY2QsCi0gICAgICAgICAgICAgICAg c2l6ZW9mKHN0cnVjdCBhY3BpX21hZHRfZ2VuZXJpY19kaXN0cmlidXRvcikpOwotICAgIHRhYmxl X3NpemUgKz0gc2l6ZW9mKHN0cnVjdCBhY3BpX21hZHRfZ2VuZXJpY19kaXN0cmlidXRvcik7Ci0K LSAgICAvKiBBZGQgb3RoZXIgc3VidGFibGVzLiAqLwotICAgIHJldCA9IGdpY19tYWtlX2h3ZG9t X21hZHQoZCwgb2Zmc2V0ICsgdGFibGVfc2l6ZSk7Ci0gICAgaWYgKCByZXQgPCAwICkKLSAgICB7 Ci0gICAgICAgIHByaW50aygiRmFpbGVkIHRvIGdldCBvdGhlciBzdWJ0YWJsZXNcbiIpOwotICAg ICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICB9Ci0gICAgdGFibGVfc2l6ZSArPSByZXQ7Ci0KLSAg ICBtYWR0ID0gKHN0cnVjdCBhY3BpX3RhYmxlX21hZHQgKiliYXNlX3B0cjsKLSAgICBtYWR0LT5o ZWFkZXIubGVuZ3RoID0gdGFibGVfc2l6ZTsKLSAgICBjaGVja3N1bSA9IGFjcGlfdGJfY2hlY2tz dW0oQUNQSV9DQVNUX1BUUih1OCwgbWFkdCksIHRhYmxlX3NpemUpOwotICAgIG1hZHQtPmhlYWRl ci5jaGVja3N1bSAtPSBjaGVja3N1bTsKLQotICAgIHRibF9hZGRbVEJMX01BRFRdLnN0YXJ0ID0g ZC0+YXJjaC5lZmlfYWNwaV9ncGEgKyBvZmZzZXQ7Ci0gICAgdGJsX2FkZFtUQkxfTUFEVF0uc2l6 ZSA9IHRhYmxlX3NpemU7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfX2luaXQg YWNwaV9jcmVhdGVfZmFkdChzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgbWVtYmFuayB0YmxfYWRk W10pCi17Ci0gICAgc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSA9IE5VTEw7Ci0gICAg c3RydWN0IGFjcGlfdGFibGVfZmFkdCAqZmFkdCA9IE5VTEw7Ci0gICAgdTY0IHRhYmxlX3NpemU7 Ci0gICAgYWNwaV9zdGF0dXMgc3RhdHVzOwotICAgIHU4ICpiYXNlX3B0cjsKLSAgICB1OCBjaGVj a3N1bTsKLQotICAgIHN0YXR1cyA9IGFjcGlfZ2V0X3RhYmxlKEFDUElfU0lHX0ZBRFQsIDAsICZ0 YWJsZSk7Ci0KLSAgICBpZiAoIEFDUElfRkFJTFVSRShzdGF0dXMpICkKLSAgICB7Ci0gICAgICAg IGNvbnN0IGNoYXIgKm1zZyA9IGFjcGlfZm9ybWF0X2V4Y2VwdGlvbihzdGF0dXMpOwotCi0gICAg ICAgIHByaW50aygiRmFpbGVkIHRvIGdldCBGQURUIHRhYmxlLCAlc1xuIiwgbXNnKTsKLSAgICAg ICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgfQotCi0gICAgdGFibGVfc2l6ZSA9IHRhYmxlLT5sZW5n dGg7Ci0gICAgYmFzZV9wdHIgPSBkLT5hcmNoLmVmaV9hY3BpX3RhYmxlCi0gICAgICAgICAgICAg ICArIGFjcGlfZ2V0X3RhYmxlX29mZnNldCh0YmxfYWRkLCBUQkxfRkFEVCk7Ci0gICAgbWVtY3B5 KGJhc2VfcHRyLCB0YWJsZSwgdGFibGVfc2l6ZSk7Ci0gICAgZmFkdCA9IChzdHJ1Y3QgYWNwaV90 YWJsZV9mYWR0ICopYmFzZV9wdHI7Ci0KLSAgICAvKiBTZXQgUFNDSV9DT01QTElBTlQgYW5kIFBT Q0lfVVNFX0hWQyAqLwotICAgIGZhZHQtPmFybV9ib290X2ZsYWdzIHw9IChBQ1BJX0ZBRFRfUFND SV9DT01QTElBTlQgfCBBQ1BJX0ZBRFRfUFNDSV9VU0VfSFZDKTsKLSAgICBjaGVja3N1bSA9IGFj cGlfdGJfY2hlY2tzdW0oQUNQSV9DQVNUX1BUUih1OCwgZmFkdCksIHRhYmxlX3NpemUpOwotICAg IGZhZHQtPmhlYWRlci5jaGVja3N1bSAtPSBjaGVja3N1bTsKLQotICAgIHRibF9hZGRbVEJMX0ZB RFRdLnN0YXJ0ID0gZC0+YXJjaC5lZmlfYWNwaV9ncGEKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICsgYWNwaV9nZXRfdGFibGVfb2Zmc2V0KHRibF9hZGQsIFRCTF9GQURUKTsKLSAgICB0 YmxfYWRkW1RCTF9GQURUXS5zaXplID0gdGFibGVfc2l6ZTsKLQotICAgIHJldHVybiAwOwotfQot Ci1zdGF0aWMgaW50IF9faW5pdCBlc3RpbWF0ZV9hY3BpX2VmaV9zaXplKHN0cnVjdCBkb21haW4g KmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBrZXJu ZWxfaW5mbyAqa2luZm8pCi17Ci0gICAgc2l6ZV90IGVmaV9zaXplLCBhY3BpX3NpemUsIG1hZHRf c2l6ZTsKLSAgICB1NjQgYWRkcjsKLSAgICBzdHJ1Y3QgYWNwaV90YWJsZV9yc2RwICpyc2RwX3Ri bDsKLSAgICBzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlOwotCi0gICAgZWZpX3NpemUg PSBlc3RpbWF0ZV9lZmlfc2l6ZShraW5mby0+bWVtLm5yX2JhbmtzKTsKLQotICAgIGFjcGlfc2l6 ZSA9IFJPVU5EVVAoc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2ZhZHQpLCA4KTsKLSAgICBhY3Bp X3NpemUgKz0gUk9VTkRVUChzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfc3RhbyksIDgpOwotCi0g ICAgbWFkdF9zaXplID0gZ2ljX2dldF9od2RvbV9tYWR0X3NpemUoZCk7Ci0gICAgYWNwaV9zaXpl ICs9IFJPVU5EVVAobWFkdF9zaXplLCA4KTsKLQotICAgIGFkZHIgPSBhY3BpX29zX2dldF9yb290 X3BvaW50ZXIoKTsKLSAgICBpZiAoICFhZGRyICkKLSAgICB7Ci0gICAgICAgIHByaW50aygiVW5h YmxlIHRvIGdldCBhY3BpIHJvb3QgcG9pbnRlclxuIik7Ci0gICAgICAgIHJldHVybiAtRUlOVkFM OwotICAgIH0KLQotICAgIHJzZHBfdGJsID0gYWNwaV9vc19tYXBfbWVtb3J5KGFkZHIsIHNpemVv ZihzdHJ1Y3QgYWNwaV90YWJsZV9yc2RwKSk7Ci0gICAgaWYgKCAhcnNkcF90YmwgKQotICAgIHsK LSAgICAgICAgcHJpbnRrKCJVbmFibGUgdG8gbWFwIFJTRFAgdGFibGVcbiIpOwotICAgICAgICBy ZXR1cm4gLUVJTlZBTDsKLSAgICB9Ci0KLSAgICB0YWJsZSA9IGFjcGlfb3NfbWFwX21lbW9yeShy c2RwX3RibC0+eHNkdF9waHlzaWNhbF9hZGRyZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIpKTsKLSAgICBhY3BpX29zX3Vu bWFwX21lbW9yeShyc2RwX3RibCwgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX3JzZHApKTsKLSAg ICBpZiAoICF0YWJsZSApCi0gICAgewotICAgICAgICBwcmludGsoIlVuYWJsZSB0byBtYXAgWFNE VCB0YWJsZVxuIik7Ci0gICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgIH0KLQotICAgIC8qIEFk ZCBwbGFjZSBmb3IgU1RBTyB0YWJsZSBpbiBYU0RUIHRhYmxlICovCi0gICAgYWNwaV9zaXplICs9 IFJPVU5EVVAodGFibGUtPmxlbmd0aCArIHNpemVvZih1NjQpLCA4KTsKLSAgICBhY3BpX29zX3Vu bWFwX21lbW9yeSh0YWJsZSwgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcikpOwotCi0g ICAgYWNwaV9zaXplICs9IFJPVU5EVVAoc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX3JzZHApLCA4 KTsKLSAgICBkLT5hcmNoLmVmaV9hY3BpX2xlbiA9IFBBR0VfQUxJR04oUk9VTkRVUChlZmlfc2l6 ZSwgOCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBST1VORFVQKGFj cGlfc2l6ZSwgOCkpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBy ZXBhcmVfYWNwaShzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3Qga2VybmVsX2luZm8gKmtpbmZvKQot ewotICAgIGludCByYyA9IDA7Ci0gICAgaW50IG9yZGVyOwotICAgIHN0cnVjdCBtZW1iYW5rIHRi bF9hZGRbVEJMX01NQVhdID0ge307Ci0KLSAgICByYyA9IGVzdGltYXRlX2FjcGlfZWZpX3NpemUo ZCwga2luZm8pOwotICAgIGlmICggcmMgIT0gMCApCi0gICAgICAgIHJldHVybiByYzsKLQotICAg IG9yZGVyID0gZ2V0X29yZGVyX2Zyb21fYnl0ZXMoZC0+YXJjaC5lZmlfYWNwaV9sZW4pOwotICAg IGQtPmFyY2guZWZpX2FjcGlfdGFibGUgPSBhbGxvY194ZW5oZWFwX3BhZ2VzKG9yZGVyLCAwKTsK LSAgICBpZiAoIGQtPmFyY2guZWZpX2FjcGlfdGFibGUgPT0gTlVMTCApCi0gICAgewotICAgICAg ICBwcmludGsoInVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkhXG4iKTsKLSAgICAgICAgcmV0dXJu IC1FTk9NRU07Ci0gICAgfQotICAgIG1lbXNldChkLT5hcmNoLmVmaV9hY3BpX3RhYmxlLCAwLCBk LT5hcmNoLmVmaV9hY3BpX2xlbik7Ci0KLSAgICAvKgotICAgICAqIEZvciBBQ1BJLCBEb20wIGRv ZXNuJ3QgdXNlIGtpbmZvLT5nbnR0YWJfc3RhcnQgdG8gZ2V0IHRoZSBncmFudCB0YWJsZQotICAg ICAqIHJlZ2lvbi4gU28gd2UgdXNlIGl0IGFzIHRoZSBBQ1BJIHRhYmxlIG1hcHBlZCBhZGRyZXNz LiBBbHNvIGl0IG5lZWRzIHRvCi0gICAgICogY2hlY2sgaWYgdGhlIHNpemUgb2YgZ3JhbnQgdGFi bGUgcmVnaW9uIGlzIGVub3VnaCBmb3IgdGhvc2UgQUNQSSB0YWJsZXMuCi0gICAgICovCi0gICAg ZC0+YXJjaC5lZmlfYWNwaV9ncGEgPSBraW5mby0+Z250dGFiX3N0YXJ0OwotICAgIGlmICgga2lu Zm8tPmdudHRhYl9zaXplIDwgZC0+YXJjaC5lZmlfYWNwaV9sZW4gKQotICAgIHsKLSAgICAgICAg cHJpbnRrKCJUaGUgZ3JhbnQgdGFibGUgcmVnaW9uIGlzIG5vdCBlbm91Z2ggdG8gZml0IHRoZSBB Q1BJIHRhYmxlcyFcbiIpOwotICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICB9Ci0KLSAgICBy YyA9IGFjcGlfY3JlYXRlX2ZhZHQoZCwgdGJsX2FkZCk7Ci0gICAgaWYgKCByYyAhPSAwICkKLSAg ICAgICAgcmV0dXJuIHJjOwotCi0gICAgcmMgPSBhY3BpX2NyZWF0ZV9tYWR0KGQsIHRibF9hZGQp OwotICAgIGlmICggcmMgIT0gMCApCi0gICAgICAgIHJldHVybiByYzsKLQotICAgIHJjID0gYWNw aV9jcmVhdGVfc3RhbyhkLCB0YmxfYWRkKTsKLSAgICBpZiAoIHJjICE9IDAgKQotICAgICAgICBy ZXR1cm4gcmM7Ci0KLSAgICByYyA9IGFjcGlfY3JlYXRlX3hzZHQoZCwgdGJsX2FkZCk7Ci0gICAg aWYgKCByYyAhPSAwICkKLSAgICAgICAgcmV0dXJuIHJjOwotCi0gICAgcmMgPSBhY3BpX2NyZWF0 ZV9yc2RwKGQsIHRibF9hZGQpOwotICAgIGlmICggcmMgIT0gMCApCi0gICAgICAgIHJldHVybiBy YzsKLQotICAgIGFjcGlfbWFwX290aGVyX3RhYmxlcyhkKTsKLSAgICBhY3BpX2NyZWF0ZV9lZmlf c3lzdGVtX3RhYmxlKGQsIHRibF9hZGQpOwotICAgIGFjcGlfY3JlYXRlX2VmaV9tbWFwX3RhYmxl KGQsICZraW5mby0+bWVtLCB0YmxfYWRkKTsKLQotICAgIC8qIE1hcCB0aGUgRUZJIGFuZCBBQ1BJ IHRhYmxlcyB0byBEb20wICovCi0gICAgcmMgPSBtYXBfcmVnaW9uc19wMm10KGQsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgIGdhZGRyX3RvX2dmbihkLT5hcmNoLmVmaV9hY3BpX2dwYSksCi0g ICAgICAgICAgICAgICAgICAgICAgICAgIFBGTl9VUChkLT5hcmNoLmVmaV9hY3BpX2xlbiksCi0g ICAgICAgICAgICAgICAgICAgICAgICAgIHZpcnRfdG9fbWZuKGQtPmFyY2guZWZpX2FjcGlfdGFi bGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBwMm1fbW1pb19kaXJlY3RfYyk7Ci0gICAg aWYgKCByYyAhPSAwICkKLSAgICB7Ci0gICAgICAgIHByaW50ayhYRU5MT0dfRVJSICJVbmFibGUg dG8gbWFwIEVGSS9BQ1BJIHRhYmxlIDB4JSJQUkl4NjQKLSAgICAgICAgICAgICAgICIgLSAweCUi UFJJeDY0IiBpbiBkb21haW4gJWRcbiIsCi0gICAgICAgICAgICAgICBkLT5hcmNoLmVmaV9hY3Bp X2dwYSAmIFBBR0VfTUFTSywKLSAgICAgICAgICAgICAgIFBBR0VfQUxJR04oZC0+YXJjaC5lZmlf YWNwaV9ncGEgKyBkLT5hcmNoLmVmaV9hY3BpX2xlbikgLSAxLAotICAgICAgICAgICAgICAgZC0+ ZG9tYWluX2lkKTsKLSAgICAgICAgcmV0dXJuIHJjOwotICAgIH0KLQotICAgIC8qCi0gICAgICog Rmx1c2ggdGhlIGNhY2hlIGZvciB0aGlzIHJlZ2lvbiwgb3RoZXJ3aXNlIERPTTAgbWF5IHJlYWQg d3JvbmcgZGF0YSB3aGVuCi0gICAgICogdGhlIGNhY2hlIGlzIGRpc2FibGVkLgotICAgICAqLwot ICAgIGNsZWFuX2FuZF9pbnZhbGlkYXRlX2RjYWNoZV92YV9yYW5nZShkLT5hcmNoLmVmaV9hY3Bp X3RhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLT5hcmNo LmVmaV9hY3BpX2xlbik7Ci0KLSAgICByYyA9IGNyZWF0ZV9hY3BpX2R0YihraW5mbywgdGJsX2Fk ZCk7Ci0gICAgaWYgKCByYyAhPSAwICkKLSAgICAgICAgcmV0dXJuIHJjOwotCi0gICAgcmMgPSBh Y3BpX3JvdXRlX3NwaXMoZCk7Ci0gICAgaWYgKCByYyAhPSAwICkKLSAgICAgICAgcmV0dXJuIHJj OwotCi0gICAgcmMgPSBhY3BpX2lvbWVtX2RlbnlfYWNjZXNzKGQpOwotICAgIGlmICggcmMgIT0g MCApCi0gICAgICAgIHJldHVybiByYzsKLQotICAgIC8qCi0gICAgICogQWxsIFBQSXMgaGF2ZSBi ZWVuIHJlZ2lzdGVyZWQsIGFsbG9jYXRlIHRoZSBldmVudCBjaGFubmVsCi0gICAgICogaW50ZXJy dXB0cy4KLSAgICAgKi8KLSAgICBldnRjaG5fYWxsb2NhdGUoZCk7Ci0KLSAgICByZXR1cm4gMDsK LX0KLSNlbHNlCi1zdGF0aWMgaW50IF9faW5pdCBwcmVwYXJlX2FjcGkoc3RydWN0IGRvbWFpbiAq ZCwgc3RydWN0IGtlcm5lbF9pbmZvICpraW5mbykKLXsKLSAgICAvKiBPbmx5IGJvb3Rpbmcgd2l0 aCBBQ1BJIHdpbGwgaGl0IGhlcmUgKi8KLSAgICBCVUcoKTsKLSAgICByZXR1cm4gLUVJTlZBTDsK LX0KLSNlbmRpZgogc3RhdGljIHZvaWQgX19pbml0IGR0Yl9sb2FkKHN0cnVjdCBrZXJuZWxfaW5m byAqa2luZm8pCiB7CiAgICAgdW5zaWduZWQgbG9uZyBsZWZ0OwpAQCAtMjQ0Myw3ICsxODY4LDcg QEAgc3RhdGljIHZvaWQgX19pbml0IGluaXRyZF9sb2FkKHN0cnVjdCBrZXJuZWxfaW5mbyAqa2lu Zm8pCiAgKiBOb3RlIHRoYXQgdGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSBhbGwgUFBJ cyB1c2VkIGJ5IHRoZQogICogaGFyZHdhcmUgZG9tYWluIGhhdmUgYmVlbiByZWdpc3RlcmVkLgog ICovCi1zdGF0aWMgdm9pZCBfX2luaXQgZXZ0Y2huX2FsbG9jYXRlKHN0cnVjdCBkb21haW4gKmQp Cit2b2lkIF9faW5pdCBldnRjaG5fYWxsb2NhdGUoc3RydWN0IGRvbWFpbiAqZCkKIHsKICAgICBp bnQgcmVzOwogICAgIHU2NCB2YWw7CmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20tYXJtL2Rv bWFpbl9idWlsZC5oIGIveGVuL2luY2x1ZGUvYXNtLWFybS9kb21haW5fYnVpbGQuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGNlZGRjCi0tLSAvZGV2L251bGwKKysrIGIv eGVuL2luY2x1ZGUvYXNtLWFybS9kb21haW5fYnVpbGQuaApAQCAtMCwwICsxLDMxIEBACisjaWZu ZGVmIF9fQVNNX0RPTUFJTl9CVUlMRF9IX18KKyNkZWZpbmUgX19BU01fRE9NQUlOX0JVSUxEX0hf XworCisjaW5jbHVkZSA8eGVuL3NjaGVkLmg+CisjaW5jbHVkZSA8YXNtL2tlcm5lbC5oPgorCitp bnQgbWFwX2lycV90b19kb21haW4oc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgaW50IGlycSwK KyAgICAgICAgICAgICAgICAgICAgICBib29sIG5lZWRfbWFwcGluZywgY29uc3QgY2hhciAqZGV2 bmFtZSk7CitpbnQgbWFrZV9jaG9zZW5fbm9kZShjb25zdCBzdHJ1Y3Qga2VybmVsX2luZm8gKmtp bmZvKTsKK3ZvaWQgZXZ0Y2huX2FsbG9jYXRlKHN0cnVjdCBkb21haW4gKmQpOworCisjaWZuZGVm IENPTkZJR19BQ1BJCitzdGF0aWMgaW5saW5lIGludCBwcmVwYXJlX2FjcGkoc3RydWN0IGRvbWFp biAqZCwgc3RydWN0IGtlcm5lbF9pbmZvICpraW5mbykKK3sKKyAgICAvKiBPbmx5IGJvb3Rpbmcg d2l0aCBBQ1BJIHdpbGwgaGl0IGhlcmUgKi8KKyAgICBCVUcoKTsKKyAgICByZXR1cm4gLUVJTlZB TDsKK30KKyNlbHNlCitpbnQgcHJlcGFyZV9hY3BpKHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdCBr ZXJuZWxfaW5mbyAqa2luZm8pOworI2VuZGlmCisjZW5kaWYKKworLyoKKyAqIExvY2FsIHZhcmlh YmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMtYmFzaWMtb2Zm c2V0OiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwotLSAKMS45LjEK CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2 ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xp c3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs