From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rajesh Yadav Subject: [DPU PATCH v3 2/2] drm/msm: Remove RSC support from DPU driver Date: Wed, 11 Apr 2018 20:18:47 +0530 Message-ID: <1523458127-14304-3-git-send-email-ryadav@codeaurora.org> References: <1523458127-14304-1-git-send-email-ryadav@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1523458127-14304-1-git-send-email-ryadav-sgV2jX0FEOL9JmXXK+q4OQ@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-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, Rajesh Yadav , hoegsberg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org TVNNIERpc3BsYXkgY29udHJvbGxlciBpbmNsdWRlcyBSU0MgKFJlc291cmNlIENvb3JkaW5hdG9y KQpIVyBibG9jayB3aGljaCBjYW4gY29udHJvbCBEUFUgcG93ZXIgcmVzb3VyY2VzIHdpdGhvdXQK RFBVIGRyaXZlciBpbnRlcnZlbnRpb24uClJlbW92aW5nIERQVSBSU0MgZGV2aWNlL2RyaXZlciBz dXBwb3J0IHRpbGwgdGhlIFJTQwpkZXBlbmRlbmNpZXMgbWFrZSB0aGVpciB3YXkgdXBzdHJlYW0u CgpUaGUgcG93ZXIgcmVzb3VyY2VzIGFyZSBjb250cm9sbGVkIGJ5IERQVSBkcml2ZXIgaW4KYWJz ZW5jZSBvZiBSU0MgSFcgYmxvY2suCgpTaWduZWQtb2ZmLWJ5OiBSYWplc2ggWWFkYXYgPHJ5YWRh dkBjb2RlYXVyb3JhLm9yZz4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf Y29yZV9wZXJmLmMgICAgfCAgMTMwICstCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfY29yZV9wZXJmLmggICAgfCAgICA2IC0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9jcnRjLmMgICAgICAgICB8ICAgMTQgLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2NydGMuaCAgICAgICAgIHwgICAgOSArLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2VuY29kZXIuYyAgICAgIHwgIDI0MiArLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5oICAgICAgfCAgICA3IC0KIGRyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXMuaCB8ICAgIDEgLQogZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2h3X3RvcC5jICAgICAgIHwgICAyMCArLQogZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3RvcC5oICAgICAgIHwgICAgMyAtCiBkcml2ZXJzL2dw dS9kcm0vbXNtL2RwdV9kYmcuYyAgICAgICAgICAgICAgICAgICAgfCAgIDI3IC0KIGRyaXZlcnMv Z3B1L2RybS9tc20vZHB1X2RiZy5oICAgICAgICAgICAgICAgICAgICB8ICAgMTAgLQogZHJpdmVy cy9ncHUvZHJtL21zbS9kcHVfcG93ZXJfaGFuZGxlLmMgICAgICAgICAgIHwgICA3MyArLQogZHJp dmVycy9ncHUvZHJtL21zbS9kcHVfcG93ZXJfaGFuZGxlLmggICAgICAgICAgIHwgICAgNCAtCiBk cml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9yc2MuYyAgICAgICAgICAgICAgICAgICAgfCAxMzY3IC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZHB1X3JzY19ody5jICAg ICAgICAgICAgICAgICB8ICA4MTggLS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9k cHVfcnNjX3ByaXYuaCAgICAgICAgICAgICAgIHwgIDE5MSAtLS0KIGluY2x1ZGUvbGludXgvZHB1 X3JzYy5oICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzMDIgLS0tLS0KIDE3IGZpbGVzIGNo YW5nZWQsIDQyIGluc2VydGlvbnMoKyksIDMxODIgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfcnNjLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9yc2NfaHcuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9tc20vZHB1X3JzY19wcml2LmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBpbmNsdWRl L2xpbnV4L2RwdV9yc2MuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9jb3JlX3BlcmYuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9j b3JlX3BlcmYuYwppbmRleCAzNmE0Nzk1Li45ODFmNzdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9wZXJmLmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2NvcmVfcGVyZi5jCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVk ZSA8bGludXgvc29ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4 L2JpdG1hcC5oPgotI2luY2x1ZGUgPGxpbnV4L2RwdV9yc2MuaD4KIAogI2luY2x1ZGUgIm1zbV9w cm9wLmgiCiAKQEAgLTQyLDIzICs0MSw2IEBAIGVudW0gZHB1X3BlcmZfbW9kZSB7CiAJRFBVX1BF UkZfTU9ERV9NQVgKIH07CiAKLS8qKgotICogZW51bSBkcHVfcGVyZl92b3RlX21vZGU6IHBlcmYg dm90ZSBtb2RlLgotICogQEFQUFNfUlNDX01PREU6CUl0IGNvbWJpbmVzIHRoZSB2b3RlIGZvciBh bGwgZGlzcGxheXMgYW5kIHZvdGVzIGl0Ci0gKiAgICAgICAgICAgICAgICAgICAgICB0aHJvdWdo IEFQUFMgcnNjLiBUaGlzIGlzIGRlZmF1bHQgbW9kZSB3aGVuIGRpc3BsYXkKLSAqICAgICAgICAg ICAgICAgICAgICAgIHJzYyBpcyBub3QgYXZhaWxhYmxlLgotICogQERJU1BfUlNDX01PREU6CUl0 IGNvbWJpbmVzIHRoZSB2b3RlIGZvciBhbGwgZGlzcGxheXMgYW5kIHZvdGVzIGl0Ci0gKiAgICAg ICAgICAgICAgICAgICAgICB0aHJvdWdoIGRpc3BsYXkgcnNjLiBUaGlzIGlzIGRlZmF1bHQgY29u ZmlndXJhdGlvbgotICogICAgICAgICAgICAgICAgICAgICAgd2hlbiBkaXNwbGF5IHJzYyBpcyBh dmFpbGFibGUuCi0gKiBARElTUF9SU0NfUFJJTUFSWV9NT0RFOglUaGUgcHJpbWFyeSBkaXNwbGF5 IHZvdGVzIHRocm91Z2ggZGlzcGxheSByc2MKLSAqICAgICAgICAgICAgICAgICAgICAgIHdoaWxl IGFsbCBvdGhlciBkaXNwbGF5cyB2b3RlcyB0aHJvdWdoIGFwcHMgcnNjLgotICovCi1lbnVtIGRw dV9wZXJmX3ZvdGVfbW9kZSB7Ci0JQVBQU19SU0NfTU9ERSwKLQlESVNQX1JTQ19NT0RFLAotCURJ U1BfUlNDX1BSSU1BUllfTU9ERSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgZHB1X2ttcyAqX2RwdV9j cnRjX2dldF9rbXMoc3RydWN0IGRybV9jcnRjICpjcnRjKQogewogCXN0cnVjdCBtc21fZHJtX3By aXZhdGUgKnByaXY7CkBAIC0yNjYsMzggKzI0OCwxMiBAQCBpbnQgZHB1X2NvcmVfcGVyZl9jcnRj X2NoZWNrKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlu bGluZSBib29sIF9pc19jcnRjX2NsaWVudF90eXBlX21hdGNoZXMoc3RydWN0IGRybV9jcnRjICp0 bXBfY3J0YywKLQllbnVtIGRwdV9jcnRjX2NsaWVudF90eXBlIGN1cnJfY2xpZW50X3R5cGUsCi0J c3RydWN0IGRwdV9jb3JlX3BlcmYgKnBlcmYpCi17Ci0JaWYgKCF0bXBfY3J0YykKLQkJcmV0dXJu IGZhbHNlOwotCWVsc2UgaWYgKHBlcmYtPmJ3X3ZvdGVfbW9kZSA9PSBESVNQX1JTQ19QUklNQVJZ X01PREUgJiYKLQkJCQkJCQlwZXJmLT5kcHVfcnNjX2F2YWlsYWJsZSkKLQkJcmV0dXJuIGN1cnJf Y2xpZW50X3R5cGUgPT0gZHB1X2NydGNfZ2V0X2NsaWVudF90eXBlKHRtcF9jcnRjKTsKLQllbHNl Ci0JCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW5saW5lIGVudW0gZHB1X2NydGNfY2xpZW50 X3R5cGUgX2dldF9kcHVfY2xpZW50X3R5cGUoCi0JZW51bSBkcHVfY3J0Y19jbGllbnRfdHlwZSBj dXJyX2NsaWVudF90eXBlLAotCXN0cnVjdCBkcHVfY29yZV9wZXJmICpwZXJmKQotewotCWlmIChw ZXJmLT5id192b3RlX21vZGUgPT0gRElTUF9SU0NfUFJJTUFSWV9NT0RFICYmCi0JCQkJCQlwZXJm LT5kcHVfcnNjX2F2YWlsYWJsZSkKLQkJcmV0dXJuIGN1cnJfY2xpZW50X3R5cGU7Ci0JZWxzZSBp ZiAocGVyZi0+Yndfdm90ZV9tb2RlICE9IEFQUFNfUlNDX01PREUgJiYgcGVyZi0+ZHB1X3JzY19h dmFpbGFibGUpCi0JCXJldHVybiBSVF9SU0NfQ0xJRU5UOwotCWVsc2UKLQkJcmV0dXJuIFJUX0NM SUVOVDsKLX0KLQogc3RhdGljIHZvaWQgX2RwdV9jb3JlX3BlcmZfY3J0Y191cGRhdGVfYnVzKHN0 cnVjdCBkcHVfa21zICprbXMsCiAJCXN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTMyIGJ1c19pZCkK IHsKIAl1NjQgYndfc3VtX29mX2ludGZzID0gMCwgYnVzX2FiX3F1b3RhLCBidXNfaWJfcXVvdGE7 CiAJc3RydWN0IGRwdV9jb3JlX3BlcmZfcGFyYW1zIHBlcmYgPSB7IHsgMCB9IH07Ci0JZW51bSBk cHVfY3J0Y19jbGllbnRfdHlwZSBjbGllbnRfdm90ZSwgY3Vycl9jbGllbnRfdHlwZQorCWVudW0g ZHB1X2NydGNfY2xpZW50X3R5cGUgY3Vycl9jbGllbnRfdHlwZQogCQkJCQk9IGRwdV9jcnRjX2dl dF9jbGllbnRfdHlwZShjcnRjKTsKIAlzdHJ1Y3QgZHJtX2NydGMgKnRtcF9jcnRjOwogCXN0cnVj dCBkcHVfY3J0Y19zdGF0ZSAqZHB1X2NzdGF0ZTsKQEAgLTMwNSw4ICsyNjEsOCBAQCBzdGF0aWMg dm9pZCBfZHB1X2NvcmVfcGVyZl9jcnRjX3VwZGF0ZV9idXMoc3RydWN0IGRwdV9rbXMgKmttcywK IAogCWRybV9mb3JfZWFjaF9jcnRjKHRtcF9jcnRjLCBjcnRjLT5kZXYpIHsKIAkJaWYgKF9kcHVf Y29yZV9wZXJmX2NydGNfaXNfcG93ZXJfb24odG1wX2NydGMpICYmCi0JCSAgICBfaXNfY3J0Y19j bGllbnRfdHlwZV9tYXRjaGVzKHRtcF9jcnRjLCBjdXJyX2NsaWVudF90eXBlLAotCQkJCQkJCQkm a21zLT5wZXJmKSkgeworCQkJY3Vycl9jbGllbnRfdHlwZSA9PQorCQkJCWRwdV9jcnRjX2dldF9j bGllbnRfdHlwZSh0bXBfY3J0YykpIHsKIAkJCWRwdV9jc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0 ZSh0bXBfY3J0Yy0+c3RhdGUpOwogCiAJCQlwZXJmLm1heF9wZXJfcGlwZV9pYltidXNfaWRdID0K QEAgLTMyOSw4ICsyODUsNyBAQCBzdGF0aWMgdm9pZCBfZHB1X2NvcmVfcGVyZl9jcnRjX3VwZGF0 ZV9idXMoc3RydWN0IGRwdV9rbXMgKmttcywKIAkJYnVzX2liX3F1b3RhID0ga21zLT5wZXJmLmZp eF9jb3JlX2liX3ZvdGU7CiAJfQogCi0JY2xpZW50X3ZvdGUgPSBfZ2V0X2RwdV9jbGllbnRfdHlw ZShjdXJyX2NsaWVudF90eXBlLCAma21zLT5wZXJmKTsKLQlzd2l0Y2ggKGNsaWVudF92b3RlKSB7 CisJc3dpdGNoIChjdXJyX2NsaWVudF90eXBlKSB7CiAJY2FzZSBOUlRfQ0xJRU5UOgogCQlkcHVf cG93ZXJfZGF0YV9idXNfc2V0X3F1b3RhKCZwcml2LT5waGFuZGxlLCBrbXMtPmNvcmVfY2xpZW50 LAogCQkJCURQVV9QT1dFUl9IQU5ETEVfREFUQV9CVVNfQ0xJRU5UX05SVCwKQEAgLTM0Nyw0NiAr MzAyLDEwIEBAIHN0YXRpYyB2b2lkIF9kcHVfY29yZV9wZXJmX2NydGNfdXBkYXRlX2J1cyhzdHJ1 Y3QgZHB1X2ttcyAqa21zLAogCQkJCWJ1c19pZCwgYnVzX2FiX3F1b3RhLCBidXNfaWJfcXVvdGEp OwogCQlicmVhazsKIAotCWNhc2UgUlRfUlNDX0NMSUVOVDoKLQkJZHB1X2NzdGF0ZSA9IHRvX2Rw dV9jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKLQkJZHB1X3JzY19jbGllbnRfdm90ZShkcHVfY3N0 YXRlLT5yc2NfY2xpZW50LAotCQkJCWJ1c19pZCwgYnVzX2FiX3F1b3RhLCBidXNfaWJfcXVvdGEp OwotCQlEUFVfREVCVUcoImNsaWVudDolcyBidXNfaWQ9JWQgYWI9JWxsdSBpYj0lbGx1XG4iLCAi cnRfcnNjIiwKLQkJCQlidXNfaWQsIGJ1c19hYl9xdW90YSwgYnVzX2liX3F1b3RhKTsKLQkJYnJl YWs7Ci0KIAlkZWZhdWx0OgogCQlEUFVfRVJST1IoImludmFsaWQgY2xpZW50IHR5cGU6JWRcbiIs IGN1cnJfY2xpZW50X3R5cGUpOwogCQlicmVhazsKIAl9Ci0KLQlpZiAoa21zLT5wZXJmLmJ3X3Zv dGVfbW9kZV91cGRhdGVkKSB7Ci0JCXN3aXRjaCAoa21zLT5wZXJmLmJ3X3ZvdGVfbW9kZSkgewot CQljYXNlIERJU1BfUlNDX01PREU6Ci0JCQlkcHVfcG93ZXJfZGF0YV9idXNfc2V0X3F1b3RhKCZw cml2LT5waGFuZGxlLAotCQkJCWttcy0+Y29yZV9jbGllbnQsCi0JCQkJRFBVX1BPV0VSX0hBTkRM RV9EQVRBX0JVU19DTElFTlRfTlJULAotCQkJCWJ1c19pZCwgMCwgMCk7Ci0JCQlkcHVfcG93ZXJf ZGF0YV9idXNfc2V0X3F1b3RhKCZwcml2LT5waGFuZGxlLAotCQkJCWttcy0+Y29yZV9jbGllbnQs Ci0JCQkJRFBVX1BPV0VSX0hBTkRMRV9EQVRBX0JVU19DTElFTlRfUlQsCi0JCQkJYnVzX2lkLCAw LCAwKTsKLQkJCWttcy0+cGVyZi5id192b3RlX21vZGVfdXBkYXRlZCA9IGZhbHNlOwotCQkJYnJl YWs7Ci0KLQkJY2FzZSBBUFBTX1JTQ19NT0RFOgotCQkJZHB1X2NzdGF0ZSA9IHRvX2RwdV9jcnRj X3N0YXRlKGNydGMtPnN0YXRlKTsKLQkJCWlmIChkcHVfY3N0YXRlLT5yc2NfY2xpZW50KSB7Ci0J CQkJZHB1X3JzY19jbGllbnRfdm90ZShkcHVfY3N0YXRlLT5yc2NfY2xpZW50LAotCQkJCQkJCQli dXNfaWQsIDAsIDApOwotCQkJCWttcy0+cGVyZi5id192b3RlX21vZGVfdXBkYXRlZCA9IGZhbHNl OwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JfQogfQog CiAvKioKQEAgLTQxOSw5ICszMzgsOCBAQCB2b2lkIGRwdV9jb3JlX3BlcmZfY3J0Y19yZWxlYXNl X2J3KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAlkcHVfY3J0YyA9IHRvX2RwdV9jcnRjKGNydGMp OwogCWRwdV9jc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7CiAKLQkvKiBv bmx5IGRvIHRoaXMgZm9yIGNvbW1hbmQgbW9kZSBydCBjbGllbnQgKG5vbi1yc2MgY2xpZW50KSAq LwotCWlmICgoZHB1X2NydGNfZ2V0X2ludGZfbW9kZShjcnRjKSAhPSBJTlRGX01PREVfQ01EKSAm JgotCQkoZHB1X2NydGNfZ2V0X2NsaWVudF90eXBlKGNydGMpICE9IFJUX1JTQ19DTElFTlQpKQor CS8qIG9ubHkgZG8gdGhpcyBmb3IgY29tbWFuZCBtb2RlIHJ0IGNsaWVudCAqLworCWlmIChkcHVf Y3J0Y19nZXRfaW50Zl9tb2RlKGNydGMpICE9IElOVEZfTU9ERV9DTUQpCiAJCXJldHVybjsKIAog CS8qCkBAIC00OTQsMTAgKzQxMiw2IEBAIHZvaWQgZHB1X2NvcmVfcGVyZl9jcnRjX3VwZGF0ZShz dHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJfQogCXByaXYgPSBrbXMtPmRldi0+ZGV2X3ByaXZhdGU7 CiAKLQkvKiB3YWtlIHZvdGUgdXBkYXRlIGlzIG5vdCByZXF1aXJlZCB3aXRoIGRpc3BsYXkgcnNj ICovCi0JaWYgKGttcy0+cGVyZi5id192b3RlX21vZGUgPT0gRElTUF9SU0NfTU9ERSAmJiBzdG9w X3JlcSkKLQkJcmV0dXJuOwotCiAJZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKIAlkcHVf Y3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOwogCkBAIC01MzMsMjggKzQ0 Nyw2IEBAIHZvaWQgZHB1X2NvcmVfcGVyZl9jcnRjX3VwZGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNy dGMsCiAJCQkJCQluZXctPm1heF9wZXJfcGlwZV9pYltpXTsKIAkJCQl1cGRhdGVfYnVzIHw9IEJJ VChpKTsKIAkJCX0KLQotCQkJLyogZGlzcGxheSByc2Mgb3ZlcnJpZGUgZHVyaW5nIHNvbHZlciBt b2RlICovCi0JCQlpZiAoa21zLT5wZXJmLmJ3X3ZvdGVfbW9kZSA9PSBESVNQX1JTQ19NT0RFICYm Ci0JCQkJZ2V0X2RwdV9yc2NfY3VycmVudF9zdGF0ZShEUFVfUlNDX0lOREVYKSA9PQotCQkJCQkJ RFBVX1JTQ19DTURfU1RBVEUpIHsKLQkJCQkvKiB1cGRhdGUgbmV3IGJhbmR3aWR0aCBpbiBhbGwg Y2FzZXMgKi8KLQkJCQlpZiAocGFyYW1zX2NoYW5nZWQgJiYgKChuZXctPmJ3X2N0bFtpXSAhPQot CQkJCQkJb2xkLT5id19jdGxbaV0pIHx8Ci0JCQkJICAgICAgKG5ldy0+bWF4X3Blcl9waXBlX2li W2ldICE9Ci0JCQkJCQlvbGQtPm1heF9wZXJfcGlwZV9pYltpXSkpKSB7Ci0JCQkJCW9sZC0+Yndf Y3RsW2ldID0gbmV3LT5id19jdGxbaV07Ci0JCQkJCW9sZC0+bWF4X3Blcl9waXBlX2liW2ldID0K LQkJCQkJCQluZXctPm1heF9wZXJfcGlwZV9pYltpXTsKLQkJCQkJdXBkYXRlX2J1cyB8PSBCSVQo aSk7Ci0JCQkJLyoKLQkJCQkgKiByZWR1Y2UgYncgdm90ZSBpcyBub3QgcmVxdWlyZWQgaW4gc29s dmVyCi0JCQkJICogbW9kZQotCQkJCSAqLwotCQkJCX0gZWxzZSBpZiAoIXBhcmFtc19jaGFuZ2Vk KSB7Ci0JCQkJCXVwZGF0ZV9idXMgJj0gfkJJVChpKTsKLQkJCQl9Ci0JCQl9CiAJCX0KIAogCQlp ZiAoKHBhcmFtc19jaGFuZ2VkICYmCkBAIC03MzMsMTAgKzYyNSw2IEBAIGludCBkcHVfY29yZV9w ZXJmX2RlYnVnZnNfaW5pdChzdHJ1Y3QgZHB1X2NvcmVfcGVyZiAqcGVyZiwKIAkJCSh1MzIgKikm Y2F0YWxvZy0+cGVyZi5taW5fZHJhbV9pYik7CiAJZGVidWdmc19jcmVhdGVfZmlsZSgicGVyZl9t b2RlIiwgMDYwMCwgcGVyZi0+ZGVidWdmc19yb290LAogCQkJKHUzMiAqKXBlcmYsICZkcHVfY29y ZV9wZXJmX21vZGVfZm9wcyk7Ci0JZGVidWdmc19jcmVhdGVfdTMyKCJid192b3RlX21vZGUiLCAw NjAwLCBwZXJmLT5kZWJ1Z2ZzX3Jvb3QsCi0JCQkmcGVyZi0+Yndfdm90ZV9tb2RlKTsKLQlkZWJ1 Z2ZzX2NyZWF0ZV9ib29sKCJid192b3RlX21vZGVfdXBkYXRlZCIsIDA2MDAsIHBlcmYtPmRlYnVn ZnNfcm9vdCwKLQkJCSZwZXJmLT5id192b3RlX21vZGVfdXBkYXRlZCk7CiAJZGVidWdmc19jcmVh dGVfdTY0KCJmaXhfY29yZV9jbGtfcmF0ZSIsIDA2MDAsIHBlcmYtPmRlYnVnZnNfcm9vdCwKIAkJ CSZwZXJmLT5maXhfY29yZV9jbGtfcmF0ZSk7CiAJZGVidWdmc19jcmVhdGVfdTY0KCJmaXhfY29y ZV9pYl92b3RlIiwgMDYwMCwgcGVyZi0+ZGVidWdmc19yb290LApAQCAtNzkxLDEyICs2NzksNiBA QCBpbnQgZHB1X2NvcmVfcGVyZl9pbml0KHN0cnVjdCBkcHVfY29yZV9wZXJmICpwZXJmLAogCXBl cmYtPnBoYW5kbGUgPSBwaGFuZGxlOwogCXBlcmYtPnBjbGllbnQgPSBwY2xpZW50OwogCXBlcmYt PmNsa19uYW1lID0gY2xrX25hbWU7Ci0JcGVyZi0+ZHB1X3JzY19hdmFpbGFibGUgPSBpc19kcHVf cnNjX2F2YWlsYWJsZShEUFVfUlNDX0lOREVYKTsKLQkvKiBzZXQgZGVmYXVsdCBtb2RlICovCi0J aWYgKHBlcmYtPmRwdV9yc2NfYXZhaWxhYmxlKQotCQlwZXJmLT5id192b3RlX21vZGUgPSBESVNQ X1JTQ19NT0RFOwotCWVsc2UKLQkJcGVyZi0+Yndfdm90ZV9tb2RlID0gQVBQU19SU0NfTU9ERTsK IAogCXBlcmYtPmNvcmVfY2xrID0gZHB1X3Bvd2VyX2Nsa19nZXRfY2xrKHBoYW5kbGUsIGNsa19u YW1lKTsKIAlpZiAoIXBlcmYtPmNvcmVfY2xrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9wZXJmLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfY29yZV9wZXJmLmgKaW5kZXggMDljMDFkYS4uMTk2NWZmNSAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NvcmVfcGVyZi5oCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb3JlX3BlcmYuaApAQCAtNjMsOSArNjMs NiBAQCBzdHJ1Y3QgZHB1X2NvcmVfcGVyZl90dW5lIHsKICAqIEBmaXhfY29yZV9jbGtfcmF0ZTog Zml4ZWQgY29yZSBjbG9jayByZXF1ZXN0IGluIEh6IHVzZWQgaW4gbW9kZSAyCiAgKiBAZml4X2Nv cmVfaWJfdm90ZTogZml4ZWQgY29yZSBpYiB2b3RlIGluIGJwcyB1c2VkIGluIG1vZGUgMgogICog QGZpeF9jb3JlX2FiX3ZvdGU6IGZpeGVkIGNvcmUgYWIgdm90ZSBpbiBicHMgdXNlZCBpbiBtb2Rl IDIKLSAqIEBid192b3RlX21vZGU6IGFwcHMgcnNjIHZzIGRpc3BsYXkgcnNjIGJhbmR3aWR0aCB2 b3RlIG1vZGUKLSAqIEBkcHVfcnNjX2F2YWlsYWJsZTogaXMgZGlzcGxheSByc2MgYXZhaWxhYmxl Ci0gKiBAYndfdm90ZV9tb2RlX3VwZGF0ZWQ6IGJhbmR3aWR0aCB2b3RlIG1vZGUgdXBkYXRlCiAg Ki8KIHN0cnVjdCBkcHVfY29yZV9wZXJmIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OwpAQCAt ODIsOSArNzksNiBAQCBzdHJ1Y3QgZHB1X2NvcmVfcGVyZiB7CiAJdTY0IGZpeF9jb3JlX2Nsa19y YXRlOwogCXU2NCBmaXhfY29yZV9pYl92b3RlOwogCXU2NCBmaXhfY29yZV9hYl92b3RlOwotCXUz MiBid192b3RlX21vZGU7Ci0JYm9vbCBkcHVfcnNjX2F2YWlsYWJsZTsKLQlib29sIGJ3X3ZvdGVf bW9kZV91cGRhdGVkOwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2NydGMuYwppbmRleCAzMzA4OTI5Li4wMDFkZGFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9jcnRjLmMKQEAgLTIwNDgsNyArMjA0OCw2IEBAIHN0YXRpYyB2b2lkIGRwdV9j cnRjX2F0b21pY19iZWdpbihzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiBzdGF0aWMgdm9pZCBkcHVf Y3J0Y19hdG9taWNfZmx1c2goc3RydWN0IGRybV9jcnRjICpjcnRjLAogCQlzdHJ1Y3QgZHJtX2Ny dGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlKQogewotCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rl cjsKIAlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7 CiAJc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7CkBAIC0yMTA5LDE3ICsyMTA4LDYgQEAgc3RhdGlj IHZvaWQgZHB1X2NydGNfYXRvbWljX2ZsdXNoKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAlkcm1f YXRvbWljX2NydGNfZm9yX2VhY2hfcGxhbmUocGxhbmUsIGNydGMpCiAJCWRwdV9wbGFuZV9yZXN0 b3JlKHBsYW5lKTsKIAotCWlmICghY3N0YXRlLT5yc2NfdXBkYXRlKSB7Ci0JCWRybV9mb3JfZWFj aF9lbmNvZGVyKGVuY29kZXIsIGRldikgewotCQkJaWYgKGVuY29kZXItPmNydGMgIT0gY3J0YykK LQkJCQljb250aW51ZTsKLQotCQkJY3N0YXRlLT5yc2NfY2xpZW50ID0KLQkJCQlkcHVfZW5jb2Rl cl9nZXRfcnNjX2NsaWVudChlbmNvZGVyKTsKLQkJfQotCQljc3RhdGUtPnJzY191cGRhdGUgPSB0 cnVlOwotCX0KLQogCS8qIHVwZGF0ZSBwZXJmb3JtYW5jZSBzZXR0aW5nIGJlZm9yZSBjcnRjIGtp Y2tvZmYgKi8KIAlkcHVfY29yZV9wZXJmX2NydGNfdXBkYXRlKGNydGMsIDEsIGZhbHNlKTsKIApA QCAtMjY2MSw4ICsyNjQ5LDYgQEAgc3RhdGljIHZvaWQgZHB1X2NydGNfZGlzYWJsZShzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMpCiAJCWlmIChlbmNvZGVyLT5jcnRjICE9IGNydGMpCiAJCQljb250aW51 ZTsKIAkJZHB1X2VuY29kZXJfcmVnaXN0ZXJfZnJhbWVfZXZlbnRfY2FsbGJhY2soZW5jb2Rlciwg TlVMTCwgTlVMTCk7Ci0JCWNzdGF0ZS0+cnNjX2NsaWVudCA9IE5VTEw7Ci0JCWNzdGF0ZS0+cnNj X3VwZGF0ZSA9IGZhbHNlOwogCX0KIAogCWlmIChkcHVfY3J0Yy0+cG93ZXJfZXZlbnQpCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaAppbmRleCBkZjBkY2UzLi44NzU2YjJi IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmgKQEAgLTM4LDEyICsz OCwxMCBAQAogICogICAgICAgICAgICAgIHZvdGluZyB0aHJvdWdoIGFwcHMgcnNjCiAgKiBATlJU X0NMSUVOVDoJTm9uLVJlYWxUaW1lIGNsaWVudCBsaWtlIFdCIGRpc3BsYXkKICAqICAgICAgICAg ICAgICB2b3RpbmcgdGhyb3VnaCBhcHBzIHJzYwotICogQFJUX1JTQ19DTElFTlQ6CVJlYWx0aW1l IGRpc3BsYXkgUlNDIHZvdGluZyBjbGllbnQKICAqLwogZW51bSBkcHVfY3J0Y19jbGllbnRfdHlw ZSB7CiAJUlRfQ0xJRU5ULAogCU5SVF9DTElFTlQsCi0JUlRfUlNDX0NMSUVOVCwKIH07CiAKIC8q KgpAQCAtMzEwLDcgKzMwOCw2IEBAIHN0cnVjdCBkcHVfY3J0Y19yZXNwb29sIHsKICAqIEBiYXNl OiBCYXNlIGRybSBjcnRjIHN0YXRlIHN0cnVjdHVyZQogICogQGNvbm5lY3RvcnMgICAgOiBDdXJy ZW50bHkgYXNzb2NpYXRlZCBkcm0gY29ubmVjdG9ycwogICogQG51bV9jb25uZWN0b3JzOiBOdW1i ZXIgb2YgYXNzb2NpYXRlZCBkcm0gY29ubmVjdG9ycwotICogQHJzY19jbGllbnQgICAgOiBkcHUg cnNjIGNsaWVudCB3aGVuIG1vZGUgaXMgdmFsaWQKICAqIEBpc19wcHNwbGl0ICAgIDogV2hldGhl ciBjdXJyZW50IHRvcG9sb2d5IHJlcXVpcmVzIFBQU3BsaXQgc3BlY2lhbCBoYW5kbGluZwogICog QGJ3X2NvbnRyb2wgICAgOiB0cnVlIGlmIGJ3L2NsayBjb250cm9sbGVkIGJ5IGNvcmUgYncvY2xr IHByb3BlcnRpZXMKICAqIEBid19zcGxpdF92b3RlIDogdHJ1ZSBpZiBidyBjb250cm9sbGVkIGJ5 IGxsY2MvZHJhbSBidyBwcm9wZXJ0aWVzCkBAIC0zMzIsOCArMzI5LDYgQEAgc3RydWN0IGRwdV9j cnRjX3N0YXRlIHsKIAogCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3JzW01BWF9DT05O RUNUT1JTXTsKIAlpbnQgbnVtX2Nvbm5lY3RvcnM7Ci0Jc3RydWN0IGRwdV9yc2NfY2xpZW50ICpy c2NfY2xpZW50OwotCWJvb2wgcnNjX3VwZGF0ZTsKIAlib29sIGJ3X2NvbnRyb2w7CiAJYm9vbCBi d19zcGxpdF92b3RlOwogCkBAIC00NzEsNyArNDY2LDcgQEAgaW50IGRwdV9jcnRjX3JlZ2lzdGVy X2N1c3RvbV9ldmVudChzdHJ1Y3QgZHB1X2ttcyAqa21zLAogZW51bSBkcHVfaW50Zl9tb2RlIGRw dV9jcnRjX2dldF9pbnRmX21vZGUoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKIAogLyoqCi0gKiBk cHVfY3J0Y19nZXRfY2xpZW50X3R5cGUgLSBjaGVjayB0aGUgY3J0YyB0eXBlLSBydCwgbnJ0LCBy c2MsIGV0Yy4KKyAqIGRwdV9jcnRjX2dldF9jbGllbnRfdHlwZSAtIGNoZWNrIHRoZSBjcnRjIHR5 cGUtIHJ0LCBucnQgZXRjLgogICogQGNydGM6IFBvaW50ZXIgdG8gY3J0YwogICovCiBzdGF0aWMg aW5saW5lIGVudW0gZHB1X2NydGNfY2xpZW50X3R5cGUgZHB1X2NydGNfZ2V0X2NsaWVudF90eXBl KApAQCAtNDg0LDcgKzQ3OSw3IEBAIHN0YXRpYyBpbmxpbmUgZW51bSBkcHVfY3J0Y19jbGllbnRf dHlwZSBkcHVfY3J0Y19nZXRfY2xpZW50X3R5cGUoCiAJCXJldHVybiBOUlRfQ0xJRU5UOwogCiAJ cmV0dXJuIGRwdV9jcnRjX2dldF9pbnRmX21vZGUoY3J0YykgPT0gSU5URl9NT0RFX1dCX0xJTkUg PyBOUlRfQ0xJRU5UIDoKLQkJCShjc3RhdGUtPnJzY19jbGllbnQgPyBSVF9SU0NfQ0xJRU5UIDog UlRfQ0xJRU5UKTsKKwkJCVJUX0NMSUVOVDsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5jIGIvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYwppbmRleCA3ZjQxODIyLi40ZjQ2YTA2IDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5jCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMKQEAgLTIwLDcgKzIwLDYg QEAKICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5o PgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZHB1X3JzYy5o PgogCiAjaW5jbHVkZSAibXNtX2Rydi5oIgogI2luY2x1ZGUgImRwdV9rbXMuaCIKQEAgLTcyLDE3 ICs3MSwxMyBAQAogCiAjZGVmaW5lIElETEVfU0hPUlRfVElNRU9VVAkxCiAKLS8qIE1heGltdW0g bnVtYmVyIG9mIFZTWU5DIHdhaXQgYXR0ZW1wdHMgZm9yIFJTQyBzdGF0ZSB0cmFuc2l0aW9uICov Ci0jZGVmaW5lIE1BWF9SU0NfV0FJVAk1Ci0KIC8qKgogICogZW51bSBkcHVfZW5jX3JjX2V2ZW50 cyAtIGV2ZW50cyBmb3IgcmVzb3VyY2UgY29udHJvbCBzdGF0ZSBtYWNoaW5lCiAgKiBARFBVX0VO Q19SQ19FVkVOVF9LSUNLT0ZGOgogICoJVGhpcyBldmVudCBoYXBwZW5zIGF0IE5PUk1BTCBwcmlv cml0eS4KICAqCUV2ZW50IHRoYXQgc2lnbmFscyB0aGUgc3RhcnQgb2YgdGhlIHRyYW5zZmVyLiBX aGVuIHRoaXMgZXZlbnQgaXMKLSAqCXJlY2VpdmVkLCBlbmFibGUgTURQL0RTSSBjb3JlIGNsb2Nr cyBhbmQgcmVxdWVzdCBSU0Mgd2l0aCBDTUQgc3RhdGUuCi0gKglSZWdhcmRsZXNzIG9mIHRoZSBw cmV2aW91cyBzdGF0ZSwgdGhlIHJlc291cmNlIHNob3VsZCBiZSBpbiBPTiBzdGF0ZQotICoJYXQg dGhlIGVuZCBvZiB0aGlzIGV2ZW50LgorICoJcmVjZWl2ZWQsIGVuYWJsZSBNRFAvRFNJIGNvcmUg Y2xvY2tzLiBSZWdhcmRsZXNzIG9mIHRoZSBwcmV2aW91cworICoJc3RhdGUsIHRoZSByZXNvdXJj ZSBzaG91bGQgYmUgaW4gT04gc3RhdGUgYXQgdGhlIGVuZCBvZiB0aGlzIGV2ZW50LgogICogQERQ VV9FTkNfUkNfRVZFTlRfRlJBTUVfRE9ORToKICAqCVRoaXMgZXZlbnQgaGFwcGVucyBhdCBJTlRF UlJVUFQgbGV2ZWwuCiAgKglFdmVudCBzaWduYWxzIHRoZSBlbmQgb2YgdGhlIGRhdGEgdHJhbnNm ZXIgYWZ0ZXIgdGhlIFBQIEZSQU1FX0RPTkUKQEAgLTkwLDkgKzg1LDkgQEAKICAqCUlETEVfUEMg c3RhdGUgYWZ0ZXIgSURMRV9USU1FT1VUIHRpbWUuCiAgKiBARFBVX0VOQ19SQ19FVkVOVF9QUkVf U1RPUDoKICAqCVRoaXMgZXZlbnQgaGFwcGVucyBhdCBOT1JNQUwgcHJpb3JpdHkuCi0gKglUaGlz IGV2ZW50LCB3aGVuIHJlY2VpdmVkIGR1cmluZyB0aGUgT04gc3RhdGUsIHNldCBSU0MgdG8gSURM RSwgYW5kCi0gKglhbmQgbGVhdmUgdGhlIFJDIFNUQVRFIGluIHRoZSBQUkVfT0ZGIHN0YXRlLgot ICoJSXQgc2hvdWxkIGJlIGZvbGxvd2VkIGJ5IHRoZSBTVE9QIGV2ZW50IGFzIHBhcnQgb2YgZW5j b2RlciBkaXNhYmxlLgorICoJVGhpcyBldmVudCwgd2hlbiByZWNlaXZlZCBkdXJpbmcgdGhlIE9O IHN0YXRlLCBsZWF2ZSB0aGUgUkMgU1RBVEUKKyAqCWluIHRoZSBQUkVfT0ZGIHN0YXRlLiBJdCBz aG91bGQgYmUgZm9sbG93ZWQgYnkgdGhlIFNUT1AgZXZlbnQgYXMKKyAqCXBhcnQgb2YgZW5jb2Rl ciBkaXNhYmxlLgogICoJSWYgcmVjZWl2ZWQgZHVyaW5nIElETEUgb3IgT0ZGIHN0YXRlcywgaXQg d2lsbCBkbyBub3RoaW5nLgogICogQERQVV9FTkNfUkNfRVZFTlRfU1RPUDoKICAqCVRoaXMgZXZl bnQgaGFwcGVucyBhdCBOT1JNQUwgcHJpb3JpdHkuCkBAIC0xMDksMTMgKzEwNCwxMiBAQAogICog QERQVV9FTkNfUkNfRVZFTlRfUE9TVF9NT0RFU0VUOgogICoJVGhpcyBldmVudCBoYXBwZW5zIGF0 IE5PUk1BTCBwcmlvcml0eSBmcm9tIGEgd29yayBpdGVtLgogICoJRXZlbnQgc2lnbmFscyB0aGF0 IHNlYW1sZXNzIG1vZGUgc3dpdGNoIGlzIGNvbXBsZXRlIGFuZCByZXNvdXJjZXMgYXJlCi0gKglh Y3F1aXJlZC4gQ2xpZW50cyB3YW50cyB0byB0dXJuIG9uIHRoZSBpcnEgYWdhaW4gYW5kIHVwZGF0 ZSB0aGUgcnNjCi0gKgl3aXRoIG5ldyB2dG90YWwuCisgKglhY3F1aXJlZC4gQ2xpZW50cyB3YW50 cyB0byB0dXJuIG9uIHRoZSBpcnEgYWdhaW4uCiAgKiBARFBVX0VOQ19SQ19FVkVOVF9FTlRFUl9J RExFOgogICoJVGhpcyBldmVudCBoYXBwZW5zIGF0IE5PUk1BTCBwcmlvcml0eSBmcm9tIGEgd29y ayBpdGVtLgogICoJRXZlbnQgc2lnbmFscyB0aGF0IHRoZXJlIHdlcmUgbm8gZnJhbWUgdXBkYXRl cyBmb3IgSURMRV9USU1FT1VUIHRpbWUuCi0gKglUaGlzIHdvdWxkIGRpc2FibGUgTURQL0RTSSBj b3JlIGNsb2NrcyBhbmQgcmVxdWVzdCBSU0Mgd2l0aCBJRExFIHN0YXRlCi0gKglhbmQgY2hhbmdl IHRoZSByZXNvdXJjZSBzdGF0ZSB0byBJRExFLgorICoJVGhpcyB3b3VsZCBkaXNhYmxlIE1EUC9E U0kgY29yZSBjbG9ja3MgYW5kIGNoYW5nZSB0aGUgcmVzb3VyY2Ugc3RhdGUKKyAqCXRvIElETEUu CiAgKi8KIGVudW0gZHB1X2VuY19yY19ldmVudHMgewogCURQVV9FTkNfUkNfRVZFTlRfS0lDS09G RiA9IDEsCkBAIC0xNzksOCArMTczLDYgQEAgZW51bSBkcHVfZW5jX3JjX3N0YXRlcyB7CiAgKiBA ZnJhbWVfZG9uZV90aW1lb3V0OgkJZnJhbWUgZG9uZSB0aW1lb3V0IGluIEh6CiAgKiBAZnJhbWVf ZG9uZV90aW1lcjoJCXdhdGNoZG9nIHRpbWVyIGZvciBmcmFtZSBkb25lIGV2ZW50CiAgKiBAdnN5 bmNfZXZlbnRfdGltZXI6CQl2c3luYyB0aW1lcgotICogQHJzY19jbGllbnQ6CQkJcnNjIGNsaWVu dCBwb2ludGVyCi0gKiBAcnNjX3N0YXRlX2luaXQ6CQlib29sZWFuIHRvIGluZGljYXRlIHJzYyBj b25maWcgaW5pdAogICogQGRpc3BfaW5mbzoJCQlsb2NhbCBjb3B5IG9mIG1zbV9kaXNwbGF5X2lu Zm8gc3RydWN0CiAgKiBAbW9kZV9pbmZvOgkJCWxvY2FsIGNvcHkgb2YgbXNtX21vZGVfaW5mbyBz dHJ1Y3QKICAqIEBtaXNyX2VuYWJsZToJCW1pc3IgZW5hYmxlL2Rpc2FibGUgc3RhdHVzCkBAIC0x OTQsNyArMTg2LDYgQEAgZW51bSBkcHVfZW5jX3JjX3N0YXRlcyB7CiAgKiBAdnN5bmNfZXZlbnRf d29yazoJCXdvcmtlciB0byBoYW5kbGUgdnN5bmMgZXZlbnQgZm9yIGF1dG9yZWZyZXNoCiAgKiBA dG9wb2xvZ3k6ICAgICAgICAgICAgICAgICAgIHRvcG9sb2d5IG9mIHRoZSBkaXNwbGF5CiAgKiBA bW9kZV9zZXRfY29tcGxldGU6ICAgICAgICAgIGZsYWcgdG8gaW5kaWNhdGUgbW9kZXNldCBjb21w bGV0aW9uCi0gKiBAcnNjX2NvbmZpZzoJCQlyc2MgY29uZmlndXJhdGlvbiBmb3IgZGlzcGxheSB2 dG90YWwsIGZwcywgZXRjLgogICogQGlkbGVfdGltZW91dDoJCWlkbGUgdGltZW91dCBkdXJhdGlv biBpbiBtaWxsaXNlY29uZHMKICAqLwogc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgewpAQCAtMjI1 LDggKzIxNiw2IEBAIHN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0IHsKIAlzdHJ1Y3QgdGltZXJfbGlz dCBmcmFtZV9kb25lX3RpbWVyOwogCXN0cnVjdCB0aW1lcl9saXN0IHZzeW5jX2V2ZW50X3RpbWVy OwogCi0Jc3RydWN0IGRwdV9yc2NfY2xpZW50ICpyc2NfY2xpZW50OwotCWJvb2wgcnNjX3N0YXRl X2luaXQ7CiAJc3RydWN0IG1zbV9kaXNwbGF5X2luZm8gZGlzcF9pbmZvOwogCXN0cnVjdCBtc21f bW9kZV9pbmZvIG1vZGVfaW5mbzsKIAlib29sIG1pc3JfZW5hYmxlOwpAQCAtMjQwLDggKzIyOSw2 IEBAIHN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0IHsKIAlzdHJ1Y3QgbXNtX2Rpc3BsYXlfdG9wb2xv Z3kgdG9wb2xvZ3k7CiAJYm9vbCBtb2RlX3NldF9jb21wbGV0ZTsKIAotCXN0cnVjdCBkcHVfcnNj X2NtZF9jb25maWcgcnNjX2NvbmZpZzsKLQogCXUzMiBpZGxlX3RpbWVvdXQ7CiB9OwogCkBAIC01 NzAsNyArNTU3LDYgQEAgdm9pZCBkcHVfZW5jb2Rlcl9kZXN0cm95KHN0cnVjdCBkcm1fZW5jb2Rl ciAqZHJtX2VuYykKIAlEUFVfREVCVUdfRU5DKGRwdV9lbmMsICJcbiIpOwogCiAJbXV0ZXhfbG9j aygmZHB1X2VuYy0+ZW5jX2xvY2spOwotCWRwdV9yc2NfY2xpZW50X2Rlc3Ryb3koZHB1X2VuYy0+ cnNjX2NsaWVudCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZHB1X2VuYy0+bnVtX3BoeXNfZW5jczsg aSsrKSB7CiAJCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzID0gZHB1X2VuYy0+cGh5c19l bmNzW2ldOwpAQCAtMTA2Niw3ICsxMDUyLDcgQEAgc3RhdGljIGludCBfZHB1X2VuY29kZXJfZHNj X3NldHVwKHN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jKQogfQogCiBzdGF0aWMgdm9p ZCBfZHB1X2VuY29kZXJfdXBkYXRlX3ZzeW5jX3NvdXJjZShzdHJ1Y3QgZHB1X2VuY29kZXJfdmly dCAqZHB1X2VuYywKLQkJCXN0cnVjdCBtc21fZGlzcGxheV9pbmZvICpkaXNwX2luZm8sIGJvb2wg aXNfZHVtbXkpCisJCQlzdHJ1Y3QgbXNtX2Rpc3BsYXlfaW5mbyAqZGlzcF9pbmZvKQogewogCXN0 cnVjdCBkcHVfdnN5bmNfc291cmNlX2NmZyB2c3luY19jZmcgPSB7IDAgfTsKIAlzdHJ1Y3QgbXNt X2RybV9wcml2YXRlICpwcml2OwpAQCAtMTExNiwxMyArMTEwMiwxMCBAQCBzdGF0aWMgdm9pZCBf ZHB1X2VuY29kZXJfdXBkYXRlX3ZzeW5jX3NvdXJjZShzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAq ZHB1X2VuYywKIAogCQl2c3luY19jZmcucHBfY291bnQgPSBkcHVfZW5jLT5udW1fcGh5c19lbmNz OwogCQl2c3luY19jZmcuZnJhbWVfcmF0ZSA9IG1vZGVfaW5mby0+ZnJhbWVfcmF0ZTsKLQkJaWYg KGlzX2R1bW15KQotCQkJdnN5bmNfY2ZnLnZzeW5jX3NvdXJjZSA9IERQVV9WU1lOQ19TT1VSQ0Vf V0RfVElNRVJfMTsKLQkJZWxzZSBpZiAoZGlzcF9pbmZvLT5pc190ZV91c2luZ193YXRjaGRvZ190 aW1lcikKKwkJaWYgKGRpc3BfaW5mby0+aXNfdGVfdXNpbmdfd2F0Y2hkb2dfdGltZXIpCiAJCQl2 c3luY19jZmcudnN5bmNfc291cmNlID0gRFBVX1ZTWU5DX1NPVVJDRV9XRF9USU1FUl8wOwogCQll bHNlCiAJCQl2c3luY19jZmcudnN5bmNfc291cmNlID0gRFBVX1ZTWU5DMF9TT1VSQ0VfR1BJTzsK LQkJdnN5bmNfY2ZnLmlzX2R1bW15ID0gaXNfZHVtbXk7CiAKIAkJaHdfbWRwdG9wLT5vcHMuc2V0 dXBfdnN5bmNfc291cmNlKGh3X21kcHRvcCwgJnZzeW5jX2NmZyk7CiAJfQpAQCAtMTIyNCwxMzYg KzEyMDcsNiBAQCBzdGF0aWMgaW50IF9kcHVfZW5jb2Rlcl9kc2NfZGlzYWJsZShzdHJ1Y3QgZHB1 X2VuY29kZXJfdmlydCAqZHB1X2VuYykKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IF9k cHVfZW5jb2Rlcl91cGRhdGVfcnNjX2NsaWVudCgKLQkJc3RydWN0IGRybV9lbmNvZGVyICpkcm1f ZW5jLCBib29sIGVuYWJsZSkKLXsKLQlzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYzsK LQlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Ci0JZW51bSBkcHVfcnNjX3N0YXRlIHJzY19zdGF0ZTsK LQlzdHJ1Y3QgZHB1X3JzY19jbWRfY29uZmlnICpyc2NfY29uZmlnOwotCWludCByZXQsIHByZWZp bGxfbGluZXM7Ci0Jc3RydWN0IG1zbV9kaXNwbGF5X2luZm8gKmRpc3BfaW5mbzsKLQlzdHJ1Y3Qg bXNtX21vZGVfaW5mbyAqbW9kZV9pbmZvOwotCWludCB3YWl0X3ZibGFua19jcnRjX2lkID0gRFBV X1JTQ19JTlZBTElEX0NSVENfSUQ7Ci0JaW50IHdhaXRfY291bnQgPSAwOwotCXN0cnVjdCBkcm1f Y3J0YyAqcHJpbWFyeV9jcnRjOwotCWludCBwaXBlID0gLTE7Ci0KLQlpZiAoIWRybV9lbmMgfHwg IWRybV9lbmMtPmNydGMgfHwgIWRybV9lbmMtPmRldikgewotCQlEUFVfRVJST1IoImludmFsaWQg YXJndW1lbnRzXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZHB1X2VuYyA9IHRvX2Rw dV9lbmNvZGVyX3ZpcnQoZHJtX2VuYyk7Ci0JY3J0YyA9IGRybV9lbmMtPmNydGM7Ci0JZGlzcF9p bmZvID0gJmRwdV9lbmMtPmRpc3BfaW5mbzsKLQltb2RlX2luZm8gPSAmZHB1X2VuYy0+bW9kZV9p bmZvOwotCXJzY19jb25maWcgPSAmZHB1X2VuYy0+cnNjX2NvbmZpZzsKLQotCWlmICghZHB1X2Vu Yy0+cnNjX2NsaWVudCkgewotCQlEUFVfREVCVUdfRU5DKGRwdV9lbmMsICJyc2MgY2xpZW50IG5v dCBjcmVhdGVkXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyoqCi0JICogb25seSBwcmltYXJ5 IGNvbW1hbmQgbW9kZSBwYW5lbCBjYW4gcmVxdWVzdCBDTUQgc3RhdGUuCi0JICogYWxsIG90aGVy IHBhbmVscy9kaXNwbGF5cyBjYW4gcmVxdWVzdCBmb3IgVklEIHN0YXRlIGluY2x1ZGluZwotCSAq IHNlY29uZGFyeSBjb21tYW5kIG1vZGUgcGFuZWwuCi0JICovCi0JcnNjX3N0YXRlID0gZW5hYmxl ID8KLQkJKCgoZGlzcF9pbmZvLT5jYXBhYmlsaXRpZXMgJiBNU01fRElTUExBWV9DQVBfQ01EX01P REUpICYmCi0JCSAgZGlzcF9pbmZvLT5pc19wcmltYXJ5KSA/IERQVV9SU0NfQ01EX1NUQVRFIDoK LQkJRFBVX1JTQ19WSURfU1RBVEUpIDogRFBVX1JTQ19JRExFX1NUQVRFOwotCi0JLyogY29tcGFy ZSBzcGVjaWZpYyBpdGVtcyBhbmQgcmVjb25maWd1cmUgdGhlIHJzYyAqLwotCWlmICgocnNjX2Nv bmZpZy0+ZnBzICE9IG1vZGVfaW5mby0+ZnJhbWVfcmF0ZSkgfHwKLQkgICAgKHJzY19jb25maWct PnZ0b3RhbCAhPSBtb2RlX2luZm8tPnZ0b3RhbCkgfHwKLQkgICAgKHJzY19jb25maWctPnByZWZp bGxfbGluZXMgIT0gbW9kZV9pbmZvLT5wcmVmaWxsX2xpbmVzKSB8fAotCSAgICAocnNjX2NvbmZp Zy0+aml0dGVyX251bWVyICE9IG1vZGVfaW5mby0+aml0dGVyX251bWVyKSB8fAotCSAgICAocnNj X2NvbmZpZy0+aml0dGVyX2Rlbm9tICE9IG1vZGVfaW5mby0+aml0dGVyX2Rlbm9tKSkgewotCQly c2NfY29uZmlnLT5mcHMgPSBtb2RlX2luZm8tPmZyYW1lX3JhdGU7Ci0JCXJzY19jb25maWctPnZ0 b3RhbCA9IG1vZGVfaW5mby0+dnRvdGFsOwotCQlyc2NfY29uZmlnLT5wcmVmaWxsX2xpbmVzID0g cHJlZmlsbF9saW5lczsKLQkJcnNjX2NvbmZpZy0+aml0dGVyX251bWVyID0gbW9kZV9pbmZvLT5q aXR0ZXJfbnVtZXI7Ci0JCXJzY19jb25maWctPmppdHRlcl9kZW5vbSA9IG1vZGVfaW5mby0+aml0 dGVyX2Rlbm9tOwotCQlkcHVfZW5jLT5yc2Nfc3RhdGVfaW5pdCA9IGZhbHNlOwotCX0KLQotCWlm IChyc2Nfc3RhdGUgIT0gRFBVX1JTQ19JRExFX1NUQVRFICYmICFkcHVfZW5jLT5yc2Nfc3RhdGVf aW5pdAotCQkJCQkmJiBkaXNwX2luZm8tPmlzX3ByaW1hcnkpIHsKLQkJLyogdXBkYXRlIGl0IG9u bHkgb25jZSAqLwotCQlkcHVfZW5jLT5yc2Nfc3RhdGVfaW5pdCA9IHRydWU7Ci0KLQkJcmV0ID0g ZHB1X3JzY19jbGllbnRfc3RhdGVfdXBkYXRlKGRwdV9lbmMtPnJzY19jbGllbnQsCi0JCQlyc2Nf c3RhdGUsIHJzY19jb25maWcsIGNydGMtPmJhc2UuaWQsCi0JCQkmd2FpdF92YmxhbmtfY3J0Y19p ZCk7Ci0JfSBlbHNlIHsKLQkJcmV0ID0gZHB1X3JzY19jbGllbnRfc3RhdGVfdXBkYXRlKGRwdV9l bmMtPnJzY19jbGllbnQsCi0JCQlyc2Nfc3RhdGUsIE5VTEwsIGNydGMtPmJhc2UuaWQsCi0JCQkm d2FpdF92YmxhbmtfY3J0Y19pZCk7Ci0JfQotCi0JLyoqCi0JICogaWYgUlNDIHBlcmZvcm1lZCBh IHN0YXRlIGNoYW5nZSB0aGF0IHJlcXVpcmVzIGEgVkJMQU5LIHdhaXQsIGl0IHdpbGwKLQkgKiBz ZXQgd2FpdF92YmxhbmtfY3J0Y19pZCB0byB0aGUgQ1JUQyB3aG9zZSBWQkxBTksgd2UgbXVzdCB3 YWl0IG9uLgotCSAqCi0JICogaWYgd2UgYXJlIHRoZSBwcmltYXJ5IGRpc3BsYXksIHdlIHdpbGwg bmVlZCB0byBlbmFibGUgYW5kIHdhaXQKLQkgKiBsb2NhbGx5IHNpbmNlIHdlIGhvbGQgdGhlIGNv bW1pdCB0aHJlYWQKLQkgKgotCSAqIGlmIHdlIGFyZSBhbiBleHRlcm5hbCBkaXNwbGF5LCB3ZSBt dXN0IHNlbmQgYSBzaWduYWwgdG8gdGhlIHByaW1hcnkKLQkgKiB0byBlbmFibGUgaXRzIFZCTEFO SyBhbmQgd2FpdCBvbmUsIHNpbmNlIHRoZSBSU0MgaGFyZHdhcmUgaXMgZHJpdmVuCi0JICogYnkg dGhlIHByaW1hcnkgcGFuZWwncyBWQkxBTksgc2lnbmFscwotCSAqLwotCURQVV9FVlQzMl9WRVJC T1NFKERSTUlEKGRybV9lbmMpLCB3YWl0X3ZibGFua19jcnRjX2lkKTsKLQlpZiAocmV0KSB7Ci0J CURQVV9FUlJPUl9FTkMoZHB1X2VuYywKLQkJCQkiZHB1IHJzYyBjbGllbnQgdXBkYXRlIGZhaWxl ZCByZXQ6JWRcbiIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfSBlbHNlIGlmICh3YWl0X3ZibGFu a19jcnRjX2lkID09IERQVV9SU0NfSU5WQUxJRF9DUlRDX0lEKSB7Ci0JCXJldHVybiByZXQ7Ci0J fQotCi0JaWYgKGNydGMtPmJhc2UuaWQgIT0gd2FpdF92YmxhbmtfY3J0Y19pZCkgewotCQlwcmlt YXJ5X2NydGMgPSBkcm1fY3J0Y19maW5kKGRybV9lbmMtPmRldiwgTlVMTCwKLQkJCQl3YWl0X3Zi bGFua19jcnRjX2lkKTsKLQkJaWYgKCFwcmltYXJ5X2NydGMpIHsKLQkJCURQVV9FUlJPUl9FTkMo ZHB1X2VuYywKLQkJCQkJImZhaWxlZCB0byBmaW5kIHByaW1hcnkgY3J0YyBpZCAlZFxuIiwKLQkJ CQkJd2FpdF92YmxhbmtfY3J0Y19pZCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlwaXBl ID0gZHJtX2NydGNfaW5kZXgocHJpbWFyeV9jcnRjKTsKLQl9Ci0KLQkvKioKLQkgKiBub3RlOiBW QkxBTksgaXMgZXhwZWN0ZWQgdG8gYmUgZW5hYmxlZCBhdCB0aGlzIHBvaW50IGluCi0JICogcmVz b3VyY2UgY29udHJvbCBzdGF0ZSBtYWNoaW5lIGlmIG9uIHByaW1hcnkgQ1JUQwotCSAqLwotCWZv ciAod2FpdF9jb3VudCA9IDA7IHdhaXRfY291bnQgPCBNQVhfUlNDX1dBSVQ7IHdhaXRfY291bnQr KykgewotCQlpZiAoZHB1X3JzY19jbGllbnRfaXNfc3RhdGVfdXBkYXRlX2NvbXBsZXRlKAotCQkJ CWRwdV9lbmMtPnJzY19jbGllbnQpKQotCQkJYnJlYWs7Ci0KLQkJaWYgKGNydGMtPmJhc2UuaWQg PT0gd2FpdF92YmxhbmtfY3J0Y19pZCkKLQkJCXJldCA9IGRwdV9lbmNvZGVyX3dhaXRfZm9yX2V2 ZW50KGRybV9lbmMsCi0JCQkJCU1TTV9FTkNfVkJMQU5LKTsKLQkJZWxzZQotCQkJZHJtX3dhaXRf b25lX3ZibGFuayhkcm1fZW5jLT5kZXYsIHBpcGUpOwotCi0JCWlmIChyZXQpIHsKLQkJCURQVV9F UlJPUl9FTkMoZHB1X2VuYywKLQkJCQkJIndhaXQgZm9yIHZibGFuayBmYWlsZWQgcmV0OiVkXG4i LCByZXQpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAod2FpdF9jb3VudCA+PSBNQVhfUlND X1dBSVQpCi0JCURQVV9FVlQzMihEUk1JRChkcm1fZW5jKSwgd2FpdF92YmxhbmtfY3J0Y19pZCwg d2FpdF9jb3VudCwKLQkJCQlEUFVfRVZUTE9HX0VSUk9SKTsKLQotCXJldHVybiByZXQ7Ci19Ci0K IHN0YXRpYyB2b2lkIF9kcHVfZW5jb2Rlcl9pcnFfY29udHJvbChzdHJ1Y3QgZHJtX2VuY29kZXIg KmRybV9lbmMsIGJvb2wgZW5hYmxlKQogewogCXN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVf ZW5jOwpAQCAtMTM3Niw0NSArMTIyOSw2IEBAIHN0YXRpYyB2b2lkIF9kcHVfZW5jb2Rlcl9pcnFf Y29udHJvbChzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMsIGJvb2wgZW5hYmxlKQogCiB9CiAK LXN0cnVjdCBkcHVfcnNjX2NsaWVudCAqZHB1X2VuY29kZXJfZ2V0X3JzY19jbGllbnQoc3RydWN0 IGRybV9lbmNvZGVyICpkcm1fZW5jKQotewotCXN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVf ZW5jOwotCi0JaWYgKCFkcm1fZW5jKQotCQlyZXR1cm4gTlVMTDsKLQlkcHVfZW5jID0gdG9fZHB1 X2VuY29kZXJfdmlydChkcm1fZW5jKTsKLQlyZXR1cm4gZHB1X2VuYy0+cnNjX2NsaWVudDsKLX0K LQotc3RhdGljIHZvaWQgX2RwdV9lbmNvZGVyX3Jlc291cmNlX2NvbnRyb2xfcnNjX3VwZGF0ZSgK LQkJc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jLCBib29sIGVuYWJsZSkKLXsKLQlzdHJ1Y3Qg ZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYyA9IHRvX2RwdV9lbmNvZGVyX3ZpcnQoZHJtX2VuYyk7 Ci0JaW50IGk7Ci0KLQlpZiAoZW5hYmxlKSB7Ci0JCV9kcHVfZW5jb2Rlcl91cGRhdGVfcnNjX2Ns aWVudChkcm1fZW5jLCB0cnVlKTsKLQl9IGVsc2UgewotCQlfZHB1X2VuY29kZXJfdXBkYXRlX3Jz Y19jbGllbnQoZHJtX2VuYywgZmFsc2UpOwotCi0JCS8qKgotCQkgKiBkaXNhYmxlIHRoZSB2c3lu YyBzb3VyY2UgYWZ0ZXIgdXBkYXRpbmcgdGhlIHJzYyBzdGF0ZS4gcnNjCi0JCSAqIHN0YXRlIHVw ZGF0ZSBtaWdodCBoYXZlIHZzeW5jIHdhaXQgYW5kIHZzeW5jIHNvdXJjZSBtdXN0IGJlCi0JCSAq IGRpc2FibGVkIGFmdGVyIGl0LiBJdCB3aWxsIGF2b2lkIGdlbmVyYXRpbmcgYW55IHZzeW5jIGZy b20KLQkJICogdGhpcyBwb2ludCB0aWxsIG1vZGUtMiBlbnRyeS4gSXQgaXMgU1cgd29ya2Fyb3Vu ZCBmb3IKLQkJICogSFcgbGltaXRhdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSByZW1vdmVkIHdpdGhv dXQgY2hlY2tpbmcgdGhlCi0JCSAqIHVwZGF0ZWQgZGVzaWduLgotCQkgKi8KLQkJZm9yIChpID0g MDsgaSA8IGRwdV9lbmMtPm51bV9waHlzX2VuY3M7IGkrKykgewotCQkJc3RydWN0IGRwdV9lbmNv ZGVyX3BoeXMgKnBoeXMgPSBkcHVfZW5jLT5waHlzX2VuY3NbaV07Ci0KLQkJCWlmIChwaHlzICYm IHBoeXMtPm9wcy5wcmVwYXJlX2lkbGVfcGMpCi0JCQkJcGh5cy0+b3BzLnByZXBhcmVfaWRsZV9w YyhwaHlzKTsKLQkJfQotCi0JfQotfQotCiBzdGF0aWMgdm9pZCBfZHB1X2VuY29kZXJfcmVzb3Vy Y2VfY29udHJvbF9oZWxwZXIoc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jLAogCQlib29sIGVu YWJsZSkKIHsKQEAgLTE1MzMsMTMgKzEzNDcsMTAgQEAgc3RhdGljIGludCBkcHVfZW5jb2Rlcl9y ZXNvdXJjZV9jb250cm9sKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYywKIAkJCXJldHVybiAt RUlOVkFMOwogCQl9CiAKLQkJaWYgKGlzX3ZpZF9tb2RlICYmIGRwdV9lbmMtPnJjX3N0YXRlID09 IERQVV9FTkNfUkNfU1RBVEVfSURMRSkgeworCQlpZiAoaXNfdmlkX21vZGUgJiYgZHB1X2VuYy0+ cmNfc3RhdGUgPT0gRFBVX0VOQ19SQ19TVEFURV9JRExFKQogCQkJX2RwdV9lbmNvZGVyX2lycV9j b250cm9sKGRybV9lbmMsIHRydWUpOwotCQl9IGVsc2UgewotCQkJLyogZW5hYmxlIGFsbCB0aGUg Y2xrcyBhbmQgcmVzb3VyY2VzICovCisJCWVsc2UKIAkJCV9kcHVfZW5jb2Rlcl9yZXNvdXJjZV9j b250cm9sX2hlbHBlcihkcm1fZW5jLCB0cnVlKTsKLQkJCV9kcHVfZW5jb2Rlcl9yZXNvdXJjZV9j b250cm9sX3JzY191cGRhdGUoZHJtX2VuYywgdHJ1ZSk7Ci0JCX0KIAogCQlEUFVfRVZUMzIoRFJN SUQoZHJtX2VuYyksIHN3X2V2ZW50LCBkcHVfZW5jLT5yY19zdGF0ZSwKIAkJCQlEUFVfRU5DX1JD X1NUQVRFX09OLCBEUFVfRVZUTE9HX0ZVTkNfQ0FTRTEpOwpAQCAtMTYyOSwxMiArMTQ0MCw2IEBA IHN0YXRpYyBpbnQgZHB1X2VuY29kZXJfcmVzb3VyY2VfY29udHJvbChzdHJ1Y3QgZHJtX2VuY29k ZXIgKmRybV9lbmMsCiAJCQlyZXR1cm4gMDsKIAkJfQogCi0JCS8qKgotCQkgKiBJUlFzIGFyZSBz dGlsbCBlbmFibGVkIGN1cnJlbnRseSwgd2hpY2ggYWxsb3dzIHdhaXQgZm9yCi0JCSAqIFZCTEFO SyB3aGljaCBSU0MgbWF5IHJlcXVpcmUgdG8gY29ycmVjdGx5IHRyYW5zaXRpb24gdG8gT0ZGCi0J CSAqLwotCQlfZHB1X2VuY29kZXJfcmVzb3VyY2VfY29udHJvbF9yc2NfdXBkYXRlKGRybV9lbmMs IGZhbHNlKTsKLQogCQlEUFVfRVZUMzIoRFJNSUQoZHJtX2VuYyksIHN3X2V2ZW50LCBkcHVfZW5j LT5yY19zdGF0ZSwKIAkJCQlEUFVfRU5DX1JDX1NUQVRFX1BSRV9PRkYsCiAJCQkJRFBVX0VWVExP R19GVU5DX0NBU0UzKTsKQEAgLTE2OTQsOCArMTQ5OSw2IEBAIHN0YXRpYyBpbnQgZHB1X2VuY29k ZXJfcmVzb3VyY2VfY29udHJvbChzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMsCiAJCQkvKiBl bmFibGUgYWxsIHRoZSBjbGtzIGFuZCByZXNvdXJjZXMgKi8KIAkJCV9kcHVfZW5jb2Rlcl9yZXNv dXJjZV9jb250cm9sX2hlbHBlcihkcm1fZW5jLCB0cnVlKTsKIAotCQkJX2RwdV9lbmNvZGVyX3Jl c291cmNlX2NvbnRyb2xfcnNjX3VwZGF0ZShkcm1fZW5jLCB0cnVlKTsKLQogCQkJRFBVX0VWVDMy KERSTUlEKGRybV9lbmMpLCBzd19ldmVudCwgZHB1X2VuYy0+cmNfc3RhdGUsCiAJCQkJRFBVX0VO Q19SQ19TVEFURV9PTiwgRFBVX0VWVExPR19GVU5DX0NBU0U1KTsKIAkJCWRwdV9lbmMtPnJjX3N0 YXRlID0gRFBVX0VOQ19SQ19TVEFURV9PTjsKQEAgLTE3MzcsOCArMTU0MCw2IEBAIHN0YXRpYyBp bnQgZHB1X2VuY29kZXJfcmVzb3VyY2VfY29udHJvbChzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9l bmMsCiAKIAkJX2RwdV9lbmNvZGVyX2lycV9jb250cm9sKGRybV9lbmMsIHRydWUpOwogCi0JCV9k cHVfZW5jb2Rlcl91cGRhdGVfcnNjX2NsaWVudChkcm1fZW5jLCB0cnVlKTsKLQogCQlEUFVfRVZU MzIoRFJNSUQoZHJtX2VuYyksIHN3X2V2ZW50LCBkcHVfZW5jLT5yY19zdGF0ZSwKIAkJCQlEUFVf RU5DX1JDX1NUQVRFX09OLCBEUFVfRVZUTE9HX0ZVTkNfQ0FTRTYpOwogCkBAIC0xNzczLDE0ICsx NTc0LDEwIEBAIHN0YXRpYyBpbnQgZHB1X2VuY29kZXJfcmVzb3VyY2VfY29udHJvbChzdHJ1Y3Qg ZHJtX2VuY29kZXIgKmRybV9lbmMsCiAJCQlyZXR1cm4gMDsKIAkJfQogCi0JCWlmIChpc192aWRf bW9kZSkgeworCQlpZiAoaXNfdmlkX21vZGUpCiAJCQlfZHB1X2VuY29kZXJfaXJxX2NvbnRyb2wo ZHJtX2VuYywgZmFsc2UpOwotCQl9IGVsc2UgewotCQkJLyogZGlzYWJsZSBhbGwgdGhlIGNsa3Mg YW5kIHJlc291cmNlcyAqLwotCQkJX2RwdV9lbmNvZGVyX3Jlc291cmNlX2NvbnRyb2xfcnNjX3Vw ZGF0ZShkcm1fZW5jLAotCQkJCQkJCQlmYWxzZSk7CisJCWVsc2UKIAkJCV9kcHVfZW5jb2Rlcl9y ZXNvdXJjZV9jb250cm9sX2hlbHBlcihkcm1fZW5jLCBmYWxzZSk7Ci0JCX0KIAogCQlEUFVfRVZU MzIoRFJNSUQoZHJtX2VuYyksIHN3X2V2ZW50LCBkcHVfZW5jLT5yY19zdGF0ZSwKIAkJCQlEUFVf RU5DX1JDX1NUQVRFX0lETEUsIERQVV9FVlRMT0dfRlVOQ19DQVNFNyk7CkBAIC0xOTU0LDcgKzE3 NTEsNyBAQCBzdGF0aWMgdm9pZCBfZHB1X2VuY29kZXJfdmlydF9lbmFibGVfaGVscGVyKHN0cnVj dCBkcm1fZW5jb2RlciAqZHJtX2VuYykKIAkJCQlkcHVfZW5jLT5jdXJfbWFzdGVyLT5od19tZHB0 b3AsCiAJCQkJZHB1X2ttcy0+Y2F0YWxvZyk7CiAKLQlfZHB1X2VuY29kZXJfdXBkYXRlX3ZzeW5j X3NvdXJjZShkcHVfZW5jLCAmZHB1X2VuYy0+ZGlzcF9pbmZvLCBmYWxzZSk7CisJX2RwdV9lbmNv ZGVyX3VwZGF0ZV92c3luY19zb3VyY2UoZHB1X2VuYywgJmRwdV9lbmMtPmRpc3BfaW5mbyk7CiB9 CiAKIHZvaWQgZHB1X2VuY29kZXJfdmlydF9yZXN0b3JlKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJt X2VuYykKQEAgLTM1ODksNyArMzM4Niw2IEBAIHN0cnVjdCBkcm1fZW5jb2RlciAqZHB1X2VuY29k ZXJfaW5pdCgKIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMgPSBOVUxMOwogCXN0cnVjdCBk cHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jID0gTlVMTDsKIAlpbnQgZHJtX2VuY19tb2RlID0gRFJN X01PREVfRU5DT0RFUl9OT05FOwotCWNoYXIgbmFtZVtEUFVfTkFNRV9TSVpFXTsKIAlpbnQgcmV0 ID0gMDsKIAogCWRwdV9lbmMgPSBremFsbG9jKHNpemVvZigqZHB1X2VuYyksIEdGUF9LRVJORUwp OwpAQCAtMzYyMCwxNCArMzQxNiw2IEBAIHN0cnVjdCBkcm1fZW5jb2RlciAqZHB1X2VuY29kZXJf aW5pdCgKIAkJCQlkcHVfZW5jb2Rlcl92c3luY19ldmVudF9oYW5kbGVyLAogCQkJCTApOwogCi0J c25wcmludGYobmFtZSwgRFBVX05BTUVfU0laRSwgInJzY19lbmMldSIsIGRybV9lbmMtPmJhc2Uu aWQpOwotCWRwdV9lbmMtPnJzY19jbGllbnQgPSBkcHVfcnNjX2NsaWVudF9jcmVhdGUoRFBVX1JT Q19JTkRFWCwgbmFtZSwKLQkJCQkJZGlzcF9pbmZvLT5pc19wcmltYXJ5KTsKLQlpZiAoSVNfRVJS X09SX05VTEwoZHB1X2VuYy0+cnNjX2NsaWVudCkpIHsKLQkJRFBVX0RFQlVHKCJkcHUgcnNjIGNs aWVudCBjcmVhdGUgZmFpbGVkIDolbGRcbiIsCi0JCQkJCQlQVFJfRVJSKGRwdV9lbmMtPnJzY19j bGllbnQpKTsKLQkJZHB1X2VuYy0+cnNjX2NsaWVudCA9IE5VTEw7Ci0JfQogCiAJbXV0ZXhfaW5p dCgmZHB1X2VuYy0+cmNfbG9jayk7CiAJa3RocmVhZF9pbml0X2RlbGF5ZWRfd29yaygmZHB1X2Vu Yy0+ZGVsYXllZF9vZmZfd29yaywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9lbmNvZGVyLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf ZW5jb2Rlci5oCmluZGV4IDRjNTU2MGIuLmU4NWU1YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuaApAQCAtODgsMTMgKzg4LDYgQEAgdm9pZCBkcHVfZW5j b2Rlcl9yZWdpc3Rlcl9mcmFtZV9ldmVudF9jYWxsYmFjayhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVu Y29kZXIsCiAJCXZvaWQgKCpjYikodm9pZCAqLCB1MzIpLCB2b2lkICpkYXRhKTsKIAogLyoqCi0g KiBkcHVfZW5jb2Rlcl9nZXRfcnNjX2NsaWVudCAtIGdldHMgdGhlIHJzYyBjbGllbnQgc3RhdGUg Zm9yIHByaW1hcnkKLSAqICAgICAgZm9yIHByaW1hcnkgZGlzcGxheS4KLSAqIEBlbmNvZGVyOgll bmNvZGVyIHBvaW50ZXIKLSAqLwotc3RydWN0IGRwdV9yc2NfY2xpZW50ICpkcHVfZW5jb2Rlcl9n ZXRfcnNjX2NsaWVudChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOwotCi0vKioKICAqIGRw dV9lbmNvZGVyX3ByZXBhcmVfZm9yX2tpY2tvZmYgLSBzY2hlZHVsZSBkb3VibGUgYnVmZmVyIGZs aXAgb2YgdGhlIGN0bAogICoJcGF0aCAoaS5lLiBjdGwgZmx1c2ggYW5kIHN0YXJ0KSBhdCBuZXh0 IGFwcHJvcHJpYXRlIHRpbWUuCiAgKglJbW1lZGlhdGVseTogaWYgbm8gcHJldmlvdXMgY29tbWl0 IGlzIG91dHN0YW5kaW5nLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2VuY29kZXJfcGh5cy5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2VuY29kZXJfcGh5cy5oCmluZGV4IGU5NDg0ZmUuLjliYmYzMzliIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzLmgKKysrIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5cy5oCkBAIC0xNiw3ICsxNiw2 IEBACiAjZGVmaW5lIF9fRFBVX0VOQ09ERVJfUEhZU19IX18KIAogI2luY2x1ZGUgPGxpbnV4L2pp ZmZpZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9kcHVfcnNjLmg+CiAKICNpbmNsdWRlICJkcHVfa21z LmgiCiAjaW5jbHVkZSAiZHB1X2h3X2ludGYuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9od190b3AuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9od190b3AuYwppbmRleCAwY2FhZGNlZS4uNjgxNjNhMSAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3RvcC5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od190b3AuYwpAQCAtMjcwLDE4ICsyNzAsMTQgQEAgc3Rh dGljIHZvaWQgZHB1X2h3X3NldHVwX3ZzeW5jX3NvdXJjZShzdHJ1Y3QgZHB1X2h3X21kcCAqbWRw LAogCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAoY2ZnLT5pc19kdW1teSkgewotCQkJRFBVX1JFR19X UklURShjLCB3ZF9jdGwyLCAweDApOwotCQl9IGVsc2UgewotCQkJRFBVX1JFR19XUklURShjLCB3 ZF9sb2FkX3ZhbHVlLAotCQkJCUNBTENVTEFURV9XRF9MT0FEX1ZBTFVFKGNmZy0+ZnJhbWVfcmF0 ZSkpOwotCi0JCQlEUFVfUkVHX1dSSVRFKGMsIHdkX2N0bCwgQklUKDApKTsgLyogY2xlYXIgdGlt ZXIgKi8KLQkJCXJlZyA9IERQVV9SRUdfUkVBRChjLCB3ZF9jdGwyKTsKLQkJCXJlZyB8PSBCSVQo OCk7CQkvKiBlbmFibGUgaGVhcnRiZWF0IHRpbWVyICovCi0JCQlyZWcgfD0gQklUKDApOwkJLyog ZW5hYmxlIFdEIHRpbWVyICovCi0JCQlEUFVfUkVHX1dSSVRFKGMsIHdkX2N0bDIsIHJlZyk7Ci0J CX0KKwkJRFBVX1JFR19XUklURShjLCB3ZF9sb2FkX3ZhbHVlLAorCQkJQ0FMQ1VMQVRFX1dEX0xP QURfVkFMVUUoY2ZnLT5mcmFtZV9yYXRlKSk7CisKKwkJRFBVX1JFR19XUklURShjLCB3ZF9jdGws IEJJVCgwKSk7IC8qIGNsZWFyIHRpbWVyICovCisJCXJlZyA9IERQVV9SRUdfUkVBRChjLCB3ZF9j dGwyKTsKKwkJcmVnIHw9IEJJVCg4KTsJCS8qIGVuYWJsZSBoZWFydGJlYXQgdGltZXIgKi8KKwkJ cmVnIHw9IEJJVCgwKTsJCS8qIGVuYWJsZSBXRCB0aW1lciAqLworCQlEUFVfUkVHX1dSSVRFKGMs IHdkX2N0bDIsIHJlZyk7CiAKIAkJLyogbWFrZSBzdXJlIHRoYXQgdGltZXJzIGFyZSBlbmFibGVk L2Rpc2FibGVkIGZvciB2c3luYyBzdGF0ZSAqLwogCQl3bWIoKTsKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od190b3AuaCBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9od190b3AuaAppbmRleCAxOGU3NmExLi4zNzVjYjdjIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfdG9wLmgKKysrIGIvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3RvcC5oCkBAIC04NCwxNSArODQsMTIg QEAgc3RydWN0IGRwdV9kYW5nZXJfc2FmZV9zdGF0dXMgewogICogQGZyYW1lX3JhdGU6IERpc3Bs YXkgZnJhbWUgcmF0ZQogICogQHBwbnVtYmVyOiBwaW5nIHBvbmcgaW5kZXggYXJyYXkKICAqIEB2 c3luY19zb3VyY2U6IHZzeW5jIHNvdXJjZSBzZWxlY3Rpb24KLSAqIEBpc19kdW1teTogYSBkdW1t eSBzb3VyY2Ugb2YgdnN5bmMgc2VsZWN0aW9uLiBJdCBtdXN0IG5vdCBiZSBzZWxlY3RlZCBmb3IK LSAqICAgICAgICAgICBhbnkgY2FzZSBvdGhlciB0aGFuIGRwdSByc2MgaWRsZSByZXF1ZXN0Lgog ICovCiBzdHJ1Y3QgZHB1X3ZzeW5jX3NvdXJjZV9jZmcgewogCXUzMiBwcF9jb3VudDsKIAl1MzIg ZnJhbWVfcmF0ZTsKIAl1MzIgcHBudW1iZXJbUElOR1BPTkdfTUFYXTsKIAl1MzIgdnN5bmNfc291 cmNlOwotCWJvb2wgaXNfZHVtbXk7CiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZHB1X2RiZy5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfZGJnLmMKaW5kZXgg ODExOGZiNy4uMzQxYjU5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfZGJn LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfZGJnLmMKQEAgLTY3LDcgKzY3LDYgQEAK IC8qIHByaW50IGRlYnVnIHJhbmdlcyBpbiBncm91cHMgb2YgNCB1MzJzICovCiAjZGVmaW5lIFJF R19EVU1QX0FMSUdOCQkxNgogCi0jZGVmaW5lIFJTQ19ERUJVR19NVVhfU0VMX1NETTg0NSA5CiAv KioKICAqIHN0cnVjdCBkcHVfZGJnX3JlZ19vZmZzZXQgLSB0cmFja2luZyBmb3Igc3RhcnQgYW5k IGVuZCBvZiByZWdpb24KICAqIEBzdGFydDogc3RhcnQgb2Zmc2V0CkBAIC0yMzgsMjkgKzIzNyw2 IEBAIHN0YXRpYyB2b2lkIF9kcHVfZGVidWdfYnVzX3BwYjFfZHVtcCh2b2lkIF9faW9tZW0gKm1l bV9iYXNlLAogCQkJZW50cnktPndyX2FkZHIsIGVudHJ5LT5ibG9ja19pZCwgZW50cnktPnRlc3Rf aWQsIHZhbCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9kcHVfZGVidWdfYnVzX2F4aV9kdW1wX3NkbTg0 NSh2b2lkIF9faW9tZW0gKm1lbV9iYXNlLAotCQlzdHJ1Y3QgZHB1X2RlYnVnX2J1c19lbnRyeSAq ZW50cnksIHUzMiB2YWwpCi17Ci0JdTMyIHN0YXR1cywgaTsKLQotCWlmICghbWVtX2Jhc2UgfHwg IWVudHJ5KQotCQlyZXR1cm47Ci0KLQlmb3IgKGkgPSAwOyBpIDw9IFJTQ19ERUJVR19NVVhfU0VM X1NETTg0NTsgaSsrKSB7Ci0JCS8vZHB1X3JzY19kZWJ1Z19kdW1wKGkpOwotCi0JCS8qIG1ha2Ug c3VyZSB0aGF0IG11eF9zZWwgdXBkYXRlZCAqLwotCQl3bWIoKTsKLQotCQkvKiByZWFkIHN0YXR1 cyBhZ2FpbiBhZnRlciByc2Mgcm91dGVzIHRoZSBkZWJ1ZyBidXMgKi8KLQkJc3RhdHVzID0gcmVh ZGxfcmVsYXhlZChtZW1fYmFzZSArIERCR0JVU19EU1BQX1NUQVRVUyk7Ci0KLQkJZGV2X2Vycihk cHVfZGJnX2Jhc2UuZGV2LCAicnNjIG11eF9zZWw6JWQgMHgleCAlZCAlZCAweCV4XG4iLAotCQkJ aSwgZW50cnktPndyX2FkZHIsIGVudHJ5LT5ibG9ja19pZCwKLQkJCWVudHJ5LT50ZXN0X2lkLCBz dGF0dXMpOwotCX0KLX0KLQogc3RhdGljIHN0cnVjdCBkcHVfZGVidWdfYnVzX2VudHJ5IGRiZ19i dXNfZHB1Xzg5OThbXSA9IHsKIAogCS8qIFVucGFjayAwIHNzcHAgMCovCkBAIC0yMDE0LDkgKzE5 OTAsNiBAQCBzdGF0aWMgdm9pZCBfZHB1X2RlYnVnX2J1c19heGlfZHVtcF9zZG04NDUodm9pZCBf X2lvbWVtICptZW1fYmFzZSwKIAl7IERCR0JVU19QRVJJUEgsIDcxLCAzfSwKIAl7IERCR0JVU19Q RVJJUEgsIDcxLCA0fSwKIAl7IERCR0JVU19QRVJJUEgsIDcxLCA1fSwKLQotCS8qIGF4aSAtIHNo b3VsZCBiZSBsYXN0IGVudHJ5ICovCi0JeyBEQkdCVVNfQVhJX0lOVEYsIDYyLCAwLCBfZHB1X2Rl YnVnX2J1c19heGlfZHVtcF9zZG04NDV9LAogfTsKIAogc3RhdGljIHN0cnVjdCB2YmlmX2RlYnVn X2J1c19lbnRyeSB2YmlmX2RiZ19idXNfbXNtODk5OFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL21zbS9kcHVfZGJnLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9kYmcuaApp bmRleCA5ZTNiMGViLi43MTBlOTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rw dV9kYmcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9kYmcuaApAQCAtMzE2LDEyICsz MTYsNiBAQCBpbnQgZHB1X2V2dGxvZ19nZXRfZmlsdGVyKHN0cnVjdCBkcHVfZGJnX2V2dGxvZyAq ZXZ0bG9nLCBpbnQgaW5kZXgsCiAJCWNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnN6KTsKIAogLyoqCi0g KiBkcHVfcnNjX2RlYnVnX2R1bXAgLSBkcHUgcnNjIGRlYnVnIGR1bXAgc3RhdHVzCi0gKiBAbXV4 X3NlbDoJc2VsZWN0IG11eCBvbiByc2MgZGVidWcgYnVzCi0gKi8KLXZvaWQgZHB1X3JzY19kZWJ1 Z19kdW1wKHUzMiBtdXhfc2VsKTsKLQotLyoqCiAgKiBkc2lfY3RybF9kZWJ1Z19kdW1wIC0gZHVt cCBkc2kgZGVidWcgZHVtcCBzdGF0dXMKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGRzaV9jdHJs X2RlYnVnX2R1bXAodm9pZCkge30KQEAgLTQwNywxMCArNDAxLDYgQEAgc3RhdGljIGlubGluZSBp bnQgZHB1X2V2dGxvZ19nZXRfZmlsdGVyKHN0cnVjdCBkcHVfZGJnX2V2dGxvZyAqZXZ0bG9nLAog CXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZHB1X3JzY19kZWJ1Z19k dW1wKHUzMiBtdXhfc2VsKQotewotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgZHNpX2N0cmxfZGVi dWdfZHVtcCh2b2lkKQogewogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVf cG93ZXJfaGFuZGxlLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9wb3dlcl9oYW5kbGUuYwpp bmRleCBhNTJiZTg2Li40ZTBmMzcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rw dV9wb3dlcl9oYW5kbGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9wb3dlcl9oYW5k bGUuYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21zbS1idXMtYm9hcmQuaD4K ICNlbmRpZgogI2luY2x1ZGUgPGxpbnV4L2RwdV9pb191dGlsLmg+Ci0jaW5jbHVkZSA8bGludXgv ZHB1X3JzYy5oPgogCiAjaW5jbHVkZSAiZHB1X3Bvd2VyX2hhbmRsZS5oIgogI2luY2x1ZGUgImRw dV90cmFjZS5oIgpAQCAtNTcsMzIgKzU2LDYgQEAgc3RhdGljIHZvaWQgZHB1X3Bvd2VyX2V2ZW50 X3RyaWdnZXJfbG9ja2VkKHN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxlLAogCX0KIH0K IAotc3RhdGljIGludCBkcHVfcG93ZXJfcnNjX3VwZGF0ZShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRs ZSAqcGhhbmRsZSwgYm9vbCBlbmFibGUpCi17Ci0JdTMyIHJzY19zdGF0ZTsKLQlpbnQgcmV0ID0g MDsKLQotCS8qIGNyZWF0ZXMgdGhlIHJzYyBjbGllbnQgb24gdGhlIGZpcnN0IGVuYWJsZSAqLwot CWlmICghcGhhbmRsZS0+cnNjX2NsaWVudF9pbml0KSB7Ci0JCXBoYW5kbGUtPnJzY19jbGllbnQg PSBkcHVfcnNjX2NsaWVudF9jcmVhdGUoRFBVX1JTQ19JTkRFWCwKLQkJCQkiZHB1X3Bvd2VyX2hh bmRsZSIsIGZhbHNlKTsKLQkJaWYgKElTX0VSUl9PUl9OVUxMKHBoYW5kbGUtPnJzY19jbGllbnQp KSB7Ci0JCQlwcl9kZWJ1ZygiZHB1IHJzYyBjbGllbnQgY3JlYXRlIGZhaWxlZCA6JWxkXG4iLAot CQkJCQkJUFRSX0VSUihwaGFuZGxlLT5yc2NfY2xpZW50KSk7Ci0JCQlwaGFuZGxlLT5yc2NfY2xp ZW50ID0gTlVMTDsKLQkJfQotCQlwaGFuZGxlLT5yc2NfY2xpZW50X2luaXQgPSB0cnVlOwotCX0K LQotCXJzY19zdGF0ZSA9IGVuYWJsZSA/IERQVV9SU0NfQ0xLX1NUQVRFIDogRFBVX1JTQ19JRExF X1NUQVRFOwotCi0JaWYgKHBoYW5kbGUtPnJzY19jbGllbnQpCi0JCXJldCA9IGRwdV9yc2NfY2xp ZW50X3N0YXRlX3VwZGF0ZShwaGFuZGxlLT5yc2NfY2xpZW50LAotCQkJcnNjX3N0YXRlLCBOVUxM LCBEUFVfUlNDX0lOVkFMSURfQ1JUQ19JRCwgTlVMTCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCiBz dHJ1Y3QgZHB1X3Bvd2VyX2NsaWVudCAqZHB1X3Bvd2VyX2NsaWVudF9jcmVhdGUoCiAJc3RydWN0 IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUsIGNoYXIgKmNsaWVudF9uYW1lKQogewpAQCAtNzYx LDkgKzczNCw2IEBAIGludCBkcHVfcG93ZXJfcmVzb3VyY2VfaW5pdChzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2LAogCUlOSVRfTElTVF9IRUFEKCZwaGFuZGxlLT5wb3dlcl9jbGllbnRfY2xp c3QpOwogCUlOSVRfTElTVF9IRUFEKCZwaGFuZGxlLT5ldmVudF9saXN0KTsKIAotCXBoYW5kbGUt PnJzY19jbGllbnQgPSBOVUxMOwotCXBoYW5kbGUtPnJzY19jbGllbnRfaW5pdCA9IGZhbHNlOwot CiAJbXV0ZXhfaW5pdCgmcGhhbmRsZS0+cGhhbmRsZV9sb2NrKTsKIAogCXJldHVybiByYzsKQEAg LTg0MCw4ICs4MTAsNiBAQCB2b2lkIGRwdV9wb3dlcl9yZXNvdXJjZV9kZWluaXQoc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldiwKIAltcC0+bnVtX3ZyZWcgPSAwOwogCW1wLT5udW1fY2xrID0g MDsKIAotCWlmIChwaGFuZGxlLT5yc2NfY2xpZW50KQotCQlkcHVfcnNjX2NsaWVudF9kZXN0cm95 KHBoYW5kbGUtPnJzY19jbGllbnQpOwogfQogCiBpbnQgZHB1X3Bvd2VyX3Jlc291cmNlX2VuYWJs ZShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKQEAgLTkwNiwyMSArODc0LDEyIEBA IGludCBkcHVfcG93ZXJfcmVzb3VyY2VfZW5hYmxlKHN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpw aGFuZGxlLAogCQkJCWdvdG8gZGF0YV9idXNfaGRsX2VycjsKIAkJCX0KIAkJfQotCQkvKgotCQkg KiAtIFdoZW4gdGhlIHRhcmdldCBpcyBSU0NDIGVuYWJsZWQsIHJlZ3VsYXRvciBzaG91bGQKLQkJ ICogICBiZSBlbmFibGVkIGJ5IHRoZSBzL3cgb25seSBmb3IgdGhlIGZpcnN0IHRpbWUgZHVyaW5n Ci0JCSAqICAgYm9vdHVwLiBBZnRlciB0aGF0LCBSU0NDIGhhcmR3YXJlIHRha2VzIGNhcmUgb2Yg ZW5hYmxpbmcvCi0JCSAqICAgZGlzYWJsaW5nIGl0LgotCQkgKiAtIFdoZW4gdGhlIHRhcmdldCBp cyBub3QgUlNDQyBlbmFibGVkLCByZWd1bGF0b3Igc2hvdWxkCi0JCSAqICAgYmUgdG90YWxseSBo YW5kbGVkIGJ5IHRoZSBzb2Z0d2FyZS4KLQkJICovCi0JCWlmICghcGhhbmRsZS0+cnNjX2NsaWVu dCkgewotCQkJcmMgPSBtc21fZHNzX2VuYWJsZV92cmVnKG1wLT52cmVnX2NvbmZpZywgbXAtPm51 bV92cmVnLAotCQkJCQkJCQkJZW5hYmxlKTsKLQkJCWlmIChyYykgewotCQkJCXByX2VycigiZmFp bGVkIHRvIGVuYWJsZSB2cmVncyByYz0lZFxuIiwgcmMpOwotCQkJCWdvdG8gdnJlZ19lcnI7Ci0J CQl9CisKKwkJcmMgPSBtc21fZHNzX2VuYWJsZV92cmVnKG1wLT52cmVnX2NvbmZpZywgbXAtPm51 bV92cmVnLAorCQkJCQkJCQllbmFibGUpOworCQlpZiAocmMpIHsKKwkJCXByX2VycigiZmFpbGVk IHRvIGVuYWJsZSB2cmVncyByYz0lZFxuIiwgcmMpOworCQkJZ290byB2cmVnX2VycjsKIAkJfQog CiAJCXJjID0gZHB1X3Bvd2VyX3JlZ19idXNfdXBkYXRlKHBoYW5kbGUtPnJlZ19idXNfaGRsLApA QCAtOTMwLDEyICs4ODksNiBAQCBpbnQgZHB1X3Bvd2VyX3Jlc291cmNlX2VuYWJsZShzdHJ1Y3Qg ZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKIAkJCWdvdG8gcmVnX2J1c19oZGxfZXJyOwogCQl9 CiAKLQkJcmMgPSBkcHVfcG93ZXJfcnNjX3VwZGF0ZShwaGFuZGxlLCB0cnVlKTsKLQkJaWYgKHJj KSB7Ci0JCQlwcl9lcnIoImZhaWxlZCB0byB1cGRhdGUgcnNjXG4iKTsKLQkJCWdvdG8gcnNjX2Vy cjsKLQkJfQotCiAJCXJjID0gbXNtX2Rzc19lbmFibGVfY2xrKG1wLT5jbGtfY29uZmlnLCBtcC0+ bnVtX2NsaywgZW5hYmxlKTsKIAkJaWYgKHJjKSB7CiAJCQlwcl9lcnIoImNsb2NrIGVuYWJsZSBm YWlsZWQgcmM6JWRcbiIsIHJjKTsKQEAgLTk1MSwxNCArOTA0LDExIEBAIGludCBkcHVfcG93ZXJf cmVzb3VyY2VfZW5hYmxlKHN0cnVjdCBkcHVfcG93ZXJfaGFuZGxlICpwaGFuZGxlLAogCiAJCW1z bV9kc3NfZW5hYmxlX2NsayhtcC0+Y2xrX2NvbmZpZywgbXAtPm51bV9jbGssIGVuYWJsZSk7CiAK LQkJZHB1X3Bvd2VyX3JzY191cGRhdGUocGhhbmRsZSwgZmFsc2UpOwotCiAJCWRwdV9wb3dlcl9y ZWdfYnVzX3VwZGF0ZShwaGFuZGxlLT5yZWdfYnVzX2hkbCwKIAkJCQkJCQltYXhfdXNlY2FzZV9u ZHgpOwogCi0JCWlmICghcGhhbmRsZS0+cnNjX2NsaWVudCkKLQkJCW1zbV9kc3NfZW5hYmxlX3Zy ZWcobXAtPnZyZWdfY29uZmlnLCBtcC0+bnVtX3ZyZWcsCi0JCQkJCQkJCQllbmFibGUpOworCQlt c21fZHNzX2VuYWJsZV92cmVnKG1wLT52cmVnX2NvbmZpZywgbXAtPm51bV92cmVnLAorCQkJCQkJ CWVuYWJsZSk7CiAJCWZvciAoaSA9IDAgOyBpIDwgRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX01B WDsgaSsrKQogCQkJZHB1X3Bvd2VyX2RhdGFfYnVzX3VwZGF0ZSgmcGhhbmRsZS0+ZGF0YV9idXNf aGFuZGxlW2ldLAogCQkJCQllbmFibGUpOwpAQCAtOTY3LDEzICs5MTcsMTIgQEAgaW50IGRwdV9w b3dlcl9yZXNvdXJjZV9lbmFibGUoc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgKnBoYW5kbGUsCiAJ CQkJRFBVX1BPV0VSX0VWRU5UX1BPU1RfRElTQUJMRSk7CiAJfQogCisJZ290byBlbmQ7CisKIGNs a19lcnI6Ci0JZHB1X3Bvd2VyX3JzY191cGRhdGUocGhhbmRsZSwgZmFsc2UpOwotcnNjX2VycjoK IAlkcHVfcG93ZXJfcmVnX2J1c191cGRhdGUocGhhbmRsZS0+cmVnX2J1c19oZGwsIHByZXZfdXNl Y2FzZV9uZHgpOwogcmVnX2J1c19oZGxfZXJyOgotCWlmICghcGhhbmRsZS0+cnNjX2NsaWVudCkK LQkJbXNtX2Rzc19lbmFibGVfdnJlZyhtcC0+dnJlZ19jb25maWcsIG1wLT5udW1fdnJlZywgMCk7 CisJbXNtX2Rzc19lbmFibGVfdnJlZyhtcC0+dnJlZ19jb25maWcsIG1wLT5udW1fdnJlZywgMCk7 CiB2cmVnX2VycjoKIAlmb3IgKGkgPSAwIDsgaSA8IERQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9N QVg7IGkrKykKIAkJZHB1X3Bvd2VyX2RhdGFfYnVzX3VwZGF0ZSgmcGhhbmRsZS0+ZGF0YV9idXNf aGFuZGxlW2ldLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHB1X3Bvd2Vy X2hhbmRsZS5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfcG93ZXJfaGFuZGxlLmgKaW5kZXgg MjVhMDBiMS4uMWVkYWU1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfcG93 ZXJfaGFuZGxlLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfcG93ZXJfaGFuZGxlLmgK QEAgLTE1NSw4ICsxNTUsNiBAQCBzdHJ1Y3QgZHB1X3Bvd2VyX2V2ZW50IHsKICAqIEByZWdfYnVz X2hkbDogY3VycmVudCByZWdpc3RlciBidXMgaGFuZGxlCiAgKiBAZGF0YV9idXNfaGFuZGxlOiBj b250ZXh0IHN0cnVjdHVyZSBmb3IgZGF0YSBidXMgY29udHJvbAogICogQGV2ZW50X2xpc3Q6IGN1 cnJlbnQgcG93ZXIgaGFuZGxlIGV2ZW50IGxpc3QKLSAqIEByc2NfY2xpZW50OiBkcHUgcnNjIGNs aWVudCBwb2ludGVyCi0gKiBAcnNjX2NsaWVudF9pbml0OiBib29sZWFuIHRvIGNvbnRyb2wgcnNj IGNsaWVudCBjcmVhdGUKICAqLwogc3RydWN0IGRwdV9wb3dlcl9oYW5kbGUgewogCXN0cnVjdCBk c3NfbW9kdWxlX3Bvd2VyIG1wOwpAQCAtMTY4LDggKzE2Niw2IEBAIHN0cnVjdCBkcHVfcG93ZXJf aGFuZGxlIHsKIAlzdHJ1Y3QgZHB1X3Bvd2VyX2RhdGFfYnVzX2hhbmRsZSBkYXRhX2J1c19oYW5k bGUKIAkJW0RQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9NQVhdOwogCXN0cnVjdCBsaXN0X2hlYWQg ZXZlbnRfbGlzdDsKLQlzdHJ1Y3QgZHB1X3JzY19jbGllbnQgKnJzY19jbGllbnQ7Ci0JYm9vbCBy c2NfY2xpZW50X2luaXQ7CiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9t c20vZHB1X3JzYy5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfcnNjLmMKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDY3YmY3OWQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJt L21zbS9kcHVfcnNjLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzY3ICswLDAgQEAKLS8qIENvcHly aWdodCAoYykgMjAxNi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNl cnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24g MiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqLwotCi0jZGVmaW5lIHByX2ZtdChmbXQpCSJbZHB1X3Jz YzolczolZF06ICIgZm10LCBfX2Z1bmNfXywgX19MSU5FX18KLQotI2luY2x1ZGUgPGxpbnV4L2tl cm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9vZi5o PgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3Mu aD4KLSNpbmNsdWRlIDxsaW51eC9jb21wb25lbnQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+ Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5o PgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCi0jaW5jbHVkZSA8c29jL3Fjb20vcnBtaC5o PgotI2luY2x1ZGUgPGRybS9kcm1QLmg+Ci0jaW5jbHVkZSA8ZHJtL2RybV9pcnEuaD4KLSNpbmNs dWRlICJkcHVfcnNjX3ByaXYuaCIKLSNpbmNsdWRlICJkcHVfZGJnLmgiCi0KLSNkZWZpbmUgRFBV X1JTQ19EUlZfREJHX05BTUUJCSJkcHVfcnNjX2RydiIKLSNkZWZpbmUgRFBVX1JTQ19XUkFQUEVS X0RCR19OQU1FCSJkcHVfcnNjX3dyYXBwZXIiCi0KLS8qIHdvcnN0IGNhc2UgdGltZSB0byBleGVj dXRlIHRoZSBvbmUgdGNzIHZvdGUoc2xlZXAvd2FrZSkgLSB+MW1zICovCi0jZGVmaW5lIFNJTkdM RV9UQ1NfRVhFQ1VUSU9OX1RJTUUJCQkJMTA2NDAwMAotCi0vKiB0aGlzIHRpbWUgaXMgfjFtcyAt IG9ubHkgd2FrZSB0Y3MgaW4gYW55IG1vZGUgKi8KLSNkZWZpbmUgUlNDX0JBQ0tPRkZfVElNRV9O UwkJIChTSU5HTEVfVENTX0VYRUNVVElPTl9USU1FICsgMTAwKQotCi0vKiB0aGlzIHRpbWUgaXMg fjFtcyAtIG9ubHkgd2FrZSBUQ1MgaW4gbW9kZS0wICovCi0jZGVmaW5lIFJTQ19NT0RFX1RIUkVT SE9MRF9USU1FX0lOX05TCShTSU5HTEVfVENTX0VYRUNVVElPTl9USU1FICsgMTAwKQotCi0vKiB0 aGlzIHRpbWUgaXMgfjJtcyAtIHNsZWVwKyB3YWtlIFRDUyBpbiBtb2RlLTEgKi8KLSNkZWZpbmUg UlNDX1RJTUVfU0xPVF8wX05TCQkoKFNJTkdMRV9UQ1NfRVhFQ1VUSU9OX1RJTUUgKiAyKSArIDEw MCkKLQotI2RlZmluZSBERUZBVUxUX1BBTkVMX0ZQUwkJNjAKLSNkZWZpbmUgREVGQVVMVF9QQU5F TF9KSVRURVJfTlVNRVJBVE9SCTIKLSNkZWZpbmUgREVGQVVMVF9QQU5FTF9KSVRURVJfREVOT01J TkFUT1IgMQotI2RlZmluZSBERUZBVUxUX1BBTkVMX1BSRUZJTExfTElORVMJMjUKLSNkZWZpbmUg REVGQVVMVF9QQU5FTF9WVE9UQUwJCSg0ODAgKyBERUZBVUxUX1BBTkVMX1BSRUZJTExfTElORVMp Ci0jZGVmaW5lIFRJQ0tTX0lOX05BTk9fU0VDT05ECQkxMDAwMDAwMDAwCi0KLSNkZWZpbmUgTUFY X0JVRkZFUl9TSVpFIDI1NgotCi0jZGVmaW5lIFRSWV9DTURfTU9ERV9TV0lUQ0gJCTB4RkZGRgot I2RlZmluZSBUUllfQ0xLX01PREVfU1dJVENICQkweEZGRkUKLSNkZWZpbmUgU1RBVEVfVVBEQVRF X05PVF9BTExPV0VECTB4RkZGRAotCi0vKiBQcmltYXJ5IHBhbmVsIHdvcnN0IGNhc2UgVlNZTkMg ZXhwZWN0ZWQgdG8gYmUgbm8gbGVzcyB0aGFuIDMwZnBzICovCi0jZGVmaW5lIFBSSU1BUllfVkJM QU5LX1dPUlNUX0NBU0VfTVMgMzQKLQotc3RhdGljIHN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzY19w cnZfbGlzdFtNQVhfUlNDX0NPVU5UXTsKLQotLyoqCi0gKiBkcHVfcnNjX2NsaWVudF9jcmVhdGUo KSAtIGNyZWF0ZSB0aGUgY2xpZW50IGZvciBkcHUgcnNjLgotICogRGlmZmVyZW50IGRpc3BsYXlz IGxpa2UgRFNJLCBIRE1JLCBEUCwgV0IsIGV0YyBzaG91bGQgY2FsbCB0aGlzCi0gKiBhcGkgdG8g cmVnaXN0ZXIgdGhlaXIgdm90ZSBmb3IgcnBtaC4gVGhleSBzdGlsbCBuZWVkIHRvIHZvdGUgZm9y Ci0gKiBwb3dlciBoYW5kbGUgdG8gZ2V0IHRoZSBjbG9ja3MuCi0KLSAqIEByc2NfaW5kZXg6ICAg QSBjbGllbnQgd2lsbCBiZSBjcmVhdGVkIG9uIHRoaXMgUlNDLiBBcyBvZiBub3cgb25seQotICog ICAgICAgICAgICAgICBEUFVfUlNDX0lOREVYIGlzIHZhbGlkIHJzYyBpbmRleC4KLSAqIEBuYW1l OgkgQ2FsbGVyIG5lZWRzIHRvIHByb3ZpZGUgc29tZSB2YWxpZCBzdHJpbmcgdG8gaWRlbnRpZnkK LSAqICAgICAgICAgICAgICAgdGhlIGNsaWVudC4gInByaW1hcnkiLCAiZHAiLCAiaGRtaSIgYXJl IHN1Z2dlc3RlZCBuYW1lLgotICogQGlzX3ByaW1hcnk6CSBDYWxsZXIgbmVlZHMgdG8gcHJvdmlk ZSBpbmZvcm1hdGlvbiBpZiBjbGllbnQgaXMgcHJpbWFyeQotICogICAgICAgICAgICAgICBvciBu b3QuIFByaW1hcnkgY2xpZW50IHZvdGVzIHdpbGwgYmUgcmVkaXJlY3RlZCB0bwotICogICAgICAg ICAgICAgICBkaXNwbGF5IHJzYy4KLSAqCi0gKiBSZXR1cm46IGNsaWVudCBub2RlIHBvaW50ZXIu Ci0gKi8KLXN0cnVjdCBkcHVfcnNjX2NsaWVudCAqZHB1X3JzY19jbGllbnRfY3JlYXRlKHUzMiBy c2NfaW5kZXgsIGNoYXIgKmNsaWVudF9uYW1lLAotCWJvb2wgaXNfcHJpbWFyeV9jbGllbnQpCi17 Ci0Jc3RydWN0IGRwdV9yc2NfY2xpZW50ICpjbGllbnQ7Ci0Jc3RydWN0IGRwdV9yc2NfcHJpdiAq cnNjOwotCXN0YXRpYyBpbnQgaWQ7Ci0KLQlpZiAoIWNsaWVudF9uYW1lKSB7Ci0JCXByX2Vycigi Y2xpZW50IG5hbWUgaXMgbnVsbC0gbm90IHN1cHBvcnRlZFxuIik7Ci0JCXJldHVybiBFUlJfUFRS KC1FSU5WQUwpOwotCX0gZWxzZSBpZiAocnNjX2luZGV4ID49IE1BWF9SU0NfQ09VTlQpIHsKLQkJ cHJfZXJyKCJpbnZhbGlkIHJzYyBpbmRleFxuIik7Ci0JCXJldHVybiBFUlJfUFRSKC1FSU5WQUwp OwotCX0gZWxzZSBpZiAoIXJzY19wcnZfbGlzdFtyc2NfaW5kZXhdKSB7Ci0JCXByX2VycigicnNj IG5vdCBwcm9iZWQgeWV0IG9yIG5vdCBhdmFpbGFibGVcbiIpOwotCQlyZXR1cm4gTlVMTDsKLQl9 Ci0KLQlyc2MgPSByc2NfcHJ2X2xpc3RbcnNjX2luZGV4XTsKLQljbGllbnQgPSBremFsbG9jKHNp emVvZihzdHJ1Y3QgZHB1X3JzY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNsaWVudCkK LQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0KLQltdXRleF9sb2NrKCZyc2MtPmNsaWVudF9s b2NrKTsKLQlzdHJsY3B5KGNsaWVudC0+bmFtZSwgY2xpZW50X25hbWUsIE1BWF9SU0NfQ0xJRU5U X05BTUVfTEVOKTsKLQljbGllbnQtPmN1cnJlbnRfc3RhdGUgPSBEUFVfUlNDX0lETEVfU1RBVEU7 Ci0JY2xpZW50LT5yc2NfaW5kZXggPSByc2NfaW5kZXg7Ci0JY2xpZW50LT5pZCA9IGlkOwotCWlm IChpc19wcmltYXJ5X2NsaWVudCkKLQkJcnNjLT5wcmltYXJ5X2NsaWVudCA9IGNsaWVudDsKLQlw cl9kZWJ1ZygiY2xpZW50ICVzIHJzYyBpbmRleDolZCBwcmltYXJ5OiVkXG4iLCBjbGllbnRfbmFt ZSwKLQkJCQkJCXJzY19pbmRleCwgaXNfcHJpbWFyeV9jbGllbnQpOwotCi0JbGlzdF9hZGQoJmNs aWVudC0+bGlzdCwgJnJzYy0+Y2xpZW50X2xpc3QpOwotCWlkKys7Ci0JbXV0ZXhfdW5sb2NrKCZy c2MtPmNsaWVudF9sb2NrKTsKLQotCXJldHVybiBjbGllbnQ7Ci19Ci1FWFBPUlRfU1lNQk9MKGRw dV9yc2NfY2xpZW50X2NyZWF0ZSk7Ci0KLS8qKgotICogZHB1X3JzY19jbGllbnRfZGVzdHJveSgp IC0gRGVzdHJveSB0aGUgZHB1IHJzYyBjbGllbnQuCi0gKgotICogQGNsaWVudDoJIENsaWVudCBw b2ludGVyIHByb3ZpZGVkIGJ5IGRwdV9yc2NfY2xpZW50X2NyZWF0ZSgpLgotICoKLSAqIFJldHVy bjogbm9uZQotICovCi12b2lkIGRwdV9yc2NfY2xpZW50X2Rlc3Ryb3koc3RydWN0IGRwdV9yc2Nf Y2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IGRwdV9yc2NfcHJpdiAqcnNjOwotCWVudW0gZHB1 X3JzY19zdGF0ZSBzdGF0ZTsKLQotCWlmICghY2xpZW50KSB7Ci0JCXByX2RlYnVnKCJpbnZhbGlk IGNsaWVudFxuIik7Ci0JCWdvdG8gZW5kOwotCX0gZWxzZSBpZiAoY2xpZW50LT5yc2NfaW5kZXgg Pj0gTUFYX1JTQ19DT1VOVCkgewotCQlwcl9lcnIoImludmFsaWQgcnNjIGluZGV4XG4iKTsKLQkJ Z290byBlbmQ7Ci0JfQotCi0JcHJfZGVidWcoImNsaWVudCAlcyBkZXN0cm95ZWRcbiIsIGNsaWVu dC0+bmFtZSk7Ci0JcnNjID0gcnNjX3Bydl9saXN0W2NsaWVudC0+cnNjX2luZGV4XTsKLQlpZiAo IXJzYykKLQkJZ290byBlbmQ7Ci0KLQltdXRleF9sb2NrKCZyc2MtPmNsaWVudF9sb2NrKTsKLQlz dGF0ZSA9IGNsaWVudC0+Y3VycmVudF9zdGF0ZTsKLQltdXRleF91bmxvY2soJnJzYy0+Y2xpZW50 X2xvY2spOwotCi0JaWYgKHN0YXRlICE9IERQVV9SU0NfSURMRV9TVEFURSkgewotCQlpbnQgd2Fp dF92YmxhbmtfY3J0Y19pZDsKLQotCQlkcHVfcnNjX2NsaWVudF9zdGF0ZV91cGRhdGUoY2xpZW50 LCBEUFVfUlNDX0lETEVfU1RBVEUsIE5VTEwsCi0JCQkJRFBVX1JTQ19JTlZBTElEX0NSVENfSUQs ICZ3YWl0X3ZibGFua19jcnRjX2lkKTsKLQotCQkvKiBpZiB2Ymxhbmsgd2FpdCByZXF1aXJlZCBh dCBzaHV0ZG93biwgdXNlIGEgc2ltcGxlIHNsZWVwICovCi0JCWlmICh3YWl0X3ZibGFua19jcnRj X2lkICE9IERQVV9SU0NfSU5WQUxJRF9DUlRDX0lEKSB7Ci0JCQlwcl9lcnIoInVuZXhwZWN0ZWQg c2xlZXAgcmVxdWlyZWQgb24gY3J0YyAlZCBhdCByc2MgY2xpZW50IGRlc3Ryb3lcbiIsCi0JCQkJ CXdhaXRfdmJsYW5rX2NydGNfaWQpOwotCQkJRFBVX0VWVDMyKGNsaWVudC0+aWQsIHN0YXRlLCBy c2MtPmN1cnJlbnRfc3RhdGUsCi0JCQkJCWNsaWVudC0+Y3J0Y19pZCwgd2FpdF92YmxhbmtfY3J0 Y19pZCwKLQkJCQkJRFBVX0VWVExPR19FUlJPUik7Ci0JCQltc2xlZXAoUFJJTUFSWV9WQkxBTktf V09SU1RfQ0FTRV9NUyk7Ci0JCX0KLQl9Ci0JbXV0ZXhfbG9jaygmcnNjLT5jbGllbnRfbG9jayk7 Ci0JbGlzdF9kZWxfaW5pdCgmY2xpZW50LT5saXN0KTsKLQltdXRleF91bmxvY2soJnJzYy0+Y2xp ZW50X2xvY2spOwotCi0Ja2ZyZWUoY2xpZW50KTsKLWVuZDoKLQlyZXR1cm47Ci19Ci1FWFBPUlRf U1lNQk9MKGRwdV9yc2NfY2xpZW50X2Rlc3Ryb3kpOwotCi1zdHJ1Y3QgZHB1X3JzY19ldmVudCAq ZHB1X3JzY19yZWdpc3Rlcl9ldmVudChpbnQgcnNjX2luZGV4LCB1aW50MzJfdCBldmVudF90eXBl LAotCQl2b2lkICgqY2JfZnVuYykodWludDMyX3QgZXZlbnRfdHlwZSwgdm9pZCAqdXNyKSwgdm9p ZCAqdXNyKQotewotCXN0cnVjdCBkcHVfcnNjX2V2ZW50ICpldnQ7Ci0Jc3RydWN0IGRwdV9yc2Nf cHJpdiAqcnNjOwotCi0JaWYgKHJzY19pbmRleCA+PSBNQVhfUlNDX0NPVU5UKSB7Ci0JCXByX2Vy cigiaW52YWxpZCByc2MgaW5kZXg6JWRcbiIsIHJzY19pbmRleCk7Ci0JCXJldHVybiBFUlJfUFRS KC1FSU5WQUwpOwotCX0gZWxzZSBpZiAoIXJzY19wcnZfbGlzdFtyc2NfaW5kZXhdKSB7Ci0JCXBy X2VycigicnNjIGlkeDolZCBub3QgcHJvYmVkIHlldCBvciBub3QgYXZhaWxhYmxlXG4iLAotCQkJ CQkJCQlyc2NfaW5kZXgpOwotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQl9IGVsc2UgaWYg KCFjYl9mdW5jIHx8ICFldmVudF90eXBlKSB7Ci0JCXByX2Vycigibm8gZXZlbnQgb3IgY2IgZnVu Y1xuIik7Ci0JCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwotCX0KLQotCXJzYyA9IHJzY19wcnZf bGlzdFtyc2NfaW5kZXhdOwotCWV2dCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkcHVfcnNjX2V2 ZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFldnQpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0p OwotCi0JZXZ0LT5ldmVudF90eXBlID0gZXZlbnRfdHlwZTsKLQlldnQtPnJzY19pbmRleCA9IHJz Y19pbmRleDsKLQlldnQtPnVzciA9IHVzcjsKLQlldnQtPmNiX2Z1bmMgPSBjYl9mdW5jOwotCXBy X2RlYnVnKCJldmVudCByZWdpc3RlciB0eXBlOiVkIHJzYyBpbmRleDolZFxuIiwKLQkJCQkJCWV2 ZW50X3R5cGUsIHJzY19pbmRleCk7Ci0KLQltdXRleF9sb2NrKCZyc2MtPmNsaWVudF9sb2NrKTsK LQlsaXN0X2FkZCgmZXZ0LT5saXN0LCAmcnNjLT5ldmVudF9saXN0KTsKLQltdXRleF91bmxvY2so JnJzYy0+Y2xpZW50X2xvY2spOwotCi0JcmV0dXJuIGV2dDsKLX0KLUVYUE9SVF9TWU1CT0woZHB1 X3JzY19yZWdpc3Rlcl9ldmVudCk7Ci0KLXZvaWQgZHB1X3JzY191bnJlZ2lzdGVyX2V2ZW50KHN0 cnVjdCBkcHVfcnNjX2V2ZW50ICpldmVudCkKLXsKLQlzdHJ1Y3QgZHB1X3JzY19wcml2ICpyc2M7 Ci0KLQlpZiAoIWV2ZW50KSB7Ci0JCXByX2RlYnVnKCJpbnZhbGlkIGV2ZW50IGNsaWVudFxuIik7 Ci0JCWdvdG8gZW5kOwotCX0gZWxzZSBpZiAoZXZlbnQtPnJzY19pbmRleCA+PSBNQVhfUlNDX0NP VU5UKSB7Ci0JCXByX2VycigiaW52YWxpZCByc2MgaW5kZXhcbiIpOwotCQlnb3RvIGVuZDsKLQl9 Ci0KLQlwcl9kZWJ1ZygiZXZlbnQgY2xpZW50IGRlc3Ryb3llZFxuIik7Ci0JcnNjID0gcnNjX3By dl9saXN0W2V2ZW50LT5yc2NfaW5kZXhdOwotCWlmICghcnNjKQotCQlnb3RvIGVuZDsKLQotCW11 dGV4X2xvY2soJnJzYy0+Y2xpZW50X2xvY2spOwotCWxpc3RfZGVsX2luaXQoJmV2ZW50LT5saXN0 KTsKLQltdXRleF91bmxvY2soJnJzYy0+Y2xpZW50X2xvY2spOwotCi0Ja2ZyZWUoZXZlbnQpOwot ZW5kOgotCXJldHVybjsKLX0KLUVYUE9SVF9TWU1CT0woZHB1X3JzY191bnJlZ2lzdGVyX2V2ZW50 KTsKLQotYm9vbCBpc19kcHVfcnNjX2F2YWlsYWJsZShpbnQgcnNjX2luZGV4KQotewotCWlmIChy c2NfaW5kZXggPj0gTUFYX1JTQ19DT1VOVCkgewotCQlwcl9lcnIoImludmFsaWQgcnNjIGluZGV4 OiVkXG4iLCByc2NfaW5kZXgpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfSBlbHNlIGlmICghcnNjX3By dl9saXN0W3JzY19pbmRleF0pIHsKLQkJcHJfZXJyKCJyc2MgaWR4OiVkIG5vdCBwcm9iZWQgeWV0 IG9yIG5vdCBhdmFpbGFibGVcbiIsCi0JCQkJCQkJCXJzY19pbmRleCk7Ci0JCXJldHVybiBmYWxz ZTsKLQl9Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLUVYUE9SVF9TWU1CT0woaXNfZHB1X3JzY19hdmFp bGFibGUpOwotCi1lbnVtIGRwdV9yc2Nfc3RhdGUgZ2V0X2RwdV9yc2NfY3VycmVudF9zdGF0ZShp bnQgcnNjX2luZGV4KQotewotCXN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYzsKLQotCWlmIChyc2Nf aW5kZXggPj0gTUFYX1JTQ19DT1VOVCkgewotCQlwcl9lcnIoImludmFsaWQgcnNjIGluZGV4OiVk XG4iLCByc2NfaW5kZXgpOwotCQlyZXR1cm4gRFBVX1JTQ19JRExFX1NUQVRFOwotCX0gZWxzZSBp ZiAoIXJzY19wcnZfbGlzdFtyc2NfaW5kZXhdKSB7Ci0JCXByX2VycigicnNjIGlkeDolZCBub3Qg cHJvYmVkIHlldCBvciBub3QgYXZhaWxhYmxlXG4iLAotCQkJCQkJCQlyc2NfaW5kZXgpOwotCQly ZXR1cm4gRFBVX1JTQ19JRExFX1NUQVRFOwotCX0KLQotCXJzYyA9IHJzY19wcnZfbGlzdFtyc2Nf aW5kZXhdOwotCXJldHVybiByc2MtPmN1cnJlbnRfc3RhdGU7Ci19Ci1FWFBPUlRfU1lNQk9MKGdl dF9kcHVfcnNjX2N1cnJlbnRfc3RhdGUpOwotCi1zdGF0aWMgaW50IGRwdV9yc2NfY2xrX2VuYWJs ZShzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSAqcGhhbmRsZSwKLQlzdHJ1Y3QgZHB1X3Bvd2VyX2Ns aWVudCAqcGNsaWVudCwgYm9vbCBlbmFibGUpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZHNz X21vZHVsZV9wb3dlciAqbXA7Ci0KLQlpZiAoIXBoYW5kbGUgfHwgIXBjbGllbnQpIHsKLQkJcHJf ZXJyKCJpbnZhbGlkIGlucHV0IGFyZ3VtZW50XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot Ci0JbXAgPSAmcGhhbmRsZS0+bXA7Ci0KLQlpZiAoZW5hYmxlKQotCQlwY2xpZW50LT5yZWZjb3Vu dCsrOwotCWVsc2UgaWYgKHBjbGllbnQtPnJlZmNvdW50KQotCQlwY2xpZW50LT5yZWZjb3VudC0t OwotCi0JaWYgKHBjbGllbnQtPnJlZmNvdW50KQotCQlwY2xpZW50LT51c2VjYXNlX25keCA9IFZP VEVfSU5ERVhfTE9XOwotCWVsc2UKLQkJcGNsaWVudC0+dXNlY2FzZV9uZHggPSBWT1RFX0lOREVY X0RJU0FCTEU7Ci0KLQlpZiAocGhhbmRsZS0+Y3VycmVudF91c2VjYXNlX25keCA9PSBwY2xpZW50 LT51c2VjYXNlX25keCkKLQkJZ290byBlbmQ7Ci0KLQlpZiAoZW5hYmxlKSB7Ci0JCXJjID0gbXNt X2Rzc19lbmFibGVfY2xrKG1wLT5jbGtfY29uZmlnLCBtcC0+bnVtX2NsaywgZW5hYmxlKTsKLQkJ aWYgKHJjKSB7Ci0JCQlwcl9lcnIoImNsb2NrIGVuYWJsZSBmYWlsZWQgcmM6JWRcbiIsIHJjKTsK LQkJCWdvdG8gZW5kOwotCQl9Ci0JfSBlbHNlIHsKLQkJbXNtX2Rzc19lbmFibGVfY2xrKG1wLT5j bGtfY29uZmlnLCBtcC0+bnVtX2NsaywgZW5hYmxlKTsKLQl9Ci0KLQlwaGFuZGxlLT5jdXJyZW50 X3VzZWNhc2VfbmR4ID0gcGNsaWVudC0+dXNlY2FzZV9uZHg7Ci0KLWVuZDoKLQlyZXR1cm4gcmM7 Ci19Ci0KLXN0YXRpYyB1MzIgZHB1X3JzY190aW1lcl9jYWxjdWxhdGUoc3RydWN0IGRwdV9yc2Nf cHJpdiAqcnNjLAotCXN0cnVjdCBkcHVfcnNjX2NtZF9jb25maWcgKmNtZF9jb25maWcpCi17Ci0J Y29uc3QgdTMyIGN4b19wZXJpb2RfbnMgPSA1MjsKLQl1NjQgcnNjX2JhY2tvZmZfdGltZV9ucyA9 IFJTQ19CQUNLT0ZGX1RJTUVfTlM7Ci0JdTY0IHJzY19tb2RlX3RocmVzaG9sZF90aW1lX25zID0g UlNDX01PREVfVEhSRVNIT0xEX1RJTUVfSU5fTlM7Ci0JdTY0IHJzY190aW1lX3Nsb3RfMF9ucyA9 IFJTQ19USU1FX1NMT1RfMF9OUzsKLQl1NjQgcnNjX3RpbWVfc2xvdF8xX25zOwotCWNvbnN0IHU2 NCBwZGNfaml0dGVyID0gMjA7IC8qIDIwJSBtb3JlICovCi0KLQl1NjQgZnJhbWVfdGltZV9ucywg ZnJhbWVfaml0dGVyOwotCXU2NCBsaW5lX3RpbWVfbnMsIHByZWZpbGxfdGltZV9uczsKLQl1NjQg cGRjX2JhY2tvZmZfdGltZV9uczsKLQlzNjQgdG90YWw7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAo Y21kX2NvbmZpZykKLQkJbWVtY3B5KCZyc2MtPmNtZF9jb25maWcsIGNtZF9jb25maWcsIHNpemVv ZigqY21kX2NvbmZpZykpOwotCi0JLyogY2FsY3VsYXRlIGZvciA2NDB4NDgwIDYwIGZwcyByZXNv bHV0aW9uIGJ5IGRlZmF1bHQgKi8KLQlpZiAoIXJzYy0+Y21kX2NvbmZpZy5mcHMpCi0JCXJzYy0+ Y21kX2NvbmZpZy5mcHMgPSBERUZBVUxUX1BBTkVMX0ZQUzsKLQlpZiAoIXJzYy0+Y21kX2NvbmZp Zy5qaXR0ZXJfbnVtZXIpCi0JCXJzYy0+Y21kX2NvbmZpZy5qaXR0ZXJfbnVtZXIgPSBERUZBVUxU X1BBTkVMX0pJVFRFUl9OVU1FUkFUT1I7Ci0JaWYgKCFyc2MtPmNtZF9jb25maWcuaml0dGVyX2Rl bm9tKQotCQlyc2MtPmNtZF9jb25maWcuaml0dGVyX2Rlbm9tID0gREVGQVVMVF9QQU5FTF9KSVRU RVJfREVOT01JTkFUT1I7Ci0JaWYgKCFyc2MtPmNtZF9jb25maWcudnRvdGFsKQotCQlyc2MtPmNt ZF9jb25maWcudnRvdGFsID0gREVGQVVMVF9QQU5FTF9WVE9UQUw7Ci0JaWYgKCFyc2MtPmNtZF9j b25maWcucHJlZmlsbF9saW5lcykKLQkJcnNjLT5jbWRfY29uZmlnLnByZWZpbGxfbGluZXMgPSBE RUZBVUxUX1BBTkVMX1BSRUZJTExfTElORVM7Ci0JcHJfZGVidWcoImZyYW1lIGZwczolZCBqaXR0 ZXJfbnVtZXI6JWQgaml0dGVyX2Rlbm9tOiVkIHZ0b3RhbDolZCBwcmVmaWxsIGxpbmVzOiVkXG4i LAotCQlyc2MtPmNtZF9jb25maWcuZnBzLCByc2MtPmNtZF9jb25maWcuaml0dGVyX251bWVyLAot CQlyc2MtPmNtZF9jb25maWcuaml0dGVyX2Rlbm9tLCByc2MtPmNtZF9jb25maWcudnRvdGFsLAot CQlyc2MtPmNtZF9jb25maWcucHJlZmlsbF9saW5lcyk7Ci0KLQkvKiAxIG5hbm8gc2Vjb25kICov Ci0JZnJhbWVfdGltZV9ucyA9IFRJQ0tTX0lOX05BTk9fU0VDT05EOwotCWZyYW1lX3RpbWVfbnMg PSBkaXZfdTY0KGZyYW1lX3RpbWVfbnMsIHJzYy0+Y21kX2NvbmZpZy5mcHMpOwotCi0JZnJhbWVf aml0dGVyID0gZnJhbWVfdGltZV9ucyAqIHJzYy0+Y21kX2NvbmZpZy5qaXR0ZXJfbnVtZXI7Ci0J ZnJhbWVfaml0dGVyID0gZGl2X3U2NChmcmFtZV9qaXR0ZXIsIHJzYy0+Y21kX2NvbmZpZy5qaXR0 ZXJfZGVub20pOwotCS8qIGNvbnZlcnQgaXQgdG8gcGVyY2VudGFnZSAqLwotCWZyYW1lX2ppdHRl ciA9IGRpdl91NjQoZnJhbWVfaml0dGVyLCAxMDApOwotCi0JbGluZV90aW1lX25zID0gZnJhbWVf dGltZV9uczsKLQlsaW5lX3RpbWVfbnMgPSBkaXZfdTY0KGxpbmVfdGltZV9ucywgcnNjLT5jbWRf Y29uZmlnLnZ0b3RhbCk7Ci0JcHJlZmlsbF90aW1lX25zID0gbGluZV90aW1lX25zICogcnNjLT5j bWRfY29uZmlnLnByZWZpbGxfbGluZXM7Ci0KLQl0b3RhbCA9IGZyYW1lX3RpbWVfbnMgLSBmcmFt ZV9qaXR0ZXIgLSBwcmVmaWxsX3RpbWVfbnM7Ci0JaWYgKHRvdGFsIDwgMCkgewotCQlwcl9lcnIo ImludmFsaWQgdG90YWwgdGltZSBwZXJpb2QgdGltZTolbGx1IGppdGVyX3RpbWU6JWxsdSBibGFu a2luZyB0aW1lOiVsbHVcbiIsCi0JCQlmcmFtZV90aW1lX25zLCBmcmFtZV9qaXR0ZXIsIHByZWZp bGxfdGltZV9ucyk7Ci0JCXRvdGFsID0gMDsKLQl9Ci0KLQl0b3RhbCA9IGRpdl91NjQodG90YWws IGN4b19wZXJpb2RfbnMpOwotCXJzYy0+dGltZXJfY29uZmlnLnN0YXRpY193YWtldXBfdGltZV9u cyA9IHRvdGFsOwotCi0JcHJfZGVidWcoImZyYW1lIHRpbWU6JWxsdSBmcmFtZSBqaXRlcl90aW1l OiVsbHVcbiIsCi0JCQlmcmFtZV90aW1lX25zLCBmcmFtZV9qaXR0ZXIpOwotCXByX2RlYnVnKCJs aW5lIHRpbWU6JWxsdSBwcmVmaWxsIHRpbWUgcHM6JWxsdVxuIiwKLQkJCWxpbmVfdGltZV9ucywg cHJlZmlsbF90aW1lX25zKTsKLQlwcl9kZWJ1Zygic3RhdGljIHdha2V1cCB0aW1lOiVsbGQgY3hv OiV1XG4iLCB0b3RhbCwgY3hvX3BlcmlvZF9ucyk7Ci0KLQlwZGNfYmFja29mZl90aW1lX25zID0g cnNjX2JhY2tvZmZfdGltZV9uczsKLQlyc2NfYmFja29mZl90aW1lX25zID0gZGl2X3U2NChyc2Nf YmFja29mZl90aW1lX25zLCBjeG9fcGVyaW9kX25zKTsKLQlyc2MtPnRpbWVyX2NvbmZpZy5yc2Nf YmFja29mZl90aW1lX25zID0gKHUzMikgcnNjX2JhY2tvZmZfdGltZV9uczsKLQotCXBkY19iYWNr b2ZmX3RpbWVfbnMgKj0gcGRjX2ppdHRlcjsKLQlwZGNfYmFja29mZl90aW1lX25zID0gZGl2X3U2 NChwZGNfYmFja29mZl90aW1lX25zLCAxMDApOwotCXJzYy0+dGltZXJfY29uZmlnLnBkY19iYWNr b2ZmX3RpbWVfbnMgPSAodTMyKSBwZGNfYmFja29mZl90aW1lX25zOwotCi0JcnNjX21vZGVfdGhy ZXNob2xkX3RpbWVfbnMgPQotCQkJZGl2X3U2NChyc2NfbW9kZV90aHJlc2hvbGRfdGltZV9ucywg Y3hvX3BlcmlvZF9ucyk7Ci0JcnNjLT50aW1lcl9jb25maWcucnNjX21vZGVfdGhyZXNob2xkX3Rp bWVfbnMKLQkJCQkJPSAodTMyKSByc2NfbW9kZV90aHJlc2hvbGRfdGltZV9uczsKLQotCS8qIHRp bWVfc2xvdF8wIGZvciBtb2RlMCBsYXRlbmN5ICovCi0JcnNjX3RpbWVfc2xvdF8wX25zID0gZGl2 X3U2NChyc2NfdGltZV9zbG90XzBfbnMsIGN4b19wZXJpb2RfbnMpOwotCXJzYy0+dGltZXJfY29u ZmlnLnJzY190aW1lX3Nsb3RfMF9ucyA9ICh1MzIpIHJzY190aW1lX3Nsb3RfMF9uczsKLQotCS8q IHRpbWVfc2xvdF8xIGZvciBtb2RlMSBsYXRlbmN5ICovCi0JcnNjX3RpbWVfc2xvdF8xX25zID0g ZnJhbWVfdGltZV9uczsKLQlyc2NfdGltZV9zbG90XzFfbnMgPSBkaXZfdTY0KHJzY190aW1lX3Ns b3RfMV9ucywgY3hvX3BlcmlvZF9ucyk7Ci0JcnNjLT50aW1lcl9jb25maWcucnNjX3RpbWVfc2xv dF8xX25zID0gKHUzMikgcnNjX3RpbWVfc2xvdF8xX25zOwotCi0JLyogbW9kZSAyIGlzIGluZmlu aXRlICovCi0JcnNjLT50aW1lcl9jb25maWcucnNjX3RpbWVfc2xvdF8yX25zID0gMHhGRkZGRkZG RjsKLQotCS8qIHRpbWVyIHVwZGF0ZSBzaG91bGQgYmUgY2FsbGVkIHdpdGggY2xpZW50IGNhbGwg Ki8KLQlpZiAoY21kX2NvbmZpZyAmJiByc2MtPmh3X29wcy50aW1lcl91cGRhdGUpIHsKLQkJcmV0 ID0gcnNjLT5od19vcHMudGltZXJfdXBkYXRlKHJzYyk7Ci0JCWlmIChyZXQpCi0JCQlwcl9lcnIo ImRwdSByc2M6IGh3IHRpbWVyIHVwZGF0ZSBmYWlsZWQgcmV0OiVkXG4iLCByZXQpOwotCS8qIHJz YyBpbml0IHNob3VsZCBiZSBjYWxsZWQgZHVyaW5nIHJzYyBwcm9iZSAtIG9uZSB0aW1lIG9ubHkg Ki8KLQl9IGVsc2UgaWYgKHJzYy0+aHdfb3BzLmluaXQpIHsKLQkJcmV0ID0gcnNjLT5od19vcHMu aW5pdChyc2MpOwotCQlpZiAocmV0KQotCQkJcHJfZXJyKCJkcHUgcnNjOiBodyBpbml0IGZhaWxl ZCByZXQ6JWRcbiIsIHJldCk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBk cHVfcnNjX3N3aXRjaF90b19pZGxlKHN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYykKLXsKLQlzdHJ1 Y3QgZHB1X3JzY19jbGllbnQgKmNsaWVudDsKLQlpbnQgcmMgPSBTVEFURV9VUERBVEVfTk9UX0FM TE9XRUQ7Ci0JYm9vbCBpZGxlX3N3aXRjaCA9IHRydWU7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5 KGNsaWVudCwgJnJzYy0+Y2xpZW50X2xpc3QsIGxpc3QpCi0JCWlmIChjbGllbnQtPmN1cnJlbnRf c3RhdGUgIT0gRFBVX1JTQ19JRExFX1NUQVRFKSB7Ci0JCQlpZGxlX3N3aXRjaCA9IGZhbHNlOwot CQkJYnJlYWs7Ci0JCX0KLQotCWlmICghaWRsZV9zd2l0Y2gpIHsKLQkJLyoqCi0JCSAqIGZvbGxv d2luZyBjb2RlIG5lZWRzIHRvIHJ1biB0aGUgbG9vcCB0aHJvdWdoIGVhY2gKLQkJICogY2xpZW50 IGJlY2F1c2UgdGhleSBtaWdodCBiZSBpbiBkaWZmZXJlbnQgb3JkZXIKLQkJICogc29ydGluZyBp cyBub3QgcG9zc2libGU7IG9ubHkgcHJlZmVyZW5jZSBpcyBhdmFpbGFibGUKLQkJICovCi0KLQkJ LyogZmlyc3QgY2hlY2sgaWYgYW55IHZpZCBjbGllbnQgYWN0aXZlICovCi0JCWxpc3RfZm9yX2Vh Y2hfZW50cnkoY2xpZW50LCAmcnNjLT5jbGllbnRfbGlzdCwgbGlzdCkKLQkJCWlmIChjbGllbnQt PmN1cnJlbnRfc3RhdGUgPT0gRFBVX1JTQ19WSURfU1RBVEUpCi0JCQkJcmV0dXJuIHJjOwotCi0J CS8qIG5vdyB0cnkgY21kIHN0YXRlIHN3aXRjaCAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNs aWVudCwgJnJzYy0+Y2xpZW50X2xpc3QsIGxpc3QpCi0JCQlpZiAoY2xpZW50LT5jdXJyZW50X3N0 YXRlID09IERQVV9SU0NfQ01EX1NUQVRFKQotCQkJCXJldHVybiBUUllfQ01EX01PREVfU1dJVENI OwotCi0JCS8qIG5vdyB0cnkgY2xrIHN0YXRlIHN3aXRjaCAqLwotCQlsaXN0X2Zvcl9lYWNoX2Vu dHJ5KGNsaWVudCwgJnJzYy0+Y2xpZW50X2xpc3QsIGxpc3QpCi0JCQlpZiAoY2xpZW50LT5jdXJy ZW50X3N0YXRlID09IERQVV9SU0NfQ0xLX1NUQVRFKQotCQkJCXJldHVybiBUUllfQ0xLX01PREVf U1dJVENIOwotCi0JfSBlbHNlIGlmIChyc2MtPmh3X29wcy5zdGF0ZV91cGRhdGUpIHsKLQkJcmMg PSByc2MtPmh3X29wcy5zdGF0ZV91cGRhdGUocnNjLCBEUFVfUlNDX0lETEVfU1RBVEUpOwotCQlp ZiAoIXJjKQotCQkJcnBtaF9tb2RlX3NvbHZlcl9zZXQocnNjLT5kaXNwX3JzYywgdHJ1ZSk7Ci0J fQotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRwdV9yc2Nfc3dpdGNoX3RvX2NtZChz dHJ1Y3QgZHB1X3JzY19wcml2ICpyc2MsCi0Jc3RydWN0IGRwdV9yc2NfY21kX2NvbmZpZyAqY29u ZmlnLAotCXN0cnVjdCBkcHVfcnNjX2NsaWVudCAqY2FsbGVyX2NsaWVudCwKLQlpbnQgKndhaXRf dmJsYW5rX2NydGNfaWQpCi17Ci0Jc3RydWN0IGRwdV9yc2NfY2xpZW50ICpjbGllbnQ7Ci0JaW50 IHJjID0gU1RBVEVfVVBEQVRFX05PVF9BTExPV0VEOwotCi0JaWYgKCFyc2MtPnByaW1hcnlfY2xp ZW50KSB7Ci0JCXByX2VycigicHJpbWFyeSBjbGllbnQgbm90IGF2YWlsYWJsZSBmb3IgY21kIHN0 YXRlIHN3aXRjaFxuIik7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlbmQ7Ci0JfSBlbHNlIGlm IChjYWxsZXJfY2xpZW50ICE9IHJzYy0+cHJpbWFyeV9jbGllbnQpIHsKLQkJcHJfZXJyKCJwcmlt YXJ5IGNsaWVudCBzdGF0ZTolZCBub3QgY21kIHN0YXRlIHJlcXVlc3RcbiIsCi0JCQlyc2MtPnBy aW1hcnlfY2xpZW50LT5jdXJyZW50X3N0YXRlKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVu ZDsKLQl9Ci0KLQkvKiB1cGRhdGUgdGltZXJzIC0gbWlnaHQgbm90IGJlIGF2YWlsYWJsZSBhdCBu ZXh0IHN3aXRjaCAqLwotCWlmIChjb25maWcpCi0JCWRwdV9yc2NfdGltZXJfY2FsY3VsYXRlKHJz YywgY29uZmlnKTsKLQotCS8qKgotCSAqIHJzYyBjbGllbnRzIGNhbiBzdGlsbCBzZW5kIGNvbmZp ZyBhdCBhbnkgdGltZS4gSWYgYSBjb25maWcgaXMKLQkgKiByZWNlaXZlZCBkdXJpbmcgY21kX3N0 YXRlIHRoZW4gdnN5bmNfd2FpdCB3aWxsIGV4ZWN1dGUgd2l0aCB0aGUgbG9naWMKLQkgKiBiZWxv dy4gSWYgYSBjb25maWcgaXMgcmVjZWl2ZWQgd2hlbiByc2MgaXMgaW4gQU1DIG1vZGU7IEEgbW9k ZQotCSAqIHN3aXRjaCB3aWxsIGRvIHRoZSB2c3luYyB3YWl0LiB1cGRhdGVkIGNoZWNrcyBzdGls bCBzdXBwb3J0IGFsbCBjYXNlcwotCSAqIGZvciBkeW5hbWljIG1vZGUgc3dpdGNoIGFuZCBpbmxp bmUgcm90YXRpb24uCi0JICovCi0JaWYgKHJzYy0+Y3VycmVudF9zdGF0ZSA9PSBEUFVfUlNDX0NN RF9TVEFURSkgewotCQlyYyA9IDA7Ci0JCWlmIChjb25maWcpCi0JCQlnb3RvIHZzeW5jX3dhaXQ7 Ci0JCWVsc2UKLQkJCWdvdG8gZW5kOwotCX0KLQotCS8qIGFueSBvbmUgY2xpZW50IGluIHZpZGVv IHN0YXRlIGJsb2NrcyB0aGUgY21kIHN0YXRlIHN3aXRjaCAqLwotCWxpc3RfZm9yX2VhY2hfZW50 cnkoY2xpZW50LCAmcnNjLT5jbGllbnRfbGlzdCwgbGlzdCkKLQkJaWYgKGNsaWVudC0+Y3VycmVu dF9zdGF0ZSA9PSBEUFVfUlNDX1ZJRF9TVEFURSkKLQkJCWdvdG8gZW5kOwotCi0JaWYgKHJzYy0+ aHdfb3BzLnN0YXRlX3VwZGF0ZSkgewotCQlyYyA9IHJzYy0+aHdfb3BzLnN0YXRlX3VwZGF0ZShy c2MsIERQVV9SU0NfQ01EX1NUQVRFKTsKLQkJaWYgKCFyYykKLQkJCXJwbWhfbW9kZV9zb2x2ZXJf c2V0KHJzYy0+ZGlzcF9yc2MsIHRydWUpOwotCX0KLQotdnN5bmNfd2FpdDoKLQkvKiBpbmRpY2F0 ZSB3YWl0IGZvciB2c3luYyBmb3IgdmlkIHRvIGNtZCBzdGF0ZSBzd2l0Y2ggJiBjZmcgdXBkYXRl ICovCi0JaWYgKCFyYyAmJiAocnNjLT5jdXJyZW50X3N0YXRlID09IERQVV9SU0NfVklEX1NUQVRF IHx8Ci0JCQlyc2MtPmN1cnJlbnRfc3RhdGUgPT0gRFBVX1JTQ19DTURfU1RBVEUpKSB7Ci0JCS8q IGNsZWFyIFZTWU5DIHRpbWVzdGFtcCBmb3IgaW5kaWNhdGlvbiB3aGVuIHVwZGF0ZSBjb21wbGV0 ZXMgKi8KLQkJaWYgKHJzYy0+aHdfb3BzLmh3X3ZzeW5jKQotCQkJcnNjLT5od19vcHMuaHdfdnN5 bmMocnNjLCBWU1lOQ19FTkFCTEUsIE5VTEwsIDAsIDApOwotCQlpZiAoIXdhaXRfdmJsYW5rX2Ny dGNfaWQpIHsKLQkJCXByX2VycigiaW52YWxpZCBjcnRjIGlkIHdhaXQgcG9pbnRlciwgY2xpZW50 ICVkXG4iLAotCQkJCQljYWxsZXJfY2xpZW50LT5pZCk7Ci0JCQlEUFVfRVZUMzIoY2FsbGVyX2Ns aWVudC0+aWQsIHJzYy0+Y3VycmVudF9zdGF0ZSwKLQkJCQkJY2FsbGVyX2NsaWVudC0+Y3J0Y19p ZCwKLQkJCQkJd2FpdF92YmxhbmtfY3J0Y19pZCwgRFBVX0VWVExPR19FUlJPUik7Ci0JCQltc2xl ZXAoUFJJTUFSWV9WQkxBTktfV09SU1RfQ0FTRV9NUyk7Ci0JCX0gZWxzZSB7Ci0JCQkqd2FpdF92 YmxhbmtfY3J0Y19pZCA9IHJzYy0+cHJpbWFyeV9jbGllbnQtPmNydGNfaWQ7Ci0JCX0KLQl9Ci1l bmQ6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRwdV9yc2Nfc3dpdGNoX3RvX2Nsayhz dHJ1Y3QgZHB1X3JzY19wcml2ICpyc2MsCi0JCWludCAqd2FpdF92YmxhbmtfY3J0Y19pZCkKLXsK LQlzdHJ1Y3QgZHB1X3JzY19jbGllbnQgKmNsaWVudDsKLQlpbnQgcmMgPSBTVEFURV9VUERBVEVf Tk9UX0FMTE9XRUQ7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsaWVudCwgJnJzYy0+Y2xpZW50 X2xpc3QsIGxpc3QpCi0JCWlmICgoY2xpZW50LT5jdXJyZW50X3N0YXRlID09IERQVV9SU0NfVklE X1NUQVRFKSB8fAotCQkgICAgKGNsaWVudC0+Y3VycmVudF9zdGF0ZSA9PSBEUFVfUlNDX0NNRF9T VEFURSkpCi0JCQlnb3RvIGVuZDsKLQotCWlmIChyc2MtPmh3X29wcy5zdGF0ZV91cGRhdGUpIHsK LQkJcmMgPSByc2MtPmh3X29wcy5zdGF0ZV91cGRhdGUocnNjLCBEUFVfUlNDX0NMS19TVEFURSk7 Ci0JCWlmICghcmMpCi0JCQlycG1oX21vZGVfc29sdmVyX3NldChyc2MtPmRpc3BfcnNjLCBmYWxz ZSk7Ci0JfQotCi0JLyogaW5kaWNhdGUgd2FpdCBmb3IgdnN5bmMgZm9yIGNtZCB0byBjbGsgc3Rh dGUgc3dpdGNoICovCi0JaWYgKCFyYyAmJiByc2MtPnByaW1hcnlfY2xpZW50ICYmCi0JCQkocnNj LT5jdXJyZW50X3N0YXRlID09IERQVV9SU0NfQ01EX1NUQVRFKSkgewotCQkvKiBjbGVhciBWU1lO QyB0aW1lc3RhbXAgZm9yIGluZGljYXRpb24gd2hlbiB1cGRhdGUgY29tcGxldGVzICovCi0JCWlm IChyc2MtPmh3X29wcy5od192c3luYykKLQkJCXJzYy0+aHdfb3BzLmh3X3ZzeW5jKHJzYywgVlNZ TkNfRU5BQkxFLCBOVUxMLCAwLCAwKTsKLQkJaWYgKCF3YWl0X3ZibGFua19jcnRjX2lkKSB7Ci0J CQlwcl9lcnIoImludmFsaWQgY3J0YyBpZCB3YWl0IHBvaW50ZXIgcHJvdmlkZWRcbiIpOwotCQkJ bXNsZWVwKFBSSU1BUllfVkJMQU5LX1dPUlNUX0NBU0VfTVMpOwotCQl9IGVsc2UgewotCQkJKndh aXRfdmJsYW5rX2NydGNfaWQgPSByc2MtPnByaW1hcnlfY2xpZW50LT5jcnRjX2lkOwotCQl9Ci0J fQotZW5kOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkcHVfcnNjX3N3aXRjaF90b192 aWQoc3RydWN0IGRwdV9yc2NfcHJpdiAqcnNjLAotCXN0cnVjdCBkcHVfcnNjX2NtZF9jb25maWcg KmNvbmZpZywKLQlzdHJ1Y3QgZHB1X3JzY19jbGllbnQgKmNhbGxlcl9jbGllbnQsCi0JaW50ICp3 YWl0X3ZibGFua19jcnRjX2lkKQotewotCWludCByYyA9IDA7Ci0KLQkvKiB1cGRhdGUgdGltZXJz IC0gbWlnaHQgbm90IGJlIGF2YWlsYWJsZSBhdCBuZXh0IHN3aXRjaCAqLwotCWlmIChjb25maWcg JiYgKGNhbGxlcl9jbGllbnQgPT0gcnNjLT5wcmltYXJ5X2NsaWVudCkpCi0JCWRwdV9yc2NfdGlt ZXJfY2FsY3VsYXRlKHJzYywgY29uZmlnKTsKLQotCS8qIGVhcmx5IGV4aXQgd2l0aG91dCB2c3lu YyB3YWl0IGZvciB2aWQgc3RhdGUgKi8KLQlpZiAocnNjLT5jdXJyZW50X3N0YXRlID09IERQVV9S U0NfVklEX1NUQVRFKQotCQlnb3RvIGVuZDsKLQotCS8qIHZpZGVvIHN0YXRlIHN3aXRjaCBzaG91 bGQgYmUgZG9uZSBpbW1lZGlhdGVseSAqLwotCWlmIChyc2MtPmh3X29wcy5zdGF0ZV91cGRhdGUp IHsKLQkJcmMgPSByc2MtPmh3X29wcy5zdGF0ZV91cGRhdGUocnNjLCBEUFVfUlNDX1ZJRF9TVEFU RSk7Ci0JCWlmICghcmMpCi0JCQlycG1oX21vZGVfc29sdmVyX3NldChyc2MtPmRpc3BfcnNjLCBm YWxzZSk7Ci0JfQotCi0JLyogaW5kaWNhdGUgd2FpdCBmb3IgdnN5bmMgZm9yIGNtZCB0byB2aWQg c3RhdGUgc3dpdGNoICovCi0JaWYgKCFyYyAmJiByc2MtPnByaW1hcnlfY2xpZW50ICYmCi0JCQko cnNjLT5jdXJyZW50X3N0YXRlID09IERQVV9SU0NfQ01EX1NUQVRFKSkgewotCQkvKiBjbGVhciBW U1lOQyB0aW1lc3RhbXAgZm9yIGluZGljYXRpb24gd2hlbiB1cGRhdGUgY29tcGxldGVzICovCi0J CWlmIChyc2MtPmh3X29wcy5od192c3luYykKLQkJCXJzYy0+aHdfb3BzLmh3X3ZzeW5jKHJzYywg VlNZTkNfRU5BQkxFLCBOVUxMLCAwLCAwKTsKLQkJaWYgKCF3YWl0X3ZibGFua19jcnRjX2lkKSB7 Ci0JCQlwcl9lcnIoImludmFsaWQgY3J0YyBpZCB3YWl0IHBvaW50ZXIgcHJvdmlkZWRcbiIpOwot CQkJbXNsZWVwKFBSSU1BUllfVkJMQU5LX1dPUlNUX0NBU0VfTVMpOwotCQl9IGVsc2UgewotCQkJ KndhaXRfdmJsYW5rX2NydGNfaWQgPSByc2MtPnByaW1hcnlfY2xpZW50LT5jcnRjX2lkOwotCQl9 Ci0JfQotCi1lbmQ6Ci0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAqIGRwdV9yc2NfY2xpZW50X2lz X3N0YXRlX3VwZGF0ZV9jb21wbGV0ZSgpIC0gY2hlY2sgaWYgc3RhdGUgdXBkYXRlIGlzIGNvbXBs ZXRlCi0gKiBSU0Mgc3RhdGUgdHJhbnNpdGlvbiBpcyBub3QgY29tcGxldGUgdW50aWwgSFcgcmVj ZWl2ZXMgVkJMQU5LIHNpZ25hbC4gVGhpcwotICogZnVuY3Rpb24gY2hlY2tzIFJTQyBIVyB0byBk ZXRlcm1pbmUgd2hldGhlciB0aGF0IHNpZ25hbCBoYXMgYmVlbiByZWNlaXZlZC4KLSAqIEBjbGll bnQ6CSBDbGllbnQgcG9pbnRlciBwcm92aWRlZCBieSBkcHVfcnNjX2NsaWVudF9jcmVhdGUoKS4K LSAqCi0gKiBSZXR1cm46IHRydWUgaWYgdGhlIHN0YXRlIHVwZGF0ZSBoYXMgY29tcGxldGVkLgot ICovCi1ib29sIGRwdV9yc2NfY2xpZW50X2lzX3N0YXRlX3VwZGF0ZV9jb21wbGV0ZSgKLQkJc3Ry dWN0IGRwdV9yc2NfY2xpZW50ICpjYWxsZXJfY2xpZW50KQotewotCXN0cnVjdCBkcHVfcnNjX3By aXYgKnJzYzsKLQl1MzIgdnN5bmNfdGltZXN0YW1wMCA9IDA7Ci0KLQlpZiAoIWNhbGxlcl9jbGll bnQpIHsKLQkJcHJfZXJyKCJpbnZhbGlkIGNsaWVudCBmb3IgcnNjIHN0YXRlIHVwZGF0ZVxuIik7 Ci0JCXJldHVybiBmYWxzZTsKLQl9IGVsc2UgaWYgKGNhbGxlcl9jbGllbnQtPnJzY19pbmRleCA+ PSBNQVhfUlNDX0NPVU5UKSB7Ci0JCXByX2VycigiaW52YWxpZCByc2MgaW5kZXhcbiIpOwotCQly ZXR1cm4gZmFsc2U7Ci0JfQotCi0JcnNjID0gcnNjX3Bydl9saXN0W2NhbGxlcl9jbGllbnQtPnJz Y19pbmRleF07Ci0JaWYgKCFyc2MpCi0JCXJldHVybiBmYWxzZTsKLQotCS8qKgotCSAqIHN0YXRl IHVwZGF0ZXMgY2xlYXIgVlNZTkMgdGltZXN0YW1wLCBjaGVjayBpZiBhIG5ldyBvbmUgYXJyaXZl ZC4KLQkgKiB1c2UgVlNZTkMgbW9kZSAwIChDTUQgVEUpIGFsd2F5cyBmb3IgdGhpcywgcGVyIEhX IHJlY29tbWVuZGF0aW9uLgotCSAqLwotCWlmIChyc2MtPmh3X29wcy5od192c3luYykKLQkJdnN5 bmNfdGltZXN0YW1wMCA9IHJzYy0+aHdfb3BzLmh3X3ZzeW5jKHJzYywgVlNZTkNfUkVBRF9WU1lO QzAsCi0JCQkJTlVMTCwgMCwgMCk7Ci0KLQlyZXR1cm4gdnN5bmNfdGltZXN0YW1wMCAhPSAwOwot fQotCi0vKioKLSAqIGRwdV9yc2NfY2xpZW50X3N0YXRlX3VwZGF0ZSgpIC0gcnNjIGNsaWVudCBz dGF0ZSB1cGRhdGUKLSAqIFZpZGVvIG1vZGUsIGNtZCBtb2RlIGFuZCBjbGsgc3RhdGUgYXJlIHN1 cHBvZWQgYXMgbW9kZXMuIEEgY2xpZW50IG5lZWQgdG8KLSAqIHNldCB0aGlzIHByb3BlcnR5IGR1 cmluZyBwYW5lbCBjb25maWcgdGltZS4gQSBzd2l0Y2hpbmcgY2xpZW50IGNhbiBzZXQgdGhlCi0g KiBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIHN0YXRlCi0gKgotICogQGNsaWVudDoJIENsaWVudCBw b2ludGVyIHByb3ZpZGVkIGJ5IGRwdV9yc2NfY2xpZW50X2NyZWF0ZSgpLgotICogQHN0YXRlOgkg Q2xpZW50IHN0YXRlIC0gdmlkZW8vY21kCi0gKiBAY29uZmlnOgkgZnBzLCB2dG90YWwsIHBvcmNo ZXMsIGV0YyBjb25maWd1cmF0aW9uIGZvciBjb21tYW5kIG1vZGUKLSAqICAgICAgICAgICAgICAg cGFuZWwKLSAqIEBjcnRjX2lkOgkgY3VycmVudCBjbGllbnQncyBjcnRjIGlkCi0gKiBAd2FpdF92 YmxhbmtfY3J0Y19pZDoJT3V0cHV0IHBhcmFtZXRlci4gSWYgc2V0IHRvIG5vbi16ZXJvLCByc2Mg aHcKLSAqCQkJCXN0YXRlIHVwZGF0ZSByZXF1aXJlcyBhIHdhaXQgZm9yIG9uZSB2Ymxhbmsgb24K LSAqCQkJCXRoZSBwcmltYXJ5IGNydGMuIEluIHRoYXQgY2FzZSwgdGhpcyBvdXRwdXQKLSAqCQkJ CXBhcmFtIHdpbGwgYmUgc2V0IHRvIHRoZSBjcnRjIG9uIHdoaWNoIHRvIHdhaXQuCi0gKgkJCQlJ ZiBEUFVfUlNDX0lOVkFMSURfQ1JUQ19JRCwgbm8gd2FpdCBuZWNlc3NhcnkKLSAqCi0gKiBSZXR1 cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkcHVfcnNjX2NsaWVudF9zdGF0ZV91cGRhdGUoc3Ry dWN0IGRwdV9yc2NfY2xpZW50ICpjYWxsZXJfY2xpZW50LAotCWVudW0gZHB1X3JzY19zdGF0ZSBz dGF0ZSwKLQlzdHJ1Y3QgZHB1X3JzY19jbWRfY29uZmlnICpjb25maWcsIGludCBjcnRjX2lkLAot CWludCAqd2FpdF92YmxhbmtfY3J0Y19pZCkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBkcHVf cnNjX3ByaXYgKnJzYzsKLQotCWlmICghY2FsbGVyX2NsaWVudCkgewotCQlwcl9lcnIoImludmFs aWQgY2xpZW50IGZvciByc2Mgc3RhdGUgdXBkYXRlXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0J fSBlbHNlIGlmIChjYWxsZXJfY2xpZW50LT5yc2NfaW5kZXggPj0gTUFYX1JTQ19DT1VOVCkgewot CQlwcl9lcnIoImludmFsaWQgcnNjIGluZGV4XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQot Ci0JcnNjID0gcnNjX3Bydl9saXN0W2NhbGxlcl9jbGllbnQtPnJzY19pbmRleF07Ci0JaWYgKCFy c2MpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHdhaXRfdmJsYW5rX2NydGNfaWQpCi0JCSp3 YWl0X3ZibGFua19jcnRjX2lkID0gRFBVX1JTQ19JTlZBTElEX0NSVENfSUQ7Ci0KLQltdXRleF9s b2NrKCZyc2MtPmNsaWVudF9sb2NrKTsKLQlEUFVfRVZUMzJfVkVSQk9TRShjYWxsZXJfY2xpZW50 LT5pZCwgY2FsbGVyX2NsaWVudC0+Y3VycmVudF9zdGF0ZSwKLQkJCXN0YXRlLCByc2MtPmN1cnJl bnRfc3RhdGUsIERQVV9FVlRMT0dfRlVOQ19FTlRSWSk7Ci0JY2FsbGVyX2NsaWVudC0+Y3J0Y19p ZCA9IGNydGNfaWQ7Ci0JY2FsbGVyX2NsaWVudC0+Y3VycmVudF9zdGF0ZSA9IHN0YXRlOwotCi0J aWYgKHJzYy0+bWFzdGVyX2RybSA9PSBOVUxMKSB7Ci0JCXByX2VycigiaW52YWxpZCBtYXN0ZXIg Y29tcG9uZW50IGJpbmRpbmdcbiIpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZW5kOwotCX0g ZWxzZSBpZiAoKHJzYy0+Y3VycmVudF9zdGF0ZSA9PSBzdGF0ZSkgJiYgIWNvbmZpZykgewotCQlw cl9kZWJ1Zygibm8gc3RhdGUgY2hhbmdlOiAlZFxuIiwgc3RhdGUpOwotCQlnb3RvIGVuZDsKLQl9 Ci0KLQlwcl9kZWJ1ZygiJXBTOiByc2Mgc3RhdGU6JWQgcmVxdWVzdCBjbGllbnQ6JXMgc3RhdGU6 JWRcbiIsCi0JCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSwgcnNjLT5jdXJyZW50X3N0YXRl LAotCQljYWxsZXJfY2xpZW50LT5uYW1lLCBzdGF0ZSk7Ci0KLQlpZiAocnNjLT5jdXJyZW50X3N0 YXRlID09IERQVV9SU0NfSURMRV9TVEFURSkKLQkJZHB1X3JzY19jbGtfZW5hYmxlKCZyc2MtPnBo YW5kbGUsIHJzYy0+cGNsaWVudCwgdHJ1ZSk7Ci0KLQlzd2l0Y2ggKHN0YXRlKSB7Ci0JY2FzZSBE UFVfUlNDX0lETEVfU1RBVEU6Ci0JCXJjID0gZHB1X3JzY19zd2l0Y2hfdG9faWRsZShyc2MpOwot Ci0JCS8qIHZpZGVvIHN0YXRlIGNsaWVudCBtaWdodCBiZSBleGl0aW5nOyB0cnkgY21kIHN0YXRl IHN3aXRjaCAqLwotCQlpZiAocmMgPT0gVFJZX0NNRF9NT0RFX1NXSVRDSCkgewotCQkJcmMgPSBk cHVfcnNjX3N3aXRjaF90b19jbWQocnNjLCBOVUxMLAotCQkJCQlyc2MtPnByaW1hcnlfY2xpZW50 LAotCQkJCQl3YWl0X3ZibGFua19jcnRjX2lkKTsKLQkJCWlmICghcmMpCi0JCQkJc3RhdGUgPSBE UFVfUlNDX0NNRF9TVEFURTsKLQotCQkvKiBjbWQgc3RhdGUgY2xpZW50IG1pZ2h0IGJlIGV4aXRp bmc7IHRyeSBjbGsgc3RhdGUgc3dpdGNoICovCi0JCX0gZWxzZSBpZiAocmMgPT0gVFJZX0NMS19N T0RFX1NXSVRDSCkgewotCQkJcmMgPSBkcHVfcnNjX3N3aXRjaF90b19jbGsocnNjLCB3YWl0X3Zi bGFua19jcnRjX2lkKTsKLQkJCWlmICghcmMpCi0JCQkJc3RhdGUgPSBEUFVfUlNDX0NMS19TVEFU RTsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgRFBVX1JTQ19DTURfU1RBVEU6Ci0JCXJjID0gZHB1 X3JzY19zd2l0Y2hfdG9fY21kKHJzYywgY29uZmlnLCBjYWxsZXJfY2xpZW50LAotCQkJCXdhaXRf dmJsYW5rX2NydGNfaWQpOwotCQlicmVhazsKLQotCWNhc2UgRFBVX1JTQ19WSURfU1RBVEU6Ci0J CXJjID0gZHB1X3JzY19zd2l0Y2hfdG9fdmlkKHJzYywgY29uZmlnLCBjYWxsZXJfY2xpZW50LAot CQkJCXdhaXRfdmJsYW5rX2NydGNfaWQpOwotCQlicmVhazsKLQotCWNhc2UgRFBVX1JTQ19DTEtf U1RBVEU6Ci0JCXJjID0gZHB1X3JzY19zd2l0Y2hfdG9fY2xrKHJzYywgd2FpdF92YmxhbmtfY3J0 Y19pZCk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcHJfZXJyKCJpbnZhbGlkIHN0YXRlIGhh bmRsaW5nICVkXG4iLCBzdGF0ZSk7Ci0JCWJyZWFrOwotCX0KLQotCWlmIChyYyA9PSBTVEFURV9V UERBVEVfTk9UX0FMTE9XRUQpIHsKLQkJcmMgPSAwOwotCQlEUFVfRVZUMzIoY2FsbGVyX2NsaWVu dC0+aWQsIGNhbGxlcl9jbGllbnQtPmN1cnJlbnRfc3RhdGUsCi0JCQlzdGF0ZSwgcnNjLT5jdXJy ZW50X3N0YXRlLCByYywgRFBVX0VWVExPR19GVU5DX0NBU0UxKTsKLQkJZ290byBjbGtfZGlzYWJs ZTsKLQl9IGVsc2UgaWYgKHJjKSB7Ci0JCXByX2RlYnVnKCJzdGF0ZTolZCB1cGRhdGUgZmFpbGVk IHJjOiVkXG4iLCBzdGF0ZSwgcmMpOwotCQlEUFVfRVZUMzIoY2FsbGVyX2NsaWVudC0+aWQsIGNh bGxlcl9jbGllbnQtPmN1cnJlbnRfc3RhdGUsCi0JCQlzdGF0ZSwgcnNjLT5jdXJyZW50X3N0YXRl LCByYywgRFBVX0VWVExPR19GVU5DX0NBU0UyKTsKLQkJZ290byBjbGtfZGlzYWJsZTsKLQl9Ci0K LQlwcl9kZWJ1Zygic3RhdGUgc3dpdGNoIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZTogJWRcbiIsIHN0 YXRlKTsKLQlyc2MtPmN1cnJlbnRfc3RhdGUgPSBzdGF0ZTsKLQlEUFVfRVZUMzIoY2FsbGVyX2Ns aWVudC0+aWQsIGNhbGxlcl9jbGllbnQtPmN1cnJlbnRfc3RhdGUsCi0JCQlzdGF0ZSwgcnNjLT5j dXJyZW50X3N0YXRlLCBEUFVfRVZUTE9HX0ZVTkNfRVhJVCk7Ci0KLWNsa19kaXNhYmxlOgotCWlm IChyc2MtPmN1cnJlbnRfc3RhdGUgPT0gRFBVX1JTQ19JRExFX1NUQVRFKQotCQlkcHVfcnNjX2Ns a19lbmFibGUoJnJzYy0+cGhhbmRsZSwgcnNjLT5wY2xpZW50LCBmYWxzZSk7Ci1lbmQ6Ci0JbXV0 ZXhfdW5sb2NrKCZyc2MtPmNsaWVudF9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci1FWFBPUlRfU1lN Qk9MKGRwdV9yc2NfY2xpZW50X3N0YXRlX3VwZGF0ZSk7Ci0KLS8qKgotICogZHB1X3JzY19jbGll bnRfdm90ZSgpIC0gYWIvaWIgdm90ZSBmcm9tIHJzYyBjbGllbnQKLSAqCi0gKiBAY2xpZW50Ogkg Q2xpZW50IHBvaW50ZXIgcHJvdmlkZWQgYnkgZHB1X3JzY19jbGllbnRfY3JlYXRlKCkuCi0gKiBA YnVzX2lkOiBkYXRhIGJ1cyBmb3Igd2hpY2ggdG8gYmUgdm90ZWQKLSAqIEBhYjoJCSBhZ2dyZWdh dGVkIGJhbmR3aWR0aCB2b3RlIGZyb20gY2xpZW50LgotICogQGliOgkJIGluc3RhbnQgYmFuZHdp ZHRoIHZvdGUgZnJvbSBjbGllbnQuCi0gKgotICogUmV0dXJuOiBlcnJvciBjb2RlLgotICovCi1p bnQgZHB1X3JzY19jbGllbnRfdm90ZShzdHJ1Y3QgZHB1X3JzY19jbGllbnQgKmNhbGxlcl9jbGll bnQsCi0JCXUzMiBidXNfaWQsIHU2NCBhYl92b3RlLCB1NjQgaWJfdm90ZSkKLXsKLQlpbnQgcmMg PSAwOwotCXN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYzsKLQotCWlmICghY2FsbGVyX2NsaWVudCkg ewotCQlwcl9lcnIoImludmFsaWQgY2xpZW50IGZvciBhYi9pYiB2b3RlXG4iKTsKLQkJcmV0dXJu IC1FSU5WQUw7Ci0JfSBlbHNlIGlmIChjYWxsZXJfY2xpZW50LT5yc2NfaW5kZXggPj0gTUFYX1JT Q19DT1VOVCkgewotCQlwcl9lcnIoImludmFsaWQgcnNjIGluZGV4XG4iKTsKLQkJcmV0dXJuIC1F SU5WQUw7Ci0JfQotCi0JcnNjID0gcnNjX3Bydl9saXN0W2NhbGxlcl9jbGllbnQtPnJzY19pbmRl eF07Ci0JaWYgKCFyc2MpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcHJfZGVidWcoImNsaWVudDol cyBhYjolbGx1IGliOiVsbHVcbiIsCi0JCQljYWxsZXJfY2xpZW50LT5uYW1lLCBhYl92b3RlLCBp Yl92b3RlKTsKLQotCW11dGV4X2xvY2soJnJzYy0+Y2xpZW50X2xvY2spOwotCXJjID0gZHB1X3Jz Y19jbGtfZW5hYmxlKCZyc2MtPnBoYW5kbGUsIHJzYy0+cGNsaWVudCwgdHJ1ZSk7Ci0JaWYgKHJj KQotCQlnb3RvIGNsa19lbmFibGVfZmFpbDsKLQotCWlmIChyc2MtPmh3X29wcy50Y3Nfd2FpdCkg ewotCQlyYyA9IHJzYy0+aHdfb3BzLnRjc193YWl0KHJzYyk7Ci0JCWlmIChyYykgewotCQkJcHJf ZXJyKCJ0Y3MgaXMgc3RpbGwgYnVzeTsgY2FuJ3Qgc2VuZCBjb21tYW5kXG4iKTsKLQkJCWlmIChy c2MtPmh3X29wcy50Y3NfdXNlX29rKQotCQkJCXJzYy0+aHdfb3BzLnRjc191c2Vfb2socnNjKTsK LQkJCWdvdG8gZW5kOwotCQl9Ci0JfQotCi0JcnBtaF9pbnZhbGlkYXRlKHJzYy0+ZGlzcF9yc2Mp OwotCWRwdV9wb3dlcl9kYXRhX2J1c19zZXRfcXVvdGEoJnJzYy0+cGhhbmRsZSwgcnNjLT5wY2xp ZW50LAotCQlEUFVfUE9XRVJfSEFORExFX0RBVEFfQlVTX0NMSUVOVF9SVCwKLQkJYnVzX2lkLCBh Yl92b3RlLCBpYl92b3RlKTsKLQlycG1oX2ZsdXNoKHJzYy0+ZGlzcF9yc2MpOwotCi0JaWYgKHJz Yy0+aHdfb3BzLnRjc191c2Vfb2spCi0JCXJzYy0+aHdfb3BzLnRjc191c2Vfb2socnNjKTsKLQot ZW5kOgotCWRwdV9yc2NfY2xrX2VuYWJsZSgmcnNjLT5waGFuZGxlLCByc2MtPnBjbGllbnQsIGZh bHNlKTsKLWNsa19lbmFibGVfZmFpbDoKLQltdXRleF91bmxvY2soJnJzYy0+Y2xpZW50X2xvY2sp OwotCi0JcmV0dXJuIHJjOwotfQotRVhQT1JUX1NZTUJPTChkcHVfcnNjX2NsaWVudF92b3RlKTsK LQotI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQotdm9pZCBkcHVfcnNjX2RlYnVnX2R1bXAo dTMyIG11eF9zZWwpCi17Ci0Jc3RydWN0IGRwdV9yc2NfcHJpdiAqcnNjOwotCi0JcnNjID0gcnNj X3Bydl9saXN0W0RQVV9SU0NfSU5ERVhdOwotCWlmICghcnNjKQotCQlyZXR1cm47Ci0KLQkvKiB0 aGlzIG11c3QgYmUgY2FsbGVkIHdpdGggcnNjIGNsb2NrcyBlbmFibGVkICovCi0JaWYgKHJzYy0+ aHdfb3BzLmRlYnVnX2R1bXApCi0JCXJzYy0+aHdfb3BzLmRlYnVnX2R1bXAocnNjLCBtdXhfc2Vs KTsKLX0KLSNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykgKi8KLQotc3RhdGljIGlu dCBfZHB1X2RlYnVnZnNfc3RhdHVzX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRh KQotewotCXN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYzsKLQlzdHJ1Y3QgZHB1X3JzY19jbGllbnQg KmNsaWVudDsKLQlpbnQgcmV0OwotCi0JaWYgKCFzIHx8ICFzLT5wcml2YXRlKQotCQlyZXR1cm4g LUVJTlZBTDsKLQotCXJzYyA9IHMtPnByaXZhdGU7Ci0KLQltdXRleF9sb2NrKCZyc2MtPmNsaWVu dF9sb2NrKTsKLQlyZXQgPSBkcHVfcnNjX2Nsa19lbmFibGUoJnJzYy0+cGhhbmRsZSwgcnNjLT5w Y2xpZW50LCB0cnVlKTsKLQlpZiAocmV0KQotCQlnb3RvIGVuZDsKLQotCXNlcV9wcmludGYocywg InJzYyBjdXJyZW50IHN0YXRlOiVkXG4iLCByc2MtPmN1cnJlbnRfc3RhdGUpOwotCXNlcV9wcmlu dGYocywgIndyYXBlciBiYWNrb2ZmIHRpbWUobnMpOiVkXG4iLAotCQkJCXJzYy0+dGltZXJfY29u ZmlnLnN0YXRpY193YWtldXBfdGltZV9ucyk7Ci0Jc2VxX3ByaW50ZihzLCAicnNjIGJhY2tvZmYg dGltZShucyk6JWRcbiIsCi0JCQkJcnNjLT50aW1lcl9jb25maWcucnNjX2JhY2tvZmZfdGltZV9u cyk7Ci0Jc2VxX3ByaW50ZihzLCAicGRjIGJhY2tvZmYgdGltZShucyk6JWRcbiIsCi0JCQkJcnNj LT50aW1lcl9jb25maWcucGRjX2JhY2tvZmZfdGltZV9ucyk7Ci0Jc2VxX3ByaW50ZihzLCAicnNj IG1vZGUgdGhyZXNob2xkIHRpbWUobnMpOiVkXG4iLAotCQkJCXJzYy0+dGltZXJfY29uZmlnLnJz Y19tb2RlX3RocmVzaG9sZF90aW1lX25zKTsKLQlzZXFfcHJpbnRmKHMsICJyc2MgdGltZSBzbG90 IDAobnMpOiVkXG4iLAotCQkJCXJzYy0+dGltZXJfY29uZmlnLnJzY190aW1lX3Nsb3RfMF9ucyk7 Ci0Jc2VxX3ByaW50ZihzLCAicnNjIHRpbWUgc2xvdCAxKG5zKTolZFxuIiwKLQkJCQlyc2MtPnRp bWVyX2NvbmZpZy5yc2NfdGltZV9zbG90XzFfbnMpOwotCXNlcV9wcmludGYocywgImZyYW1lIGZw czolZCBqaXR0ZXJfbnVtZXI6JWQgaml0dGVyX2Rlbm9tOiVkIHZ0b3RhbDolZCBwcmVmaWxsIGxp bmVzOiVkXG4iLAotCQkJcnNjLT5jbWRfY29uZmlnLmZwcywgcnNjLT5jbWRfY29uZmlnLmppdHRl cl9udW1lciwKLQkJCXJzYy0+Y21kX2NvbmZpZy5qaXR0ZXJfZGVub20sCi0JCQlyc2MtPmNtZF9j b25maWcudnRvdGFsLCByc2MtPmNtZF9jb25maWcucHJlZmlsbF9saW5lcyk7Ci0KLQlzZXFfcHV0 cyhzLCAiXG4iKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xpZW50LCAmcnNjLT5jbGllbnRf bGlzdCwgbGlzdCkKLQkJc2VxX3ByaW50ZihzLCAiXHQgY2xpZW50OiVzIHN0YXRlOiVkXG4iLAot CQkJCWNsaWVudC0+bmFtZSwgY2xpZW50LT5jdXJyZW50X3N0YXRlKTsKLQotCWlmIChyc2MtPmh3 X29wcy5kZWJ1Z19zaG93KSB7Ci0JCXJldCA9IHJzYy0+aHdfb3BzLmRlYnVnX3Nob3cocywgcnNj KTsKLQkJaWYgKHJldCkKLQkJCXByX2VycigiZHB1IHJzYzogaHcgZGVidWcgZmFpbGVkIHJldDol ZFxuIiwgcmV0KTsKLQl9Ci0JZHB1X3JzY19jbGtfZW5hYmxlKCZyc2MtPnBoYW5kbGUsIHJzYy0+ cGNsaWVudCwgZmFsc2UpOwotCi1lbmQ6Ci0JbXV0ZXhfdW5sb2NrKCZyc2MtPmNsaWVudF9sb2Nr KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfZHB1X2RlYnVnZnNfc3RhdHVzX29wZW4o c3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNpbmds ZV9vcGVuKGZpbGUsIF9kcHVfZGVidWdmc19zdGF0dXNfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7 Ci19Ci0KLXN0YXRpYyBpbnQgX2RwdV9kZWJ1Z2ZzX21vZGVfY3RybF9vcGVuKHN0cnVjdCBpbm9k ZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCS8qIG5vbi1zZWVrYWJsZSAqLwotCWZp bGUtPnByaXZhdGVfZGF0YSA9IGlub2RlLT5pX3ByaXZhdGU7Ci0JcmV0dXJuIG5vbnNlZWthYmxl X29wZW4oaW5vZGUsIGZpbGUpOwotfQotCi1zdGF0aWMgc3NpemVfdCBfZHB1X2RlYnVnZnNfbW9k ZV9jdHJsX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCi0JCQkJc2l6 ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGRwdV9yc2NfcHJpdiAqcnNjID0g ZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWNoYXIgYnVmZmVyW01BWF9CVUZGRVJfU0laRV07Ci0JaW50 IGJsZW4gPSAwLCByYzsKLQotCWlmICgqcHBvcyB8fCAhcnNjIHx8ICFyc2MtPmh3X29wcy5tb2Rl X2N0cmwpCi0JCXJldHVybiAwOwotCi0JbXV0ZXhfbG9jaygmcnNjLT5jbGllbnRfbG9jayk7Ci0J cmMgPSBkcHVfcnNjX2Nsa19lbmFibGUoJnJzYy0+cGhhbmRsZSwgcnNjLT5wY2xpZW50LCB0cnVl KTsKLQlpZiAocmMpCi0JCWdvdG8gZW5kOwotCi0JYmxlbiA9IHJzYy0+aHdfb3BzLm1vZGVfY3Ry bChyc2MsIE1PREVfUkVBRCwgYnVmZmVyLAotCQkJCQkJCU1BWF9CVUZGRVJfU0laRSwgMCk7Ci0K LQlkcHVfcnNjX2Nsa19lbmFibGUoJnJzYy0+cGhhbmRsZSwgcnNjLT5wY2xpZW50LCBmYWxzZSk7 Ci0KLWVuZDoKLQltdXRleF91bmxvY2soJnJzYy0+Y2xpZW50X2xvY2spOwotCWlmIChibGVuIDw9 IDApCi0JCXJldHVybiAwOwotCi0JaWYgKGNvcHlfdG9fdXNlcihidWYsIGJ1ZmZlciwgYmxlbikp Ci0JCXJldHVybiAtRUZBVUxUOwotCi0JKnBwb3MgKz0gYmxlbjsKLQlyZXR1cm4gYmxlbjsKLX0K LQotc3RhdGljIHNzaXplX3QgX2RwdV9kZWJ1Z2ZzX21vZGVfY3RybF93cml0ZShzdHJ1Y3QgZmls ZSAqZmlsZSwKLQkJCWNvbnN0IGNoYXIgX191c2VyICpwLCBzaXplX3QgY291bnQsIGxvZmZfdCAq cHBvcykKLXsKLQlzdHJ1Y3QgZHB1X3JzY19wcml2ICpyc2MgPSBmaWxlLT5wcml2YXRlX2RhdGE7 Ci0JY2hhciAqaW5wdXQ7Ci0JdTMyIG1vZGVfc3RhdGUgPSAwOwotCWludCByYzsKLQotCWlmICgh cnNjIHx8ICFyc2MtPmh3X29wcy5tb2RlX2N0cmwgfHwgIWNvdW50IHx8Ci0JCQkJCWNvdW50ID4g TUFYX0NPVU5UX1NJWkVfU1VQUE9SVEVEKQotCQlyZXR1cm4gMDsKLQotCWlucHV0ID0ga21hbGxv Yyhjb3VudCArIDEsIEdGUF9LRVJORUwpOwotCWlmICghaW5wdXQpCi0JCXJldHVybiAtRU5PTUVN OwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKGlucHV0LCBwLCBjb3VudCkpIHsKLQkJa2ZyZWUoaW5w dXQpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JaW5wdXRbY291bnRdID0gJ1wwJzsKLQotCXJj ID0ga3N0cnRvaW50KGlucHV0LCAwLCAmbW9kZV9zdGF0ZSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2Vy cigibW9kZV9zdGF0ZTogaW50IGNvbnZlcnNpb24gZmFpbGVkIHJjOiVkXG4iLCByYyk7Ci0JCWdv dG8gZW5kOwotCX0KLQotCXByX2RlYnVnKCJtb2RlX3N0YXRlOiAlZFxuIiwgbW9kZV9zdGF0ZSk7 Ci0JbW9kZV9zdGF0ZSAmPSAweDc7Ci0JaWYgKG1vZGVfc3RhdGUgIT0gQUxMX01PREVTX0RJU0FC TEVEICYmCi0JCQltb2RlX3N0YXRlICE9IEFMTF9NT0RFU19FTkFCTEVEICYmCi0JCQltb2RlX3N0 YXRlICE9IE9OTFlfTU9ERV8wX0VOQUJMRUQgJiYKLQkJCW1vZGVfc3RhdGUgIT0gT05MWV9NT0RF XzBfMV9FTkFCTEVEKSB7Ci0JCXByX2VycigiaW52YWxpZCBtb2RlOiVkIGNvbWJpbmF0aW9uXG4i LCBtb2RlX3N0YXRlKTsKLQkJZ290byBlbmQ7Ci0JfQotCi0JbXV0ZXhfbG9jaygmcnNjLT5jbGll bnRfbG9jayk7Ci0JcmMgPSBkcHVfcnNjX2Nsa19lbmFibGUoJnJzYy0+cGhhbmRsZSwgcnNjLT5w Y2xpZW50LCB0cnVlKTsKLQlpZiAocmMpCi0JCWdvdG8gY2xrX2VuYWJsZV9mYWlsOwotCi0JcnNj LT5od19vcHMubW9kZV9jdHJsKHJzYywgTU9ERV9VUERBVEUsIE5VTEwsIDAsIG1vZGVfc3RhdGUp OwotCWRwdV9yc2NfY2xrX2VuYWJsZSgmcnNjLT5waGFuZGxlLCByc2MtPnBjbGllbnQsIGZhbHNl KTsKLQotY2xrX2VuYWJsZV9mYWlsOgotCW11dGV4X3VubG9jaygmcnNjLT5jbGllbnRfbG9jayk7 Ci1lbmQ6Ci0Ja2ZyZWUoaW5wdXQpOwotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIGludCBf ZHB1X2RlYnVnZnNfdnN5bmNfbW9kZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBm aWxlICpmaWxlKQotewotCS8qIG5vbi1zZWVrYWJsZSAqLwotCWZpbGUtPnByaXZhdGVfZGF0YSA9 IGlub2RlLT5pX3ByaXZhdGU7Ci0JcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUp OwotfQotCi1zdGF0aWMgc3NpemVfdCBfZHB1X2RlYnVnZnNfdnN5bmNfbW9kZV9yZWFkKHN0cnVj dCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAotCQkJCXNpemVfdCBjb3VudCwgbG9mZl90 ICpwcG9zKQotewotCXN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYyA9IGZpbGUtPnByaXZhdGVfZGF0 YTsKLQljaGFyIGJ1ZmZlcltNQVhfQlVGRkVSX1NJWkVdOwotCWludCBibGVuID0gMCwgcmM7Ci0K LQlpZiAoKnBwb3MgfHwgIXJzYyB8fCAhcnNjLT5od19vcHMuaHdfdnN5bmMpCi0JCXJldHVybiAw OwotCi0JbXV0ZXhfbG9jaygmcnNjLT5jbGllbnRfbG9jayk7Ci0JcmMgPSBkcHVfcnNjX2Nsa19l bmFibGUoJnJzYy0+cGhhbmRsZSwgcnNjLT5wY2xpZW50LCB0cnVlKTsKLQlpZiAocmMpCi0JCWdv dG8gZW5kOwotCi0JYmxlbiA9IHJzYy0+aHdfb3BzLmh3X3ZzeW5jKHJzYywgVlNZTkNfUkVBRCwg YnVmZmVyLAotCQkJCQkJTUFYX0JVRkZFUl9TSVpFLCAwKTsKLQotCWRwdV9yc2NfY2xrX2VuYWJs ZSgmcnNjLT5waGFuZGxlLCByc2MtPnBjbGllbnQsIGZhbHNlKTsKLQotZW5kOgotCW11dGV4X3Vu bG9jaygmcnNjLT5jbGllbnRfbG9jayk7Ci0JaWYgKGJsZW4gPD0gMCkKLQkJcmV0dXJuIDA7Ci0K LQlpZiAoY29weV90b191c2VyKGJ1ZiwgYnVmZmVyLCBibGVuKSkKLQkJcmV0dXJuIC1FRkFVTFQ7 Ci0KLQkqcHBvcyArPSBibGVuOwotCXJldHVybiBibGVuOwotfQotCi1zdGF0aWMgc3NpemVfdCBf ZHB1X2RlYnVnZnNfdnN5bmNfbW9kZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCWNvbnN0 IGNoYXIgX191c2VyICpwLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3Qg ZHB1X3JzY19wcml2ICpyc2MgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JY2hhciAqaW5wdXQ7Ci0J dTMyIHZzeW5jX3N0YXRlID0gMDsKLQlpbnQgcmM7Ci0KLQlpZiAoIXJzYyB8fCAhcnNjLT5od19v cHMuaHdfdnN5bmMgfHwgIWNvdW50IHx8Ci0JCQkJY291bnQgPiBNQVhfQ09VTlRfU0laRV9TVVBQ T1JURUQpCi0JCXJldHVybiAwOwotCi0JaW5wdXQgPSBrbWFsbG9jKGNvdW50ICsgMSwgR0ZQX0tF Uk5FTCk7Ci0JaWYgKCFpbnB1dCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpZiAoY29weV9mcm9t X3VzZXIoaW5wdXQsIHAsIGNvdW50KSkgewotCQlrZnJlZShpbnB1dCk7Ci0JCXJldHVybiAtRUZB VUxUOwotCX0KLQlpbnB1dFtjb3VudF0gPSAnXDAnOwotCi0JcmMgPSBrc3RydG9pbnQoaW5wdXQs IDAsICZ2c3luY19zdGF0ZSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigidnN5bmNfc3RhdGU6IGlu dCBjb252ZXJzaW9uIGZhaWxlZCByYzolZFxuIiwgcmMpOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlw cl9kZWJ1ZygidnN5bmNfc3RhdGU6ICVkXG4iLCB2c3luY19zdGF0ZSk7Ci0JdnN5bmNfc3RhdGUg Jj0gMHg3OwotCi0JbXV0ZXhfbG9jaygmcnNjLT5jbGllbnRfbG9jayk7Ci0JcmMgPSBkcHVfcnNj X2Nsa19lbmFibGUoJnJzYy0+cGhhbmRsZSwgcnNjLT5wY2xpZW50LCB0cnVlKTsKLQlpZiAocmMp Ci0JCWdvdG8gY2xrX2VuX2ZhaWw7Ci0KLQlpZiAodnN5bmNfc3RhdGUpCi0JCXJzYy0+aHdfb3Bz Lmh3X3ZzeW5jKHJzYywgVlNZTkNfRU5BQkxFLCBOVUxMLAotCQkJCQkJCTAsIHZzeW5jX3N0YXRl IC0gMSk7Ci0JZWxzZQotCQlyc2MtPmh3X29wcy5od192c3luYyhyc2MsIFZTWU5DX0RJU0FCTEUs IE5VTEwsIDAsIDApOwotCi0JZHB1X3JzY19jbGtfZW5hYmxlKCZyc2MtPnBoYW5kbGUsIHJzYy0+ cGNsaWVudCwgZmFsc2UpOwotCi1jbGtfZW5fZmFpbDoKLQltdXRleF91bmxvY2soJnJzYy0+Y2xp ZW50X2xvY2spOwotZW5kOgotCWtmcmVlKGlucHV0KTsKLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0 YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnZnNfc3RhdHVzX2ZvcHMgPSB7 Ci0JLm9wZW4gPQkJX2RwdV9kZWJ1Z2ZzX3N0YXR1c19vcGVuLAotCS5yZWFkID0JCXNlcV9yZWFk LAotCS5sbHNlZWsgPQlzZXFfbHNlZWssCi0JLnJlbGVhc2UgPQlzaW5nbGVfcmVsZWFzZSwKLX07 Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1vZGVfY29udHJvbF9mb3Bz ID0gewotCS5vcGVuID0JCV9kcHVfZGVidWdmc19tb2RlX2N0cmxfb3BlbiwKLQkucmVhZCA9CQlf ZHB1X2RlYnVnZnNfbW9kZV9jdHJsX3JlYWQsCi0JLndyaXRlID0JX2RwdV9kZWJ1Z2ZzX21vZGVf Y3RybF93cml0ZSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZz eW5jX3N0YXR1c19mb3BzID0gewotCS5vcGVuID0JCV9kcHVfZGVidWdmc192c3luY19tb2RlX29w ZW4sCi0JLnJlYWQgPQkJX2RwdV9kZWJ1Z2ZzX3ZzeW5jX21vZGVfcmVhZCwKLQkud3JpdGUgPQlf ZHB1X2RlYnVnZnNfdnN5bmNfbW9kZV93cml0ZSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9kcHVfcnNj X2luaXRfZGVidWdmcyhzdHJ1Y3QgZHB1X3JzY19wcml2ICpyc2MsIGNoYXIgKm5hbWUpCi17Ci0J cnNjLT5kZWJ1Z2ZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIobmFtZSwgTlVMTCk7Ci0JaWYg KCFyc2MtPmRlYnVnZnNfcm9vdCkKLQkJcmV0dXJuOwotCi0JLyogZG9uJ3QgZXJyb3IgY2hlY2sg dGhlc2UgKi8KLQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJzdGF0dXMiLCAwNDAwLCByc2MtPmRlYnVn ZnNfcm9vdCwgcnNjLAotCQkJCQkJCSZkZWJ1Z2ZzX3N0YXR1c19mb3BzKTsKLQlkZWJ1Z2ZzX2Ny ZWF0ZV9maWxlKCJtb2RlX2NvbnRyb2wiLCAwNjAwLCByc2MtPmRlYnVnZnNfcm9vdCwgcnNjLAot CQkJCQkJCSZtb2RlX2NvbnRyb2xfZm9wcyk7Ci0JZGVidWdmc19jcmVhdGVfZmlsZSgidnN5bmNf bW9kZSIsIDA2MDAsIHJzYy0+ZGVidWdmc19yb290LCByc2MsCi0JCQkJCQkJJnZzeW5jX3N0YXR1 c19mb3BzKTsKLQlkZWJ1Z2ZzX2NyZWF0ZV94MzIoImRlYnVnX21vZGUiLCAwNjAwLCByc2MtPmRl YnVnZnNfcm9vdCwKLQkJCQkJCQkmcnNjLT5kZWJ1Z19tb2RlKTsKLX0KLQotc3RhdGljIHZvaWQg ZHB1X3JzY19kZWluaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJCQkJc3RydWN0 IGRwdV9yc2NfcHJpdiAqcnNjKQotewotCWlmICghcnNjKQotCQlyZXR1cm47Ci0KLQlpZiAocnNj LT5wY2xpZW50KQotCQlkcHVfcnNjX2Nsa19lbmFibGUoJnJzYy0+cGhhbmRsZSwgcnNjLT5wY2xp ZW50LCBmYWxzZSk7Ci0JaWYgKHJzYy0+ZnMpCi0JCWRldm1fcmVndWxhdG9yX3B1dChyc2MtPmZz KTsKLQlpZiAocnNjLT53cmFwcGVyX2lvLmJhc2UpCi0JCW1zbV9kc3NfaW91bm1hcCgmcnNjLT53 cmFwcGVyX2lvKTsKLQlpZiAocnNjLT5kcnZfaW8uYmFzZSkKLQkJbXNtX2Rzc19pb3VubWFwKCZy c2MtPmRydl9pbyk7Ci0JaWYgKHJzYy0+ZGlzcF9yc2MpCi0JCXJwbWhfcmVsZWFzZShyc2MtPmRp c3BfcnNjKTsKLQlpZiAocnNjLT5wY2xpZW50KQotCQlkcHVfcG93ZXJfY2xpZW50X2Rlc3Ryb3ko JnJzYy0+cGhhbmRsZSwgcnNjLT5wY2xpZW50KTsKLQotCWRwdV9wb3dlcl9yZXNvdXJjZV9kZWlu aXQocGRldiwgJnJzYy0+cGhhbmRsZSk7Ci0JZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKHJzYy0+ ZGVidWdmc19yb290KTsKLQlrZnJlZShyc2MpOwotfQotCi0vKioKLSAqIGRwdV9yc2NfYmluZCAt IGJpbmQgcnNjIGRldmljZSB3aXRoIGNvbnRyb2xsaW5nIGRldmljZQotICogQGRldjogICAgICAg IFBvaW50ZXIgdG8gYmFzZSBvZiBwbGF0Zm9ybSBkZXZpY2UKLSAqIEBtYXN0ZXI6ICAgICBQb2lu dGVyIHRvIGNvbnRhaW5lciBvZiBkcm0gZGV2aWNlCi0gKiBAZGF0YTogICAgICAgUG9pbnRlciB0 byBwcml2YXRlIGRhdGEKLSAqIFJldHVybnM6ICAgICBaZXJvIG9uIHN1Y2Nlc3MKLSAqLwotc3Rh dGljIGludCBkcHVfcnNjX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3QgZGV2aWNl ICptYXN0ZXIsCi0JCXZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRwdV9yc2NfcHJpdiAqcnNjOwot CXN0cnVjdCBkcm1fZGV2aWNlICpkcm07Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9 IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCi0JaWYgKCFkZXYgfHwgIXBkZXYgfHwgIW1hc3Rl cikgewotCQlwcl9lcnIoImludmFsaWQgcGFyYW0ocyksIGRldiAlcEssIHBkZXYgJXBLLCBtYXN0 ZXIgJXBLXG4iLAotCQkJCWRldiwgcGRldiwgbWFzdGVyKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0J fQotCi0JZHJtID0gZGV2X2dldF9kcnZkYXRhKG1hc3Rlcik7Ci0JcnNjID0gcGxhdGZvcm1fZ2V0 X2RydmRhdGEocGRldik7Ci0JaWYgKCFkcm0gfHwgIXJzYykgewotCQlwcl9lcnIoImludmFsaWQg cGFyYW0ocyksIGRybSAlcEssIHJzYyAlcEtcbiIsCi0JCQkJZHJtLCByc2MpOwotCQlyZXR1cm4g LUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZyc2MtPmNsaWVudF9sb2NrKTsKLQlyc2MtPm1h c3Rlcl9kcm0gPSBkcm07Ci0JbXV0ZXhfdW5sb2NrKCZyc2MtPmNsaWVudF9sb2NrKTsKLQotCWRw dV9kYmdfcmVnX3JlZ2lzdGVyX2Jhc2UoRFBVX1JTQ19EUlZfREJHX05BTUUsIHJzYy0+ZHJ2X2lv LmJhc2UsCi0JCQkJCQkJcnNjLT5kcnZfaW8ubGVuKTsKLQlkcHVfZGJnX3JlZ19yZWdpc3Rlcl9i YXNlKERQVV9SU0NfV1JBUFBFUl9EQkdfTkFNRSwKLQkJCQlyc2MtPndyYXBwZXJfaW8uYmFzZSwg cnNjLT53cmFwcGVyX2lvLmxlbik7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogZHB1X3JzY191 bmJpbmQgLSB1bmJpbmQgcnNjIGZyb20gY29udHJvbGxpbmcgZGV2aWNlCi0gKiBAZGV2OiAgICAg ICAgUG9pbnRlciB0byBiYXNlIG9mIHBsYXRmb3JtIGRldmljZQotICogQG1hc3RlcjogICAgIFBv aW50ZXIgdG8gY29udGFpbmVyIG9mIGRybSBkZXZpY2UKLSAqIEBkYXRhOiAgICAgICBQb2ludGVy IHRvIHByaXZhdGUgZGF0YQotICovCi1zdGF0aWMgdm9pZCBkcHVfcnNjX3VuYmluZChzdHJ1Y3Qg ZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2UgKm1hc3Rlciwgdm9pZCAqZGF0YSkKLXsKLQlz dHJ1Y3QgZHB1X3JzY19wcml2ICpyc2M7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9 IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCi0JaWYgKCFkZXYgfHwgIXBkZXYpIHsKLQkJcHJf ZXJyKCJpbnZhbGlkIHBhcmFtKHMpXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCXJzYyA9IHBsYXRm b3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCWlmICghcnNjKSB7Ci0JCXByX2VycigiaW52YWxpZCBk aXNwbGF5IHJzY1xuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQltdXRleF9sb2NrKCZyc2MtPmNsaWVu dF9sb2NrKTsKLQlyc2MtPm1hc3Rlcl9kcm0gPSBOVUxMOwotCW11dGV4X3VubG9jaygmcnNjLT5j bGllbnRfbG9jayk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyBkcHVf cnNjX2NvbXBfb3BzID0gewotCS5iaW5kID0gZHB1X3JzY19iaW5kLAotCS51bmJpbmQgPSBkcHVf cnNjX3VuYmluZCwKLX07Ci0KLXN0YXRpYyBpbnQgZHB1X3JzY19wcm9iZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQotewotCWludCByZXQ7Ci0Jc3RydWN0IGRwdV9yc2NfcHJpdiAqcnNj OwotCXN0YXRpYyBpbnQgY291bnRlcjsKLQljaGFyICBuYW1lW01BWF9SU0NfQ0xJRU5UX05BTUVf TEVOXTsKLQotCXJzYyA9IGt6YWxsb2Moc2l6ZW9mKCpyc2MpLCBHRlBfS0VSTkVMKTsKLQlpZiAo IXJzYykgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIHJzY19hbGxvY19mYWlsOwotCX0KLQot CXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJzYyk7Ci0Jb2ZfcHJvcGVydHlfcmVhZF91MzIo cGRldi0+ZGV2Lm9mX25vZGUsICJxY29tLGRwdS1yc2MtdmVyc2lvbiIsCi0JCQkJCQkJCSZyc2Mt PnZlcnNpb24pOwotCi0JcmV0ID0gZHB1X3Bvd2VyX3Jlc291cmNlX2luaXQocGRldiwgJnJzYy0+ cGhhbmRsZSk7Ci0JaWYgKHJldCkgewotCQlwcl9lcnIoImRwdSByc2M6cG93ZXIgcmVzb3VyY2Ug aW5pdCBmYWlsZWQgcmV0OiVkXG4iLCByZXQpOwotCQlnb3RvIGRwdV9yc2NfZmFpbDsKLQl9Ci0K LQlyc2MtPnBjbGllbnQgPSBkcHVfcG93ZXJfY2xpZW50X2NyZWF0ZSgmcnNjLT5waGFuZGxlLCAi cnNjIik7Ci0JaWYgKElTX0VSUl9PUl9OVUxMKHJzYy0+cGNsaWVudCkpIHsKLQkJcmV0ID0gUFRS X0VSUihyc2MtPnBjbGllbnQpOwotCQlyc2MtPnBjbGllbnQgPSBOVUxMOwotCQlwcl9lcnIoImRw dSByc2M6cG93ZXIgY2xpZW50IGNyZWF0ZSBmYWlsZWQgcmV0OiVkXG4iLCByZXQpOwotCQlnb3Rv IGRwdV9yc2NfZmFpbDsKLQl9Ci0KLQkvKioKLQkgKiBkcHUgcnNjIHNob3VsZCBhbHdheXMgdm90 ZSB0aHJvdWdoIGVuYWJsZSBwYXRoLCBzbGVlcCB2b3RlIGlzCi0JICogc2V0IHRvICIwIiBieSBk ZWZhdWx0LgotCSAqLwotCWRwdV9wb3dlcl9kYXRhX2J1c19zdGF0ZV91cGRhdGUoJnJzYy0+cGhh bmRsZSwgdHJ1ZSk7Ci0KLQlyc2MtPmRpc3BfcnNjID0gcnBtaF9nZXRfYnluYW1lKHBkZXYsICJk aXNwX3JzYyIpOwotCWlmIChJU19FUlJfT1JfTlVMTChyc2MtPmRpc3BfcnNjKSkgewotCQlyZXQg PSBQVFJfRVJSKHJzYy0+ZGlzcF9yc2MpOwotCQlyc2MtPmRpc3BfcnNjID0gTlVMTDsKLQkJcHJf ZXJyKCJkcHUgcnNjOmdldCBkaXNwbGF5IHJzYyBmYWlsZWQgcmV0OiVkXG4iLCByZXQpOwotCQln b3RvIGRwdV9yc2NfZmFpbDsKLQl9Ci0KLQlyZXQgPSBtc21fZHNzX2lvcmVtYXBfYnluYW1lKHBk ZXYsICZyc2MtPndyYXBwZXJfaW8sICJ3cmFwcGVyIik7Ci0JaWYgKHJldCkgewotCQlwcl9lcnIo ImRwdSByc2M6IHdyYXBwZXIgaW8gZGF0YSBtYXBwaW5nIGZhaWxlZCByZXQ9JWRcbiIsIHJldCk7 Ci0JCWdvdG8gZHB1X3JzY19mYWlsOwotCX0KLQotCXJldCA9IG1zbV9kc3NfaW9yZW1hcF9ieW5h bWUocGRldiwgJnJzYy0+ZHJ2X2lvLCAiZHJ2Iik7Ci0JaWYgKHJldCkgewotCQlwcl9lcnIoImRw dSByc2M6IGRydiBpbyBkYXRhIG1hcHBpbmcgZmFpbGVkIHJldDolZFxuIiwgcmV0KTsKLQkJZ290 byBkcHVfcnNjX2ZhaWw7Ci0JfQotCi0JcnNjLT5mcyA9IGRldm1fcmVndWxhdG9yX2dldCgmcGRl di0+ZGV2LCAidmRkIik7Ci0JaWYgKElTX0VSUl9PUl9OVUxMKHJzYy0+ZnMpKSB7Ci0JCXJzYy0+ ZnMgPSBOVUxMOwotCQlwcl9lcnIoInVuYWJsZSB0byBnZXQgcmVndWxhdG9yXG4iKTsKLQkJZ290 byBkcHVfcnNjX2ZhaWw7Ci0JfQotCi0JcmV0ID0gZHB1X3JzY19od19yZWdpc3Rlcihyc2MpOwot CWlmIChyZXQpIHsKLQkJcHJfZXJyKCJkcHUgcnNjOiBodyByZWdpc3RlciBmYWlsZWQgcmV0OiVk XG4iLCByZXQpOwotCQlnb3RvIGRwdV9yc2NfZmFpbDsKLQl9Ci0KLQlpZiAoZHB1X3JzY19jbGtf ZW5hYmxlKCZyc2MtPnBoYW5kbGUsIHJzYy0+cGNsaWVudCwgdHJ1ZSkpIHsKLQkJcHJfZXJyKCJm YWlsZWQgdG8gZW5hYmxlIGRwdSByc2MgcG93ZXIgcmVzb3VyY2VzXG4iKTsKLQkJZ290byBkcHVf cnNjX2ZhaWw7Ci0JfQotCi0JaWYgKGRwdV9yc2NfdGltZXJfY2FsY3VsYXRlKHJzYywgTlVMTCkp Ci0JCWdvdG8gZHB1X3JzY19mYWlsOwotCi0JZHB1X3JzY19jbGtfZW5hYmxlKCZyc2MtPnBoYW5k bGUsIHJzYy0+cGNsaWVudCwgZmFsc2UpOwotCi0JSU5JVF9MSVNUX0hFQUQoJnJzYy0+Y2xpZW50 X2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZyc2MtPmV2ZW50X2xpc3QpOwotCW11dGV4X2luaXQo JnJzYy0+Y2xpZW50X2xvY2spOwotCi0JcHJfaW5mbygiZHB1IHJzYyBpbmRleDolZCBwcm9iZWQg c3VjY2Vzc2Z1bGx5XG4iLAotCQkJCURQVV9SU0NfSU5ERVggKyBjb3VudGVyKTsKLQotCXJzY19w cnZfbGlzdFtEUFVfUlNDX0lOREVYICsgY291bnRlcl0gPSByc2M7Ci0Jc25wcmludGYobmFtZSwg TUFYX1JTQ19DTElFTlRfTkFNRV9MRU4sICIlcyVkIiwgImRwdV9yc2MiLCBjb3VudGVyKTsKLQlf ZHB1X3JzY19pbml0X2RlYnVnZnMocnNjLCBuYW1lKTsKLQljb3VudGVyKys7Ci0KLQlyZXQgPSBj b21wb25lbnRfYWRkKCZwZGV2LT5kZXYsICZkcHVfcnNjX2NvbXBfb3BzKTsKLQlpZiAocmV0KQot CQlwcl9kZWJ1ZygiY29tcG9uZW50IGFkZCBmYWlsZWQsIHJldD0lZFxuIiwgcmV0KTsKLQlyZXQg PSAwOwotCi0JcmV0dXJuIHJldDsKLQotZHB1X3JzY19mYWlsOgotCWRwdV9yc2NfZGVpbml0KHBk ZXYsIHJzYyk7Ci1yc2NfYWxsb2NfZmFpbDoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50 IGRwdV9yc2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0 IGRwdV9yc2NfcHJpdiAqcnNjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0KLQlkcHVf cnNjX2RlaW5pdChwZGV2LCByc2MpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3Ry dWN0IG9mX2RldmljZV9pZCBkdF9tYXRjaFtdID0gewotCXsgLmNvbXBhdGlibGUgPSAicWNvbSxk cHUtcnNjIn0sCi0Je30KLX07Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGR0X21hdGNoKTsK LQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZHB1X3JzY19wbGF0Zm9ybV9kcml2ZXIg PSB7Ci0JLnByb2JlICAgICAgPSBkcHVfcnNjX3Byb2JlLAotCS5yZW1vdmUgICAgID0gZHB1X3Jz Y19yZW1vdmUsCi0JLmRyaXZlciAgICAgPSB7Ci0JCS5uYW1lICAgPSAiZHB1X3JzYyIsCi0JCS5v Zl9tYXRjaF90YWJsZSA9IGR0X21hdGNoLAotCX0sCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBk cHVfcnNjX3JlZ2lzdGVyKHZvaWQpCi17Ci0JcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rl cigmZHB1X3JzY19wbGF0Zm9ybV9kcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZHB1 X3JzY191bnJlZ2lzdGVyKHZvaWQpCi17Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmRw dV9yc2NfcGxhdGZvcm1fZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQoZHB1X3JzY19yZWdpc3Rl cik7Ci1tb2R1bGVfZXhpdChkcHVfcnNjX3VucmVnaXN0ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL21zbS9kcHVfcnNjX2h3LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9yc2Nf aHcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWEzNzlkZS4uMDAwMDAwMAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwdV9yc2NfaHcuYworKysgL2Rldi9udWxsCkBAIC0xLDgx OCArMCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRp b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFu ZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQotI2RlZmluZSBw cl9mbXQoZm10KQkiW2RwdV9yc2NfaHc6JXM6JWRdOiAiIGZtdCwgX19mdW5jX18sIF9fTElORV9f Ci0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+ Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLQotI2luY2x1ZGUgImRwdV9yc2NfcHJpdi5oIgot I2luY2x1ZGUgImRwdV9kYmcuaCIKLQotLyogZGlzcGxheSByc2Mgb2Zmc2V0ICovCi0jZGVmaW5l IERQVV9SU0NDX1BEQ19TRVFfU1RBUlRfQUREUl9SRUdfT0ZGU0VUX0RSVjAJMHgwMjAKLSNkZWZp bmUgRFBVX1JTQ0NfUERDX01BVENIX1ZBTFVFX0xPX1JFR19PRkZTRVRfRFJWMAkweDAyNAotI2Rl ZmluZSBEUFVfUlNDQ19QRENfTUFUQ0hfVkFMVUVfSElfUkVHX09GRlNFVF9EUlYwCTB4MDI4Ci0j ZGVmaW5lIERQVV9SU0NDX1BEQ19TTEFWRV9JRF9EUlYwCQkJMHgwMmMKLSNkZWZpbmUgRFBVX1JT Q0NfU0VRX1BST0dSQU1fQ09VTlRFUgkJCTB4NDA4Ci0jZGVmaW5lIERQVV9SU0NDX1NFUV9DRkdf QlJfQUREUl8wX0RSVjAJCQkweDQxMAotI2RlZmluZSBEUFVfUlNDQ19TRVFfQ0ZHX0JSX0FERFJf MV9EUlYwCQkJMHg0MTQKLSNkZWZpbmUgRFBVX1JTQ0NfU0VRX01FTV8wX0RSVjAJCQkJMHg2MDAK LSNkZWZpbmUgRFBVX1JTQ0NfU09MVkVSX09WRVJSSURFX0NUUkxfRFJWMAkJMHhjMTQKLSNkZWZp bmUgRFBVX1JTQ0NfRVJST1JfSVJRX1NUQVRVU19EUlYwCQkJMHgwZDAKLSNkZWZpbmUgRFBVX1JT Q0NfU0VRX0JVU1lfRFJWMAkJCQkweDQwNAotI2RlZmluZSBEUFVfUlNDQ19TT0xWRVJfU1RBVFVT MF9EUlYwCQkJMHhjMjQKLSNkZWZpbmUgRFBVX1JTQ0NfU09MVkVSX1NUQVRVUzFfRFJWMAkJCTB4 YzI4Ci0jZGVmaW5lIERQVV9SU0NDX1NPTFZFUl9TVEFUVVMyX0RSVjAJCQkweGMyYwotI2RlZmlu ZSBEUFVfUlNDQ19BTUNfVENTX01PREVfSVJRX1NUQVRVU19EUlYwCQkweDFjMDAKLQotI2RlZmlu ZSBEUFVfUlNDQ19TT0ZUX1dBS0VVUF9USU1FX0xPX0RSVjAJCTB4YzA0Ci0jZGVmaW5lIERQVV9S U0NDX1NPRlRfV0FLRVVQX1RJTUVfSElfRFJWMAkJMHhjMDgKLSNkZWZpbmUgRFBVX1JTQ0NfTUFY X0lETEVfRFVSQVRJT05fRFJWMAkJCTB4YzBjCi0jZGVmaW5lIERQVV9SU0NfU09MVkVSX1RJTUVf U0xPVF9UQUJMRV8wX0RSVjAJCTB4MTAwMAotI2RlZmluZSBEUFVfUlNDX1NPTFZFUl9USU1FX1NM T1RfVEFCTEVfMV9EUlYwCQkweDEwMDQKLSNkZWZpbmUgRFBVX1JTQ19TT0xWRVJfVElNRV9TTE9U X1RBQkxFXzJfRFJWMAkJMHgxMDA4Ci0jZGVmaW5lIERQVV9SU0NfU09MVkVSX1RJTUVfU0xPVF9U QUJMRV8zX0RSVjAJCTB4MTAwYwotCi0jZGVmaW5lIERQVV9SU0NfU09MVkVSX1NPTFZFUl9NT0RF U19FTkFCTEVEX0RSVjAJMHhjMjAKLSNkZWZpbmUgRFBVX1JTQ19TT0xWRVJfTU9ERV9QUklfVEFC TEVfU0xPVDBfUFJJMF9EUlYwCTB4MTA4MAotI2RlZmluZSBEUFVfUlNDX1NPTFZFUl9NT0RFX1BS SV9UQUJMRV9TTE9UMV9QUkkwX0RSVjAJMHgxMTAwCi0jZGVmaW5lIERQVV9SU0NfU09MVkVSX01P REVfUFJJX1RBQkxFX1NMT1QxX1BSSTNfRFJWMAkweDExMGMKLSNkZWZpbmUgRFBVX1JTQ19TT0xW RVJfTU9ERV9QUklfVEFCTEVfU0xPVDJfUFJJMF9EUlYwCTB4MTE4MAotI2RlZmluZSBEUFVfUlND X1NPTFZFUl9NT0RFX1BSSV9UQUJMRV9TTE9UMl9QUkkzX0RSVjAJMHgxMThjCi0KLSNkZWZpbmUg RFBVX1JTQ19TT0xWRVJfT1ZFUlJJREVfTU9ERV9EUlYwCQkweGMxOAotI2RlZmluZSBEUFVfUlND X1NPTFZFUl9PVkVSUklERV9DVFJMX0RSVjAJCTB4YzE0Ci0jZGVmaW5lIERQVV9SU0NfVElNRVJT X0NPTlNJREVSRURfRFJWMAkJCTB4YzAwCi0jZGVmaW5lIERQVV9SU0NfU09MVkVSX09WRVJSSURF X0lETEVfVElNRV9EUlYwCQkweGMxYwotCi0jZGVmaW5lIERQVV9SU0NfU09MVkVSX01PREVfUEFS TTBfRFJWMF9NT0RFMAkJMHhjMzAKLSNkZWZpbmUgRFBVX1JTQ19TT0xWRVJfTU9ERV9QQVJNMV9E UlYwX01PREUwCQkweGMzNAotI2RlZmluZSBEUFVfUlNDX1NPTFZFUl9NT0RFX1BBUk0yX0RSVjBf TU9ERTAJCTB4YzM4Ci0jZGVmaW5lIERQVV9SU0NfU09MVkVSX01PREVfUEFSTTNfRFJWMF9NT0RF MAkJMHhjNDAKLQotI2RlZmluZSBEUFVfUlNDX1NPTFZFUl9NT0RFX1BBUk0wX0RSVjBfTU9ERTEJ CTB4YzRjCi0jZGVmaW5lIERQVV9SU0NfU09MVkVSX01PREVfUEFSTTFfRFJWMF9NT0RFMQkJMHhj NTAKLSNkZWZpbmUgRFBVX1JTQ19TT0xWRVJfTU9ERV9QQVJNMl9EUlYwX01PREUxCQkweGM1NAot I2RlZmluZSBEUFVfUlNDX1NPTFZFUl9NT0RFX1BBUk0zX0RSVjBfTU9ERTEJCTB4YzVjCi0KLSNk ZWZpbmUgRFBVX1JTQ19TT0xWRVJfTU9ERV9QQVJNMF9EUlYwX01PREUyCQkweGM2OAotI2RlZmlu ZSBEUFVfUlNDX1NPTFZFUl9NT0RFX1BBUk0xX0RSVjBfTU9ERTIJCTB4YzZjCi0jZGVmaW5lIERQ VV9SU0NfU09MVkVSX01PREVfUEFSTTJfRFJWMF9NT0RFMgkJMHhjNzAKLSNkZWZpbmUgRFBVX1JT Q19TT0xWRVJfTU9ERV9QQVJNM19EUlYwX01PREUyCQkweGM3OAotCi0jZGVmaW5lIERQVV9SU0ND X1RDU19EUlYwX0NPTlRST0wJCQkweDFjMTQKLQotI2RlZmluZSBEUFVfUlNDQ19XUkFQUEVSX0NU UkwJCQkJMHgwMDAKLSNkZWZpbmUgRFBVX1JTQ0NfV1JBUFBFUl9PVkVSUklERV9DVFJMCQkJMHgw MDQKLSNkZWZpbmUgRFBVX1JTQ0NfV1JBUFBFUl9TVEFUSUNfV0FLRVVQXzAJCTB4MDA4Ci0jZGVm aW5lIERQVV9SU0NDX1dSQVBQRVJfUlNDQ19NT0RFX1RIUkVTSE9MRAkJMHgwMGMKLSNkZWZpbmUg RFBVX1JTQ0NfV1JBUFBFUl9ERUJVR19CVVMJCQkweDAxMAotI2RlZmluZSBEUFVfUlNDQ19XUkFQ UEVSX1ZTWU5DX1RJTUVTVEFNUDAJCTB4MDE4Ci0jZGVmaW5lIERQVV9SU0NDX1dSQVBQRVJfVlNZ TkNfVElNRVNUQU1QMQkJMHgwMWMKLSNkZWZpbmUgRFBVX1JTQ0NfU1BBUkVfUFdSX0VWRU5UCQkJ MHgwMjAKLSNkZWZpbmUgRFBVX1JTQ0NfUFdSX0NUUkwJCQkJMHgwMjQKLQotLyogcXRpbWVyIG9m ZnNldCAqLwotI2RlZmluZSBEUFVfUlNDQ19RVE1SX0FDX0hXX0ZSQU1FX1NFTF8xCQkJMHgxRkUw Ci0jZGVmaW5lIERQVV9SU0NDX1FUTVJfQUNfSFdfRlJBTUVfU0VMXzIJCQkweDFGRjAKLSNkZWZp bmUgRFBVX1JTQ0NfUVRNUl9BQ19DTlRBQ1IwX0ZHMAkJCTB4MTA0MAotI2RlZmluZSBEUFVfUlND Q19RVE1SX0FDX0NOVEFDUjFfRkcwCQkJMHgxMDQ0Ci0jZGVmaW5lIERQVV9SU0NDX0YwX1FUTVJf VjFfQ05UUF9DVkFMX0xPCQkweDIwMjAKLSNkZWZpbmUgRFBVX1JTQ0NfRjBfUVRNUl9WMV9DTlRQ X0NWQUxfSEkJCTB4MjAyNAotI2RlZmluZSBEUFVfUlNDQ19GMV9RVE1SX1YxX0NOVFBfQ1ZBTF9M TwkJMHgzMDIwCi0jZGVmaW5lIERQVV9SU0NDX0YxX1FUTVJfVjFfQ05UUF9DVkFMX0hJCQkweDMw MjQKLSNkZWZpbmUgRFBVX1JTQ0NfRjBfUVRNUl9WMV9DTlRQX0NUTAkJCTB4MjAyQwotI2RlZmlu ZSBEUFVfUlNDQ19GMV9RVE1SX1YxX0NOVFBfQ1RMCQkJMHgzMDJDCi0KLSNkZWZpbmUgTUFYX0NI RUNLX0xPT1BTCQkJNTAwCi0jZGVmaW5lIFBPV0VSX0NUUkxfQklUXzEyCQkxMgotCi1zdGF0aWMg dm9pZCByc2NfZXZlbnRfdHJpZ2dlcihzdHJ1Y3QgZHB1X3JzY19wcml2ICpyc2MsIHVpbnQzMl90 IGV2ZW50X3R5cGUpCi17Ci0Jc3RydWN0IGRwdV9yc2NfZXZlbnQgKmV2ZW50OwotCi0JbGlzdF9m b3JfZWFjaF9lbnRyeShldmVudCwgJnJzYy0+ZXZlbnRfbGlzdCwgbGlzdCkKLQkJaWYgKGV2ZW50 LT5ldmVudF90eXBlICYgZXZlbnRfdHlwZSkKLQkJCWV2ZW50LT5jYl9mdW5jKGV2ZW50X3R5cGUs IGV2ZW50LT51c3IpOwotfQotCi1zdGF0aWMgaW50IHJzY19od19xdGltZXJfaW5pdChzdHJ1Y3Qg ZHB1X3JzY19wcml2ICpyc2MpCi17Ci0JcHJfZGVidWcoInJzYyBoYXJkd2FyZSBxdGltZXIgaW5p dFxuIik7Ci0KLQlkc3NfcmVnX3coJnJzYy0+d3JhcHBlcl9pbywgRFBVX1JTQ0NfUVRNUl9BQ19I V19GUkFNRV9TRUxfMSwKLQkJCQkJCTB4ZmZmZmZmZmYsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JZHNz X3JlZ193KCZyc2MtPndyYXBwZXJfaW8sIERQVV9SU0NDX1FUTVJfQUNfSFdfRlJBTUVfU0VMXzIs Ci0JCQkJCQkweGZmZmZmZmZmLCByc2MtPmRlYnVnX21vZGUpOwotCi0JZHNzX3JlZ193KCZyc2Mt PndyYXBwZXJfaW8sIERQVV9SU0NDX1FUTVJfQUNfQ05UQUNSMF9GRzAsCi0JCQkJCQkweDEsIHJz Yy0+ZGVidWdfbW9kZSk7Ci0JZHNzX3JlZ193KCZyc2MtPndyYXBwZXJfaW8sIERQVV9SU0NDX1FU TVJfQUNfQ05UQUNSMV9GRzAsCi0JCQkJCQkweDEsIHJzYy0+ZGVidWdfbW9kZSk7Ci0KLQlkc3Nf cmVnX3coJnJzYy0+d3JhcHBlcl9pbywgRFBVX1JTQ0NfRjBfUVRNUl9WMV9DTlRQX0NWQUxfTE8s Ci0JCQkJCQkweGZmZmZmZmZmLCByc2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT53 cmFwcGVyX2lvLCBEUFVfUlNDQ19GMF9RVE1SX1YxX0NOVFBfQ1ZBTF9ISSwKLQkJCQkJCTB4ZmZm ZmZmZmYsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JZHNzX3JlZ193KCZyc2MtPndyYXBwZXJfaW8sIERQ VV9SU0NDX0YxX1FUTVJfVjFfQ05UUF9DVkFMX0xPLAotCQkJCQkJMHhmZmZmZmZmZiwgcnNjLT5k ZWJ1Z19tb2RlKTsKLQlkc3NfcmVnX3coJnJzYy0+d3JhcHBlcl9pbywgRFBVX1JTQ0NfRjFfUVRN Ul9WMV9DTlRQX0NWQUxfSEksCi0JCQkJCQkweGZmZmZmZmZmLCByc2MtPmRlYnVnX21vZGUpOwot Ci0JZHNzX3JlZ193KCZyc2MtPndyYXBwZXJfaW8sIERQVV9SU0NDX0YwX1FUTVJfVjFfQ05UUF9D VEwsCi0JCQkJCQkweDEsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JZHNzX3JlZ193KCZyc2MtPndyYXBw ZXJfaW8sIERQVV9SU0NDX0YxX1FUTVJfVjFfQ05UUF9DVEwsCi0JCQkJCQkweDEsIHJzYy0+ZGVi dWdfbW9kZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCByc2NfaHdfcGRjX2luaXQo c3RydWN0IGRwdV9yc2NfcHJpdiAqcnNjKQotewotCXByX2RlYnVnKCJyc2MgaGFyZHdhcmUgcGRj IGluaXRcbiIpOwotCi0JZHNzX3JlZ193KCZyc2MtPmRydl9pbywgRFBVX1JTQ0NfUERDX1NFUV9T VEFSVF9BRERSX1JFR19PRkZTRVRfRFJWMCwKLQkJCQkJCTB4NDUyMCwgcnNjLT5kZWJ1Z19tb2Rl KTsKLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lvLCBEUFVfUlNDQ19QRENfTUFUQ0hfVkFMVUVfTE9f UkVHX09GRlNFVF9EUlYwLAotCQkJCQkJMHg0NTEwLCByc2MtPmRlYnVnX21vZGUpOwotCWRzc19y ZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NDX1BEQ19NQVRDSF9WQUxVRV9ISV9SRUdfT0ZGU0VU X0RSVjAsCi0JCQkJCQkweDQ1MTQsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JZHNzX3JlZ193KCZyc2Mt PmRydl9pbywgRFBVX1JTQ0NfUERDX1NMQVZFX0lEX0RSVjAsCi0JCQkJCQkweDEsIHJzYy0+ZGVi dWdfbW9kZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCByc2NfaHdfd3JhcHBlcl9p bml0KHN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYykKLXsKLQlwcl9kZWJ1ZygicnNjIGhhcmR3YXJl IHdyYXBwZXIgaW5pdFxuIik7Ci0KLQlkc3NfcmVnX3coJnJzYy0+d3JhcHBlcl9pbywgRFBVX1JT Q0NfV1JBUFBFUl9TVEFUSUNfV0FLRVVQXzAsCi0JCXJzYy0+dGltZXJfY29uZmlnLnN0YXRpY193 YWtldXBfdGltZV9ucywgcnNjLT5kZWJ1Z19tb2RlKTsKLQotCWRzc19yZWdfdygmcnNjLT53cmFw cGVyX2lvLCBEUFVfUlNDQ19XUkFQUEVSX1JTQ0NfTU9ERV9USFJFU0hPTEQsCi0JCXJzYy0+dGlt ZXJfY29uZmlnLnJzY19tb2RlX3RocmVzaG9sZF90aW1lX25zLCByc2MtPmRlYnVnX21vZGUpOwot Ci0JZHNzX3JlZ193KCZyc2MtPndyYXBwZXJfaW8sIERQVV9SU0NDX1dSQVBQRVJfT1ZFUlJJREVf Q1RSTCwKLQkJCQkJCUJJVCg4KSwgcnNjLT5kZWJ1Z19tb2RlKTsKLQlyZXR1cm4gMDsKLX0KLQot c3RhdGljIGludCByc2NfaHdfc2VxX21lbW9yeV9pbml0KHN0cnVjdCBkcHVfcnNjX3ByaXYgKnJz YykKLXsKLQlwcl9kZWJ1ZygicnNjIHNlcXVlbmNlciBtZW1vcnkgaW5pdFxuIik7Ci0KLQkvKiBN b2RlIC0gMCBzZXF1ZW5jZSAqLwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NDX1NF UV9NRU1fMF9EUlYwICsgMHgwLAotCQkJCQkJMHhlMGE4OGJhYiwgcnNjLT5kZWJ1Z19tb2RlKTsK LQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lvLCBEUFVfUlNDQ19TRVFfTUVNXzBfRFJWMCArIDB4NCwK LQkJCQkJCTB4OGJhYmVjMzksIHJzYy0+ZGVidWdfbW9kZSk7Ci0JZHNzX3JlZ193KCZyc2MtPmRy dl9pbywgRFBVX1JTQ0NfU0VRX01FTV8wX0RSVjAgKyAweDgsCi0JCQkJCQkweDhiYWIyMDg4LCBy c2MtPmRlYnVnX21vZGUpOwotCi0JLyogTW9kZSAtIDEgc2VxdWVuY2UgKi8KLQlkc3NfcmVnX3co JnJzYy0+ZHJ2X2lvLCBEUFVfUlNDQ19TRVFfTUVNXzBfRFJWMCArIDB4YywKLQkJCQkJCTB4Mzll MDM4YTgsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JZHNzX3JlZ193KCZyc2MtPmRydl9pbywgRFBVX1JT Q0NfU0VRX01FTV8wX0RSVjAgKyAweDEwLAotCQkJCQkJMHg4ODhiYWJlYywgcnNjLT5kZWJ1Z19t b2RlKTsKLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lvLCBEUFVfUlNDQ19TRVFfTUVNXzBfRFJWMCAr IDB4MTQsCi0JCQkJCQkweGE4MDZhMDIwLCByc2MtPmRlYnVnX21vZGUpOwotCi0JLyogTW9kZSAt IDIgc2VxdWVuY2UgKi8KLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lvLCBEUFVfUlNDQ19TRVFfTUVN XzBfRFJWMCArIDB4MTgsCi0JCQkJCQkweGExMzhlYmFhLCByc2MtPmRlYnVnX21vZGUpOwotCWRz c19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NDX1NFUV9NRU1fMF9EUlYwICsgMHgxYywKLQkJ CQkJCTB4YWNhNTgxZTEsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JZHNzX3JlZ193KCZyc2MtPmRydl9p bywgRFBVX1JTQ0NfU0VRX01FTV8wX0RSVjAgKyAweDIwLAotCQkJCQkJMHhlMmEyZWRlMCwgcnNj LT5kZWJ1Z19tb2RlKTsKLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lvLCBEUFVfUlNDQ19TRVFfTUVN XzBfRFJWMCArIDB4MjQsCi0JCQkJCQkweGVhOGEzOTgyLCByc2MtPmRlYnVnX21vZGUpOwotCWRz c19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NDX1NFUV9NRU1fMF9EUlYwICsgMHgyOCwKLQkJ CQkJCTB4YTkyMDg4OGMsIHJzYy0+ZGVidWdfbW9kZSk7Ci0KLQkvKiB0Y3Mgc2xlZXAgc2VxdWVu Y2UgKi8KLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lvLCBEUFVfUlNDQ19TRVFfTUVNXzBfRFJWMCAr IDB4MmMsCi0JCQkJCQkweDg5ZTZhNmU5LCByc2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygm cnNjLT5kcnZfaW8sIERQVV9SU0NDX1NFUV9NRU1fMF9EUlYwICsgMHgzMCwKLQkJCQkJCTB4YTdl OWE5MjAsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JZHNzX3JlZ193KCZyc2MtPmRydl9pbywgRFBVX1JT Q0NfU0VRX01FTV8wX0RSVjAgKyAweDM0LAotCQkJCQkJMHgwMDIwODllNywgcnNjLT5kZWJ1Z19t b2RlKTsKLQotCS8qIGJyYW5jaCBhZGRyZXNzICovCi0JZHNzX3JlZ193KCZyc2MtPmRydl9pbywg RFBVX1JTQ0NfU0VRX0NGR19CUl9BRERSXzBfRFJWMCwKLQkJCQkJCTB4MmIsIHJzYy0+ZGVidWdf bW9kZSk7Ci0JZHNzX3JlZ193KCZyc2MtPmRydl9pbywgRFBVX1JTQ0NfU0VRX0NGR19CUl9BRERS XzFfRFJWMCwKLQkJCQkJCTB4MzEsIHJzYy0+ZGVidWdfbW9kZSk7Ci0KLQlyZXR1cm4gMDsKLX0K LQotc3RhdGljIGludCByc2NfaHdfc29sdmVyX2luaXQoc3RydWN0IGRwdV9yc2NfcHJpdiAqcnNj KQotewotCWNvbnN0IHUzMiBtb2RlXzBfc3RhcnRfYWRkciA9IDB4MDsKLQljb25zdCB1MzIgbW9k ZV8xX3N0YXJ0X2FkZHIgPSAweGE7Ci0JY29uc3QgdTMyIG1vZGVfMl9zdGFydF9hZGRyID0gMHgx NTsKLQotCXByX2RlYnVnKCJyc2Mgc29sdmVyIGluaXRcbiIpOwotCi0JZHNzX3JlZ193KCZyc2Mt PmRydl9pbywgRFBVX1JTQ0NfU09GVF9XQUtFVVBfVElNRV9MT19EUlYwLAotCQkJCQkweEZGRkZG RkZGLCByc2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0ND X1NPRlRfV0FLRVVQX1RJTUVfSElfRFJWMCwKLQkJCQkJMHhGRkZGRkZGRiwgcnNjLT5kZWJ1Z19t b2RlKTsKLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lvLCBEUFVfUlNDQ19NQVhfSURMRV9EVVJBVElP Tl9EUlYwLAotCQkJCQkweEVGRkZGRkZGLCByc2MtPmRlYnVnX21vZGUpOwotCi0JZHNzX3JlZ193 KCZyc2MtPmRydl9pbywgRFBVX1JTQ19TT0xWRVJfVElNRV9TTE9UX1RBQkxFXzBfRFJWMCwKLQkJ CQkJCTB4MCwgcnNjLT5kZWJ1Z19tb2RlKTsKLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lvLCBEUFVf UlNDX1NPTFZFUl9USU1FX1NMT1RfVEFCTEVfMV9EUlYwLAotCQlyc2MtPnRpbWVyX2NvbmZpZy5y c2NfdGltZV9zbG90XzBfbnMsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JZHNzX3JlZ193KCZyc2MtPmRy dl9pbywgRFBVX1JTQ19TT0xWRVJfVElNRV9TTE9UX1RBQkxFXzJfRFJWMCwKLQkJcnNjLT50aW1l cl9jb25maWcucnNjX3RpbWVfc2xvdF8xX25zLCByc2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdf dygmcnNjLT5kcnZfaW8sIERQVV9SU0NfU09MVkVSX1RJTUVfU0xPVF9UQUJMRV8zX0RSVjAsCi0J CXJzYy0+dGltZXJfY29uZmlnLnJzY190aW1lX3Nsb3RfMl9ucywgcnNjLT5kZWJ1Z19tb2RlKTsK LQotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NfU09MVkVSX1NPTFZFUl9NT0RFU19F TkFCTEVEX0RSVjAsCi0JCQkJCQkweDcsIHJzYy0+ZGVidWdfbW9kZSk7Ci0KLQlkc3NfcmVnX3co JnJzYy0+ZHJ2X2lvLCBEUFVfUlNDX1NPTFZFUl9NT0RFX1BSSV9UQUJMRV9TTE9UMF9QUkkwX0RS VjAsCi0JCQkJCQkweDAsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JZHNzX3JlZ193KCZyc2MtPmRydl9p bywgRFBVX1JTQ19TT0xWRVJfTU9ERV9QUklfVEFCTEVfU0xPVDFfUFJJMF9EUlYwLAotCQkJCQkJ MHgxLCByc2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0Nf U09MVkVSX01PREVfUFJJX1RBQkxFX1NMT1QxX1BSSTNfRFJWMCwKLQkJCQkJCTB4MSwgcnNjLT5k ZWJ1Z19tb2RlKTsKLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lvLCBEUFVfUlNDX1NPTFZFUl9NT0RF X1BSSV9UQUJMRV9TTE9UMl9QUkkwX0RSVjAsCi0JCQkJCQkweDIsIHJzYy0+ZGVidWdfbW9kZSk7 Ci0JZHNzX3JlZ193KCZyc2MtPmRydl9pbywgRFBVX1JTQ19TT0xWRVJfTU9ERV9QUklfVEFCTEVf U0xPVDJfUFJJM19EUlYwLAotCQkJCQkJMHgyLCByc2MtPmRlYnVnX21vZGUpOwotCi0JZHNzX3Jl Z193KCZyc2MtPmRydl9pbywgRFBVX1JTQ19TT0xWRVJfT1ZFUlJJREVfTU9ERV9EUlYwLAotCQkJ CQkJMHgwLCByc2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9S U0NfU09MVkVSX09WRVJSSURFX0NUUkxfRFJWMCwKLQkJCQkJbW9kZV8wX3N0YXJ0X2FkZHIsIHJz Yy0+ZGVidWdfbW9kZSk7Ci0JZHNzX3JlZ193KCZyc2MtPmRydl9pbywgRFBVX1JTQ19USU1FUlNf Q09OU0lERVJFRF9EUlYwLAotCQkJCQkJMHgxLCByc2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdf dygmcnNjLT5kcnZfaW8sIERQVV9SU0NfU09MVkVSX09WRVJSSURFX0lETEVfVElNRV9EUlYwLAot CQkJCQkJMHgwMTAwMDAxMCwgcnNjLT5kZWJ1Z19tb2RlKTsKLQotCWRzc19yZWdfdygmcnNjLT5k cnZfaW8sIERQVV9SU0NfU09MVkVSX01PREVfUEFSTTBfRFJWMF9NT0RFMCwKLQkJCQkJbW9kZV8w X3N0YXJ0X2FkZHIsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JZHNzX3JlZ193KCZyc2MtPmRydl9pbywg RFBVX1JTQ19TT0xWRVJfTU9ERV9QQVJNMV9EUlYwX01PREUwLAotCQkJCQkweDgwMDAwMDAwLCBy c2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NfU09MVkVS X01PREVfUEFSTTJfRFJWMF9NT0RFMCwKLQkJCXJzYy0+dGltZXJfY29uZmlnLnJzY19iYWNrb2Zm X3RpbWVfbnMsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JZHNzX3JlZ193KCZyc2MtPmRydl9pbywgRFBV X1JTQ19TT0xWRVJfTU9ERV9QQVJNM19EUlYwX01PREUwLAotCQkJcnNjLT50aW1lcl9jb25maWcu cGRjX2JhY2tvZmZfdGltZV9ucywgcnNjLT5kZWJ1Z19tb2RlKTsKLQotCWRzc19yZWdfdygmcnNj LT5kcnZfaW8sIERQVV9SU0NfU09MVkVSX01PREVfUEFSTTBfRFJWMF9NT0RFMSwKLQkJCQkJbW9k ZV8xX3N0YXJ0X2FkZHIsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JZHNzX3JlZ193KCZyc2MtPmRydl9p bywgRFBVX1JTQ19TT0xWRVJfTU9ERV9QQVJNMV9EUlYwX01PREUxLAotCQkJCQkweDgwMDAwMDAw LCByc2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NfU09M VkVSX01PREVfUEFSTTJfRFJWMF9NT0RFMSwKLQkJCXJzYy0+dGltZXJfY29uZmlnLnJzY19iYWNr b2ZmX3RpbWVfbnMsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JZHNzX3JlZ193KCZyc2MtPmRydl9pbywg RFBVX1JTQ19TT0xWRVJfTU9ERV9QQVJNM19EUlYwX01PREUxLAotCQkJcnNjLT50aW1lcl9jb25m aWcucGRjX2JhY2tvZmZfdGltZV9ucywgcnNjLT5kZWJ1Z19tb2RlKTsKLQotCWRzc19yZWdfdygm cnNjLT5kcnZfaW8sIERQVV9SU0NfU09MVkVSX01PREVfUEFSTTBfRFJWMF9NT0RFMiwKLQkJCQkJ bW9kZV8yX3N0YXJ0X2FkZHIsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JZHNzX3JlZ193KCZyc2MtPmRy dl9pbywgRFBVX1JTQ19TT0xWRVJfTU9ERV9QQVJNMV9EUlYwX01PREUyLAotCQkJCQkweDgwMDAw MDAwLCByc2MtPmRlYnVnX21vZGUpOwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0Nf U09MVkVSX01PREVfUEFSTTJfRFJWMF9NT0RFMiwKLQkJCQkJMHgwLCByc2MtPmRlYnVnX21vZGUp OwotCWRzc19yZWdfdygmcnNjLT5kcnZfaW8sIERQVV9SU0NfU09MVkVSX01PREVfUEFSTTNfRFJW MF9NT0RFMiwKLQkJCXJzYy0+dGltZXJfY29uZmlnLnBkY19iYWNrb2ZmX3RpbWVfbnMsIHJzYy0+ ZGVidWdfbW9kZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCByc2NfaHdfdGltZXJf dXBkYXRlKHN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYykKLXsKLQlpZiAoIXJzYykgewotCQlwcl9k ZWJ1ZygiaW52YWxpZCBpbnB1dCBwYXJhbVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQot CXByX2RlYnVnKCJyc2MgaHcgdGltZXIgdXBkYXRlXG4iKTsKLQotCWRzc19yZWdfdygmcnNjLT5k cnZfaW8sIERQVV9SU0NfU09MVkVSX1RJTUVfU0xPVF9UQUJMRV8xX0RSVjAsCi0JCXJzYy0+dGlt ZXJfY29uZmlnLnJzY190aW1lX3Nsb3RfMF9ucywgcnNjLT5kZWJ1Z19tb2RlKTsKLQlkc3NfcmVn X3coJnJzYy0+ZHJ2X2lvLCBEUFVfUlNDX1NPTFZFUl9USU1FX1NMT1RfVEFCTEVfMl9EUlYwLAot CQlyc2MtPnRpbWVyX2NvbmZpZy5yc2NfdGltZV9zbG90XzFfbnMsIHJzYy0+ZGVidWdfbW9kZSk7 Ci0JZHNzX3JlZ193KCZyc2MtPmRydl9pbywgRFBVX1JTQ19TT0xWRVJfVElNRV9TTE9UX1RBQkxF XzNfRFJWMCwKLQkJcnNjLT50aW1lcl9jb25maWcucnNjX3RpbWVfc2xvdF8yX25zLCByc2MtPmRl YnVnX21vZGUpOwotCi0JZHNzX3JlZ193KCZyc2MtPmRydl9pbywgRFBVX1JTQ19TT0xWRVJfTU9E RV9QQVJNMl9EUlYwX01PREUwLAotCQkJcnNjLT50aW1lcl9jb25maWcucnNjX2JhY2tvZmZfdGlt ZV9ucywgcnNjLT5kZWJ1Z19tb2RlKTsKLQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lvLCBEUFVfUlND X1NPTFZFUl9NT0RFX1BBUk0zX0RSVjBfTU9ERTAsCi0JCQlyc2MtPnRpbWVyX2NvbmZpZy5wZGNf YmFja29mZl90aW1lX25zLCByc2MtPmRlYnVnX21vZGUpOwotCi0JZHNzX3JlZ193KCZyc2MtPmRy dl9pbywgRFBVX1JTQ19TT0xWRVJfTU9ERV9QQVJNMl9EUlYwX01PREUxLAotCQkJcnNjLT50aW1l cl9jb25maWcucnNjX2JhY2tvZmZfdGltZV9ucywgcnNjLT5kZWJ1Z19tb2RlKTsKLQlkc3NfcmVn X3coJnJzYy0+ZHJ2X2lvLCBEUFVfUlNDX1NPTFZFUl9NT0RFX1BBUk0zX0RSVjBfTU9ERTEsCi0J CQlyc2MtPnRpbWVyX2NvbmZpZy5wZGNfYmFja29mZl90aW1lX25zLCByc2MtPmRlYnVnX21vZGUp OwotCi0JZHNzX3JlZ193KCZyc2MtPmRydl9pbywgRFBVX1JTQ19TT0xWRVJfTU9ERV9QQVJNM19E UlYwX01PREUyLAotCQkJcnNjLT50aW1lcl9jb25maWcucGRjX2JhY2tvZmZfdGltZV9ucywgcnNj LT5kZWJ1Z19tb2RlKTsKLQotCWRzc19yZWdfdygmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19X UkFQUEVSX1NUQVRJQ19XQUtFVVBfMCwKLQkJcnNjLT50aW1lcl9jb25maWcuc3RhdGljX3dha2V1 cF90aW1lX25zLCByc2MtPmRlYnVnX21vZGUpOwotCi0JZHNzX3JlZ193KCZyc2MtPndyYXBwZXJf aW8sIERQVV9SU0NDX1dSQVBQRVJfUlNDQ19NT0RFX1RIUkVTSE9MRCwKLQkJcnNjLT50aW1lcl9j b25maWcucnNjX21vZGVfdGhyZXNob2xkX3RpbWVfbnMsIHJzYy0+ZGVidWdfbW9kZSk7Ci0KLQkv KiBtYWtlIHN1cmUgdGhhdCBodyB0aW1lcnMgYXJlIHVwZGF0ZWQgKi8KLQl3bWIoKTsKLQotCXJl dHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRwdV9yc2NfbW9kZTJfZXhpdChzdHJ1Y3QgZHB1X3Jz Y19wcml2ICpyc2MsCi0JCQkJCQllbnVtIGRwdV9yc2Nfc3RhdGUgc3RhdGUpCi17Ci0JaW50IHJj ID0gLUVCVVNZOwotCWludCBjb3VudCwgcmVnOwotCXVuc2lnbmVkIGxvbmcgcG93ZXJfc3RhdHVz OwotCi0JcnNjX2V2ZW50X3RyaWdnZXIocnNjLCBEUFVfUlNDX0VWRU5UX1BSRV9DT1JFX1JFU1RP UkUpOwotCi0JLyoqCi0JICogZm9yY2UgYnVzeSBhbmQgaWRsZSBkdXJpbmcgY2xrICYgdmlkZW8g bW9kZSBzdGF0ZSBiZWNhdXNlIGl0Ci0JICogaXMgdHJ5aW5nIHRvIGVudHJ5IGluIG1vZGUtMiB3 aXRob3V0IHR1cm5pbmcgb24gdGhlIHZ5c25jLgotCSAqLwotCWlmICgoc3RhdGUgPT0gRFBVX1JT Q19WSURfU1RBVEUpIHx8IChzdGF0ZSA9PSBEUFVfUlNDX0NMS19TVEFURSkpIHsKLQkJcmVnID0g ZHNzX3JlZ19yKCZyc2MtPndyYXBwZXJfaW8sCi0JCQlEUFVfUlNDQ19XUkFQUEVSX09WRVJSSURF X0NUUkwsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JCXJlZyAmPSB+KEJJVCg4KSB8IEJJVCgwKSk7Ci0J CWRzc19yZWdfdygmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19XUkFQUEVSX09WRVJSSURFX0NU UkwsCi0JCQkJCQkJcmVnLCByc2MtPmRlYnVnX21vZGUpOwotCX0KLQotCS8vIG5lZWRzIHJldmll dyB3aXRoIEhQRyBzZXF1ZW5jZQotCWRzc19yZWdfdygmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlND Q19GMV9RVE1SX1YxX0NOVFBfQ1ZBTF9MTywKLQkJCQkJMHgwLCByc2MtPmRlYnVnX21vZGUpOwot CWRzc19yZWdfdygmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19GMV9RVE1SX1YxX0NOVFBfQ1ZB TF9ISSwKLQkJCQkJMHgwLCByc2MtPmRlYnVnX21vZGUpOwotCi0JcmVnID0gZHNzX3JlZ19yKCZy c2MtPndyYXBwZXJfaW8sIERQVV9SU0NDX1dSQVBQRVJfQ1RSTCwKLQkJCQlyc2MtPmRlYnVnX21v ZGUpOwotCXJlZyAmPSB+QklUKDMpOwotCWRzc19yZWdfdygmcnNjLT53cmFwcGVyX2lvLCBEUFVf UlNDQ19XUkFQUEVSX0NUUkwsCi0JCQkJCXJlZywgcnNjLT5kZWJ1Z19tb2RlKTsKLQotCXJlZyA9 IGRzc19yZWdfcigmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19TUEFSRV9QV1JfRVZFTlQsCi0J CQkJCQkJcnNjLT5kZWJ1Z19tb2RlKTsKLQlyZWcgfD0gQklUKDEzKTsKLQlkc3NfcmVnX3coJnJz Yy0+d3JhcHBlcl9pbywgRFBVX1JTQ0NfU1BBUkVfUFdSX0VWRU5ULAotCQkJCQkJCXJlZywgcnNj LT5kZWJ1Z19tb2RlKTsKLQotCS8qIG1ha2Ugc3VyZSB0aGF0IG1vZGUtMiBleGl0IGJlZm9yZSB3 YWl0Ki8KLQl3bWIoKTsKLQotCS8qIHRoaXMgd2FpdCBpcyByZXF1aXJlZCB0byBtYWtlIHN1cmUg dGhhdCBnZHNjIGlzIHBvd2VyZWQgb24gKi8KLQlmb3IgKGNvdW50ID0gTUFYX0NIRUNLX0xPT1BT OyBjb3VudCA+IDA7IGNvdW50LS0pIHsKLQkJcG93ZXJfc3RhdHVzID0gZHNzX3JlZ19yKCZyc2Mt PndyYXBwZXJfaW8sCi0JCQkJRFBVX1JTQ0NfUFdSX0NUUkwsIHJzYy0+ZGVidWdfbW9kZSk7Ci0J CWlmICghdGVzdF9iaXQoUE9XRVJfQ1RSTF9CSVRfMTIsICZwb3dlcl9zdGF0dXMpKSB7Ci0JCQly ZWcgPSBkc3NfcmVnX3IoJnJzYy0+ZHJ2X2lvLAotCQkJCURQVV9SU0NDX1NFUV9QUk9HUkFNX0NP VU5URVIsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JCQlEUFVfRVZUMzJfVkVSQk9TRShjb3VudCwgcmVn LCBwb3dlcl9zdGF0dXMpOwotCQkJcmMgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQkJdXNsZWVwX3Jh bmdlKDEwLCAxMDApOwotCX0KLQotCXJlZyA9IGRzc19yZWdfcigmcnNjLT53cmFwcGVyX2lvLCBE UFVfUlNDQ19TUEFSRV9QV1JfRVZFTlQsCi0JCQkJCQkJcnNjLT5kZWJ1Z19tb2RlKTsKLQlyZWcg Jj0gfkJJVCgxMyk7Ci0JZHNzX3JlZ193KCZyc2MtPndyYXBwZXJfaW8sIERQVV9SU0NDX1NQQVJF X1BXUl9FVkVOVCwKLQkJCQkJCQlyZWcsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JaWYgKHJjKQotCQlw cl9lcnIoInZkZCByZWcgaXMgbm90IGVuYWJsZWQgeWV0XG4iKTsKLQotCXJzY19ldmVudF90cmln Z2VyKHJzYywgRFBVX1JTQ19FVkVOVF9QT1NUX0NPUkVfUkVTVE9SRSk7Ci0KLQlyZXR1cm4gcmM7 Ci19Ci0KLXN0YXRpYyBpbnQgZHB1X3JzY19tb2RlMl9lbnRyeShzdHJ1Y3QgZHB1X3JzY19wcml2 ICpyc2MpCi17Ci0JaW50IHJjOwotCWludCBjb3VudCwgd3JhcHBlcl9zdGF0dXM7Ci0JdW5zaWdu ZWQgbG9uZyByZWc7Ci0KLQlpZiAocnNjLT5wb3dlcl9jb2xsYXBzZV9ibG9jaykKLQkJcmV0dXJu IC1FSU5WQUw7Ci0KLQlyYyA9IHJlZ3VsYXRvcl9zZXRfbW9kZShyc2MtPmZzLCBSRUdVTEFUT1Jf TU9ERV9GQVNUKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJ2ZGQgcmVnIGZhc3QgbW9kZSBzZXQg ZmFpbGVkIHJjOiVkXG4iLCByYyk7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlyc2NfZXZlbnRfdHJp Z2dlcihyc2MsIERQVV9SU0NfRVZFTlRfUFJFX0NPUkVfUEMpOwotCi0JLyogdXBkYXRlIHF0aW1l cnMgdG8gaGlnaCBkdXJpbmcgY2xrICYgdmlkZW8gbW9kZSBzdGF0ZSAqLwotCWlmICgocnNjLT5j dXJyZW50X3N0YXRlID09IERQVV9SU0NfVklEX1NUQVRFKSB8fAotCQkJKHJzYy0+Y3VycmVudF9z dGF0ZSA9PSBEUFVfUlNDX0NMS19TVEFURSkpIHsKLQkJZHNzX3JlZ193KCZyc2MtPndyYXBwZXJf aW8sIERQVV9SU0NDX0YwX1FUTVJfVjFfQ05UUF9DVkFMX0hJLAotCQkJCQkJMHhmZmZmZmZmZiwg cnNjLT5kZWJ1Z19tb2RlKTsKLQkJZHNzX3JlZ193KCZyc2MtPndyYXBwZXJfaW8sIERQVV9SU0ND X0YwX1FUTVJfVjFfQ05UUF9DVkFMX0xPLAotCQkJCQkJMHhmZmZmZmZmZiwgcnNjLT5kZWJ1Z19t b2RlKTsKLQl9Ci0KLQl3cmFwcGVyX3N0YXR1cyA9IGRzc19yZWdfcigmcnNjLT53cmFwcGVyX2lv LCBEUFVfUlNDQ19XUkFQUEVSX0NUUkwsCi0JCQkJcnNjLT5kZWJ1Z19tb2RlKTsKLQl3cmFwcGVy X3N0YXR1cyB8PSBCSVQoMyk7Ci0Jd3JhcHBlcl9zdGF0dXMgfD0gQklUKDApOwotCWRzc19yZWdf dygmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19XUkFQUEVSX0NUUkwsCi0JCQkJCXdyYXBwZXJf c3RhdHVzLCByc2MtPmRlYnVnX21vZGUpOwotCi0JLyoqCi0JICogZm9yY2UgYnVzeSBhbmQgaWRs ZSBkdXJpbmcgY2xrICYgdmlkZW8gbW9kZSBzdGF0ZSBiZWNhdXNlIGl0Ci0JICogaXMgdHJ5aW5n IHRvIGVudHJ5IGluIG1vZGUtMiB3aXRob3V0IHR1cm5pbmcgb24gdGhlIHZ5c25jLgotCSAqLwot CWlmICgocnNjLT5jdXJyZW50X3N0YXRlID09IERQVV9SU0NfVklEX1NUQVRFKSB8fAotCQkJKHJz Yy0+Y3VycmVudF9zdGF0ZSA9PSBEUFVfUlNDX0NMS19TVEFURSkpIHsKLQkJZHNzX3JlZ193KCZy c2MtPndyYXBwZXJfaW8sIERQVV9SU0NDX1dSQVBQRVJfT1ZFUlJJREVfQ1RSTCwKLQkJCQlCSVQo MCkgfCBCSVQoMSksIHJzYy0+ZGVidWdfbW9kZSk7Ci0JCXdtYigpOyAvKiBmb3JjZSBidXN5IGd1 cmFudGVlICovCi0JCWRzc19yZWdfdygmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19XUkFQUEVS X09WRVJSSURFX0NUUkwsCi0JCQkJQklUKDApIHwgQklUKDkpLCByc2MtPmRlYnVnX21vZGUpOwot CX0KLQotCS8qIG1ha2Ugc3VyZSB0aGF0IG1vZGUtMiBpcyB0cmlnZ2VyZWQgYmVmb3JlIHdhaXQq LwotCXdtYigpOwotCi0JcmMgPSAtRUJVU1k7Ci0JLyogdGhpcyB3YWl0IGlzIHJlcXVpcmVkIHRv IHR1cm4gb2ZmIHRoZSByc2NjIGNsb2NrcyAqLwotCWZvciAoY291bnQgPSBNQVhfQ0hFQ0tfTE9P UFM7IGNvdW50ID4gMDsgY291bnQtLSkgewotCQlyZWcgPSBkc3NfcmVnX3IoJnJzYy0+d3JhcHBl cl9pbywKLQkJCQlEUFVfUlNDQ19QV1JfQ1RSTCwgcnNjLT5kZWJ1Z19tb2RlKTsKLQkJaWYgKHRl c3RfYml0KFBPV0VSX0NUUkxfQklUXzEyLCAmcmVnKSkgewotCQkJcmMgPSAwOwotCQkJYnJlYWs7 Ci0JCX0KLQkJdXNsZWVwX3JhbmdlKDEwLCAxMDApOwotCX0KLQotCWlmIChyYykgewotCQlwcl9l cnIoIm1kc3MgZ2RzYyBwb3dlciBkb3duIGZhaWxlZCByYzolZFxuIiwgcmMpOwotCQlEUFVfRVZU MzIocmMsIERQVV9FVlRMT0dfRVJST1IpOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlpZiAoKHJzYy0+ Y3VycmVudF9zdGF0ZSA9PSBEUFVfUlNDX1ZJRF9TVEFURSkgfHwKLQkJCShyc2MtPmN1cnJlbnRf c3RhdGUgPT0gRFBVX1JTQ19DTEtfU1RBVEUpKSB7Ci0JCWRzc19yZWdfdygmcnNjLT53cmFwcGVy X2lvLCBEUFVfUlNDQ19XUkFQUEVSX09WRVJSSURFX0NUUkwsCi0JCQkJCUJJVCgwKSB8IEJJVCg4 KSwgcnNjLT5kZWJ1Z19tb2RlKTsKLQkJd21iKCk7IC8qIGZvcmNlIGJ1c3kgb24gdnN5bmMgKi8K LQl9Ci0KLQlyc2NfZXZlbnRfdHJpZ2dlcihyc2MsIERQVV9SU0NfRVZFTlRfUE9TVF9DT1JFX1BD KTsKLQotCXJldHVybiAwOwotCi1lbmQ6Ci0JZHB1X3JzY19tb2RlMl9leGl0KHJzYywgcnNjLT5j dXJyZW50X3N0YXRlKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBkcHVfcnNjX3N0 YXRlX3VwZGF0ZShzdHJ1Y3QgZHB1X3JzY19wcml2ICpyc2MsCi0JCQkJCQllbnVtIGRwdV9yc2Nf c3RhdGUgc3RhdGUpCi17Ci0JaW50IHJjID0gMDsKLQlpbnQgcmVnOwotCi0JaWYgKHJzYy0+cG93 ZXJfY29sbGFwc2UpIHsKLQkJcmMgPSBkcHVfcnNjX21vZGUyX2V4aXQocnNjLCBzdGF0ZSk7Ci0J CWlmIChyYykKLQkJCXByX2VycigicG93ZXIgY29sbGFwc2U6IG1vZGUyIGV4aXQgZmFpbGVkXG4i KTsKLQkJZWxzZQotCQkJcnNjLT5wb3dlcl9jb2xsYXBzZSA9IGZhbHNlOwotCX0KLQotCXN3aXRj aCAoc3RhdGUpIHsKLQljYXNlIERQVV9SU0NfQ01EX1NUQVRFOgotCQlwcl9kZWJ1ZygiY29tbWFu ZCBtb2RlIGhhbmRsaW5nXG4iKTsKLQotCQlkc3NfcmVnX3coJnJzYy0+d3JhcHBlcl9pbywgRFBV X1JTQ0NfV1JBUFBFUl9DVFJMLAotCQkJCQkJMHgxLCByc2MtPmRlYnVnX21vZGUpOwotCQlkc3Nf cmVnX3coJnJzYy0+ZHJ2X2lvLCBEUFVfUlNDQ19TT0xWRVJfT1ZFUlJJREVfQ1RSTF9EUlYwLAot CQkJCQkJCTB4MCwgcnNjLT5kZWJ1Z19tb2RlKTsKLQkJcmVnID0gZHNzX3JlZ19yKCZyc2MtPndy YXBwZXJfaW8sCi0JCQlEUFVfUlNDQ19XUkFQUEVSX09WRVJSSURFX0NUUkwsIHJzYy0+ZGVidWdf bW9kZSk7Ci0JCXJlZyB8PSAoQklUKDApIHwgQklUKDgpKTsKLQkJcmVnICY9IH4oQklUKDEpIHwg QklUKDIpIHwgQklUKDMpIHwgQklUKDYpIHwgQklUKDcpIHwgQklUKDkpKTsKLQkJZHNzX3JlZ193 KCZyc2MtPndyYXBwZXJfaW8sIERQVV9SU0NDX1dSQVBQRVJfT1ZFUlJJREVfQ1RSTCwKLQkJCQkJ CQlyZWcsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JCS8qIG1ha2Ugc3VyZSB0aGF0IHNvbHZlciBpcyBl bmFibGVkICovCi0JCXdtYigpOwotCi0JCXJzY19ldmVudF90cmlnZ2VyKHJzYywgRFBVX1JTQ19F VkVOVF9TT0xWRVJfRU5BQkxFRCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBEUFVfUlNDX1ZJRF9TVEFU RToKLQkJcHJfZGVidWcoInZpZGVvIG1vZGUgaGFuZGxpbmdcbiIpOwotCi0JCWRzc19yZWdfdygm cnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19XUkFQUEVSX0NUUkwsCi0JCQkJCQkweDEsIHJzYy0+ ZGVidWdfbW9kZSk7Ci0JCXJlZyA9IGRzc19yZWdfcigmcnNjLT53cmFwcGVyX2lvLAotCQkJRFBV X1JTQ0NfV1JBUFBFUl9PVkVSUklERV9DVFJMLCByc2MtPmRlYnVnX21vZGUpOwotCQlyZWcgfD0g QklUKDgpOwotCQlyZWcgJj0gfihCSVQoMSkgfCBCSVQoMCkpOwotCQlkc3NfcmVnX3coJnJzYy0+ d3JhcHBlcl9pbywgRFBVX1JTQ0NfV1JBUFBFUl9PVkVSUklERV9DVFJMLAotCQkJCQkJCXJlZywg cnNjLT5kZWJ1Z19tb2RlKTsKLQkJLyogbWFrZSBzdXJlIHRoYXQgc29sdmVyIG1vZGUgaXMgb3Zl cnJpZGUgKi8KLQkJd21iKCk7Ci0KLQkJcnNjX2V2ZW50X3RyaWdnZXIocnNjLCBEUFVfUlNDX0VW RU5UX1NPTFZFUl9ESVNBQkxFRCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBEUFVfUlNDX0NMS19TVEFU RToKLQkJcHJfZGVidWcoImNsayBzdGF0ZSBoYW5kbGluZ1xuIik7Ci0KLQkJcmVnID0gZHNzX3Jl Z19yKCZyc2MtPndyYXBwZXJfaW8sCi0JCQlEUFVfUlNDQ19XUkFQUEVSX09WRVJSSURFX0NUUkws IHJzYy0+ZGVidWdfbW9kZSk7Ci0JCXJlZyAmPSB+KEJJVCg4KSB8IEJJVCgwKSk7Ci0JCWRzc19y ZWdfdygmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19XUkFQUEVSX09WRVJSSURFX0NUUkwsCi0J CQkJCQkJcmVnLCByc2MtPmRlYnVnX21vZGUpOwotCQkvKiBtYWtlIHN1cmUgdGhhdCBzb2x2ZXIg bW9kZSBpcyBkaXNhYmxlZCAqLwotCQl3bWIoKTsKLQkJYnJlYWs7Ci0KLQljYXNlIERQVV9SU0Nf SURMRV9TVEFURToKLQkJcmMgPSBkcHVfcnNjX21vZGUyX2VudHJ5KHJzYyk7Ci0JCWlmIChyYykK LQkJCXByX2VycigicG93ZXIgY29sbGFwc2UgLSBtb2RlIDIgZW50cnkgZmFpbGVkXG4iKTsKLQkJ ZWxzZQotCQkJcnNjLT5wb3dlcl9jb2xsYXBzZSA9IHRydWU7Ci0JCWJyZWFrOwotCi0JZGVmYXVs dDoKLQkJcHJfZXJyKCJzdGF0ZTolZCBoYW5kbGluZyBpcyBub3Qgc3VwcG9ydGVkXG4iLCBzdGF0 ZSk7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotaW50IHJzY19od19pbml0KHN0 cnVjdCBkcHVfcnNjX3ByaXYgKnJzYykKLXsKLQlpbnQgcmMgPSAwOwotCi0JcmMgPSByc2NfaHdf cXRpbWVyX2luaXQocnNjKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJyc2MgaHcgcXRpbWVyIGlu aXQgZmFpbGVkXG4iKTsKLQkJZ290byBlbmQ7Ci0JfQotCi0JcmMgPSByc2NfaHdfd3JhcHBlcl9p bml0KHJzYyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigicnNjIGh3IHdyYXBwZXIgaW5pdCBmYWls ZWRcbiIpOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlyYyA9IHJzY19od19zZXFfbWVtb3J5X2luaXQo cnNjKTsKLQlpZiAocmMpIHsKLQkJcHJfZXJyKCJyc2Mgc2VxdWVuY2VyIG1lbW9yeSBpbml0IGZh aWxlZFxuIik7Ci0JCWdvdG8gZW5kOwotCX0KLQotCXJjID0gcnNjX2h3X3NvbHZlcl9pbml0KHJz Yyk7Ci0JaWYgKHJjKSB7Ci0JCXByX2VycigicnNjIHNvbHZlciBpbml0IGZhaWxlZFxuIik7Ci0J CWdvdG8gZW5kOwotCX0KLQotCXJjID0gcnNjX2h3X3BkY19pbml0KHJzYyk7Ci0JaWYgKHJjKSB7 Ci0JCXByX2VycigicnNjIGh3IHBkYyBpbml0IGZhaWxlZFxuIik7Ci0JCWdvdG8gZW5kOwotCX0K LQotCS8qIG1ha2Ugc3VyZSB0aGF0IGh3IGlzIGluaXRpYWxpemVkICovCi0Jd21iKCk7Ci0KLQlw cl9pbmZvKCJkcHUgcnNjIGluaXQgc3VjY2Vzc2Z1bGx5IGRvbmVcbiIpOwotZW5kOgotCXJldHVy biByYzsKLX0KLQotaW50IHJzY19od19tb2RlX2N0cmwoc3RydWN0IGRwdV9yc2NfcHJpdiAqcnNj LCBlbnVtIHJzY19tb2RlX3JlcSByZXF1ZXN0LAotCQljaGFyICpidWZmZXIsIGludCBidWZmZXJf c2l6ZSwgdTMyIG1vZGUpCi17Ci0JdTMyIGJsZW4gPSAwOwotCXUzMiBzbG90X3RpbWU7Ci0KLQlz d2l0Y2ggKHJlcXVlc3QpIHsKLQljYXNlIE1PREVfUkVBRDoKLQkJaWYgKCFidWZmZXIgfHwgIWJ1 ZmZlcl9zaXplKQotCQkJcmV0dXJuIGJsZW47Ci0KLQkJYmxlbiA9IHNucHJpbnRmKGJ1ZmZlciwg YnVmZmVyX3NpemUgLSBibGVuLAotCQkJIm1vZGVfc3RhdHVzOjB4JXhcbiIsCi0JCQlkc3NfcmVn X3IoJnJzYy0+ZHJ2X2lvLCBEUFVfUlNDQ19TT0xWRVJfU1RBVFVTMl9EUlYwLAotCQkJcnNjLT5k ZWJ1Z19tb2RlKSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBNT0RFX1VQREFURToKLQkJc2xvdF90aW1l ID0gbW9kZSAmIEJJVCgwKSA/IDB4MCA6Ci0JCQkJCXJzYy0+dGltZXJfY29uZmlnLnJzY190aW1l X3Nsb3RfMl9uczsKLQkJZHNzX3JlZ193KCZyc2MtPmRydl9pbywgRFBVX1JTQ19TT0xWRVJfVElN RV9TTE9UX1RBQkxFXzBfRFJWMCwKLQkJCQkJCXNsb3RfdGltZSwgcnNjLT5kZWJ1Z19tb2RlKTsK LQotCQlzbG90X3RpbWUgPSBtb2RlICYgQklUKDEpID8KLQkJCXJzYy0+dGltZXJfY29uZmlnLnJz Y190aW1lX3Nsb3RfMF9ucyA6Ci0JCQkJcnNjLT50aW1lcl9jb25maWcucnNjX3RpbWVfc2xvdF8y X25zOwotCQlkc3NfcmVnX3coJnJzYy0+ZHJ2X2lvLCBEUFVfUlNDX1NPTFZFUl9USU1FX1NMT1Rf VEFCTEVfMV9EUlYwLAotCQkJCQkJc2xvdF90aW1lLCByc2MtPmRlYnVnX21vZGUpOwotCi0JCXJz Yy0+cG93ZXJfY29sbGFwc2VfYmxvY2sgPSAhKG1vZGUgJiBCSVQoMikpOwotCQlicmVhazsKLQot CWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiBibGVuOwotfQotCi1pbnQgZHB1X3Jz Y19kZWJ1Z19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IGRwdV9yc2NfcHJpdiAqcnNj KQotewotCXNlcV9wcmludGYocywgIm92ZXJyaWRlIGN0cmw6MHgleFxuIiwKLQkJIGRzc19yZWdf cigmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19XUkFQUEVSX09WRVJSSURFX0NUUkwsCi0JCQkJ cnNjLT5kZWJ1Z19tb2RlKSk7Ci0Jc2VxX3ByaW50ZihzLCAicG93ZXIgY3RybDoweCV4XG4iLAot CQkgZHNzX3JlZ19yKCZyc2MtPndyYXBwZXJfaW8sIERQVV9SU0NDX1BXUl9DVFJMLAotCQkJCXJz Yy0+ZGVidWdfbW9kZSkpOwotCXNlcV9wcmludGYocywgInZzeWNuIHRpbWVzdGFtcDA6MHgleFxu IiwKLQkJIGRzc19yZWdfcigmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19XUkFQUEVSX1ZTWU5D X1RJTUVTVEFNUDAsCi0JCQkJcnNjLT5kZWJ1Z19tb2RlKSk7Ci0Jc2VxX3ByaW50ZihzLCAidnN5 Y24gdGltZXN0YW1wMToweCV4XG4iLAotCQkgZHNzX3JlZ19yKCZyc2MtPndyYXBwZXJfaW8sIERQ VV9SU0NDX1dSQVBQRVJfVlNZTkNfVElNRVNUQU1QMSwKLQkJCQlyc2MtPmRlYnVnX21vZGUpKTsK LQotCXNlcV9wcmludGYocywgImVycm9yIGlycSBzdGF0dXM6MHgleFxuIiwKLQkJIGRzc19yZWdf cigmcnNjLT5kcnZfaW8sIERQVV9SU0NDX0VSUk9SX0lSUV9TVEFUVVNfRFJWMCwKLQkJCQlyc2Mt PmRlYnVnX21vZGUpKTsKLQotCXNlcV9wcmludGYocywgInNlcSBidXN5IHN0YXR1czoweCV4XG4i LAotCQkgZHNzX3JlZ19yKCZyc2MtPmRydl9pbywgRFBVX1JTQ0NfU0VRX0JVU1lfRFJWMCwKLQkJ CQlyc2MtPmRlYnVnX21vZGUpKTsKLQotCXNlcV9wcmludGYocywgInNvbHZlciBvdmVycmlkZSBj dHJsIHN0YXR1czoweCV4XG4iLAotCQkgZHNzX3JlZ19yKCZyc2MtPmRydl9pbywgRFBVX1JTQ0Nf U09MVkVSX09WRVJSSURFX0NUUkxfRFJWMCwKLQkJCQlyc2MtPmRlYnVnX21vZGUpKTsKLQlzZXFf cHJpbnRmKHMsICJzb2x2ZXIgb3ZlcnJpZGUgc3RhdHVzOjB4JXhcbiIsCi0JCSBkc3NfcmVnX3Io JnJzYy0+ZHJ2X2lvLCBEUFVfUlNDQ19TT0xWRVJfU1RBVFVTMF9EUlYwLAotCQkJCXJzYy0+ZGVi dWdfbW9kZSkpOwotCXNlcV9wcmludGYocywgInNvbHZlciB0aW1lc2xvdCBzdGF0dXM6MHgleFxu IiwKLQkJIGRzc19yZWdfcigmcnNjLT5kcnZfaW8sIERQVV9SU0NDX1NPTFZFUl9TVEFUVVMxX0RS VjAsCi0JCQkJcnNjLT5kZWJ1Z19tb2RlKSk7Ci0Jc2VxX3ByaW50ZihzLCAic29sdmVyIG1vZGUg c3RhdHVzOjB4JXhcbiIsCi0JCSBkc3NfcmVnX3IoJnJzYy0+ZHJ2X2lvLCBEUFVfUlNDQ19TT0xW RVJfU1RBVFVTMl9EUlYwLAotCQkJCXJzYy0+ZGVidWdfbW9kZSkpOwotCi0Jc2VxX3ByaW50Zihz LCAiYW1jIHN0YXR1czoweCV4XG4iLAotCQkgZHNzX3JlZ19yKCZyc2MtPmRydl9pbywgRFBVX1JT Q0NfQU1DX1RDU19NT0RFX0lSUV9TVEFUVVNfRFJWMCwKLQkJCQlyc2MtPmRlYnVnX21vZGUpKTsK LQotCXJldHVybiAwOwotfQotCi1pbnQgcnNjX2h3X3ZzeW5jKHN0cnVjdCBkcHVfcnNjX3ByaXYg KnJzYywgZW51bSByc2NfdnN5bmNfcmVxIHJlcXVlc3QsCi0JCWNoYXIgKmJ1ZmZlciwgaW50IGJ1 ZmZlcl9zaXplLCB1MzIgbW9kZSkKLXsKLQl1MzIgYmxlbiA9IDAsIHJlZzsKLQotCXN3aXRjaCAo cmVxdWVzdCkgewotCWNhc2UgVlNZTkNfUkVBRDoKLQkJaWYgKCFidWZmZXIgfHwgIWJ1ZmZlcl9z aXplKQotCQkJcmV0dXJuIGJsZW47Ci0KLQkJYmxlbiA9IHNucHJpbnRmKGJ1ZmZlciwgYnVmZmVy X3NpemUgLSBibGVuLCAidnN5bmMwOjB4JXhcbiIsCi0JCQkgZHNzX3JlZ19yKCZyc2MtPndyYXBw ZXJfaW8sCi0JCQkJRFBVX1JTQ0NfV1JBUFBFUl9WU1lOQ19USU1FU1RBTVAwLAotCQkJCXJzYy0+ ZGVidWdfbW9kZSkpOwotCQlpZiAoYmxlbiA+PSBidWZmZXJfc2l6ZSkKLQkJCXJldHVybiBibGVu OwotCi0JCWJsZW4gKz0gc25wcmludGYoYnVmZmVyICsgYmxlbiwgYnVmZmVyX3NpemUgLSBibGVu LAotCQkJInZzeW5jMToweCV4XG4iLAotCQkJIGRzc19yZWdfcigmcnNjLT53cmFwcGVyX2lvLAot CQkJCURQVV9SU0NDX1dSQVBQRVJfVlNZTkNfVElNRVNUQU1QMSwKLQkJCQlyc2MtPmRlYnVnX21v ZGUpKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFZTWU5DX1JFQURfVlNZTkMwOgotCQlyZXR1cm4gZHNz X3JlZ19yKCZyc2MtPndyYXBwZXJfaW8sCi0JCQkJRFBVX1JTQ0NfV1JBUFBFUl9WU1lOQ19USU1F U1RBTVAwLAotCQkJCXJzYy0+ZGVidWdfbW9kZSk7Ci0KLQljYXNlIFZTWU5DX0VOQUJMRToKLQkJ LyogY2xlYXIgdGhlIGN1cnJlbnQgVlNZTkMgdmFsdWUgKi8KLQkJcmVnID0gQklUKDkpIHwgKCht b2RlICYgMHg3KSA8PCAxMCk7Ci0JCWRzc19yZWdfdygmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlND Q19XUkFQUEVSX0RFQlVHX0JVUywKLQkJCQkJcmVnLCByc2MtPmRlYnVnX21vZGUpOwotCi0JCS8q IGVuYWJsZSB0aGUgVlNZTkMgbG9nZ2luZyAqLwotCQlyZWcgPSBCSVQoOCkgfCAoKG1vZGUgJiAw eDcpIDw8IDEwKTsKLQkJZHNzX3JlZ193KCZyc2MtPndyYXBwZXJfaW8sIERQVV9SU0NDX1dSQVBQ RVJfREVCVUdfQlVTLAotCQkJCXJlZywgcnNjLT5kZWJ1Z19tb2RlKTsKLQotCQkvKiBlbnN1cmUg dnN5bmMgY29uZmlnIGhhcyBiZWVuIHdyaXR0ZW4gYmVmb3JlIHdhaXRpbmcgb24gaXQgKi8KLQkJ d21iKCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBWU1lOQ19ESVNBQkxFOgotCQlkc3NfcmVnX3coJnJz Yy0+d3JhcHBlcl9pbywgRFBVX1JTQ0NfV1JBUFBFUl9ERUJVR19CVVMsCi0JCQkJCQkweDAsIHJz Yy0+ZGVidWdfbW9kZSk7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiBibGVuOwotfQotCi1zdGF0 aWMgdm9pZCByc2NfaHdfZGVidWdfZHVtcChzdHJ1Y3QgZHB1X3JzY19wcml2ICpyc2MsIHUzMiBt dXhfc2VsKQotewotCWRzc19yZWdfdygmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19XUkFQUEVS X0RFQlVHX0JVUywKLQkJKChtdXhfc2VsICYgMHhmKSA8PCAxKSB8IEJJVCgwKSwgcnNjLT5kZWJ1 Z19tb2RlKTsKLX0KLQotYm9vbCByc2NfaHdfaXNfYW1jX21vZGUoc3RydWN0IGRwdV9yc2NfcHJp diAqcnNjKQotewotCXJldHVybiBkc3NfcmVnX3IoJnJzYy0+ZHJ2X2lvLCBEUFVfUlNDQ19UQ1Nf RFJWMF9DT05UUk9MLAotCQkJcnNjLT5kZWJ1Z19tb2RlKSAmIEJJVCgxNik7Ci19Ci0KLWludCBy c2NfaHdfdGNzX3dhaXQoc3RydWN0IGRwdV9yc2NfcHJpdiAqcnNjKQotewotCWludCByYyA9IC1F QlVTWTsKLQlpbnQgY291bnQsIHNlcV9zdGF0dXM7Ci0KLQlkc3NfcmVnX3coJnJzYy0+d3JhcHBl cl9pbywgRFBVX1JTQ0NfV1JBUFBFUl9DVFJMLAotCQkJCQkJMHgwLCByc2MtPmRlYnVnX21vZGUp OwotCXNlcV9zdGF0dXMgPSBkc3NfcmVnX3IoJnJzYy0+d3JhcHBlcl9pbywgRFBVX1JTQ0NfV1JB UFBFUl9DVFJMLAotCQkJcnNjLT5kZWJ1Z19tb2RlKSAmIEJJVCgxKTsKLQkvKiBpZiBzZXEgYnVz eSAtIHNldCBUQ1MgdXNlIE9LIHRvIGhpZ2ggYW5kIHdhaXQgZm9yIDIwMHVzICovCi0JaWYgKHNl cV9zdGF0dXMpIHsKLQkJZHNzX3JlZ193KCZyc2MtPndyYXBwZXJfaW8sIERQVV9SU0NDX1dSQVBQ RVJfQ1RSTCwKLQkJCQkJCTB4MSwgcnNjLT5kZWJ1Z19tb2RlKTsKLQkJdXNsZWVwX3JhbmdlKDEw MCwgMjAwKTsKLQkJZHNzX3JlZ193KCZyc2MtPndyYXBwZXJfaW8sIERQVV9SU0NDX1dSQVBQRVJf Q1RSTCwKLQkJCQkJCTB4MCwgcnNjLT5kZWJ1Z19tb2RlKTsKLQl9Ci0KLQkvKiBjaGVjayBmb3Ig c2VxdWVuY2UgcnVubmluZyBzdGF0dXMgYmVmb3JlIGV4aXRpbmcgKi8KLQlmb3IgKGNvdW50ID0g TUFYX0NIRUNLX0xPT1BTOyBjb3VudCA+IDA7IGNvdW50LS0pIHsKLQkJc2VxX3N0YXR1cyA9IGRz c19yZWdfcigmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19XUkFQUEVSX0NUUkwsCi0JCQkJcnNj LT5kZWJ1Z19tb2RlKSAmIEJJVCgxKTsKLQkJaWYgKCFzZXFfc3RhdHVzKSB7Ci0JCQlyYyA9IDA7 Ci0JCQlicmVhazsKLQkJfQotCQl1c2xlZXBfcmFuZ2UoMSwgMik7Ci0JfQotCi0JcmV0dXJuIHJj OwotfQotCi1pbnQgcnNjX2h3X3Rjc191c2Vfb2soc3RydWN0IGRwdV9yc2NfcHJpdiAqcnNjKQot ewotCWRzc19yZWdfdygmcnNjLT53cmFwcGVyX2lvLCBEUFVfUlNDQ19XUkFQUEVSX0NUUkwsCi0J CQkJCQkweDEsIHJzYy0+ZGVidWdfbW9kZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBkcHVfcnNj X2h3X3JlZ2lzdGVyKHN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYykKLXsKLQlwcl9kZWJ1ZygicnNj IGhhcmR3YXJlIHJlZ2lzdGVyXG4iKTsKLQotCXJzYy0+aHdfb3BzLmluaXQgPSByc2NfaHdfaW5p dDsKLQlyc2MtPmh3X29wcy50aW1lcl91cGRhdGUgPSByc2NfaHdfdGltZXJfdXBkYXRlOwotCi0J cnNjLT5od19vcHMudGNzX3dhaXQgPSByc2NfaHdfdGNzX3dhaXQ7Ci0JcnNjLT5od19vcHMudGNz X3VzZV9vayA9IHJzY19od190Y3NfdXNlX29rOwotCXJzYy0+aHdfb3BzLmlzX2FtY19tb2RlID0g cnNjX2h3X2lzX2FtY19tb2RlOwotCi0JcnNjLT5od19vcHMuaHdfdnN5bmMgPSByc2NfaHdfdnN5 bmM7Ci0JcnNjLT5od19vcHMuc3RhdGVfdXBkYXRlID0gZHB1X3JzY19zdGF0ZV91cGRhdGU7Ci0J cnNjLT5od19vcHMuZGVidWdfc2hvdyA9IGRwdV9yc2NfZGVidWdfc2hvdzsKLQlyc2MtPmh3X29w cy5tb2RlX2N0cmwgPSByc2NfaHdfbW9kZV9jdHJsOwotCXJzYy0+aHdfb3BzLmRlYnVnX2R1bXAg PSByc2NfaHdfZGVidWdfZHVtcDsKLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL21zbS9kcHVfcnNjX3ByaXYuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHB1X3Jz Y19wcml2LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyOGEzMzkuLjAwMDAwMDAK LS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcHVfcnNjX3ByaXYuaAorKysgL2Rldi9udWxsCkBA IC0xLDE5MSArMCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwgVGhlIExpbnV4IEZv dW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lv biAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQotI2lm bmRlZiBfRFBVX1JTQ19QUklWX0hfCi0jZGVmaW5lIF9EUFVfUlNDX1BSSVZfSF8KLQotI2luY2x1 ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2RwdV9pb191dGlsLmg+Ci0jaW5j bHVkZSA8bGludXgvZHB1X3JzYy5oPgotCi0jaW5jbHVkZSA8c29jL3Fjb20vdGNzLmg+Ci0jaW5j bHVkZSAiZHB1X3Bvd2VyX2hhbmRsZS5oIgotCi0jZGVmaW5lIERQVV9SU0NfQ09NUEFUSUJMRSAi ZGlzcF9yc2NjIgotCi0jZGVmaW5lIE1BWF9SU0NfQ09VTlQJCTUKLQotI2RlZmluZSBBTExfTU9E RVNfRElTQUJMRUQJMHgwCi0jZGVmaW5lIE9OTFlfTU9ERV8wX0VOQUJMRUQJMHgxCi0jZGVmaW5l IE9OTFlfTU9ERV8wXzFfRU5BQkxFRAkweDMKLSNkZWZpbmUgQUxMX01PREVTX0VOQUJMRUQJMHg3 Ci0KLSNkZWZpbmUgTUFYX0NPVU5UX1NJWkVfU1VQUE9SVEVECTEyOAotCi1zdHJ1Y3QgZHB1X3Jz Y19wcml2OwotCi0vKioKLSAqIHJzY19tb2RlX3JlcTogZHB1IHJzYyBtb2RlIHJlcXVlc3QgaW5m b3JtYXRpb24KLSAqIE1PREVfUkVBRDogcmVhZCB2c3luYyBzdGF0dXMKLSAqIE1PREVfVVBEQVRF OiBtb2RlIHRpbWVzbG90IHVwZGF0ZQotICogICAgICAgICAgICAweDA6IGFsbCBtb2RlcyBhcmUg ZGlzYWJsZWQuCi0gKiAgICAgICAgICAgIDB4MTogTW9kZS0wIGlzIGVuYWJsZWQgYW5kIG90aGVy IHR3byBtb2RlcyBhcmUgZGlzYWJsZWQuCi0gKiAgICAgICAgICAgIDB4MzogTW9kZS0wICYgTW9k ZS0xIGFyZSBlbmFibGVkIGFuZCBtb2RlLTIgaXMgZGlzYWJsZWQuCi0gKiAgICAgICAgICAgIDB4 NzogYWxsIG1vZGVzIGFyZSBlbmFibGVkLgotICovCi1lbnVtIHJzY19tb2RlX3JlcSB7Ci0JTU9E RV9SRUFELAotCU1PREVfVVBEQVRFID0gMHgxLAotfTsKLQotLyoqCi0gKiByc2NfdnN5bmNfcmVx OiBkcHUgcnNjIHZzeW5jIHJlcXVlc3QgaW5mb3JtYXRpb24KLSAqIFZTWU5DX1JFQUQ6IHJlYWQg dnN5bmMgc3RhdHVzCi0gKiBWU1lOQ19SRUFEX1ZTWU5DMDogcmVhZCB2YWx1ZSB2c3luYzAgdGlt ZXN0YW1wIChjYXN0IHRvIGludCBmcm9tIHUzMikKLSAqIFZTWU5DX0VOQUJMRTogZW5hYmxlIHJz YyB3cmFwcGVyIHZzeW5jIHN0YXR1cwotICogVlNZTkNfRElTQUJMRTogZGlzYWJsZSByc2Mgd3Jh cHBlciB2c3luYyBzdGF0dXMKLSAqLwotZW51bSByc2NfdnN5bmNfcmVxIHsKLQlWU1lOQ19SRUFE LAotCVZTWU5DX1JFQURfVlNZTkMwLAotCVZTWU5DX0VOQUJMRSwKLQlWU1lOQ19ESVNBQkxFLAot fTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHB1X3JzY19od19vcHMgLSBkcHUgcmVzb3VyY2Ugc3RhdGUg Y29vcmRpbmF0b3IgaGFyZHdhcmUgb3BzCi0gKiBAaW5pdDoJCQlJbml0aWFsaXplIHRoZSBzZXF1 ZW5jZXIsIHNvbHZlciwgcXRpbWVyLAotCQkJCWV0Yy4gaGFyZHdhcmUgYmxvY2tzIG9uIFJTQy4K LSAqIEB0aW1lcl91cGRhdGU6CQl1cGRhdGUgdGhlIHN0YXRpYyB3cmFwcGVyIHRpbWUgYW5kIHBk Yy9yc2MKLQkJCQliYWNrb2ZmIHRpbWUuCi0gKiBAdGNzX3dhaXQ6CQkJV2FpdHMgZm9yIFRDUyBi bG9jayBPSyB0byBhbGxvdyBzZW5kaW5nIGEKLSAqCQkJCVRDUyBjb21tYW5kLgotICogQGh3X3Zz eW5jOgkJCUVuYWJsZXMgdGhlIHZzeW5jIG9uIFJTQyBibG9jay4KLSAqIEB0Y3NfdXNlX29rOgkJ CXNldCBUQ1Mgc2V0IHRvIGhpZ2ggdG8gYWxsb3cgUlNDIHRvIHVzZSBpdC4KLSAqIEBpc19hbWNf bW9kZToJCUNoZWNrIGN1cnJlbnQgYW1jIG1vZGUgc3RhdHVzCi0gKiBAZGVidWdfZHVtcDoJCQlk dW1wIGRlYnVnIGJ1cyByZWdpc3RlcnMgb3IgZW5hYmxlIGRlYnVnIGJ1cwotICogQHN0YXRlX3Vw ZGF0ZToJCUVuYWJsZS9vdmVycmlkZSB0aGUgc29sdmVyIGJhc2VkIG9uIHJzYyBzdGF0ZQotICog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgKGNvbW1hbmQvdmlkZW8pCi0gKiBA bW9kZV9zaG93OgkJCXNob3dzIGN1cnJlbnQgbW9kZSBzdGF0dXMsIG1vZGUwLzEvMgotICogQGRl YnVnX3Nob3c6CQkJU2hvdyBjdXJyZW50IGRlYnVnIHN0YXR1cy4KLSAqLwotCi1zdHJ1Y3QgZHB1 X3JzY19od19vcHMgewotCWludCAoKmluaXQpKHN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYyk7Ci0J aW50ICgqdGltZXJfdXBkYXRlKShzdHJ1Y3QgZHB1X3JzY19wcml2ICpyc2MpOwotCWludCAoKnRj c193YWl0KShzdHJ1Y3QgZHB1X3JzY19wcml2ICpyc2MpOwotCWludCAoKmh3X3ZzeW5jKShzdHJ1 Y3QgZHB1X3JzY19wcml2ICpyc2MsIGVudW0gcnNjX3ZzeW5jX3JlcSByZXF1ZXN0LAotCQljaGFy ICpidWZmZXIsIGludCBidWZmZXJfc2l6ZSwgdTMyIG1vZGUpOwotCWludCAoKnRjc191c2Vfb2sp KHN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYyk7Ci0JYm9vbCAoKmlzX2FtY19tb2RlKShzdHJ1Y3Qg ZHB1X3JzY19wcml2ICpyc2MpOwotCXZvaWQgKCpkZWJ1Z19kdW1wKShzdHJ1Y3QgZHB1X3JzY19w cml2ICpyc2MsIHUzMiBtdXhfc2VsKTsKLQlpbnQgKCpzdGF0ZV91cGRhdGUpKHN0cnVjdCBkcHVf cnNjX3ByaXYgKnJzYywgZW51bSBkcHVfcnNjX3N0YXRlIHN0YXRlKTsKLQlpbnQgKCpkZWJ1Z19z aG93KShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYyk7Ci0JaW50 ICgqbW9kZV9jdHJsKShzdHJ1Y3QgZHB1X3JzY19wcml2ICpyc2MsIGVudW0gcnNjX21vZGVfcmVx IHJlcXVlc3QsCi0JCWNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmZlcl9zaXplLCB1MzIgbW9kZSk7Ci19 OwotCi0vKioKLSAqIHN0cnVjdCBkcHVfcnNjX3RpbWVyX2NvbmZpZzogdGhpcyBpcyBpbnRlcm5h bCBjb25maWd1cmF0aW9uIGJldHdlZW4KLSAqIHJzYyBhbmQgcnNjX2h3IEFQSS4KLSAqCi0gKiBA c3RhdGljX3dha2V1cF90aW1lX25zOgl3cmFwcGVyIGJhY2tvZmYgdGltZSBpbiBuYW5vIHNlY29u ZHMKLSAqIEByc2NfYmFja29mZl90aW1lX25zOglyc2MgYmFja29mZiB0aW1lIGluIG5hbm8gc2Vj b25kcwotICogQHBkY19iYWNrb2ZmX3RpbWVfbnM6CXBkYyBiYWNrb2ZmIHRpbWUgaW4gbmFubyBz ZWNvbmRzCi0gKiBAcnNjX21vZGVfdGhyZXNob2xkX3RpbWVfbnM6CXJzYyBtb2RlIHRocmVzaG9s ZCB0aW1lIGluIG5hbm8gc2Vjb25kcwotICogQHJzY190aW1lX3Nsb3RfMF9uczoJCW1vZGUtMCB0 aW1lIHNsb3QgdGhyZXNob2xkIGluIG5hbm8gc2Vjb25kcwotICogQHJzY190aW1lX3Nsb3RfMV9u czoJCW1vZGUtMSB0aW1lIHNsb3QgdGhyZXNob2xkIGluIG5hbm8gc2Vjb25kcwotICogQHJzY190 aW1lX3Nsb3RfMl9uczoJCW1vZGUtMiB0aW1lIHNsb3QgdGhyZXNob2xkIGluIG5hbm8gc2Vjb25k cwotICovCi1zdHJ1Y3QgZHB1X3JzY190aW1lcl9jb25maWcgewotCXUzMiBzdGF0aWNfd2FrZXVw X3RpbWVfbnM7Ci0KLQl1MzIgcnNjX2JhY2tvZmZfdGltZV9uczsKLQl1MzIgcGRjX2JhY2tvZmZf dGltZV9uczsKLQl1MzIgcnNjX21vZGVfdGhyZXNob2xkX3RpbWVfbnM7Ci0JdTMyIHJzY190aW1l X3Nsb3RfMF9uczsKLQl1MzIgcnNjX3RpbWVfc2xvdF8xX25zOwotCXUzMiByc2NfdGltZV9zbG90 XzJfbnM7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBkcHVfcnNjX3ByaXY6IGRwdSByZXNvdXJjZSBz dGF0ZSBjb29yZGluYXRvcihyc2MpIHByaXZhdGUgaGFuZGxlCi0gKiBAdmVyc2lvbjoJCXJzYyBz ZXF1ZW5jZSB2ZXJzaW9uCi0gKiBAcGhhbmRsZToJCW1vZHVsZSBwb3dlciBoYW5kbGUgZm9yIGNs b2NrcwotICogQHBjbGllbnQ6CQltb2R1bGUgcG93ZXIgY2xpZW50IG9mIHBoYW5kbGUKLSAqIEBm czoJCQkiTURTUyBHRFNDIiBoYW5kbGUKLSAqCi0gKiBAZGlzcF9yc2M6CQlkaXNwbGF5IHJzYyBo YW5kbGUKLSAqIEBkcnZfaW86CQlkcHUgZHJ2IGlvIGRhdGEgbWFwcGluZwotICogQHdyYXBwZXJf aW86CQl3cmFwcGVyIGlvIGRhdGEgbWFwcGluZwotICoKLSAqIEBjbGllbnRfbGlzdDoJY3VycmVu dCByc2MgY2xpZW50IGxpc3QgaGFuZGxlCi0gKiBAZXZlbnRfbGlzdDoJCWN1cnJlbnQgcnNjIGV2 ZW50IGxpc3QgaGFuZGxlCi0gKiBAY2xpZW50X2xvY2s6CWN1cnJlbnQgcnNjIGNsaWVudCBzeW5j aHJvbml6YXRpb24gbG9jawotICoKLSAqIHRpbWVyX2NvbmZpZzoJY3VycmVudCByc2MgdGltZXIg Y29uZmlndXJhdGlvbgotICogY21kX2NvbmZpZzoJCWN1cnJlbnQgcGFuZWwgY29uZmlnCi0gKiBj dXJyZW50X3N0YXRlOgljdXJyZW50IHJzYyBzdGF0ZSAodmlkZW8vY29tbWFuZCksIHNvbHZlcgot ICogICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGUvZW5hYmxlZC4KLSAqIGRlYnVnX21vZGU6 CQllbmFibGVzIHRoZSBsb2dnaW5nIGZvciBlYWNoIHJlZ2lzdGVyIHJlYWQvd3JpdGUKLSAqIGRl YnVnZnNfcm9vdDoJZGVidWdmcyBmaWxlIHN5c3RlbSByb290IG5vZGUKLSAqCi0gKiBod19vcHM6 CQlkcHUgcnNjIGhhcmR3YXJlIG9wZXJhdGlvbnMKLSAqIHBvd2VyX2NvbGxhcHNlOglpZiBhbGwg Y2xpZW50cyBhcmUgaW4gSURMRSBzdGF0ZSB0aGVuIGl0IGVudGVycyBpbgotICoJCQltb2RlMiBz dGF0ZSBhbmQgZW5hYmxlIHRoZSBwb3dlciBjb2xsYXBzZSBzdGF0ZQotICogcG93ZXJfY29sbGFw c2VfYmxvY2s6QnkgZGVmYXVsdCwgcnNjIG1vdmUgdG8gbW9kZS0yIGlmIGFsbCBjbGllbnRzIGFy ZSBpbgotICoJCQlpbnZhbGlkIHN0YXRlLiBJdCBjYW4gYmUgYmxvY2tlZCBieSB0aGlzIGJvb2xl YW4gZW50cnkuCi0gKiBwcmltYXJ5X2NsaWVudDoJQSBjbGllbnQgd2hpY2ggaXMgYWxsb3dlZCB0 byBtYWtlIGNvbW1hbmQgc3RhdGUgcmVxdWVzdAotICoJCQlhbmQgYWIvaWIgdm90ZSBvbiBkaXNw bGF5IHJzYwotICogbWFzdGVyX2RybToJCVByaW1hcnkgY2xpZW50IHdhaXRzIGZvciB2c3luYyBv biB0aGlzIGRybSBvYmplY3QgYmFzZWQKLSAqCQkJb24gY3J0YyBpZAotICovCi1zdHJ1Y3QgZHB1 X3JzY19wcml2IHsKLQl1MzIgdmVyc2lvbjsKLQlzdHJ1Y3QgZHB1X3Bvd2VyX2hhbmRsZSBwaGFu ZGxlOwotCXN0cnVjdCBkcHVfcG93ZXJfY2xpZW50ICpwY2xpZW50OwotCXN0cnVjdCByZWd1bGF0 b3IgKmZzOwotCi0Jc3RydWN0IHJwbWhfY2xpZW50ICpkaXNwX3JzYzsKLQlzdHJ1Y3QgZHNzX2lv X2RhdGEgZHJ2X2lvOwotCXN0cnVjdCBkc3NfaW9fZGF0YSB3cmFwcGVyX2lvOwotCi0Jc3RydWN0 IGxpc3RfaGVhZCBjbGllbnRfbGlzdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGV2ZW50X2xpc3Q7Ci0J c3RydWN0IG11dGV4IGNsaWVudF9sb2NrOwotCi0Jc3RydWN0IGRwdV9yc2NfdGltZXJfY29uZmln IHRpbWVyX2NvbmZpZzsKLQlzdHJ1Y3QgZHB1X3JzY19jbWRfY29uZmlnIGNtZF9jb25maWc7Ci0J dTMyCWN1cnJlbnRfc3RhdGU7Ci0KLQl1MzIgZGVidWdfbW9kZTsKLQlzdHJ1Y3QgZGVudHJ5ICpk ZWJ1Z2ZzX3Jvb3Q7Ci0KLQlzdHJ1Y3QgZHB1X3JzY19od19vcHMgaHdfb3BzOwotCWJvb2wgcG93 ZXJfY29sbGFwc2U7Ci0JYm9vbCBwb3dlcl9jb2xsYXBzZV9ibG9jazsKLQlzdHJ1Y3QgZHB1X3Jz Y19jbGllbnQgKnByaW1hcnlfY2xpZW50OwotCi0Jc3RydWN0IGRybV9kZXZpY2UgKm1hc3Rlcl9k cm07Ci19OwotCi0vKioKLSAqIGRwdV9yc2NfaHdfcmVnaXN0ZXIoKSAtIHJlZ2lzdGVyIGhhcmR3 YXJlIEFQSQotICoKLSAqIEBjbGllbnQ6CSBDbGllbnQgcG9pbnRlciBwcm92aWRlZCBieSBkcHVf cnNjX2NsaWVudF9jcmVhdGUoKS4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWlu dCBkcHVfcnNjX2h3X3JlZ2lzdGVyKHN0cnVjdCBkcHVfcnNjX3ByaXYgKnJzYyk7Ci0KLSNlbmRp ZiAvKiBfRFBVX1JTQ19QUklWX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RwdV9y c2MuaCBiL2luY2x1ZGUvbGludXgvZHB1X3JzYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCA4MWJlYTVlLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvZHB1X3JzYy5oCisrKyAv ZGV2L251bGwKQEAgLTEsMzAyICswLDAgQEAKLS8qIENvcHlyaWdodCAoYykgMjAxNi0yMDE4LCBU aGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK LSAqLwotCi0jaWZuZGVmIF9EUFVfUlNDX0hfCi0jZGVmaW5lIF9EUFVfUlNDX0hfCi0KLSNpbmNs dWRlIDxsaW51eC9rZXJuZWwuaD4KLQotLyogcHJpbWFyeSBkaXNwbGF5IHJzYyBpbmRleCAqLwot I2RlZmluZSBEUFVfUlNDX0lOREVYCQkwCi0KLSNkZWZpbmUgTUFYX1JTQ19DTElFTlRfTkFNRV9M RU4gMTI4Ci0KLS8qIERSTSBPYmplY3QgSURzIGFyZSBudW1iZXJlZCBleGNsdWRpbmcgMCwgdXNl IDAgdG8gaW5kaWNhdGUgaW52YWxpZCBDUlRDICovCi0jZGVmaW5lIERQVV9SU0NfSU5WQUxJRF9D UlRDX0lEIDAKLQotLyoqCi0gKiBldmVudCB3aWxsIGJlIHRyaWdnZXJlZCBiZWZvcmUgc2RlIGNv cmUgcG93ZXIgY29sbGFwc2UsCi0gKiBtZHNzIGdkc2MgaXMgc3RpbGwgb24KLSAqLwotI2RlZmlu ZSBEUFVfUlNDX0VWRU5UX1BSRV9DT1JFX1BDIDB4MQotLyoqCi0gKiBldmVudCB3aWxsIGJlIHRy aWdnZXJlZCBhZnRlciBzZGUgY29yZSBjb2xsYXBzZSBjb21wbGV0ZSwKLSAqIG1kc3MgZ2RzYyBp cyBvZmYgbm93Ci0gKi8KLSNkZWZpbmUgRFBVX1JTQ19FVkVOVF9QT1NUX0NPUkVfUEMgMHgyCi0v KioKLSAqIGV2ZW50IHdpbGwgYmUgdHJpZ2dlcmVkIGJlZm9yZSByZXN0b3JpbmcgdGhlIHNkZSBj b3JlIGZyb20gcG93ZXIgY29sbGFwc2UsCi0gKiBtZHNzIGdkc2MgaXMgc3RpbGwgb2ZmCi0gKi8K LSNkZWZpbmUgRFBVX1JTQ19FVkVOVF9QUkVfQ09SRV9SRVNUT1JFIDB4NAotLyoqCi0gKiBldmVu dCB3aWxsIGJlIHRyaWdnZXJlZCBhZnRlciByZXN0b3JpbmcgdGhlIHNkZSBjb3JlIGZyb20gcG93 ZXIgY29sbGFwc2UsCi0gKiBtZHNzIGdkc2MgaXMgb24gbm93Ci0gKi8KLSNkZWZpbmUgRFBVX1JT Q19FVkVOVF9QT1NUX0NPUkVfUkVTVE9SRSAweDgKLS8qKgotICogZXZlbnQgYXR0YWNoZWQgd2l0 aCBzb2x2ZXIgc3RhdGUgZW5hYmxlZAotICogYWxsIGNsaWVudHMgaW4gY2xrX3N0YXRlIG9yIGNt ZF9zdGF0ZQotICovCi0jZGVmaW5lIERQVV9SU0NfRVZFTlRfU09MVkVSX0VOQUJMRUQgMHgxMAot LyoqCi0gKiBldmVudCBhdHRhY2hlZCB3aXRoIHNvbHZlciBzdGF0ZSBkaXNhYmxlZAotICogb25l IG9mIHRoZSBjbGllbnQgcmVxdWVzdGVkIGZvciB2aWQgc3RhdGUKLSAqLwotI2RlZmluZSBEUFVf UlNDX0VWRU5UX1NPTFZFUl9ESVNBQkxFRCAweDIwCi0KLS8qKgotICogZHB1X3JzY19zdGF0ZTog c2RlIHJzYyBzdGF0ZSBpbmZvcm1hdGlvbgotICogRFBVX1JTQ19JRExFX1NUQVRFOiBBIGNsaWVu dCByZXF1ZXN0cyBmb3IgaWRsZSBzdGF0ZSB3aGVuIHRoZXJlIGlzIG5vCi0gKiAgICAgICAgICAg ICAgICAgICAgcGl4ZWwgb3IgY21kIHRyYW5zZmVyIGV4cGVjdGVkLiBBbiBpZGxlIHZvdGUgZnJv bQotICogICAgICAgICAgICAgICAgICAgIGFsbCBjbGllbnRzIGxlYWQgdG8gcG93ZXIgY29sbGFw c2Ugc3RhdGUuCi0gKiBEUFVfUlNDX0NMS19TVEFURTogIEEgY2xpZW50IHJlcXVlc3RzIGZvciBj bGsgc3RhdGUgd2hlbiBpdCB3YW50cyB0bwotICogICAgICAgICAgICAgICAgICAgIG9ubHkgYXZv aWQgbW9kZS0yIGVudHJ5L2V4aXQuIEZvciBleDogVjRMMiBkcml2ZXIsCi0gKiAgICAgICAgICAg ICAgICAgICAgc2RlIHBvd2VyIGhhbmRsZSwgZXRjLgotICogRFBVX1JTQ19DTURfU1RBVEU6ICBB IGNsaWVudCByZXF1ZXN0cyBmb3IgY21kIHN0YXRlIHdoZW4gaXQgd2FudHMgdG8KLSAqICAgICAg ICAgICAgICAgICAgICBlbmFibGUgdGhlIHNvbHZlciBtb2RlLgotICogRFBVX1JTQ19WSURfU1RB VEU6ICBBIGNsaWVudCByZXF1ZXN0cyBmb3IgdmlkIHN0YXRlIGl0IHdhbnRzIHRvIGF2b2lkCi0g KiAgICAgICAgICAgICAgICAgICAgc29sdmVyIGVuYWJsZSBiZWNhdXNlIGNsaWVudCBpcyBmZXRj aGluZyBkYXRhIGZyb20KLSAqICAgICAgICAgICAgICAgICAgICBjb250aW51b3VzbHkuCi0gKi8K LWVudW0gZHB1X3JzY19zdGF0ZSB7Ci0JRFBVX1JTQ19JRExFX1NUQVRFLAotCURQVV9SU0NfQ0xL X1NUQVRFLAotCURQVV9SU0NfQ01EX1NUQVRFLAotCURQVV9SU0NfVklEX1NUQVRFLAotfTsKLQot LyoqCi0gKiBzdHJ1Y3QgZHB1X3JzY19jbGllbnQ6IHN0b3JlcyB0aGUgcnNjIGNsaWVudCBmb3Ig c2RlIGRyaXZlcgotICogQG5hbWU6CW5hbWUgb2YgdGhlIGNsaWVudAotICogQGN1cnJlbnRfc3Rh dGU6ICAgY3VycmVudCBjbGllbnQgc3RhdGUKLSAqIEBjcnRjX2lkOgkJY3J0Y19pZCBhc3NvY2lh dGVkIHdpdGggdGhpcyByc2MgY2xpZW50LgotICogQHJzY19pbmRleDoJcnNjIGluZGV4IG9mIGEg Y2xpZW50IC0gb25seSBpbmRleCAiMCIgdmFsaWQuCi0gKiBAaWQ6CQlJbmRleCBvZiBjbGllbnQu IEl0IHdpbGwgYmUgYXNzaWduZWQgZHVyaW5nIGNsaWVudF9jcmVhdGUgY2FsbAotICogQGxpc3Q6 CWxpc3QgdG8gYXR0YWNoIGNsaWVudCBtYXN0ZXIgbGlzdAotICovCi1zdHJ1Y3QgZHB1X3JzY19j bGllbnQgewotCWNoYXIgbmFtZVtNQVhfUlNDX0NMSUVOVF9OQU1FX0xFTl07Ci0Jc2hvcnQgY3Vy cmVudF9zdGF0ZTsKLQlpbnQgY3J0Y19pZDsKLQl1MzIgcnNjX2luZGV4OwotCXUzMiBpZDsKLQlz dHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBkcHVfcnNjX2V2ZW50 OiBsb2NhbCBldmVudCByZWdpc3RyYXRpb24gZW50cnkgc3RydWN0dXJlCi0gKiBAY2JfZnVuYzoJ UG9pbnRlciB0byBkZXNpcmVkIGNhbGxiYWNrIGZ1bmN0aW9uCi0gKiBAdXNyOglVc2VyIHBvaW50 ZXIgdG8gcGFzcyB0byBjYWxsYmFjayBvbiBldmVudCB0cmlnZ2VyCi0gKiBAcnNjX2luZGV4Ogly c2MgaW5kZXggb2YgYSBjbGllbnQgLSBvbmx5IGluZGV4ICIwIiB2YWxpZC4KLSAqIEBldmVudF90 eXBlOglyZWZlciBjb21tZW50cyBpbiBldmVudF9yZWdpc3RlcgotICogQGxpc3Q6CWxpc3QgdG8g YXR0YWNoIGV2ZW50IG1hc3RlciBsaXN0Ci0gKi8KLXN0cnVjdCBkcHVfcnNjX2V2ZW50IHsKLQl2 b2lkICgqY2JfZnVuYykodWludDMyX3QgZXZlbnRfdHlwZSwgdm9pZCAqdXNyKTsKLQl2b2lkICp1 c3I7Ci0JdTMyIHJzY19pbmRleDsKLQl1aW50MzJfdCBldmVudF90eXBlOwotCXN0cnVjdCBsaXN0 X2hlYWQgbGlzdDsKLX07Ci0KLS8qKgotICogc3RydWN0IGRwdV9yc2NfY21kX2NvbmZpZzogcHJv dmlkZXMgcGFuZWwgY29uZmlndXJhdGlvbiB0byByc2MKLSAqIHdoZW4gY2xpZW50IGlzIGNvbW1h bmQgbW9kZS4gSXQgaXMgbm90IHJlcXVpcmVkIHRvIHNldCBpdCBkdXJpbmcKLSAqIHZpZGVvIG1v ZGUuCi0gKgotICogQGZwczoJcGFuZWwgdGUgaW50ZXJ2YWwKLSAqIEB2dG90YWw6CWN1cnJlbnQg dmVydGljYWwgdG90YWwgKGhlaWdodCArIHZicCArIHZmcCkKLSAqIEBqaXR0ZXJfbnVtZXI6IHBh bmVsIGppdHRlciBudW1lcmF0b3IgdmFsdWUuIFRoaXMgY29uZmlnIGNhdXNlcyByc2Mvc29sdmVy Ci0gKiAgICAgICAgICAgICAgICBlYXJseSBiZWZvcmUgdGUuIERlZmF1bHQgaXMgMC44JSBqaXR0 ZXIuCi0gKiBAaml0dGVyX2Rlbm9tOiBwYW5lbCBqaXR0ZXIgZGVub21pbmF0b3IuCi0gKiBAcHJl ZmlsbF9saW5lczoJbWF4IHByZWZpbGwgbGluZXMgYmFzZWQgb24gcGFuZWwKLSAqLwotc3RydWN0 IGRwdV9yc2NfY21kX2NvbmZpZyB7Ci0JdTMyIGZwczsKLQl1MzIgdnRvdGFsOwotCXUzMiBqaXR0 ZXJfbnVtZXI7Ci0JdTMyIGppdHRlcl9kZW5vbTsKLQl1MzIgcHJlZmlsbF9saW5lczsKLX07Ci0K LSNpZmRlZiBDT05GSUdfRFJNX0RQVV9SU0MKLS8qKgotICogZHB1X3JzY19jbGllbnRfY3JlYXRl KCkgLSBjcmVhdGUgdGhlIGNsaWVudCBmb3Igc2RlIHJzYy4KLSAqIERpZmZlcmVudCBkaXNwbGF5 cyBsaWtlIERTSSwgSERNSSwgRFAsIFdCLCBldGMgc2hvdWxkIGNhbGwgdGhpcwotICogYXBpIHRv IHJlZ2lzdGVyIHRoZWlyIHZvdGUgZm9yIHJwbWguIFRoZXkgc3RpbGwgbmVlZCB0byB2b3RlIGZv cgotICogcG93ZXIgaGFuZGxlIHRvIGdldCB0aGUgY2xvY2tzLgotCi0gKiBAcnNjX2luZGV4OiAg IEEgY2xpZW50IHdpbGwgYmUgY3JlYXRlZCBvbiB0aGlzIFJTQy4gQXMgb2Ygbm93IG9ubHkKLSAq ICAgICAgICAgICAgICAgRFBVX1JTQ19JTkRFWCBpcyB2YWxpZCByc2MgaW5kZXguCi0gKiBAbmFt ZToJIENhbGxlciBuZWVkcyB0byBwcm92aWRlIHNvbWUgdmFsaWQgc3RyaW5nIHRvIGlkZW50aWZ5 Ci0gKiAgICAgICAgICAgICAgIHRoZSBjbGllbnQuICJwcmltYXJ5IiwgImRwIiwgImhkbWkiIGFy ZSBzdWdnZXN0ZWQgbmFtZS4KLSAqIEBpc19wcmltYXJ5OgkgQ2FsbGVyIG5lZWRzIHRvIHByb3Zp ZGUgaW5mb3JtYXRpb24gaWYgY2xpZW50IGlzIHByaW1hcnkKLSAqICAgICAgICAgICAgICAgb3Ig bm90LiBQcmltYXJ5IGNsaWVudCB2b3RlcyB3aWxsIGJlIHJlZGlyZWN0ZWQgdG8KLSAqICAgICAg ICAgICAgICAgZGlzcGxheSByc2MuCi0gKiBAY29uZmlnOgkgZnBzLCB2dG90YWwsIHBvcmNoZXMs IGV0YyBjb25maWd1cmF0aW9uIGZvciBjb21tYW5kIG1vZGUKLSAqICAgICAgICAgICAgICAgcGFu ZWwKLSAqCi0gKiBSZXR1cm46IGNsaWVudCBub2RlIHBvaW50ZXIuCi0gKi8KLXN0cnVjdCBkcHVf cnNjX2NsaWVudCAqZHB1X3JzY19jbGllbnRfY3JlYXRlKHUzMiByc2NfaW5kZXgsIGNoYXIgKm5h bWUsCi0JCWJvb2wgaXNfcHJpbWFyeV9kaXNwbGF5KTsKLQotLyoqCi0gKiBkcHVfcnNjX2NsaWVu dF9kZXN0cm95KCkgLSBEZXN0cm95IHRoZSBzZGUgcnNjIGNsaWVudC4KLSAqCi0gKiBAY2xpZW50 OgkgQ2xpZW50IHBvaW50ZXIgcHJvdmlkZWQgYnkgZHB1X3JzY19jbGllbnRfY3JlYXRlKCkuCi0g KgotICogUmV0dXJuOiBub25lCi0gKi8KLXZvaWQgZHB1X3JzY19jbGllbnRfZGVzdHJveShzdHJ1 Y3QgZHB1X3JzY19jbGllbnQgKmNsaWVudCk7Ci0KLS8qKgotICogZHB1X3JzY19jbGllbnRfc3Rh dGVfdXBkYXRlKCkgLSByc2MgY2xpZW50IHN0YXRlIHVwZGF0ZQotICogVmlkZW8gbW9kZSwgY21k IG1vZGUgYW5kIGNsayBzdGF0ZSBhcmUgc3VwcG9ydGVkIGFzIG1vZGVzLiBBIGNsaWVudCBuZWVk IHRvCi0gKiBzZXQgdGhpcyBwcm9wZXJ0eSBkdXJpbmcgcGFuZWwgdGltZS4gQSBzd2l0Y2hpbmcg Y2xpZW50IGNhbiBzZXQgdGhlCi0gKiBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIHN0YXRlCi0gKgot ICogQGNsaWVudDoJIENsaWVudCBwb2ludGVyIHByb3ZpZGVkIGJ5IGRwdV9yc2NfY2xpZW50X2Ny ZWF0ZSgpLgotICogQHN0YXRlOgkgQ2xpZW50IHN0YXRlIC0gdmlkZW8vY21kCi0gKiBAY29uZmln OgkgZnBzLCB2dG90YWwsIHBvcmNoZXMsIGV0YyBjb25maWd1cmF0aW9uIGZvciBjb21tYW5kIG1v ZGUKLSAqICAgICAgICAgICAgICAgcGFuZWwKLSAqIEBjcnRjX2lkOgkgY3VycmVudCBjbGllbnQn cyBjcnRjIGlkCi0gKiBAd2FpdF92YmxhbmtfY3J0Y19pZDoJT3V0cHV0IHBhcmFtZXRlci4gSWYg c2V0IHRvIG5vbi16ZXJvLCByc2MgaHcKLSAqCQkJCXN0YXRlIHVwZGF0ZSByZXF1aXJlcyBhIHdh aXQgZm9yIG9uZSB2Ymxhbmsgb24KLSAqCQkJCXRoZSBwcmltYXJ5IGNydGMuIEluIHRoYXQgY2Fz ZSwgdGhpcyBvdXRwdXQKLSAqCQkJCXBhcmFtIHdpbGwgYmUgc2V0IHRvIHRoZSBjcnRjIG9uIHdo aWNoIHRvIHdhaXQuCi0gKgkJCQlJZiBEUFVfUlNDX0lOVkFMSURfQ1JUQ19JRCwgbm8gd2FpdCBu ZWNlc3NhcnkKLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0gKi8KLWludCBkcHVfcnNjX2Ns aWVudF9zdGF0ZV91cGRhdGUoc3RydWN0IGRwdV9yc2NfY2xpZW50ICpjbGllbnQsCi0JZW51bSBk cHVfcnNjX3N0YXRlIHN0YXRlLAotCXN0cnVjdCBkcHVfcnNjX2NtZF9jb25maWcgKmNvbmZpZywg aW50IGNydGNfaWQsCi0JaW50ICp3YWl0X3ZibGFua19jcnRjX2lkKTsKLQotLyoqCi0gKiBkcHVf cnNjX2NsaWVudF9pc19zdGF0ZV91cGRhdGVfY29tcGxldGUoKSAtIGNoZWNrIGlmIHN0YXRlIHVw ZGF0ZSBpcyBjb21wbGV0ZQotICogUlNDIHN0YXRlIHRyYW5zaXRpb24gaXMgbm90IGNvbXBsZXRl IHVudGlsIEhXIHJlY2VpdmVzIFZCTEFOSyBzaWduYWwuIFRoaXMKLSAqIGZ1bmN0aW9uIGNoZWNr cyBSU0MgSFcgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhhdCBzaWduYWwgaGFzIGJlZW4gcmVjZWl2 ZWQuCi0gKiBAY2xpZW50OgkgQ2xpZW50IHBvaW50ZXIgcHJvdmlkZWQgYnkgZHB1X3JzY19jbGll bnRfY3JlYXRlKCkuCi0gKgotICogUmV0dXJuOiB0cnVlIGlmIHRoZSBzdGF0ZSB1cGRhdGUgaGFz IGNvbXBsZXRlZC4KLSAqLwotYm9vbCBkcHVfcnNjX2NsaWVudF9pc19zdGF0ZV91cGRhdGVfY29t cGxldGUoCi0JCXN0cnVjdCBkcHVfcnNjX2NsaWVudCAqY2FsbGVyX2NsaWVudCk7Ci0KLS8qKgot ICogZHB1X3JzY19jbGllbnRfdm90ZSgpIC0gYWIvaWIgdm90ZSBmcm9tIHJzYyBjbGllbnQKLSAq Ci0gKiBAY2xpZW50OgkgQ2xpZW50IHBvaW50ZXIgcHJvdmlkZWQgYnkgZHB1X3JzY19jbGllbnRf Y3JlYXRlKCkuCi0gKiBAYnVzX2lkOgkgZGF0YSBidXMgaWRlbnRpZmllcgotICogQGFiOgkJIGFn Z3JlZ2F0ZWQgYmFuZHdpZHRoIHZvdGUgZnJvbSBjbGllbnQuCi0gKiBAaWI6CQkgaW5zdGFudCBi YW5kd2lkdGggdm90ZSBmcm9tIGNsaWVudC4KLSAqCi0gKiBSZXR1cm46IGVycm9yIGNvZGUuCi0g Ki8KLWludCBkcHVfcnNjX2NsaWVudF92b3RlKHN0cnVjdCBkcHVfcnNjX2NsaWVudCAqY2FsbGVy X2NsaWVudCwKLQl1MzIgYnVzX2lkLCB1NjQgYWJfdm90ZSwgdTY0IGliX3ZvdGUpOwotCi0vKioK LSAqIGRwdV9yc2NfcmVnaXN0ZXJfZXZlbnQgLSByZWdpc3RlciBhIGNhbGxiYWNrIGZ1bmN0aW9u IGZvciBhbiBldmVudAotICogQHJzY19pbmRleDogICBBIGNsaWVudCB3aWxsIGJlIGNyZWF0ZWQg b24gdGhpcyBSU0MuIEFzIG9mIG5vdyBvbmx5Ci0gKiAgICAgICAgICAgICAgIERQVV9SU0NfSU5E RVggaXMgdmFsaWQgcnNjIGluZGV4LgotICogQGV2ZW50X3R5cGU6ICBldmVudCB0eXBlIHRvIHJl Z2lzdGVyOyBjbGllbnQgc2V0cyAweDMgaWYgaXQgd2FudHMKLSAqICAgICAgICAgICAgICAgdG8g cmVnaXN0ZXIgZm9yIENPUkVfUEMgYW5kIENPUkVfUkVTVE9SRSAtIGJvdGggZXZlbnRzLgotICog QGNiX2Z1bmM6ICAgICBQb2ludGVyIHRvIGRlc2lyZWQgY2FsbGJhY2sgZnVuY3Rpb24KLSAqIEB1 c3I6ICAgICAgICAgVXNlciBwb2ludGVyIHRvIHBhc3MgdG8gY2FsbGJhY2sgb24gZXZlbnQgdHJp Z2dlcgotICogUmV0dXJuczogZHB1X3JzY19ldmVudCBwb2ludGVyIG9uIHN1Y2Nlc3MKLSAqLwot c3RydWN0IGRwdV9yc2NfZXZlbnQgKmRwdV9yc2NfcmVnaXN0ZXJfZXZlbnQoaW50IHJzY19pbmRl eCwgdWludDMyX3QgZXZlbnRfdHlwZSwKLQkJdm9pZCAoKmNiX2Z1bmMpKHVpbnQzMl90IGV2ZW50 X3R5cGUsIHZvaWQgKnVzciksIHZvaWQgKnVzcik7Ci0KLS8qKgotICogZHB1X3JzY191bnJlZ2lz dGVyX2V2ZW50IC0gdW5yZWdpc3RlciBjYWxsYmFjayBmb3IgYW4gZXZlbnQKLSAqIEBkcHVfcnNj X2V2ZW50OiBldmVudCByZXR1cm5lZCBieSBkcHVfcnNjX3JlZ2lzdGVyX2V2ZW50Ci0gKi8KLXZv aWQgZHB1X3JzY191bnJlZ2lzdGVyX2V2ZW50KHN0cnVjdCBkcHVfcnNjX2V2ZW50ICpldmVudCk7 Ci0KLS8qKgotICogaXNfZHB1X3JzY19hdmFpbGFibGUgLSBjaGVjayBpZiBkaXNwbGF5IHJzYyBh dmFpbGFibGUuCi0gKiBAcnNjX2luZGV4OiAgIEEgY2xpZW50IHdpbGwgYmUgY3JlYXRlZCBvbiB0 aGlzIFJTQy4gQXMgb2Ygbm93IG9ubHkKLSAqICAgICAgICAgICAgICAgRFBVX1JTQ19JTkRFWCBp cyB2YWxpZCByc2MgaW5kZXguCi0gKiBSZXR1cm5zOiB0cnVlIGlmIHJzYyBpcyBhdmFpbGFibGU7 IGZhbHNlIGluIGFsbCBvdGhlciBjYXNlcwotICovCi1ib29sIGlzX2RwdV9yc2NfYXZhaWxhYmxl KGludCByc2NfaW5kZXgpOwotCi0vKioKLSAqIGdldF9kcHVfcnNjX2N1cnJlbnRfc3RhdGUgLSBn ZXRzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHNkZSByc2MuCi0gKiBAcnNjX2luZGV4OiAgIEEgY2xp ZW50IHdpbGwgYmUgY3JlYXRlZCBvbiB0aGlzIFJTQy4gQXMgb2Ygbm93IG9ubHkKLSAqICAgICAg ICAgICAgICAgRFBVX1JTQ19JTkRFWCBpcyB2YWxpZCByc2MgaW5kZXguCi0gKiBSZXR1cm5zOiBj dXJyZW50IHN0YXRlIGlmIHJzYyBhdmFpbGFibGU7IERQVV9SU0NfSURMRV9TVEFURSBmb3IKLSAq ICAgICAgICAgIGFsbCBvdGhlciBjYXNlcwotICovCi1lbnVtIGRwdV9yc2Nfc3RhdGUgZ2V0X2Rw dV9yc2NfY3VycmVudF9zdGF0ZShpbnQgcnNjX2luZGV4KTsKLQotI2Vsc2UKLQotc3RhdGljIGlu bGluZSBzdHJ1Y3QgZHB1X3JzY19jbGllbnQgKmRwdV9yc2NfY2xpZW50X2NyZWF0ZSh1MzIgcnNj X2luZGV4LAotCQljaGFyICpuYW1lLCBib29sIGlzX3ByaW1hcnlfZGlzcGxheSkKLXsKLQlyZXR1 cm4gTlVMTDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRwdV9yc2NfY2xpZW50X2Rlc3Ryb3ko c3RydWN0IGRwdV9yc2NfY2xpZW50ICpjbGllbnQpCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50 IGRwdV9yc2NfY2xpZW50X3N0YXRlX3VwZGF0ZShzdHJ1Y3QgZHB1X3JzY19jbGllbnQgKmNsaWVu dCwKLQllbnVtIGRwdV9yc2Nfc3RhdGUgc3RhdGUsCi0Jc3RydWN0IGRwdV9yc2NfY21kX2NvbmZp ZyAqY29uZmlnLCBpbnQgY3J0Y19pZCwKLQlpbnQgKndhaXRfdmJsYW5rX2NydGNfaWQpCi17Ci0J cmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBkcHVfcnNjX2NsaWVudF9pc19zdGF0 ZV91cGRhdGVfY29tcGxldGUoCi0JCXN0cnVjdCBkcHVfcnNjX2NsaWVudCAqY2FsbGVyX2NsaWVu dCkKLXsKLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGRwdV9yc2NfY2xp ZW50X3ZvdGUoc3RydWN0IGRwdV9yc2NfY2xpZW50ICpjYWxsZXJfY2xpZW50LAotCXUzMiBidXNf aWQsIHU2NCBhYl92b3RlLCB1NjQgaWJfdm90ZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGlj IGlubGluZSBzdHJ1Y3QgZHB1X3JzY19ldmVudCAqZHB1X3JzY19yZWdpc3Rlcl9ldmVudChpbnQg cnNjX2luZGV4LAotCQl1aW50MzJfdCBldmVudF90eXBlLAotCQl2b2lkICgqY2JfZnVuYykodWlu dDMyX3QgZXZlbnRfdHlwZSwgdm9pZCAqdXNyKSwgdm9pZCAqdXNyKQotewotCXJldHVybiBOVUxM OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZHB1X3JzY191bnJlZ2lzdGVyX2V2ZW50KHN0cnVj dCBkcHVfcnNjX2V2ZW50ICpldmVudCkKLXsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzX2Rw dV9yc2NfYXZhaWxhYmxlKGludCByc2NfaW5kZXgpCi17Ci0JcmV0dXJuIGZhbHNlOwotfQotCi1z dGF0aWMgaW5saW5lIGVudW0gZHB1X3JzY19zdGF0ZSBnZXRfZHB1X3JzY19jdXJyZW50X3N0YXRl KGludCByc2NfaW5kZXgpCi17Ci0JcmV0dXJuIERQVV9SU0NfSURMRV9TVEFURTsKLX0KLSNlbmRp ZiAvKiBDT05GSUdfRFJNX0RQVV9SU0MgKi8KLQotI2VuZGlmIC8qIF9EUFVfUlNDX0hfICovCi0t IApUaGUgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gaXMgYSBtZW1iZXIgb2YgdGhl IENvZGUgQXVyb3JhIEZvcnVtLAphIExpbnV4IEZvdW5kYXRpb24gQ29sbGFib3JhdGl2ZSBQcm9q ZWN0CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpGcmVl ZHJlbm8gbWFpbGluZyBsaXN0CkZyZWVkcmVub0BsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9mcmVlZHJlbm8K