From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26821 invoked by alias); 16 Nov 2008 08:25:03 -0000 Received: (qmail 25753 invoked by uid 22791); 16 Nov 2008 08:24:54 -0000 X-Spam-Check-By: sourceware.org Received: from ti-out-0910.google.com (HELO ti-out-0910.google.com) (209.85.142.189) by sourceware.org (qpsmtpd/0.31) with ESMTP; Sun, 16 Nov 2008 08:24:19 +0000 Received: by ti-out-0910.google.com with SMTP id d10so1448285tib.12 for ; Sun, 16 Nov 2008 00:24:18 -0800 (PST) Received: by 10.110.49.2 with SMTP id w2mr3500809tiw.3.1226823857832; Sun, 16 Nov 2008 00:24:17 -0800 (PST) Received: by 10.110.103.3 with HTTP; Sun, 16 Nov 2008 00:24:17 -0800 (PST) Message-ID: Date: Mon, 17 Nov 2008 07:04:00 -0000 From: teawater To: "gdb-patches@sourceware.org" Subject: [RFA] Resubmit process record and replay, 8/10 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_40510_29180503.1226823857810" X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2008-11/txt/msg00416.txt.bz2 ------=_Part_40510_29180503.1226823857810 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-length: 17244 This patch add code to make I386 architecture support process record and re= play. 2008-11-16 Hui Zhu I386 architecture process record and replay support. * i386-tdep.c (PREFIX_REPZ, PREFIX_REPNZ, PREFIX_LOCK, PREFIX_DATA, PREFIX_ADDR): New macros. Help decode the I386 instruction. (aflag, dflag, override, modrm, mod, reg, rm, ot, i386_record_pc): New variables. Ditto. (i386_record_modrm, i386_record_lea_modrm_addr, i386_record_lea_modrm): New functions. Ditto. (i386_process_record): New function. Parse the instruction in address "addr" and record the values of registers and memory that will be change in this instruction. (i386_gdbarch_init): Set "i386_process_record" to GDBARCH "process_record" interface. * i386-tdep.h (gdbarch_tdep): New function pointers "i386_intx80_record" and "i386_sysenter_record" that point to the function can record "intx80" and "sysenter" execute log. i386-tdep.c | 2964 +++++++++++++++++++++++++++++++++++++++++++++++++++++++= +++++ i386-tdep.h | 3 2 files changed, 2967 insertions(+) Following is the diff with the previous patch: @@ -10,7 +10,7 @@ /* Register names. */ static char *i386_register_names[] =3D -@@ -2638,6 +2641,2707 @@ i386_skip_permanent_breakpoint (struct r +@@ -2638,6 +2641,2965 @@ i386_skip_permanent_breakpoint (struct r } @@ -56,8 +56,12 @@ +{ + if (target_read_memory (i386_record_pc, &modrm, 1)) + { -+ printf_unfiltered (_("Process record: read memeory 0x%s error.\n"), -+ paddr_nz (i386_record_pc)); ++ if (record_debug) ++ { ++ printf_unfiltered (_ ++ ("Process record: error reading memory at addr 0x%s len =3D 1.\n"= ), ++ paddr_nz (i386_record_pc)); ++ } + return (-1); + } + i386_record_pc++; @@ -92,8 +96,12 @@ + havesib =3D 1; + if (target_read_memory (i386_record_pc, &tmpu8, 1)) + { -+ printf_unfiltered (_("Process record: read memeory 0x%s error.\n"), -+ paddr_nz (i386_record_pc)); ++ if (record_debug) ++ { ++ printf_unfiltered (_ ++ ("Process record: error reading memory at addr 0x%s len =3D 1.\n= "), ++ paddr_nz (i386_record_pc)); ++ } + return (-1); + } + i386_record_pc++; @@ -110,8 +118,12 @@ + base =3D 0xff; + if (target_read_memory (i386_record_pc, (gdb_byte *) addr, 4)) + { -+ printf_unfiltered (_("Process record: read memeory 0x%s error.\n"), -+ paddr_nz (i386_record_pc)); ++ if (record_debug) ++ { ++ printf_unfiltered (_ ++ ("Process record: error reading memory at addr 0x%s len =3D 4.\n"), ++ paddr_nz (i386_record_pc)); ++ } + return (-1); + } + i386_record_pc +=3D 4; @@ -124,8 +136,12 @@ + case 1: + if (target_read_memory (i386_record_pc, &tmpu8, 1)) + { -+ printf_unfiltered (_("Process record: read memeory 0x%s error.\n"), -+ paddr_nz (i386_record_pc)); ++ if (record_debug) ++ { ++ printf_unfiltered (_ ++ ("Process record: error reading memory at addr 0x%s len =3D 1.\n= "), ++ paddr_nz (i386_record_pc)); ++ } + return (-1); + } + i386_record_pc++; @@ -134,8 +150,12 @@ + case 2: + if (target_read_memory (i386_record_pc, (gdb_byte *) addr, 4)) + { -+ printf_unfiltered (_("Process record: read memeory 0x%s error.\n"), -+ paddr_nz (i386_record_pc)); ++ if (record_debug) ++ { ++ printf_unfiltered (_ ++ ("Process record: error reading memory at addr 0x%s len =3D 4.\n= "), ++ paddr_nz (i386_record_pc)); ++ } + return (-1); + } + i386_record_pc +=3D 4; @@ -166,8 +186,12 @@ + if (target_read_memory + (i386_record_pc, (gdb_byte *) & tmpu16, 2)) + { -+ printf_unfiltered (_("Process record: read memeory 0x%s error.\n"), -+ paddr_nz (i386_record_pc)); ++ if (record_debug) ++ { ++ printf_unfiltered (_ ++ ("Process record: error reading memory at addr 0x%s len =3D 2.\n"), ++ paddr_nz (i386_record_pc)); ++ } + return (-1); + } + i386_record_pc +=3D 2; @@ -183,8 +207,12 @@ + case 1: + if (target_read_memory (i386_record_pc, &tmpu8, 1)) + { -+ printf_unfiltered (_("Process record: read memeory 0x%s error.\n"), -+ paddr_nz (i386_record_pc)); ++ if (record_debug) ++ { ++ printf_unfiltered (_ ++ ("Process record: error reading memory at addr 0x%s len =3D 1.\n= "), ++ paddr_nz (i386_record_pc)); ++ } + return (-1); + } + i386_record_pc++; @@ -193,8 +221,12 @@ + case 2: + if (target_read_memory (i386_record_pc, (gdb_byte *) & tmpu16, 2)) + { -+ printf_unfiltered (_("Process record: read memeory 0x%s error.\n"), -+ paddr_nz (i386_record_pc)); ++ if (record_debug) ++ { ++ printf_unfiltered (_ ++ ("Process record: error reading memory at addr 0x%s len =3D 2.\n= "), ++ paddr_nz (i386_record_pc)); ++ } + return (-1); + } + i386_record_pc +=3D 2; @@ -276,7 +308,7 @@ + { + if (record_debug) + printf_unfiltered (_ -+ ("Process record ignores the memory change of instruction in address 0x%s because it can't get the value of the segment register.\n"), ++ ("Process record ignores the memory change of instruction at address 0x%s because it can't get the value of the segment register.\n"), + paddr_nz (i386_record_pc)); + return (0); + } @@ -322,8 +354,12 @@ + { + if (target_read_memory (i386_record_pc, &tmpu8, 1)) + { -+ printf_unfiltered (_("Process record: read memeory 0x%s error.\n"), -+ paddr_nz (i386_record_pc)); ++ if (record_debug) ++ { ++ printf_unfiltered (_ ++ ("Process record: error reading memory at addr 0x%s len =3D 1.\n"), ++ paddr_nz (i386_record_pc)); ++ } + return (-1); + } + i386_record_pc++; @@ -385,8 +421,12 @@ + case 0x0f: + if (target_read_memory (i386_record_pc, &tmpu8, 1)) + { -+ printf_unfiltered (_("Process record: read memeory 0x%s error.\n"), -+ paddr_nz (i386_record_pc)); ++ if (record_debug) ++ { ++ printf_unfiltered (_ ++ ("Process record: error reading memory at addr 0x%s len =3D 1.\n"), ++ paddr_nz (i386_record_pc)); ++ } + return (-1); + } + i386_record_pc++; @@ -395,14 +435,54 @@ + break; + + /* arith & logic */ -+ case 0x00 ... 0x05: -+ case 0x08 ... 0x0d: -+ case 0x10 ... 0x15: -+ case 0x18 ... 0x1d: -+ case 0x20 ... 0x25: -+ case 0x28 ... 0x2d: -+ case 0x30 ... 0x35: -+ case 0x38 ... 0x3d: ++ case 0x00: ++ case 0x01: ++ case 0x02: ++ case 0x03: ++ case 0x04: ++ case 0x05: ++ case 0x08: ++ case 0x09: ++ case 0x0a: ++ case 0x0b: ++ case 0x0c: ++ case 0x0d: ++ case 0x10: ++ case 0x11: ++ case 0x12: ++ case 0x13: ++ case 0x14: ++ case 0x15: ++ case 0x18: ++ case 0x19: ++ case 0x1a: ++ case 0x1b: ++ case 0x1c: ++ case 0x1d: ++ case 0x20: ++ case 0x21: ++ case 0x22: ++ case 0x23: ++ case 0x24: ++ case 0x25: ++ case 0x28: ++ case 0x29: ++ case 0x2a: ++ case 0x2b: ++ case 0x2c: ++ case 0x2d: ++ case 0x30: ++ case 0x31: ++ case 0x32: ++ case 0x33: ++ case 0x34: ++ case 0x35: ++ case 0x38: ++ case 0x39: ++ case 0x3a: ++ case 0x3b: ++ case 0x3c: ++ case 0x3d: + if (((opcode >> 3) & 7) !=3D OP_CMPL) + { + if ((opcode & 1) =3D=3D 0) @@ -472,7 +552,10 @@ + break; + + /* GRP1 */ -+ case 0x80 ... 0x83: ++ case 0x80: ++ case 0x81: ++ case 0x82: ++ case 0x83: + if (i386_record_modrm ()) + { + return (-1); @@ -511,9 +594,23 @@ + break; + + /* inv */ -+ case 0x40 ... 0x47: ++ case 0x40: ++ case 0x41: ++ case 0x42: ++ case 0x43: ++ case 0x44: ++ case 0x45: ++ case 0x46: ++ case 0x47: + /* dec */ -+ case 0x48 ... 0x4f: ++ case 0x48: ++ case 0x49: ++ case 0x4a: ++ case 0x4b: ++ case 0x4c: ++ case 0x4d: ++ case 0x4e: ++ case 0x4f: + if (record_arch_list_add_reg (opcode & 7)) + { + return (-1); @@ -913,7 +1010,14 @@ + break; + + /* push */ -+ case 0x50 ... 0x57: ++ case 0x50: ++ case 0x51: ++ case 0x52: ++ case 0x53: ++ case 0x54: ++ case 0x55: ++ case 0x56: ++ case 0x57: + case 0x68: + case 0x6a: + /* push es */ @@ -942,7 +1046,14 @@ + break; + + /* pop */ -+ case 0x58 ... 0x5f: ++ case 0x58: ++ case 0x59: ++ case 0x5a: ++ case 0x5b: ++ case 0x5c: ++ case 0x5d: ++ case 0x5e: ++ case 0x5f: + ot =3D dflag + OT_WORD; + if (record_arch_list_add_reg (I386_ESP_REGNUM)) + { @@ -1315,7 +1426,7 @@ + { + if (record_debug) + printf_unfiltered (_ -+ ("Process record ignores the memory change of instruction in address 0x%s because it can't get the value of the segment register.\n"), ++ ("Process record ignores the memory change of instruction at address 0x%s because it can't get the value of the segment register.\n"), + paddr_nz (i386_record_pc)); + } + else @@ -1333,9 +1444,12 @@ + if (target_read_memory + (i386_record_pc, (gdb_byte *) & addr, 4)) + { -+ printf_unfiltered (_ -+ ("Process record: read memeory 0x%s error.\n"), -+ paddr_nz (i386_record_pc)); ++ if (record_debug) ++ { ++ printf_unfiltered (_ ++ ("Process record: error reading memory at addr 0x%s len =3D 4.\n"= ), ++ paddr_nz (i386_record_pc)); ++ } + return (-1); + } + i386_record_pc +=3D 4; @@ -1345,9 +1459,12 @@ + if (target_read_memory + (i386_record_pc, (gdb_byte *) & tmpu16, 4)) + { -+ printf_unfiltered (_ -+ ("Process record: read memeory 0x%s error.\n"), -+ paddr_nz (i386_record_pc)); ++ if (record_debug) ++ { ++ printf_unfiltered (_ ++ ("Process record: error reading memory at addr 0x%s len =3D 4.\n"= ), ++ paddr_nz (i386_record_pc)); ++ } + return (-1); + } + i386_record_pc +=3D 2; @@ -1362,7 +1479,14 @@ + break; + + /* mov R, Ib */ -+ case 0xb0 ... 0xb7: ++ case 0xb0: ++ case 0xb1: ++ case 0xb2: ++ case 0xb3: ++ case 0xb4: ++ case 0xb5: ++ case 0xb6: ++ case 0xb7: + if (record_arch_list_add_reg ((opcode & 0x7) & 0x3)) + { + return (-1); @@ -1370,7 +1494,14 @@ + break; + + /* mov R, Iv */ -+ case 0xb8 ... 0xbf: ++ case 0xb8: ++ case 0xb9: ++ case 0xba: ++ case 0xbb: ++ case 0xbc: ++ case 0xbd: ++ case 0xbe: ++ case 0xbf: + if (record_arch_list_add_reg (opcode & 0x7)) + { + return (-1); @@ -1378,7 +1509,13 @@ + break; + + /* xchg R, EAX */ -+ case 0x91 ... 0x97: ++ case 0x91: ++ case 0x92: ++ case 0x93: ++ case 0x94: ++ case 0x95: ++ case 0x96: ++ case 0x97: + if (record_arch_list_add_reg (I386_EAX_REGNUM)) + { + return (-1); @@ -1569,7 +1706,14 @@ + + /* floats */ + /* It just record the memory change of instrcution. */ -+ case 0xd8 ... 0xdf: ++ case 0xd8: ++ case 0xd9: ++ case 0xda: ++ case 0xdb: ++ case 0xdc: ++ case 0xdd: ++ case 0xde: ++ case 0xdf: + if (i386_record_modrm ()) + { + return (-1); @@ -1586,17 +1730,54 @@ + } + switch (reg) + { -+ case 0x00 ... 0x07: -+ case 0x10 ... 0x17: -+ case 0x20 ... 0x27: -+ case 0x30 ... 0x37: ++ case 0x00: ++ case 0x01: ++ case 0x02: ++ case 0x03: ++ case 0x04: ++ case 0x05: ++ case 0x06: ++ case 0x07: ++ case 0x10: ++ case 0x11: ++ case 0x12: ++ case 0x13: ++ case 0x14: ++ case 0x15: ++ case 0x16: ++ case 0x17: ++ case 0x20: ++ case 0x21: ++ case 0x22: ++ case 0x23: ++ case 0x24: ++ case 0x25: ++ case 0x26: ++ case 0x27: ++ case 0x30: ++ case 0x31: ++ case 0x32: ++ case 0x33: ++ case 0x34: ++ case 0x35: ++ case 0x36: ++ case 0x37: + break; + case 0x08: + case 0x0a: + case 0x0b: -+ case 0x18 ... 0x1b: -+ case 0x28 ... 0x2b: -+ case 0x38 ... 0x3b: ++ case 0x18: ++ case 0x19: ++ case 0x1a: ++ case 0x1b: ++ case 0x28: ++ case 0x29: ++ case 0x2a: ++ case 0x2b: ++ case 0x38: ++ case 0x39: ++ case 0x3a: ++ case 0x3b: + switch (reg & 7) + { + case 0: @@ -1767,7 +1948,7 @@ + /* addr +=3D ((uint32_t)read_register (I386_ES_REGNUM)) << 4; */ + if (record_debug) + printf_unfiltered (_ -+ ("Process record ignores the memory change of instruction in address 0x%s because it can't get the value of the segment register.\n"), ++ ("Process record ignores the memory change of instruction at address 0x%s because it can't get the value of the segment register.\n"), + paddr_nz (i386_record_pc)); + } + @@ -1988,13 +2169,58 @@ + /* jmp Jb */ + case 0xeb: + /* jcc Jb */ -+ case 0x70 ... 0x7f: ++ case 0x70: ++ case 0x71: ++ case 0x72: ++ case 0x73: ++ case 0x74: ++ case 0x75: ++ case 0x76: ++ case 0x77: ++ case 0x78: ++ case 0x79: ++ case 0x7a: ++ case 0x7b: ++ case 0x7c: ++ case 0x7d: ++ case 0x7e: ++ case 0x7f: + /* jcc Jv */ -+ case 0x0f80 ... 0x0f8f: ++ case 0x0f80: ++ case 0x0f81: ++ case 0x0f82: ++ case 0x0f83: ++ case 0x0f84: ++ case 0x0f85: ++ case 0x0f86: ++ case 0x0f87: ++ case 0x0f88: ++ case 0x0f89: ++ case 0x0f8a: ++ case 0x0f8b: ++ case 0x0f8c: ++ case 0x0f8d: ++ case 0x0f8e: ++ case 0x0f8f: + break; + + /* setcc Gv */ -+ case 0x0f90 ... 0x0f9f: ++ case 0x0f90: ++ case 0x0f91: ++ case 0x0f92: ++ case 0x0f93: ++ case 0x0f94: ++ case 0x0f95: ++ case 0x0f96: ++ case 0x0f97: ++ case 0x0f98: ++ case 0x0f99: ++ case 0x0f9a: ++ case 0x0f9b: ++ case 0x0f9c: ++ case 0x0f9d: ++ case 0x0f9e: ++ case 0x0f9f: + ot =3D OT_BYTE; + if (i386_record_modrm ()) + { @@ -2017,7 +2243,22 @@ + break; + + /* cmov Gv, Ev */ -+ case 0x0f40 ... 0x0f4f: ++ case 0x0f40: ++ case 0x0f41: ++ case 0x0f42: ++ case 0x0f43: ++ case 0x0f44: ++ case 0x0f45: ++ case 0x0f46: ++ case 0x0f47: ++ case 0x0f48: ++ case 0x0f49: ++ case 0x0f4a: ++ case 0x0f4b: ++ case 0x0f4c: ++ case 0x0f4d: ++ case 0x0f4e: ++ case 0x0f4f: + if (i386_record_modrm ()) + { + return (-1); @@ -2189,7 +2430,7 @@ + /* XXX */ + case 0x9b: + printf_unfiltered (_ -+ ("Process record don't support instruction fwait.\n")); ++ ("Process record doesn't support instruction fwait.\n")); + i386_record_pc -=3D 1; + goto no_support; + break; @@ -2210,8 +2451,12 @@ + int ret; + if (target_read_memory (i386_record_pc, &tmpu8, 1)) + { -+ printf_unfiltered (_("Process record: read memeory 0x%s error.\n"), -+ paddr_nz (i386_record_pc)); ++ if (record_debug) ++ { ++ printf_unfiltered (_ ++ ("Process record: error reading memory at addr 0x%s len =3D 1.\n"), ++ paddr_nz (i386_record_pc)); ++ } + return (-1); + } + i386_record_pc++; @@ -2256,7 +2501,14 @@ + break; + + /* bswap reg */ -+ case 0x0fc8 ... 0x0fcf: ++ case 0x0fc8: ++ case 0x0fc9: ++ case 0x0fca: ++ case 0x0fcb: ++ case 0x0fcc: ++ case 0x0fcd: ++ case 0x0fce: ++ case 0x0fcf: + if (record_arch_list_add_reg (opcode & 7)) + { + return (-1); @@ -2440,7 +2692,7 @@ + { + if (record_debug) + printf_unfiltered (_ -+ ("Process record ignores the memory change of instruction in address 0x%s because it can't get the value of the segment register.\n"), ++ ("Process record ignores the memory change of instruction at address 0x%s because it can't get the value of the segment register.\n"), + paddr_nz (i386_record_pc)); +error("3"); + } @@ -2491,7 +2743,7 @@ + { + if (record_debug) + printf_unfiltered (_ -+ ("Process record ignores the memory change of instruction in address 0x%s because it can't get the value of the segment register.\n"), ++ ("Process record ignores the memory change of instruction at address 0x%s because it can't get the value of the segment register.\n"), + paddr_nz (i386_record_pc)); + } + else @@ -2607,7 +2859,13 @@ + break; + + /* nop (multi byte) */ -+ case 0x0f19 ... 0x0f1f: ++ case 0x0f19: ++ case 0x0f1a: ++ case 0x0f1b: ++ case 0x0f1c: ++ case 0x0f1d: ++ case 0x0f1e: ++ case 0x0f1f: + break; + + /* mov reg, crN */ @@ -2718,7 +2976,7 @@ =0C static struct gdbarch * i386_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) -@@ -2829,6 +5533,8 @@ i386_gdbarch_init (struct gdbarch_info i +@@ -2829,6 +5791,8 @@ i386_gdbarch_init (struct gdbarch_info i set_gdbarch_skip_permanent_breakpoint (gdbarch, i386_skip_permanent_breakpoint); ------=_Part_40510_29180503.1226823857810 Content-Type: text/plain; name=8-i386-tdep.txt Content-Transfer-Encoding: base64 X-Attachment-Id: f_fnlf8hvf0 Content-Disposition: attachment; filename=8-i386-tdep.txt Content-length: 72932 LS0tIGEvaTM4Ni10ZGVwLmMKKysrIGIvaTM4Ni10ZGVwLmMKQEAgLTQ5LDYg KzQ5LDkgQEAKICNpbmNsdWRlICJpMzg2LXRkZXAuaCIKICNpbmNsdWRlICJp Mzg3LXRkZXAuaCIKIAorI2luY2x1ZGUgInJlY29yZC5oIgorI2luY2x1ZGUg PHN0ZGludC5oPgorCiAvKiBSZWdpc3RlciBuYW1lcy4gICovCiAKIHN0YXRp YyBjaGFyICppMzg2X3JlZ2lzdGVyX25hbWVzW10gPQpAQCAtMjYzOCw2ICsy NjQxLDI5NjUgQEAgaTM4Nl9za2lwX3Blcm1hbmVudF9icmVha3BvaW50IChz dHJ1Y3QgcgogfQogCiAKKyNkZWZpbmUgUFJFRklYX1JFUFoJMHgwMQorI2Rl ZmluZSBQUkVGSVhfUkVQTloJMHgwMgorI2RlZmluZSBQUkVGSVhfTE9DSwkw eDA0CisjZGVmaW5lIFBSRUZJWF9EQVRBCTB4MDgKKyNkZWZpbmUgUFJFRklY X0FERFIJMHgxMAorCisvKiBvcGVyYW5kIHNpemUgKi8KK2VudW0KK3sKKyAg T1RfQllURSA9IDAsCisgIE9UX1dPUkQsCisgIE9UX0xPTkcsCit9OworCisv KiBpMzg2IGFyaXRoL2xvZ2ljIG9wZXJhdGlvbnMgKi8KK2VudW0KK3sKKyAg T1BfQURETCwKKyAgT1BfT1JMLAorICBPUF9BRENMLAorICBPUF9TQkJMLAor ICBPUF9BTkRMLAorICBPUF9TVUJMLAorICBPUF9YT1JMLAorICBPUF9DTVBM LAorfTsKKworc3RhdGljIGludCBhZmxhZyA9IDE7CitzdGF0aWMgaW50IGRm bGFnID0gMTsKK3N0YXRpYyBpbnQgb3ZlcnJpZGUgPSAwOworc3RhdGljIHVp bnQ4X3QgbW9kcm07CitzdGF0aWMgdWludDhfdCBtb2QsIHJlZywgcm07Citz dGF0aWMgaW50IG90Oworc3RhdGljIENPUkVfQUREUiBpMzg2X3JlY29yZF9w YzsKKworLyogUGFyc2UgIm1vZHJtIiBwYXJ0IGluIGN1cnJlbnQgbWVtb3J5 IGFkZHJlc3MgdGhhdCBpMzg2X3JlY29yZF9wYyBwb2ludCB0by4KKyAgIFJl dHVybiAtMSBpZiBzb21ldGhpbmcgd3JvbmcuICovCitzdGF0aWMgaW50Citp Mzg2X3JlY29yZF9tb2RybSAodm9pZCkKK3sKKyAgaWYgKHRhcmdldF9yZWFk X21lbW9yeSAoaTM4Nl9yZWNvcmRfcGMsICZtb2RybSwgMSkpCisgICAgewor ICAgICAgaWYgKHJlY29yZF9kZWJ1ZykKKwl7CisJICBwcmludGZfdW5maWx0 ZXJlZCAoXworCQkJICAgICAoIlByb2Nlc3MgcmVjb3JkOiBlcnJvciByZWFk aW5nIG1lbW9yeSBhdCBhZGRyIDB4JXMgbGVuID0gMS5cbiIpLAorCQkJICAg ICBwYWRkcl9ueiAoaTM4Nl9yZWNvcmRfcGMpKTsKKwl9CisgICAgICByZXR1 cm4gKC0xKTsKKyAgICB9CisgIGkzODZfcmVjb3JkX3BjKys7CisgIG1vZCA9 IChtb2RybSA+PiA2KSAmIDM7CisgIHJlZyA9IChtb2RybSA+PiAzKSAmIDc7 CisgIHJtID0gbW9kcm0gJiA3OworCisgIHJldHVybiAoMCk7Cit9CisKKy8q IEdldCB0aGUgbWVtb3J5IGFkZHJlc3MgdGhhdCBjdXJyZW50IGluc3RydWN0 aW9uICB3cml0ZSB0byBhbmQgc2V0IGl0IHRvCisgICB0aGUgYXJndW1lbnQg ImFkZHIiLgorICAgUmV0dXJuIC0xIGlmIHNvbWV0aGluZyB3cm9uZy4gKi8K K3N0YXRpYyBpbnQKK2kzODZfcmVjb3JkX2xlYV9tb2RybV9hZGRyICh1aW50 MzJfdCAqIGFkZHIpCit7CisgIHVpbnQ4X3QgdG1wdTg7CisgIHVpbnQxNl90 IHRtcHUxNjsKKyAgdWludDMyX3QgdG1wdTMyOworCisgICphZGRyID0gMDsK KyAgaWYgKGFmbGFnKQorICAgIHsKKyAgICAgIC8qIDMyIGJpdHMgKi8KKyAg ICAgIGludCBoYXZlc2liID0gMDsKKyAgICAgIHVpbnQ4X3Qgc2NhbGUgPSAw OworICAgICAgdWludDhfdCBpbmRleCA9IDA7CisgICAgICB1aW50OF90IGJh c2UgPSBybTsKKworICAgICAgaWYgKGJhc2UgPT0gNCkKKwl7CisJICBoYXZl c2liID0gMTsKKwkgIGlmICh0YXJnZXRfcmVhZF9tZW1vcnkgKGkzODZfcmVj b3JkX3BjLCAmdG1wdTgsIDEpKQorCSAgICB7CisJICAgICAgaWYgKHJlY29y ZF9kZWJ1ZykKKwkJeworCQkgIHByaW50Zl91bmZpbHRlcmVkIChfCisJCQkJ ICAgICAoIlByb2Nlc3MgcmVjb3JkOiBlcnJvciByZWFkaW5nIG1lbW9yeSBh dCBhZGRyIDB4JXMgbGVuID0gMS5cbiIpLAorCQkJCSAgICAgcGFkZHJfbnog KGkzODZfcmVjb3JkX3BjKSk7CisJCX0KKwkgICAgICByZXR1cm4gKC0xKTsK KwkgICAgfQorCSAgaTM4Nl9yZWNvcmRfcGMrKzsKKwkgIHNjYWxlID0gKHRt cHU4ID4+IDYpICYgMzsKKwkgIGluZGV4ID0gKCh0bXB1OCA+PiAzKSAmIDcp OworCSAgYmFzZSA9ICh0bXB1OCAmIDcpOworCX0KKworICAgICAgc3dpdGNo IChtb2QpCisJeworCWNhc2UgMDoKKwkgIGlmICgoYmFzZSAmIDcpID09IDUp CisJICAgIHsKKwkgICAgICBiYXNlID0gMHhmZjsKKwkgICAgICBpZiAodGFy Z2V0X3JlYWRfbWVtb3J5IChpMzg2X3JlY29yZF9wYywgKGdkYl9ieXRlICop IGFkZHIsIDQpKQorCQl7CisJCSAgaWYgKHJlY29yZF9kZWJ1ZykKKwkJICAg IHsKKwkJICAgICAgcHJpbnRmX3VuZmlsdGVyZWQgKF8KKwkJCQkJICgiUHJv Y2VzcyByZWNvcmQ6IGVycm9yIHJlYWRpbmcgbWVtb3J5IGF0IGFkZHIgMHgl cyBsZW4gPSA0LlxuIiksCisJCQkJCSBwYWRkcl9ueiAoaTM4Nl9yZWNvcmRf cGMpKTsKKwkJICAgIH0KKwkJICByZXR1cm4gKC0xKTsKKwkJfQorCSAgICAg IGkzODZfcmVjb3JkX3BjICs9IDQ7CisJICAgIH0KKwkgIGVsc2UKKwkgICAg eworCSAgICAgICphZGRyID0gMDsKKwkgICAgfQorCSAgYnJlYWs7CisJY2Fz ZSAxOgorCSAgaWYgKHRhcmdldF9yZWFkX21lbW9yeSAoaTM4Nl9yZWNvcmRf cGMsICZ0bXB1OCwgMSkpCisJICAgIHsKKwkgICAgICBpZiAocmVjb3JkX2Rl YnVnKQorCQl7CisJCSAgcHJpbnRmX3VuZmlsdGVyZWQgKF8KKwkJCQkgICAg ICgiUHJvY2VzcyByZWNvcmQ6IGVycm9yIHJlYWRpbmcgbWVtb3J5IGF0IGFk ZHIgMHglcyBsZW4gPSAxLlxuIiksCisJCQkJICAgICBwYWRkcl9ueiAoaTM4 Nl9yZWNvcmRfcGMpKTsKKwkJfQorCSAgICAgIHJldHVybiAoLTEpOworCSAg ICB9CisJICBpMzg2X3JlY29yZF9wYysrOworCSAgKmFkZHIgPSAoaW50OF90 KSB0bXB1ODsKKwkgIGJyZWFrOworCWNhc2UgMjoKKwkgIGlmICh0YXJnZXRf cmVhZF9tZW1vcnkgKGkzODZfcmVjb3JkX3BjLCAoZ2RiX2J5dGUgKikgYWRk ciwgNCkpCisJICAgIHsKKwkgICAgICBpZiAocmVjb3JkX2RlYnVnKQorCQl7 CisJCSAgcHJpbnRmX3VuZmlsdGVyZWQgKF8KKwkJCQkgICAgICgiUHJvY2Vz cyByZWNvcmQ6IGVycm9yIHJlYWRpbmcgbWVtb3J5IGF0IGFkZHIgMHglcyBs ZW4gPSA0LlxuIiksCisJCQkJICAgICBwYWRkcl9ueiAoaTM4Nl9yZWNvcmRf cGMpKTsKKwkJfQorCSAgICAgIHJldHVybiAoLTEpOworCSAgICB9CisJICBp Mzg2X3JlY29yZF9wYyArPSA0OworCSAgYnJlYWs7CisJfQorCisgICAgICBp ZiAoYmFzZSAhPSAweGZmKQorCXsKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChy ZWNvcmRfcmVnY2FjaGUsIGJhc2UsIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 CisJICAqYWRkciArPSB0bXB1MzI7CisJfQorCisgICAgICAvKiBYWFg6IGlu ZGV4ID09IDQgaXMgYWx3YXlzIGludmFsaWQgKi8KKyAgICAgIGlmIChoYXZl c2liICYmIChpbmRleCAhPSA0IHx8IHNjYWxlICE9IDApKQorCXsKKwkgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIGluZGV4LCAoZ2Ri X2J5dGUgKikgJiB0bXB1MzIpOworCSAgKmFkZHIgKz0gdG1wdTMyIDw8IHNj YWxlOworCX0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiAxNiBi aXRzICovCisgICAgICBzd2l0Y2ggKG1vZCkKKwl7CisJY2FzZSAwOgorCSAg aWYgKHJtID09IDYpCisJICAgIHsKKwkgICAgICBpZiAodGFyZ2V0X3JlYWRf bWVtb3J5CisJCSAgKGkzODZfcmVjb3JkX3BjLCAoZ2RiX2J5dGUgKikgJiB0 bXB1MTYsIDIpKQorCQl7CisJCSAgaWYgKHJlY29yZF9kZWJ1ZykKKwkJICAg IHsKKwkJICAgICAgcHJpbnRmX3VuZmlsdGVyZWQgKF8KKwkJCQkJICgiUHJv Y2VzcyByZWNvcmQ6IGVycm9yIHJlYWRpbmcgbWVtb3J5IGF0IGFkZHIgMHgl cyBsZW4gPSAyLlxuIiksCisJCQkJCSBwYWRkcl9ueiAoaTM4Nl9yZWNvcmRf cGMpKTsKKwkJICAgIH0KKwkJICByZXR1cm4gKC0xKTsKKwkJfQorCSAgICAg IGkzODZfcmVjb3JkX3BjICs9IDI7CisJICAgICAgKmFkZHIgPSAoaW50MTZf dCkgdG1wdTE2OworCSAgICAgIHJtID0gMDsKKwkgICAgICBnb3RvIG5vX3Jt OworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAqYWRkciA9IDA7 CisJICAgIH0KKwkgIGJyZWFrOworCWNhc2UgMToKKwkgIGlmICh0YXJnZXRf cmVhZF9tZW1vcnkgKGkzODZfcmVjb3JkX3BjLCAmdG1wdTgsIDEpKQorCSAg ICB7CisJICAgICAgaWYgKHJlY29yZF9kZWJ1ZykKKwkJeworCQkgIHByaW50 Zl91bmZpbHRlcmVkIChfCisJCQkJICAgICAoIlByb2Nlc3MgcmVjb3JkOiBl cnJvciByZWFkaW5nIG1lbW9yeSBhdCBhZGRyIDB4JXMgbGVuID0gMS5cbiIp LAorCQkJCSAgICAgcGFkZHJfbnogKGkzODZfcmVjb3JkX3BjKSk7CisJCX0K KwkgICAgICByZXR1cm4gKC0xKTsKKwkgICAgfQorCSAgaTM4Nl9yZWNvcmRf cGMrKzsKKwkgICphZGRyID0gKGludDhfdCkgdG1wdTg7CisJICBicmVhazsK KwljYXNlIDI6CisJICBpZiAodGFyZ2V0X3JlYWRfbWVtb3J5IChpMzg2X3Jl Y29yZF9wYywgKGdkYl9ieXRlICopICYgdG1wdTE2LCAyKSkKKwkgICAgewor CSAgICAgIGlmIChyZWNvcmRfZGVidWcpCisJCXsKKwkJICBwcmludGZfdW5m aWx0ZXJlZCAoXworCQkJCSAgICAgKCJQcm9jZXNzIHJlY29yZDogZXJyb3Ig cmVhZGluZyBtZW1vcnkgYXQgYWRkciAweCVzIGxlbiA9IDIuXG4iKSwKKwkJ CQkgICAgIHBhZGRyX256IChpMzg2X3JlY29yZF9wYykpOworCQl9CisJICAg ICAgcmV0dXJuICgtMSk7CisJICAgIH0KKwkgIGkzODZfcmVjb3JkX3BjICs9 IDI7CisJICAqYWRkciA9IChpbnQxNl90KSB0bXB1MTY7CisJICBicmVhazsK Kwl9CisKKyAgICAgIHN3aXRjaCAocm0pCisJeworCWNhc2UgMDoKKwkgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRUJYX1JF R05VTSwKKwkJCSAgICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKwkgICph ZGRyICs9IHRtcHUzMjsKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRf cmVnY2FjaGUsIEkzODZfRVNJX1JFR05VTSwKKwkJCSAgICAgKGdkYl9ieXRl ICopICYgdG1wdTMyKTsKKwkgICphZGRyICs9IHRtcHUzMjsKKwkgIGJyZWFr OworCWNhc2UgMToKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVn Y2FjaGUsIEkzODZfRUJYX1JFR05VTSwKKwkJCSAgICAgKGdkYl9ieXRlICop ICYgdG1wdTMyKTsKKwkgICphZGRyICs9IHRtcHUzMjsKKwkgIHJlZ2NhY2hl X3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRURJX1JFR05VTSwK KwkJCSAgICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKwkgICphZGRyICs9 IHRtcHUzMjsKKwkgIGJyZWFrOworCWNhc2UgMjoKKwkgIHJlZ2NhY2hlX3Jh d19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRUJQX1JFR05VTSwKKwkJ CSAgICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKwkgICphZGRyICs9IHRt cHUzMjsKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUs IEkzODZfRVNJX1JFR05VTSwKKwkJCSAgICAgKGdkYl9ieXRlICopICYgdG1w dTMyKTsKKwkgICphZGRyICs9IHRtcHUzMjsKKwkgIGJyZWFrOworCWNhc2Ug MzoKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkz ODZfRUJQX1JFR05VTSwKKwkJCSAgICAgKGdkYl9ieXRlICopICYgdG1wdTMy KTsKKwkgICphZGRyICs9IHRtcHUzMjsKKwkgIHJlZ2NhY2hlX3Jhd19yZWFk IChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRURJX1JFR05VTSwKKwkJCSAgICAg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKKwkgICphZGRyICs9IHRtcHUzMjsK KwkgIGJyZWFrOworCWNhc2UgNDoKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChy ZWNvcmRfcmVnY2FjaGUsIEkzODZfRVNJX1JFR05VTSwKKwkJCSAgICAgKGdk Yl9ieXRlICopICYgdG1wdTMyKTsKKwkgICphZGRyICs9IHRtcHUzMjsKKwkg IGJyZWFrOworCWNhc2UgNToKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNv cmRfcmVnY2FjaGUsIEkzODZfRURJX1JFR05VTSwKKwkJCSAgICAgKGdkYl9i eXRlICopICYgdG1wdTMyKTsKKwkgICphZGRyICs9IHRtcHUzMjsKKwkgIGJy ZWFrOworCWNhc2UgNjoKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRf cmVnY2FjaGUsIEkzODZfRUJQX1JFR05VTSwKKwkJCSAgICAgKGdkYl9ieXRl ICopICYgdG1wdTMyKTsKKwkgICphZGRyICs9IHRtcHUzMjsKKwkgIGJyZWFr OworCWNhc2UgNzoKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVn Y2FjaGUsIEkzODZfRUJYX1JFR05VTSwKKwkJCSAgICAgKGdkYl9ieXRlICop ICYgdG1wdTMyKTsKKwkgICphZGRyICs9IHRtcHUzMjsKKwkgIGJyZWFrOwor CX0KKyAgICAgICphZGRyICY9IDB4ZmZmZjsKKyAgICB9CisKK25vX3JtOgor ICByZXR1cm4gKDApOworfQorCisvKiBSZWNvcmQgdGhlIHZhbHVlIG9mIHRo ZSBtZW1vcnkgdGhhdCB3aWxsYmUgY2hhbmdlZCBpbiBjdXJyZW50IGluc3Ry dWN0aW9uCisgICB0byAicmVjb3JkX2FyY2hfbGlzdCIuCisgICBSZXR1cm4g LTEgaWYgc29tZXRoaW5nIHdyb25nLiAqLworc3RhdGljIGludAoraTM4Nl9y ZWNvcmRfbGVhX21vZHJtICh2b2lkKQoreworICB1aW50MzJfdCBhZGRyOwor CisgIGlmIChvdmVycmlkZSkKKyAgICB7CisgICAgICBpZiAocmVjb3JkX2Rl YnVnKQorCXByaW50Zl91bmZpbHRlcmVkIChfCisJCQkgICAoIlByb2Nlc3Mg cmVjb3JkIGlnbm9yZXMgdGhlIG1lbW9yeSBjaGFuZ2Ugb2YgaW5zdHJ1Y3Rp b24gYXQgYWRkcmVzcyAweCVzIGJlY2F1c2UgaXQgY2FuJ3QgZ2V0IHRoZSB2 YWx1ZSBvZiB0aGUgc2VnbWVudCByZWdpc3Rlci5cbiIpLAorCQkJICAgcGFk ZHJfbnogKGkzODZfcmVjb3JkX3BjKSk7CisgICAgICByZXR1cm4gKDApOwor ICAgIH0KKworICBpZiAoaTM4Nl9yZWNvcmRfbGVhX21vZHJtX2FkZHIgKCZh ZGRyKSkKKyAgICB7CisgICAgICByZXR1cm4gKC0xKTsKKyAgICB9CisKKyAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoYWRkciwgMSA8PCBvdCkp CisgICAgeworICAgICAgcmV0dXJuICgtMSk7CisgICAgfQorCisgIHJldHVy biAoMCk7Cit9CisKKy8qIFBhcnNlIHRoZSBjdXJyZW50IGluc3RydWN0aW9u IGFuZCByZWNvcmQgdGhlIHZhbHVlcyBvZiB0aGUgcmVnaXN0ZXJzIGFuZAor ICAgbWVtb3J5IHRoYXQgd2lsbCBiZSBjaGFuZ2VkIGluIGN1cnJlbnQgaW5z dHJ1Y3Rpb24gdG8gInJlY29yZF9hcmNoX2xpc3QiLgorICAgUmV0dXJuIC0x IGlmIHNvbWV0aGluZyB3cm9uZy4gKi8KK3N0YXRpYyBpbnQKK2kzODZfcHJv Y2Vzc19yZWNvcmQgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBDT1JFX0FE RFIgYWRkcikKK3sKKyAgaW50IHByZWZpeGVzID0gMDsKKyAgdWludDhfdCB0 bXB1ODsKKyAgdWludDE2X3QgdG1wdTE2OworICB1aW50MzJfdCB0bXB1MzI7 CisgIHVpbnQzMl90IG9wY29kZTsKKworICBpMzg2X3JlY29yZF9wYyA9IGFk ZHI7CisgIGFmbGFnID0gMTsKKyAgZGZsYWcgPSAxOworICBvdmVycmlkZSA9 IDA7CisKKyAgaWYgKHJlY29yZF9kZWJ1ZyA+IDEpCisgICAgeworICAgICAg ZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAiUHJvY2VzcyByZWNv cmQ6IGkzODZfcmVjb3JkIHBjID0gMHglc1xuIiwKKwkJCSAgcGFkZHJfbnog KGkzODZfcmVjb3JkX3BjKSk7CisgICAgfQorCisgIC8qIHByZWZpeGVzICov CisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIGlmICh0YXJnZXRfcmVhZF9t ZW1vcnkgKGkzODZfcmVjb3JkX3BjLCAmdG1wdTgsIDEpKQorCXsKKwkgIGlm IChyZWNvcmRfZGVidWcpCisJICAgIHsKKwkgICAgICBwcmludGZfdW5maWx0 ZXJlZCAoXworCQkJCSAoIlByb2Nlc3MgcmVjb3JkOiBlcnJvciByZWFkaW5n IG1lbW9yeSBhdCBhZGRyIDB4JXMgbGVuID0gMS5cbiIpLAorCQkJCSBwYWRk cl9ueiAoaTM4Nl9yZWNvcmRfcGMpKTsKKwkgICAgfQorCSAgcmV0dXJuICgt MSk7CisJfQorICAgICAgaTM4Nl9yZWNvcmRfcGMrKzsKKyAgICAgIHN3aXRj aCAodG1wdTgpCisJeworCWNhc2UgMHhmMzoKKwkgIHByZWZpeGVzIHw9IFBS RUZJWF9SRVBaOworCSAgYnJlYWs7CisJY2FzZSAweGYyOgorCSAgcHJlZml4 ZXMgfD0gUFJFRklYX1JFUE5aOworCSAgYnJlYWs7CisJY2FzZSAweGYwOgor CSAgcHJlZml4ZXMgfD0gUFJFRklYX0xPQ0s7CisJICBicmVhazsKKwljYXNl IDB4MmU6CisJICBvdmVycmlkZSA9IEkzODZfQ1NfUkVHTlVNOworCSAgYnJl YWs7CisJY2FzZSAweDM2OgorCSAgb3ZlcnJpZGUgPSBJMzg2X1NTX1JFR05V TTsKKwkgIGJyZWFrOworCWNhc2UgMHgzZToKKwkgIG92ZXJyaWRlID0gSTM4 Nl9EU19SRUdOVU07CisJICBicmVhazsKKwljYXNlIDB4MjY6CisJICBvdmVy cmlkZSA9IEkzODZfRVNfUkVHTlVNOworCSAgYnJlYWs7CisJY2FzZSAweDY0 OgorCSAgb3ZlcnJpZGUgPSBJMzg2X0ZTX1JFR05VTTsKKwkgIGJyZWFrOwor CWNhc2UgMHg2NToKKwkgIG92ZXJyaWRlID0gSTM4Nl9HU19SRUdOVU07CisJ ICBicmVhazsKKwljYXNlIDB4NjY6CisJICBwcmVmaXhlcyB8PSBQUkVGSVhf REFUQTsKKwkgIGJyZWFrOworCWNhc2UgMHg2NzoKKwkgIHByZWZpeGVzIHw9 IFBSRUZJWF9BRERSOworCSAgYnJlYWs7CisJZGVmYXVsdDoKKwkgIGdvdG8g b3V0X3ByZWZpeGVzOworCSAgYnJlYWs7CisJfQorICAgIH0KK291dF9wcmVm aXhlczoKKyAgaWYgKHByZWZpeGVzICYgUFJFRklYX0RBVEEpCisgICAgewor ICAgICAgZGZsYWcgXj0gMTsKKyAgICB9CisgIGlmIChwcmVmaXhlcyAmIFBS RUZJWF9BRERSKQorICAgIHsKKyAgICAgIGFmbGFnIF49IDE7CisgICAgfQor CisgIC8qIG5vdyBjaGVjayBvcCBjb2RlICovCisgIG9wY29kZSA9ICh1aW50 MzJfdCkgdG1wdTg7CityZXN3aXRjaDoKKyAgc3dpdGNoIChvcGNvZGUpCisg ICAgeworICAgIGNhc2UgMHgwZjoKKyAgICAgIGlmICh0YXJnZXRfcmVhZF9t ZW1vcnkgKGkzODZfcmVjb3JkX3BjLCAmdG1wdTgsIDEpKQorCXsKKwkgIGlm IChyZWNvcmRfZGVidWcpCisJICAgIHsKKwkgICAgICBwcmludGZfdW5maWx0 ZXJlZCAoXworCQkJCSAoIlByb2Nlc3MgcmVjb3JkOiBlcnJvciByZWFkaW5n IG1lbW9yeSBhdCBhZGRyIDB4JXMgbGVuID0gMS5cbiIpLAorCQkJCSBwYWRk cl9ueiAoaTM4Nl9yZWNvcmRfcGMpKTsKKwkgICAgfQorCSAgcmV0dXJuICgt MSk7CisJfQorICAgICAgaTM4Nl9yZWNvcmRfcGMrKzsKKyAgICAgIG9wY29k ZSA9ICh1aW50MTZfdCkgdG1wdTggfCAweDBmMDA7CisgICAgICBnb3RvIHJl c3dpdGNoOworICAgICAgYnJlYWs7CisKKyAgICAgIC8qIGFyaXRoICYgbG9n aWMgKi8KKyAgICBjYXNlIDB4MDA6CisgICAgY2FzZSAweDAxOgorICAgIGNh c2UgMHgwMjoKKyAgICBjYXNlIDB4MDM6CisgICAgY2FzZSAweDA0OgorICAg IGNhc2UgMHgwNToKKyAgICBjYXNlIDB4MDg6CisgICAgY2FzZSAweDA5Ogor ICAgIGNhc2UgMHgwYToKKyAgICBjYXNlIDB4MGI6CisgICAgY2FzZSAweDBj OgorICAgIGNhc2UgMHgwZDoKKyAgICBjYXNlIDB4MTA6CisgICAgY2FzZSAw eDExOgorICAgIGNhc2UgMHgxMjoKKyAgICBjYXNlIDB4MTM6CisgICAgY2Fz ZSAweDE0OgorICAgIGNhc2UgMHgxNToKKyAgICBjYXNlIDB4MTg6CisgICAg Y2FzZSAweDE5OgorICAgIGNhc2UgMHgxYToKKyAgICBjYXNlIDB4MWI6Cisg ICAgY2FzZSAweDFjOgorICAgIGNhc2UgMHgxZDoKKyAgICBjYXNlIDB4MjA6 CisgICAgY2FzZSAweDIxOgorICAgIGNhc2UgMHgyMjoKKyAgICBjYXNlIDB4 MjM6CisgICAgY2FzZSAweDI0OgorICAgIGNhc2UgMHgyNToKKyAgICBjYXNl IDB4Mjg6CisgICAgY2FzZSAweDI5OgorICAgIGNhc2UgMHgyYToKKyAgICBj YXNlIDB4MmI6CisgICAgY2FzZSAweDJjOgorICAgIGNhc2UgMHgyZDoKKyAg ICBjYXNlIDB4MzA6CisgICAgY2FzZSAweDMxOgorICAgIGNhc2UgMHgzMjoK KyAgICBjYXNlIDB4MzM6CisgICAgY2FzZSAweDM0OgorICAgIGNhc2UgMHgz NToKKyAgICBjYXNlIDB4Mzg6CisgICAgY2FzZSAweDM5OgorICAgIGNhc2Ug MHgzYToKKyAgICBjYXNlIDB4M2I6CisgICAgY2FzZSAweDNjOgorICAgIGNh c2UgMHgzZDoKKyAgICAgIGlmICgoKG9wY29kZSA+PiAzKSAmIDcpICE9IE9Q X0NNUEwpCisJeworCSAgaWYgKChvcGNvZGUgJiAxKSA9PSAwKQorCSAgICB7 CisJICAgICAgb3QgPSBPVF9CWVRFOworCSAgICB9CisJICBlbHNlCisJICAg IHsKKwkgICAgICBvdCA9IGRmbGFnICsgT1RfV09SRDsKKwkgICAgfQorCisJ ICBzd2l0Y2ggKChvcGNvZGUgPj4gMSkgJiAzKQorCSAgICB7CisJICAgICAg LyogT1AgRXYsIEd2ICovCisJICAgIGNhc2UgMDoKKwkgICAgICBpZiAoaTM4 Nl9yZWNvcmRfbW9kcm0gKCkpCisJCXsKKwkJICByZXR1cm4gKC0xKTsKKwkJ fQorCSAgICAgIGlmIChtb2QgIT0gMykKKwkJeworCQkgIGlmIChpMzg2X3Jl Y29yZF9sZWFfbW9kcm0gKCkpCisJCSAgICB7CisJCSAgICAgIHJldHVybiAo LTEpOworCQkgICAgfQorCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgaWYg KG90ID09IE9UX0JZVEUpCisJCSAgICB7CisJCSAgICAgIHJtICY9IDB4MzsK KwkJICAgIH0KKwkJICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChy bSkpCisJCSAgICB7CisJCSAgICAgIHJldHVybiAoLTEpOworCQkgICAgfQor CQl9CisJICAgICAgYnJlYWs7CisJICAgICAgLyogT1AgR3YsIEV2ICovCisJ ICAgIGNhc2UgMToKKwkgICAgICBpZiAoaTM4Nl9yZWNvcmRfbW9kcm0gKCkp CisJCXsKKwkJICByZXR1cm4gKC0xKTsKKwkJfQorCSAgICAgIGlmIChvdCA9 PSBPVF9CWVRFKQorCQl7CisJCSAgcmVnICY9IDB4MzsKKwkJfQorCSAgICAg IGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKHJlZykpCisJCXsKKwkJ ICByZXR1cm4gKC0xKTsKKwkJfQorCSAgICAgIGJyZWFrOworCSAgICAgIC8q IE9QIEEsIEl2ICovCisJICAgIGNhc2UgMjoKKwkgICAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfcmVnIChJMzg2X0VBWF9SRUdOVU0pKQorCQl7CisJ CSAgcmV0dXJuICgtMSk7CisJCX0KKwkgICAgICBicmVhazsKKwkgICAgfQor CX0KKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKEkzODZf RUZMQUdTX1JFR05VTSkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAg ICAgYnJlYWs7CisKKyAgICAgIC8qIEdSUDEgKi8KKyAgICBjYXNlIDB4ODA6 CisgICAgY2FzZSAweDgxOgorICAgIGNhc2UgMHg4MjoKKyAgICBjYXNlIDB4 ODM6CisgICAgICBpZiAoaTM4Nl9yZWNvcmRfbW9kcm0gKCkpCisJeworCSAg cmV0dXJuICgtMSk7CisJfQorCisgICAgICBpZiAocmVnICE9IE9QX0NNUEwp CisJeworCSAgaWYgKChvcGNvZGUgJiAxKSA9PSAwKQorCSAgICB7CisJICAg ICAgb3QgPSBPVF9CWVRFOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkg ICAgICBvdCA9IGRmbGFnICsgT1RfV09SRDsKKwkgICAgfQorCisJICBpZiAo bW9kICE9IDMpCisJICAgIHsKKwkgICAgICBpZiAoaTM4Nl9yZWNvcmRfbGVh X21vZHJtICgpKQorCQl7CisJCSAgcmV0dXJuICgtMSk7CisJCX0KKwkgICAg fQorCSAgZWxzZQorCSAgICB7CisJICAgICAgaWYgKHJlY29yZF9hcmNoX2xp c3RfYWRkX3JlZyAocm0pKQorCQl7CisJCSAgcmV0dXJuICgtMSk7CisJCX0K KwkgICAgfQorCX0KKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9y ZWcgKEkzODZfRUZMQUdTX1JFR05VTSkpCisJeworCSAgcmV0dXJuICgtMSk7 CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIGludiAqLworICAgIGNh c2UgMHg0MDoKKyAgICBjYXNlIDB4NDE6CisgICAgY2FzZSAweDQyOgorICAg IGNhc2UgMHg0MzoKKyAgICBjYXNlIDB4NDQ6CisgICAgY2FzZSAweDQ1Ogor ICAgIGNhc2UgMHg0NjoKKyAgICBjYXNlIDB4NDc6CisgICAgICAvKiBkZWMg Ki8KKyAgICBjYXNlIDB4NDg6CisgICAgY2FzZSAweDQ5OgorICAgIGNhc2Ug MHg0YToKKyAgICBjYXNlIDB4NGI6CisgICAgY2FzZSAweDRjOgorICAgIGNh c2UgMHg0ZDoKKyAgICBjYXNlIDB4NGU6CisgICAgY2FzZSAweDRmOgorICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAob3Bjb2RlICYgNykp CisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX3JlZyAoSTM4Nl9FRkxBR1NfUkVHTlVNKSkKKwl7CisJ ICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyog R1JQMyAqLworICAgIGNhc2UgMHhmNjoKKyAgICBjYXNlIDB4Zjc6CisgICAg ICBpZiAoKG9wY29kZSAmIDEpID09IDApCisJeworCSAgb3QgPSBPVF9CWVRF OworCX0KKyAgICAgIGVsc2UKKwl7CisJICBvdCA9IGRmbGFnICsgT1RfV09S RDsKKwl9CisgICAgICBpZiAoaTM4Nl9yZWNvcmRfbW9kcm0gKCkpCisJewor CSAgcmV0dXJuICgtMSk7CisJfQorCisgICAgICBzd2l0Y2ggKHJlZykKKwl7 CisJICAvKiB0ZXN0ICovCisJY2FzZSAwOgorCSAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX3JlZyAoSTM4Nl9FRkxBR1NfUkVHTlVNKSkKKwkgICAgewor CSAgICAgIHJldHVybiAoLTEpOworCSAgICB9CisJICBicmVhazsKKwkgIC8q IG5vdCAqLworCWNhc2UgMjoKKwkgIGlmIChtb2QgIT0gMykKKwkgICAgewor CSAgICAgIGlmIChpMzg2X3JlY29yZF9sZWFfbW9kcm0gKCkpCisJCXsKKwkJ ICByZXR1cm4gKC0xKTsKKwkJfQorCSAgICB9CisJICBlbHNlCisJICAgIHsK KwkgICAgICBpZiAob3QgPT0gT1RfQllURSkKKwkJeworCQkgIHJtICY9IDB4 MzsKKwkJfQorCSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcg KHJtKSkKKwkJeworCQkgIHJldHVybiAoLTEpOworCQl9CisJICAgIH0KKwkg IGJyZWFrOworCSAgLyogbmVnICovCisJY2FzZSAzOgorCSAgaWYgKG1vZCAh PSAzKQorCSAgICB7CisJICAgICAgaWYgKGkzODZfcmVjb3JkX2xlYV9tb2Ry bSAoKSkKKwkJeworCQkgIHJldHVybiAoLTEpOworCQl9CisJICAgIH0KKwkg IGVsc2UKKwkgICAgeworCSAgICAgIGlmIChvdCA9PSBPVF9CWVRFKQorCQl7 CisJCSAgcm0gJj0gMHgzOworCQl9CisJICAgICAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX3JlZyAocm0pKQorCQl7CisJCSAgcmV0dXJuICgtMSk7CisJ CX0KKwkgICAgfQorCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAo STM4Nl9FRkxBR1NfUkVHTlVNKSkKKwkgICAgeworCSAgICAgIHJldHVybiAo LTEpOworCSAgICB9CisJICBicmVhazsKKwkgIC8qIG11bCAqLworCWNhc2Ug NDoKKwkgIC8qIGltdWwgKi8KKwljYXNlIDU6CisJICAvKiBkaXYgKi8KKwlj YXNlIDY6CisJICAvKiBpZGl2ICovCisJY2FzZSA3OgorCSAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX3JlZyAoSTM4Nl9FQVhfUkVHTlVNKSkKKwkgICAg eworCSAgICAgIHJldHVybiAoLTEpOworCSAgICB9CisJICBpZiAob3QgIT0g T1RfQllURSkKKwkgICAgeworCSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9yZWcgKEkzODZfRURYX1JFR05VTSkpCisJCXsKKwkJICByZXR1cm4g KC0xKTsKKwkJfQorCSAgICB9CisJICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfcmVnIChJMzg2X0VGTEFHU19SRUdOVU0pKQorCSAgICB7CisJICAgICAg cmV0dXJuICgtMSk7CisJICAgIH0KKwkgIGJyZWFrOworCWRlZmF1bHQ6CisJ ICBpMzg2X3JlY29yZF9wYyAtPSAyOworCSAgb3Bjb2RlID0gb3Bjb2RlIDw8 IDggfCBtb2RybTsKKwkgIGdvdG8gbm9fc3VwcG9ydDsKKwkgIGJyZWFrOwor CX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBHUlA0ICovCisgICAgY2Fz ZSAweGZlOgorICAgICAgLyogR1JQNSAqLworICAgIGNhc2UgMHhmZjoKKyAg ICAgIGlmICgob3Bjb2RlICYgMSkgPT0gMCkKKwl7CisJICBvdCA9IE9UX0JZ VEU7CisJfQorICAgICAgZWxzZQorCXsKKwkgIG90ID0gZGZsYWcgKyBPVF9X T1JEOworCX0KKyAgICAgIGlmIChpMzg2X3JlY29yZF9tb2RybSAoKSkKKwl7 CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBpZiAocmVnID49IDIgJiYg b3Bjb2RlID09IDB4ZmUpCisJeworCSAgaTM4Nl9yZWNvcmRfcGMgLT0gMjsK KwkgIG9wY29kZSA9IG9wY29kZSA8PCA4IHwgbW9kcm07CisJICBnb3RvIG5v X3N1cHBvcnQ7CisJfQorCisgICAgICBzd2l0Y2ggKHJlZykKKwl7CisJICAv KiBpbmMgKi8KKwljYXNlIDA6CisJICAvKiBkZWMgKi8KKwljYXNlIDE6CisJ ICBpZiAobW9kICE9IDMpCisJICAgIHsKKwkgICAgICBpZiAoaTM4Nl9yZWNv cmRfbGVhX21vZHJtICgpKQorCQl7CisJCSAgcmV0dXJuICgtMSk7CisJCX0K KwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgaWYgKG90ID09IE9U X0JZVEUpCisJCXsKKwkJICBybSAmPSAweDM7CisJCX0KKwkgICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChybSkpCisJCXsKKwkJICByZXR1 cm4gKC0xKTsKKwkJfQorCSAgICB9CisJICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfcmVnIChJMzg2X0VGTEFHU19SRUdOVU0pKQorCSAgICB7CisJICAg ICAgcmV0dXJuICgtMSk7CisJICAgIH0KKwkgIGJyZWFrOworCSAgLyogY2Fs bCAqLworCWNhc2UgMjoKKwkgIC8qIHB1c2ggKi8KKwljYXNlIDY6CisJICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChJMzg2X0VTUF9SRUdOVU0p KQorCSAgICB7CisJICAgICAgcmV0dXJuICgtMSk7CisJICAgIH0KKwkgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRVNQX1JF R05VTSwKKwkJCSAgICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKwkgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0KKwkgICAgICAoKENPUkVfQURE UikgdG1wdTMyIC0gKDEgPDwgKGRmbGFnICsgMSkpLCAoMSA8PCAoZGZsYWcg KyAxKSkpKQorCSAgICB7CisJICAgICAgcmV0dXJuICgtMSk7CisJICAgIH0K KwkgIGJyZWFrOworCSAgLyogbGNhbGwgKi8KKwljYXNlIDM6CisJICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChJMzg2X0VTUF9SRUdOVU0pKQor CSAgICB7CisJICAgICAgcmV0dXJuICgtMSk7CisJICAgIH0KKwkgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKEkzODZfQ1NfUkVHTlVNKSkKKwkg ICAgeworCSAgICAgIHJldHVybiAoLTEpOworCSAgICB9CisJICByZWdjYWNo ZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2X0VTUF9SRUdOVU0s CisJCQkgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisJICBpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfbWVtCisJICAgICAgKChDT1JFX0FERFIpIHRt cHUzMiAtICgxIDw8IChkZmxhZyArIDIpKSwgKDEgPDwgKGRmbGFnICsgMikp KSkKKwkgICAgeworCSAgICAgIHJldHVybiAoLTEpOworCSAgICB9CisJICBi cmVhazsKKwkgIC8qIGptcCAqLworCWNhc2UgNDoKKwkgIC8qIGxqbXAgKi8K KwljYXNlIDU6CisJICBicmVhazsKKwlkZWZhdWx0OgorCSAgaTM4Nl9yZWNv cmRfcGMgLT0gMjsKKwkgIG9wY29kZSA9IG9wY29kZSA8PCA4IHwgbW9kcm07 CisJICBnb3RvIG5vX3N1cHBvcnQ7CisJICBicmVhazsKKwl9CisgICAgICBi cmVhazsKKworICAgICAgLyogdGVzdCAqLworICAgIGNhc2UgMHg4NDoKKyAg ICBjYXNlIDB4ODU6CisgICAgY2FzZSAweGE4OgorICAgIGNhc2UgMHhhOToK KyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKEkzODZfRUZM QUdTX1JFR05VTSkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAg YnJlYWs7CisKKyAgICAgIC8qIENXREUvQ0JXICovCisgICAgY2FzZSAweDk4 OgorICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoSTM4Nl9F QVhfUkVHTlVNKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBi cmVhazsKKworICAgICAgLyogQ0RRL0NXRCAqLworICAgIGNhc2UgMHg5OToK KyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKEkzODZfRUFY X1JFR05VTSkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoSTM4Nl9FRFhfUkVHTlVNKSkK Kwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAg ICAgLyogaW11bCAqLworICAgIGNhc2UgMHgwZmFmOgorICAgIGNhc2UgMHg2 OToKKyAgICBjYXNlIDB4NmI6CisgICAgICBvdCA9IGRmbGFnICsgT1RfV09S RDsKKyAgICAgIGlmIChpMzg2X3JlY29yZF9tb2RybSAoKSkKKwl7CisJICBy ZXR1cm4gKC0xKTsKKwl9CisgICAgICBpZiAob3QgPT0gT1RfQllURSkKKwl7 CisJICByZWcgJj0gMHgzOworCX0KKyAgICAgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9yZWcgKHJlZykpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQor ICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoSTM4Nl9FRkxB R1NfUkVHTlVNKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBi cmVhazsKKworICAgICAgLyogeGFkZCAqLworICAgIGNhc2UgMHgwZmMwOgor ICAgIGNhc2UgMHgwZmMxOgorICAgICAgaWYgKChvcGNvZGUgJiAxKSA9PSAw KQorCXsKKwkgIG90ID0gT1RfQllURTsKKwl9CisgICAgICBlbHNlCisJewor CSAgb3QgPSBkZmxhZyArIE9UX1dPUkQ7CisJfQorICAgICAgaWYgKGkzODZf cmVjb3JkX21vZHJtICgpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAg ICAgIGlmIChtb2QgPT0gMykKKwl7CisJICBpZiAob3QgPT0gT1RfQllURSkK KwkgICAgeworCSAgICAgIHJlZyAmPSAweDM7CisJICAgIH0KKwkgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKHJlZykpCisJICAgIHsKKwkgICAg ICByZXR1cm4gKC0xKTsKKwkgICAgfQorCSAgaWYgKG90ID09IE9UX0JZVEUp CisJICAgIHsKKwkgICAgICBybSAmPSAweDM7CisJICAgIH0KKwkgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKHJtKSkKKwkgICAgeworCSAgICAg IHJldHVybiAoLTEpOworCSAgICB9CisJfQorICAgICAgZWxzZQorCXsKKwkg IGlmIChpMzg2X3JlY29yZF9sZWFfbW9kcm0gKCkpCisJICAgIHsKKwkgICAg ICByZXR1cm4gKC0xKTsKKwkgICAgfQorCSAgaWYgKG90ID09IE9UX0JZVEUp CisJICAgIHsKKwkgICAgICByZWcgJj0gMHgzOworCSAgICB9CisJICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChyZWcpKQorCSAgICB7CisJICAg ICAgcmV0dXJuICgtMSk7CisJICAgIH0KKwl9CisgICAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfcmVnIChJMzg2X0VGTEFHU19SRUdOVU0pKQorCXsK KwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAv KiBjbXB4Y2hnICovCisgICAgY2FzZSAweDBmYjA6CisgICAgY2FzZSAweDBm YjE6CisgICAgICBpZiAoKG9wY29kZSAmIDEpID09IDApCisJeworCSAgb3Qg PSBPVF9CWVRFOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBvdCA9IGRmbGFn ICsgT1RfV09SRDsKKwl9CisgICAgICBpZiAoaTM4Nl9yZWNvcmRfbW9kcm0g KCkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgaWYgKG1vZCA9 PSAzKQorCXsKKwkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKEkz ODZfRUFYX1JFR05VTSkpCisJICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsK KwkgICAgfQorCSAgaWYgKG90ID09IE9UX0JZVEUpCisJICAgIHsKKwkgICAg ICByZWcgJj0gMHgzOworCSAgICB9CisJICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfcmVnIChyZWcpKQorCSAgICB7CisJICAgICAgcmV0dXJuICgtMSk7 CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJeworCSAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX3JlZyAoSTM4Nl9FQVhfUkVHTlVNKSkKKwkgICAgewor CSAgICAgIHJldHVybiAoLTEpOworCSAgICB9CisJICBpZiAoaTM4Nl9yZWNv cmRfbGVhX21vZHJtICgpKQorCSAgICB7CisJICAgICAgcmV0dXJuICgtMSk7 CisJICAgIH0KKwl9CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf cmVnIChJMzg2X0VGTEFHU19SRUdOVU0pKQorCXsKKwkgIHJldHVybiAoLTEp OworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBjbXB4Y2hnOGIgKi8K KyAgICBjYXNlIDB4MGZjNzoKKyAgICAgIGlmIChpMzg2X3JlY29yZF9tb2Ry bSAoKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBpZiAobW9k ID09IDMpCisJeworCSAgaTM4Nl9yZWNvcmRfcGMgLT0gMjsKKwkgIG9wY29k ZSA9IG9wY29kZSA8PCA4IHwgbW9kcm07CisJICBnb3RvIG5vX3N1cHBvcnQ7 CisJfQorICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoSTM4 Nl9FQVhfUkVHTlVNKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAg ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChJMzg2X0VEWF9SRUdO VU0pKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGlmIChpMzg2 X3JlY29yZF9sZWFfbW9kcm0gKCkpCisJeworCSAgcmV0dXJuICgtMSk7CisJ fQorICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoSTM4Nl9F RkxBR1NfUkVHTlVNKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAg ICBicmVhazsKKworICAgICAgLyogcHVzaCAqLworICAgIGNhc2UgMHg1MDoK KyAgICBjYXNlIDB4NTE6CisgICAgY2FzZSAweDUyOgorICAgIGNhc2UgMHg1 MzoKKyAgICBjYXNlIDB4NTQ6CisgICAgY2FzZSAweDU1OgorICAgIGNhc2Ug MHg1NjoKKyAgICBjYXNlIDB4NTc6CisgICAgY2FzZSAweDY4OgorICAgIGNh c2UgMHg2YToKKyAgICAgIC8qIHB1c2ggZXMgKi8KKyAgICBjYXNlIDB4MDY6 CisgICAgICAvKiBwdXNoIGNzICovCisgICAgY2FzZSAweDBlOgorICAgICAg LyogcHVzaCBzcyAqLworICAgIGNhc2UgMHgxNjoKKyAgICAgIC8qIHB1c2gg ZHMgKi8KKyAgICBjYXNlIDB4MWU6CisgICAgICAvKiBwdXNoIGZzICovCisg ICAgY2FzZSAweDBmYTA6CisgICAgICAvKiBwdXNoIGdzICovCisgICAgY2Fz ZSAweDBmYTg6CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVn IChJMzg2X0VTUF9SRUdOVU0pKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0K KyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkz ODZfRVNQX1JFR05VTSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwor ICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbQorCSAgKChDT1JF X0FERFIpIHRtcHUzMiAtICgxIDw8IChkZmxhZyArIDEpKSwgKDEgPDwgKGRm bGFnICsgMSkpKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBi cmVhazsKKworICAgICAgLyogcG9wICovCisgICAgY2FzZSAweDU4OgorICAg IGNhc2UgMHg1OToKKyAgICBjYXNlIDB4NWE6CisgICAgY2FzZSAweDViOgor ICAgIGNhc2UgMHg1YzoKKyAgICBjYXNlIDB4NWQ6CisgICAgY2FzZSAweDVl OgorICAgIGNhc2UgMHg1ZjoKKyAgICAgIG90ID0gZGZsYWcgKyBPVF9XT1JE OworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoSTM4Nl9F U1BfUkVHTlVNKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBp ZiAob3QgPT0gT1RfQllURSkKKwl7CisJICBvcGNvZGUgJj0gMHgzOworCX0K KyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKG9wY29kZSAm IDB4NykpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgYnJlYWs7 CisKKyAgICAgIC8qIHB1c2hhICovCisgICAgY2FzZSAweDYwOgorICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoSTM4Nl9FU1BfUkVHTlVN KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICByZWdjYWNoZV9y YXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2X0VTUF9SRUdOVU0sCisJ CQkgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9tZW0KKwkgICgoQ09SRV9BRERSKSB0bXB1MzIgLSAo MSA8PCAoZGZsYWcgKyA0KSksICgxIDw8IChkZmxhZyArIDQpKSkpCisJewor CSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8q IHBvcGEgKi8KKyAgICBjYXNlIDB4NjE6CisgICAgICBmb3IgKHRtcHU4ID0g STM4Nl9FQVhfUkVHTlVNOyB0bXB1OCA8PSBJMzg2X0VESV9SRUdOVU07IHRt cHU4KyspCisJeworCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAo dG1wdTgpKQorCSAgICB7CisJICAgICAgcmV0dXJuICgtMSk7CisJICAgIH0K Kwl9CisgICAgICBicmVhazsKKworICAgICAgLyogcG9wICovCisgICAgY2Fz ZSAweDhmOgorICAgICAgb3QgPSBkZmxhZyArIE9UX1dPUkQ7CisgICAgICBp ZiAoaTM4Nl9yZWNvcmRfbW9kcm0gKCkpCisJeworCSAgcmV0dXJuICgtMSk7 CisJfQorICAgICAgaWYgKG1vZCA9PSAzKQorCXsKKwkgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9yZWcgKHJtKSkKKwkgICAgeworCSAgICAgIHJldHVy biAoLTEpOworCSAgICB9CisJfQorICAgICAgZWxzZQorCXsKKwkgIGlmIChp Mzg2X3JlY29yZF9sZWFfbW9kcm0gKCkpCisJICAgIHsKKwkgICAgICByZXR1 cm4gKC0xKTsKKwkgICAgfQorCX0KKyAgICAgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9yZWcgKEkzODZfRVNQX1JFR05VTSkpCisJeworCSAgcmV0dXJu ICgtMSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIGVudGVyICov CisgICAgY2FzZSAweGM4OgorICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX3JlZyAoSTM4Nl9FU1BfUkVHTlVNKSkKKwl7CisJICByZXR1cm4gKC0x KTsKKwl9CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChJ Mzg2X0VCUF9SRUdOVU0pKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZf RVNQX1JFR05VTSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbQorCSAgKChDT1JFX0FE RFIpIHRtcHUzMiAtICgxIDw8IChkZmxhZyArIDEpKSwgKDEgPDwgKGRmbGFn ICsgMSkpKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVh azsKKworICAgICAgLyogbGVhdmUgKi8KKyAgICBjYXNlIDB4Yzk6CisgICAg ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChJMzg2X0VTUF9SRUdO VU0pKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9yZWcgKEkzODZfRUJQX1JFR05VTSkpCisJewor CSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8q IHBvcCBlcyAqLworICAgIGNhc2UgMHgwNzoKKyAgICAgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9yZWcgKEkzODZfRVNQX1JFR05VTSkpCisJeworCSAg cmV0dXJuICgtMSk7CisJfQorICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX3JlZyAoSTM4Nl9FU19SRUdOVU0pKQorCXsKKwkgIHJldHVybiAoLTEp OworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBwb3Agc3MgKi8KKyAg ICBjYXNlIDB4MTc6CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf cmVnIChJMzg2X0VTUF9SRUdOVU0pKQorCXsKKwkgIHJldHVybiAoLTEpOwor CX0KKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKEkzODZf U1NfUkVHTlVNKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBi cmVhazsKKworICAgICAgLyogcG9wIGRzICovCisgICAgY2FzZSAweDFmOgor ICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoSTM4Nl9FU1Bf UkVHTlVNKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChJMzg2X0RTX1JFR05VTSkpCisJ eworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAg IC8qIHBvcCBmcyAqLworICAgIGNhc2UgMHgwZmExOgorICAgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoSTM4Nl9FU1BfUkVHTlVNKSkKKwl7 CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfcmVnIChJMzg2X0ZTX1JFR05VTSkpCisJeworCSAgcmV0dXJu ICgtMSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHBvcCBncyAq LworICAgIGNhc2UgMHgwZmE5OgorICAgICAgaWYgKHJlY29yZF9hcmNoX2xp c3RfYWRkX3JlZyAoSTM4Nl9FU1BfUkVHTlVNKSkKKwl7CisJICByZXR1cm4g KC0xKTsKKwl9CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVn IChJMzg2X0dTX1JFR05VTSkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQor ICAgICAgYnJlYWs7CisKKyAgICAgIC8qIG1vdiAqLworICAgIGNhc2UgMHg4 ODoKKyAgICBjYXNlIDB4ODk6CisgICAgY2FzZSAweGM2OgorICAgIGNhc2Ug MHhjNzoKKyAgICAgIGlmICgob3Bjb2RlICYgMSkgPT0gMCkKKwl7CisJICBv dCA9IE9UX0JZVEU7CisJfQorICAgICAgZWxzZQorCXsKKwkgIG90ID0gZGZs YWcgKyBPVF9XT1JEOworCX0KKworICAgICAgaWYgKGkzODZfcmVjb3JkX21v ZHJtICgpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKworICAgICAgaWYg KG1vZCAhPSAzKQorCXsKKwkgIGlmIChpMzg2X3JlY29yZF9sZWFfbW9kcm0g KCkpCisJICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkgICAgfQorCX0K KyAgICAgIGVsc2UKKwl7CisJICBpZiAob3QgPT0gT1RfQllURSkKKwkgICAg eworCSAgICAgIHJtICY9IDB4MzsKKwkgICAgfQorCSAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX3JlZyAocm0pKQorCSAgICB7CisJICAgICAgcmV0dXJu ICgtMSk7CisJICAgIH0KKwl9CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfcmVnIChJMzg2X0VGTEFHU19SRUdOVU0pKQorCXsKKwkgIHJldHVy biAoLTEpOworCX0KKyAgICAgIGJyZWFrOworICAgICAgLyogbW92ICovCisg ICAgY2FzZSAweDhhOgorICAgIGNhc2UgMHg4YjoKKyAgICAgIGlmICgob3Bj b2RlICYgMSkgPT0gMCkKKwl7CisJICBvdCA9IE9UX0JZVEU7CisJfQorICAg ICAgZWxzZQorCXsKKwkgIG90ID0gZGZsYWcgKyBPVF9XT1JEOworCX0KKwor ICAgICAgaWYgKGkzODZfcmVjb3JkX21vZHJtICgpKQorCXsKKwkgIHJldHVy biAoLTEpOworCX0KKworICAgICAgaWYgKG90ID09IE9UX0JZVEUpCisJewor CSAgcmVnICY9IDB4MzsKKwl9CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfcmVnIChyZWcpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKwor ICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoSTM4Nl9FRkxB R1NfUkVHTlVNKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBi cmVhazsKKworICAgICAgLyogbW92IHNlZyAqLworICAgIGNhc2UgMHg4ZToK KyAgICAgIGlmIChpMzg2X3JlY29yZF9tb2RybSAoKSkKKwl7CisJICByZXR1 cm4gKC0xKTsKKwl9CisKKyAgICAgIHN3aXRjaCAocmVnKQorCXsKKwljYXNl IDA6CisJICB0bXB1OCA9IEkzODZfRVNfUkVHTlVNOworCSAgYnJlYWs7CisJ Y2FzZSAyOgorCSAgdG1wdTggPSBJMzg2X1NTX1JFR05VTTsKKwkgIGJyZWFr OworCWNhc2UgMzoKKwkgIHRtcHU4ID0gSTM4Nl9EU19SRUdOVU07CisJICBi cmVhazsKKwljYXNlIDQ6CisJICB0bXB1OCA9IEkzODZfRlNfUkVHTlVNOwor CSAgYnJlYWs7CisJY2FzZSA1OgorCSAgdG1wdTggPSBJMzg2X0dTX1JFR05V TTsKKwkgIGJyZWFrOworCWRlZmF1bHQ6CisJICBpMzg2X3JlY29yZF9wYyAt PSAyOworCSAgb3Bjb2RlID0gb3Bjb2RlIDw8IDggfCBtb2RybTsKKwkgIGdv dG8gbm9fc3VwcG9ydDsKKwkgIGJyZWFrOworCX0KKyAgICAgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9yZWcgKHRtcHU4KSkKKwl7CisJICByZXR1cm4g KC0xKTsKKwl9CisKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9y ZWcgKEkzODZfRUZMQUdTX1JFR05VTSkpCisJeworCSAgcmV0dXJuICgtMSk7 CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIG1vdiBzZWcgKi8KKyAg ICBjYXNlIDB4OGM6CisgICAgICBpZiAoaTM4Nl9yZWNvcmRfbW9kcm0gKCkp CisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgaWYgKHJlZyA+IDUp CisJeworCSAgaTM4Nl9yZWNvcmRfcGMgLT0gMjsKKwkgIG9wY29kZSA9IG9w Y29kZSA8PCA4IHwgbW9kcm07CisJICBnb3RvIG5vX3N1cHBvcnQ7CisJfQor CisgICAgICBpZiAobW9kID09IDMpCisJeworCSAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX3JlZyAocm0pKQorCSAgICB7CisJICAgICAgcmV0dXJuICgt MSk7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJeworCSAgb3QgPSBPVF9X T1JEOworCSAgaWYgKGkzODZfcmVjb3JkX2xlYV9tb2RybSAoKSkKKwkgICAg eworCSAgICAgIHJldHVybiAoLTEpOworCSAgICB9CisJfQorCisgICAgICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChJMzg2X0VGTEFHU19SRUdO VU0pKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFrOwor CisgICAgICAvKiBtb3Z6YlMgKi8KKyAgICBjYXNlIDB4MGZiNjoKKyAgICAg IC8qIG1vdnp3UyAqLworICAgIGNhc2UgMHgwZmI3OgorICAgICAgLyogbW92 c2JTICovCisgICAgY2FzZSAweDBmYmU6CisgICAgICAvKiBtb3Zzd1MgKi8K KyAgICBjYXNlIDB4MGZiZjoKKyAgICAgIGlmIChpMzg2X3JlY29yZF9tb2Ry bSAoKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfcmVnIChyZWcpKQorCXsKKwkgIHJldHVybiAo LTEpOworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBsZWEgKi8KKyAg ICBjYXNlIDB4OGQ6CisgICAgICBpZiAoaTM4Nl9yZWNvcmRfbW9kcm0gKCkp CisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgaWYgKG1vZCA9PSAz KQorCXsKKwkgIGkzODZfcmVjb3JkX3BjIC09IDI7CisJICBvcGNvZGUgPSBv cGNvZGUgPDwgOCB8IG1vZHJtOworCSAgZ290byBub19zdXBwb3J0OworCX0K KworICAgICAgb3QgPSBkZmxhZzsKKyAgICAgIGlmIChvdCA9PSBPVF9CWVRF KQorCXsKKwkgIHJlZyAmPSAweDM7CisJfQorICAgICAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX3JlZyAocmVnKSkKKwl7CisJICByZXR1cm4gKC0xKTsK Kwl9CisgICAgICBicmVhazsKKworICAgICAgLyogbW92IEVBWCAqLworICAg IGNhc2UgMHhhMDoKKyAgICBjYXNlIDB4YTE6CisgICAgICAvKiB4bGF0ICov CisgICAgY2FzZSAweGQ3OgorICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX3JlZyAoSTM4Nl9FQVhfUkVHTlVNKSkKKwl7CisJICByZXR1cm4gKC0x KTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogbW92IEVBWCAqLwor ICAgIGNhc2UgMHhhMjoKKyAgICBjYXNlIDB4YTM6CisgICAgICB7CisJdWlu dDMyX3QgYWRkcjsKKworCWlmIChvdmVycmlkZSkKKwkgIHsKKwkgICAgaWYg KHJlY29yZF9kZWJ1ZykKKwkgICAgICBwcmludGZfdW5maWx0ZXJlZCAoXwor CQkJCSAoIlByb2Nlc3MgcmVjb3JkIGlnbm9yZXMgdGhlIG1lbW9yeSBjaGFu Z2Ugb2YgaW5zdHJ1Y3Rpb24gYXQgYWRkcmVzcyAweCVzIGJlY2F1c2UgaXQg Y2FuJ3QgZ2V0IHRoZSB2YWx1ZSBvZiB0aGUgc2VnbWVudCByZWdpc3Rlci5c biIpLAorCQkJCSBwYWRkcl9ueiAoaTM4Nl9yZWNvcmRfcGMpKTsKKwkgIH0K KwllbHNlCisJICB7CisJICAgIGlmICgob3Bjb2RlICYgMSkgPT0gMCkKKwkg ICAgICB7CisJCW90ID0gT1RfQllURTsKKwkgICAgICB9CisJICAgIGVsc2UK KwkgICAgICB7CisJCW90ID0gZGZsYWcgKyBPVF9XT1JEOworCSAgICAgIH0K KwkgICAgaWYgKGFmbGFnKQorCSAgICAgIHsKKwkJaWYgKHRhcmdldF9yZWFk X21lbW9yeQorCQkgICAgKGkzODZfcmVjb3JkX3BjLCAoZ2RiX2J5dGUgKikg JiBhZGRyLCA0KSkKKwkJICB7CisJCSAgICBpZiAocmVjb3JkX2RlYnVnKQor CQkgICAgICB7CisJCQlwcmludGZfdW5maWx0ZXJlZCAoXworCQkJCQkgICAo IlByb2Nlc3MgcmVjb3JkOiBlcnJvciByZWFkaW5nIG1lbW9yeSBhdCBhZGRy IDB4JXMgbGVuID0gNC5cbiIpLAorCQkJCQkgICBwYWRkcl9ueiAoaTM4Nl9y ZWNvcmRfcGMpKTsKKwkJICAgICAgfQorCQkgICAgcmV0dXJuICgtMSk7CisJ CSAgfQorCQlpMzg2X3JlY29yZF9wYyArPSA0OworCSAgICAgIH0KKwkgICAg ZWxzZQorCSAgICAgIHsKKwkJaWYgKHRhcmdldF9yZWFkX21lbW9yeQorCQkg ICAgKGkzODZfcmVjb3JkX3BjLCAoZ2RiX2J5dGUgKikgJiB0bXB1MTYsIDQp KQorCQkgIHsKKwkJICAgIGlmIChyZWNvcmRfZGVidWcpCisJCSAgICAgIHsK KwkJCXByaW50Zl91bmZpbHRlcmVkIChfCisJCQkJCSAgICgiUHJvY2VzcyBy ZWNvcmQ6IGVycm9yIHJlYWRpbmcgbWVtb3J5IGF0IGFkZHIgMHglcyBsZW4g PSA0LlxuIiksCisJCQkJCSAgIHBhZGRyX256IChpMzg2X3JlY29yZF9wYykp OworCQkgICAgICB9CisJCSAgICByZXR1cm4gKC0xKTsKKwkJICB9CisJCWkz ODZfcmVjb3JkX3BjICs9IDI7CisJCWFkZHIgPSB0bXB1MTY7CisJICAgICAg fQorCSAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChhZGRyLCAx IDw8IG90KSkKKwkgICAgICB7CisJCXJldHVybiAoLTEpOworCSAgICAgIH0K KwkgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBtb3Yg UiwgSWIgKi8KKyAgICBjYXNlIDB4YjA6CisgICAgY2FzZSAweGIxOgorICAg IGNhc2UgMHhiMjoKKyAgICBjYXNlIDB4YjM6CisgICAgY2FzZSAweGI0Ogor ICAgIGNhc2UgMHhiNToKKyAgICBjYXNlIDB4YjY6CisgICAgY2FzZSAweGI3 OgorICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoKG9wY29k ZSAmIDB4NykgJiAweDMpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAg ICAgIGJyZWFrOworCisgICAgICAvKiBtb3YgUiwgSXYgKi8KKyAgICBjYXNl IDB4Yjg6CisgICAgY2FzZSAweGI5OgorICAgIGNhc2UgMHhiYToKKyAgICBj YXNlIDB4YmI6CisgICAgY2FzZSAweGJjOgorICAgIGNhc2UgMHhiZDoKKyAg ICBjYXNlIDB4YmU6CisgICAgY2FzZSAweGJmOgorICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX3JlZyAob3Bjb2RlICYgMHg3KSkKKwl7CisJICBy ZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogeGNo ZyBSLCBFQVggKi8KKyAgICBjYXNlIDB4OTE6CisgICAgY2FzZSAweDkyOgor ICAgIGNhc2UgMHg5MzoKKyAgICBjYXNlIDB4OTQ6CisgICAgY2FzZSAweDk1 OgorICAgIGNhc2UgMHg5NjoKKyAgICBjYXNlIDB4OTc6CisgICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChJMzg2X0VBWF9SRUdOVU0pKQor CXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9yZWcgKG9wY29kZSAmIDB4NykpCisJeworCSAgcmV0dXJu ICgtMSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHhjaGcgRXYs IEd2ICovCisgICAgY2FzZSAweDg2OgorICAgIGNhc2UgMHg4NzoKKyAgICAg IGlmICgob3Bjb2RlICYgMSkgPT0gMCkKKwl7CisJICBvdCA9IE9UX0JZVEU7 CisJfQorICAgICAgZWxzZQorCXsKKwkgIG90ID0gZGZsYWcgKyBPVF9XT1JE OworCX0KKworICAgICAgaWYgKGkzODZfcmVjb3JkX21vZHJtICgpKQorCXsK KwkgIHJldHVybiAoLTEpOworCX0KKworICAgICAgaWYgKG1vZCA9PSAzKQor CXsKKwkgIGlmIChvdCA9PSBPVF9CWVRFKQorCSAgICB7CisJICAgICAgcm0g Jj0gMHgzOworCSAgICB9CisJICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf cmVnIChybSkpCisJICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkgICAg fQorCX0KKyAgICAgIGVsc2UKKwl7CisJICBpZiAoaTM4Nl9yZWNvcmRfbGVh X21vZHJtICgpKQorCSAgICB7CisJICAgICAgcmV0dXJuICgtMSk7CisJICAg IH0KKwl9CisKKyAgICAgIGlmIChvdCA9PSBPVF9CWVRFKQorCXsKKwkgIHJl ZyAmPSAweDM7CisJfQorICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRk X3JlZyAocmVnKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBi cmVhazsKKworICAgICAgLyogbGVzIEd2ICovCisgICAgY2FzZSAweGM0Ogor ICAgICAgLyogbGRzIEd2ICovCisgICAgY2FzZSAweGM1OgorICAgICAgLyog bHNzIEd2ICovCisgICAgY2FzZSAweDBmYjI6CisgICAgICAvKiBsZnMgR3Yg Ki8KKyAgICBjYXNlIDB4MGZiNDoKKyAgICAgIC8qIGxncyBHdiAqLworICAg IGNhc2UgMHgwZmI1OgorICAgICAgaWYgKGkzODZfcmVjb3JkX21vZHJtICgp KQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGlmIChtb2QgPT0g MykKKwl7CisJICBpZiAob3Bjb2RlID4gMHhmZikKKwkgICAgeworCSAgICAg IGkzODZfcmVjb3JkX3BjIC09IDM7CisJICAgIH0KKwkgIGVsc2UKKwkgICAg eworCSAgICAgIGkzODZfcmVjb3JkX3BjIC09IDI7CisJICAgIH0KKwkgIG9w Y29kZSA9IG9wY29kZSA8PCA4IHwgbW9kcm07CisJICBnb3RvIG5vX3N1cHBv cnQ7CisJfQorCisgICAgICBzd2l0Y2ggKG9wY29kZSkKKwl7CisJICAvKiBs ZXMgR3YgKi8KKwljYXNlIDB4YzQ6CisJICB0bXB1OCA9IEkzODZfRVNfUkVH TlVNOworCSAgYnJlYWs7CisJICAvKiBsZHMgR3YgKi8KKwljYXNlIDB4YzU6 CisJICB0bXB1OCA9IEkzODZfRFNfUkVHTlVNOworCSAgYnJlYWs7CisJICAv KiBsc3MgR3YgKi8KKwljYXNlIDB4MGZiMjoKKwkgIHRtcHU4ID0gSTM4Nl9T U19SRUdOVU07CisJICBicmVhazsKKwkgIC8qIGxmcyBHdiAqLworCWNhc2Ug MHgwZmI0OgorCSAgdG1wdTggPSBJMzg2X0ZTX1JFR05VTTsKKwkgIGJyZWFr OworCSAgLyogbGdzIEd2ICovCisJY2FzZSAweDBmYjU6CisJICB0bXB1OCA9 IEkzODZfR1NfUkVHTlVNOworCSAgYnJlYWs7CisJfQorICAgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX3JlZyAodG1wdTgpKQorCXsKKwkgIHJldHVy biAoLTEpOworCX0KKworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRk X3JlZyAocmVnKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBi cmVhazsKKworICAgICAgLyogc2hpZnRzICovCisgICAgY2FzZSAweGMwOgor ICAgIGNhc2UgMHhjMToKKyAgICBjYXNlIDB4ZDA6CisgICAgY2FzZSAweGQx OgorICAgIGNhc2UgMHhkMjoKKyAgICBjYXNlIDB4ZDM6CisgICAgICBpZiAo KG9wY29kZSAmIDEpID09IDApCisJeworCSAgb3QgPSBPVF9CWVRFOworCX0K KyAgICAgIGVsc2UKKwl7CisJICBvdCA9IGRmbGFnICsgT1RfV09SRDsKKwl9 CisKKyAgICAgIGlmIChpMzg2X3JlY29yZF9tb2RybSAoKSkKKwl7CisJICBy ZXR1cm4gKC0xKTsKKwl9CisKKyAgICAgIGlmIChtb2QgIT0gMyAmJiAob3Bj b2RlID09IDB4ZDIgfHwgb3Bjb2RlID09IDB4ZDMpKQorCXsKKwkgIGlmIChp Mzg2X3JlY29yZF9sZWFfbW9kcm0gKCkpCisJICAgIHsKKwkgICAgICByZXR1 cm4gKC0xKTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisJICBpZiAo b3QgPT0gT1RfQllURSkKKwkgICAgeworCSAgICAgIHJtICY9IDB4MzsKKwkg ICAgfQorCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAocm0pKQor CSAgICB7CisJICAgICAgcmV0dXJuICgtMSk7CisJICAgIH0KKwl9CisKKyAg ICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKEkzODZfRUZMQUdT X1JFR05VTSkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgYnJl YWs7CisKKyAgICBjYXNlIDB4MGZhNDoKKyAgICBjYXNlIDB4MGZhNToKKyAg ICBjYXNlIDB4MGZhYzoKKyAgICBjYXNlIDB4MGZhZDoKKyAgICAgIGlmIChp Mzg2X3JlY29yZF9tb2RybSAoKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9 CisgICAgICBpZiAobW9kID09IDMpCisJeworCSAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX3JlZyAocm0pKQorCSAgICB7CisJICAgICAgcmV0dXJuICgt MSk7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJeworCSAgaWYgKGkzODZf cmVjb3JkX2xlYV9tb2RybSAoKSkKKwkgICAgeworCSAgICAgIHJldHVybiAo LTEpOworCSAgICB9CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIGZs b2F0cyAqLworICAgICAgLyogSXQganVzdCByZWNvcmQgdGhlIG1lbW9yeSBj aGFuZ2Ugb2YgaW5zdHJjdXRpb24uICovCisgICAgY2FzZSAweGQ4OgorICAg IGNhc2UgMHhkOToKKyAgICBjYXNlIDB4ZGE6CisgICAgY2FzZSAweGRiOgor ICAgIGNhc2UgMHhkYzoKKyAgICBjYXNlIDB4ZGQ6CisgICAgY2FzZSAweGRl OgorICAgIGNhc2UgMHhkZjoKKyAgICAgIGlmIChpMzg2X3JlY29yZF9tb2Ry bSAoKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICByZWcgfD0g KChvcGNvZGUgJiA3KSA8PCAzKTsKKyAgICAgIGlmIChtb2QgIT0gMykKKwl7 CisJICAvKiBtZW1vcnkgKi8KKwkgIHVpbnQzMl90IGFkZHI7CisKKwkgIGlm IChpMzg2X3JlY29yZF9sZWFfbW9kcm1fYWRkciAoJmFkZHIpKQorCSAgICB7 CisJICAgICAgcmV0dXJuICgtMSk7CisJICAgIH0KKwkgIHN3aXRjaCAocmVn KQorCSAgICB7CisJICAgIGNhc2UgMHgwMDoKKwkgICAgY2FzZSAweDAxOgor CSAgICBjYXNlIDB4MDI6CisJICAgIGNhc2UgMHgwMzoKKwkgICAgY2FzZSAw eDA0OgorCSAgICBjYXNlIDB4MDU6CisJICAgIGNhc2UgMHgwNjoKKwkgICAg Y2FzZSAweDA3OgorCSAgICBjYXNlIDB4MTA6CisJICAgIGNhc2UgMHgxMToK KwkgICAgY2FzZSAweDEyOgorCSAgICBjYXNlIDB4MTM6CisJICAgIGNhc2Ug MHgxNDoKKwkgICAgY2FzZSAweDE1OgorCSAgICBjYXNlIDB4MTY6CisJICAg IGNhc2UgMHgxNzoKKwkgICAgY2FzZSAweDIwOgorCSAgICBjYXNlIDB4MjE6 CisJICAgIGNhc2UgMHgyMjoKKwkgICAgY2FzZSAweDIzOgorCSAgICBjYXNl IDB4MjQ6CisJICAgIGNhc2UgMHgyNToKKwkgICAgY2FzZSAweDI2OgorCSAg ICBjYXNlIDB4Mjc6CisJICAgIGNhc2UgMHgzMDoKKwkgICAgY2FzZSAweDMx OgorCSAgICBjYXNlIDB4MzI6CisJICAgIGNhc2UgMHgzMzoKKwkgICAgY2Fz ZSAweDM0OgorCSAgICBjYXNlIDB4MzU6CisJICAgIGNhc2UgMHgzNjoKKwkg ICAgY2FzZSAweDM3OgorCSAgICAgIGJyZWFrOworCSAgICBjYXNlIDB4MDg6 CisJICAgIGNhc2UgMHgwYToKKwkgICAgY2FzZSAweDBiOgorCSAgICBjYXNl IDB4MTg6CisJICAgIGNhc2UgMHgxOToKKwkgICAgY2FzZSAweDFhOgorCSAg ICBjYXNlIDB4MWI6CisJICAgIGNhc2UgMHgyODoKKwkgICAgY2FzZSAweDI5 OgorCSAgICBjYXNlIDB4MmE6CisJICAgIGNhc2UgMHgyYjoKKwkgICAgY2Fz ZSAweDM4OgorCSAgICBjYXNlIDB4Mzk6CisJICAgIGNhc2UgMHgzYToKKwkg ICAgY2FzZSAweDNiOgorCSAgICAgIHN3aXRjaCAocmVnICYgNykKKwkJewor CQljYXNlIDA6CisJCSAgYnJlYWs7CisJCWNhc2UgMToKKwkJICBzd2l0Y2gg KHJlZyA+PiA0KQorCQkgICAgeworCQkgICAgY2FzZSAwOgorCQkgICAgICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChhZGRyLCA0KSkKKwkJCXsK KwkJCSAgcmV0dXJuICgtMSk7CisJCQl9CisJCSAgICAgIGJyZWFrOworCQkg ICAgY2FzZSAyOgorCQkgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtIChhZGRyLCA4KSkKKwkJCXsKKwkJCSAgcmV0dXJuICgtMSk7CisJCQl9 CisJCSAgICAgIGJyZWFrOworCQkgICAgY2FzZSAzOgorCQkgICAgZGVmYXVs dDoKKwkJICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoYWRk ciwgMikpCisJCQl7CisJCQkgIHJldHVybiAoLTEpOworCQkJfQorCQkgICAg ICBicmVhazsKKwkJICAgIH0KKwkJICBicmVhazsKKwkJZGVmYXVsdDoKKwkJ ICBzd2l0Y2ggKHJlZyA+PiA0KQorCQkgICAgeworCQkgICAgY2FzZSAwOgor CQkgICAgY2FzZSAxOgorCQkgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtIChhZGRyLCA0KSkKKwkJCXsKKwkJCSAgcmV0dXJuICgtMSk7CisJ CQl9CisJCSAgICAgIGJyZWFrOworCQkgICAgY2FzZSAyOgorCQkgICAgICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChhZGRyLCA4KSkKKwkJCXsK KwkJCSAgcmV0dXJuICgtMSk7CisJCQl9CisJCSAgICAgIGJyZWFrOworCQkg ICAgY2FzZSAzOgorCQkgICAgZGVmYXVsdDoKKwkJICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAoYWRkciwgMikpCisJCQl7CisJCQkgIHJl dHVybiAoLTEpOworCQkJfQorCQkgICAgICBicmVhazsKKwkJICAgIH0KKwkJ ICBicmVhazsKKwkJfQorCSAgICAgIGJyZWFrOworCSAgICBjYXNlIDB4MGM6 CisJICAgIGNhc2UgMHgwZDoKKwkgICAgY2FzZSAweDFkOgorCSAgICBjYXNl IDB4MmM6CisJICAgIGNhc2UgMHgzYzoKKwkgICAgY2FzZSAweDNkOgorCSAg ICAgIGJyZWFrOworCSAgICBjYXNlIDB4MGU6CisJICAgICAgaWYgKGRmbGFn KQorCQl7CisJCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoYWRk ciwgMjgpKQorCQkgICAgeworCQkgICAgICByZXR1cm4gKC0xKTsKKwkJICAg IH0KKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKGFkZHIsIDE0KSkKKwkJICAgIHsKKwkJICAgICAg cmV0dXJuICgtMSk7CisJCSAgICB9CisJCX0KKwkgICAgICBicmVhazsKKwkg ICAgY2FzZSAweDBmOgorCSAgICBjYXNlIDB4MmY6CisJICAgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAoYWRkciwgMikpCisJCXsKKwkJICBy ZXR1cm4gKC0xKTsKKwkJfQorCSAgICAgIGJyZWFrOworCSAgICBjYXNlIDB4 MWY6CisJICAgIGNhc2UgMHgzZToKKwkgICAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtIChhZGRyLCAxMCkpCisJCXsKKwkJICByZXR1cm4gKC0x KTsKKwkJfQorCSAgICAgIGJyZWFrOworCSAgICBjYXNlIDB4MmU6CisJICAg ICAgaWYgKGRmbGFnKQorCQl7CisJCSAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAoYWRkciwgMjgpKQorCQkgICAgeworCQkgICAgICByZXR1cm4g KC0xKTsKKwkJICAgIH0KKwkJICBhZGRyICs9IDI4OworCQl9CisJICAgICAg ZWxzZQorCQl7CisJCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo YWRkciwgMTQpKQorCQkgICAgeworCQkgICAgICByZXR1cm4gKC0xKTsKKwkJ ICAgIH0KKwkJICBhZGRyICs9IDE0OworCQl9CisJICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAoYWRkciwgODApKQorCQl7CisJCSAgcmV0 dXJuICgtMSk7CisJCX0KKwkgICAgICBicmVhazsKKwkgICAgY2FzZSAweDNm OgorCSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKGFkZHIs IDgpKQorCQl7CisJCSAgcmV0dXJuICgtMSk7CisJCX0KKwkgICAgICBicmVh azsKKwkgICAgZGVmYXVsdDoKKwkgICAgICBpMzg2X3JlY29yZF9wYyAtPSAy OworCSAgICAgIG9wY29kZSA9IG9wY29kZSA8PCA4IHwgbW9kcm07CisJICAg ICAgZ290byBub19zdXBwb3J0OworCSAgICAgIGJyZWFrOworCSAgICB9CisJ fQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN0cmluZyBvcHMgKi8KKyAg ICAgIC8qIG1vdnNTICovCisgICAgY2FzZSAweGE0OgorICAgIGNhc2UgMHhh NToKKyAgICAgIC8qIHN0b3NTICovCisgICAgY2FzZSAweGFhOgorICAgIGNh c2UgMHhhYjoKKyAgICAgIC8qIGluc1MgKi8KKyAgICBjYXNlIDB4NmM6Cisg ICAgY2FzZSAweDZkOgorICAgICAgeworCXVpbnQzMl90IGFkZHI7CisKKwlp ZiAoKG9wY29kZSAmIDEpID09IDApCisJICB7CisJICAgIG90ID0gT1RfQllU RTsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIG90ID0gZGZsYWcgKyBPVF9X T1JEOworCSAgfQorCWlmIChvcGNvZGUgPT0gMHhhNCB8fCBvcGNvZGUgPT0g MHhhNSkKKwkgIHsKKwkgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3Jl ZyAoSTM4Nl9FU0lfUkVHTlVNKSkKKwkgICAgICB7CisJCXJldHVybiAoLTEp OworCSAgICAgIH0KKwkgIH0KKwlpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf cmVnIChJMzg2X0VESV9SRUdOVU0pKQorCSAgeworCSAgICByZXR1cm4gKC0x KTsKKwkgIH0KKworCXJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2Fj aGUsIEkzODZfRURJX1JFR05VTSwKKwkJCSAgIChnZGJfYnl0ZSAqKSAmIGFk ZHIpOworCWlmICghYWZsYWcpCisJICB7CisJICAgIGFkZHIgJj0gMHhmZmZm OworCSAgICAvKiBhZGRyICs9ICgodWludDMyX3QpcmVhZF9yZWdpc3RlciAo STM4Nl9FU19SRUdOVU0pKSA8PCA0OyAqLworICAgICAgICAgICAgaWYgKHJl Y29yZF9kZWJ1ZykKKwkgICAgICBwcmludGZfdW5maWx0ZXJlZCAoXworCQkJ ICAgICAgICAgKCJQcm9jZXNzIHJlY29yZCBpZ25vcmVzIHRoZSBtZW1vcnkg Y2hhbmdlIG9mIGluc3RydWN0aW9uIGF0IGFkZHJlc3MgMHglcyBiZWNhdXNl IGl0IGNhbid0IGdldCB0aGUgdmFsdWUgb2YgdGhlIHNlZ21lbnQgcmVnaXN0 ZXIuXG4iKSwKKwkJCSAgIHBhZGRyX256IChpMzg2X3JlY29yZF9wYykpOwor CSAgfQorCisJaWYgKHByZWZpeGVzICYgKFBSRUZJWF9SRVBaIHwgUFJFRklY X1JFUE5aKSkKKwkgIHsKKwkgICAgdWludDMyX3QgY291bnQ7CisKKwkgICAg cmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgSTM4Nl9FQ1hf UkVHTlVNLAorCQkJICAgICAgIChnZGJfYnl0ZSAqKSAmIGNvdW50KTsKKwkg ICAgaWYgKCFhZmxhZykKKwkgICAgICB7CisJCWNvdW50ICY9IDB4ZmZmZjsK KwkgICAgICB9CisKKwkgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9y ZWdjYWNoZSwgSTM4Nl9FRkxBR1NfUkVHTlVNLAorCQkJICAgICAgIChnZGJf Ynl0ZSAqKSAmIHRtcHUzMik7CisJICAgIGlmICgodG1wdTMyID4+IDEwKSAm IDB4MSkKKwkgICAgICB7CisJCWFkZHIgLT0gKGNvdW50IC0gMSkgKiAoMSA8 PCBvdCk7CisJICAgICAgfQorCisJICAgIGlmIChhZmxhZykKKwkgICAgICB7 CisJICAgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChhZGRy LCBjb3VudCAqICgxIDw8IG90KSkpCisJICAgICAgICAgIHsKKwkJICAgIHJl dHVybiAoLTEpOworCSAgICAgICAgICB9CisJICAgICAgfQorCisJICAgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKEkzODZfRUNYX1JFR05VTSkp CisJICAgICAgeworCQlyZXR1cm4gKC0xKTsKKwkgICAgICB9CisJICB9CisJ ZWxzZQorCSAgeworCSAgICBpZiAoYWZsYWcpCisJICAgICAgeworCSAgICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoYWRkciwgMSA8PCBv dCkpCisJICAgICAgICAgIHsKKwkJICAgIHJldHVybiAoLTEpOworCSAgICAg ICAgICB9CisJICAgICAgfQorCSAgfQorICAgICAgfQorICAgICAgYnJlYWs7 CisKKyAgICAgIC8qIGxvZHNTICovCisgICAgY2FzZSAweGFjOgorICAgIGNh c2UgMHhhZDoKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcg KEkzODZfRUFYX1JFR05VTSkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQor ICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoSTM4Nl9FU0lf UkVHTlVNKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBpZiAo cHJlZml4ZXMgJiAoUFJFRklYX1JFUFogfCBQUkVGSVhfUkVQTlopKQorCXsK KwkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKEkzODZfRUNYX1JF R05VTSkpCisJICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkgICAgfQor CX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBvdXRzUyAqLworICAgIGNh c2UgMHg2ZToKKyAgICBjYXNlIDB4NmY6CisgICAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfcmVnIChJMzg2X0VTSV9SRUdOVU0pKQorCXsKKwkgIHJl dHVybiAoLTEpOworCX0KKyAgICAgIGlmIChwcmVmaXhlcyAmIChQUkVGSVhf UkVQWiB8IFBSRUZJWF9SRVBOWikpCisJeworCSAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX3JlZyAoSTM4Nl9FQ1hfUkVHTlVNKSkKKwkgICAgeworCSAg ICAgIHJldHVybiAoLTEpOworCSAgICB9CisJfQorICAgICAgYnJlYWs7CisK KyAgICAgIC8qIHNjYXNTICovCisgICAgY2FzZSAweGFlOgorICAgIGNhc2Ug MHhhZjoKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKEkz ODZfRURJX1JFR05VTSkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAg ICAgaWYgKHByZWZpeGVzICYgKFBSRUZJWF9SRVBaIHwgUFJFRklYX1JFUE5a KSkKKwl7CisJICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChJMzg2 X0VDWF9SRUdOVU0pKQorCSAgICB7CisJICAgICAgcmV0dXJuICgtMSk7CisJ ICAgIH0KKwl9CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVn IChJMzg2X0VGTEFHU19SRUdOVU0pKQorCXsKKwkgIHJldHVybiAoLTEpOwor CX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBjbXBzUyAqLworICAgIGNh c2UgMHhhNjoKKyAgICBjYXNlIDB4YTc6CisgICAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfcmVnIChJMzg2X0VESV9SRUdOVU0pKQorCXsKKwkgIHJl dHVybiAoLTEpOworCX0KKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9yZWcgKEkzODZfRVNJX1JFR05VTSkpCisJeworCSAgcmV0dXJuICgtMSk7 CisJfQorICAgICAgaWYgKHByZWZpeGVzICYgKFBSRUZJWF9SRVBaIHwgUFJF RklYX1JFUE5aKSkKKwl7CisJICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf cmVnIChJMzg2X0VDWF9SRUdOVU0pKQorCSAgICB7CisJICAgICAgcmV0dXJu ICgtMSk7CisJICAgIH0KKwl9CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfcmVnIChJMzg2X0VGTEFHU19SRUdOVU0pKQorCXsKKwkgIHJldHVy biAoLTEpOworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBwb3J0IEkv TyAqLworICAgIGNhc2UgMHhlNDoKKyAgICBjYXNlIDB4ZTU6CisgICAgY2Fz ZSAweGVjOgorICAgIGNhc2UgMHhlZDoKKyAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9yZWcgKEkzODZfRUFYX1JFR05VTSkpCisJeworCSAgcmV0 dXJuICgtMSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDB4ZTY6 CisgICAgY2FzZSAweGU3OgorICAgIGNhc2UgMHhlZToKKyAgICBjYXNlIDB4 ZWY6CisgICAgICBicmVhazsKKworICAgICAgLyogY29udHJvbCAqLworICAg ICAgLyogcmV0IGltICovCisgICAgY2FzZSAweGMyOgorICAgICAgLyogcmV0 ICovCisgICAgY2FzZSAweGMzOgorICAgICAgLyogbHJldCBpbSAqLworICAg IGNhc2UgMHhjYToKKyAgICAgIC8qIGxyZXQgKi8KKyAgICBjYXNlIDB4Y2I6 CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChJMzg2X0VT UF9SRUdOVU0pKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKEkzODZfQ1NfUkVHTlVNKSkK Kwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAg ICAgLyogaXJldCAqLworICAgIGNhc2UgMHhjZjoKKyAgICAgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9yZWcgKEkzODZfRVNQX1JFR05VTSkpCisJewor CSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgaWYgKHJlY29yZF9hcmNoX2xp c3RfYWRkX3JlZyAoSTM4Nl9DU19SRUdOVU0pKQorCXsKKwkgIHJldHVybiAo LTEpOworCX0KKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcg KEkzODZfRUZMQUdTX1JFR05VTSkpCisJeworCSAgcmV0dXJuICgtMSk7CisJ fQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIGNhbGwgaW0gKi8KKyAgICBj YXNlIDB4ZTg6CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVn IChJMzg2X0VTUF9SRUdOVU0pKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0K KyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkz ODZfRVNQX1JFR05VTSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwor ICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbQorCSAgKChDT1JF X0FERFIpIHRtcHUzMiAtICgxIDw8IChkZmxhZyArIDEpKSwgKDEgPDwgKGRm bGFnICsgMSkpKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBi cmVhazsKKworICAgICAgLyogbGNhbGwgaW0gKi8KKyAgICBjYXNlIDB4OWE6 CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChJMzg2X0NT X1JFR05VTSkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoSTM4Nl9FU1BfUkVHTlVNKSkK Kwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICByZWdjYWNoZV9yYXdf cmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2X0VTUF9SRUdOVU0sCisJCQkg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0KKwkgICgoQ09SRV9BRERSKSB0bXB1MzIgLSAoMSA8 PCAoZGZsYWcgKyAyKSksICgxIDw8IChkZmxhZyArIDIpKSkpCisJeworCSAg cmV0dXJuICgtMSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIGpt cCBpbSAqLworICAgIGNhc2UgMHhlOToKKyAgICAgIC8qIGxqbXAgaW0gKi8K KyAgICBjYXNlIDB4ZWE6CisgICAgICAvKiBqbXAgSmIgKi8KKyAgICBjYXNl IDB4ZWI6CisgICAgICAvKiBqY2MgSmIgKi8KKyAgICBjYXNlIDB4NzA6Cisg ICAgY2FzZSAweDcxOgorICAgIGNhc2UgMHg3MjoKKyAgICBjYXNlIDB4NzM6 CisgICAgY2FzZSAweDc0OgorICAgIGNhc2UgMHg3NToKKyAgICBjYXNlIDB4 NzY6CisgICAgY2FzZSAweDc3OgorICAgIGNhc2UgMHg3ODoKKyAgICBjYXNl IDB4Nzk6CisgICAgY2FzZSAweDdhOgorICAgIGNhc2UgMHg3YjoKKyAgICBj YXNlIDB4N2M6CisgICAgY2FzZSAweDdkOgorICAgIGNhc2UgMHg3ZToKKyAg ICBjYXNlIDB4N2Y6CisgICAgICAvKiBqY2MgSnYgKi8KKyAgICBjYXNlIDB4 MGY4MDoKKyAgICBjYXNlIDB4MGY4MToKKyAgICBjYXNlIDB4MGY4MjoKKyAg ICBjYXNlIDB4MGY4MzoKKyAgICBjYXNlIDB4MGY4NDoKKyAgICBjYXNlIDB4 MGY4NToKKyAgICBjYXNlIDB4MGY4NjoKKyAgICBjYXNlIDB4MGY4NzoKKyAg ICBjYXNlIDB4MGY4ODoKKyAgICBjYXNlIDB4MGY4OToKKyAgICBjYXNlIDB4 MGY4YToKKyAgICBjYXNlIDB4MGY4YjoKKyAgICBjYXNlIDB4MGY4YzoKKyAg ICBjYXNlIDB4MGY4ZDoKKyAgICBjYXNlIDB4MGY4ZToKKyAgICBjYXNlIDB4 MGY4ZjoKKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzZXRjYyBHdiAqLwor ICAgIGNhc2UgMHgwZjkwOgorICAgIGNhc2UgMHgwZjkxOgorICAgIGNhc2Ug MHgwZjkyOgorICAgIGNhc2UgMHgwZjkzOgorICAgIGNhc2UgMHgwZjk0Ogor ICAgIGNhc2UgMHgwZjk1OgorICAgIGNhc2UgMHgwZjk2OgorICAgIGNhc2Ug MHgwZjk3OgorICAgIGNhc2UgMHgwZjk4OgorICAgIGNhc2UgMHgwZjk5Ogor ICAgIGNhc2UgMHgwZjlhOgorICAgIGNhc2UgMHgwZjliOgorICAgIGNhc2Ug MHgwZjljOgorICAgIGNhc2UgMHgwZjlkOgorICAgIGNhc2UgMHgwZjllOgor ICAgIGNhc2UgMHgwZjlmOgorICAgICAgb3QgPSBPVF9CWVRFOworICAgICAg aWYgKGkzODZfcmVjb3JkX21vZHJtICgpKQorCXsKKwkgIHJldHVybiAoLTEp OworCX0KKyAgICAgIGlmIChtb2QgPT0gMykKKwl7CisJICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfcmVnIChybSAmIDB4MykpCisJICAgIHsKKwkgICAg ICByZXR1cm4gKC0xKTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisJ ICBpZiAoaTM4Nl9yZWNvcmRfbGVhX21vZHJtICgpKQorCSAgICB7CisJICAg ICAgcmV0dXJuICgtMSk7CisJICAgIH0KKwl9CisgICAgICBicmVhazsKKwor ICAgICAgLyogY21vdiBHdiwgRXYgKi8KKyAgICBjYXNlIDB4MGY0MDoKKyAg ICBjYXNlIDB4MGY0MToKKyAgICBjYXNlIDB4MGY0MjoKKyAgICBjYXNlIDB4 MGY0MzoKKyAgICBjYXNlIDB4MGY0NDoKKyAgICBjYXNlIDB4MGY0NToKKyAg ICBjYXNlIDB4MGY0NjoKKyAgICBjYXNlIDB4MGY0NzoKKyAgICBjYXNlIDB4 MGY0ODoKKyAgICBjYXNlIDB4MGY0OToKKyAgICBjYXNlIDB4MGY0YToKKyAg ICBjYXNlIDB4MGY0YjoKKyAgICBjYXNlIDB4MGY0YzoKKyAgICBjYXNlIDB4 MGY0ZDoKKyAgICBjYXNlIDB4MGY0ZToKKyAgICBjYXNlIDB4MGY0ZjoKKyAg ICAgIGlmIChpMzg2X3JlY29yZF9tb2RybSAoKSkKKwl7CisJICByZXR1cm4g KC0xKTsKKwl9CisgICAgICBpZiAoZGZsYWcgPT0gT1RfQllURSkKKwl7CisJ ICByZWcgJj0gMHgzOworCX0KKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9yZWcgKHJlZyAmIDB4MykpCisJeworCSAgcmV0dXJuICgtMSk7CisJ fQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIGZsYWdzICovCisgICAgICAv KiBwdXNoZiAqLworICAgIGNhc2UgMHg5YzoKKyAgICAgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9yZWcgKEkzODZfRVNQX1JFR05VTSkpCisJeworCSAg cmV0dXJuICgtMSk7CisJfQorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJl Y29yZF9yZWdjYWNoZSwgSTM4Nl9FU1BfUkVHTlVNLAorCQkJIChnZGJfYnl0 ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtCisJICAoKENPUkVfQUREUikgdG1wdTMyIC0gKDEgPDwgKGRmbGFn ICsgMSkpLCAoMSA8PCAoZGZsYWcgKyAxKSkpKQorCXsKKwkgIHJldHVybiAo LTEpOworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBwb3BmICovCisg ICAgY2FzZSAweDlkOgorICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRk X3JlZyAoSTM4Nl9FU1BfUkVHTlVNKSkKKwl7CisJICByZXR1cm4gKC0xKTsK Kwl9CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChJMzg2 X0VGTEFHU19SRUdOVU0pKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAg ICAgIGJyZWFrOworCisgICAgICAvKiBzYWhmICovCisgICAgY2FzZSAweDll OgorICAgICAgLyogY21jICovCisgICAgY2FzZSAweGY1OgorICAgICAgLyog Y2xjICovCisgICAgY2FzZSAweGY4OgorICAgICAgLyogc3RjICovCisgICAg Y2FzZSAweGY5OgorICAgICAgLyogY2xkICovCisgICAgY2FzZSAweGZjOgor ICAgICAgLyogc3RkICovCisgICAgY2FzZSAweGZkOgorICAgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoSTM4Nl9FRkxBR1NfUkVHTlVNKSkK Kwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAg ICAgLyogbGFoZiAqLworICAgIGNhc2UgMHg5ZjoKKyAgICAgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9yZWcgKEkzODZfRUFYX1JFR05VTSkpCisJewor CSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8q IGJpdCBvcGVyYXRpb25zICovCisgICAgICAvKiBidC9idHMvYnRyL2J0YyBH diwgaW0gKi8KKyAgICBjYXNlIDB4MGZiYToKKyAgICAgIC8qIGJ0cyAqLwor ICAgIGNhc2UgMHgwZmFiOgorICAgICAgLyogYnRyICovCisgICAgY2FzZSAw eDBmYjM6CisgICAgICAvKiBidGMgKi8KKyAgICBjYXNlIDB4MGZiYjoKKyAg ICAgIG90ID0gZGZsYWcgKyBPVF9XT1JEOworICAgICAgaWYgKGkzODZfcmVj b3JkX21vZHJtICgpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAg IGlmIChyZWcgPCA0KQorCXsKKwkgIGkzODZfcmVjb3JkX3BjIC09IDM7CisJ ICBvcGNvZGUgPSBvcGNvZGUgPDwgOCB8IG1vZHJtOworCSAgZ290byBub19z dXBwb3J0OworCX0KKyAgICAgIHJlZyAtPSA0OworICAgICAgaWYgKHJlZyAh PSAwKQorCXsKKwkgIGlmIChtb2QgIT0gMykKKwkgICAgeworCSAgICAgIGlm IChpMzg2X3JlY29yZF9sZWFfbW9kcm0gKCkpCisJCXsKKwkJICByZXR1cm4g KC0xKTsKKwkJfQorCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChybSkpCisJCXsKKwkJICBy ZXR1cm4gKC0xKTsKKwkJfQorCSAgICB9CisJfQorICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX3JlZyAoSTM4Nl9FRkxBR1NfUkVHTlVNKSkKKwl7 CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAgICAg LyogYnQgR3YsIEV2ICovCisgICAgY2FzZSAweDBmYTM6CisgICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChJMzg2X0VGTEFHU19SRUdOVU0p KQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFrOworCisg ICAgICAvKiBic2YgKi8KKyAgICBjYXNlIDB4MGZiYzoKKyAgICAgIC8qIGJz ciAqLworICAgIGNhc2UgMHgwZmJkOgorICAgICAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX3JlZyAocmVnKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9 CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChJMzg2X0VG TEFHU19SRUdOVU0pKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAg IGJyZWFrOworCisgICAgICAvKiBiY2QgKi8KKyAgICAgIC8qIGRhYSAqLwor ICAgIGNhc2UgMHgyNzoKKyAgICAgIC8qIGRhcyAqLworICAgIGNhc2UgMHgy ZjoKKyAgICAgIC8qIGFhYSAqLworICAgIGNhc2UgMHgzNzoKKyAgICAgIC8q IGFhcyAqLworICAgIGNhc2UgMHgzZjoKKyAgICAgIC8qIGFhbSAqLworICAg IGNhc2UgMHhkNDoKKyAgICAgIC8qIGFhZCAqLworICAgIGNhc2UgMHhkNToK KyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKEkzODZfRUFY X1JFR05VTSkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoSTM4Nl9FRkxBR1NfUkVHTlVN KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKwor ICAgICAgLyogbWlzYyAqLworICAgICAgLyogbm9wICovCisgICAgY2FzZSAw eDkwOgorICAgICAgaWYgKHByZWZpeGVzICYgUFJFRklYX0xPQ0spCisJewor CSAgaTM4Nl9yZWNvcmRfcGMgLT0gMTsKKwkgIGdvdG8gbm9fc3VwcG9ydDsK Kwl9CisgICAgICBicmVhazsKKworICAgICAgLyogZndhaXQgKi8KKyAgICAg IC8qIFhYWCAqLworICAgIGNhc2UgMHg5YjoKKyAgICAgIHByaW50Zl91bmZp bHRlcmVkIChfCisJCQkgKCJQcm9jZXNzIHJlY29yZCBkb2Vzbid0IHN1cHBv cnQgaW5zdHJ1Y3Rpb24gZndhaXQuXG4iKSk7CisgICAgICBpMzg2X3JlY29y ZF9wYyAtPSAxOworICAgICAgZ290byBub19zdXBwb3J0OworICAgICAgYnJl YWs7CisKKyAgICAgIC8qIGludDMgKi8KKyAgICAgIC8qIFhYWCAqLworICAg IGNhc2UgMHhjYzoKKyAgICAgIHByaW50Zl91bmZpbHRlcmVkIChfCisJCQkg KCJQcm9jZXNzIHJlY29yZCBkb2Vzbid0IHN1cHBvcnQgaW5zdHJ1Y3Rpb24g aW50My5cbiIpKTsKKyAgICAgIGkzODZfcmVjb3JkX3BjIC09IDE7CisgICAg ICBnb3RvIG5vX3N1cHBvcnQ7CisgICAgICBicmVhazsKKworICAgICAgLyog aW50ICovCisgICAgICAvKiBYWFggKi8KKyAgICBjYXNlIDB4Y2Q6CisgICAg ICB7CisJaW50IHJldDsKKwlpZiAodGFyZ2V0X3JlYWRfbWVtb3J5IChpMzg2 X3JlY29yZF9wYywgJnRtcHU4LCAxKSkKKwkgIHsKKwkgICAgaWYgKHJlY29y ZF9kZWJ1ZykKKwkgICAgICB7CisJCXByaW50Zl91bmZpbHRlcmVkIChfCisJ CQkJICAgKCJQcm9jZXNzIHJlY29yZDogZXJyb3IgcmVhZGluZyBtZW1vcnkg YXQgYWRkciAweCVzIGxlbiA9IDEuXG4iKSwKKwkJCQkgICBwYWRkcl9ueiAo aTM4Nl9yZWNvcmRfcGMpKTsKKwkgICAgICB9CisJICAgIHJldHVybiAoLTEp OworCSAgfQorCWkzODZfcmVjb3JkX3BjKys7CisJaWYgKHRtcHU4ICE9IDB4 ODAKKwkgICAgfHwgZ2RiYXJjaF90ZGVwIChnZGJhcmNoKS0+aTM4Nl9pbnR4 ODBfcmVjb3JkID09IE5VTEwpCisJICB7CisJICAgIHByaW50Zl91bmZpbHRl cmVkIChfCisJCQkgICAgICAgKCJQcm9jZXNzIHJlY29yZCBkb2Vzbid0IHN1 cHBvcnQgaW5zdHJ1Y3Rpb24gaW50IDB4JTAyeC5cbiIpLAorCQkJICAgICAg IHRtcHU4KTsKKwkgICAgaTM4Nl9yZWNvcmRfcGMgLT0gMjsKKwkgICAgZ290 byBub19zdXBwb3J0OworCSAgfQorCXJldCA9IGdkYmFyY2hfdGRlcCAoZ2Ri YXJjaCktPmkzODZfaW50eDgwX3JlY29yZCAoKTsKKwlpZiAocmV0KQorCSAg eworCSAgICByZXR1cm4gKHJldCk7CisJICB9CisgICAgICB9CisgICAgICBi cmVhazsKKworICAgICAgLyogaW50byAqLworICAgICAgLyogWFhYICovCisg ICAgY2FzZSAweGNlOgorICAgICAgcHJpbnRmX3VuZmlsdGVyZWQgKF8KKwkJ CSAoIlByb2Nlc3MgcmVjb3JkIGRvZXNuJ3Qgc3VwcG9ydCBpbnN0cnVjdGlv biBpbnRvLlxuIikpOworICAgICAgaTM4Nl9yZWNvcmRfcGMgLT0gMTsKKyAg ICAgIGdvdG8gbm9fc3VwcG9ydDsKKyAgICAgIGJyZWFrOworCisgICAgICAv KiBjbGkgKi8KKyAgICBjYXNlIDB4ZmE6CisgICAgICAvKiBzdGkgKi8KKyAg ICBjYXNlIDB4ZmI6CisgICAgICBicmVhazsKKworICAgICAgLyogYm91bmQg Ki8KKyAgICBjYXNlIDB4NjI6CisgICAgICBwcmludGZfdW5maWx0ZXJlZCAo XworCQkJICgiUHJvY2VzcyByZWNvcmQgZG9lc24ndCBzdXBwb3J0IGluc3Ry dWN0aW9uIGJvdW5kLlxuIikpOworICAgICAgaTM4Nl9yZWNvcmRfcGMgLT0g MTsKKyAgICAgIGdvdG8gbm9fc3VwcG9ydDsKKyAgICAgIGJyZWFrOworCisg ICAgICAvKiBic3dhcCByZWcgKi8KKyAgICBjYXNlIDB4MGZjODoKKyAgICBj YXNlIDB4MGZjOToKKyAgICBjYXNlIDB4MGZjYToKKyAgICBjYXNlIDB4MGZj YjoKKyAgICBjYXNlIDB4MGZjYzoKKyAgICBjYXNlIDB4MGZjZDoKKyAgICBj YXNlIDB4MGZjZToKKyAgICBjYXNlIDB4MGZjZjoKKyAgICAgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9yZWcgKG9wY29kZSAmIDcpKQorCXsKKwkgIHJl dHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzYWxj ICovCisgICAgY2FzZSAweGQ2OgorICAgICAgaWYgKHJlY29yZF9hcmNoX2xp c3RfYWRkX3JlZyAoSTM4Nl9FQVhfUkVHTlVNKSkKKwl7CisJICByZXR1cm4g KC0xKTsKKwl9CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVn IChJMzg2X0VGTEFHU19SRUdOVU0pKQorCXsKKwkgIHJldHVybiAoLTEpOwor CX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBsb29wbnogKi8KKyAgICBj YXNlIDB4ZTA6CisgICAgICAvKiBsb29weiAqLworICAgIGNhc2UgMHhlMToK KyAgICAgIC8qIGxvb3AgKi8KKyAgICBjYXNlIDB4ZTI6CisgICAgICAvKiBq ZWN4eiAqLworICAgIGNhc2UgMHhlMzoKKyAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9yZWcgKEkzODZfRUNYX1JFR05VTSkpCisJeworCSAgcmV0 dXJuICgtMSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHdybXNy ICovCisgICAgY2FzZSAweDBmMzA6CisgICAgICBwcmludGZfdW5maWx0ZXJl ZCAoXworCQkJICgiUHJvY2VzcyByZWNvcmQgZG9lc24ndCBzdXBwb3J0IGlu c3RydWN0aW9uIHdybXNyLlxuIikpOworICAgICAgaTM4Nl9yZWNvcmRfcGMg LT0gMjsKKyAgICAgIGdvdG8gbm9fc3VwcG9ydDsKKyAgICAgIGJyZWFrOwor CisgICAgICAvKiByZG1zciAqLworICAgIGNhc2UgMHgwZjMyOgorICAgICAg cHJpbnRmX3VuZmlsdGVyZWQgKF8KKwkJCSAoIlByb2Nlc3MgcmVjb3JkIGRv ZXNuJ3Qgc3VwcG9ydCBpbnN0cnVjdGlvbiByZG1zci5cbiIpKTsKKyAgICAg IGkzODZfcmVjb3JkX3BjIC09IDI7CisgICAgICBnb3RvIG5vX3N1cHBvcnQ7 CisgICAgICBicmVhazsKKworICAgICAgLyogcmR0c2MgKi8KKyAgICBjYXNl IDB4MGYzMToKKyAgICAgIHByaW50Zl91bmZpbHRlcmVkIChfCisJCQkgKCJQ cm9jZXNzIHJlY29yZCBkb2Vzbid0IHN1cHBvcnQgaW5zdHJ1Y3Rpb24gcmR0 c2MuXG4iKSk7CisgICAgICBpMzg2X3JlY29yZF9wYyAtPSAyOworICAgICAg Z290byBub19zdXBwb3J0OworICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5 c2VudGVyICovCisgICAgY2FzZSAweDBmMzQ6CisgICAgICB7CisJaW50IHJl dDsKKwlpZiAoZ2RiYXJjaF90ZGVwIChnZGJhcmNoKS0+aTM4Nl9zeXNlbnRl cl9yZWNvcmQgPT0gTlVMTCkKKwkgIHsKKwkgICAgcHJpbnRmX3VuZmlsdGVy ZWQgKF8KKwkJCSAgICAgICAoIlByb2Nlc3MgcmVjb3JkIGRvZXNuJ3Qgc3Vw cG9ydCBpbnN0cnVjdGlvbiBzeXNlbnRlci5cbiIpKTsKKwkgICAgaTM4Nl9y ZWNvcmRfcGMgLT0gMjsKKwkgICAgZ290byBub19zdXBwb3J0OworCSAgfQor CXJldCA9IGdkYmFyY2hfdGRlcCAoZ2RiYXJjaCktPmkzODZfc3lzZW50ZXJf cmVjb3JkICgpOworCWlmIChyZXQpCisJICB7CisJICAgIHJldHVybiAocmV0 KTsKKwkgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBz eXNleGl0ICovCisgICAgY2FzZSAweDBmMzU6CisgICAgICBwcmludGZfdW5m aWx0ZXJlZCAoXworCQkJICgiUHJvY2VzcyByZWNvcmQgZG9lc24ndCBzdXBw b3J0IGluc3RydWN0aW9uIHN5c2V4aXQuXG4iKSk7CisgICAgICBpMzg2X3Jl Y29yZF9wYyAtPSAyOworICAgICAgZ290byBub19zdXBwb3J0OworICAgICAg YnJlYWs7CisKKyAgICAgIC8qIGNwdWlkICovCisgICAgY2FzZSAweDBmYTI6 CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChJMzg2X0VB WF9SRUdOVU0pKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKEkzODZfRUNYX1JFR05VTSkp CisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX3JlZyAoSTM4Nl9FRFhfUkVHTlVNKSkKKwl7CisJICBy ZXR1cm4gKC0xKTsKKwl9CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfcmVnIChJMzg2X0VCWF9SRUdOVU0pKQorCXsKKwkgIHJldHVybiAoLTEp OworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBobHQgKi8KKyAgICBj YXNlIDB4ZjQ6CisgICAgICBwcmludGZfdW5maWx0ZXJlZCAoXworCQkJICgi UHJvY2VzcyByZWNvcmQgZG9lc24ndCBzdXBwb3J0IGluc3RydWN0aW9uIGhs dC5cbiIpKTsKKyAgICAgIGkzODZfcmVjb3JkX3BjIC09IDE7CisgICAgICBn b3RvIG5vX3N1cHBvcnQ7CisgICAgICBicmVhazsKKworICAgIGNhc2UgMHgw ZjAwOgorICAgICAgaWYgKGkzODZfcmVjb3JkX21vZHJtICgpKQorCXsKKwkg IHJldHVybiAoLTEpOworCX0KKyAgICAgIHN3aXRjaCAocmVnKQorCXsKKwkg IC8qIHNsZHQgKi8KKwljYXNlIDA6CisJICAvKiBzdHIgKi8KKwljYXNlIDE6 CisJICBpZiAobW9kID09IDMpCisJICAgIHsKKwkgICAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfcmVnIChybSkpCisJCXsKKwkJICByZXR1cm4gKC0x KTsKKwkJfQorCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBvdCA9 IE9UX1dPUkQ7CisJICAgICAgaWYgKGkzODZfcmVjb3JkX2xlYV9tb2RybSAo KSkKKwkJeworCQkgIHJldHVybiAoLTEpOworCQl9CisJICAgIH0KKwkgIGJy ZWFrOworCSAgLyogbGxkdCAqLworCWNhc2UgMjoKKwkgIC8qIGx0ciAqLwor CWNhc2UgMzoKKwkgIGJyZWFrOworCSAgLyogdmVyciAqLworCWNhc2UgNDoK KwkgIC8qIHZlcncgKi8KKwljYXNlIDU6CisJICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfcmVnIChJMzg2X0VGTEFHU19SRUdOVU0pKQorCSAgICB7CisJ ICAgICAgcmV0dXJuICgtMSk7CisJICAgIH0KKwkgIGJyZWFrOworCWRlZmF1 bHQ6CisJICBpMzg2X3JlY29yZF9wYyAtPSAzOworCSAgb3Bjb2RlID0gb3Bj b2RlIDw8IDggfCBtb2RybTsKKwkgIGdvdG8gbm9fc3VwcG9ydDsKKwkgIGJy ZWFrOworCX0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAweDBmMDE6Cisg ICAgICBpZiAoaTM4Nl9yZWNvcmRfbW9kcm0gKCkpCisJeworCSAgcmV0dXJu ICgtMSk7CisJfQorICAgICAgc3dpdGNoIChyZWcpCisJeworCSAgLyogc2dk dCAqLworCWNhc2UgMDoKKwkgIHsKKwkgICAgdWludDMyX3QgYWRkcjsKKwor CSAgICBpZiAobW9kID09IDMpCisJICAgICAgeworCQlpMzg2X3JlY29yZF9w YyAtPSAzOworCQlvcGNvZGUgPSBvcGNvZGUgPDwgOCB8IG1vZHJtOworCQln b3RvIG5vX3N1cHBvcnQ7CisJICAgICAgfQorCisJICAgIGlmIChvdmVycmlk ZSkKKwkgICAgICB7CisJCWlmIChyZWNvcmRfZGVidWcpCisJCSAgcHJpbnRm X3VuZmlsdGVyZWQgKF8KKwkJCQkgICAgICgiUHJvY2VzcyByZWNvcmQgaWdu b3JlcyB0aGUgbWVtb3J5IGNoYW5nZSBvZiBpbnN0cnVjdGlvbiBhdCBhZGRy ZXNzIDB4JXMgYmVjYXVzZSBpdCBjYW4ndCBnZXQgdGhlIHZhbHVlIG9mIHRo ZSBzZWdtZW50IHJlZ2lzdGVyLlxuIiksCisJCQkJICAgICBwYWRkcl9ueiAo aTM4Nl9yZWNvcmRfcGMpKTsKK2Vycm9yKCIzIik7CisJICAgICAgfQorCSAg ICBlbHNlCisJICAgICAgeworCQlpZiAoaTM4Nl9yZWNvcmRfbGVhX21vZHJt X2FkZHIgKCZhZGRyKSkKKwkJICB7CisJCSAgICByZXR1cm4gKC0xKTsKKwkJ ICB9CisJCWlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKGFkZHIsIDIp KQorCQkgIHsKKwkJICAgIHJldHVybiAoLTEpOworCQkgIH0KKwkJYWRkciAr PSAyOworCQlpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChhZGRyLCA0 KSkKKwkJICB7CisJCSAgICByZXR1cm4gKC0xKTsKKwkJICB9CisJICAgICAg fQorCSAgfQorCSAgYnJlYWs7CisJY2FzZSAxOgorCSAgaWYgKG1vZCA9PSAz KQorCSAgICB7CisJICAgICAgc3dpdGNoIChybSkKKwkJeworCQkgIC8qIG1v bml0b3IgKi8KKwkJY2FzZSAwOgorCQkgIGJyZWFrOworCQkgIC8qIG13YWl0 ICovCisJCWNhc2UgMToKKwkJICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf cmVnIChJMzg2X0VGTEFHU19SRUdOVU0pKQorCQkgICAgeworCQkgICAgICBy ZXR1cm4gKC0xKTsKKwkJICAgIH0KKwkJICBicmVhazsKKwkJZGVmYXVsdDoK KwkJICBpMzg2X3JlY29yZF9wYyAtPSAzOworCQkgIG9wY29kZSA9IG9wY29k ZSA8PCA4IHwgbW9kcm07CisJCSAgZ290byBub19zdXBwb3J0OworCQkgIGJy ZWFrOworCQl9CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIC8q IHNpZHQgKi8KKwkgICAgICBpZiAob3ZlcnJpZGUpCisJCXsKKwkJICBpZiAo cmVjb3JkX2RlYnVnKQorCQkgICAgcHJpbnRmX3VuZmlsdGVyZWQgKF8KKwkJ CQkgICAgICAgKCJQcm9jZXNzIHJlY29yZCBpZ25vcmVzIHRoZSBtZW1vcnkg Y2hhbmdlIG9mIGluc3RydWN0aW9uIGF0IGFkZHJlc3MgMHglcyBiZWNhdXNl IGl0IGNhbid0IGdldCB0aGUgdmFsdWUgb2YgdGhlIHNlZ21lbnQgcmVnaXN0 ZXIuXG4iKSwKKwkJCQkgICAgICAgcGFkZHJfbnogKGkzODZfcmVjb3JkX3Bj KSk7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICB1aW50MzJfdCBhZGRy OworCisJCSAgaWYgKGkzODZfcmVjb3JkX2xlYV9tb2RybV9hZGRyICgmYWRk cikpCisJCSAgICB7CisJCSAgICAgIHJldHVybiAoLTEpOworCQkgICAgfQor CQkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKGFkZHIsIDIpKQor CQkgICAgeworCQkgICAgICByZXR1cm4gKC0xKTsKKwkJICAgIH0KKwkJICBh ZGRyICs9IDI7CisJCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo YWRkciwgNCkpCisJCSAgICB7CisJCSAgICAgIHJldHVybiAoLTEpOworCQkg ICAgfQorCQl9CisJICAgIH0KKwkgIGJyZWFrOworCSAgLyogbGdkdCAqLwor CWNhc2UgMjoKKwkgIC8qIGxpZHQgKi8KKwljYXNlIDM6CisJICAvKiBpbnZs cGcgKi8KKwljYXNlIDc6CisJZGVmYXVsdDoKKwkgIGlmIChtb2QgPT0gMykK KwkgICAgeworCSAgICAgIGkzODZfcmVjb3JkX3BjIC09IDM7CisJICAgICAg b3Bjb2RlID0gb3Bjb2RlIDw8IDggfCBtb2RybTsKKwkgICAgICBnb3RvIG5v X3N1cHBvcnQ7CisJICAgIH0KKwkgIGJyZWFrOworCSAgLyogc21zdyAqLwor CWNhc2UgNDoKKwkgIGlmIChtb2QgPT0gMykKKwkgICAgeworCSAgICAgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKHJtKSkKKwkJeworCQkgIHJl dHVybiAoLTEpOworCQl9CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAg ICAgIG90ID0gT1RfV09SRDsKKwkgICAgICBpZiAoaTM4Nl9yZWNvcmRfbGVh X21vZHJtICgpKQorCQl7CisJCSAgcmV0dXJuICgtMSk7CisJCX0KKwkgICAg fQorCSAgYnJlYWs7CisJICAvKiBsbXN3ICovCisJY2FzZSA2OgorCSAgYnJl YWs7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIGludmQgKi8KKyAg ICBjYXNlIDB4MGYwODoKKyAgICAgIC8qIHdiaW52ZCAqLworICAgIGNhc2Ug MHgwZjA5OgorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIGFycGwgKi8KKyAg ICBjYXNlIDB4NjM6CisgICAgICBvdCA9IGRmbGFnID8gT1RfTE9ORyA6IE9U X1dPUkQ7CisgICAgICBpZiAoaTM4Nl9yZWNvcmRfbW9kcm0gKCkpCisJewor CSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgaWYgKG1vZCAhPSAzKQorCXsK KwkgIGlmIChpMzg2X3JlY29yZF9sZWFfbW9kcm0gKCkpCisJICAgIHsKKwkg ICAgICByZXR1cm4gKC0xKTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl7 CisJICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChybSkpCisJICAg IHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkgICAgfQorCX0KKyAgICAgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKEkzODZfRUZMQUdTX1JFR05V TSkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgYnJlYWs7CisK KyAgICAgIC8qIGxhciAqLworICAgIGNhc2UgMHgwZjAyOgorICAgICAgLyog bHNsICovCisgICAgY2FzZSAweDBmMDM6CisgICAgICBpZiAoaTM4Nl9yZWNv cmRfbW9kcm0gKCkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAocmVnKSkKKwl7CisJICBy ZXR1cm4gKC0xKTsKKwl9CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfcmVnIChJMzg2X0VGTEFHU19SRUdOVU0pKQorCXsKKwkgIHJldHVybiAo LTEpOworCX0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAweDBmMTg6Cisg ICAgICBicmVhazsKKworICAgICAgLyogbm9wIChtdWx0aSBieXRlKSAqLwor ICAgIGNhc2UgMHgwZjE5OgorICAgIGNhc2UgMHgwZjFhOgorICAgIGNhc2Ug MHgwZjFiOgorICAgIGNhc2UgMHgwZjFjOgorICAgIGNhc2UgMHgwZjFkOgor ICAgIGNhc2UgMHgwZjFlOgorICAgIGNhc2UgMHgwZjFmOgorICAgICAgYnJl YWs7CisKKyAgICAgIC8qIG1vdiByZWcsIGNyTiAqLworICAgIGNhc2UgMHgw ZjIwOgorICAgICAgLyogbW92IGNyTiwgcmVnICovCisgICAgY2FzZSAweDBm MjI6CisgICAgICBpZiAoaTM4Nl9yZWNvcmRfbW9kcm0gKCkpCisJeworCSAg cmV0dXJuICgtMSk7CisJfQorICAgICAgaWYgKChtb2RybSAmIDB4YzApICE9 IDB4YzApCisJeworCSAgaTM4Nl9yZWNvcmRfcGMgLT0gMjsKKwkgIG9wY29k ZSA9IG9wY29kZSA8PCA4IHwgbW9kcm07CisJICBnb3RvIG5vX3N1cHBvcnQ7 CisJfQorICAgICAgc3dpdGNoIChyZWcpCisJeworCWNhc2UgMDoKKwljYXNl IDI6CisJY2FzZSAzOgorCWNhc2UgNDoKKwljYXNlIDg6CisJICBpZiAob3Bj b2RlICYgMikKKwkgICAgeworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkg ICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChybSkpCisJCXsK KwkJICByZXR1cm4gKC0xKTsKKwkJfQorCSAgICB9CisJICBicmVhazsKKwlk ZWZhdWx0OgorCSAgaTM4Nl9yZWNvcmRfcGMgLT0gMjsKKwkgIG9wY29kZSA9 IG9wY29kZSA8PCA4IHwgbW9kcm07CisJICBnb3RvIG5vX3N1cHBvcnQ7CisJ ICBicmVhazsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogbW92IHJl ZywgZHJOICovCisgICAgY2FzZSAweDBmMjE6CisgICAgICAvKiBtb3YgZHJO LCByZWcgKi8KKyAgICBjYXNlIDB4MGYyMzoKKyAgICAgIGlmIChpMzg2X3Jl Y29yZF9tb2RybSAoKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAg ICBpZiAoKG1vZHJtICYgMHhjMCkgIT0gMHhjMCB8fCByZWcgPT0gNCB8fCBy ZWcgPT0gNSB8fCByZWcgPj0gOCkKKwl7CisJICBpMzg2X3JlY29yZF9wYyAt PSAyOworCSAgb3Bjb2RlID0gb3Bjb2RlIDw8IDggfCBtb2RybTsKKwkgIGdv dG8gbm9fc3VwcG9ydDsKKwl9CisgICAgICBpZiAob3Bjb2RlICYgMikKKwl7 CisJfQorICAgICAgZWxzZQorCXsKKwkgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9yZWcgKHJtKSkKKwkgICAgeworCSAgICAgIHJldHVybiAoLTEpOwor CSAgICB9CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIGNsdHMgKi8K KyAgICBjYXNlIDB4MGYwNjoKKyAgICAgIGJyZWFrOworCisgICAgICAvKiBN TVgvU1NFL1NTRTIvUE5JIHN1cHBvcnQgKi8KKyAgICAgIC8qIFhYWCAqLwor CisgICAgZGVmYXVsdDoKKyAgICAgIGlmIChvcGNvZGUgPiAweGZmKQorCXsK KwkgIGkzODZfcmVjb3JkX3BjIC09IDI7CisJfQorICAgICAgZWxzZQorCXsK KwkgIGkzODZfcmVjb3JkX3BjIC09IDE7CisJfQorICAgICAgZ290byBub19z dXBwb3J0OworICAgICAgYnJlYWs7CisgICAgfQorCisvKiBJbiB0aGUgZnV0 dXJlLCBNYXliZSBzdGlsbCBuZWVkIHRvIGRlYWwgd2l0aCBuZWVkX2Rhc20g Ki8KKyAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoSTM4Nl9FSVBf UkVHTlVNKSkKKyAgICB7CisgICAgICByZXR1cm4gKC0xKTsKKyAgICB9Cisg IGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9lbmQgKDApKQorICAgIHsKKyAg ICAgIHJldHVybiAoLTEpOworICAgIH0KKworICByZXR1cm4gKDApOworCitu b19zdXBwb3J0OgorICBwcmludGZfdW5maWx0ZXJlZCAoXworCQkgICAgICgi UHJvY2VzcyByZWNvcmQgZG9lc24ndCBzdXBwb3J0IGluc3RydWN0aW9uIDB4 JTAyeCBhdCBhZGRyZXNzIDB4JXMuXG4iKSwKKwkJICAgICAodW5zaWduZWQg aW50KSAob3Bjb2RlKSwgcGFkZHJfbnogKGkzODZfcmVjb3JkX3BjKSk7Cisg IHJldHVybiAoLTEpOworfQorCiAMCiBzdGF0aWMgc3RydWN0IGdkYmFyY2gg KgogaTM4Nl9nZGJhcmNoX2luaXQgKHN0cnVjdCBnZGJhcmNoX2luZm8gaW5m bywgc3RydWN0IGdkYmFyY2hfbGlzdCAqYXJjaGVzKQpAQCAtMjgyOSw2ICs1 NzkxLDggQEAgaTM4Nl9nZGJhcmNoX2luaXQgKHN0cnVjdCBnZGJhcmNoX2lu Zm8gaQogICBzZXRfZ2RiYXJjaF9za2lwX3Blcm1hbmVudF9icmVha3BvaW50 IChnZGJhcmNoLAogCQkJCQkgaTM4Nl9za2lwX3Blcm1hbmVudF9icmVha3Bv aW50KTsKIAorICBzZXRfZ2RiYXJjaF9wcm9jZXNzX3JlY29yZCAoZ2RiYXJj aCwgaTM4Nl9wcm9jZXNzX3JlY29yZCk7CisKICAgcmV0dXJuIGdkYmFyY2g7 CiB9CiAKLS0tIGEvaTM4Ni10ZGVwLmgKKysrIGIvaTM4Ni10ZGVwLmgKQEAg LTEwNiw2ICsxMDYsOSBAQCBzdHJ1Y3QgZ2RiYXJjaF90ZGVwCiAgIC8qIElT QS1zcGVjaWZpYyBkYXRhIHR5cGVzLiAgKi8KICAgc3RydWN0IHR5cGUgKmkz ODZfbW14X3R5cGU7CiAgIHN0cnVjdCB0eXBlICppMzg2X3NzZV90eXBlOwor CisgIGludCAoKmkzODZfaW50eDgwX3JlY29yZCkgKHZvaWQpOworICBpbnQg KCppMzg2X3N5c2VudGVyX3JlY29yZCkgKHZvaWQpOwogfTsKIAogLyogRmxv YXRpbmctcG9pbnQgcmVnaXN0ZXJzLiAgKi8K ------=_Part_40510_29180503.1226823857810--