From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1HWNWR-0006K3-Lp for qemu-devel@nongnu.org; Tue, 27 Mar 2007 22:04:23 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1HWNWP-0006HY-TM for qemu-devel@nongnu.org; Tue, 27 Mar 2007 22:04:23 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1HWNWP-0006HF-Gc for qemu-devel@nongnu.org; Tue, 27 Mar 2007 21:04:21 -0500 Received: from wr-out-0506.google.com ([64.233.184.229]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1HWNTx-0003Io-TU for qemu-devel@nongnu.org; Tue, 27 Mar 2007 22:01:51 -0400 Received: by wr-out-0506.google.com with SMTP id i20so2881674wra for ; Tue, 27 Mar 2007 19:01:49 -0700 (PDT) Message-ID: Date: Wed, 28 Mar 2007 04:01:46 +0200 From: "andrzej zaborowski" Sender: balrogg@gmail.com In-Reply-To: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_23230_12535157.1175047306303" References: Subject: [Qemu-devel] Re: [PATCH] VMware SVGA II emulation Reply-To: balrogg@gmail.com, qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org ------=_Part_23230_12535157.1175047306303 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi, I looked at how the embedding of a standard VGA in the VMware SVGA could be done (mainly out of curiosity) and it wasn't difficult. I had to make small changes in hw/vga.c but I think it's made more flexible now. Attached is a second version of the VMware SVGA patch. This time including the "Host-accelerated mouse cursor support in SDL" patch in the same file. I added a FIFO for buffering screen update requests so as to avoid touching the SDL buffer between scheduled updates, (which could lead to drawing over qemu monitor or even segfaults if the resolution was changed in meantime). I also found what was wrong with the accelerated rectangle filling and fixed a couple of other issues. The palette size was also wrong in the older patch - credits to Anthony Liguori who spotted it. I have not tested switching between std VGA graphic modes and VMware SVGA mode, but the switching between VGA text mode and VMware SVGA mode worked fine (although the black console background was becoming not exactly black). Savevm/loadvm should also work, including the VGA part. In this version VMware SVGA is a standalone VGA so we're using only one qemu console, like with "-cirrusvga". Regards, Andrew ------=_Part_23230_12535157.1175047306303 Content-Type: text/plain; name=0001-VMware-SVGA-II-emulation.txt; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: base64 X-Attachment-Id: f_ezt43vud Content-Disposition: attachment; filename="0001-VMware-SVGA-II-emulation.txt" RnJvbSAzZWNjYjMxMjYyZTg1ZGVkOWVkYjZkZWNjODQyYzRjOWQ5MWMwODE3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyemVqIFphYm9yb3dza2kgPGJhbHJvZ0B6YWJvci5vcmc+ CkRhdGU6IFdlZCwgMjggTWFyIDIwMDcgMDM6Mzc6MDUgKzAyMDAKU3ViamVjdDogW1BBVENIXSBW TXdhcmUtU1ZHQSBJSSBlbXVsYXRpb24uCgotLS0KIE1ha2VmaWxlLnRhcmdldCB8ICAgIDIgKy0K IGh3L2NpcnJ1c192Z2EuYyB8ICAgIDMgKwogaHcvcGMuYyAgICAgICAgIHwgICAgNiArCiBody92 Z2EuYyAgICAgICAgfCAgIDEyICstCiBody92Z2FfaW50LmggICAgfCAgICA0ICsKIGh3L3Ztd2Fy ZV92Z2EuYyB8IDExODcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwogc2RsLmMgICAgICAgICAgIHwgIDEwNCArKysrKy0KIHZsLmMgICAgICAg ICAgICB8ICAgMTMgKwogdmwuaCAgICAgICAgICAgIHwgICAxMyArLQogOSBmaWxlcyBjaGFuZ2Vk LCAxMzM2IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvTWFrZWZp bGUudGFyZ2V0IGIvTWFrZWZpbGUudGFyZ2V0CmluZGV4IDhlYWE4ZGQuLjhiYTgyYzcgMTAwNjQ0 Ci0tLSBhL01ha2VmaWxlLnRhcmdldAorKysgYi9NYWtlZmlsZS50YXJnZXQKQEAgLTM3MSw3ICsz NzEsNyBAQCBpZmVxICgkKFRBUkdFVF9CQVNFX0FSQ0gpLCBpMzg2KQogVkxfT0JKUys9IGlkZS5v IHBja2JkLm8gcHMyLm8gdmdhLm8gJChTT1VORF9IVykgZG1hLm8gJChBVURJT0RSVikKIFZMX09C SlMrPSBmZGMubyBtYzE0NjgxOHJ0Yy5vIHNlcmlhbC5vIGk4MjU5Lm8gaTgyNTQubyBwY3Nway5v IHBjLm8KIFZMX09CSlMrPSBjaXJydXNfdmdhLm8gbWl4ZW5nLm8gYXBpYy5vIHBhcmFsbGVsLm8g YWNwaS5vIHBpaXhfcGNpLm8KLVZMX09CSlMrPSB1c2ItdWhjaS5vIHNtYnVzX2VlcHJvbS5vCitW TF9PQkpTKz0gdXNiLXVoY2kubyBzbWJ1c19lZXByb20ubyB2bXdhcmVfdmdhLm8KIENQUEZMQUdT ICs9IC1ESEFTX0FVRElPCiBlbmRpZgogaWZlcSAoJChUQVJHRVRfQkFTRV9BUkNIKSwgcHBjKQpk aWZmIC0tZ2l0IGEvaHcvY2lycnVzX3ZnYS5jIGIvaHcvY2lycnVzX3ZnYS5jCmluZGV4IGQ4ZmIz N2EuLjJjYmFmZTEgMTAwNjQ0Ci0tLSBhL2h3L2NpcnJ1c192Z2EuYworKysgYi9ody9jaXJydXNf dmdhLmMKQEAgLTMxOTMsNiArMzE5Myw5IEBAIHZvaWQgcGNpX2NpcnJ1c192Z2FfaW5pdChQQ0lC dXMgKmJ1cywgRGlzcGxheVN0YXRlICpkcywgdWludDhfdCAqdmdhX3JhbV9iYXNlLAogICAgIHZn YV9jb21tb25faW5pdCgoVkdBU3RhdGUgKilzLCAKICAgICAgICAgICAgICAgICAgICAgZHMsIHZn YV9yYW1fYmFzZSwgdmdhX3JhbV9vZmZzZXQsIHZnYV9yYW1fc2l6ZSk7CiAgICAgY2lycnVzX2lu aXRfY29tbW9uKHMsIGRldmljZV9pZCwgMSk7CisKKyAgICBncmFwaGljX2NvbnNvbGVfaW5pdChz LT5kcywgcy0+dXBkYXRlLCBzLT5pbnZhbGlkYXRlLCBzLT5zY3JlZW5fZHVtcCwgcyk7CisKICAg ICBzLT5wY2lfZGV2ID0gKFBDSURldmljZSAqKWQ7CiAKICAgICAvKiBzZXR1cCBtZW1vcnkgc3Bh Y2UgKi8KZGlmZiAtLWdpdCBhL2h3L3BjLmMgYi9ody9wYy5jCmluZGV4IGJhOWMyZDkuLjkxYzQx NzQgMTAwNjQ0Ci0tLSBhL2h3L3BjLmMKKysrIGIvaHcvcGMuYwpAQCAtNjQxLDYgKzY0MSwxMiBA QCBzdGF0aWMgdm9pZCBwY19pbml0MShpbnQgcmFtX3NpemUsIGludCB2Z2FfcmFtX3NpemUsIGlu dCBib290X2RldmljZSwKICAgICAgICAgICAgIGlzYV9jaXJydXNfdmdhX2luaXQoZHMsIHBoeXNf cmFtX2Jhc2UgKyB2Z2FfcmFtX2FkZHIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2Z2FfcmFtX2FkZHIsIHZnYV9yYW1fc2l6ZSk7CiAgICAgICAgIH0KKyAgICB9IGVsc2UgaWYg KHZtc3ZnYV9lbmFibGVkKSB7CisgICAgICAgIGlmIChwY2lfZW5hYmxlZCkKKyAgICAgICAgICAg IHBjaV92bXN2Z2FfaW5pdChwY2lfYnVzLCBkcywgcGh5c19yYW1fYmFzZSArIHJhbV9zaXplLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbV9zaXplLCB2Z2FfcmFtX3NpemUpOworICAg ICAgICBlbHNlCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiB2bXdhcmVfdmdhOiBu byBQQ0kgYnVzXG4iLCBfX0ZVTkNUSU9OX18pOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChw Y2lfZW5hYmxlZCkgewogICAgICAgICAgICAgcGNpX3ZnYV9pbml0KHBjaV9idXMsIGRzLCBwaHlz X3JhbV9iYXNlICsgdmdhX3JhbV9hZGRyLCAKZGlmZiAtLWdpdCBhL2h3L3ZnYS5jIGIvaHcvdmdh LmMKaW5kZXggNWFjYWNmOS4uMmRhZGNjYSAxMDA2NDQKLS0tIGEvaHcvdmdhLmMKKysrIGIvaHcv dmdhLmMKQEAgLTE3ODgsMTIgKzE3ODgsMTMgQEAgdm9pZCB2Z2FfY29tbW9uX2luaXQoVkdBU3Rh dGUgKnMsIERpc3BsYXlTdGF0ZSAqZHMsIHVpbnQ4X3QgKnZnYV9yYW1fYmFzZSwKICAgICBzLT5n ZXRfYnBwID0gdmdhX2dldF9icHA7CiAgICAgcy0+Z2V0X29mZnNldHMgPSB2Z2FfZ2V0X29mZnNl dHM7CiAgICAgcy0+Z2V0X3Jlc29sdXRpb24gPSB2Z2FfZ2V0X3Jlc29sdXRpb247Ci0gICAgZ3Jh cGhpY19jb25zb2xlX2luaXQocy0+ZHMsIHZnYV91cGRhdGVfZGlzcGxheSwgdmdhX2ludmFsaWRh dGVfZGlzcGxheSwKLSAgICAgICAgICAgICAgICAgICAgICAgICB2Z2Ffc2NyZWVuX2R1bXAsIHMp OworICAgIHMtPnVwZGF0ZSA9IHZnYV91cGRhdGVfZGlzcGxheTsKKyAgICBzLT5pbnZhbGlkYXRl ID0gdmdhX2ludmFsaWRhdGVfZGlzcGxheTsKKyAgICBzLT5zY3JlZW5fZHVtcCA9IHZnYV9zY3Jl ZW5fZHVtcDsKIH0KIAogLyogdXNlZCBieSBib3RoIElTQSBhbmQgUENJICovCi1zdGF0aWMgdm9p ZCB2Z2FfaW5pdChWR0FTdGF0ZSAqcykKK3ZvaWQgdmdhX2luaXQoVkdBU3RhdGUgKnMpCiB7CiAg ICAgaW50IHZnYV9pb19tZW1vcnk7CiAKQEAgLTE4NTYsNiArMTg1Nyw4IEBAIGludCBpc2Ffdmdh X2luaXQoRGlzcGxheVN0YXRlICpkcywgdWludDhfdCAqdmdhX3JhbV9iYXNlLAogICAgIHZnYV9j b21tb25faW5pdChzLCBkcywgdmdhX3JhbV9iYXNlLCB2Z2FfcmFtX29mZnNldCwgdmdhX3JhbV9z aXplKTsKICAgICB2Z2FfaW5pdChzKTsKIAorICAgIGdyYXBoaWNfY29uc29sZV9pbml0KHMtPmRz LCBzLT51cGRhdGUsIHMtPmludmFsaWRhdGUsIHMtPnNjcmVlbl9kdW1wLCBzKTsKKwogI2lmZGVm IENPTkZJR19CT0NIU19WQkUKICAgICAvKiBYWFg6IHVzZSBvcHRpbWl6ZWQgc3RhbmRhcmQgdmdh IGFjY2Vzc2VzICovCiAgICAgY3B1X3JlZ2lzdGVyX3BoeXNpY2FsX21lbW9yeShWQkVfRElTUElf TEZCX1BIWVNJQ0FMX0FERFJFU1MsIApAQCAtMTg4MSw2ICsxODg0LDkgQEAgaW50IHBjaV92Z2Ff aW5pdChQQ0lCdXMgKmJ1cywgRGlzcGxheVN0YXRlICpkcywgdWludDhfdCAqdmdhX3JhbV9iYXNl LAogICAgIAogICAgIHZnYV9jb21tb25faW5pdChzLCBkcywgdmdhX3JhbV9iYXNlLCB2Z2FfcmFt X29mZnNldCwgdmdhX3JhbV9zaXplKTsKICAgICB2Z2FfaW5pdChzKTsKKworICAgIGdyYXBoaWNf Y29uc29sZV9pbml0KHMtPmRzLCBzLT51cGRhdGUsIHMtPmludmFsaWRhdGUsIHMtPnNjcmVlbl9k dW1wLCBzKTsKKwogICAgIHMtPnBjaV9kZXYgPSAmZC0+ZGV2OwogICAgIAogICAgIHBjaV9jb25m ID0gZC0+ZGV2LmNvbmZpZzsKZGlmZiAtLWdpdCBhL2h3L3ZnYV9pbnQuaCBiL2h3L3ZnYV9pbnQu aAppbmRleCA2MzNmMzQ0Li5lN2RmMGY3IDEwMDY0NAotLS0gYS9ody92Z2FfaW50LmgKKysrIGIv aHcvdmdhX2ludC5oCkBAIC0xMzQsNiArMTM0LDkgQEAKICAgICB1aW50MzJfdCBjdXJzb3Jfb2Zm c2V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB1 bnNpZ25lZCBpbnQgKCpyZ2JfdG9fcGl4ZWwpKHVuc2lnbmVkIGludCByLCAgICAgICAgICAgICAg ICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu dCBnLCB1bnNpZ25lZCBiKTsgICAgICAgICAgIFwKKyAgICB2Z2FfaHdfdXBkYXRlX3B0ciB1cGRh dGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB2Z2Ff aHdfaW52YWxpZGF0ZV9wdHIgaW52YWxpZGF0ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgICB2Z2FfaHdfc2NyZWVuX2R1bXBfcHRyIHNjcmVlbl9kdW1wOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAvKiBoYXJkd2FyZSBtb3VzZSBjdXJzb3Ig c3VwcG9ydCAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB1aW50MzJf dCBpbnZhbGlkYXRlZF95X3RhYmxlW1ZHQV9NQVhfSEVJR0hUIC8gMzJdOyAgICAgICAgICAgICAg ICAgIFwKICAgICB2b2lkICgqY3Vyc29yX2ludmFsaWRhdGUpKHN0cnVjdCBWR0FTdGF0ZSAqcyk7 ICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTE1Nyw2ICsxNjAsNyBAQCBzdGF0aWMgaW5saW5l IGludCBjNl90b184KGludCB2KQogCiB2b2lkIHZnYV9jb21tb25faW5pdChWR0FTdGF0ZSAqcywg RGlzcGxheVN0YXRlICpkcywgdWludDhfdCAqdmdhX3JhbV9iYXNlLCAKICAgICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGxvbmcgdmdhX3JhbV9vZmZzZXQsIGludCB2Z2FfcmFtX3NpemUpOwor dm9pZCB2Z2FfaW5pdChWR0FTdGF0ZSAqcyk7CiB1aW50MzJfdCB2Z2FfbWVtX3JlYWRiKHZvaWQg Km9wYXF1ZSwgdGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIpOwogdm9pZCB2Z2FfbWVtX3dyaXRlYih2 b2lkICpvcGFxdWUsIHRhcmdldF9waHlzX2FkZHJfdCBhZGRyLCB1aW50MzJfdCB2YWwpOwogdm9p ZCB2Z2FfaW52YWxpZGF0ZV9zY2FubGluZXMoVkdBU3RhdGUgKnMsIGludCB5MSwgaW50IHkyKTsK ZGlmZiAtLWdpdCBhL2h3L3Ztd2FyZV92Z2EuYyBiL2h3L3Ztd2FyZV92Z2EuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGY5YWM4Ci0tLSAvZGV2L251bGwKKysrIGIvaHcv dm13YXJlX3ZnYS5jCkBAIC0wLDAgKzEsMTE4NyBAQAorLyoKKyAqIFFFTVUgVk13YXJlLVNWR0Eg ImNoaXBzZXQiLgorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgQW5kcnplaiBaYWJvcm93c2tp ICA8YmFscm9nQHphYm9yLm9yZz4KKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2Yg dGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNv ZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29y IHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0 byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRv IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICog YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgor ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg QU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU RUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hB TEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5Z IENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNU SU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VU IE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhF UiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSAidmwuaCIKKwor I2RlZmluZSBWRVJCT1NFCisjZGVmaW5lIEVNQkVEX1NURFZHQQorI3VuZGVmIERJUkVDVF9WUkFN CisjZGVmaW5lIEhXX1JFQ1RfQUNDRUwKKyNkZWZpbmUgSFdfRklMTF9BQ0NFTAorI2RlZmluZSBI V19NT1VTRV9BQ0NFTAorCisjaWZkZWYgRU1CRURfU1REVkdBCisjIGluY2x1ZGUgInZnYV9pbnQu aCIKKyNlbmRpZgorCitzdHJ1Y3Qgdm1zdmdhX3N0YXRlX3MgeworI2lmZGVmIEVNQkVEX1NURFZH QQorICAgIFZHQV9TVEFURV9DT01NT04KKyNlbmRpZgorCisgICAgaW50IHdpZHRoOworICAgIGlu dCBoZWlnaHQ7CisgICAgaW50IGludmFsaWRhdGVkOworICAgIGludCBkZXB0aDsKKyAgICBpbnQg YnlwcDsKKyAgICBpbnQgZW5hYmxlOworICAgIGludCBjb25maWc7CisgICAgc3RydWN0IHsKKyAg ICAgICAgaW50IGlkOworICAgICAgICBpbnQgeDsKKyAgICAgICAgaW50IHk7CisgICAgICAgIGlu dCBvbjsKKyAgICB9IGN1cnNvcjsKKworI2lmbmRlZiBFTUJFRF9TVERWR0EKKyAgICBEaXNwbGF5 U3RhdGUgKmRzOworICAgIGludCB2cmFtX3NpemU7CisjZW5kaWYKKyAgICB1aW50OF90ICp2cmFt OworCisgICAgaW50IGluZGV4OworICAgIGludCBzY3JhdGNoX3NpemU7CisgICAgdWludDMyX3Qg KnNjcmF0Y2g7CisgICAgaW50IG5ld193aWR0aDsKKyAgICBpbnQgbmV3X2hlaWdodDsKKyAgICB1 aW50MzJfdCBndWVzdDsKKyAgICB1aW50MzJfdCBzdmdhaWQ7CisgICAgdWludDMyX3Qgd3JlZDsK KyAgICB1aW50MzJfdCB3Z3JlZW47CisgICAgdWludDMyX3Qgd2JsdWU7CisgICAgaW50IHN5bmNp bmc7CisgICAgaW50IGZiX3NpemU7CisKKyAgICB1bmlvbiB7CisgICAgICAgIHVpbnQzMl90ICpm aWZvOworICAgICAgICBzdHJ1Y3QgX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpIHsKKyAgICAg ICAgICAgIHVpbnQzMl90IG1pbjsKKyAgICAgICAgICAgIHVpbnQzMl90IG1heDsKKyAgICAgICAg ICAgIHVpbnQzMl90IG5leHRfY21kOworICAgICAgICAgICAgdWludDMyX3Qgc3RvcDsKKyAgICAg ICAgICAgIC8qIEFkZCByZWdpc3RlcnMgaGVyZSB3aGVuIGFkZGluZyBjYXBhYmlsaXRpZXMuICAq LworICAgICAgICAgICAgdWludDMyX3QgZmlmb1swXTsKKyAgICAgICAgfSAqY21kOworICAgIH07 CisKKyNkZWZpbmUgUkVEUkFXX0ZJRk9fTEVOCTUxMgorICAgIHN0cnVjdCB2bXN2Z2FfcmVjdF9z IHsKKyAgICAgICAgaW50IHgsIHksIHcsIGg7CisgICAgfSByZWRyYXdfZmlmb1tSRURSQVdfRklG T19MRU5dOworICAgIGludCByZWRyYXdfZmlmb19maXJzdCwgcmVkcmF3X2ZpZm9fbGFzdDsKK307 CisKK3N0cnVjdCBwY2lfdm1zdmdhX3N0YXRlX3MgeworICAgIFBDSURldmljZSBjYXJkOworICAg IHN0cnVjdCB2bXN2Z2Ffc3RhdGVfcyBjaGlwOworfTsKKworI2RlZmluZSBTVkdBX01BR0lDCQkw eDkwMDAwMFVMCisjZGVmaW5lIFNWR0FfTUFLRV9JRCh2ZXIpCShTVkdBX01BR0lDIDw8IDggfCAo dmVyKSkKKyNkZWZpbmUgU1ZHQV9JRF8wCQlTVkdBX01BS0VfSUQoMCkKKyNkZWZpbmUgU1ZHQV9J RF8xCQlTVkdBX01BS0VfSUQoMSkKKyNkZWZpbmUgU1ZHQV9JRF8yCQlTVkdBX01BS0VfSUQoMikK KworI2RlZmluZSBTVkdBX0xFR0FDWV9CQVNFX1BPUlQJMHg0NTYwCisjZGVmaW5lIFNWR0FfSU5E RVhfUE9SVAkJMHgwCisjZGVmaW5lIFNWR0FfVkFMVUVfUE9SVAkJMHgxCisjZGVmaW5lIFNWR0Ff QklPU19QT1JUCQkweDIKKworI2RlZmluZSBTVkdBX1ZFUlNJT05fMgorCisjaWZkZWYgU1ZHQV9W RVJTSU9OXzIKKyMgZGVmaW5lIFNWR0FfSUQJCVNWR0FfSURfMgorIyBkZWZpbmUgU1ZHQV9JT19C QVNFCQlTVkdBX0xFR0FDWV9CQVNFX1BPUlQKKyMgZGVmaW5lIFNWR0FfSU9fTVVMCQkxCisjIGRl ZmluZSBTVkdBX0ZJRk9fU0laRQkJMHgxMDAwMAorIyBkZWZpbmUgU1ZHQV9NRU1fQkFTRQkJMHhl YzAwMDAwMAorIyBkZWZpbmUgU1ZHQV9QQ0lfREVWSUNFX0lECVBDSV9ERVZJQ0VfSURfVk1XQVJF X1NWR0EyCisjZWxzZQorIyBkZWZpbmUgU1ZHQV9JRAkJU1ZHQV9JRF8xCisjIGRlZmluZSBTVkdB X0lPX0JBU0UJCVNWR0FfTEVHQUNZX0JBU0VfUE9SVAorIyBkZWZpbmUgU1ZHQV9JT19NVUwJCTQK KyMgZGVmaW5lIFNWR0FfRklGT19TSVpFCQkweDEwMDAwCisjIGRlZmluZSBTVkdBX01FTV9CQVNF CQkweGVjMDAwMDAwCisjIGRlZmluZSBTVkdBX1BDSV9ERVZJQ0VfSUQJUENJX0RFVklDRV9JRF9W TVdBUkVfU1ZHQQorI2VuZGlmCisKK2VudW0geworICAgIC8qIElEIDAsIDEgYW5kIDIgcmVnaXN0 ZXJzICovCisgICAgU1ZHQV9SRUdfSUQgPSAwLAorICAgIFNWR0FfUkVHX0VOQUJMRSA9IDEsCisg ICAgU1ZHQV9SRUdfV0lEVEggPSAyLAorICAgIFNWR0FfUkVHX0hFSUdIVCA9IDMsCisgICAgU1ZH QV9SRUdfTUFYX1dJRFRIID0gNCwKKyAgICBTVkdBX1JFR19NQVhfSEVJR0hUID0gNSwKKyAgICBT VkdBX1JFR19ERVBUSCA9IDYsCisgICAgU1ZHQV9SRUdfQklUU19QRVJfUElYRUwgPSA3LAkvKiBD dXJyZW50IGJwcCBpbiB0aGUgZ3Vlc3QgKi8KKyAgICBTVkdBX1JFR19QU0VVRE9DT0xPUiA9IDgs CisgICAgU1ZHQV9SRUdfUkVEX01BU0sgPSA5LAorICAgIFNWR0FfUkVHX0dSRUVOX01BU0sgPSAx MCwKKyAgICBTVkdBX1JFR19CTFVFX01BU0sgPSAxMSwKKyAgICBTVkdBX1JFR19CWVRFU19QRVJf TElORSA9IDEyLAorICAgIFNWR0FfUkVHX0ZCX1NUQVJUID0gMTMsCisgICAgU1ZHQV9SRUdfRkJf T0ZGU0VUID0gMTQsCisgICAgU1ZHQV9SRUdfVlJBTV9TSVpFID0gMTUsCisgICAgU1ZHQV9SRUdf RkJfU0laRSA9IDE2LAorCisgICAgLyogSUQgMSBhbmQgMiByZWdpc3RlcnMgKi8KKyAgICBTVkdB X1JFR19DQVBBQklMSVRJRVMgPSAxNywKKyAgICBTVkdBX1JFR19NRU1fU1RBUlQgPSAxOCwJCS8q IE1lbW9yeSBmb3IgY29tbWFuZCBGSUZPICovCisgICAgU1ZHQV9SRUdfTUVNX1NJWkUgPSAxOSwK KyAgICBTVkdBX1JFR19DT05GSUdfRE9ORSA9IDIwLAkJLyogU2V0IHdoZW4gbWVtb3J5IGFyZWEg Y29uZmlndXJlZCAqLworICAgIFNWR0FfUkVHX1NZTkMgPSAyMSwJCQkvKiBXcml0ZSB0byBmb3Jj ZSBzeW5jaHJvbml6YXRpb24gKi8KKyAgICBTVkdBX1JFR19CVVNZID0gMjIsCQkJLyogUmVhZCB0 byBjaGVjayBpZiBzeW5jIGlzIGRvbmUgKi8KKyAgICBTVkdBX1JFR19HVUVTVF9JRCA9IDIzLAkJ LyogU2V0IGd1ZXN0IE9TIGlkZW50aWZpZXIgKi8KKyAgICBTVkdBX1JFR19DVVJTT1JfSUQgPSAy NCwJCS8qIElEIG9mIGN1cnNvciAqLworICAgIFNWR0FfUkVHX0NVUlNPUl9YID0gMjUsCQkvKiBT ZXQgY3Vyc29yIFggcG9zaXRpb24gKi8KKyAgICBTVkdBX1JFR19DVVJTT1JfWSA9IDI2LAkJLyog U2V0IGN1cnNvciBZIHBvc2l0aW9uICovCisgICAgU1ZHQV9SRUdfQ1VSU09SX09OID0gMjcsCQkv KiBUdXJuIGN1cnNvciBvbi9vZmYgKi8KKyAgICBTVkdBX1JFR19IT1NUX0JJVFNfUEVSX1BJWEVM ID0gMjgsCS8qIEN1cnJlbnQgYnBwIGluIHRoZSBob3N0ICovCisgICAgU1ZHQV9SRUdfU0NSQVRD SF9TSVpFID0gMjksCQkvKiBOdW1iZXIgb2Ygc2NyYXRjaCByZWdpc3RlcnMgKi8KKyAgICBTVkdB X1JFR19NRU1fUkVHUyA9IDMwLAkJLyogTnVtYmVyIG9mIEZJRk8gcmVnaXN0ZXJzICovCisgICAg U1ZHQV9SRUdfTlVNX0RJU1BMQVlTID0gMzEsCQkvKiBOdW1iZXIgb2YgZ3Vlc3QgZGlzcGxheXMg Ki8KKyAgICBTVkdBX1JFR19QSVRDSExPQ0sgPSAzMiwJCS8qIEZpeGVkIHBpdGNoIGZvciBhbGwg bW9kZXMgKi8KKworICAgIFNWR0FfUEFMRVRURV9CQVNFID0gMTAyNCwJCS8qIEJhc2Ugb2YgU1ZH QSBjb2xvciBtYXAgKi8KKyAgICBTVkdBX1BBTEVUVEVfRU5EICA9IFNWR0FfUEFMRVRURV9CQVNF ICsgNzY3LAorICAgIFNWR0FfU0NSQVRDSF9CQVNFID0gU1ZHQV9QQUxFVFRFX0JBU0UgKyA3Njgs Cit9OworCisjZGVmaW5lIFNWR0FfQ0FQX05PTkUJCQkwCisjZGVmaW5lIFNWR0FfQ0FQX1JFQ1Rf RklMTAkJKDEgPDwgMCkKKyNkZWZpbmUgU1ZHQV9DQVBfUkVDVF9DT1BZCQkoMSA8PCAxKQorI2Rl ZmluZSBTVkdBX0NBUF9SRUNUX1BBVF9GSUxMCQkoMSA8PCAyKQorI2RlZmluZSBTVkdBX0NBUF9M RUdBQ1lfT0ZGU0NSRUVOCSgxIDw8IDMpCisjZGVmaW5lIFNWR0FfQ0FQX1JBU1RFUl9PUAkJKDEg PDwgNCkKKyNkZWZpbmUgU1ZHQV9DQVBfQ1VSU09SCQkJKDEgPDwgNSkKKyNkZWZpbmUgU1ZHQV9D QVBfQ1VSU09SX0JZUEFTUwkJKDEgPDwgNikKKyNkZWZpbmUgU1ZHQV9DQVBfQ1VSU09SX0JZUEFT U18yCSgxIDw8IDcpCisjZGVmaW5lIFNWR0FfQ0FQXzhCSVRfRU1VTEFUSU9OCQkoMSA8PCA4KQor I2RlZmluZSBTVkdBX0NBUF9BTFBIQV9DVVJTT1IJCSgxIDw8IDkpCisjZGVmaW5lIFNWR0FfQ0FQ X0dMWVBICQkJKDEgPDwgMTApCisjZGVmaW5lIFNWR0FfQ0FQX0dMWVBIX0NMSVBQSU5HCQkoMSA8 PCAxMSkKKyNkZWZpbmUgU1ZHQV9DQVBfT0ZGU0NSRUVOXzEJCSgxIDw8IDEyKQorI2RlZmluZSBT VkdBX0NBUF9BTFBIQV9CTEVORAkJKDEgPDwgMTMpCisjZGVmaW5lIFNWR0FfQ0FQXzNECQkJKDEg PDwgMTQpCisjZGVmaW5lIFNWR0FfQ0FQX0VYVEVOREVEX0ZJRk8JCSgxIDw8IDE1KQorI2RlZmlu ZSBTVkdBX0NBUF9NVUxUSU1PTgkJKDEgPDwgMTYpCisjZGVmaW5lIFNWR0FfQ0FQX1BJVENITE9D SwkJKDEgPDwgMTcpCisKKy8qCisgKiBGSUZPIG9mZnNldHMgKHNlZW4gYXMgYW4gYXJyYXkgb2Yg MzItYml0IHdvcmRzKQorICovCitlbnVtIHsKKyAgICAvKgorICAgICAqIFRoZSBvcmlnaW5hbCBk ZWZpbmVkIEZJRk8gb2Zmc2V0cworICAgICAqLworICAgIFNWR0FfRklGT19NSU4gPSAwLAorICAg IFNWR0FfRklGT19NQVgsCS8qIFRoZSBkaXN0YW5jZSBmcm9tIE1JTiB0byBNQVggbXVzdCBiZSBh dCBsZWFzdCAxMEsgKi8KKyAgICBTVkdBX0ZJRk9fTkVYVF9DTUQsCisgICAgU1ZHQV9GSUZPX1NU T1AsCisKKyAgICAvKgorICAgICAqIEFkZGl0aW9uYWwgb2Zmc2V0cyBhZGRlZCBhcyBvZiBTVkdB X0NBUF9FWFRFTkRFRF9GSUZPCisgICAgICovCisgICAgU1ZHQV9GSUZPX0NBUEFCSUxJVElFUyA9 IDQsCisgICAgU1ZHQV9GSUZPX0ZMQUdTLAorICAgIFNWR0FfRklGT19GRU5DRSwKKyAgICBTVkdB X0ZJRk9fM0RfSFdWRVJTSU9OLAorICAgIFNWR0FfRklGT19QSVRDSExPQ0ssCit9OworCisjZGVm aW5lIFNWR0FfRklGT19DQVBfTk9ORQkJMAorI2RlZmluZSBTVkdBX0ZJRk9fQ0FQX0ZFTkNFCQko MSA8PCAwKQorI2RlZmluZSBTVkdBX0ZJRk9fQ0FQX0FDQ0VMRlJPTlQJKDEgPDwgMSkKKyNkZWZp bmUgU1ZHQV9GSUZPX0NBUF9QSVRDSExPQ0sJCSgxIDw8IDIpCisKKyNkZWZpbmUgU1ZHQV9GSUZP X0ZMQUdfTk9ORQkJMAorI2RlZmluZSBTVkdBX0ZJRk9fRkxBR19BQ0NFTEZST05UCSgxIDw8IDAp CisKKy8qIFRoZXNlIHZhbHVlcyBjYW4gcHJvYmFibHkgYmUgY2hhbmdlZCBhcmJpdHJhcmlseS4g ICovCisjZGVmaW5lIFNWR0FfU0NSQVRDSF9TSVpFCQkweDgwMDAKKyNkZWZpbmUgU1ZHQV9NQVhf V0lEVEgJCQkyMzYwCisjZGVmaW5lIFNWR0FfTUFYX0hFSUdIVAkJCTE3NzAKKworI2lmZGVmIFZF UkJPU0UKKyMgZGVmaW5lIEdVRVNUX09TX0JBU0UJCTB4NTAwMQorc3RhdGljIGNvbnN0IGNoYXIg KnZtc3ZnYV9ndWVzdF9pZFtdID0geworICAgIFsweDBdID0gIkRvcyIsCisgICAgWzB4MV0gPSAi V2luZG93cyAzLjEiLAorICAgIFsweDJdID0gIldpbmRvd3MgOTUiLAorICAgIFsweDNdID0gIldp bmRvd3MgOTgiLAorICAgIFsweDRdID0gIldpbmRvd3MgTUUiLAorICAgIFsweDVdID0gIldpbmRv d3MgTlQiLAorICAgIFsweDZdID0gIldpbmRvd3MgMjAwMCIsCisgICAgWzB4N10gPSAiTGludXgi LAorICAgIFsweDhdID0gIk9TLzIiLAorICAgIFsweDldID0gIlVua25vd24iLAorICAgIFsweGFd ID0gIkJTRCIsCisgICAgWzB4Yl0gPSAiV2hpc3RsZXIiLAorfTsKKyNlbmRpZgorCitlbnVtIHsK KyAgICBTVkdBX0NNRF9JTlZBTElEX0NNRCA9IDAsCisgICAgU1ZHQV9DTURfVVBEQVRFID0gMSwK KyAgICBTVkdBX0NNRF9SRUNUX0ZJTEwgPSAyLAorICAgIFNWR0FfQ01EX1JFQ1RfQ09QWSA9IDMs CisgICAgU1ZHQV9DTURfREVGSU5FX0JJVE1BUCA9IDQsCisgICAgU1ZHQV9DTURfREVGSU5FX0JJ VE1BUF9TQ0FOTElORSA9IDUsCisgICAgU1ZHQV9DTURfREVGSU5FX1BJWE1BUCA9IDYsCisgICAg U1ZHQV9DTURfREVGSU5FX1BJWE1BUF9TQ0FOTElORSA9IDcsCisgICAgU1ZHQV9DTURfUkVDVF9C SVRNQVBfRklMTCA9IDgsCisgICAgU1ZHQV9DTURfUkVDVF9QSVhNQVBfRklMTCA9IDksCisgICAg U1ZHQV9DTURfUkVDVF9CSVRNQVBfQ09QWSA9IDEwLAorICAgIFNWR0FfQ01EX1JFQ1RfUElYTUFQ X0NPUFkgPSAxMSwKKyAgICBTVkdBX0NNRF9GUkVFX09CSkVDVCA9IDEyLAorICAgIFNWR0FfQ01E X1JFQ1RfUk9QX0ZJTEwgPSAxMywKKyAgICBTVkdBX0NNRF9SRUNUX1JPUF9DT1BZID0gMTQsCisg ICAgU1ZHQV9DTURfUkVDVF9ST1BfQklUTUFQX0ZJTEwgPSAxNSwKKyAgICBTVkdBX0NNRF9SRUNU X1JPUF9QSVhNQVBfRklMTCA9IDE2LAorICAgIFNWR0FfQ01EX1JFQ1RfUk9QX0JJVE1BUF9DT1BZ ID0gMTcsCisgICAgU1ZHQV9DTURfUkVDVF9ST1BfUElYTUFQX0NPUFkgPSAxOCwKKyAgICBTVkdB X0NNRF9ERUZJTkVfQ1VSU09SID0gMTksCisgICAgU1ZHQV9DTURfRElTUExBWV9DVVJTT1IgPSAy MCwKKyAgICBTVkdBX0NNRF9NT1ZFX0NVUlNPUiA9IDIxLAorICAgIFNWR0FfQ01EX0RFRklORV9B TFBIQV9DVVJTT1IgPSAyMiwKKyAgICBTVkdBX0NNRF9EUkFXX0dMWVBIID0gMjMsCisgICAgU1ZH QV9DTURfRFJBV19HTFlQSF9DTElQUEVEID0gMjQsCisgICAgU1ZHQV9DTURfVVBEQVRFX1ZFUkJP U0UgPSAyNSwKKyAgICBTVkdBX0NNRF9TVVJGQUNFX0ZJTEwgPSAyNiwKKyAgICBTVkdBX0NNRF9T VVJGQUNFX0NPUFkgPSAyNywKKyAgICBTVkdBX0NNRF9TVVJGQUNFX0FMUEhBX0JMRU5EID0gMjgs CisgICAgU1ZHQV9DTURfRlJPTlRfUk9QX0ZJTEwgPSAyOSwKKyAgICBTVkdBX0NNRF9GRU5DRSA9 IDMwLAorfTsKKworLyogTGVnYWwgdmFsdWVzIGZvciB0aGUgU1ZHQV9SRUdfQ1VSU09SX09OIHJl Z2lzdGVyIGluIGN1cnNvciBieXBhc3MgbW9kZSAqLworZW51bSB7CisgICAgU1ZHQV9DVVJTT1Jf T05fSElERSA9IDAsCisgICAgU1ZHQV9DVVJTT1JfT05fU0hPVyA9IDEsCisgICAgU1ZHQV9DVVJT T1JfT05fUkVNT1ZFX0ZST01fRkIgPSAyLAorICAgIFNWR0FfQ1VSU09SX09OX1JFU1RPUkVfVE9f RkIgPSAzLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIHZtc3ZnYV91cGRhdGVfcmVjdChzdHJ1 Y3Qgdm1zdmdhX3N0YXRlX3MgKnMsCisgICAgICAgICAgICAgICAgaW50IHgsIGludCB5LCBpbnQg dywgaW50IGgpCit7CisjaWZuZGVmIERJUkVDVF9WUkFNCisgICAgaW50IGxpbmUgPSBoOworICAg IGludCBieXBsID0gcy0+YnlwcCAqIHMtPndpZHRoOworICAgIGludCB3aWR0aCA9IHMtPmJ5cHAg KiB3OworICAgIGludCBzdGFydCA9IHMtPmJ5cHAgKiB4ICsgYnlwbCAqIHk7CisgICAgdWludDhf dCAqc3JjID0gcy0+dnJhbSArIHN0YXJ0OworICAgIHVpbnQ4X3QgKmRzdCA9IHMtPmRzLT5kYXRh ICsgc3RhcnQ7CisKKyAgICBmb3IgKDsgbGluZSA+IDA7IGxpbmUgLS0sIHNyYyArPSBieXBsLCBk c3QgKz0gYnlwbCkKKyAgICAgICAgbWVtY3B5KGRzdCwgc3JjLCB3aWR0aCk7CisjZW5kaWYKKwor ICAgIGRweV91cGRhdGUocy0+ZHMsIHgsIHksIHcsIGgpOworfQorCitzdGF0aWMgaW5saW5lIHZv aWQgdm1zdmdhX3VwZGF0ZV9zY3JlZW4oc3RydWN0IHZtc3ZnYV9zdGF0ZV9zICpzKQoreworI2lm bmRlZiBESVJFQ1RfVlJBTQorICAgIG1lbWNweShzLT5kcy0+ZGF0YSwgcy0+dnJhbSwgcy0+Ynlw cCAqIHMtPndpZHRoICogcy0+aGVpZ2h0KTsKKyNlbmRpZgorCisgICAgZHB5X3VwZGF0ZShzLT5k cywgMCwgMCwgcy0+d2lkdGgsIHMtPmhlaWdodCk7Cit9CisKKyNpZmRlZiBESVJFQ1RfVlJBTQor IyBkZWZpbmUgdm1zdmdhX3VwZGF0ZV9yZWN0X2RlbGF5ZWQJdm1zdmdhX3VwZGF0ZV9yZWN0Cisj ZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHZtc3ZnYV91cGRhdGVfcmVjdF9kZWxheWVkKHN0cnVj dCB2bXN2Z2Ffc3RhdGVfcyAqcywKKyAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3 LCBpbnQgaCkKK3sKKyAgICBzdHJ1Y3Qgdm1zdmdhX3JlY3RfcyAqcmVjdCA9ICZzLT5yZWRyYXdf Zmlmb1tzLT5yZWRyYXdfZmlmb19sYXN0ICsrXTsKKyAgICBzLT5yZWRyYXdfZmlmb19sYXN0ICY9 IFJFRFJBV19GSUZPX0xFTiAtIDE7CisgICAgcmVjdC0+eCA9IHg7CisgICAgcmVjdC0+eSA9IHk7 CisgICAgcmVjdC0+dyA9IHc7CisgICAgcmVjdC0+aCA9IGg7Cit9CisjZW5kaWYKKworc3RhdGlj IGlubGluZSB2b2lkIHZtc3ZnYV91cGRhdGVfcmVjdF9mbHVzaChzdHJ1Y3Qgdm1zdmdhX3N0YXRl X3MgKnMpCit7CisgICAgc3RydWN0IHZtc3ZnYV9yZWN0X3MgKnJlY3Q7CisgICAgaWYgKHMtPmlu dmFsaWRhdGVkKSB7CisgICAgICAgIHMtPnJlZHJhd19maWZvX2ZpcnN0ID0gcy0+cmVkcmF3X2Zp Zm9fbGFzdDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvKiBPdmVybGFwcGluZyByZWdp b24gdXBkYXRlcyBjYW4gYmUgb3B0aW1pc2VkIG91dCBoZXJlIC0gaWYgc29tZW9uZQorICAgICAq IGtub3dzIGEgc21hcnQgYWxnb3JpdGhtIHRvIGRvIHRoYXQsIHBsZWFzZSBzaGFyZS4gICovCisg ICAgd2hpbGUgKHMtPnJlZHJhd19maWZvX2ZpcnN0ICE9IHMtPnJlZHJhd19maWZvX2xhc3QpIHsK KyAgICAgICAgcmVjdCA9ICZzLT5yZWRyYXdfZmlmb1tzLT5yZWRyYXdfZmlmb19maXJzdCArK107 CisgICAgICAgIHMtPnJlZHJhd19maWZvX2ZpcnN0ICY9IFJFRFJBV19GSUZPX0xFTiAtIDE7Cisg ICAgICAgIHZtc3ZnYV91cGRhdGVfcmVjdChzLCByZWN0LT54LCByZWN0LT55LCByZWN0LT53LCBy ZWN0LT5oKTsKKyAgICB9Cit9CisKKyNpZmRlZiBIV19SRUNUX0FDQ0VMCitzdGF0aWMgaW5saW5l IHZvaWQgdm1zdmdhX2NvcHlfcmVjdChzdHJ1Y3Qgdm1zdmdhX3N0YXRlX3MgKnMsCisgICAgICAg ICAgICAgICAgaW50IHgwLCBpbnQgeTAsIGludCB4MSwgaW50IHkxLCBpbnQgdywgaW50IGgpCit7 CisjIGlmZGVmIERJUkVDVF9WUkFNCisgICAgdWludDhfdCAqdnJhbSA9IHMtPmRzLT5kYXRhOwor IyBlbHNlCisgICAgdWludDhfdCAqdnJhbSA9IHMtPnZyYW07CisjIGVuZGlmCisgICAgaW50IGJ5 cGwgPSBzLT5ieXBwICogcy0+d2lkdGg7CisgICAgaW50IHdpZHRoID0gcy0+YnlwcCAqIHc7Cisg ICAgaW50IGxpbmUgPSBoOworICAgIHVpbnQ4X3QgKnB0clsyXTsKKworIyBpZmRlZiBESVJFQ1Rf VlJBTQorICAgIGlmIChzLT5kcy0+ZHB5X2NvcHkpCisgICAgICAgIHMtPmRzLT5kcHlfY29weShz LT5kcywgeDAsIHkwLCB4MSwgeTEsIHcsIGgpOworICAgIGVsc2UKKyMgZW5kaWYKKyAgICB7Cisg ICAgICAgIGlmICh5MSA+IHkwKSB7CisgICAgICAgICAgICBwdHJbMF0gPSB2cmFtICsgcy0+Ynlw cCAqIHgwICsgYnlwbCAqICh5MCArIGggLSAxKTsKKyAgICAgICAgICAgIHB0clsxXSA9IHZyYW0g KyBzLT5ieXBwICogeDEgKyBieXBsICogKHkxICsgaCAtIDEpOworICAgICAgICAgICAgZm9yICg7 IGxpbmUgPiAwOyBsaW5lIC0tLCBwdHJbMF0gLT0gYnlwbCwgcHRyWzFdIC09IGJ5cGwpCisgICAg ICAgICAgICAgICAgbWVtbW92ZShwdHJbMV0sIHB0clswXSwgd2lkdGgpOworICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgcHRyWzBdID0gdnJhbSArIHMtPmJ5cHAgKiB4MCArIGJ5cGwgKiB5 MDsKKyAgICAgICAgICAgIHB0clsxXSA9IHZyYW0gKyBzLT5ieXBwICogeDEgKyBieXBsICogeTE7 CisgICAgICAgICAgICBmb3IgKDsgbGluZSA+IDA7IGxpbmUgLS0sIHB0clswXSArPSBieXBsLCBw dHJbMV0gKz0gYnlwbCkKKyAgICAgICAgICAgICAgICBtZW1tb3ZlKHB0clsxXSwgcHRyWzBdLCB3 aWR0aCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2bXN2Z2FfdXBkYXRlX3JlY3RfZGVsYXll ZChzLCB4MSwgeTEsIHcsIGgpOworfQorI2VuZGlmCisKKyNpZmRlZiBIV19GSUxMX0FDQ0VMCitz dGF0aWMgaW5saW5lIHZvaWQgdm1zdmdhX2ZpbGxfcmVjdChzdHJ1Y3Qgdm1zdmdhX3N0YXRlX3Mg KnMsCisgICAgICAgICAgICAgICAgdWludDMyX3QgYywgaW50IHgsIGludCB5LCBpbnQgdywgaW50 IGgpCit7CisjIGlmZGVmIERJUkVDVF9WUkFNCisgICAgdWludDhfdCAqdnJhbSA9IHMtPmRzLT5k YXRhOworIyBlbHNlCisgICAgdWludDhfdCAqdnJhbSA9IHMtPnZyYW07CisjIGVuZGlmCisgICAg aW50IGJ5cHAgPSBzLT5ieXBwOworICAgIGludCBieXBsID0gYnlwcCAqIHMtPndpZHRoOworICAg IGludCB3aWR0aCA9IGJ5cHAgKiB3OworICAgIGludCBsaW5lID0gaDsKKyAgICBpbnQgY29sdW1u OworICAgIHVpbnQ4X3QgKmZzdCA9IHZyYW0gKyBieXBwICogeCArIGJ5cGwgKiB5OworICAgIHVp bnQ4X3QgKmRzdDsKKyAgICB1aW50OF90ICpzcmM7CisgICAgdWludDhfdCBjb2xbNF07CisKKyMg aWZkZWYgRElSRUNUX1ZSQU0KKyAgICBpZiAocy0+ZHMtPmRweV9maWxsKQorICAgICAgICBzLT5k cy0+ZHB5X2ZpbGwocy0+ZHMsIHgsIHksIHcsIGgsIGMpOworICAgIGVsc2UKKyMgZW5kaWYKKyAg ICB7CisgICAgICAgIGNvbFswXSA9IGM7CisgICAgICAgIGNvbFsxXSA9IGMgPj4gODsKKyAgICAg ICAgY29sWzJdID0gYyA+PiAxNjsKKyAgICAgICAgY29sWzNdID0gYyA+PiAyNDsKKworICAgICAg ICBpZiAobGluZSAtLSkgeworICAgICAgICAgICAgZHN0ID0gZnN0OworICAgICAgICAgICAgc3Jj ID0gY29sOworICAgICAgICAgICAgZm9yIChjb2x1bW4gPSB3aWR0aDsgY29sdW1uID4gMDsgY29s dW1uIC0tKSB7CisgICAgICAgICAgICAgICAgKihkc3QgKyspID0gKihzcmMgKyspOworICAgICAg ICAgICAgICAgIGlmIChzcmMgLSBjb2wgPT0gYnlwcCkKKyAgICAgICAgICAgICAgICAgICAgc3Jj ID0gY29sOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZHN0ID0gZnN0OworICAgICAgICAg ICAgZm9yICg7IGxpbmUgPiAwOyBsaW5lIC0tKSB7CisgICAgICAgICAgICAgICAgZHN0ICs9IGJ5 cGw7CisgICAgICAgICAgICAgICAgbWVtY3B5KGRzdCwgZnN0LCB3aWR0aCk7CisgICAgICAgICAg ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2bXN2Z2FfdXBkYXRlX3JlY3RfZGVsYXllZChz LCB4LCB5LCB3LCBoKTsKK30KKyNlbmRpZgorCitzdHJ1Y3Qgdm1zdmdhX2N1cnNvcl9kZWZpbml0 aW9uX3MgeworICAgIGludCB3aWR0aDsKKyAgICBpbnQgaGVpZ2h0OworICAgIGludCBpZDsKKyAg ICBpbnQgYnBwOworICAgIGludCBob3RfeDsKKyAgICBpbnQgaG90X3k7CisgICAgdWludDMyX3Qg bWFza1sxMDI0XTsKKyAgICB1aW50MzJfdCBpbWFnZVsxMDI0XTsKK307CisKKyNkZWZpbmUgU1ZH QV9CSVRNQVBfU0laRSh3LCBoKQkJKCgoKHcpICsgMzEpID4+IDUpICogKGgpKQorI2RlZmluZSBT VkdBX1BJWE1BUF9TSVpFKHcsIGgsIGJwcCkJKCgoKCh3KSAqIChicHApKSArIDMxKSA+PiA1KSAq IChoKSkKKworI2lmZGVmIEhXX01PVVNFX0FDQ0VMCitzdGF0aWMgaW5saW5lIHZvaWQgdm1zdmdh X2N1cnNvcl9kZWZpbmUoc3RydWN0IHZtc3ZnYV9zdGF0ZV9zICpzLAorICAgICAgICAgICAgICAg IHN0cnVjdCB2bXN2Z2FfY3Vyc29yX2RlZmluaXRpb25fcyAqYykKK3sKKyAgICBpbnQgaTsKKyAg ICBmb3IgKGkgPSBTVkdBX0JJVE1BUF9TSVpFKGMtPndpZHRoLCBjLT5oZWlnaHQpIC0gMTsgaSA+ PSAwOyBpIC0tKQorICAgICAgICBjLT5tYXNrW2ldID0gfmMtPm1hc2tbaV07CisKKyAgICBpZiAo cy0+ZHMtPmN1cnNvcl9kZWZpbmUpCisgICAgICAgIHMtPmRzLT5jdXJzb3JfZGVmaW5lKGMtPndp ZHRoLCBjLT5oZWlnaHQsIGMtPmJwcCwgYy0+aG90X3gsIGMtPmhvdF95LAorICAgICAgICAgICAg ICAgICAgICAgICAgKHVpbnQ4X3QgKikgYy0+aW1hZ2UsICh1aW50OF90ICopIGMtPm1hc2spOwor fQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgaW50IHZtc3ZnYV9maWZvX2VtcHR5KHN0cnVjdCB2 bXN2Z2Ffc3RhdGVfcyAqcykKK3sKKyAgICBpZiAoIXMtPmNvbmZpZyB8fCAhcy0+ZW5hYmxlKQor ICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gKHMtPmNtZC0+bmV4dF9jbWQgPT0gcy0+Y21k LT5zdG9wKTsKK30KKworc3RhdGljIGlubGluZSB1aW50MzJfdCB2bXN2Z2FfZmlmb19yZWFkKHN0 cnVjdCB2bXN2Z2Ffc3RhdGVfcyAqcykKK3sKKyAgICB1aW50MzJfdCBjbWQgPSBzLT5maWZvW3Mt PmNtZC0+c3RvcCA+PiAyXTsKKyAgICBzLT5jbWQtPnN0b3AgKz0gNDsKKyAgICBpZiAocy0+Y21k LT5zdG9wID49IHMtPmNtZC0+bWF4KQorICAgICAgICBzLT5jbWQtPnN0b3AgPSBzLT5jbWQtPm1p bjsKKyAgICByZXR1cm4gY21kOworfQorCitzdGF0aWMgdm9pZCB2bXN2Z2FfZmlmb19ydW4oc3Ry dWN0IHZtc3ZnYV9zdGF0ZV9zICpzKQoreworICAgIHVpbnQzMl90IGNtZCwgY29sb3VyOworICAg IGludCBhcmdzID0gMDsKKyAgICBpbnQgeCwgeSwgZHgsIGR5LCB3aWR0aCwgaGVpZ2h0OworICAg IHN0cnVjdCB2bXN2Z2FfY3Vyc29yX2RlZmluaXRpb25fcyBjdXJzb3I7CisgICAgd2hpbGUgKCF2 bXN2Z2FfZmlmb19lbXB0eShzKSkKKyAgICAgICAgc3dpdGNoIChjbWQgPSB2bXN2Z2FfZmlmb19y ZWFkKHMpKSB7CisgICAgICAgIGNhc2UgU1ZHQV9DTURfVVBEQVRFOgorICAgICAgICBjYXNlIFNW R0FfQ01EX1VQREFURV9WRVJCT1NFOgorICAgICAgICAgICAgeCA9IHZtc3ZnYV9maWZvX3JlYWQo cyk7CisgICAgICAgICAgICB5ID0gdm1zdmdhX2ZpZm9fcmVhZChzKTsKKyAgICAgICAgICAgIHdp ZHRoID0gdm1zdmdhX2ZpZm9fcmVhZChzKTsKKyAgICAgICAgICAgIGhlaWdodCA9IHZtc3ZnYV9m aWZvX3JlYWQocyk7CisgICAgICAgICAgICB2bXN2Z2FfdXBkYXRlX3JlY3RfZGVsYXllZChzLCB4 LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ug U1ZHQV9DTURfUkVDVF9GSUxMOgorICAgICAgICAgICAgY29sb3VyID0gdm1zdmdhX2ZpZm9fcmVh ZChzKTsKKyAgICAgICAgICAgIHggPSB2bXN2Z2FfZmlmb19yZWFkKHMpOworICAgICAgICAgICAg eSA9IHZtc3ZnYV9maWZvX3JlYWQocyk7CisgICAgICAgICAgICB3aWR0aCA9IHZtc3ZnYV9maWZv X3JlYWQocyk7CisgICAgICAgICAgICBoZWlnaHQgPSB2bXN2Z2FfZmlmb19yZWFkKHMpOworI2lm ZGVmIEhXX0ZJTExfQUNDRUwKKyAgICAgICAgICAgIHZtc3ZnYV9maWxsX3JlY3QocywgY29sb3Vy LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIGJyZWFrOworI2Vsc2UKKyAgICAg ICAgICAgIGdvdG8gYmFkY21kOworI2VuZGlmCisKKyAgICAgICAgY2FzZSBTVkdBX0NNRF9SRUNU X0NPUFk6CisgICAgICAgICAgICB4ID0gdm1zdmdhX2ZpZm9fcmVhZChzKTsKKyAgICAgICAgICAg IHkgPSB2bXN2Z2FfZmlmb19yZWFkKHMpOworICAgICAgICAgICAgZHggPSB2bXN2Z2FfZmlmb19y ZWFkKHMpOworICAgICAgICAgICAgZHkgPSB2bXN2Z2FfZmlmb19yZWFkKHMpOworICAgICAgICAg ICAgd2lkdGggPSB2bXN2Z2FfZmlmb19yZWFkKHMpOworICAgICAgICAgICAgaGVpZ2h0ID0gdm1z dmdhX2ZpZm9fcmVhZChzKTsKKyNpZmRlZiBIV19SRUNUX0FDQ0VMCisgICAgICAgICAgICB2bXN2 Z2FfY29weV9yZWN0KHMsIHgsIHksIGR4LCBkeSwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAg ICBicmVhazsKKyNlbHNlCisgICAgICAgICAgICBnb3RvIGJhZGNtZDsKKyNlbmRpZgorCisgICAg ICAgIGNhc2UgU1ZHQV9DTURfREVGSU5FX0NVUlNPUjoKKyAgICAgICAgICAgIGN1cnNvci5pZCA9 IHZtc3ZnYV9maWZvX3JlYWQocyk7CisgICAgICAgICAgICBjdXJzb3IuaG90X3ggPSB2bXN2Z2Ff Zmlmb19yZWFkKHMpOworICAgICAgICAgICAgY3Vyc29yLmhvdF95ID0gdm1zdmdhX2ZpZm9fcmVh ZChzKTsKKyAgICAgICAgICAgIGN1cnNvci53aWR0aCA9IHggPSB2bXN2Z2FfZmlmb19yZWFkKHMp OworICAgICAgICAgICAgY3Vyc29yLmhlaWdodCA9IHkgPSB2bXN2Z2FfZmlmb19yZWFkKHMpOwor ICAgICAgICAgICAgdm1zdmdhX2ZpZm9fcmVhZChzKTsKKyAgICAgICAgICAgIGN1cnNvci5icHAg PSB2bXN2Z2FfZmlmb19yZWFkKHMpOworICAgICAgICAgICAgZm9yIChhcmdzID0gMDsgYXJncyA8 IFNWR0FfQklUTUFQX1NJWkUoeCwgeSk7IGFyZ3MgKyspCisgICAgICAgICAgICAgICAgY3Vyc29y Lm1hc2tbYXJnc10gPSB2bXN2Z2FfZmlmb19yZWFkKHMpOworICAgICAgICAgICAgZm9yIChhcmdz ID0gMDsgYXJncyA8IFNWR0FfUElYTUFQX1NJWkUoeCwgeSwgY3Vyc29yLmJwcCk7IGFyZ3MgKysp CisgICAgICAgICAgICAgICAgY3Vyc29yLmltYWdlW2FyZ3NdID0gdm1zdmdhX2ZpZm9fcmVhZChz KTsKKyNpZmRlZiBIV19NT1VTRV9BQ0NFTAorICAgICAgICAgICAgdm1zdmdhX2N1cnNvcl9kZWZp bmUocywgJmN1cnNvcik7CisgICAgICAgICAgICBicmVhazsKKyNlbHNlCisgICAgICAgICAgICBh cmdzID0gMDsKKyAgICAgICAgICAgIGdvdG8gYmFkY21kOworI2VuZGlmCisKKyAgICAgICAgLyoK KyAgICAgICAgICogT3RoZXIgY29tbWFuZHMgdGhhdCB3ZSBhdCBsZWFzdCBrbm93IHRoZSBudW1i ZXIgb2YgYXJndW1lbnRzCisgICAgICAgICAqIGZvciBzbyB3ZSBjYW4gYXZvaWQgRklGTyBkZXN5 bmMgaWYgZHJpdmVyIHVzZXMgdGhlbSBpbGxlZ2FsbHkuCisgICAgICAgICAqLworICAgICAgICBj YXNlIFNWR0FfQ01EX0RFRklORV9BTFBIQV9DVVJTT1I6CisgICAgICAgICAgICB2bXN2Z2FfZmlm b19yZWFkKHMpOworICAgICAgICAgICAgdm1zdmdhX2ZpZm9fcmVhZChzKTsKKyAgICAgICAgICAg IHZtc3ZnYV9maWZvX3JlYWQocyk7CisgICAgICAgICAgICB4ID0gdm1zdmdhX2ZpZm9fcmVhZChz KTsKKyAgICAgICAgICAgIHkgPSB2bXN2Z2FfZmlmb19yZWFkKHMpOworICAgICAgICAgICAgYXJn cyA9IHggKiB5OworICAgICAgICAgICAgZ290byBiYWRjbWQ7CisgICAgICAgIGNhc2UgU1ZHQV9D TURfUkVDVF9ST1BfRklMTDoKKyAgICAgICAgICAgIGFyZ3MgPSA2OworICAgICAgICAgICAgZ290 byBiYWRjbWQ7CisgICAgICAgIGNhc2UgU1ZHQV9DTURfUkVDVF9ST1BfQ09QWToKKyAgICAgICAg ICAgIGFyZ3MgPSA3OworICAgICAgICAgICAgZ290byBiYWRjbWQ7CisgICAgICAgIGNhc2UgU1ZH QV9DTURfRFJBV19HTFlQSF9DTElQUEVEOgorICAgICAgICAgICAgdm1zdmdhX2ZpZm9fcmVhZChz KTsKKyAgICAgICAgICAgIHZtc3ZnYV9maWZvX3JlYWQocyk7CisgICAgICAgICAgICBhcmdzID0g NyArICh2bXN2Z2FfZmlmb19yZWFkKHMpID4+IDIpOworICAgICAgICAgICAgZ290byBiYWRjbWQ7 CisgICAgICAgIGNhc2UgU1ZHQV9DTURfU1VSRkFDRV9BTFBIQV9CTEVORDoKKyAgICAgICAgICAg IGFyZ3MgPSAxMjsKKyAgICAgICAgICAgIGdvdG8gYmFkY21kOworCisgICAgICAgIC8qCisgICAg ICAgICAqIE90aGVyIGNvbW1hbmRzIHRoYXQgYXJlIG5vdCBsaXN0ZWQgYXMgZGVwZW5kaW5nIG9u IGFueQorICAgICAgICAgKiBDQVBBQklMSVRJRVMgYml0cywgYnV0IGFyZSBub3QgZGVzY3JpYmVk IGluIHRoZSBSRUFETUUgZWl0aGVyLgorICAgICAgICAgKi8KKyAgICAgICAgY2FzZSBTVkdBX0NN RF9TVVJGQUNFX0ZJTEw6CisgICAgICAgIGNhc2UgU1ZHQV9DTURfU1VSRkFDRV9DT1BZOgorICAg ICAgICBjYXNlIFNWR0FfQ01EX0ZST05UX1JPUF9GSUxMOgorICAgICAgICBjYXNlIFNWR0FfQ01E X0ZFTkNFOgorICAgICAgICBjYXNlIFNWR0FfQ01EX0lOVkFMSURfQ01EOgorICAgICAgICAgICAg YnJlYWs7IC8qIE5vcCAqLworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJhZGNtZDoKKyAg ICAgICAgICAgIHdoaWxlIChhcmdzIC0tKQorICAgICAgICAgICAgICAgIHZtc3ZnYV9maWZvX3Jl YWQocyk7CisgICAgICAgICAgICBwcmludGYoIiVzOiBVbmtub3duIGNvbW1hbmQgMHglMDJ4IGlu IFNWR0EgY29tbWFuZCBGSUZPXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRlVO Q1RJT05fXywgY21kKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICBzLT5z eW5jaW5nID0gMDsKK30KKworc3RhdGljIHVpbnQzMl90IHZtc3ZnYV9pbmRleF9yZWFkKHZvaWQg Km9wYXF1ZSwgdWludDMyX3QgYWRkcmVzcykKK3sKKyAgICBzdHJ1Y3Qgdm1zdmdhX3N0YXRlX3Mg KnMgPSAoc3RydWN0IHZtc3ZnYV9zdGF0ZV9zICopIG9wYXF1ZTsKKyAgICByZXR1cm4gcy0+aW5k ZXg7Cit9CisKK3N0YXRpYyB2b2lkIHZtc3ZnYV9pbmRleF93cml0ZSh2b2lkICpvcGFxdWUsIHVp bnQzMl90IGFkZHJlc3MsIHVpbnQzMl90IGluZGV4KQoreworICAgIHN0cnVjdCB2bXN2Z2Ffc3Rh dGVfcyAqcyA9IChzdHJ1Y3Qgdm1zdmdhX3N0YXRlX3MgKikgb3BhcXVlOworICAgIHMtPmluZGV4 ID0gaW5kZXg7Cit9CisKK3N0YXRpYyB1aW50MzJfdCB2bXN2Z2FfdmFsdWVfcmVhZCh2b2lkICpv cGFxdWUsIHVpbnQzMl90IGFkZHJlc3MpCit7CisgICAgdWludDMyX3QgY2FwczsKKyAgICBzdHJ1 Y3Qgdm1zdmdhX3N0YXRlX3MgKnMgPSAoc3RydWN0IHZtc3ZnYV9zdGF0ZV9zICopIG9wYXF1ZTsK KyAgICBzd2l0Y2ggKHMtPmluZGV4KSB7CisgICAgY2FzZSBTVkdBX1JFR19JRDoKKyAgICAgICAg cmV0dXJuIHMtPnN2Z2FpZDsKKworICAgIGNhc2UgU1ZHQV9SRUdfRU5BQkxFOgorICAgICAgICBy ZXR1cm4gcy0+ZW5hYmxlOworCisgICAgY2FzZSBTVkdBX1JFR19XSURUSDoKKyAgICAgICAgcmV0 dXJuIHMtPndpZHRoOworCisgICAgY2FzZSBTVkdBX1JFR19IRUlHSFQ6CisgICAgICAgIHJldHVy biBzLT5oZWlnaHQ7CisKKyAgICBjYXNlIFNWR0FfUkVHX01BWF9XSURUSDoKKyAgICAgICAgcmV0 dXJuIFNWR0FfTUFYX1dJRFRIOworCisgICAgY2FzZSBTVkdBX1JFR19NQVhfSEVJR0hUOgorICAg ICAgICByZXR1cm4gU1ZHQV9NQVhfV0lEVEg7CisKKyAgICBjYXNlIFNWR0FfUkVHX0RFUFRIOgor ICAgICAgICByZXR1cm4gcy0+ZGVwdGg7CisKKyAgICBjYXNlIFNWR0FfUkVHX0JJVFNfUEVSX1BJ WEVMOgorICAgICAgICByZXR1cm4gKHMtPmRlcHRoICsgNykgJiB+NzsKKworICAgIGNhc2UgU1ZH QV9SRUdfUFNFVURPQ09MT1I6CisgICAgICAgIHJldHVybiAweDA7CisKKyAgICBjYXNlIFNWR0Ff UkVHX1JFRF9NQVNLOgorICAgICAgICByZXR1cm4gcy0+d3JlZDsKKyAgICBjYXNlIFNWR0FfUkVH X0dSRUVOX01BU0s6CisgICAgICAgIHJldHVybiBzLT53Z3JlZW47CisgICAgY2FzZSBTVkdBX1JF R19CTFVFX01BU0s6CisgICAgICAgIHJldHVybiBzLT53Ymx1ZTsKKworICAgIGNhc2UgU1ZHQV9S RUdfQllURVNfUEVSX0xJTkU6CisgICAgICAgIHJldHVybiAoKHMtPmRlcHRoICsgNykgPj4gMykg KiBzLT5uZXdfd2lkdGg7CisKKyAgICBjYXNlIFNWR0FfUkVHX0ZCX1NUQVJUOgorICAgICAgICBy ZXR1cm4gU1ZHQV9NRU1fQkFTRTsKKworICAgIGNhc2UgU1ZHQV9SRUdfRkJfT0ZGU0VUOgorICAg ICAgICByZXR1cm4gMHgwOworCisgICAgY2FzZSBTVkdBX1JFR19WUkFNX1NJWkU6CisgICAgICAg IHJldHVybiBzLT52cmFtX3NpemUgLSBTVkdBX0ZJRk9fU0laRTsKKworICAgIGNhc2UgU1ZHQV9S RUdfRkJfU0laRToKKyAgICAgICAgcmV0dXJuIHMtPmZiX3NpemU7CisKKyAgICBjYXNlIFNWR0Ff UkVHX0NBUEFCSUxJVElFUzoKKyAgICAgICAgY2FwcyA9IFNWR0FfQ0FQX05PTkU7CisjaWZkZWYg SFdfUkVDVF9BQ0NFTAorICAgICAgICBjYXBzIHw9IFNWR0FfQ0FQX1JFQ1RfQ09QWTsKKyNlbmRp ZgorI2lmZGVmIEhXX0ZJTExfQUNDRUwKKyAgICAgICAgY2FwcyB8PSBTVkdBX0NBUF9SRUNUX0ZJ TEw7CisjZW5kaWYKKyNpZmRlZiBIV19NT1VTRV9BQ0NFTAorICAgICAgICBpZiAocy0+ZHMtPm1v dXNlX3NldCkKKyAgICAgICAgICAgIGNhcHMgfD0gU1ZHQV9DQVBfQ1VSU09SIHwgU1ZHQV9DQVBf Q1VSU09SX0JZUEFTU18yIHwKKyAgICAgICAgICAgICAgICAgICAgU1ZHQV9DQVBfQ1VSU09SX0JZ UEFTUzsKKyNlbmRpZgorICAgICAgICByZXR1cm4gY2FwczsKKworICAgIGNhc2UgU1ZHQV9SRUdf TUVNX1NUQVJUOgorICAgICAgICByZXR1cm4gU1ZHQV9NRU1fQkFTRSArIHMtPnZyYW1fc2l6ZSAt IFNWR0FfRklGT19TSVpFOworCisgICAgY2FzZSBTVkdBX1JFR19NRU1fU0laRToKKyAgICAgICAg cmV0dXJuIFNWR0FfRklGT19TSVpFOworCisgICAgY2FzZSBTVkdBX1JFR19DT05GSUdfRE9ORToK KyAgICAgICAgcmV0dXJuIHMtPmNvbmZpZzsKKworICAgIGNhc2UgU1ZHQV9SRUdfU1lOQzoKKyAg ICBjYXNlIFNWR0FfUkVHX0JVU1k6CisgICAgICAgIHJldHVybiBzLT5zeW5jaW5nOworCisgICAg Y2FzZSBTVkdBX1JFR19HVUVTVF9JRDoKKyAgICAgICAgcmV0dXJuIHMtPmd1ZXN0OworCisgICAg Y2FzZSBTVkdBX1JFR19DVVJTT1JfSUQ6CisgICAgICAgIHJldHVybiBzLT5jdXJzb3IuaWQ7CisK KyAgICBjYXNlIFNWR0FfUkVHX0NVUlNPUl9YOgorICAgICAgICByZXR1cm4gcy0+Y3Vyc29yLng7 CisKKyAgICBjYXNlIFNWR0FfUkVHX0NVUlNPUl9ZOgorICAgICAgICByZXR1cm4gcy0+Y3Vyc29y Lng7CisKKyAgICBjYXNlIFNWR0FfUkVHX0NVUlNPUl9PTjoKKyAgICAgICAgcmV0dXJuIHMtPmN1 cnNvci5vbjsKKworICAgIGNhc2UgU1ZHQV9SRUdfSE9TVF9CSVRTX1BFUl9QSVhFTDoKKyAgICAg ICAgcmV0dXJuIChzLT5kZXB0aCArIDcpICYgfjc7CisKKyAgICBjYXNlIFNWR0FfUkVHX1NDUkFU Q0hfU0laRToKKyAgICAgICAgcmV0dXJuIHMtPnNjcmF0Y2hfc2l6ZTsKKworICAgIGNhc2UgU1ZH QV9SRUdfTUVNX1JFR1M6CisgICAgY2FzZSBTVkdBX1JFR19OVU1fRElTUExBWVM6CisgICAgY2Fz ZSBTVkdBX1JFR19QSVRDSExPQ0s6CisgICAgY2FzZSBTVkdBX1BBTEVUVEVfQkFTRSAuLi4gU1ZH QV9QQUxFVFRFX0VORDoKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBkZWZhdWx0OgorICAgICAg ICBpZiAocy0+aW5kZXggPj0gU1ZHQV9TQ1JBVENIX0JBU0UgJiYKKyAgICAgICAgICAgICAgICBz LT5pbmRleCA8IFNWR0FfU0NSQVRDSF9CQVNFICsgcy0+c2NyYXRjaF9zaXplKQorICAgICAgICAg ICAgcmV0dXJuIHMtPnNjcmF0Y2hbcy0+aW5kZXggLSBTVkdBX1NDUkFUQ0hfQkFTRV07CisgICAg ICAgIHByaW50ZigiJXM6IEJhZCByZWdpc3RlciAlMDJ4XG4iLCBfX0ZVTkNUSU9OX18sIHMtPmlu ZGV4KTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdm1zdmdhX3Zh bHVlX3dyaXRlKHZvaWQgKm9wYXF1ZSwgdWludDMyX3QgYWRkcmVzcywgdWludDMyX3QgdmFsdWUp Cit7CisgICAgc3RydWN0IHZtc3ZnYV9zdGF0ZV9zICpzID0gKHN0cnVjdCB2bXN2Z2Ffc3RhdGVf cyAqKSBvcGFxdWU7CisgICAgc3dpdGNoIChzLT5pbmRleCkgeworICAgIGNhc2UgU1ZHQV9SRUdf SUQ6CisgICAgICAgIGlmICh2YWx1ZSA9PSBTVkdBX0lEXzIgfHwgdmFsdWUgPT0gU1ZHQV9JRF8x IHx8IHZhbHVlID09IFNWR0FfSURfMCkKKyAgICAgICAgICAgIHMtPnN2Z2FpZCA9IHZhbHVlOwor ICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1ZHQV9SRUdfRU5BQkxFOgorICAgICAgICBzLT5l bmFibGUgPSBzLT5jb25maWcgPSB2YWx1ZSAmIHMtPmNvbmZpZzsKKyAgICAgICAgcy0+d2lkdGgg PSAtMTsKKyAgICAgICAgcy0+aGVpZ2h0ID0gLTE7CisgICAgICAgIHMtPmludmFsaWRhdGVkID0g MTsKKyNpZmRlZiBFTUJFRF9TVERWR0EKKyAgICAgICAgcy0+aW52YWxpZGF0ZShvcGFxdWUpOwor I2VuZGlmCisgICAgICAgIGlmIChzLT5lbmFibGUpCisgICAgICAgICAgICBzLT5mYl9zaXplID0g KChzLT5kZXB0aCArIDcpID4+IDMpICogcy0+bmV3X3dpZHRoICogcy0+bmV3X2hlaWdodDsKKyAg ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNWR0FfUkVHX1dJRFRIOgorICAgICAgICBzLT5uZXdf d2lkdGggPSB2YWx1ZTsKKyAgICAgICAgcy0+aW52YWxpZGF0ZWQgPSAxOworICAgICAgICBicmVh azsKKworICAgIGNhc2UgU1ZHQV9SRUdfSEVJR0hUOgorICAgICAgICBzLT5uZXdfaGVpZ2h0ID0g dmFsdWU7CisgICAgICAgIHMtPmludmFsaWRhdGVkID0gMTsKKyAgICAgICAgYnJlYWs7CisKKyAg ICBjYXNlIFNWR0FfUkVHX0RFUFRIOgorICAgIGNhc2UgU1ZHQV9SRUdfQklUU19QRVJfUElYRUw6 CisgICAgICAgIGlmICh2YWx1ZSAhPSBzLT5kZXB0aCkgeworICAgICAgICAgICAgcHJpbnRmKCIl czogQmFkIGNvbG91ciBkZXB0aDogJWkgYml0c1xuIiwgX19GVU5DVElPTl9fLCB2YWx1ZSk7Cisg ICAgICAgICAgICBzLT5jb25maWcgPSAwOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisg ICAgY2FzZSBTVkdBX1JFR19DT05GSUdfRE9ORToKKyAgICAgICAgaWYgKHZhbHVlKSB7CisgICAg ICAgICAgICBzLT5maWZvID0gKHVpbnQzMl90ICopICZzLT52cmFtW3MtPnZyYW1fc2l6ZSAtIFNW R0FfRklGT19TSVpFXTsKKyAgICAgICAgICAgIC8qIENoZWNrIHJhbmdlIGFuZCBhbGlnbm1lbnQu ICAqLworICAgICAgICAgICAgaWYgKChzLT5jbWQtPm1pbiB8IHMtPmNtZC0+bWF4IHwKKyAgICAg ICAgICAgICAgICAgICAgICAgIHMtPmNtZC0+bmV4dF9jbWQgfCBzLT5jbWQtPnN0b3ApICYgMykK KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChzLT5jbWQtPm1pbiA8ICh1 aW50OF90ICopIHMtPmNtZC0+ZmlmbyAtICh1aW50OF90ICopIHMtPmZpZm8pCisgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAocy0+Y21kLT5tYXggPiBTVkdBX0ZJRk9fU0la RSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChzLT5jbWQtPm1heCA8 IHMtPmNtZC0+bWluICsgMTAgKiAxMDI0KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICB9CisgICAgICAgIHMtPmNvbmZpZyA9IHZhbHVlOworICAgICAgICBicmVhazsKKworICAgIGNh c2UgU1ZHQV9SRUdfU1lOQzoKKyAgICAgICAgcy0+c3luY2luZyA9IDE7CisgICAgICAgIHZtc3Zn YV9maWZvX3J1bihzKTsgLyogT3Igc2hvdWxkIHdlIGp1c3Qgd2FpdCBmb3IgdXBkYXRlX2Rpc3Bs YXk/ICovCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTVkdBX1JFR19HVUVTVF9JRDoKKyAg ICAgICAgcy0+Z3Vlc3QgPSB2YWx1ZTsKKyNpZmRlZiBWRVJCT1NFCisgICAgICAgIGlmICh2YWx1 ZSA+PSBHVUVTVF9PU19CQVNFICYmIHZhbHVlIDwgR1VFU1RfT1NfQkFTRSArCisgICAgICAgICAg ICAgICAgc2l6ZW9mKHZtc3ZnYV9ndWVzdF9pZCkgLyBzaXplb2YoKnZtc3ZnYV9ndWVzdF9pZCkp CisgICAgICAgICAgICBwcmludGYoIiVzOiBndWVzdCBydW5zICVzLlxuIiwgX19GVU5DVElPTl9f LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtc3ZnYV9ndWVzdF9pZFt2YWx1ZSAtIEdV RVNUX09TX0JBU0VdKTsKKyNlbmRpZgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1ZHQV9S RUdfQ1VSU09SX0lEOgorICAgICAgICBzLT5jdXJzb3IuaWQgPSB2YWx1ZTsKKyAgICAgICAgYnJl YWs7CisKKyAgICBjYXNlIFNWR0FfUkVHX0NVUlNPUl9YOgorICAgICAgICBzLT5jdXJzb3IueCA9 IHZhbHVlOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1ZHQV9SRUdfQ1VSU09SX1k6Cisg ICAgICAgIHMtPmN1cnNvci55ID0gdmFsdWU7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBT VkdBX1JFR19DVVJTT1JfT046CisgICAgICAgIHMtPmN1cnNvci5vbiB8PSAodmFsdWUgPT0gU1ZH QV9DVVJTT1JfT05fU0hPVyk7CisgICAgICAgIHMtPmN1cnNvci5vbiAmPSAodmFsdWUgIT0gU1ZH QV9DVVJTT1JfT05fSElERSk7CisjaWZkZWYgSFdfTU9VU0VfQUNDRUwKKyAgICAgICAgaWYgKHMt PmRzLT5tb3VzZV9zZXQgJiYgdmFsdWUgPD0gU1ZHQV9DVVJTT1JfT05fU0hPVykKKyAgICAgICAg ICAgIHMtPmRzLT5tb3VzZV9zZXQocy0+Y3Vyc29yLngsIHMtPmN1cnNvci55LCBzLT5jdXJzb3Iu b24pOworI2VuZGlmCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTVkdBX1JFR19NRU1fUkVH UzoKKyAgICBjYXNlIFNWR0FfUkVHX05VTV9ESVNQTEFZUzoKKyAgICBjYXNlIFNWR0FfUkVHX1BJ VENITE9DSzoKKyAgICBjYXNlIFNWR0FfUEFMRVRURV9CQVNFIC4uLiBTVkdBX1BBTEVUVEVfRU5E OgorICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChzLT5pbmRleCA+ PSBTVkdBX1NDUkFUQ0hfQkFTRSAmJgorICAgICAgICAgICAgICAgIHMtPmluZGV4IDwgU1ZHQV9T Q1JBVENIX0JBU0UgKyBzLT5zY3JhdGNoX3NpemUpIHsKKyAgICAgICAgICAgIHMtPnNjcmF0Y2hb cy0+aW5kZXggLSBTVkdBX1NDUkFUQ0hfQkFTRV0gPSB2YWx1ZTsKKyAgICAgICAgICAgIGJyZWFr OworICAgICAgICB9CisgICAgICAgIHByaW50ZigiJXM6IEJhZCByZWdpc3RlciAlMDJ4XG4iLCBf X0ZVTkNUSU9OX18sIHMtPmluZGV4KTsKKyAgICB9Cit9CisKK3N0YXRpYyB1aW50MzJfdCB2bXN2 Z2FfYmlvc19yZWFkKHZvaWQgKm9wYXF1ZSwgdWludDMyX3QgYWRkcmVzcykKK3sKKyAgICBwcmlu dGYoIiVzOiB3aGF0IGFyZSB3ZSBzdXBwb3NlZCB0byByZXR1cm4/XG4iLCBfX0ZVTkNUSU9OX18p OworICAgIHJldHVybiAweGNhZmU7Cit9CisKK3N0YXRpYyB2b2lkIHZtc3ZnYV9iaW9zX3dyaXRl KHZvaWQgKm9wYXF1ZSwgdWludDMyX3QgYWRkcmVzcywgdWludDMyX3QgZGF0YSkKK3sKKyAgICBw cmludGYoIiVzOiB3aGF0IGFyZSB3ZSBzdXBwb3NlZCB0byBkbyB3aXRoICglMDh4KT9cbiIsCisg ICAgICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgZGF0YSk7Cit9CisKK3N0YXRpYyBpbmxp bmUgdm9pZCB2bXN2Z2Ffc2l6ZShzdHJ1Y3Qgdm1zdmdhX3N0YXRlX3MgKnMpCit7CisgICAgaWYg KHMtPm5ld193aWR0aCAhPSBzLT53aWR0aCB8fCBzLT5uZXdfaGVpZ2h0ICE9IHMtPmhlaWdodCkg eworICAgICAgICBzLT53aWR0aCA9IHMtPm5ld193aWR0aDsKKyAgICAgICAgcy0+aGVpZ2h0ID0g cy0+bmV3X2hlaWdodDsKKyAgICAgICAgZHB5X3Jlc2l6ZShzLT5kcywgcy0+d2lkdGgsIHMtPmhl aWdodCk7CisgICAgICAgIHMtPmludmFsaWRhdGVkID0gMTsKKyAgICB9Cit9CisKK3N0YXRpYyB2 b2lkIHZtc3ZnYV91cGRhdGVfZGlzcGxheSh2b2lkICpvcGFxdWUpCit7CisgICAgc3RydWN0IHZt c3ZnYV9zdGF0ZV9zICpzID0gKHN0cnVjdCB2bXN2Z2Ffc3RhdGVfcyAqKSBvcGFxdWU7CisgICAg aWYgKCFzLT5lbmFibGUpIHsKKyNpZmRlZiBFTUJFRF9TVERWR0EKKyAgICAgICAgcy0+dXBkYXRl KG9wYXF1ZSk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZtc3ZnYV9z aXplKHMpOworCisgICAgdm1zdmdhX2ZpZm9fcnVuKHMpOworICAgIHZtc3ZnYV91cGRhdGVfcmVj dF9mbHVzaChzKTsKKworICAgIC8qCisgICAgICogSXMgaXQgbW9yZSBlZmZpY2llbnQgdG8gbG9v ayBhdCB2cmFtIFZHQS1kaXJ0eSBiaXRzIG9yIHdhaXQKKyAgICAgKiBmb3IgdGhlIGRyaXZlciB0 byBpc3N1ZSBTVkdBX0NNRF9VUERBVEU/CisgICAgICovCisgICAgaWYgKHMtPmludmFsaWRhdGVk KSB7CisgICAgICAgIHMtPmludmFsaWRhdGVkID0gMDsKKyAgICAgICAgdm1zdmdhX3VwZGF0ZV9z Y3JlZW4ocyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB2bXN2Z2FfcmVzZXQoc3RydWN0IHZt c3ZnYV9zdGF0ZV9zICpzKQoreworICAgIHMtPmluZGV4ID0gMDsKKyAgICBzLT5lbmFibGUgPSAw OworICAgIHMtPmNvbmZpZyA9IDA7CisgICAgcy0+d2lkdGggPSAtMTsKKyAgICBzLT5oZWlnaHQg PSAtMTsKKyAgICBzLT5zdmdhaWQgPSBTVkdBX0lEOworICAgIHMtPmRlcHRoID0gcy0+ZHMtPmRl cHRoID8gcy0+ZHMtPmRlcHRoIDogMjQ7CisgICAgcy0+YnlwcCA9IChzLT5kZXB0aCArIDcpID4+ IDM7CisgICAgcy0+Y3Vyc29yLm9uID0gMDsKKyAgICBzLT5yZWRyYXdfZmlmb19maXJzdCA9IDA7 CisgICAgcy0+cmVkcmF3X2ZpZm9fbGFzdCA9IDA7CisgICAgc3dpdGNoIChzLT5kZXB0aCkgewor ICAgIGNhc2UgODoKKyAgICAgICAgcy0+d3JlZCAgID0gMHgwMDAwMDAwNzsKKyAgICAgICAgcy0+ d2dyZWVuID0gMHgwMDAwMDAzODsKKyAgICAgICAgcy0+d2JsdWUgID0gMHgwMDAwMDBjMDsKKyAg ICAgICAgYnJlYWs7CisgICAgY2FzZSAxNToKKyAgICAgICAgcy0+d3JlZCAgID0gMHgwMDAwMDAx ZjsKKyAgICAgICAgcy0+d2dyZWVuID0gMHgwMDAwMDNlMDsKKyAgICAgICAgcy0+d2JsdWUgID0g MHgwMDAwN2MwMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAxNjoKKyAgICAgICAgcy0+d3Jl ZCAgID0gMHgwMDAwMDAxZjsKKyAgICAgICAgcy0+d2dyZWVuID0gMHgwMDAwMDdlMDsKKyAgICAg ICAgcy0+d2JsdWUgID0gMHgwMDAwZjgwMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAyNDoK KyAgICAgICAgcy0+d3JlZCAgID0gMHgwMDAwMDBmZjsKKyAgICAgICAgcy0+d2dyZWVuID0gMHgw MDAwZmYwMDsKKyAgICAgICAgcy0+d2JsdWUgID0gMHgwMGZmMDAwMDsKKyAgICAgICAgYnJlYWs7 CisgICAgY2FzZSAzMjoKKyAgICAgICAgcy0+d3JlZCAgID0gMHgwMDAwMDBmZjsKKyAgICAgICAg cy0+d2dyZWVuID0gMHgwMDAwZmYwMDsKKyAgICAgICAgcy0+d2JsdWUgID0gMHgwMGZmMDAwMDsK KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHMtPnN5bmNpbmcgPSAwOworfQorCitzdGF0aWMg dm9pZCB2bXN2Z2FfaW52YWxpZGF0ZV9kaXNwbGF5KHZvaWQgKm9wYXF1ZSkKK3sKKyAgICBzdHJ1 Y3Qgdm1zdmdhX3N0YXRlX3MgKnMgPSAoc3RydWN0IHZtc3ZnYV9zdGF0ZV9zICopIG9wYXF1ZTsK KyAgICBpZiAoIXMtPmVuYWJsZSkgeworI2lmZGVmIEVNQkVEX1NURFZHQQorICAgICAgICBzLT5p bnZhbGlkYXRlKG9wYXF1ZSk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg IHMtPmludmFsaWRhdGVkID0gMTsKK30KKworc3RhdGljIHZvaWQgdm1zdmdhX3NjcmVlbl9kdW1w KHZvaWQgKm9wYXF1ZSwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisgICAgc3RydWN0IHZtc3Zn YV9zdGF0ZV9zICpzID0gKHN0cnVjdCB2bXN2Z2Ffc3RhdGVfcyAqKSBvcGFxdWU7CisgICAgaWYg KCFzLT5lbmFibGUpIHsKKyNpZmRlZiBFTUJFRF9TVERWR0EKKyAgICAgICAgcy0+c2NyZWVuX2R1 bXAob3BhcXVlLCBmaWxlbmFtZSk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor ICAgIC8qIFRPRE8gKi8KK30KKworI2lmZGVmIERJUkVDVF9WUkFNCitzdGF0aWMgdWludDMyX3Qg dm1zdmdhX3ZyYW1fcmVhZGIodm9pZCAqb3BhcXVlLCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkcikK K3sKKyAgICBzdHJ1Y3Qgdm1zdmdhX3N0YXRlX3MgKnMgPSAoc3RydWN0IHZtc3ZnYV9zdGF0ZV9z ICopIG9wYXF1ZTsKKyAgICBhZGRyIC09IFNWR0FfTUVNX0JBU0U7CisgICAgaWYgKGFkZHIgPCBz LT5mYl9zaXplKQorICAgICAgICByZXR1cm4gKih1aW50OF90ICopIChzLT5kcy0+ZGF0YSArIGFk ZHIpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuICoodWludDhfdCAqKSAocy0+dnJhbSArIGFk ZHIpOworfQorCitzdGF0aWMgdWludDMyX3Qgdm1zdmdhX3ZyYW1fcmVhZHcodm9pZCAqb3BhcXVl LCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkcikKK3sKKyAgICBzdHJ1Y3Qgdm1zdmdhX3N0YXRlX3Mg KnMgPSAoc3RydWN0IHZtc3ZnYV9zdGF0ZV9zICopIG9wYXF1ZTsKKyAgICBhZGRyIC09IFNWR0Ff TUVNX0JBU0U7CisgICAgaWYgKGFkZHIgPCBzLT5mYl9zaXplKQorICAgICAgICByZXR1cm4gKih1 aW50MTZfdCAqKSAocy0+ZHMtPmRhdGEgKyBhZGRyKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVy biAqKHVpbnQxNl90ICopIChzLT52cmFtICsgYWRkcik7Cit9CisKK3N0YXRpYyB1aW50MzJfdCB2 bXN2Z2FfdnJhbV9yZWFkbCh2b2lkICpvcGFxdWUsIHRhcmdldF9waHlzX2FkZHJfdCBhZGRyKQor eworICAgIHN0cnVjdCB2bXN2Z2Ffc3RhdGVfcyAqcyA9IChzdHJ1Y3Qgdm1zdmdhX3N0YXRlX3Mg Kikgb3BhcXVlOworICAgIGFkZHIgLT0gU1ZHQV9NRU1fQkFTRTsKKyAgICBpZiAoYWRkciA8IHMt PmZiX3NpemUpCisgICAgICAgIHJldHVybiAqKHVpbnQzMl90ICopIChzLT5kcy0+ZGF0YSArIGFk ZHIpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuICoodWludDMyX3QgKikgKHMtPnZyYW0gKyBh ZGRyKTsKK30KKworc3RhdGljIHZvaWQgdm1zdmdhX3ZyYW1fd3JpdGViKHZvaWQgKm9wYXF1ZSwg dGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIsCisgICAgICAgICAgICAgICAgdWludDMyX3QgdmFsdWUp Cit7CisgICAgc3RydWN0IHZtc3ZnYV9zdGF0ZV9zICpzID0gKHN0cnVjdCB2bXN2Z2Ffc3RhdGVf cyAqKSBvcGFxdWU7CisgICAgYWRkciAtPSBTVkdBX01FTV9CQVNFOworICAgIGlmIChhZGRyIDwg cy0+ZmJfc2l6ZSkKKyAgICAgICAgKih1aW50OF90ICopIChzLT5kcy0+ZGF0YSArIGFkZHIpID0g dmFsdWU7CisgICAgZWxzZQorICAgICAgICAqKHVpbnQ4X3QgKikgKHMtPnZyYW0gKyBhZGRyKSA9 IHZhbHVlOworfQorCitzdGF0aWMgdm9pZCB2bXN2Z2FfdnJhbV93cml0ZXcodm9pZCAqb3BhcXVl LCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkciwKKyAgICAgICAgICAgICAgICB1aW50MzJfdCB2YWx1 ZSkKK3sKKyAgICBzdHJ1Y3Qgdm1zdmdhX3N0YXRlX3MgKnMgPSAoc3RydWN0IHZtc3ZnYV9zdGF0 ZV9zICopIG9wYXF1ZTsKKyAgICBhZGRyIC09IFNWR0FfTUVNX0JBU0U7CisgICAgaWYgKGFkZHIg PCBzLT5mYl9zaXplKQorICAgICAgICAqKHVpbnQxNl90ICopIChzLT5kcy0+ZGF0YSArIGFkZHIp ID0gdmFsdWU7CisgICAgZWxzZQorICAgICAgICAqKHVpbnQxNl90ICopIChzLT52cmFtICsgYWRk cikgPSB2YWx1ZTsKK30KKworc3RhdGljIHZvaWQgdm1zdmdhX3ZyYW1fd3JpdGVsKHZvaWQgKm9w YXF1ZSwgdGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIsCisgICAgICAgICAgICAgICAgdWludDMyX3Qg dmFsdWUpCit7CisgICAgc3RydWN0IHZtc3ZnYV9zdGF0ZV9zICpzID0gKHN0cnVjdCB2bXN2Z2Ff c3RhdGVfcyAqKSBvcGFxdWU7CisgICAgYWRkciAtPSBTVkdBX01FTV9CQVNFOworICAgIGlmIChh ZGRyIDwgcy0+ZmJfc2l6ZSkKKyAgICAgICAgKih1aW50MzJfdCAqKSAocy0+ZHMtPmRhdGEgKyBh ZGRyKSA9IHZhbHVlOworICAgIGVsc2UKKyAgICAgICAgKih1aW50MzJfdCAqKSAocy0+dnJhbSAr IGFkZHIpID0gdmFsdWU7Cit9CisKK3N0YXRpYyBDUFVSZWFkTWVtb3J5RnVuYyAqdm1zdmdhX3Zy YW1fcmVhZFtdID0geworICAgIHZtc3ZnYV92cmFtX3JlYWRiLAorICAgIHZtc3ZnYV92cmFtX3Jl YWR3LAorICAgIHZtc3ZnYV92cmFtX3JlYWRsLAorfTsKKworc3RhdGljIENQVVdyaXRlTWVtb3J5 RnVuYyAqdm1zdmdhX3ZyYW1fd3JpdGVbXSA9IHsKKyAgICB2bXN2Z2FfdnJhbV93cml0ZWIsCisg ICAgdm1zdmdhX3ZyYW1fd3JpdGV3LAorICAgIHZtc3ZnYV92cmFtX3dyaXRlbCwKK307CisjZW5k aWYKKworc3RhdGljIHZvaWQgdm1zdmdhX3NhdmUoc3RydWN0IHZtc3ZnYV9zdGF0ZV9zICpzLCBR RU1VRmlsZSAqZikKK3sKKyAgICBxZW11X3B1dF9iZTMycyhmLCAmcy0+ZGVwdGgpOworICAgIHFl bXVfcHV0X2JlMzJzKGYsICZzLT5lbmFibGUpOworICAgIHFlbXVfcHV0X2JlMzJzKGYsICZzLT5j b25maWcpOworICAgIHFlbXVfcHV0X2JlMzJzKGYsICZzLT5jdXJzb3IuaWQpOworICAgIHFlbXVf cHV0X2JlMzJzKGYsICZzLT5jdXJzb3IueCk7CisgICAgcWVtdV9wdXRfYmUzMnMoZiwgJnMtPmN1 cnNvci55KTsKKyAgICBxZW11X3B1dF9iZTMycyhmLCAmcy0+Y3Vyc29yLm9uKTsKKyAgICBxZW11 X3B1dF9iZTMycyhmLCAmcy0+aW5kZXgpOworICAgIHFlbXVfcHV0X2J1ZmZlcihmLCAodWludDhf dCAqKSBzLT5zY3JhdGNoLCBzLT5zY3JhdGNoX3NpemUgKiA0KTsKKyAgICBxZW11X3B1dF9iZTMy cyhmLCAmcy0+bmV3X3dpZHRoKTsKKyAgICBxZW11X3B1dF9iZTMycyhmLCAmcy0+bmV3X2hlaWdo dCk7CisgICAgcWVtdV9wdXRfYmUzMnMoZiwgJnMtPmd1ZXN0KTsKKyAgICBxZW11X3B1dF9iZTMy cyhmLCAmcy0+c3ZnYWlkKTsKKyAgICBxZW11X3B1dF9iZTMycyhmLCAmcy0+c3luY2luZyk7Cisg ICAgcWVtdV9wdXRfYmUzMnMoZiwgJnMtPmZiX3NpemUpOworfQorCitzdGF0aWMgaW50IHZtc3Zn YV9sb2FkKHN0cnVjdCB2bXN2Z2Ffc3RhdGVfcyAqcywgUUVNVUZpbGUgKmYpCit7CisgICAgaW50 IGRlcHRoOworICAgIHFlbXVfZ2V0X2JlMzJzKGYsICZkZXB0aCk7CisgICAgcWVtdV9nZXRfYmUz MnMoZiwgJnMtPmVuYWJsZSk7CisgICAgcWVtdV9nZXRfYmUzMnMoZiwgJnMtPmNvbmZpZyk7Cisg ICAgcWVtdV9nZXRfYmUzMnMoZiwgJnMtPmN1cnNvci5pZCk7CisgICAgcWVtdV9nZXRfYmUzMnMo ZiwgJnMtPmN1cnNvci54KTsKKyAgICBxZW11X2dldF9iZTMycyhmLCAmcy0+Y3Vyc29yLnkpOwor ICAgIHFlbXVfZ2V0X2JlMzJzKGYsICZzLT5jdXJzb3Iub24pOworICAgIHFlbXVfZ2V0X2JlMzJz KGYsICZzLT5pbmRleCk7CisgICAgcWVtdV9nZXRfYnVmZmVyKGYsICh1aW50OF90ICopIHMtPnNj cmF0Y2gsIHMtPnNjcmF0Y2hfc2l6ZSAqIDQpOworICAgIHFlbXVfZ2V0X2JlMzJzKGYsICZzLT5u ZXdfd2lkdGgpOworICAgIHFlbXVfZ2V0X2JlMzJzKGYsICZzLT5uZXdfaGVpZ2h0KTsKKyAgICBx ZW11X2dldF9iZTMycyhmLCAmcy0+Z3Vlc3QpOworICAgIHFlbXVfZ2V0X2JlMzJzKGYsICZzLT5z dmdhaWQpOworICAgIHFlbXVfZ2V0X2JlMzJzKGYsICZzLT5zeW5jaW5nKTsKKyAgICBxZW11X2dl dF9iZTMycyhmLCAmcy0+ZmJfc2l6ZSk7CisKKyAgICBpZiAocy0+ZW5hYmxlICYmIGRlcHRoICE9 IHMtPmRlcHRoKSB7CisgICAgICAgIHByaW50ZigiJXM6IG5lZWQgY29sb3VyIGRlcHRoIG9mICVp IGJpdHMgdG8gcmVzdW1lIG9wZXJhdGlvbi5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBf X0ZVTkNUSU9OX18sIGRlcHRoKTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorCisg ICAgcy0+aW52YWxpZGF0ZWQgPSAxOworICAgIGlmIChzLT5jb25maWcpCisgICAgICAgIHMtPmZp Zm8gPSAodWludDMyX3QgKikgJnMtPnZyYW1bcy0+dnJhbV9zaXplIC0gU1ZHQV9GSUZPX1NJWkVd OworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZtc3ZnYV9pbml0KHN0cnVjdCB2 bXN2Z2Ffc3RhdGVfcyAqcywgRGlzcGxheVN0YXRlICpkcywKKyAgICAgICAgICAgICAgICB1aW50 OF90ICp2Z2FfcmFtX2Jhc2UsIHVuc2lnbmVkIGxvbmcgdmdhX3JhbV9vZmZzZXQsCisgICAgICAg ICAgICAgICAgaW50IHZnYV9yYW1fc2l6ZSkKK3sKKyAgICBpbnQgaW9tZW10eXBlOworICAgIHMt PmRzID0gZHM7CisgICAgcy0+dnJhbSA9IHZnYV9yYW1fYmFzZTsKKyAgICBzLT52cmFtX3NpemUg PSB2Z2FfcmFtX3NpemU7CisKKyAgICBzLT5zY3JhdGNoX3NpemUgPSBTVkdBX1NDUkFUQ0hfU0la RTsKKyAgICBzLT5zY3JhdGNoID0gKHVpbnQzMl90ICopIHFlbXVfbWFsbG9jKHMtPnNjcmF0Y2hf c2l6ZSAqIDQpOworCisgICAgdm1zdmdhX3Jlc2V0KHMpOworCisjaWZkZWYgRElSRUNUX1ZSQU0K KyAgICBpb21lbXR5cGUgPSBjcHVfcmVnaXN0ZXJfaW9fbWVtb3J5KDAsIHZtc3ZnYV92cmFtX3Jl YWQsIAorICAgICAgICAgICAgICAgICAgICB2bXN2Z2FfdnJhbV93cml0ZSwgcyk7CisjZWxzZQor ICAgIGlvbWVtdHlwZSA9IHZnYV9yYW1fb2Zmc2V0IHwgSU9fTUVNX1JBTTsKKyNlbmRpZgorICAg IGNwdV9yZWdpc3Rlcl9waHlzaWNhbF9tZW1vcnkoU1ZHQV9NRU1fQkFTRSwgdmdhX3JhbV9zaXpl LAorICAgICAgICAgICAgICAgICAgICBpb21lbXR5cGUpOworCisgICAgcmVnaXN0ZXJfaW9wb3J0 X3JlYWQoU1ZHQV9JT19CQVNFICsgU1ZHQV9JT19NVUwgKiBTVkdBX0lOREVYX1BPUlQsCisgICAg ICAgICAgICAgICAgICAgIDEsIDQsIHZtc3ZnYV9pbmRleF9yZWFkLCBzKTsKKyAgICByZWdpc3Rl cl9pb3BvcnRfd3JpdGUoU1ZHQV9JT19CQVNFICsgU1ZHQV9JT19NVUwgKiBTVkdBX0lOREVYX1BP UlQsCisgICAgICAgICAgICAgICAgICAgIDEsIDQsIHZtc3ZnYV9pbmRleF93cml0ZSwgcyk7Cisg ICAgcmVnaXN0ZXJfaW9wb3J0X3JlYWQoU1ZHQV9JT19CQVNFICsgU1ZHQV9JT19NVUwgKiBTVkdB X1ZBTFVFX1BPUlQsCisgICAgICAgICAgICAgICAgICAgIDEsIDQsIHZtc3ZnYV92YWx1ZV9yZWFk LCBzKTsKKyAgICByZWdpc3Rlcl9pb3BvcnRfd3JpdGUoU1ZHQV9JT19CQVNFICsgU1ZHQV9JT19N VUwgKiBTVkdBX1ZBTFVFX1BPUlQsCisgICAgICAgICAgICAgICAgICAgIDEsIDQsIHZtc3ZnYV92 YWx1ZV93cml0ZSwgcyk7CisgICAgcmVnaXN0ZXJfaW9wb3J0X3JlYWQoU1ZHQV9JT19CQVNFICsg U1ZHQV9JT19NVUwgKiBTVkdBX0JJT1NfUE9SVCwKKyAgICAgICAgICAgICAgICAgICAgMSwgNCwg dm1zdmdhX2Jpb3NfcmVhZCwgcyk7CisgICAgcmVnaXN0ZXJfaW9wb3J0X3dyaXRlKFNWR0FfSU9f QkFTRSArIFNWR0FfSU9fTVVMICogU1ZHQV9CSU9TX1BPUlQsCisgICAgICAgICAgICAgICAgICAg IDEsIDQsIHZtc3ZnYV9iaW9zX3dyaXRlLCBzKTsKKworICAgIGdyYXBoaWNfY29uc29sZV9pbml0 KGRzLCB2bXN2Z2FfdXBkYXRlX2Rpc3BsYXksCisgICAgICAgICAgICAgICAgICAgIHZtc3ZnYV9p bnZhbGlkYXRlX2Rpc3BsYXksIHZtc3ZnYV9zY3JlZW5fZHVtcCwgcyk7CisKKyNpZmRlZiBFTUJF RF9TVERWR0EKKyAgICB2Z2FfY29tbW9uX2luaXQoKFZHQVN0YXRlICopIHMsIGRzLAorICAgICAg ICAgICAgICAgICAgICB2Z2FfcmFtX2Jhc2UsIHZnYV9yYW1fb2Zmc2V0LCB2Z2FfcmFtX3NpemUp OworICAgIHZnYV9pbml0KChWR0FTdGF0ZSAqKSBzKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9p ZCBwY2lfdm1zdmdhX3NhdmUoUUVNVUZpbGUgKmYsIHZvaWQgKm9wYXF1ZSkKK3sKKyAgICBzdHJ1 Y3QgcGNpX3Ztc3ZnYV9zdGF0ZV9zICpzID0gKHN0cnVjdCBwY2lfdm1zdmdhX3N0YXRlX3MgKikg b3BhcXVlOworICAgIHBjaV9kZXZpY2Vfc2F2ZSgmcy0+Y2FyZCwgZik7CisgICAgdm1zdmdhX3Nh dmUoJnMtPmNoaXAsIGYpOworfQorCitzdGF0aWMgaW50IHBjaV92bXN2Z2FfbG9hZChRRU1VRmls ZSAqZiwgdm9pZCAqb3BhcXVlLCBpbnQgdmVyc2lvbl9pZCkKK3sKKyAgICBzdHJ1Y3QgcGNpX3Zt c3ZnYV9zdGF0ZV9zICpzID0gKHN0cnVjdCBwY2lfdm1zdmdhX3N0YXRlX3MgKikgb3BhcXVlOwor ICAgIGludCByZXQ7CisKKyAgICByZXQgPSBwY2lfZGV2aWNlX2xvYWQoJnMtPmNhcmQsIGYpOwor ICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgcmV0ID0gdm1zdmdh X2xvYWQoJnMtPmNoaXAsIGYpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4gcmV0 OworCisgICAgcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9WTVdBUkUJCTB4 MTVhZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZNV0FSRV9TVkdBMgkweDA0MDUKKyNkZWZpbmUg UENJX0RFVklDRV9JRF9WTVdBUkVfU1ZHQQkweDA3MTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9W TVdBUkVfTkVUCTB4MDcyMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZNV0FSRV9TQ1NJCTB4MDcz MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZNV0FSRV9JREUJMHgxNzI5CisjZGVmaW5lIFBDSV9D TEFTU19CQVNFX0RJU1BMQVkJCTB4MDMKKyNkZWZpbmUgUENJX0NMQVNTX1NVQl9WR0EJCTB4MDAK KyNkZWZpbmUgUENJX0NMQVNTX0hFQURFUlRZUEVfMDBoCTB4MDAKKwordm9pZCBwY2lfdm1zdmdh X2luaXQoUENJQnVzICpidXMsIERpc3BsYXlTdGF0ZSAqZHMsIHVpbnQ4X3QgKnZnYV9yYW1fYmFz ZSwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdmdhX3JhbV9vZmZzZXQsIGlu dCB2Z2FfcmFtX3NpemUpCit7CisgICAgc3RydWN0IHBjaV92bXN2Z2Ffc3RhdGVfcyAqczsKKwor ICAgIC8qIFNldHVwIFBDSSBjb25maWd1cmF0aW9uICovCisgICAgcyA9IChzdHJ1Y3QgcGNpX3Zt c3ZnYV9zdGF0ZV9zICopCisgICAgICAgIHBjaV9yZWdpc3Rlcl9kZXZpY2UoYnVzLCAiUUVNVXdh cmUgU1ZHQSIsCisgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBwY2lfdm1zdmdhX3N0YXRl X3MpLCAtMSwgMCwgMCk7CisgICAgcy0+Y2FyZC5jb25maWdbUENJX1ZFTkRPUl9JRF0JPSBQQ0lf VkVORE9SX0lEX1ZNV0FSRSAmIDB4ZmY7CisgICAgcy0+Y2FyZC5jb25maWdbUENJX1ZFTkRPUl9J RCArIDFdCT0gUENJX1ZFTkRPUl9JRF9WTVdBUkUgPj4gODsKKyAgICBzLT5jYXJkLmNvbmZpZ1tQ Q0lfREVWSUNFX0lEXQk9IFNWR0FfUENJX0RFVklDRV9JRCAmIDB4ZmY7CisgICAgcy0+Y2FyZC5j b25maWdbUENJX0RFVklDRV9JRCArIDFdCT0gU1ZHQV9QQ0lfREVWSUNFX0lEID4+IDg7CisgICAg cy0+Y2FyZC5jb25maWdbUENJX0NPTU1BTkRdCQk9IDB4MDc7CQkvKiBJL08gKyBNZW1vcnkgKi8K KyAgICBzLT5jYXJkLmNvbmZpZ1tQQ0lfQ0xBU1NfREVWSUNFXQk9IFBDSV9DTEFTU19TVUJfVkdB OworICAgIHMtPmNhcmQuY29uZmlnWzB4MGJdCQk9IFBDSV9DTEFTU19CQVNFX0RJU1BMQVk7Cisg ICAgcy0+Y2FyZC5jb25maWdbMHgwY10JCT0gMHgwODsJCS8qIENhY2hlIGxpbmUgc2l6ZSAqLwor ICAgIHMtPmNhcmQuY29uZmlnWzB4MGRdCQk9IDB4NDA7CQkvKiBMYXRlbmN5IHRpbWVyICovCisg ICAgcy0+Y2FyZC5jb25maWdbMHgwZV0JCT0gUENJX0NMQVNTX0hFQURFUlRZUEVfMDBoOworICAg IHMtPmNhcmQuY29uZmlnWzB4MTBdCQk9ICgoU1ZHQV9JT19CQVNFID4+ICAwKSAmIDB4ZmYpIHwg MTsKKyAgICBzLT5jYXJkLmNvbmZpZ1sweDExXQkJPSAgKFNWR0FfSU9fQkFTRSA+PiAgOCkgJiAw eGZmOworICAgIHMtPmNhcmQuY29uZmlnWzB4MTJdCQk9ICAoU1ZHQV9JT19CQVNFID4+IDE2KSAm IDB4ZmY7CisgICAgcy0+Y2FyZC5jb25maWdbMHgxM10JCT0gIChTVkdBX0lPX0JBU0UgPj4gMjQp ICYgMHhmZjsKKyAgICBzLT5jYXJkLmNvbmZpZ1sweDE4XQkJPSAoU1ZHQV9NRU1fQkFTRSA+PiAg MCkgJiAweGZmOworICAgIHMtPmNhcmQuY29uZmlnWzB4MTldCQk9IChTVkdBX01FTV9CQVNFID4+ ICA4KSAmIDB4ZmY7CisgICAgcy0+Y2FyZC5jb25maWdbMHgxYV0JCT0gKFNWR0FfTUVNX0JBU0Ug Pj4gMTYpICYgMHhmZjsKKyAgICBzLT5jYXJkLmNvbmZpZ1sweDFiXQkJPSAoU1ZHQV9NRU1fQkFT RSA+PiAyNCkgJiAweGZmOworICAgIHMtPmNhcmQuY29uZmlnWzB4MmNdCQk9IFBDSV9WRU5ET1Jf SURfVk1XQVJFICYgMHhmZjsKKyAgICBzLT5jYXJkLmNvbmZpZ1sweDJkXQkJPSBQQ0lfVkVORE9S X0lEX1ZNV0FSRSA+PiA4OworICAgIHMtPmNhcmQuY29uZmlnWzB4MmVdCQk9IFNWR0FfUENJX0RF VklDRV9JRCAmIDB4ZmY7CisgICAgcy0+Y2FyZC5jb25maWdbMHgyZl0JCT0gU1ZHQV9QQ0lfREVW SUNFX0lEID4+IDg7CisgICAgcy0+Y2FyZC5jb25maWdbMHgzY10JCT0gMHhmZjsJCS8qIEVuZCAq LworCisgICAgdm1zdmdhX2luaXQoJnMtPmNoaXAsIGRzLCB2Z2FfcmFtX2Jhc2UsIHZnYV9yYW1f b2Zmc2V0LCB2Z2FfcmFtX3NpemUpOworCisgICAgcmVnaXN0ZXJfc2F2ZXZtKCJ2bXdhcmVfdmdh IiwgMCwgMCwgcGNpX3Ztc3ZnYV9zYXZlLCBwY2lfdm1zdmdhX2xvYWQsIHMpOworfQpkaWZmIC0t Z2l0IGEvc2RsLmMgYi9zZGwuYwppbmRleCAwY2IyMjQxLi4zYzRmNjYyIDEwMDY0NAotLS0gYS9z ZGwuYworKysgYi9zZGwuYwpAQCAtNDQsNiArNDQsOSBAQCBzdGF0aWMgaW50IHdpZHRoLCBoZWln aHQ7CiBzdGF0aWMgU0RMX0N1cnNvciAqc2RsX2N1cnNvcl9ub3JtYWw7CiBzdGF0aWMgU0RMX0N1 cnNvciAqc2RsX2N1cnNvcl9oaWRkZW47CiBzdGF0aWMgaW50IGFic29sdXRlX2VuYWJsZWQgPSAw Oworc3RhdGljIGludCBndWVzdF9jdXJzb3IgPSAwOworc3RhdGljIGludCBndWVzdF94LCBndWVz dF95Oworc3RhdGljIFNETF9DdXJzb3IgKmd1ZXN0X3Nwcml0ZSA9IDA7CiAKIHN0YXRpYyB2b2lk IHNkbF91cGRhdGUoRGlzcGxheVN0YXRlICpkcywgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgp CiB7CkBAIC0yNDAsMTMgKzI0MywyMSBAQCBzdGF0aWMgdm9pZCBzZGxfc2hvd19jdXJzb3Iodm9p ZCkKIHsKICAgICBpZiAoIWtiZF9tb3VzZV9pc19hYnNvbHV0ZSgpKSB7CiAgICAgICAgIFNETF9T aG93Q3Vyc29yKDEpOwotICAgICAgICBTRExfU2V0Q3Vyc29yKHNkbF9jdXJzb3Jfbm9ybWFsKTsK KyAgICAgICAgaWYgKGd1ZXN0X2N1cnNvciAmJgorICAgICAgICAgICAgICAgIChndWlfZ3JhYiB8 fCBrYmRfbW91c2VfaXNfYWJzb2x1dGUoKSB8fCBhYnNvbHV0ZV9lbmFibGVkKSkKKyAgICAgICAg ICAgIFNETF9TZXRDdXJzb3IoZ3Vlc3Rfc3ByaXRlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg ICAgU0RMX1NldEN1cnNvcihzZGxfY3Vyc29yX25vcm1hbCk7CiAgICAgfQogfQogCiBzdGF0aWMg dm9pZCBzZGxfZ3JhYl9zdGFydCh2b2lkKQogewotICAgIHNkbF9oaWRlX2N1cnNvcigpOworICAg IGlmIChndWVzdF9jdXJzb3IpIHsKKyAgICAgICAgU0RMX1NldEN1cnNvcihndWVzdF9zcHJpdGUp OworICAgICAgICBTRExfV2FycE1vdXNlKGd1ZXN0X3gsIGd1ZXN0X3kpOworICAgIH0gZWxzZQor ICAgICAgICBzZGxfaGlkZV9jdXJzb3IoKTsKICAgICBTRExfV01fR3JhYklucHV0KFNETF9HUkFC X09OKTsKICAgICAvKiBkdW1teSByZWFkIHRvIGF2b2lkIG1vdmluZyB0aGUgbW91c2UgKi8KICAg ICBTRExfR2V0UmVsYXRpdmVNb3VzZVN0YXRlKE5VTEwsIE5VTEwpOwpAQCAtMjU3LDggKzI2OCw4 IEBAIHN0YXRpYyB2b2lkIHNkbF9ncmFiX3N0YXJ0KHZvaWQpCiBzdGF0aWMgdm9pZCBzZGxfZ3Jh Yl9lbmQodm9pZCkKIHsKICAgICBTRExfV01fR3JhYklucHV0KFNETF9HUkFCX09GRik7Ci0gICAg c2RsX3Nob3dfY3Vyc29yKCk7CiAgICAgZ3VpX2dyYWIgPSAwOworICAgIHNkbF9zaG93X2N1cnNv cigpOwogICAgIHNkbF91cGRhdGVfY2FwdGlvbigpOwogfQogCkBAIC0yODksNiArMzAwLDEyIEBA IHN0YXRpYyB2b2lkIHNkbF9zZW5kX21vdXNlX2V2ZW50KGludCBkeikKICAgICB9IGVsc2UgaWYg KGFic29sdXRlX2VuYWJsZWQpIHsKIAlzZGxfc2hvd19jdXJzb3IoKTsKIAlhYnNvbHV0ZV9lbmFi bGVkID0gMDsKKyAgICB9IGVsc2UgaWYgKGd1ZXN0X2N1cnNvcikgeworICAgICAgICBTRExfR2V0 TW91c2VTdGF0ZSgmZHgsICZkeSk7CisgICAgICAgIGR4IC09IGd1ZXN0X3g7CisgICAgICAgIGR5 IC09IGd1ZXN0X3k7CisgICAgICAgIGd1ZXN0X3ggKz0gZHg7CisgICAgICAgIGd1ZXN0X3kgKz0g ZHk7CiAgICAgfQogCiAgICAga2JkX21vdXNlX2V2ZW50KGR4LCBkeSwgZHosIGJ1dHRvbnMpOwpA QCAtNDY3LDggKzQ4NCw4NSBAQCBzdGF0aWMgdm9pZCBzZGxfcmVmcmVzaChEaXNwbGF5U3RhdGUg KmRzKQogICAgIH0KIH0KIAorc3RhdGljIHZvaWQgc2RsX2NvcHkoRGlzcGxheVN0YXRlICpkcywg aW50IHNyY194LCBpbnQgc3JjX3ksCisgICAgICAgICAgICAgICAgICAgICBpbnQgZHN0X3gsIGlu dCBkc3RfeSwgaW50IHcsIGludCBoKQoreworICAgIFNETF9SZWN0IHNyYyA9IHsgc3JjX3gsIHNy Y195LCB3LCBoIH07CisgICAgU0RMX1JlY3QgZHN0ID0geyBkc3RfeCwgZHN0X3ksIHcsIGggfTsK KyAgICBTRExfTG93ZXJCbGl0KHNjcmVlbiwgJnNyYywgc2NyZWVuLCAmZHN0KTsKK30KKworc3Rh dGljIHZvaWQgc2RsX2ZpbGwoRGlzcGxheVN0YXRlICpkcywgaW50IHgsIGludCB5LCBpbnQgdywg aW50IGgsIHVpbnQzMl90IGMpCit7CisgICAgU0RMX1JlY3QgZHN0ID0geyB4LCB5LCB3LCBoIH07 CisgICAgU0RMX0ZpbGxSZWN0KHNjcmVlbiwgJmRzdCwgYyk7Cit9CisKK3N0YXRpYyB2b2lkIHNk bF9tb3VzZV93YXJwKGludCB4LCBpbnQgeSwgaW50IG9uKQoreworICAgIGlmIChvbikgeworICAg ICAgICBpZiAoIWd1ZXN0X2N1cnNvcikKKyAgICAgICAgICAgIHNkbF9zaG93X2N1cnNvcigpOwor ICAgICAgICBpZiAoZ3VpX2dyYWIgfHwga2JkX21vdXNlX2lzX2Fic29sdXRlKCkgfHwgYWJzb2x1 dGVfZW5hYmxlZCkgeworICAgICAgICAgICAgU0RMX1NldEN1cnNvcihndWVzdF9zcHJpdGUpOwor ICAgICAgICAgICAgU0RMX1dhcnBNb3VzZSh4LCB5KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBp ZiAoZ3VpX2dyYWIpCisgICAgICAgIHNkbF9oaWRlX2N1cnNvcigpOworICAgIGd1ZXN0X2N1cnNv ciA9IG9uOworICAgIGd1ZXN0X3ggPSB4LCBndWVzdF95ID0geTsKK30KKworc3RhdGljIHZvaWQg c2RsX21vdXNlX2RlZmluZShpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBicHAsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBob3RfeCwgaW50IGhvdF95LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1aW50OF90ICppbWFnZSwgdWludDhfdCAqbWFzaykKK3sKKyAgICB1 aW50OF90IHNwcml0ZVsyNTZdLCAqbGluZTsKKyAgICBpbnQgeCwgeSwgZHN0LCBieXBsLCBzcmMg PSAwOworICAgIGlmIChndWVzdF9zcHJpdGUpCisgICAgICAgIFNETF9GcmVlQ3Vyc29yKGd1ZXN0 X3Nwcml0ZSk7CisKKyAgICBtZW1zZXQoc3ByaXRlLCAwLCAyNTYpOworICAgIGJ5cGwgPSAoKHdp ZHRoICogYnBwICsgMzEpID4+IDUpIDw8IDI7CisgICAgZm9yICh5ID0gMCwgZHN0ID0gMDsgeSA8 IGhlaWdodDsgeSArKywgaW1hZ2UgKz0gYnlwbCkgeworICAgICAgICBsaW5lID0gaW1hZ2U7Cisg ICAgICAgIGZvciAoeCA9IDA7IHggPCB3aWR0aDsgeCArKywgZHN0ICsrKSB7CisgICAgICAgICAg ICBzd2l0Y2ggKGJwcCkgeworICAgICAgICAgICAgY2FzZSAyNDoKKyAgICAgICAgICAgICAgICBz cmMgPSAqKGxpbmUgKyspOyBzcmMgfD0gKihsaW5lICsrKTsgc3JjIHw9ICoobGluZSArKyk7Cisg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDE2OgorICAgICAgICAgICAg Y2FzZSAxNToKKyAgICAgICAgICAgICAgICBzcmMgPSAqKGxpbmUgKyspOyBzcmMgfD0gKihsaW5l ICsrKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgODoKKyAgICAg ICAgICAgICAgICBzcmMgPSAqKGxpbmUgKyspOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgIHNyYyA9IDB4ZiAmIChsaW5lW3ggPj4g MV0gPj4gKCh4ICYgMSkpIDw8IDIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgY2FzZSAyOgorICAgICAgICAgICAgICAgIHNyYyA9IDMgJiAobGluZVt4ID4+IDJdID4+ICgo eCAmIDMpKSA8PCAxKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug MToKKyAgICAgICAgICAgICAgICBzcmMgPSAxICYgKGxpbmVbeCA+PiAzXSA+PiAoeCAmIDcpKTsK KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgh c3JjKQorICAgICAgICAgICAgICAgIHNwcml0ZVtkc3QgPj4gM10gfD0gKDEgPDwgKH5kc3QgJiA3 KSkgJiBtYXNrW2RzdCA+PiAzXTsKKyAgICAgICAgfQorICAgIH0KKyAgICBndWVzdF9zcHJpdGUg PSBTRExfQ3JlYXRlQ3Vyc29yKHNwcml0ZSwgbWFzaywgd2lkdGgsIGhlaWdodCwgaG90X3gsIGhv dF95KTsKKworICAgIGlmIChndWVzdF9jdXJzb3IgJiYKKyAgICAgICAgICAgIChndWlfZ3JhYiB8 fCBrYmRfbW91c2VfaXNfYWJzb2x1dGUoKSB8fCBhYnNvbHV0ZV9lbmFibGVkKSkKKyAgICAgICAg U0RMX1NldEN1cnNvcihndWVzdF9zcHJpdGUpOworfQorCiBzdGF0aWMgdm9pZCBzZGxfY2xlYW51 cCh2b2lkKSAKIHsKKyAgICBpZiAoZ3Vlc3Rfc3ByaXRlKQorICAgICAgICBTRExfRnJlZUN1cnNv cihndWVzdF9zcHJpdGUpOwogICAgIFNETF9RdWl0KCk7CiB9CiAKQEAgLTUwNSw2ICs1OTksMTAg QEAgdm9pZCBzZGxfZGlzcGxheV9pbml0KERpc3BsYXlTdGF0ZSAqZHMsIGludCBmdWxsX3NjcmVl biwgaW50IG5vX2ZyYW1lKQogICAgIGRzLT5kcHlfdXBkYXRlID0gc2RsX3VwZGF0ZTsKICAgICBk cy0+ZHB5X3Jlc2l6ZSA9IHNkbF9yZXNpemU7CiAgICAgZHMtPmRweV9yZWZyZXNoID0gc2RsX3Jl ZnJlc2g7CisgICAgZHMtPmRweV9jb3B5ID0gc2RsX2NvcHk7CisgICAgZHMtPmRweV9maWxsID0g c2RsX2ZpbGw7CisgICAgZHMtPm1vdXNlX3NldCA9IHNkbF9tb3VzZV93YXJwOworICAgIGRzLT5j dXJzb3JfZGVmaW5lID0gc2RsX21vdXNlX2RlZmluZTsKIAogICAgIHNkbF9yZXNpemUoZHMsIDY0 MCwgNDAwKTsKICAgICBzZGxfdXBkYXRlX2NhcHRpb24oKTsKZGlmZiAtLWdpdCBhL3ZsLmMgYi92 bC5jCmluZGV4IGU4NzFjOGMuLmM1MjMyZmQgMTAwNjQ0Ci0tLSBhL3ZsLmMKKysrIGIvdmwuYwpA QCAtMTU0LDYgKzE1NCw3IEBAIFFFTVVUaW1lciAqZ3VpX3RpbWVyOwogaW50IHZtX3J1bm5pbmc7 CiBpbnQgcnRjX3V0YyA9IDE7CiBpbnQgY2lycnVzX3ZnYV9lbmFibGVkID0gMTsKK2ludCB2bXN2 Z2FfZW5hYmxlZCA9IDA7CiAjaWZkZWYgVEFSR0VUX1NQQVJDCiBpbnQgZ3JhcGhpY193aWR0aCA9 IDEwMjQ7CiBpbnQgZ3JhcGhpY19oZWlnaHQgPSA3Njg7CkBAIC01NDIsNiArNTQzLDEwIEBAIGlu dCBrYmRfbW91c2VfaXNfYWJzb2x1dGUodm9pZCkKICAgICByZXR1cm4gcWVtdV9wdXRfbW91c2Vf ZXZlbnRfY3VycmVudC0+cWVtdV9wdXRfbW91c2VfZXZlbnRfYWJzb2x1dGU7CiB9CiAKK3ZvaWQg KCprYmRfbW91c2Vfc2V0KShpbnQgeCwgaW50IHksIGludCBvbikgPSBOVUxMOwordm9pZCAoKmti ZF9jdXJzb3JfZGVmaW5lKShpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBicHAsIGludCBob3Rf eCwgaW50IGhvdF95LAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICppbWFnZSwg dWludDhfdCAqbWFzaykgPSBOVUxMOworCiB2b2lkIGRvX2luZm9fbWljZSh2b2lkKQogewogICAg IFFFTVVQdXRNb3VzZUVudHJ5ICpjdXJzb3I7CkBAIC02NTI4LDYgKzY1MzMsNyBAQCBlbnVtIHsK ICAgICBRRU1VX09QVElPTl9rLAogICAgIFFFTVVfT1BUSU9OX2xvY2FsdGltZSwKICAgICBRRU1V X09QVElPTl9jaXJydXN2Z2EsCisgICAgUUVNVV9PUFRJT05fdm1zdmdhLAogICAgIFFFTVVfT1BU SU9OX2csCiAgICAgUUVNVV9PUFRJT05fc3RkX3ZnYSwKICAgICBRRU1VX09QVElPTl9lY2hyLApA QCAtNjYzNCw2ICs2NjQwLDcgQEAgY29uc3QgUUVNVU9wdGlvbiBxZW11X29wdGlvbnNbXSA9IHsK ICAgICAvKiB0ZW1wb3Jhcnkgb3B0aW9ucyAqLwogICAgIHsgInVzYiIsIDAsIFFFTVVfT1BUSU9O X3VzYiB9LAogICAgIHsgImNpcnJ1c3ZnYSIsIDAsIFFFTVVfT1BUSU9OX2NpcnJ1c3ZnYSB9LAor ICAgIHsgInZtd2FyZXZnYSIsIDAsIFFFTVVfT1BUSU9OX3Ztc3ZnYSB9LAogICAgIHsgIm5vLWFj cGkiLCAwLCBRRU1VX09QVElPTl9ub19hY3BpIH0sCiAgICAgeyAibm8tcmVib290IiwgMCwgUUVN VV9PUFRJT05fbm9fcmVib290IH0sCiAgICAgeyAiZGFlbW9uaXplIiwgMCwgUUVNVV9PUFRJT05f ZGFlbW9uaXplIH0sCkBAIC03MTk0LDkgKzcyMDEsMTUgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBRRU1V X09QVElPTl9jaXJydXN2Z2E6CiAgICAgICAgICAgICAgICAgY2lycnVzX3ZnYV9lbmFibGVkID0g MTsKKyAgICAgICAgICAgICAgICB2bXN2Z2FfZW5hYmxlZCA9IDA7CisgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICBjYXNlIFFFTVVfT1BUSU9OX3Ztc3ZnYToKKyAgICAgICAgICAg ICAgICBjaXJydXNfdmdhX2VuYWJsZWQgPSAwOworICAgICAgICAgICAgICAgIHZtc3ZnYV9lbmFi bGVkID0gMTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgUUVNVV9P UFRJT05fc3RkX3ZnYToKICAgICAgICAgICAgICAgICBjaXJydXNfdmdhX2VuYWJsZWQgPSAwOwor ICAgICAgICAgICAgICAgIHZtc3ZnYV9lbmFibGVkID0gMDsKICAgICAgICAgICAgICAgICBicmVh azsKICAgICAgICAgICAgIGNhc2UgUUVNVV9PUFRJT05fZzoKICAgICAgICAgICAgICAgICB7CmRp ZmYgLS1naXQgYS92bC5oIGIvdmwuaAppbmRleCBjN2M3ZDczLi42NzQ2OWM4IDEwMDY0NAotLS0g YS92bC5oCisrKyBiL3ZsLmgKQEAgLTE0OCw2ICsxNDgsNyBAQCBleHRlcm4gaW50IHJhbV9zaXpl OwogZXh0ZXJuIGludCBiaW9zX3NpemU7CiBleHRlcm4gaW50IHJ0Y191dGM7CiBleHRlcm4gaW50 IGNpcnJ1c192Z2FfZW5hYmxlZDsKK2V4dGVybiBpbnQgdm1zdmdhX2VuYWJsZWQ7CiBleHRlcm4g aW50IGdyYXBoaWNfd2lkdGg7CiBleHRlcm4gaW50IGdyYXBoaWNfaGVpZ2h0OwogZXh0ZXJuIGlu dCBncmFwaGljX2RlcHRoOwpAQCAtODkwLDcgKzg5MSwxMyBAQCBzdHJ1Y3QgRGlzcGxheVN0YXRl IHsKICAgICB2b2lkICgqZHB5X3VwZGF0ZSkoc3RydWN0IERpc3BsYXlTdGF0ZSAqcywgaW50IHgs IGludCB5LCBpbnQgdywgaW50IGgpOwogICAgIHZvaWQgKCpkcHlfcmVzaXplKShzdHJ1Y3QgRGlz cGxheVN0YXRlICpzLCBpbnQgdywgaW50IGgpOwogICAgIHZvaWQgKCpkcHlfcmVmcmVzaCkoc3Ry dWN0IERpc3BsYXlTdGF0ZSAqcyk7Ci0gICAgdm9pZCAoKmRweV9jb3B5KShzdHJ1Y3QgRGlzcGxh eVN0YXRlICpzLCBpbnQgc3JjX3gsIGludCBzcmNfeSwgaW50IGRzdF94LCBpbnQgZHN0X3ksIGlu dCB3LCBpbnQgaCk7CisgICAgdm9pZCAoKmRweV9jb3B5KShzdHJ1Y3QgRGlzcGxheVN0YXRlICpz LCBpbnQgc3JjX3gsIGludCBzcmNfeSwKKyAgICAgICAgICAgICAgICAgICAgIGludCBkc3RfeCwg aW50IGRzdF95LCBpbnQgdywgaW50IGgpOworICAgIHZvaWQgKCpkcHlfZmlsbCkoc3RydWN0IERp c3BsYXlTdGF0ZSAqcywgaW50IHgsIGludCB5LAorICAgICAgICAgICAgICAgICAgICAgaW50IHcs IGludCBoLCB1aW50MzJfdCBjKTsKKyAgICB2b2lkICgqbW91c2Vfc2V0KShpbnQgeCwgaW50IHks IGludCBvbik7CisgICAgdm9pZCAoKmN1cnNvcl9kZWZpbmUpKGludCB3aWR0aCwgaW50IGhlaWdo dCwgaW50IGJwcCwgaW50IGhvdF94LCBpbnQgaG90X3ksCisgICAgICAgICAgICAgICAgICAgICAg ICAgIHVpbnQ4X3QgKmltYWdlLCB1aW50OF90ICptYXNrKTsKIH07CiAKIHN0YXRpYyBpbmxpbmUg dm9pZCBkcHlfdXBkYXRlKERpc3BsYXlTdGF0ZSAqcywgaW50IHgsIGludCB5LCBpbnQgdywgaW50 IGgpCkBAIC05MTUsNiArOTIyLDEwIEBAIHZvaWQgcGNpX2NpcnJ1c192Z2FfaW5pdChQQ0lCdXMg KmJ1cywgRGlzcGxheVN0YXRlICpkcywgdWludDhfdCAqdmdhX3JhbV9iYXNlLAogdm9pZCBpc2Ff Y2lycnVzX3ZnYV9pbml0KERpc3BsYXlTdGF0ZSAqZHMsIHVpbnQ4X3QgKnZnYV9yYW1fYmFzZSwg CiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB2Z2FfcmFtX29mZnNldCwg aW50IHZnYV9yYW1fc2l6ZSk7CiAKKy8qIHZtd2FyZV92Z2EuYyAqLwordm9pZCBwY2lfdm1zdmdh X2luaXQoUENJQnVzICpidXMsIERpc3BsYXlTdGF0ZSAqZHMsIHVpbnQ4X3QgKnZnYV9yYW1fYmFz ZSwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdmdhX3JhbV9vZmZzZXQsIGlu dCB2Z2FfcmFtX3NpemUpOworCiAvKiBzZGwuYyAqLwogdm9pZCBzZGxfZGlzcGxheV9pbml0KERp c3BsYXlTdGF0ZSAqZHMsIGludCBmdWxsX3NjcmVlbiwgaW50IG5vX2ZyYW1lKTsKIAotLSAKMS40 LjQuMwoK ------=_Part_23230_12535157.1175047306303--