From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeykumar Sankaran Subject: [DPU PATCH 2/2] drm/msm: remove partial update support Date: Thu, 22 Feb 2018 18:32:05 -0800 Message-ID: <1519353125-32005-3-git-send-email-jsanka@codeaurora.org> References: <1519353125-32005-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: <1519353125-32005-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 ICB8IDE0MyArLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29ubmVj dG9yLmggIHwgICA3ICstCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5j ICAgICAgIHwgNTQ0ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9jcnRjLmggICAgICAgfCAgMTggLQogZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYyAgICB8IDI2NiArKysrLS0tLS0tLS0KIGRyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nLmMgfCAgIDIgKwogZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5oICAgICAgICB8ICAgOCAtCiBkcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zX3V0aWxzLmMgIHwgIDQyIC0tCiBkcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuYyAgICAgIHwgIDEzIC0KIGRyaXZlcnMvZ3B1 L2RybS9tc20vbXNtX2Rydi5oICAgICAgICAgICAgICAgICAgfCAgNTYgLS0tCiAxMCBmaWxlcyBj aGFuZ2VkLCA5MCBpbnNlcnRpb25zKCspLCAxMDA5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb25uZWN0b3IuYyBiL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb25uZWN0b3IuYwppbmRleCA1N2I4NjI3Li42NDc4 ZTg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29ubmVj dG9yLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Nvbm5lY3Rvci5j CkBAIC00MjQsOCArNDI0LDcgQEAgaW50IGRwdV9jb25uZWN0b3JfcHJlX2tpY2tvZmYoc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKIHsKIAlzdHJ1Y3QgZHB1X2Nvbm5lY3RvciAqY19j b25uOwogCXN0cnVjdCBkcHVfY29ubmVjdG9yX3N0YXRlICpjX3N0YXRlOwotCXN0cnVjdCBtc21f ZGlzcGxheV9raWNrb2ZmX3BhcmFtcyBwYXJhbXM7Ci0JaW50IGlkeCwgcmM7CisJaW50IGlkeCwg cmMgPSAwOwogCiAJaWYgKCFjb25uZWN0b3IpIHsKIAkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3Vt ZW50XG4iKTsKQEAgLTQ2MiwxNCArNDYxLDcgQEAgaW50IGRwdV9jb25uZWN0b3JfcHJlX2tpY2tv ZmYoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKIAkJfQogCX0KIAotCWlmICghY19j b25uLT5vcHMucHJlX2tpY2tvZmYpCi0JCXJldHVybiAwOwotCi0JcGFyYW1zLnJvaXMgPSAmY19z dGF0ZS0+cm9pczsKLQotCURQVV9FVlQzMl9WRVJCT1NFKGNvbm5lY3Rvci0+YmFzZS5pZCk7Ci0K LQlyYyA9IGNfY29ubi0+b3BzLnByZV9raWNrb2ZmKGNvbm5lY3RvciwgY19jb25uLT5kaXNwbGF5 LCAmcGFyYW1zKTsKKwlEUFVfRVZUMzJfVkVSQk9TRShjb25uZWN0b3ItPmJhc2UuaWQpOwkKIAog CXJldHVybiByYzsKIH0KQEAgLTY0NSwxMjIgKzYzNyw2IEBAIHN0YXRpYyB2b2lkIGRwdV9jb25u ZWN0b3JfYXRvbWljX3Jlc2V0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCiAJcmV0 dXJuICZjX3N0YXRlLT5iYXNlOwogfQogCi1zdGF0aWMgaW50IF9kcHVfY29ubmVjdG9yX3JvaV92 MV9jaGVja19yb2koCi0JCXN0cnVjdCBkcHVfY29ubmVjdG9yICpjX2Nvbm4sCi0JCXN0cnVjdCBk cm1fY2xpcF9yZWN0ICpyb2lfY29ubiwKLQkJY29uc3Qgc3RydWN0IG1zbV9yb2lfY2FwcyAqY2Fw cykKLXsKLQljb25zdCBzdHJ1Y3QgbXNtX3JvaV9hbGlnbm1lbnQgKmFsaWduID0gJmNhcHMtPmFs aWduOwotCWludCB3ID0gcm9pX2Nvbm4tPngyIC0gcm9pX2Nvbm4tPngxOwotCWludCBoID0gcm9p X2Nvbm4tPnkyIC0gcm9pX2Nvbm4tPnkxOwotCi0JaWYgKHcgPD0gMCB8fCBoIDw9IDApIHsKLQkJ RFBVX0VSUk9SX0NPTk4oY19jb25uLCAiaW52YWxpZCBjb25uIHJvaSB3ICVkIGggJWRcbiIsIHcs IGgpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAodyA8IGFsaWduLT5taW5fd2lkdGgg fHwgdyAlIGFsaWduLT53aWR0aF9waXhfYWxpZ24pIHsKLQkJRFBVX0VSUk9SX0NPTk4oY19jb25u LAotCQkJCSJpbnZhbGlkIGNvbm4gcm9pIHdpZHRoICVkIG1pbiAlZCBhbGlnbiAlZFxuIiwKLQkJ CQl3LCBhbGlnbi0+bWluX3dpZHRoLCBhbGlnbi0+d2lkdGhfcGl4X2FsaWduKTsKLQkJcmV0dXJu IC1FSU5WQUw7Ci0JfQotCi0JaWYgKGggPCBhbGlnbi0+bWluX2hlaWdodCB8fCBoICUgYWxpZ24t PmhlaWdodF9waXhfYWxpZ24pIHsKLQkJRFBVX0VSUk9SX0NPTk4oY19jb25uLAotCQkJCSJpbnZh bGlkIGNvbm4gcm9pIGhlaWdodCAlZCBtaW4gJWQgYWxpZ24gJWRcbiIsCi0JCQkJaCwgYWxpZ24t Pm1pbl9oZWlnaHQsIGFsaWduLT5oZWlnaHRfcGl4X2FsaWduKTsKLQkJcmV0dXJuIC1FSU5WQUw7 Ci0JfQotCi0JaWYgKHJvaV9jb25uLT54MSAlIGFsaWduLT54c3RhcnRfcGl4X2FsaWduKSB7Ci0J CURQVV9FUlJPUl9DT05OKGNfY29ubiwgImludmFsaWQgY29ubiByb2kgeDEgJWQgYWxpZ24gJWRc biIsCi0JCQkJcm9pX2Nvbm4tPngxLCBhbGlnbi0+eHN0YXJ0X3BpeF9hbGlnbik7Ci0JCXJldHVy biAtRUlOVkFMOwotCX0KLQotCWlmIChyb2lfY29ubi0+eTEgJSBhbGlnbi0+eXN0YXJ0X3BpeF9h bGlnbikgewotCQlEUFVfRVJST1JfQ09OTihjX2Nvbm4sICJpbnZhbGlkIGNvbm4gcm9pIHkxICVk IGFsaWduICVkXG4iLAotCQkJCXJvaV9jb25uLT55MSwgYWxpZ24tPnlzdGFydF9waXhfYWxpZ24p OwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBf ZHB1X2Nvbm5lY3Rvcl9zZXRfcm9pX3YxKAotCQlzdHJ1Y3QgZHB1X2Nvbm5lY3RvciAqY19jb25u LAotCQlzdHJ1Y3QgZHB1X2Nvbm5lY3Rvcl9zdGF0ZSAqY19zdGF0ZSwKLQkJdm9pZCAqdXNyX3B0 cikKLXsKLQlzdHJ1Y3QgZHB1X2RybV9yb2lfdjEgcm9pX3YxOwotCXN0cnVjdCBtc21fZGlzcGxh eV9pbmZvIGRpc3BsYXlfaW5mbzsKLQlzdHJ1Y3QgbXNtX3JvaV9jYXBzICpjYXBzOwotCWludCBp LCByYzsKLQotCWlmICghY19jb25uIHx8ICFjX3N0YXRlKSB7Ci0JCURQVV9FUlJPUigiaW52YWxp ZCBhcmdzXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmMgPSBkcHVfY29ubmVjdG9y X2dldF9pbmZvKCZjX2Nvbm4tPmJhc2UsICZkaXNwbGF5X2luZm8pOwotCWlmIChyYykgewotCQlE UFVfRVJST1JfQ09OTihjX2Nvbm4sICJkaXNwbGF5IGdldCBpbmZvIGVycm9yOiAlZFxuIiwgcmMp OwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JY2FwcyA9ICZkaXNwbGF5X2luZm8ucm9pX2NhcHM7Ci0J aWYgKCFjYXBzLT5lbmFibGVkKSB7Ci0JCURQVV9FUlJPUl9DT05OKGNfY29ubiwgImRpc3BsYXkg cm9pIGNhcGFiaWxpdHkgaXMgZGlzYWJsZWRcbiIpOwotCQlyZXR1cm4gLUVOT1RTVVBQOwotCX0K LQotCW1lbXNldCgmY19zdGF0ZS0+cm9pcywgMCwgc2l6ZW9mKGNfc3RhdGUtPnJvaXMpKTsKLQot CWlmICghdXNyX3B0cikgewotCQlEUFVfREVCVUdfQ09OTihjX2Nvbm4sICJyb2lzIGNsZWFyZWRc biIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJnJvaV92MSwgdXNy X3B0ciwgc2l6ZW9mKHJvaV92MSkpKSB7Ci0JCURQVV9FUlJPUl9DT05OKGNfY29ubiwgImZhaWxl ZCB0byBjb3B5IHJvaV92MSBkYXRhXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JRFBV X0RFQlVHX0NPTk4oY19jb25uLCAibnVtX3JlY3RzICVkXG4iLCByb2lfdjEubnVtX3JlY3RzKTsK LQotCWlmIChyb2lfdjEubnVtX3JlY3RzID09IDApIHsKLQkJRFBVX0RFQlVHX0NPTk4oY19jb25u LCAicm9pcyBjbGVhcmVkXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKHJvaV92MS5udW1f cmVjdHMgPiBEUFVfTUFYX1JPSV9WMSB8fAotCQkJcm9pX3YxLm51bV9yZWN0cyA+IGNhcHMtPm51 bV9yb2kpIHsKLQkJRFBVX0VSUk9SX0NPTk4oY19jb25uLCAidG9vIG1hbnkgcmVjdHMgc3BlY2lm aWVkOiAlZFxuIiwKLQkJCQlyb2lfdjEubnVtX3JlY3RzKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0J fQotCi0JY19zdGF0ZS0+cm9pcy5udW1fcmVjdHMgPSByb2lfdjEubnVtX3JlY3RzOwotCWZvciAo aSA9IDA7IGkgPCByb2lfdjEubnVtX3JlY3RzOyArK2kpIHsKLQkJaW50IHJjOwotCi0JCXJjID0g X2RwdV9jb25uZWN0b3Jfcm9pX3YxX2NoZWNrX3JvaShjX2Nvbm4sICZyb2lfdjEucm9pW2ldLAot CQkJCWNhcHMpOwotCQlpZiAocmMpCi0JCQlyZXR1cm4gcmM7Ci0KLQkJY19zdGF0ZS0+cm9pcy5y b2lbaV0gPSByb2lfdjEucm9pW2ldOwotCQlEUFVfREVCVUdfQ09OTihjX2Nvbm4sICJyb2klZDog cm9pICglZCwlZCkgKCVkLCVkKVxuIiwgaSwKLQkJCQljX3N0YXRlLT5yb2lzLnJvaVtpXS54MSwK LQkJCQljX3N0YXRlLT5yb2lzLnJvaVtpXS55MSwKLQkJCQljX3N0YXRlLT5yb2lzLnJvaVtpXS54 MiwKLQkJCQljX3N0YXRlLT5yb2lzLnJvaVtpXS55Mik7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0K IHN0YXRpYyBpbnQgX2RwdV9jb25uZWN0b3JfdXBkYXRlX2JsX3NjYWxlKHN0cnVjdCBkcHVfY29u bmVjdG9yICpjX2Nvbm4sCiAJCWludCBpZHgsCiAJCXVpbnQ2NF90IHZhbHVlKQpAQCAtODUwLDEz ICs3MjYsNyBAQCBzdGF0aWMgaW50IGRwdV9jb25uZWN0b3JfYXRvbWljX3NldF9wcm9wZXJ0eShz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCQlicmVhazsKIAlkZWZhdWx0OgogCQli cmVhazsKLQl9Ci0KLQlpZiAoaWR4ID09IENPTk5FQ1RPUl9QUk9QX1JPSV9WMSkgewotCQlyYyA9 IF9kcHVfY29ubmVjdG9yX3NldF9yb2lfdjEoY19jb25uLCBjX3N0YXRlLCAodm9pZCAqKXZhbCk7 Ci0JCWlmIChyYykKLQkJCURQVV9FUlJPUl9DT05OKGNfY29ubiwgImludmFsaWQgcm9pX3YxLCBy YzogJWRcbiIsIHJjKTsKLQl9CisJfQkKIAogCS8qIGNoZWNrIGZvciBjdXN0b20gcHJvcGVydHkg aGFuZGxpbmcgKi8KIAlpZiAoIXJjICYmIGNfY29ubi0+b3BzLnNldF9wcm9wZXJ0eSkgewpAQCAt MTMwNCwxMyArMTE3NCw2IEBAIHN0cnVjdCBkcm1fY29ubmVjdG9yICpkcHVfY29ubmVjdG9yX2lu aXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJQ09OTkVDVE9SX1BST1BfQURfQkxfU0NBTEUp OwogI2VuZGlmCiAKLQlyYyA9IGRwdV9jb25uZWN0b3JfZ2V0X2luZm8oJmNfY29ubi0+YmFzZSwg JmRpc3BsYXlfaW5mbyk7Ci0JaWYgKCFyYyAmJiBkaXNwbGF5X2luZm8ucm9pX2NhcHMuZW5hYmxl ZCkgewotCQltc21fcHJvcGVydHlfaW5zdGFsbF92b2xhdGlsZV9yYW5nZSgKLQkJCQkmY19jb25u LT5wcm9wZXJ0eV9pbmZvLCAiZHB1X2RybV9yb2lfdjEiLCAweDAsCi0JCQkJMCwgfjAsIDAsIENP Tk5FQ1RPUl9QUk9QX1JPSV9WMSk7Ci0JfQotCiAJbXNtX3Byb3BlcnR5X2luc3RhbGxfcmFuZ2Uo JmNfY29ubi0+cHJvcGVydHlfaW5mbywgIlJFVElSRV9GRU5DRSIsCiAJCQkweDAsIDAsIElOUl9P UEVOX01BWCwgMCwgQ09OTkVDVE9SX1BST1BfUkVUSVJFX0ZFTkNFKTsKIApkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Nvbm5lY3Rvci5oIGIvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Nvbm5lY3Rvci5oCmluZGV4IDU3M2EwYzguLjk4MWY0 NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jb25uZWN0 b3IuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY29ubmVjdG9yLmgK QEAgLTE2MywxMyArMTYzLDEwIEBAIHN0cnVjdCBkcHVfY29ubmVjdG9yX29wcyB7CiAJICogcHJl X2tpY2tvZmYgLSB0cmlnZ2VyIGRpc3BsYXkgdG8gcHJvZ3JhbSBraWNrb2ZmLXRpbWUgZmVhdHVy ZXMKIAkgKiBAY29ubmVjdG9yOiBQb2ludGVyIHRvIGRybSBjb25uZWN0b3Igc3RydWN0dXJlCiAJ ICogQGRpc3BsYXk6IFBvaW50ZXIgdG8gcHJpdmF0ZSBkaXNwbGF5IHN0cnVjdHVyZQotCSAqIEBw YXJhbXM6IFBhcmFtZXRlciBidW5kbGUgb2YgY29ubmVjdG9yLXN0b3JlZCBpbmZvcm1hdGlvbiBm b3IKLQkgKglraWNrb2ZmLXRpbWUgcHJvZ3JhbW1pbmcgaW50byB0aGUgZGlzcGxheQogCSAqIFJl dHVybnM6IFplcm8gb24gc3VjY2VzcwogCSAqLwogCWludCAoKnByZV9raWNrb2ZmKShzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAotCQkJdm9pZCAqZGlzcGxheSwKLQkJCXN0cnVjdCBt c21fZGlzcGxheV9raWNrb2ZmX3BhcmFtcyAqcGFyYW1zKTsKKwkJCXZvaWQgKmRpc3BsYXkpOwog CiAJLyoqCiAJICogY2xrX2N0cmwgLSBwZXJmb3JtIGNsayBlbmFibGUvZGlzYWJsZSBvbiB0aGUg Y29ubmVjdG9yCkBAIC0zNDAsNyArMzM3LDYgQEAgc3RydWN0IGRwdV9jb25uZWN0b3IgewogICog QG91dF9mYjogUG9pbnRlciB0byBvdXRwdXQgZnJhbWUgYnVmZmVyLCBpZiBhcHBsaWNhYmxlCiAg KiBAcHJvcGVydHlfc3RhdGU6IExvY2FsIHN0b3JhZ2UgZm9yIG1zbV9wcm9wIHByb3BlcnRpZXMK ICAqIEBwcm9wZXJ0eV92YWx1ZXM6IExvY2FsIGNhY2hlIG9mIGN1cnJlbnQgY29ubmVjdG9yIHBy b3BlcnR5IHZhbHVlcwotICogQHJvaXM6IFJlZ2lvbnMgb2YgaW50ZXJlc3Qgc3RydWN0dXJlIGZv ciBtYXBwaW5nIENSVEMgdG8gQ29ubmVjdG9yIG91dHB1dAogICogQHByb3BlcnR5X2Jsb2JzOiBi bG9iIHByb3BlcnRpZXMKICAqLwogc3RydWN0IGRwdV9jb25uZWN0b3Jfc3RhdGUgewpAQCAtMzQ5 LDcgKzM0NSw2IEBAIHN0cnVjdCBkcHVfY29ubmVjdG9yX3N0YXRlIHsKIAlzdHJ1Y3QgbXNtX3By b3BlcnR5X3N0YXRlIHByb3BlcnR5X3N0YXRlOwogCXN0cnVjdCBtc21fcHJvcGVydHlfdmFsdWUg cHJvcGVydHlfdmFsdWVzW0NPTk5FQ1RPUl9QUk9QX0NPVU5UXTsKIAotCXN0cnVjdCBtc21fcm9p X2xpc3Qgcm9pczsKIAlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgKnByb3BlcnR5X2Jsb2JzW0NP Tk5FQ1RPUl9QUk9QX0JMT0JDT1VOVF07CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2NydGMuYwppbmRleCAzY2RmMWUzLi5hYjM2NTc4IDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9jcnRjLmMKQEAgLTc4Miw0NjUgKzc4MiwyNCBAQCBzdGF0aWMgdm9p ZCBfZHB1X2NydGNfc2V0dXBfZGltX2xheWVyX2NmZyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJ fQogfQogCi12b2lkIGRwdV9jcnRjX2dldF9jcnRjX3JvaShzdHJ1Y3QgZHJtX2NydGNfc3RhdGUg KnN0YXRlLAotCQljb25zdCBzdHJ1Y3QgZHB1X3JlY3QgKipjcnRjX3JvaSkKLXsKLQlzdHJ1Y3Qg ZHB1X2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Ci0KLQlpZiAoIXN0YXRlIHx8ICFjcnRjX3JvaSkK LQkJcmV0dXJuOwotCi0JY3J0Y19zdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKHN0YXRlKTsKLQkq Y3J0Y19yb2kgPSAmY3J0Y19zdGF0ZS0+Y3J0Y19yb2k7Ci19Ci0KLXN0YXRpYyBpbnQgX2RwdV9j cnRjX3NldF9yb2lfdjEoc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSwKLQkJdm9pZCBfX3Vz ZXIgKnVzcl9wdHIpCi17Ci0Jc3RydWN0IGRybV9jcnRjICpjcnRjOwotCXN0cnVjdCBkcHVfY3J0 Y19zdGF0ZSAqY3N0YXRlOwotCXN0cnVjdCBkcHVfZHJtX3JvaV92MSByb2lfdjE7Ci0JaW50IGk7 Ci0KLQlpZiAoIXN0YXRlKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBhcmdzXG4iKTsKLQkJcmV0 dXJuIC1FSU5WQUw7Ci0JfQotCi0JY3N0YXRlID0gdG9fZHB1X2NydGNfc3RhdGUoc3RhdGUpOwot CWNydGMgPSBjc3RhdGUtPmJhc2UuY3J0YzsKLQotCW1lbXNldCgmY3N0YXRlLT51c2VyX3JvaV9s aXN0LCAwLCBzaXplb2YoY3N0YXRlLT51c2VyX3JvaV9saXN0KSk7Ci0KLQlpZiAoIXVzcl9wdHIp IHsKLQkJRFBVX0RFQlVHKCJjcnRjJWQ6IHJvaXMgY2xlYXJlZFxuIiwgRFJNSUQoY3J0YykpOwot CQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJnJvaV92MSwgdXNyX3B0ciwg c2l6ZW9mKHJvaV92MSkpKSB7Ci0JCURQVV9FUlJPUigiY3J0YyVkOiBmYWlsZWQgdG8gY29weSBy b2lfdjEgZGF0YVxuIiwgRFJNSUQoY3J0YykpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlE UFVfREVCVUcoImNydGMlZDogbnVtX3JlY3RzICVkXG4iLCBEUk1JRChjcnRjKSwgcm9pX3YxLm51 bV9yZWN0cyk7Ci0KLQlpZiAocm9pX3YxLm51bV9yZWN0cyA9PSAwKSB7Ci0JCURQVV9ERUJVRygi Y3J0YyVkOiByb2lzIGNsZWFyZWRcbiIsIERSTUlEKGNydGMpKTsKLQkJcmV0dXJuIDA7Ci0JfQot Ci0JaWYgKHJvaV92MS5udW1fcmVjdHMgPiBEUFVfTUFYX1JPSV9WMSkgewotCQlEUFVfRVJST1Io ImNydGMlZDogdG9vIG1hbnkgcmVjdHMgc3BlY2lmaWVkOiAlZFxuIiwgRFJNSUQoY3J0YyksCi0J CQkJcm9pX3YxLm51bV9yZWN0cyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWNzdGF0ZS0+ dXNlcl9yb2lfbGlzdC5udW1fcmVjdHMgPSByb2lfdjEubnVtX3JlY3RzOwotCWZvciAoaSA9IDA7 IGkgPCByb2lfdjEubnVtX3JlY3RzOyArK2kpIHsKLQkJY3N0YXRlLT51c2VyX3JvaV9saXN0LnJv aVtpXSA9IHJvaV92MS5yb2lbaV07Ci0JCURQVV9ERUJVRygiY3J0YyVkOiByb2klZDogcm9pICgl ZCwlZCkgKCVkLCVkKVxuIiwKLQkJCQlEUk1JRChjcnRjKSwgaSwKLQkJCQljc3RhdGUtPnVzZXJf cm9pX2xpc3Qucm9pW2ldLngxLAotCQkJCWNzdGF0ZS0+dXNlcl9yb2lfbGlzdC5yb2lbaV0ueTEs Ci0JCQkJY3N0YXRlLT51c2VyX3JvaV9saXN0LnJvaVtpXS54MiwKLQkJCQljc3RhdGUtPnVzZXJf cm9pX2xpc3Qucm9pW2ldLnkyKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGJvb2wg X2RwdV9jcnRjX3NldHVwX2lzXzNkbXV4X2RzYyhzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRl KQotewotCWludCBpOwotCXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqY3N0YXRlOwotCWJvb2wgaXNf M2RtdXhfZHNjID0gZmFsc2U7Ci0KLQljc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShzdGF0ZSk7 Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY3N0YXRlLT5udW1fY29ubmVjdG9yczsgaSsrKSB7Ci0JCXN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uID0gY3N0YXRlLT5jb25uZWN0b3JzW2ldOwotCi0JCWlm IChkcHVfY29ubmVjdG9yX2dldF90b3BvbG9neV9uYW1lKGNvbm4pID09Ci0JCQkJRFBVX1JNX1RP UE9MT0dZX0RVQUxQSVBFXzNETUVSR0VfRFNDKQotCQkJaXNfM2RtdXhfZHNjID0gdHJ1ZTsKLQl9 Ci0KLQlyZXR1cm4gaXNfM2RtdXhfZHNjOwotfQotCi1zdGF0aWMgaW50IF9kcHVfY3J0Y19zZXRf Y3J0Y19yb2koc3RydWN0IGRybV9jcnRjICpjcnRjLAotCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUg KnN0YXRlKQotewotCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uOwotCXN0cnVjdCBkcm1fY29u bmVjdG9yX3N0YXRlICpjb25uX3N0YXRlOwotCXN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGM7Ci0J c3RydWN0IGRwdV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwotCXN0cnVjdCBkcHVfcmVjdCAqY3J0 Y19yb2k7Ci0JaW50IGksIG51bV9hdHRhY2hlZF9jb25ucyA9IDA7Ci0KLQlpZiAoIWNydGMgfHwg IXN0YXRlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0 Yyk7Ci0JY3J0Y19zdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKHN0YXRlKTsKLQljcnRjX3JvaSA9 ICZjcnRjX3N0YXRlLT5jcnRjX3JvaTsKLQotCWZvcl9lYWNoX29sZF9jb25uZWN0b3JfaW5fc3Rh dGUoc3RhdGUtPnN0YXRlLCBjb25uLCBjb25uX3N0YXRlLCBpKSB7Ci0JCXN0cnVjdCBkcHVfY29u bmVjdG9yX3N0YXRlICpkcHVfY29ubl9zdGF0ZTsKLQotCQlpZiAoIWNvbm5fc3RhdGUgfHwgY29u bl9zdGF0ZS0+Y3J0YyAhPSBjcnRjKQotCQkJY29udGludWU7Ci0KLQkJaWYgKG51bV9hdHRhY2hl ZF9jb25ucykgewotCQkJRFBVX0VSUk9SKAotCQkJCSJjcnRjJWQ6IHVuc3VwcG9ydGVkOiByb2kg b24gY3J0YyB3LyA+MSBjb25uZWN0b3JzXG4iLAotCQkJCQlEUk1JRChjcnRjKSk7Ci0JCQlyZXR1 cm4gLUVJTlZBTDsKLQkJfQotCQkrK251bV9hdHRhY2hlZF9jb25uczsKLQotCQlkcHVfY29ubl9z dGF0ZSA9IHRvX2RwdV9jb25uZWN0b3Jfc3RhdGUoY29ubl9zdGF0ZSk7Ci0KLQkJLyoKLQkJICog Y3VycmVudCBkcml2ZXIgb25seSBzdXBwb3J0cyBzYW1lIGNvbm5lY3RvciBhbmQgY3J0YyBzaXpl LAotCQkgKiBidXQgaWYgc3VwcG9ydCBmb3IgZGlmZmVyZW50IHNpemVzIGlzIGFkZGVkLCBkcml2 ZXIgbmVlZHMKLQkJICogdG8gY2hlY2sgdGhlIGNvbm5lY3RvciByb2kgaGVyZSB0byBtYWtlIHN1 cmUgaXMgZnVsbCBzY3JlZW4KLQkJICogZm9yIGRzYyAzZC1tdXggdG9wb2xvZ3kgdGhhdCBkb2Vz bid0IHN1cHBvcnQgcGFydGlhbCB1cGRhdGUuCi0JCSAqLwotCQlpZiAobWVtY21wKCZkcHVfY29u bl9zdGF0ZS0+cm9pcywgJmNydGNfc3RhdGUtPnVzZXJfcm9pX2xpc3QsCi0JCQkJc2l6ZW9mKGNy dGNfc3RhdGUtPnVzZXJfcm9pX2xpc3QpKSkgewotCQkJRFBVX0VSUk9SKCIlczogY3J0YyAtPiBj b25uIHJvaSBzY2FsaW5nIHVuc3VwcG9ydGVkXG4iLAotCQkJCQlkcHVfY3J0Yy0+bmFtZSk7Ci0J CQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLQotCWRwdV9rbXNfcmVjdF9tZXJnZV9yZWN0YW5n bGVzKCZjcnRjX3N0YXRlLT51c2VyX3JvaV9saXN0LCBjcnRjX3JvaSk7Ci0KLQlEUFVfREVCVUco IiVzOiBjcnRjIHJvaSAoJWQsJWQsJWQsJWQpXG4iLCBkcHVfY3J0Yy0+bmFtZSwKLQkJCWNydGNf cm9pLT54LCBjcnRjX3JvaS0+eSwgY3J0Y19yb2ktPncsIGNydGNfcm9pLT5oKTsKLQotCXJldHVy biAwOwotfQotCi1zdGF0aWMgaW50IF9kcHVfY3J0Y19jaGVja19hdXRvcmVmcmVzaChzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMsCi0JCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCi17Ci0Jc3Ry dWN0IGRwdV9jcnRjICpkcHVfY3J0YzsKLQlzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgKmNydGNfc3Rh dGU7Ci0Jc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm47Ci0Jc3RydWN0IGRybV9jb25uZWN0b3Jf c3RhdGUgKmNvbm5fc3RhdGU7Ci0JaW50IGk7Ci0KLQlpZiAoIWNydGMgfHwgIXN0YXRlKQotCQly ZXR1cm4gLUVJTlZBTDsKLQotCWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7Ci0JY3J0Y19z dGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKHN0YXRlKTsKLQotCWlmIChkcHVfa21zX3JlY3RfaXNf bnVsbCgmY3J0Y19zdGF0ZS0+Y3J0Y19yb2kpKQotCQlyZXR1cm4gMDsKLQotCS8qIHBhcnRpYWwg dXBkYXRlIGFjdGl2ZSwgY2hlY2sgaWYgYXV0b3JlZnJlc2ggaXMgYWxzbyByZXF1ZXN0ZWQgKi8K LQlmb3JfZWFjaF9vbGRfY29ubmVjdG9yX2luX3N0YXRlKHN0YXRlLT5zdGF0ZSwgY29ubiwgY29u bl9zdGF0ZSwgaSkgewotCQl1aW50NjRfdCBhdXRvcmVmcmVzaDsKLQotCQlpZiAoIWNvbm5fc3Rh dGUgfHwgY29ubl9zdGF0ZS0+Y3J0YyAhPSBjcnRjKQotCQkJY29udGludWU7Ci0KLQkJYXV0b3Jl ZnJlc2ggPSBkcHVfY29ubmVjdG9yX2dldF9wcm9wZXJ0eShjb25uX3N0YXRlLAotCQkJCUNPTk5F Q1RPUl9QUk9QX0FVVE9SRUZSRVNIKTsKLQkJaWYgKGF1dG9yZWZyZXNoKSB7Ci0JCQlEUFVfRVJS T1IoCi0JCQkJIiVzOiBhdXRvcmVmcmVzaCAmIHBhcnRpYWwgY3J0YyByb2kgaW5jb21wYXRpYmxl ICVsbHVcbiIsCi0JCQkJCWRwdV9jcnRjLT5uYW1lLCBhdXRvcmVmcmVzaCk7Ci0JCQlyZXR1cm4g LUVJTlZBTDsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9kcHVfY3J0 Y19zZXRfbG1fcm9pKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJc3RydWN0IGRybV9jcnRjX3N0 YXRlICpzdGF0ZSwgaW50IGxtX2lkeCkKLXsKLQlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOwot CXN0cnVjdCBkcHVfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKLQljb25zdCBzdHJ1Y3QgZHB1X3Jl Y3QgKmNydGNfcm9pOwotCWNvbnN0IHN0cnVjdCBkcHVfcmVjdCAqbG1fYm91bmRzOwotCXN0cnVj dCBkcHVfcmVjdCAqbG1fcm9pOwotCi0JaWYgKCFjcnRjIHx8ICFzdGF0ZSB8fCBsbV9pZHggPj0g QVJSQVlfU0laRShjcnRjX3N0YXRlLT5sbV9ib3VuZHMpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQot CWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7Ci0JY3J0Y19zdGF0ZSA9IHRvX2RwdV9jcnRj X3N0YXRlKHN0YXRlKTsKLQljcnRjX3JvaSA9ICZjcnRjX3N0YXRlLT5jcnRjX3JvaTsKLQlsbV9i b3VuZHMgPSAmY3J0Y19zdGF0ZS0+bG1fYm91bmRzW2xtX2lkeF07Ci0JbG1fcm9pID0gJmNydGNf c3RhdGUtPmxtX3JvaVtsbV9pZHhdOwotCi0JaWYgKGRwdV9rbXNfcmVjdF9pc19udWxsKGNydGNf cm9pKSkKLQkJbWVtY3B5KGxtX3JvaSwgbG1fYm91bmRzLCBzaXplb2YoKmxtX3JvaSkpOwotCWVs c2UKLQkJZHB1X2ttc19yZWN0X2ludGVyc2VjdChjcnRjX3JvaSwgbG1fYm91bmRzLCBsbV9yb2kp OwotCi0JRFBVX0RFQlVHKCIlczogbG0lZCByb2kgKCVkLCVkLCVkLCVkKVxuIiwgZHB1X2NydGMt Pm5hbWUsIGxtX2lkeCwKLQkJCWxtX3JvaS0+eCwgbG1fcm9pLT55LCBsbV9yb2ktPncsIGxtX3Jv aS0+aCk7Ci0KLQkvKgotCSAqIHBhcnRpYWwgdXBkYXRlIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCAz ZG11eCBkc2Mgb3IgZGVzdCBzY2FsZXIuCi0JICogaGVuY2UsIGNydGMgcm9pIG11c3QgbWF0Y2gg dGhlIG1peGVyIGRpbWVuc2lvbnMuCi0JICovCi0JaWYgKGNydGNfc3RhdGUtPm51bV9kc19lbmFi bGVkIHx8Ci0JCV9kcHVfY3J0Y19zZXR1cF9pc18zZG11eF9kc2Moc3RhdGUpKSB7Ci0JCWlmICht ZW1jbXAobG1fcm9pLCBsbV9ib3VuZHMsIHNpemVvZihzdHJ1Y3QgZHB1X3JlY3QpKSkgewotCQkJ RFBVX0VSUk9SKCJVbnN1cHBvcnRlZDogRGVzdCBzY2FsZXIvM2QgbXV4IERTQyArIFBVXG4iKTsK LQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQotCi0JLyogaWYgYW55IGRpbWVuc2lvbiBpcyB6 ZXJvLCBjbGVhciBhbGwgZGltZW5zaW9ucyBmb3IgY2xhcml0eSAqLwotCWlmIChkcHVfa21zX3Jl Y3RfaXNfbnVsbChsbV9yb2kpKQotCQltZW1zZXQobG1fcm9pLCAwLCBzaXplb2YoKmxtX3JvaSkp OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1MzIgX2RwdV9jcnRjX2dldF9kaXNwbGF5c19h ZmZlY3RlZChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAq c3RhdGUpCi17Ci0Jc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YzsKLQlzdHJ1Y3QgZHB1X2NydGNf c3RhdGUgKmNydGNfc3RhdGU7Ci0JdTMyIGRpc3BfYml0bWFzayA9IDA7Ci0JaW50IGk7Ci0KLQlk cHVfY3J0YyA9IHRvX2RwdV9jcnRjKGNydGMpOwotCWNydGNfc3RhdGUgPSB0b19kcHVfY3J0Y19z dGF0ZShzdGF0ZSk7Ci0KLQkvKiBwaW5ncG9uZyBzcGxpdDogb25lIFJPSSwgb25lIExNLCB0d28g cGh5c2ljYWwgZGlzcGxheXMgKi8KLQlpZiAoY3J0Y19zdGF0ZS0+aXNfcHBzcGxpdCkgewotCQl1 MzIgbG1fc3BsaXRfd2lkdGggPSBjcnRjX3N0YXRlLT5sbV9ib3VuZHNbMF0udyAvIDI7Ci0JCXN0 cnVjdCBkcHVfcmVjdCAqcm9pID0gJmNydGNfc3RhdGUtPmxtX3JvaVswXTsKLQotCQlpZiAoZHB1 X2ttc19yZWN0X2lzX251bGwocm9pKSkKLQkJCWRpc3BfYml0bWFzayA9IDA7Ci0JCWVsc2UgaWYg KCh1MzIpcm9pLT54ICsgKHUzMilyb2ktPncgPD0gbG1fc3BsaXRfd2lkdGgpCi0JCQlkaXNwX2Jp dG1hc2sgPSBCSVQoMCk7CQkvKiBsZWZ0IG9ubHkgKi8KLQkJZWxzZSBpZiAocm9pLT54ID49IGxt X3NwbGl0X3dpZHRoKQotCQkJZGlzcF9iaXRtYXNrID0gQklUKDEpOwkJLyogcmlnaHQgb25seSAq LwotCQllbHNlCi0JCQlkaXNwX2JpdG1hc2sgPSBCSVQoMCkgfCBCSVQoMSk7IC8qIGxlZnQgYW5k IHJpZ2h0ICovCi0JfSBlbHNlIHsKLQkJZm9yIChpID0gMDsgaSA8IGRwdV9jcnRjLT5udW1fbWl4 ZXJzOyBpKyspIHsKLQkJCWlmICghZHB1X2ttc19yZWN0X2lzX251bGwoJmNydGNfc3RhdGUtPmxt X3JvaVtpXSkpCi0JCQkJZGlzcF9iaXRtYXNrIHw9IEJJVChpKTsKLQkJfQotCX0KLQotCURQVV9E RUJVRygiYWZmZWN0ZWQgZGlzcGxheXMgMHgleFxuIiwgZGlzcF9iaXRtYXNrKTsKLQotCXJldHVy biBkaXNwX2JpdG1hc2s7Ci19Ci0KLXN0YXRpYyBpbnQgX2RwdV9jcnRjX2NoZWNrX3JvaXNfY2Vu dGVyZWRfYW5kX3N5bW1ldHJpYyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCXN0cnVjdCBkcm1f Y3J0Y19zdGF0ZSAqc3RhdGUpCi17Ci0Jc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YzsKLQlzdHJ1 Y3QgZHB1X2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Ci0JY29uc3Qgc3RydWN0IGRwdV9yZWN0ICpy b2lbQ1JUQ19EVUFMX01JWEVSU107Ci0KLQlpZiAoIWNydGMgfHwgIXN0YXRlKQotCQlyZXR1cm4g LUVJTlZBTDsKLQotCWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7Ci0JY3J0Y19zdGF0ZSA9 IHRvX2RwdV9jcnRjX3N0YXRlKHN0YXRlKTsKLQotCWlmIChkcHVfY3J0Yy0+bnVtX21peGVycyA+ IENSVENfRFVBTF9NSVhFUlMpIHsKLQkJRFBVX0VSUk9SKCIlczogdW5zdXBwb3J0ZWQgbnVtYmVy IG9mIG1peGVyczogJWRcbiIsCi0JCQkJZHB1X2NydGMtPm5hbWUsIGRwdV9jcnRjLT5udW1fbWl4 ZXJzKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyoKLQkgKiBJZiB1c2luZyBwaW5ncG9u ZyBzcGxpdDogb25lIFJPSSwgb25lIExNLCB0d28gcGh5c2ljYWwgZGlzcGxheXMKLQkgKiB0aGVu IHRoZSBST0kgbXVzdCBiZSBjZW50ZXJlZCBvbiB0aGUgcGFuZWwgc3BsaXQgYm91bmRhcnkgYW5k Ci0JICogYmUgb2YgZXF1YWwgd2lkdGggYWNyb3NzIHRoZSBzcGxpdC4KLQkgKi8KLQlpZiAoY3J0 Y19zdGF0ZS0+aXNfcHBzcGxpdCkgewotCQl1MTYgcGFuZWxfc3BsaXRfd2lkdGg7Ci0JCXUzMiBk aXNwbGF5X21hc2s7Ci0KLQkJcm9pWzBdID0gJmNydGNfc3RhdGUtPmxtX3JvaVswXTsKLQotCQlp ZiAoZHB1X2ttc19yZWN0X2lzX251bGwocm9pWzBdKSkKLQkJCXJldHVybiAwOwotCi0JCWRpc3Bs YXlfbWFzayA9IF9kcHVfY3J0Y19nZXRfZGlzcGxheXNfYWZmZWN0ZWQoY3J0Yywgc3RhdGUpOwot CQlpZiAoZGlzcGxheV9tYXNrICE9IChCSVQoMCkgfCBCSVQoMSkpKQotCQkJcmV0dXJuIDA7Ci0K LQkJcGFuZWxfc3BsaXRfd2lkdGggPSBjcnRjX3N0YXRlLT5sbV9ib3VuZHNbMF0udyAvIDI7Ci0J CWlmIChyb2lbMF0tPnggKyByb2lbMF0tPncgLyAyICE9IHBhbmVsX3NwbGl0X3dpZHRoKSB7Ci0J CQlEUFVfRVJST1IoIiVzOiByb2kgeCAlZCB3ICVkIHNwbGl0ICVkXG4iLAotCQkJCQlkcHVfY3J0 Yy0+bmFtZSwgcm9pWzBdLT54LCByb2lbMF0tPncsCi0JCQkJCXBhbmVsX3NwbGl0X3dpZHRoKTsK LQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyoKLQkgKiBP biBjZXJ0YWluIEhXLCBpZiB1c2luZyAyIExNLCBST0lzIG11c3QgYmUgc3BsaXQgZXZlbmx5IGJl dHdlZW4gdGhlCi0JICogTE1zIGFuZCBiZSBvZiBlcXVhbCB3aWR0aC4KLQkgKi8KLQlpZiAoZHB1 X2NydGMtPm51bV9taXhlcnMgPCAyKQotCQlyZXR1cm4gMDsKLQotCXJvaVswXSA9ICZjcnRjX3N0 YXRlLT5sbV9yb2lbMF07Ci0Jcm9pWzFdID0gJmNydGNfc3RhdGUtPmxtX3JvaVsxXTsKLQotCS8q IGlmIG9uZSBvZiB0aGUgcm9pIGlzIG51bGwgaXQncyBhIGxlZnQvcmlnaHQtb25seSB1cGRhdGUg Ki8KLQlpZiAoZHB1X2ttc19yZWN0X2lzX251bGwocm9pWzBdKSB8fCBkcHVfa21zX3JlY3RfaXNf bnVsbChyb2lbMV0pKQotCQlyZXR1cm4gMDsKLQotCS8qIGNoZWNrIGxtIHJvaXMgYXJlIGVxdWFs IHdpZHRoICYgZmlyc3Qgcm9pIGVuZHMgYXQgMm5kIHJvaSAqLwotCWlmIChyb2lbMF0tPnggKyBy b2lbMF0tPncgIT0gcm9pWzFdLT54IHx8IHJvaVswXS0+dyAhPSByb2lbMV0tPncpIHsKLQkJRFBV X0VSUk9SKAotCQkJIiVzOiByb2lzIG5vdCBjZW50ZXJlZCBhbmQgc3ltbWV0cmljOiByb2kwIHgg JWQgdyAlZCByb2kxIHggJWQgdyAlZFxuIiwKLQkJCQlkcHVfY3J0Yy0+bmFtZSwgcm9pWzBdLT54 LCByb2lbMF0tPncsCi0JCQkJcm9pWzFdLT54LCByb2lbMV0tPncpOwotCQlyZXR1cm4gLUVJTlZB TDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfZHB1X2NydGNfY2hlY2tfcGxh bmVzX3dpdGhpbl9jcnRjX3JvaShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCXN0cnVjdCBkcm1f Y3J0Y19zdGF0ZSAqc3RhdGUpCi17Ci0Jc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YzsKLQlzdHJ1 Y3QgZHB1X2NydGNfc3RhdGUgKmNydGNfc3RhdGU7Ci0JY29uc3Qgc3RydWN0IGRwdV9yZWN0ICpj cnRjX3JvaTsKLQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwc3RhdGU7Ci0Jc3RydWN0IGRybV9w bGFuZSAqcGxhbmU7Ci0KLQlpZiAoIWNydGMgfHwgIXN0YXRlKQotCQlyZXR1cm4gLUVJTlZBTDsK LQotCS8qCi0JICogUmVqZWN0IGNvbW1pdCBpZiBhIFBsYW5lIENSVEMgZGVzdGluYXRpb24gY29v cmRpbmF0ZXMgZmFsbCBvdXRzaWRlCi0JICogdGhlIHBhcnRpYWwgQ1JUQyBST0kuIExNIG91dHB1 dCBpcyBkZXRlcm1pbmVkIHZpYSBjb25uZWN0b3IgUk9JcywKLQkgKiBpZiB0aGV5IGFyZSBzcGVj aWZpZWQsIG5vdCBQbGFuZSBDUlRDIFJPSXMuCi0JICovCi0KLQlkcHVfY3J0YyA9IHRvX2RwdV9j cnRjKGNydGMpOwotCWNydGNfc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShzdGF0ZSk7Ci0JY3J0 Y19yb2kgPSAmY3J0Y19zdGF0ZS0+Y3J0Y19yb2k7Ci0KLQlpZiAoZHB1X2ttc19yZWN0X2lzX251 bGwoY3J0Y19yb2kpKQotCQlyZXR1cm4gMDsKLQotCWRybV9hdG9taWNfY3J0Y19zdGF0ZV9mb3Jf ZWFjaF9wbGFuZShwbGFuZSwgc3RhdGUpIHsKLQkJc3RydWN0IGRwdV9yZWN0IHBsYW5lX3JvaSwg aW50ZXJzZWN0aW9uOwotCi0JCXBzdGF0ZSA9IGRybV9hdG9taWNfZ2V0X3BsYW5lX3N0YXRlKHN0 YXRlLT5zdGF0ZSwgcGxhbmUpOwotCQlpZiAoSVNfRVJSX09SX05VTEwocHN0YXRlKSkgewotCQkJ aW50IHJjID0gUFRSX0VSUihwc3RhdGUpOwotCi0JCQlEUFVfRVJST1IoIiVzOiBmYWlsZWQgdG8g Z2V0IHBsYW5lJWQgc3RhdGUsICVkXG4iLAotCQkJCQlkcHVfY3J0Yy0+bmFtZSwgcGxhbmUtPmJh c2UuaWQsIHJjKTsKLQkJCXJldHVybiByYzsKLQkJfQotCi0JCXBsYW5lX3JvaS54ID0gcHN0YXRl LT5jcnRjX3g7Ci0JCXBsYW5lX3JvaS55ID0gcHN0YXRlLT5jcnRjX3k7Ci0JCXBsYW5lX3JvaS53 ID0gcHN0YXRlLT5jcnRjX3c7Ci0JCXBsYW5lX3JvaS5oID0gcHN0YXRlLT5jcnRjX2g7Ci0JCWRw dV9rbXNfcmVjdF9pbnRlcnNlY3QoY3J0Y19yb2ksICZwbGFuZV9yb2ksICZpbnRlcnNlY3Rpb24p OwotCQlpZiAoIWRwdV9rbXNfcmVjdF9pc19lcXVhbCgmcGxhbmVfcm9pLCAmaW50ZXJzZWN0aW9u KSkgewotCQkJRFBVX0VSUk9SKAotCQkJCSIlczogcGxhbmUlZCBjcnRjIHJvaSAoJWQsJWQsJWQs JWQpIG91dHNpZGUgY3J0YyByb2kgKCVkLCVkLCVkLCVkKVxuIiwKLQkJCQkJZHB1X2NydGMtPm5h bWUsIHBsYW5lLT5iYXNlLmlkLAotCQkJCQlwbGFuZV9yb2kueCwgcGxhbmVfcm9pLnksCi0JCQkJ CXBsYW5lX3JvaS53LCBwbGFuZV9yb2kuaCwKLQkJCQkJY3J0Y19yb2ktPngsIGNydGNfcm9pLT55 LAotCQkJCQljcnRjX3JvaS0+dywgY3J0Y19yb2ktPmgpOwotCQkJcmV0dXJuIC1FMkJJRzsKLQkJ fQotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9kcHVfY3J0Y19jaGVja19yb2lz KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkK LXsKLQlzdHJ1Y3QgZHB1X2NydGMgKmRwdV9jcnRjOwotCWludCBsbV9pZHg7Ci0JaW50IHJjOwot Ci0JaWYgKCFjcnRjIHx8ICFzdGF0ZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlkcHVfY3J0YyA9 IHRvX2RwdV9jcnRjKGNydGMpOwotCi0JcmMgPSBfZHB1X2NydGNfc2V0X2NydGNfcm9pKGNydGMs IHN0YXRlKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQotCXJjID0gX2RwdV9jcnRjX2NoZWNr X2F1dG9yZWZyZXNoKGNydGMsIHN0YXRlKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQotCWZv ciAobG1faWR4ID0gMDsgbG1faWR4IDwgZHB1X2NydGMtPm51bV9taXhlcnM7IGxtX2lkeCsrKSB7 Ci0JCXJjID0gX2RwdV9jcnRjX3NldF9sbV9yb2koY3J0Yywgc3RhdGUsIGxtX2lkeCk7Ci0JCWlm IChyYykKLQkJCXJldHVybiByYzsKLQl9Ci0KLQlyYyA9IF9kcHVfY3J0Y19jaGVja19yb2lzX2Nl bnRlcmVkX2FuZF9zeW1tZXRyaWMoY3J0Yywgc3RhdGUpOwotCWlmIChyYykKLQkJcmV0dXJuIHJj OwotCi0JcmMgPSBfZHB1X2NydGNfY2hlY2tfcGxhbmVzX3dpdGhpbl9jcnRjX3JvaShjcnRjLCBz dGF0ZSk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGlj IHZvaWQgX2RwdV9jcnRjX3Byb2dyYW1fbG1fb3V0cHV0X3JvaShzdHJ1Y3QgZHJtX2NydGMgKmNy dGMpCiB7CiAJc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YzsKIAlzdHJ1Y3QgZHB1X2NydGNfc3Rh dGUgKmNydGNfc3RhdGU7Ci0JY29uc3Qgc3RydWN0IGRwdV9yZWN0ICpsbV9yb2k7Ci0Jc3RydWN0 IGRwdV9od19taXhlciAqaHdfbG07CiAJaW50IGxtX2lkeCwgbG1faG9yaXpfcG9zaXRpb247CiAK LQlpZiAoIWNydGMpCi0JCXJldHVybjsKLQogCWRwdV9jcnRjID0gdG9fZHB1X2NydGMoY3J0Yyk7 CiAJY3J0Y19zdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKIAogCWxtX2hv cml6X3Bvc2l0aW9uID0gMDsKIAlmb3IgKGxtX2lkeCA9IDA7IGxtX2lkeCA8IGRwdV9jcnRjLT5u dW1fbWl4ZXJzOyBsbV9pZHgrKykgeworCQljb25zdCBzdHJ1Y3QgZHB1X3JlY3QgKmxtX3JvaSA9 ICZjcnRjX3N0YXRlLT5sbV9ib3VuZHNbbG1faWR4XTsKKwkJc3RydWN0IGRwdV9od19taXhlciAq aHdfbG0gPSBkcHVfY3J0Yy0+bWl4ZXJzW2xtX2lkeF0uaHdfbG07CiAJCXN0cnVjdCBkcHVfaHdf bWl4ZXJfY2ZnIGNmZzsKIAotCQlsbV9yb2kgPSAmY3J0Y19zdGF0ZS0+bG1fcm9pW2xtX2lkeF07 Ci0JCWh3X2xtID0gZHB1X2NydGMtPm1peGVyc1tsbV9pZHhdLmh3X2xtOwotCi0JCURQVV9FVlQz MihEUk1JRChjcnRjX3N0YXRlLT5iYXNlLmNydGMpLCBsbV9pZHgsCi0JCQlsbV9yb2ktPngsIGxt X3JvaS0+eSwgbG1fcm9pLT53LCBsbV9yb2ktPmgpOwotCiAJCWlmIChkcHVfa21zX3JlY3RfaXNf bnVsbChsbV9yb2kpKQogCQkJY29udGludWU7CiAKLQkJaHdfbG0tPmNmZy5vdXRfd2lkdGggPSBs bV9yb2ktPnc7Ci0JCWh3X2xtLT5jZmcub3V0X2hlaWdodCA9IGxtX3JvaS0+aDsKLQkJaHdfbG0t PmNmZy5yaWdodF9taXhlciA9IGxtX2hvcml6X3Bvc2l0aW9uOwotCiAJCWNmZy5vdXRfd2lkdGgg PSBsbV9yb2ktPnc7CiAJCWNmZy5vdXRfaGVpZ2h0ID0gbG1fcm9pLT5oOwogCQljZmcucmlnaHRf bWl4ZXIgPSBsbV9ob3Jpel9wb3NpdGlvbisrOwpAQCAtMTM2MSw3MCArOTIwLDcgQEAgc3RhdGlj IHZvaWQgX2RwdV9jcnRjX2JsZW5kX3NldHVwX21peGVyKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywK IAkJCQkJbWl4ZXIsICZjc3RhdGUtPmRpbV9sYXllcltpXSk7CiAJfQogCi0JX2RwdV9jcnRjX3By b2dyYW1fbG1fb3V0cHV0X3JvaShjcnRjKTsKLX0KLQotc3RhdGljIHZvaWQgX2RwdV9jcnRjX3N3 YXBfbWl4ZXJzX2Zvcl9yaWdodF9wYXJ0aWFsX3VwZGF0ZSgKLQkJc3RydWN0IGRybV9jcnRjICpj cnRjKQotewotCXN0cnVjdCBkcHVfY3J0YyAqZHB1X2NydGM7Ci0Jc3RydWN0IGRwdV9jcnRjX3N0 YXRlICpjc3RhdGU7Ci0Jc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jOwotCWJvb2wgaXNfcmln aHRfb25seTsKLQlib29sIGVuY29kZXJfaW5fZHNjX21lcmdlID0gZmFsc2U7Ci0KLQlpZiAoIWNy dGMgfHwgIWNydGMtPnN0YXRlKQotCQlyZXR1cm47Ci0KLQlkcHVfY3J0YyA9IHRvX2RwdV9jcnRj KGNydGMpOwotCWNzdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKLQotCWlm IChkcHVfY3J0Yy0+bnVtX21peGVycyAhPSBDUlRDX0RVQUxfTUlYRVJTKQotCQlyZXR1cm47Ci0K LQlkcm1fZm9yX2VhY2hfZW5jb2Rlcihkcm1fZW5jLCBjcnRjLT5kZXYpIHsKLQkJaWYgKGRybV9l bmMtPmNydGMgPT0gY3J0YyAmJgotCQkJCWRwdV9lbmNvZGVyX2lzX2RzY19tZXJnZShkcm1fZW5j KSkgewotCQkJZW5jb2Rlcl9pbl9kc2NfbWVyZ2UgPSB0cnVlOwotCQkJYnJlYWs7Ci0JCX0KLQl9 Ci0KLQkvKioKLQkgKiBGb3IgcmlnaHQtb25seSBwYXJ0aWFsIHVwZGF0ZSB3aXRoIERTQyBtZXJn ZSwgd2Ugc3dhcCBMTTAgJiBMTTEuCi0JICogVGhpcyBpcyBkdWUgdG8gdHdvIHJlYXNvbnM6Ci0J ICogLSBPbiA4OTk2LCB0aGVyZSBpcyBhIERTQyBIVyByZXF1aXJlbWVudCB0aGF0IGluIERTQyBN ZXJnZSBNb2RlLAotCSAqICAgdGhlIGxlZnQgRFNDIG11c3QgYmUgdXNlZCwgcmlnaHQgRFNDIGNh bm5vdCBiZSB1c2VkIGFsb25lLgotCSAqICAgRm9yIHJpZ2h0LW9ubHkgcGFydGlhbCB1cGRhdGUs IHRoaXMgbWVhbnMgc3dhcCBsYXllciBtaXhlcnMgdG8gbWFwCi0JICogICBMZWZ0IExNIHRvIFJp Z2h0IElOVEYuIE9uIGxhdGVyIEhXIHRoaXMgd2FzIHJlbGF4ZWQuCi0JICogLSBJbiBEU0MgTWVy Z2UgbW9kZSwgdGhlIHBoeXNpY2FsIGVuY29kZXIgaGFzIGFscmVhZHkgcmVnaXN0ZXJlZAotCSAq ICAgUFAwIGFzIHRoZSBtYXN0ZXIsIHRvIHN3aXRjaCB0byByaWdodC1vbmx5IHdlIHdvdWxkIGhh dmUgdG8KLQkgKiAgIHJlcHJvZ3JhbSB0byBiZSBkcml2ZW4gYnkgUFAxIGluc3RlYWQuCi0JICog VG8gc3VwcG9ydCBib3RoIGNhc2VzLCB3ZSBwcmVmZXIgdG8gc3VwcG9ydCB0aGUgbWl4ZXIgc3dh cCBzb2x1dGlvbi4KLQkgKi8KLQlpZiAoIWVuY29kZXJfaW5fZHNjX21lcmdlKQotCQlyZXR1cm47 Ci0KLQlpc19yaWdodF9vbmx5ID0gZHB1X2ttc19yZWN0X2lzX251bGwoJmNzdGF0ZS0+bG1fcm9p WzBdKSAmJgotCQkJIWRwdV9rbXNfcmVjdF9pc19udWxsKCZjc3RhdGUtPmxtX3JvaVsxXSk7Ci0K LQlpZiAoaXNfcmlnaHRfb25seSAmJiAhZHB1X2NydGMtPm1peGVyc19zd2FwcGVkKSB7Ci0JCS8q IHJpZ2h0LW9ubHkgdXBkYXRlIHN3YXAgbWl4ZXJzICovCi0JCXN3YXAoZHB1X2NydGMtPm1peGVy c1swXSwgZHB1X2NydGMtPm1peGVyc1sxXSk7Ci0JCWRwdV9jcnRjLT5taXhlcnNfc3dhcHBlZCA9 IHRydWU7Ci0JfSBlbHNlIGlmICghaXNfcmlnaHRfb25seSAmJiBkcHVfY3J0Yy0+bWl4ZXJzX3N3 YXBwZWQpIHsKLQkJLyogbGVmdC1vbmx5IG9yIGZ1bGwgdXBkYXRlLCBzd2FwIGJhY2sgKi8KLQkJ c3dhcChkcHVfY3J0Yy0+bWl4ZXJzWzBdLCBkcHVfY3J0Yy0+bWl4ZXJzWzFdKTsKLQkJZHB1X2Ny dGMtPm1peGVyc19zd2FwcGVkID0gZmFsc2U7Ci0JfQotCi0JRFBVX0RFQlVHKCIlczogcmlnaHRf b25seSAlZCBzd2FwcGVkICVkLCBtaXgwLT5sbSVkLCBtaXgxLT5sbSVkXG4iLAotCQkJZHB1X2Ny dGMtPm5hbWUsIGlzX3JpZ2h0X29ubHksIGRwdV9jcnRjLT5taXhlcnNfc3dhcHBlZCwKLQkJCWRw dV9jcnRjLT5taXhlcnNbMF0uaHdfbG0tPmlkeCAtIExNXzAsCi0JCQlkcHVfY3J0Yy0+bWl4ZXJz WzFdLmh3X2xtLT5pZHggLSBMTV8wKTsKLQlEUFVfRVZUMzIoRFJNSUQoY3J0YyksIGlzX3JpZ2h0 X29ubHksIGRwdV9jcnRjLT5taXhlcnNfc3dhcHBlZCwKLQkJCWRwdV9jcnRjLT5taXhlcnNbMF0u aHdfbG0tPmlkeCAtIExNXzAsCi0JCQlkcHVfY3J0Yy0+bWl4ZXJzWzFdLmh3X2xtLT5pZHggLSBM TV8wKTsKKwkgX2RwdV9jcnRjX3Byb2dyYW1fbG1fb3V0cHV0X3JvaShjcnRjKTsKIH0KIAogLyoq CkBAIC0xNDcyLDI3ICs5NjgsMTUgQEAgc3RhdGljIHZvaWQgX2RwdV9jcnRjX2JsZW5kX3NldHVw KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAkJCWxtLT5vcHMuY2xlYXJfZGltX2xheWVyKGxtKTsK IAl9CiAKLQlfZHB1X2NydGNfc3dhcF9taXhlcnNfZm9yX3JpZ2h0X3BhcnRpYWxfdXBkYXRlKGNy dGMpOwotCiAJLyogaW5pdGlhbGl6ZSBzdGFnZSBjZmcgKi8KIAltZW1zZXQoJmRwdV9jcnRjLT5z dGFnZV9jZmcsIDAsIHNpemVvZihzdHJ1Y3QgZHB1X2h3X3N0YWdlX2NmZykpOwogCiAJX2RwdV9j cnRjX2JsZW5kX3NldHVwX21peGVyKGNydGMsIGRwdV9jcnRjLCBtaXhlcik7CiAKIAlmb3IgKGkg PSAwOyBpIDwgZHB1X2NydGMtPm51bV9taXhlcnM7IGkrKykgewotCQljb25zdCBzdHJ1Y3QgZHB1 X3JlY3QgKmxtX3JvaSA9ICZkcHVfY3J0Y19zdGF0ZS0+bG1fcm9pW2ldOwotCiAJCWN0bCA9IG1p eGVyW2ldLmh3X2N0bDsKIAkJbG0gPSBtaXhlcltpXS5od19sbTsKIAotCQlpZiAoZHB1X2ttc19y ZWN0X2lzX251bGwobG1fcm9pKSkgewotCQkJRFBVX0RFQlVHKAotCQkJCSIlczogbG0lZCBsZWF2 ZSBjdGwlZCBtYXNrIDAgc2luY2UgbnVsbCByb2lcbiIsCi0JCQkJCWRwdV9jcnRjLT5uYW1lLCBs bS0+aWR4IC0gTE1fMCwKLQkJCQkJY3RsLT5pZHggLSBDVExfMCk7Ci0JCQljb250aW51ZTsKLQkJ fQotCiAJCWxtLT5vcHMuc2V0dXBfYWxwaGFfb3V0KGxtLCBtaXhlcltpXS5taXhlcl9vcF9tb2Rl KTsKIAogCQltaXhlcltpXS5mbHVzaF9tYXNrIHw9IGN0bC0+b3BzLmdldF9iaXRtYXNrX21peGVy KGN0bCwKQEAgLTE1MTAsOCArOTk0LDYgQEAgc3RhdGljIHZvaWQgX2RwdV9jcnRjX2JsZW5kX3Nl dHVwKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAkJY3RsLT5vcHMuc2V0dXBfYmxlbmRzdGFnZShj dGwsIG1peGVyW2ldLmh3X2xtLT5pZHgsCiAJCQkmZHB1X2NydGMtPnN0YWdlX2NmZyk7CiAJfQot Ci0JX2RwdV9jcnRjX3Byb2dyYW1fbG1fb3V0cHV0X3JvaShjcnRjKTsKIH0KIAogLyoqCkBAIC0y NjY0LDE0ICsyMTQ2LDkgQEAgc3RhdGljIHZvaWQgX2RwdV9jcnRjX3NldHVwX2xtX2JvdW5kcyhz dHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCWNzdGF0ZS0+bG1fYm91bmRzW2ldLncgPSBjcnRjX3Nw bGl0X3dpZHRoOwogCQljc3RhdGUtPmxtX2JvdW5kc1tpXS5oID0KIAkJCWRwdV9jcnRjX2dldF9t aXhlcl9oZWlnaHQoZHB1X2NydGMsIGNzdGF0ZSwgYWRqX21vZGUpOwotCQltZW1jcHkoJmNzdGF0 ZS0+bG1fcm9pW2ldLCAmY3N0YXRlLT5sbV9ib3VuZHNbaV0sCi0JCQkJc2l6ZW9mKGNzdGF0ZS0+ bG1fcm9pW2ldKSk7CiAJCURQVV9FVlQzMl9WRVJCT1NFKERSTUlEKGNydGMpLCBpLAogCQkJCWNz dGF0ZS0+bG1fYm91bmRzW2ldLngsIGNzdGF0ZS0+bG1fYm91bmRzW2ldLnksCiAJCQkJY3N0YXRl LT5sbV9ib3VuZHNbaV0udywgY3N0YXRlLT5sbV9ib3VuZHNbaV0uaCk7Ci0JCURQVV9ERUJVRygi JXM6IGxtJWQgYm5kJnJvaSAoJWQsJWQsJWQsJWQpXG4iLCBkcHVfY3J0Yy0+bmFtZSwgaSwKLQkJ CQljc3RhdGUtPmxtX3JvaVtpXS54LCBjc3RhdGUtPmxtX3JvaVtpXS55LAotCQkJCWNzdGF0ZS0+ bG1fcm9pW2ldLncsIGNzdGF0ZS0+bG1fcm9pW2ldLmgpOwogCX0KIAogCWRybV9tb2RlX2RlYnVn X3ByaW50bW9kZWxpbmUoYWRqX21vZGUpOwpAQCAtMzAxOSw4ICsyNDk2LDYgQEAgdm9pZCBkcHVf Y3J0Y19jb21taXRfa2lja29mZihzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAJCSAqIElmIHNvLCBp dCBtYXkgZGVsYXkgYW5kIGZsdXNoIGF0IGFuIGlycSBldmVudCAoZS5nLiBwcGRvbmUpCiAJCSAq LwogCQlwYXJhbXMuaW5saW5lX3JvdGF0ZV9wcmVmaWxsID0gY3N0YXRlLT5zYnVmX3ByZWZpbGxf bGluZTsKLQkJcGFyYW1zLmFmZmVjdGVkX2Rpc3BsYXlzID0gX2RwdV9jcnRjX2dldF9kaXNwbGF5 c19hZmZlY3RlZChjcnRjLAotCQkJCWNydGMtPnN0YXRlKTsKIAkJZHB1X2VuY29kZXJfcHJlcGFy ZV9mb3Jfa2lja29mZihlbmNvZGVyLCAmcGFyYW1zKTsKIAogCQkvKgpAQCAtMzkzMSwxMiArMzQw Niw2IEBAIHN0YXRpYyBpbnQgZHB1X2NydGNfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fY3J0YyAq Y3J0YywKIAkJfQogCX0KIAotCXJjID0gX2RwdV9jcnRjX2NoZWNrX3JvaXMoY3J0Yywgc3RhdGUp OwotCWlmIChyYykgewotCQlEUFVfRVJST1IoImNydGMlZCBmYWlsZWQgcm9pIGNoZWNrICVkXG4i LCBjcnRjLT5iYXNlLmlkLCByYyk7Ci0JCWdvdG8gZW5kOwotCX0KLQogZW5kOgogCV9kcHVfY3J0 Y19ycF9mcmVlX3VudXNlZCgmY3N0YXRlLT5ycCk7CiAJcmV0dXJuIHJjOwpAQCAtNDA2Niw5ICsz NTM1LDYgQEAgc3RhdGljIHZvaWQgZHB1X2NydGNfaW5zdGFsbF9wcm9wZXJ0aWVzKHN0cnVjdCBk cm1fY3J0YyAqY3J0YywKIAltc21fcHJvcGVydHlfaW5zdGFsbF9ibG9iKCZkcHVfY3J0Yy0+cHJv cGVydHlfaW5mbywgImNhcGFiaWxpdGllcyIsCiAJCURSTV9NT0RFX1BST1BfSU1NVVRBQkxFLCBD UlRDX1BST1BfSU5GTyk7CiAKLQltc21fcHJvcGVydHlfaW5zdGFsbF92b2xhdGlsZV9yYW5nZSgm ZHB1X2NydGMtPnByb3BlcnR5X2luZm8sCi0JCSJkcHVfZHJtX3JvaV92MSIsIDB4MCwgMCwgfjAs IDAsIENSVENfUFJPUF9ST0lfVjEpOwotCiAJZHB1X2ttc19pbmZvX3Jlc2V0KGluZm8pOwogCiAJ aWYgKGNhdGFsb2ctPmhhc19kaW1fbGF5ZXIpIHsKQEAgLTQyMTcsMTAgKzM2ODMsNiBAQCBzdGF0 aWMgaW50IGRwdV9jcnRjX2F0b21pY19zZXRfcHJvcGVydHkoc3RydWN0IGRybV9jcnRjICpjcnRj LAogCQkJCV9kcHVfY3J0Y19zZXRfZGltX2xheWVyX3YxKGNzdGF0ZSwKIAkJCQkJCQkodm9pZCBf X3VzZXIgKil2YWwpOwogCQkJCWJyZWFrOwotCQkJY2FzZSBDUlRDX1BST1BfUk9JX1YxOgotCQkJ CXJldCA9IF9kcHVfY3J0Y19zZXRfcm9pX3YxKHN0YXRlLAotCQkJCQkJCSh2b2lkIF9fdXNlciAq KXZhbCk7Ci0JCQkJYnJlYWs7CiAJCQljYXNlIENSVENfUFJPUF9ERVNUX1NDQUxFUjoKIAkJCQly ZXQgPSBfZHB1X2NydGNfc2V0X2Rlc3Rfc2NhbGVyKGRwdV9jcnRjLAogCQkJCQkJY3N0YXRlLCAo dm9pZCBfX3VzZXIgKil2YWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2NydGMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRj LmgKaW5kZXggYjYzZGYyNC4uMTVlM2ViNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2NydGMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfY3J0Yy5oCkBAIC0zNDUsMTMgKzM0NSw4IEBAIHN0cnVjdCBkcHVfY3J0Y19yZXNwb29s IHsKICAqIEBpc19wcHNwbGl0ICAgIDogV2hldGhlciBjdXJyZW50IHRvcG9sb2d5IHJlcXVpcmVz IFBQU3BsaXQgc3BlY2lhbCBoYW5kbGluZwogICogQGJ3X2NvbnRyb2wgICAgOiB0cnVlIGlmIGJ3 L2NsayBjb250cm9sbGVkIGJ5IGNvcmUgYncvY2xrIHByb3BlcnRpZXMKICAqIEBid19zcGxpdF92 b3RlIDogdHJ1ZSBpZiBidyBjb250cm9sbGVkIGJ5IGxsY2MvZHJhbSBidyBwcm9wZXJ0aWVzCi0g KiBAY3J0Y19yb2kgICAgICA6IEN1cnJlbnQgQ1JUQyBST0kuIFBvc3NpYmx5IHN1Yi1yZWN0YW5n bGUgb2YgbW9kZS4KLSAqICAgICAgICAgICAgICAgICAgT3JpZ2luIHRvcCBsZWZ0IG9mIENSVEMu CiAgKiBAbG1fYm91bmRzICAgICA6IExNIGJvdW5kYXJpZXMgYmFzZWQgb24gY3VycmVudCBtb2Rl IGZ1bGwgcmVzb2x1dGlvbiwgbm8gUk9JLgogICogICAgICAgICAgICAgICAgICBPcmlnaW4gdG9w IGxlZnQgb2YgQ1JUQy4KLSAqIEBsbV9yb2kgICAgICAgIDogQ3VycmVudCBMTSBST0ksIHBvc3Np Ymx5IHN1Yi1yZWN0YW5nbGUgb2YgbW9kZS4KLSAqICAgICAgICAgICAgICAgICAgT3JpZ2luIHRv cCBsZWZ0IG9mIENSVEMuCi0gKiBAdXNlcl9yb2lfbGlzdCA6IExpc3Qgb2YgdXNlcidzIHJlcXVl c3RlZCBST0lzIGFzIGZyb20gc2V0IHByb3BlcnR5CiAgKiBAcHJvcGVydHlfc3RhdGU6IExvY2Fs IHN0b3JhZ2UgZm9yIG1zbV9wcm9wIHByb3BlcnRpZXMKICAqIEBwcm9wZXJ0eV92YWx1ZXM6IEN1 cnJlbnQgY3J0YyBwcm9wZXJ0eSB2YWx1ZXMKICAqIEBpbnB1dF9mZW5jZV90aW1lb3V0X25zIDog Q2FjaGVkIGlucHV0IGZlbmNlIHRpbWVvdXQsIGluIG5zCkBAIC0zNzYsMTAgKzM3MSw3IEBAIHN0 cnVjdCBkcHVfY3J0Y19zdGF0ZSB7CiAJYm9vbCBid19zcGxpdF92b3RlOwogCiAJYm9vbCBpc19w cHNwbGl0OwotCXN0cnVjdCBkcHVfcmVjdCBjcnRjX3JvaTsKIAlzdHJ1Y3QgZHB1X3JlY3QgbG1f Ym91bmRzW0NSVENfRFVBTF9NSVhFUlNdOwotCXN0cnVjdCBkcHVfcmVjdCBsbV9yb2lbQ1JUQ19E VUFMX01JWEVSU107Ci0Jc3RydWN0IG1zbV9yb2lfbGlzdCB1c2VyX3JvaV9saXN0OwogCiAJc3Ry dWN0IG1zbV9wcm9wZXJ0eV9zdGF0ZSBwcm9wZXJ0eV9zdGF0ZTsKIAlzdHJ1Y3QgbXNtX3Byb3Bl cnR5X3ZhbHVlIHByb3BlcnR5X3ZhbHVlc1tDUlRDX1BST1BfQ09VTlRdOwpAQCAtNjA1LDE0ICs1 OTcsNCBAQCBpbnQgZHB1X2NydGNfcmVzX2FkZChzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRl LCB1MzIgdHlwZSwgdTY0IHRhZywKICAqLwogdm9pZCBkcHVfY3J0Y19yZXNfcHV0KHN0cnVjdCBk cm1fY3J0Y19zdGF0ZSAqc3RhdGUsIHUzMiB0eXBlLCB1NjQgdGFnKTsKIAotLyoqCi0gKiBkcHVf Y3J0Y19nZXRfY3J0Y19yb2kgLSByZXRyaWV2ZSB0aGUgY3J0Y19yb2kgZnJvbSB0aGUgZ2l2ZW4g c3RhdGUgb2JqZWN0Ci0gKgl1c2VkIHRvIGFsbG93IHRoZSBwbGFuZXMgdG8gYWRqdXN0IHRoZWly IGZpbmFsIGxtIG91dF94eSB2YWx1ZSBpbiB0aGUKLSAqCWNhc2Ugb2YgcGFydGlhbCB1cGRhdGUK LSAqIEBjcnRjX3N0YXRlOiBQb2ludGVyIHRvIGNydGMgc3RhdGUKLSAqIEBjcnRjX3JvaTogT3V0 cHV0IHBvaW50ZXIgdG8gY3J0YyByb2kgaW4gdGhlIGdpdmVuIHN0YXRlCi0gKi8KLXZvaWQgZHB1 X2NydGNfZ2V0X2NydGNfcm9pKHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUsCi0JCWNvbnN0 IHN0cnVjdCBkcHVfcmVjdCAqKmNydGNfcm9pKTsKLQogI2VuZGlmIC8qIF9EUFVfQ1JUQ19IXyAq LwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIu YyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmMKaW5kZXggM2Qx NjhmYTAuLjY4Y2YxNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9lbmNvZGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2Vu Y29kZXIuYwpAQCAtMTk1LDggKzE5NSw2IEBAIGVudW0gZHB1X2VuY19yY19zdGF0ZXMgewogICog QHRvcG9sb2d5OiAgICAgICAgICAgICAgICAgICB0b3BvbG9neSBvZiB0aGUgZGlzcGxheQogICog QG1vZGVfc2V0X2NvbXBsZXRlOiAgICAgICAgICBmbGFnIHRvIGluZGljYXRlIG1vZGVzZXQgY29t cGxldGlvbgogICogQHJzY19jb25maWc6CQkJcnNjIGNvbmZpZ3VyYXRpb24gZm9yIGRpc3BsYXkg dnRvdGFsLCBmcHMsIGV0Yy4KLSAqIEBjdXJfY29ubl9yb2k6CQljdXJyZW50IGNvbm5lY3RvciBy b2kKLSAqIEBwcnZfY29ubl9yb2k6CQlwcmV2aW91cyBjb25uZWN0b3Igcm9pIHRvIG9wdGltaXpl IGlmIHVuY2hhbmdlZAogICogQGlkbGVfdGltZW91dDoJCWlkbGUgdGltZW91dCBkdXJhdGlvbiBp biBtaWxsaXNlY29uZHMKICAqLwogc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgewpAQCAtMjQzLDgg KzI0MSw2IEBAIHN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0IHsKIAlib29sIG1vZGVfc2V0X2NvbXBs ZXRlOwogCiAJc3RydWN0IGRwdV9yc2NfY21kX2NvbmZpZyByc2NfY29uZmlnOwotCXN0cnVjdCBk cHVfcmVjdCBjdXJfY29ubl9yb2k7Ci0Jc3RydWN0IGRwdV9yZWN0IHBydl9jb25uX3JvaTsKIAog CXUzMiBpZGxlX3RpbWVvdXQ7CiB9OwpAQCAtODY4LDE0ICs4NjQsOCBAQCBzdGF0aWMgYm9vbCBf ZHB1X2VuY29kZXJfZHNjX2ljaF9yZXNldF9vdmVycmlkZV9uZWVkZWQoYm9vbCBwdV9lbiwKIAog c3RhdGljIHZvaWQgX2RwdV9lbmNvZGVyX2RzY19waXBlX2NmZyhzdHJ1Y3QgZHB1X2h3X2RzYyAq aHdfZHNjLAogCQlzdHJ1Y3QgZHB1X2h3X3Bpbmdwb25nICpod19wcCwgc3RydWN0IG1zbV9kaXNw bGF5X2RzY19pbmZvICpkc2MsCi0JCXUzMiBjb21tb25fbW9kZSwgYm9vbCBpY2hfcmVzZXQsIGJv b2wgZW5hYmxlKQorCQl1MzIgY29tbW9uX21vZGUsIGJvb2wgaWNoX3Jlc2V0KQogewotCWlmICgh ZW5hYmxlKSB7Ci0JCWlmIChod19wcC0+b3BzLmRpc2FibGVfZHNjKQotCQkJaHdfcHAtPm9wcy5k aXNhYmxlX2RzYyhod19wcCk7Ci0JCXJldHVybjsKLQl9Ci0KIAlpZiAoaHdfZHNjLT5vcHMuZHNj X2NvbmZpZykKIAkJaHdfZHNjLT5vcHMuZHNjX2NvbmZpZyhod19kc2MsIGRzYywgY29tbW9uX21v ZGUsIGljaF9yZXNldCk7CiAKQEAgLTg4OSwyNyArODc5LDkgQEAgc3RhdGljIHZvaWQgX2RwdV9l bmNvZGVyX2RzY19waXBlX2NmZyhzdHJ1Y3QgZHB1X2h3X2RzYyAqaHdfZHNjLAogCQlod19wcC0+ b3BzLmVuYWJsZV9kc2MoaHdfcHApOwogfQogCi1zdGF0aWMgdm9pZCBfZHB1X2VuY29kZXJfZ2V0 X2Nvbm5lY3Rvcl9yb2koCi0JCXN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jLAotCQlz dHJ1Y3QgZHB1X3JlY3QgKm1lcmdlZF9jb25uX3JvaSkKLXsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqZHJtX2Nvbm47Ci0Jc3RydWN0IGRwdV9jb25uZWN0b3Jfc3RhdGUgKmNfc3RhdGU7Ci0KLQlp ZiAoIWRwdV9lbmMgfHwgIW1lcmdlZF9jb25uX3JvaSkKLQkJcmV0dXJuOwotCi0JZHJtX2Nvbm4g PSBkcHVfZW5jLT5waHlzX2VuY3NbMF0tPmNvbm5lY3RvcjsKLQotCWlmICghZHJtX2Nvbm4gfHwg IWRybV9jb25uLT5zdGF0ZSkKLQkJcmV0dXJuOwotCi0JY19zdGF0ZSA9IHRvX2RwdV9jb25uZWN0 b3Jfc3RhdGUoZHJtX2Nvbm4tPnN0YXRlKTsKLQlkcHVfa21zX3JlY3RfbWVyZ2VfcmVjdGFuZ2xl cygmY19zdGF0ZS0+cm9pcywgbWVyZ2VkX2Nvbm5fcm9pKTsKLX0KLQogc3RhdGljIGludCBfZHB1 X2VuY29kZXJfZHNjX25fbG1fMV9lbmNfMV9pbnRmKHN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpk cHVfZW5jKQogeworCWludCBwaWNfd2lkdGgsIHBpY19oZWlnaHQ7CiAJaW50IHRoaXNfZnJhbWVf c2xpY2VzOwogCWludCBpbnRmX2lwX3csIGVuY19pcF93OwogCWludCBpY2hfcmVzLCBkc2NfY29t bW9uX21vZGUgPSAwOwpAQCAtOTE3LDE4ICs4ODksMjIgQEAgc3RhdGljIGludCBfZHB1X2VuY29k ZXJfZHNjX25fbG1fMV9lbmNfMV9pbnRmKHN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5j KQogCXN0cnVjdCBkcHVfaHdfcGluZ3BvbmcgKmh3X3BwID0gZHB1X2VuYy0+aHdfcHBbMF07CiAJ c3RydWN0IGRwdV9od19kc2MgKmh3X2RzYyA9IGRwdV9lbmMtPmh3X2RzY1swXTsKIAlzdHJ1Y3Qg ZHB1X2VuY29kZXJfcGh5cyAqZW5jX21hc3RlciA9IGRwdV9lbmMtPmN1cl9tYXN0ZXI7Ci0JY29u c3Qgc3RydWN0IGRwdV9yZWN0ICpyb2kgPSAmZHB1X2VuYy0+Y3VyX2Nvbm5fcm9pOworCXN0cnVj dCBkcHVfaHdfbWRwICpod19tZHBfdG9wICA9IGVuY19tYXN0ZXItPmh3X21kcHRvcDsKIAlzdHJ1 Y3QgbXNtX2Rpc3BsYXlfZHNjX2luZm8gKmRzYyA9CiAJCSZkcHVfZW5jLT5tb2RlX2luZm8uY29t cF9pbmZvLmRzY19pbmZvOwogCi0JaWYgKGRzYyA9PSBOVUxMIHx8IGh3X2RzYyA9PSBOVUxMIHx8 IGh3X3BwID09IE5VTEwgfHwgIWVuY19tYXN0ZXIpIHsKKwlpZiAoZHNjID09IE5VTEwgfHwgaHdf ZHNjID09IE5VTEwgfHwgaHdfcHAgPT0gTlVMTCB8fAorCQkJCQkJaHdfbWRwX3RvcCA9PSBOVUxM KSB7CiAJCURQVV9FUlJPUl9FTkMoZHB1X2VuYywgImludmFsaWQgcGFyYW1zIGZvciBEU0NcbiIp OwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlfZHB1X2VuY29kZXJfZHNjX3VwZGF0ZV9waWNf ZGltKGRzYywgcm9pLT53LCByb2ktPmgpOworCXBpY193aWR0aCA9IGRzYy0+cGljX3dpZHRoOwor CXBpY19oZWlnaHQgPSBkc2MtPnBpY19oZWlnaHQ7CiAKLQl0aGlzX2ZyYW1lX3NsaWNlcyA9IHJv aS0+dyAvIGRzYy0+c2xpY2Vfd2lkdGg7CisJX2RwdV9lbmNvZGVyX2RzY191cGRhdGVfcGljX2Rp bShkc2MsIHBpY193aWR0aCwgcGljX2hlaWdodCk7CisKKwl0aGlzX2ZyYW1lX3NsaWNlcyA9IHBp Y193aWR0aCAvIGRzYy0+c2xpY2Vfd2lkdGg7CiAJaW50Zl9pcF93ID0gdGhpc19mcmFtZV9zbGlj ZXMgKiBkc2MtPnNsaWNlX3dpZHRoOwogCV9kcHVfZW5jb2Rlcl9kc2NfcGNsa19wYXJhbV9jYWxj KGRzYywgaW50Zl9pcF93KTsKIApAQCAtOTQxLDIwNCArOTE3LDEzMyBAQCBzdGF0aWMgaW50IF9k cHVfZW5jb2Rlcl9kc2Nfbl9sbV8xX2VuY18xX2ludGYoc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQg KmRwdV9lbmMpCiAJCWRzY19jb21tb25fbW9kZSA9IERTQ19NT0RFX1ZJREVPOwogCiAJRFBVX0RF QlVHX0VOQyhkcHVfZW5jLCAicGljX3c6ICVkIHBpY19oOiAlZCBtb2RlOiVkXG4iLAotCQlyb2kt PncsIHJvaS0+aCwgZHNjX2NvbW1vbl9tb2RlKTsKLQlEUFVfRVZUMzIoRFJNSUQoJmRwdV9lbmMt PmJhc2UpLCByb2ktPncsIHJvaS0+aCwgZHNjX2NvbW1vbl9tb2RlKTsKKwkJcGljX3dpZHRoLCBw aWNfaGVpZ2h0LCBkc2NfY29tbW9uX21vZGUpOworCURQVV9FVlQzMihEUk1JRCgmZHB1X2VuYy0+ YmFzZSksIHBpY193aWR0aCwgcGljX2hlaWdodCwKKwkJCWRzY19jb21tb25fbW9kZSk7CiAKIAlf ZHB1X2VuY29kZXJfZHNjX3BpcGVfY2ZnKGh3X2RzYywgaHdfcHAsIGRzYywgZHNjX2NvbW1vbl9t b2RlLAotCQkJaWNoX3JlcywgdHJ1ZSk7CisJCQlpY2hfcmVzKTsKIAogCXJldHVybiAwOwogfQot Ci1zdGF0aWMgaW50IF9kcHVfZW5jb2Rlcl9kc2NfMl9sbV8yX2VuY18yX2ludGYoc3RydWN0IGRw dV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMsCi0JCXN0cnVjdCBkcHVfZW5jb2Rlcl9raWNrb2ZmX3Bh cmFtcyAqcGFyYW1zKQorc3RhdGljIGludCBfZHB1X2VuY29kZXJfZHNjXzJfbG1fMl9lbmNfMl9p bnRmKHN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jKQogeworCWludCBwaWNfd2lkdGgs IHBpY19oZWlnaHQ7CiAJaW50IHRoaXNfZnJhbWVfc2xpY2VzOwogCWludCBpbnRmX2lwX3csIGVu Y19pcF93OwogCWludCBpY2hfcmVzLCBkc2NfY29tbW9uX21vZGU7CiAKIAlzdHJ1Y3QgZHB1X2Vu Y29kZXJfcGh5cyAqZW5jX21hc3RlciA9IGRwdV9lbmMtPmN1cl9tYXN0ZXI7Ci0JY29uc3Qgc3Ry dWN0IGRwdV9yZWN0ICpyb2kgPSAmZHB1X2VuYy0+Y3VyX2Nvbm5fcm9pOwotCXN0cnVjdCBkcHVf aHdfZHNjICpod19kc2NbTUFYX0NIQU5ORUxTX1BFUl9FTkNdOwotCXN0cnVjdCBkcHVfaHdfcGlu Z3BvbmcgKmh3X3BwW01BWF9DSEFOTkVMU19QRVJfRU5DXTsKLQlzdHJ1Y3QgbXNtX2Rpc3BsYXlf ZHNjX2luZm8gZHNjW01BWF9DSEFOTkVMU19QRVJfRU5DXTsKLQlib29sIGhhbGZfcGFuZWxfcGFy dGlhbF91cGRhdGU7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0NIQU5ORUxTX1BF Ul9FTkM7IGkrKykgewotCQlod19wcFtpXSA9IGRwdV9lbmMtPmh3X3BwW2ldOwotCQlod19kc2Nb aV0gPSBkcHVfZW5jLT5od19kc2NbaV07CisJc3RydWN0IGRwdV9od19kc2MgKmxfaHdfZHNjID0g ZHB1X2VuYy0+aHdfZHNjWzBdOworCXN0cnVjdCBkcHVfaHdfZHNjICpyX2h3X2RzYyA9IGRwdV9l bmMtPmh3X2RzY1sxXTsKKwlzdHJ1Y3QgZHB1X2h3X3Bpbmdwb25nICpsX2h3X3BwID0gZHB1X2Vu Yy0+aHdfcHBbMF07CisJc3RydWN0IGRwdV9od19waW5ncG9uZyAqcl9od19wcCA9IGRwdV9lbmMt Pmh3X3BwWzFdOworCXN0cnVjdCBkcHVfaHdfbWRwICpod19tZHBfdG9wICA9IGVuY19tYXN0ZXIt Pmh3X21kcHRvcDsKKwlzdHJ1Y3QgbXNtX2Rpc3BsYXlfZHNjX2luZm8gKmRzYyA9CisJCSZkcHVf ZW5jLT5tb2RlX2luZm8uY29tcF9pbmZvLmRzY19pbmZvOwogCi0JCWlmICghaHdfcHBbaV0gfHwg IWh3X2RzY1tpXSkgewotCQkJRFBVX0VSUk9SX0VOQyhkcHVfZW5jLCAiaW52YWxpZCBwYXJhbXMg Zm9yIERTQ1xuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQorCWlmIChsX2h3X2RzYyA9PSBO VUxMIHx8IHJfaHdfZHNjID09IE5VTEwgfHwgaHdfbWRwX3RvcCA9PSBOVUxMIHx8CisJCWxfaHdf cHAgPT0gTlVMTCB8fCByX2h3X3BwID09IE5VTEwpIHsKKwkJRFBVX0VSUk9SX0VOQyhkcHVfZW5j LCAiaW52YWxpZCBwYXJhbXMgZm9yIERTQ1xuIik7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAot CWhhbGZfcGFuZWxfcGFydGlhbF91cGRhdGUgPQotCQkJaHdlaWdodF9sb25nKHBhcmFtcy0+YWZm ZWN0ZWRfZGlzcGxheXMpID09IDE7Ci0KLQlkc2NfY29tbW9uX21vZGUgPSAwOwotCWlmICghaGFs Zl9wYW5lbF9wYXJ0aWFsX3VwZGF0ZSkKLQkJZHNjX2NvbW1vbl9tb2RlIHw9IERTQ19NT0RFX1NQ TElUX1BBTkVMOwotCWlmIChlbmNfbWFzdGVyLT5pbnRmX21vZGUgPT0gSU5URl9NT0RFX1ZJREVP KQotCQlkc2NfY29tbW9uX21vZGUgfD0gRFNDX01PREVfVklERU87Ci0KLQltZW1jcHkoJmRzY1sw XSwgJmRwdV9lbmMtPm1vZGVfaW5mby5jb21wX2luZm8uZHNjX2luZm8sIHNpemVvZihkc2NbMF0p KTsKLQltZW1jcHkoJmRzY1sxXSwgJmRwdV9lbmMtPm1vZGVfaW5mby5jb21wX2luZm8uZHNjX2lu Zm8sIHNpemVvZihkc2NbMV0pKTsKLQotCS8qCi0JICogU2luY2UgYm90aCBEU0MgdXNlIHNhbWUg cGljIGRpbWVuc2lvbiwgc2V0IHNhbWUgcGljIGRpbWVuc2lvbgotCSAqIHRvIGJvdGggRFNDIHN0 cnVjdHVyZXMuCi0JICovCi0JX2RwdV9lbmNvZGVyX2RzY191cGRhdGVfcGljX2RpbSgmZHNjWzBd LCByb2ktPncsIHJvaS0+aCk7Ci0JX2RwdV9lbmNvZGVyX2RzY191cGRhdGVfcGljX2RpbSgmZHNj WzFdLCByb2ktPncsIHJvaS0+aCk7CisJcGljX3dpZHRoID0gZHNjLT5waWNfd2lkdGggKiBkcHVf ZW5jLT5kaXNwbGF5X251bV9vZl9oX3RpbGVzOworCXBpY19oZWlnaHQgPSBkc2MtPnBpY19oZWln aHQ7CiAKLQl0aGlzX2ZyYW1lX3NsaWNlcyA9IHJvaS0+dyAvIGRzY1swXS5zbGljZV93aWR0aDsK LQlpbnRmX2lwX3cgPSB0aGlzX2ZyYW1lX3NsaWNlcyAqIGRzY1swXS5zbGljZV93aWR0aDsKKwlf ZHB1X2VuY29kZXJfZHNjX3VwZGF0ZV9waWNfZGltKGRzYywgcGljX3dpZHRoLCBwaWNfaGVpZ2h0 KTsKIAotCWlmICghaGFsZl9wYW5lbF9wYXJ0aWFsX3VwZGF0ZSkKLQkJaW50Zl9pcF93IC89IDI7 CisJdGhpc19mcmFtZV9zbGljZXMgPSBwaWNfd2lkdGggLyBkc2MtPnNsaWNlX3dpZHRoOworCWlu dGZfaXBfdyA9IHRoaXNfZnJhbWVfc2xpY2VzICogZHNjLT5zbGljZV93aWR0aDsKIAotCS8qCi0J ICogSW4gdGhpcyB0b3BvbG9neSB3aGVuIGJvdGggaW50ZXJmYWNlcyBhcmUgYWN0aXZlLCB0aGV5 IGhhdmUgc2FtZQotCSAqIGxvYWQgc28gaW50Zl9pcF93IHdpbGwgYmUgc2FtZS4KLQkgKi8KLQlf ZHB1X2VuY29kZXJfZHNjX3BjbGtfcGFyYW1fY2FsYygmZHNjWzBdLCBpbnRmX2lwX3cpOwotCV9k cHVfZW5jb2Rlcl9kc2NfcGNsa19wYXJhbV9jYWxjKCZkc2NbMV0sIGludGZfaXBfdyk7CisJaW50 Zl9pcF93IC89IDI7CisJX2RwdV9lbmNvZGVyX2RzY19wY2xrX3BhcmFtX2NhbGMoZHNjLCBpbnRm X2lwX3cpOwogCi0JLyoKLQkgKiBJbiB0aGlzIHRvcG9sb2d5LCBzaW5jZSB0aGVyZSBpcyBubyBk c2NfbWVyZ2UsIHVuY29tcHJlc3NlZCBpbnB1dAotCSAqIHRvIGVuY29kZXIgYW5kIGludGVyZmFj ZSBpcyBzYW1lLgotCSAqLwogCWVuY19pcF93ID0gaW50Zl9pcF93OwotCV9kcHVfZW5jb2Rlcl9k c2NfaW5pdGlhbF9saW5lX2NhbGMoJmRzY1swXSwgZW5jX2lwX3cpOwotCV9kcHVfZW5jb2Rlcl9k c2NfaW5pdGlhbF9saW5lX2NhbGMoJmRzY1sxXSwgZW5jX2lwX3cpOworCV9kcHVfZW5jb2Rlcl9k c2NfaW5pdGlhbF9saW5lX2NhbGMoZHNjLCBlbmNfaXBfdyk7CiAKLQkvKgotCSAqIF9faXNfaWNo X3Jlc2V0X292ZXJyaWRlX25lZWRlZCBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIKLQkgKiB1 cGRhdGluZyBwaWMgZGltZW5zaW9uLCBtZHNzX3BhbmVsX2RzY191cGRhdGVfcGljX2RpbS4KLQkg Ki8KLQlpY2hfcmVzID0gX2RwdV9lbmNvZGVyX2RzY19pY2hfcmVzZXRfb3ZlcnJpZGVfbmVlZGVk KAotCQkJaGFsZl9wYW5lbF9wYXJ0aWFsX3VwZGF0ZSwgJmRzY1swXSk7CisJaWNoX3JlcyA9IF9k cHVfZW5jb2Rlcl9kc2NfaWNoX3Jlc2V0X292ZXJyaWRlX25lZWRlZChmYWxzZSwgZHNjKTsKIAot CURQVV9ERUJVR19FTkMoZHB1X2VuYywgInBpY193OiAlZCBwaWNfaDogJWQgbW9kZTolZFxuIiwK LQkJCXJvaS0+dywgcm9pLT5oLCBkc2NfY29tbW9uX21vZGUpOworCWRzY19jb21tb25fbW9kZSA9 IERTQ19NT0RFX1NQTElUX1BBTkVMOworCWlmIChlbmNfbWFzdGVyLT5pbnRmX21vZGUgPT0gSU5U Rl9NT0RFX1ZJREVPKQorCQlkc2NfY29tbW9uX21vZGUgfD0gRFNDX01PREVfVklERU87CiAKLQlm b3IgKGkgPSAwOyBpIDwgZHB1X2VuYy0+bnVtX3BoeXNfZW5jczsgaSsrKSB7Ci0JCWJvb2wgYWN0 aXZlID0gISEoKDEgPDwgaSkgJiBwYXJhbXMtPmFmZmVjdGVkX2Rpc3BsYXlzKTsKKwlEUFVfREVC VUdfRU5DKGRwdV9lbmMsICJwaWNfdzogJWQgcGljX2g6ICVkIG1vZGU6JWRcbiIsCisJCXBpY193 aWR0aCwgcGljX2hlaWdodCwgZHNjX2NvbW1vbl9tb2RlKTsKKwlEUFVfRVZUMzIoRFJNSUQoJmRw dV9lbmMtPmJhc2UpLCBwaWNfd2lkdGgsIHBpY19oZWlnaHQsCisJCQlkc2NfY29tbW9uX21vZGUp OwogCi0JCURQVV9FVlQzMihEUk1JRCgmZHB1X2VuYy0+YmFzZSksIHJvaS0+dywgcm9pLT5oLAot CQkJCWRzY19jb21tb25fbW9kZSwgaSwgYWN0aXZlKTsKLQkJX2RwdV9lbmNvZGVyX2RzY19waXBl X2NmZyhod19kc2NbaV0sIGh3X3BwW2ldLCAmZHNjW2ldLAotCQkJCWRzY19jb21tb25fbW9kZSwg aWNoX3JlcywgYWN0aXZlKTsKLQl9CisJX2RwdV9lbmNvZGVyX2RzY19waXBlX2NmZyhsX2h3X2Rz YywgbF9od19wcCwgZHNjLCBkc2NfY29tbW9uX21vZGUsCisJCQlpY2hfcmVzKTsKKwlfZHB1X2Vu Y29kZXJfZHNjX3BpcGVfY2ZnKHJfaHdfZHNjLCByX2h3X3BwLCBkc2MsIGRzY19jb21tb25fbW9k ZSwKKwkJCWljaF9yZXMpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX2RwdV9lbmNv ZGVyX2RzY18yX2xtXzJfZW5jXzFfaW50ZihzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2Vu YywKLQkJc3RydWN0IGRwdV9lbmNvZGVyX2tpY2tvZmZfcGFyYW1zICpwYXJhbXMpCitzdGF0aWMg aW50IF9kcHVfZW5jb2Rlcl9kc2NfMl9sbV8yX2VuY18xX2ludGYoc3RydWN0IGRwdV9lbmNvZGVy X3ZpcnQgKmRwdV9lbmMpCiB7CisJaW50IHBpY193aWR0aCwgcGljX2hlaWdodDsKIAlpbnQgdGhp c19mcmFtZV9zbGljZXM7CiAJaW50IGludGZfaXBfdywgZW5jX2lwX3c7CiAJaW50IGljaF9yZXMs IGRzY19jb21tb25fbW9kZTsKIAogCXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICplbmNfbWFzdGVy ID0gZHB1X2VuYy0+Y3VyX21hc3RlcjsKLQljb25zdCBzdHJ1Y3QgZHB1X3JlY3QgKnJvaSA9ICZk cHVfZW5jLT5jdXJfY29ubl9yb2k7Ci0Jc3RydWN0IGRwdV9od19kc2MgKmh3X2RzY1tNQVhfQ0hB Tk5FTFNfUEVSX0VOQ107Ci0Jc3RydWN0IGRwdV9od19waW5ncG9uZyAqaHdfcHBbTUFYX0NIQU5O RUxTX1BFUl9FTkNdOworCXN0cnVjdCBkcHVfaHdfZHNjICpsX2h3X2RzYyA9IGRwdV9lbmMtPmh3 X2RzY1swXTsKKwlzdHJ1Y3QgZHB1X2h3X2RzYyAqcl9od19kc2MgPSBkcHVfZW5jLT5od19kc2Nb MV07CisJc3RydWN0IGRwdV9od19waW5ncG9uZyAqbF9od19wcCA9IGRwdV9lbmMtPmh3X3BwWzBd OworCXN0cnVjdCBkcHVfaHdfcGluZ3BvbmcgKnJfaHdfcHAgPSBkcHVfZW5jLT5od19wcFsxXTsK KwlzdHJ1Y3QgZHB1X2h3X21kcCAqaHdfbWRwX3RvcCAgPSBlbmNfbWFzdGVyLT5od19tZHB0b3A7 CiAJc3RydWN0IG1zbV9kaXNwbGF5X2RzY19pbmZvICpkc2MgPQogCQkmZHB1X2VuYy0+bW9kZV9p bmZvLmNvbXBfaW5mby5kc2NfaW5mbzsKLQlib29sIGhhbGZfcGFuZWxfcGFydGlhbF91cGRhdGU7 Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0NIQU5ORUxTX1BFUl9FTkM7IGkrKykg ewotCQlod19wcFtpXSA9IGRwdV9lbmMtPmh3X3BwW2ldOwotCQlod19kc2NbaV0gPSBkcHVfZW5j LT5od19kc2NbaV07CiAKLQkJaWYgKCFod19wcFtpXSB8fCAhaHdfZHNjW2ldKSB7Ci0JCQlEUFVf RVJST1JfRU5DKGRwdV9lbmMsICJpbnZhbGlkIHBhcmFtcyBmb3IgRFNDXG4iKTsKLQkJCXJldHVy biAtRUlOVkFMOwotCQl9CisJaWYgKGxfaHdfZHNjID09IE5VTEwgfHwgcl9od19kc2MgPT0gTlVM TCB8fCBod19tZHBfdG9wID09IE5VTEwgfHwKKwkJCQkJbF9od19wcCA9PSBOVUxMIHx8IHJfaHdf cHAgPT0gTlVMTCkgeworCQlEUFVfRVJST1JfRU5DKGRwdV9lbmMsICJpbnZhbGlkIHBhcmFtcyBm b3IgRFNDXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaGFsZl9wYW5lbF9wYXJ0aWFs X3VwZGF0ZSA9Ci0JCQlod2VpZ2h0X2xvbmcocGFyYW1zLT5hZmZlY3RlZF9kaXNwbGF5cykgPT0g MTsKLQotCWRzY19jb21tb25fbW9kZSA9IDA7Ci0JaWYgKCFoYWxmX3BhbmVsX3BhcnRpYWxfdXBk YXRlKQotCQlkc2NfY29tbW9uX21vZGUgfD0gRFNDX01PREVfU1BMSVRfUEFORUwgfCBEU0NfTU9E RV9NVUxUSVBMRVg7Ci0JaWYgKGVuY19tYXN0ZXItPmludGZfbW9kZSA9PSBJTlRGX01PREVfVklE RU8pCi0JCWRzY19jb21tb25fbW9kZSB8PSBEU0NfTU9ERV9WSURFTzsKLQotCV9kcHVfZW5jb2Rl cl9kc2NfdXBkYXRlX3BpY19kaW0oZHNjLCByb2ktPncsIHJvaS0+aCk7CisJcGljX3dpZHRoID0g ZHNjLT5waWNfd2lkdGg7CisJcGljX2hlaWdodCA9IGRzYy0+cGljX2hlaWdodDsKKwlfZHB1X2Vu Y29kZXJfZHNjX3VwZGF0ZV9waWNfZGltKGRzYywgcGljX3dpZHRoLCBwaWNfaGVpZ2h0KTsKIAot CXRoaXNfZnJhbWVfc2xpY2VzID0gcm9pLT53IC8gZHNjLT5zbGljZV93aWR0aDsKKwl0aGlzX2Zy YW1lX3NsaWNlcyA9IHBpY193aWR0aCAvIGRzYy0+c2xpY2Vfd2lkdGg7CiAJaW50Zl9pcF93ID0g dGhpc19mcmFtZV9zbGljZXMgKiBkc2MtPnNsaWNlX3dpZHRoOwogCV9kcHVfZW5jb2Rlcl9kc2Nf cGNsa19wYXJhbV9jYWxjKGRzYywgaW50Zl9pcF93KTsKIAogCS8qCi0JICogZHNjIG1lcmdlIGNh c2U6IHdoZW4gdXNpbmcgMiBlbmNvZGVycyBmb3IgdGhlIHNhbWUgc3RyZWFtLAotCSAqIG5vLiBv ZiBzbGljZXMgbmVlZCB0byBiZSBzYW1lIG9uIGJvdGggdGhlIGVuY29kZXJzLgorCSAqIHdoZW4g dXNpbmcgMiBlbmNvZGVycyBmb3IgdGhlIHNhbWUgc3RyZWFtLCBuby4gb2Ygc2xpY2VzCisJICog bmVlZCB0byBiZSBzYW1lIG9uIGJvdGggdGhlIGVuY29kZXJzLgogCSAqLwogCWVuY19pcF93ID0g aW50Zl9pcF93IC8gMjsKIAlfZHB1X2VuY29kZXJfZHNjX2luaXRpYWxfbGluZV9jYWxjKGRzYywg ZW5jX2lwX3cpOwogCi0JaWNoX3JlcyA9IF9kcHVfZW5jb2Rlcl9kc2NfaWNoX3Jlc2V0X292ZXJy aWRlX25lZWRlZCgKLQkJCWhhbGZfcGFuZWxfcGFydGlhbF91cGRhdGUsIGRzYyk7Ci0KLQlEUFVf REVCVUdfRU5DKGRwdV9lbmMsICJwaWNfdzogJWQgcGljX2g6ICVkIG1vZGU6JWRcbiIsCi0JCQly b2ktPncsIHJvaS0+aCwgZHNjX2NvbW1vbl9tb2RlKTsKLQlEUFVfRVZUMzIoRFJNSUQoJmRwdV9l bmMtPmJhc2UpLCByb2ktPncsIHJvaS0+aCwKLQkJCWRzY19jb21tb25fbW9kZSwgaSwgcGFyYW1z LT5hZmZlY3RlZF9kaXNwbGF5cyk7Ci0KLQlfZHB1X2VuY29kZXJfZHNjX3BpcGVfY2ZnKGh3X2Rz Y1swXSwgaHdfcHBbMF0sIGRzYywgZHNjX2NvbW1vbl9tb2RlLAotCQkJaWNoX3JlcywgdHJ1ZSk7 Ci0JX2RwdV9lbmNvZGVyX2RzY19waXBlX2NmZyhod19kc2NbMV0sIGh3X3BwWzFdLCBkc2MsIGRz Y19jb21tb25fbW9kZSwKLQkJCWljaF9yZXMsICFoYWxmX3BhbmVsX3BhcnRpYWxfdXBkYXRlKTsK LQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9kcHVfZW5jb2Rlcl91cGRhdGVfcm9pKHN0 cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuYykKLXsKLQlzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAq ZHB1X2VuYzsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqZHJtX2Nvbm47Ci0Jc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKmFkal9tb2RlOwotCXN0cnVjdCBkcHVfcmVjdCByb2k7Ci0KLQlpZiAoIWRy bV9lbmMgfHwgIWRybV9lbmMtPmNydGMgfHwgIWRybV9lbmMtPmNydGMtPnN0YXRlKQotCQlyZXR1 cm4gLUVJTlZBTDsKLQlkcHVfZW5jID0gdG9fZHB1X2VuY29kZXJfdmlydChkcm1fZW5jKTsKLQot CWlmICghZHB1X2VuYy0+Y3VyX21hc3RlcikKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWNoX3JlcyA9 IF9kcHVfZW5jb2Rlcl9kc2NfaWNoX3Jlc2V0X292ZXJyaWRlX25lZWRlZChmYWxzZSwgZHNjKTsK IAotCWFkal9tb2RlID0gJmRwdV9lbmMtPmJhc2UuY3J0Yy0+c3RhdGUtPmFkanVzdGVkX21vZGU7 Ci0JZHJtX2Nvbm4gPSBkcHVfZW5jLT5jdXJfbWFzdGVyLT5jb25uZWN0b3I7CisJZHNjX2NvbW1v bl9tb2RlID0gRFNDX01PREVfTVVMVElQTEVYIHwgRFNDX01PREVfU1BMSVRfUEFORUw7CisJaWYg KGVuY19tYXN0ZXItPmludGZfbW9kZSA9PSBJTlRGX01PREVfVklERU8pCisJCWRzY19jb21tb25f bW9kZSB8PSBEU0NfTU9ERV9WSURFTzsKIAotCV9kcHVfZW5jb2Rlcl9nZXRfY29ubmVjdG9yX3Jv aShkcHVfZW5jLCAmcm9pKTsKLQlpZiAoZHB1X2ttc19yZWN0X2lzX251bGwoJnJvaSkpIHsKLQkJ cm9pLncgPSBhZGpfbW9kZS0+aGRpc3BsYXk7Ci0JCXJvaS5oID0gYWRqX21vZGUtPnZkaXNwbGF5 OwotCX0KKwlEUFVfREVCVUdfRU5DKGRwdV9lbmMsICJwaWNfdzogJWQgcGljX2g6ICVkIG1vZGU6 JWRcbiIsCisJCXBpY193aWR0aCwgcGljX2hlaWdodCwgZHNjX2NvbW1vbl9tb2RlKTsKKwlEUFVf RVZUMzIoRFJNSUQoJmRwdV9lbmMtPmJhc2UpLCBwaWNfd2lkdGgsIHBpY19oZWlnaHQsCisJCQlk c2NfY29tbW9uX21vZGUpOwogCi0JbWVtY3B5KCZkcHVfZW5jLT5wcnZfY29ubl9yb2ksICZkcHVf ZW5jLT5jdXJfY29ubl9yb2ksCi0JCQlzaXplb2YoZHB1X2VuYy0+cHJ2X2Nvbm5fcm9pKSk7Ci0J bWVtY3B5KCZkcHVfZW5jLT5jdXJfY29ubl9yb2ksICZyb2ksIHNpemVvZihkcHVfZW5jLT5jdXJf Y29ubl9yb2kpKTsKKwlfZHB1X2VuY29kZXJfZHNjX3BpcGVfY2ZnKGxfaHdfZHNjLCBsX2h3X3Bw LCBkc2MsIGRzY19jb21tb25fbW9kZSwKKwkJCWljaF9yZXMpOworCV9kcHVfZW5jb2Rlcl9kc2Nf cGlwZV9jZmcocl9od19kc2MsIHJfaHdfcHAsIGRzYywgZHNjX2NvbW1vbl9tb2RlLAorCQkJaWNo X3Jlcyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfZHB1X2VuY29kZXJfZHNjX3Nl dHVwKHN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jLAotCQlzdHJ1Y3QgZHB1X2VuY29k ZXJfa2lja29mZl9wYXJhbXMgKnBhcmFtcykKK3N0YXRpYyBpbnQgX2RwdV9lbmNvZGVyX2RzY19z ZXR1cChzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYykKIHsKIAllbnVtIGRwdV9ybV90 b3BvbG9neV9uYW1lIHRvcG9sb2d5OwogCXN0cnVjdCBkcm1fY29ubmVjdG9yICpkcm1fY29ubjsK IAlpbnQgcmV0ID0gMDsKIAotCWlmICghZHB1X2VuYyB8fCAhcGFyYW1zIHx8ICFkcHVfZW5jLT5w aHlzX2VuY3NbMF0gfHwKKwlpZiAoIWRwdV9lbmMgfHwgIWRwdV9lbmMtPnBoeXNfZW5jc1swXSB8 fAogCQkJIWRwdV9lbmMtPnBoeXNfZW5jc1swXS0+Y29ubmVjdG9yKQogCQlyZXR1cm4gLUVJTlZB TDsKIApAQCAtMTE1MywyMCArMTA1OCwxNiBAQCBzdGF0aWMgaW50IF9kcHVfZW5jb2Rlcl9kc2Nf c2V0dXAoc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMsCiAJRFBVX0RFQlVHX0VOQyhk cHVfZW5jLCAidG9wb2xvZ3k6JWRcbiIsIHRvcG9sb2d5KTsKIAlEUFVfRVZUMzIoRFJNSUQoJmRw dV9lbmMtPmJhc2UpKTsKIAotCWlmIChkcHVfa21zX3JlY3RfaXNfZXF1YWwoJmRwdV9lbmMtPmN1 cl9jb25uX3JvaSwKLQkJCSZkcHVfZW5jLT5wcnZfY29ubl9yb2kpKQotCQlyZXR1cm4gcmV0Owot CiAJc3dpdGNoICh0b3BvbG9neSkgewogCWNhc2UgRFBVX1JNX1RPUE9MT0dZX1NJTkdMRVBJUEVf RFNDOgogCWNhc2UgRFBVX1JNX1RPUE9MT0dZX0RVQUxQSVBFXzNETUVSR0VfRFNDOgogCQlyZXQg PSBfZHB1X2VuY29kZXJfZHNjX25fbG1fMV9lbmNfMV9pbnRmKGRwdV9lbmMpOwogCQlicmVhazsK IAljYXNlIERQVV9STV9UT1BPTE9HWV9EVUFMUElQRV9EU0NNRVJHRToKLQkJcmV0ID0gX2RwdV9l bmNvZGVyX2RzY18yX2xtXzJfZW5jXzFfaW50ZihkcHVfZW5jLCBwYXJhbXMpOworCQlyZXQgPSBf ZHB1X2VuY29kZXJfZHNjXzJfbG1fMl9lbmNfMV9pbnRmKGRwdV9lbmMpOwogCQlicmVhazsKIAlj YXNlIERQVV9STV9UT1BPTE9HWV9EVUFMUElQRV9EU0M6Ci0JCXJldCA9IF9kcHVfZW5jb2Rlcl9k c2NfMl9sbV8yX2VuY18yX2ludGYoZHB1X2VuYywgcGFyYW1zKTsKKwkJcmV0ID0gX2RwdV9lbmNv ZGVyX2RzY18yX2xtXzJfZW5jXzJfaW50ZihkcHVfZW5jKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoK IAkJRFBVX0VSUk9SX0VOQyhkcHVfZW5jLCAiTm8gRFNDIHN1cHBvcnQgZm9yIHRvcG9sb2d5ICVk IiwKQEAgLTIwNzMsOSArMTk3NCw2IEBAIHN0YXRpYyB2b2lkIF9kcHVfZW5jb2Rlcl92aXJ0X2Vu YWJsZV9oZWxwZXIoc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jKQogCQkJCWRwdV9rbXMtPmNh dGFsb2cpOwogCiAJX2RwdV9lbmNvZGVyX3VwZGF0ZV92c3luY19zb3VyY2UoZHB1X2VuYywgJmRw dV9lbmMtPmRpc3BfaW5mbywgZmFsc2UpOwotCi0JbWVtc2V0KCZkcHVfZW5jLT5wcnZfY29ubl9y b2ksIDAsIHNpemVvZihkcHVfZW5jLT5wcnZfY29ubl9yb2kpKTsKLQltZW1zZXQoJmRwdV9lbmMt PmN1cl9jb25uX3JvaSwgMCwgc2l6ZW9mKGRwdV9lbmMtPmN1cl9jb25uX3JvaSkpOwogfQogCiB2 b2lkIGRwdV9lbmNvZGVyX3ZpcnRfcmVzdG9yZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMp CkBAIC0zMDUzLDggKzI5NTEsNiBAQCB2b2lkIGRwdV9lbmNvZGVyX3ByZXBhcmVfZm9yX2tpY2tv ZmYoc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jLAogCiAJX2RwdV9lbmNvZGVyX3VwZGF0ZV9t YXN0ZXIoZHJtX2VuYywgcGFyYW1zKTsKIAotCV9kcHVfZW5jb2Rlcl91cGRhdGVfcm9pKGRybV9l bmMpOwotCiAJaWYgKGRwdV9lbmMtPmN1cl9tYXN0ZXIgJiYgZHB1X2VuYy0+Y3VyX21hc3Rlci0+ Y29ubmVjdG9yKSB7CiAJCXJjID0gZHB1X2Nvbm5lY3Rvcl9wcmVfa2lja29mZihkcHVfZW5jLT5j dXJfbWFzdGVyLT5jb25uZWN0b3IpOwogCQlpZiAocmMpCkBAIC0zMDY0LDcgKzI5NjAsNyBAQCB2 b2lkIGRwdV9lbmNvZGVyX3ByZXBhcmVfZm9yX2tpY2tvZmYoc3RydWN0IGRybV9lbmNvZGVyICpk cm1fZW5jLAogCX0KIAogCWlmIChkcHVfZW5jb2Rlcl9pc19kc2NfZW5hYmxlZChkcm1fZW5jKSkg ewotCQlyYyA9IF9kcHVfZW5jb2Rlcl9kc2Nfc2V0dXAoZHB1X2VuYywgcGFyYW1zKTsKKwkJcmMg PSBfZHB1X2VuY29kZXJfZHNjX3NldHVwKGRwdV9lbmMpOwogCQlpZiAocmMpCiAJCQlEUFVfRVJS T1JfRU5DKGRwdV9lbmMsICJmYWlsZWQgdG8gc2V0dXAgRFNDOiAlZFxuIiwgcmMpOwogCX0KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nLmMg Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY2F0YWxvZy5jCmluZGV4IDI4 OWI5ZmYuLmJhZGU3MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9od19jYXRhbG9nLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2h3X2NhdGFsb2cuYwpAQCAtMjAxMyw2ICsyMDEzLDcgQEAgc3RhdGljIGludCBkcHVfZHNwcF9w YXJzZV9kdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCWlmIChyYykKIAkJZ290byBlbmQ7CiAK KyNpZmRlZiBDT05GSUdfRFBVX0FENAogCS8qIFBhcnNlIEFEIGR0c2kgZW50cmllcyAqLwogCWFk X3Byb3BfdmFsdWUgPSBrY2FsbG9jKEFEX1BST1BfTUFYLAogCQkJc2l6ZW9mKHN0cnVjdCBkcHVf cHJvcF92YWx1ZSksIEdGUF9LRVJORUwpOwpAQCAtMjAyOCw2ICsyMDI5LDcgQEAgc3RhdGljIGlu dCBkcHVfZHNwcF9wYXJzZV9kdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCQlhZF9wcm9wX2V4 aXN0cywgYWRfcHJvcF92YWx1ZSk7CiAJaWYgKHJjKQogCQlnb3RvIGVuZDsKKyNlbmRpZgogCiAJ LyogZ2V0IERTUFAgZmVhdHVyZSBkdCBwcm9wZXJ0aWVzIGlmIHRoZXkgZXhpc3QgKi8KIAlzbnAg PSBvZl9nZXRfY2hpbGRfYnlfbmFtZShucCwgZHNwcF9wcm9wW0RTUFBfQkxPQ0tTXS5wcm9wX25h bWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5o IGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttcy5oCmluZGV4IDYyZTdjNWMu LmQxMWZiMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9r bXMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zLmgKQEAgLTQ1 NCwxNCArNDU0LDYgQEAgdm9pZCBkcHVfa21zX3JlY3RfaW50ZXJzZWN0KGNvbnN0IHN0cnVjdCBk cHVfcmVjdCAqcjEsCiAJCXN0cnVjdCBkcHVfcmVjdCAqcmVzdWx0KTsKIAogLyoqCi0gKiBkcHVf a21zX3JlY3RfbWVyZ2VfcmVjdGFuZ2xlcyAtIG1lcmdlIGEgcmVjdGFuZ2xlIGxpc3QgaW50byBv bmUgcmVjdAotICogQHJvaXM6IHBvaW50ZXIgdG8gdGhlIGxpc3Qgb2Ygcm9pcwotICogQHJlc3Vs dDogb3V0cHV0IHJlY3RhbmdsZSwgYWxsIDAgb24gZXJyb3IKLSAqLwotdm9pZCBkcHVfa21zX3Jl Y3RfbWVyZ2VfcmVjdGFuZ2xlcyhjb25zdCBzdHJ1Y3QgbXNtX3JvaV9saXN0ICpyb2lzLAotCQlz dHJ1Y3QgZHB1X3JlY3QgKnJlc3VsdCk7Ci0KLS8qKgogICogZHB1X2ttc19yZWN0X2lzX2VxdWFs IC0gY29tcGFyZXMgdHdvIHJlY3RzCiAgKiBAcjE6IHJlY3QgdmFsdWUgdG8gY29tcGFyZQogICog QHIyOiByZWN0IHZhbHVlIHRvIGNvbXBhcmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9rbXNfdXRpbHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9rbXNfdXRpbHMuYwppbmRleCAwMDZkN2FkLi40MGUwMTYyIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfa21zX3V0aWxzLmMKKysrIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2ttc191dGlscy5jCkBAIC0xNzYsNDUgKzE3Niwz IEBAIHZvaWQgZHB1X2ttc19yZWN0X2ludGVyc2VjdChjb25zdCBzdHJ1Y3QgZHB1X3JlY3QgKnIx LAogCX0KIH0KIAotdm9pZCBkcHVfa21zX3JlY3RfbWVyZ2VfcmVjdGFuZ2xlcyhjb25zdCBzdHJ1 Y3QgbXNtX3JvaV9saXN0ICpyb2lzLAotCQlzdHJ1Y3QgZHB1X3JlY3QgKnJlc3VsdCkKLXsKLQlz dHJ1Y3QgZHJtX2NsaXBfcmVjdCBjbGlwOwotCWNvbnN0IHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpy b2lfcmVjdDsKLQlpbnQgaTsKLQotCWlmICghcm9pcyB8fCAhcmVzdWx0KQotCQlyZXR1cm47Ci0K LQltZW1zZXQocmVzdWx0LCAwLCBzaXplb2YoKnJlc3VsdCkpOwotCi0JLyogaW5pdCB0byBpbnZh bGlkIHJhbmdlIG1heGVzICovCi0JY2xpcC54MSA9IH4wOwotCWNsaXAueTEgPSB+MDsKLQljbGlw LngyID0gMDsKLQljbGlwLnkyID0gMDsKLQotCS8qIGFnZ3JlZ2F0ZSBhbGwgY2xpcHBpbmcgcmVj dGFuZ2xlcyB0b2dldGhlciBmb3Igb3ZlcmFsbCByb2kgKi8KLQlmb3IgKGkgPSAwOyBpIDwgcm9p cy0+bnVtX3JlY3RzOyBpKyspIHsKLQkJcm9pX3JlY3QgPSAmcm9pcy0+cm9pW2ldOwotCi0JCWNs aXAueDEgPSBtaW4oY2xpcC54MSwgcm9pX3JlY3QtPngxKTsKLQkJY2xpcC55MSA9IG1pbihjbGlw LnkxLCByb2lfcmVjdC0+eTEpOwotCQljbGlwLngyID0gbWF4KGNsaXAueDIsIHJvaV9yZWN0LT54 Mik7Ci0JCWNsaXAueTIgPSBtYXgoY2xpcC55Miwgcm9pX3JlY3QtPnkyKTsKLQotCQlEUFVfREVC VUcoInJvaSVkICglZCwlZCksKCVkLCVkKSAtPiBjcnRjICglZCwlZCksKCVkLCVkKVxuIiwgaSwK LQkJCQlyb2lfcmVjdC0+eDEsIHJvaV9yZWN0LT55MSwKLQkJCQlyb2lfcmVjdC0+eDIsIHJvaV9y ZWN0LT55MiwKLQkJCQljbGlwLngxLCBjbGlwLnkxLAotCQkJCWNsaXAueDIsIGNsaXAueTIpOwot CX0KLQotCWlmIChjbGlwLngyICAmJiBjbGlwLnkyKSB7Ci0JCXJlc3VsdC0+eCA9IGNsaXAueDE7 Ci0JCXJlc3VsdC0+eSA9IGNsaXAueTE7Ci0JCXJlc3VsdC0+dyA9IGNsaXAueDIgLSBjbGlwLngx OwotCQlyZXN1bHQtPmggPSBjbGlwLnkyIC0gY2xpcC55MTsKLQl9Ci19Ci0KZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5jIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmMKaW5kZXggODM0ZGNjMC4uOWU5YzlkMiAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3BsYW5lLmMKQEAgLTMyNDMsNyArMzI0 Myw2IEBAIHN0YXRpYyBpbnQgZHB1X3BsYW5lX3NzcHBfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSwKIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CiAJc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciAqZmI7CiAJc3RydWN0IGRwdV9yZWN0IHNyYywgZHN0OwotCWNvbnN0IHN0cnVjdCBk cHVfcmVjdCAqY3J0Y19yb2k7CiAJYm9vbCBxMTZfZGF0YSA9IHRydWU7CiAJaW50IGlkeDsKIApA QCAtMzM1NywxMSArMzM1Niw2IEBAIHN0YXRpYyBpbnQgZHB1X3BsYW5lX3NzcHBfYXRvbWljX3Vw ZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAlfZHB1X3BsYW5lX3NzcHBfYXRvbWljX2No ZWNrX21vZGVfY2hhbmdlZChwZHB1LCBzdGF0ZSwKIAkJCQkJCQkJb2xkX3N0YXRlKTsKIAotCS8q IHJlLXByb2dyYW0gdGhlIG91dHB1dCByZWN0cyBhbHdheXMgaW4gdGhlIGNhc2Ugb2YgcGFydGlh bCB1cGRhdGUgKi8KLQlkcHVfY3J0Y19nZXRfY3J0Y19yb2koY3J0Yy0+c3RhdGUsICZjcnRjX3Jv aSk7Ci0JaWYgKCFkcHVfa21zX3JlY3RfaXNfbnVsbChjcnRjX3JvaSkpCi0JCXBzdGF0ZS0+ZGly dHkgfD0gRFBVX1BMQU5FX0RJUlRZX1JFQ1RTOwotCiAJaWYgKHBzdGF0ZS0+ZGlydHkgJiBEUFVf UExBTkVfRElSVFlfUkVDVFMpCiAJCW1lbXNldCgmKHBkcHUtPnBpcGVfY2ZnKSwgMCwgc2l6ZW9m KHN0cnVjdCBkcHVfaHdfcGlwZV9jZmcpKTsKIApAQCAtMzM5OSwxMyArMzM5Myw2IEBAIHN0YXRp YyBpbnQgZHB1X3BsYW5lX3NzcHBfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSwKIAkJCXNyYy55ICY9IH4weDE7CiAJCX0KIAotCQkvKgotCQkgKiBhZGp1c3QgbGF5ZXIgbWl4 ZXIgcG9zaXRpb24gb2YgdGhlIHNzcHAgaW4gdGhlIHByZXNlbmNlCi0JCSAqIG9mIGEgcGFydGlh bCB1cGRhdGUgdG8gdGhlIGFjdGl2ZSBsbSBvcmlnaW4KLQkJICovCi0JCWRzdC54IC09IGNydGNf cm9pLT54OwotCQlkc3QueSAtPSBjcnRjX3JvaS0+eTsKLQogCQlwZHB1LT5waXBlX2NmZy5zcmNf cmVjdCA9IHNyYzsKIAkJcGRwdS0+cGlwZV9jZmcuZHN0X3JlY3QgPSBkc3Q7CiAKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9t c21fZHJ2LmgKaW5kZXggZDhlMDkwZi4uODU3NGYzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL21zbS9tc21fZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmgKQEAg LTE0NCw3ICsxNDQsNiBAQCBlbnVtIG1zbV9tZHBfY3J0Y19wcm9wZXJ0eSB7CiAJQ1JUQ19QUk9Q X0RSQU1fSUIsCiAJQ1JUQ19QUk9QX1JPVF9QUkVGSUxMX0JXLAogCUNSVENfUFJPUF9ST1RfQ0xL LAotCUNSVENfUFJPUF9ST0lfVjEsCiAJQ1JUQ19QUk9QX0lETEVfVElNRU9VVCwKIAlDUlRDX1BS T1BfREVTVF9TQ0FMRVIsCiAKQEAgLTE2OCw3ICsxNjcsNiBAQCBlbnVtIG1zbV9tZHBfY29ubl9w cm9wZXJ0eSB7CiAJQ09OTkVDVE9SX1BST1BfRFNUX1ksCiAJQ09OTkVDVE9SX1BST1BfRFNUX1cs CiAJQ09OTkVDVE9SX1BST1BfRFNUX0gsCi0JQ09OTkVDVE9SX1BST1BfUk9JX1YxLAogCUNPTk5F Q1RPUl9QUk9QX0JMX1NDQUxFLAogCUNPTk5FQ1RPUl9QUk9QX0FEX0JMX1NDQUxFLAogCkBAIC0y MjgsMzggKzIyNiw2IEBAIGVudW0gbXNtX2V2ZW50X3dhaXQgewogfTsKIAogLyoqCi0gKiBzdHJ1 Y3QgbXNtX3JvaV9hbGlnbm1lbnQgLSByZWdpb24gb2YgaW50ZXJlc3QgYWxpZ25tZW50IHJlc3Ry aWN0aW9ucwotICogQHhzdGFydF9waXhfYWxpZ246IGxlZnQgeCBvZmZzZXQgYWxpZ25tZW50IHJl c3RyaWN0aW9uCi0gKiBAd2lkdGhfcGl4X2FsaWduOiB3aWR0aCBhbGlnbm1lbnQgcmVzdHJpY3Rp b24KLSAqIEB5c3RhcnRfcGl4X2FsaWduOiB0b3AgeSBvZmZzZXQgYWxpZ25tZW50IHJlc3RyaWN0 aW9uCi0gKiBAaGVpZ2h0X3BpeF9hbGlnbjogaGVpZ2h0IGFsaWdubWVudCByZXN0cmljdGlvbgot ICogQG1pbl93aWR0aDogbWluaW11bSB3aWR0aCByZXN0cmljdGlvbgotICogQG1pbl9oZWlnaHQ6 IG1pbmltdW0gaGVpZ2h0IHJlc3RyaWN0aW9uCi0gKi8KLXN0cnVjdCBtc21fcm9pX2FsaWdubWVu dCB7Ci0JdWludDMyX3QgeHN0YXJ0X3BpeF9hbGlnbjsKLQl1aW50MzJfdCB3aWR0aF9waXhfYWxp Z247Ci0JdWludDMyX3QgeXN0YXJ0X3BpeF9hbGlnbjsKLQl1aW50MzJfdCBoZWlnaHRfcGl4X2Fs aWduOwotCXVpbnQzMl90IG1pbl93aWR0aDsKLQl1aW50MzJfdCBtaW5faGVpZ2h0OwotfTsKLQot LyoqCi0gKiBzdHJ1Y3QgbXNtX3JvaV9jYXBzIC0gZGlzcGxheSdzIHJlZ2lvbiBvZiBpbnRlcmVz dCBjYXBhYmlsaXRpZXMKLSAqIEBlbmFibGVkOiB0cnVlIGlmIHNvbWUgcmVnaW9uIG9mIGludGVy ZXN0IGlzIHN1cHBvcnRlZAotICogQG1lcmdlX3JvaXM6IG1lcmdlIHJvaXMgYmVmb3JlIHNlbmRp bmcgdG8gZGlzcGxheQotICogQG51bV9yb2k6IG1heGltdW0gbnVtYmVyIG9mIHJvaXMgc3VwcG9y dGVkCi0gKiBAYWxpZ246IHJvaSBhbGlnbm1lbnQgcmVzdHJpY3Rpb25zCi0gKi8KLXN0cnVjdCBt c21fcm9pX2NhcHMgewotCWJvb2wgZW5hYmxlZDsKLQlib29sIG1lcmdlX3JvaXM7Ci0JdWludDMy X3QgbnVtX3JvaTsKLQlzdHJ1Y3QgbXNtX3JvaV9hbGlnbm1lbnQgYWxpZ247Ci19OwotCi0vKioK ICAqIHN0cnVjdCBtc21fZGlzcGxheV9kc2NfaW5mbyAtIGRlZmluZXMgZHNjIGNvbmZpZ3VyYXRp b24KICAqIEB2ZXJzaW9uOiAgICAgICAgICAgICAgICAgRFNDIHZlcnNpb24uCiAgKiBAc2NyX3Jl djogICAgICAgICAgICAgICAgIERTQyByZXZpc2lvbi4KQEAgLTQyNyw3ICszOTMsNiBAQCBzdHJ1 Y3QgbXNtX21vZGVfaW5mbyB7CiAgKiBAaXNfcHJpbWFyeTogICAgICAgICBTZXQgdG8gdHJ1ZSBp ZiBkaXNwbGF5IGlzIHByaW1hcnkgZGlzcGxheQogICogQGlzX3RlX3VzaW5nX3dhdGNoZG9nX3Rp bWVyOiAgQm9vbGVhbiB0byBpbmRpY2F0ZSB3YXRjaGRvZyBURSBpcwogICoJCQkJIHVzZWQgaW5z dGVhZCBvZiBwYW5lbCBURSBpbiBjbWQgbW9kZSBwYW5lbHMKLSAqIEByb2lfY2FwczogICAgICAg ICAgIFJlZ2lvbiBvZiBpbnRlcmVzdCBjYXBhYmlsaXR5IGluZm8KICAqLwogc3RydWN0IG1zbV9k aXNwbGF5X2luZm8gewogCWludCBpbnRmX3R5cGU7CkBAIC00NDYsMjcgKzQxMSw2IEBAIHN0cnVj dCBtc21fZGlzcGxheV9pbmZvIHsKIAogCWJvb2wgaXNfcHJpbWFyeTsKIAlib29sIGlzX3RlX3Vz aW5nX3dhdGNoZG9nX3RpbWVyOwotCXN0cnVjdCBtc21fcm9pX2NhcHMgcm9pX2NhcHM7Ci19Owot Ci0jZGVmaW5lIE1TTV9NQVhfUk9JCTQKLQotLyoqCi0gKiBzdHJ1Y3QgbXNtX3JvaV9saXN0IC0g bGlzdCBvZiByZWdpb25zIG9mIGludGVyZXN0IGZvciBhIGRybSBvYmplY3QKLSAqIEBudW1fcmVj dHM6IG51bWJlciBvZiB2YWxpZCByZWN0YW5nbGVzIGluIHRoZSByb2kgYXJyYXkKLSAqIEByb2k6 IGxpc3Qgb2Ygcm9pIHJlY3RhbmdsZXMKLSAqLwotc3RydWN0IG1zbV9yb2lfbGlzdCB7Ci0JdWlu dDMyX3QgbnVtX3JlY3RzOwotCXN0cnVjdCBkcm1fY2xpcF9yZWN0IHJvaVtNU01fTUFYX1JPSV07 Ci19OwotCi0vKioKLSAqIHN0cnVjdCAtIG1zbV9kaXNwbGF5X2tpY2tvZmZfcGFyYW1zIC0gaW5m byBmb3IgZGlzcGxheSBmZWF0dXJlcyBhdCBraWNrb2ZmCi0gKiBAcm9pczogUmVnaW9ucyBvZiBp bnRlcmVzdCBzdHJ1Y3R1cmUgZm9yIG1hcHBpbmcgQ1JUQyB0byBDb25uZWN0b3Igb3V0cHV0Ci0g Ki8KLXN0cnVjdCBtc21fZGlzcGxheV9raWNrb2ZmX3BhcmFtcyB7Ci0Jc3RydWN0IG1zbV9yb2lf bGlzdCAqcm9pczsKIH07CiAKIC8qKgotLSAKVGhlIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVy LCBJbmMuIGlzIGEgbWVtYmVyIG9mIHRoZSBDb2RlIEF1cm9yYSBGb3J1bSwKYSBMaW51eCBGb3Vu ZGF0aW9uIENvbGxhYm9yYXRpdmUgUHJvamVjdAoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KRnJlZWRyZW5vIG1haWxpbmcgbGlzdApGcmVlZHJlbm9AbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vZnJlZWRyZW5vCg==