From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1HSJrQ-0004iy-BI for qemu-devel@nongnu.org; Fri, 16 Mar 2007 17:21:16 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1HSJrI-0004XT-J8 for qemu-devel@nongnu.org; Fri, 16 Mar 2007 17:21:14 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1HSJrI-0004XH-6g for qemu-devel@nongnu.org; Fri, 16 Mar 2007 16:21:08 -0500 Received: from ug-out-1314.google.com ([66.249.92.173]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1HSJq6-0001NL-Rw for qemu-devel@nongnu.org; Fri, 16 Mar 2007 17:19:56 -0400 Received: by ug-out-1314.google.com with SMTP id j40so886520ugd for ; Fri, 16 Mar 2007 14:19:53 -0700 (PDT) Message-ID: Date: Fri, 16 Mar 2007 22:19:51 +0100 From: "andrzej zaborowski" Sender: balrogg@gmail.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_99450_23385742.1174079991241" Subject: [Qemu-devel] [PATCH] Add main PXA on-chip peripherals. 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_99450_23385742.1174079991241 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline This adds the remaining on-chip peripherals of the PXA2xx: - MMC/SD host. - PCMCIA sockets. - System timers. - LCD controller. For the LCD I added the "-portrait" switch that rotates the display 90 degrees left. This is for the Spitz machine (clamshell based PDA) that can work in the two display modes. The rotation can be changed in runtime when machine code decides so. When the screen is being rotated, the mouse clicks coordinates are also rotated so the guest OS doesn't have to recalibrate input devices (i.e touchscreen). Apply on top of the earlier patches: "[PATCH] Memory mapped OHCI host with PXA-specific bits", "[PATCH] SecureDigital card emulation", "[PATCH] ARM XScale core features. PXA270 and PXA255 emulation." Cheers, Andrew ------=_Part_99450_23385742.1174079991241 Content-Type: text/plain; name=0007-Add-main-PXA-on-chip-peripherals.txt; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: base64 X-Attachment-Id: f_ezd6p84g Content-Disposition: attachment; filename="0007-Add-main-PXA-on-chip-peripherals.txt" RnJvbSA5MWZhZjAyNjEyY2E4ODcwY2M1OGI3NmUxYjdmZDM3YThiZjEzMmMxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyemVqIFphYm9yb3dza2kgPGJhbHJvZ0B6YWJvci5vcmc+ CkRhdGU6IEZyaSwgMTYgTWFyIDIwMDcgMTY6MjY6MjUgKzAxMDAKU3ViamVjdDogW1BBVENIXSBB ZGQgbWFpbiBQWEEgb24tY2hpcCBwZXJpcGhlcmFscy4KCi0tLQogaHcvcHhhLmggICAgICAgICAg ICAgfCAgIDMzICsrCiBody9weGEyeHguYyAgICAgICAgICB8ICAgMjkgKysKIGh3L3B4YTJ4eF9s Y2QuYyAgICAgIHwgMTAwMSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKwogaHcvcHhhMnh4X21tY2kuYyAgICAgfCAgNDg5ICsrKysrKysrKysrKysrKysr KysrKysrKwogaHcvcHhhMnh4X3BjbWNpYS5jICAgfCAgMjMwICsrKysrKysrKysrKwogaHcvcHhh Mnh4X3RlbXBsYXRlLmggfCAgNDMxICsrKysrKysrKysrKysrKysrKysrKysKIGh3L3B4YTJ4eF90 aW1lci5jICAgIHwgIDQzNyArKysrKysrKysrKysrKysrKysrKysrCiB2bC5jICAgICAgICAgICAg ICAgICB8ICAgMTkgKy0KIHZsLmggICAgICAgICAgICAgICAgIHwgICAgMSArCiA5IGZpbGVzIGNo YW5nZWQsIDI2NjkgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9o dy9weGEuaCBiL2h3L3B4YS5oCmluZGV4IDE2ZWIzMmYuLjA4ZGRiNjMgMTAwNjQ0Ci0tLSBhL2h3 L3B4YS5oCisrKyBiL2h3L3B4YS5oCkBAIC02NCw2ICs2NCwxMiBAQCBzdHJ1Y3QgcHhhMnh4X3Bp Y19zdGF0ZV9zOwogc3RydWN0IHB4YTJ4eF9waWNfc3RhdGVfcyAqcHhhMnh4X3BpY19pbml0KHRh cmdldF9waHlzX2FkZHJfdCBiYXNlLAogICAgICAgICAgICAgICAgIENQVVN0YXRlICplbnYpOwog CisvKiBweGEyeHhfdGltZXIuYyAqLwordm9pZCBweGEyNXhfdGltZXJfaW5pdCh0YXJnZXRfcGh5 c19hZGRyX3QgYmFzZSwKKyAgICAgICAgICAgICAgICB2b2lkICpwaWMsIGludCBpcnEsIENQVVN0 YXRlICpjcHVzdGF0ZSk7Cit2b2lkIHB4YTI3eF90aW1lcl9pbml0KHRhcmdldF9waHlzX2FkZHJf dCBiYXNlLAorICAgICAgICAgICAgICAgIHZvaWQgKnBpYywgaW50IGlycSwgaW50IGlycTQsIENQ VVN0YXRlICpjcHVzdGF0ZSk7CisKIC8qIHB4YTJ4eF9ncGlvLmMgKi8KIHN0cnVjdCBweGEyeHhf Z3Bpb19pbmZvX3M7CiBzdHJ1Y3QgcHhhMnh4X2dwaW9faW5mb19zICpweGEyeHhfZ3Bpb19pbml0 KHRhcmdldF9waHlzX2FkZHJfdCBiYXNlLApAQCAtODIsNiArODgsMzAgQEAgc3RydWN0IHB4YTJ4 eF9kbWFfc3RhdGVfcyAqcHhhMjd4X2RtYV9pbml0KHRhcmdldF9waHlzX2FkZHJfdCBiYXNlLAog ICAgICAgICAgICAgICAgIHZvaWQgKnBpYywgaW50IGlycSk7CiB2b2lkIHB4YTJ4eF9kbWFfcmVx dWVzdChzdHJ1Y3QgcHhhMnh4X2RtYV9zdGF0ZV9zICpzLCBpbnQgcmVxX251bSwgaW50IG9uKTsK IAorLyogcHhhMnh4X2xjZC5jICovCitzdHJ1Y3QgcHhhMnh4X2xjZGNfczsKK3N0cnVjdCBweGEy eHhfbGNkY19zICpweGEyeHhfbGNkY19pbml0KHRhcmdldF9waHlzX2FkZHJfdCBiYXNlLAorICAg ICAgICAgICAgICAgIHZvaWQgKnBpYywgRGlzcGxheVN0YXRlICpkcyk7Cit2b2lkIHB4YTJ4eF9s Y2RfdnN5bmNfY2Ioc3RydWN0IHB4YTJ4eF9sY2RjX3MgKnMsCisgICAgICAgICAgICAgICAgdm9p ZCAoKmNiKSh2b2lkICpvcGFxdWUpLCB2b2lkICpvcGFxdWUpOwordm9pZCBweGEyeHhfbGNkY19v cml0ZW50YXRpb24odm9pZCAqb3BhcXVlLCBpbnQgYW5nbGUpOworCisvKiBweGEyeHhfbW1jaS5j ICovCitzdHJ1Y3QgcHhhMnh4X21tY2lfczsKK3N0cnVjdCBweGEyeHhfbW1jaV9zICpweGEyeHhf bW1jaV9pbml0KHRhcmdldF9waHlzX2FkZHJfdCBiYXNlLAorICAgICAgICAgICAgICAgIHZvaWQg KnBpYywgdm9pZCAqZG1hKTsKK3ZvaWQgcHhhMnh4X21tY2lfaGFuZGxlcnMoc3RydWN0IHB4YTJ4 eF9tbWNpX3MgKnMsIHZvaWQgKm9wYXF1ZSwKKyAgICAgICAgICAgICAgICB2b2lkICgqcmVhZG9u bHlfY2IpKHZvaWQgKiwgaW50KSwKKyAgICAgICAgICAgICAgICB2b2lkICgqY292ZXJzd2l0Y2hf Y2IpKHZvaWQgKiwgaW50KSk7CisKKy8qIHB4YTJ4eF9wY21jaWEuYyAqLworc3RydWN0IHB4YTJ4 eF9wY21jaWFfczsKK3N0cnVjdCBweGEyeHhfcGNtY2lhX3MgKnB4YTJ4eF9wY21jaWFfaW5pdCh0 YXJnZXRfcGh5c19hZGRyX3QgYmFzZSk7CitpbnQgcHhhMnh4X3BjbWNpYV9hdHRhY2godm9pZCAq b3BhcXVlLCBzdHJ1Y3QgcGNtY2lhX2NhcmRfcyAqY2FyZCk7CitpbnQgcHhhMnh4X3BjbWNpYV9k ZXR0YWNoKHZvaWQgKm9wYXF1ZSk7Cit2b2lkIHB4YTJ4eF9wY21jaWFfc2V0X2lycV9jYih2b2lk ICpvcGFxdWUsIHZvaWQgKCpzZXRfaXJxKSh2b2lkICpvcGFxdWUsCisgICAgICAgICAgICAgICAg aW50IGxpbmUsIGludCBsZXZlbCksIGludCBpcnEsIGludCBjZF9pcnEsIHZvaWQgKnBpYyk7CisK IC8qIHB4YTJ4eC5jICovCiBzdHJ1Y3QgcHhhMnh4X3NzcF9zOwogdm9pZCBweGEyeHhfc3NwX2F0 dGFjaChzdHJ1Y3QgcHhhMnh4X3NzcF9zICpwb3J0LApAQCAtOTcsNyArMTI3LDEwIEBAIHN0cnVj dCBweGEyeHhfc3RhdGVfcyB7CiAgICAgc3RydWN0IHB4YTJ4eF9waWNfc3RhdGVfcyAqcGljOwog ICAgIHN0cnVjdCBweGEyeHhfZG1hX3N0YXRlX3MgKmRtYTsKICAgICBzdHJ1Y3QgcHhhMnh4X2dw aW9faW5mb19zICpncGlvOworICAgIHN0cnVjdCBweGEyeHhfbGNkY19zICpsY2Q7CiAgICAgc3Ry dWN0IHB4YTJ4eF9zc3BfcyAqKnNzcDsKKyAgICBzdHJ1Y3QgcHhhMnh4X21tY2lfcyAqbW1jOwor ICAgIHN0cnVjdCBweGEyeHhfcGNtY2lhX3MgKnBjbWNpYVsyXTsKICAgICBzdHJ1Y3QgcHhhMnh4 X2kyY19zICppMmNbMl07CiAgICAgc3RydWN0IHB4YTJ4eF9pMnNfcyAqaTJzOwogICAgIHN0cnVj dCBweGEyeHhfZmlyX3MgKmZpcjsKZGlmZiAtLWdpdCBhL2h3L3B4YTJ4eC5jIGIvaHcvcHhhMnh4 LmMKaW5kZXggNTcyMzFhZS4uNTZlYTc5YyAxMDA2NDQKLS0tIGEvaHcvcHhhMnh4LmMKKysrIGIv aHcvcHhhMnh4LmMKQEAgLTE3MjUsOCArMTcyNSwxMyBAQCBzdHJ1Y3QgcHhhMnh4X3N0YXRlX3Mg KnB4YTI3MF9pbml0KERpc3BsYXlTdGF0ZSAqZHMsIGNvbnN0IGNoYXIgKnJldmlzaW9uKQogCiAg ICAgcy0+ZG1hID0gcHhhMjd4X2RtYV9pbml0KDB4NDAwMDAwMDAsIHMtPnBpYywgUFhBMlhYX1BJ Q19ETUEpOwogCisgICAgcHhhMjd4X3RpbWVyX2luaXQoMHg0MGEwMDAwMCwgcy0+cGljLAorICAg ICAgICAgICAgICAgICAgICBQWEEyWFhfUElDX09TVF8wLCBQWEEyN1hfUElDX09TVF80XzExLCBz LT5lbnYpOworCiAgICAgcy0+Z3BpbyA9IHB4YTJ4eF9ncGlvX2luaXQoMHg0MGUwMDAwMCwgcy0+ ZW52LCBzLT5waWMsIDEyMSk7CiAKKyAgICBzLT5tbWMgPSBweGEyeHhfbW1jaV9pbml0KDB4NDEx MDAwMDAsIHMtPnBpYywgcy0+ZG1hKTsKKwogICAgIGZvciAoaSA9IDA7IHB4YTI3MF9zZXJpYWxb aV0uaW9fYmFzZTsgaSArKykKICAgICAgICAgaWYgKHNlcmlhbF9oZHNbaV0pCiAgICAgICAgICAg ICBzZXJpYWxfbW1faW5pdCgqKFNldElSUUZ1bmMgKiopIHMtPnBpYywgcy0+cGljLApAQCAtMTcz Niw2ICsxNzQxLDkgQEAgc3RydWN0IHB4YTJ4eF9zdGF0ZV9zICpweGEyNzBfaW5pdChEaXNwbGF5 U3RhdGUgKmRzLCBjb25zdCBjaGFyICpyZXZpc2lvbikKICAgICAgICAgcy0+ZmlyID0gcHhhMnh4 X2Zpcl9pbml0KDB4NDA4MDAwMDAsIFBYQTJYWF9QSUNfSUNQLAogICAgICAgICAgICAgICAgICAg ICAgICAgcy0+cGljLCBzLT5kbWEsIHNlcmlhbF9oZHNbaV0pOwogCisgICAgaWYgKGRzKQorICAg ICAgICBzLT5sY2QgPSBweGEyeHhfbGNkY19pbml0KDB4NDQwMDAwMDAsIHMtPnBpYywgZHMpOwor CiAgICAgcy0+Y21fYmFzZSA9IDB4NDEzMDAwMDA7CiAgICAgcy0+Y21fcmVnc1tDQ0NSID4+IDRd ID0gMHgwMjAwMDIxMDsJLyogNDE2LjAgTUh6ICovCiAgICAgcy0+Y2xrY2ZnID0gMHgwMDAwMDAw OTsJCS8qIFR1cmJvIG1vZGUgYWN0aXZlICovCkBAIC0xNzY5LDYgKzE3NzcsMTMgQEAgc3RydWN0 IHB4YTJ4eF9zdGF0ZV9zICpweGEyNzBfaW5pdChEaXNwbGF5U3RhdGUgKmRzLCBjb25zdCBjaGFy ICpyZXZpc2lvbikKICAgICAgICAgY3B1X3JlZ2lzdGVyX3BoeXNpY2FsX21lbW9yeShzc3BbaV0u YmFzZSwgMHhmZmYsIGlvbWVtdHlwZSk7CiAgICAgfQogCisgICAgaWYgKHVzYl9lbmFibGVkKSB7 CisgICAgICAgIHVzYl9vaGNpX2luaXRfbWVtaW8oMHg0YzAwMDAwMCwgMywgLTEsIHMtPnBpYywg UFhBMlhYX1BJQ19VU0JIMSk7CisgICAgfQorCisgICAgcy0+cGNtY2lhWzBdID0gcHhhMnh4X3Bj bWNpYV9pbml0KDB4MjAwMDAwMDApOworICAgIHMtPnBjbWNpYVsxXSA9IHB4YTJ4eF9wY21jaWFf aW5pdCgweDMwMDAwMDAwKTsKKwogICAgIHMtPnJ0Y19iYXNlID0gMHg0MDkwMDAwMDsKICAgICBp b21lbXR5cGUgPSBjcHVfcmVnaXN0ZXJfaW9fbWVtb3J5KDAsIHB4YTJ4eF9ydGNfcmVhZGZuLAog ICAgICAgICAgICAgICAgICAgICBweGEyeHhfcnRjX3dyaXRlZm4sIHMpOwpAQCAtMTgwNyw4ICsx ODIyLDEyIEBAIHN0cnVjdCBweGEyeHhfc3RhdGVfcyAqcHhhMjU1X2luaXQoRGlzcGxheVN0YXRl ICpkcykKIAogICAgIHMtPmRtYSA9IHB4YTI1NV9kbWFfaW5pdCgweDQwMDAwMDAwLCBzLT5waWMs IFBYQTJYWF9QSUNfRE1BKTsKIAorICAgIHB4YTI1eF90aW1lcl9pbml0KDB4NDBhMDAwMDAsIHMt PnBpYywgUFhBMlhYX1BJQ19PU1RfMCwgcy0+ZW52KTsKKwogICAgIHMtPmdwaW8gPSBweGEyeHhf Z3Bpb19pbml0KDB4NDBlMDAwMDAsIHMtPmVudiwgcy0+cGljLCAxMjEpOwogCisgICAgcy0+bW1j ID0gcHhhMnh4X21tY2lfaW5pdCgweDQxMTAwMDAwLCBzLT5waWMsIHMtPmRtYSk7CisKICAgICBm b3IgKGkgPSAwOyBweGEyNTVfc2VyaWFsW2ldLmlvX2Jhc2U7IGkgKyspCiAgICAgICAgIGlmIChz ZXJpYWxfaGRzW2ldKQogICAgICAgICAgICAgc2VyaWFsX21tX2luaXQoKihTZXRJUlFGdW5jICoq KSBzLT5waWMsIHMtPnBpYywKQEAgLTE4MTgsNiArMTgzNyw5IEBAIHN0cnVjdCBweGEyeHhfc3Rh dGVfcyAqcHhhMjU1X2luaXQoRGlzcGxheVN0YXRlICpkcykKICAgICAgICAgcy0+ZmlyID0gcHhh Mnh4X2Zpcl9pbml0KDB4NDA4MDAwMDAsIFBYQTJYWF9QSUNfSUNQLAogICAgICAgICAgICAgICAg ICAgICAgICAgcy0+cGljLCBzLT5kbWEsIHNlcmlhbF9oZHNbaV0pOwogCisgICAgaWYgKGRzKQor ICAgICAgICBzLT5sY2QgPSBweGEyeHhfbGNkY19pbml0KDB4NDQwMDAwMDAsIHMtPnBpYywgZHMp OworCiAgICAgcy0+Y21fYmFzZSA9IDB4NDEzMDAwMDA7CiAgICAgcy0+Y21fcmVnc1tDQ0NSID4+ IDRdID0gMHgwMjAwMDIxMDsJLyogNDE2LjAgTUh6ICovCiAgICAgcy0+Y2xrY2ZnID0gMHgwMDAw MDAwOTsJCS8qIFR1cmJvIG1vZGUgYWN0aXZlICovCkBAIC0xODUxLDYgKzE4NzMsMTMgQEAgc3Ry dWN0IHB4YTJ4eF9zdGF0ZV9zICpweGEyNTVfaW5pdChEaXNwbGF5U3RhdGUgKmRzKQogICAgICAg ICBjcHVfcmVnaXN0ZXJfcGh5c2ljYWxfbWVtb3J5KHNzcFtpXS5iYXNlLCAweGZmZiwgaW9tZW10 eXBlKTsKICAgICB9CiAKKyAgICBpZiAodXNiX2VuYWJsZWQpIHsKKyAgICAgICAgdXNiX29oY2lf aW5pdF9tZW1pbygweDRjMDAwMDAwLCAzLCAtMSwgcy0+cGljLCBQWEEyWFhfUElDX1VTQkgxKTsK KyAgICB9CisKKyAgICBzLT5wY21jaWFbMF0gPSBweGEyeHhfcGNtY2lhX2luaXQoMHgyMDAwMDAw MCk7CisgICAgcy0+cGNtY2lhWzFdID0gcHhhMnh4X3BjbWNpYV9pbml0KDB4MzAwMDAwMDApOwor CiAgICAgcy0+cnRjX2Jhc2UgPSAweDQwOTAwMDAwOwogICAgIGlvbWVtdHlwZSA9IGNwdV9yZWdp c3Rlcl9pb19tZW1vcnkoMCwgcHhhMnh4X3J0Y19yZWFkZm4sCiAgICAgICAgICAgICAgICAgICAg IHB4YTJ4eF9ydGNfd3JpdGVmbiwgcyk7CmRpZmYgLS1naXQgYS9ody9weGEyeHhfbGNkLmMgYi9o dy9weGEyeHhfbGNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRiNjMw YgotLS0gL2Rldi9udWxsCisrKyBiL2h3L3B4YTJ4eF9sY2QuYwpAQCAtMCwwICsxLDEwMDEgQEAK Ky8qCisgKiBJbnRlbCBYU2NhbGUgUFhBMjU1LzI3MCBMQ0RDIGVtdWxhdGlvbi4KKyAqCisgKiBD b3B5cmlnaHQgKGMpIDIwMDYgT3BlbmVkaGFuZCBMdGQuCisgKiBXcml0dGVuIGJ5IEFuZHJ6ZWog WmFib3Jvd3NraSA8YmFscm9nQHphYm9yLm9yZz4KKyAqCisgKiBUaGlzIGNvZGUgaXMgbGljZW5z ZWQgdW5kZXIgdGhlIEdQTHYyLgorICovCisKKyNpbmNsdWRlICJ2bC5oIgorCit0eXBlZGVmIHZv aWQgKCpkcmF3Zm4pKHVpbnQzMl90ICosIHVpbnQ4X3QgKiwgY29uc3QgdWludDhfdCAqLCBpbnQs IGludCk7CisKK3N0cnVjdCBweGEyeHhfbGNkY19zIHsKKyAgICB0YXJnZXRfcGh5c19hZGRyX3Qg YmFzZTsKKyAgICB2b2lkICpwaWM7CisgICAgaW50IGlycWxldmVsOworCisgICAgaW50IGludmFs aWRhdGVkOworICAgIERpc3BsYXlTdGF0ZSAqZHM7CisgICAgZHJhd2ZuICpsaW5lX2ZuWzJdOwor ICAgIGludCBkZXN0X3dpZHRoOworICAgIGludCB4cmVzLCB5cmVzOworICAgIGludCBwYWxfZm9y OworICAgIGludCB0cmFuc3A7CisgICAgZW51bSB7CisgICAgICAgIHB4YV9sY2RjXzJicHAgPSAx LAorICAgICAgICBweGFfbGNkY180YnBwID0gMiwKKyAgICAgICAgcHhhX2xjZGNfOGJwcCA9IDMs CisgICAgICAgIHB4YV9sY2RjXzE2YnBwID0gNCwKKyAgICAgICAgcHhhX2xjZGNfMThicHAgPSA1 LAorICAgICAgICBweGFfbGNkY18xOHBicHAgPSA2LAorICAgICAgICBweGFfbGNkY18xOWJwcCA9 IDcsCisgICAgICAgIHB4YV9sY2RjXzE5cGJwcCA9IDgsCisgICAgICAgIHB4YV9sY2RjXzI0YnBw ID0gOSwKKyAgICAgICAgcHhhX2xjZGNfMjVicHAgPSAxMCwKKyAgICB9IGJwcDsKKworICAgIHVp bnQzMl90IGNvbnRyb2xbNl07CisgICAgdWludDMyX3Qgc3RhdHVzWzJdOworICAgIHVpbnQzMl90 IG92bDFjWzJdOworICAgIHVpbnQzMl90IG92bDJjWzJdOworICAgIHVpbnQzMl90IGNjcjsKKyAg ICB1aW50MzJfdCBjbWRjcjsKKyAgICB1aW50MzJfdCB0cmdicjsKKyAgICB1aW50MzJfdCB0Y3I7 CisgICAgdWludDMyX3QgbGlpZHI7CisgICAgdWludDhfdCBic2NudHI7CisKKyAgICBzdHJ1Y3Qg eworICAgICAgICB0YXJnZXRfcGh5c19hZGRyX3QgYnJhbmNoOworICAgICAgICBpbnQgdXA7Cisg ICAgICAgIHVpbnQ4X3QgcGFsZXR0ZVsxMDI0XTsKKyAgICAgICAgdWludDhfdCBwYnVmZmVyWzEw MjRdOworICAgICAgICB2b2lkICgqcmVkcmF3KShzdHJ1Y3QgcHhhMnh4X2xjZGNfcyAqcywgdWlu dDhfdCAqZmIsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKm1pbnksIGludCAqbWF4eSk7 CisKKyAgICAgICAgdGFyZ2V0X3BoeXNfYWRkcl90IGRlc2NyaXB0b3I7CisgICAgICAgIHRhcmdl dF9waHlzX2FkZHJfdCBzb3VyY2U7CisgICAgICAgIHVpbnQzMl90IGlkOworICAgICAgICB1aW50 MzJfdCBjb21tYW5kOworICAgIH0gZG1hX2NoWzddOworCisgICAgdm9pZCAoKnZzeW5jX2NiKSh2 b2lkICpvcGFxdWUpOworICAgIHZvaWQgKm9wYXF1ZTsKKyAgICBpbnQgb3JpZW50YXRpb247Cit9 OworCitzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKSBweGFfZnJhbWVfZGVzY3Jp cHRvcl9zIHsKKyAgICB1aW50MzJfdCBmZGFkZHI7CisgICAgdWludDMyX3QgZnNhZGRyOworICAg IHVpbnQzMl90IGZpZHI7CisgICAgdWludDMyX3QgbGRjbWQ7Cit9OworCisjZGVmaW5lIExDQ1Iw CTB4MDAwCS8qIExDRCBDb250cm9sbGVyIENvbnRyb2wgcmVnaXN0ZXIgMCAqLworI2RlZmluZSBM Q0NSMQkweDAwNAkvKiBMQ0QgQ29udHJvbGxlciBDb250cm9sIHJlZ2lzdGVyIDEgKi8KKyNkZWZp bmUgTENDUjIJMHgwMDgJLyogTENEIENvbnRyb2xsZXIgQ29udHJvbCByZWdpc3RlciAyICovCisj ZGVmaW5lIExDQ1IzCTB4MDBjCS8qIExDRCBDb250cm9sbGVyIENvbnRyb2wgcmVnaXN0ZXIgMyAq LworI2RlZmluZSBMQ0NSNAkweDAxMAkvKiBMQ0QgQ29udHJvbGxlciBDb250cm9sIHJlZ2lzdGVy IDQgKi8KKyNkZWZpbmUgTENDUjUJMHgwMTQJLyogTENEIENvbnRyb2xsZXIgQ29udHJvbCByZWdp c3RlciA1ICovCisKKyNkZWZpbmUgRkJSMAkweDAyMAkvKiBETUEgQ2hhbm5lbCAwIEZyYW1lIEJy YW5jaCByZWdpc3RlciAqLworI2RlZmluZSBGQlIxCTB4MDI0CS8qIERNQSBDaGFubmVsIDEgRnJh bWUgQnJhbmNoIHJlZ2lzdGVyICovCisjZGVmaW5lIEZCUjIJMHgwMjgJLyogRE1BIENoYW5uZWwg MiBGcmFtZSBCcmFuY2ggcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRkJSMwkweDAyYwkvKiBETUEgQ2hh bm5lbCAzIEZyYW1lIEJyYW5jaCByZWdpc3RlciAqLworI2RlZmluZSBGQlI0CTB4MDMwCS8qIERN QSBDaGFubmVsIDQgRnJhbWUgQnJhbmNoIHJlZ2lzdGVyICovCisjZGVmaW5lIEZCUjUJMHgxMTAJ LyogRE1BIENoYW5uZWwgNSBGcmFtZSBCcmFuY2ggcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRkJSNgkw eDExNAkvKiBETUEgQ2hhbm5lbCA2IEZyYW1lIEJyYW5jaCByZWdpc3RlciAqLworCisjZGVmaW5l IExDU1IxCTB4MDM0CS8qIExDRCBDb250cm9sbGVyIFN0YXR1cyByZWdpc3RlciAxICovCisjZGVm aW5lIExDU1IwCTB4MDM4CS8qIExDRCBDb250cm9sbGVyIFN0YXR1cyByZWdpc3RlciAwICovCisj ZGVmaW5lIExJSURSCTB4MDNjCS8qIExDRCBDb250cm9sbGVyIEludGVycnVwdCBJRCByZWdpc3Rl ciAqLworCisjZGVmaW5lIFRSR0JSCTB4MDQwCS8qIFRNRUQgUkdCIFNlZWQgcmVnaXN0ZXIgKi8K KyNkZWZpbmUgVENSCTB4MDQ0CS8qIFRNRUQgQ29udHJvbCByZWdpc3RlciAqLworCisjZGVmaW5l IE9WTDFDMQkweDA1MAkvKiBPdmVybGF5IDEgQ29udHJvbCByZWdpc3RlciAxICovCisjZGVmaW5l IE9WTDFDMgkweDA2MAkvKiBPdmVybGF5IDEgQ29udHJvbCByZWdpc3RlciAyICovCisjZGVmaW5l IE9WTDJDMQkweDA3MAkvKiBPdmVybGF5IDIgQ29udHJvbCByZWdpc3RlciAxICovCisjZGVmaW5l IE9WTDJDMgkweDA4MAkvKiBPdmVybGF5IDIgQ29udHJvbCByZWdpc3RlciAyICovCisjZGVmaW5l IENDUgkweDA5MAkvKiBDdXJzb3IgQ29udHJvbCByZWdpc3RlciAqLworCisjZGVmaW5lIENNRENS CTB4MTAwCS8qIENvbW1hbmQgQ29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBQUlNSCTB4MTA0 CS8qIFBhbmVsIFJlYWQgU3RhdHVzIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgUFhBX0xDRERNQV9D SEFOUwk3CisjZGVmaW5lIERNQV9GREFEUgkJMHgwMAkvKiBGcmFtZSBEZXNjcmlwdG9yIEFkZHJl c3MgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRE1BX0ZTQURSCQkweDA0CS8qIEZyYW1lIFNvdXJjZSBB ZGRyZXNzIHJlZ2lzdGVyICovCisjZGVmaW5lIERNQV9GSURSCQkweDA4CS8qIEZyYW1lIElEIHJl Z2lzdGVyICovCisjZGVmaW5lIERNQV9MRENNRAkJMHgwYwkvKiBDb21tYW5kIHJlZ2lzdGVyICov CisKKy8qIExDRCBCdWZmZXIgU3RyZW5ndGggQ29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBC U0NOVFIJMHgwNDAwMDA1NAorCisvKiBCaXRmaWVsZCBtYXNrcyAqLworI2RlZmluZSBMQ0NSMF9F TkIJKDEgPDwgMCkKKyNkZWZpbmUgTENDUjBfQ01TCSgxIDw8IDEpCisjZGVmaW5lIExDQ1IwX1NE UwkoMSA8PCAyKQorI2RlZmluZSBMQ0NSMF9MRE0JKDEgPDwgMykKKyNkZWZpbmUgTENDUjBfU09G TTAJKDEgPDwgNCkKKyNkZWZpbmUgTENDUjBfSVVNCSgxIDw8IDUpCisjZGVmaW5lIExDQ1IwX0VP Rk0wCSgxIDw8IDYpCisjZGVmaW5lIExDQ1IwX1BBUwkoMSA8PCA3KQorI2RlZmluZSBMQ0NSMF9E UEQJKDEgPDwgOSkKKyNkZWZpbmUgTENDUjBfRElTCSgxIDw8IDEwKQorI2RlZmluZSBMQ0NSMF9R RE0JKDEgPDwgMTEpCisjZGVmaW5lIExDQ1IwX1BERAkoMHhmZiA8PCAxMikKKyNkZWZpbmUgTEND UjBfQlNNMAkoMSA8PCAyMCkKKyNkZWZpbmUgTENDUjBfT1VNCSgxIDw8IDIxKQorI2RlZmluZSBM Q0NSMF9MQ0RUCSgxIDw8IDIyKQorI2RlZmluZSBMQ0NSMF9SRFNUTQkoMSA8PCAyMykKKyNkZWZp bmUgTENDUjBfQ01ESU0JKDEgPDwgMjQpCisjZGVmaW5lIExDQ1IwX09VQwkoMSA8PCAyNSkKKyNk ZWZpbmUgTENDUjBfTEREQUxUCSgxIDw8IDI2KQorI2RlZmluZSBMQ0NSMV9QUEwoeCkJKCh4KSAm IDB4M2ZmKQorI2RlZmluZSBMQ0NSMl9MUFAoeCkJKCh4KSAmIDB4M2ZmKQorI2RlZmluZSBMQ0NS M19BUEkJKDE1IDw8IDE2KQorI2RlZmluZSBMQ0NSM19CUFAoeCkJKCgoKHgpID4+IDI0KSAmIDcp IHwgKCgoeCkgPj4gMjYpICYgOCkpCisjZGVmaW5lIExDQ1IzX1BERk9SKHgpCSgoKHgpID4+IDMw KSAmIDMpCisjZGVmaW5lIExDQ1I0X0sxKHgpCSgoKHgpID4+IDApICYgNykKKyNkZWZpbmUgTEND UjRfSzIoeCkJKCgoeCkgPj4gMykgJiA3KQorI2RlZmluZSBMQ0NSNF9LMyh4KQkoKCh4KSA+PiA2 KSAmIDcpCisjZGVmaW5lIExDQ1I0X1BBTEZPUih4KQkoKCh4KSA+PiAxNSkgJiAzKQorI2RlZmlu ZSBMQ0NSNV9TT0ZNKGNoKQkoMSA8PCAoY2ggLSAxKSkKKyNkZWZpbmUgTENDUjVfRU9GTShjaCkJ KDEgPDwgKGNoICsgNykpCisjZGVmaW5lIExDQ1I1X0JTTShjaCkJKDEgPDwgKGNoICsgMTUpKQor I2RlZmluZSBMQ0NSNV9JVU0oY2gpCSgxIDw8IChjaCArIDIzKSkKKyNkZWZpbmUgT1ZMQzFfRU4J KDEgPDwgMzEpCisjZGVmaW5lIENDUl9DRU4JCSgxIDw8IDMxKQorI2RlZmluZSBGQlJfQlJBCQko MSA8PCAwKQorI2RlZmluZSBGQlJfQklOVAkoMSA8PCAxKQorI2RlZmluZSBGQlJfU1JDQUREUgko MHhmZmZmZmZmIDw8IDQpCisjZGVmaW5lIExDU1IwX0xERAkoMSA8PCAwKQorI2RlZmluZSBMQ1NS MF9TT0YwCSgxIDw8IDEpCisjZGVmaW5lIExDU1IwX0JFUgkoMSA8PCAyKQorI2RlZmluZSBMQ1NS MF9BQkMJKDEgPDwgMykKKyNkZWZpbmUgTENTUjBfSVUwCSgxIDw8IDQpCisjZGVmaW5lIExDU1Iw X0lVMQkoMSA8PCA1KQorI2RlZmluZSBMQ1NSMF9PVQkoMSA8PCA2KQorI2RlZmluZSBMQ1NSMF9R RAkoMSA8PCA3KQorI2RlZmluZSBMQ1NSMF9FT0YwCSgxIDw8IDgpCisjZGVmaW5lIExDU1IwX0JT MAkoMSA8PCA5KQorI2RlZmluZSBMQ1NSMF9TSU5UCSgxIDw8IDEwKQorI2RlZmluZSBMQ1NSMF9S RFNUCSgxIDw8IDExKQorI2RlZmluZSBMQ1NSMF9DTURJTlQJKDEgPDwgMTIpCisjZGVmaW5lIExD U1IwX0JFUkNIKHgpCSgoKHgpICYgNykgPDwgMjgpCisjZGVmaW5lIExDU1IxX1NPRihjaCkJKDEg PDwgKGNoIC0gMSkpCisjZGVmaW5lIExDU1IxX0VPRihjaCkJKDEgPDwgKGNoICsgNykpCisjZGVm aW5lIExDU1IxX0JTKGNoKQkoMSA8PCAoY2ggKyAxNSkpCisjZGVmaW5lIExDU1IxX0lVKGNoKQko MSA8PCAoY2ggKyAyMykpCisjZGVmaW5lIExEQ01EX0xFTkdUSCh4KQkoKHgpICYgMHgwMDFmZmZm YykKKyNkZWZpbmUgTERDTURfRU9GSU5UCSgxIDw8IDIxKQorI2RlZmluZSBMRENNRF9TT0ZJTlQJ KDEgPDwgMjIpCisjZGVmaW5lIExEQ01EX1BBTAkoMSA8PCAyNikKKworLyogUm91dGUgaW50ZXJu YWwgaW50ZXJydXB0IGxpbmVzIHRvIHRoZSBnbG9iYWwgSUMgKi8KK3N0YXRpYyB2b2lkIHB4YTJ4 eF9sY2RjX2ludF91cGRhdGUoc3RydWN0IHB4YTJ4eF9sY2RjX3MgKnMpCit7CisgICAgaW50IGxl dmVsID0gMDsKKyAgICBsZXZlbCB8PSAocy0+c3RhdHVzWzBdICYgTENTUjBfTEREKSAgICAmJiAh KHMtPmNvbnRyb2xbMF0gJiBMQ0NSMF9MRE0pOworICAgIGxldmVsIHw9IChzLT5zdGF0dXNbMF0g JiBMQ1NSMF9TT0YwKSAgICYmICEocy0+Y29udHJvbFswXSAmIExDQ1IwX1NPRk0wKTsKKyAgICBs ZXZlbCB8PSAocy0+c3RhdHVzWzBdICYgTENTUjBfSVUwKSAgICAmJiAhKHMtPmNvbnRyb2xbMF0g JiBMQ0NSMF9JVU0pOworICAgIGxldmVsIHw9IChzLT5zdGF0dXNbMF0gJiBMQ1NSMF9JVTEpICAg ICYmICEocy0+Y29udHJvbFs1XSAmIExDQ1I1X0lVTSgxKSk7CisgICAgbGV2ZWwgfD0gKHMtPnN0 YXR1c1swXSAmIExDU1IwX09VKSAgICAgJiYgIShzLT5jb250cm9sWzBdICYgTENDUjBfT1VNKTsK KyAgICBsZXZlbCB8PSAocy0+c3RhdHVzWzBdICYgTENTUjBfUUQpICAgICAmJiAhKHMtPmNvbnRy b2xbMF0gJiBMQ0NSMF9RRE0pOworICAgIGxldmVsIHw9IChzLT5zdGF0dXNbMF0gJiBMQ1NSMF9F T0YwKSAgICYmICEocy0+Y29udHJvbFswXSAmIExDQ1IwX0VPRk0wKTsKKyAgICBsZXZlbCB8PSAo cy0+c3RhdHVzWzBdICYgTENTUjBfQlMwKSAgICAmJiAhKHMtPmNvbnRyb2xbMF0gJiBMQ0NSMF9C U00wKTsKKyAgICBsZXZlbCB8PSAocy0+c3RhdHVzWzBdICYgTENTUjBfUkRTVCkgICAmJiAhKHMt PmNvbnRyb2xbMF0gJiBMQ0NSMF9SRFNUTSk7CisgICAgbGV2ZWwgfD0gKHMtPnN0YXR1c1swXSAm IExDU1IwX0NNRElOVCkgJiYgIShzLT5jb250cm9sWzBdICYgTENDUjBfQ01ESU0pOworICAgIGxl dmVsIHw9IChzLT5zdGF0dXNbMV0gJiB+cy0+Y29udHJvbFs1XSk7CisKKyAgICBwaWNfc2V0X2ly cV9uZXcocy0+cGljLCBQWEEyWFhfUElDX0xDRCwgISFsZXZlbCk7CisgICAgcy0+aXJxbGV2ZWwg PSBsZXZlbDsKK30KKworLyogU2V0IEJyYW5jaCBTdGF0dXMgaW50ZXJydXB0IGhpZ2ggYW5kIHBv a2UgYXNzb2NpYXRlZCByZWdpc3RlcnMgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBweGEyeHhfZG1h X2JzX3NldChzdHJ1Y3QgcHhhMnh4X2xjZGNfcyAqcywgaW50IGNoKQoreworICAgIGludCB1bm1h c2tlZDsKKyAgICBpZiAoY2ggPT0gMCkgeworICAgICAgICBzLT5zdGF0dXNbMF0gfD0gTENTUjBf QlMwOworICAgICAgICB1bm1hc2tlZCA9ICEocy0+Y29udHJvbFswXSAmIExDQ1IwX0JTTTApOwor ICAgIH0gZWxzZSB7CisgICAgICAgIHMtPnN0YXR1c1sxXSB8PSBMQ1NSMV9CUyhjaCk7CisgICAg ICAgIHVubWFza2VkID0gIShzLT5jb250cm9sWzVdICYgTENDUjVfQlNNKGNoKSk7CisgICAgfQor CisgICAgaWYgKHVubWFza2VkKSB7CisgICAgICAgIGlmIChzLT5pcnFsZXZlbCkKKyAgICAgICAg ICAgIHMtPnN0YXR1c1swXSB8PSBMQ1NSMF9TSU5UOworICAgICAgICBlbHNlCisgICAgICAgICAg ICBzLT5saWlkciA9IHMtPmRtYV9jaFtjaF0uaWQ7CisgICAgfQorfQorCisvKiBTZXQgU3RhcnQg T2YgRnJhbWUgU3RhdHVzIGludGVycnVwdCBoaWdoIGFuZCBwb2tlIGFzc29jaWF0ZWQgcmVnaXN0 ZXJzICovCitzdGF0aWMgaW5saW5lIHZvaWQgcHhhMnh4X2RtYV9zb2Zfc2V0KHN0cnVjdCBweGEy eHhfbGNkY19zICpzLCBpbnQgY2gpCit7CisgICAgaW50IHVubWFza2VkOworICAgIGlmICghKHMt PmRtYV9jaFtjaF0uY29tbWFuZCAmIExEQ01EX1NPRklOVCkpCisgICAgICAgIHJldHVybjsKKwor ICAgIGlmIChjaCA9PSAwKSB7CisgICAgICAgIHMtPnN0YXR1c1swXSB8PSBMQ1NSMF9TT0YwOwor ICAgICAgICB1bm1hc2tlZCA9ICEocy0+Y29udHJvbFswXSAmIExDQ1IwX1NPRk0wKTsKKyAgICB9 IGVsc2UgeworICAgICAgICBzLT5zdGF0dXNbMV0gfD0gTENTUjFfU09GKGNoKTsKKyAgICAgICAg dW5tYXNrZWQgPSAhKHMtPmNvbnRyb2xbNV0gJiBMQ0NSNV9TT0ZNKGNoKSk7CisgICAgfQorCisg ICAgaWYgKHVubWFza2VkKSB7CisgICAgICAgIGlmIChzLT5pcnFsZXZlbCkKKyAgICAgICAgICAg IHMtPnN0YXR1c1swXSB8PSBMQ1NSMF9TSU5UOworICAgICAgICBlbHNlCisgICAgICAgICAgICBz LT5saWlkciA9IHMtPmRtYV9jaFtjaF0uaWQ7CisgICAgfQorfQorCisvKiBTZXQgRW5kIE9mIEZy YW1lIFN0YXR1cyBpbnRlcnJ1cHQgaGlnaCBhbmQgcG9rZSBhc3NvY2lhdGVkIHJlZ2lzdGVycyAq Lworc3RhdGljIGlubGluZSB2b2lkIHB4YTJ4eF9kbWFfZW9mX3NldChzdHJ1Y3QgcHhhMnh4X2xj ZGNfcyAqcywgaW50IGNoKQoreworICAgIGludCB1bm1hc2tlZDsKKyAgICBpZiAoIShzLT5kbWFf Y2hbY2hdLmNvbW1hbmQgJiBMRENNRF9FT0ZJTlQpKQorICAgICAgICByZXR1cm47CisKKyAgICBp ZiAoY2ggPT0gMCkgeworICAgICAgICBzLT5zdGF0dXNbMF0gfD0gTENTUjBfRU9GMDsKKyAgICAg ICAgdW5tYXNrZWQgPSAhKHMtPmNvbnRyb2xbMF0gJiBMQ0NSMF9FT0ZNMCk7CisgICAgfSBlbHNl IHsKKyAgICAgICAgcy0+c3RhdHVzWzFdIHw9IExDU1IxX0VPRihjaCk7CisgICAgICAgIHVubWFz a2VkID0gIShzLT5jb250cm9sWzVdICYgTENDUjVfRU9GTShjaCkpOworICAgIH0KKworICAgIGlm ICh1bm1hc2tlZCkgeworICAgICAgICBpZiAocy0+aXJxbGV2ZWwpCisgICAgICAgICAgICBzLT5z dGF0dXNbMF0gfD0gTENTUjBfU0lOVDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcy0+bGlp ZHIgPSBzLT5kbWFfY2hbY2hdLmlkOworICAgIH0KK30KKworLyogU2V0IEJ1cyBFcnJvciBTdGF0 dXMgaW50ZXJydXB0IGhpZ2ggYW5kIHBva2UgYXNzb2NpYXRlZCByZWdpc3RlcnMgKi8KK3N0YXRp YyBpbmxpbmUgdm9pZCBweGEyeHhfZG1hX2Jlcl9zZXQoc3RydWN0IHB4YTJ4eF9sY2RjX3MgKnMs IGludCBjaCkKK3sKKyAgICBzLT5zdGF0dXNbMF0gfD0gTENTUjBfQkVSQ0goY2gpIHwgTENTUjBf QkVSOworICAgIGlmIChzLT5pcnFsZXZlbCkKKyAgICAgICAgcy0+c3RhdHVzWzBdIHw9IExDU1Iw X1NJTlQ7CisgICAgZWxzZQorICAgICAgICBzLT5saWlkciA9IHMtPmRtYV9jaFtjaF0uaWQ7Cit9 CisKKy8qIFNldCBSZWFkIFN0YXR1cyBpbnRlcnJ1cHQgaGlnaCBhbmQgcG9rZSBhc3NvY2lhdGVk IHJlZ2lzdGVycyAqLworc3RhdGljIGlubGluZSB2b2lkIHB4YTJ4eF9kbWFfcmRzdF9zZXQoc3Ry dWN0IHB4YTJ4eF9sY2RjX3MgKnMpCit7CisgICAgcy0+c3RhdHVzWzBdIHw9IExDU1IwX1JEU1Q7 CisgICAgaWYgKHMtPmlycWxldmVsICYmICEocy0+Y29udHJvbFswXSAmIExDQ1IwX1JEU1RNKSkK KyAgICAgICAgcy0+c3RhdHVzWzBdIHw9IExDU1IwX1NJTlQ7Cit9CisKKy8qIExvYWQgbmV3IEZy YW1lIERlc2NyaXB0b3JzIGZyb20gRE1BICovCitzdGF0aWMgdm9pZCBweGEyeHhfZGVzY3JpcHRv cl9sb2FkKHN0cnVjdCBweGEyeHhfbGNkY19zICpzKQoreworICAgIHN0cnVjdCBweGFfZnJhbWVf ZGVzY3JpcHRvcl9zICpkZXNjW1BYQV9MQ0RETUFfQ0hBTlNdOworICAgIHRhcmdldF9waHlzX2Fk ZHJfdCBkZXNjcHRyOworICAgIGludCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IFBYQV9MQ0RE TUFfQ0hBTlM7IGkgKyspIHsKKyAgICAgICAgZGVzY1tpXSA9IDA7CisgICAgICAgIHMtPmRtYV9j aFtpXS5zb3VyY2UgPSAwOworCisgICAgICAgIGlmICghcy0+ZG1hX2NoW2ldLnVwKQorICAgICAg ICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHMtPmRtYV9jaFtpXS5icmFuY2ggJiBGQlJf QlJBKSB7CisgICAgICAgICAgICBkZXNjcHRyID0gcy0+ZG1hX2NoW2ldLmJyYW5jaCAmIEZCUl9T UkNBRERSOworICAgICAgICAgICAgaWYgKHMtPmRtYV9jaFtpXS5icmFuY2ggJiBGQlJfQklOVCkK KyAgICAgICAgICAgICAgICBweGEyeHhfZG1hX2JzX3NldChzLCBpKTsKKyAgICAgICAgICAgIHMt PmRtYV9jaFtpXS5icmFuY2ggJj0gfkZCUl9CUkE7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg ICAgZGVzY3B0ciA9IHMtPmRtYV9jaFtpXS5kZXNjcmlwdG9yOworCisgICAgICAgIGlmICghKGRl c2NwdHIgPj0gUFhBMlhYX1JBTV9CQVNFICYmIGRlc2NwdHIgKworICAgICAgICAgICAgICAgICAg ICBzaXplb2YoKmRlc2NbaV0pIDw9IFBYQTJYWF9SQU1fQkFTRSArIHBoeXNfcmFtX3NpemUpKQor ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZGVzY3B0ciAtPSBQWEEyWFhfUkFNX0JB U0U7CisgICAgICAgIGRlc2NbaV0gPSAoc3RydWN0IHB4YV9mcmFtZV9kZXNjcmlwdG9yX3MgKikg KHBoeXNfcmFtX2Jhc2UgKyBkZXNjcHRyKTsKKyAgICAgICAgcy0+ZG1hX2NoW2ldLmRlc2NyaXB0 b3IgPSBkZXNjW2ldLT5mZGFkZHI7CisgICAgICAgIHMtPmRtYV9jaFtpXS5zb3VyY2UgPSBkZXNj W2ldLT5mc2FkZHI7CisgICAgICAgIHMtPmRtYV9jaFtpXS5pZCA9IGRlc2NbaV0tPmZpZHI7Cisg ICAgICAgIHMtPmRtYV9jaFtpXS5jb21tYW5kID0gZGVzY1tpXS0+bGRjbWQ7CisgICAgfQorfQor CitzdGF0aWMgdWludDMyX3QgcHhhMnh4X2xjZGNfcmVhZCh2b2lkICpvcGFxdWUsIHRhcmdldF9w aHlzX2FkZHJfdCBvZmZzZXQpCit7CisgICAgc3RydWN0IHB4YTJ4eF9sY2RjX3MgKnMgPSAoc3Ry dWN0IHB4YTJ4eF9sY2RjX3MgKikgb3BhcXVlOworICAgIGludCBjaDsKKyAgICBvZmZzZXQgLT0g cy0+YmFzZTsKKworICAgIHN3aXRjaCAob2Zmc2V0KSB7CisgICAgY2FzZSBMQ0NSMDoKKyAgICAg ICAgcmV0dXJuIHMtPmNvbnRyb2xbMF07CisgICAgY2FzZSBMQ0NSMToKKyAgICAgICAgcmV0dXJu IHMtPmNvbnRyb2xbMV07CisgICAgY2FzZSBMQ0NSMjoKKyAgICAgICAgcmV0dXJuIHMtPmNvbnRy b2xbMl07CisgICAgY2FzZSBMQ0NSMzoKKyAgICAgICAgcmV0dXJuIHMtPmNvbnRyb2xbM107Cisg ICAgY2FzZSBMQ0NSNDoKKyAgICAgICAgcmV0dXJuIHMtPmNvbnRyb2xbNF07CisgICAgY2FzZSBM Q0NSNToKKyAgICAgICAgcmV0dXJuIHMtPmNvbnRyb2xbNV07CisKKyAgICBjYXNlIE9WTDFDMToK KyAgICAgICAgcmV0dXJuIHMtPm92bDFjWzBdOworICAgIGNhc2UgT1ZMMUMyOgorICAgICAgICBy ZXR1cm4gcy0+b3ZsMWNbMV07CisgICAgY2FzZSBPVkwyQzE6CisgICAgICAgIHJldHVybiBzLT5v dmwyY1swXTsKKyAgICBjYXNlIE9WTDJDMjoKKyAgICAgICAgcmV0dXJuIHMtPm92bDJjWzFdOwor CisgICAgY2FzZSBDQ1I6CisgICAgICAgIHJldHVybiBzLT5jY3I7CisKKyAgICBjYXNlIENNRENS OgorICAgICAgICByZXR1cm4gcy0+Y21kY3I7CisKKyAgICBjYXNlIFRSR0JSOgorICAgICAgICBy ZXR1cm4gcy0+dHJnYnI7CisgICAgY2FzZSBUQ1I6CisgICAgICAgIHJldHVybiBzLT50Y3I7CisK KyAgICBjYXNlIDB4MjAwIC4uLiAweDEwMDA6CS8qIERNQSBwZXItY2hhbm5lbCByZWdpc3RlcnMg Ki8KKyAgICAgICAgY2ggPSAob2Zmc2V0IC0gMHgyMDApID4+IDQ7CisgICAgICAgIGlmICghKGNo ID49IDAgJiYgY2ggPCBQWEFfTENERE1BX0NIQU5TKSkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsK KworICAgICAgICBzd2l0Y2ggKG9mZnNldCAmIDB4ZikgeworICAgICAgICBjYXNlIERNQV9GREFE UjoKKyAgICAgICAgICAgIHJldHVybiBzLT5kbWFfY2hbY2hdLmRlc2NyaXB0b3I7CisgICAgICAg IGNhc2UgRE1BX0ZTQURSOgorICAgICAgICAgICAgcmV0dXJuIHMtPmRtYV9jaFtjaF0uc291cmNl OworICAgICAgICBjYXNlIERNQV9GSURSOgorICAgICAgICAgICAgcmV0dXJuIHMtPmRtYV9jaFtj aF0uaWQ7CisgICAgICAgIGNhc2UgRE1BX0xEQ01EOgorICAgICAgICAgICAgcmV0dXJuIHMtPmRt YV9jaFtjaF0uY29tbWFuZDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGdvdG8gZmFp bDsKKyAgICAgICAgfQorCisgICAgY2FzZSBGQlIwOgorICAgICAgICByZXR1cm4gcy0+ZG1hX2No WzBdLmJyYW5jaDsKKyAgICBjYXNlIEZCUjE6CisgICAgICAgIHJldHVybiBzLT5kbWFfY2hbMV0u YnJhbmNoOworICAgIGNhc2UgRkJSMjoKKyAgICAgICAgcmV0dXJuIHMtPmRtYV9jaFsyXS5icmFu Y2g7CisgICAgY2FzZSBGQlIzOgorICAgICAgICByZXR1cm4gcy0+ZG1hX2NoWzNdLmJyYW5jaDsK KyAgICBjYXNlIEZCUjQ6CisgICAgICAgIHJldHVybiBzLT5kbWFfY2hbNF0uYnJhbmNoOworICAg IGNhc2UgRkJSNToKKyAgICAgICAgcmV0dXJuIHMtPmRtYV9jaFs1XS5icmFuY2g7CisgICAgY2Fz ZSBGQlI2OgorICAgICAgICByZXR1cm4gcy0+ZG1hX2NoWzZdLmJyYW5jaDsKKworICAgIGNhc2Ug QlNDTlRSOgorICAgICAgICByZXR1cm4gcy0+YnNjbnRyOworCisgICAgY2FzZSBQUlNSOgorICAg ICAgICByZXR1cm4gMDsKKworICAgIGNhc2UgTENTUjA6CisgICAgICAgIHJldHVybiBzLT5zdGF0 dXNbMF07CisgICAgY2FzZSBMQ1NSMToKKyAgICAgICAgcmV0dXJuIHMtPnN0YXR1c1sxXTsKKyAg ICBjYXNlIExJSURSOgorICAgICAgICByZXR1cm4gcy0+bGlpZHI7CisKKyAgICBkZWZhdWx0Ogor ICAgIGZhaWw6CisgICAgICAgIGNwdV9hYm9ydChjcHVfc2luZ2xlX2VudiwKKyAgICAgICAgICAg ICAgICAiJXM6IEJhZCBvZmZzZXQgIiBSRUdfRk1UICJcbiIsIF9fRlVOQ1RJT05fXywgb2Zmc2V0 KTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHhhMnh4X2xjZGNf d3JpdGUodm9pZCAqb3BhcXVlLAorICAgICAgICAgICAgICAgIHRhcmdldF9waHlzX2FkZHJfdCBv ZmZzZXQsIHVpbnQzMl90IHZhbHVlKQoreworICAgIHN0cnVjdCBweGEyeHhfbGNkY19zICpzID0g KHN0cnVjdCBweGEyeHhfbGNkY19zICopIG9wYXF1ZTsKKyAgICBpbnQgY2g7CisgICAgb2Zmc2V0 IC09IHMtPmJhc2U7CisKKyAgICBzd2l0Y2ggKG9mZnNldCkgeworICAgIGNhc2UgTENDUjA6Cisg ICAgICAgIC8qIEFDSyBRdWljayBEaXNhYmxlIGRvbmUgKi8KKyAgICAgICAgaWYgKChzLT5jb250 cm9sWzBdICYgTENDUjBfRU5CKSAmJiAhKHZhbHVlICYgTENDUjBfRU5CKSkKKyAgICAgICAgICAg IHMtPnN0YXR1c1swXSB8PSBMQ1NSMF9RRDsKKworICAgICAgICBpZiAoIShzLT5jb250cm9sWzBd ICYgTENDUjBfTENEVCkgJiYgKHZhbHVlICYgTENDUjBfTENEVCkpCisgICAgICAgICAgICBwcmlu dGYoIiVzOiBpbnRlcm5hbCBmcmFtZSBidWZmZXIgdW5zdXBwb3J0ZWRcbiIsIF9fRlVOQ1RJT05f Xyk7CisKKyAgICAgICAgaWYgKChzLT5jb250cm9sWzNdICYgTENDUjNfQVBJKSAmJgorICAgICAg ICAgICAgICAgICh2YWx1ZSAmIExDQ1IwX0VOQikgJiYgISh2YWx1ZSAmIExDQ1IwX0xDRFQpKQor ICAgICAgICAgICAgcy0+c3RhdHVzWzBdIHw9IExDU1IwX0FCQzsKKworICAgICAgICBzLT5jb250 cm9sWzBdID0gdmFsdWUgJiAweDA3ZmZmZmZmOworICAgICAgICBweGEyeHhfbGNkY19pbnRfdXBk YXRlKHMpOworCisgICAgICAgIHMtPmRtYV9jaFswXS51cCA9ICEhKHZhbHVlICYgTENDUjBfRU5C KTsKKyAgICAgICAgcy0+ZG1hX2NoWzFdLnVwID0gKHMtPm92bDFjWzBdICYgT1ZMQzFfRU4pIHx8 ICh2YWx1ZSAmIExDQ1IwX1NEUyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBMQ0NSMToK KyAgICAgICAgcy0+Y29udHJvbFsxXSA9IHZhbHVlOworICAgICAgICBicmVhazsKKworICAgIGNh c2UgTENDUjI6CisgICAgICAgIHMtPmNvbnRyb2xbMl0gPSB2YWx1ZTsKKyAgICAgICAgYnJlYWs7 CisKKyAgICBjYXNlIExDQ1IzOgorICAgICAgICBzLT5jb250cm9sWzNdID0gdmFsdWUgJiAweGVm ZmZmZmZmOworICAgICAgICBzLT5icHAgPSBMQ0NSM19CUFAodmFsdWUpOworICAgICAgICBicmVh azsKKworICAgIGNhc2UgTENDUjQ6CisgICAgICAgIHMtPmNvbnRyb2xbNF0gPSB2YWx1ZSAmIDB4 ODNmZjgxZmY7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBMQ0NSNToKKyAgICAgICAgcy0+ Y29udHJvbFs1XSA9IHZhbHVlICYgMHgzZjNmM2YzZjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBj YXNlIE9WTDFDMToKKyAgICAgICAgaWYgKCEocy0+b3ZsMWNbMF0gJiBPVkxDMV9FTikgJiYgKHZh bHVlICYgT1ZMQzFfRU4pKQorICAgICAgICAgICAgcHJpbnRmKCIlczogT3ZlcmxheSAxIG5vdCBz dXBwb3J0ZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisKKyAgICAgICAgcy0+b3ZsMWNbMF0gPSB2YWx1 ZSAmIDB4ODBmZmZmZmY7CisgICAgICAgIHMtPmRtYV9jaFsxXS51cCA9ICh2YWx1ZSAmIE9WTEMx X0VOKSB8fCAocy0+Y29udHJvbFswXSAmIExDQ1IwX1NEUyk7CisgICAgICAgIGJyZWFrOworCisg ICAgY2FzZSBPVkwxQzI6CisgICAgICAgIHMtPm92bDFjWzFdID0gdmFsdWUgJiAweDAwMGZmZmZm OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgT1ZMMkMxOgorICAgICAgICBpZiAoIShzLT5v dmwyY1swXSAmIE9WTEMxX0VOKSAmJiAodmFsdWUgJiBPVkxDMV9FTikpCisgICAgICAgICAgICBw cmludGYoIiVzOiBPdmVybGF5IDIgbm90IHN1cHBvcnRlZFxuIiwgX19GVU5DVElPTl9fKTsKKwor ICAgICAgICBzLT5vdmwyY1swXSA9IHZhbHVlICYgMHg4MGZmZmZmZjsKKyAgICAgICAgcy0+ZG1h X2NoWzJdLnVwID0gISEodmFsdWUgJiBPVkxDMV9FTik7CisgICAgICAgIHMtPmRtYV9jaFszXS51 cCA9ICEhKHZhbHVlICYgT1ZMQzFfRU4pOworICAgICAgICBzLT5kbWFfY2hbNF0udXAgPSAhISh2 YWx1ZSAmIE9WTEMxX0VOKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE9WTDJDMjoKKyAg ICAgICAgcy0+b3ZsMmNbMV0gPSB2YWx1ZSAmIDB4MDA3ZmZmZmY7CisgICAgICAgIGJyZWFrOwor CisgICAgY2FzZSBDQ1I6CisgICAgICAgIGlmICghKHMtPmNjciAmIENDUl9DRU4pICYmICh2YWx1 ZSAmIENDUl9DRU4pKQorICAgICAgICAgICAgcHJpbnRmKCIlczogSGFyZHdhcmUgY3Vyc29yIHVu aW1wbGVtZW50ZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisKKyAgICAgICAgcy0+Y2NyID0gdmFsdWUg JiAweDgxZmZmZmU3OworICAgICAgICBzLT5kbWFfY2hbNV0udXAgPSAhISh2YWx1ZSAmIENDUl9D RU4pOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ01EQ1I6CisgICAgICAgIHMtPmNtZGNy ID0gdmFsdWUgJiAweGZmOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgVFJHQlI6CisgICAg ICAgIHMtPnRyZ2JyID0gdmFsdWUgJiAweDAwZmZmZmZmOworICAgICAgICBicmVhazsKKworICAg IGNhc2UgVENSOgorICAgICAgICBzLT50Y3IgPSB2YWx1ZSAmIDB4N2ZmZjsKKyAgICAgICAgYnJl YWs7CisKKyAgICBjYXNlIDB4MjAwIC4uLiAweDEwMDA6CS8qIERNQSBwZXItY2hhbm5lbCByZWdp c3RlcnMgKi8KKyAgICAgICAgY2ggPSAob2Zmc2V0IC0gMHgyMDApID4+IDQ7CisgICAgICAgIGlm ICghKGNoID49IDAgJiYgY2ggPCBQWEFfTENERE1BX0NIQU5TKSkKKyAgICAgICAgICAgIGdvdG8g ZmFpbDsKKworICAgICAgICBzd2l0Y2ggKG9mZnNldCAmIDB4ZikgeworICAgICAgICBjYXNlIERN QV9GREFEUjoKKyAgICAgICAgICAgIHMtPmRtYV9jaFtjaF0uZGVzY3JpcHRvciA9IHZhbHVlICYg MHhmZmZmZmZmMDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAg ICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl IEZCUjA6CisgICAgICAgIHMtPmRtYV9jaFswXS5icmFuY2ggPSB2YWx1ZSAmIDB4ZmZmZmZmZjM7 CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkJSMToKKyAgICAgICAgcy0+ZG1hX2NoWzFdLmJy YW5jaCA9IHZhbHVlICYgMHhmZmZmZmZmMzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGQlIy OgorICAgICAgICBzLT5kbWFfY2hbMl0uYnJhbmNoID0gdmFsdWUgJiAweGZmZmZmZmYzOworICAg ICAgICBicmVhazsKKyAgICBjYXNlIEZCUjM6CisgICAgICAgIHMtPmRtYV9jaFszXS5icmFuY2gg PSB2YWx1ZSAmIDB4ZmZmZmZmZjM7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkJSNDoKKyAg ICAgICAgcy0+ZG1hX2NoWzRdLmJyYW5jaCA9IHZhbHVlICYgMHhmZmZmZmZmMzsKKyAgICAgICAg YnJlYWs7CisgICAgY2FzZSBGQlI1OgorICAgICAgICBzLT5kbWFfY2hbNV0uYnJhbmNoID0gdmFs dWUgJiAweGZmZmZmZmYzOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZCUjY6CisgICAgICAg IHMtPmRtYV9jaFs2XS5icmFuY2ggPSB2YWx1ZSAmIDB4ZmZmZmZmZjM7CisgICAgICAgIGJyZWFr OworCisgICAgY2FzZSBCU0NOVFI6CisgICAgICAgIHMtPmJzY250ciA9IHZhbHVlICYgMHhmOwor ICAgICAgICBicmVhazsKKworICAgIGNhc2UgUFJTUjoKKyAgICAgICAgYnJlYWs7CisKKyAgICBj YXNlIExDU1IwOgorICAgICAgICBzLT5zdGF0dXNbMF0gJj0gfih2YWx1ZSAmIDB4ZmZmKTsKKyAg ICAgICAgaWYgKHZhbHVlICYgTENTUjBfQkVSKQorICAgICAgICAgICAgcy0+c3RhdHVzWzBdICY9 IH5MQ1NSMF9CRVJDSCg3KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIExDU1IxOgorICAg ICAgICBzLT5zdGF0dXNbMV0gJj0gfih2YWx1ZSAmIDB4M2UzZjNmKTsKKyAgICAgICAgYnJlYWs7 CisKKyAgICBkZWZhdWx0OgorICAgIGZhaWw6CisgICAgICAgIGNwdV9hYm9ydChjcHVfc2luZ2xl X2VudiwKKyAgICAgICAgICAgICAgICAiJXM6IEJhZCBvZmZzZXQgIiBSRUdfRk1UICJcbiIsIF9f RlVOQ1RJT05fXywgb2Zmc2V0KTsKKyAgICB9Cit9CisKK3N0YXRpYyBDUFVSZWFkTWVtb3J5RnVu YyAqcHhhMnh4X2xjZGNfcmVhZGZuW10gPSB7CisgICAgcHhhMnh4X2xjZGNfcmVhZCwKKyAgICBw eGEyeHhfbGNkY19yZWFkLAorICAgIHB4YTJ4eF9sY2RjX3JlYWQKK307CisKK3N0YXRpYyBDUFVX cml0ZU1lbW9yeUZ1bmMgKnB4YTJ4eF9sY2RjX3dyaXRlZm5bXSA9IHsKKyAgICBweGEyeHhfbGNk Y193cml0ZSwKKyAgICBweGEyeHhfbGNkY193cml0ZSwKKyAgICBweGEyeHhfbGNkY193cml0ZQor fTsKKworc3RhdGljIGlubGluZQordWludDMyX3QgcmdiX3RvX3BpeGVsOCh1bnNpZ25lZCBpbnQg ciwgdW5zaWduZWQgaW50IGcsIHVuc2lnbmVkIGIpCit7CisgICAgcmV0dXJuICgociA+PiA1KSA8 PCA1KSB8ICgoZyA+PiA1KSA8PCAyKSB8IChiID4+IDYpOworfQorCitzdGF0aWMgaW5saW5lCit1 aW50MzJfdCByZ2JfdG9fcGl4ZWwxNSh1bnNpZ25lZCBpbnQgciwgdW5zaWduZWQgaW50IGcsIHVu c2lnbmVkIGIpCit7CisgICAgcmV0dXJuICgociA+PiAzKSA8PCAxMCkgfCAoKGcgPj4gMykgPDwg NSkgfCAoYiA+PiAzKTsKK30KKworc3RhdGljIGlubGluZQordWludDMyX3QgcmdiX3RvX3BpeGVs MTYodW5zaWduZWQgaW50IHIsIHVuc2lnbmVkIGludCBnLCB1bnNpZ25lZCBiKQoreworICAgIHJl dHVybiAoKHIgPj4gMykgPDwgMTEpIHwgKChnID4+IDIpIDw8IDUpIHwgKGIgPj4gMyk7Cit9CisK K3N0YXRpYyBpbmxpbmUKK3VpbnQzMl90IHJnYl90b19waXhlbDI0KHVuc2lnbmVkIGludCByLCB1 bnNpZ25lZCBpbnQgZywgdW5zaWduZWQgYikKK3sKKyAgICByZXR1cm4gKHIgPDwgMTYpIHwgKGcg PDwgOCkgfCBiOworfQorCitzdGF0aWMgaW5saW5lCit1aW50MzJfdCByZ2JfdG9fcGl4ZWwzMih1 bnNpZ25lZCBpbnQgciwgdW5zaWduZWQgaW50IGcsIHVuc2lnbmVkIGIpCit7CisgICAgcmV0dXJu IChyIDw8IDE2KSB8IChnIDw8IDgpIHwgYjsKK30KKworLyogTG9hZCBuZXcgcGFsZXR0ZSBmb3Ig YSBnaXZlbiBETUEgY2hhbm5lbCwgY29udmVydCB0byBpbnRlcm5hbCBmb3JtYXQgKi8KK3N0YXRp YyB2b2lkIHB4YTJ4eF9wYWxldHRlX3BhcnNlKHN0cnVjdCBweGEyeHhfbGNkY19zICpzLCBpbnQg Y2gsIGludCBicHApCit7CisgICAgaW50IGksIG4sIGZvcm1hdCwgciwgZywgYiwgYWxwaGE7Cisg ICAgdWludDMyX3QgKmRlc3QsICpzcmM7CisgICAgcy0+cGFsX2ZvciA9IExDQ1I0X1BBTEZPUihz LT5jb250cm9sWzRdKTsKKyAgICBmb3JtYXQgPSBzLT5wYWxfZm9yOworCisgICAgc3dpdGNoIChi cHApIHsKKyAgICBjYXNlIHB4YV9sY2RjXzJicHA6CisgICAgICAgIG4gPSA0OworICAgICAgICBi cmVhazsKKyAgICBjYXNlIHB4YV9sY2RjXzRicHA6CisgICAgICAgIG4gPSAxNjsKKyAgICAgICAg YnJlYWs7CisgICAgY2FzZSBweGFfbGNkY184YnBwOgorICAgICAgICBuID0gMjU2OworICAgICAg ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBmb3JtYXQgPSAwOworICAgICAgICByZXR1 cm47CisgICAgfQorCisgICAgc3JjID0gKHVpbnQzMl90ICopIHMtPmRtYV9jaFtjaF0ucGJ1ZmZl cjsKKyAgICBkZXN0ID0gKHVpbnQzMl90ICopIHMtPmRtYV9jaFtjaF0ucGFsZXR0ZTsKKyAgICBh bHBoYSA9IHIgPSBnID0gYiA9IDA7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSArKykgewor ICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAgICBjYXNlIDA6IC8qIDE2IGJwcCwgbm8g dHJhbnNwYXJlbmN5ICovCisgICAgICAgICAgICBhbHBoYSA9IDA7CisgICAgICAgICAgICBpZiAo cy0+Y29udHJvbFswXSAmIExDQ1IwX0NNUykKKyAgICAgICAgICAgICAgICByID0gZyA9IGIgPSAq c3JjICYgMHhmZjsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHIgPSAoKnNy YyAmIDB4ZjgwMCkgPj4gODsKKyAgICAgICAgICAgICAgICBnID0gKCpzcmMgJiAweDA3ZTApID4+ IDM7CisgICAgICAgICAgICAgICAgYiA9ICgqc3JjICYgMHgwMDFmKSA8PCAzOworICAgICAgICAg ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTogLyogMTYgYnBwIHBsdXMg dHJhbnNwYXJlbmN5ICovCisgICAgICAgICAgICBhbHBoYSA9ICpzcmMgJiAoMSA8PCAyNCk7Cisg ICAgICAgICAgICBpZiAocy0+Y29udHJvbFswXSAmIExDQ1IwX0NNUykKKyAgICAgICAgICAgICAg ICByID0gZyA9IGIgPSAqc3JjICYgMHhmZjsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg ICAgICAgIHIgPSAoKnNyYyAmIDB4ZjgwMCkgPj4gODsKKyAgICAgICAgICAgICAgICBnID0gKCpz cmMgJiAweDA3ZTApID4+IDM7CisgICAgICAgICAgICAgICAgYiA9ICgqc3JjICYgMHgwMDFmKSA8 PCAzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjog LyogMTggYnBwIHBsdXMgdHJhbnNwYXJlbmN5ICovCisgICAgICAgICAgICBhbHBoYSA9ICpzcmMg JiAoMSA8PCAyNCk7CisgICAgICAgICAgICBpZiAocy0+Y29udHJvbFswXSAmIExDQ1IwX0NNUykK KyAgICAgICAgICAgICAgICByID0gZyA9IGIgPSAqc3JjICYgMHhmZjsKKyAgICAgICAgICAgIGVs c2UgeworICAgICAgICAgICAgICAgIHIgPSAoKnNyYyAmIDB4ZjgwMDAwKSA+PiAxNjsKKyAgICAg ICAgICAgICAgICBnID0gKCpzcmMgJiAweDAwZmMwMCkgPj4gODsKKyAgICAgICAgICAgICAgICBi ID0gKCpzcmMgJiAweDAwMDBmOCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgY2FzZSAzOiAvKiAyNCBicHAgcGx1cyB0cmFuc3BhcmVuY3kgKi8KKyAgICAgICAg ICAgIGFscGhhID0gKnNyYyAmICgxIDw8IDI0KTsKKyAgICAgICAgICAgIGlmIChzLT5jb250cm9s WzBdICYgTENDUjBfQ01TKQorICAgICAgICAgICAgICAgIHIgPSBnID0gYiA9ICpzcmMgJiAweGZm OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgciA9ICgqc3JjICYgMHhmZjAw MDApID4+IDE2OworICAgICAgICAgICAgICAgIGcgPSAoKnNyYyAmIDB4MDBmZjAwKSA+PiA4Owor ICAgICAgICAgICAgICAgIGIgPSAoKnNyYyAmIDB4MDAwMGZmKTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAocy0+ZHMtPmRlcHRo KSB7CisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgICpkZXN0ID0gcmdiX3RvX3BpeGVsOChy LCBnLCBiKSB8IGFscGhhOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTU6Cisg ICAgICAgICAgICAqZGVzdCA9IHJnYl90b19waXhlbDE1KHIsIGcsIGIpIHwgYWxwaGE7CisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxNjoKKyAgICAgICAgICAgICpkZXN0ID0gcmdi X3RvX3BpeGVsMTYociwgZywgYikgfCBhbHBoYTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICBjYXNlIDI0OgorICAgICAgICAgICAgKmRlc3QgPSByZ2JfdG9fcGl4ZWwyNChyLCBnLCBiKSB8 IGFscGhhOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzI6CisgICAgICAgICAg ICAqZGVzdCA9IHJnYl90b19waXhlbDMyKHIsIGcsIGIpIHwgYWxwaGE7CisgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgfQorICAgICAgICBzcmMgKys7CisgICAgICAgIGRlc3QgKys7CisgICAg fQorfQorCitzdGF0aWMgdm9pZCBweGEyeHhfbGNkY19kbWEwX3JlZHJhd19ob3JpeihzdHJ1Y3Qg cHhhMnh4X2xjZGNfcyAqcywKKyAgICAgICAgICAgICAgICB1aW50OF90ICpmYiwgaW50ICptaW55 LCBpbnQgKm1heHkpCit7CisgICAgaW50IHksIHNyY193aWR0aCwgZGVzdF93aWR0aCwgZGlydHlb Ml07CisgICAgdWludDhfdCAqc3JjLCAqZGVzdDsKKyAgICByYW1fYWRkcl90IHgsIGFkZHIsIG5l d19hZGRyLCBzdGFydCwgZW5kOworICAgIGRyYXdmbiBmbiA9IDA7CisgICAgaWYgKHMtPmRlc3Rf d2lkdGgpCisgICAgICAgIGZuID0gcy0+bGluZV9mbltzLT50cmFuc3BdW3MtPmJwcF07CisgICAg aWYgKCFmbikKKyAgICAgICAgcmV0dXJuOworCisgICAgc3JjID0gZmI7CisgICAgc3JjX3dpZHRo ID0gKHMtPnhyZXMgKyAzKSAmIH4zOyAgICAgLyogUGFkIHRvIGEgNCBwaXhlbHMgbXVsdGlwbGUg Ki8KKyAgICBpZiAocy0+YnBwID09IHB4YV9sY2RjXzE5cGJwcCB8fCBzLT5icHAgPT0gcHhhX2xj ZGNfMThwYnBwKQorICAgICAgICBzcmNfd2lkdGggKj0gMzsKKyAgICBlbHNlIGlmIChzLT5icHAg PiBweGFfbGNkY18xNmJwcCkKKyAgICAgICAgc3JjX3dpZHRoICo9IDQ7CisgICAgZWxzZSBpZiAo cy0+YnBwID4gcHhhX2xjZGNfOGJwcCkKKyAgICAgICAgc3JjX3dpZHRoICo9IDI7CisKKyAgICBk ZXN0ID0gcy0+ZHMtPmRhdGE7CisgICAgZGVzdF93aWR0aCA9IHMtPnhyZXMgKiBzLT5kZXN0X3dp ZHRoOworCisgICAgYWRkciA9IChyYW1fYWRkcl90KSAoZmIgLSBwaHlzX3JhbV9iYXNlKTsKKyAg ICBzdGFydCA9IGFkZHIgKyBzLT55cmVzICogc3JjX3dpZHRoOworICAgIGVuZCA9IGFkZHI7Cisg ICAgZGlydHlbMF0gPSBkaXJ0eVsxXSA9IGNwdV9waHlzaWNhbF9tZW1vcnlfZ2V0X2RpcnR5KHN0 YXJ0LCBWR0FfRElSVFlfRkxBRyk7CisgICAgZm9yICh5ID0gMDsgeSA8IHMtPnlyZXM7IHkgKysp IHsKKyAgICAgICAgbmV3X2FkZHIgPSBhZGRyICsgc3JjX3dpZHRoOworICAgICAgICBmb3IgKHgg PSBhZGRyICsgVEFSR0VUX1BBR0VfU0laRTsgeCA8IG5ld19hZGRyOworICAgICAgICAgICAgICAg ICAgICAgICAgeCArPSBUQVJHRVRfUEFHRV9TSVpFKSB7CisgICAgICAgICAgICBkaXJ0eVsxXSA9 IGNwdV9waHlzaWNhbF9tZW1vcnlfZ2V0X2RpcnR5KHgsIFZHQV9ESVJUWV9GTEFHKTsKKyAgICAg ICAgICAgIGRpcnR5WzBdIHw9IGRpcnR5WzFdOworICAgICAgICB9CisgICAgICAgIGlmIChkaXJ0 eVswXSB8fCBzLT5pbnZhbGlkYXRlZCkgeworICAgICAgICAgICAgZm4oKHVpbnQzMl90ICopIHMt PmRtYV9jaFswXS5wYWxldHRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QsIHNy Yywgcy0+eHJlcywgcy0+ZGVzdF93aWR0aCk7CisgICAgICAgICAgICBpZiAoYWRkciA8IHN0YXJ0 KQorICAgICAgICAgICAgICAgIHN0YXJ0ID0gYWRkcjsKKyAgICAgICAgICAgIGlmIChuZXdfYWRk ciA+IGVuZCkKKyAgICAgICAgICAgICAgICBlbmQgPSBuZXdfYWRkcjsKKyAgICAgICAgICAgIGlm ICh5IDwgKm1pbnkpCisgICAgICAgICAgICAgICAgKm1pbnkgPSB5OworICAgICAgICAgICAgaWYg KHkgPj0gKm1heHkpCisgICAgICAgICAgICAgICAgKm1heHkgPSB5ICsgMTsKKyAgICAgICAgfQor ICAgICAgICBhZGRyID0gbmV3X2FkZHI7CisgICAgICAgIGRpcnR5WzBdID0gZGlydHlbMV07Cisg ICAgICAgIHNyYyArPSBzcmNfd2lkdGg7CisgICAgICAgIGRlc3QgKz0gZGVzdF93aWR0aDsKKyAg ICB9CisKKyAgICBpZiAoZW5kID4gc3RhcnQpCisgICAgICAgIGNwdV9waHlzaWNhbF9tZW1vcnlf cmVzZXRfZGlydHkoc3RhcnQsIGVuZCwgVkdBX0RJUlRZX0ZMQUcpOworfQorCitzdGF0aWMgdm9p ZCBweGEyeHhfbGNkY19kbWEwX3JlZHJhd192ZXJ0KHN0cnVjdCBweGEyeHhfbGNkY19zICpzLAor ICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmZiLCBpbnQgKm1pbnksIGludCAqbWF4eSkKK3sKKyAg ICBpbnQgeSwgc3JjX3dpZHRoLCBkZXN0X3dpZHRoLCBkaXJ0eVsyXTsKKyAgICB1aW50OF90ICpz cmMsICpkZXN0OworICAgIHJhbV9hZGRyX3QgeCwgYWRkciwgbmV3X2FkZHIsIHN0YXJ0LCBlbmQ7 CisgICAgZHJhd2ZuIGZuID0gMDsKKyAgICBpZiAocy0+ZGVzdF93aWR0aCkKKyAgICAgICAgZm4g PSBzLT5saW5lX2ZuW3MtPnRyYW5zcF1bcy0+YnBwXTsKKyAgICBpZiAoIWZuKQorICAgICAgICBy ZXR1cm47CisKKyAgICBzcmMgPSBmYjsKKyAgICBzcmNfd2lkdGggPSAocy0+eHJlcyArIDMpICYg fjM7ICAgICAvKiBQYWQgdG8gYSA0IHBpeGVscyBtdWx0aXBsZSAqLworICAgIGlmIChzLT5icHAg PT0gcHhhX2xjZGNfMTlwYnBwIHx8IHMtPmJwcCA9PSBweGFfbGNkY18xOHBicHApCisgICAgICAg IHNyY193aWR0aCAqPSAzOworICAgIGVsc2UgaWYgKHMtPmJwcCA+IHB4YV9sY2RjXzE2YnBwKQor ICAgICAgICBzcmNfd2lkdGggKj0gNDsKKyAgICBlbHNlIGlmIChzLT5icHAgPiBweGFfbGNkY184 YnBwKQorICAgICAgICBzcmNfd2lkdGggKj0gMjsKKworICAgIGRlc3Rfd2lkdGggPSBzLT55cmVz ICogcy0+ZGVzdF93aWR0aDsKKyAgICBkZXN0ID0gcy0+ZHMtPmRhdGEgKyBkZXN0X3dpZHRoICog KHMtPnhyZXMgLSAxKTsKKworICAgIGFkZHIgPSAocmFtX2FkZHJfdCkgKGZiIC0gcGh5c19yYW1f YmFzZSk7CisgICAgc3RhcnQgPSBhZGRyICsgcy0+eXJlcyAqIHNyY193aWR0aDsKKyAgICBlbmQg PSBhZGRyOworICAgIGRpcnR5WzBdID0gZGlydHlbMV0gPSBjcHVfcGh5c2ljYWxfbWVtb3J5X2dl dF9kaXJ0eShzdGFydCwgVkdBX0RJUlRZX0ZMQUcpOworICAgIGZvciAoeSA9IDA7IHkgPCBzLT55 cmVzOyB5ICsrKSB7CisgICAgICAgIG5ld19hZGRyID0gYWRkciArIHNyY193aWR0aDsKKyAgICAg ICAgZm9yICh4ID0gYWRkciArIFRBUkdFVF9QQUdFX1NJWkU7IHggPCBuZXdfYWRkcjsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHggKz0gVEFSR0VUX1BBR0VfU0laRSkgeworICAgICAgICAgICAg ZGlydHlbMV0gPSBjcHVfcGh5c2ljYWxfbWVtb3J5X2dldF9kaXJ0eSh4LCBWR0FfRElSVFlfRkxB Ryk7CisgICAgICAgICAgICBkaXJ0eVswXSB8PSBkaXJ0eVsxXTsKKyAgICAgICAgfQorICAgICAg ICBpZiAoZGlydHlbMF0gfHwgcy0+aW52YWxpZGF0ZWQpIHsKKyAgICAgICAgICAgIGZuKCh1aW50 MzJfdCAqKSBzLT5kbWFfY2hbMF0ucGFsZXR0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkZXN0LCBzcmMsIHMtPnhyZXMsIC1kZXN0X3dpZHRoKTsKKyAgICAgICAgICAgIGlmIChhZGRy IDwgc3RhcnQpCisgICAgICAgICAgICAgICAgc3RhcnQgPSBhZGRyOworICAgICAgICAgICAgaWYg KG5ld19hZGRyID4gZW5kKQorICAgICAgICAgICAgICAgIGVuZCA9IG5ld19hZGRyOworICAgICAg ICAgICAgaWYgKHkgPCAqbWlueSkKKyAgICAgICAgICAgICAgICAqbWlueSA9IHk7CisgICAgICAg ICAgICBpZiAoeSA+PSAqbWF4eSkKKyAgICAgICAgICAgICAgICAqbWF4eSA9IHkgKyAxOworICAg ICAgICB9CisgICAgICAgIGFkZHIgPSBuZXdfYWRkcjsKKyAgICAgICAgZGlydHlbMF0gPSBkaXJ0 eVsxXTsKKyAgICAgICAgc3JjICs9IHNyY193aWR0aDsKKyAgICAgICAgZGVzdCArPSBzLT5kZXN0 X3dpZHRoOworICAgIH0KKworICAgIGlmIChlbmQgPiBzdGFydCkKKyAgICAgICAgY3B1X3BoeXNp Y2FsX21lbW9yeV9yZXNldF9kaXJ0eShzdGFydCwgZW5kLCBWR0FfRElSVFlfRkxBRyk7Cit9CisK K3N0YXRpYyB2b2lkIHB4YTJ4eF9sY2RjX3Jlc2l6ZShzdHJ1Y3QgcHhhMnh4X2xjZGNfcyAqcykK K3sKKyAgICBpbnQgd2lkdGgsIGhlaWdodDsKKyAgICBpZiAoIShzLT5jb250cm9sWzBdICYgTEND UjBfRU5CKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgd2lkdGggPSBMQ0NSMV9QUEwocy0+Y29u dHJvbFsxXSkgKyAxOworICAgIGhlaWdodCA9IExDQ1IyX0xQUChzLT5jb250cm9sWzJdKSArIDE7 CisKKyAgICBpZiAod2lkdGggIT0gcy0+eHJlcyB8fCBoZWlnaHQgIT0gcy0+eXJlcykgeworICAg ICAgICBpZiAocy0+b3JpZW50YXRpb24pCisgICAgICAgICAgICBkcHlfcmVzaXplKHMtPmRzLCBo ZWlnaHQsIHdpZHRoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZHB5X3Jlc2l6ZShzLT5k cywgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIHMtPmludmFsaWRhdGVkID0gMTsKKyAgICAgICAg cy0+eHJlcyA9IHdpZHRoOworICAgICAgICBzLT55cmVzID0gaGVpZ2h0OworICAgIH0KK30KKwor c3RhdGljIHZvaWQgcHhhMnh4X3VwZGF0ZV9kaXNwbGF5KHZvaWQgKm9wYXF1ZSkKK3sKKyAgICBz dHJ1Y3QgcHhhMnh4X2xjZGNfcyAqcyA9IChzdHJ1Y3QgcHhhMnh4X2xjZGNfcyAqKSBvcGFxdWU7 CisgICAgdWludDhfdCAqZmI7CisgICAgdGFyZ2V0X3BoeXNfYWRkcl90IGZicHRyOworICAgIGlu dCBtaW55LCBtYXh5OworICAgIGludCBjaDsKKyAgICBpZiAoIShzLT5jb250cm9sWzBdICYgTEND UjBfRU5CKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHhhMnh4X2Rlc2NyaXB0b3JfbG9hZChz KTsKKworICAgIHB4YTJ4eF9sY2RjX3Jlc2l6ZShzKTsKKyAgICBtaW55ID0gcy0+eXJlczsKKyAg ICBtYXh5ID0gMDsKKyAgICBzLT50cmFuc3AgPSBzLT5kbWFfY2hbMl0udXAgfHwgcy0+ZG1hX2No WzNdLnVwOworICAgIC8qIE5vdGU6IFdpdGggb3ZlcmxheSBwbGFuZXMgdGhlIG9yZGVyIGRlcGVu ZHMgb24gTENDUjAgYml0IDI1LiAgKi8KKyAgICBmb3IgKGNoID0gMDsgY2ggPCBQWEFfTENERE1B X0NIQU5TOyBjaCArKykKKyAgICAgICAgaWYgKHMtPmRtYV9jaFtjaF0udXApIHsKKyAgICAgICAg ICAgIGlmICghcy0+ZG1hX2NoW2NoXS5zb3VyY2UpIHsKKyAgICAgICAgICAgICAgICBweGEyeHhf ZG1hX2Jlcl9zZXQocywgY2gpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg ICAgfQorICAgICAgICAgICAgZmJwdHIgPSBzLT5kbWFfY2hbY2hdLnNvdXJjZTsKKyAgICAgICAg ICAgIGlmICghKGZicHRyID49IFBYQTJYWF9SQU1fQkFTRSAmJgorICAgICAgICAgICAgICAgICAg ICBmYnB0ciA8PSBQWEEyWFhfUkFNX0JBU0UgKyBwaHlzX3JhbV9zaXplKSkgeworICAgICAgICAg ICAgICAgIHB4YTJ4eF9kbWFfYmVyX3NldChzLCBjaCk7CisgICAgICAgICAgICAgICAgY29udGlu dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmYnB0ciAtPSBQWEEyWFhfUkFNX0JBU0U7 CisgICAgICAgICAgICBmYiA9IHBoeXNfcmFtX2Jhc2UgKyBmYnB0cjsKKworICAgICAgICAgICAg aWYgKHMtPmRtYV9jaFtjaF0uY29tbWFuZCAmIExEQ01EX1BBTCkgeworICAgICAgICAgICAgICAg IG1lbWNweShzLT5kbWFfY2hbY2hdLnBidWZmZXIsIGZiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBNQVgoTERDTURfTEVOR1RIKHMtPmRtYV9jaFtjaF0uY29tbWFuZCksCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzLT5kbWFfY2hbY2hdLnBidWZmZXIp KSk7CisgICAgICAgICAgICAgICAgcHhhMnh4X3BhbGV0dGVfcGFyc2UocywgY2gsIHMtPmJwcCk7 CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8qIERvIHdlIG5lZWQgdG8g cmVwYXJzZSBwYWxldHRlICovCisgICAgICAgICAgICAgICAgaWYgKExDQ1I0X1BBTEZPUihzLT5j b250cm9sWzRdKSAhPSBzLT5wYWxfZm9yKQorICAgICAgICAgICAgICAgICAgICBweGEyeHhfcGFs ZXR0ZV9wYXJzZShzLCBjaCwgcy0+YnBwKTsKKworICAgICAgICAgICAgICAgIC8qIEFDSyBmcmFt ZSBzdGFydCAqLworICAgICAgICAgICAgICAgIHB4YTJ4eF9kbWFfc29mX3NldChzLCBjaCk7CisK KyAgICAgICAgICAgICAgICBzLT5kbWFfY2hbY2hdLnJlZHJhdyhzLCBmYiwgJm1pbnksICZtYXh5 KTsKKyAgICAgICAgICAgICAgICBzLT5pbnZhbGlkYXRlZCA9IDA7CisKKyAgICAgICAgICAgICAg ICAvKiBBQ0sgZnJhbWUgY29tcGxldGVkICovCisgICAgICAgICAgICAgICAgcHhhMnh4X2RtYV9l b2Zfc2V0KHMsIGNoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgaWYgKHMtPmNv bnRyb2xbMF0gJiBMQ0NSMF9ESVMpIHsKKyAgICAgICAgLyogQUNLIGxhc3QgZnJhbWUgY29tcGxl dGVkICovCisgICAgICAgIHMtPmNvbnRyb2xbMF0gJj0gfkxDQ1IwX0VOQjsKKyAgICAgICAgcy0+ c3RhdHVzWzBdIHw9IExDU1IwX0xERDsKKyAgICB9CisKKyAgICBpZiAocy0+b3JpZW50YXRpb24p CisgICAgICAgIGRweV91cGRhdGUocy0+ZHMsIG1pbnksIDAsIG1heHksIHMtPnhyZXMpOworICAg IGVsc2UKKyAgICAgICAgZHB5X3VwZGF0ZShzLT5kcywgMCwgbWlueSwgcy0+eHJlcywgbWF4eSk7 CisgICAgcHhhMnh4X2xjZGNfaW50X3VwZGF0ZShzKTsKKworICAgIGlmIChzLT52c3luY19jYikK KyAgICAgICAgcy0+dnN5bmNfY2Iocy0+b3BhcXVlKTsKK30KKworc3RhdGljIHZvaWQgcHhhMnh4 X2ludmFsaWRhdGVfZGlzcGxheSh2b2lkICpvcGFxdWUpCit7CisgICAgc3RydWN0IHB4YTJ4eF9s Y2RjX3MgKnMgPSAoc3RydWN0IHB4YTJ4eF9sY2RjX3MgKikgb3BhcXVlOworICAgIHMtPmludmFs aWRhdGVkID0gMTsKK30KKworc3RhdGljIHZvaWQgcHhhMnh4X3NjcmVlbl9kdW1wKHZvaWQgKm9w YXF1ZSwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisgICAgLyogVE9ETyAqLworfQorCit2b2lk IHB4YTJ4eF9sY2RjX29yaWVudGF0aW9uKHZvaWQgKm9wYXF1ZSwgaW50IGFuZ2xlKQoreworICAg IHN0cnVjdCBweGEyeHhfbGNkY19zICpzID0gKHN0cnVjdCBweGEyeHhfbGNkY19zICopIG9wYXF1 ZTsKKworICAgIGlmIChhbmdsZSkgeworICAgICAgICBzLT5kbWFfY2hbMF0ucmVkcmF3ID0gcHhh Mnh4X2xjZGNfZG1hMF9yZWRyYXdfdmVydDsKKyAgICB9IGVsc2UgeworICAgICAgICBzLT5kbWFf Y2hbMF0ucmVkcmF3ID0gcHhhMnh4X2xjZGNfZG1hMF9yZWRyYXdfaG9yaXo7CisgICAgfQorCisg ICAgcy0+b3JpZW50YXRpb24gPSBhbmdsZTsKKyAgICBzLT54cmVzID0gcy0+eXJlcyA9IC0xOwor ICAgIHB4YTJ4eF9sY2RjX3Jlc2l6ZShzKTsKK30KKworI2RlZmluZSBCSVRTIDgKKyNpbmNsdWRl ICJweGEyeHhfdGVtcGxhdGUuaCIKKyNkZWZpbmUgQklUUyAxNQorI2luY2x1ZGUgInB4YTJ4eF90 ZW1wbGF0ZS5oIgorI2RlZmluZSBCSVRTIDE2CisjaW5jbHVkZSAicHhhMnh4X3RlbXBsYXRlLmgi CisjZGVmaW5lIEJJVFMgMjQKKyNpbmNsdWRlICJweGEyeHhfdGVtcGxhdGUuaCIKKyNkZWZpbmUg QklUUyAzMgorI2luY2x1ZGUgInB4YTJ4eF90ZW1wbGF0ZS5oIgorCitzdHJ1Y3QgcHhhMnh4X2xj ZGNfcyAqcHhhMnh4X2xjZGNfaW5pdCh0YXJnZXRfcGh5c19hZGRyX3QgYmFzZSwgdm9pZCAqcGlj LAorICAgICAgICAgICAgICAgIERpc3BsYXlTdGF0ZSAqZHMpCit7CisgICAgaW50IGlvbWVtdHlw ZTsKKyAgICBzdHJ1Y3QgcHhhMnh4X2xjZGNfcyAqczsKKworICAgIHMgPSAoc3RydWN0IHB4YTJ4 eF9sY2RjX3MgKikgcWVtdV9tYWxsb2N6KHNpemVvZihzdHJ1Y3QgcHhhMnh4X2xjZGNfcykpOwor ICAgIHMtPmJhc2UgPSBiYXNlOworICAgIHMtPmludmFsaWRhdGVkID0gMTsKKyAgICBzLT5waWMg PSBwaWM7CisgICAgcy0+ZHMgPSBkczsKKworICAgIHB4YTJ4eF9sY2RjX29yaWVudGF0aW9uKHMs IGdyYXBoaWNfcm90YXRlKTsKKworICAgIGlvbWVtdHlwZSA9IGNwdV9yZWdpc3Rlcl9pb19tZW1v cnkoMCwgcHhhMnh4X2xjZGNfcmVhZGZuLAorICAgICAgICAgICAgICAgICAgICBweGEyeHhfbGNk Y193cml0ZWZuLCBzKTsKKyAgICBjcHVfcmVnaXN0ZXJfcGh5c2ljYWxfbWVtb3J5KGJhc2UsIDB4 MDAwZmZmZmYsIGlvbWVtdHlwZSk7CisKKyAgICBncmFwaGljX2NvbnNvbGVfaW5pdChkcywgcHhh Mnh4X3VwZGF0ZV9kaXNwbGF5LAorICAgICAgICAgICAgICAgICAgICBweGEyeHhfaW52YWxpZGF0 ZV9kaXNwbGF5LCBweGEyeHhfc2NyZWVuX2R1bXAsIHMpOworCisgICAgc3dpdGNoIChzLT5kcy0+ ZGVwdGgpIHsKKyAgICBjYXNlIDA6CisgICAgICAgIHMtPmRlc3Rfd2lkdGggPSAwOworICAgICAg ICBicmVhazsKKyAgICBjYXNlIDg6CisgICAgICAgIHMtPmxpbmVfZm5bMF0gPSBweGEyeHhfZHJh d19mbl84OworICAgICAgICBzLT5saW5lX2ZuWzFdID0gcHhhMnh4X2RyYXdfZm5fOHQ7CisgICAg ICAgIHMtPmRlc3Rfd2lkdGggPSAxOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDE1OgorICAg ICAgICBzLT5saW5lX2ZuWzBdID0gcHhhMnh4X2RyYXdfZm5fMTU7CisgICAgICAgIHMtPmxpbmVf Zm5bMV0gPSBweGEyeHhfZHJhd19mbl8xNXQ7CisgICAgICAgIHMtPmRlc3Rfd2lkdGggPSAyOwor ICAgICAgICBicmVhazsKKyAgICBjYXNlIDE2OgorICAgICAgICBzLT5saW5lX2ZuWzBdID0gcHhh Mnh4X2RyYXdfZm5fMTY7CisgICAgICAgIHMtPmxpbmVfZm5bMV0gPSBweGEyeHhfZHJhd19mbl8x NnQ7CisgICAgICAgIHMtPmRlc3Rfd2lkdGggPSAyOworICAgICAgICBicmVhazsKKyAgICBjYXNl IDI0OgorICAgICAgICBzLT5saW5lX2ZuWzBdID0gcHhhMnh4X2RyYXdfZm5fMjQ7CisgICAgICAg IHMtPmxpbmVfZm5bMV0gPSBweGEyeHhfZHJhd19mbl8yNHQ7CisgICAgICAgIHMtPmRlc3Rfd2lk dGggPSAzOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDMyOgorICAgICAgICBzLT5saW5lX2Zu WzBdID0gcHhhMnh4X2RyYXdfZm5fMzI7CisgICAgICAgIHMtPmxpbmVfZm5bMV0gPSBweGEyeHhf ZHJhd19mbl8zMnQ7CisgICAgICAgIHMtPmRlc3Rfd2lkdGggPSA0OworICAgICAgICBicmVhazsK KyAgICBkZWZhdWx0OgorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBCYWQgY29sb3IgZGVw dGhcbiIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIHJldHVy biBzOworfQorCit2b2lkIHB4YTJ4eF9sY2RfdnN5bmNfY2Ioc3RydWN0IHB4YTJ4eF9sY2RjX3Mg KnMsCisgICAgICAgICAgICAgICAgdm9pZCAoKmNiKSh2b2lkICpvcGFxdWUpLCB2b2lkICpvcGFx dWUpIHsKKyAgICBzLT52c3luY19jYiA9IGNiOworICAgIHMtPm9wYXF1ZSA9IG9wYXF1ZTsKK30K ZGlmZiAtLWdpdCBhL2h3L3B4YTJ4eF9tbWNpLmMgYi9ody9weGEyeHhfbW1jaS5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkYzZhMDkKLS0tIC9kZXYvbnVsbAorKysgYi9o dy9weGEyeHhfbW1jaS5jCkBAIC0wLDAgKzEsNDg5IEBACisvKgorICogSW50ZWwgWFNjYWxlIFBY QTI1NS8yNzAgTXVsdGlNZWRpYUNhcmQvU0QvU0RJTyBDb250cm9sbGVyIGVtdWxhdGlvbi4KKyAq CisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3BlbmVkaGFuZCBMdGQuCisgKiBXcml0dGVuIGJ5IEFu ZHJ6ZWogWmFib3Jvd3NraSA8YmFscm9nQHphYm9yLm9yZz4KKyAqCisgKiBUaGlzIGNvZGUgaXMg bGljZW5zZWQgdW5kZXIgdGhlIEdQTHYyLgorICovCisKKyNpbmNsdWRlICJ2bC5oIgorI2luY2x1 ZGUgInNkLmgiCisKK3N0cnVjdCBweGEyeHhfbW1jaV9zIHsKKyAgICB0YXJnZXRfcGh5c19hZGRy X3QgYmFzZTsKKyAgICB2b2lkICpwaWM7CisgICAgdm9pZCAqZG1hOworCisgICAgc3RydWN0IHNk X3N0YXRlX3MgKmNhcmQ7CisKKyAgICB1aW50MzJfdCBzdGF0dXM7CisgICAgdWludDMyX3QgY2xr cnQ7CisgICAgdWludDMyX3Qgc3BpOworICAgIHVpbnQzMl90IGNtZGF0OworICAgIHVpbnQzMl90 IHJlc3BfdG91dDsKKyAgICB1aW50MzJfdCByZWFkX3RvdXQ7CisgICAgaW50IGJsa2xlbjsKKyAg ICBpbnQgbnVtYmxrOworICAgIHVpbnQzMl90IGludG1hc2s7CisgICAgdWludDMyX3QgaW50cmVx OworICAgIGludCBjbWQ7CisgICAgdWludDMyX3QgYXJnOworCisgICAgaW50IGFjdGl2ZTsKKyAg ICBpbnQgYnl0ZXNsZWZ0OworICAgIHVpbnQ4X3QgdHhfZmlmb1s2NF07CisgICAgaW50IHR4X3N0 YXJ0OworICAgIGludCB0eF9sZW47CisgICAgdWludDhfdCByeF9maWZvWzMyXTsKKyAgICBpbnQg cnhfc3RhcnQ7CisgICAgaW50IHJ4X2xlbjsKKyAgICB1aW50MTZfdCByZXNwX2ZpZm9bOV07Cisg ICAgaW50IHJlc3BfbGVuOworCisgICAgaW50IGNtZHJlcTsKKyAgICBpbnQgYWNfd2lkdGg7Cit9 OworCisjZGVmaW5lIE1NQ19TVFJQQ0wJMHgwMAkvKiBNTUMgQ2xvY2sgU3RhcnQvU3RvcCByZWdp c3RlciAqLworI2RlZmluZSBNTUNfU1RBVAkweDA0CS8qIE1NQyBTdGF0dXMgcmVnaXN0ZXIgKi8K KyNkZWZpbmUgTU1DX0NMS1JUCTB4MDgJLyogTU1DIENsb2NrIFJhdGUgcmVnaXN0ZXIgKi8KKyNk ZWZpbmUgTU1DX1NQSQkJMHgwYwkvKiBNTUMgU1BJIE1vZGUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUg TU1DX0NNREFUCTB4MTAJLyogTU1DIENvbW1hbmQvRGF0YSByZWdpc3RlciAqLworI2RlZmluZSBN TUNfUkVTVE8JMHgxNAkvKiBNTUMgUmVzcG9uc2UgVGltZS1PdXQgcmVnaXN0ZXIgKi8KKyNkZWZp bmUgTU1DX1JEVE8JMHgxOAkvKiBNTUMgUmVhZCBUaW1lLU91dCByZWdpc3RlciAqLworI2RlZmlu ZSBNTUNfQkxLTEVOCTB4MWMJLyogTU1DIEJsb2NrIExlbmd0aCByZWdpc3RlciAqLworI2RlZmlu ZSBNTUNfTlVNQkxLCTB4MjAJLyogTU1DIE51bWJlciBvZiBCbG9ja3MgcmVnaXN0ZXIgKi8KKyNk ZWZpbmUgTU1DX1BSVEJVRgkweDI0CS8qIE1NQyBCdWZmZXIgUGFydGx5IEZ1bGwgcmVnaXN0ZXIg Ki8KKyNkZWZpbmUgTU1DX0lfTUFTSwkweDI4CS8qIE1NQyBJbnRlcnJ1cHQgTWFzayByZWdpc3Rl ciAqLworI2RlZmluZSBNTUNfSV9SRUcJMHgyYwkvKiBNTUMgSW50ZXJydXB0IFJlcXVlc3QgcmVn aXN0ZXIgKi8KKyNkZWZpbmUgTU1DX0NNRAkJMHgzMAkvKiBNTUMgQ29tbWFuZCByZWdpc3RlciAq LworI2RlZmluZSBNTUNfQVJHSAkweDM0CS8qIE1NQyBBcmd1bWVudCBIaWdoIHJlZ2lzdGVyICov CisjZGVmaW5lIE1NQ19BUkdMCTB4MzgJLyogTU1DIEFyZ3VtZW50IExvdyByZWdpc3RlciAqLwor I2RlZmluZSBNTUNfUkVTCQkweDNjCS8qIE1NQyBSZXNwb25zZSBGSUZPICovCisjZGVmaW5lIE1N Q19SWEZJRk8JMHg0MAkvKiBNTUMgUmVjZWl2ZSBGSUZPICovCisjZGVmaW5lIE1NQ19UWEZJRk8J MHg0NAkvKiBNTUMgVHJhbnNtaXQgRklGTyAqLworI2RlZmluZSBNTUNfUkRXQUlUCTB4NDgJLyog TU1DIFJEX1dBSVQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTU1DX0JMS1NfUkVNCTB4NGMJLyogTU1D IEJsb2NrcyBSZW1haW5pbmcgcmVnaXN0ZXIgKi8KKworLyogQml0ZmllbGQgbWFza3MgKi8KKyNk ZWZpbmUgU1RSUENMX1NUT1BfQ0xLCSgxIDw8IDApCisjZGVmaW5lIFNUUlBDTF9TVFJUX0NMSwko MSA8PCAxKQorI2RlZmluZSBTVEFUX1RPVVRfUkVTCSgxIDw8IDEpCisjZGVmaW5lIFNUQVRfQ0xL X0VOCSgxIDw8IDgpCisjZGVmaW5lIFNUQVRfREFUQV9ET05FCSgxIDw8IDExKQorI2RlZmluZSBT VEFUX1BSR19ET05FCSgxIDw8IDEyKQorI2RlZmluZSBTVEFUX0VORF9DTURSRVMJKDEgPDwgMTMp CisjZGVmaW5lIFNQSV9TUElfTU9ERQkoMSA8PCAwKQorI2RlZmluZSBDTURBVF9SRVNfVFlQRQko MyA8PCAwKQorI2RlZmluZSBDTURBVF9EQVRBX0VOCSgxIDw8IDIpCisjZGVmaW5lIENNREFUX1dS X1JECSgxIDw8IDMpCisjZGVmaW5lIENNREFUX0RNQV9FTgkoMSA8PCA3KQorI2RlZmluZSBDTURB VF9TVE9QX1RSQU4JKDEgPDwgMTApCisjZGVmaW5lIElOVF9EQVRBX0RPTkUJKDEgPDwgMCkKKyNk ZWZpbmUgSU5UX1BSR19ET05FCSgxIDw8IDEpCisjZGVmaW5lIElOVF9FTkRfQ01ECSgxIDw8IDIp CisjZGVmaW5lIElOVF9TVE9QX0NNRAkoMSA8PCAzKQorI2RlZmluZSBJTlRfQ0xLX09GRgkoMSA8 PCA0KQorI2RlZmluZSBJTlRfUlhGSUZPX1JFUQkoMSA8PCA1KQorI2RlZmluZSBJTlRfVFhGSUZP X1JFUQkoMSA8PCA2KQorI2RlZmluZSBJTlRfVElOVAkoMSA8PCA3KQorI2RlZmluZSBJTlRfREFU X0VSUgkoMSA8PCA4KQorI2RlZmluZSBJTlRfUkVTX0VSUgkoMSA8PCA5KQorI2RlZmluZSBJTlRf UkRfU1RBTExFRAkoMSA8PCAxMCkKKyNkZWZpbmUgSU5UX1NESU9fSU5UCSgxIDw8IDExKQorI2Rl ZmluZSBJTlRfU0RJT19TQUNLCSgxIDw8IDEyKQorI2RlZmluZSBQUlRCVUZfUFJUX0JVRgkoMSA8 PCAwKQorCisvKiBSb3V0ZSBpbnRlcm5hbCBpbnRlcnJ1cHQgbGluZXMgdG8gdGhlIGdsb2JhbCBJ QyBhbmQgRE1BICovCitzdGF0aWMgdm9pZCBweGEyeHhfbW1jaV9pbnRfdXBkYXRlKHN0cnVjdCBw eGEyeHhfbW1jaV9zICpzKQoreworICAgIHVpbnQzMl90IG1hc2sgPSBzLT5pbnRtYXNrOworICAg IGlmIChzLT5jbWRhdCAmIENNREFUX0RNQV9FTikgeworICAgICAgICBtYXNrIHw9IElOVF9SWEZJ Rk9fUkVRIHwgSU5UX1RYRklGT19SRVE7CisKKyAgICAgICAgcGljX3NldF9pcnFfbmV3KHMtPmRt YSwgUFhBMlhYX1JYX1JRX01NQ0ksCisgICAgICAgICAgICAgICAgICAgICAgICAhIShzLT5pbnRy ZXEgJiBJTlRfUlhGSUZPX1JFUSkpOworICAgICAgICBwaWNfc2V0X2lycV9uZXcocy0+ZG1hLCBQ WEEyWFhfVFhfUlFfTU1DSSwKKyAgICAgICAgICAgICAgICAgICAgICAgICEhKHMtPmludHJlcSAm IElOVF9UWEZJRk9fUkVRKSk7CisgICAgfQorCisgICAgcGljX3NldF9pcnFfbmV3KHMtPnBpYywg UFhBMlhYX1BJQ19NTUMsICEhKHMtPmludHJlcSAmIH5tYXNrKSk7Cit9CisKK3N0YXRpYyB2b2lk IHB4YTJ4eF9tbWNpX2ZpZm9fdXBkYXRlKHN0cnVjdCBweGEyeHhfbW1jaV9zICpzKQoreworICAg IGlmICghcy0+YWN0aXZlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAocy0+Y21kYXQgJiBD TURBVF9XUl9SRCkgeworICAgICAgICB3aGlsZSAocy0+Ynl0ZXNsZWZ0ICYmIHMtPnR4X2xlbikg eworICAgICAgICAgICAgc2Rfd3JpdGVfZGF0bGluZShzLT5jYXJkLCBzLT50eF9maWZvW3MtPnR4 X3N0YXJ0ICsrXSk7CisgICAgICAgICAgICBzLT50eF9zdGFydCAmPSAweDFmOworICAgICAgICAg ICAgcy0+dHhfbGVuIC0tOworICAgICAgICAgICAgcy0+Ynl0ZXNsZWZ0IC0tOworICAgICAgICB9 CisgICAgICAgIGlmIChzLT5ieXRlc2xlZnQpCisgICAgICAgICAgICBzLT5pbnRyZXEgfD0gSU5U X1RYRklGT19SRVE7CisgICAgfSBlbHNlCisgICAgICAgIHdoaWxlIChzLT5ieXRlc2xlZnQgJiYg cy0+cnhfbGVuIDwgMzIpIHsKKyAgICAgICAgICAgIHMtPnJ4X2ZpZm9bKHMtPnJ4X3N0YXJ0ICsg KHMtPnJ4X2xlbiArKykpICYgMHgxZl0gPQorICAgICAgICAgICAgICAgIHNkX3JlYWRfZGF0bGlu ZShzLT5jYXJkKTsKKyAgICAgICAgICAgIHMtPmJ5dGVzbGVmdCAtLTsKKyAgICAgICAgICAgIHMt PmludHJlcSB8PSBJTlRfUlhGSUZPX1JFUTsKKyAgICAgICAgfQorCisgICAgaWYgKCFzLT5ieXRl c2xlZnQpIHsKKyAgICAgICAgcy0+YWN0aXZlID0gMDsKKyAgICAgICAgcy0+aW50cmVxIHw9IElO VF9EQVRBX0RPTkU7CisgICAgICAgIHMtPnN0YXR1cyB8PSBTVEFUX0RBVEFfRE9ORTsKKworICAg ICAgICBpZiAocy0+Y21kYXQgJiBDTURBVF9XUl9SRCkgeworICAgICAgICAgICAgcy0+aW50cmVx IHw9IElOVF9QUkdfRE9ORTsKKyAgICAgICAgICAgIHMtPnN0YXR1cyB8PSBTVEFUX1BSR19ET05F OworICAgICAgICB9CisgICAgfQorCisgICAgcHhhMnh4X21tY2lfaW50X3VwZGF0ZShzKTsKK30K Kworc3RhdGljIHZvaWQgcHhhMnh4X21tY2lfd2FrZXF1ZXVlcyhzdHJ1Y3QgcHhhMnh4X21tY2lf cyAqcykKK3sKKyAgICBpbnQgcnNwbGVuOworICAgIHN0cnVjdCBzZF9yZXF1ZXN0X3MgcmVxdWVz dDsKKyAgICB1bmlvbiBzZF9yZXNwb25zZV91IHJlc3BvbnNlOworCisgICAgcy0+YWN0aXZlID0g MTsKKyAgICBzLT5yeF9sZW4gPSAwOworICAgIHMtPnR4X2xlbiA9IDA7CisgICAgcy0+Y21kcmVx ID0gMDsKKworICAgIHJlcXVlc3QuY21kID0gcy0+Y21kOworICAgIHJlcXVlc3QuYXJnID0gcy0+ YXJnOworICAgIHJlcXVlc3QuY3JjID0gMDsJLyogRklYTUUgKi8KKworICAgIHJlc3BvbnNlID0g c2Rfd3JpdGVfY21kbGluZShzLT5jYXJkLCByZXF1ZXN0LCAmcnNwbGVuKTsKKyAgICBzLT5pbnRy ZXEgfD0gSU5UX0VORF9DTUQ7CisKKyAgICBtZW1zZXQocy0+cmVzcF9maWZvLCAwLCBzaXplb2Yo cy0+cmVzcF9maWZvKSk7CisgICAgc3dpdGNoIChzLT5jbWRhdCAmIENNREFUX1JFU19UWVBFKSB7 CisjZGVmaW5lIFBYQU1NQ0lfUkVTUCh3ZCwgdmFsdWUpCVwKKyAgICAgICAgcy0+cmVzcF9maWZv Wyh3ZCkgKyAwXSB8PSAodmFsdWUpID4+IDg7CVwKKyAgICAgICAgcy0+cmVzcF9maWZvWyh3ZCkg KyAxXSB8PSAodmFsdWUpIDw8IDg7CisgICAgY2FzZSAwOgkvKiBObyByZXNwb25zZSAqLworICAg ICAgICBnb3RvIGNvbXBsZXRlOworCisgICAgY2FzZSAxOgkvKiBSMSwgUjQsIFI1IG9yIFI2ICov CisgICAgICAgIGlmIChyc3BsZW4gPCA0OCkKKyAgICAgICAgICAgIGdvdG8gdGltZW91dDsKKwor ICAgICAgICBpZiAocmVxdWVzdC5jbWQgPT0gMykgewkvKiBSNiAqLworICAgICAgICAgICAgUFhB TU1DSV9SRVNQKDAsIHJlc3BvbnNlLnI2LmFyZyk7CisgICAgICAgICAgICBQWEFNTUNJX1JFU1Ao MSwgcmVzcG9uc2UucjYuc3RhdHVzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFBY QU1NQ0lfUkVTUCgwLCByZXNwb25zZS5yMS5zdGF0dXMgPj4gMTYpOworICAgICAgICAgICAgUFhB TU1DSV9SRVNQKDEsIHJlc3BvbnNlLnIxLnN0YXR1cyAmIDB4MDAwMGZmZmYpOworICAgICAgICB9 CisgICAgICAgIGdvdG8gY29tcGxldGU7CisKKyAgICBjYXNlIDI6CS8qIFIyICovCisgICAgICAg IGlmIChyc3BsZW4gPCAxMjgpCisgICAgICAgICAgICBnb3RvIHRpbWVvdXQ7CisKKyAgICAgICAg UFhBTU1DSV9SRVNQKDAsIGJzd2FwMTYocmVzcG9uc2UucjIucmVnWzBdKSk7CisgICAgICAgIFBY QU1NQ0lfUkVTUCgxLCBic3dhcDE2KHJlc3BvbnNlLnIyLnJlZ1sxXSkpOworICAgICAgICBQWEFN TUNJX1JFU1AoMiwgYnN3YXAxNihyZXNwb25zZS5yMi5yZWdbMl0pKTsKKyAgICAgICAgUFhBTU1D SV9SRVNQKDMsIGJzd2FwMTYocmVzcG9uc2UucjIucmVnWzNdKSk7CisgICAgICAgIFBYQU1NQ0lf UkVTUCg0LCBic3dhcDE2KHJlc3BvbnNlLnIyLnJlZ1s0XSkpOworICAgICAgICBQWEFNTUNJX1JF U1AoNSwgYnN3YXAxNihyZXNwb25zZS5yMi5yZWdbNV0pKTsKKyAgICAgICAgUFhBTU1DSV9SRVNQ KDYsIGJzd2FwMTYocmVzcG9uc2UucjIucmVnWzZdKSk7CisgICAgICAgIFBYQU1NQ0lfUkVTUCg3 LCBic3dhcDE2KHJlc3BvbnNlLnIyLnJlZ1s3XSkpOworICAgICAgICBnb3RvIGNvbXBsZXRlOwor CisgICAgY2FzZSAzOgkvKiBSMyAqLworICAgICAgICBpZiAocnNwbGVuIDwgMzIpCisgICAgICAg ICAgICBnb3RvIHRpbWVvdXQ7CisKKyAgICAgICAgUFhBTU1DSV9SRVNQKDAsIHJlc3BvbnNlLnIz Lm9jcl9yZWcgPj4gMTYpOworICAgICAgICBQWEFNTUNJX1JFU1AoMSwgcmVzcG9uc2UucjMub2Ny X3JlZyAmIDB4MDAwMGZmZmYpOworICAgICAgICBnb3RvIGNvbXBsZXRlOworCisgICAgY29tcGxl dGU6CisgICAgICAgIHMtPnN0YXR1cyB8PSBTVEFUX0VORF9DTURSRVM7CisKKyAgICAgICAgaWYg KCEocy0+Y21kYXQgJiBDTURBVF9EQVRBX0VOKSkKKyAgICAgICAgICAgIHMtPmFjdGl2ZSA9IDA7 CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHMtPmJ5dGVzbGVmdCA9IHMtPm51bWJsayAqIHMt PmJsa2xlbjsKKworICAgICAgICBzLT5yZXNwX2xlbiA9IDA7CisgICAgICAgIGJyZWFrOworCisg ICAgdGltZW91dDoKKyAgICAgICAgcy0+YWN0aXZlID0gMDsKKyAgICAgICAgcy0+c3RhdHVzIHw9 IFNUQVRfVE9VVF9SRVM7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHB4YTJ4eF9tbWNp X2ZpZm9fdXBkYXRlKHMpOworfQorCitzdGF0aWMgdWludDMyX3QgcHhhMnh4X21tY2lfcmVhZCh2 b2lkICpvcGFxdWUsIHRhcmdldF9waHlzX2FkZHJfdCBvZmZzZXQpCit7CisgICAgc3RydWN0IHB4 YTJ4eF9tbWNpX3MgKnMgPSAoc3RydWN0IHB4YTJ4eF9tbWNpX3MgKikgb3BhcXVlOworICAgIHVp bnQzMl90IHJldDsKKyAgICBvZmZzZXQgLT0gcy0+YmFzZTsKKworICAgIHN3aXRjaCAob2Zmc2V0 KSB7CisgICAgY2FzZSBNTUNfU1RSUENMOgorICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIE1N Q19TVEFUOgorICAgICAgICByZXR1cm4gcy0+c3RhdHVzOworICAgIGNhc2UgTU1DX0NMS1JUOgor ICAgICAgICByZXR1cm4gcy0+Y2xrcnQ7CisgICAgY2FzZSBNTUNfU1BJOgorICAgICAgICByZXR1 cm4gcy0+c3BpOworICAgIGNhc2UgTU1DX0NNREFUOgorICAgICAgICByZXR1cm4gcy0+Y21kYXQ7 CisgICAgY2FzZSBNTUNfUkVTVE86CisgICAgICAgIHJldHVybiBzLT5yZXNwX3RvdXQ7CisgICAg Y2FzZSBNTUNfUkRUTzoKKyAgICAgICAgcmV0dXJuIHMtPnJlYWRfdG91dDsKKyAgICBjYXNlIE1N Q19CTEtMRU46CisgICAgICAgIHJldHVybiBzLT5ibGtsZW47CisgICAgY2FzZSBNTUNfTlVNQkxL OgorICAgICAgICByZXR1cm4gcy0+bnVtYmxrOworICAgIGNhc2UgTU1DX1BSVEJVRjoKKyAgICAg ICAgcmV0dXJuIDA7CisgICAgY2FzZSBNTUNfSV9NQVNLOgorICAgICAgICByZXR1cm4gcy0+aW50 bWFzazsKKyAgICBjYXNlIE1NQ19JX1JFRzoKKyAgICAgICAgcmV0dXJuIHMtPmludHJlcTsKKyAg ICBjYXNlIE1NQ19DTUQ6CisgICAgICAgIHJldHVybiBzLT5jbWQgfCAweDQwOworICAgIGNhc2Ug TU1DX0FSR0g6CisgICAgICAgIHJldHVybiBzLT5hcmcgPj4gMTY7CisgICAgY2FzZSBNTUNfQVJH TDoKKyAgICAgICAgcmV0dXJuIHMtPmFyZyAmIDB4ZmZmZjsKKyAgICBjYXNlIE1NQ19SRVM6Cisg ICAgICAgIGlmIChzLT5yZXNwX2xlbiA8IDkpCisgICAgICAgICAgICByZXR1cm4gcy0+cmVzcF9m aWZvW3MtPnJlc3BfbGVuICsrXTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgY2FzZSBNTUNfUlhG SUZPOgorICAgICAgICByZXQgPSAwOworICAgICAgICB3aGlsZSAocy0+YWNfd2lkdGggLS0gJiYg cy0+cnhfbGVuKSB7CisgICAgICAgICAgICByZXQgfD0gcy0+cnhfZmlmb1tzLT5yeF9zdGFydCAr K10gPDwgKHMtPmFjX3dpZHRoIDw8IDMpOworICAgICAgICAgICAgcy0+cnhfc3RhcnQgJj0gMHgx ZjsKKyAgICAgICAgICAgIHMtPnJ4X2xlbiAtLTsKKyAgICAgICAgfQorICAgICAgICBzLT5pbnRy ZXEgJj0gfklOVF9SWEZJRk9fUkVROworICAgICAgICBweGEyeHhfbW1jaV9maWZvX3VwZGF0ZShz KTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICBjYXNlIE1NQ19SRFdBSVQ6CisgICAgICAgIHJl dHVybiAwOworICAgIGNhc2UgTU1DX0JMS1NfUkVNOgorICAgICAgICByZXR1cm4gcy0+bnVtYmxr OworICAgIGRlZmF1bHQ6CisgICAgICAgIGNwdV9hYm9ydChjcHVfc2luZ2xlX2VudiwgIiVzOiBC YWQgb2Zmc2V0ICIgUkVHX0ZNVCAiXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgX19GVU5D VElPTl9fLCBvZmZzZXQpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9p ZCBweGEyeHhfbW1jaV93cml0ZSh2b2lkICpvcGFxdWUsCisgICAgICAgICAgICAgICAgdGFyZ2V0 X3BoeXNfYWRkcl90IG9mZnNldCwgdWludDMyX3QgdmFsdWUpCit7CisgICAgc3RydWN0IHB4YTJ4 eF9tbWNpX3MgKnMgPSAoc3RydWN0IHB4YTJ4eF9tbWNpX3MgKikgb3BhcXVlOworICAgIG9mZnNl dCAtPSBzLT5iYXNlOworCisgICAgc3dpdGNoIChvZmZzZXQpIHsKKyAgICBjYXNlIE1NQ19TVFJQ Q0w6CisgICAgICAgIGlmICh2YWx1ZSAmIFNUUlBDTF9TVFJUX0NMSykgeworICAgICAgICAgICAg cy0+c3RhdHVzIHw9IFNUQVRfQ0xLX0VOOworICAgICAgICAgICAgcy0+aW50cmVxICY9IH5JTlRf Q0xLX09GRjsKKworICAgICAgICAgICAgaWYgKHMtPmNtZHJlcSAmJiAhKHMtPmNtZGF0ICYgQ01E QVRfU1RPUF9UUkFOKSkgeworICAgICAgICAgICAgICAgIHMtPnN0YXR1cyAmPSBTVEFUX0NMS19F TjsKKyAgICAgICAgICAgICAgICBweGEyeHhfbW1jaV93YWtlcXVldWVzKHMpOworICAgICAgICAg ICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHZhbHVlICYgU1RSUENMX1NUT1BfQ0xLKSB7 CisgICAgICAgICAgICBzLT5zdGF0dXMgJj0gflNUQVRfQ0xLX0VOOworICAgICAgICAgICAgcy0+ aW50cmVxIHw9IElOVF9DTEtfT0ZGOworICAgICAgICAgICAgcy0+YWN0aXZlID0gMDsKKyAgICAg ICAgfQorCisgICAgICAgIHB4YTJ4eF9tbWNpX2ludF91cGRhdGUocyk7CisgICAgICAgIGJyZWFr OworCisgICAgY2FzZSBNTUNfQ0xLUlQ6CisgICAgICAgIHMtPmNsa3J0ID0gdmFsdWUgJiA3Owor ICAgICAgICBicmVhazsKKworICAgIGNhc2UgTU1DX1NQSToKKyAgICAgICAgcy0+c3BpID0gdmFs dWUgJiAweGY7CisgICAgICAgIGlmICh2YWx1ZSAmIFNQSV9TUElfTU9ERSkKKyAgICAgICAgICAg IHByaW50ZigiJXM6IGF0dGVtcHRlZCB0byB1c2UgY2FyZCBpbiBTUEkgbW9kZVxuIiwgX19GVU5D VElPTl9fKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1NQ19DTURBVDoKKyAgICAgICAg cy0+Y21kYXQgPSB2YWx1ZSAmIDB4M2RmZjsKKyAgICAgICAgcy0+YWN0aXZlID0gMDsKKyAgICAg ICAgcy0+Y21kcmVxID0gMTsKKyAgICAgICAgaWYgKCEodmFsdWUgJiBDTURBVF9TVE9QX1RSQU4p KSB7CisgICAgICAgICAgICBzLT5zdGF0dXMgJj0gU1RBVF9DTEtfRU47CisKKyAgICAgICAgICAg IGlmIChzLT5zdGF0dXMgJiBTVEFUX0NMS19FTikKKyAgICAgICAgICAgICAgICBweGEyeHhfbW1j aV93YWtlcXVldWVzKHMpOworICAgICAgICB9CisKKyAgICAgICAgcHhhMnh4X21tY2lfaW50X3Vw ZGF0ZShzKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1NQ19SRVNUTzoKKyAgICAgICAg cy0+cmVzcF90b3V0ID0gdmFsdWUgJiAweDdmOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ug TU1DX1JEVE86CisgICAgICAgIHMtPnJlYWRfdG91dCA9IHZhbHVlICYgMHhmZmZmOworICAgICAg ICBicmVhazsKKworICAgIGNhc2UgTU1DX0JMS0xFTjoKKyAgICAgICAgcy0+YmxrbGVuID0gdmFs dWUgJiAweGZmZjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1NQ19OVU1CTEs6CisgICAg ICAgIHMtPm51bWJsayA9IHZhbHVlICYgMHhmZmZmOworICAgICAgICBicmVhazsKKworICAgIGNh c2UgTU1DX1BSVEJVRjoKKyAgICAgICAgaWYgKHZhbHVlICYgUFJUQlVGX1BSVF9CVUYpIHsKKyAg ICAgICAgICAgIHMtPnR4X3N0YXJ0IF49IDMyOworICAgICAgICAgICAgcy0+dHhfbGVuID0gMDsK KyAgICAgICAgfQorICAgICAgICBweGEyeHhfbW1jaV9maWZvX3VwZGF0ZShzKTsKKyAgICAgICAg YnJlYWs7CisKKyAgICBjYXNlIE1NQ19JX01BU0s6CisgICAgICAgIHMtPmludG1hc2sgPSB2YWx1 ZSAmIDB4MWZmZjsKKyAgICAgICAgcHhhMnh4X21tY2lfaW50X3VwZGF0ZShzKTsKKyAgICAgICAg YnJlYWs7CisKKyAgICBjYXNlIE1NQ19DTUQ6CisgICAgICAgIHMtPmNtZCA9IHZhbHVlICYgMHgz ZjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1NQ19BUkdIOgorICAgICAgICBzLT5hcmcg Jj0gMHgwMDAwZmZmZjsKKyAgICAgICAgcy0+YXJnIHw9IHZhbHVlIDw8IDE2OworICAgICAgICBi cmVhazsKKworICAgIGNhc2UgTU1DX0FSR0w6CisgICAgICAgIHMtPmFyZyAmPSAweGZmZmYwMDAw OworICAgICAgICBzLT5hcmcgfD0gdmFsdWUgJiAweDAwMDBmZmZmOworICAgICAgICBicmVhazsK KworICAgIGNhc2UgTU1DX1RYRklGTzoKKyAgICAgICAgd2hpbGUgKHMtPmFjX3dpZHRoIC0tICYm IHMtPnR4X2xlbiA8IDB4MjApCisgICAgICAgICAgICBzLT50eF9maWZvWyhzLT50eF9zdGFydCAr IChzLT50eF9sZW4gKyspKSAmIDB4MWZdID0KKyAgICAgICAgICAgICAgICAgICAgKHZhbHVlID4+ IChzLT5hY193aWR0aCA8PCAzKSkgJiAweGZmOworICAgICAgICBzLT5pbnRyZXEgJj0gfklOVF9U WEZJRk9fUkVROworICAgICAgICBweGEyeHhfbW1jaV9maWZvX3VwZGF0ZShzKTsKKyAgICAgICAg YnJlYWs7CisKKyAgICBjYXNlIE1NQ19SRFdBSVQ6CisgICAgY2FzZSBNTUNfQkxLU19SRU06Cisg ICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgY3B1X2Fib3J0KGNwdV9zaW5n bGVfZW52LCAiJXM6IEJhZCBvZmZzZXQgIiBSRUdfRk1UICJcbiIsCisgICAgICAgICAgICAgICAg ICAgICAgICBfX0ZVTkNUSU9OX18sIG9mZnNldCk7CisgICAgfQorfQorCitzdGF0aWMgdWludDMy X3QgcHhhMnh4X21tY2lfcmVhZGIodm9pZCAqb3BhcXVlLCB0YXJnZXRfcGh5c19hZGRyX3Qgb2Zm c2V0KQoreworICAgIHN0cnVjdCBweGEyeHhfbW1jaV9zICpzID0gKHN0cnVjdCBweGEyeHhfbW1j aV9zICopIG9wYXF1ZTsKKyAgICBzLT5hY193aWR0aCA9IDE7CisgICAgcmV0dXJuIHB4YTJ4eF9t bWNpX3JlYWQob3BhcXVlLCBvZmZzZXQpOworfQorCitzdGF0aWMgdWludDMyX3QgcHhhMnh4X21t Y2lfcmVhZGgodm9pZCAqb3BhcXVlLCB0YXJnZXRfcGh5c19hZGRyX3Qgb2Zmc2V0KQoreworICAg IHN0cnVjdCBweGEyeHhfbW1jaV9zICpzID0gKHN0cnVjdCBweGEyeHhfbW1jaV9zICopIG9wYXF1 ZTsKKyAgICBzLT5hY193aWR0aCA9IDI7CisgICAgcmV0dXJuIHB4YTJ4eF9tbWNpX3JlYWQob3Bh cXVlLCBvZmZzZXQpOworfQorCitzdGF0aWMgdWludDMyX3QgcHhhMnh4X21tY2lfcmVhZHcodm9p ZCAqb3BhcXVlLCB0YXJnZXRfcGh5c19hZGRyX3Qgb2Zmc2V0KQoreworICAgIHN0cnVjdCBweGEy eHhfbW1jaV9zICpzID0gKHN0cnVjdCBweGEyeHhfbW1jaV9zICopIG9wYXF1ZTsKKyAgICBzLT5h Y193aWR0aCA9IDQ7CisgICAgcmV0dXJuIHB4YTJ4eF9tbWNpX3JlYWQob3BhcXVlLCBvZmZzZXQp OworfQorCitzdGF0aWMgQ1BVUmVhZE1lbW9yeUZ1bmMgKnB4YTJ4eF9tbWNpX3JlYWRmbltdID0g eworICAgIHB4YTJ4eF9tbWNpX3JlYWRiLAorICAgIHB4YTJ4eF9tbWNpX3JlYWRoLAorICAgIHB4 YTJ4eF9tbWNpX3JlYWR3Cit9OworCitzdGF0aWMgdm9pZCBweGEyeHhfbW1jaV93cml0ZWIodm9p ZCAqb3BhcXVlLAorICAgICAgICAgICAgICAgIHRhcmdldF9waHlzX2FkZHJfdCBvZmZzZXQsIHVp bnQzMl90IHZhbHVlKQoreworICAgIHN0cnVjdCBweGEyeHhfbW1jaV9zICpzID0gKHN0cnVjdCBw eGEyeHhfbW1jaV9zICopIG9wYXF1ZTsKKyAgICBzLT5hY193aWR0aCA9IDE7CisgICAgcHhhMnh4 X21tY2lfd3JpdGUob3BhcXVlLCBvZmZzZXQsIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgcHhh Mnh4X21tY2lfd3JpdGVoKHZvaWQgKm9wYXF1ZSwKKyAgICAgICAgICAgICAgICB0YXJnZXRfcGh5 c19hZGRyX3Qgb2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSkKK3sKKyAgICBzdHJ1Y3QgcHhhMnh4X21t Y2lfcyAqcyA9IChzdHJ1Y3QgcHhhMnh4X21tY2lfcyAqKSBvcGFxdWU7CisgICAgcy0+YWNfd2lk dGggPSAyOworICAgIHB4YTJ4eF9tbWNpX3dyaXRlKG9wYXF1ZSwgb2Zmc2V0LCB2YWx1ZSk7Cit9 CisKK3N0YXRpYyB2b2lkIHB4YTJ4eF9tbWNpX3dyaXRldyh2b2lkICpvcGFxdWUsCisgICAgICAg ICAgICAgICAgdGFyZ2V0X3BoeXNfYWRkcl90IG9mZnNldCwgdWludDMyX3QgdmFsdWUpCit7Cisg ICAgc3RydWN0IHB4YTJ4eF9tbWNpX3MgKnMgPSAoc3RydWN0IHB4YTJ4eF9tbWNpX3MgKikgb3Bh cXVlOworICAgIHMtPmFjX3dpZHRoID0gNDsKKyAgICBweGEyeHhfbW1jaV93cml0ZShvcGFxdWUs IG9mZnNldCwgdmFsdWUpOworfQorCitzdGF0aWMgQ1BVV3JpdGVNZW1vcnlGdW5jICpweGEyeHhf bW1jaV93cml0ZWZuW10gPSB7CisgICAgcHhhMnh4X21tY2lfd3JpdGViLAorICAgIHB4YTJ4eF9t bWNpX3dyaXRlaCwKKyAgICBweGEyeHhfbW1jaV93cml0ZXcKK307CisKK3N0cnVjdCBweGEyeHhf bW1jaV9zICpweGEyeHhfbW1jaV9pbml0KHRhcmdldF9waHlzX2FkZHJfdCBiYXNlLAorICAgICAg ICAgICAgICAgIHZvaWQgKnBpYywgdm9pZCAqZG1hKQoreworICAgIGludCBpb21lbXR5cGU7Cisg ICAgc3RydWN0IHB4YTJ4eF9tbWNpX3MgKnM7CisKKyAgICBzID0gKHN0cnVjdCBweGEyeHhfbW1j aV9zICopIHFlbXVfbWFsbG9jeihzaXplb2Yoc3RydWN0IHB4YTJ4eF9tbWNpX3MpKTsKKyAgICBz LT5iYXNlID0gYmFzZTsKKyAgICBzLT5waWMgPSBwaWM7CisgICAgcy0+ZG1hID0gZG1hOworCisg ICAgaW9tZW10eXBlID0gY3B1X3JlZ2lzdGVyX2lvX21lbW9yeSgwLCBweGEyeHhfbW1jaV9yZWFk Zm4sCisgICAgICAgICAgICAgICAgICAgIHB4YTJ4eF9tbWNpX3dyaXRlZm4sIHMpOworICAgIGNw dV9yZWdpc3Rlcl9waHlzaWNhbF9tZW1vcnkoYmFzZSwgMHgwMDBmZmZmZiwgaW9tZW10eXBlKTsK KworICAgIC8qIEluc3RhbnRpYXRlIHRoZSBhY3R1YWwgc3RvcmFnZSAqLworICAgIHMtPmNhcmQg PSBzZF9pbml0KCk7CisKKyAgICByZXR1cm4gczsKK30KKwordm9pZCBweGEyeHhfbW1jaV9oYW5k bGVycyhzdHJ1Y3QgcHhhMnh4X21tY2lfcyAqcywgdm9pZCAqb3BhcXVlLAorICAgICAgICAgICAg ICAgIHZvaWQgKCpyZWFkb25seV9jYikodm9pZCAqLCBpbnQpLAorICAgICAgICAgICAgICAgIHZv aWQgKCpjb3ZlcnN3aXRjaF9jYikodm9pZCAqLCBpbnQpKQoreworICAgIHNkX3NldF9jYihzLT5j YXJkLCBvcGFxdWUsIHJlYWRvbmx5X2NiLCBjb3ZlcnN3aXRjaF9jYik7Cit9CmRpZmYgLS1naXQg YS9ody9weGEyeHhfcGNtY2lhLmMgYi9ody9weGEyeHhfcGNtY2lhLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uNjhkYzQ5MgotLS0gL2Rldi9udWxsCisrKyBiL2h3L3B4YTJ4 eF9wY21jaWEuYwpAQCAtMCwwICsxLDIzMCBAQAorLyoKKyAqIEludGVsIFhTY2FsZSBQWEEyNTUv MjcwIFBDIENhcmQgYW5kIENvbXBhY3RGbGFzaCBJbnRlcmZhY2UuCisgKgorICogQ29weXJpZ2h0 IChjKSAyMDA2IE9wZW5lZGhhbmQgTHRkLgorICogV3JpdHRlbiBieSBBbmRyemVqIFphYm9yb3dz a2kgPGJhbHJvZ0B6YWJvci5vcmc+CisgKgorICogVGhpcyBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVy IHRoZSBHUEx2Mi4KKyAqLworCisjaW5jbHVkZSAidmwuaCIKKworc3RydWN0IHB4YTJ4eF9wY21j aWFfcyB7CisgICAgc3RydWN0IHBjbWNpYV9zb2NrZXRfcyBzbG90OworICAgIHN0cnVjdCBwY21j aWFfY2FyZF9zICpjYXJkOworICAgIHRhcmdldF9waHlzX2FkZHJfdCBjb21tb25fYmFzZTsKKyAg ICB0YXJnZXRfcGh5c19hZGRyX3QgYXR0cl9iYXNlOworICAgIHRhcmdldF9waHlzX2FkZHJfdCBp b19iYXNlOworCisgICAgdm9pZCAqcGljOworICAgIGludCBpcnE7CisgICAgaW50IGNkX2lycTsK KyAgICB2b2lkICgqc2V0X2lycSkodm9pZCAqb3BhcXVlLCBpbnQgbGluZSwgaW50IGxldmVsKTsK K307CisKK3N0YXRpYyB1aW50MzJfdCBweGEyeHhfcGNtY2lhX2NvbW1vbl9yZWFkKHZvaWQgKm9w YXF1ZSwKKyAgICAgICAgICAgICAgICB0YXJnZXRfcGh5c19hZGRyX3Qgb2Zmc2V0KQoreworICAg IHN0cnVjdCBweGEyeHhfcGNtY2lhX3MgKnMgPSAoc3RydWN0IHB4YTJ4eF9wY21jaWFfcyAqKSBv cGFxdWU7CisKKyAgICBpZiAocy0+c2xvdC5hdHRhY2hlZCkgeworICAgICAgICBvZmZzZXQgLT0g cy0+Y29tbW9uX2Jhc2U7CisgICAgICAgIHJldHVybiBzLT5jYXJkLT5jb21tb25fcmVhZChzLT5j YXJkLT5zdGF0ZSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGlj IHZvaWQgcHhhMnh4X3BjbWNpYV9jb21tb25fd3JpdGUodm9pZCAqb3BhcXVlLAorICAgICAgICAg ICAgICAgIHRhcmdldF9waHlzX2FkZHJfdCBvZmZzZXQsIHVpbnQzMl90IHZhbHVlKQoreworICAg IHN0cnVjdCBweGEyeHhfcGNtY2lhX3MgKnMgPSAoc3RydWN0IHB4YTJ4eF9wY21jaWFfcyAqKSBv cGFxdWU7CisKKyAgICBpZiAocy0+c2xvdC5hdHRhY2hlZCkgeworICAgICAgICBvZmZzZXQgLT0g cy0+Y29tbW9uX2Jhc2U7CisgICAgICAgIHMtPmNhcmQtPmNvbW1vbl93cml0ZShzLT5jYXJkLT5z dGF0ZSwgb2Zmc2V0LCB2YWx1ZSk7CisgICAgfQorfQorCitzdGF0aWMgdWludDMyX3QgcHhhMnh4 X3BjbWNpYV9hdHRyX3JlYWQodm9pZCAqb3BhcXVlLAorICAgICAgICAgICAgICAgIHRhcmdldF9w aHlzX2FkZHJfdCBvZmZzZXQpCit7CisgICAgc3RydWN0IHB4YTJ4eF9wY21jaWFfcyAqcyA9IChz dHJ1Y3QgcHhhMnh4X3BjbWNpYV9zICopIG9wYXF1ZTsKKworICAgIGlmIChzLT5zbG90LmF0dGFj aGVkKSB7CisgICAgICAgIG9mZnNldCAtPSBzLT5hdHRyX2Jhc2U7CisgICAgICAgIHJldHVybiBz LT5jYXJkLT5hdHRyX3JlYWQocy0+Y2FyZC0+c3RhdGUsIG9mZnNldCk7CisgICAgfQorCisgICAg cmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHB4YTJ4eF9wY21jaWFfYXR0cl93cml0ZSh2b2lk ICpvcGFxdWUsCisgICAgICAgICAgICAgICAgdGFyZ2V0X3BoeXNfYWRkcl90IG9mZnNldCwgdWlu dDMyX3QgdmFsdWUpCit7CisgICAgc3RydWN0IHB4YTJ4eF9wY21jaWFfcyAqcyA9IChzdHJ1Y3Qg cHhhMnh4X3BjbWNpYV9zICopIG9wYXF1ZTsKKworICAgIGlmIChzLT5zbG90LmF0dGFjaGVkKSB7 CisgICAgICAgIG9mZnNldCAtPSBzLT5hdHRyX2Jhc2U7CisgICAgICAgIHMtPmNhcmQtPmF0dHJf d3JpdGUocy0+Y2FyZC0+c3RhdGUsIG9mZnNldCwgdmFsdWUpOworICAgIH0KK30KKworc3RhdGlj IHVpbnQzMl90IHB4YTJ4eF9wY21jaWFfaW9fcmVhZCh2b2lkICpvcGFxdWUsCisgICAgICAgICAg ICAgICAgdGFyZ2V0X3BoeXNfYWRkcl90IG9mZnNldCkKK3sKKyAgICBzdHJ1Y3QgcHhhMnh4X3Bj bWNpYV9zICpzID0gKHN0cnVjdCBweGEyeHhfcGNtY2lhX3MgKikgb3BhcXVlOworCisgICAgaWYg KHMtPnNsb3QuYXR0YWNoZWQpIHsKKyAgICAgICAgb2Zmc2V0IC09IHMtPmlvX2Jhc2U7CisgICAg ICAgIHJldHVybiBzLT5jYXJkLT5pb19yZWFkKHMtPmNhcmQtPnN0YXRlLCBvZmZzZXQpOworICAg IH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBweGEyeHhfcGNtY2lhX2lvX3dy aXRlKHZvaWQgKm9wYXF1ZSwKKyAgICAgICAgICAgICAgICB0YXJnZXRfcGh5c19hZGRyX3Qgb2Zm c2V0LCB1aW50MzJfdCB2YWx1ZSkKK3sKKyAgICBzdHJ1Y3QgcHhhMnh4X3BjbWNpYV9zICpzID0g KHN0cnVjdCBweGEyeHhfcGNtY2lhX3MgKikgb3BhcXVlOworCisgICAgaWYgKHMtPnNsb3QuYXR0 YWNoZWQpIHsKKyAgICAgICAgb2Zmc2V0IC09IHMtPmlvX2Jhc2U7CisgICAgICAgIHMtPmNhcmQt PmlvX3dyaXRlKHMtPmNhcmQtPnN0YXRlLCBvZmZzZXQsIHZhbHVlKTsKKyAgICB9Cit9CisKK3N0 YXRpYyBDUFVSZWFkTWVtb3J5RnVuYyAqcHhhMnh4X3BjbWNpYV9jb21tb25fcmVhZGZuW10gPSB7 CisgICAgcHhhMnh4X3BjbWNpYV9jb21tb25fcmVhZCwKKyAgICBweGEyeHhfcGNtY2lhX2NvbW1v bl9yZWFkLAorICAgIHB4YTJ4eF9wY21jaWFfY29tbW9uX3JlYWQsCit9OworCitzdGF0aWMgQ1BV V3JpdGVNZW1vcnlGdW5jICpweGEyeHhfcGNtY2lhX2NvbW1vbl93cml0ZWZuW10gPSB7CisgICAg cHhhMnh4X3BjbWNpYV9jb21tb25fd3JpdGUsCisgICAgcHhhMnh4X3BjbWNpYV9jb21tb25fd3Jp dGUsCisgICAgcHhhMnh4X3BjbWNpYV9jb21tb25fd3JpdGUsCit9OworCitzdGF0aWMgQ1BVUmVh ZE1lbW9yeUZ1bmMgKnB4YTJ4eF9wY21jaWFfYXR0cl9yZWFkZm5bXSA9IHsKKyAgICBweGEyeHhf cGNtY2lhX2F0dHJfcmVhZCwKKyAgICBweGEyeHhfcGNtY2lhX2F0dHJfcmVhZCwKKyAgICBweGEy eHhfcGNtY2lhX2F0dHJfcmVhZCwKK307CisKK3N0YXRpYyBDUFVXcml0ZU1lbW9yeUZ1bmMgKnB4 YTJ4eF9wY21jaWFfYXR0cl93cml0ZWZuW10gPSB7CisgICAgcHhhMnh4X3BjbWNpYV9hdHRyX3dy aXRlLAorICAgIHB4YTJ4eF9wY21jaWFfYXR0cl93cml0ZSwKKyAgICBweGEyeHhfcGNtY2lhX2F0 dHJfd3JpdGUsCit9OworCitzdGF0aWMgQ1BVUmVhZE1lbW9yeUZ1bmMgKnB4YTJ4eF9wY21jaWFf aW9fcmVhZGZuW10gPSB7CisgICAgcHhhMnh4X3BjbWNpYV9pb19yZWFkLAorICAgIHB4YTJ4eF9w Y21jaWFfaW9fcmVhZCwKKyAgICBweGEyeHhfcGNtY2lhX2lvX3JlYWQsCit9OworCitzdGF0aWMg Q1BVV3JpdGVNZW1vcnlGdW5jICpweGEyeHhfcGNtY2lhX2lvX3dyaXRlZm5bXSA9IHsKKyAgICBw eGEyeHhfcGNtY2lhX2lvX3dyaXRlLAorICAgIHB4YTJ4eF9wY21jaWFfaW9fd3JpdGUsCisgICAg cHhhMnh4X3BjbWNpYV9pb193cml0ZSwKK307CisKK3N0YXRpYyB2b2lkIHB4YTJ4eF9wY21jaWFf c2V0X2lycSh2b2lkICpvcGFxdWUsIGludCBsaW5lLCBpbnQgbGV2ZWwpCit7CisgICAgc3RydWN0 IHB4YTJ4eF9wY21jaWFfcyAqcyA9IChzdHJ1Y3QgcHhhMnh4X3BjbWNpYV9zICopIG9wYXF1ZTsK KyAgICBpZiAoIXMtPnNldF9pcnEpCisgICAgICAgIHJldHVybjsKKworICAgIHMtPnNldF9pcnEo cy0+cGljLCBzLT5pcnEsIGxldmVsKTsKK30KKworc3RydWN0IHB4YTJ4eF9wY21jaWFfcyAqcHhh Mnh4X3BjbWNpYV9pbml0KHRhcmdldF9waHlzX2FkZHJfdCBiYXNlKQoreworICAgIGludCBpb21l bXR5cGU7CisgICAgc3RydWN0IHB4YTJ4eF9wY21jaWFfcyAqczsKKworICAgIHMgPSAoc3RydWN0 IHB4YTJ4eF9wY21jaWFfcyAqKQorICAgICAgICAgICAgcWVtdV9tYWxsb2N6KHNpemVvZihzdHJ1 Y3QgcHhhMnh4X3BjbWNpYV9zKSk7CisKKyAgICAvKiBTb2NrZXQgSS9PIE1lbW9yeSBTcGFjZSAq LworICAgIHMtPmlvX2Jhc2UgPSBiYXNlIHwgMHgwMDAwMDAwMDsKKyAgICBpb21lbXR5cGUgPSBj cHVfcmVnaXN0ZXJfaW9fbWVtb3J5KDAsIHB4YTJ4eF9wY21jaWFfaW9fcmVhZGZuLAorICAgICAg ICAgICAgICAgICAgICBweGEyeHhfcGNtY2lhX2lvX3dyaXRlZm4sIHMpOworICAgIGNwdV9yZWdp c3Rlcl9waHlzaWNhbF9tZW1vcnkocy0+aW9fYmFzZSwgMHgwM2ZmZmZmZiwgaW9tZW10eXBlKTsK KworICAgIC8qIFRoZW4gbmV4dCA2NCBNQiBpcyByZXNlcnZlZCAqLworCisgICAgLyogU29ja2V0 IEF0dHJpYnV0ZSBNZW1vcnkgU3BhY2UgKi8KKyAgICBzLT5hdHRyX2Jhc2UgPSBiYXNlIHwgMHgw ODAwMDAwMDsKKyAgICBpb21lbXR5cGUgPSBjcHVfcmVnaXN0ZXJfaW9fbWVtb3J5KDAsIHB4YTJ4 eF9wY21jaWFfYXR0cl9yZWFkZm4sCisgICAgICAgICAgICAgICAgICAgIHB4YTJ4eF9wY21jaWFf YXR0cl93cml0ZWZuLCBzKTsKKyAgICBjcHVfcmVnaXN0ZXJfcGh5c2ljYWxfbWVtb3J5KHMtPmF0 dHJfYmFzZSwgMHgwM2ZmZmZmZiwgaW9tZW10eXBlKTsKKworICAgIC8qIFNvY2tldCBDb21tb24g TWVtb3J5IFNwYWNlICovCisgICAgcy0+Y29tbW9uX2Jhc2UgPSBiYXNlIHwgMHgwYzAwMDAwMDsK KyAgICBpb21lbXR5cGUgPSBjcHVfcmVnaXN0ZXJfaW9fbWVtb3J5KDAsIHB4YTJ4eF9wY21jaWFf Y29tbW9uX3JlYWRmbiwKKyAgICAgICAgICAgICAgICAgICAgcHhhMnh4X3BjbWNpYV9jb21tb25f d3JpdGVmbiwgcyk7CisgICAgY3B1X3JlZ2lzdGVyX3BoeXNpY2FsX21lbW9yeShzLT5jb21tb25f YmFzZSwgMHgwM2ZmZmZmZiwgaW9tZW10eXBlKTsKKworICAgIGlmIChiYXNlID09IDB4MzAwMDAw MDApCisgICAgICAgIHMtPnNsb3Quc2xvdF9zdHJpbmcgPSAiUFhBIFBDIENhcmQgU29ja2V0IDEi OworICAgIGVsc2UKKyAgICAgICAgcy0+c2xvdC5zbG90X3N0cmluZyA9ICJQWEEgUEMgQ2FyZCBT b2NrZXQgMCI7CisgICAgcy0+c2xvdC5vcGFxdWUgPSBzOworICAgIHMtPnNsb3Quc2V0X2lycSA9 IHB4YTJ4eF9wY21jaWFfc2V0X2lycTsKKyAgICBwY21jaWFfc29ja2V0X3JlZ2lzdGVyKCZzLT5z bG90KTsKKyAgICByZXR1cm4gczsKK30KKworLyogSW5zZXJ0IGEgbmV3IGNhcmQgaW50byBhIHNs b3QgKi8KK2ludCBweGEyeHhfcGNtY2lhX2F0dGFjaCh2b2lkICpvcGFxdWUsIHN0cnVjdCBwY21j aWFfY2FyZF9zICpjYXJkKQoreworICAgIHN0cnVjdCBweGEyeHhfcGNtY2lhX3MgKnMgPSAoc3Ry dWN0IHB4YTJ4eF9wY21jaWFfcyAqKSBvcGFxdWU7CisgICAgaWYgKHMtPnNsb3QuYXR0YWNoZWQp CisgICAgICAgIHJldHVybiAtRUVYSVNUOworCisgICAgaWYgKHMtPnNldF9pcnEpIHsKKyAgICAg ICAgcy0+c2V0X2lycShzLT5waWMsIHMtPmNkX2lycSwgMSk7CisgICAgfQorCisgICAgcy0+Y2Fy ZCA9IGNhcmQ7CisKKyAgICBzLT5zbG90LmF0dGFjaGVkID0gMTsKKyAgICBzLT5jYXJkLT5zbG90 ID0gJnMtPnNsb3Q7CisgICAgcy0+Y2FyZC0+YXR0YWNoKHMtPmNhcmQtPnN0YXRlKTsKKworICAg IHJldHVybiAwOworfQorCisvKiBFamVjdCBjYXJkIGZyb20gdGhlIHNsb3QgKi8KK2ludCBweGEy eHhfcGNtY2lhX2RldHRhY2godm9pZCAqb3BhcXVlKQoreworICAgIHN0cnVjdCBweGEyeHhfcGNt Y2lhX3MgKnMgPSAoc3RydWN0IHB4YTJ4eF9wY21jaWFfcyAqKSBvcGFxdWU7CisgICAgaWYgKCFz LT5zbG90LmF0dGFjaGVkKQorICAgICAgICByZXR1cm4gLUVOT0VOVDsKKworICAgIHMtPmNhcmQt PmRldGFjaChzLT5jYXJkLT5zdGF0ZSk7CisgICAgcy0+Y2FyZC0+c2xvdCA9IDA7CisgICAgcy0+ Y2FyZCA9IDA7CisKKyAgICBzLT5zbG90LmF0dGFjaGVkID0gMDsKKworICAgIGlmIChzLT5zZXRf aXJxKSB7CisgICAgICAgIHMtPnNldF9pcnEocy0+cGljLCBzLT5pcnEsIDApOworICAgICAgICBz LT5zZXRfaXJxKHMtPnBpYywgcy0+Y2RfaXJxLCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsK K30KKworLyogV2hvIHRvIG5vdGlmeSBvbiBjYXJkIGV2ZW50cyAqLwordm9pZCBweGEyeHhfcGNt Y2lhX3NldF9pcnFfY2Iodm9pZCAqb3BhcXVlLCB2b2lkICgqc2V0X2lycSkodm9pZCAqb3BhcXVl LAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmUsIGludCBsZXZlbCksIGludCBpcnEs IGludCBjZF9pcnEsIHZvaWQgKnBpYykKK3sKKyAgICBzdHJ1Y3QgcHhhMnh4X3BjbWNpYV9zICpz ID0gKHN0cnVjdCBweGEyeHhfcGNtY2lhX3MgKikgb3BhcXVlOworICAgIHMtPnNldF9pcnEgPSBz ZXRfaXJxOworICAgIHMtPnBpYyA9IHBpYzsKKyAgICBzLT5pcnEgPSBpcnE7CisgICAgcy0+Y2Rf aXJxID0gY2RfaXJxOworfQpkaWZmIC0tZ2l0IGEvaHcvcHhhMnh4X3RlbXBsYXRlLmggYi9ody9w eGEyeHhfdGVtcGxhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDFi ZTEyCi0tLSAvZGV2L251bGwKKysrIGIvaHcvcHhhMnh4X3RlbXBsYXRlLmgKQEAgLTAsMCArMSw0 MzEgQEAKKy8qCisgKiBJbnRlbCBYU2NhbGUgUFhBMjU1LzI3MCBMQ0RDIGVtdWxhdGlvbi4KKyAq CisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3BlbmVkaGFuZCBMdGQuCisgKiBXcml0dGVuIGJ5IEFu ZHJ6ZWogWmFib3Jvd3NraSA8YmFscm9nQHphYm9yLm9yZz4KKyAqCisgKiBUaGlzIGNvZGUgaXMg bGljZW5zZWQgdW5kZXIgdGhlIEdQTHYyLgorICoKKyAqIEZyYW1lYnVmZmVyIGZvcm1hdCBjb252 ZXJzaW9uIHJvdXRpbmVzLgorICovCisKKyMgZGVmaW5lIFNLSVBfUElYRUwodG8pCQl0byArPSBk ZXN0c3RlcAorI2lmIEJJVFMgPT0gOAorIyBkZWZpbmUgQ09QWV9QSVhFTCh0bywgZnJvbSkJKnRv ID0gZnJvbTsgU0tJUF9QSVhFTCh0bykKKyNlbGlmIEJJVFMgPT0gMTUgfHwgQklUUyA9PSAxNgor IyBkZWZpbmUgQ09QWV9QSVhFTCh0bywgZnJvbSkJKih1aW50MTZfdCAqKSB0byA9IGZyb207IFNL SVBfUElYRUwodG8pCisjZWxpZiBCSVRTID09IDI0IAorIyBkZWZpbmUgQ09QWV9QSVhFTCh0bywg ZnJvbSkJXAorCSoodWludDE2X3QgKikgdG8gPSBmcm9tOyAqKHRvICsgMikgPSAoZnJvbSkgPj4g MTY7IFNLSVBfUElYRUwodG8pCisjZWxpZiBCSVRTID09IDMyCisjIGRlZmluZSBDT1BZX1BJWEVM KHRvLCBmcm9tKQkqKHVpbnQzMl90ICopIHRvID0gZnJvbTsgU0tJUF9QSVhFTCh0bykKKyNlbHNl CisjIGVycm9yIHVua25vd24gYml0IGRlcHRoCisjZW5kaWYKKworI2lmZGVmIFdPUkRTX0JJR0VO RElBTgorIyBkZWZpbmUgU1dBUF9XT1JEUwkxCisjZW5kaWYKKworI2RlZmluZSBGTl8yKHgpCQlG Tih4ICsgMSkgRk4oeCkKKyNkZWZpbmUgRk5fNCh4KQkJRk5fMih4ICsgMikgRk5fMih4KQorCitz dGF0aWMgdm9pZCBnbHVlKHB4YTJ4eF9kcmF3X2xpbmUyXywgQklUUykodWludDMyX3QgKnBhbGV0 dGUsCisgICAgICAgICAgICAgICAgdWludDhfdCAqZGVzdCwgY29uc3QgdWludDhfdCAqc3JjLCBp bnQgd2lkdGgsIGludCBkZXN0c3RlcCkKK3sKKyAgICB1aW50MzJfdCBkYXRhOworICAgIHdoaWxl ICh3aWR0aCA+IDApIHsKKyAgICAgICAgZGF0YSA9ICoodWludDMyX3QgKikgc3JjOworI2RlZmlu ZSBGTih4KQkJQ09QWV9QSVhFTChkZXN0LCBwYWxldHRlWyhkYXRhID4+ICgoeCkgKiAyKSkgJiAz XSk7CisjaWZkZWYgU1dBUF9XT1JEUworICAgICAgICBGTl80KDEyKQorICAgICAgICBGTl80KDgp CisgICAgICAgIEZOXzQoNCkKKyAgICAgICAgRk5fNCgwKQorI2Vsc2UKKyAgICAgICAgRk5fNCgw KQorICAgICAgICBGTl80KDQpCisgICAgICAgIEZOXzQoOCkKKyAgICAgICAgRk5fNCgxMikKKyNl bmRpZgorI3VuZGVmIEZOCisgICAgICAgIHdpZHRoIC09IDE2OworICAgICAgICBzcmMgKz0gNDsK KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGdsdWUocHhhMnh4X2RyYXdfbGluZTRfLCBCSVRTKSh1 aW50MzJfdCAqcGFsZXR0ZSwKKyAgICAgICAgICAgICAgICB1aW50OF90ICpkZXN0LCBjb25zdCB1 aW50OF90ICpzcmMsIGludCB3aWR0aCwgaW50IGRlc3RzdGVwKQoreworICAgIHVpbnQzMl90IGRh dGE7CisgICAgd2hpbGUgKHdpZHRoID4gMCkgeworICAgICAgICBkYXRhID0gKih1aW50MzJfdCAq KSBzcmM7CisjZGVmaW5lIEZOKHgpCQlDT1BZX1BJWEVMKGRlc3QsIHBhbGV0dGVbKGRhdGEgPj4g KCh4KSAqIDQpKSAmIDB4Zl0pOworI2lmZGVmIFNXQVBfV09SRFMKKyAgICAgICAgRk5fMig2KQor ICAgICAgICBGTl8yKDQpCisgICAgICAgIEZOXzIoMikKKyAgICAgICAgRk5fMigwKQorI2Vsc2UK KyAgICAgICAgRk5fMigwKQorICAgICAgICBGTl8yKDIpCisgICAgICAgIEZOXzIoNCkKKyAgICAg ICAgRk5fMig2KQorI2VuZGlmCisjdW5kZWYgRk4KKyAgICAgICAgd2lkdGggLT0gODsKKyAgICAg ICAgc3JjICs9IDQ7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBnbHVlKHB4YTJ4eF9kcmF3X2xp bmU4XywgQklUUykodWludDMyX3QgKnBhbGV0dGUsCisgICAgICAgICAgICAgICAgdWludDhfdCAq ZGVzdCwgY29uc3QgdWludDhfdCAqc3JjLCBpbnQgd2lkdGgsIGludCBkZXN0c3RlcCkKK3sKKyAg ICB1aW50MzJfdCBkYXRhOworICAgIHdoaWxlICh3aWR0aCA+IDApIHsKKyAgICAgICAgZGF0YSA9 ICoodWludDMyX3QgKikgc3JjOworI2RlZmluZSBGTih4KQkJQ09QWV9QSVhFTChkZXN0LCBwYWxl dHRlWyhkYXRhID4+ICh4KSkgJiAweGZmXSk7CisjaWZkZWYgU1dBUF9XT1JEUworICAgICAgICBG TigyNCkKKyAgICAgICAgRk4oMTYpCisgICAgICAgIEZOKDgpCisgICAgICAgIEZOKDApCisjZWxz ZQorICAgICAgICBGTigwKQorICAgICAgICBGTig4KQorICAgICAgICBGTigxNikKKyAgICAgICAg Rk4oMjQpCisjZW5kaWYKKyN1bmRlZiBGTgorICAgICAgICB3aWR0aCAtPSA0OworICAgICAgICBz cmMgKz0gNDsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGdsdWUocHhhMnh4X2RyYXdfbGluZTE2 XywgQklUUykodWludDMyX3QgKnBhbGV0dGUsCisgICAgICAgICAgICAgICAgdWludDhfdCAqZGVz dCwgY29uc3QgdWludDhfdCAqc3JjLCBpbnQgd2lkdGgsIGludCBkZXN0c3RlcCkKK3sKKyAgICB1 aW50MzJfdCBkYXRhOworICAgIHVuc2lnbmVkIGludCByLCBnLCBiOworICAgIHdoaWxlICh3aWR0 aCA+IDApIHsKKyAgICAgICAgZGF0YSA9ICoodWludDMyX3QgKikgc3JjOworI2lmZGVmIFNXQVBf V09SRFMKKyAgICAgICAgZGF0YSA9IGJzd2FwMzIoZGF0YSk7CisjZW5kaWYKKyAgICAgICAgYiA9 IChkYXRhICYgMHgxZikgPDwgMzsKKyAgICAgICAgZGF0YSA+Pj0gNTsKKyAgICAgICAgZyA9IChk YXRhICYgMHgzZikgPDwgMjsKKyAgICAgICAgZGF0YSA+Pj0gNjsKKyAgICAgICAgciA9IChkYXRh ICYgMHgxZikgPDwgMzsKKyAgICAgICAgZGF0YSA+Pj0gNTsKKyAgICAgICAgQ09QWV9QSVhFTChk ZXN0LCBnbHVlKHJnYl90b19waXhlbCwgQklUUykociwgZywgYikpOworICAgICAgICBiID0gKGRh dGEgJiAweDFmKSA8PCAzOworICAgICAgICBkYXRhID4+PSA1OworICAgICAgICBnID0gKGRhdGEg JiAweDNmKSA8PCAyOworICAgICAgICBkYXRhID4+PSA2OworICAgICAgICByID0gKGRhdGEgJiAw eDFmKSA8PCAzOworICAgICAgICBDT1BZX1BJWEVMKGRlc3QsIGdsdWUocmdiX3RvX3BpeGVsLCBC SVRTKShyLCBnLCBiKSk7CisgICAgICAgIHdpZHRoIC09IDI7CisgICAgICAgIHNyYyArPSA0Owor ICAgIH0KK30KKworc3RhdGljIHZvaWQgZ2x1ZShweGEyeHhfZHJhd19saW5lMTZ0XywgQklUUyko dWludDMyX3QgKnBhbGV0dGUsCisgICAgICAgICAgICAgICAgdWludDhfdCAqZGVzdCwgY29uc3Qg dWludDhfdCAqc3JjLCBpbnQgd2lkdGgsIGludCBkZXN0c3RlcCkKK3sKKyAgICB1aW50MzJfdCBk YXRhOworICAgIHVuc2lnbmVkIGludCByLCBnLCBiOworICAgIHdoaWxlICh3aWR0aCA+IDApIHsK KyAgICAgICAgZGF0YSA9ICoodWludDMyX3QgKikgc3JjOworI2lmZGVmIFNXQVBfV09SRFMKKyAg ICAgICAgZGF0YSA9IGJzd2FwMzIoZGF0YSk7CisjZW5kaWYKKyAgICAgICAgYiA9IChkYXRhICYg MHgxZikgPDwgMzsKKyAgICAgICAgZGF0YSA+Pj0gNTsKKyAgICAgICAgZyA9IChkYXRhICYgMHgx ZikgPDwgMzsKKyAgICAgICAgZGF0YSA+Pj0gNTsKKyAgICAgICAgciA9IChkYXRhICYgMHgxZikg PDwgMzsKKyAgICAgICAgZGF0YSA+Pj0gNTsKKyAgICAgICAgaWYgKGRhdGEgJiAxKQorICAgICAg ICAgICAgU0tJUF9QSVhFTChkZXN0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQ09QWV9Q SVhFTChkZXN0LCBnbHVlKHJnYl90b19waXhlbCwgQklUUykociwgZywgYikpOworICAgICAgICBk YXRhID4+PSAxOworICAgICAgICBiID0gKGRhdGEgJiAweDFmKSA8PCAzOworICAgICAgICBkYXRh ID4+PSA1OworICAgICAgICBnID0gKGRhdGEgJiAweDFmKSA8PCAzOworICAgICAgICBkYXRhID4+ PSA1OworICAgICAgICByID0gKGRhdGEgJiAweDFmKSA8PCAzOworICAgICAgICBpZiAoZGF0YSAm IDEpCisgICAgICAgICAgICBTS0lQX1BJWEVMKGRlc3QpOworICAgICAgICBlbHNlCisgICAgICAg ICAgICBDT1BZX1BJWEVMKGRlc3QsIGdsdWUocmdiX3RvX3BpeGVsLCBCSVRTKShyLCBnLCBiKSk7 CisgICAgICAgIHdpZHRoIC09IDI7CisgICAgICAgIHNyYyArPSA0OworICAgIH0KK30KKworc3Rh dGljIHZvaWQgZ2x1ZShweGEyeHhfZHJhd19saW5lMThfLCBCSVRTKSh1aW50MzJfdCAqcGFsZXR0 ZSwKKyAgICAgICAgICAgICAgICB1aW50OF90ICpkZXN0LCBjb25zdCB1aW50OF90ICpzcmMsIGlu dCB3aWR0aCwgaW50IGRlc3RzdGVwKQoreworICAgIHVpbnQzMl90IGRhdGE7CisgICAgdW5zaWdu ZWQgaW50IHIsIGcsIGI7CisgICAgd2hpbGUgKHdpZHRoID4gMCkgeworICAgICAgICBkYXRhID0g Kih1aW50MzJfdCAqKSBzcmM7CisjaWZkZWYgU1dBUF9XT1JEUworICAgICAgICBkYXRhID0gYnN3 YXAzMihkYXRhKTsKKyNlbmRpZgorICAgICAgICBiID0gKGRhdGEgJiAweDNmKSA8PCAyOworICAg ICAgICBkYXRhID4+PSA2OworICAgICAgICBnID0gKGRhdGEgJiAweDNmKSA8PCAyOworICAgICAg ICBkYXRhID4+PSA2OworICAgICAgICByID0gKGRhdGEgJiAweDNmKSA8PCAyOworICAgICAgICBD T1BZX1BJWEVMKGRlc3QsIGdsdWUocmdiX3RvX3BpeGVsLCBCSVRTKShyLCBnLCBiKSk7CisgICAg ICAgIHdpZHRoIC09IDE7CisgICAgICAgIHNyYyArPSA0OworICAgIH0KK30KKworLyogVGhlIHdp Y2tlZCBwYWNrZWQgZm9ybWF0ICovCitzdGF0aWMgdm9pZCBnbHVlKHB4YTJ4eF9kcmF3X2xpbmUx OHBfLCBCSVRTKSh1aW50MzJfdCAqcGFsZXR0ZSwKKyAgICAgICAgICAgICAgICB1aW50OF90ICpk ZXN0LCBjb25zdCB1aW50OF90ICpzcmMsIGludCB3aWR0aCwgaW50IGRlc3RzdGVwKQoreworICAg IHVpbnQzMl90IGRhdGFbM107CisgICAgdW5zaWduZWQgaW50IHIsIGcsIGI7CisgICAgd2hpbGUg KHdpZHRoID4gMCkgeworICAgICAgICBkYXRhWzBdID0gKih1aW50MzJfdCAqKSBzcmM7CisgICAg ICAgIHNyYyArPSA0OworICAgICAgICBkYXRhWzFdID0gKih1aW50MzJfdCAqKSBzcmM7CisgICAg ICAgIHNyYyArPSA0OworICAgICAgICBkYXRhWzJdID0gKih1aW50MzJfdCAqKSBzcmM7CisgICAg ICAgIHNyYyArPSA0OworI2lmZGVmIFNXQVBfV09SRFMKKyAgICAgICAgZGF0YVswXSA9IGJzd2Fw MzIoZGF0YVswXSk7CisgICAgICAgIGRhdGFbMV0gPSBic3dhcDMyKGRhdGFbMV0pOworICAgICAg ICBkYXRhWzJdID0gYnN3YXAzMihkYXRhWzJdKTsKKyNlbmRpZgorICAgICAgICBiID0gKGRhdGFb MF0gJiAweDNmKSA8PCAyOworICAgICAgICBkYXRhWzBdID4+PSA2OworICAgICAgICBnID0gKGRh dGFbMF0gJiAweDNmKSA8PCAyOworICAgICAgICBkYXRhWzBdID4+PSA2OworICAgICAgICByID0g KGRhdGFbMF0gJiAweDNmKSA8PCAyOworICAgICAgICBkYXRhWzBdID4+PSAxMjsKKyAgICAgICAg Q09QWV9QSVhFTChkZXN0LCBnbHVlKHJnYl90b19waXhlbCwgQklUUykociwgZywgYikpOworICAg ICAgICBiID0gKGRhdGFbMF0gJiAweDNmKSA8PCAyOworICAgICAgICBkYXRhWzBdID4+PSA2Owor ICAgICAgICBnID0gKChkYXRhWzFdICYgMHhmKSA8PCA0KSB8IChkYXRhWzBdIDw8IDIpOworICAg ICAgICBkYXRhWzFdID4+PSA0OworICAgICAgICByID0gKGRhdGFbMV0gJiAweDNmKSA8PCAyOwor ICAgICAgICBkYXRhWzFdID4+PSAxMjsKKyAgICAgICAgQ09QWV9QSVhFTChkZXN0LCBnbHVlKHJn Yl90b19waXhlbCwgQklUUykociwgZywgYikpOworICAgICAgICBiID0gKGRhdGFbMV0gJiAweDNm KSA8PCAyOworICAgICAgICBkYXRhWzFdID4+PSA2OworICAgICAgICBnID0gKGRhdGFbMV0gJiAw eDNmKSA8PCAyOworICAgICAgICBkYXRhWzFdID4+PSA2OworICAgICAgICByID0gKChkYXRhWzJd ICYgMHgzKSA8PCA2KSB8IChkYXRhWzFdIDw8IDIpOworICAgICAgICBkYXRhWzJdID4+PSA4Owor ICAgICAgICBDT1BZX1BJWEVMKGRlc3QsIGdsdWUocmdiX3RvX3BpeGVsLCBCSVRTKShyLCBnLCBi KSk7CisgICAgICAgIGIgPSAoZGF0YVsyXSAmIDB4M2YpIDw8IDI7CisgICAgICAgIGRhdGFbMl0g Pj49IDY7CisgICAgICAgIGcgPSAoZGF0YVsyXSAmIDB4M2YpIDw8IDI7CisgICAgICAgIGRhdGFb Ml0gPj49IDY7CisgICAgICAgIHIgPSBkYXRhWzJdIDw8IDI7CisgICAgICAgIENPUFlfUElYRUwo ZGVzdCwgZ2x1ZShyZ2JfdG9fcGl4ZWwsIEJJVFMpKHIsIGcsIGIpKTsKKyAgICAgICAgd2lkdGgg LT0gNDsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGdsdWUocHhhMnh4X2RyYXdfbGluZTE5Xywg QklUUykodWludDMyX3QgKnBhbGV0dGUsCisgICAgICAgICAgICAgICAgdWludDhfdCAqZGVzdCwg Y29uc3QgdWludDhfdCAqc3JjLCBpbnQgd2lkdGgsIGludCBkZXN0c3RlcCkKK3sKKyAgICB1aW50 MzJfdCBkYXRhOworICAgIHVuc2lnbmVkIGludCByLCBnLCBiOworICAgIHdoaWxlICh3aWR0aCA+ IDApIHsKKyAgICAgICAgZGF0YSA9ICoodWludDMyX3QgKikgc3JjOworI2lmZGVmIFNXQVBfV09S RFMKKyAgICAgICAgZGF0YSA9IGJzd2FwMzIoZGF0YSk7CisjZW5kaWYKKyAgICAgICAgYiA9IChk YXRhICYgMHgzZikgPDwgMjsKKyAgICAgICAgZGF0YSA+Pj0gNjsKKyAgICAgICAgZyA9IChkYXRh ICYgMHgzZikgPDwgMjsKKyAgICAgICAgZGF0YSA+Pj0gNjsKKyAgICAgICAgciA9IChkYXRhICYg MHgzZikgPDwgMjsKKyAgICAgICAgZGF0YSA+Pj0gNjsKKyAgICAgICAgaWYgKGRhdGEgJiAxKQor ICAgICAgICAgICAgU0tJUF9QSVhFTChkZXN0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg Q09QWV9QSVhFTChkZXN0LCBnbHVlKHJnYl90b19waXhlbCwgQklUUykociwgZywgYikpOworICAg ICAgICB3aWR0aCAtPSAxOworICAgICAgICBzcmMgKz0gNDsKKyAgICB9Cit9CisKKy8qIFRoZSB3 aWNrZWQgcGFja2VkIGZvcm1hdCAqLworc3RhdGljIHZvaWQgZ2x1ZShweGEyeHhfZHJhd19saW5l MTlwXywgQklUUykodWludDMyX3QgKnBhbGV0dGUsCisgICAgICAgICAgICAgICAgdWludDhfdCAq ZGVzdCwgY29uc3QgdWludDhfdCAqc3JjLCBpbnQgd2lkdGgsIGludCBkZXN0c3RlcCkKK3sKKyAg ICB1aW50MzJfdCBkYXRhWzNdOworICAgIHVuc2lnbmVkIGludCByLCBnLCBiOworICAgIHdoaWxl ICh3aWR0aCA+IDApIHsKKyAgICAgICAgZGF0YVswXSA9ICoodWludDMyX3QgKikgc3JjOworICAg ICAgICBzcmMgKz0gNDsKKyAgICAgICAgZGF0YVsxXSA9ICoodWludDMyX3QgKikgc3JjOworICAg ICAgICBzcmMgKz0gNDsKKyAgICAgICAgZGF0YVsyXSA9ICoodWludDMyX3QgKikgc3JjOworICAg ICAgICBzcmMgKz0gNDsKKyMgaWZkZWYgU1dBUF9XT1JEUworICAgICAgICBkYXRhWzBdID0gYnN3 YXAzMihkYXRhWzBdKTsKKyAgICAgICAgZGF0YVsxXSA9IGJzd2FwMzIoZGF0YVsxXSk7CisgICAg ICAgIGRhdGFbMl0gPSBic3dhcDMyKGRhdGFbMl0pOworIyBlbmRpZgorICAgICAgICBiID0gKGRh dGFbMF0gJiAweDNmKSA8PCAyOworICAgICAgICBkYXRhWzBdID4+PSA2OworICAgICAgICBnID0g KGRhdGFbMF0gJiAweDNmKSA8PCAyOworICAgICAgICBkYXRhWzBdID4+PSA2OworICAgICAgICBy ID0gKGRhdGFbMF0gJiAweDNmKSA8PCAyOworICAgICAgICBkYXRhWzBdID4+PSA2OworICAgICAg ICBpZiAoZGF0YVswXSAmIDEpCisgICAgICAgICAgICBTS0lQX1BJWEVMKGRlc3QpOworICAgICAg ICBlbHNlCisgICAgICAgICAgICBDT1BZX1BJWEVMKGRlc3QsIGdsdWUocmdiX3RvX3BpeGVsLCBC SVRTKShyLCBnLCBiKSk7CisgICAgICAgIGRhdGFbMF0gPj49IDY7CisgICAgICAgIGIgPSAoZGF0 YVswXSAmIDB4M2YpIDw8IDI7CisgICAgICAgIGRhdGFbMF0gPj49IDY7CisgICAgICAgIGcgPSAo KGRhdGFbMV0gJiAweGYpIDw8IDQpIHwgKGRhdGFbMF0gPDwgMik7CisgICAgICAgIGRhdGFbMV0g Pj49IDQ7CisgICAgICAgIHIgPSAoZGF0YVsxXSAmIDB4M2YpIDw8IDI7CisgICAgICAgIGRhdGFb MV0gPj49IDY7CisgICAgICAgIGlmIChkYXRhWzFdICYgMSkKKyAgICAgICAgICAgIFNLSVBfUElY RUwoZGVzdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIENPUFlfUElYRUwoZGVzdCwgZ2x1 ZShyZ2JfdG9fcGl4ZWwsIEJJVFMpKHIsIGcsIGIpKTsKKyAgICAgICAgZGF0YVsxXSA+Pj0gNjsK KyAgICAgICAgYiA9IChkYXRhWzFdICYgMHgzZikgPDwgMjsKKyAgICAgICAgZGF0YVsxXSA+Pj0g NjsKKyAgICAgICAgZyA9IChkYXRhWzFdICYgMHgzZikgPDwgMjsKKyAgICAgICAgZGF0YVsxXSA+ Pj0gNjsKKyAgICAgICAgciA9ICgoZGF0YVsyXSAmIDB4MykgPDwgNikgfCAoZGF0YVsxXSA8PCAy KTsKKyAgICAgICAgZGF0YVsyXSA+Pj0gMjsKKyAgICAgICAgaWYgKGRhdGFbMl0gJiAxKQorICAg ICAgICAgICAgU0tJUF9QSVhFTChkZXN0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQ09Q WV9QSVhFTChkZXN0LCBnbHVlKHJnYl90b19waXhlbCwgQklUUykociwgZywgYikpOworICAgICAg ICBkYXRhWzJdID4+PSA2OworICAgICAgICBiID0gKGRhdGFbMl0gJiAweDNmKSA8PCAyOworICAg ICAgICBkYXRhWzJdID4+PSA2OworICAgICAgICBnID0gKGRhdGFbMl0gJiAweDNmKSA8PCAyOwor ICAgICAgICBkYXRhWzJdID4+PSA2OworICAgICAgICByID0gZGF0YVsyXSA8PCAyOworICAgICAg ICBkYXRhWzJdID4+PSA2OworICAgICAgICBpZiAoZGF0YVsyXSAmIDEpCisgICAgICAgICAgICBT S0lQX1BJWEVMKGRlc3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBDT1BZX1BJWEVMKGRl c3QsIGdsdWUocmdiX3RvX3BpeGVsLCBCSVRTKShyLCBnLCBiKSk7CisgICAgICAgIHdpZHRoIC09 IDQ7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBnbHVlKHB4YTJ4eF9kcmF3X2xpbmUyNF8sIEJJ VFMpKHVpbnQzMl90ICpwYWxldHRlLAorICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmRlc3QsIGNv bnN0IHVpbnQ4X3QgKnNyYywgaW50IHdpZHRoLCBpbnQgZGVzdHN0ZXApCit7CisgICAgdWludDMy X3QgZGF0YTsKKyAgICB1bnNpZ25lZCBpbnQgciwgZywgYjsKKyAgICB3aGlsZSAod2lkdGggPiAw KSB7CisgICAgICAgIGRhdGEgPSAqKHVpbnQzMl90ICopIHNyYzsKKyNpZmRlZiBTV0FQX1dPUkRT CisgICAgICAgIGRhdGEgPSBic3dhcDMyKGRhdGEpOworI2VuZGlmCisgICAgICAgIGIgPSBkYXRh ICYgMHhmZjsKKyAgICAgICAgZGF0YSA+Pj0gODsKKyAgICAgICAgZyA9IGRhdGEgJiAweGZmOwor ICAgICAgICBkYXRhID4+PSA4OworICAgICAgICByID0gZGF0YSAmIDB4ZmY7CisgICAgICAgIENP UFlfUElYRUwoZGVzdCwgZ2x1ZShyZ2JfdG9fcGl4ZWwsIEJJVFMpKHIsIGcsIGIpKTsKKyAgICAg ICAgd2lkdGggLT0gMTsKKyAgICAgICAgc3JjICs9IDQ7CisgICAgfQorfQorCitzdGF0aWMgdm9p ZCBnbHVlKHB4YTJ4eF9kcmF3X2xpbmUyNHRfLCBCSVRTKSh1aW50MzJfdCAqcGFsZXR0ZSwKKyAg ICAgICAgICAgICAgICB1aW50OF90ICpkZXN0LCBjb25zdCB1aW50OF90ICpzcmMsIGludCB3aWR0 aCwgaW50IGRlc3RzdGVwKQoreworICAgIHVpbnQzMl90IGRhdGE7CisgICAgdW5zaWduZWQgaW50 IHIsIGcsIGI7CisgICAgd2hpbGUgKHdpZHRoID4gMCkgeworICAgICAgICBkYXRhID0gKih1aW50 MzJfdCAqKSBzcmM7CisjaWZkZWYgU1dBUF9XT1JEUworICAgICAgICBkYXRhID0gYnN3YXAzMihk YXRhKTsKKyNlbmRpZgorICAgICAgICBiID0gKGRhdGEgJiAweDdmKSA8PCAxOworICAgICAgICBk YXRhID4+PSA3OworICAgICAgICBnID0gZGF0YSAmIDB4ZmY7CisgICAgICAgIGRhdGEgPj49IDg7 CisgICAgICAgIHIgPSBkYXRhICYgMHhmZjsKKyAgICAgICAgZGF0YSA+Pj0gODsKKyAgICAgICAg aWYgKGRhdGEgJiAxKQorICAgICAgICAgICAgU0tJUF9QSVhFTChkZXN0KTsKKyAgICAgICAgZWxz ZQorICAgICAgICAgICAgQ09QWV9QSVhFTChkZXN0LCBnbHVlKHJnYl90b19waXhlbCwgQklUUyko ciwgZywgYikpOworICAgICAgICB3aWR0aCAtPSAxOworICAgICAgICBzcmMgKz0gNDsKKyAgICB9 Cit9CisKK3N0YXRpYyB2b2lkIGdsdWUocHhhMnh4X2RyYXdfbGluZTI1XywgQklUUykodWludDMy X3QgKnBhbGV0dGUsCisgICAgICAgICAgICAgICAgdWludDhfdCAqZGVzdCwgY29uc3QgdWludDhf dCAqc3JjLCBpbnQgd2lkdGgsIGludCBkZXN0c3RlcCkKK3sKKyAgICB1aW50MzJfdCBkYXRhOwor ICAgIHVuc2lnbmVkIGludCByLCBnLCBiOworICAgIHdoaWxlICh3aWR0aCA+IDApIHsKKyAgICAg ICAgZGF0YSA9ICoodWludDMyX3QgKikgc3JjOworI2lmZGVmIFNXQVBfV09SRFMKKyAgICAgICAg ZGF0YSA9IGJzd2FwMzIoZGF0YSk7CisjZW5kaWYKKyAgICAgICAgYiA9IGRhdGEgJiAweGZmOwor ICAgICAgICBkYXRhID4+PSA4OworICAgICAgICBnID0gZGF0YSAmIDB4ZmY7CisgICAgICAgIGRh dGEgPj49IDg7CisgICAgICAgIHIgPSBkYXRhICYgMHhmZjsKKyAgICAgICAgZGF0YSA+Pj0gODsK KyAgICAgICAgaWYgKGRhdGEgJiAxKQorICAgICAgICAgICAgU0tJUF9QSVhFTChkZXN0KTsKKyAg ICAgICAgZWxzZQorICAgICAgICAgICAgQ09QWV9QSVhFTChkZXN0LCBnbHVlKHJnYl90b19waXhl bCwgQklUUykociwgZywgYikpOworICAgICAgICB3aWR0aCAtPSAxOworICAgICAgICBzcmMgKz0g NDsKKyAgICB9Cit9CisKKy8qIE92ZXJsYXkgcGxhbmVzIGRpc2FibGVkLCBubyB0cmFuc3BhcmVu Y3kgKi8KK3N0YXRpYyBkcmF3Zm4gZ2x1ZShweGEyeHhfZHJhd19mbl8sIEJJVFMpWzE2XSA9Cit7 CisgICAgWzAgLi4uIDB4Zl0gICAgICAgPSAwLAorICAgIFtweGFfbGNkY18yYnBwXSAgID0gZ2x1 ZShweGEyeHhfZHJhd19saW5lMl8sIEJJVFMpLAorICAgIFtweGFfbGNkY180YnBwXSAgID0gZ2x1 ZShweGEyeHhfZHJhd19saW5lNF8sIEJJVFMpLAorICAgIFtweGFfbGNkY184YnBwXSAgID0gZ2x1 ZShweGEyeHhfZHJhd19saW5lOF8sIEJJVFMpLAorICAgIFtweGFfbGNkY18xNmJwcF0gID0gZ2x1 ZShweGEyeHhfZHJhd19saW5lMTZfLCBCSVRTKSwKKyAgICBbcHhhX2xjZGNfMThicHBdICA9IGds dWUocHhhMnh4X2RyYXdfbGluZTE4XywgQklUUyksCisgICAgW3B4YV9sY2RjXzE4cGJwcF0gPSBn bHVlKHB4YTJ4eF9kcmF3X2xpbmUxOHBfLCBCSVRTKSwKKyAgICBbcHhhX2xjZGNfMjRicHBdICA9 IGdsdWUocHhhMnh4X2RyYXdfbGluZTI0XywgQklUUyksCit9OworCisvKiBPdmVybGF5IHBsYW5l cyBlbmFibGVkLCB0cmFuc3BhcmVuY3kgdXNlZCAqLworc3RhdGljIGRyYXdmbiBnbHVlKGdsdWUo cHhhMnh4X2RyYXdfZm5fLCBCSVRTKSwgdClbMTZdID0KK3sKKyAgICBbMCAuLi4gMHhmXSAgICAg ICA9IDAsCisgICAgW3B4YV9sY2RjXzRicHBdICAgPSBnbHVlKHB4YTJ4eF9kcmF3X2xpbmU0Xywg QklUUyksCisgICAgW3B4YV9sY2RjXzhicHBdICAgPSBnbHVlKHB4YTJ4eF9kcmF3X2xpbmU4Xywg QklUUyksCisgICAgW3B4YV9sY2RjXzE2YnBwXSAgPSBnbHVlKHB4YTJ4eF9kcmF3X2xpbmUxNnRf LCBCSVRTKSwKKyAgICBbcHhhX2xjZGNfMTlicHBdICA9IGdsdWUocHhhMnh4X2RyYXdfbGluZTE5 XywgQklUUyksCisgICAgW3B4YV9sY2RjXzE5cGJwcF0gPSBnbHVlKHB4YTJ4eF9kcmF3X2xpbmUx OXBfLCBCSVRTKSwKKyAgICBbcHhhX2xjZGNfMjRicHBdICA9IGdsdWUocHhhMnh4X2RyYXdfbGlu ZTI0dF8sIEJJVFMpLAorICAgIFtweGFfbGNkY18yNWJwcF0gID0gZ2x1ZShweGEyeHhfZHJhd19s aW5lMjVfLCBCSVRTKSwKK307CisKKyN1bmRlZiBCSVRTCisjdW5kZWYgQ09QWV9QSVhFTAorI3Vu ZGVmIFNLSVBfUElYRUwKKworI2lmZGVmIFNXQVBfV09SRFMKKyMgdW5kZWYgU1dBUF9XT1JEUwor I2VuZGlmCmRpZmYgLS1naXQgYS9ody9weGEyeHhfdGltZXIuYyBiL2h3L3B4YTJ4eF90aW1lci5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZmYwMWEKLS0tIC9kZXYvbnVs bAorKysgYi9ody9weGEyeHhfdGltZXIuYwpAQCAtMCwwICsxLDQzNyBAQAorLyoKKyAqIEludGVs IFhTY2FsZSBQWEEyNTUvMjcwIE9TIFRpbWVycy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYg T3BlbmVkaGFuZCBMdGQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgVGhvcnN0ZW4gWml0dGVyZWxs CisgKgorICogVGhpcyBjb2RlIGlzIGxpY2VuY2VkIHVuZGVyIHRoZSBHUEwuCisgKi8KKworI2lu Y2x1ZGUgInZsLmgiCisKKyNkZWZpbmUgT1NNUjAJMHgwMAorI2RlZmluZSBPU01SMQkweDA0Cisj ZGVmaW5lIE9TTVIyCTB4MDgKKyNkZWZpbmUgT1NNUjMJMHgwYworI2RlZmluZSBPU01SNAkweDgw CisjZGVmaW5lIE9TTVI1CTB4ODQKKyNkZWZpbmUgT1NNUjYJMHg4OAorI2RlZmluZSBPU01SNwkw eDhjCisjZGVmaW5lIE9TTVI4CTB4OTAKKyNkZWZpbmUgT1NNUjkJMHg5NAorI2RlZmluZSBPU01S MTAJMHg5OAorI2RlZmluZSBPU01SMTEJMHg5YworI2RlZmluZSBPU0NSCTB4MTAJLyogT1MgVGlt ZXIgQ291bnQgKi8KKyNkZWZpbmUgT1NDUjQJMHg0MAorI2RlZmluZSBPU0NSNQkweDQ0CisjZGVm aW5lIE9TQ1I2CTB4NDgKKyNkZWZpbmUgT1NDUjcJMHg0YworI2RlZmluZSBPU0NSOAkweDUwCisj ZGVmaW5lIE9TQ1I5CTB4NTQKKyNkZWZpbmUgT1NDUjEwCTB4NTgKKyNkZWZpbmUgT1NDUjExCTB4 NWMKKyNkZWZpbmUgT1NTUgkweDE0CS8qIFRpbWVyIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmlu ZSBPV0VSCTB4MTgKKyNkZWZpbmUgT0lFUgkweDFjCS8qIEludGVycnVwdCBlbmFibGUgcmVnaXN0 ZXIgIDMtMCB0byBFMy1FMCAqLworI2RlZmluZSBPTUNSNAkweGMwCS8qIE9TIE1hdGNoIENvbnRy b2wgcmVnaXN0ZXJzICovCisjZGVmaW5lIE9NQ1I1CTB4YzQKKyNkZWZpbmUgT01DUjYJMHhjOAor I2RlZmluZSBPTUNSNwkweGNjCisjZGVmaW5lIE9NQ1I4CTB4ZDAKKyNkZWZpbmUgT01DUjkJMHhk NAorI2RlZmluZSBPTUNSMTAJMHhkOAorI2RlZmluZSBPTUNSMTEJMHhkYworI2RlZmluZSBPU05S CTB4MjAKKworI2RlZmluZSBQWEEyNVhfRlJFUQkzNjg2NDAwCS8qIDMuNjg2NCBNSHogKi8KKyNk ZWZpbmUgUFhBMjdYX0ZSRVEJMzI1MDAwMAkvKiAzLjI1IE1IeiAqLworCitzdGF0aWMgaW50IHB4 YTJ4eF90aW1lcjRfZnJlcVs4XSA9IHsKKyAgICBbMF0gPSAwLAorICAgIFsxXSA9IDMyNzY4LAor ICAgIFsyXSA9IDEwMDAsCisgICAgWzNdID0gMSwKKyAgICBbNF0gPSAxMDAwMDAwLAorICAgIC8q IFs1XSBpcyB0aGUgIkV4dGVybmFsbHkgc3VwcGxpZWQgY2xvY2siLiAgQXNzaWduIGlmIG5lY2Vz c2FyeS4gICovCisgICAgWzUgLi4uIDddID0gMCwKK307CisKK3N0cnVjdCBweGEyeHhfdGltZXIw X3MgeworICAgIHVpbnQzMl90IHZhbHVlOworICAgIGludCBsZXZlbDsKKyAgICBpbnQgaXJxOwor ICAgIHZvaWQgKnBpYzsKKyAgICBRRU1VVGltZXIgKnF0aW1lcjsKKyAgICBpbnQgbnVtOworICAg IHZvaWQgKmluZm87Cit9OworCitzdHJ1Y3QgcHhhMnh4X3RpbWVyNF9zIHsKKyAgICB1aW50MzJf dCB2YWx1ZTsKKyAgICBpbnQgbGV2ZWw7CisgICAgaW50IGlycTsKKyAgICB2b2lkICpwaWM7Cisg ICAgUUVNVVRpbWVyICpxdGltZXI7CisgICAgaW50IG51bTsKKyAgICB2b2lkICppbmZvOworICAg IGludDMyX3Qgb2xkY2xvY2s7CisgICAgaW50MzJfdCBjbG9jazsKKyAgICB1aW50NjRfdCBsYXN0 bG9hZDsKKyAgICB1aW50MzJfdCBmcmVxOworICAgIHVpbnQzMl90IGNvbnRyb2w7Cit9OworCit0 eXBlZGVmIHN0cnVjdCB7CisgICAgdWludDMyX3QgYmFzZTsKKyAgICBpbnQzMl90IGNsb2NrOwor ICAgIGludDMyX3Qgb2xkY2xvY2s7CisgICAgdWludDY0X3QgbGFzdGxvYWQ7CisgICAgdWludDMy X3QgZnJlcTsKKyAgICBzdHJ1Y3QgcHhhMnh4X3RpbWVyMF9zIHRpbWVyWzRdOworICAgIHN0cnVj dCBweGEyeHhfdGltZXI0X3MgKnRtNDsKKyAgICB1aW50MzJfdCBldmVudHM7CisgICAgdWludDMy X3QgaXJxX2VuYWJsZWQ7CisgICAgdWludDMyX3QgcmVzZXQzOworICAgIENQVVN0YXRlICpjcHVz dGF0ZTsKKyAgICBpbnQ2NF90IHFlbXVfdGlja3M7CisgICAgdWludDMyX3Qgc25hcHNob3Q7Cit9 IHB4YTJ4eF90aW1lcl9pbmZvOworCitzdGF0aWMgdm9pZCBweGEyeHhfdGltZXJfdXBkYXRlKHZv aWQgKm9wYXF1ZSwgdWludDY0X3Qgbm93X3FlbXUpCit7CisgICAgcHhhMnh4X3RpbWVyX2luZm8g KnMgPSAocHhhMnh4X3RpbWVyX2luZm8gKikgb3BhcXVlOworICAgIGludCBpOworICAgIHVpbnQz Ml90IG5vd192bTsKKyAgICB1aW50NjRfdCBuZXdfcWVtdTsKKworICAgIG5vd192bSA9IHMtPmNs b2NrICsKKyAgICAgICAgICAgIG11bGRpdjY0KG5vd19xZW11IC0gcy0+bGFzdGxvYWQsIHMtPmZy ZXEsIHRpY2tzX3Blcl9zZWMpOworCisgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkgKyspIHsKKyAg ICAgICAgbmV3X3FlbXUgPSBub3dfcWVtdSArIG11bGRpdjY0KCh1aW50MzJfdCkgKHMtPnRpbWVy W2ldLnZhbHVlIC0gbm93X3ZtKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpY2tzX3Blcl9z ZWMsIHMtPmZyZXEpOworICAgICAgICBxZW11X21vZF90aW1lcihzLT50aW1lcltpXS5xdGltZXIs IG5ld19xZW11KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHB4YTJ4eF90aW1lcl91cGRhdGU0 KHZvaWQgKm9wYXF1ZSwgdWludDY0X3Qgbm93X3FlbXUsIGludCBuKQoreworICAgIHB4YTJ4eF90 aW1lcl9pbmZvICpzID0gKHB4YTJ4eF90aW1lcl9pbmZvICopIG9wYXF1ZTsKKyAgICB1aW50MzJf dCBub3dfdm07CisgICAgdWludDY0X3QgbmV3X3FlbXU7CisgICAgc3RhdGljIGNvbnN0IGludCBj b3VudGVyc1s4XSA9IHsgMCwgMCwgMCwgMCwgNCwgNCwgNiwgNiB9OworICAgIGludCBjb3VudGVy OworCisgICAgaWYgKHMtPnRtNFtuXS5jb250cm9sICYgKDEgPDwgNykpCisgICAgICAgIGNvdW50 ZXIgPSBuOworICAgIGVsc2UKKyAgICAgICAgY291bnRlciA9IGNvdW50ZXJzW25dOworCisgICAg aWYgKCFzLT50bTRbY291bnRlcl0uZnJlcSkgeworICAgICAgICBxZW11X2RlbF90aW1lcihzLT50 aW1lcltuXS5xdGltZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbm93X3ZtID0g cy0+dG00W2NvdW50ZXJdLmNsb2NrICsgbXVsZGl2NjQobm93X3FlbXUgLQorICAgICAgICAgICAg ICAgICAgICBzLT50bTRbY291bnRlcl0ubGFzdGxvYWQsCisgICAgICAgICAgICAgICAgICAgIHMt PnRtNFtjb3VudGVyXS5mcmVxLCB0aWNrc19wZXJfc2VjKTsKKworICAgIG5ld19xZW11ID0gbm93 X3FlbXUgKyBtdWxkaXY2NCgodWludDMyX3QpIChzLT50bTRbbl0udmFsdWUgLSBub3dfdm0pLAor ICAgICAgICAgICAgICAgICAgICB0aWNrc19wZXJfc2VjLCBzLT50bTRbY291bnRlcl0uZnJlcSk7 CisgICAgcWVtdV9tb2RfdGltZXIocy0+dGltZXJbbl0ucXRpbWVyLCBuZXdfcWVtdSk7Cit9CisK K3N0YXRpYyB1aW50MzJfdCBweGEyeHhfdGltZXJfcmVhZCh2b2lkICpvcGFxdWUsIHRhcmdldF9w aHlzX2FkZHJfdCBvZmZzZXQpCit7CisgICAgcHhhMnh4X3RpbWVyX2luZm8gKnMgPSAocHhhMnh4 X3RpbWVyX2luZm8gKikgb3BhcXVlOworICAgIGludCB0bSA9IDA7CisKKyAgICBvZmZzZXQgLT0g cy0+YmFzZTsKKworICAgIHN3aXRjaCAob2Zmc2V0KSB7CisgICAgY2FzZSBPU01SMzogIHRtICsr OworICAgIGNhc2UgT1NNUjI6ICB0bSArKzsKKyAgICBjYXNlIE9TTVIxOiAgdG0gKys7CisgICAg Y2FzZSBPU01SMDoKKyAgICAgICAgcmV0dXJuIHMtPnRpbWVyW3RtXS52YWx1ZTsKKyAgICBjYXNl IE9TTVIxMTogdG0gKys7CisgICAgY2FzZSBPU01SMTA6IHRtICsrOworICAgIGNhc2UgT1NNUjk6 ICB0bSArKzsKKyAgICBjYXNlIE9TTVI4OiAgdG0gKys7CisgICAgY2FzZSBPU01SNzogIHRtICsr OworICAgIGNhc2UgT1NNUjY6ICB0bSArKzsKKyAgICBjYXNlIE9TTVI1OiAgdG0gKys7CisgICAg Y2FzZSBPU01SNDoKKyAgICAgICAgaWYgKCFzLT50bTQpCisgICAgICAgICAgICBnb3RvIGJhZHJl ZzsKKyAgICAgICAgcmV0dXJuIHMtPnRtNFt0bV0udmFsdWU7CisgICAgY2FzZSBPU0NSOgorICAg ICAgICByZXR1cm4gcy0+Y2xvY2sgKyBtdWxkaXY2NChxZW11X2dldF9jbG9jayh2bV9jbG9jaykg LQorICAgICAgICAgICAgICAgICAgICAgICAgcy0+bGFzdGxvYWQsIHMtPmZyZXEsIHRpY2tzX3Bl cl9zZWMpOworICAgIGNhc2UgT1NDUjExOiB0bSArKzsKKyAgICBjYXNlIE9TQ1IxMDogdG0gKys7 CisgICAgY2FzZSBPU0NSOTogIHRtICsrOworICAgIGNhc2UgT1NDUjg6ICB0bSArKzsKKyAgICBj YXNlIE9TQ1I3OiAgdG0gKys7CisgICAgY2FzZSBPU0NSNjogIHRtICsrOworICAgIGNhc2UgT1ND UjU6ICB0bSArKzsKKyAgICBjYXNlIE9TQ1I0OgorICAgICAgICBpZiAoIXMtPnRtNCkKKyAgICAg ICAgICAgIGdvdG8gYmFkcmVnOworCisgICAgICAgIGlmICgodG0gPT0gOSAtIDQgfHwgdG0gPT0g MTEgLSA0KSAmJiAocy0+dG00W3RtXS5jb250cm9sICYgKDEgPDwgOSkpKSB7CisgICAgICAgICAg ICBpZiAocy0+dG00W3RtIC0gMV0uZnJlcSkKKyAgICAgICAgICAgICAgICBzLT5zbmFwc2hvdCA9 IHMtPnRtNFt0bSAtIDFdLmNsb2NrICsgbXVsZGl2NjQoCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHFlbXVfZ2V0X2Nsb2NrKHZtX2Nsb2NrKSAtCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHMtPnRtNFt0bSAtIDFdLmxhc3Rsb2FkLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzLT50bTRbdG0gLSAxXS5mcmVxLCB0aWNrc19wZXJfc2VjKTsKKyAgICAg ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzLT5zbmFwc2hvdCA9IHMtPnRtNFt0bSAtIDFd LmNsb2NrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFzLT50bTRbdG1dLmZyZXEpCisgICAg ICAgICAgICByZXR1cm4gcy0+dG00W3RtXS5jbG9jazsKKyAgICAgICAgcmV0dXJuIHMtPnRtNFt0 bV0uY2xvY2sgKyBtdWxkaXY2NChxZW11X2dldF9jbG9jayh2bV9jbG9jaykgLQorICAgICAgICAg ICAgICAgICAgICAgICAgcy0+dG00W3RtXS5sYXN0bG9hZCwgcy0+dG00W3RtXS5mcmVxLCB0aWNr c19wZXJfc2VjKTsKKyAgICBjYXNlIE9JRVI6CisgICAgICAgIHJldHVybiBzLT5pcnFfZW5hYmxl ZDsKKyAgICBjYXNlIE9TU1I6CS8qIFN0YXR1cyByZWdpc3RlciAqLworICAgICAgICByZXR1cm4g cy0+ZXZlbnRzOworICAgIGNhc2UgT1dFUjoKKyAgICAgICAgcmV0dXJuIHMtPnJlc2V0MzsKKyAg ICBjYXNlIE9NQ1IxMTogdG0gKys7CisgICAgY2FzZSBPTUNSMTA6IHRtICsrOworICAgIGNhc2Ug T01DUjk6ICB0bSArKzsKKyAgICBjYXNlIE9NQ1I4OiAgdG0gKys7CisgICAgY2FzZSBPTUNSNzog IHRtICsrOworICAgIGNhc2UgT01DUjY6ICB0bSArKzsKKyAgICBjYXNlIE9NQ1I1OiAgdG0gKys7 CisgICAgY2FzZSBPTUNSNDoKKyAgICAgICAgaWYgKCFzLT50bTQpCisgICAgICAgICAgICBnb3Rv IGJhZHJlZzsKKyAgICAgICAgcmV0dXJuIHMtPnRtNFt0bV0uY29udHJvbDsKKyAgICBjYXNlIE9T TlI6CisgICAgICAgIHJldHVybiBzLT5zbmFwc2hvdDsKKyAgICBkZWZhdWx0OgorICAgIGJhZHJl ZzoKKyAgICAgICAgY3B1X2Fib3J0KGNwdV9zaW5nbGVfZW52LCAicHhhMnh4X3RpbWVyX3JlYWQ6 IEJhZCBvZmZzZXQgIgorICAgICAgICAgICAgICAgICAgICAgICAgUkVHX0ZNVCAiXG4iLCBvZmZz ZXQpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBweGEyeHhfdGlt ZXJfd3JpdGUodm9pZCAqb3BhcXVlLCB0YXJnZXRfcGh5c19hZGRyX3Qgb2Zmc2V0LAorICAgICAg ICAgICAgICAgIHVpbnQzMl90IHZhbHVlKQoreworICAgIGludCBpLCB0bSA9IDA7CisgICAgcHhh Mnh4X3RpbWVyX2luZm8gKnMgPSAocHhhMnh4X3RpbWVyX2luZm8gKikgb3BhcXVlOworCisgICAg b2Zmc2V0IC09IHMtPmJhc2U7CisKKyAgICBzd2l0Y2ggKG9mZnNldCkgeworICAgIGNhc2UgT1NN UjM6ICB0bSArKzsKKyAgICBjYXNlIE9TTVIyOiAgdG0gKys7CisgICAgY2FzZSBPU01SMTogIHRt ICsrOworICAgIGNhc2UgT1NNUjA6CisgICAgICAgIHMtPnRpbWVyW3RtXS52YWx1ZSA9IHZhbHVl OworICAgICAgICBweGEyeHhfdGltZXJfdXBkYXRlKHMsIHFlbXVfZ2V0X2Nsb2NrKHZtX2Nsb2Nr KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgT1NNUjExOiB0bSArKzsKKyAgICBjYXNlIE9T TVIxMDogdG0gKys7CisgICAgY2FzZSBPU01SOTogIHRtICsrOworICAgIGNhc2UgT1NNUjg6ICB0 bSArKzsKKyAgICBjYXNlIE9TTVI3OiAgdG0gKys7CisgICAgY2FzZSBPU01SNjogIHRtICsrOwor ICAgIGNhc2UgT1NNUjU6ICB0bSArKzsKKyAgICBjYXNlIE9TTVI0OgorICAgICAgICBpZiAoIXMt PnRtNCkKKyAgICAgICAgICAgIGdvdG8gYmFkcmVnOworICAgICAgICBzLT50bTRbdG1dLnZhbHVl ID0gdmFsdWU7CisgICAgICAgIHB4YTJ4eF90aW1lcl91cGRhdGU0KHMsIHFlbXVfZ2V0X2Nsb2Nr KHZtX2Nsb2NrKSwgdG0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE9TQ1I6CisgICAgICAg IHMtPm9sZGNsb2NrID0gcy0+Y2xvY2s7CisgICAgICAgIHMtPmxhc3Rsb2FkID0gcWVtdV9nZXRf Y2xvY2sodm1fY2xvY2spOworICAgICAgICBzLT5jbG9jayA9IHZhbHVlOworICAgICAgICBweGEy eHhfdGltZXJfdXBkYXRlKHMsIHMtPmxhc3Rsb2FkKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz ZSBPU0NSMTE6IHRtICsrOworICAgIGNhc2UgT1NDUjEwOiB0bSArKzsKKyAgICBjYXNlIE9TQ1I5 OiAgdG0gKys7CisgICAgY2FzZSBPU0NSODogIHRtICsrOworICAgIGNhc2UgT1NDUjc6ICB0bSAr KzsKKyAgICBjYXNlIE9TQ1I2OiAgdG0gKys7CisgICAgY2FzZSBPU0NSNTogIHRtICsrOworICAg IGNhc2UgT1NDUjQ6CisgICAgICAgIGlmICghcy0+dG00KQorICAgICAgICAgICAgZ290byBiYWRy ZWc7CisgICAgICAgIHMtPnRtNFt0bV0ub2xkY2xvY2sgPSBzLT50bTRbdG1dLmNsb2NrOworICAg ICAgICBzLT50bTRbdG1dLmxhc3Rsb2FkID0gcWVtdV9nZXRfY2xvY2sodm1fY2xvY2spOworICAg ICAgICBzLT50bTRbdG1dLmNsb2NrID0gdmFsdWU7CisgICAgICAgIHB4YTJ4eF90aW1lcl91cGRh dGU0KHMsIHMtPnRtNFt0bV0ubGFzdGxvYWQsIHRtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz ZSBPSUVSOgorICAgICAgICBzLT5pcnFfZW5hYmxlZCA9IHZhbHVlICYgMHhmZmY7CisgICAgICAg IGJyZWFrOworICAgIGNhc2UgT1NTUjoJLyogU3RhdHVzIHJlZ2lzdGVyICovCisgICAgICAgIHMt PmV2ZW50cyAmPSB+dmFsdWU7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpICsrLCB2YWx1 ZSA+Pj0gMSkgeworICAgICAgICAgICAgaWYgKHMtPnRpbWVyW2ldLmxldmVsICYmICh2YWx1ZSAm IDEpKSB7CisgICAgICAgICAgICAgICAgcy0+dGltZXJbaV0ubGV2ZWwgPSAwOworICAgICAgICAg ICAgICAgIHBpY19zZXRfaXJxX25ldyhzLT50aW1lcltpXS5waWMsIHMtPnRpbWVyW2ldLmlycSwg MCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHMtPnRtNCkgeworICAg ICAgICAgICAgZm9yIChpID0gMDsgaSA8IDg7IGkgKyssIHZhbHVlID4+PSAxKQorICAgICAgICAg ICAgICAgIGlmIChzLT50bTRbaV0ubGV2ZWwgJiYgKHZhbHVlICYgMSkpCisgICAgICAgICAgICAg ICAgICAgIHMtPnRtNFtpXS5sZXZlbCA9IDA7CisgICAgICAgICAgICBpZiAoIShzLT5ldmVudHMg JiAweGZmMCkpCisgICAgICAgICAgICAgICAgcGljX3NldF9pcnFfbmV3KHMtPnRtNC0+cGljLCBz LT50bTQtPmlycSwgMCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBPV0VS OgkvKiBYWFg6IFJlc2V0IG9uIE9TTVIzIG1hdGNoPyAqLworICAgICAgICBzLT5yZXNldDMgPSB2 YWx1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBPTUNSNzogIHRtICsrOworICAgIGNhc2Ug T01DUjY6ICB0bSArKzsKKyAgICBjYXNlIE9NQ1I1OiAgdG0gKys7CisgICAgY2FzZSBPTUNSNDoK KyAgICAgICAgaWYgKCFzLT50bTQpCisgICAgICAgICAgICBnb3RvIGJhZHJlZzsKKyAgICAgICAg cy0+dG00W3RtXS5jb250cm9sID0gdmFsdWUgJiAweDBmZjsKKyAgICAgICAgLyogWFhYIFN0b3Ag aWYgcnVubmluZyAoc2hvdWxkbid0IGhhcHBlbikgKi8KKyAgICAgICAgaWYgKCh2YWx1ZSAmICgx IDw8IDcpKSB8fCB0bSA9PSAwKQorICAgICAgICAgICAgcy0+dG00W3RtXS5mcmVxID0gcHhhMnh4 X3RpbWVyNF9mcmVxW3ZhbHVlICYgN107CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcy0+ dG00W3RtXS5mcmVxID0gMDsKKyAgICAgICAgICAgIHB4YTJ4eF90aW1lcl91cGRhdGU0KHMsIHFl bXVfZ2V0X2Nsb2NrKHZtX2Nsb2NrKSwgdG0pOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor ICAgIGNhc2UgT01DUjExOiB0bSArKzsKKyAgICBjYXNlIE9NQ1IxMDogdG0gKys7CisgICAgY2Fz ZSBPTUNSOTogIHRtICsrOworICAgIGNhc2UgT01DUjg6ICB0bSArPSA0OworICAgICAgICBpZiAo IXMtPnRtNCkKKyAgICAgICAgICAgIGdvdG8gYmFkcmVnOworICAgICAgICBzLT50bTRbdG1dLmNv bnRyb2wgPSB2YWx1ZSAmIDB4M2ZmOworICAgICAgICAvKiBYWFggU3RvcCBpZiBydW5uaW5nIChz aG91bGRuJ3QgaGFwcGVuKSAqLworICAgICAgICBpZiAoKHZhbHVlICYgKDEgPDwgNykpIHx8ICEo dG0gJiAxKSkKKyAgICAgICAgICAgIHMtPnRtNFt0bV0uZnJlcSA9CisgICAgICAgICAgICAgICAg ICAgIHB4YTJ4eF90aW1lcjRfZnJlcVsodmFsdWUgJiAoMSA8PCA4KSkgPyAgMCA6ICh2YWx1ZSAm IDcpXTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzLT50bTRbdG1dLmZyZXEgPSAwOwor ICAgICAgICAgICAgcHhhMnh4X3RpbWVyX3VwZGF0ZTQocywgcWVtdV9nZXRfY2xvY2sodm1fY2xv Y2spLCB0bSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICBi YWRyZWc6CisgICAgICAgIGNwdV9hYm9ydChjcHVfc2luZ2xlX2VudiwgInB4YTJ4eF90aW1lcl93 cml0ZTogQmFkIG9mZnNldCAiCisgICAgICAgICAgICAgICAgICAgICAgICBSRUdfRk1UICJcbiIs IG9mZnNldCk7CisgICAgfQorfQorCitzdGF0aWMgQ1BVUmVhZE1lbW9yeUZ1bmMgKnB4YTJ4eF90 aW1lcl9yZWFkZm5bXSA9IHsKKyAgICBweGEyeHhfdGltZXJfcmVhZCwKKyAgICBweGEyeHhfdGlt ZXJfcmVhZCwKKyAgICBweGEyeHhfdGltZXJfcmVhZCwKK307CisKK3N0YXRpYyBDUFVXcml0ZU1l bW9yeUZ1bmMgKnB4YTJ4eF90aW1lcl93cml0ZWZuW10gPSB7CisgICAgcHhhMnh4X3RpbWVyX3dy aXRlLAorICAgIHB4YTJ4eF90aW1lcl93cml0ZSwKKyAgICBweGEyeHhfdGltZXJfd3JpdGUsCit9 OworCitzdGF0aWMgdm9pZCBweGEyeHhfdGltZXJfdGljayh2b2lkICpvcGFxdWUpCit7CisgICAg c3RydWN0IHB4YTJ4eF90aW1lcjBfcyAqdCA9IChzdHJ1Y3QgcHhhMnh4X3RpbWVyMF9zICopIG9w YXF1ZTsKKyAgICBweGEyeHhfdGltZXJfaW5mbyAqaSA9IChweGEyeHhfdGltZXJfaW5mbyAqKSB0 LT5pbmZvOworCisgICAgaWYgKGktPmlycV9lbmFibGVkICYgKDEgPDwgdC0+bnVtKSkgeworICAg ICAgICB0LT5sZXZlbCA9IDE7CisgICAgICAgIGktPmV2ZW50cyB8PSAxIDw8IHQtPm51bTsKKyAg ICAgICAgcGljX3NldF9pcnFfbmV3KHQtPnBpYywgdC0+aXJxLCAxKTsKKyAgICB9CisKKyAgICBp ZiAodC0+bnVtID09IDMpCisgICAgICAgIGlmIChpLT5yZXNldDMgJiAxKSB7CisgICAgICAgICAg ICBpLT5yZXNldDMgPSAwOworICAgICAgICAgICAgY3B1X3Jlc2V0KGktPmNwdXN0YXRlKTsKKyAg ICAgICAgfQorfQorCitzdGF0aWMgdm9pZCBweGEyeHhfdGltZXJfdGljazQodm9pZCAqb3BhcXVl KQoreworICAgIHN0cnVjdCBweGEyeHhfdGltZXI0X3MgKnQgPSAoc3RydWN0IHB4YTJ4eF90aW1l cjRfcyAqKSBvcGFxdWU7CisgICAgcHhhMnh4X3RpbWVyX2luZm8gKmkgPSAocHhhMnh4X3RpbWVy X2luZm8gKikgdC0+aW5mbzsKKworICAgIHB4YTJ4eF90aW1lcl90aWNrNChvcGFxdWUpOworICAg IGlmICh0LT5jb250cm9sICYgKDEgPDwgMykpCisgICAgICAgIHQtPmNsb2NrID0gMDsKKyAgICBp ZiAodC0+Y29udHJvbCAmICgxIDw8IDYpKQorICAgICAgICBweGEyeHhfdGltZXJfdXBkYXRlNChp LCBxZW11X2dldF9jbG9jayh2bV9jbG9jayksIHQtPm51bSAtIDQpOworfQorCitzdGF0aWMgcHhh Mnh4X3RpbWVyX2luZm8gKnB4YTJ4eF90aW1lcl9pbml0KHRhcmdldF9waHlzX2FkZHJfdCBiYXNl LAorICAgICAgICAgICAgICAgIHZvaWQgKnBpYywgaW50IGlycSwgQ1BVU3RhdGUgKmNwdXN0YXRl KQoreworICAgIGludCBpOworICAgIGludCBpb21lbXR5cGU7CisgICAgcHhhMnh4X3RpbWVyX2lu Zm8gKnM7CisKKyAgICBzID0gKHB4YTJ4eF90aW1lcl9pbmZvICopIHFlbXVfbWFsbG9jeihzaXpl b2YocHhhMnh4X3RpbWVyX2luZm8pKTsKKyAgICBzLT5iYXNlID0gYmFzZTsKKyAgICBzLT5pcnFf ZW5hYmxlZCA9IDA7CisgICAgcy0+b2xkY2xvY2sgPSAwOworICAgIHMtPmNsb2NrID0gMDsKKyAg ICBzLT5sYXN0bG9hZCA9IHFlbXVfZ2V0X2Nsb2NrKHZtX2Nsb2NrKTsKKyAgICBzLT5yZXNldDMg PSAwOworICAgIHMtPmNwdXN0YXRlID0gY3B1c3RhdGU7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwg NDsgaSArKykgeworICAgICAgICBzLT50aW1lcltpXS52YWx1ZSA9IDA7CisgICAgICAgIHMtPnRp bWVyW2ldLmlycSA9IGlycSArIGk7CisgICAgICAgIHMtPnRpbWVyW2ldLnBpYyA9IHBpYzsKKyAg ICAgICAgcy0+dGltZXJbaV0uaW5mbyA9IHM7CisgICAgICAgIHMtPnRpbWVyW2ldLm51bSA9IGk7 CisgICAgICAgIHMtPnRpbWVyW2ldLmxldmVsID0gMDsKKyAgICAgICAgcy0+dGltZXJbaV0ucXRp bWVyID0gcWVtdV9uZXdfdGltZXIodm1fY2xvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICBw eGEyeHhfdGltZXJfdGljaywgJnMtPnRpbWVyW2ldKTsKKyAgICB9CisKKyAgICBpb21lbXR5cGUg PSBjcHVfcmVnaXN0ZXJfaW9fbWVtb3J5KDAsIHB4YTJ4eF90aW1lcl9yZWFkZm4sCisgICAgICAg ICAgICAgICAgICAgIHB4YTJ4eF90aW1lcl93cml0ZWZuLCBzKTsKKyAgICBjcHVfcmVnaXN0ZXJf cGh5c2ljYWxfbWVtb3J5KGJhc2UsIDB4MDAwMDBmZmYsIGlvbWVtdHlwZSk7CisgICAgcmV0dXJu IHM7Cit9CisKK3ZvaWQgcHhhMjV4X3RpbWVyX2luaXQodGFyZ2V0X3BoeXNfYWRkcl90IGJhc2Us CisgICAgICAgICAgICAgICAgdm9pZCAqcGljLCBpbnQgaXJxLCBDUFVTdGF0ZSAqY3B1c3RhdGUp Cit7CisgICAgcHhhMnh4X3RpbWVyX2luZm8gKnMgPSBweGEyeHhfdGltZXJfaW5pdChiYXNlLCBw aWMsIGlycSwgY3B1c3RhdGUpOworICAgIHMtPmZyZXEgPSBQWEEyNVhfRlJFUTsKKyAgICBzLT50 bTQgPSAwOworfQorCit2b2lkIHB4YTI3eF90aW1lcl9pbml0KHRhcmdldF9waHlzX2FkZHJfdCBi YXNlLAorICAgICAgICAgICAgICAgIHZvaWQgKnBpYywgaW50IGlycSwgaW50IGlycTQsIENQVVN0 YXRlICpjcHVzdGF0ZSkKK3sKKyAgICBweGEyeHhfdGltZXJfaW5mbyAqcyA9IHB4YTJ4eF90aW1l cl9pbml0KGJhc2UsIHBpYywgaXJxLCBjcHVzdGF0ZSk7CisgICAgaW50IGk7CisgICAgcy0+ZnJl cSA9IFBYQTI3WF9GUkVROworICAgIHMtPnRtNCA9IChzdHJ1Y3QgcHhhMnh4X3RpbWVyNF9zICop IHFlbXVfbWFsbG9jeig4ICoKKyAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBweGEy eHhfdGltZXI0X3MpKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSArKykgeworICAgICAgICBz LT50bTRbaV0udmFsdWUgPSAwOworICAgICAgICBzLT50bTRbaV0uaXJxID0gaXJxNDsKKyAgICAg ICAgcy0+dG00W2ldLnBpYyA9IHBpYzsKKyAgICAgICAgcy0+dG00W2ldLmluZm8gPSBzOworICAg ICAgICBzLT50bTRbaV0ubnVtID0gaSArIDQ7CisgICAgICAgIHMtPnRtNFtpXS5sZXZlbCA9IDA7 CisgICAgICAgIHMtPnRtNFtpXS5mcmVxID0gMDsKKyAgICAgICAgcy0+dG00W2ldLmNvbnRyb2wg PSAweDA7CisgICAgICAgIHMtPnRtNFtpXS5xdGltZXIgPSBxZW11X25ld190aW1lcih2bV9jbG9j aywKKyAgICAgICAgICAgICAgICAgICAgICAgIHB4YTJ4eF90aW1lcl90aWNrNCwgJnMtPnRtNFtp XSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdmwuYyBiL3ZsLmMKaW5kZXggYTIyZWY5NS4uMjgx ZTU0MSAxMDA2NDQKLS0tIGEvdmwuYworKysgYi92bC5jCkBAIC0xODYsNiArMTg2LDcgQEAgaW50 IGZkX2Jvb3RjaGsgPSAxOwogaW50IG5vX3JlYm9vdCA9IDA7CiBpbnQgc25hcHNob3QgPSAwOwog Y29uc3QgY2hhciAqc2RfZmlsZW5hbWUgPSAwOworaW50IGdyYXBoaWNfcm90YXRlID0gMDsKIGlu dCBkYWVtb25pemUgPSAwOwogY29uc3QgY2hhciAqb3B0aW9uX3JvbVtNQVhfT1BUSU9OX1JPTVNd OwogaW50IG5iX29wdGlvbl9yb21zOwpAQCAtNTIxLDYgKzUyMiw3IEBAIHZvaWQga2JkX21vdXNl X2V2ZW50KGludCBkeCwgaW50IGR5LCBpbnQgZHosIGludCBidXR0b25zX3N0YXRlKQogewogICAg IFFFTVVQdXRNb3VzZUV2ZW50ICptb3VzZV9ldmVudDsKICAgICB2b2lkICptb3VzZV9ldmVudF9v cGFxdWU7CisgICAgaW50IHdpZHRoOwogCiAgICAgaWYgKCFxZW11X3B1dF9tb3VzZV9ldmVudF9j dXJyZW50KSB7CiAgICAgICAgIHJldHVybjsKQEAgLTUzMiw3ICs1MzQsMTYgQEAgdm9pZCBrYmRf bW91c2VfZXZlbnQoaW50IGR4LCBpbnQgZHksIGludCBkeiwgaW50IGJ1dHRvbnNfc3RhdGUpCiAg ICAgICAgIHFlbXVfcHV0X21vdXNlX2V2ZW50X2N1cnJlbnQtPnFlbXVfcHV0X21vdXNlX2V2ZW50 X29wYXF1ZTsKIAogICAgIGlmIChtb3VzZV9ldmVudCkgewotICAgICAgICBtb3VzZV9ldmVudCht b3VzZV9ldmVudF9vcGFxdWUsIGR4LCBkeSwgZHosIGJ1dHRvbnNfc3RhdGUpOworICAgICAgICBp ZiAoZ3JhcGhpY19yb3RhdGUpIHsKKyAgICAgICAgICAgIGlmIChxZW11X3B1dF9tb3VzZV9ldmVu dF9jdXJyZW50LT5xZW11X3B1dF9tb3VzZV9ldmVudF9hYnNvbHV0ZSkKKyAgICAgICAgICAgICAg ICB3aWR0aCA9IDB4N2ZmZjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB3aWR0 aCA9IGdyYXBoaWNfd2lkdGg7CisgICAgICAgICAgICBtb3VzZV9ldmVudChtb3VzZV9ldmVudF9v cGFxdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCAtIGR5LCBkeCwg ZHosIGJ1dHRvbnNfc3RhdGUpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1vdXNlX2V2 ZW50KG1vdXNlX2V2ZW50X29wYXF1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGR4LCBkeSwgZHosIGJ1dHRvbnNfc3RhdGUpOwogICAgIH0KIH0KIApAQCAtNjQyMCw2ICs2NDMx LDcgQEAgdm9pZCBoZWxwKHZvaWQpCiAgICAgICAgICAgICItbSBtZWdzICAgICAgICAgc2V0IHZp cnR1YWwgUkFNIHNpemUgdG8gbWVncyBNQiBbZGVmYXVsdD0lZF1cbiIKICAgICAgICAgICAgIi1z bXAgbiAgICAgICAgICBzZXQgdGhlIG51bWJlciBvZiBDUFVzIHRvICduJyBbZGVmYXVsdD0xXVxu IgogICAgICAgICAgICAiLW5vZ3JhcGhpYyAgICAgIGRpc2FibGUgZ3JhcGhpY2FsIG91dHB1dCBh bmQgcmVkaXJlY3Qgc2VyaWFsIEkvT3MgdG8gY29uc29sZVxuIgorICAgICAgICAgICAiLXBvcnRy YWl0ICAgICAgIHJvdGF0ZSBncmFwaGljYWwgb3V0cHV0IDkwIGRlZyBsZWZ0IChvbmx5IFBYQSBM Q0QpXG4iCiAjaWZuZGVmIF9XSU4zMgogICAgICAgICAgICAiLWsgbGFuZ3VhZ2UgICAgIHVzZSBr ZXlib2FyZCBsYXlvdXQgKGZvciBleGFtcGxlIFwiZnJcIiBmb3IgRnJlbmNoKVxuIgogI2VuZGlm CkBAIC02NTUyLDYgKzY1NjQsNyBAQCBlbnVtIHsKICNlbmRpZgogICAgIFFFTVVfT1BUSU9OX20s CiAgICAgUUVNVV9PUFRJT05fbm9ncmFwaGljLAorICAgIFFFTVVfT1BUSU9OX3BvcnRyYWl0LAog I2lmZGVmIEhBU19BVURJTwogICAgIFFFTVVfT1BUSU9OX2F1ZGlvX2hlbHAsCiAgICAgUUVNVV9P UFRJT05fc291bmRodywKQEAgLTY2MjksNiArNjY0Miw3IEBAIGNvbnN0IFFFTVVPcHRpb24gcWVt dV9vcHRpb25zW10gPSB7CiAjZW5kaWYKICAgICB7ICJtIiwgSEFTX0FSRywgUUVNVV9PUFRJT05f bSB9LAogICAgIHsgIm5vZ3JhcGhpYyIsIDAsIFFFTVVfT1BUSU9OX25vZ3JhcGhpYyB9LAorICAg IHsgInBvcnRyYWl0IiwgMCwgUUVNVV9PUFRJT05fcG9ydHJhaXQgfSwKICAgICB7ICJrIiwgSEFT X0FSRywgUUVNVV9PUFRJT05fayB9LAogI2lmZGVmIEhBU19BVURJTwogICAgIHsgImF1ZGlvLWhl bHAiLCAwLCBRRU1VX09QVElPTl9hdWRpb19oZWxwIH0sCkBAIC03MTMzLDYgKzcxNDcsOSBAQCBp bnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAgICAgICAgICAgICAgcHN0cmNweSht b25pdG9yX2RldmljZSwgc2l6ZW9mKG1vbml0b3JfZGV2aWNlKSwgInN0ZGlvIik7CiAgICAgICAg ICAgICAgICAgbm9ncmFwaGljID0gMTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgIGNhc2UgUUVNVV9PUFRJT05fcG9ydHJhaXQ6CisgICAgICAgICAgICAgICAgZ3JhcGhpY19y b3RhdGUgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBRRU1V X09QVElPTl9rZXJuZWw6CiAgICAgICAgICAgICAgICAga2VybmVsX2ZpbGVuYW1lID0gb3B0YXJn OwogICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvdmwuaCBiL3ZsLmgKaW5kZXgg NDUzZTc4ZC4uYzRkNjZkOCAxMDA2NDQKLS0tIGEvdmwuaAorKysgYi92bC5oCkBAIC0xNTgsNiAr MTU4LDcgQEAgZXh0ZXJuIGludCB1c2JfZW5hYmxlZDsKIGV4dGVybiBpbnQgc21wX2NwdXM7CiBl eHRlcm4gaW50IHNuYXBzaG90OwogZXh0ZXJuIGNvbnN0IGNoYXIgKnNkX2ZpbGVuYW1lOworZXh0 ZXJuIGludCBncmFwaGljX3JvdGF0ZTsKIGV4dGVybiBpbnQgbm9fcXVpdDsKIGV4dGVybiBpbnQg c2VtaWhvc3RpbmdfZW5hYmxlZDsKIGV4dGVybiBpbnQgYXV0b3N0YXJ0OwotLSAKMS40LjQuMwoK ------=_Part_99450_23385742.1174079991241--