From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: [PATCH i-g-t v2] tests/kms_atomic: Convert/rewrite tests to use igt_kms framework, v2. Date: Thu, 12 Oct 2017 17:33:48 +0200 Message-ID: <20171012153348.18154-1-maarten.lankhorst@linux.intel.com> References: <20171012115435.18880-15-maarten.lankhorst@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mblankhorst.nl (mblankhorst.nl [141.105.120.124]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9E9916E896 for ; Thu, 12 Oct 2017 15:33:53 +0000 (UTC) In-Reply-To: <20171012115435.18880-15-maarten.lankhorst@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org Cc: Daniel Stone List-Id: intel-gfx@lists.freedesktop.org Tm93IHRoYXQgd2UgY2FuIHNldCBpbmRpdmlkdWFsIHByb3BlcnRpZXMgdGhyb3VnaCB0aGUgaWd0 X2ttcyBhcGksCndlIG5vIGxvbmdlciBuZWVkIHRvIGR1cGxpY2F0ZSBmdW5jdGlvbmFsaXR5IGZy b20gaWd0X2ttcy4gU2V0IGludmFsaWQKcHJvcGVydGllcyBkaXJlY3RseSwgYW5kIHJld3JpdGUg a21zX2F0b21pYy5jIHRvIHVzZSBpZ3RfZGlzcGxheS4KVGhpcyB3aWxsIGFsbG93IHVzIHRvIHJl bW92ZSBhIGxvdCBvZiBjb2RlIGluIGttc19hdG9taWMuYywKYW5kIGJlbmVmaXQgZnJvbSBob3cg aWd0X2ttcyBjYW4gc2V0IHVwIGEgdmFsaWQgY29uZmlndXJhdGlvbiwKaW5zdGVhZCBvZiBoYXZp bmcgdG8gaW5oZXJpdCBpdCBmcm9tIGZiY29uLgoKQ2hhbmdlcyBzaW5jZSB2MToKLSBGaXggdGVz dCBmYWlsdXJlIHdoZW4gYXRvbWljX2ludmFsaWRfcGFyYW1zIGlzIHJ1biBzdGFuZGFsb25lLgoK U2lnbmVkLW9mZi1ieTogTWFhcnRlbiBMYW5raG9yc3QgPG1hYXJ0ZW4ubGFua2hvcnN0QGxpbnV4 LmludGVsLmNvbT4KQ2M6IERhbmllbCBTdG9uZSA8ZGFuaWVsc0Bjb2xsYWJvcmEuY29tPgotLS0K IHRlc3RzL2ttc19hdG9taWMuYyB8IDE2NjggKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDUxMiBpbnNlcnRpb25zKCsp LCAxMTU2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Rlc3RzL2ttc19hdG9taWMuYyBiL3Rl c3RzL2ttc19hdG9taWMuYwppbmRleCAwNDJhN2MyNjNhYWIuLmUwZmMzMjRlYWI2MSAxMDA2NDQK LS0tIGEvdGVzdHMva21zX2F0b21pYy5jCisrKyBiL3Rlc3RzL2ttc19hdG9taWMuYwpAQCAtNDYs MTAgKzQ2LDYgQEAKICNpbmNsdWRlICJpZ3RfYXV4LmgiCiAjaW5jbHVkZSAic3dfc3luYy5oIgog Ci0jaWZuZGVmIERSTV9DTElFTlRfQ0FQX0FUT01JQwotI2RlZmluZSBEUk1fQ0xJRU5UX0NBUF9B VE9NSUMgMwotI2VuZGlmCi0KICNpZm5kZWYgRFJNX0NBUF9DVVJTT1JfV0lEVEgKICNkZWZpbmUg RFJNX0NBUF9DVVJTT1JfV0lEVEggMHg4CiAjZW5kaWYKQEAgLTU4LDIzICs1NCw2IEBACiAjZGVm aW5lIERSTV9DQVBfQ1VSU09SX0hFSUdIVCAweDkKICNlbmRpZgogCi0jaWZuZGVmIERSTV9NT0RF X0FUT01JQ19URVNUX09OTFkKLSNkZWZpbmUgRFJNX01PREVfQVRPTUlDX1RFU1RfT05MWSAweDAx MDAKLSNkZWZpbmUgRFJNX01PREVfQVRPTUlDX05PTkJMT0NLIDB4MDIwMAotI2RlZmluZSBEUk1f TU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNFVCAweDA0MDAKLQotc3RydWN0IGRybV9tb2RlX2F0b21p YyB7Ci0JX191MzIgZmxhZ3M7Ci0JX191MzIgY291bnRfb2JqczsKLQlfX3U2NCBvYmpzX3B0cjsK LQlfX3U2NCBjb3VudF9wcm9wc19wdHI7Ci0JX191NjQgcHJvcHNfcHRyOwotCV9fdTY0IHByb3Bf dmFsdWVzX3B0cjsKLQlfX3U2NCByZXNlcnZlZDsKLQlfX3U2NCB1c2VyX2RhdGE7Ci19OwotI2Vu ZGlmCi0KIElHVF9URVNUX0RFU0NSSVBUSU9OKCJUZXN0IGF0b21pYyBtb2Rlc2V0dGluZyBBUEki KTsKIAogZW51bSBrbXNfYXRvbWljX2NoZWNrX3JlbGF4IHsKQEAgLTgzLDEyNTkgKzYyLDY1MiBA QCBlbnVtIGttc19hdG9taWNfY2hlY2tfcmVsYXggewogCVBMQU5FX1JFTEFYX0ZCID0gKDEgPDwg MSkKIH07CiAKLS8qKgotICogS01TIHBsYW5lIHR5cGUgZW51bQotICoKLSAqIEtNUyBwbGFuZSB0 eXBlcyBhcmUgcmVwcmVzZW50ZWQgYnkgZW51bXMsIHdoaWNoIGRvIG5vdCBoYXZlIHN0YWJsZSBu dW1lcmljCi0gKiB2YWx1ZXMsIGJ1dCBtdXN0IGJlIGxvb2tlZCB1cCBieSB0aGVpciBzdHJpbmcg dmFsdWUgZWFjaCB0aW1lLgotICoKLSAqIFRvIG1ha2UgdGhlIGNvZGUgbW9yZSBzaW1wbGUsIHdl IGRlZmluZSBhIHBsYW5lX3R5cGUgZW51bSB3aGljaCBtYXBzIHRvCi0gKiBlYWNoIEtNUyBlbnVt IHZhbHVlLiBUaGVzZSB2YWx1ZXMgbXVzdCBiZSBsb29rZWQgdXAgdGhyb3VnaCB0aGUgbWFwLCBh bmQKLSAqIGNhbm5vdCBiZSBwYXNzZWQgZGlyZWN0bHkgdG8gS01TIGZ1bmN0aW9ucy4KLSAqLwot ZW51bSBwbGFuZV90eXBlIHsKLQlQTEFORV9UWVBFX1BSSU1BUlkgPSAwLAotCVBMQU5FX1RZUEVf T1ZFUkxBWSwKLQlQTEFORV9UWVBFX0NVUlNPUiwKLQlOVU1fUExBTkVfVFlQRV9QUk9QUwotfTsK LQotc3RhdGljIGNvbnN0IGNoYXIgKnBsYW5lX3R5cGVfcHJvcF9uYW1lc1tOVU1fUExBTkVfVFlQ RV9QUk9QU10gPSB7Ci0JIlByaW1hcnkiLAotCSJPdmVybGF5IiwKLQkiQ3Vyc29yIgotfTsKLQot c3RydWN0IGttc19hdG9taWNfYmxvYiB7Ci0JdWludDMyX3QgaWQ7IC8qIDAgaWYgbm90IGFscmVh ZHkgYWxsb2NhdGVkICovCi0Jc2l6ZV90IGxlbjsKLQl2b2lkICpkYXRhOwotfTsKLQotc3RydWN0 IGttc19hdG9taWNfY29ubmVjdG9yX3N0YXRlIHsKLQlzdHJ1Y3Qga21zX2F0b21pY19zdGF0ZSAq c3RhdGU7Ci0JdWludDMyX3Qgb2JqOwotCXVpbnQzMl90IGNydGNfaWQ7Ci19OwotCi1zdHJ1Y3Qg a21zX2F0b21pY19wbGFuZV9zdGF0ZSB7Ci0Jc3RydWN0IGttc19hdG9taWNfc3RhdGUgKnN0YXRl OwotCXVpbnQzMl90IG9iajsKLQllbnVtIHBsYW5lX3R5cGUgdHlwZTsKLQl1aW50MzJfdCBjcnRj X21hc2s7Ci0JdWludDMyX3QgY3J0Y19pZDsgLyogMCB0byBkaXNhYmxlICovCi0JdWludDMyX3Qg ZmJfaWQ7IC8qIDAgdG8gZGlzYWJsZSAqLwotCXVpbnQzMl90IHNyY194LCBzcmNfeSwgc3JjX3cs IHNyY19oOyAvKiAxNi4xNiBmaXhlZC1wb2ludCAqLwotCXVpbnQzMl90IGNydGNfeCwgY3J0Y195 LCBjcnRjX3csIGNydGNfaDsgLyogbm9ybWFsIGludGVnZXJzICovCi0JaW50MzJfdCBmZW5jZV9m ZDsKLX07Ci0KLXN0cnVjdCBrbXNfYXRvbWljX2NydGNfc3RhdGUgewotCXN0cnVjdCBrbXNfYXRv bWljX3N0YXRlICpzdGF0ZTsKLQl1aW50MzJfdCBvYmo7Ci0JaW50IGlkeDsKLQlib29sIGFjdGl2 ZTsKLQlpbnQzMl90ICpvdXRfZmVuY2VfcHRyOwotCXN0cnVjdCBrbXNfYXRvbWljX2Jsb2IgbW9k ZTsKLX07Ci0KLXN0cnVjdCBrbXNfYXRvbWljX3N0YXRlIHsKLQlzdHJ1Y3Qga21zX2F0b21pY19j b25uZWN0b3Jfc3RhdGUgKmNvbm5lY3RvcnM7Ci0JaW50IG51bV9jb25uZWN0b3JzOwotCXN0cnVj dCBrbXNfYXRvbWljX2NydGNfc3RhdGUgKmNydGNzOwotCWludCBudW1fY3J0Y3M7Ci0Jc3RydWN0 IGttc19hdG9taWNfcGxhbmVfc3RhdGUgKnBsYW5lczsKLQlpbnQgbnVtX3BsYW5lczsKLQlzdHJ1 Y3Qga21zX2F0b21pY19kZXNjICpkZXNjOwotfTsKLQotc3RydWN0IGttc19hdG9taWNfZGVzYyB7 Ci0JaW50IGZkOwotCXVpbnQzMl90IHByb3BzX2Nvbm5lY3RvcltJR1RfTlVNX0NPTk5FQ1RPUl9Q Uk9QU107Ci0JdWludDMyX3QgcHJvcHNfY3J0Y1tJR1RfTlVNX0NSVENfUFJPUFNdOwotCXVpbnQz Ml90IHByb3BzX3BsYW5lW0lHVF9OVU1fUExBTkVfUFJPUFNdOwotCXVpbnQ2NF90IHByb3BzX3Bs YW5lX3R5cGVbTlVNX1BMQU5FX1RZUEVfUFJPUFNdOwotfTsKLQotc3RhdGljIHVpbnQzMl90IGJs b2JfZHVwbGljYXRlKGludCBmZCwgdWludDMyX3QgaWRfb3JpZykKK3N0YXRpYyBib29sIHBsYW5l X2ZpbHRlcihlbnVtIGlndF9hdG9taWNfcGxhbmVfcHJvcGVydGllcyBwcm9wKQogewotCWRybU1v ZGVQcm9wZXJ0eUJsb2JQdHIgb3JpZyA9IGRybU1vZGVHZXRQcm9wZXJ0eUJsb2IoZmQsIGlkX29y aWcpOwotCXVpbnQzMl90IGlkX25ldzsKLQotCWlndF9hc3NlcnQob3JpZyk7Ci0JZG9fb3JfZGll KGRybU1vZGVDcmVhdGVQcm9wZXJ0eUJsb2IoZmQsIG9yaWctPmRhdGEsIG9yaWctPmxlbmd0aCwK LQkJCQkJICAgICZpZF9uZXcpKTsKLQlkcm1Nb2RlRnJlZVByb3BlcnR5QmxvYihvcmlnKTsKKwlp ZiAoKDEgPDwgcHJvcCkgJiBJR1RfUExBTkVfQ09PUkRfQ0hBTkdFRF9NQVNLKQorCQlyZXR1cm4g ZmFsc2U7CiAKLQlyZXR1cm4gaWRfbmV3OwotfQotCi0jZGVmaW5lIGNydGNfc2V0X3Byb3AocmVx LCBjcnRjLCBwcm9wLCB2YWx1ZSkgXAotCWlndF9hc3NlcnRfbHQoMCwgZHJtTW9kZUF0b21pY0Fk ZFByb3BlcnR5KHJlcSwgY3J0Yy0+b2JqLCBcCi0JCQkJCQkgIGNydGMtPnN0YXRlLT5kZXNjLT5w cm9wc19jcnRjW3Byb3BdLCBcCi0JCQkJCQkgIHZhbHVlKSk7Ci0KLSNkZWZpbmUgcGxhbmVfc2V0 X3Byb3AocmVxLCBwbGFuZSwgcHJvcCwgdmFsdWUpIFwKLQlpZ3RfYXNzZXJ0X2x0KDAsIGRybU1v ZGVBdG9taWNBZGRQcm9wZXJ0eShyZXEsIHBsYW5lLT5vYmosIFwKLQkJCQkJCSAgcGxhbmUtPnN0 YXRlLT5kZXNjLT5wcm9wc19wbGFuZVtwcm9wXSwgXAotCQkJCQkJICB2YWx1ZSkpOwotCi0jZGVm aW5lIGRvX2F0b21pY19jb21taXQoZmQsIHJlcSwgZmxhZ3MpIFwKLQlkb19vcl9kaWUoZHJtTW9k ZUF0b21pY0NvbW1pdChmZCwgcmVxLCBmbGFncywgTlVMTCkpOworCWlmIChwcm9wID09IElHVF9Q TEFORV9DUlRDX0lEIHx8IHByb3AgPT0gSUdUX1BMQU5FX0ZCX0lEKQorCQlyZXR1cm4gZmFsc2U7 CiAKLSNkZWZpbmUgZG9fYXRvbWljX2NvbW1pdF9lcnIoZmQsIHJlcSwgZmxhZ3MsIGVycikgeyBc Ci0JaWd0X2Fzc2VydF9uZXEoZHJtTW9kZUF0b21pY0NvbW1pdChmZCwgcmVxLCBmbGFncywgTlVM TCksIDApOyBcCi0JaWd0X2Fzc2VydF9lcShlcnJubywgZXJyKTsgXAotfQotCi0jZGVmaW5lIGNy dGNfY29tbWl0X2F0b21pYyhjcnRjLCBwbGFuZSwgcmVxLCByZWxheCwgZmxhZ3MpIHsgXAotCWRy bU1vZGVBdG9taWNTZXRDdXJzb3IocmVxLCAwKTsgXAotCWNydGNfcG9wdWxhdGVfcmVxKGNydGMs IHJlcSk7IFwKLQlwbGFuZV9wb3B1bGF0ZV9yZXEocGxhbmUsIHJlcSk7IFwKLQlkb19hdG9taWNf Y29tbWl0KChjcnRjKS0+c3RhdGUtPmRlc2MtPmZkLCByZXEsIGZsYWdzKTsgXAotCWlmICghKGZs YWdzICYgRFJNX01PREVfQVRPTUlDX1RFU1RfT05MWSkpIHsgXAotCQljcnRjX2NoZWNrX2N1cnJl bnRfc3RhdGUoY3J0YywgcGxhbmUsIHJlbGF4KTsgXAotCQlwbGFuZV9jaGVja19jdXJyZW50X3N0 YXRlKHBsYW5lLCByZWxheCk7IFwKLQl9IFwKLX0KKwlpZiAocHJvcCA9PSBJR1RfUExBTkVfSU5f RkVOQ0VfRkQpCisJCXJldHVybiBmYWxzZTsKIAotI2RlZmluZSBjcnRjX2NvbW1pdF9hdG9taWNf ZXJyKGNydGMsIHBsYW5lLCBjcnRjX29sZCwgcGxhbmVfb2xkLCByZXEsIGZsYWdzLCByZWxheCwg ZSkgeyBcCi0JZHJtTW9kZUF0b21pY1NldEN1cnNvcihyZXEsIDApOyBcCi0JY3J0Y19wb3B1bGF0 ZV9yZXEoY3J0YywgcmVxKTsgXAotCXBsYW5lX3BvcHVsYXRlX3JlcShwbGFuZSwgcmVxKTsgXAot CWRvX2F0b21pY19jb21taXRfZXJyKChjcnRjKS0+c3RhdGUtPmRlc2MtPmZkLCByZXEsIGZsYWdz LCBlKTsgXAotCWNydGNfY2hlY2tfY3VycmVudF9zdGF0ZShjcnRjX29sZCwgcGxhbmVfb2xkLCBy ZWxheCk7IFwKLQlwbGFuZV9jaGVja19jdXJyZW50X3N0YXRlKHBsYW5lX29sZCwgcmVsYXgpOyBc CisJLyogRG9uJ3QgY2FyZSBhYm91dCBvdGhlciBwcm9wZXJ0aWVzICovCisJcmV0dXJuIHRydWU7 CiB9CiAKLSNkZWZpbmUgcGxhbmVfY29tbWl0X2F0b21pYyhwbGFuZSwgcmVxLCByZWxheCkgeyBc Ci0JZHJtTW9kZUF0b21pY1NldEN1cnNvcihyZXEsIDApOyBcCi0JcGxhbmVfcG9wdWxhdGVfcmVx KHBsYW5lLCByZXEpOyBcCi0JZG9fYXRvbWljX2NvbW1pdCgocGxhbmUpLT5zdGF0ZS0+ZGVzYy0+ ZmQsIHJlcSwgMCk7IFwKLQlwbGFuZV9jaGVja19jdXJyZW50X3N0YXRlKHBsYW5lLCByZWxheCk7 IFwKLX0KLQotI2RlZmluZSBwbGFuZV9jb21taXRfYXRvbWljX2VycihwbGFuZSwgcGxhbmVfb2xk LCByZXEsIHJlbGF4LCBlKSB7IFwKLQlkcm1Nb2RlQXRvbWljU2V0Q3Vyc29yKHJlcSwgMCk7IFwK LQlwbGFuZV9wb3B1bGF0ZV9yZXEocGxhbmUsIHJlcSk7IFwKLQlkb19hdG9taWNfY29tbWl0X2Vy cigocGxhbmUpLT5zdGF0ZS0+ZGVzYy0+ZmQsIHJlcSwgMCwgZSk7IFwKLQlwbGFuZV9jaGVja19j dXJyZW50X3N0YXRlKHBsYW5lX29sZCwgcmVsYXgpOyBcCi19Ci0KLXN0YXRpYyB2b2lkCi1jb25u ZWN0b3JfZ2V0X2N1cnJlbnRfc3RhdGUoc3RydWN0IGttc19hdG9taWNfY29ubmVjdG9yX3N0YXRl ICpjb25uZWN0b3IpCi17Ci0JZHJtTW9kZU9iamVjdFByb3BlcnRpZXNQdHIgcHJvcHM7Ci0JaW50 IGk7Ci0KLQlwcm9wcyA9IGRybU1vZGVPYmplY3RHZXRQcm9wZXJ0aWVzKGNvbm5lY3Rvci0+c3Rh dGUtPmRlc2MtPmZkLAotCQkJCQkgICBjb25uZWN0b3ItPm9iaiwKLQkJCQkJICAgRFJNX01PREVf T0JKRUNUX0NPTk5FQ1RPUik7Ci0JaWd0X2Fzc2VydChwcm9wcyk7Ci0KLQlmb3IgKGkgPSAwOyBp IDwgcHJvcHMtPmNvdW50X3Byb3BzOyBpKyspIHsKLQkJdWludDMyX3QgKnByb3BfaWRzID0gY29u bmVjdG9yLT5zdGF0ZS0+ZGVzYy0+cHJvcHNfY29ubmVjdG9yOwotCi0JCWlmIChwcm9wcy0+cHJv cHNbaV0gPT0gcHJvcF9pZHNbSUdUX0NPTk5FQ1RPUl9DUlRDX0lEXSkKLQkJCWNvbm5lY3Rvci0+ Y3J0Y19pZCA9IHByb3BzLT5wcm9wX3ZhbHVlc1tpXTsKLQl9Ci0JZHJtTW9kZUZyZWVPYmplY3RQ cm9wZXJ0aWVzKHByb3BzKTsKLX0KLQotI2lmIDAKLS8qIFhYWDogQ2hlY2tpbmcgdGhpcyByZXBl YXRlZGx5IGFjdHVhbGx5IGhhbmdzIHRoZSBHUFUuIEkgaGF2ZSBsaXRlcmFsbHkgbm8KLSAqICAg ICAgaWRlYSB3aHkuICovCi1zdGF0aWMgdm9pZAotY29ubmVjdG9yX2NoZWNrX2N1cnJlbnRfc3Rh dGUoc3RydWN0IGttc19hdG9taWNfY29ubmVjdG9yX3N0YXRlICpjb25uZWN0b3IpCi17Ci0Jc3Ry dWN0IGttc19hdG9taWNfY29ubmVjdG9yX3N0YXRlIGNvbm5lY3Rvcl9rZXJuZWw7Ci0JZHJtTW9k ZUNvbm5lY3RvclB0ciBsZWdhY3k7Ci0JdWludDMyX3QgY3J0Y19pZDsKLQotCWxlZ2FjeSA9IGRy bU1vZGVHZXRDb25uZWN0b3JDdXJyZW50KGNvbm5lY3Rvci0+c3RhdGUtPmRlc2MtPmZkLAotCQkJ CQkgICAgY29ubmVjdG9yLT5vYmopOwotCWlndF9hc3NlcnQobGVnYWN5KTsKLQotCWlmIChsZWdh Y3ktPmVuY29kZXJfaWQpIHsKLQkJZHJtTW9kZUVuY29kZXJQdHIgbGVnYWN5X2VuYzsKLQotCQls ZWdhY3lfZW5jID0gZHJtTW9kZUdldEVuY29kZXIoY29ubmVjdG9yLT5zdGF0ZS0+ZGVzYy0+ZmQs Ci0JCQkJCSAgICAgICBsZWdhY3ktPmVuY29kZXJfaWQpOwotCQlpZ3RfYXNzZXJ0KGxlZ2FjeV9l bmMpOwotCi0JCWNydGNfaWQgPSBsZWdhY3lfZW5jLT5jcnRjX2lkOwotCQlkcm1Nb2RlRnJlZUVu Y29kZXIobGVnYWN5X2VuYyk7Ci0JfSBlbHNlIHsKLQkJY3J0Y19pZCA9IDA7Ci0JfQotCi0JaWd0 X2Fzc2VydF9lcV91MzIoY3J0Y19pZCwgY29ubmVjdG9yLT5jcnRjX2lkKTsKLQotCW1lbWNweSgm Y29ubmVjdG9yX2tlcm5lbCwgY29ubmVjdG9yLCBzaXplb2YoY29ubmVjdG9yX2tlcm5lbCkpOwot CWNvbm5lY3Rvcl9nZXRfY3VycmVudF9zdGF0ZSgmY29ubmVjdG9yX2tlcm5lbCk7Ci0JZG9fb3Jf ZGllKG1lbWNtcCgmY29ubmVjdG9yX2tlcm5lbCwgY29ubmVjdG9yLAotCQkJIHNpemVvZihjb25u ZWN0b3Jfa2VybmVsKSkpOwotCi0JZHJtTW9kZUZyZWVDb25uZWN0b3IobGVnYWN5KTsKLX0KLSNl bmRpZgotCi1zdGF0aWMgc3RydWN0IGttc19hdG9taWNfY29ubmVjdG9yX3N0YXRlICoKLWZpbmRf Y29ubmVjdG9yKHN0cnVjdCBrbXNfYXRvbWljX3N0YXRlICpzdGF0ZSwKLQkgICAgICAgc3RydWN0 IGttc19hdG9taWNfY3J0Y19zdGF0ZSAqY3J0YykKK3N0YXRpYyB2b2lkIHBsYW5lX2dldF9jdXJy ZW50X3N0YXRlKGlndF9wbGFuZV90ICpwbGFuZSwgdWludDY0X3QgKnZhbHVlcykKIHsKIAlpbnQg aTsKIAotCWZvciAoaSA9IDA7IGkgPCBzdGF0ZS0+bnVtX2Nvbm5lY3RvcnM7IGkrKykgewotCQlz dHJ1Y3Qga21zX2F0b21pY19jb25uZWN0b3Jfc3RhdGUgKmNvbm5lY3RvciA9Ci0JCQkmc3RhdGUt PmNvbm5lY3RvcnNbaV07Ci0KLQkJaWYgKCFjb25uZWN0b3ItPm9iaikKKwlmb3IgKGkgPSAwOyBp IDwgSUdUX05VTV9QTEFORV9QUk9QUzsgaSsrKSB7CisJCWlmIChwbGFuZV9maWx0ZXIoaSkpIHsK KwkJCXZhbHVlc1tpXSA9IDA7CiAJCQljb250aW51ZTsKLQkJaWYgKGNydGMgJiYgY29ubmVjdG9y LT5jcnRjX2lkICE9IGNydGMtPm9iaikKLQkJCWNvbnRpbnVlOwotCi0JCXJldHVybiBjb25uZWN0 b3I7Ci0JfQotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkIHBsYW5lX3BvcHVsYXRl X3JlcShzdHJ1Y3Qga21zX2F0b21pY19wbGFuZV9zdGF0ZSAqcGxhbmUsCi0JCQkgICAgICAgZHJt TW9kZUF0b21pY1JlcSAqcmVxKQotewotCWlmIChwbGFuZS0+ZmVuY2VfZmQpCi0JCXBsYW5lX3Nl dF9wcm9wKHJlcSwgcGxhbmUsIElHVF9QTEFORV9JTl9GRU5DRV9GRCwgcGxhbmUtPmZlbmNlX2Zk KTsKLQotCXBsYW5lX3NldF9wcm9wKHJlcSwgcGxhbmUsIElHVF9QTEFORV9DUlRDX0lELCBwbGFu ZS0+Y3J0Y19pZCk7Ci0JcGxhbmVfc2V0X3Byb3AocmVxLCBwbGFuZSwgSUdUX1BMQU5FX0ZCX0lE LCBwbGFuZS0+ZmJfaWQpOwotCXBsYW5lX3NldF9wcm9wKHJlcSwgcGxhbmUsIElHVF9QTEFORV9T UkNfWCwgcGxhbmUtPnNyY194KTsKLQlwbGFuZV9zZXRfcHJvcChyZXEsIHBsYW5lLCBJR1RfUExB TkVfU1JDX1ksIHBsYW5lLT5zcmNfeSk7Ci0JcGxhbmVfc2V0X3Byb3AocmVxLCBwbGFuZSwgSUdU X1BMQU5FX1NSQ19XLCBwbGFuZS0+c3JjX3cpOwotCXBsYW5lX3NldF9wcm9wKHJlcSwgcGxhbmUs IElHVF9QTEFORV9TUkNfSCwgcGxhbmUtPnNyY19oKTsKLQlwbGFuZV9zZXRfcHJvcChyZXEsIHBs YW5lLCBJR1RfUExBTkVfQ1JUQ19YLCBwbGFuZS0+Y3J0Y194KTsKLQlwbGFuZV9zZXRfcHJvcChy ZXEsIHBsYW5lLCBJR1RfUExBTkVfQ1JUQ19ZLCBwbGFuZS0+Y3J0Y195KTsKLQlwbGFuZV9zZXRf cHJvcChyZXEsIHBsYW5lLCBJR1RfUExBTkVfQ1JUQ19XLCBwbGFuZS0+Y3J0Y193KTsKLQlwbGFu ZV9zZXRfcHJvcChyZXEsIHBsYW5lLCBJR1RfUExBTkVfQ1JUQ19ILCBwbGFuZS0+Y3J0Y19oKTsK LX0KLQotc3RhdGljIHZvaWQgcGxhbmVfZ2V0X2N1cnJlbnRfc3RhdGUoc3RydWN0IGttc19hdG9t aWNfcGxhbmVfc3RhdGUgKnBsYW5lKQotewotCXN0cnVjdCBrbXNfYXRvbWljX2Rlc2MgKmRlc2Mg PSBwbGFuZS0+c3RhdGUtPmRlc2M7Ci0JZHJtTW9kZU9iamVjdFByb3BlcnRpZXNQdHIgcHJvcHM7 Ci0JaW50IGk7Ci0KLQlwcm9wcyA9IGRybU1vZGVPYmplY3RHZXRQcm9wZXJ0aWVzKGRlc2MtPmZk LCBwbGFuZS0+b2JqLAotCQkJCQkgICBEUk1fTU9ERV9PQkpFQ1RfUExBTkUpOwotCWlndF9hc3Nl cnQocHJvcHMpOwotCi0JZm9yIChpID0gMDsgaSA8IHByb3BzLT5jb3VudF9wcm9wczsgaSsrKSB7 Ci0JCXVpbnQzMl90ICpwcm9wX2lkcyA9IGRlc2MtPnByb3BzX3BsYW5lOwotCi0JCWlmIChwcm9w cy0+cHJvcHNbaV0gPT0gcHJvcF9pZHNbSUdUX1BMQU5FX0NSVENfSURdKQotCQkJcGxhbmUtPmNy dGNfaWQgPSBwcm9wcy0+cHJvcF92YWx1ZXNbaV07Ci0JCWVsc2UgaWYgKHByb3BzLT5wcm9wc1tp XSA9PSBwcm9wX2lkc1tJR1RfUExBTkVfRkJfSURdKQotCQkJcGxhbmUtPmZiX2lkID0gcHJvcHMt PnByb3BfdmFsdWVzW2ldOwotCQllbHNlIGlmIChwcm9wcy0+cHJvcHNbaV0gPT0gcHJvcF9pZHNb SUdUX1BMQU5FX0NSVENfWF0pCi0JCQlwbGFuZS0+Y3J0Y194ID0gcHJvcHMtPnByb3BfdmFsdWVz W2ldOwotCQllbHNlIGlmIChwcm9wcy0+cHJvcHNbaV0gPT0gcHJvcF9pZHNbSUdUX1BMQU5FX0NS VENfWV0pCi0JCQlwbGFuZS0+Y3J0Y195ID0gcHJvcHMtPnByb3BfdmFsdWVzW2ldOwotCQllbHNl IGlmIChwcm9wcy0+cHJvcHNbaV0gPT0gcHJvcF9pZHNbSUdUX1BMQU5FX0NSVENfV10pCi0JCQlw bGFuZS0+Y3J0Y193ID0gcHJvcHMtPnByb3BfdmFsdWVzW2ldOwotCQllbHNlIGlmIChwcm9wcy0+ cHJvcHNbaV0gPT0gcHJvcF9pZHNbSUdUX1BMQU5FX0NSVENfSF0pCi0JCQlwbGFuZS0+Y3J0Y19o ID0gcHJvcHMtPnByb3BfdmFsdWVzW2ldOwotCQllbHNlIGlmIChwcm9wcy0+cHJvcHNbaV0gPT0g cHJvcF9pZHNbSUdUX1BMQU5FX1NSQ19YXSkKLQkJCXBsYW5lLT5zcmNfeCA9IHByb3BzLT5wcm9w X3ZhbHVlc1tpXTsKLQkJZWxzZSBpZiAocHJvcHMtPnByb3BzW2ldID09IHByb3BfaWRzW0lHVF9Q TEFORV9TUkNfWV0pCi0JCQlwbGFuZS0+c3JjX3kgPSBwcm9wcy0+cHJvcF92YWx1ZXNbaV07Ci0J CWVsc2UgaWYgKHByb3BzLT5wcm9wc1tpXSA9PSBwcm9wX2lkc1tJR1RfUExBTkVfU1JDX1ddKQot CQkJcGxhbmUtPnNyY193ID0gcHJvcHMtPnByb3BfdmFsdWVzW2ldOwotCQllbHNlIGlmIChwcm9w cy0+cHJvcHNbaV0gPT0gcHJvcF9pZHNbSUdUX1BMQU5FX1NSQ19IXSkKLQkJCXBsYW5lLT5zcmNf aCA9IHByb3BzLT5wcm9wX3ZhbHVlc1tpXTsKLQkJZWxzZSBpZiAocHJvcHMtPnByb3BzW2ldID09 IHByb3BfaWRzW0lHVF9QTEFORV9UWVBFXSkgewotCQkJaW50IGo7Ci0KLQkJCWZvciAoaiA9IDA7 IGogPCBBUlJBWV9TSVpFKGRlc2MtPnByb3BzX3BsYW5lX3R5cGUpOyBqKyspIHsKLQkJCQlpZiAo cHJvcHMtPnByb3BfdmFsdWVzW2ldID09IGRlc2MtPnByb3BzX3BsYW5lX3R5cGVbal0pIHsKLQkJ CQkJcGxhbmUtPnR5cGUgPSBqOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9CiAJCX0KLQl9CiAK LQlkcm1Nb2RlRnJlZU9iamVjdFByb3BlcnRpZXMocHJvcHMpOworCQl2YWx1ZXNbaV0gPSBpZ3Rf cGxhbmVfZ2V0X3Byb3AocGxhbmUsIGkpOworCX0KIH0KIAotc3RhdGljIHZvaWQgcGxhbmVfY2hl Y2tfY3VycmVudF9zdGF0ZShzdHJ1Y3Qga21zX2F0b21pY19wbGFuZV9zdGF0ZSAqcGxhbmUsCitz dGF0aWMgdm9pZCBwbGFuZV9jaGVja19jdXJyZW50X3N0YXRlKGlndF9wbGFuZV90ICpwbGFuZSwg Y29uc3QgdWludDY0X3QgKnZhbHVlcywKIAkJCQkgICAgICBlbnVtIGttc19hdG9taWNfY2hlY2tf cmVsYXggcmVsYXgpCiB7CiAJZHJtTW9kZVBsYW5lUHRyIGxlZ2FjeTsKLQlzdHJ1Y3Qga21zX2F0 b21pY19wbGFuZV9zdGF0ZSBwbGFuZV9rZXJuZWw7CisJdWludDY0X3QgY3VycmVudF92YWx1ZXNb SUdUX05VTV9QTEFORV9QUk9QU107CisJaW50IGk7CiAKLQlsZWdhY3kgPSBkcm1Nb2RlR2V0UGxh bmUocGxhbmUtPnN0YXRlLT5kZXNjLT5mZCwgcGxhbmUtPm9iaik7CisJbGVnYWN5ID0gZHJtTW9k ZUdldFBsYW5lKHBsYW5lLT5waXBlLT5kaXNwbGF5LT5kcm1fZmQsIHBsYW5lLT5kcm1fcGxhbmUt PnBsYW5lX2lkKTsKIAlpZ3RfYXNzZXJ0KGxlZ2FjeSk7CiAKLQlpZ3RfYXNzZXJ0X2VxX3UzMihs ZWdhY3ktPmNydGNfaWQsIHBsYW5lLT5jcnRjX2lkKTsKKwlpZ3RfYXNzZXJ0X2VxX3UzMihsZWdh Y3ktPmNydGNfaWQsIHZhbHVlc1tJR1RfUExBTkVfQ1JUQ19JRF0pOwogCiAJaWYgKCEocmVsYXgg JiBQTEFORV9SRUxBWF9GQikpCi0JCWlndF9hc3NlcnRfZXFfdTMyKGxlZ2FjeS0+ZmJfaWQsIHBs YW5lLT5mYl9pZCk7CisJCWlndF9hc3NlcnRfZXFfdTMyKGxlZ2FjeS0+ZmJfaWQsIHZhbHVlc1tJ R1RfUExBTkVfRkJfSURdKTsKIAotCW1lbWNweSgmcGxhbmVfa2VybmVsLCBwbGFuZSwgc2l6ZW9m KHBsYW5lX2tlcm5lbCkpOwotCXBsYW5lX2dldF9jdXJyZW50X3N0YXRlKCZwbGFuZV9rZXJuZWwp OworCXBsYW5lX2dldF9jdXJyZW50X3N0YXRlKHBsYW5lLCBjdXJyZW50X3ZhbHVlcyk7CiAKIAkv KiBMZWdhY3kgY3Vyc29yIGlvY3RscyBjcmVhdGUgdGhlaXIgb3duLCB1bmtub3dhYmxlLCBpbnRl cm5hbAogCSAqIGZyYW1lYnVmZmVyIHdoaWNoIHdlIGNhbid0IHJlYXNvbiBhYm91dC4gKi8KIAlp ZiAocmVsYXggJiBQTEFORV9SRUxBWF9GQikKLQkJcGxhbmVfa2VybmVsLmZiX2lkID0gcGxhbmUt PmZiX2lkOwotCWRvX29yX2RpZShtZW1jbXAoJnBsYW5lX2tlcm5lbCwgcGxhbmUsIHNpemVvZihw bGFuZV9rZXJuZWwpKSk7CisJCWN1cnJlbnRfdmFsdWVzW0lHVF9QTEFORV9GQl9JRF0gPSB2YWx1 ZXNbSUdUX1BMQU5FX0ZCX0lEXTsKKworCWZvciAoaSA9IDA7IGkgPCBJR1RfTlVNX1BMQU5FX1BS T1BTOyBpKyspCisJCWlmICghcGxhbmVfZmlsdGVyKGkpKQorCQkJaWd0X2Fzc2VydF9lcV91NjQo Y3VycmVudF92YWx1ZXNbaV0sIHZhbHVlc1tpXSk7CiAKIAlkcm1Nb2RlRnJlZVBsYW5lKGxlZ2Fj eSk7CiB9CiAKLXN0YXRpYyB2b2lkIHBsYW5lX2NvbW1pdF9sZWdhY3koc3RydWN0IGttc19hdG9t aWNfcGxhbmVfc3RhdGUgKnBsYW5lLAorc3RhdGljIHZvaWQgcGxhbmVfY29tbWl0KGlndF9wbGFu ZV90ICpwbGFuZSwgZW51bSBpZ3RfY29tbWl0X3N0eWxlIHMsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGVudW0ga21zX2F0b21pY19jaGVja19yZWxheCByZWxheCkKIHsKLQlkb19v cl9kaWUoZHJtTW9kZVNldFBsYW5lKHBsYW5lLT5zdGF0ZS0+ZGVzYy0+ZmQsIHBsYW5lLT5vYmos Ci0JCQkJICBwbGFuZS0+Y3J0Y19pZCwKLQkJCQkgIHBsYW5lLT5mYl9pZCwgMCwKLQkJCQkgIHBs YW5lLT5jcnRjX3gsIHBsYW5lLT5jcnRjX3ksCi0JCQkJICBwbGFuZS0+Y3J0Y193LCBwbGFuZS0+ Y3J0Y19oLAotCQkJCSAgcGxhbmUtPnNyY194LCBwbGFuZS0+c3JjX3ksCi0JCQkJICBwbGFuZS0+ c3JjX3csIHBsYW5lLT5zcmNfaCkpOwotCXBsYW5lX2NoZWNrX2N1cnJlbnRfc3RhdGUocGxhbmUs IHJlbGF4KTsKKwlpZ3RfZGlzcGxheV9jb21taXQyKHBsYW5lLT5waXBlLT5kaXNwbGF5LCBzKTsK KwlwbGFuZV9jaGVja19jdXJyZW50X3N0YXRlKHBsYW5lLCBwbGFuZS0+dmFsdWVzLCByZWxheCk7 CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qga21zX2F0b21pY19wbGFuZV9zdGF0ZSAqCi1maW5kX3BsYW5l KHN0cnVjdCBrbXNfYXRvbWljX3N0YXRlICpzdGF0ZSwgZW51bSBwbGFuZV90eXBlIHR5cGUsCi0J ICAgc3RydWN0IGttc19hdG9taWNfY3J0Y19zdGF0ZSAqY3J0YykKK3N0YXRpYyB2b2lkIHBsYW5l X2NvbW1pdF9hdG9taWNfZXJyKGlndF9wbGFuZV90ICpwbGFuZSwKKwkJCQkgICAgZW51bSBrbXNf YXRvbWljX2NoZWNrX3JlbGF4IHJlbGF4LAorCQkJCSAgICBpbnQgZXJyKQogewotCXN0cnVjdCBr bXNfYXRvbWljX3BsYW5lX3N0YXRlICpyZXQgPSBOVUxMOwotCWludCBpOwotCi0JZm9yIChpID0g MDsgaSA8IHN0YXRlLT5udW1fcGxhbmVzOyBpKyspIHsKLQkJc3RydWN0IGttc19hdG9taWNfcGxh bmVfc3RhdGUgKnBsYW5lID0gJnN0YXRlLT5wbGFuZXNbaV07Ci0KLQkJaWYgKCFwbGFuZS0+b2Jq KQotCQkJY29udGludWU7Ci0JCWlmICh0eXBlICE9IE5VTV9QTEFORV9UWVBFX1BST1BTICYmIHBs YW5lLT50eXBlICE9IHR5cGUpCi0JCQljb250aW51ZTsKLQkJaWYgKGNydGMgJiYgIShwbGFuZS0+ Y3J0Y19tYXNrICYgKDEgPDwgY3J0Yy0+aWR4KSkpCi0JCQljb250aW51ZTsKKwl1aW50NjRfdCBj dXJyZW50X3ZhbHVlc1tJR1RfTlVNX1BMQU5FX1BST1BTXTsKIAotCQlwbGFuZV9nZXRfY3VycmVu dF9zdGF0ZShwbGFuZSk7CisJcGxhbmVfZ2V0X2N1cnJlbnRfc3RhdGUocGxhbmUsIGN1cnJlbnRf dmFsdWVzKTsKIAotCQkvKiBUcnkgdG8gZmluZCBhIHBsYW5lIHRoYXQncyBhbHJlYWR5IG9uIHRo aXMgQ1JUQy4gSW4KLQkJICogcGFydGljdWxhciwgdGhpcyBlbnN1cmVzIHRoYXQgZm9yIHNwZWNp YWwgKHByaW1hcnkvY3Vyc29yKQotCQkgKiBwbGFuZXMgdGhhdCBjYW4gYmUgb24gbXVsdGlwbGUg Q1JUQ3MsIHdlIGZpbmQgdGhlIHNhbWUKLQkJICogb25lIHRoYXQgdGhlIGxlZ2FjeSBpb2N0bHMg d2lsbC4gKi8KLQkJaWYgKCFjcnRjIHx8IHBsYW5lLT5jcnRjX2lkID09IGNydGMtPm9iaikKLQkJ CXJldHVybiBwbGFuZTsKLQotCQlyZXQgPSBwbGFuZTsKLQl9CisJaWd0X2Fzc2VydF9lcSgtZXJy LCBpZ3RfZGlzcGxheV90cnlfY29tbWl0MihwbGFuZS0+cGlwZS0+ZGlzcGxheSwgQ09NTUlUX0FU T01JQykpOwogCi0JcmV0dXJuIHJldDsKKwlwbGFuZV9jaGVja19jdXJyZW50X3N0YXRlKHBsYW5l LCBjdXJyZW50X3ZhbHVlcywgcmVsYXgpOwogfQogCi1zdGF0aWMgdm9pZCBjcnRjX3BvcHVsYXRl X3JlcShzdHJ1Y3Qga21zX2F0b21pY19jcnRjX3N0YXRlICpjcnRjLAotCQkJICAgICAgZHJtTW9k ZUF0b21pY1JlcSAqcmVxKQorc3RhdGljIGJvb2wgY3J0Y19maWx0ZXIoZW51bSBpZ3RfYXRvbWlj X2NydGNfcHJvcGVydGllcyBwcm9wKQogewotCWlmIChjcnRjLT5vdXRfZmVuY2VfcHRyKQotCQlj cnRjX3NldF9wcm9wKHJlcSwgY3J0YywgSUdUX0NSVENfT1VUX0ZFTkNFX1BUUiwKLQkJCSAgICAg IHRvX3VzZXJfcG9pbnRlcihjcnRjLT5vdXRfZmVuY2VfcHRyKSk7CisJaWYgKHByb3AgPT0gSUdU X0NSVENfTU9ERV9JRCB8fCBwcm9wID09IElHVF9DUlRDX0FDVElWRSkKKwkJcmV0dXJuIGZhbHNl OwogCi0JY3J0Y19zZXRfcHJvcChyZXEsIGNydGMsIElHVF9DUlRDX01PREVfSUQsIGNydGMtPm1v ZGUuaWQpOwotCWNydGNfc2V0X3Byb3AocmVxLCBjcnRjLCBJR1RfQ1JUQ19BQ1RJVkUsIGNydGMt PmFjdGl2ZSk7CisJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB2b2lkIGNydGNfZ2V0X2N1cnJl bnRfc3RhdGUoc3RydWN0IGttc19hdG9taWNfY3J0Y19zdGF0ZSAqY3J0YykKK3N0YXRpYyB2b2lk IGNydGNfZ2V0X2N1cnJlbnRfc3RhdGUoaWd0X3BpcGVfdCAqcGlwZSwgdWludDY0X3QgKnZhbHVl cykKIHsKLQlkcm1Nb2RlT2JqZWN0UHJvcGVydGllc1B0ciBwcm9wczsKIAlpbnQgaTsKIAotCXBy b3BzID0gZHJtTW9kZU9iamVjdEdldFByb3BlcnRpZXMoY3J0Yy0+c3RhdGUtPmRlc2MtPmZkLCBj cnRjLT5vYmosCi0JCQkJCSAgIERSTV9NT0RFX09CSkVDVF9DUlRDKTsKLQlpZ3RfYXNzZXJ0KHBy b3BzKTsKLQotCWZvciAoaSA9IDA7IGkgPCBwcm9wcy0+Y291bnRfcHJvcHM7IGkrKykgewotCQl1 aW50MzJfdCAqcHJvcF9pZHMgPSBjcnRjLT5zdGF0ZS0+ZGVzYy0+cHJvcHNfY3J0YzsKLQotCQlp ZiAocHJvcHMtPnByb3BzW2ldID09IHByb3BfaWRzW0lHVF9DUlRDX01PREVfSURdKSB7Ci0JCQlk cm1Nb2RlUHJvcGVydHlCbG9iUHRyIGJsb2I7Ci0KLQkJCWNydGMtPm1vZGUuaWQgPSBwcm9wcy0+ cHJvcF92YWx1ZXNbaV07Ci0JCQlpZiAoIWNydGMtPm1vZGUuaWQpIHsKLQkJCQljcnRjLT5tb2Rl LmxlbiA9IDA7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCWJsb2IgPSBkcm1Nb2RlR2V0UHJv cGVydHlCbG9iKGNydGMtPnN0YXRlLT5kZXNjLT5mZCwKLQkJCQkJCSAgICAgIGNydGMtPm1vZGUu aWQpOwotCQkJaWd0X2Fzc2VydChibG9iKTsKLQkJCWlndF9hc3NlcnRfZXFfdTMyKGJsb2ItPmxl bmd0aCwKLQkJCQkJICBzaXplb2Yoc3RydWN0IGRybV9tb2RlX21vZGVpbmZvKSk7Ci0KLQkJCWlm ICghY3J0Yy0+bW9kZS5kYXRhIHx8Ci0JCQkgICAgbWVtY21wKGNydGMtPm1vZGUuZGF0YSwgYmxv Yi0+ZGF0YSwgYmxvYi0+bGVuZ3RoKSAhPSAwKQotCQkJCWNydGMtPm1vZGUuZGF0YSA9IGJsb2It PmRhdGE7Ci0JCQljcnRjLT5tb2RlLmxlbiA9IGJsb2ItPmxlbmd0aDsKLQkJfQotCQllbHNlIGlm IChwcm9wcy0+cHJvcHNbaV0gPT0gcHJvcF9pZHNbSUdUX0NSVENfQUNUSVZFXSkgewotCQkJY3J0 Yy0+YWN0aXZlID0gcHJvcHMtPnByb3BfdmFsdWVzW2ldOworCWZvciAoaSA9IDA7IGkgPCBJR1Rf TlVNX0NSVENfUFJPUFM7IGkrKykgeworCQlpZiAoY3J0Y19maWx0ZXIoaSkpIHsKKwkJCXZhbHVl c1tpXSA9IDA7CisJCQljb250aW51ZTsKIAkJfQotCX0KIAotCWRybU1vZGVGcmVlT2JqZWN0UHJv cGVydGllcyhwcm9wcyk7CisJCXZhbHVlc1tpXSA9IGlndF9waXBlX29ial9nZXRfcHJvcChwaXBl LCBpKTsKKwl9CiB9CiAKLXN0YXRpYyB2b2lkIGNydGNfY2hlY2tfY3VycmVudF9zdGF0ZShzdHJ1 Y3Qga21zX2F0b21pY19jcnRjX3N0YXRlICpjcnRjLAotCQkJCSAgICAgc3RydWN0IGttc19hdG9t aWNfcGxhbmVfc3RhdGUgKnByaW1hcnksCitzdGF0aWMgdm9pZCBjcnRjX2NoZWNrX2N1cnJlbnRf c3RhdGUoaWd0X3BpcGVfdCAqcGlwZSwKKwkJCQkgICAgIGNvbnN0IHVpbnQ2NF90ICpwaXBlX3Zh bHVlcywKKwkJCQkgICAgIGNvbnN0IHVpbnQ2NF90ICpwcmltYXJ5X3ZhbHVlcywKIAkJCQkgICAg IGVudW0ga21zX2F0b21pY19jaGVja19yZWxheCByZWxheCkKIHsKLQlzdHJ1Y3Qga21zX2F0b21p Y19jcnRjX3N0YXRlIGNydGNfa2VybmVsOworCXVpbnQ2NF90IGN1cnJlbnRfcGlwZV92YWx1ZXNb SUdUX05VTV9DUlRDX1BST1BTXTsKIAlkcm1Nb2RlQ3J0Y1B0ciBsZWdhY3k7CisJZHJtTW9kZVBy b3BlcnR5QmxvYlJlcyAqbW9kZV9wcm9wID0gTlVMTDsKKwlzdHJ1Y3QgZHJtX21vZGVfbW9kZWlu Zm8gKm1vZGUgPSBOVUxMOwogCi0JbGVnYWN5ID0gZHJtTW9kZUdldENydGMoY3J0Yy0+c3RhdGUt PmRlc2MtPmZkLCBjcnRjLT5vYmopOwotCWlndF9hc3NlcnQobGVnYWN5KTsKLQotCWlndF9hc3Nl cnRfZXFfdTMyKGxlZ2FjeS0+Y3J0Y19pZCwgY3J0Yy0+b2JqKTsKLQlpZ3RfYXNzZXJ0X2VxX3Uz MihsZWdhY3ktPngsIHByaW1hcnktPnNyY194ID4+IDE2KTsKLQlpZ3RfYXNzZXJ0X2VxX3UzMihs ZWdhY3ktPnksIHByaW1hcnktPnNyY195ID4+IDE2KTsKLQotCWlmIChjcnRjLT5hY3RpdmUpCi0J CWlndF9hc3NlcnRfZXFfdTMyKGxlZ2FjeS0+YnVmZmVyX2lkLCBwcmltYXJ5LT5mYl9pZCk7Ci0J ZWxzZQotCQlpZ3RfYXNzZXJ0X2VxX3UzMihsZWdhY3ktPmJ1ZmZlcl9pZCwgMCk7CisJaWYgKHBp cGVfdmFsdWVzW0lHVF9DUlRDX01PREVfSURdKSB7CisJCW1vZGVfcHJvcCA9IGRybU1vZGVHZXRQ cm9wZXJ0eUJsb2IocGlwZS0+ZGlzcGxheS0+ZHJtX2ZkLAorCQkJCQkJICAgcGlwZV92YWx1ZXNb SUdUX0NSVENfTU9ERV9JRF0pOwogCi0JaWYgKGxlZ2FjeS0+bW9kZV92YWxpZCkgewotCQlpZ3Rf YXNzZXJ0X25lcShsZWdhY3ktPm1vZGVfdmFsaWQsIDApOwotCQlpZ3RfYXNzZXJ0X2VxKGNydGMt Pm1vZGUubGVuLAotCQkgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgZHJtX21vZGVfbW9kZWlu Zm8pKTsKLQkJZG9fb3JfZGllKG1lbWNtcCgmbGVnYWN5LT5tb2RlLCBjcnRjLT5tb2RlLmRhdGEs Ci0JCSAgICAgICAgICAgICAgICAgY3J0Yy0+bW9kZS5sZW4pKTsKLQkJaWd0X2Fzc2VydF9lcShs ZWdhY3ktPndpZHRoLCBsZWdhY3ktPm1vZGUuaGRpc3BsYXkpOwotCQlpZ3RfYXNzZXJ0X2VxKGxl Z2FjeS0+aGVpZ2h0LCBsZWdhY3ktPm1vZGUudmRpc3BsYXkpOwotCX0gZWxzZSB7Ci0JCWlndF9h c3NlcnRfZXEobGVnYWN5LT5tb2RlX3ZhbGlkLCAwKTsKLQl9CisJCWlndF9hc3NlcnQobW9kZV9w cm9wKTsKIAotCW1lbWNweSgmY3J0Y19rZXJuZWwsIGNydGMsIHNpemVvZihjcnRjX2tlcm5lbCkp OwotCWNydGNfZ2V0X2N1cnJlbnRfc3RhdGUoJmNydGNfa2VybmVsKTsKLQotCWlmIChjcnRjX2tl cm5lbC5tb2RlLmlkICE9IDApCi0JCWlndF9hc3NlcnRfZXEoY3J0Y19rZXJuZWwubW9kZS5sZW4s CisJCWlndF9hc3NlcnRfZXEobW9kZV9wcm9wLT5sZW5ndGgsCiAJCSAgICAgICAgICAgICAgc2l6 ZW9mKHN0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbykpOwotCi0JLyogT3B0aW9uYWxseSByZWxheCB0 aGUgY2hlY2sgZm9yIE1PREVfSUQ6IHVzaW5nIHRoZSBsZWdhY3kgU2V0Q3J0YwotCSAqIEFQSSBj YW4gcG90ZW50aWFsbHkgY2hhbmdlIE1PREVfSUQgZXZlbiBpZiB0aGUgbW9kZSBpdHNlbGYgcmVt YWlucwotCSAqIHVuY2hhbmdlZC4gKi8KLQlpZiAoKChyZWxheCAmIENSVENfUkVMQVhfTU9ERSkg JiYKLQkgICAgKGNydGNfa2VybmVsLm1vZGUuaWQgIT0gY3J0Yy0+bW9kZS5pZCAmJgotCSAgICAg Y3J0Y19rZXJuZWwubW9kZS5pZCAhPSAwICYmIGNydGMtPm1vZGUuaWQgIT0gMCkpICYmCi0JICAg IG1lbWNtcChjcnRjX2tlcm5lbC5tb2RlLmRhdGEsIGNydGMtPm1vZGUuZGF0YSwKLQkJICAgc2l6 ZW9mKHN0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbykpID09IDApIHsKLQkJY3J0Y19rZXJuZWwubW9k ZS5pZCA9IGNydGMtPm1vZGUuaWQ7Ci0JCWNydGNfa2VybmVsLm1vZGUuZGF0YSA9IGNydGMtPm1v ZGUuZGF0YTsKLQl9Ci0KLQlkb19vcl9kaWUobWVtY21wKCZjcnRjX2tlcm5lbCwgY3J0Yywgc2l6 ZW9mKGNydGNfa2VybmVsKSkpOwotCi0JZHJtTW9kZUZyZWVDcnRjKGxlZ2FjeSk7Ci19Ci0KLXN0 YXRpYyB2b2lkIGNydGNfY29tbWl0X2xlZ2FjeShzdHJ1Y3Qga21zX2F0b21pY19jcnRjX3N0YXRl ICpjcnRjLAotCQkJICAgICAgIHN0cnVjdCBrbXNfYXRvbWljX3BsYW5lX3N0YXRlICpwbGFuZSwK LQkJCSAgICAgICBlbnVtIGttc19hdG9taWNfY2hlY2tfcmVsYXggcmVsYXgpCi17Ci0JZHJtTW9k ZU9iamVjdFByb3BlcnRpZXNQdHIgcHJvcHM7Ci0JdWludDMyX3QgKmNvbm5lY3RvcnM7Ci0JaW50 IG51bV9jb25uZWN0b3JzID0gMDsKLQlpbnQgaTsKLQotCWlmICghY3J0Yy0+YWN0aXZlKSB7Ci0J CWRvX29yX2RpZShkcm1Nb2RlU2V0Q3J0YyhjcnRjLT5zdGF0ZS0+ZGVzYy0+ZmQsCi0JCQkJCSBj cnRjLT5vYmosIDAsIDAsIDAsIE5VTEwsIDAsIE5VTEwpKTsKLQkJcmV0dXJuOwotCX0KLQotCWNv bm5lY3RvcnMgPSBjYWxsb2MoY3J0Yy0+c3RhdGUtPm51bV9jb25uZWN0b3JzLAotCQkJICAgIHNp emVvZigqY29ubmVjdG9ycykpOwotCWlndF9hc3NlcnQoY29ubmVjdG9ycyk7Ci0KLQlpZ3RfYXNz ZXJ0X25lcV91MzIoY3J0Yy0+bW9kZS5pZCwgMCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY3J0Yy0+ c3RhdGUtPm51bV9jb25uZWN0b3JzOyBpKyspIHsKLQkJc3RydWN0IGttc19hdG9taWNfY29ubmVj dG9yX3N0YXRlICpjb25uZWN0b3IgPQotCQkJJmNydGMtPnN0YXRlLT5jb25uZWN0b3JzW2ldOwot Ci0JCWlmIChjb25uZWN0b3ItPmNydGNfaWQgIT0gY3J0Yy0+b2JqKQotCQkJY29udGludWU7Ci0K LQkJY29ubmVjdG9yc1tudW1fY29ubmVjdG9ycysrXSA9IGNvbm5lY3Rvci0+b2JqOworCQltb2Rl ID0gbW9kZV9wcm9wLT5kYXRhOwogCX0KIAotCWRvX29yX2RpZShkcm1Nb2RlU2V0Q3J0YyhjcnRj LT5zdGF0ZS0+ZGVzYy0+ZmQsIGNydGMtPm9iaiwKLQkgICAgICAgICAgICAgICAgICAgICAgICAg cGxhbmUtPmZiX2lkLAotCQkJCSBwbGFuZS0+c3JjX3ggPj4gMTYsIHBsYW5lLT5zcmNfeSA+PiAx NiwKLQkJCQkgKG51bV9jb25uZWN0b3JzKSA/IGNvbm5lY3RvcnMgOiBOVUxMLAotCQkJCSBudW1f Y29ubmVjdG9ycywKLQkJCQkgY3J0Yy0+bW9kZS5kYXRhKSk7Ci0JLyogV2hlbiBkb2luZyBhIGxl Z2FjeSBjb21taXQsIHRoZSBjb3JlIG1heSB1cGRhdGUgTU9ERV9JRCB0byBiZSBhIG5ldwotCSAq IGJsb2IgaW1wbGljaXRseSBjcmVhdGVkIGJ5IHRoZSBsZWdhY3kgcmVxdWVzdC4gSGVuY2Ugd2Ug YmFja2ZpbGwKLQkgKiB0aGUgdmFsdWUgaW4gdGhlIHN0YXRlIG9iamVjdCB0byBlbnN1cmUgdGhl eSBtYXRjaC4gKi8KLQlwcm9wcyA9IGRybU1vZGVPYmplY3RHZXRQcm9wZXJ0aWVzKGNydGMtPnN0 YXRlLT5kZXNjLT5mZCwgY3J0Yy0+b2JqLAotCQkJCQkgICBEUk1fTU9ERV9PQkpFQ1RfQ1JUQyk7 Ci0JaWd0X2Fzc2VydChwcm9wcyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcHJvcHMtPmNvdW50X3By b3BzOyBpKyspIHsKLQkJaWYgKHByb3BzLT5wcm9wc1tpXSAhPQotCQkgICAgY3J0Yy0+c3RhdGUt PmRlc2MtPnByb3BzX2NydGNbSUdUX0NSVENfTU9ERV9JRF0pCi0JCQljb250aW51ZTsKLQkJY3J0 Yy0+bW9kZS5pZCA9IHByb3BzLT5wcm9wX3ZhbHVlc1tpXTsKLQkJYnJlYWs7Ci0JfQorCWxlZ2Fj eSA9IGRybU1vZGVHZXRDcnRjKHBpcGUtPmRpc3BsYXktPmRybV9mZCwgcGlwZS0+Y3J0Y19pZCk7 CisJaWd0X2Fzc2VydChsZWdhY3kpOwogCi0JZHJtTW9kZUZyZWVPYmplY3RQcm9wZXJ0aWVzKHBy b3BzKTsKKwlpZ3RfYXNzZXJ0X2VxX3UzMihsZWdhY3ktPmNydGNfaWQsIHBpcGUtPmNydGNfaWQp OworCWlndF9hc3NlcnRfZXFfdTMyKGxlZ2FjeS0+eCwgcHJpbWFyeV92YWx1ZXNbSUdUX1BMQU5F X1NSQ19YXSA+PiAxNik7CisJaWd0X2Fzc2VydF9lcV91MzIobGVnYWN5LT55LCBwcmltYXJ5X3Zh bHVlc1tJR1RfUExBTkVfU1JDX1ldID4+IDE2KTsKIAotCWNydGNfY2hlY2tfY3VycmVudF9zdGF0 ZShjcnRjLCBwbGFuZSwgcmVsYXgpOwotCXBsYW5lX2NoZWNrX2N1cnJlbnRfc3RhdGUocGxhbmUs IHJlbGF4KTsKLX0KKwlpZ3RfYXNzZXJ0X2VxX3UzMihsZWdhY3ktPmJ1ZmZlcl9pZCwgcHJpbWFy eV92YWx1ZXNbSUdUX1BMQU5FX0ZCX0lEXSk7CiAKLXN0YXRpYyBzdHJ1Y3Qga21zX2F0b21pY19j cnRjX3N0YXRlICpmaW5kX2NydGMoc3RydWN0IGttc19hdG9taWNfc3RhdGUgKnN0YXRlLAotCQkJ CQkgICAgICAgYm9vbCBtdXN0X2JlX2VuYWJsZWQpCi17Ci0JaW50IGk7CisJaWYgKGxlZ2FjeS0+ bW9kZV92YWxpZCkgeworCQlpZ3RfYXNzZXJ0KG1vZGVfcHJvcCk7CiAKLQlmb3IgKGkgPSAwOyBp IDwgc3RhdGUtPm51bV9jcnRjczsgaSsrKSB7Ci0JCXN0cnVjdCBrbXNfYXRvbWljX2NydGNfc3Rh dGUgKmNydGMgPSAmc3RhdGUtPmNydGNzW2ldOworCQlkb19vcl9kaWUobWVtY21wKCZsZWdhY3kt Pm1vZGUsIG1vZGUsIHNpemVvZigqbW9kZSkpKTsKIAotCQlpZiAoIWNydGMtPm9iaikKLQkJCWNv bnRpbnVlOwotCQlpZiAobXVzdF9iZV9lbmFibGVkICYmICFjcnRjLT5hY3RpdmUpCi0JCQljb250 aW51ZTsKKwkJaWd0X2Fzc2VydF9lcShsZWdhY3ktPndpZHRoLCBsZWdhY3ktPm1vZGUuaGRpc3Bs YXkpOworCQlpZ3RfYXNzZXJ0X2VxKGxlZ2FjeS0+aGVpZ2h0LCBsZWdhY3ktPm1vZGUudmRpc3Bs YXkpOwogCi0JCWNydGNfZ2V0X2N1cnJlbnRfc3RhdGUoY3J0Yyk7Ci0JCXJldHVybiBjcnRjOwor CQlpZ3RfYXNzZXJ0X25lcShwaXBlX3ZhbHVlc1tJR1RfQ1JUQ19NT0RFX0lEXSwgMCk7CisJfSBl bHNlIHsKKwkJaWd0X2Fzc2VydCghbW9kZV9wcm9wKTsKIAl9CiAKLQlyZXR1cm4gTlVMTDsKLX0K KwljcnRjX2dldF9jdXJyZW50X3N0YXRlKHBpcGUsIGN1cnJlbnRfcGlwZV92YWx1ZXMpOwogCi1z dGF0aWMgdm9pZCBmaWxsX29ial9wcm9wcyhpbnQgZmQsIHVpbnQzMl90IGlkLCBpbnQgdHlwZSwg aW50IG51bV9wcm9wcywKLQkJCSAgIGNvbnN0IGNoYXIgKipwcm9wX25hbWVzLCB1aW50MzJfdCAq cHJvcF9pZHMpCi17Ci0JZHJtTW9kZU9iamVjdFByb3BlcnRpZXNQdHIgcHJvcHM7Ci0JaW50IGks IGo7Ci0KLQlwcm9wcyA9IGRybU1vZGVPYmplY3RHZXRQcm9wZXJ0aWVzKGZkLCBpZCwgdHlwZSk7 Ci0JaWd0X2Fzc2VydChwcm9wcyk7CisJLyogT3B0aW9uYWxseSByZWxheCB0aGUgY2hlY2sgZm9y IE1PREVfSUQ6IHVzaW5nIHRoZSBsZWdhY3kgU2V0Q3J0YworCSAqIEFQSSBjYW4gcG90ZW50aWFs bHkgY2hhbmdlIE1PREVfSUQgZXZlbiBpZiB0aGUgbW9kZSBpdHNlbGYgcmVtYWlucworCSAqIHVu Y2hhbmdlZC4gKi8KKwlpZiAocmVsYXggJiBDUlRDX1JFTEFYX01PREUgJiYgbW9kZSAmJiBjdXJy ZW50X3BpcGVfdmFsdWVzW0lHVF9DUlRDX01PREVfSURdICYmCisJICAgIGN1cnJlbnRfcGlwZV92 YWx1ZXNbSUdUX0NSVENfTU9ERV9JRF0gIT0gcGlwZV92YWx1ZXNbSUdUX0NSVENfTU9ERV9JRF0p IHsKKwkJZHJtTW9kZVByb3BlcnR5QmxvYlJlcyAqY3VyX3Byb3AgPQorCQkJZHJtTW9kZUdldFBy b3BlcnR5QmxvYihwaXBlLT5kaXNwbGF5LT5kcm1fZmQsCisJCQkJCSAgICAgICBjdXJyZW50X3Bp cGVfdmFsdWVzW0lHVF9DUlRDX01PREVfSURdKTsKIAotCWZvciAoaSA9IDA7IGkgPCBwcm9wcy0+ Y291bnRfcHJvcHM7IGkrKykgewotCQlkcm1Nb2RlUHJvcGVydHlQdHIgcHJvcCA9Ci0JCQlkcm1N b2RlR2V0UHJvcGVydHkoZmQsIHByb3BzLT5wcm9wc1tpXSk7CisJCWlndF9hc3NlcnQoY3VyX3By b3ApOworCQlpZ3RfYXNzZXJ0X2VxKGN1cl9wcm9wLT5sZW5ndGgsIHNpemVvZihzdHJ1Y3QgZHJt X21vZGVfbW9kZWluZm8pKTsKIAotCQlmb3IgKGogPSAwOyBqIDwgbnVtX3Byb3BzOyBqKyspIHsK LQkJCWlmIChzdHJjbXAocHJvcC0+bmFtZSwgcHJvcF9uYW1lc1tqXSkgIT0gMCkKLQkJCQljb250 aW51ZTsKLQkJCXByb3BfaWRzW2pdID0gcHJvcHMtPnByb3BzW2ldOwotCQkJYnJlYWs7Ci0JCX0K KwkJaWYgKCFtZW1jbXAoY3VyX3Byb3AtPmRhdGEsIG1vZGUsIHNpemVvZigqbW9kZSkpKQorCQkJ Y3VycmVudF9waXBlX3ZhbHVlc1tJR1RfQ1JUQ19NT0RFX0lEXSA9IHBpcGVfdmFsdWVzW0lHVF9D UlRDX01PREVfSURdOwogCi0JCWRybU1vZGVGcmVlUHJvcGVydHkocHJvcCk7CisJCWRybU1vZGVG cmVlUHJvcGVydHlCbG9iKGN1cl9wcm9wKTsKIAl9CiAKLQlkcm1Nb2RlRnJlZU9iamVjdFByb3Bl cnRpZXMocHJvcHMpOwotfQorCWRvX29yX2RpZShtZW1jbXAocGlwZV92YWx1ZXMsIGN1cnJlbnRf cGlwZV92YWx1ZXMsIHNpemVvZihjdXJyZW50X3BpcGVfdmFsdWVzKSkpOwogCi1zdGF0aWMgdm9p ZCBmaWxsX29ial9wcm9wX21hcChpbnQgZmQsIHVpbnQzMl90IGlkLCBpbnQgdHlwZSwgY29uc3Qg Y2hhciAqbmFtZSwKLQkJCSAgICAgIGludCBudW1fZW51bXMsIGNvbnN0IGNoYXIgKiplbnVtX25h bWVzLAotCQkJICAgICAgdWludDY0X3QgKmVudW1faWRzKQotewotCWRybU1vZGVPYmplY3RQcm9w ZXJ0aWVzUHRyIHByb3BzOwotCWludCBpLCBqLCBrOwotCi0JcHJvcHMgPSBkcm1Nb2RlT2JqZWN0 R2V0UHJvcGVydGllcyhmZCwgaWQsIHR5cGUpOwotCWlndF9hc3NlcnQocHJvcHMpOwotCi0JZm9y IChpID0gMDsgaSA8IHByb3BzLT5jb3VudF9wcm9wczsgaSsrKSB7Ci0JCWRybU1vZGVQcm9wZXJ0 eVB0ciBwcm9wID0KLQkJCWRybU1vZGVHZXRQcm9wZXJ0eShmZCwgcHJvcHMtPnByb3BzW2ldKTsK LQotCQlpZ3RfYXNzZXJ0KHByb3ApOwotCi0JCWlmIChzdHJjbXAocHJvcC0+bmFtZSwgbmFtZSkg IT0gMCkgewotCQkJZHJtTW9kZUZyZWVQcm9wZXJ0eShwcm9wKTsKLQkJCWNvbnRpbnVlOwotCQl9 Ci0KLQkJZm9yIChqID0gMDsgaiA8IHByb3AtPmNvdW50X2VudW1zOyBqKyspIHsKLQkJCXN0cnVj dCBkcm1fbW9kZV9wcm9wZXJ0eV9lbnVtICplID0gJnByb3AtPmVudW1zW2pdOwotCi0JCQlmb3Ig KGsgPSAwOyBrIDwgbnVtX2VudW1zOyBrKyspIHsKLQkJCQlpZiAoc3RyY21wKGUtPm5hbWUsIGVu dW1fbmFtZXNba10pICE9IDApCi0JCQkJCWNvbnRpbnVlOwotCi0JCQkJZW51bV9pZHNba10gPSBl LT52YWx1ZTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCWRybU1vZGVGcmVlUHJvcGVydHko cHJvcCk7Ci0JfQorCWRybU1vZGVGcmVlQ3J0YyhsZWdhY3kpOworCWRybU1vZGVGcmVlUHJvcGVy dHlCbG9iKG1vZGVfcHJvcCk7CiB9CiAKLXN0YXRpYyB2b2lkIGF0b21pY19zZXR1cChzdHJ1Y3Qg a21zX2F0b21pY19zdGF0ZSAqc3RhdGUpCitzdGF0aWMgdm9pZCBjcnRjX2NvbW1pdChpZ3RfcGlw ZV90ICpwaXBlLCBpZ3RfcGxhbmVfdCAqcGxhbmUsCisJCQllbnVtIGlndF9jb21taXRfc3R5bGUg cywKKwkJCWVudW0ga21zX2F0b21pY19jaGVja19yZWxheCByZWxheCkKIHsKLQlzdHJ1Y3Qga21z X2F0b21pY19kZXNjICpkZXNjID0gc3RhdGUtPmRlc2M7Ci0JZHJtTW9kZVJlc1B0ciByZXM7Ci0J ZHJtTW9kZVBsYW5lUmVzUHRyIHJlc19wbGFuZTsKLQlpbnQgaTsKLQotCWRlc2MtPmZkID0gZHJt X29wZW5fZHJpdmVyX21hc3RlcihEUklWRVJfQU5ZKTsKLQlpZ3RfYXNzZXJ0X2ZkKGRlc2MtPmZk KTsKLQotCWlndF9za2lwX29uKGRybVNldENsaWVudENhcChkZXNjLT5mZCwgRFJNX0NMSUVOVF9D QVBfQVRPTUlDLCAxKSk7Ci0KLQlyZXMgPSBkcm1Nb2RlR2V0UmVzb3VyY2VzKGRlc2MtPmZkKTsK LQlyZXNfcGxhbmUgPSBkcm1Nb2RlR2V0UGxhbmVSZXNvdXJjZXMoZGVzYy0+ZmQpOwotCWlndF9h c3NlcnQocmVzKTsKLQlpZ3RfYXNzZXJ0KHJlc19wbGFuZSk7Ci0KLQlpZ3RfYXNzZXJ0X2x0KDAs IHJlcy0+Y291bnRfY3J0Y3MpOwotCXN0YXRlLT5udW1fY3J0Y3MgPSByZXMtPmNvdW50X2NydGNz OwotCXN0YXRlLT5jcnRjcyA9IGNhbGxvYyhzdGF0ZS0+bnVtX2NydGNzLCBzaXplb2YoKnN0YXRl LT5jcnRjcykpOwotCWlndF9hc3NlcnQoc3RhdGUtPmNydGNzKTsKLQotCWlndF9hc3NlcnRfbHQo MCwgcmVzX3BsYW5lLT5jb3VudF9wbGFuZXMpOwotCXN0YXRlLT5udW1fcGxhbmVzID0gcmVzX3Bs YW5lLT5jb3VudF9wbGFuZXM7Ci0Jc3RhdGUtPnBsYW5lcyA9IGNhbGxvYyhzdGF0ZS0+bnVtX3Bs YW5lcywgc2l6ZW9mKCpzdGF0ZS0+cGxhbmVzKSk7Ci0JaWd0X2Fzc2VydChzdGF0ZS0+cGxhbmVz KTsKLQotCWlndF9hc3NlcnRfbHQoMCwgcmVzLT5jb3VudF9jb25uZWN0b3JzKTsKLQlzdGF0ZS0+ bnVtX2Nvbm5lY3RvcnMgPSByZXMtPmNvdW50X2Nvbm5lY3RvcnM7Ci0Jc3RhdGUtPmNvbm5lY3Rv cnMgPSBjYWxsb2Moc3RhdGUtPm51bV9jb25uZWN0b3JzLAotCQkJCSAgIHNpemVvZigqc3RhdGUt PmNvbm5lY3RvcnMpKTsKLQlpZ3RfYXNzZXJ0KHN0YXRlLT5jb25uZWN0b3JzKTsKLQotCWZpbGxf b2JqX3Byb3BzKGRlc2MtPmZkLCByZXMtPmNydGNzWzBdLAotCQkgICAgICAgRFJNX01PREVfT0JK RUNUX0NSVEMsIElHVF9OVU1fQ1JUQ19QUk9QUywKLQkJICAgICAgIGlndF9jcnRjX3Byb3BfbmFt ZXMsIGRlc2MtPnByb3BzX2NydGMpOwotCi0JZmlsbF9vYmpfcHJvcHMoZGVzYy0+ZmQsIHJlc19w bGFuZS0+cGxhbmVzWzBdLAotCQkgICAgICAgRFJNX01PREVfT0JKRUNUX1BMQU5FLCBJR1RfTlVN X1BMQU5FX1BST1BTLAotCQkgICAgICAgaWd0X3BsYW5lX3Byb3BfbmFtZXMsIGRlc2MtPnByb3Bz X3BsYW5lKTsKLQlmaWxsX29ial9wcm9wX21hcChkZXNjLT5mZCwgcmVzX3BsYW5lLT5wbGFuZXNb MF0sCi0JCQkgIERSTV9NT0RFX09CSkVDVF9QTEFORSwgInR5cGUiLAotCQkJICBOVU1fUExBTkVf VFlQRV9QUk9QUywgcGxhbmVfdHlwZV9wcm9wX25hbWVzLAotCQkJICBkZXNjLT5wcm9wc19wbGFu ZV90eXBlKTsKLQotCWZpbGxfb2JqX3Byb3BzKGRlc2MtPmZkLCByZXMtPmNvbm5lY3RvcnNbMF0s Ci0JCSAgICAgICBEUk1fTU9ERV9PQkpFQ1RfQ09OTkVDVE9SLCBJR1RfTlVNX0NPTk5FQ1RPUl9Q Uk9QUywKLQkJICAgICAgIGlndF9jb25uZWN0b3JfcHJvcF9uYW1lcywgZGVzYy0+cHJvcHNfY29u bmVjdG9yKTsKLQotCWZvciAoaSA9IDA7IGkgPCBzdGF0ZS0+bnVtX2NydGNzOyBpKyspIHsKLQkJ c3RydWN0IGttc19hdG9taWNfY3J0Y19zdGF0ZSAqY3J0YyA9ICZzdGF0ZS0+Y3J0Y3NbaV07Ci0K LQkJY3J0Yy0+c3RhdGUgPSBzdGF0ZTsKLQkJY3J0Yy0+b2JqID0gcmVzLT5jcnRjc1tpXTsKLQkJ Y3J0Yy0+aWR4ID0gaTsKLQkJY3J0Y19nZXRfY3VycmVudF9zdGF0ZShjcnRjKTsKLQotCQkvKiBU aGUgYmxvYiBwb2ludGVkIHRvIGJ5IE1PREVfSUQgY291bGQgd2VsbCBiZSB0cmFuc2llbnQsCi0J CSAqIGFuZCBsb3NlIGl0cyBsYXN0IHJlZmVyZW5jZSBhcyB3ZSBzd2l0Y2ggYXdheSBmcm9tIGl0 LgotCQkgKiBEdXBsaWNhdGUgdGhlIGJsb2IgaGVyZSBzbyB3ZSBoYXZlIGEgcmVmZXJlbmNlIHdl IGtub3cgd2UKLQkJICogb3duLiAqLwotCQlpZiAoY3J0Yy0+bW9kZS5pZCAhPSAwKQotCQkgICAg Y3J0Yy0+bW9kZS5pZCA9IGJsb2JfZHVwbGljYXRlKGRlc2MtPmZkLCBjcnRjLT5tb2RlLmlkKTsK LQl9CisJaWd0X2Rpc3BsYXlfY29tbWl0MihwaXBlLT5kaXNwbGF5LCBzKTsKIAotCWZvciAoaSA9 IDA7IGkgPCBzdGF0ZS0+bnVtX3BsYW5lczsgaSsrKSB7Ci0JCWRybU1vZGVQbGFuZVB0ciBwbGFu ZSA9Ci0JCQlkcm1Nb2RlR2V0UGxhbmUoZGVzYy0+ZmQsIHJlc19wbGFuZS0+cGxhbmVzW2ldKTsK LQkJaWd0X2Fzc2VydChwbGFuZSk7Ci0KLQkJc3RhdGUtPnBsYW5lc1tpXS5zdGF0ZSA9IHN0YXRl OwotCQlzdGF0ZS0+cGxhbmVzW2ldLm9iaiA9IHJlc19wbGFuZS0+cGxhbmVzW2ldOwotCQlzdGF0 ZS0+cGxhbmVzW2ldLmNydGNfbWFzayA9IHBsYW5lLT5wb3NzaWJsZV9jcnRjczsKLQkJcGxhbmVf Z2V0X2N1cnJlbnRfc3RhdGUoJnN0YXRlLT5wbGFuZXNbaV0pOwotCX0KLQotCWZvciAoaSA9IDA7 IGkgPCBzdGF0ZS0+bnVtX2Nvbm5lY3RvcnM7IGkrKykgewotCQlzdGF0ZS0+Y29ubmVjdG9yc1tp XS5zdGF0ZSA9IHN0YXRlOwotCQlzdGF0ZS0+Y29ubmVjdG9yc1tpXS5vYmogPSByZXMtPmNvbm5l Y3RvcnNbaV07Ci0JCWNvbm5lY3Rvcl9nZXRfY3VycmVudF9zdGF0ZSgmc3RhdGUtPmNvbm5lY3Rv cnNbaV0pOwotCX0KLQotCWRybU1vZGVGcmVlUGxhbmVSZXNvdXJjZXMocmVzX3BsYW5lKTsKLQlk cm1Nb2RlRnJlZVJlc291cmNlcyhyZXMpOworCWNydGNfY2hlY2tfY3VycmVudF9zdGF0ZShwaXBl LCBwaXBlLT52YWx1ZXMsIHBsYW5lLT52YWx1ZXMsIHJlbGF4KTsKKwlwbGFuZV9jaGVja19jdXJy ZW50X3N0YXRlKHBsYW5lLCBwbGFuZS0+dmFsdWVzLCByZWxheCk7CiB9CiAKLXN0YXRpYyBzdHJ1 Y3Qga21zX2F0b21pY19zdGF0ZSAqCi1hdG9taWNfc3RhdGVfZHVwKGNvbnN0IHN0cnVjdCBrbXNf YXRvbWljX3N0YXRlICpzdGF0ZSkKK3N0YXRpYyB2b2lkIGNydGNfY29tbWl0X2F0b21pY19mbGFn c19lcnIoaWd0X3BpcGVfdCAqcGlwZSwgaWd0X3BsYW5lX3QgKnBsYW5lLAorCQkJCQkgdW5zaWdu ZWQgZmxhZ3MsCisJCQkJCSBlbnVtIGttc19hdG9taWNfY2hlY2tfcmVsYXggcmVsYXgsCisJCQkJ CSBpbnQgZXJyKQogewotCXN0cnVjdCBrbXNfYXRvbWljX3N0YXRlICpyZXQgPSBjYWxsb2MoMSwg c2l6ZW9mKCpyZXQpKTsKLQotCWlndF9hc3NlcnQocmV0KTsKLQkqcmV0ID0gKnN0YXRlOworCXVp bnQ2NF90IGN1cnJlbnRfcGlwZV92YWx1ZXNbSUdUX05VTV9DUlRDX1BST1BTXTsKKwl1aW50NjRf dCBjdXJyZW50X3BsYW5lX3ZhbHVlc1tJR1RfTlVNX1BMQU5FX1BST1BTXTsKIAotCXJldC0+Y3J0 Y3MgPSBjYWxsb2MocmV0LT5udW1fY3J0Y3MsIHNpemVvZigqcmV0LT5jcnRjcykpOwotCWlndF9h c3NlcnQocmV0LT5jcnRjcyk7Ci0JbWVtY3B5KHJldC0+Y3J0Y3MsIHN0YXRlLT5jcnRjcywgcmV0 LT5udW1fY3J0Y3MgKiBzaXplb2YoKnJldC0+Y3J0Y3MpKTsKKwljcnRjX2dldF9jdXJyZW50X3N0 YXRlKHBpcGUsIGN1cnJlbnRfcGlwZV92YWx1ZXMpOworCXBsYW5lX2dldF9jdXJyZW50X3N0YXRl KHBsYW5lLCBjdXJyZW50X3BsYW5lX3ZhbHVlcyk7CiAKLQlyZXQtPnBsYW5lcyA9IGNhbGxvYyhy ZXQtPm51bV9wbGFuZXMsIHNpemVvZigqcmV0LT5wbGFuZXMpKTsKLQlpZ3RfYXNzZXJ0KHJldC0+ cGxhbmVzKTsKLQltZW1jcHkocmV0LT5wbGFuZXMsIHN0YXRlLT5wbGFuZXMsCi0JICAgICAgIHJl dC0+bnVtX3BsYW5lcyAqIHNpemVvZigqcmV0LT5wbGFuZXMpKTsKKwlpZ3RfYXNzZXJ0X2VxKC1l cnIsIGlndF9kaXNwbGF5X3RyeV9jb21taXRfYXRvbWljKHBpcGUtPmRpc3BsYXksIGZsYWdzLCBO VUxMKSk7CiAKLQlyZXQtPmNvbm5lY3RvcnMgPSBjYWxsb2MocmV0LT5udW1fY29ubmVjdG9ycywg c2l6ZW9mKCpyZXQtPmNvbm5lY3RvcnMpKTsKLQlpZ3RfYXNzZXJ0KHJldC0+Y29ubmVjdG9ycyk7 Ci0JbWVtY3B5KHJldC0+Y29ubmVjdG9ycywgc3RhdGUtPmNvbm5lY3RvcnMsCi0JICAgICAgIHJl dC0+bnVtX2Nvbm5lY3RvcnMgKiBzaXplb2YoKnJldC0+Y29ubmVjdG9ycykpOwotCi0JcmV0dXJu IHJldDsKKwljcnRjX2NoZWNrX2N1cnJlbnRfc3RhdGUocGlwZSwgY3VycmVudF9waXBlX3ZhbHVl cywgY3VycmVudF9wbGFuZV92YWx1ZXMsIHJlbGF4KTsKKwlwbGFuZV9jaGVja19jdXJyZW50X3N0 YXRlKHBsYW5lLCBjdXJyZW50X3BsYW5lX3ZhbHVlcywgcmVsYXgpOwogfQogCi1zdGF0aWMgdm9p ZCBhdG9taWNfc3RhdGVfZnJlZShzdHJ1Y3Qga21zX2F0b21pY19zdGF0ZSAqc3RhdGUpCi17Ci0J ZnJlZShzdGF0ZS0+Y3J0Y3MpOwotCWZyZWUoc3RhdGUtPnBsYW5lcyk7Ci0JZnJlZShzdGF0ZS0+ Y29ubmVjdG9ycyk7Ci0JZnJlZShzdGF0ZSk7Ci19CisjZGVmaW5lIGNydGNfY29tbWl0X2F0b21p Y19lcnIocGlwZSwgcGxhbmUsIHJlbGF4LCBlcnIpIFwKKwljcnRjX2NvbW1pdF9hdG9taWNfZmxh Z3NfZXJyKHBpcGUsIHBsYW5lLCBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNFVCwgcmVsYXgs IGVycikKIAotc3RhdGljIHVpbnQzMl90IHBsYW5lX2dldF9pZ3RfZm9ybWF0KHN0cnVjdCBrbXNf YXRvbWljX3BsYW5lX3N0YXRlICpwbGFuZSkKK3N0YXRpYyB1aW50MzJfdCBwbGFuZV9nZXRfaWd0 X2Zvcm1hdChpZ3RfcGxhbmVfdCAqcGxhbmUpCiB7CiAJZHJtTW9kZVBsYW5lUHRyIHBsYW5lX2tt czsKIAljb25zdCB1aW50MzJfdCAqaWd0X2Zvcm1hdHM7Ci0JdWludDMyX3QgcmV0ID0gMDsKIAlp bnQgbnVtX2lndF9mb3JtYXRzOwogCWludCBpOwogCi0JcGxhbmVfa21zID0gZHJtTW9kZUdldFBs YW5lKHBsYW5lLT5zdGF0ZS0+ZGVzYy0+ZmQsIHBsYW5lLT5vYmopOwotCWlndF9hc3NlcnQocGxh bmVfa21zKTsKKwlwbGFuZV9rbXMgPSBwbGFuZS0+ZHJtX3BsYW5lOwogCiAJaWd0X2dldF9hbGxf Y2Fpcm9fZm9ybWF0cygmaWd0X2Zvcm1hdHMsICZudW1faWd0X2Zvcm1hdHMpOwogCWZvciAoaSA9 IDA7IGkgPCBudW1faWd0X2Zvcm1hdHM7IGkrKykgewogCQlpbnQgajsKIAogCQlmb3IgKGogPSAw OyBqIDwgcGxhbmVfa21zLT5jb3VudF9mb3JtYXRzOyBqKyspIHsKLQkJCWlmIChwbGFuZV9rbXMt PmZvcm1hdHNbal0gPT0gaWd0X2Zvcm1hdHNbaV0pIHsKLQkJCQlyZXQgPSBwbGFuZV9rbXMtPmZv cm1hdHNbal07Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCQlpZiAocGxhbmVfa21zLT5mb3JtYXRzW2pd ID09IGlndF9mb3JtYXRzW2ldKQorCQkJCXJldHVybiBwbGFuZV9rbXMtPmZvcm1hdHNbal07CiAJ CX0KIAl9CiAKLQlkcm1Nb2RlRnJlZVBsYW5lKHBsYW5lX2ttcyk7Ci0JcmV0dXJuIHJldDsKKwly ZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQKLXNldF9kcG1zKGludCBmZCwgaW50IG1vZGUpCitz ZXRfZHBtcyhpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgaW50IG1vZGUpCiB7Ci0JaW50IGk7Ci0JZHJt TW9kZUNvbm5lY3RvciAqY29ubmVjdG9yOwotCXVpbnQzMl90IGlkOwotCWRybU1vZGVSZXMgKnJl c291cmNlcyA9IGRybU1vZGVHZXRSZXNvdXJjZXMoZmQpOwotCi0JZm9yIChpID0gMDsgaSA8IHJl c291cmNlcy0+Y291bnRfY29ubmVjdG9yczsgaSsrKSB7Ci0JCWlkID0gcmVzb3VyY2VzLT5jb25u ZWN0b3JzW2ldOwotCi0JCWNvbm5lY3RvciA9IGRybU1vZGVHZXRDb25uZWN0b3JDdXJyZW50KGZk LCBpZCk7Ci0KLQkJa21zdGVzdF9zZXRfY29ubmVjdG9yX2RwbXMoZmQsIGNvbm5lY3RvciwgbW9k ZSk7Ci0KLQkJZHJtTW9kZUZyZWVDb25uZWN0b3IoY29ubmVjdG9yKTsKLQl9CisJZG9fb3JfZGll KGRybU1vZGVDb25uZWN0b3JTZXRQcm9wZXJ0eShvdXRwdXQtPmRpc3BsYXktPmRybV9mZCwgb3V0 cHV0LT5pZCwKKwkJCQkJICAgICAgb3V0cHV0LT5wcm9wc1tJR1RfQ09OTkVDVE9SX0RQTVNdLCBt b2RlKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHBsYW5lX292ZXJsYXkoc3RydWN0IGttc19hdG9taWNf Y3J0Y19zdGF0ZSAqY3J0YywKLQkJCSAgc3RydWN0IGttc19hdG9taWNfcGxhbmVfc3RhdGUgKnBs YW5lX29sZCkKK3N0YXRpYyB2b2lkIHBsYW5lX292ZXJsYXkoaWd0X3BpcGVfdCAqcGlwZSwgaWd0 X291dHB1dF90ICpvdXRwdXQsIGlndF9wbGFuZV90ICpwbGFuZSkKIHsKLQlzdHJ1Y3QgZHJtX21v ZGVfbW9kZWluZm8gKm1vZGUgPSBjcnRjLT5tb2RlLmRhdGE7Ci0Jc3RydWN0IGttc19hdG9taWNf cGxhbmVfc3RhdGUgcGxhbmUgPSAqcGxhbmVfb2xkOwotCXVpbnQzMl90IGZvcm1hdCA9IHBsYW5l X2dldF9pZ3RfZm9ybWF0KCZwbGFuZSk7Ci0JZHJtTW9kZUF0b21pY1JlcSAqcmVxID0gZHJtTW9k ZUF0b21pY0FsbG9jKCk7CisJZHJtTW9kZU1vZGVJbmZvICptb2RlID0gaWd0X291dHB1dF9nZXRf bW9kZShvdXRwdXQpOworCXVpbnQzMl90IGZvcm1hdCA9IHBsYW5lX2dldF9pZ3RfZm9ybWF0KHBs YW5lKTsKIAlzdHJ1Y3QgaWd0X2ZiIGZiOworCXVpbnQzMl90IHcgPSBtb2RlLT5oZGlzcGxheSAv IDI7CisJdWludDMyX3QgaCA9IG1vZGUtPnZkaXNwbGF5IC8gMjsKIAotCWlndF9yZXF1aXJlKHJl cSk7CiAJaWd0X3JlcXVpcmUoZm9ybWF0ICE9IDApOwogCi0JcGxhbmUuc3JjX3ggPSAwOwotCXBs YW5lLnNyY195ID0gMDsKLQlwbGFuZS5zcmNfdyA9IChtb2RlLT5oZGlzcGxheSAvIDIpIDw8IDE2 OwotCXBsYW5lLnNyY19oID0gKG1vZGUtPnZkaXNwbGF5IC8gMikgPDwgMTY7Ci0JcGxhbmUuY3J0 Y194ID0gbW9kZS0+aGRpc3BsYXkgLyA0OwotCXBsYW5lLmNydGNfeSA9IG1vZGUtPnZkaXNwbGF5 IC8gNDsKLQlwbGFuZS5jcnRjX3cgPSBtb2RlLT5oZGlzcGxheSAvIDI7Ci0JcGxhbmUuY3J0Y19o ID0gbW9kZS0+dmRpc3BsYXkgLyAyOwotCXBsYW5lLmNydGNfaWQgPSBjcnRjLT5vYmo7Ci0JcGxh bmUuZmJfaWQgPSBpZ3RfY3JlYXRlX3BhdHRlcm5fZmIocGxhbmUuc3RhdGUtPmRlc2MtPmZkLAot CQkJCQkgICAgcGxhbmUuY3J0Y193LCBwbGFuZS5jcnRjX2gsCi0JCQkJCSAgICBmb3JtYXQsIEk5 MTVfVElMSU5HX05PTkUsICZmYik7CisJaWd0X2NyZWF0ZV9wYXR0ZXJuX2ZiKHBpcGUtPmRpc3Bs YXktPmRybV9mZCwgdywgaCwKKwkJCSAgICAgIGZvcm1hdCwgSTkxNV9USUxJTkdfTk9ORSwgJmZi KTsKKworCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsICZmYik7CisJaWd0X3BsYW5lX3NldF9wb3Np dGlvbihwbGFuZSwgdy8yLCBoLzIpOwogCiAJLyogRW5hYmxlIHRoZSBvdmVybGF5IHBsYW5lIHVz aW5nIHRoZSBhdG9taWMgQVBJLCBhbmQgZG91YmxlLWNoZWNrCiAJICogc3RhdGUgaXMgd2hhdCB3 ZSB0aGluayBpdCBzaG91bGQgYmUuICovCi0JcGxhbmVfY29tbWl0X2F0b21pYygmcGxhbmUsIHJl cSwgQVRPTUlDX1JFTEFYX05PTkUpOworCXBsYW5lX2NvbW1pdChwbGFuZSwgQ09NTUlUX0FUT01J QywgQVRPTUlDX1JFTEFYX05PTkUpOwogCiAJLyogRGlzYWJsZSB0aGUgcGxhbmUgYW5kIGNoZWNr IHRoZSBzdGF0ZSBtYXRjaGVzIHRoZSBvbGQuICovCi0JcGxhbmVfY29tbWl0X2F0b21pYyhwbGFu ZV9vbGQsIHJlcSwgQVRPTUlDX1JFTEFYX05PTkUpOworCWlndF9wbGFuZV9zZXRfZmIocGxhbmUs IE5VTEwpOworCWlndF9wbGFuZV9zZXRfcG9zaXRpb24ocGxhbmUsIDAsIDApOworCXBsYW5lX2Nv bW1pdChwbGFuZSwgQ09NTUlUX0FUT01JQywgQVRPTUlDX1JFTEFYX05PTkUpOwogCiAJLyogUmUt ZW5hYmxlIHRoZSBwbGFuZSB0aHJvdWdoIHRoZSBsZWdhY3kgcGxhbmUgQVBJLCBhbmQgdmVyaWZ5 IHRocm91Z2gKIAkgKiBhdG9taWMuICovCi0JcGxhbmVfY29tbWl0X2xlZ2FjeSgmcGxhbmUsIEFU T01JQ19SRUxBWF9OT05FKTsKKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCAmZmIpOworCWlndF9w bGFuZV9zZXRfcG9zaXRpb24ocGxhbmUsIHcvMiwgaC8yKTsKKwlwbGFuZV9jb21taXQocGxhbmUs IENPTU1JVF9MRUdBQ1ksIEFUT01JQ19SRUxBWF9OT05FKTsKIAogCS8qIFJlc3RvcmUgdGhlIHBs YW5lIHRvIGl0cyBvcmlnaW5hbCBzZXR0aW5ncyB0aHJvdWdoIHRoZSBsZWdhY3kgcGxhbmUKIAkg KiBBUEksIGFuZCB2ZXJpZnkgdGhyb3VnaCBhdG9taWMuICovCi0JcGxhbmVfY29tbWl0X2xlZ2Fj eShwbGFuZV9vbGQsIEFUT01JQ19SRUxBWF9OT05FKTsKKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5l LCBOVUxMKTsKKwlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHBsYW5lLCAwLCAwKTsKKwlwbGFuZV9j b21taXQocGxhbmUsIENPTU1JVF9MRUdBQ1ksIEFUT01JQ19SRUxBWF9OT05FKTsKIAotCWRybU1v ZGVBdG9taWNGcmVlKHJlcSk7CisJaWd0X3JlbW92ZV9mYihwaXBlLT5kaXNwbGF5LT5kcm1fZmQs ICZmYik7CiB9CiAKLXN0YXRpYyB2b2lkIHBsYW5lX3ByaW1hcnkoc3RydWN0IGttc19hdG9taWNf Y3J0Y19zdGF0ZSAqY3J0YywKLQkJCSAgc3RydWN0IGttc19hdG9taWNfcGxhbmVfc3RhdGUgKnBs YW5lX29sZCkKK3N0YXRpYyB2b2lkIHBsYW5lX3ByaW1hcnkoaWd0X3BpcGVfdCAqcGlwZSwgaWd0 X3BsYW5lX3QgKnBsYW5lLCBzdHJ1Y3QgaWd0X2ZiICpmYikKIHsKLQlzdHJ1Y3QgZHJtX21vZGVf bW9kZWluZm8gKm1vZGUgPSBjcnRjLT5tb2RlLmRhdGE7Ci0Jc3RydWN0IGttc19hdG9taWNfcGxh bmVfc3RhdGUgcGxhbmUgPSAqcGxhbmVfb2xkOwotCXVpbnQzMl90IGZvcm1hdCA9IHBsYW5lX2dl dF9pZ3RfZm9ybWF0KCZwbGFuZSk7Ci0JZHJtTW9kZUF0b21pY1JlcSAqcmVxID0gZHJtTW9kZUF0 b21pY0FsbG9jKCk7Ci0Jc3RydWN0IGlndF9mYiBmYjsKLQl1aW50MzJfdCBmbGFncyA9IDA7Ci0J aW50IHJldDsKLQotCWlndF9yZXF1aXJlKGZvcm1hdCAhPSAwKTsKKwlzdHJ1Y3QgaWd0X2ZiIGZi MjsKIAotCXBsYW5lLnNyY194ID0gMDsKLQlwbGFuZS5zcmNfeSA9IDA7Ci0JcGxhbmUuc3JjX3cg PSBtb2RlLT5oZGlzcGxheSA8PCAxNjsKLQlwbGFuZS5zcmNfaCA9IG1vZGUtPnZkaXNwbGF5IDw8 IDE2OwotCXBsYW5lLmNydGNfeCA9IDA7Ci0JcGxhbmUuY3J0Y195ID0gMDsKLQlwbGFuZS5jcnRj X3cgPSBtb2RlLT5oZGlzcGxheTsKLQlwbGFuZS5jcnRjX2ggPSBtb2RlLT52ZGlzcGxheTsKLQlw bGFuZS5jcnRjX2lkID0gY3J0Yy0+b2JqOwotCXBsYW5lLmZiX2lkID0gaWd0X2NyZWF0ZV9wYXR0 ZXJuX2ZiKHBsYW5lLnN0YXRlLT5kZXNjLT5mZCwKLQkJCQkJICAgIHBsYW5lLmNydGNfdywgcGxh bmUuY3J0Y19oLAotCQkJCQkgICAgZm9ybWF0LCBJOTE1X1RJTElOR19OT05FLCAmZmIpOwotCi0J ZHJtTW9kZUF0b21pY1NldEN1cnNvcihyZXEsIDApOwotCWNydGNfcG9wdWxhdGVfcmVxKGNydGMs IHJlcSk7Ci0JcGxhbmVfcG9wdWxhdGVfcmVxKCZwbGFuZSwgcmVxKTsKLQlyZXQgPSBkcm1Nb2Rl QXRvbWljQ29tbWl0KGNydGMtPnN0YXRlLT5kZXNjLT5mZCwgcmVxLAotCQkJCSAgRFJNX01PREVf QVRPTUlDX1RFU1RfT05MWSwgTlVMTCk7Ci0JLyogVHJ5IGhhcmRlciBpbiBjYXNlIHRoZSBmYWls dXJlIGlzIGNhdXNlZCBieSBkaXNhbGxvd2luZyBtb2Rlc2V0LiAqLwotCWlmIChyZXQgPT0gLUVJ TlZBTCkKLQkJZmxhZ3MgfD0gRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVTRVQ7CisJaWd0X2Ny ZWF0ZV9jb2xvcl9wYXR0ZXJuX2ZiKHBpcGUtPmRpc3BsYXktPmRybV9mZCwKKwkJCQkgICAgZmIt PndpZHRoLCBmYi0+aGVpZ2h0LAorCQkJCSAgICBmYi0+ZHJtX2Zvcm1hdCwgSTkxNV9USUxJTkdf Tk9ORSwKKwkJCQkgICAgMC4yLCAwLjIsIDAuMiwgJmZiMik7CiAKIAkvKiBGbGlwIHRoZSBwcmlt YXJ5IHBsYW5lIHVzaW5nIHRoZSBhdG9taWMgQVBJLCBhbmQgZG91YmxlLWNoZWNrCiAJICogc3Rh dGUgaXMgd2hhdCB3ZSB0aGluayBpdCBzaG91bGQgYmUuICovCi0JY3J0Y19jb21taXRfYXRvbWlj KGNydGMsICZwbGFuZSwgcmVxLCBBVE9NSUNfUkVMQVhfTk9ORSwgZmxhZ3MpOworCWlndF9wbGFu ZV9zZXRfZmIocGxhbmUsICZmYjIpOworCWNydGNfY29tbWl0KHBpcGUsIHBsYW5lLCBDT01NSVRf QVRPTUlDLCBBVE9NSUNfUkVMQVhfTk9ORSk7CiAKIAkvKiBSZXN0b3JlIHRoZSBwcmltYXJ5IHBs YW5lIGFuZCBjaGVjayB0aGUgc3RhdGUgbWF0Y2hlcyB0aGUgb2xkLiAqLwotCWNydGNfY29tbWl0 X2F0b21pYyhjcnRjLCBwbGFuZV9vbGQsIHJlcSwgQVRPTUlDX1JFTEFYX05PTkUsIGZsYWdzKTsK KwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBmYik7CisJY3J0Y19jb21taXQocGlwZSwgcGxhbmUs IENPTU1JVF9BVE9NSUMsIEFUT01JQ19SRUxBWF9OT05FKTsKIAotCS8qIFJlLWVuYWJsZSB0aGUg cGxhbmUgdGhyb3VnaCB0aGUgbGVnYWN5IENSVEMvcHJpbWFyeS1wbGFuZSBBUEksIGFuZAorCS8q IFNldCB0aGUgcGxhbmUgdGhyb3VnaCB0aGUgbGVnYWN5IENSVEMvcHJpbWFyeS1wbGFuZSBBUEks IGFuZAogCSAqIHZlcmlmeSB0aHJvdWdoIGF0b21pYy4gKi8KLQljcnRjX2NvbW1pdF9sZWdhY3ko Y3J0YywgJnBsYW5lLCBDUlRDX1JFTEFYX01PREUpOworCWlndF9wbGFuZV9zZXRfZmIocGxhbmUs ICZmYjIpOworCWNydGNfY29tbWl0KHBpcGUsIHBsYW5lLCBDT01NSVRfTEVHQUNZLCBDUlRDX1JF TEFYX01PREUpOwogCiAJLyogUmVzdG9yZSB0aGUgcGxhbmUgdG8gaXRzIG9yaWdpbmFsIHNldHRp bmdzIHRocm91Z2ggdGhlIGxlZ2FjeSBDUlRDCiAJICogQVBJLCBhbmQgdmVyaWZ5IHRocm91Z2gg YXRvbWljLiAqLwotCWNydGNfY29tbWl0X2xlZ2FjeShjcnRjLCBwbGFuZV9vbGQsIENSVENfUkVM QVhfTU9ERSk7Ci0KLQkvKiBGaW5hbGx5LCByZXN0b3JlIHRvIHRoZSBvcmlnaW5hbCBzdGF0ZS4g Ki8KLQljcnRjX2NvbW1pdF9hdG9taWMoY3J0YywgcGxhbmVfb2xkLCByZXEsIEFUT01JQ19SRUxB WF9OT05FLCBmbGFncyk7CisJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgZmIpOworCWNydGNfY29t bWl0KHBpcGUsIHBsYW5lLCBDT01NSVRfTEVHQUNZLCBDUlRDX1JFTEFYX01PREUpOwogCi0JZHJt TW9kZUF0b21pY0ZyZWUocmVxKTsKKwkvKiBTZXQgdGhlIHBsYW5lIHRocm91Z2ggdGhlIHVuaXZl cnNhbCBzZXRwbGFuZSBBUEksIGFuZAorCSAqIHZlcmlmeSB0aHJvdWdoIGF0b21pYy4gKi8KKwlp Z3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCAmZmIyKTsKKwlwbGFuZV9jb21taXQocGxhbmUsIENPTU1J VF9VTklWRVJTQUwsIEFUT01JQ19SRUxBWF9OT05FKTsKIH0KIAogLyogdGVzdCB0byBlbnN1cmUg dGhhdCBEUk1fTU9ERV9BVE9NSUNfVEVTVF9PTkxZIHJlYWxseSBvbmx5IHRvdWNoZXMgdGhlCiAg KiBmcmVlLXN0YW5kaW5nIHN0YXRlIG9iamVjdHMgYW5kIG5vdGhpbmcgZWxzZS4KICAqLwotc3Rh dGljIHZvaWQgdGVzdF9vbmx5KHN0cnVjdCBrbXNfYXRvbWljX2NydGNfc3RhdGUgKmNydGMsCi0J CSAgICAgIHN0cnVjdCBrbXNfYXRvbWljX3BsYW5lX3N0YXRlICpwbGFuZV9vbGQpCitzdGF0aWMg dm9pZCB0ZXN0X29ubHkoaWd0X3BpcGVfdCAqcGlwZV9vYmosCisJCSAgICAgIGlndF9wbGFuZV90 ICpwcmltYXJ5LAorCQkgICAgICBpZ3Rfb3V0cHV0X3QgKm91dHB1dCkKIHsKLQlzdHJ1Y3QgZHJt X21vZGVfbW9kZWluZm8gKm1vZGUgPSBjcnRjLT5tb2RlLmRhdGE7Ci0Jc3RydWN0IGttc19hdG9t aWNfcGxhbmVfc3RhdGUgcGxhbmUgPSAqcGxhbmVfb2xkOwotCXVpbnQzMl90IGZvcm1hdCA9IHBs YW5lX2dldF9pZ3RfZm9ybWF0KCZwbGFuZSk7Ci0JZHJtTW9kZUF0b21pY1JlcSAqcmVxID0gZHJt TW9kZUF0b21pY0FsbG9jKCk7CisJZHJtTW9kZU1vZGVJbmZvICptb2RlID0gaWd0X291dHB1dF9n ZXRfbW9kZShvdXRwdXQpOworCXVpbnQzMl90IGZvcm1hdCA9IHBsYW5lX2dldF9pZ3RfZm9ybWF0 KHByaW1hcnkpOwogCXN0cnVjdCBpZ3RfZmIgZmI7Ci0JaW50IHJldDsKKwl1aW50NjRfdCBvbGRf cGxhbmVfdmFsdWVzW0lHVF9OVU1fUExBTkVfUFJPUFNdLCBvbGRfY3J0Y192YWx1ZXNbSUdUX05V TV9DUlRDX1BST1BTXTsKIAogCWlndF9yZXF1aXJlKGZvcm1hdCAhPSAwKTsKIAotCXBsYW5lLnNy Y194ID0gMDsKLQlwbGFuZS5zcmNfeSA9IDA7Ci0JcGxhbmUuc3JjX3cgPSBtb2RlLT5oZGlzcGxh eSA8PCAxNjsKLQlwbGFuZS5zcmNfaCA9IG1vZGUtPnZkaXNwbGF5IDw8IDE2OwotCXBsYW5lLmNy dGNfeCA9IDA7Ci0JcGxhbmUuY3J0Y195ID0gMDsKLQlwbGFuZS5jcnRjX3cgPSBtb2RlLT5oZGlz cGxheTsKLQlwbGFuZS5jcnRjX2ggPSBtb2RlLT52ZGlzcGxheTsKLQlwbGFuZS5jcnRjX2lkID0g Y3J0Yy0+b2JqOwotCXBsYW5lLmZiX2lkID0gaWd0X2NyZWF0ZV9wYXR0ZXJuX2ZiKHBsYW5lLnN0 YXRlLT5kZXNjLT5mZCwKLQkJCQkJICAgIHBsYW5lLmNydGNfdywgcGxhbmUuY3J0Y19oLAotCQkJ CQkgICAgZm9ybWF0LCBJOTE1X1RJTElOR19OT05FLCAmZmIpOwotCi0JZHJtTW9kZUF0b21pY1Nl dEN1cnNvcihyZXEsIDApOwotCWNydGNfcG9wdWxhdGVfcmVxKGNydGMsIHJlcSk7Ci0JcGxhbmVf cG9wdWxhdGVfcmVxKCZwbGFuZSwgcmVxKTsKLQlyZXQgPSBkcm1Nb2RlQXRvbWljQ29tbWl0KGNy dGMtPnN0YXRlLT5kZXNjLT5mZCwgcmVxLAotCQkJCSAgRFJNX01PREVfQVRPTUlDX1RFU1RfT05M WSwgTlVMTCk7Ci0KLQlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7Ci0KLQkvKiBnbyB0aHJvdWdoIGRw bXMgb2ZmL29uIGN5Y2xlICovCi0Jc2V0X2RwbXMoY3J0Yy0+c3RhdGUtPmRlc2MtPmZkLCBEUk1f TU9ERV9EUE1TX09GRik7Ci0Jc2V0X2RwbXMoY3J0Yy0+c3RhdGUtPmRlc2MtPmZkLCBEUk1fTU9E RV9EUE1TX09OKTsKLQotCS8qIGNoZWNrIHRoZSBzdGF0ZSAqLwotCWNydGNfY2hlY2tfY3VycmVu dF9zdGF0ZShjcnRjLCBwbGFuZV9vbGQsIEFUT01JQ19SRUxBWF9OT05FKTsKLQlwbGFuZV9jaGVj a19jdXJyZW50X3N0YXRlKHBsYW5lX29sZCwgQVRPTUlDX1JFTEFYX05PTkUpOwotCi0JLyogUmUt ZW5hYmxlIHRoZSBwbGFuZSB0aHJvdWdoIHRoZSBsZWdhY3kgQ1JUQy9wcmltYXJ5LXBsYW5lIEFQ SSwgYW5kCi0JICogdmVyaWZ5IHRocm91Z2ggYXRvbWljLiAqLwotCWNydGNfY29tbWl0X2xlZ2Fj eShjcnRjLCBwbGFuZV9vbGQsIENSVENfUkVMQVhfTU9ERSk7CisJcGxhbmVfZ2V0X2N1cnJlbnRf c3RhdGUocHJpbWFyeSwgb2xkX3BsYW5lX3ZhbHVlcyk7CisJY3J0Y19nZXRfY3VycmVudF9zdGF0 ZShwaXBlX29iaiwgb2xkX2NydGNfdmFsdWVzKTsKKworCWlndF9hc3NlcnQoIW9sZF9jcnRjX3Zh bHVlc1tJR1RfQ1JUQ19NT0RFX0lEXSk7CisKKwlpZ3RfY3JlYXRlX3BhdHRlcm5fZmIocGlwZV9v YmotPmRpc3BsYXktPmRybV9mZCwKKwkJCSAgICAgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNw bGF5LAorCQkJICAgICBmb3JtYXQsIEk5MTVfVElMSU5HX05PTkUsICZmYik7CisJaWd0X3BsYW5l X3NldF9mYihwcmltYXJ5LCAmZmIpOworCWlndF9vdXRwdXRfc2V0X3BpcGUob3V0cHV0LCBwaXBl X29iai0+cGlwZSk7CisKKwlpZ3RfZGlzcGxheV9jb21taXRfYXRvbWljKHBpcGVfb2JqLT5kaXNw bGF5LCBEUk1fTU9ERV9BVE9NSUNfVEVTVF9PTkxZIHwgRFJNX01PREVfQVRPTUlDX0FMTE9XX01P REVTRVQsIE5VTEwpOworCisJLyogY2hlY2sgdGhlIHN0YXRlLCBzaG91bGQgc3RpbGwgYmUgb2xk IHN0YXRlICovCisJY3J0Y19jaGVja19jdXJyZW50X3N0YXRlKHBpcGVfb2JqLCBvbGRfY3J0Y192 YWx1ZXMsIG9sZF9wbGFuZV92YWx1ZXMsIEFUT01JQ19SRUxBWF9OT05FKTsKKwlwbGFuZV9jaGVj a19jdXJyZW50X3N0YXRlKHByaW1hcnksIG9sZF9wbGFuZV92YWx1ZXMsIEFUT01JQ19SRUxBWF9O T05FKTsKKworCS8qCisJICogRW5hYmxlIHRoZSBwbGFuZSB0aHJvdWdoIHRoZSBsZWdhY3kgQ1JU Qy9wcmltYXJ5LXBsYW5lIEFQSSwgYW5kCisJICogdmVyaWZ5IHRocm91Z2ggYXRvbWljLgorCSAq LworCWNydGNfY29tbWl0KHBpcGVfb2JqLCBwcmltYXJ5LCBDT01NSVRfTEVHQUNZLCBDUlRDX1JF TEFYX01PREUpOworCisJLyogU2FtZSBmb3IgZGlzYWJsZS4uICovCisJcGxhbmVfZ2V0X2N1cnJl bnRfc3RhdGUocHJpbWFyeSwgb2xkX3BsYW5lX3ZhbHVlcyk7CisJY3J0Y19nZXRfY3VycmVudF9z dGF0ZShwaXBlX29iaiwgb2xkX2NydGNfdmFsdWVzKTsKKworCWlndF9wbGFuZV9zZXRfZmIocHJp bWFyeSwgTlVMTCk7CisJaWd0X291dHB1dF9zZXRfcGlwZShvdXRwdXQsIFBJUEVfTk9ORSk7CisK KwlpZ3RfZGlzcGxheV9jb21taXRfYXRvbWljKHBpcGVfb2JqLT5kaXNwbGF5LCBEUk1fTU9ERV9B VE9NSUNfVEVTVF9PTkxZIHwgRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVTRVQsIE5VTEwpOwog Ci0JZHJtTW9kZUF0b21pY0ZyZWUocmVxKTsKKwkvKiBmb3IgZXh0cmEgc3RyZXNzLCBnbyB0aHJv dWdoIGRwbXMgb2ZmL29uIGN5Y2xlICovCisJc2V0X2RwbXMob3V0cHV0LCBEUk1fTU9ERV9EUE1T X09GRik7CisJc2V0X2RwbXMob3V0cHV0LCBEUk1fTU9ERV9EUE1TX09OKTsKKworCS8qIGNoZWNr IHRoZSBzdGF0ZSwgc2hvdWxkIHN0aWxsIGJlIG9sZCBzdGF0ZSAqLworCWNydGNfY2hlY2tfY3Vy cmVudF9zdGF0ZShwaXBlX29iaiwgb2xkX2NydGNfdmFsdWVzLCBvbGRfcGxhbmVfdmFsdWVzLCBB VE9NSUNfUkVMQVhfTk9ORSk7CisJcGxhbmVfY2hlY2tfY3VycmVudF9zdGF0ZShwcmltYXJ5LCBv bGRfcGxhbmVfdmFsdWVzLCBBVE9NSUNfUkVMQVhfTk9ORSk7CisKKwkvKiBBbmQgZGlzYWJsZSB0 aGUgcGlwZSBhbmQgcmVtb3ZlIGZiLCB0ZXN0IGNvbXBsZXRlICovCisJY3J0Y19jb21taXQocGlw ZV9vYmosIHByaW1hcnksIENPTU1JVF9BVE9NSUMsIEFUT01JQ19SRUxBWF9OT05FKTsKKwlpZ3Rf cmVtb3ZlX2ZiKHBpcGVfb2JqLT5kaXNwbGF5LT5kcm1fZmQsICZmYik7CiB9CiAKLXN0YXRpYyB2 b2lkIHBsYW5lX2N1cnNvcihzdHJ1Y3Qga21zX2F0b21pY19jcnRjX3N0YXRlICpjcnRjLAotCQkJ IHN0cnVjdCBrbXNfYXRvbWljX3BsYW5lX3N0YXRlICpwbGFuZV9vbGQpCitzdGF0aWMgdm9pZCBw bGFuZV9jdXJzb3IoaWd0X3BpcGVfdCAqcGlwZV9vYmosCisJCQkgaWd0X291dHB1dF90ICpvdXRw dXQsCisJCQkgaWd0X3BsYW5lX3QgKmN1cnNvcikKIHsKLQlzdHJ1Y3QgZHJtX21vZGVfbW9kZWlu Zm8gKm1vZGUgPSBjcnRjLT5tb2RlLmRhdGE7Ci0Jc3RydWN0IGttc19hdG9taWNfcGxhbmVfc3Rh dGUgcGxhbmUgPSAqcGxhbmVfb2xkOwotCWRybU1vZGVBdG9taWNSZXEgKnJlcSA9IGRybU1vZGVB dG9taWNBbGxvYygpOworCWRybU1vZGVNb2RlSW5mbyAqbW9kZSA9IGlndF9vdXRwdXRfZ2V0X21v ZGUob3V0cHV0KTsKIAlzdHJ1Y3QgaWd0X2ZiIGZiOwogCXVpbnQ2NF90IHdpZHRoLCBoZWlnaHQ7 Ci0KLQlpZ3RfYXNzZXJ0KHJlcSk7CisJaW50IHggPSBtb2RlLT5oZGlzcGxheSAvIDI7CisJaW50 IHkgPSBtb2RlLT52ZGlzcGxheSAvIDI7CiAKIAkvKiBBbnkga2VybmVsIG5ldyBlbm91Z2ggZm9y IGF0b21pYywgYWxzbyBoYXMgdGhlIGN1cnNvciBzaXplIGNhcHMuICovCi0JZG9fb3JfZGllKGRy bUdldENhcChwbGFuZS5zdGF0ZS0+ZGVzYy0+ZmQsCisJZG9fb3JfZGllKGRybUdldENhcChwaXBl X29iai0+ZGlzcGxheS0+ZHJtX2ZkLAogCSAgICAgICAgICAgICAgICAgICAgRFJNX0NBUF9DVVJT T1JfV0lEVEgsICZ3aWR0aCkpOwotCWRvX29yX2RpZShkcm1HZXRDYXAocGxhbmUuc3RhdGUtPmRl c2MtPmZkLAorCWRvX29yX2RpZShkcm1HZXRDYXAocGlwZV9vYmotPmRpc3BsYXktPmRybV9mZCwK IAkgICAgICAgICAgICAgICAgICAgIERSTV9DQVBfQ1VSU09SX0hFSUdIVCwgJmhlaWdodCkpOwog Ci0JcGxhbmUuc3JjX3ggPSAwOwotCXBsYW5lLnNyY195ID0gMDsKLQlwbGFuZS5zcmNfdyA9IHdp ZHRoIDw8IDE2OwotCXBsYW5lLnNyY19oID0gaGVpZ2h0IDw8IDE2OwotCXBsYW5lLmNydGNfeCA9 IG1vZGUtPmhkaXNwbGF5IC8gMjsKLQlwbGFuZS5jcnRjX3kgPSBtb2RlLT52ZGlzcGxheSAvIDI7 Ci0JcGxhbmUuY3J0Y193ID0gd2lkdGg7Ci0JcGxhbmUuY3J0Y19oID0gaGVpZ2h0OwotCXBsYW5l LmNydGNfaWQgPSBjcnRjLT5vYmo7Ci0JcGxhbmUuZmJfaWQgPSBpZ3RfY3JlYXRlX2NvbG9yX2Zi KHBsYW5lLnN0YXRlLT5kZXNjLT5mZCwKLQkJCQkJICB3aWR0aCwgaGVpZ2h0LAotCQkJCQkgIERS TV9GT1JNQVRfQVJHQjg4ODgsCi0JCQkJCSAgTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwKLQkJ CQkJICAwLjAsIDAuMCwgMC4wLAotCQkJCQkgICZmYik7Ci0JaWd0X2Fzc2VydF9uZXFfdTMyKHBs YW5lLmZiX2lkLCAwKTsKKwlpZ3RfY3JlYXRlX2NvbG9yX2ZiKHBpcGVfb2JqLT5kaXNwbGF5LT5k cm1fZmQsCisJCQkgICAgd2lkdGgsIGhlaWdodCwgRFJNX0ZPUk1BVF9BUkdCODg4OCwKKwkJCSAg ICBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLAorCQkJICAgIDAuMCwgMC4wLCAwLjAsICZmYik7 CiAKIAkvKiBGbGlwIHRoZSBjdXJzb3IgcGxhbmUgdXNpbmcgdGhlIGF0b21pYyBBUEksIGFuZCBk b3VibGUtY2hlY2sKIAkgKiBzdGF0ZSBpcyB3aGF0IHdlIHRoaW5rIGl0IHNob3VsZCBiZS4gKi8K LQlwbGFuZV9jb21taXRfYXRvbWljKCZwbGFuZSwgcmVxLCBBVE9NSUNfUkVMQVhfTk9ORSk7CisJ aWd0X3BsYW5lX3NldF9mYihjdXJzb3IsICZmYik7CisJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihj dXJzb3IsIHgsIHkpOworCXBsYW5lX2NvbW1pdChjdXJzb3IsIENPTU1JVF9BVE9NSUMsIEFUT01J Q19SRUxBWF9OT05FKTsKIAogCS8qIFJlc3RvcmUgdGhlIGN1cnNvciBwbGFuZSBhbmQgY2hlY2sg dGhlIHN0YXRlIG1hdGNoZXMgdGhlIG9sZC4gKi8KLQlwbGFuZV9jb21taXRfYXRvbWljKHBsYW5l X29sZCwgcmVxLCBBVE9NSUNfUkVMQVhfTk9ORSk7CisJaWd0X3BsYW5lX3NldF9mYihjdXJzb3Is IE5VTEwpOworCWlndF9wbGFuZV9zZXRfcG9zaXRpb24oY3Vyc29yLCAwLCAwKTsKKwlwbGFuZV9j b21taXQoY3Vyc29yLCBDT01NSVRfQVRPTUlDLCBBVE9NSUNfUkVMQVhfTk9ORSk7CiAKIAkvKiBS ZS1lbmFibGUgdGhlIHBsYW5lIHRocm91Z2ggdGhlIGxlZ2FjeSBjdXJzb3IgQVBJLCBhbmQgdmVy aWZ5CiAJICogdGhyb3VnaCBhdG9taWMuICovCi0JZG9fb3JfZGllKGRybU1vZGVNb3ZlQ3Vyc29y KHBsYW5lLnN0YXRlLT5kZXNjLT5mZCwgcGxhbmUuY3J0Y19pZCwKLQkJCQkgICAgcGxhbmUuY3J0 Y194LCBwbGFuZS5jcnRjX3kpKTsKLQlkb19vcl9kaWUoZHJtTW9kZVNldEN1cnNvcihwbGFuZS5z dGF0ZS0+ZGVzYy0+ZmQsIHBsYW5lLmNydGNfaWQsCi0JCQkJICAgZmIuZ2VtX2hhbmRsZSwgd2lk dGgsIGhlaWdodCkpOwotCXBsYW5lX2NoZWNrX2N1cnJlbnRfc3RhdGUoJnBsYW5lLCBQTEFORV9S RUxBWF9GQik7CisJaWd0X3BsYW5lX3NldF9mYihjdXJzb3IsICZmYik7CisJaWd0X3BsYW5lX3Nl dF9wb3NpdGlvbihjdXJzb3IsIHgsIHkpOworCXBsYW5lX2NvbW1pdChjdXJzb3IsIENPTU1JVF9M RUdBQ1ksIFBMQU5FX1JFTEFYX0ZCKTsKIAogCS8qIFdpZ2dsZS4gKi8KLQlwbGFuZS5jcnRjX3gg LT0gMTY7Ci0JcGxhbmUuY3J0Y195IC09IDE2OwotCWRvX29yX2RpZShkcm1Nb2RlTW92ZUN1cnNv cihwbGFuZS5zdGF0ZS0+ZGVzYy0+ZmQsIHBsYW5lLmNydGNfaWQsCi0JCQkJICAgIHBsYW5lLmNy dGNfeCwgcGxhbmUuY3J0Y195KSk7Ci0JcGxhbmVfY2hlY2tfY3VycmVudF9zdGF0ZSgmcGxhbmUs IFBMQU5FX1JFTEFYX0ZCKTsKKwlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKGN1cnNvciwgeCAtIDE2 LCB5IC0gMTYpOworCXBsYW5lX2NvbW1pdChjdXJzb3IsIENPTU1JVF9MRUdBQ1ksIFBMQU5FX1JF TEFYX0ZCKTsKIAogCS8qIFJlc3RvcmUgdGhlIHBsYW5lIHRvIGl0cyBvcmlnaW5hbCBzZXR0aW5n cyB0aHJvdWdoIHRoZSBsZWdhY3kgY3Vyc29yCiAJICogQVBJLCBhbmQgdmVyaWZ5IHRocm91Z2gg YXRvbWljLiAqLwotCWRvX29yX2RpZShkcm1Nb2RlU2V0Q3Vyc29yMihwbGFuZS5zdGF0ZS0+ZGVz Yy0+ZmQsIHBsYW5lLmNydGNfaWQsCi0JCQkJICAgIDAsIDAsIDAsIDAsIDApKTsKLQlwbGFuZV9j aGVja19jdXJyZW50X3N0YXRlKHBsYW5lX29sZCwgQVRPTUlDX1JFTEFYX05PTkUpOwotCi0JLyog RmluYWxseSwgcmVzdG9yZSB0byB0aGUgb3JpZ2luYWwgc3RhdGUuICovCi0JcGxhbmVfY29tbWl0 X2F0b21pYyhwbGFuZV9vbGQsIHJlcSwgQVRPTUlDX1JFTEFYX05PTkUpOwotCi0JZHJtTW9kZUF0 b21pY0ZyZWUocmVxKTsKKwlpZ3RfcGxhbmVfc2V0X2ZiKGN1cnNvciwgTlVMTCk7CisJaWd0X3Bs YW5lX3NldF9wb3NpdGlvbihjdXJzb3IsIDAsIDApOworCXBsYW5lX2NvbW1pdChjdXJzb3IsIENP TU1JVF9MRUdBQ1ksIEFUT01JQ19SRUxBWF9OT05FKTsKIH0KIAotc3RhdGljIHZvaWQgcGxhbmVf aW52YWxpZF9wYXJhbXMoc3RydWN0IGttc19hdG9taWNfY3J0Y19zdGF0ZSAqY3J0YywKLQkJCQkg c3RydWN0IGttc19hdG9taWNfcGxhbmVfc3RhdGUgKnBsYW5lX29sZCwKLQkJCQkgc3RydWN0IGtt c19hdG9taWNfY29ubmVjdG9yX3N0YXRlICpjb25uKQorc3RhdGljIHZvaWQgcGxhbmVfaW52YWxp ZF9wYXJhbXMoaWd0X3BpcGVfdCAqcGlwZSwKKwkJCQkgaWd0X291dHB1dF90ICpvdXRwdXQsCisJ CQkJIGlndF9wbGFuZV90ICpwbGFuZSwKKwkJCQkgc3RydWN0IGlndF9mYiAqZmIpCiB7Ci0Jc3Ry dWN0IGRybV9tb2RlX21vZGVpbmZvICptb2RlID0gY3J0Yy0+bW9kZS5kYXRhOwotCXN0cnVjdCBr bXNfYXRvbWljX3BsYW5lX3N0YXRlIHBsYW5lID0gKnBsYW5lX29sZDsKLQl1aW50MzJfdCBmb3Jt YXQgPSBwbGFuZV9nZXRfaWd0X2Zvcm1hdCgmcGxhbmUpOwotCWRybU1vZGVBdG9taWNSZXEgKnJl cSA9IGRybU1vZGVBdG9taWNBbGxvYygpOwotCXN0cnVjdCBpZ3RfZmIgZmI7CisJc3RydWN0IGln dF9mYiBmYjI7CiAKIAkvKiBQYXNzIGEgc2VyaWVzIG9mIGludmFsaWQgb2JqZWN0IElEcyBmb3Ig dGhlIEZCIElELiAqLwotCXBsYW5lLmZiX2lkID0gcGxhbmUub2JqOwotCXBsYW5lX2NvbW1pdF9h dG9taWNfZXJyKCZwbGFuZSwgcGxhbmVfb2xkLCByZXEsCi0JICAgICAgICAgICAgICAgICAgICAg ICAgQVRPTUlDX1JFTEFYX05PTkUsIEVJTlZBTCk7CisJaWd0X3BsYW5lX3NldF9wcm9wX3ZhbHVl KHBsYW5lLCBJR1RfUExBTkVfRkJfSUQsIHBsYW5lLT5kcm1fcGxhbmUtPnBsYW5lX2lkKTsKKwlw bGFuZV9jb21taXRfYXRvbWljX2VycihwbGFuZSwgQVRPTUlDX1JFTEFYX05PTkUsIEVJTlZBTCk7 CiAKLQlwbGFuZS5mYl9pZCA9IGNydGMtPm9iajsKLQlwbGFuZV9jb21taXRfYXRvbWljX2Vycigm cGxhbmUsIHBsYW5lX29sZCwgcmVxLAotCSAgICAgICAgICAgICAgICAgICAgICAgIEFUT01JQ19S RUxBWF9OT05FLCBFSU5WQUwpOworCWlndF9wbGFuZV9zZXRfcHJvcF92YWx1ZShwbGFuZSwgSUdU X1BMQU5FX0ZCX0lELCBwaXBlLT5jcnRjX2lkKTsKKwlwbGFuZV9jb21taXRfYXRvbWljX2Vycihw bGFuZSwgQVRPTUlDX1JFTEFYX05PTkUsIEVJTlZBTCk7CiAKLQlwbGFuZS5mYl9pZCA9IGNvbm4t Pm9iajsKLQlwbGFuZV9jb21taXRfYXRvbWljX2VycigmcGxhbmUsIHBsYW5lX29sZCwgcmVxLAot CSAgICAgICAgICAgICAgICAgICAgICAgIEFUT01JQ19SRUxBWF9OT05FLCBFSU5WQUwpOworCWln dF9wbGFuZV9zZXRfcHJvcF92YWx1ZShwbGFuZSwgSUdUX1BMQU5FX0ZCX0lELCBvdXRwdXQtPmlk KTsKKwlwbGFuZV9jb21taXRfYXRvbWljX2VycihwbGFuZSwgQVRPTUlDX1JFTEFYX05PTkUsIEVJ TlZBTCk7CiAKLQlwbGFuZS5mYl9pZCA9IGNydGMtPm1vZGUuaWQ7Ci0JcGxhbmVfY29tbWl0X2F0 b21pY19lcnIoJnBsYW5lLCBwbGFuZV9vbGQsIHJlcSwKLQkgICAgICAgICAgICAgICAgICAgICAg ICBBVE9NSUNfUkVMQVhfTk9ORSwgRUlOVkFMKTsKKwlpZ3RfcGxhbmVfc2V0X3Byb3BfdmFsdWUo cGxhbmUsIElHVF9QTEFORV9GQl9JRCwgcGlwZS0+dmFsdWVzW0lHVF9DUlRDX01PREVfSURdKTsK KwlwbGFuZV9jb21taXRfYXRvbWljX2VycihwbGFuZSwgQVRPTUlDX1JFTEFYX05PTkUsIEVJTlZB TCk7CiAKLQlwbGFuZS5mYl9pZCA9IHBsYW5lX29sZC0+ZmJfaWQ7Ci0JcGxhbmVfY29tbWl0X2F0 b21pYygmcGxhbmUsIHJlcSwgQVRPTUlDX1JFTEFYX05PTkUpOworCWlndF9wbGFuZV9zZXRfZmIo cGxhbmUsIGZiKTsKKwlwbGFuZV9jb21taXQocGxhbmUsIENPTU1JVF9BVE9NSUMsIEFUT01JQ19S RUxBWF9OT05FKTsKIAogCS8qIFBhc3MgYSBzZXJpZXMgb2YgaW52YWxpZCBvYmplY3QgSURzIGZv ciB0aGUgQ1JUQyBJRC4gKi8KLQlwbGFuZS5jcnRjX2lkID0gcGxhbmUub2JqOwotCXBsYW5lX2Nv bW1pdF9hdG9taWNfZXJyKCZwbGFuZSwgcGxhbmVfb2xkLCByZXEsCi0JICAgICAgICAgICAgICAg ICAgICAgICAgQVRPTUlDX1JFTEFYX05PTkUsIEVJTlZBTCk7CisJaWd0X3BsYW5lX3NldF9wcm9w X3ZhbHVlKHBsYW5lLCBJR1RfUExBTkVfQ1JUQ19JRCwgcGxhbmUtPmRybV9wbGFuZS0+cGxhbmVf aWQpOworCXBsYW5lX2NvbW1pdF9hdG9taWNfZXJyKHBsYW5lLCBBVE9NSUNfUkVMQVhfTk9ORSwg RUlOVkFMKTsKIAotCXBsYW5lLmNydGNfaWQgPSBwbGFuZS5mYl9pZDsKLQlwbGFuZV9jb21taXRf YXRvbWljX2VycigmcGxhbmUsIHBsYW5lX29sZCwgcmVxLAotCSAgICAgICAgICAgICAgICAgICAg ICAgIEFUT01JQ19SRUxBWF9OT05FLCBFSU5WQUwpOworCWlndF9wbGFuZV9zZXRfcHJvcF92YWx1 ZShwbGFuZSwgSUdUX1BMQU5FX0NSVENfSUQsIGZiLT5mYl9pZCk7CisJcGxhbmVfY29tbWl0X2F0 b21pY19lcnIocGxhbmUsIEFUT01JQ19SRUxBWF9OT05FLCBFSU5WQUwpOwogCi0JcGxhbmUuY3J0 Y19pZCA9IGNvbm4tPm9iajsKLQlwbGFuZV9jb21taXRfYXRvbWljX2VycigmcGxhbmUsIHBsYW5l X29sZCwgcmVxLAotCSAgICAgICAgICAgICAgICAgICAgICAgIEFUT01JQ19SRUxBWF9OT05FLCBF SU5WQUwpOworCWlndF9wbGFuZV9zZXRfcHJvcF92YWx1ZShwbGFuZSwgSUdUX1BMQU5FX0NSVENf SUQsIG91dHB1dC0+aWQpOworCXBsYW5lX2NvbW1pdF9hdG9taWNfZXJyKHBsYW5lLCBBVE9NSUNf UkVMQVhfTk9ORSwgRUlOVkFMKTsKIAotCXBsYW5lLmNydGNfaWQgPSBjcnRjLT5tb2RlLmlkOwot CXBsYW5lX2NvbW1pdF9hdG9taWNfZXJyKCZwbGFuZSwgcGxhbmVfb2xkLCByZXEsCi0JICAgICAg ICAgICAgICAgICAgICAgICAgQVRPTUlDX1JFTEFYX05PTkUsIEVJTlZBTCk7CisJaWd0X3BsYW5l X3NldF9wcm9wX3ZhbHVlKHBsYW5lLCBJR1RfUExBTkVfQ1JUQ19JRCwgcGlwZS0+dmFsdWVzW0lH VF9DUlRDX01PREVfSURdKTsKKwlwbGFuZV9jb21taXRfYXRvbWljX2VycihwbGFuZSwgQVRPTUlD X1JFTEFYX05PTkUsIEVJTlZBTCk7CiAKLQlwbGFuZS5jcnRjX2lkID0gcGxhbmVfb2xkLT5jcnRj X2lkOwotCXBsYW5lX2NvbW1pdF9hdG9taWMoJnBsYW5lLCByZXEsIEFUT01JQ19SRUxBWF9OT05F KTsKKwlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBmYik7CisJcGxhbmVfY29tbWl0KHBsYW5lLCBD T01NSVRfQVRPTUlDLCBBVE9NSUNfUkVMQVhfTk9ORSk7CiAKIAkvKiBDcmVhdGUgYSBmcmFtZWJ1 ZmZlciB0b28gc21hbGwgZm9yIHRoZSBwbGFuZSBjb25maWd1cmF0aW9uLiAqLwotCWlndF9yZXF1 aXJlKGZvcm1hdCAhPSAwKTsKKwlpZ3RfY3JlYXRlX3BhdHRlcm5fZmIocGlwZS0+ZGlzcGxheS0+ ZHJtX2ZkLAorCQkJICAgICAgZmItPndpZHRoIC0gMSwgZmItPmhlaWdodCAtIDEsCisJCQkgICAg ICBmYi0+ZHJtX2Zvcm1hdCwgSTkxNV9USUxJTkdfTk9ORSwgJmZiMik7CiAKLQlwbGFuZS5zcmNf eCA9IDA7Ci0JcGxhbmUuc3JjX3kgPSAwOwotCXBsYW5lLnNyY193ID0gbW9kZS0+aGRpc3BsYXkg PDwgMTY7Ci0JcGxhbmUuc3JjX2ggPSBtb2RlLT52ZGlzcGxheSA8PCAxNjsKLQlwbGFuZS5jcnRj X3ggPSAwOwotCXBsYW5lLmNydGNfeSA9IDA7Ci0JcGxhbmUuY3J0Y193ID0gbW9kZS0+aGRpc3Bs YXk7Ci0JcGxhbmUuY3J0Y19oID0gbW9kZS0+dmRpc3BsYXk7Ci0JcGxhbmUuY3J0Y19pZCA9IGNy dGMtPm9iajsKLQlwbGFuZS5mYl9pZCA9IGlndF9jcmVhdGVfcGF0dGVybl9mYihwbGFuZS5zdGF0 ZS0+ZGVzYy0+ZmQsCi0JCQkJCSAgICBwbGFuZS5jcnRjX3cgLSAxLCBwbGFuZS5jcnRjX2ggLSAx LAotCQkJCQkgICAgZm9ybWF0LCBJOTE1X1RJTElOR19OT05FLCAmZmIpOwotCi0JcGxhbmVfY29t bWl0X2F0b21pY19lcnIoJnBsYW5lLCBwbGFuZV9vbGQsIHJlcSwKLQkgICAgICAgICAgICAgICAg ICAgICAgICBBVE9NSUNfUkVMQVhfTk9ORSwgRU5PU1BDKTsKKwlpZ3RfcGxhbmVfc2V0X3Byb3Bf dmFsdWUocGxhbmUsIElHVF9QTEFORV9GQl9JRCwgZmIyLmZiX2lkKTsKKwlwbGFuZV9jb21taXRf YXRvbWljX2VycihwbGFuZSwgQVRPTUlDX1JFTEFYX05PTkUsIEVOT1NQQyk7CiAKIAkvKiBSZXN0 b3JlIHRoZSBwcmltYXJ5IHBsYW5lIGFuZCBjaGVjayB0aGUgc3RhdGUgbWF0Y2hlcyB0aGUgb2xk LiAqLwotCXBsYW5lX2NvbW1pdF9hdG9taWMocGxhbmVfb2xkLCByZXEsIEFUT01JQ19SRUxBWF9O T05FKTsKLQotCWRybU1vZGVBdG9taWNGcmVlKHJlcSk7CisJaWd0X3BsYW5lX3NldF9mYihwbGFu ZSwgZmIpOworCXBsYW5lX2NvbW1pdChwbGFuZSwgQ09NTUlUX0FUT01JQywgQVRPTUlDX1JFTEFY X05PTkUpOwogfQogCi1zdGF0aWMgdm9pZCBwbGFuZV9pbnZhbGlkX3BhcmFtc19mZW5jZShzdHJ1 Y3Qga21zX2F0b21pY19jcnRjX3N0YXRlICpjcnRjLAotCQkJCXN0cnVjdCBrbXNfYXRvbWljX3Bs YW5lX3N0YXRlICpwbGFuZV9vbGQsCi0JCQkJc3RydWN0IGttc19hdG9taWNfY29ubmVjdG9yX3N0 YXRlICpjb25uKQorc3RhdGljIHZvaWQgcGxhbmVfaW52YWxpZF9wYXJhbXNfZmVuY2UoaWd0X3Bp cGVfdCAqcGlwZSwKKwkJCQkgICAgICAgaWd0X291dHB1dF90ICpvdXRwdXQsCisJCQkJICAgICAg IGlndF9wbGFuZV90ICpwbGFuZSkKIHsKLQlzdHJ1Y3Qga21zX2F0b21pY19wbGFuZV9zdGF0ZSBw bGFuZSA9ICpwbGFuZV9vbGQ7Ci0JZHJtTW9kZUF0b21pY1JlcSAqcmVxID0gZHJtTW9kZUF0b21p Y0FsbG9jKCk7CiAJaW50IHRpbWVsaW5lLCBmZW5jZV9mZDsKIAogCWlndF9yZXF1aXJlX3N3X3N5 bmMoKTsKIAorCXRpbWVsaW5lID0gc3dfc3luY190aW1lbGluZV9jcmVhdGUoKTsKKwogCS8qIGlu dmFsaWQgZmVuY2UgZmQgKi8KLQlwbGFuZS5mZW5jZV9mZCA9IHBsYW5lLnN0YXRlLT5kZXNjLT5m ZDsKLQlwbGFuZS5jcnRjX2lkID0gcGxhbmVfb2xkLT5jcnRjX2lkOwotCXBsYW5lX2NvbW1pdF9h dG9taWNfZXJyKCZwbGFuZSwgcGxhbmVfb2xkLCByZXEsCi0JICAgICAgICAgICAgICAgICAgICAg ICAgQVRPTUlDX1JFTEFYX05PTkUsIEVJTlZBTCk7CisJaWd0X3BsYW5lX3NldF9mZW5jZV9mZChw bGFuZSwgcGlwZS0+ZGlzcGxheS0+ZHJtX2ZkKTsKKwlwbGFuZV9jb21taXRfYXRvbWljX2Vycihw bGFuZSwgQVRPTUlDX1JFTEFYX05PTkUsIEVJTlZBTCk7CiAKIAkvKiBWYWxpZCBmZW5jZV9mZCBi dXQgaW52YWxpZCBDUlRDICovCi0JdGltZWxpbmUgPSBzd19zeW5jX3RpbWVsaW5lX2NyZWF0ZSgp OwotCWZlbmNlX2ZkID0gIHN3X3N5bmNfdGltZWxpbmVfY3JlYXRlX2ZlbmNlKHRpbWVsaW5lLCAx KTsKLQlwbGFuZS5mZW5jZV9mZCA9IGZlbmNlX2ZkOwotCXBsYW5lLmNydGNfaWQgPSB+MFU7Ci0J cGxhbmVfY29tbWl0X2F0b21pY19lcnIoJnBsYW5lLCBwbGFuZV9vbGQsIHJlcSwKLQkgICAgICAg ICAgICAgICAgICAgICAgICBBVE9NSUNfUkVMQVhfTk9ORSwgRUlOVkFMKTsKKwlmZW5jZV9mZCA9 IHN3X3N5bmNfdGltZWxpbmVfY3JlYXRlX2ZlbmNlKHRpbWVsaW5lLCAxKTsKKworCWlndF9wbGFu ZV9zZXRfcHJvcF92YWx1ZShwbGFuZSwgSUdUX1BMQU5FX0NSVENfSUQsIH4wKTsKKwlpZ3RfcGxh bmVfc2V0X2ZlbmNlX2ZkKHBsYW5lLCBmZW5jZV9mZCk7CisJcGxhbmVfY29tbWl0X2F0b21pY19l cnIocGxhbmUsIEFUT01JQ19SRUxBWF9OT05FLCBFSU5WQUwpOworCisJc3dfc3luY190aW1lbGlu ZV9pbmModGltZWxpbmUsIDEpOworCWlndF9wbGFuZV9zZXRfcHJvcF92YWx1ZShwbGFuZSwgSUdU X1BMQU5FX0NSVENfSUQsIHBpcGUtPmNydGNfaWQpOworCXBsYW5lX2NvbW1pdChwbGFuZSwgQ09N TUlUX0FUT01JQywgQVRPTUlDX1JFTEFYX05PTkUpOwogCi0JcGxhbmUuZmVuY2VfZmQgPSAtMTsK IAljbG9zZShmZW5jZV9mZCk7CiAJY2xvc2UodGltZWxpbmUpOwotCi0JZHJtTW9kZUF0b21pY0Zy ZWUocmVxKTsKIH0KIAotc3RhdGljIHZvaWQgY3J0Y19pbnZhbGlkX3BhcmFtcyhzdHJ1Y3Qga21z X2F0b21pY19jcnRjX3N0YXRlICpjcnRjX29sZCwKLQkJCQlzdHJ1Y3Qga21zX2F0b21pY19wbGFu ZV9zdGF0ZSAqcGxhbmUsCi0JCQkJc3RydWN0IGttc19hdG9taWNfY29ubmVjdG9yX3N0YXRlICpj b25uKQorc3RhdGljIHZvaWQgY3J0Y19pbnZhbGlkX3BhcmFtcyhpZ3RfcGlwZV90ICpwaXBlLAor CQkJCWlndF9vdXRwdXRfdCAqb3V0cHV0LAorCQkJCWlndF9wbGFuZV90ICpwbGFuZSwKKwkJCQlz dHJ1Y3QgaWd0X2ZiICpmYikKIHsKLQlzdHJ1Y3Qga21zX2F0b21pY19jcnRjX3N0YXRlIGNydGMg PSAqY3J0Y19vbGQ7Ci0JZHJtTW9kZUF0b21pY1JlcSAqcmVxID0gZHJtTW9kZUF0b21pY0FsbG9j KCk7Ci0KLQlpZ3RfYXNzZXJ0KHJlcSk7CisJdWludDY0X3Qgb2xkX21vZGVfaWQgPSBwaXBlLT52 YWx1ZXNbSUdUX0NSVENfTU9ERV9JRF07CisJZHJtTW9kZU1vZGVJbmZvICptb2RlID0gaWd0X291 dHB1dF9nZXRfbW9kZShvdXRwdXQpOwogCiAJLyogUGFzcyBhIHNlcmllcyBvZiBpbnZhbGlkIG9i amVjdCBJRHMgZm9yIHRoZSBtb2RlIElELiAqLwotCWNydGMubW9kZS5pZCA9IHBsYW5lLT5vYmo7 Ci0JY3J0Y19jb21taXRfYXRvbWljX2VycigmY3J0YywgcGxhbmUsIGNydGNfb2xkLCBwbGFuZSwg cmVxLCAwLAotCSAgICAgICAgICAgICAgICAgICAgICAgQVRPTUlDX1JFTEFYX05PTkUsIEVJTlZB TCk7CisJaWd0X3BpcGVfb2JqX3NldF9wcm9wX3ZhbHVlKHBpcGUsIElHVF9DUlRDX01PREVfSUQs IHBsYW5lLT5kcm1fcGxhbmUtPnBsYW5lX2lkKTsKKwljcnRjX2NvbW1pdF9hdG9taWNfZXJyKHBp cGUsIHBsYW5lLCBBVE9NSUNfUkVMQVhfTk9ORSwgRUlOVkFMKTsKIAotCWNydGMubW9kZS5pZCA9 IGNydGMub2JqOwotCWNydGNfY29tbWl0X2F0b21pY19lcnIoJmNydGMsIHBsYW5lLCBjcnRjX29s ZCwgcGxhbmUsIHJlcSwgMCwKLQkgICAgICAgICAgICAgICAgICAgICAgIEFUT01JQ19SRUxBWF9O T05FLCBFSU5WQUwpOworCWlndF9waXBlX29ial9zZXRfcHJvcF92YWx1ZShwaXBlLCBJR1RfQ1JU Q19NT0RFX0lELCBwaXBlLT5jcnRjX2lkKTsKKwljcnRjX2NvbW1pdF9hdG9taWNfZXJyKHBpcGUs IHBsYW5lLCBBVE9NSUNfUkVMQVhfTk9ORSwgRUlOVkFMKTsKIAotCWNydGMubW9kZS5pZCA9IGNv bm4tPm9iajsKLQljcnRjX2NvbW1pdF9hdG9taWNfZXJyKCZjcnRjLCBwbGFuZSwgY3J0Y19vbGQs IHBsYW5lLCByZXEsIDAsCi0JICAgICAgICAgICAgICAgICAgICAgICBBVE9NSUNfUkVMQVhfTk9O RSwgRUlOVkFMKTsKKwlpZ3RfcGlwZV9vYmpfc2V0X3Byb3BfdmFsdWUocGlwZSwgSUdUX0NSVENf TU9ERV9JRCwgb3V0cHV0LT5pZCk7CisJY3J0Y19jb21taXRfYXRvbWljX2VycihwaXBlLCBwbGFu ZSwgQVRPTUlDX1JFTEFYX05PTkUsIEVJTlZBTCk7CiAKLQljcnRjLm1vZGUuaWQgPSBwbGFuZS0+ ZmJfaWQ7Ci0JY3J0Y19jb21taXRfYXRvbWljX2VycigmY3J0YywgcGxhbmUsIGNydGNfb2xkLCBw bGFuZSwgcmVxLCAwLAotCSAgICAgICAgICAgICAgICAgICAgICAgQVRPTUlDX1JFTEFYX05PTkUs IEVJTlZBTCk7CisJaWd0X3BpcGVfb2JqX3NldF9wcm9wX3ZhbHVlKHBpcGUsIElHVF9DUlRDX01P REVfSUQsIGZiLT5mYl9pZCk7CisJY3J0Y19jb21taXRfYXRvbWljX2VycihwaXBlLCBwbGFuZSwg QVRPTUlDX1JFTEFYX05PTkUsIEVJTlZBTCk7CiAKLQkvKiBzdWNjZXNzZnVsIFRFU1RfT05MWSB3 aXRoIGZlbmNlcyBzZXQgKi8KLQljcnRjLm1vZGUuaWQgPSBjcnRjX29sZC0+bW9kZS5pZDsKLQlj cnRjX2NvbW1pdF9hdG9taWMoJmNydGMsIHBsYW5lLCByZXEsIEFUT01JQ19SRUxBWF9OT05FLAot CQkJICAgRFJNX01PREVfQVRPTUlDX1RFU1RfT05MWSk7CisJLyogQ2FuIHdlIHJlc3RvcmUgbW9k ZT8gKi8KKwlpZ3RfcGlwZV9vYmpfc2V0X3Byb3BfdmFsdWUocGlwZSwgSUdUX0NSVENfTU9ERV9J RCwgb2xkX21vZGVfaWQpOworCWNydGNfY29tbWl0X2F0b21pY19mbGFnc19lcnIocGlwZSwgcGxh bmUsIERSTV9NT0RFX0FUT01JQ19URVNUX09OTFksIEFUT01JQ19SRUxBWF9OT05FLCAwKTsKIAog CS8qCiAJICogVEVTVF9PTkxZIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIERSTV9NT0RFX1BBR0Vf RkxJUF9FVkVOVCwKIAkgKiBidXQgRFJNX01PREVfUEFHRV9GTElQX0VWRU5UIHdpbGwgYWx3YXlz IGdlbmVyYXRlIEVJTlZBTAogCSAqIHdpdGhvdXQgdmFsaWQgY3J0Yywgc28gdGVzdCBpdCBoZXJl LgogCSAqLwotCWNydGNfY29tbWl0X2F0b21pY19lcnIoJmNydGMsIHBsYW5lLCBjcnRjX29sZCwg cGxhbmUsIHJlcSwKLQkJCSAgICAgICBEUk1fTU9ERV9BVE9NSUNfVEVTVF9PTkxZIHwgRFJNX01P REVfUEFHRV9GTElQX0VWRU5ULAotCQkJICAgICAgIEFUT01JQ19SRUxBWF9OT05FLCBFSU5WQUwp OworCWNydGNfY29tbWl0X2F0b21pY19mbGFnc19lcnIocGlwZSwgcGxhbmUsCisJCQkJICAgICBE Uk1fTU9ERV9BVE9NSUNfVEVTVF9PTkxZIHwgRFJNX01PREVfUEFHRV9GTElQX0VWRU5ULAorCQkJ CSAgICAgQVRPTUlDX1JFTEFYX05PTkUsIEVJTlZBTCk7CiAKIAkvKiBDcmVhdGUgYSBibG9iIHdo aWNoIGlzIHRoZSB3cm9uZyBzaXplIHRvIGJlIGEgdmFsaWQgbW9kZS4gKi8KLQlkb19vcl9kaWUo ZHJtTW9kZUNyZWF0ZVByb3BlcnR5QmxvYihjcnRjLnN0YXRlLT5kZXNjLT5mZCwKLQkJCQkJICAg IGNydGMubW9kZS5kYXRhLAotCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBkcm1fbW9kZV9tb2RlaW5m bykgLSAxLAotCQkJCQkgICAgJmNydGMubW9kZS5pZCkpOwotCWNydGNfY29tbWl0X2F0b21pY19l cnIoJmNydGMsIHBsYW5lLCBjcnRjX29sZCwgcGxhbmUsIHJlcSwgMCwKLQkgICAgICAgICAgICAg ICAgICAgICAgIEFUT01JQ19SRUxBWF9OT05FLCBFSU5WQUwpOworCWlndF9waXBlX29ial9yZXBs YWNlX3Byb3BfYmxvYihwaXBlLCBJR1RfQ1JUQ19NT0RFX0lELCBtb2RlLCBzaXplb2YoKm1vZGUp IC0gMSk7CisJY3J0Y19jb21taXRfYXRvbWljX2VycihwaXBlLCBwbGFuZSwgQVRPTUlDX1JFTEFY X05PTkUsIEVJTlZBTCk7CiAKLQotCWRvX29yX2RpZShkcm1Nb2RlQ3JlYXRlUHJvcGVydHlCbG9i KGNydGMuc3RhdGUtPmRlc2MtPmZkLAotCQkJCQkgICAgY3J0Yy5tb2RlLmRhdGEsCi0JCQkJCSAg ICBzaXplb2Yoc3RydWN0IGRybV9tb2RlX21vZGVpbmZvKSArIDEsCi0JCQkJCSAgICAmY3J0Yy5t b2RlLmlkKSk7Ci0JY3J0Y19jb21taXRfYXRvbWljX2VycigmY3J0YywgcGxhbmUsIGNydGNfb2xk LCBwbGFuZSwgcmVxLCAwLAotCSAgICAgICAgICAgICAgICAgICAgICAgQVRPTUlDX1JFTEFYX05P TkUsIEVJTlZBTCk7CisJaWd0X3BpcGVfb2JqX3JlcGxhY2VfcHJvcF9ibG9iKHBpcGUsIElHVF9D UlRDX01PREVfSUQsIG1vZGUsIHNpemVvZigqbW9kZSkgKyAxKTsKKwljcnRjX2NvbW1pdF9hdG9t aWNfZXJyKHBpcGUsIHBsYW5lLCBBVE9NSUNfUkVMQVhfTk9ORSwgRUlOVkFMKTsKIAogCiAJLyog UmVzdG9yZSB0aGUgQ1JUQyBhbmQgY2hlY2sgdGhlIHN0YXRlIG1hdGNoZXMgdGhlIG9sZC4gKi8K LQljcnRjX2NvbW1pdF9hdG9taWMoY3J0Y19vbGQsIHBsYW5lLCByZXEsIEFUT01JQ19SRUxBWF9O T05FLCAwKTsKLQotCWRybU1vZGVBdG9taWNGcmVlKHJlcSk7CisJaWd0X3BpcGVfb2JqX3JlcGxh Y2VfcHJvcF9ibG9iKHBpcGUsIElHVF9DUlRDX01PREVfSUQsIG1vZGUsIHNpemVvZigqbW9kZSkp OworCWNydGNfY29tbWl0KHBpcGUsIHBsYW5lLCBDT01NSVRfQVRPTUlDLCBBVE9NSUNfUkVMQVhf Tk9ORSk7CiB9CiAKLXN0YXRpYyB2b2lkIGNydGNfaW52YWxpZF9wYXJhbXNfZmVuY2Uoc3RydWN0 IGttc19hdG9taWNfY3J0Y19zdGF0ZSAqY3J0Y19vbGQsCi0JCQkJc3RydWN0IGttc19hdG9taWNf cGxhbmVfc3RhdGUgKnBsYW5lLAotCQkJCXN0cnVjdCBrbXNfYXRvbWljX2Nvbm5lY3Rvcl9zdGF0 ZSAqY29ubikKK3N0YXRpYyB2b2lkIGNydGNfaW52YWxpZF9wYXJhbXNfZmVuY2UoaWd0X3BpcGVf dCAqcGlwZSwKKwkJCQkgICAgICBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwKKwkJCQkgICAgICBpZ3Rf cGxhbmVfdCAqcGxhbmUsCisJCQkJICAgICAgc3RydWN0IGlndF9mYiAqZmIpCiB7Ci0Jc3RydWN0 IGttc19hdG9taWNfY3J0Y19zdGF0ZSBjcnRjID0gKmNydGNfb2xkOwotCWRybU1vZGVBdG9taWNS ZXEgKnJlcSA9IGRybU1vZGVBdG9taWNBbGxvYygpOwotCWludCB0aW1lbGluZSwgZmVuY2VfZmQs ICpvdXRfZmVuY2U7CisJaW50IHRpbWVsaW5lLCBmZW5jZV9mZDsKKwl2b2lkICptYXA7CisJY29u c3QgcHRyZGlmZl90IFBBR0VfU0laRSA9IHN5c2NvbmYoX1NDX1BBR0VfU0laRSk7CisJdWludDY0 X3Qgb2xkX21vZGVfaWQgPSBwaXBlLT52YWx1ZXNbSUdUX0NSVENfTU9ERV9JRF07CiAKIAlpZ3Rf cmVxdWlyZV9zd19zeW5jKCk7CiAKKwl0aW1lbGluZSA9IHN3X3N5bmNfdGltZWxpbmVfY3JlYXRl KCk7CisKKwkvKiBpbnZhbGlkIG91dF9mZW5jZV9wdHIgKi8KKwltYXAgPSBtbWFwKE5VTEwsIFBB R0VfU0laRSwgUFJPVF9SRUFELCBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUsIC0xLCAwKTsK KwlpZ3RfYXNzZXJ0KG1hcCAhPSBNQVBfRkFJTEVEKTsKKworCWlndF9waXBlX29ial9zZXRfcHJv cF92YWx1ZShwaXBlLCBJR1RfQ1JUQ19PVVRfRkVOQ0VfUFRSLCAocHRyZGlmZl90KW1hcCk7CisJ Y3J0Y19jb21taXRfYXRvbWljX2VycihwaXBlLCBwbGFuZSwgQVRPTUlDX1JFTEFYX05PTkUsIEVG QVVMVCk7CisJbXVubWFwKG1hcCwgUEFHRV9TSVpFKTsKKwogCS8qIGludmFsaWQgb3V0X2ZlbmNl X3B0ciAqLwotCWNydGMubW9kZS5pZCA9IGNydGNfb2xkLT5tb2RlLmlkOwotCWNydGMub3V0X2Zl bmNlX3B0ciA9IChpbnQzMl90ICopIGNydGNfaW52YWxpZF9wYXJhbXM7Ci0JY3J0Y19jb21taXRf YXRvbWljX2VycigmY3J0YywgcGxhbmUsIGNydGNfb2xkLCBwbGFuZSwgcmVxLCAwLAotCSAgICAg ICAgICAgICAgICAgICAgICAgQVRPTUlDX1JFTEFYX05PTkUsIEVGQVVMVCk7CisJbWFwID0gbW1h cChOVUxMLCBQQUdFX1NJWkUsIFBST1RfRVhFQywgTUFQX0FOT05ZTU9VUyB8IE1BUF9QUklWQVRF LCAtMSwgMCk7CisJaWd0X2Fzc2VydChtYXAgIT0gTUFQX0ZBSUxFRCk7CisKKwlpZ3RfcGlwZV9v Ympfc2V0X3Byb3BfdmFsdWUocGlwZSwgSUdUX0NSVENfT1VUX0ZFTkNFX1BUUiwgKHB0cmRpZmZf dCltYXApOworCWNydGNfY29tbWl0X2F0b21pY19lcnIocGlwZSwgcGxhbmUsIEFUT01JQ19SRUxB WF9OT05FLCBFRkFVTFQpOworCW11bm1hcChtYXAsIFBBR0VfU0laRSk7CiAKIAkvKiBpbnZhbGlk IG91dF9mZW5jZV9wdHIgKi8KLQljcnRjLm1vZGUuaWQgPSBjcnRjX29sZC0+bW9kZS5pZDsKLQlj cnRjLm91dF9mZW5jZV9wdHIgPSAoaW50MzJfdCAqKSAweDg7Ci0JY3J0Y19jb21taXRfYXRvbWlj X2VycigmY3J0YywgcGxhbmUsIGNydGNfb2xkLCBwbGFuZSwgcmVxLCAwLAotCSAgICAgICAgICAg ICAgICAgICAgICAgQVRPTUlDX1JFTEFYX05PTkUsIEVGQVVMVCk7Ci0JY3J0Yy5vdXRfZmVuY2Vf cHRyID0gKGludDMyX3QgKikgMDsKKwltYXAgPSBtbWFwKE5VTEwsIFBBR0VfU0laRSwgUFJPVF9O T05FLCBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUsIC0xLCAwKTsKKwlpZ3RfYXNzZXJ0KG1h cCAhPSBNQVBfRkFJTEVEKTsKKworCWlndF9waXBlX29ial9zZXRfcHJvcF92YWx1ZShwaXBlLCBJ R1RfQ1JUQ19PVVRfRkVOQ0VfUFRSLCAocHRyZGlmZl90KW1hcCk7CisJY3J0Y19jb21taXRfYXRv bWljX2VycihwaXBlLCBwbGFuZSwgQVRPTUlDX1JFTEFYX05PTkUsIEVGQVVMVCk7CisJbXVubWFw KG1hcCwgUEFHRV9TSVpFKTsKIAogCS8qIHZhbGlkIGluIGZlbmNlIGJ1dCBub3QgYWxsb3dlZCBw cm9wIG9uIGNydGMgKi8KLQl0aW1lbGluZSA9IHN3X3N5bmNfdGltZWxpbmVfY3JlYXRlKCk7Ci0J ZmVuY2VfZmQgPSAgc3dfc3luY190aW1lbGluZV9jcmVhdGVfZmVuY2UodGltZWxpbmUsIDEpOwot CXBsYW5lLT5mZW5jZV9mZCA9IGZlbmNlX2ZkOwotCWNydGMuYWN0aXZlID0gZmFsc2U7Ci0JY3J0 Y19jb21taXRfYXRvbWljX2VycigmY3J0YywgcGxhbmUsIGNydGNfb2xkLCBwbGFuZSwgcmVxLCAw LAotCQkJICAgICAgIEFUT01JQ19SRUxBWF9OT05FLCBFSU5WQUwpOworCWZlbmNlX2ZkID0gc3df c3luY190aW1lbGluZV9jcmVhdGVfZmVuY2UodGltZWxpbmUsIDEpOworCWlndF9wbGFuZV9zZXRf ZmVuY2VfZmQocGxhbmUsIGZlbmNlX2ZkKTsKIAotCW91dF9mZW5jZSA9IG1hbGxvYyhzaXplb2Yo dWludDY0X3QpKTsKLQlpZ3RfYXNzZXJ0KG91dF9mZW5jZSk7CisJaWd0X3BpcGVfb2JqX3NldF9w cm9wX3ZhbHVlKHBpcGUsIElHVF9DUlRDX0FDVElWRSwgMCk7CisJaWd0X3BpcGVfb2JqX2NsZWFy X3Byb3BfY2hhbmdlZChwaXBlLCBJR1RfQ1JUQ19PVVRfRkVOQ0VfUFRSKTsKIAorCWNydGNfY29t bWl0X2F0b21pY19mbGFnc19lcnIocGlwZSwgcGxhbmUsIDAsIEFUT01JQ19SRUxBWF9OT05FLCBF SU5WQUwpOwogCiAJLyogdmFsaWQgb3V0IGZlbmNlIHB0ciBhbmQgZmxpcCBldmVudCBidXQgbm90 IGFsbG93ZWQgcHJvcCBvbiBjcnRjICovCi0JY3J0Yy5vdXRfZmVuY2VfcHRyID0gKGludDMyX3Qg Kikgb3V0X2ZlbmNlOwotCWNydGNfY29tbWl0X2F0b21pY19lcnIoJmNydGMsIHBsYW5lLCBjcnRj X29sZCwgcGxhbmUsIHJlcSwgMCwKLQkJCSAgICAgICBBVE9NSUNfUkVMQVhfTk9ORSwgRUlOVkFM KTsKKwlpZ3RfcGlwZV9yZXF1ZXN0X291dF9mZW5jZShwaXBlKTsKKwljcnRjX2NvbW1pdF9hdG9t aWNfZmxhZ3NfZXJyKHBpcGUsIHBsYW5lLCBEUk1fTU9ERV9QQUdFX0ZMSVBfRVZFTlQsCisJCQkJ ICAgICBBVE9NSUNfUkVMQVhfTk9ORSwgRUlOVkFMKTsKIAotCS8qIHZhbGlkIG91dCBmZW5jZSBw dHIgYW5kIGZsaXAgZXZlbnQgYnV0IG5vdCBhbGxvd2VkIHByb3Agb24gY3J0YyAqLwotCWNydGNf Y29tbWl0X2F0b21pY19lcnIoJmNydGMsIHBsYW5lLCBjcnRjX29sZCwgcGxhbmUsIHJlcSwKLQkJ CSAgICAgICBEUk1fTU9ERV9QQUdFX0ZMSVBfRVZFTlQsCi0JCQkgICAgICAgQVRPTUlDX1JFTEFY X05PTkUsIEVJTlZBTCk7Ci0KLQkvKiB2YWxpZCBwYWdlIGZsaXAgZXZlbnQgYnV0IG5vdCBhbGxv d2VkIHByb3Agb24gY3J0YyAqLwotCWNydGMub3V0X2ZlbmNlX3B0ciA9IChpbnQzMl90ICopIDA7 Ci0JY3J0Y19jb21taXRfYXRvbWljX2VycigmY3J0YywgcGxhbmUsIGNydGNfb2xkLCBwbGFuZSwg cmVxLAotCQkJICAgICAgIERSTV9NT0RFX1BBR0VfRkxJUF9FVkVOVCwKLQkJCSAgICAgICBBVE9N SUNfUkVMQVhfTk9ORSwgRUlOVkFMKTsKLQljcnRjLmFjdGl2ZSA9IHRydWU7Ci0KLQkvKiB2YWxp ZCBvdXQgZmVuY2UgIHB0ciBhbmQgZmxpcCBldmVudCBidXQgaW52YWxpZCBwcm9wIG9uIGNydGMg Ki8KLQljcnRjLm91dF9mZW5jZV9wdHIgPSAoaW50MzJfdCAqKSBvdXRfZmVuY2U7Ci0JY3J0Yy5t b2RlLmlkID0gcGxhbmUtPmZiX2lkOwotCWNydGNfY29tbWl0X2F0b21pY19lcnIoJmNydGMsIHBs YW5lLCBjcnRjX29sZCwgcGxhbmUsIHJlcSwgMCwKLQkJCSAgICAgICBBVE9NSUNfUkVMQVhfTk9O RSwgRUlOVkFMKTsKKwkvKiB2YWxpZCBmbGlwIGV2ZW50IGJ1dCBub3QgYWxsb3dlZCBwcm9wIG9u IGNydGMgKi8KKwlpZ3RfcGlwZV9vYmpfY2xlYXJfcHJvcF9jaGFuZ2VkKHBpcGUsIElHVF9DUlRD X09VVF9GRU5DRV9QVFIpOworCWNydGNfY29tbWl0X2F0b21pY19mbGFnc19lcnIocGlwZSwgcGxh bmUsIERSTV9NT0RFX1BBR0VfRkxJUF9FVkVOVCwKKwkJCQkgICAgIEFUT01JQ19SRUxBWF9OT05F LCBFSU5WQUwpOworCisJaWd0X3BpcGVfb2JqX3NldF9wcm9wX3ZhbHVlKHBpcGUsIElHVF9DUlRD X0FDVElWRSwgMSk7CisKKwkvKiBDb25maWd1cmF0aW9uIHNob3VsZCBiZSB2YWxpZCBhZ2FpbiAq LworCWNydGNfY29tbWl0X2F0b21pY19mbGFnc19lcnIocGlwZSwgcGxhbmUsIERSTV9NT0RFX0FU T01JQ19URVNUX09OTFksCisJCQkJICAgICBBVE9NSUNfUkVMQVhfTk9ORSwgMCk7CisKKwkvKiBT ZXQgaW52YWxpZCBwcm9wICovCisJaWd0X3BpcGVfb2JqX3NldF9wcm9wX3ZhbHVlKHBpcGUsIElH VF9DUlRDX01PREVfSUQsIGZiLT5mYl9pZCk7CisKKwkvKiB2YWxpZCBvdXQgZmVuY2UgYnV0IGlu dmFsaWQgcHJvcCBvbiBjcnRjICovCisJaWd0X3BpcGVfcmVxdWVzdF9vdXRfZmVuY2UocGlwZSk7 CisJY3J0Y19jb21taXRfYXRvbWljX2ZsYWdzX2VycihwaXBlLCBwbGFuZSwgMCwKKwkJCQkgICAg IEFUT01JQ19SRUxBWF9OT05FLCBFSU5WQUwpOwogCiAJLyogdmFsaWQgb3V0IGZlbmNlIHB0ciBh bmQgZmxpcCBldmVudCBidXQgaW52YWxpZCBwcm9wIG9uIGNydGMgKi8KLQljcnRjX2NvbW1pdF9h dG9taWNfZXJyKCZjcnRjLCBwbGFuZSwgY3J0Y19vbGQsIHBsYW5lLCByZXEsCi0JCQkgICAgICAg RFJNX01PREVfUEFHRV9GTElQX0VWRU5ULAotCQkJICAgICAgIEFUT01JQ19SRUxBWF9OT05FLCBF SU5WQUwpOworCWNydGNfY29tbWl0X2F0b21pY19mbGFnc19lcnIocGlwZSwgcGxhbmUsIERSTV9N T0RFX1BBR0VfRkxJUF9FVkVOVCwKKwkJCQkgICAgIEFUT01JQ19SRUxBWF9OT05FLCBFSU5WQUwp OwogCiAJLyogdmFsaWQgcGFnZSBmbGlwIGV2ZW50IGJ1dCBpbnZhbGlkIHByb3Agb24gY3J0YyAq LwotCWNydGMub3V0X2ZlbmNlX3B0ciA9IChpbnQzMl90ICopIDA7Ci0JY3J0Y19jb21taXRfYXRv bWljX2VycigmY3J0YywgcGxhbmUsIGNydGNfb2xkLCBwbGFuZSwgcmVxLAotCQkJICAgICAgIERS TV9NT0RFX1BBR0VfRkxJUF9FVkVOVCwKLQkJCSAgICAgICBBVE9NSUNfUkVMQVhfTk9ORSwgRUlO VkFMKTsKKwljcnRjX2NvbW1pdF9hdG9taWNfZmxhZ3NfZXJyKHBpcGUsIHBsYW5lLCBEUk1fTU9E RV9QQUdFX0ZMSVBfRVZFTlQsCisJCQkJICAgICBBVE9NSUNfUkVMQVhfTk9ORSwgRUlOVkFMKTsK IAogCS8qIHN1Y2Nlc3NmdWwgVEVTVF9PTkxZIHdpdGggZmVuY2VzIHNldCAqLwotCXBsYW5lLT5m ZW5jZV9mZCA9IGZlbmNlX2ZkOwotCWNydGMubW9kZS5pZCA9IGNydGNfb2xkLT5tb2RlLmlkOwot CWNydGNfY29tbWl0X2F0b21pYygmY3J0YywgcGxhbmUsIHJlcSwgQVRPTUlDX1JFTEFYX05PTkUs Ci0JCQkgICBEUk1fTU9ERV9BVE9NSUNfVEVTVF9PTkxZKTsKLQlpZ3RfYXNzZXJ0KCpvdXRfZmVu Y2UgPT0gLTEpOworCWlndF9waXBlX29ial9zZXRfcHJvcF92YWx1ZShwaXBlLCBJR1RfQ1JUQ19N T0RFX0lELCBvbGRfbW9kZV9pZCk7CisJY3J0Y19jb21taXRfYXRvbWljX2ZsYWdzX2VycihwaXBl LCBwbGFuZSwgRFJNX01PREVfQVRPTUlDX1RFU1RfT05MWSwKKwkJCQkgICAgIEFUT01JQ19SRUxB WF9OT05FLCAwKTsKKwlpZ3RfYXNzZXJ0KHBpcGUtPm91dF9mZW5jZV9mZCA9PSAtMSk7CiAJY2xv c2UoZmVuY2VfZmQpOwogCWNsb3NlKHRpbWVsaW5lKTsKIAogCS8qIHJlc2V0IGZlbmNlcyAqLwot CXBsYW5lLT5mZW5jZV9mZCA9IC0xOwotCWNydGMub3V0X2ZlbmNlX3B0ciA9IChpbnQzMl90ICop IDA7Ci0JY3J0Y19jb21taXRfYXRvbWljKCZjcnRjLCBwbGFuZSwgcmVxLCBBVE9NSUNfUkVMQVhf Tk9ORSwgMCk7CisJaWd0X3BsYW5lX3NldF9mZW5jZV9mZChwbGFuZSwgLTEpOworCWlndF9waXBl X29ial9zZXRfcHJvcF92YWx1ZShwaXBlLCBJR1RfQ1JUQ19PVVRfRkVOQ0VfUFRSLCAwKTsKKwlp Z3RfcGlwZV9vYmpfY2xlYXJfcHJvcF9jaGFuZ2VkKHBpcGUsIElHVF9DUlRDX09VVF9GRU5DRV9Q VFIpOworCWNydGNfY29tbWl0KHBpcGUsIHBsYW5lLCBDT01NSVRfQVRPTUlDLCBBVE9NSUNfUkVM QVhfTk9ORSk7CiAKIAkvKiBvdXQgZmVuY2UgcHRyIGJ1dCBub3QgcGFnZSBmbGlwIGV2ZW50ICov Ci0JY3J0Yy5vdXRfZmVuY2VfcHRyID0gKGludDMyX3QgKikgb3V0X2ZlbmNlOwotCWNydGNfY29t bWl0X2F0b21pYyhjcnRjX29sZCwgcGxhbmUsIHJlcSwgQVRPTUlDX1JFTEFYX05PTkUsIDApOwor CWlndF9waXBlX3JlcXVlc3Rfb3V0X2ZlbmNlKHBpcGUpOworCWNydGNfY29tbWl0KHBpcGUsIHBs YW5lLCBDT01NSVRfQVRPTUlDLCBBVE9NSUNfUkVMQVhfTk9ORSk7CiAKLQljbG9zZSgqb3V0X2Zl bmNlKTsKLQlmcmVlKG91dF9mZW5jZSk7Ci0JZHJtTW9kZUF0b21pY0ZyZWUocmVxKTsKKwlpZ3Rf YXNzZXJ0KHBpcGUtPm91dF9mZW5jZV9mZCAhPSAtMSk7CiB9CiAKIC8qIEFidXNlIHRoZSBhdG9t aWMgaW9jdGwgZGlyZWN0bHkgaW4gb3JkZXIgdG8gdGVzdCB2YXJpb3VzIGludmFsaWQgY29uZGl0 aW9ucywKICAqIHdoaWNoIHRoZSBsaWJkcm0gd3JhcHBlciB3b24ndCBhbGxvdyB1cyB0byBjcmVh dGUuICovCi1zdGF0aWMgdm9pZCBhdG9taWNfaW52YWxpZF9wYXJhbXMoc3RydWN0IGttc19hdG9t aWNfY3J0Y19zdGF0ZSAqY3J0YywKLQkJCQkgIHN0cnVjdCBrbXNfYXRvbWljX3BsYW5lX3N0YXRl ICpwbGFuZSwKLQkJCQkgIHN0cnVjdCBrbXNfYXRvbWljX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubmVj dG9yKQorc3RhdGljIHZvaWQgYXRvbWljX2ludmFsaWRfcGFyYW1zKGlndF9waXBlX3QgKnBpcGUs CisJCQkJICBpZ3RfcGxhbmVfdCAqcGxhbmUsCisJCQkJICBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwK KwkJCQkgIHN0cnVjdCBpZ3RfZmIgKmZiKQogewotCXN0cnVjdCBrbXNfYXRvbWljX2Rlc2MgKmRl c2MgPSBjcnRjLT5zdGF0ZS0+ZGVzYzsKKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gcGlwZS0+ ZGlzcGxheTsKIAlzdHJ1Y3QgZHJtX21vZGVfYXRvbWljIGlvYzsKIAl1aW50MzJfdCBvYmpfcmF3 WzE2XTsgLyogYXJyYXkgb2Ygb2JqZWN0cyAoc2l6ZWQgYnkgY291bnRfb2JqcykgKi8KIAl1aW50 MzJfdCBudW1fcHJvcHNfcmF3WzE2XTsgLyogYXJyYXkgb2YgbnVtIHByb3BzIHBlciBvYmogKGRp dHRvKSAqLwpAQCAtMTM0Niw3ICs3MTgsNyBAQCBzdGF0aWMgdm9pZCBhdG9taWNfaW52YWxpZF9w YXJhbXMoc3RydWN0IGttc19hdG9taWNfY3J0Y19zdGF0ZSAqY3J0YywKIAltZW1zZXQoJmlvYywg MCwgc2l6ZW9mKGlvYykpOwogCiAJLyogQW4gZW1wdHkgcmVxdWVzdCBzaG91bGQgZG8gbm90aGlu Zy4gKi8KLQlkb19pb2N0bChkZXNjLT5mZCwgRFJNX0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jKTsK Kwlkb19pb2N0bChkaXNwbGF5LT5kcm1fZmQsIERSTV9JT0NUTF9NT0RFX0FUT01JQywgJmlvYyk7 CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvYmpfcmF3KTsgaSsrKQogCQlvYmpfcmF3 W2ldID0gMDsKQEAgLTEzNjMsMjQ4ICs3MzUsMjMyIEBAIHN0YXRpYyB2b2lkIGF0b21pY19pbnZh bGlkX3BhcmFtcyhzdHJ1Y3Qga21zX2F0b21pY19jcnRjX3N0YXRlICpjcnRjLAogCWlvYy5wcm9w X3ZhbHVlc19wdHIgPSAodWludHB0cl90KSB2YWx1ZXNfcmF3OwogCiAJLyogVmFsaWQgcG9pbnRl cnMsIGJ1dCBzdGlsbCBzaG91bGQgY29weSBub3RoaW5nLiAqLwotCWRvX2lvY3RsKGRlc2MtPmZk LCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2MpOworCWRvX2lvY3RsKGRpc3BsYXktPmRybV9m ZCwgRFJNX0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jKTsKIAogCS8qIFZhbGlkIG5vb3AsIGJ1dCB3 aXRoIGV2ZW50IHNldCBzaG91bGQgZmFpbC4gKi8KIAlpb2MuZmxhZ3MgPSBEUk1fTU9ERV9QQUdF X0ZMSVBfRVZFTlQ7Ci0JZG9faW9jdGxfZXJyKGRlc2MtPmZkLCBEUk1fSU9DVExfTU9ERV9BVE9N SUMsICZpb2MsIEVJTlZBTCk7CisJZG9faW9jdGxfZXJyKGRpc3BsYXktPmRybV9mZCwgRFJNX0lP Q1RMX01PREVfQVRPTUlDLCAmaW9jLCBFSU5WQUwpOwogCiAJLyogTm9uc2Vuc2UgZmxhZ3MuICov CiAJaW9jLmZsYWdzID0gMHhkZWFkYmVlZjsKLQlkb19pb2N0bF9lcnIoZGVzYy0+ZmQsIERSTV9J T0NUTF9NT0RFX0FUT01JQywgJmlvYywgRUlOVkFMKTsKKwlkb19pb2N0bF9lcnIoZGlzcGxheS0+ ZHJtX2ZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2MsIEVJTlZBTCk7CiAKIAlpb2MuZmxh Z3MgPSAwOwogCS8qIFNhZmV0eSBjaGVjayB0aGF0IGZsYWdzIGlzIHJlc2V0IHByb3Blcmx5LiAq LwotCWRvX2lvY3RsKGRlc2MtPmZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2MpOworCWRv X2lvY3RsKGRpc3BsYXktPmRybV9mZCwgRFJNX0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jKTsKIAog CS8qIFJlc2VydmVkL01CWi4gKi8KIAlpb2MucmVzZXJ2ZWQgPSAxOwotCWRvX2lvY3RsX2Vycihk ZXNjLT5mZCwgRFJNX0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jLCBFSU5WQUwpOworCWRvX2lvY3Rs X2VycihkaXNwbGF5LT5kcm1fZmQsIERSTV9JT0NUTF9NT0RFX0FUT01JQywgJmlvYywgRUlOVkFM KTsKIAlpb2MucmVzZXJ2ZWQgPSAwOwotCWRvX2lvY3RsKGRlc2MtPmZkLCBEUk1fSU9DVExfTU9E RV9BVE9NSUMsICZpb2MpOworCWRvX2lvY3RsKGRpc3BsYXktPmRybV9mZCwgRFJNX0lPQ1RMX01P REVfQVRPTUlDLCAmaW9jKTsKIAogCS8qIFplcm8gaXMgbm90IGEgdmFsaWQgb2JqZWN0IElELiAq LwogCWlvYy5jb3VudF9vYmpzID0gQVJSQVlfU0laRShvYmpfcmF3KTsKLQlkb19pb2N0bF9lcnIo ZGVzYy0+ZmQsIERSTV9JT0NUTF9NT0RFX0FUT01JQywgJmlvYywgRU5PRU5UKTsKKwlkb19pb2N0 bF9lcnIoZGlzcGxheS0+ZHJtX2ZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2MsIEVOT0VO VCk7CiAKIAkvKiBJbnZhbGlkIG9iamVjdCB0eXBlIChub3QgYSB0aGluZyB3ZSBjYW4gc2V0IHBy b3BlcnRpZXMgb24pLiAqLwogCWlvYy5jb3VudF9vYmpzID0gMTsKLQlvYmpfcmF3WzBdID0gY3J0 Yy0+bW9kZS5pZDsKLQlkb19pb2N0bF9lcnIoZGVzYy0+ZmQsIERSTV9JT0NUTF9NT0RFX0FUT01J QywgJmlvYywgRU5PRU5UKTsKLQlvYmpfcmF3WzBdID0gcGxhbmUtPmZiX2lkOwotCWRvX2lvY3Rs X2VycihkZXNjLT5mZCwgRFJNX0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jLCBFTk9FTlQpOworCW9i al9yYXdbMF0gPSBwaXBlLT52YWx1ZXNbSUdUX0NSVENfTU9ERV9JRF07CisJZG9faW9jdGxfZXJy KGRpc3BsYXktPmRybV9mZCwgRFJNX0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jLCBFTk9FTlQpOwor CW9ial9yYXdbMF0gPSBmYi0+ZmJfaWQ7CisJZG9faW9jdGxfZXJyKGRpc3BsYXktPmRybV9mZCwg RFJNX0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jLCBFTk9FTlQpOwogCiAJLyogRmlsbGVkIG9iamVj dCBidXQgd2l0aCBubyBwcm9wZXJ0aWVzOyBuby1vcC4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJS QVlfU0laRShvYmpfcmF3KTsgaSsrKQotCQlvYmpfcmF3W2ldID0gY3J0Yy0+b2JqOwotCWRvX2lv Y3RsKGRlc2MtPmZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2MpOworCQlvYmpfcmF3W2ld ID0gcGlwZS0+Y3J0Y19pZDsKKwlkb19pb2N0bChkaXNwbGF5LT5kcm1fZmQsIERSTV9JT0NUTF9N T0RFX0FUT01JQywgJmlvYyk7CiAKIAkvKiBQYXNzIGluIGFsbCBzb3J0cyBvZiB0aGluZ3Mgb3Ro ZXIgdGhhbiB0aGUgcHJvcGVydHkgSUQuICovCiAJbnVtX3Byb3BzX3Jhd1swXSA9IDE7Ci0JZG9f aW9jdGxfZXJyKGRlc2MtPmZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2MsIEVOT0VOVCk7 Ci0JcHJvcHNfcmF3WzBdID0gY3J0Yy0+b2JqOwotCWRvX2lvY3RsX2VycihkZXNjLT5mZCwgRFJN X0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jLCBFTk9FTlQpOwotCXByb3BzX3Jhd1swXSA9IHBsYW5l LT5vYmo7Ci0JZG9faW9jdGxfZXJyKGRlc2MtPmZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZp b2MsIEVOT0VOVCk7Ci0JcHJvcHNfcmF3WzBdID0gY29ubmVjdG9yLT5vYmo7Ci0JZG9faW9jdGxf ZXJyKGRlc2MtPmZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2MsIEVOT0VOVCk7Ci0JcHJv cHNfcmF3WzBdID0gY3J0Yy0+bW9kZS5pZDsKLQlkb19pb2N0bF9lcnIoZGVzYy0+ZmQsIERSTV9J T0NUTF9NT0RFX0FUT01JQywgJmlvYywgRU5PRU5UKTsKKwlkb19pb2N0bF9lcnIoZGlzcGxheS0+ ZHJtX2ZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2MsIEVOT0VOVCk7CisJcHJvcHNfcmF3 WzBdID0gcGlwZS0+Y3J0Y19pZDsKKwlkb19pb2N0bF9lcnIoZGlzcGxheS0+ZHJtX2ZkLCBEUk1f SU9DVExfTU9ERV9BVE9NSUMsICZpb2MsIEVOT0VOVCk7CisJcHJvcHNfcmF3WzBdID0gcGxhbmUt PmRybV9wbGFuZS0+cGxhbmVfaWQ7CisJZG9faW9jdGxfZXJyKGRpc3BsYXktPmRybV9mZCwgRFJN X0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jLCBFTk9FTlQpOworCXByb3BzX3Jhd1swXSA9IG91dHB1 dC0+aWQ7CisJZG9faW9jdGxfZXJyKGRpc3BsYXktPmRybV9mZCwgRFJNX0lPQ1RMX01PREVfQVRP TUlDLCAmaW9jLCBFTk9FTlQpOworCXByb3BzX3Jhd1swXSA9IHBpcGUtPnZhbHVlc1tJR1RfQ1JU Q19NT0RFX0lEXTsKKwlkb19pb2N0bF9lcnIoZGlzcGxheS0+ZHJtX2ZkLCBEUk1fSU9DVExfTU9E RV9BVE9NSUMsICZpb2MsIEVOT0VOVCk7CiAKIAkvKiBWYWxpZCBwcm9wZXJ0eSwgdmFsaWQgdmFs dWUuICovCisKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcm9wc19yYXcpOyBpKyspIHsK LQkJcHJvcHNfcmF3W2ldID0gZGVzYy0+cHJvcHNfY3J0Y1tJR1RfQ1JUQ19NT0RFX0lEXTsKLQkJ dmFsdWVzX3Jhd1tpXSA9IGNydGMtPm1vZGUuaWQ7CisJCXByb3BzX3Jhd1tpXSA9IHBpcGUtPnBy b3BzW0lHVF9DUlRDX01PREVfSURdOworCQl2YWx1ZXNfcmF3W2ldID0gcGlwZS0+dmFsdWVzW0lH VF9DUlRDX01PREVfSURdOwogCX0KLQlkb19pb2N0bChkZXNjLT5mZCwgRFJNX0lPQ1RMX01PREVf QVRPTUlDLCAmaW9jKTsKKwlkb19pb2N0bChkaXNwbGF5LT5kcm1fZmQsIERSTV9JT0NUTF9NT0RF X0FUT01JQywgJmlvYyk7CiAKIAkvKiBTZXR0aW5nIHRoZSBzYW1lIHRoaW5nIG11bHRpcGxlIHRp bWVzIGlzIE9LLiAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG9ial9yYXcpOyBpKysp CiAJCW51bV9wcm9wc19yYXdbaV0gPSBBUlJBWV9TSVpFKHByb3BzX3JhdykgLyBBUlJBWV9TSVpF KG9ial9yYXcpOwotCWRvX2lvY3RsKGRlc2MtPmZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZp b2MpOworCWRvX2lvY3RsKGRpc3BsYXktPmRybV9mZCwgRFJNX0lPQ1RMX01PREVfQVRPTUlDLCAm aW9jKTsKIAlpb2MuY291bnRfb2JqcyA9IEFSUkFZX1NJWkUob2JqX3Jhdyk7Ci0JZG9faW9jdGwo ZGVzYy0+ZmQsIERSTV9JT0NUTF9NT0RFX0FUT01JQywgJmlvYyk7CisJZG9faW9jdGwoZGlzcGxh eS0+ZHJtX2ZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2MpOwogCiAJLyogUGFzcyBhIHNl cmllcyBvZiBvdXRsYW5kaXNoIGFkZHJlc3Nlcy4gKi8KIAlpb2Mub2Jqc19wdHIgPSAwOwotCWRv X2lvY3RsX2VycihkZXNjLT5mZCwgRFJNX0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jLCBFRkFVTFQp OworCWRvX2lvY3RsX2VycihkaXNwbGF5LT5kcm1fZmQsIERSTV9JT0NUTF9NT0RFX0FUT01JQywg JmlvYywgRUZBVUxUKTsKIAogCWlvYy5vYmpzX3B0ciA9ICh1aW50cHRyX3QpIG9ial9yYXc7CiAJ aW9jLmNvdW50X3Byb3BzX3B0ciA9IDA7Ci0JZG9faW9jdGxfZXJyKGRlc2MtPmZkLCBEUk1fSU9D VExfTU9ERV9BVE9NSUMsICZpb2MsIEVGQVVMVCk7CisJZG9faW9jdGxfZXJyKGRpc3BsYXktPmRy bV9mZCwgRFJNX0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jLCBFRkFVTFQpOwogCiAJaW9jLmNvdW50 X3Byb3BzX3B0ciA9ICh1aW50cHRyX3QpIG51bV9wcm9wc19yYXc7CiAJaW9jLnByb3BzX3B0ciA9 IDA7Ci0JZG9faW9jdGxfZXJyKGRlc2MtPmZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2Ms IEVGQVVMVCk7CisJZG9faW9jdGxfZXJyKGRpc3BsYXktPmRybV9mZCwgRFJNX0lPQ1RMX01PREVf QVRPTUlDLCAmaW9jLCBFRkFVTFQpOwogCiAJaW9jLnByb3BzX3B0ciA9ICh1aW50cHRyX3QpIHBy b3BzX3JhdzsKIAlpb2MucHJvcF92YWx1ZXNfcHRyID0gMDsKLQlkb19pb2N0bF9lcnIoZGVzYy0+ ZmQsIERSTV9JT0NUTF9NT0RFX0FUT01JQywgJmlvYywgRUZBVUxUKTsKKwlkb19pb2N0bF9lcnIo ZGlzcGxheS0+ZHJtX2ZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2MsIEVGQVVMVCk7CiAK IAlpb2MucHJvcF92YWx1ZXNfcHRyID0gKHVpbnRwdHJfdCkgdmFsdWVzX3JhdzsKLQlkb19pb2N0 bChkZXNjLT5mZCwgRFJNX0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jKTsKKwlkb19pb2N0bChkaXNw bGF5LT5kcm1fZmQsIERSTV9JT0NUTF9NT0RFX0FUT01JQywgJmlvYyk7CiAKIAkvKiBBdHRlbXB0 IHRvIG92ZXJmbG93IGFuZC9vciB0cmlwIHZhcmlvdXMgYm91bmRhcnkgY29uZGl0aW9ucy4gKi8K IAlpb2MuY291bnRfb2JqcyA9IFVJTlQzMl9NQVggLyBzaXplb2YodWludDMyX3QpOwotCWRvX2lv Y3RsX2VycihkZXNjLT5mZCwgRFJNX0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jLCBFTk9FTlQpOwor CWRvX2lvY3RsX2VycihkaXNwbGF5LT5kcm1fZmQsIERSTV9JT0NUTF9NT0RFX0FUT01JQywgJmlv YywgRU5PRU5UKTsKIAogCWlvYy5jb3VudF9vYmpzID0gQVJSQVlfU0laRShvYmpfcmF3KTsKIAlp b2Mub2Jqc19wdHIgPSBVSU5UNjRfTUFYIC0gc2l6ZW9mKHVpbnQzMl90KTsKLQlkb19pb2N0bF9l cnIoZGVzYy0+ZmQsIERSTV9JT0NUTF9NT0RFX0FUT01JQywgJmlvYywgRUZBVUxUKTsKKwlkb19p b2N0bF9lcnIoZGlzcGxheS0+ZHJtX2ZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2MsIEVG QVVMVCk7CiAJaW9jLmNvdW50X29ianMgPSAxOwogCWlvYy5vYmpzX3B0ciA9IFVJTlQ2NF9NQVgg LSBzaXplb2YodWludDMyX3QpOwotCWRvX2lvY3RsX2VycihkZXNjLT5mZCwgRFJNX0lPQ1RMX01P REVfQVRPTUlDLCAmaW9jLCBFRkFVTFQpOworCWRvX2lvY3RsX2VycihkaXNwbGF5LT5kcm1fZmQs IERSTV9JT0NUTF9NT0RFX0FUT01JQywgJmlvYywgRUZBVUxUKTsKIAogCW51bV9wcm9wc19yYXdb MF0gPSBVSU5UMzJfTUFYIC8gc2l6ZW9mKHVpbnQzMl90KTsKLQlkb19pb2N0bF9lcnIoZGVzYy0+ ZmQsIERSTV9JT0NUTF9NT0RFX0FUT01JQywgJmlvYywgRUZBVUxUKTsKKwlkb19pb2N0bF9lcnIo ZGlzcGxheS0+ZHJtX2ZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2MsIEVGQVVMVCk7CiAJ bnVtX3Byb3BzX3Jhd1swXSA9IFVJTlQzMl9NQVggLSAxOwotCWRvX2lvY3RsX2VycihkZXNjLT5m ZCwgRFJNX0lPQ1RMX01PREVfQVRPTUlDLCAmaW9jLCBFRkFVTFQpOworCWRvX2lvY3RsX2Vycihk aXNwbGF5LT5kcm1fZmQsIERSTV9JT0NUTF9NT0RFX0FUT01JQywgJmlvYywgRUZBVUxUKTsKIAog CWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG9ial9yYXcpOyBpKyspCiAJCW51bV9wcm9wc19y YXdbaV0gPSAoVUlOVDMyX01BWCAvIEFSUkFZX1NJWkUob2JqX3JhdykpICsgMTsKLQlkb19pb2N0 bF9lcnIoZGVzYy0+ZmQsIERSTV9JT0NUTF9NT0RFX0FUT01JQywgJmlvYywgRUZBVUxUKTsKKwlk b19pb2N0bF9lcnIoZGlzcGxheS0+ZHJtX2ZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZpb2Ms IEVGQVVMVCk7CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob2JqX3Jhdyk7IGkrKykKIAkJ bnVtX3Byb3BzX3Jhd1tpXSA9IEFSUkFZX1NJWkUocHJvcHNfcmF3KSAvIEFSUkFZX1NJWkUob2Jq X3Jhdyk7Ci0JZG9faW9jdGxfZXJyKGRlc2MtPmZkLCBEUk1fSU9DVExfTU9ERV9BVE9NSUMsICZp b2MsIEVGQVVMVCk7CisJZG9faW9jdGxfZXJyKGRpc3BsYXktPmRybV9mZCwgRFJNX0lPQ1RMX01P REVfQVRPTUlDLCAmaW9jLCBFRkFVTFQpOworfQorCitzdGF0aWMgdm9pZCBhdG9taWNfc2V0dXAo aWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwgZW51bSBwaXBlIHBpcGUsIGlndF9vdXRwdXRfdCAqb3V0 cHV0LCBpZ3RfcGxhbmVfdCAqcHJpbWFyeSwgc3RydWN0IGlndF9mYiAqZmIpCit7CisJaWd0X291 dHB1dF9zZXRfcGlwZShvdXRwdXQsIHBpcGUpOworCWlndF9wbGFuZV9zZXRfZmIocHJpbWFyeSwg ZmIpOworCisJY3J0Y19jb21taXQocHJpbWFyeS0+cGlwZSwgcHJpbWFyeSwgQ09NTUlUX0FUT01J QywgQVRPTUlDX1JFTEFYX05PTkUpOworfQorCitzdGF0aWMgdm9pZCBhdG9taWNfY2xlYXIoaWd0 X2Rpc3BsYXlfdCAqZGlzcGxheSwgZW51bSBwaXBlIHBpcGUsIGlndF9wbGFuZV90ICpwcmltYXJ5 LCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCkKK3sKKwlpZ3RfcGxhbmVfdCAqcGxhbmU7CisKKwlmb3Jf ZWFjaF9wbGFuZV9vbl9waXBlKGRpc3BsYXksIHBpcGUsIHBsYW5lKSB7CisJCWlndF9wbGFuZV9z ZXRfZmIocGxhbmUsIE5VTEwpOworCQlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHBsYW5lLCAwLCAw KTsKKwl9CisKKwlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgUElQRV9OT05FKTsKKwljcnRj X2NvbW1pdChwcmltYXJ5LT5waXBlLCBwcmltYXJ5LCBDT01NSVRfQVRPTUlDLCBBVE9NSUNfUkVM QVhfTk9ORSk7CiB9CiAKIGlndF9tYWluCiB7Ci0Jc3RydWN0IGttc19hdG9taWNfZGVzYyBkZXNj OwotCXN0cnVjdCBrbXNfYXRvbWljX3N0YXRlICpjdXJyZW50OworCWlndF9kaXNwbGF5X3QgZGlz cGxheTsKKwllbnVtIHBpcGUgcGlwZSA9IFBJUEVfTk9ORTsKKwlpZ3RfcGlwZV90ICpwaXBlX29i ajsKKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dCA9IE5VTEw7CisJaWd0X3BsYW5lX3QgKnByaW1hcnkg PSBOVUxMOworCWRybU1vZGVNb2RlSW5mbyAqbW9kZTsKKwlzdHJ1Y3QgaWd0X2ZiIGZiOworCisJ aWd0X2ZpeHR1cmUgeworCQlkaXNwbGF5LmRybV9mZCA9IGRybV9vcGVuX2RyaXZlcl9tYXN0ZXIo RFJJVkVSX0FOWSk7CisKKwkJa21zdGVzdF9zZXRfdnRfZ3JhcGhpY3NfbW9kZSgpOworCisJCWln dF9kaXNwbGF5X2luaXQoJmRpc3BsYXksIGRpc3BsYXkuZHJtX2ZkKTsKKworCQlpZ3RfcmVxdWly ZShkaXNwbGF5LmlzX2F0b21pYyk7CisJCWlndF9kaXNwbGF5X3JlcXVpcmVfb3V0cHV0KCZkaXNw bGF5KTsKIAotCW1lbXNldCgmZGVzYywgMCwgc2l6ZW9mKGRlc2MpKTsKKwkJZm9yX2VhY2hfcGlw ZV93aXRoX3ZhbGlkX291dHB1dCgmZGlzcGxheSwgcGlwZSwgb3V0cHV0KQorCQkJYnJlYWs7CisK KwkJcGlwZV9vYmogPSAmZGlzcGxheS5waXBlc1twaXBlXTsKKwkJcHJpbWFyeSA9IGlndF9waXBl X2dldF9wbGFuZV90eXBlKHBpcGVfb2JqLCBEUk1fUExBTkVfVFlQRV9QUklNQVJZKTsKIAotCWN1 cnJlbnQgPSBjYWxsb2MoMSwgc2l6ZW9mKCpjdXJyZW50KSk7Ci0JaWd0X2Fzc2VydChjdXJyZW50 KTsKLQljdXJyZW50LT5kZXNjID0gJmRlc2M7CisJCW1vZGUgPSBpZ3Rfb3V0cHV0X2dldF9tb2Rl KG91dHB1dCk7CiAKLQlpZ3RfZml4dHVyZQotCQlhdG9taWNfc2V0dXAoY3VycmVudCk7CisJCWln dF9jcmVhdGVfcGF0dGVybl9mYihkaXNwbGF5LmRybV9mZCwKKwkJCQkgICAgICBtb2RlLT5oZGlz cGxheSwgbW9kZS0+dmRpc3BsYXksCisJCQkJICAgICAgcGxhbmVfZ2V0X2lndF9mb3JtYXQocHJp bWFyeSksCisJCQkJICAgICAgTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwgJmZiKTsKKwl9CiAK IAlpZ3Rfc3VidGVzdCgicGxhbmVfb3ZlcmxheV9sZWdhY3kiKSB7Ci0JCXN0cnVjdCBrbXNfYXRv bWljX3N0YXRlICpzY3JhdGNoID0gYXRvbWljX3N0YXRlX2R1cChjdXJyZW50KTsKLQkJc3RydWN0 IGttc19hdG9taWNfY3J0Y19zdGF0ZSAqY3J0YyA9IGZpbmRfY3J0YyhzY3JhdGNoLCB0cnVlKTsK LQkJc3RydWN0IGttc19hdG9taWNfcGxhbmVfc3RhdGUgKnBsYW5lID0KLQkJCWZpbmRfcGxhbmUo c2NyYXRjaCwgUExBTkVfVFlQRV9PVkVSTEFZLCBjcnRjKTsKLQotCQlpZ3RfcmVxdWlyZShjcnRj KTsKLQkJaWd0X3JlcXVpcmUocGxhbmUpOwotCQlwbGFuZV9vdmVybGF5KGNydGMsIHBsYW5lKTsK LQkJYXRvbWljX3N0YXRlX2ZyZWUoc2NyYXRjaCk7CisJCWlndF9wbGFuZV90ICpvdmVybGF5ID0K KwkJCWlndF9waXBlX2dldF9wbGFuZV90eXBlKHBpcGVfb2JqLCBEUk1fUExBTkVfVFlQRV9PVkVS TEFZKTsKKworCQlpZ3RfcmVxdWlyZShvdmVybGF5KTsKKworCQlhdG9taWNfc2V0dXAoJmRpc3Bs YXksIHBpcGUsIG91dHB1dCwgcHJpbWFyeSwgJmZiKTsKKwkJcGxhbmVfb3ZlcmxheShwaXBlX29i aiwgb3V0cHV0LCBvdmVybGF5KTsKIAl9CiAKIAlpZ3Rfc3VidGVzdCgicGxhbmVfcHJpbWFyeV9s ZWdhY3kiKSB7Ci0JCXN0cnVjdCBrbXNfYXRvbWljX3N0YXRlICpzY3JhdGNoID0gYXRvbWljX3N0 YXRlX2R1cChjdXJyZW50KTsKLQkJc3RydWN0IGttc19hdG9taWNfY3J0Y19zdGF0ZSAqY3J0YyA9 IGZpbmRfY3J0YyhzY3JhdGNoLCB0cnVlKTsKLQkJc3RydWN0IGttc19hdG9taWNfcGxhbmVfc3Rh dGUgKnBsYW5lID0KLQkJCWZpbmRfcGxhbmUoc2NyYXRjaCwgUExBTkVfVFlQRV9QUklNQVJZLCBj cnRjKTsKLQotCQlpZ3RfcmVxdWlyZShjcnRjKTsKLQkJaWd0X3JlcXVpcmUocGxhbmUpOwotCQlw bGFuZV9wcmltYXJ5KGNydGMsIHBsYW5lKTsKLQkJYXRvbWljX3N0YXRlX2ZyZWUoc2NyYXRjaCk7 CisJCWF0b21pY19zZXR1cCgmZGlzcGxheSwgcGlwZSwgb3V0cHV0LCBwcmltYXJ5LCAmZmIpOwor CisJCXBsYW5lX3ByaW1hcnkocGlwZV9vYmosIHByaW1hcnksICZmYik7CiAJfQogCiAJaWd0X3N1 YnRlc3QoInRlc3Rfb25seSIpIHsKLQkJc3RydWN0IGttc19hdG9taWNfc3RhdGUgKnNjcmF0Y2gg PSBhdG9taWNfc3RhdGVfZHVwKGN1cnJlbnQpOwotCQlzdHJ1Y3Qga21zX2F0b21pY19jcnRjX3N0 YXRlICpjcnRjID0gZmluZF9jcnRjKHNjcmF0Y2gsIHRydWUpOwotCQlzdHJ1Y3Qga21zX2F0b21p Y19wbGFuZV9zdGF0ZSAqcGxhbmUgPQotCQkJZmluZF9wbGFuZShzY3JhdGNoLCBQTEFORV9UWVBF X1BSSU1BUlksIGNydGMpOwotCi0JCWlndF9yZXF1aXJlKGNydGMpOwotCQlpZ3RfcmVxdWlyZShw bGFuZSk7Ci0JCXRlc3Rfb25seShjcnRjLCBwbGFuZSk7Ci0JCWF0b21pY19zdGF0ZV9mcmVlKHNj cmF0Y2gpOwotCX0KKwkJYXRvbWljX2NsZWFyKCZkaXNwbGF5LCBwaXBlLCBwcmltYXJ5LCBvdXRw dXQpOwogCisJCXRlc3Rfb25seShwaXBlX29iaiwgcHJpbWFyeSwgb3V0cHV0KTsKKwl9CiAJaWd0 X3N1YnRlc3QoInBsYW5lX2N1cnNvcl9sZWdhY3kiKSB7Ci0JCXN0cnVjdCBrbXNfYXRvbWljX3N0 YXRlICpzY3JhdGNoID0gYXRvbWljX3N0YXRlX2R1cChjdXJyZW50KTsKLQkJc3RydWN0IGttc19h dG9taWNfY3J0Y19zdGF0ZSAqY3J0YyA9IGZpbmRfY3J0YyhzY3JhdGNoLCB0cnVlKTsKLQkJc3Ry dWN0IGttc19hdG9taWNfcGxhbmVfc3RhdGUgKnBsYW5lID0KLQkJCWZpbmRfcGxhbmUoc2NyYXRj aCwgUExBTkVfVFlQRV9DVVJTT1IsIGNydGMpOwotCi0JCWlndF9yZXF1aXJlKGNydGMpOwotCQlp Z3RfcmVxdWlyZShwbGFuZSk7Ci0JCXBsYW5lX2N1cnNvcihjcnRjLCBwbGFuZSk7Ci0JCWF0b21p Y19zdGF0ZV9mcmVlKHNjcmF0Y2gpOworCQlpZ3RfcGxhbmVfdCAqY3Vyc29yID0KKwkJCWlndF9w aXBlX2dldF9wbGFuZV90eXBlKHBpcGVfb2JqLCBEUk1fUExBTkVfVFlQRV9DVVJTT1IpOworCisJ CWlndF9yZXF1aXJlKGN1cnNvcik7CisKKwkJYXRvbWljX3NldHVwKCZkaXNwbGF5LCBwaXBlLCBv dXRwdXQsIHByaW1hcnksICZmYik7CisJCXBsYW5lX2N1cnNvcihwaXBlX29iaiwgb3V0cHV0LCBj dXJzb3IpOwogCX0KIAogCWlndF9zdWJ0ZXN0KCJwbGFuZV9pbnZhbGlkX3BhcmFtcyIpIHsKLQkJ c3RydWN0IGttc19hdG9taWNfc3RhdGUgKnNjcmF0Y2ggPSBhdG9taWNfc3RhdGVfZHVwKGN1cnJl bnQpOwotCQlzdHJ1Y3Qga21zX2F0b21pY19jcnRjX3N0YXRlICpjcnRjID0gZmluZF9jcnRjKHNj cmF0Y2gsIHRydWUpOwotCQlzdHJ1Y3Qga21zX2F0b21pY19wbGFuZV9zdGF0ZSAqcGxhbmUgPQot CQkJZmluZF9wbGFuZShjdXJyZW50LCBQTEFORV9UWVBFX1BSSU1BUlksIGNydGMpOwotCQlzdHJ1 Y3Qga21zX2F0b21pY19jb25uZWN0b3Jfc3RhdGUgKmNvbm4gPQotCQkJZmluZF9jb25uZWN0b3Io c2NyYXRjaCwgY3J0Yyk7Ci0KLQkJaWd0X3JlcXVpcmUoY3J0Yyk7Ci0JCWlndF9yZXF1aXJlKHBs YW5lKTsKLQkJcGxhbmVfaW52YWxpZF9wYXJhbXMoY3J0YywgcGxhbmUsIGNvbm4pOwotCQlhdG9t aWNfc3RhdGVfZnJlZShzY3JhdGNoKTsKKwkJYXRvbWljX3NldHVwKCZkaXNwbGF5LCBwaXBlLCBv dXRwdXQsIHByaW1hcnksICZmYik7CisKKwkJcGxhbmVfaW52YWxpZF9wYXJhbXMocGlwZV9vYmos IG91dHB1dCwgcHJpbWFyeSwgJmZiKTsKIAl9CiAKIAlpZ3Rfc3VidGVzdCgicGxhbmVfaW52YWxp ZF9wYXJhbXNfZmVuY2UiKSB7Ci0JCXN0cnVjdCBrbXNfYXRvbWljX3N0YXRlICpzY3JhdGNoID0g YXRvbWljX3N0YXRlX2R1cChjdXJyZW50KTsKLQkJc3RydWN0IGttc19hdG9taWNfY3J0Y19zdGF0 ZSAqY3J0YyA9IGZpbmRfY3J0YyhzY3JhdGNoLCB0cnVlKTsKLQkJc3RydWN0IGttc19hdG9taWNf cGxhbmVfc3RhdGUgKnBsYW5lID0KLQkJCWZpbmRfcGxhbmUoY3VycmVudCwgUExBTkVfVFlQRV9Q UklNQVJZLCBjcnRjKTsKLQkJc3RydWN0IGttc19hdG9taWNfY29ubmVjdG9yX3N0YXRlICpjb25u ID0KLQkJCWZpbmRfY29ubmVjdG9yKHNjcmF0Y2gsIGNydGMpOwotCi0JCWlndF9yZXF1aXJlKGNy dGMpOwotCQlpZ3RfcmVxdWlyZShwbGFuZSk7Ci0JCXBsYW5lX2ludmFsaWRfcGFyYW1zX2ZlbmNl KGNydGMsIHBsYW5lLCBjb25uKTsKLQkJYXRvbWljX3N0YXRlX2ZyZWUoc2NyYXRjaCk7CisJCWF0 b21pY19zZXR1cCgmZGlzcGxheSwgcGlwZSwgb3V0cHV0LCBwcmltYXJ5LCAmZmIpOworCisJCXBs YW5lX2ludmFsaWRfcGFyYW1zX2ZlbmNlKHBpcGVfb2JqLCBvdXRwdXQsIHByaW1hcnkpOwogCX0K IAogCWlndF9zdWJ0ZXN0KCJjcnRjX2ludmFsaWRfcGFyYW1zIikgewotCQlzdHJ1Y3Qga21zX2F0 b21pY19zdGF0ZSAqc2NyYXRjaCA9IGF0b21pY19zdGF0ZV9kdXAoY3VycmVudCk7Ci0JCXN0cnVj dCBrbXNfYXRvbWljX2NydGNfc3RhdGUgKmNydGMgPSBmaW5kX2NydGMoc2NyYXRjaCwgdHJ1ZSk7 Ci0JCXN0cnVjdCBrbXNfYXRvbWljX3BsYW5lX3N0YXRlICpwbGFuZSA9Ci0JCQlmaW5kX3BsYW5l KHNjcmF0Y2gsIE5VTV9QTEFORV9UWVBFX1BST1BTLCBjcnRjKTsKLQkJc3RydWN0IGttc19hdG9t aWNfY29ubmVjdG9yX3N0YXRlICpjb25uID0KLQkJCWZpbmRfY29ubmVjdG9yKHNjcmF0Y2gsIGNy dGMpOwotCi0JCWlndF9yZXF1aXJlKGNydGMpOwotCQlpZ3RfcmVxdWlyZShwbGFuZSk7Ci0JCWln dF9yZXF1aXJlKGNvbm4pOwotCQljcnRjX2ludmFsaWRfcGFyYW1zKGNydGMsIHBsYW5lLCBjb25u KTsKLQkJYXRvbWljX3N0YXRlX2ZyZWUoc2NyYXRjaCk7CisJCWF0b21pY19zZXR1cCgmZGlzcGxh eSwgcGlwZSwgb3V0cHV0LCBwcmltYXJ5LCAmZmIpOworCisJCWNydGNfaW52YWxpZF9wYXJhbXMo cGlwZV9vYmosIG91dHB1dCwgcHJpbWFyeSwgJmZiKTsKIAl9CiAKIAlpZ3Rfc3VidGVzdCgiY3J0 Y19pbnZhbGlkX3BhcmFtc19mZW5jZSIpIHsKLQkJc3RydWN0IGttc19hdG9taWNfc3RhdGUgKnNj cmF0Y2ggPSBhdG9taWNfc3RhdGVfZHVwKGN1cnJlbnQpOwotCQlzdHJ1Y3Qga21zX2F0b21pY19j cnRjX3N0YXRlICpjcnRjID0gZmluZF9jcnRjKHNjcmF0Y2gsIHRydWUpOwotCQlzdHJ1Y3Qga21z X2F0b21pY19wbGFuZV9zdGF0ZSAqcGxhbmUgPQotCQkJZmluZF9wbGFuZShzY3JhdGNoLCBOVU1f UExBTkVfVFlQRV9QUk9QUywgY3J0Yyk7Ci0JCXN0cnVjdCBrbXNfYXRvbWljX2Nvbm5lY3Rvcl9z dGF0ZSAqY29ubiA9Ci0JCQlmaW5kX2Nvbm5lY3RvcihzY3JhdGNoLCBjcnRjKTsKLQotCQlpZ3Rf cmVxdWlyZShjcnRjKTsKLQkJaWd0X3JlcXVpcmUocGxhbmUpOwotCQlpZ3RfcmVxdWlyZShjb25u KTsKLQkJY3J0Y19pbnZhbGlkX3BhcmFtc19mZW5jZShjcnRjLCBwbGFuZSwgY29ubik7Ci0JCWF0 b21pY19zdGF0ZV9mcmVlKHNjcmF0Y2gpOworCQlhdG9taWNfc2V0dXAoJmRpc3BsYXksIHBpcGUs IG91dHB1dCwgcHJpbWFyeSwgJmZiKTsKKworCQljcnRjX2ludmFsaWRfcGFyYW1zX2ZlbmNlKHBp cGVfb2JqLCBvdXRwdXQsIHByaW1hcnksICZmYik7CiAJfQogCiAJaWd0X3N1YnRlc3QoImF0b21p Y19pbnZhbGlkX3BhcmFtcyIpIHsKLQkJc3RydWN0IGttc19hdG9taWNfc3RhdGUgKnNjcmF0Y2gg PSBhdG9taWNfc3RhdGVfZHVwKGN1cnJlbnQpOwotCQlzdHJ1Y3Qga21zX2F0b21pY19jcnRjX3N0 YXRlICpjcnRjID0gZmluZF9jcnRjKHNjcmF0Y2gsIHRydWUpOwotCQlzdHJ1Y3Qga21zX2F0b21p Y19wbGFuZV9zdGF0ZSAqcGxhbmUgPQotCQkJZmluZF9wbGFuZShzY3JhdGNoLCBOVU1fUExBTkVf VFlQRV9QUk9QUywgY3J0Yyk7Ci0JCXN0cnVjdCBrbXNfYXRvbWljX2Nvbm5lY3Rvcl9zdGF0ZSAq Y29ubiA9Ci0JCQlmaW5kX2Nvbm5lY3RvcihzY3JhdGNoLCBjcnRjKTsKLQotCQlpZ3RfcmVxdWly ZShjcnRjKTsKLQkJaWd0X3JlcXVpcmUocGxhbmUpOwotCQlpZ3RfcmVxdWlyZShjb25uKTsKLQkJ YXRvbWljX2ludmFsaWRfcGFyYW1zKGNydGMsIHBsYW5lLCBjb25uKTsKLQkJYXRvbWljX3N0YXRl X2ZyZWUoc2NyYXRjaCk7CisJCWF0b21pY19zZXR1cCgmZGlzcGxheSwgcGlwZSwgb3V0cHV0LCBw cmltYXJ5LCAmZmIpOworCisJCWF0b21pY19pbnZhbGlkX3BhcmFtcyhwaXBlX29iaiwgcHJpbWFy eSwgb3V0cHV0LCAmZmIpOwogCX0KIAotCWF0b21pY19zdGF0ZV9mcmVlKGN1cnJlbnQpOworCWln dF9maXh0dXJlIHsKKwkJYXRvbWljX2NsZWFyKCZkaXNwbGF5LCBwaXBlLCBwcmltYXJ5LCBvdXRw dXQpOworCQlpZ3RfcmVtb3ZlX2ZiKGRpc3BsYXkuZHJtX2ZkLCAmZmIpOwogCi0JaWd0X2ZpeHR1 cmUKLQkJY2xvc2UoZGVzYy5mZCk7CisJCWlndF9kaXNwbGF5X2ZpbmkoJmRpc3BsYXkpOworCX0K IH0KLS0gCjIuMTQuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwt Z2Z4Cg==