From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jerry Han Subject: [PATCH] [v6,2/2] drm/panel: Add Boe Himax8279d MIPI-DSI LCD panel Date: Mon, 11 Mar 2019 18:03:58 +0800 Message-ID: <1552298638-7305-1-git-send-email-hanxu5@huaqin.corp-partner.google.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pf1-x441.google.com (mail-pf1-x441.google.com [IPv6:2607:f8b0:4864:20::441]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8615B89944 for ; Mon, 11 Mar 2019 10:04:08 +0000 (UTC) Received: by mail-pf1-x441.google.com with SMTP id v21so3318281pfm.12 for ; Mon, 11 Mar 2019 03:04:08 -0700 (PDT) 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 Cc: Derek Basehore , Jerry Han , Jitao Shi , Rock wang List-Id: dri-devel@lists.freedesktop.org U3VwcG9ydCBCb2UgSGltYXg4Mjc5ZCA4LjAiIDEyMDB4MTkyMCBURlQgTENEIHBhbmVsLCBpdCBp cyBhIE1JUEkgRFNJCnBhbmVsLgoKVjY6Ci0gQWRkIHRoZSBpbmZvcm1hdGlvbiBvZiB0aGUgcmV2 aWV3ZXIgKFNhbSkKLSBEZWxldGUgdW5uZWNlc3NhcnkgaGVhZGVyIGZpbGVzICNpbmNsdWRlIDxs aW51eC9mYi5oPiAoU2FtKQotIFRoZSBjb25maWcgRFJNX1BBTkVMX0JPRV9ISU1BWDgyNzlEIGFw cGVhcnMgdHdpY2UuIERyb3Agb25lIG9mIHRoZW0gKFNhbSkKLSBBREQgc3RhdGljLCBzZXRfZ3Bp b3MgZnVuY3Rpb24gaXMgbm90IHVzZWQgb3V0c2lkZSB0aGlzIG1vZHVsZSAoU2FtKQoKdjU6Ci0g QWRkZWQgY2hhbmdlbG9nCgp2NDoKLSBGcmVmaXggYWxsIGZ1bmN0aW9uIG1hZXMgd2l0aCBib2Vf IChTYW0pCi0gRnNlZCAiZW5hYmxlX2dwaW8iIHJlcGxhY2UgInJlc2V0X2dwaW8iLCBNYWtlIGl0 IGxvb2sgY2xlYXJlciAoU2FtKQotIFNvcnQgaW5jbHVkZSBsaW5lcyBhbHBoYWJldGljYWxseSAo U2FtKQotIEZpeGVkIGVudHJpZXMgaW4gdGhlIG1ha2VmaWxlIG11c3QgYmUgc29ydGVkIGFscGhh YmV0aWNhbGx5IChTYW0pCi0gQWRkIHNlbmRfbWlwaV9jbWRzIGZ1bmN0aW9uIHRvIGF2b2lkIGR1 cGxpY2F0aW5nIHRoZSBjb2RlIChTYW0pCi0gQWRkIHRoZSBuZWNlc3NhcnkgZGVsYXkocmVzZXRf ZGVsYXlfdDUpIGJldHdlZW4gcmVzZXQgYW5kIHNlbmRpbmcKICAgIHRoZSBpbml0aWFsaXphdGlv biBjb21tYW5kIChSb2NrIHdhbmcpCgp2MzoKLSBSZW1vdmUgdW5uZWNlc3NhcnkgZGVsYXlzIGlu IHNlbmRpbmcgaW5pdGlhbGl6YXRpb24gY29tbWFuZHMgKEppdGFvIFNoaSkKClYyOgotIFVzZSBT UERYIGlkZW50aWZpZXIgKFNhbSkKLSBVc2UgbmVjZXNzYXJ5IGhlYWRlciBmaWxlcyByZXBsYWNl IGRybVAuaCAoU2FtKQotIERlbGV0ZSB1bm5lY2Vzc2FyeSBoZWFkZXIgZmlsZXMgI2luY2x1ZGUg PGxpbnV4L2Vyci5oPiAoU2FtKQotIFNwZWNpZmllcyBhIEdQSU9zIGFycmF5IHRvIGNvbnRyb2wg dGhlIHJlc2V0IHRpbWluZywKICAgIGluc3RlYWQgb2YgcmVhZGluZyAiZHNpLXJlc2V0LXNlcXVl bmNlIiBkYXRhIGZyb20gRFRTIChTYW0pCi0gRGVsZXRlIGJhY2tsaWdodF9kaXNhYmxlKCkgZnVu Y3Rpb24gd2hlbiBhbHJlYWR5IGRpc2FibGVkIChTYW0pCi0gVXNlIGRldm1fb2ZfZmluZF9iYWNr bGlnaHQoKSByZXBsYWNlIG9mX2ZpbmRfYmFja2xpZ2h0X2J5X25vZGUoKSAoU2FtKQotIE1vdmUg dGhlIG5lY2Vzc2FyeSBkYXRhIGluIHRoZSBEVFMgdG8gdGhlIGN1cnJlbnQgZmlsZSwKICAgIGxp a2UgcG9yY2gsIGRpc3BsYXlfbW9kZSBhbmQgSW5pdCBjb2RlIGV0Yy4gKFNhbSkKLSBBZGQgY29t cGF0aWJsZSBkZXZpY2UgImJvZSxoaW1heDgyNzlkMTBwIiAoU2FtKQoKU2lnbmVkLW9mZi1ieTog SmVycnkgSGFuIDxoYW54dTVAaHVhcWluLmNvcnAtcGFydG5lci5nb29nbGUuY29tPgpSZXZpZXdl ZC1ieTogU2FtIFJhdm5ib3JnIDxzYW1AcmF2bmJvcmcub3JnPgpDYzogSml0YW8gU2hpIDxqaXRh by5zaGlAbWVkaWF0ZWsuY29tPgpDYzogRGVyZWsgQmFzZWhvcmUgPGRiYXNlaG9yZUBjaHJvbWl1 bS5vcmc+CkNjOiBSb2NrIHdhbmcgPHJvY2tfd2FuZ0BoaW1heC5jb20uY24+Ci0tLQogTUFJTlRB SU5FUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA2ICsKIGRyaXZlcnMv Z3B1L2RybS9wYW5lbC9LY29uZmlnICAgICAgICAgICAgICAgIHwgICAxMSArCiBkcml2ZXJzL2dw dS9kcm0vcGFuZWwvTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgIDEgKwogZHJpdmVycy9ncHUv ZHJtL3BhbmVsL3BhbmVsLWJvZS1oaW1heDgyNzlkLmMgfCAxMDY5ICsrKysrKysrKysrKysrKysr KysrKysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDEwODcgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1ib2UtaGltYXg4Mjc5ZC5jCgpk aWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCBiMmY3MTBlLi4wOTVm YmJlIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtNDYyNCw2 ICs0NjI0LDEyIEBAIFQ6CWdpdCBnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9kcm0vZHJt LW1pc2MKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvZ3B1L2RybS9ib2Nocy8KIAorRFJNIERS SVZFUiBGT1IgQk9FIEhJTUFYODI3OUQgUEFORUxTCitNOglKZXJyeSBIYW4gPGhhbnh1NUBodWFx aW4uY29ycC1wYXJ0bmVyLmdvb2dsZS5jb20+CitTOglNYWludGFpbmVkCitGOglkcml2ZXJzL2dw dS9kcm0vcGFuZWwvcGFuZWwtYm9lLWhpbWF4ODI3OWQuYworRjoJRG9jdW1lbnRhdGlvbi9kZXZp Y2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvcGFuZWwvYm9lLGhpbWF4ODI3OWQudHh0CisKIERSTSBE UklWRVIgRk9SIEZBUkFEQVkgVFZFMjAwIFRWIEVOQ09ERVIKIE06CUxpbnVzIFdhbGxlaWogPGxp bnVzLndhbGxlaWpAbGluYXJvLm9yZz4KIFQ6CWdpdCBnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9w Lm9yZy9kcm0vZHJtLW1pc2MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29u ZmlnIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcKaW5kZXggNjAyMGMzMC4uNGFhZTRh NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcKKysrIGIvZHJpdmVy cy9ncHUvZHJtL3BhbmVsL0tjb25maWcKQEAgLTE3LDYgKzE3LDE3IEBAIGNvbmZpZyBEUk1fUEFO RUxfQVJNX1ZFUlNBVElMRQogCSAgcmVmZXJlbmNlIGRlc2lnbnMuIFRoZSBwYW5lbCBpcyBkZXRl Y3RlZCB1c2luZyBzcGVjaWFsIHJlZ2lzdGVycwogCSAgaW4gdGhlIFZlcnNhdGlsZSBmYW1pbHkg c3lzY29uIHJlZ2lzdGVycy4KIAorY29uZmlnIERSTV9QQU5FTF9CT0VfSElNQVg4Mjc5RAorCXRy aXN0YXRlICJCb2UgSGltYXg4Mjc5ZCBwYW5lbCIKKwlkZXBlbmRzIG9uIE9GCisJZGVwZW5kcyBv biBEUk1fTUlQSV9EU0kKKwlkZXBlbmRzIG9uIEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UKKwloZWxw CisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzdXBwb3J0IGZvciBCb2UgSGlt YXg4Mjc5ZAorCSAgVEZULUxDRCBtb2R1bGVzLiBUaGUgcGFuZWwgaGFzIGEgMTIwMHgxOTIwIHJl c29sdXRpb24gYW5kIHVzZXMKKwkgIDI0IGJpdCBSR0IgcGVyIHBpeGVsLiBJdCBwcm92aWRlcyBh IE1JUEkgRFNJIGludGVyZmFjZSB0bworCSAgdGhlIGhvc3QgYW5kIGhhcyBhIGJ1aWx0LWluIExF RCBiYWNrbGlnaHQuCisKIGNvbmZpZyBEUk1fUEFORUxfTFZEUwogCXRyaXN0YXRlICJHZW5lcmlj IExWRFMgcGFuZWwgZHJpdmVyIgogCWRlcGVuZHMgb24gT0YKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9wYW5lbC9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZQpp bmRleCA1Y2NhYWE5Li43Mjg1NTM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwv TWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlCkBAIC0xLDUgKzEs NiBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogb2JqLSQoQ09ORklHX0RS TV9QQU5FTF9BUk1fVkVSU0FUSUxFKSArPSBwYW5lbC1hcm0tdmVyc2F0aWxlLm8KK29iai0kKENP TkZJR19EUk1fUEFORUxfQk9FX0hJTUFYODI3OUQpICs9IHBhbmVsLWJvZS1oaW1heDgyNzlkLm8K IG9iai0kKENPTkZJR19EUk1fUEFORUxfTFZEUykgKz0gcGFuZWwtbHZkcy5vCiBvYmotJChDT05G SUdfRFJNX1BBTkVMX1NJTVBMRSkgKz0gcGFuZWwtc2ltcGxlLm8KIG9iai0kKENPTkZJR19EUk1f UEFORUxfSUxJVEVLX0lMOTMyMikgKz0gcGFuZWwtaWxpdGVrLWlsaTkzMjIubwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLWJvZS1oaW1heDgyNzlkLmMgYi9kcml2ZXJz L2dwdS9kcm0vcGFuZWwvcGFuZWwtYm9lLWhpbWF4ODI3OWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi5jMDUwYTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUv ZHJtL3BhbmVsL3BhbmVsLWJvZS1oaW1heDgyNzlkLmMKQEAgLTAsMCArMSwxMDY5IEBACisvLyBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAx OSwgSHVhcWluIFRlbGVjb20gVGVjaG5vbG9neSBDby4sIEx0ZAorICoKKyAqIEF1dGhvcjogSmVy cnkgSGFuIDxoYW54dTVAaHVhcWluLmNvcnAtcGFydG5lci5nb29nbGUuY29tPgorICoKKyAqLwor CisjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4K KyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNp bmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorCisjaW5j bHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9j b25zdW1lci5oPgorCisjaW5jbHVkZSA8ZHJtL2RybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxkcm0v ZHJtX21pcGlfZHNpLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9tb2Rlcy5oPgorI2luY2x1ZGUgPGRy bS9kcm1fcGFuZWwuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3ByaW50Lmg+CisKKyNpbmNsdWRlIDx2 aWRlby9taXBpX2Rpc3BsYXkuaD4KKworc3RydWN0IHBhbmVsX2NtZCB7CisJc2l6ZV90IGxlbjsK Kwljb25zdCBjaGFyICpkYXRhOworfTsKKworI2RlZmluZSBfSU5JVF9DTUQoLi4uKSB7IFwKKwku bGVuID0gc2l6ZW9mKChjaGFyW10pe19fVkFfQVJHU19ffSksIFwKKwkuZGF0YSA9IChjaGFyW10p e19fVkFfQVJHU19ffSB9CisKK3N0cnVjdCBwYW5lbF9kZXNjIHsKKwljb25zdCBzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqZGlzcGxheV9tb2RlOworCXVuc2lnbmVkIGludCBicGM7CisJdW5zaWdu ZWQgaW50IHdpZHRoX21tOworCXVuc2lnbmVkIGludCBoZWlnaHRfbW07CisKKwl1bnNpZ25lZCBp bnQgZGVsYXlfdDE7CisJdW5zaWduZWQgaW50IHJlc2V0X2RlbGF5X3QyOworCXVuc2lnbmVkIGlu dCByZXNldF9kZWxheV90MzsKKwl1bnNpZ25lZCBpbnQgcmVzZXRfZGVsYXlfdDQ7CisJdW5zaWdu ZWQgaW50IHJlc2V0X2RlbGF5X3Q1OworCisJdW5zaWduZWQgbG9uZyBtb2RlX2ZsYWdzOworCWVu dW0gbWlwaV9kc2lfcGl4ZWxfZm9ybWF0IGZvcm1hdDsKKwl1bnNpZ25lZCBpbnQgbGFuZXM7CisJ Y29uc3Qgc3RydWN0IHBhbmVsX2NtZCAqb25fY21kczsKKwljb25zdCBzdHJ1Y3QgcGFuZWxfY21k ICpvZmZfY21kczsKK307CisKK3N0cnVjdCBwYW5lbF9pbmZvIHsKKwlzdHJ1Y3QgZHJtX3BhbmVs IGJhc2U7CisJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqbGluazsKKwljb25zdCBzdHJ1Y3QgcGFu ZWxfZGVzYyAqZGVzYzsKKworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiYWNrbGlnaHQ7CisJ c3RydWN0IGdwaW9fZGVzYyAqZW5hYmxlX2dwaW87CisJc3RydWN0IGdwaW9fZGVzYyAqcHAzM19n cGlvOworCXN0cnVjdCBncGlvX2Rlc2MgKnBwMThfZ3BpbzsKKworCWJvb2wgcHJlcGFyZWQ7CisJ Ym9vbCBlbmFibGVkOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFuZWxfaW5mbyAqdG9f cGFuZWxfaW5mbyhzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlyZXR1cm4gY29udGFpbmVy X29mKHBhbmVsLCBzdHJ1Y3QgcGFuZWxfaW5mbywgYmFzZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNl dF9ncGlvcyhzdHJ1Y3QgcGFuZWxfaW5mbyAqcGluZm8sIGludCBlbmFibGUpCit7CisJZ3Bpb2Rf c2V0X3ZhbHVlKHBpbmZvLT5lbmFibGVfZ3BpbywgZW5hYmxlKTsKKwlncGlvZF9zZXRfdmFsdWUo cGluZm8tPnBwMzNfZ3BpbywgZW5hYmxlKTsKKwlncGlvZF9zZXRfdmFsdWUocGluZm8tPnBwMThf Z3BpbywgZW5hYmxlKTsKK30KKworc3RhdGljIGludCBzZW5kX21pcGlfY21kcyhzdHJ1Y3QgZHJt X3BhbmVsICpwYW5lbCwgY29uc3Qgc3RydWN0IHBhbmVsX2NtZCAqY21kcykKK3sKKwlzdHJ1Y3Qg cGFuZWxfaW5mbyAqcGluZm8gPSB0b19wYW5lbF9pbmZvKHBhbmVsKTsKKwl1bnNpZ25lZCBpbnQg aSA9IDA7CisJaW50IGVycjsKKworCWlmICghY21kcykKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlm b3IgKGkgPSAwOyBjbWRzW2ldLmxlbiAhPSAwOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IHBhbmVs X2NtZCAqY21kID0gJmNtZHNbaV07CisKKwkJaWYgKGNtZC0+bGVuID09IDIpCisJCQllcnIgPSBt aXBpX2RzaV9kY3Nfd3JpdGUocGluZm8tPmxpbmssCisJCQkJCQkgICAgY21kLT5kYXRhWzFdLCBO VUxMLCAwKTsKKwkJZWxzZQorCQkJZXJyID0gbWlwaV9kc2lfZGNzX3dyaXRlKHBpbmZvLT5saW5r LAorCQkJCQkJICAgIGNtZC0+ZGF0YVsxXSwgY21kLT5kYXRhICsgMiwKKwkJCQkJCSAgICBjbWQt PmxlbiAtIDIpOworCisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKworCQl1c2xlZXBf cmFuZ2UoKGNtZC0+ZGF0YVswXSkgKiAxMDAwLAorCQkJICAgICgxICsgY21kLT5kYXRhWzBdKSAq IDEwMDApOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJvZV9wYW5lbF9kaXNh YmxlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXN0cnVjdCBwYW5lbF9pbmZvICpwaW5m byA9IHRvX3BhbmVsX2luZm8ocGFuZWwpOworCisJYmFja2xpZ2h0X2Rpc2FibGUocGluZm8tPmJh Y2tsaWdodCk7CisKKwlwaW5mby0+ZW5hYmxlZCA9IGZhbHNlOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgYm9lX3BhbmVsX3VucHJlcGFyZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkK K3sKKwlzdHJ1Y3QgcGFuZWxfaW5mbyAqcGluZm8gPSB0b19wYW5lbF9pbmZvKHBhbmVsKTsKKwlp bnQgZXJyOworCisJaWYgKCFwaW5mby0+cHJlcGFyZWQpCisJCXJldHVybiAwOworCisJLyogc2Vu ZCBvZmYgY29kZSAqLworCWVyciA9IHNlbmRfbWlwaV9jbWRzKHBhbmVsLCBwaW5mby0+ZGVzYy0+ b2ZmX2NtZHMpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIocGFuZWwtPmRldiwKKwkJCSJm YWlsZWQgdG8gc2VuZCBEQ1MgT2ZmIENvZGU6ICVkXG4iLAorCQkJZXJyKTsKKwkJZ290byBwb3dl cm9mZjsKKwl9CisKKwlzZXRfZ3Bpb3MocGluZm8sIDApOworCisJcGluZm8tPnByZXBhcmVkID0g ZmFsc2U7CisKKwlyZXR1cm4gMDsKKworcG93ZXJvZmY6CisJc2V0X2dwaW9zKHBpbmZvLCAwKTsK KwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGJvZV9wYW5lbF9wcmVwYXJlKHN0cnVjdCBk cm1fcGFuZWwgKnBhbmVsKQoreworCXN0cnVjdCBwYW5lbF9pbmZvICpwaW5mbyA9IHRvX3BhbmVs X2luZm8ocGFuZWwpOworCWNvbnN0IHN0cnVjdCBwYW5lbF9kZXNjICpkZXNjID0gcGluZm8tPmRl c2M7CisJaW50IGVycjsKKworCWlmIChwaW5mby0+cHJlcGFyZWQpCisJCXJldHVybiAwOworCisJ Z3Bpb2Rfc2V0X3ZhbHVlKHBpbmZvLT5wcDE4X2dwaW8sIDEpOworCS8qIFQxICg+IDVtcykgKi8K Kwl1c2xlZXBfcmFuZ2UoZGVzYy0+ZGVsYXlfdDEsIDEwMDAgKyBkZXNjLT5kZWxheV90MSk7CisJ Z3Bpb2Rfc2V0X3ZhbHVlKHBpbmZvLT5wcDMzX2dwaW8sIDEpOworCisJLyogcmVzZXQgc2VxdWVu Y2UgKi8KKwl1c2xlZXBfcmFuZ2UoZGVzYy0+cmVzZXRfZGVsYXlfdDIsIDEwMDAgKyBkZXNjLT5y ZXNldF9kZWxheV90Mik7CisKKwlpZiAoZGVzYy0+cmVzZXRfZGVsYXlfdDMpIHsKKwkJZ3Bpb2Rf c2V0X3ZhbHVlKHBpbmZvLT5lbmFibGVfZ3BpbywgMSk7CisJCXVzbGVlcF9yYW5nZShkZXNjLT5y ZXNldF9kZWxheV90MywgMTAwMCArIGRlc2MtPnJlc2V0X2RlbGF5X3QzKTsKKwkJZ3Bpb2Rfc2V0 X3ZhbHVlKHBpbmZvLT5lbmFibGVfZ3BpbywgMCk7CisJfQorCisJdXNsZWVwX3JhbmdlKGRlc2Mt PnJlc2V0X2RlbGF5X3Q0LCAxMDAwICsgZGVzYy0+cmVzZXRfZGVsYXlfdDQpOworCWdwaW9kX3Nl dF92YWx1ZShwaW5mby0+ZW5hYmxlX2dwaW8sIDEpOworCisJaWYgKGRlc2MtPnJlc2V0X2RlbGF5 X3Q1KQorCQl1c2xlZXBfcmFuZ2UoZGVzYy0+cmVzZXRfZGVsYXlfdDUsIDEwMDAgKyBkZXNjLT5y ZXNldF9kZWxheV90NSk7CisKKwkvKiBzZW5kIGluaXQgY29kZSAqLworCWVyciA9IHNlbmRfbWlw aV9jbWRzKHBhbmVsLCBwaW5mby0+ZGVzYy0+b25fY21kcyk7CisJaWYgKGVyciA8IDApIHsKKwkJ ZGV2X2VycihwYW5lbC0+ZGV2LAorCQkJImZhaWxlZCB0byBzZW5kIERDUyBJbml0IENvZGU6ICVk XG4iLAorCQkJZXJyKTsKKwkJZ290byBwb3dlcm9mZjsKKwl9CisKKwlwaW5mby0+cHJlcGFyZWQg PSB0cnVlOworCisJcmV0dXJuIDA7CisKK3Bvd2Vyb2ZmOgorCXNldF9ncGlvcyhwaW5mbywgMCk7 CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBib2VfcGFuZWxfZW5hYmxlKHN0cnVjdCBk cm1fcGFuZWwgKnBhbmVsKQoreworCXN0cnVjdCBwYW5lbF9pbmZvICpwaW5mbyA9IHRvX3BhbmVs X2luZm8ocGFuZWwpOworCWludCByZXQ7CisKKwlpZiAocGluZm8tPmVuYWJsZWQpCisJCXJldHVy biAwOworCisJcmV0ID0gYmFja2xpZ2h0X2VuYWJsZShwaW5mby0+YmFja2xpZ2h0KTsKKwlpZiAo cmV0KSB7CisJCURSTV9ERVZfRVJST1IocGFuZWwtPmRybS0+ZGV2LAorCQkJCSJGYWlsZWQgdG8g ZW5hYmxlIGJhY2tsaWdodCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwaW5m by0+ZW5hYmxlZCA9IHRydWU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBib2VfcGFu ZWxfZ2V0X21vZGVzKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXN0cnVjdCBwYW5lbF9p bmZvICpwaW5mbyA9IHRvX3BhbmVsX2luZm8ocGFuZWwpOworCWNvbnN0IHN0cnVjdCBkcm1fZGlz cGxheV9tb2RlICptID0gcGluZm8tPmRlc2MtPmRpc3BsYXlfbW9kZTsKKwlzdHJ1Y3QgZHJtX2Rp c3BsYXlfbW9kZSAqbW9kZTsKKworCW1vZGUgPSBkcm1fbW9kZV9kdXBsaWNhdGUocGFuZWwtPmRy bSwgbSk7CisJaWYgKCFtb2RlKSB7CisJCURSTV9ERVZfRVJST1IocGFuZWwtPmRybS0+ZGV2LCAi ZmFpbGVkIHRvIGFkZCBtb2RlICV1eCV1QCV1XG4iLAorCQkJCW0tPmhkaXNwbGF5LCBtLT52ZGlz cGxheSwgbS0+dnJlZnJlc2gpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkcm1fbW9kZV9z ZXRfbmFtZShtb2RlKTsKKworCWRybV9tb2RlX3Byb2JlZF9hZGQocGFuZWwtPmNvbm5lY3Rvciwg bW9kZSk7CisKKwlwYW5lbC0+Y29ubmVjdG9yLT5kaXNwbGF5X2luZm8ud2lkdGhfbW0gPSBwaW5m by0+ZGVzYy0+d2lkdGhfbW07CisJcGFuZWwtPmNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmhlaWdo dF9tbSA9IHBpbmZvLT5kZXNjLT5oZWlnaHRfbW07CisJcGFuZWwtPmNvbm5lY3Rvci0+ZGlzcGxh eV9pbmZvLmJwYyA9IHBpbmZvLT5kZXNjLT5icGM7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fcGFuZWxfZnVuY3MgcGFuZWxfZnVuY3MgPSB7CisJLmRpc2FibGUg PSBib2VfcGFuZWxfZGlzYWJsZSwKKwkudW5wcmVwYXJlID0gYm9lX3BhbmVsX3VucHJlcGFyZSwK KwkucHJlcGFyZSA9IGJvZV9wYW5lbF9wcmVwYXJlLAorCS5lbmFibGUgPSBib2VfcGFuZWxfZW5h YmxlLAorCS5nZXRfbW9kZXMgPSBib2VfcGFuZWxfZ2V0X21vZGVzLAorfTsKKworLyogOCBpbmNo ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgYm9lX2hpbWF4ODI3OWQ4 cF9kaXNwbGF5X21vZGUgPSB7CisJLmNsb2NrID0gMTU5NDIwLAorCS5oZGlzcGxheSA9IDEyMDAs CisJLmhzeW5jX3N0YXJ0ID0gMTIwMCArIDgwLAorCS5oc3luY19lbmQgPSAxMjAwICsgODAgKyA2 MCwKKwkuaHRvdGFsID0gMTIwMCArIDgwICsgNjAgKyAyNCwKKwkudmRpc3BsYXkgPSAxOTIwLAor CS52c3luY19zdGFydCA9IDE5MjAgKyAxMCwKKwkudnN5bmNfZW5kID0gMTkyMCArIDEwICsgMTQs CisJLnZ0b3RhbCA9IDE5MjAgKyAxMCArIDE0ICsgNCwKKwkudnJlZnJlc2ggPSA2MCwKK307CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGFuZWxfY21kIGJvZV9oaW1heDgyNzlkOHBfb25fY21kc1td ID0geworCV9JTklUX0NNRCgweDIyLCAweDEwKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCMCwgMHgw NSksCisJX0lOSVRfQ01EKDB4MDAsIDB4QjEsIDB4RTUpLAorCV9JTklUX0NNRCgweDAwLCAweEIz LCAweDUyKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCMCwgMHgwMCksCisJX0lOSVRfQ01EKDB4MDAs IDB4QjMsIDB4ODgpLAorCV9JTklUX0NNRCgweDAwLCAweEIwLCAweDA0KSwKKwlfSU5JVF9DTUQo MHgwMCwgMHhCOCwgMHgwMCksCisJX0lOSVRfQ01EKDB4MDAsIDB4QjAsIDB4MDApLAorCV9JTklU X0NNRCgweDAwLCAweEIyLCAweDUwKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCNiwgMHgwMyksCisJ X0lOSVRfQ01EKDB4MDAsIDB4QkEsIDB4OEIpLAorCV9JTklUX0NNRCgweDAwLCAweEJGLCAweDE1 KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDMCwgMHgwRiksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzIs IDB4MEMpLAorCV9JTklUX0NNRCgweDAwLCAweEMzLCAweDAyKSwKKwlfSU5JVF9DTUQoMHgwMCwg MHhDNCwgMHgwQyksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzUsIDB4MDIpLAorCV9JTklUX0NNRCgw eDAwLCAweEIwLCAweDAxKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhFMCwgMHgyNiksCisJX0lOSVRf Q01EKDB4MDAsIDB4RTEsIDB4MjYpLAorCV9JTklUX0NNRCgweDAwLCAweERDLCAweDAwKSwKKwlf SU5JVF9DTUQoMHgwMCwgMHhERCwgMHgwMCksCisJX0lOSVRfQ01EKDB4MDAsIDB4Q0MsIDB4MjYp LAorCV9JTklUX0NNRCgweDAwLCAweENELCAweDI2KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDOCwg MHgwMCksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzksIDB4MDApLAorCV9JTklUX0NNRCgweDAwLCAw eEQyLCAweDA0KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhEMywgMHgwNCksCisJX0lOSVRfQ01EKDB4 MDAsIDB4RTYsIDB4MDMpLAorCV9JTklUX0NNRCgweDAwLCAweEU3LCAweDAzKSwKKwlfSU5JVF9D TUQoMHgwMCwgMHhDNCwgMHgwOCksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzUsIDB4MDgpLAorCV9J TklUX0NNRCgweDAwLCAweEQ4LCAweDA3KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhEOSwgMHgwNyks CisJX0lOSVRfQ01EKDB4MDAsIDB4QzIsIDB4MDYpLAorCV9JTklUX0NNRCgweDAwLCAweEMzLCAw eDA2KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhENiwgMHgwNSksCisJX0lOSVRfQ01EKDB4MDAsIDB4 RDcsIDB4MDUpLAorCV9JTklUX0NNRCgweDAwLCAweEMwLCAweDBDKSwKKwlfSU5JVF9DTUQoMHgw MCwgMHhDMSwgMHgwQyksCisJX0lOSVRfQ01EKDB4MDAsIDB4RDQsIDB4MEIpLAorCV9JTklUX0NN RCgweDAwLCAweEQ1LCAweDBCKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDQSwgMHgwQSksCisJX0lO SVRfQ01EKDB4MDAsIDB4Q0IsIDB4MEEpLAorCV9JTklUX0NNRCgweDAwLCAweERFLCAweDA5KSwK KwlfSU5JVF9DTUQoMHgwMCwgMHhERiwgMHgwOSksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzYsIDB4 MjYpLAorCV9JTklUX0NNRCgweDAwLCAweEM3LCAweDI2KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhD RSwgMHgwMCksCisJX0lOSVRfQ01EKDB4MDAsIDB4Q0YsIDB4MDApLAorCV9JTklUX0NNRCgweDAw LCAweERBLCAweDI2KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhEQiwgMHgyNiksCisJX0lOSVRfQ01E KDB4MDAsIDB4RTIsIDB4MDApLAorCV9JTklUX0NNRCgweDAwLCAweEUzLCAweDAwKSwKKwlfSU5J VF9DTUQoMHgwMCwgMHhCMCwgMHgwMiksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzAsIDB4MDApLAor CV9JTklUX0NNRCgweDAwLCAweEMxLCAweDA3KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDMiwgMHgw RCksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzMsIDB4MTgpLAorCV9JTklUX0NNRCgweDAwLCAweEM0 LCAweDI3KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDNSwgMHgyOCksCisJX0lOSVRfQ01EKDB4MDAs IDB4QzYsIDB4MzApLAorCV9JTklUX0NNRCgweDAwLCAweEM3LCAweDJFKSwKKwlfSU5JVF9DTUQo MHgwMCwgMHhDOCwgMHgyRiksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzksIDB4MUEpLAorCV9JTklU X0NNRCgweDAwLCAweENBLCAweDIwKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDQiwgMHgyOSksCisJ X0lOSVRfQ01EKDB4MDAsIDB4Q0MsIDB4MjYpLAorCV9JTklUX0NNRCgweDAwLCAweENELCAweDMy KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDRSwgMHgzMyksCisJX0lOSVRfQ01EKDB4MDAsIDB4Q0Ys IDB4MzEpLAorCV9JTklUX0NNRCgweDAwLCAweEQwLCAweDA2KSwKKwlfSU5JVF9DTUQoMHgwMCwg MHhEMiwgMHgwMCksCisJX0lOSVRfQ01EKDB4MDAsIDB4RDMsIDB4MDcpLAorCV9JTklUX0NNRCgw eDAwLCAweEQ0LCAweDEyKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhENSwgMHgyNiksCisJX0lOSVRf Q01EKDB4MDAsIDB4RDYsIDB4M0QpLAorCV9JTklUX0NNRCgweDAwLCAweEQ3LCAweDNGKSwKKwlf SU5JVF9DTUQoMHgwMCwgMHhEOCwgMHgzRiksCisJX0lOSVRfQ01EKDB4MDAsIDB4RDksIDB4M0Yp LAorCV9JTklUX0NNRCgweDAwLCAweERBLCAweDNGKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhEQiwg MHgzRiksCisJX0lOSVRfQ01EKDB4MDAsIDB4REMsIDB4M0YpLAorCV9JTklUX0NNRCgweDAwLCAw eERELCAweDNGKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhERSwgMHgzRiksCisJX0lOSVRfQ01EKDB4 MDAsIDB4REYsIDB4M0EpLAorCV9JTklUX0NNRCgweDAwLCAweEUwLCAweDM3KSwKKwlfSU5JVF9D TUQoMHgwMCwgMHhFMSwgMHgzNSksCisJX0lOSVRfQ01EKDB4MDAsIDB4RTIsIDB4MDcpLAorCV9J TklUX0NNRCgweDAwLCAweEIwLCAweDAzKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDOCwgMHgwQiks CisJX0lOSVRfQ01EKDB4MDAsIDB4QzksIDB4MDcpLAorCV9JTklUX0NNRCgweDAwLCAweEMzLCAw eDAwKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhFNywgMHgwMCksCisJX0lOSVRfQ01EKDB4MDAsIDB4 QzUsIDB4MkEpLAorCV9JTklUX0NNRCgweDAwLCAweERFLCAweDJBKSwKKwlfSU5JVF9DTUQoMHgw MCwgMHhDQSwgMHg0MyksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzksIDB4MDcpLAorCV9JTklUX0NN RCgweDAwLCAweEU0LCAweEMwKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhFNSwgMHgwRCksCisJX0lO SVRfQ01EKDB4MDAsIDB4Q0IsIDB4MDApLAorCV9JTklUX0NNRCgweDAwLCAweEIwLCAweDA2KSwK KwlfSU5JVF9DTUQoMHgwMCwgMHhCOCwgMHhBNSksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzAsIDB4 QTUpLAorCV9JTklUX0NNRCgweDAwLCAweEM3LCAweDBGKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhE NSwgMHgzMiksCisJX0lOSVRfQ01EKDB4MDAsIDB4QjgsIDB4MDApLAorCV9JTklUX0NNRCgweDAw LCAweEMwLCAweDAwKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCQywgMHgwMCksCisJX0lOSVRfQ01E KDB4MDAsIDB4QjAsIDB4MDcpLAorCV9JTklUX0NNRCgweDAwLCAweEIxLCAweDAwKSwKKwlfSU5J VF9DTUQoMHgwMCwgMHhCMiwgMHgwOSksCisJX0lOSVRfQ01EKDB4MDAsIDB4QjMsIDB4MTkpLAor CV9JTklUX0NNRCgweDAwLCAweEI0LCAweDJGKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCNSwgMHg0 NCksCisJX0lOSVRfQ01EKDB4MDAsIDB4QjYsIDB4NTIpLAorCV9JTklUX0NNRCgweDAwLCAweEI3 LCAweDZBKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCOCwgMHg4QSksCisJX0lOSVRfQ01EKDB4MDAs IDB4QjksIDB4Q0EpLAorCV9JTklUX0NNRCgweDAwLCAweEJBLCAweDBDKSwKKwlfSU5JVF9DTUQo MHgwNSwgMHhCQiwgMHg4NyksCisJX0lOSVRfQ01EKDB4MDAsIDB4QkMsIDB4MDYpLAorCV9JTklU X0NNRCgweDAwLCAweEJELCAweDBBKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCRSwgMHg5QiksCisJ X0lOSVRfQ01EKDB4MDAsIDB4QkYsIDB4MEMpLAorCV9JTklUX0NNRCgweDAwLCAweEMwLCAweDNE KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDMSwgMHg3MSksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzIs IDB4OTApLAorCV9JTklUX0NNRCgweDAwLCAweEMzLCAweEEwKSwKKwlfSU5JVF9DTUQoMHgwMCwg MHhDNCwgMHhBOCksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzUsIDB4QjEpLAorCV9JTklUX0NNRCgw eDAwLCAweEM2LCAweEJCKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDNywgMHhDMCksCisJX0lOSVRf Q01EKDB4MDAsIDB4QzgsIDB4QzQpLAorCV9JTklUX0NNRCgweDAwLCAweEM5LCAweDAwKSwKKwlf SU5JVF9DTUQoMHgwMCwgMHhDQSwgMHgwMCksCisJX0lOSVRfQ01EKDB4MDAsIDB4Q0IsIDB4MTYp LAorCV9JTklUX0NNRCgweDAwLCAweENDLCAweEFGKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDRCwg MHhGRiksCisJX0lOSVRfQ01EKDB4MDAsIDB4Q0UsIDB4RkYpLAorCV9JTklUX0NNRCgweDAwLCAw eEIwLCAweDA4KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCMSwgMHgwNCksCisJX0lOSVRfQ01EKDB4 MDAsIDB4QjIsIDB4MDgpLAorCV9JTklUX0NNRCgweDAwLCAweEIzLCAweDE5KSwKKwlfSU5JVF9D TUQoMHgwMCwgMHhCNCwgMHgzMSksCisJX0lOSVRfQ01EKDB4MDAsIDB4QjUsIDB4NDYpLAorCV9J TklUX0NNRCgweDAwLCAweEI2LCAweDU1KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCNywgMHg2RSks CisJX0lOSVRfQ01EKDB4MDAsIDB4QjgsIDB4OTIpLAorCV9JTklUX0NNRCgweDAwLCAweEI5LCAw eEQ0KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCQSwgMHgxQiksCisJX0lOSVRfQ01EKDB4MDUsIDB4 QkIsIDB4OUIpLAorCV9JTklUX0NNRCgweDAwLCAweEJDLCAweDI4KSwKKwlfSU5JVF9DTUQoMHgw MCwgMHhCRCwgMHgyRCksCisJX0lOSVRfQ01EKDB4MDAsIDB4QkUsIDB4QzMpLAorCV9JTklUX0NN RCgweDAwLCAweEJGLCAweDJGKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDMCwgMHg2MiksCisJX0lO SVRfQ01EKDB4MDAsIDB4QzEsIDB4OTkpLAorCV9JTklUX0NNRCgweDAwLCAweEMyLCAweEFCKSwK KwlfSU5JVF9DTUQoMHgwMCwgMHhDMywgMHhCRiksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzQsIDB4 Q0YpLAorCV9JTklUX0NNRCgweDAwLCAweEM1LCAweERGKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhD NiwgMHhGMCksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzcsIDB4RjkpLAorCV9JTklUX0NNRCgweDAw LCAweEM4LCAweEZDKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDOSwgMHgwMCksCisJX0lOSVRfQ01E KDB4MDAsIDB4Q0EsIDB4MDApLAorCV9JTklUX0NNRCgweDAwLCAweENCLCAweDE2KSwKKwlfSU5J VF9DTUQoMHgwMCwgMHhDQywgMHhBRiksCisJX0lOSVRfQ01EKDB4MDAsIDB4Q0QsIDB4RkYpLAor CV9JTklUX0NNRCgweDAwLCAweENFLCAweEZGKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCMCwgMHgw OSksCisJX0lOSVRfQ01EKDB4MDAsIDB4QjEsIDB4MDQpLAorCV9JTklUX0NNRCgweDAwLCAweEIy LCAweDA1KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCMywgMHgxNyksCisJX0lOSVRfQ01EKDB4MDAs IDB4QjQsIDB4MkUpLAorCV9JTklUX0NNRCgweDAwLCAweEI1LCAweDQyKSwKKwlfSU5JVF9DTUQo MHgwMCwgMHhCNiwgMHg1MSksCisJX0lOSVRfQ01EKDB4MDAsIDB4QjcsIDB4NjkpLAorCV9JTklU X0NNRCgweDAwLCAweEI4LCAweDg4KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCOSwgMHhDOSksCisJ X0lOSVRfQ01EKDB4MDAsIDB4QkEsIDB4MEMpLAorCV9JTklUX0NNRCgweDA1LCAweEJCLCAweDg2 KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCQywgMHgwMyksCisJX0lOSVRfQ01EKDB4MDAsIDB4QkQs IDB4MDgpLAorCV9JTklUX0NNRCgweDAwLCAweEJFLCAweDk1KSwKKwlfSU5JVF9DTUQoMHgwMCwg MHhCRiwgMHgwNSksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzAsIDB4MzUpLAorCV9JTklUX0NNRCgw eDAwLCAweEMxLCAweDYyKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDMiwgMHg4MSksCisJX0lOSVRf Q01EKDB4MDAsIDB4QzMsIDB4OTYpLAorCV9JTklUX0NNRCgweDAwLCAweEM0LCAweDlFKSwKKwlf SU5JVF9DTUQoMHgwMCwgMHhDNSwgMHhBNSksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzYsIDB4QUQp LAorCV9JTklUX0NNRCgweDAwLCAweEM3LCAweEIxKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDOCwg MHhCNCksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzksIDB4MDApLAorCV9JTklUX0NNRCgweDAwLCAw eENBLCAweDAwKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDQiwgMHgxNiksCisJX0lOSVRfQ01EKDB4 MDAsIDB4Q0MsIDB4QUYpLAorCV9JTklUX0NNRCgweDAwLCAweENELCAweEZGKSwKKwlfSU5JVF9D TUQoMHgwMCwgMHhDRSwgMHhGRiksCisJX0lOSVRfQ01EKDB4MDAsIDB4QjAsIDB4MEEpLAorCV9J TklUX0NNRCgweDAwLCAweEIxLCAweDAwKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCMiwgMHgwOSks CisJX0lOSVRfQ01EKDB4MDAsIDB4QjMsIDB4MTkpLAorCV9JTklUX0NNRCgweDAwLCAweEI0LCAw eDJGKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCNSwgMHg0NCksCisJX0lOSVRfQ01EKDB4MDAsIDB4 QjYsIDB4NTIpLAorCV9JTklUX0NNRCgweDAwLCAweEI3LCAweDZBKSwKKwlfSU5JVF9DTUQoMHgw MCwgMHhCOCwgMHg4QSksCisJX0lOSVRfQ01EKDB4MDAsIDB4QjksIDB4Q0EpLAorCV9JTklUX0NN RCgweDAwLCAweEJBLCAweDBDKSwKKwlfSU5JVF9DTUQoMHgwNSwgMHhCQiwgMHg4NyksCisJX0lO SVRfQ01EKDB4MDAsIDB4QkMsIDB4MDYpLAorCV9JTklUX0NNRCgweDAwLCAweEJELCAweDBBKSwK KwlfSU5JVF9DTUQoMHgwMCwgMHhCRSwgMHg5QiksCisJX0lOSVRfQ01EKDB4MDAsIDB4QkYsIDB4 MEMpLAorCV9JTklUX0NNRCgweDAwLCAweEMwLCAweDNEKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhD MSwgMHg3MSksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzIsIDB4OTApLAorCV9JTklUX0NNRCgweDAw LCAweEMzLCAweEEwKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDNCwgMHhBOCksCisJX0lOSVRfQ01E KDB4MDAsIDB4QzUsIDB4QjEpLAorCV9JTklUX0NNRCgweDAwLCAweEM2LCAweEJCKSwKKwlfSU5J VF9DTUQoMHgwMCwgMHhDNywgMHhDMCksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzgsIDB4QzQpLAor CV9JTklUX0NNRCgweDAwLCAweEM5LCAweDAwKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDQSwgMHgw MCksCisJX0lOSVRfQ01EKDB4MDAsIDB4Q0IsIDB4MTYpLAorCV9JTklUX0NNRCgweDAwLCAweEND LCAweEFGKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDRCwgMHhGRiksCisJX0lOSVRfQ01EKDB4MDAs IDB4Q0UsIDB4RkYpLAorCV9JTklUX0NNRCgweDAwLCAweEIwLCAweDBCKSwKKwlfSU5JVF9DTUQo MHgwMCwgMHhCMSwgMHgwNCksCisJX0lOSVRfQ01EKDB4MDAsIDB4QjIsIDB4MDgpLAorCV9JTklU X0NNRCgweDAwLCAweEIzLCAweDE5KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCNCwgMHgzMSksCisJ X0lOSVRfQ01EKDB4MDAsIDB4QjUsIDB4NDYpLAorCV9JTklUX0NNRCgweDAwLCAweEI2LCAweDU1 KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCNywgMHg2RSksCisJX0lOSVRfQ01EKDB4MDAsIDB4Qjgs IDB4OTIpLAorCV9JTklUX0NNRCgweDAwLCAweEI5LCAweEQ0KSwKKwlfSU5JVF9DTUQoMHgwMCwg MHhCQSwgMHgxQiksCisJX0lOSVRfQ01EKDB4MDUsIDB4QkIsIDB4OUIpLAorCV9JTklUX0NNRCgw eDAwLCAweEJDLCAweDI4KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCRCwgMHgyRCksCisJX0lOSVRf Q01EKDB4MDAsIDB4QkUsIDB4QzMpLAorCV9JTklUX0NNRCgweDAwLCAweEJGLCAweDJGKSwKKwlf SU5JVF9DTUQoMHgwMCwgMHhDMCwgMHg2MiksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzEsIDB4OTkp LAorCV9JTklUX0NNRCgweDAwLCAweEMyLCAweEFCKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDMywg MHhCRiksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzQsIDB4Q0YpLAorCV9JTklUX0NNRCgweDAwLCAw eEM1LCAweERGKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDNiwgMHhGMCksCisJX0lOSVRfQ01EKDB4 MDAsIDB4QzcsIDB4RjkpLAorCV9JTklUX0NNRCgweDAwLCAweEM4LCAweEZDKSwKKwlfSU5JVF9D TUQoMHgwMCwgMHhDOSwgMHgwMCksCisJX0lOSVRfQ01EKDB4MDAsIDB4Q0EsIDB4MDApLAorCV9J TklUX0NNRCgweDAwLCAweENCLCAweDE2KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDQywgMHhBRiks CisJX0lOSVRfQ01EKDB4MDAsIDB4Q0QsIDB4RkYpLAorCV9JTklUX0NNRCgweDAwLCAweENFLCAw eEZGKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCMCwgMHgwQyksCisJX0lOSVRfQ01EKDB4MDAsIDB4 QjEsIDB4MDQpLAorCV9JTklUX0NNRCgweDAwLCAweEIyLCAweDA1KSwKKwlfSU5JVF9DTUQoMHgw MCwgMHhCMywgMHgxNyksCisJX0lOSVRfQ01EKDB4MDAsIDB4QjQsIDB4MkUpLAorCV9JTklUX0NN RCgweDAwLCAweEI1LCAweDQyKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCNiwgMHg1MSksCisJX0lO SVRfQ01EKDB4MDAsIDB4QjcsIDB4NjkpLAorCV9JTklUX0NNRCgweDAwLCAweEI4LCAweDg4KSwK KwlfSU5JVF9DTUQoMHgwMCwgMHhCOSwgMHhDOSksCisJX0lOSVRfQ01EKDB4MDAsIDB4QkEsIDB4 MEMpLAorCV9JTklUX0NNRCgweDA1LCAweEJCLCAweDg2KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhC QywgMHgwMyksCisJX0lOSVRfQ01EKDB4MDAsIDB4QkQsIDB4MDgpLAorCV9JTklUX0NNRCgweDAw LCAweEJFLCAweDk1KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCRiwgMHgwNSksCisJX0lOSVRfQ01E KDB4MDAsIDB4QzAsIDB4MzUpLAorCV9JTklUX0NNRCgweDAwLCAweEMxLCAweDYyKSwKKwlfSU5J VF9DTUQoMHgwMCwgMHhDMiwgMHg4MSksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzMsIDB4OTYpLAor CV9JTklUX0NNRCgweDAwLCAweEM0LCAweDlFKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDNSwgMHhB NSksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzYsIDB4QUQpLAorCV9JTklUX0NNRCgweDAwLCAweEM3 LCAweEIxKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDOCwgMHhCNCksCisJX0lOSVRfQ01EKDB4MDAs IDB4QzksIDB4MDApLAorCV9JTklUX0NNRCgweDAwLCAweENBLCAweDAwKSwKKwlfSU5JVF9DTUQo MHgwMCwgMHhDQiwgMHgxNiksCisJX0lOSVRfQ01EKDB4MDAsIDB4Q0MsIDB4QUYpLAorCV9JTklU X0NNRCgweDAwLCAweENELCAweEZGKSwKKwlfSU5JVF9DTUQoMHg2NCwgMHhDRSwgMHhGRiksCisJ X0lOSVRfQ01EKDB4MDAsIDB4QjAsIDB4MDApLAorCV9JTklUX0NNRCgweDAwLCAweEIzLCAweDA4 KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCMCwgMHgwNCksCisJX0lOSVRfQ01EKDB4MEEsIDB4Qjgs IDB4NjgpLAorCV9JTklUX0NNRCgweDc4LCAweDExKSwKKwlfSU5JVF9DTUQoMHgxNCwgMHgyOSks CisKKwl7fSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGFuZWxfY21kIGJvZV9oaW1heDgy NzlkOHBfb2ZmX2NtZHNbXSA9IHsKKwlfSU5JVF9DTUQoMHgwMCwgMHgyOCksCisJX0lOSVRfQ01E KDB4MDEsIDB4MTApLAorCisJe30sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBhbmVsX2Rl c2MgYm9lX2hpbWF4ODI3OWQ4cF9wYW5lbF9kZXNjID0geworCS5kaXNwbGF5X21vZGUgPSAmYm9l X2hpbWF4ODI3OWQ4cF9kaXNwbGF5X21vZGUsCisJLmJwYyA9IDgsCisJLndpZHRoX21tID0gMTA3 LAorCS5oZWlnaHRfbW0gPSAxNzIsCisJLmRlbGF5X3QxID0gNTAwMCwKKwkucmVzZXRfZGVsYXlf dDIgPSAxNDAwMCwKKwkucmVzZXRfZGVsYXlfdDMgPSAxMDAwLAorCS5yZXNldF9kZWxheV90NCA9 IDEwMDAsCisJLnJlc2V0X2RlbGF5X3Q1ID0gNTAwMCwKKwkubW9kZV9mbGFncyA9IE1JUElfRFNJ X01PREVfVklERU8gfCBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVMU0UgfAorCQkJTUlQSV9E U0lfQ0xPQ0tfTk9OX0NPTlRJTlVPVVMgfCBNSVBJX0RTSV9NT0RFX0xQTSwKKwkuZm9ybWF0ID0g TUlQSV9EU0lfRk1UX1JHQjg4OCwKKwkubGFuZXMgPSA0LAorCS5vbl9jbWRzID0gYm9lX2hpbWF4 ODI3OWQ4cF9vbl9jbWRzLAorCS5vZmZfY21kcyA9IGJvZV9oaW1heDgyNzlkOHBfb2ZmX2NtZHMs Cit9OworCisvKiAxMCBpbmNoICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgYm9lX2hpbWF4ODI3OWQxMHBfZGlzcGxheV9tb2RlID0geworCS5jbG9jayA9IDE1OTQyMCwK KwkuaGRpc3BsYXkgPSAxMjAwLAorCS5oc3luY19zdGFydCA9IDEyMDAgKyA4MCwKKwkuaHN5bmNf ZW5kID0gMTIwMCArIDgwICsgNjAsCisJLmh0b3RhbCA9IDEyMDAgKyA4MCArIDYwICsgMjQsCisJ LnZkaXNwbGF5ID0gMTkyMCwKKwkudnN5bmNfc3RhcnQgPSAxOTIwICsgMTAsCisJLnZzeW5jX2Vu ZCA9IDE5MjAgKyAxMCArIDE0LAorCS52dG90YWwgPSAxOTIwICsgMTAgKyAxNCArIDQsCisJLnZy ZWZyZXNoID0gNjAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBhbmVsX2NtZCBib2VfaGlt YXg4Mjc5ZDEwcF9vbl9jbWRzW10gPSB7CisJX0lOSVRfQ01EKDB4MDAsIDB4QjAsIDB4MDUpLAor CV9JTklUX0NNRCgweDAwLCAweEIxLCAweEU1KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCMywgMHg1 MiksCisJX0lOSVRfQ01EKDB4MDAsIDB4QjAsIDB4MDApLAorCV9JTklUX0NNRCgweDAwLCAweEIz LCAweDg4KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCMCwgMHgwNCksCisJX0lOSVRfQ01EKDB4MDAs IDB4QjgsIDB4MDApLAorCV9JTklUX0NNRCgweDAwLCAweEIwLCAweDAwKSwKKwlfSU5JVF9DTUQo MHgwMCwgMHhCMiwgMHg1MCksCisJX0lOSVRfQ01EKDB4MDAsIDB4QjYsIDB4MDMpLAorCV9JTklU X0NNRCgweDAwLCAweEJBLCAweDhCKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCRiwgMHgxQSksCisJ X0lOSVRfQ01EKDB4MDAsIDB4QzAsIDB4MEYpLAorCV9JTklUX0NNRCgweDAwLCAweEMyLCAweDBD KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDMywgMHgwMiksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzQs IDB4MEMpLAorCV9JTklUX0NNRCgweDAwLCAweEM1LCAweDAyKSwKKwlfSU5JVF9DTUQoMHgwMCwg MHhCMCwgMHgwMSksCisJX0lOSVRfQ01EKDB4MDAsIDB4RTAsIDB4MjYpLAorCV9JTklUX0NNRCgw eDAwLCAweEUxLCAweDI2KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhEQywgMHgwMCksCisJX0lOSVRf Q01EKDB4MDAsIDB4REQsIDB4MDApLAorCV9JTklUX0NNRCgweDAwLCAweENDLCAweDI2KSwKKwlf SU5JVF9DTUQoMHgwMCwgMHhDRCwgMHgyNiksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzgsIDB4MDAp LAorCV9JTklUX0NNRCgweDAwLCAweEM5LCAweDAwKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhEMiwg MHgwNCksCisJX0lOSVRfQ01EKDB4MDAsIDB4RDMsIDB4MDQpLAorCV9JTklUX0NNRCgweDAwLCAw eEU2LCAweDAzKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhFNywgMHgwMyksCisJX0lOSVRfQ01EKDB4 MDAsIDB4QzQsIDB4MDgpLAorCV9JTklUX0NNRCgweDAwLCAweEM1LCAweDA4KSwKKwlfSU5JVF9D TUQoMHgwMCwgMHhEOCwgMHgwNyksCisJX0lOSVRfQ01EKDB4MDAsIDB4RDksIDB4MDcpLAorCV9J TklUX0NNRCgweDAwLCAweEMyLCAweDA2KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDMywgMHgwNiks CisJX0lOSVRfQ01EKDB4MDAsIDB4RDYsIDB4MDUpLAorCV9JTklUX0NNRCgweDAwLCAweEQ3LCAw eDA1KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDMCwgMHgwQyksCisJX0lOSVRfQ01EKDB4MDAsIDB4 QzEsIDB4MEMpLAorCV9JTklUX0NNRCgweDAwLCAweEQ0LCAweDBCKSwKKwlfSU5JVF9DTUQoMHgw MCwgMHhENSwgMHgwQiksCisJX0lOSVRfQ01EKDB4MDAsIDB4Q0EsIDB4MEEpLAorCV9JTklUX0NN RCgweDAwLCAweENCLCAweDBBKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhERSwgMHgwOSksCisJX0lO SVRfQ01EKDB4MDAsIDB4REYsIDB4MDkpLAorCV9JTklUX0NNRCgweDAwLCAweEM2LCAweDI2KSwK KwlfSU5JVF9DTUQoMHgwMCwgMHhDNywgMHgyNiksCisJX0lOSVRfQ01EKDB4MDAsIDB4Q0UsIDB4 MDApLAorCV9JTklUX0NNRCgweDAwLCAweENGLCAweDAwKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhE QSwgMHgyNiksCisJX0lOSVRfQ01EKDB4MDAsIDB4REIsIDB4MjYpLAorCV9JTklUX0NNRCgweDAw LCAweEUyLCAweDAwKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhFMywgMHgwMCksCisJX0lOSVRfQ01E KDB4MDAsIDB4QjAsIDB4MDIpLAorCV9JTklUX0NNRCgweDAwLCAweEMwLCAweDAwKSwKKwlfSU5J VF9DTUQoMHgwMCwgMHhDMSwgMHgwNyksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzIsIDB4MEQpLAor CV9JTklUX0NNRCgweDAwLCAweEMzLCAweDE4KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDNCwgMHgy NyksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzUsIDB4MjgpLAorCV9JTklUX0NNRCgweDAwLCAweEM2 LCAweDMwKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDNywgMHgyRSksCisJX0lOSVRfQ01EKDB4MDAs IDB4QzgsIDB4MkYpLAorCV9JTklUX0NNRCgweDAwLCAweEM5LCAweDFBKSwKKwlfSU5JVF9DTUQo MHgwMCwgMHhDQSwgMHgyMCksCisJX0lOSVRfQ01EKDB4MDAsIDB4Q0IsIDB4MjkpLAorCV9JTklU X0NNRCgweDAwLCAweENDLCAweDI2KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDRCwgMHgzMiksCisJ X0lOSVRfQ01EKDB4MDAsIDB4Q0UsIDB4MzMpLAorCV9JTklUX0NNRCgweDAwLCAweENGLCAweDMx KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhEMCwgMHgwNiksCisJX0lOSVRfQ01EKDB4MDAsIDB4RDIs IDB4MDApLAorCV9JTklUX0NNRCgweDAwLCAweEQzLCAweDA3KSwKKwlfSU5JVF9DTUQoMHgwMCwg MHhENCwgMHgxMiksCisJX0lOSVRfQ01EKDB4MDAsIDB4RDUsIDB4MjYpLAorCV9JTklUX0NNRCgw eDAwLCAweEQ2LCAweDNEKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhENywgMHgzRiksCisJX0lOSVRf Q01EKDB4MDAsIDB4RDgsIDB4M0YpLAorCV9JTklUX0NNRCgweDAwLCAweEQ5LCAweDNGKSwKKwlf SU5JVF9DTUQoMHgwMCwgMHhEQSwgMHgzRiksCisJX0lOSVRfQ01EKDB4MDAsIDB4REIsIDB4M0Yp LAorCV9JTklUX0NNRCgweDAwLCAweERDLCAweDNGKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhERCwg MHgzRiksCisJX0lOSVRfQ01EKDB4MDAsIDB4REUsIDB4M0YpLAorCV9JTklUX0NNRCgweDAwLCAw eERGLCAweDNBKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhFMCwgMHgzNyksCisJX0lOSVRfQ01EKDB4 MDAsIDB4RTEsIDB4MzUpLAorCV9JTklUX0NNRCgweDAwLCAweEUyLCAweDA3KSwKKwlfSU5JVF9D TUQoMHgwMCwgMHhCMCwgMHgwMyksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzgsIDB4MEIpLAorCV9J TklUX0NNRCgweDAwLCAweEM5LCAweDA3KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDMywgMHgwMCks CisJX0lOSVRfQ01EKDB4MDAsIDB4RTcsIDB4MDApLAorCV9JTklUX0NNRCgweDAwLCAweEM1LCAw eDJBKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhERSwgMHgyQSksCisJX0lOSVRfQ01EKDB4MDAsIDB4 Q0EsIDB4NDMpLAorCV9JTklUX0NNRCgweDAwLCAweEM5LCAweDA3KSwKKwlfSU5JVF9DTUQoMHgw MCwgMHhFNCwgMHhDMCksCisJX0lOSVRfQ01EKDB4MDAsIDB4RTUsIDB4MEQpLAorCV9JTklUX0NN RCgweDAwLCAweENCLCAweDAwKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCMCwgMHgwNiksCisJX0lO SVRfQ01EKDB4MDAsIDB4QjgsIDB4QTUpLAorCV9JTklUX0NNRCgweDAwLCAweEMwLCAweEE1KSwK KwlfSU5JVF9DTUQoMHgwMCwgMHhDNywgMHgwRiksCisJX0lOSVRfQ01EKDB4MDAsIDB4RDUsIDB4 MzIpLAorCV9JTklUX0NNRCgweDAwLCAweEI4LCAweDAwKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhD MCwgMHgwMCksCisJX0lOSVRfQ01EKDB4MDAsIDB4QkMsIDB4MDApLAorCV9JTklUX0NNRCgweDAw LCAweEIwLCAweDA3KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCMSwgMHgwMCksCisJX0lOSVRfQ01E KDB4MDAsIDB4QjIsIDB4MDkpLAorCV9JTklUX0NNRCgweDAwLCAweEIzLCAweDE5KSwKKwlfSU5J VF9DTUQoMHgwMCwgMHhCNCwgMHgyRiksCisJX0lOSVRfQ01EKDB4MDAsIDB4QjUsIDB4NDQpLAor CV9JTklUX0NNRCgweDAwLCAweEI2LCAweDUyKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCNywgMHg2 QSksCisJX0lOSVRfQ01EKDB4MDAsIDB4QjgsIDB4OEEpLAorCV9JTklUX0NNRCgweDAwLCAweEI5 LCAweENBKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCQSwgMHgwQyksCisJX0lOSVRfQ01EKDB4MDAs IDB4QkIsIDB4ODcpLAorCV9JTklUX0NNRCgweDAwLCAweEJDLCAweDA2KSwKKwlfSU5JVF9DTUQo MHgwMCwgMHhCRCwgMHgwQSksCisJX0lOSVRfQ01EKDB4MDAsIDB4QkUsIDB4OUIpLAorCV9JTklU X0NNRCgweDAwLCAweEJGLCAweDBDKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDMCwgMHgzRCksCisJ X0lOSVRfQ01EKDB4MDAsIDB4QzEsIDB4NzEpLAorCV9JTklUX0NNRCgweDAwLCAweEMyLCAweDkw KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDMywgMHhBMCksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzQs IDB4QTgpLAorCV9JTklUX0NNRCgweDAwLCAweEM1LCAweEIxKSwKKwlfSU5JVF9DTUQoMHgwMCwg MHhDNiwgMHhCQiksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzcsIDB4QzApLAorCV9JTklUX0NNRCgw eDAwLCAweEM4LCAweEM0KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDOSwgMHgwMCksCisJX0lOSVRf Q01EKDB4MDAsIDB4Q0EsIDB4MDApLAorCV9JTklUX0NNRCgweDAwLCAweENCLCAweDE2KSwKKwlf SU5JVF9DTUQoMHgwMCwgMHhDQywgMHhBRiksCisJX0lOSVRfQ01EKDB4MDAsIDB4Q0QsIDB4RkYp LAorCV9JTklUX0NNRCgweDAwLCAweENFLCAweEZGKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCMCwg MHgwOCksCisJX0lOSVRfQ01EKDB4MDAsIDB4QjEsIDB4MDQpLAorCV9JTklUX0NNRCgweDAwLCAw eEIyLCAweDA4KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCMywgMHgxOSksCisJX0lOSVRfQ01EKDB4 MDAsIDB4QjQsIDB4MzEpLAorCV9JTklUX0NNRCgweDAwLCAweEI1LCAweDQ2KSwKKwlfSU5JVF9D TUQoMHgwMCwgMHhCNiwgMHg1NSksCisJX0lOSVRfQ01EKDB4MDAsIDB4QjcsIDB4NkUpLAorCV9J TklUX0NNRCgweDAwLCAweEI4LCAweDkyKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCOSwgMHhENCks CisJX0lOSVRfQ01EKDB4MDAsIDB4QkEsIDB4MUIpLAorCV9JTklUX0NNRCgweDAwLCAweEJCLCAw eDlCKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCQywgMHgyOCksCisJX0lOSVRfQ01EKDB4MDAsIDB4 QkQsIDB4MkQpLAorCV9JTklUX0NNRCgweDAwLCAweEJFLCAweEMzKSwKKwlfSU5JVF9DTUQoMHgw MCwgMHhCRiwgMHgyRiksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzAsIDB4NjIpLAorCV9JTklUX0NN RCgweDAwLCAweEMxLCAweDk5KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDMiwgMHhBQiksCisJX0lO SVRfQ01EKDB4MDAsIDB4QzMsIDB4QkYpLAorCV9JTklUX0NNRCgweDAwLCAweEM0LCAweENGKSwK KwlfSU5JVF9DTUQoMHgwMCwgMHhDNSwgMHhERiksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzYsIDB4 RjApLAorCV9JTklUX0NNRCgweDAwLCAweEM3LCAweEY5KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhD OCwgMHhGQyksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzksIDB4MDApLAorCV9JTklUX0NNRCgweDAw LCAweENBLCAweDAwKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDQiwgMHgxNiksCisJX0lOSVRfQ01E KDB4MDAsIDB4Q0MsIDB4QUYpLAorCV9JTklUX0NNRCgweDAwLCAweENELCAweEZGKSwKKwlfSU5J VF9DTUQoMHgwMCwgMHhDRSwgMHhGRiksCisJX0lOSVRfQ01EKDB4MDAsIDB4QjAsIDB4MDkpLAor CV9JTklUX0NNRCgweDAwLCAweEIxLCAweDA0KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCMiwgMHgw NSksCisJX0lOSVRfQ01EKDB4MDAsIDB4QjMsIDB4MTcpLAorCV9JTklUX0NNRCgweDAwLCAweEI0 LCAweDJFKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCNSwgMHg0MiksCisJX0lOSVRfQ01EKDB4MDAs IDB4QjYsIDB4NTEpLAorCV9JTklUX0NNRCgweDAwLCAweEI3LCAweDY5KSwKKwlfSU5JVF9DTUQo MHgwMCwgMHhCOCwgMHg4OCksCisJX0lOSVRfQ01EKDB4MDAsIDB4QjksIDB4QzkpLAorCV9JTklU X0NNRCgweDAwLCAweEJBLCAweDBDKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCQiwgMHg4NiksCisJ X0lOSVRfQ01EKDB4MDAsIDB4QkMsIDB4MDMpLAorCV9JTklUX0NNRCgweDAwLCAweEJELCAweDA4 KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCRSwgMHg5NSksCisJX0lOSVRfQ01EKDB4MDAsIDB4QkYs IDB4MDUpLAorCV9JTklUX0NNRCgweDAwLCAweEMwLCAweDM1KSwKKwlfSU5JVF9DTUQoMHgwMCwg MHhDMSwgMHg2MiksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzIsIDB4ODEpLAorCV9JTklUX0NNRCgw eDAwLCAweEMzLCAweDk2KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDNCwgMHg5RSksCisJX0lOSVRf Q01EKDB4MDAsIDB4QzUsIDB4QTUpLAorCV9JTklUX0NNRCgweDAwLCAweEM2LCAweEFEKSwKKwlf SU5JVF9DTUQoMHgwMCwgMHhDNywgMHhCMSksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzgsIDB4QjQp LAorCV9JTklUX0NNRCgweDAwLCAweEM5LCAweDAwKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDQSwg MHgwMCksCisJX0lOSVRfQ01EKDB4MDAsIDB4Q0IsIDB4MTYpLAorCV9JTklUX0NNRCgweDAwLCAw eENDLCAweEFGKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDRCwgMHhGRiksCisJX0lOSVRfQ01EKDB4 MDAsIDB4Q0UsIDB4RkYpLAorCV9JTklUX0NNRCgweDAwLCAweEIwLCAweDBBKSwKKwlfSU5JVF9D TUQoMHgwMCwgMHhCMSwgMHgwMCksCisJX0lOSVRfQ01EKDB4MDAsIDB4QjIsIDB4MDkpLAorCV9J TklUX0NNRCgweDAwLCAweEIzLCAweDE5KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCNCwgMHgyRiks CisJX0lOSVRfQ01EKDB4MDAsIDB4QjUsIDB4NDQpLAorCV9JTklUX0NNRCgweDAwLCAweEI2LCAw eDUyKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCNywgMHg2QSksCisJX0lOSVRfQ01EKDB4MDAsIDB4 QjgsIDB4OEEpLAorCV9JTklUX0NNRCgweDAwLCAweEI5LCAweENBKSwKKwlfSU5JVF9DTUQoMHgw MCwgMHhCQSwgMHgwQyksCisJX0lOSVRfQ01EKDB4MDAsIDB4QkIsIDB4ODcpLAorCV9JTklUX0NN RCgweDAwLCAweEJDLCAweDA2KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCRCwgMHgwQSksCisJX0lO SVRfQ01EKDB4MDAsIDB4QkUsIDB4OUIpLAorCV9JTklUX0NNRCgweDAwLCAweEJGLCAweDBDKSwK KwlfSU5JVF9DTUQoMHgwMCwgMHhDMCwgMHgzRCksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzEsIDB4 NzEpLAorCV9JTklUX0NNRCgweDAwLCAweEMyLCAweDkwKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhD MywgMHhBMCksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzQsIDB4QTgpLAorCV9JTklUX0NNRCgweDAw LCAweEM1LCAweEIxKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDNiwgMHhCQiksCisJX0lOSVRfQ01E KDB4MDAsIDB4QzcsIDB4QzApLAorCV9JTklUX0NNRCgweDAwLCAweEM4LCAweEM0KSwKKwlfSU5J VF9DTUQoMHgwMCwgMHhDOSwgMHgwMCksCisJX0lOSVRfQ01EKDB4MDAsIDB4Q0EsIDB4MDApLAor CV9JTklUX0NNRCgweDAwLCAweENCLCAweDE2KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDQywgMHhB RiksCisJX0lOSVRfQ01EKDB4MDAsIDB4Q0QsIDB4RkYpLAorCV9JTklUX0NNRCgweDAwLCAweENF LCAweEZGKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCMCwgMHgwQiksCisJX0lOSVRfQ01EKDB4MDAs IDB4QjEsIDB4MDQpLAorCV9JTklUX0NNRCgweDAwLCAweEIyLCAweDA4KSwKKwlfSU5JVF9DTUQo MHgwMCwgMHhCMywgMHgxOSksCisJX0lOSVRfQ01EKDB4MDAsIDB4QjQsIDB4MzEpLAorCV9JTklU X0NNRCgweDAwLCAweEI1LCAweDQ2KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCNiwgMHg1NSksCisJ X0lOSVRfQ01EKDB4MDAsIDB4QjcsIDB4NkUpLAorCV9JTklUX0NNRCgweDAwLCAweEI4LCAweDky KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCOSwgMHhENCksCisJX0lOSVRfQ01EKDB4MDAsIDB4QkEs IDB4MUIpLAorCV9JTklUX0NNRCgweDAwLCAweEJCLCAweDlCKSwKKwlfSU5JVF9DTUQoMHgwMCwg MHhCQywgMHgyOCksCisJX0lOSVRfQ01EKDB4MDAsIDB4QkQsIDB4MkQpLAorCV9JTklUX0NNRCgw eDAwLCAweEJFLCAweEMzKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCRiwgMHgyRiksCisJX0lOSVRf Q01EKDB4MDAsIDB4QzAsIDB4NjIpLAorCV9JTklUX0NNRCgweDAwLCAweEMxLCAweDk5KSwKKwlf SU5JVF9DTUQoMHgwMCwgMHhDMiwgMHhBQiksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzMsIDB4QkYp LAorCV9JTklUX0NNRCgweDAwLCAweEM0LCAweENGKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDNSwg MHhERiksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzYsIDB4RjApLAorCV9JTklUX0NNRCgweDAwLCAw eEM3LCAweEY5KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDOCwgMHhGQyksCisJX0lOSVRfQ01EKDB4 MDAsIDB4QzksIDB4MDApLAorCV9JTklUX0NNRCgweDAwLCAweENBLCAweDAwKSwKKwlfSU5JVF9D TUQoMHgwMCwgMHhDQiwgMHgxNiksCisJX0lOSVRfQ01EKDB4MDAsIDB4Q0MsIDB4QUYpLAorCV9J TklUX0NNRCgweDAwLCAweENELCAweEZGKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDRSwgMHhGRiks CisJX0lOSVRfQ01EKDB4MDAsIDB4QjAsIDB4MEMpLAorCV9JTklUX0NNRCgweDAwLCAweEIxLCAw eDA0KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCMiwgMHgwNSksCisJX0lOSVRfQ01EKDB4MDAsIDB4 QjMsIDB4MTcpLAorCV9JTklUX0NNRCgweDAwLCAweEI0LCAweDJFKSwKKwlfSU5JVF9DTUQoMHgw MCwgMHhCNSwgMHg0MiksCisJX0lOSVRfQ01EKDB4MDAsIDB4QjYsIDB4NTEpLAorCV9JTklUX0NN RCgweDAwLCAweEI3LCAweDY5KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCOCwgMHg4OCksCisJX0lO SVRfQ01EKDB4MDAsIDB4QjksIDB4QzkpLAorCV9JTklUX0NNRCgweDAwLCAweEJBLCAweDBDKSwK KwlfSU5JVF9DTUQoMHgwMCwgMHhCQiwgMHg4NiksCisJX0lOSVRfQ01EKDB4MDAsIDB4QkMsIDB4 MDMpLAorCV9JTklUX0NNRCgweDAwLCAweEJELCAweDA4KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhC RSwgMHg5NSksCisJX0lOSVRfQ01EKDB4MDAsIDB4QkYsIDB4MDUpLAorCV9JTklUX0NNRCgweDAw LCAweEMwLCAweDM1KSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDMSwgMHg2MiksCisJX0lOSVRfQ01E KDB4MDAsIDB4QzIsIDB4ODEpLAorCV9JTklUX0NNRCgweDAwLCAweEMzLCAweDk2KSwKKwlfSU5J VF9DTUQoMHgwMCwgMHhDNCwgMHg5RSksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzUsIDB4QTUpLAor CV9JTklUX0NNRCgweDAwLCAweEM2LCAweEFEKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDNywgMHhC MSksCisJX0lOSVRfQ01EKDB4MDAsIDB4QzgsIDB4QjQpLAorCV9JTklUX0NNRCgweDAwLCAweEM5 LCAweDAwKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhDQSwgMHgwMCksCisJX0lOSVRfQ01EKDB4MDAs IDB4Q0IsIDB4MTYpLAorCV9JTklUX0NNRCgweDAwLCAweENDLCAweEFGKSwKKwlfSU5JVF9DTUQo MHgwMCwgMHhDRCwgMHhGRiksCisJX0lOSVRfQ01EKDB4MDAsIDB4Q0UsIDB4RkYpLAorCV9JTklU X0NNRCgweDAwLCAweEIwLCAweDAwKSwKKwlfSU5JVF9DTUQoMHgwMCwgMHhCMywgMHgwOCksCisJ X0lOSVRfQ01EKDB4MDAsIDB4QjAsIDB4MDQpLAorCV9JTklUX0NNRCgweDY0LCAweEI4LCAweDY4 KSwKKworCXt9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwYW5lbF9jbWQgYm9lX2hpbWF4 ODI3OWQxMHBfb2ZmX2NtZHNbXSA9IHsKKwlfSU5JVF9DTUQoMHgwMCwgMHgyOCksCisJX0lOSVRf Q01EKDB4MDEsIDB4MTApLAorCisJe30sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBhbmVs X2Rlc2MgYm9lX2hpbWF4ODI3OWQxMHBfcGFuZWxfZGVzYyA9IHsKKwkuZGlzcGxheV9tb2RlID0g JmJvZV9oaW1heDgyNzlkMTBwX2Rpc3BsYXlfbW9kZSwKKwkuYnBjID0gOCwKKwkud2lkdGhfbW0g PSAxMzUsCisJLmhlaWdodF9tbSA9IDIxNiwKKwkuZGVsYXlfdDEgPSA1MDAwLAorCS5yZXNldF9k ZWxheV90MiA9IDE0MDAwLAorCS5yZXNldF9kZWxheV90MyA9IDEwMDAsCisJLnJlc2V0X2RlbGF5 X3Q0ID0gMTAwMCwKKwkucmVzZXRfZGVsYXlfdDUgPSA1MDAwLAorCS5tb2RlX2ZsYWdzID0gTUlQ SV9EU0lfTU9ERV9WSURFTyB8IE1JUElfRFNJX01PREVfVklERU9fU1lOQ19QVUxTRSB8CisJCQlN SVBJX0RTSV9DTE9DS19OT05fQ09OVElOVU9VUyB8IE1JUElfRFNJX01PREVfTFBNLAorCS5mb3Jt YXQgPSBNSVBJX0RTSV9GTVRfUkdCODg4LAorCS5sYW5lcyA9IDQsCisJLm9uX2NtZHMgPSBib2Vf aGltYXg4Mjc5ZDEwcF9vbl9jbWRzLAorCS5vZmZfY21kcyA9IGJvZV9oaW1heDgyNzlkMTBwX29m Zl9jbWRzLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcGFuZWxfb2Zf bWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImJvZSxoaW1heDgyNzlkOHAiLAorCSAgLmRh dGEgPSAmYm9lX2hpbWF4ODI3OWQ4cF9wYW5lbF9kZXNjCisJfSwgeyAuY29tcGF0aWJsZSA9ICJi b2UsaGltYXg4Mjc5ZDEwcCIsCisJICAuZGF0YSA9ICZib2VfaGltYXg4Mjc5ZDEwcF9wYW5lbF9k ZXNjCisJfSwgeworCQkvKiBzZW50aW5lbCAqLworCX0KK307CitNT0RVTEVfREVWSUNFX1RBQkxF KG9mLCBwYW5lbF9vZl9tYXRjaCk7CisKK3N0YXRpYyBpbnQgcGFuZWxfYWRkKHN0cnVjdCBwYW5l bF9pbmZvICpwaW5mbykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGluZm8tPmxpbmstPmRl djsKKwlpbnQgZXJyOworCisJcGluZm8tPnBwMThfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlv bmFsKGRldiwgInBwMTgiLCBHUElPRF9PVVRfTE9XKTsKKwlpZiAoSVNfRVJSKHBpbmZvLT5wcDE4 X2dwaW8pKSB7CisJCWVyciA9IFBUUl9FUlIocGluZm8tPnBwMThfZ3Bpbyk7CisJCWRldl9lcnIo ZGV2LCAiZmFpbGVkIHRvIGdldCBwcDE4IGdwaW86ICVkXG4iLCBlcnIpOworCQlwaW5mby0+cHAx OF9ncGlvID0gTlVMTDsKKwl9CisKKwlwaW5mby0+cHAzM19ncGlvID0gZGV2bV9ncGlvZF9nZXRf b3B0aW9uYWwoZGV2LCAicHAzMyIsIEdQSU9EX09VVF9MT1cpOworCWlmIChJU19FUlIocGluZm8t PnBwMzNfZ3BpbykpIHsKKwkJZXJyID0gUFRSX0VSUihwaW5mby0+cHAzM19ncGlvKTsKKwkJZGV2 X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IHBwMzMgZ3BpbzogJWRcbiIsIGVycik7CisJCXBpbmZv LT5wcDMzX2dwaW8gPSBOVUxMOworCX0KKworCXBpbmZvLT5lbmFibGVfZ3BpbyA9IGRldm1fZ3Bp b2RfZ2V0X29wdGlvbmFsKGRldiwgImVuYWJsZSIsCisJCQkJCQkgICAgR1BJT0RfT1VUX0xPVyk7 CisJaWYgKElTX0VSUihwaW5mby0+ZW5hYmxlX2dwaW8pKSB7CisJCWVyciA9IFBUUl9FUlIocGlu Zm8tPmVuYWJsZV9ncGlvKTsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IGVuYWJsZSBn cGlvOiAlZFxuIiwgZXJyKTsKKwkJcGluZm8tPmVuYWJsZV9ncGlvID0gTlVMTDsKKwl9CisKKwlw aW5mby0+YmFja2xpZ2h0ID0gZGV2bV9vZl9maW5kX2JhY2tsaWdodChkZXYpOworCWlmIChJU19F UlIocGluZm8tPmJhY2tsaWdodCkpCisJCXJldHVybiBQVFJfRVJSKHBpbmZvLT5iYWNrbGlnaHQp OworCisJZHJtX3BhbmVsX2luaXQoJnBpbmZvLT5iYXNlKTsKKwlwaW5mby0+YmFzZS5mdW5jcyA9 ICZwYW5lbF9mdW5jczsKKwlwaW5mby0+YmFzZS5kZXYgPSAmcGluZm8tPmxpbmstPmRldjsKKwor CWVyciA9IGRybV9wYW5lbF9hZGQoJnBpbmZvLT5iYXNlKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0 dXJuIGVycjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwYW5lbF9kZWwoc3RydWN0 IHBhbmVsX2luZm8gKnBpbmZvKQoreworCWlmIChwaW5mby0+YmFzZS5kZXYpCisJCWRybV9wYW5l bF9yZW1vdmUoJnBpbmZvLT5iYXNlKTsKK30KKworc3RhdGljIGludCBwYW5lbF9wcm9iZShzdHJ1 Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kpCit7CisJc3RydWN0IHBhbmVsX2luZm8gKnBpbmZvOwor CWNvbnN0IHN0cnVjdCBwYW5lbF9kZXNjICpkZXNjOworCWludCBlcnI7CisKKwlwaW5mbyA9IGRl dm1fa3phbGxvYygmZHNpLT5kZXYsIHNpemVvZigqcGluZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAo IXBpbmZvKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRlc2MgPSBvZl9kZXZpY2VfZ2V0X21hdGNo X2RhdGEoJmRzaS0+ZGV2KTsKKwlkc2ktPm1vZGVfZmxhZ3MgPSBkZXNjLT5tb2RlX2ZsYWdzOwor CWRzaS0+Zm9ybWF0ID0gZGVzYy0+Zm9ybWF0OworCWRzaS0+bGFuZXMgPSBkZXNjLT5sYW5lczsK KwlwaW5mby0+ZGVzYyA9IGRlc2M7CisKKwlwaW5mby0+bGluayA9IGRzaTsKKwltaXBpX2RzaV9z ZXRfZHJ2ZGF0YShkc2ksIHBpbmZvKTsKKworCWVyciA9IHBhbmVsX2FkZChwaW5mbyk7CisJaWYg KGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gbWlwaV9kc2lfYXR0YWNoKGRzaSk7 Cit9CisKK3N0YXRpYyBpbnQgcGFuZWxfcmVtb3ZlKHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRz aSkKK3sKKwlzdHJ1Y3QgcGFuZWxfaW5mbyAqcGluZm8gPSBtaXBpX2RzaV9nZXRfZHJ2ZGF0YShk c2kpOworCWludCBlcnI7CisKKwllcnIgPSBib2VfcGFuZWxfdW5wcmVwYXJlKCZwaW5mby0+YmFz ZSk7CisJaWYgKGVyciA8IDApCisJCURSTV9ERVZfRVJST1IoJmRzaS0+ZGV2LCAiZmFpbGVkIHRv IHVucHJlcGFyZSBwYW5lbDogJWRcbiIsCisJCQkJCQllcnIpOworCisJZXJyID0gYm9lX3BhbmVs X2Rpc2FibGUoJnBpbmZvLT5iYXNlKTsKKwlpZiAoZXJyIDwgMCkKKwkJRFJNX0RFVl9FUlJPUigm ZHNpLT5kZXYsICJmYWlsZWQgdG8gZGlzYWJsZSBwYW5lbDogJWRcbiIsIGVycik7CisKKwllcnIg PSBtaXBpX2RzaV9kZXRhY2goZHNpKTsKKwlpZiAoZXJyIDwgMCkKKwkJRFJNX0RFVl9FUlJPUigm ZHNpLT5kZXYsICJmYWlsZWQgdG8gZGV0YWNoIGZyb20gRFNJIGhvc3Q6ICVkXG4iLAorCQkJCQkg IGVycik7CisKKwlkcm1fcGFuZWxfZGV0YWNoKCZwaW5mby0+YmFzZSk7CisJcGFuZWxfZGVsKHBp bmZvKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwYW5lbF9zaHV0ZG93bihzdHJ1 Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kpCit7CisJc3RydWN0IHBhbmVsX2luZm8gKnBpbmZvID0g bWlwaV9kc2lfZ2V0X2RydmRhdGEoZHNpKTsKKworCWJvZV9wYW5lbF9kaXNhYmxlKCZwaW5mby0+ YmFzZSk7CisJYm9lX3BhbmVsX3VucHJlcGFyZSgmcGluZm8tPmJhc2UpOworfQorCitzdGF0aWMg c3RydWN0IG1pcGlfZHNpX2RyaXZlciBwYW5lbF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJ Lm5hbWUgPSAicGFuZWwtYm9lLWhpbWF4ODI3OWQiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBwYW5l bF9vZl9tYXRjaCwKKwl9LAorCS5wcm9iZSA9IHBhbmVsX3Byb2JlLAorCS5yZW1vdmUgPSBwYW5l bF9yZW1vdmUsCisJLnNodXRkb3duID0gcGFuZWxfc2h1dGRvd24sCit9OworbW9kdWxlX21pcGlf ZHNpX2RyaXZlcihwYW5lbF9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJKZXJyeSBIYW4gPGhh bnh1NUBodWFxaW4uY29ycC1wYXJ0bmVyLmdvb2dsZS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJ T04oIkJvZSBIaW1heDgyNzlkIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwot LSAKMS45LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA==