/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469 * Ghidra 12.1.2 decompiler output for 0x1400ba400 FUN_1400ba400 * Pseudocode, not original source. */ ulonglong FUN_1400ba400(longlong *param_1,int param_2) { uint *puVar1; uint uVar2; char cVar3; int iVar4; uint uVar5; uint uVar6; undefined8 uVar7; byte bVar8; ushort uVar9; uint uVar10; uint uVar11; int iVar12; uint uVar13; longlong lVar14; uint *puVar15; uint uVar16; uint uVar17; uint *puVar18; ulonglong uVar19; undefined1 *puVar20; undefined1 *puVar21; uint uVar22; ulonglong uVar23; uint local_res18; uint local_res20; undefined2 local_68; undefined1 local_66; undefined1 local_65; undefined4 local_64; uint local_60; uint local_5c; undefined1 *local_58; if ((((param_1 == (longlong *)0x0) || (puVar1 = (uint *)param_1[5], puVar1 == (uint *)0x0)) || (param_1[2] == 0)) || ((*param_1 == 0 && ((int)param_1[1] != 0)))) { return 0xfffffffe; } uVar17 = *puVar1; uVar5 = puVar1[0x11]; uVar6 = puVar1[0x10]; if (uVar17 == 0xb) { uVar17 = 0xc; } *puVar1 = uVar17; uVar10 = *(uint *)(param_1 + 3); puVar20 = (undefined1 *)param_1[2]; uVar16 = *(uint *)(param_1 + 1); puVar15 = (uint *)*param_1; local_res18 = 0; local_res20 = uVar10; local_60 = uVar10; local_58 = puVar20; local_5c = uVar16; do { if (0x1e < uVar17) { return 0xfffffffe; } uVar23 = 0; uVar13 = 0; uVar11 = local_64; switch(uVar17) { case 0: if (puVar1[2] == 0) { *puVar1 = 0xc; } else { for (; uVar5 < 0x10; uVar5 = uVar5 + 8) { uVar2 = 0; if (uVar16 == 0) goto LAB_1400bac9a; uVar17 = *puVar15; uVar16 = uVar16 - 1; puVar15 = (uint *)((longlong)puVar15 + 1); uVar6 = uVar6 + ((uint)(byte)uVar17 << ((byte)uVar5 & 0x1f)); } if (((puVar1[2] & 2) == 0) || (uVar6 != 0x8b1f)) { puVar1[4] = 0; if (*(longlong *)(puVar1 + 8) != 0) { *(undefined4 *)(*(longlong *)(puVar1 + 8) + 0x40) = 0xffffffff; } if (((puVar1[2] & 1) == 0) || (uVar17 = (uVar6 & 0xff) * 0x100 + (uVar6 >> 8), uVar17 != (uVar17 / 0x1f) * 0x1f)) { param_1[4] = (longlong)"incorrect header check"; *puVar1 = 0x1d; } else { if (((byte)uVar6 & 0xf) != 8) goto LAB_1400ba59f; uVar5 = uVar5 - 4; uVar17 = (uVar6 >> 4 & 0xf) + 8; if (puVar1[10] == 0) { puVar1[10] = uVar17; } else if (puVar1[10] < uVar17) { param_1[4] = (longlong)"invalid window size"; *puVar1 = 0x1d; uVar6 = uVar6 >> 4; break; } puVar1[5] = 1 << (sbyte)uVar17; uVar17 = FUN_1400c1b80(0,(byte *)0x0,0); puVar1[6] = uVar17; *(uint *)((longlong)param_1 + 0x4c) = uVar17; uVar5 = 0; *puVar1 = ~(uVar6 >> 0xc) & 2 | 9; uVar6 = 0; puVar20 = local_58; uVar10 = local_res20; } } else { uVar17 = FUN_1400ba3f0(0,(uint *)0x0,0); puVar1[6] = uVar17; local_68 = 0x8b1f; uVar17 = FUN_1400ba0d0(uVar17,(uint *)&local_68,2); uVar6 = 0; uVar5 = 0; puVar1[6] = uVar17; *puVar1 = 1; puVar20 = local_58; uVar10 = local_res20; } } break; case 1: for (; uVar5 < 0x10; uVar5 = uVar5 + 8) { uVar2 = 0; if (uVar16 == 0) goto LAB_1400bac9a; uVar17 = *puVar15; uVar16 = uVar16 - 1; puVar15 = (uint *)((longlong)puVar15 + 1); uVar6 = uVar6 + ((uint)(byte)uVar17 << ((byte)uVar5 & 0x1f)); } puVar1[4] = uVar6; if ((char)uVar6 == '\b') { if ((uVar6 & 0xe000) == 0) { if (*(uint **)(puVar1 + 8) != (uint *)0x0) { **(uint **)(puVar1 + 8) = uVar6 >> 8 & 1; } if ((puVar1[4] & 0x200) != 0) { local_68 = (undefined2)uVar6; uVar17 = FUN_1400ba0d0(puVar1[6],(uint *)&local_68,2); puVar1[6] = uVar17; } *puVar1 = 2; uVar5 = uVar13; uVar6 = uVar13; do { uVar2 = 0; uVar11 = local_64; if (uVar16 == 0) goto LAB_1400bac9a; uVar10 = *puVar15; uVar17 = uVar5 + 8; uVar16 = uVar16 - 1; puVar15 = (uint *)((longlong)puVar15 + 1); uVar6 = uVar6 + ((uint)(byte)uVar10 << ((byte)uVar5 & 0x1f)); joined_r0x0001400ba6e6: uVar5 = uVar17; } while (uVar17 < 0x20); if (*(longlong *)(puVar1 + 8) != 0) { *(uint *)(*(longlong *)(puVar1 + 8) + 4) = uVar6; } if ((puVar1[4] & 0x200) != 0) { local_68 = (undefined2)uVar6; local_65 = (undefined1)(uVar6 >> 0x18); local_66 = (undefined1)(uVar6 >> 0x10); uVar17 = FUN_1400ba0d0(puVar1[6],(uint *)&local_68,4); puVar1[6] = uVar17; } *puVar1 = 3; uVar5 = uVar13; uVar6 = uVar13; do { uVar2 = 0; uVar11 = local_64; if (uVar16 == 0) goto LAB_1400bac9a; uVar10 = *puVar15; uVar17 = uVar5 + 8; uVar16 = uVar16 - 1; puVar15 = (uint *)((longlong)puVar15 + 1); uVar6 = uVar6 + ((uint)(byte)uVar10 << ((byte)uVar5 & 0x1f)); joined_r0x0001400ba767: uVar5 = uVar17; } while (uVar17 < 0x10); if (*(longlong *)(puVar1 + 8) != 0) { *(uint *)(*(longlong *)(puVar1 + 8) + 8) = uVar6 & 0xff; *(uint *)(*(longlong *)(puVar1 + 8) + 0xc) = uVar6 >> 8; } if ((puVar1[4] & 0x200) != 0) { local_68 = (undefined2)uVar6; uVar17 = FUN_1400ba0d0(puVar1[6],(uint *)&local_68,2); puVar1[6] = uVar17; } *puVar1 = 4; uVar5 = uVar13; uVar6 = uVar13; goto switchD_1400ba4c1_caseD_4; } param_1[4] = (longlong)"unknown header flags set"; *puVar1 = 0x1d; } else { LAB_1400ba59f: param_1[4] = (longlong)"unknown compression method"; *puVar1 = 0x1d; } break; case 2: uVar17 = uVar5; goto joined_r0x0001400ba6e6; case 3: uVar17 = uVar5; goto joined_r0x0001400ba767; case 4: switchD_1400ba4c1_caseD_4: if ((puVar1[4] & 0x400) == 0) { uVar17 = uVar6; if (*(longlong *)(puVar1 + 8) != 0) { *(undefined8 *)(*(longlong *)(puVar1 + 8) + 0x10) = 0; } } else { for (; uVar5 < 0x10; uVar5 = uVar5 + 8) { uVar2 = 0; uVar11 = local_64; if (uVar16 == 0) goto LAB_1400bac9a; uVar17 = *puVar15; uVar16 = uVar16 - 1; puVar15 = (uint *)((longlong)puVar15 + 1); uVar6 = uVar6 + ((uint)(byte)uVar17 << ((byte)uVar5 & 0x1f)); } puVar1[0x12] = uVar6; if (*(longlong *)(puVar1 + 8) != 0) { *(uint *)(*(longlong *)(puVar1 + 8) + 0x18) = uVar6; } uVar5 = uVar13; uVar17 = uVar13; if ((puVar1[4] & 0x200) != 0) { local_68 = (undefined2)uVar6; uVar6 = FUN_1400ba0d0(puVar1[6],(uint *)&local_68,2); puVar1[6] = uVar6; } } uVar6 = uVar17; *puVar1 = 5; case 5: if ((puVar1[4] & 0x400) == 0) { LAB_1400ba903: puVar1[0x12] = 0; *puVar1 = 6; switchD_1400ba4c1_caseD_6: if ((puVar1[4] & 0x800) == 0) { if (*(longlong *)(puVar1 + 8) != 0) { *(undefined8 *)(*(longlong *)(puVar1 + 8) + 0x20) = 0; } LAB_1400ba9ae: puVar1[0x12] = 0; *puVar1 = 7; switchD_1400ba4c1_caseD_7: uVar23 = 0; if ((puVar1[4] & 0x1000) == 0) { if (*(longlong *)(puVar1 + 8) != 0) { *(undefined8 *)(*(longlong *)(puVar1 + 8) + 0x30) = 0; } LAB_1400baa4e: *puVar1 = 8; puVar20 = local_58; uVar10 = local_res20; switchD_1400ba4c1_caseD_8: if ((puVar1[4] & 0x200) != 0) { for (; uVar5 < 0x10; uVar5 = uVar5 + 8) { uVar2 = 0; uVar11 = local_64; if (uVar16 == 0) goto LAB_1400bac9a; uVar17 = *puVar15; uVar16 = uVar16 - 1; puVar15 = (uint *)((longlong)puVar15 + 1); uVar6 = uVar6 + ((uint)(byte)uVar17 << ((byte)uVar5 & 0x1f)); } if (uVar6 != (ushort)puVar1[6]) { param_1[4] = (longlong)"header crc mismatch"; *puVar1 = 0x1d; break; } uVar5 = 0; uVar6 = uVar5; } if (*(longlong *)(puVar1 + 8) != 0) { *(uint *)(*(longlong *)(puVar1 + 8) + 0x3c) = (int)puVar1[4] >> 9 & 1; *(undefined4 *)(*(longlong *)(puVar1 + 8) + 0x40) = 1; } uVar17 = FUN_1400ba3f0(0,(uint *)0x0,0); puVar1[6] = uVar17; *(uint *)((longlong)param_1 + 0x4c) = uVar17; LAB_1400baae9: *puVar1 = 0xb; puVar20 = local_58; uVar10 = local_res20; break; } puVar18 = puVar15; uVar2 = uVar16; uVar11 = local_64; if (uVar16 != 0) { do { lVar14 = *(longlong *)(puVar1 + 8); cVar3 = (char)*puVar18; uVar17 = (int)uVar23 + 1; uVar23 = (ulonglong)uVar17; if (((lVar14 != 0) && (*(longlong *)(lVar14 + 0x30) != 0)) && (puVar1[0x12] < *(uint *)(lVar14 + 0x38))) { *(char *)((ulonglong)puVar1[0x12] + *(longlong *)(lVar14 + 0x30)) = cVar3; puVar1[0x12] = puVar1[0x12] + 1; } } while ((cVar3 != '\0') && (puVar18 = (uint *)((longlong)puVar18 + 1), uVar17 < uVar16) ); if ((puVar1[4] & 0x200) != 0) { if (puVar15 == (uint *)0x0) { uVar10 = 0; } else { uVar10 = FUN_1400ba0d0(puVar1[6],puVar15,uVar17); } puVar1[6] = uVar10; } uVar16 = uVar16 - uVar17; puVar15 = (uint *)((longlong)puVar15 + uVar23); uVar2 = uVar16; uVar11 = local_64; if (cVar3 == '\0') goto LAB_1400baa4e; } } else { puVar18 = puVar15; uVar2 = uVar16; uVar11 = local_64; if (uVar16 != 0) { do { lVar14 = *(longlong *)(puVar1 + 8); cVar3 = (char)*puVar18; uVar17 = (int)uVar23 + 1; uVar23 = (ulonglong)uVar17; if (((lVar14 != 0) && (*(longlong *)(lVar14 + 0x20) != 0)) && (puVar1[0x12] < *(uint *)(lVar14 + 0x28))) { *(char *)((ulonglong)puVar1[0x12] + *(longlong *)(lVar14 + 0x20)) = cVar3; puVar1[0x12] = puVar1[0x12] + 1; } } while ((cVar3 != '\0') && (puVar18 = (uint *)((longlong)puVar18 + 1), uVar17 < uVar16) ); if ((puVar1[4] & 0x200) != 0) { if (puVar15 == (uint *)0x0) { uVar10 = 0; } else { uVar10 = FUN_1400ba0d0(puVar1[6],puVar15,uVar17); } puVar1[6] = uVar10; } uVar16 = uVar16 - uVar17; puVar15 = (uint *)((longlong)puVar15 + uVar23); uVar2 = uVar16; uVar11 = local_64; if (cVar3 == '\0') goto LAB_1400ba9ae; } } } else { uVar17 = puVar1[0x12]; uVar10 = uVar17; if (uVar16 < uVar17) { uVar10 = uVar16; } if (uVar10 != 0) { lVar14 = *(longlong *)(puVar1 + 8); if ((lVar14 != 0) && (*(longlong *)(lVar14 + 0x10) != 0)) { uVar17 = *(int *)(lVar14 + 0x18) - uVar17; uVar11 = uVar10; if (*(uint *)(lVar14 + 0x1c) < uVar10 + uVar17) { uVar11 = *(uint *)(lVar14 + 0x1c) - uVar17; } memcpy((void *)((ulonglong)uVar17 + *(longlong *)(lVar14 + 0x10)),puVar15, (ulonglong)uVar11); } if ((puVar1[4] & 0x200) != 0) { if (puVar15 != (uint *)0x0) { uVar13 = FUN_1400ba0d0(puVar1[6],puVar15,uVar10); } puVar1[6] = uVar13; } uVar16 = uVar16 - uVar10; puVar15 = (uint *)((longlong)puVar15 + (ulonglong)uVar10); puVar1[0x12] = puVar1[0x12] - uVar10; } uVar2 = uVar16; uVar11 = local_64; if (puVar1[0x12] == 0) goto LAB_1400ba903; } LAB_1400bac9a: local_64 = uVar11; uVar16 = uVar2; uVar23 = (ulonglong)local_res18; LAB_1400bac9e: uVar17 = local_60; param_1[2] = (longlong)local_58; *param_1 = (longlong)puVar15; *(uint *)(param_1 + 3) = local_res20; *(uint *)(param_1 + 1) = uVar16; puVar1[0x11] = uVar5; puVar1[0x10] = uVar6; if (((puVar1[0xb] == 0) && ((0x19 < (int)*puVar1 || (local_60 == *(uint *)(param_1 + 3))))) || (uVar7 = FUN_1400b9f70((longlong)param_1,local_60), (int)uVar7 == 0)) { uVar17 = uVar17 - (int)param_1[3]; local_5c = local_5c - (int)param_1[1]; *(int *)((longlong)param_1 + 0x1c) = *(int *)((longlong)param_1 + 0x1c) + uVar17; *(int *)((longlong)param_1 + 0xc) = *(int *)((longlong)param_1 + 0xc) + local_5c; puVar1[7] = puVar1[7] + uVar17; if ((puVar1[2] != 0) && (uVar17 != 0)) { if (puVar1[4] == 0) { uVar6 = FUN_1400c1b80(puVar1[6],(byte *)(param_1[2] - (ulonglong)uVar17),uVar17); } else { puVar15 = (uint *)(param_1[2] - (ulonglong)uVar17); if (puVar15 == (uint *)0x0) { uVar6 = 0; } else { uVar6 = FUN_1400ba0d0(puVar1[6],puVar15,uVar17); } } puVar1[6] = uVar6; *(uint *)((longlong)param_1 + 0x4c) = uVar6; } uVar6 = *puVar1; if ((uVar6 == 0x13) || (uVar6 == 0xe)) { iVar12 = 0x100; } else { iVar12 = 0; } iVar4 = 0; if (uVar6 == 0xb) { iVar4 = 0x80; } *(uint *)(param_1 + 9) = iVar4 + iVar12 + (-(uint)(puVar1[1] != 0) & 0x40) + puVar1[0x11]; if (((local_5c != 0) || (uVar17 != 0)) && (param_2 != 4)) { return uVar23; } if ((int)uVar23 != 0) { return uVar23; } return 0xfffffffb; } *puVar1 = 0x1e; LAB_1400bacf9: return 0xfffffffc; case 6: goto switchD_1400ba4c1_caseD_6; case 7: goto switchD_1400ba4c1_caseD_7; case 8: goto switchD_1400ba4c1_caseD_8; case 9: for (; uVar5 < 0x20; uVar5 = uVar5 + 8) { uVar2 = 0; if (uVar16 == 0) goto LAB_1400bac9a; uVar17 = *puVar15; uVar16 = uVar16 - 1; puVar15 = (uint *)((longlong)puVar15 + 1); uVar6 = uVar6 + ((uint)(byte)uVar17 << ((byte)uVar5 & 0x1f)); } uVar17 = (uVar6 >> 8 & 0xff00) + ((uVar6 & 0xff00) + uVar6 * 0x10000) * 0x100 + (uVar6 >> 0x18); puVar1[6] = uVar17; *(uint *)((longlong)param_1 + 0x4c) = uVar17; *puVar1 = 10; uVar5 = uVar13; uVar6 = uVar13; case 10: if (puVar1[3] == 0) { param_1[2] = (longlong)puVar20; *(uint *)(param_1 + 3) = uVar10; *param_1 = (longlong)puVar15; *(uint *)(param_1 + 1) = uVar16; puVar1[0x10] = uVar6; puVar1[0x11] = uVar5; return 2; } uVar17 = FUN_1400c1b80(0,(byte *)0x0,0); puVar1[6] = uVar17; *(uint *)((longlong)param_1 + 0x4c) = uVar17; *puVar1 = 0xb; puVar20 = local_58; uVar10 = local_res20; switchD_1400ba4c1_caseD_b: uVar2 = uVar16; uVar11 = local_64; if ((param_2 != 5) && (param_2 != 6)) { switchD_1400ba4c1_caseD_c: if (puVar1[1] == 0) { for (; uVar11 = local_64, uVar5 < 3; uVar5 = uVar5 + 8) { uVar2 = 0; if (uVar16 == 0) goto LAB_1400bac9a; uVar17 = *puVar15; uVar16 = uVar16 - 1; puVar15 = (uint *)((longlong)puVar15 + 1); uVar6 = uVar6 + ((uint)(byte)uVar17 << ((byte)uVar5 & 0x1f)); } puVar1[1] = uVar6 & 1; uVar17 = uVar6 >> 1 & 3; if (uVar17 == 0) { *puVar1 = 0xd; } else { if (uVar17 != 1) { if (uVar17 == 2) { *puVar1 = 0x10; uVar5 = uVar5 - 3; uVar6 = uVar6 >> 3; } else { if (uVar17 != 3) goto LAB_1400bad25; uVar5 = uVar5 - 3; param_1[4] = (longlong)"invalid block type"; *puVar1 = 0x1d; uVar6 = uVar6 >> 3; } break; } puVar1[0x1a] = 9; puVar1[0x1b] = 5; *(undefined **)(puVar1 + 0x16) = &DAT_14010d2f0; *puVar1 = 0x13; *(undefined **)(puVar1 + 0x18) = &DAT_14010daf0; if (param_2 == 6) { uVar6 = uVar6 >> 3; uVar5 = uVar5 - 3; uVar2 = uVar16; goto LAB_1400bac9a; } } LAB_1400bad25: uVar5 = uVar5 - 3; uVar6 = uVar6 >> 3; } else { *puVar1 = 0x1a; uVar17 = uVar5 & 7; uVar5 = uVar5 - uVar17; uVar6 = uVar6 >> (sbyte)uVar17; } break; } goto LAB_1400bac9a; case 0xb: goto switchD_1400ba4c1_caseD_b; case 0xc: goto switchD_1400ba4c1_caseD_c; case 0xd: uVar6 = uVar6 >> (sbyte)(uVar5 & 7); for (uVar5 = uVar5 - (uVar5 & 7); uVar5 < 0x20; uVar5 = uVar5 + 8) { uVar2 = 0; if (uVar16 == 0) goto LAB_1400bac9a; uVar17 = *puVar15; uVar16 = uVar16 - 1; puVar15 = (uint *)((longlong)puVar15 + 1); uVar6 = uVar6 + ((uint)(byte)uVar17 << ((byte)uVar5 & 0x1f)); } if ((uVar6 & 0xffff) == ~uVar6 >> 0x10) { puVar1[0x12] = uVar6 & 0xffff; *puVar1 = 0xe; uVar5 = uVar13; uVar6 = uVar13; uVar2 = uVar16; if (param_2 == 6) goto LAB_1400bac9a; goto switchD_1400ba4c1_caseD_e; } param_1[4] = (longlong)"invalid stored block lengths"; *puVar1 = 0x1d; break; case 0xe: switchD_1400ba4c1_caseD_e: *puVar1 = 0xf; case 0xf: uVar17 = puVar1[0x12]; if (uVar17 == 0) { *puVar1 = 0xb; break; } if (uVar16 < uVar17) { uVar17 = uVar16; } if (uVar10 < uVar17) { uVar17 = uVar10; } uVar23 = (ulonglong)uVar17; uVar2 = uVar16; if (uVar17 != 0) { memcpy(puVar20,puVar15,uVar23); local_res20 = local_res20 - uVar17; puVar15 = (uint *)((longlong)puVar15 + uVar23); local_58 = local_58 + uVar23; uVar16 = uVar16 - uVar17; puVar1[0x12] = puVar1[0x12] - uVar17; puVar20 = local_58; uVar10 = local_res20; break; } goto LAB_1400bac9a; case 0x10: for (; uVar5 < 0xe; uVar5 = uVar5 + 8) { uVar2 = 0; if (uVar16 == 0) goto LAB_1400bac9a; uVar17 = *puVar15; uVar16 = uVar16 - 1; puVar15 = (uint *)((longlong)puVar15 + 1); uVar6 = uVar6 + ((uint)(byte)uVar17 << ((byte)uVar5 & 0x1f)); } uVar5 = uVar5 - 0xe; uVar22 = uVar6 >> 10; uVar17 = (uVar6 & 0x1f) + 0x101; uVar13 = (uVar6 >> 5 & 0x1f) + 1; uVar6 = uVar6 >> 0xe; puVar1[0x1d] = uVar17; puVar1[0x1e] = uVar13; puVar1[0x1c] = (uVar22 & 0xf) + 4; if ((uVar17 < 0x11f) && (uVar13 < 0x1f)) { puVar1[0x1f] = 0; *puVar1 = 0x11; goto switchD_1400ba4c1_caseD_11; } param_1[4] = (longlong)"too many length or distance symbols"; *puVar1 = 0x1d; break; case 0x11: switchD_1400ba4c1_caseD_11: if (puVar1[0x1f] < puVar1[0x1c]) { do { for (; uVar5 < 3; uVar5 = uVar5 + 8) { uVar2 = 0; if (uVar16 == 0) goto LAB_1400bac9a; uVar17 = *puVar15; uVar16 = uVar16 - 1; puVar15 = (uint *)((longlong)puVar15 + 1); uVar6 = uVar6 + ((uint)(byte)uVar17 << ((byte)uVar5 & 0x1f)); } uVar5 = uVar5 - 3; uVar9 = (ushort)uVar6; uVar6 = uVar6 >> 3; *(ushort *) ((longlong)puVar1 + (ulonglong)*(ushort *)(&DAT_14010db70 + (ulonglong)puVar1[0x1f] * 2) * 2 + 0x88) = uVar9 & 7; puVar1[0x1f] = puVar1[0x1f] + 1; } while (puVar1[0x1f] < puVar1[0x1c]); } uVar17 = puVar1[0x1f]; while (uVar17 < 0x13) { *(undefined2 *) ((longlong)puVar1 + (ulonglong)*(ushort *)(&DAT_14010db70 + (ulonglong)puVar1[0x1f] * 2) * 2 + 0x88) = 0; puVar1[0x1f] = puVar1[0x1f] + 1; uVar17 = puVar1[0x1f]; } *(uint **)(puVar1 + 0x20) = puVar1 + 0x152; *(uint **)(puVar1 + 0x16) = puVar1 + 0x152; puVar1[0x1a] = 7; uVar7 = FUN_1400c5ab0(0,(ushort *)(puVar1 + 0x22),0x13,(longlong *)(puVar1 + 0x20), puVar1 + 0x1a,(undefined *)(puVar1 + 0xc2)); local_res18 = (uint)uVar7; if (local_res18 == 0) { puVar1[0x1f] = 0; *puVar1 = 0x12; uVar10 = local_res20; goto switchD_1400ba4c1_caseD_12; } param_1[4] = (longlong)"invalid code lengths set"; *puVar1 = 0x1d; puVar20 = local_58; uVar10 = local_res20; break; case 0x12: switchD_1400ba4c1_caseD_12: puVar20 = local_58; if (puVar1[0x1f] < puVar1[0x1e] + puVar1[0x1d]) { do { uVar11 = *(uint *)(*(longlong *)(puVar1 + 0x16) + (ulonglong)((1 << ((byte)puVar1[0x1a] & 0x1f)) - 1U & uVar6) * 4); uVar17 = uVar5; local_64 = uVar11; if (uVar5 < (uVar11 >> 8 & 0xff)) { do { uVar5 = uVar17; uVar2 = 0; uVar11 = local_64; if (uVar16 == 0) goto LAB_1400bac9a; uVar5 = uVar17 + 8; uVar16 = uVar16 - 1; uVar6 = uVar6 + ((uint)(byte)*puVar15 << ((byte)uVar17 & 0x1f)); puVar15 = (uint *)((longlong)puVar15 + 1); uVar11 = *(uint *)(*(longlong *)(puVar1 + 0x16) + (ulonglong)((1 << ((byte)puVar1[0x1a] & 0x1f)) - 1U & uVar6) * 4); uVar17 = uVar5; local_64 = uVar11; } while (uVar5 < (uVar11 >> 8 & 0xff)); } uVar9 = (ushort)(uVar11 >> 0x10); local_64._1_1_ = (byte)(uVar11 >> 8); local_64 = uVar11; if (0xf < uVar9) { if (uVar9 == 0x10) { for (; uVar5 < local_64._1_1_ + 2; uVar5 = uVar5 + 8) { uVar2 = 0; if (uVar16 == 0) goto LAB_1400bac9a; uVar17 = *puVar15; uVar16 = uVar16 - 1; puVar15 = (uint *)((longlong)puVar15 + 1); uVar6 = uVar6 + ((uint)(byte)uVar17 << ((byte)uVar5 & 0x1f)); } uVar5 = uVar5 - local_64._1_1_; uVar6 = uVar6 >> (local_64._1_1_ & 0x1f); if (puVar1[0x1f] != 0) { iVar12 = (uVar6 & 3) + 3; uVar5 = uVar5 - 2; uVar19 = (ulonglong) *(ushort *)((longlong)puVar1 + (ulonglong)(puVar1[0x1f] - 1) * 2 + 0x88); uVar6 = uVar6 >> 2; goto LAB_1400bb1a0; } } else { if (uVar9 == 0x11) { for (; uVar5 < local_64._1_1_ + 3; uVar5 = uVar5 + 8) { uVar2 = 0; if (uVar16 == 0) goto LAB_1400bac9a; uVar17 = *puVar15; uVar16 = uVar16 - 1; puVar15 = (uint *)((longlong)puVar15 + 1); uVar6 = uVar6 + ((uint)(byte)uVar17 << ((byte)uVar5 & 0x1f)); } iVar4 = -3; uVar6 = uVar6 >> (local_64._1_1_ & 0x1f); iVar12 = (uVar6 & 7) + 3; uVar6 = uVar6 >> 3; } else { for (; uVar5 < local_64._1_1_ + 7; uVar5 = uVar5 + 8) { uVar2 = 0; if (uVar16 == 0) goto LAB_1400bac9a; uVar17 = *puVar15; uVar16 = uVar16 - 1; puVar15 = (uint *)((longlong)puVar15 + 1); uVar6 = uVar6 + ((uint)(byte)uVar17 << ((byte)uVar5 & 0x1f)); } iVar4 = -7; uVar6 = uVar6 >> (local_64._1_1_ & 0x1f); iVar12 = (uVar6 & 0x7f) + 0xb; uVar6 = uVar6 >> 7; } uVar5 = uVar5 + (iVar4 - (uint)local_64._1_1_); uVar19 = uVar23; LAB_1400bb1a0: if (iVar12 + puVar1[0x1f] <= puVar1[0x1e] + puVar1[0x1d]) { for (; iVar12 != 0; iVar12 = iVar12 + -1) { *(short *)((longlong)puVar1 + (ulonglong)puVar1[0x1f] * 2 + 0x88) = (short)uVar19; puVar1[0x1f] = puVar1[0x1f] + 1; } goto LAB_1400bb1d5; } } param_1[4] = (longlong)"invalid bit length repeat"; *puVar1 = 0x1d; goto LAB_1400baaf8; } uVar17 = uVar5; if (uVar5 < (uVar11 >> 8 & 0xff)) { do { uVar5 = uVar17; uVar2 = 0; if (uVar16 == 0) goto LAB_1400bac9a; uVar13 = *puVar15; uVar5 = uVar17 + 8; uVar16 = uVar16 - 1; puVar15 = (uint *)((longlong)puVar15 + 1); uVar6 = uVar6 + ((uint)(byte)uVar13 << ((byte)uVar17 & 0x1f)); uVar17 = uVar5; } while (uVar5 < local_64._1_1_); } uVar6 = uVar6 >> (local_64._1_1_ & 0x1f); uVar5 = uVar5 - local_64._1_1_; *(ushort *)((longlong)puVar1 + (ulonglong)puVar1[0x1f] * 2 + 0x88) = uVar9; puVar1[0x1f] = puVar1[0x1f] + 1; LAB_1400bb1d5: } while (puVar1[0x1f] < puVar1[0x1e] + puVar1[0x1d]); } if (*puVar1 != 0x1d) { if ((short)puVar1[0xa2] == 0) { param_1[4] = (longlong)"invalid code -- missing end-of-block"; *puVar1 = 0x1d; } else { *(uint **)(puVar1 + 0x20) = puVar1 + 0x152; *(uint **)(puVar1 + 0x16) = puVar1 + 0x152; puVar1[0x1a] = 9; uVar7 = FUN_1400c5ab0(1,(ushort *)(puVar1 + 0x22),puVar1[0x1d],(longlong *)(puVar1 + 0x20) ,puVar1 + 0x1a,(undefined *)(puVar1 + 0xc2)); local_res18 = (uint)uVar7; if (local_res18 == 0) { *(undefined8 *)(puVar1 + 0x18) = *(undefined8 *)(puVar1 + 0x20); puVar1[0x1b] = 6; uVar23 = FUN_1400c5ab0(2,(ushort *) ((longlong)puVar1 + (ulonglong)puVar1[0x1d] * 2 + 0x88), puVar1[0x1e],(longlong *)(puVar1 + 0x20),puVar1 + 0x1b, (undefined *)(puVar1 + 0xc2)); local_res18 = (uint)uVar23; uVar23 = uVar23 & 0xffffffff; puVar20 = local_58; if (local_res18 == 0) { *puVar1 = 0x13; uVar10 = local_res20; if (param_2 != 6) goto switchD_1400ba4c1_caseD_13; goto LAB_1400bac9e; } param_1[4] = (longlong)"invalid distances set"; *puVar1 = 0x1d; uVar10 = local_res20; } else { param_1[4] = (longlong)"invalid literal/lengths set"; *puVar1 = 0x1d; puVar20 = local_58; uVar10 = local_res20; } } } break; case 0x13: switchD_1400ba4c1_caseD_13: *puVar1 = 0x14; case 0x14: if ((5 < uVar16) && (0x101 < uVar10)) { param_1[2] = (longlong)puVar20; *(uint *)(param_1 + 3) = uVar10; *param_1 = (longlong)puVar15; *(uint *)(param_1 + 1) = uVar16; puVar1[0x10] = uVar6; puVar1[0x11] = uVar5; FUN_1400c42d0(param_1,local_60); local_58 = (undefined1 *)param_1[2]; local_res20 = *(uint *)(param_1 + 3); puVar15 = (uint *)*param_1; uVar16 = *(uint *)(param_1 + 1); uVar5 = puVar1[0x11]; puVar20 = local_58; uVar6 = puVar1[0x10]; uVar10 = local_res20; if (*puVar1 == 0xb) { puVar1[0x6f7] = 0xffffffff; } break; } puVar1[0x6f7] = 0; uVar11 = *(uint *)(*(longlong *)(puVar1 + 0x16) + (ulonglong)((1 << ((byte)puVar1[0x1a] & 0x1f)) - 1U & uVar6) * 4); uVar17 = uVar5; if (uVar5 < (uVar11 >> 8 & 0xff)) { do { uVar5 = uVar17; uVar2 = 0; uVar11 = local_64; if (uVar16 == 0) goto LAB_1400bac9a; uVar5 = uVar17 + 8; uVar16 = uVar16 - 1; uVar6 = uVar6 + ((uint)(byte)*puVar15 << ((byte)uVar17 & 0x1f)); puVar15 = (uint *)((longlong)puVar15 + 1); uVar11 = *(uint *)(*(longlong *)(puVar1 + 0x16) + (ulonglong)((1 << ((byte)puVar1[0x1a] & 0x1f)) - 1U & uVar6) * 4); uVar17 = uVar5; } while (uVar5 < (uVar11 >> 8 & 0xff)); } cVar3 = (char)uVar11; uVar17 = uVar11; if ((cVar3 != '\0') && ((uVar11 & 0xf0) == 0)) { bVar8 = (byte)(uVar11 >> 8); uVar17 = *(uint *)(*(longlong *)(puVar1 + 0x16) + (ulonglong) ((((1 << (cVar3 + bVar8 & 0x1f)) - 1U & uVar6) >> (bVar8 & 0x1f)) + (uVar11 >> 0x10)) * 4); if (uVar5 < (uVar17 >> 8 & 0xff) + (uVar11 >> 8 & 0xff)) { do { uVar2 = 0; if (uVar16 == 0) goto LAB_1400bac9a; uVar6 = uVar6 + ((uint)(byte)*puVar15 << ((byte)uVar5 & 0x1f)); uVar5 = uVar5 + 8; uVar16 = uVar16 - 1; puVar15 = (uint *)((longlong)puVar15 + 1); uVar17 = *(uint *)(*(longlong *)(puVar1 + 0x16) + (ulonglong) ((((1 << (cVar3 + bVar8 & 0x1f)) - 1U & uVar6) >> (bVar8 & 0x1f)) + (uVar11 >> 0x10)) * 4); } while (uVar5 < (uVar17 >> 8 & 0xff) + (uint)bVar8); } uVar6 = uVar6 >> (bVar8 & 0x1f); uVar5 = uVar5 - bVar8; puVar1[0x6f7] = (uint)bVar8; local_64 = uVar11; } uVar10 = uVar17 >> 8 & 0xff; puVar1[0x6f7] = puVar1[0x6f7] + uVar10; uVar6 = uVar6 >> ((byte)(uVar17 >> 8) & 0x1f); uVar5 = uVar5 - uVar10; puVar1[0x12] = uVar17 >> 0x10; puVar20 = local_58; if ((char)uVar17 == '\0') { *puVar1 = 0x19; uVar10 = local_res20; break; } if ((uVar17 & 0x20) != 0) { puVar1[0x6f7] = 0xffffffff; goto LAB_1400baae9; } if ((uVar17 & 0x40) != 0) { param_1[4] = (longlong)"invalid literal/length code"; *puVar1 = 0x1d; uVar10 = local_res20; break; } *puVar1 = 0x15; puVar1[0x14] = uVar17 & 0xf; switchD_1400ba4c1_caseD_15: uVar17 = puVar1[0x14]; if (uVar17 != 0) { uVar10 = uVar5; if (uVar5 < uVar17) { do { uVar2 = 0; uVar11 = local_64; if (uVar16 == 0) goto LAB_1400bac9a; uVar11 = *puVar15; uVar10 = uVar5 + 8; uVar16 = uVar16 - 1; puVar15 = (uint *)((longlong)puVar15 + 1); uVar6 = uVar6 + ((uint)(byte)uVar11 << ((byte)uVar5 & 0x1f)); uVar5 = uVar10; } while (uVar10 < puVar1[0x14]); } uVar5 = uVar10 - uVar17; uVar10 = (1 << ((byte)uVar17 & 0x1f)) - 1U & uVar6; uVar6 = uVar6 >> ((byte)uVar17 & 0x1f); puVar1[0x12] = puVar1[0x12] + uVar10; puVar1[0x6f7] = puVar1[0x6f7] + uVar17; } *puVar1 = 0x16; puVar1[0x6f8] = puVar1[0x12]; switchD_1400ba4c1_caseD_16: uVar11 = *(uint *)(*(longlong *)(puVar1 + 0x18) + (ulonglong)((1 << ((byte)puVar1[0x1b] & 0x1f)) - 1U & uVar6) * 4); uVar17 = uVar5; if (uVar5 < (uVar11 >> 8 & 0xff)) { do { uVar5 = uVar17; uVar2 = 0; uVar11 = local_64; if (uVar16 == 0) goto LAB_1400bac9a; uVar5 = uVar17 + 8; uVar16 = uVar16 - 1; uVar6 = uVar6 + ((uint)(byte)*puVar15 << ((byte)uVar17 & 0x1f)); puVar15 = (uint *)((longlong)puVar15 + 1); uVar11 = *(uint *)(*(longlong *)(puVar1 + 0x18) + (ulonglong)((1 << ((byte)puVar1[0x1b] & 0x1f)) - 1U & uVar6) * 4); uVar17 = uVar5; } while (uVar5 < (uVar11 >> 8 & 0xff)); } uVar17 = uVar11; if ((uVar11 & 0xf0) == 0) { bVar8 = (byte)(uVar11 >> 8); uVar17 = *(uint *)(*(longlong *)(puVar1 + 0x18) + (ulonglong) ((((1 << ((char)uVar11 + bVar8 & 0x1f)) - 1U & uVar6) >> (bVar8 & 0x1f)) + (uVar11 >> 0x10)) * 4); if (uVar5 < (uVar17 >> 8 & 0xff) + (uVar11 >> 8 & 0xff)) { do { uVar2 = 0; if (uVar16 == 0) goto LAB_1400bac9a; uVar6 = uVar6 + ((uint)(byte)*puVar15 << ((byte)uVar5 & 0x1f)); uVar5 = uVar5 + 8; uVar16 = uVar16 - 1; puVar15 = (uint *)((longlong)puVar15 + 1); uVar17 = *(uint *)(*(longlong *)(puVar1 + 0x18) + (ulonglong) ((((1 << ((char)uVar11 + bVar8 & 0x1f)) - 1U & uVar6) >> (bVar8 & 0x1f)) + (uVar11 >> 0x10)) * 4); } while (uVar5 < (uVar17 >> 8 & 0xff) + (uint)bVar8); } uVar6 = uVar6 >> (bVar8 & 0x1f); uVar5 = uVar5 - bVar8; puVar1[0x6f7] = puVar1[0x6f7] + (uint)bVar8; local_64 = uVar11; } uVar10 = uVar17 >> 8 & 0xff; puVar1[0x6f7] = puVar1[0x6f7] + uVar10; uVar6 = uVar6 >> ((byte)(uVar17 >> 8) & 0x1f); uVar5 = uVar5 - uVar10; puVar20 = local_58; if ((uVar17 & 0x40) != 0) { param_1[4] = (longlong)"invalid distance code"; *puVar1 = 0x1d; uVar10 = local_res20; break; } *puVar1 = 0x17; puVar1[0x13] = uVar17 >> 0x10; puVar1[0x14] = uVar17 & 0xf; uVar10 = local_res20; switchD_1400ba4c1_caseD_17: uVar17 = puVar1[0x14]; if (uVar17 != 0) { uVar13 = uVar5; if (uVar5 < uVar17) { do { uVar5 = uVar13; uVar2 = 0; uVar11 = local_64; if (uVar16 == 0) goto LAB_1400bac9a; uVar11 = *puVar15; uVar5 = uVar13 + 8; uVar16 = uVar16 - 1; puVar15 = (uint *)((longlong)puVar15 + 1); uVar6 = uVar6 + ((uint)(byte)uVar11 << ((byte)uVar13 & 0x1f)); uVar13 = uVar5; } while (uVar5 < puVar1[0x14]); } uVar5 = uVar5 - uVar17; uVar11 = (1 << ((byte)uVar17 & 0x1f)) - 1U & uVar6; uVar6 = uVar6 >> ((byte)uVar17 & 0x1f); puVar1[0x13] = puVar1[0x13] + uVar11; puVar1[0x6f7] = puVar1[0x6f7] + uVar17; } *puVar1 = 0x18; switchD_1400ba4c1_caseD_18: uVar2 = uVar16; uVar11 = local_64; if (uVar10 != 0) { uVar17 = puVar1[0x13]; if (local_60 - uVar10 < uVar17) { uVar17 = uVar17 - (local_60 - uVar10); if ((puVar1[0xc] < uVar17) && (puVar1[0x6f6] != 0)) { param_1[4] = (longlong)"invalid distance too far back"; *puVar1 = 0x1d; break; } uVar13 = puVar1[0xd]; if (uVar13 < uVar17) { uVar17 = uVar17 - uVar13; uVar13 = puVar1[0xb] - uVar17; } else { uVar13 = uVar13 - uVar17; } uVar11 = puVar1[0x12]; lVar14 = (ulonglong)uVar13 + *(longlong *)(puVar1 + 0xe); if (uVar11 < uVar17) goto LAB_1400bb7f5; } else { lVar14 = (longlong)puVar20 - (ulonglong)uVar17; uVar11 = puVar1[0x12]; LAB_1400bb7f5: uVar17 = uVar11; uVar11 = uVar17; } if (uVar10 < uVar17) { uVar17 = uVar10; } local_res20 = uVar10 - uVar17; puVar1[0x12] = uVar11 - uVar17; puVar21 = puVar20; do { local_58 = puVar21 + 1; uVar17 = uVar17 - 1; *puVar21 = puVar21[lVar14 - (longlong)puVar20]; puVar21 = local_58; } while (uVar17 != 0); puVar20 = local_58; uVar10 = local_res20; if (puVar1[0x12] == 0) { *puVar1 = 0x14; } break; } goto LAB_1400bac9a; case 0x15: goto switchD_1400ba4c1_caseD_15; case 0x16: goto switchD_1400ba4c1_caseD_16; case 0x17: goto switchD_1400ba4c1_caseD_17; case 0x18: goto switchD_1400ba4c1_caseD_18; case 0x19: uVar2 = uVar16; if (uVar10 != 0) { local_58 = puVar20 + 1; local_res20 = uVar10 - 1; *puVar20 = (char)puVar1[0x12]; *puVar1 = 0x14; puVar20 = local_58; uVar10 = local_res20; break; } goto LAB_1400bac9a; case 0x1a: uVar17 = uVar5; uVar22 = uVar6; if (puVar1[2] != 0) { for (; uVar17 < 0x20; uVar17 = uVar17 + 8) { uVar5 = uVar17; uVar6 = uVar22; uVar2 = 0; if (uVar16 == 0) goto LAB_1400bac9a; uVar6 = *puVar15; bVar8 = (byte)uVar17; uVar16 = uVar16 - 1; puVar15 = (uint *)((longlong)puVar15 + 1); uVar22 = uVar22 + ((uint)(byte)uVar6 << (bVar8 & 0x1f)); } uVar6 = local_60 - uVar10; *(int *)((longlong)param_1 + 0x1c) = *(int *)((longlong)param_1 + 0x1c) + uVar6; puVar1[7] = puVar1[7] + uVar6; if (uVar6 != 0) { if (puVar1[4] == 0) { uVar5 = FUN_1400c1b80(puVar1[6],puVar20 + -(ulonglong)uVar6,uVar6); puVar20 = local_58; uVar10 = local_res20; } else { uVar5 = uVar13; if ((uint *)(puVar20 + -(ulonglong)uVar6) != (uint *)0x0) { uVar5 = FUN_1400ba0d0(puVar1[6],(uint *)(puVar20 + -(ulonglong)uVar6),uVar6); puVar20 = local_58; uVar10 = local_res20; } } puVar1[6] = uVar5; *(uint *)((longlong)param_1 + 0x4c) = uVar5; } uVar11 = uVar22; if (puVar1[4] == 0) { uVar11 = ((uVar22 & 0xff00) + uVar22 * 0x10000) * 0x100 + (uVar22 >> 8 & 0xff00) + (uVar22 >> 0x18); } uVar5 = uVar13; uVar6 = uVar13; local_60 = uVar10; if (uVar11 != puVar1[6]) { param_1[4] = (longlong)"incorrect data check"; *puVar1 = 0x1d; uVar5 = uVar17; uVar6 = uVar22; break; } } *puVar1 = 0x1b; case 0x1b: if ((puVar1[2] != 0) && (uVar17 = uVar5, uVar22 = uVar6, puVar1[4] != 0)) { for (; uVar17 < 0x20; uVar17 = uVar17 + 8) { uVar5 = uVar17; uVar6 = uVar22; uVar2 = 0; uVar11 = local_64; if (uVar16 == 0) goto LAB_1400bac9a; uVar6 = *puVar15; bVar8 = (byte)uVar17; uVar16 = uVar16 - 1; puVar15 = (uint *)((longlong)puVar15 + 1); uVar22 = uVar22 + ((uint)(byte)uVar6 << (bVar8 & 0x1f)); } uVar5 = uVar13; uVar6 = uVar13; if (uVar22 != puVar1[7]) { param_1[4] = (longlong)"incorrect length check"; *puVar1 = 0x1d; uVar5 = uVar17; uVar6 = uVar22; break; } } *puVar1 = 0x1c; switchD_1400ba4c1_caseD_1c: uVar23 = 1; goto LAB_1400bac9e; case 0x1c: goto switchD_1400ba4c1_caseD_1c; case 0x1d: uVar23 = 0xfffffffd; goto LAB_1400bac9e; case 0x1e: goto LAB_1400bacf9; } LAB_1400baaf8: uVar17 = *puVar1; } while( true ); }