From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: [PATCH 06/14] drm: extract drm_atomic_uapi.c Date: Mon, 3 Sep 2018 18:54:31 +0200 Message-ID: <20180903165439.24845-6-daniel.vetter@ffwll.ch> References: <20180903165439.24845-1-daniel.vetter@ffwll.ch> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180903165439.24845-1-daniel.vetter-/w4YWyX8dFk@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: DRI Development Cc: David Airlie , Daniel Vetter , Intel Graphics Development , Joonas Lahtinen , Maarten Lankhorst , Rob Clark , Jani Nikula , Eric Anholt , Rodrigo Vivi , Sean Paul , Gustavo Padovan , Daniel Vetter , freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org VGhpcyBsZWF2ZXMgYWxsIHRoZSBjb21taXQvY2hlY2sgYW5kIHN0YXRlIGhhbmRsaW5nIGluIGRy bV9hdG9taWMuYywKd2hpbGUgcHVsbGluZyBhbGwgdGhlIHVhcGkgZ2x1ZSBhbmQgdGhlIGh1Z2Ug aW9jdGwgaXRzZWxmIGludG8gYQpzZXByYXRlIGZpbGUuCgpUaGlzIHNlZW1zIHRvIGFsbW9zdCBw ZXJmZWN0bHkgc3BsaXQgdGhlIHJhdGhlciBiaWcgZHJtX2F0b21pYy5jIGZpbGUKaW50byAyIGVx dWFsIHNpemVzLgoKQWxzbyBhZGp1c3QgdGhlIGtlcm5lbGRvYyBhbmQgdHlwZSBhIHZlcnkgdGVy c2Ugb3ZlcnZpZXcgdGV4dC4KCnYyOiBSZWJhc2UuCgp2MzogRml4IHRpbnkgdHlwby4KClNpZ25l ZC1vZmYtYnk6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAaW50ZWwuY29tPgpDYzogRGF2 aWQgQWlybGllIDxhaXJsaWVkQGxpbnV4LmllPgpDYzogR3VzdGF2byBQYWRvdmFuIDxndXN0YXZv QHBhZG92YW4ub3JnPgpDYzogTWFhcnRlbiBMYW5raG9yc3QgPG1hYXJ0ZW4ubGFua2hvcnN0QGxp bnV4LmludGVsLmNvbT4KQ2M6IFNlYW4gUGF1bCA8c2VhbnBhdWxAY2hyb21pdW0ub3JnPgpDYzog SmFuaSBOaWt1bGEgPGphbmkubmlrdWxhQGxpbnV4LmludGVsLmNvbT4KQ2M6IEpvb25hcyBMYWh0 aW5lbiA8am9vbmFzLmxhaHRpbmVuQGxpbnV4LmludGVsLmNvbT4KQ2M6IFJvZHJpZ28gVml2aSA8 cm9kcmlnby52aXZpQGludGVsLmNvbT4KQ2M6IFJvYiBDbGFyayA8cm9iZGNsYXJrQGdtYWlsLmNv bT4KQ2M6IEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+CkNjOiBpbnRlbC1nZnhAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCkNjOiBsaW51eC1hcm0tbXNtQHZnZXIua2VybmVsLm9yZwpDYzogZnJl ZWRyZW5vQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwotLS0KIERvY3VtZW50YXRpb24vZ3B1L2RybS1r bXMucnN0ICAgICAgICAgICAgICAgIHwgICAxMSArLQogZHJpdmVycy9ncHUvZHJtL01ha2VmaWxl ICAgICAgICAgICAgICAgICAgICAgfCAgICAzICstCiBkcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21p Yy5jICAgICAgICAgICAgICAgICB8IDEzNTkgKy0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1 L2RybS9kcm1fYXRvbWljX2hlbHBlci5jICAgICAgICAgIHwgICAgMSArCiBkcml2ZXJzL2dwdS9k cm0vZHJtX2F0b21pY191YXBpLmMgICAgICAgICAgICB8IDEzOTMgKysrKysrKysrKysrKysrKysr CiBkcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMgICAgICAgICAgICB8ICAgIDEgKwog ZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2ludGVybmFsLmggICAgICAgICAgfCAgICA1ICsKIGRy aXZlcnMvZ3B1L2RybS9kcm1fZnJhbWVidWZmZXIuYyAgICAgICAgICAgIHwgICAgMSArCiBkcml2 ZXJzL2dwdS9kcm0vZHJtX2dlbV9mcmFtZWJ1ZmZlcl9oZWxwZXIuYyB8ICAgIDEgKwogZHJpdmVy cy9ncHUvZHJtL2RybV9wbGFuZV9oZWxwZXIuYyAgICAgICAgICAgfCAgICAxICsKIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyAgICAgICAgIHwgICAgMSArCiBkcml2ZXJzL2dw dS9kcm0vbXNtL21zbV9hdG9taWMuYyAgICAgICAgICAgICB8ICAgIDIgKwogZHJpdmVycy9ncHUv ZHJtL3ZjNC92YzRfY3J0Yy5jICAgICAgICAgICAgICAgfCAgICAxICsKIGRyaXZlcnMvZ3B1L2Ry bS92YzQvdmM0X3BsYW5lLmMgICAgICAgICAgICAgIHwgICAgMSArCiBpbmNsdWRlL2RybS9kcm1f YXRvbWljLmggICAgICAgICAgICAgICAgICAgICB8ICAgMTYgLQogaW5jbHVkZS9kcm0vZHJtX2F0 b21pY191YXBpLmggICAgICAgICAgICAgICAgfCAgIDU4ICsKIDE2IGZpbGVzIGNoYW5nZWQsIDE0 ODAgaW5zZXJ0aW9ucygrKSwgMTM3NSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY191YXBpLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNs dWRlL2RybS9kcm1fYXRvbWljX3VhcGkuaAoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1 L2RybS1rbXMucnN0IGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLWttcy5yc3QKaW5kZXggM2E5ZGQ2 OGI5N2M5Li40YjE1MDFiNDgzNWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1r bXMucnN0CisrKyBiL0RvY3VtZW50YXRpb24vZ3B1L2RybS1rbXMucnN0CkBAIC0yODcsNiArMjg3 LDE1IEBAIEF0b21pYyBNb2RlIFNldHRpbmcgRnVuY3Rpb24gUmVmZXJlbmNlCiAuLiBrZXJuZWwt ZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWMuYwogICAgOmV4cG9ydDoKIAorQXRvbWlj IE1vZGUgU2V0dGluZyBJT0NUTCBhbmQgVUFQSSBGdW5jdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dw dS9kcm0vZHJtX2F0b21pY191YXBpLmMKKyAgIDpkb2M6IG92ZXJ2aWV3CisKKy4uIGtlcm5lbC1k b2M6OiBkcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pY191YXBpLmMKKyAgIDpleHBvcnQ6CisKIENS VEMgQWJzdHJhY3Rpb24KID09PT09PT09PT09PT09PT0KIApAQCAtNTYzLDcgKzU3Miw3IEBAIFRp bGUgR3JvdXAgUHJvcGVydHkKIEV4cGxpY2l0IEZlbmNpbmcgUHJvcGVydGllcwogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCiAKLS4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vZHJt X2F0b21pYy5jCisuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfdWFw aS5jCiAgICA6ZG9jOiBleHBsaWNpdCBmZW5jaW5nIHByb3BlcnRpZXMKIAogRXhpc3RpbmcgS01T IFByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZl cnMvZ3B1L2RybS9NYWtlZmlsZQppbmRleCBhNjc3MWNlZjg1ZTIuLmJjNmExNmEzYzM2ZSAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9N YWtlZmlsZQpAQCAtMTgsNyArMTgsOCBAQCBkcm0teSAgICAgICA6PQlkcm1fYXV0aC5vIGRybV9i dWZzLm8gZHJtX2NhY2hlLm8gXAogCQlkcm1fZW5jb2Rlci5vIGRybV9tb2RlX29iamVjdC5vIGRy bV9wcm9wZXJ0eS5vIFwKIAkJZHJtX3BsYW5lLm8gZHJtX2NvbG9yX21nbXQubyBkcm1fcHJpbnQu byBcCiAJCWRybV9kdW1iX2J1ZmZlcnMubyBkcm1fbW9kZV9jb25maWcubyBkcm1fdmJsYW5rLm8g XAotCQlkcm1fc3luY29iai5vIGRybV9sZWFzZS5vIGRybV93cml0ZWJhY2subyBkcm1fY2xpZW50 Lm8KKwkJZHJtX3N5bmNvYmoubyBkcm1fbGVhc2UubyBkcm1fd3JpdGViYWNrLm8gZHJtX2NsaWVu dC5vIFwKKwkJZHJtX2F0b21pY191YXBpLm8KIAogZHJtLSQoQ09ORklHX0RSTV9MSUJfUkFORE9N KSArPSBsaWIvZHJtX3JhbmRvbS5vCiBkcm0tJChDT05GSUdfRFJNX1ZNKSArPSBkcm1fdm0ubwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWMuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9kcm1fYXRvbWljLmMKaW5kZXggMjlhNGU2OTU5MzU4Li4xOTYzNGUwM2I3OGUgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2Ry bV9hdG9taWMuYwpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KICNp bmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX3VhcGku aD4KICNpbmNsdWRlIDxkcm0vZHJtX21vZGUuaD4KICNpbmNsdWRlIDxkcm0vZHJtX3ByaW50Lmg+ CiAjaW5jbHVkZSA8ZHJtL2RybV93cml0ZWJhY2suaD4KQEAgLTMwOSwyODUgKzMxMCw2IEBAIGRy bV9hdG9taWNfZ2V0X2NydGNfc3RhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAog fQogRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2dldF9jcnRjX3N0YXRlKTsKIAotc3RhdGljIHZv aWQgc2V0X291dF9mZW5jZV9mb3JfY3J0YyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUs Ci0JCQkJICAgc3RydWN0IGRybV9jcnRjICpjcnRjLCBzMzIgX191c2VyICpmZW5jZV9wdHIpCi17 Ci0Jc3RhdGUtPmNydGNzW2RybV9jcnRjX2luZGV4KGNydGMpXS5vdXRfZmVuY2VfcHRyID0gZmVu Y2VfcHRyOwotfQotCi1zdGF0aWMgczMyIF9fdXNlciAqZ2V0X291dF9mZW5jZV9mb3JfY3J0Yyhz dHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCi0JCQkJCSAgc3RydWN0IGRybV9jcnRjICpj cnRjKQotewotCXMzMiBfX3VzZXIgKmZlbmNlX3B0cjsKLQotCWZlbmNlX3B0ciA9IHN0YXRlLT5j cnRjc1tkcm1fY3J0Y19pbmRleChjcnRjKV0ub3V0X2ZlbmNlX3B0cjsKLQlzdGF0ZS0+Y3J0Y3Nb ZHJtX2NydGNfaW5kZXgoY3J0YyldLm91dF9mZW5jZV9wdHIgPSBOVUxMOwotCi0JcmV0dXJuIGZl bmNlX3B0cjsKLX0KLQotc3RhdGljIGludCBzZXRfb3V0X2ZlbmNlX2Zvcl9jb25uZWN0b3Ioc3Ry dWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAotCQkJCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yLAotCQkJCQlzMzIgX191c2VyICpmZW5jZV9wdHIpCi17Ci0JdW5zaWduZWQgaW50 IGluZGV4ID0gZHJtX2Nvbm5lY3Rvcl9pbmRleChjb25uZWN0b3IpOwotCi0JaWYgKCFmZW5jZV9w dHIpCi0JCXJldHVybiAwOwotCi0JaWYgKHB1dF91c2VyKC0xLCBmZW5jZV9wdHIpKQotCQlyZXR1 cm4gLUVGQVVMVDsKLQotCXN0YXRlLT5jb25uZWN0b3JzW2luZGV4XS5vdXRfZmVuY2VfcHRyID0g ZmVuY2VfcHRyOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzMzIgX191c2VyICpnZXRfb3V0 X2ZlbmNlX2Zvcl9jb25uZWN0b3Ioc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAotCQkJ CQkgICAgICAgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKLXsKLQl1bnNpZ25lZCBp bnQgaW5kZXggPSBkcm1fY29ubmVjdG9yX2luZGV4KGNvbm5lY3Rvcik7Ci0JczMyIF9fdXNlciAq ZmVuY2VfcHRyOwotCi0JZmVuY2VfcHRyID0gc3RhdGUtPmNvbm5lY3RvcnNbaW5kZXhdLm91dF9m ZW5jZV9wdHI7Ci0Jc3RhdGUtPmNvbm5lY3RvcnNbaW5kZXhdLm91dF9mZW5jZV9wdHIgPSBOVUxM OwotCi0JcmV0dXJuIGZlbmNlX3B0cjsKLX0KLQotLyoqCi0gKiBkcm1fYXRvbWljX3NldF9tb2Rl X2Zvcl9jcnRjIC0gc2V0IG1vZGUgZm9yIENSVEMKLSAqIEBzdGF0ZTogdGhlIENSVEMgd2hvc2Ug aW5jb21pbmcgc3RhdGUgdG8gdXBkYXRlCi0gKiBAbW9kZToga2VybmVsLWludGVybmFsIG1vZGUg dG8gdXNlIGZvciB0aGUgQ1JUQywgb3IgTlVMTCB0byBkaXNhYmxlCi0gKgotICogU2V0IGEgbW9k ZSAob3JpZ2luYXRpbmcgZnJvbSB0aGUga2VybmVsKSBvbiB0aGUgZGVzaXJlZCBDUlRDIHN0YXRl IGFuZCB1cGRhdGUKLSAqIHRoZSBlbmFibGUgcHJvcGVydHkuCi0gKgotICogUkVUVVJOUzoKLSAq IFplcm8gb24gc3VjY2VzcywgZXJyb3IgY29kZSBvbiBmYWlsdXJlLiBDYW5ub3QgcmV0dXJuIC1F REVBRExLLgotICovCi1pbnQgZHJtX2F0b21pY19zZXRfbW9kZV9mb3JfY3J0YyhzdHJ1Y3QgZHJt X2NydGNfc3RhdGUgKnN0YXRlLAotCQkJCSBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZSkKLXsKLQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBzdGF0ZS0+Y3J0YzsKLQlzdHJ1Y3Qg ZHJtX21vZGVfbW9kZWluZm8gdW1vZGU7Ci0KLQkvKiBFYXJseSByZXR1cm4gZm9yIG5vIGNoYW5n ZS4gKi8KLQlpZiAobW9kZSAmJiBtZW1jbXAoJnN0YXRlLT5tb2RlLCBtb2RlLCBzaXplb2YoKm1v ZGUpKSA9PSAwKQotCQlyZXR1cm4gMDsKLQotCWRybV9wcm9wZXJ0eV9ibG9iX3B1dChzdGF0ZS0+ bW9kZV9ibG9iKTsKLQlzdGF0ZS0+bW9kZV9ibG9iID0gTlVMTDsKLQotCWlmIChtb2RlKSB7Ci0J CWRybV9tb2RlX2NvbnZlcnRfdG9fdW1vZGUoJnVtb2RlLCBtb2RlKTsKLQkJc3RhdGUtPm1vZGVf YmxvYiA9Ci0JCQlkcm1fcHJvcGVydHlfY3JlYXRlX2Jsb2Ioc3RhdGUtPmNydGMtPmRldiwKLQkJ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHVtb2RlKSwKLQkJICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJnVtb2RlKTsKLQkJaWYgKElTX0VSUihzdGF0ZS0+ bW9kZV9ibG9iKSkKLQkJCXJldHVybiBQVFJfRVJSKHN0YXRlLT5tb2RlX2Jsb2IpOwotCi0JCWRy bV9tb2RlX2NvcHkoJnN0YXRlLT5tb2RlLCBtb2RlKTsKLQkJc3RhdGUtPmVuYWJsZSA9IHRydWU7 Ci0JCURSTV9ERUJVR19BVE9NSUMoIlNldCBbTU9ERTolc10gZm9yIFtDUlRDOiVkOiVzXSBzdGF0 ZSAlcFxuIiwKLQkJCQkgbW9kZS0+bmFtZSwgY3J0Yy0+YmFzZS5pZCwgY3J0Yy0+bmFtZSwgc3Rh dGUpOwotCX0gZWxzZSB7Ci0JCW1lbXNldCgmc3RhdGUtPm1vZGUsIDAsIHNpemVvZihzdGF0ZS0+ bW9kZSkpOwotCQlzdGF0ZS0+ZW5hYmxlID0gZmFsc2U7Ci0JCURSTV9ERUJVR19BVE9NSUMoIlNl dCBbTk9NT0RFXSBmb3IgW0NSVEM6JWQ6JXNdIHN0YXRlICVwXG4iLAotCQkJCSBjcnRjLT5iYXNl LmlkLCBjcnRjLT5uYW1lLCBzdGF0ZSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lN Qk9MKGRybV9hdG9taWNfc2V0X21vZGVfZm9yX2NydGMpOwotCi0vKioKLSAqIGRybV9hdG9taWNf c2V0X21vZGVfcHJvcF9mb3JfY3J0YyAtIHNldCBtb2RlIGZvciBDUlRDCi0gKiBAc3RhdGU6IHRo ZSBDUlRDIHdob3NlIGluY29taW5nIHN0YXRlIHRvIHVwZGF0ZQotICogQGJsb2I6IHBvaW50ZXIg dG8gYmxvYiBwcm9wZXJ0eSB0byB1c2UgZm9yIG1vZGUKLSAqCi0gKiBTZXQgYSBtb2RlIChvcmln aW5hdGluZyBmcm9tIGEgYmxvYiBwcm9wZXJ0eSkgb24gdGhlIGRlc2lyZWQgQ1JUQyBzdGF0ZS4K LSAqIFRoaXMgZnVuY3Rpb24gd2lsbCB0YWtlIGEgcmVmZXJlbmNlIG9uIHRoZSBibG9iIHByb3Bl cnR5IGZvciB0aGUgQ1JUQyBzdGF0ZSwKLSAqIGFuZCByZWxlYXNlIHRoZSByZWZlcmVuY2UgaGVs ZCBvbiB0aGUgc3RhdGUncyBleGlzdGluZyBtb2RlIHByb3BlcnR5LCBpZiBhbnkKLSAqIHdhcyBz ZXQuCi0gKgotICogUkVUVVJOUzoKLSAqIFplcm8gb24gc3VjY2VzcywgZXJyb3IgY29kZSBvbiBm YWlsdXJlLiBDYW5ub3QgcmV0dXJuIC1FREVBRExLLgotICovCi1pbnQgZHJtX2F0b21pY19zZXRf bW9kZV9wcm9wX2Zvcl9jcnRjKHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAq YmxvYikKLXsKLQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBzdGF0ZS0+Y3J0YzsKLQotCWlmIChi bG9iID09IHN0YXRlLT5tb2RlX2Jsb2IpCi0JCXJldHVybiAwOwotCi0JZHJtX3Byb3BlcnR5X2Js b2JfcHV0KHN0YXRlLT5tb2RlX2Jsb2IpOwotCXN0YXRlLT5tb2RlX2Jsb2IgPSBOVUxMOwotCi0J bWVtc2V0KCZzdGF0ZS0+bW9kZSwgMCwgc2l6ZW9mKHN0YXRlLT5tb2RlKSk7Ci0KLQlpZiAoYmxv YikgewotCQlpbnQgcmV0OwotCi0JCWlmIChibG9iLT5sZW5ndGggIT0gc2l6ZW9mKHN0cnVjdCBk cm1fbW9kZV9tb2RlaW5mbykpIHsKLQkJCURSTV9ERUJVR19BVE9NSUMoIltDUlRDOiVkOiVzXSBi YWQgbW9kZSBibG9iIGxlbmd0aDogJXp1XG4iLAotCQkJCQkgY3J0Yy0+YmFzZS5pZCwgY3J0Yy0+ bmFtZSwKLQkJCQkJIGJsb2ItPmxlbmd0aCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0J CXJldCA9IGRybV9tb2RlX2NvbnZlcnRfdW1vZGUoY3J0Yy0+ZGV2LAotCQkJCQkgICAgICZzdGF0 ZS0+bW9kZSwgYmxvYi0+ZGF0YSk7Ci0JCWlmIChyZXQpIHsKLQkJCURSTV9ERUJVR19BVE9NSUMo IltDUlRDOiVkOiVzXSBpbnZhbGlkIG1vZGUgKHJldD0lZCwgc3RhdHVzPSVzKTpcbiIsCi0JCQkJ CSBjcnRjLT5iYXNlLmlkLCBjcnRjLT5uYW1lLAotCQkJCQkgcmV0LCBkcm1fZ2V0X21vZGVfc3Rh dHVzX25hbWUoc3RhdGUtPm1vZGUuc3RhdHVzKSk7Ci0JCQlkcm1fbW9kZV9kZWJ1Z19wcmludG1v ZGVsaW5lKCZzdGF0ZS0+bW9kZSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCXN0YXRl LT5tb2RlX2Jsb2IgPSBkcm1fcHJvcGVydHlfYmxvYl9nZXQoYmxvYik7Ci0JCXN0YXRlLT5lbmFi bGUgPSB0cnVlOwotCQlEUk1fREVCVUdfQVRPTUlDKCJTZXQgW01PREU6JXNdIGZvciBbQ1JUQzol ZDolc10gc3RhdGUgJXBcbiIsCi0JCQkJIHN0YXRlLT5tb2RlLm5hbWUsIGNydGMtPmJhc2UuaWQs IGNydGMtPm5hbWUsCi0JCQkJIHN0YXRlKTsKLQl9IGVsc2UgewotCQlzdGF0ZS0+ZW5hYmxlID0g ZmFsc2U7Ci0JCURSTV9ERUJVR19BVE9NSUMoIlNldCBbTk9NT0RFXSBmb3IgW0NSVEM6JWQ6JXNd IHN0YXRlICVwXG4iLAotCQkJCSBjcnRjLT5iYXNlLmlkLCBjcnRjLT5uYW1lLCBzdGF0ZSk7Ci0J fQotCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfc2V0X21vZGVfcHJv cF9mb3JfY3J0Yyk7Ci0KLXN0YXRpYyBpbnQKLWRybV9hdG9taWNfcmVwbGFjZV9wcm9wZXJ0eV9i bG9iX2Zyb21faWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCQkJIHN0cnVjdCBkcm1fcHJv cGVydHlfYmxvYiAqKmJsb2IsCi0JCQkJCSB1aW50NjRfdCBibG9iX2lkLAotCQkJCQkgc3NpemVf dCBleHBlY3RlZF9zaXplLAotCQkJCQkgc3NpemVfdCBleHBlY3RlZF9lbGVtX3NpemUsCi0JCQkJ CSBib29sICpyZXBsYWNlZCkKLXsKLQlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKm5ld19ibG9i ID0gTlVMTDsKLQotCWlmIChibG9iX2lkICE9IDApIHsKLQkJbmV3X2Jsb2IgPSBkcm1fcHJvcGVy dHlfbG9va3VwX2Jsb2IoZGV2LCBibG9iX2lkKTsKLQkJaWYgKG5ld19ibG9iID09IE5VTEwpCi0J CQlyZXR1cm4gLUVJTlZBTDsKLQotCQlpZiAoZXhwZWN0ZWRfc2l6ZSA+IDAgJiYKLQkJICAgIG5l d19ibG9iLT5sZW5ndGggIT0gZXhwZWN0ZWRfc2l6ZSkgewotCQkJZHJtX3Byb3BlcnR5X2Jsb2Jf cHV0KG5ld19ibG9iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWlmIChleHBlY3RlZF9l bGVtX3NpemUgPiAwICYmCi0JCSAgICBuZXdfYmxvYi0+bGVuZ3RoICUgZXhwZWN0ZWRfZWxlbV9z aXplICE9IDApIHsKLQkJCWRybV9wcm9wZXJ0eV9ibG9iX3B1dChuZXdfYmxvYik7Ci0JCQlyZXR1 cm4gLUVJTlZBTDsKLQkJfQotCX0KLQotCSpyZXBsYWNlZCB8PSBkcm1fcHJvcGVydHlfcmVwbGFj ZV9ibG9iKGJsb2IsIG5ld19ibG9iKTsKLQlkcm1fcHJvcGVydHlfYmxvYl9wdXQobmV3X2Jsb2Ip OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHJtX2F0b21pY19jcnRjX3NldF9wcm9w ZXJ0eShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3Rh dGUsIHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LAotCQl1aW50NjRfdCB2YWwpCi17Ci0J c3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKLQlzdHJ1Y3QgZHJtX21vZGVfY29u ZmlnICpjb25maWcgPSAmZGV2LT5tb2RlX2NvbmZpZzsKLQlib29sIHJlcGxhY2VkID0gZmFsc2U7 Ci0JaW50IHJldDsKLQotCWlmIChwcm9wZXJ0eSA9PSBjb25maWctPnByb3BfYWN0aXZlKQotCQlz dGF0ZS0+YWN0aXZlID0gdmFsOwotCWVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9t b2RlX2lkKSB7Ci0JCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqbW9kZSA9Ci0JCQlkcm1fcHJv cGVydHlfbG9va3VwX2Jsb2IoZGV2LCB2YWwpOwotCQlyZXQgPSBkcm1fYXRvbWljX3NldF9tb2Rl X3Byb3BfZm9yX2NydGMoc3RhdGUsIG1vZGUpOwotCQlkcm1fcHJvcGVydHlfYmxvYl9wdXQobW9k ZSk7Ci0JCXJldHVybiByZXQ7Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPmRlZ2Ft bWFfbHV0X3Byb3BlcnR5KSB7Ci0JCXJldCA9IGRybV9hdG9taWNfcmVwbGFjZV9wcm9wZXJ0eV9i bG9iX2Zyb21faWQoZGV2LAotCQkJCQkmc3RhdGUtPmRlZ2FtbWFfbHV0LAotCQkJCQl2YWwsCi0J CQkJCS0xLCBzaXplb2Yoc3RydWN0IGRybV9jb2xvcl9sdXQpLAotCQkJCQkmcmVwbGFjZWQpOwot CQlzdGF0ZS0+Y29sb3JfbWdtdF9jaGFuZ2VkIHw9IHJlcGxhY2VkOwotCQlyZXR1cm4gcmV0Owot CX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5jdG1fcHJvcGVydHkpIHsKLQkJcmV0ID0g ZHJtX2F0b21pY19yZXBsYWNlX3Byb3BlcnR5X2Jsb2JfZnJvbV9pZChkZXYsCi0JCQkJCSZzdGF0 ZS0+Y3RtLAotCQkJCQl2YWwsCi0JCQkJCXNpemVvZihzdHJ1Y3QgZHJtX2NvbG9yX2N0bSksIC0x LAotCQkJCQkmcmVwbGFjZWQpOwotCQlzdGF0ZS0+Y29sb3JfbWdtdF9jaGFuZ2VkIHw9IHJlcGxh Y2VkOwotCQlyZXR1cm4gcmV0OwotCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5nYW1t YV9sdXRfcHJvcGVydHkpIHsKLQkJcmV0ID0gZHJtX2F0b21pY19yZXBsYWNlX3Byb3BlcnR5X2Js b2JfZnJvbV9pZChkZXYsCi0JCQkJCSZzdGF0ZS0+Z2FtbWFfbHV0LAotCQkJCQl2YWwsCi0JCQkJ CS0xLCBzaXplb2Yoc3RydWN0IGRybV9jb2xvcl9sdXQpLAotCQkJCQkmcmVwbGFjZWQpOwotCQlz dGF0ZS0+Y29sb3JfbWdtdF9jaGFuZ2VkIHw9IHJlcGxhY2VkOwotCQlyZXR1cm4gcmV0OwotCX0g ZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX291dF9mZW5jZV9wdHIpIHsKLQkJczMy IF9fdXNlciAqZmVuY2VfcHRyID0gdTY0X3RvX3VzZXJfcHRyKHZhbCk7Ci0KLQkJaWYgKCFmZW5j ZV9wdHIpCi0JCQlyZXR1cm4gMDsKLQotCQlpZiAocHV0X3VzZXIoLTEsIGZlbmNlX3B0cikpCi0J CQlyZXR1cm4gLUVGQVVMVDsKLQotCQlzZXRfb3V0X2ZlbmNlX2Zvcl9jcnRjKHN0YXRlLT5zdGF0 ZSwgY3J0YywgZmVuY2VfcHRyKTsKLQl9IGVsc2UgaWYgKGNydGMtPmZ1bmNzLT5hdG9taWNfc2V0 X3Byb3BlcnR5KSB7Ci0JCXJldHVybiBjcnRjLT5mdW5jcy0+YXRvbWljX3NldF9wcm9wZXJ0eShj cnRjLCBzdGF0ZSwgcHJvcGVydHksIHZhbCk7Ci0JfSBlbHNlIHsKLQkJRFJNX0RFQlVHX0FUT01J QygiW0NSVEM6JWQ6JXNdIHVua25vd24gcHJvcGVydHkgW1BST1A6JWQ6JXNdXVxuIiwKLQkJCQkg Y3J0Yy0+YmFzZS5pZCwgY3J0Yy0+bmFtZSwKLQkJCQkgcHJvcGVydHktPmJhc2UuaWQsIHByb3Bl cnR5LT5uYW1lKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0 YXRpYyBpbnQKLWRybV9hdG9taWNfY3J0Y19nZXRfcHJvcGVydHkoc3RydWN0IGRybV9jcnRjICpj cnRjLAotCQljb25zdCBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlLAotCQlzdHJ1Y3QgZHJt X3Byb3BlcnR5ICpwcm9wZXJ0eSwgdWludDY0X3QgKnZhbCkKLXsKLQlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2ID0gY3J0Yy0+ZGV2OwotCXN0cnVjdCBkcm1fbW9kZV9jb25maWcgKmNvbmZpZyA9ICZk ZXYtPm1vZGVfY29uZmlnOwotCi0JaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9hY3RpdmUp Ci0JCSp2YWwgPSBzdGF0ZS0+YWN0aXZlOwotCWVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+ cHJvcF9tb2RlX2lkKQotCQkqdmFsID0gKHN0YXRlLT5tb2RlX2Jsb2IpID8gc3RhdGUtPm1vZGVf YmxvYi0+YmFzZS5pZCA6IDA7Ci0JZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5kZWdhbW1h X2x1dF9wcm9wZXJ0eSkKLQkJKnZhbCA9IChzdGF0ZS0+ZGVnYW1tYV9sdXQpID8gc3RhdGUtPmRl Z2FtbWFfbHV0LT5iYXNlLmlkIDogMDsKLQllbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPmN0 bV9wcm9wZXJ0eSkKLQkJKnZhbCA9IChzdGF0ZS0+Y3RtKSA/IHN0YXRlLT5jdG0tPmJhc2UuaWQg OiAwOwotCWVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+Z2FtbWFfbHV0X3Byb3BlcnR5KQot CQkqdmFsID0gKHN0YXRlLT5nYW1tYV9sdXQpID8gc3RhdGUtPmdhbW1hX2x1dC0+YmFzZS5pZCA6 IDA7Ci0JZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX291dF9mZW5jZV9wdHIpCi0J CSp2YWwgPSAwOwotCWVsc2UgaWYgKGNydGMtPmZ1bmNzLT5hdG9taWNfZ2V0X3Byb3BlcnR5KQot CQlyZXR1cm4gY3J0Yy0+ZnVuY3MtPmF0b21pY19nZXRfcHJvcGVydHkoY3J0Yywgc3RhdGUsIHBy b3BlcnR5LCB2YWwpOwotCWVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gMDsKLX0K LQogc3RhdGljIGludCBkcm1fYXRvbWljX2NydGNfY2hlY2soc3RydWN0IGRybV9jcnRjICpjcnRj LAogCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlKQogewpAQCAtNzYxLDE0NCArNDgzLDYg QEAgZHJtX2F0b21pY19nZXRfcGxhbmVfc3RhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0 YXRlLAogfQogRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2dldF9wbGFuZV9zdGF0ZSk7CiAKLS8q KgotICogZHJtX2F0b21pY19wbGFuZV9zZXRfcHJvcGVydHkgLSBzZXQgcHJvcGVydHkgb24gcGxh bmUKLSAqIEBwbGFuZTogdGhlIGRybSBwbGFuZSB0byBzZXQgYSBwcm9wZXJ0eSBvbgotICogQHN0 YXRlOiB0aGUgc3RhdGUgb2JqZWN0IHRvIHVwZGF0ZSB3aXRoIHRoZSBuZXcgcHJvcGVydHkgdmFs dWUKLSAqIEBwcm9wZXJ0eTogdGhlIHByb3BlcnR5IHRvIHNldAotICogQHZhbDogdGhlIG5ldyBw cm9wZXJ0eSB2YWx1ZQotICoKLSAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBnZW5lcmljL2NvcmUg cHJvcGVydGllcyBhbmQgY2FsbHMgb3V0IHRvIGRyaXZlcidzCi0gKiAmZHJtX3BsYW5lX2Z1bmNz LmF0b21pY19zZXRfcHJvcGVydHkgZm9yIGRyaXZlciBwcm9wZXJ0aWVzLiAgVG8gZW5zdXJlCi0g KiBjb25zaXN0ZW50IGJlaGF2aW9yIHlvdSBtdXN0IGNhbGwgdGhpcyBmdW5jdGlvbiByYXRoZXIg dGhhbiB0aGUgZHJpdmVyIGhvb2sKLSAqIGRpcmVjdGx5LgotICoKLSAqIFJFVFVSTlM6Ci0gKiBa ZXJvIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb24gZmFpbHVyZQotICovCi1zdGF0aWMgaW50IGRy bV9hdG9taWNfcGxhbmVfc2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAotCQlz dHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSwgc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVy dHksCi0JCXVpbnQ2NF90IHZhbCkKLXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGxhbmUt PmRldjsKLQlzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICpjb25maWcgPSAmZGV2LT5tb2RlX2NvbmZp ZzsKLQotCWlmIChwcm9wZXJ0eSA9PSBjb25maWctPnByb3BfZmJfaWQpIHsKLQkJc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZmIgPSBkcm1fZnJhbWVidWZmZXJfbG9va3VwKGRldiwgTlVMTCwgdmFs KTsKLQkJZHJtX2F0b21pY19zZXRfZmJfZm9yX3BsYW5lKHN0YXRlLCBmYik7Ci0JCWlmIChmYikK LQkJCWRybV9mcmFtZWJ1ZmZlcl9wdXQoZmIpOwotCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29u ZmlnLT5wcm9wX2luX2ZlbmNlX2ZkKSB7Ci0JCWlmIChzdGF0ZS0+ZmVuY2UpCi0JCQlyZXR1cm4g LUVJTlZBTDsKLQotCQlpZiAoVTY0Mkk2NCh2YWwpID09IC0xKQotCQkJcmV0dXJuIDA7Ci0KLQkJ c3RhdGUtPmZlbmNlID0gc3luY19maWxlX2dldF9mZW5jZSh2YWwpOwotCQlpZiAoIXN0YXRlLT5m ZW5jZSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25m aWctPnByb3BfY3J0Y19pZCkgewotCQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBkcm1fY3J0Y19m aW5kKGRldiwgTlVMTCwgdmFsKTsKLQkJcmV0dXJuIGRybV9hdG9taWNfc2V0X2NydGNfZm9yX3Bs YW5lKHN0YXRlLCBjcnRjKTsKLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9j cnRjX3gpIHsKLQkJc3RhdGUtPmNydGNfeCA9IFU2NDJJNjQodmFsKTsKLQl9IGVsc2UgaWYgKHBy b3BlcnR5ID09IGNvbmZpZy0+cHJvcF9jcnRjX3kpIHsKLQkJc3RhdGUtPmNydGNfeSA9IFU2NDJJ NjQodmFsKTsKLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9jcnRjX3cpIHsK LQkJc3RhdGUtPmNydGNfdyA9IHZhbDsKLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+ cHJvcF9jcnRjX2gpIHsKLQkJc3RhdGUtPmNydGNfaCA9IHZhbDsKLQl9IGVsc2UgaWYgKHByb3Bl cnR5ID09IGNvbmZpZy0+cHJvcF9zcmNfeCkgewotCQlzdGF0ZS0+c3JjX3ggPSB2YWw7Ci0JfSBl bHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnByb3Bfc3JjX3kpIHsKLQkJc3RhdGUtPnNyY195 ID0gdmFsOwotCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX3NyY193KSB7Ci0J CXN0YXRlLT5zcmNfdyA9IHZhbDsKLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJv cF9zcmNfaCkgewotCQlzdGF0ZS0+c3JjX2ggPSB2YWw7Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9 PSBwbGFuZS0+YWxwaGFfcHJvcGVydHkpIHsKLQkJc3RhdGUtPmFscGhhID0gdmFsOwotCX0gZWxz ZSBpZiAocHJvcGVydHkgPT0gcGxhbmUtPmJsZW5kX21vZGVfcHJvcGVydHkpIHsKLQkJc3RhdGUt PnBpeGVsX2JsZW5kX21vZGUgPSB2YWw7Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBwbGFuZS0+ cm90YXRpb25fcHJvcGVydHkpIHsKLQkJaWYgKCFpc19wb3dlcl9vZl8yKHZhbCAmIERSTV9NT0RF X1JPVEFURV9NQVNLKSkgewotCQkJRFJNX0RFQlVHX0FUT01JQygiW1BMQU5FOiVkOiVzXSBiYWQg cm90YXRpb24gYml0bWFzazogMHglbGx4XG4iLAotCQkJCQkgcGxhbmUtPmJhc2UuaWQsIHBsYW5l LT5uYW1lLCB2YWwpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJc3RhdGUtPnJvdGF0aW9u ID0gdmFsOwotCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gcGxhbmUtPnpwb3NfcHJvcGVydHkpIHsK LQkJc3RhdGUtPnpwb3MgPSB2YWw7Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBwbGFuZS0+Y29s b3JfZW5jb2RpbmdfcHJvcGVydHkpIHsKLQkJc3RhdGUtPmNvbG9yX2VuY29kaW5nID0gdmFsOwot CX0gZWxzZSBpZiAocHJvcGVydHkgPT0gcGxhbmUtPmNvbG9yX3JhbmdlX3Byb3BlcnR5KSB7Ci0J CXN0YXRlLT5jb2xvcl9yYW5nZSA9IHZhbDsKLQl9IGVsc2UgaWYgKHBsYW5lLT5mdW5jcy0+YXRv bWljX3NldF9wcm9wZXJ0eSkgewotCQlyZXR1cm4gcGxhbmUtPmZ1bmNzLT5hdG9taWNfc2V0X3By b3BlcnR5KHBsYW5lLCBzdGF0ZSwKLQkJCQlwcm9wZXJ0eSwgdmFsKTsKLQl9IGVsc2UgewotCQlE Uk1fREVCVUdfQVRPTUlDKCJbUExBTkU6JWQ6JXNdIHVua25vd24gcHJvcGVydHkgW1BST1A6JWQ6 JXNdXVxuIiwKLQkJCQkgcGxhbmUtPmJhc2UuaWQsIHBsYW5lLT5uYW1lLAotCQkJCSBwcm9wZXJ0 eS0+YmFzZS5pZCwgcHJvcGVydHktPm5hbWUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQly ZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotZHJtX2F0b21pY19wbGFuZV9nZXRfcHJvcGVydHko c3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCi0JCWNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUg KnN0YXRlLAotCQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwgdWludDY0X3QgKnZhbCkK LXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGxhbmUtPmRldjsKLQlzdHJ1Y3QgZHJtX21v ZGVfY29uZmlnICpjb25maWcgPSAmZGV2LT5tb2RlX2NvbmZpZzsKLQotCWlmIChwcm9wZXJ0eSA9 PSBjb25maWctPnByb3BfZmJfaWQpIHsKLQkJKnZhbCA9IChzdGF0ZS0+ZmIpID8gc3RhdGUtPmZi LT5iYXNlLmlkIDogMDsKLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9pbl9m ZW5jZV9mZCkgewotCQkqdmFsID0gLTE7Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWct PnByb3BfY3J0Y19pZCkgewotCQkqdmFsID0gKHN0YXRlLT5jcnRjKSA/IHN0YXRlLT5jcnRjLT5i YXNlLmlkIDogMDsKLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9jcnRjX3gp IHsKLQkJKnZhbCA9IEk2NDJVNjQoc3RhdGUtPmNydGNfeCk7Ci0JfSBlbHNlIGlmIChwcm9wZXJ0 eSA9PSBjb25maWctPnByb3BfY3J0Y195KSB7Ci0JCSp2YWwgPSBJNjQyVTY0KHN0YXRlLT5jcnRj X3kpOwotCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX2NydGNfdykgewotCQkq dmFsID0gc3RhdGUtPmNydGNfdzsKLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJv cF9jcnRjX2gpIHsKLQkJKnZhbCA9IHN0YXRlLT5jcnRjX2g7Ci0JfSBlbHNlIGlmIChwcm9wZXJ0 eSA9PSBjb25maWctPnByb3Bfc3JjX3gpIHsKLQkJKnZhbCA9IHN0YXRlLT5zcmNfeDsKLQl9IGVs c2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9zcmNfeSkgewotCQkqdmFsID0gc3RhdGUt PnNyY195OwotCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX3NyY193KSB7Ci0J CSp2YWwgPSBzdGF0ZS0+c3JjX3c7Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnBy b3Bfc3JjX2gpIHsKLQkJKnZhbCA9IHN0YXRlLT5zcmNfaDsKLQl9IGVsc2UgaWYgKHByb3BlcnR5 ID09IHBsYW5lLT5hbHBoYV9wcm9wZXJ0eSkgewotCQkqdmFsID0gc3RhdGUtPmFscGhhOwotCX0g ZWxzZSBpZiAocHJvcGVydHkgPT0gcGxhbmUtPmJsZW5kX21vZGVfcHJvcGVydHkpIHsKLQkJKnZh bCA9IHN0YXRlLT5waXhlbF9ibGVuZF9tb2RlOwotCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gcGxh bmUtPnJvdGF0aW9uX3Byb3BlcnR5KSB7Ci0JCSp2YWwgPSBzdGF0ZS0+cm90YXRpb247Ci0JfSBl bHNlIGlmIChwcm9wZXJ0eSA9PSBwbGFuZS0+enBvc19wcm9wZXJ0eSkgewotCQkqdmFsID0gc3Rh dGUtPnpwb3M7Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBwbGFuZS0+Y29sb3JfZW5jb2Rpbmdf cHJvcGVydHkpIHsKLQkJKnZhbCA9IHN0YXRlLT5jb2xvcl9lbmNvZGluZzsKLQl9IGVsc2UgaWYg KHByb3BlcnR5ID09IHBsYW5lLT5jb2xvcl9yYW5nZV9wcm9wZXJ0eSkgewotCQkqdmFsID0gc3Rh dGUtPmNvbG9yX3JhbmdlOwotCX0gZWxzZSBpZiAocGxhbmUtPmZ1bmNzLT5hdG9taWNfZ2V0X3By b3BlcnR5KSB7Ci0JCXJldHVybiBwbGFuZS0+ZnVuY3MtPmF0b21pY19nZXRfcHJvcGVydHkocGxh bmUsIHN0YXRlLCBwcm9wZXJ0eSwgdmFsKTsKLQl9IGVsc2UgewotCQlyZXR1cm4gLUVJTlZBTDsK LQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGJvb2wKIHBsYW5lX3N3aXRjaGluZ19jcnRj KHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKIAkJICAgICBzdHJ1Y3QgZHJtX3BsYW5l ICpwbGFuZSwKQEAgLTEyMzgsMTI5ICs4MjIsNiBAQCBkcm1fYXRvbWljX2dldF9jb25uZWN0b3Jf c3RhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAogfQogRVhQT1JUX1NZTUJPTChk cm1fYXRvbWljX2dldF9jb25uZWN0b3Jfc3RhdGUpOwogCi1zdGF0aWMgc3RydWN0IGRybV93cml0 ZWJhY2tfam9iICoKLWRybV9hdG9taWNfZ2V0X3dyaXRlYmFja19qb2Ioc3RydWN0IGRybV9jb25u ZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCi17Ci0JV0FSTl9PTihjb25uX3N0YXRlLT5jb25uZWN0 b3ItPmNvbm5lY3Rvcl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9XUklURUJBQ0spOwotCi0J aWYgKCFjb25uX3N0YXRlLT53cml0ZWJhY2tfam9iKQotCQljb25uX3N0YXRlLT53cml0ZWJhY2tf am9iID0KLQkJCWt6YWxsb2Moc2l6ZW9mKCpjb25uX3N0YXRlLT53cml0ZWJhY2tfam9iKSwgR0ZQ X0tFUk5FTCk7Ci0KLQlyZXR1cm4gY29ubl9zdGF0ZS0+d3JpdGViYWNrX2pvYjsKLX0KLQotc3Rh dGljIGludCBkcm1fYXRvbWljX3NldF93cml0ZWJhY2tfZmJfZm9yX2Nvbm5lY3RvcigKLQkJc3Ry dWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUsCi0JCXN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiKQotewotCXN0cnVjdCBkcm1fd3JpdGViYWNrX2pvYiAqam9iID0KLQkJZHJtX2F0 b21pY19nZXRfd3JpdGViYWNrX2pvYihjb25uX3N0YXRlKTsKLQlpZiAoIWpvYikKLQkJcmV0dXJu IC1FTk9NRU07Ci0KLQlkcm1fZnJhbWVidWZmZXJfYXNzaWduKCZqb2ItPmZiLCBmYik7Ci0KLQlp ZiAoZmIpCi0JCURSTV9ERUJVR19BVE9NSUMoIlNldCBbRkI6JWRdIGZvciBjb25uZWN0b3Igc3Rh dGUgJXBcbiIsCi0JCQkJIGZiLT5iYXNlLmlkLCBjb25uX3N0YXRlKTsKLQllbHNlCi0JCURSTV9E RUJVR19BVE9NSUMoIlNldCBbTk9GQl0gZm9yIGNvbm5lY3RvciBzdGF0ZSAlcFxuIiwKLQkJCQkg Y29ubl9zdGF0ZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkcm1fYXRvbWljX2Nv bm5lY3Rvcl9zZXRfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKLQkJ c3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpw cm9wZXJ0eSwKLQkJdWludDY0X3QgdmFsKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBj b25uZWN0b3ItPmRldjsKLQlzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICpjb25maWcgPSAmZGV2LT5t b2RlX2NvbmZpZzsKLQotCWlmIChwcm9wZXJ0eSA9PSBjb25maWctPnByb3BfY3J0Y19pZCkgewot CQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBkcm1fY3J0Y19maW5kKGRldiwgTlVMTCwgdmFsKTsK LQkJcmV0dXJuIGRybV9hdG9taWNfc2V0X2NydGNfZm9yX2Nvbm5lY3RvcihzdGF0ZSwgY3J0Yyk7 Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPmRwbXNfcHJvcGVydHkpIHsKLQkJLyog c2V0dGluZyBEUE1TIHByb3BlcnR5IHJlcXVpcmVzIHNwZWNpYWwgaGFuZGxpbmcsIHdoaWNoCi0J CSAqIGlzIGRvbmUgaW4gbGVnYWN5IHNldHByb3AgcGF0aCBmb3IgdXMuICBEaXNhbGxvdyAoZm9y Ci0JCSAqIG5vdz8pIGF0b21pYyB3cml0ZXMgdG8gRFBNUyBwcm9wZXJ0eToKLQkJICovCi0JCXJl dHVybiAtRUlOVkFMOwotCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT50dl9zZWxlY3Rf c3ViY29ubmVjdG9yX3Byb3BlcnR5KSB7Ci0JCXN0YXRlLT50di5zdWJjb25uZWN0b3IgPSB2YWw7 Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X2xlZnRfbWFyZ2luX3Byb3BlcnR5 KSB7Ci0JCXN0YXRlLT50di5tYXJnaW5zLmxlZnQgPSB2YWw7Ci0JfSBlbHNlIGlmIChwcm9wZXJ0 eSA9PSBjb25maWctPnR2X3JpZ2h0X21hcmdpbl9wcm9wZXJ0eSkgewotCQlzdGF0ZS0+dHYubWFy Z2lucy5yaWdodCA9IHZhbDsKLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+dHZfdG9w X21hcmdpbl9wcm9wZXJ0eSkgewotCQlzdGF0ZS0+dHYubWFyZ2lucy50b3AgPSB2YWw7Ci0JfSBl bHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X2JvdHRvbV9tYXJnaW5fcHJvcGVydHkpIHsK LQkJc3RhdGUtPnR2Lm1hcmdpbnMuYm90dG9tID0gdmFsOwotCX0gZWxzZSBpZiAocHJvcGVydHkg PT0gY29uZmlnLT50dl9tb2RlX3Byb3BlcnR5KSB7Ci0JCXN0YXRlLT50di5tb2RlID0gdmFsOwot CX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT50dl9icmlnaHRuZXNzX3Byb3BlcnR5KSB7 Ci0JCXN0YXRlLT50di5icmlnaHRuZXNzID0gdmFsOwotCX0gZWxzZSBpZiAocHJvcGVydHkgPT0g Y29uZmlnLT50dl9jb250cmFzdF9wcm9wZXJ0eSkgewotCQlzdGF0ZS0+dHYuY29udHJhc3QgPSB2 YWw7Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X2ZsaWNrZXJfcmVkdWN0aW9u X3Byb3BlcnR5KSB7Ci0JCXN0YXRlLT50di5mbGlja2VyX3JlZHVjdGlvbiA9IHZhbDsKLQl9IGVs c2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+dHZfb3ZlcnNjYW5fcHJvcGVydHkpIHsKLQkJc3Rh dGUtPnR2Lm92ZXJzY2FuID0gdmFsOwotCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT50 dl9zYXR1cmF0aW9uX3Byb3BlcnR5KSB7Ci0JCXN0YXRlLT50di5zYXR1cmF0aW9uID0gdmFsOwot CX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT50dl9odWVfcHJvcGVydHkpIHsKLQkJc3Rh dGUtPnR2Lmh1ZSA9IHZhbDsKLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+bGlua19z dGF0dXNfcHJvcGVydHkpIHsKLQkJLyogTmV2ZXIgZG93bmdyYWRlIGZyb20gR09PRCB0byBCQUQg b24gdXNlcnNwYWNlJ3MgcmVxdWVzdCBoZXJlLAotCQkgKiBvbmx5IGh3IGlzc3VlcyBjYW4gZG8g dGhhdC4KLQkJICoKLQkJICogRm9yIGFuIGF0b21pYyBwcm9wZXJ0eSB0aGUgdXNlcnNwYWNlIGRv ZXNuJ3QgbmVlZCB0byBiZSBhYmxlCi0JCSAqIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBwcm9wZXJ0 aWVzLCBidXQgbmVlZHMgdG8gYmUgYWJsZSB0bwotCQkgKiByZXN0b3JlIHRoZSBzdGF0ZSBpdCB3 YW50cyBvbiBWVCBzd2l0Y2guIFNvIGlmIHRoZSB1c2Vyc3BhY2UKLQkJICogdHJpZXMgdG8gY2hh bmdlIHRoZSBsaW5rX3N0YXR1cyBmcm9tIEdPT0QgdG8gQkFELCBkcml2ZXIKLQkJICogc2lsZW50 bHkgcmVqZWN0cyBpdCBhbmQgcmV0dXJucyBhIDAuIFRoaXMgcHJldmVudHMgdXNlcnNwYWNlCi0J CSAqIGZyb20gYWNjaWRlbnRseSBicmVha2luZyAgdGhlIGRpc3BsYXkgd2hlbiBpdCByZXN0b3Jl cyB0aGUKLQkJICogc3RhdGUuCi0JCSAqLwotCQlpZiAoc3RhdGUtPmxpbmtfc3RhdHVzICE9IERS TV9MSU5LX1NUQVRVU19HT09EKQotCQkJc3RhdGUtPmxpbmtfc3RhdHVzID0gdmFsOwotCX0gZWxz ZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5hc3BlY3RfcmF0aW9fcHJvcGVydHkpIHsKLQkJc3Rh dGUtPnBpY3R1cmVfYXNwZWN0X3JhdGlvID0gdmFsOwotCX0gZWxzZSBpZiAocHJvcGVydHkgPT0g Y29uZmlnLT5jb250ZW50X3R5cGVfcHJvcGVydHkpIHsKLQkJc3RhdGUtPmNvbnRlbnRfdHlwZSA9 IHZhbDsKLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbm5lY3Rvci0+c2NhbGluZ19tb2RlX3By b3BlcnR5KSB7Ci0JCXN0YXRlLT5zY2FsaW5nX21vZGUgPSB2YWw7Ci0JfSBlbHNlIGlmIChwcm9w ZXJ0eSA9PSBjb25uZWN0b3ItPmNvbnRlbnRfcHJvdGVjdGlvbl9wcm9wZXJ0eSkgewotCQlpZiAo dmFsID09IERSTV9NT0RFX0NPTlRFTlRfUFJPVEVDVElPTl9FTkFCTEVEKSB7Ci0JCQlEUk1fREVC VUdfS01TKCJvbmx5IGRyaXZlcnMgY2FuIHNldCBDUCBFbmFibGVkXG4iKTsKLQkJCXJldHVybiAt RUlOVkFMOwotCQl9Ci0JCXN0YXRlLT5jb250ZW50X3Byb3RlY3Rpb24gPSB2YWw7Ci0JfSBlbHNl IGlmIChwcm9wZXJ0eSA9PSBjb25maWctPndyaXRlYmFja19mYl9pZF9wcm9wZXJ0eSkgewotCQlz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IGRybV9mcmFtZWJ1ZmZlcl9sb29rdXAoZGV2LCBO VUxMLCB2YWwpOwotCQlpbnQgcmV0ID0gZHJtX2F0b21pY19zZXRfd3JpdGViYWNrX2ZiX2Zvcl9j b25uZWN0b3Ioc3RhdGUsIGZiKTsKLQkJaWYgKGZiKQotCQkJZHJtX2ZyYW1lYnVmZmVyX3B1dChm Yik7Ci0JCXJldHVybiByZXQ7Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPndyaXRl YmFja19vdXRfZmVuY2VfcHRyX3Byb3BlcnR5KSB7Ci0JCXMzMiBfX3VzZXIgKmZlbmNlX3B0ciA9 IHU2NF90b191c2VyX3B0cih2YWwpOwotCi0JCXJldHVybiBzZXRfb3V0X2ZlbmNlX2Zvcl9jb25u ZWN0b3Ioc3RhdGUtPnN0YXRlLCBjb25uZWN0b3IsCi0JCQkJCQkgICBmZW5jZV9wdHIpOwotCX0g ZWxzZSBpZiAoY29ubmVjdG9yLT5mdW5jcy0+YXRvbWljX3NldF9wcm9wZXJ0eSkgewotCQlyZXR1 cm4gY29ubmVjdG9yLT5mdW5jcy0+YXRvbWljX3NldF9wcm9wZXJ0eShjb25uZWN0b3IsCi0JCQkJ c3RhdGUsIHByb3BlcnR5LCB2YWwpOwotCX0gZWxzZSB7Ci0JCURSTV9ERUJVR19BVE9NSUMoIltD T05ORUNUT1I6JWQ6JXNdIHVua25vd24gcHJvcGVydHkgW1BST1A6JWQ6JXNdXVxuIiwKLQkJCQkg Y29ubmVjdG9yLT5iYXNlLmlkLCBjb25uZWN0b3ItPm5hbWUsCi0JCQkJIHByb3BlcnR5LT5iYXNl LmlkLCBwcm9wZXJ0eS0+bmFtZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAw OwotfQotCiBzdGF0aWMgdm9pZCBkcm1fYXRvbWljX2Nvbm5lY3Rvcl9wcmludF9zdGF0ZShzdHJ1 Y3QgZHJtX3ByaW50ZXIgKnAsCiAJCWNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpz dGF0ZSkKIHsKQEAgLTEzNzcsMjgxICs4MzgsNiBAQCBzdGF0aWMgdm9pZCBkcm1fYXRvbWljX2Nv bm5lY3Rvcl9wcmludF9zdGF0ZShzdHJ1Y3QgZHJtX3ByaW50ZXIgKnAsCiAJCWNvbm5lY3Rvci0+ ZnVuY3MtPmF0b21pY19wcmludF9zdGF0ZShwLCBzdGF0ZSk7CiB9CiAKLXN0YXRpYyBpbnQKLWRy bV9hdG9taWNfY29ubmVjdG9yX2dldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yLAotCQljb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqc3RhdGUsCi0JCXN0 cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LCB1aW50NjRfdCAqdmFsKQotewotCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKLQlzdHJ1Y3QgZHJtX21vZGVfY29uZmln ICpjb25maWcgPSAmZGV2LT5tb2RlX2NvbmZpZzsKLQotCWlmIChwcm9wZXJ0eSA9PSBjb25maWct PnByb3BfY3J0Y19pZCkgewotCQkqdmFsID0gKHN0YXRlLT5jcnRjKSA/IHN0YXRlLT5jcnRjLT5i YXNlLmlkIDogMDsKLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+ZHBtc19wcm9wZXJ0 eSkgewotCQkqdmFsID0gY29ubmVjdG9yLT5kcG1zOwotCX0gZWxzZSBpZiAocHJvcGVydHkgPT0g Y29uZmlnLT50dl9zZWxlY3Rfc3ViY29ubmVjdG9yX3Byb3BlcnR5KSB7Ci0JCSp2YWwgPSBzdGF0 ZS0+dHYuc3ViY29ubmVjdG9yOwotCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT50dl9s ZWZ0X21hcmdpbl9wcm9wZXJ0eSkgewotCQkqdmFsID0gc3RhdGUtPnR2Lm1hcmdpbnMubGVmdDsK LQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+dHZfcmlnaHRfbWFyZ2luX3Byb3BlcnR5 KSB7Ci0JCSp2YWwgPSBzdGF0ZS0+dHYubWFyZ2lucy5yaWdodDsKLQl9IGVsc2UgaWYgKHByb3Bl cnR5ID09IGNvbmZpZy0+dHZfdG9wX21hcmdpbl9wcm9wZXJ0eSkgewotCQkqdmFsID0gc3RhdGUt PnR2Lm1hcmdpbnMudG9wOwotCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT50dl9ib3R0 b21fbWFyZ2luX3Byb3BlcnR5KSB7Ci0JCSp2YWwgPSBzdGF0ZS0+dHYubWFyZ2lucy5ib3R0b207 Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X21vZGVfcHJvcGVydHkpIHsKLQkJ KnZhbCA9IHN0YXRlLT50di5tb2RlOwotCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT50 dl9icmlnaHRuZXNzX3Byb3BlcnR5KSB7Ci0JCSp2YWwgPSBzdGF0ZS0+dHYuYnJpZ2h0bmVzczsK LQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+dHZfY29udHJhc3RfcHJvcGVydHkpIHsK LQkJKnZhbCA9IHN0YXRlLT50di5jb250cmFzdDsKLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNv bmZpZy0+dHZfZmxpY2tlcl9yZWR1Y3Rpb25fcHJvcGVydHkpIHsKLQkJKnZhbCA9IHN0YXRlLT50 di5mbGlja2VyX3JlZHVjdGlvbjsKLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+dHZf b3ZlcnNjYW5fcHJvcGVydHkpIHsKLQkJKnZhbCA9IHN0YXRlLT50di5vdmVyc2NhbjsKLQl9IGVs c2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+dHZfc2F0dXJhdGlvbl9wcm9wZXJ0eSkgewotCQkq dmFsID0gc3RhdGUtPnR2LnNhdHVyYXRpb247Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25m aWctPnR2X2h1ZV9wcm9wZXJ0eSkgewotCQkqdmFsID0gc3RhdGUtPnR2Lmh1ZTsKLQl9IGVsc2Ug aWYgKHByb3BlcnR5ID09IGNvbmZpZy0+bGlua19zdGF0dXNfcHJvcGVydHkpIHsKLQkJKnZhbCA9 IHN0YXRlLT5saW5rX3N0YXR1czsKLQl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+YXNw ZWN0X3JhdGlvX3Byb3BlcnR5KSB7Ci0JCSp2YWwgPSBzdGF0ZS0+cGljdHVyZV9hc3BlY3RfcmF0 aW87Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPmNvbnRlbnRfdHlwZV9wcm9wZXJ0 eSkgewotCQkqdmFsID0gc3RhdGUtPmNvbnRlbnRfdHlwZTsKLQl9IGVsc2UgaWYgKHByb3BlcnR5 ID09IGNvbm5lY3Rvci0+c2NhbGluZ19tb2RlX3Byb3BlcnR5KSB7Ci0JCSp2YWwgPSBzdGF0ZS0+ c2NhbGluZ19tb2RlOwotCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29ubmVjdG9yLT5jb250ZW50 X3Byb3RlY3Rpb25fcHJvcGVydHkpIHsKLQkJKnZhbCA9IHN0YXRlLT5jb250ZW50X3Byb3RlY3Rp b247Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPndyaXRlYmFja19mYl9pZF9wcm9w ZXJ0eSkgewotCQkvKiBXcml0ZWJhY2sgZnJhbWVidWZmZXIgaXMgb25lLXNob3QsIHdyaXRlIGFu ZCBmb3JnZXQgKi8KLQkJKnZhbCA9IDA7Ci0JfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWct PndyaXRlYmFja19vdXRfZmVuY2VfcHRyX3Byb3BlcnR5KSB7Ci0JCSp2YWwgPSAwOwotCX0gZWxz ZSBpZiAoY29ubmVjdG9yLT5mdW5jcy0+YXRvbWljX2dldF9wcm9wZXJ0eSkgewotCQlyZXR1cm4g Y29ubmVjdG9yLT5mdW5jcy0+YXRvbWljX2dldF9wcm9wZXJ0eShjb25uZWN0b3IsCi0JCQkJc3Rh dGUsIHByb3BlcnR5LCB2YWwpOwotCX0gZWxzZSB7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQot CXJldHVybiAwOwotfQotCi1pbnQgZHJtX2F0b21pY19nZXRfcHJvcGVydHkoc3RydWN0IGRybV9t b2RlX29iamVjdCAqb2JqLAotCQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwgdWludDY0 X3QgKnZhbCkKLXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcHJvcGVydHktPmRldjsKLQlp bnQgcmV0OwotCi0Jc3dpdGNoIChvYmotPnR5cGUpIHsKLQljYXNlIERSTV9NT0RFX09CSkVDVF9D T05ORUNUT1I6IHsKLQkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IG9ial90b19j b25uZWN0b3Iob2JqKTsKLQkJV0FSTl9PTighZHJtX21vZGVzZXRfaXNfbG9ja2VkKCZkZXYtPm1v ZGVfY29uZmlnLmNvbm5lY3Rpb25fbXV0ZXgpKTsKLQkJcmV0ID0gZHJtX2F0b21pY19jb25uZWN0 b3JfZ2V0X3Byb3BlcnR5KGNvbm5lY3RvciwKLQkJCQljb25uZWN0b3ItPnN0YXRlLCBwcm9wZXJ0 eSwgdmFsKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgRFJNX01PREVfT0JKRUNUX0NSVEM6IHsKLQkJ c3RydWN0IGRybV9jcnRjICpjcnRjID0gb2JqX3RvX2NydGMob2JqKTsKLQkJV0FSTl9PTighZHJt X21vZGVzZXRfaXNfbG9ja2VkKCZjcnRjLT5tdXRleCkpOwotCQlyZXQgPSBkcm1fYXRvbWljX2Ny dGNfZ2V0X3Byb3BlcnR5KGNydGMsCi0JCQkJY3J0Yy0+c3RhdGUsIHByb3BlcnR5LCB2YWwpOwot CQlicmVhazsKLQl9Ci0JY2FzZSBEUk1fTU9ERV9PQkpFQ1RfUExBTkU6IHsKLQkJc3RydWN0IGRy bV9wbGFuZSAqcGxhbmUgPSBvYmpfdG9fcGxhbmUob2JqKTsKLQkJV0FSTl9PTighZHJtX21vZGVz ZXRfaXNfbG9ja2VkKCZwbGFuZS0+bXV0ZXgpKTsKLQkJcmV0ID0gZHJtX2F0b21pY19wbGFuZV9n ZXRfcHJvcGVydHkocGxhbmUsCi0JCQkJcGxhbmUtPnN0YXRlLCBwcm9wZXJ0eSwgdmFsKTsKLQkJ YnJlYWs7Ci0JfQotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCX0KLQot CXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogZHJtX2F0b21pY19zZXRfY3J0Y19mb3JfcGxhbmUg LSBzZXQgY3J0YyBmb3IgcGxhbmUKLSAqIEBwbGFuZV9zdGF0ZTogdGhlIHBsYW5lIHdob3NlIGlu Y29taW5nIHN0YXRlIHRvIHVwZGF0ZQotICogQGNydGM6IGNydGMgdG8gdXNlIGZvciB0aGUgcGxh bmUKLSAqCi0gKiBDaGFuZ2luZyB0aGUgYXNzaWduZWQgY3J0YyBmb3IgYSBwbGFuZSByZXF1aXJl cyB1cyB0byBncmFiIHRoZSBsb2NrIGFuZCBzdGF0ZQotICogZm9yIHRoZSBuZXcgY3J0YywgYXMg bmVlZGVkLiBUaGlzIGZ1bmN0aW9uIHRha2VzIGNhcmUgb2YgYWxsIHRoZXNlIGRldGFpbHMKLSAq IGJlc2lkZXMgdXBkYXRpbmcgdGhlIHBvaW50ZXIgaW4gdGhlIHN0YXRlIG9iamVjdCBpdHNlbGYu Ci0gKgotICogUmV0dXJuczoKLSAqIDAgb24gc3VjY2VzcyBvciBjYW4gZmFpbCB3aXRoIC1FREVB RExLIG9yIC1FTk9NRU0uIFdoZW4gdGhlIGVycm9yIGlzIEVERUFETEsKLSAqIHRoZW4gdGhlIHcv dyBtdXRleCBjb2RlIGhhcyBkZXRlY3RlZCBhIGRlYWRsb2NrIGFuZCB0aGUgZW50aXJlIGF0b21p YwotICogc2VxdWVuY2UgbXVzdCBiZSByZXN0YXJ0ZWQuIEFsbCBvdGhlciBlcnJvcnMgYXJlIGZh dGFsLgotICovCi1pbnQKLWRybV9hdG9taWNfc2V0X2NydGNfZm9yX3BsYW5lKHN0cnVjdCBkcm1f cGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAotCQkJICAgICAgc3RydWN0IGRybV9jcnRjICpjcnRj KQotewotCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gcGxhbmVfc3RhdGUtPnBsYW5lOwotCXN0 cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKLQkvKiBOb3RoaW5nIHRvIGRvIGZvciBz YW1lIGNydGMqLwotCWlmIChwbGFuZV9zdGF0ZS0+Y3J0YyA9PSBjcnRjKQotCQlyZXR1cm4gMDsK LQlpZiAocGxhbmVfc3RhdGUtPmNydGMpIHsKLQkJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0 X2NydGNfc3RhdGUocGxhbmVfc3RhdGUtPnN0YXRlLAotCQkJCQkJICAgICAgIHBsYW5lX3N0YXRl LT5jcnRjKTsKLQkJaWYgKFdBUk5fT04oSVNfRVJSKGNydGNfc3RhdGUpKSkKLQkJCXJldHVybiBQ VFJfRVJSKGNydGNfc3RhdGUpOwotCi0JCWNydGNfc3RhdGUtPnBsYW5lX21hc2sgJj0gfmRybV9w bGFuZV9tYXNrKHBsYW5lKTsKLQl9Ci0KLQlwbGFuZV9zdGF0ZS0+Y3J0YyA9IGNydGM7Ci0KLQlp ZiAoY3J0YykgewotCQljcnRjX3N0YXRlID0gZHJtX2F0b21pY19nZXRfY3J0Y19zdGF0ZShwbGFu ZV9zdGF0ZS0+c3RhdGUsCi0JCQkJCQkgICAgICAgY3J0Yyk7Ci0JCWlmIChJU19FUlIoY3J0Y19z dGF0ZSkpCi0JCQlyZXR1cm4gUFRSX0VSUihjcnRjX3N0YXRlKTsKLQkJY3J0Y19zdGF0ZS0+cGxh bmVfbWFzayB8PSBkcm1fcGxhbmVfbWFzayhwbGFuZSk7Ci0JfQotCi0JaWYgKGNydGMpCi0JCURS TV9ERUJVR19BVE9NSUMoIkxpbmsgW1BMQU5FOiVkOiVzXSBzdGF0ZSAlcCB0byBbQ1JUQzolZDol c11cbiIsCi0JCQkJIHBsYW5lLT5iYXNlLmlkLCBwbGFuZS0+bmFtZSwgcGxhbmVfc3RhdGUsCi0J CQkJIGNydGMtPmJhc2UuaWQsIGNydGMtPm5hbWUpOwotCWVsc2UKLQkJRFJNX0RFQlVHX0FUT01J QygiTGluayBbUExBTkU6JWQ6JXNdIHN0YXRlICVwIHRvIFtOT0NSVENdXG4iLAotCQkJCSBwbGFu ZS0+YmFzZS5pZCwgcGxhbmUtPm5hbWUsIHBsYW5lX3N0YXRlKTsKLQotCXJldHVybiAwOwotfQot RVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX3NldF9jcnRjX2Zvcl9wbGFuZSk7Ci0KLS8qKgotICog ZHJtX2F0b21pY19zZXRfZmJfZm9yX3BsYW5lIC0gc2V0IGZyYW1lYnVmZmVyIGZvciBwbGFuZQot ICogQHBsYW5lX3N0YXRlOiBhdG9taWMgc3RhdGUgb2JqZWN0IGZvciB0aGUgcGxhbmUKLSAqIEBm YjogZmIgdG8gdXNlIGZvciB0aGUgcGxhbmUKLSAqCi0gKiBDaGFuZ2luZyB0aGUgYXNzaWduZWQg ZnJhbWVidWZmZXIgZm9yIGEgcGxhbmUgcmVxdWlyZXMgdXMgdG8gZ3JhYiBhIHJlZmVyZW5jZQot ICogdG8gdGhlIG5ldyBmYiBhbmQgZHJvcCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBvbGQgZmIsIGlm IHRoZXJlIGlzIG9uZS4gVGhpcwotICogZnVuY3Rpb24gdGFrZXMgY2FyZSBvZiBhbGwgdGhlc2Ug ZGV0YWlscyBiZXNpZGVzIHVwZGF0aW5nIHRoZSBwb2ludGVyIGluIHRoZQotICogc3RhdGUgb2Jq ZWN0IGl0c2VsZi4KLSAqLwotdm9pZAotZHJtX2F0b21pY19zZXRfZmJfZm9yX3BsYW5lKHN0cnVj dCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAotCQkJICAgIHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiKQotewotCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gcGxhbmVfc3RhdGUtPnBs YW5lOwotCi0JaWYgKGZiKQotCQlEUk1fREVCVUdfQVRPTUlDKCJTZXQgW0ZCOiVkXSBmb3IgW1BM QU5FOiVkOiVzXSBzdGF0ZSAlcFxuIiwKLQkJCQkgZmItPmJhc2UuaWQsIHBsYW5lLT5iYXNlLmlk LCBwbGFuZS0+bmFtZSwKLQkJCQkgcGxhbmVfc3RhdGUpOwotCWVsc2UKLQkJRFJNX0RFQlVHX0FU T01JQygiU2V0IFtOT0ZCXSBmb3IgW1BMQU5FOiVkOiVzXSBzdGF0ZSAlcFxuIiwKLQkJCQkgcGxh bmUtPmJhc2UuaWQsIHBsYW5lLT5uYW1lLCBwbGFuZV9zdGF0ZSk7Ci0KLQlkcm1fZnJhbWVidWZm ZXJfYXNzaWduKCZwbGFuZV9zdGF0ZS0+ZmIsIGZiKTsKLX0KLUVYUE9SVF9TWU1CT0woZHJtX2F0 b21pY19zZXRfZmJfZm9yX3BsYW5lKTsKLQotLyoqCi0gKiBkcm1fYXRvbWljX3NldF9mZW5jZV9m b3JfcGxhbmUgLSBzZXQgZmVuY2UgZm9yIHBsYW5lCi0gKiBAcGxhbmVfc3RhdGU6IGF0b21pYyBz dGF0ZSBvYmplY3QgZm9yIHRoZSBwbGFuZQotICogQGZlbmNlOiBkbWFfZmVuY2UgdG8gdXNlIGZv ciB0aGUgcGxhbmUKLSAqCi0gKiBIZWxwZXIgdG8gc2V0dXAgdGhlIHBsYW5lX3N0YXRlIGZlbmNl IGluIGNhc2UgaXQgaXMgbm90IHNldCB5ZXQuCi0gKiBCeSB1c2luZyB0aGlzIGRyaXZlcnMgZG9l c24ndCBuZWVkIHRvIHdvcnJ5IGlmIHRoZSB1c2VyIGNob29zZQotICogaW1wbGljaXQgb3IgZXhw bGljaXQgZmVuY2luZy4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgbm90IHNldCB0aGUgZmVu Y2UgdG8gdGhlIHN0YXRlIGlmIGl0IHdhcyBzZXQKLSAqIHZpYSBleHBsaWNpdCBmZW5jaW5nIGlu dGVyZmFjZXMgb24gdGhlIGF0b21pYyBpb2N0bC4gSW4gdGhhdCBjYXNlIGl0IHdpbGwKLSAqIGRy b3AgdGhlIHJlZmVyZW5jZSB0byB0aGUgZmVuY2UgYXMgd2UgYXJlIG5vdCBzdG9yaW5nIGl0IGFu eXdoZXJlLgotICogT3RoZXJ3aXNlLCBpZiAmZHJtX3BsYW5lX3N0YXRlLmZlbmNlIGlzIG5vdCBz ZXQgdGhpcyBmdW5jdGlvbiB3ZSBqdXN0IHNldCBpdAotICogd2l0aCB0aGUgcmVjZWl2ZWQgaW1w bGljaXQgZmVuY2UuIEluIGJvdGggY2FzZXMgdGhpcyBmdW5jdGlvbiBjb25zdW1lcyBhCi0gKiBy ZWZlcmVuY2UgZm9yIEBmZW5jZS4KLSAqCi0gKiBUaGlzIHdheSBleHBsaWNpdCBmZW5jaW5nIGNh biBiZSB1c2VkIHRvIG92ZXJydWxlIGltcGxpY2l0IGZlbmNpbmcsIHdoaWNoIGlzCi0gKiBpbXBv cnRhbnQgdG8gbWFrZSBleHBsaWNpdCBmZW5jaW5nIHVzZS1jYXNlcyB3b3JrOiBPbmUgZXhhbXBs ZSBpcyB1c2luZyBvbmUKLSAqIGJ1ZmZlciBmb3IgMiBzY3JlZW5zIHdpdGggZGlmZmVyZW50IHJl ZnJlc2ggcmF0ZXMuIEltcGxpY2l0IGZlbmNpbmcgd2lsbAotICogY2xhbXAgcmVuZGVyaW5nIHRv IHRoZSByZWZyZXNoIHJhdGUgb2YgdGhlIHNsb3dlciBzY3JlZW4sIHdoZXJlYXMgZXhwbGljaXQK LSAqIGZlbmNlIGFsbG93cyAyIGluZGVwZW5kZW50IHJlbmRlciBhbmQgZGlzcGxheSBsb29wcyBv biBhIHNpbmdsZSBidWZmZXIuIElmIGEKLSAqIGRyaXZlciBhbGxvd3Mgb2JleXMgYm90aCBpbXBs aWNpdCBhbmQgZXhwbGljaXQgZmVuY2VzIGZvciBwbGFuZSB1cGRhdGVzLCB0aGVuCi0gKiBpdCB3 aWxsIGJyZWFrIGFsbCB0aGUgYmVuZWZpdHMgb2YgZXhwbGljaXQgZmVuY2luZy4KLSAqLwotdm9p ZAotZHJtX2F0b21pY19zZXRfZmVuY2VfZm9yX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUg KnBsYW5lX3N0YXRlLAotCQkJICAgICAgIHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQotewotCWlm IChwbGFuZV9zdGF0ZS0+ZmVuY2UpIHsKLQkJZG1hX2ZlbmNlX3B1dChmZW5jZSk7Ci0JCXJldHVy bjsKLQl9Ci0KLQlwbGFuZV9zdGF0ZS0+ZmVuY2UgPSBmZW5jZTsKLX0KLUVYUE9SVF9TWU1CT0wo ZHJtX2F0b21pY19zZXRfZmVuY2VfZm9yX3BsYW5lKTsKLQotLyoqCi0gKiBkcm1fYXRvbWljX3Nl dF9jcnRjX2Zvcl9jb25uZWN0b3IgLSBzZXQgY3J0YyBmb3IgY29ubmVjdG9yCi0gKiBAY29ubl9z dGF0ZTogYXRvbWljIHN0YXRlIG9iamVjdCBmb3IgdGhlIGNvbm5lY3RvcgotICogQGNydGM6IGNy dGMgdG8gdXNlIGZvciB0aGUgY29ubmVjdG9yCi0gKgotICogQ2hhbmdpbmcgdGhlIGFzc2lnbmVk IGNydGMgZm9yIGEgY29ubmVjdG9yIHJlcXVpcmVzIHVzIHRvIGdyYWIgdGhlIGxvY2sgYW5kCi0g KiBzdGF0ZSBmb3IgdGhlIG5ldyBjcnRjLCBhcyBuZWVkZWQuIFRoaXMgZnVuY3Rpb24gdGFrZXMg Y2FyZSBvZiBhbGwgdGhlc2UKLSAqIGRldGFpbHMgYmVzaWRlcyB1cGRhdGluZyB0aGUgcG9pbnRl ciBpbiB0aGUgc3RhdGUgb2JqZWN0IGl0c2VsZi4KLSAqCi0gKiBSZXR1cm5zOgotICogMCBvbiBz dWNjZXNzIG9yIGNhbiBmYWlsIHdpdGggLUVERUFETEsgb3IgLUVOT01FTS4gV2hlbiB0aGUgZXJy b3IgaXMgRURFQURMSwotICogdGhlbiB0aGUgdy93IG11dGV4IGNvZGUgaGFzIGRldGVjdGVkIGEg ZGVhZGxvY2sgYW5kIHRoZSBlbnRpcmUgYXRvbWljCi0gKiBzZXF1ZW5jZSBtdXN0IGJlIHJlc3Rh cnRlZC4gQWxsIG90aGVyIGVycm9ycyBhcmUgZmF0YWwuCi0gKi8KLWludAotZHJtX2F0b21pY19z ZXRfY3J0Y19mb3JfY29ubmVjdG9yKHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0 YXRlLAotCQkJCSAgc3RydWN0IGRybV9jcnRjICpjcnRjKQotewotCXN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3IgPSBjb25uX3N0YXRlLT5jb25uZWN0b3I7Ci0Jc3RydWN0IGRybV9jcnRj X3N0YXRlICpjcnRjX3N0YXRlOwotCi0JaWYgKGNvbm5fc3RhdGUtPmNydGMgPT0gY3J0YykKLQkJ cmV0dXJuIDA7Ci0KLQlpZiAoY29ubl9zdGF0ZS0+Y3J0YykgewotCQljcnRjX3N0YXRlID0gZHJt X2F0b21pY19nZXRfbmV3X2NydGNfc3RhdGUoY29ubl9zdGF0ZS0+c3RhdGUsCi0JCQkJCQkJICAg Y29ubl9zdGF0ZS0+Y3J0Yyk7Ci0KLQkJY3J0Y19zdGF0ZS0+Y29ubmVjdG9yX21hc2sgJj0KLQkJ CX5kcm1fY29ubmVjdG9yX21hc2soY29ubl9zdGF0ZS0+Y29ubmVjdG9yKTsKLQotCQlkcm1fY29u bmVjdG9yX3B1dChjb25uX3N0YXRlLT5jb25uZWN0b3IpOwotCQljb25uX3N0YXRlLT5jcnRjID0g TlVMTDsKLQl9Ci0KLQlpZiAoY3J0YykgewotCQljcnRjX3N0YXRlID0gZHJtX2F0b21pY19nZXRf Y3J0Y19zdGF0ZShjb25uX3N0YXRlLT5zdGF0ZSwgY3J0Yyk7Ci0JCWlmIChJU19FUlIoY3J0Y19z dGF0ZSkpCi0JCQlyZXR1cm4gUFRSX0VSUihjcnRjX3N0YXRlKTsKLQotCQljcnRjX3N0YXRlLT5j b25uZWN0b3JfbWFzayB8PQotCQkJZHJtX2Nvbm5lY3Rvcl9tYXNrKGNvbm5fc3RhdGUtPmNvbm5l Y3Rvcik7Ci0KLQkJZHJtX2Nvbm5lY3Rvcl9nZXQoY29ubl9zdGF0ZS0+Y29ubmVjdG9yKTsKLQkJ Y29ubl9zdGF0ZS0+Y3J0YyA9IGNydGM7Ci0KLQkJRFJNX0RFQlVHX0FUT01JQygiTGluayBbQ09O TkVDVE9SOiVkOiVzXSBzdGF0ZSAlcCB0byBbQ1JUQzolZDolc11cbiIsCi0JCQkJIGNvbm5lY3Rv ci0+YmFzZS5pZCwgY29ubmVjdG9yLT5uYW1lLAotCQkJCSBjb25uX3N0YXRlLCBjcnRjLT5iYXNl LmlkLCBjcnRjLT5uYW1lKTsKLQl9IGVsc2UgewotCQlEUk1fREVCVUdfQVRPTUlDKCJMaW5rIFtD T05ORUNUT1I6JWQ6JXNdIHN0YXRlICVwIHRvIFtOT0NSVENdXG4iLAotCQkJCSBjb25uZWN0b3It PmJhc2UuaWQsIGNvbm5lY3Rvci0+bmFtZSwKLQkJCQkgY29ubl9zdGF0ZSk7Ci0JfQotCi0JcmV0 dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfc2V0X2NydGNfZm9yX2Nvbm5lY3Rv cik7Ci0KIC8qKgogICogZHJtX2F0b21pY19hZGRfYWZmZWN0ZWRfY29ubmVjdG9ycyAtIGFkZCBj b25uZWN0b3JzIGZvciBjcnRjCiAgKiBAc3RhdGU6IGF0b21pYyBzdGF0ZQpAQCAtMTkxNiw3ICsx MTAyLDcgQEAgaW50IGRybV9hdG9taWNfbm9uYmxvY2tpbmdfY29tbWl0KHN0cnVjdCBkcm1fYXRv bWljX3N0YXRlICpzdGF0ZSkKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2F0b21pY19ub25ibG9ja2lu Z19jb21taXQpOwogCi1zdGF0aWMgdm9pZCBkcm1fYXRvbWljX3ByaW50X3N0YXRlKGNvbnN0IHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKK3ZvaWQgZHJtX2F0b21pY19wcmludF9zdGF0 ZShjb25zdCBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCiB7CiAJc3RydWN0IGRybV9w cmludGVyIHAgPSBkcm1faW5mb19wcmludGVyKHN0YXRlLT5kZXYtPmRldik7CiAJc3RydWN0IGRy bV9wbGFuZSAqcGxhbmU7CkBAIC0yMDIzLDU0NCArMTIwOSwzIEBAIGludCBkcm1fYXRvbWljX2Rl YnVnZnNfaW5pdChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcikKIH0KICNlbmRpZgogCi0vKgotICog VGhlIGJpZyBtb25zdGVyIGlvY3RsCi0gKi8KLQotc3RhdGljIHN0cnVjdCBkcm1fcGVuZGluZ192 YmxhbmtfZXZlbnQgKmNyZWF0ZV92YmxhbmtfZXZlbnQoCi0JCXN0cnVjdCBkcm1fY3J0YyAqY3J0 YywgdWludDY0X3QgdXNlcl9kYXRhKQotewotCXN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZl bnQgKmUgPSBOVUxMOwotCi0JZSA9IGt6YWxsb2Moc2l6ZW9mICplLCBHRlBfS0VSTkVMKTsKLQlp ZiAoIWUpCi0JCXJldHVybiBOVUxMOwotCi0JZS0+ZXZlbnQuYmFzZS50eXBlID0gRFJNX0VWRU5U X0ZMSVBfQ09NUExFVEU7Ci0JZS0+ZXZlbnQuYmFzZS5sZW5ndGggPSBzaXplb2YoZS0+ZXZlbnQp OwotCWUtPmV2ZW50LnZibC5jcnRjX2lkID0gY3J0Yy0+YmFzZS5pZDsKLQllLT5ldmVudC52Ymwu dXNlcl9kYXRhID0gdXNlcl9kYXRhOwotCi0JcmV0dXJuIGU7Ci19Ci0KLWludCBkcm1fYXRvbWlj X2Nvbm5lY3Rvcl9jb21taXRfZHBtcyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCi0J CQkJICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQkJCSAgICAgaW50IG1v ZGUpCi17Ci0Jc3RydWN0IGRybV9jb25uZWN0b3IgKnRtcF9jb25uZWN0b3I7Ci0Jc3RydWN0IGRy bV9jb25uZWN0b3Jfc3RhdGUgKm5ld19jb25uX3N0YXRlOwotCXN0cnVjdCBkcm1fY3J0YyAqY3J0 YzsKLQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Ci0JaW50IGksIHJldCwgb2xk X21vZGUgPSBjb25uZWN0b3ItPmRwbXM7Ci0JYm9vbCBhY3RpdmUgPSBmYWxzZTsKLQotCXJldCA9 IGRybV9tb2Rlc2V0X2xvY2soJnN0YXRlLT5kZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rpb25fbXV0 ZXgsCi0JCQkgICAgICAgc3RhdGUtPmFjcXVpcmVfY3R4KTsKLQlpZiAocmV0KQotCQlyZXR1cm4g cmV0OwotCi0JaWYgKG1vZGUgIT0gRFJNX01PREVfRFBNU19PTikKLQkJbW9kZSA9IERSTV9NT0RF X0RQTVNfT0ZGOwotCWNvbm5lY3Rvci0+ZHBtcyA9IG1vZGU7Ci0KLQljcnRjID0gY29ubmVjdG9y LT5zdGF0ZS0+Y3J0YzsKLQlpZiAoIWNydGMpCi0JCWdvdG8gb3V0OwotCXJldCA9IGRybV9hdG9t aWNfYWRkX2FmZmVjdGVkX2Nvbm5lY3RvcnMoc3RhdGUsIGNydGMpOwotCWlmIChyZXQpCi0JCWdv dG8gb3V0OwotCi0JY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUs IGNydGMpOwotCWlmIChJU19FUlIoY3J0Y19zdGF0ZSkpIHsKLQkJcmV0ID0gUFRSX0VSUihjcnRj X3N0YXRlKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZm9yX2VhY2hfbmV3X2Nvbm5lY3Rvcl9pbl9z dGF0ZShzdGF0ZSwgdG1wX2Nvbm5lY3RvciwgbmV3X2Nvbm5fc3RhdGUsIGkpIHsKLQkJaWYgKG5l d19jb25uX3N0YXRlLT5jcnRjICE9IGNydGMpCi0JCQljb250aW51ZTsKLQkJaWYgKHRtcF9jb25u ZWN0b3ItPmRwbXMgPT0gRFJNX01PREVfRFBNU19PTikgewotCQkJYWN0aXZlID0gdHJ1ZTsKLQkJ CWJyZWFrOwotCQl9Ci0JfQotCi0JY3J0Y19zdGF0ZS0+YWN0aXZlID0gYWN0aXZlOwotCXJldCA9 IGRybV9hdG9taWNfY29tbWl0KHN0YXRlKTsKLW91dDoKLQlpZiAocmV0ICE9IDApCi0JCWNvbm5l Y3Rvci0+ZHBtcyA9IG9sZF9tb2RlOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCBkcm1fYXRvbWlj X3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCi0JCQkgICAgc3Ry dWN0IGRybV9tb2RlX29iamVjdCAqb2JqLAotCQkJICAgIHN0cnVjdCBkcm1fcHJvcGVydHkgKnBy b3AsCi0JCQkgICAgdWludDY0X3QgcHJvcF92YWx1ZSkKLXsKLQlzdHJ1Y3QgZHJtX21vZGVfb2Jq ZWN0ICpyZWY7Ci0JaW50IHJldDsKLQotCWlmICghZHJtX3Byb3BlcnR5X2NoYW5nZV92YWxpZF9n ZXQocHJvcCwgcHJvcF92YWx1ZSwgJnJlZikpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3dpdGNo IChvYmotPnR5cGUpIHsKLQljYXNlIERSTV9NT0RFX09CSkVDVF9DT05ORUNUT1I6IHsKLQkJc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IG9ial90b19jb25uZWN0b3Iob2JqKTsKLQkJ c3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5lY3Rvcl9zdGF0ZTsKLQotCQljb25uZWN0 b3Jfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9jb25uZWN0b3Jfc3RhdGUoc3RhdGUsIGNvbm5lY3Rv cik7Ci0JCWlmIChJU19FUlIoY29ubmVjdG9yX3N0YXRlKSkgewotCQkJcmV0ID0gUFRSX0VSUihj b25uZWN0b3Jfc3RhdGUpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlyZXQgPSBkcm1fYXRvbWljX2Nv bm5lY3Rvcl9zZXRfcHJvcGVydHkoY29ubmVjdG9yLAotCQkJCWNvbm5lY3Rvcl9zdGF0ZSwgcHJv cCwgcHJvcF92YWx1ZSk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIERSTV9NT0RFX09CSkVDVF9DUlRD OiB7Ci0JCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IG9ial90b19jcnRjKG9iaik7Ci0JCXN0cnVj dCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKLQotCQljcnRjX3N0YXRlID0gZHJtX2F0b21p Y19nZXRfY3J0Y19zdGF0ZShzdGF0ZSwgY3J0Yyk7Ci0JCWlmIChJU19FUlIoY3J0Y19zdGF0ZSkp IHsKLQkJCXJldCA9IFBUUl9FUlIoY3J0Y19zdGF0ZSk7Ci0JCQlicmVhazsKLQkJfQotCi0JCXJl dCA9IGRybV9hdG9taWNfY3J0Y19zZXRfcHJvcGVydHkoY3J0YywKLQkJCQljcnRjX3N0YXRlLCBw cm9wLCBwcm9wX3ZhbHVlKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgRFJNX01PREVfT0JKRUNUX1BM QU5FOiB7Ci0JCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gb2JqX3RvX3BsYW5lKG9iaik7Ci0J CXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlOwotCi0JCXBsYW5lX3N0YXRlID0g ZHJtX2F0b21pY19nZXRfcGxhbmVfc3RhdGUoc3RhdGUsIHBsYW5lKTsKLQkJaWYgKElTX0VSUihw bGFuZV9zdGF0ZSkpIHsKLQkJCXJldCA9IFBUUl9FUlIocGxhbmVfc3RhdGUpOwotCQkJYnJlYWs7 Ci0JCX0KLQotCQlyZXQgPSBkcm1fYXRvbWljX3BsYW5lX3NldF9wcm9wZXJ0eShwbGFuZSwKLQkJ CQlwbGFuZV9zdGF0ZSwgcHJvcCwgcHJvcF92YWx1ZSk7Ci0JCWJyZWFrOwotCX0KLQlkZWZhdWx0 OgotCQlyZXQgPSAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0KLQlkcm1fcHJvcGVydHlfY2hhbmdl X3ZhbGlkX3B1dChwcm9wLCByZWYpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogRE9DOiBl eHBsaWNpdCBmZW5jaW5nIHByb3BlcnRpZXMKLSAqCi0gKiBFeHBsaWNpdCBmZW5jaW5nIGFsbG93 cyB1c2Vyc3BhY2UgdG8gY29udHJvbCB0aGUgYnVmZmVyIHN5bmNocm9uaXphdGlvbgotICogYmV0 d2VlbiBkZXZpY2VzLiBBIEZlbmNlIG9yIGEgZ3JvdXAgb2YgZmVuY2VzIGFyZSB0cmFuc2ZlcmVk IHRvL2Zyb20KLSAqIHVzZXJzcGFjZSB1c2luZyBTeW5jIEZpbGUgZmRzIGFuZCB0aGVyZSBhcmUg dHdvIERSTSBwcm9wZXJ0aWVzIGZvciB0aGF0LgotICogSU5fRkVOQ0VfRkQgb24gZWFjaCBEUk0g UGxhbmUgdG8gc2VuZCBmZW5jZXMgdG8gdGhlIGtlcm5lbCBhbmQKLSAqIE9VVF9GRU5DRV9QVFIg b24gZWFjaCBEUk0gQ1JUQyB0byByZWNlaXZlIGZlbmNlcyBmcm9tIHRoZSBrZXJuZWwuCi0gKgot ICogQXMgYSBjb250cmFzdCwgd2l0aCBpbXBsaWNpdCBmZW5jaW5nIHRoZSBrZXJuZWwga2VlcHMg dHJhY2sgb2YgYW55Ci0gKiBvbmdvaW5nIHJlbmRlcmluZywgYW5kIGF1dG9tYXRpY2FsbHkgZW5z dXJlcyB0aGF0IHRoZSBhdG9taWMgdXBkYXRlIHdhaXRzCi0gKiBmb3IgYW55IHBlbmRpbmcgcmVu ZGVyaW5nIHRvIGNvbXBsZXRlLiBGb3Igc2hhcmVkIGJ1ZmZlcnMgcmVwcmVzZW50ZWQgd2l0aAot ICogYSAmc3RydWN0IGRtYV9idWYgdGhpcyBpcyB0cmFja2VkIGluICZzdHJ1Y3QgcmVzZXJ2YXRp b25fb2JqZWN0LgotICogSW1wbGljaXQgc3luY2luZyBpcyBob3cgTGludXggdHJhZGl0aW9uYWxs eSB3b3JrZWQgKGUuZy4gRFJJMi8zIG9uIFgub3JnKSwKLSAqIHdoZXJlYXMgZXhwbGljaXQgZmVu Y2luZyBpcyB3aGF0IEFuZHJvaWQgd2FudHMuCi0gKgotICogIklOX0ZFTkNFX0ZE4oCdOgotICoJ VXNlIHRoaXMgcHJvcGVydHkgdG8gcGFzcyBhIGZlbmNlIHRoYXQgRFJNIHNob3VsZCB3YWl0IG9u IGJlZm9yZQotICoJcHJvY2VlZGluZyB3aXRoIHRoZSBBdG9taWMgQ29tbWl0IHJlcXVlc3QgYW5k IHNob3cgdGhlIGZyYW1lYnVmZmVyIGZvcgotICoJdGhlIHBsYW5lIG9uIHRoZSBzY3JlZW4uIFRo ZSBmZW5jZSBjYW4gYmUgZWl0aGVyIGEgbm9ybWFsIGZlbmNlIG9yIGEKLSAqCW1lcmdlZCBvbmUs IHRoZSBzeW5jX2ZpbGUgZnJhbWV3b3JrIHdpbGwgaGFuZGxlIGJvdGggY2FzZXMgYW5kIHVzZSBh Ci0gKglmZW5jZV9hcnJheSBpZiBhIG1lcmdlZCBmZW5jZSBpcyByZWNlaXZlZC4gUGFzc2luZyAt MSBoZXJlIG1lYW5zIG5vCi0gKglmZW5jZXMgdG8gd2FpdCBvbi4KLSAqCi0gKglJZiB0aGUgQXRv bWljIENvbW1pdCByZXF1ZXN0IGhhcyB0aGUgRFJNX01PREVfQVRPTUlDX1RFU1RfT05MWSBmbGFn Ci0gKglpdCB3aWxsIG9ubHkgY2hlY2sgaWYgdGhlIFN5bmMgRmlsZSBpcyBhIHZhbGlkIG9uZS4K LSAqCi0gKglPbiB0aGUgZHJpdmVyIHNpZGUgdGhlIGZlbmNlIGlzIHN0b3JlZCBvbiB0aGUgQGZl bmNlIHBhcmFtZXRlciBvZgotICoJJnN0cnVjdCBkcm1fcGxhbmVfc3RhdGUuIERyaXZlcnMgd2hp Y2ggYWxzbyBzdXBwb3J0IGltcGxpY2l0IGZlbmNpbmcKLSAqCXNob3VsZCBzZXQgdGhlIGltcGxp Y2l0IGZlbmNlIHVzaW5nIGRybV9hdG9taWNfc2V0X2ZlbmNlX2Zvcl9wbGFuZSgpLAotICoJdG8g bWFrZSBzdXJlIHRoZXJlJ3MgY29uc2lzdGVudCBiZWhhdmlvdXIgYmV0d2VlbiBkcml2ZXJzIGlu IHByZWNlZGVuY2UKLSAqCW9mIGltcGxpY2l0IHZzLiBleHBsaWNpdCBmZW5jaW5nLgotICoKLSAq ICJPVVRfRkVOQ0VfUFRS4oCdOgotICoJVXNlIHRoaXMgcHJvcGVydHkgdG8gcGFzcyBhIGZpbGUg ZGVzY3JpcHRvciBwb2ludGVyIHRvIERSTS4gT25jZSB0aGUKLSAqCUF0b21pYyBDb21taXQgcmVx dWVzdCBjYWxsIHJldHVybnMgT1VUX0ZFTkNFX1BUUiB3aWxsIGJlIGZpbGxlZCB3aXRoCi0gKgl0 aGUgZmlsZSBkZXNjcmlwdG9yIG51bWJlciBvZiBhIFN5bmMgRmlsZS4gVGhpcyBTeW5jIEZpbGUg Y29udGFpbnMgdGhlCi0gKglDUlRDIGZlbmNlIHRoYXQgd2lsbCBiZSBzaWduYWxlZCB3aGVuIGFs bCBmcmFtZWJ1ZmZlcnMgcHJlc2VudCBvbiB0aGUKLSAqCUF0b21pYyBDb21taXQgKiByZXF1ZXN0 IGZvciB0aGF0IGdpdmVuIENSVEMgYXJlIHNjYW5uZWQgb3V0IG9uIHRoZQotICoJc2NyZWVuLgot ICoKLSAqCVRoZSBBdG9taWMgQ29tbWl0IHJlcXVlc3QgZmFpbHMgaWYgYSBpbnZhbGlkIHBvaW50 ZXIgaXMgcGFzc2VkLiBJZiB0aGUKLSAqCUF0b21pYyBDb21taXQgcmVxdWVzdCBmYWlscyBmb3Ig YW55IG90aGVyIHJlYXNvbiB0aGUgb3V0IGZlbmNlIGZkCi0gKglyZXR1cm5lZCB3aWxsIGJlIC0x LiBPbiBhIEF0b21pYyBDb21taXQgd2l0aCB0aGUKLSAqCURSTV9NT0RFX0FUT01JQ19URVNUX09O TFkgZmxhZyB0aGUgb3V0IGZlbmNlIHdpbGwgYWxzbyBiZSBzZXQgdG8gLTEuCi0gKgotICoJTm90 ZSB0aGF0IG91dC1mZW5jZXMgZG9uJ3QgaGF2ZSBhIHNwZWNpYWwgaW50ZXJmYWNlIHRvIGRyaXZl cnMgYW5kIGFyZQotICoJaW50ZXJuYWxseSByZXByZXNlbnRlZCBieSBhICZzdHJ1Y3QgZHJtX3Bl bmRpbmdfdmJsYW5rX2V2ZW50IGluIHN0cnVjdAotICoJJmRybV9jcnRjX3N0YXRlLCB3aGljaCBp cyBhbHNvIHVzZWQgYnkgdGhlIG5vbmJsb2NraW5nIGF0b21pYyBjb21taXQKLSAqCWhlbHBlcnMg YW5kIGZvciB0aGUgRFJNIGV2ZW50IGhhbmRsaW5nIGZvciBleGlzdGluZyB1c2Vyc3BhY2UuCi0g Ki8KLQotc3RydWN0IGRybV9vdXRfZmVuY2Vfc3RhdGUgewotCXMzMiBfX3VzZXIgKm91dF9mZW5j ZV9wdHI7Ci0Jc3RydWN0IHN5bmNfZmlsZSAqc3luY19maWxlOwotCWludCBmZDsKLX07Ci0KLXN0 YXRpYyBpbnQgc2V0dXBfb3V0X2ZlbmNlKHN0cnVjdCBkcm1fb3V0X2ZlbmNlX3N0YXRlICpmZW5j ZV9zdGF0ZSwKLQkJCSAgIHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQotewotCWZlbmNlX3N0YXRl LT5mZCA9IGdldF91bnVzZWRfZmRfZmxhZ3MoT19DTE9FWEVDKTsKLQlpZiAoZmVuY2Vfc3RhdGUt PmZkIDwgMCkKLQkJcmV0dXJuIGZlbmNlX3N0YXRlLT5mZDsKLQotCWlmIChwdXRfdXNlcihmZW5j ZV9zdGF0ZS0+ZmQsIGZlbmNlX3N0YXRlLT5vdXRfZmVuY2VfcHRyKSkKLQkJcmV0dXJuIC1FRkFV TFQ7Ci0KLQlmZW5jZV9zdGF0ZS0+c3luY19maWxlID0gc3luY19maWxlX2NyZWF0ZShmZW5jZSk7 Ci0JaWYgKCFmZW5jZV9zdGF0ZS0+c3luY19maWxlKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXJl dHVybiAwOwotfQotCi1zdGF0aWMgaW50IHByZXBhcmVfc2lnbmFsaW5nKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsCi0JCQkJICBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCi0JCQkJICBz dHJ1Y3QgZHJtX21vZGVfYXRvbWljICphcmcsCi0JCQkJICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVf cHJpdiwKLQkJCQkgIHN0cnVjdCBkcm1fb3V0X2ZlbmNlX3N0YXRlICoqZmVuY2Vfc3RhdGUsCi0J CQkJICB1bnNpZ25lZCBpbnQgKm51bV9mZW5jZXMpCi17Ci0Jc3RydWN0IGRybV9jcnRjICpjcnRj OwotCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKLQlzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubjsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZTsKLQlp bnQgaSwgYyA9IDAsIHJldDsKLQotCWlmIChhcmctPmZsYWdzICYgRFJNX01PREVfQVRPTUlDX1RF U1RfT05MWSkKLQkJcmV0dXJuIDA7Ci0KLQlmb3JfZWFjaF9uZXdfY3J0Y19pbl9zdGF0ZShzdGF0 ZSwgY3J0YywgY3J0Y19zdGF0ZSwgaSkgewotCQlzMzIgX191c2VyICpmZW5jZV9wdHI7Ci0KLQkJ ZmVuY2VfcHRyID0gZ2V0X291dF9mZW5jZV9mb3JfY3J0YyhjcnRjX3N0YXRlLT5zdGF0ZSwgY3J0 Yyk7Ci0KLQkJaWYgKGFyZy0+ZmxhZ3MgJiBEUk1fTU9ERV9QQUdFX0ZMSVBfRVZFTlQgfHwgZmVu Y2VfcHRyKSB7Ci0JCQlzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICplOwotCi0JCQll ID0gY3JlYXRlX3ZibGFua19ldmVudChjcnRjLCBhcmctPnVzZXJfZGF0YSk7Ci0JCQlpZiAoIWUp Ci0JCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJCWNydGNfc3RhdGUtPmV2ZW50ID0gZTsKLQkJfQot Ci0JCWlmIChhcmctPmZsYWdzICYgRFJNX01PREVfUEFHRV9GTElQX0VWRU5UKSB7Ci0JCQlzdHJ1 Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICplID0gY3J0Y19zdGF0ZS0+ZXZlbnQ7Ci0KLQkJ CWlmICghZmlsZV9wcml2KQotCQkJCWNvbnRpbnVlOwotCi0JCQlyZXQgPSBkcm1fZXZlbnRfcmVz ZXJ2ZV9pbml0KGRldiwgZmlsZV9wcml2LCAmZS0+YmFzZSwKLQkJCQkJCSAgICAgJmUtPmV2ZW50 LmJhc2UpOwotCQkJaWYgKHJldCkgewotCQkJCWtmcmVlKGUpOwotCQkJCWNydGNfc3RhdGUtPmV2 ZW50ID0gTlVMTDsKLQkJCQlyZXR1cm4gcmV0OwotCQkJfQotCQl9Ci0KLQkJaWYgKGZlbmNlX3B0 cikgewotCQkJc3RydWN0IGRtYV9mZW5jZSAqZmVuY2U7Ci0JCQlzdHJ1Y3QgZHJtX291dF9mZW5j ZV9zdGF0ZSAqZjsKLQotCQkJZiA9IGtyZWFsbG9jKCpmZW5jZV9zdGF0ZSwgc2l6ZW9mKCoqZmVu Y2Vfc3RhdGUpICoKLQkJCQkgICAgICgqbnVtX2ZlbmNlcyArIDEpLCBHRlBfS0VSTkVMKTsKLQkJ CWlmICghZikKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQotCQkJbWVtc2V0KCZmWypudW1fZmVuY2Vz XSwgMCwgc2l6ZW9mKCpmKSk7Ci0KLQkJCWZbKm51bV9mZW5jZXNdLm91dF9mZW5jZV9wdHIgPSBm ZW5jZV9wdHI7Ci0JCQkqZmVuY2Vfc3RhdGUgPSBmOwotCi0JCQlmZW5jZSA9IGRybV9jcnRjX2Ny ZWF0ZV9mZW5jZShjcnRjKTsKLQkJCWlmICghZmVuY2UpCi0JCQkJcmV0dXJuIC1FTk9NRU07Ci0K LQkJCXJldCA9IHNldHVwX291dF9mZW5jZSgmZlsoKm51bV9mZW5jZXMpKytdLCBmZW5jZSk7Ci0J CQlpZiAocmV0KSB7Ci0JCQkJZG1hX2ZlbmNlX3B1dChmZW5jZSk7Ci0JCQkJcmV0dXJuIHJldDsK LQkJCX0KLQotCQkJY3J0Y19zdGF0ZS0+ZXZlbnQtPmJhc2UuZmVuY2UgPSBmZW5jZTsKLQkJfQot Ci0JCWMrKzsKLQl9Ci0KLQlmb3JfZWFjaF9uZXdfY29ubmVjdG9yX2luX3N0YXRlKHN0YXRlLCBj b25uLCBjb25uX3N0YXRlLCBpKSB7Ci0JCXN0cnVjdCBkcm1fd3JpdGViYWNrX2Nvbm5lY3RvciAq d2JfY29ubjsKLQkJc3RydWN0IGRybV93cml0ZWJhY2tfam9iICpqb2I7Ci0JCXN0cnVjdCBkcm1f b3V0X2ZlbmNlX3N0YXRlICpmOwotCQlzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZTsKLQkJczMyIF9f dXNlciAqZmVuY2VfcHRyOwotCi0JCWZlbmNlX3B0ciA9IGdldF9vdXRfZmVuY2VfZm9yX2Nvbm5l Y3RvcihzdGF0ZSwgY29ubik7Ci0JCWlmICghZmVuY2VfcHRyKQotCQkJY29udGludWU7Ci0KLQkJ am9iID0gZHJtX2F0b21pY19nZXRfd3JpdGViYWNrX2pvYihjb25uX3N0YXRlKTsKLQkJaWYgKCFq b2IpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQotCQlmID0ga3JlYWxsb2MoKmZlbmNlX3N0YXRlLCBz aXplb2YoKipmZW5jZV9zdGF0ZSkgKgotCQkJICAgICAoKm51bV9mZW5jZXMgKyAxKSwgR0ZQX0tF Uk5FTCk7Ci0JCWlmICghZikKLQkJCXJldHVybiAtRU5PTUVNOwotCi0JCW1lbXNldCgmZlsqbnVt X2ZlbmNlc10sIDAsIHNpemVvZigqZikpOwotCi0JCWZbKm51bV9mZW5jZXNdLm91dF9mZW5jZV9w dHIgPSBmZW5jZV9wdHI7Ci0JCSpmZW5jZV9zdGF0ZSA9IGY7Ci0KLQkJd2JfY29ubiA9IGRybV9j b25uZWN0b3JfdG9fd3JpdGViYWNrKGNvbm4pOwotCQlmZW5jZSA9IGRybV93cml0ZWJhY2tfZ2V0 X291dF9mZW5jZSh3Yl9jb25uKTsKLQkJaWYgKCFmZW5jZSkKLQkJCXJldHVybiAtRU5PTUVNOwot Ci0JCXJldCA9IHNldHVwX291dF9mZW5jZSgmZlsoKm51bV9mZW5jZXMpKytdLCBmZW5jZSk7Ci0J CWlmIChyZXQpIHsKLQkJCWRtYV9mZW5jZV9wdXQoZmVuY2UpOwotCQkJcmV0dXJuIHJldDsKLQkJ fQotCi0JCWpvYi0+b3V0X2ZlbmNlID0gZmVuY2U7Ci0JfQotCi0JLyoKLQkgKiBIYXZpbmcgdGhp cyBmbGFnIG1lYW5zIHVzZXIgbW9kZSBwZW5kcyBvbiBldmVudCB3aGljaCB3aWxsIG5ldmVyCi0J ICogcmVhY2ggZHVlIHRvIGxhY2sgb2YgYXQgbGVhc3Qgb25lIENSVEMgZm9yIHNpZ25hbGluZwot CSAqLwotCWlmIChjID09IDAgJiYgKGFyZy0+ZmxhZ3MgJiBEUk1fTU9ERV9QQUdFX0ZMSVBfRVZF TlQpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBj b21wbGV0ZV9zaWduYWxpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCSAgICAgICBzdHJ1 Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCi0JCQkgICAgICAgc3RydWN0IGRybV9vdXRfZmVu Y2Vfc3RhdGUgKmZlbmNlX3N0YXRlLAotCQkJICAgICAgIHVuc2lnbmVkIGludCBudW1fZmVuY2Vz LAotCQkJICAgICAgIGJvb2wgaW5zdGFsbF9mZHMpCi17Ci0Jc3RydWN0IGRybV9jcnRjICpjcnRj OwotCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKLQlpbnQgaTsKLQotCWlmIChp bnN0YWxsX2ZkcykgewotCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2ZlbmNlczsgaSsrKQotCQkJZmRf aW5zdGFsbChmZW5jZV9zdGF0ZVtpXS5mZCwKLQkJCQkgICBmZW5jZV9zdGF0ZVtpXS5zeW5jX2Zp bGUtPmZpbGUpOwotCi0JCWtmcmVlKGZlbmNlX3N0YXRlKTsKLQkJcmV0dXJuOwotCX0KLQotCWZv cl9lYWNoX25ld19jcnRjX2luX3N0YXRlKHN0YXRlLCBjcnRjLCBjcnRjX3N0YXRlLCBpKSB7Ci0J CXN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmV2ZW50ID0gY3J0Y19zdGF0ZS0+ZXZl bnQ7Ci0JCS8qCi0JCSAqIEZyZWUgdGhlIGFsbG9jYXRlZCBldmVudC4gZHJtX2F0b21pY19oZWxw ZXJfc2V0dXBfY29tbWl0Ci0JCSAqIGNhbiBhbGxvY2F0ZSBhbiBldmVudCB0b28sIHNvIG9ubHkg ZnJlZSBpdCBpZiBpdCdzIG91cnMKLQkJICogdG8gcHJldmVudCBhIGRvdWJsZSBmcmVlIGluIGRy bV9hdG9taWNfc3RhdGVfY2xlYXIuCi0JCSAqLwotCQlpZiAoZXZlbnQgJiYgKGV2ZW50LT5iYXNl LmZlbmNlIHx8IGV2ZW50LT5iYXNlLmZpbGVfcHJpdikpIHsKLQkJCWRybV9ldmVudF9jYW5jZWxf ZnJlZShkZXYsICZldmVudC0+YmFzZSk7Ci0JCQljcnRjX3N0YXRlLT5ldmVudCA9IE5VTEw7Ci0J CX0KLQl9Ci0KLQlpZiAoIWZlbmNlX3N0YXRlKQotCQlyZXR1cm47Ci0KLQlmb3IgKGkgPSAwOyBp IDwgbnVtX2ZlbmNlczsgaSsrKSB7Ci0JCWlmIChmZW5jZV9zdGF0ZVtpXS5zeW5jX2ZpbGUpCi0J CQlmcHV0KGZlbmNlX3N0YXRlW2ldLnN5bmNfZmlsZS0+ZmlsZSk7Ci0JCWlmIChmZW5jZV9zdGF0 ZVtpXS5mZCA+PSAwKQotCQkJcHV0X3VudXNlZF9mZChmZW5jZV9zdGF0ZVtpXS5mZCk7Ci0KLQkJ LyogSWYgdGhpcyBmYWlscyBsb2cgZXJyb3IgdG8gdGhlIHVzZXIgKi8KLQkJaWYgKGZlbmNlX3N0 YXRlW2ldLm91dF9mZW5jZV9wdHIgJiYKLQkJICAgIHB1dF91c2VyKC0xLCBmZW5jZV9zdGF0ZVtp XS5vdXRfZmVuY2VfcHRyKSkKLQkJCURSTV9ERUJVR19BVE9NSUMoIkNvdWxkbid0IGNsZWFyIG91 dF9mZW5jZV9wdHJcbiIpOwotCX0KLQotCWtmcmVlKGZlbmNlX3N0YXRlKTsKLX0KLQotaW50IGRy bV9tb2RlX2F0b21pY19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJICB2b2lkICpk YXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKLXsKLQlzdHJ1Y3QgZHJtX21vZGVfYXRv bWljICphcmcgPSBkYXRhOwotCXVpbnQzMl90IF9fdXNlciAqb2Jqc19wdHIgPSAodWludDMyX3Qg X191c2VyICopKHVuc2lnbmVkIGxvbmcpKGFyZy0+b2Jqc19wdHIpOwotCXVpbnQzMl90IF9fdXNl ciAqY291bnRfcHJvcHNfcHRyID0gKHVpbnQzMl90IF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKShh cmctPmNvdW50X3Byb3BzX3B0cik7Ci0JdWludDMyX3QgX191c2VyICpwcm9wc19wdHIgPSAodWlu dDMyX3QgX191c2VyICopKHVuc2lnbmVkIGxvbmcpKGFyZy0+cHJvcHNfcHRyKTsKLQl1aW50NjRf dCBfX3VzZXIgKnByb3BfdmFsdWVzX3B0ciA9ICh1aW50NjRfdCBfX3VzZXIgKikodW5zaWduZWQg bG9uZykoYXJnLT5wcm9wX3ZhbHVlc19wdHIpOwotCXVuc2lnbmVkIGludCBjb3BpZWRfb2Jqcywg Y29waWVkX3Byb3BzOwotCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZTsKLQlzdHJ1Y3Qg ZHJtX21vZGVzZXRfYWNxdWlyZV9jdHggY3R4OwotCXN0cnVjdCBkcm1fb3V0X2ZlbmNlX3N0YXRl ICpmZW5jZV9zdGF0ZTsKLQlpbnQgcmV0ID0gMDsKLQl1bnNpZ25lZCBpbnQgaSwgaiwgbnVtX2Zl bmNlczsKLQotCS8qIGRpc2FsbG93IGZvciBkcml2ZXJzIG5vdCBzdXBwb3J0aW5nIGF0b21pYzog Ki8KLQlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfQVRPTUlDKSkKLQkJ cmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBkaXNhbGxvdyBmb3IgdXNlcnNwYWNlIHRoYXQgaGFzIG5v dCBlbmFibGVkIGF0b21pYyBjYXAgKGV2ZW4KLQkgKiB0aG91Z2ggdGhpcyBtYXkgYmUgYSBiaXQg b3ZlcmtpbGwsIHNpbmNlIGxlZ2FjeSB1c2Vyc3BhY2UKLQkgKiB3b3VsZG4ndCBrbm93IGhvdyB0 byBjYWxsIHRoaXMgaW9jdGwpCi0JICovCi0JaWYgKCFmaWxlX3ByaXYtPmF0b21pYykKLQkJcmV0 dXJuIC1FSU5WQUw7Ci0KLQlpZiAoYXJnLT5mbGFncyAmIH5EUk1fTU9ERV9BVE9NSUNfRkxBR1Mp Ci0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGFyZy0+cmVzZXJ2ZWQpCi0JCXJldHVybiAtRUlO VkFMOwotCi0JaWYgKChhcmctPmZsYWdzICYgRFJNX01PREVfUEFHRV9GTElQX0FTWU5DKSAmJgot CQkJIWRldi0+bW9kZV9jb25maWcuYXN5bmNfcGFnZV9mbGlwKQotCQlyZXR1cm4gLUVJTlZBTDsK LQotCS8qIGNhbid0IHRlc3QgYW5kIGV4cGVjdCBhbiBldmVudCBhdCB0aGUgc2FtZSB0aW1lLiAq LwotCWlmICgoYXJnLT5mbGFncyAmIERSTV9NT0RFX0FUT01JQ19URVNUX09OTFkpICYmCi0JCQko YXJnLT5mbGFncyAmIERSTV9NT0RFX1BBR0VfRkxJUF9FVkVOVCkpCi0JCXJldHVybiAtRUlOVkFM OwotCi0JZHJtX21vZGVzZXRfYWNxdWlyZV9pbml0KCZjdHgsIERSTV9NT0RFU0VUX0FDUVVJUkVf SU5URVJSVVBUSUJMRSk7Ci0KLQlzdGF0ZSA9IGRybV9hdG9taWNfc3RhdGVfYWxsb2MoZGV2KTsK LQlpZiAoIXN0YXRlKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXN0YXRlLT5hY3F1aXJlX2N0eCA9 ICZjdHg7Ci0Jc3RhdGUtPmFsbG93X21vZGVzZXQgPSAhIShhcmctPmZsYWdzICYgRFJNX01PREVf QVRPTUlDX0FMTE9XX01PREVTRVQpOwotCi1yZXRyeToKLQljb3BpZWRfb2JqcyA9IDA7Ci0JY29w aWVkX3Byb3BzID0gMDsKLQlmZW5jZV9zdGF0ZSA9IE5VTEw7Ci0JbnVtX2ZlbmNlcyA9IDA7Ci0K LQlmb3IgKGkgPSAwOyBpIDwgYXJnLT5jb3VudF9vYmpzOyBpKyspIHsKLQkJdWludDMyX3Qgb2Jq X2lkLCBjb3VudF9wcm9wczsKLQkJc3RydWN0IGRybV9tb2RlX29iamVjdCAqb2JqOwotCi0JCWlm IChnZXRfdXNlcihvYmpfaWQsIG9ianNfcHRyICsgY29waWVkX29ianMpKSB7Ci0JCQlyZXQgPSAt RUZBVUxUOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQlvYmogPSBkcm1fbW9kZV9vYmplY3RfZmlu ZChkZXYsIGZpbGVfcHJpdiwgb2JqX2lkLCBEUk1fTU9ERV9PQkpFQ1RfQU5ZKTsKLQkJaWYgKCFv YmopIHsKLQkJCXJldCA9IC1FTk9FTlQ7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCWlmICghb2Jq LT5wcm9wZXJ0aWVzKSB7Ci0JCQlkcm1fbW9kZV9vYmplY3RfcHV0KG9iaik7Ci0JCQlyZXQgPSAt RU5PRU5UOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQlpZiAoZ2V0X3VzZXIoY291bnRfcHJvcHMs IGNvdW50X3Byb3BzX3B0ciArIGNvcGllZF9vYmpzKSkgewotCQkJZHJtX21vZGVfb2JqZWN0X3B1 dChvYmopOwotCQkJcmV0ID0gLUVGQVVMVDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJY29waWVk X29ianMrKzsKLQotCQlmb3IgKGogPSAwOyBqIDwgY291bnRfcHJvcHM7IGorKykgewotCQkJdWlu dDMyX3QgcHJvcF9pZDsKLQkJCXVpbnQ2NF90IHByb3BfdmFsdWU7Ci0JCQlzdHJ1Y3QgZHJtX3By b3BlcnR5ICpwcm9wOwotCi0JCQlpZiAoZ2V0X3VzZXIocHJvcF9pZCwgcHJvcHNfcHRyICsgY29w aWVkX3Byb3BzKSkgewotCQkJCWRybV9tb2RlX29iamVjdF9wdXQob2JqKTsKLQkJCQlyZXQgPSAt RUZBVUxUOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCi0JCQlwcm9wID0gZHJtX21vZGVfb2JqX2Zp bmRfcHJvcF9pZChvYmosIHByb3BfaWQpOwotCQkJaWYgKCFwcm9wKSB7Ci0JCQkJZHJtX21vZGVf b2JqZWN0X3B1dChvYmopOwotCQkJCXJldCA9IC1FTk9FTlQ7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9 Ci0KLQkJCWlmIChjb3B5X2Zyb21fdXNlcigmcHJvcF92YWx1ZSwKLQkJCQkJICAgcHJvcF92YWx1 ZXNfcHRyICsgY29waWVkX3Byb3BzLAotCQkJCQkgICBzaXplb2YocHJvcF92YWx1ZSkpKSB7Ci0J CQkJZHJtX21vZGVfb2JqZWN0X3B1dChvYmopOwotCQkJCXJldCA9IC1FRkFVTFQ7Ci0JCQkJZ290 byBvdXQ7Ci0JCQl9Ci0KLQkJCXJldCA9IGRybV9hdG9taWNfc2V0X3Byb3BlcnR5KHN0YXRlLCBv YmosIHByb3AsCi0JCQkJCQkgICAgICBwcm9wX3ZhbHVlKTsKLQkJCWlmIChyZXQpIHsKLQkJCQlk cm1fbW9kZV9vYmplY3RfcHV0KG9iaik7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0KLQkJCWNvcGll ZF9wcm9wcysrOwotCQl9Ci0KLQkJZHJtX21vZGVfb2JqZWN0X3B1dChvYmopOwotCX0KLQotCXJl dCA9IHByZXBhcmVfc2lnbmFsaW5nKGRldiwgc3RhdGUsIGFyZywgZmlsZV9wcml2LCAmZmVuY2Vf c3RhdGUsCi0JCQkJJm51bV9mZW5jZXMpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCi0JaWYg KGFyZy0+ZmxhZ3MgJiBEUk1fTU9ERV9BVE9NSUNfVEVTVF9PTkxZKSB7Ci0JCXJldCA9IGRybV9h dG9taWNfY2hlY2tfb25seShzdGF0ZSk7Ci0JfSBlbHNlIGlmIChhcmctPmZsYWdzICYgRFJNX01P REVfQVRPTUlDX05PTkJMT0NLKSB7Ci0JCXJldCA9IGRybV9hdG9taWNfbm9uYmxvY2tpbmdfY29t bWl0KHN0YXRlKTsKLQl9IGVsc2UgewotCQlpZiAodW5saWtlbHkoZHJtX2RlYnVnICYgRFJNX1VU X1NUQVRFKSkKLQkJCWRybV9hdG9taWNfcHJpbnRfc3RhdGUoc3RhdGUpOwotCi0JCXJldCA9IGRy bV9hdG9taWNfY29tbWl0KHN0YXRlKTsKLQl9Ci0KLW91dDoKLQljb21wbGV0ZV9zaWduYWxpbmco ZGV2LCBzdGF0ZSwgZmVuY2Vfc3RhdGUsIG51bV9mZW5jZXMsICFyZXQpOwotCi0JaWYgKHJldCA9 PSAtRURFQURMSykgewotCQlkcm1fYXRvbWljX3N0YXRlX2NsZWFyKHN0YXRlKTsKLQkJcmV0ID0g ZHJtX21vZGVzZXRfYmFja29mZigmY3R4KTsKLQkJaWYgKCFyZXQpCi0JCQlnb3RvIHJldHJ5Owot CX0KLQotCWRybV9hdG9taWNfc3RhdGVfcHV0KHN0YXRlKTsKLQotCWRybV9tb2Rlc2V0X2Ryb3Bf bG9ja3MoJmN0eCk7Ci0JZHJtX21vZGVzZXRfYWNxdWlyZV9maW5pKCZjdHgpOwotCi0JcmV0dXJu IHJldDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX2hlbHBlci5j IGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMKaW5kZXggZGFhMDRkMjlmOGNj Li44NDY5YTdlOWFmZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX2hl bHBlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX2hlbHBlci5jCkBAIC0yNyw2 ICsyNyw3IEBACiAKICNpbmNsdWRlIDxkcm0vZHJtUC5oPgogI2luY2x1ZGUgPGRybS9kcm1fYXRv bWljLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfdWFwaS5oPgogI2luY2x1ZGUgPGRybS9k cm1fcGxhbmVfaGVscGVyLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgogI2lu Y2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2RybV9hdG9taWNfdWFwaS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfdWFwaS5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMjY2OTBhNjY0ZWM2Ci0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfdWFwaS5jCkBAIC0w LDAgKzEsMTM5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBSZWQgSGF0CisgKiBDb3B5 cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBJbnRlbCBD b3JwLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5k IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8g ZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhv dXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2Us IHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMg b2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNv ZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVy bWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vi c3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJ UyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNT IE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlS SUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1B R0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRS QUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENP Tk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElO R1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiBSb2IgQ2xhcmsgPHJvYmRj bGFya0BnbWFpbC5jb20+CisgKiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xsLmNo PgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY191YXBpLmg+CisjaW5jbHVkZSA8ZHJt L2RybV9hdG9taWMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3ByaW50Lmg+CisjaW5jbHVkZSA8ZHJt L2RybV9kcnYuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3dyaXRlYmFjay5oPgorI2luY2x1ZGUgPGRy bS9kcm1fdmJsYW5rLmg+CisKKyNpbmNsdWRlIDxsaW51eC9kbWEtZmVuY2UuaD4KKyNpbmNsdWRl IDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvc3luY19maWxlLmg+CisjaW5jbHVk ZSA8bGludXgvZmlsZS5oPgorCisjaW5jbHVkZSAiZHJtX2NydGNfaW50ZXJuYWwuaCIKKworLyoq CisgKiBET0M6IG92ZXJ2aWV3CisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBtYXJzaGFs bGluZyBhbmQgZGVtYXJzaGFsbGluZyBnbHVlIGZvciB0aGUgYXRvbWljIFVBUEkKKyAqIGluIGFs bCBpdCdzIGZvcm06IFRoZSBtb25zdGVyIEFUT01JQyBJT0NUTCBpdHNlbGYsIGNvZGUgZm9yIEdF VF9QUk9QRVJUWSBhbmQKKyAqIFNFVF9QUk9QRVJUWSBJT0NUbHMuIFBsdXMgaW50ZXJmYWNlIGZ1 bmN0aW9ucyBmb3IgY29tcGF0aWJpbGl0eSBoZWxwZXJzIGFuZAorICogZHJpdmVycyB3aGljaCBo YXZlIHNwZWNpYWwgbmVlZHMgdG8gY29uc3RydWN0IHRoZWlyIG93biBhdG9taWMgdXBkYXRlcywg ZS5nLgorICogZm9yIGxvYWQgZGV0ZWN0IG9yIHNpbWlsaWFyLgorICovCisKKy8qKgorICogZHJt X2F0b21pY19zZXRfbW9kZV9mb3JfY3J0YyAtIHNldCBtb2RlIGZvciBDUlRDCisgKiBAc3RhdGU6 IHRoZSBDUlRDIHdob3NlIGluY29taW5nIHN0YXRlIHRvIHVwZGF0ZQorICogQG1vZGU6IGtlcm5l bC1pbnRlcm5hbCBtb2RlIHRvIHVzZSBmb3IgdGhlIENSVEMsIG9yIE5VTEwgdG8gZGlzYWJsZQor ICoKKyAqIFNldCBhIG1vZGUgKG9yaWdpbmF0aW5nIGZyb20gdGhlIGtlcm5lbCkgb24gdGhlIGRl c2lyZWQgQ1JUQyBzdGF0ZSBhbmQgdXBkYXRlCisgKiB0aGUgZW5hYmxlIHByb3BlcnR5LgorICoK KyAqIFJFVFVSTlM6CisgKiBaZXJvIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb24gZmFpbHVyZS4g Q2Fubm90IHJldHVybiAtRURFQURMSy4KKyAqLworaW50IGRybV9hdG9taWNfc2V0X21vZGVfZm9y X2NydGMoc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSwKKwkJCQkgY29uc3Qgc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJc3RydWN0IGRybV9jcnRjICpjcnRjID0gc3RhdGUt PmNydGM7CisJc3RydWN0IGRybV9tb2RlX21vZGVpbmZvIHVtb2RlOworCisJLyogRWFybHkgcmV0 dXJuIGZvciBubyBjaGFuZ2UuICovCisJaWYgKG1vZGUgJiYgbWVtY21wKCZzdGF0ZS0+bW9kZSwg bW9kZSwgc2l6ZW9mKCptb2RlKSkgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlkcm1fcHJvcGVydHlf YmxvYl9wdXQoc3RhdGUtPm1vZGVfYmxvYik7CisJc3RhdGUtPm1vZGVfYmxvYiA9IE5VTEw7CisK KwlpZiAobW9kZSkgeworCQlkcm1fbW9kZV9jb252ZXJ0X3RvX3Vtb2RlKCZ1bW9kZSwgbW9kZSk7 CisJCXN0YXRlLT5tb2RlX2Jsb2IgPQorCQkJZHJtX3Byb3BlcnR5X2NyZWF0ZV9ibG9iKHN0YXRl LT5jcnRjLT5kZXYsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih1 bW9kZSksCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1bW9kZSk7CisJCWlm IChJU19FUlIoc3RhdGUtPm1vZGVfYmxvYikpCisJCQlyZXR1cm4gUFRSX0VSUihzdGF0ZS0+bW9k ZV9ibG9iKTsKKworCQlkcm1fbW9kZV9jb3B5KCZzdGF0ZS0+bW9kZSwgbW9kZSk7CisJCXN0YXRl LT5lbmFibGUgPSB0cnVlOworCQlEUk1fREVCVUdfQVRPTUlDKCJTZXQgW01PREU6JXNdIGZvciBb Q1JUQzolZDolc10gc3RhdGUgJXBcbiIsCisJCQkJIG1vZGUtPm5hbWUsIGNydGMtPmJhc2UuaWQs IGNydGMtPm5hbWUsIHN0YXRlKTsKKwl9IGVsc2UgeworCQltZW1zZXQoJnN0YXRlLT5tb2RlLCAw LCBzaXplb2Yoc3RhdGUtPm1vZGUpKTsKKwkJc3RhdGUtPmVuYWJsZSA9IGZhbHNlOworCQlEUk1f REVCVUdfQVRPTUlDKCJTZXQgW05PTU9ERV0gZm9yIFtDUlRDOiVkOiVzXSBzdGF0ZSAlcFxuIiwK KwkJCQkgY3J0Yy0+YmFzZS5pZCwgY3J0Yy0+bmFtZSwgc3RhdGUpOworCX0KKworCXJldHVybiAw OworfQorRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX3NldF9tb2RlX2Zvcl9jcnRjKTsKKworLyoq CisgKiBkcm1fYXRvbWljX3NldF9tb2RlX3Byb3BfZm9yX2NydGMgLSBzZXQgbW9kZSBmb3IgQ1JU QworICogQHN0YXRlOiB0aGUgQ1JUQyB3aG9zZSBpbmNvbWluZyBzdGF0ZSB0byB1cGRhdGUKKyAq IEBibG9iOiBwb2ludGVyIHRvIGJsb2IgcHJvcGVydHkgdG8gdXNlIGZvciBtb2RlCisgKgorICog U2V0IGEgbW9kZSAob3JpZ2luYXRpbmcgZnJvbSBhIGJsb2IgcHJvcGVydHkpIG9uIHRoZSBkZXNp cmVkIENSVEMgc3RhdGUuCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSBhIHJlZmVyZW5jZSBv biB0aGUgYmxvYiBwcm9wZXJ0eSBmb3IgdGhlIENSVEMgc3RhdGUsCisgKiBhbmQgcmVsZWFzZSB0 aGUgcmVmZXJlbmNlIGhlbGQgb24gdGhlIHN0YXRlJ3MgZXhpc3RpbmcgbW9kZSBwcm9wZXJ0eSwg aWYgYW55CisgKiB3YXMgc2V0LgorICoKKyAqIFJFVFVSTlM6CisgKiBaZXJvIG9uIHN1Y2Nlc3Ms IGVycm9yIGNvZGUgb24gZmFpbHVyZS4gQ2Fubm90IHJldHVybiAtRURFQURMSy4KKyAqLworaW50 IGRybV9hdG9taWNfc2V0X21vZGVfcHJvcF9mb3JfY3J0YyhzdHJ1Y3QgZHJtX2NydGNfc3RhdGUg KnN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJt X3Byb3BlcnR5X2Jsb2IgKmJsb2IpCit7CisJc3RydWN0IGRybV9jcnRjICpjcnRjID0gc3RhdGUt PmNydGM7CisKKwlpZiAoYmxvYiA9PSBzdGF0ZS0+bW9kZV9ibG9iKQorCQlyZXR1cm4gMDsKKwor CWRybV9wcm9wZXJ0eV9ibG9iX3B1dChzdGF0ZS0+bW9kZV9ibG9iKTsKKwlzdGF0ZS0+bW9kZV9i bG9iID0gTlVMTDsKKworCW1lbXNldCgmc3RhdGUtPm1vZGUsIDAsIHNpemVvZihzdGF0ZS0+bW9k ZSkpOworCisJaWYgKGJsb2IpIHsKKwkJaW50IHJldDsKKworCQlpZiAoYmxvYi0+bGVuZ3RoICE9 IHNpemVvZihzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8pKSB7CisJCQlEUk1fREVCVUdfQVRPTUlD KCJbQ1JUQzolZDolc10gYmFkIG1vZGUgYmxvYiBsZW5ndGg6ICV6dVxuIiwKKwkJCQkJIGNydGMt PmJhc2UuaWQsIGNydGMtPm5hbWUsCisJCQkJCSBibG9iLT5sZW5ndGgpOworCQkJcmV0dXJuIC1F SU5WQUw7CisJCX0KKworCQlyZXQgPSBkcm1fbW9kZV9jb252ZXJ0X3Vtb2RlKGNydGMtPmRldiwK KwkJCQkJICAgICAmc3RhdGUtPm1vZGUsIGJsb2ItPmRhdGEpOworCQlpZiAocmV0KSB7CisJCQlE Uk1fREVCVUdfQVRPTUlDKCJbQ1JUQzolZDolc10gaW52YWxpZCBtb2RlIChyZXQ9JWQsIHN0YXR1 cz0lcyk6XG4iLAorCQkJCQkgY3J0Yy0+YmFzZS5pZCwgY3J0Yy0+bmFtZSwKKwkJCQkJIHJldCwg ZHJtX2dldF9tb2RlX3N0YXR1c19uYW1lKHN0YXRlLT5tb2RlLnN0YXR1cykpOworCQkJZHJtX21v ZGVfZGVidWdfcHJpbnRtb2RlbGluZSgmc3RhdGUtPm1vZGUpOworCQkJcmV0dXJuIC1FSU5WQUw7 CisJCX0KKworCQlzdGF0ZS0+bW9kZV9ibG9iID0gZHJtX3Byb3BlcnR5X2Jsb2JfZ2V0KGJsb2Ip OworCQlzdGF0ZS0+ZW5hYmxlID0gdHJ1ZTsKKwkJRFJNX0RFQlVHX0FUT01JQygiU2V0IFtNT0RF OiVzXSBmb3IgW0NSVEM6JWQ6JXNdIHN0YXRlICVwXG4iLAorCQkJCSBzdGF0ZS0+bW9kZS5uYW1l LCBjcnRjLT5iYXNlLmlkLCBjcnRjLT5uYW1lLAorCQkJCSBzdGF0ZSk7CisJfSBlbHNlIHsKKwkJ c3RhdGUtPmVuYWJsZSA9IGZhbHNlOworCQlEUk1fREVCVUdfQVRPTUlDKCJTZXQgW05PTU9ERV0g Zm9yIFtDUlRDOiVkOiVzXSBzdGF0ZSAlcFxuIiwKKwkJCQkgY3J0Yy0+YmFzZS5pZCwgY3J0Yy0+ bmFtZSwgc3RhdGUpOworCX0KKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkcm1fYXRv bWljX3NldF9tb2RlX3Byb3BfZm9yX2NydGMpOworCisvKioKKyAqIGRybV9hdG9taWNfc2V0X2Ny dGNfZm9yX3BsYW5lIC0gc2V0IGNydGMgZm9yIHBsYW5lCisgKiBAcGxhbmVfc3RhdGU6IHRoZSBw bGFuZSB3aG9zZSBpbmNvbWluZyBzdGF0ZSB0byB1cGRhdGUKKyAqIEBjcnRjOiBjcnRjIHRvIHVz ZSBmb3IgdGhlIHBsYW5lCisgKgorICogQ2hhbmdpbmcgdGhlIGFzc2lnbmVkIGNydGMgZm9yIGEg cGxhbmUgcmVxdWlyZXMgdXMgdG8gZ3JhYiB0aGUgbG9jayBhbmQgc3RhdGUKKyAqIGZvciB0aGUg bmV3IGNydGMsIGFzIG5lZWRlZC4gVGhpcyBmdW5jdGlvbiB0YWtlcyBjYXJlIG9mIGFsbCB0aGVz ZSBkZXRhaWxzCisgKiBiZXNpZGVzIHVwZGF0aW5nIHRoZSBwb2ludGVyIGluIHRoZSBzdGF0ZSBv YmplY3QgaXRzZWxmLgorICoKKyAqIFJldHVybnM6CisgKiAwIG9uIHN1Y2Nlc3Mgb3IgY2FuIGZh aWwgd2l0aCAtRURFQURMSyBvciAtRU5PTUVNLiBXaGVuIHRoZSBlcnJvciBpcyBFREVBRExLCisg KiB0aGVuIHRoZSB3L3cgbXV0ZXggY29kZSBoYXMgZGV0ZWN0ZWQgYSBkZWFkbG9jayBhbmQgdGhl IGVudGlyZSBhdG9taWMKKyAqIHNlcXVlbmNlIG11c3QgYmUgcmVzdGFydGVkLiBBbGwgb3RoZXIg ZXJyb3JzIGFyZSBmYXRhbC4KKyAqLworaW50Citkcm1fYXRvbWljX3NldF9jcnRjX2Zvcl9wbGFu ZShzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwKKwkJCSAgICAgIHN0cnVjdCBk cm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9IHBsYW5lX3N0YXRl LT5wbGFuZTsKKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7CisJLyogTm90aGlu ZyB0byBkbyBmb3Igc2FtZSBjcnRjKi8KKwlpZiAocGxhbmVfc3RhdGUtPmNydGMgPT0gY3J0YykK KwkJcmV0dXJuIDA7CisJaWYgKHBsYW5lX3N0YXRlLT5jcnRjKSB7CisJCWNydGNfc3RhdGUgPSBk cm1fYXRvbWljX2dldF9jcnRjX3N0YXRlKHBsYW5lX3N0YXRlLT5zdGF0ZSwKKwkJCQkJCSAgICAg ICBwbGFuZV9zdGF0ZS0+Y3J0Yyk7CisJCWlmIChXQVJOX09OKElTX0VSUihjcnRjX3N0YXRlKSkp CisJCQlyZXR1cm4gUFRSX0VSUihjcnRjX3N0YXRlKTsKKworCQljcnRjX3N0YXRlLT5wbGFuZV9t YXNrICY9IH5kcm1fcGxhbmVfbWFzayhwbGFuZSk7CisJfQorCisJcGxhbmVfc3RhdGUtPmNydGMg PSBjcnRjOworCisJaWYgKGNydGMpIHsKKwkJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2Ny dGNfc3RhdGUocGxhbmVfc3RhdGUtPnN0YXRlLAorCQkJCQkJICAgICAgIGNydGMpOworCQlpZiAo SVNfRVJSKGNydGNfc3RhdGUpKQorCQkJcmV0dXJuIFBUUl9FUlIoY3J0Y19zdGF0ZSk7CisJCWNy dGNfc3RhdGUtPnBsYW5lX21hc2sgfD0gZHJtX3BsYW5lX21hc2socGxhbmUpOworCX0KKworCWlm IChjcnRjKQorCQlEUk1fREVCVUdfQVRPTUlDKCJMaW5rIFtQTEFORTolZDolc10gc3RhdGUgJXAg dG8gW0NSVEM6JWQ6JXNdXG4iLAorCQkJCSBwbGFuZS0+YmFzZS5pZCwgcGxhbmUtPm5hbWUsIHBs YW5lX3N0YXRlLAorCQkJCSBjcnRjLT5iYXNlLmlkLCBjcnRjLT5uYW1lKTsKKwllbHNlCisJCURS TV9ERUJVR19BVE9NSUMoIkxpbmsgW1BMQU5FOiVkOiVzXSBzdGF0ZSAlcCB0byBbTk9DUlRDXVxu IiwKKwkJCQkgcGxhbmUtPmJhc2UuaWQsIHBsYW5lLT5uYW1lLCBwbGFuZV9zdGF0ZSk7CisKKwly ZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2F0b21pY19zZXRfY3J0Y19mb3JfcGxhbmUp OworCisvKioKKyAqIGRybV9hdG9taWNfc2V0X2ZiX2Zvcl9wbGFuZSAtIHNldCBmcmFtZWJ1ZmZl ciBmb3IgcGxhbmUKKyAqIEBwbGFuZV9zdGF0ZTogYXRvbWljIHN0YXRlIG9iamVjdCBmb3IgdGhl IHBsYW5lCisgKiBAZmI6IGZiIHRvIHVzZSBmb3IgdGhlIHBsYW5lCisgKgorICogQ2hhbmdpbmcg dGhlIGFzc2lnbmVkIGZyYW1lYnVmZmVyIGZvciBhIHBsYW5lIHJlcXVpcmVzIHVzIHRvIGdyYWIg YSByZWZlcmVuY2UKKyAqIHRvIHRoZSBuZXcgZmIgYW5kIGRyb3AgdGhlIHJlZmVyZW5jZSB0byB0 aGUgb2xkIGZiLCBpZiB0aGVyZSBpcyBvbmUuIFRoaXMKKyAqIGZ1bmN0aW9uIHRha2VzIGNhcmUg b2YgYWxsIHRoZXNlIGRldGFpbHMgYmVzaWRlcyB1cGRhdGluZyB0aGUgcG9pbnRlciBpbiB0aGUK KyAqIHN0YXRlIG9iamVjdCBpdHNlbGYuCisgKi8KK3ZvaWQKK2RybV9hdG9taWNfc2V0X2ZiX2Zv cl9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwKKwkJCSAgICBzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKK3sKKwlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9IHBs YW5lX3N0YXRlLT5wbGFuZTsKKworCWlmIChmYikKKwkJRFJNX0RFQlVHX0FUT01JQygiU2V0IFtG QjolZF0gZm9yIFtQTEFORTolZDolc10gc3RhdGUgJXBcbiIsCisJCQkJIGZiLT5iYXNlLmlkLCBw bGFuZS0+YmFzZS5pZCwgcGxhbmUtPm5hbWUsCisJCQkJIHBsYW5lX3N0YXRlKTsKKwllbHNlCisJ CURSTV9ERUJVR19BVE9NSUMoIlNldCBbTk9GQl0gZm9yIFtQTEFORTolZDolc10gc3RhdGUgJXBc biIsCisJCQkJIHBsYW5lLT5iYXNlLmlkLCBwbGFuZS0+bmFtZSwgcGxhbmVfc3RhdGUpOworCisJ ZHJtX2ZyYW1lYnVmZmVyX2Fzc2lnbigmcGxhbmVfc3RhdGUtPmZiLCBmYik7Cit9CitFWFBPUlRf U1lNQk9MKGRybV9hdG9taWNfc2V0X2ZiX2Zvcl9wbGFuZSk7CisKKy8qKgorICogZHJtX2F0b21p Y19zZXRfZmVuY2VfZm9yX3BsYW5lIC0gc2V0IGZlbmNlIGZvciBwbGFuZQorICogQHBsYW5lX3N0 YXRlOiBhdG9taWMgc3RhdGUgb2JqZWN0IGZvciB0aGUgcGxhbmUKKyAqIEBmZW5jZTogZG1hX2Zl bmNlIHRvIHVzZSBmb3IgdGhlIHBsYW5lCisgKgorICogSGVscGVyIHRvIHNldHVwIHRoZSBwbGFu ZV9zdGF0ZSBmZW5jZSBpbiBjYXNlIGl0IGlzIG5vdCBzZXQgeWV0LgorICogQnkgdXNpbmcgdGhp cyBkcml2ZXJzIGRvZXNuJ3QgbmVlZCB0byB3b3JyeSBpZiB0aGUgdXNlciBjaG9vc2UKKyAqIGlt cGxpY2l0IG9yIGV4cGxpY2l0IGZlbmNpbmcuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIG5v dCBzZXQgdGhlIGZlbmNlIHRvIHRoZSBzdGF0ZSBpZiBpdCB3YXMgc2V0CisgKiB2aWEgZXhwbGlj aXQgZmVuY2luZyBpbnRlcmZhY2VzIG9uIHRoZSBhdG9taWMgaW9jdGwuIEluIHRoYXQgY2FzZSBp dCB3aWxsCisgKiBkcm9wIHRoZSByZWZlcmVuY2UgdG8gdGhlIGZlbmNlIGFzIHdlIGFyZSBub3Qg c3RvcmluZyBpdCBhbnl3aGVyZS4KKyAqIE90aGVyd2lzZSwgaWYgJmRybV9wbGFuZV9zdGF0ZS5m ZW5jZSBpcyBub3Qgc2V0IHRoaXMgZnVuY3Rpb24gd2UganVzdCBzZXQgaXQKKyAqIHdpdGggdGhl IHJlY2VpdmVkIGltcGxpY2l0IGZlbmNlLiBJbiBib3RoIGNhc2VzIHRoaXMgZnVuY3Rpb24gY29u c3VtZXMgYQorICogcmVmZXJlbmNlIGZvciBAZmVuY2UuCisgKgorICogVGhpcyB3YXkgZXhwbGlj aXQgZmVuY2luZyBjYW4gYmUgdXNlZCB0byBvdmVycnVsZSBpbXBsaWNpdCBmZW5jaW5nLCB3aGlj aCBpcworICogaW1wb3J0YW50IHRvIG1ha2UgZXhwbGljaXQgZmVuY2luZyB1c2UtY2FzZXMgd29y azogT25lIGV4YW1wbGUgaXMgdXNpbmcgb25lCisgKiBidWZmZXIgZm9yIDIgc2NyZWVucyB3aXRo IGRpZmZlcmVudCByZWZyZXNoIHJhdGVzLiBJbXBsaWNpdCBmZW5jaW5nIHdpbGwKKyAqIGNsYW1w IHJlbmRlcmluZyB0byB0aGUgcmVmcmVzaCByYXRlIG9mIHRoZSBzbG93ZXIgc2NyZWVuLCB3aGVy ZWFzIGV4cGxpY2l0CisgKiBmZW5jZSBhbGxvd3MgMiBpbmRlcGVuZGVudCByZW5kZXIgYW5kIGRp c3BsYXkgbG9vcHMgb24gYSBzaW5nbGUgYnVmZmVyLiBJZiBhCisgKiBkcml2ZXIgYWxsb3dzIG9i ZXlzIGJvdGggaW1wbGljaXQgYW5kIGV4cGxpY2l0IGZlbmNlcyBmb3IgcGxhbmUgdXBkYXRlcywg dGhlbgorICogaXQgd2lsbCBicmVhayBhbGwgdGhlIGJlbmVmaXRzIG9mIGV4cGxpY2l0IGZlbmNp bmcuCisgKi8KK3ZvaWQKK2RybV9hdG9taWNfc2V0X2ZlbmNlX2Zvcl9wbGFuZShzdHJ1Y3QgZHJt X3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwKKwkJCSAgICAgICBzdHJ1Y3QgZG1hX2ZlbmNlICpm ZW5jZSkKK3sKKwlpZiAocGxhbmVfc3RhdGUtPmZlbmNlKSB7CisJCWRtYV9mZW5jZV9wdXQoZmVu Y2UpOworCQlyZXR1cm47CisJfQorCisJcGxhbmVfc3RhdGUtPmZlbmNlID0gZmVuY2U7Cit9CitF WFBPUlRfU1lNQk9MKGRybV9hdG9taWNfc2V0X2ZlbmNlX2Zvcl9wbGFuZSk7CisKKy8qKgorICog ZHJtX2F0b21pY19zZXRfY3J0Y19mb3JfY29ubmVjdG9yIC0gc2V0IGNydGMgZm9yIGNvbm5lY3Rv cgorICogQGNvbm5fc3RhdGU6IGF0b21pYyBzdGF0ZSBvYmplY3QgZm9yIHRoZSBjb25uZWN0b3IK KyAqIEBjcnRjOiBjcnRjIHRvIHVzZSBmb3IgdGhlIGNvbm5lY3RvcgorICoKKyAqIENoYW5naW5n IHRoZSBhc3NpZ25lZCBjcnRjIGZvciBhIGNvbm5lY3RvciByZXF1aXJlcyB1cyB0byBncmFiIHRo ZSBsb2NrIGFuZAorICogc3RhdGUgZm9yIHRoZSBuZXcgY3J0YywgYXMgbmVlZGVkLiBUaGlzIGZ1 bmN0aW9uIHRha2VzIGNhcmUgb2YgYWxsIHRoZXNlCisgKiBkZXRhaWxzIGJlc2lkZXMgdXBkYXRp bmcgdGhlIHBvaW50ZXIgaW4gdGhlIHN0YXRlIG9iamVjdCBpdHNlbGYuCisgKgorICogUmV0dXJu czoKKyAqIDAgb24gc3VjY2VzcyBvciBjYW4gZmFpbCB3aXRoIC1FREVBRExLIG9yIC1FTk9NRU0u IFdoZW4gdGhlIGVycm9yIGlzIEVERUFETEsKKyAqIHRoZW4gdGhlIHcvdyBtdXRleCBjb2RlIGhh cyBkZXRlY3RlZCBhIGRlYWRsb2NrIGFuZCB0aGUgZW50aXJlIGF0b21pYworICogc2VxdWVuY2Ug bXVzdCBiZSByZXN0YXJ0ZWQuIEFsbCBvdGhlciBlcnJvcnMgYXJlIGZhdGFsLgorICovCitpbnQK K2RybV9hdG9taWNfc2V0X2NydGNfZm9yX2Nvbm5lY3RvcihzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9z dGF0ZSAqY29ubl9zdGF0ZSwKKwkJCQkgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gY29ubl9zdGF0ZS0+Y29ubmVjdG9yOworCXN0 cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKKworCWlmIChjb25uX3N0YXRlLT5jcnRj ID09IGNydGMpCisJCXJldHVybiAwOworCisJaWYgKGNvbm5fc3RhdGUtPmNydGMpIHsKKwkJY3J0 Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X25ld19jcnRjX3N0YXRlKGNvbm5fc3RhdGUtPnN0YXRl LAorCQkJCQkJCSAgIGNvbm5fc3RhdGUtPmNydGMpOworCisJCWNydGNfc3RhdGUtPmNvbm5lY3Rv cl9tYXNrICY9CisJCQl+ZHJtX2Nvbm5lY3Rvcl9tYXNrKGNvbm5fc3RhdGUtPmNvbm5lY3Rvcik7 CisKKwkJZHJtX2Nvbm5lY3Rvcl9wdXQoY29ubl9zdGF0ZS0+Y29ubmVjdG9yKTsKKwkJY29ubl9z dGF0ZS0+Y3J0YyA9IE5VTEw7CisJfQorCisJaWYgKGNydGMpIHsKKwkJY3J0Y19zdGF0ZSA9IGRy bV9hdG9taWNfZ2V0X2NydGNfc3RhdGUoY29ubl9zdGF0ZS0+c3RhdGUsIGNydGMpOworCQlpZiAo SVNfRVJSKGNydGNfc3RhdGUpKQorCQkJcmV0dXJuIFBUUl9FUlIoY3J0Y19zdGF0ZSk7CisKKwkJ Y3J0Y19zdGF0ZS0+Y29ubmVjdG9yX21hc2sgfD0KKwkJCWRybV9jb25uZWN0b3JfbWFzayhjb25u X3N0YXRlLT5jb25uZWN0b3IpOworCisJCWRybV9jb25uZWN0b3JfZ2V0KGNvbm5fc3RhdGUtPmNv bm5lY3Rvcik7CisJCWNvbm5fc3RhdGUtPmNydGMgPSBjcnRjOworCisJCURSTV9ERUJVR19BVE9N SUMoIkxpbmsgW0NPTk5FQ1RPUjolZDolc10gc3RhdGUgJXAgdG8gW0NSVEM6JWQ6JXNdXG4iLAor CQkJCSBjb25uZWN0b3ItPmJhc2UuaWQsIGNvbm5lY3Rvci0+bmFtZSwKKwkJCQkgY29ubl9zdGF0 ZSwgY3J0Yy0+YmFzZS5pZCwgY3J0Yy0+bmFtZSk7CisJfSBlbHNlIHsKKwkJRFJNX0RFQlVHX0FU T01JQygiTGluayBbQ09OTkVDVE9SOiVkOiVzXSBzdGF0ZSAlcCB0byBbTk9DUlRDXVxuIiwKKwkJ CQkgY29ubmVjdG9yLT5iYXNlLmlkLCBjb25uZWN0b3ItPm5hbWUsCisJCQkJIGNvbm5fc3RhdGUp OworCX0KKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX3NldF9jcnRj X2Zvcl9jb25uZWN0b3IpOworCitzdGF0aWMgdm9pZCBzZXRfb3V0X2ZlbmNlX2Zvcl9jcnRjKHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCQkgICBzdHJ1Y3QgZHJtX2NydGMgKmNy dGMsIHMzMiBfX3VzZXIgKmZlbmNlX3B0cikKK3sKKwlzdGF0ZS0+Y3J0Y3NbZHJtX2NydGNfaW5k ZXgoY3J0YyldLm91dF9mZW5jZV9wdHIgPSBmZW5jZV9wdHI7Cit9CisKK3N0YXRpYyBzMzIgX191 c2VyICpnZXRfb3V0X2ZlbmNlX2Zvcl9jcnRjKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0 ZSwKKwkJCQkJICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJczMyIF9fdXNlciAqZmVuY2Vf cHRyOworCisJZmVuY2VfcHRyID0gc3RhdGUtPmNydGNzW2RybV9jcnRjX2luZGV4KGNydGMpXS5v dXRfZmVuY2VfcHRyOworCXN0YXRlLT5jcnRjc1tkcm1fY3J0Y19pbmRleChjcnRjKV0ub3V0X2Zl bmNlX3B0ciA9IE5VTEw7CisKKwlyZXR1cm4gZmVuY2VfcHRyOworfQorCitzdGF0aWMgaW50IHNl dF9vdXRfZmVuY2VfZm9yX2Nvbm5lY3RvcihzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUs CisJCQkJCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkJCXMzMiBfX3VzZXIg KmZlbmNlX3B0cikKK3sKKwl1bnNpZ25lZCBpbnQgaW5kZXggPSBkcm1fY29ubmVjdG9yX2luZGV4 KGNvbm5lY3Rvcik7CisKKwlpZiAoIWZlbmNlX3B0cikKKwkJcmV0dXJuIDA7CisKKwlpZiAocHV0 X3VzZXIoLTEsIGZlbmNlX3B0cikpCisJCXJldHVybiAtRUZBVUxUOworCisJc3RhdGUtPmNvbm5l Y3RvcnNbaW5kZXhdLm91dF9mZW5jZV9wdHIgPSBmZW5jZV9wdHI7CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIHMzMiBfX3VzZXIgKmdldF9vdXRfZmVuY2VfZm9yX2Nvbm5lY3RvcihzdHJ1Y3Qg ZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCisJCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yKQoreworCXVuc2lnbmVkIGludCBpbmRleCA9IGRybV9jb25uZWN0b3JfaW5k ZXgoY29ubmVjdG9yKTsKKwlzMzIgX191c2VyICpmZW5jZV9wdHI7CisKKwlmZW5jZV9wdHIgPSBz dGF0ZS0+Y29ubmVjdG9yc1tpbmRleF0ub3V0X2ZlbmNlX3B0cjsKKwlzdGF0ZS0+Y29ubmVjdG9y c1tpbmRleF0ub3V0X2ZlbmNlX3B0ciA9IE5VTEw7CisKKwlyZXR1cm4gZmVuY2VfcHRyOworfQor CitzdGF0aWMgaW50Citkcm1fYXRvbWljX3JlcGxhY2VfcHJvcGVydHlfYmxvYl9mcm9tX2lkKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCSBzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKipi bG9iLAorCQkJCQkgdWludDY0X3QgYmxvYl9pZCwKKwkJCQkJIHNzaXplX3QgZXhwZWN0ZWRfc2l6 ZSwKKwkJCQkJIHNzaXplX3QgZXhwZWN0ZWRfZWxlbV9zaXplLAorCQkJCQkgYm9vbCAqcmVwbGFj ZWQpCit7CisJc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iICpuZXdfYmxvYiA9IE5VTEw7CisKKwlp ZiAoYmxvYl9pZCAhPSAwKSB7CisJCW5ld19ibG9iID0gZHJtX3Byb3BlcnR5X2xvb2t1cF9ibG9i KGRldiwgYmxvYl9pZCk7CisJCWlmIChuZXdfYmxvYiA9PSBOVUxMKQorCQkJcmV0dXJuIC1FSU5W QUw7CisKKwkJaWYgKGV4cGVjdGVkX3NpemUgPiAwICYmCisJCSAgICBuZXdfYmxvYi0+bGVuZ3Ro ICE9IGV4cGVjdGVkX3NpemUpIHsKKwkJCWRybV9wcm9wZXJ0eV9ibG9iX3B1dChuZXdfYmxvYik7 CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpZiAoZXhwZWN0ZWRfZWxlbV9zaXplID4gMCAm JgorCQkgICAgbmV3X2Jsb2ItPmxlbmd0aCAlIGV4cGVjdGVkX2VsZW1fc2l6ZSAhPSAwKSB7CisJ CQlkcm1fcHJvcGVydHlfYmxvYl9wdXQobmV3X2Jsb2IpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJ CX0KKwl9CisKKwkqcmVwbGFjZWQgfD0gZHJtX3Byb3BlcnR5X3JlcGxhY2VfYmxvYihibG9iLCBu ZXdfYmxvYik7CisJZHJtX3Byb3BlcnR5X2Jsb2JfcHV0KG5ld19ibG9iKTsKKworCXJldHVybiAw OworfQorCitzdGF0aWMgaW50IGRybV9hdG9taWNfY3J0Y19zZXRfcHJvcGVydHkoc3RydWN0IGRy bV9jcnRjICpjcnRjLAorCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgZHJt X3Byb3BlcnR5ICpwcm9wZXJ0eSwKKwkJdWludDY0X3QgdmFsKQoreworCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IGRybV9tb2RlX2NvbmZpZyAqY29uZmlnID0g JmRldi0+bW9kZV9jb25maWc7CisJYm9vbCByZXBsYWNlZCA9IGZhbHNlOworCWludCByZXQ7CisK KwlpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX2FjdGl2ZSkKKwkJc3RhdGUtPmFjdGl2ZSA9 IHZhbDsKKwllbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnByb3BfbW9kZV9pZCkgeworCQlz dHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKm1vZGUgPQorCQkJZHJtX3Byb3BlcnR5X2xvb2t1cF9i bG9iKGRldiwgdmFsKTsKKwkJcmV0ID0gZHJtX2F0b21pY19zZXRfbW9kZV9wcm9wX2Zvcl9jcnRj KHN0YXRlLCBtb2RlKTsKKwkJZHJtX3Byb3BlcnR5X2Jsb2JfcHV0KG1vZGUpOworCQlyZXR1cm4g cmV0OworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5kZWdhbW1hX2x1dF9wcm9wZXJ0 eSkgeworCQlyZXQgPSBkcm1fYXRvbWljX3JlcGxhY2VfcHJvcGVydHlfYmxvYl9mcm9tX2lkKGRl diwKKwkJCQkJJnN0YXRlLT5kZWdhbW1hX2x1dCwKKwkJCQkJdmFsLAorCQkJCQktMSwgc2l6ZW9m KHN0cnVjdCBkcm1fY29sb3JfbHV0KSwKKwkJCQkJJnJlcGxhY2VkKTsKKwkJc3RhdGUtPmNvbG9y X21nbXRfY2hhbmdlZCB8PSByZXBsYWNlZDsKKwkJcmV0dXJuIHJldDsKKwl9IGVsc2UgaWYgKHBy b3BlcnR5ID09IGNvbmZpZy0+Y3RtX3Byb3BlcnR5KSB7CisJCXJldCA9IGRybV9hdG9taWNfcmVw bGFjZV9wcm9wZXJ0eV9ibG9iX2Zyb21faWQoZGV2LAorCQkJCQkmc3RhdGUtPmN0bSwKKwkJCQkJ dmFsLAorCQkJCQlzaXplb2Yoc3RydWN0IGRybV9jb2xvcl9jdG0pLCAtMSwKKwkJCQkJJnJlcGxh Y2VkKTsKKwkJc3RhdGUtPmNvbG9yX21nbXRfY2hhbmdlZCB8PSByZXBsYWNlZDsKKwkJcmV0dXJu IHJldDsKKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+Z2FtbWFfbHV0X3Byb3BlcnR5 KSB7CisJCXJldCA9IGRybV9hdG9taWNfcmVwbGFjZV9wcm9wZXJ0eV9ibG9iX2Zyb21faWQoZGV2 LAorCQkJCQkmc3RhdGUtPmdhbW1hX2x1dCwKKwkJCQkJdmFsLAorCQkJCQktMSwgc2l6ZW9mKHN0 cnVjdCBkcm1fY29sb3JfbHV0KSwKKwkJCQkJJnJlcGxhY2VkKTsKKwkJc3RhdGUtPmNvbG9yX21n bXRfY2hhbmdlZCB8PSByZXBsYWNlZDsKKwkJcmV0dXJuIHJldDsKKwl9IGVsc2UgaWYgKHByb3Bl cnR5ID09IGNvbmZpZy0+cHJvcF9vdXRfZmVuY2VfcHRyKSB7CisJCXMzMiBfX3VzZXIgKmZlbmNl X3B0ciA9IHU2NF90b191c2VyX3B0cih2YWwpOworCisJCWlmICghZmVuY2VfcHRyKQorCQkJcmV0 dXJuIDA7CisKKwkJaWYgKHB1dF91c2VyKC0xLCBmZW5jZV9wdHIpKQorCQkJcmV0dXJuIC1FRkFV TFQ7CisKKwkJc2V0X291dF9mZW5jZV9mb3JfY3J0YyhzdGF0ZS0+c3RhdGUsIGNydGMsIGZlbmNl X3B0cik7CisJfSBlbHNlIGlmIChjcnRjLT5mdW5jcy0+YXRvbWljX3NldF9wcm9wZXJ0eSkgewor CQlyZXR1cm4gY3J0Yy0+ZnVuY3MtPmF0b21pY19zZXRfcHJvcGVydHkoY3J0Yywgc3RhdGUsIHBy b3BlcnR5LCB2YWwpOworCX0gZWxzZSB7CisJCURSTV9ERUJVR19BVE9NSUMoIltDUlRDOiVkOiVz XSB1bmtub3duIHByb3BlcnR5IFtQUk9QOiVkOiVzXV1cbiIsCisJCQkJIGNydGMtPmJhc2UuaWQs IGNydGMtPm5hbWUsCisJCQkJIHByb3BlcnR5LT5iYXNlLmlkLCBwcm9wZXJ0eS0+bmFtZSk7CisJ CXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Citkcm1f YXRvbWljX2NydGNfZ2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJY29uc3Qg c3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSwKKwkJc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJv cGVydHksIHVpbnQ2NF90ICp2YWwpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMt PmRldjsKKwlzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICpjb25maWcgPSAmZGV2LT5tb2RlX2NvbmZp ZzsKKworCWlmIChwcm9wZXJ0eSA9PSBjb25maWctPnByb3BfYWN0aXZlKQorCQkqdmFsID0gc3Rh dGUtPmFjdGl2ZTsKKwllbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnByb3BfbW9kZV9pZCkK KwkJKnZhbCA9IChzdGF0ZS0+bW9kZV9ibG9iKSA/IHN0YXRlLT5tb2RlX2Jsb2ItPmJhc2UuaWQg OiAwOworCWVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+ZGVnYW1tYV9sdXRfcHJvcGVydHkp CisJCSp2YWwgPSAoc3RhdGUtPmRlZ2FtbWFfbHV0KSA/IHN0YXRlLT5kZWdhbW1hX2x1dC0+YmFz ZS5pZCA6IDA7CisJZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5jdG1fcHJvcGVydHkpCisJ CSp2YWwgPSAoc3RhdGUtPmN0bSkgPyBzdGF0ZS0+Y3RtLT5iYXNlLmlkIDogMDsKKwllbHNlIGlm IChwcm9wZXJ0eSA9PSBjb25maWctPmdhbW1hX2x1dF9wcm9wZXJ0eSkKKwkJKnZhbCA9IChzdGF0 ZS0+Z2FtbWFfbHV0KSA/IHN0YXRlLT5nYW1tYV9sdXQtPmJhc2UuaWQgOiAwOworCWVsc2UgaWYg KHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9vdXRfZmVuY2VfcHRyKQorCQkqdmFsID0gMDsKKwll bHNlIGlmIChjcnRjLT5mdW5jcy0+YXRvbWljX2dldF9wcm9wZXJ0eSkKKwkJcmV0dXJuIGNydGMt PmZ1bmNzLT5hdG9taWNfZ2V0X3Byb3BlcnR5KGNydGMsIHN0YXRlLCBwcm9wZXJ0eSwgdmFsKTsK KwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg ZHJtX2F0b21pY19wbGFuZV9zZXRfcHJvcGVydHkoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJ CXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9w ZXJ0eSwKKwkJdWludDY0X3QgdmFsKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwbGFu ZS0+ZGV2OworCXN0cnVjdCBkcm1fbW9kZV9jb25maWcgKmNvbmZpZyA9ICZkZXYtPm1vZGVfY29u ZmlnOworCisJaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9mYl9pZCkgeworCQlzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYiA9IGRybV9mcmFtZWJ1ZmZlcl9sb29rdXAoZGV2LCBOVUxMLCB2 YWwpOworCQlkcm1fYXRvbWljX3NldF9mYl9mb3JfcGxhbmUoc3RhdGUsIGZiKTsKKwkJaWYgKGZi KQorCQkJZHJtX2ZyYW1lYnVmZmVyX3B1dChmYik7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBj b25maWctPnByb3BfaW5fZmVuY2VfZmQpIHsKKwkJaWYgKHN0YXRlLT5mZW5jZSkKKwkJCXJldHVy biAtRUlOVkFMOworCisJCWlmIChVNjQySTY0KHZhbCkgPT0gLTEpCisJCQlyZXR1cm4gMDsKKwor CQlzdGF0ZS0+ZmVuY2UgPSBzeW5jX2ZpbGVfZ2V0X2ZlbmNlKHZhbCk7CisJCWlmICghc3RhdGUt PmZlbmNlKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNv bmZpZy0+cHJvcF9jcnRjX2lkKSB7CisJCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IGRybV9jcnRj X2ZpbmQoZGV2LCBOVUxMLCB2YWwpOworCQlyZXR1cm4gZHJtX2F0b21pY19zZXRfY3J0Y19mb3Jf cGxhbmUoc3RhdGUsIGNydGMpOworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9w X2NydGNfeCkgeworCQlzdGF0ZS0+Y3J0Y194ID0gVTY0Mkk2NCh2YWwpOworCX0gZWxzZSBpZiAo cHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX2NydGNfeSkgeworCQlzdGF0ZS0+Y3J0Y195ID0gVTY0 Mkk2NCh2YWwpOworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX2NydGNfdykg eworCQlzdGF0ZS0+Y3J0Y193ID0gdmFsOworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmln LT5wcm9wX2NydGNfaCkgeworCQlzdGF0ZS0+Y3J0Y19oID0gdmFsOworCX0gZWxzZSBpZiAocHJv cGVydHkgPT0gY29uZmlnLT5wcm9wX3NyY194KSB7CisJCXN0YXRlLT5zcmNfeCA9IHZhbDsKKwl9 IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+cHJvcF9zcmNfeSkgeworCQlzdGF0ZS0+c3Jj X3kgPSB2YWw7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnByb3Bfc3JjX3cpIHsK KwkJc3RhdGUtPnNyY193ID0gdmFsOworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5w cm9wX3NyY19oKSB7CisJCXN0YXRlLT5zcmNfaCA9IHZhbDsKKwl9IGVsc2UgaWYgKHByb3BlcnR5 ID09IHBsYW5lLT5hbHBoYV9wcm9wZXJ0eSkgeworCQlzdGF0ZS0+YWxwaGEgPSB2YWw7CisJfSBl bHNlIGlmIChwcm9wZXJ0eSA9PSBwbGFuZS0+YmxlbmRfbW9kZV9wcm9wZXJ0eSkgeworCQlzdGF0 ZS0+cGl4ZWxfYmxlbmRfbW9kZSA9IHZhbDsKKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IHBsYW5l LT5yb3RhdGlvbl9wcm9wZXJ0eSkgeworCQlpZiAoIWlzX3Bvd2VyX29mXzIodmFsICYgRFJNX01P REVfUk9UQVRFX01BU0spKSB7CisJCQlEUk1fREVCVUdfQVRPTUlDKCJbUExBTkU6JWQ6JXNdIGJh ZCByb3RhdGlvbiBiaXRtYXNrOiAweCVsbHhcbiIsCisJCQkJCSBwbGFuZS0+YmFzZS5pZCwgcGxh bmUtPm5hbWUsIHZhbCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlzdGF0ZS0+cm90YXRp b24gPSB2YWw7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBwbGFuZS0+enBvc19wcm9wZXJ0eSkg eworCQlzdGF0ZS0+enBvcyA9IHZhbDsKKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IHBsYW5lLT5j b2xvcl9lbmNvZGluZ19wcm9wZXJ0eSkgeworCQlzdGF0ZS0+Y29sb3JfZW5jb2RpbmcgPSB2YWw7 CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBwbGFuZS0+Y29sb3JfcmFuZ2VfcHJvcGVydHkpIHsK KwkJc3RhdGUtPmNvbG9yX3JhbmdlID0gdmFsOworCX0gZWxzZSBpZiAocGxhbmUtPmZ1bmNzLT5h dG9taWNfc2V0X3Byb3BlcnR5KSB7CisJCXJldHVybiBwbGFuZS0+ZnVuY3MtPmF0b21pY19zZXRf cHJvcGVydHkocGxhbmUsIHN0YXRlLAorCQkJCXByb3BlcnR5LCB2YWwpOworCX0gZWxzZSB7CisJ CURSTV9ERUJVR19BVE9NSUMoIltQTEFORTolZDolc10gdW5rbm93biBwcm9wZXJ0eSBbUFJPUDol ZDolc11dXG4iLAorCQkJCSBwbGFuZS0+YmFzZS5pZCwgcGxhbmUtPm5hbWUsCisJCQkJIHByb3Bl cnR5LT5iYXNlLmlkLCBwcm9wZXJ0eS0+bmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50Citkcm1fYXRvbWljX3BsYW5lX2dldF9wcm9wZXJ0 eShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJY29uc3Qgc3RydWN0IGRybV9wbGFuZV9zdGF0 ZSAqc3RhdGUsCisJCXN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LCB1aW50NjRfdCAqdmFs KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwbGFuZS0+ZGV2OworCXN0cnVjdCBkcm1f bW9kZV9jb25maWcgKmNvbmZpZyA9ICZkZXYtPm1vZGVfY29uZmlnOworCisJaWYgKHByb3BlcnR5 ID09IGNvbmZpZy0+cHJvcF9mYl9pZCkgeworCQkqdmFsID0gKHN0YXRlLT5mYikgPyBzdGF0ZS0+ ZmItPmJhc2UuaWQgOiAwOworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX2lu X2ZlbmNlX2ZkKSB7CisJCSp2YWwgPSAtMTsKKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZp Zy0+cHJvcF9jcnRjX2lkKSB7CisJCSp2YWwgPSAoc3RhdGUtPmNydGMpID8gc3RhdGUtPmNydGMt PmJhc2UuaWQgOiAwOworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX2NydGNf eCkgeworCQkqdmFsID0gSTY0MlU2NChzdGF0ZS0+Y3J0Y194KTsKKwl9IGVsc2UgaWYgKHByb3Bl cnR5ID09IGNvbmZpZy0+cHJvcF9jcnRjX3kpIHsKKwkJKnZhbCA9IEk2NDJVNjQoc3RhdGUtPmNy dGNfeSk7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnByb3BfY3J0Y193KSB7CisJ CSp2YWwgPSBzdGF0ZS0+Y3J0Y193OworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5w cm9wX2NydGNfaCkgeworCQkqdmFsID0gc3RhdGUtPmNydGNfaDsKKwl9IGVsc2UgaWYgKHByb3Bl cnR5ID09IGNvbmZpZy0+cHJvcF9zcmNfeCkgeworCQkqdmFsID0gc3RhdGUtPnNyY194OworCX0g ZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX3NyY195KSB7CisJCSp2YWwgPSBzdGF0 ZS0+c3JjX3k7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnByb3Bfc3JjX3cpIHsK KwkJKnZhbCA9IHN0YXRlLT5zcmNfdzsKKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+ cHJvcF9zcmNfaCkgeworCQkqdmFsID0gc3RhdGUtPnNyY19oOworCX0gZWxzZSBpZiAocHJvcGVy dHkgPT0gcGxhbmUtPmFscGhhX3Byb3BlcnR5KSB7CisJCSp2YWwgPSBzdGF0ZS0+YWxwaGE7CisJ fSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBwbGFuZS0+YmxlbmRfbW9kZV9wcm9wZXJ0eSkgeworCQkq dmFsID0gc3RhdGUtPnBpeGVsX2JsZW5kX21vZGU7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBw bGFuZS0+cm90YXRpb25fcHJvcGVydHkpIHsKKwkJKnZhbCA9IHN0YXRlLT5yb3RhdGlvbjsKKwl9 IGVsc2UgaWYgKHByb3BlcnR5ID09IHBsYW5lLT56cG9zX3Byb3BlcnR5KSB7CisJCSp2YWwgPSBz dGF0ZS0+enBvczsKKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IHBsYW5lLT5jb2xvcl9lbmNvZGlu Z19wcm9wZXJ0eSkgeworCQkqdmFsID0gc3RhdGUtPmNvbG9yX2VuY29kaW5nOworCX0gZWxzZSBp ZiAocHJvcGVydHkgPT0gcGxhbmUtPmNvbG9yX3JhbmdlX3Byb3BlcnR5KSB7CisJCSp2YWwgPSBz dGF0ZS0+Y29sb3JfcmFuZ2U7CisJfSBlbHNlIGlmIChwbGFuZS0+ZnVuY3MtPmF0b21pY19nZXRf cHJvcGVydHkpIHsKKwkJcmV0dXJuIHBsYW5lLT5mdW5jcy0+YXRvbWljX2dldF9wcm9wZXJ0eShw bGFuZSwgc3RhdGUsIHByb3BlcnR5LCB2YWwpOworCX0gZWxzZSB7CisJCXJldHVybiAtRUlOVkFM OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRybV93cml0ZWJhY2tfam9i ICoKK2RybV9hdG9taWNfZ2V0X3dyaXRlYmFja19qb2Ioc3RydWN0IGRybV9jb25uZWN0b3Jfc3Rh dGUgKmNvbm5fc3RhdGUpCit7CisJV0FSTl9PTihjb25uX3N0YXRlLT5jb25uZWN0b3ItPmNvbm5l Y3Rvcl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9XUklURUJBQ0spOworCisJaWYgKCFjb25u X3N0YXRlLT53cml0ZWJhY2tfam9iKQorCQljb25uX3N0YXRlLT53cml0ZWJhY2tfam9iID0KKwkJ CWt6YWxsb2Moc2l6ZW9mKCpjb25uX3N0YXRlLT53cml0ZWJhY2tfam9iKSwgR0ZQX0tFUk5FTCk7 CisKKwlyZXR1cm4gY29ubl9zdGF0ZS0+d3JpdGViYWNrX2pvYjsKK30KKworc3RhdGljIGludCBk cm1fYXRvbWljX3NldF93cml0ZWJhY2tfZmJfZm9yX2Nvbm5lY3RvcigKKwkJc3RydWN0IGRybV9j b25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUsCisJCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi KQoreworCXN0cnVjdCBkcm1fd3JpdGViYWNrX2pvYiAqam9iID0KKwkJZHJtX2F0b21pY19nZXRf d3JpdGViYWNrX2pvYihjb25uX3N0YXRlKTsKKwlpZiAoIWpvYikKKwkJcmV0dXJuIC1FTk9NRU07 CisKKwlkcm1fZnJhbWVidWZmZXJfYXNzaWduKCZqb2ItPmZiLCBmYik7CisKKwlpZiAoZmIpCisJ CURSTV9ERUJVR19BVE9NSUMoIlNldCBbRkI6JWRdIGZvciBjb25uZWN0b3Igc3RhdGUgJXBcbiIs CisJCQkJIGZiLT5iYXNlLmlkLCBjb25uX3N0YXRlKTsKKwllbHNlCisJCURSTV9ERUJVR19BVE9N SUMoIlNldCBbTk9GQl0gZm9yIGNvbm5lY3RvciBzdGF0ZSAlcFxuIiwKKwkJCQkgY29ubl9zdGF0 ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkcm1fYXRvbWljX2Nvbm5lY3Rvcl9z ZXRfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJc3RydWN0IGRy bV9jb25uZWN0b3Jfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwK KwkJdWludDY0X3QgdmFsKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3It PmRldjsKKwlzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICpjb25maWcgPSAmZGV2LT5tb2RlX2NvbmZp ZzsKKworCWlmIChwcm9wZXJ0eSA9PSBjb25maWctPnByb3BfY3J0Y19pZCkgeworCQlzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMgPSBkcm1fY3J0Y19maW5kKGRldiwgTlVMTCwgdmFsKTsKKwkJcmV0dXJu IGRybV9hdG9taWNfc2V0X2NydGNfZm9yX2Nvbm5lY3RvcihzdGF0ZSwgY3J0Yyk7CisJfSBlbHNl IGlmIChwcm9wZXJ0eSA9PSBjb25maWctPmRwbXNfcHJvcGVydHkpIHsKKwkJLyogc2V0dGluZyBE UE1TIHByb3BlcnR5IHJlcXVpcmVzIHNwZWNpYWwgaGFuZGxpbmcsIHdoaWNoCisJCSAqIGlzIGRv bmUgaW4gbGVnYWN5IHNldHByb3AgcGF0aCBmb3IgdXMuICBEaXNhbGxvdyAoZm9yCisJCSAqIG5v dz8pIGF0b21pYyB3cml0ZXMgdG8gRFBNUyBwcm9wZXJ0eToKKwkJICovCisJCXJldHVybiAtRUlO VkFMOworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT50dl9zZWxlY3Rfc3ViY29ubmVj dG9yX3Byb3BlcnR5KSB7CisJCXN0YXRlLT50di5zdWJjb25uZWN0b3IgPSB2YWw7CisJfSBlbHNl IGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X2xlZnRfbWFyZ2luX3Byb3BlcnR5KSB7CisJCXN0 YXRlLT50di5tYXJnaW5zLmxlZnQgPSB2YWw7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25m aWctPnR2X3JpZ2h0X21hcmdpbl9wcm9wZXJ0eSkgeworCQlzdGF0ZS0+dHYubWFyZ2lucy5yaWdo dCA9IHZhbDsKKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+dHZfdG9wX21hcmdpbl9w cm9wZXJ0eSkgeworCQlzdGF0ZS0+dHYubWFyZ2lucy50b3AgPSB2YWw7CisJfSBlbHNlIGlmIChw cm9wZXJ0eSA9PSBjb25maWctPnR2X2JvdHRvbV9tYXJnaW5fcHJvcGVydHkpIHsKKwkJc3RhdGUt PnR2Lm1hcmdpbnMuYm90dG9tID0gdmFsOworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmln LT50dl9tb2RlX3Byb3BlcnR5KSB7CisJCXN0YXRlLT50di5tb2RlID0gdmFsOworCX0gZWxzZSBp ZiAocHJvcGVydHkgPT0gY29uZmlnLT50dl9icmlnaHRuZXNzX3Byb3BlcnR5KSB7CisJCXN0YXRl LT50di5icmlnaHRuZXNzID0gdmFsOworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT50 dl9jb250cmFzdF9wcm9wZXJ0eSkgeworCQlzdGF0ZS0+dHYuY29udHJhc3QgPSB2YWw7CisJfSBl bHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X2ZsaWNrZXJfcmVkdWN0aW9uX3Byb3BlcnR5 KSB7CisJCXN0YXRlLT50di5mbGlja2VyX3JlZHVjdGlvbiA9IHZhbDsKKwl9IGVsc2UgaWYgKHBy b3BlcnR5ID09IGNvbmZpZy0+dHZfb3ZlcnNjYW5fcHJvcGVydHkpIHsKKwkJc3RhdGUtPnR2Lm92 ZXJzY2FuID0gdmFsOworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT50dl9zYXR1cmF0 aW9uX3Byb3BlcnR5KSB7CisJCXN0YXRlLT50di5zYXR1cmF0aW9uID0gdmFsOworCX0gZWxzZSBp ZiAocHJvcGVydHkgPT0gY29uZmlnLT50dl9odWVfcHJvcGVydHkpIHsKKwkJc3RhdGUtPnR2Lmh1 ZSA9IHZhbDsKKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbmZpZy0+bGlua19zdGF0dXNfcHJv cGVydHkpIHsKKwkJLyogTmV2ZXIgZG93bmdyYWRlIGZyb20gR09PRCB0byBCQUQgb24gdXNlcnNw YWNlJ3MgcmVxdWVzdCBoZXJlLAorCQkgKiBvbmx5IGh3IGlzc3VlcyBjYW4gZG8gdGhhdC4KKwkJ ICoKKwkJICogRm9yIGFuIGF0b21pYyBwcm9wZXJ0eSB0aGUgdXNlcnNwYWNlIGRvZXNuJ3QgbmVl ZCB0byBiZSBhYmxlCisJCSAqIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBwcm9wZXJ0aWVzLCBidXQg bmVlZHMgdG8gYmUgYWJsZSB0bworCQkgKiByZXN0b3JlIHRoZSBzdGF0ZSBpdCB3YW50cyBvbiBW VCBzd2l0Y2guIFNvIGlmIHRoZSB1c2Vyc3BhY2UKKwkJICogdHJpZXMgdG8gY2hhbmdlIHRoZSBs aW5rX3N0YXR1cyBmcm9tIEdPT0QgdG8gQkFELCBkcml2ZXIKKwkJICogc2lsZW50bHkgcmVqZWN0 cyBpdCBhbmQgcmV0dXJucyBhIDAuIFRoaXMgcHJldmVudHMgdXNlcnNwYWNlCisJCSAqIGZyb20g YWNjaWRlbnRseSBicmVha2luZyAgdGhlIGRpc3BsYXkgd2hlbiBpdCByZXN0b3JlcyB0aGUKKwkJ ICogc3RhdGUuCisJCSAqLworCQlpZiAoc3RhdGUtPmxpbmtfc3RhdHVzICE9IERSTV9MSU5LX1NU QVRVU19HT09EKQorCQkJc3RhdGUtPmxpbmtfc3RhdHVzID0gdmFsOworCX0gZWxzZSBpZiAocHJv cGVydHkgPT0gY29uZmlnLT5hc3BlY3RfcmF0aW9fcHJvcGVydHkpIHsKKwkJc3RhdGUtPnBpY3R1 cmVfYXNwZWN0X3JhdGlvID0gdmFsOworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5j b250ZW50X3R5cGVfcHJvcGVydHkpIHsKKwkJc3RhdGUtPmNvbnRlbnRfdHlwZSA9IHZhbDsKKwl9 IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbm5lY3Rvci0+c2NhbGluZ19tb2RlX3Byb3BlcnR5KSB7 CisJCXN0YXRlLT5zY2FsaW5nX21vZGUgPSB2YWw7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBj b25uZWN0b3ItPmNvbnRlbnRfcHJvdGVjdGlvbl9wcm9wZXJ0eSkgeworCQlpZiAodmFsID09IERS TV9NT0RFX0NPTlRFTlRfUFJPVEVDVElPTl9FTkFCTEVEKSB7CisJCQlEUk1fREVCVUdfS01TKCJv bmx5IGRyaXZlcnMgY2FuIHNldCBDUCBFbmFibGVkXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOwor CQl9CisJCXN0YXRlLT5jb250ZW50X3Byb3RlY3Rpb24gPSB2YWw7CisJfSBlbHNlIGlmIChwcm9w ZXJ0eSA9PSBjb25maWctPndyaXRlYmFja19mYl9pZF9wcm9wZXJ0eSkgeworCQlzdHJ1Y3QgZHJt X2ZyYW1lYnVmZmVyICpmYiA9IGRybV9mcmFtZWJ1ZmZlcl9sb29rdXAoZGV2LCBOVUxMLCB2YWwp OworCQlpbnQgcmV0ID0gZHJtX2F0b21pY19zZXRfd3JpdGViYWNrX2ZiX2Zvcl9jb25uZWN0b3Io c3RhdGUsIGZiKTsKKwkJaWYgKGZiKQorCQkJZHJtX2ZyYW1lYnVmZmVyX3B1dChmYik7CisJCXJl dHVybiByZXQ7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPndyaXRlYmFja19vdXRf ZmVuY2VfcHRyX3Byb3BlcnR5KSB7CisJCXMzMiBfX3VzZXIgKmZlbmNlX3B0ciA9IHU2NF90b191 c2VyX3B0cih2YWwpOworCisJCXJldHVybiBzZXRfb3V0X2ZlbmNlX2Zvcl9jb25uZWN0b3Ioc3Rh dGUtPnN0YXRlLCBjb25uZWN0b3IsCisJCQkJCQkgICBmZW5jZV9wdHIpOworCX0gZWxzZSBpZiAo Y29ubmVjdG9yLT5mdW5jcy0+YXRvbWljX3NldF9wcm9wZXJ0eSkgeworCQlyZXR1cm4gY29ubmVj dG9yLT5mdW5jcy0+YXRvbWljX3NldF9wcm9wZXJ0eShjb25uZWN0b3IsCisJCQkJc3RhdGUsIHBy b3BlcnR5LCB2YWwpOworCX0gZWxzZSB7CisJCURSTV9ERUJVR19BVE9NSUMoIltDT05ORUNUT1I6 JWQ6JXNdIHVua25vd24gcHJvcGVydHkgW1BST1A6JWQ6JXNdXVxuIiwKKwkJCQkgY29ubmVjdG9y LT5iYXNlLmlkLCBjb25uZWN0b3ItPm5hbWUsCisJCQkJIHByb3BlcnR5LT5iYXNlLmlkLCBwcm9w ZXJ0eS0+bmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50Citkcm1fYXRvbWljX2Nvbm5lY3Rvcl9nZXRfcHJvcGVydHkoc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvciwKKwkJY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUg KnN0YXRlLAorCQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwgdWludDY0X3QgKnZhbCkK K3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CisJc3RydWN0IGRy bV9tb2RlX2NvbmZpZyAqY29uZmlnID0gJmRldi0+bW9kZV9jb25maWc7CisKKwlpZiAocHJvcGVy dHkgPT0gY29uZmlnLT5wcm9wX2NydGNfaWQpIHsKKwkJKnZhbCA9IChzdGF0ZS0+Y3J0YykgPyBz dGF0ZS0+Y3J0Yy0+YmFzZS5pZCA6IDA7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWct PmRwbXNfcHJvcGVydHkpIHsKKwkJKnZhbCA9IGNvbm5lY3Rvci0+ZHBtczsKKwl9IGVsc2UgaWYg KHByb3BlcnR5ID09IGNvbmZpZy0+dHZfc2VsZWN0X3N1YmNvbm5lY3Rvcl9wcm9wZXJ0eSkgewor CQkqdmFsID0gc3RhdGUtPnR2LnN1YmNvbm5lY3RvcjsKKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09 IGNvbmZpZy0+dHZfbGVmdF9tYXJnaW5fcHJvcGVydHkpIHsKKwkJKnZhbCA9IHN0YXRlLT50di5t YXJnaW5zLmxlZnQ7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X3JpZ2h0X21h cmdpbl9wcm9wZXJ0eSkgeworCQkqdmFsID0gc3RhdGUtPnR2Lm1hcmdpbnMucmlnaHQ7CisJfSBl bHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X3RvcF9tYXJnaW5fcHJvcGVydHkpIHsKKwkJ KnZhbCA9IHN0YXRlLT50di5tYXJnaW5zLnRvcDsKKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNv bmZpZy0+dHZfYm90dG9tX21hcmdpbl9wcm9wZXJ0eSkgeworCQkqdmFsID0gc3RhdGUtPnR2Lm1h cmdpbnMuYm90dG9tOworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT50dl9tb2RlX3By b3BlcnR5KSB7CisJCSp2YWwgPSBzdGF0ZS0+dHYubW9kZTsKKwl9IGVsc2UgaWYgKHByb3BlcnR5 ID09IGNvbmZpZy0+dHZfYnJpZ2h0bmVzc19wcm9wZXJ0eSkgeworCQkqdmFsID0gc3RhdGUtPnR2 LmJyaWdodG5lc3M7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X2NvbnRyYXN0 X3Byb3BlcnR5KSB7CisJCSp2YWwgPSBzdGF0ZS0+dHYuY29udHJhc3Q7CisJfSBlbHNlIGlmIChw cm9wZXJ0eSA9PSBjb25maWctPnR2X2ZsaWNrZXJfcmVkdWN0aW9uX3Byb3BlcnR5KSB7CisJCSp2 YWwgPSBzdGF0ZS0+dHYuZmxpY2tlcl9yZWR1Y3Rpb247CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9 PSBjb25maWctPnR2X292ZXJzY2FuX3Byb3BlcnR5KSB7CisJCSp2YWwgPSBzdGF0ZS0+dHYub3Zl cnNjYW47CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPnR2X3NhdHVyYXRpb25fcHJv cGVydHkpIHsKKwkJKnZhbCA9IHN0YXRlLT50di5zYXR1cmF0aW9uOworCX0gZWxzZSBpZiAocHJv cGVydHkgPT0gY29uZmlnLT50dl9odWVfcHJvcGVydHkpIHsKKwkJKnZhbCA9IHN0YXRlLT50di5o dWU7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPmxpbmtfc3RhdHVzX3Byb3BlcnR5 KSB7CisJCSp2YWwgPSBzdGF0ZS0+bGlua19zdGF0dXM7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9 PSBjb25maWctPmFzcGVjdF9yYXRpb19wcm9wZXJ0eSkgeworCQkqdmFsID0gc3RhdGUtPnBpY3R1 cmVfYXNwZWN0X3JhdGlvOworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5jb250ZW50 X3R5cGVfcHJvcGVydHkpIHsKKwkJKnZhbCA9IHN0YXRlLT5jb250ZW50X3R5cGU7CisJfSBlbHNl IGlmIChwcm9wZXJ0eSA9PSBjb25uZWN0b3ItPnNjYWxpbmdfbW9kZV9wcm9wZXJ0eSkgeworCQkq dmFsID0gc3RhdGUtPnNjYWxpbmdfbW9kZTsKKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbm5l Y3Rvci0+Y29udGVudF9wcm90ZWN0aW9uX3Byb3BlcnR5KSB7CisJCSp2YWwgPSBzdGF0ZS0+Y29u dGVudF9wcm90ZWN0aW9uOworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT53cml0ZWJh Y2tfZmJfaWRfcHJvcGVydHkpIHsKKwkJLyogV3JpdGViYWNrIGZyYW1lYnVmZmVyIGlzIG9uZS1z aG90LCB3cml0ZSBhbmQgZm9yZ2V0ICovCisJCSp2YWwgPSAwOworCX0gZWxzZSBpZiAocHJvcGVy dHkgPT0gY29uZmlnLT53cml0ZWJhY2tfb3V0X2ZlbmNlX3B0cl9wcm9wZXJ0eSkgeworCQkqdmFs ID0gMDsKKwl9IGVsc2UgaWYgKGNvbm5lY3Rvci0+ZnVuY3MtPmF0b21pY19nZXRfcHJvcGVydHkp IHsKKwkJcmV0dXJuIGNvbm5lY3Rvci0+ZnVuY3MtPmF0b21pY19nZXRfcHJvcGVydHkoY29ubmVj dG9yLAorCQkJCXN0YXRlLCBwcm9wZXJ0eSwgdmFsKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gLUVJ TlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGRybV9hdG9taWNfZ2V0X3Byb3BlcnR5 KHN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKm9iaiwKKwkJc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJv cGVydHksIHVpbnQ2NF90ICp2YWwpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHByb3Bl cnR5LT5kZXY7CisJaW50IHJldDsKKworCXN3aXRjaCAob2JqLT50eXBlKSB7CisJY2FzZSBEUk1f TU9ERV9PQkpFQ1RfQ09OTkVDVE9SOiB7CisJCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IgPSBvYmpfdG9fY29ubmVjdG9yKG9iaik7CisJCVdBUk5fT04oIWRybV9tb2Rlc2V0X2lzX2xv Y2tlZCgmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0aW9uX211dGV4KSk7CisJCXJldCA9IGRybV9h dG9taWNfY29ubmVjdG9yX2dldF9wcm9wZXJ0eShjb25uZWN0b3IsCisJCQkJY29ubmVjdG9yLT5z dGF0ZSwgcHJvcGVydHksIHZhbCk7CisJCWJyZWFrOworCX0KKwljYXNlIERSTV9NT0RFX09CSkVD VF9DUlRDOiB7CisJCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IG9ial90b19jcnRjKG9iaik7CisJ CVdBUk5fT04oIWRybV9tb2Rlc2V0X2lzX2xvY2tlZCgmY3J0Yy0+bXV0ZXgpKTsKKwkJcmV0ID0g ZHJtX2F0b21pY19jcnRjX2dldF9wcm9wZXJ0eShjcnRjLAorCQkJCWNydGMtPnN0YXRlLCBwcm9w ZXJ0eSwgdmFsKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgRFJNX01PREVfT0JKRUNUX1BMQU5FOiB7 CisJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gb2JqX3RvX3BsYW5lKG9iaik7CisJCVdBUk5f T04oIWRybV9tb2Rlc2V0X2lzX2xvY2tlZCgmcGxhbmUtPm11dGV4KSk7CisJCXJldCA9IGRybV9h dG9taWNfcGxhbmVfZ2V0X3Byb3BlcnR5KHBsYW5lLAorCQkJCXBsYW5lLT5zdGF0ZSwgcHJvcGVy dHksIHZhbCk7CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQli cmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhlIGJpZyBtb25zdGVyIGlv Y3RsCisgKi8KKworc3RhdGljIHN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmNyZWF0 ZV92YmxhbmtfZXZlbnQoCisJCXN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdWludDY0X3QgdXNlcl9k YXRhKQoreworCXN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmUgPSBOVUxMOworCisJ ZSA9IGt6YWxsb2Moc2l6ZW9mICplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWUpCisJCXJldHVybiBO VUxMOworCisJZS0+ZXZlbnQuYmFzZS50eXBlID0gRFJNX0VWRU5UX0ZMSVBfQ09NUExFVEU7CisJ ZS0+ZXZlbnQuYmFzZS5sZW5ndGggPSBzaXplb2YoZS0+ZXZlbnQpOworCWUtPmV2ZW50LnZibC5j cnRjX2lkID0gY3J0Yy0+YmFzZS5pZDsKKwllLT5ldmVudC52YmwudXNlcl9kYXRhID0gdXNlcl9k YXRhOworCisJcmV0dXJuIGU7Cit9CisKK2ludCBkcm1fYXRvbWljX2Nvbm5lY3Rvcl9jb21taXRf ZHBtcyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCisJCQkJICAgICBzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCSAgICAgaW50IG1vZGUpCit7CisJc3RydWN0IGRy bV9jb25uZWN0b3IgKnRtcF9jb25uZWN0b3I7CisJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUg Km5ld19jb25uX3N0YXRlOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwlzdHJ1Y3QgZHJtX2Ny dGNfc3RhdGUgKmNydGNfc3RhdGU7CisJaW50IGksIHJldCwgb2xkX21vZGUgPSBjb25uZWN0b3It PmRwbXM7CisJYm9vbCBhY3RpdmUgPSBmYWxzZTsKKworCXJldCA9IGRybV9tb2Rlc2V0X2xvY2so JnN0YXRlLT5kZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rpb25fbXV0ZXgsCisJCQkgICAgICAgc3Rh dGUtPmFjcXVpcmVfY3R4KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKG1vZGUg IT0gRFJNX01PREVfRFBNU19PTikKKwkJbW9kZSA9IERSTV9NT0RFX0RQTVNfT0ZGOworCWNvbm5l Y3Rvci0+ZHBtcyA9IG1vZGU7CisKKwljcnRjID0gY29ubmVjdG9yLT5zdGF0ZS0+Y3J0YzsKKwlp ZiAoIWNydGMpCisJCWdvdG8gb3V0OworCXJldCA9IGRybV9hdG9taWNfYWRkX2FmZmVjdGVkX2Nv bm5lY3RvcnMoc3RhdGUsIGNydGMpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJY3J0Y19z dGF0ZSA9IGRybV9hdG9taWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUsIGNydGMpOworCWlmIChJU19F UlIoY3J0Y19zdGF0ZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihjcnRjX3N0YXRlKTsKKwkJZ290byBv dXQ7CisJfQorCisJZm9yX2VhY2hfbmV3X2Nvbm5lY3Rvcl9pbl9zdGF0ZShzdGF0ZSwgdG1wX2Nv bm5lY3RvciwgbmV3X2Nvbm5fc3RhdGUsIGkpIHsKKwkJaWYgKG5ld19jb25uX3N0YXRlLT5jcnRj ICE9IGNydGMpCisJCQljb250aW51ZTsKKwkJaWYgKHRtcF9jb25uZWN0b3ItPmRwbXMgPT0gRFJN X01PREVfRFBNU19PTikgeworCQkJYWN0aXZlID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQor CisJY3J0Y19zdGF0ZS0+YWN0aXZlID0gYWN0aXZlOworCXJldCA9IGRybV9hdG9taWNfY29tbWl0 KHN0YXRlKTsKK291dDoKKwlpZiAocmV0ICE9IDApCisJCWNvbm5lY3Rvci0+ZHBtcyA9IG9sZF9t b2RlOworCXJldHVybiByZXQ7Cit9CisKK2ludCBkcm1fYXRvbWljX3NldF9wcm9wZXJ0eShzdHJ1 Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCisJCQkgICAgc3RydWN0IGRybV9tb2RlX29iamVj dCAqb2JqLAorCQkJICAgIHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3AsCisJCQkgICAgdWludDY0 X3QgcHJvcF92YWx1ZSkKK3sKKwlzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpyZWY7CisJaW50IHJl dDsKKworCWlmICghZHJtX3Byb3BlcnR5X2NoYW5nZV92YWxpZF9nZXQocHJvcCwgcHJvcF92YWx1 ZSwgJnJlZikpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChvYmotPnR5cGUpIHsKKwlj YXNlIERSTV9NT0RFX09CSkVDVF9DT05ORUNUT1I6IHsKKwkJc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm5lY3RvciA9IG9ial90b19jb25uZWN0b3Iob2JqKTsKKwkJc3RydWN0IGRybV9jb25uZWN0 b3Jfc3RhdGUgKmNvbm5lY3Rvcl9zdGF0ZTsKKworCQljb25uZWN0b3Jfc3RhdGUgPSBkcm1fYXRv bWljX2dldF9jb25uZWN0b3Jfc3RhdGUoc3RhdGUsIGNvbm5lY3Rvcik7CisJCWlmIChJU19FUlIo Y29ubmVjdG9yX3N0YXRlKSkgeworCQkJcmV0ID0gUFRSX0VSUihjb25uZWN0b3Jfc3RhdGUpOwor CQkJYnJlYWs7CisJCX0KKworCQlyZXQgPSBkcm1fYXRvbWljX2Nvbm5lY3Rvcl9zZXRfcHJvcGVy dHkoY29ubmVjdG9yLAorCQkJCWNvbm5lY3Rvcl9zdGF0ZSwgcHJvcCwgcHJvcF92YWx1ZSk7CisJ CWJyZWFrOworCX0KKwljYXNlIERSTV9NT0RFX09CSkVDVF9DUlRDOiB7CisJCXN0cnVjdCBkcm1f Y3J0YyAqY3J0YyA9IG9ial90b19jcnRjKG9iaik7CisJCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAq Y3J0Y19zdGF0ZTsKKworCQljcnRjX3N0YXRlID0gZHJtX2F0b21pY19nZXRfY3J0Y19zdGF0ZShz dGF0ZSwgY3J0Yyk7CisJCWlmIChJU19FUlIoY3J0Y19zdGF0ZSkpIHsKKwkJCXJldCA9IFBUUl9F UlIoY3J0Y19zdGF0ZSk7CisJCQlicmVhazsKKwkJfQorCisJCXJldCA9IGRybV9hdG9taWNfY3J0 Y19zZXRfcHJvcGVydHkoY3J0YywKKwkJCQljcnRjX3N0YXRlLCBwcm9wLCBwcm9wX3ZhbHVlKTsK KwkJYnJlYWs7CisJfQorCWNhc2UgRFJNX01PREVfT0JKRUNUX1BMQU5FOiB7CisJCXN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lID0gb2JqX3RvX3BsYW5lKG9iaik7CisJCXN0cnVjdCBkcm1fcGxhbmVf c3RhdGUgKnBsYW5lX3N0YXRlOworCisJCXBsYW5lX3N0YXRlID0gZHJtX2F0b21pY19nZXRfcGxh bmVfc3RhdGUoc3RhdGUsIHBsYW5lKTsKKwkJaWYgKElTX0VSUihwbGFuZV9zdGF0ZSkpIHsKKwkJ CXJldCA9IFBUUl9FUlIocGxhbmVfc3RhdGUpOworCQkJYnJlYWs7CisJCX0KKworCQlyZXQgPSBk cm1fYXRvbWljX3BsYW5lX3NldF9wcm9wZXJ0eShwbGFuZSwKKwkJCQlwbGFuZV9zdGF0ZSwgcHJv cCwgcHJvcF92YWx1ZSk7CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFM OworCQlicmVhazsKKwl9CisKKwlkcm1fcHJvcGVydHlfY2hhbmdlX3ZhbGlkX3B1dChwcm9wLCBy ZWYpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogRE9DOiBleHBsaWNpdCBmZW5jaW5nIHBy b3BlcnRpZXMKKyAqCisgKiBFeHBsaWNpdCBmZW5jaW5nIGFsbG93cyB1c2Vyc3BhY2UgdG8gY29u dHJvbCB0aGUgYnVmZmVyIHN5bmNocm9uaXphdGlvbgorICogYmV0d2VlbiBkZXZpY2VzLiBBIEZl bmNlIG9yIGEgZ3JvdXAgb2YgZmVuY2VzIGFyZSB0cmFuc2ZlcmVkIHRvL2Zyb20KKyAqIHVzZXJz cGFjZSB1c2luZyBTeW5jIEZpbGUgZmRzIGFuZCB0aGVyZSBhcmUgdHdvIERSTSBwcm9wZXJ0aWVz IGZvciB0aGF0LgorICogSU5fRkVOQ0VfRkQgb24gZWFjaCBEUk0gUGxhbmUgdG8gc2VuZCBmZW5j ZXMgdG8gdGhlIGtlcm5lbCBhbmQKKyAqIE9VVF9GRU5DRV9QVFIgb24gZWFjaCBEUk0gQ1JUQyB0 byByZWNlaXZlIGZlbmNlcyBmcm9tIHRoZSBrZXJuZWwuCisgKgorICogQXMgYSBjb250cmFzdCwg d2l0aCBpbXBsaWNpdCBmZW5jaW5nIHRoZSBrZXJuZWwga2VlcHMgdHJhY2sgb2YgYW55CisgKiBv bmdvaW5nIHJlbmRlcmluZywgYW5kIGF1dG9tYXRpY2FsbHkgZW5zdXJlcyB0aGF0IHRoZSBhdG9t aWMgdXBkYXRlIHdhaXRzCisgKiBmb3IgYW55IHBlbmRpbmcgcmVuZGVyaW5nIHRvIGNvbXBsZXRl LiBGb3Igc2hhcmVkIGJ1ZmZlcnMgcmVwcmVzZW50ZWQgd2l0aAorICogYSAmc3RydWN0IGRtYV9i dWYgdGhpcyBpcyB0cmFja2VkIGluICZzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0LgorICogSW1w bGljaXQgc3luY2luZyBpcyBob3cgTGludXggdHJhZGl0aW9uYWxseSB3b3JrZWQgKGUuZy4gRFJJ Mi8zIG9uIFgub3JnKSwKKyAqIHdoZXJlYXMgZXhwbGljaXQgZmVuY2luZyBpcyB3aGF0IEFuZHJv aWQgd2FudHMuCisgKgorICogIklOX0ZFTkNFX0ZE4oCdOgorICoJVXNlIHRoaXMgcHJvcGVydHkg dG8gcGFzcyBhIGZlbmNlIHRoYXQgRFJNIHNob3VsZCB3YWl0IG9uIGJlZm9yZQorICoJcHJvY2Vl ZGluZyB3aXRoIHRoZSBBdG9taWMgQ29tbWl0IHJlcXVlc3QgYW5kIHNob3cgdGhlIGZyYW1lYnVm ZmVyIGZvcgorICoJdGhlIHBsYW5lIG9uIHRoZSBzY3JlZW4uIFRoZSBmZW5jZSBjYW4gYmUgZWl0 aGVyIGEgbm9ybWFsIGZlbmNlIG9yIGEKKyAqCW1lcmdlZCBvbmUsIHRoZSBzeW5jX2ZpbGUgZnJh bWV3b3JrIHdpbGwgaGFuZGxlIGJvdGggY2FzZXMgYW5kIHVzZSBhCisgKglmZW5jZV9hcnJheSBp ZiBhIG1lcmdlZCBmZW5jZSBpcyByZWNlaXZlZC4gUGFzc2luZyAtMSBoZXJlIG1lYW5zIG5vCisg KglmZW5jZXMgdG8gd2FpdCBvbi4KKyAqCisgKglJZiB0aGUgQXRvbWljIENvbW1pdCByZXF1ZXN0 IGhhcyB0aGUgRFJNX01PREVfQVRPTUlDX1RFU1RfT05MWSBmbGFnCisgKglpdCB3aWxsIG9ubHkg Y2hlY2sgaWYgdGhlIFN5bmMgRmlsZSBpcyBhIHZhbGlkIG9uZS4KKyAqCisgKglPbiB0aGUgZHJp dmVyIHNpZGUgdGhlIGZlbmNlIGlzIHN0b3JlZCBvbiB0aGUgQGZlbmNlIHBhcmFtZXRlciBvZgor ICoJJnN0cnVjdCBkcm1fcGxhbmVfc3RhdGUuIERyaXZlcnMgd2hpY2ggYWxzbyBzdXBwb3J0IGlt cGxpY2l0IGZlbmNpbmcKKyAqCXNob3VsZCBzZXQgdGhlIGltcGxpY2l0IGZlbmNlIHVzaW5nIGRy bV9hdG9taWNfc2V0X2ZlbmNlX2Zvcl9wbGFuZSgpLAorICoJdG8gbWFrZSBzdXJlIHRoZXJlJ3Mg Y29uc2lzdGVudCBiZWhhdmlvdXIgYmV0d2VlbiBkcml2ZXJzIGluIHByZWNlZGVuY2UKKyAqCW9m IGltcGxpY2l0IHZzLiBleHBsaWNpdCBmZW5jaW5nLgorICoKKyAqICJPVVRfRkVOQ0VfUFRS4oCd OgorICoJVXNlIHRoaXMgcHJvcGVydHkgdG8gcGFzcyBhIGZpbGUgZGVzY3JpcHRvciBwb2ludGVy IHRvIERSTS4gT25jZSB0aGUKKyAqCUF0b21pYyBDb21taXQgcmVxdWVzdCBjYWxsIHJldHVybnMg T1VUX0ZFTkNFX1BUUiB3aWxsIGJlIGZpbGxlZCB3aXRoCisgKgl0aGUgZmlsZSBkZXNjcmlwdG9y IG51bWJlciBvZiBhIFN5bmMgRmlsZS4gVGhpcyBTeW5jIEZpbGUgY29udGFpbnMgdGhlCisgKglD UlRDIGZlbmNlIHRoYXQgd2lsbCBiZSBzaWduYWxlZCB3aGVuIGFsbCBmcmFtZWJ1ZmZlcnMgcHJl c2VudCBvbiB0aGUKKyAqCUF0b21pYyBDb21taXQgKiByZXF1ZXN0IGZvciB0aGF0IGdpdmVuIENS VEMgYXJlIHNjYW5uZWQgb3V0IG9uIHRoZQorICoJc2NyZWVuLgorICoKKyAqCVRoZSBBdG9taWMg Q29tbWl0IHJlcXVlc3QgZmFpbHMgaWYgYSBpbnZhbGlkIHBvaW50ZXIgaXMgcGFzc2VkLiBJZiB0 aGUKKyAqCUF0b21pYyBDb21taXQgcmVxdWVzdCBmYWlscyBmb3IgYW55IG90aGVyIHJlYXNvbiB0 aGUgb3V0IGZlbmNlIGZkCisgKglyZXR1cm5lZCB3aWxsIGJlIC0xLiBPbiBhIEF0b21pYyBDb21t aXQgd2l0aCB0aGUKKyAqCURSTV9NT0RFX0FUT01JQ19URVNUX09OTFkgZmxhZyB0aGUgb3V0IGZl bmNlIHdpbGwgYWxzbyBiZSBzZXQgdG8gLTEuCisgKgorICoJTm90ZSB0aGF0IG91dC1mZW5jZXMg ZG9uJ3QgaGF2ZSBhIHNwZWNpYWwgaW50ZXJmYWNlIHRvIGRyaXZlcnMgYW5kIGFyZQorICoJaW50 ZXJuYWxseSByZXByZXNlbnRlZCBieSBhICZzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50 IGluIHN0cnVjdAorICoJJmRybV9jcnRjX3N0YXRlLCB3aGljaCBpcyBhbHNvIHVzZWQgYnkgdGhl IG5vbmJsb2NraW5nIGF0b21pYyBjb21taXQKKyAqCWhlbHBlcnMgYW5kIGZvciB0aGUgRFJNIGV2 ZW50IGhhbmRsaW5nIGZvciBleGlzdGluZyB1c2Vyc3BhY2UuCisgKi8KKworc3RydWN0IGRybV9v dXRfZmVuY2Vfc3RhdGUgeworCXMzMiBfX3VzZXIgKm91dF9mZW5jZV9wdHI7CisJc3RydWN0IHN5 bmNfZmlsZSAqc3luY19maWxlOworCWludCBmZDsKK307CisKK3N0YXRpYyBpbnQgc2V0dXBfb3V0 X2ZlbmNlKHN0cnVjdCBkcm1fb3V0X2ZlbmNlX3N0YXRlICpmZW5jZV9zdGF0ZSwKKwkJCSAgIHN0 cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQoreworCWZlbmNlX3N0YXRlLT5mZCA9IGdldF91bnVzZWRf ZmRfZmxhZ3MoT19DTE9FWEVDKTsKKwlpZiAoZmVuY2Vfc3RhdGUtPmZkIDwgMCkKKwkJcmV0dXJu IGZlbmNlX3N0YXRlLT5mZDsKKworCWlmIChwdXRfdXNlcihmZW5jZV9zdGF0ZS0+ZmQsIGZlbmNl X3N0YXRlLT5vdXRfZmVuY2VfcHRyKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlmZW5jZV9zdGF0 ZS0+c3luY19maWxlID0gc3luY19maWxlX2NyZWF0ZShmZW5jZSk7CisJaWYgKCFmZW5jZV9zdGF0 ZS0+c3luY19maWxlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IHByZXBhcmVfc2lnbmFsaW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICBz dHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCisJCQkJICBzdHJ1Y3QgZHJtX21vZGVfYXRv bWljICphcmcsCisJCQkJICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJCQkgIHN0cnVj dCBkcm1fb3V0X2ZlbmNlX3N0YXRlICoqZmVuY2Vfc3RhdGUsCisJCQkJICB1bnNpZ25lZCBpbnQg Km51bV9mZW5jZXMpCit7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCXN0cnVjdCBkcm1fY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubjsKKwlzdHJ1 Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZTsKKwlpbnQgaSwgYyA9IDAsIHJldDsK KworCWlmIChhcmctPmZsYWdzICYgRFJNX01PREVfQVRPTUlDX1RFU1RfT05MWSkKKwkJcmV0dXJu IDA7CisKKwlmb3JfZWFjaF9uZXdfY3J0Y19pbl9zdGF0ZShzdGF0ZSwgY3J0YywgY3J0Y19zdGF0 ZSwgaSkgeworCQlzMzIgX191c2VyICpmZW5jZV9wdHI7CisKKwkJZmVuY2VfcHRyID0gZ2V0X291 dF9mZW5jZV9mb3JfY3J0YyhjcnRjX3N0YXRlLT5zdGF0ZSwgY3J0Yyk7CisKKwkJaWYgKGFyZy0+ ZmxhZ3MgJiBEUk1fTU9ERV9QQUdFX0ZMSVBfRVZFTlQgfHwgZmVuY2VfcHRyKSB7CisJCQlzdHJ1 Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICplOworCisJCQllID0gY3JlYXRlX3ZibGFua19l dmVudChjcnRjLCBhcmctPnVzZXJfZGF0YSk7CisJCQlpZiAoIWUpCisJCQkJcmV0dXJuIC1FTk9N RU07CisKKwkJCWNydGNfc3RhdGUtPmV2ZW50ID0gZTsKKwkJfQorCisJCWlmIChhcmctPmZsYWdz ICYgRFJNX01PREVfUEFHRV9GTElQX0VWRU5UKSB7CisJCQlzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJs YW5rX2V2ZW50ICplID0gY3J0Y19zdGF0ZS0+ZXZlbnQ7CisKKwkJCWlmICghZmlsZV9wcml2KQor CQkJCWNvbnRpbnVlOworCisJCQlyZXQgPSBkcm1fZXZlbnRfcmVzZXJ2ZV9pbml0KGRldiwgZmls ZV9wcml2LCAmZS0+YmFzZSwKKwkJCQkJCSAgICAgJmUtPmV2ZW50LmJhc2UpOworCQkJaWYgKHJl dCkgeworCQkJCWtmcmVlKGUpOworCQkJCWNydGNfc3RhdGUtPmV2ZW50ID0gTlVMTDsKKwkJCQly ZXR1cm4gcmV0OworCQkJfQorCQl9CisKKwkJaWYgKGZlbmNlX3B0cikgeworCQkJc3RydWN0IGRt YV9mZW5jZSAqZmVuY2U7CisJCQlzdHJ1Y3QgZHJtX291dF9mZW5jZV9zdGF0ZSAqZjsKKworCQkJ ZiA9IGtyZWFsbG9jKCpmZW5jZV9zdGF0ZSwgc2l6ZW9mKCoqZmVuY2Vfc3RhdGUpICoKKwkJCQkg ICAgICgqbnVtX2ZlbmNlcyArIDEpLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghZikKKwkJCQlyZXR1 cm4gLUVOT01FTTsKKworCQkJbWVtc2V0KCZmWypudW1fZmVuY2VzXSwgMCwgc2l6ZW9mKCpmKSk7 CisKKwkJCWZbKm51bV9mZW5jZXNdLm91dF9mZW5jZV9wdHIgPSBmZW5jZV9wdHI7CisJCQkqZmVu Y2Vfc3RhdGUgPSBmOworCisJCQlmZW5jZSA9IGRybV9jcnRjX2NyZWF0ZV9mZW5jZShjcnRjKTsK KwkJCWlmICghZmVuY2UpCisJCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJCXJldCA9IHNldHVwX291 dF9mZW5jZSgmZlsoKm51bV9mZW5jZXMpKytdLCBmZW5jZSk7CisJCQlpZiAocmV0KSB7CisJCQkJ ZG1hX2ZlbmNlX3B1dChmZW5jZSk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKworCQkJY3J0Y19z dGF0ZS0+ZXZlbnQtPmJhc2UuZmVuY2UgPSBmZW5jZTsKKwkJfQorCisJCWMrKzsKKwl9CisKKwlm b3JfZWFjaF9uZXdfY29ubmVjdG9yX2luX3N0YXRlKHN0YXRlLCBjb25uLCBjb25uX3N0YXRlLCBp KSB7CisJCXN0cnVjdCBkcm1fd3JpdGViYWNrX2Nvbm5lY3RvciAqd2JfY29ubjsKKwkJc3RydWN0 IGRybV93cml0ZWJhY2tfam9iICpqb2I7CisJCXN0cnVjdCBkcm1fb3V0X2ZlbmNlX3N0YXRlICpm OworCQlzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZTsKKwkJczMyIF9fdXNlciAqZmVuY2VfcHRyOwor CisJCWZlbmNlX3B0ciA9IGdldF9vdXRfZmVuY2VfZm9yX2Nvbm5lY3RvcihzdGF0ZSwgY29ubik7 CisJCWlmICghZmVuY2VfcHRyKQorCQkJY29udGludWU7CisKKwkJam9iID0gZHJtX2F0b21pY19n ZXRfd3JpdGViYWNrX2pvYihjb25uX3N0YXRlKTsKKwkJaWYgKCFqb2IpCisJCQlyZXR1cm4gLUVO T01FTTsKKworCQlmID0ga3JlYWxsb2MoKmZlbmNlX3N0YXRlLCBzaXplb2YoKipmZW5jZV9zdGF0 ZSkgKgorCQkJICAgICAoKm51bV9mZW5jZXMgKyAxKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZikK KwkJCXJldHVybiAtRU5PTUVNOworCisJCW1lbXNldCgmZlsqbnVtX2ZlbmNlc10sIDAsIHNpemVv ZigqZikpOworCisJCWZbKm51bV9mZW5jZXNdLm91dF9mZW5jZV9wdHIgPSBmZW5jZV9wdHI7CisJ CSpmZW5jZV9zdGF0ZSA9IGY7CisKKwkJd2JfY29ubiA9IGRybV9jb25uZWN0b3JfdG9fd3JpdGVi YWNrKGNvbm4pOworCQlmZW5jZSA9IGRybV93cml0ZWJhY2tfZ2V0X291dF9mZW5jZSh3Yl9jb25u KTsKKwkJaWYgKCFmZW5jZSkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCXJldCA9IHNldHVwX291 dF9mZW5jZSgmZlsoKm51bV9mZW5jZXMpKytdLCBmZW5jZSk7CisJCWlmIChyZXQpIHsKKwkJCWRt YV9mZW5jZV9wdXQoZmVuY2UpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWpvYi0+b3V0X2Zl bmNlID0gZmVuY2U7CisJfQorCisJLyoKKwkgKiBIYXZpbmcgdGhpcyBmbGFnIG1lYW5zIHVzZXIg bW9kZSBwZW5kcyBvbiBldmVudCB3aGljaCB3aWxsIG5ldmVyCisJICogcmVhY2ggZHVlIHRvIGxh Y2sgb2YgYXQgbGVhc3Qgb25lIENSVEMgZm9yIHNpZ25hbGluZworCSAqLworCWlmIChjID09IDAg JiYgKGFyZy0+ZmxhZ3MgJiBEUk1fTU9ERV9QQUdFX0ZMSVBfRVZFTlQpKQorCQlyZXR1cm4gLUVJ TlZBTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjb21wbGV0ZV9zaWduYWxpbmco c3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0 ZSAqc3RhdGUsCisJCQkgICAgICAgc3RydWN0IGRybV9vdXRfZmVuY2Vfc3RhdGUgKmZlbmNlX3N0 YXRlLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBudW1fZmVuY2VzLAorCQkJICAgICAgIGJvb2wg aW5zdGFsbF9mZHMpCit7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCXN0cnVjdCBkcm1fY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKKwlpbnQgaTsKKworCWlmIChpbnN0YWxsX2ZkcykgeworCQlm b3IgKGkgPSAwOyBpIDwgbnVtX2ZlbmNlczsgaSsrKQorCQkJZmRfaW5zdGFsbChmZW5jZV9zdGF0 ZVtpXS5mZCwKKwkJCQkgICBmZW5jZV9zdGF0ZVtpXS5zeW5jX2ZpbGUtPmZpbGUpOworCisJCWtm cmVlKGZlbmNlX3N0YXRlKTsKKwkJcmV0dXJuOworCX0KKworCWZvcl9lYWNoX25ld19jcnRjX2lu X3N0YXRlKHN0YXRlLCBjcnRjLCBjcnRjX3N0YXRlLCBpKSB7CisJCXN0cnVjdCBkcm1fcGVuZGlu Z192YmxhbmtfZXZlbnQgKmV2ZW50ID0gY3J0Y19zdGF0ZS0+ZXZlbnQ7CisJCS8qCisJCSAqIEZy ZWUgdGhlIGFsbG9jYXRlZCBldmVudC4gZHJtX2F0b21pY19oZWxwZXJfc2V0dXBfY29tbWl0CisJ CSAqIGNhbiBhbGxvY2F0ZSBhbiBldmVudCB0b28sIHNvIG9ubHkgZnJlZSBpdCBpZiBpdCdzIG91 cnMKKwkJICogdG8gcHJldmVudCBhIGRvdWJsZSBmcmVlIGluIGRybV9hdG9taWNfc3RhdGVfY2xl YXIuCisJCSAqLworCQlpZiAoZXZlbnQgJiYgKGV2ZW50LT5iYXNlLmZlbmNlIHx8IGV2ZW50LT5i YXNlLmZpbGVfcHJpdikpIHsKKwkJCWRybV9ldmVudF9jYW5jZWxfZnJlZShkZXYsICZldmVudC0+ YmFzZSk7CisJCQljcnRjX3N0YXRlLT5ldmVudCA9IE5VTEw7CisJCX0KKwl9CisKKwlpZiAoIWZl bmNlX3N0YXRlKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2ZlbmNlczsgaSsr KSB7CisJCWlmIChmZW5jZV9zdGF0ZVtpXS5zeW5jX2ZpbGUpCisJCQlmcHV0KGZlbmNlX3N0YXRl W2ldLnN5bmNfZmlsZS0+ZmlsZSk7CisJCWlmIChmZW5jZV9zdGF0ZVtpXS5mZCA+PSAwKQorCQkJ cHV0X3VudXNlZF9mZChmZW5jZV9zdGF0ZVtpXS5mZCk7CisKKwkJLyogSWYgdGhpcyBmYWlscyBs b2cgZXJyb3IgdG8gdGhlIHVzZXIgKi8KKwkJaWYgKGZlbmNlX3N0YXRlW2ldLm91dF9mZW5jZV9w dHIgJiYKKwkJICAgIHB1dF91c2VyKC0xLCBmZW5jZV9zdGF0ZVtpXS5vdXRfZmVuY2VfcHRyKSkK KwkJCURSTV9ERUJVR19BVE9NSUMoIkNvdWxkbid0IGNsZWFyIG91dF9mZW5jZV9wdHJcbiIpOwor CX0KKworCWtmcmVlKGZlbmNlX3N0YXRlKTsKK30KKworaW50IGRybV9tb2RlX2F0b21pY19pb2N0 bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX21vZGVfYXRvbWljICphcmcgPSBkYXRhOwor CXVpbnQzMl90IF9fdXNlciAqb2Jqc19wdHIgPSAodWludDMyX3QgX191c2VyICopKHVuc2lnbmVk IGxvbmcpKGFyZy0+b2Jqc19wdHIpOworCXVpbnQzMl90IF9fdXNlciAqY291bnRfcHJvcHNfcHRy ID0gKHVpbnQzMl90IF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKShhcmctPmNvdW50X3Byb3BzX3B0 cik7CisJdWludDMyX3QgX191c2VyICpwcm9wc19wdHIgPSAodWludDMyX3QgX191c2VyICopKHVu c2lnbmVkIGxvbmcpKGFyZy0+cHJvcHNfcHRyKTsKKwl1aW50NjRfdCBfX3VzZXIgKnByb3BfdmFs dWVzX3B0ciA9ICh1aW50NjRfdCBfX3VzZXIgKikodW5zaWduZWQgbG9uZykoYXJnLT5wcm9wX3Zh bHVlc19wdHIpOworCXVuc2lnbmVkIGludCBjb3BpZWRfb2JqcywgY29waWVkX3Byb3BzOworCXN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZTsKKwlzdHJ1Y3QgZHJtX21vZGVzZXRfYWNxdWly ZV9jdHggY3R4OworCXN0cnVjdCBkcm1fb3V0X2ZlbmNlX3N0YXRlICpmZW5jZV9zdGF0ZTsKKwlp bnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBpbnQgaSwgaiwgbnVtX2ZlbmNlczsKKworCS8qIGRpc2Fs bG93IGZvciBkcml2ZXJzIG5vdCBzdXBwb3J0aW5nIGF0b21pYzogKi8KKwlpZiAoIWRybV9jb3Jl X2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfQVRPTUlDKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisK KwkvKiBkaXNhbGxvdyBmb3IgdXNlcnNwYWNlIHRoYXQgaGFzIG5vdCBlbmFibGVkIGF0b21pYyBj YXAgKGV2ZW4KKwkgKiB0aG91Z2ggdGhpcyBtYXkgYmUgYSBiaXQgb3ZlcmtpbGwsIHNpbmNlIGxl Z2FjeSB1c2Vyc3BhY2UKKwkgKiB3b3VsZG4ndCBrbm93IGhvdyB0byBjYWxsIHRoaXMgaW9jdGwp CisJICovCisJaWYgKCFmaWxlX3ByaXYtPmF0b21pYykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlp ZiAoYXJnLT5mbGFncyAmIH5EUk1fTU9ERV9BVE9NSUNfRkxBR1MpCisJCXJldHVybiAtRUlOVkFM OworCisJaWYgKGFyZy0+cmVzZXJ2ZWQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKChhcmct PmZsYWdzICYgRFJNX01PREVfUEFHRV9GTElQX0FTWU5DKSAmJgorCQkJIWRldi0+bW9kZV9jb25m aWcuYXN5bmNfcGFnZV9mbGlwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGNhbid0IHRlc3Qg YW5kIGV4cGVjdCBhbiBldmVudCBhdCB0aGUgc2FtZSB0aW1lLiAqLworCWlmICgoYXJnLT5mbGFn cyAmIERSTV9NT0RFX0FUT01JQ19URVNUX09OTFkpICYmCisJCQkoYXJnLT5mbGFncyAmIERSTV9N T0RFX1BBR0VfRkxJUF9FVkVOVCkpCisJCXJldHVybiAtRUlOVkFMOworCisJZHJtX21vZGVzZXRf YWNxdWlyZV9pbml0KCZjdHgsIERSTV9NT0RFU0VUX0FDUVVJUkVfSU5URVJSVVBUSUJMRSk7CisK KwlzdGF0ZSA9IGRybV9hdG9taWNfc3RhdGVfYWxsb2MoZGV2KTsKKwlpZiAoIXN0YXRlKQorCQly ZXR1cm4gLUVOT01FTTsKKworCXN0YXRlLT5hY3F1aXJlX2N0eCA9ICZjdHg7CisJc3RhdGUtPmFs bG93X21vZGVzZXQgPSAhIShhcmctPmZsYWdzICYgRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVT RVQpOworCityZXRyeToKKwljb3BpZWRfb2JqcyA9IDA7CisJY29waWVkX3Byb3BzID0gMDsKKwlm ZW5jZV9zdGF0ZSA9IE5VTEw7CisJbnVtX2ZlbmNlcyA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwg YXJnLT5jb3VudF9vYmpzOyBpKyspIHsKKwkJdWludDMyX3Qgb2JqX2lkLCBjb3VudF9wcm9wczsK KwkJc3RydWN0IGRybV9tb2RlX29iamVjdCAqb2JqOworCisJCWlmIChnZXRfdXNlcihvYmpfaWQs IG9ianNfcHRyICsgY29waWVkX29ianMpKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJZ290byBv dXQ7CisJCX0KKworCQlvYmogPSBkcm1fbW9kZV9vYmplY3RfZmluZChkZXYsIGZpbGVfcHJpdiwg b2JqX2lkLCBEUk1fTU9ERV9PQkpFQ1RfQU5ZKTsKKwkJaWYgKCFvYmopIHsKKwkJCXJldCA9IC1F Tk9FTlQ7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWlmICghb2JqLT5wcm9wZXJ0aWVzKSB7CisJ CQlkcm1fbW9kZV9vYmplY3RfcHV0KG9iaik7CisJCQlyZXQgPSAtRU5PRU5UOworCQkJZ290byBv dXQ7CisJCX0KKworCQlpZiAoZ2V0X3VzZXIoY291bnRfcHJvcHMsIGNvdW50X3Byb3BzX3B0ciAr IGNvcGllZF9vYmpzKSkgeworCQkJZHJtX21vZGVfb2JqZWN0X3B1dChvYmopOworCQkJcmV0ID0g LUVGQVVMVDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJY29waWVkX29ianMrKzsKKworCQlmb3Ig KGogPSAwOyBqIDwgY291bnRfcHJvcHM7IGorKykgeworCQkJdWludDMyX3QgcHJvcF9pZDsKKwkJ CXVpbnQ2NF90IHByb3BfdmFsdWU7CisJCQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wOworCisJ CQlpZiAoZ2V0X3VzZXIocHJvcF9pZCwgcHJvcHNfcHRyICsgY29waWVkX3Byb3BzKSkgeworCQkJ CWRybV9tb2RlX29iamVjdF9wdXQob2JqKTsKKwkJCQlyZXQgPSAtRUZBVUxUOworCQkJCWdvdG8g b3V0OworCQkJfQorCisJCQlwcm9wID0gZHJtX21vZGVfb2JqX2ZpbmRfcHJvcF9pZChvYmosIHBy b3BfaWQpOworCQkJaWYgKCFwcm9wKSB7CisJCQkJZHJtX21vZGVfb2JqZWN0X3B1dChvYmopOwor CQkJCXJldCA9IC1FTk9FTlQ7CisJCQkJZ290byBvdXQ7CisJCQl9CisKKwkJCWlmIChjb3B5X2Zy b21fdXNlcigmcHJvcF92YWx1ZSwKKwkJCQkJICAgcHJvcF92YWx1ZXNfcHRyICsgY29waWVkX3By b3BzLAorCQkJCQkgICBzaXplb2YocHJvcF92YWx1ZSkpKSB7CisJCQkJZHJtX21vZGVfb2JqZWN0 X3B1dChvYmopOworCQkJCXJldCA9IC1FRkFVTFQ7CisJCQkJZ290byBvdXQ7CisJCQl9CisKKwkJ CXJldCA9IGRybV9hdG9taWNfc2V0X3Byb3BlcnR5KHN0YXRlLCBvYmosIHByb3AsCisJCQkJCQkg ICAgICBwcm9wX3ZhbHVlKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlkcm1fbW9kZV9vYmplY3RfcHV0 KG9iaik7CisJCQkJZ290byBvdXQ7CisJCQl9CisKKwkJCWNvcGllZF9wcm9wcysrOworCQl9CisK KwkJZHJtX21vZGVfb2JqZWN0X3B1dChvYmopOworCX0KKworCXJldCA9IHByZXBhcmVfc2lnbmFs aW5nKGRldiwgc3RhdGUsIGFyZywgZmlsZV9wcml2LCAmZmVuY2Vfc3RhdGUsCisJCQkJJm51bV9m ZW5jZXMpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJaWYgKGFyZy0+ZmxhZ3MgJiBEUk1f TU9ERV9BVE9NSUNfVEVTVF9PTkxZKSB7CisJCXJldCA9IGRybV9hdG9taWNfY2hlY2tfb25seShz dGF0ZSk7CisJfSBlbHNlIGlmIChhcmctPmZsYWdzICYgRFJNX01PREVfQVRPTUlDX05PTkJMT0NL KSB7CisJCXJldCA9IGRybV9hdG9taWNfbm9uYmxvY2tpbmdfY29tbWl0KHN0YXRlKTsKKwl9IGVs c2UgeworCQlpZiAodW5saWtlbHkoZHJtX2RlYnVnICYgRFJNX1VUX1NUQVRFKSkKKwkJCWRybV9h dG9taWNfcHJpbnRfc3RhdGUoc3RhdGUpOworCisJCXJldCA9IGRybV9hdG9taWNfY29tbWl0KHN0 YXRlKTsKKwl9CisKK291dDoKKwljb21wbGV0ZV9zaWduYWxpbmcoZGV2LCBzdGF0ZSwgZmVuY2Vf c3RhdGUsIG51bV9mZW5jZXMsICFyZXQpOworCisJaWYgKHJldCA9PSAtRURFQURMSykgeworCQlk cm1fYXRvbWljX3N0YXRlX2NsZWFyKHN0YXRlKTsKKwkJcmV0ID0gZHJtX21vZGVzZXRfYmFja29m ZigmY3R4KTsKKwkJaWYgKCFyZXQpCisJCQlnb3RvIHJldHJ5OworCX0KKworCWRybV9hdG9taWNf c3RhdGVfcHV0KHN0YXRlKTsKKworCWRybV9tb2Rlc2V0X2Ryb3BfbG9ja3MoJmN0eCk7CisJZHJt X21vZGVzZXRfYWNxdWlyZV9maW5pKCZjdHgpOworCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9k cm1fY3J0Y19oZWxwZXIuYwppbmRleCA1YTg0YzNiYzkxNWQuLmNlNzVlOTUwNmU4NSAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9kcm1fY3J0Y19oZWxwZXIuYwpAQCAtMzUsNiArMzUsNyBAQAogCiAjaW5jbHVkZSA8ZHJt L2RybVAuaD4KICNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgorI2luY2x1ZGUgPGRybS9kcm1f YXRvbWljX3VhcGkuaD4KICNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KICNpbmNsdWRlIDxkcm0v ZHJtX2VuY29kZXIuaD4KICNpbmNsdWRlIDxkcm0vZHJtX2ZvdXJjYy5oPgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2ludGVybmFsLmggYi9kcml2ZXJzL2dwdS9kcm0vZHJt X2NydGNfaW50ZXJuYWwuaAppbmRleCBmZjVlMGQ1MjFjMjEuLmVkZTIwYjU1ZDUwYyAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2ludGVybmFsLmgKKysrIGIvZHJpdmVycy9n cHUvZHJtL2RybV9jcnRjX2ludGVybmFsLmgKQEAgLTIwNCw2ICsyMDQsOSBAQCBzdHJ1Y3QgZHJt X21pbm9yOwogaW50IGRybV9hdG9taWNfZGVidWdmc19pbml0KHN0cnVjdCBkcm1fbWlub3IgKm1p bm9yKTsKICNlbmRpZgogCit2b2lkIGRybV9hdG9taWNfcHJpbnRfc3RhdGUoY29uc3Qgc3RydWN0 IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKTsKKworLyogZHJtX2F0b21pY191YXBpLmMgKi8KIGlu dCBkcm1fYXRvbWljX2Nvbm5lY3Rvcl9jb21taXRfZHBtcyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0 ZSAqc3RhdGUsCiAJCQkJICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCQkJ CSAgICAgaW50IG1vZGUpOwpAQCAtMjEzLDYgKzIxNiw4IEBAIGludCBkcm1fYXRvbWljX3NldF9w cm9wZXJ0eShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCiAJCQkgICAgdWludDY0X3Qg cHJvcF92YWx1ZSk7CiBpbnQgZHJtX2F0b21pY19nZXRfcHJvcGVydHkoc3RydWN0IGRybV9tb2Rl X29iamVjdCAqb2JqLAogCQkJICAgIHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LCB1aW50 NjRfdCAqdmFsKTsKKworLyogSU9DVEwgKi8KIGludCBkcm1fbW9kZV9hdG9taWNfaW9jdGwoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCSAgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpm aWxlX3ByaXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZyYW1lYnVmZmVy LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZyYW1lYnVmZmVyLmMKaW5kZXggNzgxYWYxZDQyZDc2 Li43Y2E4Yzc3MjIzY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZnJhbWVidWZm ZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZyYW1lYnVmZmVyLmMKQEAgLTI1LDYgKzI1 LDcgQEAKICNpbmNsdWRlIDxkcm0vZHJtX2F1dGguaD4KICNpbmNsdWRlIDxkcm0vZHJtX2ZyYW1l YnVmZmVyLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KKyNpbmNsdWRlIDxkcm0vZHJt X2F0b21pY191YXBpLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9wcmludC5oPgogCiAjaW5jbHVkZSAi ZHJtX2ludGVybmFsLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9mcmFt ZWJ1ZmZlcl9oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX2ZyYW1lYnVmZmVyX2hl bHBlci5jCmluZGV4IDI4MTBkNDEzMTQxMS4uNzYwN2Y5Y2Q2Zjc3IDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vZHJtX2dlbV9mcmFtZWJ1ZmZlcl9oZWxwZXIuYworKysgYi9kcml2ZXJzL2dw dS9kcm0vZHJtX2dlbV9mcmFtZWJ1ZmZlcl9oZWxwZXIuYwpAQCAtMTYsNiArMTYsNyBAQAogCiAj aW5jbHVkZSA8ZHJtL2RybVAuaD4KICNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgorI2luY2x1 ZGUgPGRybS9kcm1fYXRvbWljX3VhcGkuaD4KICNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5o PgogI2luY2x1ZGUgPGRybS9kcm1fZm91cmNjLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9mcmFtZWJ1 ZmZlci5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9wbGFuZV9oZWxwZXIuYyBi L2RyaXZlcnMvZ3B1L2RybS9kcm1fcGxhbmVfaGVscGVyLmMKaW5kZXggNjIxZjE3NjQzYmIwLi5h MzkzNzU2YjY2NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcGxhbmVfaGVscGVy LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9wbGFuZV9oZWxwZXIuYwpAQCAtMjgsNiArMjgs NyBAQAogI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVyLmg+CiAjaW5jbHVkZSA8ZHJtL2Ry bV9yZWN0Lmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KKyNpbmNsdWRlIDxkcm0vZHJt X2F0b21pY191YXBpLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgogI2luY2x1 ZGUgPGRybS9kcm1fZW5jb2Rlci5oPgogI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5o PgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCmluZGV4IGE4NWE4M2YzMTk3OS4uODVj YWQxNmYzMWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5 LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCkBAIC00Niw2ICs0 Niw3IEBACiAjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgogI2luY2x1ZGUgPGRybS9k cm1fcGxhbmVfaGVscGVyLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9yZWN0Lmg+CisjaW5jbHVkZSA8 ZHJtL2RybV9hdG9taWNfdWFwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYV9yZW1hcHBpbmcuaD4K ICNpbmNsdWRlIDxsaW51eC9yZXNlcnZhdGlvbi5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vbXNtL21zbV9hdG9taWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2F0b21pYy5j CmluZGV4IGMxZjE3NzljOTgwZi4uNGJjZGVjYTc0NzlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vbXNtL21zbV9hdG9taWMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9hdG9t aWMuYwpAQCAtMTUsNiArMTUsOCBAQAogICogdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogICovCiAKKyNpbmNsdWRlIDxkcm0vZHJtX2F0 b21pY191YXBpLmg+CisKICNpbmNsdWRlICJtc21fZHJ2LmgiCiAjaW5jbHVkZSAibXNtX2dlbS5o IgogI2luY2x1ZGUgIm1zbV9rbXMuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQv dmM0X2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2NydGMuYwppbmRleCAwZTZhMTIx ODU4ZDEuLjNjZTEzNmJhODc5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRf Y3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2NydGMuYwpAQCAtMzUsNiArMzUs NyBAQAogI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9hdG9t aWNfaGVscGVyLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUg PGRybS9kcm1fYXRvbWljX3VhcGkuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRl IDxkcm0vZHJtX2ZiX2NtYV9oZWxwZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wb25lbnQuaD4K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3BsYW5lLmMgYi9kcml2ZXJzL2dw dS9kcm0vdmM0L3ZjNF9wbGFuZS5jCmluZGV4IDZjNmQzN2FhNTEyYS4uOWRjM2ZjYmQyOTBiIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9wbGFuZS5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS92YzQvdmM0X3BsYW5lLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxkcm0v ZHJtX2F0b21pY19oZWxwZXIuaD4KICNpbmNsdWRlIDxkcm0vZHJtX2ZiX2NtYV9oZWxwZXIuaD4K ICNpbmNsdWRlIDxkcm0vZHJtX3BsYW5lX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRv bWljX3VhcGkuaD4KIAogI2luY2x1ZGUgInVhcGkvZHJtL3ZjNF9kcm0uaCIKICNpbmNsdWRlICJ2 YzRfZHJ2LmgiCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fYXRvbWljLmggYi9pbmNsdWRl L2RybS9kcm1fYXRvbWljLmgKaW5kZXggNjZlNDllZjdkM2I1Li40YWZmNDA4ODZhY2IgMTAwNjQ0 Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9hdG9taWMuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fYXRv bWljLmgKQEAgLTU4NCwyMiArNTg0LDYgQEAgX19kcm1fYXRvbWljX2dldF9jdXJyZW50X3BsYW5l X3N0YXRlKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKIAlyZXR1cm4gcGxhbmUtPnN0 YXRlOwogfQogCi1pbnQgX19tdXN0X2NoZWNrCi1kcm1fYXRvbWljX3NldF9tb2RlX2Zvcl9jcnRj KHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUsCi0JCQkgICAgIGNvbnN0IHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICptb2RlKTsKLWludCBfX211c3RfY2hlY2sKLWRybV9hdG9taWNfc2V0X21v ZGVfcHJvcF9mb3JfY3J0YyhzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlLAotCQkJCSAgc3Ry dWN0IGRybV9wcm9wZXJ0eV9ibG9iICpibG9iKTsKLWludCBfX211c3RfY2hlY2sKLWRybV9hdG9t aWNfc2V0X2NydGNfZm9yX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRl LAotCQkJICAgICAgc3RydWN0IGRybV9jcnRjICpjcnRjKTsKLXZvaWQgZHJtX2F0b21pY19zZXRf ZmJfZm9yX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAotCQkJCSBz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYik7Ci12b2lkIGRybV9hdG9taWNfc2V0X2ZlbmNlX2Zv cl9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwKLQkJCQkgICAgc3Ry dWN0IGRtYV9mZW5jZSAqZmVuY2UpOwotaW50IF9fbXVzdF9jaGVjawotZHJtX2F0b21pY19zZXRf Y3J0Y19mb3JfY29ubmVjdG9yKHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRl LAotCQkJCSAgc3RydWN0IGRybV9jcnRjICpjcnRjKTsKIGludCBfX211c3RfY2hlY2sKIGRybV9h dG9taWNfYWRkX2FmZmVjdGVkX2Nvbm5lY3RvcnMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0 YXRlLAogCQkJCSAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CmRpZmYgLS1naXQgYS9pbmNsdWRl L2RybS9kcm1fYXRvbWljX3VhcGkuaCBiL2luY2x1ZGUvZHJtL2RybV9hdG9taWNfdWFwaS5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOGNlYzUyYWQxMjc3Ci0tLSAv ZGV2L251bGwKKysrIGIvaW5jbHVkZS9kcm0vZHJtX2F0b21pY191YXBpLmgKQEAgLTAsMCArMSw1 OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBSZWQgSGF0CisgKiBDb3B5cmlnaHQgKEMp IDIwMTQgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBJbnRlbCBDb3JwLgorICoK KyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkg cGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0 ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0 aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRh dGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gs IGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNv ZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlz IGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6 CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu b3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwg cG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURF RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJ TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBO T05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xE RVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisg KiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JU IE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhF IFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiBSb2IgQ2xhcmsgPHJvYmRjbGFya0BnbWFp bC5jb20+CisgKiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xsLmNoPgorICovCisK KyNpZm5kZWYgRFJNX0FUT01JQ19VQVBJX0hfCisjZGVmaW5lIERSTV9BVE9NSUNfVUFQSV9IXwor CitzdHJ1Y3QgZHJtX2NydGNfc3RhdGU7CitzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZTsKK3N0cnVj dCBkcm1fcHJvcGVydHlfYmxvYjsKK3N0cnVjdCBkcm1fcGxhbmVfc3RhdGU7CitzdHJ1Y3QgZHJt X2NydGM7CitzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZTsKK3N0cnVjdCBkbWFfZmVuY2U7Citz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyOworCitpbnQgX19tdXN0X2NoZWNrCitkcm1fYXRvbWljX3Nl dF9tb2RlX2Zvcl9jcnRjKHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUsCisJCQkgICAgIGNv bnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKTsKK2ludCBfX211c3RfY2hlY2sKK2Ry bV9hdG9taWNfc2V0X21vZGVfcHJvcF9mb3JfY3J0YyhzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0 YXRlLAorCQkJCSAgc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iICpibG9iKTsKK2ludCBfX211c3Rf Y2hlY2sKK2RybV9hdG9taWNfc2V0X2NydGNfZm9yX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmVfc3Rh dGUgKnBsYW5lX3N0YXRlLAorCQkJICAgICAgc3RydWN0IGRybV9jcnRjICpjcnRjKTsKK3ZvaWQg ZHJtX2F0b21pY19zZXRfZmJfZm9yX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5l X3N0YXRlLAorCQkJCSBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYik7Cit2b2lkIGRybV9hdG9t aWNfc2V0X2ZlbmNlX2Zvcl9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0 ZSwKKwkJCQkgICAgc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpOworaW50IF9fbXVzdF9jaGVjawor ZHJtX2F0b21pY19zZXRfY3J0Y19mb3JfY29ubmVjdG9yKHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0 YXRlICpjb25uX3N0YXRlLAorCQkJCSAgc3RydWN0IGRybV9jcnRjICpjcnRjKTsKKworI2VuZGlm Ci0tIAoyLjE4LjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCkZyZWVkcmVubyBtYWlsaW5nIGxpc3QKRnJlZWRyZW5vQGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZyZWVkcmVu bwo=