From mboxrd@z Thu Jan 1 00:00:00 1970 From: Deepak Rawat Subject: [PATCH 04/18] drm/selftest: Add drm damage helper selftest Date: Thu, 27 Sep 2018 17:30:06 -0700 Message-ID: <20180928003020.1737-4-drawat@vmware.com> References: <20180928003020.1737-1-drawat@vmware.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from EX13-EDG-OU-001.vmware.com (ex13-edg-ou-001.vmware.com [208.91.0.189]) by gabe.freedesktop.org (Postfix) with ESMTPS id E7F6B6E632 for ; Fri, 28 Sep 2018 00:30:53 +0000 (UTC) In-Reply-To: <20180928003020.1737-1-drawat@vmware.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org, linux-graphics-maintainer@vmware.com, thellstrom@vmware.com, syeh@vmware.com Cc: Daniel Vetter , Deepak Rawat List-Id: dri-devel@lists.freedesktop.org U2VsZnRlc3QgZm9yIGRybSBkYW1hZ2UgaGVscGVyIGl0ZXJhdG9yIGZ1bmN0aW9ucy4KCkNjOiB2 aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbQpDYzogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZl dHRlckBmZndsbC5jaD4KQ2M6IFBla2thIFBhYWxhbmVuIDxwcGFhbGFuZW5AZ21haWwuY29tPgpT aWduZWQtb2ZmLWJ5OiBEZWVwYWsgUmF3YXQgPGRyYXdhdEB2bXdhcmUuY29tPgotLS0KIGRyaXZl cnMvZ3B1L2RybS9zZWxmdGVzdHMvTWFrZWZpbGUgICAgICAgICAgICB8ICAgMyArLQogLi4uL3Nl bGZ0ZXN0cy9kcm1fZGFtYWdlX2hlbHBlcl9zZWxmdGVzdHMuaCAgIHwgIDIyICsKIC4uLi9kcm0v c2VsZnRlc3RzL3Rlc3QtZHJtX2RhbWFnZV9oZWxwZXIuYyAgICB8IDg0NCArKysrKysrKysrKysr KysrKysKIDMgZmlsZXMgY2hhbmdlZCwgODY4IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vc2VsZnRlc3RzL2RybV9kYW1hZ2Vf aGVscGVyX3NlbGZ0ZXN0cy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3Nl bGZ0ZXN0cy90ZXN0LWRybV9kYW1hZ2VfaGVscGVyLmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vc2VsZnRlc3RzL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3NlbGZ0ZXN0cy9NYWtl ZmlsZQppbmRleCA5ZmMzNDlmYTE4ZTkuLjg4YWMyMTZmNTk2MiAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL3NlbGZ0ZXN0cy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vc2VsZnRl c3RzL01ha2VmaWxlCkBAIC0xICsxLDIgQEAKLW9iai0kKENPTkZJR19EUk1fREVCVUdfU0VMRlRF U1QpICs9IHRlc3QtZHJtX21tLm8gdGVzdC1kcm0taGVscGVyLm8KK29iai0kKENPTkZJR19EUk1f REVCVUdfU0VMRlRFU1QpICs9IHRlc3QtZHJtX21tLm8gdGVzdC1kcm0taGVscGVyLm8gXAorCQkJ CSAgICB0ZXN0LWRybV9kYW1hZ2VfaGVscGVyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9zZWxmdGVzdHMvZHJtX2RhbWFnZV9oZWxwZXJfc2VsZnRlc3RzLmggYi9kcml2ZXJzL2dwdS9k cm0vc2VsZnRlc3RzL2RybV9kYW1hZ2VfaGVscGVyX3NlbGZ0ZXN0cy5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uM2ExY2JlMDViZWYwCi0tLSAvZGV2L251bGwKKysr IGIvZHJpdmVycy9ncHUvZHJtL3NlbGZ0ZXN0cy9kcm1fZGFtYWdlX2hlbHBlcl9zZWxmdGVzdHMu aApAQCAtMCwwICsxLDIyIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAq Lworc2VsZnRlc3QoZGFtYWdlX2l0ZXJfbm9fZGFtYWdlLCBpZ3RfZGFtYWdlX2l0ZXJfbm9fZGFt YWdlKQorc2VsZnRlc3QoZGFtYWdlX2l0ZXJfbm9fZGFtYWdlX2ZyYWN0aW9uYWxfc3JjLCBpZ3Rf ZGFtYWdlX2l0ZXJfbm9fZGFtYWdlX2ZyYWN0aW9uYWxfc3JjKQorc2VsZnRlc3QoZGFtYWdlX2l0 ZXJfbm9fZGFtYWdlX3NyY19tb3ZlZCwgaWd0X2RhbWFnZV9pdGVyX25vX2RhbWFnZV9zcmNfbW92 ZWQpCitzZWxmdGVzdChkYW1hZ2VfaXRlcl9ub19kYW1hZ2VfZnJhY3Rpb25hbF9zcmNfbW92ZWQs IGlndF9kYW1hZ2VfaXRlcl9ub19kYW1hZ2VfZnJhY3Rpb25hbF9zcmNfbW92ZWQpCitzZWxmdGVz dChkYW1hZ2VfaXRlcl9ub19kYW1hZ2Vfbm90X3Zpc2libGUsIGlndF9kYW1hZ2VfaXRlcl9ub19k YW1hZ2Vfbm90X3Zpc2libGUpCitzZWxmdGVzdChkYW1hZ2VfaXRlcl9ub19kYW1hZ2Vfbm9fY3J0 YywgaWd0X2RhbWFnZV9pdGVyX25vX2RhbWFnZV9ub19jcnRjKQorc2VsZnRlc3QoZGFtYWdlX2l0 ZXJfbm9fZGFtYWdlX25vX2ZiLCBpZ3RfZGFtYWdlX2l0ZXJfbm9fZGFtYWdlX25vX2ZiKQorc2Vs ZnRlc3QoZGFtYWdlX2l0ZXJfc2ltcGxlX2RhbWFnZSwgaWd0X2RhbWFnZV9pdGVyX3NpbXBsZV9k YW1hZ2UpCitzZWxmdGVzdChkYW1hZ2VfaXRlcl9zaW5nbGVfZGFtYWdlLCBpZ3RfZGFtYWdlX2l0 ZXJfc2luZ2xlX2RhbWFnZSkKK3NlbGZ0ZXN0KGRhbWFnZV9pdGVyX3NpbmdsZV9kYW1hZ2VfaW50 ZXJzZWN0X3NyYywgaWd0X2RhbWFnZV9pdGVyX3NpbmdsZV9kYW1hZ2VfaW50ZXJzZWN0X3NyYykK K3NlbGZ0ZXN0KGRhbWFnZV9pdGVyX3NpbmdsZV9kYW1hZ2Vfb3V0c2lkZV9zcmMsIGlndF9kYW1h Z2VfaXRlcl9zaW5nbGVfZGFtYWdlX291dHNpZGVfc3JjKQorc2VsZnRlc3QoZGFtYWdlX2l0ZXJf c2luZ2xlX2RhbWFnZV9mcmFjdGlvbmFsX3NyYywgaWd0X2RhbWFnZV9pdGVyX3NpbmdsZV9kYW1h Z2VfZnJhY3Rpb25hbF9zcmMpCitzZWxmdGVzdChkYW1hZ2VfaXRlcl9zaW5nbGVfZGFtYWdlX2lu dGVyc2VjdF9mcmFjdGlvbmFsX3NyYywgaWd0X2RhbWFnZV9pdGVyX3NpbmdsZV9kYW1hZ2VfaW50 ZXJzZWN0X2ZyYWN0aW9uYWxfc3JjKQorc2VsZnRlc3QoZGFtYWdlX2l0ZXJfc2luZ2xlX2RhbWFn ZV9vdXRzaWRlX2ZyYWN0aW9uYWxfc3JjLCBpZ3RfZGFtYWdlX2l0ZXJfc2luZ2xlX2RhbWFnZV9v dXRzaWRlX2ZyYWN0aW9uYWxfc3JjKQorc2VsZnRlc3QoZGFtYWdlX2l0ZXJfc2luZ2xlX2RhbWFn ZV9zcmNfbW92ZWQsIGlndF9kYW1hZ2VfaXRlcl9zaW5nbGVfZGFtYWdlX3NyY19tb3ZlZCkKK3Nl bGZ0ZXN0KGRhbWFnZV9pdGVyX3NpbmdsZV9kYW1hZ2VfZnJhY3Rpb25hbF9zcmNfbW92ZWQsIGln dF9kYW1hZ2VfaXRlcl9zaW5nbGVfZGFtYWdlX2ZyYWN0aW9uYWxfc3JjX21vdmVkKQorc2VsZnRl c3QoZGFtYWdlX2l0ZXJfZGFtYWdlLCBpZ3RfZGFtYWdlX2l0ZXJfZGFtYWdlKQorc2VsZnRlc3Qo ZGFtYWdlX2l0ZXJfZGFtYWdlX29uZV9pbnRlcnNlY3QsIGlndF9kYW1hZ2VfaXRlcl9kYW1hZ2Vf b25lX2ludGVyc2VjdCkKK3NlbGZ0ZXN0KGRhbWFnZV9pdGVyX2RhbWFnZV9vbmVfb3V0c2lkZSwg aWd0X2RhbWFnZV9pdGVyX2RhbWFnZV9vbmVfb3V0c2lkZSkKK3NlbGZ0ZXN0KGRhbWFnZV9pdGVy X2RhbWFnZV9zcmNfbW92ZWQsIGlndF9kYW1hZ2VfaXRlcl9kYW1hZ2Vfc3JjX21vdmVkKQorc2Vs ZnRlc3QoZGFtYWdlX2l0ZXJfZGFtYWdlX25vdF92aXNpYmxlLCBpZ3RfZGFtYWdlX2l0ZXJfZGFt YWdlX25vdF92aXNpYmxlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3NlbGZ0ZXN0cy90 ZXN0LWRybV9kYW1hZ2VfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vc2VsZnRlc3RzL3Rlc3Qt ZHJtX2RhbWFnZV9oZWxwZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAuLjE3NzU0NzM0YzQ3YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9zZWxm dGVzdHMvdGVzdC1kcm1fZGFtYWdlX2hlbHBlci5jCkBAIC0wLDAgKzEsODQ0IEBACisvKiBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworLyoKKyAqIFRlc3QgY2FzZSBmb3IgZHJt X2RhbWFnZV9oZWxwZXIgZnVuY3Rpb25zCisgKi8KKworI2RlZmluZSBwcl9mbXQoZm10KSAiZHJt X2RhbWFnZV9oZWxwZXI6ICIgZm10CisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNs dWRlIDxkcm0vZHJtX2RhbWFnZV9oZWxwZXIuaD4KKworI2RlZmluZSBURVNUUyAiZHJtX2RhbWFn ZV9oZWxwZXJfc2VsZnRlc3RzLmgiCisjaW5jbHVkZSAiZHJtX3NlbGZ0ZXN0LmgiCisKKyNkZWZp bmUgRkFJTCh0ZXN0LCBtc2csIC4uLikgXAorCWRvIHsgXAorCQlpZiAodGVzdCkgeyBcCisJCQlw cl9lcnIoIiVzLyV1OiAiIG1zZywgX19GVU5DVElPTl9fLCBfX0xJTkVfXywgIyNfX1ZBX0FSR1Nf Xyk7IFwKKwkJCXJldHVybiAtRUlOVkFMOyBcCisJCX0gXAorCX0gd2hpbGUgKDApCisKKyNkZWZp bmUgRkFJTF9PTih4KSBGQUlMKCh4KSwgIiVzIiwgIkZBSUxfT04oIiBfX3N0cmluZ2lmeSh4KSAi KVxuIikKKworc3RhdGljIHZvaWQgc2V0X3BsYW5lX3NyYyhzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRl ICpzdGF0ZSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwKKwkJCSAgaW50IHkyKQoreworCXN0YXRl LT5zcmMueDEgPSB4MTsKKwlzdGF0ZS0+c3JjLnkxID0geTE7CisJc3RhdGUtPnNyYy54MiA9IHgy OworCXN0YXRlLT5zcmMueTIgPSB5MjsKK30KKworc3RhdGljIHZvaWQgc2V0X2RhbWFnZV9jbGlw KHN0cnVjdCBkcm1fbW9kZV9yZWN0ICpyLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLAorCQkJICAg IGludCB5MikKK3sKKwlyLT54MSA9IHgxOworCXItPnkxID0geTE7CisJci0+eDIgPSB4MjsKKwly LT55MiA9IHkyOworfQorCitzdGF0aWMgdm9pZCBzZXRfZGFtYWdlX2Jsb2Ioc3RydWN0IGRybV9w cm9wZXJ0eV9ibG9iICpkYW1hZ2VfYmxvYiwKKwkJCSAgICBzdHJ1Y3QgZHJtX21vZGVfcmVjdCAq ciwgdWludDMyX3Qgc2l6ZSkKK3sKKwlkYW1hZ2VfYmxvYi0+bGVuZ3RoID0gc2l6ZTsKKwlkYW1h Z2VfYmxvYi0+ZGF0YSA9IHI7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9wbGFuZV9kYW1hZ2Uoc3Ry dWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUsCisJCQkgICAgIHN0cnVjdCBkcm1fcHJvcGVydHlf YmxvYiAqZGFtYWdlX2Jsb2IpCit7CisJc3RhdGUtPmZiX2RhbWFnZV9jbGlwcyA9IGRhbWFnZV9i bG9iOworfQorCitzdGF0aWMgYm9vbCBjaGVja19kYW1hZ2VfY2xpcChzdHJ1Y3QgZHJtX3BsYW5l X3N0YXRlICpzdGF0ZSwgc3RydWN0IGRybV9yZWN0ICpyLAorCQkJICAgICAgaW50IHgxLCBpbnQg eTEsIGludCB4MiwgaW50IHkyKQoreworCS8qCisJICogUm91bmQgZG93biB4MS95MSBhbmQgcm91 bmQgdXAgeDIveTIuIFRoaXMgaXMgYmVjYXVzZSBkYW1hZ2UgaXMgbm90IGluCisJICogMTYuMTYg Zml4ZWQgcG9pbnQgc28gdG8gY2F0Y2ggYWxsIHBpeGVscy4KKwkgKi8KKwlpbnQgc3JjX3gxID0g c3RhdGUtPnNyYy54MSA+PiAxNjsKKwlpbnQgc3JjX3kxID0gc3RhdGUtPnNyYy55MSA+PiAxNjsK KwlpbnQgc3JjX3gyID0gKHN0YXRlLT5zcmMueDIgPj4gMTYpICsgISEoc3RhdGUtPnNyYy54MiAm IDB4RkZGRik7CisJaW50IHNyY195MiA9IChzdGF0ZS0+c3JjLnkyID4+IDE2KSArICEhKHN0YXRl LT5zcmMueTIgJiAweEZGRkYpOworCisJaWYgKHgxID49IHgyIHx8IHkxID49IHkyKSB7CisJCXBy X2VycigiQ2Fubm90IGhhdmUgZGFtYWdlIGNsaXAgd2l0aCBubyBkaW1lbnRpb24uXG4iKTsKKwkJ cmV0dXJuIGZhbHNlOworCX0KKworCWlmICh4MSA8IHNyY194MSB8fCB5MSA8IHNyY195MSB8fCB4 MiA+IHNyY194MiB8fCB5MiA+IHNyY195MikgeworCQlwcl9lcnIoIkRhbWFnZSBjYW5ub3QgYmUg b3V0c2lkZSByb3VuZGVkIHBsYW5lIHNyYy5cbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJ aWYgKHItPngxICE9IHgxIHx8IHItPnkxICE9IHkxIHx8IHItPngyICE9IHgyIHx8IHItPnkyICE9 IHkyKSB7CisJCXByX2VycigiRGFtYWdlID0gJWQgJWQgJWQgJWRcbiIsIHItPngxLCByLT55MSwg ci0+eDIsIHItPnkyKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQor CitzdGF0aWMgaW50IGlndF9kYW1hZ2VfaXRlcl9ub19kYW1hZ2Uodm9pZCAqaWdub3JlZCkKK3sK KwlzdHJ1Y3QgZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXIgaXRlcjsKKwlzdHJ1Y3QgZHJt X3BsYW5lX3N0YXRlIG9sZF9zdGF0ZTsKKwlzdHJ1Y3QgZHJtX3JlY3QgY2xpcDsKKwl1aW50MzJf dCBudW1faGl0cyA9IDA7CisKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyIGZiID0geworCQkud2lk dGggPSAyMDQ4LAorCQkuaGVpZ2h0ID0gMjA0OAorCX07CisKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0 YXRlIHN0YXRlID0geworCQkuY3J0YyA9IFpFUk9fU0laRV9QVFIsCisJCS5mYiA9ICZmYiwKKwkJ LnZpc2libGUgPSB0cnVlLAorCX07CisKKwkvKiBQbGFuZSBzcmMgc2FtZSBhcyBmYiBzaXplLiAq LworCXNldF9wbGFuZV9zcmMoJm9sZF9zdGF0ZSwgMCwgMCwgZmIud2lkdGggPDwgMTYsIGZiLmhl aWdodCA8PCAxNik7CisJc2V0X3BsYW5lX3NyYygmc3RhdGUsIDAsIDAsIGZiLndpZHRoIDw8IDE2 LCBmYi5oZWlnaHQgPDwgMTYpOworCWRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyX2luaXQo Jml0ZXIsICZvbGRfc3RhdGUsICZzdGF0ZSk7CisJZHJtX2F0b21pY19mb3JfZWFjaF9wbGFuZV9k YW1hZ2UoJml0ZXIsICZjbGlwKQorCQludW1faGl0cysrOworCisJRkFJTChudW1faGl0cyAhPSAx LCAiU2hvdWxkIHJldHVybiBwbGFuZSBzcmMgYXMgZGFtYWdlLiIpOworCUZBSUxfT04oIWNoZWNr X2RhbWFnZV9jbGlwKCZzdGF0ZSwgJmNsaXAsIDAsIDAsIDIwNDgsIDIwNDgpKTsKKworCXJldHVy biAwOworfQorCitzdGF0aWMgaW50IGlndF9kYW1hZ2VfaXRlcl9ub19kYW1hZ2VfZnJhY3Rpb25h bF9zcmModm9pZCAqaWdub3JlZCkKK3sKKwlzdHJ1Y3QgZHJtX2F0b21pY19oZWxwZXJfZGFtYWdl X2l0ZXIgaXRlcjsKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIG9sZF9zdGF0ZTsKKwlzdHJ1Y3Qg ZHJtX3JlY3QgY2xpcDsKKwl1aW50MzJfdCBudW1faGl0cyA9IDA7CisKKwlzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyIGZiID0geworCQkud2lkdGggPSAyMDQ4LAorCQkuaGVpZ2h0ID0gMjA0OAorCX07 CisKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIHN0YXRlID0geworCQkuY3J0YyA9IFpFUk9fU0la RV9QVFIsCisJCS5mYiA9ICZmYiwKKwkJLnZpc2libGUgPSB0cnVlLAorCX07CisKKwkvKiBQbGFu ZSBzcmMgaGFzIGZyYWN0aW9uYWwgcGFydC4gKi8KKwlzZXRfcGxhbmVfc3JjKCZvbGRfc3RhdGUs IDB4M2ZmZmUsIDB4M2ZmZmUsCisJCSAgICAgIDB4M2ZmZmUgKyAoMTAyNCA8PCAxNiksIDB4M2Zm ZmUgKyAoNzY4IDw8IDE2KSk7CisJc2V0X3BsYW5lX3NyYygmc3RhdGUsIDB4M2ZmZmUsIDB4M2Zm ZmUsCisJCSAgICAgIDB4M2ZmZmUgKyAoMTAyNCA8PCAxNiksIDB4M2ZmZmUgKyAoNzY4IDw8IDE2 KSk7CisJZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXJfaW5pdCgmaXRlciwgJm9sZF9zdGF0 ZSwgJnN0YXRlKTsKKwlkcm1fYXRvbWljX2Zvcl9lYWNoX3BsYW5lX2RhbWFnZSgmaXRlciwgJmNs aXApCisJCW51bV9oaXRzKys7CisKKwlGQUlMKG51bV9oaXRzICE9IDEsICJTaG91bGQgcmV0dXJu IHJvdW5kZWQgb2ZmIHBsYW5lIHNyYyBhcyBkYW1hZ2UuIik7CisJRkFJTF9PTighY2hlY2tfZGFt YWdlX2NsaXAoJnN0YXRlLCAmY2xpcCwgMywgMywgMTAyOCwgNzcyKSk7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBpZ3RfZGFtYWdlX2l0ZXJfbm9fZGFtYWdlX3NyY19tb3ZlZCh2b2lk ICppZ25vcmVkKQoreworCXN0cnVjdCBkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlciBpdGVy OworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgb2xkX3N0YXRlOworCXN0cnVjdCBkcm1fcmVjdCBj bGlwOworCXVpbnQzMl90IG51bV9oaXRzID0gMDsKKworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIg ZmIgPSB7CisJCS53aWR0aCA9IDIwNDgsCisJCS5oZWlnaHQgPSAyMDQ4CisJfTsKKworCXN0cnVj dCBkcm1fcGxhbmVfc3RhdGUgc3RhdGUgPSB7CisJCS5jcnRjID0gWkVST19TSVpFX1BUUiwKKwkJ LmZiID0gJmZiLAorCQkudmlzaWJsZSA9IHRydWUsCisJfTsKKworCS8qIFBsYW5lIHNyYyBtb3Zl ZCBzaW5jZSBvbGQgcGxhbmUgc3RhdGUuICovCisJc2V0X3BsYW5lX3NyYygmb2xkX3N0YXRlLCAw LCAwLCAxMDI0IDw8IDE2LCA3NjggPDwgMTYpOworCXNldF9wbGFuZV9zcmMoJnN0YXRlLCAxMCA8 PCAxNiwgMTAgPDwgMTYsCisJCSAgICAgICgxMCArIDEwMjQpIDw8IDE2LCAoMTAgKyA3NjgpIDw8 IDE2KTsKKwlkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlcl9pbml0KCZpdGVyLCAmb2xkX3N0 YXRlLCAmc3RhdGUpOworCWRybV9hdG9taWNfZm9yX2VhY2hfcGxhbmVfZGFtYWdlKCZpdGVyLCAm Y2xpcCkKKwkJbnVtX2hpdHMrKzsKKworCUZBSUwobnVtX2hpdHMgIT0gMSwgIlNob3VsZCByZXR1 cm4gcGxhbmUgc3JjIGFzIGRhbWFnZS4iKTsKKwlGQUlMX09OKCFjaGVja19kYW1hZ2VfY2xpcCgm c3RhdGUsICZjbGlwLCAxMCwgMTAsIDEwMzQsIDc3OCkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQgaWd0X2RhbWFnZV9pdGVyX25vX2RhbWFnZV9mcmFjdGlvbmFsX3NyY19tb3ZlZCh2 b2lkICppZ25vcmVkKQoreworCXN0cnVjdCBkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlciBp dGVyOworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgb2xkX3N0YXRlOworCXN0cnVjdCBkcm1fcmVj dCBjbGlwOworCXVpbnQzMl90IG51bV9oaXRzID0gMDsKKworCXN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgZmIgPSB7CisJCS53aWR0aCA9IDIwNDgsCisJCS5oZWlnaHQgPSAyMDQ4CisJfTsKKworCXN0 cnVjdCBkcm1fcGxhbmVfc3RhdGUgc3RhdGUgPSB7CisJCS5jcnRjID0gWkVST19TSVpFX1BUUiwK KwkJLmZiID0gJmZiLAorCQkudmlzaWJsZSA9IHRydWUsCisJfTsKKworCS8qIFBsYW5lIHNyYyBo YXMgZnJhY3Rpb25hbCBwYXJ0IGFuZCBpdCBtb3ZlZCBzaW5jZSBvbGQgcGxhbmUgc3RhdGUuICov CisJc2V0X3BsYW5lX3NyYygmb2xkX3N0YXRlLCAweDNmZmZlLCAweDNmZmZlLAorCQkgICAgICAw eDNmZmZlICsgKDEwMjQgPDwgMTYpLCAweDNmZmZlICsgKDc2OCA8PCAxNikpOworCXNldF9wbGFu ZV9zcmMoJnN0YXRlLCAweDQwMDAyLCAweDQwMDAyLAorCQkgICAgICAweDQwMDAyICsgKDEwMjQg PDwgMTYpLCAweDQwMDAyICsgKDc2OCA8PCAxNikpOworCWRybV9hdG9taWNfaGVscGVyX2RhbWFn ZV9pdGVyX2luaXQoJml0ZXIsICZvbGRfc3RhdGUsICZzdGF0ZSk7CisJZHJtX2F0b21pY19mb3Jf ZWFjaF9wbGFuZV9kYW1hZ2UoJml0ZXIsICZjbGlwKQorCQludW1faGl0cysrOworCisJRkFJTChu dW1faGl0cyAhPSAxLCAiU2hvdWxkIHJldHVybiBwbGFuZSBzcmMgYXMgZGFtYWdlLiIpOworCUZB SUxfT04oIWNoZWNrX2RhbWFnZV9jbGlwKCZzdGF0ZSwgJmNsaXAsIDQsIDQsIDEwMjksIDc3Mykp OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaWd0X2RhbWFnZV9pdGVyX25vX2RhbWFn ZV9ub3RfdmlzaWJsZSh2b2lkICppZ25vcmVkKQoreworCXN0cnVjdCBkcm1fYXRvbWljX2hlbHBl cl9kYW1hZ2VfaXRlciBpdGVyOworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgb2xkX3N0YXRlOwor CXN0cnVjdCBkcm1fcmVjdCBjbGlwOworCXVpbnQzMl90IG51bV9oaXRzID0gMDsKKworCXN0cnVj dCBkcm1fZnJhbWVidWZmZXIgZmIgPSB7CisJCS53aWR0aCA9IDIwNDgsCisJCS5oZWlnaHQgPSAy MDQ4CisJfTsKKworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgc3RhdGUgPSB7CisJCS5jcnRjID0g WkVST19TSVpFX1BUUiwKKwkJLmZiID0gJmZiLAorCQkudmlzaWJsZSA9IGZhbHNlLAorCX07CisK KwlzZXRfcGxhbmVfc3JjKCZvbGRfc3RhdGUsIDAsIDAsIDEwMjQgPDwgMTYsIDc2OCA8PCAxNik7 CisJc2V0X3BsYW5lX3NyYygmc3RhdGUsIDAsIDAsIDEwMjQgPDwgMTYsIDc2OCA8PCAxNik7CisJ ZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXJfaW5pdCgmaXRlciwgJm9sZF9zdGF0ZSwgJnN0 YXRlKTsKKwlkcm1fYXRvbWljX2Zvcl9lYWNoX3BsYW5lX2RhbWFnZSgmaXRlciwgJmNsaXApCisJ CW51bV9oaXRzKys7CisKKwlGQUlMKG51bV9oaXRzICE9IDAsICJTaG91bGQgaGF2ZSBubyBkYW1h Z2UuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpZ3RfZGFtYWdlX2l0ZXJfbm9f ZGFtYWdlX25vX2NydGModm9pZCAqaWdub3JlZCkKK3sKKwlzdHJ1Y3QgZHJtX2F0b21pY19oZWxw ZXJfZGFtYWdlX2l0ZXIgaXRlcjsKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIG9sZF9zdGF0ZTsK KwlzdHJ1Y3QgZHJtX3JlY3QgY2xpcDsKKwl1aW50MzJfdCBudW1faGl0cyA9IDA7CisKKwlzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyIGZiID0geworCQkud2lkdGggPSAyMDQ4LAorCQkuaGVpZ2h0ID0g MjA0OAorCX07CisKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIHN0YXRlID0geworCQkuY3J0YyA9 IDAsCisJCS5mYiA9ICZmYiwKKwl9OworCisJc2V0X3BsYW5lX3NyYygmb2xkX3N0YXRlLCAwLCAw LCAxMDI0IDw8IDE2LCA3NjggPDwgMTYpOworCXNldF9wbGFuZV9zcmMoJnN0YXRlLCAwLCAwLCAx MDI0IDw8IDE2LCA3NjggPDwgMTYpOworCWRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyX2lu aXQoJml0ZXIsICZvbGRfc3RhdGUsICZzdGF0ZSk7CisJZHJtX2F0b21pY19mb3JfZWFjaF9wbGFu ZV9kYW1hZ2UoJml0ZXIsICZjbGlwKQorCQludW1faGl0cysrOworCisJRkFJTChudW1faGl0cyAh PSAwLCAiU2hvdWxkIGhhdmUgbm8gZGFtYWdlLiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQgaWd0X2RhbWFnZV9pdGVyX25vX2RhbWFnZV9ub19mYih2b2lkICppZ25vcmVkKQorewor CXN0cnVjdCBkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlciBpdGVyOworCXN0cnVjdCBkcm1f cGxhbmVfc3RhdGUgb2xkX3N0YXRlOworCXN0cnVjdCBkcm1fcmVjdCBjbGlwOworCXVpbnQzMl90 IG51bV9oaXRzID0gMDsKKworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgc3RhdGUgPSB7CisJCS5j cnRjID0gWkVST19TSVpFX1BUUiwKKwkJLmZiID0gMCwKKwl9OworCisJc2V0X3BsYW5lX3NyYygm b2xkX3N0YXRlLCAwLCAwLCAxMDI0IDw8IDE2LCA3NjggPDwgMTYpOworCXNldF9wbGFuZV9zcmMo JnN0YXRlLCAwLCAwLCAxMDI0IDw8IDE2LCA3NjggPDwgMTYpOworCWRybV9hdG9taWNfaGVscGVy X2RhbWFnZV9pdGVyX2luaXQoJml0ZXIsICZvbGRfc3RhdGUsICZzdGF0ZSk7CisJZHJtX2F0b21p Y19mb3JfZWFjaF9wbGFuZV9kYW1hZ2UoJml0ZXIsICZjbGlwKQorCQludW1faGl0cysrOworCisJ RkFJTChudW1faGl0cyAhPSAwLCAiU2hvdWxkIGhhdmUgbm8gZGFtYWdlLiIpOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgaWd0X2RhbWFnZV9pdGVyX3NpbXBsZV9kYW1hZ2Uodm9pZCAq aWdub3JlZCkKK3sKKwlzdHJ1Y3QgZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXIgaXRlcjsK KwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIG9sZF9zdGF0ZTsKKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5 X2Jsb2IgZGFtYWdlX2Jsb2I7CisJc3RydWN0IGRybV9tb2RlX3JlY3QgZGFtYWdlOworCXN0cnVj dCBkcm1fcmVjdCBjbGlwOworCXVpbnQzMl90IG51bV9oaXRzID0gMDsKKworCXN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgZmIgPSB7CisJCS53aWR0aCA9IDIwNDgsCisJCS5oZWlnaHQgPSAyMDQ4CisJ fTsKKworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgc3RhdGUgPSB7CisJCS5jcnRjID0gWkVST19T SVpFX1BUUiwKKwkJLmZiID0gJmZiLAorCQkudmlzaWJsZSA9IHRydWUsCisJfTsKKworCXNldF9w bGFuZV9zcmMoJm9sZF9zdGF0ZSwgMCwgMCwgMTAyNCA8PCAxNiwgNzY4IDw8IDE2KTsKKwlzZXRf cGxhbmVfc3JjKCZzdGF0ZSwgMCwgMCwgMTAyNCA8PCAxNiwgNzY4IDw8IDE2KTsKKwkvKiBEYW1h Z2Ugc2V0IHRvIHBsYW5lIHNyYyAqLworCXNldF9kYW1hZ2VfY2xpcCgmZGFtYWdlLCAwLCAwLCAx MDI0LCA3NjgpOworCXNldF9kYW1hZ2VfYmxvYigmZGFtYWdlX2Jsb2IsICZkYW1hZ2UsIHNpemVv ZihkYW1hZ2UpKTsKKwlzZXRfcGxhbmVfZGFtYWdlKCZzdGF0ZSwgJmRhbWFnZV9ibG9iKTsKKwlk cm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlcl9pbml0KCZpdGVyLCAmb2xkX3N0YXRlLCAmc3Rh dGUpOworCWRybV9hdG9taWNfZm9yX2VhY2hfcGxhbmVfZGFtYWdlKCZpdGVyLCAmY2xpcCkKKwkJ bnVtX2hpdHMrKzsKKworCUZBSUwobnVtX2hpdHMgIT0gMSwgIlNob3VsZCByZXR1cm4gZGFtYWdl IHdoZW4gc2V0LiIpOworCUZBSUxfT04oIWNoZWNrX2RhbWFnZV9jbGlwKCZzdGF0ZSwgJmNsaXAs IDAsIDAsIDEwMjQsIDc2OCkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaWd0X2Rh bWFnZV9pdGVyX3NpbmdsZV9kYW1hZ2Uodm9pZCAqaWdub3JlZCkKK3sKKwlzdHJ1Y3QgZHJtX2F0 b21pY19oZWxwZXJfZGFtYWdlX2l0ZXIgaXRlcjsKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIG9s ZF9zdGF0ZTsKKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgZGFtYWdlX2Jsb2I7CisJc3RydWN0 IGRybV9tb2RlX3JlY3QgZGFtYWdlOworCXN0cnVjdCBkcm1fcmVjdCBjbGlwOworCXVpbnQzMl90 IG51bV9oaXRzID0gMDsKKworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgZmIgPSB7CisJCS53aWR0 aCA9IDIwNDgsCisJCS5oZWlnaHQgPSAyMDQ4CisJfTsKKworCXN0cnVjdCBkcm1fcGxhbmVfc3Rh dGUgc3RhdGUgPSB7CisJCS5jcnRjID0gWkVST19TSVpFX1BUUiwKKwkJLmZiID0gJmZiLAorCQku dmlzaWJsZSA9IHRydWUsCisJfTsKKworCXNldF9wbGFuZV9zcmMoJm9sZF9zdGF0ZSwgMCwgMCwg MTAyNCA8PCAxNiwgNzY4IDw8IDE2KTsKKwlzZXRfcGxhbmVfc3JjKCZzdGF0ZSwgMCwgMCwgMTAy NCA8PCAxNiwgNzY4IDw8IDE2KTsKKwlzZXRfZGFtYWdlX2NsaXAoJmRhbWFnZSwgMjU2LCAxOTIs IDc2OCwgNTc2KTsKKwlzZXRfZGFtYWdlX2Jsb2IoJmRhbWFnZV9ibG9iLCAmZGFtYWdlLCBzaXpl b2YoZGFtYWdlKSk7CisJc2V0X3BsYW5lX2RhbWFnZSgmc3RhdGUsICZkYW1hZ2VfYmxvYik7CisJ ZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXJfaW5pdCgmaXRlciwgJm9sZF9zdGF0ZSwgJnN0 YXRlKTsKKwlkcm1fYXRvbWljX2Zvcl9lYWNoX3BsYW5lX2RhbWFnZSgmaXRlciwgJmNsaXApCisJ CW51bV9oaXRzKys7CisKKwlGQUlMKG51bV9oaXRzICE9IDEsICJTaG91bGQgcmV0dXJuIGRhbWFn ZSB3aGVuIHNldC4iKTsKKwlGQUlMX09OKCFjaGVja19kYW1hZ2VfY2xpcCgmc3RhdGUsICZjbGlw LCAyNTYsIDE5MiwgNzY4LCA1NzYpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGln dF9kYW1hZ2VfaXRlcl9zaW5nbGVfZGFtYWdlX2ludGVyc2VjdF9zcmModm9pZCAqaWdub3JlZCkK K3sKKwlzdHJ1Y3QgZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXIgaXRlcjsKKwlzdHJ1Y3Qg ZHJtX3BsYW5lX3N0YXRlIG9sZF9zdGF0ZTsKKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgZGFt YWdlX2Jsb2I7CisJc3RydWN0IGRybV9tb2RlX3JlY3QgZGFtYWdlOworCXN0cnVjdCBkcm1fcmVj dCBjbGlwOworCXVpbnQzMl90IG51bV9oaXRzID0gMDsKKworCXN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgZmIgPSB7CisJCS53aWR0aCA9IDIwNDgsCisJCS5oZWlnaHQgPSAyMDQ4CisJfTsKKworCXN0 cnVjdCBkcm1fcGxhbmVfc3RhdGUgc3RhdGUgPSB7CisJCS5jcnRjID0gWkVST19TSVpFX1BUUiwK KwkJLmZiID0gJmZiLAorCQkudmlzaWJsZSA9IHRydWUsCisJfTsKKworCXNldF9wbGFuZV9zcmMo Jm9sZF9zdGF0ZSwgMCwgMCwgMTAyNCA8PCAxNiwgNzY4IDw8IDE2KTsKKwlzZXRfcGxhbmVfc3Jj KCZzdGF0ZSwgMCwgMCwgMTAyNCA8PCAxNiwgNzY4IDw8IDE2KTsKKwkvKiBEYW1hZ2UgaW50ZXJz ZWN0IHdpdGggcGxhbmUgc3JjLiAqLworCXNldF9kYW1hZ2VfY2xpcCgmZGFtYWdlLCAyNTYsIDE5 MiwgMTM2MCwgNzY4KTsKKwlzZXRfZGFtYWdlX2Jsb2IoJmRhbWFnZV9ibG9iLCAmZGFtYWdlLCBz aXplb2YoZGFtYWdlKSk7CisJc2V0X3BsYW5lX2RhbWFnZSgmc3RhdGUsICZkYW1hZ2VfYmxvYik7 CisJZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXJfaW5pdCgmaXRlciwgJm9sZF9zdGF0ZSwg JnN0YXRlKTsKKwlkcm1fYXRvbWljX2Zvcl9lYWNoX3BsYW5lX2RhbWFnZSgmaXRlciwgJmNsaXAp CisJCW51bV9oaXRzKys7CisKKwlGQUlMKG51bV9oaXRzICE9IDEsICJTaG91bGQgcmV0dXJuIGRh bWFnZSBjbGlwcGVkIHRvIHNyYy4iKTsKKwlGQUlMX09OKCFjaGVja19kYW1hZ2VfY2xpcCgmc3Rh dGUsICZjbGlwLCAyNTYsIDE5MiwgMTAyNCwgNzY4KSk7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGludCBpZ3RfZGFtYWdlX2l0ZXJfc2luZ2xlX2RhbWFnZV9vdXRzaWRlX3NyYyh2b2lkICpp Z25vcmVkKQoreworCXN0cnVjdCBkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlciBpdGVyOwor CXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgb2xkX3N0YXRlOworCXN0cnVjdCBkcm1fcHJvcGVydHlf YmxvYiBkYW1hZ2VfYmxvYjsKKwlzdHJ1Y3QgZHJtX21vZGVfcmVjdCBkYW1hZ2U7CisJc3RydWN0 IGRybV9yZWN0IGNsaXA7CisJdWludDMyX3QgbnVtX2hpdHMgPSAwOworCisJc3RydWN0IGRybV9m cmFtZWJ1ZmZlciBmYiA9IHsKKwkJLndpZHRoID0gMjA0OCwKKwkJLmhlaWdodCA9IDIwNDgKKwl9 OworCisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBzdGF0ZSA9IHsKKwkJLmNydGMgPSBaRVJPX1NJ WkVfUFRSLAorCQkuZmIgPSAmZmIsCisJCS52aXNpYmxlID0gdHJ1ZSwKKwl9OworCisJc2V0X3Bs YW5lX3NyYygmb2xkX3N0YXRlLCAwLCAwLCAxMDI0IDw8IDE2LCA3NjggPDwgMTYpOworCXNldF9w bGFuZV9zcmMoJnN0YXRlLCAwLCAwLCAxMDI0IDw8IDE2LCA3NjggPDwgMTYpOworCS8qIERhbWFn ZSBjbGlwIG91dHNpZGUgcGxhbmUgc3JjICovCisJc2V0X2RhbWFnZV9jbGlwKCZkYW1hZ2UsIDEz NjAsIDEzNjAsIDEzODAsIDEzODApOworCXNldF9kYW1hZ2VfYmxvYigmZGFtYWdlX2Jsb2IsICZk YW1hZ2UsIHNpemVvZihkYW1hZ2UpKTsKKwlzZXRfcGxhbmVfZGFtYWdlKCZzdGF0ZSwgJmRhbWFn ZV9ibG9iKTsKKwlkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlcl9pbml0KCZpdGVyLCAmb2xk X3N0YXRlLCAmc3RhdGUpOworCWRybV9hdG9taWNfZm9yX2VhY2hfcGxhbmVfZGFtYWdlKCZpdGVy LCAmY2xpcCkKKwkJbnVtX2hpdHMrKzsKKworCUZBSUwobnVtX2hpdHMgIT0gMCwgIlNob3VsZCBo YXZlIG5vIGRhbWFnZS4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlndF9kYW1h Z2VfaXRlcl9zaW5nbGVfZGFtYWdlX2ZyYWN0aW9uYWxfc3JjKHZvaWQgKmlnbm9yZWQpCit7CisJ c3RydWN0IGRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyIGl0ZXI7CisJc3RydWN0IGRybV9w bGFuZV9zdGF0ZSBvbGRfc3RhdGU7CisJc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iIGRhbWFnZV9i bG9iOworCXN0cnVjdCBkcm1fbW9kZV9yZWN0IGRhbWFnZTsKKwlzdHJ1Y3QgZHJtX3JlY3QgY2xp cDsKKwl1aW50MzJfdCBudW1faGl0cyA9IDA7CisKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyIGZi ID0geworCQkud2lkdGggPSAyMDQ4LAorCQkuaGVpZ2h0ID0gMjA0OAorCX07CisKKwlzdHJ1Y3Qg ZHJtX3BsYW5lX3N0YXRlIHN0YXRlID0geworCQkuY3J0YyA9IFpFUk9fU0laRV9QVFIsCisJCS5m YiA9ICZmYiwKKwkJLnZpc2libGUgPSB0cnVlLAorCX07CisKKwkvKiBQbGFuZSBzcmMgaGFzIGZy YWN0aW9uYWwgcGFydC4gKi8KKwlzZXRfcGxhbmVfc3JjKCZvbGRfc3RhdGUsIDB4NDAwMDIsIDB4 NDAwMDIsCisJCSAgICAgIDB4NDAwMDIgKyAoMTAyNCA8PCAxNiksIDB4NDAwMDIgKyAoNzY4IDw8 IDE2KSk7CisJc2V0X3BsYW5lX3NyYygmc3RhdGUsIDB4NDAwMDIsIDB4NDAwMDIsCisJCSAgICAg IDB4NDAwMDIgKyAoMTAyNCA8PCAxNiksIDB4NDAwMDIgKyAoNzY4IDw8IDE2KSk7CisJc2V0X2Rh bWFnZV9jbGlwKCZkYW1hZ2UsIDEwLCAxMCwgMjU2LCAzMzApOworCXNldF9kYW1hZ2VfYmxvYigm ZGFtYWdlX2Jsb2IsICZkYW1hZ2UsIHNpemVvZihkYW1hZ2UpKTsKKwlzZXRfcGxhbmVfZGFtYWdl KCZzdGF0ZSwgJmRhbWFnZV9ibG9iKTsKKwlkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlcl9p bml0KCZpdGVyLCAmb2xkX3N0YXRlLCAmc3RhdGUpOworCWRybV9hdG9taWNfZm9yX2VhY2hfcGxh bmVfZGFtYWdlKCZpdGVyLCAmY2xpcCkKKwkJbnVtX2hpdHMrKzsKKworCUZBSUwobnVtX2hpdHMg IT0gMSwgIlNob3VsZCByZXR1cm4gZGFtYWdlIHdoZW4gc2V0LiIpOworCUZBSUxfT04oIWNoZWNr X2RhbWFnZV9jbGlwKCZzdGF0ZSwgJmNsaXAsIDEwLCAxMCwgMjU2LCAzMzApKTsKKworCXJldHVy biAwOworfQorCitzdGF0aWMgaW50IGlndF9kYW1hZ2VfaXRlcl9zaW5nbGVfZGFtYWdlX2ludGVy c2VjdF9mcmFjdGlvbmFsX3NyYyh2b2lkICppZ25vcmVkKQoreworCXN0cnVjdCBkcm1fYXRvbWlj X2hlbHBlcl9kYW1hZ2VfaXRlciBpdGVyOworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgb2xkX3N0 YXRlOworCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiBkYW1hZ2VfYmxvYjsKKwlzdHJ1Y3QgZHJt X21vZGVfcmVjdCBkYW1hZ2U7CisJc3RydWN0IGRybV9yZWN0IGNsaXA7CisJdWludDMyX3QgbnVt X2hpdHMgPSAwOworCisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciBmYiA9IHsKKwkJLndpZHRoID0g MjA0OCwKKwkJLmhlaWdodCA9IDIwNDgKKwl9OworCisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBz dGF0ZSA9IHsKKwkJLmNydGMgPSBaRVJPX1NJWkVfUFRSLAorCQkuZmIgPSAmZmIsCisJCS52aXNp YmxlID0gdHJ1ZSwKKwl9OworCisJLyogUGxhbmUgc3JjIGhhcyBmcmFjdGlvbmFsIHBhcnQuICov CisJc2V0X3BsYW5lX3NyYygmb2xkX3N0YXRlLCAweDQwMDAyLCAweDQwMDAyLAorCQkgICAgICAw eDQwMDAyICsgKDEwMjQgPDwgMTYpLCAweDQwMDAyICsgKDc2OCA8PCAxNikpOworCXNldF9wbGFu ZV9zcmMoJnN0YXRlLCAweDQwMDAyLCAweDQwMDAyLAorCQkgICAgICAweDQwMDAyICsgKDEwMjQg PDwgMTYpLCAweDQwMDAyICsgKDc2OCA8PCAxNikpOworCS8qIERhbWFnZSBpbnRlcnNlY3Qgd2l0 aCBwbGFuZSBzcmMuICovCisJc2V0X2RhbWFnZV9jbGlwKCZkYW1hZ2UsIDEwLCAxLCAxMzYwLCAz MzApOworCXNldF9kYW1hZ2VfYmxvYigmZGFtYWdlX2Jsb2IsICZkYW1hZ2UsIHNpemVvZihkYW1h Z2UpKTsKKwlzZXRfcGxhbmVfZGFtYWdlKCZzdGF0ZSwgJmRhbWFnZV9ibG9iKTsKKwlkcm1fYXRv bWljX2hlbHBlcl9kYW1hZ2VfaXRlcl9pbml0KCZpdGVyLCAmb2xkX3N0YXRlLCAmc3RhdGUpOwor CWRybV9hdG9taWNfZm9yX2VhY2hfcGxhbmVfZGFtYWdlKCZpdGVyLCAmY2xpcCkKKwkJbnVtX2hp dHMrKzsKKworCUZBSUwobnVtX2hpdHMgIT0gMSwgIlNob3VsZCByZXR1cm4gZGFtYWdlIGNsaXBw ZWQgdG8gcm91bmRlZCBvZmYgc3JjLiIpOworCUZBSUxfT04oIWNoZWNrX2RhbWFnZV9jbGlwKCZz dGF0ZSwgJmNsaXAsIDEwLCA0LCAxMDI5LCAzMzApKTsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IGlndF9kYW1hZ2VfaXRlcl9zaW5nbGVfZGFtYWdlX291dHNpZGVfZnJhY3Rpb25hbF9z cmModm9pZCAqaWdub3JlZCkKK3sKKwlzdHJ1Y3QgZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0 ZXIgaXRlcjsKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIG9sZF9zdGF0ZTsKKwlzdHJ1Y3QgZHJt X3Byb3BlcnR5X2Jsb2IgZGFtYWdlX2Jsb2I7CisJc3RydWN0IGRybV9tb2RlX3JlY3QgZGFtYWdl OworCXN0cnVjdCBkcm1fcmVjdCBjbGlwOworCXVpbnQzMl90IG51bV9oaXRzID0gMDsKKworCXN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgZmIgPSB7CisJCS53aWR0aCA9IDIwNDgsCisJCS5oZWlnaHQg PSAyMDQ4CisJfTsKKworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgc3RhdGUgPSB7CisJCS5jcnRj ID0gWkVST19TSVpFX1BUUiwKKwkJLmZiID0gJmZiLAorCQkudmlzaWJsZSA9IHRydWUsCisJfTsK KworCS8qIFBsYW5lIHNyYyBoYXMgZnJhY3Rpb25hbCBwYXJ0LiAqLworCXNldF9wbGFuZV9zcmMo Jm9sZF9zdGF0ZSwgMHg0MDAwMiwgMHg0MDAwMiwKKwkJICAgICAgMHg0MDAwMiArICgxMDI0IDw8 IDE2KSwgMHg0MDAwMiArICg3NjggPDwgMTYpKTsKKwlzZXRfcGxhbmVfc3JjKCZzdGF0ZSwgMHg0 MDAwMiwgMHg0MDAwMiwKKwkJICAgICAgMHg0MDAwMiArICgxMDI0IDw8IDE2KSwgMHg0MDAwMiAr ICg3NjggPDwgMTYpKTsKKwkvKiBEYW1hZ2UgY2xpcCBvdXRzaWRlIHBsYW5lIHNyYyAqLworCXNl dF9kYW1hZ2VfY2xpcCgmZGFtYWdlLCAxMzYwLCAxMzYwLCAxMzgwLCAxMzgwKTsKKwlzZXRfZGFt YWdlX2Jsb2IoJmRhbWFnZV9ibG9iLCAmZGFtYWdlLCBzaXplb2YoZGFtYWdlKSk7CisJc2V0X3Bs YW5lX2RhbWFnZSgmc3RhdGUsICZkYW1hZ2VfYmxvYik7CisJZHJtX2F0b21pY19oZWxwZXJfZGFt YWdlX2l0ZXJfaW5pdCgmaXRlciwgJm9sZF9zdGF0ZSwgJnN0YXRlKTsKKwlkcm1fYXRvbWljX2Zv cl9lYWNoX3BsYW5lX2RhbWFnZSgmaXRlciwgJmNsaXApCisJCW51bV9oaXRzKys7CisKKwlGQUlM KG51bV9oaXRzICE9IDAsICJTaG91bGQgaGF2ZSBubyBkYW1hZ2UuIik7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBpZ3RfZGFtYWdlX2l0ZXJfc2luZ2xlX2RhbWFnZV9zcmNfbW92ZWQo dm9pZCAqaWdub3JlZCkKK3sKKwlzdHJ1Y3QgZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXIg aXRlcjsKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIG9sZF9zdGF0ZTsKKwlzdHJ1Y3QgZHJtX3By b3BlcnR5X2Jsb2IgZGFtYWdlX2Jsb2I7CisJc3RydWN0IGRybV9tb2RlX3JlY3QgZGFtYWdlOwor CXN0cnVjdCBkcm1fcmVjdCBjbGlwOworCXVpbnQzMl90IG51bV9oaXRzID0gMDsKKworCXN0cnVj dCBkcm1fZnJhbWVidWZmZXIgZmIgPSB7CisJCS53aWR0aCA9IDIwNDgsCisJCS5oZWlnaHQgPSAy MDQ4CisJfTsKKworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgc3RhdGUgPSB7CisJCS5jcnRjID0g WkVST19TSVpFX1BUUiwKKwkJLmZiID0gJmZiLAorCQkudmlzaWJsZSA9IHRydWUsCisJfTsKKwor CS8qIFBsYW5lIHNyYyBtb3ZlZCBzaW5jZSBvbGQgcGxhbmUgc3RhdGUuICovCisJc2V0X3BsYW5l X3NyYygmb2xkX3N0YXRlLCAwLCAwLCAxMDI0IDw8IDE2LCA3NjggPDwgMTYpOworCXNldF9wbGFu ZV9zcmMoJnN0YXRlLCAxMCA8PCAxNiwgMTAgPDwgMTYsCisJCSAgICAgICgxMCArIDEwMjQpIDw8 IDE2LCAoMTAgKyA3NjgpIDw8IDE2KTsKKwlzZXRfZGFtYWdlX2NsaXAoJmRhbWFnZSwgMjAsIDMw LCAyNTYsIDI1Nik7CisJc2V0X2RhbWFnZV9ibG9iKCZkYW1hZ2VfYmxvYiwgJmRhbWFnZSwgc2l6 ZW9mKGRhbWFnZSkpOworCXNldF9wbGFuZV9kYW1hZ2UoJnN0YXRlLCAmZGFtYWdlX2Jsb2IpOwor CWRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyX2luaXQoJml0ZXIsICZvbGRfc3RhdGUsICZz dGF0ZSk7CisJZHJtX2F0b21pY19mb3JfZWFjaF9wbGFuZV9kYW1hZ2UoJml0ZXIsICZjbGlwKQor CQludW1faGl0cysrOworCisJRkFJTChudW1faGl0cyAhPSAxLCAiU2hvdWxkIHJldHVybiBwbGFu ZSBzcmMgYXMgZGFtYWdlLiIpOworCUZBSUxfT04oIWNoZWNrX2RhbWFnZV9jbGlwKCZzdGF0ZSwg JmNsaXAsIDEwLCAxMCwgMTAzNCwgNzc4KSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBpZ3RfZGFtYWdlX2l0ZXJfc2luZ2xlX2RhbWFnZV9mcmFjdGlvbmFsX3NyY19tb3ZlZCh2b2lk ICppZ25vcmVkKQoreworCXN0cnVjdCBkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlciBpdGVy OworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgb2xkX3N0YXRlOworCXN0cnVjdCBkcm1fcHJvcGVy dHlfYmxvYiBkYW1hZ2VfYmxvYjsKKwlzdHJ1Y3QgZHJtX21vZGVfcmVjdCBkYW1hZ2U7CisJc3Ry dWN0IGRybV9yZWN0IGNsaXA7CisJdWludDMyX3QgbnVtX2hpdHMgPSAwOworCisJc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciBmYiA9IHsKKwkJLndpZHRoID0gMjA0OCwKKwkJLmhlaWdodCA9IDIwNDgK Kwl9OworCisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBzdGF0ZSA9IHsKKwkJLmNydGMgPSBaRVJP X1NJWkVfUFRSLAorCQkuZmIgPSAmZmIsCisJCS52aXNpYmxlID0gdHJ1ZSwKKwl9OworCisJLyog UGxhbmUgc3JjIHdpdGggZnJhY3Rpb25hbCBwYXJ0IG1vdmVkIHNpbmNlIG9sZCBwbGFuZSBzdGF0 ZS4gKi8KKwlzZXRfcGxhbmVfc3JjKCZvbGRfc3RhdGUsIDB4M2ZmZmUsIDB4M2ZmZmUsCisJCSAg ICAgIDB4M2ZmZmUgKyAoMTAyNCA8PCAxNiksIDB4M2ZmZmUgKyAoNzY4IDw8IDE2KSk7CisJc2V0 X3BsYW5lX3NyYygmc3RhdGUsIDB4NDAwMDIsIDB4NDAwMDIsCisJCSAgICAgIDB4NDAwMDIgKyAo MTAyNCA8PCAxNiksIDB4NDAwMDIgKyAoNzY4IDw8IDE2KSk7CisJLyogRGFtYWdlIGludGVyc2Vj dCB3aXRoIHBsYW5lIHNyYy4gKi8KKwlzZXRfZGFtYWdlX2NsaXAoJmRhbWFnZSwgMjAsIDMwLCAx MzYwLCAyNTYpOworCXNldF9kYW1hZ2VfYmxvYigmZGFtYWdlX2Jsb2IsICZkYW1hZ2UsIHNpemVv ZihkYW1hZ2UpKTsKKwlzZXRfcGxhbmVfZGFtYWdlKCZzdGF0ZSwgJmRhbWFnZV9ibG9iKTsKKwlk cm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlcl9pbml0KCZpdGVyLCAmb2xkX3N0YXRlLCAmc3Rh dGUpOworCWRybV9hdG9taWNfZm9yX2VhY2hfcGxhbmVfZGFtYWdlKCZpdGVyLCAmY2xpcCkKKwkJ bnVtX2hpdHMrKzsKKworCUZBSUwobnVtX2hpdHMgIT0gMSwgIlNob3VsZCByZXR1cm4gcm91bmRl ZCBvZmYgcGxhbmUgc3JjIGFzIGRhbWFnZS4iKTsKKwlGQUlMX09OKCFjaGVja19kYW1hZ2VfY2xp cCgmc3RhdGUsICZjbGlwLCA0LCA0LCAxMDI5LCA3NzMpKTsKKworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IGlndF9kYW1hZ2VfaXRlcl9kYW1hZ2Uodm9pZCAqaWdub3JlZCkKK3sKKwlzdHJ1 Y3QgZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXIgaXRlcjsKKwlzdHJ1Y3QgZHJtX3BsYW5l X3N0YXRlIG9sZF9zdGF0ZTsKKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgZGFtYWdlX2Jsb2I7 CisJc3RydWN0IGRybV9tb2RlX3JlY3QgZGFtYWdlWzJdOworCXN0cnVjdCBkcm1fcmVjdCBjbGlw OworCXVpbnQzMl90IG51bV9oaXRzID0gMDsKKworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgZmIg PSB7CisJCS53aWR0aCA9IDIwNDgsCisJCS5oZWlnaHQgPSAyMDQ4CisJfTsKKworCXN0cnVjdCBk cm1fcGxhbmVfc3RhdGUgc3RhdGUgPSB7CisJCS5jcnRjID0gWkVST19TSVpFX1BUUiwKKwkJLmZi ID0gJmZiLAorCQkudmlzaWJsZSA9IHRydWUsCisJfTsKKworCXNldF9wbGFuZV9zcmMoJm9sZF9z dGF0ZSwgMCwgMCwgMTAyNCA8PCAxNiwgNzY4IDw8IDE2KTsKKwlzZXRfcGxhbmVfc3JjKCZzdGF0 ZSwgMCwgMCwgMTAyNCA8PCAxNiwgNzY4IDw8IDE2KTsKKwkvKiAyIGRhbWFnZSBjbGlwcy4gKi8K KwlzZXRfZGFtYWdlX2NsaXAoJmRhbWFnZVswXSwgMjAsIDMwLCAyMDAsIDE4MCk7CisJc2V0X2Rh bWFnZV9jbGlwKCZkYW1hZ2VbMV0sIDI0MCwgMjAwLCAyODAsIDI1MCk7CisJc2V0X2RhbWFnZV9i bG9iKCZkYW1hZ2VfYmxvYiwgJmRhbWFnZVswXSwgc2l6ZW9mKGRhbWFnZSkpOworCXNldF9wbGFu ZV9kYW1hZ2UoJnN0YXRlLCAmZGFtYWdlX2Jsb2IpOworCWRybV9hdG9taWNfaGVscGVyX2RhbWFn ZV9pdGVyX2luaXQoJml0ZXIsICZvbGRfc3RhdGUsICZzdGF0ZSk7CisJZHJtX2F0b21pY19mb3Jf ZWFjaF9wbGFuZV9kYW1hZ2UoJml0ZXIsICZjbGlwKSB7CisJCWlmIChudW1faGl0cyA9PSAwKQor CQkJRkFJTF9PTighY2hlY2tfZGFtYWdlX2NsaXAoJnN0YXRlLCAmY2xpcCwgMjAsIDMwLCAyMDAs IDE4MCkpOworCQlpZiAobnVtX2hpdHMgPT0gMSkKKwkJCUZBSUxfT04oIWNoZWNrX2RhbWFnZV9j bGlwKCZzdGF0ZSwgJmNsaXAsIDI0MCwgMjAwLCAyODAsIDI1MCkpOworCQludW1faGl0cysrOwor CX0KKworCUZBSUwobnVtX2hpdHMgIT0gMiwgIlNob3VsZCByZXR1cm4gZGFtYWdlIHdoZW4gc2V0 LiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaWd0X2RhbWFnZV9pdGVyX2RhbWFn ZV9vbmVfaW50ZXJzZWN0KHZvaWQgKmlnbm9yZWQpCit7CisJc3RydWN0IGRybV9hdG9taWNfaGVs cGVyX2RhbWFnZV9pdGVyIGl0ZXI7CisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBvbGRfc3RhdGU7 CisJc3RydWN0IGRybV9wcm9wZXJ0eV9ibG9iIGRhbWFnZV9ibG9iOworCXN0cnVjdCBkcm1fbW9k ZV9yZWN0IGRhbWFnZVsyXTsKKwlzdHJ1Y3QgZHJtX3JlY3QgY2xpcDsKKwl1aW50MzJfdCBudW1f aGl0cyA9IDA7CisKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyIGZiID0geworCQkud2lkdGggPSAy MDQ4LAorCQkuaGVpZ2h0ID0gMjA0OAorCX07CisKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIHN0 YXRlID0geworCQkuY3J0YyA9IFpFUk9fU0laRV9QVFIsCisJCS5mYiA9ICZmYiwKKwkJLnZpc2li bGUgPSB0cnVlLAorCX07CisKKwlzZXRfcGxhbmVfc3JjKCZvbGRfc3RhdGUsIDB4NDAwMDIsIDB4 NDAwMDIsCisJCSAgICAgIDB4NDAwMDIgKyAoMTAyNCA8PCAxNiksIDB4NDAwMDIgKyAoNzY4IDw8 IDE2KSk7CisJc2V0X3BsYW5lX3NyYygmc3RhdGUsIDB4NDAwMDIsIDB4NDAwMDIsCisJCSAgICAg IDB4NDAwMDIgKyAoMTAyNCA8PCAxNiksIDB4NDAwMDIgKyAoNzY4IDw8IDE2KSk7CisJLyogMiBk YW1hZ2UgY2xpcHMsIG9uZSBpbnRlcnNlY3QgcGxhbmUgc3JjLiAqLworCXNldF9kYW1hZ2VfY2xp cCgmZGFtYWdlWzBdLCAyMCwgMzAsIDIwMCwgMTgwKTsKKwlzZXRfZGFtYWdlX2NsaXAoJmRhbWFn ZVsxXSwgMiwgMiwgMTM2MCwgMTM2MCk7CisJc2V0X2RhbWFnZV9ibG9iKCZkYW1hZ2VfYmxvYiwg JmRhbWFnZVswXSwgc2l6ZW9mKGRhbWFnZSkpOworCXNldF9wbGFuZV9kYW1hZ2UoJnN0YXRlLCAm ZGFtYWdlX2Jsb2IpOworCWRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyX2luaXQoJml0ZXIs ICZvbGRfc3RhdGUsICZzdGF0ZSk7CisJZHJtX2F0b21pY19mb3JfZWFjaF9wbGFuZV9kYW1hZ2Uo Jml0ZXIsICZjbGlwKSB7CisJCWlmIChudW1faGl0cyA9PSAwKQorCQkJRkFJTF9PTighY2hlY2tf ZGFtYWdlX2NsaXAoJnN0YXRlLCAmY2xpcCwgMjAsIDMwLCAyMDAsIDE4MCkpOworCQlpZiAobnVt X2hpdHMgPT0gMSkKKwkJCUZBSUxfT04oIWNoZWNrX2RhbWFnZV9jbGlwKCZzdGF0ZSwgJmNsaXAs IDQsIDQsIDEwMjksIDc3MykpOworCQludW1faGl0cysrOworCX0KKworCUZBSUwobnVtX2hpdHMg IT0gMiwgIlNob3VsZCByZXR1cm4gZGFtYWdlIHdoZW4gc2V0LiIpOworCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgaWd0X2RhbWFnZV9pdGVyX2RhbWFnZV9vbmVfb3V0c2lkZSh2b2lkICpp Z25vcmVkKQoreworCXN0cnVjdCBkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlciBpdGVyOwor CXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgb2xkX3N0YXRlOworCXN0cnVjdCBkcm1fcHJvcGVydHlf YmxvYiBkYW1hZ2VfYmxvYjsKKwlzdHJ1Y3QgZHJtX21vZGVfcmVjdCBkYW1hZ2VbMl07CisJc3Ry dWN0IGRybV9yZWN0IGNsaXA7CisJdWludDMyX3QgbnVtX2hpdHMgPSAwOworCisJc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciBmYiA9IHsKKwkJLndpZHRoID0gMjA0OCwKKwkJLmhlaWdodCA9IDIwNDgK Kwl9OworCisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBzdGF0ZSA9IHsKKwkJLmNydGMgPSBaRVJP X1NJWkVfUFRSLAorCQkuZmIgPSAmZmIsCisJCS52aXNpYmxlID0gdHJ1ZSwKKwl9OworCisJc2V0 X3BsYW5lX3NyYygmb2xkX3N0YXRlLCAwLCAwLCAxMDI0IDw8IDE2LCA3NjggPDwgMTYpOworCXNl dF9wbGFuZV9zcmMoJnN0YXRlLCAwLCAwLCAxMDI0IDw8IDE2LCA3NjggPDwgMTYpOworCS8qIDIg ZGFtYWdlIGNsaXBzLCBvbmUgb3V0c2lkZSBwbGFuZSBzcmMuICovCisJc2V0X2RhbWFnZV9jbGlw KCZkYW1hZ2VbMF0sIDEzNjAsIDEzNjAsIDEzODAsIDEzODApOworCXNldF9kYW1hZ2VfY2xpcCgm ZGFtYWdlWzFdLCAyNDAsIDIwMCwgMjgwLCAyNTApOworCXNldF9kYW1hZ2VfYmxvYigmZGFtYWdl X2Jsb2IsICZkYW1hZ2VbMF0sIHNpemVvZihkYW1hZ2UpKTsKKwlzZXRfcGxhbmVfZGFtYWdlKCZz dGF0ZSwgJmRhbWFnZV9ibG9iKTsKKwlkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlcl9pbml0 KCZpdGVyLCAmb2xkX3N0YXRlLCAmc3RhdGUpOworCWRybV9hdG9taWNfZm9yX2VhY2hfcGxhbmVf ZGFtYWdlKCZpdGVyLCAmY2xpcCkKKwkJbnVtX2hpdHMrKzsKKworCUZBSUwobnVtX2hpdHMgIT0g MSwgIlNob3VsZCByZXR1cm4gZGFtYWdlIHdoZW4gc2V0LiIpOworCUZBSUxfT04oIWNoZWNrX2Rh bWFnZV9jbGlwKCZzdGF0ZSwgJmNsaXAsIDI0MCwgMjAwLCAyODAsIDI1MCkpOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgaWd0X2RhbWFnZV9pdGVyX2RhbWFnZV9zcmNfbW92ZWQodm9p ZCAqaWdub3JlZCkKK3sKKwlzdHJ1Y3QgZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXIgaXRl cjsKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIG9sZF9zdGF0ZTsKKwlzdHJ1Y3QgZHJtX3Byb3Bl cnR5X2Jsb2IgZGFtYWdlX2Jsb2I7CisJc3RydWN0IGRybV9tb2RlX3JlY3QgZGFtYWdlWzJdOwor CXN0cnVjdCBkcm1fcmVjdCBjbGlwOworCXVpbnQzMl90IG51bV9oaXRzID0gMDsKKworCXN0cnVj dCBkcm1fZnJhbWVidWZmZXIgZmIgPSB7CisJCS53aWR0aCA9IDIwNDgsCisJCS5oZWlnaHQgPSAy MDQ4CisJfTsKKworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgc3RhdGUgPSB7CisJCS5jcnRjID0g WkVST19TSVpFX1BUUiwKKwkJLmZiID0gJmZiLAorCQkudmlzaWJsZSA9IHRydWUsCisJfTsKKwor CXNldF9wbGFuZV9zcmMoJm9sZF9zdGF0ZSwgMHg0MDAwMiwgMHg0MDAwMiwKKwkJICAgICAgMHg0 MDAwMiArICgxMDI0IDw8IDE2KSwgMHg0MDAwMiArICg3NjggPDwgMTYpKTsKKwlzZXRfcGxhbmVf c3JjKCZzdGF0ZSwgMHgzZmZmZSwgMHgzZmZmZSwKKwkJICAgICAgMHgzZmZmZSArICgxMDI0IDw8 IDE2KSwgMHgzZmZmZSArICg3NjggPDwgMTYpKTsKKwkvKiAyIGRhbWFnZSBjbGlwcywgb25lIG91 dHNpZGUgcGxhbmUgc3JjLiAqLworCXNldF9kYW1hZ2VfY2xpcCgmZGFtYWdlWzBdLCAxMzYwLCAx MzYwLCAxMzgwLCAxMzgwKTsKKwlzZXRfZGFtYWdlX2NsaXAoJmRhbWFnZVsxXSwgMjQwLCAyMDAs IDI4MCwgMjUwKTsKKwlzZXRfZGFtYWdlX2Jsb2IoJmRhbWFnZV9ibG9iLCAmZGFtYWdlWzBdLCBz aXplb2YoZGFtYWdlKSk7CisJc2V0X3BsYW5lX2RhbWFnZSgmc3RhdGUsICZkYW1hZ2VfYmxvYik7 CisJZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXJfaW5pdCgmaXRlciwgJm9sZF9zdGF0ZSwg JnN0YXRlKTsKKwlkcm1fYXRvbWljX2Zvcl9lYWNoX3BsYW5lX2RhbWFnZSgmaXRlciwgJmNsaXAp CisJCW51bV9oaXRzKys7CisKKwlGQUlMKG51bV9oaXRzICE9IDEsICJTaG91bGQgcmV0dXJuIHJv dW5kIG9mZiBwbGFuZSBzcmMgYXMgZGFtYWdlLiIpOworCUZBSUxfT04oIWNoZWNrX2RhbWFnZV9j bGlwKCZzdGF0ZSwgJmNsaXAsIDMsIDMsIDEwMjgsIDc3MikpOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgaWd0X2RhbWFnZV9pdGVyX2RhbWFnZV9ub3RfdmlzaWJsZSh2b2lkICppZ25v cmVkKQoreworCXN0cnVjdCBkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlciBpdGVyOworCXN0 cnVjdCBkcm1fcGxhbmVfc3RhdGUgb2xkX3N0YXRlOworCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxv YiBkYW1hZ2VfYmxvYjsKKwlzdHJ1Y3QgZHJtX21vZGVfcmVjdCBkYW1hZ2VbMl07CisJc3RydWN0 IGRybV9yZWN0IGNsaXA7CisJdWludDMyX3QgbnVtX2hpdHMgPSAwOworCisJc3RydWN0IGRybV9m cmFtZWJ1ZmZlciBmYiA9IHsKKwkJLndpZHRoID0gMjA0OCwKKwkJLmhlaWdodCA9IDIwNDgKKwl9 OworCisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBzdGF0ZSA9IHsKKwkJLmNydGMgPSBaRVJPX1NJ WkVfUFRSLAorCQkuZmIgPSAmZmIsCisJCS52aXNpYmxlID0gZmFsc2UsCisJfTsKKworCXNldF9w bGFuZV9zcmMoJm9sZF9zdGF0ZSwgMHg0MDAwMiwgMHg0MDAwMiwKKwkJICAgICAgMHg0MDAwMiAr ICgxMDI0IDw8IDE2KSwgMHg0MDAwMiArICg3NjggPDwgMTYpKTsKKwlzZXRfcGxhbmVfc3JjKCZz dGF0ZSwgMHgzZmZmZSwgMHgzZmZmZSwKKwkJICAgICAgMHgzZmZmZSArICgxMDI0IDw8IDE2KSwg MHgzZmZmZSArICg3NjggPDwgMTYpKTsKKwkvKiAyIGRhbWFnZSBjbGlwcywgb25lIG91dHNpZGUg cGxhbmUgc3JjLiAqLworCXNldF9kYW1hZ2VfY2xpcCgmZGFtYWdlWzBdLCAxMzYwLCAxMzYwLCAx MzgwLCAxMzgwKTsKKwlzZXRfZGFtYWdlX2NsaXAoJmRhbWFnZVsxXSwgMjQwLCAyMDAsIDI4MCwg MjUwKTsKKwlzZXRfZGFtYWdlX2Jsb2IoJmRhbWFnZV9ibG9iLCAmZGFtYWdlWzBdLCBzaXplb2Yo ZGFtYWdlKSk7CisJc2V0X3BsYW5lX2RhbWFnZSgmc3RhdGUsICZkYW1hZ2VfYmxvYik7CisJZHJt X2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXJfaW5pdCgmaXRlciwgJm9sZF9zdGF0ZSwgJnN0YXRl KTsKKwlkcm1fYXRvbWljX2Zvcl9lYWNoX3BsYW5lX2RhbWFnZSgmaXRlciwgJmNsaXApCisJCW51 bV9oaXRzKys7CisKKwlGQUlMKG51bV9oaXRzICE9IDAsICJTaG91bGQgbm90IHJldHVybiBhbnkg ZGFtYWdlLiIpOworCisJcmV0dXJuIDA7Cit9CisKKyNpbmNsdWRlICJkcm1fc2VsZnRlc3QuYyIK Kworc3RhdGljIGludCBfX2luaXQgdGVzdF9kcm1fZGFtYWdlX2hlbHBlcl9pbml0KHZvaWQpCit7 CisJaW50IGVycjsKKworCWVyciA9IHJ1bl9zZWxmdGVzdHMoc2VsZnRlc3RzLCBBUlJBWV9TSVpF KHNlbGZ0ZXN0cyksIE5VTEwpOworCisJcmV0dXJuIGVyciA+IDAgPyAwIDogZXJyOworfQorCitz dGF0aWMgdm9pZCBfX2V4aXQgdGVzdF9kcm1fZGFtYWdlX2hlbHBlcl9leGl0KHZvaWQpCit7Cit9 CisKK21vZHVsZV9pbml0KHRlc3RfZHJtX2RhbWFnZV9oZWxwZXJfaW5pdCk7Cittb2R1bGVfZXhp dCh0ZXN0X2RybV9kYW1hZ2VfaGVscGVyX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJWTXdhcmUg SW5jLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotLSAKMi4xNy4xCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0 CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK