From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: [DPU PATCH] drm/msm: Remove dpu_edid_parser Date: Fri, 23 Feb 2018 14:15:15 -0500 Message-ID: <20180223191515.155783-1-seanpaul@chromium.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, abhinavk-jfJNa2p1gH1BDgjK7y7TUQ@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, Sean Paul , hoegsberg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org VXNlIGRybV9lZGlkIHRvIHBhcnNlIHRoZSBlZGlkIGluc3RlYWQgb2YgdGhlIGhhbmQgcm9sbGVk IGRwdSB2ZXJzaW9uLgoKU2lnbmVkLW9mZi1ieTogU2VhbiBQYXVsIDxzZWFucGF1bEBjaHJvbWl1 bS5vcmc+Ci0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZSAgICAgICAgICB8ICAgMSAt CiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2F1ZGlvLmMgICAgIHwgIDIyICstCiBkcml2ZXJz L2dwdS9kcm0vbXNtL2RwL2RwX2Rpc3BsYXkuYyAgIHwgICA3IC0KIGRyaXZlcnMvZ3B1L2RybS9t c20vZHAvZHBfcGFuZWwuYyAgICAgfCAgNzcgKystCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2Rw X3BhbmVsLmggICAgIHwgICA3ICstCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9lZGlkX3BhcnNl ci5jIHwgNjU3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNt L2RwdV9lZGlkX3BhcnNlci5oIHwgMTY2IC0tLS0tLS0KIDcgZmlsZXMgY2hhbmdlZCwgNTUgaW5z ZXJ0aW9ucygrKSwgODgyIGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9tc20vZHB1X2VkaWRfcGFyc2VyLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vbXNtL2RwdV9lZGlkX3BhcnNlci5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL21zbS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKaW5kZXggZmNk ODVhZTI4ZDY2Li4yZmI5YmExMWRmMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20v TWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZQpAQCAtODYsNyArODYs NiBAQCBtc20teSA6PSBcCiAJZGlzcC9kcHUxL2RwdV9ybS5vIFwKIAlkaXNwL2RwdTEvZHB1X3Zi aWYubyBcCiAJZHB1X2RiZy5vIFwKLQlkcHVfZWRpZF9wYXJzZXIubyBcCiAJZHB1X2lvX3V0aWwu byBcCiAJZHB1X2RiZ19ldnRsb2cubyBcCiAJZHB1X3Bvd2VyX2hhbmRsZS5vIFwKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfYXVkaW8uYyBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZHAvZHBfYXVkaW8uYwppbmRleCA0ZTBjZGNkMTVjOGMuLmNlMDBiOGI1MjYzMSAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9hdWRpby5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vZHAvZHBfYXVkaW8uYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4 L21zbV9leHRfZGlzcGxheS5oPgogCiAjaW5jbHVkZSA8ZHJtL2RybV9kcF9oZWxwZXIuaD4KKyNp bmNsdWRlIDxkcm0vZHJtX2VkaWQuaD4KIAogI2luY2x1ZGUgImRwX2NhdGFsb2cuaCIKICNpbmNs dWRlICJkcF9hdWRpby5oIgpAQCAtNDgwLDcgKzQ4MSw2IEBAIHN0YXRpYyBpbnQgZHBfYXVkaW9f Z2V0X2VkaWRfYmxrKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiB7CiAJaW50IHJjID0g MDsKIAlzdHJ1Y3QgZHBfYXVkaW9fcHJpdmF0ZSAqYXVkaW87Ci0Jc3RydWN0IGRwdV9lZGlkX2N0 cmwgKmVkaWQ7CiAKIAlhdWRpbyA9IGdldF9hdWRpb19nZXRfZGF0YShwZGV2KTsKIAlpZiAoSVNf RVJSKGF1ZGlvKSkgewpAQCAtNDg4LDE5ICs0ODgsMjkgQEAgc3RhdGljIGludCBkcF9hdWRpb19n ZXRfZWRpZF9ibGsoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKIAkJZ290byBlbmQ7CiAJ fQogCi0JaWYgKCFhdWRpby0+cGFuZWwgfHwgIWF1ZGlvLT5wYW5lbC0+ZWRpZF9jdHJsKSB7CisJ aWYgKCFhdWRpby0+cGFuZWwgfHwgIWF1ZGlvLT5wYW5lbC0+ZWRpZCkgewogCQlwcl9lcnIoImlu dmFsaWQgcGFuZWwgZGF0YVxuIik7CiAJCXJjID0gLUVJTlZBTDsKIAkJZ290byBlbmQ7CiAJfQog Ci0JZWRpZCA9IGF1ZGlvLT5wYW5lbC0+ZWRpZF9jdHJsOwotCisvKgorICogVE9ETzoKKyAqCWF1 ZGlvX2RhdGFfYmxrIHNob3VsZCBiZSBjaGFuZ2VkIHRvIGJlIGEgY2VhX3NhZCBhcnJheQorICoJ YXVkaW9fZGF0YV9ibGtfc2l6ZSBzaG91bGQgYmUgY2hhbmdlZCB0byBjb250YWluIGEgY291bnQg b2Ygc2FkcworICoKKyAqCU9uY2UgdGhpcyBpcyBkb25lLCB1c2UgZHJtX2VkaWRfdG9fc2FkKCkg dG8gZXh0cmFjdCB0aGlzIGZyb20KKyAqCWF1ZGlvLT5wYW5lbC0+ZWRpZC4gSSdkIGNoYW5nZSB0 aGlzLCBidXQgSSBkb24ndCBoYXZlIHRoYXQgY29kZSA6LworICovCisjaWYgMAogCWJsay0+YXVk aW9fZGF0YV9ibGsgPSBlZGlkLT5hdWRpb19kYXRhX2Jsb2NrOwogCWJsay0+YXVkaW9fZGF0YV9i bGtfc2l6ZSA9IGVkaWQtPmFkYl9zaXplOworI2VuZGlmCisKKwlibGstPnNwa19hbGxvY19kYXRh X2Jsa19zaXplID0gZHJtX2VkaWRfdG9fc3BlYWtlcl9hbGxvY2F0aW9uKAorCQkJCQkJYXVkaW8t PnBhbmVsLT5lZGlkLAorCQkJCQkJYmxrLT5zcGtyX2FsbG9jX2RhdGFfYmxvY2spOwogCi0JYmxr LT5zcGtfYWxsb2NfZGF0YV9ibGsgPSBlZGlkLT5zcGtyX2FsbG9jX2RhdGFfYmxvY2s7Ci0JYmxr LT5zcGtfYWxsb2NfZGF0YV9ibGtfc2l6ZSA9IGVkaWQtPnNhZGJfc2l6ZTsKIGVuZDoKIAlyZXR1 cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rpc3BsYXku YyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGlzcGxheS5jCmluZGV4IDZmMmMwNjgwOWJm NS4uODQ2ZWYzM2FlY2JkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rp c3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rpc3BsYXkuYwpAQCAtMzcz LDEyICszNzMsNiBAQCBzdGF0aWMgaW50IGRwX2Rpc3BsYXlfYmluZChzdHJ1Y3QgZGV2aWNlICpk ZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKIAkJZ290byBlbmQ7CiAJfQogCi0JcmMgPSBkcC0+ cGFuZWwtPmRwdV9lZGlkX3JlZ2lzdGVyKGRwLT5wYW5lbCk7Ci0JaWYgKHJjKSB7Ci0JCXByX2Vy cigiRFJNIERQIEVESUQgcmVnaXN0ZXIgZmFpbGVkXG4iKTsKLQkJZ290byBlbmQ7Ci0JfQotCiAJ cmMgPSBkcC0+cG93ZXItPnBvd2VyX2NsaWVudF9pbml0KGRwLT5wb3dlciwgJnByaXYtPnBoYW5k bGUpOwogCWlmIChyYykgewogCQlwcl9lcnIoIlBvd2VyIGNsaWVudCBjcmVhdGUgZmFpbGVkXG4i KTsKQEAgLTQxMiw3ICs0MDYsNiBAQCBzdGF0aWMgdm9pZCBkcF9kaXNwbGF5X3VuYmluZChzdHJ1 Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKIAl9CiAKIAkodm9pZClkcC0+ cG93ZXItPnBvd2VyX2NsaWVudF9kZWluaXQoZHAtPnBvd2VyKTsKLQkodm9pZClkcC0+cGFuZWwt PmRwdV9lZGlkX2RlcmVnaXN0ZXIoZHAtPnBhbmVsKTsKIAkodm9pZClkcC0+YXV4LT5kcm1fYXV4 X2RlcmVnaXN0ZXIoZHAtPmF1eCk7CiAJZHBfZGlzcGxheV9kZWluaXRpYWxpemVfaGRjcChkcCk7 CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhbmVsLmMgYi9kcml2 ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhbmVsLmMKaW5kZXggMTFjMzMzOGUyM2IxLi42M2Y5YmY0 MDc1MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFuZWwuYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhbmVsLmMKQEAgLTE2LDYgKzE2LDkgQEAKIAog I2luY2x1ZGUgImRwX3BhbmVsLmgiCiAKKyNpbmNsdWRlIDxkcm0vZHJtX2Nvbm5lY3Rvci5oPgor I2luY2x1ZGUgPGRybS9kcm1fZWRpZC5oPgorCiAjZGVmaW5lIERQX1BBTkVMX0RFRkFVTFRfQlBQ IDI0CiAjZGVmaW5lIERQX01BWF9EU19QT1JUX0NPVU5UIDEKIApAQCAtMTUxLDkgKzE1NCwxMCBA QCBzdGF0aWMgaW50IGRwX3BhbmVsX3JlYWRfZWRpZChzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVs LAogCXBhbmVsID0gY29udGFpbmVyX29mKGRwX3BhbmVsLCBzdHJ1Y3QgZHBfcGFuZWxfcHJpdmF0 ZSwgZHBfcGFuZWwpOwogCiAJZG8gewotCQlkcHVfZ2V0X2VkaWQoY29ubmVjdG9yLCAmcGFuZWwt PmF1eC0+ZHJtX2F1eC0+ZGRjLAotCQkJKHZvaWQgKiopJmRwX3BhbmVsLT5lZGlkX2N0cmwpOwot CQlpZiAoIWRwX3BhbmVsLT5lZGlkX2N0cmwtPmVkaWQpIHsKKwkJa2ZyZWUoZHBfcGFuZWwtPmVk aWQpOworCQlkcF9wYW5lbC0+ZWRpZCA9IGRybV9nZXRfZWRpZChjb25uZWN0b3IsCisJCQkJCSAg ICAgICZwYW5lbC0+YXV4LT5kcm1fYXV4LT5kZGMpOworCQlpZiAoIWRwX3BhbmVsLT5lZGlkKSB7 CiAJCQlwcl9lcnIoIkVESUQgcmVhZCBmYWlsZWRcbiIpOwogCQkJcmV0cnlfY250Kys7CiAJCQlw YW5lbC0+YXV4LT5yZWNvbmZpZyhwYW5lbC0+YXV4KTsKQEAgLTE2Myw3ICsxNjcsNyBAQCBzdGF0 aWMgaW50IGRwX3BhbmVsX3JlYWRfZWRpZChzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsLAogCQl9 CiAJfSB3aGlsZSAocmV0cnlfY250IDwgbWF4X3JldHJ5KTsKIAotCXJldHVybiAtRUlOVkFMOwor CXJldHVybiBkcm1fYWRkX2VkaWRfbW9kZXMoY29ubmVjdG9yLCBkcF9wYW5lbC0+ZWRpZCk7CiB9 CiAKIHN0YXRpYyBpbnQgZHBfcGFuZWxfcmVhZF9zaW5rX2NhcHMoc3RydWN0IGRwX3BhbmVsICpk cF9wYW5lbCwKQEAgLTE4OCw3ICsxOTIsNyBAQCBzdGF0aWMgaW50IGRwX3BhbmVsX3JlYWRfc2lu a19jYXBzKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwsCiAJfQogCiAJcmMgPSBkcF9wYW5lbF9y ZWFkX2VkaWQoZHBfcGFuZWwsIGNvbm5lY3Rvcik7Ci0JaWYgKHJjKSB7CisJaWYgKHJjIDwgMCkg ewogCQlwcl9lcnIoInBhbmVsIGVkaWQgcmVhZCBmYWlsZWQsIHNldCBmYWlsc2FmZSBtb2RlXG4i KTsKIAkJcmV0dXJuIHJjOwogCX0KQEAgLTIxNSw3ICsyMTksNyBAQCBzdGF0aWMgdTMyIGRwX3Bh bmVsX2dldF9tYXhfcGNsayhzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsKQogCiAJbGlua19pbmZv ID0gJmRwX3BhbmVsLT5saW5rX2luZm87CiAKLQlicGMgPSBkcHVfZ2V0X3NpbmtfYnBjKGRwX3Bh bmVsLT5lZGlkX2N0cmwpOworCWJwYyA9IGRwX3BhbmVsLT5jb25uZWN0b3ItPmRpc3BsYXlfaW5m by5icGM7CiAJYnBwID0gYnBjICogbnVtX2NvbXBvbmVudHM7CiAJaWYgKCFicHApCiAJCWJwcCA9 IERQX1BBTkVMX0RFRkFVTFRfQlBQOwpAQCAtMjkwLDggKzI5NCw4IEBAIHN0YXRpYyBpbnQgZHBf cGFuZWxfZ2V0X21vZGVzKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwsCiAJaWYgKGRwX3BhbmVs LT52aWRlb190ZXN0KSB7CiAJCWRwX3BhbmVsX3NldF90ZXN0X21vZGUocGFuZWwsIG1vZGUpOwog CQlyZXR1cm4gMTsKLQl9IGVsc2UgaWYgKGRwX3BhbmVsLT5lZGlkX2N0cmwtPmVkaWQpIHsKLQkJ cmV0dXJuIF9kcHVfZWRpZF91cGRhdGVfbW9kZXMoY29ubmVjdG9yLCBkcF9wYW5lbC0+ZWRpZF9j dHJsKTsKKwl9IGVsc2UgaWYgKGRwX3BhbmVsLT5lZGlkKSB7CisJCXJldHVybiBkcF9wYW5lbF9y ZWFkX2VkaWQoZHBfcGFuZWwsIGNvbm5lY3Rvcik7CiAJfQogCiAJLyogZmFpbC1zYWZlIG1vZGUg Ki8KQEAgLTMwMCw2ICszMDQsMjcgQEAgc3RhdGljIGludCBkcF9wYW5lbF9nZXRfbW9kZXMoc3Ry dWN0IGRwX3BhbmVsICpkcF9wYW5lbCwKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIHU4IGRwX3Bh bmVsX2dldF9lZGlkX2NoZWNrc3VtKHN0cnVjdCBlZGlkICplZGlkKQoreworCXN0cnVjdCBlZGlk ICpsYXN0X2Jsb2NrID0gTlVMTDsKKwl1OCAqcmF3X2VkaWQgPSBOVUxMOworCisJaWYgKCFlZGlk KSB7CisJCXByX2VycigiaW52YWxpZCBlZGlkIGlucHV0XG4iKTsKKwkJcmV0dXJuIDA7CisJfQor CisJcmF3X2VkaWQgPSAodTggKillZGlkOworCXJhd19lZGlkICs9IChlZGlkLT5leHRlbnNpb25z ICogRURJRF9MRU5HVEgpOworCWxhc3RfYmxvY2sgPSAoc3RydWN0IGVkaWQgKilyYXdfZWRpZDsK KworCWlmIChsYXN0X2Jsb2NrKQorCQlyZXR1cm4gbGFzdF9ibG9jay0+Y2hlY2tzdW07CisKKwlw cl9lcnIoIkludmFsaWQgYmxvY2ssIG5vIGNoZWNrc3VtXG4iKTsKKwlyZXR1cm4gMDsKK30KKwog c3RhdGljIHZvaWQgZHBfcGFuZWxfaGFuZGxlX3NpbmtfcmVxdWVzdChzdHJ1Y3QgZHBfcGFuZWwg KmRwX3BhbmVsKQogewogCXN0cnVjdCBkcF9wYW5lbF9wcml2YXRlICpwYW5lbDsKQEAgLTMxMiw3 ICszMzcsNyBAQCBzdGF0aWMgdm9pZCBkcF9wYW5lbF9oYW5kbGVfc2lua19yZXF1ZXN0KHN0cnVj dCBkcF9wYW5lbCAqZHBfcGFuZWwpCiAJcGFuZWwgPSBjb250YWluZXJfb2YoZHBfcGFuZWwsIHN0 cnVjdCBkcF9wYW5lbF9wcml2YXRlLCBkcF9wYW5lbCk7CiAKIAlpZiAocGFuZWwtPmxpbmstPnNp bmtfcmVxdWVzdCAmIERQX1RFU1RfTElOS19FRElEX1JFQUQpIHsKLQkJdTggY2hlY2tzdW0gPSBk cHVfZ2V0X2VkaWRfY2hlY2tzdW0oZHBfcGFuZWwtPmVkaWRfY3RybCk7CisJCXU4IGNoZWNrc3Vt ID0gZHBfcGFuZWxfZ2V0X2VkaWRfY2hlY2tzdW0oZHBfcGFuZWwtPmVkaWQpOwogCiAJCXBhbmVs LT5saW5rLT5zZW5kX2VkaWRfY2hlY2tzdW0ocGFuZWwtPmxpbmssIGNoZWNrc3VtKTsKIAkJcGFu ZWwtPmxpbmstPnNlbmRfdGVzdF9yZXNwb25zZShwYW5lbC0+bGluayk7CkBAIC0zODIsMzYgKzQw Nyw2IEBAIHN0YXRpYyBpbnQgZHBfcGFuZWxfdGltaW5nX2NmZyhzdHJ1Y3QgZHBfcGFuZWwgKmRw X3BhbmVsKQogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBkcF9wYW5lbF9lZGlkX3JlZ2lz dGVyKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwpCi17Ci0JaW50IHJjID0gMDsKLQotCWlmICgh ZHBfcGFuZWwpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGlucHV0XG4iKTsKLQkJcmMgPSAtRUlOVkFM OwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlkcF9wYW5lbC0+ZWRpZF9jdHJsID0gZHB1X2VkaWRfaW5p dCgpOwotCWlmICghZHBfcGFuZWwtPmVkaWRfY3RybCkgewotCQlwcl9lcnIoImRwdSBlZGlkIGlu aXQgZm9yIERQIGZhaWxlZFxuIik7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBlbmQ7Ci0JfQot ZW5kOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHZvaWQgZHBfcGFuZWxfZWRpZF9kZXJlZ2lz dGVyKHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwpCi17Ci0JaWYgKCFkcF9wYW5lbCkgewotCQlw cl9lcnIoImludmFsaWQgaW5wdXRcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JZHB1X2VkaWRfZGVp bml0KCh2b2lkICoqKSZkcF9wYW5lbC0+ZWRpZF9jdHJsKTsKLX0KLQogc3RhdGljIGludCBkcF9w YW5lbF9pbml0X3BhbmVsX2luZm8oc3RydWN0IGRwX3BhbmVsICpkcF9wYW5lbCkKIHsKIAlpbnQg cmMgPSAwOwpAQCAtNTAzLDggKzQ5OCw2IEBAIHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWxfZ2V0 KHN0cnVjdCBkcF9wYW5lbF9pbiAqaW4pCiAJZHBfcGFuZWwgPSAmcGFuZWwtPmRwX3BhbmVsOwog CXBhbmVsLT5hdXhfY2ZnX3VwZGF0ZV9kb25lID0gZmFsc2U7CiAKLQlkcF9wYW5lbC0+ZHB1X2Vk aWRfcmVnaXN0ZXIgPSBkcF9wYW5lbF9lZGlkX3JlZ2lzdGVyOwotCWRwX3BhbmVsLT5kcHVfZWRp ZF9kZXJlZ2lzdGVyID0gZHBfcGFuZWxfZWRpZF9kZXJlZ2lzdGVyOwogCWRwX3BhbmVsLT5pbml0 X2luZm8gPSBkcF9wYW5lbF9pbml0X3BhbmVsX2luZm87CiAJZHBfcGFuZWwtPnRpbWluZ19jZmcg PSBkcF9wYW5lbF90aW1pbmdfY2ZnOwogCWRwX3BhbmVsLT5yZWFkX3NpbmtfY2FwcyA9IGRwX3Bh bmVsX3JlYWRfc2lua19jYXBzOwpAQCAtNTI3LDUgKzUyMCw3IEBAIHZvaWQgZHBfcGFuZWxfcHV0 KHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwpCiAKIAlwYW5lbCA9IGNvbnRhaW5lcl9vZihkcF9w YW5lbCwgc3RydWN0IGRwX3BhbmVsX3ByaXZhdGUsIGRwX3BhbmVsKTsKIAorCWtmcmVlKGRwX3Bh bmVsLT5lZGlkKTsKKwlkcF9wYW5lbC0+ZWRpZCA9IE5VTEw7CiAJZGV2bV9rZnJlZShwYW5lbC0+ ZGV2LCBwYW5lbCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3Bh bmVsLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhbmVsLmgKaW5kZXggYTk1ZmQwMTU3 YTRlLi5kNmViZGI5OGY3NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBf cGFuZWwuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3BhbmVsLmgKQEAgLTE4LDcg KzE4LDggQEAKICNpbmNsdWRlICJkcF9hdXguaCIKICNpbmNsdWRlICJkcF9saW5rLmgiCiAjaW5j bHVkZSAiZHBfdXNicGQuaCIKLSNpbmNsdWRlICJkcHVfZWRpZF9wYXJzZXIuaCIKKworc3RydWN0 IGVkaWQ7CiAKIGVudW0gZHBfbGFuZV9jb3VudCB7CiAJRFBfTEFORV9DT1VOVF8xCT0gMSwKQEAg LTYzLDcgKzY0LDcgQEAgc3RydWN0IGRwX3BhbmVsIHsKIAl1OCBkc19wb3J0c1tEUF9NQVhfRE9X TlNUUkVBTV9QT1JUU107CiAKIAlzdHJ1Y3QgZHJtX2RwX2xpbmsgbGlua19pbmZvOwotCXN0cnVj dCBkcHVfZWRpZF9jdHJsICplZGlkX2N0cmw7CisJc3RydWN0IGVkaWQgKmVkaWQ7CiAJc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKIAlzdHJ1Y3QgZHBfcGFuZWxfaW5mbyBwaW5mbzsK IAlib29sIHZpZGVvX3Rlc3Q7CkBAIC03MSw4ICs3Miw2IEBAIHN0cnVjdCBkcF9wYW5lbCB7CiAJ dTMyIHZpYzsKIAl1MzIgbWF4X3BjbGtfa2h6OwogCi0JaW50ICgqZHB1X2VkaWRfcmVnaXN0ZXIp KHN0cnVjdCBkcF9wYW5lbCAqZHBfcGFuZWwpOwotCXZvaWQgKCpkcHVfZWRpZF9kZXJlZ2lzdGVy KShzdHJ1Y3QgZHBfcGFuZWwgKmRwX3BhbmVsKTsKIAlpbnQgKCppbml0X2luZm8pKHN0cnVjdCBk cF9wYW5lbCAqZHBfcGFuZWwpOwogCWludCAoKnRpbWluZ19jZmcpKHN0cnVjdCBkcF9wYW5lbCAq ZHBfcGFuZWwpOwogCWludCAoKnJlYWRfc2lua19jYXBzKShzdHJ1Y3QgZHBfcGFuZWwgKmRwX3Bh bmVsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfZWRpZF9wYXJzZXIuYyBi L2RyaXZlcnMvZ3B1L2RybS9tc20vZHB1X2VkaWRfcGFyc2VyLmMKZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDI0ZjVmNDRjMTQ5Mi4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZHB1X2VkaWRfcGFyc2VyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NTcgKzAsMCBA QAotLyogQ29weXJpZ2h0IChjKSAyMDE3LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwg cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9u bHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2luY2x1ZGUgPGRybS9kcm1fZWRp ZC5oPgotI2luY2x1ZGUgPGxpbnV4L2hkbWkuaD4KLQotI2luY2x1ZGUgImRwdV9rbXMuaCIKLSNp bmNsdWRlICJkcHVfZWRpZF9wYXJzZXIuaCIKLQotI2RlZmluZSBEQkNfU1RBUlRfT0ZGU0VUIDQK LSNkZWZpbmUgRURJRF9EVERfTEVOIDE4Ci0KLWVudW0gZGF0YV9ibG9ja190eXBlcyB7Ci0JUkVT RVJWRUQsCi0JQVVESU9fREFUQV9CTE9DSywKLQlWSURFT19EQVRBX0JMT0NLLAotCVZFTkRPUl9T UEVDSUZJQ19EQVRBX0JMT0NLLAotCVNQRUFLRVJfQUxMT0NBVElPTl9EQVRBX0JMT0NLLAotCVZF U0FfRFRDX0RBVEFfQkxPQ0ssCi0JUkVTRVJWRUQyLAotCVVTRV9FWFRFTkRFRF9UQUcKLX07Ci0K LXN0YXRpYyB1OCAqZHB1X2ZpbmRfZWRpZF9leHRlbnNpb24oc3RydWN0IGVkaWQgKmVkaWQsIGlu dCBleHRfaWQpCi17Ci0JdTggKmVkaWRfZXh0ID0gTlVMTDsKLQlpbnQgaTsKLQotCS8qIE5vIEVE SUQgb3IgRURJRCBleHRlbnNpb25zICovCi0JaWYgKGVkaWQgPT0gTlVMTCB8fCBlZGlkLT5leHRl bnNpb25zID09IDApCi0JCXJldHVybiBOVUxMOwotCi0JLyogRmluZCBDRUEgZXh0ZW5zaW9uICov Ci0JZm9yIChpID0gMDsgaSA8IGVkaWQtPmV4dGVuc2lvbnM7IGkrKykgewotCQllZGlkX2V4dCA9 ICh1OCAqKWVkaWQgKyBFRElEX0xFTkdUSCAqIChpICsgMSk7Ci0JCWlmIChlZGlkX2V4dFswXSA9 PSBleHRfaWQpCi0JCQlicmVhazsKLQl9Ci0KLQlpZiAoaSA9PSBlZGlkLT5leHRlbnNpb25zKQot CQlyZXR1cm4gTlVMTDsKLQotCXJldHVybiBlZGlkX2V4dDsKLX0KLQotc3RhdGljIHU4ICpkcHVf ZmluZF9jZWFfZXh0ZW5zaW9uKHN0cnVjdCBlZGlkICplZGlkKQotewotCXJldHVybiBkcHVfZmlu ZF9lZGlkX2V4dGVuc2lvbihlZGlkLCBEUFVfQ0VBX0VYVCk7Ci19Ci0KLXN0YXRpYyBpbnQKLWRw dV9jZWFfZGJfcGF5bG9hZF9sZW4oY29uc3QgdTggKmRiKQotewotCXJldHVybiBkYlswXSAmIDB4 MWY7Ci19Ci0KLXN0YXRpYyBpbnQKLWRwdV9jZWFfZGJfdGFnKGNvbnN0IHU4ICpkYikKLXsKLQly ZXR1cm4gZGJbMF0gPj4gNTsKLX0KLQotc3RhdGljIGludAotZHB1X2NlYV9yZXZpc2lvbihjb25z dCB1OCAqY2VhKQotewotCXJldHVybiBjZWFbMV07Ci19Ci0KLXN0YXRpYyBpbnQKLWRwdV9jZWFf ZGJfb2Zmc2V0cyhjb25zdCB1OCAqY2VhLCBpbnQgKnN0YXJ0LCBpbnQgKmVuZCkKLXsKLQkvKiBE YXRhIGJsb2NrIG9mZnNldCBpbiBDRUEgZXh0ZW5zaW9uIGJsb2NrICovCi0JKnN0YXJ0ID0gNDsK LQkqZW5kID0gY2VhWzJdOwotCWlmICgqZW5kID09IDApCi0JCSplbmQgPSAxMjc7Ci0JaWYgKCpl bmQgPCA0IHx8ICplbmQgPiAxMjcpCi0JCXJldHVybiAtRVJBTkdFOwotCXJldHVybiAwOwotfQot Ci0jZGVmaW5lIGRwdV9mb3JfZWFjaF9jZWFfZGIoY2VhLCBpLCBzdGFydCwgZW5kKSBcCi1mb3Ig KChpKSA9IChzdGFydCk7IFwKLShpKSA8IChlbmQpICYmIChpKSArIGRwdV9jZWFfZGJfcGF5bG9h ZF9sZW4oJihjZWEpWyhpKV0pIDwgKGVuZCk7IFwKLShpKSArPSBkcHVfY2VhX2RiX3BheWxvYWRf bGVuKCYoY2VhKVsoaSldKSArIDEpCi0KLXN0YXRpYyBib29sIGRwdV9jZWFfZGJfaXNfaGRtaV9o Zl92c2RiKGNvbnN0IHU4ICpkYikKLXsKLQlpbnQgaGRtaV9pZDsKLQotCWlmIChkcHVfY2VhX2Ri X3RhZyhkYikgIT0gVkVORE9SX1NQRUNJRklDX0RBVEFfQkxPQ0spCi0JCXJldHVybiBmYWxzZTsK LQotCWlmIChkcHVfY2VhX2RiX3BheWxvYWRfbGVuKGRiKSA8IDcpCi0JCXJldHVybiBmYWxzZTsK LQotCWhkbWlfaWQgPSBkYlsxXSB8IChkYlsyXSA8PCA4KSB8IChkYlszXSA8PCAxNik7Ci0KLQly ZXR1cm4gaGRtaV9pZCA9PSBIRE1JX0ZPUlVNX0lFRUVfT1VJOwotfQotCi1zdGF0aWMgdTggKmRw dV9lZGlkX2ZpbmRfZXh0ZW5kZWRfdGFnX2Jsb2NrKHN0cnVjdCBlZGlkICplZGlkLCBpbnQgYmxr X2lkKQotewotCXU4ICpkYiA9IE5VTEw7Ci0JdTggKmNlYSA9IE5VTEw7Ci0KLQlpZiAoIWVkaWQp IHsKLQkJRFBVX0VSUk9SKCIlczogaW52YWxpZCBpbnB1dFxuIiwgX19mdW5jX18pOwotCQlyZXR1 cm4gTlVMTDsKLQl9Ci0KLQljZWEgPSBkcHVfZmluZF9jZWFfZXh0ZW5zaW9uKGVkaWQpOwotCi0J aWYgKGNlYSAmJiBkcHVfY2VhX3JldmlzaW9uKGNlYSkgPj0gMykgewotCQlpbnQgaSwgc3RhcnQs IGVuZDsKLQotCQlpZiAoZHB1X2NlYV9kYl9vZmZzZXRzKGNlYSwgJnN0YXJ0LCAmZW5kKSkKLQkJ CXJldHVybiBOVUxMOwotCi0JCWRwdV9mb3JfZWFjaF9jZWFfZGIoY2VhLCBpLCBzdGFydCwgZW5k KSB7Ci0JCQlkYiA9ICZjZWFbaV07Ci0JCQlpZiAoKGRwdV9jZWFfZGJfdGFnKGRiKSA9PSBEUFVf RVhURU5ERURfVEFHKSAmJgotCQkJCShkYlsxXSA9PSBibGtfaWQpKQotCQkJCXJldHVybiBkYjsK LQkJfQotCX0KLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHU4ICoKLWRwdV9lZGlkX2ZpbmRf YmxvY2soc3RydWN0IGVkaWQgKmVkaWQsIGludCBibGtfaWQpCi17Ci0JdTggKmRiID0gTlVMTDsK LQl1OCAqY2VhID0gTlVMTDsKLQotCWlmICghZWRpZCkgewotCQlEUFVfRVJST1IoIiVzOiBpbnZh bGlkIGlucHV0XG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWNlYSA9IGRw dV9maW5kX2NlYV9leHRlbnNpb24oZWRpZCk7Ci0KLQlpZiAoY2VhICYmIGRwdV9jZWFfcmV2aXNp b24oY2VhKSA+PSAzKSB7Ci0JCWludCBpLCBzdGFydCwgZW5kOwotCi0JCWlmIChkcHVfY2VhX2Ri X29mZnNldHMoY2VhLCAmc3RhcnQsICZlbmQpKQotCQkJcmV0dXJuIE5VTEw7Ci0KLQkJZHB1X2Zv cl9lYWNoX2NlYV9kYihjZWEsIGksIHN0YXJ0LCBlbmQpIHsKLQkJCWRiID0gJmNlYVtpXTsKLQkJ CWlmIChkcHVfY2VhX2RiX3RhZyhkYikgPT0gYmxrX2lkKQotCQkJCXJldHVybiBkYjsKLQkJfQot CX0KLQlyZXR1cm4gTlVMTDsKLX0KLQotCi1zdGF0aWMgY29uc3QgdTggKl9kcHVfZWRpZF9maW5k X2Jsb2NrKGNvbnN0IHU4ICppbl9idWYsIHUzMiBzdGFydF9vZmZzZXQsCi0JdTggdHlwZSwgdTgg KmxlbikKLXsKLQkvKiB0aGUgc3RhcnQgb2YgZGF0YSBibG9jayBjb2xsZWN0aW9uLCBzdGFydCBv ZiBWaWRlbyBEYXRhIEJsb2NrICovCi0JdTMyIG9mZnNldCA9IHN0YXJ0X29mZnNldDsKLQl1MzIg ZGJjX29mZnNldCA9IGluX2J1ZlsyXTsKLQotCURQVV9FRElEX0RFQlVHKCIlcyArIiwgX19mdW5j X18pOwotCS8qCi0JICogKiBlZGlkIGJ1ZmZlciAxLCBieXRlIDIgYmVpbmcgNCBtZWFucyBubyBu b24tRFREL0RhdGEgYmxvY2sKLQkgKiAgIGNvbGxlY3Rpb24gcHJlc2VudC4KLQkgKiAqIGVkaWQg YnVmZmVyIDEsIGJ5dGUgMiBiZWluZyAwIG1lYW5zIG5vIG5vbi1EVEQvREFUQSBibG9jawotCSAq ICAgY29sbGVjdGlvbiBwcmVzZW50IGFuZCBubyBEVEQgZGF0YSBwcmVzZW50LgotCSAqLwotCWlm ICgoZGJjX29mZnNldCA9PSAwKSB8fCAoZGJjX29mZnNldCA9PSA0KSkgewotCQlEUFVfRVJST1Io IkVESUQ6IG5vIERURCBvciBub24tRFREIGRhdGEgcHJlc2VudFxuIik7Ci0JCXJldHVybiBOVUxM OwotCX0KLQotCXdoaWxlIChvZmZzZXQgPCBkYmNfb2Zmc2V0KSB7Ci0JCXU4IGJsb2NrX2xlbiA9 IGluX2J1ZltvZmZzZXRdICYgMHgxRjsKLQotCQlpZiAoKG9mZnNldCArIGJsb2NrX2xlbiA8PSBk YmNfb2Zmc2V0KSAmJgotCQkgICAgKGluX2J1ZltvZmZzZXRdID4+IDUpID09IHR5cGUpIHsKLQkJ CSpsZW4gPSBibG9ja19sZW47Ci0JCQlEUFVfRURJRF9ERUJVRygiYmxvY2s9JWQgZm91bmQgQCAw eCV4IHcvIGxlbj0lZFxuIiwKLQkJCQl0eXBlLCBvZmZzZXQsIGJsb2NrX2xlbik7Ci0KLQkJCXJl dHVybiBpbl9idWYgKyBvZmZzZXQ7Ci0JCX0KLQkJb2Zmc2V0ICs9IDEgKyBibG9ja19sZW47Ci0J fQotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkIGRwdV9lZGlkX2V4dHJhY3RfdmVu ZG9yX2lkKHN0cnVjdCBkcHVfZWRpZF9jdHJsICplZGlkX2N0cmwpCi17Ci0JY2hhciAqdmVuZG9y X2lkOwotCXUzMiBpZF9jb2RlczsKLQotCURQVV9FRElEX0RFQlVHKCIlcyArIiwgX19mdW5jX18p OwotCWlmICghZWRpZF9jdHJsKSB7Ci0JCURQVV9FUlJPUigiJXM6IGludmFsaWQgaW5wdXRcbiIs IF9fZnVuY19fKTsKLQkJcmV0dXJuOwotCX0KLQotCXZlbmRvcl9pZCA9IGVkaWRfY3RybC0+dmVu ZG9yX2lkOwotCWlkX2NvZGVzID0gKCh1MzIpZWRpZF9jdHJsLT5lZGlkLT5tZmdfaWRbMF0gPDwg OCkgKwotCQllZGlkX2N0cmwtPmVkaWQtPm1mZ19pZFsxXTsKLQotCXZlbmRvcl9pZFswXSA9ICdB JyAtIDEgKyAoKGlkX2NvZGVzID4+IDEwKSAmIDB4MUYpOwotCXZlbmRvcl9pZFsxXSA9ICdBJyAt IDEgKyAoKGlkX2NvZGVzID4+IDUpICYgMHgxRik7Ci0JdmVuZG9yX2lkWzJdID0gJ0EnIC0gMSAr IChpZF9jb2RlcyAmIDB4MUYpOwotCXZlbmRvcl9pZFszXSA9IDA7Ci0JRFBVX0VESURfREVCVUco InZlbmRvciBpZCBpcyAlcyAiLCB2ZW5kb3JfaWQpOwotCURQVV9FRElEX0RFQlVHKCIlcyAtIiwg X19mdW5jX18pOwotfQotCi1zdGF0aWMgdm9pZCBkcHVfZWRpZF9zZXRfeTQyMF9zdXBwb3J0KHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCi11MzIgdmlkZW9fZm9ybWF0KQotewotCXU4 IGNlYV9tb2RlID0gMDsKLQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKLQl1MzIgbW9k ZV9mbXRfZmxhZ3MgPSAwOwotCi0JLyogTmVlZCB0byBhZGQgWTQyMCBzdXBwb3J0IGZsYWcgdG8g dGhlIG1vZGVzICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShtb2RlLCAmY29ubmVjdG9yLT5wcm9i ZWRfbW9kZXMsIGhlYWQpIHsKLQkJLyogQ2FjaGUgdGhlIGZvcm1hdCBmbGFncyBiZWZvcmUgY2xl YXJpbmcgKi8KLQkJbW9kZV9mbXRfZmxhZ3MgPSBtb2RlLT5mbGFnczsKLQkJLyogQ2xlYXIgdGhl IFJHQi9ZVVYgZm9ybWF0IGZsYWdzIGJlZm9yZSBjYWxsaW5nIHVwc3RyZWFtIEFQSSAqLwotCQlt b2RlLT5mbGFncyAmPSB+RFBVX0RSTV9NT0RFX0ZMQUdfRk1UX01BU0s7Ci0JCWNlYV9tb2RlID0g ZHJtX21hdGNoX2NlYV9tb2RlKG1vZGUpOwotCQkvKiBSZXN0b3JlIHRoZSBmb3JtYXQgZmxhZ3Mg Ki8KLQkJbW9kZS0+ZmxhZ3MgPSBtb2RlX2ZtdF9mbGFnczsKLQkJaWYgKChjZWFfbW9kZSAhPSAw KSAmJiAoY2VhX21vZGUgPT0gdmlkZW9fZm9ybWF0KSkgewotCQkJRFBVX0VESURfREVCVUcoIiVz IGZvdW5kIG1hdGNoIGZvciAlZCAiLCBfX2Z1bmNfXywKLQkJCXZpZGVvX2Zvcm1hdCk7Ci0JCQlt b2RlLT5mbGFncyB8PSBEUk1fTU9ERV9GTEFHX1NVUFBPUlRTX1lVVjsKLQkJfQotCX0KLX0KLQot c3RhdGljIHZvaWQgZHB1X2VkaWRfcGFyc2VfWTQyMENNREIoCi1zdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yLCBzdHJ1Y3QgZHB1X2VkaWRfY3RybCAqZWRpZF9jdHJsLAotY29uc3QgdTgg KmRiKQotewotCXUzMiBvZmZzZXQgPSAwOwotCXU4IGNtZGJfbGVuID0gMDsKLQl1OCBzdmRfbGVu ID0gMDsKLQljb25zdCB1OCAqc3ZkID0gTlVMTDsKLQl1MzIgaSA9IDAsIGogPSAwOwotCXUzMiB2 aWRlb19mb3JtYXQgPSAwOwotCi0JaWYgKCFlZGlkX2N0cmwpIHsKLQkJRFBVX0VSUk9SKCIlczog ZWRpZF9jdHJsIGlzIE5VTExcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmICgh ZGIpIHsKLQkJRFBVX0VSUk9SKCIlczogaW52YWxpZCBpbnB1dFxuIiwgX19mdW5jX18pOwotCQly ZXR1cm47Ci0JfQotCURQVV9FRElEX0RFQlVHKCIlcyArXG4iLCBfX2Z1bmNfXyk7Ci0JY21kYl9s ZW4gPSBkYlswXSAmIDB4MWY7Ci0KLQkvKiBCeXRlIDMgdG8gTCsxIGNvbnRhaW4gU1ZEcyAqLwot CW9mZnNldCArPSAyOwotCi0Jc3ZkID0gZHB1X2VkaWRfZmluZF9ibG9jayhlZGlkX2N0cmwtPmVk aWQsIFZJREVPX0RBVEFfQkxPQ0spOwotCi0JaWYgKHN2ZCkgewotCQkvKm1vdmluZyB0byB0aGUg bmV4dCBieXRlIGFzIHZpYyBpbmZvIGJlZ2lucyB0aGVyZSovCi0JCXN2ZF9sZW4gPSBzdmRbMF0g JiAweDFmOwotCQkrK3N2ZDsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc3ZkX2xlbjsgaSsrLCBq KyspIHsKLQkJdmlkZW9fZm9ybWF0ID0gKihzdmQgKyBpKSAmIDB4N0Y7Ci0JCWlmIChjbWRiX2xl biA9PSAxKSB7Ci0JCQkvKiBJZiBjbWRiX2xlbiBpcyAxLCBpdCBtZWFucyBhbGwgU1ZEcyBzdXBw b3J0IFlVViAqLwotCQkJZHB1X2VkaWRfc2V0X3k0MjBfc3VwcG9ydChjb25uZWN0b3IsIHZpZGVv X2Zvcm1hdCk7Ci0JCX0gZWxzZSBpZiAoZGJbb2Zmc2V0XSAmICgxIDw8IGopKSB7Ci0JCQlkcHVf ZWRpZF9zZXRfeTQyMF9zdXBwb3J0KGNvbm5lY3RvciwgdmlkZW9fZm9ybWF0KTsKLQotCQkJaWYg KGogJiAweDgwKSB7Ci0JCQkJaiA9IGovODsKLQkJCQlvZmZzZXQrKzsKLQkJCQlpZiAob2Zmc2V0 ID49IGNtZGJfbGVuKQotCQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQotCURQVV9FRElEX0RF QlVHKCIlcyAtXG4iLCBfX2Z1bmNfXyk7Ci0KLX0KLQotc3RhdGljIHZvaWQgZHB1X2VkaWRfcGFy c2VfWTQyMFZEQigKLXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIHN0cnVjdCBkcHVf ZWRpZF9jdHJsICplZGlkX2N0cmwsCi1jb25zdCB1OCAqZGIpCi17Ci0JdTggbGVuID0gZGJbMF0g JiAweDFmOwotCXUzMiBpID0gMDsKLQl1MzIgdmlkZW9fZm9ybWF0ID0gMDsKLQotCWlmICghZWRp ZF9jdHJsKSB7Ci0JCURQVV9FUlJPUigiJXM6IGludmFsaWQgaW5wdXRcbiIsIF9fZnVuY19fKTsK LQkJcmV0dXJuOwotCX0KLQotCURQVV9FRElEX0RFQlVHKCIlcyArXG4iLCBfX2Z1bmNfXyk7Ci0K LQkvKiBPZmZzZXQgdG8gYnl0ZSAzICovCi0JZGIgKz0gMjsKLQlmb3IgKGkgPSAwOyBpIDwgbGVu IC0gMTsgaSsrKSB7Ci0JCXZpZGVvX2Zvcm1hdCA9ICooZGIgKyBpKSAmIDB4N0Y7Ci0JCS8qCi0J CSAqIG1vZGUgd2FzIGFscmVhZHkgYWRkZWQgaW4gZ2V0X21vZGVzKCkKLQkJICogb25seSBuZWVk IHRvIHNldCB0aGUgWTQyMCBzdXBwb3J0IGZsYWcKLQkJICovCi0JCWRwdV9lZGlkX3NldF95NDIw X3N1cHBvcnQoY29ubmVjdG9yLCB2aWRlb19mb3JtYXQpOwotCX0KLQlEUFVfRURJRF9ERUJVRygi JXMgLSIsIF9fZnVuY19fKTsKLX0KLQotc3RhdGljIHZvaWQgZHB1X2VkaWRfc2V0X21vZGVfZm9y bWF0KAotc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0IGRwdV9lZGlkX2N0 cmwgKmVkaWRfY3RybCkKLXsKLQljb25zdCB1OCAqZGIgPSBOVUxMOwotCXN0cnVjdCBkcm1fZGlz cGxheV9tb2RlICptb2RlOwotCi0JRFBVX0VESURfREVCVUcoIiVzICtcbiIsIF9fZnVuY19fKTsK LQkvKiBTZXQgWVVWIG1vZGUgc3VwcG9ydCBmbGFncyBmb3IgWUNiY3I0MjBWREIgKi8KLQlkYiA9 IGRwdV9lZGlkX2ZpbmRfZXh0ZW5kZWRfdGFnX2Jsb2NrKGVkaWRfY3RybC0+ZWRpZCwKLQkJCVk0 MjBfVklERU9fREFUQV9CTE9DSyk7Ci0JaWYgKGRiKQotCQlkcHVfZWRpZF9wYXJzZV9ZNDIwVkRC KGNvbm5lY3RvciwgZWRpZF9jdHJsLCBkYik7Ci0JZWxzZQotCQlEUFVfRURJRF9ERUJVRygiWUNi Q3I0MjAgVkRCIGlzIG5vdCBwcmVzZW50XG4iKTsKLQotCS8qIFNldCBSR0Igc3VwcG9ydGVkIG9u IGFsbCBtb2RlcyB3aGVyZSBZVVYgaXMgbm90IHNldCAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnko bW9kZSwgJmNvbm5lY3Rvci0+cHJvYmVkX21vZGVzLCBoZWFkKSB7Ci0JCWlmICghKG1vZGUtPmZs YWdzICYgRFJNX01PREVfRkxBR19TVVBQT1JUU19ZVVYpKQotCQkJbW9kZS0+ZmxhZ3MgfD0gRFJN X01PREVfRkxBR19TVVBQT1JUU19SR0I7Ci0JfQotCi0KLQlkYiA9IGRwdV9lZGlkX2ZpbmRfZXh0 ZW5kZWRfdGFnX2Jsb2NrKGVkaWRfY3RybC0+ZWRpZCwKLQkJCVk0MjBfQ0FQQUJJTElUWV9NQVBf REFUQV9CTE9DSyk7Ci0JaWYgKGRiKQotCQlkcHVfZWRpZF9wYXJzZV9ZNDIwQ01EQihjb25uZWN0 b3IsIGVkaWRfY3RybCwgZGIpOwotCWVsc2UKLQkJRFBVX0VESURfREVCVUcoIllDYkNyNDIwIENN REIgaXMgbm90IHByZXNlbnRcbiIpOwotCi0JRFBVX0VESURfREVCVUcoIiVzIC1cbiIsIF9fZnVu Y19fKTsKLX0KLQotc3RhdGljIHZvaWQgX2RwdV9lZGlkX3VwZGF0ZV9kY19tb2RlcygKLXN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIHN0cnVjdCBkcHVfZWRpZF9jdHJsICplZGlkX2N0 cmwpCi17Ci0JaW50IGksIHN0YXJ0LCBlbmQ7Ci0JdTggKmVkaWRfZXh0LCAqaGRtaTsKLQlzdHJ1 Y3QgZHJtX2Rpc3BsYXlfaW5mbyAqZGlzcF9pbmZvOwotCXUzMiBoZG1pX2RjX3l1dl9tb2RlcyA9 IDA7Ci0KLQlEUFVfRURJRF9ERUJVRygiJXMgK1xuIiwgX19mdW5jX18pOwotCi0JaWYgKCFjb25u ZWN0b3IgfHwgIWVkaWRfY3RybCkgewotCQlEUFVfRVJST1IoImludmFsaWQgaW5wdXRcbiIpOwot CQlyZXR1cm47Ci0JfQotCi0JZGlzcF9pbmZvID0gJmNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvOwot Ci0JZWRpZF9leHQgPSBkcHVfZmluZF9jZWFfZXh0ZW5zaW9uKGVkaWRfY3RybC0+ZWRpZCk7Ci0K LQlpZiAoIWVkaWRfZXh0KSB7Ci0JCURQVV9FUlJPUigibm8gY2VhIGV4dGVuc2lvblxuIik7Ci0J CXJldHVybjsKLQl9Ci0KLQlpZiAoZHB1X2NlYV9kYl9vZmZzZXRzKGVkaWRfZXh0LCAmc3RhcnQs ICZlbmQpKQotCQlyZXR1cm47Ci0KLQlkcHVfZm9yX2VhY2hfY2VhX2RiKGVkaWRfZXh0LCBpLCBz dGFydCwgZW5kKSB7Ci0JCWlmIChkcHVfY2VhX2RiX2lzX2hkbWlfaGZfdnNkYigmZWRpZF9leHRb aV0pKSB7Ci0KLQkJCWhkbWkgPSAmZWRpZF9leHRbaV07Ci0KLQkJCWlmIChkcHVfY2VhX2RiX3Bh eWxvYWRfbGVuKGhkbWkpIDwgNykKLQkJCQljb250aW51ZTsKLQotCQkJaWYgKGhkbWlbN10gJiBE Uk1fRURJRF9ZQ0JDUjQyMF9EQ18zMCkgewotCQkJCWhkbWlfZGNfeXV2X21vZGVzIHw9IERSTV9F RElEX1lDQkNSNDIwX0RDXzMwOwotCQkJCURQVV9FRElEX0RFQlVHKCJZNDIwIDMwLWJpdCBzdXBw b3J0ZWRcbiIpOwotCQkJfQotCi0JCQlpZiAoaGRtaVs3XSAmIERSTV9FRElEX1lDQkNSNDIwX0RD XzM2KSB7Ci0JCQkJaGRtaV9kY195dXZfbW9kZXMgfD0gRFJNX0VESURfWUNCQ1I0MjBfRENfMzY7 Ci0JCQkJRFBVX0VESURfREVCVUcoIlk0MjAgMzYtYml0IHN1cHBvcnRlZFxuIik7Ci0JCQl9Ci0K LQkJCWlmIChoZG1pWzddICYgRFJNX0VESURfWUNCQ1I0MjBfRENfNDgpIHsKLQkJCQloZG1pX2Rj X3l1dl9tb2RlcyB8PSBEUk1fRURJRF9ZQ0JDUjQyMF9EQ18zNjsKLQkJCQlEUFVfRURJRF9ERUJV RygiWTQyMCA0OC1iaXQgc3VwcG9ydGVkXG4iKTsKLQkJCX0KLQkJfQotCX0KLQotCWRpc3BfaW5m by0+ZWRpZF9oZG1pX2RjX21vZGVzIHw9IGhkbWlfZGNfeXV2X21vZGVzOwotCi0JRFBVX0VESURf REVCVUcoIiVzIC1cbiIsIF9fZnVuY19fKTsKLX0KLQotc3RhdGljIHZvaWQgX2RwdV9lZGlkX2V4 dHJhY3RfYXVkaW9fZGF0YV9ibG9ja3MoCi0Jc3RydWN0IGRwdV9lZGlkX2N0cmwgKmVkaWRfY3Ry bCkKLXsKLQl1OCBsZW4gPSAwOwotCXU4IGFkYl9tYXggPSAwOwotCWNvbnN0IHU4ICphZGIgPSBO VUxMOwotCXUzMiBvZmZzZXQgPSBEQkNfU1RBUlRfT0ZGU0VUOwotCXU4ICpjZWEgPSBOVUxMOwot Ci0JaWYgKCFlZGlkX2N0cmwpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGVkaWRfY3RybFxuIik7 Ci0JCXJldHVybjsKLQl9Ci0JRFBVX0VESURfREVCVUcoIiVzICsiLCBfX2Z1bmNfXyk7Ci0JY2Vh ID0gZHB1X2ZpbmRfY2VhX2V4dGVuc2lvbihlZGlkX2N0cmwtPmVkaWQpOwotCWlmICghY2VhKSB7 Ci0JCURQVV9ERUJVRygiQ0VBIGV4dGVuc2lvbiBub3QgZm91bmRcbiIpOwotCQlyZXR1cm47Ci0J fQotCi0JZWRpZF9jdHJsLT5hZGJfc2l6ZSA9IDA7Ci0KLQltZW1zZXQoZWRpZF9jdHJsLT5hdWRp b19kYXRhX2Jsb2NrLCAwLAotCQlzaXplb2YoZWRpZF9jdHJsLT5hdWRpb19kYXRhX2Jsb2NrKSk7 Ci0KLQlkbyB7Ci0JCWxlbiA9IDA7Ci0JCWFkYiA9IF9kcHVfZWRpZF9maW5kX2Jsb2NrKGNlYSwg b2Zmc2V0LCBBVURJT19EQVRBX0JMT0NLLAotCQkJJmxlbik7Ci0KLQkJaWYgKChhZGIgPT0gTlVM TCkgfHwgKGxlbiA+IE1BWF9BVURJT19EQVRBX0JMT0NLX1NJWkUgfHwKLQkJCWFkYl9tYXggPj0g TUFYX05VTUJFUl9BREIpKSB7Ci0JCQlpZiAoIWVkaWRfY3RybC0+YWRiX3NpemUpIHsKLQkJCQlE UFVfREVCVUcoIk5vL0ludmFsaWQgQXVkaW8gRGF0YSBCbG9ja1xuIik7Ci0JCQkJcmV0dXJuOwot CQkJfQotCi0JCQljb250aW51ZTsKLQkJfQotCi0JCW1lbWNweShlZGlkX2N0cmwtPmF1ZGlvX2Rh dGFfYmxvY2sgKyBlZGlkX2N0cmwtPmFkYl9zaXplLAotCQkJYWRiICsgMSwgbGVuKTsKLQkJb2Zm c2V0ID0gKGFkYiAtIGNlYSkgKyAxICsgbGVuOwotCi0JCWVkaWRfY3RybC0+YWRiX3NpemUgKz0g bGVuOwotCQlhZGJfbWF4Kys7Ci0JfSB3aGlsZSAoYWRiKTsKLQlEUFVfRURJRF9ERUJVRygiJXMg LSIsIF9fZnVuY19fKTsKLX0KLQotc3RhdGljIHZvaWQgX2RwdV9lZGlkX2V4dHJhY3Rfc3BlYWtl cl9hbGxvY2F0aW9uX2RhdGEoCi0Jc3RydWN0IGRwdV9lZGlkX2N0cmwgKmVkaWRfY3RybCkKLXsK LQl1OCBsZW47Ci0JY29uc3QgdTggKnNhZGIgPSBOVUxMOwotCXU4ICpjZWEgPSBOVUxMOwotCi0J aWYgKCFlZGlkX2N0cmwpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGVkaWRfY3RybFxuIik7Ci0J CXJldHVybjsKLQl9Ci0JRFBVX0VESURfREVCVUcoIiVzICsiLCBfX2Z1bmNfXyk7Ci0JY2VhID0g ZHB1X2ZpbmRfY2VhX2V4dGVuc2lvbihlZGlkX2N0cmwtPmVkaWQpOwotCWlmICghY2VhKSB7Ci0J CURQVV9ERUJVRygiQ0VBIGV4dGVuc2lvbiBub3QgZm91bmRcbiIpOwotCQlyZXR1cm47Ci0JfQot Ci0Jc2FkYiA9IF9kcHVfZWRpZF9maW5kX2Jsb2NrKGNlYSwgREJDX1NUQVJUX09GRlNFVCwKLQkJ U1BFQUtFUl9BTExPQ0FUSU9OX0RBVEFfQkxPQ0ssICZsZW4pOwotCWlmICgoc2FkYiA9PSBOVUxM KSB8fCAobGVuICE9IE1BWF9TUEtSX0FMTE9DX0RBVEFfQkxPQ0tfU0laRSkpIHsKLQkJRFBVX0RF QlVHKCJOby9JbnZhbGlkIFNwZWFrZXIgQWxsb2NhdGlvbiBEYXRhIEJsb2NrXG4iKTsKLQkJcmV0 dXJuOwotCX0KLQotCW1lbWNweShlZGlkX2N0cmwtPnNwa3JfYWxsb2NfZGF0YV9ibG9jaywgc2Fk YiArIDEsIGxlbik7Ci0JZWRpZF9jdHJsLT5zYWRiX3NpemUgPSBsZW47Ci0KLQlEUFVfRURJRF9E RUJVRygic3BlYWtlciBhbGxvYyBkYXRhIFNQIGJ5dGUgPSAlMDh4ICVzJXMlcyVzJXMlcyVzXG4i LAotCQlzYWRiWzFdLAotCQkoc2FkYlsxXSAmIEJJVCgwKSkgPyAiRkwvRlIsIiA6ICIiLAotCQko c2FkYlsxXSAmIEJJVCgxKSkgPyAiTEZFLCIgOiAiIiwKLQkJKHNhZGJbMV0gJiBCSVQoMikpID8g IkZDLCIgOiAiIiwKLQkJKHNhZGJbMV0gJiBCSVQoMykpID8gIlJML1JSLCIgOiAiIiwKLQkJKHNh ZGJbMV0gJiBCSVQoNCkpID8gIlJDLCIgOiAiIiwKLQkJKHNhZGJbMV0gJiBCSVQoNSkpID8gIkZM Qy9GUkMsIiA6ICIiLAotCQkoc2FkYlsxXSAmIEJJVCg2KSkgPyAiUkxDL1JSQywiIDogIiIpOwot CURQVV9FRElEX0RFQlVHKCIlcyAtIiwgX19mdW5jX18pOwotfQotCi1zdHJ1Y3QgZHB1X2VkaWRf Y3RybCAqZHB1X2VkaWRfaW5pdCh2b2lkKQotewotCXN0cnVjdCBkcHVfZWRpZF9jdHJsICplZGlk X2N0cmwgPSBOVUxMOwotCi0JRFBVX0VESURfREVCVUcoIiVzICtcbiIsIF9fZnVuY19fKTsKLQll ZGlkX2N0cmwgPSBremFsbG9jKHNpemVvZigqZWRpZF9jdHJsKSwgR0ZQX0tFUk5FTCk7Ci0JaWYg KCFlZGlkX2N0cmwpIHsKLQkJRFBVX0VSUk9SKCJlZGlkX2N0cmwgYWxsb2MgZmFpbGVkXG4iKTsK LQkJcmV0dXJuIE5VTEw7Ci0JfQotCW1lbXNldCgoZWRpZF9jdHJsKSwgMCwgc2l6ZW9mKCplZGlk X2N0cmwpKTsKLQlEUFVfRURJRF9ERUJVRygiJXMgLVxuIiwgX19mdW5jX18pOwotCXJldHVybiBl ZGlkX2N0cmw7Ci19Ci0KLXZvaWQgZHB1X2ZyZWVfZWRpZCh2b2lkICoqaW5wdXQpCi17Ci0Jc3Ry dWN0IGRwdV9lZGlkX2N0cmwgKmVkaWRfY3RybCA9IChzdHJ1Y3QgZHB1X2VkaWRfY3RybCAqKSgq aW5wdXQpOwotCi0JRFBVX0VESURfREVCVUcoIiVzICsiLCBfX2Z1bmNfXyk7Ci0Ja2ZyZWUoZWRp ZF9jdHJsLT5lZGlkKTsKLQllZGlkX2N0cmwtPmVkaWQgPSBOVUxMOwotfQotCi12b2lkIGRwdV9l ZGlkX2RlaW5pdCh2b2lkICoqaW5wdXQpCi17Ci0Jc3RydWN0IGRwdV9lZGlkX2N0cmwgKmVkaWRf Y3RybCA9IChzdHJ1Y3QgZHB1X2VkaWRfY3RybCAqKSgqaW5wdXQpOwotCi0JRFBVX0VESURfREVC VUcoIiVzICsiLCBfX2Z1bmNfXyk7Ci0JZHB1X2ZyZWVfZWRpZCgodm9pZCAqKSZlZGlkX2N0cmwp OwotCWtmcmVlKGVkaWRfY3RybCk7Ci0JRFBVX0VESURfREVCVUcoIiVzIC0iLCBfX2Z1bmNfXyk7 Ci19Ci0KLWludCBfZHB1X2VkaWRfdXBkYXRlX21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IsCi0Jdm9pZCAqaW5wdXQpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHB1X2Vk aWRfY3RybCAqZWRpZF9jdHJsID0gKHN0cnVjdCBkcHVfZWRpZF9jdHJsICopKGlucHV0KTsKLQot CURQVV9FRElEX0RFQlVHKCIlcyArIiwgX19mdW5jX18pOwotCWlmIChlZGlkX2N0cmwtPmVkaWQp IHsKLQkJZHJtX21vZGVfY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3RvciwK LQkJCWVkaWRfY3RybC0+ZWRpZCk7Ci0KLQkJcmMgPSBkcm1fYWRkX2VkaWRfbW9kZXMoY29ubmVj dG9yLCBlZGlkX2N0cmwtPmVkaWQpOwotCQlkcHVfZWRpZF9zZXRfbW9kZV9mb3JtYXQoY29ubmVj dG9yLCBlZGlkX2N0cmwpOwotCQlfZHB1X2VkaWRfdXBkYXRlX2RjX21vZGVzKGNvbm5lY3Rvciwg ZWRpZF9jdHJsKTsKLQkJRFBVX0VESURfREVCVUcoIiVzIC0iLCBfX2Z1bmNfXyk7Ci0JCXJldHVy biByYzsKLQl9Ci0KLQlkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoY29u bmVjdG9yLCBOVUxMKTsKLQlEUFVfRURJRF9ERUJVRygiJXMgbnVsbCBlZGlkIC0iLCBfX2Z1bmNf Xyk7Ci0JcmV0dXJuIHJjOwotfQotCi11MzIgZHB1X2dldF9zaW5rX2JwYyh2b2lkICppbnB1dCkK LXsKLQlzdHJ1Y3QgZHB1X2VkaWRfY3RybCAqZWRpZF9jdHJsID0gKHN0cnVjdCBkcHVfZWRpZF9j dHJsICopKGlucHV0KTsKLQlzdHJ1Y3QgZWRpZCAqZWRpZCA9IGVkaWRfY3RybC0+ZWRpZDsKLQot CWlmICghZWRpZCkgewotCQlEUFVfRVJST1IoImludmFsaWQgZWRpZCBpbnB1dFxuIik7Ci0JCXJl dHVybiAwOwotCX0KLQotCWlmICgoZWRpZC0+cmV2aXNpb24gPCAzKSB8fCAhKGVkaWQtPmlucHV0 ICYgRFJNX0VESURfSU5QVVRfRElHSVRBTCkpCi0JCXJldHVybiAwOwotCi0JaWYgKGVkaWQtPnJl dmlzaW9uIDwgNCkgewotCQlpZiAoZWRpZC0+aW5wdXQgJiBEUk1fRURJRF9ESUdJVEFMX1RZUEVf RFZJKQotCQkJcmV0dXJuIDg7Ci0JCWVsc2UKLQkJCXJldHVybiAwOwotCX0KLQotCXN3aXRjaCAo ZWRpZC0+aW5wdXQgJiBEUk1fRURJRF9ESUdJVEFMX0RFUFRIX01BU0spIHsKLQljYXNlIERSTV9F RElEX0RJR0lUQUxfREVQVEhfNjoKLQkJcmV0dXJuIDY7Ci0JY2FzZSBEUk1fRURJRF9ESUdJVEFM X0RFUFRIXzg6Ci0JCXJldHVybiA4OwotCWNhc2UgRFJNX0VESURfRElHSVRBTF9ERVBUSF8xMDoK LQkJcmV0dXJuIDEwOwotCWNhc2UgRFJNX0VESURfRElHSVRBTF9ERVBUSF8xMjoKLQkJcmV0dXJu IDEyOwotCWNhc2UgRFJNX0VESURfRElHSVRBTF9ERVBUSF8xNDoKLQkJcmV0dXJuIDE0OwotCWNh c2UgRFJNX0VESURfRElHSVRBTF9ERVBUSF8xNjoKLQkJcmV0dXJuIDE2OwotCWNhc2UgRFJNX0VE SURfRElHSVRBTF9ERVBUSF9VTkRFRjoKLQlkZWZhdWx0OgotCQlyZXR1cm4gMDsKLQl9Ci19Ci0K LXU4IGRwdV9nZXRfZWRpZF9jaGVja3N1bSh2b2lkICppbnB1dCkKLXsKLQlzdHJ1Y3QgZHB1X2Vk aWRfY3RybCAqZWRpZF9jdHJsID0gKHN0cnVjdCBkcHVfZWRpZF9jdHJsICopKGlucHV0KTsKLQlz dHJ1Y3QgZWRpZCAqZWRpZCA9IE5VTEwsICpsYXN0X2Jsb2NrID0gTlVMTDsKLQl1OCAqcmF3X2Vk aWQgPSBOVUxMOwotCi0JaWYgKCFlZGlkX2N0cmwgfHwgIWVkaWRfY3RybC0+ZWRpZCkgewotCQlE UFVfRVJST1IoImludmFsaWQgZWRpZCBpbnB1dFxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCWVk aWQgPSBlZGlkX2N0cmwtPmVkaWQ7Ci0KLQlyYXdfZWRpZCA9ICh1OCAqKWVkaWQ7Ci0JcmF3X2Vk aWQgKz0gKGVkaWQtPmV4dGVuc2lvbnMgKiBFRElEX0xFTkdUSCk7Ci0JbGFzdF9ibG9jayA9IChz dHJ1Y3QgZWRpZCAqKXJhd19lZGlkOwotCi0JaWYgKGxhc3RfYmxvY2spCi0JCXJldHVybiBsYXN0 X2Jsb2NrLT5jaGVja3N1bTsKLQotCURQVV9FUlJPUigiSW52YWxpZCBibG9jaywgbm8gY2hlY2tz dW1cbiIpOwotCXJldHVybiAwOwotfQotCi1ib29sIGRwdV9kZXRlY3RfaGRtaV9tb25pdG9yKHZv aWQgKmlucHV0KQotewotCXN0cnVjdCBkcHVfZWRpZF9jdHJsICplZGlkX2N0cmwgPSAoc3RydWN0 IGRwdV9lZGlkX2N0cmwgKikoaW5wdXQpOwotCi0JcmV0dXJuIGRybV9kZXRlY3RfaGRtaV9tb25p dG9yKGVkaWRfY3RybC0+ZWRpZCk7Ci19Ci0KLXZvaWQgZHB1X2dldF9lZGlkKHN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IsCi0JCQkJICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIs IHZvaWQgKippbnB1dCkKLXsKLQlzdHJ1Y3QgZHB1X2VkaWRfY3RybCAqZWRpZF9jdHJsID0gKHN0 cnVjdCBkcHVfZWRpZF9jdHJsICopKCppbnB1dCk7Ci0KLQllZGlkX2N0cmwtPmVkaWQgPSBkcm1f Z2V0X2VkaWQoY29ubmVjdG9yLCBhZGFwdGVyKTsKLQlEUFVfRURJRF9ERUJVRygiJXMgK1xuIiwg X19mdW5jX18pOwotCi0JaWYgKCFlZGlkX2N0cmwtPmVkaWQpCi0JCURQVV9FUlJPUigiRURJRCBy ZWFkIGZhaWxlZFxuIik7Ci0KLQlpZiAoZWRpZF9jdHJsLT5lZGlkKSB7Ci0JCWRwdV9lZGlkX2V4 dHJhY3RfdmVuZG9yX2lkKGVkaWRfY3RybCk7Ci0JCV9kcHVfZWRpZF9leHRyYWN0X2F1ZGlvX2Rh dGFfYmxvY2tzKGVkaWRfY3RybCk7Ci0JCV9kcHVfZWRpZF9leHRyYWN0X3NwZWFrZXJfYWxsb2Nh dGlvbl9kYXRhKGVkaWRfY3RybCk7Ci0JfQotCURQVV9FRElEX0RFQlVHKCIlcyAtXG4iLCBfX2Z1 bmNfXyk7Ci19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfZWRpZF9wYXJz ZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHB1X2VkaWRfcGFyc2VyLmgKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IGMwNTFiMThiYjgxMi4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZl cnMvZ3B1L2RybS9tc20vZHB1X2VkaWRfcGFyc2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjYg KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxNy0yMDE4LCBUaGUgTGludXggRm91bmRh dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIg YW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqLwotCi0jaWZuZGVm IF9EUFVfRURJRF9QQVJTRVJfSF8KLSNkZWZpbmUgX0RQVV9FRElEX1BBUlNFUl9IXwotCi0jaW5j bHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRl IDxsaW51eC9kZWJ1Z2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Ci0jaW5jbHVk ZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8ZHJtL2RybVAuaD4KLSNpbmNsdWRlIDxkcm0vZHJt X2NydGMuaD4KLSNpbmNsdWRlIDxkcm0vZHJtX2VkaWQuaD4KLQotCi0jZGVmaW5lIE1BWF9OVU1C RVJfQURCIDUKLSNkZWZpbmUgTUFYX0FVRElPX0RBVEFfQkxPQ0tfU0laRSAzMAotI2RlZmluZSBN QVhfU1BLUl9BTExPQ19EQVRBX0JMT0NLX1NJWkUgMwotI2RlZmluZSBFRElEX1ZFTkRPUl9JRF9T SVpFICAgICA0Ci0KLSNkZWZpbmUgRFBVX0NFQV9FWFQgICAgMHgwMgotI2RlZmluZSBEUFVfRVhU RU5ERURfVEFHIDB4MDcKLQotI2RlZmluZSBEUFVfRFJNX01PREVfRkxBR19GTVRfTUFTSyAoMHgz IDw8IDIwKQotCi1lbnVtIGV4dGVuZGVkX2RhdGFfYmxvY2tfdHlwZXMgewotCVZJREVPX0NBUEFC SUxJVFlfREFUQV9CTE9DSyA9IDB4MCwKLQlWRU5ET1JfU1BFQ0lGSUNfVklERU9fREFUQV9CTE9D SyA9IDB4MDEsCi0JSERNSV9WSURFT19EQVRBX0JMT0NLID0gMHgwNCwKLQlIRFJfU1RBVElDX01F VEFEQVRBX0RBVEFfQkxPQ0sgPSAweDA2LAotCVk0MjBfVklERU9fREFUQV9CTE9DSyA9IDB4MEUs Ci0JVklERU9fRk9STUFUX1BSRUZFUkVOQ0VfREFUQV9CTE9DSyA9IDB4MEQsCi0JWTQyMF9DQVBB QklMSVRZX01BUF9EQVRBX0JMT0NLID0gMHgwRiwKLQlWRU5ET1JfU1BFQ0lGSUNfQVVESU9fREFU QV9CTE9DSyA9IDB4MTEsCi0JSU5GT0ZSQU1FX0RBVEFfQkxPQ0sgPSAweDIwLAotfTsKLQotI2lm ZGVmIERQVV9FRElEX0RFQlVHX0VOQUJMRQotI2RlZmluZSBEUFVfRURJRF9ERUJVRyhmbXQsIGFy Z3MuLi4pICAgRFBVX0VSUk9SKGZtdCwgIyNhcmdzKQotI2Vsc2UKLSNkZWZpbmUgRFBVX0VESURf REVCVUcoZm10LCBhcmdzLi4uKSAgIERQVV9ERUJVRyhmbXQsICMjYXJncykKLSNlbmRpZgotCi0v KgotICogc3RydWN0IGhkbWlfZWRpZF9oZHJfZGF0YSAtIEhEUiBTdGF0aWMgTWV0YWRhdGEKLSAq IEBlb3RmOiBFbGVjdHJvLU9wdGljYWwgVHJhbnNmZXIgRnVuY3Rpb24KLSAqIEBtZXRhZGF0YV90 eXBlX29uZTogU3RhdGljIE1ldGFkYXRhIFR5cGUgMSBzdXBwb3J0Ci0gKiBAbWF4X2x1bWluYW5j ZTogRGVzaXJlZCBDb250ZW50IE1heGltdW0gTHVtaW5hbmNlCi0gKiBAYXZnX2x1bWluYW5jZTog RGVzaXJlZCBDb250ZW50IEZyYW1lLWF2ZXJhZ2UgTHVtaW5hbmNlCi0gKiBAbWluX2x1bWluYW5j ZTogRGVzaXJlZCBDb250ZW50IE1pbmltdW0gTHVtaW5hbmNlCi0gKi8KLXN0cnVjdCBkcHVfZWRp ZF9oZHJfZGF0YSB7Ci0JdTMyIGVvdGY7Ci0JYm9vbCBtZXRhZGF0YV90eXBlX29uZTsKLQl1MzIg bWF4X2x1bWluYW5jZTsKLQl1MzIgYXZnX2x1bWluYW5jZTsKLQl1MzIgbWluX2x1bWluYW5jZTsK LX07Ci0KLXN0cnVjdCBkcHVfZWRpZF9zaW5rX2NhcHMgewotCXUzMiBtYXhfcGNsa19pbl9oejsK LQlib29sIHNjZGNfcHJlc2VudDsKLQlib29sIHNjcmFtYmxlX3N1cHBvcnQ7IC8qIHNjcmFtYmxl IHN1cHBvcnQgZm9yIGxlc3MgdGhhbiAzNDBNY3NjICovCi0JYm9vbCByZWFkX3JlcV9zdXBwb3J0 OwotCWJvb2wgb3NkX2Rpc3Bhcml0eTsKLQlib29sIGR1YWxfdmlld19zdXBwb3J0OwotCWJvb2wg aW5kX3ZpZXdfc3VwcG9ydDsKLX07Ci0KLXN0cnVjdCBkcHVfZWRpZF9jdHJsIHsKLQlzdHJ1Y3Qg ZWRpZCAqZWRpZDsKLQl1OCBwdF9zY2FuX2luZm87Ci0JdTggaXRfc2Nhbl9pbmZvOwotCXU4IGNl X3NjYW5faW5mbzsKLQl1OCBhdWRpb19kYXRhX2Jsb2NrW01BWF9OVU1CRVJfQURCICogTUFYX0FV RElPX0RBVEFfQkxPQ0tfU0laRV07Ci0JaW50IGFkYl9zaXplOwotCXU4IHNwa3JfYWxsb2NfZGF0 YV9ibG9ja1tNQVhfU1BLUl9BTExPQ19EQVRBX0JMT0NLX1NJWkVdOwotCWludCBzYWRiX3NpemU7 Ci0JYm9vbCBoZHJfc3VwcG9ydGVkOwotCWNoYXIgdmVuZG9yX2lkW0VESURfVkVORE9SX0lEX1NJ WkVdOwotCXN0cnVjdCBkcHVfZWRpZF9zaW5rX2NhcHMgc2lua19jYXBzOwotCXN0cnVjdCBkcHVf ZWRpZF9oZHJfZGF0YSBoZHJfZGF0YTsKLX07Ci0KLS8qKgotICogZHB1X2VkaWRfaW5pdCgpIC0g aW5pdCBlZGlkIHN0cnVjdHVyZS4KLSAqIEBlZGlkX2N0cmw6ICAgICBIYW5kbGUgdG8gdGhlIGVk aWRfY3RybCBzdHJ1Y3R1cmUuCi0gKiBSZXR1cm46IGhhbmRsZSB0byBkcHVfZWRpZF9jdHJsIGZv ciB0aGUgY2xpZW50LgotICovCi1zdHJ1Y3QgZHB1X2VkaWRfY3RybCAqZHB1X2VkaWRfaW5pdCh2 b2lkKTsKLQotLyoqCi0gKiBkcHVfZWRpZF9kZWluaXQoKSAtIGRlaW5pdCBlZGlkIHN0cnVjdHVy ZS4KLSAqIEBlZGlkX2N0cmw6ICAgICBIYW5kbGUgdG8gdGhlIGVkaWRfY3RybCBzdHJ1Y3R1cmUu Ci0gKgotICogUmV0dXJuOiB2b2lkLgotICovCi12b2lkIGRwdV9lZGlkX2RlaW5pdCh2b2lkICoq ZWRpZF9jdHJsKTsKLQotLyoqCi0gKiBkcHVfZ2V0X2VkaWQoKSAtIGdldCBlZGlkIGluZm8uCi0g KiBAY29ubmVjdG9yOiAgIEhhbmRsZSB0byB0aGUgZHJtX2Nvbm5lY3Rvci4KLSAqIEBhZGFwdGVy OiAgICAgaGFuZGxlIHRvIGkyYyBhZGFwdGVyIGZvciBEREMgcmVhZAotICogQGVkaWRfY3RybDog ICBIYW5kbGUgdG8gdGhlIGVkaWRfY3RybCBzdHJ1Y3R1cmUuCi0gKgotICogUmV0dXJuOiB2b2lk LgotICovCi12b2lkIGRwdV9nZXRfZWRpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y LAotc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAotdm9pZCAqKmVkaWRfY3RybCk7Ci0KLS8q KgotICogZHB1X2ZyZWVfZWRpZCgpIC0gZnJlZSBlZGlkIHN0cnVjdHVyZS4KLSAqIEBlZGlkX2N0 cmw6ICAgICBIYW5kbGUgdG8gdGhlIGVkaWRfY3RybCBzdHJ1Y3R1cmUuCi0gKgotICogUmV0dXJu OiB2b2lkLgotICovCi12b2lkIGRwdV9mcmVlX2VkaWQodm9pZCAqKmVkaWRfY3RybCk7Ci0KLS8q KgotICogZHB1X2RldGVjdF9oZG1pX21vbml0b3IoKSAtIGRldGVjdCBIRE1JIG1vZGUuCi0gKiBA ZWRpZF9jdHJsOiAgICAgSGFuZGxlIHRvIHRoZSBlZGlkX2N0cmwgc3RydWN0dXJlLgotICoKLSAq IFJldHVybjogZXJyb3IgY29kZS4KLSAqLwotYm9vbCBkcHVfZGV0ZWN0X2hkbWlfbW9uaXRvcih2 b2lkICplZGlkX2N0cmwpOwotCi0vKioKLSAqIGRwdV9nZXRfc2lua19icGMoKSAtIHJldHVybiB0 aGUgYnBjIG9mIHNpbmsgZGV2aWNlLgotICogQGVkaWRfY3RybDogICAgIEhhbmRsZSB0byB0aGUg ZWRpZF9jdHJsIHN0cnVjdHVyZS4KLSAqCi0gKiBSZXR1cm46IGJwYyBzdXBwb3J0ZWQgYnkgdGhl IHNpbmsuCi0gKi8KLXUzMiBkcHVfZ2V0X3NpbmtfYnBjKHZvaWQgKmVkaWRfY3RybCk7Ci0KLS8q KgotICogZHB1X2dldF9lZGlkX2NoZWNrc3VtKCkgLSByZXR1cm4gdGhlIGNoZWNrc3VtIG9mIGxh c3QgYmxvY2sgb2YgRURJRC4KLSAqIEBpbnB1dDogICAgIEhhbmRsZSB0byB0aGUgZWRpZF9jdHJs IHN0cnVjdHVyZS4KLSAqCi0gKiBSZXR1cm46IGNoZWNrc3VtIG9mIHRoZSBsYXN0IEVESUQgYmxv Y2suCi0gKi8KLXU4IGRwdV9nZXRfZWRpZF9jaGVja3N1bSh2b2lkICppbnB1dCk7Ci0KLS8qKgot ICogX2RwdV9lZGlkX3VwZGF0ZV9tb2RlcygpIC0gcG9wdWxhdGUgRURJRCBtb2Rlcy4KLSAqIEBl ZGlkX2N0cmw6ICAgICBIYW5kbGUgdG8gdGhlIGVkaWRfY3RybCBzdHJ1Y3R1cmUuCi0gKgotICog UmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1pbnQgX2RwdV9lZGlkX3VwZGF0ZV9tb2RlcyhzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQkJCQkJCXZvaWQgKmVkaWRfY3RybCk7Ci0K LSNlbmRpZiAvKiBfRFBVX0VESURfUEFSU0VSX0hfICovCi0KLS0gCjIuMTYuMS4yOTEuZzQ0Mzdm M2YxMzItZ29vZwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KRnJlZWRyZW5vIG1haWxpbmcgbGlzdApGcmVlZHJlbm9AbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZnJlZWRyZW5v Cg==