From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id D7AFD6E911 for ; Fri, 24 Jul 2020 06:41:18 +0000 (UTC) From: =?UTF-8?q?Zbigniew=20Kempczy=C5=84ski?= Date: Fri, 24 Jul 2020 08:40:42 +0200 Message-Id: <20200724064043.10172-12-zbigniew.kempczynski@intel.com> In-Reply-To: <20200724064043.10172-1-zbigniew.kempczynski@intel.com> References: <20200724064043.10172-1-zbigniew.kempczynski@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v2 11/12] tests/perf: remove libdrm dependency for rendercopy List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org Cc: Chris Wilson List-ID: UmVuZGVyY29weSBub3cgdXNlcyBuby1kcm0gdmVyc2lvbiBzbyBhbGwgdXNlcnMgaGFzIHRvCm1p Z3JhdGUgdG8gbmV3IGludGVyZmFjZS4KClNpZ25lZC1vZmYtYnk6IFpiaWduaWV3IEtlbXBjennF hHNraSA8emJpZ25pZXcua2VtcGN6eW5za2lAaW50ZWwuY29tPgpDYzogTGlvbmVsIExhbmR3ZXJs aW4gPGxpb25lbC5nLmxhbmR3ZXJsaW5AaW50ZWwuY29tPgpDYzogRG9taW5payBHcnplZ29yemVr IDxkb21pbmlrLmdyemVnb3J6ZWtAaW50ZWwuY29tPgpDYzogQ2hyaXMgV2lsc29uIDxjaHJpc0Bj aHJpcy13aWxzb24uY28udWs+Ci0tLQogdGVzdHMvaTkxNS9wZXJmLmMgfCA2NjMgKysrKysrKysr KysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDI4 MSBpbnNlcnRpb25zKCspLCAzODIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvdGVzdHMvaTkx NS9wZXJmLmMgYi90ZXN0cy9pOTE1L3BlcmYuYwppbmRleCA5MmVkYzlmMS4uZmQyYjQwNzMgMTAw NjQ0Ci0tLSBhL3Rlc3RzL2k5MTUvcGVyZi5jCisrKyBiL3Rlc3RzL2k5MTUvcGVyZi5jCkBAIC00 OTcsNjQgKzQ5Nyw0MiBAQCBvYV9yZXBvcnRfZ2V0X2N0eF9pZCh1aW50MzJfdCAqcmVwb3J0KQog fQogCiBzdGF0aWMgdm9pZAotc2NyYXRjaF9idWZfbWVtc2V0KGRybV9pbnRlbF9ibyAqYm8sIGlu dCB3aWR0aCwgaW50IGhlaWdodCwgdWludDMyX3QgY29sb3IpCitzY3JhdGNoX2J1Zl9tZW1zZXQo c3RydWN0IGludGVsX2J1ZiAqYnVmLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVpbnQzMl90IGNv bG9yKQogewotCWludCByZXQ7Ci0KLQlyZXQgPSBkcm1faW50ZWxfYm9fbWFwKGJvLCB0cnVlIC8q IHdyaXRhYmxlICovKTsKLQlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7CisJaW50ZWxfYnVmX2NwdV9t YXAoYnVmLCB0cnVlKTsKIAogCWZvciAoaW50IGkgPSAwOyBpIDwgd2lkdGggKiBoZWlnaHQ7IGkr KykKLQkJKCh1aW50MzJfdCAqKWJvLT52aXJ0dWFsKVtpXSA9IGNvbG9yOworCQlidWYtPnB0cltp XSA9IGNvbG9yOwogCi0JZHJtX2ludGVsX2JvX3VubWFwKGJvKTsKKwlpbnRlbF9idWZfdW5tYXAo YnVmKTsKIH0KIAogc3RhdGljIHZvaWQKLXNjcmF0Y2hfYnVmX2luaXQoZHJtX2ludGVsX2J1Zm1n ciAqYnVmbWdyLAotCQkgc3RydWN0IGlndF9idWYgKmJ1ZiwKK3NjcmF0Y2hfYnVmX2luaXQoc3Ry dWN0IGJ1Zl9vcHMgKmJvcHMsCisJCSBzdHJ1Y3QgaW50ZWxfYnVmICpidWYsCiAJCSBpbnQgd2lk dGgsIGludCBoZWlnaHQsCiAJCSB1aW50MzJfdCBjb2xvcikKIHsKLQlzaXplX3Qgc3RyaWRlID0g d2lkdGggKiA0OwotCXNpemVfdCBzaXplID0gc3RyaWRlICogaGVpZ2h0OwotCWRybV9pbnRlbF9i byAqYm8gPSBkcm1faW50ZWxfYm9fYWxsb2MoYnVmbWdyLCAiIiwgc2l6ZSwgNDA5Nik7Ci0KLQlz Y3JhdGNoX2J1Zl9tZW1zZXQoYm8sIHdpZHRoLCBoZWlnaHQsIGNvbG9yKTsKLQotCW1lbXNldChi dWYsIDAsIHNpemVvZigqYnVmKSk7Ci0KLQlidWYtPmJvID0gYm87Ci0JYnVmLT5zdXJmYWNlWzBd LnN0cmlkZSA9IHN0cmlkZTsKLQlidWYtPnRpbGluZyA9IEk5MTVfVElMSU5HX05PTkU7Ci0JYnVm LT5zdXJmYWNlWzBdLnNpemUgPSBzaXplOwotCWJ1Zi0+YnBwID0gMzI7CisJaW50ZWxfYnVmX2lu aXQoYm9wcywgYnVmLCB3aWR0aCwgaGVpZ2h0LCAzMiwgMCwKKwkJICAgICAgIEk5MTVfVElMSU5H X05PTkUsIEk5MTVfQ09NUFJFU1NJT05fTk9ORSk7CisJc2NyYXRjaF9idWZfbWVtc2V0KGJ1Ziwg d2lkdGgsIGhlaWdodCwgY29sb3IpOwogfQogCiBzdGF0aWMgdm9pZAotZW1pdF9yZXBvcnRfcGVy Zl9jb3VudChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkgICAgICAgZHJtX2lu dGVsX2JvICpkc3RfYm8sCitlbWl0X3JlcG9ydF9wZXJmX2NvdW50KHN0cnVjdCBpbnRlbF9iYiAq aWJiLAorCQkgICAgICAgc3RydWN0IGludGVsX2J1ZiAqZHN0LAogCQkgICAgICAgaW50IGRzdF9v ZmZzZXQsCiAJCSAgICAgICB1aW50MzJfdCByZXBvcnRfaWQpCiB7Ci0JaWYgKElTX0hBU1dFTEwo ZGV2aWQpKSB7Ci0JCUJFR0lOX0JBVENIKDMsIDEpOwotCQlPVVRfQkFUQ0goR0VONl9NSV9SRVBP UlRfUEVSRl9DT1VOVCk7Ci0JCU9VVF9SRUxPQyhkc3RfYm8sIEk5MTVfR0VNX0RPTUFJTl9JTlNU UlVDVElPTiwgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLAotCQkJICBkc3Rfb2Zmc2V0KTsK LQkJT1VUX0JBVENIKHJlcG9ydF9pZCk7Ci0JCUFEVkFOQ0VfQkFUQ0goKTsKLQl9IGVsc2Ugewot CQkvKiBYWFg6IE5COiBuIGR3b3JkcyBhcmcgaXMgYWN0dWFsbHkgbWFnaWMgc2luY2UgaXQgaW50 ZXJuYWxseQotCQkgKiBhdXRvbWF0aWNhbGx5IGFjY291bnRzIGZvciBsYXJnZXIgYWRkcmVzc2Vz IG9uIGdlbiA+PSA4Li4uCi0JCSAqLwotCQlCRUdJTl9CQVRDSCgzLCAxKTsKLQkJT1VUX0JBVENI KEdFTjhfTUlfUkVQT1JUX1BFUkZfQ09VTlQpOwotCQlPVVRfUkVMT0MoZHN0X2JvLCBJOTE1X0dF TV9ET01BSU5fSU5TVFJVQ1RJT04sIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwKLQkJCSAg ZHN0X29mZnNldCk7Ci0JCU9VVF9CQVRDSChyZXBvcnRfaWQpOwotCQlBRFZBTkNFX0JBVENIKCk7 Ci0JfQorCWlmIChJU19IQVNXRUxMKGRldmlkKSkKKwkJaW50ZWxfYmJfb3V0KGliYiwgR0VONl9N SV9SRVBPUlRfUEVSRl9DT1VOVCk7CisJZWxzZQorCQlpbnRlbF9iYl9vdXQoaWJiLCBHRU44X01J X1JFUE9SVF9QRVJGX0NPVU5UKTsKKworCWludGVsX2JiX2VtaXRfcmVsb2MoaWJiLCBkc3QtPmhh bmRsZSwKKwkJCSAgICBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIEk5MTVfR0VNX0RPTUFJ Tl9JTlNUUlVDVElPTiwKKwkJCSAgICBkc3Rfb2Zmc2V0LCBkc3QtPmFkZHIub2Zmc2V0KTsKKwlp bnRlbF9iYl9vdXQoaWJiLCByZXBvcnRfaWQpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTQ5NSwx NCArMTQ3MywxMyBAQCBlbnVtIGxvYWQgewogCiBzdGF0aWMgc3RydWN0IGxvYWRfaGVscGVyIHsK IAlpbnQgZGV2aWQ7Ci0JZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyOwotCWRybV9pbnRlbF9jb250 ZXh0ICpjb250ZXh0OworCXN0cnVjdCBidWZfb3BzICpib3BzOwogCXVpbnQzMl90IGNvbnRleHRf aWQ7Ci0Jc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaDsKKwlzdHJ1Y3QgaW50ZWxfYmIg KmliYjsKIAllbnVtIGxvYWQgbG9hZDsKIAlib29sIGV4aXQ7CiAJc3RydWN0IGlndF9oZWxwZXJf cHJvY2VzcyBpZ3RfcHJvYzsKLQlzdHJ1Y3QgaWd0X2J1ZiBzcmMsIGRzdDsKKwlzdHJ1Y3QgaW50 ZWxfYnVmIHNyYywgZHN0OwogfSBsaCA9IHsgMCwgfTsKIAogc3RhdGljIHZvaWQgbG9hZF9oZWxw ZXJfc2lnbmFsX2hhbmRsZXIoaW50IHNpZykKQEAgLTE1MjQsNiArMTUwMSwxNCBAQCBzdGF0aWMg dm9pZCBsb2FkX2hlbHBlcl9zZXRfbG9hZChlbnVtIGxvYWQgbG9hZCkKIAlraWxsKGxoLmlndF9w cm9jLnBpZCwgU0lHVVNSMik7CiB9CiAKK3N0YXRpYyB2b2lkIHNldF90b19ndHRfZG9tYWluKHN0 cnVjdCBpbnRlbF9idWYgKmJ1ZiwgaW50IHdyaXRpbmcpCit7CisJaW50IGk5MTUgPSBidWZfb3Bz X2dldF9mZChidWYtPmJvcHMpOworCisJZ2VtX3NldF9kb21haW4oaTkxNSwgYnVmLT5oYW5kbGUs IEk5MTVfR0VNX0RPTUFJTl9HVFQsCisJCSAgICAgICB3cml0aW5nID8gSTkxNV9HRU1fRE9NQUlO X0dUVCA6IDApOworfQorCiBzdGF0aWMgdm9pZCBsb2FkX2hlbHBlcl9ydW4oZW51bSBsb2FkIGxv YWQpCiB7CiAJLyoKQEAgLTE1NDIsMjEgKzE1MjcsMTIgQEAgc3RhdGljIHZvaWQgbG9hZF9oZWxw ZXJfcnVuKGVudW0gbG9hZCBsb2FkKQogCQlzaWduYWwoU0lHVVNSMiwgbG9hZF9oZWxwZXJfc2ln bmFsX2hhbmRsZXIpOwogCiAJCXdoaWxlICghbGguZXhpdCkgewotCQkJaW50IHJldDsKLQotCQkJ cmVuZGVyX2NvcHkobGguYmF0Y2gsCi0JCQkJICAgIGxoLmNvbnRleHQsCisJCQlyZW5kZXJfY29w eShsaC5pYmIsCisJCQkJICAgIGxoLmNvbnRleHRfaWQsCiAJCQkJICAgICZsaC5zcmMsIDAsIDAs IDE5MjAsIDEwODAsCiAJCQkJICAgICZsaC5kc3QsIDAsIDApOwogCi0JCQlpbnRlbF9iYXRjaGJ1 ZmZlcl9mbHVzaF93aXRoX2NvbnRleHQobGguYmF0Y2gsCi0JCQkJCQkJICAgICBsaC5jb250ZXh0 KTsKLQotCQkJcmV0ID0gZHJtX2ludGVsX2dlbV9jb250ZXh0X2dldF9pZChsaC5jb250ZXh0LAot CQkJCQkJCSAgICZsaC5jb250ZXh0X2lkKTsKLQkJCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKLQot CQkJZHJtX2ludGVsX2JvX3dhaXRfcmVuZGVyaW5nKGxoLmRzdC5ibyk7CisJCQlzZXRfdG9fZ3R0 X2RvbWFpbigmbGguZHN0LCB0cnVlKTsKIAogCQkJLyogTG93ZXIgdGhlIGxvYWQgYnkgcGF1c2lu ZyBhZnRlciBldmVyeSBzdWJtaXR0ZWQKIAkJCSAqIHdyaXRlLiAqLwpAQCAtMTU3NCw1MiArMTU1 MCwzNiBAQCBzdGF0aWMgdm9pZCBsb2FkX2hlbHBlcl9zdG9wKHZvaWQpCiAKIHN0YXRpYyB2b2lk IGxvYWRfaGVscGVyX2luaXQodm9pZCkKIHsKLQlpbnQgcmV0OwotCiAJbGguZGV2aWQgPSBpbnRl bF9nZXRfZHJtX2RldmlkKGRybV9mZCk7CiAKIAkvKiBNSV9TVE9SRV9EQVRBIGNhbiBvbmx5IHVz ZSBHVFQgYWRkcmVzcyBvbiBnZW40Ky9nMzMgYW5kIG5lZWRzCiAJICogc25vb3BhYmxlIG1lbSBv biBwcmUtZ2VuNi4gSGVuY2UgbG9hZC1oZWxwZXIgb25seSB3b3JrcyBvbiBnZW42KywgYnV0CiAJ ICogdGhhdCdzIGFsc28gYWxsIHdlIGNhcmUgYWJvdXQgZm9yIHRoZSBycHMgdGVzdGNhc2UqLwog CWlndF9hc3NlcnQoaW50ZWxfZ2VuKGxoLmRldmlkKSA+PSA2KTsKLQlsaC5idWZtZ3IgPSBkcm1f aW50ZWxfYnVmbWdyX2dlbV9pbml0KGRybV9mZCwgNDA5Nik7Ci0JaWd0X2Fzc2VydChsaC5idWZt Z3IpOwotCi0JZHJtX2ludGVsX2J1Zm1ncl9nZW1fZW5hYmxlX3JldXNlKGxoLmJ1Zm1ncik7CiAK LQlsaC5jb250ZXh0ID0gZHJtX2ludGVsX2dlbV9jb250ZXh0X2NyZWF0ZShsaC5idWZtZ3IpOwot CWlndF9hc3NlcnQobGguY29udGV4dCk7CisJbGguYm9wcyA9IGJ1Zl9vcHNfY3JlYXRlKGRybV9m ZCk7CiAKLQlsaC5jb250ZXh0X2lkID0gMHhmZmZmZmZmZjsKLQlyZXQgPSBkcm1faW50ZWxfZ2Vt X2NvbnRleHRfZ2V0X2lkKGxoLmNvbnRleHQsICZsaC5jb250ZXh0X2lkKTsKLQlpZ3RfYXNzZXJ0 X2VxKHJldCwgMCk7CisJbGguY29udGV4dF9pZCA9IGdlbV9jb250ZXh0X2NyZWF0ZShkcm1fZmQp OwogCWlndF9hc3NlcnRfbmVxKGxoLmNvbnRleHRfaWQsIDB4ZmZmZmZmZmYpOwogCi0JbGguYmF0 Y2ggPSBpbnRlbF9iYXRjaGJ1ZmZlcl9hbGxvYyhsaC5idWZtZ3IsIGxoLmRldmlkKTsKLQlpZ3Rf YXNzZXJ0KGxoLmJhdGNoKTsKKwlsaC5pYmIgPSBpbnRlbF9iYl9jcmVhdGUoZHJtX2ZkLCBCQVRD SF9TWik7CiAKLQlzY3JhdGNoX2J1Zl9pbml0KGxoLmJ1Zm1nciwgJmxoLmRzdCwgMTkyMCwgMTA4 MCwgMCk7Ci0Jc2NyYXRjaF9idWZfaW5pdChsaC5idWZtZ3IsICZsaC5zcmMsIDE5MjAsIDEwODAs IDApOworCXNjcmF0Y2hfYnVmX2luaXQobGguYm9wcywgJmxoLmRzdCwgMTkyMCwgMTA4MCwgMCk7 CisJc2NyYXRjaF9idWZfaW5pdChsaC5ib3BzLCAmbGguc3JjLCAxOTIwLCAxMDgwLCAwKTsKIH0K IAogc3RhdGljIHZvaWQgbG9hZF9oZWxwZXJfZmluaSh2b2lkKQogeworCWludCBpOTE1ID0gYnVm X29wc19nZXRfZmQobGguYm9wcyk7CisKIAlpZiAobGguaWd0X3Byb2MucnVubmluZykKIAkJbG9h ZF9oZWxwZXJfc3RvcCgpOwogCi0JaWYgKGxoLnNyYy5ibykKLQkJZHJtX2ludGVsX2JvX3VucmVm ZXJlbmNlKGxoLnNyYy5ibyk7Ci0JaWYgKGxoLmRzdC5ibykKLQkJZHJtX2ludGVsX2JvX3VucmVm ZXJlbmNlKGxoLmRzdC5ibyk7Ci0KLQlpZiAobGguYmF0Y2gpCi0JCWludGVsX2JhdGNoYnVmZmVy X2ZyZWUobGguYmF0Y2gpOwotCi0JaWYgKGxoLmNvbnRleHQpCi0JCWRybV9pbnRlbF9nZW1fY29u dGV4dF9kZXN0cm95KGxoLmNvbnRleHQpOwotCi0JaWYgKGxoLmJ1Zm1ncikKLQkJZHJtX2ludGVs X2J1Zm1ncl9kZXN0cm95KGxoLmJ1Zm1ncik7CisJaW50ZWxfYnVmX2Nsb3NlKGxoLmJvcHMsICZs aC5zcmMpOworCWludGVsX2J1Zl9jbG9zZShsaC5ib3BzLCAmbGguZHN0KTsKKwlpbnRlbF9iYl9k ZXN0cm95KGxoLmliYik7CisJZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCBsaC5jb250ZXh0X2lk KTsKKwlidWZfb3BzX2Rlc3Ryb3kobGguYm9wcyk7CiB9CiAKIHN0YXRpYyBib29sIGV4cGVjdGVk X3JlcG9ydF90aW1pbmdfZGVsdGEodWludDMyX3QgZGVsdGEsIHVpbnQzMl90IGV4cGVjdGVkX2Rl bHRhKQpAQCAtMTg4OCwyMCArMTg0OCwxMSBAQCB0ZXN0X3Blcl9jb250ZXh0X21vZGVfdW5wcml2 aWxlZ2VkKHZvaWQpCiAJd3JpdGVfdTY0X2ZpbGUoIi9wcm9jL3N5cy9kZXYvaTkxNS9wZXJmX3N0 cmVhbV9wYXJhbm9pZCIsIDEpOwogCiAJaWd0X2ZvcmsoY2hpbGQsIDEpIHsKLQkJZHJtX2ludGVs X2NvbnRleHQgKmNvbnRleHQ7Ci0JCWRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1ncjsKIAkJdWludDMy X3QgY3R4X2lkID0gMHhmZmZmZmZmZjsgLyogaW52YWxpZCBpZCAqLwotCQlpbnQgcmV0OwogCiAJ CWlndF9kcm9wX3Jvb3QoKTsKIAotCQlidWZtZ3IgPSBkcm1faW50ZWxfYnVmbWdyX2dlbV9pbml0 KGRybV9mZCwgNDA5Nik7Ci0JCWNvbnRleHQgPSBkcm1faW50ZWxfZ2VtX2NvbnRleHRfY3JlYXRl KGJ1Zm1ncik7Ci0KLQkJaWd0X2Fzc2VydChjb250ZXh0KTsKLQotCQlyZXQgPSBkcm1faW50ZWxf Z2VtX2NvbnRleHRfZ2V0X2lkKGNvbnRleHQsICZjdHhfaWQpOwotCQlpZ3RfYXNzZXJ0X2VxKHJl dCwgMCk7CisJCWN0eF9pZCA9IGdlbV9jb250ZXh0X2NyZWF0ZShkcm1fZmQpOwogCQlpZ3RfYXNz ZXJ0X25lcShjdHhfaWQsIDB4ZmZmZmZmZmYpOwogCiAJCXByb3BlcnRpZXNbMV0gPSBjdHhfaWQ7 CkBAIC0xOTA5LDggKzE4NjAsNyBAQCB0ZXN0X3Blcl9jb250ZXh0X21vZGVfdW5wcml2aWxlZ2Vk KHZvaWQpCiAJCXN0cmVhbV9mZCA9IF9fcGVyZl9vcGVuKGRybV9mZCwgJnBhcmFtLCBmYWxzZSk7 CiAJCV9fcGVyZl9jbG9zZShzdHJlYW1fZmQpOwogCi0JCWRybV9pbnRlbF9nZW1fY29udGV4dF9k ZXN0cm95KGNvbnRleHQpOwotCQlkcm1faW50ZWxfYnVmbWdyX2Rlc3Ryb3koYnVmbWdyKTsKKwkJ Z2VtX2NvbnRleHRfZGVzdHJveShkcm1fZmQsIGN0eF9pZCk7CiAJfQogCiAJaWd0X3dhaXRjaGls ZHJlbigpOwpAQCAtMjkzNiw1NSArMjg4Niw0NCBAQCBnZW4xMl90ZXN0X21pX3JwYyh2b2lkKQog CQkubnVtX3Byb3BlcnRpZXMgPSBBUlJBWV9TSVpFKHByb3BlcnRpZXMpIC8gMiwKIAkJLnByb3Bl cnRpZXNfcHRyID0gdG9fdXNlcl9wb2ludGVyKHByb3BlcnRpZXMpLAogCX07Ci0JZHJtX2ludGVs X2JvICpibzsKLQlkcm1faW50ZWxfYnVmbWdyICpidWZtZ3I7Ci0JZHJtX2ludGVsX2NvbnRleHQg KmNvbnRleHQ7Ci0Jc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaDsKKwlzdHJ1Y3QgYnVm X29wcyAqYm9wczsKKwlzdHJ1Y3QgaW50ZWxfYmIgKmliYjsKKwlzdHJ1Y3QgaW50ZWxfYnVmICpi dWY7CiAjZGVmaW5lIElOVkFMSURfQ1RYX0lEIDB4ZmZmZmZmZmYKIAl1aW50MzJfdCBjdHhfaWQg PSBJTlZBTElEX0NUWF9JRDsKIAl1aW50MzJfdCAqcmVwb3J0MzI7Ci0JaW50IHJldDsKIAlzaXpl X3QgZm9ybWF0X3NpemVfMzI7CiAJc3RydWN0IG9hX2Zvcm1hdCBmb3JtYXQgPSBnZXRfb2FfZm9y bWF0KHRlc3Rfc2V0LT5wZXJmX29hX2Zvcm1hdCk7CiAKIAkvKiBFbnN1cmUgcGVyZl9zdHJlYW1f cGFyYW5vaWQgaXMgc2V0IHRvIDEgYnkgZGVmYXVsdCAqLwogCXdyaXRlX3U2NF9maWxlKCIvcHJv Yy9zeXMvZGV2L2k5MTUvcGVyZl9zdHJlYW1fcGFyYW5vaWQiLCAxKTsKIAotCWJ1Zm1nciA9IGRy bV9pbnRlbF9idWZtZ3JfZ2VtX2luaXQoZHJtX2ZkLCA0MDk2KTsKLQlpZ3RfYXNzZXJ0KGJ1Zm1n cik7Ci0KLQlkcm1faW50ZWxfYnVmbWdyX2dlbV9lbmFibGVfcmV1c2UoYnVmbWdyKTsKLQotCWNv bnRleHQgPSBkcm1faW50ZWxfZ2VtX2NvbnRleHRfY3JlYXRlKGJ1Zm1ncik7Ci0JaWd0X2Fzc2Vy dChjb250ZXh0KTsKLQotCXJldCA9IGRybV9pbnRlbF9nZW1fY29udGV4dF9nZXRfaWQoY29udGV4 dCwgJmN0eF9pZCk7Ci0JaWd0X2Fzc2VydF9lcShyZXQsIDApOworCWJvcHMgPSBidWZfb3BzX2Ny ZWF0ZShkcm1fZmQpOworCWN0eF9pZCA9IGdlbV9jb250ZXh0X2NyZWF0ZShkcm1fZmQpOwogCWln dF9hc3NlcnRfbmVxKGN0eF9pZCwgSU5WQUxJRF9DVFhfSUQpOwogCXByb3BlcnRpZXNbMV0gPSBj dHhfaWQ7CiAKLQliYXRjaCA9IGludGVsX2JhdGNoYnVmZmVyX2FsbG9jKGJ1Zm1nciwgZGV2aWQp OwotCWJvID0gZHJtX2ludGVsX2JvX2FsbG9jKGJ1Zm1nciwgIm1pX3JwYyBkZXN0IGJvIiwgNDA5 NiwgNjQpOworCWliYiA9IGludGVsX2JiX2NyZWF0ZShkcm1fZmQsIEJBVENIX1NaKTsKKwlidWYg PSBpbnRlbF9idWZfY3JlYXRlKGJvcHMsIDQwOTYsIDEsIDgsIDY0LAorCQkJICAgICAgIEk5MTVf VElMSU5HX05PTkUsIEk5MTVfQ09NUFJFU1NJT05fTk9ORSk7CiAKLQlyZXQgPSBkcm1faW50ZWxf Ym9fbWFwKGJvLCB0cnVlKTsKLQlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7Ci0JbWVtc2V0KGJvLT52 aXJ0dWFsLCAweDgwLCA0MDk2KTsKLQlkcm1faW50ZWxfYm9fdW5tYXAoYm8pOworCWludGVsX2J1 Zl9jcHVfbWFwKGJ1ZiwgdHJ1ZSk7CisJbWVtc2V0KGJ1Zi0+cHRyLCAweDgwLCA0MDk2KTsKKwlp bnRlbF9idWZfdW5tYXAoYnVmKTsKIAogCXN0cmVhbV9mZCA9IF9fcGVyZl9vcGVuKGRybV9mZCwg JnBhcmFtLCBmYWxzZSk7CiAKICNkZWZpbmUgUkVQT1JUX0lEIDB4ZGVhZGJlZWYKICNkZWZpbmUg UkVQT1JUX09GRlNFVCAwCi0JZW1pdF9yZXBvcnRfcGVyZl9jb3VudChiYXRjaCwKLQkJCSAgICAg ICBibywKKwllbWl0X3JlcG9ydF9wZXJmX2NvdW50KGliYiwKKwkJCSAgICAgICBidWYsCiAJCQkg ICAgICAgUkVQT1JUX09GRlNFVCwKIAkJCSAgICAgICBSRVBPUlRfSUQpOwotCWludGVsX2JhdGNo YnVmZmVyX2ZsdXNoX3dpdGhfY29udGV4dChiYXRjaCwgY29udGV4dCk7CisJaW50ZWxfYmJfZmx1 c2hfcmVuZGVyX3dpdGhfY29udGV4dChpYmIsIGN0eF9pZCk7CisJaW50ZWxfYmJfc3luYyhpYmIp OwogCi0JcmV0ID0gZHJtX2ludGVsX2JvX21hcChibywgZmFsc2UpOwotCWlndF9hc3NlcnRfZXEo cmV0LCAwKTsKLQotCXJlcG9ydDMyID0gYm8tPnZpcnR1YWw7CisJaW50ZWxfYnVmX2NwdV9tYXAo YnVmLCBmYWxzZSk7CisJcmVwb3J0MzIgPSBidWYtPnB0cjsKIAlmb3JtYXRfc2l6ZV8zMiA9IGZv cm1hdC5zaXplID4+IDI7CiAJZHVtcF9yZXBvcnQocmVwb3J0MzIsIGZvcm1hdF9zaXplXzMyLCAi bWktcnBjIik7CiAKQEAgLTMwMDYsMTEgKzI5NDUsMTEgQEAgZ2VuMTJfdGVzdF9taV9ycGModm9p ZCkKIAlpZ3RfYXNzZXJ0X25lcShyZXBvcnQzMltmb3JtYXQuYl9vZmYgPj4gMl0sIDB4ODA4MDgw ODApOwogCWlndF9hc3NlcnRfZXEocmVwb3J0MzJbZm9ybWF0X3NpemVfMzJdLCAweDgwODA4MDgw KTsKIAotCWRybV9pbnRlbF9ib191bm1hcChibyk7Ci0JZHJtX2ludGVsX2JvX3VucmVmZXJlbmNl KGJvKTsKLQlpbnRlbF9iYXRjaGJ1ZmZlcl9mcmVlKGJhdGNoKTsKLQlkcm1faW50ZWxfZ2VtX2Nv bnRleHRfZGVzdHJveShjb250ZXh0KTsKLQlkcm1faW50ZWxfYnVmbWdyX2Rlc3Ryb3koYnVmbWdy KTsKKwlpbnRlbF9idWZfdW5tYXAoYnVmKTsKKwlpbnRlbF9idWZfZGVzdHJveShidWYpOworCWlu dGVsX2JiX2Rlc3Ryb3koaWJiKTsKKwlnZW1fY29udGV4dF9kZXN0cm95KGRybV9mZCwgY3R4X2lk KTsKKwlidWZfb3BzX2Rlc3Ryb3koYm9wcyk7CiAJX19wZXJmX2Nsb3NlKHN0cmVhbV9mZCk7CiB9 CiAKQEAgLTMwMzQsNDEgKzI5NzMsMzMgQEAgdGVzdF9taV9ycGModm9pZCkKIAkJLm51bV9wcm9w ZXJ0aWVzID0gc2l6ZW9mKHByb3BlcnRpZXMpIC8gMTYsCiAJCS5wcm9wZXJ0aWVzX3B0ciA9IHRv X3VzZXJfcG9pbnRlcihwcm9wZXJ0aWVzKSwKIAl9OwotCWRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1n ciA9IGRybV9pbnRlbF9idWZtZ3JfZ2VtX2luaXQoZHJtX2ZkLCA0MDk2KTsKLQlkcm1faW50ZWxf Y29udGV4dCAqY29udGV4dDsKLQlzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoOwotCWRy bV9pbnRlbF9ibyAqYm87Ci0JdWludDMyX3QgKnJlcG9ydDMyOwotCWludCByZXQ7CisJc3RydWN0 IGJ1Zl9vcHMgKmJvcHMgPSBidWZfb3BzX2NyZWF0ZShkcm1fZmQpOworCXN0cnVjdCBpbnRlbF9i YiAqaWJiOworCXN0cnVjdCBpbnRlbF9idWYgKmJ1ZjsKKwl1aW50MzJfdCAqcmVwb3J0MzIsIGN0 eF9pZDsKIAogCXN0cmVhbV9mZCA9IF9fcGVyZl9vcGVuKGRybV9mZCwgJnBhcmFtLCBmYWxzZSk7 CiAKLQlkcm1faW50ZWxfYnVmbWdyX2dlbV9lbmFibGVfcmV1c2UoYnVmbWdyKTsKLQotCWNvbnRl eHQgPSBkcm1faW50ZWxfZ2VtX2NvbnRleHRfY3JlYXRlKGJ1Zm1ncik7Ci0JaWd0X2Fzc2VydChj b250ZXh0KTsKKwljdHhfaWQgPSBnZW1fY29udGV4dF9jcmVhdGUoZHJtX2ZkKTsKIAotCWJhdGNo ID0gaW50ZWxfYmF0Y2hidWZmZXJfYWxsb2MoYnVmbWdyLCBkZXZpZCk7CisJaWJiID0gaW50ZWxf YmJfY3JlYXRlKGRybV9mZCwgQkFUQ0hfU1opOworCWJ1ZiA9IGludGVsX2J1Zl9jcmVhdGUoYm9w cywgNDA5NiwgMSwgOCwgNjQsCisJCQkgICAgICAgSTkxNV9USUxJTkdfTk9ORSwgSTkxNV9DT01Q UkVTU0lPTl9OT05FKTsKIAotCWJvID0gZHJtX2ludGVsX2JvX2FsbG9jKGJ1Zm1nciwgIm1pX3Jw YyBkZXN0IGJvIiwgNDA5NiwgNjQpOworCWludGVsX2J1Zl9jcHVfbWFwKGJ1ZiwgdHJ1ZSk7CisJ bWVtc2V0KGJ1Zi0+cHRyLCAweDgwLCA0MDk2KTsKKwlpbnRlbF9idWZfdW5tYXAoYnVmKTsKIAot CXJldCA9IGRybV9pbnRlbF9ib19tYXAoYm8sIHRydWUpOwotCWlndF9hc3NlcnRfZXEocmV0LCAw KTsKLQotCW1lbXNldChiby0+dmlydHVhbCwgMHg4MCwgNDA5Nik7Ci0JZHJtX2ludGVsX2JvX3Vu bWFwKGJvKTsKLQotCWVtaXRfcmVwb3J0X3BlcmZfY291bnQoYmF0Y2gsCi0JCQkgICAgICAgYm8s IC8qIGRzdCAqLworCWVtaXRfcmVwb3J0X3BlcmZfY291bnQoaWJiLAorCQkJICAgICAgIGJ1Ziwg LyogZHN0ICovCiAJCQkgICAgICAgMCwgLyogZHN0IG9mZnNldCBpbiBieXRlcyAqLwogCQkJICAg ICAgIDB4ZGVhZGJlZWYpOyAvKiByZXBvcnQgSUQgKi8KIAotCWludGVsX2JhdGNoYnVmZmVyX2Zs dXNoX3dpdGhfY29udGV4dChiYXRjaCwgY29udGV4dCk7Ci0KLQlyZXQgPSBkcm1faW50ZWxfYm9f bWFwKGJvLCBmYWxzZSAvKiB3cml0ZSBlbmFibGUgKi8pOwotCWlndF9hc3NlcnRfZXEocmV0LCAw KTsKKwlpbnRlbF9iYl9mbHVzaF9yZW5kZXJfd2l0aF9jb250ZXh0KGliYiwgY3R4X2lkKTsKKwlp bnRlbF9iYl9zeW5jKGliYik7CiAKLQlyZXBvcnQzMiA9IGJvLT52aXJ0dWFsOworCWludGVsX2J1 Zl9jcHVfbWFwKGJ1ZiwgZmFsc2UpOworCXJlcG9ydDMyID0gYnVmLT5wdHI7CiAJZHVtcF9yZXBv cnQocmVwb3J0MzIsIDY0LCAibWktcnBjIik7CiAJaWd0X2Fzc2VydF9lcShyZXBvcnQzMlswXSwg MHhkZWFkYmVlZik7IC8qIHJlcG9ydCBJRCAqLwogCWlndF9hc3NlcnRfbmVxKHJlcG9ydDMyWzFd LCAwKTsgLyogdGltZXN0YW1wICovCkBAIC0zMDc2LDE3ICszMDA3LDE3IEBAIHRlc3RfbWlfcnBj KHZvaWQpCiAJaWd0X2Fzc2VydF9uZXEocmVwb3J0MzJbNjNdLCAweDgwODA4MDgwKTsgLyogZW5k IG9mIHJlcG9ydCAqLwogCWlndF9hc3NlcnRfZXEocmVwb3J0MzJbNjRdLCAweDgwODA4MDgwKTsg LyogYWZ0ZXIgMjU2IGJ5dGUgcmVwb3J0ICovCiAKLQlkcm1faW50ZWxfYm9fdW5tYXAoYm8pOwot CWRybV9pbnRlbF9ib191bnJlZmVyZW5jZShibyk7Ci0JaW50ZWxfYmF0Y2hidWZmZXJfZnJlZShi YXRjaCk7Ci0JZHJtX2ludGVsX2dlbV9jb250ZXh0X2Rlc3Ryb3koY29udGV4dCk7Ci0JZHJtX2lu dGVsX2J1Zm1ncl9kZXN0cm95KGJ1Zm1ncik7CisJaW50ZWxfYnVmX3VubWFwKGJ1Zik7CisJaW50 ZWxfYnVmX2Rlc3Ryb3koYnVmKTsKKwlpbnRlbF9iYl9kZXN0cm95KGliYik7CisJZ2VtX2NvbnRl eHRfZGVzdHJveShkcm1fZmQsIGN0eF9pZCk7CisJYnVmX29wc19kZXN0cm95KGJvcHMpOwogCV9f cGVyZl9jbG9zZShzdHJlYW1fZmQpOwogfQogCiBzdGF0aWMgdm9pZAotZW1pdF9zdGFsbF90aW1l c3RhbXBfYW5kX3JwYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkJICAgICBk cm1faW50ZWxfYm8gKmRzdCwKK2VtaXRfc3RhbGxfdGltZXN0YW1wX2FuZF9ycGMoc3RydWN0IGlu dGVsX2JiICppYmIsCisJCQkgICAgIHN0cnVjdCBpbnRlbF9idWYgKmRzdCwKIAkJCSAgICAgaW50 IHRpbWVzdGFtcF9vZmZzZXQsCiAJCQkgICAgIGludCByZXBvcnRfZHN0X29mZnNldCwKIAkJCSAg ICAgdWludDMyX3QgcmVwb3J0X2lkKQpAQCAtMzA5NSwyNyArMzAyNiwxOSBAQCBlbWl0X3N0YWxs X3RpbWVzdGFtcF9hbmRfcnBjKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCiAJCQkJ ICAgUElQRV9DT05UUk9MX1JFTkRFUl9UQVJHRVRfRkxVU0ggfAogCQkJCSAgIFBJUEVfQ09OVFJP TF9XUklURV9USU1FU1RBTVApOwogCi0JaWYgKGludGVsX2dlbihkZXZpZCkgPj0gOCkgewotCQlC RUdJTl9CQVRDSCg1LCAxKTsKLQkJT1VUX0JBVENIKEdGWF9PUF9QSVBFX0NPTlRST0wgfCAoNiAt IDIpKTsKLQkJT1VUX0JBVENIKHBpcGVfY3RsX2ZsYWdzKTsKLQkJT1VUX1JFTE9DKGRzdCwgSTkx NV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sCi0J CQkgIHRpbWVzdGFtcF9vZmZzZXQpOwotCQlPVVRfQkFUQ0goMCk7IC8qIGltbSBsb3dlciAqLwot CQlPVVRfQkFUQ0goMCk7IC8qIGltbSB1cHBlciAqLwotCQlBRFZBTkNFX0JBVENIKCk7Ci0JfSBl bHNlIHsKLQkJQkVHSU5fQkFUQ0goNSwgMSk7Ci0JCU9VVF9CQVRDSChHRlhfT1BfUElQRV9DT05U Uk9MIHwgKDUgLSAyKSk7Ci0JCU9VVF9CQVRDSChwaXBlX2N0bF9mbGFncyk7Ci0JCU9VVF9SRUxP Qyhkc3QsIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgSTkxNV9HRU1fRE9NQUlOX0lOU1RS VUNUSU9OLAotCQkJICB0aW1lc3RhbXBfb2Zmc2V0KTsKLQkJT1VUX0JBVENIKDApOyAvKiBpbW0g bG93ZXIgKi8KLQkJT1VUX0JBVENIKDApOyAvKiBpbW0gdXBwZXIgKi8KLQkJQURWQU5DRV9CQVRD SCgpOwotCX0KKwlpZiAoaW50ZWxfZ2VuKGRldmlkKSA+PSA4KQorCQlpbnRlbF9iYl9vdXQoaWJi LCBHRlhfT1BfUElQRV9DT05UUk9MIHwgKDYgLSAyKSk7CisJZWxzZQorCQlpbnRlbF9iYl9vdXQo aWJiLCBHRlhfT1BfUElQRV9DT05UUk9MIHwgKDUgLSAyKSk7CisKKwlpbnRlbF9iYl9vdXQoaWJi LCBwaXBlX2N0bF9mbGFncyk7CisJaW50ZWxfYmJfZW1pdF9yZWxvYyhpYmIsIGRzdC0+aGFuZGxl LAorCQkJICAgIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgSTkxNV9HRU1fRE9NQUlOX0lO U1RSVUNUSU9OLAorCQkJICAgIHRpbWVzdGFtcF9vZmZzZXQsIGRzdC0+YWRkci5vZmZzZXQpOwor CWludGVsX2JiX291dChpYmIsIDApOyAvKiBpbW0gbG93ZXIgKi8KKwlpbnRlbF9iYl9vdXQoaWJi LCAwKTsgLyogaW1tIHVwcGVyICovCiAKLQllbWl0X3JlcG9ydF9wZXJmX2NvdW50KGJhdGNoLCBk c3QsIHJlcG9ydF9kc3Rfb2Zmc2V0LCByZXBvcnRfaWQpOworCWVtaXRfcmVwb3J0X3BlcmZfY291 bnQoaWJiLCBkc3QsIHJlcG9ydF9kc3Rfb2Zmc2V0LCByZXBvcnRfaWQpOwogfQogCiAvKiBUZXN0 cyB0aGUgSU5URUxfcGVyZm9ybWFuY2VfcXVlcnkgdXNlIGNhc2Ugd2hlcmUgYW4gdW5wcml2aWxl Z2VkIHByb2Nlc3MKQEAgLTMxNTYsMTEgKzMwNzksMTAgQEAgaHN3X3Rlc3Rfc2luZ2xlX2N0eF9j b3VudGVycyh2b2lkKQogCXdyaXRlX3U2NF9maWxlKCIvcHJvYy9zeXMvZGV2L2k5MTUvcGVyZl9z dHJlYW1fcGFyYW5vaWQiLCAxKTsKIAogCWlndF9mb3JrKGNoaWxkLCAxKSB7Ci0JCWRybV9pbnRl bF9idWZtZ3IgKmJ1Zm1ncjsKLQkJZHJtX2ludGVsX2NvbnRleHQgKmNvbnRleHQwLCAqY29udGV4 dDE7Ci0JCXN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2g7Ci0JCXN0cnVjdCBpZ3RfYnVm IHNyY1szXSwgZHN0WzNdOwotCQlkcm1faW50ZWxfYm8gKmJvOworCQlzdHJ1Y3QgYnVmX29wcyAq Ym9wczsKKwkJc3RydWN0IGludGVsX2J1ZiBzcmNbM10sIGRzdFszXSwgKmRzdF9idWY7CisJCXN0 cnVjdCBpbnRlbF9iYiAqaWJiMCwgKmliYjE7CisJCXVpbnQzMl90IGNvbnRleHQwX2lkLCBjb250 ZXh0MV9pZDsKIAkJdWludDMyX3QgKnJlcG9ydDBfMzIsICpyZXBvcnQxXzMyOwogCQl1aW50NjRf dCB0aW1lc3RhbXAwXzY0LCB0aW1lc3RhbXAxXzY0OwogCQl1aW50MzJfdCBkZWx0YV90czY0LCBk ZWx0YV9vYTMyOwpAQCAtMzE2OSwyNiArMzA5MSwyNCBAQCBoc3dfdGVzdF9zaW5nbGVfY3R4X2Nv dW50ZXJzKHZvaWQpCiAJCWludCBuX3NhbXBsZXNfd3JpdHRlbjsKIAkJaW50IHdpZHRoID0gODAw OwogCQlpbnQgaGVpZ2h0ID0gNjAwOwotCQl1aW50MzJfdCBjdHhfaWQgPSAweGZmZmZmZmZmOyAv KiBpbnZhbGlkIGlkICovCi0JCWludCByZXQ7CiAKIAkJaWd0X2Ryb3Bfcm9vdCgpOwogCi0JCWJ1 Zm1nciA9IGRybV9pbnRlbF9idWZtZ3JfZ2VtX2luaXQoZHJtX2ZkLCA0MDk2KTsKLQkJZHJtX2lu dGVsX2J1Zm1ncl9nZW1fZW5hYmxlX3JldXNlKGJ1Zm1ncik7CisJCWJvcHMgPSBidWZfb3BzX2Ny ZWF0ZShkcm1fZmQpOwogCiAJCWZvciAoaW50IGkgPSAwOyBpIDwgQVJSQVlfU0laRShzcmMpOyBp KyspIHsKLQkJCXNjcmF0Y2hfYnVmX2luaXQoYnVmbWdyLCAmc3JjW2ldLCB3aWR0aCwgaGVpZ2h0 LCAweGZmMDAwMGZmKTsKLQkJCXNjcmF0Y2hfYnVmX2luaXQoYnVmbWdyLCAmZHN0W2ldLCB3aWR0 aCwgaGVpZ2h0LCAweDAwZmYwMGZmKTsKKwkJCXNjcmF0Y2hfYnVmX2luaXQoYm9wcywgJnNyY1tp XSwgd2lkdGgsIGhlaWdodCwgMHhmZjAwMDBmZik7CisJCQlzY3JhdGNoX2J1Zl9pbml0KGJvcHMs ICZkc3RbaV0sIHdpZHRoLCBoZWlnaHQsIDB4MDBmZjAwZmYpOwogCQl9CiAKLQkJYmF0Y2ggPSBp bnRlbF9iYXRjaGJ1ZmZlcl9hbGxvYyhidWZtZ3IsIGRldmlkKTsKLQotCQljb250ZXh0MCA9IGRy bV9pbnRlbF9nZW1fY29udGV4dF9jcmVhdGUoYnVmbWdyKTsKLQkJaWd0X2Fzc2VydChjb250ZXh0 MCk7Ci0KLQkJY29udGV4dDEgPSBkcm1faW50ZWxfZ2VtX2NvbnRleHRfY3JlYXRlKGJ1Zm1ncik7 Ci0JCWlndF9hc3NlcnQoY29udGV4dDEpOworCQkvKgorCQkgKiBXZSBjdXJyZW50bHkgY2FjaGUg YWRkcmVzc2VzIGZvciBidWZmZXJzIHdpdGhpbgorCQkgKiBpbnRlbF9iYiwgc28gdXNlIHNlcGFy YXRlIGJhdGNoZXMgZm9yIGRpZmZlcmVudCBjb250ZXh0cworCQkgKi8KKwkJaWJiMCA9IGludGVs X2JiX2NyZWF0ZShkcm1fZmQsIEJBVENIX1NaKTsKKwkJaWJiMSA9IGludGVsX2JiX2NyZWF0ZShk cm1fZmQsIEJBVENIX1NaKTsKKwkJY29udGV4dDBfaWQgPSBnZW1fY29udGV4dF9jcmVhdGUoZHJt X2ZkKTsKKwkJY29udGV4dDFfaWQgPSBnZW1fY29udGV4dF9jcmVhdGUoZHJtX2ZkKTsKIAogCQlp Z3RfZGVidWcoInN1Ym1pdHRpbmcgd2FybSB1cCByZW5kZXJfY29weVxuIik7CiAKQEAgLTMyMTIs MzQgKzMxMzIsMzIgQEAgaHN3X3Rlc3Rfc2luZ2xlX2N0eF9jb3VudGVycyh2b2lkKQogCQkgKiB1 cCBwaW5uaW5nIHRoZSBjb250ZXh0IHNpbmNlIHRoZXJlIHdvbid0IGV2ZXIgYmUgYSBwaW5uaW5n CiAJCSAqIGhvb2sgY2FsbGJhY2suCiAJCSAqLwotCQlyZW5kZXJfY29weShiYXRjaCwKLQkJCSAg ICBjb250ZXh0MCwKKwkJcmVuZGVyX2NvcHkoaWJiMCwKKwkJCSAgICBjb250ZXh0MF9pZCwKIAkJ CSAgICAmc3JjWzBdLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LAogCQkJICAgICZkc3RbMF0sIDAsIDAp OwogCi0JCXJldCA9IGRybV9pbnRlbF9nZW1fY29udGV4dF9nZXRfaWQoY29udGV4dDAsICZjdHhf aWQpOwotCQlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7Ci0JCWlndF9hc3NlcnRfbmVxKGN0eF9pZCwg MHhmZmZmZmZmZik7Ci0JCXByb3BlcnRpZXNbMV0gPSBjdHhfaWQ7CisJCXByb3BlcnRpZXNbMV0g PSBjb250ZXh0MF9pZDsKIAotCQlpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaF93aXRoX2NvbnRleHQo YmF0Y2gsIGNvbnRleHQwKTsKKwkJaW50ZWxfYmJfZmx1c2hfcmVuZGVyX3dpdGhfY29udGV4dChp YmIwLCBjb250ZXh0MF9pZCk7CisJCWludGVsX2JiX3N5bmMoaWJiMCk7CiAKLQkJc2NyYXRjaF9i dWZfbWVtc2V0KHNyY1swXS5ibywgd2lkdGgsIGhlaWdodCwgMHhmZjAwMDBmZik7Ci0JCXNjcmF0 Y2hfYnVmX21lbXNldChkc3RbMF0uYm8sIHdpZHRoLCBoZWlnaHQsIDB4MDBmZjAwZmYpOworCQlz Y3JhdGNoX2J1Zl9tZW1zZXQoJnNyY1swXSwgd2lkdGgsIGhlaWdodCwgMHhmZjAwMDBmZik7CisJ CXNjcmF0Y2hfYnVmX21lbXNldCgmZHN0WzBdLCB3aWR0aCwgaGVpZ2h0LCAweDAwZmYwMGZmKTsK IAogCQlpZ3RfZGVidWcoIm9wZW5pbmcgaTkxNS1wZXJmIHN0cmVhbVxuIik7CiAJCXN0cmVhbV9m ZCA9IF9fcGVyZl9vcGVuKGRybV9mZCwgJnBhcmFtLCBmYWxzZSk7CiAKLQkJYm8gPSBkcm1faW50 ZWxfYm9fYWxsb2MoYnVmbWdyLCAibWlfcnBjIGRlc3QgYm8iLCA0MDk2LCA2NCk7Ci0KLQkJcmV0 ID0gZHJtX2ludGVsX2JvX21hcChibywgdHJ1ZSAvKiB3cml0ZSBlbmFibGUgKi8pOwotCQlpZ3Rf YXNzZXJ0X2VxKHJldCwgMCk7CisJCWRzdF9idWYgPSBpbnRlbF9idWZfY3JlYXRlKGJvcHMsIDQw OTYsIDEsIDgsIDY0LAorCQkJCQkgICBJOTE1X1RJTElOR19OT05FLAorCQkJCQkgICBJOTE1X0NP TVBSRVNTSU9OX05PTkUpOwogCi0JCW1lbXNldChiby0+dmlydHVhbCwgMHg4MCwgNDA5Nik7Ci0J CWRybV9pbnRlbF9ib191bm1hcChibyk7CisJCWludGVsX2J1Zl9jcHVfbWFwKGRzdF9idWYsIHRy dWUgLyogd3JpdGUgZW5hYmxlICovKTsKKwkJbWVtc2V0KGRzdF9idWYtPnB0ciwgMHg4MCwgNDA5 Nik7CisJCWludGVsX2J1Zl91bm1hcChkc3RfYnVmKTsKIAotCQllbWl0X3N0YWxsX3RpbWVzdGFt cF9hbmRfcnBjKGJhdGNoLAotCQkJCQkgICAgIGJvLAorCQllbWl0X3N0YWxsX3RpbWVzdGFtcF9h bmRfcnBjKGliYjAsCisJCQkJCSAgICAgZHN0X2J1ZiwKIAkJCQkJICAgICA1MTIgLyogdGltZXN0 YW1wIG9mZnNldCAqLywKIAkJCQkJICAgICAwLCAvKiByZXBvcnQgZHN0IG9mZnNldCAqLwogCQkJ CQkgICAgIDB4ZGVhZGJlZWYpOyAvKiByZXBvcnQgaWQgKi8KQEAgLTMyNDksNDUgKzMxNjcsNDUg QEAgaHN3X3Rlc3Rfc2luZ2xlX2N0eF9jb3VudGVycyh2b2lkKQogCQkgKiB0aGF0IHRoZSBQSVBF X0NPTlRST0wgKyBNSV9SUEMgY29tbWFuZHMgd2lsbCBiZSBpbiBhCiAJCSAqIHNlcGFyYXRlIGJh dGNoIGZyb20gdGhlIGNvcHkuCiAJCSAqLwotCQlpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaF93aXRo X2NvbnRleHQoYmF0Y2gsIGNvbnRleHQwKTsKKwkJaW50ZWxfYmJfZmx1c2hfcmVuZGVyX3dpdGhf Y29udGV4dChpYmIwLCBjb250ZXh0MF9pZCk7CiAKLQkJcmVuZGVyX2NvcHkoYmF0Y2gsCi0JCQkg ICAgY29udGV4dDAsCisJCXJlbmRlcl9jb3B5KGliYjAsCisJCQkgICAgY29udGV4dDBfaWQsCiAJ CQkgICAgJnNyY1swXSwgMCwgMCwgd2lkdGgsIGhlaWdodCwKIAkJCSAgICAmZHN0WzBdLCAwLCAw KTsKIAogCQkvKiBBbm90aGVyIHJlZHVuZGFudCBmbHVzaCB0byBjbGFyaWZ5IGJhdGNoIGJvIGlz IGZyZWUgdG8gcmV1c2UgKi8KLQkJaW50ZWxfYmF0Y2hidWZmZXJfZmx1c2hfd2l0aF9jb250ZXh0 KGJhdGNoLCBjb250ZXh0MCk7CisJCWludGVsX2JiX2ZsdXNoX3JlbmRlcl93aXRoX2NvbnRleHQo aWJiMCwgY29udGV4dDBfaWQpOwogCiAJCS8qIHN1Ym1pdCB0d28gY29waWVzIG9uIHRoZSBvdGhl ciBjb250ZXh0IHRvIGF2b2lkIGEgZmFsc2UKIAkJICogcG9zaXRpdmUgaW4gY2FzZSB0aGUgZHJp dmVyIHNvbWVob3cgZW5kZWQgdXAgZmlsdGVyaW5nIGZvcgogCQkgKiBjb250ZXh0MQogCQkgKi8K LQkJcmVuZGVyX2NvcHkoYmF0Y2gsCi0JCQkgICAgY29udGV4dDEsCisJCXJlbmRlcl9jb3B5KGli YjEsCisJCQkgICAgY29udGV4dDFfaWQsCiAJCQkgICAgJnNyY1sxXSwgMCwgMCwgd2lkdGgsIGhl aWdodCwKIAkJCSAgICAmZHN0WzFdLCAwLCAwKTsKIAotCQlyZW5kZXJfY29weShiYXRjaCwKLQkJ CSAgICBjb250ZXh0MSwKKwkJcmVuZGVyX2NvcHkoaWJiMSwKKwkJCSAgICBjb250ZXh0MV9pZCwK IAkJCSAgICAmc3JjWzJdLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LAogCQkJICAgICZkc3RbMl0sIDAs IDApOwogCiAJCS8qIEFuZCBhbm90aGVyICovCi0JCWludGVsX2JhdGNoYnVmZmVyX2ZsdXNoX3dp dGhfY29udGV4dChiYXRjaCwgY29udGV4dDEpOworCQlpbnRlbF9iYl9mbHVzaF9yZW5kZXJfd2l0 aF9jb250ZXh0KGliYjEsIGNvbnRleHQxX2lkKTsKIAotCQllbWl0X3N0YWxsX3RpbWVzdGFtcF9h bmRfcnBjKGJhdGNoLAotCQkJCQkgICAgIGJvLAorCQllbWl0X3N0YWxsX3RpbWVzdGFtcF9hbmRf cnBjKGliYjAsCisJCQkJCSAgICAgZHN0X2J1ZiwKIAkJCQkJICAgICA1MjAgLyogdGltZXN0YW1w IG9mZnNldCAqLywKIAkJCQkJICAgICAyNTYsIC8qIHJlcG9ydCBkc3Qgb2Zmc2V0ICovCiAJCQkJ CSAgICAgMHhiZWVmYmVlZik7IC8qIHJlcG9ydCBpZCAqLwogCi0JCWludGVsX2JhdGNoYnVmZmVy X2ZsdXNoX3dpdGhfY29udGV4dChiYXRjaCwgY29udGV4dDApOworCQlpbnRlbF9iYl9mbHVzaF9y ZW5kZXJfd2l0aF9jb250ZXh0KGliYjAsIGNvbnRleHQwX2lkKTsKKwkJaW50ZWxfYmJfc3luYyhp YmIwKTsKIAotCQlyZXQgPSBkcm1faW50ZWxfYm9fbWFwKGJvLCBmYWxzZSAvKiB3cml0ZSBlbmFi bGUgKi8pOwotCQlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7CisJCWludGVsX2J1Zl9jcHVfbWFwKGRz dF9idWYsIGZhbHNlIC8qIHdyaXRlIGVuYWJsZSAqLyk7CiAKLQkJcmVwb3J0MF8zMiA9IGJvLT52 aXJ0dWFsOworCQlyZXBvcnQwXzMyID0gZHN0X2J1Zi0+cHRyOwogCQlpZ3RfYXNzZXJ0X2VxKHJl cG9ydDBfMzJbMF0sIDB4ZGVhZGJlZWYpOyAvKiByZXBvcnQgSUQgKi8KIAkJaWd0X2Fzc2VydF9u ZXEocmVwb3J0MF8zMlsxXSwgMCk7IC8qIHRpbWVzdGFtcCAqLwogCkBAIC0zMzA3LDggKzMyMjUs OCBAQCBoc3dfdGVzdF9zaW5nbGVfY3R4X2NvdW50ZXJzKHZvaWQpCiAJCWlndF9kZWJ1ZygidGlt ZXN0YW1wMzIgMCA9ICV1XG4iLCByZXBvcnQwXzMyWzFdKTsKIAkJaWd0X2RlYnVnKCJ0aW1lc3Rh bXAzMiAxID0gJXVcbiIsIHJlcG9ydDFfMzJbMV0pOwogCi0JCXRpbWVzdGFtcDBfNjQgPSAqKHVp bnQ2NF90ICopKCgodWludDhfdCAqKWJvLT52aXJ0dWFsKSArIDUxMik7Ci0JCXRpbWVzdGFtcDFf NjQgPSAqKHVpbnQ2NF90ICopKCgodWludDhfdCAqKWJvLT52aXJ0dWFsKSArIDUyMCk7CisJCXRp bWVzdGFtcDBfNjQgPSAqKHVpbnQ2NF90ICopKCgodWludDhfdCAqKWRzdF9idWYtPnB0cikgKyA1 MTIpOworCQl0aW1lc3RhbXAxXzY0ID0gKih1aW50NjRfdCAqKSgoKHVpbnQ4X3QgKilkc3RfYnVm LT5wdHIpICsgNTIwKTsKIAogCQlpZ3RfZGVidWcoInRpbWVzdGFtcDY0IDAgPSAlIlBSSXU2NCJc biIsIHRpbWVzdGFtcDBfNjQpOwogCQlpZ3RfZGVidWcoInRpbWVzdGFtcDY0IDEgPSAlIlBSSXU2 NCJcbiIsIHRpbWVzdGFtcDFfNjQpOwpAQCAtMzMzNiwxNiArMzI1NCwxNyBAQCBoc3dfdGVzdF9z aW5nbGVfY3R4X2NvdW50ZXJzKHZvaWQpCiAJCWlndF9hc3NlcnQoZGVsdGFfZGVsdGEgPD0gMzIw KTsKIAogCQlmb3IgKGludCBpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3JjKTsgaSsrKSB7Ci0JCQlk cm1faW50ZWxfYm9fdW5yZWZlcmVuY2Uoc3JjW2ldLmJvKTsKLQkJCWRybV9pbnRlbF9ib191bnJl ZmVyZW5jZShkc3RbaV0uYm8pOworCQkJaW50ZWxfYnVmX2Nsb3NlKGJvcHMsICZzcmNbaV0pOwor CQkJaW50ZWxfYnVmX2Nsb3NlKGJvcHMsICZkc3RbaV0pOwogCQl9CiAKLQkJZHJtX2ludGVsX2Jv X3VubWFwKGJvKTsKLQkJZHJtX2ludGVsX2JvX3VucmVmZXJlbmNlKGJvKTsKLQkJaW50ZWxfYmF0 Y2hidWZmZXJfZnJlZShiYXRjaCk7Ci0JCWRybV9pbnRlbF9nZW1fY29udGV4dF9kZXN0cm95KGNv bnRleHQwKTsKLQkJZHJtX2ludGVsX2dlbV9jb250ZXh0X2Rlc3Ryb3koY29udGV4dDEpOwotCQlk cm1faW50ZWxfYnVmbWdyX2Rlc3Ryb3koYnVmbWdyKTsKKwkJaW50ZWxfYnVmX3VubWFwKGRzdF9i dWYpOworCQlpbnRlbF9idWZfZGVzdHJveShkc3RfYnVmKTsKKwkJaW50ZWxfYmJfZGVzdHJveShp YmIwKTsKKwkJaW50ZWxfYmJfZGVzdHJveShpYmIxKTsKKwkJZ2VtX2NvbnRleHRfZGVzdHJveShk cm1fZmQsIGNvbnRleHQwX2lkKTsKKwkJZ2VtX2NvbnRleHRfZGVzdHJveShkcm1fZmQsIGNvbnRl eHQxX2lkKTsKKwkJYnVmX29wc19kZXN0cm95KGJvcHMpOwogCQlfX3BlcmZfY2xvc2Uoc3RyZWFt X2ZkKTsKIAl9CiAKQEAgLTM0MDYsMTEgKzMzMjUsMTAgQEAgZ2VuOF90ZXN0X3NpbmdsZV9jdHhf cmVuZGVyX3RhcmdldF93cml0ZXNfYV9jb3VudGVyKHZvaWQpCiAKIAkJaWd0X2ZvcmtfaGVscGVy KCZjaGlsZCkgewogCQkJc3RydWN0IGRybV9pOTE1X3BlcmZfcmVjb3JkX2hlYWRlciAqaGVhZGVy OwotCQkJZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyOwotCQkJZHJtX2ludGVsX2NvbnRleHQgKmNv bnRleHQwLCAqY29udGV4dDE7Ci0JCQlzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoOwot CQkJc3RydWN0IGlndF9idWYgc3JjWzNdLCBkc3RbM107Ci0JCQlkcm1faW50ZWxfYm8gKmJvOwor CQkJc3RydWN0IGJ1Zl9vcHMgKmJvcHM7CisJCQlzdHJ1Y3QgaW50ZWxfYmIgKmliYjAsICppYmIx OworCQkJc3RydWN0IGludGVsX2J1ZiBzcmNbM10sIGRzdFszXSwgKmRzdF9idWY7CisJCQl1aW50 MzJfdCBjb250ZXh0MF9pZCwgY29udGV4dDFfaWQ7CiAJCQl1aW50MzJfdCAqcmVwb3J0MF8zMiwg KnJlcG9ydDFfMzI7CiAJCQl1aW50MzJfdCAqcHJldiwgKmxwcmV2ID0gTlVMTDsKIAkJCXVpbnQ2 NF90IHRpbWVzdGFtcDBfNjQsIHRpbWVzdGFtcDFfNjQ7CkBAIC0zNDI4LDIxICszMzQ2LDE3IEBA IGdlbjhfdGVzdF9zaW5nbGVfY3R4X3JlbmRlcl90YXJnZXRfd3JpdGVzX2FfY291bnRlcih2b2lk KQogCQkJCS5mb3JtYXQgPSB0ZXN0X3NldC0+cGVyZl9vYV9mb3JtYXQKIAkJCX07CiAKLQkJCWJ1 Zm1nciA9IGRybV9pbnRlbF9idWZtZ3JfZ2VtX2luaXQoZHJtX2ZkLCA0MDk2KTsKLQkJCWRybV9p bnRlbF9idWZtZ3JfZ2VtX2VuYWJsZV9yZXVzZShidWZtZ3IpOworCQkJYm9wcyA9IGJ1Zl9vcHNf Y3JlYXRlKGRybV9mZCk7CiAKIAkJCWZvciAoaW50IGkgPSAwOyBpIDwgQVJSQVlfU0laRShzcmMp OyBpKyspIHsKLQkJCQlzY3JhdGNoX2J1Zl9pbml0KGJ1Zm1nciwgJnNyY1tpXSwgd2lkdGgsIGhl aWdodCwgMHhmZjAwMDBmZik7Ci0JCQkJc2NyYXRjaF9idWZfaW5pdChidWZtZ3IsICZkc3RbaV0s IHdpZHRoLCBoZWlnaHQsIDB4MDBmZjAwZmYpOworCQkJCXNjcmF0Y2hfYnVmX2luaXQoYm9wcywg JnNyY1tpXSwgd2lkdGgsIGhlaWdodCwgMHhmZjAwMDBmZik7CisJCQkJc2NyYXRjaF9idWZfaW5p dChib3BzLCAmZHN0W2ldLCB3aWR0aCwgaGVpZ2h0LCAweDAwZmYwMGZmKTsKIAkJCX0KIAotCQkJ YmF0Y2ggPSBpbnRlbF9iYXRjaGJ1ZmZlcl9hbGxvYyhidWZtZ3IsIGRldmlkKTsKLQotCQkJY29u dGV4dDAgPSBkcm1faW50ZWxfZ2VtX2NvbnRleHRfY3JlYXRlKGJ1Zm1ncik7Ci0JCQlpZ3RfYXNz ZXJ0KGNvbnRleHQwKTsKLQotCQkJY29udGV4dDEgPSBkcm1faW50ZWxfZ2VtX2NvbnRleHRfY3Jl YXRlKGJ1Zm1ncik7Ci0JCQlpZ3RfYXNzZXJ0KGNvbnRleHQxKTsKKwkJCWliYjAgPSBpbnRlbF9i Yl9jcmVhdGUoZHJtX2ZkLCBCQVRDSF9TWik7CisJCQlpYmIxID0gaW50ZWxfYmJfY3JlYXRlKGRy bV9mZCwgQkFUQ0hfU1opOworCQkJY29udGV4dDBfaWQgPSBnZW1fY29udGV4dF9jcmVhdGUoZHJt X2ZkKTsKKwkJCWNvbnRleHQxX2lkID0gZ2VtX2NvbnRleHRfY3JlYXRlKGRybV9mZCk7CiAKIAkJ CWlndF9kZWJ1Zygic3VibWl0dGluZyB3YXJtIHVwIHJlbmRlcl9jb3B5XG4iKTsKIApAQCAtMzQ2 NiwzMiArMzM4MCwzMCBAQCBnZW44X3Rlc3Rfc2luZ2xlX2N0eF9yZW5kZXJfdGFyZ2V0X3dyaXRl c19hX2NvdW50ZXIodm9pZCkKIAkJCSAqIHVwIHBpbm5pbmcgdGhlIGNvbnRleHQgc2luY2UgdGhl cmUgd29uJ3QgZXZlciBiZSBhIHBpbm5pbmcKIAkJCSAqIGhvb2sgY2FsbGJhY2suCiAJCQkgKi8K LQkJCXJlbmRlcl9jb3B5KGJhdGNoLAotCQkJCSAgICBjb250ZXh0MCwKKwkJCXJlbmRlcl9jb3B5 KGliYjAsCisJCQkJICAgIGNvbnRleHQwX2lkLAogCQkJCSAgICAmc3JjWzBdLCAwLCAwLCB3aWR0 aCwgaGVpZ2h0LAogCQkJCSAgICAmZHN0WzBdLCAwLCAwKTsKKwkJCWludGVsX2JiX3N5bmMoaWJi MCk7CiAKLQkJCXJldCA9IGRybV9pbnRlbF9nZW1fY29udGV4dF9nZXRfaWQoY29udGV4dDAsICZj dHhfaWQpOwotCQkJaWd0X2Fzc2VydF9lcShyZXQsIDApOwotCQkJaWd0X2Fzc2VydF9uZXEoY3R4 X2lkLCAweGZmZmZmZmZmKTsKLQkJCXByb3BlcnRpZXNbMV0gPSBjdHhfaWQ7CisJCQlwcm9wZXJ0 aWVzWzFdID0gY29udGV4dDBfaWQ7CiAKLQkJCXNjcmF0Y2hfYnVmX21lbXNldChzcmNbMF0uYm8s IHdpZHRoLCBoZWlnaHQsIDB4ZmYwMDAwZmYpOwotCQkJc2NyYXRjaF9idWZfbWVtc2V0KGRzdFsw XS5ibywgd2lkdGgsIGhlaWdodCwgMHgwMGZmMDBmZik7CisJCQlzY3JhdGNoX2J1Zl9tZW1zZXQo JnNyY1swXSwgd2lkdGgsIGhlaWdodCwgMHhmZjAwMDBmZik7CisJCQlzY3JhdGNoX2J1Zl9tZW1z ZXQoJmRzdFswXSwgd2lkdGgsIGhlaWdodCwgMHgwMGZmMDBmZik7CiAKIAkJCWlndF9kZWJ1Zygi b3BlbmluZyBpOTE1LXBlcmYgc3RyZWFtXG4iKTsKIAkJCXN0cmVhbV9mZCA9IF9fcGVyZl9vcGVu KGRybV9mZCwgJnBhcmFtLCBmYWxzZSk7CiAKLQkJCWJvID0gZHJtX2ludGVsX2JvX2FsbG9jKGJ1 Zm1nciwgIm1pX3JwYyBkZXN0IGJvIiwgNDA5NiwgNjQpOwotCi0JCQlyZXQgPSBkcm1faW50ZWxf Ym9fbWFwKGJvLCB0cnVlIC8qIHdyaXRlIGVuYWJsZSAqLyk7Ci0JCQlpZ3RfYXNzZXJ0X2VxKHJl dCwgMCk7CisJCQlkc3RfYnVmID0gaW50ZWxfYnVmX2NyZWF0ZShib3BzLCA0MDk2LCAxLCA4LCA2 NCwKKwkJCQkJCSAgIEk5MTVfVElMSU5HX05PTkUsCisJCQkJCQkgICBJOTE1X0NPTVBSRVNTSU9O X05PTkUpOwogCi0JCQltZW1zZXQoYm8tPnZpcnR1YWwsIDB4ODAsIDQwOTYpOwotCQkJZHJtX2lu dGVsX2JvX3VubWFwKGJvKTsKKwkJCWludGVsX2J1Zl9jcHVfbWFwKGRzdF9idWYsIHRydWUgLyog d3JpdGUgZW5hYmxlICovKTsKKwkJCW1lbXNldChkc3RfYnVmLT5wdHIsIDB4ODAsIDQwOTYpOwor CQkJaW50ZWxfYnVmX3VubWFwKGRzdF9idWYpOwogCi0JCQllbWl0X3N0YWxsX3RpbWVzdGFtcF9h bmRfcnBjKGJhdGNoLAotCQkJCQkJICAgICBibywKKwkJCWVtaXRfc3RhbGxfdGltZXN0YW1wX2Fu ZF9ycGMoaWJiMCwKKwkJCQkJCSAgICAgZHN0X2J1ZiwKIAkJCQkJCSAgICAgNTEyIC8qIHRpbWVz dGFtcCBvZmZzZXQgKi8sCiAJCQkJCQkgICAgIDAsIC8qIHJlcG9ydCBkc3Qgb2Zmc2V0ICovCiAJ CQkJCQkgICAgIDB4ZGVhZGJlZWYpOyAvKiByZXBvcnQgaWQgKi8KQEAgLTM1MDEsNDkgKzM0MTMs NDYgQEAgZ2VuOF90ZXN0X3NpbmdsZV9jdHhfcmVuZGVyX3RhcmdldF93cml0ZXNfYV9jb3VudGVy KHZvaWQpCiAJCQkgKiB0aGF0IHRoZSBQSVBFX0NPTlRST0wgKyBNSV9SUEMgY29tbWFuZHMgd2ls bCBiZSBpbiBhCiAJCQkgKiBzZXBhcmF0ZSBiYXRjaCBmcm9tIHRoZSBjb3B5LgogCQkJICovCi0J CQlpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaF93aXRoX2NvbnRleHQoYmF0Y2gsIGNvbnRleHQwKTsK KwkJCWludGVsX2JiX2ZsdXNoX3JlbmRlcl93aXRoX2NvbnRleHQoaWJiMCwgY29udGV4dDBfaWQp OwogCi0JCQlyZW5kZXJfY29weShiYXRjaCwKLQkJCQkgICAgY29udGV4dDAsCisJCQlyZW5kZXJf Y29weShpYmIwLAorCQkJCSAgICBjb250ZXh0MF9pZCwKIAkJCQkgICAgJnNyY1swXSwgMCwgMCwg d2lkdGgsIGhlaWdodCwKIAkJCQkgICAgJmRzdFswXSwgMCwgMCk7CiAKIAkJCS8qIEFub3RoZXIg cmVkdW5kYW50IGZsdXNoIHRvIGNsYXJpZnkgYmF0Y2ggYm8gaXMgZnJlZSB0byByZXVzZSAqLwot CQkJaW50ZWxfYmF0Y2hidWZmZXJfZmx1c2hfd2l0aF9jb250ZXh0KGJhdGNoLCBjb250ZXh0MCk7 CisJCQlpbnRlbF9iYl9mbHVzaF9yZW5kZXJfd2l0aF9jb250ZXh0KGliYjAsIGNvbnRleHQwX2lk KTsKIAogCQkJLyogc3VibWl0IHR3byBjb3BpZXMgb24gdGhlIG90aGVyIGNvbnRleHQgdG8gYXZv aWQgYSBmYWxzZQogCQkJICogcG9zaXRpdmUgaW4gY2FzZSB0aGUgZHJpdmVyIHNvbWVob3cgZW5k ZWQgdXAgZmlsdGVyaW5nIGZvcgogCQkJICogY29udGV4dDEKIAkJCSAqLwotCQkJcmVuZGVyX2Nv cHkoYmF0Y2gsCi0JCQkJICAgIGNvbnRleHQxLAorCQkJcmVuZGVyX2NvcHkoaWJiMSwKKwkJCQkg ICAgY29udGV4dDFfaWQsCiAJCQkJICAgICZzcmNbMV0sIDAsIDAsIHdpZHRoLCBoZWlnaHQsCiAJ CQkJICAgICZkc3RbMV0sIDAsIDApOwogCi0JCQlyZXQgPSBkcm1faW50ZWxfZ2VtX2NvbnRleHRf Z2V0X2lkKGNvbnRleHQxLCAmY3R4MV9pZCk7Ci0JCQlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7Ci0J CQlpZ3RfYXNzZXJ0X25lcShjdHgxX2lkLCAweGZmZmZmZmZmKTsKLQotCQkJcmVuZGVyX2NvcHko YmF0Y2gsCi0JCQkJICAgIGNvbnRleHQxLAorCQkJcmVuZGVyX2NvcHkoaWJiMSwKKwkJCQkgICAg Y29udGV4dDFfaWQsCiAJCQkJICAgICZzcmNbMl0sIDAsIDAsIHdpZHRoLCBoZWlnaHQsCiAJCQkJ ICAgICZkc3RbMl0sIDAsIDApOwogCiAJCQkvKiBBbmQgYW5vdGhlciAqLwotCQkJaW50ZWxfYmF0 Y2hidWZmZXJfZmx1c2hfd2l0aF9jb250ZXh0KGJhdGNoLCBjb250ZXh0MSk7CisJCQlpbnRlbF9i Yl9mbHVzaF9yZW5kZXJfd2l0aF9jb250ZXh0KGliYjEsIGNvbnRleHQxX2lkKTsKIAotCQkJZW1p dF9zdGFsbF90aW1lc3RhbXBfYW5kX3JwYyhiYXRjaCwKLQkJCQkJCSAgICAgYm8sCisJCQllbWl0 X3N0YWxsX3RpbWVzdGFtcF9hbmRfcnBjKGliYjEsCisJCQkJCQkgICAgIGRzdF9idWYsCiAJCQkJ CQkgICAgIDUyMCAvKiB0aW1lc3RhbXAgb2Zmc2V0ICovLAogCQkJCQkJICAgICAyNTYsIC8qIHJl cG9ydCBkc3Qgb2Zmc2V0ICovCiAJCQkJCQkgICAgIDB4YmVlZmJlZWYpOyAvKiByZXBvcnQgaWQg Ki8KIAotCQkJaW50ZWxfYmF0Y2hidWZmZXJfZmx1c2hfd2l0aF9jb250ZXh0KGJhdGNoLCBjb250 ZXh0MSk7CisJCQlpbnRlbF9iYl9mbHVzaF9yZW5kZXJfd2l0aF9jb250ZXh0KGliYjEsIGNvbnRl eHQxX2lkKTsKKwkJCWludGVsX2JiX3N5bmMoaWJiMSk7CisJCQlpbnRlbF9iYl9zeW5jKGliYjAp OwogCi0JCQlyZXQgPSBkcm1faW50ZWxfYm9fbWFwKGJvLCBmYWxzZSAvKiB3cml0ZSBlbmFibGUg Ki8pOwotCQkJaWd0X2Fzc2VydF9lcShyZXQsIDApOworCQkJaW50ZWxfYnVmX2NwdV9tYXAoZHN0 X2J1ZiwgZmFsc2UgLyogd3JpdGUgZW5hYmxlICovKTsKIAotCQkJcmVwb3J0MF8zMiA9IGJvLT52 aXJ0dWFsOworCQkJcmVwb3J0MF8zMiA9IGRzdF9idWYtPnB0cjsKIAkJCWlndF9hc3NlcnRfZXEo cmVwb3J0MF8zMlswXSwgMHhkZWFkYmVlZik7IC8qIHJlcG9ydCBJRCAqLwogCQkJaWd0X2Fzc2Vy dF9uZXEocmVwb3J0MF8zMlsxXSwgMCk7IC8qIHRpbWVzdGFtcCAqLwogCQkJcHJldiA9IHJlcG9y dDBfMzI7CkBAIC0zNTU1LDYgKzM0NjQsNyBAQCBnZW44X3Rlc3Rfc2luZ2xlX2N0eF9yZW5kZXJf dGFyZ2V0X3dyaXRlc19hX2NvdW50ZXIodm9pZCkKIAkJCWlndF9hc3NlcnRfZXEocmVwb3J0MV8z MlswXSwgMHhiZWVmYmVlZik7IC8qIHJlcG9ydCBJRCAqLwogCQkJaWd0X2Fzc2VydF9uZXEocmVw b3J0MV8zMlsxXSwgMCk7IC8qIHRpbWVzdGFtcCAqLwogCQkJY3R4MV9pZCA9IHJlcG9ydDFfMzJb Ml07CisJCQlpZ3RfZGVidWcoIkNUWDEgSUQ6ICV1XG4iLCBjdHgxX2lkKTsKIAkJCWR1bXBfcmVw b3J0KHJlcG9ydDFfMzIsIDY0LCAicmVwb3J0MV8zMiIpOwogCiAJCQltZW1zZXQoYWNjdW11bGF0 b3IuZGVsdGFzLCAwLCBzaXplb2YoYWNjdW11bGF0b3IuZGVsdGFzKSk7CkBAIC0zNTY5LDggKzM0 NzksOCBAQCBnZW44X3Rlc3Rfc2luZ2xlX2N0eF9yZW5kZXJfdGFyZ2V0X3dyaXRlc19hX2NvdW50 ZXIodm9pZCkKIAkJCWlndF9kZWJ1ZygiY3R4X2lkIDAgPSAldVxuIiwgcmVwb3J0MF8zMlsyXSk7 CiAJCQlpZ3RfZGVidWcoImN0eF9pZCAxID0gJXVcbiIsIHJlcG9ydDFfMzJbMl0pOwogCi0JCQl0 aW1lc3RhbXAwXzY0ID0gKih1aW50NjRfdCAqKSgoKHVpbnQ4X3QgKiliby0+dmlydHVhbCkgKyA1 MTIpOwotCQkJdGltZXN0YW1wMV82NCA9ICoodWludDY0X3QgKikoKCh1aW50OF90ICopYm8tPnZp cnR1YWwpICsgNTIwKTsKKwkJCXRpbWVzdGFtcDBfNjQgPSAqKHVpbnQ2NF90ICopKCgodWludDhf dCAqKWRzdF9idWYtPnB0cikgKyA1MTIpOworCQkJdGltZXN0YW1wMV82NCA9ICoodWludDY0X3Qg KikoKCh1aW50OF90ICopZHN0X2J1Zi0+cHRyKSArIDUyMCk7CiAKIAkJCWlndF9kZWJ1ZygidHNf dGltZXN0YW1wNjQgMCA9ICUiUFJJdTY0IlxuIiwgdGltZXN0YW1wMF82NCk7CiAJCQlpZ3RfZGVi dWcoInRzX3RpbWVzdGFtcDY0IDEgPSAlIlBSSXU2NCJcbiIsIHRpbWVzdGFtcDFfNjQpOwpAQCAt Mzc1OCwyNyArMzY2OCwyNiBAQCBnZW44X3Rlc3Rfc2luZ2xlX2N0eF9yZW5kZXJfdGFyZ2V0X3dy aXRlc19hX2NvdW50ZXIodm9pZCkKIAkJCQkgIHdpZHRoLCBoZWlnaHQpOwogCQkJYWNjdW11bGF0 b3JfcHJpbnQoJmFjY3VtdWxhdG9yLCAiZmlsdGVyZWQiKTsKIAotCQkJcmV0ID0gZHJtX2ludGVs X2JvX21hcChzcmNbMF0uYm8sIGZhbHNlIC8qIHdyaXRlIGVuYWJsZSAqLyk7Ci0JCQlpZ3RfYXNz ZXJ0X2VxKHJldCwgMCk7Ci0JCQlyZXQgPSBkcm1faW50ZWxfYm9fbWFwKGRzdFswXS5ibywgZmFs c2UgLyogd3JpdGUgZW5hYmxlICovKTsKLQkJCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKKwkJCWlu dGVsX2J1Zl9jcHVfbWFwKCZzcmNbMF0sIGZhbHNlIC8qIHdyaXRlIGVuYWJsZSAqLyk7CisJCQlp bnRlbF9idWZfY3B1X21hcCgmZHN0WzBdLCBmYWxzZSAvKiB3cml0ZSBlbmFibGUgKi8pOwogCi0J CQlyZXQgPSBtZW1jbXAoc3JjWzBdLmJvLT52aXJ0dWFsLCBkc3RbMF0uYm8tPnZpcnR1YWwsIDQg KiB3aWR0aCAqIGhlaWdodCk7Ci0JCQlkcm1faW50ZWxfYm9fdW5tYXAoc3JjWzBdLmJvKTsKLQkJ CWRybV9pbnRlbF9ib191bm1hcChkc3RbMF0uYm8pOworCQkJcmV0ID0gbWVtY21wKHNyY1swXS5w dHIsIGRzdFswXS5wdHIsIDQgKiB3aWR0aCAqIGhlaWdodCk7CisJCQlpbnRlbF9idWZfdW5tYXAo JnNyY1swXSk7CisJCQlpbnRlbF9idWZfdW5tYXAoJmRzdFswXSk7CiAKIGFnYWluOgogCQkJZm9y IChpbnQgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNyYyk7IGkrKykgewotCQkJCWRybV9pbnRlbF9i b191bnJlZmVyZW5jZShzcmNbaV0uYm8pOwotCQkJCWRybV9pbnRlbF9ib191bnJlZmVyZW5jZShk c3RbaV0uYm8pOworCQkJCWludGVsX2J1Zl9jbG9zZShib3BzLCAmc3JjW2ldKTsKKwkJCQlpbnRl bF9idWZfY2xvc2UoYm9wcywgJmRzdFtpXSk7CiAJCQl9CiAKLQkJCWRybV9pbnRlbF9ib191bm1h cChibyk7Ci0JCQlkcm1faW50ZWxfYm9fdW5yZWZlcmVuY2UoYm8pOwotCQkJaW50ZWxfYmF0Y2hi dWZmZXJfZnJlZShiYXRjaCk7Ci0JCQlkcm1faW50ZWxfZ2VtX2NvbnRleHRfZGVzdHJveShjb250 ZXh0MCk7Ci0JCQlkcm1faW50ZWxfZ2VtX2NvbnRleHRfZGVzdHJveShjb250ZXh0MSk7Ci0JCQlk cm1faW50ZWxfYnVmbWdyX2Rlc3Ryb3koYnVmbWdyKTsKKwkJCWludGVsX2J1Zl91bm1hcChkc3Rf YnVmKTsKKwkJCWludGVsX2J1Zl9kZXN0cm95KGRzdF9idWYpOworCQkJaW50ZWxfYmJfZGVzdHJv eShpYmIwKTsKKwkJCWludGVsX2JiX2Rlc3Ryb3koaWJiMSk7CisJCQlnZW1fY29udGV4dF9kZXN0 cm95KGRybV9mZCwgY29udGV4dDBfaWQpOworCQkJZ2VtX2NvbnRleHRfZGVzdHJveShkcm1fZmQs IGNvbnRleHQxX2lkKTsKKwkJCWJ1Zl9vcHNfZGVzdHJveShib3BzKTsKIAkJCV9fcGVyZl9jbG9z ZShzdHJlYW1fZmQpOwogCQkJZ2VtX3F1aWVzY2VudF9ncHUoZHJtX2ZkKTsKIApAQCAtMzgyNSwx MSArMzczNCwxMCBAQCBzdGF0aWMgdm9pZCBnZW4xMl9zaW5nbGVfY3R4X2hlbHBlcih2b2lkKQog CQkubnVtX3Byb3BlcnRpZXMgPSBBUlJBWV9TSVpFKHByb3BlcnRpZXMpIC8gMiwKIAkJLnByb3Bl cnRpZXNfcHRyID0gdG9fdXNlcl9wb2ludGVyKHByb3BlcnRpZXMpLAogCX07Ci0JZHJtX2ludGVs X2J1Zm1nciAqYnVmbWdyOwotCWRybV9pbnRlbF9jb250ZXh0ICpjb250ZXh0MCwgKmNvbnRleHQx OwotCXN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2g7Ci0Jc3RydWN0IGlndF9idWYgc3Jj WzNdLCBkc3RbM107Ci0JZHJtX2ludGVsX2JvICpibzsKKwlzdHJ1Y3QgYnVmX29wcyAqYm9wczsK KwlzdHJ1Y3QgaW50ZWxfYmIgKmliYjAsICppYmIxOworCXN0cnVjdCBpbnRlbF9idWYgc3JjWzNd LCBkc3RbM10sICpkc3RfYnVmOworCXVpbnQzMl90IGNvbnRleHQwX2lkLCBjb250ZXh0MV9pZDsK IAl1aW50MzJfdCAqcmVwb3J0MF8zMiwgKnJlcG9ydDFfMzIsICpyZXBvcnQyXzMyLCAqcmVwb3J0 M18zMjsKIAl1aW50NjRfdCB0aW1lc3RhbXAwXzY0LCB0aW1lc3RhbXAxXzY0OwogCXVpbnQzMl90 IGRlbHRhX3RzNjQsIGRlbHRhX29hMzI7CkBAIC0zODQ1LDIxICszNzUzLDE3IEBAIHN0YXRpYyB2 b2lkIGdlbjEyX3NpbmdsZV9jdHhfaGVscGVyKHZvaWQpCiAJCS5mb3JtYXQgPSB0ZXN0X3NldC0+ cGVyZl9vYV9mb3JtYXQKIAl9OwogCi0JYnVmbWdyID0gZHJtX2ludGVsX2J1Zm1ncl9nZW1faW5p dChkcm1fZmQsIDQwOTYpOwotCWRybV9pbnRlbF9idWZtZ3JfZ2VtX2VuYWJsZV9yZXVzZShidWZt Z3IpOworCWJvcHMgPSBidWZfb3BzX2NyZWF0ZShkcm1fZmQpOwogCiAJZm9yIChpbnQgaSA9IDA7 IGkgPCBBUlJBWV9TSVpFKHNyYyk7IGkrKykgewotCQlzY3JhdGNoX2J1Zl9pbml0KGJ1Zm1nciwg JnNyY1tpXSwgd2lkdGgsIGhlaWdodCwgMHhmZjAwMDBmZik7Ci0JCXNjcmF0Y2hfYnVmX2luaXQo YnVmbWdyLCAmZHN0W2ldLCB3aWR0aCwgaGVpZ2h0LCAweDAwZmYwMGZmKTsKKwkJc2NyYXRjaF9i dWZfaW5pdChib3BzLCAmc3JjW2ldLCB3aWR0aCwgaGVpZ2h0LCAweGZmMDAwMGZmKTsKKwkJc2Ny YXRjaF9idWZfaW5pdChib3BzLCAmZHN0W2ldLCB3aWR0aCwgaGVpZ2h0LCAweDAwZmYwMGZmKTsK IAl9CiAKLQliYXRjaCA9IGludGVsX2JhdGNoYnVmZmVyX2FsbG9jKGJ1Zm1nciwgZGV2aWQpOwot Ci0JY29udGV4dDAgPSBkcm1faW50ZWxfZ2VtX2NvbnRleHRfY3JlYXRlKGJ1Zm1ncik7Ci0JaWd0 X2Fzc2VydChjb250ZXh0MCk7Ci0KLQljb250ZXh0MSA9IGRybV9pbnRlbF9nZW1fY29udGV4dF9j cmVhdGUoYnVmbWdyKTsKLQlpZ3RfYXNzZXJ0KGNvbnRleHQxKTsKKwlpYmIwID0gaW50ZWxfYmJf Y3JlYXRlKGRybV9mZCwgQkFUQ0hfU1opOworCWliYjEgPSBpbnRlbF9iYl9jcmVhdGUoZHJtX2Zk LCBCQVRDSF9TWik7CisJY29udGV4dDBfaWQgPSBnZW1fY29udGV4dF9jcmVhdGUoZHJtX2ZkKTsK Kwljb250ZXh0MV9pZCA9IGdlbV9jb250ZXh0X2NyZWF0ZShkcm1fZmQpOwogCiAJaWd0X2RlYnVn KCJzdWJtaXR0aW5nIHdhcm0gdXAgcmVuZGVyX2NvcHlcbiIpOwogCkBAIC0zODgzLDQ0ICszNzg3 LDQyIEBAIHN0YXRpYyB2b2lkIGdlbjEyX3NpbmdsZV9jdHhfaGVscGVyKHZvaWQpCiAJICogdXAg cGlubmluZyB0aGUgY29udGV4dCBzaW5jZSB0aGVyZSB3b24ndCBldmVyIGJlIGEgcGlubmluZwog CSAqIGhvb2sgY2FsbGJhY2suCiAJICovCi0JcmVuZGVyX2NvcHkoYmF0Y2gsIGNvbnRleHQwLAor CXJlbmRlcl9jb3B5KGliYjAsIGNvbnRleHQwX2lkLAogCQkgICAgJnNyY1swXSwgMCwgMCwgd2lk dGgsIGhlaWdodCwKIAkJICAgICZkc3RbMF0sIDAsIDApOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUg Y29udGV4dCBwYXJhbWV0ZXIgdG8gdGhlIHBlcmYgb3BlbiBpb2N0bCBoZXJlICovCi0JcmV0ID0g ZHJtX2ludGVsX2dlbV9jb250ZXh0X2dldF9pZChjb250ZXh0MCwgJmN0eDBfaWQpOwotCWlndF9h c3NlcnRfZXEocmV0LCAwKTsKLQlpZ3RfYXNzZXJ0X25lcShjdHgwX2lkLCAweGZmZmZmZmZmKTsK LQlwcm9wZXJ0aWVzWzFdID0gY3R4MF9pZDsKKwlwcm9wZXJ0aWVzWzFdID0gY29udGV4dDBfaWQ7 CiAKIAlpZ3RfZGVidWcoIm9wZW5pbmcgaTkxNS1wZXJmIHN0cmVhbVxuIik7CiAJc3RyZWFtX2Zk ID0gX19wZXJmX29wZW4oZHJtX2ZkLCAmcGFyYW0sIGZhbHNlKTsKIAotCWJvID0gZHJtX2ludGVs X2JvX2FsbG9jKGJ1Zm1nciwgIm1pX3JwYyBkZXN0IGJvIiwgNDA5NiwgNjQpOworCWRzdF9idWYg PSBpbnRlbF9idWZfY3JlYXRlKGJvcHMsIDQwOTYsIDEsIDgsIDY0LAorCQkJCSAgIEk5MTVfVElM SU5HX05PTkUsCisJCQkJICAgSTkxNV9DT01QUkVTU0lPTl9OT05FKTsKIAogCS8qIFNldCB3cml0 ZSBkb21haW4gdG8gY3B1IGJyaWVmbHkgdG8gZmlsbCB0aGUgYnVmZmVyIHdpdGggODBzICovCi0J cmV0ID0gZHJtX2ludGVsX2JvX21hcChibywgdHJ1ZSk7Ci0JaWd0X2Fzc2VydF9lcShyZXQsIDAp OwotCW1lbXNldChiby0+dmlydHVhbCwgMHg4MCwgMjA0OCk7Ci0JbWVtc2V0KGJvLT52aXJ0dWFs ICsgMjA0OCwgMCwgMjA0OCk7Ci0JZHJtX2ludGVsX2JvX3VubWFwKGJvKTsKKwlpbnRlbF9idWZf Y3B1X21hcChkc3RfYnVmLCB0cnVlIC8qIHdyaXRlIGVuYWJsZSAqLyk7CisJbWVtc2V0KGRzdF9i dWYtPnB0ciwgMHg4MCwgMjA0OCk7CisJbWVtc2V0KCh1aW50OF90ICopIGRzdF9idWYtPnB0ciAr IDIwNDgsIDAsIDIwNDgpOworCWludGVsX2J1Zl91bm1hcChkc3RfYnVmKTsKIAogCS8qIFN1Ym1p dCBhbiBtaS1ycGMgdG8gY29udGV4dDAgYmVmb3JlIG1lYXN1cmFibGUgd29yayAqLwogI2RlZmlu ZSBCT19USU1FU1RBTVBfT0ZGU0VUMCAxMDI0CiAjZGVmaW5lIEJPX1JFUE9SVF9PRkZTRVQwIDAK ICNkZWZpbmUgQk9fUkVQT1JUX0lEMCAweGRlYWRiZWVmCi0JZW1pdF9zdGFsbF90aW1lc3RhbXBf YW5kX3JwYyhiYXRjaCwKLQkJCQkgICAgIGJvLAorCWVtaXRfc3RhbGxfdGltZXN0YW1wX2FuZF9y cGMoaWJiMCwKKwkJCQkgICAgIGRzdF9idWYsCiAJCQkJICAgICBCT19USU1FU1RBTVBfT0ZGU0VU MCwKIAkJCQkgICAgIEJPX1JFUE9SVF9PRkZTRVQwLAogCQkJCSAgICAgQk9fUkVQT1JUX0lEMCk7 Ci0JaW50ZWxfYmF0Y2hidWZmZXJfZmx1c2hfd2l0aF9jb250ZXh0KGJhdGNoLCBjb250ZXh0MCk7 CisJaW50ZWxfYmJfZmx1c2hfcmVuZGVyX3dpdGhfY29udGV4dChpYmIwLCBjb250ZXh0MF9pZCk7 CiAKIAkvKiBUaGlzIGlzIHRoZSB3b3JrL2NvbnRleHQgdGhhdCBpcyBtZWFzdXJlZCBmb3IgY291 bnRlciBpbmNyZW1lbnRzICovCi0JcmVuZGVyX2NvcHkoYmF0Y2gsIGNvbnRleHQwLAorCXJlbmRl cl9jb3B5KGliYjAsIGNvbnRleHQwX2lkLAogCQkgICAgJnNyY1swXSwgMCwgMCwgd2lkdGgsIGhl aWdodCwKIAkJICAgICZkc3RbMF0sIDAsIDApOwotCWludGVsX2JhdGNoYnVmZmVyX2ZsdXNoX3dp dGhfY29udGV4dChiYXRjaCwgY29udGV4dDApOworCWludGVsX2JiX2ZsdXNoX3JlbmRlcl93aXRo X2NvbnRleHQoaWJiMCwgY29udGV4dDBfaWQpOwogCiAJLyogU3VibWl0IGFuIG1pLXJwYyB0byBj b250ZXh0MSBiZWZvcmUgd29yawogCSAqCkBAIC0zOTMxLDU0ICszODMzLDUxIEBAIHN0YXRpYyB2 b2lkIGdlbjEyX3NpbmdsZV9jdHhfaGVscGVyKHZvaWQpCiAjZGVmaW5lIEJPX1RJTUVTVEFNUF9P RkZTRVQyIDEwNDAKICNkZWZpbmUgQk9fUkVQT1JUX09GRlNFVDIgNTEyCiAjZGVmaW5lIEJPX1JF UE9SVF9JRDIgMHgwMGMwZmZlZQotCWVtaXRfc3RhbGxfdGltZXN0YW1wX2FuZF9ycGMoYmF0Y2gs Ci0JCQkJICAgICBibywKKwllbWl0X3N0YWxsX3RpbWVzdGFtcF9hbmRfcnBjKGliYjEsCisJCQkJ ICAgICBkc3RfYnVmLAogCQkJCSAgICAgQk9fVElNRVNUQU1QX09GRlNFVDIsCiAJCQkJICAgICBC T19SRVBPUlRfT0ZGU0VUMiwKIAkJCQkgICAgIEJPX1JFUE9SVF9JRDIpOwotCWludGVsX2JhdGNo YnVmZmVyX2ZsdXNoX3dpdGhfY29udGV4dChiYXRjaCwgY29udGV4dDEpOworCWludGVsX2JiX2Zs dXNoX3JlbmRlcl93aXRoX2NvbnRleHQoaWJiMSwgY29udGV4dDFfaWQpOwogCiAJLyogU3VibWl0 IHR3byBjb3BpZXMgb24gdGhlIG90aGVyIGNvbnRleHQgdG8gYXZvaWQgYSBmYWxzZQogCSAqIHBv c2l0aXZlIGluIGNhc2UgdGhlIGRyaXZlciBzb21laG93IGVuZGVkIHVwIGZpbHRlcmluZyBmb3IK IAkgKiBjb250ZXh0MQogCSAqLwotCXJlbmRlcl9jb3B5KGJhdGNoLCBjb250ZXh0MSwKKwlyZW5k ZXJfY29weShpYmIxLCBjb250ZXh0MV9pZCwKIAkJICAgICZzcmNbMV0sIDAsIDAsIHdpZHRoLCBo ZWlnaHQsCiAJCSAgICAmZHN0WzFdLCAwLCAwKTsKLQlyZXQgPSBkcm1faW50ZWxfZ2VtX2NvbnRl eHRfZ2V0X2lkKGNvbnRleHQxLCAmY3R4MV9pZCk7Ci0JaWd0X2Fzc2VydF9lcShyZXQsIDApOwot CWlndF9hc3NlcnRfbmVxKGN0eDFfaWQsIDB4ZmZmZmZmZmYpOwogCi0JcmVuZGVyX2NvcHkoYmF0 Y2gsIGNvbnRleHQxLAorCXJlbmRlcl9jb3B5KGliYjEsIGNvbnRleHQxX2lkLAogCQkgICAgJnNy Y1syXSwgMCwgMCwgd2lkdGgsIGhlaWdodCwKIAkJICAgICZkc3RbMl0sIDAsIDApOwotCWludGVs X2JhdGNoYnVmZmVyX2ZsdXNoX3dpdGhfY29udGV4dChiYXRjaCwgY29udGV4dDEpOworCWludGVs X2JiX2ZsdXNoX3JlbmRlcl93aXRoX2NvbnRleHQoaWJiMSwgY29udGV4dDFfaWQpOwogCiAJLyog U3VibWl0IGFuIG1pLXJwYyB0byBjb250ZXh0MSBhZnRlciBhbGwgd29yayAqLwogI2RlZmluZSBC T19USU1FU1RBTVBfT0ZGU0VUMyAxMDQ4CiAjZGVmaW5lIEJPX1JFUE9SVF9PRkZTRVQzIDc2OAog I2RlZmluZSBCT19SRVBPUlRfSUQzIDB4MDFjMGZmZWUKLQllbWl0X3N0YWxsX3RpbWVzdGFtcF9h bmRfcnBjKGJhdGNoLAotCQkJCSAgICAgYm8sCisJZW1pdF9zdGFsbF90aW1lc3RhbXBfYW5kX3Jw YyhpYmIxLAorCQkJCSAgICAgZHN0X2J1ZiwKIAkJCQkgICAgIEJPX1RJTUVTVEFNUF9PRkZTRVQz LAogCQkJCSAgICAgQk9fUkVQT1JUX09GRlNFVDMsCiAJCQkJICAgICBCT19SRVBPUlRfSUQzKTsK LQlpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaF93aXRoX2NvbnRleHQoYmF0Y2gsIGNvbnRleHQxKTsK KwlpbnRlbF9iYl9mbHVzaF9yZW5kZXJfd2l0aF9jb250ZXh0KGliYjEsIGNvbnRleHQxX2lkKTsK IAogCS8qIFN1Ym1pdCBhbiBtaS1ycGMgdG8gY29udGV4dDAgYWZ0ZXIgYWxsIG1lYXN1cmFibGUg d29yayAqLwogI2RlZmluZSBCT19USU1FU1RBTVBfT0ZGU0VUMSAxMDMyCiAjZGVmaW5lIEJPX1JF UE9SVF9PRkZTRVQxIDI1NgogI2RlZmluZSBCT19SRVBPUlRfSUQxIDB4YmVlZmJlZWYKLQllbWl0 X3N0YWxsX3RpbWVzdGFtcF9hbmRfcnBjKGJhdGNoLAotCQkJCSAgICAgYm8sCisJZW1pdF9zdGFs bF90aW1lc3RhbXBfYW5kX3JwYyhpYmIwLAorCQkJCSAgICAgZHN0X2J1ZiwKIAkJCQkgICAgIEJP X1RJTUVTVEFNUF9PRkZTRVQxLAogCQkJCSAgICAgQk9fUkVQT1JUX09GRlNFVDEsCiAJCQkJICAg ICBCT19SRVBPUlRfSUQxKTsKLQlpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaF93aXRoX2NvbnRleHQo YmF0Y2gsIGNvbnRleHQwKTsKKwlpbnRlbF9iYl9mbHVzaF9yZW5kZXJfd2l0aF9jb250ZXh0KGli YjAsIGNvbnRleHQwX2lkKTsKKwlpbnRlbF9iYl9zeW5jKGliYjApOworCWludGVsX2JiX3N5bmMo aWJiMSk7CiAKLQkvKiBTZXQgd3JpdGUgZG9tYWluIHRvIG5vbmUgKi8KLQlyZXQgPSBkcm1faW50 ZWxfYm9fbWFwKGJvLCBmYWxzZSk7Ci0JaWd0X2Fzc2VydF9lcShyZXQsIDApOworCWludGVsX2J1 Zl9jcHVfbWFwKGRzdF9idWYsIGZhbHNlKTsKIAogCS8qIFNhbml0eSBjaGVjayByZXBvcnRzCiAJ ICogcmVwb3J0WF8zMlswXTogcmVwb3J0IGlkIHBhc3NlZCB3aXRoIG1pLXJwYwpAQCAtMzk5MCw3 ICszODg5LDcgQEAgc3RhdGljIHZvaWQgZ2VuMTJfc2luZ2xlX2N0eF9oZWxwZXIodm9pZCkKIAkg KiByZXBvcnQyXzMyOiBzdGFydCBvZiBvdGhlciB3b3JrCiAJICogcmVwb3J0M18zMjogZW5kIG9m IG90aGVyIHdvcmsKIAkgKi8KLQlyZXBvcnQwXzMyID0gYm8tPnZpcnR1YWw7CisJcmVwb3J0MF8z MiA9IGRzdF9idWYtPnB0cjsKIAlpZ3RfYXNzZXJ0X2VxKHJlcG9ydDBfMzJbMF0sIDB4ZGVhZGJl ZWYpOwogCWlndF9hc3NlcnRfbmVxKHJlcG9ydDBfMzJbMV0sIDApOwogCWN0eDBfaWQgPSByZXBv cnQwXzMyWzJdOwpAQCAtNDAwMSw2ICszOTAwLDcgQEAgc3RhdGljIHZvaWQgZ2VuMTJfc2luZ2xl X2N0eF9oZWxwZXIodm9pZCkKIAlpZ3RfYXNzZXJ0X2VxKHJlcG9ydDFfMzJbMF0sIDB4YmVlZmJl ZWYpOwogCWlndF9hc3NlcnRfbmVxKHJlcG9ydDFfMzJbMV0sIDApOwogCWN0eDFfaWQgPSByZXBv cnQxXzMyWzJdOworCWlndF9kZWJ1ZygiQ1RYIElEMTogJXVcbiIsIGN0eDFfaWQpOwogCWR1bXBf cmVwb3J0KHJlcG9ydDFfMzIsIDY0LCAicmVwb3J0MV8zMiIpOwogCiAJLyogVmVyaWZ5IHRoYXQg Y291bnRlcnMgaW4gY29udGV4dDEgYXJlIGFsbCB6ZXJvZXMgKi8KQEAgLTQwMDksNyArMzkwOSw3 IEBAIHN0YXRpYyB2b2lkIGdlbjEyX3NpbmdsZV9jdHhfaGVscGVyKHZvaWQpCiAJaWd0X2Fzc2Vy dF9uZXEocmVwb3J0Ml8zMlsxXSwgMCk7CiAJZHVtcF9yZXBvcnQocmVwb3J0Ml8zMiwgNjQsICJy ZXBvcnQyXzMyIik7CiAJaWd0X2Fzc2VydF9lcSgwLCBtZW1jbXAoJnJlcG9ydDJfMzJbNF0sCi0J CQkJYm8tPnZpcnR1YWwgKyAyMDQ4LAorCQkJCSh1aW50OF90ICopIGRzdF9idWYtPnB0ciArIDIw NDgsCiAJCQkJMjQwKSk7CiAKIAlyZXBvcnQzXzMyID0gcmVwb3J0MF8zMiArIDE5MjsKQEAgLTQw MTcsNyArMzkxNyw3IEBAIHN0YXRpYyB2b2lkIGdlbjEyX3NpbmdsZV9jdHhfaGVscGVyKHZvaWQp CiAJaWd0X2Fzc2VydF9uZXEocmVwb3J0M18zMlsxXSwgMCk7CiAJZHVtcF9yZXBvcnQocmVwb3J0 M18zMiwgNjQsICJyZXBvcnQzXzMyIik7CiAJaWd0X2Fzc2VydF9lcSgwLCBtZW1jbXAoJnJlcG9y dDNfMzJbNF0sCi0JCQkJYm8tPnZpcnR1YWwgKyAyMDQ4LAorCQkJCSh1aW50OF90ICopIGRzdF9i dWYtPnB0ciArIDIwNDgsCiAJCQkJMjQwKSk7CiAKIAkvKiBBY2N1bXVsYXRlIGRlbHRhcyBmb3Ig Y291bnRlcnMgLSBBMCwgQTIxIGFuZCBBMjYgKi8KQEAgLTQwMzcsOCArMzkzNyw4IEBAIHN0YXRp YyB2b2lkIGdlbjEyX3NpbmdsZV9jdHhfaGVscGVyKHZvaWQpCiAJICogdGhlIE9BIHJlcG9ydCB0 aW1lc3RhbXBzIHNob3VsZCBiZSBhbG1vc3QgaWRlbnRpY2FsIGJ1dAogCSAqIGFsbG93IGEgNTAw IG5hbm9zZWNvbmRzIG1hcmdpbi4KIAkgKi8KLQl0aW1lc3RhbXAwXzY0ID0gKih1aW50NjRfdCAq KSgoKHVpbnQ4X3QgKiliby0+dmlydHVhbCkgKyBCT19USU1FU1RBTVBfT0ZGU0VUMCk7Ci0JdGlt ZXN0YW1wMV82NCA9ICoodWludDY0X3QgKikoKCh1aW50OF90ICopYm8tPnZpcnR1YWwpICsgQk9f VElNRVNUQU1QX09GRlNFVDEpOworCXRpbWVzdGFtcDBfNjQgPSAqKHVpbnQ2NF90ICopKCgodWlu dDhfdCAqKWRzdF9idWYtPnB0cikgKyBCT19USU1FU1RBTVBfT0ZGU0VUMCk7CisJdGltZXN0YW1w MV82NCA9ICoodWludDY0X3QgKikoKCh1aW50OF90ICopZHN0X2J1Zi0+cHRyKSArIEJPX1RJTUVT VEFNUF9PRkZTRVQxKTsKIAogCWlndF9kZWJ1ZygidHNfdGltZXN0YW1wNjQgMCA9ICUiUFJJdTY0 IlxuIiwgdGltZXN0YW1wMF82NCk7CiAJaWd0X2RlYnVnKCJ0c190aW1lc3RhbXA2NCAxID0gJSJQ Ukl1NjQiXG4iLCB0aW1lc3RhbXAxXzY0KTsKQEAgLTQwNzMsMjAgKzM5NzMsMTggQEAgc3RhdGlj IHZvaWQgZ2VuMTJfc2luZ2xlX2N0eF9oZWxwZXIodm9pZCkKIAkvKiBWZXJpZnkgdGhhdCB0aGUg d29yayBhY3R1YWxseSBoYXBwZW5lZCBieSBjb21wYXJpbmcgdGhlIHNyYwogCSAqIGFuZCBkc3Qg YnVmZmVycwogCSAqLwotCXJldCA9IGRybV9pbnRlbF9ib19tYXAoc3JjWzBdLmJvLCBmYWxzZSk7 Ci0JaWd0X2Fzc2VydF9lcShyZXQsIDApOwotCXJldCA9IGRybV9pbnRlbF9ib19tYXAoZHN0WzBd LmJvLCBmYWxzZSk7Ci0JaWd0X2Fzc2VydF9lcShyZXQsIDApOworCWludGVsX2J1Zl9jcHVfbWFw KCZzcmNbMF0sIGZhbHNlKTsKKwlpbnRlbF9idWZfY3B1X21hcCgmZHN0WzBdLCBmYWxzZSk7CisK KwlyZXQgPSBtZW1jbXAoc3JjWzBdLnB0ciwgZHN0WzBdLnB0ciwgNCAqIHdpZHRoICogaGVpZ2h0 KTsKKwlpbnRlbF9idWZfdW5tYXAoJnNyY1swXSk7CisJaW50ZWxfYnVmX3VubWFwKCZkc3RbMF0p OwogCi0JcmV0ID0gbWVtY21wKHNyY1swXS5iby0+dmlydHVhbCwgZHN0WzBdLmJvLT52aXJ0dWFs LCA0ICogd2lkdGggKiBoZWlnaHQpOwogCWlmIChyZXQgIT0gMCkgewogCQlhY2N1bXVsYXRvcl9w cmludCgmYWNjdW11bGF0b3IsICJ0b3RhbCIpOwogCQlleGl0KEVBR0FJTik7CiAJfQogCi0JZHJt X2ludGVsX2JvX3VubWFwKHNyY1swXS5ibyk7Ci0JZHJtX2ludGVsX2JvX3VubWFwKGRzdFswXS5i byk7Ci0KIAkvKiBDaGVjayB0aGF0IHRoaXMgdGVzdCBwYXNzZWQuIFRoZSB0ZXN0IG1lYXN1cmVz IHRoZSBudW1iZXIgb2YgMngyCiAJICogc2FtcGxlcyB3cml0dGVuIHRvIHRoZSByZW5kZXIgdGFy Z2V0IHVzaW5nIHRoZSBjb3VudGVyIEEyNi4gRm9yCiAJICogT0FSLCB0aGlzIGNvdW50ZXIgd2ls bCBvbmx5IGhhdmUgaW5jcmVtZW50cyByZWxldmFudCB0byB0aGlzIHNwZWNpZmljCkBAIC00MDk2 LDE2ICszOTk0LDE3IEBAIHN0YXRpYyB2b2lkIGdlbjEyX3NpbmdsZV9jdHhfaGVscGVyKHZvaWQp CiAKIAkvKiBDbGVhbiB1cCAqLwogCWZvciAoaW50IGkgPSAwOyBpIDwgQVJSQVlfU0laRShzcmMp OyBpKyspIHsKLQkJZHJtX2ludGVsX2JvX3VucmVmZXJlbmNlKHNyY1tpXS5ibyk7Ci0JCWRybV9p bnRlbF9ib191bnJlZmVyZW5jZShkc3RbaV0uYm8pOworCQlpbnRlbF9idWZfY2xvc2UoYm9wcywg JnNyY1tpXSk7CisJCWludGVsX2J1Zl9jbG9zZShib3BzLCAmZHN0W2ldKTsKIAl9CiAKLQlkcm1f aW50ZWxfYm9fdW5tYXAoYm8pOwotCWRybV9pbnRlbF9ib191bnJlZmVyZW5jZShibyk7Ci0JaW50 ZWxfYmF0Y2hidWZmZXJfZnJlZShiYXRjaCk7Ci0JZHJtX2ludGVsX2dlbV9jb250ZXh0X2Rlc3Ry b3koY29udGV4dDApOwotCWRybV9pbnRlbF9nZW1fY29udGV4dF9kZXN0cm95KGNvbnRleHQxKTsK LQlkcm1faW50ZWxfYnVmbWdyX2Rlc3Ryb3koYnVmbWdyKTsKKwlpbnRlbF9idWZfdW5tYXAoZHN0 X2J1Zik7CisJaW50ZWxfYnVmX2Rlc3Ryb3koZHN0X2J1Zik7CisJaW50ZWxfYmJfZGVzdHJveShp YmIwKTsKKwlpbnRlbF9iYl9kZXN0cm95KGliYjEpOworCWdlbV9jb250ZXh0X2Rlc3Ryb3koZHJt X2ZkLCBjb250ZXh0MF9pZCk7CisJZ2VtX2NvbnRleHRfZGVzdHJveShkcm1fZmQsIGNvbnRleHQx X2lkKTsKKwlidWZfb3BzX2Rlc3Ryb3koYm9wcyk7CiAJX19wZXJmX2Nsb3NlKHN0cmVhbV9mZCk7 CiB9CiAKLS0gCjIuMjYuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2 Cg==