From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeykumar Sankaran Subject: [DPU PATCH 5/7] drm/msm/dpu: clean up dpu crtc custom properties Date: Wed, 23 May 2018 12:31:00 -0700 Message-ID: <1527103862-13934-6-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: dri-devel@lists.freedesktop.org UmVtb3ZlIGRwdSBjcnRjIGN1c3RvbSBwcm9wZXJ0aWVzIGFuZCBpdHMgaGFuZGxlcnMuCgpTaWdu ZWQtb2ZmLWJ5OiBKZXlrdW1hciBTYW5rYXJhbiA8anNhbmthQGNvZGVhdXJvcmEub3JnPgotLS0K IGRyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUgICAgICAgICAgICAgICAgICB8ICAgMSAtCiBk cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9wZXJmLmMgfCAgMjggLQogZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYyAgICAgIHwgODU2ICstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0 Yy5oICAgICAgfCAgMjcgKy0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNv ZGVyLmMgICB8ICAxMiAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfZHMu YyAgICAgfCAxNDkgLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19k cy5oICAgICB8IDExMSAtLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdf bG0uYyAgICAgfCAgNjcgLS0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19s bS5oICAgICB8ICAxNCAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfbWRz cy5oICAgfCAgMTYgLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3JtLmMgICAg ICAgIHwgIDcxICstLQogZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmggICAgICAgICAgICAg ICAgIHwgIDE1IC0KIDEyIGZpbGVzIGNoYW5nZWQsIDExIGluc2VydGlvbnMoKyksIDEzNTYgZGVs ZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2h3X2RzLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfaHdfZHMuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFr ZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCmluZGV4IDdiYzM5MjEuLmQyODk1 MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKKysrIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9NYWtlZmlsZQpAQCAtNTcsNyArNTcsNiBAQCBtc20teSA6PSBcCiAJZGlz cC9kcHUxL2RwdV9od19jYXRhbG9nLm8gXAogCWRpc3AvZHB1MS9kcHVfaHdfY2RtLm8gXAogCWRp c3AvZHB1MS9kcHVfaHdfY3RsLm8gXAotCWRpc3AvZHB1MS9kcHVfaHdfZHMubyBcCiAJZGlzcC9k cHUxL2RwdV9od19pbnRlcnJ1cHRzLm8gXAogCWRpc3AvZHB1MS9kcHVfaHdfaW50Zi5vIFwKIAlk aXNwL2RwdTEvZHB1X2h3X2xtLm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2NvcmVfcGVyZi5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2NvcmVfcGVyZi5jCmluZGV4IDk4MWY3N2YuLmM0ODIwZGUgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb3JlX3BlcmYuYworKysgYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29yZV9wZXJmLmMKQEAgLTEwMiwzNCArMTAyLDYgQEAg c3RhdGljIHZvaWQgX2RwdV9jb3JlX3BlcmZfY2FsY19jcnRjKHN0cnVjdCBkcHVfa21zICprbXMs CiAJZHB1X2NzdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKHN0YXRlKTsKIAltZW1zZXQocGVyZiwg MCwgc2l6ZW9mKHN0cnVjdCBkcHVfY29yZV9wZXJmX3BhcmFtcykpOwogCi0JcGVyZi0+YndfY3Rs W0RQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9NTk9DXSA9Ci0JCWRwdV9jcnRjX2dldF9wcm9wZXJ0 eShkcHVfY3N0YXRlLCBDUlRDX1BST1BfQ09SRV9BQik7Ci0JcGVyZi0+bWF4X3Blcl9waXBlX2li W0RQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9NTk9DXSA9Ci0JCWRwdV9jcnRjX2dldF9wcm9wZXJ0 eShkcHVfY3N0YXRlLCBDUlRDX1BST1BfQ09SRV9JQik7Ci0KLQlpZiAoZHB1X2NzdGF0ZS0+Yndf c3BsaXRfdm90ZSkgewotCQlwZXJmLT5id19jdGxbRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX0xM Q0NdID0KLQkJCWRwdV9jcnRjX2dldF9wcm9wZXJ0eShkcHVfY3N0YXRlLCBDUlRDX1BST1BfTExD Q19BQik7Ci0JCXBlcmYtPm1heF9wZXJfcGlwZV9pYltEUFVfUE9XRVJfSEFORExFX0RCVVNfSURf TExDQ10gPQotCQkJZHB1X2NydGNfZ2V0X3Byb3BlcnR5KGRwdV9jc3RhdGUsIENSVENfUFJPUF9M TENDX0lCKTsKLQkJcGVyZi0+YndfY3RsW0RQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9FQkldID0K LQkJCWRwdV9jcnRjX2dldF9wcm9wZXJ0eShkcHVfY3N0YXRlLCBDUlRDX1BST1BfRFJBTV9BQik7 Ci0JCXBlcmYtPm1heF9wZXJfcGlwZV9pYltEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfRUJJXSA9 Ci0JCQlkcHVfY3J0Y19nZXRfcHJvcGVydHkoZHB1X2NzdGF0ZSwgQ1JUQ19QUk9QX0RSQU1fSUIp OwotCX0gZWxzZSB7Ci0JCXBlcmYtPmJ3X2N0bFtEUFVfUE9XRVJfSEFORExFX0RCVVNfSURfTExD Q10gPQotCQkJZHB1X2NydGNfZ2V0X3Byb3BlcnR5KGRwdV9jc3RhdGUsIENSVENfUFJPUF9DT1JF X0FCKTsKLQkJcGVyZi0+bWF4X3Blcl9waXBlX2liW0RQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9M TENDXSA9Ci0JCQlkcHVfY3J0Y19nZXRfcHJvcGVydHkoZHB1X2NzdGF0ZSwgQ1JUQ19QUk9QX0NP UkVfSUIpOwotCQlwZXJmLT5id19jdGxbRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX0VCSV0gPQot CQkJZHB1X2NydGNfZ2V0X3Byb3BlcnR5KGRwdV9jc3RhdGUsIENSVENfUFJPUF9DT1JFX0FCKTsK LQkJcGVyZi0+bWF4X3Blcl9waXBlX2liW0RQVV9QT1dFUl9IQU5ETEVfREJVU19JRF9FQkldID0K LQkJCWRwdV9jcnRjX2dldF9wcm9wZXJ0eShkcHVfY3N0YXRlLCBDUlRDX1BST1BfQ09SRV9JQik7 Ci0JfQotCi0JcGVyZi0+Y29yZV9jbGtfcmF0ZSA9Ci0JCQlkcHVfY3J0Y19nZXRfcHJvcGVydHko ZHB1X2NzdGF0ZSwgQ1JUQ19QUk9QX0NPUkVfQ0xLKTsKLQogCWlmICghZHB1X2NzdGF0ZS0+Yndf Y29udHJvbCkgewogCQlmb3IgKGkgPSAwOyBpIDwgRFBVX1BPV0VSX0hBTkRMRV9EQlVTX0lEX01B WDsgaSsrKSB7CiAJCQlwZXJmLT5id19jdGxbaV0gPSBrbXMtPmNhdGFsb2ctPnBlcmYubWF4X2J3 X2hpZ2ggKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Ny dGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmMKaW5kZXggYTBi NzAyZi4uYjBhM2EzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5j CkBAIC01NzAsMTggKzU3MCw2IEBAIHN0YXRpYyB2b2lkIF9kcHVfY3J0Y19kZWluaXRfZXZlbnRz KHN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGMpCiAJCXJldHVybjsKIH0KIAotLyoqCi0gKiBkcHVf Y3J0Y19kZXN0cm95X2Rlc3Rfc2NhbGVyIC0gZnJlZSBtZW1vcnkgYWxsb2NhdGVkIGZvciBzY2Fs ZXIgbHV0Ci0gKiBAZHB1X2NydGM6IFBvaW50ZXIgdG8gZHB1IGNydGMKLSAqLwotc3RhdGljIHZv aWQgX2RwdV9jcnRjX2Rlc3Ryb3lfZGVzdF9zY2FsZXIoc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0 YykKLXsKLQlpZiAoIWRwdV9jcnRjKQotCQlyZXR1cm47Ci0KLQlrZnJlZShkcHVfY3J0Yy0+c2Ns M19sdXRfY2ZnKTsKLX0KLQogc3RhdGljIHZvaWQgZHB1X2NydGNfZGVzdHJveShzdHJ1Y3QgZHJt X2NydGMgKmNydGMpCiB7CiAJc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YyA9IHRvX2RwdV9jcnRj KGNydGMpOwpAQCAtNTk0LDcgKzU4Miw2IEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRjX2Rlc3Ryb3ko c3RydWN0IGRybV9jcnRjICpjcnRjKQogCWlmIChkcHVfY3J0Yy0+YmxvYl9pbmZvKQogCQlkcm1f cHJvcGVydHlfYmxvYl9wdXQoZHB1X2NydGMtPmJsb2JfaW5mbyk7CiAJbXNtX3Byb3BlcnR5X2Rl c3Ryb3koJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZvKTsKLQlfZHB1X2NydGNfZGVzdHJveV9kZXN0 X3NjYWxlcihkcHVfY3J0Yyk7CiAKIAlfZHB1X2NydGNfZGVpbml0X2V2ZW50cyhkcHVfY3J0Yyk7 CiAKQEAgLTY3OSw3MSArNjY2LDYgQEAgc3RhdGljIHZvaWQgX2RwdV9jcnRjX3NldHVwX2JsZW5k X2NmZyhzdHJ1Y3QgZHB1X2NydGNfbWl4ZXIgKm1peGVyLAogCQlmb3JtYXQtPmFscGhhX2VuYWJs ZSwgZmdfYWxwaGEsIGJnX2FscGhhLCBibGVuZF9vcCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9kcHVf Y3J0Y19zZXR1cF9kaW1fbGF5ZXJfY2ZnKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJc3RydWN0 IGRwdV9jcnRjICpkcHVfY3J0Yywgc3RydWN0IGRwdV9jcnRjX21peGVyICptaXhlciwKLQkJc3Ry dWN0IGRwdV9od19kaW1fbGF5ZXIgKmRpbV9sYXllcikKLXsKLQlzdHJ1Y3QgZHB1X2NydGNfc3Rh dGUgKmNzdGF0ZTsKLQlzdHJ1Y3QgZHB1X2h3X21peGVyICpsbTsKLQlzdHJ1Y3QgZHB1X2h3X2Rp bV9sYXllciBzcGxpdF9kaW1fbGF5ZXI7Ci0JaW50IGk7Ci0KLQlpZiAoIWRpbV9sYXllci0+cmVj dC53IHx8ICFkaW1fbGF5ZXItPnJlY3QuaCkgewotCQlEUFVfREVCVUcoImVtcHR5IGRpbV9sYXll clxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQljc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShjcnRj LT5zdGF0ZSk7Ci0KLQlEUFVfREVCVUcoImRpbV9sYXllciAtIGZsYWdzOiVkLCBzdGFnZTolZFxu IiwKLQkJCWRpbV9sYXllci0+ZmxhZ3MsIGRpbV9sYXllci0+c3RhZ2UpOwotCi0Jc3BsaXRfZGlt X2xheWVyLnN0YWdlID0gZGltX2xheWVyLT5zdGFnZTsKLQlzcGxpdF9kaW1fbGF5ZXIuY29sb3Jf ZmlsbCA9IGRpbV9sYXllci0+Y29sb3JfZmlsbDsKLQotCS8qCi0JICogdHJhdmVyc2UgdGhyb3Vn aCB0aGUgbGF5ZXIgbWl4ZXJzIGF0dGFjaGVkIHRvIGNydGMgYW5kIGZpbmQgdGhlCi0JICogaW50 ZXJzZWN0aW5nIGRpbSBsYXllciByZWN0IGluIGVhY2ggTE0gYW5kIHByb2dyYW0gYWNjb3JkaW5n bHkuCi0JICovCi0JZm9yIChpID0gMDsgaSA8IGRwdV9jcnRjLT5udW1fbWl4ZXJzOyBpKyspIHsK LQkJc3BsaXRfZGltX2xheWVyLmZsYWdzID0gZGltX2xheWVyLT5mbGFnczsKLQotCQlkcHVfa21z X3JlY3RfaW50ZXJzZWN0KCZjc3RhdGUtPmxtX2JvdW5kc1tpXSwgJmRpbV9sYXllci0+cmVjdCwK LQkJCQkJJnNwbGl0X2RpbV9sYXllci5yZWN0KTsKLQkJaWYgKGRwdV9rbXNfcmVjdF9pc19udWxs KCZzcGxpdF9kaW1fbGF5ZXIucmVjdCkpIHsKLQkJCS8qCi0JCQkgKiBubyBleHRyYSBwcm9ncmFt bWluZyByZXF1aXJlZCBmb3Igbm9uLWludGVyc2VjdGluZwotCQkJICogbGF5ZXIgbWl4ZXJzIHdp dGggSU5DTFVTSVZFIGRpbSBsYXllcgotCQkJICovCi0JCQlpZiAoc3BsaXRfZGltX2xheWVyLmZs YWdzICYgRFBVX0RSTV9ESU1fTEFZRVJfSU5DTFVTSVZFKQotCQkJCWNvbnRpbnVlOwotCi0JCQkv KgotCQkJICogcHJvZ3JhbSB0aGUgb3RoZXIgbm9uLWludGVyc2VjdGluZyBsYXllciBtaXhlcnMg d2l0aAotCQkJICogSU5DTFVTSVZFIGRpbSBsYXllciBvZiBmdWxsIHNpemUgZm9yIHVuaWZvcm1p dHkKLQkJCSAqIHdpdGggRVhDTFVTSVZFIGRpbSBsYXllciBjb25maWcuCi0JCQkgKi8KLQkJCXNw bGl0X2RpbV9sYXllci5mbGFncyAmPSB+RFBVX0RSTV9ESU1fTEFZRVJfRVhDTFVTSVZFOwotCQkJ c3BsaXRfZGltX2xheWVyLmZsYWdzIHw9IERQVV9EUk1fRElNX0xBWUVSX0lOQ0xVU0lWRTsKLQkJ CW1lbWNweSgmc3BsaXRfZGltX2xheWVyLnJlY3QsICZjc3RhdGUtPmxtX2JvdW5kc1tpXSwKLQkJ CQkJc2l6ZW9mKHNwbGl0X2RpbV9sYXllci5yZWN0KSk7Ci0KLQkJfSBlbHNlIHsKLQkJCXNwbGl0 X2RpbV9sYXllci5yZWN0LnggPQotCQkJCQlzcGxpdF9kaW1fbGF5ZXIucmVjdC54IC0KLQkJCQkJ CWNzdGF0ZS0+bG1fYm91bmRzW2ldLng7Ci0JCX0KLQotCQlEUFVfREVCVUcoInNwbGl0X2RpbV9s YXllciAtIExNOiVkLCByZWN0OnslZCwlZCwlZCwlZH19XG4iLAotCQkJaSwgc3BsaXRfZGltX2xh eWVyLnJlY3QueCwgc3BsaXRfZGltX2xheWVyLnJlY3QueSwKLQkJCXNwbGl0X2RpbV9sYXllci5y ZWN0LncsIHNwbGl0X2RpbV9sYXllci5yZWN0LmgpOwotCi0JCWxtID0gbWl4ZXJbaV0uaHdfbG07 Ci0JCW1peGVyW2ldLm1peGVyX29wX21vZGUgfD0gMSA8PCBzcGxpdF9kaW1fbGF5ZXIuc3RhZ2U7 Ci0JCWxtLT5vcHMuc2V0dXBfZGltX2xheWVyKGxtLCAmc3BsaXRfZGltX2xheWVyKTsKLQl9Ci19 Ci0KIHN0YXRpYyB2b2lkIF9kcHVfY3J0Y19wcm9ncmFtX2xtX291dHB1dF9yb2koc3RydWN0IGRy bV9jcnRjICpjcnRjKQogewogCXN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGM7CkBAIC03ODcsNyAr NzA5LDYgQEAgc3RhdGljIHZvaWQgX2RwdV9jcnRjX2JsZW5kX3NldHVwX21peGVyKHN0cnVjdCBk cm1fY3J0YyAqY3J0YywKIAl1MzIgZmx1c2hfbWFzazsKIAl1aW50MzJfdCBzdGFnZV9pZHgsIGxt X2lkeDsKIAlpbnQgenBvc19jbnRbRFBVX1NUQUdFX01BWCArIDFdID0geyAwIH07Ci0JaW50IGk7 CiAJYm9vbCBiZ19hbHBoYV9lbmFibGUgPSBmYWxzZTsKIAogCWlmICghZHB1X2NydGMgfHwgIW1p eGVyKSB7CkBAIC04NjMsMTMgKzc4NCw2IEBAIHN0YXRpYyB2b2lkIF9kcHVfY3J0Y19ibGVuZF9z ZXR1cF9taXhlcihzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCX0KIAl9CiAKLQlpZiAobG0gJiYg bG0tPm9wcy5zZXR1cF9kaW1fbGF5ZXIpIHsKLQkJY3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUo Y3J0Yy0+c3RhdGUpOwotCQlmb3IgKGkgPSAwOyBpIDwgY3N0YXRlLT5udW1fZGltX2xheWVyczsg aSsrKQotCQkJX2RwdV9jcnRjX3NldHVwX2RpbV9sYXllcl9jZmcoY3J0YywgZHB1X2NydGMsCi0J CQkJCW1peGVyLCAmY3N0YXRlLT5kaW1fbGF5ZXJbaV0pOwotCX0KLQogCSBfZHB1X2NydGNfcHJv Z3JhbV9sbV9vdXRwdXRfcm9pKGNydGMpOwogfQogCkBAIC05MTEsMTEgKzgyNSw2IEBAIHN0YXRp YyB2b2lkIF9kcHVfY3J0Y19ibGVuZF9zZXR1cChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAJCWlm IChtaXhlcltpXS5od19jdGwtPm9wcy5jbGVhcl9hbGxfYmxlbmRzdGFnZXMpCiAJCQltaXhlcltp XS5od19jdGwtPm9wcy5jbGVhcl9hbGxfYmxlbmRzdGFnZXMoCiAJCQkJCW1peGVyW2ldLmh3X2N0 bCk7Ci0KLQkJLyogY2xlYXIgZGltX2xheWVyIHNldHRpbmdzICovCi0JCWxtID0gbWl4ZXJbaV0u aHdfbG07Ci0JCWlmIChsbS0+b3BzLmNsZWFyX2RpbV9sYXllcikKLQkJCWxtLT5vcHMuY2xlYXJf ZGltX2xheWVyKGxtKTsKIAl9CiAKIAkvKiBpbml0aWFsaXplIHN0YWdlIGNmZyAqLwpAQCAtOTQ3 LDE2MyArODU2LDYgQEAgc3RhdGljIHZvaWQgX2RwdV9jcnRjX2JsZW5kX3NldHVwKHN0cnVjdCBk cm1fY3J0YyAqY3J0YykKIH0KIAogLyoqCi0gKiBfZHB1X2NydGNfc2V0dXBfc2NhbGVyM19sdXQg LSBTZXQgdXAgc2NhbGVyIGx1dAotICogTFVUcyBhcmUgY29uZmlndXJlZCBvbmx5IG9uY2UgZHVy aW5nIGJvb3QKLSAqIEBkcHVfY3J0YzogUG9pbnRlciB0byBkcHUgY3J0YwotICogQGNzdGF0ZTog UG9pbnRlciB0byBkcHUgY3J0YyBzdGF0ZQotICovCi1zdGF0aWMgaW50IF9kcHVfY3J0Y19zZXRf ZGVzdF9zY2FsZXJfbHV0KHN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGMsCi0JCXN0cnVjdCBkcHVf Y3J0Y19zdGF0ZSAqY3N0YXRlLCB1aW50MzJfdCBsdXRfaWR4KQotewotCXN0cnVjdCBkcHVfaHdf c2NhbGVyM19sdXRfY2ZnICpjZmc7Ci0JdTMyICpsdXRfZGF0YSA9IE5VTEw7Ci0Jc2l6ZV90IGxl biA9IDA7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoIWRwdV9jcnRjIHx8ICFjc3RhdGUgfHwgIWRw dV9jcnRjLT5zY2wzX2x1dF9jZmcpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3NcbiIpOwot CQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoZHB1X2NydGMtPnNjbDNfbHV0X2NmZy0+aXNf Y29uZmlndXJlZCkgewotCQlEUFVfREVCVUcoImx1dCBhbHJlYWR5IGNvbmZpZ3VyZWRcbiIpOwot CQlyZXR1cm4gMDsKLQl9Ci0KLQlsdXRfZGF0YSA9IG1zbV9wcm9wZXJ0eV9nZXRfYmxvYigmZHB1 X2NydGMtPnByb3BlcnR5X2luZm8sCi0JCQkmY3N0YXRlLT5wcm9wZXJ0eV9zdGF0ZSwgJmxlbiwg bHV0X2lkeCk7Ci0JaWYgKCFsdXRfZGF0YSB8fCAhbGVuKSB7Ci0JCURQVV9FUlJPUigibHV0KCVk KTogbm8gZGF0YSwgbGVuKCV6dSlcbiIsIGx1dF9pZHgsIGxlbik7Ci0JCXJldHVybiAtRU5PREFU QTsKLQl9Ci0KLQljZmcgPSBkcHVfY3J0Yy0+c2NsM19sdXRfY2ZnOwotCi0Jc3dpdGNoIChsdXRf aWR4KSB7Ci0JY2FzZSBDUlRDX1BST1BfREVTVF9TQ0FMRVJfTFVUX0VEOgotCQljZmctPmRpcl9s dXQgPSBsdXRfZGF0YTsKLQkJY2ZnLT5kaXJfbGVuID0gbGVuOwotCQlicmVhazsKLQljYXNlIENS VENfUFJPUF9ERVNUX1NDQUxFUl9MVVRfQ0lSOgotCQljZmctPmNpcl9sdXQgPSBsdXRfZGF0YTsK LQkJY2ZnLT5jaXJfbGVuID0gbGVuOwotCQlicmVhazsKLQljYXNlIENSVENfUFJPUF9ERVNUX1ND QUxFUl9MVVRfU0VQOgotCQljZmctPnNlcF9sdXQgPSBsdXRfZGF0YTsKLQkJY2ZnLT5zZXBfbGVu ID0gbGVuOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXQgPSAtRUlOVkFMOwotCQlEUFVfRVJS T1IoImludmFsaWQgTFVUIGluZGV4ID0gJWQiLCBsdXRfaWR4KTsKLQkJYnJlYWs7Ci0JfQotCi0J aWYgKGNmZy0+ZGlyX2x1dCAmJiBjZmctPmNpcl9sdXQgJiYgY2ZnLT5zZXBfbHV0KQotCQljZmct PmlzX2NvbmZpZ3VyZWQgPSB0cnVlOwotCi0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBfZHB1 X2NydGNfZGVzdF9zY2FsZXJfc2V0dXAgLSBTZXQgdXAgZGVzdCBzY2FsZXIgYmxvY2sKLSAqIEBj cnRjOiBQb2ludGVyIHRvIGRybSBjcnRjCi0gKi8KLXN0YXRpYyB2b2lkIF9kcHVfY3J0Y19kZXN0 X3NjYWxlcl9zZXR1cChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCi17Ci0Jc3RydWN0IGRwdV9jcnRj ICpkcHVfY3J0YzsKLQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNzdGF0ZTsKLQlzdHJ1Y3QgZHB1 X2h3X21peGVyICpod19sbTsKLQlzdHJ1Y3QgZHB1X2h3X2N0bCAqaHdfY3RsOwotCXN0cnVjdCBk cHVfaHdfZHMgKmh3X2RzOwotCXN0cnVjdCBkcHVfaHdfZHNfY2ZnICpjZmc7Ci0Jc3RydWN0IGRw dV9rbXMgKmttczsKLQl1MzIgZmx1c2hfbWFzayA9IDAsIG9wX21vZGUgPSAwOwotCXUzMiBsbV9p ZHggPSAwLCBudW1fbWl4ZXJzID0gMDsKLQlpbnQgaSwgY291bnQgPSAwOwotCi0JaWYgKCFjcnRj KQotCQlyZXR1cm47Ci0KLQlkcHVfY3J0YyAgID0gdG9fZHB1X2NydGMoY3J0Yyk7Ci0JY3N0YXRl ID0gdG9fZHB1X2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOwotCWttcyAgICA9IF9kcHVfY3J0Y19n ZXRfa21zKGNydGMpOwotCW51bV9taXhlcnMgPSBkcHVfY3J0Yy0+bnVtX21peGVyczsKLQotCURQ VV9ERUJVRygiY3J0YyVkXG4iLCBjcnRjLT5iYXNlLmlkKTsKLQotCWlmICghY3N0YXRlLT5kc19k aXJ0eSkgewotCQlEUFVfREVCVUcoIm5vIGNoYW5nZSBpbiBzZXR0aW5ncywgc2tpcCBjb21taXRc biIpOwotCX0gZWxzZSBpZiAoIWttcyB8fCAha21zLT5jYXRhbG9nKSB7Ci0JCURQVV9FUlJPUigi aW52YWxpZCBwYXJhbWV0ZXJzXG4iKTsKLQl9IGVsc2UgaWYgKCFrbXMtPmNhdGFsb2ctPm1kcFsw XS5oYXNfZGVzdF9zY2FsZXIpIHsKLQkJRFBVX0RFQlVHKCJkZXN0IHNjYWxlciBmZWF0dXJlIG5v dCBzdXBwb3J0ZWRcbiIpOwotCX0gZWxzZSBpZiAobnVtX21peGVycyA+IENSVENfRFVBTF9NSVhF UlMpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIG51bWJlciBtaXhlcnM6ICVkXG4iLCBudW1fbWl4 ZXJzKTsKLQl9IGVsc2UgaWYgKCFkcHVfY3J0Yy0+c2NsM19sdXRfY2ZnLT5pc19jb25maWd1cmVk KSB7Ci0JCURQVV9ERUJVRygibm8gTFVUIGRhdGEgYXZhaWxhYmxlXG4iKTsKLQl9IGVsc2Ugewot CQljb3VudCA9IGNzdGF0ZS0+bnVtX2RzX2VuYWJsZWQgPyBjc3RhdGUtPm51bV9kcyA6IG51bV9t aXhlcnM7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJCWNmZyA9ICZjc3Rh dGUtPmRzX2NmZ1tpXTsKLQotCQkJaWYgKCFjZmctPmZsYWdzKQotCQkJCWNvbnRpbnVlOwotCi0J CQlsbV9pZHggPSBjZmctPm5keDsKLQkJCWh3X2xtICA9IGRwdV9jcnRjLT5taXhlcnNbbG1faWR4 XS5od19sbTsKLQkJCWh3X2N0bCA9IGRwdV9jcnRjLT5taXhlcnNbbG1faWR4XS5od19jdGw7Ci0J CQlod19kcyAgPSBkcHVfY3J0Yy0+bWl4ZXJzW2xtX2lkeF0uaHdfZHM7Ci0KLQkJCS8qIFNldHVw IG9wIG1vZGUgLSBEdWFsL3NpbmdsZSAqLwotCQkJaWYgKGNmZy0+ZmxhZ3MgJiBEUFVfRFJNX0RF U1RTQ0FMRVJfRU5BQkxFKQotCQkJCW9wX21vZGUgfD0gQklUKGh3X2RzLT5pZHggLSBEU18wKTsK LQotCQkJaWYgKChpID09IGNvdW50LTEpICYmIGh3X2RzLT5vcHMuc2V0dXBfb3Btb2RlKSB7Ci0J CQkJb3BfbW9kZSB8PSAoY3N0YXRlLT5udW1fZHNfZW5hYmxlZCA9PQotCQkJCQlDUlRDX0RVQUxf TUlYRVJTKSA/Ci0JCQkJCURQVV9EU19PUF9NT0RFX0RVQUwgOiAwOwotCQkJCWh3X2RzLT5vcHMu c2V0dXBfb3Btb2RlKGh3X2RzLCBvcF9tb2RlKTsKLQkJCQlEUFVfRVZUMzIoRFJNSUQoY3J0Yyks IG9wX21vZGUpOwotCQkJfQotCi0JCQkvKiBTZXR1cCBzY2FsZXIgKi8KLQkJCWlmICgoY2ZnLT5m bGFncyAmIERQVV9EUk1fREVTVFNDQUxFUl9TQ0FMRV9VUERBVEUpIHx8Ci0JCQkJKGNmZy0+Zmxh Z3MgJgotCQkJCQlEUFVfRFJNX0RFU1RTQ0FMRVJfRU5IQU5DRVJfVVBEQVRFKSkgewotCQkJCWlm IChod19kcy0+b3BzLnNldHVwX3NjYWxlcikKLQkJCQkJaHdfZHMtPm9wcy5zZXR1cF9zY2FsZXIo aHdfZHMsCi0JCQkJCQkJY2ZnLT5zY2wzX2NmZywKLQkJCQkJCQlkcHVfY3J0Yy0+c2NsM19sdXRf Y2ZnKTsKLQotCQkJCS8qKgotCQkJCSAqIENsZWFyIHRoZSBmbGFncyBhcyB0aGUgYmxvY2sgZG9l c24ndCBoYXZlIHRvCi0JCQkJICogYmUgcHJvZ3JhbW1lZCBpbiBlYWNoIGNvbW1pdCBpZiBubyB1 cGRhdGVzCi0JCQkJICovCi0JCQkJY2ZnLT5mbGFncyAmPSB+RFBVX0RSTV9ERVNUU0NBTEVSX1ND QUxFX1VQREFURTsKLQkJCQljZmctPmZsYWdzICY9Ci0JCQkJCX5EUFVfRFJNX0RFU1RTQ0FMRVJf RU5IQU5DRVJfVVBEQVRFOwotCQkJfQotCi0JCQkvKgotCQkJICogRGVzdCBzY2FsZXIgc2hhcmVz IHRoZSBmbHVzaCBiaXQgb2YgdGhlIExNIGluIGNvbnRyb2wKLQkJCSAqLwotCQkJaWYgKGNmZy0+ c2V0X2xtX2ZsdXNoICYmIGh3X2xtICYmIGh3X2N0bCAmJgotCQkJCWh3X2N0bC0+b3BzLmdldF9i aXRtYXNrX21peGVyKSB7Ci0JCQkJZmx1c2hfbWFzayA9IGh3X2N0bC0+b3BzLmdldF9iaXRtYXNr X21peGVyKAotCQkJCQkJaHdfY3RsLCBod19sbS0+aWR4KTsKLQkJCQlEUFVfREVCVUcoIlNldCBs bVslZF0gZmx1c2ggPSAlZCIsCi0JCQkJCWh3X2xtLT5pZHgsIGZsdXNoX21hc2spOwotCQkJCWh3 X2N0bC0+b3BzLnVwZGF0ZV9wZW5kaW5nX2ZsdXNoKGh3X2N0bCwKLQkJCQkJCQkJZmx1c2hfbWFz ayk7Ci0JCQl9Ci0JCQljZmctPnNldF9sbV9mbHVzaCA9IGZhbHNlOwotCQl9Ci0JCWNzdGF0ZS0+ ZHNfZGlydHkgPSBmYWxzZTsKLQl9Ci19Ci0KLS8qKgogICogIF9kcHVfY3J0Y19jb21wbGV0ZV9m bGlwIC0gc2lnbmFsIHBlbmRpbmcgcGFnZV9mbGlwIGV2ZW50cwogICogQW55IHBlbmRpbmcgdmJs YW5rIGV2ZW50cyBhcmUgYWRkZWQgdG8gdGhlIHZibGFua19ldmVudF9saXN0CiAgKiBzbyB0aGF0 IHRoZSBuZXh0IHZibGFuayBpbnRlcnJ1cHQgc2hhbGwgc2lnbmFsIHRoZW0uCkBAIC0xMzYxLDQ0 OCArMTExMyw2IEBAIHZvaWQgZHB1X2NydGNfY29tcGxldGVfY29tbWl0KHN0cnVjdCBkcm1fY3J0 YyAqY3J0YywKIAlEUFVfRVZUMzJfVkVSQk9TRShEUk1JRChjcnRjKSk7CiB9CiAKLS8qIF9kcHVf Y3J0Y19zZXRfaWRsZV90aW1lb3V0IC0gdXBkYXRlIGlkbGUgdGltZW91dCB3YWl0IGR1cmF0aW9u ICovCi1zdGF0aWMgdm9pZCBfZHB1X2NydGNfc2V0X2lkbGVfdGltZW91dChzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMsIHU2NCB2YWwpCi17Ci0Jc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwotCi0J aWYgKCFjcnRjKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBjcnRjXG4iKTsKLQkJcmV0dXJuOwot CX0KLQotCWRybV9mb3JfZWFjaF9lbmNvZGVyKGVuY29kZXIsIGNydGMtPmRldikgewotCQlpZiAo ZW5jb2Rlci0+Y3J0YyAhPSBjcnRjKQotCQkJY29udGludWU7Ci0KLQkJZHB1X2VuY29kZXJfc2V0 X2lkbGVfdGltZW91dChlbmNvZGVyLCAodTMyKSB2YWwpOwotCX0KLX0KLQotLyoqCi0gKiBfZHB1 X2NydGNfc2V0X2RpbV9sYXllcl92MSAtIGNvcHkgZGltIGxheWVyIHNldHRpbmdzIGZyb20gdXNl cnNwYWNlCi0gKiBAY3N0YXRlOiAgICAgIFBvaW50ZXIgdG8gZHB1IGNydGMgc3RhdGUKLSAqIEB1 c2VyX3B0cjogICAgVXNlciBwdHIgZm9yIGRwdV9kcm1fZGltX2xheWVyX3YxIHN0cnVjdAotICov Ci1zdGF0aWMgdm9pZCBfZHB1X2NydGNfc2V0X2RpbV9sYXllcl92MShzdHJ1Y3QgZHB1X2NydGNf c3RhdGUgKmNzdGF0ZSwKLQkJdm9pZCBfX3VzZXIgKnVzcl9wdHIpCi17Ci0Jc3RydWN0IGRwdV9k cm1fZGltX2xheWVyX3YxIGRpbV9sYXllcl92MTsKLQlzdHJ1Y3QgZHB1X2RybV9kaW1fbGF5ZXJf Y2ZnICp1c2VyX2NmZzsKLQlzdHJ1Y3QgZHB1X2h3X2RpbV9sYXllciAqZGltX2xheWVyOwotCXUz MiBjb3VudCwgaTsKLQotCWlmICghY3N0YXRlKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBjc3Rh dGVcbiIpOwotCQlyZXR1cm47Ci0JfQotCWRpbV9sYXllciA9IGNzdGF0ZS0+ZGltX2xheWVyOwot Ci0JaWYgKCF1c3JfcHRyKSB7Ci0JCURQVV9ERUJVRygiZGltX2xheWVyIGRhdGEgcmVtb3ZlZFxu Iik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJmRpbV9sYXllcl92MSwg dXNyX3B0ciwgc2l6ZW9mKGRpbV9sYXllcl92MSkpKSB7Ci0JCURQVV9FUlJPUigiZmFpbGVkIHRv IGNvcHkgZGltX2xheWVyIGRhdGFcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JY291bnQgPSBkaW1f bGF5ZXJfdjEubnVtX2xheWVyczsKLQlpZiAoY291bnQgPiBEUFVfTUFYX0RJTV9MQVlFUlMpIHsK LQkJRFBVX0VSUk9SKCJpbnZhbGlkIG51bWJlciBvZiBkaW1fbGF5ZXJzOiVkIiwgY291bnQpOwot CQlyZXR1cm47Ci0JfQotCi0JLyogcG9wdWxhdGUgZnJvbSB1c2VyIHNwYWNlICovCi0JY3N0YXRl LT5udW1fZGltX2xheWVycyA9IGNvdW50OwotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7 Ci0JCXVzZXJfY2ZnID0gJmRpbV9sYXllcl92MS5sYXllcl9jZmdbaV07Ci0KLQkJZGltX2xheWVy W2ldLmZsYWdzID0gdXNlcl9jZmctPmZsYWdzOwotCQlkaW1fbGF5ZXJbaV0uc3RhZ2UgPSB1c2Vy X2NmZy0+c3RhZ2UgKyBEUFVfU1RBR0VfMDsKLQotCQlkaW1fbGF5ZXJbaV0ucmVjdC54ID0gdXNl cl9jZmctPnJlY3QueDE7Ci0JCWRpbV9sYXllcltpXS5yZWN0LnkgPSB1c2VyX2NmZy0+cmVjdC55 MTsKLQkJZGltX2xheWVyW2ldLnJlY3QudyA9IHVzZXJfY2ZnLT5yZWN0LngyIC0gdXNlcl9jZmct PnJlY3QueDE7Ci0JCWRpbV9sYXllcltpXS5yZWN0LmggPSB1c2VyX2NmZy0+cmVjdC55MiAtIHVz ZXJfY2ZnLT5yZWN0LnkxOwotCi0JCWRpbV9sYXllcltpXS5jb2xvcl9maWxsID0gKHN0cnVjdCBk cHVfbWRzc19jb2xvcikgewotCQkJCXVzZXJfY2ZnLT5jb2xvcl9maWxsLmNvbG9yXzAsCi0JCQkJ dXNlcl9jZmctPmNvbG9yX2ZpbGwuY29sb3JfMSwKLQkJCQl1c2VyX2NmZy0+Y29sb3JfZmlsbC5j b2xvcl8yLAotCQkJCXVzZXJfY2ZnLT5jb2xvcl9maWxsLmNvbG9yXzMsCi0JCX07Ci0KLQkJRFBV X0RFQlVHKCJkaW1fbGF5ZXJbJWRdIC0gZmxhZ3M6JWQsIHN0YWdlOiVkXG4iLAotCQkJCWksIGRp bV9sYXllcltpXS5mbGFncywgZGltX2xheWVyW2ldLnN0YWdlKTsKLQkJRFBVX0RFQlVHKCIgcmVj dDp7JWQsJWQsJWQsJWR9LCBjb2xvcjp7JWQsJWQsJWQsJWR9XG4iLAotCQkJCWRpbV9sYXllcltp XS5yZWN0LngsIGRpbV9sYXllcltpXS5yZWN0LnksCi0JCQkJZGltX2xheWVyW2ldLnJlY3Qudywg ZGltX2xheWVyW2ldLnJlY3QuaCwKLQkJCQlkaW1fbGF5ZXJbaV0uY29sb3JfZmlsbC5jb2xvcl8w LAotCQkJCWRpbV9sYXllcltpXS5jb2xvcl9maWxsLmNvbG9yXzEsCi0JCQkJZGltX2xheWVyW2ld LmNvbG9yX2ZpbGwuY29sb3JfMiwKLQkJCQlkaW1fbGF5ZXJbaV0uY29sb3JfZmlsbC5jb2xvcl8z KTsKLQl9Ci19Ci0KLS8qKgotICogX2RwdV9jcnRjX2Rlc3Rfc2NhbGVyX2luaXQgLSBhbGxvY2F0 ZSBtZW1vcnkgZm9yIHNjYWxlciBsdXQKLSAqIEBkcHVfY3J0YyAgICA6ICBQb2ludGVyIHRvIGRw dSBjcnRjCi0gKiBAY2F0YWxvZyA6ICBQb2ludGVyIHRvIG1kc3MgY2F0YWxvZyBpbmZvCi0gKi8K LXN0YXRpYyB2b2lkIF9kcHVfY3J0Y19kZXN0X3NjYWxlcl9pbml0KHN0cnVjdCBkcHVfY3J0YyAq ZHB1X2NydGMsCi0JCQkJc3RydWN0IGRwdV9tZHNzX2NmZyAqY2F0YWxvZykKLXsKLQlpZiAoIWRw dV9jcnRjIHx8ICFjYXRhbG9nKQotCQlyZXR1cm47Ci0KLQlpZiAoIWNhdGFsb2ctPm1kcFswXS5o YXNfZGVzdF9zY2FsZXIpIHsKLQkJRFBVX0RFQlVHKCJkZXN0IHNjYWxlciBmZWF0dXJlIG5vdCBz dXBwb3J0ZWRcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JZHB1X2NydGMtPnNjbDNfbHV0X2NmZyA9 IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkcHVfaHdfc2NhbGVyM19sdXRfY2ZnKSwKLQkJCQlHRlBf S0VSTkVMKTsKLQlpZiAoIWRwdV9jcnRjLT5zY2wzX2x1dF9jZmcpCi0JCURQVV9FUlJPUigiZmFp bGVkIHRvIGNyZWF0ZSBzY2FsZSBMVVQgZm9yIGRlc3Qgc2NhbGVyIik7Ci19Ci0KLS8qKgotICog X2RwdV9jcnRjX3NldF9kZXN0X3NjYWxlciAtIGNvcHkgZGVzdCBzY2FsZXIgc2V0dGluZ3MgZnJv bSB1c2Vyc3BhY2UKLSAqIEBkcHVfY3J0YyAgIDogIFBvaW50ZXIgdG8gZHB1IGNydGMKLSAqIEBj c3RhdGUgOiAgUG9pbnRlciB0byBkcHUgY3J0YyBzdGF0ZQotICogQHVzcl9wdHI6ICBVc2VyIHB0 ciBmb3IgZHB1X2RybV9kZXN0X3NjYWxlcl9kYXRhIHN0cnVjdAotICovCi1zdGF0aWMgaW50IF9k cHVfY3J0Y19zZXRfZGVzdF9zY2FsZXIoc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YywKLQkJCQlz dHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNzdGF0ZSwKLQkJCQl2b2lkIF9fdXNlciAqdXNyX3B0cikK LXsKLQlzdHJ1Y3QgZHB1X2RybV9kZXN0X3NjYWxlcl9kYXRhIGRzX2RhdGE7Ci0Jc3RydWN0IGRw dV9kcm1fZGVzdF9zY2FsZXJfY2ZnICpkc19jZmdfdXNyOwotCXN0cnVjdCBkcHVfZHJtX3NjYWxl cl92MiBzY2FsZXJfdjI7Ci0Jdm9pZCBfX3VzZXIgKnNjYWxlcl92Ml91c3I7Ci0JaW50IGksIGNv dW50LCByZXQgPSAwOwotCi0JaWYgKCFkcHVfY3J0YyB8fCAhY3N0YXRlKSB7Ci0JCURQVV9FUlJP UigiaW52YWxpZCBkcHVfY3J0Yy9zdGF0ZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQot CURQVV9ERUJVRygiY3J0YyAlc1xuIiwgZHB1X2NydGMtPm5hbWUpOwotCi0JY3N0YXRlLT5udW1f ZHMgPSAwOwotCWNzdGF0ZS0+ZHNfZGlydHkgPSBmYWxzZTsKLQlpZiAoIXVzcl9wdHIpIHsKLQkJ RFBVX0RFQlVHKCJkcyBkYXRhIHJlbW92ZWRcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAo Y29weV9mcm9tX3VzZXIoJmRzX2RhdGEsIHVzcl9wdHIsIHNpemVvZihkc19kYXRhKSkpIHsKLQkJ RFBVX0VSUk9SKCJmYWlsZWQgdG8gY29weSBkZXN0IHNjYWxlciBkYXRhIGZyb20gdXNlclxuIik7 Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWNvdW50ID0gZHNfZGF0YS5udW1fZGVzdF9zY2Fs ZXI7Ci0JaWYgKCFkcHVfY3J0Yy0+bnVtX21peGVycyB8fCBjb3VudCA+IGRwdV9jcnRjLT5udW1f bWl4ZXJzIHx8Ci0JCShjb3VudCAmJiAoY291bnQgIT0gZHB1X2NydGMtPm51bV9taXhlcnMpICYm Ci0JCSEoZHNfZGF0YS5kc19jZmdbMF0uZmxhZ3MgJiBEUFVfRFJNX0RFU1RTQ0FMRVJfUFVfRU5B QkxFKSkpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGNvbmZpZzpudW0gZHMoJWQpLCBtaXhlcnMo JWQpLGZsYWdzKCVkKVxuIiwKLQkJCWNvdW50LCBkcHVfY3J0Yy0+bnVtX21peGVycywgZHNfZGF0 YS5kc19jZmdbMF0uZmxhZ3MpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBQb3B1bGF0 ZSBmcm9tIHVzZXIgc3BhY2UgKi8KLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQlk c19jZmdfdXNyID0gJmRzX2RhdGEuZHNfY2ZnW2ldOwotCi0JCWNzdGF0ZS0+ZHNfY2ZnW2ldLm5k eCA9IGRzX2NmZ191c3ItPmluZGV4OwotCQljc3RhdGUtPmRzX2NmZ1tpXS5mbGFncyA9IGRzX2Nm Z191c3ItPmZsYWdzOwotCQljc3RhdGUtPmRzX2NmZ1tpXS5sbV93aWR0aCA9IGRzX2NmZ191c3It PmxtX3dpZHRoOwotCQljc3RhdGUtPmRzX2NmZ1tpXS5sbV9oZWlnaHQgPSBkc19jZmdfdXNyLT5s bV9oZWlnaHQ7Ci0JCWNzdGF0ZS0+ZHNfY2ZnW2ldLnNjbDNfY2ZnID0gTlVMTDsKLQotCQlpZiAo ZHNfY2ZnX3Vzci0+c2NhbGVyX2NmZykgewotCQkJc2NhbGVyX3YyX3VzciA9Ci0JCQkodm9pZCBf X3VzZXIgKikoKHVpbnRwdHJfdClkc19jZmdfdXNyLT5zY2FsZXJfY2ZnKTsKLQotCQkJbWVtc2V0 KCZzY2FsZXJfdjIsIDAsIHNpemVvZihzY2FsZXJfdjIpKTsKLQotCQkJY3N0YXRlLT5kc19jZmdb aV0uc2NsM19jZmcgPQotCQkJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkcHVfaHdfc2NhbGVyM19j ZmcpLAotCQkJCQlHRlBfS0VSTkVMKTsKLQotCQkJaWYgKCFjc3RhdGUtPmRzX2NmZ1tpXS5zY2wz X2NmZykgewotCQkJCXJldCA9IC1FTk9NRU07Ci0JCQkJZ290byBlcnI7Ci0JCQl9Ci0KLQkJCWlm IChjb3B5X2Zyb21fdXNlcigmc2NhbGVyX3YyLCBzY2FsZXJfdjJfdXNyLAotCQkJCQlzaXplb2Yo c2NhbGVyX3YyKSkpIHsKLQkJCQlEUFVfRVJST1IoInNjYWxlIGRhdGE6Y29weSBmcm9tIHVzZXIg ZmFpbGVkXG4iKTsKLQkJCQlyZXQgPSAtRUlOVkFMOwotCQkJCWdvdG8gZXJyOwotCQkJfQotCi0J CQlkcHVfc2V0X3NjYWxlcl92Mihjc3RhdGUtPmRzX2NmZ1tpXS5zY2wzX2NmZywKLQkJCQkJJnNj YWxlcl92Mik7Ci0KLQkJCURQVV9ERUJVRygiZW4oJWQpZGlyKCVkKWRlKCVkKSBzcmMoJWR4JWQp IGRzdCglZHglZClcbiIsCi0JCQkJc2NhbGVyX3YyLmVuYWJsZSwgc2NhbGVyX3YyLmRpcl9lbiwK LQkJCQlzY2FsZXJfdjIuZGUuZW5hYmxlLCBzY2FsZXJfdjIuc3JjX3dpZHRoWzBdLAotCQkJCXNj YWxlcl92Mi5zcmNfaGVpZ2h0WzBdLCBzY2FsZXJfdjIuZHN0X3dpZHRoLAotCQkJCXNjYWxlcl92 Mi5kc3RfaGVpZ2h0KTsKLQkJCURQVV9FVlQzMl9WRVJCT1NFKERSTUlEKCZkcHVfY3J0Yy0+YmFz ZSksCi0JCQkJc2NhbGVyX3YyLmVuYWJsZSwgc2NhbGVyX3YyLmRpcl9lbiwKLQkJCQlzY2FsZXJf djIuZGUuZW5hYmxlLCBzY2FsZXJfdjIuc3JjX3dpZHRoWzBdLAotCQkJCXNjYWxlcl92Mi5zcmNf aGVpZ2h0WzBdLCBzY2FsZXJfdjIuZHN0X3dpZHRoLAotCQkJCXNjYWxlcl92Mi5kc3RfaGVpZ2h0 KTsKLQkJfQotCi0JCURQVV9ERUJVRygiZHMgY2ZnWyVkXS1uZHgoJWQpIGZsYWdzKCVkKSBsbSgl ZHglZClcbiIsCi0JCQlpLCBkc19jZmdfdXNyLT5pbmRleCwgZHNfY2ZnX3Vzci0+ZmxhZ3MsCi0J CQlkc19jZmdfdXNyLT5sbV93aWR0aCwgZHNfY2ZnX3Vzci0+bG1faGVpZ2h0KTsKLQkJRFBVX0VW VDMyX1ZFUkJPU0UoRFJNSUQoJmRwdV9jcnRjLT5iYXNlKSwgaSwgZHNfY2ZnX3Vzci0+aW5kZXgs Ci0JCQlkc19jZmdfdXNyLT5mbGFncywgZHNfY2ZnX3Vzci0+bG1fd2lkdGgsCi0JCQlkc19jZmdf dXNyLT5sbV9oZWlnaHQpOwotCX0KLQotCWNzdGF0ZS0+bnVtX2RzID0gY291bnQ7Ci0JY3N0YXRl LT5kc19kaXJ0eSA9IHRydWU7Ci0JcmV0dXJuIDA7Ci0KLWVycjoKLQlmb3IgKDsgaSA+PSAwOyBp LS0pCi0JCWtmcmVlKGNzdGF0ZS0+ZHNfY2ZnW2ldLnNjbDNfY2ZnKTsKLQotCXJldHVybiByZXQ7 Ci19Ci0KLS8qKgotICogX2RwdV9jcnRjX2NoZWNrX2Rlc3Rfc2NhbGVyX2RhdGEgLSB2YWxpZGF0 ZSB0aGUgZGVzdCBzY2FsZXIgZGF0YQotICogQGNydGMgIDogIFBvaW50ZXIgdG8gZHJtIGNydGMK LSAqIEBzdGF0ZSA6ICBQb2ludGVyIHRvIGRybSBjcnRjIHN0YXRlCi0gKi8KLXN0YXRpYyBpbnQg X2RwdV9jcnRjX2NoZWNrX2Rlc3Rfc2NhbGVyX2RhdGEoc3RydWN0IGRybV9jcnRjICpjcnRjLAot CQkJCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCi17Ci0Jc3RydWN0IGRwdV9jcnRjICpk cHVfY3J0YzsKLQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNzdGF0ZTsKLQlzdHJ1Y3QgZHJtX2Rp c3BsYXlfbW9kZSAqbW9kZTsKLQlzdHJ1Y3QgZHB1X2ttcyAqa21zOwotCXN0cnVjdCBkcHVfaHdf ZHMgKmh3X2RzOwotCXN0cnVjdCBkcHVfaHdfZHNfY2ZnICpjZmc7Ci0JdTMyIGksIHJldCA9IDAs IGxtX2lkeDsKLQl1MzIgbnVtX2RzX2VuYWJsZSA9IDA7Ci0JdTMyIG1heF9pbl93aWR0aCA9IDAs IG1heF9vdXRfd2lkdGggPSAwOwotCXUzMiBwcmV2X2xtX3dpZHRoID0gMCwgcHJldl9sbV9oZWln aHQgPSAwOwotCi0JaWYgKCFjcnRjIHx8ICFzdGF0ZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlk cHVfY3J0YyA9IHRvX2RwdV9jcnRjKGNydGMpOwotCWNzdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRl KHN0YXRlKTsKLQlrbXMgPSBfZHB1X2NydGNfZ2V0X2ttcyhjcnRjKTsKLQltb2RlID0gJnN0YXRl LT5hZGp1c3RlZF9tb2RlOwotCi0JRFBVX0RFQlVHKCJjcnRjJWRcbiIsIGNydGMtPmJhc2UuaWQp OwotCi0JaWYgKCFjc3RhdGUtPmRzX2RpcnR5ICYmICFjc3RhdGUtPm51bV9kc19lbmFibGVkKSB7 Ci0JCURQVV9ERUJVRygiZGVzdCBzY2FsZXIgcHJvcGVydHkgbm90IHNldCwgc2tpcCB2YWxpZGF0 aW9uXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKCFrbXMgfHwgIWttcy0+Y2F0YWxvZykg ewotCQlEUFVfRVJST1IoImludmFsaWQgcGFyYW1ldGVyc1xuIik7Ci0JCXJldHVybiAtRUlOVkFM OwotCX0KLQotCWlmICgha21zLT5jYXRhbG9nLT5tZHBbMF0uaGFzX2Rlc3Rfc2NhbGVyKSB7Ci0J CURQVV9ERUJVRygiZGVzdCBzY2FsZXIgZmVhdHVyZSBub3Qgc3VwcG9ydGVkXG4iKTsKLQkJcmV0 dXJuIDA7Ci0JfQotCi0JaWYgKCFkcHVfY3J0Yy0+bnVtX21peGVycykgewotCQlEUFVfRVJST1Io Im1peGVycyBub3QgYWxsb2NhdGVkXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyoq Ci0JICogQ2hlY2sgaWYgc3VmZmljaWVudCBodyByZXNvdXJjZXMgYXJlCi0JICogYXZhaWxhYmxl IGFzIHBlciB0YXJnZXQgY2FwcyAmIHRvcG9sb2d5Ci0JICovCi0JaWYgKGRwdV9jcnRjLT5udW1f bWl4ZXJzID4gQ1JUQ19EVUFMX01JWEVSUykgewotCQlEUFVfRVJST1IoImludmFsaWQgY29uZmln OiBtaXhlcnMoJWQpIG1heCglZClcbiIsCi0JCQlkcHVfY3J0Yy0+bnVtX21peGVycywgQ1JUQ19E VUFMX01JWEVSUyk7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyOwotCX0KLQotCWZvciAo aSA9IDA7IGkgPCBkcHVfY3J0Yy0+bnVtX21peGVyczsgaSsrKSB7Ci0JCWlmICghZHB1X2NydGMt Pm1peGVyc1tpXS5od19sbSB8fCAhZHB1X2NydGMtPm1peGVyc1tpXS5od19kcykgewotCQkJRFBV X0VSUk9SKCJpbnN1ZmZpY2llbnQgSFcgcmVzb3VyY2VzIGFsbG9jYXRlZFxuIik7Ci0JCQlyZXQg PSAtRUlOVkFMOwotCQkJZ290byBlcnI7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDaGVjayBpZiBE UyBuZWVkcyB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkCi0JICogSW4gY2FzZSBvZiBlbmFibGUs IHZhbGlkYXRlIHRoZSBkYXRhCi0JICovCi0JaWYgKCFjc3RhdGUtPmRzX2RpcnR5IHx8ICFjc3Rh dGUtPm51bV9kcyB8fAotCQkhKGNzdGF0ZS0+ZHNfY2ZnWzBdLmZsYWdzICYgRFBVX0RSTV9ERVNU U0NBTEVSX0VOQUJMRSkpIHsKLQkJRFBVX0RFQlVHKCJkaXNhYmxlIGRlc3Qgc2NhbGVyLGRpcnR5 KCVkKW51bSglZClmbGFncyglZClcbiIsCi0JCQljc3RhdGUtPmRzX2RpcnR5LCBjc3RhdGUtPm51 bV9kcywKLQkJCWNzdGF0ZS0+ZHNfY2ZnWzBdLmZsYWdzKTsKLQkJZ290byBkaXNhYmxlOwotCX0K LQotCS8qKgotCSAqIE5vIG9mIGRlc3Qgc2NhbGVycyBzaG91bGRuJ3QgZXhjZWVkIGh3IGRzIGJs b2NrIGNvdW50IGFuZAotCSAqIGFsc28sIG1hdGNoIHRoZSBudW0gb2YgbWl4ZXJzIHVubGVzcyBp dCBpcyBwYXJ0aWFsIHVwZGF0ZQotCSAqIGxlZnQgb25seS9yaWdodCBvbmx5IHVzZSBjYXNlIC0g Y3VycmVudGx5IFBVICsgRFMgaXMgbm90IHN1cHBvcnRlZAotCSAqLwotCWlmIChjc3RhdGUtPm51 bV9kcyA+IGttcy0+Y2F0YWxvZy0+ZHNfY291bnQgfHwKLQkJKChjc3RhdGUtPm51bV9kcyAhPSBk cHVfY3J0Yy0+bnVtX21peGVycykgJiYKLQkJIShjc3RhdGUtPmRzX2NmZ1swXS5mbGFncyAmIERQ VV9EUk1fREVTVFNDQUxFUl9QVV9FTkFCTEUpKSkgewotCQlEUFVfRVJST1IoImludmFsaWQgY2Zn OiBudW1fZHMoJWQpLCBod19kc19jbnQoJWQpIGZsYWdzKCVkKVxuIiwKLQkJCWNzdGF0ZS0+bnVt X2RzLCBrbXMtPmNhdGFsb2ctPmRzX2NvdW50LAotCQkJY3N0YXRlLT5kc19jZmdbMF0uZmxhZ3Mp OwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGVycjsKLQl9Ci0KLQkvKiBWYWxpZGF0ZSB0aGUg RFMgZGF0YSAqLwotCWZvciAoaSA9IDA7IGkgPCBjc3RhdGUtPm51bV9kczsgaSsrKSB7Ci0JCWNm ZyA9ICZjc3RhdGUtPmRzX2NmZ1tpXTsKLQkJbG1faWR4ID0gY2ZnLT5uZHg7Ci0KLQkJLyoqCi0J CSAqIFZhbGlkYXRlIGFnYWluc3QgdG9wb2xvZ3kKLQkJICogTm8gb2YgZGVzdCBzY2FsZXJzIHNo b3VsZCBtYXRjaCB0aGUgbnVtIG9mIG1peGVycwotCQkgKiB1bmxlc3MgaXQgaXMgcGFydGlhbCB1 cGRhdGUgbGVmdCBvbmx5L3JpZ2h0IG9ubHkgdXNlIGNhc2UKLQkJICovCi0JCWlmIChsbV9pZHgg Pj0gZHB1X2NydGMtPm51bV9taXhlcnMgfHwgKGkgIT0gbG1faWR4ICYmCi0JCQkhKGNmZy0+Zmxh Z3MgJiBEUFVfRFJNX0RFU1RTQ0FMRVJfUFVfRU5BQkxFKSkpIHsKLQkJCURQVV9FUlJPUigiaW52 YWxpZCB1c2VyIGRhdGEoJWQpOmlkeCglZCksIGZsYWdzKCVkKVxuIiwKLQkJCQlpLCBsbV9pZHgs IGNmZy0+ZmxhZ3MpOwotCQkJcmV0ID0gLUVJTlZBTDsKLQkJCWdvdG8gZXJyOwotCQl9Ci0KLQkJ aHdfZHMgPSBkcHVfY3J0Yy0+bWl4ZXJzW2xtX2lkeF0uaHdfZHM7Ci0KLQkJaWYgKCFtYXhfaW5f d2lkdGggJiYgIW1heF9vdXRfd2lkdGgpIHsKLQkJCW1heF9pbl93aWR0aCA9IGh3X2RzLT5zY2wt PnRvcC0+bWF4aW5wdXR3aWR0aDsKLQkJCW1heF9vdXRfd2lkdGggPSBod19kcy0+c2NsLT50b3At Pm1heG91dHB1dHdpZHRoOwotCi0JCQlpZiAoY3N0YXRlLT5udW1fZHMgPT0gQ1JUQ19EVUFMX01J WEVSUykKLQkJCQltYXhfaW5fd2lkdGggLT0gRFBVX0RTX09WRVJGRVRDSF9TSVpFOwotCi0JCQlE UFVfREVCVUcoIm1heCBEUyB3aWR0aCBbJWQsJWRdIGZvciBudW1fZHMgPSAlZFxuIiwKLQkJCQlt YXhfaW5fd2lkdGgsIG1heF9vdXRfd2lkdGgsIGNzdGF0ZS0+bnVtX2RzKTsKLQkJfQotCi0JCS8q IENoZWNrIExNIHdpZHRoIGFuZCBoZWlnaHQgKi8KLQkJaWYgKGNmZy0+bG1fd2lkdGggPiAobW9k ZS0+aGRpc3BsYXkvZHB1X2NydGMtPm51bV9taXhlcnMpIHx8Ci0JCQljZmctPmxtX2hlaWdodCA+ IG1vZGUtPnZkaXNwbGF5IHx8Ci0JCQkhY2ZnLT5sbV93aWR0aCB8fCAhY2ZnLT5sbV9oZWlnaHQp IHsKLQkJCURQVV9FUlJPUigiaW52YWxpZCBsbSBzaXplWyVkLCVkXSBkaXNwbGF5IFslZCwlZF1c biIsCi0JCQkJY2ZnLT5sbV93aWR0aCwKLQkJCQljZmctPmxtX2hlaWdodCwKLQkJCQltb2RlLT5o ZGlzcGxheS9kcHVfY3J0Yy0+bnVtX21peGVycywKLQkJCQltb2RlLT52ZGlzcGxheSk7Ci0JCQly ZXQgPSAtRTJCSUc7Ci0JCQlnb3RvIGVycjsKLQkJfQotCi0JCWlmICghcHJldl9sbV93aWR0aCAm JiAhcHJldl9sbV9oZWlnaHQpIHsKLQkJCXByZXZfbG1fd2lkdGggPSBjZmctPmxtX3dpZHRoOwot CQkJcHJldl9sbV9oZWlnaHQgPSBjZmctPmxtX2hlaWdodDsKLQkJfSBlbHNlIHsKLQkJCWlmIChj ZmctPmxtX3dpZHRoICE9IHByZXZfbG1fd2lkdGggfHwKLQkJCQljZmctPmxtX2hlaWdodCAhPSBw cmV2X2xtX2hlaWdodCkgewotCQkJCURQVV9FUlJPUigibG0gc2l6ZTpsZWZ0WyVkLCVkXSwgcmln aHRbJWQgJWRdXG4iLAotCQkJCQljZmctPmxtX3dpZHRoLCBjZmctPmxtX2hlaWdodCwKLQkJCQkJ cHJldl9sbV93aWR0aCwgcHJldl9sbV9oZWlnaHQpOwotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJ Z290byBlcnI7Ci0JCQl9Ci0JCX0KLQotCQkvKiBDaGVjayBzY2FsZXIgZGF0YSAqLwotCQlpZiAo Y2ZnLT5mbGFncyAmIERQVV9EUk1fREVTVFNDQUxFUl9TQ0FMRV9VUERBVEUgfHwKLQkJCWNmZy0+ ZmxhZ3MgJiBEUFVfRFJNX0RFU1RTQ0FMRVJfRU5IQU5DRVJfVVBEQVRFKSB7Ci0JCQlpZiAoIWNm Zy0+c2NsM19jZmcpIHsKLQkJCQlyZXQgPSAtRUlOVkFMOwotCQkJCURQVV9FUlJPUigibnVsbCBz Y2FsZSBkYXRhXG4iKTsKLQkJCQlnb3RvIGVycjsKLQkJCX0KLQkJCWlmIChjZmctPnNjbDNfY2Zn LT5zcmNfd2lkdGhbMF0gPiBtYXhfaW5fd2lkdGggfHwKLQkJCQljZmctPnNjbDNfY2ZnLT5kc3Rf d2lkdGggPiBtYXhfb3V0X3dpZHRoIHx8Ci0JCQkJIWNmZy0+c2NsM19jZmctPnNyY193aWR0aFsw XSB8fAotCQkJCSFjZmctPnNjbDNfY2ZnLT5kc3Rfd2lkdGgpIHsKLQkJCQlEUFVfRVJST1IoInNj YWxlIHdpZHRoKCVkICVkKSBmb3IgZHMtJWQ6XG4iLAotCQkJCQljZmctPnNjbDNfY2ZnLT5zcmNf d2lkdGhbMF0sCi0JCQkJCWNmZy0+c2NsM19jZmctPmRzdF93aWR0aCwKLQkJCQkJaHdfZHMtPmlk eCAtIERTXzApOwotCQkJCURQVV9FUlJPUigic2NhbGVfZW4gPSAlZCwgREVfZW4gPSVkXG4iLAot CQkJCQljZmctPnNjbDNfY2ZnLT5lbmFibGUsCi0JCQkJCWNmZy0+c2NsM19jZmctPmRlLmVuYWJs ZSk7Ci0KLQkJCQljZmctPmZsYWdzICY9Ci0JCQkJCX5EUFVfRFJNX0RFU1RTQ0FMRVJfU0NBTEVf VVBEQVRFOwotCQkJCWNmZy0+ZmxhZ3MgJj0KLQkJCQkJfkRQVV9EUk1fREVTVFNDQUxFUl9FTkhB TkNFUl9VUERBVEU7Ci0KLQkJCQlyZXQgPSAtRUlOVkFMOwotCQkJCWdvdG8gZXJyOwotCQkJfQot CQl9Ci0KLQkJaWYgKGNmZy0+ZmxhZ3MgJiBEUFVfRFJNX0RFU1RTQ0FMRVJfRU5BQkxFKQotCQkJ bnVtX2RzX2VuYWJsZSsrOwotCi0JCS8qKgotCQkgKiBWYWxpZGF0aW9uIHN1Y2Nlc3NmdWwsIGlu ZGljYXRvciBmb3IgZmx1c2ggdG8gYmUgaXNzdWVkCi0JCSAqLwotCQljZmctPnNldF9sbV9mbHVz aCA9IHRydWU7Ci0KLQkJRFBVX0RFQlVHKCJkc1slZF06IGZsYWdzID0gMHglWFxuIiwKLQkJCWh3 X2RzLT5pZHggLSBEU18wLCBjZmctPmZsYWdzKTsKLQl9Ci0KLWRpc2FibGU6Ci0JRFBVX0RFQlVH KCJkZXN0IHNjYWxlciBlbmFibGUgc3RhdHVzLCBvbGQgPSAlZCwgbmV3ID0gJWQiLAotCQljc3Rh dGUtPm51bV9kc19lbmFibGVkLCBudW1fZHNfZW5hYmxlKTsKLQlEUFVfRVZUMzIoRFJNSUQoY3J0 YyksIGNzdGF0ZS0+bnVtX2RzX2VuYWJsZWQsIG51bV9kc19lbmFibGUsCi0JCWNzdGF0ZS0+ZHNf ZGlydHkpOwotCi0JaWYgKGNzdGF0ZS0+bnVtX2RzX2VuYWJsZWQgIT0gbnVtX2RzX2VuYWJsZSkg ewotCQkvKiBEaXNhYmxpbmcgZGVzdGluYXRpb24gc2NhbGVyICovCi0JCWlmICghbnVtX2RzX2Vu YWJsZSkgewotCQkJZm9yIChpID0gMDsgaSA8IGRwdV9jcnRjLT5udW1fbWl4ZXJzOyBpKyspIHsK LQkJCQljZmcgPSAmY3N0YXRlLT5kc19jZmdbaV07Ci0JCQkJY2ZnLT5uZHggPSBpOwotCQkJCS8q IFVwZGF0ZSBzY2FsZXIgc2V0dGluZ3MgaW4gZGlzYWJsZSBjYXNlICovCi0JCQkJY2ZnLT5mbGFn cyA9IERQVV9EUk1fREVTVFNDQUxFUl9TQ0FMRV9VUERBVEU7Ci0JCQkJY2ZnLT5zY2wzX2NmZy0+ ZW5hYmxlID0gMDsKLQkJCQljZmctPnNjbDNfY2ZnLT5kZS5lbmFibGUgPSAwOwotCQkJCWNmZy0+ c2V0X2xtX2ZsdXNoID0gdHJ1ZTsKLQkJCX0KLQkJfQotCQljc3RhdGUtPm51bV9kc19lbmFibGVk ID0gbnVtX2RzX2VuYWJsZTsKLQkJY3N0YXRlLT5kc19kaXJ0eSA9IHRydWU7Ci0JfQotCi0JcmV0 dXJuIDA7Ci0KLWVycjoKLQljc3RhdGUtPmRzX2RpcnR5ID0gZmFsc2U7Ci0JcmV0dXJuIHJldDsK LX0KLQogc3RhdGljIHZvaWQgX2RwdV9jcnRjX3NldHVwX21peGVyX2Zvcl9lbmNvZGVyKAogCQlz dHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jKQpAQCAtMTgx MywxMSArMTEyMywxMCBAQCBzdGF0aWMgdm9pZCBfZHB1X2NydGNfc2V0dXBfbWl4ZXJfZm9yX2Vu Y29kZXIoCiAJc3RydWN0IGRwdV9jcnRjX21peGVyICptaXhlcjsKIAlzdHJ1Y3QgZHB1X2h3X2N0 bCAqbGFzdF92YWxpZF9jdGwgPSBOVUxMOwogCWludCBpOwotCXN0cnVjdCBkcHVfcm1faHdfaXRl ciBsbV9pdGVyLCBjdGxfaXRlciwgZHNfaXRlcjsKKwlzdHJ1Y3QgZHB1X3JtX2h3X2l0ZXIgbG1f aXRlciwgY3RsX2l0ZXI7CiAKIAlkcHVfcm1faW5pdF9od19pdGVyKCZsbV9pdGVyLCBlbmMtPmJh c2UuaWQsIERQVV9IV19CTEtfTE0pOwogCWRwdV9ybV9pbml0X2h3X2l0ZXIoJmN0bF9pdGVyLCBl bmMtPmJhc2UuaWQsIERQVV9IV19CTEtfQ1RMKTsKLQlkcHVfcm1faW5pdF9od19pdGVyKCZkc19p dGVyLCBlbmMtPmJhc2UuaWQsIERQVV9IV19CTEtfRFMpOwogCiAJLyogU2V0IHVwIGFsbCB0aGUg bWl4ZXJzIGFuZCBjdGxzIHJlc2VydmVkIGJ5IHRoaXMgZW5jb2RlciAqLwogCWZvciAoaSA9IGRw dV9jcnRjLT5udW1fbWl4ZXJzOyBpIDwgQVJSQVlfU0laRShkcHVfY3J0Yy0+bWl4ZXJzKTsgaSsr KSB7CkBAIC0xODQ0LDEwICsxMTUzLDYgQEAgc3RhdGljIHZvaWQgX2RwdV9jcnRjX3NldHVwX21p eGVyX2Zvcl9lbmNvZGVyKAogCQkJcmV0dXJuOwogCQl9CiAKLQkJLyogRFMgbWF5IGJlIG51bGwg Ki8KLQkJKHZvaWQpIGRwdV9ybV9nZXRfaHcocm0sICZkc19pdGVyKTsKLQkJbWl4ZXItPmh3X2Rz ID0gKHN0cnVjdCBkcHVfaHdfZHMgKilkc19pdGVyLmh3OwotCiAJCW1peGVyLT5lbmNvZGVyID0g ZW5jOwogCiAJCWRwdV9jcnRjLT5udW1fbWl4ZXJzKys7CkBAIC0xODU1LDkgKzExNjAsNiBAQCBz dGF0aWMgdm9pZCBfZHB1X2NydGNfc2V0dXBfbWl4ZXJfZm9yX2VuY29kZXIoCiAJCQkJaSwgbWl4 ZXItPmh3X2xtLT5pZHggLSBMTV8wKTsKIAkJRFBVX0RFQlVHKCJzZXR1cCBtaXhlciAlZDogY3Rs ICVkXG4iLAogCQkJCWksIG1peGVyLT5od19jdGwtPmlkeCAtIENUTF8wKTsKLQkJaWYgKG1peGVy LT5od19kcykKLQkJCURQVV9ERUJVRygic2V0dXAgbWl4ZXIgJWQ6IGRzICVkXG4iLAotCQkJCWks IG1peGVyLT5od19kcy0+aWR4IC0gRFNfMCk7CiAJfQogfQogCkBAIC0xOTczLDcgKzEyNzUsNiBA QCBzdGF0aWMgdm9pZCBkcHVfY3J0Y19hdG9taWNfYmVnaW4oc3RydWN0IGRybV9jcnRjICpjcnRj LAogCQlyZXR1cm47CiAKIAlfZHB1X2NydGNfYmxlbmRfc2V0dXAoY3J0Yyk7Ci0JX2RwdV9jcnRj X2Rlc3Rfc2NhbGVyX3NldHVwKGNydGMpOwogCiAJLyoKIAkgKiBQUF9ET05FIGlycSBpcyBvbmx5 IHVzZWQgYnkgY29tbWFuZCBtb2RlIGZvciBub3cuCkBAIC0yNjcyLDEzICsxOTczLDYgQEAgc3Rh dGljIGludCBkcHVfY3J0Y19hdG9taWNfY2hlY2soc3RydWN0IGRybV9jcnRjICpjcnRjLAogCiAJ bWVtc2V0KHBpcGVfc3RhZ2VkLCAwLCBzaXplb2YocGlwZV9zdGFnZWQpKTsKIAotCXJjID0gX2Rw dV9jcnRjX2NoZWNrX2Rlc3Rfc2NhbGVyX2RhdGEoY3J0Yywgc3RhdGUpOwotCWlmIChyYykgewot CQlEUFVfRVJST1IoImNydGMlZCBmYWlsZWQgZGVzdCBzY2FsZXIgY2hlY2sgJWRcbiIsCi0JCQlj cnRjLT5iYXNlLmlkLCByYyk7Ci0JCWdvdG8gZW5kOwotCX0KLQogCW1peGVyX3dpZHRoID0gZHB1 X2NydGNfZ2V0X21peGVyX3dpZHRoKGRwdV9jcnRjLCBjc3RhdGUsIG1vZGUpOwogCiAJX2RwdV9j cnRjX3NldHVwX2xtX2JvdW5kcyhjcnRjLCBzdGF0ZSk7CkBAIC0yNjk5LDE5ICsxOTkzLDYgQEAg c3RhdGljIGludCBkcHVfY3J0Y19hdG9taWNfY2hlY2soc3RydWN0IGRybV9jcnRjICpjcnRjLAog CQlwc3RhdGVzW2NudF0uc3RhZ2UgPSBwc3RhdGUtPm5vcm1hbGl6ZWRfenBvczsKIAkJcHN0YXRl c1tjbnRdLnBpcGVfaWQgPSBkcHVfcGxhbmVfcGlwZShwbGFuZSk7CiAKLQkJLyogY2hlY2sgZGlt IGxheWVyIHN0YWdlIHdpdGggZXZlcnkgcGxhbmUgKi8KLQkJZm9yIChpID0gMDsgaSA8IGNzdGF0 ZS0+bnVtX2RpbV9sYXllcnM7IGkrKykgewotCQkJaWYgKGNzdGF0ZS0+ZGltX2xheWVyW2ldLnN0 YWdlCi0JCQkJCT09IChwc3RhdGVzW2NudF0uc3RhZ2UgKyBEUFVfU1RBR0VfMCkpIHsKLQkJCQlE UFVfRVJST1IoCi0JCQkJCSJwbGFuZTolZC9kaW1fbGF5ZXI6JWktc2FtZSBzdGFnZTolZFxuIiwK LQkJCQkJcGxhbmUtPmJhc2UuaWQsIGksCi0JCQkJCWNzdGF0ZS0+ZGltX2xheWVyW2ldLnN0YWdl KTsKLQkJCQlyYyA9IC1FSU5WQUw7Ci0JCQkJZ290byBlbmQ7Ci0JCQl9Ci0JCX0KLQogCQlpZiAo cGlwZV9zdGFnZWRbcHN0YXRlc1tjbnRdLnBpcGVfaWRdKSB7CiAJCQltdWx0aXJlY3RfcGxhbmVb bXVsdGlyZWN0X2NvdW50XS5yMCA9CiAJCQkJcGlwZV9zdGFnZWRbcHN0YXRlc1tjbnRdLnBpcGVf aWRdOwpAQCAtMjk0Nyw1MiArMjIyOCwxMSBAQCBzdGF0aWMgdm9pZCBkcHVfY3J0Y19pbnN0YWxs X3Byb3BlcnRpZXMoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCQlyZXR1cm47CiAJfQogCi0JLyog cmFuZ2UgcHJvcGVydGllcyAqLwotCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3JhbmdlKCZkcHVfY3J0 Yy0+cHJvcGVydHlfaW5mbywKLQkJCSJjb3JlX2NsayIsIDB4MCwgMCwgVTY0X01BWCwKLQkJCWRw dV9rbXMtPnBlcmYubWF4X2NvcmVfY2xrX3JhdGUsCi0JCQlDUlRDX1BST1BfQ09SRV9DTEspOwot CW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3JhbmdlKCZkcHVfY3J0Yy0+cHJvcGVydHlfaW5mbywKLQkJ CSJjb3JlX2FiIiwgMHgwLCAwLCBVNjRfTUFYLAotCQkJY2F0YWxvZy0+cGVyZi5tYXhfYndfaGln aCAqIDEwMDBVTEwsCi0JCQlDUlRDX1BST1BfQ09SRV9BQik7Ci0JbXNtX3Byb3BlcnR5X2luc3Rh bGxfcmFuZ2UoJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZvLAotCQkJImNvcmVfaWIiLCAweDAsIDAs IFU2NF9NQVgsCi0JCQljYXRhbG9nLT5wZXJmLm1heF9id19oaWdoICogMTAwMFVMTCwKLQkJCUNS VENfUFJPUF9DT1JFX0lCKTsKLQltc21fcHJvcGVydHlfaW5zdGFsbF9yYW5nZSgmZHB1X2NydGMt PnByb3BlcnR5X2luZm8sCi0JCQkibGxjY19hYiIsIDB4MCwgMCwgVTY0X01BWCwKLQkJCWNhdGFs b2ctPnBlcmYubWF4X2J3X2hpZ2ggKiAxMDAwVUxMLAotCQkJQ1JUQ19QUk9QX0xMQ0NfQUIpOwot CW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3JhbmdlKCZkcHVfY3J0Yy0+cHJvcGVydHlfaW5mbywKLQkJ CSJsbGNjX2liIiwgMHgwLCAwLCBVNjRfTUFYLAotCQkJY2F0YWxvZy0+cGVyZi5tYXhfYndfaGln aCAqIDEwMDBVTEwsCi0JCQlDUlRDX1BST1BfTExDQ19JQik7Ci0JbXNtX3Byb3BlcnR5X2luc3Rh bGxfcmFuZ2UoJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZvLAotCQkJImRyYW1fYWIiLCAweDAsIDAs IFU2NF9NQVgsCi0JCQljYXRhbG9nLT5wZXJmLm1heF9id19oaWdoICogMTAwMFVMTCwKLQkJCUNS VENfUFJPUF9EUkFNX0FCKTsKLQltc21fcHJvcGVydHlfaW5zdGFsbF9yYW5nZSgmZHB1X2NydGMt PnByb3BlcnR5X2luZm8sCi0JCQkiZHJhbV9pYiIsIDB4MCwgMCwgVTY0X01BWCwKLQkJCWNhdGFs b2ctPnBlcmYubWF4X2J3X2hpZ2ggKiAxMDAwVUxMLAotCQkJQ1JUQ19QUk9QX0RSQU1fSUIpOwot Ci0JbXNtX3Byb3BlcnR5X2luc3RhbGxfcmFuZ2UoJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZvLAot CQkiaWRsZV90aW1lb3V0IiwgSURMRV9USU1FT1VULCAwLCBVNjRfTUFYLCAwLAotCQlDUlRDX1BS T1BfSURMRV9USU1FT1VUKTsKLQogCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX2Jsb2IoJmRwdV9jcnRj LT5wcm9wZXJ0eV9pbmZvLCAiY2FwYWJpbGl0aWVzIiwKIAkJRFJNX01PREVfUFJPUF9JTU1VVEFC TEUsIENSVENfUFJPUF9JTkZPKTsKIAogCWRwdV9rbXNfaW5mb19yZXNldChpbmZvKTsKIAotCWlm IChjYXRhbG9nLT5jYXBzLT5oYXNfZGltX2xheWVyKSB7Ci0JCW1zbV9wcm9wZXJ0eV9pbnN0YWxs X3ZvbGF0aWxlX3JhbmdlKCZkcHVfY3J0Yy0+cHJvcGVydHlfaW5mbywKLQkJCSJkaW1fbGF5ZXJf djEiLCAweDAsIDAsIH4wLCAwLCBDUlRDX1BST1BfRElNX0xBWUVSX1YxKTsKLQkJZHB1X2ttc19p bmZvX2FkZF9rZXlpbnQoaW5mbywgImRpbV9sYXllcl92MV9tYXhfbGF5ZXJzIiwKLQkJCQlEUFVf TUFYX0RJTV9MQVlFUlMpOwotCX0KLQogCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJo d192ZXJzaW9uIiwgY2F0YWxvZy0+aHd2ZXJzaW9uKTsKIAlkcHVfa21zX2luZm9fYWRkX2tleWlu dChpbmZvLCAibWF4X2xpbmV3aWR0aCIsCiAJCQljYXRhbG9nLT5jYXBzLT5tYXhfbWl4ZXJfd2lk dGgpOwpAQCAtMzAxMiwzOSArMjI1Miw2IEBAIHN0YXRpYyB2b2lkIGRwdV9jcnRjX2luc3RhbGxf cHJvcGVydGllcyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCQkJCSJzbWFydF9kbWFfcmV2Iiwg InNtYXJ0X2RtYV92MiIpOwogCX0KIAotCWlmIChjYXRhbG9nLT5tZHBbMF0uaGFzX2Rlc3Rfc2Nh bGVyKSB7Ci0JCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJoYXNfZGVzdF9zY2FsZXIi LAotCQkJCWNhdGFsb2ctPm1kcFswXS5oYXNfZGVzdF9zY2FsZXIpOwotCQlkcHVfa21zX2luZm9f YWRkX2tleWludChpbmZvLCAiZGVzdF9zY2FsZXJfY291bnQiLAotCQkJCQljYXRhbG9nLT5kc19j b3VudCk7Ci0KLQkJaWYgKGNhdGFsb2ctPmRzWzBdLnRvcCkgewotCQkJZHB1X2ttc19pbmZvX2Fk ZF9rZXlpbnQoaW5mbywKLQkJCQkJIm1heF9kZXN0X3NjYWxlcl9pbnB1dF93aWR0aCIsCi0JCQkJ CWNhdGFsb2ctPmRzWzBdLnRvcC0+bWF4aW5wdXR3aWR0aCk7Ci0JCQlkcHVfa21zX2luZm9fYWRk X2tleWludChpbmZvLAotCQkJCQkibWF4X2Rlc3Rfc2NhbGVyX291dHB1dF93aWR0aCIsCi0JCQkJ CWNhdGFsb2ctPmRzWzBdLnRvcC0+bWF4aW5wdXR3aWR0aCk7Ci0JCQlkcHVfa21zX2luZm9fYWRk X2tleWludChpbmZvLCAibWF4X2Rlc3Rfc2NhbGVfdXAiLAotCQkJCQljYXRhbG9nLT5kc1swXS50 b3AtPm1heHVwc2NhbGUpOwotCQl9Ci0KLQkJaWYgKGNhdGFsb2ctPmRzWzBdLmZlYXR1cmVzICYg QklUKERQVV9TU1BQX1NDQUxFUl9RU0VFRDMpKSB7Ci0JCQltc21fcHJvcGVydHlfaW5zdGFsbF92 b2xhdGlsZV9yYW5nZSgKLQkJCQkJJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZvLCAiZGVzdF9zY2Fs ZXIiLAotCQkJCQkweDAsIDAsIH4wLCAwLCBDUlRDX1BST1BfREVTVF9TQ0FMRVIpOwotCQkJbXNt X3Byb3BlcnR5X2luc3RhbGxfYmxvYigmZHB1X2NydGMtPnByb3BlcnR5X2luZm8sCi0JCQkJCSJk c19sdXRfZWQiLCAwLAotCQkJCQlDUlRDX1BST1BfREVTVF9TQ0FMRVJfTFVUX0VEKTsKLQkJCW1z bV9wcm9wZXJ0eV9pbnN0YWxsX2Jsb2IoJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZvLAotCQkJCQki ZHNfbHV0X2NpciIsIDAsCi0JCQkJCUNSVENfUFJPUF9ERVNUX1NDQUxFUl9MVVRfQ0lSKTsKLQkJ CW1zbV9wcm9wZXJ0eV9pbnN0YWxsX2Jsb2IoJmRwdV9jcnRjLT5wcm9wZXJ0eV9pbmZvLAotCQkJ CQkiZHNfbHV0X3NlcCIsIDAsCi0JCQkJCUNSVENfUFJPUF9ERVNUX1NDQUxFUl9MVVRfU0VQKTsK LQkJfQotCX0KLQogCWRwdV9rbXNfaW5mb19hZGRfa2V5aW50KGluZm8sICJoYXNfc3JjX3NwbGl0 IiwKIAkJCQljYXRhbG9nLT5jYXBzLT5oYXNfc3JjX3NwbGl0KTsKIAlpZiAoY2F0YWxvZy0+cGVy Zi5tYXhfYndfbG93KQpAQCAtMzExMyw3ICsyMzIwLDcgQEAgc3RhdGljIGludCBkcHVfY3J0Y19h dG9taWNfc2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIHsKIAlzdHJ1Y3QgZHB1 X2NydGMgKmRwdV9jcnRjOwogCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqY3N0YXRlOwotCWludCBp ZHgsIHJldCA9IC1FSU5WQUw7CisJaW50IHJldCA9IC1FSU5WQUw7CiAKIAlpZiAoIWNydGMgfHwg IXN0YXRlIHx8ICFwcm9wZXJ0eSkgewogCQlEUFVfRVJST1IoImludmFsaWQgYXJndW1lbnQocylc biIpOwpAQCAtMzEyMiw0NSArMjMyOSw4IEBAIHN0YXRpYyBpbnQgZHB1X2NydGNfYXRvbWljX3Nl dF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCWNzdGF0ZSA9IHRvX2RwdV9jcnRj X3N0YXRlKHN0YXRlKTsKIAkJcmV0ID0gbXNtX3Byb3BlcnR5X2F0b21pY19zZXQoJmRwdV9jcnRj LT5wcm9wZXJ0eV9pbmZvLAogCQkJCSZjc3RhdGUtPnByb3BlcnR5X3N0YXRlLCBwcm9wZXJ0eSwg dmFsKTsKLQkJaWYgKCFyZXQpIHsKLQkJCWlkeCA9IG1zbV9wcm9wZXJ0eV9pbmRleCgmZHB1X2Ny dGMtPnByb3BlcnR5X2luZm8sCi0JCQkJCXByb3BlcnR5KTsKLQkJCXN3aXRjaCAoaWR4KSB7Ci0J CQljYXNlIENSVENfUFJPUF9ESU1fTEFZRVJfVjE6Ci0JCQkJX2RwdV9jcnRjX3NldF9kaW1fbGF5 ZXJfdjEoY3N0YXRlLAotCQkJCQkJCXU2NF90b191c2VyX3B0cih2YWwpKTsKLQkJCQlicmVhazsK LQkJCWNhc2UgQ1JUQ19QUk9QX0RFU1RfU0NBTEVSOgotCQkJCXJldCA9IF9kcHVfY3J0Y19zZXRf ZGVzdF9zY2FsZXIoZHB1X2NydGMsCi0JCQkJCQljc3RhdGUsIHU2NF90b191c2VyX3B0cih2YWwp KTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQ1JUQ19QUk9QX0RFU1RfU0NBTEVSX0xVVF9FRDoKLQkJ CWNhc2UgQ1JUQ19QUk9QX0RFU1RfU0NBTEVSX0xVVF9DSVI6Ci0JCQljYXNlIENSVENfUFJPUF9E RVNUX1NDQUxFUl9MVVRfU0VQOgotCQkJCXJldCA9IF9kcHVfY3J0Y19zZXRfZGVzdF9zY2FsZXJf bHV0KGRwdV9jcnRjLAotCQkJCQkJCQljc3RhdGUsIGlkeCk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNl IENSVENfUFJPUF9DT1JFX0NMSzoKLQkJCWNhc2UgQ1JUQ19QUk9QX0NPUkVfQUI6Ci0JCQljYXNl IENSVENfUFJPUF9DT1JFX0lCOgotCQkJCWNzdGF0ZS0+YndfY29udHJvbCA9IHRydWU7Ci0JCQkJ YnJlYWs7Ci0JCQljYXNlIENSVENfUFJPUF9MTENDX0FCOgotCQkJY2FzZSBDUlRDX1BST1BfTExD Q19JQjoKLQkJCWNhc2UgQ1JUQ19QUk9QX0RSQU1fQUI6Ci0JCQljYXNlIENSVENfUFJPUF9EUkFN X0lCOgotCQkJCWNzdGF0ZS0+YndfY29udHJvbCA9IHRydWU7Ci0JCQkJY3N0YXRlLT5id19zcGxp dF92b3RlID0gdHJ1ZTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQ1JUQ19QUk9QX0lETEVfVElNRU9V VDoKLQkJCQlfZHB1X2NydGNfc2V0X2lkbGVfdGltZW91dChjcnRjLCB2YWwpOwotCQkJZGVmYXVs dDoKLQkJCQkvKiBub3RoaW5nIHRvIGRvICovCi0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0gZWxzZSB7 CisJCWlmIChyZXQpCiAJCQlEUk1fRVJST1IoImZhaWxlZCB0byBzZXQgdGhlIHByb3BlcnR5XG4i KTsKLQkJfQogCiAJCURQVV9ERUJVRygiY3J0YyVkICVzWyVkXSA8PSAweCVsbHggcmV0PSVkXG4i LCBjcnRjLT5iYXNlLmlkLAogCQkJCXByb3BlcnR5LT5uYW1lLCBwcm9wZXJ0eS0+YmFzZS5pZCwg dmFsLCByZXQpOwpAQCAtMzI3NiwyMyArMjQ0Niw2IEBAIHN0YXRpYyBpbnQgX2RwdV9kZWJ1Z2Zz X3N0YXR1c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSkKIAogCXNlcV9wdXRz KHMsICJcbiIpOwogCi0JZm9yIChpID0gMDsgaSA8IGNzdGF0ZS0+bnVtX2RpbV9sYXllcnM7IGkr KykgewotCQlzdHJ1Y3QgZHB1X2h3X2RpbV9sYXllciAqZGltX2xheWVyID0gJmNzdGF0ZS0+ZGlt X2xheWVyW2ldOwotCi0JCXNlcV9wcmludGYocywgIlx0ZGltX2xheWVyOiVkXSBzdGFnZTolZCBm bGFnczolZFxuIiwKLQkJCQlpLCBkaW1fbGF5ZXItPnN0YWdlLCBkaW1fbGF5ZXItPmZsYWdzKTsK LQkJc2VxX3ByaW50ZihzLCAiXHRkc3RfeDolZCBkc3RfeTolZCBkc3RfdzolZCBkc3RfaDolZFxu IiwKLQkJCQlkaW1fbGF5ZXItPnJlY3QueCwgZGltX2xheWVyLT5yZWN0LnksCi0JCQkJZGltX2xh eWVyLT5yZWN0LncsIGRpbV9sYXllci0+cmVjdC5oKTsKLQkJc2VxX3ByaW50ZihzLAotCQkJIlx0 Y29sb3JfMDolZCBjb2xvcl8xOiVkIGNvbG9yXzI6JWQgY29sb3JfMzolZFxuIiwKLQkJCQlkaW1f bGF5ZXItPmNvbG9yX2ZpbGwuY29sb3JfMCwKLQkJCQlkaW1fbGF5ZXItPmNvbG9yX2ZpbGwuY29s b3JfMSwKLQkJCQlkaW1fbGF5ZXItPmNvbG9yX2ZpbGwuY29sb3JfMiwKLQkJCQlkaW1fbGF5ZXIt PmNvbG9yX2ZpbGwuY29sb3JfMyk7Ci0JCXNlcV9wdXRzKHMsICJcbiIpOwotCX0KLQogCWRybV9h dG9taWNfY3J0Y19mb3JfZWFjaF9wbGFuZShwbGFuZSwgY3J0YykgewogCQlwc3RhdGUgPSB0b19k cHVfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKIAkJc3RhdGUgPSBwbGFuZS0+c3RhdGU7CkBA IC0zNzc5LDkgKzI5MzIsNiBAQCBzdHJ1Y3QgZHJtX2NydGMgKmRwdV9jcnRjX2luaXQoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCiAKIAlkcHVfY3J0Y19p bnN0YWxsX3Byb3BlcnRpZXMoY3J0Yywga21zLT5jYXRhbG9nKTsKIAotCS8qIEluaXQgZGVzdCBz Y2FsZXIgKi8KLQlfZHB1X2NydGNfZGVzdF9zY2FsZXJfaW5pdChkcHVfY3J0Yywga21zLT5jYXRh bG9nKTsKLQogCURQVV9ERUJVRygiJXM6IHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCBjcnRjXG4i LCBkcHVfY3J0Yy0+bmFtZSk7CiAJcmV0dXJuIGNydGM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2NydGMuaAppbmRleCA1ZjM4MGI4Li42NjI4ZWIzIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmgKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRl ICJkcHVfa21zLmgiCiAjaW5jbHVkZSAiZHB1X2NvcmVfcGVyZi5oIgogI2luY2x1ZGUgImRwdV9o d19ibGsuaCIKLSNpbmNsdWRlICJkcHVfaHdfZHMuaCIKIAogI2RlZmluZSBEUFVfQ1JUQ19OQU1F X1NJWkUJMTIKIApAQCAtODcsNyArODYsNiBAQCBzdHJ1Y3QgZHB1X2NydGNfc21tdV9zdGF0ZV9k YXRhIHsKICAqIHN0cnVjdCBkcHVfY3J0Y19taXhlcjogc3RvcmVzIHRoZSBtYXAgZm9yIGVhY2gg dmlydHVhbCBwaXBlbGluZSBpbiB0aGUgQ1JUQwogICogQGh3X2xtOglMTSBIVyBEcml2ZXIgY29u dGV4dAogICogQGh3X2N0bDoJQ1RMIFBhdGggSFcgZHJpdmVyIGNvbnRleHQKLSAqIEBod19kczoJ RFMgSFcgZHJpdmVyIGNvbnRleHQKICAqIEBlbmNvZGVyOglFbmNvZGVyIGF0dGFjaGVkIHRvIHRo aXMgbG0gJiBjdGwKICAqIEBtaXhlcl9vcF9tb2RlOgltaXhlciBibGVuZGluZyBvcGVyYXRpb24g bW9kZQogICogQGZsdXNoX21hc2s6CW1peGVyIGZsdXNoIG1hc2sgZm9yIGN0bCwgbWl4ZXIgYW5k IHBpcGUKQEAgLTk1LDcgKzkzLDYgQEAgc3RydWN0IGRwdV9jcnRjX3NtbXVfc3RhdGVfZGF0YSB7 CiBzdHJ1Y3QgZHB1X2NydGNfbWl4ZXIgewogCXN0cnVjdCBkcHVfaHdfbWl4ZXIgKmh3X2xtOwog CXN0cnVjdCBkcHVfaHdfY3RsICpod19jdGw7Ci0Jc3RydWN0IGRwdV9od19kcyAqaHdfZHM7CiAJ c3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwogCXUzMiBtaXhlcl9vcF9tb2RlOwogCXUzMiBm bHVzaF9tYXNrOwpAQCAtMzE0LDEyICszMTEsNiBAQCBzdHJ1Y3QgZHB1X2NydGNfcmVzcG9vbCB7 CiAgKiBAcHJvcGVydHlfc3RhdGU6IExvY2FsIHN0b3JhZ2UgZm9yIG1zbV9wcm9wIHByb3BlcnRp ZXMKICAqIEBwcm9wZXJ0eV92YWx1ZXM6IEN1cnJlbnQgY3J0YyBwcm9wZXJ0eSB2YWx1ZXMKICAq IEBpbnB1dF9mZW5jZV90aW1lb3V0X25zIDogQ2FjaGVkIGlucHV0IGZlbmNlIHRpbWVvdXQsIGlu IG5zCi0gKiBAbnVtX2RpbV9sYXllcnM6IE51bWJlciBvZiBkaW0gbGF5ZXJzCi0gKiBAZGltX2xh eWVyOiBEaW0gbGF5ZXIgY29uZmlncwotICogQG51bV9kczogTnVtYmVyIG9mIGRlc3RpbmF0aW9u IHNjYWxlcnMgdG8gYmUgY29uZmlndXJlZAotICogQG51bV9kc19lbmFibGVkOiBOdW1iZXIgb2Yg ZGVzdGluYXRpb24gc2NhbGVycyBlbmFibGVkCi0gKiBAZHNfZGlydHk6IEJvb2xlYW4gdG8gaW5k aWNhdGUgaWYgZGlydHkgb3Igbm90Ci0gKiBAZHNfY2ZnOiBEZXN0aW5hdGlvbiBzY2FsZXIgY29u ZmlnCiAgKiBAbmV3X3BlcmY6IG5ldyBwZXJmb3JtYW5jZSBzdGF0ZSBiZWluZyByZXF1ZXN0ZWQK ICAqLwogc3RydWN0IGRwdV9jcnRjX3N0YXRlIHsKQEAgLTMzNiwxMiArMzI3LDYgQEAgc3RydWN0 IGRwdV9jcnRjX3N0YXRlIHsKIAlzdHJ1Y3QgbXNtX3Byb3BlcnR5X3N0YXRlIHByb3BlcnR5X3N0 YXRlOwogCXN0cnVjdCBtc21fcHJvcGVydHlfdmFsdWUgcHJvcGVydHlfdmFsdWVzW0NSVENfUFJP UF9DT1VOVF07CiAJdWludDY0X3QgaW5wdXRfZmVuY2VfdGltZW91dF9uczsKLQl1aW50MzJfdCBu dW1fZGltX2xheWVyczsKLQlzdHJ1Y3QgZHB1X2h3X2RpbV9sYXllciBkaW1fbGF5ZXJbRFBVX01B WF9ESU1fTEFZRVJTXTsKLQl1aW50MzJfdCBudW1fZHM7Ci0JdWludDMyX3QgbnVtX2RzX2VuYWJs ZWQ7Ci0JYm9vbCBkc19kaXJ0eTsKLQlzdHJ1Y3QgZHB1X2h3X2RzX2NmZyBkc19jZmdbRFBVX01B WF9EU19DT1VOVF07CiAKIAlzdHJ1Y3QgZHB1X2NvcmVfcGVyZl9wYXJhbXMgbmV3X3BlcmY7CiAJ c3RydWN0IGRwdV9jcnRjX3Jlc3Bvb2wgcnA7CkBAIC0zNjIsNyArMzQ3LDYgQEAgc3RydWN0IGRw dV9jcnRjX3N0YXRlIHsKIC8qKgogICogZHB1X2NydGNfZ2V0X21peGVyX3dpZHRoIC0gZ2V0IHRo ZSBtaXhlciB3aWR0aAogICogTWl4ZXIgd2lkdGggd2lsbCBiZSBzYW1lIGFzIHBhbmVsIHdpZHRo KC8yIGZvciBzcGxpdCkKLSAqIHVubGVzcyBkZXN0aW5hdGlvbiBzY2FsZXIgZmVhdHVyZSBpcyBl bmFibGVkCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGRwdV9jcnRjX2dldF9taXhlcl93aWR0aChz dHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjLAogCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqY3N0YXRl LCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKQEAgLTM3MiwxMCArMzU2LDcgQEAgc3Rh dGljIGlubGluZSBpbnQgZHB1X2NydGNfZ2V0X21peGVyX3dpZHRoKHN0cnVjdCBkcHVfY3J0YyAq ZHB1X2NydGMsCiAJaWYgKCFkcHVfY3J0YyB8fCAhY3N0YXRlIHx8ICFtb2RlKQogCQlyZXR1cm4g MDsKIAotCWlmIChjc3RhdGUtPm51bV9kc19lbmFibGVkKQotCQltaXhlcl93aWR0aCA9IGNzdGF0 ZS0+ZHNfY2ZnWzBdLmxtX3dpZHRoOwotCWVsc2UKLQkJbWl4ZXJfd2lkdGggPSAoZHB1X2NydGMt Pm51bV9taXhlcnMgPT0gQ1JUQ19EVUFMX01JWEVSUyA/CisJbWl4ZXJfd2lkdGggPSAoZHB1X2Ny dGMtPm51bV9taXhlcnMgPT0gQ1JUQ19EVUFMX01JWEVSUyA/CiAJCQltb2RlLT5oZGlzcGxheSAv IENSVENfRFVBTF9NSVhFUlMgOiBtb2RlLT5oZGlzcGxheSk7CiAKIAlyZXR1cm4gbWl4ZXJfd2lk dGg7CkBAIC0zODMsOCArMzY0LDcgQEAgc3RhdGljIGlubGluZSBpbnQgZHB1X2NydGNfZ2V0X21p eGVyX3dpZHRoKHN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGMsCiAKIC8qKgogICogZHB1X2NydGNf Z2V0X21peGVyX2hlaWdodCAtIGdldCB0aGUgbWl4ZXIgaGVpZ2h0Ci0gKiBNaXhlciBoZWlnaHQg d2lsbCBiZSBzYW1lIGFzIHBhbmVsIGhlaWdodCB1bmxlc3MKLSAqIGRlc3RpbmF0aW9uIHNjYWxl ciBmZWF0dXJlIGlzIGVuYWJsZWQKKyAqIE1peGVyIGhlaWdodCB3aWxsIGJlIHNhbWUgYXMgcGFu ZWwgaGVpZ2h0CiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGRwdV9jcnRjX2dldF9taXhlcl9oZWln aHQoc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YywKIAkJc3RydWN0IGRwdV9jcnRjX3N0YXRlICpj c3RhdGUsIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQpAQCAtMzkyLDggKzM3Miw3IEBA IHN0YXRpYyBpbmxpbmUgaW50IGRwdV9jcnRjX2dldF9taXhlcl9oZWlnaHQoc3RydWN0IGRwdV9j cnRjICpkcHVfY3J0YywKIAlpZiAoIWRwdV9jcnRjIHx8ICFjc3RhdGUgfHwgIW1vZGUpCiAJCXJl dHVybiAwOwogCi0JcmV0dXJuIChjc3RhdGUtPm51bV9kc19lbmFibGVkID8KLQkJCWNzdGF0ZS0+ ZHNfY2ZnWzBdLmxtX2hlaWdodCA6IG1vZGUtPnZkaXNwbGF5KTsKKwlyZXR1cm4gbW9kZS0+dmRp c3BsYXk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2VuY29kZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNv ZGVyLmMKaW5kZXggNzdkMzU3MS4uNjI2NjBlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfZW5jb2Rlci5jCkBAIC0yMzAsMTggKzIzMCw2IEBAIHN0cnVjdCBkcHVfZW5j b2Rlcl92aXJ0IHsKIH07CiAKICNkZWZpbmUgdG9fZHB1X2VuY29kZXJfdmlydCh4KSBjb250YWlu ZXJfb2YoeCwgc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQsIGJhc2UpCi0KLXZvaWQgZHB1X2VuY29k ZXJfc2V0X2lkbGVfdGltZW91dChzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMsIHUzMiBpZGxl X3RpbWVvdXQpCi17Ci0Jc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmM7Ci0KLQlpZiAo IWRybV9lbmMpCi0JCXJldHVybjsKLQotCWRwdV9lbmMgPSB0b19kcHVfZW5jb2Rlcl92aXJ0KGRy bV9lbmMpOwotCWRwdV9lbmMtPmlkbGVfdGltZW91dCA9IGlkbGVfdGltZW91dDsKLX0KLQogc3Rh dGljIGlubGluZSBpbnQgX2RwdV9lbmNvZGVyX3Bvd2VyX2VuYWJsZShzdHJ1Y3QgZHB1X2VuY29k ZXJfdmlydCAqZHB1X2VuYywKIAkJCQkJCQkJYm9vbCBlbmFibGUpCiB7CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfZHMuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9od19kcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCBmYWQxOWZiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9od19kcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQ5ICswLDAgQEAKLS8qIENvcHlyaWdodCAo YykgMjAxNy0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K LSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK LSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgotICovCi0KLSNpbmNsdWRlICJkcHVfaHdfZHMuaCIKLSNpbmNsdWRlICJkcHVf Zm9ybWF0cy5oIgotI2luY2x1ZGUgImRwdV9kYmcuaCIKLSNpbmNsdWRlICJkcHVfa21zLmgiCi0K LS8qIERlc3RpbmF0aW9uIHNjYWxlciBUT1AgcmVnaXN0ZXJzICovCi0jZGVmaW5lIERFU1RfU0NB TEVSX09QX01PREUgICAgIDB4MDAKLSNkZWZpbmUgREVTVF9TQ0FMRVJfSFdfVkVSU0lPTiAgMHgx MAotCi1zdGF0aWMgdm9pZCBkcHVfaHdfZHNfc2V0dXBfb3Btb2RlKHN0cnVjdCBkcHVfaHdfZHMg Kmh3X2RzLAotCQkJCXUzMiBvcF9tb2RlKQotewotCXN0cnVjdCBkcHVfaHdfYmxrX3JlZ19tYXAg Kmh3ID0gJmh3X2RzLT5odzsKLQotCURQVV9SRUdfV1JJVEUoaHcsIERFU1RfU0NBTEVSX09QX01P REUsIG9wX21vZGUpOwotfQotCi1zdGF0aWMgdm9pZCBkcHVfaHdfZHNfc2V0dXBfc2NhbGVyMyhz dHJ1Y3QgZHB1X2h3X2RzICpod19kcywKLQkJCXZvaWQgKnNjYWxlcl9jZmcsIHZvaWQgKnNjYWxl cl9sdXRfY2ZnKQotewotCXN0cnVjdCBkcHVfaHdfc2NhbGVyM19jZmcgKnNjbDNfY2ZnID0gc2Nh bGVyX2NmZzsKLQlzdHJ1Y3QgZHB1X2h3X3NjYWxlcjNfbHV0X2NmZyAqc2NsM19sdXRfY2ZnID0g c2NhbGVyX2x1dF9jZmc7Ci0KLQlpZiAoIWh3X2RzIHx8ICFod19kcy0+c2NsIHx8ICFzY2wzX2Nm ZyB8fCAhc2NsM19sdXRfY2ZnKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIGNvcHkgTFVUIHZhbHVl cyB0byBzY2FsZXIgc3RydWN0dXJlCi0JICovCi0JaWYgKHNjbDNfbHV0X2NmZy0+aXNfY29uZmln dXJlZCkgewotCQlzY2wzX2NmZy0+ZGlyX2x1dCA9IHNjbDNfbHV0X2NmZy0+ZGlyX2x1dDsKLQkJ c2NsM19jZmctPmRpcl9sZW4gPSBzY2wzX2x1dF9jZmctPmRpcl9sZW47Ci0JCXNjbDNfY2ZnLT5j aXJfbHV0ID0gc2NsM19sdXRfY2ZnLT5jaXJfbHV0OwotCQlzY2wzX2NmZy0+Y2lyX2xlbiA9IHNj bDNfbHV0X2NmZy0+Y2lyX2xlbjsKLQkJc2NsM19jZmctPnNlcF9sdXQgPSBzY2wzX2x1dF9jZmct PnNlcF9sdXQ7Ci0JCXNjbDNfY2ZnLT5zZXBfbGVuID0gc2NsM19sdXRfY2ZnLT5zZXBfbGVuOwot CX0KLQotCWRwdV9od19zZXR1cF9zY2FsZXIzKCZod19kcy0+aHcsIHNjbDNfY2ZnLAotCQkJIGh3 X2RzLT5zY2wtPmJhc2UsCi0JCQkgaHdfZHMtPnNjbC0+dmVyc2lvbiwKLQkJCSBkcHVfZ2V0X2Rw dV9mb3JtYXQoRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMCkpOwotfQotCi1zdGF0aWMgdm9pZCBfc2V0 dXBfZHNfb3BzKHN0cnVjdCBkcHVfaHdfZHNfb3BzICpvcHMsIHVuc2lnbmVkIGxvbmcgZmVhdHVy ZXMpCi17Ci0Jb3BzLT5zZXR1cF9vcG1vZGUgPSBkcHVfaHdfZHNfc2V0dXBfb3Btb2RlOwotCi0J aWYgKHRlc3RfYml0KERQVV9TU1BQX1NDQUxFUl9RU0VFRDMsICZmZWF0dXJlcykpCi0JCW9wcy0+ c2V0dXBfc2NhbGVyID0gZHB1X2h3X2RzX3NldHVwX3NjYWxlcjM7Ci19Ci0KLXN0YXRpYyBzdHJ1 Y3QgZHB1X2RzX2NmZyAqX2RzX29mZnNldChlbnVtIGRwdV9kcyBkcywKLQkJc3RydWN0IGRwdV9t ZHNzX2NmZyAqbSwKLQkJdm9pZCBfX2lvbWVtICphZGRyLAotCQlzdHJ1Y3QgZHB1X2h3X2Jsa19y ZWdfbWFwICpiKQotewotCWludCBpOwotCi0JaWYgKCFtIHx8ICFhZGRyIHx8ICFiKQotCQlyZXR1 cm4gRVJSX1BUUigtRUlOVkFMKTsKLQotCWZvciAoaSA9IDA7IGkgPCBtLT5kc19jb3VudDsgaSsr KSB7Ci0JCWlmICgoZHMgPT0gbS0+ZHNbaV0uaWQpICYmCi0JCQkgKG0tPmRzW2ldLnRvcCkpIHsK LQkJCWItPmJhc2Vfb2ZmID0gYWRkcjsKLQkJCWItPmJsa19vZmYgPSBtLT5kc1tpXS50b3AtPmJh c2U7Ci0JCQliLT5sZW5ndGggPSBtLT5kc1tpXS50b3AtPmxlbjsKLQkJCWItPmh3dmVyc2lvbiA9 IG0tPmh3dmVyc2lvbjsKLQkJCWItPmxvZ19tYXNrID0gRFBVX0RCR19NQVNLX0RTOwotCQkJcmV0 dXJuICZtLT5kc1tpXTsKLQkJfQotCX0KLQotCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwotfQot Ci1zdGF0aWMgc3RydWN0IGRwdV9od19ibGtfb3BzIGRwdV9od19vcHMgPSB7Ci0JLnN0YXJ0ID0g TlVMTCwKLQkuc3RvcCA9IE5VTEwsCi19OwotCi1zdHJ1Y3QgZHB1X2h3X2RzICpkcHVfaHdfZHNf aW5pdChlbnVtIGRwdV9kcyBpZHgsCi0JCQl2b2lkIF9faW9tZW0gKmFkZHIsCi0JCQlzdHJ1Y3Qg ZHB1X21kc3NfY2ZnICptKQotewotCXN0cnVjdCBkcHVfaHdfZHMgKmh3X2RzOwotCXN0cnVjdCBk cHVfZHNfY2ZnICpjZmc7Ci0JaW50IHJjOwotCi0JaWYgKCFhZGRyIHx8ICFtKQotCQlyZXR1cm4g RVJSX1BUUigtRUlOVkFMKTsKLQotCWh3X2RzID0ga3phbGxvYyhzaXplb2YoKmh3X2RzKSwgR0ZQ X0tFUk5FTCk7Ci0JaWYgKCFod19kcykKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0KLQlj ZmcgPSBfZHNfb2Zmc2V0KGlkeCwgbSwgYWRkciwgJmh3X2RzLT5odyk7Ci0JaWYgKElTX0VSUl9P Ul9OVUxMKGNmZykpIHsKLQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gZ2V0IGRzIGNmZ1xuIik7Ci0J CWtmcmVlKGh3X2RzKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci0JfQotCi0JLyogQXNz aWduIG9wcyAqLwotCWh3X2RzLT5pZHggPSBpZHg7Ci0JaHdfZHMtPnNjbCA9IGNmZzsKLQlfc2V0 dXBfZHNfb3BzKCZod19kcy0+b3BzLCBod19kcy0+c2NsLT5mZWF0dXJlcyk7Ci0KLQlyYyA9IGRw dV9od19ibGtfaW5pdCgmaHdfZHMtPmJhc2UsIERQVV9IV19CTEtfRFMsIGlkeCwgJmRwdV9od19v cHMpOwotCWlmIChyYykgewotCQlEUFVfRVJST1IoImZhaWxlZCB0byBpbml0IGh3IGJsayAlZFxu IiwgcmMpOwotCQlnb3RvIGJsa19pbml0X2Vycm9yOwotCX0KLQotCWlmIChjZmctPmxlbikgewot CQlkcHVfZGJnX3JlZ19yZWdpc3Rlcl9kdW1wX3JhbmdlKERQVV9EQkdfTkFNRSwgY2ZnLT5uYW1l LAotCQkJCWh3X2RzLT5ody5ibGtfb2ZmICsgY2ZnLT5iYXNlLAotCQkJCWh3X2RzLT5ody5ibGtf b2ZmICsgY2ZnLT5iYXNlICsgY2ZnLT5sZW4sCi0JCQkJaHdfZHMtPmh3Lnhpbl9pZCk7Ci0JfQot Ci0JcmV0dXJuIGh3X2RzOwotCi1ibGtfaW5pdF9lcnJvcjoKLQlremZyZWUoaHdfZHMpOwotCi0J cmV0dXJuIEVSUl9QVFIocmMpOwotCi19Ci0KLXZvaWQgZHB1X2h3X2RzX2Rlc3Ryb3koc3RydWN0 IGRwdV9od19kcyAqaHdfZHMpCi17Ci0JaWYgKGh3X2RzKQotCQlkcHVfaHdfYmxrX2Rlc3Ryb3ko Jmh3X2RzLT5iYXNlKTsKLQlrZnJlZShod19kcyk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfZHMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlz cC9kcHUxL2RwdV9od19kcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDU1OTIw Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19kcy5o CisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLS8qIENvcHlyaWdodCAoYykgMjAxNy0y MDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgotICovCi0KLSNpZm5kZWYgX0RQVV9IV19EU19ICi0jZGVmaW5lIF9EUFVfSFdfRFNfSAotCi0j aW5jbHVkZSAiZHB1X2h3X21kc3MuaCIKLSNpbmNsdWRlICJkcHVfaHdfdXRpbC5oIgotI2luY2x1 ZGUgImRwdV9od19jYXRhbG9nLmgiCi0jaW5jbHVkZSAiZHB1X2h3X2Jsay5oIgotCi1zdHJ1Y3Qg ZHB1X2h3X2RzOwotCi0vKiBEZXN0aW5hdGlvbiBTY2FsZXIgRFVBTCBtb2RlIG92ZXJmZXRjaCBw aXhlbCBjb3VudCAqLwotI2RlZmluZSBEUFVfRFNfT1ZFUkZFVENIX1NJWkUgNQotCi0vKiBEZXN0 aW5hdGlvbiBzY2FsZXIgRFVBTCBtb2RlIG9wZXJhdGlvbiBiaXQgKi8KLSNkZWZpbmUgRFBVX0RT X09QX01PREVfRFVBTCBCSVQoMTYpCi0KLS8qIHN0cnVjdCBkcHVfaHdfZHNfY2ZnIC0gZGVzdGlu YXRpb24gc2NhbGVyIGNvbmZpZwotICogQG5keCAgICAgICAgICA6IERTIHNlbGVjdGlvbiBpbmRl eAotICogQGZsYWdzICAgICAgICA6IEZsYWcgdG8gc3dpdGNoIGJldHdlZW4gbW9kZSBmb3IgRFMK LSAqIEBsbV93aWR0aCAgICAgOiBMYXllciBtaXhlciB3aWR0aCBjb25maWd1cmF0aW9uCi0gKiBA bG1faGVpZ2ggICAgIDogTGF5ZXIgbWl4ZXIgaGVpZ2h0IGNvbmZpZ3VyYXRpb24KLSAqIEBzZXRf bG1fZmx1c2ggOiBMTSBmbHVzaCBiaXQKLSAqIEBzY2wzX2NmZyAgICAgOiBQb2ludGVyIHRvIGRw dV9od19zY2FsZXIzX2NmZy4KLSAqLwotc3RydWN0IGRwdV9od19kc19jZmcgewotCXUzMiBuZHg7 Ci0JaW50IGZsYWdzOwotCXUzMiBsbV93aWR0aDsKLQl1MzIgbG1faGVpZ2h0OwotCWJvb2wgc2V0 X2xtX2ZsdXNoOwotCXN0cnVjdCBkcHVfaHdfc2NhbGVyM19jZmcgKnNjbDNfY2ZnOwotfTsKLQot LyoqCi0gKiBzdHJ1Y3QgZHB1X2h3X2RzX29wcyAtIGludGVyZmFjZSB0byB0aGUgZGVzdGluYXRp b24gc2NhbGVyCi0gKiBoYXJkd2FyZSBkcml2ZXIgZnVuY3Rpb25zCi0gKiBDYWxsZXIgbXVzdCBj YWxsIHRoZSBpbml0IGZ1bmN0aW9uIHRvIGdldCB0aGUgZHMgY29udGV4dCBmb3IgZWFjaCBkcwot ICogQXNzdW1wdGlvbiBpcyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgY2xv Y2tzIGFyZSBlbmFibGVkCi0gKi8KLXN0cnVjdCBkcHVfaHdfZHNfb3BzIHsKLQkvKioKLQkgKiBz ZXR1cF9vcG1vZGUgLSBkZXN0aW5hdGlvbiBzY2FsZXIgb3AgbW9kZSBzZXR1cAotCSAqIEBod19k cyAgIDogUG9pbnRlciB0byBkcyBjb250ZXh0Ci0JICogQG9wX21vZGUgOiBPcCBtb2RlIGNvbmZp Z3VyYXRpb24KLQkgKi8KLQl2b2lkICgqc2V0dXBfb3Btb2RlKShzdHJ1Y3QgZHB1X2h3X2RzICpo d19kcywKLQkJCQl1MzIgb3BfbW9kZSk7Ci0KLQkvKioKLQkgKiBzZXR1cF9zY2FsZXIgLSBkZXN0 aW5hdGlvbiBzY2FsZXIgYmxvY2sgc2V0dXAKLQkgKiBAaHdfZHMgICAgICAgICAgOiBQb2ludGVy IHRvIGRzIGNvbnRleHQKLQkgKiBAc2NhbGVyX2NmZyAgICAgOiBQb2ludGVyIHRvIHNjYWxlciBk YXRhCi0JICogQHNjYWxlcl9sdXRfY2ZnIDogUG9pbnRlciB0byBzY2FsZXIgbHV0Ci0JICovCi0J dm9pZCAoKnNldHVwX3NjYWxlcikoc3RydWN0IGRwdV9od19kcyAqaHdfZHMsCi0JCQkJdm9pZCAq c2NhbGVyX2NmZywKLQkJCQl2b2lkICpzY2FsZXJfbHV0X2NmZyk7Ci0KLX07Ci0KLS8qKgotICog c3RydWN0IGRwdV9od19kcyAtIGRlc3RpbmF0aW9uIHNjYWxlciBkZXNjcmlwdGlvbgotICogQGJh c2UgOiBIYXJkd2FyZSBibG9jayBiYXNlIHN0cnVjdHVyZQotICogQGh3ICAgOiBCbG9jayBoYXJk d2FyZSBkZXRhaWxzCi0gKiBAaWR4ICA6IERlc3RpbmF0aW9uIHNjYWxlciBpbmRleAotICogQHNj bCAgOiBQb2ludGVyIHRvCi0gKiAgICAgICAgICAtIHNjYWxlciBvZmZzZXQgcmVsYXRpdmUgdG8g dG9wIG9mZnNldAotICogICAgICAgICAgLSBjYXBhYmlsaXRpZXMKLSAqIEBvcHMgIDogUG9pbnRl ciB0byBvcGVyYXRpb25zIGZvciB0aGlzIERTCi0gKi8KLXN0cnVjdCBkcHVfaHdfZHMgewotCXN0 cnVjdCBkcHVfaHdfYmxrIGJhc2U7Ci0Jc3RydWN0IGRwdV9od19ibGtfcmVnX21hcCBodzsKLQll bnVtIGRwdV9kcyBpZHg7Ci0JY29uc3Qgc3RydWN0IGRwdV9kc19jZmcgKnNjbDsKLQlzdHJ1Y3Qg ZHB1X2h3X2RzX29wcyBvcHM7Ci19OwotCi0vKioKLSAqIGRwdV9od19kc19pbml0IC0gaW5pdGlh bGl6ZXMgdGhlIGRlc3RpbmF0aW9uIHNjYWxlcgotICogaHcgZHJpdmVyIG9iamVjdCBhbmQgc2hv dWxkIGJlIGNhbGxlZCBvbmNlIGJlZm9yZQotICogYWNjZXNzaW5nIGV2ZXJ5IGRlc3RpbmF0aW9u IHNjYWxlcgotICogQGlkeCA6IERTIGluZGV4IGZvciB3aGljaCBkcml2ZXIgb2JqZWN0IGlzIHJl cXVpcmVkCi0gKiBAYWRkcjogTWFwcGVkIHJlZ2lzdGVyIGlvIGFkZHJlc3Mgb2YgTURQCi0gKiBA bSAgIDogTURTUyBjYXRhbG9nIGluZm9ybWF0aW9uCi0gKiBAUmV0dXJuOiBwb2ludGVyIHRvIHN0 cnVjdHVyZSBvciBFUlJfUFRSCi0gKi8KLXN0cnVjdCBkcHVfaHdfZHMgKmRwdV9od19kc19pbml0 KGVudW0gZHB1X2RzIGlkeCwKLQkJCXZvaWQgX19pb21lbSAqYWRkciwKLQkJCXN0cnVjdCBkcHVf bWRzc19jZmcgKm0pOwotCi0vKioKLSAqIGRwdV9od19kc19kZXN0cm95IC0gZGVzdHJveXMgZGVz dGluYXRpb24gc2NhbGVyCi0gKiBkcml2ZXIgY29udGV4dAotICogQGh3X2RzOiAgIFBvaW50ZXIg dG8gRFMgY29udGV4dAotICovCi12b2lkIGRwdV9od19kc19kZXN0cm95KHN0cnVjdCBkcHVfaHdf ZHMgKmh3X2RzKTsKLQotI2VuZGlmIC8qX0RQVV9IV19EU19IICovCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfbG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9od19sbS5jCmluZGV4IDc1YTMwZGIuLjgzMGI2OWUgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19sbS5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19sbS5jCkBAIC0xNzIsNjggKzE3Miw2IEBA IHN0YXRpYyB2b2lkIGRwdV9od19sbV9nYyhzdHJ1Y3QgZHB1X2h3X21peGVyICptaXhlciwKIHsK IH0KIAotc3RhdGljIHZvaWQgZHB1X2h3X2xtX2NsZWFyX2RpbV9sYXllcihzdHJ1Y3QgZHB1X2h3 X21peGVyICpjdHgpCi17Ci0Jc3RydWN0IGRwdV9od19ibGtfcmVnX21hcCAqYyA9ICZjdHgtPmh3 OwotCWNvbnN0IHN0cnVjdCBkcHVfbG1fc3ViX2Jsa3MgKnNibGsgPSBjdHgtPmNhcC0+c2JsazsK LQlpbnQgc3RhZ2Vfb2ZmLCBpOwotCXUzMiByZXNldCA9IEJJVCgxNiksIHZhbDsKLQotCXJlc2V0 ID0gfnJlc2V0OwotCWZvciAoaSA9IERQVV9TVEFHRV8wOyBpIDwgc2Jsay0+bWF4YmxlbmRzdGFn ZXM7IGkrKykgewotCQlzdGFnZV9vZmYgPSBfc3RhZ2Vfb2Zmc2V0KGN0eCwgaSk7Ci0JCWlmIChX QVJOX09OKHN0YWdlX29mZiA8IDApKQotCQkJcmV0dXJuOwotCi0JCS8qCi0JCSAqIHJlYWQgdGhl IGV4aXN0aW5nIGJsZW5kbl9vcCByZWdpc3RlciBhbmQgY2xlYXIgb25seSBESU0gbGF5ZXIKLQkJ ICogYml0IChjb2xvcl9maWxsIGJpdCkKLQkJICovCi0JCXZhbCA9IERQVV9SRUdfUkVBRChjLCBM TV9CTEVORDBfT1AgKyBzdGFnZV9vZmYpOwotCQl2YWwgJj0gcmVzZXQ7Ci0JCURQVV9SRUdfV1JJ VEUoYywgTE1fQkxFTkQwX09QICsgc3RhZ2Vfb2ZmLCB2YWwpOwotCX0KLX0KLQotc3RhdGljIHZv aWQgZHB1X2h3X2xtX3NldHVwX2RpbV9sYXllcihzdHJ1Y3QgZHB1X2h3X21peGVyICpjdHgsCi0J CXN0cnVjdCBkcHVfaHdfZGltX2xheWVyICpkaW1fbGF5ZXIpCi17Ci0Jc3RydWN0IGRwdV9od19i bGtfcmVnX21hcCAqYyA9ICZjdHgtPmh3OwotCWludCBzdGFnZV9vZmY7Ci0JdTMyIHZhbCA9IDAs IGFscGhhID0gMDsKLQotCXN0YWdlX29mZiA9IF9zdGFnZV9vZmZzZXQoY3R4LCBkaW1fbGF5ZXIt PnN0YWdlKTsKLQlpZiAoc3RhZ2Vfb2ZmIDwgMCkgewotCQlEUFVfRVJST1IoImludmFsaWQgc3Rh Z2Vfb2ZmOiVkIGZvciBkaW0gbGF5ZXJcbiIsIHN0YWdlX29mZik7Ci0JCXJldHVybjsKLQl9Ci0K LQlhbHBoYSA9IGRpbV9sYXllci0+Y29sb3JfZmlsbC5jb2xvcl8zICYgMHhGRjsKLQl2YWwgPSAo KGRpbV9sYXllci0+Y29sb3JfZmlsbC5jb2xvcl8xIDw8IDIpICYgMHhGRkYpIDw8IDE2IHwKLQkJ CSgoZGltX2xheWVyLT5jb2xvcl9maWxsLmNvbG9yXzAgPDwgMikgJiAweEZGRik7Ci0JRFBVX1JF R19XUklURShjLCBMTV9GR19DT0xPUl9GSUxMX0NPTE9SXzAgKyBzdGFnZV9vZmYsIHZhbCk7Ci0K LQl2YWwgPSAoYWxwaGEgPDwgNCkgPDwgMTYgfAotCQkJKChkaW1fbGF5ZXItPmNvbG9yX2ZpbGwu Y29sb3JfMiA8PCAyKSAmIDB4RkZGKTsKLQlEUFVfUkVHX1dSSVRFKGMsIExNX0ZHX0NPTE9SX0ZJ TExfQ09MT1JfMSArIHN0YWdlX29mZiwgdmFsKTsKLQotCXZhbCA9IGRpbV9sYXllci0+cmVjdC5o IDw8IDE2IHwgZGltX2xheWVyLT5yZWN0Lnc7Ci0JRFBVX1JFR19XUklURShjLCBMTV9GR19DT0xP Ul9GSUxMX1NJWkUgKyBzdGFnZV9vZmYsIHZhbCk7Ci0KLQl2YWwgPSBkaW1fbGF5ZXItPnJlY3Qu eSA8PCAxNiB8IGRpbV9sYXllci0+cmVjdC54OwotCURQVV9SRUdfV1JJVEUoYywgTE1fRkdfQ09M T1JfRklMTF9YWSArIHN0YWdlX29mZiwgdmFsKTsKLQotCXZhbCA9IEJJVCgxNik7IC8qIGVuYWJs ZSBkaW0gbGF5ZXIgKi8KLQl2YWwgfD0gRFBVX0JMRU5EX0ZHX0FMUEhBX0ZHX0NPTlNUIHwgRFBV X0JMRU5EX0JHX0FMUEhBX0JHX0NPTlNUOwotCWlmIChkaW1fbGF5ZXItPmZsYWdzICYgRFBVX0RS TV9ESU1fTEFZRVJfRVhDTFVTSVZFKQotCQl2YWwgfD0gQklUKDE3KTsKLQllbHNlCi0JCXZhbCAm PSB+QklUKDE3KTsKLQlEUFVfUkVHX1dSSVRFKGMsIExNX0JMRU5EMF9PUCArIHN0YWdlX29mZiwg dmFsKTsKLQl2YWwgPSAoYWxwaGEgPDwgMTYpIHwgKDB4ZmYgLSBhbHBoYSk7Ci0JRFBVX1JFR19X UklURShjLCBMTV9CTEVORDBfQ09OU1RfQUxQSEEgKyBzdGFnZV9vZmYsIHZhbCk7Ci19Ci0KIHN0 YXRpYyB2b2lkIGRwdV9od19sbV9zZXR1cF9taXNyKHN0cnVjdCBkcHVfaHdfbWl4ZXIgKmN0eCwK IAkJCQlib29sIGVuYWJsZSwgdTMyIGZyYW1lX2NvdW50KQogewpAQCAtMjcyLDExICsyMTAsNiBA QCBzdGF0aWMgdm9pZCBfc2V0dXBfbWl4ZXJfb3BzKHN0cnVjdCBkcHVfbWRzc19jZmcgKm0sCiAJ b3BzLT5zZXR1cF9nYyA9IGRwdV9od19sbV9nYzsKIAlvcHMtPnNldHVwX21pc3IgPSBkcHVfaHdf bG1fc2V0dXBfbWlzcjsKIAlvcHMtPmNvbGxlY3RfbWlzciA9IGRwdV9od19sbV9jb2xsZWN0X21p c3I7Ci0KLQlpZiAodGVzdF9iaXQoRFBVX0RJTV9MQVlFUiwgJmZlYXR1cmVzKSkgewotCQlvcHMt PnNldHVwX2RpbV9sYXllciA9IGRwdV9od19sbV9zZXR1cF9kaW1fbGF5ZXI7Ci0JCW9wcy0+Y2xl YXJfZGltX2xheWVyID0gZHB1X2h3X2xtX2NsZWFyX2RpbV9sYXllcjsKLQl9CiB9OwogCiBzdGF0 aWMgc3RydWN0IGRwdV9od19ibGtfb3BzIGRwdV9od19vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfbG0uaCBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9od19sbS5oCmluZGV4IGVmMjJjODYuLmUyOWU1ZGEgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19sbS5oCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19sbS5oCkBAIC02NywyMCArNjcsNiBAQCBz dHJ1Y3QgZHB1X2h3X2xtX29wcyB7CiAJdm9pZCAoKnNldHVwX2djKShzdHJ1Y3QgZHB1X2h3X21p eGVyICptaXhlciwKIAkJCXZvaWQgKmNmZyk7CiAKLQkvKioKLQkgKiBzZXR1cF9kaW1fbGF5ZXI6 IGNvbmZpZ3VyZSBkaW0gbGF5ZXIgc2V0dGluZ3MKLQkgKiBAY3R4OiBQb2ludGVyIHRvIGxheWVy IG1peGVyIGNvbnRleHQKLQkgKiBAZGltX2xheWVyOiBkaW0gbGF5ZXIgY29uZmlncwotCSAqLwot CXZvaWQgKCpzZXR1cF9kaW1fbGF5ZXIpKHN0cnVjdCBkcHVfaHdfbWl4ZXIgKmN0eCwKLQkJCXN0 cnVjdCBkcHVfaHdfZGltX2xheWVyICpkaW1fbGF5ZXIpOwotCi0JLyoqCi0JICogY2xlYXJfZGlt X2xheWVyOiBjbGVhciBkaW0gbGF5ZXIgc2V0dGluZ3MKLQkgKiBAY3R4OiBQb2ludGVyIHRvIGxh eWVyIG1peGVyIGNvbnRleHQKLQkgKi8KLQl2b2lkICgqY2xlYXJfZGltX2xheWVyKShzdHJ1Y3Qg ZHB1X2h3X21peGVyICpjdHgpOwotCiAJLyogc2V0dXBfbWlzcjogZW5hYmxlcy9kaXNhYmxlcyBN SVNSIGluIEhXIHJlZ2lzdGVyICovCiAJdm9pZCAoKnNldHVwX21pc3IpKHN0cnVjdCBkcHVfaHdf bWl4ZXIgKmN0eCwKIAkJCWJvb2wgZW5hYmxlLCB1MzIgZnJhbWVfY291bnQpOwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X21kc3MuaCBiL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19tZHNzLmgKaW5kZXggZmNkMTY0Zi4uODM2ZmY5 ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X21kc3Mu aAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfbWRzcy5oCkBAIC05 OSw3ICs5OSw2IEBAIGVudW0gZHB1X2h3X2Jsa190eXBlIHsKIAlEUFVfSFdfQkxLX1RPUCA9IDAs CiAJRFBVX0hXX0JMS19TU1BQLAogCURQVV9IV19CTEtfTE0sCi0JRFBVX0hXX0JMS19EUywKIAlE UFVfSFdfQkxLX0NUTCwKIAlEUFVfSFdfQkxLX0NETSwKIAlEUFVfSFdfQkxLX1BJTkdQT05HLApA QCAtNDY5LDIwICs0NjgsNSBAQCBzdHJ1Y3QgZHB1X21kc3NfY29sb3IgewogI2RlZmluZSBEUFVf REJHX01BU0tfVE9QICAgICAgKDEgPDwgOCkKICNkZWZpbmUgRFBVX0RCR19NQVNLX1ZCSUYgICAg ICgxIDw8IDkpCiAjZGVmaW5lIERQVV9EQkdfTUFTS19ST1QgICAgICAoMSA8PCAxMCkKLSNkZWZp bmUgRFBVX0RCR19NQVNLX0RTICAgICAgICgxIDw8IDExKQotCi0vKioKLSAqIHN0cnVjdCBkcHVf aHdfZGltX2xheWVyOiBkaW0gbGF5ZXIgY29uZmlncwotICogQGZsYWdzOiBGbGFnIHRvIHJlcHJl c2VudCBJTkNMVVNJVkUvRVhDTFVTSVZFCi0gKiBAc3RhZ2U6IEJsZW5kaW5nIHN0YWdlIG9mIGRp bSBsYXllcgotICogQGNvbG9yX2ZpbGw6IENvbG9yIGZpbGwgdG8gYmUgdXNlZCBmb3IgdGhlIGxh eWVyCi0gKiBAcmVjdDogRGltIGxheWVyIGNvb3JkaW5hdGVzCi0gKi8KLXN0cnVjdCBkcHVfaHdf ZGltX2xheWVyIHsKLQl1aW50MzJfdCBmbGFnczsKLQl1aW50MzJfdCBzdGFnZTsKLQlzdHJ1Y3Qg ZHB1X21kc3NfY29sb3IgY29sb3JfZmlsbDsKLQlzdHJ1Y3QgZHB1X3JlY3QgcmVjdDsKLX07CiAK ICNlbmRpZiAgLyogX0RQVV9IV19NRFNTX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9ybS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X3JtLmMKaW5kZXggZjQ2N2JmMS4uMGFmMjk5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X3JtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X3JtLmMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlICJkcHVfaHdfbG0uaCIK ICNpbmNsdWRlICJkcHVfaHdfY3RsLmgiCiAjaW5jbHVkZSAiZHB1X2h3X2NkbS5oIgotI2luY2x1 ZGUgImRwdV9od19kcy5oIgogI2luY2x1ZGUgImRwdV9od19waW5ncG9uZy5oIgogI2luY2x1ZGUg ImRwdV9od19pbnRmLmgiCiAjaW5jbHVkZSAiZHB1X2h3X3diLmgiCkBAIC0yMzUsOSArMjM0LDYg QEAgc3RhdGljIHZvaWQgX2RwdV9ybV9od19kZXN0cm95KGVudW0gZHB1X2h3X2Jsa190eXBlIHR5 cGUsIHZvaWQgKmh3KQogCWNhc2UgRFBVX0hXX0JMS19MTToKIAkJZHB1X2h3X2xtX2Rlc3Ryb3ko aHcpOwogCQlicmVhazsKLQljYXNlIERQVV9IV19CTEtfRFM6Ci0JCWRwdV9od19kc19kZXN0cm95 KGh3KTsKLQkJYnJlYWs7CiAJY2FzZSBEUFVfSFdfQkxLX0NUTDoKIAkJZHB1X2h3X2N0bF9kZXN0 cm95KGh3KTsKIAkJYnJlYWs7CkBAIC0zMTcsOSArMzEzLDYgQEAgc3RhdGljIGludCBfZHB1X3Jt X2h3X2Jsa19jcmVhdGUoCiAJY2FzZSBEUFVfSFdfQkxLX0xNOgogCQlodyA9IGRwdV9od19sbV9p bml0KGlkLCBtbWlvLCBjYXQpOwogCQlicmVhazsKLQljYXNlIERQVV9IV19CTEtfRFM6Ci0JCWh3 ID0gZHB1X2h3X2RzX2luaXQoaWQsIG1taW8sIGNhdCk7Ci0JCWJyZWFrOwogCWNhc2UgRFBVX0hX X0JMS19DVEw6CiAJCWh3ID0gZHB1X2h3X2N0bF9pbml0KGlkLCBtbWlvLCBjYXQpOwogCQlicmVh azsKQEAgLTQyNywxNyArNDIwLDYgQEAgaW50IGRwdV9ybV9pbml0KHN0cnVjdCBkcHVfcm0gKnJt LAogCQl9CiAJfQogCi0JaWYgKGNhdC0+bWRwWzBdLmhhc19kZXN0X3NjYWxlcikgewotCQlmb3Ig KGkgPSAwOyBpIDwgY2F0LT5kc19jb3VudDsgaSsrKSB7Ci0JCQlyYyA9IF9kcHVfcm1faHdfYmxr X2NyZWF0ZShybSwgY2F0LCBtbWlvLCBEUFVfSFdfQkxLX0RTLAotCQkJCQljYXQtPmRzW2ldLmlk LCAmY2F0LT5kc1tpXSk7Ci0JCQlpZiAocmMpIHsKLQkJCQlEUFVfRVJST1IoImZhaWxlZDogZHMg aHcgbm90IGF2YWlsYWJsZVxuIik7Ci0JCQkJZ290byBmYWlsOwotCQkJfQotCQl9Ci0JfQotCiAJ Zm9yIChpID0gMDsgaSA8IGNhdC0+cGluZ3BvbmdfY291bnQ7IGkrKykgewogCQlyYyA9IF9kcHVf cm1faHdfYmxrX2NyZWF0ZShybSwgY2F0LCBtbWlvLCBEUFVfSFdfQkxLX1BJTkdQT05HLAogCQkJ CWNhdC0+cGluZ3BvbmdbaV0uaWQsICZjYXQtPnBpbmdwb25nW2ldKTsKQEAgLTUxNiwyMCArNDk4 LDE2IEBAIHN0YXRpYyBib29sIF9kcHVfcm1fY2hlY2tfbG1fYW5kX2dldF9jb25uZWN0ZWRfYmxr cygKIAkJc3RydWN0IGRwdV9ybV9yc3ZwICpyc3ZwLAogCQlzdHJ1Y3QgZHB1X3JtX3JlcXVpcmVt ZW50cyAqcmVxcywKIAkJc3RydWN0IGRwdV9ybV9od19ibGsgKmxtLAotCQlzdHJ1Y3QgZHB1X3Jt X2h3X2JsayAqKmRzLAogCQlzdHJ1Y3QgZHB1X3JtX2h3X2JsayAqKnBwLAogCQlzdHJ1Y3QgZHB1 X3JtX2h3X2JsayAqcHJpbWFyeV9sbSkKIHsKIAljb25zdCBzdHJ1Y3QgZHB1X2xtX2NmZyAqbG1f Y2ZnID0gdG9fZHB1X2h3X21peGVyKGxtLT5odyktPmNhcDsKIAlzdHJ1Y3QgZHB1X3JtX2h3X2l0 ZXIgaXRlcjsKLQlib29sIGlzX3ZhbGlkX2RzOwogCi0JKmRzID0gTlVMTDsKIAkqcHAgPSBOVUxM OwogCi0JRFBVX0RFQlVHKCJjaGVjayBsbSAlZCBkcyAlZCBwcCAlZFxuIiwKLQkJCSAgIGxtX2Nm Zy0+aWQsCi0JCQkgICBsbV9jZmctPmRzLCBsbV9jZmctPnBpbmdwb25nKTsKKwlEUFVfREVCVUco ImNoZWNrIGxtICVkIHBwICVkXG4iLAorCQkJICAgbG1fY2ZnLT5pZCwgbG1fY2ZnLT5waW5ncG9u Zyk7CiAKIAkvKiBDaGVjayBpZiB0aGlzIGxheWVyIG1peGVyIGlzIGEgcGVlciBvZiB0aGUgcHJv cG9zZWQgcHJpbWFyeSBMTSAqLwogCWlmIChwcmltYXJ5X2xtKSB7CkBAIC01NDMsNDMgKzUyMSwx MiBAQCBzdGF0aWMgYm9vbCBfZHB1X3JtX2NoZWNrX2xtX2FuZF9nZXRfY29ubmVjdGVkX2Jsa3Mo CiAJCX0KIAl9CiAKLQlpc192YWxpZF9kcyA9IChsbV9jZmctPmRzICE9IERTX01BWCkgPyB0cnVl IDogZmFsc2U7Ci0KLQlpZiAoUk1fUlFfRFMocmVxcykgJiYgIWlzX3ZhbGlkX2RzKSB7Ci0JCURQ VV9ERUJVRygiZmFpbDpsbSglZClyZXFfZHMoJWQpZHMoJWQpXG4iLAotCQkJbG1fY2ZnLT5pZCwg KGJvb2wpKFJNX1JRX0RTKHJlcXMpKSwgbG1fY2ZnLT5kcyk7Ci0KLQkJcmV0dXJuIGZhbHNlOwot CX0KLQogCS8qIEFscmVhZHkgcmVzZXJ2ZWQ/ICovCiAJaWYgKFJFU0VSVkVEX0JZX09USEVSKGxt LCByc3ZwKSkgewogCQlEUFVfREVCVUcoImxtICVkIGFscmVhZHkgcmVzZXJ2ZWRcbiIsIGxtX2Nm Zy0+aWQpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JaWYgKGxtX2NmZy0+ZHMgIT0gRFNfTUFY KSB7Ci0JCWRwdV9ybV9pbml0X2h3X2l0ZXIoJml0ZXIsIDAsIERQVV9IV19CTEtfRFMpOwotCQl3 aGlsZSAoX2RwdV9ybV9nZXRfaHdfbG9ja2VkKHJtLCAmaXRlcikpIHsKLQkJCWlmIChpdGVyLmJs ay0+aWQgPT0gbG1fY2ZnLT5kcykgewotCQkJCSpkcyA9IGl0ZXIuYmxrOwotCQkJCWJyZWFrOwot CQkJfQotCQl9Ci0KLQkJaWYgKCEqZHMpIHsKLQkJCURQVV9ERUJVRygibG0gJWQgZmFpbGVkIHRv IHJldHJpZXZlIGRzICVkXG4iLCBsbS0+aWQsCi0JCQkJCWxtX2NmZy0+ZHMpOwotCQkJcmV0dXJu IGZhbHNlOwotCQl9Ci0KLQkJaWYgKFJFU0VSVkVEX0JZX09USEVSKCpkcywgcnN2cCkpIHsKLQkJ CURQVV9ERUJVRygibG0gJWQgZHMgJWQgYWxyZWFkeSByZXNlcnZlZFxuIiwKLQkJCQkJbG0tPmlk LCAoKmRzKS0+aWQpOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JfQotCiAJZHB1X3JtX2luaXRf aHdfaXRlcigmaXRlciwgMCwgRFBVX0hXX0JMS19QSU5HUE9ORyk7CiAJd2hpbGUgKF9kcHVfcm1f Z2V0X2h3X2xvY2tlZChybSwgJml0ZXIpKSB7CiAJCWlmIChpdGVyLmJsay0+aWQgPT0gbG1fY2Zn LT5waW5ncG9uZykgewpAQCAtNTk2LDcgKzU0Myw2IEBAIHN0YXRpYyBib29sIF9kcHVfcm1fY2hl Y2tfbG1fYW5kX2dldF9jb25uZWN0ZWRfYmxrcygKIAlpZiAoUkVTRVJWRURfQllfT1RIRVIoKnBw LCByc3ZwKSkgewogCQlEUFVfREVCVUcoImxtICVkIHBwICVkIGFscmVhZHkgcmVzZXJ2ZWRcbiIs IGxtLT5pZCwKIAkJCQkoKnBwKS0+aWQpOwotCQkqZHMgPSBOVUxMOwogCQlyZXR1cm4gZmFsc2U7 CiAJfQogCkBAIC02MTAsNyArNTU2LDYgQEAgc3RhdGljIGludCBfZHB1X3JtX3Jlc2VydmVfbG1z KAogCiB7CiAJc3RydWN0IGRwdV9ybV9od19ibGsgKmxtW01BWF9CTE9DS1NdOwotCXN0cnVjdCBk cHVfcm1faHdfYmxrICpkc1tNQVhfQkxPQ0tTXTsKIAlzdHJ1Y3QgZHB1X3JtX2h3X2JsayAqcHBb TUFYX0JMT0NLU107CiAJc3RydWN0IGRwdV9ybV9od19pdGVyIGl0ZXJfaSwgaXRlcl9qOwogCWlu dCBsbV9jb3VudCA9IDA7CkBAIC02MjYsMTQgKzU3MSwxMyBAQCBzdGF0aWMgaW50IF9kcHVfcm1f cmVzZXJ2ZV9sbXMoCiAJd2hpbGUgKGxtX2NvdW50ICE9IHJlcXMtPnRvcG9sb2d5LT5udW1fbG0g JiYKIAkJCV9kcHVfcm1fZ2V0X2h3X2xvY2tlZChybSwgJml0ZXJfaSkpIHsKIAkJbWVtc2V0KCZs bSwgMCwgc2l6ZW9mKGxtKSk7Ci0JCW1lbXNldCgmZHMsIDAsIHNpemVvZihkcykpOwogCQltZW1z ZXQoJnBwLCAwLCBzaXplb2YocHApKTsKIAogCQlsbV9jb3VudCA9IDA7CiAJCWxtW2xtX2NvdW50 XSA9IGl0ZXJfaS5ibGs7CiAKIAkJaWYgKCFfZHB1X3JtX2NoZWNrX2xtX2FuZF9nZXRfY29ubmVj dGVkX2Jsa3MoCi0JCQkJcm0sIHJzdnAsIHJlcXMsIGxtW2xtX2NvdW50XSwgJmRzW2xtX2NvdW50 XSwKKwkJCQlybSwgcnN2cCwgcmVxcywgbG1bbG1fY291bnRdLAogCQkJCSZwcFtsbV9jb3VudF0s IE5VTEwpKQogCQkJY29udGludWU7CiAKQEAgLTY0OSw4ICs1OTMsNyBAQCBzdGF0aWMgaW50IF9k cHVfcm1fcmVzZXJ2ZV9sbXMoCiAKIAkJCWlmICghX2RwdV9ybV9jaGVja19sbV9hbmRfZ2V0X2Nv bm5lY3RlZF9ibGtzKAogCQkJCQlybSwgcnN2cCwgcmVxcywgaXRlcl9qLmJsaywKLQkJCQkJJmRz W2xtX2NvdW50XSwgJnBwW2xtX2NvdW50XSwKLQkJCQkJaXRlcl9pLmJsaykpCisJCQkJCSZwcFts bV9jb3VudF0sIGl0ZXJfaS5ibGspKQogCQkJCWNvbnRpbnVlOwogCiAJCQlsbVtsbV9jb3VudF0g PSBpdGVyX2ouYmxrOwpAQCAtNjcwLDExICs2MTMsNyBAQCBzdGF0aWMgaW50IF9kcHVfcm1fcmVz ZXJ2ZV9sbXMoCiAJCWxtW2ldLT5yc3ZwX254dCA9IHJzdnA7CiAJCXBwW2ldLT5yc3ZwX254dCA9 IHJzdnA7CiAKLQkJaWYgKGRzW2ldKQotCQkJZHNbaV0tPnJzdnBfbnh0ID0gcnN2cDsKLQotCQlE UFVfRVZUMzIobG1baV0tPnR5cGUsIHJzdnAtPmVuY19pZCwgbG1baV0tPmlkLCBwcFtpXS0+aWQs Ci0JCQkJZHNbaV0gPyBkc1tpXS0+aWQgOiAwKTsKKwkJRFBVX0VWVDMyKGxtW2ldLT50eXBlLCBy c3ZwLT5lbmNfaWQsIGxtW2ldLT5pZCwgcHBbaV0tPmlkKTsKIAl9CiAKIAlyZXR1cm4gcmM7CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vbXNtX2Rydi5oCmluZGV4IDViYWZmMjcuLjhlODBiNGIgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Ry di5oCkBAIC04OSwyNSArODksMTAgQEAgZW51bSBtc21fbWRwX3BsYW5lX3Byb3BlcnR5IHsKIAog ZW51bSBtc21fbWRwX2NydGNfcHJvcGVydHkgewogCUNSVENfUFJPUF9JTkZPLAotCUNSVENfUFJP UF9ERVNUX1NDQUxFUl9MVVRfRUQsCi0JQ1JUQ19QUk9QX0RFU1RfU0NBTEVSX0xVVF9DSVIsCi0J Q1JUQ19QUk9QX0RFU1RfU0NBTEVSX0xVVF9TRVAsCiAKIAkvKiAjIG9mIGJsb2IgcHJvcGVydGll cyAqLwogCUNSVENfUFJPUF9CTE9CQ09VTlQsCiAKLQkvKiByYW5nZSBwcm9wZXJ0aWVzICovCi0J Q1JUQ19QUk9QX0RJTV9MQVlFUl9WMSA9IENSVENfUFJPUF9CTE9CQ09VTlQsCi0JQ1JUQ19QUk9Q X0NPUkVfQ0xLLAotCUNSVENfUFJPUF9DT1JFX0FCLAotCUNSVENfUFJPUF9DT1JFX0lCLAotCUNS VENfUFJPUF9MTENDX0FCLAotCUNSVENfUFJPUF9MTENDX0lCLAotCUNSVENfUFJPUF9EUkFNX0FC LAotCUNSVENfUFJPUF9EUkFNX0lCLAotCUNSVENfUFJPUF9JRExFX1RJTUVPVVQsCi0JQ1JUQ19Q Uk9QX0RFU1RfU0NBTEVSLAotCiAJLyogdG90YWwgIyBvZiBwcm9wZXJ0aWVzICovCiAJQ1JUQ19Q Uk9QX0NPVU5UCiB9OwotLSAKVGhlIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIGlz IGEgbWVtYmVyIG9mIHRoZSBDb2RlIEF1cm9yYSBGb3J1bSwKYSBMaW51eCBGb3VuZGF0aW9uIENv bGxhYm9yYXRpdmUgUHJvamVjdAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KRnJlZWRyZW5vIG1haWxpbmcgbGlzdApGcmVlZHJlbm9AbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v ZnJlZWRyZW5vCg==