From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeykumar Sankaran Subject: [DPU PATCH v2 6/7] drm/msm: remove msm_prop files Date: Tue, 5 Jun 2018 20:45:37 -0700 Message-ID: <1528256738-30652-7-git-send-email-jsanka@codeaurora.org> References: <1528256738-30652-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: <1528256738-30652-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 ZW5jaWVzIHRvIGNhY2hlIGFuZCByZXN0b3JlIHJlc3BlY3RpdmUgZHJtCnN0YXRlcy4KCmNoYW5n cyBpbiB2MjoKCS0gbm9uZQoKU2lnbmVkLW9mZi1ieTogSmV5a3VtYXIgU2Fua2FyYW4gPGpzYW5r YUBjb2RlYXVyb3JhLm9yZz4KUmV2aWV3ZWQtYnk6IFNlYW4gUGF1bCA8c2VhbnBhdWxAY2hyb21p dW0ub3JnPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUgICAgICAgICAgICAgICAg ICB8ICAgMSAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9wZXJmLmMg fCAgIDIgLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYyAgICAgIHwg MjM5ICstLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaCAg ICAgIHwgIDE2IC0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmgg ICB8ICAgMiAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuYyAgICAg fCAxMjMgKy0tLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5oICAg ICB8ICAxMiAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuaCAgICAgICAgICAgICAgICAg fCAgMTYgKy0KIGRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX3Byb3AuYyAgICAgICAgICAgICAgICB8 IDY4OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9tc21f cHJvcC5oICAgICAgICAgICAgICAgIHwgNDM4IC0tLS0tLS0tLS0tLS0tLS0KIDEwIGZpbGVzIGNo YW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMTUyOSBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9wcm9wLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vbXNtL21zbV9wcm9wLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbXNtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL21zbS9NYWtlZmlsZQppbmRleCBkMjg5 NTAzLi41MzMxMTg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKQEAgLTc2LDcgKzc2LDYgQEAgbXNtLXkg Oj0gXAogCWRwdV9pb191dGlsLm8gXAogCWRwdV9kYmdfZXZ0bG9nLm8gXAogCWRwdV9wb3dlcl9o YW5kbGUubyBcCi0JbXNtX3Byb3AubyBcCiAJbXNtX2F0b21pYy5vIFwKIAltc21fZGVidWdmcy5v IFwKIAltc21fZHJ2Lm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2NvcmVfcGVyZi5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Nv cmVfcGVyZi5jCmluZGV4IGM0ODIwZGUuLmU0YjgyZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb3JlX3BlcmYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9wZXJmLmMKQEAgLTE5LDggKzE5LDYgQEAKICNpbmNsdWRl IDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KIAotI2luY2x1ZGUgIm1z bV9wcm9wLmgiCi0KICNpbmNsdWRlICJkcHVfa21zLmgiCiAjaW5jbHVkZSAiZHB1X3RyYWNlLmgi CiAjaW5jbHVkZSAiZHB1X2NydGMuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf Y3J0Yy5jCmluZGV4IDBjMjVjNDUuLmRkOGM5MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2NydGMuYwpAQCAtNTc5LDEwICs1NzksNiBAQCBzdGF0aWMgdm9pZCBkcHVfY3J0 Y19kZXN0cm95KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAlpZiAoIWNydGMpCiAJCXJldHVybjsK IAotCWlmIChkcHVfY3J0Yy0+YmxvYl9pbmZvKQotCQlkcm1fcHJvcGVydHlfYmxvYl9wdXQoZHB1 X2NydGMtPmJsb2JfaW5mbyk7Ci0JbXNtX3Byb3BlcnR5X2Rlc3Ryb3koJmRwdV9jcnRjLT5wcm9w ZXJ0eV9pbmZvKTsKLQogCV9kcHVfY3J0Y19kZWluaXRfZXZlbnRzKGRwdV9jcnRjKTsKIAogCWRy bV9jcnRjX2NsZWFudXAoY3J0Yyk7CkBAIC0xMzQxLDkgKzEzMzcsNyBAQCBzdGF0aWMgdm9pZCBk cHVfY3J0Y19kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAogCV9fZHJtX2F0 b21pY19oZWxwZXJfY3J0Y19kZXN0cm95X3N0YXRlKHN0YXRlKTsKIAotCS8qIGRlc3Ryb3kgdmFs dWUgaGVscGVyICovCi0JbXNtX3Byb3BlcnR5X2Rlc3Ryb3lfc3RhdGUoJmRwdV9jcnRjLT5wcm9w ZXJ0eV9pbmZvLCBjc3RhdGUsCi0JCQkmY3N0YXRlLT5wcm9wZXJ0eV9zdGF0ZSk7CisJa2ZyZWUo Y3N0YXRlKTsKIH0KIAogc3RhdGljIGludCBfZHB1X2NydGNfd2FpdF9mb3JfZnJhbWVfZG9uZShz dHJ1Y3QgZHJtX2NydGMgKmNydGMpCkBAIC0xNTkyLDE3ICsxNTg2LDEyIEBAIHN0YXRpYyBzdHJ1 Y3QgZHJtX2NydGNfc3RhdGUgKmRwdV9jcnRjX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpCiAKIAlkcHVfY3J0YyA9IHRvX2RwdV9jcnRjKGNydGMpOwogCW9sZF9jc3RhdGUg PSB0b19kcHVfY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7Ci0JY3N0YXRlID0gbXNtX3Byb3BlcnR5 X2FsbG9jX3N0YXRlKCZkcHVfY3J0Yy0+cHJvcGVydHlfaW5mbyk7CisJY3N0YXRlID0ga21lbWR1 cChvbGRfY3N0YXRlLCBzaXplb2YoKm9sZF9jc3RhdGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNz dGF0ZSkgewogCQlEUFVfRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSBzdGF0ZVxuIik7CiAJCXJl dHVybiBOVUxMOwogCX0KIAotCS8qIGR1cGxpY2F0ZSB2YWx1ZSBoZWxwZXIgKi8KLQltc21fcHJv cGVydHlfZHVwbGljYXRlX3N0YXRlKCZkcHVfY3J0Yy0+cHJvcGVydHlfaW5mbywKLQkJCW9sZF9j c3RhdGUsIGNzdGF0ZSwKLQkJCSZjc3RhdGUtPnByb3BlcnR5X3N0YXRlLCBjc3RhdGUtPnByb3Bl cnR5X3ZhbHVlcyk7Ci0KIAkvKiBkdXBsaWNhdGUgYmFzZSBoZWxwZXIgKi8KIAlfX2RybV9hdG9t aWNfaGVscGVyX2NydGNfZHVwbGljYXRlX3N0YXRlKGNydGMsICZjc3RhdGUtPmJhc2UpOwogCkBA IC0xNjM4LDE3ICsxNjI3LDEyIEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRjX3Jlc2V0KHN0cnVjdCBk cm1fY3J0YyAqY3J0YykKIAl9CiAKIAlkcHVfY3J0YyA9IHRvX2RwdV9jcnRjKGNydGMpOwotCWNz dGF0ZSA9IG1zbV9wcm9wZXJ0eV9hbGxvY19zdGF0ZSgmZHB1X2NydGMtPnByb3BlcnR5X2luZm8p OworCWNzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKCpjc3RhdGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAo IWNzdGF0ZSkgewogCQlEUFVfRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSBzdGF0ZVxuIik7CiAJ CXJldHVybjsKIAl9CiAKLQkvKiByZXNldCB2YWx1ZSBoZWxwZXIgKi8KLQltc21fcHJvcGVydHlf cmVzZXRfc3RhdGUoJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZvLCBjc3RhdGUsCi0JCQkmY3N0YXRl LT5wcm9wZXJ0eV9zdGF0ZSwKLQkJCWNzdGF0ZS0+cHJvcGVydHlfdmFsdWVzKTsKLQogCV9kcHVf Y3J0Y19ycF9yZXNldCgmY3N0YXRlLT5ycCwgJmRwdV9jcnRjLT5ycF9sb2NrLAogCQkJJmRwdV9j cnRjLT5ycF9oZWFkKTsKIApAQCAtMjE0NSwyMTIgKzIxMjksNiBAQCB2b2lkIGRwdV9jcnRjX2Nh bmNlbF9wZW5kaW5nX2ZsaXAoc3RydWN0IGRybV9jcnRjICpjcnRjLCBzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGUpCiAJX2RwdV9jcnRjX2NvbXBsZXRlX2ZsaXAoY3J0YywgZmlsZSk7CiB9CiAKLS8qKgot ICogZHB1X2NydGNfaW5zdGFsbF9wcm9wZXJ0aWVzIC0gaW5zdGFsbCBhbGwgZHJtIHByb3BlcnRp ZXMgZm9yIGNydGMKLSAqIEBjcnRjOiBQb2ludGVyIHRvIGRybSBjcnRjIHN0cnVjdHVyZQotICov Ci1zdGF0aWMgdm9pZCBkcHVfY3J0Y19pbnN0YWxsX3Byb3BlcnRpZXMoc3RydWN0IGRybV9jcnRj ICpjcnRjLAotCQkJCXN0cnVjdCBkcHVfbWRzc19jZmcgKmNhdGFsb2cpCi17Ci0Jc3RydWN0IGRw dV9jcnRjICpkcHVfY3J0YzsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OwotCXN0cnVjdCBkcHVf a21zX2luZm8gKmluZm87Ci0Jc3RydWN0IGRwdV9rbXMgKmRwdV9rbXM7Ci0KLQlEUFVfREVCVUco IlxuIik7Ci0KLQlpZiAoIWNydGMgfHwgIWNhdGFsb2cpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlk IGNydGMgb3IgY2F0YWxvZ1xuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlkcHVfY3J0YyA9IHRvX2Rw dV9jcnRjKGNydGMpOwotCWRldiA9IGNydGMtPmRldjsKLQlkcHVfa21zID0gX2RwdV9jcnRjX2dl dF9rbXMoY3J0Yyk7Ci0KLQlpZiAoIWRwdV9rbXMpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFy Z3VtZW50XG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1 Y3QgZHB1X2ttc19pbmZvKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpbmZvKSB7Ci0JCURQVV9FUlJP UigiZmFpbGVkIHRvIGFsbG9jYXRlIGluZm8gbWVtb3J5XG4iKTsKLQkJcmV0dXJuOwotCX0KLQot CW1zbV9wcm9wZXJ0eV9pbnN0YWxsX2Jsb2IoJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZvLCAiY2Fw YWJpbGl0aWVzIiwKLQkJRFJNX01PREVfUFJPUF9JTU1VVEFCTEUsIENSVENfUFJPUF9JTkZPKTsK LQotCWRwdV9rbXNfaW5mb19yZXNldChpbmZvKTsKLQotCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50 KGluZm8sICJod192ZXJzaW9uIiwgY2F0YWxvZy0+aHd2ZXJzaW9uKTsKLQlkcHVfa21zX2luZm9f YWRkX2tleWludChpbmZvLCAibWF4X2xpbmV3aWR0aCIsCi0JCQljYXRhbG9nLT5jYXBzLT5tYXhf bWl4ZXJfd2lkdGgpOwotCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJtYXhfYmxlbmRz dGFnZXMiLAotCQkJY2F0YWxvZy0+Y2Fwcy0+bWF4X21peGVyX2JsZW5kc3RhZ2VzKTsKLQlpZiAo Y2F0YWxvZy0+Y2Fwcy0+cXNlZWRfdHlwZSA9PSBEUFVfU1NQUF9TQ0FMRVJfUVNFRUQyKQotCQlk cHVfa21zX2luZm9fYWRkX2tleXN0cihpbmZvLCAicXNlZWRfdHlwZSIsICJxc2VlZDIiKTsKLQlp ZiAoY2F0YWxvZy0+Y2Fwcy0+cXNlZWRfdHlwZSA9PSBEUFVfU1NQUF9TQ0FMRVJfUVNFRUQzKQot CQlkcHVfa21zX2luZm9fYWRkX2tleXN0cihpbmZvLCAicXNlZWRfdHlwZSIsICJxc2VlZDMiKTsK LQotCWlmIChkcHVfaXNfY3VzdG9tX2NsaWVudCgpKSB7Ci0JCWlmIChjYXRhbG9nLT5jYXBzLT5z bWFydF9kbWFfcmV2ID09IERQVV9TU1BQX1NNQVJUX0RNQV9WMSkKLQkJCWRwdV9rbXNfaW5mb19h ZGRfa2V5c3RyKGluZm8sCi0JCQkJCSJzbWFydF9kbWFfcmV2IiwgInNtYXJ0X2RtYV92MSIpOwot CQlpZiAoY2F0YWxvZy0+Y2Fwcy0+c21hcnRfZG1hX3JldiA9PSBEUFVfU1NQUF9TTUFSVF9ETUFf VjIpCi0JCQlkcHVfa21zX2luZm9fYWRkX2tleXN0cihpbmZvLAotCQkJCQkic21hcnRfZG1hX3Jl diIsICJzbWFydF9kbWFfdjIiKTsKLQl9Ci0KLQlkcHVfa21zX2luZm9fYWRkX2tleWludChpbmZv LCAiaGFzX3NyY19zcGxpdCIsCi0JCQkJY2F0YWxvZy0+Y2Fwcy0+aGFzX3NyY19zcGxpdCk7Ci0J aWYgKGNhdGFsb2ctPnBlcmYubWF4X2J3X2xvdykKLQkJZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQo aW5mbywgIm1heF9iYW5kd2lkdGhfbG93IiwKLQkJCQljYXRhbG9nLT5wZXJmLm1heF9id19sb3cg KiAxMDAwTEwpOwotCWlmIChjYXRhbG9nLT5wZXJmLm1heF9id19oaWdoKQotCQlkcHVfa21zX2lu Zm9fYWRkX2tleWludChpbmZvLCAibWF4X2JhbmR3aWR0aF9oaWdoIiwKLQkJCQljYXRhbG9nLT5w ZXJmLm1heF9id19oaWdoICogMTAwMExMKTsKLQlpZiAoY2F0YWxvZy0+cGVyZi5taW5fY29yZV9p YikKLQkJZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5mbywgIm1pbl9jb3JlX2liIiwKLQkJCQlj YXRhbG9nLT5wZXJmLm1pbl9jb3JlX2liICogMTAwMExMKTsKLQlpZiAoY2F0YWxvZy0+cGVyZi5t aW5fbGxjY19pYikKLQkJZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5mbywgIm1pbl9sbGNjX2li IiwKLQkJCQljYXRhbG9nLT5wZXJmLm1pbl9sbGNjX2liICogMTAwMExMKTsKLQlpZiAoY2F0YWxv Zy0+cGVyZi5taW5fZHJhbV9pYikKLQkJZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5mbywgIm1p bl9kcmFtX2liIiwKLQkJCQljYXRhbG9nLT5wZXJmLm1pbl9kcmFtX2liICogMTAwMExMKTsKLQlp ZiAoZHB1X2ttcy0+cGVyZi5tYXhfY29yZV9jbGtfcmF0ZSkKLQkJZHB1X2ttc19pbmZvX2FkZF9r ZXlpbnQoaW5mbywgIm1heF9tZHBfY2xrIiwKLQkJCQlkcHVfa21zLT5wZXJmLm1heF9jb3JlX2Ns a19yYXRlKTsKLQlkcHVfa21zX2luZm9fYWRkX2tleXN0cihpbmZvLCAiY29yZV9pYl9mZiIsCi0J CQljYXRhbG9nLT5wZXJmLmNvcmVfaWJfZmYpOwotCWRwdV9rbXNfaW5mb19hZGRfa2V5c3RyKGlu Zm8sICJjb3JlX2Nsa19mZiIsCi0JCQljYXRhbG9nLT5wZXJmLmNvcmVfY2xrX2ZmKTsKLQlkcHVf a21zX2luZm9fYWRkX2tleXN0cihpbmZvLCAiY29tcF9yYXRpb19ydCIsCi0JCQljYXRhbG9nLT5w ZXJmLmNvbXBfcmF0aW9fcnQpOwotCWRwdV9rbXNfaW5mb19hZGRfa2V5c3RyKGluZm8sICJjb21w X3JhdGlvX25ydCIsCi0JCQljYXRhbG9nLT5wZXJmLmNvbXBfcmF0aW9fbnJ0KTsKLQlkcHVfa21z X2luZm9fYWRkX2tleWludChpbmZvLCAiZGVzdF9zY2FsZV9wcmVmaWxsX2xpbmVzIiwKLQkJCWNh dGFsb2ctPnBlcmYuZGVzdF9zY2FsZV9wcmVmaWxsX2xpbmVzKTsKLQlkcHVfa21zX2luZm9fYWRk X2tleWludChpbmZvLCAidW5kZXJzaXplZF9wcmVmaWxsX2xpbmVzIiwKLQkJCWNhdGFsb2ctPnBl cmYudW5kZXJzaXplZF9wcmVmaWxsX2xpbmVzKTsKLQlkcHVfa21zX2luZm9fYWRkX2tleWludChp bmZvLCAibWFjcm90aWxlX3ByZWZpbGxfbGluZXMiLAotCQkJY2F0YWxvZy0+cGVyZi5tYWNyb3Rp bGVfcHJlZmlsbF9saW5lcyk7Ci0JZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5mbywgInl1dl9u djEyX3ByZWZpbGxfbGluZXMiLAotCQkJY2F0YWxvZy0+cGVyZi55dXZfbnYxMl9wcmVmaWxsX2xp bmVzKTsKLQlkcHVfa21zX2luZm9fYWRkX2tleWludChpbmZvLCAibGluZWFyX3ByZWZpbGxfbGlu ZXMiLAotCQkJY2F0YWxvZy0+cGVyZi5saW5lYXJfcHJlZmlsbF9saW5lcyk7Ci0JZHB1X2ttc19p bmZvX2FkZF9rZXlpbnQoaW5mbywgImRvd25zY2FsaW5nX3ByZWZpbGxfbGluZXMiLAotCQkJY2F0 YWxvZy0+cGVyZi5kb3duc2NhbGluZ19wcmVmaWxsX2xpbmVzKTsKLQlkcHVfa21zX2luZm9fYWRk X2tleWludChpbmZvLCAieHRyYV9wcmVmaWxsX2xpbmVzIiwKLQkJCWNhdGFsb2ctPnBlcmYueHRy YV9wcmVmaWxsX2xpbmVzKTsKLQlkcHVfa21zX2luZm9fYWRkX2tleWludChpbmZvLCAiYW1vcnRp emFibGVfdGhyZXNob2xkIiwKLQkJCWNhdGFsb2ctPnBlcmYuYW1vcnRpemFibGVfdGhyZXNob2xk KTsKLQlkcHVfa21zX2luZm9fYWRkX2tleWludChpbmZvLCAibWluX3ByZWZpbGxfbGluZXMiLAot CQkJY2F0YWxvZy0+cGVyZi5taW5fcHJlZmlsbF9saW5lcyk7Ci0KLQltc21fcHJvcGVydHlfc2V0 X2Jsb2IoJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZvLCAmZHB1X2NydGMtPmJsb2JfaW5mbywKLQkJ CWluZm8tPmRhdGEsIERQVV9LTVNfSU5GT19EQVRBTEVOKGluZm8pLCBDUlRDX1BST1BfSU5GTyk7 Ci0KLQlrZnJlZShpbmZvKTsKLX0KLQotLyoqCi0gKiBkcHVfY3J0Y19hdG9taWNfc2V0X3Byb3Bl cnR5IC0gYXRvbWljYWxseSBzZXQgYSBjcnRjIGRybSBwcm9wZXJ0eQotICogQGNydGM6IFBvaW50 ZXIgdG8gZHJtIGNydGMgc3RydWN0dXJlCi0gKiBAc3RhdGU6IFBvaW50ZXIgdG8gZHJtIGNydGMg c3RhdGUgc3RydWN0dXJlCi0gKiBAcHJvcGVydHk6IFBvaW50ZXIgdG8gdGFyZ2V0ZWQgZHJtIHBy b3BlcnR5Ci0gKiBAdmFsOiBVcGRhdGVkIHByb3BlcnR5IHZhbHVlCi0gKiBAUmV0dXJuczogWmVy byBvbiBzdWNjZXNzCi0gKi8KLXN0YXRpYyBpbnQgZHB1X2NydGNfYXRvbWljX3NldF9wcm9wZXJ0 eShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUs Ci0JCXN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LAotCQl1aW50NjRfdCB2YWwpCi17Ci0J c3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YzsKLQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNzdGF0 ZTsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKLQotCWlmICghY3J0YyB8fCAhc3RhdGUgfHwgIXByb3Bl cnR5KSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBhcmd1bWVudChzKVxuIik7Ci0JfSBlbHNlIHsK LQkJZHB1X2NydGMgPSB0b19kcHVfY3J0YyhjcnRjKTsKLQkJY3N0YXRlID0gdG9fZHB1X2NydGNf c3RhdGUoc3RhdGUpOwotCQlyZXQgPSBtc21fcHJvcGVydHlfYXRvbWljX3NldCgmZHB1X2NydGMt PnByb3BlcnR5X2luZm8sCi0JCQkJJmNzdGF0ZS0+cHJvcGVydHlfc3RhdGUsIHByb3BlcnR5LCB2 YWwpOwotCQlpZiAocmV0KQotCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gc2V0IHRoZSBwcm9wZXJ0 eVxuIik7Ci0KLQkJRFBVX0RFQlVHKCJjcnRjJWQgJXNbJWRdIDw9IDB4JWxseCByZXQ9JWRcbiIs IGNydGMtPmJhc2UuaWQsCi0JCQkJcHJvcGVydHktPm5hbWUsIHByb3BlcnR5LT5iYXNlLmlkLCB2 YWwsIHJldCk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBkcHVfY3J0Y19zZXRf cHJvcGVydHkgLSBzZXQgYSBjcnRjIGRybSBwcm9wZXJ0eQotICogQGNydGM6IFBvaW50ZXIgdG8g ZHJtIGNydGMgc3RydWN0dXJlCi0gKiBAcHJvcGVydHk6IFBvaW50ZXIgdG8gdGFyZ2V0ZWQgZHJt IHByb3BlcnR5Ci0gKiBAdmFsOiBVcGRhdGVkIHByb3BlcnR5IHZhbHVlCi0gKiBAUmV0dXJuczog WmVybyBvbiBzdWNjZXNzCi0gKi8KLXN0YXRpYyBpbnQgZHB1X2NydGNfc2V0X3Byb3BlcnR5KHN0 cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksIHVp bnQ2NF90IHZhbCkKLXsKLQlEUFVfREVCVUcoIlxuIik7Ci0KLQlyZXR1cm4gZHB1X2NydGNfYXRv bWljX3NldF9wcm9wZXJ0eShjcnRjLCBjcnRjLT5zdGF0ZSwgcHJvcGVydHksIHZhbCk7Ci19Ci0K LS8qKgotICogZHB1X2NydGNfYXRvbWljX2dldF9wcm9wZXJ0eSAtIHJldHJpZXZlIGEgY3J0YyBk cm0gcHJvcGVydHkKLSAqIEBjcnRjOiBQb2ludGVyIHRvIGRybSBjcnRjIHN0cnVjdHVyZQotICog QHN0YXRlOiBQb2ludGVyIHRvIGRybSBjcnRjIHN0YXRlIHN0cnVjdHVyZQotICogQHByb3BlcnR5 OiBQb2ludGVyIHRvIHRhcmdldGVkIGRybSBwcm9wZXJ0eQotICogQHZhbDogUG9pbnRlciB0byB2 YXJpYWJsZSBmb3IgcmVjZWl2aW5nIHByb3BlcnR5IHZhbHVlCi0gKiBAUmV0dXJuczogWmVybyBv biBzdWNjZXNzCi0gKi8KLXN0YXRpYyBpbnQgZHB1X2NydGNfYXRvbWljX2dldF9wcm9wZXJ0eShz dHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCWNvbnN0IHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3Rh dGUsCi0JCXN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LAotCQl1aW50NjRfdCAqdmFsKQot ewotCXN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGM7Ci0Jc3RydWN0IGRwdV9jcnRjX3N0YXRlICpj c3RhdGU7Ci0Jc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwotCWludCBpLCByZXQgPSAtRUlO VkFMOwotCWJvb2wgaXNfY21kID0gdHJ1ZTsKLQotCWlmICghY3J0YyB8fCAhc3RhdGUpIHsKLQkJ RFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50KHMpXG4iKTsKLQl9IGVsc2UgewotCQlkcHVfY3J0 YyA9IHRvX2RwdV9jcnRjKGNydGMpOwotCQljc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShzdGF0 ZSk7Ci0KLQkJLyoqCi0JCSAqIHNldCB0aGUgY21kIGZsYWcgb25seSB3aGVuIGFsbCB0aGUgZW5j b2RlcnMgYXR0YWNoZWQKLQkJICogdG8gdGhlIGNydGMgYXJlIGluIGNtZCBtb2RlLiBDb25zaWRl ciBhbGwgb3RoZXIgY2FzZXMKLQkJICogYXMgdmlkZW8gbW9kZS4KLQkJICovCi0JCWRybV9mb3Jf ZWFjaF9lbmNvZGVyKGVuY29kZXIsIGNydGMtPmRldikgewotCQkJaWYgKGVuY29kZXItPmNydGMg PT0gY3J0YykKLQkJCQlpc19jbWQgPSBkcHVfZW5jb2Rlcl9jaGVja19tb2RlKGVuY29kZXIsCi0J CQkJCQlNU01fRElTUExBWV9DQVBfQ01EX01PREUpOwotCQl9Ci0KLQkJaSA9IG1zbV9wcm9wZXJ0 eV9pbmRleCgmZHB1X2NydGMtPnByb3BlcnR5X2luZm8sIHByb3BlcnR5KTsKLQkJcmV0ID0gbXNt X3Byb3BlcnR5X2F0b21pY19nZXQoJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZvLAotCQkJCSZjc3Rh dGUtPnByb3BlcnR5X3N0YXRlLAotCQkJCXByb3BlcnR5LCB2YWwpOwotCQlpZiAocmV0KQotCQkJ RFJNX0VSUk9SKCJnZXQgcHJvcGVydHkgZmFpbGVkXG4iKTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0K LQogI2lmZGVmIENPTkZJR19ERUJVR19GUwogc3RhdGljIGludCBfZHB1X2RlYnVnZnNfc3RhdHVz X3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKQogewpAQCAtMjcxMCw5ICsyNDg4 LDYgQEAgc3RhdGljIHZvaWQgZHB1X2NydGNfZWFybHlfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpCiAJLnNldF9jb25maWcgPSBkcm1fYXRvbWljX2hlbHBlcl9zZXRfY29uZmlnLAog CS5kZXN0cm95ID0gZHB1X2NydGNfZGVzdHJveSwKIAkucGFnZV9mbGlwID0gZHJtX2F0b21pY19o ZWxwZXJfcGFnZV9mbGlwLAotCS5zZXRfcHJvcGVydHkgPSBkcHVfY3J0Y19zZXRfcHJvcGVydHks Ci0JLmF0b21pY19zZXRfcHJvcGVydHkgPSBkcHVfY3J0Y19hdG9taWNfc2V0X3Byb3BlcnR5LAot CS5hdG9taWNfZ2V0X3Byb3BlcnR5ID0gZHB1X2NydGNfYXRvbWljX2dldF9wcm9wZXJ0eSwKIAku cmVzZXQgPSBkcHVfY3J0Y19yZXNldCwKIAkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRwdV9j cnRjX2R1cGxpY2F0ZV9zdGF0ZSwKIAkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcHVfY3J0Y19k ZXN0cm95X3N0YXRlLApAQCAtMjg3NSwxNCArMjY1MCw2IEBAIHN0cnVjdCBkcm1fY3J0YyAqZHB1 X2NydGNfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSkKIAkJcmV0dXJuIEVSUl9QVFIocmMpOwogCX0KIAotCS8qIGNyZWF0ZSBDUlRDIHByb3BlcnRp ZXMgKi8KLQltc21fcHJvcGVydHlfaW5pdCgmZHB1X2NydGMtPnByb3BlcnR5X2luZm8sICZjcnRj LT5iYXNlLCBkZXYsCi0JCQlwcml2LT5jcnRjX3Byb3BlcnR5LCBkcHVfY3J0Yy0+cHJvcGVydHlf ZGF0YSwKLQkJCUNSVENfUFJPUF9DT1VOVCwgQ1JUQ19QUk9QX0JMT0JDT1VOVCwKLQkJCXNpemVv ZihzdHJ1Y3QgZHB1X2NydGNfc3RhdGUpKTsKLQotCWRwdV9jcnRjX2luc3RhbGxfcHJvcGVydGll cyhjcnRjLCBrbXMtPmNhdGFsb2cpOwotCiAJRFBVX0RFQlVHKCIlczogc3VjY2Vzc2Z1bGx5IGlu aXRpYWxpemVkIGNydGNcbiIsIGRwdV9jcnRjLT5uYW1lKTsKIAlyZXR1cm4gY3J0YzsKIH0KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmggYi9kcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oCmluZGV4IDY2MjhlYjMuLmY3NTIx MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmgK KysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaApAQCAtMjIsNyAr MjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDx1YXBpL2RybS9k cHVfZHJtLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+Ci0jaW5jbHVkZSAibXNtX3Byb3Au aCIKICNpbmNsdWRlICJkcHVfa21zLmgiCiAjaW5jbHVkZSAiZHB1X2NvcmVfcGVyZi5oIgogI2lu Y2x1ZGUgImRwdV9od19ibGsuaCIKQEAgLTIwMCwxMCArMTk5LDYgQEAgc3RydWN0IGRwdV9jcnRj IHsKIAlzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICpldmVudDsKIAl1MzIgdnN5bmNf Y291bnQ7CiAKLQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8gcHJvcGVydHlfaW5mbzsKLQlzdHJ1 Y3QgbXNtX3Byb3BlcnR5X2RhdGEgcHJvcGVydHlfZGF0YVtDUlRDX1BST1BfQ09VTlRdOwotCXN0 cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqYmxvYl9pbmZvOwotCiAJc3RydWN0IGRwdV9od19zdGFn ZV9jZmcgc3RhZ2VfY2ZnOwogCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcm9vdDsKIApAQCAtMzI0 LDggKzMxOSw2IEBAIHN0cnVjdCBkcHVfY3J0Y19zdGF0ZSB7CiAJYm9vbCBpc19wcHNwbGl0Owog CXN0cnVjdCBkcHVfcmVjdCBsbV9ib3VuZHNbQ1JUQ19EVUFMX01JWEVSU107CiAKLQlzdHJ1Y3Qg bXNtX3Byb3BlcnR5X3N0YXRlIHByb3BlcnR5X3N0YXRlOwotCXN0cnVjdCBtc21fcHJvcGVydHlf dmFsdWUgcHJvcGVydHlfdmFsdWVzW0NSVENfUFJPUF9DT1VOVF07CiAJdWludDY0X3QgaW5wdXRf ZmVuY2VfdGltZW91dF9uczsKIAogCXN0cnVjdCBkcHVfY29yZV9wZXJmX3BhcmFtcyBuZXdfcGVy ZjsKQEAgLTMzNiwxNSArMzI5LDYgQEAgc3RydWN0IGRwdV9jcnRjX3N0YXRlIHsKIAljb250YWlu ZXJfb2YoeCwgc3RydWN0IGRwdV9jcnRjX3N0YXRlLCBiYXNlKQogCiAvKioKLSAqIGRwdV9jcnRj X2dldF9wcm9wZXJ0eSAtIHF1ZXJ5IGludGVnZXIgdmFsdWUgb2YgY3J0YyBwcm9wZXJ0eQotICog QFM6IFBvaW50ZXIgdG8gY3J0YyBzdGF0ZQotICogQFg6IFByb3BlcnR5IGluZGV4LCBmcm9tIGVu dW0gbXNtX21kcF9jcnRjX3Byb3BlcnR5Ci0gKiBSZXR1cm5zOiBJbnRlZ2VyIHZhbHVlIG9mIHJl cXVlc3RlZCBwcm9wZXJ0eQotICovCi0jZGVmaW5lIGRwdV9jcnRjX2dldF9wcm9wZXJ0eShTLCBY KSBcCi0JKChTKSAmJiAoKFgpIDwgQ1JUQ19QUk9QX0NPVU5UKSA/ICgoUyktPnByb3BlcnR5X3Zh bHVlc1soWCldLnZhbHVlKSA6IDApCi0KLS8qKgogICogZHB1X2NydGNfZ2V0X21peGVyX3dpZHRo IC0gZ2V0IHRoZSBtaXhlciB3aWR0aAogICogTWl4ZXIgd2lkdGggd2lsbCBiZSBzYW1lIGFzIHBh bmVsIHdpZHRoKC8yIGZvciBzcGxpdCkKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9lbmNvZGVyLmgKaW5kZXggZDg1M2FkOS4uMDMzOWRmZCAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuaAorKysgYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5oCkBAIC0yMCw4ICsyMCw2IEBACiAjZGVm aW5lIF9fRFBVX0VOQ09ERVJfSF9fCiAKICNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KLQotI2lu Y2x1ZGUgIm1zbV9wcm9wLmgiCiAjaW5jbHVkZSAiZHB1X2h3X21kc3MuaCIKIAogI2RlZmluZSBE UFVfRU5DT0RFUl9GUkFNRV9FVkVOVF9ET05FCQkJQklUKDApCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9wbGFuZS5jCmluZGV4IDI4NzM1YzguLmZhZjU5MDMgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5jCkBAIC0yMCw5ICsyMCw4IEBACiAKICNp bmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgotI2lu Y2x1ZGUgIm1zbV9wcm9wLmgiCi0jaW5jbHVkZSAibXNtX2Rydi5oIgogCisjaW5jbHVkZSAibXNt X2Rydi5oIgogI2luY2x1ZGUgImRwdV9rbXMuaCIKICNpbmNsdWRlICJkcHVfZm9ybWF0cy5oIgog I2luY2x1ZGUgImRwdV9od19zc3BwLmgiCkBAIC0xMTksOSArMTE4LDYgQEAgc3RydWN0IGRwdV9w bGFuZSB7CiAKIAljb25zdCBzdHJ1Y3QgZHB1X3NzcHBfc3ViX2Jsa3MgKnBpcGVfc2JsazsKIAlj aGFyIHBpcGVfbmFtZVtEUFVfTkFNRV9TSVpFXTsKLQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8g cHJvcGVydHlfaW5mbzsKLQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X2RhdGEgcHJvcGVydHlfZGF0YVtQ TEFORV9QUk9QX0NPVU5UXTsKLQlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmJsb2JfaW5mbzsK IAogCS8qIGRlYnVnZnMgcmVsYXRlZCBzdHVmZiAqLwogCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNf cm9vdDsKQEAgLTE0MDEsNyArMTM5Nyw2IEBAIHN0YXRpYyBpbnQgZHB1X3BsYW5lX3NzcHBfYXRv bWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAl9CiAKIAlfZHB1X3BsYW5lX3Nl dF9xb3NfcmVtYXAocGxhbmUpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0ODYsODkgKzE0ODEs NiBAQCB2b2lkIGRwdV9wbGFuZV9yZXN0b3JlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQogCWRw dV9wbGFuZV9hdG9taWNfdXBkYXRlKHBsYW5lLCBwbGFuZS0+c3RhdGUpOwogfQogCi0vKiBoZWxw ZXIgdG8gaW5zdGFsbCBwcm9wZXJ0aWVzIHdoaWNoIGFyZSBjb21tb24gdG8gcGxhbmVzIGFuZCBj cnRjcyAqLwotc3RhdGljIHZvaWQgX2RwdV9wbGFuZV9pbnN0YWxsX3Byb3BlcnRpZXMoc3RydWN0 IGRybV9wbGFuZSAqcGxhbmUsCi0Jc3RydWN0IGRwdV9tZHNzX2NmZyAqY2F0YWxvZywgdTMyIG1h c3Rlcl9wbGFuZV9pZCkKLXsKLQlzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1ID0gdG9fZHB1X3BsYW5l KHBsYW5lKTsKLQlpbnQgenBvc19tYXggPSAyNTU7Ci0JaW50IHpwb3NfZGVmID0gMDsKLQotCWlm ICghcGxhbmUgfHwgIXBkcHUpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHBsYW5lXG4iKTsKLQkJ cmV0dXJuOwotCX0gZWxzZSBpZiAoIXBkcHUtPnBpcGVfaHcgfHwgIXBkcHUtPnBpcGVfc2Jsaykg ewotCQlEUFVfRVJST1IoImludmFsaWQgcGxhbmUsIHBpcGVfaHcgJWQgcGlwZV9zYmxrICVkXG4i LAotCQkJCXBkcHUtPnBpcGVfaHcgIT0gMCwgcGRwdS0+cGlwZV9zYmxrICE9IDApOwotCQlyZXR1 cm47Ci0JfSBlbHNlIGlmICghY2F0YWxvZykgewotCQlEUFVfRVJST1IoImludmFsaWQgY2F0YWxv Z1xuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlwZHB1LT5jYXRhbG9nID0gY2F0YWxvZzsKLQotCWlm IChkcHVfaXNfY3VzdG9tX2NsaWVudCgpKSB7Ci0JCWlmIChjYXRhbG9nLT5taXhlcl9jb3VudCAm JgotCQkJCWNhdGFsb2ctPm1peGVyWzBdLnNibGstPm1heGJsZW5kc3RhZ2VzKSB7Ci0JCQl6cG9z X21heCA9IGNhdGFsb2ctPm1peGVyWzBdLnNibGstPm1heGJsZW5kc3RhZ2VzIC0gMTsKLQkJCWlm ICh6cG9zX21heCA+IERQVV9TVEFHRV9NQVggLSBEUFVfU1RBR0VfMCAtIDEpCi0JCQkJenBvc19t YXggPSBEUFVfU1RBR0VfTUFYIC0gRFBVX1NUQUdFXzAgLSAxOwotCQl9Ci0JfSBlbHNlIGlmIChw bGFuZS0+dHlwZSAhPSBEUk1fUExBTkVfVFlQRV9QUklNQVJZKSB7Ci0JCS8qIHJlc2VydmUgenBv cyA9PSAwIGZvciBwcmltYXJ5IHBsYW5lcyAqLwotCQl6cG9zX2RlZiA9IGRybV9wbGFuZV9pbmRl eChwbGFuZSkgKyAxOwotCX0KLX0KLQotc3RhdGljIGludCBkcHVfcGxhbmVfYXRvbWljX3NldF9w cm9wZXJ0eShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKLQkJc3RydWN0IGRybV9wbGFuZV9zdGF0 ZSAqc3RhdGUsIHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LAotCQl1aW50NjRfdCB2YWwp Ci17Ci0Jc3RydWN0IGRwdV9wbGFuZSAqcGRwdSA9IHBsYW5lID8gdG9fZHB1X3BsYW5lKHBsYW5l KSA6IE5VTEw7Ci0Jc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRlOwotCWludCByZXQgPSAt RUlOVkFMOwotCi0JRFBVX0RFQlVHX1BMQU5FKHBkcHUsICJcbiIpOwotCi0JaWYgKCFwbGFuZSkg ewotCQlEUFVfRVJST1IoImludmFsaWQgcGxhbmVcbiIpOwotCX0gZWxzZSBpZiAoIXN0YXRlKSB7 Ci0JCURQVV9FUlJPUl9QTEFORShwZHB1LCAiaW52YWxpZCBzdGF0ZVxuIik7Ci0JfSBlbHNlIHsK LQkJcHN0YXRlID0gdG9fZHB1X3BsYW5lX3N0YXRlKHN0YXRlKTsKLQkJcmV0ID0gbXNtX3Byb3Bl cnR5X2F0b21pY19zZXQoJnBkcHUtPnByb3BlcnR5X2luZm8sCi0JCQkJJnBzdGF0ZS0+cHJvcGVy dHlfc3RhdGUsIHByb3BlcnR5LCB2YWwpOwotCX0KLQotCURQVV9ERUJVR19QTEFORShwZHB1LCAi JXNbJWRdIDw9IDB4JWxseCByZXQ9JWRcbiIsCi0JCQlwcm9wZXJ0eS0+bmFtZSwgcHJvcGVydHkt PmJhc2UuaWQsIHZhbCwgcmV0KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgZHB1 X3BsYW5lX2F0b21pY19nZXRfcHJvcGVydHkoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCi0JCWNv bnN0IHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlLAotCQlzdHJ1Y3QgZHJtX3Byb3BlcnR5 ICpwcm9wZXJ0eSwgdWludDY0X3QgKnZhbCkKLXsKLQlzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1ID0g cGxhbmUgPyB0b19kcHVfcGxhbmUocGxhbmUpIDogTlVMTDsKLQlzdHJ1Y3QgZHB1X3BsYW5lX3N0 YXRlICpwc3RhdGU7Ci0JaW50IHJldCA9IC1FSU5WQUw7Ci0KLQlpZiAoIXBsYW5lKSB7Ci0JCURQ VV9FUlJPUigiaW52YWxpZCBwbGFuZVxuIik7Ci0JfSBlbHNlIGlmICghc3RhdGUpIHsKLQkJRFBV X0VSUk9SKCJpbnZhbGlkIHN0YXRlXG4iKTsKLQl9IGVsc2UgewotCQlEUFVfREVCVUdfUExBTkUo cGRwdSwgIlxuIik7Ci0JCXBzdGF0ZSA9IHRvX2RwdV9wbGFuZV9zdGF0ZShzdGF0ZSk7Ci0JCXJl dCA9IG1zbV9wcm9wZXJ0eV9hdG9taWNfZ2V0KCZwZHB1LT5wcm9wZXJ0eV9pbmZvLAotCQkJCSZw c3RhdGUtPnByb3BlcnR5X3N0YXRlLCBwcm9wZXJ0eSwgdmFsKTsKLQl9Ci0KLQlyZXR1cm4gcmV0 OwotfQotCiBzdGF0aWMgdm9pZCBkcHVfcGxhbmVfZGVzdHJveShzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSkKIHsKIAlzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1ID0gcGxhbmUgPyB0b19kcHVfcGxhbmUo cGxhbmUpIDogTlVMTDsKQEAgLTE1NzgsOSArMTQ5MCw2IEBAIHN0YXRpYyB2b2lkIGRwdV9wbGFu ZV9kZXN0cm95KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQogCWlmIChwZHB1KSB7CiAJCV9kcHVf cGxhbmVfc2V0X3Fvc19jdHJsKHBsYW5lLCBmYWxzZSwgRFBVX1BMQU5FX1FPU19QQU5JQ19DVFJM KTsKIAotCQlpZiAocGRwdS0+YmxvYl9pbmZvKQotCQkJZHJtX3Byb3BlcnR5X2Jsb2JfcHV0KHBk cHUtPmJsb2JfaW5mbyk7Ci0JCW1zbV9wcm9wZXJ0eV9kZXN0cm95KCZwZHB1LT5wcm9wZXJ0eV9p bmZvKTsKIAkJbXV0ZXhfZGVzdHJveSgmcGRwdS0+bG9jayk7CiAKIAkJZHJtX3BsYW5lX2hlbHBl cl9kaXNhYmxlKHBsYW5lKTsKQEAgLTE1OTgsNyArMTUwNyw2IEBAIHN0YXRpYyB2b2lkIGRwdV9w bGFuZV9kZXN0cm95KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQogc3RhdGljIHZvaWQgZHB1X3Bs YW5lX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJCXN0cnVjdCBkcm1f cGxhbmVfc3RhdGUgKnN0YXRlKQogewotCXN0cnVjdCBkcHVfcGxhbmUgKnBkcHU7CiAJc3RydWN0 IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRlOwogCiAJaWYgKCFwbGFuZSB8fCAhc3RhdGUpIHsKQEAg LTE2MDcsMTggKzE1MTUsMTMgQEAgc3RhdGljIHZvaWQgZHB1X3BsYW5lX2Rlc3Ryb3lfc3RhdGUo c3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJCXJldHVybjsKIAl9CiAKLQlwZHB1ID0gdG9fZHB1 X3BsYW5lKHBsYW5lKTsKIAlwc3RhdGUgPSB0b19kcHVfcGxhbmVfc3RhdGUoc3RhdGUpOwogCi0J RFBVX0RFQlVHX1BMQU5FKHBkcHUsICJcbiIpOwotCiAJLyogcmVtb3ZlIHJlZiBjb3VudCBmb3Ig ZnJhbWUgYnVmZmVycyAqLwogCWlmIChzdGF0ZS0+ZmIpCiAJCWRybV9mcmFtZWJ1ZmZlcl9wdXQo c3RhdGUtPmZiKTsKIAotCS8qIGRlc3Ryb3kgdmFsdWUgaGVscGVyICovCi0JbXNtX3Byb3BlcnR5 X2Rlc3Ryb3lfc3RhdGUoJnBkcHUtPnByb3BlcnR5X2luZm8sIHBzdGF0ZSwKLQkJCSZwc3RhdGUt PnByb3BlcnR5X3N0YXRlKTsKKwlrZnJlZShwc3RhdGUpOwogfQogCiBzdGF0aWMgc3RydWN0IGRy bV9wbGFuZV9zdGF0ZSAqCkBAIC0xNjM4LDcgKzE1NDEsNyBAQCBzdGF0aWMgdm9pZCBkcHVfcGxh bmVfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAogCW9sZF9zdGF0ZSA9 IHRvX2RwdV9wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOwogCXBkcHUgPSB0b19kcHVfcGxhbmUo cGxhbmUpOwotCXBzdGF0ZSA9IG1zbV9wcm9wZXJ0eV9hbGxvY19zdGF0ZSgmcGRwdS0+cHJvcGVy dHlfaW5mbyk7CisJcHN0YXRlID0ga21lbWR1cChvbGRfc3RhdGUsIHNpemVvZigqb2xkX3N0YXRl KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwc3RhdGUpIHsKIAkJRFBVX0VSUk9SX1BMQU5FKHBkcHUs ICJmYWlsZWQgdG8gYWxsb2NhdGUgc3RhdGVcbiIpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTE2NDYs MTAgKzE1NDksNiBAQCBzdGF0aWMgdm9pZCBkcHVfcGxhbmVfZGVzdHJveV9zdGF0ZShzdHJ1Y3Qg ZHJtX3BsYW5lICpwbGFuZSwKIAogCURQVV9ERUJVR19QTEFORShwZHB1LCAiXG4iKTsKIAotCS8q IGR1cGxpY2F0ZSB2YWx1ZSBoZWxwZXIgKi8KLQltc21fcHJvcGVydHlfZHVwbGljYXRlX3N0YXRl KCZwZHB1LT5wcm9wZXJ0eV9pbmZvLCBvbGRfc3RhdGUsIHBzdGF0ZSwKLQkJCSZwc3RhdGUtPnBy b3BlcnR5X3N0YXRlLCBwc3RhdGUtPnByb3BlcnR5X3ZhbHVlcyk7Ci0KIAlwc3RhdGUtPnBlbmRp bmcgPSBmYWxzZTsKIAogCV9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRl KHBsYW5lLCAmcHN0YXRlLT5iYXNlKTsKQEAgLTE2NzYsMTcgKzE1NzUsMTIgQEAgc3RhdGljIHZv aWQgZHB1X3BsYW5lX3Jlc2V0KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQogCQlwbGFuZS0+c3Rh dGUgPSAwOwogCX0KIAotCXBzdGF0ZSA9IG1zbV9wcm9wZXJ0eV9hbGxvY19zdGF0ZSgmcGRwdS0+ cHJvcGVydHlfaW5mbyk7CisJcHN0YXRlID0ga3phbGxvYyhzaXplb2YoKnBzdGF0ZSksIEdGUF9L RVJORUwpOwogCWlmICghcHN0YXRlKSB7CiAJCURQVV9FUlJPUl9QTEFORShwZHB1LCAiZmFpbGVk IHRvIGFsbG9jYXRlIHN0YXRlXG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCS8qIHJlc2V0IHZhbHVl IGhlbHBlciAqLwotCW1zbV9wcm9wZXJ0eV9yZXNldF9zdGF0ZSgmcGRwdS0+cHJvcGVydHlfaW5m bywgcHN0YXRlLAotCQkJJnBzdGF0ZS0+cHJvcGVydHlfc3RhdGUsCi0JCQlwc3RhdGUtPnByb3Bl cnR5X3ZhbHVlcyk7Ci0KIAlwc3RhdGUtPmJhc2UucGxhbmUgPSBwbGFuZTsKIAogCXBsYW5lLT5z dGF0ZSA9ICZwc3RhdGUtPmJhc2U7CkBAIC0xOTE5LDggKzE4MTMsNiBAQCBzdGF0aWMgdm9pZCBk cHVfcGxhbmVfZWFybHlfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKIAkJLnVw ZGF0ZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX3VwZGF0ZV9wbGFuZSwKIAkJLmRpc2FibGVf cGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxlX3BsYW5lLAogCQkuZGVzdHJveSA9IGRw dV9wbGFuZV9kZXN0cm95LAotCQkuYXRvbWljX3NldF9wcm9wZXJ0eSA9IGRwdV9wbGFuZV9hdG9t aWNfc2V0X3Byb3BlcnR5LAotCQkuYXRvbWljX2dldF9wcm9wZXJ0eSA9IGRwdV9wbGFuZV9hdG9t aWNfZ2V0X3Byb3BlcnR5LAogCQkucmVzZXQgPSBkcHVfcGxhbmVfcmVzZXQsCiAJCS5hdG9taWNf ZHVwbGljYXRlX3N0YXRlID0gZHB1X3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZSwKIAkJLmF0b21pY19k ZXN0cm95X3N0YXRlID0gZHB1X3BsYW5lX2Rlc3Ryb3lfc3RhdGUsCkBAIC0yMDY0LDEzICsxOTU2 LDYgQEAgc3RydWN0IGRybV9wbGFuZSAqZHB1X3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKIAkvKiBzdWNjZXNzISBmaW5hbGl6ZSBpbml0aWFsaXphdGlvbiAqLwogCWRybV9wbGFu ZV9oZWxwZXJfYWRkKHBsYW5lLCAmZHB1X3BsYW5lX2hlbHBlcl9mdW5jcyk7CiAKLQltc21fcHJv cGVydHlfaW5pdCgmcGRwdS0+cHJvcGVydHlfaW5mbywgJnBsYW5lLT5iYXNlLCBkZXYsCi0JCQlw cml2LT5wbGFuZV9wcm9wZXJ0eSwgcGRwdS0+cHJvcGVydHlfZGF0YSwKLQkJCVBMQU5FX1BST1Bf Q09VTlQsIFBMQU5FX1BST1BfQkxPQkNPVU5ULAotCQkJc2l6ZW9mKHN0cnVjdCBkcHVfcGxhbmVf c3RhdGUpKTsKLQotCV9kcHVfcGxhbmVfaW5zdGFsbF9wcm9wZXJ0aWVzKHBsYW5lLCBrbXMtPmNh dGFsb2csIG1hc3Rlcl9wbGFuZV9pZCk7Ci0KIAkvKiBzYXZlIHVzZXIgZnJpZW5kbHkgcGlwZSBu YW1lIGZvciBsYXRlciAqLwogCXNucHJpbnRmKHBkcHUtPnBpcGVfbmFtZSwgRFBVX05BTUVfU0la RSwgInBsYW5lJXUiLCBwbGFuZS0+YmFzZS5pZCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X3BsYW5lLmgKaW5kZXggYTA2YzhiNC4uZjZmZTZkZCAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmgKKysrIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmgKQEAgLTIxLDcgKzIxLDYgQEAKIAogI2luY2x1 ZGUgPGRybS9kcm1fY3J0Yy5oPgogCi0jaW5jbHVkZSAibXNtX3Byb3AuaCIKICNpbmNsdWRlICJk cHVfa21zLmgiCiAjaW5jbHVkZSAiZHB1X2h3X21kc3MuaCIKICNpbmNsdWRlICJkcHVfaHdfc3Nw cC5oIgpAQCAtNDQsOCArNDMsNiBAQAogICovCiBzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlIHsKIAlz dHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIGJhc2U7Ci0Jc3RydWN0IG1zbV9wcm9wZXJ0eV9zdGF0ZSBw cm9wZXJ0eV9zdGF0ZTsKLQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X3ZhbHVlIHByb3BlcnR5X3ZhbHVl c1tQTEFORV9QUk9QX0NPVU5UXTsKIAlzdHJ1Y3QgbXNtX2dlbV9hZGRyZXNzX3NwYWNlICphc3Bh Y2U7CiAJdm9pZCAqaW5wdXRfZmVuY2U7CiAJZW51bSBkcHVfc3RhZ2Ugc3RhZ2U7CkBAIC03NCwx NSArNzEsNiBAQCBzdHJ1Y3QgZHB1X211bHRpcmVjdF9wbGFuZV9zdGF0ZXMgewogCWNvbnRhaW5l cl9vZih4LCBzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlLCBiYXNlKQogCiAvKioKLSAqIGRwdV9wbGFu ZV9nZXRfcHJvcGVydHkgLSBRdWVyeSBpbnRlZ2VyIHZhbHVlIG9mIHBsYW5lIHByb3BlcnR5Ci0g KiBAUzogUG9pbnRlciB0byBwbGFuZSBzdGF0ZQotICogQFg6IFByb3BlcnR5IGluZGV4LCBmcm9t IGVudW0gbXNtX21kcF9wbGFuZV9wcm9wZXJ0eQotICogUmV0dXJuczogSW50ZWdlciB2YWx1ZSBv ZiByZXF1ZXN0ZWQgcHJvcGVydHkKLSAqLwotI2RlZmluZSBkcHVfcGxhbmVfZ2V0X3Byb3BlcnR5 KFMsIFgpICgoUykgJiYgKChYKSA8IFBMQU5FX1BST1BfQ09VTlQpID8gXAotCSgoUyktPnByb3Bl cnR5X3ZhbHVlc1soWCldLnZhbHVlKSA6IDApCi0KLS8qKgogICogZHB1X3BsYW5lX3BpcGUgLSBy ZXR1cm4gc3NwcCBpZGVudGlmaWVyIGZvciB0aGUgZ2l2ZW4gcGxhbmUKICAqIEBwbGFuZTogICBQ b2ludGVyIHRvIERSTSBwbGFuZSBvYmplY3QKICAqIFJldHVybnM6IHNzcHAgaWRlbnRpZmllciBv ZiB0aGUgZ2l2ZW4gcGxhbmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Ry di5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKaW5kZXggOGU4MGI0Yi4uZWRiMzk1 ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKKysrIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKQEAgLTc3LDI2ICs3NywxMyBAQCBzdHJ1Y3QgbXNtX2Zp bGVfcHJpdmF0ZSB7CiB9OwogCiBlbnVtIG1zbV9tZHBfcGxhbmVfcHJvcGVydHkgewotCS8qICMg b2YgYmxvYiBwcm9wZXJ0aWVzICovCi0JUExBTkVfUFJPUF9CTE9CQ09VTlQsCi0KIAkvKiByYW5n ZSBwcm9wZXJ0aWVzICovCi0JUExBTkVfUFJPUF9aUE9TID0gUExBTkVfUFJPUF9CTE9CQ09VTlQs CisJUExBTkVfUFJPUF9aUE9TLAogCiAJLyogdG90YWwgIyBvZiBwcm9wZXJ0aWVzICovCiAJUExB TkVfUFJPUF9DT1VOVAogfTsKIAotZW51bSBtc21fbWRwX2NydGNfcHJvcGVydHkgewotCUNSVENf UFJPUF9JTkZPLAotCi0JLyogIyBvZiBibG9iIHByb3BlcnRpZXMgKi8KLQlDUlRDX1BST1BfQkxP QkNPVU5ULAotCi0JLyogdG90YWwgIyBvZiBwcm9wZXJ0aWVzICovCi0JQ1JUQ19QUk9QX0NPVU5U Ci19OwotCiBzdHJ1Y3QgbXNtX3ZibGFua19jdHJsIHsKIAlzdHJ1Y3Qga3RocmVhZF93b3JrIHdv cms7CiAJc3RydWN0IGxpc3RfaGVhZCBldmVudF9saXN0OwpAQCAtMzY0LDcgKzM1MSw2IEBAIHN0 cnVjdCBtc21fZHJtX3ByaXZhdGUgewogCiAJLyogUHJvcGVydGllcyAqLwogCXN0cnVjdCBkcm1f cHJvcGVydHkgKnBsYW5lX3Byb3BlcnR5W1BMQU5FX1BST1BfQ09VTlRdOwotCXN0cnVjdCBkcm1f cHJvcGVydHkgKmNydGNfcHJvcGVydHlbQ1JUQ19QUk9QX0NPVU5UXTsKIAogCS8qIENvbG9yIHBy b2Nlc3NpbmcgcHJvcGVydGllcyBmb3IgdGhlIGNydGMgKi8KIAlzdHJ1Y3QgZHJtX3Byb3BlcnR5 ICoqY3BfcHJvcGVydHk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9wcm9w LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9wcm9wLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDhmMjdjZGUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21f cHJvcC5jCisrKyAvZGV2L251bGwKQEAgLTEsNjg4ICswLDAgQEAKLS8qIENvcHlyaWdodCAoYykg MjAxNi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq Ci0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgotICovCi0KLSNpbmNsdWRlICJtc21fcHJvcC5oIgotCi12b2lkIG1zbV9wcm9wZXJ0 eV9pbml0KHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbywKLQkJc3RydWN0IGRybV9tb2Rl X29iamVjdCAqYmFzZSwKLQkJc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJc3RydWN0IGRybV9w cm9wZXJ0eSAqKnByb3BlcnR5X2FycmF5LAotCQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X2RhdGEgKnBy b3BlcnR5X2RhdGEsCi0JCXVpbnQzMl90IHByb3BlcnR5X2NvdW50LAotCQl1aW50MzJfdCBibG9i X2NvdW50LAotCQl1aW50MzJfdCBzdGF0ZV9zaXplKQotewotCS8qIHByZXZlbnQgYWNjZXNzIGlm IGFueSBvZiB0aGVzZSBhcmUgTlVMTCAqLwotCWlmICghYmFzZSB8fCAhZGV2IHx8ICFwcm9wZXJ0 eV9hcnJheSB8fCAhcHJvcGVydHlfZGF0YSkgewotCQlwcm9wZXJ0eV9jb3VudCA9IDA7Ci0JCWJs b2JfY291bnQgPSAwOwotCi0JCURSTV9FUlJPUigiaW52YWxpZCBhcmd1bWVudHMsIGZvcmNpbmcg emVybyBwcm9wZXJ0aWVzXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIGNhbid0IGhhdmUgbW9y ZSBibG9iIHByb3BlcnRpZXMgdGhhbiB0b3RhbCBwcm9wZXJ0aWVzICovCi0JaWYgKGJsb2JfY291 bnQgPiBwcm9wZXJ0eV9jb3VudCkgewotCQlibG9iX2NvdW50ID0gcHJvcGVydHlfY291bnQ7Ci0K LQkJREJHKCJDYXBwaW5nIG51bWJlciBvZiBibG9iIHByb3BlcnRpZXMgdG8gJWQiLCBibG9iX2Nv dW50KTsKLQl9Ci0KLQlpZiAoIWluZm8pIHsKLQkJRFJNX0VSUk9SKCJpbmZvIHBvaW50ZXIgaXMg TlVMTFxuIik7Ci0JfSBlbHNlIHsKLQkJaW5mby0+YmFzZSA9IGJhc2U7Ci0JCWluZm8tPmRldiA9 IGRldjsKLQkJaW5mby0+cHJvcGVydHlfYXJyYXkgPSBwcm9wZXJ0eV9hcnJheTsKLQkJaW5mby0+ cHJvcGVydHlfZGF0YSA9IHByb3BlcnR5X2RhdGE7Ci0JCWluZm8tPnByb3BlcnR5X2NvdW50ID0g cHJvcGVydHlfY291bnQ7Ci0JCWluZm8tPmJsb2JfY291bnQgPSBibG9iX2NvdW50OwotCQlpbmZv LT5pbnN0YWxsX3JlcXVlc3QgPSAwOwotCQlpbmZvLT5pbnN0YWxsX2NvdW50ID0gMDsKLQkJaW5m by0+cmVjZW50X2lkeCA9IDA7Ci0JCWluZm8tPmlzX2FjdGl2ZSA9IGZhbHNlOwotCQlpbmZvLT5z dGF0ZV9zaXplID0gc3RhdGVfc2l6ZTsKLQkJaW5mby0+c3RhdGVfY2FjaGVfc2l6ZSA9IDA7Ci0J CW11dGV4X2luaXQoJmluZm8tPnByb3BlcnR5X2xvY2spOwotCi0JCW1lbXNldChwcm9wZXJ0eV9k YXRhLAotCQkJCTAsCi0JCQkJc2l6ZW9mKHN0cnVjdCBtc21fcHJvcGVydHlfZGF0YSkgKgotCQkJ CXByb3BlcnR5X2NvdW50KTsKLQl9Ci19Ci0KLXZvaWQgbXNtX3Byb3BlcnR5X2Rlc3Ryb3koc3Ry dWN0IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvKQotewotCWlmICghaW5mbykKLQkJcmV0dXJuOwot Ci0JLyogZnJlZSBzdGF0ZSBjYWNoZSAqLwotCXdoaWxlIChpbmZvLT5zdGF0ZV9jYWNoZV9zaXpl ID4gMCkKLQkJa2ZyZWUoaW5mby0+c3RhdGVfY2FjaGVbLS0oaW5mby0+c3RhdGVfY2FjaGVfc2l6 ZSldKTsKLQotCW11dGV4X2Rlc3Ryb3koJmluZm8tPnByb3BlcnR5X2xvY2spOwotfQotCi1pbnQg bXNtX3Byb3BlcnR5X3BvcF9kaXJ0eShzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmluZm8sCi0J CXN0cnVjdCBtc21fcHJvcGVydHlfc3RhdGUgKnByb3BlcnR5X3N0YXRlKQotewotCXN0cnVjdCBs aXN0X2hlYWQgKml0ZW07Ci0JaW50IHJjID0gMDsKLQotCWlmICghaW5mbyB8fCAhcHJvcGVydHlf c3RhdGUgfHwgIXByb3BlcnR5X3N0YXRlLT52YWx1ZXMpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlk IGFyZ3VtZW50KHMpXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygm aW5mby0+cHJvcGVydHlfbG9jayk7Ci0JaWYgKGxpc3RfZW1wdHkoJnByb3BlcnR5X3N0YXRlLT5k aXJ0eV9saXN0KSkgewotCQlyYyA9IC1FQUdBSU47Ci0JfSBlbHNlIHsKLQkJaXRlbSA9IHByb3Bl cnR5X3N0YXRlLT5kaXJ0eV9saXN0Lm5leHQ7Ci0JCWxpc3RfZGVsX2luaXQoaXRlbSk7Ci0JCXJj ID0gY29udGFpbmVyX29mKGl0ZW0sIHN0cnVjdCBtc21fcHJvcGVydHlfdmFsdWUsIGRpcnR5X25v ZGUpCi0JCQktIHByb3BlcnR5X3N0YXRlLT52YWx1ZXM7Ci0JCURSTV9ERUJVR19LTVMoInByb3Bl cnR5ICVkIGRpcnR5XG4iLCByYyk7Ci0JfQotCW11dGV4X3VubG9jaygmaW5mby0+cHJvcGVydHlf bG9jayk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogX21zbV9wcm9wZXJ0eV9zZXRfZGly dHlfbm9fbG9jayAtIGZsYWcgZ2l2ZW4gcHJvcGVydHkgYXMgYmVpbmcgZGlydHkKLSAqICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgbXV0ZXgg cHJvdGVjdCB0aGUKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJ0eSBs aW5rZWQgbGlzdC4KLSAqIEBpbmZvOiBQb2ludGVyIHRvIHByb3BlcnR5IGluZm8gY29udGFpbmVy IHN0cnVjdAotICogQHByb3BlcnR5X3N0YXRlOiBQb2ludGVyIHRvIHByb3BlcnR5IHN0YXRlIGNv bnRhaW5lciBzdHJ1Y3QKLSAqIEBwcm9wZXJ0eV9pZHg6IFByb3BlcnR5IGluZGV4Ci0gKi8KLXN0 YXRpYyB2b2lkIF9tc21fcHJvcGVydHlfc2V0X2RpcnR5X25vX2xvY2soCi0JCXN0cnVjdCBtc21f cHJvcGVydHlfaW5mbyAqaW5mbywKLQkJc3RydWN0IG1zbV9wcm9wZXJ0eV9zdGF0ZSAqcHJvcGVy dHlfc3RhdGUsCi0JCXVpbnQzMl90IHByb3BlcnR5X2lkeCkKLXsKLQlpZiAoIWluZm8gfHwgIXBy b3BlcnR5X3N0YXRlIHx8ICFwcm9wZXJ0eV9zdGF0ZS0+dmFsdWVzIHx8Ci0JCQlwcm9wZXJ0eV9p ZHggPj0gaW5mby0+cHJvcGVydHlfY291bnQpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIGFyZ3Vt ZW50KHMpLCBpZHggJXVcbiIsIHByb3BlcnR5X2lkeCk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBh dm9pZCByZS1pbnNlcnRpbmcgaWYgYWxyZWFkeSBkaXJ0eSAqLwotCWlmICghbGlzdF9lbXB0eSgm cHJvcGVydHlfc3RhdGUtPnZhbHVlc1twcm9wZXJ0eV9pZHhdLmRpcnR5X25vZGUpKSB7Ci0JCURS TV9ERUJVR19LTVMoInByb3BlcnR5ICV1IGFscmVhZHkgZGlydHlcbiIsIHByb3BlcnR5X2lkeCk7 Ci0JCXJldHVybjsKLQl9Ci0KLQlsaXN0X2FkZF90YWlsKCZwcm9wZXJ0eV9zdGF0ZS0+dmFsdWVz W3Byb3BlcnR5X2lkeF0uZGlydHlfbm9kZSwKLQkJCSZwcm9wZXJ0eV9zdGF0ZS0+ZGlydHlfbGlz dCk7Ci19Ci0KLS8qKgotICogX21zbV9wcm9wZXJ0eV9pbnN0YWxsX2ludGVnZXIgLSBpbnN0YWxs IHN0YW5kYXJkIGRybSByYW5nZSBwcm9wZXJ0eQotICogQGluZm86IFBvaW50ZXIgdG8gcHJvcGVy dHkgaW5mbyBjb250YWluZXIgc3RydWN0Ci0gKiBAbmFtZTogUHJvcGVydHkgbmFtZQotICogQGZs YWdzOiBPdGhlciBwcm9wZXJ0eSB0eXBlIGZsYWdzLCBlLmcuIERSTV9NT0RFX1BST1BfSU1NVVRB QkxFCi0gKiBAbWluOiBNaW4gcHJvcGVydHkgdmFsdWUKLSAqIEBtYXg6IE1heCBwcm9wZXJ0eSB2 YWx1ZQotICogQGluaXQ6IERlZmF1bHQgUHJvcGVydHkgdmFsdWUKLSAqIEBwcm9wZXJ0eV9pZHg6 IFByb3BlcnR5IGluZGV4Ci0gKiBAZm9yY2VfZGlydHk6IFdoZXRoZXIgb3Igbm90IHRvIGZpbHRl ciAnZGlydHknIHN0YXR1cyBvbiB1bmNoYW5nZWQgdmFsdWVzCi0gKi8KLXN0YXRpYyB2b2lkIF9t c21fcHJvcGVydHlfaW5zdGFsbF9pbnRlZ2VyKHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5m bywKLQkJY29uc3QgY2hhciAqbmFtZSwgaW50IGZsYWdzLCB1aW50NjRfdCBtaW4sIHVpbnQ2NF90 IG1heCwKLQkJdWludDY0X3QgaW5pdCwgdWludDMyX3QgcHJvcGVydHlfaWR4LCBib29sIGZvcmNl X2RpcnR5KQotewotCXN0cnVjdCBkcm1fcHJvcGVydHkgKipwcm9wOwotCi0JaWYgKCFpbmZvKQot CQlyZXR1cm47Ci0KLQkrK2luZm8tPmluc3RhbGxfcmVxdWVzdDsKLQotCWlmICghbmFtZSB8fCAo cHJvcGVydHlfaWR4ID49IGluZm8tPnByb3BlcnR5X2NvdW50KSkgewotCQlEUk1fRVJST1IoImlu dmFsaWQgYXJndW1lbnQocyksICVzXG4iLCBuYW1lID8gbmFtZSA6ICJudWxsIik7Ci0JfSBlbHNl IHsKLQkJcHJvcCA9ICZpbmZvLT5wcm9wZXJ0eV9hcnJheVtwcm9wZXJ0eV9pZHhdOwotCQkvKgot CQkgKiBQcm9wZXJ0aWVzIG5lZWQgdG8gYmUgYXR0YWNoZWQgdG8gZWFjaCBkcm0gb2JqZWN0IHRo YXQKLQkJICogdXNlcyB0aGVtLCBidXQgb25seSBuZWVkIHRvIGJlIGNyZWF0ZWQgb25jZQotCQkg Ki8KLQkJaWYgKCpwcm9wID09IDApIHsKLQkJCSpwcm9wID0gZHJtX3Byb3BlcnR5X2NyZWF0ZV9y YW5nZShpbmZvLT5kZXYsCi0JCQkJCWZsYWdzLCBuYW1lLCBtaW4sIG1heCk7Ci0JCQlpZiAoKnBy b3AgPT0gMCkKLQkJCQlEUk1fRVJST1IoImNyZWF0ZSAlcyBwcm9wZXJ0eSBmYWlsZWRcbiIsIG5h bWUpOwotCQl9Ci0KLQkJLyogc2F2ZSBpbml0IHZhbHVlIGZvciBsYXRlciAqLwotCQlpbmZvLT5w cm9wZXJ0eV9kYXRhW3Byb3BlcnR5X2lkeF0uZGVmYXVsdF92YWx1ZSA9IGluaXQ7Ci0JCWluZm8t PnByb3BlcnR5X2RhdGFbcHJvcGVydHlfaWR4XS5mb3JjZV9kaXJ0eSA9IGZvcmNlX2RpcnR5Owot Ci0JCS8qIGFsd2F5cyBhdHRhY2ggcHJvcGVydHksIGlmIGNyZWF0ZWQgKi8KLQkJaWYgKCpwcm9w KSB7Ci0JCQlkcm1fb2JqZWN0X2F0dGFjaF9wcm9wZXJ0eShpbmZvLT5iYXNlLCAqcHJvcCwgaW5p dCk7Ci0JCQkrK2luZm8tPmluc3RhbGxfY291bnQ7Ci0JCX0KLQl9Ci19Ci0KLXZvaWQgbXNtX3By b3BlcnR5X2luc3RhbGxfcmFuZ2Uoc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvLAotCQlj b25zdCBjaGFyICpuYW1lLCBpbnQgZmxhZ3MsIHVpbnQ2NF90IG1pbiwgdWludDY0X3QgbWF4LAot CQl1aW50NjRfdCBpbml0LCB1aW50MzJfdCBwcm9wZXJ0eV9pZHgpCi17Ci0JX21zbV9wcm9wZXJ0 eV9pbnN0YWxsX2ludGVnZXIoaW5mbywgbmFtZSwgZmxhZ3MsCi0JCQltaW4sIG1heCwgaW5pdCwg cHJvcGVydHlfaWR4LCBmYWxzZSk7Ci19Ci0KLXZvaWQgbXNtX3Byb3BlcnR5X2luc3RhbGxfdm9s YXRpbGVfcmFuZ2Uoc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvLAotCQljb25zdCBjaGFy ICpuYW1lLCBpbnQgZmxhZ3MsIHVpbnQ2NF90IG1pbiwgdWludDY0X3QgbWF4LAotCQl1aW50NjRf dCBpbml0LCB1aW50MzJfdCBwcm9wZXJ0eV9pZHgpCi17Ci0JX21zbV9wcm9wZXJ0eV9pbnN0YWxs X2ludGVnZXIoaW5mbywgbmFtZSwgZmxhZ3MsCi0JCQltaW4sIG1heCwgaW5pdCwgcHJvcGVydHlf aWR4LCB0cnVlKTsKLX0KLQotdm9pZCBtc21fcHJvcGVydHlfaW5zdGFsbF9yb3RhdGlvbihzdHJ1 Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmluZm8sCi0JCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLCB1 bnNpZ25lZCBpbnQgcm90YXRpb24sCi0JCXVuc2lnbmVkIGludCBzdXBwb3J0ZWRfcm90YXRpb25z LCB1aW50MzJfdCBwcm9wZXJ0eV9pZHgpCi17Ci0JaWYgKCFpbmZvIHx8ICFwbGFuZSkKLQkJcmV0 dXJuOwotCi0JKytpbmZvLT5pbnN0YWxsX3JlcXVlc3Q7Ci0KLQlpZiAocHJvcGVydHlfaWR4ID49 IGluZm8tPnByb3BlcnR5X2NvdW50KSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBwcm9wZXJ0eSBp bmRleCAlZFxuIiwgcHJvcGVydHlfaWR4KTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChkcm1fcGxh bmVfY3JlYXRlX3JvdGF0aW9uX3Byb3BlcnR5KHBsYW5lLAotCQkJcm90YXRpb24sIHN1cHBvcnRl ZF9yb3RhdGlvbnMpKSB7Ci0JCURSTV9FUlJPUigiY3JlYXRlIHJvdGF0aW9uIHByb3BlcnR5IGZh aWxlZFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAocGxhbmUtPnJvdGF0aW9uX3Byb3BlcnR5 KSB7Ci0JCWluZm8tPnByb3BlcnR5X2FycmF5W3Byb3BlcnR5X2lkeF0gPSBwbGFuZS0+cm90YXRp b25fcHJvcGVydHk7Ci0KLQkJLyogc2F2ZSBpbml0IHZhbHVlIGZvciBsYXRlciAqLwotCQlpbmZv LT5wcm9wZXJ0eV9kYXRhW3Byb3BlcnR5X2lkeF0uZGVmYXVsdF92YWx1ZSA9IHJvdGF0aW9uOwot CQlpbmZvLT5wcm9wZXJ0eV9kYXRhW3Byb3BlcnR5X2lkeF0uZm9yY2VfZGlydHkgPSBmYWxzZTsK LQotCQkrK2luZm8tPmluc3RhbGxfY291bnQ7Ci0JfQotfQotCi12b2lkIG1zbV9wcm9wZXJ0eV9p bnN0YWxsX2VudW0oc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvLAotCQljb25zdCBjaGFy ICpuYW1lLCBpbnQgZmxhZ3MsIGludCBpc19iaXRtYXNrLAotCQljb25zdCBzdHJ1Y3QgZHJtX3By b3BfZW51bV9saXN0ICp2YWx1ZXMsIGludCBudW1fdmFsdWVzLAotCQl1aW50MzJfdCBwcm9wZXJ0 eV9pZHgpCi17Ci0Jc3RydWN0IGRybV9wcm9wZXJ0eSAqKnByb3A7Ci0KLQlpZiAoIWluZm8pCi0J CXJldHVybjsKLQotCSsraW5mby0+aW5zdGFsbF9yZXF1ZXN0OwotCi0JaWYgKCFuYW1lIHx8ICF2 YWx1ZXMgfHwgIW51bV92YWx1ZXMgfHwKLQkJCShwcm9wZXJ0eV9pZHggPj0gaW5mby0+cHJvcGVy dHlfY291bnQpKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBhcmd1bWVudChzKSwgJXNcbiIsIG5h bWUgPyBuYW1lIDogIm51bGwiKTsKLQl9IGVsc2UgewotCQlwcm9wID0gJmluZm8tPnByb3BlcnR5 X2FycmF5W3Byb3BlcnR5X2lkeF07Ci0JCS8qCi0JCSAqIFByb3BlcnRpZXMgbmVlZCB0byBiZSBh dHRhY2hlZCB0byBlYWNoIGRybSBvYmplY3QgdGhhdAotCQkgKiB1c2VzIHRoZW0sIGJ1dCBvbmx5 IG5lZWQgdG8gYmUgY3JlYXRlZCBvbmNlCi0JCSAqLwotCQlpZiAoKnByb3AgPT0gMCkgewotCQkJ LyogJ2JpdG1hc2snIGlzIGEgc3BlY2lhbCB0eXBlIG9mICdlbnVtJyAqLwotCQkJaWYgKGlzX2Jp dG1hc2spCi0JCQkJKnByb3AgPSBkcm1fcHJvcGVydHlfY3JlYXRlX2JpdG1hc2soaW5mby0+ZGV2 LAotCQkJCQkJRFJNX01PREVfUFJPUF9CSVRNQVNLIHwgZmxhZ3MsCi0JCQkJCQluYW1lLCB2YWx1 ZXMsIG51bV92YWx1ZXMsIC0xKTsKLQkJCWVsc2UKLQkJCQkqcHJvcCA9IGRybV9wcm9wZXJ0eV9j cmVhdGVfZW51bShpbmZvLT5kZXYsCi0JCQkJCQlEUk1fTU9ERV9QUk9QX0VOVU0gfCBmbGFncywK LQkJCQkJCW5hbWUsIHZhbHVlcywgbnVtX3ZhbHVlcyk7Ci0JCQlpZiAoKnByb3AgPT0gMCkKLQkJ CQlEUk1fRVJST1IoImNyZWF0ZSAlcyBwcm9wZXJ0eSBmYWlsZWRcbiIsIG5hbWUpOwotCQl9Ci0K LQkJLyogc2F2ZSBpbml0IHZhbHVlIGZvciBsYXRlciAqLwotCQlpbmZvLT5wcm9wZXJ0eV9kYXRh W3Byb3BlcnR5X2lkeF0uZGVmYXVsdF92YWx1ZSA9IDA7Ci0JCWluZm8tPnByb3BlcnR5X2RhdGFb cHJvcGVydHlfaWR4XS5mb3JjZV9kaXJ0eSA9IGZhbHNlOwotCi0JCS8qIHNlbGVjdCBmaXJzdCBk ZWZpbmVkIHZhbHVlIGZvciBlbnVtcyAqLwotCQlpZiAoIWlzX2JpdG1hc2spCi0JCQlpbmZvLT5w cm9wZXJ0eV9kYXRhW3Byb3BlcnR5X2lkeF0uZGVmYXVsdF92YWx1ZSA9Ci0JCQkJdmFsdWVzLT50 eXBlOwotCi0JCS8qIGFsd2F5cyBhdHRhY2ggcHJvcGVydHksIGlmIGNyZWF0ZWQgKi8KLQkJaWYg KCpwcm9wKSB7Ci0JCQlkcm1fb2JqZWN0X2F0dGFjaF9wcm9wZXJ0eShpbmZvLT5iYXNlLCAqcHJv cCwKLQkJCQkJaW5mby0+cHJvcGVydHlfZGF0YQotCQkJCQlbcHJvcGVydHlfaWR4XS5kZWZhdWx0 X3ZhbHVlKTsKLQkJCSsraW5mby0+aW5zdGFsbF9jb3VudDsKLQkJfQotCX0KLX0KLQotdm9pZCBt c21fcHJvcGVydHlfaW5zdGFsbF9ibG9iKHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbywK LQkJY29uc3QgY2hhciAqbmFtZSwgaW50IGZsYWdzLCB1aW50MzJfdCBwcm9wZXJ0eV9pZHgpCi17 Ci0Jc3RydWN0IGRybV9wcm9wZXJ0eSAqKnByb3A7Ci0KLQlpZiAoIWluZm8pCi0JCXJldHVybjsK LQotCSsraW5mby0+aW5zdGFsbF9yZXF1ZXN0OwotCi0JaWYgKCFuYW1lIHx8IChwcm9wZXJ0eV9p ZHggPj0gaW5mby0+YmxvYl9jb3VudCkpIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50 KHMpLCAlc1xuIiwgbmFtZSA/IG5hbWUgOiAibnVsbCIpOwotCX0gZWxzZSB7Ci0JCXByb3AgPSAm aW5mby0+cHJvcGVydHlfYXJyYXlbcHJvcGVydHlfaWR4XTsKLQkJLyoKLQkJICogUHJvcGVydGll cyBuZWVkIHRvIGJlIGF0dGFjaGVkIHRvIGVhY2ggZHJtIG9iamVjdCB0aGF0Ci0JCSAqIHVzZXMg dGhlbSwgYnV0IG9ubHkgbmVlZCB0byBiZSBjcmVhdGVkIG9uY2UKLQkJICovCi0JCWlmICgqcHJv cCA9PSAwKSB7Ci0JCQkvKiB1c2UgJ2NyZWF0ZScgZm9yIGJsb2IgcHJvcGVydHkgcGxhY2UgaG9s ZGVyICovCi0JCQkqcHJvcCA9IGRybV9wcm9wZXJ0eV9jcmVhdGUoaW5mby0+ZGV2LAotCQkJCQlE Uk1fTU9ERV9QUk9QX0JMT0IgfCBmbGFncywgbmFtZSwgMCk7Ci0JCQlpZiAoKnByb3AgPT0gMCkK LQkJCQlEUk1fRVJST1IoImNyZWF0ZSAlcyBwcm9wZXJ0eSBmYWlsZWRcbiIsIG5hbWUpOwotCQl9 Ci0KLQkJLyogc2F2ZSBpbml0IHZhbHVlIGZvciBsYXRlciAqLwotCQlpbmZvLT5wcm9wZXJ0eV9k YXRhW3Byb3BlcnR5X2lkeF0uZGVmYXVsdF92YWx1ZSA9IDA7Ci0JCWluZm8tPnByb3BlcnR5X2Rh dGFbcHJvcGVydHlfaWR4XS5mb3JjZV9kaXJ0eSA9IHRydWU7Ci0KLQkJLyogYWx3YXlzIGF0dGFj aCBwcm9wZXJ0eSwgaWYgY3JlYXRlZCAqLwotCQlpZiAoKnByb3ApIHsKLQkJCWRybV9vYmplY3Rf YXR0YWNoX3Byb3BlcnR5KGluZm8tPmJhc2UsICpwcm9wLCAtMSk7Ci0JCQkrK2luZm8tPmluc3Rh bGxfY291bnQ7Ci0JCX0KLQl9Ci19Ci0KLWludCBtc21fcHJvcGVydHlfaW5zdGFsbF9nZXRfc3Rh dHVzKHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbykKLXsKLQlpbnQgcmMgPSAtRU5PTUVN OwotCi0JaWYgKGluZm8gJiYgKGluZm8tPmluc3RhbGxfcmVxdWVzdCA9PSBpbmZvLT5pbnN0YWxs X2NvdW50KSkKLQkJcmMgPSAwOwotCi0JcmV0dXJuIHJjOwotfQotCi1pbnQgbXNtX3Byb3BlcnR5 X2luZGV4KHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbywKLQkJc3RydWN0IGRybV9wcm9w ZXJ0eSAqcHJvcGVydHkpCi17Ci0JdWludDMyX3QgY291bnQ7Ci0JaW50MzJfdCBpZHg7Ci0JaW50 IHJjID0gLUVJTlZBTDsKLQotCWlmICghaW5mbyB8fCAhcHJvcGVydHkpIHsKLQkJRFJNX0VSUk9S KCJpbnZhbGlkIGFyZ3VtZW50KHMpXG4iKTsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBMaW5lYXIg c2VhcmNoLCBidXQgc3RhcnQgZnJvbSBsYXN0IGZvdW5kIGluZGV4LiBUaGlzIHdpbGwKLQkJICog aGVscCBpZiBhbnkgc2luZ2xlIHByb3BlcnR5IGlzIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIGlu IGEKLQkJICogcm93LiBJZGVhbGx5LCB3ZSBjb3VsZCBrZWVwIGEgbGlzdCBvZiBwcm9wZXJ0aWVz IHNvcnRlZCBpbgotCQkgKiB0aGUgb3JkZXIgb2YgbW9zdCByZWNlbnQgYWNjZXNzLCBidXQgdGhh dCBtYXkgYmUgb3ZlcmtpbGwKLQkJICogZm9yIG5vdy4KLQkJICovCi0JCW11dGV4X2xvY2soJmlu Zm8tPnByb3BlcnR5X2xvY2spOwotCQlpZHggPSBpbmZvLT5yZWNlbnRfaWR4OwotCQljb3VudCA9 IGluZm8tPnByb3BlcnR5X2NvdW50OwotCQl3aGlsZSAoY291bnQpIHsKLQkJCS0tY291bnQ7Ci0K LQkJCS8qIHN0b3Agc2VhcmNoaW5nIG9uIG1hdGNoICovCi0JCQlpZiAoaW5mby0+cHJvcGVydHlf YXJyYXlbaWR4XSA9PSBwcm9wZXJ0eSkgewotCQkJCWluZm8tPnJlY2VudF9pZHggPSBpZHg7Ci0J CQkJcmMgPSBpZHg7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCS8qIG1vdmUgdG8gbmV4dCB2YWxp ZCBpbmRleCAqLwotCQkJaWYgKC0taWR4IDwgMCkKLQkJCQlpZHggPSBpbmZvLT5wcm9wZXJ0eV9j b3VudCAtIDE7Ci0JCX0KLQkJbXV0ZXhfdW5sb2NrKCZpbmZvLT5wcm9wZXJ0eV9sb2NrKTsKLQl9 Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBtc21fcHJvcGVydHlfc2V0X2RpcnR5KHN0cnVjdCBt c21fcHJvcGVydHlfaW5mbyAqaW5mbywKLQkJc3RydWN0IG1zbV9wcm9wZXJ0eV9zdGF0ZSAqcHJv cGVydHlfc3RhdGUsCi0JCWludCBwcm9wZXJ0eV9pZHgpCi17Ci0JaWYgKCFpbmZvIHx8ICFwcm9w ZXJ0eV9zdGF0ZSB8fCAhcHJvcGVydHlfc3RhdGUtPnZhbHVlcykgewotCQlEUk1fRVJST1IoImlu dmFsaWQgYXJndW1lbnQocylcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JbXV0ZXhfbG9j aygmaW5mby0+cHJvcGVydHlfbG9jayk7Ci0JX21zbV9wcm9wZXJ0eV9zZXRfZGlydHlfbm9fbG9j ayhpbmZvLCBwcm9wZXJ0eV9zdGF0ZSwgcHJvcGVydHlfaWR4KTsKLQltdXRleF91bmxvY2soJmlu Zm8tPnByb3BlcnR5X2xvY2spOwotCXJldHVybiAwOwotfQotCi1pbnQgbXNtX3Byb3BlcnR5X2F0 b21pY19zZXQoc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvLAotCQlzdHJ1Y3QgbXNtX3By b3BlcnR5X3N0YXRlICpwcm9wZXJ0eV9zdGF0ZSwKLQkJc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJv cGVydHksIHVpbnQ2NF90IHZhbCkKLXsKLQlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKmJsb2I7 Ci0JaW50IHByb3BlcnR5X2lkeCwgcmMgPSAtRUlOVkFMOwotCi0JcHJvcGVydHlfaWR4ID0gbXNt X3Byb3BlcnR5X2luZGV4KGluZm8sIHByb3BlcnR5KTsKLQlpZiAoIWluZm8gfHwgIXByb3BlcnR5 X3N0YXRlIHx8Ci0JCQkocHJvcGVydHlfaWR4ID09IC1FSU5WQUwpIHx8ICFwcm9wZXJ0eV9zdGF0 ZS0+dmFsdWVzKSB7Ci0JCURSTV9ERUJVRygiaW52YWxpZCBhcmd1bWVudChzKVxuIik7Ci0JfSBl bHNlIHsKLQkJLyogZXh0cmEgaGFuZGxpbmcgZm9yIGluY29taW5nIHByb3BlcnRpZXMgKi8KLQkJ bXV0ZXhfbG9jaygmaW5mby0+cHJvcGVydHlfbG9jayk7Ci0JCWlmICgocHJvcGVydHktPmZsYWdz ICYgRFJNX01PREVfUFJPUF9CTE9CKSAmJgotCQkJKHByb3BlcnR5X2lkeCA8IGluZm8tPmJsb2Jf Y291bnQpKSB7Ci0JCQkvKiBEUk0gbG9va3VwIGFsc28gdGFrZXMgYSByZWZlcmVuY2UgKi8KLQkJ CWJsb2IgPSBkcm1fcHJvcGVydHlfbG9va3VwX2Jsb2IoaW5mby0+ZGV2LAotCQkJCSh1aW50MzJf dCl2YWwpOwotCQkJaWYgKCFibG9iKSB7Ci0JCQkJRFJNX0VSUk9SKCJibG9iIG5vdCBmb3VuZFxu Iik7Ci0JCQkJdmFsID0gMDsKLQkJCX0gZWxzZSB7Ci0JCQkJREJHKCJCbG9iICV1IHNhdmVkIiwg YmxvYi0+YmFzZS5pZCk7Ci0JCQkJdmFsID0gYmxvYi0+YmFzZS5pZDsKLQotCQkJCS8qIHNhdmUg YmxvYiAtIG5lZWQgdG8gY2xlYXIgcHJldmlvdXMgcmVmICovCi0JCQkJaWYgKHByb3BlcnR5X3N0 YXRlLT52YWx1ZXNbcHJvcGVydHlfaWR4XS5ibG9iKQotCQkJCQlkcm1fcHJvcGVydHlfYmxvYl9w dXQoCi0JCQkJCQlwcm9wZXJ0eV9zdGF0ZS0+dmFsdWVzWwotCQkJCQkJcHJvcGVydHlfaWR4XS5i bG9iKTsKLQkJCQlwcm9wZXJ0eV9zdGF0ZS0+dmFsdWVzW3Byb3BlcnR5X2lkeF0uYmxvYiA9Ci0J CQkJCWJsb2I7Ci0JCQl9Ci0JCX0KLQotCQkvKiB1cGRhdGUgdmFsdWUgYW5kIGZsYWcgYXMgZGly dHkgKi8KLQkJaWYgKHByb3BlcnR5X3N0YXRlLT52YWx1ZXNbcHJvcGVydHlfaWR4XS52YWx1ZSAh PSB2YWwgfHwKLQkJCQlpbmZvLT5wcm9wZXJ0eV9kYXRhW3Byb3BlcnR5X2lkeF0uZm9yY2VfZGly dHkpIHsKLQkJCXByb3BlcnR5X3N0YXRlLT52YWx1ZXNbcHJvcGVydHlfaWR4XS52YWx1ZSA9IHZh bDsKLQkJCV9tc21fcHJvcGVydHlfc2V0X2RpcnR5X25vX2xvY2soaW5mbywgcHJvcGVydHlfc3Rh dGUsCi0JCQkJCXByb3BlcnR5X2lkeCk7Ci0KLQkJCURCRygiJXMgLSAlbGxkIiwgcHJvcGVydHkt Pm5hbWUsIHZhbCk7Ci0JCX0KLQkJbXV0ZXhfdW5sb2NrKCZpbmZvLT5wcm9wZXJ0eV9sb2NrKTsK LQkJcmMgPSAwOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotaW50IG1zbV9wcm9wZXJ0eV9hdG9t aWNfZ2V0KHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbywKLQkJc3RydWN0IG1zbV9wcm9w ZXJ0eV9zdGF0ZSAqcHJvcGVydHlfc3RhdGUsCi0JCXN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3Bl cnR5LCB1aW50NjRfdCAqdmFsKQotewotCWludCBwcm9wZXJ0eV9pZHgsIHJjID0gLUVJTlZBTDsK LQotCXByb3BlcnR5X2lkeCA9IG1zbV9wcm9wZXJ0eV9pbmRleChpbmZvLCBwcm9wZXJ0eSk7Ci0J aWYgKCFpbmZvIHx8IChwcm9wZXJ0eV9pZHggPT0gLUVJTlZBTCkgfHwKLQkJCSFwcm9wZXJ0eV9z dGF0ZS0+dmFsdWVzIHx8ICF2YWwpIHsKLQkJRFJNX0RFQlVHKCJJbnZhbGlkIGFyZ3VtZW50KHMp XG4iKTsKLQl9IGVsc2UgewotCQltdXRleF9sb2NrKCZpbmZvLT5wcm9wZXJ0eV9sb2NrKTsKLQkJ KnZhbCA9IHByb3BlcnR5X3N0YXRlLT52YWx1ZXNbcHJvcGVydHlfaWR4XS52YWx1ZTsKLQkJbXV0 ZXhfdW5sb2NrKCZpbmZvLT5wcm9wZXJ0eV9sb2NrKTsKLQkJcmMgPSAwOwotCX0KLQotCXJldHVy biByYzsKLX0KLQotdm9pZCAqbXNtX3Byb3BlcnR5X2FsbG9jX3N0YXRlKHN0cnVjdCBtc21fcHJv cGVydHlfaW5mbyAqaW5mbykKLXsKLQl2b2lkICpzdGF0ZSA9IE5VTEw7Ci0KLQlpZiAoIWluZm8p IHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIHByb3BlcnR5IGluZm9cbiIpOwotCQlyZXR1cm4gTlVM TDsKLQl9Ci0KLQltdXRleF9sb2NrKCZpbmZvLT5wcm9wZXJ0eV9sb2NrKTsKLQlpZiAoaW5mby0+ c3RhdGVfY2FjaGVfc2l6ZSkKLQkJc3RhdGUgPSBpbmZvLT5zdGF0ZV9jYWNoZVstLShpbmZvLT5z dGF0ZV9jYWNoZV9zaXplKV07Ci0JbXV0ZXhfdW5sb2NrKCZpbmZvLT5wcm9wZXJ0eV9sb2NrKTsK LQotCWlmICghc3RhdGUgJiYgaW5mby0+c3RhdGVfc2l6ZSkKLQkJc3RhdGUgPSBrbWFsbG9jKGlu Zm8tPnN0YXRlX3NpemUsIEdGUF9LRVJORUwpOwotCi0JaWYgKCFzdGF0ZSkKLQkJRFJNX0VSUk9S KCJmYWlsZWQgdG8gYWxsb2NhdGUgc3RhdGVcbiIpOwotCi0JcmV0dXJuIHN0YXRlOwotfQotCi0v KioKLSAqIF9tc21fcHJvcGVydHlfZnJlZV9zdGF0ZSAtIGhlbHBlciBmdW5jdGlvbiBmb3IgZnJl ZWluZyBsb2NhbCBzdGF0ZSBvYmplY3RzCi0gKiBAaW5mbzogUG9pbnRlciB0byBwcm9wZXJ0eSBp bmZvIGNvbnRhaW5lciBzdHJ1Y3QKLSAqIEBzdDogUG9pbnRlciB0byBzdGF0ZSBvYmplY3QKLSAq Lwotc3RhdGljIHZvaWQgX21zbV9wcm9wZXJ0eV9mcmVlX3N0YXRlKHN0cnVjdCBtc21fcHJvcGVy dHlfaW5mbyAqaW5mbywgdm9pZCAqc3QpCi17Ci0JaWYgKCFpbmZvIHx8ICFzdCkKLQkJcmV0dXJu OwotCi0JbXV0ZXhfbG9jaygmaW5mby0+cHJvcGVydHlfbG9jayk7Ci0JaWYgKGluZm8tPnN0YXRl X2NhY2hlX3NpemUgPCBNU01fUFJPUF9TVEFURV9DQUNIRV9TSVpFKQotCQlpbmZvLT5zdGF0ZV9j YWNoZVsoaW5mby0+c3RhdGVfY2FjaGVfc2l6ZSkrK10gPSBzdDsKLQllbHNlCi0JCWtmcmVlKHN0 KTsKLQltdXRleF91bmxvY2soJmluZm8tPnByb3BlcnR5X2xvY2spOwotfQotCi12b2lkIG1zbV9w cm9wZXJ0eV9yZXNldF9zdGF0ZShzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmluZm8sIHZvaWQg KnN0YXRlLAotCQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X3N0YXRlICpwcm9wZXJ0eV9zdGF0ZSwKLQkJ c3RydWN0IG1zbV9wcm9wZXJ0eV92YWx1ZSAqcHJvcGVydHlfdmFsdWVzKQotewotCXVpbnQzMl90 IGk7Ci0KLQlpZiAoIWluZm8pIHsKLQkJRFJNX0VSUk9SKCJpbnZhbGlkIHByb3BlcnR5IGluZm9c biIpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHN0YXRlKQotCQltZW1zZXQoc3RhdGUsIDAsIGlu Zm8tPnN0YXRlX3NpemUpOwotCi0JaWYgKHByb3BlcnR5X3N0YXRlKSB7Ci0JCXByb3BlcnR5X3N0 YXRlLT5wcm9wZXJ0eV9jb3VudCA9IGluZm8tPnByb3BlcnR5X2NvdW50OwotCQlwcm9wZXJ0eV9z dGF0ZS0+dmFsdWVzID0gcHJvcGVydHlfdmFsdWVzOwotCQlJTklUX0xJU1RfSEVBRCgmcHJvcGVy dHlfc3RhdGUtPmRpcnR5X2xpc3QpOwotCX0KLQotCS8qCi0JICogQXNzaWduIGRlZmF1bHQgcHJv cGVydHkgdmFsdWVzLiBUaGlzIGhlbHBlciBpcyBtb3N0bHkgdXNlZAotCSAqIHRvIGluaXRpYWxp emUgbmV3bHkgY3JlYXRlZCBzdGF0ZSBvYmplY3RzLgotCSAqLwotCWlmIChwcm9wZXJ0eV92YWx1 ZXMpCi0JCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5wcm9wZXJ0eV9jb3VudDsgKytpKSB7Ci0JCQlw cm9wZXJ0eV92YWx1ZXNbaV0udmFsdWUgPQotCQkJCWluZm8tPnByb3BlcnR5X2RhdGFbaV0uZGVm YXVsdF92YWx1ZTsKLQkJCXByb3BlcnR5X3ZhbHVlc1tpXS5ibG9iID0gTlVMTDsKLQkJCUlOSVRf TElTVF9IRUFEKCZwcm9wZXJ0eV92YWx1ZXNbaV0uZGlydHlfbm9kZSk7Ci0JCX0KLX0KLQotdm9p ZCBtc21fcHJvcGVydHlfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAq aW5mbywKLQkJdm9pZCAqb2xkX3N0YXRlLCB2b2lkICpzdGF0ZSwKLQkJc3RydWN0IG1zbV9wcm9w ZXJ0eV9zdGF0ZSAqcHJvcGVydHlfc3RhdGUsCi0JCXN0cnVjdCBtc21fcHJvcGVydHlfdmFsdWUg KnByb3BlcnR5X3ZhbHVlcykKLXsKLQl1aW50MzJfdCBpOwotCi0JaWYgKCFpbmZvIHx8ICFvbGRf c3RhdGUgfHwgIXN0YXRlKSB7Ci0JCURSTV9FUlJPUigiaW52YWxpZCBhcmd1bWVudChzKVxuIik7 Ci0JCXJldHVybjsKLQl9Ci0KLQltZW1jcHkoc3RhdGUsIG9sZF9zdGF0ZSwgaW5mby0+c3RhdGVf c2l6ZSk7Ci0KLQlpZiAoIXByb3BlcnR5X3N0YXRlKQotCQlyZXR1cm47Ci0KLQlJTklUX0xJU1Rf SEVBRCgmcHJvcGVydHlfc3RhdGUtPmRpcnR5X2xpc3QpOwotCXByb3BlcnR5X3N0YXRlLT52YWx1 ZXMgPSBwcm9wZXJ0eV92YWx1ZXM7Ci0KLQlpZiAocHJvcGVydHlfc3RhdGUtPnZhbHVlcykKLQkJ LyogYWRkIHJlZiBjb3VudCBmb3IgYmxvYnMgYW5kIGluaXRpYWxpemUgZGlydHkgbm9kZXMgKi8K LQkJZm9yIChpID0gMDsgaSA8IGluZm8tPnByb3BlcnR5X2NvdW50OyArK2kpIHsKLQkJCWlmIChw cm9wZXJ0eV9zdGF0ZS0+dmFsdWVzW2ldLmJsb2IpCi0JCQkJZHJtX3Byb3BlcnR5X2Jsb2JfZ2V0 KAotCQkJCQkJcHJvcGVydHlfc3RhdGUtPnZhbHVlc1tpXS5ibG9iKTsKLQkJCUlOSVRfTElTVF9I RUFEKCZwcm9wZXJ0eV9zdGF0ZS0+dmFsdWVzW2ldLmRpcnR5X25vZGUpOwotCQl9Ci19Ci0KLXZv aWQgbXNtX3Byb3BlcnR5X2Rlc3Ryb3lfc3RhdGUoc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvICpp bmZvLCB2b2lkICpzdGF0ZSwKLQkJc3RydWN0IG1zbV9wcm9wZXJ0eV9zdGF0ZSAqcHJvcGVydHlf c3RhdGUpCi17Ci0JdWludDMyX3QgaTsKLQotCWlmICghaW5mbyB8fCAhc3RhdGUpIHsKLQkJRFJN X0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50KHMpXG4iKTsKLQkJcmV0dXJuOwotCX0KLQlpZiAocHJv cGVydHlfc3RhdGUgJiYgcHJvcGVydHlfc3RhdGUtPnZhbHVlcykgewotCQkvKiByZW1vdmUgcmVm IGNvdW50IGZvciBibG9icyAqLwotCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+cHJvcGVydHlfY291 bnQ7ICsraSkKLQkJCWlmIChwcm9wZXJ0eV9zdGF0ZS0+dmFsdWVzW2ldLmJsb2IpIHsKLQkJCQlk cm1fcHJvcGVydHlfYmxvYl9wdXQoCi0JCQkJCQlwcm9wZXJ0eV9zdGF0ZS0+dmFsdWVzW2ldLmJs b2IpOwotCQkJCXByb3BlcnR5X3N0YXRlLT52YWx1ZXNbaV0uYmxvYiA9IE5VTEw7Ci0JCQl9Ci0J fQotCi0JX21zbV9wcm9wZXJ0eV9mcmVlX3N0YXRlKGluZm8sIHN0YXRlKTsKLX0KLQotdm9pZCAq bXNtX3Byb3BlcnR5X2dldF9ibG9iKHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbywKLQkJ c3RydWN0IG1zbV9wcm9wZXJ0eV9zdGF0ZSAqcHJvcGVydHlfc3RhdGUsCi0JCXNpemVfdCAqYnl0 ZV9sZW4sCi0JCXVpbnQzMl90IHByb3BlcnR5X2lkeCkKLXsKLQlzdHJ1Y3QgZHJtX3Byb3BlcnR5 X2Jsb2IgKmJsb2I7Ci0Jc2l6ZV90IGxlbiA9IDA7Ci0Jdm9pZCAqcmMgPSAwOwotCi0JaWYgKCFp bmZvIHx8ICFwcm9wZXJ0eV9zdGF0ZSB8fCAhcHJvcGVydHlfc3RhdGUtPnZhbHVlcyB8fAotCQkJ KHByb3BlcnR5X2lkeCA+PSBpbmZvLT5ibG9iX2NvdW50KSkgewotCQlEUk1fRVJST1IoImludmFs aWQgYXJndW1lbnQocylcbiIpOwotCX0gZWxzZSB7Ci0JCWJsb2IgPSBwcm9wZXJ0eV9zdGF0ZS0+ dmFsdWVzW3Byb3BlcnR5X2lkeF0uYmxvYjsKLQkJaWYgKGJsb2IpIHsKLQkJCWxlbiA9IGJsb2It Pmxlbmd0aDsKLQkJCXJjID0gJmJsb2ItPmRhdGE7Ci0JCX0KLQl9Ci0KLQlpZiAoYnl0ZV9sZW4p Ci0JCSpieXRlX2xlbiA9IGxlbjsKLQotCXJldHVybiByYzsKLX0KLQotaW50IG1zbV9wcm9wZXJ0 eV9zZXRfYmxvYihzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmluZm8sCi0JCXN0cnVjdCBkcm1f cHJvcGVydHlfYmxvYiAqKmJsb2JfcmVmZXJlbmNlLAotCQl2b2lkICpibG9iX2RhdGEsCi0JCXNp emVfdCBieXRlX2xlbiwKLQkJdWludDMyX3QgcHJvcGVydHlfaWR4KQotewotCXN0cnVjdCBkcm1f cHJvcGVydHlfYmxvYiAqYmxvYiA9IE5VTEw7Ci0JaW50IHJjID0gLUVJTlZBTDsKLQotCWlmICgh aW5mbyB8fCAhYmxvYl9yZWZlcmVuY2UgfHwgKHByb3BlcnR5X2lkeCA+PSBpbmZvLT5ibG9iX2Nv dW50KSkgewotCQlEUk1fRVJST1IoImludmFsaWQgYXJndW1lbnQocylcbiIpOwotCX0gZWxzZSB7 Ci0JCS8qIGNyZWF0ZSBibG9iICovCi0JCWlmIChibG9iX2RhdGEgJiYgYnl0ZV9sZW4pIHsKLQkJ CWJsb2IgPSBkcm1fcHJvcGVydHlfY3JlYXRlX2Jsb2IoaW5mby0+ZGV2LAotCQkJCQlieXRlX2xl biwKLQkJCQkJYmxvYl9kYXRhKTsKLQkJCWlmIChJU19FUlJfT1JfTlVMTChibG9iKSkgewotCQkJ CXJjID0gUFRSX0VSUihibG9iKTsKLQkJCQlEUk1fRVJST1IoImZhaWxlZCB0byBjcmVhdGUgYmxv YiwgJWRcbiIsIHJjKTsKLQkJCQlnb3RvIGV4aXQ7Ci0JCQl9Ci0JCX0KLQotCQkvKiB1cGRhdGUg ZHJtIG9iamVjdCAqLwotCQlyYyA9IGRybV9vYmplY3RfcHJvcGVydHlfc2V0X3ZhbHVlKGluZm8t PmJhc2UsCi0JCQkJaW5mby0+cHJvcGVydHlfYXJyYXlbcHJvcGVydHlfaWR4XSwKLQkJCQlibG9i ID8gYmxvYi0+YmFzZS5pZCA6IDApOwotCQlpZiAocmMpIHsKLQkJCURSTV9FUlJPUigiZmFpbGVk IHRvIHNldCBibG9iIHRvIHByb3BlcnR5XG4iKTsKLQkJCWlmIChibG9iKQotCQkJCWRybV9wcm9w ZXJ0eV9ibG9iX3B1dChibG9iKTsKLQkJCWdvdG8gZXhpdDsKLQkJfQotCi0JCS8qIHVwZGF0ZSBs b2NhbCByZWZlcmVuY2UgKi8KLQkJaWYgKCpibG9iX3JlZmVyZW5jZSkKLQkJCWRybV9wcm9wZXJ0 eV9ibG9iX3B1dCgqYmxvYl9yZWZlcmVuY2UpOwotCQkqYmxvYl9yZWZlcmVuY2UgPSBibG9iOwot CX0KLQotZXhpdDoKLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBtc21fcHJvcGVydHlfc2V0X3Byb3Bl cnR5KHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbywKLQkJc3RydWN0IG1zbV9wcm9wZXJ0 eV9zdGF0ZSAqcHJvcGVydHlfc3RhdGUsCi0JCXVpbnQzMl90IHByb3BlcnR5X2lkeCwKLQkJdWlu dDY0X3QgdmFsKQotewotCWludCByYyA9IC1FSU5WQUw7Ci0KLQlpZiAoIWluZm8gfHwgKHByb3Bl cnR5X2lkeCA+PSBpbmZvLT5wcm9wZXJ0eV9jb3VudCkgfHwKLQkJCXByb3BlcnR5X2lkeCA8IGlu Zm8tPmJsb2JfY291bnQgfHwKLQkJCSFwcm9wZXJ0eV9zdGF0ZSB8fCAhcHJvcGVydHlfc3RhdGUt PnZhbHVlcykgewotCQlEUk1fRVJST1IoImludmFsaWQgYXJndW1lbnQocylcbiIpOwotCX0gZWxz ZSB7Ci0JCXN0cnVjdCBkcm1fcHJvcGVydHkgKmRybV9wcm9wOwotCi0JCW11dGV4X2xvY2soJmlu Zm8tPnByb3BlcnR5X2xvY2spOwotCi0JCS8qIHVwZGF0ZSBjYWNoZWQgdmFsdWUgKi8KLQkJcHJv cGVydHlfc3RhdGUtPnZhbHVlc1twcm9wZXJ0eV9pZHhdLnZhbHVlID0gdmFsOwotCi0JCS8qIHVw ZGF0ZSB0aGUgbmV3IGRlZmF1bHQgdmFsdWUgZm9yIGltbXV0YWJsZXMgKi8KLQkJZHJtX3Byb3Ag PSBpbmZvLT5wcm9wZXJ0eV9hcnJheVtwcm9wZXJ0eV9pZHhdOwotCQlpZiAoZHJtX3Byb3AtPmZs YWdzICYgRFJNX01PREVfUFJPUF9JTU1VVEFCTEUpCi0JCQlpbmZvLT5wcm9wZXJ0eV9kYXRhW3By b3BlcnR5X2lkeF0uZGVmYXVsdF92YWx1ZSA9IHZhbDsKLQotCQltdXRleF91bmxvY2soJmluZm8t PnByb3BlcnR5X2xvY2spOwotCi0JCS8qIHVwZGF0ZSBkcm0gb2JqZWN0ICovCi0JCXJjID0gZHJt X29iamVjdF9wcm9wZXJ0eV9zZXRfdmFsdWUoaW5mby0+YmFzZSwgZHJtX3Byb3AsIHZhbCk7Ci0J CWlmIChyYykKLQkJCURSTV9FUlJPUigiZmFpbGVkIHNldCBwcm9wZXJ0eSB2YWx1ZSwgaWR4ICVk IHJjICVkXG4iLAotCQkJCQlwcm9wZXJ0eV9pZHgsIHJjKTsKLQotCX0KLQotCXJldHVybiByYzsK LX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fcHJvcC5oIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9tc21fcHJvcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2 Nzg1OTU1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX3Byb3AuaAorKysg L2Rldi9udWxsCkBAIC0xLDQzOCArMCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwg VGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq LwotCi0jaWZuZGVmIF9NU01fUFJPUF9IXwotI2RlZmluZSBfTVNNX1BST1BfSF8KLQotI2luY2x1 ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlICJtc21fZHJ2LmgiCi0KLSNkZWZpbmUgTVNNX1BS T1BfU1RBVEVfQ0FDSEVfU0laRQkyCi0KLS8qKgotICogc3RydWN0IG1zbV9wcm9wZXJ0eV9kYXRh IC0gb3BhcXVlIHN0cnVjdHVyZSBmb3IgdHJhY2tpbmcgcGVyCi0gKiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBkcm0tb2JqZWN0IHBlciBwcm9wZXJ0eSBzdHVmZgotICogQGRlZmF1bHRfdmFs dWU6IERlZmF1bHQgcHJvcGVydHkgdmFsdWUgZm9yIHRoaXMgZHJtIG9iamVjdAotICogQGZvcmNl X2RpcnR5OiBBbHdheXMgZGlydHkgcHJvcGVydHkgb24gaW5jb21pbmcgc2V0cywgcmF0aGVyIHRo YW4gY2hlY2tpbmcKLSAqICAgICAgICAgICAgICAgZm9yIG1vZGlmaWVkIHZhbHVlcwotICovCi1z dHJ1Y3QgbXNtX3Byb3BlcnR5X2RhdGEgewotCXVpbnQ2NF90IGRlZmF1bHRfdmFsdWU7Ci0JYm9v bCBmb3JjZV9kaXJ0eTsKLX07Ci0KLS8qKgotICogc3RydWN0IG1zbV9wcm9wZXJ0eV92YWx1ZSAt IG9wYXF1ZSBzdHJ1Y3R1cmUgZm9yIHRyYWNraW5nIHBlcgotICogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRybS1vYmplY3QgcGVyIHByb3BlcnR5IHN0dWZmCi0gKiBAdmFsdWU6IEN1cnJl bnQgcHJvcGVydHkgdmFsdWUgZm9yIHRoaXMgZHJtIG9iamVjdAotICogQGJsb2I6IFBvaW50ZXIg dG8gYXNzb2NpYXRlZCBibG9iIGRhdGEsIGlmIGF2YWlsYWJsZQotICogQGRpcnR5X25vZGU6IExp bmtlZCBsaXN0IG5vZGUgdG8gdHJhY2sgaWYgcHJvcGVydHkgaXMgZGlydHkgb3Igbm90Ci0gKi8K LXN0cnVjdCBtc21fcHJvcGVydHlfdmFsdWUgewotCXVpbnQ2NF90IHZhbHVlOwotCXN0cnVjdCBk cm1fcHJvcGVydHlfYmxvYiAqYmxvYjsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGRpcnR5X25vZGU7Ci19 OwotCi0vKioKLSAqIHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbzogU3RydWN0dXJlIGZvciBwcm9w ZXJ0eS9zdGF0ZSBoZWxwZXIgZnVuY3Rpb25zCi0gKiBAYmFzZTogUG9pbnRlciB0byBiYXNlIGRy bSBvYmplY3QgKHBsYW5lL2NydGMvZXRjLikKLSAqIEBkZXY6IFBvaW50ZXIgdG8gZHJtIGRldmlj ZSBvYmplY3QKLSAqIEBwcm9wZXJ0eV9hcnJheTogUG9pbnRlciB0byBhcnJheSBmb3Igc3Rvcmlu ZyBjcmVhdGVkIHByb3BlcnR5IG9iamVjdHMKLSAqIEBwcm9wZXJ0eV9kYXRhOiBQb2ludGVyIHRv IGFycmF5IGZvciBzdG9yaW5nIHByaXZhdGUgcHJvcGVydHkgZGF0YQotICogQHByb3BlcnR5X2Nv dW50OiBUb3RhbCBudW1iZXIgb2YgcHJvcGVydGllcwotICogQGJsb2JfY291bnQ6IFRvdGFsIG51 bWJlciBvZiBibG9iIHByb3BlcnRpZXMsIHNob3VsZCBiZSA8PSBjb3VudAotICogQGluc3RhbGxf cmVxdWVzdDogVG90YWwgbnVtYmVyIG9mIHByb3BlcnR5ICdpbnN0YWxsJyByZXF1ZXN0cwotICog QGluc3RhbGxfY291bnQ6IFRvdGFsIG51bWJlciBvZiBzdWNjZXNzZnVsICdpbnN0YWxsJyByZXF1 ZXN0cwotICogQHJlY2VudF9pZHg6IEluZGV4IG9mIHByb3BlcnR5IG1vc3QgcmVjZW50bHkgYWNj ZXNzZWQgYnkgc2V0L2dldAotICogQGlzX2FjdGl2ZTogV2hldGhlciBvciBub3QgZHJtIGNvbXBv bmVudCBwcm9wZXJ0aWVzIGFyZSAnYWN0aXZlJwotICogQHN0YXRlX2NhY2hlOiBDYWNoZSBvZiBs b2NhbCBzdGF0ZXMsIHRvIHByZXZlbnQgYWxsb2MvZnJlZSB0aHJhc2hpbmcKLSAqIEBzdGF0ZV9z aXplOiBTaXplIG9mIGxvY2FsIHN0YXRlIHN0cnVjdHVyZXMKLSAqIEBzdGF0ZV9jYWNoZV9zaXpl OiBOdW1iZXIgb2Ygc3RhdGUgc3RydWN0dXJlcyBjdXJyZW50bHkgc3RvcmVkIGluIHN0YXRlX2Nh Y2hlCi0gKiBAcHJvcGVydHlfbG9jazogTXV0ZXggdG8gcHJvdGVjdCBsb2NhbCB2YXJpYWJsZXMK LSAqLwotc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvIHsKLQlzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0 ICpiYXNlOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7Ci0KLQlzdHJ1Y3QgZHJtX3Byb3BlcnR5 ICoqcHJvcGVydHlfYXJyYXk7Ci0Jc3RydWN0IG1zbV9wcm9wZXJ0eV9kYXRhICpwcm9wZXJ0eV9k YXRhOwotCXVpbnQzMl90IHByb3BlcnR5X2NvdW50OwotCXVpbnQzMl90IGJsb2JfY291bnQ7Ci0J dWludDMyX3QgaW5zdGFsbF9yZXF1ZXN0OwotCXVpbnQzMl90IGluc3RhbGxfY291bnQ7Ci0KLQlp bnQzMl90IHJlY2VudF9pZHg7Ci0KLQlib29sIGlzX2FjdGl2ZTsKLQotCXZvaWQgKnN0YXRlX2Nh Y2hlW01TTV9QUk9QX1NUQVRFX0NBQ0hFX1NJWkVdOwotCXVpbnQzMl90IHN0YXRlX3NpemU7Ci0J aW50MzJfdCBzdGF0ZV9jYWNoZV9zaXplOwotCXN0cnVjdCBtdXRleCBwcm9wZXJ0eV9sb2NrOwot fTsKLQotLyoqCi0gKiBzdHJ1Y3QgbXNtX3Byb3BlcnR5X3N0YXRlIC0gU3RydWN0dXJlIGZvciBs b2NhbCBwcm9wZXJ0eSBzdGF0ZSBpbmZvcm1hdGlvbgotICogQHByb3BlcnR5X2NvdW50OiBUb3Rh bCBudW1iZXIgb2YgcHJvcGVydGllcwotICogQHZhbHVlczogUG9pbnRlciB0byBhcnJheSBvZiBt c21fcHJvcGVydHlfdmFsdWUgb2JqZWN0cwotICogQGRpcnR5X2xpc3Q6IExpc3Qgb2YgYWxsIHBy b3BlcnRpZXMgdGhhdCBoYXZlIGJlZW4gJ2F0b21pY19zZXQnIGJ1dCBub3QKLSAqICAgICAgICAg ICAgICB5ZXQgY2xlYXJlZCB3aXRoICdtc21fcHJvcGVydHlfcG9wX2RpcnR5JwotICovCi1zdHJ1 Y3QgbXNtX3Byb3BlcnR5X3N0YXRlIHsKLQl1aW50MzJfdCBwcm9wZXJ0eV9jb3VudDsKLQlzdHJ1 Y3QgbXNtX3Byb3BlcnR5X3ZhbHVlICp2YWx1ZXM7Ci0Jc3RydWN0IGxpc3RfaGVhZCBkaXJ0eV9s aXN0OwotfTsKLQotLyoqCi0gKiBtc21fcHJvcGVydHlfaW5kZXhfdG9fZHJtX3Byb3BlcnR5IC0g Z2V0IGRybSBwcm9wZXJ0eSBzdHJ1Y3QgZnJvbSBwcm9wIGluZGV4Ci0gKiBAaW5mbzogUG9pbnRl ciB0byBwcm9wZXJ0eSBpbmZvIGNvbnRhaW5lciBzdHJ1Y3QKLSAqIEBwcm9wZXJ0eV9pZHg6IFBy b3BlcnR5IGluZGV4Ci0gKiBSZXR1cm5zOiBkcm1fcHJvcGVydHkgcG9pbnRlciBhc3NvY2lhdGVk IHdpdGggcHJvcGVydHkgaW5kZXgKLSAqLwotc3RhdGljIGlubGluZQotc3RydWN0IGRybV9wcm9w ZXJ0eSAqbXNtX3Byb3BlcnR5X2luZGV4X3RvX2RybV9wcm9wZXJ0eSgKLQkJc3RydWN0IG1zbV9w cm9wZXJ0eV9pbmZvICppbmZvLCB1aW50MzJfdCBwcm9wZXJ0eV9pZHgpCi17Ci0JaWYgKCFpbmZv IHx8IHByb3BlcnR5X2lkeCA+PSBpbmZvLT5wcm9wZXJ0eV9jb3VudCkKLQkJcmV0dXJuIE5VTEw7 Ci0KLQlyZXR1cm4gaW5mby0+cHJvcGVydHlfYXJyYXlbcHJvcGVydHlfaWR4XTsKLX0KLQotLyoq Ci0gKiBtc21fcHJvcGVydHlfZ2V0X2RlZmF1bHQgLSBxdWVyeSBkZWZhdWx0IHZhbHVlIG9mIGEg cHJvcGVydHkKLSAqIEBpbmZvOiBQb2ludGVyIHRvIHByb3BlcnR5IGluZm8gY29udGFpbmVyIHN0 cnVjdAotICogQHByb3BlcnR5X2lkeDogUHJvcGVydHkgaW5kZXgKLSAqIFJldHVybnM6IERlZmF1 bHQgdmFsdWUgZm9yIHNwZWNpZmllZCBwcm9wZXJ0eQotICovCi1zdGF0aWMgaW5saW5lCi11aW50 NjRfdCBtc21fcHJvcGVydHlfZ2V0X2RlZmF1bHQoc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvICpp bmZvLAotCQl1aW50MzJfdCBwcm9wZXJ0eV9pZHgpCi17Ci0JdWludDY0X3QgcmMgPSAwOwotCi0J aWYgKCFpbmZvKQotCQlyZXR1cm4gMDsKLQotCW11dGV4X2xvY2soJmluZm8tPnByb3BlcnR5X2xv Y2spOwotCWlmIChwcm9wZXJ0eV9pZHggPCBpbmZvLT5wcm9wZXJ0eV9jb3VudCkKLQkJcmMgPSBp bmZvLT5wcm9wZXJ0eV9kYXRhW3Byb3BlcnR5X2lkeF0uZGVmYXVsdF92YWx1ZTsKLQltdXRleF91 bmxvY2soJmluZm8tPnByb3BlcnR5X2xvY2spOwotCi0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAq IG1zbV9wcm9wZXJ0eV9zZXRfaXNfYWN0aXZlIC0gc2V0IG92ZXJhbGwgJ2FjdGl2ZScgc3RhdHVz IGZvciBhbGwgcHJvcGVydGllcwotICogQGluZm86IFBvaW50ZXIgdG8gcHJvcGVydHkgaW5mbyBj b250YWluZXIgc3RydWN0Ci0gKiBAaXNfYWN0aXZlOiBOZXcgJ2lzIGFjdGl2ZScgc3RhdHVzCi0g Ki8KLXN0YXRpYyBpbmxpbmUKLXZvaWQgbXNtX3Byb3BlcnR5X3NldF9pc19hY3RpdmUoc3RydWN0 IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvLCBib29sIGlzX2FjdGl2ZSkKLXsKLQlpZiAoaW5mbykg ewotCQltdXRleF9sb2NrKCZpbmZvLT5wcm9wZXJ0eV9sb2NrKTsKLQkJaW5mby0+aXNfYWN0aXZl ID0gaXNfYWN0aXZlOwotCQltdXRleF91bmxvY2soJmluZm8tPnByb3BlcnR5X2xvY2spOwotCX0K LX0KLQotLyoqCi0gKiBtc21fcHJvcGVydHlfZ2V0X2lzX2FjdGl2ZSAtIHF1ZXJ5IHByb3BlcnR5 ICdpcyBhY3RpdmUnIHN0YXR1cwotICogQGluZm86IFBvaW50ZXIgdG8gcHJvcGVydHkgaW5mbyBj b250YWluZXIgc3RydWN0Ci0gKiBSZXR1cm5zOiBDdXJyZW50ICdpcyBhY3RpdmUncyBzdGF0dXMK LSAqLwotc3RhdGljIGlubGluZQotYm9vbCBtc21fcHJvcGVydHlfZ2V0X2lzX2FjdGl2ZShzdHJ1 Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmluZm8pCi17Ci0JYm9vbCByYyA9IGZhbHNlOwotCi0JaWYg KGluZm8pIHsKLQkJbXV0ZXhfbG9jaygmaW5mby0+cHJvcGVydHlfbG9jayk7Ci0JCXJjID0gaW5m by0+aXNfYWN0aXZlOwotCQltdXRleF91bmxvY2soJmluZm8tPnByb3BlcnR5X2xvY2spOwotCX0K LQotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBtc21fcHJvcGVydHlfcG9wX2RpcnR5IC0gZGV0 ZXJtaW5lIG5leHQgZGlydHkgcHJvcGVydHkgYW5kIGNsZWFyCi0gKiAgICAgICAgICAgICAgICAg ICAgICAgICAgaXRzIGRpcnR5IGZsYWcKLSAqIEBpbmZvOiBQb2ludGVyIHRvIHByb3BlcnR5IGlu Zm8gY29udGFpbmVyIHN0cnVjdAotICogQHByb3BlcnR5X3N0YXRlOiBQb2ludGVyIHRvIHByb3Bl cnR5IHN0YXRlIGNvbnRhaW5lciBzdHJ1Y3QKLSAqIFJldHVybnM6IFZhbGlkIG1zbSBwcm9wZXJ0 eSBpbmRleCBvbiBzdWNjZXNzLAotICogICAgICAgICAgLUVBR0FJTiBpZiBubyBkaXJ0eSBwcm9w ZXJ0aWVzIGFyZSBhdmFpbGFibGUKLSAqICAgICAgICAgIFByb3BlcnR5IGluZGljaWVzIHJldHVy bmVkIGZyb20gdGhpcyBmdW5jdGlvbiBhcmUgc2ltaWxhcgotICogICAgICAgICAgdG8gdGhvc2Ug cmV0dXJuZWQgYnkgdGhlIG1zbV9wcm9wZXJ0eV9pbmRleCBmdW5jdGlvbi4KLSAqLwotaW50IG1z bV9wcm9wZXJ0eV9wb3BfZGlydHkoc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvLAotCQlz dHJ1Y3QgbXNtX3Byb3BlcnR5X3N0YXRlICpwcm9wZXJ0eV9zdGF0ZSk7Ci0KLS8qKgotICogbXNt X3Byb3BlcnR5X2luaXQgLSBpbml0aWFsaXplIHByb3BlcnR5IGluZm8gc3RydWN0dXJlCi0gKiBA aW5mbzogUG9pbnRlciB0byBwcm9wZXJ0eSBpbmZvIGNvbnRhaW5lciBzdHJ1Y3QKLSAqIEBiYXNl OiBQb2ludGVyIHRvIGJhc2UgZHJtIG9iamVjdCAocGxhbmUvY3J0Yy9ldGMuKQotICogQGRldjog UG9pbnRlciB0byBkcm0gZGV2aWNlIG9iamVjdAotICogQHByb3BlcnR5X2FycmF5OiBQb2ludGVy IHRvIGFycmF5IGZvciBzdG9yaW5nIGNyZWF0ZWQgcHJvcGVydHkgb2JqZWN0cwotICogQHByb3Bl cnR5X2RhdGE6IFBvaW50ZXIgdG8gYXJyYXkgZm9yIHN0b3JpbmcgcHJpdmF0ZSBwcm9wZXJ0eSBk YXRhCi0gKiBAcHJvcGVydHlfY291bnQ6IFRvdGFsIG51bWJlciBvZiBwcm9wZXJ0aWVzCi0gKiBA YmxvYl9jb3VudDogVG90YWwgbnVtYmVyIG9mIGJsb2IgcHJvcGVydGllcywgc2hvdWxkIGJlIDw9 IGNvdW50Ci0gKiBAc3RhdGVfc2l6ZTogU2l6ZSBvZiBsb2NhbCBzdGF0ZSBvYmplY3QKLSAqLwot dm9pZCBtc21fcHJvcGVydHlfaW5pdChzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmluZm8sCi0J CXN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKmJhc2UsCi0JCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYs Ci0JCXN0cnVjdCBkcm1fcHJvcGVydHkgKipwcm9wZXJ0eV9hcnJheSwKLQkJc3RydWN0IG1zbV9w cm9wZXJ0eV9kYXRhICpwcm9wZXJ0eV9kYXRhLAotCQl1aW50MzJfdCBwcm9wZXJ0eV9jb3VudCwK LQkJdWludDMyX3QgYmxvYl9jb3VudCwKLQkJdWludDMyX3Qgc3RhdGVfc2l6ZSk7Ci0KLS8qKgot ICogbXNtX3Byb3BlcnR5X2Rlc3Ryb3kgLSBkZXN0cm95IGhlbHBlciBpbmZvIHN0cnVjdHVyZQot ICoKLSAqIEBpbmZvOiBQb2ludGVyIHRvIHByb3BlcnR5IGluZm8gY29udGFpbmVyIHN0cnVjdAot ICovCi12b2lkIG1zbV9wcm9wZXJ0eV9kZXN0cm95KHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAq aW5mbyk7Ci0KLS8qKgotICogbXNtX3Byb3BlcnR5X2luc3RhbGxfcmFuZ2UgLSBpbnN0YWxsIHN0 YW5kYXJkIGRybSByYW5nZSBwcm9wZXJ0eQotICogQGluZm86IFBvaW50ZXIgdG8gcHJvcGVydHkg aW5mbyBjb250YWluZXIgc3RydWN0Ci0gKiBAbmFtZTogUHJvcGVydHkgbmFtZQotICogQGZsYWdz OiBPdGhlciBwcm9wZXJ0eSB0eXBlIGZsYWdzLCBlLmcuIERSTV9NT0RFX1BST1BfSU1NVVRBQkxF Ci0gKiBAbWluOiBNaW4gcHJvcGVydHkgdmFsdWUKLSAqIEBtYXg6IE1heCBwcm9wZXJ0eSB2YWx1 ZQotICogQGluaXQ6IERlZmF1bHQgUHJvcGVydHkgdmFsdWUKLSAqIEBwcm9wZXJ0eV9pZHg6IFBy b3BlcnR5IGluZGV4Ci0gKi8KLXZvaWQgbXNtX3Byb3BlcnR5X2luc3RhbGxfcmFuZ2Uoc3RydWN0 IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZvLAotCQljb25zdCBjaGFyICpuYW1lLAotCQlpbnQgZmxh Z3MsCi0JCXVpbnQ2NF90IG1pbiwKLQkJdWludDY0X3QgbWF4LAotCQl1aW50NjRfdCBpbml0LAot CQl1aW50MzJfdCBwcm9wZXJ0eV9pZHgpOwotCi0vKioKLSAqIG1zbV9wcm9wZXJ0eV9pbnN0YWxs X3ZvbGF0aWxlX3JhbmdlIC0gaW5zdGFsbCBkcm0gcmFuZ2UgcHJvcGVydHkKLSAqCVRoaXMgZnVu Y3Rpb24gaXMgc2ltaWxhciB0byBtc21fcHJvcGVydHlfaW5zdGFsbF9yYW5nZSwgYnV0IGFzc3Vt ZXMKLSAqCXRoYXQgdGhlIHByb3BlcnR5IGlzIG1lYW50IGZvciBob2xkaW5nIHVzZXIgcG9pbnRl cnMgb3IgZGVzY3JpcHRvcnMKLSAqCXRoYXQgbWF5IHJlZmVyZW5jZSB2b2xhdGlsZSBkYXRhIHdp dGhvdXQgaGF2aW5nIGFuIHVwZGF0ZWQgdmFsdWUuCi0gKiBAaW5mbzogUG9pbnRlciB0byBwcm9w ZXJ0eSBpbmZvIGNvbnRhaW5lciBzdHJ1Y3QKLSAqIEBuYW1lOiBQcm9wZXJ0eSBuYW1lCi0gKiBA ZmxhZ3M6IE90aGVyIHByb3BlcnR5IHR5cGUgZmxhZ3MsIGUuZy4gRFJNX01PREVfUFJPUF9JTU1V VEFCTEUKLSAqIEBtaW46IE1pbiBwcm9wZXJ0eSB2YWx1ZQotICogQG1heDogTWF4IHByb3BlcnR5 IHZhbHVlCi0gKiBAaW5pdDogRGVmYXVsdCBQcm9wZXJ0eSB2YWx1ZQotICogQHByb3BlcnR5X2lk eDogUHJvcGVydHkgaW5kZXgKLSAqLwotdm9pZCBtc21fcHJvcGVydHlfaW5zdGFsbF92b2xhdGls ZV9yYW5nZShzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmluZm8sCi0JCWNvbnN0IGNoYXIgKm5h bWUsCi0JCWludCBmbGFncywKLQkJdWludDY0X3QgbWluLAotCQl1aW50NjRfdCBtYXgsCi0JCXVp bnQ2NF90IGluaXQsCi0JCXVpbnQzMl90IHByb3BlcnR5X2lkeCk7Ci0KLS8qKgotICogbXNtX3By b3BlcnR5X2luc3RhbGxfcm90YXRpb24gLSBpbnN0YWxsIHN0YW5kYXJkIGRybSByb3RhdGlvbiBw cm9wZXJ0eQotICogQGluZm86IFBvaW50ZXIgdG8gcHJvcGVydHkgaW5mbyBjb250YWluZXIgc3Ry dWN0Ci0gKiBAcGxhbmU6IFBvaW50ZXIgdG8gZHJtX3BsYW5lIHdoaWNoIHRoaXMgcHJvcGVydHkg aXMgaW5zdGFsbGVkIG9uCi0gKiBAcm90YXRpb246IFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlz IG5ldyBwcm9wZXJ0eQotICogQHN1cHBvcnRlZF9yb3RhdGlvbnM6IEJpdG1hc2sgb2Ygc3VwcG9y dGVkIHJvdGF0aW9uIHZhbHVlcyAoc2VlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgZHJtX3Bs YW5lX2NyZWF0ZV9yb3RhdGlvbl9wcm9wZXJ0eSBmb3IgbW9yZSBkZXRhaWxzKQotICogQHByb3Bl cnR5X2lkeDogUHJvcGVydHkgaW5kZXgKLSAqLwotdm9pZCBtc21fcHJvcGVydHlfaW5zdGFsbF9y b3RhdGlvbihzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmluZm8sCi0JCXN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lLAotCQl1bnNpZ25lZCBpbnQgcm90YXRpb24sCi0JCXVuc2lnbmVkIGludCBzdXBw b3J0ZWRfcm90YXRpb25zLAotCQl1aW50MzJfdCBwcm9wZXJ0eV9pZHgpOwotCi0vKioKLSAqIG1z bV9wcm9wZXJ0eV9pbnN0YWxsX2VudW0gLSBpbnN0YWxsIHN0YW5kYXJkIGRybSBlbnVtL2JpdG1h c2sgcHJvcGVydHkKLSAqIEBpbmZvOiBQb2ludGVyIHRvIHByb3BlcnR5IGluZm8gY29udGFpbmVy IHN0cnVjdAotICogQG5hbWU6IFByb3BlcnR5IG5hbWUKLSAqIEBmbGFnczogT3RoZXIgcHJvcGVy dHkgdHlwZSBmbGFncywgZS5nLiBEUk1fTU9ERV9QUk9QX0lNTVVUQUJMRQotICogQGlzX2JpdG1h c2s6IFNldCB0byBub24temVybyB0byBjcmVhdGUgYSBiaXRtYXNrIHByb3BlcnR5LCByYXRoZXIg dGhhbiBhbgotICogICAgICAgICAgICAgIGVudW1lcmF0aW9uIG9uZQotICogQHZhbHVlczogQXJy YXkgb2YgYWxsb3dhYmxlIGVudW1lcmF0aW9uL2JpdG1hc2sgdmFsdWVzCi0gKiBAbnVtX3ZhbHVl czogU2l6ZSBvZiB2YWx1ZXMgYXJyYXkKLSAqIEBwcm9wZXJ0eV9pZHg6IFByb3BlcnR5IGluZGV4 Ci0gKi8KLXZvaWQgbXNtX3Byb3BlcnR5X2luc3RhbGxfZW51bShzdHJ1Y3QgbXNtX3Byb3BlcnR5 X2luZm8gKmluZm8sCi0JCWNvbnN0IGNoYXIgKm5hbWUsCi0JCWludCBmbGFncywKLQkJaW50IGlz X2JpdG1hc2ssCi0JCWNvbnN0IHN0cnVjdCBkcm1fcHJvcF9lbnVtX2xpc3QgKnZhbHVlcywKLQkJ aW50IG51bV92YWx1ZXMsCi0JCXVpbnQzMl90IHByb3BlcnR5X2lkeCk7Ci0KLS8qKgotICogbXNt X3Byb3BlcnR5X2luc3RhbGxfYmxvYiAtIGluc3RhbGwgc3RhbmRhcmQgZHJtIGJsb2IgcHJvcGVy dHkKLSAqIEBpbmZvOiBQb2ludGVyIHRvIHByb3BlcnR5IGluZm8gY29udGFpbmVyIHN0cnVjdAot ICogQG5hbWU6IFByb3BlcnR5IG5hbWUKLSAqIEBmbGFnczogRXh0cmEgZmxhZ3MgZm9yIHByb3Bl cnR5IGNyZWF0aW9uCi0gKiBAcHJvcGVydHlfaWR4OiBQcm9wZXJ0eSBpbmRleAotICovCi12b2lk IG1zbV9wcm9wZXJ0eV9pbnN0YWxsX2Jsb2Ioc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZv LAotCQljb25zdCBjaGFyICpuYW1lLAotCQlpbnQgZmxhZ3MsCi0JCXVpbnQzMl90IHByb3BlcnR5 X2lkeCk7Ci0KLS8qKgotICogbXNtX3Byb3BlcnR5X2luc3RhbGxfZ2V0X3N0YXR1cyAtIHF1ZXJ5 IG92ZXJhbCBzdGF0dXMgb2YgcHJvcGVydHkgYWRkaXRpb25zCi0gKiBAaW5mbzogUG9pbnRlciB0 byBwcm9wZXJ0eSBpbmZvIGNvbnRhaW5lciBzdHJ1Y3QKLSAqIFJldHVybnM6IFplcm8gaWYgcHJl dmlvdXMgcHJvcGVydHkgaW5zdGFsbCBjYWxscyB3ZXJlIGFsbCBzdWNjZXNzZnVsCi0gKi8KLWlu dCBtc21fcHJvcGVydHlfaW5zdGFsbF9nZXRfc3RhdHVzKHN0cnVjdCBtc21fcHJvcGVydHlfaW5m byAqaW5mbyk7Ci0KLS8qKgotICogbXNtX3Byb3BlcnR5X2luZGV4IC0gZGV0ZXJtaW5lIHByb3Bl cnR5IGluZGV4IGZyb20gZHJtX3Byb3BlcnR5IHB0cgotICogQGluZm86IFBvaW50ZXIgdG8gcHJv cGVydHkgaW5mbyBjb250YWluZXIgc3RydWN0Ci0gKiBAcHJvcGVydHk6IEluY29taW5nIHByb3Bl cnR5IHBvaW50ZXIKLSAqIFJldHVybnM6IFZhbGlkIHByb3BlcnR5IGluZGV4LCBvciAtRUlOVkFM IG9uIGVycm9yCi0gKi8KLWludCBtc21fcHJvcGVydHlfaW5kZXgoc3RydWN0IG1zbV9wcm9wZXJ0 eV9pbmZvICppbmZvLAotCQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSk7Ci0KLS8qKgot ICogbXNtX3Byb3BlcnR5X3NldF9kaXJ0eSAtIGZvcmNpYmx5IGZsYWcgYSBwcm9wZXJ0eSBhcyBk aXJ0eQotICogQGluZm86IFBvaW50ZXIgdG8gcHJvcGVydHkgaW5mbyBjb250YWluZXIgc3RydWN0 Ci0gKiBAcHJvcGVydHlfc3RhdGU6IFBvaW50ZXIgdG8gcHJvcGVydHkgc3RhdGUgY29udGFpbmVy IHN0cnVjdAotICogQHByb3BlcnR5X2lkeDogUHJvcGVydHkgaW5kZXgKLSAqIFJldHVybnM6IFpl cm8gb24gc3VjY2VzcwotICovCi1pbnQgbXNtX3Byb3BlcnR5X3NldF9kaXJ0eShzdHJ1Y3QgbXNt X3Byb3BlcnR5X2luZm8gKmluZm8sCi0JCXN0cnVjdCBtc21fcHJvcGVydHlfc3RhdGUgKnByb3Bl cnR5X3N0YXRlLAotCQlpbnQgcHJvcGVydHlfaWR4KTsKLQotLyoqCi0gKiBtc21fcHJvcGVydHlf YXRvbWljX3NldCAtIGhlbHBlciBmdW5jdGlvbiBmb3IgYXRvbWljIHByb3BlcnR5IHNldCBjYWxs YmFjawotICogQGluZm86IFBvaW50ZXIgdG8gcHJvcGVydHkgaW5mbyBjb250YWluZXIgc3RydWN0 Ci0gKiBAcHJvcGVydHlfc3RhdGU6IFBvaW50ZXIgdG8gbG9jYWwgc3RhdGUgc3RydWN0dXJlCi0g KiBAcHJvcGVydHk6IEluY29taW5nIHByb3BlcnR5IHBvaW50ZXIKLSAqIEB2YWw6IEluY29taW5n IHByb3BlcnR5IHZhbHVlCi0gKiBSZXR1cm5zOiBaZXJvIG9uIHN1Y2Nlc3MKLSAqLwotaW50IG1z bV9wcm9wZXJ0eV9hdG9taWNfc2V0KHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbywKLQkJ c3RydWN0IG1zbV9wcm9wZXJ0eV9zdGF0ZSAqcHJvcGVydHlfc3RhdGUsCi0JCXN0cnVjdCBkcm1f cHJvcGVydHkgKnByb3BlcnR5LAotCQl1aW50NjRfdCB2YWwpOwotCi0vKioKLSAqIG1zbV9wcm9w ZXJ0eV9hdG9taWNfZ2V0IC0gaGVscGVyIGZ1bmN0aW9uIGZvciBhdG9taWMgcHJvcGVydHkgZ2V0 IGNhbGxiYWNrCi0gKiBAaW5mbzogUG9pbnRlciB0byBwcm9wZXJ0eSBpbmZvIGNvbnRhaW5lciBz dHJ1Y3QKLSAqIEBwcm9wZXJ0eV9zdGF0ZTogUG9pbnRlciB0byBsb2NhbCBzdGF0ZSBzdHJ1Y3R1 cmUKLSAqIEBwcm9wZXJ0eTogSW5jb21pbmcgcHJvcGVydHkgcG9pbnRlcgotICogQHZhbDogUG9p bnRlciB0byB2YXJpYWJsZSBmb3IgcmVjZWl2aW5nIHByb3BlcnR5IHZhbHVlCi0gKiBSZXR1cm5z OiBaZXJvIG9uIHN1Y2Nlc3MKLSAqLwotaW50IG1zbV9wcm9wZXJ0eV9hdG9taWNfZ2V0KHN0cnVj dCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbywKLQkJc3RydWN0IG1zbV9wcm9wZXJ0eV9zdGF0ZSAq cHJvcGVydHlfc3RhdGUsCi0JCXN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LAotCQl1aW50 NjRfdCAqdmFsKTsKLQotLyoqCi0gKiBtc21fcHJvcGVydHlfYWxsb2Nfc3RhdGUgLSBoZWxwZXIg ZnVuY3Rpb24gZm9yIGFsbG9jYXRpbmcgbG9jYWwgc3RhdGUgb2JqZWN0cwotICogQGluZm86IFBv aW50ZXIgdG8gcHJvcGVydHkgaW5mbyBjb250YWluZXIgc3RydWN0Ci0gKi8KLXZvaWQgKm1zbV9w cm9wZXJ0eV9hbGxvY19zdGF0ZShzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmluZm8pOwotCi0v KioKLSAqIG1zbV9wcm9wZXJ0eV9yZXNldF9zdGF0ZSAtIGhlbHBlciBmdW5jdGlvbiBmb3Igc3Rh dGUgcmVzZXQgY2FsbGJhY2sKLSAqIEBpbmZvOiBQb2ludGVyIHRvIHByb3BlcnR5IGluZm8gY29u dGFpbmVyIHN0cnVjdAotICogQHN0YXRlOiBQb2ludGVyIHRvIGxvY2FsIHN0YXRlIHN0cnVjdHVy ZQotICogQHByb3BlcnR5X3N0YXRlOiBQb2ludGVyIHRvIHByb3BlcnR5IHN0YXRlIGNvbnRhaW5l ciBzdHJ1Y3QKLSAqIEBwcm9wZXJ0eV92YWx1ZXM6IFBvaW50ZXIgdG8gcHJvcGVydHkgdmFsdWVz IGNhY2hlIGFycmF5Ci0gKi8KLXZvaWQgbXNtX3Byb3BlcnR5X3Jlc2V0X3N0YXRlKHN0cnVjdCBt c21fcHJvcGVydHlfaW5mbyAqaW5mbywgdm9pZCAqc3RhdGUsCi0JCXN0cnVjdCBtc21fcHJvcGVy dHlfc3RhdGUgKnByb3BlcnR5X3N0YXRlLAotCQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X3ZhbHVlICpw cm9wZXJ0eV92YWx1ZXMpOwotCi0vKioKLSAqIG1zbV9wcm9wZXJ0eV9kdXBsaWNhdGVfc3RhdGUg LSBoZWxwZXIgZnVuY3Rpb24gZm9yIGR1cGxpY2F0ZSBzdGF0ZSBjYgotICogQGluZm86IFBvaW50 ZXIgdG8gcHJvcGVydHkgaW5mbyBjb250YWluZXIgc3RydWN0Ci0gKiBAb2xkX3N0YXRlOiBQb2lu dGVyIHRvIG9yaWdpbmFsIHN0YXRlIHN0cnVjdHVyZQotICogQHN0YXRlOiBQb2ludGVyIHRvIG5l d2x5IGNyZWF0ZWQgc3RhdGUgc3RydWN0dXJlCi0gKiBAcHJvcGVydHlfc3RhdGU6IFBvaW50ZXIg dG8gZGVzdGluYXRpb24gcHJvcGVydHkgc3RhdGUgY29udGFpbmVyIHN0cnVjdAotICogQHByb3Bl cnR5X3ZhbHVlczogUG9pbnRlciB0byBwcm9wZXJ0eSB2YWx1ZXMgY2FjaGUgYXJyYXkKLSAqLwot dm9pZCBtc21fcHJvcGVydHlfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBtc21fcHJvcGVydHlfaW5m byAqaW5mbywKLQkJdm9pZCAqb2xkX3N0YXRlLAotCQl2b2lkICpzdGF0ZSwKLQkJc3RydWN0IG1z bV9wcm9wZXJ0eV9zdGF0ZSAqcHJvcGVydHlfc3RhdGUsCi0JCXN0cnVjdCBtc21fcHJvcGVydHlf dmFsdWUgKnByb3BlcnR5X3ZhbHVlcyk7Ci0KLS8qKgotICogbXNtX3Byb3BlcnR5X2Rlc3Ryb3lf c3RhdGUgLSBoZWxwZXIgZnVuY3Rpb24gZm9yIGRlc3Ryb3kgc3RhdGUgY2IKLSAqIEBpbmZvOiBQ b2ludGVyIHRvIHByb3BlcnR5IGluZm8gY29udGFpbmVyIHN0cnVjdAotICogQHN0YXRlOiBQb2lu dGVyIHRvIGxvY2FsIHN0YXRlIHN0cnVjdHVyZQotICogQHByb3BlcnR5X3N0YXRlOiBQb2ludGVy IHRvIHByb3BlcnR5IHN0YXRlIGNvbnRhaW5lciBzdHJ1Y3QKLSAqLwotdm9pZCBtc21fcHJvcGVy dHlfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgbXNtX3Byb3BlcnR5X2luZm8gKmluZm8sCi0JCXZvaWQg KnN0YXRlLAotCQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X3N0YXRlICpwcm9wZXJ0eV9zdGF0ZSk7Ci0K LS8qKgotICogbXNtX3Byb3BlcnR5X2dldF9ibG9iIC0gb2J0YWluIGNhY2hlZCBkYXRhIHBvaW50 ZXIgZm9yIGRybSBibG9iIHByb3BlcnR5Ci0gKiBAaW5mbzogUG9pbnRlciB0byBwcm9wZXJ0eSBp bmZvIGNvbnRhaW5lciBzdHJ1Y3QKLSAqIEBwcm9wZXJ0eV9zdGF0ZTogUG9pbnRlciB0byBwcm9w ZXJ0eSBzdGF0ZSBjb250YWluZXIgc3RydWN0Ci0gKiBAYnl0ZV9sZW46IE9wdGlvbmFsIHBvaW50 ZXIgdG8gdmFyaWFibGUgZm9yIGFjY2VwdGluZyBibG9iIHNpemUKLSAqIEBwcm9wZXJ0eV9pZHg6 IFByb3BlcnR5IGluZGV4Ci0gKiBSZXR1cm5zOiBQb2ludGVyIHRvIGJsb2IgZGF0YQotICovCi12 b2lkICptc21fcHJvcGVydHlfZ2V0X2Jsb2Ioc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvICppbmZv LAotCQlzdHJ1Y3QgbXNtX3Byb3BlcnR5X3N0YXRlICpwcm9wZXJ0eV9zdGF0ZSwKLQkJc2l6ZV90 ICpieXRlX2xlbiwKLQkJdWludDMyX3QgcHJvcGVydHlfaWR4KTsKLQotLyoqCi0gKiBtc21fcHJv cGVydHlfc2V0X2Jsb2IgLSB1cGRhdGUgYmxvYiBwcm9wZXJ0eSBvbiBhIGRybSBvYmplY3QKLSAq IFRoaXMgZnVuY3Rpb24gdXBkYXRlcyB0aGUgYmxvYiBwcm9wZXJ0eSB2YWx1ZSBvZiB0aGUgZ2l2 ZW4gZHJtIG9iamVjdC4gSXRzCi0gKiBpbnRlbmRlZCB1c2UgaXMgdG8gdXBkYXRlIGJsb2IgcHJv cGVydGllcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkIHdpdGggdGhlCi0gKiBEUk1fTU9ERV9QUk9Q X0lNTVVUQUJMRSBmbGFnIHNldC4KLSAqIEBpbmZvOiBQb2ludGVyIHRvIHByb3BlcnR5IGluZm8g Y29udGFpbmVyIHN0cnVjdAotICogQGJsb2JfcmVmZXJlbmNlOiBSZWZlcmVuY2UgdG8gYSBwb2lu dGVyIHRoYXQgaG9sZHMgdGhlIGNyZWF0ZWQgZGF0YSBibG9iCi0gKiBAYmxvYl9kYXRhOiBQb2lu dGVyIHRvIGJsb2IgZGF0YQotICogQGJ5dGVfbGVuOiBMZW5ndGggb2YgYmxvYiBkYXRhLCBpbiBi eXRlcwotICogQHByb3BlcnR5X2lkeDogUHJvcGVydHkgaW5kZXgKLSAqIFJldHVybnM6IFplcm8g b24gc3VjY2VzcwotICovCi1pbnQgbXNtX3Byb3BlcnR5X3NldF9ibG9iKHN0cnVjdCBtc21fcHJv cGVydHlfaW5mbyAqaW5mbywKLQkJc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iICoqYmxvYl9yZWZl cmVuY2UsCi0JCXZvaWQgKmJsb2JfZGF0YSwKLQkJc2l6ZV90IGJ5dGVfbGVuLAotCQl1aW50MzJf dCBwcm9wZXJ0eV9pZHgpOwotCi0vKioKLSAqIG1zbV9wcm9wZXJ0eV9zZXRfcHJvcGVydHkgLSB1 cGRhdGUgcHJvcGVydHkgb24gYSBkcm0gb2JqZWN0Ci0gKiBUaGlzIGZ1bmN0aW9uIHVwZGF0ZXMg dGhlIHByb3BlcnR5IHZhbHVlIG9mIHRoZSBnaXZlbiBkcm0gb2JqZWN0LiBJdHMKLSAqIGludGVu ZGVkIHVzZSBpcyB0byB1cGRhdGUgcHJvcGVydGllcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkIHdp dGggdGhlCi0gKiBEUk1fTU9ERV9QUk9QX0lNTVVUQUJMRSBmbGFnIHNldC4KLSAqIE5vdGU6IFRo aXMgZnVuY3Rpb24gY2Fubm90IGJlIGNhbGxlZCBvbiBhIGJsb2IuCi0gKiBAaW5mbzogUG9pbnRl ciB0byBwcm9wZXJ0eSBpbmZvIGNvbnRhaW5lciBzdHJ1Y3QKLSAqIEBwcm9wZXJ0eV9zdGF0ZTog UG9pbnRlciB0byBwcm9wZXJ0eSBzdGF0ZSBjb250YWluZXIgc3RydWN0Ci0gKiBAcHJvcGVydHlf aWR4OiBQcm9wZXJ0eSBpbmRleAotICogQHZhbDogdmFsdWUgb2YgdGhlIHByb3BlcnR5IHRvIHNl dAotICogUmV0dXJuczogWmVybyBvbiBzdWNjZXNzCi0gKi8KLWludCBtc21fcHJvcGVydHlfc2V0 X3Byb3BlcnR5KHN0cnVjdCBtc21fcHJvcGVydHlfaW5mbyAqaW5mbywKLQkJc3RydWN0IG1zbV9w cm9wZXJ0eV9zdGF0ZSAqcHJvcGVydHlfc3RhdGUsCi0JCXVpbnQzMl90IHByb3BlcnR5X2lkeCwK LQkJdWludDY0X3QgdmFsKTsKLQotI2VuZGlmIC8qIF9NU01fUFJPUF9IXyAqLwotCi0tIApUaGUg UXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gaXMgYSBtZW1iZXIgb2YgdGhlIENvZGUg QXVyb3JhIEZvcnVtLAphIExpbnV4IEZvdW5kYXRpb24gQ29sbGFib3JhdGl2ZSBQcm9qZWN0Cgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpGcmVlZHJlbm8g bWFpbGluZyBsaXN0CkZyZWVkcmVub0BsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9mcmVlZHJlbm8K