From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Jt6vb-0000k7-4i for qemu-devel@nongnu.org; Mon, 05 May 2008 16:04:51 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Jt6vZ-0000jv-V5 for qemu-devel@nongnu.org; Mon, 05 May 2008 16:04:50 -0400 Received: from [199.232.76.173] (port=44149 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Jt6vZ-0000js-69 for qemu-devel@nongnu.org; Mon, 05 May 2008 16:04:49 -0400 Received: from ug-out-1314.google.com ([66.249.92.175]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1Jt6vY-0004yl-1a for qemu-devel@nongnu.org; Mon, 05 May 2008 16:04:48 -0400 Received: by ug-out-1314.google.com with SMTP id m2so851145uge.4 for ; Mon, 05 May 2008 13:04:45 -0700 (PDT) Message-ID: Date: Mon, 5 May 2008 22:04:45 +0200 From: "andrzej zaborowski" MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_2788_15937703.1210017885291" Subject: [Qemu-devel] [PATCH] ARM host (TCG only) Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Qemu mailing list ------=_Part_2788_15937703.1210017885291 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-Disposition: inline The attached file adds ARM as TCG target (qemu host). It is very basic and I'm sure several things only work by dumb luck and other don't work at all. TCG ops are mostly complete except division. It uses only armv4 instructions. I tested only ARM target and I was able to boot PalmOS, Linux and u-boot. The hosts were Nokia n810 (armv6) and Neo1973 (armv4). There's still a bug somewhere because on linux guest some filesystems won't work for / (Linux will just be unable to find init). TODO: * Qemu load and store ops are hacky and don't use the TLB cache. It doesn't have as much impact as I expected - PalmOS works very smoothly (maybe because it uses DMA for many things) but Linux decompressor is rather slow. * No division, so even targets fully converted to TCG abort when dividing. * It should use a constants pool for immediates, like gcc. * No user mode support. * Probably unrelated to TCG, the bug causing some cpu loop exit requests to be lost is still sometimes visible on ARM, causing qemu to get stuck in the exec loop if not using -clock unix and no SDL. Cheers -- Please do not print this email unless absolutely necessary. Spread environmental awareness. ------=_Part_2788_15937703.1210017885291 Content-Type: text/x-patch; name=qemu-arm-host.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_ffvh7azw Content-Disposition: attachment; filename=qemu-arm-host.patch ZGlmZiAtLWdpdCBhL2NwdS1leGVjLmMgYi9jcHUtZXhlYy5jCmluZGV4IDI1ZGNmMmIuLmY3NGU2 YTYgMTAwNjQ0Ci0tLSBhL2NwdS1leGVjLmMKKysrIGIvY3B1LWV4ZWMuYwpAQCAtNjc0LDcgKzY3 NCw3IEBAIGludCBjcHVfZXhlYyhDUFVTdGF0ZSAqZW52MSkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgInIxOCIsICJyMTkiLCAicjIwIiwgInIyMSIsICJyMjIiLCAicjIzIiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInIyNCIsICJyMjUiLCAicjI2IiwgInIyNyIs ICJyMjgiLCAicjI5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInIzMCIsICJy MzEiKTsKLSNlbGlmIGRlZmluZWQoX19hcm1fXykKKyNlbGlmIDAgJiYgZGVmaW5lZChfX2FybV9f KQogICAgICAgICAgICAgICAgIGFzbSB2b2xhdGlsZSAoIm1vdiBwYywgJTBcblx0IgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIi5nbG9iYWwgZXhlY19sb29wXG5cdCIKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJleGVjX2xvb3A6XG5cdCIKZGlmZiAtLWdpdCBhL2R5bmdl bi5jIGIvZHluZ2VuLmMKaW5kZXggMzY5ZDgxOS4uYjg1NzhhOSAxMDA2NDQKLS0tIGEvZHluZ2Vu LmMKKysrIGIvZHluZ2VuLmMKQEAgLTEzNDIsMjEgKzEzNDIsMjEgQEAgaW50IGFybV9lbWl0X2xk cl9pbmZvKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfb2Zmc2V0LAogICAg ICAgICAgICAgICAgIHNwYXJlID0gbWF4X3Bvb2wgLSBvZmZzZXQ7CiAgICAgICAgICAgICBpZiAo KG9mZnNldCAmIDMpICE9MCkKICAgICAgICAgICAgICAgICBlcnJvcigiJXM6JTA0eDogcGMgb2Zm c2V0IG11c3QgYmUgMzIgYml0IGFsaWduZWQiLAotICAgICAgICAgICAgICAgICAgICAgIG5hbWUs IHN0YXJ0X29mZnNldCArIHAgLSBwX3N0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgICBuYW1l LCAoaW50KSAoc3RhcnRfb2Zmc2V0ICsgcCAtIHBfc3RhcnQpKTsKICAgICAgICAgICAgIGlmIChv ZmZzZXQgPCAwKQogICAgICAgICAgICAgICAgIGVycm9yKCIlczolMDR4OiBFbWJlZGRlZCBsaXRl cmFsIHZhbHVlIiwKLSAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBzdGFydF9vZmZzZXQgKyBw IC0gcF9zdGFydCk7CisgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgKGludCkgKHN0YXJ0X29m ZnNldCArIHAgLSBwX3N0YXJ0KSk7CiAgICAgICAgICAgICBwY19vZmZzZXQgPSBwIC0gcF9zdGFy dCArIG9mZnNldCArIDg7CiAgICAgICAgICAgICBpZiAocGNfb2Zmc2V0IDw9IChwIC0gcF9zdGFy dCkgfHwKICAgICAgICAgICAgICAgICBwY19vZmZzZXQgPj0gKHBfZW5kIC0gcF9zdGFydCkpCiAg ICAgICAgICAgICAgICAgZXJyb3IoIiVzOiUwNHg6IHBjIG9mZnNldCBtdXN0IHBvaW50IGluc2lk ZSB0aGUgZnVuY3Rpb24gY29kZSIsCi0gICAgICAgICAgICAgICAgICAgICAgbmFtZSwgc3RhcnRf b2Zmc2V0ICsgcCAtIHBfc3RhcnQpOworICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIChpbnQp IChzdGFydF9vZmZzZXQgKyBwIC0gcF9zdGFydCkpOwogICAgICAgICAgICAgaWYgKHBjX29mZnNl dCA8IG1pbl9vZmZzZXQpCiAgICAgICAgICAgICAgICAgbWluX29mZnNldCA9IHBjX29mZnNldDsK ICAgICAgICAgICAgIGlmIChvdXRmaWxlKSB7CiAgICAgICAgICAgICAgICAgLyogVGhlIGludHJ1 Y3Rpb24gcG9zaXRpb24gKi8KICAgICAgICAgICAgICAgICBmcHJpbnRmKG91dGZpbGUsICIgICAg YXJtX2xkcl9wdHItPnB0ciA9IGdlbl9jb2RlX3B0ciArICVkO1xuIiwKLSAgICAgICAgICAgICAg ICAgICAgICAgIHAgLSBwX3N0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpIChw IC0gcF9zdGFydCkpOwogICAgICAgICAgICAgICAgIC8qIFRoZSBwb3NpdGlvbiBvZiB0aGUgY29u c3RhbnQgcG9vbCBkYXRhLiAgKi8KICAgICAgICAgICAgICAgICBkYXRhX2luZGV4ID0gKChwX2Vu ZCAtIHBfc3RhcnQpIC0gcGNfb2Zmc2V0KSA+PiAyOwogICAgICAgICAgICAgICAgIGZwcmludGYo b3V0ZmlsZSwgIiAgICBhcm1fbGRyX3B0ci0+ZGF0YV9wdHIgPSBhcm1fZGF0YV9wdHIgLSAlZDtc biIsCkBAIC0xNDI1LDcgKzE0MjUsNyBAQCBpbnQgYXJtX2VtaXRfbGRyX2luZm8oY29uc3QgY2hh ciAqbmFtZSwgdW5zaWduZWQgbG9uZyBzdGFydF9vZmZzZXQsCiAgICAgICAgIGlmIChvdXRmaWxl KSB7CiAgICAgICAgICAgICBmcHJpbnRmKG91dGZpbGUsCiAgICAgICAgICAgICAgICAgICAgICIg ICAgKih1aW50MzJfdCAqKShnZW5fY29kZV9wdHIgKyAlZCkgPSAweGUyOGRkMDA0O1xuIiwKLSAg ICAgICAgICAgICAgICAgICAgcCAtIHBfc3RhcnQpOworICAgICAgICAgICAgICAgICAgICAoaW50 KSAocCAtIHBfc3RhcnQpKTsKICAgICAgICAgfQogICAgICAgICBwICs9IDQ7CiAgICAgfSBlbHNl IGlmICgoaW5zbiAmIDB4ZmZmZjgwMDApICE9IDB4ZTg5ZDgwMDAKQEAgLTI4NjgsNyArMjg2OCw3 IEBAIGludCBnZW5fZmlsZShGSUxFICpvdXRmaWxlLCBpbnQgb3V0X3R5cGUpCiAgICAgICAgIC8q IGdlbmVyYXRlIGJpZyBjb2RlIGdlbmVyYXRpb24gc3dpdGNoICovCiAKICNpZmRlZiBIT1NUX0FS TQotI2Vycm9yIGJyb2tlbgorI3dhcm5pbmcgZHluZ2VuIGJyb2tlbgogICAgICAgICAvKiBXZSBu ZWVkIHRvIGtub3cgdGhlIHNpemUgb2YgYWxsIHRoZSBvcHMgc28gd2UgY2FuIGZpZ3VyZSBvdXQg d2hlbgogICAgICAgICAgICB0byBlbWl0IGNvbnN0YW50IHBvb2xzLiAgVGhpcyBtdXN0IGJlIGNv bnNpc3RlbnQgd2l0aCBvcGMuaC4gICovCiBmcHJpbnRmKG91dGZpbGUsCkBAIC0yODkwLDcgKzI4 OTAsNyBAQCBmcHJpbnRmKG91dGZpbGUsCiAjZW5kaWYKIAogI2lmZGVmIEhPU1RfQVJNCi0jZXJy b3IgYnJva2VuCisjd2FybmluZyBkeW5nZW4gYnJva2VuCiAvKiBBcm0gaXMgdHJpY2t5IGJlY2F1 c2UgaXQgdXNlcyBjb25zdGFudCBwb29scyBmb3IgbG9hZGluZyBpbW1lZGlhdGUgdmFsdWVzLgog ICAgV2UgYXNzdW1lIChhbmQgcmVxdWlyZSkgZWFjaCBmdW5jdGlvbiBpcyBjb2RlIGZvbGxvd2Vk IGJ5IGEgY29uc3RhbnQgcG9vbC4KICAgIEFsbCB0aGUgb3BzIGFyZSBzbWFsbCBzbyB0aGlzIHNo b3VsZCBiZSBvay4gIEZvciBlYWNoIG9wIHdlIGZpZ3VyZQpAQCAtMjk4Miw3ICsyOTgyLDcgQEAg ZnByaW50ZihvdXRmaWxlLAogI2VuZGlmCiAKICNpZmRlZiBIT1NUX0FSTQotI2Vycm9yIGJyb2tl bgorI3dhcm5pbmcgZHluZ2VuIGJyb2tlbgogLyogR2VuZXJhdGUgY29uc3RhbnQgcG9vbCBpZiBu ZWVkZWQgKi8KIGZwcmludGYob3V0ZmlsZSwKICIgICAgICAgICAgICBpZiAoZ2VuX2NvZGVfcHRy ICsgYXJtX29wY19zaXplWypvcGNfcHRyXSA+PSBhcm1fcG9vbF9wdHIpIHtcbiIKZGlmZiAtLWdp dCBhL2V4ZWMtYWxsLmggYi9leGVjLWFsbC5oCmluZGV4IDg5OGNmNjguLjc2ZjQyNzkgMTAwNjQ0 Ci0tLSBhL2V4ZWMtYWxsLmgKKysrIGIvZXhlYy1hbGwuaApAQCAtMTQxLDcgKzE0MSw3IEBAIHN0 YXRpYyBpbmxpbmUgaW50IHRsYl9zZXRfcGFnZShDUFVTdGF0ZSAqZW52LCB0YXJnZXRfdWxvbmcg dmFkZHIsCiAKICNkZWZpbmUgQ09ERV9HRU5fTUFYX0JMT0NLUyAgICAoQ09ERV9HRU5fQlVGRkVS X1NJWkUgLyBDT0RFX0dFTl9BVkdfQkxPQ0tfU0laRSkKIAotI2lmIGRlZmluZWQoX19wb3dlcnBj X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKKyNpZiBkZWZpbmVkKF9fcG93ZXJwY19fKSB8fCBk ZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hcm1fXykKICNkZWZpbmUgVVNFX0RJUkVD VF9KVU1QCiAjZW5kaWYKICNpZiBkZWZpbmVkKF9faTM4Nl9fKSAmJiAhZGVmaW5lZChfV0lOMzIp CkBAIC0yNDAsNiArMjQwLDIyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0Yl9zZXRfam1wX3Rhcmdl dDEodW5zaWduZWQgbG9uZyBqbXBfYWRkciwgdW5zaWduZWQgbG9uZyBhZGRyCiAgICAgKih1aW50 MzJfdCAqKWptcF9hZGRyID0gYWRkciAtIChqbXBfYWRkciArIDQpOwogICAgIC8qIG5vIG5lZWQg dG8gZmx1c2ggaWNhY2hlIGV4cGxpY2l0ZWx5ICovCiB9CisjZWxpZiBkZWZpbmVkKF9fYXJtX18p CitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfaWNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3Rh cnQsIHVuc2lnbmVkIGxvbmcgc3RvcCkKK3sKKyAgICByZWdpc3RlciB1bnNpZ25lZCBsb25nIF9i ZWcgX19hc20gKCJhMSIpID0gc3RhcnQ7CisgICAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfZW5k IF9fYXNtICgiYTIiKSA9IHN0b3A7CisgICAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfZmxnIF9f YXNtICgiYTMiKSA9IDA7CisgICAgX19hc20gX192b2xhdGlsZV9fICgic3dpIDB4OWYwMDAyIiA6 IDogInIiIChfYmVnKSwgInIiIChfZW5kKSwgInIiIChfZmxnKSk7Cit9CisKK3N0YXRpYyBpbmxp bmUgdm9pZCB0Yl9zZXRfam1wX3RhcmdldDEodW5zaWduZWQgbG9uZyBqbXBfYWRkciwgdW5zaWdu ZWQgbG9uZyBhZGRyKQoreworICAgIC8qIHdlIGNvdWxkIHVzZSBhIGxkciBwYywgW3BjLCAjLTRd IGtpbmQgb2YgYnJhbmNoIGFuZCBhdm9pZCB0aGUgZmx1c2ggKi8KKyAgICAqKHVpbnQzMl90ICop am1wX2FkZHIgfD0gKChhZGRyIC0gKGptcF9hZGRyICsgOCkpID4+IDIpICYgMHhmZmZmZmY7Cisg ICAgLyogZmx1c2ggaWNhY2hlICovCisgICAgZmx1c2hfaWNhY2hlX3JhbmdlKGptcF9hZGRyLCBq bXBfYWRkciArIDQpOworfQogI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0Yl9zZXRfam1w X3RhcmdldChUcmFuc2xhdGlvbkJsb2NrICp0YiwKZGlmZiAtLWdpdCBhL2h3L29tYXAxLmMgYi9o dy9vbWFwMS5jCmluZGV4IGI0Mzk0MjMuLjIxYmMyN2EgMTAwNjQ0Ci0tLSBhL2h3L29tYXAxLmMK KysrIGIvaHcvb21hcDEuYwpAQCAtNjk2LDcgKzY5Niw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBv bWFwX3RpbWVyX3VwZGF0ZShzdHJ1Y3Qgb21hcF9tcHVfdGltZXJfcyAqdGltZXIpCiAKICAgICBp ZiAodGltZXItPmVuYWJsZSAmJiB0aW1lci0+c3QgJiYgdGltZXItPnJhdGUpIHsKICAgICAgICAg dGltZXItPnZhbCA9IHRpbWVyLT5yZXNldF92YWw7CS8qIFNob3VsZCBza2lwIHRoaXMgb24gY2xr IGVuYWJsZSAqLwotICAgICAgICBleHBpcmVzID0gbXVsZGl2NjQodGltZXItPnZhbCA8PCAodGlt ZXItPnB0diArIDEpLAorICAgICAgICBleHBpcmVzID0gbXVsZGl2NjQoKHVpbnQ2NF90KSB0aW1l ci0+dmFsIDw8ICh0aW1lci0+cHR2ICsgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICB0aWNr c19wZXJfc2VjLCB0aW1lci0+cmF0ZSk7CiAKICAgICAgICAgLyogSWYgdGltZXIgZXhwaXJ5IHdv dWxkIGJlIHNvb25lciB0aGFuIGluIGFib3V0IDEgbXMgYW5kCmRpZmYgLS1naXQgYS90Y2cvUkVB RE1FIGIvdGNnL1JFQURNRQppbmRleCBjMjdjNWFiLi41MTcwOWExIDEwMDY0NAotLS0gYS90Y2cv UkVBRE1FCisrKyBiL3RjZy9SRUFETUUKQEAgLTc1LDcgKzc1LDcgQEAgZGVwZW5kaW5nIG9uIHRo ZWlyIGRlY2xhcmF0aW9ucykuCiAqIEhlbHBlcnM6CiAKIFVzaW5nIHRoZSB0Y2dfZ2VuX2hlbHBl cl94X3kgaXQgaXMgcG9zc2libGUgdG8gY2FsbCBhbnkgZnVuY3Rpb24KLXRha2luZyBpMzIsIGk2 NCBvciBwb2ludGVyIHR5cGVzIHR5cGVzLiBCZWZvcmUgY2FsbGluZyBhbiBoZWxwZXIsIGFsbAor dGFraW5nIGkzMiwgaTY0IG9yIHBvaW50ZXIgdHlwZXMuIEJlZm9yZSBjYWxsaW5nIGFuIGhlbHBl ciwgYWxsCiBnbG9iYWxzIGFyZSBzdG9yZWQgYXQgdGhlaXIgY2Fub25pY2FsIGxvY2F0aW9uIGFu ZCBpdCBpcyBhc3N1bWVkIHRoYXQKIHRoZSBmdW5jdGlvbiBjYW4gbW9kaWZ5IHRoZW0uIEluIHRo ZSBmdXR1cmUsIGZ1bmN0aW9uIG1vZGlmaWVycyB3aWxsCiBiZSBhbGxvd2VkIHRvIHRlbGwgdGhh dCB0aGUgaGVscGVyIGRvZXMgbm90IHJlYWQgb3Igd3JpdGUgc29tZSBnbG9iYWxzLgpkaWZmIC0t Z2l0IGEvdGNnL2FybS90Y2ctdGFyZ2V0LmMgYi90Y2cvYXJtL3RjZy10YXJnZXQuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWFiYzI1Ci0tLSAvZGV2L251bGwKKysrIGIv dGNnL2FybS90Y2ctdGFyZ2V0LmMKQEAgLTAsMCArMSwxMjE3IEBACisvKgorICogVGlueSBDb2Rl IEdlbmVyYXRvciBmb3IgUUVNVQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBGYWJyaWNlIEJl bGxhcmQKKyAqIENvcHlyaWdodCAoYykgMjAwOCBBbmRyemVqIFphYm9yb3dza2kKKyAqCisgKiBQ ZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNv biBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24g dGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0 cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2Fy ZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoK KyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRp b25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT IElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElF RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5G UklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hU IEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJX SVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBT T0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUu CisgKi8KK2NvbnN0IGNoYXIgKnRjZ190YXJnZXRfcmVnX25hbWVzW1RDR19UQVJHRVRfTkJfUkVH U10gPSB7CisgICAgIiVyMCIsCisgICAgIiVyMSIsCisgICAgIiVyMiIsCisgICAgIiVyMyIsCisg ICAgIiVyNCIsCisgICAgIiVyNSIsCisgICAgIiVyNiIsCisgICAgIiVyNyIsCisgICAgIiVyOCIs CisgICAgIiVyOSIsCisgICAgIiVyMTAiLAorICAgICIlcjExIiwKKyAgICAiJXIxMiIsCisgICAg IiVyMTMiLAorfTsKKworaW50IHRjZ190YXJnZXRfcmVnX2FsbG9jX29yZGVyW10gPSB7CisgICAg VENHX1JFR19SMCwKKyAgICBUQ0dfUkVHX1IxLAorICAgIFRDR19SRUdfUjIsCisgICAgVENHX1JF R19SMywKKyAgICBUQ0dfUkVHX1I0LAorICAgIFRDR19SRUdfUjUsCisgICAgVENHX1JFR19SNiwK KyAgICBUQ0dfUkVHX1I3LAorICAgIFRDR19SRUdfUjgsCisgICAgVENHX1JFR19SOSwKKyAgICBU Q0dfUkVHX1IxMCwKKyAgICBUQ0dfUkVHX1IxMSwKKyAgICBUQ0dfUkVHX1IxMiwKKyAgICBUQ0df UkVHX1IxMywKK307CisKK2NvbnN0IGludCB0Y2dfdGFyZ2V0X2NhbGxfaWFyZ19yZWdzWzRdID0g eworICAgIFRDR19SRUdfUjAsIFRDR19SRUdfUjEsIFRDR19SRUdfUjIsIFRDR19SRUdfUjMKK307 Citjb25zdCBpbnQgdGNnX3RhcmdldF9jYWxsX29hcmdfcmVnc1syXSA9IHsKKyAgICBUQ0dfUkVH X1IwLCBUQ0dfUkVHX1IxCit9OworCitzdGF0aWMgdm9pZCBwYXRjaF9yZWxvYyh1aW50OF90ICpj b2RlX3B0ciwgaW50IHR5cGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgdGNnX3RhcmdldF9s b25nIHZhbHVlLCB0Y2dfdGFyZ2V0X2xvbmcgYWRkZW5kKQoreworICAgIHN3aXRjaCh0eXBlKSB7 CisgICAgY2FzZSBSX0FSTV9BQlMzMjoKKyAgICAgICAgKih1aW50MzJfdCAqKSBjb2RlX3B0ciA9 IHZhbHVlOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgUl9BUk1fQ0FMTDoKKyAgICBjYXNl IFJfQVJNX0pVTVAyNDoKKyAgICBkZWZhdWx0OgorICAgICAgICB0Y2dfYWJvcnQoKTsKKworICAg IGNhc2UgUl9BUk1fUEMyNDoKKyAgICAgICAgKih1aW50MzJfdCAqKSBjb2RlX3B0ciB8PQorICAg ICAgICAgICAgICAgICgodmFsdWUgLSAoKHRjZ190YXJnZXRfbG9uZykgY29kZV9wdHIgKyA4KSkg Pj4gMikgJiAweGZmZmZmZjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCisvKiBtYXhpbXVt IG51bWJlciBvZiByZWdpc3RlciB1c2VkIGZvciBpbnB1dCBmdW5jdGlvbiBhcmd1bWVudHMgKi8K K3N0YXRpYyBpbmxpbmUgaW50IHRjZ190YXJnZXRfZ2V0X2NhbGxfaWFyZ19yZWdzX2NvdW50KGlu dCBmbGFncykKK3sKKyAgICByZXR1cm4gNDsKK30KKworLyogcGFyc2UgdGFyZ2V0IHNwZWNpZmlj IGNvbnN0cmFpbnRzICovCitpbnQgdGFyZ2V0X3BhcnNlX2NvbnN0cmFpbnQoVENHQXJnQ29uc3Ry YWludCAqY3QsIGNvbnN0IGNoYXIgKipwY3Rfc3RyKQoreworICAgIGNvbnN0IGNoYXIgKmN0X3N0 cjsKKworICAgIGN0X3N0ciA9ICpwY3Rfc3RyOworICAgIHN3aXRjaCAoY3Rfc3RyWzBdKSB7Cisg ICAgY2FzZSAncic6CisgICAgICAgIGN0LT5jdCB8PSBUQ0dfQ1RfUkVHOworICAgICAgICB0Y2df cmVnc2V0X3NldDMyKGN0LT51LnJlZ3MsIDAsICgxIDw8IFRDR19UQVJHRVRfTkJfUkVHUykgLSAx KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAvKiBxZW11X2xkL3N0IGRhdGFfcmVnICovCisgICAg Y2FzZSAnZCc6CisgICAgICAgIGN0LT5jdCB8PSBUQ0dfQ1RfUkVHOworICAgICAgICB0Y2dfcmVn c2V0X3NldDMyKGN0LT51LnJlZ3MsIDAsICgxIDw8IFRDR19UQVJHRVRfTkJfUkVHUykgLSAxKTsK KyAgICAgICAgLyogcjAgYW5kIG9wdGlvbmFsbHkgcjEgd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB0 aGUgYWRkcmVzcworICAgICAgICAgKiBzbyBkb24ndCB1c2UgdGhlc2UuICAqLworICAgICAgICB0 Y2dfcmVnc2V0X3Jlc2V0X3JlZyhjdC0+dS5yZWdzLCBUQ0dfUkVHX1IwKTsKKyNpZiBUQVJHRVRf TE9OR19CSVRTID09IDY0CisgICAgICAgIHRjZ19yZWdzZXRfcmVzZXRfcmVnKGN0LT51LnJlZ3Ms IFRDR19SRUdfUjEpOworI2VuZGlmCisgICAgICAgIGJyZWFrOworCisgICAgLyogcWVtdV9sZC9z dDY0IGRhdGFfcmVnMiAqLworICAgIGNhc2UgJ0QnOgorICAgICAgICBjdC0+Y3QgfD0gVENHX0NU X1JFRzsKKyAgICAgICAgdGNnX3JlZ3NldF9zZXQzMihjdC0+dS5yZWdzLCAwLCAoMSA8PCBUQ0df VEFSR0VUX05CX1JFR1MpIC0gMSk7CisgICAgICAgIC8qIHIwLCByMSBhbmQgb3B0aW9uYWxseSBy MiB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBhZGRyZXNzCisgICAgICAgICAqIGFuZCB0aGUg bG93IHdvcmQgb2YgZGF0YSwgc28gZG9uJ3QgdXNlIHRoZXNlLiAgKi8KKyAgICAgICAgdGNnX3Jl Z3NldF9yZXNldF9yZWcoY3QtPnUucmVncywgVENHX1JFR19SMCk7CisgICAgICAgIHRjZ19yZWdz ZXRfcmVzZXRfcmVnKGN0LT51LnJlZ3MsIFRDR19SRUdfUjEpOworI2lmIFRBUkdFVF9MT05HX0JJ VFMgPT0gNjQKKyAgICAgICAgdGNnX3JlZ3NldF9yZXNldF9yZWcoY3QtPnUucmVncywgVENHX1JF R19SMik7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisKKyNpZiBUQVJHRVRfTE9OR19CSVRTID09 IDY0CisgICAgLyogcWVtdV9sZC9zdCBhZGRyX3JlZzIgKi8KKyAgICBjYXNlICdYJzoKKyAgICAg ICAgY3QtPmN0IHw9IFRDR19DVF9SRUc7CisgICAgICAgIHRjZ19yZWdzZXRfc2V0MzIoY3QtPnUu cmVncywgMCwgKDEgPDwgVENHX1RBUkdFVF9OQl9SRUdTKSAtIDEpOworICAgICAgICAvKiByMCB3 aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBsb3cgd29yZCBvZiBiYXNlLCBzbyBkb24ndCB1c2Ug aXQuICAqLworICAgICAgICB0Y2dfcmVnc2V0X3Jlc2V0X3JlZyhjdC0+dS5yZWdzLCBUQ0dfUkVH X1IwKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl dHVybiAtMTsKKyAgICB9CisgICAgY3Rfc3RyKys7CisgICAgKnBjdF9zdHIgPSBjdF9zdHI7CisK KyAgICByZXR1cm4gMDsKK30KKworLyogdGVzdCBpZiBhIGNvbnN0YW50IG1hdGNoZXMgdGhlIGNv bnN0cmFpbnQgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHRjZ190YXJnZXRfY29uc3RfbWF0Y2godGNn X3RhcmdldF9sb25nIHZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgVENHQXJnQ29uc3RyYWludCAqYXJnX2N0KQoreworICAgIGludCBjdDsKKyAgICBj dCA9IGFyZ19jdC0+Y3Q7CisgICAgaWYgKGN0ICYgVENHX0NUX0NPTlNUKQorICAgICAgICByZXR1 cm4gMTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAwOworfQorCitlbnVtIGFybV9kYXRhX29w Y19lIHsKKyAgICBBUklUSF9BTkQgPSAweDAsCisgICAgQVJJVEhfRU9SID0gMHgxLAorICAgIEFS SVRIX1NVQiA9IDB4MiwKKyAgICBBUklUSF9SU0IgPSAweDMsCisgICAgQVJJVEhfQUREID0gMHg0 LAorICAgIEFSSVRIX0FEQyA9IDB4NSwKKyAgICBBUklUSF9TQkMgPSAweDYsCisgICAgQVJJVEhf UlNDID0gMHg3LAorICAgIEFSSVRIX0NNUCA9IDB4YSwKKyAgICBBUklUSF9DTU4gPSAweGIsCisg ICAgQVJJVEhfT1JSID0gMHhjLAorICAgIEFSSVRIX01PViA9IDB4ZCwKKyAgICBBUklUSF9CSUMg PSAweGUsCisgICAgQVJJVEhfTVZOID0gMHhmLAorfTsKKworI2RlZmluZSBUT19DUFNSKG9wYykJ CSgob3BjID09IEFSSVRIX0NNUCB8fCBvcGMgPT0gQVJJVEhfQ01OKSA8PCAyMCkKKworI2RlZmlu ZSBTSElGVF9JTU1fTFNMKGltKQkoKChpbSkgPDwgNykgfCAweDAwKQorI2RlZmluZSBTSElGVF9J TU1fTFNSKGltKQkoKChpbSkgPDwgNykgfCAweDIwKQorI2RlZmluZSBTSElGVF9JTU1fQVNSKGlt KQkoKChpbSkgPDwgNykgfCAweDQwKQorI2RlZmluZSBTSElGVF9JTU1fUk9SKGltKQkoKChpbSkg PDwgNykgfCAweDYwKQorI2RlZmluZSBTSElGVF9SRUdfTFNMKHJzKQkoKChycykgPDwgOCkgfCAw eDEwKQorI2RlZmluZSBTSElGVF9SRUdfTFNSKHJzKQkoKChycykgPDwgOCkgfCAweDMwKQorI2Rl ZmluZSBTSElGVF9SRUdfQVNSKHJzKQkoKChycykgPDwgOCkgfCAweDUwKQorI2RlZmluZSBTSElG VF9SRUdfUk9SKHJzKQkoKChycykgPDwgOCkgfCAweDcwKQorCitlbnVtIGFybV9jb25kX2NvZGVf ZSB7CisgICAgQ09ORF9FUSA9IDB4MCwKKyAgICBDT05EX05FID0gMHgxLAorICAgIENPTkRfQ1Mg PSAweDIsCS8qIFVuc2lnbmVkIGdyZWF0ZXIgb3IgZXF1YWwgKi8KKyAgICBDT05EX0NDID0gMHgz LAkvKiBVbnNpZ25lZCBsZXNzIHRoYW4gKi8KKyAgICBDT05EX01JID0gMHg0LAkvKiBOZWdhdGl2 ZSAqLworICAgIENPTkRfUEwgPSAweDUsCS8qIFplcm8gb3IgZ3JlYXRlciAqLworICAgIENPTkRf VlMgPSAweDYsCS8qIE92ZXJmbG93ICovCisgICAgQ09ORF9WQyA9IDB4NywJLyogTm8gb3ZlcmZs b3cgKi8KKyAgICBDT05EX0hJID0gMHg4LAkvKiBVbnNpZ25lZCBncmVhdGVyIHRoYW4gKi8KKyAg ICBDT05EX0xTID0gMHg5LAkvKiBVbnNpZ25lZCBsZXNzIG9yIGVxdWFsICovCisgICAgQ09ORF9H RSA9IDB4YSwKKyAgICBDT05EX0xUID0gMHhiLAorICAgIENPTkRfR1QgPSAweGMsCisgICAgQ09O RF9MRSA9IDB4ZCwKKyAgICBDT05EX0FMID0gMHhlLAorfTsKKworc3RhdGljIGNvbnN0IHVpbnQ4 X3QgdGNnX2NvbmRfdG9fYXJtY29uZFsxMF0gPSB7CisgICAgW1RDR19DT05EX0VRXSA9IENPTkRf RVEsCisgICAgW1RDR19DT05EX05FXSA9IENPTkRfTkUsCisgICAgW1RDR19DT05EX0xUXSA9IENP TkRfTFQsCisgICAgW1RDR19DT05EX0dFXSA9IENPTkRfR0UsCisgICAgW1RDR19DT05EX0xFXSA9 IENPTkRfTEUsCisgICAgW1RDR19DT05EX0dUXSA9IENPTkRfR1QsCisgICAgLyogdW5zaWduZWQg Ki8KKyAgICBbVENHX0NPTkRfTFRVXSA9IENPTkRfQ0MsCisgICAgW1RDR19DT05EX0dFVV0gPSBD T05EX0NTLAorICAgIFtUQ0dfQ09ORF9MRVVdID0gQ09ORF9MUywKKyAgICBbVENHX0NPTkRfR1RV XSA9IENPTkRfSEksCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgdGNnX291dF9ieChUQ0dDb250 ZXh0ICpzLCBpbnQgY29uZCwgaW50IHJuKQoreworICAgIHRjZ19vdXQzMihzLCAoY29uZCA8PCAy OCkgfCAweDAxMmZmZjEwIHwgcm4pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGNnX291dF9i KFRDR0NvbnRleHQgKnMsIGludCBjb25kLCBpbnQzMl90IG9mZnNldCkKK3sKKyAgICB0Y2dfb3V0 MzIocywgKGNvbmQgPDwgMjgpIHwgMHgwYTAwMDAwMCB8CisgICAgICAgICAgICAgICAgICAgICgo KG9mZnNldCAtIDgpID4+IDIpICYgMHgwMGZmZmZmZikpOworfQorCitzdGF0aWMgaW5saW5lIHZv aWQgdGNnX291dF9ibChUQ0dDb250ZXh0ICpzLCBpbnQgY29uZCwgaW50MzJfdCBvZmZzZXQpCit7 CisgICAgdGNnX291dDMyKHMsIChjb25kIDw8IDI4KSB8IDB4MGIwMDAwMDAgfAorICAgICAgICAg ICAgICAgICAgICAoKChvZmZzZXQgLSA4KSA+PiAyKSAmIDB4MDBmZmZmZmYpKTsKK30KKworc3Rh dGljIGlubGluZSB2b2lkIHRjZ19vdXRfZGF0X3JlZyhUQ0dDb250ZXh0ICpzLAorICAgICAgICAg ICAgICAgIGludCBjb25kLCBpbnQgb3BjLCBpbnQgcmQsIGludCBybiwgaW50IHJtLCBpbnQgc2hp ZnQpCit7CisgICAgdGNnX291dDMyKHMsIChjb25kIDw8IDI4KSB8ICgwIDw8IDI1KSB8IChvcGMg PDwgMjEpIHwgVE9fQ1BTUihvcGMpIHwKKyAgICAgICAgICAgICAgICAgICAgKHJuIDw8IDE2KSB8 IChyZCA8PCAxMikgfCBzaGlmdCB8IHJtKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRjZ19v dXRfZGF0X3JlZzIoVENHQ29udGV4dCAqcywKKyAgICAgICAgICAgICAgICBpbnQgY29uZCwgaW50 IG9wYzAsIGludCBvcGMxLCBpbnQgcmQwLCBpbnQgcmQxLAorICAgICAgICAgICAgICAgIGludCBy bjAsIGludCBybjEsIGludCBybTAsIGludCBybTEsIGludCBzaGlmdCkKK3sKKyAgICB0Y2dfb3V0 MzIocywgKGNvbmQgPDwgMjgpIHwgKDAgPDwgMjUpIHwgKG9wYzAgPDwgMjEpIHwgKDEgPDwgMjAp IHwKKyAgICAgICAgICAgICAgICAgICAgKHJuMCA8PCAxNikgfCAocmQwIDw8IDEyKSB8IHNoaWZ0 IHwgcm0wKTsKKyAgICB0Y2dfb3V0MzIocywgKGNvbmQgPDwgMjgpIHwgKDAgPDwgMjUpIHwgKG9w YzEgPDwgMjEpIHwKKyAgICAgICAgICAgICAgICAgICAgKHJuMSA8PCAxNikgfCAocmQxIDw8IDEy KSB8IHNoaWZ0IHwgcm0xKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRjZ19vdXRfZGF0X2lt bShUQ0dDb250ZXh0ICpzLAorICAgICAgICAgICAgICAgIGludCBjb25kLCBpbnQgb3BjLCBpbnQg cmQsIGludCBybiwgaW50IGltKQoreworICAgIHRjZ19vdXQzMihzLCAoY29uZCA8PCAyOCkgfCAo MSA8PCAyNSkgfCAob3BjIDw8IDIxKSB8CisgICAgICAgICAgICAgICAgICAgIChybiA8PCAxNikg fCAocmQgPDwgMTIpIHwgaW0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGNnX291dF9tb3Zp MzIoVENHQ29udGV4dCAqcywKKyAgICAgICAgICAgICAgICBpbnQgY29uZCwgaW50IHJkLCBpbnQz Ml90IGFyZykKK3sKKyAgICBpbnQgb2Zmc2V0ID0gKHVpbnQzMl90KSBhcmcgLSAoKHVpbnQzMl90 KSBzLT5jb2RlX3B0ciArIDgpOworCisgICAgLyogVE9ETzogVGhpcyBpcyB2ZXJ5IHN1Ym9wdGlt YWwsIHdlIGNhbiBlYXNpbHkgaGF2ZSBhIGNvbnN0YW50CisgICAgICogcG9vbCBzb21ld2hlcmUg YWZ0ZXIgYWxsIHRoZSBpbnN0cnVjdGlvbnMuICAqLworCisgICAgaWYgKGFyZyA8IDAgJiYgYXJn ID4gLTB4MTAwKQorICAgICAgICByZXR1cm4gdGNnX291dF9kYXRfaW1tKHMsIGNvbmQsIEFSSVRI X01WTiwgcmQsIDAsICh+YXJnKSAmIDB4ZmYpOworCisgICAgaWYgKG9mZnNldCA8IDB4MTAwICYm IG9mZnNldCA+IC0weDEwMCkKKyAgICAgICAgcmV0dXJuIG9mZnNldCA+PSAwID8KKyAgICAgICAg ICAgICAgICB0Y2dfb3V0X2RhdF9pbW0ocywgY29uZCwgQVJJVEhfQURELCByZCwgMTUsIG9mZnNl dCkgOgorICAgICAgICAgICAgICAgIHRjZ19vdXRfZGF0X2ltbShzLCBjb25kLCBBUklUSF9TVUIs IHJkLCAxNSwgLW9mZnNldCk7CisKKyAgICB0Y2dfb3V0X2RhdF9pbW0ocywgY29uZCwgQVJJVEhf TU9WLCByZCwgMCwgYXJnICYgMHhmZik7CisgICAgaWYgKGFyZyAmIDB4MDAwMGZmMDApCisgICAg ICAgIHRjZ19vdXRfZGF0X2ltbShzLCBjb25kLCBBUklUSF9PUlIsIHJkLCByZCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICgoYXJnID4+ICA4KSAmIDB4ZmYpIHwgMHhjMDApOworICAgIGlmIChh cmcgJiAweDAwZmYwMDAwKQorICAgICAgICB0Y2dfb3V0X2RhdF9pbW0ocywgY29uZCwgQVJJVEhf T1JSLCByZCwgcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAoKGFyZyA+PiAxNikgJiAweGZm KSB8IDB4ODAwKTsKKyAgICBpZiAoYXJnICYgMHhmZjAwMDAwMCkKKyAgICAgICAgdGNnX291dF9k YXRfaW1tKHMsIGNvbmQsIEFSSVRIX09SUiwgcmQsIHJkLAorICAgICAgICAgICAgICAgICAgICAg ICAgKChhcmcgPj4gMjQpICYgMHhmZikgfCAweDQwMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9p ZCB0Y2dfb3V0X211bDMyKFRDR0NvbnRleHQgKnMsCisgICAgICAgICAgICAgICAgaW50IGNvbmQs IGludCByZCwgaW50IHJzLCBpbnQgcm0pCit7CisgICAgaWYgKHJkICE9IHJtKQorICAgICAgICB0 Y2dfb3V0MzIocywgKGNvbmQgPDwgMjgpIHwgKHJkIDw8IDE2KSB8ICgwIDw8IDEyKSB8CisgICAg ICAgICAgICAgICAgICAgICAgICAocnMgPDwgOCkgfCAweDkwIHwgcm0pOworICAgIGVsc2UgaWYg KHJkICE9IHJzKQorICAgICAgICB0Y2dfb3V0MzIocywgKGNvbmQgPDwgMjgpIHwgKHJkIDw8IDE2 KSB8ICgwIDw8IDEyKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAocm0gPDwgOCkgfCAweDkw IHwgcnMpOworICAgIGVsc2UgeworICAgICAgICB0Y2dfb3V0X2RhdF9yZWcocywgY29uZCwgQVJJ VEhfTU9WLAorICAgICAgICAgICAgICAgICAgICAgICAgVENHX1JFR19SOCwgMCwgcm0sIFNISUZU X0lNTV9MU0woMCkpOworICAgICAgICB0Y2dfb3V0MzIocywgKGNvbmQgPDwgMjgpIHwgKHJkIDw8 IDE2KSB8ICgwIDw8IDEyKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAocnMgPDwgOCkgfCAw eDk4KTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y2dfb3V0X3VtdWxsMzIoVENH Q29udGV4dCAqcywKKyAgICAgICAgICAgICAgICBpbnQgY29uZCwgaW50IHJkMCwgaW50IHJkMSwg aW50IHJzLCBpbnQgcm0pCit7CisgICAgaWYgKHJkMCAhPSBybSAmJiByZDEgIT0gcm0pCisgICAg ICAgIHRjZ19vdXQzMihzLCAoY29uZCA8PCAyOCkgfCAweDgwMDA5MCB8CisgICAgICAgICAgICAg ICAgICAgICAgICAocmQxIDw8IDE2KSB8IChyZDAgPDwgMTIpIHwgKHJzIDw8IDgpIHwgcm0pOwor ICAgIGVsc2UgaWYgKHJkMCAhPSBycyAmJiByZDEgIT0gcnMpCisgICAgICAgIHRjZ19vdXQzMihz LCAoY29uZCA8PCAyOCkgfCAweDgwMDA5MCB8CisgICAgICAgICAgICAgICAgICAgICAgICAocmQx IDw8IDE2KSB8IChyZDAgPDwgMTIpIHwgKHJtIDw8IDgpIHwgcnMpOworICAgIGVsc2UgeworICAg ICAgICB0Y2dfb3V0X2RhdF9yZWcocywgY29uZCwgQVJJVEhfTU9WLAorICAgICAgICAgICAgICAg ICAgICAgICAgVENHX1JFR19SOCwgMCwgcm0sIFNISUZUX0lNTV9MU0woMCkpOworICAgICAgICB0 Y2dfb3V0MzIocywgKGNvbmQgPDwgMjgpIHwgMHg4MDAwOTggfAorICAgICAgICAgICAgICAgICAg ICAgICAgKHJkMSA8PCAxNikgfCAocmQwIDw8IDEyKSB8IChycyA8PCA4KSk7CisgICAgfQorfQor CitzdGF0aWMgaW5saW5lIHZvaWQgdGNnX291dF9zbXVsbDMyKFRDR0NvbnRleHQgKnMsCisgICAg ICAgICAgICAgICAgaW50IGNvbmQsIGludCByZDAsIGludCByZDEsIGludCBycywgaW50IHJtKQor eworICAgIGlmIChyZDAgIT0gcm0gJiYgcmQxICE9IHJtKQorICAgICAgICB0Y2dfb3V0MzIocywg KGNvbmQgPDwgMjgpIHwgMHhjMDAwOTAgfAorICAgICAgICAgICAgICAgICAgICAgICAgKHJkMSA8 PCAxNikgfCAocmQwIDw8IDEyKSB8IChycyA8PCA4KSB8IHJtKTsKKyAgICBlbHNlIGlmIChyZDAg IT0gcnMgJiYgcmQxICE9IHJzKQorICAgICAgICB0Y2dfb3V0MzIocywgKGNvbmQgPDwgMjgpIHwg MHhjMDAwOTAgfAorICAgICAgICAgICAgICAgICAgICAgICAgKHJkMSA8PCAxNikgfCAocmQwIDw8 IDEyKSB8IChybSA8PCA4KSB8IHJzKTsKKyAgICBlbHNlIHsKKyAgICAgICAgdGNnX291dF9kYXRf cmVnKHMsIGNvbmQsIEFSSVRIX01PViwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRDR19SRUdf UjgsIDAsIHJtLCBTSElGVF9JTU1fTFNMKDApKTsKKyAgICAgICAgdGNnX291dDMyKHMsIChjb25k IDw8IDI4KSB8IDB4YzAwMDk4IHwKKyAgICAgICAgICAgICAgICAgICAgICAgIChyZDEgPDwgMTYp IHwgKHJkMCA8PCAxMikgfCAocnMgPDwgOCkpOworICAgIH0KK30KKworc3RhdGljIGlubGluZSB2 b2lkIHRjZ19vdXRfbGQzMl8xMihUQ0dDb250ZXh0ICpzLCBpbnQgY29uZCwKKyAgICAgICAgICAg ICAgICBpbnQgcmQsIGludCBybiwgdGNnX3RhcmdldF9sb25nIGltKQoreworICAgIGlmIChpbSA+ PSAwKQorICAgICAgICB0Y2dfb3V0MzIocywgKGNvbmQgPDwgMjgpIHwgMHgwNTkwMDAwMCB8Cisg ICAgICAgICAgICAgICAgICAgICAgICAocm4gPDwgMTYpIHwgKHJkIDw8IDEyKSB8IChpbSAmIDB4 ZmZmKSk7CisgICAgZWxzZQorICAgICAgICB0Y2dfb3V0MzIocywgKGNvbmQgPDwgMjgpIHwgMHgw NTEwMDAwMCB8CisgICAgICAgICAgICAgICAgICAgICAgICAocm4gPDwgMTYpIHwgKHJkIDw8IDEy KSB8ICgoLWltKSAmIDB4ZmZmKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y2dfb3V0X3N0 MzJfMTIoVENHQ29udGV4dCAqcywgaW50IGNvbmQsCisgICAgICAgICAgICAgICAgaW50IHJkLCBp bnQgcm4sIHRjZ190YXJnZXRfbG9uZyBpbSkKK3sKKyAgICBpZiAoaW0gPj0gMCkKKyAgICAgICAg dGNnX291dDMyKHMsIChjb25kIDw8IDI4KSB8IDB4MDU4MDAwMDAgfAorICAgICAgICAgICAgICAg ICAgICAgICAgKHJuIDw8IDE2KSB8IChyZCA8PCAxMikgfCAoaW0gJiAweGZmZikpOworICAgIGVs c2UKKyAgICAgICAgdGNnX291dDMyKHMsIChjb25kIDw8IDI4KSB8IDB4MDUwMDAwMDAgfAorICAg ICAgICAgICAgICAgICAgICAgICAgKHJuIDw8IDE2KSB8IChyZCA8PCAxMikgfCAoKC1pbSkgJiAw eGZmZikpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGNnX291dF9sZDMyX3IoVENHQ29udGV4 dCAqcywgaW50IGNvbmQsCisgICAgICAgICAgICAgICAgaW50IHJkLCBpbnQgcm4sIGludCBybSkK K3sKKyAgICB0Y2dfb3V0MzIocywgKGNvbmQgPDwgMjgpIHwgMHgwNzEwMDAwMCB8CisgICAgICAg ICAgICAgICAgICAgIChybiA8PCAxNikgfCAocmQgPDwgMTIpIHwgcm0pOworfQorCitzdGF0aWMg aW5saW5lIHZvaWQgdGNnX291dF9zdDMyX3IoVENHQ29udGV4dCAqcywgaW50IGNvbmQsCisgICAg ICAgICAgICAgICAgaW50IHJkLCBpbnQgcm4sIGludCBybSkKK3sKKyAgICB0Y2dfb3V0MzIocywg KGNvbmQgPDwgMjgpIHwgMHgwNzAwMDAwMCB8CisgICAgICAgICAgICAgICAgICAgIChybiA8PCAx NikgfCAocmQgPDwgMTIpIHwgcm0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGNnX291dF9s ZDE2dV84KFRDR0NvbnRleHQgKnMsIGludCBjb25kLAorICAgICAgICAgICAgICAgIGludCByZCwg aW50IHJuLCB0Y2dfdGFyZ2V0X2xvbmcgaW0pCit7CisgICAgaWYgKGltID49IDApCisgICAgICAg IHRjZ19vdXQzMihzLCAoY29uZCA8PCAyOCkgfCAweDAxZDAwMGIwIHwKKyAgICAgICAgICAgICAg ICAgICAgICAgIChybiA8PCAxNikgfCAocmQgPDwgMTIpIHwKKyAgICAgICAgICAgICAgICAgICAg ICAgICgoaW0gJiAweGYwKSA8PCA0KSB8IChpbSAmIDB4ZikpOworICAgIGVsc2UKKyAgICAgICAg dGNnX291dDMyKHMsIChjb25kIDw8IDI4KSB8IDB4MDE1MDAwYjAgfAorICAgICAgICAgICAgICAg ICAgICAgICAgKHJuIDw8IDE2KSB8IChyZCA8PCAxMikgfAorICAgICAgICAgICAgICAgICAgICAg ICAgKCgoLWltKSAmIDB4ZjApIDw8IDQpIHwgKCgtaW0pICYgMHhmKSk7Cit9CisKK3N0YXRpYyBp bmxpbmUgdm9pZCB0Y2dfb3V0X3N0MTZ1XzgoVENHQ29udGV4dCAqcywgaW50IGNvbmQsCisgICAg ICAgICAgICAgICAgaW50IHJkLCBpbnQgcm4sIHRjZ190YXJnZXRfbG9uZyBpbSkKK3sKKyAgICBp ZiAoaW0gPj0gMCkKKyAgICAgICAgdGNnX291dDMyKHMsIChjb25kIDw8IDI4KSB8IDB4MDFjMDAw YjAgfAorICAgICAgICAgICAgICAgICAgICAgICAgKHJuIDw8IDE2KSB8IChyZCA8PCAxMikgfAor ICAgICAgICAgICAgICAgICAgICAgICAgKChpbSAmIDB4ZjApIDw8IDQpIHwgKGltICYgMHhmKSk7 CisgICAgZWxzZQorICAgICAgICB0Y2dfb3V0MzIocywgKGNvbmQgPDwgMjgpIHwgMHgwMTQwMDBi MCB8CisgICAgICAgICAgICAgICAgICAgICAgICAocm4gPDwgMTYpIHwgKHJkIDw8IDEyKSB8Cisg ICAgICAgICAgICAgICAgICAgICAgICAoKCgtaW0pICYgMHhmMCkgPDwgNCkgfCAoKC1pbSkgJiAw eGYpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRjZ19vdXRfbGQxNnVfcihUQ0dDb250ZXh0 ICpzLCBpbnQgY29uZCwKKyAgICAgICAgICAgICAgICBpbnQgcmQsIGludCBybiwgaW50IHJtKQor eworICAgIHRjZ19vdXQzMihzLCAoY29uZCA8PCAyOCkgfCAweDAxMTAwMGIwIHwKKyAgICAgICAg ICAgICAgICAgICAgKHJuIDw8IDE2KSB8IChyZCA8PCAxMikgfCBybSk7Cit9CisKK3N0YXRpYyBp bmxpbmUgdm9pZCB0Y2dfb3V0X3N0MTZ1X3IoVENHQ29udGV4dCAqcywgaW50IGNvbmQsCisgICAg ICAgICAgICAgICAgaW50IHJkLCBpbnQgcm4sIGludCBybSkKK3sKKyAgICB0Y2dfb3V0MzIocywg KGNvbmQgPDwgMjgpIHwgMHgwMTAwMDBiMCB8CisgICAgICAgICAgICAgICAgICAgIChybiA8PCAx NikgfCAocmQgPDwgMTIpIHwgcm0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGNnX291dF9s ZDE2c184KFRDR0NvbnRleHQgKnMsIGludCBjb25kLAorICAgICAgICAgICAgICAgIGludCByZCwg aW50IHJuLCB0Y2dfdGFyZ2V0X2xvbmcgaW0pCit7CisgICAgaWYgKGltID49IDApCisgICAgICAg IHRjZ19vdXQzMihzLCAoY29uZCA8PCAyOCkgfCAweDAxZDAwMGYwIHwKKyAgICAgICAgICAgICAg ICAgICAgICAgIChybiA8PCAxNikgfCAocmQgPDwgMTIpIHwKKyAgICAgICAgICAgICAgICAgICAg ICAgICgoaW0gJiAweGYwKSA8PCA0KSB8IChpbSAmIDB4ZikpOworICAgIGVsc2UKKyAgICAgICAg dGNnX291dDMyKHMsIChjb25kIDw8IDI4KSB8IDB4MDE1MDAwZjAgfAorICAgICAgICAgICAgICAg ICAgICAgICAgKHJuIDw8IDE2KSB8IChyZCA8PCAxMikgfAorICAgICAgICAgICAgICAgICAgICAg ICAgKCgoLWltKSAmIDB4ZjApIDw8IDQpIHwgKCgtaW0pICYgMHhmKSk7Cit9CisKK3N0YXRpYyBp bmxpbmUgdm9pZCB0Y2dfb3V0X3N0MTZzXzgoVENHQ29udGV4dCAqcywgaW50IGNvbmQsCisgICAg ICAgICAgICAgICAgaW50IHJkLCBpbnQgcm4sIHRjZ190YXJnZXRfbG9uZyBpbSkKK3sKKyAgICBp ZiAoaW0gPj0gMCkKKyAgICAgICAgdGNnX291dDMyKHMsIChjb25kIDw8IDI4KSB8IDB4MDFjMDAw ZjAgfAorICAgICAgICAgICAgICAgICAgICAgICAgKHJuIDw8IDE2KSB8IChyZCA8PCAxMikgfAor ICAgICAgICAgICAgICAgICAgICAgICAgKChpbSAmIDB4ZjApIDw8IDQpIHwgKGltICYgMHhmKSk7 CisgICAgZWxzZQorICAgICAgICB0Y2dfb3V0MzIocywgKGNvbmQgPDwgMjgpIHwgMHgwMTQwMDBm MCB8CisgICAgICAgICAgICAgICAgICAgICAgICAocm4gPDwgMTYpIHwgKHJkIDw8IDEyKSB8Cisg ICAgICAgICAgICAgICAgICAgICAgICAoKCgtaW0pICYgMHhmMCkgPDwgNCkgfCAoKC1pbSkgJiAw eGYpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRjZ19vdXRfbGQxNnNfcihUQ0dDb250ZXh0 ICpzLCBpbnQgY29uZCwKKyAgICAgICAgICAgICAgICBpbnQgcmQsIGludCBybiwgaW50IHJtKQor eworICAgIHRjZ19vdXQzMihzLCAoY29uZCA8PCAyOCkgfCAweDAxMTAwMGYwIHwKKyAgICAgICAg ICAgICAgICAgICAgKHJuIDw8IDE2KSB8IChyZCA8PCAxMikgfCBybSk7Cit9CisKK3N0YXRpYyBp bmxpbmUgdm9pZCB0Y2dfb3V0X3N0MTZzX3IoVENHQ29udGV4dCAqcywgaW50IGNvbmQsCisgICAg ICAgICAgICAgICAgaW50IHJkLCBpbnQgcm4sIGludCBybSkKK3sKKyAgICB0Y2dfb3V0MzIocywg KGNvbmQgPDwgMjgpIHwgMHgwMTAwMDBmMCB8CisgICAgICAgICAgICAgICAgICAgIChybiA8PCAx NikgfCAocmQgPDwgMTIpIHwgcm0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGNnX291dF9s ZDhfMTIoVENHQ29udGV4dCAqcywgaW50IGNvbmQsCisgICAgICAgICAgICAgICAgaW50IHJkLCBp bnQgcm4sIHRjZ190YXJnZXRfbG9uZyBpbSkKK3sKKyAgICBpZiAoaW0gPj0gMCkKKyAgICAgICAg dGNnX291dDMyKHMsIChjb25kIDw8IDI4KSB8IDB4MDU5MDAwMDAgfAorICAgICAgICAgICAgICAg ICAgICAgICAgKHJuIDw8IDE2KSB8IChyZCA8PCAxMikgfCAoaW0gJiAweGZmZikpOworICAgIGVs c2UKKyAgICAgICAgdGNnX291dDMyKHMsIChjb25kIDw8IDI4KSB8IDB4MDU1MDAwMDAgfAorICAg ICAgICAgICAgICAgICAgICAgICAgKHJuIDw8IDE2KSB8IChyZCA8PCAxMikgfCAoKC1pbSkgJiAw eGZmZikpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGNnX291dF9zdDhfMTIoVENHQ29udGV4 dCAqcywgaW50IGNvbmQsCisgICAgICAgICAgICAgICAgaW50IHJkLCBpbnQgcm4sIHRjZ190YXJn ZXRfbG9uZyBpbSkKK3sKKyAgICBpZiAoaW0gPj0gMCkKKyAgICAgICAgdGNnX291dDMyKHMsIChj b25kIDw8IDI4KSB8IDB4MDVjMDAwMDAgfAorICAgICAgICAgICAgICAgICAgICAgICAgKHJuIDw8 IDE2KSB8IChyZCA8PCAxMikgfCAoaW0gJiAweGZmZikpOworICAgIGVsc2UKKyAgICAgICAgdGNn X291dDMyKHMsIChjb25kIDw8IDI4KSB8IDB4MDU0MDAwMDAgfAorICAgICAgICAgICAgICAgICAg ICAgICAgKHJuIDw8IDE2KSB8IChyZCA8PCAxMikgfCAoKC1pbSkgJiAweGZmZikpOworfQorCitz dGF0aWMgaW5saW5lIHZvaWQgdGNnX291dF9sZDhfcihUQ0dDb250ZXh0ICpzLCBpbnQgY29uZCwK KyAgICAgICAgICAgICAgICBpbnQgcmQsIGludCBybiwgaW50IHJtKQoreworICAgIHRjZ19vdXQz MihzLCAoY29uZCA8PCAyOCkgfCAweDA3NTAwMDAwIHwKKyAgICAgICAgICAgICAgICAgICAgKHJu IDw8IDE2KSB8IChyZCA8PCAxMikgfCBybSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y2df b3V0X3N0OF9yKFRDR0NvbnRleHQgKnMsIGludCBjb25kLAorICAgICAgICAgICAgICAgIGludCBy ZCwgaW50IHJuLCBpbnQgcm0pCit7CisgICAgdGNnX291dDMyKHMsIChjb25kIDw8IDI4KSB8IDB4 MDc0MDAwMDAgfAorICAgICAgICAgICAgICAgICAgICAocm4gPDwgMTYpIHwgKHJkIDw8IDEyKSB8 IHJtKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRjZ19vdXRfbGQ4c184KFRDR0NvbnRleHQg KnMsIGludCBjb25kLAorICAgICAgICAgICAgICAgIGludCByZCwgaW50IHJuLCB0Y2dfdGFyZ2V0 X2xvbmcgaW0pCit7CisgICAgaWYgKGltID49IDApCisgICAgICAgIHRjZ19vdXQzMihzLCAoY29u ZCA8PCAyOCkgfCAweDAxZDAwMGQwIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIChybiA8PCAx NikgfCAocmQgPDwgMTIpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICgoaW0gJiAweGYwKSA8 PCA0KSB8IChpbSAmIDB4ZikpOworICAgIGVsc2UKKyAgICAgICAgdGNnX291dDMyKHMsIChjb25k IDw8IDI4KSB8IDB4MDE1MDAwZDAgfAorICAgICAgICAgICAgICAgICAgICAgICAgKHJuIDw8IDE2 KSB8IChyZCA8PCAxMikgfAorICAgICAgICAgICAgICAgICAgICAgICAgKCgoLWltKSAmIDB4ZjAp IDw8IDQpIHwgKCgtaW0pICYgMHhmKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y2dfb3V0 X3N0OHNfOChUQ0dDb250ZXh0ICpzLCBpbnQgY29uZCwKKyAgICAgICAgICAgICAgICBpbnQgcmQs IGludCBybiwgdGNnX3RhcmdldF9sb25nIGltKQoreworICAgIGlmIChpbSA+PSAwKQorICAgICAg ICB0Y2dfb3V0MzIocywgKGNvbmQgPDwgMjgpIHwgMHgwMWMwMDBkMCB8CisgICAgICAgICAgICAg ICAgICAgICAgICAocm4gPDwgMTYpIHwgKHJkIDw8IDEyKSB8CisgICAgICAgICAgICAgICAgICAg ICAgICAoKGltICYgMHhmMCkgPDwgNCkgfCAoaW0gJiAweGYpKTsKKyAgICBlbHNlCisgICAgICAg IHRjZ19vdXQzMihzLCAoY29uZCA8PCAyOCkgfCAweDAxNDAwMGQwIHwKKyAgICAgICAgICAgICAg ICAgICAgICAgIChybiA8PCAxNikgfCAocmQgPDwgMTIpIHwKKyAgICAgICAgICAgICAgICAgICAg ICAgICgoKC1pbSkgJiAweGYwKSA8PCA0KSB8ICgoLWltKSAmIDB4ZikpOworfQorCitzdGF0aWMg aW5saW5lIHZvaWQgdGNnX291dF9sZDhzX3IoVENHQ29udGV4dCAqcywgaW50IGNvbmQsCisgICAg ICAgICAgICAgICAgaW50IHJkLCBpbnQgcm4sIGludCBybSkKK3sKKyAgICB0Y2dfb3V0MzIocywg KGNvbmQgPDwgMjgpIHwgMHgwMTEwMDBmMCB8CisgICAgICAgICAgICAgICAgICAgIChybiA8PCAx NikgfCAocmQgPDwgMTIpIHwgcm0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGNnX291dF9z dDhzX3IoVENHQ29udGV4dCAqcywgaW50IGNvbmQsCisgICAgICAgICAgICAgICAgaW50IHJkLCBp bnQgcm4sIGludCBybSkKK3sKKyAgICB0Y2dfb3V0MzIocywgKGNvbmQgPDwgMjgpIHwgMHgwMTAw MDBmMCB8CisgICAgICAgICAgICAgICAgICAgIChybiA8PCAxNikgfCAocmQgPDwgMTIpIHwgcm0p OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGNnX291dF9sZDMydShUQ0dDb250ZXh0ICpzLCBp bnQgY29uZCwKKyAgICAgICAgICAgICAgICBpbnQgcmQsIGludCBybiwgaW50MzJfdCBvZmZzZXQp Cit7CisgICAgaWYgKG9mZnNldCA+IDB4ZmZmIHx8IG9mZnNldCA8IC0weGZmZikgeworICAgICAg ICB0Y2dfb3V0X21vdmkzMihzLCBjb25kLCBUQ0dfUkVHX1I4LCBvZmZzZXQpOworICAgICAgICB0 Y2dfb3V0X2xkMzJfcihzLCBjb25kLCByZCwgcm4sIFRDR19SRUdfUjgpOworICAgIH0gZWxzZQor ICAgICAgICB0Y2dfb3V0X2xkMzJfMTIocywgY29uZCwgcmQsIHJuLCBvZmZzZXQpOworfQorCitz dGF0aWMgaW5saW5lIHZvaWQgdGNnX291dF9zdDMyKFRDR0NvbnRleHQgKnMsIGludCBjb25kLAor ICAgICAgICAgICAgICAgIGludCByZCwgaW50IHJuLCBpbnQzMl90IG9mZnNldCkKK3sKKyAgICBp ZiAob2Zmc2V0ID4gMHhmZmYgfHwgb2Zmc2V0IDwgLTB4ZmZmKSB7CisgICAgICAgIHRjZ19vdXRf bW92aTMyKHMsIGNvbmQsIFRDR19SRUdfUjgsIG9mZnNldCk7CisgICAgICAgIHRjZ19vdXRfc3Qz Ml9yKHMsIGNvbmQsIHJkLCBybiwgVENHX1JFR19SOCk7CisgICAgfSBlbHNlCisgICAgICAgIHRj Z19vdXRfc3QzMl8xMihzLCBjb25kLCByZCwgcm4sIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxp bmUgdm9pZCB0Y2dfb3V0X2xkMTZ1KFRDR0NvbnRleHQgKnMsIGludCBjb25kLAorICAgICAgICAg ICAgICAgIGludCByZCwgaW50IHJuLCBpbnQzMl90IG9mZnNldCkKK3sKKyAgICBpZiAob2Zmc2V0 ID4gMHhmZiB8fCBvZmZzZXQgPCAtMHhmZikgeworICAgICAgICB0Y2dfb3V0X21vdmkzMihzLCBj b25kLCBUQ0dfUkVHX1I4LCBvZmZzZXQpOworICAgICAgICB0Y2dfb3V0X2xkMTZ1X3IocywgY29u ZCwgcmQsIHJuLCBUQ0dfUkVHX1I4KTsKKyAgICB9IGVsc2UKKyAgICAgICAgdGNnX291dF9sZDE2 dV84KHMsIGNvbmQsIHJkLCBybiwgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRj Z19vdXRfbGQxNnMoVENHQ29udGV4dCAqcywgaW50IGNvbmQsCisgICAgICAgICAgICAgICAgaW50 IHJkLCBpbnQgcm4sIGludDMyX3Qgb2Zmc2V0KQoreworICAgIGlmIChvZmZzZXQgPiAweGZmIHx8 IG9mZnNldCA8IC0weGZmKSB7CisgICAgICAgIHRjZ19vdXRfbW92aTMyKHMsIGNvbmQsIFRDR19S RUdfUjgsIG9mZnNldCk7CisgICAgICAgIHRjZ19vdXRfbGQxNnNfcihzLCBjb25kLCByZCwgcm4s IFRDR19SRUdfUjgpOworICAgIH0gZWxzZQorICAgICAgICB0Y2dfb3V0X2xkMTZzXzgocywgY29u ZCwgcmQsIHJuLCBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGNnX291dF9zdDE2 dShUQ0dDb250ZXh0ICpzLCBpbnQgY29uZCwKKyAgICAgICAgICAgICAgICBpbnQgcmQsIGludCBy biwgaW50MzJfdCBvZmZzZXQpCit7CisgICAgaWYgKG9mZnNldCA+IDB4ZmYgfHwgb2Zmc2V0IDwg LTB4ZmYpIHsKKyAgICAgICAgdGNnX291dF9tb3ZpMzIocywgY29uZCwgVENHX1JFR19SOCwgb2Zm c2V0KTsKKyAgICAgICAgdGNnX291dF9zdDE2dV9yKHMsIGNvbmQsIHJkLCBybiwgVENHX1JFR19S OCk7CisgICAgfSBlbHNlCisgICAgICAgIHRjZ19vdXRfc3QxNnVfOChzLCBjb25kLCByZCwgcm4s IG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y2dfb3V0X2xkOHUoVENHQ29udGV4 dCAqcywgaW50IGNvbmQsCisgICAgICAgICAgICAgICAgaW50IHJkLCBpbnQgcm4sIGludDMyX3Qg b2Zmc2V0KQoreworICAgIGlmIChvZmZzZXQgPiAweGZmZiB8fCBvZmZzZXQgPCAtMHhmZmYpIHsK KyAgICAgICAgdGNnX291dF9tb3ZpMzIocywgY29uZCwgVENHX1JFR19SOCwgb2Zmc2V0KTsKKyAg ICAgICAgdGNnX291dF9sZDhfcihzLCBjb25kLCByZCwgcm4sIFRDR19SRUdfUjgpOworICAgIH0g ZWxzZQorICAgICAgICB0Y2dfb3V0X2xkOF8xMihzLCBjb25kLCByZCwgcm4sIG9mZnNldCk7Cit9 CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y2dfb3V0X2xkOHMoVENHQ29udGV4dCAqcywgaW50IGNv bmQsCisgICAgICAgICAgICAgICAgaW50IHJkLCBpbnQgcm4sIGludDMyX3Qgb2Zmc2V0KQorewor ICAgIGlmIChvZmZzZXQgPiAweGZmIHx8IG9mZnNldCA8IC0weGZmKSB7CisgICAgICAgIHRjZ19v dXRfbW92aTMyKHMsIGNvbmQsIFRDR19SRUdfUjgsIG9mZnNldCk7CisgICAgICAgIHRjZ19vdXRf bGQ4c19yKHMsIGNvbmQsIHJkLCBybiwgVENHX1JFR19SOCk7CisgICAgfSBlbHNlCisgICAgICAg IHRjZ19vdXRfbGQ4c184KHMsIGNvbmQsIHJkLCBybiwgb2Zmc2V0KTsKK30KKworc3RhdGljIGlu bGluZSB2b2lkIHRjZ19vdXRfc3Q4dShUQ0dDb250ZXh0ICpzLCBpbnQgY29uZCwKKyAgICAgICAg ICAgICAgICBpbnQgcmQsIGludCBybiwgaW50MzJfdCBvZmZzZXQpCit7CisgICAgaWYgKG9mZnNl dCA+IDB4ZmZmIHx8IG9mZnNldCA8IC0weGZmZikgeworICAgICAgICB0Y2dfb3V0X21vdmkzMihz LCBjb25kLCBUQ0dfUkVHX1I4LCBvZmZzZXQpOworICAgICAgICB0Y2dfb3V0X3N0OF9yKHMsIGNv bmQsIHJkLCBybiwgVENHX1JFR19SOCk7CisgICAgfSBlbHNlCisgICAgICAgIHRjZ19vdXRfc3Q4 XzEyKHMsIGNvbmQsIHJkLCBybiwgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRj Z19vdXRfZ290byhUQ0dDb250ZXh0ICpzLCBpbnQgY29uZCwgdWludDMyX3QgYWRkcikKK3sKKyAg ICBpbnQzMl90IHZhbDsKKworICAgIHZhbCA9IGFkZHIgLSAodGNnX3RhcmdldF9sb25nKSBzLT5j b2RlX3B0cjsKKyAgICBpZiAodmFsIDwgMHgwMWZmZmZmZCAmJiB2YWwgPiAtMHgwMWZmZmZmZCkK KyAgICAgICAgdGNnX291dF9iKHMsIGNvbmQsIHZhbCk7CisgICAgZWxzZSB7CisjaWYgMQorICAg ICAgICB0Y2dfYWJvcnQoKTsKKyNlbHNlCisgICAgICAgIGlmIChjb25kID09IENPTkRfQUwpIHsK KyAgICAgICAgICAgIHRjZ19vdXRfbGQzMl8xMihzLCBDT05EX0FMLCAxNSwgMTUsIC00KTsKKyAg ICAgICAgICAgIHRjZ19vdXQzMihzLCBhZGRyKTsgLyogWFhYOiBUaGlzIGlzIGwtPnUudmFsdWUs IGNhbiB3ZSB1c2UgaXQ/ICovCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0Y2dfb3V0 X21vdmkzMihzLCBjb25kLCBUQ0dfUkVHX1I4LCB2YWwgLSA4KTsKKyAgICAgICAgICAgIHRjZ19v dXRfZGF0X3JlZyhzLCBjb25kLCBBUklUSF9BREQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMTUsIDE1LCBUQ0dfUkVHX1I4LCBTSElGVF9JTU1fTFNMKDApKTsKKyAgICAgICAgfQorI2Vu ZGlmCisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGNnX291dF9jYWxsKFRDR0NvbnRl eHQgKnMsIGludCBjb25kLCB1aW50MzJfdCBhZGRyKQoreworICAgIGludDMyX3QgdmFsOworCisg ICAgLyogVE9ETzogd2Uga2luZG9mIGNsb2JiZXIgcjgsIHI5IC0gZG8gd2UgY2FyZT8gICovCisg ICAgdGNnX291dF9kYXRfcmVnKHMsIGNvbmQsIEFSSVRIX01PViwgVENHX1JFR19SOCwgMCwgMTQs IFNISUZUX0lNTV9MU0woMCkpOworCisgICAgdmFsID0gYWRkciAtICh0Y2dfdGFyZ2V0X2xvbmcp IHMtPmNvZGVfcHRyOworICAgIGlmICh2YWwgPCAweDAxZmZmZmZkICYmIHZhbCA+IC0weDAxZmZm ZmZkKQorICAgICAgICB0Y2dfb3V0X2JsKHMsIGNvbmQsIHZhbCk7CisgICAgZWxzZSB7CisjaWYg MQorICAgICAgICB0Y2dfYWJvcnQoKTsKKyNlbHNlCisgICAgICAgIGlmIChjb25kID09IENPTkRf QUwpIHsKKyAgICAgICAgICAgIHRjZ19vdXRfZGF0X2ltbShzLCBjb25kLCBBUklUSF9BREQsIDE0 LCAxNSwgNCk7CisgICAgICAgICAgICB0Y2dfb3V0X2xkMzJfMTIocywgQ09ORF9BTCwgMTUsIDE1 LCAtNCk7CisgICAgICAgICAgICB0Y2dfb3V0MzIocywgYWRkcik7IC8qIFhYWDogVGhpcyBpcyBs LT51LnZhbHVlLCBjYW4gd2UgdXNlIGl0PyAqLworICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgdGNnX291dF9tb3ZpMzIocywgY29uZCwgVENHX1JFR19SOSwgYWRkcik7CisgICAgICAgICAg ICB0Y2dfb3V0X2RhdF9pbW0ocywgY29uZCwgQVJJVEhfTU9WLCAxNCwgMCwgMTUpOworICAgICAg ICAgICAgdGNnX291dF9ieChzLCBjb25kLCBUQ0dfUkVHX1I5KTsKKyAgICAgICAgfQorI2VuZGlm CisgICAgfQorCisgICAgdGNnX291dF9kYXRfcmVnKHMsIGNvbmQsIEFSSVRIX01PViwgMTQsIDAs IFRDR19SRUdfUjgsIFNISUZUX0lNTV9MU0woMCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQg dGNnX291dF9jYWxscihUQ0dDb250ZXh0ICpzLCBpbnQgY29uZCwgaW50IGFyZykKK3sKKyAgICAv KiBUT0RPOiB3ZSBraW5kb2YgY2xvYmJlciByOCAtIGRvIHdlIGNhcmU/ICAqLworICAgIHRjZ19v dXRfZGF0X3JlZyhzLCBjb25kLCBBUklUSF9NT1YsIFRDR19SRUdfUjgsIDAsIDE0LCBTSElGVF9J TU1fTFNMKDApKTsKKyAgICB0Y2dfb3V0X2RhdF9yZWcocywgY29uZCwgQVJJVEhfTU9WLCAxNCwg MCwgMTUsIFNISUZUX0lNTV9MU0woMCkpOworICAgIHRjZ19vdXRfYngocywgY29uZCwgYXJnKTsK KyAgICB0Y2dfb3V0X2RhdF9yZWcocywgY29uZCwgQVJJVEhfTU9WLCAxNCwgMCwgVENHX1JFR19S OCwgU0hJRlRfSU1NX0xTTCgwKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y2dfb3V0X2dv dG9fbGFiZWwoVENHQ29udGV4dCAqcywgaW50IGNvbmQsIGludCBsYWJlbF9pbmRleCkKK3sKKyAg ICBUQ0dMYWJlbCAqbCA9ICZzLT5sYWJlbHNbbGFiZWxfaW5kZXhdOworCisgICAgaWYgKGwtPmhh c192YWx1ZSkKKyAgICAgICAgdGNnX291dF9nb3RvKHMsIGNvbmQsIGwtPnUudmFsdWUpOworICAg IGVsc2UgaWYgKGNvbmQgPT0gQ09ORF9BTCkgeworICAgICAgICB0Y2dfb3V0X2xkMzJfMTIocywg Q09ORF9BTCwgMTUsIDE1LCAtNCk7CisgICAgICAgIHRjZ19vdXRfcmVsb2Mocywgcy0+Y29kZV9w dHIsIFJfQVJNX0FCUzMyLCBsYWJlbF9pbmRleCwgMzEzMzcpOworICAgICAgICBzLT5jb2RlX3B0 ciArPSA0OworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIFByb2JhYmx5IHRoaXMgc2hvdWxkIGJl IHByZWZlcnJlZCBldmVuIGZvciBDT05EX0FMLi4uICovCisgICAgICAgIHRjZ19vdXRfcmVsb2Mo cywgcy0+Y29kZV9wdHIsIFJfQVJNX1BDMjQsIGxhYmVsX2luZGV4LCAzMTMzNyk7CisgICAgICAg IHRjZ19vdXRfYihzLCBjb25kLCA4KTsKKyAgICB9Cit9CisKK2V4dGVybiB2b2lkIF9fbGRiX21t dSh2b2lkKTsKK2V4dGVybiB2b2lkIF9fbGR3X21tdSh2b2lkKTsKK2V4dGVybiB2b2lkIF9fbGRs X21tdSh2b2lkKTsKK2V4dGVybiB2b2lkIF9fbGRxX21tdSh2b2lkKTsKKworZXh0ZXJuIHZvaWQg X19zdGJfbW11KHZvaWQpOworZXh0ZXJuIHZvaWQgX19zdHdfbW11KHZvaWQpOworZXh0ZXJuIHZv aWQgX19zdGxfbW11KHZvaWQpOworZXh0ZXJuIHZvaWQgX19zdHFfbW11KHZvaWQpOworCitzdGF0 aWMgdm9pZCAqcWVtdV9sZF9oZWxwZXJzWzRdID0geworICAgIF9fbGRiX21tdSwKKyAgICBfX2xk d19tbXUsCisgICAgX19sZGxfbW11LAorICAgIF9fbGRxX21tdSwKK307CisKK3N0YXRpYyB2b2lk ICpxZW11X3N0X2hlbHBlcnNbNF0gPSB7CisgICAgX19zdGJfbW11LAorICAgIF9fc3R3X21tdSwK KyAgICBfX3N0bF9tbXUsCisgICAgX19zdHFfbW11LAorfTsKKworc3RhdGljIGlubGluZSB2b2lk IHRjZ19vdXRfcWVtdV9sZChUQ0dDb250ZXh0ICpzLCBpbnQgY29uZCwKKyAgICAgICAgICAgICAg ICBjb25zdCBUQ0dBcmcgKmFyZ3MsIGludCBvcGMpCit7CisgICAgaW50IGFkZHJfcmVnLCBkYXRh X3JlZywgZGF0YV9yZWcyLCBtZW1faW5kZXgsIHNfYml0czsKKyNpZiBUQVJHRVRfTE9OR19CSVRT ID09IDY0CisgICAgaW50IGFkZHJfcmVnMjsKKyNlbmRpZgorCisgICAgdGNnX291dF9kYXRfcmVn KHMsIGNvbmQsIEFSSVRIX01PViwgOCwgMCwgMTQsIFNISUZUX0lNTV9MU0woMCkpOworCisgICAg ZGF0YV9yZWcgPSAqYXJncysrOworICAgIGlmIChvcGMgPT0gMykKKyAgICAgICAgZGF0YV9yZWcy ID0gKmFyZ3MrKzsKKyAgICBlbHNlCisgICAgICAgIGRhdGFfcmVnMiA9IDA7IC8qIHN1cnByZXNz IHdhcm5pbmcgKi8KKyAgICBhZGRyX3JlZyA9ICphcmdzKys7CisjaWYgVEFSR0VUX0xPTkdfQklU UyA9PSA2NAorICAgIGFkZHJfcmVnMiA9ICphcmdzKys7CisjZW5kaWYKKyAgICBtZW1faW5kZXgg PSAqYXJnczsKKyAgICBzX2JpdHMgPSBvcGMgJiAzOworCisgICAgaWYgKGFkZHJfcmVnKQorICAg ICAgICB0Y2dfb3V0X2RhdF9yZWcocywgY29uZCwgQVJJVEhfTU9WLAorICAgICAgICAgICAgICAg ICAgICAgICAgMCwgMCwgYWRkcl9yZWcsIFNISUZUX0lNTV9MU0woMCkpOworI2lmIFRBUkdFVF9M T05HX0JJVFMgPT0gMzIKKyAgICB0Y2dfb3V0X2RhdF9pbW0ocywgY29uZCwgQVJJVEhfTU9WLCAx LCAwLCBtZW1faW5kZXgpOworI2Vsc2UKKyAgICBpZiAoYWRkcl9yZWcyICE9IDEpCisgICAgICAg IHRjZ19vdXRfZGF0X3JlZyhzLCBjb25kLCBBUklUSF9NT1YsCisgICAgICAgICAgICAgICAgICAg ICAgICAxLCAwLCBhZGRyX3JlZzIsIFNISUZUX0lNTV9MU0woMCkpOworICAgIHRjZ19vdXRfZGF0 X2ltbShzLCBjb25kLCBBUklUSF9NT1YsIDIsIDAsIG1lbV9pbmRleCk7CisjZW5kaWYKKyAgICB0 Y2dfb3V0X2JsKHMsIGNvbmQsICh0Y2dfdGFyZ2V0X2xvbmcpIHFlbXVfbGRfaGVscGVyc1tzX2Jp dHNdIC0gCisgICAgICAgICAgICAgICAgICAgICh0Y2dfdGFyZ2V0X2xvbmcpIHMtPmNvZGVfcHRy KTsKKworICAgIHN3aXRjaCAob3BjKSB7CisgICAgY2FzZSAwIHwgNDoKKyAgICAgICAgdGNnX291 dF9kYXRfcmVnKHMsIGNvbmQsIEFSSVRIX01PViwKKyAgICAgICAgICAgICAgICAgICAgICAgIDAs IDAsIDAsIFNISUZUX0lNTV9MU0woMjQpKTsKKyAgICAgICAgdGNnX291dF9kYXRfcmVnKHMsIGNv bmQsIEFSSVRIX01PViwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfcmVnLCAwLCAwLCBT SElGVF9JTU1fQVNSKDI0KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMSB8IDQ6CisgICAg ICAgIHRjZ19vdXRfZGF0X3JlZyhzLCBjb25kLCBBUklUSF9NT1YsCisgICAgICAgICAgICAgICAg ICAgICAgICAwLCAwLCAwLCBTSElGVF9JTU1fTFNMKDE2KSk7CisgICAgICAgIHRjZ19vdXRfZGF0 X3JlZyhzLCBjb25kLCBBUklUSF9NT1YsCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3Jl ZywgMCwgMCwgU0hJRlRfSU1NX0FTUigxNikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDA6 CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICBkZWZhdWx0OgorICAgICAgICBpZiAoZGF0 YV9yZWcpCisgICAgICAgICAgICB0Y2dfb3V0X2RhdF9yZWcocywgY29uZCwgQVJJVEhfTU9WLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfcmVnLCAwLCAwLCBTSElGVF9JTU1fTFNM KDApKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAzOgorICAgICAgICBpZiAoZGF0YV9yZWcy ICE9IDEpCisgICAgICAgICAgICB0Y2dfb3V0X2RhdF9yZWcocywgY29uZCwgQVJJVEhfTU9WLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfcmVnMiwgMCwgMSwgU0hJRlRfSU1NX0xT TCgwKSk7CisgICAgICAgIGlmIChkYXRhX3JlZyAhPSAwKQorICAgICAgICAgICAgdGNnX291dF9k YXRfcmVnKHMsIGNvbmQsIEFSSVRIX01PViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBk YXRhX3JlZywgMCwgMCwgU0hJRlRfSU1NX0xTTCgwKSk7CisgICAgICAgIGJyZWFrOworICAgIH0K KworICAgIHRjZ19vdXRfZGF0X3JlZyhzLCBjb25kLCBBUklUSF9NT1YsIDE0LCAwLCA4LCBTSElG VF9JTU1fTFNMKDApKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRjZ19vdXRfcWVtdV9zdChU Q0dDb250ZXh0ICpzLCBpbnQgY29uZCwKKyAgICAgICAgICAgICAgICBjb25zdCBUQ0dBcmcgKmFy Z3MsIGludCBvcGMpCit7CisgICAgaW50IGFkZHJfcmVnLCBkYXRhX3JlZywgZGF0YV9yZWcyLCBt ZW1faW5kZXgsIHNfYml0czsKKyNpZiBUQVJHRVRfTE9OR19CSVRTID09IDY0CisgICAgaW50IGFk ZHJfcmVnMjsKKyNlbmRpZgorCisgICAgdGNnX291dF9kYXRfcmVnKHMsIGNvbmQsIEFSSVRIX01P ViwgOCwgMCwgMTQsIFNISUZUX0lNTV9MU0woMCkpOworCisgICAgZGF0YV9yZWcgPSAqYXJncysr OworICAgIGlmIChvcGMgPT0gMykKKyAgICAgICAgZGF0YV9yZWcyID0gKmFyZ3MrKzsKKyAgICBl bHNlCisgICAgICAgIGRhdGFfcmVnMiA9IDA7IC8qIHN1cnByZXNzIHdhcm5pbmcgKi8KKyAgICBh ZGRyX3JlZyA9ICphcmdzKys7CisjaWYgVEFSR0VUX0xPTkdfQklUUyA9PSA2NAorICAgIGFkZHJf cmVnMiA9ICphcmdzKys7CisjZW5kaWYKKyAgICBtZW1faW5kZXggPSAqYXJnczsKKyAgICBzX2Jp dHMgPSBvcGMgJiAzOworCisgICAgaWYgKGFkZHJfcmVnKQorICAgICAgICB0Y2dfb3V0X2RhdF9y ZWcocywgY29uZCwgQVJJVEhfTU9WLAorICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgYWRk cl9yZWcsIFNISUZUX0lNTV9MU0woMCkpOworI2lmIFRBUkdFVF9MT05HX0JJVFMgPT0gMzIKKyAg ICBzd2l0Y2ggKG9wYykgeworICAgIGNhc2UgMDoKKyAgICAgICAgdGNnX291dF9kYXRfaW1tKHMs IGNvbmQsIEFSSVRIX0FORCwgMSwgZGF0YV9yZWcsIDB4ZmYpOworICAgICAgICB0Y2dfb3V0X2Rh dF9pbW0ocywgY29uZCwgQVJJVEhfTU9WLCAyLCAwLCBtZW1faW5kZXgpOworICAgICAgICBicmVh azsKKyAgICBjYXNlIDE6CisgICAgICAgIHRjZ19vdXRfZGF0X3JlZyhzLCBjb25kLCBBUklUSF9N T1YsCisgICAgICAgICAgICAgICAgICAgICAgICAxLCAwLCBkYXRhX3JlZywgU0hJRlRfSU1NX0xT TCgxNikpOworICAgICAgICB0Y2dfb3V0X2RhdF9yZWcocywgY29uZCwgQVJJVEhfTU9WLAorICAg ICAgICAgICAgICAgICAgICAgICAgMSwgMCwgMSwgU0hJRlRfSU1NX0xTUigxNikpOworICAgICAg ICB0Y2dfb3V0X2RhdF9pbW0ocywgY29uZCwgQVJJVEhfTU9WLCAyLCAwLCBtZW1faW5kZXgpOwor ICAgICAgICBicmVhazsKKyAgICBjYXNlIDI6CisgICAgICAgIGlmIChkYXRhX3JlZyAhPSAxKQor ICAgICAgICAgICAgdGNnX291dF9kYXRfcmVnKHMsIGNvbmQsIEFSSVRIX01PViwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAxLCAwLCBkYXRhX3JlZywgU0hJRlRfSU1NX0xTTCgwKSk7Cisg ICAgICAgIHRjZ19vdXRfZGF0X2ltbShzLCBjb25kLCBBUklUSF9NT1YsIDIsIDAsIG1lbV9pbmRl eCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMzoKKyAgICAgICAgaWYgKGRhdGFfcmVnICE9 IDEpCisgICAgICAgICAgICB0Y2dfb3V0X2RhdF9yZWcocywgY29uZCwgQVJJVEhfTU9WLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDAsIGRhdGFfcmVnLCBTSElGVF9JTU1fTFNMKDAp KTsKKyAgICAgICAgaWYgKGRhdGFfcmVnMiAhPSAyKQorICAgICAgICAgICAgdGNnX291dF9kYXRf cmVnKHMsIGNvbmQsIEFSSVRIX01PViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLCAw LCBkYXRhX3JlZzIsIFNISUZUX0lNTV9MU0woMCkpOworICAgICAgICB0Y2dfb3V0X2RhdF9pbW0o cywgY29uZCwgQVJJVEhfTU9WLCAzLCAwLCBtZW1faW5kZXgpOworICAgICAgICBicmVhazsKKyAg ICB9CisjZWxzZQorICAgIGlmIChhZGRyX3JlZzIgIT0gMSkKKyAgICAgICAgdGNnX291dF9kYXRf cmVnKHMsIGNvbmQsIEFSSVRIX01PViwKKyAgICAgICAgICAgICAgICAgICAgICAgIDEsIDAsIGFk ZHJfcmVnMiwgU0hJRlRfSU1NX0xTTCgwKSk7CisgICAgc3dpdGNoIChvcGMpIHsKKyAgICBjYXNl IDA6CisgICAgICAgIHRjZ19vdXRfZGF0X2ltbShzLCBjb25kLCBBUklUSF9BTkQsIDIsIGRhdGFf cmVnLCAweGZmKTsKKyAgICAgICAgdGNnX291dF9kYXRfaW1tKHMsIGNvbmQsIEFSSVRIX01PViwg MywgMCwgbWVtX2luZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgICAgICB0 Y2dfb3V0X2RhdF9yZWcocywgY29uZCwgQVJJVEhfTU9WLAorICAgICAgICAgICAgICAgICAgICAg ICAgMiwgMCwgZGF0YV9yZWcsIFNISUZUX0lNTV9MU0woMTYpKTsKKyAgICAgICAgdGNnX291dF9k YXRfcmVnKHMsIGNvbmQsIEFSSVRIX01PViwKKyAgICAgICAgICAgICAgICAgICAgICAgIDIsIDAs IDIsIFNISUZUX0lNTV9MU1IoMTYpKTsKKyAgICAgICAgdGNnX291dF9kYXRfaW1tKHMsIGNvbmQs IEFSSVRIX01PViwgMywgMCwgbWVtX2luZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAy OgorICAgICAgICBpZiAoZGF0YV9yZWcgIT0gMikKKyAgICAgICAgICAgIHRjZ19vdXRfZGF0X3Jl ZyhzLCBjb25kLCBBUklUSF9NT1YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiwgMCwg ZGF0YV9yZWcsIFNISUZUX0lNTV9MU0woMCkpOworICAgICAgICB0Y2dfb3V0X2RhdF9pbW0ocywg Y29uZCwgQVJJVEhfTU9WLCAzLCAwLCBtZW1faW5kZXgpOworICAgICAgICBicmVhazsKKyAgICBj YXNlIDM6CisgICAgICAgIHRjZ19vdXRfZGF0X2ltbShzLCBjb25kLCBBUklUSF9NT1YsIDMsIDAs IG1lbV9pbmRleCk7CisgICAgICAgIHRjZ19vdXQzMihzLCAoY29uZCA8PCAyOCkgfCAweDA1MmQz MDEwKTsgLyogc3RyIHIzLCBbc3AsICMtMHgxMF0hICovCisgICAgICAgIGlmIChkYXRhX3JlZyAh PSAyKQorICAgICAgICAgICAgdGNnX291dF9kYXRfcmVnKHMsIGNvbmQsIEFSSVRIX01PViwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAyLCAwLCBkYXRhX3JlZywgU0hJRlRfSU1NX0xTTCgw KSk7CisgICAgICAgIGlmIChkYXRhX3JlZzIgIT0gMykKKyAgICAgICAgICAgIHRjZ19vdXRfZGF0 X3JlZyhzLCBjb25kLCBBUklUSF9NT1YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMywg MCwgZGF0YV9yZWcyLCBTSElGVF9JTU1fTFNMKDApKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor I2VuZGlmCisKKyAgICB0Y2dfb3V0X2JsKHMsIGNvbmQsICh0Y2dfdGFyZ2V0X2xvbmcpIHFlbXVf c3RfaGVscGVyc1tzX2JpdHNdIC0gCisgICAgICAgICAgICAgICAgICAgICh0Y2dfdGFyZ2V0X2xv bmcpIHMtPmNvZGVfcHRyKTsKKworI2lmIFRBUkdFVF9MT05HX0JJVFMgPT0gNjQKKyAgICBpZiAo b3BjID09IDMpCisgICAgICAgIHRjZ19vdXRfZGF0X2ltbShzLCBjb25kLCBBUklUSF9BREQsIDEz LCAxMywgMHgxMCk7CisjZW5kaWYKKworICAgIHRjZ19vdXRfZGF0X3JlZyhzLCBjb25kLCBBUklU SF9NT1YsIDE0LCAwLCA4LCBTSElGVF9JTU1fTFNMKDApKTsKK30KKworZXh0ZXJuIHZvaWQgZXhl Y19sb29wOworCitzdGF0aWMgaW5saW5lIHZvaWQgdGNnX291dF9vcChUQ0dDb250ZXh0ICpzLCBp bnQgb3BjLCAKKyAgICAgICAgICAgICAgICBjb25zdCBUQ0dBcmcgKmFyZ3MsIGNvbnN0IGludCAq Y29uc3RfYXJncykKK3sKKyAgICBpbnQgYzsKKworICAgIHN3aXRjaChvcGMpIHsKKyAgICBjYXNl IElOREVYX29wX2V4aXRfdGI6CisjaWYgMQorICAgICAgICBpZiAoYXJnc1swXSkKKyAgICAgICAg ICAgIHRjZ19vdXRfbGQzMl8xMihzLCBDT05EX0FMLCBUQ0dfUkVHX1IwLCAxNSwgMCk7CisgICAg ICAgIGVsc2UKKyAgICAgICAgICAgIHRjZ19vdXRfZGF0X2ltbShzLCBDT05EX0FMLCBBUklUSF9N T1YsIFRDR19SRUdfUjAsIDAsIGFyZ3NbMF0pOworICAgICAgICB0Y2dfb3V0X2RhdF9yZWcocywg Q09ORF9BTCwgQVJJVEhfTU9WLCAxNSwgMCwgMTQsIFNISUZUX0lNTV9MU0woMCkpOworICAgICAg ICBpZiAoYXJnc1swXSkKKyAgICAgICAgICAgIHRjZ19vdXQzMihzLCBhcmdzWzBdKTsKKyNlbHNl CisgICAgICAgIHRjZ19vdXRfZ290byhzLCBDT05EX0FMLCAmZXhlY19sb29wKTsKKyNlbmRpZgor ICAgICAgICBicmVhazsKKyAgICBjYXNlIElOREVYX29wX2dvdG9fdGI6CisgICAgICAgIGlmIChz LT50Yl9qbXBfb2Zmc2V0KSB7CisgICAgICAgICAgICAvKiBEaXJlY3QganVtcCBtZXRob2QgKi8K KyNpZiAxCisgICAgICAgICAgICBzLT50Yl9qbXBfb2Zmc2V0W2FyZ3NbMF1dID0gcy0+Y29kZV9w dHIgLSBzLT5jb2RlX2J1ZjsKKyAgICAgICAgICAgIHRjZ19vdXRfYihzLCBDT05EX0FMLCA4KTsK KyNlbHNlCisgICAgICAgICAgICB0Y2dfb3V0X2xkMzJfMTIocywgQ09ORF9BTCwgMTUsIDE1LCAt NCk7CisgICAgICAgICAgICBzLT50Yl9qbXBfb2Zmc2V0W2FyZ3NbMF1dID0gcy0+Y29kZV9wdHIg LSBzLT5jb2RlX2J1ZjsKKyAgICAgICAgICAgIHRjZ19vdXQzMihzLCAwKTsKKyNlbmRpZgorICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogSW5kaXJlY3QganVtcCBtZXRob2QgKi8KKyNp ZiAxCisgICAgICAgICAgICBjID0gKGludCkgKHMtPnRiX25leHQgKyBhcmdzWzBdKSAtICgoaW50 KSBzLT5jb2RlX3B0ciArIDgpOworICAgICAgICAgICAgaWYgKGMgPiAweGZmZiB8fCBjIDwgLTB4 ZmZmKSB7CisgICAgICAgICAgICAgICAgdGNnX291dF9tb3ZpMzIocywgQ09ORF9BTCwgVENHX1JF R19SMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRjZ190YXJnZXRfbG9uZykg KHMtPnRiX25leHQgKyBhcmdzWzBdKSk7CisgICAgICAgICAgICAgICAgdGNnX291dF9sZDMyXzEy KHMsIENPTkRfQUwsIDE1LCBUQ0dfUkVHX1IwLCAwKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAg ICAgICAgICAgICAgIHRjZ19vdXRfbGQzMl8xMihzLCBDT05EX0FMLCAxNSwgMTUsIGMpOworI2Vs c2UKKyAgICAgICAgICAgIHRjZ19vdXRfbGQzMl8xMihzLCBDT05EX0FMLCBUQ0dfUkVHX1IwLCAx NSwgMCk7CisgICAgICAgICAgICB0Y2dfb3V0X2xkMzJfMTIocywgQ09ORF9BTCwgMTUsIFRDR19S RUdfUjAsIDApOworICAgICAgICAgICAgdGNnX291dDMyKHMsICh0Y2dfdGFyZ2V0X2xvbmcpIChz LT50Yl9uZXh0ICsgYXJnc1swXSkpOworI2VuZGlmCisgICAgICAgIH0KKyAgICAgICAgcy0+dGJf bmV4dF9vZmZzZXRbYXJnc1swXV0gPSBzLT5jb2RlX3B0ciAtIHMtPmNvZGVfYnVmOworICAgICAg ICBicmVhazsKKyAgICBjYXNlIElOREVYX29wX2NhbGw6CisgICAgICAgIGlmIChjb25zdF9hcmdz WzBdKQorICAgICAgICAgICAgdGNnX291dF9jYWxsKHMsIENPTkRfQUwsIGFyZ3NbMF0pOworICAg ICAgICBlbHNlCisgICAgICAgICAgICB0Y2dfb3V0X2NhbGxyKHMsIENPTkRfQUwsIGFyZ3NbMF0p OworICAgICAgICBicmVhazsKKyAgICBjYXNlIElOREVYX29wX2ptcDoKKyAgICAgICAgaWYgKGNv bnN0X2FyZ3NbMF0pCisgICAgICAgICAgICB0Y2dfb3V0X2dvdG8ocywgQ09ORF9BTCwgYXJnc1sw XSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRjZ19vdXRfYngocywgQ09ORF9BTCwgYXJn c1swXSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSU5ERVhfb3BfYnI6CisgICAgICAgIHRj Z19vdXRfZ290b19sYWJlbChzLCBDT05EX0FMLCBhcmdzWzBdKTsKKyAgICAgICAgYnJlYWs7CisK KyAgICBjYXNlIElOREVYX29wX2xkOHVfaTMyOgorICAgICAgICB0Y2dfb3V0X2xkOHUocywgQ09O RF9BTCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7CisgICAgICAgIGJyZWFrOworICAgIGNh c2UgSU5ERVhfb3BfbGQ4c19pMzI6CisgICAgICAgIHRjZ19vdXRfbGQ4cyhzLCBDT05EX0FMLCBh cmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJTkRF WF9vcF9sZDE2dV9pMzI6CisgICAgICAgIHRjZ19vdXRfbGQxNnUocywgQ09ORF9BTCwgYXJnc1sw XSwgYXJnc1sxXSwgYXJnc1syXSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSU5ERVhfb3Bf bGQxNnNfaTMyOgorICAgICAgICB0Y2dfb3V0X2xkMTZzKHMsIENPTkRfQUwsIGFyZ3NbMF0sIGFy Z3NbMV0sIGFyZ3NbMl0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElOREVYX29wX2xkX2kz MjoKKyAgICAgICAgdGNnX291dF9sZDMydShzLCBDT05EX0FMLCBhcmdzWzBdLCBhcmdzWzFdLCBh cmdzWzJdKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJTkRFWF9vcF9zdDhfaTMyOgorICAg ICAgICB0Y2dfb3V0X3N0OHUocywgQ09ORF9BTCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7 CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSU5ERVhfb3Bfc3QxNl9pMzI6CisgICAgICAgIHRj Z19vdXRfc3QxNnUocywgQ09ORF9BTCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7CisgICAg ICAgIGJyZWFrOworICAgIGNhc2UgSU5ERVhfb3Bfc3RfaTMyOgorICAgICAgICB0Y2dfb3V0X3N0 MzIocywgQ09ORF9BTCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7CisgICAgICAgIGJyZWFr OworCisgICAgY2FzZSBJTkRFWF9vcF9tb3ZfaTMyOgorICAgICAgICB0Y2dfb3V0X2RhdF9yZWco cywgQ09ORF9BTCwgQVJJVEhfTU9WLAorICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1swXSwg MCwgYXJnc1sxXSwgU0hJRlRfSU1NX0xTTCgwKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug SU5ERVhfb3BfbW92aV9pMzI6CisgICAgICAgIHRjZ19vdXRfbW92aTMyKHMsIENPTkRfQUwsIGFy Z3NbMF0sIGFyZ3NbMV0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElOREVYX29wX2FkZF9p MzI6CisgICAgICAgIGMgPSBBUklUSF9BREQ7CisgICAgICAgIGdvdG8gZ2VuX2FyaXRoOworICAg IGNhc2UgSU5ERVhfb3Bfc3ViX2kzMjoKKyAgICAgICAgYyA9IEFSSVRIX1NVQjsKKyAgICAgICAg Z290byBnZW5fYXJpdGg7CisgICAgY2FzZSBJTkRFWF9vcF9hbmRfaTMyOgorICAgICAgICBjID0g QVJJVEhfQU5EOworICAgICAgICBnb3RvIGdlbl9hcml0aDsKKyAgICBjYXNlIElOREVYX29wX29y X2kzMjoKKyAgICAgICAgYyA9IEFSSVRIX09SUjsKKyAgICAgICAgZ290byBnZW5fYXJpdGg7Cisg ICAgY2FzZSBJTkRFWF9vcF94b3JfaTMyOgorICAgICAgICBjID0gQVJJVEhfRU9SOworICAgICAg ICAvKiBGYWxsIHRocm91Z2guICAqLworICAgIGdlbl9hcml0aDoKKyAgICAgICAgdGNnX291dF9k YXRfcmVnKHMsIENPTkRfQUwsIGMsCisgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzBdLCBh cmdzWzFdLCBhcmdzWzJdLCBTSElGVF9JTU1fTFNMKDApKTsKKyAgICAgICAgYnJlYWs7CisgICAg Y2FzZSBJTkRFWF9vcF9hZGQyX2kzMjoKKyAgICAgICAgdGNnX291dF9kYXRfcmVnMihzLCBDT05E X0FMLCBBUklUSF9BREQsIEFSSVRIX0FEQywKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3Nb MF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sCisgICAgICAgICAgICAgICAgICAgICAgICBh cmdzWzRdLCBhcmdzWzVdLCBTSElGVF9JTU1fTFNMKDApKTsKKyAgICAgICAgYnJlYWs7CisgICAg Y2FzZSBJTkRFWF9vcF9zdWIyX2kzMjoKKyAgICAgICAgdGNnX291dF9kYXRfcmVnMihzLCBDT05E X0FMLCBBUklUSF9TVUIsIEFSSVRIX1NCQywKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3Nb MF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sCisgICAgICAgICAgICAgICAgICAgICAgICBh cmdzWzRdLCBhcmdzWzVdLCBTSElGVF9JTU1fTFNMKDApKTsKKyAgICAgICAgYnJlYWs7CisgICAg Y2FzZSBJTkRFWF9vcF9tdWxfaTMyOgorICAgICAgICB0Y2dfb3V0X211bDMyKHMsIENPTkRfQUws IGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElO REVYX29wX211bHUyX2kzMjoKKyAgICAgICAgdGNnX291dF91bXVsbDMyKHMsIENPTkRfQUwsIGFy Z3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pOworICAgICAgICBicmVhazsKKyAgICAv KiBYWFg6IFBlcmhhcHMgYXJnc1syXSAmIDB4MWYgaXMgd3JvbmcgKi8KKyAgICBjYXNlIElOREVY X29wX3NobF9pMzI6CisgICAgICAgIGMgPSBjb25zdF9hcmdzWzJdID8KKyAgICAgICAgICAgICAg ICBTSElGVF9JTU1fTFNMKGFyZ3NbMl0gJiAweDFmKSA6IFNISUZUX1JFR19MU0woYXJnc1syXSk7 CisgICAgICAgIGdvdG8gZ2VuX3NoaWZ0MzI7CisgICAgY2FzZSBJTkRFWF9vcF9zaHJfaTMyOgor ICAgICAgICBjID0gY29uc3RfYXJnc1syXSA/IChhcmdzWzJdICYgMHgxZikgPyBTSElGVF9JTU1f TFNSKGFyZ3NbMl0gJiAweDFmKSA6CisgICAgICAgICAgICAgICAgU0hJRlRfSU1NX0xTTCgwKSA6 IFNISUZUX1JFR19MU1IoYXJnc1syXSk7CisgICAgICAgIGdvdG8gZ2VuX3NoaWZ0MzI7CisgICAg Y2FzZSBJTkRFWF9vcF9zYXJfaTMyOgorICAgICAgICBjID0gY29uc3RfYXJnc1syXSA/IChhcmdz WzJdICYgMHgxZikgPyBTSElGVF9JTU1fQVNSKGFyZ3NbMl0gJiAweDFmKSA6CisgICAgICAgICAg ICAgICAgU0hJRlRfSU1NX0xTTCgwKSA6IFNISUZUX1JFR19BU1IoYXJnc1syXSk7CisgICAgICAg IC8qIEZhbGwgdGhyb3VnaC4gICovCisgICAgZ2VuX3NoaWZ0MzI6CisgICAgICAgIHRjZ19vdXRf ZGF0X3JlZyhzLCBDT05EX0FMLCBBUklUSF9NT1YsIGFyZ3NbMF0sIDAsIGFyZ3NbMV0sIGMpOwor ICAgICAgICBicmVhazsKKworICAgIGNhc2UgSU5ERVhfb3BfYnJjb25kX2kzMjoKKyAgICAgICAg dGNnX291dF9kYXRfcmVnKHMsIENPTkRfQUwsIEFSSVRIX0NNUCwgMCwKKyAgICAgICAgICAgICAg ICAgICAgICAgIGFyZ3NbMF0sIGFyZ3NbMV0sIFNISUZUX0lNTV9MU0woMCkpOworICAgICAgICB0 Y2dfb3V0X2dvdG9fbGFiZWwocywgdGNnX2NvbmRfdG9fYXJtY29uZFthcmdzWzJdXSwgYXJnc1sz XSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSU5ERVhfb3BfYnJjb25kMl9pMzI6CisgICAg ICAgIC8qIFRoZSByZXN1bHRpbmcgY29uZGl0aW9ucyBhcmU6CisgICAgICAgICAqIFRDR19DT05E X0VRICAgIC0tPiAgYTAgPT0gYTIgJiYgYTEgPT0gYTMsCisgICAgICAgICAqIFRDR19DT05EX05F ICAgIC0tPiAoYTAgIT0gYTIgJiYgYTEgPT0gYTMpIHx8ICBhMSAhPSBhMywKKyAgICAgICAgICog VENHX0NPTkRfTFQoVSkgLS0+IChhMCA8ICBhMiAmJiBhMSA9PSBhMykgfHwgIGExIDwgIGEzLAor ICAgICAgICAgKiBUQ0dfQ09ORF9HRShVKSAtLT4gKGEwID49IGEyICYmIGExID09IGEzKSB8fCAo YTEgPj0gYTMgJiYgYTEgIT0gYTMpLAorICAgICAgICAgKiBUQ0dfQ09ORF9MRShVKSAtLT4gKGEw IDw9IGEyICYmIGExID09IGEzKSB8fCAoYTEgPD0gYTMgJiYgYTEgIT0gYTMpLAorICAgICAgICAg KiBUQ0dfQ09ORF9HVChVKSAtLT4gKGEwID4gIGEyICYmIGExID09IGEzKSB8fCAgYTEgPiAgYTMs CisgICAgICAgICAqLworICAgICAgICB0Y2dfb3V0X2RhdF9yZWcocywgQ09ORF9BTCwgQVJJVEhf Q01QLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1sxXSwgYXJnc1szXSwgU0hJRlRf SU1NX0xTTCgwKSk7CisgICAgICAgIHRjZ19vdXRfZGF0X3JlZyhzLCBDT05EX0VRLCBBUklUSF9D TVAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzBdLCBhcmdzWzJdLCBTSElGVF9J TU1fTFNMKDApKTsKKyAgICAgICAgdGNnX291dF9nb3RvX2xhYmVsKHMsIHRjZ19jb25kX3RvX2Fy bWNvbmRbYXJnc1s0XV0sIGFyZ3NbNV0pOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSU5E RVhfb3BfcWVtdV9sZDh1OgorICAgICAgICB0Y2dfb3V0X3FlbXVfbGQocywgQ09ORF9BTCwgYXJn cywgMCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSU5ERVhfb3BfcWVtdV9sZDhzOgorICAg ICAgICB0Y2dfb3V0X3FlbXVfbGQocywgQ09ORF9BTCwgYXJncywgMCB8IDQpOworICAgICAgICBi cmVhazsKKyAgICBjYXNlIElOREVYX29wX3FlbXVfbGQxNnU6CisgICAgICAgIHRjZ19vdXRfcWVt dV9sZChzLCBDT05EX0FMLCBhcmdzLCAxKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJTkRF WF9vcF9xZW11X2xkMTZzOgorICAgICAgICB0Y2dfb3V0X3FlbXVfbGQocywgQ09ORF9BTCwgYXJn cywgMSB8IDQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElOREVYX29wX3FlbXVfbGQzMnU6 CisgICAgICAgIHRjZ19vdXRfcWVtdV9sZChzLCBDT05EX0FMLCBhcmdzLCAyKTsKKyAgICAgICAg YnJlYWs7CisgICAgY2FzZSBJTkRFWF9vcF9xZW11X2xkNjQ6CisgICAgICAgIHRjZ19vdXRfcWVt dV9sZChzLCBDT05EX0FMLCBhcmdzLCAzKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAg IGNhc2UgSU5ERVhfb3BfcWVtdV9zdDg6CisgICAgICAgIHRjZ19vdXRfcWVtdV9zdChzLCBDT05E X0FMLCBhcmdzLCAwKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJTkRFWF9vcF9xZW11X3N0 MTY6CisgICAgICAgIHRjZ19vdXRfcWVtdV9zdChzLCBDT05EX0FMLCBhcmdzLCAxKTsKKyAgICAg ICAgYnJlYWs7CisgICAgY2FzZSBJTkRFWF9vcF9xZW11X3N0MzI6CisgICAgICAgIHRjZ19vdXRf cWVtdV9zdChzLCBDT05EX0FMLCBhcmdzLCAyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJ TkRFWF9vcF9xZW11X3N0NjQ6CisgICAgICAgIHRjZ19vdXRfcWVtdV9zdChzLCBDT05EX0FMLCBh cmdzLCAzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIElOREVYX29wX2V4dDhzX2kzMjoK KyAgICAgICAgdGNnX291dF9kYXRfcmVnKHMsIENPTkRfQUwsIEFSSVRIX01PViwKKyAgICAgICAg ICAgICAgICAgICAgICAgIGFyZ3NbMF0sIDAsIGFyZ3NbMV0sIFNISUZUX0lNTV9MU0woMjQpKTsK KyAgICAgICAgdGNnX291dF9kYXRfcmVnKHMsIENPTkRfQUwsIEFSSVRIX01PViwKKyAgICAgICAg ICAgICAgICAgICAgICAgIGFyZ3NbMF0sIDAsIGFyZ3NbMF0sIFNISUZUX0lNTV9BU1IoMjQpKTsK KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJTkRFWF9vcF9leHQxNnNfaTMyOgorICAgICAgICB0 Y2dfb3V0X2RhdF9yZWcocywgQ09ORF9BTCwgQVJJVEhfTU9WLAorICAgICAgICAgICAgICAgICAg ICAgICAgYXJnc1swXSwgMCwgYXJnc1sxXSwgU0hJRlRfSU1NX0xTTCgxNikpOworICAgICAgICB0 Y2dfb3V0X2RhdF9yZWcocywgQ09ORF9BTCwgQVJJVEhfTU9WLAorICAgICAgICAgICAgICAgICAg ICAgICAgYXJnc1swXSwgMCwgYXJnc1swXSwgU0hJRlRfSU1NX0FTUigxNikpOworICAgICAgICBi cmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHRjZ19hYm9ydCgpOworICAgIH0KK30KKwor c3RhdGljIGNvbnN0IFRDR1RhcmdldE9wRGVmIGFybV9vcF9kZWZzW10gPSB7CisgICAgeyBJTkRF WF9vcF9leGl0X3RiLCB7IH0gfSwKKyAgICB7IElOREVYX29wX2dvdG9fdGIsIHsgfSB9LAorICAg IHsgSU5ERVhfb3BfY2FsbCwgeyAicmkiIH0gfSwKKyAgICB7IElOREVYX29wX2ptcCwgeyAicmki IH0gfSwKKyAgICB7IElOREVYX29wX2JyLCB7IH0gfSwKKworICAgIHsgSU5ERVhfb3BfbW92X2kz MiwgeyAiciIsICJyIiB9IH0sCisgICAgeyBJTkRFWF9vcF9tb3ZpX2kzMiwgeyAiciIgfSB9LAor CisgICAgeyBJTkRFWF9vcF9sZDh1X2kzMiwgeyAiciIsICJyIiB9IH0sCisgICAgeyBJTkRFWF9v cF9sZDhzX2kzMiwgeyAiciIsICJyIiB9IH0sCisgICAgeyBJTkRFWF9vcF9sZDE2dV9pMzIsIHsg InIiLCAiciIgfSB9LAorICAgIHsgSU5ERVhfb3BfbGQxNnNfaTMyLCB7ICJyIiwgInIiIH0gfSwK KyAgICB7IElOREVYX29wX2xkX2kzMiwgeyAiciIsICJyIiB9IH0sCisgICAgeyBJTkRFWF9vcF9z dDhfaTMyLCB7ICJyIiwgInIiIH0gfSwKKyAgICB7IElOREVYX29wX3N0MTZfaTMyLCB7ICJyIiwg InIiIH0gfSwKKyAgICB7IElOREVYX29wX3N0X2kzMiwgeyAiciIsICJyIiB9IH0sCisKKyAgICAv KiBUT0RPOiAiciIsICJyIiwgInJpIiAqLworICAgIHsgSU5ERVhfb3BfYWRkX2kzMiwgeyAiciIs ICJyIiwgInIiIH0gfSwKKyAgICB7IElOREVYX29wX3N1Yl9pMzIsIHsgInIiLCAiciIsICJyIiB9 IH0sCisgICAgeyBJTkRFWF9vcF9tdWxfaTMyLCB7ICJyIiwgInIiLCAiciIgfSB9LAorICAgIHsg SU5ERVhfb3BfbXVsdTJfaTMyLCB7ICJyIiwgInIiLCAiciIsICJyIiB9IH0sCisgICAgeyBJTkRF WF9vcF9hbmRfaTMyLCB7ICJyIiwgInIiLCAiciIgfSB9LAorICAgIHsgSU5ERVhfb3Bfb3JfaTMy LCB7ICJyIiwgInIiLCAiciIgfSB9LAorICAgIHsgSU5ERVhfb3BfeG9yX2kzMiwgeyAiciIsICJy IiwgInIiIH0gfSwKKworICAgIHsgSU5ERVhfb3Bfc2hsX2kzMiwgeyAiciIsICJyIiwgInJpIiB9 IH0sCisgICAgeyBJTkRFWF9vcF9zaHJfaTMyLCB7ICJyIiwgInIiLCAicmkiIH0gfSwKKyAgICB7 IElOREVYX29wX3Nhcl9pMzIsIHsgInIiLCAiciIsICJyaSIgfSB9LAorCisgICAgeyBJTkRFWF9v cF9icmNvbmRfaTMyLCB7ICJyIiwgInIiIH0gfSwKKworICAgIC8qIFRPRE86ICJyIiwgInIiLCAi ciIsICJyIiwgInJpIiwgInJpIiAqLworICAgIHsgSU5ERVhfb3BfYWRkMl9pMzIsIHsgInIiLCAi ciIsICJyIiwgInIiLCAiciIsICJyIiB9IH0sCisgICAgeyBJTkRFWF9vcF9zdWIyX2kzMiwgeyAi ciIsICJyIiwgInIiLCAiciIsICJyIiwgInIiIH0gfSwKKyAgICB7IElOREVYX29wX2JyY29uZDJf aTMyLCB7ICJyIiwgInIiLCAiciIsICJyIiB9IH0sCisKKyAgICB7IElOREVYX29wX3FlbXVfbGQ4 dSwgeyAiciIsICJyIiwgIlgiIH0gfSwKKyAgICB7IElOREVYX29wX3FlbXVfbGQ4cywgeyAiciIs ICJyIiwgIlgiIH0gfSwKKyAgICB7IElOREVYX29wX3FlbXVfbGQxNnUsIHsgInIiLCAiciIsICJY IiB9IH0sCisgICAgeyBJTkRFWF9vcF9xZW11X2xkMTZzLCB7ICJyIiwgInIiLCAiWCIgfSB9LAor ICAgIHsgSU5ERVhfb3BfcWVtdV9sZDMydSwgeyAiciIsICJyIiwgIlgiIH0gfSwKKyAgICB7IElO REVYX29wX3FlbXVfbGQ2NCwgeyAiciIsICJkIiwgInIiLCAiWCIgfSB9LAorCisgICAgeyBJTkRF WF9vcF9xZW11X3N0OCwgeyAiZCIsICJyIiwgIlgiIH0gfSwKKyAgICB7IElOREVYX29wX3FlbXVf c3QxNiwgeyAiZCIsICJyIiwgIlgiIH0gfSwKKyAgICB7IElOREVYX29wX3FlbXVfc3QzMiwgeyAi ZCIsICJyIiwgIlgiIH0gfSwKKyAgICB7IElOREVYX29wX3FlbXVfc3Q2NCwgeyAiZCIsICJEIiwg InIiLCAiWCIgfSB9LAorCisgICAgeyBJTkRFWF9vcF9leHQ4c19pMzIsIHsgInIiLCAiciIgfSB9 LAorICAgIHsgSU5ERVhfb3BfZXh0MTZzX2kzMiwgeyAiciIsICJyIiB9IH0sCisKKyAgICB7IC0x IH0sCit9OworCit2b2lkIHRjZ190YXJnZXRfaW5pdChUQ0dDb250ZXh0ICpzKQoreworICAgIC8q IGZhaWwgc2FmZSAqLworICAgIGlmICgoMSA8PCBDUFVfVExCX0VOVFJZX0JJVFMpICE9IHNpemVv ZihDUFVUTEJFbnRyeSkpCisgICAgICAgIHRjZ19hYm9ydCgpOworCisgICAgdGNnX3JlZ3NldF9z ZXQzMih0Y2dfdGFyZ2V0X2F2YWlsYWJsZV9yZWdzW1RDR19UWVBFX0kzMl0sIDAsCisgICAgICAg ICAgICAgICAgICAgICgoMSA8PCBUQ0dfUkVHX1IxMykgLSAxKSAmIH4oMSA8PCBUQ0dfUkVHX1I4 KSk7CisgICAgdGNnX3JlZ3NldF9zZXQzMih0Y2dfdGFyZ2V0X2NhbGxfY2xvYmJlcl9yZWdzLCAw LAorICAgICAgICAgICAgICAgICAgICAoMSA8PCBUQ0dfUkVHX1I0KSAtIDEpOworCisgICAgdGNn X3JlZ3NldF9jbGVhcihzLT5yZXNlcnZlZF9yZWdzKTsKKyAgICB0Y2dfcmVnc2V0X3NldF9yZWco cy0+cmVzZXJ2ZWRfcmVncywgVENHX1JFR19DQUxMX1NUQUNLKTsKKyAgICB0Y2dfcmVnc2V0X3Nl dF9yZWcocy0+cmVzZXJ2ZWRfcmVncywgVENHX1JFR19SOCk7CisgICAgdGNnX3JlZ3NldF9zZXRf cmVnKHMtPnJlc2VydmVkX3JlZ3MsIFRDR19SRUdfUjEyKTsKKworICAgIHRjZ19hZGRfdGFyZ2V0 X2FkZF9vcF9kZWZzKGFybV9vcF9kZWZzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRjZ19v dXRfbGQoVENHQ29udGV4dCAqcywgVENHVHlwZSB0eXBlLCBpbnQgYXJnLAorICAgICAgICAgICAg ICAgIGludCBhcmcxLCB0Y2dfdGFyZ2V0X2xvbmcgYXJnMikKK3sKKyAgICB0Y2dfb3V0X2xkMzJ1 KHMsIENPTkRfQUwsIGFyZywgYXJnMSwgYXJnMik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0 Y2dfb3V0X3N0KFRDR0NvbnRleHQgKnMsIFRDR1R5cGUgdHlwZSwgaW50IGFyZywKKyAgICAgICAg ICAgICAgICBpbnQgYXJnMSwgdGNnX3RhcmdldF9sb25nIGFyZzIpCit7CisgICAgdGNnX291dF9z dDMyKHMsIENPTkRfQUwsIGFyZywgYXJnMSwgYXJnMik7Cit9CisKK3ZvaWQgdGNnX291dF9hZGRp KFRDR0NvbnRleHQgKnMsIGludCByZWcsIHRjZ190YXJnZXRfbG9uZyB2YWwpCit7CisgICAgaWYg KHZhbCA+IDApCisgICAgICAgIGlmICh2YWwgPCAweDEwMCkKKyAgICAgICAgICAgIHRjZ19vdXRf ZGF0X2ltbShzLCBDT05EX0FMLCBBUklUSF9BREQsIHJlZywgcmVnLCB2YWwpOworICAgICAgICBl bHNlCisgICAgICAgICAgICB0Y2dfYWJvcnQoKTsKKyAgICBlbHNlIGlmICh2YWwgPCAwKSB7Cisg ICAgICAgIGlmICh2YWwgPiAtMHgxMDApCisgICAgICAgICAgICB0Y2dfb3V0X2RhdF9pbW0ocywg Q09ORF9BTCwgQVJJVEhfU1VCLCByZWcsIHJlZywgLXZhbCk7CisgICAgICAgIGVsc2UKKyAgICAg ICAgICAgIHRjZ19hYm9ydCgpOworICAgIH0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHRjZ19v dXRfbW92KFRDR0NvbnRleHQgKnMsIGludCByZXQsIGludCBhcmcpCit7CisgICAgdGNnX291dF9k YXRfcmVnKHMsIENPTkRfQUwsIEFSSVRIX01PViwgcmV0LCAwLCBhcmcsIFNISUZUX0lNTV9MU0wo MCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGNnX291dF9tb3ZpKFRDR0NvbnRleHQgKnMs IFRDR1R5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICBpbnQgcmV0LCB0Y2dfdGFyZ2V0X2xvbmcg YXJnKQoreworICAgIHRjZ19vdXRfbW92aTMyKHMsIENPTkRfQUwsIHJldCwgYXJnKTsKK30KZGlm ZiAtLWdpdCBhL3RjZy9hcm0vdGNnLXRhcmdldC5oIGIvdGNnL2FybS90Y2ctdGFyZ2V0LmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdiMTU1YQotLS0gL2Rldi9udWxsCisr KyBiL3RjZy9hcm0vdGNnLXRhcmdldC5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBUaW55IENv ZGUgR2VuZXJhdG9yIGZvciBRRU1VCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEFuZHJ6ZWog WmFib3Jvd3NraQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2Yg Y2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdh cmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0 byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5n IHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwg bWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBj b3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUg U29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRo aXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMg b3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZU V0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBF WFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUg QVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFN QUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05U UkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1Mg SU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqLworI2RlZmluZSBUQ0dfVEFSR0VUX0FSTSAxCisKKyNk ZWZpbmUgVENHX1RBUkdFVF9SRUdfQklUUyAzMgorI3VuZGVmIFRDR19UQVJHRVRfV09SRFNfQklH RU5ESUFOCisjdW5kZWYgVENHX1RBUkdFVF9IQVNfZGl2X2kzMgorI3VuZGVmIFRDR19UQVJHRVRf SEFTX2Jzd2FwX2kzMgorI2RlZmluZSBUQ0dfVEFSR0VUX0hBU19leHQ4c19pMzIKKyNkZWZpbmUg VENHX1RBUkdFVF9IQVNfZXh0MTZzX2kzMgorI3VuZGVmIFRDR19UQVJHRVRfU1RBQ0tfR1JPV1NV UAorCitlbnVtIHsKKyAgICBUQ0dfUkVHX1IwID0gMCwKKyAgICBUQ0dfUkVHX1IxLAorICAgIFRD R19SRUdfUjIsCisgICAgVENHX1JFR19SMywKKyAgICBUQ0dfUkVHX1I0LAorICAgIFRDR19SRUdf UjUsCisgICAgVENHX1JFR19SNiwKKyAgICBUQ0dfUkVHX1I3LAorICAgIFRDR19SRUdfUjgsCisg ICAgVENHX1JFR19SOSwKKyAgICBUQ0dfUkVHX1IxMCwKKyAgICBUQ0dfUkVHX1IxMSwKKyAgICBU Q0dfUkVHX1IxMiwKKyAgICBUQ0dfUkVHX1IxMywKKyAgICBUQ0dfVEFSR0VUX05CX1JFR1MKK307 CisKKy8qIHVzZWQgZm9yIGZ1bmN0aW9uIGNhbGwgZ2VuZXJhdGlvbiAqLworI2RlZmluZSBUQ0df UkVHX0NBTExfU1RBQ0sJVENHX1JFR19SMTMKKyNkZWZpbmUgVENHX1RBUkdFVF9TVEFDS19BTElH TgkxNgorCitlbnVtIHsKKyAgICAvKiBOb3RlOiBtdXN0IGJlIHN5bmNlZCB3aXRoIGR5bmdlbi1l eGVjLmggKi8KKyAgICBUQ0dfQVJFRzAgPSBUQ0dfUkVHX1I3LAorICAgIFRDR19BUkVHMSA9IFRD R19SRUdfUjQsCisgICAgVENHX0FSRUcyID0gVENHX1JFR19SNSwKKyAgICBUQ0dfQVJFRzMgPSBU Q0dfUkVHX1I2LAorfTsK ------=_Part_2788_15937703.1210017885291--