From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeykumar Sankaran Subject: [DPU PATCH] drm/msm: remove hw rotation support Date: Thu, 1 Mar 2018 18:15:47 -0800 Message-ID: <1519956947-9681-1-git-send-email-jsanka@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: 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 UmVtb3ZlIEhXIGlubGluZSByb3RhdGlvbiBzdXBwb3J0IGZyb20gRFBVIGRyaXZlci4KClNpZ25l ZC1vZmYtYnk6IEpleWt1bWFyIFNhbmthcmFuIDxqc2Fua2FAY29kZWF1cm9yYS5vcmc+Ci0tLQog ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuYyAgICAgICAgICAgfCAgMTI2 ICstCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oICAgICAgICAgICB8 ICAgMzMgLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuYyAgICAg ICAgfCAgIDE3ICstCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5o ICAgICAgICB8ICAgMTAgLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29k ZXJfcGh5cy5oICAgfCAgICA0IC0KIC4uLi9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29k ZXJfcGh5c192aWQuYyAgIHwgICA3MiAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfaHdfY2F0YWxvZy5jICAgICB8ICAxODggLS0tCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfaHdfY2F0YWxvZy5oICAgICB8ICAgNTkgLQogZHJpdmVycy9ncHUvZHJtL21zbS9k aXNwL2RwdTEvZHB1X2h3X2N0bC5jICAgICAgICAgfCAgIDUxIC0KIGRyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9od19jdGwuaCAgICAgICAgIHwgICAzNiAtCiBkcml2ZXJzL2dwdS9k cm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfaW50Zi5jICAgICAgICB8ICAgMjEgLQogZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2ludGYuaCAgICAgICAgfCAgICA0IC0KIGRyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19tZHNzLmggICAgICAgIHwgICAxMyAtCiBk cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfcm90LmMgICAgICAgICB8ICA5NjEg LS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3JvdC5o ICAgICAgICAgfCAgMTkwIC0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3 X3NzcHAuYyAgICAgICAgfCAgIDQ5IC0KIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9od19zc3BwLmggICAgICAgIHwgICA2NiAtCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfcGxhbmUuYyAgICAgICAgICB8IDE0MTYgKy0tLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5oICAgICAgICAgIHwgICA3NyArLQog ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3JtLmMgICAgICAgICAgICAgfCAgIDIy IC0KIGRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5oICAgICAgICAgICAgICAgICAgICAgIHwg ICAxMSArLQogMjEgZmlsZXMgY2hhbmdlZCwgMzcgaW5zZXJ0aW9ucygrKSwgMzM4OSBkZWxldGlv bnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9k cHVfaHdfcm90LmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfaHdfcm90LmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMu YwppbmRleCBhYjM2NTc4Li4zMTliNTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2Rpc3AvZHB1MS9kcHVfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUx L2RwdV9jcnRjLmMKQEAgLTgyMiwxMiArODIyLDExIEBAIHN0YXRpYyB2b2lkIF9kcHVfY3J0Y19i bGVuZF9zZXR1cF9taXhlcihzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJc3RydWN0IGRwdV9od19z dGFnZV9jZmcgKnN0YWdlX2NmZzsKIAlzdHJ1Y3QgZHB1X3JlY3QgcGxhbmVfY3J0Y19yb2k7CiAK LQl1MzIgZmx1c2hfbWFzaywgZmx1c2hfc2J1ZjsKKwl1MzIgZmx1c2hfbWFzazsKIAl1aW50MzJf dCBzdGFnZV9pZHgsIGxtX2lkeDsKIAlpbnQgenBvc19jbnRbRFBVX1NUQUdFX01BWCArIDFdID0g eyAwIH07CiAJaW50IGk7CiAJYm9vbCBiZ19hbHBoYV9lbmFibGUgPSBmYWxzZTsKLQl1MzIgcHJl ZmlsbCA9IDA7CiAKIAlpZiAoIWRwdV9jcnRjIHx8ICFtaXhlcikgewogCQlEUFVfRVJST1IoImlu dmFsaWQgZHB1X2NydGMgb3IgbWl4ZXJcbiIpOwpAQCAtODM5LDkgKzgzOCw2IEBAIHN0YXRpYyB2 b2lkIF9kcHVfY3J0Y19ibGVuZF9zZXR1cF9taXhlcihzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJ c3RhZ2VfY2ZnID0gJmRwdV9jcnRjLT5zdGFnZV9jZmc7CiAJY3N0YXRlID0gdG9fZHB1X2NydGNf c3RhdGUoY3J0Yy0+c3RhdGUpOwogCi0JY3N0YXRlLT5zYnVmX3ByZWZpbGxfbGluZSA9IDA7Ci0J ZHB1X2NydGMtPnNidWZfZmx1c2hfbWFzayA9IDB4MDsKLQogCWRybV9hdG9taWNfY3J0Y19mb3Jf ZWFjaF9wbGFuZShwbGFuZSwgY3J0YykgewogCQlzdGF0ZSA9IHBsYW5lLT5zdGF0ZTsKIAkJaWYg KCFzdGF0ZSkKQEAgLTg1NSwxNCArODUxLDcgQEAgc3RhdGljIHZvaWQgX2RwdV9jcnRjX2JsZW5k X3NldHVwX21peGVyKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJcHN0YXRlID0gdG9fZHB1X3Bs YW5lX3N0YXRlKHN0YXRlKTsKIAkJZmIgPSBzdGF0ZS0+ZmI7CiAKLQkJcHJlZmlsbCA9IGRwdV9w bGFuZV9yb3RfY2FsY19wcmVmaWxsKHBsYW5lKTsKLQkJaWYgKHByZWZpbGwgPiBjc3RhdGUtPnNi dWZfcHJlZmlsbF9saW5lKQotCQkJY3N0YXRlLT5zYnVmX3ByZWZpbGxfbGluZSA9IHByZWZpbGw7 Ci0KLQkJZHB1X3BsYW5lX2dldF9jdGxfZmx1c2gocGxhbmUsIGN0bCwgJmZsdXNoX21hc2ssICZm bHVzaF9zYnVmKTsKLQotCQkvKiBzYXZlIHNidWYgZmx1c2ggdmFsdWUgZm9yIGxhdGVyICovCi0J CWRwdV9jcnRjLT5zYnVmX2ZsdXNoX21hc2sgfD0gZmx1c2hfc2J1ZjsKKwkJZHB1X3BsYW5lX2dl dF9jdGxfZmx1c2gocGxhbmUsIGN0bCwgJmZsdXNoX21hc2spOwogCiAJCURQVV9ERUJVRygiY3J0 YyAlZCBzdGFnZTolZCAtIHBsYW5lICVkIHNzcHAgJWQgZmIgJWRcbiIsCiAJCQkJY3J0Yy0+YmFz ZS5pZCwKQEAgLTg4NSw4ICs4NzQsNyBAQCBzdGF0aWMgdm9pZCBfZHB1X2NydGNfYmxlbmRfc2V0 dXBfbWl4ZXIoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCQkJCXN0YXRlLT5zcmNfeCA+PiAxNiwg c3RhdGUtPnNyY195ID4+IDE2LAogCQkJCXN0YXRlLT5zcmNfdyA+PiAxNiwgc3RhdGUtPnNyY19o ID4+IDE2LAogCQkJCXN0YXRlLT5jcnRjX3gsIHN0YXRlLT5jcnRjX3ksCi0JCQkJc3RhdGUtPmNy dGNfdywgc3RhdGUtPmNydGNfaCwKLQkJCQlmbHVzaF9zYnVmICE9IDApOworCQkJCXN0YXRlLT5j cnRjX3csIHN0YXRlLT5jcnRjX2gpOwogCiAJCXN0YWdlX2lkeCA9IHpwb3NfY250W3BzdGF0ZS0+ c3RhZ2VdKys7CiAJCXN0YWdlX2NmZy0+c3RhZ2VbcHN0YXRlLT5zdGFnZV1bc3RhZ2VfaWR4XSA9 CkBAIC0yMzg3LDY0ICsyMzc1LDYgQEAgc3RhdGljIGludCBfZHB1X2NydGNfd2FpdF9mb3JfZnJh bWVfZG9uZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMg dm9pZCBfZHB1X2NydGNfY29tbWl0X2tpY2tvZmZfcm90KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywK LQkJc3RydWN0IGRwdV9jcnRjX3N0YXRlICpjc3RhdGUpCi17Ci0Jc3RydWN0IGRybV9wbGFuZSAq cGxhbmU7Ci0Jc3RydWN0IGRwdV9jcnRjICpkcHVfY3J0YzsKLQlzdHJ1Y3QgZHB1X2h3X2N0bCAq Y3RsLCAqbWFzdGVyX2N0bDsKLQl1MzIgZmx1c2hfbWFzazsKLQlpbnQgaTsKLQotCWlmICghY3J0 YyB8fCAhY3N0YXRlKQotCQlyZXR1cm47Ci0KLQlkcHVfY3J0YyA9IHRvX2RwdV9jcnRjKGNydGMp OwotCi0JLyoKLQkgKiBVcGRhdGUgc2J1ZiBjb25maWd1cmF0aW9uIGFuZCBmbHVzaCBiaXRzIGlm IGEgZmx1c2gKLQkgKiBtYXNrIGhhcyBiZWVuIGRlZmluZWQgZm9yIGVpdGhlciB0aGUgY3VycmVu dCBvcgotCSAqIHByZXZpb3VzIGNvbW1pdC4KLQkgKgotCSAqIFVwZGF0ZXMgYXJlIGFsc28gcmVx dWlyZWQgZm9yIHRoZSBmaXJzdCBjb21taXQgYWZ0ZXIKLQkgKiBzYnVmX2ZsdXNoX21hc2sgYmVj b21lcyAweDAsIHRvIHByb3Blcmx5IHRyYW5zaXRpb24KLQkgKiB0aGUgaGFyZHdhcmUgb3V0IG9m IHNidWYgbW9kZS4KLQkgKi8KLQlpZiAoIWRwdV9jcnRjLT5zYnVmX2ZsdXNoX21hc2tfb2xkICYm ICFkcHVfY3J0Yy0+c2J1Zl9mbHVzaF9tYXNrKQotCQlyZXR1cm47Ci0KLQlmbHVzaF9tYXNrID0g ZHB1X2NydGMtPnNidWZfZmx1c2hfbWFza19vbGQgfCBkcHVfY3J0Yy0+c2J1Zl9mbHVzaF9tYXNr OwotCWRwdV9jcnRjLT5zYnVmX2ZsdXNoX21hc2tfb2xkID0gZHB1X2NydGMtPnNidWZfZmx1c2hf bWFzazsKLQotCURQVV9BVFJBQ0VfQkVHSU4oImNydGNfa2lja29mZl9yb3QiKTsKLQotCWlmIChj c3RhdGUtPnNidWZfY2ZnLnJvdF9vcF9tb2RlICE9IERQVV9DVExfUk9UX09QX01PREVfT0ZGTElO RSkgewotCQlkcm1fYXRvbWljX2NydGNfZm9yX2VhY2hfcGxhbmUocGxhbmUsIGNydGMpIHsKLQkJ CWRwdV9wbGFuZV9raWNrb2ZmKHBsYW5lKTsKLQkJfQotCX0KLQotCW1hc3Rlcl9jdGwgPSBOVUxM OwotCWZvciAoaSA9IDA7IGkgPCBkcHVfY3J0Yy0+bnVtX21peGVyczsgaSsrKSB7Ci0JCWN0bCA9 IGRwdV9jcnRjLT5taXhlcnNbaV0uaHdfY3RsOwotCQlpZiAoIWN0bCB8fCAhY3RsLT5vcHMuc2V0 dXBfc2J1Zl9jZmcgfHwKLQkJCQkhY3RsLT5vcHMudXBkYXRlX3BlbmRpbmdfZmx1c2gpCi0JCQlj b250aW51ZTsKLQotCQlpZiAoIW1hc3Rlcl9jdGwgfHwgbWFzdGVyX2N0bC0+aWR4ID4gY3RsLT5p ZHgpCi0JCQltYXN0ZXJfY3RsID0gY3RsOwotCi0JCWN0bC0+b3BzLnNldHVwX3NidWZfY2ZnKGN0 bCwgJmNzdGF0ZS0+c2J1Zl9jZmcpOwotCQljdGwtPm9wcy51cGRhdGVfcGVuZGluZ19mbHVzaChj dGwsIGZsdXNoX21hc2spOwotCX0KLQotCWlmIChjc3RhdGUtPnNidWZfY2ZnLnJvdF9vcF9tb2Rl ID09IERQVV9DVExfUk9UX09QX01PREVfSU5MSU5FX0FTWU5DICYmCi0JCQltYXN0ZXJfY3RsICYm IG1hc3Rlcl9jdGwtPm9wcy50cmlnZ2VyX3JvdF9zdGFydCkKLQkJbWFzdGVyX2N0bC0+b3BzLnRy aWdnZXJfcm90X3N0YXJ0KG1hc3Rlcl9jdGwpOwotCi0JRFBVX0FUUkFDRV9FTkQoImNydGNfa2lj a29mZl9yb3QiKTsKLX0KLQogdm9pZCBkcHVfY3J0Y19jb21taXRfa2lja29mZihzdHJ1Y3QgZHJt X2NydGMgKmNydGMpCiB7CiAJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwpAQCAtMjQ4MSwx MCArMjQxMSw2IEBAIHZvaWQgZHB1X2NydGNfY29tbWl0X2tpY2tvZmYoc3RydWN0IGRybV9jcnRj ICpjcnRjKQogCiAJRFBVX0FUUkFDRV9CRUdJTigiY3J0Y19jb21taXQiKTsKIAotCS8qIGRlZmF1 bHQgdG8gQVNZTkMgbW9kZSBmb3IgaW5saW5lIHJvdGF0aW9uICovCi0JY3N0YXRlLT5zYnVmX2Nm Zy5yb3Rfb3BfbW9kZSA9IGRwdV9jcnRjLT5zYnVmX2ZsdXNoX21hc2sgPwotCQlEUFVfQ1RMX1JP VF9PUF9NT0RFX0lOTElORV9BU1lOQyA6IERQVV9DVExfUk9UX09QX01PREVfT0ZGTElORTsKLQog CWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2RlciwgJmRldi0+bW9kZV9jb25maWcuZW5jb2Rlcl9s aXN0LCBoZWFkKSB7CiAJCXN0cnVjdCBkcHVfZW5jb2Rlcl9raWNrb2ZmX3BhcmFtcyBwYXJhbXMg PSB7IDAgfTsKIApAQCAtMjQ5NSwyOSArMjQyMSw5IEBAIHZvaWQgZHB1X2NydGNfY29tbWl0X2tp Y2tvZmYoc3RydWN0IGRybV9jcnRjICpjcnRjKQogCQkgKiBFbmNvZGVyIHdpbGwgZmx1c2gvc3Rh cnQgbm93LCB1bmxlc3MgaXQgaGFzIGEgdHggcGVuZGluZy4KIAkJICogSWYgc28sIGl0IG1heSBk ZWxheSBhbmQgZmx1c2ggYXQgYW4gaXJxIGV2ZW50IChlLmcuIHBwZG9uZSkKIAkJICovCi0JCXBh cmFtcy5pbmxpbmVfcm90YXRlX3ByZWZpbGwgPSBjc3RhdGUtPnNidWZfcHJlZmlsbF9saW5lOwog CQlkcHVfZW5jb2Rlcl9wcmVwYXJlX2Zvcl9raWNrb2ZmKGVuY29kZXIsICZwYXJhbXMpOwotCi0J CS8qCi0JCSAqIEZvciBpbmxpbmUgQVNZTkMgbW9kZXMsIHRoZSBmbHVzaCBiaXRzIGFyZSBub3Qg d3JpdHRlbgotCQkgKiB0byBoYXJkd2FyZSBhdG9taWNhbGx5LCBzbyBhdm9pZCB1c2luZyBpdCBp ZiBhIHZpZGVvCi0JCSAqIG1vZGUgZW5jb2RlciBpcyBhY3RpdmUgb24gdGhpcyBDUlRDLgotCQkg Ki8KLQkJaWYgKGNzdGF0ZS0+c2J1Zl9jZmcucm90X29wX21vZGUgPT0KLQkJCQlEUFVfQ1RMX1JP VF9PUF9NT0RFX0lOTElORV9BU1lOQyAmJgotCQkJCWRwdV9lbmNvZGVyX2dldF9pbnRmX21vZGUo ZW5jb2RlcikgPT0KLQkJCQlJTlRGX01PREVfVklERU8pCi0JCQljc3RhdGUtPnNidWZfY2ZnLnJv dF9vcF9tb2RlID0KLQkJCQlEUFVfQ1RMX1JPVF9PUF9NT0RFX0lOTElORV9TWU5DOwogCX0KIAot CS8qCi0JICogRm9yIEFTWU5DIGlubGluZSBtb2Rlcywga2ljayBvZmYgdGhlIHJvdGF0b3Igbm93 IHNvIHRoYXQgdGhlIEgvVwotCSAqIGNhbiBzdGFydCBhcyBzb29uIGFzIGl0J3MgcmVhZHkuCi0J ICovCi0JaWYgKGNzdGF0ZS0+c2J1Zl9jZmcucm90X29wX21vZGUgPT0gRFBVX0NUTF9ST1RfT1Bf TU9ERV9JTkxJTkVfQVNZTkMpCi0JCV9kcHVfY3J0Y19jb21taXRfa2lja29mZl9yb3QoY3J0Yywg Y3N0YXRlKTsKLQogCS8qIHdhaXQgZm9yIGZyYW1lX2V2ZW50X2RvbmUgY29tcGxldGlvbiAqLwog CURQVV9BVFJBQ0VfQkVHSU4oIndhaXRfZm9yX2ZyYW1lX2RvbmVfZXZlbnQiKTsKIAlyZXQgPSBf ZHB1X2NydGNfd2FpdF9mb3JfZnJhbWVfZG9uZShjcnRjKTsKQEAgLTI1MzIsMjQgKzI0MzgsMTAg QEAgdm9pZCBkcHVfY3J0Y19jb21taXRfa2lja29mZihzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAJ aWYgKGF0b21pY19pbmNfcmV0dXJuKCZkcHVfY3J0Yy0+ZnJhbWVfcGVuZGluZykgPT0gMSkgewog CQkvKiBhY3F1aXJlIGJhbmR3aWR0aCBhbmQgb3RoZXIgcmVzb3VyY2VzICovCiAJCURQVV9ERUJV RygiY3J0YyVkIGZpcnN0IGNvbW1pdFxuIiwgY3J0Yy0+YmFzZS5pZCk7Ci0JCURQVV9FVlQzMihE Uk1JRChjcnRjKSwgY3N0YXRlLT5zYnVmX2NmZy5yb3Rfb3BfbW9kZSwKLQkJCQlEUFVfRVZUTE9H X0ZVTkNfQ0FTRTEpOwotCX0gZWxzZSB7CisJfSBlbHNlCiAJCURQVV9ERUJVRygiY3J0YyVkIGNv bW1pdFxuIiwgY3J0Yy0+YmFzZS5pZCk7Ci0JCURQVV9FVlQzMihEUk1JRChjcnRjKSwgY3N0YXRl LT5zYnVmX2NmZy5yb3Rfb3BfbW9kZSwKLQkJCQlEUFVfRVZUTE9HX0ZVTkNfQ0FTRTIpOwotCX0K LQlkcHVfY3J0Yy0+cGxheV9jb3VudCsrOwogCi0JLyoKLQkgKiBGb3IgU1lOQyBpbmxpbmUgbW9k ZXMsIGRlbGF5IHRoZSBraWNrIG9mZiB1bnRpbCBhZnRlciB0aGUKLQkgKiB3YWl0IGZvciBmcmFt ZSBkb25lIGluIGNhc2UgdGhlIHdhaXQgdGltZXMgb3V0LgotCSAqCi0JICogQWxzbyBwZXJmb3Jt IGEgZmluYWwga2lja29mZiB3aGVuIHRyYW5zaXRpb25pbmcgYmFjayB0bwotCSAqIG9mZmxpbmUg bW9kZS4KLQkgKi8KLQlpZiAoY3N0YXRlLT5zYnVmX2NmZy5yb3Rfb3BfbW9kZSAhPSBEUFVfQ1RM X1JPVF9PUF9NT0RFX0lOTElORV9BU1lOQykKLQkJX2RwdV9jcnRjX2NvbW1pdF9raWNrb2ZmX3Jv dChjcnRjLCBjc3RhdGUpOworCWRwdV9jcnRjLT5wbGF5X2NvdW50Kys7CiAKIAlkcHVfdmJpZl9j bGVhcl9lcnJvcnMoZHB1X2ttcyk7CiAKQEAgLTM1MTksMTQgKzM0MTEsNiBAQCBzdGF0aWMgdm9p ZCBkcHVfY3J0Y19pbnN0YWxsX3Byb3BlcnRpZXMoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCQkJ ImRyYW1faWIiLCAweDAsIDAsIFU2NF9NQVgsCiAJCQljYXRhbG9nLT5wZXJmLm1heF9id19oaWdo ICogMTAwMFVMTCwKIAkJCUNSVENfUFJPUF9EUkFNX0lCKTsKLQltc21fcHJvcGVydHlfaW5zdGFs bF9yYW5nZSgmZHB1X2NydGMtPnByb3BlcnR5X2luZm8sCi0JCQkicm90X3ByZWZpbGxfYnciLCAw LCAwLCBVNjRfTUFYLAotCQkJY2F0YWxvZy0+cGVyZi5tYXhfYndfaGlnaCAqIDEwMDBVTEwsCi0J CQlDUlRDX1BST1BfUk9UX1BSRUZJTExfQlcpOwotCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3Jhbmdl KCZkcHVfY3J0Yy0+cHJvcGVydHlfaW5mbywKLQkJCSJyb3RfY2xrIiwgMCwgMCwgVTY0X01BWCwK LQkJCWRwdV9rbXMtPnBlcmYubWF4X2NvcmVfY2xrX3JhdGUsCi0JCQlDUlRDX1BST1BfUk9UX0NM Syk7CiAKIAltc21fcHJvcGVydHlfaW5zdGFsbF9yYW5nZSgmZHB1X2NydGMtPnByb3BlcnR5X2lu Zm8sCiAJCSJpZGxlX3RpbWVvdXQiLCBJRExFX1RJTUVPVVQsIDAsIFU2NF9NQVgsIDAsCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2NydGMuaAppbmRleCAxNWUzZWI2Li45ZGVjMGI5 IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfY3J0Yy5oCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9jcnRjLmgKQEAgLTIwMSw4ICsy MDEsNiBAQCBzdHJ1Y3QgZHB1X2NydGNfZXZlbnQgewogICogQG1pc3JfZW5hYmxlICAgOiBib29s ZWFuIGVudHJ5IGluZGljYXRlcyBtaXNyIGVuYWJsZS9kaXNhYmxlIHN0YXR1cy4KICAqIEBtaXNy X2ZyYW1lX2NvdW50ICA6IG1pc3IgZnJhbWUgY291bnQgcHJvdmlkZWQgYnkgY2xpZW50CiAgKiBA bWlzcl9kYXRhICAgICA6IHN0b3JlIG1pc3IgZGF0YSBiZWZvcmUgdHVybmluZyBvZmYgdGhlIGNs b2Nrcy4KLSAqIEBzYnVmX2ZsdXNoX21hc2s6IGZsdXNoIG1hc2sgZm9yIGlubGluZSByb3RhdG9y Ci0gKiBAc2J1Zl9mbHVzaF9tYXNrX29sZDogaW5saW5lIHJvdGF0b3IgZmx1c2ggbWFzayBmb3Ig cHJldmlvdXMgY29tbWl0CiAgKiBAcG93ZXJfZXZlbnQgICA6IHJlZ2lzdGVyZWQgcG93ZXIgZXZl bnQgaGFuZGxlCiAgKiBAY3VyX3BlcmYgICAgICA6IGN1cnJlbnQgcGVyZm9ybWFuY2UgY29tbWl0 dGVkIHRvIGNsb2NrL2JhbmR3aWR0aCBkcml2ZXIKICAqIEBycF9sb2NrICAgICAgIDogc2VyaWFs aXphdGlvbiBsb2NrIGZvciByZXNvdXJjZSBwb29sCkBAIC0yNjUsOSArMjYzLDYgQEAgc3RydWN0 IGRwdV9jcnRjIHsKIAl1MzIgbWlzcl9mcmFtZV9jb3VudDsKIAl1MzIgbWlzcl9kYXRhW0NSVENf RFVBTF9NSVhFUlNdOwogCi0JdTMyIHNidWZfZmx1c2hfbWFzazsKLQl1MzIgc2J1Zl9mbHVzaF9t YXNrX29sZDsKLQogCXN0cnVjdCBkcHVfcG93ZXJfZXZlbnQgKnBvd2VyX2V2ZW50OwogCiAJc3Ry dWN0IGRwdV9jb3JlX3BlcmZfcGFyYW1zIGN1cl9wZXJmOwpAQCAtMjkwLDEyICsyODUsNiBAQCBz dHJ1Y3QgZHB1X2NydGNfcmVzX29wcyB7CiAJdm9pZCAoKnB1dCkodm9pZCAqdmFsKTsKIH07CiAK LS8qIGNydGMgcmVzb3VyY2UgdHlwZSAoMHgwLTB4ZmZmZiByZXNlcnZlZCBmb3IgaHcgYmxvY2sg dHlwZSAqLwotI2RlZmluZSBEUFVfQ1JUQ19SRVNfUk9UX09VVF9GQk8JMHgxMDAwMAotI2RlZmlu ZSBEUFVfQ1JUQ19SRVNfUk9UX09VVF9GQgkJMHgxMDAwMQotI2RlZmluZSBEUFVfQ1JUQ19SRVNf Uk9UX1BMQU5FCQkweDEwMDAyCi0jZGVmaW5lIERQVV9DUlRDX1JFU19ST1RfSU5fRkIJCTB4MTAw MDMKLQogI2RlZmluZSBEUFVfQ1JUQ19SRVNfRkxBR19GUkVFCQlCSVQoMCkKIAogLyoqCkBAIC0z NTcsOCArMzQ2LDYgQEAgc3RydWN0IGRwdV9jcnRjX3Jlc3Bvb2wgewogICogQGRzX2RpcnR5OiBC b29sZWFuIHRvIGluZGljYXRlIGlmIGRpcnR5IG9yIG5vdAogICogQGRzX2NmZzogRGVzdGluYXRp b24gc2NhbGVyIGNvbmZpZwogICogQG5ld19wZXJmOiBuZXcgcGVyZm9ybWFuY2Ugc3RhdGUgYmVp bmcgcmVxdWVzdGVkCi0gKiBAc2J1Zl9jZmc6IHN0cmVhbSBidWZmZXIgY29uZmlndXJhdGlvbgot ICogQHNidWZfcHJlZmlsbF9saW5lOiBudW1iZXIgb2YgbGluZSBmb3IgaW5saW5lIHJvdGF0b3Ig cHJlZmV0Y2gKICAqLwogc3RydWN0IGRwdV9jcnRjX3N0YXRlIHsKIAlzdHJ1Y3QgZHJtX2NydGNf c3RhdGUgYmFzZTsKQEAgLTM4NCw5ICszNzEsNiBAQCBzdHJ1Y3QgZHB1X2NydGNfc3RhdGUgewog CXN0cnVjdCBkcHVfaHdfZHNfY2ZnIGRzX2NmZ1tEUFVfTUFYX0RTX0NPVU5UXTsKIAogCXN0cnVj dCBkcHVfY29yZV9wZXJmX3BhcmFtcyBuZXdfcGVyZjsKLQlzdHJ1Y3QgZHB1X2N0bF9zYnVmX2Nm ZyBzYnVmX2NmZzsKLQl1MzIgc2J1Zl9wcmVmaWxsX2xpbmU7Ci0KIAlzdHJ1Y3QgZHB1X2NydGNf cmVzcG9vbCBycDsKIH07CiAKQEAgLTU0MSwyMyArNTI1LDYgQEAgc3RhdGljIGlubGluZSBib29s IGRwdV9jcnRjX2lzX2VuYWJsZWQoc3RydWN0IGRybV9jcnRjICpjcnRjKQogfQogCiAvKioKLSAq IGRwdV9jcnRjX2dldF9pbmxpbmVfcHJlZmlsbCAtIGdldCBjdXJyZW50IGlubGluZSByb3RhdGlv biBwcmVmaWxsCi0gKiBAY3J0YzogUG9pbnRlciB0byBjcnRjCi0gKiByZXR1cm46IG51bWJlciBv ZiBwcmVmaWxsIGxpbmVzCi0gKi8KLXN0YXRpYyBpbmxpbmUgdTMyIGRwdV9jcnRjX2dldF9pbmxp bmVfcHJlZmlsbChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCi17Ci0Jc3RydWN0IGRwdV9jcnRjX3N0 YXRlICpjc3RhdGU7Ci0KLQlpZiAoIWNydGMgfHwgIWNydGMtPnN0YXRlKQotCQlyZXR1cm4gMDsK LQotCWNzdGF0ZSA9IHRvX2RwdV9jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKLQlyZXR1cm4gY3N0 YXRlLT5zYnVmX2NmZy5yb3Rfb3BfbW9kZSAhPSBEUFVfQ1RMX1JPVF9PUF9NT0RFX09GRkxJTkUg PwotCQljc3RhdGUtPnNidWZfcHJlZmlsbF9saW5lIDogMDsKLX0KLQotLyoqCiAgKiBkcHVfY3J0 Y19ldmVudF9xdWV1ZSAtIHJlcXVlc3QgZXZlbnQgY2FsbGJhY2sKICAqIEBjcnRjOiBQb2ludGVy IHRvIGRybSBjcnRjIHN0cnVjdHVyZQogICogQGZ1bmM6IFBvaW50ZXIgdG8gY2FsbGJhY2sgZnVu Y3Rpb24KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9lbmNv ZGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5jCmluZGV4 IDkxYjllMDcuLmQxNzUyODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9lbmNvZGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1 X2VuY29kZXIuYwpAQCAtMTIyNSw4ICsxMjI1LDcgQEAgc3RhdGljIGludCBfZHB1X2VuY29kZXJf ZHNjX2Rpc2FibGUoc3RydWN0IGRwdV9lbmNvZGVyX3ZpcnQgKmRwdV9lbmMpCiB9CiAKIHN0YXRp YyBpbnQgX2RwdV9lbmNvZGVyX3VwZGF0ZV9yc2NfY2xpZW50KAotCQlzdHJ1Y3QgZHJtX2VuY29k ZXIgKmRybV9lbmMsCi0JCXN0cnVjdCBkcHVfZW5jb2Rlcl9yc2NfY29uZmlnICpjb25maWcsIGJv b2wgZW5hYmxlKQorCQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9lbmMsIGJvb2wgZW5hYmxlKQog ewogCXN0cnVjdCBkcHVfZW5jb2Rlcl92aXJ0ICpkcHVfZW5jOwogCXN0cnVjdCBkcm1fY3J0YyAq Y3J0YzsKQEAgLTEyNjUsMTMgKzEyNjQsMTEgQEAgc3RhdGljIGludCBfZHB1X2VuY29kZXJfdXBk YXRlX3JzY19jbGllbnQoCiAJCSgoKGRpc3BfaW5mby0+Y2FwYWJpbGl0aWVzICYgTVNNX0RJU1BM QVlfQ0FQX0NNRF9NT0RFKSAmJgogCQkgIGRpc3BfaW5mby0+aXNfcHJpbWFyeSkgPyBEUFVfUlND X0NNRF9TVEFURSA6CiAJCURQVV9SU0NfVklEX1NUQVRFKSA6IERQVV9SU0NfSURMRV9TVEFURTsK LQlwcmVmaWxsX2xpbmVzID0gY29uZmlnID8gbW9kZV9pbmZvLT5wcmVmaWxsX2xpbmVzICsKLQkJ Y29uZmlnLT5pbmxpbmVfcm90YXRlX3ByZWZpbGwgOiBtb2RlX2luZm8tPnByZWZpbGxfbGluZXM7 CiAKIAkvKiBjb21wYXJlIHNwZWNpZmljIGl0ZW1zIGFuZCByZWNvbmZpZ3VyZSB0aGUgcnNjICov CiAJaWYgKChyc2NfY29uZmlnLT5mcHMgIT0gbW9kZV9pbmZvLT5mcmFtZV9yYXRlKSB8fAogCSAg ICAocnNjX2NvbmZpZy0+dnRvdGFsICE9IG1vZGVfaW5mby0+dnRvdGFsKSB8fAotCSAgICAocnNj X2NvbmZpZy0+cHJlZmlsbF9saW5lcyAhPSBwcmVmaWxsX2xpbmVzKSB8fAorCSAgICAocnNjX2Nv bmZpZy0+cHJlZmlsbF9saW5lcyAhPSBtb2RlX2luZm8tPnByZWZpbGxfbGluZXMpIHx8CiAJICAg IChyc2NfY29uZmlnLT5qaXR0ZXJfbnVtZXIgIT0gbW9kZV9pbmZvLT5qaXR0ZXJfbnVtZXIpIHx8 CiAJICAgIChyc2NfY29uZmlnLT5qaXR0ZXJfZGVub20gIT0gbW9kZV9pbmZvLT5qaXR0ZXJfZGVu b20pKSB7CiAJCXJzY19jb25maWctPmZwcyA9IG1vZGVfaW5mby0+ZnJhbWVfcmF0ZTsKQEAgLTEz OTMsMTYgKzEzOTAsMTIgQEAgc3RhdGljIHZvaWQgX2RwdV9lbmNvZGVyX3Jlc291cmNlX2NvbnRy b2xfcnNjX3VwZGF0ZSgKIAkJc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5jLCBib29sIGVuYWJs ZSkKIHsKIAlzdHJ1Y3QgZHB1X2VuY29kZXJfdmlydCAqZHB1X2VuYyA9IHRvX2RwdV9lbmNvZGVy X3ZpcnQoZHJtX2VuYyk7Ci0Jc3RydWN0IGRwdV9lbmNvZGVyX3JzY19jb25maWcgcnNjX2NmZyA9 IHsgMCB9OwogCWludCBpOwogCiAJaWYgKGVuYWJsZSkgewotCQlyc2NfY2ZnLmlubGluZV9yb3Rh dGVfcHJlZmlsbCA9Ci0JCQkJZHB1X2NydGNfZ2V0X2lubGluZV9wcmVmaWxsKGRybV9lbmMtPmNy dGMpOwotCi0JCV9kcHVfZW5jb2Rlcl91cGRhdGVfcnNjX2NsaWVudChkcm1fZW5jLCAmcnNjX2Nm ZywgdHJ1ZSk7CisJCV9kcHVfZW5jb2Rlcl91cGRhdGVfcnNjX2NsaWVudChkcm1fZW5jLCB0cnVl KTsKIAl9IGVsc2UgewotCQlfZHB1X2VuY29kZXJfdXBkYXRlX3JzY19jbGllbnQoZHJtX2VuYywg TlVMTCwgZmFsc2UpOworCQlfZHB1X2VuY29kZXJfdXBkYXRlX3JzY19jbGllbnQoZHJtX2VuYywg ZmFsc2UpOwogCiAJCS8qKgogCQkgKiBkaXNhYmxlIHRoZSB2c3luYyBzb3VyY2UgYWZ0ZXIgdXBk YXRpbmcgdGhlIHJzYyBzdGF0ZS4gcnNjCkBAIC0xNzQ0LDcgKzE3MzcsNyBAQCBzdGF0aWMgaW50 IGRwdV9lbmNvZGVyX3Jlc291cmNlX2NvbnRyb2woc3RydWN0IGRybV9lbmNvZGVyICpkcm1fZW5j LAogCiAJCV9kcHVfZW5jb2Rlcl9pcnFfY29udHJvbChkcm1fZW5jLCB0cnVlKTsKIAotCQlfZHB1 X2VuY29kZXJfdXBkYXRlX3JzY19jbGllbnQoZHJtX2VuYywgTlVMTCwgdHJ1ZSk7CisJCV9kcHVf ZW5jb2Rlcl91cGRhdGVfcnNjX2NsaWVudChkcm1fZW5jLCB0cnVlKTsKIAogCQlEUFVfRVZUMzIo RFJNSUQoZHJtX2VuYyksIHN3X2V2ZW50LCBkcHVfZW5jLT5yY19zdGF0ZSwKIAkJCQlEUFVfRU5D X1JDX1NUQVRFX09OLCBEUFVfRVZUTE9HX0ZVTkNfQ0FTRTYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9lbmNvZGVyLmgKaW5kZXggNjlmYjI2Yy4uOTJiNjgzMiAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXIuaAorKysgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlci5oCkBAIC01MiwyNCArNTIs MTQgQEAgc3RydWN0IGRwdV9lbmNvZGVyX2h3X3Jlc291cmNlcyB7CiAKIC8qKgogICogZHB1X2Vu Y29kZXJfa2lja29mZl9wYXJhbXMgLSBpbmZvIGVuY29kZXIgcmVxdWlyZXMgYXQga2lja29mZgot ICogQGlubGluZV9yb3RhdGVfcHJlZmlsbDogbnVtYmVyIG9mIGxpbmVzIHRvIHByZWZpbGwgZm9y IGlubGluZSByb3RhdGlvbgogICogQGFmZmVjdGVkX2Rpc3BsYXlzOiAgYml0bWFzaywgYml0IHNl dCBtZWFucyB0aGUgUk9JIG9mIHRoZSBjb21taXQgbGllcyB3aXRoaW4KICAqICAgICAgICAgICAg ICAgICAgICAgIHRoZSBib3VuZHMgb2YgdGhlIHBoeXNpY2FsIGRpc3BsYXkgYXQgdGhlIGJpdCBp bmRleAogICovCiBzdHJ1Y3QgZHB1X2VuY29kZXJfa2lja29mZl9wYXJhbXMgewotCXUzMiBpbmxp bmVfcm90YXRlX3ByZWZpbGw7CiAJdW5zaWduZWQgbG9uZyBhZmZlY3RlZF9kaXNwbGF5czsKIH07 CiAKIC8qKgotICogZHB1X2VuY29kZXJfcnNjX2NvbmZpZyAtIHJzYyBjb25maWd1cmF0aW9uIGZv ciBlbmNvZGVyCi0gKiBAaW5saW5lX3JvdGF0ZV9wcmVmaWxsOiBudW1iZXIgb2YgbGluZXMgdG8g cHJlZmlsbCBmb3IgaW5saW5lIHJvdGF0aW9uCi0gKi8KLXN0cnVjdCBkcHVfZW5jb2Rlcl9yc2Nf Y29uZmlnIHsKLQl1MzIgaW5saW5lX3JvdGF0ZV9wcmVmaWxsOwotfTsKLQotLyoqCiAgKiBkcHVf ZW5jb2Rlcl9nZXRfaHdfcmVzb3VyY2VzIC0gUG9wdWxhdGUgdGFibGUgb2YgcmVxdWlyZWQgaGFy ZHdhcmUgcmVzb3VyY2VzCiAgKiBAZW5jb2RlcjoJZW5jb2RlciBwb2ludGVyCiAgKiBAaHdfcmVz OglyZXNvdXJjZSB0YWJsZSB0byBwb3B1bGF0ZSB3aXRoIGVuY29kZXIgcmVxdWlyZWQgcmVzb3Vy Y2VzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rl cl9waHlzLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlz LmgKaW5kZXggM2IwNTU2OS4uNmM5YjdkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5cy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9lbmNvZGVyX3BoeXMuaApAQCAtMjkwLDE1ICsyOTAsMTEgQEAgc3RhdGlj IGlubGluZSBpbnQgZHB1X2VuY29kZXJfcGh5c19pbmNfcGVuZGluZyhzdHJ1Y3QgZHB1X2VuY29k ZXJfcGh5cyAqcGh5cykKICAqIEBiYXNlOglCYXNlY2xhc3MgcGh5c2ljYWwgZW5jb2RlciBzdHJ1 Y3R1cmUKICAqIEBod19pbnRmOglIYXJkd2FyZSBpbnRlcmZhY2UgdG8gdGhlIGludGYgcmVnaXN0 ZXJzCiAgKiBAdGltaW5nX3BhcmFtczogQ3VycmVudCB0aW1pbmcgcGFyYW1ldGVyCi0gKiBAcm90 X2ZldGNoOglQcmVmaWxsIGZvciBpbmxpbmUgcm90YXRpb24KLSAqIEByb3RfZmV0Y2hfdmFsaWQ6 IHRydWUgaWYgcm90X2ZldGNoIGlzIHVwZGF0ZWQgKHJlc2V0IGluIGVuYyBlbmFibGUpCiAgKi8K IHN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzX3ZpZCB7CiAJc3RydWN0IGRwdV9lbmNvZGVyX3BoeXMg YmFzZTsKIAlzdHJ1Y3QgZHB1X2h3X2ludGYgKmh3X2ludGY7CiAJc3RydWN0IGludGZfdGltaW5n X3BhcmFtcyB0aW1pbmdfcGFyYW1zOwotCXN0cnVjdCBpbnRmX3Byb2dfZmV0Y2ggcm90X2ZldGNo OwotCWJvb2wgcm90X2ZldGNoX3ZhbGlkOwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfZW5jb2Rlcl9waHlzX3ZpZC5jIGIvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2VuY29kZXJfcGh5c192aWQuYwppbmRleCA2MmM2ZjVj Li4xYTg4MjY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf ZW5jb2Rlcl9waHlzX3ZpZC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9lbmNvZGVyX3BoeXNfdmlkLmMKQEAgLTIyOSw3MyArMjI5LDYgQEAgc3RhdGljIHZvaWQgcHJv Z3JhbW1hYmxlX2ZldGNoX2NvbmZpZyhzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5c19lbmMs CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShwaHlzX2VuYy0+ZW5jX3NwaW5sb2NrLCBsb2NrX2Zs YWdzKTsKIH0KIAotLyoKLSAqIHByb2dyYW1tYWJsZV9yb3RfZmV0Y2hfY29uZmlnOiBQcm9ncmFt cyBST1QgdG8gcHJlZmV0Y2ggbGluZXMgYnkgb2Zmc2V0dGluZwotICoJdGhlIHN0YXJ0IG9mIGZl dGNoIGludG8gdGhlIHZlcnRpY2FsIGZyb250IHBvcmNoIGZvciBjYXNlcyB3aGVyZSB0aGUKLSAq CXZzeW5jIHB1bHNlIHdpZHRoIGFuZCB2ZXJ0aWNhbCBiYWNrIHBvcmNoIHRpbWUgaXMgaW5zdWZm aWNpZW50Ci0gKgotICoJR2V0cyAjIG9mIGxpbmVzIHRvIHByZS1mZXRjaCwgdGhlbiBjYWxjdWxh dGUgVlNZTkMgY291bnRlciB2YWx1ZS4KLSAqCUhXIGxheWVyIHJlcXVpcmVzIFZTWU5DIGNvdW50 ZXIgb2YgZmlyc3QgcGl4ZWwgb2YgdGd0IFZGUCBsaW5lLgotICogQHBoeXNfZW5jOiBQb2ludGVy IHRvIHBoeXNpY2FsIGVuY29kZXIKLSAqIEByb3RfZmV0Y2hfbGluZXM6IG51bWJlciBvZiBsaW5l IHRvIHByZWZpbGwsIG9yIDAgdG8gZGlzYWJsZQotICovCi1zdGF0aWMgdm9pZCBwcm9ncmFtbWFi bGVfcm90X2ZldGNoX2NvbmZpZyhzdHJ1Y3QgZHB1X2VuY29kZXJfcGh5cyAqcGh5c19lbmMsCi0J CXUzMiByb3RfZmV0Y2hfbGluZXMpCi17Ci0Jc3RydWN0IGRwdV9lbmNvZGVyX3BoeXNfdmlkICp2 aWRfZW5jID0KLQkJdG9fZHB1X2VuY29kZXJfcGh5c192aWQocGh5c19lbmMpOwotCXN0cnVjdCBp bnRmX3Byb2dfZmV0Y2ggZiA9IHsgMCB9OwotCXN0cnVjdCBpbnRmX3RpbWluZ19wYXJhbXMgKnRp bWluZzsKLQl1MzIgdmZwX2ZldGNoX2xpbmVzID0gMDsKLQl1MzIgaG9yaXpfdG90YWwgPSAwOwot CXUzMiB2ZXJ0X3RvdGFsID0gMDsKLQl1MzIgcm90X2ZldGNoX3N0YXJ0X3ZzeW5jX2NvdW50ZXIg PSAwOwotCXUzMiBmbHVzaF9tYXNrID0gMDsKLQl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7Ci0K LQlpZiAoIXBoeXNfZW5jIHx8ICF2aWRfZW5jLT5od19pbnRmIHx8ICFwaHlzX2VuYy0+aHdfY3Rs IHx8Ci0JCQkhcGh5c19lbmMtPmh3X2N0bC0+b3BzLmdldF9iaXRtYXNrX2ludGYgfHwKLQkJCSFw aHlzX2VuYy0+aHdfY3RsLT5vcHMudXBkYXRlX3BlbmRpbmdfZmx1c2ggfHwKLQkJCSF2aWRfZW5j LT5od19pbnRmLT5vcHMuc2V0dXBfcm90X3N0YXJ0KQotCQlyZXR1cm47Ci0KLQl0aW1pbmcgPSAm dmlkX2VuYy0+dGltaW5nX3BhcmFtczsKLQl2ZnBfZmV0Y2hfbGluZXMgPSBwcm9ncmFtbWFibGVf ZmV0Y2hfZ2V0X251bV9saW5lcyh2aWRfZW5jLCB0aW1pbmcpOwotCWlmICh2ZnBfZmV0Y2hfbGlu ZXMgJiYgcm90X2ZldGNoX2xpbmVzKSB7Ci0JCXZlcnRfdG90YWwgPSBnZXRfdmVydGljYWxfdG90 YWwodGltaW5nKTsKLQkJaG9yaXpfdG90YWwgPSBnZXRfaG9yaXpvbnRhbF90b3RhbCh0aW1pbmcp OwotCQlpZiAodmVydF90b3RhbCA+PSAodmZwX2ZldGNoX2xpbmVzICsgcm90X2ZldGNoX2xpbmVz KSkgewotCQkJcm90X2ZldGNoX3N0YXJ0X3ZzeW5jX2NvdW50ZXIgPQotCQkJICAgICh2ZXJ0X3Rv dGFsIC0gdmZwX2ZldGNoX2xpbmVzIC0gcm90X2ZldGNoX2xpbmVzKSAqCi0JCQkgICAgaG9yaXpf dG90YWwgKyAxOwotCQkJZi5lbmFibGUgPSAxOwotCQkJZi5mZXRjaF9zdGFydCA9IHJvdF9mZXRj aF9zdGFydF92c3luY19jb3VudGVyOwotCQl9Ci0JfQotCi0JLyogcmV0dXJuIGlmIHJvdF9mZXRj aCBkb2VzIG5vdCBjaGFuZ2Ugc2luY2UgbGFzdCB1cGRhdGUgKi8KLQlpZiAodmlkX2VuYy0+cm90 X2ZldGNoX3ZhbGlkICYmCi0JCQkhbWVtY21wKCZ2aWRfZW5jLT5yb3RfZmV0Y2gsICZmLCBzaXpl b2YoZikpKQotCQlyZXR1cm47Ci0KLQlEUFVfREVCVUdfVklERU5DKHZpZF9lbmMsCi0JCSJyb3Rf ZmV0Y2hfbGluZXMgJXUgdmZwX2ZldGNoX2xpbmVzICV1IHJvdF9mZXRjaF9zdGFydF92c3luY19j b3VudGVyICV1XG4iLAotCQlyb3RfZmV0Y2hfbGluZXMsIHZmcF9mZXRjaF9saW5lcywKLQkJcm90 X2ZldGNoX3N0YXJ0X3ZzeW5jX2NvdW50ZXIpOwotCi0JcGh5c19lbmMtPmh3X2N0bC0+b3BzLmdl dF9iaXRtYXNrX2ludGYoCi0JCQlwaHlzX2VuYy0+aHdfY3RsLCAmZmx1c2hfbWFzaywgdmlkX2Vu Yy0+aHdfaW50Zi0+aWR4KTsKLQlwaHlzX2VuYy0+aHdfY3RsLT5vcHMudXBkYXRlX3BlbmRpbmdf Zmx1c2goCi0JCQlwaHlzX2VuYy0+aHdfY3RsLCBmbHVzaF9tYXNrKTsKLQotCXNwaW5fbG9ja19p cnFzYXZlKHBoeXNfZW5jLT5lbmNfc3BpbmxvY2ssIGxvY2tfZmxhZ3MpOwotCXZpZF9lbmMtPmh3 X2ludGYtPm9wcy5zZXR1cF9yb3Rfc3RhcnQodmlkX2VuYy0+aHdfaW50ZiwgJmYpOwotCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUocGh5c19lbmMtPmVuY19zcGlubG9jaywgbG9ja19mbGFncyk7Ci0K LQl2aWRfZW5jLT5yb3RfZmV0Y2ggPSBmOwotCXZpZF9lbmMtPnJvdF9mZXRjaF92YWxpZCA9IHRy dWU7Ci19Ci0KIHN0YXRpYyBib29sIGRwdV9lbmNvZGVyX3BoeXNfdmlkX21vZGVfZml4dXAoCiAJ CXN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzX2VuYywKIAkJY29uc3Qgc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKm1vZGUsCkBAIC02MjAsOSArNTUzLDYgQEAgc3RhdGljIHZvaWQgZHB1X2Vu Y29kZXJfcGh5c192aWRfZW5hYmxlKHN0cnVjdCBkcHVfZW5jb2Rlcl9waHlzICpwaHlzX2VuYykK IAlpZiAoV0FSTl9PTighdmlkX2VuYy0+aHdfaW50Zi0+b3BzLmVuYWJsZV90aW1pbmcpKQogCQly ZXR1cm47CiAKLQkvKiByZXNldCBzdGF0ZSB2YXJpYWJsZXMgdW50aWwgYWZ0ZXIgZmlyc3QgdXBk YXRlICovCi0JdmlkX2VuYy0+cm90X2ZldGNoX3ZhbGlkID0gZmFsc2U7Ci0KIAlkcHVfZW5jb2Rl cl9oZWxwZXJfc3BsaXRfY29uZmlnKHBoeXNfZW5jLCB2aWRfZW5jLT5od19pbnRmLT5pZHgpOwog CiAJZHB1X2VuY29kZXJfcGh5c192aWRfc2V0dXBfdGltaW5nX2VuZ2luZShwaHlzX2VuYyk7CkBA IC03NTksOCArNjg5LDYgQEAgc3RhdGljIHZvaWQgZHB1X2VuY29kZXJfcGh5c192aWRfcHJlcGFy ZV9mb3Jfa2lja29mZigKIAkJZHB1X2VuY29kZXJfaGVscGVyX3VucmVnaXN0ZXJfaXJxKHBoeXNf ZW5jLCBJTlRSX0lEWF9WU1lOQyk7CiAJCURQVV9EQkdfRFVNUCgiYWxsIiwgImRiZ19idXMiLCAi dmJpZl9kYmdfYnVzIiwgInBhbmljIik7CiAJfQotCi0JcHJvZ3JhbW1hYmxlX3JvdF9mZXRjaF9j b25maWcocGh5c19lbmMsIHBhcmFtcy0+aW5saW5lX3JvdGF0ZV9wcmVmaWxsKTsKIH0KIAogc3Rh dGljIHZvaWQgZHB1X2VuY29kZXJfcGh5c192aWRfZGlzYWJsZShzdHJ1Y3QgZHB1X2VuY29kZXJf cGh5cyAqcGh5c19lbmMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfaHdfY2F0YWxvZy5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3 X2NhdGFsb2cuYwppbmRleCAyODliOWZmLi43MDE5NjIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY2F0YWxvZy5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9tc20vZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nLmMKQEAgLTE0LDkgKzE0LDYgQEAKICNpbmNs dWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgogI2luY2x1 ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9N U01fUk9UQVRPUikKLSNpbmNsdWRlIDxsaW51eC9zb2MvcWNvbS9sbGNjLXFjb20uaD4KLSNlbmRp ZgogI2luY2x1ZGUgImRwdV9od19tZHNzLmgiCiAjaW5jbHVkZSAiZHB1X2h3X2NhdGFsb2cuaCIK ICNpbmNsdWRlICJkcHVfaHdfY2F0YWxvZ19mb3JtYXQuaCIKQEAgLTk0LDggKzkxLDYgQEAKICAq LwogI2RlZmluZSBQUk9QX0JJVFZBTFVFX0FDQ0VTUyhwLCBpLCBqLCBrKQkoKHAgKyBpKS0+Yml0 X3ZhbHVlW2pdW2tdKQogCi0jZGVmaW5lIERFRkFVTFRfU0JVRl9IRUFEUk9PTQkJKDIwKQotCiAv KgogICogRGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzCiAgKi8KQEAgLTMzMywxMyArMzI4LDYgQEAg ZW51bSB7CiAJUkVHX0RNQV9QUk9QX01BWAogfTsKIAotZW51bSB7Ci0JSU5MSU5FX1JPVF9YSU4s Ci0JSU5MSU5FX1JPVF9YSU5fVFlQRSwKLQlJTkxJTkVfUk9UX0NMS19DVFJMLAotCUlOTElORV9S T1RfUFJPUF9NQVgKLX07Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBkdHMgcHJvcGVydHkgZGVmaW5pdGlvbgogICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCkBAIC05MjMsOSArOTExLDYgQEAgc3RhdGljIHZvaWQgX2RwdV9zc3BwX3NldHVwX3ZpZyhz dHJ1Y3QgZHB1X21kc3NfY2ZnICpkcHVfY2ZnLAogCQkJInNzcHBfc2NhbGVyJXUiLCBzc3BwLT5p ZCAtIFNTUFBfVklHMCk7CiAJfQogCi0JaWYgKGRwdV9jZmctPmhhc19zYnVmKQotCQlzZXRfYml0 KERQVV9TU1BQX1NCVUYsICZzc3BwLT5mZWF0dXJlcyk7Ci0KIAlzYmxrLT5jc2NfYmxrLmlkID0g RFBVX1NTUFBfQ1NDOwogCXNucHJpbnRmKHNibGstPmNzY19ibGsubmFtZSwgRFBVX0hXX0JMS19O QU1FX0xFTiwKIAkJCSJzc3BwX2NzYyV1Iiwgc3NwcC0+aWQgLSBTU1BQX1ZJRzApOwpAQCAtMTI5 NSw4ICsxMjgwLDYgQEAgc3RhdGljIGludCBkcHVfY3RsX3BhcnNlX2R0KHN0cnVjdCBkZXZpY2Vf bm9kZSAqbnAsCiAJCQlzZXRfYml0KERQVV9DVExfU1BMSVRfRElTUExBWSwgJmN0bC0+ZmVhdHVy ZXMpOwogCQlpZiAoaSA8IE1BWF9QUF9TUExJVF9ESVNQTEFZX0NUTCkKIAkJCXNldF9iaXQoRFBV X0NUTF9QSU5HUE9OR19TUExJVCwgJmN0bC0+ZmVhdHVyZXMpOwotCQlpZiAoZHB1X2NmZy0+aGFz X3NidWYpCi0JCQlzZXRfYml0KERQVV9DVExfU0JVRiwgJmN0bC0+ZmVhdHVyZXMpOwogCX0KIAog ZW5kOgpAQCAtMTUzNCw5ICsxNTE3LDYgQEAgc3RhdGljIGludCBkcHVfaW50Zl9wYXJzZV9kdChz dHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCQkJaW50Zi0+Y29udHJvbGxlcl9pZCA9IG5vbmVfY291 bnQ7CiAJCQlub25lX2NvdW50Kys7CiAJCX0KLQotCQlpZiAoZHB1X2NmZy0+aGFzX3NidWYpCi0J CQlzZXRfYml0KERQVV9JTlRGX1JPVF9TVEFSVCwgJmludGYtPmZlYXR1cmVzKTsKIAl9CiAKIGVu ZDoKQEAgLTE3NjEsMTcwICsxNzQxLDYgQEAgc3RhdGljIHZvaWQgX2RwdV9kc3BwX3NldHVwX2Js b2NrcyhzdHJ1Y3QgZHB1X21kc3NfY2ZnICpkcHVfY2ZnLAogCX0KIH0KIAotI2lmIElTX0VOQUJM RUQoQ09ORklHX0RSTV9NU01fUk9UQVRPUikKLXN0YXRpYyBzdHJ1Y3QgZHB1X3Byb3BfdHlwZSBp bmxpbmVfcm90X3Byb3BbSU5MSU5FX1JPVF9QUk9QX01BWF0gPSB7Ci0Je0lOTElORV9ST1RfWElO LCAicWNvbSxkcHUtaW5saW5lLXJvdC14aW4iLCBmYWxzZSwKLQkJCQkJCQlQUk9QX1RZUEVfVTMy X0FSUkFZfSwKLQl7SU5MSU5FX1JPVF9YSU5fVFlQRSwgInFjb20sZHB1LWlubGluZS1yb3QteGlu LXR5cGUiLCBmYWxzZSwKLQkJCQkJCQlQUk9QX1RZUEVfU1RSSU5HX0FSUkFZfSwKLQl7SU5MSU5F X1JPVF9DTEtfQ1RSTCwgInFjb20sZHB1LWlubGluZS1yb3QtY2xrLWN0cmwiLCBmYWxzZSwKLQkJ CQkJCVBST1BfVFlQRV9CSVRfT0ZGU0VUX0FSUkFZfSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9kcHVf aW5saW5lX3JvdF9wYXJzZV9kdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAotCQlzdHJ1Y3QgZHB1 X21kc3NfY2ZnICpkcHVfY2ZnLCBzdHJ1Y3QgZHB1X3JvdF9jZmcgKnJvdCkKLXsKLQlpbnQgcmMs IHByb3BfY291bnRbSU5MSU5FX1JPVF9QUk9QX01BWF0sIGksIGosIGluZGV4OwotCXN0cnVjdCBk cHVfcHJvcF92YWx1ZSAqcHJvcF92YWx1ZSA9IE5VTEw7Ci0JYm9vbCBwcm9wX2V4aXN0c1tJTkxJ TkVfUk9UX1BST1BfTUFYXTsKLQl1MzIgb2ZmX2NvdW50LCBzc3BwX2NvdW50ID0gMCwgd2JfY291 bnQgPSAwOwotCWNvbnN0IGNoYXIgKnR5cGU7Ci0KLQlwcm9wX3ZhbHVlID0ga2NhbGxvYyhJTkxJ TkVfUk9UX1BST1BfTUFYLAotCQkJc2l6ZW9mKHN0cnVjdCBkcHVfcHJvcF92YWx1ZSksIEdGUF9L RVJORUwpOwotCWlmICghcHJvcF92YWx1ZSkKLQkJcmV0dXJuOwotCi0JcmMgPSBfdmFsaWRhdGVf ZHRfZW50cnkobnAsIGlubGluZV9yb3RfcHJvcCwKLQkJCUFSUkFZX1NJWkUoaW5saW5lX3JvdF9w cm9wKSwgcHJvcF9jb3VudCwgJm9mZl9jb3VudCk7Ci0JaWYgKHJjKQotCQlnb3RvIGVuZDsKLQot CXJjID0gX3JlYWRfZHRfZW50cnkobnAsIGlubGluZV9yb3RfcHJvcCwgQVJSQVlfU0laRShpbmxp bmVfcm90X3Byb3ApLAotCQkJcHJvcF9jb3VudCwgcHJvcF9leGlzdHMsIHByb3BfdmFsdWUpOwot CWlmIChyYykKLQkJZ290byBlbmQ7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgb2ZmX2NvdW50OyBpKysp IHsKLQkJcm90LT52YmlmX2NmZ1tpXS54aW5faWQgPSBQUk9QX1ZBTFVFX0FDQ0VTUyhwcm9wX3Zh bHVlLAotCQkJCQkJCUlOTElORV9ST1RfWElOLCBpKTsKLQkJb2ZfcHJvcGVydHlfcmVhZF9zdHJp bmdfaW5kZXgobnAsCi0JCQkJaW5saW5lX3JvdF9wcm9wW0lOTElORV9ST1RfWElOX1RZUEVdLnBy b3BfbmFtZSwKLQkJCQlpLCAmdHlwZSk7Ci0KLQkJaWYgKCFzdHJjbXAodHlwZSwgInNzcHAiKSkg ewotCQkJcm90LT52YmlmX2NmZ1tpXS5udW0gPSBJTkxJTkVfUk9UMF9TU1BQICsgc3NwcF9jb3Vu dDsKLQkJCXJvdC0+dmJpZl9jZmdbaV0uaXNfcmVhZCA9IHRydWU7Ci0JCQlyb3QtPnZiaWZfY2Zn W2ldLmNsa19jdHJsID0KLQkJCQkJRFBVX0NMS19DVFJMX0lOTElORV9ST1QwX1NTUFAKLQkJCQkJ KyBzc3BwX2NvdW50OwotCQkJc3NwcF9jb3VudCsrOwotCQl9IGVsc2UgaWYgKCFzdHJjbXAodHlw ZSwgIndiIikpIHsKLQkJCXJvdC0+dmJpZl9jZmdbaV0ubnVtID0gSU5MSU5FX1JPVDBfV0IgKyB3 Yl9jb3VudDsKLQkJCXJvdC0+dmJpZl9jZmdbaV0uaXNfcmVhZCA9IGZhbHNlOwotCQkJcm90LT52 YmlmX2NmZ1tpXS5jbGtfY3RybCA9Ci0JCQkJCURQVV9DTEtfQ1RSTF9JTkxJTkVfUk9UMF9XQgot CQkJCQkrIHdiX2NvdW50OwotCQkJd2JfY291bnQrKzsKLQkJfSBlbHNlIHsKLQkJCURQVV9FUlJP UigiaW52YWxpZCByb3RhdG9yIHZiaWYgdHlwZTolc1xuIiwgdHlwZSk7Ci0JCQlnb3RvIGVuZDsK LQkJfQotCi0JCWluZGV4ID0gcm90LT52YmlmX2NmZ1tpXS5jbGtfY3RybDsKLQkJaWYgKGluZGV4 IDwgMCB8fCBpbmRleCA+PSBEUFVfQ0xLX0NUUkxfTUFYKSB7Ci0JCQlEUFVfRVJST1IoImludmFs aWQgY2xrX2N0cmwgZW51bTolZFxuIiwgaW5kZXgpOwotCQkJZ290byBlbmQ7Ci0JCX0KLQotCQlm b3IgKGogPSAwOyBqIDwgZHB1X2NmZy0+bWRwX2NvdW50OyBqKyspIHsKLQkJCWRwdV9jZmctPm1k cFtqXS5jbGtfY3RybHNbaW5kZXhdLnJlZ19vZmYgPQotCQkJCVBST1BfQklUVkFMVUVfQUNDRVNT KHByb3BfdmFsdWUsCi0JCQkJCQlJTkxJTkVfUk9UX0NMS19DVFJMLCBpLCAwKTsKLQkJCWRwdV9j ZmctPm1kcFtqXS5jbGtfY3RybHNbaW5kZXhdLmJpdF9vZmYgPQotCQkJCVBST1BfQklUVkFMVUVf QUNDRVNTKHByb3BfdmFsdWUsCi0JCQkJCQlJTkxJTkVfUk9UX0NMS19DVFJMLCBpLCAxKTsKLQkJ fQotCi0JCURQVV9ERUJVRygicm90LSB4aW46JWQsIG51bTolZCwgcmQ6JWQsIGNsazolZDoweCV4 LyVkXG4iLAotCQkJCXJvdC0+dmJpZl9jZmdbaV0ueGluX2lkLAotCQkJCXJvdC0+dmJpZl9jZmdb aV0ubnVtLAotCQkJCXJvdC0+dmJpZl9jZmdbaV0uaXNfcmVhZCwKLQkJCQlyb3QtPnZiaWZfY2Zn W2ldLmNsa19jdHJsLAotCQkJCWRwdV9jZmctPm1kcFswXS5jbGtfY3RybHNbaW5kZXhdLnJlZ19v ZmYsCi0JCQkJZHB1X2NmZy0+bWRwWzBdLmNsa19jdHJsc1tpbmRleF0uYml0X29mZik7Ci0JfQot Ci0Jcm90LT52YmlmX2lkeCA9IFZCSUZfUlQ7Ci0Jcm90LT54aW5fY291bnQgPSBvZmZfY291bnQ7 Ci0KLWVuZDoKLQlrZnJlZShwcm9wX3ZhbHVlKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW50IGRw dV9yb3RfcGFyc2VfZHQoc3RydWN0IGRldmljZV9ub2RlICpucCwKLQkJc3RydWN0IGRwdV9tZHNz X2NmZyAqZHB1X2NmZykKLXsKLSNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fTVNNX1JPVEFUT1Ip Ci0Jc3RydWN0IGRwdV9yb3RfY2ZnICpyb3Q7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl djsKLQlzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzIHBoYXJnczsKLQlzdHJ1Y3QgbGxjY19zbGljZV9k ZXNjICpzbGljZTsKLQlpbnQgcmMgPSAwLCBpOwotCi0JaWYgKCFkcHVfY2ZnKSB7Ci0JCURQVV9F UlJPUigiaW52YWxpZCBhcmd1bWVudFxuIik7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBlbmQ7 Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IFJPVF9NQVg7IGkrKykgewotCQlyb3QgPSBkcHVfY2Zn LT5yb3QgKyBkcHVfY2ZnLT5yb3RfY291bnQ7Ci0JCXJvdC0+YmFzZSA9IDA7Ci0JCXJvdC0+bGVu ID0gMDsKLQotCQlyYyA9IG9mX3BhcnNlX3BoYW5kbGVfd2l0aF9hcmdzKG5wLAotCQkJCSJxY29t LGRwdS1pbmxpbmUtcm90YXRvciIsICIjbGlzdC1jZWxscyIsCi0JCQkJaSwgJnBoYXJncyk7Ci0J CWlmIChyYykgewotCQkJcmMgPSAwOwotCQkJYnJlYWs7Ci0JCX0gZWxzZSBpZiAoIXBoYXJncy5u cCB8fCAhcGhhcmdzLmFyZ3NfY291bnQpIHsKLQkJCXJjID0gLUVJTlZBTDsKLQkJCWJyZWFrOwot CQl9Ci0KLQkJcm90LT5pZCA9IFJPVF8wICsgcGhhcmdzLmFyZ3NbMF07Ci0KLQkJcGRldiA9IG9m X2ZpbmRfZGV2aWNlX2J5X25vZGUocGhhcmdzLm5wKTsKLQkJaWYgKHBkZXYpIHsKLQkJCXNsaWNl ID0gbGxjY19zbGljZV9nZXRkKCZwZGV2LT5kZXYsICJyb3RhdG9yIik7Ci0JCQlpZiAoSVNfRVJS X09SX05VTEwoc2xpY2UpKSB7Ci0JCQkJcm90LT5wZGV2ID0gTlVMTDsKLQkJCQlEUFVfRVJST1Io ImZhaWxlZCB0byBnZXQgc3lzdGVtIGNhY2hlICVsZFxuIiwKLQkJCQkJCVBUUl9FUlIoc2xpY2Up KTsKLQkJCX0gZWxzZSB7Ci0JCQkJcm90LT5zY2lkID0gbGxjY19nZXRfc2xpY2VfaWQoc2xpY2Up OwotCQkJCXJvdC0+c2xpY2Vfc2l6ZSA9IGxsY2NfZ2V0X3NsaWNlX3NpemUoc2xpY2UpOwotCQkJ CXJvdC0+cGRldiA9IHBkZXY7Ci0JCQkJbGxjY19zbGljZV9wdXRkKHNsaWNlKTsKLQkJCQlEUFVf REVCVUcoInJvdDolZCBzY2lkOiVkIHNsaWNlX3NpemU6JXp1a2JcbiIsCi0JCQkJCQlyb3QtPmlk LCByb3QtPnNjaWQsCi0JCQkJCQlyb3QtPnNsaWNlX3NpemUpOwotCQkJCV9kcHVfaW5saW5lX3Jv dF9wYXJzZV9kdChucCwgZHB1X2NmZywgcm90KTsKLQkJCQlkcHVfY2ZnLT5yb3RfY291bnQrKzsK LQkJCX0KLQkJfSBlbHNlIHsKLQkJCXJvdC0+cGRldiA9IE5VTEw7Ci0JCQlEUFVfRVJST1IoImlu dmFsaWQgZHB1IHJvdGF0b3Igbm9kZVxuIik7Ci0JCX0KLQotCQlvZl9ub2RlX3B1dChwaGFyZ3Mu bnApOwotCX0KLQotCWlmIChkcHVfY2ZnLT5yb3RfY291bnQpIHsKLQkJZHB1X2NmZy0+aGFzX3Ni dWYgPSB0cnVlOwotCQlkcHVfY2ZnLT5zYnVmX2hlYWRyb29tID0gREVGQVVMVF9TQlVGX0hFQURS T09NOwotCX0KLQotZW5kOgotCXJldHVybiByYzsKLSNlbHNlCi0JcmV0dXJuIDA7Ci0jZW5kaWYK LX0KLQogc3RhdGljIGludCBkcHVfZHNwcF90b3BfcGFyc2VfZHQoc3RydWN0IGRldmljZV9ub2Rl ICpucCwKIAkJc3RydWN0IGRwdV9tZHNzX2NmZyAqZHB1X2NmZykKIHsKQEAgLTMyMTksMTAgKzMw MzUsNiBAQCBzdHJ1Y3QgZHB1X21kc3NfY2ZnICpkcHVfaHdfY2F0YWxvZ19pbml0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIHUzMiBod19yZXYpCiAJaWYgKHJjKQogCQlnb3RvIGVuZDsKIAotCXJj ID0gZHB1X3JvdF9wYXJzZV9kdChucCwgZHB1X2NmZyk7Ci0JaWYgKHJjKQotCQlnb3RvIGVuZDsK LQogCXJjID0gZHB1X2N0bF9wYXJzZV9kdChucCwgZHB1X2NmZyk7CiAJaWYgKHJjKQogCQlnb3Rv IGVuZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19j YXRhbG9nLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfY2F0YWxvZy5o CmluZGV4IGFhNWIyNTYuLjQwMmU5MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20v ZGlzcC9kcHUxL2RwdV9od19jYXRhbG9nLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2h3X2NhdGFsb2cuaApAQCAtMTE5LDcgKzExOSw2IEBAIGVudW0gewogICogQERQ VV9TU1BQX0VYQ0xfUkVDVCwgICAgICBTU1BQIHN1cHBvcnRzIGV4Y2x1c2lvbiByZWN0CiAgKiBA RFBVX1NTUFBfU01BUlRfRE1BX1YxLCAgIFNtYXJ0RE1BIDEuMCBzdXBwb3J0CiAgKiBARFBVX1NT UFBfU01BUlRfRE1BX1YyLCAgIFNtYXJ0RE1BIDIuMCBzdXBwb3J0Ci0gKiBARFBVX1NTUFBfU0JV RiwgICAgICAgICAgIFNTUFAgc3VwcG9ydCBpbmxpbmUgc3RyZWFtIGJ1ZmZlcgogICogQERQVV9T U1BQX1RTX1BSRUZJTEwgICAgICBTdXBwb3J0cyBwcmVmaWxsIHdpdGggdHJhZmZpYyBzaGFwZXIK ICAqIEBEUFVfU1NQUF9UU19QUkVGSUxMX1JFQzEgU3VwcG9ydHMgcHJlZmlsbCB3aXRoIHRyYWZm aWMgc2hhcGVyIG11bHRpcmVjCiAgKiBARFBVX1NTUFBfQ0RQICAgICAgICAgICAgIFN1cHBvcnRz IGNsaWVudCBkcml2ZW4gcHJlZmV0Y2gKQEAgLTE0Miw3ICsxNDEsNiBAQCBlbnVtIHsKIAlEUFVf U1NQUF9FWENMX1JFQ1QsCiAJRFBVX1NTUFBfU01BUlRfRE1BX1YxLAogCURQVV9TU1BQX1NNQVJU X0RNQV9WMiwKLQlEUFVfU1NQUF9TQlVGLAogCURQVV9TU1BQX1RTX1BSRUZJTEwsCiAJRFBVX1NT UFBfVFNfUFJFRklMTF9SRUMxLAogCURQVV9TU1BQX0NEUCwKQEAgLTIxOSwyNyArMjE3LDE1IEBA IGVudW0gewogICogQ1RMIHN1Yi1ibG9ja3MKICAqIEBEUFVfQ1RMX1NQTElUX0RJU1BMQVkgICAg ICAgQ1RMIHN1cHBvcnRzIHZpZGVvIG1vZGUgc3BsaXQgZGlzcGxheQogICogQERQVV9DVExfUElO R1BPTkdfU1BMSVQgICAgICBDVEwgc3VwcG9ydHMgcGluZ3Bvbmcgc3BsaXQKLSAqIEBEUFVfQ1RM X1NCVUYgICAgICAgICAgICAgICAgQ1RMIHN1cHBvcnRzIGlubGluZSBzdHJlYW0gYnVmZmVyCiAg KiBARFBVX0NUTF9NQVgKICAqLwogZW51bSB7CiAJRFBVX0NUTF9TUExJVF9ESVNQTEFZID0gMHgx LAogCURQVV9DVExfUElOR1BPTkdfU1BMSVQsCi0JRFBVX0NUTF9TQlVGLAogCURQVV9DVExfTUFY CiB9OwogCiAvKioKLSAqIElOVEYgc3ViLWJsb2NrcwotICogQERQVV9JTlRGX1JPVF9TVEFSVCAg ICAgICAgICBJTlRGIHN1cHBvcnRzIHJvdGF0b3Igc3RhcnQgdHJpZ2dlcgotICogQERQVV9JTlRG X01BWAotICovCi1lbnVtIHsKLQlEUFVfSU5URl9ST1RfU1RBUlQgPSAweDEsCi0JRFBVX0lOVEZf TUFYCi19OwotCi0vKioKICAqIFdCIHN1Yi1ibG9ja3MgYW5kIGZlYXR1cmVzCiAgKiBARFBVX1dC X0xJTkVfTU9ERSAgICAgICAgV3JpdGViYWNrIG1vZHVsZSBzdXBwb3J0cyBsaW5lL2xpbmVhciBt b2RlCiAgKiBARFBVX1dCX0JMT0NLX01PREUgICAgICAgV3JpdGViYWNrIG1vZHVsZSBzdXBwb3J0 cyBibG9jayBtb2RlIHJlYWQKQEAgLTcxMCw0NCArNjk2LDYgQEAgc3RydWN0IGRwdV93Yl9jZmcg ewogfTsKIAogLyoqCi0gKiBzdHJ1Y3QgZHB1X3JvdF92YmlmX2NmZyAtIGlubGluZSByb3RhdG9y IHZiaWYgY29uZmlncwotICogQHhpbl9pZCAgICAgICAgICAgICB4aW4gY2xpZW50IGlkCi0gKiBA bnVtICAgICAgICAgICAgICAgIGVudW0gaWRlbnRpZnlpbmcgdGhpcyBibG9jawotICogQGlzX3Jl YWQgICAgICAgICAgICBpbmRpY2F0ZXMgcmVhZC93cml0ZSBjbGllbnQKLSAqIEBjbGtfY3RybCAg ICAgICAgICAgaW5kZXggdG8gY2xrIGNvbnRyb2wKLSAqLwotc3RydWN0IGRwdV9yb3RfdmJpZl9j ZmcgewotCXUzMiB4aW5faWQ7Ci0JdTMyIG51bTsKLQlib29sIGlzX3JlYWQ7Ci0JZW51bSBkcHVf Y2xrX2N0cmxfdHlwZSBjbGtfY3RybDsKLX07Ci0KLS8qKgotICogc3RydWN0IGRwdV9yb3RfY2Zn IC0gaW5mb3JtYXRpb24gb2Ygcm90YXRvciBibG9ja3MKLSAqIEBpZCAgICAgICAgICAgICAgICAg ZW51bSBpZGVudGlmeWluZyB0aGlzIGJsb2NrCi0gKiBAYmFzZSAgICAgICAgICAgICAgIHJlZ2lz dGVyIG9mZnNldCBvZiB0aGlzIGJsb2NrCi0gKiBAbGVuICAgICAgICAgICAgICAgIGxlbmd0aCBv ZiBoYXJkd2FyZSBibG9jawotICogQGZlYXR1cmVzICAgICAgICAgICBiaXQgbWFzayBpZGVudGlm eWluZyBzdWItYmxvY2tzL2ZlYXR1cmVzCi0gKiBAcGRldiAgICAgICAgICAgICAgIHByaXZhdGUg ZGV2aWNlIGhhbmRsZQotICogQHNjaWQgICAgICAgICAgICAgICBzdWJjYWNoZSBpZGVudGlmaWVy Ci0gKiBAc2xpY2Vfc2l6ZSAgICAgICAgIHN1YmNhY2hlIHNsaWNlIHNpemUKLSAqIEB2YmlmX2lk eCAgICAgICAgICAgdmJpZiBpZGVudGlmaWVyCi0gKiBAeGluX2NvdW50ICAgICAgICAgIG51bWJl ciBvZiB4aW4gY2xpZW50cwotICogQHZiaWZfY2ZnICAgICAgICAgICB2YmlmIHNldHRpbmdzIHJl bGF0ZWQgdG8gcm90YXRvcgotICovCi1zdHJ1Y3QgZHB1X3JvdF9jZmcgewotCURQVV9IV19CTEtf SU5GTzsKLQl2b2lkICpwZGV2OwotCWludCBzY2lkOwotCXNpemVfdCBzbGljZV9zaXplOwotCXUz MiB2YmlmX2lkeDsKLQotCXUzMiB4aW5fY291bnQ7Ci0Jc3RydWN0IGRwdV9yb3RfdmJpZl9jZmcg dmJpZl9jZmdbTUFYX0JMT0NLU107Ci19OwotCi0vKioKICAqIHN0cnVjdCBkcHVfdmJpZl9keW5h bWljX290X2NmZyAtIGR5bmFtaWMgT1Qgc2V0dGluZwogICogQHBwcyAgICAgICAgICAgICAgICBw aXhlbCBwZXIgc2Vjb25kcwogICogQG90X2xpbWl0ICAgICAgICAgICBPVCBsaW1pdCB0byB1c2Ug dXAgdG8gc3BlY2lmaWVkIHBpeGVsIHBlciBzZWNvbmQKQEAgLTkwOSw4ICs4NTcsNiBAQCBzdHJ1 Y3QgZHB1X3BlcmZfY2ZnIHsKICAqIEBoYXNfY2RwICAgICAgICAgICAgQ2xpZW50IGRyaXZlbiBw cmVmZXRjaCBmZWF0dXJlIHN0YXR1cwogICogQGhhc193Yl91YndjICAgICAgICBVQldDIGZlYXR1 cmUgc3VwcG9ydGVkIG9uIFdCCiAgKiBAdWJ3Y192ZXJzaW9uICAgICAgIFVCV0MgZmVhdHVyZSB2 ZXJzaW9uICgweDAgZm9yIG5vdCBzdXBwb3J0ZWQpCi0gKiBAaGFzX3NidWYgICAgICAgICAgIGlu ZGljYXRlIGlmIHN0cmVhbSBidWZmZXIgaXMgYXZhaWxhYmxlCi0gKiBAc2J1Zl9oZWFkcm9vbSAg ICAgIHN0cmVhbSBidWZmZXIgaGVhZHJvb20gaW4gbGluZXMKICAqIEBoYXNfaWRsZV9wYyAgICAg ICAgaW5kaWNhdGUgaWYgaWRsZSBwb3dlciBjb2xsYXBzZSBmZWF0dXJlIGlzIHN1cHBvcnRlZAog ICogQGRtYV9mb3JtYXRzICAgICAgICBTdXBwb3J0ZWQgZm9ybWF0cyBmb3IgZG1hIHBpcGUKICAq IEBjdXJzb3JfZm9ybWF0cyAgICAgU3VwcG9ydGVkIGZvcm1hdHMgZm9yIGN1cnNvciBwaXBlCkBA IC05MzQsOCArODgwLDYgQEAgc3RydWN0IGRwdV9tZHNzX2NmZyB7CiAJYm9vbCBoYXNfZGltX2xh eWVyOwogCWJvb2wgaGFzX3diX3Vid2M7CiAJdTMyIHVid2NfdmVyc2lvbjsKLQlib29sIGhhc19z YnVmOwotCXUzMiBzYnVmX2hlYWRyb29tOwogCWJvb2wgaGFzX2lkbGVfcGM7CiAJdTMyIHZiaWZf cW9zX25sdmw7CiAJdTMyIHRzX3ByZWZpbGxfcmV2OwpAQCAtOTc4LDkgKzkyMiw2IEBAIHN0cnVj dCBkcHVfbWRzc19jZmcgewogCXUzMiB3Yl9jb3VudDsKIAlzdHJ1Y3QgZHB1X3diX2NmZyB3YltN QVhfQkxPQ0tTXTsKIAotCXUzMiByb3RfY291bnQ7Ci0Jc3RydWN0IGRwdV9yb3RfY2ZnIHJvdFtN QVhfQkxPQ0tTXTsKLQogCXUzMiB2YmlmX2NvdW50OwogCXN0cnVjdCBkcHVfdmJpZl9jZmcgdmJp ZltNQVhfQkxPQ0tTXTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2h3X2N0bC5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2N0 bC5jCmluZGV4IDQ0ZWY3MzcuLjY5MjJkOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9od19jdGwuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3Av ZHB1MS9kcHVfaHdfY3RsLmMKQEAgLTMxLDEyICszMSw4IEBACiAjZGVmaW5lICAgQ1RMX1BSRVBB UkUgICAgICAgICAgICAgICAgICAgMHgwZDAKICNkZWZpbmUgICBDVExfU1dfUkVTRVQgICAgICAg ICAgICAgICAgICAweDAzMAogI2RlZmluZSAgIENUTF9MQVlFUl9FWFROX09GRlNFVCAgICAgICAg IDB4NDAKLSNkZWZpbmUgICBDVExfUk9UX1RPUCAgICAgICAgICAgICAgICAgICAweDBDMAotI2Rl ZmluZSAgIENUTF9ST1RfRkxVU0ggICAgICAgICAgICAgICAgIDB4MEM0Ci0jZGVmaW5lICAgQ1RM X1JPVF9TVEFSVCAgICAgICAgICAgICAgICAgMHgwQ0MKIAogI2RlZmluZSBDVExfTUlYRVJfQk9S REVSX09VVCAgICAgICAgICAgIEJJVCgyNCkKLSNkZWZpbmUgQ1RMX0ZMVVNIX01BU0tfUk9UICAg ICAgICAgICAgICBCSVQoMjcpCiAjZGVmaW5lIENUTF9GTFVTSF9NQVNLX0NUTCAgICAgICAgICAg ICAgQklUKDE3KQogCiAjZGVmaW5lIERQVV9SRUdfUkVTRVRfVElNRU9VVF9VUyAgICAgICAgMjAw MApAQCAtODcsMTYgKzgzLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGRwdV9od19jdGxfdHJpZ2dl cl9wZW5kaW5nKHN0cnVjdCBkcHVfaHdfY3RsICpjdHgpCiAJRFBVX1JFR19XUklURSgmY3R4LT5o dywgQ1RMX1BSRVBBUkUsIDB4MSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkcHVfaHdfY3Rs X3RyaWdnZXJfcm90X3N0YXJ0KHN0cnVjdCBkcHVfaHdfY3RsICpjdHgpCi17Ci0JLyogUk9UIGZs dXNoIGJpdCBpcyBsYXRjaGVkIGR1cmluZyBST1Qgc3RhcnQsIHNvIHNldCBpdCBmaXJzdCAqLwot CWlmIChDVExfRkxVU0hfTUFTS19ST1QgJiBjdHgtPnBlbmRpbmdfZmx1c2hfbWFzaykgewotCQlj dHgtPnBlbmRpbmdfZmx1c2hfbWFzayAmPSB+Q1RMX0ZMVVNIX01BU0tfUk9UOwotCQlEUFVfUkVH X1dSSVRFKCZjdHgtPmh3LCBDVExfRkxVU0gsIENUTF9GTFVTSF9NQVNLX1JPVCk7Ci0JfQotCURQ VV9SRUdfV1JJVEUoJmN0eC0+aHcsIENUTF9ST1RfU1RBUlQsIEJJVCgwKSk7Ci19Ci0KIHN0YXRp YyBpbmxpbmUgdm9pZCBkcHVfaHdfY3RsX2NsZWFyX3BlbmRpbmdfZmx1c2goc3RydWN0IGRwdV9o d19jdGwgKmN0eCkKIHsKIAljdHgtPnBlbmRpbmdfZmx1c2hfbWFzayA9IDB4MDsKQEAgLTEyNSwx MyArMTExLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGRwdV9od19jdGxfdHJpZ2dlcl9mbHVzaChz dHJ1Y3QgZHB1X2h3X2N0bCAqY3R4KQogc3RhdGljIGlubGluZSB1MzIgZHB1X2h3X2N0bF9nZXRf Zmx1c2hfcmVnaXN0ZXIoc3RydWN0IGRwdV9od19jdGwgKmN0eCkKIHsKIAlzdHJ1Y3QgZHB1X2h3 X2Jsa19yZWdfbWFwICpjID0gJmN0eC0+aHc7Ci0JdTMyIHJvdF9vcF9tb2RlOwotCi0Jcm90X29w X21vZGUgPSBEUFVfUkVHX1JFQUQoYywgQ1RMX1JPVF9UT1ApICYgMHgzOwotCi0JLyogcm90YXRl IGZsdXNoIGJpdCBpcyB1bmRlZmluZWQgaWYgb2ZmbGluZSBtb2RlLCBzbyBpZ25vcmUgaXQgKi8K LQlpZiAocm90X29wX21vZGUgPT0gRFBVX0NUTF9ST1RfT1BfTU9ERV9PRkZMSU5FKQotCQlyZXR1 cm4gRFBVX1JFR19SRUFEKGMsIENUTF9GTFVTSCkgJiB+Q1RMX0ZMVVNIX01BU0tfUk9UOwogCiAJ cmV0dXJuIERQVV9SRUdfUkVBRChjLCBDVExfRkxVU0gpOwogfQpAQCAtMjkzLDE5ICsyNzIsNiBA QCBzdGF0aWMgaW5saW5lIGludCBkcHVfaHdfY3RsX2dldF9iaXRtYXNrX3diKHN0cnVjdCBkcHVf aHdfY3RsICpjdHgsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGRwdV9od19j dGxfZ2V0X2JpdG1hc2tfcm90KHN0cnVjdCBkcHVfaHdfY3RsICpjdHgsCi0JCXUzMiAqZmx1c2hi aXRzLCBlbnVtIGRwdV9yb3Qgcm90KQotewotCXN3aXRjaCAocm90KSB7Ci0JY2FzZSBST1RfMDoK LQkJKmZsdXNoYml0cyB8PSBDVExfRkxVU0hfTUFTS19ST1Q7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6 Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGlubGluZSBp bnQgZHB1X2h3X2N0bF9nZXRfYml0bWFza19jZG0oc3RydWN0IGRwdV9od19jdGwgKmN0eCwKIAkJ dTMyICpmbHVzaGJpdHMsIGVudW0gZHB1X2NkbSBjZG0pCiB7CkBAIC01NTIsMTcgKzUxOCw2IEBA IHN0YXRpYyB2b2lkIGRwdV9od19jdGxfaW50Zl9jZmcoc3RydWN0IGRwdV9od19jdGwgKmN0eCwK IAlEUFVfUkVHX1dSSVRFKGMsIENUTF9UT1AsIGludGZfY2ZnKTsKIH0KIAotc3RhdGljIHZvaWQg ZHB1X2h3X2N0bF9zZXR1cF9zYnVmX2NmZyhzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4LAotCXN0cnVj dCBkcHVfY3RsX3NidWZfY2ZnICpjZmcpCi17Ci0Jc3RydWN0IGRwdV9od19ibGtfcmVnX21hcCAq YyA9ICZjdHgtPmh3OwotCXUzMiB2YWw7Ci0KLQl2YWwgPSBjZmctPnJvdF9vcF9tb2RlICYgMHgz OwotCi0JRFBVX1JFR19XUklURShjLCBDVExfUk9UX1RPUCwgdmFsKTsKLX0KLQogc3RhdGljIHZv aWQgZHB1X2h3X3JlZ19kbWFfZmx1c2goc3RydWN0IGRwdV9od19jdGwgKmN0eCkKIHsKIAlzdHJ1 Y3QgZHB1X2h3X3JlZ19kbWFfb3BzICpvcHMgPSBkcHVfcmVnX2RtYV9nZXRfb3BzKCk7CkBAIC01 OTQsMTIgKzU0OSw2IEBAIHN0YXRpYyB2b2lkIF9zZXR1cF9jdGxfb3BzKHN0cnVjdCBkcHVfaHdf Y3RsX29wcyAqb3BzLAogCW9wcy0+Z2V0X2JpdG1hc2tfY2RtID0gZHB1X2h3X2N0bF9nZXRfYml0 bWFza19jZG07CiAJb3BzLT5nZXRfYml0bWFza193YiA9IGRwdV9od19jdGxfZ2V0X2JpdG1hc2tf d2I7CiAJb3BzLT5yZWdfZG1hX2ZsdXNoID0gZHB1X2h3X3JlZ19kbWFfZmx1c2g7Ci0KLQlpZiAo Y2FwICYgQklUKERQVV9DVExfU0JVRikpIHsKLQkJb3BzLT5nZXRfYml0bWFza19yb3QgPSBkcHVf aHdfY3RsX2dldF9iaXRtYXNrX3JvdDsKLQkJb3BzLT5zZXR1cF9zYnVmX2NmZyA9IGRwdV9od19j dGxfc2V0dXBfc2J1Zl9jZmc7Ci0JCW9wcy0+dHJpZ2dlcl9yb3Rfc3RhcnQgPSBkcHVfaHdfY3Rs X3RyaWdnZXJfcm90X3N0YXJ0OwotCX0KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZHB1X2h3X2Jsa19v cHMgZHB1X2h3X29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9od19jdGwuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19j dGwuaAppbmRleCA0N2E2YTBiLi5kMzQzNWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfaHdfY3RsLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2h3X2N0bC5oCkBAIC0yOSwyMCArMjksNiBAQCBlbnVtIGRwdV9jdGxfbW9kZV9z ZWwgewogCURQVV9DVExfTU9ERV9TRUxfQ01ECiB9OwogCi0vKioKLSAqIGRwdV9jdGxfcm90X29w X21vZGUgLSBpbmxpbmUgcm90YXRpb24gbW9kZQotICogRFBVX0NUTF9ST1RfT1BfTU9ERV9PRkZM SU5FOiBvZmZsaW5lIHJvdGF0aW9uCi0gKiBEUFVfQ1RMX1JPVF9PUF9NT0RFX1JFU0VSVkVEOiBy ZXNlcnZlZAotICogRFBVX0NUTF9ST1RfT1BfTU9ERV9JTkxJTkVfU1lOQzogaW5saW5lIHJvdGF0 aW9uIHN5bmNocm9ub3VzIG1vZGUKLSAqIERQVV9DVExfUk9UX09QX01PREVfSU5MSU5FX0FTWU5D OiBpbmxpbmUgcm90YXRpb24gYXN5bmNocm9ub3VzIG1vZGUKLSAqLwotZW51bSBkcHVfY3RsX3Jv dF9vcF9tb2RlIHsKLQlEUFVfQ1RMX1JPVF9PUF9NT0RFX09GRkxJTkUsCi0JRFBVX0NUTF9ST1Rf T1BfTU9ERV9SRVNFUlZFRCwKLQlEUFVfQ1RMX1JPVF9PUF9NT0RFX0lOTElORV9TWU5DLAotCURQ VV9DVExfUk9UX09QX01PREVfSU5MSU5FX0FTWU5DLAotfTsKLQogc3RydWN0IGRwdV9od19jdGw7 CiAvKioKICAqIHN0cnVjdCBkcHVfaHdfc3RhZ2VfY2ZnIC0gYmxlbmRpbmcgc3RhZ2UgY2ZnCkBA IC03MiwxNCArNTgsNiBAQCBzdHJ1Y3QgZHB1X2h3X2ludGZfY2ZnIHsKIH07CiAKIC8qKgotICog c3RydWN0IGRwdV9jdGxfc2J1Zl9jZmcgLSBjb250cm9sIGZvciBzdHJlYW0gYnVmZmVyIGNvbmZp Z3VyYXRpb24KLSAqIEByb3Rfb3BfbW9kZTogcm90YXRvciBvcGVyYXRpb24gbW9kZQotICovCi1z dHJ1Y3QgZHB1X2N0bF9zYnVmX2NmZyB7Ci0JZW51bSBkcHVfY3RsX3JvdF9vcF9tb2RlIHJvdF9v cF9tb2RlOwotfTsKLQotLyoqCiAgKiBzdHJ1Y3QgZHB1X2h3X2N0bF9vcHMgLSBJbnRlcmZhY2Ug dG8gdGhlIHdiIEh3IGRyaXZlciBmdW5jdGlvbnMKICAqIEFzc3VtcHRpb24gaXMgdGhlc2UgZnVu Y3Rpb25zIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGNsb2NrcyBhcmUgZW5hYmxlZAogICovCkBAIC0x MDAsMTMgKzc4LDYgQEAgc3RydWN0IGRwdV9od19jdGxfb3BzIHsKIAl2b2lkICgqdHJpZ2dlcl9w ZW5kaW5nKShzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4KTsKIAogCS8qKgotCSAqIGtpY2tvZmYgcm90 YXRvciBvcGVyYXRpb24gZm9yIFN3IGNvbnRyb2xsZWQgaW50ZXJmYWNlcwotCSAqIERTSSBjbWQg bW9kZSBhbmQgV0IgaW50ZXJmYWNlIGFyZSBTVyBjb250cm9sbGVkCi0JICogQGN0eCAgICAgICA6 IGN0bCBwYXRoIGN0eCBwb2ludGVyCi0JICovCi0Jdm9pZCAoKnRyaWdnZXJfcm90X3N0YXJ0KShz dHJ1Y3QgZHB1X2h3X2N0bCAqY3R4KTsKLQotCS8qKgogCSAqIENsZWFyIHRoZSB2YWx1ZSBvZiB0 aGUgY2FjaGVkIHBlbmRpbmdfZmx1c2hfbWFzawogCSAqIE5vIGVmZmVjdCBvbiBoYXJkd2FyZQog CSAqIEBjdHggICAgICAgOiBjdGwgcGF0aCBjdHggcG9pbnRlcgpAQCAtMTg5LDEwICsxNjAsNiBA QCBzdHJ1Y3QgZHB1X2h3X2N0bF9vcHMgewogCQl1MzIgKmZsdXNoYml0cywKIAkJZW51bSBkcHVf d2IgYmxrKTsKIAotCWludCAoKmdldF9iaXRtYXNrX3JvdCkoc3RydWN0IGRwdV9od19jdGwgKmN0 eCwKLQkJdTMyICpmbHVzaGJpdHMsCi0JCWVudW0gZHB1X3JvdCBibGspOwotCiAJLyoqCiAJICog U2V0IGFsbCBibGVuZCBzdGFnZXMgdG8gZGlzYWJsZWQKIAkgKiBAY3R4ICAgICAgIDogY3RsIHBh dGggY3R4IHBvaW50ZXIKQEAgLTIwOCw5ICsxNzUsNiBAQCBzdHJ1Y3QgZHB1X2h3X2N0bF9vcHMg ewogCXZvaWQgKCpzZXR1cF9ibGVuZHN0YWdlKShzdHJ1Y3QgZHB1X2h3X2N0bCAqY3R4LAogCQll bnVtIGRwdV9sbSBsbSwgc3RydWN0IGRwdV9od19zdGFnZV9jZmcgKmNmZyk7CiAKLQl2b2lkICgq c2V0dXBfc2J1Zl9jZmcpKHN0cnVjdCBkcHVfaHdfY3RsICpjdHgsCi0JCXN0cnVjdCBkcHVfY3Rs X3NidWZfY2ZnICpjZmcpOwotCiAJLyoqCiAJICogRmx1c2ggdGhlIHJlZyBkbWEgYnkgc2VuZGlu ZyBsYXN0IGNvbW1hbmQuCiAJICogQGN0eCAgICAgICA6IGN0bCBwYXRoIGN0eCBwb2ludGVyCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfaW50Zi5jIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2ludGYuYwppbmRleCA4MzAyMzYw Li43Mzg2ZDQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVf aHdfaW50Zi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19pbnRm LmMKQEAgLTIzMCwyNSArMjMwLDYgQEAgc3RhdGljIHZvaWQgZHB1X2h3X2ludGZfc2V0dXBfcHJn X2ZldGNoKAogCURQVV9SRUdfV1JJVEUoYywgSU5URl9DT05GSUcsIGZldGNoX2VuYWJsZSk7CiB9 CiAKLXN0YXRpYyB2b2lkIGRwdV9od19pbnRmX3NldHVwX3JvdF9zdGFydCgKLQkJc3RydWN0IGRw dV9od19pbnRmICppbnRmLAotCQljb25zdCBzdHJ1Y3QgaW50Zl9wcm9nX2ZldGNoICpmZXRjaCkK LXsKLQlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwICpjID0gJmludGYtPmh3OwotCWludCBmZXRj aF9lbmFibGU7Ci0KLQlmZXRjaF9lbmFibGUgPSBEUFVfUkVHX1JFQUQoYywgSU5URl9DT05GSUcp OwotCWlmIChmZXRjaC0+ZW5hYmxlKSB7Ci0JCWZldGNoX2VuYWJsZSB8PSBCSVQoMTkpOwotCQlE UFVfUkVHX1dSSVRFKGMsIElOVEZfUFJPR19ST1RfU1RBUlQsCi0JCQkJZmV0Y2gtPmZldGNoX3N0 YXJ0KTsKLQl9IGVsc2UgewotCQlmZXRjaF9lbmFibGUgJj0gfkJJVCgxOSk7Ci0JfQotCi0JRFBV X1JFR19XUklURShjLCBJTlRGX0NPTkZJRywgZmV0Y2hfZW5hYmxlKTsKLX0KLQogc3RhdGljIHZv aWQgZHB1X2h3X2ludGZfZ2V0X3N0YXR1cygKIAkJc3RydWN0IGRwdV9od19pbnRmICppbnRmLAog CQlzdHJ1Y3QgaW50Zl9zdGF0dXMgKnMpCkBAIC0zMTEsOCArMjkyLDYgQEAgc3RhdGljIHZvaWQg X3NldHVwX2ludGZfb3BzKHN0cnVjdCBkcHVfaHdfaW50Zl9vcHMgKm9wcywKIAlvcHMtPnNldHVw X21pc3IgPSBkcHVfaHdfaW50Zl9zZXR1cF9taXNyOwogCW9wcy0+Y29sbGVjdF9taXNyID0gZHB1 X2h3X2ludGZfY29sbGVjdF9taXNyOwogCW9wcy0+Z2V0X2xpbmVfY291bnQgPSBkcHVfaHdfaW50 Zl9nZXRfbGluZV9jb3VudDsKLQlpZiAoY2FwICYgQklUKERQVV9JTlRGX1JPVF9TVEFSVCkpCi0J CW9wcy0+c2V0dXBfcm90X3N0YXJ0ID0gZHB1X2h3X2ludGZfc2V0dXBfcm90X3N0YXJ0OwogfQog CiBzdGF0aWMgc3RydWN0IGRwdV9od19ibGtfb3BzIGRwdV9od19vcHMgPSB7CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfaW50Zi5oIGIvZHJpdmVycy9n cHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X2ludGYuaAppbmRleCA5YzU0YTE5Li5hNzlkNzM1 IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfaW50Zi5o CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19pbnRmLmgKQEAgLTU3 LDcgKzU3LDYgQEAgc3RydWN0IGludGZfc3RhdHVzIHsKICAqICBBc3N1bXB0aW9uIGlzIHRoZXNl IGZ1bmN0aW9ucyB3aWxsIGJlIGNhbGxlZCBhZnRlciBjbG9ja3MgYXJlIGVuYWJsZWQKICAqIEAg c2V0dXBfdGltaW5nX2dlbiA6IHByb2dyYW1zIHRoZSB0aW1pbmcgZW5naW5lCiAgKiBAIHNldHVw X3Byb2dfZmV0Y2ggOiBlbmFibGVzL2Rpc2FibGVzIHRoZSBwcm9ncmFtbWFibGUgZmV0Y2ggbG9n aWMKLSAqIEAgc2V0dXBfcm90X3N0YXJ0ICA6IGVuYWJsZXMvZGlzYWJsZXMgdGhlIHJvdGF0b3Ig c3RhcnQgdHJpZ2dlcgogICogQCBlbmFibGVfdGltaW5nOiBlbmFibGUvZGlzYWJsZSB0aW1pbmcg ZW5naW5lCiAgKiBAIGdldF9zdGF0dXM6IHJldHVybnMgaWYgdGltaW5nIGVuZ2luZSBpcyBlbmFi bGVkIG9yIG5vdAogICogQCBzZXR1cF9taXNyOiBlbmFibGVzL2Rpc2FibGVzIE1JU1IgaW4gSFcg cmVnaXN0ZXIKQEAgLTcyLDkgKzcxLDYgQEAgc3RydWN0IGRwdV9od19pbnRmX29wcyB7CiAJdm9p ZCAoKnNldHVwX3ByZ19mZXRjaCkoc3RydWN0IGRwdV9od19pbnRmICppbnRmLAogCQkJY29uc3Qg c3RydWN0IGludGZfcHJvZ19mZXRjaCAqZmV0Y2gpOwogCi0Jdm9pZCAoKnNldHVwX3JvdF9zdGFy dCkoc3RydWN0IGRwdV9od19pbnRmICppbnRmLAotCQkJY29uc3Qgc3RydWN0IGludGZfcHJvZ19m ZXRjaCAqZmV0Y2gpOwotCiAJdm9pZCAoKmVuYWJsZV90aW1pbmcpKHN0cnVjdCBkcHVfaHdfaW50 ZiAqaW50ZiwKIAkJCXU4IGVuYWJsZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9od19tZHNzLmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1 MS9kcHVfaHdfbWRzcy5oCmluZGV4IDA5NGE0MTguLjVlZGUyYjUgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19tZHNzLmgKKysrIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X21kc3MuaApAQCAtMTA3LDcgKzEwNyw2IEBAIGVudW0g ZHB1X2h3X2Jsa190eXBlIHsKIAlEUFVfSFdfQkxLX0lOVEYsCiAJRFBVX0hXX0JMS19XQiwKIAlE UFVfSFdfQkxLX0RTQywKLQlEUFVfSFdfQkxLX1JPVCwKIAlEUFVfSFdfQkxLX01BWCwKIH07CiAK QEAgLTI5OSwxOCArMjk4LDYgQEAgZW51bSBkcHVfaW9tbXVfZG9tYWluIHsKIAlEUFVfSU9NTVVf RE9NQUlOX01BWAogfTsKIAotZW51bSBkcHVfcm90IHsKLQlST1RfMCA9IDEsCi0JUk9UX01BWAot fTsKLQotZW51bSBkcHVfaW5saW5lX3JvdCB7Ci0JSU5MSU5FX1JPVF9OT05FLAotCUlOTElORV9S T1QwX1NTUFAsCi0JSU5MSU5FX1JPVDBfV0IsCi0JSU5MSU5FX1JPVF9NQVgKLX07Ci0KIC8qKgog ICogRFBVIEhXLENvbXBvbmVudCBvcmRlciBjb2xvciBtYXAKICAqLwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3JvdC5jIGIvZHJpdmVycy9ncHUvZHJt L21zbS9kaXNwL2RwdTEvZHB1X2h3X3JvdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCBiMjBhNjQwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2Rw dV9od19yb3QuYworKysgL2Rldi9udWxsCkBAIC0xLDk2MSArMCwwIEBACi0vKiBDb3B5cmlnaHQg KGMpIDIwMTctMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KLSAqLwotCi0jZGVmaW5lIHByX2ZtdChmbXQpCSJbZHJtOiVzOiVkXSAiIGZt dCwgX19mdW5jX18sIF9fTElORV9fCi0KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1 ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotCi0jaW5jbHVkZSAiZHB1X2ttcy5oIgotI2lu Y2x1ZGUgImRwdV9od19tZHNzLmgiCi0jaW5jbHVkZSAiZHB1X2h3aW8uaCIKLSNpbmNsdWRlICJk cHVfaHdfY2F0YWxvZy5oIgotI2luY2x1ZGUgImRwdV9od19yb3QuaCIKLSNpbmNsdWRlICJkcHVf Zm9ybWF0cy5oIgotI2luY2x1ZGUgImRwdV9yb3RhdG9yX2lubGluZS5oIgotCi0jZGVmaW5lIERQ VV9NT0RJRkxFUihfbW9kaWZpZXJfKSAoKF9tb2RpZmllcl8pICYgMHgwMGZmZmZmZmZmZmZmZmZm VUxMKQotI2RlZmluZSBEUFVfTU9ESUZJRVJfSVNfVElMRShfbW9kaWZpZXJfKSBcCi0JRFBVX01P RElGTEVSKChfbW9kaWZpZXJfKSAmIERSTV9GT1JNQVRfTU9EX1FDT01fVElMRSkKLSNkZWZpbmUg RFBVX01PRElGSUVSX0lTX1VCV0MoX21vZGlmaWVyXykgXAotCURQVV9NT0RJRkxFUigoX21vZGlm aWVyXykgJiBEUk1fRk9STUFUX01PRF9RQ09NX0NPTVBSRVNTRUQpCi0jZGVmaW5lIERQVV9NT0RJ RklFUl9JU18xMEIoX21vZGlmaWVyXykgXAotCURQVV9NT0RJRkxFUigoX21vZGlmaWVyXykgJiBE Uk1fRk9STUFUX01PRF9RQ09NX0RYKQotI2RlZmluZSBEUFVfTU9ESUZJRVJfSVNfVElHSFQoX21v ZGlmaWVyXykgXAotCURQVV9NT0RJRkxFUigoX21vZGlmaWVyXykgJiBEUk1fRk9STUFUX01PRF9R Q09NX1RJR0hUKQotCi0vKioKLSAqIF9yb3Rfb2Zmc2V0IC0gdXBkYXRlIHJlZ2lzdGVyIG1hcCBv ZiB0aGUgZ2l2ZW4gcm90YXRvciBpbnN0YW5jZQotICogQHJvdDogcm90YXRvciBpZGVudGlmaWVy Ci0gKiBAbTogUG9pbnRlciB0byBtZHNzIGNhdGFsb2cKLSAqIEBhZGRyOiBpL28gYWRkcmVzcyBt YXBwaW5nCi0gKiBAYjogUG9pbnRlciB0byByZWdpc3RlciBibG9jayBtYXBwaW5nIHN0cnVjdHVy ZQotICogcmV0dXJuOiBQb2ludGVyIHRvIHJvdGF0b3IgY29uZmlndXJhdGlvbiBvZiB0aGUgZ2l2 ZW4gaW5zdGFuY2UKLSAqLwotc3RhdGljIHN0cnVjdCBkcHVfcm90X2NmZyAqX3JvdF9vZmZzZXQo ZW51bSBkcHVfcm90IHJvdCwKLQkJc3RydWN0IGRwdV9tZHNzX2NmZyAqbSwKLQkJdm9pZCBfX2lv bWVtICphZGRyLAotCQlzdHJ1Y3QgZHB1X2h3X2Jsa19yZWdfbWFwICpiKQotewotCWludCBpOwot Ci0JZm9yIChpID0gMDsgaSA8IG0tPnJvdF9jb3VudDsgaSsrKSB7Ci0JCWlmIChyb3QgPT0gbS0+ cm90W2ldLmlkKSB7Ci0JCQliLT5iYXNlX29mZiA9IGFkZHI7Ci0JCQliLT5ibGtfb2ZmID0gbS0+ cm90W2ldLmJhc2U7Ci0JCQliLT5od3ZlcnNpb24gPSBtLT5od3ZlcnNpb247Ci0JCQliLT5sb2df bWFzayA9IERQVV9EQkdfTUFTS19ST1Q7Ci0JCQlyZXR1cm4gJm0tPnJvdFtpXTsKLQkJfQotCX0K LQotCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwotfQotCi0vKioKLSAqIF9kcHVfaHdfcm90X3Jl Z19kdW1wIC0gcGVyZm9ybSByZWdpc3RlciBkdW1wCi0gKiBAcHRyOiBwcml2YXRlIHBvaW50ZXIg dG8gcm90YXRvciBwbGF0Zm9ybSBkZXZpY2UKLSAqIHJldHVybjogTm9uZQotICovCi1zdGF0aWMg dm9pZCBfZHB1X2h3X3JvdF9yZWdfZHVtcCh2b2lkICpwdHIpCi17Ci0JZHB1X3JvdGF0b3JfaW5s aW5lX3JlZ19kdW1wKChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopIHB0cik7Ci19Ci0KLS8qKgot ICogZHB1X2h3X3JvdF9zdGFydCAtIHN0YXJ0IHJvdGF0b3IgYmVmb3JlIGFueSBjb21taXQKLSAq IEBodzogUG9pbnRlciB0byByb3RhdG9yIGhhcmR3YXJlIGRyaXZlcgotICogcmV0dXJuOiAwIGlm IHN1Y2Nlc3M7IGVycm9yIGNvZGUgb3RoZXJ3aXNlCi0gKi8KLXN0YXRpYyBpbnQgZHB1X2h3X3Jv dF9zdGFydChzdHJ1Y3QgZHB1X2h3X3JvdCAqaHcpCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldjsKLQlpbnQgcmM7Ci0KLQlpZiAoIWh3IHx8ICFody0+Y2FwcyB8fCAhaHctPmNhcHMt PnBkZXYpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHBhcmFtZXRlcnNcbiIpOwotCQlyZXR1cm4g LUVJTlZBTDsKLQl9Ci0KLQlwZGV2ID0gaHctPmNhcHMtPnBkZXY7Ci0KLQlyYyA9IGRwdV9kYmdf cmVnX3JlZ2lzdGVyX2NiKGh3LT5uYW1lLCBfZHB1X2h3X3JvdF9yZWdfZHVtcCwgcGRldik7Ci0J aWYgKHJjKQotCQlEUFVfRVJST1IoImZhaWxlZCB0byByZWdpc3RlciBkZWJ1ZyBkdW1wICVkXG4i LCByYyk7Ci0KLQlody0+cm90X2N0eCA9IGRwdV9yb3RhdG9yX2lubGluZV9vcGVuKHBkZXYpOwot CWlmIChJU19FUlJfT1JfTlVMTChody0+cm90X2N0eCkpIHsKLQkJcmMgPSBQVFJfRVJSKGh3LT5y b3RfY3R4KTsKLQkJaHctPnJvdF9jdHggPSBOVUxMOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JcmV0 dXJuIDA7Ci19Ci0KLS8qKgotICogZHB1X2h3X3JvdF9zdG9wIC0gc3RvcCByb3RhdG9yIGFmdGVy IGZpbmFsIGNvbW1pdAotICogQGh3OiBQb2ludGVyIHRvIHJvdGF0b3IgaGFyZHdhcmUgZHJpdmVy Ci0gKiByZXR1cm46IG5vbmUKLSAqLwotc3RhdGljIHZvaWQgZHB1X2h3X3JvdF9zdG9wKHN0cnVj dCBkcHVfaHdfcm90ICpodykKLXsKLQlpZiAoIWh3IHx8ICFody0+Y2FwcyB8fCAhaHctPmNhcHMt PnBkZXYpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHBhcmFtZXRlclxuIik7Ci0JCXJldHVybjsK LQl9Ci0KLQlkcHVfcm90YXRvcl9pbmxpbmVfcmVsZWFzZShody0+cm90X2N0eCk7Ci0JaHctPnJv dF9jdHggPSBOVUxMOwotCi0JZHB1X2RiZ19yZWdfdW5yZWdpc3Rlcl9jYihody0+bmFtZSwgX2Rw dV9od19yb3RfcmVnX2R1bXAsCi0JCQlody0+Y2Fwcy0+cGRldik7Ci19Ci0KLS8qKgotICogZHB1 X2h3X3JvdF90b192NGwyX3BpeGZtdCAtIGNvbnZlcnQgZHJtIHBpeGVsIGZvcm1hdCB0byB2NGwy IHBpeGVsIGZvcm1hdAotICogQGRybV9waXhmbXQ6IGRybSBmb3VyY2MgcGl4ZWwgZm9ybWF0Ci0g KiBAZHJtX21vZGlmaWVyOiBkcm0gcGl4ZWwgZm9ybWF0IG1vZGlmaWVyCi0gKiBAcGl4Zm10OiBQ b2ludGVyIHRvIHY0bDIgZm91cmNjIHBpeGVsIGZvcm1hdCAob3V0cHV0KQotICogcmV0dXJuOiAw IGlmIHN1Y2Nlc3M7IGVycm9yIGNvZGUgb3RoZXJ3aXNlCi0gKi8KLXN0YXRpYyBpbnQgZHB1X2h3 X3JvdF90b192NGwyX3BpeGZtdCh1MzIgZHJtX3BpeGZtdCwgdTY0IGRybV9tb2RpZmllciwKLQkJ dTMyICpwaXhmbXQpCi17Ci0JdTMyIHJjID0gMDsKLQotCWlmICghcGl4Zm10KQotCQlyZXR1cm4g LUVJTlZBTDsKLQotCXN3aXRjaCAoZHJtX3BpeGZtdCkgewotCWNhc2UgRFJNX0ZPUk1BVF9CR1I1 NjU6Ci0JCWlmIChEUFVfTU9ESUZJRVJfSVNfVUJXQyhkcm1fbW9kaWZpZXIpKQotCQkJKnBpeGZt dCA9IERQVV9QSVhfRk1UX1JHQl81NjVfVUJXQzsKLQkJZWxzZQotCQkJKnBpeGZtdCA9IERQVV9Q SVhfRk1UX1JHQl81NjU7Ci0JCWJyZWFrOwotCWNhc2UgRFJNX0ZPUk1BVF9CR1JBODg4ODoKLQkJ aWYgKERQVV9NT0RJRklFUl9JU19USUxFKGRybV9tb2RpZmllcikpCi0JCQkqcGl4Zm10ID0gRFBV X1BJWF9GTVRfQVJHQl84ODg4X1RJTEU7Ci0JCWVsc2UKLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZN VF9BUkdCXzg4ODg7Ci0JCWJyZWFrOwotCWNhc2UgRFJNX0ZPUk1BVF9CR1JYODg4ODoKLQkJaWYg KERQVV9NT0RJRklFUl9JU19USUxFKGRybV9tb2RpZmllcikpCi0JCQkqcGl4Zm10ID0gRFBVX1BJ WF9GTVRfWFJHQl84ODg4X1RJTEU7Ci0JCWVsc2UKLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9Y UkdCXzg4ODg7Ci0JCWJyZWFrOwotCWNhc2UgRFJNX0ZPUk1BVF9SR0JBODg4ODoKLQkJaWYgKERQ VV9NT0RJRklFUl9JU19USUxFKGRybV9tb2RpZmllcikpCi0JCQkqcGl4Zm10ID0gRFBVX1BJWF9G TVRfQUJHUl84ODg4X1RJTEU7Ci0JCWVsc2UKLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9BQkdS Xzg4ODg7Ci0JCWJyZWFrOwotCWNhc2UgRFJNX0ZPUk1BVF9SR0JYODg4ODoKLQkJaWYgKERQVV9N T0RJRklFUl9JU19USUxFKGRybV9tb2RpZmllcikpCi0JCQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRf WEJHUl84ODg4X1RJTEU7Ci0JCWVsc2UKLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9YQkdSXzg4 ODg7Ci0JCWJyZWFrOwotCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKLQkJaWYgKERQVV9NT0RJ RklFUl9JU19VQldDKGRybV9tb2RpZmllcikpCi0JCQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRfUkdC QV84ODg4X1VCV0M7Ci0JCWVsc2UgaWYgKERQVV9NT0RJRklFUl9JU19USUxFKGRybV9tb2RpZmll cikpCi0JCQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRfUkdCQV84ODg4X1RJTEU7Ci0JCWVsc2UKLQkJ CSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9SR0JBXzg4ODg7Ci0JCWJyZWFrOwotCWNhc2UgRFJNX0ZP Uk1BVF9YQkdSODg4ODoKLQkJaWYgKERQVV9NT0RJRklFUl9JU19VQldDKGRybV9tb2RpZmllcikp Ci0JCQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRfUkdCWF84ODg4X1VCV0M7Ci0JCWVsc2UgaWYgKERQ VV9NT0RJRklFUl9JU19USUxFKGRybV9tb2RpZmllcikpCi0JCQkqcGl4Zm10ID0gRFBVX1BJWF9G TVRfUkdCWF84ODg4X1RJTEU7Ci0JCWVsc2UKLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9SR0JY Xzg4ODg7Ci0JCWJyZWFrOwotCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKLQkJaWYgKERQVV9N T0RJRklFUl9JU19USUxFKGRybV9tb2RpZmllcikpCi0JCQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRf QkdSQV84ODg4X1RJTEU7Ci0JCWVsc2UKLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9CR1JBXzg4 ODg7Ci0JCWJyZWFrOwotCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKLQkJaWYgKERQVV9NT0RJ RklFUl9JU19USUxFKGRybV9tb2RpZmllcikpCi0JCQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRfQkdS WF84ODg4X1RJTEU7Ci0JCWVsc2UKLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9CR1JYXzg4ODg7 Ci0JCWJyZWFrOwotCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgotCQlpZiAoRFBVX01PRElGSUVSX0lT X1VCV0MoZHJtX21vZGlmaWVyKSkgewotCQkJaWYgKERQVV9NT0RJRklFUl9JU18xMEIoZHJtX21v ZGlmaWVyKSkgewotCQkJCWlmIChEUFVfTU9ESUZJRVJfSVNfVElHSFQoZHJtX21vZGlmaWVyKSkK LQkJCQkJKnBpeGZtdCA9Ci0JCQkJCURQVV9QSVhfRk1UX1lfQ0JDUl9IMlYyX1RQMTBfVUJXQzsK LQkJCQllbHNlCi0JCQkJCSpwaXhmbXQgPQotCQkJCQlEUFVfUElYX0ZNVF9ZX0NCQ1JfSDJWMl9Q MDEwX1VCV0M7Ci0JCQl9IGVsc2UgewotCQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9ZX0NCQ1Jf SDJWMl9VQldDOwotCQkJfQotCQl9IGVsc2UgaWYgKERQVV9NT0RJRklFUl9JU19USUxFKGRybV9t b2RpZmllcikpIHsKLQkJCWlmIChEUFVfTU9ESUZJRVJfSVNfMTBCKGRybV9tb2RpZmllcikpIHsK LQkJCQlpZiAoRFBVX01PRElGSUVSX0lTX1RJR0hUKGRybV9tb2RpZmllcikpCi0JCQkJCSpwaXhm bXQgPQotCQkJCQlEUFVfUElYX0ZNVF9ZX0NCQ1JfSDJWMl9UUDEwOwotCQkJCWVsc2UKLQkJCQkJ KnBpeGZtdCA9Ci0JCQkJCURQVV9QSVhfRk1UX1lfQ0JDUl9IMlYyX1AwMTBfVElMRTsKLQkJCX0g ZWxzZSB7Ci0JCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1UX1lfQ0JDUl9IMlYyX1RJTEU7Ci0JCQl9 Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoRFBVX01PRElGSUVSX0lTXzEwQihkcm1fbW9kaWZpZXIpKSB7 Ci0JCQkJaWYgKERQVV9NT0RJRklFUl9JU19USUdIVChkcm1fbW9kaWZpZXIpKQotCQkJCQkqcGl4 Zm10ID0KLQkJCQkJRFBVX1BJWF9GTVRfWV9DQkNSX0gyVjJfVFAxMDsKLQkJCQllbHNlCi0JCQkJ CSpwaXhmbXQgPQotCQkJCQlEUFVfUElYX0ZNVF9ZX0NCQ1JfSDJWMl9QMDEwOwotCQkJfSBlbHNl IHsKLQkJCQkqcGl4Zm10ID0gRFBVX1BJWF9GTVRfWV9DQkNSX0gyVjI7Ci0JCQl9Ci0JCX0KLQkJ YnJlYWs7Ci0JY2FzZSBEUk1fRk9STUFUX05WMjE6Ci0JCWlmIChEUFVfTU9ESUZJRVJfSVNfVElM RShkcm1fbW9kaWZpZXIpKQotCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1UX1lfQ1JDQl9IMlYyX1RJ TEU7Ci0JCWVsc2UKLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9ZX0NSQ0JfSDJWMjsKLQkJYnJl YWs7Ci0JY2FzZSBEUk1fRk9STUFUX0JHUkExMDEwMTAyOgotCQlpZiAoRFBVX01PRElGSUVSX0lT X1RJTEUoZHJtX21vZGlmaWVyKSkKLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9BUkdCXzIxMDEw MTBfVElMRTsKLQkJZWxzZQotCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1UX0FSR0JfMjEwMTAxMDsK LQkJYnJlYWs7Ci0JY2FzZSBEUk1fRk9STUFUX0JHUlgxMDEwMTAyOgotCQlpZiAoRFBVX01PRElG SUVSX0lTX1RJTEUoZHJtX21vZGlmaWVyKSkKLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9YUkdC XzIxMDEwMTBfVElMRTsKLQkJZWxzZQotCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1UX1hSR0JfMjEw MTAxMDsKLQkJYnJlYWs7Ci0JY2FzZSBEUk1fRk9STUFUX1JHQkExMDEwMTAyOgotCQlpZiAoRFBV X01PRElGSUVSX0lTX1RJTEUoZHJtX21vZGlmaWVyKSkKLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZN VF9BQkdSXzIxMDEwMTBfVElMRTsKLQkJZWxzZQotCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1UX0FC R1JfMjEwMTAxMDsKLQkJYnJlYWs7Ci0JY2FzZSBEUk1fRk9STUFUX1JHQlgxMDEwMTAyOgotCQlp ZiAoRFBVX01PRElGSUVSX0lTX1RJTEUoZHJtX21vZGlmaWVyKSkKLQkJCSpwaXhmbXQgPSBEUFVf UElYX0ZNVF9YQkdSXzIxMDEwMTBfVElMRTsKLQkJZWxzZQotCQkJKnBpeGZtdCA9IERQVV9QSVhf Rk1UX1hCR1JfMjEwMTAxMDsKLQkJYnJlYWs7Ci0JY2FzZSBEUk1fRk9STUFUX0FSR0IyMTAxMDEw OgotCQlpZiAoRFBVX01PRElGSUVSX0lTX1RJTEUoZHJtX21vZGlmaWVyKSkKLQkJCSpwaXhmbXQg PSBEUFVfUElYX0ZNVF9CR1JBXzEwMTAxMDJfVElMRTsKLQkJZWxzZQotCQkJKnBpeGZtdCA9IERQ VV9QSVhfRk1UX0JHUkFfMTAxMDEwMjsKLQkJYnJlYWs7Ci0JY2FzZSBEUk1fRk9STUFUX1hSR0Iy MTAxMDEwOgotCQlpZiAoRFBVX01PRElGSUVSX0lTX1RJTEUoZHJtX21vZGlmaWVyKSkKLQkJCSpw aXhmbXQgPSBEUFVfUElYX0ZNVF9CR1JYXzEwMTAxMDJfVElMRTsKLQkJZWxzZQotCQkJKnBpeGZt dCA9IERQVV9QSVhfRk1UX0JHUlhfMTAxMDEwMjsKLQkJYnJlYWs7Ci0JY2FzZSBEUk1fRk9STUFU X0FCR1IyMTAxMDEwOgotCQlpZiAoRFBVX01PRElGSUVSX0lTX1VCV0MoZHJtX21vZGlmaWVyKSkK LQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9SR0JBXzEwMTAxMDJfVUJXQzsKLQkJZWxzZSBpZiAo RFBVX01PRElGSUVSX0lTX1RJTEUoZHJtX21vZGlmaWVyKSkKLQkJCSpwaXhmbXQgPSBEUFVfUElY X0ZNVF9SR0JBXzEwMTAxMDJfVElMRTsKLQkJZWxzZQotCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1U X1JHQkFfMTAxMDEwMjsKLQkJYnJlYWs7Ci0JY2FzZSBEUk1fRk9STUFUX1hCR1IyMTAxMDEwOgot CQlpZiAoRFBVX01PRElGSUVSX0lTX1VCV0MoZHJtX21vZGlmaWVyKSkKLQkJCSpwaXhmbXQgPSBE UFVfUElYX0ZNVF9SR0JYXzEwMTAxMDJfVUJXQzsKLQkJZWxzZSBpZiAoRFBVX01PRElGSUVSX0lT X1RJTEUoZHJtX21vZGlmaWVyKSkKLQkJCSpwaXhmbXQgPSBEUFVfUElYX0ZNVF9SR0JYXzEwMTAx MDJfVElMRTsKLQkJZWxzZQotCQkJKnBpeGZtdCA9IERQVV9QSVhfRk1UX1JHQlhfMTAxMDEwMjsK LQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGRybSBwaXhlbCBmb3Jt YXQgJWMlYyVjJWMvJWxseFxuIiwKLQkJCQlkcm1fcGl4Zm10ID4+IDAsIGRybV9waXhmbXQgPj4g OCwKLQkJCQlkcm1fcGl4Zm10ID4+IDE2LCBkcm1fcGl4Zm10ID4+IDI0LAotCQkJCWRybV9tb2Rp Zmllcik7Ci0JCXJjID0gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQot Ci0vKioKLSAqIGRwdV9od19yb3RfdG9fZHJtX3BpeGZtdCAtIGNvbnZlcnQgdjRsMiBwaXhlbCBm b3JtYXQgdG8gZHJtIHBpeGVsIGZvcm1hdAotICogQHBpeGZtdDogdjRsMiBmb3VyY2MgcGl4ZWwg Zm9ybWF0Ci0gKiBAZHJtX3BpeGZtdDogUG9pbnRlciB0byBkcm0gZm9ydWNjIHBpeGVsIGZvcm1h dCAob3V0cHV0KQotICogQGRybV9tb2RpZmllcjogUG9pbnRlciB0byBkcm0gcGl4ZWwgZm9ybWF0 IG1vZGlmaWVyIChvdXRwdXQpCi0gKiByZXR1cm46IDAgaWYgc3VjY2VzczsgZXJyb3IgY29kZSBv dGhlcndpc2UKLSAqLwotc3RhdGljIGludCBkcHVfaHdfcm90X3RvX2RybV9waXhmbXQodTMyIHBp eGZtdCwgdTMyICpkcm1fcGl4Zm10LAotCQl1NjQgKmRybV9tb2RpZmllcikKLXsKLQl1MzIgcmMg PSAwOwotCi0Jc3dpdGNoIChwaXhmbXQpIHsKLQljYXNlIERQVV9QSVhfRk1UX1JHQl81NjU6Ci0J CSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9CR1I1NjU7Ci0JCSpkcm1fbW9kaWZpZXIgPSAwOwot CQlicmVhazsKLQljYXNlIERQVV9QSVhfRk1UX1JHQl81NjVfVUJXQzoKLQkJKmRybV9waXhmbXQg PSBEUk1fRk9STUFUX0JHUjU2NTsKLQkJKmRybV9tb2RpZmllciA9IERSTV9GT1JNQVRfTU9EX1FD T01fQ09NUFJFU1NFRCB8Ci0JCQkJRFJNX0ZPUk1BVF9NT0RfUUNPTV9USUxFOwotCQlicmVhazsK LQljYXNlIERQVV9QSVhfRk1UX1JHQkFfODg4ODoKLQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFU X0FCR1I4ODg4OwotCQkqZHJtX21vZGlmaWVyID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSBEUFVfUElY X0ZNVF9SR0JYXzg4ODg6Ci0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9YQkdSODg4ODsKLQkJ KmRybV9tb2RpZmllciA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgRFBVX1BJWF9GTVRfQkdSQV84ODg4 OgotCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfQVJHQjg4ODg7Ci0JCSpkcm1fbW9kaWZpZXIg PSAwOwotCQlicmVhazsKLQljYXNlIERQVV9QSVhfRk1UX0JHUlhfODg4ODoKLQkJKmRybV9waXhm bXQgPSBEUk1fRk9STUFUX1hSR0I4ODg4OwotCQkqZHJtX21vZGlmaWVyID0gMDsKLQkJYnJlYWs7 Ci0JY2FzZSBEUFVfUElYX0ZNVF9ZX0NCQ1JfSDJWMl9VQldDOgotCQkqZHJtX3BpeGZtdCA9IERS TV9GT1JNQVRfTlYxMjsKLQkJKmRybV9tb2RpZmllciA9IERSTV9GT1JNQVRfTU9EX1FDT01fQ09N UFJFU1NFRCB8Ci0JCQkJRFJNX0ZPUk1BVF9NT0RfUUNPTV9USUxFOwotCQlicmVhazsKLQljYXNl IERQVV9QSVhfRk1UX1lfQ1JDQl9IMlYyOgotCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfTlYy MTsKLQkJKmRybV9tb2RpZmllciA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgRFBVX1BJWF9GTVRfUkdC QV84ODg4X1VCV0M6Ci0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9BQkdSODg4ODsKLQkJKmRy bV9tb2RpZmllciA9IERSTV9GT1JNQVRfTU9EX1FDT01fQ09NUFJFU1NFRCB8Ci0JCQkJRFJNX0ZP Uk1BVF9NT0RfUUNPTV9USUxFOwotCQlicmVhazsKLQljYXNlIERQVV9QSVhfRk1UX1JHQlhfODg4 OF9VQldDOgotCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfWEJHUjg4ODg7Ci0JCSpkcm1fbW9k aWZpZXIgPSBEUk1fRk9STUFUX01PRF9RQ09NX0NPTVBSRVNTRUQgfAotCQkJCURSTV9GT1JNQVRf TU9EX1FDT01fVElMRTsKLQkJYnJlYWs7Ci0JY2FzZSBEUFVfUElYX0ZNVF9ZX0NCQ1JfSDJWMjoK LQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFUX05WMTI7Ci0JCSpkcm1fbW9kaWZpZXIgPSAwOwot CQlicmVhazsKLQljYXNlIERQVV9QSVhfRk1UX0FSR0JfODg4ODoKLQkJKmRybV9waXhmbXQgPSBE Uk1fRk9STUFUX0JHUkE4ODg4OwotCQkqZHJtX21vZGlmaWVyID0gMDsKLQkJYnJlYWs7Ci0JY2Fz ZSBEUFVfUElYX0ZNVF9YUkdCXzg4ODg6Ci0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9CR1JY ODg4ODsKLQkJKmRybV9tb2RpZmllciA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgRFBVX1BJWF9GTVRf QUJHUl84ODg4OgotCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfUkdCQTg4ODg7Ci0JCSpkcm1f bW9kaWZpZXIgPSAwOwotCQlicmVhazsKLQljYXNlIERQVV9QSVhfRk1UX1hCR1JfODg4ODoKLQkJ KmRybV9waXhmbXQgPSBEUk1fRk9STUFUX1JHQlg4ODg4OwotCQkqZHJtX21vZGlmaWVyID0gMDsK LQkJYnJlYWs7Ci0JY2FzZSBEUFVfUElYX0ZNVF9BUkdCXzIxMDEwMTA6Ci0JCSpkcm1fcGl4Zm10 ID0gRFJNX0ZPUk1BVF9CR1JBMTAxMDEwMjsKLQkJKmRybV9tb2RpZmllciA9IDA7Ci0JCWJyZWFr OwotCWNhc2UgRFBVX1BJWF9GTVRfWFJHQl8yMTAxMDEwOgotCQkqZHJtX3BpeGZtdCA9IERSTV9G T1JNQVRfQkdSWDEwMTAxMDI7Ci0JCSpkcm1fbW9kaWZpZXIgPSAwOwotCQlicmVhazsKLQljYXNl IERQVV9QSVhfRk1UX0FCR1JfMjEwMTAxMDoKLQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFUX1JH QkExMDEwMTAyOwotCQkqZHJtX21vZGlmaWVyID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSBEUFVfUElY X0ZNVF9YQkdSXzIxMDEwMTA6Ci0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9SR0JYMTAxMDEw MjsKLQkJKmRybV9tb2RpZmllciA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgRFBVX1BJWF9GTVRfQkdS QV8xMDEwMTAyOgotCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfQVJHQjIxMDEwMTA7Ci0JCSpk cm1fbW9kaWZpZXIgPSAwOwotCQlicmVhazsKLQljYXNlIERQVV9QSVhfRk1UX0JHUlhfMTAxMDEw MjoKLQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFUX1hSR0IyMTAxMDEwOwotCQkqZHJtX21vZGlm aWVyID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSBEUFVfUElYX0ZNVF9SR0JBXzg4ODhfVElMRToKLQkJ KmRybV9waXhmbXQgPSBEUk1fRk9STUFUX0FCR1I4ODg4OwotCQkqZHJtX21vZGlmaWVyID0gRFJN X0ZPUk1BVF9NT0RfUUNPTV9USUxFOwotCQlicmVhazsKLQljYXNlIERQVV9QSVhfRk1UX1JHQlhf ODg4OF9USUxFOgotCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfWEJHUjg4ODg7Ci0JCSpkcm1f bW9kaWZpZXIgPSBEUk1fRk9STUFUX01PRF9RQ09NX1RJTEU7Ci0JCWJyZWFrOwotCWNhc2UgRFBV X1BJWF9GTVRfQkdSQV84ODg4X1RJTEU6Ci0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9BUkdC ODg4ODsKLQkJKmRybV9tb2RpZmllciA9IERSTV9GT1JNQVRfTU9EX1FDT01fVElMRTsKLQkJYnJl YWs7Ci0JY2FzZSBEUFVfUElYX0ZNVF9CR1JYXzg4ODhfVElMRToKLQkJKmRybV9waXhmbXQgPSBE Uk1fRk9STUFUX1hSR0I4ODg4OwotCQkqZHJtX21vZGlmaWVyID0gRFJNX0ZPUk1BVF9NT0RfUUNP TV9USUxFOwotCQlicmVhazsKLQljYXNlIERQVV9QSVhfRk1UX1lfQ1JDQl9IMlYyX1RJTEU6Ci0J CSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9OVjIxOwotCQkqZHJtX21vZGlmaWVyID0gRFJNX0ZP Uk1BVF9NT0RfUUNPTV9USUxFOwotCQlicmVhazsKLQljYXNlIERQVV9QSVhfRk1UX1lfQ0JDUl9I MlYyX1RJTEU6Ci0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9OVjEyOwotCQkqZHJtX21vZGlm aWVyID0gRFJNX0ZPUk1BVF9NT0RfUUNPTV9USUxFOwotCQlicmVhazsKLQljYXNlIERQVV9QSVhf Rk1UX0FSR0JfODg4OF9USUxFOgotCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfQkdSQTg4ODg7 Ci0JCSpkcm1fbW9kaWZpZXIgPSBEUk1fRk9STUFUX01PRF9RQ09NX1RJTEU7Ci0JCWJyZWFrOwot CWNhc2UgRFBVX1BJWF9GTVRfWFJHQl84ODg4X1RJTEU6Ci0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZP Uk1BVF9CR1JYODg4ODsKLQkJKmRybV9tb2RpZmllciA9IERSTV9GT1JNQVRfTU9EX1FDT01fVElM RTsKLQkJYnJlYWs7Ci0JY2FzZSBEUFVfUElYX0ZNVF9BQkdSXzg4ODhfVElMRToKLQkJKmRybV9w aXhmbXQgPSBEUk1fRk9STUFUX1JHQkE4ODg4OwotCQkqZHJtX21vZGlmaWVyID0gRFJNX0ZPUk1B VF9NT0RfUUNPTV9USUxFOwotCQlicmVhazsKLQljYXNlIERQVV9QSVhfRk1UX1hCR1JfODg4OF9U SUxFOgotCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfUkdCWDg4ODg7Ci0JCSpkcm1fbW9kaWZp ZXIgPSBEUk1fRk9STUFUX01PRF9RQ09NX1RJTEU7Ci0JCWJyZWFrOwotCWNhc2UgRFBVX1BJWF9G TVRfQVJHQl8yMTAxMDEwX1RJTEU6Ci0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9CR1JBMTAx MDEwMjsKLQkJKmRybV9tb2RpZmllciA9IERSTV9GT1JNQVRfTU9EX1FDT01fVElMRTsKLQkJYnJl YWs7Ci0JY2FzZSBEUFVfUElYX0ZNVF9YUkdCXzIxMDEwMTBfVElMRToKLQkJKmRybV9waXhmbXQg PSBEUk1fRk9STUFUX0JHUlgxMDEwMTAyOwotCQkqZHJtX21vZGlmaWVyID0gRFJNX0ZPUk1BVF9N T0RfUUNPTV9USUxFOwotCQlicmVhazsKLQljYXNlIERQVV9QSVhfRk1UX0FCR1JfMjEwMTAxMF9U SUxFOgotCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfUkdCQTEwMTAxMDI7Ci0JCSpkcm1fbW9k aWZpZXIgPSBEUk1fRk9STUFUX01PRF9RQ09NX1RJTEU7Ci0JCWJyZWFrOwotCWNhc2UgRFBVX1BJ WF9GTVRfWEJHUl8yMTAxMDEwX1RJTEU6Ci0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9SR0JY MTAxMDEwMjsKLQkJKmRybV9tb2RpZmllciA9IERSTV9GT1JNQVRfTU9EX1FDT01fVElMRTsKLQkJ YnJlYWs7Ci0JY2FzZSBEUFVfUElYX0ZNVF9CR1JBXzEwMTAxMDJfVElMRToKLQkJKmRybV9waXhm bXQgPSBEUk1fRk9STUFUX0FSR0IyMTAxMDEwOwotCQkqZHJtX21vZGlmaWVyID0gRFJNX0ZPUk1B VF9NT0RfUUNPTV9USUxFOwotCQlicmVhazsKLQljYXNlIERQVV9QSVhfRk1UX0JHUlhfMTAxMDEw Ml9USUxFOgotCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfWFJHQjIxMDEwMTA7Ci0JCSpkcm1f bW9kaWZpZXIgPSBEUk1fRk9STUFUX01PRF9RQ09NX1RJTEU7Ci0JCWJyZWFrOwotCWNhc2UgRFBV X1BJWF9GTVRfUkdCQV8xMDEwMTAyX1VCV0M6Ci0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZPUk1BVF9B QkdSMjEwMTAxMDsKLQkJKmRybV9tb2RpZmllciA9IERSTV9GT1JNQVRfTU9EX1FDT01fQ09NUFJF U1NFRCB8Ci0JCQkJRFJNX0ZPUk1BVF9NT0RfUUNPTV9USUxFOwotCQlicmVhazsKLQljYXNlIERQ VV9QSVhfRk1UX1JHQlhfMTAxMDEwMl9VQldDOgotCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRf WEJHUjIxMDEwMTA7Ci0JCSpkcm1fbW9kaWZpZXIgPSBEUk1fRk9STUFUX01PRF9RQ09NX0NPTVBS RVNTRUQgfAotCQkJCURSTV9GT1JNQVRfTU9EX1FDT01fVElMRTsKLQkJYnJlYWs7Ci0JY2FzZSBE UFVfUElYX0ZNVF9ZX0NCQ1JfSDJWMl9QMDEwOgotCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRf TlYxMjsKLQkJKmRybV9tb2RpZmllciA9IERSTV9GT1JNQVRfTU9EX1FDT01fRFg7Ci0JCWJyZWFr OwotCWNhc2UgRFBVX1BJWF9GTVRfWV9DQkNSX0gyVjJfUDAxMF9USUxFOgotCQkqZHJtX3BpeGZt dCA9IERSTV9GT1JNQVRfTlYxMjsKLQkJKmRybV9tb2RpZmllciA9IERSTV9GT1JNQVRfTU9EX1FD T01fVElMRSB8Ci0JCQkJRFJNX0ZPUk1BVF9NT0RfUUNPTV9EWDsKLQkJYnJlYWs7Ci0JY2FzZSBE UFVfUElYX0ZNVF9ZX0NCQ1JfSDJWMl9QMDEwX1VCV0M6Ci0JCSpkcm1fcGl4Zm10ID0gRFJNX0ZP Uk1BVF9OVjEyOwotCQkqZHJtX21vZGlmaWVyID0gRFJNX0ZPUk1BVF9NT0RfUUNPTV9DT01QUkVT U0VEIHwKLQkJCQlEUk1fRk9STUFUX01PRF9RQ09NX1RJTEUgfAotCQkJCURSTV9GT1JNQVRfTU9E X1FDT01fRFg7Ci0JCWJyZWFrOwotCWNhc2UgRFBVX1BJWF9GTVRfWV9DQkNSX0gyVjJfVFAxMDoK LQkJKmRybV9waXhmbXQgPSBEUk1fRk9STUFUX05WMTI7Ci0JCSpkcm1fbW9kaWZpZXIgPSBEUk1f Rk9STUFUX01PRF9RQ09NX1RJTEUgfAotCQkJCURSTV9GT1JNQVRfTU9EX1FDT01fRFggfAotCQkJ CURSTV9GT1JNQVRfTU9EX1FDT01fVElHSFQ7Ci0JCWJyZWFrOwotCWNhc2UgRFBVX1BJWF9GTVRf WV9DQkNSX0gyVjJfVFAxMF9VQldDOgotCQkqZHJtX3BpeGZtdCA9IERSTV9GT1JNQVRfTlYxMjsK LQkJKmRybV9tb2RpZmllciA9IERSTV9GT1JNQVRfTU9EX1FDT01fQ09NUFJFU1NFRCB8Ci0JCQkJ RFJNX0ZPUk1BVF9NT0RfUUNPTV9USUxFIHwKLQkJCQlEUk1fRk9STUFUX01PRF9RQ09NX0RYIHwK LQkJCQlEUk1fRk9STUFUX01PRF9RQ09NX1RJR0hUOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlE UFVfREVCVUcoImludmFsaWQgdjRsMiBwaXhlbCBmb3JtYXQgJWMlYyVjJWNcbiIsCi0JCQkJcGl4 Zm10ID4+IDAsIHBpeGZtdCA+PiA4LAotCQkJCXBpeGZtdCA+PiAxNiwgcGl4Zm10ID4+IDI0KTsK LQkJcmMgPSAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgot ICogZHB1X2h3X3JvdF90b192NGwyX2J1ZmZlciAtIGNvbnZlcnQgZHJtIGJ1ZmZlciB0byB2NGwy IGJ1ZmZlcgotICogQGRybV9waXhmbXQ6IHBpeGVsIGZvcm1hdCBpbiBkcm0gZm91cmNjCi0gKiBA ZHJtX21vZGlmaWVyOiBwaXhlbCBmb3JtYXQgbW9kaWZpZXIKLSAqIEBkcm1fYWRkcjogZHJtIGJ1 ZmZlciBhZGRyZXNzIHBlciBwbGFuZQotICogQGRybV9sZW46IGRybSBidWZmZXIgbGVuZ3RoIHBl ciBwbGFuZQotICogQGRybV9wbGFuZXM6IGRybSBidWZmZXIgbnVtYmVyIG9mIHBsYW5lcwotICog QHY0bF9hZGRyOiB2NGwyIGJ1ZmZlciBhZGRyZXNzIHBlciBwbGFuZQotICogQHY0bF9sZW46IHY0 bDIgYnVmZmVyIGxlbmd0aCBwZXIgcGxhbmUKLSAqIEB2NGxfcGxhbmVzOiB2NGwyIGJ1ZmZlciBu dW1iZXIgb2YgcGxhbmVzCi0gKi8KLXN0YXRpYyB2b2lkIGRwdV9od19yb3RfdG9fdjRsMl9idWZm ZXIodTMyIGRybV9waXhmbXQsIHU2NCBkcm1fbW9kaWZpZXIsCi0JCWRtYV9hZGRyX3QgKmRybV9h ZGRyLCB1MzIgKmRybV9sZW4sIHUzMiAqZHJtX3BsYW5lcywKLQkJZG1hX2FkZHJfdCAqdjRsX2Fk ZHIsIHUzMiAqdjRsX2xlbiwgdTMyICp2NGxfcGxhbmVzKQotewotCWludCBpLCB0b3RhbF9zaXpl ID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBEUFVfUk9UQVRPUl9JTkxJTkVfUExBTkVfTUFYOyBp KyspIHsKLQkJdjRsX2FkZHJbaV0gPSBkcm1fYWRkcltpXTsKLQkJdjRsX2xlbltpXSA9IGRybV9s ZW5baV07Ci0JCXRvdGFsX3NpemUgKz0gZHJtX2xlbltpXTsKLQkJRFBVX0RFQlVHKCJkcm1bJWRd OiVwYWQvJXhcbiIsIGksICZkcm1fYWRkcltpXSwgZHJtX2xlbltpXSk7Ci0JfQotCi0JaWYgKERQ VV9NT0RJRklFUl9JU19VQldDKGRybV9tb2RpZmllcikpIHsKLQkJLyogdjRsMiBkcml2ZXIgdXNl cyBwbGFuZVswXSBhcyBzaW5nbGUgdWJ3YyBidWZmZXIgcGxhbmUgKi8KLQkJdjRsX2FkZHJbMF0g PSBkcm1fYWRkclsyXTsKLQkJdjRsX2xlblswXSA9IHRvdGFsX3NpemU7Ci0JCSp2NGxfcGxhbmVz ID0gMTsKLQkJRFBVX0RFQlVHKCJ2NGwyWzBdOiVwYWQvJXgvJWRcbiIsICZ2NGxfYWRkclswXSwg djRsX2xlblswXSwKLQkJCQkqdjRsX3BsYW5lcyk7Ci0JfSBlbHNlIHsKLQkJKnY0bF9wbGFuZXMg PSAqZHJtX3BsYW5lczsKLQl9Ci19Ci0KLS8qKgotICogZHB1X2h3X3JvdF9jb21taXQgLSBjb21t aXQvZXhlY3V0ZSBnaXZlbiByb3RhdG9yIGNvbW1hbmQKLSAqIEBodzogUG9pbnRlciB0byByb3Rh dG9yIGhhcmR3YXJlIGRyaXZlcgotICogQGRhdGE6IFBvaW50ZXIgdG8gY29tbWFuZCBkZXNjcmlw dG9yCi0gKiBAaHdfY21kOiB0eXBlIG9mIGNvbW1hbmQgdG8gYmUgZXhlY3V0ZWQKLSAqIHJldHVy bjogMCBpZiBzdWNjZXNzOyBlcnJvciBjb2RlIG90aGVyd2lzZQotICovCi1zdGF0aWMgaW50IGRw dV9od19yb3RfY29tbWl0KHN0cnVjdCBkcHVfaHdfcm90ICpodywgc3RydWN0IGRwdV9od19yb3Rf Y21kICpkYXRhLAotCQllbnVtIGRwdV9od19yb3RfY21kX3R5cGUgaHdfY21kKQotewotCXN0cnVj dCBkcHVfcm90YXRvcl9pbmxpbmVfY21kIHJvdF9jbWQ7Ci0JZW51bSBkcHVfcm90YXRvcl9pbmxp bmVfY21kX3R5cGUgY21kX3R5cGU7Ci0Jdm9pZCAqcHJpdl9oYW5kbGUgPSBOVUxMOwotCWludCBy YzsKLQotCWlmICghaHcgfHwgIWRhdGEpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHBhcmFtZXRl clxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW1lbXNldCgmcm90X2NtZCwgMCwgc2l6 ZW9mKHN0cnVjdCBkcHVfcm90YXRvcl9pbmxpbmVfY21kKSk7Ci0KLQlzd2l0Y2ggKGh3X2NtZCkg ewotCWNhc2UgRFBVX0hXX1JPVF9DTURfVkFMSURBVEU6Ci0JCWNtZF90eXBlID0gRFBVX1JPVEFU T1JfSU5MSU5FX0NNRF9WQUxJREFURTsKLQkJYnJlYWs7Ci0JY2FzZSBEUFVfSFdfUk9UX0NNRF9D T01NSVQ6Ci0JCWNtZF90eXBlID0gRFBVX1JPVEFUT1JfSU5MSU5FX0NNRF9DT01NSVQ7Ci0JCWJy ZWFrOwotCWNhc2UgRFBVX0hXX1JPVF9DTURfU1RBUlQ6Ci0JCWNtZF90eXBlID0gRFBVX1JPVEFU T1JfSU5MSU5FX0NNRF9TVEFSVDsKLQkJcHJpdl9oYW5kbGUgPSBkYXRhLT5wcml2X2hhbmRsZTsK LQkJYnJlYWs7Ci0JY2FzZSBEUFVfSFdfUk9UX0NNRF9DTEVBTlVQOgotCQljbWRfdHlwZSA9IERQ VV9ST1RBVE9SX0lOTElORV9DTURfQ0xFQU5VUDsKLQkJcHJpdl9oYW5kbGUgPSBkYXRhLT5wcml2 X2hhbmRsZTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGh3IHJv dGF0b3IgY29tbWFuZCAlZFxuIiwgaHdfY21kKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0J cm90X2NtZC5zZXF1ZW5jZV9pZCA9IGRhdGEtPnNlcXVlbmNlX2lkOwotCXJvdF9jbWQudmlkZW9f bW9kZSA9IGRhdGEtPnZpZGVvX21vZGU7Ci0Jcm90X2NtZC5mcHMgPSBkYXRhLT5mcHM7Ci0KLQkv KgotCSAqIERSTSByb3RhdGlvbiBwcm9wZXJ0eSBpcyBzcGVjaWZpZWQgaW4gY291bnRlciBjbG9j a3dpc2UgZGlyZWN0aW9uCi0JICogd2hlcmVhcyByb3RhdG9yIGgvdyByb3RhdGVzIGluIGNsb2Nr d2lzZSBkaXJlY3Rpb24uCi0JICogQ29udmVydCByb3RhdGlvbiBwcm9wZXJ0eSB0byBjbG9ja3dp c2UgOTAgYnkgdG9nZ2xpbmcgaC92IGZsaXAKLQkgKi8KLQlyb3RfY21kLnJvdDkwID0gZGF0YS0+ cm90OTA7Ci0Jcm90X2NtZC5oZmxpcCA9IGRhdGEtPnJvdDkwID8gIWRhdGEtPmhmbGlwIDogZGF0 YS0+aGZsaXA7Ci0Jcm90X2NtZC52ZmxpcCA9IGRhdGEtPnJvdDkwID8gIWRhdGEtPnZmbGlwIDog ZGF0YS0+dmZsaXA7Ci0KLQlyb3RfY21kLmNsa3JhdGUgPSBkYXRhLT5jbGtyYXRlOwotCXJvdF9j bWQuZGF0YV9idyA9IDA7Ci0Jcm90X2NtZC5wcmVmaWxsX2J3ID0gZGF0YS0+cHJlZmlsbF9idzsK LQlyb3RfY21kLnNyY193aWR0aCA9IGRhdGEtPnNyY193aWR0aDsKLQlyb3RfY21kLnNyY19oZWln aHQgPSBkYXRhLT5zcmNfaGVpZ2h0OwotCXJvdF9jbWQuc3JjX3JlY3RfeCA9IGRhdGEtPnNyY19y ZWN0X3g7Ci0Jcm90X2NtZC5zcmNfcmVjdF95ID0gZGF0YS0+c3JjX3JlY3RfeTsKLQlyb3RfY21k LnNyY19yZWN0X3cgPSBkYXRhLT5zcmNfcmVjdF93OwotCXJvdF9jbWQuc3JjX3JlY3RfaCA9IGRh dGEtPnNyY19yZWN0X2g7Ci0Jcm90X2NtZC5kc3Rfd3JpdGViYWNrID0gZGF0YS0+ZHN0X3dyaXRl YmFjazsKLQlyb3RfY21kLmRzdF9yZWN0X3ggPSBkYXRhLT5kc3RfcmVjdF94OwotCXJvdF9jbWQu ZHN0X3JlY3RfeSA9IGRhdGEtPmRzdF9yZWN0X3k7Ci0Jcm90X2NtZC5kc3RfcmVjdF93ID0gZGF0 YS0+ZHN0X3JlY3RfdzsKLQlyb3RfY21kLmRzdF9yZWN0X2ggPSBkYXRhLT5kc3RfcmVjdF9oOwot CXJvdF9jbWQucHJpdl9oYW5kbGUgPSBwcml2X2hhbmRsZTsKLQotCXJjID0gZHB1X2h3X3JvdF90 b192NGwyX3BpeGZtdChkYXRhLT5zcmNfcGl4ZWxfZm9ybWF0LAotCQkJZGF0YS0+c3JjX21vZGlm aWVyLCAmcm90X2NtZC5zcmNfcGl4Zm10KTsKLQlpZiAocmMpIHsKLQkJRFBVX0VSUk9SKCJpbnZh bGlkIHNyYyBmb3JtYXQgJWRcbiIsIHJjKTsKLQkJcmV0dXJuIHJjOwotCX0KLQotCS8qIGNhbGN1 bGF0ZSBwcmVmZXJyZWQgb3V0cHV0IGZvcm1hdCBkdXJpbmcgdmFsaWRhdGlvbiAqLwotCWlmICho d19jbWQgPT0gRFBVX0hXX1JPVF9DTURfVkFMSURBVEUpIHsKLQkJcmMgPSBkcHVfcm90YXRvcl9p bmxpbmVfZ2V0X2RzdF9waXhmbXQoaHctPmNhcHMtPnBkZXYsCi0JCQkJcm90X2NtZC5zcmNfcGl4 Zm10LCAmcm90X2NtZC5kc3RfcGl4Zm10KTsKLQkJaWYgKHJjKSB7Ci0JCQlEUFVfRVJST1IoImlu dmFsaWQgc3JjIGZvcm1hdCAlZFxuIiwgcmMpOwotCQkJcmV0dXJuIHJjOwotCQl9Ci0KLQkJcmMg PSBkcHVfaHdfcm90X3RvX2RybV9waXhmbXQocm90X2NtZC5kc3RfcGl4Zm10LAotCQkJCSZkYXRh LT5kc3RfcGl4ZWxfZm9ybWF0LCAmZGF0YS0+ZHN0X21vZGlmaWVyKTsKLQkJaWYgKHJjKSB7Ci0J CQlEUFVfRVJST1IoImludmFsaWQgZHN0IGZvcm1hdCAlYyVjJWMlY1xuIiwKLQkJCQkJcm90X2Nt ZC5kc3RfcGl4Zm10ID4+IDAsCi0JCQkJCXJvdF9jbWQuZHN0X3BpeGZtdCA+PiA4LAotCQkJCQly b3RfY21kLmRzdF9waXhmbXQgPj4gMTYsCi0JCQkJCXJvdF9jbWQuZHN0X3BpeGZtdCA+PiAyNCk7 Ci0JCQlyZXR1cm4gcmM7Ci0JCX0KLQotCQlkYXRhLT5kc3RfZm9ybWF0ID0gZHB1X2dldF9kcHVf Zm9ybWF0X2V4dCgKLQkJCQlkYXRhLT5kc3RfcGl4ZWxfZm9ybWF0LCBkYXRhLT5kc3RfbW9kaWZp ZXIpOwotCQlpZiAoIWRhdGEtPmRzdF9mb3JtYXQpIHsKLQkJCURQVV9FUlJPUigiZmFpbGVkIHRv IGdldCBkc3QgZm9ybWF0XG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfSBlbHNlIHsK LQkJcmMgPSBkcHVfaHdfcm90X3RvX3Y0bDJfcGl4Zm10KGRhdGEtPmRzdF9waXhlbF9mb3JtYXQs Ci0JCQkJZGF0YS0+ZHN0X21vZGlmaWVyLCAmcm90X2NtZC5kc3RfcGl4Zm10KTsKLQkJaWYgKHJj KSB7Ci0JCQlEUFVfRVJST1IoImludmFsaWQgZHN0IGZvcm1hdCAlZFxuIiwgcmMpOwotCQkJcmV0 dXJuIHJjOwotCQl9Ci0KLQkJZHB1X2h3X3JvdF90b192NGwyX2J1ZmZlcihkYXRhLT5zcmNfcGl4 ZWxfZm9ybWF0LAotCQkJCWRhdGEtPnNyY19tb2RpZmllciwKLQkJCQlkYXRhLT5zcmNfaW92YSwg ZGF0YS0+c3JjX2xlbiwKLQkJCQkmZGF0YS0+c3JjX3BsYW5lcywKLQkJCQlyb3RfY21kLnNyY19h ZGRyLCByb3RfY21kLnNyY19sZW4sCi0JCQkJJnJvdF9jbWQuc3JjX3BsYW5lcyk7Ci0KLQkJZHB1 X2h3X3JvdF90b192NGwyX2J1ZmZlcihkYXRhLT5kc3RfcGl4ZWxfZm9ybWF0LAotCQkJCWRhdGEt PmRzdF9tb2RpZmllciwKLQkJCQlkYXRhLT5kc3RfaW92YSwgZGF0YS0+ZHN0X2xlbiwKLQkJCQkm ZGF0YS0+ZHN0X3BsYW5lcywKLQkJCQlyb3RfY21kLmRzdF9hZGRyLCByb3RfY21kLmRzdF9sZW4s Ci0JCQkJJnJvdF9jbWQuZHN0X3BsYW5lcyk7Ci0JfQotCi0JLyogb25seSBwcm9jZXNzIGFueSBj b21tYW5kIGlmIGNsaWVudCBpcyBtYXN0ZXIgb3IgZm9yIHZhbGlkYXRpb24gKi8KLQlpZiAoZGF0 YS0+bWFzdGVyIHx8IGh3X2NtZCA9PSBEUFVfSFdfUk9UX0NNRF9WQUxJREFURSkgewotCQlEUFVf REVCVUcoImRpc3BhdGNoIHNlcTolZCBjbWQ6JWRcbiIsIGRhdGEtPnNlcXVlbmNlX2lkLAotCQkJ CWh3X2NtZCk7Ci0KLQkJcmMgPSBkcHVfcm90YXRvcl9pbmxpbmVfY29tbWl0KGh3LT5yb3RfY3R4 LCAmcm90X2NtZCwgY21kX3R5cGUpOwotCQlpZiAocmMpCi0JCQlyZXR1cm4gcmM7Ci0KLQkJLyog cmV0dXJuIHRvIGNhbGxlciAqLwotCQlkYXRhLT5wcml2X2hhbmRsZSA9IHJvdF9jbWQucHJpdl9o YW5kbGU7Ci0JfSBlbHNlIHsKLQkJRFBVX0RFQlVHKCJieXBhc3Mgc2VxOiVkIGNtZDolZFxuIiwg ZGF0YS0+c2VxdWVuY2VfaWQsIGh3X2NtZCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgot ICogZHB1X2h3X3JvdF9nZXRfZm9ybWF0X2NhcHMgLSBnZXQgcGl4ZWwgZm9ybWF0IGNhcGFiaWxp dHkKLSAqIEBodzogUG9pbnRlciB0byByb3RhdG9yIGhhcmR3YXJlIGRyaXZlcgotICogcmV0dXJu OiBQb2ludGVyIHRvIHBpeGVsIGZvcm1hdCBjYXBhYmlsaXR5IGFycmF5OiBOVUxMIG90aGVyd2lz ZQotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRwdV9mb3JtYXRfZXh0ZW5kZWQgKmRwdV9od19y b3RfZ2V0X2Zvcm1hdF9jYXBzKAotCQlzdHJ1Y3QgZHB1X2h3X3JvdCAqaHcpCi17Ci0JaW50IHJj LCBpLCBqLCBsZW47Ci0JdTMyICp2NGxfcGl4Zm10czsKLQlzdHJ1Y3QgZHB1X2Zvcm1hdF9leHRl bmRlZCAqZHJtX3BpeGZtdHM7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQotCWlm ICghaHcgfHwgIWh3LT5jYXBzIHx8ICFody0+Y2Fwcy0+cGRldikgewotCQlEUFVfRVJST1IoImlu dmFsaWQgcm90YXRvciBod1xuIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXBkZXYgPSBody0+ Y2Fwcy0+cGRldjsKLQotCWlmIChody0+Zm9ybWF0X2NhcHMpCi0JCXJldHVybiBody0+Zm9ybWF0 X2NhcHM7Ci0KLQlsZW4gPSBkcHVfcm90YXRvcl9pbmxpbmVfZ2V0X3BpeGZtdF9jYXBzKHBkZXYs IHRydWUsIE5VTEwsIDApOwotCWlmIChsZW4gPCAwKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBw aXhmbXQgY2FwcyAlZFxuIiwgbGVuKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JdjRsX3BpeGZt dHMgPSBrY2FsbG9jKGxlbiwgc2l6ZW9mKHUzMiksIEdGUF9LRVJORUwpOwotCWlmICghdjRsX3Bp eGZtdHMpCi0JCWdvdG8gZG9uZTsKLQotCWRwdV9yb3RhdG9yX2lubGluZV9nZXRfcGl4Zm10X2Nh cHMocGRldiwgdHJ1ZSwgdjRsX3BpeGZtdHMsIGxlbik7Ci0KLQkvKiBhbGxvY2F0ZSBvbmUgbW9y ZSB0byBpbmRpY2F0ZSB0ZXJtaW5hdGlvbiAqLwotCWRybV9waXhmbXRzID0ga3phbGxvYygobGVu ICsgMSkgKiBzaXplb2Yoc3RydWN0IGRwdV9mb3JtYXRfZXh0ZW5kZWQpLAotCQkJR0ZQX0tFUk5F TCk7Ci0JaWYgKCFkcm1fcGl4Zm10cykKLQkJZ290byBkb25lOwotCi0JZm9yIChpID0gMCwgaiA9 IDA7IGkgPCBsZW47IGkrKykgewotCQlyYyA9IGRwdV9od19yb3RfdG9fZHJtX3BpeGZtdCh2NGxf cGl4Zm10c1tpXSwKLQkJCQkmZHJtX3BpeGZtdHNbal0uZm91cmNjX2Zvcm1hdCwKLQkJCQkmZHJt X3BpeGZtdHNbal0ubW9kaWZpZXIpOwotCQlpZiAoIXJjKSB7Ci0JCQlEUFVfREVCVUcoIiVkOiB2 bDQyOiVjJWMlYyVjID0+IGRybTolYyVjJWMlYy8weCVsbHhcbiIsCi0JCQkJaSwgdjRsX3BpeGZt dHNbaV0gPj4gMCwgdjRsX3BpeGZtdHNbaV0gPj4gOCwKLQkJCQl2NGxfcGl4Zm10c1tpXSA+PiAx NiwgdjRsX3BpeGZtdHNbaV0gPj4gMjQsCi0JCQkJZHJtX3BpeGZtdHNbal0uZm91cmNjX2Zvcm1h dCA+PiAwLAotCQkJCWRybV9waXhmbXRzW2pdLmZvdXJjY19mb3JtYXQgPj4gOCwKLQkJCQlkcm1f cGl4Zm10c1tqXS5mb3VyY2NfZm9ybWF0ID4+IDE2LAotCQkJCWRybV9waXhmbXRzW2pdLmZvdXJj Y19mb3JtYXQgPj4gMjQsCi0JCQkJZHJtX3BpeGZtdHNbal0ubW9kaWZpZXIpOwotCQkJaisrOwot CQl9IGVsc2UgewotCQkJRFBVX0RFQlVHKCIlZDogdmw0MjolYyVjJWMlYyBub3QgbWFwcGVkXG4i LAotCQkJCWksIHY0bF9waXhmbXRzW2ldID4+IDAsIHY0bF9waXhmbXRzW2ldID4+IDgsCi0JCQkJ djRsX3BpeGZtdHNbaV0gPj4gMTYsIHY0bF9waXhmbXRzW2ldID4+IDI0KTsKLQkJfQotCX0KLQot CWh3LT5mb3JtYXRfY2FwcyA9IGRybV9waXhmbXRzOwotZG9uZToKLQlrZnJlZSh2NGxfcGl4Zm10 cyk7Ci0KLQlyZXR1cm4gaHctPmZvcm1hdF9jYXBzOwotfQotCi0vKioKLSAqIGRwdV9od19yb3Rf Z2V0X2Rvd25zY2FsZV9jYXBzIC0gZ2V0IHNjYWxpbmcgY2FwYWJpbGl0eSBzdHJpbmcKLSAqIEBo dzogUG9pbnRlciB0byByb3RhdG9yIGhhcmR3YXJlIGRyaXZlcgotICogcmV0dXJuOiBQb2ludGVy IHRvIGNhcGFiaWxpdHkgc3RyaW5nOiBOVUxMIG90aGVyd2lzZQotICovCi1zdGF0aWMgY29uc3Qg Y2hhciAqZHB1X2h3X3JvdF9nZXRfZG93bnNjYWxlX2NhcHMoc3RydWN0IGRwdV9od19yb3QgKmh3 KQotewotCWludCBsZW47Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQotCWlmICgh aHcgfHwgIWh3LT5jYXBzIHx8ICFody0+Y2Fwcy0+cGRldikgewotCQlEUFVfRVJST1IoImludmFs aWQgcm90YXRvciBod1xuIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXBkZXYgPSBody0+Y2Fw cy0+cGRldjsKLQotCWlmIChody0+ZG93bnNjYWxlX2NhcHMpCi0JCXJldHVybiBody0+ZG93bnNj YWxlX2NhcHM7Ci0KLQlsZW4gPSBkcHVfcm90YXRvcl9pbmxpbmVfZ2V0X2Rvd25zY2FsZV9jYXBz KHBkZXYsIE5VTEwsIDApOwotCWlmIChsZW4gPCAwKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBz Y2FsaW5nIGNhcHMgJWRcbiIsIGxlbik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCS8qIGFkZCBv bmUgZm9yIGVuZGluZyB6ZXJvICovCi0JbGVuICs9IDE7Ci0JaHctPmRvd25zY2FsZV9jYXBzID0g a3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOwotCWRwdV9yb3RhdG9yX2lubGluZV9nZXRfZG93bnNj YWxlX2NhcHMocGRldiwgaHctPmRvd25zY2FsZV9jYXBzLCBsZW4pOwotCi0JcmV0dXJuIGh3LT5k b3duc2NhbGVfY2FwczsKLX0KLQotLyoqCi0gKiBkcHVfaHdfcm90X2dldF9jYWNoZV9zaXplIC0g Z2V0IGNhY2hlIHNpemUKLSAqIEBodzogUG9pbnRlciB0byByb3RhdG9yIGhhcmR3YXJlIGRyaXZl cgotICogcmV0dXJuOiBzaXplIG9mIGNhY2hlCi0gKi8KLXN0YXRpYyBzaXplX3QgZHB1X2h3X3Jv dF9nZXRfY2FjaGVfc2l6ZShzdHJ1Y3QgZHB1X2h3X3JvdCAqaHcpCi17Ci0JaWYgKCFodyB8fCAh aHctPmNhcHMpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHJvdGF0b3IgaHdcbiIpOwotCQlyZXR1 cm4gMDsKLQl9Ci0KLQlyZXR1cm4gaHctPmNhcHMtPnNsaWNlX3NpemU7Ci19Ci0KLS8qKgotICog ZHB1X2h3X3JvdF9nZXRfbWF4bGluZXdpZHRoIC0gZ2V0IG1heGltdW0gbGluZSB3aWR0aCBvZiBy b3RhdG9yCi0gKiBAaHc6IFBvaW50ZXIgdG8gcm90YXRvciBoYXJkd2FyZSBkcml2ZXIKLSAqIHJl dHVybjogbWF4aW11bSBsaW5lIHdpZHRoCi0gKi8KLXN0YXRpYyBpbnQgZHB1X2h3X3JvdF9nZXRf bWF4bGluZXdpZHRoKHN0cnVjdCBkcHVfaHdfcm90ICpodykKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2OwotCi0JaWYgKCFodyB8fCAhaHctPmNhcHMgfHwgIWh3LT5jYXBzLT5wZGV2 KSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCByb3RhdG9yIGh3XG4iKTsKLQkJcmV0dXJuIDA7Ci0J fQotCi0JcGRldiA9IGh3LT5jYXBzLT5wZGV2OwotCi0JcmV0dXJuIGRwdV9yb3RhdG9yX2lubGlu ZV9nZXRfbWF4bGluZXdpZHRoKHBkZXYpOwotfQotCi0vKioKLSAqIF9zZXR1cF9yb3Rfb3BzIC0g c2V0dXAgcm90YXRvciBvcGVyYXRpb25zCi0gKiBAb3BzOiBQb2ludGVyIHRvIG9wZXJhdGlvbiB0 YWJsZQotICogQGZlYXR1cmVzOiBhdmFpbGFibGUgZmVhdHVyZSBiaXRtYXNrCi0gKiByZXR1cm46 IG5vbmUKLSAqLwotc3RhdGljIHZvaWQgX3NldHVwX3JvdF9vcHMoc3RydWN0IGRwdV9od19yb3Rf b3BzICpvcHMsIHVuc2lnbmVkIGxvbmcgZmVhdHVyZXMpCi17Ci0Jb3BzLT5jb21taXQgPSBkcHVf aHdfcm90X2NvbW1pdDsKLQlvcHMtPmdldF9mb3JtYXRfY2FwcyA9IGRwdV9od19yb3RfZ2V0X2Zv cm1hdF9jYXBzOwotCW9wcy0+Z2V0X2Rvd25zY2FsZV9jYXBzID0gZHB1X2h3X3JvdF9nZXRfZG93 bnNjYWxlX2NhcHM7Ci0Jb3BzLT5nZXRfY2FjaGVfc2l6ZSA9IGRwdV9od19yb3RfZ2V0X2NhY2hl X3NpemU7Ci0Jb3BzLT5nZXRfbWF4bGluZXdpZHRoID0gZHB1X2h3X3JvdF9nZXRfbWF4bGluZXdp ZHRoOwotfQotCi0vKioKLSAqIGRwdV9od19yb3RfYmxrX3N0b3AgLSBzdG9wIHJvdGF0b3IgYmxv Y2sKLSAqIEBod19ibGs6IFBvaW50ZXIgdG8gYmFzZSBoYXJkd2FyZSBibG9jawotICogcmV0dXJu OiBub25lCi0gKi8KLXN0YXRpYyB2b2lkIGRwdV9od19yb3RfYmxrX3N0b3Aoc3RydWN0IGRwdV9o d19ibGsgKmh3X2JsaykKLXsKLQlzdHJ1Y3QgZHB1X2h3X3JvdCAqaHdfcm90ID0gdG9fZHB1X2h3 X3JvdChod19ibGspOwotCi0JRFBVX0RFQlVHKCJ0eXBlOiVkIGlkOiVkXG4iLCBod19ibGstPnR5 cGUsIGh3X2Jsay0+aWQpOwotCi0JZHB1X2h3X3JvdF9zdG9wKGh3X3JvdCk7Ci19Ci0KLS8qKgot ICogZHB1X2h3X3JvdF9ibGtfc3RhcnQgLSBhcnQgcm90YXRvciBibG9jawotICogQGh3X2Jsazog UG9pbnRlciB0byBiYXNlIGhhcmR3YXJlIGJsb2NrCi0gKiByZXR1cm46IDAgaWYgc3VjY2Vzczsg ZXJyb3IgY29kZSBvdGhlcndpc2UKLSAqLwotc3RhdGljIGludCBkcHVfaHdfcm90X2Jsa19zdGFy dChzdHJ1Y3QgZHB1X2h3X2JsayAqaHdfYmxrKQotewotCXN0cnVjdCBkcHVfaHdfcm90ICpod19y b3QgPSB0b19kcHVfaHdfcm90KGh3X2Jsayk7Ci0JaW50IHJjID0gMDsKLQotCURQVV9ERUJVRygi dHlwZTolZCBpZDolZFxuIiwgaHdfYmxrLT50eXBlLCBod19ibGstPmlkKTsKLQotCXJjID0gZHB1 X2h3X3JvdF9zdGFydChod19yb3QpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgc3RydWN0 IGRwdV9od19ibGtfb3BzIGRwdV9od19yb3Rfb3BzID0gewotCS5zdGFydCA9IGRwdV9od19yb3Rf YmxrX3N0YXJ0LAotCS5zdG9wID0gZHB1X2h3X3JvdF9ibGtfc3RvcCwKLX07Ci0KLS8qKgotICog ZHB1X2h3X3JvdF9pbml0IC0gY3JlYXRlL2luaXRpYWxpemUgZ2l2ZW4gcm90YXRvciBpbnN0YW5j ZQotICogQGlkeDogaW5kZXggb2YgZ2l2ZW4gcm90YXRvcgotICogQGFkZHI6IGkvbyBhZGRyZXNz IG1hcHBpbmcKLSAqIEBtOiBQb2ludGVyIHRvIG1kc3MgY2F0YWxvZwotICogcmV0dXJuOiBQb2lu dGVyIHRvIGhhcmR3YXJlIHJvdGF0b3IgZHJpdmVyIG9mIHRoZSBnaXZlbiBpbnN0YW5jZQotICov Ci1zdHJ1Y3QgZHB1X2h3X3JvdCAqZHB1X2h3X3JvdF9pbml0KGVudW0gZHB1X3JvdCBpZHgsCi0J CXZvaWQgX19pb21lbSAqYWRkciwKLQkJc3RydWN0IGRwdV9tZHNzX2NmZyAqbSkKLXsKLQlzdHJ1 Y3QgZHB1X2h3X3JvdCAqYzsKLQlzdHJ1Y3QgZHB1X3JvdF9jZmcgKmNmZzsKLQlpbnQgcmM7Ci0K LQljID0ga3phbGxvYyhzaXplb2YoKmMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWMpCi0JCXJldHVy biBFUlJfUFRSKC1FTk9NRU0pOwotCi0JY2ZnID0gX3JvdF9vZmZzZXQoaWR4LCBtLCBhZGRyLCAm Yy0+aHcpOwotCWlmIChJU19FUlIoY2ZnKSkgewotCQlXQVJOKDEsICJVbmFibGUgdG8gZmluZCBy b3QgaWR4PSVkXG4iLCBpZHgpOwotCQlrZnJlZShjKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZB TCk7Ci0JfQotCi0JLyogQXNzaWduIG9wcyAqLwotCWMtPmlkeCA9IGlkeDsKLQljLT5jYXBzID0g Y2ZnOwotCV9zZXR1cF9yb3Rfb3BzKCZjLT5vcHMsIGMtPmNhcHMtPmZlYXR1cmVzKTsKLQlzbnBy aW50ZihjLT5uYW1lLCBBUlJBWV9TSVpFKGMtPm5hbWUpLCAiZHB1X3JvdF8lZCIsIGlkeCAtIFJP VF8wKTsKLQotCXJjID0gZHB1X2h3X2Jsa19pbml0KCZjLT5iYXNlLCBEUFVfSFdfQkxLX1JPVCwg aWR4LCAmZHB1X2h3X3JvdF9vcHMpOwotCWlmIChyYykgewotCQlEUFVfRVJST1IoImZhaWxlZCB0 byBpbml0IGh3IGJsayAlZFxuIiwgcmMpOwotCQlnb3RvIGJsa19pbml0X2Vycm9yOwotCX0KLQot CXJldHVybiBjOwotCi1ibGtfaW5pdF9lcnJvcjoKLQlremZyZWUoYyk7Ci0KLQlyZXR1cm4gRVJS X1BUUihyYyk7Ci19Ci0KLS8qKgotICogZHB1X2h3X3JvdF9kZXN0cm95IC0gZGVzdHJveSBnaXZl biBoYXJkd2FyZSByb3RhdG9yIGRyaXZlcgotICogQGh3X3JvdDogUG9pbnRlciB0byBoYXJkd2Fy ZSByb3RhdG9yIGRyaXZlcgotICogcmV0dXJuOiBub25lCi0gKi8KLXZvaWQgZHB1X2h3X3JvdF9k ZXN0cm95KHN0cnVjdCBkcHVfaHdfcm90ICpod19yb3QpCi17Ci0JaWYgKGh3X3JvdCkgewotCQlk cHVfaHdfYmxrX2Rlc3Ryb3koJmh3X3JvdC0+YmFzZSk7Ci0JCWtmcmVlKGh3X3JvdC0+ZG93bnNj YWxlX2NhcHMpOwotCQlrZnJlZShod19yb3QtPmZvcm1hdF9jYXBzKTsKLQl9Ci0Ja2ZyZWUoaHdf cm90KTsKLX0KLQotc3RydWN0IGRwdV9od19yb3QgKmRwdV9od19yb3RfZ2V0KHN0cnVjdCBkcHVf aHdfcm90ICpod19yb3QpCi17Ci0Jc3RydWN0IGRwdV9od19ibGsgKmh3X2JsayA9IGRwdV9od19i bGtfZ2V0KGh3X3JvdCA/ICZod19yb3QtPmJhc2UgOgotCQkJTlVMTCwgRFBVX0hXX0JMS19ST1Qs IC0xKTsKLQotCXJldHVybiBJU19FUlJfT1JfTlVMTChod19ibGspID8gTlVMTCA6IHRvX2RwdV9o d19yb3QoaHdfYmxrKTsKLX0KLQotdm9pZCBkcHVfaHdfcm90X3B1dChzdHJ1Y3QgZHB1X2h3X3Jv dCAqaHdfcm90KQotewotCXN0cnVjdCBkcHVfaHdfYmxrICpod19ibGsgPSBod19yb3QgPyAmaHdf cm90LT5iYXNlIDogTlVMTDsKLQotCWRwdV9od19ibGtfcHV0KGh3X2Jsayk7Ci19CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfcm90LmggYi9kcml2ZXJz L2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfcm90LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IGRmMTVlZDUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X2h3X3JvdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTkwICswLDAgQEAKLS8qIENv cHlyaWdodCAoYykgMjAxNy0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCi0gKiBvbmx5IHZlcnNp b24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0g KiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpZm5kZWYgX0RQVV9IV19ST1RfSAotI2RlZmlu ZSBfRFBVX0hXX1JPVF9ICi0KLSNpbmNsdWRlICJkcHVfaHdfY2F0YWxvZy5oIgotI2luY2x1ZGUg ImRwdV9od19tZHNzLmgiCi0jaW5jbHVkZSAiZHB1X2h3X3V0aWwuaCIKLSNpbmNsdWRlICJkcHVf aHdfYmxrLmgiCi0KLSNkZWZpbmUgRFBVX0hXX1JPVF9OQU1FX1NJWkUJODAKLQotc3RydWN0IGRw dV9od19yb3Q7Ci0KLS8qKgotICogZW51bSBkcHVfaHdfcm90X2NtZF90eXBlIC0gdHlwZSBvZiBy b3RhdG9yIGhhcmR3YXJlIGNvbW1hbmQKLSAqIEBEUFVfSFdfUk9UX0NNRF9WQUxESUFURTogdmFs aWRhdGUgcm90YXRvciBjb21tYW5kOyBkbyBub3QgY29tbWl0Ci0gKiBARFBVX0hXX1JPVF9DTURf Q09NTUlUOiBjb21taXQvZXhlY3V0ZSByb3RhdG9yIGNvbW1hbmQKLSAqIEBEUFVfSFdfUk9UX0NN RF9TVEFSVDogbWRwIGlzIHJlYWR5IHRvIHN0YXJ0Ci0gKiBARFBVX0hXX1JPVF9DTURfQ0xFQU5V UDogY2xlYW51cCByb3RhdG9yIGNvbW1hbmQgYWZ0ZXIgaXQgaXMgZG9uZQotICovCi1lbnVtIGRw dV9od19yb3RfY21kX3R5cGUgewotCURQVV9IV19ST1RfQ01EX1ZBTElEQVRFLAotCURQVV9IV19S T1RfQ01EX0NPTU1JVCwKLQlEUFVfSFdfUk9UX0NNRF9TVEFSVCwKLQlEUFVfSFdfUk9UX0NNRF9D TEVBTlVQLAotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHB1X2h3X3JvdF9jbWQgLSBkZWZpbml0aW9u IG9mIGhhcmR3YXJlIHJvdGF0aW9uIGNvbW1hbmQKLSAqIEBtYXN0ZXI6IHRydWUgaWYgY2xpZW50 IGlzIHRoZSBtYXN0ZXIgaW4gc291cmNlIHNwbGl0IGlubGluZSByb3RhdGlvbgotICogQHNlcXVl bmNlX2lkOiBjb21tYW5kIHNlcXVlbmNlIGlkZW50aWZpZXIKLSAqIEBmcHM6IGZyYW1lIHJhdGUg b2YgdGhlIHN0cmVhbSBpbiBmcmFtZSBwZXIgc2Vjb25kCi0gKiBAcm90OTA6IHRydWUgaWYgcm90 YXRpb24gOTAgaW4gY291bnRlciBjbG9ja3dpc2UgaXMgcmVxdWlyZWQKLSAqIEBoZmxpcDogdHJ1 ZSBpZiBob3Jpem9udGFsIGZsaXAgaXMgcmVxdWlyZWQgcHJpb3IgdG8gcm90YXRpb24KLSAqIEB2 ZmxpcDogdHJ1ZSBpZiB2ZXJ0aWNhbCBmbGlwIGlzIHJlcXVpcmVkIHByaW9yIHRvIHJvdGF0aW9u Ci0gKiBAdmlkZW9fbW9kZTogdHJ1ZSBpZiByb3RhdG9yIGlzIGZlZWRpbmcgaW50byB2aWRlbyBp bnRlcmZhY2UKLSAqIEBjbGtyYXRlIDogY2xvY2sgcmF0ZSBpbiBIegotICogQHByZWZpbGxfYnc6 IHByZWZpbGwgYmFuZHdpZHRoIGluIEJwcyAodmlkZW8gbW9kZSBvbmx5KQotICogQHNyY19pb3Zh OiBzb3VyY2UgaS9vIHZpcnR1YWwgYWRkcmVzcwotICogQHNyY19sZW46IHNvdXJjZSBpL28gYnVm ZmVyIGxlbmd0aAotICogQHNyY19wbGFuZXM6IHNvdXJjZSBwbGFuZSBudW1iZXIKLSAqIEBzcmNf Zm9ybWF0OiBwb2ludGVyIHRvIHNvdXJjZSBkcHUgcGl4ZWwgZm9ybWF0Ci0gKiBAc3JjX3BpeGVs X2Zvcm1hdDogc291cmNlIHBpeGVsIGZvcm1hdCBpbiBkcm0gZm91cmNjCi0gKiBAc3JjX21vZGlm aWVyOiBzb3VyY2UgcGl4ZWwgZm9ybWF0IG1vZGlmaWVyCi0gKiBAc3JjX3dpZHRoOiBzb3VyY2Ug d2lkdGggaW4gcGl4ZWwKLSAqIEBzcmNfaGVpZ2h0OiBzb3VyY2UgaGVpZ2h0IGluIHBpeGVsCi0g KiBAc3JjX3JlY3RfeDogc291cmNlIHJlY3RhbmdsZSB4IGNvb3JkaW5hdGUKLSAqIEBzcmNfcmVj dF95OiBzb3VyY2UgcmVjdGFuZ2xlIHkgY29vcmRpbmF0ZQotICogQHNyY19yZWN0X3c6IHNvdXJj ZSByZWN0YW5nbGUgd2lkdGgKLSAqIEBzcmNfcmVjdF9oOiBzb3VyY2UgcmVjdGFuZ2xlIGhlaWdo dAotICogQGRzdF93cml0ZWJhY2s6IHRydWUgaWYgd3JpdGViYWNrIG9mIHJvdGF0ZWQgb3V0cHV0 IGlzIHJlcXVpcmVkCi0gKiBAZHN0X2lvdmE6IGRlc3RpbmF0aW9uIGkvbyB2aXJ0dWFsIGFkZHJl c3MKLSAqIEBkc3RfbGVuOiBkZXN0aW5hdGlvbiBpL28gYnVmZmVyIGxlbmd0aAotICogQGRzdF9w bGFuZXM6IGRlc3RpbmF0aW9uIHBsYW5lIG51bWJlcgotICogQGRzdF9mb3JtYXQ6IHBvaW50ZXIg dG8gZGVzdGluYXRpb24gZHB1IHBpeGVsIGZvcm1hdCAoaW5wdXQvb3V0cHV0KQotICogQGRzdF9w aXhlbF9mb3JtYXQ6IGRlc3RpbmF0aW9uIHBpeGVsIGZvcm1hdCBpbiBkcm0gZm91cmNjIChpbnB1 dC9vdXRwdXQpCi0gKiBAZHN0X21vZGlmaWVyOiBkZXN0aW5hdGlvbiBwaXhlbCBmb3JtYXQgbW9k aWZpZXIgKGlucHV0L291dHB1dCkKLSAqIEBkc3RfcmVjdF94OiBkZXN0aW5hdGlvbiByZWN0YW5n bGUgeCBjb29yZGluYXRlCi0gKiBAZHN0X3JlY3RfeTogZGVzdGluYXRpb24gcmVjdGFuZ2xlIHkg Y29vcmRpbmF0ZQotICogQGRzdF9yZWN0X3c6IGRlc3RpbmF0aW9uIHJlY3RhbmdsZSB3aWR0aAot ICogQGRzdF9yZWN0X2g6IGRlc3RpbmF0aW9uIHJlY3RhbmdsZSBoZWlnaHQKLSAqIEBwcml2X2hh bmRsZTogcHJpdmF0ZSBoYW5kbGUgb2Ygcm90YXRvciBkcml2ZXIgKG91dHB1dCkKLSAqLwotc3Ry dWN0IGRwdV9od19yb3RfY21kIHsKLQlib29sIG1hc3RlcjsKLQl1MzIgc2VxdWVuY2VfaWQ7Ci0J dTMyIGZwczsKLQlib29sIHJvdDkwOwotCWJvb2wgaGZsaXA7Ci0JYm9vbCB2ZmxpcDsKLQlib29s IHZpZGVvX21vZGU7Ci0JdTY0IGNsa3JhdGU7Ci0JdTY0IHByZWZpbGxfYnc7Ci0JZG1hX2FkZHJf dCBzcmNfaW92YVs0XTsKLQl1MzIgc3JjX2xlbls0XTsKLQl1MzIgc3JjX3BsYW5lczsKLQljb25z dCBzdHJ1Y3QgZHB1X2Zvcm1hdCAqc3JjX2Zvcm1hdDsKLQl1MzIgc3JjX3BpeGVsX2Zvcm1hdDsK LQl1NjQgc3JjX21vZGlmaWVyOwotCXUzMiBzcmNfd2lkdGg7Ci0JdTMyIHNyY19oZWlnaHQ7Ci0J dTMyIHNyY19zdHJpZGU7Ci0JdTMyIHNyY19yZWN0X3g7Ci0JdTMyIHNyY19yZWN0X3k7Ci0JdTMy IHNyY19yZWN0X3c7Ci0JdTMyIHNyY19yZWN0X2g7Ci0JYm9vbCBkc3Rfd3JpdGViYWNrOwotCWRt YV9hZGRyX3QgZHN0X2lvdmFbNF07Ci0JdTMyIGRzdF9sZW5bNF07Ci0JdTMyIGRzdF9wbGFuZXM7 Ci0JY29uc3Qgc3RydWN0IGRwdV9mb3JtYXQgKmRzdF9mb3JtYXQ7Ci0JdTMyIGRzdF9waXhlbF9m b3JtYXQ7Ci0JdTY0IGRzdF9tb2RpZmllcjsKLQl1MzIgZHN0X3JlY3RfeDsKLQl1MzIgZHN0X3Jl Y3RfeTsKLQl1MzIgZHN0X3JlY3RfdzsKLQl1MzIgZHN0X3JlY3RfaDsKLQl2b2lkICpwcml2X2hh bmRsZTsKLX07Ci0KLS8qKgotICogc3RydWN0IGRwdV9od19yb3Rfb3BzIC0gaW50ZXJmYWNlIHRv IHRoZSByb3RhdG9yIGh3IGRyaXZlciBmdW5jdGlvbnMKLSAqIEFzc3VtcHRpb24gaXMgdGhlc2Ug ZnVuY3Rpb25zIHdpbGwgYmUgY2FsbGVkIGFmdGVyIGNsb2NrcyBhcmUgZW5hYmxlZAotICovCi1z dHJ1Y3QgZHB1X2h3X3JvdF9vcHMgewotCWludCAoKmNvbW1pdCkoc3RydWN0IGRwdV9od19yb3Qg Kmh3LCBzdHJ1Y3QgZHB1X2h3X3JvdF9jbWQgKmRhdGEsCi0JCQllbnVtIGRwdV9od19yb3RfY21k X3R5cGUgY21kKTsKLQljb25zdCBzdHJ1Y3QgZHB1X2Zvcm1hdF9leHRlbmRlZCAqKCpnZXRfZm9y bWF0X2NhcHMpKAotCQkJc3RydWN0IGRwdV9od19yb3QgKmh3KTsKLQljb25zdCBjaGFyICooKmdl dF9kb3duc2NhbGVfY2Fwcykoc3RydWN0IGRwdV9od19yb3QgKmh3KTsKLQlzaXplX3QgKCpnZXRf Y2FjaGVfc2l6ZSkoc3RydWN0IGRwdV9od19yb3QgKmh3KTsKLQlpbnQgKCpnZXRfbWF4bGluZXdp ZHRoKShzdHJ1Y3QgZHB1X2h3X3JvdCAqaHcpOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgZHB1X2h3 X3JvdCA6IFJPVCBkcml2ZXIgb2JqZWN0Ci0gKiBAYmFzZTogaHcgYmxvY2sgYmFzZSBvYmplY3QK LSAqIEBodzogaGFyZHdhcmUgYWRkcmVzcyBtYXAKLSAqIEBpZHg6IGluc3RhbmNlIGluZGV4Ci0g KiBAY2FwczogY2FwYWJpbGl0aWVzIGJpdG1hc2sKLSAqIEBvcHM6IG9wZXJhdGlvbiB0YWJsZQot ICogQHJvdF9jdHg6IHBvaW50ZXIgdG8gcHJpdmF0ZSByb3RhdG9yIGNvbnRleHQKLSAqIEBmb3Jt YXRfY2FwczogcG9pbnRlciB0byBwaXhlbCBmb3JtYXQgY2FwYWJpbGl0eSAgYXJyYXkKLSAqIEBk b3duc2NhbGVfY2FwczogcG9pbnRlciB0byBzY2FsaW5nIGNhcGFiaWxpdHkgc3RyaW5nCi0gKi8K LXN0cnVjdCBkcHVfaHdfcm90IHsKLQlzdHJ1Y3QgZHB1X2h3X2JsayBiYXNlOwotCXN0cnVjdCBk cHVfaHdfYmxrX3JlZ19tYXAgaHc7Ci0JY2hhciBuYW1lW0RQVV9IV19ST1RfTkFNRV9TSVpFXTsK LQlpbnQgaWR4OwotCWNvbnN0IHN0cnVjdCBkcHVfcm90X2NmZyAqY2FwczsKLQlzdHJ1Y3QgZHB1 X2h3X3JvdF9vcHMgb3BzOwotCXZvaWQgKnJvdF9jdHg7Ci0Jc3RydWN0IGRwdV9mb3JtYXRfZXh0 ZW5kZWQgKmZvcm1hdF9jYXBzOwotCWNoYXIgKmRvd25zY2FsZV9jYXBzOwotfTsKLQotLyoqCi0g KiBkcHVfaHdfcm90X2luaXQgLSBpbml0aWFsaXplIGFuZCByZXR1cm4gcm90YXRvciBodyBkcml2 ZXIgb2JqZWN0LgotICogQGlkeDogIHdiX3BhdGggaW5kZXggZm9yIHdoaWNoIGRyaXZlciBvYmpl Y3QgaXMgcmVxdWlyZWQKLSAqIEBhZGRyOiBtYXBwZWQgcmVnaXN0ZXIgaW8gYWRkcmVzcyBvZiBN RFAKLSAqIEBtIDogICBwb2ludGVyIHRvIG1kc3MgY2F0YWxvZyBkYXRhCi0gKi8KLXN0cnVjdCBk cHVfaHdfcm90ICpkcHVfaHdfcm90X2luaXQoZW51bSBkcHVfcm90IGlkeCwKLQkJdm9pZCBfX2lv bWVtICphZGRyLAotCQlzdHJ1Y3QgZHB1X21kc3NfY2ZnICptKTsKLQotLyoqCi0gKiBkcHVfaHdf cm90X2Rlc3Ryb3kgLSBkZXN0cm95IHJvdGF0b3IgaHcgZHJpdmVyIG9iamVjdC4KLSAqIEBod19y b3Q6ICBQb2ludGVyIHRvIHJvdGF0b3IgaHcgZHJpdmVyIG9iamVjdAotICovCi12b2lkIGRwdV9o d19yb3RfZGVzdHJveShzdHJ1Y3QgZHB1X2h3X3JvdCAqaHdfcm90KTsKLQotLyoqCi0gKiB0b19k cHVfaHdfcm90IC0gY29udmVydCBiYXNlIG9iamVjdCBkcHVfaHdfYmFzZSB0byByb3RhdG9yIG9i amVjdAotICogQGh3OiBQb2ludGVyIHRvIGJhc2UgaGFyZHdhcmUgYmxvY2sKLSAqIHJldHVybjog UG9pbnRlciB0byByb3RhdG9yIGhhcmR3YXJlIGJsb2NrCi0gKi8KLXN0YXRpYyBpbmxpbmUgc3Ry dWN0IGRwdV9od19yb3QgKnRvX2RwdV9od19yb3Qoc3RydWN0IGRwdV9od19ibGsgKmh3KQotewot CXJldHVybiBjb250YWluZXJfb2YoaHcsIHN0cnVjdCBkcHVfaHdfcm90LCBiYXNlKTsKLX0KLQot LyoqCi0gKiBkcHVfaHdfcm90X2dldCAtIGdldCBuZXh0IGF2YWlsYWJsZSBoYXJkd2FyZSByb3Rh dG9yLCBvciBpbmNyZW1lbnQgcmVmZXJlbmNlCi0gKgljb3VudCBpZiBoYXJkd2FyZSByb3RhdG9y IHByb3ZpZGVkCi0gKiBAaHdfcm90OiBQb2ludGVyIHRvIGhhcmR3YXJlIHJvdGF0b3IKLSAqIHJl dHVybjogUG9pbnRlciB0byByb3RhdG9yIGhhcmR3YXJlIGJsb2NrIGlmIHN1Y2Nlc3M7IE5VTEwg b3RoZXJ3aXNlCi0gKi8KLXN0cnVjdCBkcHVfaHdfcm90ICpkcHVfaHdfcm90X2dldChzdHJ1Y3Qg ZHB1X2h3X3JvdCAqaHdfcm90KTsKLQotLyoqCi0gKiBkcHVfaHdfcm90X3B1dCAtIHB1dCB0aGUg Z2l2ZW4gaGFyZHdhcmUgcm90YXRvcgotICogQGh3X3JvdDogUG9pbnRlciB0byBoYXJkd2FyZSBy b3RhdG9yCi0gKiByZXR1cm46IG5vbmUKLSAqLwotdm9pZCBkcHVfaHdfcm90X3B1dChzdHJ1Y3Qg ZHB1X2h3X3JvdCAqaHdfcm90KTsKLQotI2VuZGlmIC8qX0RQVV9IV19ST1RfSCAqLwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3NzcHAuYyBiL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19zc3BwLmMKaW5kZXggM2ZlY2YzMy4uNTM0 MzE4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X2h3X3Nz cHAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfc3NwcC5jCkBA IC0xMDIsMTEgKzEwMiw2IEBACiAjZGVmaW5lIFNTUFBfUU9TX0NUUkxfQ1JFUV9WQkxBTktfTUFT SyAgICAgMHgzCiAjZGVmaW5lIFNTUFBfUU9TX0NUUkxfQ1JFUV9WQkxBTktfT0ZGICAgICAgMjAK IAotI2RlZmluZSBTU1BQX1NZU19DQUNIRV9NT0RFICAgICAgICAgICAgICAgIDB4MUJDCi0jZGVm aW5lIFNTUFBfU0JVRl9TVEFUVVNfUExBTkUwICAgICAgICAgICAgMHgxQzAKLSNkZWZpbmUgU1NQ UF9TQlVGX1NUQVRVU19QTEFORTEgICAgICAgICAgICAweDFDNAotI2RlZmluZSBTU1BQX1NCVUZf U1RBVFVTX1BMQU5FX0VNUFRZICAgICAgIEJJVCgxNikKLQogLyogRFBVX1NTUFBfU0NBTEVSX1FT RUVEMiAqLwogI2RlZmluZSBTQ0FMRV9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgIDB4MDQK ICNkZWZpbmUgQ09NUDBfM19QSEFTRV9TVEVQX1ggICAgICAgICAgICAgICAweDEwCkBAIC03NTks NDUgKzc1NCw2IEBAIHN0YXRpYyB2b2lkIGRwdV9od19zc3BwX3NldHVwX3Fvc19jdHJsKHN0cnVj dCBkcHVfaHdfcGlwZSAqY3R4LAogCURQVV9SRUdfV1JJVEUoJmN0eC0+aHcsIFNTUFBfUU9TX0NU UkwgKyBpZHgsIHFvc19jdHJsKTsKIH0KIAotc3RhdGljIHZvaWQgZHB1X2h3X3NzcHBfc2V0dXBf c3lzX2NhY2hlKHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4LAotCQlzdHJ1Y3QgZHB1X2h3X3BpcGVf c2NfY2ZnICpjZmcpCi17Ci0JdTMyIGlkeCwgdmFsOwotCi0JaWYgKF9zc3BwX3N1YmJsa19vZmZz ZXQoY3R4LCBEUFVfU1NQUF9TUkMsICZpZHgpKQotCQlyZXR1cm47Ci0KLQlpZiAoIWNmZykKLQkJ cmV0dXJuOwotCi0JdmFsID0gKChjZmctPm9wX21vZGUgJiAweDMpIDw8IDE4KSB8Ci0JCQkoKGNm Zy0+cmRfZW4gJiAweDEpIDw8IDE1KSB8Ci0JCQkoKGNmZy0+cmRfc2NpZCAmIDB4MWYpIDw8IDgp IHwKLQkJCSgoY2ZnLT5yZF9ub2FsbG9jYXRlICYgMHgxKSA8PCA0KSB8Ci0JCQkoKGNmZy0+cmRf b3BfdHlwZSAmIDB4ZikgPDwgMCk7Ci0KLQlEUFVfUkVHX1dSSVRFKCZjdHgtPmh3LCBTU1BQX1NZ U19DQUNIRV9NT0RFICsgaWR4LCB2YWwpOwotfQotCi1zdGF0aWMgdm9pZCBkcHVfaHdfc3NwcF9n ZXRfc2J1Zl9zdGF0dXMoc3RydWN0IGRwdV9od19waXBlICpjdHgsCi0JCXN0cnVjdCBkcHVfaHdf cGlwZV9zYnVmX3N0YXR1cyAqc3RhdHVzKQotewotCXUzMiBpZHgsIHZhbDsKLQotCWlmIChfc3Nw cF9zdWJibGtfb2Zmc2V0KGN0eCwgRFBVX1NTUFBfU1JDLCAmaWR4KSkKLQkJcmV0dXJuOwotCi0J aWYgKCFzdGF0dXMpCi0JCXJldHVybjsKLQotCXZhbCA9IERQVV9SRUdfUkVBRCgmY3R4LT5odywg U1NQUF9TQlVGX1NUQVRVU19QTEFORTAgKyBpZHgpOwotCXN0YXR1cy0+ZW1wdHlbMF0gPSB2YWwg JiBTU1BQX1NCVUZfU1RBVFVTX1BMQU5FX0VNUFRZID8gdHJ1ZSA6IGZhbHNlOwotCXN0YXR1cy0+ cmRfcHRyWzBdID0gdmFsICYgMHhmZmZmOwotCXZhbCA9IERQVV9SRUdfUkVBRCgmY3R4LT5odywg U1NQUF9TQlVGX1NUQVRVU19QTEFORTEgKyBpZHgpOwotCXN0YXR1cy0+ZW1wdHlbMV0gPSB2YWwg JiBTU1BQX1NCVUZfU1RBVFVTX1BMQU5FX0VNUFRZID8gdHJ1ZSA6IGZhbHNlOwotCXN0YXR1cy0+ cmRfcHRyWzFdID0gdmFsICYgMHhmZmZmOwotfQotCiBzdGF0aWMgdm9pZCBkcHVfaHdfc3NwcF9z ZXR1cF90c19wcmVmaWxsKHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4LAogCQlzdHJ1Y3QgZHB1X2h3 X3BpcGVfdHNfY2ZnICpjZmcsCiAJCWVudW0gZHB1X3NzcHBfbXVsdGlyZWN0X2luZGV4IGluZGV4 KQpAQCAtOTMxLDExICs4ODcsNiBAQCBzdGF0aWMgdm9pZCBfc2V0dXBfbGF5ZXJfb3BzKHN0cnVj dCBkcHVfaHdfcGlwZSAqYywKIAkJCQlkcHVfc2V0dXBfcGlwZV9wYV9tZW1jb2xfdjFfNzsKIAl9 CiAKLQlpZiAodGVzdF9iaXQoRFBVX1NTUFBfU0JVRiwgJmZlYXR1cmVzKSkgewotCQljLT5vcHMu c2V0dXBfc3lzX2NhY2hlID0gZHB1X2h3X3NzcHBfc2V0dXBfc3lzX2NhY2hlOwotCQljLT5vcHMu Z2V0X3NidWZfc3RhdHVzID0gZHB1X2h3X3NzcHBfZ2V0X3NidWZfc3RhdHVzOwotCX0KLQogCWlm ICh0ZXN0X2JpdChEUFVfU1NQUF9DRFAsICZmZWF0dXJlcykpCiAJCWMtPm9wcy5zZXR1cF9jZHAg PSBkcHVfaHdfc3NwcF9zZXR1cF9jZHA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfaHdfc3NwcC5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2Rw dTEvZHB1X2h3X3NzcHAuaAppbmRleCBkZTk3MWYxLi5hMzJlY2M2IDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfaHdfc3NwcC5oCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vZGlzcC9kcHUxL2RwdV9od19zc3BwLmgKQEAgLTIyNCw0MSArMjI0LDYgQEAgc3Ry dWN0IGRwdV9od19waXBlX2NkcF9jZmcgewogfTsKIAogLyoqCi0gKiBlbnVtIHN5c3RlbSBjYWNo ZSByb3RhdGlvbiBvcGVyYXRpb24gbW9kZQotICovCi1lbnVtIHsKLQlEUFVfUElQRV9TQ19PUF9N T0RFX09GRkxJTkUsCi0JRFBVX1BJUEVfU0NfT1BfTU9ERV9JTkxJTkVfU0lOR0xFLAotCURQVV9Q SVBFX1NDX09QX01PREVfSU5MSU5FX0xFRlQsCi0JRFBVX1BJUEVfU0NfT1BfTU9ERV9JTkxJTkVf UklHSFQsCi19OwotCi0vKioKLSAqIGVudW0gc3lzdGVtIGNhY2hlIHJlYWQgb3BlcmF0aW9uIHR5 cGUKLSAqLwotZW51bSB7Ci0JRFBVX1BJUEVfU0NfUkRfT1BfVFlQRV9DQUNIRUFCTEUsCi0JRFBV X1BJUEVfU0NfUkRfT1BfVFlQRV9JTlZBTElEQVRFLAotCURQVV9QSVBFX1NDX1JEX09QX1RZUEVf RVZJQ1RJT04sCi19OwotCi0vKioKLSAqIHN0cnVjdCBkcHVfaHdfcGlwZV9zY19jZmcgLSBzeXN0 ZW0gY2FjaGUgY29uZmlndXJhdGlvbgotICogQG9wX21vZGU6IHJvdGF0aW9uIG9wZXJhdGluZyBt b2RlCi0gKiBAcmRfZW46IHN5c3RlbSBjYWNoZSByZWFkIGVuYWJsZQotICogQHJkX3NjaWQ6IHN5 c3RlbSBjYWNoZSByZWFkIGJsb2NrIGlkCi0gKiBAcmRfbm9hbGxvY2F0ZTogc3lzdGVtIGNhY2hl IHJlYWQgbm8gYWxsb2NhdGUgYXR0cmlidXRlCi0gKiBAcmRfb3BfdHlwZTogc3lzdGVtIGNhY2hl IHJlYWQgb3BlcmF0aW9uIHR5cGUKLSAqLwotc3RydWN0IGRwdV9od19waXBlX3NjX2NmZyB7Ci0J dTMyIG9wX21vZGU7Ci0JYm9vbCByZF9lbjsKLQl1MzIgcmRfc2NpZDsKLQlib29sIHJkX25vYWxs b2NhdGU7Ci0JdTMyIHJkX29wX3R5cGU7Ci19OwotCi0vKioKICAqIHN0cnVjdCBkcHVfaHdfcGlw ZV90c19jZmcgLSB0cmFmZmljIHNoYXBlciBjb25maWd1cmF0aW9uCiAgKiBAc2l6ZTogc2l6ZSB0 byBwcmVmaWxsIGluIGJ5dGVzLCBvciB6ZXJvIHRvIGRpc2FibGUKICAqIEB0aW1lOiB0aW1lIHRv IHByZWZpbGwgaW4gdXNlYywgb3IgemVybyB0byBkaXNhYmxlCkBAIC0yNjksMjEgKzIzNCw2IEBA IHN0cnVjdCBkcHVfaHdfcGlwZV90c19jZmcgewogfTsKIAogLyoqCi0gKiBNYXhpbXVtIG51bWJl ciBvZiBzdHJlYW0gYnVmZmVyIHBsYW5lCi0gKi8KLSNkZWZpbmUgRFBVX1BJUEVfU0JVRl9QTEFO RV9OVU0JMgotCi0vKioKLSAqIHN0cnVjdCBkcHVfaHdfcGlwZV9zYnVmX3N0YXR1cyAtIHN0cmVh bSBidWZmZXIgc3RhdHVzCi0gKiBAZW1wdHk6IGluZGljYXRlIGlmIHN0cmVhbSBidWZmZXIgaXMg ZW1wdHkgb2Ygbm90Ci0gKiBAcmRfcHRyOiBjdXJyZW50IHJlYWQgcG9pbnRlciBvZiBzdHJlYW0g YnVmZmVyCi0gKi8KLXN0cnVjdCBkcHVfaHdfcGlwZV9zYnVmX3N0YXR1cyB7Ci0JYm9vbCBlbXB0 eVtEUFVfUElQRV9TQlVGX1BMQU5FX05VTV07Ci0JdTMyIHJkX3B0cltEUFVfUElQRV9TQlVGX1BM QU5FX05VTV07Ci19OwotCi0vKioKICAqIHN0cnVjdCBkcHVfaHdfc3NwcF9vcHMgLSBpbnRlcmZh Y2UgdG8gdGhlIFNTUFAgSHcgZHJpdmVyIGZ1bmN0aW9ucwogICogQ2FsbGVyIG11c3QgY2FsbCB0 aGUgaW5pdCBmdW5jdGlvbiB0byBnZXQgdGhlIHBpcGUgY29udGV4dCBmb3IgZWFjaCBwaXBlCiAg KiBBc3N1bXB0aW9uIGlzIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIGJlIGNhbGxlZCBhZnRlciBjbG9j a3MgYXJlIGVuYWJsZWQKQEAgLTQ3MiwyMiArNDIyLDYgQEAgc3RydWN0IGRwdV9od19zc3BwX29w cyB7CiAJdTMyICgqZ2V0X3NjYWxlcl92ZXIpKHN0cnVjdCBkcHVfaHdfcGlwZSAqY3R4KTsKIAog CS8qKgotCSAqIHNldHVwX3N5c19jYWNoZSAtIHNldHVwIHN5c3RlbSBjYWNoZSBjb25maWd1cmF0 aW9uCi0JICogQGN0eDogUG9pbnRlciB0byBwaXBlIGNvbnRleHQKLQkgKiBAY2ZnOiBQb2ludGVy IHRvIHN5c3RlbSBjYWNoZSBjb25maWd1cmF0aW9uCi0JICovCi0Jdm9pZCAoKnNldHVwX3N5c19j YWNoZSkoc3RydWN0IGRwdV9od19waXBlICpjdHgsCi0JCQlzdHJ1Y3QgZHB1X2h3X3BpcGVfc2Nf Y2ZnICpjZmcpOwotCi0JLyoqCi0JICogZ2V0X3NidWZfc3RhdHVzIC0gZ2V0IHN0cmVhbSBidWZm ZXIgc3RhdHVzCi0JICogQGN0eDogUG9pbnRlciB0byBwaXBlIGNvbnRleHQKLQkgKiBAc3RhdHVz OiBQb2ludGVyIHRvIHN0cmVhbSBidWZmZXIgc3RhdHVzCi0JICovCi0Jdm9pZCAoKmdldF9zYnVm X3N0YXR1cykoc3RydWN0IGRwdV9od19waXBlICpjdHgsCi0JCQlzdHJ1Y3QgZHB1X2h3X3BpcGVf c2J1Zl9zdGF0dXMgKnN0YXR1cyk7Ci0KLQkvKioKIAkgKiBzZXR1cF90c19wcmVmaWxsIC0gc2V0 dXAgcHJlZmlsbCB0cmFmZmljIHNoYXBlcgogCSAqIEBjdHg6IFBvaW50ZXIgdG8gcGlwZSBjb250 ZXh0CiAJICogQGNmZzogUG9pbnRlciB0byB0cmFmZmljIHNoYXBlciBjb25maWd1cmF0aW9uCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuYyBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5jCmluZGV4IDllOWM5ZDIuLjJk MWYyNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFu ZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5jCkBAIC0z Niw3ICszNiw2IEBACiAjaW5jbHVkZSAiZHB1X3ZiaWYuaCIKICNpbmNsdWRlICJkcHVfcGxhbmUu aCIKICNpbmNsdWRlICJkcHVfY29sb3JfcHJvY2Vzc2luZy5oIgotI2luY2x1ZGUgImRwdV9od19y b3QuaCIKIAogc3RhdGljIGJvb2wgc3VzcGVuZF9ibGFuayA9IHRydWU7CiBtb2R1bGVfcGFyYW0o c3VzcGVuZF9ibGFuaywgYm9vbCwgMDQwMCk7CkBAIC0xMDAsMTAgKzk5LDcgQEAgZW51bSBkcHVf cGxhbmVfcW9zIHsKICAqIEBjc2NfcHRyOiBQb2ludHMgdG8gZHB1X2NzY19jZmcgc3RydWN0dXJl IHRvIHVzZSBmb3IgY3VycmVudAogICogQG1wbGFuZV9saXN0OiBMaXN0IG9mIG11bHRpcmVjdCBw bGFuZXMgb2YgdGhlIHNhbWUgcGlwZQogICogQGNhdGFsb2c6IFBvaW50cyB0byBkcHUgY2F0YWxv ZyBzdHJ1Y3R1cmUKLSAqIEBzYnVmX21vZGU6IGZvcmNlIHN0cmVhbSBidWZmZXIgbW9kZSBpZiBz ZXQKLSAqIEBzYnVmX3dyaXRlYmFjazogZm9yY2Ugc3RyZWFtIGJ1ZmZlciB3cml0ZWJhY2sgaWYg c2V0CiAgKiBAcmV2YWxpZGF0ZTogZm9yY2UgcmV2YWxpZGF0aW9uIG9mIGFsbCB0aGUgcGxhbmUg cHJvcGVydGllcwotICogQGJsb2Jfcm90X2NhcHM6IFBvaW50ZXIgdG8gcm90YXRvciBjYXBhYmls aXR5IGJsb2IKICAqLwogc3RydWN0IGRwdV9wbGFuZSB7CiAJc3RydWN0IGRybV9wbGFuZSBiYXNl OwpAQCAtMTI1LDggKzEyMSw2IEBAIHN0cnVjdCBkcHVfcGxhbmUgewogCWJvb2wgaXNfdmlydHVh bDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG1wbGFuZV9saXN0OwogCXN0cnVjdCBkcHVfbWRzc19jZmcg KmNhdGFsb2c7Ci0JdTMyIHNidWZfbW9kZTsKLQl1MzIgc2J1Zl93cml0ZWJhY2s7CiAJYm9vbCBy ZXZhbGlkYXRlOwogCiAJc3RydWN0IGRwdV9jc2NfY2ZnIGNzY19jZmc7CkBAIC0xNDAsNyArMTM0 LDYgQEAgc3RydWN0IGRwdV9wbGFuZSB7CiAJc3RydWN0IG1zbV9wcm9wZXJ0eV9pbmZvIHByb3Bl cnR5X2luZm87CiAJc3RydWN0IG1zbV9wcm9wZXJ0eV9kYXRhIHByb3BlcnR5X2RhdGFbUExBTkVf UFJPUF9DT1VOVF07CiAJc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iICpibG9iX2luZm87Ci0Jc3Ry dWN0IGRybV9wcm9wZXJ0eV9ibG9iICpibG9iX3JvdF9jYXBzOwogCiAJLyogZGVidWdmcyByZWxh dGVkIHN0dWZmICovCiAJc3RydWN0IGRlbnRyeSAqZGVidWdmc19yb290OwpAQCAtMTY0LDI3ICsx NTcsNiBAQCBzdGF0aWMgc3RydWN0IGRwdV9rbXMgKl9kcHVfcGxhbmVfZ2V0X2ttcyhzdHJ1Y3Qg ZHJtX3BsYW5lICpwbGFuZSkKIAlyZXR1cm4gdG9fZHB1X2ttcyhwcml2LT5rbXMpOwogfQogCi0v KioKLSAqIF9kcHVfcGxhbmVfZ2V0X2NydGNfc3RhdGUgLSBvYnRhaW4gY3J0YyBzdGF0ZSBhdHRh Y2hlZCB0byBnaXZlbiBwbGFuZSBzdGF0ZQotICogQHBzdGF0ZTogUG9pbnRlciB0byBkcm0gcGxh bmUgc3RhdGUKLSAqIHJldHVybjogUG9pbnRlciB0byBjcnRjIHN0YXRlIGlmIHN1Y2Nlc3M7IHBv aW50ZXIgZXJyb3IsIG90aGVyd2lzZQotICovCi1zdGF0aWMgc3RydWN0IGRybV9jcnRjX3N0YXRl ICpfZHB1X3BsYW5lX2dldF9jcnRjX3N0YXRlKAotCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpw c3RhdGUpCi17Ci0Jc3RydWN0IGRybV9jcnRjX3N0YXRlICpjc3RhdGU7Ci0KLQlpZiAoIXBzdGF0 ZSB8fCAhcHN0YXRlLT5jcnRjKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmIChwc3RhdGUtPnN0YXRl KQotCQljc3RhdGUgPSBkcm1fYXRvbWljX2dldF9jcnRjX3N0YXRlKHBzdGF0ZS0+c3RhdGUsIHBz dGF0ZS0+Y3J0Yyk7Ci0JZWxzZQotCQljc3RhdGUgPSBwc3RhdGUtPmNydGMtPnN0YXRlOwotCi0J cmV0dXJuIGNzdGF0ZTsKLX0KLQogc3RhdGljIGJvb2wgZHB1X3BsYW5lX2VuYWJsZWQoc3RydWN0 IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCiB7CiAJcmV0dXJuIHN0YXRlICYmIHN0YXRlLT5mYiAm JiBzdGF0ZS0+Y3J0YzsKQEAgLTE5MiwxOSArMTY0LDcgQEAgc3RhdGljIGJvb2wgZHB1X3BsYW5l X2VuYWJsZWQoc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCiAKIHN0YXRpYyBib29sIGRw dV9wbGFuZV9zc3BwX2VuYWJsZWQoc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCiB7Ci0J cmV0dXJuIHN0YXRlICYmIHRvX2RwdV9wbGFuZV9zdGF0ZShzdGF0ZSktPnJvdC5vdXRfZmIgJiYg c3RhdGUtPmNydGM7Ci19Ci0KLS8qKgotICogZHB1X3BsYW5lX2NydGNfZW5hYmxlZCAtIGRldGVy bWluZSBpZiBjcnRjIG9mIGdpdmVuIHBsYW5lIHN0YXRlIGlzIGVuYWJsZWQKLSAqIEBzdGF0ZTog UG9pbnRlciB0byBkcm0gcGxhbmUgc3RhdGUKLSAqIHJldHVybjogdHJ1ZSBpZiBwbGFuZSBhbmQg dGhlIGFzc29jaWF0ZWQgY3J0YyBhcmUgYm90aCBlbmFibGVkCi0gKi8KLXN0YXRpYyBib29sIGRw dV9wbGFuZV9jcnRjX2VuYWJsZWQoc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCi17Ci0J cmV0dXJuIGRwdV9wbGFuZV9lbmFibGVkKHN0YXRlKSAmJiBzdGF0ZS0+Y3J0Yy0+c3RhdGUgJiYK LQkJCXN0YXRlLT5jcnRjLT5zdGF0ZS0+YWN0aXZlICYmCi0JCQlzdGF0ZS0+Y3J0Yy0+c3RhdGUt PmVuYWJsZTsKKwlyZXR1cm4gc3RhdGUgJiYgc3RhdGUtPmNydGM7CiB9CiAKIC8qKgpAQCAtMjE5 LDEwICsxNzksOCBAQCBzdGF0aWMgaW5saW5lIGludCBfZHB1X3BsYW5lX2NhbGNfZmlsbF9sZXZl bChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIHsKIAlzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1LCAq dG1wOwogCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKnBzdGF0ZTsKLQlzdHJ1Y3QgZHB1X3BsYW5l X3JvdF9zdGF0ZSAqcnN0YXRlOwogCXUzMiBmaXhlZF9idWZmX3NpemU7CiAJdTMyIHRvdGFsX2Zs OwotCXUzMiBoZmxpcF9ieXRlczsKIAogCWlmICghcGxhbmUgfHwgIWZtdCB8fCAhcGxhbmUtPnN0 YXRlIHx8ICFzcmNfd2lkdGggfHwgIWZtdC0+YnBwKSB7CiAJCURQVV9FUlJPUigiaW52YWxpZCBh cmd1bWVudHNcbiIpOwpAQCAtMjMxLDcgKzE4OSw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IF9kcHVf cGxhbmVfY2FsY19maWxsX2xldmVsKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCiAJcGRwdSA9 IHRvX2RwdV9wbGFuZShwbGFuZSk7CiAJcHN0YXRlID0gdG9fZHB1X3BsYW5lX3N0YXRlKHBsYW5l LT5zdGF0ZSk7Ci0JcnN0YXRlID0gJnBzdGF0ZS0+cm90OwogCWZpeGVkX2J1ZmZfc2l6ZSA9IHBk cHUtPnBpcGVfc2Jsay0+cGl4ZWxfcmFtX3NpemU7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRt cCwgJnBkcHUtPm1wbGFuZV9saXN0LCBtcGxhbmVfbGlzdCkgewpAQCAtMjQzLDM2ICsyMDAsMzAg QEAgc3RhdGljIGlubGluZSBpbnQgX2RwdV9wbGFuZV9jYWxjX2ZpbGxfbGV2ZWwoc3RydWN0IGRy bV9wbGFuZSAqcGxhbmUsCiAJCXNyY193aWR0aCA9IG1heF90KHUzMiwgc3JjX3dpZHRoLCB0bXAt PnBpcGVfY2ZnLnNyY19yZWN0LncpOwogCX0KIAotCWlmICgocnN0YXRlLT5vdXRfcm90YXRpb24g JiBEUk1fTU9ERV9SRUZMRUNUX1gpICYmCi0JCQlEUFVfRk9STUFUX0lTX0xJTkVBUihmbXQpKQot CQloZmxpcF9ieXRlcyA9IChzcmNfd2lkdGggKyAzMikgKiBmbXQtPmJwcDsKLQllbHNlCi0JCWhm bGlwX2J5dGVzID0gMDsKLQogCWlmIChmbXQtPmZldGNoX3BsYW5lcyA9PSBEUFVfUExBTkVfUFNF VURPX1BMQU5BUikgewogCQlpZiAoZm10LT5jaHJvbWFfc2FtcGxlID09IERQVV9DSFJPTUFfNDIw KSB7CiAJCQkvKiBOVjEyICovCi0JCQl0b3RhbF9mbCA9IChmaXhlZF9idWZmX3NpemUgLyAyIC0g aGZsaXBfYnl0ZXMpIC8KKwkJCXRvdGFsX2ZsID0gKGZpeGVkX2J1ZmZfc2l6ZSAvIDIpIC8KIAkJ CQkoKHNyY193aWR0aCArIDMyKSAqIGZtdC0+YnBwKTsKIAkJfSBlbHNlIHsKIAkJCS8qIG5vbiBO VjEyICovCi0JCQl0b3RhbF9mbCA9IChmaXhlZF9idWZmX3NpemUgLyAyIC0gaGZsaXBfYnl0ZXMp ICogMiAvCisJCQl0b3RhbF9mbCA9IChmaXhlZF9idWZmX3NpemUgLyAyKSAqIDIgLwogCQkJCSgo c3JjX3dpZHRoICsgMzIpICogZm10LT5icHApOwogCQl9CiAJfSBlbHNlIHsKIAkJaWYgKHBzdGF0 ZS0+bXVsdGlyZWN0X21vZGUgPT0gRFBVX1NTUFBfTVVMVElSRUNUX1BBUkFMTEVMKSB7Ci0JCQl0 b3RhbF9mbCA9IChmaXhlZF9idWZmX3NpemUgLyAyIC0gaGZsaXBfYnl0ZXMpICogMiAvCisJCQl0 b3RhbF9mbCA9IChmaXhlZF9idWZmX3NpemUgLyAyKSAqIDIgLwogCQkJCSgoc3JjX3dpZHRoICsg MzIpICogZm10LT5icHApOwogCQl9IGVsc2UgewotCQkJdG90YWxfZmwgPSAoZml4ZWRfYnVmZl9z aXplIC0gaGZsaXBfYnl0ZXMpICogMiAvCisJCQl0b3RhbF9mbCA9IChmaXhlZF9idWZmX3NpemUp ICogMiAvCiAJCQkJKChzcmNfd2lkdGggKyAzMikgKiBmbXQtPmJwcCk7CiAJCX0KIAl9CiAKLQlE UFVfREVCVUcoInBsYW5lJXU6IHBudW06JWQgZm10OiAlNC40cyB3OiV1IGhmOiVkIGZsOiV1XG4i LAorCURQVV9ERUJVRygicGxhbmUldTogcG51bTolZCBmbXQ6ICU0LjRzIHc6JXUgZmw6JXVcbiIs CiAJCQlwbGFuZS0+YmFzZS5pZCwgcGRwdS0+cGlwZSAtIFNTUFBfVklHMCwKIAkJCShjaGFyICop JmZtdC0+YmFzZS5waXhlbF9mb3JtYXQsCi0JCQlzcmNfd2lkdGgsIGhmbGlwX2J5dGVzLCB0b3Rh bF9mbCk7CisJCQlzcmNfd2lkdGgsIHRvdGFsX2ZsKTsKIAogCXJldHVybiB0b3RhbF9mbDsKIH0K QEAgLTY5Niw5MCArNjQ3LDYgQEAgc3RhdGljIHZvaWQgX2RwdV9wbGFuZV9zZXRfaW5wdXRfZmVu Y2Uoc3RydWN0IGRwdV9wbGFuZSAqcGRwdSwKIAlEUFVfREVCVUdfUExBTkUocGRwdSwgIjB4JWxs WFxuIiwgZmQpOwogfQogCi0vKioKLSAqIF9kcHVfcGxhbmVfaW5saW5lX3JvdF9zZXRfb3RfbGlt aXQgLSBzZXQgT1QgbGltaXQgZm9yIHRoZSBnaXZlbiBpbmxpbmUKLSAqIHJvdGF0aW9uIHhpbiBj bGllbnQKLSAqIEBwbGFuZTogcG9pbnRlciB0byBkcm0gcGxhbmUKLSAqIEBjcnRjOiBwb2ludGVy IHRvIGRybSBjcnRjCi0gKiBAY2ZnOiBwb2ludGVyIHRvIHJvdGF0b3IgdmJpZiBjb25maWcKLSAq IEByZWN0X3c6IHJvdGF0b3IgZnJhbWUgd2lkdGgKLSAqIEByZWN0X2g6IHJvdGF0b3IgZnJhbWUg aGVpZ2h0Ci0gKi8KLXN0YXRpYyB2b2lkIF9kcHVfcGxhbmVfaW5saW5lX3JvdF9zZXRfb3RfbGlt aXQoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCi0JCXN0cnVjdCBkcm1fY3J0YyAqY3J0YywgY29u c3Qgc3RydWN0IGRwdV9yb3RfdmJpZl9jZmcgKmNmZywKLQkJdTMyIHJlY3RfdywgdTMyIHJlY3Rf aCkKLXsKLQlzdHJ1Y3QgZHB1X3ZiaWZfc2V0X290X3BhcmFtcyBvdF9wYXJhbXM7Ci0Jc3RydWN0 IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdjsKLQlzdHJ1Y3QgZHB1X2ttcyAqZHB1X2ttczsKLQotCWlm ICghcGxhbmUgfHwgIXBsYW5lLT5kZXYpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIGFyZ3VtZW50 c1xuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlwcml2ID0gcGxhbmUtPmRldi0+ZGV2X3ByaXZhdGU7 Ci0JaWYgKCFwcml2IHx8ICFwcml2LT5rbXMpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIEtNUyBy ZWZlcmVuY2VcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JZHB1X2ttcyA9IHRvX2RwdV9rbXMocHJp di0+a21zKTsKLQotCW1lbXNldCgmb3RfcGFyYW1zLCAwLCBzaXplb2Yob3RfcGFyYW1zKSk7Ci0J b3RfcGFyYW1zLnhpbl9pZCA9IGNmZy0+eGluX2lkOwotCW90X3BhcmFtcy5udW0gPSBjZmctPm51 bTsKLQlvdF9wYXJhbXMud2lkdGggPSByZWN0X3c7Ci0Jb3RfcGFyYW1zLmhlaWdodCA9IHJlY3Rf aDsKLQlvdF9wYXJhbXMuaXNfd2ZkID0gZmFsc2U7Ci0Jb3RfcGFyYW1zLmZyYW1lX3JhdGUgPSBj cnRjLT5tb2RlLnZyZWZyZXNoOwotCW90X3BhcmFtcy52YmlmX2lkeCA9IFZCSUZfUlQ7Ci0Jb3Rf cGFyYW1zLmNsa19jdHJsID0gY2ZnLT5jbGtfY3RybDsKLQlvdF9wYXJhbXMucmQgPSBjZmctPmlz X3JlYWQ7Ci0KLQlkcHVfdmJpZl9zZXRfb3RfbGltaXQoZHB1X2ttcywgJm90X3BhcmFtcyk7Ci19 Ci0KLS8qKgotICogX2RwdV9wbGFuZV9pbmxpbmVfcm90X3NldF9xb3NfcmVtYXAgLSBzZXQgdmJp ZiBRb1MgZm9yIHRoZSBnaXZlbiBpbmxpbmUKLSAqIHJvdGF0aW9uIHhpbiBjbGllbnQKLSAqIEBw bGFuZTogUG9pbnRlciB0byBkcm0gcGxhbmUKLSAqIEBjZmc6IFBvaW50ZXIgdG8gcm90YXRvciB2 YmlmIGNmZwotICovCi1zdGF0aWMgdm9pZCBfZHB1X3BsYW5lX2lubGluZV9yb3Rfc2V0X3Fvc19y ZW1hcChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKLQkJY29uc3Qgc3RydWN0IGRwdV9yb3RfdmJp Zl9jZmcgKmNmZykKLXsKLQlzdHJ1Y3QgZHB1X3ZiaWZfc2V0X3Fvc19wYXJhbXMgcW9zX3BhcmFt czsKLQlzdHJ1Y3QgbXNtX2RybV9wcml2YXRlICpwcml2OwotCXN0cnVjdCBkcHVfa21zICpkcHVf a21zOwotCi0JaWYgKCFwbGFuZSB8fCAhcGxhbmUtPmRldikgewotCQlEUFVfRVJST1IoImludmFs aWQgYXJndW1lbnRzXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCXByaXYgPSBwbGFuZS0+ZGV2LT5k ZXZfcHJpdmF0ZTsKLQlpZiAoIXByaXYgfHwgIXByaXYtPmttcykgewotCQlEUFVfRVJST1IoImlu dmFsaWQgS01TIHJlZmVyZW5jZVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlkcHVfa21zID0gdG9f ZHB1X2ttcyhwcml2LT5rbXMpOwotCi0JbWVtc2V0KCZxb3NfcGFyYW1zLCAwLCBzaXplb2YocW9z X3BhcmFtcykpOwotCXFvc19wYXJhbXMudmJpZl9pZHggPSBWQklGX1JUOwotCXFvc19wYXJhbXMu eGluX2lkID0gY2ZnLT54aW5faWQ7Ci0JcW9zX3BhcmFtcy5jbGtfY3RybCA9IGNmZy0+Y2xrX2N0 cmw7Ci0JcW9zX3BhcmFtcy5udW0gPSBjZmctPm51bTsKLQlxb3NfcGFyYW1zLmlzX3J0ID0gdHJ1 ZTsKLQotCURQVV9ERUJVRygidmJpZjolZCB4aW46JWQgbnVtOiVkIHJ0OiVkIGNsa19jdHJsOiVk XG4iLAotCQkJcW9zX3BhcmFtcy52YmlmX2lkeCwgcW9zX3BhcmFtcy54aW5faWQsCi0JCQlxb3Nf cGFyYW1zLm51bSwgcW9zX3BhcmFtcy5pc19ydCwgcW9zX3BhcmFtcy5jbGtfY3RybCk7Ci0KLQlk cHVfdmJpZl9zZXRfcW9zX3JlbWFwKGRwdV9rbXMsICZxb3NfcGFyYW1zKTsKLX0KLQogaW50IGRw dV9wbGFuZV93YWl0X2lucHV0X2ZlbmNlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLCB1aW50MzJf dCB3YWl0X21zKQogewogCXN0cnVjdCBkcHVfcGxhbmUgKnBkcHU7CkBAIC04NDcsNyArNzE0LDYg QEAgc3RhdGljIGludCBfZHB1X3BsYW5lX2dldF9hc3BhY2UoCiAJCXN0cnVjdCBtc21fZ2VtX2Fk ZHJlc3Nfc3BhY2UgKiphc3BhY2UpCiB7CiAJc3RydWN0IGRwdV9rbXMgKmttczsKLQlpbnQgbW9k ZTsKIAogCWlmICghcGRwdSB8fCAhcHN0YXRlIHx8ICFhc3BhY2UpIHsKIAkJRFBVX0VSUk9SKCJp bnZhbGlkIHBhcmFtZXRlcnNcbiIpOwpAQCAtMTQ1NiwxMTAyICsxMzIyLDYgQEAgc3RhdGljIGlu dCBfZHB1X3BsYW5lX2NvbG9yX2ZpbGwoc3RydWN0IGRwdV9wbGFuZSAqcGRwdSwKIAlyZXR1cm4g MDsKIH0KIAotLyoqCi0gKiBfZHB1X3BsYW5lX2ZiX2dldC9wdXQgLSBmcmFtZWJ1ZmZlciBjYWxs YmFjayBmb3IgY3J0YyByZXMgb3BzCi0gKi8KLXN0YXRpYyB2b2lkICpfZHB1X3BsYW5lX2ZiX2dl dCh2b2lkICpmYiwgdTMyIHR5cGUsIHU2NCB0YWcpCi17Ci0JZHJtX2ZyYW1lYnVmZmVyX2dldChm Yik7Ci0JcmV0dXJuIGZiOwotfQotc3RhdGljIHZvaWQgX2RwdV9wbGFuZV9mYl9wdXQodm9pZCAq ZmIpCi17Ci0JZHJtX2ZyYW1lYnVmZmVyX3B1dChmYik7Ci19Ci1zdGF0aWMgc3RydWN0IGRwdV9j cnRjX3Jlc19vcHMgZmJfcmVzX29wcyA9IHsKLQkucHV0ID0gX2RwdV9wbGFuZV9mYl9wdXQsCi0J LmdldCA9IF9kcHVfcGxhbmVfZmJfZ2V0LAotfTsKLQotLyoqCi0gKiBfZHB1X3BsYW5lX2Zib19n ZXQvcHV0IC0gZnJhbWVidWZmZXIgb2JqZWN0IGNhbGxiYWNrIGZvciBjcnRjIHJlcyBvcHMKLSAq Lwotc3RhdGljIHZvaWQgKl9kcHVfcGxhbmVfZmJvX2dldCh2b2lkICpmYm8sIHUzMiB0eXBlLCB1 NjQgdGFnKQotewotCWRwdV9rbXNfZmJvX3JlZmVyZW5jZShmYm8pOwotCXJldHVybiBmYm87Ci19 Ci1zdGF0aWMgdm9pZCBfZHB1X3BsYW5lX2Zib19wdXQodm9pZCAqZmJvKQotewotCWRwdV9rbXNf ZmJvX3VucmVmZXJlbmNlKGZibyk7Ci19Ci1zdGF0aWMgc3RydWN0IGRwdV9jcnRjX3Jlc19vcHMg ZmJvX3Jlc19vcHMgPSB7Ci0JLnB1dCA9IF9kcHVfcGxhbmVfZmJvX3B1dCwKLQkuZ2V0ID0gX2Rw dV9wbGFuZV9mYm9fZ2V0LAotfTsKLQotLyoqCi0gKiBkcHVfcGxhbmVfcm90X2NhbGNfcHJlZmls bCAtIGNhbGN1bGF0ZSByb3RhdG9yIHN0YXJ0IHByZWZpbGwKLSAqIEBwbGFuZTogUG9pbnRlciB0 byBkcm0gcGxhbmUKLSAqIHJldHVybjogcHJlZmlsbCB0aW1lIGluIGxpbmUKLSAqLwotdTMyIGRw dV9wbGFuZV9yb3RfY2FsY19wcmVmaWxsKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQotewotCXN0 cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlOwotCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKnBz dGF0ZTsKLQlzdHJ1Y3QgZHB1X3BsYW5lX3JvdF9zdGF0ZSAqcnN0YXRlOwotCXN0cnVjdCBkcHVf a21zICpkcHVfa21zOwotCXUzMiBibG9ja3NpemUgPSAxMjg7Ci0JdTMyIHByZWZpbGxfbGluZSA9 IDA7Ci0KLQlpZiAoIXBsYW5lIHx8ICFwbGFuZS0+c3RhdGUgfHwgIXBsYW5lLT5zdGF0ZS0+ZmIp IHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHBhcmFtZXRlcnNcbiIpOwotCQlyZXR1cm4gMDsKLQl9 Ci0KLQlkcHVfa21zID0gX2RwdV9wbGFuZV9nZXRfa21zKHBsYW5lKTsKLQlzdGF0ZSA9IHBsYW5l LT5zdGF0ZTsKLQlwc3RhdGUgPSB0b19kcHVfcGxhbmVfc3RhdGUoc3RhdGUpOwotCXJzdGF0ZSA9 ICZwc3RhdGUtPnJvdDsKLQotCWlmICghZHB1X2ttcyB8fCAhZHB1X2ttcy0+Y2F0YWxvZykgewot CQlEUFVfRVJST1IoImludmFsaWQga21zXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKHJz dGF0ZS0+b3V0X2ZiX2Zvcm1hdCkKLQkJZHB1X2Zvcm1hdF9nZXRfYmxvY2tfc2l6ZShyc3RhdGUt Pm91dF9mYl9mb3JtYXQsCi0JCQkJJmJsb2Nrc2l6ZSwgJmJsb2Nrc2l6ZSk7Ci0KLQlwcmVmaWxs X2xpbmUgPSBibG9ja3NpemUgKyBkcHVfa21zLT5jYXRhbG9nLT5zYnVmX2hlYWRyb29tOwotCXBy ZWZpbGxfbGluZSA9IG11bHRfZnJhYyhwcmVmaWxsX2xpbmUsIHJzdGF0ZS0+b3V0X3NyY19oID4+ IDE2LAotCQkJc3RhdGUtPmNydGNfaCk7Ci0JRFBVX0RFQlVHKAotCQkicGxhbmUlZC4lZCBibGs6 JXUgaGVhZDoldSB2ZHN0L3ZzcmM6JXUvJXUgcHJlZmlsbDoldVxuIiwKLQkJCXBsYW5lLT5iYXNl LmlkLCByc3RhdGUtPnNlcXVlbmNlX2lkLAotCQkJYmxvY2tzaXplLCBkcHVfa21zLT5jYXRhbG9n LT5zYnVmX2hlYWRyb29tLAotCQkJc3RhdGUtPmNydGNfaCwgcnN0YXRlLT5vdXRfc3JjX2ggPj4g MTYsCi0JCQlwcmVmaWxsX2xpbmUpOwotCi0JcmV0dXJuIHByZWZpbGxfbGluZTsKLX0KLQotLyoq Ci0gKiBkcHVfcGxhbmVfcm90X2NhbGNfY2ZnIC0gY2FsY3VsYXRlIHJvdGF0b3Ivc3NwcCBjb25m aWd1cmF0aW9uIGJ5Ci0gKgllbnVtZXJhdGluZyBvdmVyIGFsbCBwbGFuZXMgYXR0YWNoZWQgdG8g dGhlIHNhbWUgcm90YXRvcgotICogQHBsYW5lOiBQb2ludGVyIHRvIGRybSBwbGFuZQotICogQHN0 YXRlOiBQb2ludGVyIHRvIGRybSBzdGF0ZSB0byBiZSB1cGRhdGVkCi0gKiByZXR1cm46IDAgaWYg c3VjY2VzczsgZXJyb3IgY29kZSBvdGhlcndpc2UKLSAqLwotc3RhdGljIGludCBkcHVfcGxhbmVf cm90X2NhbGNfY2ZnKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAotCQlzdHJ1Y3QgZHJtX3BsYW5l X3N0YXRlICpzdGF0ZSkKLXsKLQlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpwc3RhdGU7Ci0Jc3Ry dWN0IGRwdV9wbGFuZV9yb3Rfc3RhdGUgKnJzdGF0ZTsKLQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUg KmNzdGF0ZTsKLQlzdHJ1Y3QgZHJtX3JlY3QgKmluX3JvdCwgKm91dF9yb3Q7Ci0Jc3RydWN0IGRy bV9wbGFuZSAqYXR0YWNoZWRfcGxhbmU7Ci0JdTMyIGRzdF94LCBkc3RfeSwgZHN0X3csIGRzdF9o OwotCWludCBmb3VuZCA9IDA7Ci0JaW50IHhwb3MgPSAwOwotCWludCByZXQ7Ci0KLQlpZiAoIXBs YW5lIHx8ICFzdGF0ZSB8fCAhc3RhdGUtPnN0YXRlKSB7Ci0JCURQVV9FUlJPUigiaW52YWxpZCBw YXJhbWV0ZXJzXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JY3N0YXRlID0gX2RwdV9w bGFuZV9nZXRfY3J0Y19zdGF0ZShzdGF0ZSk7Ci0JaWYgKElTX0VSUl9PUl9OVUxMKGNzdGF0ZSkp IHsKLQkJcmV0ID0gUFRSX0VSUihjc3RhdGUpOwotCQlEUFVfRVJST1IoImludmFsaWQgY3J0YyBz dGF0ZSAlZFxuIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlwc3RhdGUgPSB0b19kcHVf cGxhbmVfc3RhdGUoc3RhdGUpOwotCXJzdGF0ZSA9ICZwc3RhdGUtPnJvdDsKLQotCWluX3JvdCA9 ICZyc3RhdGUtPmluX3JvdF9yZWN0OwotCSppbl9yb3QgPSBkcm1fcGxhbmVfc3RhdGVfc3JjKHN0 YXRlKTsKLQotCW91dF9yb3QgPSAmcnN0YXRlLT5vdXRfcm90X3JlY3Q7Ci0JZHN0X3ggPSBkcHVf cGxhbmVfZ2V0X3Byb3BlcnR5KHBzdGF0ZSwgUExBTkVfUFJPUF9ST1RfRFNUX1gpOwotCWRzdF95 ID0gZHB1X3BsYW5lX2dldF9wcm9wZXJ0eShwc3RhdGUsIFBMQU5FX1BST1BfUk9UX0RTVF9ZKTsK LQlkc3RfdyA9IGRwdV9wbGFuZV9nZXRfcHJvcGVydHkocHN0YXRlLCBQTEFORV9QUk9QX1JPVF9E U1RfVyk7Ci0JZHN0X2ggPSBkcHVfcGxhbmVfZ2V0X3Byb3BlcnR5KHBzdGF0ZSwgUExBTkVfUFJP UF9ST1RfRFNUX0gpOwotCi0JaWYgKCFkc3RfdyAmJiAhZHN0X2gpIHsKLQkJcnN0YXRlLT5vdXRf cm90X3JlY3QgPSByc3RhdGUtPmluX3JvdF9yZWN0OwotCQlkcm1fcmVjdF9yb3RhdGUoJnJzdGF0 ZS0+b3V0X3JvdF9yZWN0LCBzdGF0ZS0+ZmItPndpZHRoIDw8IDE2LAotCQkJCXN0YXRlLT5mYi0+ aGVpZ2h0IDw8IDE2LCByc3RhdGUtPmluX3JvdGF0aW9uKTsKLQl9IGVsc2UgewotCQlvdXRfcm90 LT54MSA9IGRzdF94OwotCQlvdXRfcm90LT55MSA9IGRzdF95OwotCQlvdXRfcm90LT54MiA9IGRz dF94ICsgZHN0X3c7Ci0JCW91dF9yb3QtPnkyID0gZHN0X3kgKyBkc3RfaDsKLQl9Ci0KLQlyc3Rh dGUtPm91dF9zcmNfcmVjdCA9IHJzdGF0ZS0+b3V0X3JvdF9yZWN0OwotCi0JLyogZW51bWVyYXRp bmcgb3ZlciBhbGwgcGxhbmVzIGF0dGFjaGVkIHRvIHRoZSBzYW1lIHJvdGF0b3IgKi8KLQlkcm1f YXRvbWljX2NydGNfc3RhdGVfZm9yX2VhY2hfcGxhbmUoYXR0YWNoZWRfcGxhbmUsIGNzdGF0ZSkg ewotCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICphdHRhY2hlZF9zdGF0ZTsKLQkJc3RydWN0IGRw dV9wbGFuZV9zdGF0ZSAqYXR0YWNoZWRfcHN0YXRlOwotCQlzdHJ1Y3QgZHB1X3BsYW5lX3JvdF9z dGF0ZSAqYXR0YWNoZWRfcnN0YXRlOwotCQlzdHJ1Y3QgZHJtX3JlY3QgYXR0YWNoZWRfb3V0X3Jl Y3Q7Ci0KLQkJYXR0YWNoZWRfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9leGlzdGluZ19wbGFuZV9z dGF0ZSgKLQkJCQlzdGF0ZS0+c3RhdGUsIGF0dGFjaGVkX3BsYW5lKTsKLQotCQlpZiAoIWF0dGFj aGVkX3N0YXRlKQotCQkJY29udGludWU7Ci0KLQkJYXR0YWNoZWRfcHN0YXRlID0gdG9fZHB1X3Bs YW5lX3N0YXRlKGF0dGFjaGVkX3N0YXRlKTsKLQkJYXR0YWNoZWRfcnN0YXRlID0gJmF0dGFjaGVk X3BzdGF0ZS0+cm90OwotCi0JCWlmIChhdHRhY2hlZF9zdGF0ZS0+ZmIgIT0gc3RhdGUtPmZiKQot CQkJY29udGludWU7Ci0KLQkJaWYgKGRwdV9wbGFuZV9nZXRfcHJvcGVydHkocHN0YXRlLCBQTEFO RV9QUk9QX1JPVEFUSU9OKSAhPQotCQkJZHB1X3BsYW5lX2dldF9wcm9wZXJ0eShhdHRhY2hlZF9w c3RhdGUsCi0JCQkJUExBTkVfUFJPUF9ST1RBVElPTikpCi0JCQljb250aW51ZTsKLQotCQlmb3Vu ZCsrOwotCi0JCS8qIHNraXAgaXRzZWxmICovCi0JCWlmIChhdHRhY2hlZF9wbGFuZSA9PSBwbGFu ZSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIGZpbmQgYm91bmRpbmcgcm90YXRvciBzb3VyY2Ugcm9p ICovCi0JCWlmIChhdHRhY2hlZF9zdGF0ZS0+c3JjX3ggPCBpbl9yb3QtPngxKQotCQkJaW5fcm90 LT54MSA9IGF0dGFjaGVkX3N0YXRlLT5zcmNfeDsKLQotCQlpZiAoYXR0YWNoZWRfc3RhdGUtPnNy Y195IDwgaW5fcm90LT55MSkKLQkJCWluX3JvdC0+eTEgPSBhdHRhY2hlZF9zdGF0ZS0+c3JjX3k7 Ci0KLQkJaWYgKGF0dGFjaGVkX3N0YXRlLT5zcmNfeCArIGF0dGFjaGVkX3N0YXRlLT5zcmNfdyA+ IGluX3JvdC0+eDIpCi0JCQlpbl9yb3QtPngyID0gYXR0YWNoZWRfc3RhdGUtPnNyY194ICsKLQkJ CQlhdHRhY2hlZF9zdGF0ZS0+c3JjX3c7Ci0KLQkJaWYgKGF0dGFjaGVkX3N0YXRlLT5zcmNfeSAr IGF0dGFjaGVkX3N0YXRlLT5zcmNfaCA+IGluX3JvdC0+eTIpCi0JCQlpbl9yb3QtPnkyID0gYXR0 YWNoZWRfc3RhdGUtPnNyY195ICsKLQkJCQlhdHRhY2hlZF9zdGF0ZS0+c3JjX2g7Ci0KLQkJLyog ZmluZCBib3VuZGluZyByb3RhdG9yIGRlc3RpbmF0aW9uIHJvaSAqLwotCQlkc3RfeCA9IGRwdV9w bGFuZV9nZXRfcHJvcGVydHkoYXR0YWNoZWRfcHN0YXRlLAotCQkJCVBMQU5FX1BST1BfUk9UX0RT VF9YKTsKLQkJZHN0X3kgPSBkcHVfcGxhbmVfZ2V0X3Byb3BlcnR5KGF0dGFjaGVkX3BzdGF0ZSwK LQkJCQlQTEFORV9QUk9QX1JPVF9EU1RfWSk7Ci0JCWRzdF93ID0gZHB1X3BsYW5lX2dldF9wcm9w ZXJ0eShhdHRhY2hlZF9wc3RhdGUsCi0JCQkJUExBTkVfUFJPUF9ST1RfRFNUX1cpOwotCQlkc3Rf aCA9IGRwdV9wbGFuZV9nZXRfcHJvcGVydHkoYXR0YWNoZWRfcHN0YXRlLAotCQkJCVBMQU5FX1BS T1BfUk9UX0RTVF9IKTsKLQkJaWYgKCFkc3RfdyAmJiAhZHN0X2gpIHsKLQkJCWF0dGFjaGVkX291 dF9yZWN0ID0gZHJtX3BsYW5lX3N0YXRlX3NyYyhhdHRhY2hlZF9zdGF0ZSk7Ci0JCQlkcm1fcmVj dF9yb3RhdGUoJmF0dGFjaGVkX291dF9yZWN0LAotCQkJCQlzdGF0ZS0+ZmItPndpZHRoIDw8IDE2 LAotCQkJCQlzdGF0ZS0+ZmItPmhlaWdodCA8PCAxNiwKLQkJCQkJcnN0YXRlLT5pbl9yb3RhdGlv bik7Ci0JCX0gZWxzZSB7Ci0JCQlhdHRhY2hlZF9vdXRfcmVjdC54MSA9IGRzdF94OwotCQkJYXR0 YWNoZWRfb3V0X3JlY3QueTEgPSBkc3RfeTsKLQkJCWF0dGFjaGVkX291dF9yZWN0LngyID0gZHN0 X3ggKyBkc3RfdzsKLQkJCWF0dGFjaGVkX291dF9yZWN0LnkyID0gZHN0X3kgKyBkc3RfaDsKLQkJ fQotCi0JCS8qIGNoZWNrIHNvdXJjZSBzcGxpdCBsZWZ0L3JpZ2h0IG1pc21hdGNoICovCi0JCWlm IChhdHRhY2hlZF9vdXRfcmVjdC55MSAhPSByc3RhdGUtPm91dF9zcmNfcmVjdC55MSB8fAotCQkJ YXR0YWNoZWRfb3V0X3JlY3QueTIgIT0gcnN0YXRlLT5vdXRfc3JjX3JlY3QueTIpIHsKLQkJCURQ VV9FUlJPUigKLQkJCQkicGxhbmUlZC4ldSBzcmM6JWR4JWQrJWQrJWQgcm90OjB4JWxseCBmYjol ZCBwbGFuZSVkLiV1IHNyYzolZHglZCslZCslZCByb3Q6MHglbGx4IGZiOiVkIG1pc21hdGNoXG4i LAotCQkJCQlwbGFuZS0+YmFzZS5pZCwKLQkJCQkJcnN0YXRlLT5zZXF1ZW5jZV9pZCwKLQkJCQkJ c3RhdGUtPnNyY193ID4+IDE2LAotCQkJCQlzdGF0ZS0+c3JjX2ggPj4gMTYsCi0JCQkJCXN0YXRl LT5zcmNfeCA+PiAxNiwKLQkJCQkJc3RhdGUtPnNyY195ID4+IDE2LAotCQkJCQlkcHVfcGxhbmVf Z2V0X3Byb3BlcnR5KHBzdGF0ZSwKLQkJCQkJCQlQTEFORV9QUk9QX1JPVEFUSU9OKSwKLQkJCQkJ c3RhdGUtPmZiID8KLQkJCQkJCXN0YXRlLT5mYi0+YmFzZS5pZCA6Ci0JCQkJCQktMSwKLQkJCQkJ YXR0YWNoZWRfcGxhbmUtPmJhc2UuaWQsCi0JCQkJCWF0dGFjaGVkX3JzdGF0ZS0+c2VxdWVuY2Vf aWQsCi0JCQkJCWF0dGFjaGVkX3N0YXRlLT5zcmNfdyA+PiAxNiwKLQkJCQkJYXR0YWNoZWRfc3Rh dGUtPnNyY19oID4+IDE2LAotCQkJCQlhdHRhY2hlZF9zdGF0ZS0+c3JjX3ggPj4gMTYsCi0JCQkJ CWF0dGFjaGVkX3N0YXRlLT5zcmNfeSA+PiAxNiwKLQkJCQkJZHB1X3BsYW5lX2dldF9wcm9wZXJ0 eShhdHRhY2hlZF9wc3RhdGUsCi0JCQkJCQkJUExBTkVfUFJPUF9ST1RBVElPTiksCi0JCQkJCWF0 dGFjaGVkX3N0YXRlLT5mYiA/Ci0JCQkJCQlhdHRhY2hlZF9zdGF0ZS0+ZmItPmJhc2UuaWQgOgot CQkJCQkJLTEpOwotCQkJRFBVX0VSUk9SKAotCQkJCSJwbGFuZSVkLiV1IHNzcHA6JWR4JWQrJWQr JWQgcGxhbmUlZC4ldSBzc3BwOiVkeCVkKyVkKyVkXG4iLAotCQkJCQlwbGFuZS0+YmFzZS5pZCwK LQkJCQkJcnN0YXRlLT5zZXF1ZW5jZV9pZCwKLQkJCQkJKHJzdGF0ZS0+b3V0X3NyY19yZWN0Lngy IC0KLQkJCQkJCXJzdGF0ZS0+b3V0X3NyY19yZWN0LngxKSA+PiAxNiwKLQkJCQkJKHJzdGF0ZS0+ b3V0X3NyY19yZWN0LnkyIC0KLQkJCQkJCXJzdGF0ZS0+b3V0X3NyY19yZWN0LnkxKSA+PiAxNiwK LQkJCQkJcnN0YXRlLT5vdXRfc3JjX3JlY3QueDEgPj4gMTYsCi0JCQkJCXJzdGF0ZS0+b3V0X3Ny Y19yZWN0LnkxID4+IDE2LAotCQkJCQlhdHRhY2hlZF9wbGFuZS0+YmFzZS5pZCwKLQkJCQkJYXR0 YWNoZWRfcnN0YXRlLT5zZXF1ZW5jZV9pZCwKLQkJCQkJKGF0dGFjaGVkX291dF9yZWN0LngyIC0K LQkJCQkJCWF0dGFjaGVkX291dF9yZWN0LngxKSA+PiAxNiwKLQkJCQkJKGF0dGFjaGVkX291dF9y ZWN0LnkyIC0KLQkJCQkJCWF0dGFjaGVkX291dF9yZWN0LnkxKSA+PiAxNiwKLQkJCQkJYXR0YWNo ZWRfb3V0X3JlY3QueDEgPj4gMTYsCi0JCQkJCWF0dGFjaGVkX291dF9yZWN0LnkxID4+IDE2KTsK LQkJCURQVV9FVlQzMihEUk1JRChwbGFuZSksCi0JCQkJCXJzdGF0ZS0+c2VxdWVuY2VfaWQsCi0J CQkJCXJzdGF0ZS0+b3V0X3NyY19yZWN0LngxID4+IDE2LAotCQkJCQlyc3RhdGUtPm91dF9zcmNf cmVjdC55MSA+PiAxNiwKLQkJCQkJKHJzdGF0ZS0+b3V0X3NyY19yZWN0LngyIC0KLQkJCQkJCXJz dGF0ZS0+b3V0X3NyY19yZWN0LngxKSA+PiAxNiwKLQkJCQkJKHJzdGF0ZS0+b3V0X3NyY19yZWN0 LnkyIC0KLQkJCQkJCXJzdGF0ZS0+b3V0X3NyY19yZWN0LnkxKSA+PiAxNiwKLQkJCQkJYXR0YWNo ZWRfcGxhbmUtPmJhc2UuaWQsCi0JCQkJCWF0dGFjaGVkX3JzdGF0ZS0+c2VxdWVuY2VfaWQsCi0J CQkJCWF0dGFjaGVkX291dF9yZWN0LngxID4+IDE2LAotCQkJCQlhdHRhY2hlZF9vdXRfcmVjdC55 MSA+PiAxNiwKLQkJCQkJKGF0dGFjaGVkX291dF9yZWN0LngyIC0KLQkJCQkJCWF0dGFjaGVkX291 dF9yZWN0LngxKSA+PiAxNiwKLQkJCQkJKGF0dGFjaGVkX291dF9yZWN0LnkyIC0KLQkJCQkJCWF0 dGFjaGVkX291dF9yZWN0LnkxKSA+PiAxNiwKLQkJCQkJRFBVX0VWVExPR19FUlJPUik7Ci0JCQly ZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCS8qIGZpbmQgcmVsYXRpdmUgc3NwcCBwb3NpdGlvbiAq LwotCQlpZiAoYXR0YWNoZWRfb3V0X3JlY3QueDEgPCByc3RhdGUtPm91dF9zcmNfcmVjdC54MSkK LQkJCXhwb3MrKzsKLQotCQlpZiAoYXR0YWNoZWRfb3V0X3JlY3QueDEgPCBvdXRfcm90LT54MSkK LQkJCW91dF9yb3QtPngxID0gYXR0YWNoZWRfb3V0X3JlY3QueDE7Ci0KLQkJaWYgKGF0dGFjaGVk X291dF9yZWN0LnkxIDwgb3V0X3JvdC0+eTEpCi0JCQlvdXRfcm90LT55MSA9IGF0dGFjaGVkX291 dF9yZWN0LnkxOwotCi0JCWlmIChhdHRhY2hlZF9vdXRfcmVjdC54MiA+IG91dF9yb3QtPngyKQot CQkJb3V0X3JvdC0+eDIgPSBhdHRhY2hlZF9vdXRfcmVjdC54MjsKLQotCQlpZiAoYXR0YWNoZWRf b3V0X3JlY3QueTIgPiBvdXRfcm90LT55MikKLQkJCW91dF9yb3QtPnkyID0gYXR0YWNoZWRfb3V0 X3JlY3QueTI7Ci0KLQkJRFBVX0RFQlVHKCJwbGFuZSVkLiV1IHNyY194OiVkIHNzcHA6JWR4JWQr JWQrJWQvJWR4JWQrJWQrJWRcbiIsCi0JCQlhdHRhY2hlZF9wbGFuZS0+YmFzZS5pZCwKLQkJCWF0 dGFjaGVkX3JzdGF0ZS0+c2VxdWVuY2VfaWQsCi0JCQlhdHRhY2hlZF9yc3RhdGUtPm91dF9zcmNf cmVjdC54MSA+PiAxNiwKLQkJCWF0dGFjaGVkX3N0YXRlLT5zcmNfdyA+PiAxNiwKLQkJCWF0dGFj aGVkX3N0YXRlLT5zcmNfaCA+PiAxNiwKLQkJCWF0dGFjaGVkX3N0YXRlLT5zcmNfeCA+PiAxNiwK LQkJCWF0dGFjaGVkX3N0YXRlLT5zcmNfeSA+PiAxNiwKLQkJCWRybV9yZWN0X3dpZHRoKCZhdHRh Y2hlZF9yc3RhdGUtPm91dF9zcmNfcmVjdCkgPj4gMTYsCi0JCQlkcm1fcmVjdF9oZWlnaHQoJmF0 dGFjaGVkX3JzdGF0ZS0+b3V0X3NyY19yZWN0KSA+PiAxNiwKLQkJCWF0dGFjaGVkX3JzdGF0ZS0+ b3V0X3NyY19yZWN0LngxID4+IDE2LAotCQkJYXR0YWNoZWRfcnN0YXRlLT5vdXRfc3JjX3JlY3Qu eTEgPj4gMTYpOwotCX0KLQotCXJzdGF0ZS0+b3V0X3hwb3MgPSB4cG9zOwotCXJzdGF0ZS0+bnBs YW5lID0gZm91bmQ7Ci0KLQlEUFVfREVCVUcoInBsYW5lJWQuJXUgeHBvczolZC8lZCByb3Q6JWR4 JWQrJWQrJWQvJWR4JWQrJWQrJWRcbiIsCi0JCQlwbGFuZS0+YmFzZS5pZCwgcnN0YXRlLT5zZXF1 ZW5jZV9pZCwKLQkJCXJzdGF0ZS0+b3V0X3hwb3MsIHJzdGF0ZS0+bnBsYW5lLAotCQkJZHJtX3Jl Y3Rfd2lkdGgoaW5fcm90KSA+PiAxNiwKLQkJCWRybV9yZWN0X2hlaWdodChpbl9yb3QpID4+IDE2 LAotCQkJaW5fcm90LT54MSA+PiAxNiwgaW5fcm90LT55MSA+PiAxNiwKLQkJCWRybV9yZWN0X3dp ZHRoKCZyc3RhdGUtPm91dF9yb3RfcmVjdCkgPj4gMTYsCi0JCQlkcm1fcmVjdF9oZWlnaHQoJnJz dGF0ZS0+b3V0X3JvdF9yZWN0KSA+PiAxNiwKLQkJCXJzdGF0ZS0+b3V0X3JvdF9yZWN0LngxID4+ IDE2LAotCQkJcnN0YXRlLT5vdXRfcm90X3JlY3QueTEgPj4gMTYpOwotCURQVV9FVlQzMihEUk1J RChwbGFuZSksIHJzdGF0ZS0+c2VxdWVuY2VfaWQsCi0JCQlyc3RhdGUtPm91dF94cG9zLCByc3Rh dGUtPm5wbGFuZSwKLQkJCWluX3JvdC0+eDEgPj4gMTYsIGluX3JvdC0+eTEgPj4gMTYsCi0JCQlk cm1fcmVjdF93aWR0aChpbl9yb3QpID4+IDE2LAotCQkJZHJtX3JlY3RfaGVpZ2h0KGluX3JvdCkg Pj4gMTYsCi0JCQlyc3RhdGUtPm91dF9yb3RfcmVjdC54MSA+PiAxNiwKLQkJCXJzdGF0ZS0+b3V0 X3JvdF9yZWN0LnkxID4+IDE2LAotCQkJZHJtX3JlY3Rfd2lkdGgoJnJzdGF0ZS0+b3V0X3JvdF9y ZWN0KSA+PiAxNiwKLQkJCWRybV9yZWN0X2hlaWdodCgmcnN0YXRlLT5vdXRfcm90X3JlY3QpID4+ IDE2KTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGRwdV9wbGFuZV9yb3Rfc3VibWl0X2Nv bW1hbmQgLSBjb21taXQgZ2l2ZW4gc3RhdGUgZm9yIHRoZSByb3RhdG9yIHN0YWdlCi0gKiBAcGxh bmU6IFBvaW50ZXIgdG8gZHJtIHBsYW5lCi0gKiBAc3RhdGU6IFBvaW50ZXIgdG8gdGhlIHN0YXRl IHRvIGJlIGNvbW1pdHRlZAotICogQGh3X2NtZDogcm90YXRvciBjb21tYW5kIHR5cGUKLSAqIHJl dHVybjogMCBpZiBzdWNjZXNzOyBlcnJvciBjb2RlIG90aGVyd2lzZQotICovCi1zdGF0aWMgaW50 IGRwdV9wbGFuZV9yb3Rfc3VibWl0X2NvbW1hbmQoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCi0J CXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlLCBlbnVtIGRwdV9od19yb3RfY21kX3R5cGUg aHdfY21kKQotewotCXN0cnVjdCBkcHVfcGxhbmUgKnBkcHUgPSB0b19kcHVfcGxhbmUocGxhbmUp OwotCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKnBzdGF0ZSA9IHRvX2RwdV9wbGFuZV9zdGF0ZShz dGF0ZSk7Ci0Jc3RydWN0IGRwdV9wbGFuZV9yb3Rfc3RhdGUgKnJzdGF0ZSA9ICZwc3RhdGUtPnJv dDsKLQlzdHJ1Y3QgZHB1X2h3X3JvdF9jbWQgKnJvdF9jbWQ7Ci0Jc3RydWN0IGRybV9jcnRjX3N0 YXRlICpjc3RhdGU7Ci0Jc3RydWN0IGRwdV9jcnRjX3N0YXRlICpkcHVfY3N0YXRlOwotCWludCBy ZXQsIGk7Ci0JaW50IGZiX21vZGU7Ci0KLQlpZiAoIXBsYW5lIHx8ICFzdGF0ZSB8fCAhc3RhdGUt PmZiIHx8ICFyc3RhdGUtPnJvdF9odykgewotCQlEUFVfRVJST1IoImludmFsaWQgcGFyYW1ldGVy c1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWNzdGF0ZSA9IF9kcHVfcGxhbmVfZ2V0 X2NydGNfc3RhdGUoc3RhdGUpOwotCWlmIChJU19FUlJfT1JfTlVMTChjc3RhdGUpKSB7Ci0JCURQ VV9FUlJPUigiaW52YWxpZCBjcnRjIHN0YXRlICVsZFxuIiwgUFRSX0VSUihjc3RhdGUpKTsKLQkJ cmV0dXJuIC1FSU5WQUw7Ci0JfQotCWRwdV9jc3RhdGUgPSB0b19kcHVfY3J0Y19zdGF0ZShjc3Rh dGUpOwotCi0Jcm90X2NtZCA9ICZyc3RhdGUtPnJvdF9jbWQ7Ci0KLQlyb3RfY21kLT5tYXN0ZXIg PSAocnN0YXRlLT5vdXRfeHBvcyA9PSAwKTsKLQlyb3RfY21kLT5zZXF1ZW5jZV9pZCA9IHJzdGF0 ZS0+c2VxdWVuY2VfaWQ7Ci0Jcm90X2NtZC0+ZnBzID0gcHN0YXRlLT5iYXNlLmNydGMgJiYgcHN0 YXRlLT5iYXNlLmNydGMtPnN0YXRlID8KLQkJZHJtX21vZGVfdnJlZnJlc2goJnBzdGF0ZS0+YmFz ZS5jcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZSkgOgotCQlERUZBVUxUX1JFRlJFU0hfUkFURTsK LQlyb3RfY21kLT5yb3Q5MCA9IHJzdGF0ZS0+cm90OTA7Ci0Jcm90X2NtZC0+aGZsaXAgPSByc3Rh dGUtPmhmbGlwOwotCXJvdF9jbWQtPnZmbGlwID0gcnN0YXRlLT52ZmxpcDsKLQotCXJvdF9jbWQt PnByZWZpbGxfYncgPSBkcHVfY3J0Y19nZXRfcHJvcGVydHkoZHB1X2NzdGF0ZSwKLQkJCUNSVENf UFJPUF9ST1RfUFJFRklMTF9CVyk7Ci0Jcm90X2NtZC0+Y2xrcmF0ZSA9IGRwdV9jcnRjX2dldF9w cm9wZXJ0eShkcHVfY3N0YXRlLAotCQkJQ1JUQ19QUk9QX1JPVF9DTEspOwotCXJvdF9jbWQtPmRz dF93cml0ZWJhY2sgPSBwZHB1LT5zYnVmX3dyaXRlYmFjazsKLQotCWlmIChkcHVfY3J0Y19nZXRf aW50Zl9tb2RlKHN0YXRlLT5jcnRjKSA9PSBJTlRGX01PREVfVklERU8pCi0JCXJvdF9jbWQtPnZp ZGVvX21vZGUgPSB0cnVlOwotCWVsc2UKLQkJcm90X2NtZC0+dmlkZW9fbW9kZSA9IGZhbHNlOwot Ci0Jcm90X2NtZC0+c3JjX3BpeGVsX2Zvcm1hdCA9IHN0YXRlLT5mYi0+Zm9ybWF0LT5mb3JtYXQ7 Ci0Jcm90X2NtZC0+c3JjX21vZGlmaWVyID0gc3RhdGUtPmZiLT5tb2RpZmllcjsKLQlyb3RfY21k LT5zcmNfc3RyaWRlID0gc3RhdGUtPmZiLT5waXRjaGVzWzBdOwotCi0Jcm90X2NtZC0+c3JjX2Zv cm1hdCA9IHRvX2RwdV9mb3JtYXQobXNtX2ZyYW1lYnVmZmVyX2Zvcm1hdChzdGF0ZS0+ZmIpKTsK LQlpZiAoIXJvdF9jbWQtPnNyY19mb3JtYXQpIHsKLQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gZ2V0 IHNyYyBmb3JtYXRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyb3RfY21kLT5zcmNf d2lkdGggPSBzdGF0ZS0+ZmItPndpZHRoOwotCXJvdF9jbWQtPnNyY19oZWlnaHQgPSBzdGF0ZS0+ ZmItPmhlaWdodDsKLQlyb3RfY21kLT5zcmNfcmVjdF94ID0gcnN0YXRlLT5pbl9yb3RfcmVjdC54 MSA+PiAxNjsKLQlyb3RfY21kLT5zcmNfcmVjdF95ID0gcnN0YXRlLT5pbl9yb3RfcmVjdC55MSA+ PiAxNjsKLQlyb3RfY21kLT5zcmNfcmVjdF93ID0gZHJtX3JlY3Rfd2lkdGgoJnJzdGF0ZS0+aW5f cm90X3JlY3QpID4+IDE2OwotCXJvdF9jbWQtPnNyY19yZWN0X2ggPSBkcm1fcmVjdF9oZWlnaHQo JnJzdGF0ZS0+aW5fcm90X3JlY3QpID4+IDE2OwotCXJvdF9jbWQtPmRzdF9yZWN0X3ggPSAwOwot CXJvdF9jbWQtPmRzdF9yZWN0X3kgPSAwOwotCXJvdF9jbWQtPmRzdF9yZWN0X3cgPSBkcm1fcmVj dF93aWR0aCgmcnN0YXRlLT5vdXRfcm90X3JlY3QpID4+IDE2OwotCXJvdF9jbWQtPmRzdF9yZWN0 X2ggPSBkcm1fcmVjdF9oZWlnaHQoJnJzdGF0ZS0+b3V0X3JvdF9yZWN0KSA+PiAxNjsKLQotCWlm IChod19jbWQgPT0gRFBVX0hXX1JPVF9DTURfQ09NTUlUKSB7Ci0JCXN0cnVjdCBkcHVfaHdfZm10 X2xheW91dCBsYXlvdXQ7Ci0KLQkJbWVtc2V0KCZsYXlvdXQsIDAsIHNpemVvZihzdHJ1Y3QgZHB1 X2h3X2ZtdF9sYXlvdXQpKTsKLQkJZHB1X2Zvcm1hdF9wb3B1bGF0ZV9sYXlvdXQocHN0YXRlLT5h c3BhY2UsIHN0YXRlLT5mYiwKLQkJCQkmbGF5b3V0KTsKLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZ X1NJWkUocm90X2NtZC0+c3JjX2lvdmEpOyBpKyspIHsKLQkJCXJvdF9jbWQtPnNyY19pb3ZhW2ld ID0gbGF5b3V0LnBsYW5lX2FkZHJbaV07Ci0JCQlyb3RfY21kLT5zcmNfbGVuW2ldID0gbGF5b3V0 LnBsYW5lX3NpemVbaV07Ci0JCX0KLQkJcm90X2NtZC0+c3JjX3BsYW5lcyA9IGxheW91dC5udW1f cGxhbmVzOwotCi0JCW1lbXNldCgmbGF5b3V0LCAwLCBzaXplb2Yoc3RydWN0IGRwdV9od19mbXRf bGF5b3V0KSk7Ci0JCWRwdV9mb3JtYXRfcG9wdWxhdGVfbGF5b3V0KHBzdGF0ZS0+YXNwYWNlLCBy c3RhdGUtPm91dF9mYiwKLQkJCQkmbGF5b3V0KTsKLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ WkUocm90X2NtZC0+ZHN0X2lvdmEpOyBpKyspIHsKLQkJCXJvdF9jbWQtPmRzdF9pb3ZhW2ldID0g bGF5b3V0LnBsYW5lX2FkZHJbaV07Ci0JCQlyb3RfY21kLT5kc3RfbGVuW2ldID0gbGF5b3V0LnBs YW5lX3NpemVbaV07Ci0JCX0KLQkJcm90X2NtZC0+ZHN0X3BsYW5lcyA9IGxheW91dC5udW1fcGxh bmVzOwotCi0JCS8qIFZCSUYgcmVtYXBwZXIgc2V0dGluZ3MgKi8KLQkJZm9yIChpID0gMDsgaSA8 IHJzdGF0ZS0+cm90X2h3LT5jYXBzLT54aW5fY291bnQ7IGkrKykgewotCQkJY29uc3Qgc3RydWN0 IGRwdV9yb3RfdmJpZl9jZmcgKmNmZyA9Ci0JCQkJCSZyc3RhdGUtPnJvdF9ody0+Y2Fwcy0+dmJp Zl9jZmdbaV07Ci0KLQkJCV9kcHVfcGxhbmVfaW5saW5lX3JvdF9zZXRfcW9zX3JlbWFwKHBsYW5l LCBjZmcpOwotCi0JCQlpZiAoY2ZnLT5pc19yZWFkKSB7Ci0JCQkJX2RwdV9wbGFuZV9pbmxpbmVf cm90X3NldF9vdF9saW1pdChwbGFuZSwKLQkJCQkJc3RhdGUtPmNydGMsIGNmZywgcm90X2NtZC0+ c3JjX3JlY3RfdywKLQkJCQkJcm90X2NtZC0+c3JjX3JlY3RfaCk7Ci0JCQl9IGVsc2UgewotCQkJ CV9kcHVfcGxhbmVfaW5saW5lX3JvdF9zZXRfb3RfbGltaXQocGxhbmUsCi0JCQkJCXN0YXRlLT5j cnRjLCBjZmcsIHJvdF9jbWQtPmRzdF9yZWN0X3csCi0JCQkJCXJvdF9jbWQtPmRzdF9yZWN0X2gp OwotCQkJfQotCQl9Ci0JfQotCi0JcmV0ID0gcnN0YXRlLT5yb3RfaHctPm9wcy5jb21taXQocnN0 YXRlLT5yb3RfaHcsIHJvdF9jbWQsIGh3X2NtZCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsK LQotCXJzdGF0ZS0+b3V0X3JvdGF0aW9uID0gcnN0YXRlLT5pbl9yb3RhdGlvbjsKLQlyc3RhdGUt Pm91dF9mYl9mbGFncyA9IHJvdF9jbWQtPmRzdF9tb2RpZmllciA/Ci0JCQlEUk1fTU9ERV9GQl9N T0RJRklFUlMgOiAwOwotCXJzdGF0ZS0+b3V0X2ZiX2Zvcm1hdCA9IHJvdF9jbWQtPmRzdF9mb3Jt YXQ7Ci0JcnN0YXRlLT5vdXRfZmJfcGl4ZWxfZm9ybWF0ID0gcm90X2NtZC0+ZHN0X3BpeGVsX2Zv cm1hdDsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJzdGF0ZS0+b3V0X2ZiX21vZGlm aWVyKTsgaSsrKQotCQlyc3RhdGUtPm91dF9mYl9tb2RpZmllcltpXSA9IHJvdF9jbWQtPmRzdF9t b2RpZmllcjsKLQotCXJzdGF0ZS0+b3V0X2ZiX3dpZHRoID0gZHJtX3JlY3Rfd2lkdGgoJnJzdGF0 ZS0+b3V0X3JvdF9yZWN0KSA+PiAxNjsKLQlyc3RhdGUtPm91dF9mYl9oZWlnaHQgPSBkcm1fcmVj dF9oZWlnaHQoJnJzdGF0ZS0+b3V0X3JvdF9yZWN0KSA+PiAxNjsKLQlyc3RhdGUtPm91dF9zcmNf eCA9IHJzdGF0ZS0+b3V0X3NyY19yZWN0LngxIC0gcnN0YXRlLT5vdXRfcm90X3JlY3QueDE7Ci0J cnN0YXRlLT5vdXRfc3JjX3kgPSByc3RhdGUtPm91dF9zcmNfcmVjdC55MSAtIHJzdGF0ZS0+b3V0 X3JvdF9yZWN0LnkxOwotCXJzdGF0ZS0+b3V0X3NyY193ID0gZHJtX3JlY3Rfd2lkdGgoJnJzdGF0 ZS0+b3V0X3NyY19yZWN0KTsKLQlyc3RhdGUtPm91dF9zcmNfaCA9IGRybV9yZWN0X2hlaWdodCgm cnN0YXRlLT5vdXRfc3JjX3JlY3QpOwotCi0JaWYgKHJvdF9jbWQtPnJvdDkwKQotCQlyc3RhdGUt Pm91dF9yb3RhdGlvbiAmPSB+RFJNX01PREVfUk9UQVRFXzkwOwotCi0JaWYgKHJvdF9jbWQtPmhm bGlwKQotCQlyc3RhdGUtPm91dF9yb3RhdGlvbiAmPSB+RFJNX01PREVfUkVGTEVDVF9YOwotCi0J aWYgKHJvdF9jbWQtPnZmbGlwKQotCQlyc3RhdGUtPm91dF9yb3RhdGlvbiAmPSB+RFJNX01PREVf UkVGTEVDVF9ZOwotCi0JRFBVX0RFQlVHKAotCQkicGxhbmUlZC4lZCByb3Q6JWQvJWMlYyVjJWMv JWR4JWQvJTQuNHMvJWxseC8lZHglZCslZCslZFxuIiwKLQkJCXBsYW5lLT5iYXNlLmlkLCByc3Rh dGUtPnNlcXVlbmNlX2lkLCBod19jbWQsCi0JCQlyb3RfY21kLT5yb3Q5MCA/ICdyJyA6ICdfJywK LQkJCXJvdF9jbWQtPmhmbGlwID8gJ2gnIDogJ18nLAotCQkJcm90X2NtZC0+dmZsaXAgPyAndicg OiAnXycsCi0JCQlyb3RfY21kLT52aWRlb19tb2RlID8gJ1YnIDogJ0MnLAotCQkJc3RhdGUtPmZi LT53aWR0aCwgc3RhdGUtPmZiLT5oZWlnaHQsCi0JCQkoY2hhciAqKSAmc3RhdGUtPmZiLT5mb3Jt YXQtPmZvcm1hdCwKLQkJCXN0YXRlLT5mYi0+bW9kaWZpZXIsCi0JCQlkcm1fcmVjdF93aWR0aCgm cnN0YXRlLT5pbl9yb3RfcmVjdCkgPj4gMTYsCi0JCQlkcm1fcmVjdF9oZWlnaHQoJnJzdGF0ZS0+ aW5fcm90X3JlY3QpID4+IDE2LAotCQkJcnN0YXRlLT5pbl9yb3RfcmVjdC54MSA+PiAxNiwKLQkJ CXJzdGF0ZS0+aW5fcm90X3JlY3QueTEgPj4gMTYpOwotCi0JRFBVX0RFQlVHKCJwbGFuZSVkLiVk IHNzcHA6JWQvJXgvJWR4JWQvJTQuNHMvJWxseC8lZHglZCslZCslZFxuIiwKLQkJCXBsYW5lLT5i YXNlLmlkLCByc3RhdGUtPnNlcXVlbmNlX2lkLCBod19jbWQsCi0JCQlyc3RhdGUtPm91dF9yb3Rh dGlvbiwKLQkJCXJzdGF0ZS0+b3V0X2ZiX3dpZHRoLCByc3RhdGUtPm91dF9mYl9oZWlnaHQsCi0J CQkoY2hhciAqKSAmcnN0YXRlLT5vdXRfZmJfcGl4ZWxfZm9ybWF0LAotCQkJcnN0YXRlLT5vdXRf ZmJfbW9kaWZpZXJbMF0sCi0JCQlyc3RhdGUtPm91dF9zcmNfdyA+PiAxNiwgcnN0YXRlLT5vdXRf c3JjX2ggPj4gMTYsCi0JCQlyc3RhdGUtPm91dF9zcmNfeCA+PiAxNiwgcnN0YXRlLT5vdXRfc3Jj X3kgPj4gMTYpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBfZHB1X3BsYW5lX3JvdF9n ZXRfZmIgLSBhdHRlbXB0IHRvIGdldCBwcmV2aW91c2x5IGFsbG9jYXRlZCBmYi9mYm8KLSAqCUlm IGFuIGZiL2ZibyB3YXMgYWxyZWFkeSBjcmVhdGVkLCBlaXRoZXIgZnJvbSBhIHByZXZpb3VzIGZy YW1lIG9yCi0gKglmcm9tIGFub3RoZXIgcGxhbmUgaW4gdGhlIGN1cnJlbnQgY29tbWl0IGN5Y2xl LCBhdHRlbXB0IHRvIHJldXNlCi0gKglpdCBmb3IgdGhpcyBjb21taXQgY3ljbGUgYXMgd2VsbC4K LSAqIEBwbGFuZTogUG9pbnRlciB0byBkcm0gcGxhbmUKLSAqIEBjc3RhdGU6IFBvaW50ZXIgdG8g Y3J0YyBzdGF0ZQotICogQHJzdGF0ZTogUG9pbnRlciB0byByb3RhdG9yIHBsYW5lIHN0YXRlCi0g Ki8KLXN0YXRpYyB2b2lkIF9kcHVfcGxhbmVfcm90X2dldF9mYihzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSwKLQkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjc3RhdGUsCi0JCXN0cnVjdCBkcHVfcGxh bmVfcm90X3N0YXRlICpyc3RhdGUpCi17Ci0Jc3RydWN0IGRwdV9rbXNfZmJvICpmYm87Ci0Jc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7Ci0KLQlpZiAoIXBsYW5lIHx8ICFjc3RhdGUgfHwgIXJz dGF0ZSB8fCAhcnN0YXRlLT5yb3RfaHcpCi0JCXJldHVybjsKLQotCWZibyA9IGRwdV9jcnRjX3Jl c19nZXQoY3N0YXRlLCBEUFVfQ1JUQ19SRVNfUk9UX09VVF9GQk8sCi0JCQkodTY0KSAmcnN0YXRl LT5yb3RfaHctPmJhc2UpOwotCWZiID0gZHB1X2NydGNfcmVzX2dldChjc3RhdGUsIERQVV9DUlRD X1JFU19ST1RfT1VUX0ZCLAotCQkJKHU2NCkgJnJzdGF0ZS0+cm90X2h3LT5iYXNlKTsKLQlpZiAo ZmIgJiYgZmJvKSB7Ci0JCURQVV9ERUJVRygicGxhbmUlZC4lZCBnZXQgZmIvZmJvXG4iLCBwbGFu ZS0+YmFzZS5pZCwKLQkJCQlyc3RhdGUtPnNlcXVlbmNlX2lkKTsKLQl9IGVsc2UgaWYgKGZibykg ewotCQlkcHVfY3J0Y19yZXNfcHV0KGNzdGF0ZSwgRFBVX0NSVENfUkVTX1JPVF9PVVRfRkJPLAot CQkJCSh1NjQpICZyc3RhdGUtPnJvdF9ody0+YmFzZSk7Ci0JCWZibyA9IE5VTEw7Ci0JfSBlbHNl IGlmIChmYikgewotCQlkcHVfY3J0Y19yZXNfcHV0KGNzdGF0ZSwgRFBVX0NSVENfUkVTX1JPVF9P VVRfRkIsCi0JCQkJKHU2NCkgJnJzdGF0ZS0+cm90X2h3LT5iYXNlKTsKLQkJZmIgPSBOVUxMOwot CX0KLQotCXJzdGF0ZS0+b3V0X2ZibyA9IGZibzsKLQlyc3RhdGUtPm91dF9mYiA9IGZiOwotfQot Ci0vKioKLSAqIGRwdV9wbGFuZV9yb3RfcHJlcGFyZV9mYiAtIHByZXBhcmUgZnJhbWVidWZmZXIg b2YgdGhlIG5ldyBzdGF0ZQotICoJZm9yIHJvdGF0b3IgKHByZS1zc3BwKSBzdGFnZQotICogQHBs YW5lOiBQb2ludGVyIHRvIGRybSBwbGFuZQotICogQG5ld19zdGF0ZTogUG9pbnRlciB0byBuZXcg ZHJtIHBsYW5lIHN0YXRlCi0gKiByZXR1cm46IDAgaWYgc3VjY2VzczsgZXJyb3IgY29kZSBvdGhl cndpc2UKLSAqLwotc3RhdGljIGludCBkcHVfcGxhbmVfcm90X3ByZXBhcmVfZmIoc3RydWN0IGRy bV9wbGFuZSAqcGxhbmUsCi0JCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm5ld19zdGF0ZSkKLXsK LQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IG5ld19zdGF0ZS0+ZmI7Ci0Jc3RydWN0IGRw dV9wbGFuZV9zdGF0ZSAqbmV3X3BzdGF0ZSA9IHRvX2RwdV9wbGFuZV9zdGF0ZShuZXdfc3RhdGUp OwotCXN0cnVjdCBkcHVfcGxhbmVfcm90X3N0YXRlICpuZXdfcnN0YXRlID0gJm5ld19wc3RhdGUt PnJvdDsKLQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNzdGF0ZTsKLQlpbnQgcmV0OwotCi0JRFBV X0RFQlVHKCJwbGFuZSVkLiVkIEZCWyV1XSBzYnVmOiVkIHJvdDolZCBjcnRjOiVkXG4iLAotCQkJ cGxhbmUtPmJhc2UuaWQsCi0JCQluZXdfcnN0YXRlLT5zZXF1ZW5jZV9pZCwgZmIgPyBmYi0+YmFz ZS5pZCA6IDAsCi0JCQkhIW5ld19yc3RhdGUtPm91dF9zYnVmLCAhIW5ld19yc3RhdGUtPnJvdF9o dywKLQkJCWRwdV9wbGFuZV9jcnRjX2VuYWJsZWQobmV3X3N0YXRlKSk7Ci0KLQlpZiAoIW5ld19y c3RhdGUtPm91dF9zYnVmIHx8ICFuZXdfcnN0YXRlLT5yb3RfaHcpCi0JCXJldHVybiAwOwotCi0J Y3N0YXRlID0gX2RwdV9wbGFuZV9nZXRfY3J0Y19zdGF0ZShuZXdfc3RhdGUpOwotCWlmIChJU19F UlIoY3N0YXRlKSkgewotCQlyZXQgPSBQVFJfRVJSKGNzdGF0ZSk7Ci0JCURQVV9FUlJPUigiaW52 YWxpZCBjcnRjIHN0YXRlICVkXG4iLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qIG5l ZWQgdG8gcmUtY2FsYyBiYXNlZCBvbiBhbGwgbmV3bHkgdmFsaWRhdGVkIHBsYW5lIHN0YXRlcyAq LwotCXJldCA9IGRwdV9wbGFuZV9yb3RfY2FsY19jZmcocGxhbmUsIG5ld19zdGF0ZSk7Ci0JaWYg KHJldCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIGNoZWNrIGlmIHN0cmVhbSBidWZmZXIgaXMgYWxy ZWFkeSBhdHRhY2hlZCB0byByb3RhdG9yICovCi0JaWYgKGRwdV9wbGFuZV9lbmFibGVkKG5ld19z dGF0ZSkgJiYgIW5ld19yc3RhdGUtPm91dF9mYikKLQkJX2RwdV9wbGFuZV9yb3RfZ2V0X2ZiKHBs YW5lLCBjc3RhdGUsIG5ld19yc3RhdGUpOwotCi0JLyogY3JlYXRlIG5ldyBzdHJlYW0gYnVmZmVy IGlmIGl0IGlzIG5vdCBhdmFpbGFibGUgKi8KLQlpZiAoZHB1X3BsYW5lX2VuYWJsZWQobmV3X3N0 YXRlKSAmJiAhbmV3X3JzdGF0ZS0+b3V0X2ZiKSB7Ci0JCXUzMiBmYl93ID0gZHJtX3JlY3Rfd2lk dGgoJm5ld19yc3RhdGUtPm91dF9yb3RfcmVjdCkgPj4gMTY7Ci0JCXUzMiBmYl9oID0gZHJtX3Jl Y3RfaGVpZ2h0KCZuZXdfcnN0YXRlLT5vdXRfcm90X3JlY3QpID4+IDE2OwotCi0JCURQVV9ERUJV RygicGxhbmUlZC4lZCBhbGxvY2F0ZSBmYi9mYm9cbiIsIHBsYW5lLT5iYXNlLmlkLAotCQkJCW5l d19yc3RhdGUtPnNlcXVlbmNlX2lkKTsKLQotCQkvKiBjaGVjayBpZiBvdXRfZmIgaXMgYWxyZWFk eSBhdHRhY2hlZCB0byByb3RhdG9yICovCi0JCW5ld19yc3RhdGUtPm91dF9mYm8gPSBkcHVfa21z X2Zib19hbGxvYyhwbGFuZS0+ZGV2LCBmYl93LCBmYl9oLAotCQkJCW5ld19yc3RhdGUtPm91dF9m Yl9waXhlbF9mb3JtYXQsCi0JCQkJbmV3X3JzdGF0ZS0+b3V0X2ZiX21vZGlmaWVyLAotCQkJCW5l d19yc3RhdGUtPm91dF9mYl9mbGFncyk7Ci0JCWlmICghbmV3X3JzdGF0ZS0+b3V0X2Zibykgewot CQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gYWxsb2NhdGUgaW5saW5lIGJ1ZmZlciBvYmplY3RcbiIp OwotCQkJcmV0ID0gLUVJTlZBTDsKLQkJCWdvdG8gZXJyb3JfY3JlYXRlX2ZibzsKLQkJfQotCi0J CXJldCA9IGRwdV9jcnRjX3Jlc19hZGQoY3N0YXRlLCBEUFVfQ1JUQ19SRVNfUk9UX09VVF9GQk8s Ci0JCQkJKHU2NCkgJm5ld19yc3RhdGUtPnJvdF9ody0+YmFzZSwKLQkJCQluZXdfcnN0YXRlLT5v dXRfZmJvLCAmZmJvX3Jlc19vcHMpOwotCQlpZiAocmV0KSB7Ci0JCQlEUFVfRVJST1IoImZhaWxl ZCB0byBhZGQgY3J0YyByZXNvdXJjZVxuIik7Ci0JCQlnb3RvIGVycm9yX2NyZWF0ZV9mYm9fcmVz OwotCQl9Ci0KLQkJbmV3X3JzdGF0ZS0+b3V0X2ZiID0gZHB1X2ttc19mYm9fY3JlYXRlX2ZiKHBs YW5lLT5kZXYsCi0JCQkJbmV3X3JzdGF0ZS0+b3V0X2Zibyk7Ci0JCWlmICghbmV3X3JzdGF0ZS0+ b3V0X2ZiKSB7Ci0JCQlEUFVfRVJST1IoImZhaWxlZCB0byBjcmVhdGUgaW5saW5lIGZyYW1lYnVm ZmVyXG4iKTsKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCQlnb3RvIGVycm9yX2NyZWF0ZV9mYjsKLQkJ fQotCQlEUFVfRVZUMzJfVkVSQk9TRShEUk1JRChwbGFuZSksIG5ld19yc3RhdGUtPnNlcXVlbmNl X2lkLAotCQkJCW5ld19yc3RhdGUtPm91dF9mYi0+YmFzZS5pZCk7Ci0KLQkJcmV0ID0gZHB1X2Ny dGNfcmVzX2FkZChjc3RhdGUsIERQVV9DUlRDX1JFU19ST1RfT1VUX0ZCLAotCQkJCSh1NjQpICZu ZXdfcnN0YXRlLT5yb3RfaHctPmJhc2UsCi0JCQkJbmV3X3JzdGF0ZS0+b3V0X2ZiLCAmZmJfcmVz X29wcyk7Ci0JCWlmIChyZXQpIHsKLQkJCURQVV9FUlJPUigiZmFpbGVkIHRvIGFkZCBjcnRjIHJl c291cmNlICVkXG4iLCByZXQpOwotCQkJZ290byBlcnJvcl9jcmVhdGVfZmJfcmVzOwotCQl9Ci0J fQotCi0JLyogcHJlcGFyZSByb3RhdG9yIGlucHV0IGJ1ZmZlciAqLwotCXJldCA9IG1zbV9mcmFt ZWJ1ZmZlcl9wcmVwYXJlKG5ld19zdGF0ZS0+ZmIsIG5ld19wc3RhdGUtPmFzcGFjZSk7Ci0JaWYg KHJldCkgewotCQlEUFVfRVJST1IoImZhaWxlZCB0byBwcmVwYXJlIGlucHV0IGZyYW1lYnVmZmVy LCAlZFxuIiwgcmV0KTsKLQkJZ290byBlcnJvcl9wcmVwYXJlX2lucHV0X2J1ZmZlcjsKLQl9Ci0K LQkvKiBwcmVwYXJlIHJvdGF0b3Igb3V0cHV0IGJ1ZmZlciAqLwotCWlmIChkcHVfcGxhbmVfZW5h YmxlZChuZXdfc3RhdGUpICYmIG5ld19yc3RhdGUtPm91dF9mYikgewotCQlEUFVfREVCVUcoInBs YW5lJWQuJWQgcHJlcGFyZSBmYi9mYm9cbiIsIHBsYW5lLT5iYXNlLmlkLAotCQkJCW5ld19yc3Rh dGUtPnNlcXVlbmNlX2lkKTsKLQotCQlyZXQgPSBtc21fZnJhbWVidWZmZXJfcHJlcGFyZShuZXdf cnN0YXRlLT5vdXRfZmIsCi0JCQkJbmV3X3BzdGF0ZS0+YXNwYWNlKTsKLQkJaWYgKHJldCkgewot CQkJRFBVX0VSUk9SKCJmYWlsZWQgdG8gcHJlcGFyZSBpbmxpbmUgZnJhbWVidWZmZXIsICVkXG4i LAotCQkJCQlyZXQpOwotCQkJZ290byBlcnJvcl9wcmVwYXJlX291dHB1dF9idWZmZXI7Ci0JCX0K LQl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyb3JfcHJlcGFyZV9vdXRwdXRfYnVmZmVyOgotCW1zbV9m cmFtZWJ1ZmZlcl9jbGVhbnVwKG5ld19zdGF0ZS0+ZmIsIG5ld19wc3RhdGUtPmFzcGFjZSk7Ci1l cnJvcl9wcmVwYXJlX2lucHV0X2J1ZmZlcjoKLQlkcHVfY3J0Y19yZXNfcHV0KGNzdGF0ZSwgRFBV X0NSVENfUkVTX1JPVF9PVVRfRkIsCi0JCQkodTY0KSAmbmV3X3JzdGF0ZS0+cm90X2h3LT5iYXNl KTsKLWVycm9yX2NyZWF0ZV9mYl9yZXM6Ci0JbmV3X3JzdGF0ZS0+b3V0X2ZiID0gTlVMTDsKLWVy cm9yX2NyZWF0ZV9mYjoKLQlkcHVfY3J0Y19yZXNfcHV0KGNzdGF0ZSwgRFBVX0NSVENfUkVTX1JP VF9PVVRfRkJPLAotCQkJKHU2NCkgJm5ld19yc3RhdGUtPnJvdF9ody0+YmFzZSk7Ci1lcnJvcl9j cmVhdGVfZmJvX3JlczoKLQluZXdfcnN0YXRlLT5vdXRfZmJvID0gTlVMTDsKLWVycm9yX2NyZWF0 ZV9mYm86Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBkcHVfcGxhbmVfcm90X2NsZWFudXBf ZmIgLSBjbGVhbnVwIGZyYW1lYnVmZmVyIG9mIHByZXZpb3VzIHN0YXRlIGZvciB0aGUKLSAqCXJv dGF0b3IgKHByZS1zc3BwKSBzdGFnZQotICogQHBsYW5lOiBQb2ludGVyIHRvIGRybSBwbGFuZQot ICogQG9sZF9zdGF0ZTogUG9pbnRlciB0byBwcmV2aW91cyBkcm0gcGxhbmUgc3RhdGUKLSAqIHJl dHVybjogbm9uZQotICovCi1zdGF0aWMgdm9pZCBkcHVfcGxhbmVfcm90X2NsZWFudXBfZmIoc3Ry dWN0IGRybV9wbGFuZSAqcGxhbmUsCi0JCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9zdGF0 ZSkKLXsKLQlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpvbGRfcHN0YXRlID0gdG9fZHB1X3BsYW5l X3N0YXRlKG9sZF9zdGF0ZSk7Ci0Jc3RydWN0IGRwdV9wbGFuZV9yb3Rfc3RhdGUgKm9sZF9yc3Rh dGUgPSAmb2xkX3BzdGF0ZS0+cm90OwotCXN0cnVjdCBkcHVfaHdfcm90X2NtZCAqY21kID0gJm9s ZF9yc3RhdGUtPnJvdF9jbWQ7Ci0Jc3RydWN0IGRybV9jcnRjX3N0YXRlICpjc3RhdGU7Ci0JaW50 IHJldDsKLQotCURQVV9ERUJVRygicGxhbmUlZC4lZCBGQlsldV0gc2J1ZjolZCByb3Q6JWQgY3J0 YzolZFxuIiwgcGxhbmUtPmJhc2UuaWQsCi0JCQlvbGRfcnN0YXRlLT5zZXF1ZW5jZV9pZCwgb2xk X3N0YXRlLT5mYi0+YmFzZS5pZCwKLQkJCSEhb2xkX3JzdGF0ZS0+b3V0X3NidWYsICEhb2xkX3Jz dGF0ZS0+cm90X2h3LAotCQkJZHB1X3BsYW5lX2NydGNfZW5hYmxlZChvbGRfc3RhdGUpKTsKLQot CWlmICghb2xkX3JzdGF0ZS0+b3V0X3NidWYgfHwgIW9sZF9yc3RhdGUtPnJvdF9odykKLQkJcmV0 dXJuOwotCi0JY3N0YXRlID0gX2RwdV9wbGFuZV9nZXRfY3J0Y19zdGF0ZShvbGRfc3RhdGUpOwot CWlmIChJU19FUlIoY3N0YXRlKSkgewotCQlyZXQgPSBQVFJfRVJSKGNzdGF0ZSk7Ci0JCURQVV9F UlJPUigiaW52YWxpZCBjcnRjIHN0YXRlICVkXG4iLCByZXQpOwotCQlyZXR1cm47Ci0JfQotCi0J aWYgKGRwdV9wbGFuZV9jcnRjX2VuYWJsZWQob2xkX3N0YXRlKSkgewotCQlyZXQgPSBvbGRfcnN0 YXRlLT5yb3RfaHctPm9wcy5jb21taXQob2xkX3JzdGF0ZS0+cm90X2h3LCBjbWQsCi0JCQkJRFBV X0hXX1JPVF9DTURfQ0xFQU5VUCk7Ci0JCWlmIChyZXQpCi0JCQlEUFVfRVJST1IoImZhaWxlZCB0 byBjbGVhbnVwIHJvdGF0b3IgYnVmZmVyc1xuIik7Ci0JfQotCi0JaWYgKGRwdV9wbGFuZV9lbmFi bGVkKG9sZF9zdGF0ZSkpIHsKLQkJaWYgKG9sZF9yc3RhdGUtPm91dF9mYikgewotCQkJbXNtX2Zy YW1lYnVmZmVyX2NsZWFudXAob2xkX3JzdGF0ZS0+b3V0X2ZiLAotCQkJCQlvbGRfcHN0YXRlLT5h c3BhY2UpOwotCQkJZHB1X2NydGNfcmVzX3B1dChjc3RhdGUsIERQVV9DUlRDX1JFU19ST1RfT1VU X0ZCLAotCQkJCQkodTY0KSAmb2xkX3JzdGF0ZS0+cm90X2h3LT5iYXNlKTsKLQkJCW9sZF9yc3Rh dGUtPm91dF9mYiA9IE5VTEw7Ci0JCQlkcHVfY3J0Y19yZXNfcHV0KGNzdGF0ZSwgRFBVX0NSVENf UkVTX1JPVF9PVVRfRkJPLAotCQkJCQkodTY0KSAmb2xkX3JzdGF0ZS0+cm90X2h3LT5iYXNlKTsK LQkJCW9sZF9yc3RhdGUtPm91dF9mYm8gPSBOVUxMOwotCQl9Ci0KLQkJbXNtX2ZyYW1lYnVmZmVy X2NsZWFudXAob2xkX3N0YXRlLT5mYiwgb2xkX3BzdGF0ZS0+YXNwYWNlKTsKLQl9Ci19Ci0KLS8q KgotICogZHB1X3BsYW5lX3JvdF9hdG9taWNfY2hlY2sgLSB2ZXJpZnkgcm90YXRvciB1cGRhdGUg b2YgdGhlIGdpdmVuIHN0YXRlCi0gKiBAcGxhbmU6IFBvaW50ZXIgdG8gZHJtIHBsYW5lCi0gKiBA c3RhdGU6IFBvaW50ZXIgdG8gZHJtIHBsYW5lIHN0YXRlIHRvIGJlIHZhbGlkYXRlZAotICogcmV0 dXJuOiAwIGlmIHN1Y2Nlc3M7IGVycm9yIGNvZGUgb3RoZXJ3aXNlCi0gKi8KLXN0YXRpYyBpbnQg ZHB1X3BsYW5lX3JvdF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCi0JCXN0 cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQotewotCXN0cnVjdCBkcHVfcGxhbmUgKnBkcHU7 Ci0Jc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRlLCAqb2xkX3BzdGF0ZTsKLQlzdHJ1Y3Qg ZHB1X3BsYW5lX3JvdF9zdGF0ZSAqcnN0YXRlLCAqb2xkX3JzdGF0ZTsKLQlzdHJ1Y3QgZHJtX2Ny dGNfc3RhdGUgKmNzdGF0ZTsKLQlzdHJ1Y3QgZHB1X2h3X2JsayAqaHdfYmxrOwotCWludCBpLCBy ZXQgPSAwOwotCi0JaWYgKCFwbGFuZSB8fCAhc3RhdGUpIHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlk IHBsYW5lL3N0YXRlXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcGRwdSA9IHRvX2Rw dV9wbGFuZShwbGFuZSk7Ci0JcHN0YXRlID0gdG9fZHB1X3BsYW5lX3N0YXRlKHN0YXRlKTsKLQlv bGRfcHN0YXRlID0gdG9fZHB1X3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7Ci0JcnN0YXRlID0g JnBzdGF0ZS0+cm90OwotCW9sZF9yc3RhdGUgPSAmb2xkX3BzdGF0ZS0+cm90OwotCi0JLyogY3N0 YXRlIHdpbGwgYmUgbnVsbCBpZiBjcnRjIGlzIGRpc2Nvbm5lY3RlZCBmcm9tIHBsYW5lICovCi0J Y3N0YXRlID0gX2RwdV9wbGFuZV9nZXRfY3J0Y19zdGF0ZShzdGF0ZSk7Ci0JaWYgKElTX0VSUihj c3RhdGUpKSB7Ci0JCXJldCA9IFBUUl9FUlIoY3N0YXRlKTsKLQkJRFBVX0VSUk9SKCJpbnZhbGlk IGNydGMgc3RhdGUgJWRcbiIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JRFBVX0RFQlVH KCJwbGFuZSVkLiVkIEZCWyV1XSBzYnVmOiVkIHJvdDolZCBjcnRjOiVkXG4iLCBwbGFuZS0+YmFz ZS5pZCwKLQkJCXJzdGF0ZS0+c2VxdWVuY2VfaWQsIHN0YXRlLT5mYiA/IHN0YXRlLT5mYi0+YmFz ZS5pZCA6IDAsCi0JCQkhIXJzdGF0ZS0+b3V0X3NidWYsICEhcnN0YXRlLT5yb3RfaHcsCi0JCQlk cHVfcGxhbmVfY3J0Y19lbmFibGVkKHN0YXRlKSk7Ci0KLQlyc3RhdGUtPmluX3JvdGF0aW9uID0g ZHJtX3JvdGF0aW9uX3NpbXBsaWZ5KAotCQkJZHB1X3BsYW5lX2dldF9wcm9wZXJ0eShwc3RhdGUs IFBMQU5FX1BST1BfUk9UQVRJT04pLAotCQkJRFJNX01PREVfUk9UQVRFXzAgfCBEUk1fTU9ERV9S T1RBVEVfOTAgfAotCQkJRFJNX01PREVfUkVGTEVDVF9YIHwgRFJNX01PREVfUkVGTEVDVF9ZKTsK LQlyc3RhdGUtPnJvdDkwID0gcnN0YXRlLT5pbl9yb3RhdGlvbiAmIERSTV9NT0RFX1JPVEFURV85 MCA/IHRydWUgOiBmYWxzZTsKLQlyc3RhdGUtPmhmbGlwID0gcnN0YXRlLT5pbl9yb3RhdGlvbiAm IERSTV9NT0RFX1JFRkxFQ1RfWCA/IHRydWUgOiBmYWxzZTsKLQlyc3RhdGUtPnZmbGlwID0gcnN0 YXRlLT5pbl9yb3RhdGlvbiAmIERSTV9NT0RFX1JFRkxFQ1RfWSA/IHRydWUgOiBmYWxzZTsKLQly c3RhdGUtPm91dF9zYnVmID0gcGRwdS0+c2J1Zl9tb2RlIHx8IHJzdGF0ZS0+cm90OTA7Ci0KLQlp ZiAoZHB1X3BsYW5lX2VuYWJsZWQoc3RhdGUpICYmIHJzdGF0ZS0+b3V0X3NidWYpIHsKLQkJRFBV X0RFQlVHKCJwbGFuZSVkLiVkIGFjcXVpcmUgcm90YXRvciwgZmIgJWRcbiIsCi0JCQkJcGxhbmUt PmJhc2UuaWQsIHJzdGF0ZS0+c2VxdWVuY2VfaWQsCi0JCQkJc3RhdGUtPmZiID8gc3RhdGUtPmZi LT5iYXNlLmlkIDogLTEpOwotCi0JCWh3X2JsayA9IGRwdV9jcnRjX3Jlc19nZXQoY3N0YXRlLCBE UFVfSFdfQkxLX1JPVCwKLQkJCQkodTY0KSBzdGF0ZS0+ZmIpOwotCQlpZiAoIWh3X2Jsaykgewot CQkJRFBVX0VSUk9SKCJwbGFuZSVkLiVkIG5vIGF2YWlsYWJsZSByb3RhdG9yLCBmYiAlZFxuIiwK LQkJCQkJcGxhbmUtPmJhc2UuaWQsIHJzdGF0ZS0+c2VxdWVuY2VfaWQsCi0JCQkJCXN0YXRlLT5m YiA/IHN0YXRlLT5mYi0+YmFzZS5pZCA6IC0xKTsKLQkJCURQVV9FVlQzMihEUk1JRChwbGFuZSks IHJzdGF0ZS0+c2VxdWVuY2VfaWQsCi0JCQkJCURQVV9FVlRMT0dfRVJST1IpOwotCQkJcmV0dXJu IC1FSU5WQUw7Ci0JCX0KLQotCQlyc3RhdGUtPnJvdF9odyA9IHRvX2RwdV9od19yb3QoaHdfYmxr KTsKLQotCQlpZiAoIXJzdGF0ZS0+cm90X2h3LT5vcHMuY29tbWl0KSB7Ci0JCQlEUFVfRVJST1Io InBsYW5lJWQuJWQgaW52YWxpZCByb3RhdG9yIG9wc1xuIiwKLQkJCQkJcGxhbmUtPmJhc2UuaWQs IHJzdGF0ZS0+c2VxdWVuY2VfaWQpOwotCQkJZHB1X2NydGNfcmVzX3B1dChjc3RhdGUsCi0JCQkJ CURQVV9IV19CTEtfUk9ULCAodTY0KSBzdGF0ZS0+ZmIpOwotCQkJcnN0YXRlLT5yb3RfaHcgPSBO VUxMOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlyc3RhdGUtPmluX2ZiID0gc3RhdGUt PmZiOwotCX0gZWxzZSB7Ci0JCXJzdGF0ZS0+aW5fZmIgPSBOVUxMOwotCQlyc3RhdGUtPnJvdF9o dyA9IE5VTEw7Ci0JfQotCi0JaWYgKGRwdV9wbGFuZV9lbmFibGVkKHN0YXRlKSAmJiByc3RhdGUt Pm91dF9zYnVmICYmIHJzdGF0ZS0+cm90X2h3KSB7Ci0JCXVpbnQzMl90IGZiX2lkOwotCi0JCWZi X2lkID0gc3RhdGUtPmZiID8gc3RhdGUtPmZiLT5iYXNlLmlkIDogLTE7Ci0JCURQVV9ERUJVRygi cGxhbmUlZC4lZCB1c2Ugcm90YXRvciwgZmIgJWRcbiIsCi0JCQkJcGxhbmUtPmJhc2UuaWQsIHJz dGF0ZS0+c2VxdWVuY2VfaWQsIGZiX2lkKTsKLQotCQlyZXQgPSBkcHVfcGxhbmVfcm90X2NhbGNf Y2ZnKHBsYW5lLCBzdGF0ZSk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCi0JCXJldCA9 IGRwdV9wbGFuZV9yb3Rfc3VibWl0X2NvbW1hbmQocGxhbmUsIHN0YXRlLAotCQkJCURQVV9IV19S T1RfQ01EX1ZBTElEQVRFKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0KLQkJaWYgKHJz dGF0ZS0+bnBsYW5lICE9IG9sZF9yc3RhdGUtPm5wbGFuZSB8fAotCQkJCXJzdGF0ZS0+b3V0X3hw b3MgIT0gb2xkX3JzdGF0ZS0+b3V0X3hwb3MpCi0JCQlwc3RhdGUtPmRpcnR5IHw9IERQVV9QTEFO RV9ESVJUWV9GT1JNQVQgfAotCQkJCURQVV9QTEFORV9ESVJUWV9SRUNUUzsKLQotCQkvKiBjaGVj ayBpZiBzdHJlYW0gYnVmZmVyIGlzIGFscmVhZHkgYXR0YWNoZWQgdG8gcm90YXRvciAqLwotCQlf ZHB1X3BsYW5lX3JvdF9nZXRfZmIocGxhbmUsIGNzdGF0ZSwgcnN0YXRlKTsKLQotCQkvKiByZWxl YXNlIGJ1ZmZlciBpZiBvdXRwdXQgZm9ybWF0IGNvbmZpZ3VyYXRpb24gY2hhbmdlcyAqLwotCQlp ZiAocnN0YXRlLT5vdXRfZmIgJiYKLQkJCSgocnN0YXRlLT5vdXRfZmJfaGVpZ2h0ICE9IHJzdGF0 ZS0+b3V0X2ZiLT5oZWlnaHQpIHx8Ci0JCQkocnN0YXRlLT5vdXRfZmJfd2lkdGggIT0gcnN0YXRl LT5vdXRfZmItPndpZHRoKSB8fAotCQkJKHJzdGF0ZS0+b3V0X2ZiX3BpeGVsX2Zvcm1hdCAhPQot CQkJCQlyc3RhdGUtPm91dF9mYi0+Zm9ybWF0LT5mb3JtYXQpIHx8Ci0JCQkocnN0YXRlLT5vdXRf ZmJfbW9kaWZpZXJbMF0gIT0KLQkJCQkJcnN0YXRlLT5vdXRfZmItPm1vZGlmaWVyKSB8fAotCQkJ KHJzdGF0ZS0+b3V0X2ZiX2ZsYWdzICE9IHJzdGF0ZS0+b3V0X2ZiLT5mbGFncykpKSB7Ci0KLQkJ CURQVV9ERUJVRygicGxhbmUlZC4lZCByZWxlYXNlIGZiL2Zib1xuIiwgcGxhbmUtPmJhc2UuaWQs Ci0JCQkJCXJzdGF0ZS0+c2VxdWVuY2VfaWQpOwotCQkJRFBVX0VWVDMyX1ZFUkJPU0UoRFJNSUQo cGxhbmUpLAotCQkJCQlyc3RhdGUtPnNlcXVlbmNlX2lkLCBmYl9pZCk7Ci0KLQkJCWRwdV9jcnRj X3Jlc19wdXQoY3N0YXRlLCBEUFVfQ1JUQ19SRVNfUk9UX09VVF9GQiwKLQkJCQkJKHU2NCkgJnJz dGF0ZS0+cm90X2h3LT5iYXNlKTsKLQkJCXJzdGF0ZS0+b3V0X2ZiID0gTlVMTDsKLQkJCWRwdV9j cnRjX3Jlc19wdXQoY3N0YXRlLCBEUFVfQ1JUQ19SRVNfUk9UX09VVF9GQk8sCi0JCQkJCSh1NjQp ICZyc3RhdGUtPnJvdF9ody0+YmFzZSk7Ci0JCQlyc3RhdGUtPm91dF9mYm8gPSBOVUxMOwotCQl9 Ci0JfSBlbHNlIHsKLQotCQlEUFVfREVCVUcoInBsYW5lJWQuJWQgYnlwYXNzIHJvdGF0b3JcbiIs IHBsYW5lLT5iYXNlLmlkLAotCQkJCXJzdGF0ZS0+c2VxdWVuY2VfaWQpOwotCi0JCS8qIGJ5cGFz cyByb3RhdG9yIC0gaW5pdGlhbGl6ZSBvdXRwdXQgc2V0dGluZyBhcyBpbnB1dCAqLwotCQlmb3Ig KGkgPSAwOyBpIDwgQVJSQVlfU0laRShyc3RhdGUtPm91dF9mYl9tb2RpZmllcik7IGkrKykKLQkJ CXJzdGF0ZS0+b3V0X2ZiX21vZGlmaWVyW2ldID0gc3RhdGUtPmZiID8KLQkJCQlzdGF0ZS0+ZmIt Pm1vZGlmaWVyIDogMHgwOwotCi0JCWlmIChzdGF0ZS0+ZmIpIHsKLQkJCXJzdGF0ZS0+b3V0X2Zi X3BpeGVsX2Zvcm1hdCA9IHN0YXRlLT5mYi0+Zm9ybWF0LT5mb3JtYXQ7Ci0JCQlyc3RhdGUtPm91 dF9mYl9mbGFncyA9IHN0YXRlLT5mYi0+ZmxhZ3M7Ci0JCQlyc3RhdGUtPm91dF9mYl93aWR0aCA9 IHN0YXRlLT5mYi0+d2lkdGg7Ci0JCQlyc3RhdGUtPm91dF9mYl9oZWlnaHQgPSBzdGF0ZS0+ZmIt PmhlaWdodDsKLQkJfSBlbHNlIHsKLQkJCXJzdGF0ZS0+b3V0X2ZiX3BpeGVsX2Zvcm1hdCA9IDB4 MDsKLQkJCXJzdGF0ZS0+b3V0X2ZiX2ZsYWdzID0gMHgwOwotCQkJcnN0YXRlLT5vdXRfZmJfd2lk dGggPSAwOwotCQkJcnN0YXRlLT5vdXRfZmJfaGVpZ2h0ID0gMDsKLQkJfQotCi0JCXJzdGF0ZS0+ b3V0X3JvdGF0aW9uID0gcnN0YXRlLT5pbl9yb3RhdGlvbjsKLQkJcnN0YXRlLT5vdXRfc3JjX3gg PSBzdGF0ZS0+c3JjX3g7Ci0JCXJzdGF0ZS0+b3V0X3NyY195ID0gc3RhdGUtPnNyY195OwotCQly c3RhdGUtPm91dF9zcmNfdyA9IHN0YXRlLT5zcmNfdzsKLQkJcnN0YXRlLT5vdXRfc3JjX2ggPSBz dGF0ZS0+c3JjX2g7Ci0KLQkJcnN0YXRlLT5vdXRfZmJfZm9ybWF0ID0gTlVMTDsKLQkJcnN0YXRl LT5vdXRfc2J1ZiA9IGZhbHNlOwotCQlyc3RhdGUtPm91dF9mYiA9IHN0YXRlLT5mYjsKLQl9Ci0K LQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGRwdV9wbGFuZV9yb3RfYXRvbWljX3VwZGF0ZSAt IHBlcmZvcm0gYXRvbWljIHVwZGF0ZSBmb3Igcm90YXRvciBzdGFnZQotICogQHBsYW5lOiBQb2lu dGVyIHRvIGRybSBwbGFuZQotICogQG9sZF9zdGF0ZTogUG9pbnRlciB0byBwcmV2aW91cyBzdGF0 ZQotICogcmV0dXJuOiBub25lCi0gKi8KLXN0YXRpYyB2b2lkIGRwdV9wbGFuZV9yb3RfYXRvbWlj X3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKLQkJCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0 YXRlICpvbGRfc3RhdGUpCi17Ci0Jc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGU7Ci0Jc3Ry dWN0IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRlOwotCXN0cnVjdCBkcHVfcGxhbmVfcm90X3N0YXRl ICpyc3RhdGU7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoIXBsYW5lIHx8ICFwbGFuZS0+c3RhdGUp IHsKLQkJRFBVX0VSUk9SKCJpbnZhbGlkIHBsYW5lL3N0YXRlXG4iKTsKLQkJcmV0dXJuOwotCX0K LQotCXN0YXRlID0gcGxhbmUtPnN0YXRlOwotCXBzdGF0ZSA9IHRvX2RwdV9wbGFuZV9zdGF0ZShz dGF0ZSk7Ci0JcnN0YXRlID0gJnBzdGF0ZS0+cm90OwotCi0JRFBVX0RFQlVHKCJwbGFuZSVkLiVk IHNidWY6JWQgcm90OiVkIGNydGM6JWRcbiIsIHBsYW5lLT5iYXNlLmlkLAotCQkJcnN0YXRlLT5z ZXF1ZW5jZV9pZCwKLQkJCSEhcnN0YXRlLT5vdXRfc2J1ZiwgISFyc3RhdGUtPnJvdF9odywKLQkJ CWRwdV9wbGFuZV9jcnRjX2VuYWJsZWQocGxhbmUtPnN0YXRlKSk7Ci0KLQlpZiAoIWRwdV9wbGFu ZV9jcnRjX2VuYWJsZWQoc3RhdGUpKQotCQlyZXR1cm47Ci0KLQlpZiAoIXJzdGF0ZS0+b3V0X3Ni dWYgfHwgIXJzdGF0ZS0+cm90X2h3KQotCQlyZXR1cm47Ci0KLQlkcHVfcGxhbmVfcm90X3N1Ym1p dF9jb21tYW5kKHBsYW5lLCBzdGF0ZSwgRFBVX0hXX1JPVF9DTURfQ09NTUlUKTsKLQotCXJldHVy bjsKLQotZXJyb3JfcHJlcGFyZV9vdXRwdXRfYnVmZmVyOgotCW1zbV9mcmFtZWJ1ZmZlcl9jbGVh bnVwKHN0YXRlLT5mYiwgcHN0YXRlLT5hc3BhY2UpOwotfQotCi12b2lkIGRwdV9wbGFuZV9raWNr b2ZmKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQotewotCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUg KnBzdGF0ZTsKLQotCWlmICghcGxhbmUgfHwgIXBsYW5lLT5zdGF0ZSkgewotCQlEUFVfRVJST1Io ImludmFsaWQgcGxhbmVcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JcHN0YXRlID0gdG9fZHB1X3Bs YW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7Ci0KLQlpZiAoIXBzdGF0ZS0+cm90LnJvdF9odyB8fCAh cHN0YXRlLT5yb3Qucm90X2h3LT5vcHMuY29tbWl0KQotCQlyZXR1cm47Ci0KLQlwc3RhdGUtPnJv dC5yb3RfaHctPm9wcy5jb21taXQocHN0YXRlLT5yb3Qucm90X2h3LAotCQkJJnBzdGF0ZS0+cm90 LnJvdF9jbWQsCi0JCQlEUFVfSFdfUk9UX0NNRF9TVEFSVCk7Ci19Ci0KLS8qKgotICogZHB1X3Bs YW5lX3JvdF9kZXN0cm95X3N0YXRlIC0gZGVzdHJveSBzdGF0ZSBmb3Igcm90YXRvciBzdGFnZQot ICogQHBsYW5lOiBQb2ludGVyIHRvIGRybSBwbGFuZQotICogQHN0YXRlOiBQb2ludGVyIHRvIHN0 YXRlIHRvIGJlIGRlc3Ryb3llZAotICogcmV0dXJuOiBub25lCi0gKi8KLXN0YXRpYyB2b2lkIGRw dV9wbGFuZV9yb3RfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKLQkJc3Ry dWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCi17Ci0Jc3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAq cHN0YXRlID0gdG9fZHB1X3BsYW5lX3N0YXRlKHN0YXRlKTsKLQlzdHJ1Y3QgZHB1X3BsYW5lX3Jv dF9zdGF0ZSAqcnN0YXRlID0gJnBzdGF0ZS0+cm90OwotCi0JRFBVX0RFQlVHKCJwbGFuZSVkLiVk IHNidWY6JWQgcm90OiVkIGNydGM6JWRcbiIsIHBsYW5lLT5iYXNlLmlkLAotCQkJcnN0YXRlLT5z ZXF1ZW5jZV9pZCwKLQkJCSEhcnN0YXRlLT5vdXRfc2J1ZiwgISFyc3RhdGUtPnJvdF9odywKLQkJ CWRwdV9wbGFuZV9jcnRjX2VuYWJsZWQoc3RhdGUpKTsKLX0KLQotLyoqCi0gKiBkcHVfcGxhbmVf cm90X2R1cGxpY2F0ZV9zdGF0ZSAtIGR1cGxpY2F0ZSBzdGF0ZSBmb3Igcm90YXRvciBzdGFnZQot ICogQHBsYW5lOiBQb2ludGVyIHRvIGRybSBwbGFuZQotICogQG5ld19zdGF0ZTogUG9pbnRlciB0 byBkdXBsaWNhdGVkIHN0YXRlCi0gKiByZXR1cm46IDAgaWYgc3VjY2VzczsgZXJyb3IgY29kZSBv dGhlcndpc2UKLSAqLwotc3RhdGljIGludCBkcHVfcGxhbmVfcm90X2R1cGxpY2F0ZV9zdGF0ZShz dHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKLQkJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqbmV3X3N0 YXRlKQotewotCXN0cnVjdCBkcHVfcGxhbmVfc3RhdGUgKnBzdGF0ZSAgPSB0b19kcHVfcGxhbmVf c3RhdGUobmV3X3N0YXRlKTsKLQlzdHJ1Y3QgZHB1X3BsYW5lX3JvdF9zdGF0ZSAqcnN0YXRlID0g JnBzdGF0ZS0+cm90OwotCi0JcnN0YXRlLT5zZXF1ZW5jZV9pZCsrOwotCi0JRFBVX0RFQlVHKCJw bGFuZSVkLiVkIHNidWY6JWQgcm90OiVkXG4iLCBwbGFuZS0+YmFzZS5pZCwKLQkJCXJzdGF0ZS0+ c2VxdWVuY2VfaWQsCi0JCQkhIXJzdGF0ZS0+b3V0X3NidWYsICEhcnN0YXRlLT5yb3RfaHcpOwot Ci0JcnN0YXRlLT5yb3RfaHcgPSBOVUxMOwotCXJzdGF0ZS0+b3V0X2ZiID0gTlVMTDsKLQlyc3Rh dGUtPm91dF9mYm8gPSBOVUxMOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogZHB1X3BsYW5l X3JvdF9pbnN0YWxsX2NhcHMgLSBpbnN0YWxsIHBsYW5lIHJvdGF0b3IgY2FwYWJpbGl0aWVzCi0g KiBAcGxhbmU6IFBvaW50ZXIgdG8gZHJtIHBsYW5lCi0gKiByZXR1cm46IG5vbmUKLSAqLwotc3Rh dGljIHZvaWQgZHB1X3BsYW5lX3JvdF9pbnN0YWxsX2NhcHMoc3RydWN0IGRybV9wbGFuZSAqcGxh bmUpCi17Ci0Jc3RydWN0IGRwdV9wbGFuZSAqcGRwdSA9IHRvX2RwdV9wbGFuZShwbGFuZSk7Ci0J Y29uc3Qgc3RydWN0IGRwdV9mb3JtYXRfZXh0ZW5kZWQgKmZvcm1hdF9saXN0OwotCXN0cnVjdCBk cHVfa21zX2luZm8gKmluZm87Ci0Jc3RydWN0IGRwdV9od19yb3QgKnJvdF9odzsKLQljb25zdCBj aGFyICpkb3duc2NhbGVfY2FwczsKLQotCWlmICghcGRwdS0+Y2F0YWxvZyB8fCAhKHBkcHUtPmZl YXR1cmVzICYgQklUKERQVV9TU1BQX1NCVUYpKSB8fAotCQkJIXBkcHUtPmNhdGFsb2ctPnJvdF9j b3VudCkKLQkJcmV0dXJuOwotCi0JaWYgKHBkcHUtPmJsb2Jfcm90X2NhcHMpCi0JCXJldHVybjsK LQotCWluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHB1X2ttc19pbmZvKSwgR0ZQX0tFUk5F TCk7Ci0JaWYgKCFpbmZvKQotCQlyZXR1cm47Ci0KLQlyb3RfaHcgPSBkcHVfaHdfcm90X2dldChO VUxMKTsKLQlpZiAoIXJvdF9odyB8fCAhcm90X2h3LT5vcHMuZ2V0X2Zvcm1hdF9jYXBzIHx8Ci0J CQkhcm90X2h3LT5vcHMuZ2V0X2Rvd25zY2FsZV9jYXBzKSB7Ci0JCURQVV9FUlJPUigiaW52YWxp ZCByb3RhdG9yIGh3XG4iKTsKLQkJZ290byBlcnJvcl9yb3Q7Ci0JfQotCi0JZHB1X2ttc19pbmZv X3Jlc2V0KGluZm8pOwotCi0JZm9ybWF0X2xpc3QgPSByb3RfaHctPm9wcy5nZXRfZm9ybWF0X2Nh cHMocm90X2h3KTsKLQlpZiAoZm9ybWF0X2xpc3QpIHsKLQkJZHB1X2ttc19pbmZvX3N0YXJ0KGlu Zm8sICJwaXhlbF9mb3JtYXRzIik7Ci0JCXdoaWxlIChmb3JtYXRfbGlzdC0+Zm91cmNjX2Zvcm1h dCkgewotCQkJZHB1X2ttc19pbmZvX2FwcGVuZF9mb3JtYXQoaW5mbywKLQkJCQkJZm9ybWF0X2xp c3QtPmZvdXJjY19mb3JtYXQsCi0JCQkJCWZvcm1hdF9saXN0LT5tb2RpZmllcik7Ci0JCQkrK2Zv cm1hdF9saXN0OwotCQl9Ci0JCWRwdV9rbXNfaW5mb19zdG9wKGluZm8pOwotCX0KLQotCWRvd25z Y2FsZV9jYXBzID0gcm90X2h3LT5vcHMuZ2V0X2Rvd25zY2FsZV9jYXBzKHJvdF9odyk7Ci0JaWYg KGRvd25zY2FsZV9jYXBzKSB7Ci0JCWRwdV9rbXNfaW5mb19zdGFydChpbmZvLCAiZG93bnNjYWxl X3JhdGlvcyIpOwotCQlkcHVfa21zX2luZm9fYXBwZW5kKGluZm8sIGRvd25zY2FsZV9jYXBzKTsK LQkJZHB1X2ttc19pbmZvX3N0b3AoaW5mbyk7Ci0JfQotCi0JaWYgKHJvdF9ody0+b3BzLmdldF9j YWNoZV9zaXplKQotCQlkcHVfa21zX2luZm9fYWRkX2tleWludChpbmZvLCAiY2FjaGVfc2l6ZSIs Ci0JCQkJcm90X2h3LT5vcHMuZ2V0X2NhY2hlX3NpemUocm90X2h3KSk7Ci0KLQlpZiAocm90X2h3 LT5vcHMuZ2V0X21heGxpbmV3aWR0aCkKLQkJZHB1X2ttc19pbmZvX2FkZF9rZXlpbnQoaW5mbywg Im1heF9saW5ld2lkdGgiLAotCQkJCXJvdF9ody0+b3BzLmdldF9tYXhsaW5ld2lkdGgocm90X2h3 KSk7Ci0KLQltc21fcHJvcGVydHlfc2V0X2Jsb2IoJnBkcHUtPnByb3BlcnR5X2luZm8sICZwZHB1 LT5ibG9iX3JvdF9jYXBzLAotCQkJaW5mby0+ZGF0YSwgRFBVX0tNU19JTkZPX0RBVEFMRU4oaW5m byksCi0JCQlQTEFORV9QUk9QX1JPVF9DQVBTX1YxKTsKLQotCWRwdV9od19yb3RfcHV0KHJvdF9o dyk7Ci1lcnJvcl9yb3Q6Ci0Ja2ZyZWUoaW5mbyk7Ci19Ci0KLS8qKgotICogZHB1X3BsYW5lX3Jv dF9pbnN0YWxsX3Byb3BlcnRpZXMgLSBpbnN0YWxsIHBsYW5lIHJvdGF0b3IgcHJvcGVydGllcwot ICogQHBsYW5lOiBQb2ludGVyIHRvIGRybSBwbGFuZQotICogQGNhdGFsb2c6IFBvaW50ZXIgdG8g bWRzcyBjb25maWd1cmF0aW9uCi0gKiByZXR1cm46IG5vbmUKLSAqLwotc3RhdGljIHZvaWQgZHB1 X3BsYW5lX3JvdF9pbnN0YWxsX3Byb3BlcnRpZXMoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCi0J c3RydWN0IGRwdV9tZHNzX2NmZyAqY2F0YWxvZykKLXsKLQlzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1 ID0gdG9fZHB1X3BsYW5lKHBsYW5lKTsKLQl1bnNpZ25lZCBsb25nIHN1cHBvcnRlZF9yb3RhdGlv bnMgPSBEUk1fTU9ERV9ST1RBVEVfMCB8Ci0JCQlEUk1fTU9ERV9SRUZMRUNUX1ggfCBEUk1fTU9E RV9SRUZMRUNUX1k7Ci0KLQlpZiAoIXBsYW5lIHx8ICFwZHB1KSB7Ci0JCURQVV9FUlJPUigiaW52 YWxpZCBwbGFuZVxuIik7Ci0JCXJldHVybjsKLQl9IGVsc2UgaWYgKCFjYXRhbG9nKSB7Ci0JCURQ VV9FUlJPUigiaW52YWxpZCBjYXRhbG9nXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmICgocGRw dS0+ZmVhdHVyZXMgJiBCSVQoRFBVX1NTUFBfU0JVRikpICYmIGNhdGFsb2ctPnJvdF9jb3VudCkK LQkJc3VwcG9ydGVkX3JvdGF0aW9ucyB8PSBEUk1fTU9ERV9ST1RBVEVfMCB8IERSTV9NT0RFX1JP VEFURV85MCB8Ci0JCQkJRFJNX01PREVfUk9UQVRFXzE4MCB8IERSTV9NT0RFX1JPVEFURV8yNzA7 Ci0KLQltc21fcHJvcGVydHlfaW5zdGFsbF9yb3RhdGlvbigmcGRwdS0+cHJvcGVydHlfaW5mbywg cGxhbmUsCi0JCQlEUk1fTU9ERV9ST1RBVEVfMCwgc3VwcG9ydGVkX3JvdGF0aW9ucywKLQkJCVBM QU5FX1BST1BfUk9UQVRJT04pOwotCi0JaWYgKCEocGRwdS0+ZmVhdHVyZXMgJiBCSVQoRFBVX1NT UFBfU0JVRikpIHx8ICFjYXRhbG9nLT5yb3RfY291bnQpCi0JCXJldHVybjsKLQotCW1zbV9wcm9w ZXJ0eV9pbnN0YWxsX3JhbmdlKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLCAicm90X2RzdF94IiwKLQkJ CTAsIDAsIFU2NF9NQVgsIDAsIFBMQU5FX1BST1BfUk9UX0RTVF9YKTsKLQltc21fcHJvcGVydHlf aW5zdGFsbF9yYW5nZSgmcGRwdS0+cHJvcGVydHlfaW5mbywgInJvdF9kc3RfeSIsCi0JCQkwLCAw LCBVNjRfTUFYLCAwLCBQTEFORV9QUk9QX1JPVF9EU1RfWSk7Ci0JbXNtX3Byb3BlcnR5X2luc3Rh bGxfcmFuZ2UoJnBkcHUtPnByb3BlcnR5X2luZm8sICJyb3RfZHN0X3ciLAotCQkJMCwgMCwgVTY0 X01BWCwgMCwgUExBTkVfUFJPUF9ST1RfRFNUX1cpOwotCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3Jh bmdlKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLCAicm90X2RzdF9oIiwKLQkJCTAsIDAsIFU2NF9NQVgs IDAsIFBMQU5FX1BST1BfUk9UX0RTVF9IKTsKLQltc21fcHJvcGVydHlfaW5zdGFsbF9ibG9iKCZw ZHB1LT5wcm9wZXJ0eV9pbmZvLCAicm90X2NhcHNfdjEiLAotCQlEUk1fTU9ERV9QUk9QX0lNTVVU QUJMRSwgUExBTkVfUFJPUF9ST1RfQ0FQU19WMSk7Ci19Ci0KIHZvaWQgZHB1X3BsYW5lX2NsZWFy X211bHRpcmVjdChjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpkcm1fc3RhdGUpCiB7CiAJ c3RydWN0IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRlOwpAQCAtMjY4NCwxMyArMTQ1NCwxMSBAQCBp bnQgZHB1X3BsYW5lX3ZhbGlkYXRlX211bHRpcmVjdF92MihzdHJ1Y3QgZHB1X211bHRpcmVjdF9w bGFuZV9zdGF0ZXMgKnBsYW5lKQogICogQHBsYW5lOiBQb2ludGVyIHRvIGRybSBwbGFuZSBzdHJ1 Y3R1cmUKICAqIEBjdGw6IFBvaW50ZXIgdG8gaGFyZHdhcmUgY29udHJvbCBkcml2ZXIKICAqIEBm bHVzaF9zc3BwOiBQb2ludGVyIHRvIHNzcHAgZmx1c2ggY29udHJvbCB3b3JkCi0gKiBAZmx1c2hf cm90OiBQb2ludGVyIHRvIHJvdGF0b3IgZmx1c2ggY29udHJvbCB3b3JkCiAgKi8KIHZvaWQgZHB1 X3BsYW5lX2dldF9jdGxfZmx1c2goc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsIHN0cnVjdCBkcHVf aHdfY3RsICpjdGwsCi0JCXUzMiAqZmx1c2hfc3NwcCwgdTMyICpmbHVzaF9yb3QpCisJCXUzMiAq Zmx1c2hfc3NwcCkKIHsKIAlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpwc3RhdGU7Ci0Jc3RydWN0 IGRwdV9wbGFuZV9yb3Rfc3RhdGUgKnJzdGF0ZTsKIAogCWlmICghcGxhbmUgfHwgIWZsdXNoX3Nz cHApIHsKIAkJRFBVX0VSUk9SKCJpbnZhbGlkIHBhcmFtZXRlcnNcbiIpOwpAQCAtMjY5OCwxNyAr MTQ2Niw4IEBAIHZvaWQgZHB1X3BsYW5lX2dldF9jdGxfZmx1c2goc3RydWN0IGRybV9wbGFuZSAq cGxhbmUsIHN0cnVjdCBkcHVfaHdfY3RsICpjdGwsCiAJfQogCiAJcHN0YXRlID0gdG9fZHB1X3Bs YW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7Ci0JcnN0YXRlID0gJnBzdGF0ZS0+cm90OwogCiAJKmZs dXNoX3NzcHAgPSBjdGwtPm9wcy5nZXRfYml0bWFza19zc3BwKGN0bCwgZHB1X3BsYW5lX3BpcGUo cGxhbmUpKTsKLQotCWlmICghZmx1c2hfcm90KQotCQlyZXR1cm47Ci0KLQkqZmx1c2hfcm90ID0g MHgwOwotCWlmIChyc3RhdGUgJiYgcnN0YXRlLT5vdXRfc2J1ZiAmJiByc3RhdGUtPnJvdF9odyAm JgotCQkJY3RsLT5vcHMuZ2V0X2JpdG1hc2tfcm90KQotCQljdGwtPm9wcy5nZXRfYml0bWFza19y b3QoY3RsLCBmbHVzaF9yb3QsIHJzdGF0ZS0+cm90X2h3LT5pZHgpOwogfQogCiBzdGF0aWMgaW50 IGRwdV9wbGFuZV9wcmVwYXJlX2ZiKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLApAQCAtMjcxNyw3 ICsxNDc2LDYgQEAgc3RhdGljIGludCBkcHVfcGxhbmVfcHJlcGFyZV9mYihzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSwKIAlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IG5ld19zdGF0ZS0+ZmI7 CiAJc3RydWN0IGRwdV9wbGFuZSAqcGRwdSA9IHRvX2RwdV9wbGFuZShwbGFuZSk7CiAJc3RydWN0 IGRwdV9wbGFuZV9zdGF0ZSAqcHN0YXRlID0gdG9fZHB1X3BsYW5lX3N0YXRlKG5ld19zdGF0ZSk7 Ci0Jc3RydWN0IGRwdV9wbGFuZV9yb3Rfc3RhdGUgKm5ld19yc3RhdGU7CiAJc3RydWN0IGRwdV9o d19mbXRfbGF5b3V0IGxheW91dDsKIAlzdHJ1Y3QgbXNtX2dlbV9hZGRyZXNzX3NwYWNlICphc3Bh Y2U7CiAJaW50IHJldDsKQEAgLTI3MzYsMTYgKzE0OTQsOCBAQCBzdGF0aWMgaW50IGRwdV9wbGFu ZV9wcmVwYXJlX2ZiKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCS8qIGNhY2hlIGFzcGFjZSAq LwogCXBzdGF0ZS0+YXNwYWNlID0gYXNwYWNlOwogCi0JcmV0ID0gZHB1X3BsYW5lX3JvdF9wcmVw YXJlX2ZiKHBsYW5lLCBuZXdfc3RhdGUpOwotCWlmIChyZXQpIHsKLQkJRFBVX0VSUk9SKCJmYWls ZWQgdG8gcHJlcGFyZSByb3QgZnJhbWVidWZmZXJcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQot CW5ld19yc3RhdGUgPSAmdG9fZHB1X3BsYW5lX3N0YXRlKG5ld19zdGF0ZSktPnJvdDsKLQogCWlm IChwc3RhdGUtPmFzcGFjZSkgewotCQlyZXQgPSBtc21fZnJhbWVidWZmZXJfcHJlcGFyZShuZXdf cnN0YXRlLT5vdXRfZmIsCisJCXJldCA9IG1zbV9mcmFtZWJ1ZmZlcl9wcmVwYXJlKG5ld19zdGF0 ZS0+ZmIsCiAJCQkJcHN0YXRlLT5hc3BhY2UpOwogCQlpZiAocmV0KSB7CiAJCQlEUFVfRVJST1Io ImZhaWxlZCB0byBwcmVwYXJlIGZyYW1lYnVmZmVyXG4iKTsKQEAgLTI3NTUsNyArMTUwNSw3IEBA IHN0YXRpYyBpbnQgZHB1X3BsYW5lX3ByZXBhcmVfZmIoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUs CiAKIAkvKiB2YWxpZGF0ZSBmcmFtZWJ1ZmZlciBsYXlvdXQgYmVmb3JlIGNvbW1pdCAqLwogCXJl dCA9IGRwdV9mb3JtYXRfcG9wdWxhdGVfbGF5b3V0KHBzdGF0ZS0+YXNwYWNlLAotCQkJbmV3X3Jz dGF0ZS0+b3V0X2ZiLCAmbGF5b3V0KTsKKwkJCW5ld19zdGF0ZS0+ZmIsICZsYXlvdXQpOwogCWlm IChyZXQpIHsKIAkJRFBVX0VSUk9SX1BMQU5FKHBkcHUsICJmYWlsZWQgdG8gZ2V0IGZvcm1hdCBs YXlvdXQsICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwpAQCAtMjc2OSw3ICsxNTE5LDYgQEAg c3RhdGljIHZvaWQgZHB1X3BsYW5lX2NsZWFudXBfZmIoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUs CiB7CiAJc3RydWN0IGRwdV9wbGFuZSAqcGRwdSA9IHRvX2RwdV9wbGFuZShwbGFuZSk7CiAJc3Ry dWN0IGRwdV9wbGFuZV9zdGF0ZSAqb2xkX3BzdGF0ZTsKLQlzdHJ1Y3QgZHB1X3BsYW5lX3JvdF9z dGF0ZSAqb2xkX3JzdGF0ZTsKIAogCWlmICghb2xkX3N0YXRlIHx8ICFvbGRfc3RhdGUtPmZiKQog CQlyZXR1cm47CkBAIC0yNzc4LDExICsxNTI3LDcgQEAgc3RhdGljIHZvaWQgZHB1X3BsYW5lX2Ns ZWFudXBfZmIoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAKIAlEUFVfREVCVUdfUExBTkUocGRw dSwgIkZCWyV1XVxuIiwgb2xkX3N0YXRlLT5mYi0+YmFzZS5pZCk7CiAKLQlvbGRfcnN0YXRlID0g Jm9sZF9wc3RhdGUtPnJvdDsKLQotCW1zbV9mcmFtZWJ1ZmZlcl9jbGVhbnVwKG9sZF9yc3RhdGUt Pm91dF9mYiwgb2xkX3BzdGF0ZS0+YXNwYWNlKTsKLQotCWRwdV9wbGFuZV9yb3RfY2xlYW51cF9m YihwbGFuZSwgb2xkX3N0YXRlKTsKKwltc21fZnJhbWVidWZmZXJfY2xlYW51cChvbGRfc3RhdGUt PmZiLCBvbGRfcHN0YXRlLT5hc3BhY2UpOwogfQogCiBzdGF0aWMgdm9pZCBfZHB1X3BsYW5lX3Nz cHBfYXRvbWljX2NoZWNrX21vZGVfY2hhbmdlZChzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1LApAQCAt Mjc5MSw4ICsxNTM2LDYgQEAgc3RhdGljIHZvaWQgX2RwdV9wbGFuZV9zc3BwX2F0b21pY19jaGVj a19tb2RlX2NoYW5nZWQoc3RydWN0IGRwdV9wbGFuZSAqcGRwdSwKIHsKIAlzdHJ1Y3QgZHB1X3Bs YW5lX3N0YXRlICpwc3RhdGUgPSB0b19kcHVfcGxhbmVfc3RhdGUoc3RhdGUpOwogCXN0cnVjdCBk cHVfcGxhbmVfc3RhdGUgKm9sZF9wc3RhdGUgPSB0b19kcHVfcGxhbmVfc3RhdGUob2xkX3N0YXRl KTsKLQlzdHJ1Y3QgZHB1X3BsYW5lX3JvdF9zdGF0ZSAqcnN0YXRlID0gJnBzdGF0ZS0+cm90Owot CXN0cnVjdCBkcHVfcGxhbmVfcm90X3N0YXRlICpvbGRfcnN0YXRlID0gJm9sZF9wc3RhdGUtPnJv dDsKIAlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgKm9sZF9mYjsKIAogCS8qIG5vIG5lZWQg dG8gY2hlY2sgaXQgYWdhaW4gKi8KQEAgLTI4MTEsMTIgKzE1NTQsNiBAQCBzdGF0aWMgdm9pZCBf ZHB1X3BsYW5lX3NzcHBfYXRvbWljX2NoZWNrX21vZGVfY2hhbmdlZChzdHJ1Y3QgZHB1X3BsYW5l ICpwZHB1LAogCQkJcHN0YXRlLT5tdWx0aXJlY3RfbW9kZSAhPSBvbGRfcHN0YXRlLT5tdWx0aXJl Y3RfbW9kZSkgewogCQlEUFVfREVCVUdfUExBTkUocGRwdSwgIm11bHRpcmVjdCBjb25maWcgdXBk YXRlZFxuIik7CiAJCXBzdGF0ZS0+ZGlydHkgfD0gRFBVX1BMQU5FX0RJUlRZX0FMTDsKLQl9IGVs c2UgaWYgKHJzdGF0ZS0+b3V0X3NyY193ICE9IG9sZF9yc3RhdGUtPm91dF9zcmNfdyB8fAotCQkg ICByc3RhdGUtPm91dF9zcmNfaCAhPSBvbGRfcnN0YXRlLT5vdXRfc3JjX2ggfHwKLQkJICAgcnN0 YXRlLT5vdXRfc3JjX3ggIT0gb2xkX3JzdGF0ZS0+b3V0X3NyY194IHx8Ci0JCSAgIHJzdGF0ZS0+ b3V0X3NyY195ICE9IG9sZF9yc3RhdGUtPm91dF9zcmNfeSkgewotCQlEUFVfREVCVUdfUExBTkUo cGRwdSwgInNyYyByZWN0IHVwZGF0ZWRcbiIpOwotCQlwc3RhdGUtPmRpcnR5IHw9IERQVV9QTEFO RV9ESVJUWV9SRUNUUzsKIAl9IGVsc2UgaWYgKHN0YXRlLT5jcnRjX3cgIT0gb2xkX3N0YXRlLT5j cnRjX3cgfHwKIAkJICAgc3RhdGUtPmNydGNfaCAhPSBvbGRfc3RhdGUtPmNydGNfaCB8fAogCQkg ICBzdGF0ZS0+Y3J0Y194ICE9IG9sZF9zdGF0ZS0+Y3J0Y194IHx8CkBAIC0yODMxLDggKzE1Njgs OCBAQCBzdGF0aWMgdm9pZCBfZHB1X3BsYW5lX3NzcHBfYXRvbWljX2NoZWNrX21vZGVfY2hhbmdl ZChzdHJ1Y3QgZHB1X3BsYW5lICpwZHB1LAogCQlwc3RhdGUtPmRpcnR5IHw9IERQVV9QTEFORV9E SVJUWV9SRUNUUzsKIAl9CiAKLQlmYiA9IHJzdGF0ZS0+b3V0X2ZiOwotCW9sZF9mYiA9IG9sZF9y c3RhdGUtPm91dF9mYjsKKwlmYiA9IHN0YXRlLT5mYjsKKwlvbGRfZmIgPSBvbGRfc3RhdGUtPmZi OwogCiAJaWYgKCFmYiB8fCAhb2xkX2ZiKSB7CiAJCURQVV9ERUJVR19QTEFORShwZHB1LCAiY2Fu J3QgY29tcGFyZSBmYiBoYW5kbGVzXG4iKTsKQEAgLTI5ODIsNyArMTcxOSw2IEBAIHN0YXRpYyBp bnQgZHB1X3BsYW5lX3NzcHBfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAog CWludCByZXQgPSAwOwogCXN0cnVjdCBkcHVfcGxhbmUgKnBkcHU7CiAJc3RydWN0IGRwdV9wbGFu ZV9zdGF0ZSAqcHN0YXRlOwotCXN0cnVjdCBkcHVfcGxhbmVfcm90X3N0YXRlICpyc3RhdGU7CiAJ Y29uc3Qgc3RydWN0IGRwdV9mb3JtYXQgKmZtdDsKIAlzdHJ1Y3QgZHB1X3JlY3Qgc3JjLCBkc3Q7 CiAJdWludDMyX3QgZGVjaV93LCBkZWNpX2gsIHNyY19kZWNpX3csIHNyY19kZWNpX2g7CkBAIC0y OTk4LDcgKzE3MzQsNiBAQCBzdGF0aWMgaW50IGRwdV9wbGFuZV9zc3BwX2F0b21pY19jaGVjayhz dHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAogCXBkcHUgPSB0b19kcHVfcGxhbmUocGxhbmUpOwog CXBzdGF0ZSA9IHRvX2RwdV9wbGFuZV9zdGF0ZShzdGF0ZSk7Ci0JcnN0YXRlID0gJnBzdGF0ZS0+ cm90OwogCiAJaWYgKCFwZHB1LT5waXBlX3NibGspIHsKIAkJRFBVX0VSUk9SX1BMQU5FKHBkcHUs ICJpbnZhbGlkIGNhdGFsb2dcbiIpOwpAQCAtMzAxMCw4ICsxNzQ1LDggQEAgc3RhdGljIGludCBk cHVfcGxhbmVfc3NwcF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJZGVj aV9oID0gZHB1X3BsYW5lX2dldF9wcm9wZXJ0eShwc3RhdGUsIFBMQU5FX1BST1BfVl9ERUNJTUFU RSk7CiAKIAkvKiBzcmMgdmFsdWVzIGFyZSBpbiBRMTYgZml4ZWQgcG9pbnQsIGNvbnZlcnQgdG8g aW50ZWdlciAqLwotCVBPUFVMQVRFX1JFQ1QoJnNyYywgcnN0YXRlLT5vdXRfc3JjX3gsIHJzdGF0 ZS0+b3V0X3NyY195LAotCQkJcnN0YXRlLT5vdXRfc3JjX3csIHJzdGF0ZS0+b3V0X3NyY19oLCBx MTZfZGF0YSk7CisJUE9QVUxBVEVfUkVDVCgmc3JjLCBzdGF0ZS0+c3JjX3gsIHN0YXRlLT5zcmNf eSwgc3RhdGUtPnNyY193LAorCQlzdGF0ZS0+c3JjX2gsIHExNl9kYXRhKTsKIAlQT1BVTEFURV9S RUNUKCZkc3QsIHN0YXRlLT5jcnRjX3gsIHN0YXRlLT5jcnRjX3ksIHN0YXRlLT5jcnRjX3csCiAJ CXN0YXRlLT5jcnRjX2gsICFxMTZfZGF0YSk7CiAKQEAgLTMwMjgsMTggKzE3NjMsNiBAQCBzdGF0 aWMgaW50IGRwdV9wbGFuZV9zc3BwX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSwKIAlpZiAoIWRwdV9wbGFuZV9lbmFibGVkKHN0YXRlKSkKIAkJZ290byBtb2Rlc2V0X3VwZGF0 ZTsKIAotCURQVV9ERUJVRygKLQkJInBsYW5lJWQuJXUgc3NwcDoleC8lZHglZC8lNC40cy8lbGx4 LyVkeCVkKyVkKyVkIGNydGM6JWR4JWQrJWQrJWRcbiIsCi0JCQlwbGFuZS0+YmFzZS5pZCwgcnN0 YXRlLT5zZXF1ZW5jZV9pZCwKLQkJCXJzdGF0ZS0+b3V0X3JvdGF0aW9uLAotCQkJcnN0YXRlLT5v dXRfZmJfd2lkdGgsIHJzdGF0ZS0+b3V0X2ZiX2hlaWdodCwKLQkJCShjaGFyICopICZyc3RhdGUt Pm91dF9mYl9waXhlbF9mb3JtYXQsCi0JCQlyc3RhdGUtPm91dF9mYl9tb2RpZmllclswXSwKLQkJ CXJzdGF0ZS0+b3V0X3NyY193ID4+IDE2LCByc3RhdGUtPm91dF9zcmNfaCA+PiAxNiwKLQkJCXJz dGF0ZS0+b3V0X3NyY194ID4+IDE2LCByc3RhdGUtPm91dF9zcmNfeSA+PiAxNiwKLQkJCXN0YXRl LT5jcnRjX3csIHN0YXRlLT5jcnRjX2gsCi0JCQlzdGF0ZS0+Y3J0Y194LCBzdGF0ZS0+Y3J0Y195 KTsKLQogCWZtdCA9IHRvX2RwdV9mb3JtYXQobXNtX2ZyYW1lYnVmZmVyX2Zvcm1hdChzdGF0ZS0+ ZmIpKTsKIAogCW1pbl9zcmNfc2l6ZSA9IERQVV9GT1JNQVRfSVNfWVVWKGZtdCkgPyAyIDogMTsK QEAgLTMwNTMsMTEgKzE3NzYsMTEgQEAgc3RhdGljIGludCBkcHVfcGxhbmVfc3NwcF9hdG9taWNf Y2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJCXJldCA9IC1FSU5WQUw7CiAKIAkvKiBj aGVjayBzcmMgYm91bmRzICovCi0JfSBlbHNlIGlmIChyc3RhdGUtPm91dF9mYl93aWR0aCA+IE1B WF9JTUdfV0lEVEggfHwKLQkJcnN0YXRlLT5vdXRfZmJfaGVpZ2h0ID4gTUFYX0lNR19IRUlHSFQg fHwKKwl9IGVsc2UgaWYgKHN0YXRlLT5mYi0+d2lkdGggPiBNQVhfSU1HX1dJRFRIIHx8CisJCXN0 YXRlLT5mYi0+aGVpZ2h0ID4gTUFYX0lNR19IRUlHSFQgfHwKIAkJc3JjLncgPCBtaW5fc3JjX3Np emUgfHwgc3JjLmggPCBtaW5fc3JjX3NpemUgfHwKLQkJQ0hFQ0tfTEFZRVJfQk9VTkRTKHNyYy54 LCBzcmMudywgcnN0YXRlLT5vdXRfZmJfd2lkdGgpIHx8Ci0JCUNIRUNLX0xBWUVSX0JPVU5EUyhz cmMueSwgc3JjLmgsIHJzdGF0ZS0+b3V0X2ZiX2hlaWdodCkpIHsKKwkJQ0hFQ0tfTEFZRVJfQk9V TkRTKHNyYy54LCBzcmMudywgc3RhdGUtPmZiLT53aWR0aCkgfHwKKwkJQ0hFQ0tfTEFZRVJfQk9V TkRTKHNyYy55LCBzcmMuaCwgc3RhdGUtPmZiLT5oZWlnaHQpKSB7CiAJCURQVV9FUlJPUl9QTEFO RShwZHB1LCAiaW52YWxpZCBzb3VyY2UgJXUsICV1LCAldXgldVxuIiwKIAkJCXNyYy54LCBzcmMu eSwgc3JjLncsIHNyYy5oKTsKIAkJcmV0ID0gLUUyQklHOwpAQCAtMzExMiw4ICsxODM1LDggQEAg c3RhdGljIGludCBkcHVfcGxhbmVfc3NwcF9hdG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAq cGxhbmUsCiAJCQlzcmNfZGVjaV93LCBzcmNfZGVjaV9oLCBkc3QudywgZHN0LmgpOwogCQlyZXQg PSAtRTJCSUc7CiAJfSBlbHNlIGlmIChfZHB1X3BsYW5lX3ZhbGlkYXRlX3NjYWxlcl92MihwZHB1 LCBwc3RhdGUsIGZtdCwKLQkJCQlyc3RhdGUtPm91dF9mYl93aWR0aCwKLQkJCQlyc3RhdGUtPm91 dF9mYl9oZWlnaHQsCisJCQkJc3RhdGUtPmZiLT53aWR0aCwKKwkJCQlzdGF0ZS0+ZmItPmhlaWdo dCwKIAkJCQlzcmMudywgc3JjLmgsIGRlY2lfdywgZGVjaV9oKSkgewogCQlyZXQgPSAtRUlOVkFM OwogCX0KQEAgLTMxNzAsMTAgKzE4OTMsNiBAQCBzdGF0aWMgaW50IGRwdV9wbGFuZV9hdG9taWNf Y2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAKIAlEUFVfREVCVUdfUExBTkUocGRwdSwg IlxuIik7CiAKLQlyZXQgPSBkcHVfcGxhbmVfcm90X2F0b21pY19jaGVjayhwbGFuZSwgc3RhdGUp OwotCWlmIChyZXQpCi0JCWdvdG8gZXhpdDsKLQogCXJldCA9IGRwdV9wbGFuZV9zc3BwX2F0b21p Y19jaGVjayhwbGFuZSwgc3RhdGUpOwogCiBleGl0OgpAQCAtMzIzOCw3ICsxOTU3LDYgQEAgc3Rh dGljIGludCBkcHVfcGxhbmVfc3NwcF9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBs YW5lLAogCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlOwogCXN0cnVjdCBkcHVfcGxhbmVf c3RhdGUgKnBzdGF0ZTsKIAlzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlICpvbGRfcHN0YXRlOwotCXN0 cnVjdCBkcHVfcGxhbmVfcm90X3N0YXRlICpyc3RhdGU7CiAJY29uc3Qgc3RydWN0IGRwdV9mb3Jt YXQgKmZtdDsKIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CiAJc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqZmI7CkBAIC0zMjYxLDEyICsxOTc5LDExIEBAIHN0YXRpYyBpbnQgZHB1X3BsYW5lX3NzcHBf YXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAlzdGF0ZSA9IHBsYW5lLT5z dGF0ZTsKIAogCXBzdGF0ZSA9IHRvX2RwdV9wbGFuZV9zdGF0ZShzdGF0ZSk7Ci0JcnN0YXRlID0g JnBzdGF0ZS0+cm90OwogCiAJb2xkX3BzdGF0ZSA9IHRvX2RwdV9wbGFuZV9zdGF0ZShvbGRfc3Rh dGUpOwogCiAJY3J0YyA9IHN0YXRlLT5jcnRjOwotCWZiID0gcnN0YXRlLT5vdXRfZmI7CisJZmIg PSBzdGF0ZS0+ZmI7CiAJaWYgKCFjcnRjIHx8ICFmYikgewogCQlEUFVfRVJST1JfUExBTkUocGRw dSwgImludmFsaWQgY3J0YyAlZCBvciBmYiAlZFxuIiwKIAkJCQljcnRjICE9IDAsIGZiICE9IDAp OwpAQCAtMzI3NSwxOCArMTk5Miw2IEBAIHN0YXRpYyBpbnQgZHB1X3BsYW5lX3NzcHBfYXRvbWlj X3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAlmbXQgPSB0b19kcHVfZm9ybWF0KG1z bV9mcmFtZWJ1ZmZlcl9mb3JtYXQoZmIpKTsKIAlucGxhbmVzID0gZm10LT5udW1fcGxhbmVzOwog Ci0JRFBVX0RFQlVHKAotCQkicGxhbmUlZC4lZCBzc3BwOiVkeCVkLyU0LjRzLyVsbHgvJWR4JWQr JWQrJWQvJXggY3J0YzolZHglZCslZCslZFxuIiwKLQkJCXBsYW5lLT5iYXNlLmlkLCByc3RhdGUt PnNlcXVlbmNlX2lkLAotCQkJcnN0YXRlLT5vdXRfZmJfd2lkdGgsIHJzdGF0ZS0+b3V0X2ZiX2hl aWdodCwKLQkJCShjaGFyICopICZyc3RhdGUtPm91dF9mYl9waXhlbF9mb3JtYXQsCi0JCQlyc3Rh dGUtPm91dF9mYl9tb2RpZmllclswXSwKLQkJCXJzdGF0ZS0+b3V0X3NyY193ID4+IDE2LCByc3Rh dGUtPm91dF9zcmNfaCA+PiAxNiwKLQkJCXJzdGF0ZS0+b3V0X3NyY194ID4+IDE2LCByc3RhdGUt Pm91dF9zcmNfeSA+PiAxNiwKLQkJCXJzdGF0ZS0+b3V0X3JvdGF0aW9uLAotCQkJc3RhdGUtPmNy dGNfdywgc3RhdGUtPmNydGNfaCwKLQkJCXN0YXRlLT5jcnRjX3gsIHN0YXRlLT5jcnRjX3kpOwot CiAJLyogZm9yY2UgcmVwcm9ncmFtbWluZyBvZiBhbGwgdGhlIHBhcmFtZXRlcnMsIGlmIHRoZSBm bGFnIGlzIHNldCAqLwogCWlmIChwZHB1LT5yZXZhbGlkYXRlKSB7CiAJCURQVV9ERUJVRygicGxh bmU6JWQgLSByZWNvbmZpZ3VyZSBhbGwgdGhlIHBhcmFtZXRlcnNcbiIsCkBAIC0zMzE4LDkgKzIw MjMsNiBAQCBzdGF0aWMgaW50IGRwdV9wbGFuZV9zc3BwX2F0b21pY191cGRhdGUoc3RydWN0IGRy bV9wbGFuZSAqcGxhbmUsCiAJCQkvKiBwb3RlbnRpYWxseSBuZWVkIHRvIHJlZnJlc2ggZXZlcnl0 aGluZyAqLwogCQkJcHN0YXRlLT5kaXJ0eSA9IERQVV9QTEFORV9ESVJUWV9BTEw7CiAJCQlicmVh azsKLQkJY2FzZSBQTEFORV9QUk9QX1JPVEFUSU9OOgotCQkJcHN0YXRlLT5kaXJ0eSB8PSBEUFVf UExBTkVfRElSVFlfRk9STUFUOwotCQkJYnJlYWs7CiAJCWNhc2UgUExBTkVfUFJPUF9JTkZPOgog CQljYXNlIFBMQU5FX1BST1BfQUxQSEE6CiAJCWNhc2UgUExBTkVfUFJPUF9JTlBVVF9GRU5DRToK QEAgLTMzMzEsMTIgKzIwMzMsNiBAQCBzdGF0aWMgaW50IGRwdV9wbGFuZV9zc3BwX2F0b21pY191 cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJCWNhc2UgUExBTkVfUFJPUF9QUkVGSUxM X1RJTUU6CiAJCQlwc3RhdGUtPmRpcnR5IHw9IERQVV9QTEFORV9ESVJUWV9QRVJGOwogCQkJYnJl YWs7Ci0JCWNhc2UgUExBTkVfUFJPUF9ST1RfRFNUX1g6Ci0JCWNhc2UgUExBTkVfUFJPUF9ST1Rf RFNUX1k6Ci0JCWNhc2UgUExBTkVfUFJPUF9ST1RfRFNUX1c6Ci0JCWNhc2UgUExBTkVfUFJPUF9S T1RfRFNUX0g6Ci0JCQkvKiBoYW5kbGVkIGJ5IHJvdGF0b3IgYXRvbWljIHVwZGF0ZSAqLwotCQkJ YnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQkvKiB1bmtub3duIHByb3BlcnR5LCByZWZyZXNoIGV2ZXJ5 dGhpbmcgKi8KIAkJCXBzdGF0ZS0+ZGlydHkgfD0gRFBVX1BMQU5FX0RJUlRZX0FMTDsKQEAgLTMz NzEsOCArMjA2Nyw4IEBAIHN0YXRpYyBpbnQgZHB1X3BsYW5lX3NzcHBfYXRvbWljX3VwZGF0ZShz dHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAogCS8qIHVwZGF0ZSByb2kgY29uZmlnICovCiAJaWYg KHBzdGF0ZS0+ZGlydHkgJiBEUFVfUExBTkVfRElSVFlfUkVDVFMpIHsKLQkJUE9QVUxBVEVfUkVD VCgmc3JjLCByc3RhdGUtPm91dF9zcmNfeCwgcnN0YXRlLT5vdXRfc3JjX3ksCi0JCQlyc3RhdGUt Pm91dF9zcmNfdywgcnN0YXRlLT5vdXRfc3JjX2gsIHExNl9kYXRhKTsKKwkJUE9QVUxBVEVfUkVD VCgmc3JjLCBzdGF0ZS0+c3JjX3gsIHN0YXRlLT5zcmNfeSwKKwkJCXN0YXRlLT5zcmNfdywgc3Rh dGUtPnNyY19oLCBxMTZfZGF0YSk7CiAJCVBPUFVMQVRFX1JFQ1QoJmRzdCwgc3RhdGUtPmNydGNf eCwgc3RhdGUtPmNydGNfeSwKIAkJCXN0YXRlLT5jcnRjX3csIHN0YXRlLT5jcnRjX2gsICFxMTZf ZGF0YSk7CiAKQEAgLTM0NDIsMTEgKzIxMzgsNiBAQCBzdGF0aWMgaW50IGRwdV9wbGFuZV9zc3Bw X2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJaWYgKChwc3RhdGUtPmRp cnR5ICYgRFBVX1BMQU5FX0RJUlRZX0ZPUk1BVCkgJiYKIAkJCXBkcHUtPnBpcGVfaHctPm9wcy5z ZXR1cF9mb3JtYXQpIHsKIAkJc3JjX2ZsYWdzID0gMHgwOwotCQlEUFVfREVCVUdfUExBTkUocGRw dSwgInJvdGF0aW9uIDB4JVhcbiIsIHJzdGF0ZS0+b3V0X3JvdGF0aW9uKTsKLQkJaWYgKHJzdGF0 ZS0+b3V0X3JvdGF0aW9uICYgRFJNX01PREVfUkVGTEVDVF9YKQotCQkJc3JjX2ZsYWdzIHw9IERQ VV9TU1BQX0ZMSVBfTFI7Ci0JCWlmIChyc3RhdGUtPm91dF9yb3RhdGlvbiAmIERSTV9NT0RFX1JF RkxFQ1RfWSkKLQkJCXNyY19mbGFncyB8PSBEUFVfU1NQUF9GTElQX1VEOwogCiAJCS8qIHVwZGF0 ZSBmb3JtYXQgKi8KIAkJcGRwdS0+cGlwZV9ody0+b3BzLnNldHVwX2Zvcm1hdChwZHB1LT5waXBl X2h3LCBmbXQsIHNyY19mbGFncywKQEAgLTM0NjksMzggKzIxNjAsNiBAQCBzdGF0aWMgaW50IGRw dV9wbGFuZV9zc3BwX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJCQlw ZHB1LT5waXBlX2h3LT5vcHMuc2V0dXBfY2RwKHBkcHUtPnBpcGVfaHcsIGNkcF9jZmcpOwogCQl9 CiAKLQkJaWYgKHBkcHUtPnBpcGVfaHctPm9wcy5zZXR1cF9zeXNfY2FjaGUpIHsKLQkJCWlmIChy c3RhdGUtPm91dF9zYnVmICYmIHJzdGF0ZS0+cm90X2h3KSB7Ci0JCQkJaWYgKHJzdGF0ZS0+bnBs YW5lIDwgMikKLQkJCQkJcHN0YXRlLT5zY19jZmcub3BfbW9kZSA9Ci0JCQkJCURQVV9QSVBFX1ND X09QX01PREVfSU5MSU5FX1NJTkdMRTsKLQkJCQllbHNlIGlmIChyc3RhdGUtPm91dF94cG9zID09 IDApCi0JCQkJCXBzdGF0ZS0+c2NfY2ZnLm9wX21vZGUgPQotCQkJCQkJRFBVX1BJUEVfU0NfT1Bf TU9ERV9JTkxJTkVfTEVGVDsKLQkJCQllbHNlCi0JCQkJCXBzdGF0ZS0+c2NfY2ZnLm9wX21vZGUg PQotCQkJCQlEUFVfUElQRV9TQ19PUF9NT0RFX0lOTElORV9SSUdIVDsKLQotCQkJCXBzdGF0ZS0+ c2NfY2ZnLnJkX2VuID0gdHJ1ZTsKLQkJCQlwc3RhdGUtPnNjX2NmZy5yZF9zY2lkID0KLQkJCQkJ CXJzdGF0ZS0+cm90X2h3LT5jYXBzLT5zY2lkOwotCQkJCXBzdGF0ZS0+c2NfY2ZnLnJkX25vYWxs b2NhdGUgPSB0cnVlOwotCQkJCXBzdGF0ZS0+c2NfY2ZnLnJkX29wX3R5cGUgPQotCQkJCQlEUFVf UElQRV9TQ19SRF9PUF9UWVBFX0NBQ0hFQUJMRTsKLQkJCX0gZWxzZSB7Ci0JCQkJcHN0YXRlLT5z Y19jZmcub3BfbW9kZSA9Ci0JCQkJCQlEUFVfUElQRV9TQ19PUF9NT0RFX09GRkxJTkU7Ci0JCQkJ cHN0YXRlLT5zY19jZmcucmRfZW4gPSBmYWxzZTsKLQkJCQlwc3RhdGUtPnNjX2NmZy5yZF9zY2lk ID0gMDsKLQkJCQlwc3RhdGUtPnNjX2NmZy5yZF9ub2FsbG9jYXRlID0gdHJ1ZTsKLQkJCQlwc3Rh dGUtPnNjX2NmZy5yZF9vcF90eXBlID0KLQkJCQkJRFBVX1BJUEVfU0NfUkRfT1BfVFlQRV9DQUNI RUFCTEU7Ci0JCQl9Ci0KLQkJCXBkcHUtPnBpcGVfaHctPm9wcy5zZXR1cF9zeXNfY2FjaGUoCi0J CQkJCXBkcHUtPnBpcGVfaHcsICZwc3RhdGUtPnNjX2NmZyk7Ci0JCX0KLQogCQkvKiB1cGRhdGUg Y3NjICovCiAJCWlmIChEUFVfRk9STUFUX0lTX1lVVihmbXQpKQogCQkJX2RwdV9wbGFuZV9zZXR1 cF9jc2MocGRwdSk7CkBAIC0zNTkzLDggKzIyNTIsNiBAQCBzdGF0aWMgdm9pZCBkcHVfcGxhbmVf YXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAogCURQVV9ERUJVR19QTEFO RShwZHB1LCAiXG4iKTsKIAotCWRwdV9wbGFuZV9yb3RfYXRvbWljX3VwZGF0ZShwbGFuZSwgb2xk X3N0YXRlKTsKLQogCWlmICghZHB1X3BsYW5lX3NzcHBfZW5hYmxlZChzdGF0ZSkpIHsKIAkJX2Rw dV9wbGFuZV9hdG9taWNfZGlzYWJsZShwbGFuZSwgb2xkX3N0YXRlKTsKIAl9IGVsc2UgewpAQCAt Mzc1Nyw4ICsyNDE0LDYgQEAgc3RhdGljIHZvaWQgX2RwdV9wbGFuZV9pbnN0YWxsX3Byb3BlcnRp ZXMoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJCW1zbV9wcm9wZXJ0eV9pbnN0YWxsX3ZvbGF0 aWxlX3JhbmdlKCZwZHB1LT5wcm9wZXJ0eV9pbmZvLAogCQkJImV4Y2xfcmVjdF92MSIsIDB4MCwg MCwgfjAsIDAsIFBMQU5FX1BST1BfRVhDTF9SRUNUX1YxKTsKIAotCWRwdV9wbGFuZV9yb3RfaW5z dGFsbF9wcm9wZXJ0aWVzKHBsYW5lLCBjYXRhbG9nKTsKLQogCW1zbV9wcm9wZXJ0eV9pbnN0YWxs X2VudW0oJnBkcHUtPnByb3BlcnR5X2luZm8sICJibGVuZF9vcCIsIDB4MCwgMCwKIAkJZV9ibGVu ZF9vcCwgQVJSQVlfU0laRShlX2JsZW5kX29wKSwgUExBTkVfUFJPUF9CTEVORF9PUCk7CiAKQEAg LTQwODYsMTUgKzI3NDEsNiBAQCBzdGF0aWMgaW50IGRwdV9wbGFuZV9hdG9taWNfc2V0X3Byb3Bl cnR5KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBp bnQgZHB1X3BsYW5lX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKLQkJc3Ry dWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksIHVpbnQ2NF90IHZhbCkKLXsKLQlEUFVfREVCVUco IlxuIik7Ci0KLQlyZXR1cm4gZHB1X3BsYW5lX2F0b21pY19zZXRfcHJvcGVydHkocGxhbmUsCi0J CQlwbGFuZS0+c3RhdGUsIHByb3BlcnR5LCB2YWwpOwotfQotCiBzdGF0aWMgaW50IGRwdV9wbGFu ZV9hdG9taWNfZ2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCQljb25zdCBz dHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSwKIAkJc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJv cGVydHksIHVpbnQ2NF90ICp2YWwpCkBAIC00MTEwLDkgKzI3NTYsNiBAQCBzdGF0aWMgaW50IGRw dV9wbGFuZV9hdG9taWNfZ2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCX0g ZWxzZSB7CiAJCURQVV9ERUJVR19QTEFORShwZHB1LCAiXG4iKTsKIAkJcHN0YXRlID0gdG9fZHB1 X3BsYW5lX3N0YXRlKHN0YXRlKTsKLSNpZmRlZiBDT05GSUdfUUNPTV9EUFVfUk9UCi0JCWRwdV9w bGFuZV9yb3RfaW5zdGFsbF9jYXBzKHBsYW5lKTsKLSNlbmRpZgogCQlyZXQgPSBtc21fcHJvcGVy dHlfYXRvbWljX2dldCgmcGRwdS0+cHJvcGVydHlfaW5mbywKIAkJCQkmcHN0YXRlLT5wcm9wZXJ0 eV9zdGF0ZSwgcHJvcGVydHksIHZhbCk7CiAJfQpAQCAtNDE2Myw4ICsyODA2LDYgQEAgc3RhdGlj IHZvaWQgZHB1X3BsYW5lX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAK IAlEUFVfREVCVUdfUExBTkUocGRwdSwgIlxuIik7CiAKLQlkcHVfcGxhbmVfcm90X2Rlc3Ryb3lf c3RhdGUocGxhbmUsICZwc3RhdGUtPmJhc2UpOwotCiAJLyogcmVtb3ZlIHJlZiBjb3VudCBmb3Ig ZnJhbWUgYnVmZmVycyAqLwogCWlmIChzdGF0ZS0+ZmIpCiAJCWRybV9mcmFtZWJ1ZmZlcl9wdXQo c3RhdGUtPmZiKTsKQEAgLTQyMjYsOCArMjg2Nyw2IEBAIHN0YXRpYyB2b2lkIGRwdV9wbGFuZV9k ZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCiAJX19kcm1fYXRvbWljX2hl bHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUocGxhbmUsICZwc3RhdGUtPmJhc2UpOwogCi0JZHB1 X3BsYW5lX3JvdF9kdXBsaWNhdGVfc3RhdGUocGxhbmUsICZwc3RhdGUtPmJhc2UpOwotCiAJcmV0 dXJuICZwc3RhdGUtPmJhc2U7CiB9CiAKQEAgLTQ0NTUsMTMgKzMwOTQsNiBAQCBzdGF0aWMgaW50 IF9kcHVfcGxhbmVfaW5pdF9kZWJ1Z2ZzKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQogCQkJMDYw MCwKIAkJCXBkcHUtPmRlYnVnZnNfcm9vdCwKIAkJCWttcywgJmRwdV9wbGFuZV9kYW5nZXJfZW5h YmxlKTsKLQlkZWJ1Z2ZzX2NyZWF0ZV91MzIoInNidWZfbW9kZSIsCi0JCQkwNjAwLAotCQkJcGRw dS0+ZGVidWdmc19yb290LCAmcGRwdS0+c2J1Zl9tb2RlKTsKLQlkZWJ1Z2ZzX2NyZWF0ZV91MzIo InNidWZfd3JpdGViYWNrIiwKLQkJCTA2MDAsCi0JCQlwZHB1LT5kZWJ1Z2ZzX3Jvb3QsCi0JCQkm cGRwdS0+c2J1Zl93cml0ZWJhY2spOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuaCBiL2RyaXZlcnMvZ3B1L2RybS9t c20vZGlzcC9kcHUxL2RwdV9wbGFuZS5oCmluZGV4IGFkOWQ1Y2YuLjI1YjZiMTUgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5oCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9wbGFuZS5oCkBAIC0yNCw3MSArMjQsOCBAQAog I2luY2x1ZGUgIm1zbV9wcm9wLmgiCiAjaW5jbHVkZSAiZHB1X2ttcy5oIgogI2luY2x1ZGUgImRw dV9od19tZHNzLmgiCi0jaW5jbHVkZSAiZHB1X2h3X3JvdC5oIgogI2luY2x1ZGUgImRwdV9od19z c3BwLmgiCiAKLS8qKgotICogc3RydWN0IGRwdV9wbGFuZV9yb3Rfc3RhdGUgLSBzdGF0ZSBvZiBw cmUtc3NwcCByb3RhdG9yIHN0YWdlCi0gKiBAc2VxdWVuY2VfaWQ6IHNlcXVlbmNlIGlkZW50aWZp ZXIsIGluY3JlbWVudGVkIHBlciBzdGF0ZSBkdXBsaWNhdGlvbgotICogQHJvdF9odzogUG9pbnRl ciB0byByb3RhdG9yIGhhcmR3YXJlIGRyaXZlcgotICogQHJvdDkwOiB0cnVlIGlmIHJvdGF0aW9u IG9mIDkwIGRlZ3JlZSBpcyByZXF1aXJlZAotICogQGhmbGlwOiB0cnVlIGlmIGhvcml6b250YWwg ZmxpcCBpcyByZXF1aXJlZAotICogQHZmbGlwOiB0cnVlIGlmIHZlcnRpY2FsIGZsaXAgaXMgcmVx dWlyZWQKLSAqIEByb3RfY21kOiByb3RhdG9yIGNvbmZpZ3VyYXRpb24gY29tbWFuZAotICogQG5w bGFuZTogdG90YWwgbnVtYmVyIG9mIGRybSBwbGFuZSBhdHRhY2hlZCB0byByb3RhdG9yCi0gKiBA aW5fZmI6IGlucHV0IGZiIGF0dGFjaGVkIHRvIHJvdGF0b3IKLSAqIEBpbl9yb3RhdGlvbjogaW5w dXQgcm90YXRpb24gcHJvcGVydHkgb2Ygcm90YXRvciBzdGFnZQotICogQGluX3JvdF9yZWN0OiBp bnB1dCByZWN0YW5nbGUgb2YgdGhlIHJvdGF0b3IgaW4gcGxhbmUgZmIgY29vcmRpbmF0ZQotICog QG91dF9yb3RhdGlvbjogb3V0cHV0IHJvdGF0aW9uIHByb3BlcnR5IG9mIHJvdGF0b3Igc3RhZ2UK LSAqIEBvdXRfcm90X3JlY3Q6IG91dHB1dCByZWN0YW5nbGUgb2YgdGhlIHJvdGF0b3IgaW4gcGxh bmUgZmIgY29vcmRpbmF0ZQotICogQG91dF9zcmNfcmVjdDogb3V0cHV0IHJlY3RhbmdsZSBvZiB0 aGUgcGxhbmUgc291cmNlIGluIHBsYW5lIGZiIGNvb3JkaW5hdGUKLSAqIEBvdXRfc3JjX3g6IG91 dHB1dCBzcmNfeCBvZiByb3RhdG9yIHN0YWdlIGluIHJvdGF0b3Igb3V0cHV0IGZiIGNvb3JkaW5h dGUKLSAqIEBvdXRfc3JjX3k6IG91dHB1dCBzcmMgeSBvZiByb3RhdG9yIHN0YWdlIGluIHJvdGF0 b3Igb3V0cHV0IGZiIGNvb3JkaW5hdGUKLSAqIEBvdXRfc3JjX3c6IG91dHB1dCBzcmMgdyBvZiBy b3RhdG9yIHN0YWdlIGluIHJvdGF0b3Igb3V0cHV0IGZiIG9vb3JkaW5hdGUKLSAqIEBvdXRfc3Jj X2g6IG91dHB1dCBzcmMgaCBvZiByb3RhdG9yIHN0YWdlIGluIHJvdGF0b3Igb3V0cHV0IGZiIGNv b3JkaW5hdGUKLSAqIEBvdXRfZmJfd2lkdGg6IG91dHB1dCBmcmFtZWJ1ZmZlciB3aWR0aCBvZiBy b3RhdG9yIHN0YWdlCi0gKiBAb3V0X2ZiX2hlaWdodDogb3V0cHV0IGZyYW1lYnVmZmVyIGhlaWdo dCBvZiByb3RhdG9yIHN0YWdlCi0gKiBAb3V0X2ZiX3BpeGVsX2Zvcm1hdDogb3V0cHV0IGZyYW1l YnVmZmVyIHBpeGVsIGZvcm1hdCBvZiByb3RhdG9yIHN0YWdlCi0gKiBAb3V0X2ZiX21vZGlmaWVy OiBvdXRwdXQgZnJhbWVidWZmZXIgbW9kaWZpZXIgb2Ygcm90YXRvciBzdGFnZQotICogQG91dF9m Yl9mbGFnczogb3V0cHV0IGZyYW1lYnVmZmVyIGZsYWdzIG9mIHJvdGF0b3Igc3RhZ2UKLSAqIEBv dXRfc2J1ZjogdHJ1ZSBpZiBvdXRwdXQgc3RyZWFtaW5nIGJ1ZmZlciBpcyByZXF1aXJlZAotICog QG91dF9mYl9mb3JtYXQ6IFBvaW50ZXIgdG8gb3V0cHV0IGZyYW1lYnVmZmVyIGZvcm1hdCBvZiBy b3RhdG9yIHN0YWdlCi0gKiBAb3V0X2ZiOiBQb2ludGVyIHRvIG91dHB1dCBkcm0gZnJhbWVidWZm ZXIgb2Ygcm90YXRvciBzdGFnZQotICogQG91dF9mYm86IGZyYW1lYnVmZmVyIG9iamVjdCBvZiBv dXRwdXQgc3RyZWFtaW5nIGJ1ZmZlcgotICogQG91dF94cG9zOiByZWxhdGl2ZSBob3Jpem9udGFs IHBvc2l0aW9uIG9mIHRoZSBwbGFuZSAoMCAtIGxlZnRtb3N0KQotICovCi1zdHJ1Y3QgZHB1X3Bs YW5lX3JvdF9zdGF0ZSB7Ci0JdTMyIHNlcXVlbmNlX2lkOwotCXN0cnVjdCBkcHVfaHdfcm90ICpy b3RfaHc7Ci0JYm9vbCByb3Q5MDsKLQlib29sIGhmbGlwOwotCWJvb2wgdmZsaXA7Ci0Jc3RydWN0 IGRwdV9od19yb3RfY21kIHJvdF9jbWQ7Ci0JaW50IG5wbGFuZTsKLQkvKiBpbnB1dCAqLwotCXN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgKmluX2ZiOwotCXN0cnVjdCBkcm1fcmVjdCBpbl9yb3RfcmVj dDsKLQl1MzIgaW5fcm90YXRpb247Ci0JLyogb3V0cHV0ICovCi0Jc3RydWN0IGRybV9yZWN0IG91 dF9yb3RfcmVjdDsKLQlzdHJ1Y3QgZHJtX3JlY3Qgb3V0X3NyY19yZWN0OwotCXUzMiBvdXRfcm90 YXRpb247Ci0JdTMyIG91dF9zcmNfeDsKLQl1MzIgb3V0X3NyY195OwotCXUzMiBvdXRfc3JjX3c7 Ci0JdTMyIG91dF9zcmNfaDsKLQl1MzIgb3V0X2ZiX3dpZHRoOwotCXUzMiBvdXRfZmJfaGVpZ2h0 OwotCXUzMiBvdXRfZmJfcGl4ZWxfZm9ybWF0OwotCXU2NCBvdXRfZmJfbW9kaWZpZXJbNF07Ci0J dTMyIG91dF9mYl9mbGFnczsKLQlib29sIG91dF9zYnVmOwotCWNvbnN0IHN0cnVjdCBkcHVfZm9y bWF0ICpvdXRfZmJfZm9ybWF0OwotCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm91dF9mYjsKLQlz dHJ1Y3QgZHB1X2ttc19mYm8gKm91dF9mYm87Ci0JaW50IG91dF94cG9zOwotfTsKLQogLyogZGly dHkgYml0cyBmb3IgdXBkYXRlIGZ1bmN0aW9uICovCiAjZGVmaW5lIERQVV9QTEFORV9ESVJUWV9S RUNUUwkweDEKICNkZWZpbmUgRFBVX1BMQU5FX0RJUlRZX0ZPUk1BVAkweDIKQEAgLTE1MSwxMCAr ODgsNiBAQCBzdHJ1Y3QgZHB1X3BsYW5lX3N0YXRlIHsKIAlzdHJ1Y3QgZHB1X2h3X3BpeGVsX2V4 dCBwaXhlbF9leHQ7CiAJZW51bSBkcHVfcGxhbmVfc2NsY2hlY2tfc3RhdGUgc2NhbGVyX2NoZWNr X3N0YXRlOwogCi0JLyogQHNjX2NmZzogc3lzdGVtX2NhY2hlIGNvbmZpZ3VyYXRpb24gKi8KLQlz dHJ1Y3QgZHB1X2h3X3BpcGVfc2NfY2ZnIHNjX2NmZzsKLQlzdHJ1Y3QgZHB1X3BsYW5lX3JvdF9z dGF0ZSByb3Q7Ci0KIAlzdHJ1Y3QgZHB1X2h3X3BpcGVfY2RwX2NmZyBjZHBfY2ZnOwogfTsKIApA QCAtMjAwLDE3ICsxMzMsOSBAQCBzdHJ1Y3QgZHB1X211bHRpcmVjdF9wbGFuZV9zdGF0ZXMgewog ICogQHBsYW5lOiAgIFBvaW50ZXIgdG8gRFJNIHBsYW5lIG9iamVjdAogICogQGN0bDogUG9pbnRl ciB0byBjb250cm9sIGhhcmR3YXJlCiAgKiBAZmx1c2hfc3NwcDogUG9pbnRlciB0byBzc3BwIGZs dXNoIGNvbnRyb2wgd29yZAotICogQGZsdXNoX3JvdDogUG9pbnRlciB0byByb3RhdG9yIGZsdXNo IGNvbnRyb2wgd29yZAogICovCiB2b2lkIGRwdV9wbGFuZV9nZXRfY3RsX2ZsdXNoKHN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lLCBzdHJ1Y3QgZHB1X2h3X2N0bCAqY3RsLAotCQl1MzIgKmZsdXNoX3Nz cHAsIHUzMiAqZmx1c2hfcm90KTsKLQotLyoqCi0gKiBkcHVfcGxhbmVfcm90X2NhbGNfcHJlZmls bCAtIGNhbGN1bGF0ZSByb3RhdG9yIHN0YXJ0IHByZWZpbGwKLSAqIEBwbGFuZTogUG9pbnRlciB0 byBkcm0gcGxhbmUKLSAqIHJldHVybjogcHJlZmlsbCB0aW1lIGluIGxpbmUKLSAqLwotdTMyIGRw dV9wbGFuZV9yb3RfY2FsY19wcmVmaWxsKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKTsKKwkJdTMy ICpmbHVzaF9zc3BwKTsKIAogLyoqCiAgKiBkcHVfcGxhbmVfcmVzdG9yZSAtIHJlc3RvcmUgaHcg c3RhdGUgaWYgcHJldmlvdXNseSBwb3dlciBjb2xsYXBzZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9ybS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kaXNw L2RwdTEvZHB1X3JtLmMKaW5kZXggM2EyNjEyYS4uMWQ4MWIxYiAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL2RwdTEvZHB1X3JtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21z bS9kaXNwL2RwdTEvZHB1X3JtLmMKQEAgLTI1LDkgKzI1LDYgQEAKICNpbmNsdWRlICJkcHVfZW5j b2Rlci5oIgogI2luY2x1ZGUgImRwdV9jb25uZWN0b3IuaCIKICNpbmNsdWRlICJkcHVfaHdfZHNj LmgiCi0jaWZkZWYgQ09ORklHX0RSTV9NU01fUk9UQVRPUgotI2luY2x1ZGUgImRwdV9od19yb3Qu aCIKLSNlbmRpZgogCiAjZGVmaW5lIFJFU0VSVkVEX0JZX09USEVSKGgsIHIpIFwKIAkoKGgpLT5y c3ZwICYmICgoaCktPnJzdnAtPmVuY19pZCAhPSAociktPmVuY19pZCkpCkBAIC0yNTksMTEgKzI1 Niw2IEBAIHN0YXRpYyB2b2lkIF9kcHVfcm1faHdfZGVzdHJveShlbnVtIGRwdV9od19ibGtfdHlw ZSB0eXBlLCB2b2lkICpodykKIAljYXNlIERQVV9IV19CTEtfRFNDOgogCQlkcHVfaHdfZHNjX2Rl c3Ryb3koaHcpOwogCQlicmVhazsKLSNpZmRlZiBDT05GSUdfRFJNX01TTV9ST1RBVE9SCi0JY2Fz ZSBEUFVfSFdfQkxLX1JPVDoKLQkJZHB1X2h3X3JvdF9kZXN0cm95KGh3KTsKLQkJYnJlYWs7Ci0j ZW5kaWYKIAljYXNlIERQVV9IV19CTEtfU1NQUDoKIAkJLyogU1NQUHMgYXJlIG5vdCBtYW5hZ2Vk IGJ5IHRoZSByZXNvdXJjZSBtYW5hZ2VyICovCiAJY2FzZSBEUFVfSFdfQkxLX1RPUDoKQEAgLTM1 MiwxMSArMzQ0LDYgQEAgc3RhdGljIGludCBfZHB1X3JtX2h3X2Jsa19jcmVhdGUoCiAJY2FzZSBE UFVfSFdfQkxLX0RTQzoKIAkJaHcgPSBkcHVfaHdfZHNjX2luaXQoaWQsIG1taW8sIGNhdCk7CiAJ CWJyZWFrOwotI2lmZGVmIENPTkZJR19EUk1fTVNNX1JPVEFUT1IKLQljYXNlIERQVV9IV19CTEtf Uk9UOgotCQlodyA9IGRwdV9od19yb3RfaW5pdChpZCwgbW1pbywgY2F0KTsKLQkJYnJlYWs7Ci0j ZW5kaWYKIAljYXNlIERQVV9IV19CTEtfU1NQUDoKIAkJLyogU1NQUHMgYXJlIG5vdCBtYW5hZ2Vk IGJ5IHRoZSByZXNvdXJjZSBtYW5hZ2VyICovCiAJY2FzZSBEUFVfSFdfQkxLX1RPUDoKQEAgLTUx MCwxNSArNDk3LDYgQEAgaW50IGRwdV9ybV9pbml0KHN0cnVjdCBkcHVfcm0gKnJtLAogCQl9CiAJ fQogCi0JZm9yIChpID0gMDsgaSA8IGNhdC0+cm90X2NvdW50OyBpKyspIHsKLQkJcmMgPSBfZHB1 X3JtX2h3X2Jsa19jcmVhdGUocm0sIGNhdCwgbW1pbywgRFBVX0hXX0JMS19ST1QsCi0JCQkJY2F0 LT5yb3RbaV0uaWQsICZjYXQtPnJvdFtpXSk7Ci0JCWlmIChyYykgewotCQkJRFBVX0VSUk9SKCJm YWlsZWQ6IHJvdCBodyBub3QgYXZhaWxhYmxlXG4iKTsKLQkJCWdvdG8gZmFpbDsKLQkJfQotCX0K LQogCWZvciAoaSA9IDA7IGkgPCBjYXQtPmN0bF9jb3VudDsgaSsrKSB7CiAJCXJjID0gX2RwdV9y bV9od19ibGtfY3JlYXRlKHJtLCBjYXQsIG1taW8sIERQVV9IV19CTEtfQ1RMLAogCQkJCWNhdC0+ Y3RsW2ldLmlkLCAmY2F0LT5jdGxbaV0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21z bS9tc21fZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuaAppbmRleCA4NTc0ZjMw Li5iNTZkOTFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuaAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kcnYuaApAQCAtMTA1LDE1ICsxMDUsMTAgQEAgZW51 bSBtc21fbWRwX3BsYW5lX3Byb3BlcnR5IHsKIAlQTEFORV9QUk9QX1ZBTFVFX0FESlVTVCwKIAlQ TEFORV9QUk9QX0NPTlRSQVNUX0FESlVTVCwKIAlQTEFORV9QUk9QX0VYQ0xfUkVDVF9WMSwKLQlQ TEFORV9QUk9QX1JPVF9EU1RfWCwKLQlQTEFORV9QUk9QX1JPVF9EU1RfWSwKLQlQTEFORV9QUk9Q X1JPVF9EU1RfVywKLQlQTEFORV9QUk9QX1JPVF9EU1RfSCwKIAlQTEFORV9QUk9QX1BSRUZJTExf U0laRSwKIAlQTEFORV9QUk9QX1BSRUZJTExfVElNRSwKIAogCS8qIGVudW0vYml0bWFzayBwcm9w ZXJ0aWVzICovCi0JUExBTkVfUFJPUF9ST1RBVElPTiwKIAlQTEFORV9QUk9QX0JMRU5EX09QLAog CVBMQU5FX1BST1BfU1JDX0NPTkZJRywKIApAQCAtMTQyLDggKzEzNyw2IEBAIGVudW0gbXNtX21k cF9jcnRjX3Byb3BlcnR5IHsKIAlDUlRDX1BST1BfTExDQ19JQiwKIAlDUlRDX1BST1BfRFJBTV9B QiwKIAlDUlRDX1BST1BfRFJBTV9JQiwKLQlDUlRDX1BST1BfUk9UX1BSRUZJTExfQlcsCi0JQ1JU Q19QUk9QX1JPVF9DTEssCiAJQ1JUQ19QUk9QX0lETEVfVElNRU9VVCwKIAlDUlRDX1BST1BfREVT VF9TQ0FMRVIsCiAKQEAgLTY2MSw3ICs2NTQsNyBAQCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm1z bV9nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiB2b2lk ICptc21fZ2VtX2dldF92YWRkcihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CiB2b2lkICpt c21fZ2VtX2dldF92YWRkcl9hY3RpdmUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwogdm9p ZCBtc21fZ2VtX3B1dF92YWRkcihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Ci1pbnQgbXNt X2dlbV9tYWR2aXNlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCB1bnNpZ25lZCBtYWR2KTsK K2ludCBtc21fZ2VtX21hZHZpc2Uoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHVuc2lnbmVk IGludCBtYWR2KTsKIGludCBtc21fZ2VtX3N5bmNfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVj dCAqb2JqLAogCQlzdHJ1Y3QgbXNtX2ZlbmNlX2NvbnRleHQgKmZjdHgsIGJvb2wgZXhjbHVzaXZl KTsKIHZvaWQgbXNtX2dlbV9tb3ZlX3RvX2FjdGl2ZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9i aiwKQEAgLTcwMCw3ICs2OTMsNyBAQCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICptc21fZnJhbWVi dWZmZXJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQlzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKipib3MpOwogc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqbXNtX2ZyYW1lYnVmZmVyX2NyZWF0 ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsIGNvbnN0 IHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICptb2RlX2NtZCk7Ci1zdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICogbXNtX2FsbG9jX3N0b2xlbl9mYihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqbXNtX2FsbG9jX3N0b2xlbl9mYihzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAogCQlpbnQgdywgaW50IGgsIGludCBwLCB1aW50MzJfdCBmb3JtYXQpOwogCiBzdHJ1Y3Qg ZHJtX2ZiX2hlbHBlciAqbXNtX2ZiZGV2X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Ci0t IApUaGUgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gaXMgYSBtZW1iZXIgb2YgdGhl IENvZGUgQXVyb3JhIEZvcnVtLAphIExpbnV4IEZvdW5kYXRpb24gQ29sbGFib3JhdGl2ZSBQcm9q ZWN0CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpGcmVl ZHJlbm8gbWFpbGluZyBsaXN0CkZyZWVkcmVub0BsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9mcmVlZHJlbm8K