From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeykumar Sankaran Subject: [DPU PATCH 6/7] drm/msm: remove msm_prop files Date: Wed, 23 May 2018 12:31:01 -0700 Message-ID: <1527103862-13934-7-git-send-email-jsanka@codeaurora.org> References: <1527103862-13934-1-git-send-email-jsanka@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1527103862-13934-1-git-send-email-jsanka-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: hoegsberg-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org, Jeykumar Sankaran , seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org UmVtb3ZlIGhhbmQgcm9sbGVkIG1zbSBwcm9wZXJ0eSBjYWNoaW5nIHRvIGhhbmRsZSBEUFUKY3Vz dG9tIHByb3BlcnRpZXMuIFRoaXMgY2hhbmdlIGFsc28gY2xlYW5zIHVwIGFsbCBpdHMKZGVwZW5k ZW5jaWVzIHRvIGNhY2hlIGFuZCByZXN0b3JlIHJlc3BlY3RpdmUgZHJtCnN0YXRlcy4KClNpZ25l ZC1vZmYtYnk6IEpleWt1bWFyIFNhbmthcmFuIDxqc2Fua2FAY29kZWF1cm9yYS5vcmc+Ci0tLQog ZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgIHwgICAxIC0KIGRy aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb3JlX3BlcmYuYyB8ICAgMiAtCiBkcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jICAgICAgfCAyMzkgKy0tLS0tLS0t CiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oICAgICAgfCAgMTYgLQog ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuaCAgIHwgICAyIC0KIGRy aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5jICAgICB8IDEyMyArLS0tLQog ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmggICAgIHwgIDEyIC0KIGRy aXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oICAgICAgICAgICAgICAgICB8ICAxNiArLQogZHJp dmVycy9ncHUvZHJtL21zbS9tc21fcHJvcC5jICAgICAgICAgICAgICAgIHwgNjg4IC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9wcm9wLmggICAgICAg ICAgICAgICAgfCA0MzggLS0tLS0tLS0tLS0tLS0tLQogMTAgZmlsZXMgY2hhbmdlZCwgOCBpbnNl cnRpb25zKCspLCAxNTI5IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9tc20vbXNtX3Byb3AuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9tc20vbXNtX3Byb3AuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZp bGUgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCmluZGV4IGQyODk1MDMuLjUzMzExODgg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9n cHUvZHJtL21zbS9NYWtlZmlsZQpAQCAtNzYsNyArNzYsNiBAQCBtc20teSA6PSBcCiAJZHB1X2lv X3V0aWwubyBcCiAJZHB1X2RiZ19ldnRsb2cubyBcCiAJZHB1X3Bvd2VyX2hhbmRsZS5vIFwKLQlt c21fcHJvcC5vIFwKIAltc21fYXRvbWljLm8gXAogCW1zbV9kZWJ1Z2ZzLm8gXAogCW1zbV9kcnYu byBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9w ZXJmLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9wZXJmLmMKaW5k ZXggYzQ4MjBkZS4uZTRiODJkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2NvcmVfcGVyZi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9jb3JlX3BlcmYuYwpAQCAtMTksOCArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay5o PgogI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgogCi0jaW5jbHVkZSAibXNtX3Byb3AuaCIKLQog I2luY2x1ZGUgImRwdV9rbXMuaCIKICNpbmNsdWRlICJkcHVfdHJhY2UuaCIKICNpbmNsdWRlICJk cHVfY3J0Yy5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMKaW5kZXgg YjBhM2EzMC4uNDNkOTk4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0 Yy5jCkBAIC01NzksMTAgKzU3OSw2IEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRjX2Rlc3Ryb3koc3Ry dWN0IGRybV9jcnRjICpjcnRjKQogCWlmICghY3J0YykKIAkJcmV0dXJuOwogCi0JaWYgKGRwdV9j cnRjLT5ibG9iX2luZm8pCi0JCWRybV9wcm9wZXJ0eV9ibG9iX3B1dChkcHVfY3J0Yy0+YmxvYl9p bmZvKTsKLQltc21fcHJvcGVydHlfZGVzdHJveSgmZHB1X2NydGMtPnByb3BlcnR5X2luZm8pOwot CiAJX2RwdV9jcnRjX2RlaW5pdF9ldmVudHMoZHB1X2NydGMpOwogCiAJZHJtX2NydGNfY2xlYW51 cChjcnRjKTsKQEAgLTEzOTAsOSArMTM4Niw3IEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRjX2Rlc3Ry b3lfc3RhdGUoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCiAJX19kcm1fYXRvbWljX2hlbHBlcl9j cnRjX2Rlc3Ryb3lfc3RhdGUoc3RhdGUpOwogCi0JLyogZGVzdHJveSB2YWx1ZSBoZWxwZXIgKi8K LQltc21fcHJvcGVydHlfZGVzdHJveV9zdGF0ZSgmZHB1X2NydGMtPnByb3BlcnR5X2luZm8sIGNz dGF0ZSwKLQkJCSZjc3RhdGUtPnByb3BlcnR5X3N0YXRlKTsKKwlrZnJlZShjc3RhdGUpOwogfQog CiBzdGF0aWMgaW50IF9kcHVfY3J0Y193YWl0X2Zvcl9mcmFtZV9kb25lKHN0cnVjdCBkcm1fY3J0 YyAqY3J0YykKQEAgLTE2NDEsMTcgKzE2MzUsMTIgQEAgc3RhdGljIHN0cnVjdCBkcm1fY3J0Y19z dGF0ZSAqZHB1X2NydGNfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAog CWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7CiAJb2xkX2NzdGF0ZSA9IHRvX2RwdV9jcnRj X3N0YXRlKGNydGMtPnN0YXRlKTsKLQljc3RhdGUgPSBtc21fcHJvcGVydHlfYWxsb2Nfc3RhdGUo JmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZvKTsKKwljc3RhdGUgPSBrbWVtZHVwKG9sZF9jc3RhdGUs IHNpemVvZigqb2xkX2NzdGF0ZSksIEdGUF9LRVJORUwpOwogCWlmICghY3N0YXRlKSB7CiAJCURQ VV9FUlJPUigiZmFpbGVkIHRvIGFsbG9jYXRlIHN0YXRlXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJ fQogCi0JLyogZHVwbGljYXRlIHZhbHVlIGhlbHBlciAqLwotCW1zbV9wcm9wZXJ0eV9kdXBsaWNh dGVfc3RhdGUoJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZvLAotCQkJb2xkX2NzdGF0ZSwgY3N0YXRl LAotCQkJJmNzdGF0ZS0+cHJvcGVydHlfc3RhdGUsIGNzdGF0ZS0+cHJvcGVydHlfdmFsdWVzKTsK LQogCS8qIGR1cGxpY2F0ZSBiYXNlIGhlbHBlciAqLwogCV9fZHJtX2F0b21pY19oZWxwZXJfY3J0 Y19kdXBsaWNhdGVfc3RhdGUoY3J0YywgJmNzdGF0ZS0+YmFzZSk7CiAKQEAgLTE2ODcsMTcgKzE2 NzYsMTIgQEAgc3RhdGljIHZvaWQgZHB1X2NydGNfcmVzZXQoc3RydWN0IGRybV9jcnRjICpjcnRj KQogCX0KIAogCWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7Ci0JY3N0YXRlID0gbXNtX3By b3BlcnR5X2FsbG9jX3N0YXRlKCZkcHVfY3J0Yy0+cHJvcGVydHlfaW5mbyk7CisJY3N0YXRlID0g a3phbGxvYyhzaXplb2YoKmNzdGF0ZSksIEdGUF9LRVJORUwpOwogCWlmICghY3N0YXRlKSB7CiAJ CURQVV9FUlJPUigiZmFpbGVkIHRvIGFsbG9jYXRlIHN0YXRlXG4iKTsKIAkJcmV0dXJuOwogCX0K IAotCS8qIHJlc2V0IHZhbHVlIGhlbHBlciAqLwotCW1zbV9wcm9wZXJ0eV9yZXNldF9zdGF0ZSgm ZHB1X2NydGMtPnByb3BlcnR5X2luZm8sIGNzdGF0ZSwKLQkJCSZjc3RhdGUtPnByb3BlcnR5X3N0 YXRlLAotCQkJY3N0YXRlLT5wcm9wZXJ0eV92YWx1ZXMpOwotCiAJX2RwdV9jcnRjX3JwX3Jlc2V0 KCZjc3RhdGUtPnJwLCAmZHB1X2NydGMtPnJwX2xvY2ssCiAJCQkmZHB1X2NydGMtPnJwX2hlYWQp OwogCkBAIC0yMTk0LDIxMiArMjE3OCw2IEBAIHZvaWQgZHB1X2NydGNfY2FuY2VsX3BlbmRpbmdf ZmxpcChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKIAlfZHB1 X2NydGNfY29tcGxldGVfZmxpcChjcnRjLCBmaWxlKTsKIH0KIAotLyoqCi0gKiBkcHVfY3J0Y19p bnN0YWxsX3Byb3BlcnRpZXMgLSBpbnN0YWxsIGFsbCBkcm0gcHJvcGVydGllcyBmb3IgY3J0Ywot ICogQGNydGM6IFBvaW50ZXIgdG8gZHJtIGNydGMgc3RydWN0dXJlCi0gKi8KLXN0YXRpYyB2b2lk IGRwdV9jcnRjX2luc3RhbGxfcHJvcGVydGllcyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCQkJ c3RydWN0IGRwdV9tZHNzX2NmZyAqY2F0YWxvZykKLXsKLQlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9j cnRjOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGRwdV9rbXNfaW5mbyAqaW5m bzsKLQlzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttczsKLQotCURQVV9ERUJVRygiXG4iKTsKLQotCWlm ICghY3J0YyB8fCAhY2F0YWxvZykgewotCQlEUFVfRVJST1IoImludmFsaWQgY3J0YyBvciBjYXRh bG9nXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7 Ci0JZGV2ID0gY3J0Yy0+ZGV2OwotCWRwdV9rbXMgPSBfZHB1X2NydGNfZ2V0X2ttcyhjcnRjKTsK LQotCWlmICghZHB1X2ttcykgewotCQlEUFVfRVJST1IoImludmFsaWQgYXJndW1lbnRcbiIpOwot CQlyZXR1cm47Ci0JfQotCi0JaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkcHVfa21zX2lu Zm8pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWluZm8pIHsKLQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8g YWxsb2NhdGUgaW5mbyBtZW1vcnlcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JbXNtX3Byb3BlcnR5 X2luc3RhbGxfYmxvYigmZHB1X2NydGMtPnByb3BlcnR5X2luZm8sICJjYXBhYmlsaXRpZXMiLAot CQlEUk1fTU9ERV9QUk9QX0lNTVVUQUJMRSwgQ1JUQ19QUk9QX0lORk8pOwotCi0JZHB1X2ttc19p bmZvX3Jlc2V0KGluZm8pOwotCi0JZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5mbywgImh3X3Zl cnNpb24iLCBjYXRhbG9nLT5od3ZlcnNpb24pOwotCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGlu Zm8sICJtYXhfbGluZXdpZHRoIiwKLQkJCWNhdGFsb2ctPmNhcHMtPm1heF9taXhlcl93aWR0aCk7 Ci0JZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5mbywgIm1heF9ibGVuZHN0YWdlcyIsCi0JCQlj YXRhbG9nLT5jYXBzLT5tYXhfbWl4ZXJfYmxlbmRzdGFnZXMpOwotCWlmIChjYXRhbG9nLT5jYXBz LT5xc2VlZF90eXBlID09IERQVV9TU1BQX1NDQUxFUl9RU0VFRDIpCi0JCWRwdV9rbXNfaW5mb19h ZGRfa2V5c3RyKGluZm8sICJxc2VlZF90eXBlIiwgInFzZWVkMiIpOwotCWlmIChjYXRhbG9nLT5j YXBzLT5xc2VlZF90eXBlID09IERQVV9TU1BQX1NDQUxFUl9RU0VFRDMpCi0JCWRwdV9rbXNfaW5m b19hZGRfa2V5c3RyKGluZm8sICJxc2VlZF90eXBlIiwgInFzZWVkMyIpOwotCi0JaWYgKGRwdV9p c19jdXN0b21fY2xpZW50KCkpIHsKLQkJaWYgKGNhdGFsb2ctPmNhcHMtPnNtYXJ0X2RtYV9yZXYg PT0gRFBVX1NTUFBfU01BUlRfRE1BX1YxKQotCQkJZHB1X2ttc19pbmZvX2FkZF9rZXlzdHIoaW5m bywKLQkJCQkJInNtYXJ0X2RtYV9yZXYiLCAic21hcnRfZG1hX3YxIik7Ci0JCWlmIChjYXRhbG9n LT5jYXBzLT5zbWFydF9kbWFfcmV2ID09IERQVV9TU1BQX1NNQVJUX0RNQV9WMikKLQkJCWRwdV9r bXNfaW5mb19hZGRfa2V5c3RyKGluZm8sCi0JCQkJCSJzbWFydF9kbWFfcmV2IiwgInNtYXJ0X2Rt YV92MiIpOwotCX0KLQotCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJoYXNfc3JjX3Nw bGl0IiwKLQkJCQljYXRhbG9nLT5jYXBzLT5oYXNfc3JjX3NwbGl0KTsKLQlpZiAoY2F0YWxvZy0+ cGVyZi5tYXhfYndfbG93KQotCQlkcHVfa21zX2luZm9fYWRkX2tleWludChpbmZvLCAibWF4X2Jh bmR3aWR0aF9sb3ciLAotCQkJCWNhdGFsb2ctPnBlcmYubWF4X2J3X2xvdyAqIDEwMDBMTCk7Ci0J aWYgKGNhdGFsb2ctPnBlcmYubWF4X2J3X2hpZ2gpCi0JCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50 KGluZm8sICJtYXhfYmFuZHdpZHRoX2hpZ2giLAotCQkJCWNhdGFsb2ctPnBlcmYubWF4X2J3X2hp Z2ggKiAxMDAwTEwpOwotCWlmIChjYXRhbG9nLT5wZXJmLm1pbl9jb3JlX2liKQotCQlkcHVfa21z X2luZm9fYWRkX2tleWludChpbmZvLCAibWluX2NvcmVfaWIiLAotCQkJCWNhdGFsb2ctPnBlcmYu bWluX2NvcmVfaWIgKiAxMDAwTEwpOwotCWlmIChjYXRhbG9nLT5wZXJmLm1pbl9sbGNjX2liKQot CQlkcHVfa21zX2luZm9fYWRkX2tleWludChpbmZvLCAibWluX2xsY2NfaWIiLAotCQkJCWNhdGFs b2ctPnBlcmYubWluX2xsY2NfaWIgKiAxMDAwTEwpOwotCWlmIChjYXRhbG9nLT5wZXJmLm1pbl9k cmFtX2liKQotCQlkcHVfa21zX2luZm9fYWRkX2tleWludChpbmZvLCAibWluX2RyYW1faWIiLAot CQkJCWNhdGFsb2ctPnBlcmYubWluX2RyYW1faWIgKiAxMDAwTEwpOwotCWlmIChkcHVfa21zLT5w ZXJmLm1heF9jb3JlX2Nsa19yYXRlKQotCQlkcHVfa21zX2luZm9fYWRkX2tleWludChpbmZvLCAi bWF4X21kcF9jbGsiLAotCQkJCWRwdV9rbXMtPnBlcmYubWF4X2NvcmVfY2xrX3JhdGUpOwotCWRw dV9rbXNfaW5mb19hZGRfa2V5c3RyKGluZm8sICJjb3JlX2liX2ZmIiwKLQkJCWNhdGFsb2ctPnBl cmYuY29yZV9pYl9mZik7Ci0JZHB1X2ttc19pbmZvX2FkZF9rZXlzdHIoaW5mbywgImNvcmVfY2xr X2ZmIiwKLQkJCWNhdGFsb2ctPnBlcmYuY29yZV9jbGtfZmYpOwotCWRwdV9rbXNfaW5mb19hZGRf a2V5c3RyKGluZm8sICJjb21wX3JhdGlvX3J0IiwKLQkJCWNhdGFsb2ctPnBlcmYuY29tcF9yYXRp b19ydCk7Ci0JZHB1X2ttc19pbmZvX2FkZF9rZXlzdHIoaW5mbywgImNvbXBfcmF0aW9fbnJ0IiwK LQkJCWNhdGFsb2ctPnBlcmYuY29tcF9yYXRpb19ucnQpOwotCWRwdV9rbXNfaW5mb19hZGRfa2V5 aW50KGluZm8sICJkZXN0X3NjYWxlX3ByZWZpbGxfbGluZXMiLAotCQkJY2F0YWxvZy0+cGVyZi5k ZXN0X3NjYWxlX3ByZWZpbGxfbGluZXMpOwotCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8s ICJ1bmRlcnNpemVkX3ByZWZpbGxfbGluZXMiLAotCQkJY2F0YWxvZy0+cGVyZi51bmRlcnNpemVk X3ByZWZpbGxfbGluZXMpOwotCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJtYWNyb3Rp bGVfcHJlZmlsbF9saW5lcyIsCi0JCQljYXRhbG9nLT5wZXJmLm1hY3JvdGlsZV9wcmVmaWxsX2xp bmVzKTsKLQlkcHVfa21zX2luZm9fYWRkX2tleWludChpbmZvLCAieXV2X252MTJfcHJlZmlsbF9s aW5lcyIsCi0JCQljYXRhbG9nLT5wZXJmLnl1dl9udjEyX3ByZWZpbGxfbGluZXMpOwotCWRwdV9r bXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJsaW5lYXJfcHJlZmlsbF9saW5lcyIsCi0JCQljYXRh bG9nLT5wZXJmLmxpbmVhcl9wcmVmaWxsX2xpbmVzKTsKLQlkcHVfa21zX2luZm9fYWRkX2tleWlu dChpbmZvLCAiZG93bnNjYWxpbmdfcHJlZmlsbF9saW5lcyIsCi0JCQljYXRhbG9nLT5wZXJmLmRv d25zY2FsaW5nX3ByZWZpbGxfbGluZXMpOwotCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8s ICJ4dHJhX3ByZWZpbGxfbGluZXMiLAotCQkJY2F0YWxvZy0+cGVyZi54dHJhX3ByZWZpbGxfbGlu ZXMpOwotCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJhbW9ydGl6YWJsZV90aHJlc2hv bGQiLAotCQkJY2F0YWxvZy0+cGVyZi5hbW9ydGl6YWJsZV90aHJlc2hvbGQpOwotCWRwdV9rbXNf aW5mb19hZGRfa2V5aW50KGluZm8sICJtaW5fcHJlZmlsbF9saW5lcyIsCi0JCQljYXRhbG9nLT5w ZXJmLm1pbl9wcmVmaWxsX2xpbmVzKTsKLQotCW1zbV9wcm9wZXJ0eV9zZXRfYmxvYigmZHB1X2Ny dGMtPnByb3BlcnR5X2luZm8sICZkcHVfY3J0Yy0+YmxvYl9pbmZvLAotCQkJaW5mby0+ZGF0YSwg RFBVX0tNU19JTkZPX0RBVEFMRU4oaW5mbyksIENSVENfUFJPUF9JTkZPKTsKLQotCWtmcmVlKGlu Zm8pOwotfQotCi0vKioKLSAqIGRwdV9jcnRjX2F0b21pY19zZXRfcHJvcGVydHkgLSBhdG9taWNh bGx5IHNldCBhIGNydGMgZHJtIHByb3BlcnR5Ci0gKiBAY3J0YzogUG9pbnRlciB0byBkcm0gY3J0 YyBzdHJ1Y3R1cmUKLSAqIEBzdGF0ZTogUG9pbnRlciB0byBkcm0gY3J0YyBzdGF0ZSBzdHJ1Y3R1 cmUKLSAqIEBwcm9wZXJ0eTogUG9pbnRlciB0byB0YXJnZXRlZCBkcm0gcHJvcGVydHkKLSAqIEB2 YWw6IFVwZGF0ZWQgcHJvcGVydHkgdmFsdWUKLSAqIEBSZXR1cm5zOiBaZXJvIG9uIHN1Y2Nlc3MK LSAqLwotc3RhdGljIGludCBkcHVfY3J0Y19hdG9taWNfc2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1f Y3J0YyAqY3J0YywKLQkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSwKLQkJc3RydWN0IGRy bV9wcm9wZXJ0eSAqcHJvcGVydHksCi0JCXVpbnQ2NF90IHZhbCkKLXsKLQlzdHJ1Y3QgZHB1X2Ny dGMgKmRwdV9jcnRjOwotCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqY3N0YXRlOwotCWludCByZXQg PSAtRUlOVkFMOwotCi0JaWYgKCFjcnRjIHx8ICFzdGF0ZSB8fCAhcHJvcGVydHkpIHsKLQkJRFBV X0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50KHMpXG4iKTsKLQl9IGVsc2UgewotCQlkcHVfY3J0YyA9 IHRvX2RwdV9jcnRjKGNydGMpOwotCQljc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShzdGF0ZSk7 Ci0JCXJldCA9IG1zbV9wcm9wZXJ0eV9hdG9taWNfc2V0KCZkcHVfY3J0Yy0+cHJvcGVydHlfaW5m bywKLQkJCQkmY3N0YXRlLT5wcm9wZXJ0eV9zdGF0ZSwgcHJvcGVydHksIHZhbCk7Ci0JCWlmIChy ZXQpCi0JCQlEUk1fRVJST1IoImZhaWxlZCB0byBzZXQgdGhlIHByb3BlcnR5XG4iKTsKLQotCQlE UFVfREVCVUcoImNydGMlZCAlc1slZF0gPD0gMHglbGx4IHJldD0lZFxuIiwgY3J0Yy0+YmFzZS5p ZCwKLQkJCQlwcm9wZXJ0eS0+bmFtZSwgcHJvcGVydHktPmJhc2UuaWQsIHZhbCwgcmV0KTsKLQl9 Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGRwdV9jcnRjX3NldF9wcm9wZXJ0eSAtIHNl dCBhIGNydGMgZHJtIHByb3BlcnR5Ci0gKiBAY3J0YzogUG9pbnRlciB0byBkcm0gY3J0YyBzdHJ1 Y3R1cmUKLSAqIEBwcm9wZXJ0eTogUG9pbnRlciB0byB0YXJnZXRlZCBkcm0gcHJvcGVydHkKLSAq IEB2YWw6IFVwZGF0ZWQgcHJvcGVydHkgdmFsdWUKLSAqIEBSZXR1cm5zOiBaZXJvIG9uIHN1Y2Nl c3MKLSAqLwotc3RhdGljIGludCBkcHVfY3J0Y19zZXRfcHJvcGVydHkoc3RydWN0IGRybV9jcnRj ICpjcnRjLAotCQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwgdWludDY0X3QgdmFsKQot ewotCURQVV9ERUJVRygiXG4iKTsKLQotCXJldHVybiBkcHVfY3J0Y19hdG9taWNfc2V0X3Byb3Bl cnR5KGNydGMsIGNydGMtPnN0YXRlLCBwcm9wZXJ0eSwgdmFsKTsKLX0KLQotLyoqCi0gKiBkcHVf Y3J0Y19hdG9taWNfZ2V0X3Byb3BlcnR5IC0gcmV0cmlldmUgYSBjcnRjIGRybSBwcm9wZXJ0eQot ICogQGNydGM6IFBvaW50ZXIgdG8gZHJtIGNydGMgc3RydWN0dXJlCi0gKiBAc3RhdGU6IFBvaW50 ZXIgdG8gZHJtIGNydGMgc3RhdGUgc3RydWN0dXJlCi0gKiBAcHJvcGVydHk6IFBvaW50ZXIgdG8g dGFyZ2V0ZWQgZHJtIHByb3BlcnR5Ci0gKiBAdmFsOiBQb2ludGVyIHRvIHZhcmlhYmxlIGZvciBy ZWNlaXZpbmcgcHJvcGVydHkgdmFsdWUKLSAqIEBSZXR1cm5zOiBaZXJvIG9uIHN1Y2Nlc3MKLSAq Lwotc3RhdGljIGludCBkcHVfY3J0Y19hdG9taWNfZ2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY3J0 YyAqY3J0YywKLQkJY29uc3Qgc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSwKLQkJc3RydWN0 IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksCi0JCXVpbnQ2NF90ICp2YWwpCi17Ci0Jc3RydWN0IGRw dV9jcnRjICpkcHVfY3J0YzsKLQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNzdGF0ZTsKLQlzdHJ1 Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7Ci0JaW50IGksIHJldCA9IC1FSU5WQUw7Ci0JYm9vbCBp c19jbWQgPSB0cnVlOwotCi0JaWYgKCFjcnRjIHx8ICFzdGF0ZSkgewotCQlEUFVfRVJST1IoImlu dmFsaWQgYXJndW1lbnQocylcbiIpOwotCX0gZWxzZSB7Ci0JCWRwdV9jcnRjID0gdG9fZHB1X2Ny dGMoY3J0Yyk7Ci0JCWNzdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKHN0YXRlKTsKLQotCQkvKioK LQkJICogc2V0IHRoZSBjbWQgZmxhZyBvbmx5IHdoZW4gYWxsIHRoZSBlbmNvZGVycyBhdHRhY2hl ZAotCQkgKiB0byB0aGUgY3J0YyBhcmUgaW4gY21kIG1vZGUuIENvbnNpZGVyIGFsbCBvdGhlciBj YXNlcwotCQkgKiBhcyB2aWRlbyBtb2RlLgotCQkgKi8KLQkJZHJtX2Zvcl9lYWNoX2VuY29kZXIo ZW5jb2RlciwgY3J0Yy0+ZGV2KSB7Ci0JCQlpZiAoZW5jb2Rlci0+Y3J0YyA9PSBjcnRjKQotCQkJ CWlzX2NtZCA9IGRwdV9lbmNvZGVyX2NoZWNrX21vZGUoZW5jb2RlciwKLQkJCQkJCU1TTV9ESVNQ TEFZX0NBUF9DTURfTU9ERSk7Ci0JCX0KLQotCQlpID0gbXNtX3Byb3BlcnR5X2luZGV4KCZkcHVf Y3J0Yy0+cHJvcGVydHlfaW5mbywgcHJvcGVydHkpOwotCQlyZXQgPSBtc21fcHJvcGVydHlfYXRv bWljX2dldCgmZHB1X2NydGMtPnByb3BlcnR5X2luZm8sCi0JCQkJJmNzdGF0ZS0+cHJvcGVydHlf c3RhdGUsCi0JCQkJcHJvcGVydHksIHZhbCk7Ci0JCWlmIChyZXQpCi0JCQlEUk1fRVJST1IoImdl dCBwcm9wZXJ0eSBmYWlsZWRcbiIpOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCiAjaWZkZWYgQ09O RklHX0RFQlVHX0ZTCiBzdGF0aWMgaW50IF9kcHVfZGVidWdmc19zdGF0dXNfc2hvdyhzdHJ1Y3Qg c2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEpCiB7CkBAIC0yNzU5LDkgKzI1MzcsNiBAQCBzdGF0aWMg dm9pZCBkcHVfY3J0Y19lYXJseV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAku c2V0X2NvbmZpZyA9IGRybV9hdG9taWNfaGVscGVyX3NldF9jb25maWcsCiAJLmRlc3Ryb3kgPSBk cHVfY3J0Y19kZXN0cm95LAogCS5wYWdlX2ZsaXAgPSBkcm1fYXRvbWljX2hlbHBlcl9wYWdlX2Zs aXAsCi0JLnNldF9wcm9wZXJ0eSA9IGRwdV9jcnRjX3NldF9wcm9wZXJ0eSwKLQkuYXRvbWljX3Nl dF9wcm9wZXJ0eSA9IGRwdV9jcnRjX2F0b21pY19zZXRfcHJvcGVydHksCi0JLmF0b21pY19nZXRf cHJvcGVydHkgPSBkcHVfY3J0Y19hdG9taWNfZ2V0X3Byb3BlcnR5LAogCS5yZXNldCA9IGRwdV9j cnRjX3Jlc2V0LAogCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHB1X2NydGNfZHVwbGljYXRl X3N0YXRlLAogCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRwdV9jcnRjX2Rlc3Ryb3lfc3RhdGUs CkBAIC0yOTI0LDE0ICsyNjk5LDYgQEAgc3RydWN0IGRybV9jcnRjICpkcHVfY3J0Y19pbml0KHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQogCQlyZXR1cm4g RVJSX1BUUihyYyk7CiAJfQogCi0JLyogY3JlYXRlIENSVEMgcHJvcGVydGllcyAqLwotCW1zbV9w cm9wZXJ0eV9pbml0KCZkcHVfY3J0Yy0+cHJvcGVydHlfaW5mbywgJmNydGMtPmJhc2UsIGRldiwK LQkJCXByaXYtPmNydGNfcHJvcGVydHksIGRwdV9jcnRjLT5wcm9wZXJ0eV9kYXRhLAotCQkJQ1JU Q19QUk9QX0NPVU5ULCBDUlRDX1BST1BfQkxPQkNPVU5ULAotCQkJc2l6ZW9mKHN0cnVjdCBkcHVf Y3J0Y19zdGF0ZSkpOwotCi0JZHB1X2NydGNfaW5zdGFsbF9wcm9wZXJ0aWVzKGNydGMsIGttcy0+ Y2F0YWxvZyk7Ci0KIAlEUFVfREVCVUcoIiVzOiBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQgY3J0 Y1xuIiwgZHB1X2NydGMtPm5hbWUpOwogCXJldHVybiBjcnRjOwogfQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaCBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9jcnRjLmgKaW5kZXggNjYyOGViMy4uZjc1MjEwMSAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaAorKysgYi9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5j bHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPHVhcGkvZHJtL2RwdV9kcm0uaD4KICNp bmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KLSNpbmNsdWRlICJtc21fcHJvcC5oIgogI2luY2x1ZGUg ImRwdV9rbXMuaCIKICNpbmNsdWRlICJkcHVfY29yZV9wZXJmLmgiCiAjaW5jbHVkZSAiZHB1X2h3 X2Jsay5oIgpAQCAtMjAwLDEwICsxOTksNiBAQCBzdHJ1Y3QgZHB1X2NydGMgewogCXN0cnVjdCBk cm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmV2ZW50OwogCXUzMiB2c3luY19jb3VudDsKIAotCXN0 cnVjdCBtc21fcHJvcGVydHlfaW5mbyBwcm9wZXJ0eV9pbmZvOwotCXN0cnVjdCBtc21fcHJvcGVy dHlfZGF0YSBwcm9wZXJ0eV9kYXRhW0NSVENfUFJPUF9DT1VOVF07Ci0Jc3RydWN0IGRybV9wcm9w ZXJ0eV9ibG9iICpibG9iX2luZm87Ci0KIAlzdHJ1Y3QgZHB1X2h3X3N0YWdlX2NmZyBzdGFnZV9j Zmc7CiAJc3RydWN0IGRlbnRyeSAqZGVidWdmc19yb290OwogCkBAIC0zMjQsOCArMzE5LDYgQEAg c3RydWN0IGRwdV9jcnRjX3N0YXRlIHsKIAlib29sIGlzX3Bwc3BsaXQ7CiAJc3RydWN0IGRwdV9y ZWN0IGxtX2JvdW5kc1tDUlRDX0RVQUxfTUlYRVJTXTsKIAotCXN0cnVjdCBtc21fcHJvcGVydHlf c3RhdGUgcHJvcGVydHlfc3RhdGU7Ci0Jc3RydWN0IG1zbV9wcm9wZXJ0eV92YWx1ZSBwcm9wZXJ0 eV92YWx1ZXNbQ1JUQ19QUk9QX0NPVU5UXTsKIAl1aW50NjRfdCBpbnB1dF9mZW5jZV90aW1lb3V0 X25zOwogCiAJc3RydWN0IGRwdV9jb3JlX3BlcmZfcGFyYW1zIG5ld19wZXJmOwpAQCAtMzM2LDE1 ICszMjksNiBAQCBzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgewogCWNvbnRhaW5lcl9vZih4LCBzdHJ1 Y3QgZHB1X2NydGNfc3RhdGUsIGJhc2UpCiAKIC8qKgotICogZHB1X2NydGNfZ2V0X3Byb3BlcnR5 IC0gcXVlcnkgaW50ZWdlciB2YWx1ZSBvZiBjcnRjIHByb3BlcnR5Ci0gKiBAUzogUG9pbnRlciB0 byBjcnRjIHN0YXRlCi0gKiBAWDogUHJvcGVydHkgaW5kZXgsIGZyb20gZW51bSBtc21fbWRwX2Ny dGNfcHJvcGVydHkKLSAqIFJldHVybnM6IEludGVnZXIgdmFsdWUgb2YgcmVxdWVzdGVkIHByb3Bl cnR5Ci0gKi8KLSNkZWZpbmUgZHB1X2NydGNfZ2V0X3Byb3BlcnR5KFMsIFgpIFwKLQkoKFMpICYm ICgoWCkgPCBDUlRDX1BST1BfQ09VTlQpID8gKChTKS0+cHJvcGVydHlfdmFsdWVzWyhYKV0udmFs dWUpIDogMCkKLQotLyoqCiAgKiBkcHVfY3J0Y19nZXRfbWl4ZXJfd2lkdGggLSBnZXQgdGhlIG1p eGVyIHdpZHRoCiAgKiBNaXhlciB3aWR0aCB3aWxsIGJlIHNhbWUgYXMgcGFuZWwgd2lkdGgoLzIg Zm9yIHNwbGl0KQogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfZW5jb2Rlci5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29k ZXIuaAppbmRleCBkODUzYWQ5Li4wMzM5ZGZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9lbmNvZGVyLmgKQEAgLTIwLDggKzIwLDYgQEAKICNkZWZpbmUgX19EUFVfRU5D T0RFUl9IX18KIAogI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgotCi0jaW5jbHVkZSAibXNtX3By b3AuaCIKICNpbmNsdWRlICJkcHVfaHdfbWRzcy5oIgogCiAjZGVmaW5lIERQVV9FTkNPREVSX0ZS QU1FX0VWRU5UX0RPTkUJCQlCSVQoMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9wbGFuZS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X3BsYW5lLmMKaW5kZXggMjg3MzVjOC4uZmFmNTkwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X3BsYW5lLmMKQEAgLTIwLDkgKzIwLDggQEAKIAogI2luY2x1ZGUgPGxpbnV4 L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLmg+Ci0jaW5jbHVkZSAibXNtX3By b3AuaCIKLSNpbmNsdWRlICJtc21fZHJ2LmgiCiAKKyNpbmNsdWRlICJtc21fZHJ2LmgiCiAjaW5j bHVkZSAiZHB1X2ttcy5oIgogI2luY2x1ZGUgImRwdV9mb3JtYXRzLmgiCiAjaW5jbHVkZSAiZHB1 X2h3X3NzcHAuaCIKQEAgLTExOSw5ICsxMTgsNiBAQCBzdHJ1Y3QgZHB1X3BsYW5lIHsKIAogCWNv bnN0IHN0cnVjdCBkcHVfc3NwcF9zdWJfYmxrcyAqcGlwZV9zYmxrOwogCWNoYXIgcGlwZV9uYW1l W0RQVV9OQU1FX1NJWkVdOwotCXN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyBwcm9wZXJ0eV9pbmZv OwotCXN0cnVjdCBtc21fcHJvcGVydHlfZGF0YSBwcm9wZXJ0eV9kYXRhW1BMQU5FX1BST1BfQ09V TlRdOwotCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqYmxvYl9pbmZvOwogCiAJLyogZGVidWdm cyByZWxhdGVkIHN0dWZmICovCiAJc3RydWN0IGRlbnRyeSAqZGVidWdmc19yb290OwpAQCAtMTQw MSw3ICsxMzk3LDYgQEAgc3RhdGljIGludCBkcHVfcGxhbmVfc3NwcF9hdG9taWNfdXBkYXRlKHN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCX0KIAogCV9kcHVfcGxhbmVfc2V0X3Fvc19yZW1hcChw bGFuZSk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTQ4Niw4OSArMTQ4MSw2IEBAIHZvaWQgZHB1 X3BsYW5lX3Jlc3RvcmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCiAJZHB1X3BsYW5lX2F0b21p Y191cGRhdGUocGxhbmUsIHBsYW5lLT5zdGF0ZSk7CiB9CiAKLS8qIGhlbHBlciB0byBpbnN0YWxs IHByb3BlcnRpZXMgd2hpY2ggYXJlIGNvbW1vbiB0byBwbGFuZXMgYW5kIGNydGNzICovCi1zdGF0 aWMgdm9pZCBfZHB1X3BsYW5lX2luc3RhbGxfcHJvcGVydGllcyhzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSwKLQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICpjYXRhbG9nLCB1MzIgbWFzdGVyX3BsYW5lX2lk KQotewotCXN0cnVjdCBkcHVfcGxhbmUgKnBkcHUgPSB0b19kcHVfcGxhbmUocGxhbmUpOwotCWlu dCB6cG9zX21heCA9IDI1NTsKLQlpbnQgenBvc19kZWYgPSAwOwotCi0JaWYgKCFwbGFuZSB8fCAh cGRwdSkgewotCQlEUFVfRVJST1IoImludmFsaWQgcGxhbmVcbiIpOwotCQlyZXR1cm47Ci0JfSBl bHNlIGlmICghcGRwdS0+cGlwZV9odyB8fCAhcGRwdS0+cGlwZV9zYmxrKSB7Ci0JCURQVV9FUlJP UigiaW52YWxpZCBwbGFuZSwgcGlwZV9odyAlZCBwaXBlX3NibGsgJWRcbiIsCi0JCQkJcGRwdS0+ cGlwZV9odyAhPSAwLCBwZHB1LT5waXBlX3NibGsgIT0gMCk7Ci0JCXJldHVybjsKLQl9IGVsc2Ug aWYgKCFjYXRhbG9nKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBjYXRhbG9nXG4iKTsKLQkJcmV0 dXJuOwotCX0KLQotCXBkcHUtPmNhdGFsb2cgPSBjYXRhbG9nOwotCi0JaWYgKGRwdV9pc19jdXN0 b21fY2xpZW50KCkpIHsKLQkJaWYgKGNhdGFsb2ctPm1peGVyX2NvdW50ICYmCi0JCQkJY2F0YWxv Zy0+bWl4ZXJbMF0uc2Jsay0+bWF4YmxlbmRzdGFnZXMpIHsKLQkJCXpwb3NfbWF4ID0gY2F0YWxv Zy0+bWl4ZXJbMF0uc2Jsay0+bWF4YmxlbmRzdGFnZXMgLSAxOwotCQkJaWYgKHpwb3NfbWF4ID4g RFBVX1NUQUdFX01BWCAtIERQVV9TVEFHRV8wIC0gMSkKLQkJCQl6cG9zX21heCA9IERQVV9TVEFH RV9NQVggLSBEUFVfU1RBR0VfMCAtIDE7Ci0JCX0KLQl9IGVsc2UgaWYgKHBsYW5lLT50eXBlICE9 IERSTV9QTEFORV9UWVBFX1BSSU1BUlkpIHsKLQkJLyogcmVzZXJ2ZSB6cG9zID09IDAgZm9yIHBy aW1hcnkgcGxhbmVzICovCi0JCXpwb3NfZGVmID0gZHJtX3BsYW5lX2luZGV4KHBsYW5lKSArIDE7 Ci0JfQotfQotCi1zdGF0aWMgaW50IGRwdV9wbGFuZV9hdG9taWNfc2V0X3Byb3BlcnR5KHN0cnVj dCBkcm1fcGxhbmUgKnBsYW5lLAotCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSwgc3Ry dWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksCi0JCXVpbnQ2NF90IHZhbCkKLXsKLQlzdHJ1Y3Qg ZHB1X3BsYW5lICpwZHB1ID0gcGxhbmUgPyB0b19kcHVfcGxhbmUocGxhbmUpIDogTlVMTDsKLQlz dHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpwc3RhdGU7Ci0JaW50IHJldCA9IC1FSU5WQUw7Ci0KLQlE UFVfREVCVUdfUExBTkUocGRwdSwgIlxuIik7Ci0KLQlpZiAoIXBsYW5lKSB7Ci0JCURQVV9FUlJP UigiaW52YWxpZCBwbGFuZVxuIik7Ci0JfSBlbHNlIGlmICghc3RhdGUpIHsKLQkJRFBVX0VSUk9S X1BMQU5FKHBkcHUsICJpbnZhbGlkIHN0YXRlXG4iKTsKLQl9IGVsc2UgewotCQlwc3RhdGUgPSB0 b19kcHVfcGxhbmVfc3RhdGUoc3RhdGUpOwotCQlyZXQgPSBtc21fcHJvcGVydHlfYXRvbWljX3Nl dCgmcGRwdS0+cHJvcGVydHlfaW5mbywKLQkJCQkmcHN0YXRlLT5wcm9wZXJ0eV9zdGF0ZSwgcHJv cGVydHksIHZhbCk7Ci0JfQotCi0JRFBVX0RFQlVHX1BMQU5FKHBkcHUsICIlc1slZF0gPD0gMHgl bGx4IHJldD0lZFxuIiwKLQkJCXByb3BlcnR5LT5uYW1lLCBwcm9wZXJ0eS0+YmFzZS5pZCwgdmFs LCByZXQpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBkcHVfcGxhbmVfYXRvbWlj X2dldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKLQkJY29uc3Qgc3RydWN0IGRy bV9wbGFuZV9zdGF0ZSAqc3RhdGUsCi0JCXN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LCB1 aW50NjRfdCAqdmFsKQotewotCXN0cnVjdCBkcHVfcGxhbmUgKnBkcHUgPSBwbGFuZSA/IHRvX2Rw dV9wbGFuZShwbGFuZSkgOiBOVUxMOwotCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKnBzdGF0ZTsK LQlpbnQgcmV0ID0gLUVJTlZBTDsKLQotCWlmICghcGxhbmUpIHsKLQkJRFBVX0VSUk9SKCJpbnZh bGlkIHBsYW5lXG4iKTsKLQl9IGVsc2UgaWYgKCFzdGF0ZSkgewotCQlEUFVfRVJST1IoImludmFs aWQgc3RhdGVcbiIpOwotCX0gZWxzZSB7Ci0JCURQVV9ERUJVR19QTEFORShwZHB1LCAiXG4iKTsK LQkJcHN0YXRlID0gdG9fZHB1X3BsYW5lX3N0YXRlKHN0YXRlKTsKLQkJcmV0ID0gbXNtX3Byb3Bl cnR5X2F0b21pY19nZXQoJnBkcHUtPnByb3BlcnR5X2luZm8sCi0JCQkJJnBzdGF0ZS0+cHJvcGVy dHlfc3RhdGUsIHByb3BlcnR5LCB2YWwpOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRp YyB2b2lkIGRwdV9wbGFuZV9kZXN0cm95KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQogewogCXN0 cnVjdCBkcHVfcGxhbmUgKnBkcHUgPSBwbGFuZSA/IHRvX2RwdV9wbGFuZShwbGFuZSkgOiBOVUxM OwpAQCAtMTU3OCw5ICsxNDkwLDYgQEAgc3RhdGljIHZvaWQgZHB1X3BsYW5lX2Rlc3Ryb3koc3Ry dWN0IGRybV9wbGFuZSAqcGxhbmUpCiAJaWYgKHBkcHUpIHsKIAkJX2RwdV9wbGFuZV9zZXRfcW9z X2N0cmwocGxhbmUsIGZhbHNlLCBEUFVfUExBTkVfUU9TX1BBTklDX0NUUkwpOwogCi0JCWlmIChw ZHB1LT5ibG9iX2luZm8pCi0JCQlkcm1fcHJvcGVydHlfYmxvYl9wdXQocGRwdS0+YmxvYl9pbmZv KTsKLQkJbXNtX3Byb3BlcnR5X2Rlc3Ryb3koJnBkcHUtPnByb3BlcnR5X2luZm8pOwogCQltdXRl eF9kZXN0cm95KCZwZHB1LT5sb2NrKTsKIAogCQlkcm1fcGxhbmVfaGVscGVyX2Rpc2FibGUocGxh bmUpOwpAQCAtMTU5OCw3ICsxNTA3LDYgQEAgc3RhdGljIHZvaWQgZHB1X3BsYW5lX2Rlc3Ryb3ko c3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCiBzdGF0aWMgdm9pZCBkcHVfcGxhbmVfZGVzdHJveV9z dGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAkJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAq c3RhdGUpCiB7Ci0Jc3RydWN0IGRwdV9wbGFuZSAqcGRwdTsKIAlzdHJ1Y3QgZHB1X3BsYW5lX3N0 YXRlICpwc3RhdGU7CiAKIAlpZiAoIXBsYW5lIHx8ICFzdGF0ZSkgewpAQCAtMTYwNywxOCArMTUx NSwxMyBAQCBzdGF0aWMgdm9pZCBkcHVfcGxhbmVfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSwKIAkJcmV0dXJuOwogCX0KIAotCXBkcHUgPSB0b19kcHVfcGxhbmUocGxhbmUp OwogCXBzdGF0ZSA9IHRvX2RwdV9wbGFuZV9zdGF0ZShzdGF0ZSk7CiAKLQlEUFVfREVCVUdfUExB TkUocGRwdSwgIlxuIik7Ci0KIAkvKiByZW1vdmUgcmVmIGNvdW50IGZvciBmcmFtZSBidWZmZXJz ICovCiAJaWYgKHN0YXRlLT5mYikKIAkJZHJtX2ZyYW1lYnVmZmVyX3B1dChzdGF0ZS0+ZmIpOwog Ci0JLyogZGVzdHJveSB2YWx1ZSBoZWxwZXIgKi8KLQltc21fcHJvcGVydHlfZGVzdHJveV9zdGF0 ZSgmcGRwdS0+cHJvcGVydHlfaW5mbywgcHN0YXRlLAotCQkJJnBzdGF0ZS0+cHJvcGVydHlfc3Rh dGUpOworCWtmcmVlKHBzdGF0ZSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRl ICoKQEAgLTE2MzgsNyArMTU0MSw3IEBAIHN0YXRpYyB2b2lkIGRwdV9wbGFuZV9kZXN0cm95X3N0 YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCiAJb2xkX3N0YXRlID0gdG9fZHB1X3BsYW5l X3N0YXRlKHBsYW5lLT5zdGF0ZSk7CiAJcGRwdSA9IHRvX2RwdV9wbGFuZShwbGFuZSk7Ci0JcHN0 YXRlID0gbXNtX3Byb3BlcnR5X2FsbG9jX3N0YXRlKCZwZHB1LT5wcm9wZXJ0eV9pbmZvKTsKKwlw c3RhdGUgPSBrbWVtZHVwKG9sZF9zdGF0ZSwgc2l6ZW9mKCpvbGRfc3RhdGUpLCBHRlBfS0VSTkVM KTsKIAlpZiAoIXBzdGF0ZSkgewogCQlEUFVfRVJST1JfUExBTkUocGRwdSwgImZhaWxlZCB0byBh bGxvY2F0ZSBzdGF0ZVxuIik7CiAJCXJldHVybiBOVUxMOwpAQCAtMTY0NiwxMCArMTU0OSw2IEBA IHN0YXRpYyB2b2lkIGRwdV9wbGFuZV9kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBs YW5lLAogCiAJRFBVX0RFQlVHX1BMQU5FKHBkcHUsICJcbiIpOwogCi0JLyogZHVwbGljYXRlIHZh bHVlIGhlbHBlciAqLwotCW1zbV9wcm9wZXJ0eV9kdXBsaWNhdGVfc3RhdGUoJnBkcHUtPnByb3Bl cnR5X2luZm8sIG9sZF9zdGF0ZSwgcHN0YXRlLAotCQkJJnBzdGF0ZS0+cHJvcGVydHlfc3RhdGUs IHBzdGF0ZS0+cHJvcGVydHlfdmFsdWVzKTsKLQogCXBzdGF0ZS0+cGVuZGluZyA9IGZhbHNlOwog CiAJX19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUocGxhbmUsICZwc3Rh dGUtPmJhc2UpOwpAQCAtMTY3NiwxNyArMTU3NSwxMiBAQCBzdGF0aWMgdm9pZCBkcHVfcGxhbmVf cmVzZXQoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCiAJCXBsYW5lLT5zdGF0ZSA9IDA7CiAJfQog Ci0JcHN0YXRlID0gbXNtX3Byb3BlcnR5X2FsbG9jX3N0YXRlKCZwZHB1LT5wcm9wZXJ0eV9pbmZv KTsKKwlwc3RhdGUgPSBremFsbG9jKHNpemVvZigqcHN0YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYg KCFwc3RhdGUpIHsKIAkJRFBVX0VSUk9SX1BMQU5FKHBkcHUsICJmYWlsZWQgdG8gYWxsb2NhdGUg c3RhdGVcbiIpOwogCQlyZXR1cm47CiAJfQogCi0JLyogcmVzZXQgdmFsdWUgaGVscGVyICovCi0J bXNtX3Byb3BlcnR5X3Jlc2V0X3N0YXRlKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLCBwc3RhdGUsCi0J CQkmcHN0YXRlLT5wcm9wZXJ0eV9zdGF0ZSwKLQkJCXBzdGF0ZS0+cHJvcGVydHlfdmFsdWVzKTsK LQogCXBzdGF0ZS0+YmFzZS5wbGFuZSA9IHBsYW5lOwogCiAJcGxhbmUtPnN0YXRlID0gJnBzdGF0 ZS0+YmFzZTsKQEAgLTE5MTksOCArMTgxMyw2IEBAIHN0YXRpYyB2b2lkIGRwdV9wbGFuZV9lYXJs eV91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQogCQkudXBkYXRlX3BsYW5lID0g ZHJtX2F0b21pY19oZWxwZXJfdXBkYXRlX3BsYW5lLAogCQkuZGlzYWJsZV9wbGFuZSA9IGRybV9h dG9taWNfaGVscGVyX2Rpc2FibGVfcGxhbmUsCiAJCS5kZXN0cm95ID0gZHB1X3BsYW5lX2Rlc3Ry b3ksCi0JCS5hdG9taWNfc2V0X3Byb3BlcnR5ID0gZHB1X3BsYW5lX2F0b21pY19zZXRfcHJvcGVy dHksCi0JCS5hdG9taWNfZ2V0X3Byb3BlcnR5ID0gZHB1X3BsYW5lX2F0b21pY19nZXRfcHJvcGVy dHksCiAJCS5yZXNldCA9IGRwdV9wbGFuZV9yZXNldCwKIAkJLmF0b21pY19kdXBsaWNhdGVfc3Rh dGUgPSBkcHVfcGxhbmVfZHVwbGljYXRlX3N0YXRlLAogCQkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUg PSBkcHVfcGxhbmVfZGVzdHJveV9zdGF0ZSwKQEAgLTIwNjQsMTMgKzE5NTYsNiBAQCBzdHJ1Y3Qg ZHJtX3BsYW5lICpkcHVfcGxhbmVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCS8qIHN1 Y2Nlc3MhIGZpbmFsaXplIGluaXRpYWxpemF0aW9uICovCiAJZHJtX3BsYW5lX2hlbHBlcl9hZGQo cGxhbmUsICZkcHVfcGxhbmVfaGVscGVyX2Z1bmNzKTsKIAotCW1zbV9wcm9wZXJ0eV9pbml0KCZw ZHB1LT5wcm9wZXJ0eV9pbmZvLCAmcGxhbmUtPmJhc2UsIGRldiwKLQkJCXByaXYtPnBsYW5lX3By b3BlcnR5LCBwZHB1LT5wcm9wZXJ0eV9kYXRhLAotCQkJUExBTkVfUFJPUF9DT1VOVCwgUExBTkVf UFJPUF9CTE9CQ09VTlQsCi0JCQlzaXplb2Yoc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSkpOwotCi0J X2RwdV9wbGFuZV9pbnN0YWxsX3Byb3BlcnRpZXMocGxhbmUsIGttcy0+Y2F0YWxvZywgbWFzdGVy X3BsYW5lX2lkKTsKLQogCS8qIHNhdmUgdXNlciBmcmllbmRseSBwaXBlIG5hbWUgZm9yIGxhdGVy ICovCiAJc25wcmludGYocGRwdS0+cGlwZV9uYW1lLCBEUFVfTkFNRV9TSVpFLCAicGxhbmUldSIs IHBsYW5lLT5iYXNlLmlkKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X3BsYW5lLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxh bmUuaAppbmRleCBhMDZjOGI0Li5mNmZlNmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfcGxhbmUuaApAQCAtMjEsNyArMjEsNiBAQAogCiAjaW5jbHVkZSA8ZHJtL2RybV9j cnRjLmg+CiAKLSNpbmNsdWRlICJtc21fcHJvcC5oIgogI2luY2x1ZGUgImRwdV9rbXMuaCIKICNp bmNsdWRlICJkcHVfaHdfbWRzcy5oIgogI2luY2x1ZGUgImRwdV9od19zc3BwLmgiCkBAIC00NCw4 ICs0Myw2IEBACiAgKi8KIHN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgewogCXN0cnVjdCBkcm1fcGxh bmVfc3RhdGUgYmFzZTsKLQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X3N0YXRlIHByb3BlcnR5X3N0YXRl OwotCXN0cnVjdCBtc21fcHJvcGVydHlfdmFsdWUgcHJvcGVydHlfdmFsdWVzW1BMQU5FX1BST1Bf Q09VTlRdOwogCXN0cnVjdCBtc21fZ2VtX2FkZHJlc3Nfc3BhY2UgKmFzcGFjZTsKIAl2b2lkICpp bnB1dF9mZW5jZTsKIAllbnVtIGRwdV9zdGFnZSBzdGFnZTsKQEAgLTc0LDE1ICs3MSw2IEBAIHN0 cnVjdCBkcHVfbXVsdGlyZWN0X3BsYW5lX3N0YXRlcyB7CiAJY29udGFpbmVyX29mKHgsIHN0cnVj dCBkcHVfcGxhbmVfc3RhdGUsIGJhc2UpCiAKIC8qKgotICogZHB1X3BsYW5lX2dldF9wcm9wZXJ0 eSAtIFF1ZXJ5IGludGVnZXIgdmFsdWUgb2YgcGxhbmUgcHJvcGVydHkKLSAqIEBTOiBQb2ludGVy IHRvIHBsYW5lIHN0YXRlCi0gKiBAWDogUHJvcGVydHkgaW5kZXgsIGZyb20gZW51bSBtc21fbWRw X3BsYW5lX3Byb3BlcnR5Ci0gKiBSZXR1cm5zOiBJbnRlZ2VyIHZhbHVlIG9mIHJlcXVlc3RlZCBw cm9wZXJ0eQotICovCi0jZGVmaW5lIGRwdV9wbGFuZV9nZXRfcHJvcGVydHkoUywgWCkgKChTKSAm JiAoKFgpIDwgUExBTkVfUFJPUF9DT1VOVCkgPyBcCi0JKChTKS0+cHJvcGVydHlfdmFsdWVzWyhY KV0udmFsdWUpIDogMCkKLQotLyoqCiAgKiBkcHVfcGxhbmVfcGlwZSAtIHJldHVybiBzc3BwIGlk ZW50aWZpZXIgZm9yIHRoZSBnaXZlbiBwbGFuZQogICogQHBsYW5lOiAgIFBvaW50ZXIgdG8gRFJN IHBsYW5lIG9iamVjdAogICogUmV0dXJuczogc3NwcCBpZGVudGlmaWVyIG9mIHRoZSBnaXZlbiBw bGFuZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmggYi9kcml2ZXJz L2dwdS9kcm0vbXNtL21zbV9kcnYuaAppbmRleCA4ZTgwYjRiLi5lZGIzOTVkIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNt L21zbV9kcnYuaApAQCAtNzcsMjYgKzc3LDEzIEBAIHN0cnVjdCBtc21fZmlsZV9wcml2YXRlIHsK IH07CiAKIGVudW0gbXNtX21kcF9wbGFuZV9wcm9wZXJ0eSB7Ci0JLyogIyBvZiBibG9iIHByb3Bl cnRpZXMgKi8KLQlQTEFORV9QUk9QX0JMT0JDT1VOVCwKLQogCS8qIHJhbmdlIHByb3BlcnRpZXMg Ki8KLQlQTEFORV9QUk9QX1pQT1MgPSBQTEFORV9QUk9QX0JMT0JDT1VOVCwKKwlQTEFORV9QUk9Q X1pQT1MsCiAKIAkvKiB0b3RhbCAjIG9mIHByb3BlcnRpZXMgKi8KIAlQTEFORV9QUk9QX0NPVU5U CiB9OwogCi1lbnVtIG1zbV9tZHBfY3J0Y19wcm9wZXJ0eSB7Ci0JQ1JUQ19QUk9QX0lORk8sCi0K LQkvKiAjIG9mIGJsb2IgcHJvcGVydGllcyAqLwotCUNSVENfUFJPUF9CTE9CQ09VTlQsCi0KLQkv KiB0b3RhbCAjIG9mIHByb3BlcnRpZXMgKi8KLQlDUlRDX1BST1BfQ09VTlQKLX07Ci0KIHN0cnVj dCBtc21fdmJsYW5rX2N0cmwgewogCXN0cnVjdCBrdGhyZWFkX3dvcmsgd29yazsKIAlzdHJ1Y3Qg bGlzdF9oZWFkIGV2ZW50X2xpc3Q7CkBAIC0zNjQsNyArMzUxLDYgQEAgc3RydWN0IG1zbV9kcm1f cHJpdmF0ZSB7CiAKIAkvKiBQcm9wZXJ0aWVzICovCiAJc3RydWN0IGRybV9wcm9wZXJ0eSAqcGxh bmVfcHJvcGVydHlbUExBTkVfUFJPUF9DT1VOVF07Ci0Jc3RydWN0IGRybV9wcm9wZXJ0eSAqY3J0 Y19wcm9wZXJ0eVtDUlRDX1BST1BfQ09VTlRdOwogCiAJLyogQ29sb3IgcHJvY2Vzc2luZyBwcm9w ZXJ0aWVzIGZvciB0aGUgY3J0YyAqLwogCXN0cnVjdCBkcm1fcHJvcGVydHkgKipjcF9wcm9wZXJ0 eTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX3Byb3AuYyBiL2RyaXZlcnMv Z3B1L2RybS9tc20vbXNtX3Byb3AuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYy N2NkZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9wcm9wLmMKKysrIC9k ZXYvbnVsbApAQCAtMSw2ODggKzAsMCBAQAotLyogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRo ZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKi8K LQotI2luY2x1ZGUgIm1zbV9wcm9wLmgiCi0KLXZvaWQgbXNtX3Byb3BlcnR5X2luaXQoc3RydWN0 IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvLAotCQlzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpiYXNl LAotCQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICoqcHJv cGVydHlfYXJyYXksCi0JCXN0cnVjdCBtc21fcHJvcGVydHlfZGF0YSAqcHJvcGVydHlfZGF0YSwK LQkJdWludDMyX3QgcHJvcGVydHlfY291bnQsCi0JCXVpbnQzMl90IGJsb2JfY291bnQsCi0JCXVp bnQzMl90IHN0YXRlX3NpemUpCi17Ci0JLyogcHJldmVudCBhY2Nlc3MgaWYgYW55IG9mIHRoZXNl IGFyZSBOVUxMICovCi0JaWYgKCFiYXNlIHx8ICFkZXYgfHwgIXByb3BlcnR5X2FycmF5IHx8ICFw cm9wZXJ0eV9kYXRhKSB7Ci0JCXByb3BlcnR5X2NvdW50ID0gMDsKLQkJYmxvYl9jb3VudCA9IDA7 Ci0KLQkJRFJNX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50cywgZm9yY2luZyB6ZXJvIHByb3BlcnRp ZXNcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogY2FuJ3QgaGF2ZSBtb3JlIGJsb2IgcHJvcGVy dGllcyB0aGFuIHRvdGFsIHByb3BlcnRpZXMgKi8KLQlpZiAoYmxvYl9jb3VudCA+IHByb3BlcnR5 X2NvdW50KSB7Ci0JCWJsb2JfY291bnQgPSBwcm9wZXJ0eV9jb3VudDsKLQotCQlEQkcoIkNhcHBp bmcgbnVtYmVyIG9mIGJsb2IgcHJvcGVydGllcyB0byAlZCIsIGJsb2JfY291bnQpOwotCX0KLQot CWlmICghaW5mbykgewotCQlEUk1fRVJST1IoImluZm8gcG9pbnRlciBpcyBOVUxMXG4iKTsKLQl9 IGVsc2UgewotCQlpbmZvLT5iYXNlID0gYmFzZTsKLQkJaW5mby0+ZGV2ID0gZGV2OwotCQlpbmZv LT5wcm9wZXJ0eV9hcnJheSA9IHByb3BlcnR5X2FycmF5OwotCQlpbmZvLT5wcm9wZXJ0eV9kYXRh ID0gcHJvcGVydHlfZGF0YTsKLQkJaW5mby0+cHJvcGVydHlfY291bnQgPSBwcm9wZXJ0eV9jb3Vu dDsKLQkJaW5mby0+YmxvYl9jb3VudCA9IGJsb2JfY291bnQ7Ci0JCWluZm8tPmluc3RhbGxfcmVx dWVzdCA9IDA7Ci0JCWluZm8tPmluc3RhbGxfY291bnQgPSAwOwotCQlpbmZvLT5yZWNlbnRfaWR4 ID0gMDsKLQkJaW5mby0+aXNfYWN0aXZlID0gZmFsc2U7Ci0JCWluZm8tPnN0YXRlX3NpemUgPSBz dGF0ZV9zaXplOwotCQlpbmZvLT5zdGF0ZV9jYWNoZV9zaXplID0gMDsKLQkJbXV0ZXhfaW5pdCgm aW5mby0+cHJvcGVydHlfbG9jayk7Ci0KLQkJbWVtc2V0KHByb3BlcnR5X2RhdGEsCi0JCQkJMCwK LQkJCQlzaXplb2Yoc3RydWN0IG1zbV9wcm9wZXJ0eV9kYXRhKSAqCi0JCQkJcHJvcGVydHlfY291 bnQpOwotCX0KLX0KLQotdm9pZCBtc21fcHJvcGVydHlfZGVzdHJveShzdHJ1Y3QgbXNtX3Byb3Bl cnR5X2luZm8gKmluZm8pCi17Ci0JaWYgKCFpbmZvKQotCQlyZXR1cm47Ci0KLQkvKiBmcmVlIHN0 YXRlIGNhY2hlICovCi0Jd2hpbGUgKGluZm8tPnN0YXRlX2NhY2hlX3NpemUgPiAwKQotCQlrZnJl ZShpbmZvLT5zdGF0ZV9jYWNoZVstLShpbmZvLT5zdGF0ZV9jYWNoZV9zaXplKV0pOwotCi0JbXV0 ZXhfZGVzdHJveSgmaW5mby0+cHJvcGVydHlfbG9jayk7Ci19Ci0KLWludCBtc21fcHJvcGVydHlf cG9wX2RpcnR5KHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbywKLQkJc3RydWN0IG1zbV9w cm9wZXJ0eV9zdGF0ZSAqcHJvcGVydHlfc3RhdGUpCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqaXRl bTsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKCFpbmZvIHx8ICFwcm9wZXJ0eV9zdGF0ZSB8fCAhcHJv cGVydHlfc3RhdGUtPnZhbHVlcykgewotCQlEUk1fRVJST1IoImludmFsaWQgYXJndW1lbnQocylc biIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZpbmZvLT5wcm9wZXJ0 eV9sb2NrKTsKLQlpZiAobGlzdF9lbXB0eSgmcHJvcGVydHlfc3RhdGUtPmRpcnR5X2xpc3QpKSB7 Ci0JCXJjID0gLUVBR0FJTjsKLQl9IGVsc2UgewotCQlpdGVtID0gcHJvcGVydHlfc3RhdGUtPmRp cnR5X2xpc3QubmV4dDsKLQkJbGlzdF9kZWxfaW5pdChpdGVtKTsKLQkJcmMgPSBjb250YWluZXJf b2YoaXRlbSwgc3RydWN0IG1zbV9wcm9wZXJ0eV92YWx1ZSwgZGlydHlfbm9kZSkKLQkJCS0gcHJv cGVydHlfc3RhdGUtPnZhbHVlczsKLQkJRFJNX0RFQlVHX0tNUygicHJvcGVydHkgJWQgZGlydHlc biIsIHJjKTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZpbmZvLT5wcm9wZXJ0eV9sb2NrKTsKLQotCXJl dHVybiByYzsKLX0KLQotLyoqCi0gKiBfbXNtX3Byb3BlcnR5X3NldF9kaXJ0eV9ub19sb2NrIC0g ZmxhZyBnaXZlbiBwcm9wZXJ0eSBhcyBiZWluZyBkaXJ0eQotICogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gZG9lc24ndCBtdXRleCBwcm90ZWN0IHRoZQot ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcnR5IGxpbmtlZCBsaXN0Lgot ICogQGluZm86IFBvaW50ZXIgdG8gcHJvcGVydHkgaW5mbyBjb250YWluZXIgc3RydWN0Ci0gKiBA cHJvcGVydHlfc3RhdGU6IFBvaW50ZXIgdG8gcHJvcGVydHkgc3RhdGUgY29udGFpbmVyIHN0cnVj dAotICogQHByb3BlcnR5X2lkeDogUHJvcGVydHkgaW5kZXgKLSAqLwotc3RhdGljIHZvaWQgX21z bV9wcm9wZXJ0eV9zZXRfZGlydHlfbm9fbG9jaygKLQkJc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZv ICppbmZvLAotCQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X3N0YXRlICpwcm9wZXJ0eV9zdGF0ZSwKLQkJ dWludDMyX3QgcHJvcGVydHlfaWR4KQotewotCWlmICghaW5mbyB8fCAhcHJvcGVydHlfc3RhdGUg fHwgIXByb3BlcnR5X3N0YXRlLT52YWx1ZXMgfHwKLQkJCXByb3BlcnR5X2lkeCA+PSBpbmZvLT5w cm9wZXJ0eV9jb3VudCkgewotCQlEUk1fRVJST1IoImludmFsaWQgYXJndW1lbnQocyksIGlkeCAl dVxuIiwgcHJvcGVydHlfaWR4KTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIGF2b2lkIHJlLWluc2Vy dGluZyBpZiBhbHJlYWR5IGRpcnR5ICovCi0JaWYgKCFsaXN0X2VtcHR5KCZwcm9wZXJ0eV9zdGF0 ZS0+dmFsdWVzW3Byb3BlcnR5X2lkeF0uZGlydHlfbm9kZSkpIHsKLQkJRFJNX0RFQlVHX0tNUygi cHJvcGVydHkgJXUgYWxyZWFkeSBkaXJ0eVxuIiwgcHJvcGVydHlfaWR4KTsKLQkJcmV0dXJuOwot CX0KLQotCWxpc3RfYWRkX3RhaWwoJnByb3BlcnR5X3N0YXRlLT52YWx1ZXNbcHJvcGVydHlfaWR4 XS5kaXJ0eV9ub2RlLAotCQkJJnByb3BlcnR5X3N0YXRlLT5kaXJ0eV9saXN0KTsKLX0KLQotLyoq Ci0gKiBfbXNtX3Byb3BlcnR5X2luc3RhbGxfaW50ZWdlciAtIGluc3RhbGwgc3RhbmRhcmQgZHJt IHJhbmdlIHByb3BlcnR5Ci0gKiBAaW5mbzogUG9pbnRlciB0byBwcm9wZXJ0eSBpbmZvIGNvbnRh aW5lciBzdHJ1Y3QKLSAqIEBuYW1lOiBQcm9wZXJ0eSBuYW1lCi0gKiBAZmxhZ3M6IE90aGVyIHBy b3BlcnR5IHR5cGUgZmxhZ3MsIGUuZy4gRFJNX01PREVfUFJPUF9JTU1VVEFCTEUKLSAqIEBtaW46 IE1pbiBwcm9wZXJ0eSB2YWx1ZQotICogQG1heDogTWF4IHByb3BlcnR5IHZhbHVlCi0gKiBAaW5p dDogRGVmYXVsdCBQcm9wZXJ0eSB2YWx1ZQotICogQHByb3BlcnR5X2lkeDogUHJvcGVydHkgaW5k ZXgKLSAqIEBmb3JjZV9kaXJ0eTogV2hldGhlciBvciBub3QgdG8gZmlsdGVyICdkaXJ0eScgc3Rh dHVzIG9uIHVuY2hhbmdlZCB2YWx1ZXMKLSAqLwotc3RhdGljIHZvaWQgX21zbV9wcm9wZXJ0eV9p bnN0YWxsX2ludGVnZXIoc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvLAotCQljb25zdCBj aGFyICpuYW1lLCBpbnQgZmxhZ3MsIHVpbnQ2NF90IG1pbiwgdWludDY0X3QgbWF4LAotCQl1aW50 NjRfdCBpbml0LCB1aW50MzJfdCBwcm9wZXJ0eV9pZHgsIGJvb2wgZm9yY2VfZGlydHkpCi17Ci0J c3RydWN0IGRybV9wcm9wZXJ0eSAqKnByb3A7Ci0KLQlpZiAoIWluZm8pCi0JCXJldHVybjsKLQot CSsraW5mby0+aW5zdGFsbF9yZXF1ZXN0OwotCi0JaWYgKCFuYW1lIHx8IChwcm9wZXJ0eV9pZHgg Pj0gaW5mby0+cHJvcGVydHlfY291bnQpKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBhcmd1bWVu dChzKSwgJXNcbiIsIG5hbWUgPyBuYW1lIDogIm51bGwiKTsKLQl9IGVsc2UgewotCQlwcm9wID0g JmluZm8tPnByb3BlcnR5X2FycmF5W3Byb3BlcnR5X2lkeF07Ci0JCS8qCi0JCSAqIFByb3BlcnRp ZXMgbmVlZCB0byBiZSBhdHRhY2hlZCB0byBlYWNoIGRybSBvYmplY3QgdGhhdAotCQkgKiB1c2Vz IHRoZW0sIGJ1dCBvbmx5IG5lZWQgdG8gYmUgY3JlYXRlZCBvbmNlCi0JCSAqLwotCQlpZiAoKnBy b3AgPT0gMCkgewotCQkJKnByb3AgPSBkcm1fcHJvcGVydHlfY3JlYXRlX3JhbmdlKGluZm8tPmRl diwKLQkJCQkJZmxhZ3MsIG5hbWUsIG1pbiwgbWF4KTsKLQkJCWlmICgqcHJvcCA9PSAwKQotCQkJ CURSTV9FUlJPUigiY3JlYXRlICVzIHByb3BlcnR5IGZhaWxlZFxuIiwgbmFtZSk7Ci0JCX0KLQot CQkvKiBzYXZlIGluaXQgdmFsdWUgZm9yIGxhdGVyICovCi0JCWluZm8tPnByb3BlcnR5X2RhdGFb cHJvcGVydHlfaWR4XS5kZWZhdWx0X3ZhbHVlID0gaW5pdDsKLQkJaW5mby0+cHJvcGVydHlfZGF0 YVtwcm9wZXJ0eV9pZHhdLmZvcmNlX2RpcnR5ID0gZm9yY2VfZGlydHk7Ci0KLQkJLyogYWx3YXlz IGF0dGFjaCBwcm9wZXJ0eSwgaWYgY3JlYXRlZCAqLwotCQlpZiAoKnByb3ApIHsKLQkJCWRybV9v YmplY3RfYXR0YWNoX3Byb3BlcnR5KGluZm8tPmJhc2UsICpwcm9wLCBpbml0KTsKLQkJCSsraW5m by0+aW5zdGFsbF9jb3VudDsKLQkJfQotCX0KLX0KLQotdm9pZCBtc21fcHJvcGVydHlfaW5zdGFs bF9yYW5nZShzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmluZm8sCi0JCWNvbnN0IGNoYXIgKm5h bWUsIGludCBmbGFncywgdWludDY0X3QgbWluLCB1aW50NjRfdCBtYXgsCi0JCXVpbnQ2NF90IGlu aXQsIHVpbnQzMl90IHByb3BlcnR5X2lkeCkKLXsKLQlfbXNtX3Byb3BlcnR5X2luc3RhbGxfaW50 ZWdlcihpbmZvLCBuYW1lLCBmbGFncywKLQkJCW1pbiwgbWF4LCBpbml0LCBwcm9wZXJ0eV9pZHgs IGZhbHNlKTsKLX0KLQotdm9pZCBtc21fcHJvcGVydHlfaW5zdGFsbF92b2xhdGlsZV9yYW5nZShz dHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmluZm8sCi0JCWNvbnN0IGNoYXIgKm5hbWUsIGludCBm bGFncywgdWludDY0X3QgbWluLCB1aW50NjRfdCBtYXgsCi0JCXVpbnQ2NF90IGluaXQsIHVpbnQz Ml90IHByb3BlcnR5X2lkeCkKLXsKLQlfbXNtX3Byb3BlcnR5X2luc3RhbGxfaW50ZWdlcihpbmZv LCBuYW1lLCBmbGFncywKLQkJCW1pbiwgbWF4LCBpbml0LCBwcm9wZXJ0eV9pZHgsIHRydWUpOwot fQotCi12b2lkIG1zbV9wcm9wZXJ0eV9pbnN0YWxsX3JvdGF0aW9uKHN0cnVjdCBtc21fcHJvcGVy dHlfaW5mbyAqaW5mbywKLQkJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsIHVuc2lnbmVkIGludCBy b3RhdGlvbiwKLQkJdW5zaWduZWQgaW50IHN1cHBvcnRlZF9yb3RhdGlvbnMsIHVpbnQzMl90IHBy b3BlcnR5X2lkeCkKLXsKLQlpZiAoIWluZm8gfHwgIXBsYW5lKQotCQlyZXR1cm47Ci0KLQkrK2lu Zm8tPmluc3RhbGxfcmVxdWVzdDsKLQotCWlmIChwcm9wZXJ0eV9pZHggPj0gaW5mby0+cHJvcGVy dHlfY291bnQpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIHByb3BlcnR5IGluZGV4ICVkXG4iLCBw cm9wZXJ0eV9pZHgpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGRybV9wbGFuZV9jcmVhdGVfcm90 YXRpb25fcHJvcGVydHkocGxhbmUsCi0JCQlyb3RhdGlvbiwgc3VwcG9ydGVkX3JvdGF0aW9ucykp IHsKLQkJRFJNX0VSUk9SKCJjcmVhdGUgcm90YXRpb24gcHJvcGVydHkgZmFpbGVkXG4iKTsKLQkJ cmV0dXJuOwotCX0KLQotCWlmIChwbGFuZS0+cm90YXRpb25fcHJvcGVydHkpIHsKLQkJaW5mby0+ cHJvcGVydHlfYXJyYXlbcHJvcGVydHlfaWR4XSA9IHBsYW5lLT5yb3RhdGlvbl9wcm9wZXJ0eTsK LQotCQkvKiBzYXZlIGluaXQgdmFsdWUgZm9yIGxhdGVyICovCi0JCWluZm8tPnByb3BlcnR5X2Rh dGFbcHJvcGVydHlfaWR4XS5kZWZhdWx0X3ZhbHVlID0gcm90YXRpb247Ci0JCWluZm8tPnByb3Bl cnR5X2RhdGFbcHJvcGVydHlfaWR4XS5mb3JjZV9kaXJ0eSA9IGZhbHNlOwotCi0JCSsraW5mby0+ aW5zdGFsbF9jb3VudDsKLQl9Ci19Ci0KLXZvaWQgbXNtX3Byb3BlcnR5X2luc3RhbGxfZW51bShz dHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmluZm8sCi0JCWNvbnN0IGNoYXIgKm5hbWUsIGludCBm bGFncywgaW50IGlzX2JpdG1hc2ssCi0JCWNvbnN0IHN0cnVjdCBkcm1fcHJvcF9lbnVtX2xpc3Qg KnZhbHVlcywgaW50IG51bV92YWx1ZXMsCi0JCXVpbnQzMl90IHByb3BlcnR5X2lkeCkKLXsKLQlz dHJ1Y3QgZHJtX3Byb3BlcnR5ICoqcHJvcDsKLQotCWlmICghaW5mbykKLQkJcmV0dXJuOwotCi0J KytpbmZvLT5pbnN0YWxsX3JlcXVlc3Q7Ci0KLQlpZiAoIW5hbWUgfHwgIXZhbHVlcyB8fCAhbnVt X3ZhbHVlcyB8fAotCQkJKHByb3BlcnR5X2lkeCA+PSBpbmZvLT5wcm9wZXJ0eV9jb3VudCkpIHsK LQkJRFJNX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50KHMpLCAlc1xuIiwgbmFtZSA/IG5hbWUgOiAi bnVsbCIpOwotCX0gZWxzZSB7Ci0JCXByb3AgPSAmaW5mby0+cHJvcGVydHlfYXJyYXlbcHJvcGVy dHlfaWR4XTsKLQkJLyoKLQkJICogUHJvcGVydGllcyBuZWVkIHRvIGJlIGF0dGFjaGVkIHRvIGVh Y2ggZHJtIG9iamVjdCB0aGF0Ci0JCSAqIHVzZXMgdGhlbSwgYnV0IG9ubHkgbmVlZCB0byBiZSBj cmVhdGVkIG9uY2UKLQkJICovCi0JCWlmICgqcHJvcCA9PSAwKSB7Ci0JCQkvKiAnYml0bWFzaycg aXMgYSBzcGVjaWFsIHR5cGUgb2YgJ2VudW0nICovCi0JCQlpZiAoaXNfYml0bWFzaykKLQkJCQkq cHJvcCA9IGRybV9wcm9wZXJ0eV9jcmVhdGVfYml0bWFzayhpbmZvLT5kZXYsCi0JCQkJCQlEUk1f TU9ERV9QUk9QX0JJVE1BU0sgfCBmbGFncywKLQkJCQkJCW5hbWUsIHZhbHVlcywgbnVtX3ZhbHVl cywgLTEpOwotCQkJZWxzZQotCQkJCSpwcm9wID0gZHJtX3Byb3BlcnR5X2NyZWF0ZV9lbnVtKGlu Zm8tPmRldiwKLQkJCQkJCURSTV9NT0RFX1BST1BfRU5VTSB8IGZsYWdzLAotCQkJCQkJbmFtZSwg dmFsdWVzLCBudW1fdmFsdWVzKTsKLQkJCWlmICgqcHJvcCA9PSAwKQotCQkJCURSTV9FUlJPUigi Y3JlYXRlICVzIHByb3BlcnR5IGZhaWxlZFxuIiwgbmFtZSk7Ci0JCX0KLQotCQkvKiBzYXZlIGlu aXQgdmFsdWUgZm9yIGxhdGVyICovCi0JCWluZm8tPnByb3BlcnR5X2RhdGFbcHJvcGVydHlfaWR4 XS5kZWZhdWx0X3ZhbHVlID0gMDsKLQkJaW5mby0+cHJvcGVydHlfZGF0YVtwcm9wZXJ0eV9pZHhd LmZvcmNlX2RpcnR5ID0gZmFsc2U7Ci0KLQkJLyogc2VsZWN0IGZpcnN0IGRlZmluZWQgdmFsdWUg Zm9yIGVudW1zICovCi0JCWlmICghaXNfYml0bWFzaykKLQkJCWluZm8tPnByb3BlcnR5X2RhdGFb cHJvcGVydHlfaWR4XS5kZWZhdWx0X3ZhbHVlID0KLQkJCQl2YWx1ZXMtPnR5cGU7Ci0KLQkJLyog YWx3YXlzIGF0dGFjaCBwcm9wZXJ0eSwgaWYgY3JlYXRlZCAqLwotCQlpZiAoKnByb3ApIHsKLQkJ CWRybV9vYmplY3RfYXR0YWNoX3Byb3BlcnR5KGluZm8tPmJhc2UsICpwcm9wLAotCQkJCQlpbmZv LT5wcm9wZXJ0eV9kYXRhCi0JCQkJCVtwcm9wZXJ0eV9pZHhdLmRlZmF1bHRfdmFsdWUpOwotCQkJ KytpbmZvLT5pbnN0YWxsX2NvdW50OwotCQl9Ci0JfQotfQotCi12b2lkIG1zbV9wcm9wZXJ0eV9p bnN0YWxsX2Jsb2Ioc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvLAotCQljb25zdCBjaGFy ICpuYW1lLCBpbnQgZmxhZ3MsIHVpbnQzMl90IHByb3BlcnR5X2lkeCkKLXsKLQlzdHJ1Y3QgZHJt X3Byb3BlcnR5ICoqcHJvcDsKLQotCWlmICghaW5mbykKLQkJcmV0dXJuOwotCi0JKytpbmZvLT5p bnN0YWxsX3JlcXVlc3Q7Ci0KLQlpZiAoIW5hbWUgfHwgKHByb3BlcnR5X2lkeCA+PSBpbmZvLT5i bG9iX2NvdW50KSkgewotCQlEUk1fRVJST1IoImludmFsaWQgYXJndW1lbnQocyksICVzXG4iLCBu YW1lID8gbmFtZSA6ICJudWxsIik7Ci0JfSBlbHNlIHsKLQkJcHJvcCA9ICZpbmZvLT5wcm9wZXJ0 eV9hcnJheVtwcm9wZXJ0eV9pZHhdOwotCQkvKgotCQkgKiBQcm9wZXJ0aWVzIG5lZWQgdG8gYmUg YXR0YWNoZWQgdG8gZWFjaCBkcm0gb2JqZWN0IHRoYXQKLQkJICogdXNlcyB0aGVtLCBidXQgb25s eSBuZWVkIHRvIGJlIGNyZWF0ZWQgb25jZQotCQkgKi8KLQkJaWYgKCpwcm9wID09IDApIHsKLQkJ CS8qIHVzZSAnY3JlYXRlJyBmb3IgYmxvYiBwcm9wZXJ0eSBwbGFjZSBob2xkZXIgKi8KLQkJCSpw cm9wID0gZHJtX3Byb3BlcnR5X2NyZWF0ZShpbmZvLT5kZXYsCi0JCQkJCURSTV9NT0RFX1BST1Bf QkxPQiB8IGZsYWdzLCBuYW1lLCAwKTsKLQkJCWlmICgqcHJvcCA9PSAwKQotCQkJCURSTV9FUlJP UigiY3JlYXRlICVzIHByb3BlcnR5IGZhaWxlZFxuIiwgbmFtZSk7Ci0JCX0KLQotCQkvKiBzYXZl IGluaXQgdmFsdWUgZm9yIGxhdGVyICovCi0JCWluZm8tPnByb3BlcnR5X2RhdGFbcHJvcGVydHlf aWR4XS5kZWZhdWx0X3ZhbHVlID0gMDsKLQkJaW5mby0+cHJvcGVydHlfZGF0YVtwcm9wZXJ0eV9p ZHhdLmZvcmNlX2RpcnR5ID0gdHJ1ZTsKLQotCQkvKiBhbHdheXMgYXR0YWNoIHByb3BlcnR5LCBp ZiBjcmVhdGVkICovCi0JCWlmICgqcHJvcCkgewotCQkJZHJtX29iamVjdF9hdHRhY2hfcHJvcGVy dHkoaW5mby0+YmFzZSwgKnByb3AsIC0xKTsKLQkJCSsraW5mby0+aW5zdGFsbF9jb3VudDsKLQkJ fQotCX0KLX0KLQotaW50IG1zbV9wcm9wZXJ0eV9pbnN0YWxsX2dldF9zdGF0dXMoc3RydWN0IG1z bV9wcm9wZXJ0eV9pbmZvICppbmZvKQotewotCWludCByYyA9IC1FTk9NRU07Ci0KLQlpZiAoaW5m byAmJiAoaW5mby0+aW5zdGFsbF9yZXF1ZXN0ID09IGluZm8tPmluc3RhbGxfY291bnQpKQotCQly YyA9IDA7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBtc21fcHJvcGVydHlfaW5kZXgoc3RydWN0 IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvLAotCQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0 eSkKLXsKLQl1aW50MzJfdCBjb3VudDsKLQlpbnQzMl90IGlkeDsKLQlpbnQgcmMgPSAtRUlOVkFM OwotCi0JaWYgKCFpbmZvIHx8ICFwcm9wZXJ0eSkgewotCQlEUk1fRVJST1IoImludmFsaWQgYXJn dW1lbnQocylcbiIpOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIExpbmVhciBzZWFyY2gsIGJ1dCBz dGFydCBmcm9tIGxhc3QgZm91bmQgaW5kZXguIFRoaXMgd2lsbAotCQkgKiBoZWxwIGlmIGFueSBz aW5nbGUgcHJvcGVydHkgaXMgYWNjZXNzZWQgbXVsdGlwbGUgdGltZXMgaW4gYQotCQkgKiByb3cu IElkZWFsbHksIHdlIGNvdWxkIGtlZXAgYSBsaXN0IG9mIHByb3BlcnRpZXMgc29ydGVkIGluCi0J CSAqIHRoZSBvcmRlciBvZiBtb3N0IHJlY2VudCBhY2Nlc3MsIGJ1dCB0aGF0IG1heSBiZSBvdmVy a2lsbAotCQkgKiBmb3Igbm93LgotCQkgKi8KLQkJbXV0ZXhfbG9jaygmaW5mby0+cHJvcGVydHlf bG9jayk7Ci0JCWlkeCA9IGluZm8tPnJlY2VudF9pZHg7Ci0JCWNvdW50ID0gaW5mby0+cHJvcGVy dHlfY291bnQ7Ci0JCXdoaWxlIChjb3VudCkgewotCQkJLS1jb3VudDsKLQotCQkJLyogc3RvcCBz ZWFyY2hpbmcgb24gbWF0Y2ggKi8KLQkJCWlmIChpbmZvLT5wcm9wZXJ0eV9hcnJheVtpZHhdID09 IHByb3BlcnR5KSB7Ci0JCQkJaW5mby0+cmVjZW50X2lkeCA9IGlkeDsKLQkJCQlyYyA9IGlkeDsK LQkJCQlicmVhazsKLQkJCX0KLQotCQkJLyogbW92ZSB0byBuZXh0IHZhbGlkIGluZGV4ICovCi0J CQlpZiAoLS1pZHggPCAwKQotCQkJCWlkeCA9IGluZm8tPnByb3BlcnR5X2NvdW50IC0gMTsKLQkJ fQotCQltdXRleF91bmxvY2soJmluZm8tPnByb3BlcnR5X2xvY2spOwotCX0KLQotCXJldHVybiBy YzsKLX0KLQotaW50IG1zbV9wcm9wZXJ0eV9zZXRfZGlydHkoc3RydWN0IG1zbV9wcm9wZXJ0eV9p bmZvICppbmZvLAotCQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X3N0YXRlICpwcm9wZXJ0eV9zdGF0ZSwK LQkJaW50IHByb3BlcnR5X2lkeCkKLXsKLQlpZiAoIWluZm8gfHwgIXByb3BlcnR5X3N0YXRlIHx8 ICFwcm9wZXJ0eV9zdGF0ZS0+dmFsdWVzKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBhcmd1bWVu dChzKVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQltdXRleF9sb2NrKCZpbmZvLT5wcm9w ZXJ0eV9sb2NrKTsKLQlfbXNtX3Byb3BlcnR5X3NldF9kaXJ0eV9ub19sb2NrKGluZm8sIHByb3Bl cnR5X3N0YXRlLCBwcm9wZXJ0eV9pZHgpOwotCW11dGV4X3VubG9jaygmaW5mby0+cHJvcGVydHlf bG9jayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBtc21fcHJvcGVydHlfYXRvbWljX3NldChzdHJ1 Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmluZm8sCi0JCXN0cnVjdCBtc21fcHJvcGVydHlfc3RhdGUg KnByb3BlcnR5X3N0YXRlLAotCQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwgdWludDY0 X3QgdmFsKQotewotCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqYmxvYjsKLQlpbnQgcHJvcGVy dHlfaWR4LCByYyA9IC1FSU5WQUw7Ci0KLQlwcm9wZXJ0eV9pZHggPSBtc21fcHJvcGVydHlfaW5k ZXgoaW5mbywgcHJvcGVydHkpOwotCWlmICghaW5mbyB8fCAhcHJvcGVydHlfc3RhdGUgfHwKLQkJ CShwcm9wZXJ0eV9pZHggPT0gLUVJTlZBTCkgfHwgIXByb3BlcnR5X3N0YXRlLT52YWx1ZXMpIHsK LQkJRFJNX0RFQlVHKCJpbnZhbGlkIGFyZ3VtZW50KHMpXG4iKTsKLQl9IGVsc2UgewotCQkvKiBl eHRyYSBoYW5kbGluZyBmb3IgaW5jb21pbmcgcHJvcGVydGllcyAqLwotCQltdXRleF9sb2NrKCZp bmZvLT5wcm9wZXJ0eV9sb2NrKTsKLQkJaWYgKChwcm9wZXJ0eS0+ZmxhZ3MgJiBEUk1fTU9ERV9Q Uk9QX0JMT0IpICYmCi0JCQkocHJvcGVydHlfaWR4IDwgaW5mby0+YmxvYl9jb3VudCkpIHsKLQkJ CS8qIERSTSBsb29rdXAgYWxzbyB0YWtlcyBhIHJlZmVyZW5jZSAqLwotCQkJYmxvYiA9IGRybV9w cm9wZXJ0eV9sb29rdXBfYmxvYihpbmZvLT5kZXYsCi0JCQkJKHVpbnQzMl90KXZhbCk7Ci0JCQlp ZiAoIWJsb2IpIHsKLQkJCQlEUk1fRVJST1IoImJsb2Igbm90IGZvdW5kXG4iKTsKLQkJCQl2YWwg PSAwOwotCQkJfSBlbHNlIHsKLQkJCQlEQkcoIkJsb2IgJXUgc2F2ZWQiLCBibG9iLT5iYXNlLmlk KTsKLQkJCQl2YWwgPSBibG9iLT5iYXNlLmlkOwotCi0JCQkJLyogc2F2ZSBibG9iIC0gbmVlZCB0 byBjbGVhciBwcmV2aW91cyByZWYgKi8KLQkJCQlpZiAocHJvcGVydHlfc3RhdGUtPnZhbHVlc1tw cm9wZXJ0eV9pZHhdLmJsb2IpCi0JCQkJCWRybV9wcm9wZXJ0eV9ibG9iX3B1dCgKLQkJCQkJCXBy b3BlcnR5X3N0YXRlLT52YWx1ZXNbCi0JCQkJCQlwcm9wZXJ0eV9pZHhdLmJsb2IpOwotCQkJCXBy b3BlcnR5X3N0YXRlLT52YWx1ZXNbcHJvcGVydHlfaWR4XS5ibG9iID0KLQkJCQkJYmxvYjsKLQkJ CX0KLQkJfQotCi0JCS8qIHVwZGF0ZSB2YWx1ZSBhbmQgZmxhZyBhcyBkaXJ0eSAqLwotCQlpZiAo cHJvcGVydHlfc3RhdGUtPnZhbHVlc1twcm9wZXJ0eV9pZHhdLnZhbHVlICE9IHZhbCB8fAotCQkJ CWluZm8tPnByb3BlcnR5X2RhdGFbcHJvcGVydHlfaWR4XS5mb3JjZV9kaXJ0eSkgewotCQkJcHJv cGVydHlfc3RhdGUtPnZhbHVlc1twcm9wZXJ0eV9pZHhdLnZhbHVlID0gdmFsOwotCQkJX21zbV9w cm9wZXJ0eV9zZXRfZGlydHlfbm9fbG9jayhpbmZvLCBwcm9wZXJ0eV9zdGF0ZSwKLQkJCQkJcHJv cGVydHlfaWR4KTsKLQotCQkJREJHKCIlcyAtICVsbGQiLCBwcm9wZXJ0eS0+bmFtZSwgdmFsKTsK LQkJfQotCQltdXRleF91bmxvY2soJmluZm8tPnByb3BlcnR5X2xvY2spOwotCQlyYyA9IDA7Ci0J fQotCi0JcmV0dXJuIHJjOwotfQotCi1pbnQgbXNtX3Byb3BlcnR5X2F0b21pY19nZXQoc3RydWN0 IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvLAotCQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X3N0YXRlICpw cm9wZXJ0eV9zdGF0ZSwKLQkJc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksIHVpbnQ2NF90 ICp2YWwpCi17Ci0JaW50IHByb3BlcnR5X2lkeCwgcmMgPSAtRUlOVkFMOwotCi0JcHJvcGVydHlf aWR4ID0gbXNtX3Byb3BlcnR5X2luZGV4KGluZm8sIHByb3BlcnR5KTsKLQlpZiAoIWluZm8gfHwg KHByb3BlcnR5X2lkeCA9PSAtRUlOVkFMKSB8fAotCQkJIXByb3BlcnR5X3N0YXRlLT52YWx1ZXMg fHwgIXZhbCkgewotCQlEUk1fREVCVUcoIkludmFsaWQgYXJndW1lbnQocylcbiIpOwotCX0gZWxz ZSB7Ci0JCW11dGV4X2xvY2soJmluZm8tPnByb3BlcnR5X2xvY2spOwotCQkqdmFsID0gcHJvcGVy dHlfc3RhdGUtPnZhbHVlc1twcm9wZXJ0eV9pZHhdLnZhbHVlOwotCQltdXRleF91bmxvY2soJmlu Zm8tPnByb3BlcnR5X2xvY2spOwotCQlyYyA9IDA7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi12 b2lkICptc21fcHJvcGVydHlfYWxsb2Nfc3RhdGUoc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvICpp bmZvKQotewotCXZvaWQgKnN0YXRlID0gTlVMTDsKLQotCWlmICghaW5mbykgewotCQlEUk1fRVJS T1IoImludmFsaWQgcHJvcGVydHkgaW5mb1xuIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCW11 dGV4X2xvY2soJmluZm8tPnByb3BlcnR5X2xvY2spOwotCWlmIChpbmZvLT5zdGF0ZV9jYWNoZV9z aXplKQotCQlzdGF0ZSA9IGluZm8tPnN0YXRlX2NhY2hlWy0tKGluZm8tPnN0YXRlX2NhY2hlX3Np emUpXTsKLQltdXRleF91bmxvY2soJmluZm8tPnByb3BlcnR5X2xvY2spOwotCi0JaWYgKCFzdGF0 ZSAmJiBpbmZvLT5zdGF0ZV9zaXplKQotCQlzdGF0ZSA9IGttYWxsb2MoaW5mby0+c3RhdGVfc2l6 ZSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIXN0YXRlKQotCQlEUk1fRVJST1IoImZhaWxlZCB0byBh bGxvY2F0ZSBzdGF0ZVxuIik7Ci0KLQlyZXR1cm4gc3RhdGU7Ci19Ci0KLS8qKgotICogX21zbV9w cm9wZXJ0eV9mcmVlX3N0YXRlIC0gaGVscGVyIGZ1bmN0aW9uIGZvciBmcmVlaW5nIGxvY2FsIHN0 YXRlIG9iamVjdHMKLSAqIEBpbmZvOiBQb2ludGVyIHRvIHByb3BlcnR5IGluZm8gY29udGFpbmVy IHN0cnVjdAotICogQHN0OiBQb2ludGVyIHRvIHN0YXRlIG9iamVjdAotICovCi1zdGF0aWMgdm9p ZCBfbXNtX3Byb3BlcnR5X2ZyZWVfc3RhdGUoc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZv LCB2b2lkICpzdCkKLXsKLQlpZiAoIWluZm8gfHwgIXN0KQotCQlyZXR1cm47Ci0KLQltdXRleF9s b2NrKCZpbmZvLT5wcm9wZXJ0eV9sb2NrKTsKLQlpZiAoaW5mby0+c3RhdGVfY2FjaGVfc2l6ZSA8 IE1TTV9QUk9QX1NUQVRFX0NBQ0hFX1NJWkUpCi0JCWluZm8tPnN0YXRlX2NhY2hlWyhpbmZvLT5z dGF0ZV9jYWNoZV9zaXplKSsrXSA9IHN0OwotCWVsc2UKLQkJa2ZyZWUoc3QpOwotCW11dGV4X3Vu bG9jaygmaW5mby0+cHJvcGVydHlfbG9jayk7Ci19Ci0KLXZvaWQgbXNtX3Byb3BlcnR5X3Jlc2V0 X3N0YXRlKHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbywgdm9pZCAqc3RhdGUsCi0JCXN0 cnVjdCBtc21fcHJvcGVydHlfc3RhdGUgKnByb3BlcnR5X3N0YXRlLAotCQlzdHJ1Y3QgbXNtX3By b3BlcnR5X3ZhbHVlICpwcm9wZXJ0eV92YWx1ZXMpCi17Ci0JdWludDMyX3QgaTsKLQotCWlmICgh aW5mbykgewotCQlEUk1fRVJST1IoImludmFsaWQgcHJvcGVydHkgaW5mb1xuIik7Ci0JCXJldHVy bjsKLQl9Ci0KLQlpZiAoc3RhdGUpCi0JCW1lbXNldChzdGF0ZSwgMCwgaW5mby0+c3RhdGVfc2l6 ZSk7Ci0KLQlpZiAocHJvcGVydHlfc3RhdGUpIHsKLQkJcHJvcGVydHlfc3RhdGUtPnByb3BlcnR5 X2NvdW50ID0gaW5mby0+cHJvcGVydHlfY291bnQ7Ci0JCXByb3BlcnR5X3N0YXRlLT52YWx1ZXMg PSBwcm9wZXJ0eV92YWx1ZXM7Ci0JCUlOSVRfTElTVF9IRUFEKCZwcm9wZXJ0eV9zdGF0ZS0+ZGly dHlfbGlzdCk7Ci0JfQotCi0JLyoKLQkgKiBBc3NpZ24gZGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMu IFRoaXMgaGVscGVyIGlzIG1vc3RseSB1c2VkCi0JICogdG8gaW5pdGlhbGl6ZSBuZXdseSBjcmVh dGVkIHN0YXRlIG9iamVjdHMuCi0JICovCi0JaWYgKHByb3BlcnR5X3ZhbHVlcykKLQkJZm9yIChp ID0gMDsgaSA8IGluZm8tPnByb3BlcnR5X2NvdW50OyArK2kpIHsKLQkJCXByb3BlcnR5X3ZhbHVl c1tpXS52YWx1ZSA9Ci0JCQkJaW5mby0+cHJvcGVydHlfZGF0YVtpXS5kZWZhdWx0X3ZhbHVlOwot CQkJcHJvcGVydHlfdmFsdWVzW2ldLmJsb2IgPSBOVUxMOwotCQkJSU5JVF9MSVNUX0hFQUQoJnBy b3BlcnR5X3ZhbHVlc1tpXS5kaXJ0eV9ub2RlKTsKLQkJfQotfQotCi12b2lkIG1zbV9wcm9wZXJ0 eV9kdXBsaWNhdGVfc3RhdGUoc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvLAotCQl2b2lk ICpvbGRfc3RhdGUsIHZvaWQgKnN0YXRlLAotCQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X3N0YXRlICpw cm9wZXJ0eV9zdGF0ZSwKLQkJc3RydWN0IG1zbV9wcm9wZXJ0eV92YWx1ZSAqcHJvcGVydHlfdmFs dWVzKQotewotCXVpbnQzMl90IGk7Ci0KLQlpZiAoIWluZm8gfHwgIW9sZF9zdGF0ZSB8fCAhc3Rh dGUpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50KHMpXG4iKTsKLQkJcmV0dXJuOwot CX0KLQotCW1lbWNweShzdGF0ZSwgb2xkX3N0YXRlLCBpbmZvLT5zdGF0ZV9zaXplKTsKLQotCWlm ICghcHJvcGVydHlfc3RhdGUpCi0JCXJldHVybjsKLQotCUlOSVRfTElTVF9IRUFEKCZwcm9wZXJ0 eV9zdGF0ZS0+ZGlydHlfbGlzdCk7Ci0JcHJvcGVydHlfc3RhdGUtPnZhbHVlcyA9IHByb3BlcnR5 X3ZhbHVlczsKLQotCWlmIChwcm9wZXJ0eV9zdGF0ZS0+dmFsdWVzKQotCQkvKiBhZGQgcmVmIGNv dW50IGZvciBibG9icyBhbmQgaW5pdGlhbGl6ZSBkaXJ0eSBub2RlcyAqLwotCQlmb3IgKGkgPSAw OyBpIDwgaW5mby0+cHJvcGVydHlfY291bnQ7ICsraSkgewotCQkJaWYgKHByb3BlcnR5X3N0YXRl LT52YWx1ZXNbaV0uYmxvYikKLQkJCQlkcm1fcHJvcGVydHlfYmxvYl9nZXQoCi0JCQkJCQlwcm9w ZXJ0eV9zdGF0ZS0+dmFsdWVzW2ldLmJsb2IpOwotCQkJSU5JVF9MSVNUX0hFQUQoJnByb3BlcnR5 X3N0YXRlLT52YWx1ZXNbaV0uZGlydHlfbm9kZSk7Ci0JCX0KLX0KLQotdm9pZCBtc21fcHJvcGVy dHlfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmluZm8sIHZvaWQgKnN0 YXRlLAotCQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X3N0YXRlICpwcm9wZXJ0eV9zdGF0ZSkKLXsKLQl1 aW50MzJfdCBpOwotCi0JaWYgKCFpbmZvIHx8ICFzdGF0ZSkgewotCQlEUk1fRVJST1IoImludmFs aWQgYXJndW1lbnQocylcbiIpOwotCQlyZXR1cm47Ci0JfQotCWlmIChwcm9wZXJ0eV9zdGF0ZSAm JiBwcm9wZXJ0eV9zdGF0ZS0+dmFsdWVzKSB7Ci0JCS8qIHJlbW92ZSByZWYgY291bnQgZm9yIGJs b2JzICovCi0JCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5wcm9wZXJ0eV9jb3VudDsgKytpKQotCQkJ aWYgKHByb3BlcnR5X3N0YXRlLT52YWx1ZXNbaV0uYmxvYikgewotCQkJCWRybV9wcm9wZXJ0eV9i bG9iX3B1dCgKLQkJCQkJCXByb3BlcnR5X3N0YXRlLT52YWx1ZXNbaV0uYmxvYik7Ci0JCQkJcHJv cGVydHlfc3RhdGUtPnZhbHVlc1tpXS5ibG9iID0gTlVMTDsKLQkJCX0KLQl9Ci0KLQlfbXNtX3By b3BlcnR5X2ZyZWVfc3RhdGUoaW5mbywgc3RhdGUpOwotfQotCi12b2lkICptc21fcHJvcGVydHlf Z2V0X2Jsb2Ioc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvLAotCQlzdHJ1Y3QgbXNtX3By b3BlcnR5X3N0YXRlICpwcm9wZXJ0eV9zdGF0ZSwKLQkJc2l6ZV90ICpieXRlX2xlbiwKLQkJdWlu dDMyX3QgcHJvcGVydHlfaWR4KQotewotCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqYmxvYjsK LQlzaXplX3QgbGVuID0gMDsKLQl2b2lkICpyYyA9IDA7Ci0KLQlpZiAoIWluZm8gfHwgIXByb3Bl cnR5X3N0YXRlIHx8ICFwcm9wZXJ0eV9zdGF0ZS0+dmFsdWVzIHx8Ci0JCQkocHJvcGVydHlfaWR4 ID49IGluZm8tPmJsb2JfY291bnQpKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBhcmd1bWVudChz KVxuIik7Ci0JfSBlbHNlIHsKLQkJYmxvYiA9IHByb3BlcnR5X3N0YXRlLT52YWx1ZXNbcHJvcGVy dHlfaWR4XS5ibG9iOwotCQlpZiAoYmxvYikgewotCQkJbGVuID0gYmxvYi0+bGVuZ3RoOwotCQkJ cmMgPSAmYmxvYi0+ZGF0YTsKLQkJfQotCX0KLQotCWlmIChieXRlX2xlbikKLQkJKmJ5dGVfbGVu ID0gbGVuOwotCi0JcmV0dXJuIHJjOwotfQotCi1pbnQgbXNtX3Byb3BlcnR5X3NldF9ibG9iKHN0 cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbywKLQkJc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9i ICoqYmxvYl9yZWZlcmVuY2UsCi0JCXZvaWQgKmJsb2JfZGF0YSwKLQkJc2l6ZV90IGJ5dGVfbGVu LAotCQl1aW50MzJfdCBwcm9wZXJ0eV9pZHgpCi17Ci0Jc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9i ICpibG9iID0gTlVMTDsKLQlpbnQgcmMgPSAtRUlOVkFMOwotCi0JaWYgKCFpbmZvIHx8ICFibG9i X3JlZmVyZW5jZSB8fCAocHJvcGVydHlfaWR4ID49IGluZm8tPmJsb2JfY291bnQpKSB7Ci0JCURS TV9FUlJPUigiaW52YWxpZCBhcmd1bWVudChzKVxuIik7Ci0JfSBlbHNlIHsKLQkJLyogY3JlYXRl IGJsb2IgKi8KLQkJaWYgKGJsb2JfZGF0YSAmJiBieXRlX2xlbikgewotCQkJYmxvYiA9IGRybV9w cm9wZXJ0eV9jcmVhdGVfYmxvYihpbmZvLT5kZXYsCi0JCQkJCWJ5dGVfbGVuLAotCQkJCQlibG9i X2RhdGEpOwotCQkJaWYgKElTX0VSUl9PUl9OVUxMKGJsb2IpKSB7Ci0JCQkJcmMgPSBQVFJfRVJS KGJsb2IpOwotCQkJCURSTV9FUlJPUigiZmFpbGVkIHRvIGNyZWF0ZSBibG9iLCAlZFxuIiwgcmMp OwotCQkJCWdvdG8gZXhpdDsKLQkJCX0KLQkJfQotCi0JCS8qIHVwZGF0ZSBkcm0gb2JqZWN0ICov Ci0JCXJjID0gZHJtX29iamVjdF9wcm9wZXJ0eV9zZXRfdmFsdWUoaW5mby0+YmFzZSwKLQkJCQlp bmZvLT5wcm9wZXJ0eV9hcnJheVtwcm9wZXJ0eV9pZHhdLAotCQkJCWJsb2IgPyBibG9iLT5iYXNl LmlkIDogMCk7Ci0JCWlmIChyYykgewotCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gc2V0IGJsb2Ig dG8gcHJvcGVydHlcbiIpOwotCQkJaWYgKGJsb2IpCi0JCQkJZHJtX3Byb3BlcnR5X2Jsb2JfcHV0 KGJsb2IpOwotCQkJZ290byBleGl0OwotCQl9Ci0KLQkJLyogdXBkYXRlIGxvY2FsIHJlZmVyZW5j ZSAqLwotCQlpZiAoKmJsb2JfcmVmZXJlbmNlKQotCQkJZHJtX3Byb3BlcnR5X2Jsb2JfcHV0KCpi bG9iX3JlZmVyZW5jZSk7Ci0JCSpibG9iX3JlZmVyZW5jZSA9IGJsb2I7Ci0JfQotCi1leGl0Ogot CXJldHVybiByYzsKLX0KLQotaW50IG1zbV9wcm9wZXJ0eV9zZXRfcHJvcGVydHkoc3RydWN0IG1z bV9wcm9wZXJ0eV9pbmZvICppbmZvLAotCQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X3N0YXRlICpwcm9w ZXJ0eV9zdGF0ZSwKLQkJdWludDMyX3QgcHJvcGVydHlfaWR4LAotCQl1aW50NjRfdCB2YWwpCi17 Ci0JaW50IHJjID0gLUVJTlZBTDsKLQotCWlmICghaW5mbyB8fCAocHJvcGVydHlfaWR4ID49IGlu Zm8tPnByb3BlcnR5X2NvdW50KSB8fAotCQkJcHJvcGVydHlfaWR4IDwgaW5mby0+YmxvYl9jb3Vu dCB8fAotCQkJIXByb3BlcnR5X3N0YXRlIHx8ICFwcm9wZXJ0eV9zdGF0ZS0+dmFsdWVzKSB7Ci0J CURSTV9FUlJPUigiaW52YWxpZCBhcmd1bWVudChzKVxuIik7Ci0JfSBlbHNlIHsKLQkJc3RydWN0 IGRybV9wcm9wZXJ0eSAqZHJtX3Byb3A7Ci0KLQkJbXV0ZXhfbG9jaygmaW5mby0+cHJvcGVydHlf bG9jayk7Ci0KLQkJLyogdXBkYXRlIGNhY2hlZCB2YWx1ZSAqLwotCQlwcm9wZXJ0eV9zdGF0ZS0+ dmFsdWVzW3Byb3BlcnR5X2lkeF0udmFsdWUgPSB2YWw7Ci0KLQkJLyogdXBkYXRlIHRoZSBuZXcg ZGVmYXVsdCB2YWx1ZSBmb3IgaW1tdXRhYmxlcyAqLwotCQlkcm1fcHJvcCA9IGluZm8tPnByb3Bl cnR5X2FycmF5W3Byb3BlcnR5X2lkeF07Ci0JCWlmIChkcm1fcHJvcC0+ZmxhZ3MgJiBEUk1fTU9E RV9QUk9QX0lNTVVUQUJMRSkKLQkJCWluZm8tPnByb3BlcnR5X2RhdGFbcHJvcGVydHlfaWR4XS5k ZWZhdWx0X3ZhbHVlID0gdmFsOwotCi0JCW11dGV4X3VubG9jaygmaW5mby0+cHJvcGVydHlfbG9j ayk7Ci0KLQkJLyogdXBkYXRlIGRybSBvYmplY3QgKi8KLQkJcmMgPSBkcm1fb2JqZWN0X3Byb3Bl cnR5X3NldF92YWx1ZShpbmZvLT5iYXNlLCBkcm1fcHJvcCwgdmFsKTsKLQkJaWYgKHJjKQotCQkJ RFJNX0VSUk9SKCJmYWlsZWQgc2V0IHByb3BlcnR5IHZhbHVlLCBpZHggJWQgcmMgJWRcbiIsCi0J CQkJCXByb3BlcnR5X2lkeCwgcmMpOwotCi0JfQotCi0JcmV0dXJuIHJjOwotfQotCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9wcm9wLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNt L21zbV9wcm9wLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3ODU5NTUuLjAwMDAw MDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fcHJvcC5oCisrKyAvZGV2L251bGwKQEAg LTEsNDM4ICswLDAgQEAKLS8qIENvcHlyaWdodCAoYykgMjAxNi0yMDE4LCBUaGUgTGludXggRm91 bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9u IDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpZm5kZWYg X01TTV9QUk9QX0hfCi0jZGVmaW5lIF9NU01fUFJPUF9IXwotCi0jaW5jbHVkZSA8bGludXgvbGlz dC5oPgotI2luY2x1ZGUgIm1zbV9kcnYuaCIKLQotI2RlZmluZSBNU01fUFJPUF9TVEFURV9DQUNI RV9TSVpFCTIKLQotLyoqCi0gKiBzdHJ1Y3QgbXNtX3Byb3BlcnR5X2RhdGEgLSBvcGFxdWUgc3Ry dWN0dXJlIGZvciB0cmFja2luZyBwZXIKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRy bS1vYmplY3QgcGVyIHByb3BlcnR5IHN0dWZmCi0gKiBAZGVmYXVsdF92YWx1ZTogRGVmYXVsdCBw cm9wZXJ0eSB2YWx1ZSBmb3IgdGhpcyBkcm0gb2JqZWN0Ci0gKiBAZm9yY2VfZGlydHk6IEFsd2F5 cyBkaXJ0eSBwcm9wZXJ0eSBvbiBpbmNvbWluZyBzZXRzLCByYXRoZXIgdGhhbiBjaGVja2luZwot ICogICAgICAgICAgICAgICBmb3IgbW9kaWZpZWQgdmFsdWVzCi0gKi8KLXN0cnVjdCBtc21fcHJv cGVydHlfZGF0YSB7Ci0JdWludDY0X3QgZGVmYXVsdF92YWx1ZTsKLQlib29sIGZvcmNlX2RpcnR5 OwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgbXNtX3Byb3BlcnR5X3ZhbHVlIC0gb3BhcXVlIHN0cnVj dHVyZSBmb3IgdHJhY2tpbmcgcGVyCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJt LW9iamVjdCBwZXIgcHJvcGVydHkgc3R1ZmYKLSAqIEB2YWx1ZTogQ3VycmVudCBwcm9wZXJ0eSB2 YWx1ZSBmb3IgdGhpcyBkcm0gb2JqZWN0Ci0gKiBAYmxvYjogUG9pbnRlciB0byBhc3NvY2lhdGVk IGJsb2IgZGF0YSwgaWYgYXZhaWxhYmxlCi0gKiBAZGlydHlfbm9kZTogTGlua2VkIGxpc3Qgbm9k ZSB0byB0cmFjayBpZiBwcm9wZXJ0eSBpcyBkaXJ0eSBvciBub3QKLSAqLwotc3RydWN0IG1zbV9w cm9wZXJ0eV92YWx1ZSB7Ci0JdWludDY0X3QgdmFsdWU7Ci0Jc3RydWN0IGRybV9wcm9wZXJ0eV9i bG9iICpibG9iOwotCXN0cnVjdCBsaXN0X2hlYWQgZGlydHlfbm9kZTsKLX07Ci0KLS8qKgotICog c3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvOiBTdHJ1Y3R1cmUgZm9yIHByb3BlcnR5L3N0YXRlIGhl bHBlciBmdW5jdGlvbnMKLSAqIEBiYXNlOiBQb2ludGVyIHRvIGJhc2UgZHJtIG9iamVjdCAocGxh bmUvY3J0Yy9ldGMuKQotICogQGRldjogUG9pbnRlciB0byBkcm0gZGV2aWNlIG9iamVjdAotICog QHByb3BlcnR5X2FycmF5OiBQb2ludGVyIHRvIGFycmF5IGZvciBzdG9yaW5nIGNyZWF0ZWQgcHJv cGVydHkgb2JqZWN0cwotICogQHByb3BlcnR5X2RhdGE6IFBvaW50ZXIgdG8gYXJyYXkgZm9yIHN0 b3JpbmcgcHJpdmF0ZSBwcm9wZXJ0eSBkYXRhCi0gKiBAcHJvcGVydHlfY291bnQ6IFRvdGFsIG51 bWJlciBvZiBwcm9wZXJ0aWVzCi0gKiBAYmxvYl9jb3VudDogVG90YWwgbnVtYmVyIG9mIGJsb2Ig cHJvcGVydGllcywgc2hvdWxkIGJlIDw9IGNvdW50Ci0gKiBAaW5zdGFsbF9yZXF1ZXN0OiBUb3Rh bCBudW1iZXIgb2YgcHJvcGVydHkgJ2luc3RhbGwnIHJlcXVlc3RzCi0gKiBAaW5zdGFsbF9jb3Vu dDogVG90YWwgbnVtYmVyIG9mIHN1Y2Nlc3NmdWwgJ2luc3RhbGwnIHJlcXVlc3RzCi0gKiBAcmVj ZW50X2lkeDogSW5kZXggb2YgcHJvcGVydHkgbW9zdCByZWNlbnRseSBhY2Nlc3NlZCBieSBzZXQv Z2V0Ci0gKiBAaXNfYWN0aXZlOiBXaGV0aGVyIG9yIG5vdCBkcm0gY29tcG9uZW50IHByb3BlcnRp ZXMgYXJlICdhY3RpdmUnCi0gKiBAc3RhdGVfY2FjaGU6IENhY2hlIG9mIGxvY2FsIHN0YXRlcywg dG8gcHJldmVudCBhbGxvYy9mcmVlIHRocmFzaGluZwotICogQHN0YXRlX3NpemU6IFNpemUgb2Yg bG9jYWwgc3RhdGUgc3RydWN0dXJlcwotICogQHN0YXRlX2NhY2hlX3NpemU6IE51bWJlciBvZiBz dGF0ZSBzdHJ1Y3R1cmVzIGN1cnJlbnRseSBzdG9yZWQgaW4gc3RhdGVfY2FjaGUKLSAqIEBwcm9w ZXJ0eV9sb2NrOiBNdXRleCB0byBwcm90ZWN0IGxvY2FsIHZhcmlhYmxlcwotICovCi1zdHJ1Y3Qg bXNtX3Byb3BlcnR5X2luZm8gewotCXN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKmJhc2U7Ci0Jc3Ry dWN0IGRybV9kZXZpY2UgKmRldjsKLQotCXN0cnVjdCBkcm1fcHJvcGVydHkgKipwcm9wZXJ0eV9h cnJheTsKLQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X2RhdGEgKnByb3BlcnR5X2RhdGE7Ci0JdWludDMy X3QgcHJvcGVydHlfY291bnQ7Ci0JdWludDMyX3QgYmxvYl9jb3VudDsKLQl1aW50MzJfdCBpbnN0 YWxsX3JlcXVlc3Q7Ci0JdWludDMyX3QgaW5zdGFsbF9jb3VudDsKLQotCWludDMyX3QgcmVjZW50 X2lkeDsKLQotCWJvb2wgaXNfYWN0aXZlOwotCi0Jdm9pZCAqc3RhdGVfY2FjaGVbTVNNX1BST1Bf U1RBVEVfQ0FDSEVfU0laRV07Ci0JdWludDMyX3Qgc3RhdGVfc2l6ZTsKLQlpbnQzMl90IHN0YXRl X2NhY2hlX3NpemU7Ci0Jc3RydWN0IG11dGV4IHByb3BlcnR5X2xvY2s7Ci19OwotCi0vKioKLSAq IHN0cnVjdCBtc21fcHJvcGVydHlfc3RhdGUgLSBTdHJ1Y3R1cmUgZm9yIGxvY2FsIHByb3BlcnR5 IHN0YXRlIGluZm9ybWF0aW9uCi0gKiBAcHJvcGVydHlfY291bnQ6IFRvdGFsIG51bWJlciBvZiBw cm9wZXJ0aWVzCi0gKiBAdmFsdWVzOiBQb2ludGVyIHRvIGFycmF5IG9mIG1zbV9wcm9wZXJ0eV92 YWx1ZSBvYmplY3RzCi0gKiBAZGlydHlfbGlzdDogTGlzdCBvZiBhbGwgcHJvcGVydGllcyB0aGF0 IGhhdmUgYmVlbiAnYXRvbWljX3NldCcgYnV0IG5vdAotICogICAgICAgICAgICAgIHlldCBjbGVh cmVkIHdpdGggJ21zbV9wcm9wZXJ0eV9wb3BfZGlydHknCi0gKi8KLXN0cnVjdCBtc21fcHJvcGVy dHlfc3RhdGUgewotCXVpbnQzMl90IHByb3BlcnR5X2NvdW50OwotCXN0cnVjdCBtc21fcHJvcGVy dHlfdmFsdWUgKnZhbHVlczsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGRpcnR5X2xpc3Q7Ci19OwotCi0v KioKLSAqIG1zbV9wcm9wZXJ0eV9pbmRleF90b19kcm1fcHJvcGVydHkgLSBnZXQgZHJtIHByb3Bl cnR5IHN0cnVjdCBmcm9tIHByb3AgaW5kZXgKLSAqIEBpbmZvOiBQb2ludGVyIHRvIHByb3BlcnR5 IGluZm8gY29udGFpbmVyIHN0cnVjdAotICogQHByb3BlcnR5X2lkeDogUHJvcGVydHkgaW5kZXgK LSAqIFJldHVybnM6IGRybV9wcm9wZXJ0eSBwb2ludGVyIGFzc29jaWF0ZWQgd2l0aCBwcm9wZXJ0 eSBpbmRleAotICovCi1zdGF0aWMgaW5saW5lCi1zdHJ1Y3QgZHJtX3Byb3BlcnR5ICptc21fcHJv cGVydHlfaW5kZXhfdG9fZHJtX3Byb3BlcnR5KAotCQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8g KmluZm8sIHVpbnQzMl90IHByb3BlcnR5X2lkeCkKLXsKLQlpZiAoIWluZm8gfHwgcHJvcGVydHlf aWR4ID49IGluZm8tPnByb3BlcnR5X2NvdW50KQotCQlyZXR1cm4gTlVMTDsKLQotCXJldHVybiBp bmZvLT5wcm9wZXJ0eV9hcnJheVtwcm9wZXJ0eV9pZHhdOwotfQotCi0vKioKLSAqIG1zbV9wcm9w ZXJ0eV9nZXRfZGVmYXVsdCAtIHF1ZXJ5IGRlZmF1bHQgdmFsdWUgb2YgYSBwcm9wZXJ0eQotICog QGluZm86IFBvaW50ZXIgdG8gcHJvcGVydHkgaW5mbyBjb250YWluZXIgc3RydWN0Ci0gKiBAcHJv cGVydHlfaWR4OiBQcm9wZXJ0eSBpbmRleAotICogUmV0dXJuczogRGVmYXVsdCB2YWx1ZSBmb3Ig c3BlY2lmaWVkIHByb3BlcnR5Ci0gKi8KLXN0YXRpYyBpbmxpbmUKLXVpbnQ2NF90IG1zbV9wcm9w ZXJ0eV9nZXRfZGVmYXVsdChzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmluZm8sCi0JCXVpbnQz Ml90IHByb3BlcnR5X2lkeCkKLXsKLQl1aW50NjRfdCByYyA9IDA7Ci0KLQlpZiAoIWluZm8pCi0J CXJldHVybiAwOwotCi0JbXV0ZXhfbG9jaygmaW5mby0+cHJvcGVydHlfbG9jayk7Ci0JaWYgKHBy b3BlcnR5X2lkeCA8IGluZm8tPnByb3BlcnR5X2NvdW50KQotCQlyYyA9IGluZm8tPnByb3BlcnR5 X2RhdGFbcHJvcGVydHlfaWR4XS5kZWZhdWx0X3ZhbHVlOwotCW11dGV4X3VubG9jaygmaW5mby0+ cHJvcGVydHlfbG9jayk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogbXNtX3Byb3BlcnR5 X3NldF9pc19hY3RpdmUgLSBzZXQgb3ZlcmFsbCAnYWN0aXZlJyBzdGF0dXMgZm9yIGFsbCBwcm9w ZXJ0aWVzCi0gKiBAaW5mbzogUG9pbnRlciB0byBwcm9wZXJ0eSBpbmZvIGNvbnRhaW5lciBzdHJ1 Y3QKLSAqIEBpc19hY3RpdmU6IE5ldyAnaXMgYWN0aXZlJyBzdGF0dXMKLSAqLwotc3RhdGljIGlu bGluZQotdm9pZCBtc21fcHJvcGVydHlfc2V0X2lzX2FjdGl2ZShzdHJ1Y3QgbXNtX3Byb3BlcnR5 X2luZm8gKmluZm8sIGJvb2wgaXNfYWN0aXZlKQotewotCWlmIChpbmZvKSB7Ci0JCW11dGV4X2xv Y2soJmluZm8tPnByb3BlcnR5X2xvY2spOwotCQlpbmZvLT5pc19hY3RpdmUgPSBpc19hY3RpdmU7 Ci0JCW11dGV4X3VubG9jaygmaW5mby0+cHJvcGVydHlfbG9jayk7Ci0JfQotfQotCi0vKioKLSAq IG1zbV9wcm9wZXJ0eV9nZXRfaXNfYWN0aXZlIC0gcXVlcnkgcHJvcGVydHkgJ2lzIGFjdGl2ZScg c3RhdHVzCi0gKiBAaW5mbzogUG9pbnRlciB0byBwcm9wZXJ0eSBpbmZvIGNvbnRhaW5lciBzdHJ1 Y3QKLSAqIFJldHVybnM6IEN1cnJlbnQgJ2lzIGFjdGl2ZSdzIHN0YXR1cwotICovCi1zdGF0aWMg aW5saW5lCi1ib29sIG1zbV9wcm9wZXJ0eV9nZXRfaXNfYWN0aXZlKHN0cnVjdCBtc21fcHJvcGVy dHlfaW5mbyAqaW5mbykKLXsKLQlib29sIHJjID0gZmFsc2U7Ci0KLQlpZiAoaW5mbykgewotCQlt dXRleF9sb2NrKCZpbmZvLT5wcm9wZXJ0eV9sb2NrKTsKLQkJcmMgPSBpbmZvLT5pc19hY3RpdmU7 Ci0JCW11dGV4X3VubG9jaygmaW5mby0+cHJvcGVydHlfbG9jayk7Ci0JfQotCi0JcmV0dXJuIHJj OwotfQotCi0vKioKLSAqIG1zbV9wcm9wZXJ0eV9wb3BfZGlydHkgLSBkZXRlcm1pbmUgbmV4dCBk aXJ0eSBwcm9wZXJ0eSBhbmQgY2xlYXIKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICBpdHMg ZGlydHkgZmxhZwotICogQGluZm86IFBvaW50ZXIgdG8gcHJvcGVydHkgaW5mbyBjb250YWluZXIg c3RydWN0Ci0gKiBAcHJvcGVydHlfc3RhdGU6IFBvaW50ZXIgdG8gcHJvcGVydHkgc3RhdGUgY29u dGFpbmVyIHN0cnVjdAotICogUmV0dXJuczogVmFsaWQgbXNtIHByb3BlcnR5IGluZGV4IG9uIHN1 Y2Nlc3MsCi0gKiAgICAgICAgICAtRUFHQUlOIGlmIG5vIGRpcnR5IHByb3BlcnRpZXMgYXJlIGF2 YWlsYWJsZQotICogICAgICAgICAgUHJvcGVydHkgaW5kaWNpZXMgcmV0dXJuZWQgZnJvbSB0aGlz IGZ1bmN0aW9uIGFyZSBzaW1pbGFyCi0gKiAgICAgICAgICB0byB0aG9zZSByZXR1cm5lZCBieSB0 aGUgbXNtX3Byb3BlcnR5X2luZGV4IGZ1bmN0aW9uLgotICovCi1pbnQgbXNtX3Byb3BlcnR5X3Bv cF9kaXJ0eShzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmluZm8sCi0JCXN0cnVjdCBtc21fcHJv cGVydHlfc3RhdGUgKnByb3BlcnR5X3N0YXRlKTsKLQotLyoqCi0gKiBtc21fcHJvcGVydHlfaW5p dCAtIGluaXRpYWxpemUgcHJvcGVydHkgaW5mbyBzdHJ1Y3R1cmUKLSAqIEBpbmZvOiBQb2ludGVy IHRvIHByb3BlcnR5IGluZm8gY29udGFpbmVyIHN0cnVjdAotICogQGJhc2U6IFBvaW50ZXIgdG8g YmFzZSBkcm0gb2JqZWN0IChwbGFuZS9jcnRjL2V0Yy4pCi0gKiBAZGV2OiBQb2ludGVyIHRvIGRy bSBkZXZpY2Ugb2JqZWN0Ci0gKiBAcHJvcGVydHlfYXJyYXk6IFBvaW50ZXIgdG8gYXJyYXkgZm9y IHN0b3JpbmcgY3JlYXRlZCBwcm9wZXJ0eSBvYmplY3RzCi0gKiBAcHJvcGVydHlfZGF0YTogUG9p bnRlciB0byBhcnJheSBmb3Igc3RvcmluZyBwcml2YXRlIHByb3BlcnR5IGRhdGEKLSAqIEBwcm9w ZXJ0eV9jb3VudDogVG90YWwgbnVtYmVyIG9mIHByb3BlcnRpZXMKLSAqIEBibG9iX2NvdW50OiBU b3RhbCBudW1iZXIgb2YgYmxvYiBwcm9wZXJ0aWVzLCBzaG91bGQgYmUgPD0gY291bnQKLSAqIEBz dGF0ZV9zaXplOiBTaXplIG9mIGxvY2FsIHN0YXRlIG9iamVjdAotICovCi12b2lkIG1zbV9wcm9w ZXJ0eV9pbml0KHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbywKLQkJc3RydWN0IGRybV9t b2RlX29iamVjdCAqYmFzZSwKLQkJc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJc3RydWN0IGRy bV9wcm9wZXJ0eSAqKnByb3BlcnR5X2FycmF5LAotCQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X2RhdGEg KnByb3BlcnR5X2RhdGEsCi0JCXVpbnQzMl90IHByb3BlcnR5X2NvdW50LAotCQl1aW50MzJfdCBi bG9iX2NvdW50LAotCQl1aW50MzJfdCBzdGF0ZV9zaXplKTsKLQotLyoqCi0gKiBtc21fcHJvcGVy dHlfZGVzdHJveSAtIGRlc3Ryb3kgaGVscGVyIGluZm8gc3RydWN0dXJlCi0gKgotICogQGluZm86 IFBvaW50ZXIgdG8gcHJvcGVydHkgaW5mbyBjb250YWluZXIgc3RydWN0Ci0gKi8KLXZvaWQgbXNt X3Byb3BlcnR5X2Rlc3Ryb3koc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvKTsKLQotLyoq Ci0gKiBtc21fcHJvcGVydHlfaW5zdGFsbF9yYW5nZSAtIGluc3RhbGwgc3RhbmRhcmQgZHJtIHJh bmdlIHByb3BlcnR5Ci0gKiBAaW5mbzogUG9pbnRlciB0byBwcm9wZXJ0eSBpbmZvIGNvbnRhaW5l ciBzdHJ1Y3QKLSAqIEBuYW1lOiBQcm9wZXJ0eSBuYW1lCi0gKiBAZmxhZ3M6IE90aGVyIHByb3Bl cnR5IHR5cGUgZmxhZ3MsIGUuZy4gRFJNX01PREVfUFJPUF9JTU1VVEFCTEUKLSAqIEBtaW46IE1p biBwcm9wZXJ0eSB2YWx1ZQotICogQG1heDogTWF4IHByb3BlcnR5IHZhbHVlCi0gKiBAaW5pdDog RGVmYXVsdCBQcm9wZXJ0eSB2YWx1ZQotICogQHByb3BlcnR5X2lkeDogUHJvcGVydHkgaW5kZXgK LSAqLwotdm9pZCBtc21fcHJvcGVydHlfaW5zdGFsbF9yYW5nZShzdHJ1Y3QgbXNtX3Byb3BlcnR5 X2luZm8gKmluZm8sCi0JCWNvbnN0IGNoYXIgKm5hbWUsCi0JCWludCBmbGFncywKLQkJdWludDY0 X3QgbWluLAotCQl1aW50NjRfdCBtYXgsCi0JCXVpbnQ2NF90IGluaXQsCi0JCXVpbnQzMl90IHBy b3BlcnR5X2lkeCk7Ci0KLS8qKgotICogbXNtX3Byb3BlcnR5X2luc3RhbGxfdm9sYXRpbGVfcmFu Z2UgLSBpbnN0YWxsIGRybSByYW5nZSBwcm9wZXJ0eQotICoJVGhpcyBmdW5jdGlvbiBpcyBzaW1p bGFyIHRvIG1zbV9wcm9wZXJ0eV9pbnN0YWxsX3JhbmdlLCBidXQgYXNzdW1lcwotICoJdGhhdCB0 aGUgcHJvcGVydHkgaXMgbWVhbnQgZm9yIGhvbGRpbmcgdXNlciBwb2ludGVycyBvciBkZXNjcmlw dG9ycwotICoJdGhhdCBtYXkgcmVmZXJlbmNlIHZvbGF0aWxlIGRhdGEgd2l0aG91dCBoYXZpbmcg YW4gdXBkYXRlZCB2YWx1ZS4KLSAqIEBpbmZvOiBQb2ludGVyIHRvIHByb3BlcnR5IGluZm8gY29u dGFpbmVyIHN0cnVjdAotICogQG5hbWU6IFByb3BlcnR5IG5hbWUKLSAqIEBmbGFnczogT3RoZXIg cHJvcGVydHkgdHlwZSBmbGFncywgZS5nLiBEUk1fTU9ERV9QUk9QX0lNTVVUQUJMRQotICogQG1p bjogTWluIHByb3BlcnR5IHZhbHVlCi0gKiBAbWF4OiBNYXggcHJvcGVydHkgdmFsdWUKLSAqIEBp bml0OiBEZWZhdWx0IFByb3BlcnR5IHZhbHVlCi0gKiBAcHJvcGVydHlfaWR4OiBQcm9wZXJ0eSBp bmRleAotICovCi12b2lkIG1zbV9wcm9wZXJ0eV9pbnN0YWxsX3ZvbGF0aWxlX3JhbmdlKHN0cnVj dCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbywKLQkJY29uc3QgY2hhciAqbmFtZSwKLQkJaW50IGZs YWdzLAotCQl1aW50NjRfdCBtaW4sCi0JCXVpbnQ2NF90IG1heCwKLQkJdWludDY0X3QgaW5pdCwK LQkJdWludDMyX3QgcHJvcGVydHlfaWR4KTsKLQotLyoqCi0gKiBtc21fcHJvcGVydHlfaW5zdGFs bF9yb3RhdGlvbiAtIGluc3RhbGwgc3RhbmRhcmQgZHJtIHJvdGF0aW9uIHByb3BlcnR5Ci0gKiBA aW5mbzogUG9pbnRlciB0byBwcm9wZXJ0eSBpbmZvIGNvbnRhaW5lciBzdHJ1Y3QKLSAqIEBwbGFu ZTogUG9pbnRlciB0byBkcm1fcGxhbmUgd2hpY2ggdGhpcyBwcm9wZXJ0eSBpcyBpbnN0YWxsZWQg b24KLSAqIEByb3RhdGlvbjogVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgbmV3IHByb3BlcnR5 Ci0gKiBAc3VwcG9ydGVkX3JvdGF0aW9uczogQml0bWFzayBvZiBzdXBwb3J0ZWQgcm90YXRpb24g dmFsdWVzIChzZWUKLSAqICAgICAgICAgICAgICAgICAgICAgICBkcm1fcGxhbmVfY3JlYXRlX3Jv dGF0aW9uX3Byb3BlcnR5IGZvciBtb3JlIGRldGFpbHMpCi0gKiBAcHJvcGVydHlfaWR4OiBQcm9w ZXJ0eSBpbmRleAotICovCi12b2lkIG1zbV9wcm9wZXJ0eV9pbnN0YWxsX3JvdGF0aW9uKHN0cnVj dCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbywKLQkJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCi0J CXVuc2lnbmVkIGludCByb3RhdGlvbiwKLQkJdW5zaWduZWQgaW50IHN1cHBvcnRlZF9yb3RhdGlv bnMsCi0JCXVpbnQzMl90IHByb3BlcnR5X2lkeCk7Ci0KLS8qKgotICogbXNtX3Byb3BlcnR5X2lu c3RhbGxfZW51bSAtIGluc3RhbGwgc3RhbmRhcmQgZHJtIGVudW0vYml0bWFzayBwcm9wZXJ0eQot ICogQGluZm86IFBvaW50ZXIgdG8gcHJvcGVydHkgaW5mbyBjb250YWluZXIgc3RydWN0Ci0gKiBA bmFtZTogUHJvcGVydHkgbmFtZQotICogQGZsYWdzOiBPdGhlciBwcm9wZXJ0eSB0eXBlIGZsYWdz LCBlLmcuIERSTV9NT0RFX1BST1BfSU1NVVRBQkxFCi0gKiBAaXNfYml0bWFzazogU2V0IHRvIG5v bi16ZXJvIHRvIGNyZWF0ZSBhIGJpdG1hc2sgcHJvcGVydHksIHJhdGhlciB0aGFuIGFuCi0gKiAg ICAgICAgICAgICAgZW51bWVyYXRpb24gb25lCi0gKiBAdmFsdWVzOiBBcnJheSBvZiBhbGxvd2Fi bGUgZW51bWVyYXRpb24vYml0bWFzayB2YWx1ZXMKLSAqIEBudW1fdmFsdWVzOiBTaXplIG9mIHZh bHVlcyBhcnJheQotICogQHByb3BlcnR5X2lkeDogUHJvcGVydHkgaW5kZXgKLSAqLwotdm9pZCBt c21fcHJvcGVydHlfaW5zdGFsbF9lbnVtKHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbywK LQkJY29uc3QgY2hhciAqbmFtZSwKLQkJaW50IGZsYWdzLAotCQlpbnQgaXNfYml0bWFzaywKLQkJ Y29uc3Qgc3RydWN0IGRybV9wcm9wX2VudW1fbGlzdCAqdmFsdWVzLAotCQlpbnQgbnVtX3ZhbHVl cywKLQkJdWludDMyX3QgcHJvcGVydHlfaWR4KTsKLQotLyoqCi0gKiBtc21fcHJvcGVydHlfaW5z dGFsbF9ibG9iIC0gaW5zdGFsbCBzdGFuZGFyZCBkcm0gYmxvYiBwcm9wZXJ0eQotICogQGluZm86 IFBvaW50ZXIgdG8gcHJvcGVydHkgaW5mbyBjb250YWluZXIgc3RydWN0Ci0gKiBAbmFtZTogUHJv cGVydHkgbmFtZQotICogQGZsYWdzOiBFeHRyYSBmbGFncyBmb3IgcHJvcGVydHkgY3JlYXRpb24K LSAqIEBwcm9wZXJ0eV9pZHg6IFByb3BlcnR5IGluZGV4Ci0gKi8KLXZvaWQgbXNtX3Byb3BlcnR5 X2luc3RhbGxfYmxvYihzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmluZm8sCi0JCWNvbnN0IGNo YXIgKm5hbWUsCi0JCWludCBmbGFncywKLQkJdWludDMyX3QgcHJvcGVydHlfaWR4KTsKLQotLyoq Ci0gKiBtc21fcHJvcGVydHlfaW5zdGFsbF9nZXRfc3RhdHVzIC0gcXVlcnkgb3ZlcmFsIHN0YXR1 cyBvZiBwcm9wZXJ0eSBhZGRpdGlvbnMKLSAqIEBpbmZvOiBQb2ludGVyIHRvIHByb3BlcnR5IGlu Zm8gY29udGFpbmVyIHN0cnVjdAotICogUmV0dXJuczogWmVybyBpZiBwcmV2aW91cyBwcm9wZXJ0 eSBpbnN0YWxsIGNhbGxzIHdlcmUgYWxsIHN1Y2Nlc3NmdWwKLSAqLwotaW50IG1zbV9wcm9wZXJ0 eV9pbnN0YWxsX2dldF9zdGF0dXMoc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvKTsKLQot LyoqCi0gKiBtc21fcHJvcGVydHlfaW5kZXggLSBkZXRlcm1pbmUgcHJvcGVydHkgaW5kZXggZnJv bSBkcm1fcHJvcGVydHkgcHRyCi0gKiBAaW5mbzogUG9pbnRlciB0byBwcm9wZXJ0eSBpbmZvIGNv bnRhaW5lciBzdHJ1Y3QKLSAqIEBwcm9wZXJ0eTogSW5jb21pbmcgcHJvcGVydHkgcG9pbnRlcgot ICogUmV0dXJuczogVmFsaWQgcHJvcGVydHkgaW5kZXgsIG9yIC1FSU5WQUwgb24gZXJyb3IKLSAq LwotaW50IG1zbV9wcm9wZXJ0eV9pbmRleChzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmluZm8s Ci0JCXN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5KTsKLQotLyoqCi0gKiBtc21fcHJvcGVy dHlfc2V0X2RpcnR5IC0gZm9yY2libHkgZmxhZyBhIHByb3BlcnR5IGFzIGRpcnR5Ci0gKiBAaW5m bzogUG9pbnRlciB0byBwcm9wZXJ0eSBpbmZvIGNvbnRhaW5lciBzdHJ1Y3QKLSAqIEBwcm9wZXJ0 eV9zdGF0ZTogUG9pbnRlciB0byBwcm9wZXJ0eSBzdGF0ZSBjb250YWluZXIgc3RydWN0Ci0gKiBA cHJvcGVydHlfaWR4OiBQcm9wZXJ0eSBpbmRleAotICogUmV0dXJuczogWmVybyBvbiBzdWNjZXNz Ci0gKi8KLWludCBtc21fcHJvcGVydHlfc2V0X2RpcnR5KHN0cnVjdCBtc21fcHJvcGVydHlfaW5m byAqaW5mbywKLQkJc3RydWN0IG1zbV9wcm9wZXJ0eV9zdGF0ZSAqcHJvcGVydHlfc3RhdGUsCi0J CWludCBwcm9wZXJ0eV9pZHgpOwotCi0vKioKLSAqIG1zbV9wcm9wZXJ0eV9hdG9taWNfc2V0IC0g aGVscGVyIGZ1bmN0aW9uIGZvciBhdG9taWMgcHJvcGVydHkgc2V0IGNhbGxiYWNrCi0gKiBAaW5m bzogUG9pbnRlciB0byBwcm9wZXJ0eSBpbmZvIGNvbnRhaW5lciBzdHJ1Y3QKLSAqIEBwcm9wZXJ0 eV9zdGF0ZTogUG9pbnRlciB0byBsb2NhbCBzdGF0ZSBzdHJ1Y3R1cmUKLSAqIEBwcm9wZXJ0eTog SW5jb21pbmcgcHJvcGVydHkgcG9pbnRlcgotICogQHZhbDogSW5jb21pbmcgcHJvcGVydHkgdmFs dWUKLSAqIFJldHVybnM6IFplcm8gb24gc3VjY2VzcwotICovCi1pbnQgbXNtX3Byb3BlcnR5X2F0 b21pY19zZXQoc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvLAotCQlzdHJ1Y3QgbXNtX3By b3BlcnR5X3N0YXRlICpwcm9wZXJ0eV9zdGF0ZSwKLQkJc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJv cGVydHksCi0JCXVpbnQ2NF90IHZhbCk7Ci0KLS8qKgotICogbXNtX3Byb3BlcnR5X2F0b21pY19n ZXQgLSBoZWxwZXIgZnVuY3Rpb24gZm9yIGF0b21pYyBwcm9wZXJ0eSBnZXQgY2FsbGJhY2sKLSAq IEBpbmZvOiBQb2ludGVyIHRvIHByb3BlcnR5IGluZm8gY29udGFpbmVyIHN0cnVjdAotICogQHBy b3BlcnR5X3N0YXRlOiBQb2ludGVyIHRvIGxvY2FsIHN0YXRlIHN0cnVjdHVyZQotICogQHByb3Bl cnR5OiBJbmNvbWluZyBwcm9wZXJ0eSBwb2ludGVyCi0gKiBAdmFsOiBQb2ludGVyIHRvIHZhcmlh YmxlIGZvciByZWNlaXZpbmcgcHJvcGVydHkgdmFsdWUKLSAqIFJldHVybnM6IFplcm8gb24gc3Vj Y2VzcwotICovCi1pbnQgbXNtX3Byb3BlcnR5X2F0b21pY19nZXQoc3RydWN0IG1zbV9wcm9wZXJ0 eV9pbmZvICppbmZvLAotCQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X3N0YXRlICpwcm9wZXJ0eV9zdGF0 ZSwKLQkJc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksCi0JCXVpbnQ2NF90ICp2YWwpOwot Ci0vKioKLSAqIG1zbV9wcm9wZXJ0eV9hbGxvY19zdGF0ZSAtIGhlbHBlciBmdW5jdGlvbiBmb3Ig YWxsb2NhdGluZyBsb2NhbCBzdGF0ZSBvYmplY3RzCi0gKiBAaW5mbzogUG9pbnRlciB0byBwcm9w ZXJ0eSBpbmZvIGNvbnRhaW5lciBzdHJ1Y3QKLSAqLwotdm9pZCAqbXNtX3Byb3BlcnR5X2FsbG9j X3N0YXRlKHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbyk7Ci0KLS8qKgotICogbXNtX3By b3BlcnR5X3Jlc2V0X3N0YXRlIC0gaGVscGVyIGZ1bmN0aW9uIGZvciBzdGF0ZSByZXNldCBjYWxs YmFjawotICogQGluZm86IFBvaW50ZXIgdG8gcHJvcGVydHkgaW5mbyBjb250YWluZXIgc3RydWN0 Ci0gKiBAc3RhdGU6IFBvaW50ZXIgdG8gbG9jYWwgc3RhdGUgc3RydWN0dXJlCi0gKiBAcHJvcGVy dHlfc3RhdGU6IFBvaW50ZXIgdG8gcHJvcGVydHkgc3RhdGUgY29udGFpbmVyIHN0cnVjdAotICog QHByb3BlcnR5X3ZhbHVlczogUG9pbnRlciB0byBwcm9wZXJ0eSB2YWx1ZXMgY2FjaGUgYXJyYXkK LSAqLwotdm9pZCBtc21fcHJvcGVydHlfcmVzZXRfc3RhdGUoc3RydWN0IG1zbV9wcm9wZXJ0eV9p bmZvICppbmZvLCB2b2lkICpzdGF0ZSwKLQkJc3RydWN0IG1zbV9wcm9wZXJ0eV9zdGF0ZSAqcHJv cGVydHlfc3RhdGUsCi0JCXN0cnVjdCBtc21fcHJvcGVydHlfdmFsdWUgKnByb3BlcnR5X3ZhbHVl cyk7Ci0KLS8qKgotICogbXNtX3Byb3BlcnR5X2R1cGxpY2F0ZV9zdGF0ZSAtIGhlbHBlciBmdW5j dGlvbiBmb3IgZHVwbGljYXRlIHN0YXRlIGNiCi0gKiBAaW5mbzogUG9pbnRlciB0byBwcm9wZXJ0 eSBpbmZvIGNvbnRhaW5lciBzdHJ1Y3QKLSAqIEBvbGRfc3RhdGU6IFBvaW50ZXIgdG8gb3JpZ2lu YWwgc3RhdGUgc3RydWN0dXJlCi0gKiBAc3RhdGU6IFBvaW50ZXIgdG8gbmV3bHkgY3JlYXRlZCBz dGF0ZSBzdHJ1Y3R1cmUKLSAqIEBwcm9wZXJ0eV9zdGF0ZTogUG9pbnRlciB0byBkZXN0aW5hdGlv biBwcm9wZXJ0eSBzdGF0ZSBjb250YWluZXIgc3RydWN0Ci0gKiBAcHJvcGVydHlfdmFsdWVzOiBQ b2ludGVyIHRvIHByb3BlcnR5IHZhbHVlcyBjYWNoZSBhcnJheQotICovCi12b2lkIG1zbV9wcm9w ZXJ0eV9kdXBsaWNhdGVfc3RhdGUoc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvLAotCQl2 b2lkICpvbGRfc3RhdGUsCi0JCXZvaWQgKnN0YXRlLAotCQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X3N0 YXRlICpwcm9wZXJ0eV9zdGF0ZSwKLQkJc3RydWN0IG1zbV9wcm9wZXJ0eV92YWx1ZSAqcHJvcGVy dHlfdmFsdWVzKTsKLQotLyoqCi0gKiBtc21fcHJvcGVydHlfZGVzdHJveV9zdGF0ZSAtIGhlbHBl ciBmdW5jdGlvbiBmb3IgZGVzdHJveSBzdGF0ZSBjYgotICogQGluZm86IFBvaW50ZXIgdG8gcHJv cGVydHkgaW5mbyBjb250YWluZXIgc3RydWN0Ci0gKiBAc3RhdGU6IFBvaW50ZXIgdG8gbG9jYWwg c3RhdGUgc3RydWN0dXJlCi0gKiBAcHJvcGVydHlfc3RhdGU6IFBvaW50ZXIgdG8gcHJvcGVydHkg c3RhdGUgY29udGFpbmVyIHN0cnVjdAotICovCi12b2lkIG1zbV9wcm9wZXJ0eV9kZXN0cm95X3N0 YXRlKHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbywKLQkJdm9pZCAqc3RhdGUsCi0JCXN0 cnVjdCBtc21fcHJvcGVydHlfc3RhdGUgKnByb3BlcnR5X3N0YXRlKTsKLQotLyoqCi0gKiBtc21f cHJvcGVydHlfZ2V0X2Jsb2IgLSBvYnRhaW4gY2FjaGVkIGRhdGEgcG9pbnRlciBmb3IgZHJtIGJs b2IgcHJvcGVydHkKLSAqIEBpbmZvOiBQb2ludGVyIHRvIHByb3BlcnR5IGluZm8gY29udGFpbmVy IHN0cnVjdAotICogQHByb3BlcnR5X3N0YXRlOiBQb2ludGVyIHRvIHByb3BlcnR5IHN0YXRlIGNv bnRhaW5lciBzdHJ1Y3QKLSAqIEBieXRlX2xlbjogT3B0aW9uYWwgcG9pbnRlciB0byB2YXJpYWJs ZSBmb3IgYWNjZXB0aW5nIGJsb2Igc2l6ZQotICogQHByb3BlcnR5X2lkeDogUHJvcGVydHkgaW5k ZXgKLSAqIFJldHVybnM6IFBvaW50ZXIgdG8gYmxvYiBkYXRhCi0gKi8KLXZvaWQgKm1zbV9wcm9w ZXJ0eV9nZXRfYmxvYihzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmluZm8sCi0JCXN0cnVjdCBt c21fcHJvcGVydHlfc3RhdGUgKnByb3BlcnR5X3N0YXRlLAotCQlzaXplX3QgKmJ5dGVfbGVuLAot CQl1aW50MzJfdCBwcm9wZXJ0eV9pZHgpOwotCi0vKioKLSAqIG1zbV9wcm9wZXJ0eV9zZXRfYmxv YiAtIHVwZGF0ZSBibG9iIHByb3BlcnR5IG9uIGEgZHJtIG9iamVjdAotICogVGhpcyBmdW5jdGlv biB1cGRhdGVzIHRoZSBibG9iIHByb3BlcnR5IHZhbHVlIG9mIHRoZSBnaXZlbiBkcm0gb2JqZWN0 LiBJdHMKLSAqIGludGVuZGVkIHVzZSBpcyB0byB1cGRhdGUgYmxvYiBwcm9wZXJ0aWVzIHRoYXQg aGF2ZSBiZWVuIGNyZWF0ZWQgd2l0aCB0aGUKLSAqIERSTV9NT0RFX1BST1BfSU1NVVRBQkxFIGZs YWcgc2V0LgotICogQGluZm86IFBvaW50ZXIgdG8gcHJvcGVydHkgaW5mbyBjb250YWluZXIgc3Ry dWN0Ci0gKiBAYmxvYl9yZWZlcmVuY2U6IFJlZmVyZW5jZSB0byBhIHBvaW50ZXIgdGhhdCBob2xk cyB0aGUgY3JlYXRlZCBkYXRhIGJsb2IKLSAqIEBibG9iX2RhdGE6IFBvaW50ZXIgdG8gYmxvYiBk YXRhCi0gKiBAYnl0ZV9sZW46IExlbmd0aCBvZiBibG9iIGRhdGEsIGluIGJ5dGVzCi0gKiBAcHJv cGVydHlfaWR4OiBQcm9wZXJ0eSBpbmRleAotICogUmV0dXJuczogWmVybyBvbiBzdWNjZXNzCi0g Ki8KLWludCBtc21fcHJvcGVydHlfc2V0X2Jsb2Ioc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvICpp bmZvLAotCQlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKipibG9iX3JlZmVyZW5jZSwKLQkJdm9p ZCAqYmxvYl9kYXRhLAotCQlzaXplX3QgYnl0ZV9sZW4sCi0JCXVpbnQzMl90IHByb3BlcnR5X2lk eCk7Ci0KLS8qKgotICogbXNtX3Byb3BlcnR5X3NldF9wcm9wZXJ0eSAtIHVwZGF0ZSBwcm9wZXJ0 eSBvbiBhIGRybSBvYmplY3QKLSAqIFRoaXMgZnVuY3Rpb24gdXBkYXRlcyB0aGUgcHJvcGVydHkg dmFsdWUgb2YgdGhlIGdpdmVuIGRybSBvYmplY3QuIEl0cwotICogaW50ZW5kZWQgdXNlIGlzIHRv IHVwZGF0ZSBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQgd2l0aCB0aGUKLSAqIERS TV9NT0RFX1BST1BfSU1NVVRBQkxFIGZsYWcgc2V0LgotICogTm90ZTogVGhpcyBmdW5jdGlvbiBj YW5ub3QgYmUgY2FsbGVkIG9uIGEgYmxvYi4KLSAqIEBpbmZvOiBQb2ludGVyIHRvIHByb3BlcnR5 IGluZm8gY29udGFpbmVyIHN0cnVjdAotICogQHByb3BlcnR5X3N0YXRlOiBQb2ludGVyIHRvIHBy b3BlcnR5IHN0YXRlIGNvbnRhaW5lciBzdHJ1Y3QKLSAqIEBwcm9wZXJ0eV9pZHg6IFByb3BlcnR5 IGluZGV4Ci0gKiBAdmFsOiB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgdG8gc2V0Ci0gKiBSZXR1cm5z OiBaZXJvIG9uIHN1Y2Nlc3MKLSAqLwotaW50IG1zbV9wcm9wZXJ0eV9zZXRfcHJvcGVydHkoc3Ry dWN0IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvLAotCQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X3N0YXRl ICpwcm9wZXJ0eV9zdGF0ZSwKLQkJdWludDMyX3QgcHJvcGVydHlfaWR4LAotCQl1aW50NjRfdCB2 YWwpOwotCi0jZW5kaWYgLyogX01TTV9QUk9QX0hfICovCi0KLS0gClRoZSBRdWFsY29tbSBJbm5v dmF0aW9uIENlbnRlciwgSW5jLiBpcyBhIG1lbWJlciBvZiB0aGUgQ29kZSBBdXJvcmEgRm9ydW0s CmEgTGludXggRm91bmRhdGlvbiBDb2xsYWJvcmF0aXZlIFByb2plY3QKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkZyZWVkcmVubyBtYWlsaW5nIGxpc3QK RnJlZWRyZW5vQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZyZWVkcmVubwo=