From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeykumar Sankaran Subject: [DPU PATCH v2 2/2] drm/msm: remove partial update support Date: Tue, 27 Feb 2018 18:55:11 -0800 Message-ID: <1519786511-25931-2-git-send-email-jsanka@codeaurora.org> References: <1519786511-25931-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: <1519786511-25931-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: freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: jeykumar-jfJNa2p1gH1BDgjK7y7TUQ@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, nganji-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, hoegsberg-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org, seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, Jeykumar Sankaran List-Id: linux-arm-msm@vger.kernel.org SW1wbGVtZW50YXRpb24gb2YgcGFydGlhbCB1cGRhdGUgaW4gRFBVIERSTSBpcyBoZWF2aWx5CmRl cGVuZGVudCBvbiBjdXN0b20gcHJvcGVydGllcyBhbmQgZHNpIGhvb2tzLiBSZW1vdmluZyB0aGUK c3VwcG9ydCBmb3Igbm93LiBXZSBtYXkgbmVlZCB0byByZXZpc2l0IHRoZSBzdXBwb3J0IGluIHRo ZQpmdXR1cmUuCgpDaGFuZ2UtSWQ6IElkZDg3MjcyZmU0ZDRjMGEyNmZjYjQwNTE1NGMwNjA1YWYx ZWRmMWJhClNpZ25lZC1vZmYtYnk6IEpleWt1bWFyIFNhbmthcmFuIDxqc2Fua2FAY29kZWF1cm9y YS5vcmc+Ci0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Nvbm5lY3Rvci5j ICB8IDEzOSArLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29ubmVj dG9yLmggIHwgICA3ICstCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5j ICAgICAgIHwgNTQ0ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9jcnRjLmggICAgICAgfCAgMTggLQogZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYyAgICB8IDI3NyArKysrLS0tLS0tLS0tCiBkcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY2F0YWxvZy5jIHwgICAyICsKIGRyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMuaCAgICAgICAgfCAgIDggLQogZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttc191dGlscy5jICB8ICA0MiAtLQogZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmMgICAgICB8ICAxMyAtCiBkcml2ZXJzL2dw dS9kcm0vbXNtL21zbV9kcnYuaCAgICAgICAgICAgICAgICAgIHwgIDU2IC0tLQogMTAgZmlsZXMg Y2hhbmdlZCwgODkgaW5zZXJ0aW9ucygrKSwgMTAxNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29ubmVjdG9yLmMgYi9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29ubmVjdG9yLmMKaW5kZXggNTdiODYyNy4uYzVl NmM1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Nvbm5l Y3Rvci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb25uZWN0b3Iu YwpAQCAtNDI0LDggKzQyNCw3IEBAIGludCBkcHVfY29ubmVjdG9yX3ByZV9raWNrb2ZmKHN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCiB7CiAJc3RydWN0IGRwdV9jb25uZWN0b3IgKmNf Y29ubjsKIAlzdHJ1Y3QgZHB1X2Nvbm5lY3Rvcl9zdGF0ZSAqY19zdGF0ZTsKLQlzdHJ1Y3QgbXNt X2Rpc3BsYXlfa2lja29mZl9wYXJhbXMgcGFyYW1zOwotCWludCBpZHgsIHJjOworCWludCBpZHgs IHJjID0gMDsKIAogCWlmICghY29ubmVjdG9yKSB7CiAJCURQVV9FUlJPUigiaW52YWxpZCBhcmd1 bWVudFxuIik7CkBAIC00NjIsMTUgKzQ2MSw4IEBAIGludCBkcHVfY29ubmVjdG9yX3ByZV9raWNr b2ZmKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCiAJCX0KIAl9CiAKLQlpZiAoIWNf Y29ubi0+b3BzLnByZV9raWNrb2ZmKQotCQlyZXR1cm4gMDsKLQotCXBhcmFtcy5yb2lzID0gJmNf c3RhdGUtPnJvaXM7Ci0KIAlEUFVfRVZUMzJfVkVSQk9TRShjb25uZWN0b3ItPmJhc2UuaWQpOwog Ci0JcmMgPSBjX2Nvbm4tPm9wcy5wcmVfa2lja29mZihjb25uZWN0b3IsIGNfY29ubi0+ZGlzcGxh eSwgJnBhcmFtcyk7Ci0KIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTY0NSwxMjIgKzYzNyw2IEBAIHN0 YXRpYyB2b2lkIGRwdV9jb25uZWN0b3JfYXRvbWljX3Jlc2V0KHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IpCiAJcmV0dXJuICZjX3N0YXRlLT5iYXNlOwogfQogCi1zdGF0aWMgaW50IF9k cHVfY29ubmVjdG9yX3JvaV92MV9jaGVja19yb2koCi0JCXN0cnVjdCBkcHVfY29ubmVjdG9yICpj X2Nvbm4sCi0JCXN0cnVjdCBkcm1fY2xpcF9yZWN0ICpyb2lfY29ubiwKLQkJY29uc3Qgc3RydWN0 IG1zbV9yb2lfY2FwcyAqY2FwcykKLXsKLQljb25zdCBzdHJ1Y3QgbXNtX3JvaV9hbGlnbm1lbnQg KmFsaWduID0gJmNhcHMtPmFsaWduOwotCWludCB3ID0gcm9pX2Nvbm4tPngyIC0gcm9pX2Nvbm4t PngxOwotCWludCBoID0gcm9pX2Nvbm4tPnkyIC0gcm9pX2Nvbm4tPnkxOwotCi0JaWYgKHcgPD0g MCB8fCBoIDw9IDApIHsKLQkJRFBVX0VSUk9SX0NPTk4oY19jb25uLCAiaW52YWxpZCBjb25uIHJv aSB3ICVkIGggJWRcbiIsIHcsIGgpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAodyA8 IGFsaWduLT5taW5fd2lkdGggfHwgdyAlIGFsaWduLT53aWR0aF9waXhfYWxpZ24pIHsKLQkJRFBV X0VSUk9SX0NPTk4oY19jb25uLAotCQkJCSJpbnZhbGlkIGNvbm4gcm9pIHdpZHRoICVkIG1pbiAl ZCBhbGlnbiAlZFxuIiwKLQkJCQl3LCBhbGlnbi0+bWluX3dpZHRoLCBhbGlnbi0+d2lkdGhfcGl4 X2FsaWduKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKGggPCBhbGlnbi0+bWluX2hl aWdodCB8fCBoICUgYWxpZ24tPmhlaWdodF9waXhfYWxpZ24pIHsKLQkJRFBVX0VSUk9SX0NPTk4o Y19jb25uLAotCQkJCSJpbnZhbGlkIGNvbm4gcm9pIGhlaWdodCAlZCBtaW4gJWQgYWxpZ24gJWRc biIsCi0JCQkJaCwgYWxpZ24tPm1pbl9oZWlnaHQsIGFsaWduLT5oZWlnaHRfcGl4X2FsaWduKTsK LQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKHJvaV9jb25uLT54MSAlIGFsaWduLT54c3Rh cnRfcGl4X2FsaWduKSB7Ci0JCURQVV9FUlJPUl9DT05OKGNfY29ubiwgImludmFsaWQgY29ubiBy b2kgeDEgJWQgYWxpZ24gJWRcbiIsCi0JCQkJcm9pX2Nvbm4tPngxLCBhbGlnbi0+eHN0YXJ0X3Bp eF9hbGlnbik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChyb2lfY29ubi0+eTEgJSBh bGlnbi0+eXN0YXJ0X3BpeF9hbGlnbikgewotCQlEUFVfRVJST1JfQ09OTihjX2Nvbm4sICJpbnZh bGlkIGNvbm4gcm9pIHkxICVkIGFsaWduICVkXG4iLAotCQkJCXJvaV9jb25uLT55MSwgYWxpZ24t PnlzdGFydF9waXhfYWxpZ24pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsK LX0KLQotc3RhdGljIGludCBfZHB1X2Nvbm5lY3Rvcl9zZXRfcm9pX3YxKAotCQlzdHJ1Y3QgZHB1 X2Nvbm5lY3RvciAqY19jb25uLAotCQlzdHJ1Y3QgZHB1X2Nvbm5lY3Rvcl9zdGF0ZSAqY19zdGF0 ZSwKLQkJdm9pZCAqdXNyX3B0cikKLXsKLQlzdHJ1Y3QgZHB1X2RybV9yb2lfdjEgcm9pX3YxOwot CXN0cnVjdCBtc21fZGlzcGxheV9pbmZvIGRpc3BsYXlfaW5mbzsKLQlzdHJ1Y3QgbXNtX3JvaV9j YXBzICpjYXBzOwotCWludCBpLCByYzsKLQotCWlmICghY19jb25uIHx8ICFjX3N0YXRlKSB7Ci0J CURQVV9FUlJPUigiaW52YWxpZCBhcmdzXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0J cmMgPSBkcHVfY29ubmVjdG9yX2dldF9pbmZvKCZjX2Nvbm4tPmJhc2UsICZkaXNwbGF5X2luZm8p OwotCWlmIChyYykgewotCQlEUFVfRVJST1JfQ09OTihjX2Nvbm4sICJkaXNwbGF5IGdldCBpbmZv IGVycm9yOiAlZFxuIiwgcmMpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JY2FwcyA9ICZkaXNwbGF5 X2luZm8ucm9pX2NhcHM7Ci0JaWYgKCFjYXBzLT5lbmFibGVkKSB7Ci0JCURQVV9FUlJPUl9DT05O KGNfY29ubiwgImRpc3BsYXkgcm9pIGNhcGFiaWxpdHkgaXMgZGlzYWJsZWRcbiIpOwotCQlyZXR1 cm4gLUVOT1RTVVBQOwotCX0KLQotCW1lbXNldCgmY19zdGF0ZS0+cm9pcywgMCwgc2l6ZW9mKGNf c3RhdGUtPnJvaXMpKTsKLQotCWlmICghdXNyX3B0cikgewotCQlEUFVfREVCVUdfQ09OTihjX2Nv bm4sICJyb2lzIGNsZWFyZWRcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoY29weV9mcm9t X3VzZXIoJnJvaV92MSwgdXNyX3B0ciwgc2l6ZW9mKHJvaV92MSkpKSB7Ci0JCURQVV9FUlJPUl9D T05OKGNfY29ubiwgImZhaWxlZCB0byBjb3B5IHJvaV92MSBkYXRhXG4iKTsKLQkJcmV0dXJuIC1F SU5WQUw7Ci0JfQotCi0JRFBVX0RFQlVHX0NPTk4oY19jb25uLCAibnVtX3JlY3RzICVkXG4iLCBy b2lfdjEubnVtX3JlY3RzKTsKLQotCWlmIChyb2lfdjEubnVtX3JlY3RzID09IDApIHsKLQkJRFBV X0RFQlVHX0NPTk4oY19jb25uLCAicm9pcyBjbGVhcmVkXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQot Ci0JaWYgKHJvaV92MS5udW1fcmVjdHMgPiBEUFVfTUFYX1JPSV9WMSB8fAotCQkJcm9pX3YxLm51 bV9yZWN0cyA+IGNhcHMtPm51bV9yb2kpIHsKLQkJRFBVX0VSUk9SX0NPTk4oY19jb25uLCAidG9v IG1hbnkgcmVjdHMgc3BlY2lmaWVkOiAlZFxuIiwKLQkJCQlyb2lfdjEubnVtX3JlY3RzKTsKLQkJ cmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JY19zdGF0ZS0+cm9pcy5udW1fcmVjdHMgPSByb2lfdjEu bnVtX3JlY3RzOwotCWZvciAoaSA9IDA7IGkgPCByb2lfdjEubnVtX3JlY3RzOyArK2kpIHsKLQkJ aW50IHJjOwotCi0JCXJjID0gX2RwdV9jb25uZWN0b3Jfcm9pX3YxX2NoZWNrX3JvaShjX2Nvbm4s ICZyb2lfdjEucm9pW2ldLAotCQkJCWNhcHMpOwotCQlpZiAocmMpCi0JCQlyZXR1cm4gcmM7Ci0K LQkJY19zdGF0ZS0+cm9pcy5yb2lbaV0gPSByb2lfdjEucm9pW2ldOwotCQlEUFVfREVCVUdfQ09O TihjX2Nvbm4sICJyb2klZDogcm9pICglZCwlZCkgKCVkLCVkKVxuIiwgaSwKLQkJCQljX3N0YXRl LT5yb2lzLnJvaVtpXS54MSwKLQkJCQljX3N0YXRlLT5yb2lzLnJvaVtpXS55MSwKLQkJCQljX3N0 YXRlLT5yb2lzLnJvaVtpXS54MiwKLQkJCQljX3N0YXRlLT5yb2lzLnJvaVtpXS55Mik7Ci0JfQot Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgX2RwdV9jb25uZWN0b3JfdXBkYXRlX2JsX3Nj YWxlKHN0cnVjdCBkcHVfY29ubmVjdG9yICpjX2Nvbm4sCiAJCWludCBpZHgsCiAJCXVpbnQ2NF90 IHZhbHVlKQpAQCAtODUyLDEyICs3MjgsNiBAQCBzdGF0aWMgaW50IGRwdV9jb25uZWN0b3JfYXRv bWljX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCQlicmVh azsKIAl9CiAKLQlpZiAoaWR4ID09IENPTk5FQ1RPUl9QUk9QX1JPSV9WMSkgewotCQlyYyA9IF9k cHVfY29ubmVjdG9yX3NldF9yb2lfdjEoY19jb25uLCBjX3N0YXRlLCAodm9pZCAqKXZhbCk7Ci0J CWlmIChyYykKLQkJCURQVV9FUlJPUl9DT05OKGNfY29ubiwgImludmFsaWQgcm9pX3YxLCByYzog JWRcbiIsIHJjKTsKLQl9Ci0KIAkvKiBjaGVjayBmb3IgY3VzdG9tIHByb3BlcnR5IGhhbmRsaW5n ICovCiAJaWYgKCFyYyAmJiBjX2Nvbm4tPm9wcy5zZXRfcHJvcGVydHkpIHsKIAkJcmMgPSBjX2Nv bm4tPm9wcy5zZXRfcHJvcGVydHkoY29ubmVjdG9yLApAQCAtMTMwNCwxMyArMTE3NCw2IEBAIHN0 cnVjdCBkcm1fY29ubmVjdG9yICpkcHVfY29ubmVjdG9yX2luaXQoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKIAkJQ09OTkVDVE9SX1BST1BfQURfQkxfU0NBTEUpOwogI2VuZGlmCiAKLQlyYyA9IGRw dV9jb25uZWN0b3JfZ2V0X2luZm8oJmNfY29ubi0+YmFzZSwgJmRpc3BsYXlfaW5mbyk7Ci0JaWYg KCFyYyAmJiBkaXNwbGF5X2luZm8ucm9pX2NhcHMuZW5hYmxlZCkgewotCQltc21fcHJvcGVydHlf aW5zdGFsbF92b2xhdGlsZV9yYW5nZSgKLQkJCQkmY19jb25uLT5wcm9wZXJ0eV9pbmZvLCAiZHB1 X2RybV9yb2lfdjEiLCAweDAsCi0JCQkJMCwgfjAsIDAsIENPTk5FQ1RPUl9QUk9QX1JPSV9WMSk7 Ci0JfQotCiAJbXNtX3Byb3BlcnR5X2luc3RhbGxfcmFuZ2UoJmNfY29ubi0+cHJvcGVydHlfaW5m bywgIlJFVElSRV9GRU5DRSIsCiAJCQkweDAsIDAsIElOUl9PUEVOX01BWCwgMCwgQ09OTkVDVE9S X1BST1BfUkVUSVJFX0ZFTkNFKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2Nvbm5lY3Rvci5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X2Nvbm5lY3Rvci5oCmluZGV4IDU3M2EwYzguLjk4MWY0NTkgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb25uZWN0b3IuaAorKysgYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29ubmVjdG9yLmgKQEAgLTE2MywxMyArMTYzLDEwIEBA IHN0cnVjdCBkcHVfY29ubmVjdG9yX29wcyB7CiAJICogcHJlX2tpY2tvZmYgLSB0cmlnZ2VyIGRp c3BsYXkgdG8gcHJvZ3JhbSBraWNrb2ZmLXRpbWUgZmVhdHVyZXMKIAkgKiBAY29ubmVjdG9yOiBQ b2ludGVyIHRvIGRybSBjb25uZWN0b3Igc3RydWN0dXJlCiAJICogQGRpc3BsYXk6IFBvaW50ZXIg dG8gcHJpdmF0ZSBkaXNwbGF5IHN0cnVjdHVyZQotCSAqIEBwYXJhbXM6IFBhcmFtZXRlciBidW5k bGUgb2YgY29ubmVjdG9yLXN0b3JlZCBpbmZvcm1hdGlvbiBmb3IKLQkgKglraWNrb2ZmLXRpbWUg cHJvZ3JhbW1pbmcgaW50byB0aGUgZGlzcGxheQogCSAqIFJldHVybnM6IFplcm8gb24gc3VjY2Vz cwogCSAqLwogCWludCAoKnByZV9raWNrb2ZmKShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yLAotCQkJdm9pZCAqZGlzcGxheSwKLQkJCXN0cnVjdCBtc21fZGlzcGxheV9raWNrb2ZmX3Bh cmFtcyAqcGFyYW1zKTsKKwkJCXZvaWQgKmRpc3BsYXkpOwogCiAJLyoqCiAJICogY2xrX2N0cmwg LSBwZXJmb3JtIGNsayBlbmFibGUvZGlzYWJsZSBvbiB0aGUgY29ubmVjdG9yCkBAIC0zNDAsNyAr MzM3LDYgQEAgc3RydWN0IGRwdV9jb25uZWN0b3IgewogICogQG91dF9mYjogUG9pbnRlciB0byBv dXRwdXQgZnJhbWUgYnVmZmVyLCBpZiBhcHBsaWNhYmxlCiAgKiBAcHJvcGVydHlfc3RhdGU6IExv Y2FsIHN0b3JhZ2UgZm9yIG1zbV9wcm9wIHByb3BlcnRpZXMKICAqIEBwcm9wZXJ0eV92YWx1ZXM6 IExvY2FsIGNhY2hlIG9mIGN1cnJlbnQgY29ubmVjdG9yIHByb3BlcnR5IHZhbHVlcwotICogQHJv aXM6IFJlZ2lvbnMgb2YgaW50ZXJlc3Qgc3RydWN0dXJlIGZvciBtYXBwaW5nIENSVEMgdG8gQ29u bmVjdG9yIG91dHB1dAogICogQHByb3BlcnR5X2Jsb2JzOiBibG9iIHByb3BlcnRpZXMKICAqLwog c3RydWN0IGRwdV9jb25uZWN0b3Jfc3RhdGUgewpAQCAtMzQ5LDcgKzM0NSw2IEBAIHN0cnVjdCBk cHVfY29ubmVjdG9yX3N0YXRlIHsKIAlzdHJ1Y3QgbXNtX3Byb3BlcnR5X3N0YXRlIHByb3BlcnR5 X3N0YXRlOwogCXN0cnVjdCBtc21fcHJvcGVydHlfdmFsdWUgcHJvcGVydHlfdmFsdWVzW0NPTk5F Q1RPUl9QUk9QX0NPVU5UXTsKIAotCXN0cnVjdCBtc21fcm9pX2xpc3Qgcm9pczsKIAlzdHJ1Y3Qg ZHJtX3Byb3BlcnR5X2Jsb2IgKnByb3BlcnR5X2Jsb2JzW0NPTk5FQ1RPUl9QUk9QX0JMT0JDT1VO VF07CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf Y3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYwppbmRleCAz Y2RmMWUzLi5hYjM2NTc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRj LmMKQEAgLTc4Miw0NjUgKzc4MiwyNCBAQCBzdGF0aWMgdm9pZCBfZHB1X2NydGNfc2V0dXBfZGlt X2xheWVyX2NmZyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJfQogfQogCi12b2lkIGRwdV9jcnRj X2dldF9jcnRjX3JvaShzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlLAotCQljb25zdCBzdHJ1 Y3QgZHB1X3JlY3QgKipjcnRjX3JvaSkKLXsKLQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNydGNf c3RhdGU7Ci0KLQlpZiAoIXN0YXRlIHx8ICFjcnRjX3JvaSkKLQkJcmV0dXJuOwotCi0JY3J0Y19z dGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKHN0YXRlKTsKLQkqY3J0Y19yb2kgPSAmY3J0Y19zdGF0 ZS0+Y3J0Y19yb2k7Ci19Ci0KLXN0YXRpYyBpbnQgX2RwdV9jcnRjX3NldF9yb2lfdjEoc3RydWN0 IGRybV9jcnRjX3N0YXRlICpzdGF0ZSwKLQkJdm9pZCBfX3VzZXIgKnVzcl9wdHIpCi17Ci0Jc3Ry dWN0IGRybV9jcnRjICpjcnRjOwotCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqY3N0YXRlOwotCXN0 cnVjdCBkcHVfZHJtX3JvaV92MSByb2lfdjE7Ci0JaW50IGk7Ci0KLQlpZiAoIXN0YXRlKSB7Ci0J CURQVV9FUlJPUigiaW52YWxpZCBhcmdzXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0J Y3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoc3RhdGUpOwotCWNydGMgPSBjc3RhdGUtPmJhc2Uu Y3J0YzsKLQotCW1lbXNldCgmY3N0YXRlLT51c2VyX3JvaV9saXN0LCAwLCBzaXplb2YoY3N0YXRl LT51c2VyX3JvaV9saXN0KSk7Ci0KLQlpZiAoIXVzcl9wdHIpIHsKLQkJRFBVX0RFQlVHKCJjcnRj JWQ6IHJvaXMgY2xlYXJlZFxuIiwgRFJNSUQoY3J0YykpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlp ZiAoY29weV9mcm9tX3VzZXIoJnJvaV92MSwgdXNyX3B0ciwgc2l6ZW9mKHJvaV92MSkpKSB7Ci0J CURQVV9FUlJPUigiY3J0YyVkOiBmYWlsZWQgdG8gY29weSByb2lfdjEgZGF0YVxuIiwgRFJNSUQo Y3J0YykpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlEUFVfREVCVUcoImNydGMlZDogbnVt X3JlY3RzICVkXG4iLCBEUk1JRChjcnRjKSwgcm9pX3YxLm51bV9yZWN0cyk7Ci0KLQlpZiAocm9p X3YxLm51bV9yZWN0cyA9PSAwKSB7Ci0JCURQVV9ERUJVRygiY3J0YyVkOiByb2lzIGNsZWFyZWRc biIsIERSTUlEKGNydGMpKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKHJvaV92MS5udW1fcmVj dHMgPiBEUFVfTUFYX1JPSV9WMSkgewotCQlEUFVfRVJST1IoImNydGMlZDogdG9vIG1hbnkgcmVj dHMgc3BlY2lmaWVkOiAlZFxuIiwgRFJNSUQoY3J0YyksCi0JCQkJcm9pX3YxLm51bV9yZWN0cyk7 Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWNzdGF0ZS0+dXNlcl9yb2lfbGlzdC5udW1fcmVj dHMgPSByb2lfdjEubnVtX3JlY3RzOwotCWZvciAoaSA9IDA7IGkgPCByb2lfdjEubnVtX3JlY3Rz OyArK2kpIHsKLQkJY3N0YXRlLT51c2VyX3JvaV9saXN0LnJvaVtpXSA9IHJvaV92MS5yb2lbaV07 Ci0JCURQVV9ERUJVRygiY3J0YyVkOiByb2klZDogcm9pICglZCwlZCkgKCVkLCVkKVxuIiwKLQkJ CQlEUk1JRChjcnRjKSwgaSwKLQkJCQljc3RhdGUtPnVzZXJfcm9pX2xpc3Qucm9pW2ldLngxLAot CQkJCWNzdGF0ZS0+dXNlcl9yb2lfbGlzdC5yb2lbaV0ueTEsCi0JCQkJY3N0YXRlLT51c2VyX3Jv aV9saXN0LnJvaVtpXS54MiwKLQkJCQljc3RhdGUtPnVzZXJfcm9pX2xpc3Qucm9pW2ldLnkyKTsK LQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGJvb2wgX2RwdV9jcnRjX3NldHVwX2lzXzNk bXV4X2RzYyhzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlKQotewotCWludCBpOwotCXN0cnVj dCBkcHVfY3J0Y19zdGF0ZSAqY3N0YXRlOwotCWJvb2wgaXNfM2RtdXhfZHNjID0gZmFsc2U7Ci0K LQljc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShzdGF0ZSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwg Y3N0YXRlLT5udW1fY29ubmVjdG9yczsgaSsrKSB7Ci0JCXN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uID0gY3N0YXRlLT5jb25uZWN0b3JzW2ldOwotCi0JCWlmIChkcHVfY29ubmVjdG9yX2dldF90 b3BvbG9neV9uYW1lKGNvbm4pID09Ci0JCQkJRFBVX1JNX1RPUE9MT0dZX0RVQUxQSVBFXzNETUVS R0VfRFNDKQotCQkJaXNfM2RtdXhfZHNjID0gdHJ1ZTsKLQl9Ci0KLQlyZXR1cm4gaXNfM2RtdXhf ZHNjOwotfQotCi1zdGF0aWMgaW50IF9kcHVfY3J0Y19zZXRfY3J0Y19yb2koc3RydWN0IGRybV9j cnRjICpjcnRjLAotCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlKQotewotCXN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uOwotCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0 YXRlOwotCXN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGM7Ci0Jc3RydWN0IGRwdV9jcnRjX3N0YXRl ICpjcnRjX3N0YXRlOwotCXN0cnVjdCBkcHVfcmVjdCAqY3J0Y19yb2k7Ci0JaW50IGksIG51bV9h dHRhY2hlZF9jb25ucyA9IDA7Ci0KLQlpZiAoIWNydGMgfHwgIXN0YXRlKQotCQlyZXR1cm4gLUVJ TlZBTDsKLQotCWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7Ci0JY3J0Y19zdGF0ZSA9IHRv X2RwdV9jcnRjX3N0YXRlKHN0YXRlKTsKLQljcnRjX3JvaSA9ICZjcnRjX3N0YXRlLT5jcnRjX3Jv aTsKLQotCWZvcl9lYWNoX29sZF9jb25uZWN0b3JfaW5fc3RhdGUoc3RhdGUtPnN0YXRlLCBjb25u LCBjb25uX3N0YXRlLCBpKSB7Ci0JCXN0cnVjdCBkcHVfY29ubmVjdG9yX3N0YXRlICpkcHVfY29u bl9zdGF0ZTsKLQotCQlpZiAoIWNvbm5fc3RhdGUgfHwgY29ubl9zdGF0ZS0+Y3J0YyAhPSBjcnRj KQotCQkJY29udGludWU7Ci0KLQkJaWYgKG51bV9hdHRhY2hlZF9jb25ucykgewotCQkJRFBVX0VS Uk9SKAotCQkJCSJjcnRjJWQ6IHVuc3VwcG9ydGVkOiByb2kgb24gY3J0YyB3LyA+MSBjb25uZWN0 b3JzXG4iLAotCQkJCQlEUk1JRChjcnRjKSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQkr K251bV9hdHRhY2hlZF9jb25uczsKLQotCQlkcHVfY29ubl9zdGF0ZSA9IHRvX2RwdV9jb25uZWN0 b3Jfc3RhdGUoY29ubl9zdGF0ZSk7Ci0KLQkJLyoKLQkJICogY3VycmVudCBkcml2ZXIgb25seSBz dXBwb3J0cyBzYW1lIGNvbm5lY3RvciBhbmQgY3J0YyBzaXplLAotCQkgKiBidXQgaWYgc3VwcG9y dCBmb3IgZGlmZmVyZW50IHNpemVzIGlzIGFkZGVkLCBkcml2ZXIgbmVlZHMKLQkJICogdG8gY2hl Y2sgdGhlIGNvbm5lY3RvciByb2kgaGVyZSB0byBtYWtlIHN1cmUgaXMgZnVsbCBzY3JlZW4KLQkJ ICogZm9yIGRzYyAzZC1tdXggdG9wb2xvZ3kgdGhhdCBkb2Vzbid0IHN1cHBvcnQgcGFydGlhbCB1 cGRhdGUuCi0JCSAqLwotCQlpZiAobWVtY21wKCZkcHVfY29ubl9zdGF0ZS0+cm9pcywgJmNydGNf c3RhdGUtPnVzZXJfcm9pX2xpc3QsCi0JCQkJc2l6ZW9mKGNydGNfc3RhdGUtPnVzZXJfcm9pX2xp c3QpKSkgewotCQkJRFBVX0VSUk9SKCIlczogY3J0YyAtPiBjb25uIHJvaSBzY2FsaW5nIHVuc3Vw cG9ydGVkXG4iLAotCQkJCQlkcHVfY3J0Yy0+bmFtZSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJ fQotCX0KLQotCWRwdV9rbXNfcmVjdF9tZXJnZV9yZWN0YW5nbGVzKCZjcnRjX3N0YXRlLT51c2Vy X3JvaV9saXN0LCBjcnRjX3JvaSk7Ci0KLQlEUFVfREVCVUcoIiVzOiBjcnRjIHJvaSAoJWQsJWQs JWQsJWQpXG4iLCBkcHVfY3J0Yy0+bmFtZSwKLQkJCWNydGNfcm9pLT54LCBjcnRjX3JvaS0+eSwg Y3J0Y19yb2ktPncsIGNydGNfcm9pLT5oKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50 IF9kcHVfY3J0Y19jaGVja19hdXRvcmVmcmVzaChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCXN0 cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCi17Ci0Jc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0 YzsKLQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Ci0Jc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm47Ci0Jc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGU7Ci0J aW50IGk7Ci0KLQlpZiAoIWNydGMgfHwgIXN0YXRlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWRw dV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7Ci0JY3J0Y19zdGF0ZSA9IHRvX2RwdV9jcnRjX3N0 YXRlKHN0YXRlKTsKLQotCWlmIChkcHVfa21zX3JlY3RfaXNfbnVsbCgmY3J0Y19zdGF0ZS0+Y3J0 Y19yb2kpKQotCQlyZXR1cm4gMDsKLQotCS8qIHBhcnRpYWwgdXBkYXRlIGFjdGl2ZSwgY2hlY2sg aWYgYXV0b3JlZnJlc2ggaXMgYWxzbyByZXF1ZXN0ZWQgKi8KLQlmb3JfZWFjaF9vbGRfY29ubmVj dG9yX2luX3N0YXRlKHN0YXRlLT5zdGF0ZSwgY29ubiwgY29ubl9zdGF0ZSwgaSkgewotCQl1aW50 NjRfdCBhdXRvcmVmcmVzaDsKLQotCQlpZiAoIWNvbm5fc3RhdGUgfHwgY29ubl9zdGF0ZS0+Y3J0 YyAhPSBjcnRjKQotCQkJY29udGludWU7Ci0KLQkJYXV0b3JlZnJlc2ggPSBkcHVfY29ubmVjdG9y X2dldF9wcm9wZXJ0eShjb25uX3N0YXRlLAotCQkJCUNPTk5FQ1RPUl9QUk9QX0FVVE9SRUZSRVNI KTsKLQkJaWYgKGF1dG9yZWZyZXNoKSB7Ci0JCQlEUFVfRVJST1IoCi0JCQkJIiVzOiBhdXRvcmVm cmVzaCAmIHBhcnRpYWwgY3J0YyByb2kgaW5jb21wYXRpYmxlICVsbHVcbiIsCi0JCQkJCWRwdV9j cnRjLT5uYW1lLCBhdXRvcmVmcmVzaCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLQot CXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9kcHVfY3J0Y19zZXRfbG1fcm9pKHN0cnVjdCBk cm1fY3J0YyAqY3J0YywKLQkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSwgaW50IGxtX2lk eCkKLXsKLQlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOwotCXN0cnVjdCBkcHVfY3J0Y19zdGF0 ZSAqY3J0Y19zdGF0ZTsKLQljb25zdCBzdHJ1Y3QgZHB1X3JlY3QgKmNydGNfcm9pOwotCWNvbnN0 IHN0cnVjdCBkcHVfcmVjdCAqbG1fYm91bmRzOwotCXN0cnVjdCBkcHVfcmVjdCAqbG1fcm9pOwot Ci0JaWYgKCFjcnRjIHx8ICFzdGF0ZSB8fCBsbV9pZHggPj0gQVJSQVlfU0laRShjcnRjX3N0YXRl LT5sbV9ib3VuZHMpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWRwdV9jcnRjID0gdG9fZHB1X2Ny dGMoY3J0Yyk7Ci0JY3J0Y19zdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKHN0YXRlKTsKLQljcnRj X3JvaSA9ICZjcnRjX3N0YXRlLT5jcnRjX3JvaTsKLQlsbV9ib3VuZHMgPSAmY3J0Y19zdGF0ZS0+ bG1fYm91bmRzW2xtX2lkeF07Ci0JbG1fcm9pID0gJmNydGNfc3RhdGUtPmxtX3JvaVtsbV9pZHhd OwotCi0JaWYgKGRwdV9rbXNfcmVjdF9pc19udWxsKGNydGNfcm9pKSkKLQkJbWVtY3B5KGxtX3Jv aSwgbG1fYm91bmRzLCBzaXplb2YoKmxtX3JvaSkpOwotCWVsc2UKLQkJZHB1X2ttc19yZWN0X2lu dGVyc2VjdChjcnRjX3JvaSwgbG1fYm91bmRzLCBsbV9yb2kpOwotCi0JRFBVX0RFQlVHKCIlczog bG0lZCByb2kgKCVkLCVkLCVkLCVkKVxuIiwgZHB1X2NydGMtPm5hbWUsIGxtX2lkeCwKLQkJCWxt X3JvaS0+eCwgbG1fcm9pLT55LCBsbV9yb2ktPncsIGxtX3JvaS0+aCk7Ci0KLQkvKgotCSAqIHBh cnRpYWwgdXBkYXRlIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCAzZG11eCBkc2Mgb3IgZGVzdCBzY2Fs ZXIuCi0JICogaGVuY2UsIGNydGMgcm9pIG11c3QgbWF0Y2ggdGhlIG1peGVyIGRpbWVuc2lvbnMu Ci0JICovCi0JaWYgKGNydGNfc3RhdGUtPm51bV9kc19lbmFibGVkIHx8Ci0JCV9kcHVfY3J0Y19z ZXR1cF9pc18zZG11eF9kc2Moc3RhdGUpKSB7Ci0JCWlmIChtZW1jbXAobG1fcm9pLCBsbV9ib3Vu ZHMsIHNpemVvZihzdHJ1Y3QgZHB1X3JlY3QpKSkgewotCQkJRFBVX0VSUk9SKCJVbnN1cHBvcnRl ZDogRGVzdCBzY2FsZXIvM2QgbXV4IERTQyArIFBVXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwot CQl9Ci0JfQotCi0JLyogaWYgYW55IGRpbWVuc2lvbiBpcyB6ZXJvLCBjbGVhciBhbGwgZGltZW5z aW9ucyBmb3IgY2xhcml0eSAqLwotCWlmIChkcHVfa21zX3JlY3RfaXNfbnVsbChsbV9yb2kpKQot CQltZW1zZXQobG1fcm9pLCAwLCBzaXplb2YoKmxtX3JvaSkpOwotCi0JcmV0dXJuIDA7Ci19Ci0K LXN0YXRpYyB1MzIgX2RwdV9jcnRjX2dldF9kaXNwbGF5c19hZmZlY3RlZChzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMsCi0JCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCi17Ci0Jc3RydWN0IGRw dV9jcnRjICpkcHVfY3J0YzsKLQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Ci0J dTMyIGRpc3BfYml0bWFzayA9IDA7Ci0JaW50IGk7Ci0KLQlkcHVfY3J0YyA9IHRvX2RwdV9jcnRj KGNydGMpOwotCWNydGNfc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShzdGF0ZSk7Ci0KLQkvKiBw aW5ncG9uZyBzcGxpdDogb25lIFJPSSwgb25lIExNLCB0d28gcGh5c2ljYWwgZGlzcGxheXMgKi8K LQlpZiAoY3J0Y19zdGF0ZS0+aXNfcHBzcGxpdCkgewotCQl1MzIgbG1fc3BsaXRfd2lkdGggPSBj cnRjX3N0YXRlLT5sbV9ib3VuZHNbMF0udyAvIDI7Ci0JCXN0cnVjdCBkcHVfcmVjdCAqcm9pID0g JmNydGNfc3RhdGUtPmxtX3JvaVswXTsKLQotCQlpZiAoZHB1X2ttc19yZWN0X2lzX251bGwocm9p KSkKLQkJCWRpc3BfYml0bWFzayA9IDA7Ci0JCWVsc2UgaWYgKCh1MzIpcm9pLT54ICsgKHUzMily b2ktPncgPD0gbG1fc3BsaXRfd2lkdGgpCi0JCQlkaXNwX2JpdG1hc2sgPSBCSVQoMCk7CQkvKiBs ZWZ0IG9ubHkgKi8KLQkJZWxzZSBpZiAocm9pLT54ID49IGxtX3NwbGl0X3dpZHRoKQotCQkJZGlz cF9iaXRtYXNrID0gQklUKDEpOwkJLyogcmlnaHQgb25seSAqLwotCQllbHNlCi0JCQlkaXNwX2Jp dG1hc2sgPSBCSVQoMCkgfCBCSVQoMSk7IC8qIGxlZnQgYW5kIHJpZ2h0ICovCi0JfSBlbHNlIHsK LQkJZm9yIChpID0gMDsgaSA8IGRwdV9jcnRjLT5udW1fbWl4ZXJzOyBpKyspIHsKLQkJCWlmICgh ZHB1X2ttc19yZWN0X2lzX251bGwoJmNydGNfc3RhdGUtPmxtX3JvaVtpXSkpCi0JCQkJZGlzcF9i aXRtYXNrIHw9IEJJVChpKTsKLQkJfQotCX0KLQotCURQVV9ERUJVRygiYWZmZWN0ZWQgZGlzcGxh eXMgMHgleFxuIiwgZGlzcF9iaXRtYXNrKTsKLQotCXJldHVybiBkaXNwX2JpdG1hc2s7Ci19Ci0K LXN0YXRpYyBpbnQgX2RwdV9jcnRjX2NoZWNrX3JvaXNfY2VudGVyZWRfYW5kX3N5bW1ldHJpYyhz dHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCi17 Ci0Jc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YzsKLQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNy dGNfc3RhdGU7Ci0JY29uc3Qgc3RydWN0IGRwdV9yZWN0ICpyb2lbQ1JUQ19EVUFMX01JWEVSU107 Ci0KLQlpZiAoIWNydGMgfHwgIXN0YXRlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWRwdV9jcnRj ID0gdG9fZHB1X2NydGMoY3J0Yyk7Ci0JY3J0Y19zdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKHN0 YXRlKTsKLQotCWlmIChkcHVfY3J0Yy0+bnVtX21peGVycyA+IENSVENfRFVBTF9NSVhFUlMpIHsK LQkJRFBVX0VSUk9SKCIlczogdW5zdXBwb3J0ZWQgbnVtYmVyIG9mIG1peGVyczogJWRcbiIsCi0J CQkJZHB1X2NydGMtPm5hbWUsIGRwdV9jcnRjLT5udW1fbWl4ZXJzKTsKLQkJcmV0dXJuIC1FSU5W QUw7Ci0JfQotCi0JLyoKLQkgKiBJZiB1c2luZyBwaW5ncG9uZyBzcGxpdDogb25lIFJPSSwgb25l IExNLCB0d28gcGh5c2ljYWwgZGlzcGxheXMKLQkgKiB0aGVuIHRoZSBST0kgbXVzdCBiZSBjZW50 ZXJlZCBvbiB0aGUgcGFuZWwgc3BsaXQgYm91bmRhcnkgYW5kCi0JICogYmUgb2YgZXF1YWwgd2lk dGggYWNyb3NzIHRoZSBzcGxpdC4KLQkgKi8KLQlpZiAoY3J0Y19zdGF0ZS0+aXNfcHBzcGxpdCkg ewotCQl1MTYgcGFuZWxfc3BsaXRfd2lkdGg7Ci0JCXUzMiBkaXNwbGF5X21hc2s7Ci0KLQkJcm9p WzBdID0gJmNydGNfc3RhdGUtPmxtX3JvaVswXTsKLQotCQlpZiAoZHB1X2ttc19yZWN0X2lzX251 bGwocm9pWzBdKSkKLQkJCXJldHVybiAwOwotCi0JCWRpc3BsYXlfbWFzayA9IF9kcHVfY3J0Y19n ZXRfZGlzcGxheXNfYWZmZWN0ZWQoY3J0Yywgc3RhdGUpOwotCQlpZiAoZGlzcGxheV9tYXNrICE9 IChCSVQoMCkgfCBCSVQoMSkpKQotCQkJcmV0dXJuIDA7Ci0KLQkJcGFuZWxfc3BsaXRfd2lkdGgg PSBjcnRjX3N0YXRlLT5sbV9ib3VuZHNbMF0udyAvIDI7Ci0JCWlmIChyb2lbMF0tPnggKyByb2lb MF0tPncgLyAyICE9IHBhbmVsX3NwbGl0X3dpZHRoKSB7Ci0JCQlEUFVfRVJST1IoIiVzOiByb2kg eCAlZCB3ICVkIHNwbGl0ICVkXG4iLAotCQkJCQlkcHVfY3J0Yy0+bmFtZSwgcm9pWzBdLT54LCBy b2lbMF0tPncsCi0JCQkJCXBhbmVsX3NwbGl0X3dpZHRoKTsKLQkJCXJldHVybiAtRUlOVkFMOwot CQl9Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyoKLQkgKiBPbiBjZXJ0YWluIEhXLCBpZiB1c2lu ZyAyIExNLCBST0lzIG11c3QgYmUgc3BsaXQgZXZlbmx5IGJldHdlZW4gdGhlCi0JICogTE1zIGFu ZCBiZSBvZiBlcXVhbCB3aWR0aC4KLQkgKi8KLQlpZiAoZHB1X2NydGMtPm51bV9taXhlcnMgPCAy KQotCQlyZXR1cm4gMDsKLQotCXJvaVswXSA9ICZjcnRjX3N0YXRlLT5sbV9yb2lbMF07Ci0Jcm9p WzFdID0gJmNydGNfc3RhdGUtPmxtX3JvaVsxXTsKLQotCS8qIGlmIG9uZSBvZiB0aGUgcm9pIGlz IG51bGwgaXQncyBhIGxlZnQvcmlnaHQtb25seSB1cGRhdGUgKi8KLQlpZiAoZHB1X2ttc19yZWN0 X2lzX251bGwocm9pWzBdKSB8fCBkcHVfa21zX3JlY3RfaXNfbnVsbChyb2lbMV0pKQotCQlyZXR1 cm4gMDsKLQotCS8qIGNoZWNrIGxtIHJvaXMgYXJlIGVxdWFsIHdpZHRoICYgZmlyc3Qgcm9pIGVu ZHMgYXQgMm5kIHJvaSAqLwotCWlmIChyb2lbMF0tPnggKyByb2lbMF0tPncgIT0gcm9pWzFdLT54 IHx8IHJvaVswXS0+dyAhPSByb2lbMV0tPncpIHsKLQkJRFBVX0VSUk9SKAotCQkJIiVzOiByb2lz IG5vdCBjZW50ZXJlZCBhbmQgc3ltbWV0cmljOiByb2kwIHggJWQgdyAlZCByb2kxIHggJWQgdyAl ZFxuIiwKLQkJCQlkcHVfY3J0Yy0+bmFtZSwgcm9pWzBdLT54LCByb2lbMF0tPncsCi0JCQkJcm9p WzFdLT54LCByb2lbMV0tPncpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsK LX0KLQotc3RhdGljIGludCBfZHB1X2NydGNfY2hlY2tfcGxhbmVzX3dpdGhpbl9jcnRjX3JvaShz dHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCi17 Ci0Jc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YzsKLQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNy dGNfc3RhdGU7Ci0JY29uc3Qgc3RydWN0IGRwdV9yZWN0ICpjcnRjX3JvaTsKLQlzdHJ1Y3QgZHJt X3BsYW5lX3N0YXRlICpwc3RhdGU7Ci0Jc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7Ci0KLQlpZiAo IWNydGMgfHwgIXN0YXRlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qCi0JICogUmVqZWN0IGNv bW1pdCBpZiBhIFBsYW5lIENSVEMgZGVzdGluYXRpb24gY29vcmRpbmF0ZXMgZmFsbCBvdXRzaWRl Ci0JICogdGhlIHBhcnRpYWwgQ1JUQyBST0kuIExNIG91dHB1dCBpcyBkZXRlcm1pbmVkIHZpYSBj b25uZWN0b3IgUk9JcywKLQkgKiBpZiB0aGV5IGFyZSBzcGVjaWZpZWQsIG5vdCBQbGFuZSBDUlRD IFJPSXMuCi0JICovCi0KLQlkcHVfY3J0YyA9IHRvX2RwdV9jcnRjKGNydGMpOwotCWNydGNfc3Rh dGUgPSB0b19kcHVfY3J0Y19zdGF0ZShzdGF0ZSk7Ci0JY3J0Y19yb2kgPSAmY3J0Y19zdGF0ZS0+ Y3J0Y19yb2k7Ci0KLQlpZiAoZHB1X2ttc19yZWN0X2lzX251bGwoY3J0Y19yb2kpKQotCQlyZXR1 cm4gMDsKLQotCWRybV9hdG9taWNfY3J0Y19zdGF0ZV9mb3JfZWFjaF9wbGFuZShwbGFuZSwgc3Rh dGUpIHsKLQkJc3RydWN0IGRwdV9yZWN0IHBsYW5lX3JvaSwgaW50ZXJzZWN0aW9uOwotCi0JCXBz dGF0ZSA9IGRybV9hdG9taWNfZ2V0X3BsYW5lX3N0YXRlKHN0YXRlLT5zdGF0ZSwgcGxhbmUpOwot CQlpZiAoSVNfRVJSX09SX05VTEwocHN0YXRlKSkgewotCQkJaW50IHJjID0gUFRSX0VSUihwc3Rh dGUpOwotCi0JCQlEUFVfRVJST1IoIiVzOiBmYWlsZWQgdG8gZ2V0IHBsYW5lJWQgc3RhdGUsICVk XG4iLAotCQkJCQlkcHVfY3J0Yy0+bmFtZSwgcGxhbmUtPmJhc2UuaWQsIHJjKTsKLQkJCXJldHVy biByYzsKLQkJfQotCi0JCXBsYW5lX3JvaS54ID0gcHN0YXRlLT5jcnRjX3g7Ci0JCXBsYW5lX3Jv aS55ID0gcHN0YXRlLT5jcnRjX3k7Ci0JCXBsYW5lX3JvaS53ID0gcHN0YXRlLT5jcnRjX3c7Ci0J CXBsYW5lX3JvaS5oID0gcHN0YXRlLT5jcnRjX2g7Ci0JCWRwdV9rbXNfcmVjdF9pbnRlcnNlY3Qo Y3J0Y19yb2ksICZwbGFuZV9yb2ksICZpbnRlcnNlY3Rpb24pOwotCQlpZiAoIWRwdV9rbXNfcmVj dF9pc19lcXVhbCgmcGxhbmVfcm9pLCAmaW50ZXJzZWN0aW9uKSkgewotCQkJRFBVX0VSUk9SKAot CQkJCSIlczogcGxhbmUlZCBjcnRjIHJvaSAoJWQsJWQsJWQsJWQpIG91dHNpZGUgY3J0YyByb2kg KCVkLCVkLCVkLCVkKVxuIiwKLQkJCQkJZHB1X2NydGMtPm5hbWUsIHBsYW5lLT5iYXNlLmlkLAot CQkJCQlwbGFuZV9yb2kueCwgcGxhbmVfcm9pLnksCi0JCQkJCXBsYW5lX3JvaS53LCBwbGFuZV9y b2kuaCwKLQkJCQkJY3J0Y19yb2ktPngsIGNydGNfcm9pLT55LAotCQkJCQljcnRjX3JvaS0+dywg Y3J0Y19yb2ktPmgpOwotCQkJcmV0dXJuIC1FMkJJRzsKLQkJfQotCX0KLQotCXJldHVybiAwOwot fQotCi1zdGF0aWMgaW50IF9kcHVfY3J0Y19jaGVja19yb2lzKHN0cnVjdCBkcm1fY3J0YyAqY3J0 YywKLQkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkKLXsKLQlzdHJ1Y3QgZHB1X2NydGMg KmRwdV9jcnRjOwotCWludCBsbV9pZHg7Ci0JaW50IHJjOwotCi0JaWYgKCFjcnRjIHx8ICFzdGF0 ZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlkcHVfY3J0YyA9IHRvX2RwdV9jcnRjKGNydGMpOwot Ci0JcmMgPSBfZHB1X2NydGNfc2V0X2NydGNfcm9pKGNydGMsIHN0YXRlKTsKLQlpZiAocmMpCi0J CXJldHVybiByYzsKLQotCXJjID0gX2RwdV9jcnRjX2NoZWNrX2F1dG9yZWZyZXNoKGNydGMsIHN0 YXRlKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQotCWZvciAobG1faWR4ID0gMDsgbG1faWR4 IDwgZHB1X2NydGMtPm51bV9taXhlcnM7IGxtX2lkeCsrKSB7Ci0JCXJjID0gX2RwdV9jcnRjX3Nl dF9sbV9yb2koY3J0Yywgc3RhdGUsIGxtX2lkeCk7Ci0JCWlmIChyYykKLQkJCXJldHVybiByYzsK LQl9Ci0KLQlyYyA9IF9kcHVfY3J0Y19jaGVja19yb2lzX2NlbnRlcmVkX2FuZF9zeW1tZXRyaWMo Y3J0Yywgc3RhdGUpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCi0JcmMgPSBfZHB1X2NydGNf Y2hlY2tfcGxhbmVzX3dpdGhpbl9jcnRjX3JvaShjcnRjLCBzdGF0ZSk7Ci0JaWYgKHJjKQotCQly ZXR1cm4gcmM7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgX2RwdV9jcnRjX3Byb2dy YW1fbG1fb3V0cHV0X3JvaShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7CiAJc3RydWN0IGRwdV9j cnRjICpkcHVfY3J0YzsKIAlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Ci0JY29u c3Qgc3RydWN0IGRwdV9yZWN0ICpsbV9yb2k7Ci0Jc3RydWN0IGRwdV9od19taXhlciAqaHdfbG07 CiAJaW50IGxtX2lkeCwgbG1faG9yaXpfcG9zaXRpb247CiAKLQlpZiAoIWNydGMpCi0JCXJldHVy bjsKLQogCWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7CiAJY3J0Y19zdGF0ZSA9IHRvX2Rw dV9jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKIAogCWxtX2hvcml6X3Bvc2l0aW9uID0gMDsKIAlm b3IgKGxtX2lkeCA9IDA7IGxtX2lkeCA8IGRwdV9jcnRjLT5udW1fbWl4ZXJzOyBsbV9pZHgrKykg eworCQljb25zdCBzdHJ1Y3QgZHB1X3JlY3QgKmxtX3JvaSA9ICZjcnRjX3N0YXRlLT5sbV9ib3Vu ZHNbbG1faWR4XTsKKwkJc3RydWN0IGRwdV9od19taXhlciAqaHdfbG0gPSBkcHVfY3J0Yy0+bWl4 ZXJzW2xtX2lkeF0uaHdfbG07CiAJCXN0cnVjdCBkcHVfaHdfbWl4ZXJfY2ZnIGNmZzsKIAotCQls bV9yb2kgPSAmY3J0Y19zdGF0ZS0+bG1fcm9pW2xtX2lkeF07Ci0JCWh3X2xtID0gZHB1X2NydGMt Pm1peGVyc1tsbV9pZHhdLmh3X2xtOwotCi0JCURQVV9FVlQzMihEUk1JRChjcnRjX3N0YXRlLT5i YXNlLmNydGMpLCBsbV9pZHgsCi0JCQlsbV9yb2ktPngsIGxtX3JvaS0+eSwgbG1fcm9pLT53LCBs bV9yb2ktPmgpOwotCiAJCWlmIChkcHVfa21zX3JlY3RfaXNfbnVsbChsbV9yb2kpKQogCQkJY29u dGludWU7CiAKLQkJaHdfbG0tPmNmZy5vdXRfd2lkdGggPSBsbV9yb2ktPnc7Ci0JCWh3X2xtLT5j Zmcub3V0X2hlaWdodCA9IGxtX3JvaS0+aDsKLQkJaHdfbG0tPmNmZy5yaWdodF9taXhlciA9IGxt X2hvcml6X3Bvc2l0aW9uOwotCiAJCWNmZy5vdXRfd2lkdGggPSBsbV9yb2ktPnc7CiAJCWNmZy5v dXRfaGVpZ2h0ID0gbG1fcm9pLT5oOwogCQljZmcucmlnaHRfbWl4ZXIgPSBsbV9ob3Jpel9wb3Np dGlvbisrOwpAQCAtMTM2MSw3MCArOTIwLDcgQEAgc3RhdGljIHZvaWQgX2RwdV9jcnRjX2JsZW5k X3NldHVwX21peGVyKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJCQkJbWl4ZXIsICZjc3RhdGUt PmRpbV9sYXllcltpXSk7CiAJfQogCi0JX2RwdV9jcnRjX3Byb2dyYW1fbG1fb3V0cHV0X3JvaShj cnRjKTsKLX0KLQotc3RhdGljIHZvaWQgX2RwdV9jcnRjX3N3YXBfbWl4ZXJzX2Zvcl9yaWdodF9w YXJ0aWFsX3VwZGF0ZSgKLQkJc3RydWN0IGRybV9jcnRjICpjcnRjKQotewotCXN0cnVjdCBkcHVf Y3J0YyAqZHB1X2NydGM7Ci0Jc3RydWN0IGRwdV9jcnRjX3N0YXRlICpjc3RhdGU7Ci0Jc3RydWN0 IGRybV9lbmNvZGVyICpkcm1fZW5jOwotCWJvb2wgaXNfcmlnaHRfb25seTsKLQlib29sIGVuY29k ZXJfaW5fZHNjX21lcmdlID0gZmFsc2U7Ci0KLQlpZiAoIWNydGMgfHwgIWNydGMtPnN0YXRlKQot CQlyZXR1cm47Ci0KLQlkcHVfY3J0YyA9IHRvX2RwdV9jcnRjKGNydGMpOwotCWNzdGF0ZSA9IHRv X2RwdV9jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKLQotCWlmIChkcHVfY3J0Yy0+bnVtX21peGVy cyAhPSBDUlRDX0RVQUxfTUlYRVJTKQotCQlyZXR1cm47Ci0KLQlkcm1fZm9yX2VhY2hfZW5jb2Rl cihkcm1fZW5jLCBjcnRjLT5kZXYpIHsKLQkJaWYgKGRybV9lbmMtPmNydGMgPT0gY3J0YyAmJgot CQkJCWRwdV9lbmNvZGVyX2lzX2RzY19tZXJnZShkcm1fZW5jKSkgewotCQkJZW5jb2Rlcl9pbl9k c2NfbWVyZ2UgPSB0cnVlOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBGb3Igcmln aHQtb25seSBwYXJ0aWFsIHVwZGF0ZSB3aXRoIERTQyBtZXJnZSwgd2Ugc3dhcCBMTTAgJiBMTTEu Ci0JICogVGhpcyBpcyBkdWUgdG8gdHdvIHJlYXNvbnM6Ci0JICogLSBPbiA4OTk2LCB0aGVyZSBp cyBhIERTQyBIVyByZXF1aXJlbWVudCB0aGF0IGluIERTQyBNZXJnZSBNb2RlLAotCSAqICAgdGhl IGxlZnQgRFNDIG11c3QgYmUgdXNlZCwgcmlnaHQgRFNDIGNhbm5vdCBiZSB1c2VkIGFsb25lLgot CSAqICAgRm9yIHJpZ2h0LW9ubHkgcGFydGlhbCB1cGRhdGUsIHRoaXMgbWVhbnMgc3dhcCBsYXll ciBtaXhlcnMgdG8gbWFwCi0JICogICBMZWZ0IExNIHRvIFJpZ2h0IElOVEYuIE9uIGxhdGVyIEhX IHRoaXMgd2FzIHJlbGF4ZWQuCi0JICogLSBJbiBEU0MgTWVyZ2UgbW9kZSwgdGhlIHBoeXNpY2Fs IGVuY29kZXIgaGFzIGFscmVhZHkgcmVnaXN0ZXJlZAotCSAqICAgUFAwIGFzIHRoZSBtYXN0ZXIs IHRvIHN3aXRjaCB0byByaWdodC1vbmx5IHdlIHdvdWxkIGhhdmUgdG8KLQkgKiAgIHJlcHJvZ3Jh bSB0byBiZSBkcml2ZW4gYnkgUFAxIGluc3RlYWQuCi0JICogVG8gc3VwcG9ydCBib3RoIGNhc2Vz LCB3ZSBwcmVmZXIgdG8gc3VwcG9ydCB0aGUgbWl4ZXIgc3dhcCBzb2x1dGlvbi4KLQkgKi8KLQlp ZiAoIWVuY29kZXJfaW5fZHNjX21lcmdlKQotCQlyZXR1cm47Ci0KLQlpc19yaWdodF9vbmx5ID0g ZHB1X2ttc19yZWN0X2lzX251bGwoJmNzdGF0ZS0+bG1fcm9pWzBdKSAmJgotCQkJIWRwdV9rbXNf cmVjdF9pc19udWxsKCZjc3RhdGUtPmxtX3JvaVsxXSk7Ci0KLQlpZiAoaXNfcmlnaHRfb25seSAm JiAhZHB1X2NydGMtPm1peGVyc19zd2FwcGVkKSB7Ci0JCS8qIHJpZ2h0LW9ubHkgdXBkYXRlIHN3 YXAgbWl4ZXJzICovCi0JCXN3YXAoZHB1X2NydGMtPm1peGVyc1swXSwgZHB1X2NydGMtPm1peGVy c1sxXSk7Ci0JCWRwdV9jcnRjLT5taXhlcnNfc3dhcHBlZCA9IHRydWU7Ci0JfSBlbHNlIGlmICgh aXNfcmlnaHRfb25seSAmJiBkcHVfY3J0Yy0+bWl4ZXJzX3N3YXBwZWQpIHsKLQkJLyogbGVmdC1v bmx5IG9yIGZ1bGwgdXBkYXRlLCBzd2FwIGJhY2sgKi8KLQkJc3dhcChkcHVfY3J0Yy0+bWl4ZXJz WzBdLCBkcHVfY3J0Yy0+bWl4ZXJzWzFdKTsKLQkJZHB1X2NydGMtPm1peGVyc19zd2FwcGVkID0g ZmFsc2U7Ci0JfQotCi0JRFBVX0RFQlVHKCIlczogcmlnaHRfb25seSAlZCBzd2FwcGVkICVkLCBt aXgwLT5sbSVkLCBtaXgxLT5sbSVkXG4iLAotCQkJZHB1X2NydGMtPm5hbWUsIGlzX3JpZ2h0X29u bHksIGRwdV9jcnRjLT5taXhlcnNfc3dhcHBlZCwKLQkJCWRwdV9jcnRjLT5taXhlcnNbMF0uaHdf bG0tPmlkeCAtIExNXzAsCi0JCQlkcHVfY3J0Yy0+bWl4ZXJzWzFdLmh3X2xtLT5pZHggLSBMTV8w KTsKLQlEUFVfRVZUMzIoRFJNSUQoY3J0YyksIGlzX3JpZ2h0X29ubHksIGRwdV9jcnRjLT5taXhl cnNfc3dhcHBlZCwKLQkJCWRwdV9jcnRjLT5taXhlcnNbMF0uaHdfbG0tPmlkeCAtIExNXzAsCi0J CQlkcHVfY3J0Yy0+bWl4ZXJzWzFdLmh3X2xtLT5pZHggLSBMTV8wKTsKKwkgX2RwdV9jcnRjX3By b2dyYW1fbG1fb3V0cHV0X3JvaShjcnRjKTsKIH0KIAogLyoqCkBAIC0xNDcyLDI3ICs5NjgsMTUg QEAgc3RhdGljIHZvaWQgX2RwdV9jcnRjX2JsZW5kX3NldHVwKHN0cnVjdCBkcm1fY3J0YyAqY3J0 YykKIAkJCWxtLT5vcHMuY2xlYXJfZGltX2xheWVyKGxtKTsKIAl9CiAKLQlfZHB1X2NydGNfc3dh cF9taXhlcnNfZm9yX3JpZ2h0X3BhcnRpYWxfdXBkYXRlKGNydGMpOwotCiAJLyogaW5pdGlhbGl6 ZSBzdGFnZSBjZmcgKi8KIAltZW1zZXQoJmRwdV9jcnRjLT5zdGFnZV9jZmcsIDAsIHNpemVvZihz dHJ1Y3QgZHB1X2h3X3N0YWdlX2NmZykpOwogCiAJX2RwdV9jcnRjX2JsZW5kX3NldHVwX21peGVy KGNydGMsIGRwdV9jcnRjLCBtaXhlcik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZHB1X2NydGMtPm51 bV9taXhlcnM7IGkrKykgewotCQljb25zdCBzdHJ1Y3QgZHB1X3JlY3QgKmxtX3JvaSA9ICZkcHVf Y3J0Y19zdGF0ZS0+bG1fcm9pW2ldOwotCiAJCWN0bCA9IG1peGVyW2ldLmh3X2N0bDsKIAkJbG0g PSBtaXhlcltpXS5od19sbTsKIAotCQlpZiAoZHB1X2ttc19yZWN0X2lzX251bGwobG1fcm9pKSkg ewotCQkJRFBVX0RFQlVHKAotCQkJCSIlczogbG0lZCBsZWF2ZSBjdGwlZCBtYXNrIDAgc2luY2Ug bnVsbCByb2lcbiIsCi0JCQkJCWRwdV9jcnRjLT5uYW1lLCBsbS0+aWR4IC0gTE1fMCwKLQkJCQkJ Y3RsLT5pZHggLSBDVExfMCk7Ci0JCQljb250aW51ZTsKLQkJfQotCiAJCWxtLT5vcHMuc2V0dXBf YWxwaGFfb3V0KGxtLCBtaXhlcltpXS5taXhlcl9vcF9tb2RlKTsKIAogCQltaXhlcltpXS5mbHVz aF9tYXNrIHw9IGN0bC0+b3BzLmdldF9iaXRtYXNrX21peGVyKGN0bCwKQEAgLTE1MTAsOCArOTk0 LDYgQEAgc3RhdGljIHZvaWQgX2RwdV9jcnRjX2JsZW5kX3NldHVwKHN0cnVjdCBkcm1fY3J0YyAq Y3J0YykKIAkJY3RsLT5vcHMuc2V0dXBfYmxlbmRzdGFnZShjdGwsIG1peGVyW2ldLmh3X2xtLT5p ZHgsCiAJCQkmZHB1X2NydGMtPnN0YWdlX2NmZyk7CiAJfQotCi0JX2RwdV9jcnRjX3Byb2dyYW1f bG1fb3V0cHV0X3JvaShjcnRjKTsKIH0KIAogLyoqCkBAIC0yNjY0LDE0ICsyMTQ2LDkgQEAgc3Rh dGljIHZvaWQgX2RwdV9jcnRjX3NldHVwX2xtX2JvdW5kcyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMs CiAJCWNzdGF0ZS0+bG1fYm91bmRzW2ldLncgPSBjcnRjX3NwbGl0X3dpZHRoOwogCQljc3RhdGUt PmxtX2JvdW5kc1tpXS5oID0KIAkJCWRwdV9jcnRjX2dldF9taXhlcl9oZWlnaHQoZHB1X2NydGMs IGNzdGF0ZSwgYWRqX21vZGUpOwotCQltZW1jcHkoJmNzdGF0ZS0+bG1fcm9pW2ldLCAmY3N0YXRl LT5sbV9ib3VuZHNbaV0sCi0JCQkJc2l6ZW9mKGNzdGF0ZS0+bG1fcm9pW2ldKSk7CiAJCURQVV9F VlQzMl9WRVJCT1NFKERSTUlEKGNydGMpLCBpLAogCQkJCWNzdGF0ZS0+bG1fYm91bmRzW2ldLngs IGNzdGF0ZS0+bG1fYm91bmRzW2ldLnksCiAJCQkJY3N0YXRlLT5sbV9ib3VuZHNbaV0udywgY3N0 YXRlLT5sbV9ib3VuZHNbaV0uaCk7Ci0JCURQVV9ERUJVRygiJXM6IGxtJWQgYm5kJnJvaSAoJWQs JWQsJWQsJWQpXG4iLCBkcHVfY3J0Yy0+bmFtZSwgaSwKLQkJCQljc3RhdGUtPmxtX3JvaVtpXS54 LCBjc3RhdGUtPmxtX3JvaVtpXS55LAotCQkJCWNzdGF0ZS0+bG1fcm9pW2ldLncsIGNzdGF0ZS0+ bG1fcm9pW2ldLmgpOwogCX0KIAogCWRybV9tb2RlX2RlYnVnX3ByaW50bW9kZWxpbmUoYWRqX21v ZGUpOwpAQCAtMzAxOSw4ICsyNDk2LDYgQEAgdm9pZCBkcHVfY3J0Y19jb21taXRfa2lja29mZihz dHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAJCSAqIElmIHNvLCBpdCBtYXkgZGVsYXkgYW5kIGZsdXNo IGF0IGFuIGlycSBldmVudCAoZS5nLiBwcGRvbmUpCiAJCSAqLwogCQlwYXJhbXMuaW5saW5lX3Jv dGF0ZV9wcmVmaWxsID0gY3N0YXRlLT5zYnVmX3ByZWZpbGxfbGluZTsKLQkJcGFyYW1zLmFmZmVj dGVkX2Rpc3BsYXlzID0gX2RwdV9jcnRjX2dldF9kaXNwbGF5c19hZmZlY3RlZChjcnRjLAotCQkJ CWNydGMtPnN0YXRlKTsKIAkJZHB1X2VuY29kZXJfcHJlcGFyZV9mb3Jfa2lja29mZihlbmNvZGVy LCAmcGFyYW1zKTsKIAogCQkvKgpAQCAtMzkzMSwxMiArMzQwNiw2IEBAIHN0YXRpYyBpbnQgZHB1 X2NydGNfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJfQogCX0KIAotCXJj ID0gX2RwdV9jcnRjX2NoZWNrX3JvaXMoY3J0Yywgc3RhdGUpOwotCWlmIChyYykgewotCQlEUFVf RVJST1IoImNydGMlZCBmYWlsZWQgcm9pIGNoZWNrICVkXG4iLCBjcnRjLT5iYXNlLmlkLCByYyk7 Ci0JCWdvdG8gZW5kOwotCX0KLQogZW5kOgogCV9kcHVfY3J0Y19ycF9mcmVlX3VudXNlZCgmY3N0 YXRlLT5ycCk7CiAJcmV0dXJuIHJjOwpAQCAtNDA2Niw5ICszNTM1LDYgQEAgc3RhdGljIHZvaWQg ZHB1X2NydGNfaW5zdGFsbF9wcm9wZXJ0aWVzKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAltc21f cHJvcGVydHlfaW5zdGFsbF9ibG9iKCZkcHVfY3J0Yy0+cHJvcGVydHlfaW5mbywgImNhcGFiaWxp dGllcyIsCiAJCURSTV9NT0RFX1BST1BfSU1NVVRBQkxFLCBDUlRDX1BST1BfSU5GTyk7CiAKLQlt c21fcHJvcGVydHlfaW5zdGFsbF92b2xhdGlsZV9yYW5nZSgmZHB1X2NydGMtPnByb3BlcnR5X2lu Zm8sCi0JCSJkcHVfZHJtX3JvaV92MSIsIDB4MCwgMCwgfjAsIDAsIENSVENfUFJPUF9ST0lfVjEp OwotCiAJZHB1X2ttc19pbmZvX3Jlc2V0KGluZm8pOwogCiAJaWYgKGNhdGFsb2ctPmhhc19kaW1f bGF5ZXIpIHsKQEAgLTQyMTcsMTAgKzM2ODMsNiBAQCBzdGF0aWMgaW50IGRwdV9jcnRjX2F0b21p Y19zZXRfcHJvcGVydHkoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCQkJCV9kcHVfY3J0Y19zZXRf ZGltX2xheWVyX3YxKGNzdGF0ZSwKIAkJCQkJCQkodm9pZCBfX3VzZXIgKil2YWwpOwogCQkJCWJy ZWFrOwotCQkJY2FzZSBDUlRDX1BST1BfUk9JX1YxOgotCQkJCXJldCA9IF9kcHVfY3J0Y19zZXRf cm9pX3YxKHN0YXRlLAotCQkJCQkJCSh2b2lkIF9fdXNlciAqKXZhbCk7Ci0JCQkJYnJlYWs7CiAJ CQljYXNlIENSVENfUFJPUF9ERVNUX1NDQUxFUjoKIAkJCQlyZXQgPSBfZHB1X2NydGNfc2V0X2Rl c3Rfc2NhbGVyKGRwdV9jcnRjLAogCQkJCQkJY3N0YXRlLCAodm9pZCBfX3VzZXIgKil2YWwpOwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaCBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmgKaW5kZXggYjYzZGYyNC4uMTVl M2ViNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMu aAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oCkBAIC0zNDUs MTMgKzM0NSw4IEBAIHN0cnVjdCBkcHVfY3J0Y19yZXNwb29sIHsKICAqIEBpc19wcHNwbGl0ICAg IDogV2hldGhlciBjdXJyZW50IHRvcG9sb2d5IHJlcXVpcmVzIFBQU3BsaXQgc3BlY2lhbCBoYW5k bGluZwogICogQGJ3X2NvbnRyb2wgICAgOiB0cnVlIGlmIGJ3L2NsayBjb250cm9sbGVkIGJ5IGNv cmUgYncvY2xrIHByb3BlcnRpZXMKICAqIEBid19zcGxpdF92b3RlIDogdHJ1ZSBpZiBidyBjb250 cm9sbGVkIGJ5IGxsY2MvZHJhbSBidyBwcm9wZXJ0aWVzCi0gKiBAY3J0Y19yb2kgICAgICA6IEN1 cnJlbnQgQ1JUQyBST0kuIFBvc3NpYmx5IHN1Yi1yZWN0YW5nbGUgb2YgbW9kZS4KLSAqICAgICAg ICAgICAgICAgICAgT3JpZ2luIHRvcCBsZWZ0IG9mIENSVEMuCiAgKiBAbG1fYm91bmRzICAgICA6 IExNIGJvdW5kYXJpZXMgYmFzZWQgb24gY3VycmVudCBtb2RlIGZ1bGwgcmVzb2x1dGlvbiwgbm8g Uk9JLgogICogICAgICAgICAgICAgICAgICBPcmlnaW4gdG9wIGxlZnQgb2YgQ1JUQy4KLSAqIEBs bV9yb2kgICAgICAgIDogQ3VycmVudCBMTSBST0ksIHBvc3NpYmx5IHN1Yi1yZWN0YW5nbGUgb2Yg bW9kZS4KLSAqICAgICAgICAgICAgICAgICAgT3JpZ2luIHRvcCBsZWZ0IG9mIENSVEMuCi0gKiBA dXNlcl9yb2lfbGlzdCA6IExpc3Qgb2YgdXNlcidzIHJlcXVlc3RlZCBST0lzIGFzIGZyb20gc2V0 IHByb3BlcnR5CiAgKiBAcHJvcGVydHlfc3RhdGU6IExvY2FsIHN0b3JhZ2UgZm9yIG1zbV9wcm9w IHByb3BlcnRpZXMKICAqIEBwcm9wZXJ0eV92YWx1ZXM6IEN1cnJlbnQgY3J0YyBwcm9wZXJ0eSB2 YWx1ZXMKICAqIEBpbnB1dF9mZW5jZV90aW1lb3V0X25zIDogQ2FjaGVkIGlucHV0IGZlbmNlIHRp bWVvdXQsIGluIG5zCkBAIC0zNzYsMTAgKzM3MSw3IEBAIHN0cnVjdCBkcHVfY3J0Y19zdGF0ZSB7 CiAJYm9vbCBid19zcGxpdF92b3RlOwogCiAJYm9vbCBpc19wcHNwbGl0OwotCXN0cnVjdCBkcHVf cmVjdCBjcnRjX3JvaTsKIAlzdHJ1Y3QgZHB1X3JlY3QgbG1fYm91bmRzW0NSVENfRFVBTF9NSVhF UlNdOwotCXN0cnVjdCBkcHVfcmVjdCBsbV9yb2lbQ1JUQ19EVUFMX01JWEVSU107Ci0Jc3RydWN0 IG1zbV9yb2lfbGlzdCB1c2VyX3JvaV9saXN0OwogCiAJc3RydWN0IG1zbV9wcm9wZXJ0eV9zdGF0 ZSBwcm9wZXJ0eV9zdGF0ZTsKIAlzdHJ1Y3QgbXNtX3Byb3BlcnR5X3ZhbHVlIHByb3BlcnR5X3Zh bHVlc1tDUlRDX1BST1BfQ09VTlRdOwpAQCAtNjA1LDE0ICs1OTcsNCBAQCBpbnQgZHB1X2NydGNf cmVzX2FkZChzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlLCB1MzIgdHlwZSwgdTY0IHRhZywK ICAqLwogdm9pZCBkcHVfY3J0Y19yZXNfcHV0KHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUs IHUzMiB0eXBlLCB1NjQgdGFnKTsKIAotLyoqCi0gKiBkcHVfY3J0Y19nZXRfY3J0Y19yb2kgLSBy ZXRyaWV2ZSB0aGUgY3J0Y19yb2kgZnJvbSB0aGUgZ2l2ZW4gc3RhdGUgb2JqZWN0Ci0gKgl1c2Vk IHRvIGFsbG93IHRoZSBwbGFuZXMgdG8gYWRqdXN0IHRoZWlyIGZpbmFsIGxtIG91dF94eSB2YWx1 ZSBpbiB0aGUKLSAqCWNhc2Ugb2YgcGFydGlhbCB1cGRhdGUKLSAqIEBjcnRjX3N0YXRlOiBQb2lu dGVyIHRvIGNydGMgc3RhdGUKLSAqIEBjcnRjX3JvaTogT3V0cHV0IHBvaW50ZXIgdG8gY3J0YyBy b2kgaW4gdGhlIGdpdmVuIHN0YXRlCi0gKi8KLXZvaWQgZHB1X2NydGNfZ2V0X2NydGNfcm9pKHN0 cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUsCi0JCWNvbnN0IHN0cnVjdCBkcHVfcmVjdCAqKmNy dGNfcm9pKTsKLQogI2VuZGlmIC8qIF9EUFVfQ1JUQ19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMKaW5kZXggM2QxNjhmYTAuLjkxYjllMDcgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYwpAQCAtMTk1LDggKzE5 NSw2IEBAIGVudW0gZHB1X2VuY19yY19zdGF0ZXMgewogICogQHRvcG9sb2d5OiAgICAgICAgICAg ICAgICAgICB0b3BvbG9neSBvZiB0aGUgZGlzcGxheQogICogQG1vZGVfc2V0X2NvbXBsZXRlOiAg ICAgICAgICBmbGFnIHRvIGluZGljYXRlIG1vZGVzZXQgY29tcGxldGlvbgogICogQHJzY19jb25m aWc6CQkJcnNjIGNvbmZpZ3VyYXRpb24gZm9yIGRpc3BsYXkgdnRvdGFsLCBmcHMsIGV0Yy4KLSAq IEBjdXJfY29ubl9yb2k6CQljdXJyZW50IGNvbm5lY3RvciByb2kKLSAqIEBwcnZfY29ubl9yb2k6 CQlwcmV2aW91cyBjb25uZWN0b3Igcm9pIHRvIG9wdGltaXplIGlmIHVuY2hhbmdlZAogICogQGlk bGVfdGltZW91dDoJCWlkbGUgdGltZW91dCBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMKICAqLwog c3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgewpAQCAtMjQzLDggKzI0MSw2IEBAIHN0cnVjdCBkcHVf ZW5jb2Rlcl92aXJ0IHsKIAlib29sIG1vZGVfc2V0X2NvbXBsZXRlOwogCiAJc3RydWN0IGRwdV9y c2NfY21kX2NvbmZpZyByc2NfY29uZmlnOwotCXN0cnVjdCBkcHVfcmVjdCBjdXJfY29ubl9yb2k7 Ci0Jc3RydWN0IGRwdV9yZWN0IHBydl9jb25uX3JvaTsKIAogCXUzMiBpZGxlX3RpbWVvdXQ7CiB9 OwpAQCAtODY4LDE0ICs4NjQsOCBAQCBzdGF0aWMgYm9vbCBfZHB1X2VuY29kZXJfZHNjX2ljaF9y ZXNldF9vdmVycmlkZV9uZWVkZWQoYm9vbCBwdV9lbiwKIAogc3RhdGljIHZvaWQgX2RwdV9lbmNv ZGVyX2RzY19waXBlX2NmZyhzdHJ1Y3QgZHB1X2h3X2RzYyAqaHdfZHNjLAogCQlzdHJ1Y3QgZHB1 X2h3X3Bpbmdwb25nICpod19wcCwgc3RydWN0IG1zbV9kaXNwbGF5X2RzY19pbmZvICpkc2MsCi0J CXUzMiBjb21tb25fbW9kZSwgYm9vbCBpY2hfcmVzZXQsIGJvb2wgZW5hYmxlKQorCQl1MzIgY29t bW9uX21vZGUsIGJvb2wgaWNoX3Jlc2V0KQogewotCWlmICghZW5hYmxlKSB7Ci0JCWlmIChod19w cC0+b3BzLmRpc2FibGVfZHNjKQotCQkJaHdfcHAtPm9wcy5kaXNhYmxlX2RzYyhod19wcCk7Ci0J CXJldHVybjsKLQl9Ci0KIAlpZiAoaHdfZHNjLT5vcHMuZHNjX2NvbmZpZykKIAkJaHdfZHNjLT5v cHMuZHNjX2NvbmZpZyhod19kc2MsIGRzYywgY29tbW9uX21vZGUsIGljaF9yZXNldCk7CiAKQEAg LTg4OSw0NiArODc5LDI3IEBAIHN0YXRpYyB2b2lkIF9kcHVfZW5jb2Rlcl9kc2NfcGlwZV9jZmco c3RydWN0IGRwdV9od19kc2MgKmh3X2RzYywKIAkJaHdfcHAtPm9wcy5lbmFibGVfZHNjKGh3X3Bw KTsKIH0KIAotc3RhdGljIHZvaWQgX2RwdV9lbmNvZGVyX2dldF9jb25uZWN0b3Jfcm9pKAotCQlz dHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYywKLQkJc3RydWN0IGRwdV9yZWN0ICptZXJn ZWRfY29ubl9yb2kpCi17Ci0Jc3RydWN0IGRybV9jb25uZWN0b3IgKmRybV9jb25uOwotCXN0cnVj dCBkcHVfY29ubmVjdG9yX3N0YXRlICpjX3N0YXRlOwotCi0JaWYgKCFkcHVfZW5jIHx8ICFtZXJn ZWRfY29ubl9yb2kpCi0JCXJldHVybjsKLQotCWRybV9jb25uID0gZHB1X2VuYy0+cGh5c19lbmNz WzBdLT5jb25uZWN0b3I7Ci0KLQlpZiAoIWRybV9jb25uIHx8ICFkcm1fY29ubi0+c3RhdGUpCi0J CXJldHVybjsKLQotCWNfc3RhdGUgPSB0b19kcHVfY29ubmVjdG9yX3N0YXRlKGRybV9jb25uLT5z dGF0ZSk7Ci0JZHB1X2ttc19yZWN0X21lcmdlX3JlY3RhbmdsZXMoJmNfc3RhdGUtPnJvaXMsIG1l cmdlZF9jb25uX3JvaSk7Ci19Ci0KIHN0YXRpYyBpbnQgX2RwdV9lbmNvZGVyX2RzY19uX2xtXzFf ZW5jXzFfaW50ZihzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYykKIHsKIAlpbnQgdGhp c19mcmFtZV9zbGljZXM7CiAJaW50IGludGZfaXBfdywgZW5jX2lwX3c7CiAJaW50IGljaF9yZXMs IGRzY19jb21tb25fbW9kZSA9IDA7CisJaW50IHJjID0gMDsKIAogCXN0cnVjdCBkcHVfaHdfcGlu Z3BvbmcgKmh3X3BwID0gZHB1X2VuYy0+aHdfcHBbMF07CiAJc3RydWN0IGRwdV9od19kc2MgKmh3 X2RzYyA9IGRwdV9lbmMtPmh3X2RzY1swXTsKIAlzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqZW5j X21hc3RlciA9IGRwdV9lbmMtPmN1cl9tYXN0ZXI7Ci0JY29uc3Qgc3RydWN0IGRwdV9yZWN0ICpy b2kgPSAmZHB1X2VuYy0+Y3VyX2Nvbm5fcm9pOwogCXN0cnVjdCBtc21fZGlzcGxheV9kc2NfaW5m byAqZHNjID0KIAkJJmRwdV9lbmMtPm1vZGVfaW5mby5jb21wX2luZm8uZHNjX2luZm87CiAKLQlp ZiAoZHNjID09IE5VTEwgfHwgaHdfZHNjID09IE5VTEwgfHwgaHdfcHAgPT0gTlVMTCB8fCAhZW5j X21hc3RlcikgewotCQlEUFVfRVJST1JfRU5DKGRwdV9lbmMsICJpbnZhbGlkIHBhcmFtcyBmb3Ig RFNDXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmMgPSBfZHB1X2VuY29kZXJfZHNjX3VwZGF0 ZV9waWNfZGltKGRzYywgZHNjLT5waWNfd2lkdGgsCisJCQlkc2MtPnBpY19oZWlnaHQpOworCWlm IChyYykgeworCQlEUFVfRVJST1JfRU5DKGRwdV9lbmMsICJmYWlsZWQgdG8gdXBkYXRlIERTQyBw aWMgZGltXG4iKTsKKwkJcmV0dXJuIHJjOwogCX0KIAotCV9kcHVfZW5jb2Rlcl9kc2NfdXBkYXRl X3BpY19kaW0oZHNjLCByb2ktPncsIHJvaS0+aCk7Ci0KLQl0aGlzX2ZyYW1lX3NsaWNlcyA9IHJv aS0+dyAvIGRzYy0+c2xpY2Vfd2lkdGg7CisJdGhpc19mcmFtZV9zbGljZXMgPSBkc2MtPnBpY193 aWR0aCAvIGRzYy0+c2xpY2Vfd2lkdGg7CiAJaW50Zl9pcF93ID0gdGhpc19mcmFtZV9zbGljZXMg KiBkc2MtPnNsaWNlX3dpZHRoOwogCV9kcHVfZW5jb2Rlcl9kc2NfcGNsa19wYXJhbV9jYWxjKGRz YywgaW50Zl9pcF93KTsKIApAQCAtOTQxLDIwNSArOTEyLDEyNiBAQCBzdGF0aWMgaW50IF9kcHVf ZW5jb2Rlcl9kc2Nfbl9sbV8xX2VuY18xX2ludGYoc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRw dV9lbmMpCiAJCWRzY19jb21tb25fbW9kZSA9IERTQ19NT0RFX1ZJREVPOwogCiAJRFBVX0RFQlVH X0VOQyhkcHVfZW5jLCAicGljX3c6ICVkIHBpY19oOiAlZCBtb2RlOiVkXG4iLAotCQlyb2ktPncs IHJvaS0+aCwgZHNjX2NvbW1vbl9tb2RlKTsKLQlEUFVfRVZUMzIoRFJNSUQoJmRwdV9lbmMtPmJh c2UpLCByb2ktPncsIHJvaS0+aCwgZHNjX2NvbW1vbl9tb2RlKTsKKwkJZHNjLT5waWNfd2lkdGgs IGRzYy0+cGljX2hlaWdodCwgZHNjX2NvbW1vbl9tb2RlKTsKKwlEUFVfRVZUMzIoRFJNSUQoJmRw dV9lbmMtPmJhc2UpLCBkc2MtPnBpY193aWR0aCwgZHNjLT5waWNfaGVpZ2h0LAorCQkJZHNjX2Nv bW1vbl9tb2RlKTsKIAogCV9kcHVfZW5jb2Rlcl9kc2NfcGlwZV9jZmcoaHdfZHNjLCBod19wcCwg ZHNjLCBkc2NfY29tbW9uX21vZGUsCi0JCQlpY2hfcmVzLCB0cnVlKTsKKwkJCWljaF9yZXMpOwog CiAJcmV0dXJuIDA7CiB9Ci0KLXN0YXRpYyBpbnQgX2RwdV9lbmNvZGVyX2RzY18yX2xtXzJfZW5j XzJfaW50ZihzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYywKLQkJc3RydWN0IGRwdV9l bmNvZGVyX2tpY2tvZmZfcGFyYW1zICpwYXJhbXMpCitzdGF0aWMgaW50IF9kcHVfZW5jb2Rlcl9k c2NfMl9sbV8yX2VuY18yX2ludGYoc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMpCiB7 CiAJaW50IHRoaXNfZnJhbWVfc2xpY2VzOwogCWludCBpbnRmX2lwX3csIGVuY19pcF93OwogCWlu dCBpY2hfcmVzLCBkc2NfY29tbW9uX21vZGU7CisJaW50IHJjID0gMDsKIAogCXN0cnVjdCBkcHVf ZW5jb2Rlcl9waHlzICplbmNfbWFzdGVyID0gZHB1X2VuYy0+Y3VyX21hc3RlcjsKLQljb25zdCBz dHJ1Y3QgZHB1X3JlY3QgKnJvaSA9ICZkcHVfZW5jLT5jdXJfY29ubl9yb2k7Ci0Jc3RydWN0IGRw dV9od19kc2MgKmh3X2RzY1tNQVhfQ0hBTk5FTFNfUEVSX0VOQ107Ci0Jc3RydWN0IGRwdV9od19w aW5ncG9uZyAqaHdfcHBbTUFYX0NIQU5ORUxTX1BFUl9FTkNdOwotCXN0cnVjdCBtc21fZGlzcGxh eV9kc2NfaW5mbyBkc2NbTUFYX0NIQU5ORUxTX1BFUl9FTkNdOwotCWJvb2wgaGFsZl9wYW5lbF9w YXJ0aWFsX3VwZGF0ZTsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBNQVhfQ0hBTk5FTFNf UEVSX0VOQzsgaSsrKSB7Ci0JCWh3X3BwW2ldID0gZHB1X2VuYy0+aHdfcHBbaV07Ci0JCWh3X2Rz Y1tpXSA9IGRwdV9lbmMtPmh3X2RzY1tpXTsKKwlzdHJ1Y3QgZHB1X2h3X2RzYyAqbF9od19kc2Mg PSBkcHVfZW5jLT5od19kc2NbMF07CisJc3RydWN0IGRwdV9od19kc2MgKnJfaHdfZHNjID0gZHB1 X2VuYy0+aHdfZHNjWzFdOworCXN0cnVjdCBkcHVfaHdfcGluZ3BvbmcgKmxfaHdfcHAgPSBkcHVf ZW5jLT5od19wcFswXTsKKwlzdHJ1Y3QgZHB1X2h3X3Bpbmdwb25nICpyX2h3X3BwID0gZHB1X2Vu Yy0+aHdfcHBbMV07CisJc3RydWN0IG1zbV9kaXNwbGF5X2RzY19pbmZvICpkc2MgPQorCQkmZHB1 X2VuYy0+bW9kZV9pbmZvLmNvbXBfaW5mby5kc2NfaW5mbzsKIAotCQlpZiAoIWh3X3BwW2ldIHx8 ICFod19kc2NbaV0pIHsKLQkJCURQVV9FUlJPUl9FTkMoZHB1X2VuYywgImludmFsaWQgcGFyYW1z IGZvciBEU0NcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KKwlyYyA9IF9kcHVfZW5jb2Rl cl9kc2NfdXBkYXRlX3BpY19kaW0oZHNjLAorCQkJZHNjLT5waWNfd2lkdGggKiBkcHVfZW5jLT5k aXNwbGF5X251bV9vZl9oX3RpbGVzLAorCQkJZHNjLT5waWNfaGVpZ2h0KTsKKwlpZiAocmMpIHsK KwkJRFBVX0VSUk9SX0VOQyhkcHVfZW5jLCAiZmFpbGVkIHRvIHVwZGF0ZSBEU0MgcGljIGRpbVxu Iik7CisJCXJldHVybiByYzsKIAl9CiAKLQloYWxmX3BhbmVsX3BhcnRpYWxfdXBkYXRlID0KLQkJ CWh3ZWlnaHRfbG9uZyhwYXJhbXMtPmFmZmVjdGVkX2Rpc3BsYXlzKSA9PSAxOwotCi0JZHNjX2Nv bW1vbl9tb2RlID0gMDsKLQlpZiAoIWhhbGZfcGFuZWxfcGFydGlhbF91cGRhdGUpCi0JCWRzY19j b21tb25fbW9kZSB8PSBEU0NfTU9ERV9TUExJVF9QQU5FTDsKLQlpZiAoZW5jX21hc3Rlci0+aW50 Zl9tb2RlID09IElOVEZfTU9ERV9WSURFTykKLQkJZHNjX2NvbW1vbl9tb2RlIHw9IERTQ19NT0RF X1ZJREVPOwotCi0JbWVtY3B5KCZkc2NbMF0sICZkcHVfZW5jLT5tb2RlX2luZm8uY29tcF9pbmZv LmRzY19pbmZvLCBzaXplb2YoZHNjWzBdKSk7Ci0JbWVtY3B5KCZkc2NbMV0sICZkcHVfZW5jLT5t b2RlX2luZm8uY29tcF9pbmZvLmRzY19pbmZvLCBzaXplb2YoZHNjWzFdKSk7CiAKLQkvKgotCSAq IFNpbmNlIGJvdGggRFNDIHVzZSBzYW1lIHBpYyBkaW1lbnNpb24sIHNldCBzYW1lIHBpYyBkaW1l bnNpb24KLQkgKiB0byBib3RoIERTQyBzdHJ1Y3R1cmVzLgotCSAqLwotCV9kcHVfZW5jb2Rlcl9k c2NfdXBkYXRlX3BpY19kaW0oJmRzY1swXSwgcm9pLT53LCByb2ktPmgpOwotCV9kcHVfZW5jb2Rl cl9kc2NfdXBkYXRlX3BpY19kaW0oJmRzY1sxXSwgcm9pLT53LCByb2ktPmgpOwotCi0JdGhpc19m cmFtZV9zbGljZXMgPSByb2ktPncgLyBkc2NbMF0uc2xpY2Vfd2lkdGg7Ci0JaW50Zl9pcF93ID0g dGhpc19mcmFtZV9zbGljZXMgKiBkc2NbMF0uc2xpY2Vfd2lkdGg7Ci0KLQlpZiAoIWhhbGZfcGFu ZWxfcGFydGlhbF91cGRhdGUpCi0JCWludGZfaXBfdyAvPSAyOworCXRoaXNfZnJhbWVfc2xpY2Vz ID0gZHNjLT5waWNfd2lkdGggLyBkc2MtPnNsaWNlX3dpZHRoOworCWludGZfaXBfdyA9IHRoaXNf ZnJhbWVfc2xpY2VzICogZHNjLT5zbGljZV93aWR0aDsKIAotCS8qCi0JICogSW4gdGhpcyB0b3Bv bG9neSB3aGVuIGJvdGggaW50ZXJmYWNlcyBhcmUgYWN0aXZlLCB0aGV5IGhhdmUgc2FtZQotCSAq IGxvYWQgc28gaW50Zl9pcF93IHdpbGwgYmUgc2FtZS4KLQkgKi8KLQlfZHB1X2VuY29kZXJfZHNj X3BjbGtfcGFyYW1fY2FsYygmZHNjWzBdLCBpbnRmX2lwX3cpOwotCV9kcHVfZW5jb2Rlcl9kc2Nf cGNsa19wYXJhbV9jYWxjKCZkc2NbMV0sIGludGZfaXBfdyk7CisJaW50Zl9pcF93IC89IDI7CisJ X2RwdV9lbmNvZGVyX2RzY19wY2xrX3BhcmFtX2NhbGMoZHNjLCBpbnRmX2lwX3cpOwogCi0JLyoK LQkgKiBJbiB0aGlzIHRvcG9sb2d5LCBzaW5jZSB0aGVyZSBpcyBubyBkc2NfbWVyZ2UsIHVuY29t cHJlc3NlZCBpbnB1dAotCSAqIHRvIGVuY29kZXIgYW5kIGludGVyZmFjZSBpcyBzYW1lLgotCSAq LwogCWVuY19pcF93ID0gaW50Zl9pcF93OwotCV9kcHVfZW5jb2Rlcl9kc2NfaW5pdGlhbF9saW5l X2NhbGMoJmRzY1swXSwgZW5jX2lwX3cpOwotCV9kcHVfZW5jb2Rlcl9kc2NfaW5pdGlhbF9saW5l X2NhbGMoJmRzY1sxXSwgZW5jX2lwX3cpOworCV9kcHVfZW5jb2Rlcl9kc2NfaW5pdGlhbF9saW5l X2NhbGMoZHNjLCBlbmNfaXBfdyk7CiAKLQkvKgotCSAqIF9faXNfaWNoX3Jlc2V0X292ZXJyaWRl X25lZWRlZCBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIKLQkgKiB1cGRhdGluZyBwaWMgZGlt ZW5zaW9uLCBtZHNzX3BhbmVsX2RzY191cGRhdGVfcGljX2RpbS4KLQkgKi8KLQlpY2hfcmVzID0g X2RwdV9lbmNvZGVyX2RzY19pY2hfcmVzZXRfb3ZlcnJpZGVfbmVlZGVkKAotCQkJaGFsZl9wYW5l bF9wYXJ0aWFsX3VwZGF0ZSwgJmRzY1swXSk7CisJaWNoX3JlcyA9IF9kcHVfZW5jb2Rlcl9kc2Nf aWNoX3Jlc2V0X292ZXJyaWRlX25lZWRlZChmYWxzZSwgZHNjKTsKIAotCURQVV9ERUJVR19FTkMo ZHB1X2VuYywgInBpY193OiAlZCBwaWNfaDogJWQgbW9kZTolZFxuIiwKLQkJCXJvaS0+dywgcm9p LT5oLCBkc2NfY29tbW9uX21vZGUpOworCWRzY19jb21tb25fbW9kZSA9IERTQ19NT0RFX1NQTElU X1BBTkVMOworCWlmIChlbmNfbWFzdGVyLT5pbnRmX21vZGUgPT0gSU5URl9NT0RFX1ZJREVPKQor CQlkc2NfY29tbW9uX21vZGUgfD0gRFNDX01PREVfVklERU87CiAKLQlmb3IgKGkgPSAwOyBpIDwg ZHB1X2VuYy0+bnVtX3BoeXNfZW5jczsgaSsrKSB7Ci0JCWJvb2wgYWN0aXZlID0gISEoKDEgPDwg aSkgJiBwYXJhbXMtPmFmZmVjdGVkX2Rpc3BsYXlzKTsKKwlEUFVfREVCVUdfRU5DKGRwdV9lbmMs ICJwaWNfdzogJWQgcGljX2g6ICVkIG1vZGU6JWRcbiIsCisJCWRzYy0+cGljX3dpZHRoLCBkc2Mt PnBpY19oZWlnaHQsIGRzY19jb21tb25fbW9kZSk7CisJRFBVX0VWVDMyKERSTUlEKCZkcHVfZW5j LT5iYXNlKSwgZHNjLT5waWNfd2lkdGgsIGRzYy0+cGljX2hlaWdodCwKKwkJCWRzY19jb21tb25f bW9kZSk7CiAKLQkJRFBVX0VWVDMyKERSTUlEKCZkcHVfZW5jLT5iYXNlKSwgcm9pLT53LCByb2kt PmgsCi0JCQkJZHNjX2NvbW1vbl9tb2RlLCBpLCBhY3RpdmUpOwotCQlfZHB1X2VuY29kZXJfZHNj X3BpcGVfY2ZnKGh3X2RzY1tpXSwgaHdfcHBbaV0sICZkc2NbaV0sCi0JCQkJZHNjX2NvbW1vbl9t b2RlLCBpY2hfcmVzLCBhY3RpdmUpOwotCX0KKwlfZHB1X2VuY29kZXJfZHNjX3BpcGVfY2ZnKGxf aHdfZHNjLCBsX2h3X3BwLCBkc2MsIGRzY19jb21tb25fbW9kZSwKKwkJCWljaF9yZXMpOworCV9k cHVfZW5jb2Rlcl9kc2NfcGlwZV9jZmcocl9od19kc2MsIHJfaHdfcHAsIGRzYywgZHNjX2NvbW1v bl9tb2RlLAorCQkJaWNoX3Jlcyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfZHB1 X2VuY29kZXJfZHNjXzJfbG1fMl9lbmNfMV9pbnRmKHN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpk cHVfZW5jLAotCQlzdHJ1Y3QgZHB1X2VuY29kZXJfa2lja29mZl9wYXJhbXMgKnBhcmFtcykKK3N0 YXRpYyBpbnQgX2RwdV9lbmNvZGVyX2RzY18yX2xtXzJfZW5jXzFfaW50ZihzdHJ1Y3QgZHB1X2Vu Y29kZXJfdmlydCAqZHB1X2VuYykKIHsKIAlpbnQgdGhpc19mcmFtZV9zbGljZXM7CiAJaW50IGlu dGZfaXBfdywgZW5jX2lwX3c7CiAJaW50IGljaF9yZXMsIGRzY19jb21tb25fbW9kZTsKKwlpbnQg cmMgPSAwOwogCiAJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMgKmVuY19tYXN0ZXIgPSBkcHVfZW5j LT5jdXJfbWFzdGVyOwotCWNvbnN0IHN0cnVjdCBkcHVfcmVjdCAqcm9pID0gJmRwdV9lbmMtPmN1 cl9jb25uX3JvaTsKLQlzdHJ1Y3QgZHB1X2h3X2RzYyAqaHdfZHNjW01BWF9DSEFOTkVMU19QRVJf RU5DXTsKLQlzdHJ1Y3QgZHB1X2h3X3Bpbmdwb25nICpod19wcFtNQVhfQ0hBTk5FTFNfUEVSX0VO Q107CisJc3RydWN0IGRwdV9od19kc2MgKmxfaHdfZHNjID0gZHB1X2VuYy0+aHdfZHNjWzBdOwor CXN0cnVjdCBkcHVfaHdfZHNjICpyX2h3X2RzYyA9IGRwdV9lbmMtPmh3X2RzY1sxXTsKKwlzdHJ1 Y3QgZHB1X2h3X3Bpbmdwb25nICpsX2h3X3BwID0gZHB1X2VuYy0+aHdfcHBbMF07CisJc3RydWN0 IGRwdV9od19waW5ncG9uZyAqcl9od19wcCA9IGRwdV9lbmMtPmh3X3BwWzFdOwogCXN0cnVjdCBt c21fZGlzcGxheV9kc2NfaW5mbyAqZHNjID0KIAkJJmRwdV9lbmMtPm1vZGVfaW5mby5jb21wX2lu Zm8uZHNjX2luZm87Ci0JYm9vbCBoYWxmX3BhbmVsX3BhcnRpYWxfdXBkYXRlOwotCWludCBpOwot Ci0JZm9yIChpID0gMDsgaSA8IE1BWF9DSEFOTkVMU19QRVJfRU5DOyBpKyspIHsKLQkJaHdfcHBb aV0gPSBkcHVfZW5jLT5od19wcFtpXTsKLQkJaHdfZHNjW2ldID0gZHB1X2VuYy0+aHdfZHNjW2ld OwogCi0JCWlmICghaHdfcHBbaV0gfHwgIWh3X2RzY1tpXSkgewotCQkJRFBVX0VSUk9SX0VOQyhk cHVfZW5jLCAiaW52YWxpZCBwYXJhbXMgZm9yIERTQ1xuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsK LQkJfQorCXJjID0gX2RwdV9lbmNvZGVyX2RzY191cGRhdGVfcGljX2RpbShkc2MsIGRzYy0+cGlj X3dpZHRoLAorCQkJZHNjLT5waWNfaGVpZ2h0KTsKKwlpZiAocmMpIHsKKwkJRFBVX0VSUk9SX0VO QyhkcHVfZW5jLCAiZmFpbGVkIHRvIHVwZGF0ZSBEU0MgcGljIGRpbVxuIik7CisJCXJldHVybiBy YzsKIAl9CiAKLQloYWxmX3BhbmVsX3BhcnRpYWxfdXBkYXRlID0KLQkJCWh3ZWlnaHRfbG9uZyhw YXJhbXMtPmFmZmVjdGVkX2Rpc3BsYXlzKSA9PSAxOwotCi0JZHNjX2NvbW1vbl9tb2RlID0gMDsK LQlpZiAoIWhhbGZfcGFuZWxfcGFydGlhbF91cGRhdGUpCi0JCWRzY19jb21tb25fbW9kZSB8PSBE U0NfTU9ERV9TUExJVF9QQU5FTCB8IERTQ19NT0RFX01VTFRJUExFWDsKLQlpZiAoZW5jX21hc3Rl ci0+aW50Zl9tb2RlID09IElOVEZfTU9ERV9WSURFTykKLQkJZHNjX2NvbW1vbl9tb2RlIHw9IERT Q19NT0RFX1ZJREVPOwotCi0JX2RwdV9lbmNvZGVyX2RzY191cGRhdGVfcGljX2RpbShkc2MsIHJv aS0+dywgcm9pLT5oKTsKLQotCXRoaXNfZnJhbWVfc2xpY2VzID0gcm9pLT53IC8gZHNjLT5zbGlj ZV93aWR0aDsKKwl0aGlzX2ZyYW1lX3NsaWNlcyA9IGRzYy0+cGljX3dpZHRoIC8gZHNjLT5zbGlj ZV93aWR0aDsKIAlpbnRmX2lwX3cgPSB0aGlzX2ZyYW1lX3NsaWNlcyAqIGRzYy0+c2xpY2Vfd2lk dGg7CiAJX2RwdV9lbmNvZGVyX2RzY19wY2xrX3BhcmFtX2NhbGMoZHNjLCBpbnRmX2lwX3cpOwog CiAJLyoKLQkgKiBkc2MgbWVyZ2UgY2FzZTogd2hlbiB1c2luZyAyIGVuY29kZXJzIGZvciB0aGUg c2FtZSBzdHJlYW0sCi0JICogbm8uIG9mIHNsaWNlcyBuZWVkIHRvIGJlIHNhbWUgb24gYm90aCB0 aGUgZW5jb2RlcnMuCisJICogd2hlbiB1c2luZyAyIGVuY29kZXJzIGZvciB0aGUgc2FtZSBzdHJl YW0sIG5vLiBvZiBzbGljZXMKKwkgKiBuZWVkIHRvIGJlIHNhbWUgb24gYm90aCB0aGUgZW5jb2Rl cnMuCiAJICovCiAJZW5jX2lwX3cgPSBpbnRmX2lwX3cgLyAyOwogCV9kcHVfZW5jb2Rlcl9kc2Nf aW5pdGlhbF9saW5lX2NhbGMoZHNjLCBlbmNfaXBfdyk7CiAKLQlpY2hfcmVzID0gX2RwdV9lbmNv ZGVyX2RzY19pY2hfcmVzZXRfb3ZlcnJpZGVfbmVlZGVkKAotCQkJaGFsZl9wYW5lbF9wYXJ0aWFs X3VwZGF0ZSwgZHNjKTsKLQotCURQVV9ERUJVR19FTkMoZHB1X2VuYywgInBpY193OiAlZCBwaWNf aDogJWQgbW9kZTolZFxuIiwKLQkJCXJvaS0+dywgcm9pLT5oLCBkc2NfY29tbW9uX21vZGUpOwot CURQVV9FVlQzMihEUk1JRCgmZHB1X2VuYy0+YmFzZSksIHJvaS0+dywgcm9pLT5oLAotCQkJZHNj X2NvbW1vbl9tb2RlLCBpLCBwYXJhbXMtPmFmZmVjdGVkX2Rpc3BsYXlzKTsKLQotCV9kcHVfZW5j b2Rlcl9kc2NfcGlwZV9jZmcoaHdfZHNjWzBdLCBod19wcFswXSwgZHNjLCBkc2NfY29tbW9uX21v ZGUsCi0JCQlpY2hfcmVzLCB0cnVlKTsKLQlfZHB1X2VuY29kZXJfZHNjX3BpcGVfY2ZnKGh3X2Rz Y1sxXSwgaHdfcHBbMV0sIGRzYywgZHNjX2NvbW1vbl9tb2RlLAotCQkJaWNoX3JlcywgIWhhbGZf cGFuZWxfcGFydGlhbF91cGRhdGUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX2Rw dV9lbmNvZGVyX3VwZGF0ZV9yb2koc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jKQotewotCXN0 cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jOwotCXN0cnVjdCBkcm1fY29ubmVjdG9yICpk cm1fY29ubjsKLQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqX21vZGU7Ci0Jc3RydWN0IGRw dV9yZWN0IHJvaTsKLQotCWlmICghZHJtX2VuYyB8fCAhZHJtX2VuYy0+Y3J0YyB8fCAhZHJtX2Vu Yy0+Y3J0Yy0+c3RhdGUpCi0JCXJldHVybiAtRUlOVkFMOwotCWRwdV9lbmMgPSB0b19kcHVfZW5j b2Rlcl92aXJ0KGRybV9lbmMpOwotCi0JaWYgKCFkcHVfZW5jLT5jdXJfbWFzdGVyKQotCQlyZXR1 cm4gLUVJTlZBTDsKKwlpY2hfcmVzID0gX2RwdV9lbmNvZGVyX2RzY19pY2hfcmVzZXRfb3ZlcnJp ZGVfbmVlZGVkKGZhbHNlLCBkc2MpOwogCi0JYWRqX21vZGUgPSAmZHB1X2VuYy0+YmFzZS5jcnRj LT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZTsKLQlkcm1fY29ubiA9IGRwdV9lbmMtPmN1cl9tYXN0ZXIt PmNvbm5lY3RvcjsKKwlkc2NfY29tbW9uX21vZGUgPSBEU0NfTU9ERV9NVUxUSVBMRVggfCBEU0Nf TU9ERV9TUExJVF9QQU5FTDsKKwlpZiAoZW5jX21hc3Rlci0+aW50Zl9tb2RlID09IElOVEZfTU9E RV9WSURFTykKKwkJZHNjX2NvbW1vbl9tb2RlIHw9IERTQ19NT0RFX1ZJREVPOwogCi0JX2RwdV9l bmNvZGVyX2dldF9jb25uZWN0b3Jfcm9pKGRwdV9lbmMsICZyb2kpOwotCWlmIChkcHVfa21zX3Jl Y3RfaXNfbnVsbCgmcm9pKSkgewotCQlyb2kudyA9IGFkal9tb2RlLT5oZGlzcGxheTsKLQkJcm9p LmggPSBhZGpfbW9kZS0+dmRpc3BsYXk7Ci0JfQorCURQVV9ERUJVR19FTkMoZHB1X2VuYywgInBp Y193OiAlZCBwaWNfaDogJWQgbW9kZTolZFxuIiwKKwkJZHNjLT5waWNfd2lkdGgsIGRzYy0+cGlj X2hlaWdodCwgZHNjX2NvbW1vbl9tb2RlKTsKKwlEUFVfRVZUMzIoRFJNSUQoJmRwdV9lbmMtPmJh c2UpLCBkc2MtPnBpY193aWR0aCwgZHNjLT5waWNfaGVpZ2h0LAorCQkJZHNjX2NvbW1vbl9tb2Rl KTsKIAotCW1lbWNweSgmZHB1X2VuYy0+cHJ2X2Nvbm5fcm9pLCAmZHB1X2VuYy0+Y3VyX2Nvbm5f cm9pLAotCQkJc2l6ZW9mKGRwdV9lbmMtPnBydl9jb25uX3JvaSkpOwotCW1lbWNweSgmZHB1X2Vu Yy0+Y3VyX2Nvbm5fcm9pLCAmcm9pLCBzaXplb2YoZHB1X2VuYy0+Y3VyX2Nvbm5fcm9pKSk7CisJ X2RwdV9lbmNvZGVyX2RzY19waXBlX2NmZyhsX2h3X2RzYywgbF9od19wcCwgZHNjLCBkc2NfY29t bW9uX21vZGUsCisJCQlpY2hfcmVzKTsKKwlfZHB1X2VuY29kZXJfZHNjX3BpcGVfY2ZnKHJfaHdf ZHNjLCByX2h3X3BwLCBkc2MsIGRzY19jb21tb25fbW9kZSwKKwkJCWljaF9yZXMpOwogCiAJcmV0 dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX2RwdV9lbmNvZGVyX2RzY19zZXR1cChzdHJ1Y3QgZHB1 X2VuY29kZXJfdmlydCAqZHB1X2VuYywKLQkJc3RydWN0IGRwdV9lbmNvZGVyX2tpY2tvZmZfcGFy YW1zICpwYXJhbXMpCitzdGF0aWMgaW50IF9kcHVfZW5jb2Rlcl9kc2Nfc2V0dXAoc3RydWN0IGRw dV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMpCiB7CiAJZW51bSBkcHVfcm1fdG9wb2xvZ3lfbmFtZSB0 b3BvbG9neTsKIAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqZHJtX2Nvbm47CiAJaW50IHJldCA9IDA7 CiAKLQlpZiAoIWRwdV9lbmMgfHwgIXBhcmFtcyB8fCAhZHB1X2VuYy0+cGh5c19lbmNzWzBdIHx8 Ci0JCQkhZHB1X2VuYy0+cGh5c19lbmNzWzBdLT5jb25uZWN0b3IpCisJaWYgKCFkcHVfZW5jKQog CQlyZXR1cm4gLUVJTlZBTDsKIAogCWRybV9jb25uID0gZHB1X2VuYy0+cGh5c19lbmNzWzBdLT5j b25uZWN0b3I7CkBAIC0xMTUzLDIwICsxMDQ1LDE2IEBAIHN0YXRpYyBpbnQgX2RwdV9lbmNvZGVy X2RzY19zZXR1cChzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYywKIAlEUFVfREVCVUdf RU5DKGRwdV9lbmMsICJ0b3BvbG9neTolZFxuIiwgdG9wb2xvZ3kpOwogCURQVV9FVlQzMihEUk1J RCgmZHB1X2VuYy0+YmFzZSkpOwogCi0JaWYgKGRwdV9rbXNfcmVjdF9pc19lcXVhbCgmZHB1X2Vu Yy0+Y3VyX2Nvbm5fcm9pLAotCQkJJmRwdV9lbmMtPnBydl9jb25uX3JvaSkpCi0JCXJldHVybiBy ZXQ7Ci0KIAlzd2l0Y2ggKHRvcG9sb2d5KSB7CiAJY2FzZSBEUFVfUk1fVE9QT0xPR1lfU0lOR0xF UElQRV9EU0M6CiAJY2FzZSBEUFVfUk1fVE9QT0xPR1lfRFVBTFBJUEVfM0RNRVJHRV9EU0M6CiAJ CXJldCA9IF9kcHVfZW5jb2Rlcl9kc2Nfbl9sbV8xX2VuY18xX2ludGYoZHB1X2VuYyk7CiAJCWJy ZWFrOwogCWNhc2UgRFBVX1JNX1RPUE9MT0dZX0RVQUxQSVBFX0RTQ01FUkdFOgotCQlyZXQgPSBf ZHB1X2VuY29kZXJfZHNjXzJfbG1fMl9lbmNfMV9pbnRmKGRwdV9lbmMsIHBhcmFtcyk7CisJCXJl dCA9IF9kcHVfZW5jb2Rlcl9kc2NfMl9sbV8yX2VuY18xX2ludGYoZHB1X2VuYyk7CiAJCWJyZWFr OwogCWNhc2UgRFBVX1JNX1RPUE9MT0dZX0RVQUxQSVBFX0RTQzoKLQkJcmV0ID0gX2RwdV9lbmNv ZGVyX2RzY18yX2xtXzJfZW5jXzJfaW50ZihkcHVfZW5jLCBwYXJhbXMpOworCQlyZXQgPSBfZHB1 X2VuY29kZXJfZHNjXzJfbG1fMl9lbmNfMl9pbnRmKGRwdV9lbmMpOwogCQlicmVhazsKIAlkZWZh dWx0OgogCQlEUFVfRVJST1JfRU5DKGRwdV9lbmMsICJObyBEU0Mgc3VwcG9ydCBmb3IgdG9wb2xv Z3kgJWQiLApAQCAtMTQyOSw3ICsxMzE3LDggQEAgc3RhdGljIGludCBfZHB1X2VuY29kZXJfdXBk YXRlX3JzY19jbGllbnQoCiAJfQogCiAJaWYgKGNydGMtPmJhc2UuaWQgIT0gd2FpdF92Ymxhbmtf Y3J0Y19pZCkgewotCQlwcmltYXJ5X2NydGMgPSBkcm1fY3J0Y19maW5kKGRybV9lbmMtPmRldiwg TlVMTCwgd2FpdF92YmxhbmtfY3J0Y19pZCk7CisJCXByaW1hcnlfY3J0YyA9IGRybV9jcnRjX2Zp bmQoZHJtX2VuYy0+ZGV2LCBOVUxMLAorCQkJCXdhaXRfdmJsYW5rX2NydGNfaWQpOwogCQlpZiAo IXByaW1hcnlfY3J0YykgewogCQkJRFBVX0VSUk9SX0VOQyhkcHVfZW5jLAogCQkJCQkiZmFpbGVk IHRvIGZpbmQgcHJpbWFyeSBjcnRjIGlkICVkXG4iLApAQCAtMjA3Myw5ICsxOTYyLDYgQEAgc3Rh dGljIHZvaWQgX2RwdV9lbmNvZGVyX3ZpcnRfZW5hYmxlX2hlbHBlcihzdHJ1Y3QgZHJtX2VuY29k ZXIgKmRybV9lbmMpCiAJCQkJZHB1X2ttcy0+Y2F0YWxvZyk7CiAKIAlfZHB1X2VuY29kZXJfdXBk YXRlX3ZzeW5jX3NvdXJjZShkcHVfZW5jLCAmZHB1X2VuYy0+ZGlzcF9pbmZvLCBmYWxzZSk7Ci0K LQltZW1zZXQoJmRwdV9lbmMtPnBydl9jb25uX3JvaSwgMCwgc2l6ZW9mKGRwdV9lbmMtPnBydl9j b25uX3JvaSkpOwotCW1lbXNldCgmZHB1X2VuYy0+Y3VyX2Nvbm5fcm9pLCAwLCBzaXplb2YoZHB1 X2VuYy0+Y3VyX2Nvbm5fcm9pKSk7CiB9CiAKIHZvaWQgZHB1X2VuY29kZXJfdmlydF9yZXN0b3Jl KHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYykKQEAgLTI5NDUsNyArMjgzMSw4IEBAIHN0YXRp YyBpbnQgX2RwdV9lbmNvZGVyX3dha2V1cF90aW1lKHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2Vu YywKIAogc3RhdGljIHZvaWQgZHB1X2VuY29kZXJfdnN5bmNfZXZlbnRfaGFuZGxlcihzdHJ1Y3Qg dGltZXJfbGlzdCAqdCkKIHsKLQlzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYyA9IGZy b21fdGltZXIoZHB1X2VuYywgdCwgdnN5bmNfZXZlbnRfdGltZXIpOworCXN0cnVjdCBkcHVfZW5j b2Rlcl92aXJ0ICpkcHVfZW5jID0gZnJvbV90aW1lcihkcHVfZW5jLCB0LAorCQkJdnN5bmNfZXZl bnRfdGltZXIpOwogCXN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYyA9ICZkcHVfZW5jLT5iYXNl OwogCXN0cnVjdCBtc21fZHJtX3ByaXZhdGUgKnByaXY7CiAJc3RydWN0IG1zbV9kcm1fdGhyZWFk ICpldmVudF90aHJlYWQ7CkBAIC0zMDUzLDggKzI5NDAsNiBAQCB2b2lkIGRwdV9lbmNvZGVyX3By ZXBhcmVfZm9yX2tpY2tvZmYoc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jLAogCiAJX2RwdV9l bmNvZGVyX3VwZGF0ZV9tYXN0ZXIoZHJtX2VuYywgcGFyYW1zKTsKIAotCV9kcHVfZW5jb2Rlcl91 cGRhdGVfcm9pKGRybV9lbmMpOwotCiAJaWYgKGRwdV9lbmMtPmN1cl9tYXN0ZXIgJiYgZHB1X2Vu Yy0+Y3VyX21hc3Rlci0+Y29ubmVjdG9yKSB7CiAJCXJjID0gZHB1X2Nvbm5lY3Rvcl9wcmVfa2lj a29mZihkcHVfZW5jLT5jdXJfbWFzdGVyLT5jb25uZWN0b3IpOwogCQlpZiAocmMpCkBAIC0zMDY0 LDcgKzI5NDksNyBAQCB2b2lkIGRwdV9lbmNvZGVyX3ByZXBhcmVfZm9yX2tpY2tvZmYoc3RydWN0 IGRybV9lbmNvZGVyICpkcm1fZW5jLAogCX0KIAogCWlmIChkcHVfZW5jb2Rlcl9pc19kc2NfZW5h YmxlZChkcm1fZW5jKSkgewotCQlyYyA9IF9kcHVfZW5jb2Rlcl9kc2Nfc2V0dXAoZHB1X2VuYywg cGFyYW1zKTsKKwkJcmMgPSBfZHB1X2VuY29kZXJfZHNjX3NldHVwKGRwdV9lbmMpOwogCQlpZiAo cmMpCiAJCQlEUFVfRVJST1JfRU5DKGRwdV9lbmMsICJmYWlsZWQgdG8gc2V0dXAgRFNDOiAlZFxu IiwgcmMpOwogCX0KQEAgLTM2NTQsNyArMzUzOSw4IEBAIHN0YXRpYyBpbnQgZHB1X2VuY29kZXJf c2V0dXBfZGlzcGxheShzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYywKIAogc3RhdGlj IHZvaWQgZHB1X2VuY29kZXJfZnJhbWVfZG9uZV90aW1lb3V0KHN0cnVjdCB0aW1lcl9saXN0ICp0 KQogewotCXN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jID0gZnJvbV90aW1lcihkcHVf ZW5jLCB0LCBmcmFtZV9kb25lX3RpbWVyKTsKKwlzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1 X2VuYyA9IGZyb21fdGltZXIoZHB1X2VuYywgdCwKKwkJCWZyYW1lX2RvbmVfdGltZXIpOwogCXN0 cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYyA9ICZkcHVfZW5jLT5iYXNlOwogCXN0cnVjdCBtc21f ZHJtX3ByaXZhdGUgKnByaXY7CiAJdTMyIGV2ZW50OwpAQCAtMzcyNiw3ICszNjEyLDggQEAgc3Ry dWN0IGRybV9lbmNvZGVyICpkcHVfZW5jb2Rlcl9pbml0KAogCWRybV9lbmNvZGVyX2hlbHBlcl9h ZGQoZHJtX2VuYywgJmRwdV9lbmNvZGVyX2hlbHBlcl9mdW5jcyk7CiAKIAlhdG9taWNfc2V0KCZk cHVfZW5jLT5mcmFtZV9kb25lX3RpbWVvdXQsIDApOwotCXRpbWVyX3NldHVwKCZkcHVfZW5jLT5m cmFtZV9kb25lX3RpbWVyLCBkcHVfZW5jb2Rlcl9mcmFtZV9kb25lX3RpbWVvdXQsIDApOworCXRp bWVyX3NldHVwKCZkcHVfZW5jLT5mcmFtZV9kb25lX3RpbWVyLAorCQkJZHB1X2VuY29kZXJfZnJh bWVfZG9uZV90aW1lb3V0LCAwKTsKIAogCWlmICgoZGlzcF9pbmZvLT5pbnRmX3R5cGUgPT0gRFJN X01PREVfQ09OTkVDVE9SX0RTSSkgJiYKIAkJCWRpc3BfaW5mby0+aXNfcHJpbWFyeSkKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nLmMgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY2F0YWxvZy5jCmluZGV4IDI4OWI5 ZmYuLmJhZGU3MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9od19jYXRhbG9nLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3 X2NhdGFsb2cuYwpAQCAtMjAxMyw2ICsyMDEzLDcgQEAgc3RhdGljIGludCBkcHVfZHNwcF9wYXJz ZV9kdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCWlmIChyYykKIAkJZ290byBlbmQ7CiAKKyNp ZmRlZiBDT05GSUdfRFBVX0FENAogCS8qIFBhcnNlIEFEIGR0c2kgZW50cmllcyAqLwogCWFkX3By b3BfdmFsdWUgPSBrY2FsbG9jKEFEX1BST1BfTUFYLAogCQkJc2l6ZW9mKHN0cnVjdCBkcHVfcHJv cF92YWx1ZSksIEdGUF9LRVJORUwpOwpAQCAtMjAyOCw2ICsyMDI5LDcgQEAgc3RhdGljIGludCBk cHVfZHNwcF9wYXJzZV9kdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCQlhZF9wcm9wX2V4aXN0 cywgYWRfcHJvcF92YWx1ZSk7CiAJaWYgKHJjKQogCQlnb3RvIGVuZDsKKyNlbmRpZgogCiAJLyog Z2V0IERTUFAgZmVhdHVyZSBkdCBwcm9wZXJ0aWVzIGlmIHRoZXkgZXhpc3QgKi8KIAlzbnAgPSBv Zl9nZXRfY2hpbGRfYnlfbmFtZShucCwgZHNwcF9wcm9wW0RTUFBfQkxPQ0tTXS5wcm9wX25hbWUp OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5oIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5oCmluZGV4IDYyZTdjNWMuLmQx MWZiMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9rbXMu aAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zLmgKQEAgLTQ1NCwx NCArNDU0LDYgQEAgdm9pZCBkcHVfa21zX3JlY3RfaW50ZXJzZWN0KGNvbnN0IHN0cnVjdCBkcHVf cmVjdCAqcjEsCiAJCXN0cnVjdCBkcHVfcmVjdCAqcmVzdWx0KTsKIAogLyoqCi0gKiBkcHVfa21z X3JlY3RfbWVyZ2VfcmVjdGFuZ2xlcyAtIG1lcmdlIGEgcmVjdGFuZ2xlIGxpc3QgaW50byBvbmUg cmVjdAotICogQHJvaXM6IHBvaW50ZXIgdG8gdGhlIGxpc3Qgb2Ygcm9pcwotICogQHJlc3VsdDog b3V0cHV0IHJlY3RhbmdsZSwgYWxsIDAgb24gZXJyb3IKLSAqLwotdm9pZCBkcHVfa21zX3JlY3Rf bWVyZ2VfcmVjdGFuZ2xlcyhjb25zdCBzdHJ1Y3QgbXNtX3JvaV9saXN0ICpyb2lzLAotCQlzdHJ1 Y3QgZHB1X3JlY3QgKnJlc3VsdCk7Ci0KLS8qKgogICogZHB1X2ttc19yZWN0X2lzX2VxdWFsIC0g Y29tcGFyZXMgdHdvIHJlY3RzCiAgKiBAcjE6IHJlY3QgdmFsdWUgdG8gY29tcGFyZQogICogQHIy OiByZWN0IHZhbHVlIHRvIGNvbXBhcmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9rbXNfdXRpbHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9rbXNfdXRpbHMuYwppbmRleCAwMDZkN2FkLi40MGUwMTYyIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zX3V0aWxzLmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttc191dGlscy5jCkBAIC0xNzYsNDUgKzE3NiwzIEBA IHZvaWQgZHB1X2ttc19yZWN0X2ludGVyc2VjdChjb25zdCBzdHJ1Y3QgZHB1X3JlY3QgKnIxLAog CX0KIH0KIAotdm9pZCBkcHVfa21zX3JlY3RfbWVyZ2VfcmVjdGFuZ2xlcyhjb25zdCBzdHJ1Y3Qg bXNtX3JvaV9saXN0ICpyb2lzLAotCQlzdHJ1Y3QgZHB1X3JlY3QgKnJlc3VsdCkKLXsKLQlzdHJ1 Y3QgZHJtX2NsaXBfcmVjdCBjbGlwOwotCWNvbnN0IHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpyb2lf cmVjdDsKLQlpbnQgaTsKLQotCWlmICghcm9pcyB8fCAhcmVzdWx0KQotCQlyZXR1cm47Ci0KLQlt ZW1zZXQocmVzdWx0LCAwLCBzaXplb2YoKnJlc3VsdCkpOwotCi0JLyogaW5pdCB0byBpbnZhbGlk IHJhbmdlIG1heGVzICovCi0JY2xpcC54MSA9IH4wOwotCWNsaXAueTEgPSB+MDsKLQljbGlwLngy ID0gMDsKLQljbGlwLnkyID0gMDsKLQotCS8qIGFnZ3JlZ2F0ZSBhbGwgY2xpcHBpbmcgcmVjdGFu Z2xlcyB0b2dldGhlciBmb3Igb3ZlcmFsbCByb2kgKi8KLQlmb3IgKGkgPSAwOyBpIDwgcm9pcy0+ bnVtX3JlY3RzOyBpKyspIHsKLQkJcm9pX3JlY3QgPSAmcm9pcy0+cm9pW2ldOwotCi0JCWNsaXAu eDEgPSBtaW4oY2xpcC54MSwgcm9pX3JlY3QtPngxKTsKLQkJY2xpcC55MSA9IG1pbihjbGlwLnkx LCByb2lfcmVjdC0+eTEpOwotCQljbGlwLngyID0gbWF4KGNsaXAueDIsIHJvaV9yZWN0LT54Mik7 Ci0JCWNsaXAueTIgPSBtYXgoY2xpcC55Miwgcm9pX3JlY3QtPnkyKTsKLQotCQlEUFVfREVCVUco InJvaSVkICglZCwlZCksKCVkLCVkKSAtPiBjcnRjICglZCwlZCksKCVkLCVkKVxuIiwgaSwKLQkJ CQlyb2lfcmVjdC0+eDEsIHJvaV9yZWN0LT55MSwKLQkJCQlyb2lfcmVjdC0+eDIsIHJvaV9yZWN0 LT55MiwKLQkJCQljbGlwLngxLCBjbGlwLnkxLAotCQkJCWNsaXAueDIsIGNsaXAueTIpOwotCX0K LQotCWlmIChjbGlwLngyICAmJiBjbGlwLnkyKSB7Ci0JCXJlc3VsdC0+eCA9IGNsaXAueDE7Ci0J CXJlc3VsdC0+eSA9IGNsaXAueTE7Ci0JCXJlc3VsdC0+dyA9IGNsaXAueDIgLSBjbGlwLngxOwot CQlyZXN1bHQtPmggPSBjbGlwLnkyIC0gY2xpcC55MTsKLQl9Ci19Ci0KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5jIGIvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmMKaW5kZXggODM0ZGNjMC4uOWU5YzlkMiAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmMKQEAgLTMyNDMsNyArMzI0Myw2 IEBAIHN0YXRpYyBpbnQgZHB1X3BsYW5lX3NzcHBfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSwKIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CiAJc3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqZmI7CiAJc3RydWN0IGRwdV9yZWN0IHNyYywgZHN0OwotCWNvbnN0IHN0cnVjdCBkcHVf cmVjdCAqY3J0Y19yb2k7CiAJYm9vbCBxMTZfZGF0YSA9IHRydWU7CiAJaW50IGlkeDsKIApAQCAt MzM1NywxMSArMzM1Niw2IEBAIHN0YXRpYyBpbnQgZHB1X3BsYW5lX3NzcHBfYXRvbWljX3VwZGF0 ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAlfZHB1X3BsYW5lX3NzcHBfYXRvbWljX2NoZWNr X21vZGVfY2hhbmdlZChwZHB1LCBzdGF0ZSwKIAkJCQkJCQkJb2xkX3N0YXRlKTsKIAotCS8qIHJl LXByb2dyYW0gdGhlIG91dHB1dCByZWN0cyBhbHdheXMgaW4gdGhlIGNhc2Ugb2YgcGFydGlhbCB1 cGRhdGUgKi8KLQlkcHVfY3J0Y19nZXRfY3J0Y19yb2koY3J0Yy0+c3RhdGUsICZjcnRjX3JvaSk7 Ci0JaWYgKCFkcHVfa21zX3JlY3RfaXNfbnVsbChjcnRjX3JvaSkpCi0JCXBzdGF0ZS0+ZGlydHkg fD0gRFBVX1BMQU5FX0RJUlRZX1JFQ1RTOwotCiAJaWYgKHBzdGF0ZS0+ZGlydHkgJiBEUFVfUExB TkVfRElSVFlfUkVDVFMpCiAJCW1lbXNldCgmKHBkcHUtPnBpcGVfY2ZnKSwgMCwgc2l6ZW9mKHN0 cnVjdCBkcHVfaHdfcGlwZV9jZmcpKTsKIApAQCAtMzM5OSwxMyArMzM5Myw2IEBAIHN0YXRpYyBp bnQgZHB1X3BsYW5lX3NzcHBfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwK IAkJCXNyYy55ICY9IH4weDE7CiAJCX0KIAotCQkvKgotCQkgKiBhZGp1c3QgbGF5ZXIgbWl4ZXIg cG9zaXRpb24gb2YgdGhlIHNzcHAgaW4gdGhlIHByZXNlbmNlCi0JCSAqIG9mIGEgcGFydGlhbCB1 cGRhdGUgdG8gdGhlIGFjdGl2ZSBsbSBvcmlnaW4KLQkJICovCi0JCWRzdC54IC09IGNydGNfcm9p LT54OwotCQlkc3QueSAtPSBjcnRjX3JvaS0+eTsKLQogCQlwZHB1LT5waXBlX2NmZy5zcmNfcmVj dCA9IHNyYzsKIAkJcGRwdS0+cGlwZV9jZmcuZHN0X3JlY3QgPSBkc3Q7CiAKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21f ZHJ2LmgKaW5kZXggZDhlMDkwZi4uODU3NGYzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L21zbS9tc21fZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKQEAgLTE0 NCw3ICsxNDQsNiBAQCBlbnVtIG1zbV9tZHBfY3J0Y19wcm9wZXJ0eSB7CiAJQ1JUQ19QUk9QX0RS QU1fSUIsCiAJQ1JUQ19QUk9QX1JPVF9QUkVGSUxMX0JXLAogCUNSVENfUFJPUF9ST1RfQ0xLLAot CUNSVENfUFJPUF9ST0lfVjEsCiAJQ1JUQ19QUk9QX0lETEVfVElNRU9VVCwKIAlDUlRDX1BST1Bf REVTVF9TQ0FMRVIsCiAKQEAgLTE2OCw3ICsxNjcsNiBAQCBlbnVtIG1zbV9tZHBfY29ubl9wcm9w ZXJ0eSB7CiAJQ09OTkVDVE9SX1BST1BfRFNUX1ksCiAJQ09OTkVDVE9SX1BST1BfRFNUX1csCiAJ Q09OTkVDVE9SX1BST1BfRFNUX0gsCi0JQ09OTkVDVE9SX1BST1BfUk9JX1YxLAogCUNPTk5FQ1RP Ul9QUk9QX0JMX1NDQUxFLAogCUNPTk5FQ1RPUl9QUk9QX0FEX0JMX1NDQUxFLAogCkBAIC0yMjgs MzggKzIyNiw2IEBAIGVudW0gbXNtX2V2ZW50X3dhaXQgewogfTsKIAogLyoqCi0gKiBzdHJ1Y3Qg bXNtX3JvaV9hbGlnbm1lbnQgLSByZWdpb24gb2YgaW50ZXJlc3QgYWxpZ25tZW50IHJlc3RyaWN0 aW9ucwotICogQHhzdGFydF9waXhfYWxpZ246IGxlZnQgeCBvZmZzZXQgYWxpZ25tZW50IHJlc3Ry aWN0aW9uCi0gKiBAd2lkdGhfcGl4X2FsaWduOiB3aWR0aCBhbGlnbm1lbnQgcmVzdHJpY3Rpb24K LSAqIEB5c3RhcnRfcGl4X2FsaWduOiB0b3AgeSBvZmZzZXQgYWxpZ25tZW50IHJlc3RyaWN0aW9u Ci0gKiBAaGVpZ2h0X3BpeF9hbGlnbjogaGVpZ2h0IGFsaWdubWVudCByZXN0cmljdGlvbgotICog QG1pbl93aWR0aDogbWluaW11bSB3aWR0aCByZXN0cmljdGlvbgotICogQG1pbl9oZWlnaHQ6IG1p bmltdW0gaGVpZ2h0IHJlc3RyaWN0aW9uCi0gKi8KLXN0cnVjdCBtc21fcm9pX2FsaWdubWVudCB7 Ci0JdWludDMyX3QgeHN0YXJ0X3BpeF9hbGlnbjsKLQl1aW50MzJfdCB3aWR0aF9waXhfYWxpZ247 Ci0JdWludDMyX3QgeXN0YXJ0X3BpeF9hbGlnbjsKLQl1aW50MzJfdCBoZWlnaHRfcGl4X2FsaWdu OwotCXVpbnQzMl90IG1pbl93aWR0aDsKLQl1aW50MzJfdCBtaW5faGVpZ2h0OwotfTsKLQotLyoq Ci0gKiBzdHJ1Y3QgbXNtX3JvaV9jYXBzIC0gZGlzcGxheSdzIHJlZ2lvbiBvZiBpbnRlcmVzdCBj YXBhYmlsaXRpZXMKLSAqIEBlbmFibGVkOiB0cnVlIGlmIHNvbWUgcmVnaW9uIG9mIGludGVyZXN0 IGlzIHN1cHBvcnRlZAotICogQG1lcmdlX3JvaXM6IG1lcmdlIHJvaXMgYmVmb3JlIHNlbmRpbmcg dG8gZGlzcGxheQotICogQG51bV9yb2k6IG1heGltdW0gbnVtYmVyIG9mIHJvaXMgc3VwcG9ydGVk Ci0gKiBAYWxpZ246IHJvaSBhbGlnbm1lbnQgcmVzdHJpY3Rpb25zCi0gKi8KLXN0cnVjdCBtc21f cm9pX2NhcHMgewotCWJvb2wgZW5hYmxlZDsKLQlib29sIG1lcmdlX3JvaXM7Ci0JdWludDMyX3Qg bnVtX3JvaTsKLQlzdHJ1Y3QgbXNtX3JvaV9hbGlnbm1lbnQgYWxpZ247Ci19OwotCi0vKioKICAq IHN0cnVjdCBtc21fZGlzcGxheV9kc2NfaW5mbyAtIGRlZmluZXMgZHNjIGNvbmZpZ3VyYXRpb24K ICAqIEB2ZXJzaW9uOiAgICAgICAgICAgICAgICAgRFNDIHZlcnNpb24uCiAgKiBAc2NyX3Jldjog ICAgICAgICAgICAgICAgIERTQyByZXZpc2lvbi4KQEAgLTQyNyw3ICszOTMsNiBAQCBzdHJ1Y3Qg bXNtX21vZGVfaW5mbyB7CiAgKiBAaXNfcHJpbWFyeTogICAgICAgICBTZXQgdG8gdHJ1ZSBpZiBk aXNwbGF5IGlzIHByaW1hcnkgZGlzcGxheQogICogQGlzX3RlX3VzaW5nX3dhdGNoZG9nX3RpbWVy OiAgQm9vbGVhbiB0byBpbmRpY2F0ZSB3YXRjaGRvZyBURSBpcwogICoJCQkJIHVzZWQgaW5zdGVh ZCBvZiBwYW5lbCBURSBpbiBjbWQgbW9kZSBwYW5lbHMKLSAqIEByb2lfY2FwczogICAgICAgICAg IFJlZ2lvbiBvZiBpbnRlcmVzdCBjYXBhYmlsaXR5IGluZm8KICAqLwogc3RydWN0IG1zbV9kaXNw bGF5X2luZm8gewogCWludCBpbnRmX3R5cGU7CkBAIC00NDYsMjcgKzQxMSw2IEBAIHN0cnVjdCBt c21fZGlzcGxheV9pbmZvIHsKIAogCWJvb2wgaXNfcHJpbWFyeTsKIAlib29sIGlzX3RlX3VzaW5n X3dhdGNoZG9nX3RpbWVyOwotCXN0cnVjdCBtc21fcm9pX2NhcHMgcm9pX2NhcHM7Ci19OwotCi0j ZGVmaW5lIE1TTV9NQVhfUk9JCTQKLQotLyoqCi0gKiBzdHJ1Y3QgbXNtX3JvaV9saXN0IC0gbGlz dCBvZiByZWdpb25zIG9mIGludGVyZXN0IGZvciBhIGRybSBvYmplY3QKLSAqIEBudW1fcmVjdHM6 IG51bWJlciBvZiB2YWxpZCByZWN0YW5nbGVzIGluIHRoZSByb2kgYXJyYXkKLSAqIEByb2k6IGxp c3Qgb2Ygcm9pIHJlY3RhbmdsZXMKLSAqLwotc3RydWN0IG1zbV9yb2lfbGlzdCB7Ci0JdWludDMy X3QgbnVtX3JlY3RzOwotCXN0cnVjdCBkcm1fY2xpcF9yZWN0IHJvaVtNU01fTUFYX1JPSV07Ci19 OwotCi0vKioKLSAqIHN0cnVjdCAtIG1zbV9kaXNwbGF5X2tpY2tvZmZfcGFyYW1zIC0gaW5mbyBm b3IgZGlzcGxheSBmZWF0dXJlcyBhdCBraWNrb2ZmCi0gKiBAcm9pczogUmVnaW9ucyBvZiBpbnRl cmVzdCBzdHJ1Y3R1cmUgZm9yIG1hcHBpbmcgQ1JUQyB0byBDb25uZWN0b3Igb3V0cHV0Ci0gKi8K LXN0cnVjdCBtc21fZGlzcGxheV9raWNrb2ZmX3BhcmFtcyB7Ci0Jc3RydWN0IG1zbV9yb2lfbGlz dCAqcm9pczsKIH07CiAKIC8qKgotLSAKVGhlIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJ bmMuIGlzIGEgbWVtYmVyIG9mIHRoZSBDb2RlIEF1cm9yYSBGb3J1bSwKYSBMaW51eCBGb3VuZGF0 aW9uIENvbGxhYm9yYXRpdmUgUHJvamVjdAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KRnJlZWRyZW5vIG1haWxpbmcgbGlzdApGcmVlZHJlbm9AbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vZnJlZWRyZW5vCg==