
void flush_block(char *buf,ulg stored_len,int eof)

{
  uint uVar1;
  uint uVar2;
  byte *pbVar3;
  uint uVar4;
  int iVar5;
  byte *pbVar6;
  int iVar7;
  byte *pbVar8;
  ct_data *tree;
  char *pcVar9;
  ct_data *tree_00;
  
  iVar7 = *(int *)PTR_ptr_to_globals_0012a304;
  tree = (ct_data *)(iVar7 + 0x484);
  tree_00 = (ct_data *)(iVar7 + 0xd78);
  *(undefined1 *)(iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0) = *(undefined1 *)(iVar7 + 0x2aac);
  build_tree((tree_desc *)(iVar7 + 0x1400));
  build_tree((tree_desc *)(iVar7 + 0x141c));
  scan_tree(tree,*(int *)(iVar7 + 0x1418));
  scan_tree(tree_00,*(int *)(iVar7 + 0x1434));
  build_tree((tree_desc *)(iVar7 + 0x1438));
  uVar1 = 0xf;
  pbVar8 = PTR_s_<_W_q_v1_HxLJ_&uD_sa_____P)9__f_l_0012a1a8 + 0x7050;
  pbVar3 = PTR_s_<_W_q_v1_HxLJ_&uD_sa_____P)9__f_l_0012a1a8 + 0x7061;
  while (pbVar6 = pbVar3 + (1 - (int)pbVar8), *(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6) == 0) {
    if (PTR_s_<_W_q_v1_HxLJ_&uD_sa_____P)9__f_l_0012a1a8 + 0x7052 == pbVar3) {
      iVar5 = 9;
      pbVar6 = &SUB_00000002;
      goto LAB_0009e3d4;
    }
    uVar1 = (uint)*pbVar3;
    pbVar3 = pbVar3 + -1;
  }
  iVar5 = (int)(pbVar6 + 1) * 3;
LAB_0009e3d4:
  iVar5 = *(int *)(iVar7 + 0x2ab0) + 0xe + iVar5;
  uVar4 = *(int *)(iVar7 + 0x2ab4) + 10U >> 3;
  *(int *)(iVar7 + 0x2ab0) = iVar5;
  uVar2 = iVar5 + 10U >> 3;
  uVar1 = uVar4;
  if (uVar2 <= uVar4) {
    uVar1 = uVar2;
  }
  if ((uVar1 < stored_len + 4) || (buf == (char *)0x0)) {
    if (uVar4 <= uVar2) {
      send_bits(eof + 2,3);
      compress_block((ct_data *)(iVar7 + 0xe6c),(ct_data *)(iVar7 + 0x12ec));
      init_block();
      goto joined_r0x0009e65c;
    }
    pbVar3 = pbVar6 + (int)pbVar8;
    send_bits(eof + 4,3);
    iVar5 = *(int *)(iVar7 + 0x1418);
    uVar2 = *(uint *)(iVar7 + 0x1434);
    send_bits(iVar5 - 0x100,5);
    send_bits(uVar2,5);
    send_bits((uint)(pbVar6 + -3),4);
    uVar1 = 0x10;
    for (; send_bits((uint)*(ushort *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3), pbVar3 != pbVar8;
        pbVar8 = pbVar8 + 1) {
      uVar1 = (uint)pbVar8[1];
    }
    send_tree(tree,iVar5);
    send_tree(tree_00,uVar2);
    compress_block(tree,tree_00);
  }
  else {
    pcVar9 = buf + stored_len;
    send_bits(eof,3);
    bi_windup();
    put_16bit((ushort)stored_len);
    put_16bit(~(ushort)stored_len);
    for (; buf != pcVar9; buf = buf + 1) {
      iVar5 = *(int *)(iVar7 + -0x10);
      *(int *)(iVar7 + -0x10) = iVar5 + 1;
      *(char *)(*(int *)(iVar7 + -0x3c) + iVar5) = *buf;
      if (*(int *)(iVar7 + -0x10) == 0x4000) {
        flush_outbuf();
      }
    }
  }
  init_block();
joined_r0x0009e65c:
  if (eof != 0) {
    bi_windup();
    return;
  }
  return;
}



void FUN_0009e2c0(undefined1 *param_1,uint param_2,int param_3)

{
  uint uVar1;
  uint uVar2;
  byte *pbVar3;
  uint uVar4;
  int iVar5;
  byte *pbVar6;
  int iVar7;
  byte *pbVar8;
  int iVar9;
  undefined1 *puVar10;
  int iVar11;
  undefined4 uVar12;
  
  iVar7 = *(int *)PTR_DAT_0012a304;
  iVar9 = iVar7 + 0x484;
  iVar11 = iVar7 + 0xd78;
  *(undefined1 *)(iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0) = *(undefined1 *)(iVar7 + 0x2aac);
  FUN_0009d144(iVar7 + 0x1400);
  FUN_0009d144(iVar7 + 0x141c);
  FUN_0009d61c(iVar9,*(undefined4 *)(iVar7 + 0x1418));
  FUN_0009d61c(iVar11,*(undefined4 *)(iVar7 + 0x1434));
  FUN_0009d144(iVar7 + 0x1438);
  uVar1 = 0xf;
  pbVar8 = PTR_FUN_0012a1a8 + 0x7050;
  pbVar3 = PTR_FUN_0012a1a8 + 0x7061;
  while (pbVar6 = pbVar3 + (1 - (int)pbVar8), *(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6) == 0) {
    if (PTR_FUN_0012a1a8 + 0x7052 == pbVar3) {
      iVar5 = 9;
      pbVar6 = &SUB_00000002;
      goto LAB_0009e3d4;
    }
    uVar1 = (uint)*pbVar3;
    pbVar3 = pbVar3 + -1;
  }
  iVar5 = (int)(pbVar6 + 1) * 3;
LAB_0009e3d4:
  iVar5 = *(int *)(iVar7 + 0x2ab0) + 0xe + iVar5;
  uVar4 = *(int *)(iVar7 + 0x2ab4) + 10U >> 3;
  *(int *)(iVar7 + 0x2ab0) = iVar5;
  uVar2 = iVar5 + 10U >> 3;
  uVar1 = uVar4;
  if (uVar2 <= uVar4) {
    uVar1 = uVar2;
  }
  if ((uVar1 < param_2 + 4) || (param_1 == (undefined1 *)0x0)) {
    if (uVar4 <= uVar2) {
      FUN_0009dcd4(param_3 + 2,3);
      FUN_0009df98(iVar7 + 0xe6c,iVar7 + 0x12ec);
      FUN_0009ceb0();
      goto joined_r0x0009e65c;
    }
    pbVar3 = pbVar6 + (int)pbVar8;
    FUN_0009dcd4(param_3 + 4,3);
    iVar5 = *(int *)(iVar7 + 0x1418);
    uVar12 = *(undefined4 *)(iVar7 + 0x1434);
    FUN_0009dcd4(iVar5 + -0x100,5);
    FUN_0009dcd4(uVar12,5);
    FUN_0009dcd4(pbVar6 + -3,4);
    uVar1 = 0x10;
    for (; FUN_0009dcd4(*(undefined2 *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3), pbVar3 != pbVar8;
        pbVar8 = pbVar8 + 1) {
      uVar1 = (uint)pbVar8[1];
    }
    FUN_0009dd80(iVar9,iVar5);
    FUN_0009dd80(iVar11,uVar12);
    FUN_0009df98(iVar9,iVar11);
  }
  else {
    puVar10 = param_1 + param_2;
    FUN_0009dcd4(param_3,3);
    FUN_0009e1f4();
    FUN_0009dc0c(param_2 & 0xffff);
    FUN_0009dc0c(~param_2 & 0xffff);
    for (; param_1 != puVar10; param_1 = param_1 + 1) {
      iVar9 = *(int *)(iVar7 + -0x10);
      *(int *)(iVar7 + -0x10) = iVar9 + 1;
      *(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9) = *param_1;
      if (*(int *)(iVar7 + -0x10) == 0x4000) {
        FUN_0009dbac();
      }
    }
  }
  FUN_0009ceb0();
joined_r0x0009e65c:
  if (param_3 != 0) {
    FUN_0009e1f4();
    return;
  }
  return;
}


lui gp,0x9
addiu gp,gp,0x3e90
addu gp,gp,t9
lw v0,-0x7e4c(gp)
addiu sp,sp,-0x48
sw s0,0x20(sp)
lw s0,0x0(v0)
sw s1,0x24(sp)
sw ra,0x44(sp)
sw gp,0x10(sp)
sw s6,0x38(sp)
or s6,a0,zero
sw s5,0x34(sp)
addiu a0,s0,0x1400
sw s4,0x30(sp)
addiu s4,s0,0x484
sw s3,0x2c(sp)
or s3,a2,zero
sw s2,0x28(sp)
or s2,a1,zero
sw s8,0x40(sp)
addiu s5,s0,0xd78
sw s7,0x3c(sp)
lw v0,0x2aa8(s0)
lw s1,-0x7728(gp)
lbu v1,0x2aac(s0)
addu v0,s0,v0
addiu s1,s1,-0x2ebc
or t9,s1,zero
bal 0x0009d144
_sb v1,0x1aa0(v0)
or t9,s1,zero
bal 0x0009d144
_addiu a0,s0,0x141c
or a0,s4,zero
lw gp,0x10(sp)
lw t9,-0x7728(gp)
addiu t9,t9,-0x29e4
bal 0x0009d61c
_lw a1,0x1418(s0)
or a0,s5,zero
bal 0x0009d61c
_lw a1,0x1434(s0)
or t9,s1,zero
bal 0x0009d144
_addiu a0,s0,0x1438
li a0,0x1
lw gp,0x10(sp)
li v0,0xf
lw s1,-0x7fa8(gp)
lw v1,-0x7fa8(gp)
addiu s1,s1,0x7050
addiu v1,v1,0x7061
addiu a1,s1,0x2
subu a0,a0,s1
addiu v0,v0,0x4d8
sll v0,v0,0x2
addu v0,s0,v0
lhu v0,0x6(v0)
beq v0,zero,0x0009e3c4
_addu a2,a0,v1
addiu v1,a2,0x1
sll a0,v1,0x1
b 0x0009e3d4
_addu v1,a0,v1
bne a1,v1,0x0009e66c
_nop
li v1,0x9
li a2,0x2
lw a0,0x2ab0(s0)
addiu a1,s2,0x4
lw v0,0x2ab4(s0)
addiu a0,a0,0xe
addiu v0,v0,0xa
addu a0,a0,v1
srl v1,v0,0x3
addiu v0,a0,0xa
sw a0,0x2ab0(s0)
or a3,v1,zero
srl v0,v0,0x3
sltu a0,v1,v0
movz a3,v0,a0
or a0,a1,zero
sltu a0,a3,a0
bne a0,zero,0x0009e4c8
_li a1,0x3
beq s6,zero,0x0009e4c8
_lw t9,-0x7728(gp)
or a0,s3,zero
nor s1,zero,s2
sll s1,s1,0x10
addiu t9,t9,-0x232c
bal 0x0009dcd4
_addu s4,s6,s2
andi s2,s2,0xffff
lw gp,0x10(sp)
lw t9,-0x7728(gp)
addiu t9,t9,-0x1e0c
bal 0x0009e1f4
_or s1,s1,s2
lw gp,0x10(sp)
lw s2,-0x7728(gp)
addiu s2,s2,-0x23f4
or t9,s2,zero
bal 0x0009dc0c
_andi a0,s1,0xffff
or t9,s2,zero
bal 0x0009dc0c
_srl a0,s1,0x10
li s2,0x4000
lw gp,0x10(sp)
lw s1,-0x7728(gp)
addiu s1,s1,-0x2454
beq s6,s4,0x0009e5a4
_lw t9,-0x7728(gp)
lw v1,-0x10(s0)
lw v0,-0x3c(s0)
addiu a0,v1,0x1
addu v0,v0,v1
sw a0,-0x10(s0)
lbu v1,0x0(s6)
sb v1,0x0(v0)
lw v0,-0x10(s0)
bne v0,s2,0x0009e4c0
_or t9,s1,zero
bal 0x0009dbac
_nop
lw gp,0x10(sp)
b 0x0009e484
_addiu s6,s6,0x1
sltu v0,v0,v1
beq v0,zero,0x0009e620
_lw s2,-0x7728(gp)
addiu a0,s3,0x4
sw a2,0x1c(sp)
addiu s2,s2,-0x232c
or t9,s2,zero
bal 0x0009dcd4
_addu s8,a2,s1
li a1,0x5
lw s7,0x1418(s0)
or t9,s2,zero
lw s6,0x1434(s0)
bal 0x0009dcd4
_addiu a0,s7,-0x100
li a1,0x5
or t9,s2,zero
bal 0x0009dcd4
_or a0,s6,zero
li a1,0x4
lw a2,0x1c(sp)
or t9,s2,zero
bal 0x0009dcd4
_addiu a0,a2,-0x3
li v0,0x10
addiu v0,v0,0x4d8
li a1,0x3
sll v0,v0,0x2
or t9,s2,zero
addu v0,s0,v0
bal 0x0009dcd4
_lhu a0,0x6(v0)
beq s8,s1,0x0009e55c
_lw gp,0x10(sp)
lbu v0,0x1(s1)
b 0x0009e52c
_addiu s1,s1,0x1
lw s0,-0x7728(gp)
or a1,s7,zero
addiu s0,s0,-0x2280
or t9,s0,zero
bal 0x0009dd80
_or a0,s4,zero
or a1,s6,zero
or t9,s0,zero
bal 0x0009dd80
_or a0,s5,zero
or a1,s5,zero
lw gp,0x10(sp)
lw t9,-0x7728(gp)
addiu t9,t9,-0x2068
bal 0x0009df98
_or a0,s4,zero
lw gp,0x10(sp)
lw t9,-0x7728(gp)
addiu t9,t9,-0x3150
bal 0x0009ceb0
_nop
beq s3,zero,0x0009e5f0
_lw gp,0x10(sp)
lw t9,-0x7728(gp)
lw ra,0x44(sp)
lw s8,0x40(sp)
lw s7,0x3c(sp)
addiu t9,t9,-0x1e0c
lw s6,0x38(sp)
lw s5,0x34(sp)
lw s4,0x30(sp)
lw s3,0x2c(sp)
lw s2,0x28(sp)
lw s1,0x24(sp)
lw s0,0x20(sp)
b 0x0009e1f4
_addiu sp,sp,0x48
lw ra,0x44(sp)
lw s8,0x40(sp)
lw s7,0x3c(sp)
lw s6,0x38(sp)
lw s5,0x34(sp)
lw s4,0x30(sp)
lw s3,0x2c(sp)
lw s2,0x28(sp)
lw s1,0x24(sp)
lw s0,0x20(sp)
jr ra
_addiu sp,sp,0x48
lw t9,-0x7728(gp)
addiu t9,t9,-0x232c
bal 0x0009dcd4
_addiu a0,s3,0x2
addiu a1,s0,0x12ec
lw gp,0x10(sp)
lw t9,-0x7728(gp)
addiu t9,t9,-0x2068
bal 0x0009df98
_addiu a0,s0,0xe6c
lw gp,0x10(sp)
lw t9,-0x7728(gp)
addiu t9,t9,-0x3150
bal 0x0009ceb0
_nop
beq s3,zero,0x0009e5f0
_lw gp,0x10(sp)
b 0x0009e5bc
_lw t9,-0x7728(gp)
lbu v0,0x0(v1)
b 0x0009e39c
_addiu v1,v1,-0x1
(translation_unit "void FUN_0009e2c0(undefined1 *param_1,uint param_2,int param_3)\n\n{\n  uint uVar1;\n  uint uVar2;\n  byte *pbVar3;\n  uint uVar4;\n  int iVar5;\n  byte *pbVar6;\n  int iVar7;\n  byte *pbVar8;\n  int iVar9;\n  undefined1 *puVar10;\n  int iVar11;\n  undefined4 uVar12;\n  \n  iVar7 = *(int *)PTR_DAT_0012a304;\n  iVar9 = iVar7 + 0x484;\n  iVar11 = iVar7 + 0xd78;\n  *(undefined1 *)(iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0) = *(undefined1 *)(iVar7 + 0x2aac);\n  FUN_0009d144(iVar7 + 0x1400);\n  FUN_0009d144(iVar7 + 0x141c);\n  FUN_0009d61c(iVar9,*(undefined4 *)(iVar7 + 0x1418));\n  FUN_0009d61c(iVar11,*(undefined4 *)(iVar7 + 0x1434));\n  FUN_0009d144(iVar7 + 0x1438);\n  uVar1 = 0xf;\n  pbVar8 = PTR_FUN_0012a1a8 + 0x7050;\n  pbVar3 = PTR_FUN_0012a1a8 + 0x7061;\n  while (pbVar6 = pbVar3 + (1 - (int)pbVar8), *(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6) == 0) {\n    if (PTR_FUN_0012a1a8 + 0x7052 == pbVar3) {\n      iVar5 = 9;\n      pbVar6 = &SUB_00000002;\n      goto LAB_0009e3d4;\n    }\n    uVar1 = (uint)*pbVar3;\n    pbVar3 = pbVar3 + -1;\n  }\n  iVar5 = (int)(pbVar6 + 1) * 3;\nLAB_0009e3d4:\n  iVar5 = *(int *)(iVar7 + 0x2ab0) + 0xe + iVar5;\n  uVar4 = *(int *)(iVar7 + 0x2ab4) + 10U >> 3;\n  *(int *)(iVar7 + 0x2ab0) = iVar5;\n  uVar2 = iVar5 + 10U >> 3;\n  uVar1 = uVar4;\n  if (uVar2 <= uVar4) {\n    uVar1 = uVar2;\n  }\n  if ((uVar1 < param_2 + 4) || (param_1 == (undefined1 *)0x0)) {\n    if (uVar4 <= uVar2) {\n      FUN_0009dcd4(param_3 + 2,3);\n      FUN_0009df98(iVar7 + 0xe6c,iVar7 + 0x12ec);\n      FUN_0009ceb0();\n      goto joined_r0x0009e65c;\n    }\n    pbVar3 = pbVar6 + (int)pbVar8;\n    FUN_0009dcd4(param_3 + 4,3);\n    iVar5 = *(int *)(iVar7 + 0x1418);\n    uVar12 = *(undefined4 *)(iVar7 + 0x1434);\n    FUN_0009dcd4(iVar5 + -0x100,5);\n    FUN_0009dcd4(uVar12,5);\n    FUN_0009dcd4(pbVar6 + -3,4);\n    uVar1 = 0x10;\n    for (; FUN_0009dcd4(*(undefined2 *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3), pbVar3 != pbVar8;\n        pbVar8 = pbVar8 + 1) {\n      uVar1 = (uint)pbVar8[1];\n    }\n    FUN_0009dd80(iVar9,iVar5);\n    FUN_0009dd80(iVar11,uVar12);\n    FUN_0009df98(iVar9,iVar11);\n  }\n  else {\n    puVar10 = param_1 + param_2;\n    FUN_0009dcd4(param_3,3);\n    FUN_0009e1f4();\n    FUN_0009dc0c(param_2 & 0xffff);\n    FUN_0009dc0c(~param_2 & 0xffff);\n    for (; param_1 != puVar10; param_1 = param_1 + 1) {\n      iVar9 = *(int *)(iVar7 + -0x10);\n      *(int *)(iVar7 + -0x10) = iVar9 + 1;\n      *(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9) = *param_1;\n      if (*(int *)(iVar7 + -0x10) == 0x4000) {\n        FUN_0009dbac();\n      }\n    }\n  }\n  FUN_0009ceb0();\njoined_r0x0009e65c:\n  if (param_3 != 0) {\n    FUN_0009e1f4();\n    return;\n  }\n  return;\n}\n\n" (function_definition "void FUN_0009e2c0(undefined1 *param_1,uint param_2,int param_3)\n\n{\n  uint uVar1;\n  uint uVar2;\n  byte *pbVar3;\n  uint uVar4;\n  int iVar5;\n  byte *pbVar6;\n  int iVar7;\n  byte *pbVar8;\n  int iVar9;\n  undefined1 *puVar10;\n  int iVar11;\n  undefined4 uVar12;\n  \n  iVar7 = *(int *)PTR_DAT_0012a304;\n  iVar9 = iVar7 + 0x484;\n  iVar11 = iVar7 + 0xd78;\n  *(undefined1 *)(iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0) = *(undefined1 *)(iVar7 + 0x2aac);\n  FUN_0009d144(iVar7 + 0x1400);\n  FUN_0009d144(iVar7 + 0x141c);\n  FUN_0009d61c(iVar9,*(undefined4 *)(iVar7 + 0x1418));\n  FUN_0009d61c(iVar11,*(undefined4 *)(iVar7 + 0x1434));\n  FUN_0009d144(iVar7 + 0x1438);\n  uVar1 = 0xf;\n  pbVar8 = PTR_FUN_0012a1a8 + 0x7050;\n  pbVar3 = PTR_FUN_0012a1a8 + 0x7061;\n  while (pbVar6 = pbVar3 + (1 - (int)pbVar8), *(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6) == 0) {\n    if (PTR_FUN_0012a1a8 + 0x7052 == pbVar3) {\n      iVar5 = 9;\n      pbVar6 = &SUB_00000002;\n      goto LAB_0009e3d4;\n    }\n    uVar1 = (uint)*pbVar3;\n    pbVar3 = pbVar3 + -1;\n  }\n  iVar5 = (int)(pbVar6 + 1) * 3;\nLAB_0009e3d4:\n  iVar5 = *(int *)(iVar7 + 0x2ab0) + 0xe + iVar5;\n  uVar4 = *(int *)(iVar7 + 0x2ab4) + 10U >> 3;\n  *(int *)(iVar7 + 0x2ab0) = iVar5;\n  uVar2 = iVar5 + 10U >> 3;\n  uVar1 = uVar4;\n  if (uVar2 <= uVar4) {\n    uVar1 = uVar2;\n  }\n  if ((uVar1 < param_2 + 4) || (param_1 == (undefined1 *)0x0)) {\n    if (uVar4 <= uVar2) {\n      FUN_0009dcd4(param_3 + 2,3);\n      FUN_0009df98(iVar7 + 0xe6c,iVar7 + 0x12ec);\n      FUN_0009ceb0();\n      goto joined_r0x0009e65c;\n    }\n    pbVar3 = pbVar6 + (int)pbVar8;\n    FUN_0009dcd4(param_3 + 4,3);\n    iVar5 = *(int *)(iVar7 + 0x1418);\n    uVar12 = *(undefined4 *)(iVar7 + 0x1434);\n    FUN_0009dcd4(iVar5 + -0x100,5);\n    FUN_0009dcd4(uVar12,5);\n    FUN_0009dcd4(pbVar6 + -3,4);\n    uVar1 = 0x10;\n    for (; FUN_0009dcd4(*(undefined2 *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3), pbVar3 != pbVar8;\n        pbVar8 = pbVar8 + 1) {\n      uVar1 = (uint)pbVar8[1];\n    }\n    FUN_0009dd80(iVar9,iVar5);\n    FUN_0009dd80(iVar11,uVar12);\n    FUN_0009df98(iVar9,iVar11);\n  }\n  else {\n    puVar10 = param_1 + param_2;\n    FUN_0009dcd4(param_3,3);\n    FUN_0009e1f4();\n    FUN_0009dc0c(param_2 & 0xffff);\n    FUN_0009dc0c(~param_2 & 0xffff);\n    for (; param_1 != puVar10; param_1 = param_1 + 1) {\n      iVar9 = *(int *)(iVar7 + -0x10);\n      *(int *)(iVar7 + -0x10) = iVar9 + 1;\n      *(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9) = *param_1;\n      if (*(int *)(iVar7 + -0x10) == 0x4000) {\n        FUN_0009dbac();\n      }\n    }\n  }\n  FUN_0009ceb0();\njoined_r0x0009e65c:\n  if (param_3 != 0) {\n    FUN_0009e1f4();\n    return;\n  }\n  return;\n}" primitive_type (function_declarator "FUN_0009e2c0(undefined1 *param_1,uint param_2,int param_3)" identifier (parameter_list "(undefined1 *param_1,uint param_2,int param_3)" ( (parameter_declaration "undefined1 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  uint uVar1;\n  uint uVar2;\n  byte *pbVar3;\n  uint uVar4;\n  int iVar5;\n  byte *pbVar6;\n  int iVar7;\n  byte *pbVar8;\n  int iVar9;\n  undefined1 *puVar10;\n  int iVar11;\n  undefined4 uVar12;\n  \n  iVar7 = *(int *)PTR_DAT_0012a304;\n  iVar9 = iVar7 + 0x484;\n  iVar11 = iVar7 + 0xd78;\n  *(undefined1 *)(iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0) = *(undefined1 *)(iVar7 + 0x2aac);\n  FUN_0009d144(iVar7 + 0x1400);\n  FUN_0009d144(iVar7 + 0x141c);\n  FUN_0009d61c(iVar9,*(undefined4 *)(iVar7 + 0x1418));\n  FUN_0009d61c(iVar11,*(undefined4 *)(iVar7 + 0x1434));\n  FUN_0009d144(iVar7 + 0x1438);\n  uVar1 = 0xf;\n  pbVar8 = PTR_FUN_0012a1a8 + 0x7050;\n  pbVar3 = PTR_FUN_0012a1a8 + 0x7061;\n  while (pbVar6 = pbVar3 + (1 - (int)pbVar8), *(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6) == 0) {\n    if (PTR_FUN_0012a1a8 + 0x7052 == pbVar3) {\n      iVar5 = 9;\n      pbVar6 = &SUB_00000002;\n      goto LAB_0009e3d4;\n    }\n    uVar1 = (uint)*pbVar3;\n    pbVar3 = pbVar3 + -1;\n  }\n  iVar5 = (int)(pbVar6 + 1) * 3;\nLAB_0009e3d4:\n  iVar5 = *(int *)(iVar7 + 0x2ab0) + 0xe + iVar5;\n  uVar4 = *(int *)(iVar7 + 0x2ab4) + 10U >> 3;\n  *(int *)(iVar7 + 0x2ab0) = iVar5;\n  uVar2 = iVar5 + 10U >> 3;\n  uVar1 = uVar4;\n  if (uVar2 <= uVar4) {\n    uVar1 = uVar2;\n  }\n  if ((uVar1 < param_2 + 4) || (param_1 == (undefined1 *)0x0)) {\n    if (uVar4 <= uVar2) {\n      FUN_0009dcd4(param_3 + 2,3);\n      FUN_0009df98(iVar7 + 0xe6c,iVar7 + 0x12ec);\n      FUN_0009ceb0();\n      goto joined_r0x0009e65c;\n    }\n    pbVar3 = pbVar6 + (int)pbVar8;\n    FUN_0009dcd4(param_3 + 4,3);\n    iVar5 = *(int *)(iVar7 + 0x1418);\n    uVar12 = *(undefined4 *)(iVar7 + 0x1434);\n    FUN_0009dcd4(iVar5 + -0x100,5);\n    FUN_0009dcd4(uVar12,5);\n    FUN_0009dcd4(pbVar6 + -3,4);\n    uVar1 = 0x10;\n    for (; FUN_0009dcd4(*(undefined2 *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3), pbVar3 != pbVar8;\n        pbVar8 = pbVar8 + 1) {\n      uVar1 = (uint)pbVar8[1];\n    }\n    FUN_0009dd80(iVar9,iVar5);\n    FUN_0009dd80(iVar11,uVar12);\n    FUN_0009df98(iVar9,iVar11);\n  }\n  else {\n    puVar10 = param_1 + param_2;\n    FUN_0009dcd4(param_3,3);\n    FUN_0009e1f4();\n    FUN_0009dc0c(param_2 & 0xffff);\n    FUN_0009dc0c(~param_2 & 0xffff);\n    for (; param_1 != puVar10; param_1 = param_1 + 1) {\n      iVar9 = *(int *)(iVar7 + -0x10);\n      *(int *)(iVar7 + -0x10) = iVar9 + 1;\n      *(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9) = *param_1;\n      if (*(int *)(iVar7 + -0x10) == 0x4000) {\n        FUN_0009dbac();\n      }\n    }\n  }\n  FUN_0009ceb0();\njoined_r0x0009e65c:\n  if (param_3 != 0) {\n    FUN_0009e1f4();\n    return;\n  }\n  return;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "byte *pbVar3;" type_identifier (pointer_declarator "*pbVar3" * identifier) ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "byte *pbVar6;" type_identifier (pointer_declarator "*pbVar6" * identifier) ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "byte *pbVar8;" type_identifier (pointer_declarator "*pbVar8" * identifier) ;) (declaration "int iVar9;" primitive_type identifier ;) (declaration "undefined1 *puVar10;" type_identifier (pointer_declarator "*puVar10" * identifier) ;) (declaration "int iVar11;" primitive_type identifier ;) (declaration "undefined4 uVar12;" type_identifier identifier ;) (expression_statement "iVar7 = *(int *)PTR_DAT_0012a304;" (assignment_expression "iVar7 = *(int *)PTR_DAT_0012a304" identifier = (pointer_expression "*(int *)PTR_DAT_0012a304" * (cast_expression "(int *)PTR_DAT_0012a304" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "iVar9 = iVar7 + 0x484;" (assignment_expression "iVar9 = iVar7 + 0x484" identifier = (binary_expression "iVar7 + 0x484" identifier + number_literal)) ;) (expression_statement "iVar11 = iVar7 + 0xd78;" (assignment_expression "iVar11 = iVar7 + 0xd78" identifier = (binary_expression "iVar7 + 0xd78" identifier + number_literal)) ;) (expression_statement "*(undefined1 *)(iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0) = *(undefined1 *)(iVar7 + 0x2aac);" (assignment_expression "*(undefined1 *)(iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0) = *(undefined1 *)(iVar7 + 0x2aac)" (pointer_expression "*(undefined1 *)(iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0)" * (cast_expression "(undefined1 *)(iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0)" ( (binary_expression "iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0" (binary_expression "iVar7 + *(int *)(iVar7 + 0x2aa8)" identifier + (pointer_expression "*(int *)(iVar7 + 0x2aa8)" * (cast_expression "(int *)(iVar7 + 0x2aa8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x2aa8)" ( (binary_expression "iVar7 + 0x2aa8" identifier + number_literal) ))))) + number_literal) )))) = (pointer_expression "*(undefined1 *)(iVar7 + 0x2aac)" * (cast_expression "(undefined1 *)(iVar7 + 0x2aac)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x2aac)" ( (binary_expression "iVar7 + 0x2aac" identifier + number_literal) ))))) ;) (expression_statement "FUN_0009d144(iVar7 + 0x1400);" (call_expression "FUN_0009d144(iVar7 + 0x1400)" identifier (argument_list "(iVar7 + 0x1400)" ( (binary_expression "iVar7 + 0x1400" identifier + number_literal) ))) ;) (expression_statement "FUN_0009d144(iVar7 + 0x141c);" (call_expression "FUN_0009d144(iVar7 + 0x141c)" identifier (argument_list "(iVar7 + 0x141c)" ( (binary_expression "iVar7 + 0x141c" identifier + number_literal) ))) ;) (expression_statement "FUN_0009d61c(iVar9,*(undefined4 *)(iVar7 + 0x1418));" (call_expression "FUN_0009d61c(iVar9,*(undefined4 *)(iVar7 + 0x1418))" identifier (argument_list "(iVar9,*(undefined4 *)(iVar7 + 0x1418))" ( identifier , (pointer_expression "*(undefined4 *)(iVar7 + 0x1418)" * (cast_expression "(undefined4 *)(iVar7 + 0x1418)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x1418)" ( (binary_expression "iVar7 + 0x1418" identifier + number_literal) )))) ))) ;) (expression_statement "FUN_0009d61c(iVar11,*(undefined4 *)(iVar7 + 0x1434));" (call_expression "FUN_0009d61c(iVar11,*(undefined4 *)(iVar7 + 0x1434))" identifier (argument_list "(iVar11,*(undefined4 *)(iVar7 + 0x1434))" ( identifier , (pointer_expression "*(undefined4 *)(iVar7 + 0x1434)" * (cast_expression "(undefined4 *)(iVar7 + 0x1434)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x1434)" ( (binary_expression "iVar7 + 0x1434" identifier + number_literal) )))) ))) ;) (expression_statement "FUN_0009d144(iVar7 + 0x1438);" (call_expression "FUN_0009d144(iVar7 + 0x1438)" identifier (argument_list "(iVar7 + 0x1438)" ( (binary_expression "iVar7 + 0x1438" identifier + number_literal) ))) ;) (expression_statement "uVar1 = 0xf;" (assignment_expression "uVar1 = 0xf" identifier = number_literal) ;) (expression_statement "pbVar8 = PTR_FUN_0012a1a8 + 0x7050;" (assignment_expression "pbVar8 = PTR_FUN_0012a1a8 + 0x7050" identifier = (binary_expression "PTR_FUN_0012a1a8 + 0x7050" identifier + number_literal)) ;) (expression_statement "pbVar3 = PTR_FUN_0012a1a8 + 0x7061;" (assignment_expression "pbVar3 = PTR_FUN_0012a1a8 + 0x7061" identifier = (binary_expression "PTR_FUN_0012a1a8 + 0x7061" identifier + number_literal)) ;) (while_statement "while (pbVar6 = pbVar3 + (1 - (int)pbVar8), *(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6) == 0) {\n    if (PTR_FUN_0012a1a8 + 0x7052 == pbVar3) {\n      iVar5 = 9;\n      pbVar6 = &SUB_00000002;\n      goto LAB_0009e3d4;\n    }\n    uVar1 = (uint)*pbVar3;\n    pbVar3 = pbVar3 + -1;\n  }" while (parenthesized_expression "(pbVar6 = pbVar3 + (1 - (int)pbVar8), *(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6) == 0)" ( (comma_expression "pbVar6 = pbVar3 + (1 - (int)pbVar8), *(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6) == 0" (assignment_expression "pbVar6 = pbVar3 + (1 - (int)pbVar8)" identifier = (binary_expression "pbVar3 + (1 - (int)pbVar8)" identifier + (parenthesized_expression "(1 - (int)pbVar8)" ( (binary_expression "1 - (int)pbVar8" number_literal - (cast_expression "(int)pbVar8" ( (type_descriptor "int" primitive_type) ) identifier)) )))) , (binary_expression "*(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6) == 0" (pointer_expression "*(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6)" * (cast_expression "(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + (uVar1 + 0x4d8) * 4 + 6)" ( (binary_expression "iVar7 + (uVar1 + 0x4d8) * 4 + 6" (binary_expression "iVar7 + (uVar1 + 0x4d8) * 4" identifier + (binary_expression "(uVar1 + 0x4d8) * 4" (parenthesized_expression "(uVar1 + 0x4d8)" ( (binary_expression "uVar1 + 0x4d8" identifier + number_literal) )) * number_literal)) + number_literal) )))) == number_literal)) )) (compound_statement "{\n    if (PTR_FUN_0012a1a8 + 0x7052 == pbVar3) {\n      iVar5 = 9;\n      pbVar6 = &SUB_00000002;\n      goto LAB_0009e3d4;\n    }\n    uVar1 = (uint)*pbVar3;\n    pbVar3 = pbVar3 + -1;\n  }" { (if_statement "if (PTR_FUN_0012a1a8 + 0x7052 == pbVar3) {\n      iVar5 = 9;\n      pbVar6 = &SUB_00000002;\n      goto LAB_0009e3d4;\n    }" if (parenthesized_expression "(PTR_FUN_0012a1a8 + 0x7052 == pbVar3)" ( (binary_expression "PTR_FUN_0012a1a8 + 0x7052 == pbVar3" (binary_expression "PTR_FUN_0012a1a8 + 0x7052" identifier + number_literal) == identifier) )) (compound_statement "{\n      iVar5 = 9;\n      pbVar6 = &SUB_00000002;\n      goto LAB_0009e3d4;\n    }" { (expression_statement "iVar5 = 9;" (assignment_expression "iVar5 = 9" identifier = number_literal) ;) (expression_statement "pbVar6 = &SUB_00000002;" (assignment_expression "pbVar6 = &SUB_00000002" identifier = (pointer_expression "&SUB_00000002" & identifier)) ;) (goto_statement "goto LAB_0009e3d4;" goto statement_identifier ;) })) (expression_statement "uVar1 = (uint)*pbVar3;" (assignment_expression "uVar1 = (uint)*pbVar3" identifier = (binary_expression "(uint)*pbVar3" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) (expression_statement "pbVar3 = pbVar3 + -1;" (assignment_expression "pbVar3 = pbVar3 + -1" identifier = (binary_expression "pbVar3 + -1" identifier + number_literal)) ;) })) (expression_statement "iVar5 = (int)(pbVar6 + 1) * 3;" (assignment_expression "iVar5 = (int)(pbVar6 + 1) * 3" identifier = (binary_expression "(int)(pbVar6 + 1) * 3" (cast_expression "(int)(pbVar6 + 1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(pbVar6 + 1)" ( (binary_expression "pbVar6 + 1" identifier + number_literal) ))) * number_literal)) ;) (labeled_statement "LAB_0009e3d4:\n  iVar5 = *(int *)(iVar7 + 0x2ab0) + 0xe + iVar5;" statement_identifier : (expression_statement "iVar5 = *(int *)(iVar7 + 0x2ab0) + 0xe + iVar5;" (assignment_expression "iVar5 = *(int *)(iVar7 + 0x2ab0) + 0xe + iVar5" identifier = (binary_expression "*(int *)(iVar7 + 0x2ab0) + 0xe + iVar5" (binary_expression "*(int *)(iVar7 + 0x2ab0) + 0xe" (pointer_expression "*(int *)(iVar7 + 0x2ab0)" * (cast_expression "(int *)(iVar7 + 0x2ab0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x2ab0)" ( (binary_expression "iVar7 + 0x2ab0" identifier + number_literal) )))) + number_literal) + identifier)) ;)) (expression_statement "uVar4 = *(int *)(iVar7 + 0x2ab4) + 10U >> 3;" (assignment_expression "uVar4 = *(int *)(iVar7 + 0x2ab4) + 10U >> 3" identifier = (binary_expression "*(int *)(iVar7 + 0x2ab4) + 10U >> 3" (binary_expression "*(int *)(iVar7 + 0x2ab4) + 10U" (pointer_expression "*(int *)(iVar7 + 0x2ab4)" * (cast_expression "(int *)(iVar7 + 0x2ab4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x2ab4)" ( (binary_expression "iVar7 + 0x2ab4" identifier + number_literal) )))) + number_literal) >> number_literal)) ;) (expression_statement "*(int *)(iVar7 + 0x2ab0) = iVar5;" (assignment_expression "*(int *)(iVar7 + 0x2ab0) = iVar5" (pointer_expression "*(int *)(iVar7 + 0x2ab0)" * (cast_expression "(int *)(iVar7 + 0x2ab0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x2ab0)" ( (binary_expression "iVar7 + 0x2ab0" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar2 = iVar5 + 10U >> 3;" (assignment_expression "uVar2 = iVar5 + 10U >> 3" identifier = (binary_expression "iVar5 + 10U >> 3" (binary_expression "iVar5 + 10U" identifier + number_literal) >> number_literal)) ;) (expression_statement "uVar1 = uVar4;" (assignment_expression "uVar1 = uVar4" identifier = identifier) ;) (if_statement "if (uVar2 <= uVar4) {\n    uVar1 = uVar2;\n  }" if (parenthesized_expression "(uVar2 <= uVar4)" ( (binary_expression "uVar2 <= uVar4" identifier <= identifier) )) (compound_statement "{\n    uVar1 = uVar2;\n  }" { (expression_statement "uVar1 = uVar2;" (assignment_expression "uVar1 = uVar2" identifier = identifier) ;) })) (if_statement "if ((uVar1 < param_2 + 4) || (param_1 == (undefined1 *)0x0)) {\n    if (uVar4 <= uVar2) {\n      FUN_0009dcd4(param_3 + 2,3);\n      FUN_0009df98(iVar7 + 0xe6c,iVar7 + 0x12ec);\n      FUN_0009ceb0();\n      goto joined_r0x0009e65c;\n    }\n    pbVar3 = pbVar6 + (int)pbVar8;\n    FUN_0009dcd4(param_3 + 4,3);\n    iVar5 = *(int *)(iVar7 + 0x1418);\n    uVar12 = *(undefined4 *)(iVar7 + 0x1434);\n    FUN_0009dcd4(iVar5 + -0x100,5);\n    FUN_0009dcd4(uVar12,5);\n    FUN_0009dcd4(pbVar6 + -3,4);\n    uVar1 = 0x10;\n    for (; FUN_0009dcd4(*(undefined2 *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3), pbVar3 != pbVar8;\n        pbVar8 = pbVar8 + 1) {\n      uVar1 = (uint)pbVar8[1];\n    }\n    FUN_0009dd80(iVar9,iVar5);\n    FUN_0009dd80(iVar11,uVar12);\n    FUN_0009df98(iVar9,iVar11);\n  }\n  else {\n    puVar10 = param_1 + param_2;\n    FUN_0009dcd4(param_3,3);\n    FUN_0009e1f4();\n    FUN_0009dc0c(param_2 & 0xffff);\n    FUN_0009dc0c(~param_2 & 0xffff);\n    for (; param_1 != puVar10; param_1 = param_1 + 1) {\n      iVar9 = *(int *)(iVar7 + -0x10);\n      *(int *)(iVar7 + -0x10) = iVar9 + 1;\n      *(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9) = *param_1;\n      if (*(int *)(iVar7 + -0x10) == 0x4000) {\n        FUN_0009dbac();\n      }\n    }\n  }" if (parenthesized_expression "((uVar1 < param_2 + 4) || (param_1 == (undefined1 *)0x0))" ( (binary_expression "(uVar1 < param_2 + 4) || (param_1 == (undefined1 *)0x0)" (parenthesized_expression "(uVar1 < param_2 + 4)" ( (binary_expression "uVar1 < param_2 + 4" identifier < (binary_expression "param_2 + 4" identifier + number_literal)) )) || (parenthesized_expression "(param_1 == (undefined1 *)0x0)" ( (binary_expression "param_1 == (undefined1 *)0x0" identifier == (cast_expression "(undefined1 *)0x0" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n    if (uVar4 <= uVar2) {\n      FUN_0009dcd4(param_3 + 2,3);\n      FUN_0009df98(iVar7 + 0xe6c,iVar7 + 0x12ec);\n      FUN_0009ceb0();\n      goto joined_r0x0009e65c;\n    }\n    pbVar3 = pbVar6 + (int)pbVar8;\n    FUN_0009dcd4(param_3 + 4,3);\n    iVar5 = *(int *)(iVar7 + 0x1418);\n    uVar12 = *(undefined4 *)(iVar7 + 0x1434);\n    FUN_0009dcd4(iVar5 + -0x100,5);\n    FUN_0009dcd4(uVar12,5);\n    FUN_0009dcd4(pbVar6 + -3,4);\n    uVar1 = 0x10;\n    for (; FUN_0009dcd4(*(undefined2 *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3), pbVar3 != pbVar8;\n        pbVar8 = pbVar8 + 1) {\n      uVar1 = (uint)pbVar8[1];\n    }\n    FUN_0009dd80(iVar9,iVar5);\n    FUN_0009dd80(iVar11,uVar12);\n    FUN_0009df98(iVar9,iVar11);\n  }" { (if_statement "if (uVar4 <= uVar2) {\n      FUN_0009dcd4(param_3 + 2,3);\n      FUN_0009df98(iVar7 + 0xe6c,iVar7 + 0x12ec);\n      FUN_0009ceb0();\n      goto joined_r0x0009e65c;\n    }" if (parenthesized_expression "(uVar4 <= uVar2)" ( (binary_expression "uVar4 <= uVar2" identifier <= identifier) )) (compound_statement "{\n      FUN_0009dcd4(param_3 + 2,3);\n      FUN_0009df98(iVar7 + 0xe6c,iVar7 + 0x12ec);\n      FUN_0009ceb0();\n      goto joined_r0x0009e65c;\n    }" { (expression_statement "FUN_0009dcd4(param_3 + 2,3);" (call_expression "FUN_0009dcd4(param_3 + 2,3)" identifier (argument_list "(param_3 + 2,3)" ( (binary_expression "param_3 + 2" identifier + number_literal) , number_literal ))) ;) (expression_statement "FUN_0009df98(iVar7 + 0xe6c,iVar7 + 0x12ec);" (call_expression "FUN_0009df98(iVar7 + 0xe6c,iVar7 + 0x12ec)" identifier (argument_list "(iVar7 + 0xe6c,iVar7 + 0x12ec)" ( (binary_expression "iVar7 + 0xe6c" identifier + number_literal) , (binary_expression "iVar7 + 0x12ec" identifier + number_literal) ))) ;) (expression_statement "FUN_0009ceb0();" (call_expression "FUN_0009ceb0()" identifier (argument_list "()" ( ))) ;) (goto_statement "goto joined_r0x0009e65c;" goto statement_identifier ;) })) (expression_statement "pbVar3 = pbVar6 + (int)pbVar8;" (assignment_expression "pbVar3 = pbVar6 + (int)pbVar8" identifier = (binary_expression "pbVar6 + (int)pbVar8" identifier + (cast_expression "(int)pbVar8" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "FUN_0009dcd4(param_3 + 4,3);" (call_expression "FUN_0009dcd4(param_3 + 4,3)" identifier (argument_list "(param_3 + 4,3)" ( (binary_expression "param_3 + 4" identifier + number_literal) , number_literal ))) ;) (expression_statement "iVar5 = *(int *)(iVar7 + 0x1418);" (assignment_expression "iVar5 = *(int *)(iVar7 + 0x1418)" identifier = (pointer_expression "*(int *)(iVar7 + 0x1418)" * (cast_expression "(int *)(iVar7 + 0x1418)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x1418)" ( (binary_expression "iVar7 + 0x1418" identifier + number_literal) ))))) ;) (expression_statement "uVar12 = *(undefined4 *)(iVar7 + 0x1434);" (assignment_expression "uVar12 = *(undefined4 *)(iVar7 + 0x1434)" identifier = (pointer_expression "*(undefined4 *)(iVar7 + 0x1434)" * (cast_expression "(undefined4 *)(iVar7 + 0x1434)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x1434)" ( (binary_expression "iVar7 + 0x1434" identifier + number_literal) ))))) ;) (expression_statement "FUN_0009dcd4(iVar5 + -0x100,5);" (call_expression "FUN_0009dcd4(iVar5 + -0x100,5)" identifier (argument_list "(iVar5 + -0x100,5)" ( (binary_expression "iVar5 + -0x100" identifier + number_literal) , number_literal ))) ;) (expression_statement "FUN_0009dcd4(uVar12,5);" (call_expression "FUN_0009dcd4(uVar12,5)" identifier (argument_list "(uVar12,5)" ( identifier , number_literal ))) ;) (expression_statement "FUN_0009dcd4(pbVar6 + -3,4);" (call_expression "FUN_0009dcd4(pbVar6 + -3,4)" identifier (argument_list "(pbVar6 + -3,4)" ( (binary_expression "pbVar6 + -3" identifier + number_literal) , number_literal ))) ;) (expression_statement "uVar1 = 0x10;" (assignment_expression "uVar1 = 0x10" identifier = number_literal) ;) (for_statement "for (; FUN_0009dcd4(*(undefined2 *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3), pbVar3 != pbVar8;\n        pbVar8 = pbVar8 + 1) {\n      uVar1 = (uint)pbVar8[1];\n    }" for ( ; (comma_expression "FUN_0009dcd4(*(undefined2 *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3), pbVar3 != pbVar8" (call_expression "FUN_0009dcd4(*(undefined2 *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3)" identifier (argument_list "(*(undefined2 *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3)" ( (pointer_expression "*(undefined2 *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6)" * (cast_expression "(undefined2 *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + (uVar1 + 0x4d8) * 4 + 6)" ( (binary_expression "iVar7 + (uVar1 + 0x4d8) * 4 + 6" (binary_expression "iVar7 + (uVar1 + 0x4d8) * 4" identifier + (binary_expression "(uVar1 + 0x4d8) * 4" (parenthesized_expression "(uVar1 + 0x4d8)" ( (binary_expression "uVar1 + 0x4d8" identifier + number_literal) )) * number_literal)) + number_literal) )))) , number_literal ))) , (binary_expression "pbVar3 != pbVar8" identifier != identifier)) ; (assignment_expression "pbVar8 = pbVar8 + 1" identifier = (binary_expression "pbVar8 + 1" identifier + number_literal)) ) (compound_statement "{\n      uVar1 = (uint)pbVar8[1];\n    }" { (expression_statement "uVar1 = (uint)pbVar8[1];" (assignment_expression "uVar1 = (uint)pbVar8[1]" identifier = (cast_expression "(uint)pbVar8[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "pbVar8[1]" identifier [ number_literal ]))) ;) })) (expression_statement "FUN_0009dd80(iVar9,iVar5);" (call_expression "FUN_0009dd80(iVar9,iVar5)" identifier (argument_list "(iVar9,iVar5)" ( identifier , identifier ))) ;) (expression_statement "FUN_0009dd80(iVar11,uVar12);" (call_expression "FUN_0009dd80(iVar11,uVar12)" identifier (argument_list "(iVar11,uVar12)" ( identifier , identifier ))) ;) (expression_statement "FUN_0009df98(iVar9,iVar11);" (call_expression "FUN_0009df98(iVar9,iVar11)" identifier (argument_list "(iVar9,iVar11)" ( identifier , identifier ))) ;) }) (else_clause "else {\n    puVar10 = param_1 + param_2;\n    FUN_0009dcd4(param_3,3);\n    FUN_0009e1f4();\n    FUN_0009dc0c(param_2 & 0xffff);\n    FUN_0009dc0c(~param_2 & 0xffff);\n    for (; param_1 != puVar10; param_1 = param_1 + 1) {\n      iVar9 = *(int *)(iVar7 + -0x10);\n      *(int *)(iVar7 + -0x10) = iVar9 + 1;\n      *(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9) = *param_1;\n      if (*(int *)(iVar7 + -0x10) == 0x4000) {\n        FUN_0009dbac();\n      }\n    }\n  }" else (compound_statement "{\n    puVar10 = param_1 + param_2;\n    FUN_0009dcd4(param_3,3);\n    FUN_0009e1f4();\n    FUN_0009dc0c(param_2 & 0xffff);\n    FUN_0009dc0c(~param_2 & 0xffff);\n    for (; param_1 != puVar10; param_1 = param_1 + 1) {\n      iVar9 = *(int *)(iVar7 + -0x10);\n      *(int *)(iVar7 + -0x10) = iVar9 + 1;\n      *(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9) = *param_1;\n      if (*(int *)(iVar7 + -0x10) == 0x4000) {\n        FUN_0009dbac();\n      }\n    }\n  }" { (expression_statement "puVar10 = param_1 + param_2;" (assignment_expression "puVar10 = param_1 + param_2" identifier = (binary_expression "param_1 + param_2" identifier + identifier)) ;) (expression_statement "FUN_0009dcd4(param_3,3);" (call_expression "FUN_0009dcd4(param_3,3)" identifier (argument_list "(param_3,3)" ( identifier , number_literal ))) ;) (expression_statement "FUN_0009e1f4();" (call_expression "FUN_0009e1f4()" identifier (argument_list "()" ( ))) ;) (expression_statement "FUN_0009dc0c(param_2 & 0xffff);" (call_expression "FUN_0009dc0c(param_2 & 0xffff)" identifier (argument_list "(param_2 & 0xffff)" ( (binary_expression "param_2 & 0xffff" identifier & number_literal) ))) ;) (expression_statement "FUN_0009dc0c(~param_2 & 0xffff);" (call_expression "FUN_0009dc0c(~param_2 & 0xffff)" identifier (argument_list "(~param_2 & 0xffff)" ( (binary_expression "~param_2 & 0xffff" (unary_expression "~param_2" ~ identifier) & number_literal) ))) ;) (for_statement "for (; param_1 != puVar10; param_1 = param_1 + 1) {\n      iVar9 = *(int *)(iVar7 + -0x10);\n      *(int *)(iVar7 + -0x10) = iVar9 + 1;\n      *(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9) = *param_1;\n      if (*(int *)(iVar7 + -0x10) == 0x4000) {\n        FUN_0009dbac();\n      }\n    }" for ( ; (binary_expression "param_1 != puVar10" identifier != identifier) ; (assignment_expression "param_1 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) ) (compound_statement "{\n      iVar9 = *(int *)(iVar7 + -0x10);\n      *(int *)(iVar7 + -0x10) = iVar9 + 1;\n      *(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9) = *param_1;\n      if (*(int *)(iVar7 + -0x10) == 0x4000) {\n        FUN_0009dbac();\n      }\n    }" { (expression_statement "iVar9 = *(int *)(iVar7 + -0x10);" (assignment_expression "iVar9 = *(int *)(iVar7 + -0x10)" identifier = (pointer_expression "*(int *)(iVar7 + -0x10)" * (cast_expression "(int *)(iVar7 + -0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + -0x10)" ( (binary_expression "iVar7 + -0x10" identifier + number_literal) ))))) ;) (expression_statement "*(int *)(iVar7 + -0x10) = iVar9 + 1;" (assignment_expression "*(int *)(iVar7 + -0x10) = iVar9 + 1" (pointer_expression "*(int *)(iVar7 + -0x10)" * (cast_expression "(int *)(iVar7 + -0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + -0x10)" ( (binary_expression "iVar7 + -0x10" identifier + number_literal) )))) = (binary_expression "iVar9 + 1" identifier + number_literal)) ;) (expression_statement "*(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9) = *param_1;" (assignment_expression "*(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9) = *param_1" (pointer_expression "*(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9)" * (cast_expression "(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(iVar7 + -0x3c) + iVar9)" ( (binary_expression "*(int *)(iVar7 + -0x3c) + iVar9" (pointer_expression "*(int *)(iVar7 + -0x3c)" * (cast_expression "(int *)(iVar7 + -0x3c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + -0x3c)" ( (binary_expression "iVar7 + -0x3c" identifier + number_literal) )))) + identifier) )))) = (pointer_expression "*param_1" * identifier)) ;) (if_statement "if (*(int *)(iVar7 + -0x10) == 0x4000) {\n        FUN_0009dbac();\n      }" if (parenthesized_expression "(*(int *)(iVar7 + -0x10) == 0x4000)" ( (binary_expression "*(int *)(iVar7 + -0x10) == 0x4000" (pointer_expression "*(int *)(iVar7 + -0x10)" * (cast_expression "(int *)(iVar7 + -0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + -0x10)" ( (binary_expression "iVar7 + -0x10" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n        FUN_0009dbac();\n      }" { (expression_statement "FUN_0009dbac();" (call_expression "FUN_0009dbac()" identifier (argument_list "()" ( ))) ;) })) })) }))) (expression_statement "FUN_0009ceb0();" (call_expression "FUN_0009ceb0()" identifier (argument_list "()" ( ))) ;) (labeled_statement "joined_r0x0009e65c:\n  if (param_3 != 0) {\n    FUN_0009e1f4();\n    return;\n  }" statement_identifier : (if_statement "if (param_3 != 0) {\n    FUN_0009e1f4();\n    return;\n  }" if (parenthesized_expression "(param_3 != 0)" ( (binary_expression "param_3 != 0" identifier != number_literal) )) (compound_statement "{\n    FUN_0009e1f4();\n    return;\n  }" { (expression_statement "FUN_0009e1f4();" (call_expression "FUN_0009e1f4()" identifier (argument_list "()" ( ))) ;) (return_statement "return;" return ;) }))) (return_statement "return;" return ;) })))
(translation_unit "void flush_block(char *buf,ulg stored_len,int eof)\n\n{\n  uint uVar1;\n  uint uVar2;\n  byte *pbVar3;\n  uint uVar4;\n  int iVar5;\n  byte *pbVar6;\n  int iVar7;\n  byte *pbVar8;\n  ct_data *tree;\n  char *pcVar9;\n  ct_data *tree_00;\n  \n  iVar7 = *(int *)PTR_ptr_to_globals_0012a304;\n  tree = (ct_data *)(iVar7 + 0x484);\n  tree_00 = (ct_data *)(iVar7 + 0xd78);\n  *(undefined1 *)(iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0) = *(undefined1 *)(iVar7 + 0x2aac);\n  build_tree((tree_desc *)(iVar7 + 0x1400));\n  build_tree((tree_desc *)(iVar7 + 0x141c));\n  scan_tree(tree,*(int *)(iVar7 + 0x1418));\n  scan_tree(tree_00,*(int *)(iVar7 + 0x1434));\n  build_tree((tree_desc *)(iVar7 + 0x1438));\n  uVar1 = 0xf;\n  pbVar8 = PTR_s_<_W_q_v1_HxLJ_&uD_sa_____P)9__f_l_0012a1a8 + 0x7050;\n  pbVar3 = PTR_s_<_W_q_v1_HxLJ_&uD_sa_____P)9__f_l_0012a1a8 + 0x7061;\n  while (pbVar6 = pbVar3 + (1 - (int)pbVar8), *(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6) == 0) {\n    if (PTR_s_<_W_q_v1_HxLJ_&uD_sa_____P)9__f_l_0012a1a8 + 0x7052 == pbVar3) {\n      iVar5 = 9;\n      pbVar6 = &SUB_00000002;\n      goto LAB_0009e3d4;\n    }\n    uVar1 = (uint)*pbVar3;\n    pbVar3 = pbVar3 + -1;\n  }\n  iVar5 = (int)(pbVar6 + 1) * 3;\nLAB_0009e3d4:\n  iVar5 = *(int *)(iVar7 + 0x2ab0) + 0xe + iVar5;\n  uVar4 = *(int *)(iVar7 + 0x2ab4) + 10U >> 3;\n  *(int *)(iVar7 + 0x2ab0) = iVar5;\n  uVar2 = iVar5 + 10U >> 3;\n  uVar1 = uVar4;\n  if (uVar2 <= uVar4) {\n    uVar1 = uVar2;\n  }\n  if ((uVar1 < stored_len + 4) || (buf == (char *)0x0)) {\n    if (uVar4 <= uVar2) {\n      send_bits(eof + 2,3);\n      compress_block((ct_data *)(iVar7 + 0xe6c),(ct_data *)(iVar7 + 0x12ec));\n      init_block();\n      goto joined_r0x0009e65c;\n    }\n    pbVar3 = pbVar6 + (int)pbVar8;\n    send_bits(eof + 4,3);\n    iVar5 = *(int *)(iVar7 + 0x1418);\n    uVar2 = *(uint *)(iVar7 + 0x1434);\n    send_bits(iVar5 - 0x100,5);\n    send_bits(uVar2,5);\n    send_bits((uint)(pbVar6 + -3),4);\n    uVar1 = 0x10;\n    for (; send_bits((uint)*(ushort *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3), pbVar3 != pbVar8;\n        pbVar8 = pbVar8 + 1) {\n      uVar1 = (uint)pbVar8[1];\n    }\n    send_tree(tree,iVar5);\n    send_tree(tree_00,uVar2);\n    compress_block(tree,tree_00);\n  }\n  else {\n    pcVar9 = buf + stored_len;\n    send_bits(eof,3);\n    bi_windup();\n    put_16bit((ushort)stored_len);\n    put_16bit(~(ushort)stored_len);\n    for (; buf != pcVar9; buf = buf + 1) {\n      iVar5 = *(int *)(iVar7 + -0x10);\n      *(int *)(iVar7 + -0x10) = iVar5 + 1;\n      *(char *)(*(int *)(iVar7 + -0x3c) + iVar5) = *buf;\n      if (*(int *)(iVar7 + -0x10) == 0x4000) {\n        flush_outbuf();\n      }\n    }\n  }\n  init_block();\njoined_r0x0009e65c:\n  if (eof != 0) {\n    bi_windup();\n    return;\n  }\n  return;\n}\n\n" (function_definition "void flush_block(char *buf,ulg stored_len,int eof)\n\n{\n  uint uVar1;\n  uint uVar2;\n  byte *pbVar3;\n  uint uVar4;\n  int iVar5;\n  byte *pbVar6;\n  int iVar7;\n  byte *pbVar8;\n  ct_data *tree;\n  char *pcVar9;\n  ct_data *tree_00;\n  \n  iVar7 = *(int *)PTR_ptr_to_globals_0012a304;\n  tree = (ct_data *)(iVar7 + 0x484);\n  tree_00 = (ct_data *)(iVar7 + 0xd78);\n  *(undefined1 *)(iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0) = *(undefined1 *)(iVar7 + 0x2aac);\n  build_tree((tree_desc *)(iVar7 + 0x1400));\n  build_tree((tree_desc *)(iVar7 + 0x141c));\n  scan_tree(tree,*(int *)(iVar7 + 0x1418));\n  scan_tree(tree_00,*(int *)(iVar7 + 0x1434));\n  build_tree((tree_desc *)(iVar7 + 0x1438));\n  uVar1 = 0xf;\n  pbVar8 = PTR_s_<_W_q_v1_HxLJ_&uD_sa_____P)9__f_l_0012a1a8 + 0x7050;\n  pbVar3 = PTR_s_<_W_q_v1_HxLJ_&uD_sa_____P)9__f_l_0012a1a8 + 0x7061;\n  while (pbVar6 = pbVar3 + (1 - (int)pbVar8), *(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6) == 0) {\n    if (PTR_s_<_W_q_v1_HxLJ_&uD_sa_____P)9__f_l_0012a1a8 + 0x7052 == pbVar3) {\n      iVar5 = 9;\n      pbVar6 = &SUB_00000002;\n      goto LAB_0009e3d4;\n    }\n    uVar1 = (uint)*pbVar3;\n    pbVar3 = pbVar3 + -1;\n  }\n  iVar5 = (int)(pbVar6 + 1) * 3;\nLAB_0009e3d4:\n  iVar5 = *(int *)(iVar7 + 0x2ab0) + 0xe + iVar5;\n  uVar4 = *(int *)(iVar7 + 0x2ab4) + 10U >> 3;\n  *(int *)(iVar7 + 0x2ab0) = iVar5;\n  uVar2 = iVar5 + 10U >> 3;\n  uVar1 = uVar4;\n  if (uVar2 <= uVar4) {\n    uVar1 = uVar2;\n  }\n  if ((uVar1 < stored_len + 4) || (buf == (char *)0x0)) {\n    if (uVar4 <= uVar2) {\n      send_bits(eof + 2,3);\n      compress_block((ct_data *)(iVar7 + 0xe6c),(ct_data *)(iVar7 + 0x12ec));\n      init_block();\n      goto joined_r0x0009e65c;\n    }\n    pbVar3 = pbVar6 + (int)pbVar8;\n    send_bits(eof + 4,3);\n    iVar5 = *(int *)(iVar7 + 0x1418);\n    uVar2 = *(uint *)(iVar7 + 0x1434);\n    send_bits(iVar5 - 0x100,5);\n    send_bits(uVar2,5);\n    send_bits((uint)(pbVar6 + -3),4);\n    uVar1 = 0x10;\n    for (; send_bits((uint)*(ushort *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3), pbVar3 != pbVar8;\n        pbVar8 = pbVar8 + 1) {\n      uVar1 = (uint)pbVar8[1];\n    }\n    send_tree(tree,iVar5);\n    send_tree(tree_00,uVar2);\n    compress_block(tree,tree_00);\n  }\n  else {\n    pcVar9 = buf + stored_len;\n    send_bits(eof,3);\n    bi_windup();\n    put_16bit((ushort)stored_len);\n    put_16bit(~(ushort)stored_len);\n    for (; buf != pcVar9; buf = buf + 1) {\n      iVar5 = *(int *)(iVar7 + -0x10);\n      *(int *)(iVar7 + -0x10) = iVar5 + 1;\n      *(char *)(*(int *)(iVar7 + -0x3c) + iVar5) = *buf;\n      if (*(int *)(iVar7 + -0x10) == 0x4000) {\n        flush_outbuf();\n      }\n    }\n  }\n  init_block();\njoined_r0x0009e65c:\n  if (eof != 0) {\n    bi_windup();\n    return;\n  }\n  return;\n}" primitive_type (function_declarator "flush_block(char *buf,ulg stored_len,int eof)" identifier (parameter_list "(char *buf,ulg stored_len,int eof)" ( (parameter_declaration "char *buf" primitive_type (pointer_declarator "*buf" * identifier)) , (parameter_declaration "ulg stored_len" type_identifier identifier) , (parameter_declaration "int eof" primitive_type identifier) ))) (compound_statement "{\n  uint uVar1;\n  uint uVar2;\n  byte *pbVar3;\n  uint uVar4;\n  int iVar5;\n  byte *pbVar6;\n  int iVar7;\n  byte *pbVar8;\n  ct_data *tree;\n  char *pcVar9;\n  ct_data *tree_00;\n  \n  iVar7 = *(int *)PTR_ptr_to_globals_0012a304;\n  tree = (ct_data *)(iVar7 + 0x484);\n  tree_00 = (ct_data *)(iVar7 + 0xd78);\n  *(undefined1 *)(iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0) = *(undefined1 *)(iVar7 + 0x2aac);\n  build_tree((tree_desc *)(iVar7 + 0x1400));\n  build_tree((tree_desc *)(iVar7 + 0x141c));\n  scan_tree(tree,*(int *)(iVar7 + 0x1418));\n  scan_tree(tree_00,*(int *)(iVar7 + 0x1434));\n  build_tree((tree_desc *)(iVar7 + 0x1438));\n  uVar1 = 0xf;\n  pbVar8 = PTR_s_<_W_q_v1_HxLJ_&uD_sa_____P)9__f_l_0012a1a8 + 0x7050;\n  pbVar3 = PTR_s_<_W_q_v1_HxLJ_&uD_sa_____P)9__f_l_0012a1a8 + 0x7061;\n  while (pbVar6 = pbVar3 + (1 - (int)pbVar8), *(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6) == 0) {\n    if (PTR_s_<_W_q_v1_HxLJ_&uD_sa_____P)9__f_l_0012a1a8 + 0x7052 == pbVar3) {\n      iVar5 = 9;\n      pbVar6 = &SUB_00000002;\n      goto LAB_0009e3d4;\n    }\n    uVar1 = (uint)*pbVar3;\n    pbVar3 = pbVar3 + -1;\n  }\n  iVar5 = (int)(pbVar6 + 1) * 3;\nLAB_0009e3d4:\n  iVar5 = *(int *)(iVar7 + 0x2ab0) + 0xe + iVar5;\n  uVar4 = *(int *)(iVar7 + 0x2ab4) + 10U >> 3;\n  *(int *)(iVar7 + 0x2ab0) = iVar5;\n  uVar2 = iVar5 + 10U >> 3;\n  uVar1 = uVar4;\n  if (uVar2 <= uVar4) {\n    uVar1 = uVar2;\n  }\n  if ((uVar1 < stored_len + 4) || (buf == (char *)0x0)) {\n    if (uVar4 <= uVar2) {\n      send_bits(eof + 2,3);\n      compress_block((ct_data *)(iVar7 + 0xe6c),(ct_data *)(iVar7 + 0x12ec));\n      init_block();\n      goto joined_r0x0009e65c;\n    }\n    pbVar3 = pbVar6 + (int)pbVar8;\n    send_bits(eof + 4,3);\n    iVar5 = *(int *)(iVar7 + 0x1418);\n    uVar2 = *(uint *)(iVar7 + 0x1434);\n    send_bits(iVar5 - 0x100,5);\n    send_bits(uVar2,5);\n    send_bits((uint)(pbVar6 + -3),4);\n    uVar1 = 0x10;\n    for (; send_bits((uint)*(ushort *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3), pbVar3 != pbVar8;\n        pbVar8 = pbVar8 + 1) {\n      uVar1 = (uint)pbVar8[1];\n    }\n    send_tree(tree,iVar5);\n    send_tree(tree_00,uVar2);\n    compress_block(tree,tree_00);\n  }\n  else {\n    pcVar9 = buf + stored_len;\n    send_bits(eof,3);\n    bi_windup();\n    put_16bit((ushort)stored_len);\n    put_16bit(~(ushort)stored_len);\n    for (; buf != pcVar9; buf = buf + 1) {\n      iVar5 = *(int *)(iVar7 + -0x10);\n      *(int *)(iVar7 + -0x10) = iVar5 + 1;\n      *(char *)(*(int *)(iVar7 + -0x3c) + iVar5) = *buf;\n      if (*(int *)(iVar7 + -0x10) == 0x4000) {\n        flush_outbuf();\n      }\n    }\n  }\n  init_block();\njoined_r0x0009e65c:\n  if (eof != 0) {\n    bi_windup();\n    return;\n  }\n  return;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "byte *pbVar3;" type_identifier (pointer_declarator "*pbVar3" * identifier) ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "byte *pbVar6;" type_identifier (pointer_declarator "*pbVar6" * identifier) ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "byte *pbVar8;" type_identifier (pointer_declarator "*pbVar8" * identifier) ;) (declaration "ct_data *tree;" type_identifier (pointer_declarator "*tree" * identifier) ;) (declaration "char *pcVar9;" primitive_type (pointer_declarator "*pcVar9" * identifier) ;) (declaration "ct_data *tree_00;" type_identifier (pointer_declarator "*tree_00" * identifier) ;) (expression_statement "iVar7 = *(int *)PTR_ptr_to_globals_0012a304;" (assignment_expression "iVar7 = *(int *)PTR_ptr_to_globals_0012a304" identifier = (pointer_expression "*(int *)PTR_ptr_to_globals_0012a304" * (cast_expression "(int *)PTR_ptr_to_globals_0012a304" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "tree = (ct_data *)(iVar7 + 0x484);" (assignment_expression "tree = (ct_data *)(iVar7 + 0x484)" identifier = (cast_expression "(ct_data *)(iVar7 + 0x484)" ( (type_descriptor "ct_data *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x484)" ( (binary_expression "iVar7 + 0x484" identifier + number_literal) )))) ;) (expression_statement "tree_00 = (ct_data *)(iVar7 + 0xd78);" (assignment_expression "tree_00 = (ct_data *)(iVar7 + 0xd78)" identifier = (cast_expression "(ct_data *)(iVar7 + 0xd78)" ( (type_descriptor "ct_data *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0xd78)" ( (binary_expression "iVar7 + 0xd78" identifier + number_literal) )))) ;) (expression_statement "*(undefined1 *)(iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0) = *(undefined1 *)(iVar7 + 0x2aac);" (assignment_expression "*(undefined1 *)(iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0) = *(undefined1 *)(iVar7 + 0x2aac)" (pointer_expression "*(undefined1 *)(iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0)" * (cast_expression "(undefined1 *)(iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0)" ( (binary_expression "iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0" (binary_expression "iVar7 + *(int *)(iVar7 + 0x2aa8)" identifier + (pointer_expression "*(int *)(iVar7 + 0x2aa8)" * (cast_expression "(int *)(iVar7 + 0x2aa8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x2aa8)" ( (binary_expression "iVar7 + 0x2aa8" identifier + number_literal) ))))) + number_literal) )))) = (pointer_expression "*(undefined1 *)(iVar7 + 0x2aac)" * (cast_expression "(undefined1 *)(iVar7 + 0x2aac)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x2aac)" ( (binary_expression "iVar7 + 0x2aac" identifier + number_literal) ))))) ;) (expression_statement "build_tree((tree_desc *)(iVar7 + 0x1400));" (call_expression "build_tree((tree_desc *)(iVar7 + 0x1400))" identifier (argument_list "((tree_desc *)(iVar7 + 0x1400))" ( (cast_expression "(tree_desc *)(iVar7 + 0x1400)" ( (type_descriptor "tree_desc *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x1400)" ( (binary_expression "iVar7 + 0x1400" identifier + number_literal) ))) ))) ;) (expression_statement "build_tree((tree_desc *)(iVar7 + 0x141c));" (call_expression "build_tree((tree_desc *)(iVar7 + 0x141c))" identifier (argument_list "((tree_desc *)(iVar7 + 0x141c))" ( (cast_expression "(tree_desc *)(iVar7 + 0x141c)" ( (type_descriptor "tree_desc *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x141c)" ( (binary_expression "iVar7 + 0x141c" identifier + number_literal) ))) ))) ;) (expression_statement "scan_tree(tree,*(int *)(iVar7 + 0x1418));" (call_expression "scan_tree(tree,*(int *)(iVar7 + 0x1418))" identifier (argument_list "(tree,*(int *)(iVar7 + 0x1418))" ( identifier , (pointer_expression "*(int *)(iVar7 + 0x1418)" * (cast_expression "(int *)(iVar7 + 0x1418)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x1418)" ( (binary_expression "iVar7 + 0x1418" identifier + number_literal) )))) ))) ;) (expression_statement "scan_tree(tree_00,*(int *)(iVar7 + 0x1434));" (call_expression "scan_tree(tree_00,*(int *)(iVar7 + 0x1434))" identifier (argument_list "(tree_00,*(int *)(iVar7 + 0x1434))" ( identifier , (pointer_expression "*(int *)(iVar7 + 0x1434)" * (cast_expression "(int *)(iVar7 + 0x1434)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x1434)" ( (binary_expression "iVar7 + 0x1434" identifier + number_literal) )))) ))) ;) (expression_statement "build_tree((tree_desc *)(iVar7 + 0x1438));" (call_expression "build_tree((tree_desc *)(iVar7 + 0x1438))" identifier (argument_list "((tree_desc *)(iVar7 + 0x1438))" ( (cast_expression "(tree_desc *)(iVar7 + 0x1438)" ( (type_descriptor "tree_desc *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x1438)" ( (binary_expression "iVar7 + 0x1438" identifier + number_literal) ))) ))) ;) (expression_statement "uVar1 = 0xf;" (assignment_expression "uVar1 = 0xf" identifier = number_literal) ;) (expression_statement "pbVar8 = PTR_s_<_W_q_v1_HxLJ_&uD_sa_____P)9__f_l_0012a1a8 + 0x7050;" (binary_expression "pbVar8 = PTR_s_<_W_q_v1_HxLJ_&uD_sa_____P)9__f_l_0012a1a8 + 0x7050" (assignment_expression "pbVar8 = PTR_s_<_W_q_v1_HxLJ_&uD_sa_____P" identifier = (binary_expression "PTR_s_<_W_q_v1_HxLJ_&uD_sa_____P" (binary_expression "PTR_s_<_W_q_v1_HxLJ_" identifier < identifier) & identifier)) (ERROR ")9__f_l_0012a1a8" ) number_literal identifier) + number_literal) ;) (expression_statement "pbVar3 = PTR_s_<_W_q_v1_HxLJ_&uD_sa_____P)9__f_l_0012a1a8 + 0x7061;" (binary_expression "pbVar3 = PTR_s_<_W_q_v1_HxLJ_&uD_sa_____P)9__f_l_0012a1a8 + 0x7061" (assignment_expression "pbVar3 = PTR_s_<_W_q_v1_HxLJ_&uD_sa_____P" identifier = (binary_expression "PTR_s_<_W_q_v1_HxLJ_&uD_sa_____P" (binary_expression "PTR_s_<_W_q_v1_HxLJ_" identifier < identifier) & identifier)) (ERROR ")9__f_l_0012a1a8" ) number_literal identifier) + number_literal) ;) (while_statement "while (pbVar6 = pbVar3 + (1 - (int)pbVar8), *(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6) == 0) {\n    if (PTR_s_<_W_q_v1_HxLJ_&uD_sa_____P)9__f_l_0012a1a8 + 0x7052 == pbVar3) {\n      iVar5 = 9;\n      pbVar6 = &SUB_00000002;\n      goto LAB_0009e3d4;\n    }\n    uVar1 = (uint)*pbVar3;\n    pbVar3 = pbVar3 + -1;\n  }" while (parenthesized_expression "(pbVar6 = pbVar3 + (1 - (int)pbVar8), *(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6) == 0)" ( (comma_expression "pbVar6 = pbVar3 + (1 - (int)pbVar8), *(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6) == 0" (assignment_expression "pbVar6 = pbVar3 + (1 - (int)pbVar8)" identifier = (binary_expression "pbVar3 + (1 - (int)pbVar8)" identifier + (parenthesized_expression "(1 - (int)pbVar8)" ( (binary_expression "1 - (int)pbVar8" number_literal - (cast_expression "(int)pbVar8" ( (type_descriptor "int" primitive_type) ) identifier)) )))) , (binary_expression "*(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6) == 0" (pointer_expression "*(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6)" * (cast_expression "(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + (uVar1 + 0x4d8) * 4 + 6)" ( (binary_expression "iVar7 + (uVar1 + 0x4d8) * 4 + 6" (binary_expression "iVar7 + (uVar1 + 0x4d8) * 4" identifier + (binary_expression "(uVar1 + 0x4d8) * 4" (parenthesized_expression "(uVar1 + 0x4d8)" ( (binary_expression "uVar1 + 0x4d8" identifier + number_literal) )) * number_literal)) + number_literal) )))) == number_literal)) )) (compound_statement "{\n    if (PTR_s_<_W_q_v1_HxLJ_&uD_sa_____P)9__f_l_0012a1a8 + 0x7052 == pbVar3) {\n      iVar5 = 9;\n      pbVar6 = &SUB_00000002;\n      goto LAB_0009e3d4;\n    }\n    uVar1 = (uint)*pbVar3;\n    pbVar3 = pbVar3 + -1;\n  }" { (if_statement "if (PTR_s_<_W_q_v1_HxLJ_&uD_sa_____P)9__f_l_0012a1a8 + 0x7052 == pbVar3) {\n      iVar5 = 9;\n      pbVar6 = &SUB_00000002;\n      goto LAB_0009e3d4;\n    }" if (parenthesized_expression "(PTR_s_<_W_q_v1_HxLJ_&uD_sa_____P)" ( (binary_expression "PTR_s_<_W_q_v1_HxLJ_&uD_sa_____P" (binary_expression "PTR_s_<_W_q_v1_HxLJ_" identifier < identifier) & identifier) )) (ERROR "9__f_l_0012a1a8 + 0x7052 == pbVar3)" number_literal (binary_expression "__f_l_0012a1a8 + 0x7052 == pbVar3" (binary_expression "__f_l_0012a1a8 + 0x7052" identifier + number_literal) == identifier) )) (compound_statement "{\n      iVar5 = 9;\n      pbVar6 = &SUB_00000002;\n      goto LAB_0009e3d4;\n    }" { (expression_statement "iVar5 = 9;" (assignment_expression "iVar5 = 9" identifier = number_literal) ;) (expression_statement "pbVar6 = &SUB_00000002;" (assignment_expression "pbVar6 = &SUB_00000002" identifier = (pointer_expression "&SUB_00000002" & identifier)) ;) (goto_statement "goto LAB_0009e3d4;" goto statement_identifier ;) })) (expression_statement "uVar1 = (uint)*pbVar3;" (assignment_expression "uVar1 = (uint)*pbVar3" identifier = (binary_expression "(uint)*pbVar3" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) (expression_statement "pbVar3 = pbVar3 + -1;" (assignment_expression "pbVar3 = pbVar3 + -1" identifier = (binary_expression "pbVar3 + -1" identifier + number_literal)) ;) })) (expression_statement "iVar5 = (int)(pbVar6 + 1) * 3;" (assignment_expression "iVar5 = (int)(pbVar6 + 1) * 3" identifier = (binary_expression "(int)(pbVar6 + 1) * 3" (cast_expression "(int)(pbVar6 + 1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(pbVar6 + 1)" ( (binary_expression "pbVar6 + 1" identifier + number_literal) ))) * number_literal)) ;) (labeled_statement "LAB_0009e3d4:\n  iVar5 = *(int *)(iVar7 + 0x2ab0) + 0xe + iVar5;" statement_identifier : (expression_statement "iVar5 = *(int *)(iVar7 + 0x2ab0) + 0xe + iVar5;" (assignment_expression "iVar5 = *(int *)(iVar7 + 0x2ab0) + 0xe + iVar5" identifier = (binary_expression "*(int *)(iVar7 + 0x2ab0) + 0xe + iVar5" (binary_expression "*(int *)(iVar7 + 0x2ab0) + 0xe" (pointer_expression "*(int *)(iVar7 + 0x2ab0)" * (cast_expression "(int *)(iVar7 + 0x2ab0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x2ab0)" ( (binary_expression "iVar7 + 0x2ab0" identifier + number_literal) )))) + number_literal) + identifier)) ;)) (expression_statement "uVar4 = *(int *)(iVar7 + 0x2ab4) + 10U >> 3;" (assignment_expression "uVar4 = *(int *)(iVar7 + 0x2ab4) + 10U >> 3" identifier = (binary_expression "*(int *)(iVar7 + 0x2ab4) + 10U >> 3" (binary_expression "*(int *)(iVar7 + 0x2ab4) + 10U" (pointer_expression "*(int *)(iVar7 + 0x2ab4)" * (cast_expression "(int *)(iVar7 + 0x2ab4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x2ab4)" ( (binary_expression "iVar7 + 0x2ab4" identifier + number_literal) )))) + number_literal) >> number_literal)) ;) (expression_statement "*(int *)(iVar7 + 0x2ab0) = iVar5;" (assignment_expression "*(int *)(iVar7 + 0x2ab0) = iVar5" (pointer_expression "*(int *)(iVar7 + 0x2ab0)" * (cast_expression "(int *)(iVar7 + 0x2ab0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x2ab0)" ( (binary_expression "iVar7 + 0x2ab0" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar2 = iVar5 + 10U >> 3;" (assignment_expression "uVar2 = iVar5 + 10U >> 3" identifier = (binary_expression "iVar5 + 10U >> 3" (binary_expression "iVar5 + 10U" identifier + number_literal) >> number_literal)) ;) (expression_statement "uVar1 = uVar4;" (assignment_expression "uVar1 = uVar4" identifier = identifier) ;) (if_statement "if (uVar2 <= uVar4) {\n    uVar1 = uVar2;\n  }" if (parenthesized_expression "(uVar2 <= uVar4)" ( (binary_expression "uVar2 <= uVar4" identifier <= identifier) )) (compound_statement "{\n    uVar1 = uVar2;\n  }" { (expression_statement "uVar1 = uVar2;" (assignment_expression "uVar1 = uVar2" identifier = identifier) ;) })) (if_statement "if ((uVar1 < stored_len + 4) || (buf == (char *)0x0)) {\n    if (uVar4 <= uVar2) {\n      send_bits(eof + 2,3);\n      compress_block((ct_data *)(iVar7 + 0xe6c),(ct_data *)(iVar7 + 0x12ec));\n      init_block();\n      goto joined_r0x0009e65c;\n    }\n    pbVar3 = pbVar6 + (int)pbVar8;\n    send_bits(eof + 4,3);\n    iVar5 = *(int *)(iVar7 + 0x1418);\n    uVar2 = *(uint *)(iVar7 + 0x1434);\n    send_bits(iVar5 - 0x100,5);\n    send_bits(uVar2,5);\n    send_bits((uint)(pbVar6 + -3),4);\n    uVar1 = 0x10;\n    for (; send_bits((uint)*(ushort *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3), pbVar3 != pbVar8;\n        pbVar8 = pbVar8 + 1) {\n      uVar1 = (uint)pbVar8[1];\n    }\n    send_tree(tree,iVar5);\n    send_tree(tree_00,uVar2);\n    compress_block(tree,tree_00);\n  }\n  else {\n    pcVar9 = buf + stored_len;\n    send_bits(eof,3);\n    bi_windup();\n    put_16bit((ushort)stored_len);\n    put_16bit(~(ushort)stored_len);\n    for (; buf != pcVar9; buf = buf + 1) {\n      iVar5 = *(int *)(iVar7 + -0x10);\n      *(int *)(iVar7 + -0x10) = iVar5 + 1;\n      *(char *)(*(int *)(iVar7 + -0x3c) + iVar5) = *buf;\n      if (*(int *)(iVar7 + -0x10) == 0x4000) {\n        flush_outbuf();\n      }\n    }\n  }" if (parenthesized_expression "((uVar1 < stored_len + 4) || (buf == (char *)0x0))" ( (binary_expression "(uVar1 < stored_len + 4) || (buf == (char *)0x0)" (parenthesized_expression "(uVar1 < stored_len + 4)" ( (binary_expression "uVar1 < stored_len + 4" identifier < (binary_expression "stored_len + 4" identifier + number_literal)) )) || (parenthesized_expression "(buf == (char *)0x0)" ( (binary_expression "buf == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n    if (uVar4 <= uVar2) {\n      send_bits(eof + 2,3);\n      compress_block((ct_data *)(iVar7 + 0xe6c),(ct_data *)(iVar7 + 0x12ec));\n      init_block();\n      goto joined_r0x0009e65c;\n    }\n    pbVar3 = pbVar6 + (int)pbVar8;\n    send_bits(eof + 4,3);\n    iVar5 = *(int *)(iVar7 + 0x1418);\n    uVar2 = *(uint *)(iVar7 + 0x1434);\n    send_bits(iVar5 - 0x100,5);\n    send_bits(uVar2,5);\n    send_bits((uint)(pbVar6 + -3),4);\n    uVar1 = 0x10;\n    for (; send_bits((uint)*(ushort *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3), pbVar3 != pbVar8;\n        pbVar8 = pbVar8 + 1) {\n      uVar1 = (uint)pbVar8[1];\n    }\n    send_tree(tree,iVar5);\n    send_tree(tree_00,uVar2);\n    compress_block(tree,tree_00);\n  }" { (if_statement "if (uVar4 <= uVar2) {\n      send_bits(eof + 2,3);\n      compress_block((ct_data *)(iVar7 + 0xe6c),(ct_data *)(iVar7 + 0x12ec));\n      init_block();\n      goto joined_r0x0009e65c;\n    }" if (parenthesized_expression "(uVar4 <= uVar2)" ( (binary_expression "uVar4 <= uVar2" identifier <= identifier) )) (compound_statement "{\n      send_bits(eof + 2,3);\n      compress_block((ct_data *)(iVar7 + 0xe6c),(ct_data *)(iVar7 + 0x12ec));\n      init_block();\n      goto joined_r0x0009e65c;\n    }" { (expression_statement "send_bits(eof + 2,3);" (call_expression "send_bits(eof + 2,3)" identifier (argument_list "(eof + 2,3)" ( (binary_expression "eof + 2" identifier + number_literal) , number_literal ))) ;) (expression_statement "compress_block((ct_data *)(iVar7 + 0xe6c),(ct_data *)(iVar7 + 0x12ec));" (call_expression "compress_block((ct_data *)(iVar7 + 0xe6c),(ct_data *)(iVar7 + 0x12ec))" identifier (argument_list "((ct_data *)(iVar7 + 0xe6c),(ct_data *)(iVar7 + 0x12ec))" ( (cast_expression "(ct_data *)(iVar7 + 0xe6c)" ( (type_descriptor "ct_data *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0xe6c)" ( (binary_expression "iVar7 + 0xe6c" identifier + number_literal) ))) , (cast_expression "(ct_data *)(iVar7 + 0x12ec)" ( (type_descriptor "ct_data *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x12ec)" ( (binary_expression "iVar7 + 0x12ec" identifier + number_literal) ))) ))) ;) (expression_statement "init_block();" (call_expression "init_block()" identifier (argument_list "()" ( ))) ;) (goto_statement "goto joined_r0x0009e65c;" goto statement_identifier ;) })) (expression_statement "pbVar3 = pbVar6 + (int)pbVar8;" (assignment_expression "pbVar3 = pbVar6 + (int)pbVar8" identifier = (binary_expression "pbVar6 + (int)pbVar8" identifier + (cast_expression "(int)pbVar8" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "send_bits(eof + 4,3);" (call_expression "send_bits(eof + 4,3)" identifier (argument_list "(eof + 4,3)" ( (binary_expression "eof + 4" identifier + number_literal) , number_literal ))) ;) (expression_statement "iVar5 = *(int *)(iVar7 + 0x1418);" (assignment_expression "iVar5 = *(int *)(iVar7 + 0x1418)" identifier = (pointer_expression "*(int *)(iVar7 + 0x1418)" * (cast_expression "(int *)(iVar7 + 0x1418)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x1418)" ( (binary_expression "iVar7 + 0x1418" identifier + number_literal) ))))) ;) (expression_statement "uVar2 = *(uint *)(iVar7 + 0x1434);" (assignment_expression "uVar2 = *(uint *)(iVar7 + 0x1434)" identifier = (pointer_expression "*(uint *)(iVar7 + 0x1434)" * (cast_expression "(uint *)(iVar7 + 0x1434)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x1434)" ( (binary_expression "iVar7 + 0x1434" identifier + number_literal) ))))) ;) (expression_statement "send_bits(iVar5 - 0x100,5);" (call_expression "send_bits(iVar5 - 0x100,5)" identifier (argument_list "(iVar5 - 0x100,5)" ( (binary_expression "iVar5 - 0x100" identifier - number_literal) , number_literal ))) ;) (expression_statement "send_bits(uVar2,5);" (call_expression "send_bits(uVar2,5)" identifier (argument_list "(uVar2,5)" ( identifier , number_literal ))) ;) (expression_statement "send_bits((uint)(pbVar6 + -3),4);" (call_expression "send_bits((uint)(pbVar6 + -3),4)" identifier (argument_list "((uint)(pbVar6 + -3),4)" ( (call_expression "(uint)(pbVar6 + -3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(pbVar6 + -3)" ( (binary_expression "pbVar6 + -3" identifier + number_literal) ))) , number_literal ))) ;) (expression_statement "uVar1 = 0x10;" (assignment_expression "uVar1 = 0x10" identifier = number_literal) ;) (for_statement "for (; send_bits((uint)*(ushort *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3), pbVar3 != pbVar8;\n        pbVar8 = pbVar8 + 1) {\n      uVar1 = (uint)pbVar8[1];\n    }" for ( ; (comma_expression "send_bits((uint)*(ushort *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3), pbVar3 != pbVar8" (call_expression "send_bits((uint)*(ushort *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3)" identifier (argument_list "((uint)*(ushort *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3)" ( (binary_expression "(uint)*(ushort *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + (uVar1 + 0x4d8) * 4 + 6)" ( (binary_expression "iVar7 + (uVar1 + 0x4d8) * 4 + 6" (binary_expression "iVar7 + (uVar1 + 0x4d8) * 4" identifier + (binary_expression "(uVar1 + 0x4d8) * 4" (parenthesized_expression "(uVar1 + 0x4d8)" ( (binary_expression "uVar1 + 0x4d8" identifier + number_literal) )) * number_literal)) + number_literal) )))) , number_literal ))) , (binary_expression "pbVar3 != pbVar8" identifier != identifier)) ; (assignment_expression "pbVar8 = pbVar8 + 1" identifier = (binary_expression "pbVar8 + 1" identifier + number_literal)) ) (compound_statement "{\n      uVar1 = (uint)pbVar8[1];\n    }" { (expression_statement "uVar1 = (uint)pbVar8[1];" (assignment_expression "uVar1 = (uint)pbVar8[1]" identifier = (cast_expression "(uint)pbVar8[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "pbVar8[1]" identifier [ number_literal ]))) ;) })) (expression_statement "send_tree(tree,iVar5);" (call_expression "send_tree(tree,iVar5)" identifier (argument_list "(tree,iVar5)" ( identifier , identifier ))) ;) (expression_statement "send_tree(tree_00,uVar2);" (call_expression "send_tree(tree_00,uVar2)" identifier (argument_list "(tree_00,uVar2)" ( identifier , identifier ))) ;) (expression_statement "compress_block(tree,tree_00);" (call_expression "compress_block(tree,tree_00)" identifier (argument_list "(tree,tree_00)" ( identifier , identifier ))) ;) }) (else_clause "else {\n    pcVar9 = buf + stored_len;\n    send_bits(eof,3);\n    bi_windup();\n    put_16bit((ushort)stored_len);\n    put_16bit(~(ushort)stored_len);\n    for (; buf != pcVar9; buf = buf + 1) {\n      iVar5 = *(int *)(iVar7 + -0x10);\n      *(int *)(iVar7 + -0x10) = iVar5 + 1;\n      *(char *)(*(int *)(iVar7 + -0x3c) + iVar5) = *buf;\n      if (*(int *)(iVar7 + -0x10) == 0x4000) {\n        flush_outbuf();\n      }\n    }\n  }" else (compound_statement "{\n    pcVar9 = buf + stored_len;\n    send_bits(eof,3);\n    bi_windup();\n    put_16bit((ushort)stored_len);\n    put_16bit(~(ushort)stored_len);\n    for (; buf != pcVar9; buf = buf + 1) {\n      iVar5 = *(int *)(iVar7 + -0x10);\n      *(int *)(iVar7 + -0x10) = iVar5 + 1;\n      *(char *)(*(int *)(iVar7 + -0x3c) + iVar5) = *buf;\n      if (*(int *)(iVar7 + -0x10) == 0x4000) {\n        flush_outbuf();\n      }\n    }\n  }" { (expression_statement "pcVar9 = buf + stored_len;" (assignment_expression "pcVar9 = buf + stored_len" identifier = (binary_expression "buf + stored_len" identifier + identifier)) ;) (expression_statement "send_bits(eof,3);" (call_expression "send_bits(eof,3)" identifier (argument_list "(eof,3)" ( identifier , number_literal ))) ;) (expression_statement "bi_windup();" (call_expression "bi_windup()" identifier (argument_list "()" ( ))) ;) (expression_statement "put_16bit((ushort)stored_len);" (call_expression "put_16bit((ushort)stored_len)" identifier (argument_list "((ushort)stored_len)" ( (cast_expression "(ushort)stored_len" ( (type_descriptor "ushort" type_identifier) ) identifier) ))) ;) (expression_statement "put_16bit(~(ushort)stored_len);" (call_expression "put_16bit(~(ushort)stored_len)" identifier (argument_list "(~(ushort)stored_len)" ( (unary_expression "~(ushort)stored_len" ~ (cast_expression "(ushort)stored_len" ( (type_descriptor "ushort" type_identifier) ) identifier)) ))) ;) (for_statement "for (; buf != pcVar9; buf = buf + 1) {\n      iVar5 = *(int *)(iVar7 + -0x10);\n      *(int *)(iVar7 + -0x10) = iVar5 + 1;\n      *(char *)(*(int *)(iVar7 + -0x3c) + iVar5) = *buf;\n      if (*(int *)(iVar7 + -0x10) == 0x4000) {\n        flush_outbuf();\n      }\n    }" for ( ; (binary_expression "buf != pcVar9" identifier != identifier) ; (assignment_expression "buf = buf + 1" identifier = (binary_expression "buf + 1" identifier + number_literal)) ) (compound_statement "{\n      iVar5 = *(int *)(iVar7 + -0x10);\n      *(int *)(iVar7 + -0x10) = iVar5 + 1;\n      *(char *)(*(int *)(iVar7 + -0x3c) + iVar5) = *buf;\n      if (*(int *)(iVar7 + -0x10) == 0x4000) {\n        flush_outbuf();\n      }\n    }" { (expression_statement "iVar5 = *(int *)(iVar7 + -0x10);" (assignment_expression "iVar5 = *(int *)(iVar7 + -0x10)" identifier = (pointer_expression "*(int *)(iVar7 + -0x10)" * (cast_expression "(int *)(iVar7 + -0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + -0x10)" ( (binary_expression "iVar7 + -0x10" identifier + number_literal) ))))) ;) (expression_statement "*(int *)(iVar7 + -0x10) = iVar5 + 1;" (assignment_expression "*(int *)(iVar7 + -0x10) = iVar5 + 1" (pointer_expression "*(int *)(iVar7 + -0x10)" * (cast_expression "(int *)(iVar7 + -0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + -0x10)" ( (binary_expression "iVar7 + -0x10" identifier + number_literal) )))) = (binary_expression "iVar5 + 1" identifier + number_literal)) ;) (expression_statement "*(char *)(*(int *)(iVar7 + -0x3c) + iVar5) = *buf;" (assignment_expression "*(char *)(*(int *)(iVar7 + -0x3c) + iVar5) = *buf" (pointer_expression "*(char *)(*(int *)(iVar7 + -0x3c) + iVar5)" * (cast_expression "(char *)(*(int *)(iVar7 + -0x3c) + iVar5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(iVar7 + -0x3c) + iVar5)" ( (binary_expression "*(int *)(iVar7 + -0x3c) + iVar5" (pointer_expression "*(int *)(iVar7 + -0x3c)" * (cast_expression "(int *)(iVar7 + -0x3c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + -0x3c)" ( (binary_expression "iVar7 + -0x3c" identifier + number_literal) )))) + identifier) )))) = (pointer_expression "*buf" * identifier)) ;) (if_statement "if (*(int *)(iVar7 + -0x10) == 0x4000) {\n        flush_outbuf();\n      }" if (parenthesized_expression "(*(int *)(iVar7 + -0x10) == 0x4000)" ( (binary_expression "*(int *)(iVar7 + -0x10) == 0x4000" (pointer_expression "*(int *)(iVar7 + -0x10)" * (cast_expression "(int *)(iVar7 + -0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + -0x10)" ( (binary_expression "iVar7 + -0x10" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n        flush_outbuf();\n      }" { (expression_statement "flush_outbuf();" (call_expression "flush_outbuf()" identifier (argument_list "()" ( ))) ;) })) })) }))) (expression_statement "init_block();" (call_expression "init_block()" identifier (argument_list "()" ( ))) ;) (labeled_statement "joined_r0x0009e65c:\n  if (eof != 0) {\n    bi_windup();\n    return;\n  }" statement_identifier : (if_statement "if (eof != 0) {\n    bi_windup();\n    return;\n  }" if (parenthesized_expression "(eof != 0)" ( (binary_expression "eof != 0" identifier != number_literal) )) (compound_statement "{\n    bi_windup();\n    return;\n  }" { (expression_statement "bi_windup();" (call_expression "bi_windup()" identifier (argument_list "()" ( ))) ;) (return_statement "return;" return ;) }))) (return_statement "return;" return ;) })))
(translation_unit "void FUN_0009e2c0(undefined1 *param_1,uint param_2,int param_3)\n\n{\n  uint uVar1;\n  uint uVar2;\n  byte *pbVar3;\n  uint uVar4;\n  int iVar5;\n  byte *pbVar6;\n  int iVar7;\n  byte *pbVar8;\n  int iVar9;\n  undefined1 *puVar10;\n  int iVar11;\n  undefined4 uVar12;\n  \n  iVar7 = *(int *)PTR_DAT_0012a304;\n  iVar9 = iVar7 + 0x484;\n  iVar11 = iVar7 + 0xd78;\n  *(undefined1 *)(iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0) = *(undefined1 *)(iVar7 + 0x2aac);\n  FUN_0009d144(iVar7 + 0x1400);\n  FUN_0009d144(iVar7 + 0x141c);\n  FUN_0009d61c(iVar9,*(undefined4 *)(iVar7 + 0x1418));\n  FUN_0009d61c(iVar11,*(undefined4 *)(iVar7 + 0x1434));\n  FUN_0009d144(iVar7 + 0x1438);\n  uVar1 = 0xf;\n  pbVar8 = PTR_FUN_0012a1a8 + 0x7050;\n  pbVar3 = PTR_FUN_0012a1a8 + 0x7061;\n  while (pbVar6 = pbVar3 + (1 - (int)pbVar8), *(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6) == 0) {\n    if (PTR_FUN_0012a1a8 + 0x7052 == pbVar3) {\n      iVar5 = 9;\n      pbVar6 = &SUB_00000002;\n      goto LAB_0009e3d4;\n    }\n    uVar1 = (uint)*pbVar3;\n    pbVar3 = pbVar3 + -1;\n  }\n  iVar5 = (int)(pbVar6 + 1) * 3;\nLAB_0009e3d4:\n  iVar5 = *(int *)(iVar7 + 0x2ab0) + 0xe + iVar5;\n  uVar4 = *(int *)(iVar7 + 0x2ab4) + 10U >> 3;\n  *(int *)(iVar7 + 0x2ab0) = iVar5;\n  uVar2 = iVar5 + 10U >> 3;\n  uVar1 = uVar4;\n  if (uVar2 <= uVar4) {\n    uVar1 = uVar2;\n  }\n  if ((uVar1 < param_2 + 4) || (param_1 == (undefined1 *)0x0)) {\n    if (uVar4 <= uVar2) {\n      FUN_0009dcd4(param_3 + 2,3);\n      FUN_0009df98(iVar7 + 0xe6c,iVar7 + 0x12ec);\n      FUN_0009ceb0();\n      goto joined_r0x0009e65c;\n    }\n    pbVar3 = pbVar6 + (int)pbVar8;\n    FUN_0009dcd4(param_3 + 4,3);\n    iVar5 = *(int *)(iVar7 + 0x1418);\n    uVar12 = *(undefined4 *)(iVar7 + 0x1434);\n    FUN_0009dcd4(iVar5 + -0x100,5);\n    FUN_0009dcd4(uVar12,5);\n    FUN_0009dcd4(pbVar6 + -3,4);\n    uVar1 = 0x10;\n    for (; FUN_0009dcd4(*(undefined2 *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3), pbVar3 != pbVar8;\n        pbVar8 = pbVar8 + 1) {\n      uVar1 = (uint)pbVar8[1];\n    }\n    FUN_0009dd80(iVar9,iVar5);\n    FUN_0009dd80(iVar11,uVar12);\n    FUN_0009df98(iVar9,iVar11);\n  }\n  else {\n    puVar10 = param_1 + param_2;\n    FUN_0009dcd4(param_3,3);\n    FUN_0009e1f4();\n    FUN_0009dc0c(param_2 & 0xffff);\n    FUN_0009dc0c(~param_2 & 0xffff);\n    for (; param_1 != puVar10; param_1 = param_1 + 1) {\n      iVar9 = *(int *)(iVar7 + -0x10);\n      *(int *)(iVar7 + -0x10) = iVar9 + 1;\n      *(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9) = *param_1;\n      if (*(int *)(iVar7 + -0x10) == 0x4000) {\n        FUN_0009dbac();\n      }\n    }\n  }\n  FUN_0009ceb0();\njoined_r0x0009e65c:\n  if (param_3 != 0) {\n    FUN_0009e1f4();\n    return;\n  }\n  return;\n}\n\n" (function_definition "void FUN_0009e2c0(undefined1 *param_1,uint param_2,int param_3)\n\n{\n  uint uVar1;\n  uint uVar2;\n  byte *pbVar3;\n  uint uVar4;\n  int iVar5;\n  byte *pbVar6;\n  int iVar7;\n  byte *pbVar8;\n  int iVar9;\n  undefined1 *puVar10;\n  int iVar11;\n  undefined4 uVar12;\n  \n  iVar7 = *(int *)PTR_DAT_0012a304;\n  iVar9 = iVar7 + 0x484;\n  iVar11 = iVar7 + 0xd78;\n  *(undefined1 *)(iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0) = *(undefined1 *)(iVar7 + 0x2aac);\n  FUN_0009d144(iVar7 + 0x1400);\n  FUN_0009d144(iVar7 + 0x141c);\n  FUN_0009d61c(iVar9,*(undefined4 *)(iVar7 + 0x1418));\n  FUN_0009d61c(iVar11,*(undefined4 *)(iVar7 + 0x1434));\n  FUN_0009d144(iVar7 + 0x1438);\n  uVar1 = 0xf;\n  pbVar8 = PTR_FUN_0012a1a8 + 0x7050;\n  pbVar3 = PTR_FUN_0012a1a8 + 0x7061;\n  while (pbVar6 = pbVar3 + (1 - (int)pbVar8), *(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6) == 0) {\n    if (PTR_FUN_0012a1a8 + 0x7052 == pbVar3) {\n      iVar5 = 9;\n      pbVar6 = &SUB_00000002;\n      goto LAB_0009e3d4;\n    }\n    uVar1 = (uint)*pbVar3;\n    pbVar3 = pbVar3 + -1;\n  }\n  iVar5 = (int)(pbVar6 + 1) * 3;\nLAB_0009e3d4:\n  iVar5 = *(int *)(iVar7 + 0x2ab0) + 0xe + iVar5;\n  uVar4 = *(int *)(iVar7 + 0x2ab4) + 10U >> 3;\n  *(int *)(iVar7 + 0x2ab0) = iVar5;\n  uVar2 = iVar5 + 10U >> 3;\n  uVar1 = uVar4;\n  if (uVar2 <= uVar4) {\n    uVar1 = uVar2;\n  }\n  if ((uVar1 < param_2 + 4) || (param_1 == (undefined1 *)0x0)) {\n    if (uVar4 <= uVar2) {\n      FUN_0009dcd4(param_3 + 2,3);\n      FUN_0009df98(iVar7 + 0xe6c,iVar7 + 0x12ec);\n      FUN_0009ceb0();\n      goto joined_r0x0009e65c;\n    }\n    pbVar3 = pbVar6 + (int)pbVar8;\n    FUN_0009dcd4(param_3 + 4,3);\n    iVar5 = *(int *)(iVar7 + 0x1418);\n    uVar12 = *(undefined4 *)(iVar7 + 0x1434);\n    FUN_0009dcd4(iVar5 + -0x100,5);\n    FUN_0009dcd4(uVar12,5);\n    FUN_0009dcd4(pbVar6 + -3,4);\n    uVar1 = 0x10;\n    for (; FUN_0009dcd4(*(undefined2 *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3), pbVar3 != pbVar8;\n        pbVar8 = pbVar8 + 1) {\n      uVar1 = (uint)pbVar8[1];\n    }\n    FUN_0009dd80(iVar9,iVar5);\n    FUN_0009dd80(iVar11,uVar12);\n    FUN_0009df98(iVar9,iVar11);\n  }\n  else {\n    puVar10 = param_1 + param_2;\n    FUN_0009dcd4(param_3,3);\n    FUN_0009e1f4();\n    FUN_0009dc0c(param_2 & 0xffff);\n    FUN_0009dc0c(~param_2 & 0xffff);\n    for (; param_1 != puVar10; param_1 = param_1 + 1) {\n      iVar9 = *(int *)(iVar7 + -0x10);\n      *(int *)(iVar7 + -0x10) = iVar9 + 1;\n      *(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9) = *param_1;\n      if (*(int *)(iVar7 + -0x10) == 0x4000) {\n        FUN_0009dbac();\n      }\n    }\n  }\n  FUN_0009ceb0();\njoined_r0x0009e65c:\n  if (param_3 != 0) {\n    FUN_0009e1f4();\n    return;\n  }\n  return;\n}" primitive_type (function_declarator "FUN_0009e2c0(undefined1 *param_1,uint param_2,int param_3)" identifier (parameter_list "(undefined1 *param_1,uint param_2,int param_3)" ( (parameter_declaration "undefined1 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  uint uVar1;\n  uint uVar2;\n  byte *pbVar3;\n  uint uVar4;\n  int iVar5;\n  byte *pbVar6;\n  int iVar7;\n  byte *pbVar8;\n  int iVar9;\n  undefined1 *puVar10;\n  int iVar11;\n  undefined4 uVar12;\n  \n  iVar7 = *(int *)PTR_DAT_0012a304;\n  iVar9 = iVar7 + 0x484;\n  iVar11 = iVar7 + 0xd78;\n  *(undefined1 *)(iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0) = *(undefined1 *)(iVar7 + 0x2aac);\n  FUN_0009d144(iVar7 + 0x1400);\n  FUN_0009d144(iVar7 + 0x141c);\n  FUN_0009d61c(iVar9,*(undefined4 *)(iVar7 + 0x1418));\n  FUN_0009d61c(iVar11,*(undefined4 *)(iVar7 + 0x1434));\n  FUN_0009d144(iVar7 + 0x1438);\n  uVar1 = 0xf;\n  pbVar8 = PTR_FUN_0012a1a8 + 0x7050;\n  pbVar3 = PTR_FUN_0012a1a8 + 0x7061;\n  while (pbVar6 = pbVar3 + (1 - (int)pbVar8), *(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6) == 0) {\n    if (PTR_FUN_0012a1a8 + 0x7052 == pbVar3) {\n      iVar5 = 9;\n      pbVar6 = &SUB_00000002;\n      goto LAB_0009e3d4;\n    }\n    uVar1 = (uint)*pbVar3;\n    pbVar3 = pbVar3 + -1;\n  }\n  iVar5 = (int)(pbVar6 + 1) * 3;\nLAB_0009e3d4:\n  iVar5 = *(int *)(iVar7 + 0x2ab0) + 0xe + iVar5;\n  uVar4 = *(int *)(iVar7 + 0x2ab4) + 10U >> 3;\n  *(int *)(iVar7 + 0x2ab0) = iVar5;\n  uVar2 = iVar5 + 10U >> 3;\n  uVar1 = uVar4;\n  if (uVar2 <= uVar4) {\n    uVar1 = uVar2;\n  }\n  if ((uVar1 < param_2 + 4) || (param_1 == (undefined1 *)0x0)) {\n    if (uVar4 <= uVar2) {\n      FUN_0009dcd4(param_3 + 2,3);\n      FUN_0009df98(iVar7 + 0xe6c,iVar7 + 0x12ec);\n      FUN_0009ceb0();\n      goto joined_r0x0009e65c;\n    }\n    pbVar3 = pbVar6 + (int)pbVar8;\n    FUN_0009dcd4(param_3 + 4,3);\n    iVar5 = *(int *)(iVar7 + 0x1418);\n    uVar12 = *(undefined4 *)(iVar7 + 0x1434);\n    FUN_0009dcd4(iVar5 + -0x100,5);\n    FUN_0009dcd4(uVar12,5);\n    FUN_0009dcd4(pbVar6 + -3,4);\n    uVar1 = 0x10;\n    for (; FUN_0009dcd4(*(undefined2 *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3), pbVar3 != pbVar8;\n        pbVar8 = pbVar8 + 1) {\n      uVar1 = (uint)pbVar8[1];\n    }\n    FUN_0009dd80(iVar9,iVar5);\n    FUN_0009dd80(iVar11,uVar12);\n    FUN_0009df98(iVar9,iVar11);\n  }\n  else {\n    puVar10 = param_1 + param_2;\n    FUN_0009dcd4(param_3,3);\n    FUN_0009e1f4();\n    FUN_0009dc0c(param_2 & 0xffff);\n    FUN_0009dc0c(~param_2 & 0xffff);\n    for (; param_1 != puVar10; param_1 = param_1 + 1) {\n      iVar9 = *(int *)(iVar7 + -0x10);\n      *(int *)(iVar7 + -0x10) = iVar9 + 1;\n      *(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9) = *param_1;\n      if (*(int *)(iVar7 + -0x10) == 0x4000) {\n        FUN_0009dbac();\n      }\n    }\n  }\n  FUN_0009ceb0();\njoined_r0x0009e65c:\n  if (param_3 != 0) {\n    FUN_0009e1f4();\n    return;\n  }\n  return;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "byte *pbVar3;" type_identifier (pointer_declarator "*pbVar3" * identifier) ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "byte *pbVar6;" type_identifier (pointer_declarator "*pbVar6" * identifier) ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "byte *pbVar8;" type_identifier (pointer_declarator "*pbVar8" * identifier) ;) (declaration "int iVar9;" primitive_type identifier ;) (declaration "undefined1 *puVar10;" type_identifier (pointer_declarator "*puVar10" * identifier) ;) (declaration "int iVar11;" primitive_type identifier ;) (declaration "undefined4 uVar12;" type_identifier identifier ;) (expression_statement "iVar7 = *(int *)PTR_DAT_0012a304;" (assignment_expression "iVar7 = *(int *)PTR_DAT_0012a304" identifier = (pointer_expression "*(int *)PTR_DAT_0012a304" * (cast_expression "(int *)PTR_DAT_0012a304" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "iVar9 = iVar7 + 0x484;" (assignment_expression "iVar9 = iVar7 + 0x484" identifier = (binary_expression "iVar7 + 0x484" identifier + number_literal)) ;) (expression_statement "iVar11 = iVar7 + 0xd78;" (assignment_expression "iVar11 = iVar7 + 0xd78" identifier = (binary_expression "iVar7 + 0xd78" identifier + number_literal)) ;) (expression_statement "*(undefined1 *)(iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0) = *(undefined1 *)(iVar7 + 0x2aac);" (assignment_expression "*(undefined1 *)(iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0) = *(undefined1 *)(iVar7 + 0x2aac)" (pointer_expression "*(undefined1 *)(iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0)" * (cast_expression "(undefined1 *)(iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0)" ( (binary_expression "iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0" (binary_expression "iVar7 + *(int *)(iVar7 + 0x2aa8)" identifier + (pointer_expression "*(int *)(iVar7 + 0x2aa8)" * (cast_expression "(int *)(iVar7 + 0x2aa8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x2aa8)" ( (binary_expression "iVar7 + 0x2aa8" identifier + number_literal) ))))) + number_literal) )))) = (pointer_expression "*(undefined1 *)(iVar7 + 0x2aac)" * (cast_expression "(undefined1 *)(iVar7 + 0x2aac)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x2aac)" ( (binary_expression "iVar7 + 0x2aac" identifier + number_literal) ))))) ;) (expression_statement "FUN_0009d144(iVar7 + 0x1400);" (call_expression "FUN_0009d144(iVar7 + 0x1400)" identifier (argument_list "(iVar7 + 0x1400)" ( (binary_expression "iVar7 + 0x1400" identifier + number_literal) ))) ;) (expression_statement "FUN_0009d144(iVar7 + 0x141c);" (call_expression "FUN_0009d144(iVar7 + 0x141c)" identifier (argument_list "(iVar7 + 0x141c)" ( (binary_expression "iVar7 + 0x141c" identifier + number_literal) ))) ;) (expression_statement "FUN_0009d61c(iVar9,*(undefined4 *)(iVar7 + 0x1418));" (call_expression "FUN_0009d61c(iVar9,*(undefined4 *)(iVar7 + 0x1418))" identifier (argument_list "(iVar9,*(undefined4 *)(iVar7 + 0x1418))" ( identifier , (pointer_expression "*(undefined4 *)(iVar7 + 0x1418)" * (cast_expression "(undefined4 *)(iVar7 + 0x1418)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x1418)" ( (binary_expression "iVar7 + 0x1418" identifier + number_literal) )))) ))) ;) (expression_statement "FUN_0009d61c(iVar11,*(undefined4 *)(iVar7 + 0x1434));" (call_expression "FUN_0009d61c(iVar11,*(undefined4 *)(iVar7 + 0x1434))" identifier (argument_list "(iVar11,*(undefined4 *)(iVar7 + 0x1434))" ( identifier , (pointer_expression "*(undefined4 *)(iVar7 + 0x1434)" * (cast_expression "(undefined4 *)(iVar7 + 0x1434)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x1434)" ( (binary_expression "iVar7 + 0x1434" identifier + number_literal) )))) ))) ;) (expression_statement "FUN_0009d144(iVar7 + 0x1438);" (call_expression "FUN_0009d144(iVar7 + 0x1438)" identifier (argument_list "(iVar7 + 0x1438)" ( (binary_expression "iVar7 + 0x1438" identifier + number_literal) ))) ;) (expression_statement "uVar1 = 0xf;" (assignment_expression "uVar1 = 0xf" identifier = number_literal) ;) (expression_statement "pbVar8 = PTR_FUN_0012a1a8 + 0x7050;" (assignment_expression "pbVar8 = PTR_FUN_0012a1a8 + 0x7050" identifier = (binary_expression "PTR_FUN_0012a1a8 + 0x7050" identifier + number_literal)) ;) (expression_statement "pbVar3 = PTR_FUN_0012a1a8 + 0x7061;" (assignment_expression "pbVar3 = PTR_FUN_0012a1a8 + 0x7061" identifier = (binary_expression "PTR_FUN_0012a1a8 + 0x7061" identifier + number_literal)) ;) (while_statement "while (pbVar6 = pbVar3 + (1 - (int)pbVar8), *(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6) == 0) {\n    if (PTR_FUN_0012a1a8 + 0x7052 == pbVar3) {\n      iVar5 = 9;\n      pbVar6 = &SUB_00000002;\n      goto LAB_0009e3d4;\n    }\n    uVar1 = (uint)*pbVar3;\n    pbVar3 = pbVar3 + -1;\n  }" while (parenthesized_expression "(pbVar6 = pbVar3 + (1 - (int)pbVar8), *(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6) == 0)" ( (comma_expression "pbVar6 = pbVar3 + (1 - (int)pbVar8), *(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6) == 0" (assignment_expression "pbVar6 = pbVar3 + (1 - (int)pbVar8)" identifier = (binary_expression "pbVar3 + (1 - (int)pbVar8)" identifier + (parenthesized_expression "(1 - (int)pbVar8)" ( (binary_expression "1 - (int)pbVar8" number_literal - (cast_expression "(int)pbVar8" ( (type_descriptor "int" primitive_type) ) identifier)) )))) , (binary_expression "*(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6) == 0" (pointer_expression "*(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6)" * (cast_expression "(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + (uVar1 + 0x4d8) * 4 + 6)" ( (binary_expression "iVar7 + (uVar1 + 0x4d8) * 4 + 6" (binary_expression "iVar7 + (uVar1 + 0x4d8) * 4" identifier + (binary_expression "(uVar1 + 0x4d8) * 4" (parenthesized_expression "(uVar1 + 0x4d8)" ( (binary_expression "uVar1 + 0x4d8" identifier + number_literal) )) * number_literal)) + number_literal) )))) == number_literal)) )) (compound_statement "{\n    if (PTR_FUN_0012a1a8 + 0x7052 == pbVar3) {\n      iVar5 = 9;\n      pbVar6 = &SUB_00000002;\n      goto LAB_0009e3d4;\n    }\n    uVar1 = (uint)*pbVar3;\n    pbVar3 = pbVar3 + -1;\n  }" { (if_statement "if (PTR_FUN_0012a1a8 + 0x7052 == pbVar3) {\n      iVar5 = 9;\n      pbVar6 = &SUB_00000002;\n      goto LAB_0009e3d4;\n    }" if (parenthesized_expression "(PTR_FUN_0012a1a8 + 0x7052 == pbVar3)" ( (binary_expression "PTR_FUN_0012a1a8 + 0x7052 == pbVar3" (binary_expression "PTR_FUN_0012a1a8 + 0x7052" identifier + number_literal) == identifier) )) (compound_statement "{\n      iVar5 = 9;\n      pbVar6 = &SUB_00000002;\n      goto LAB_0009e3d4;\n    }" { (expression_statement "iVar5 = 9;" (assignment_expression "iVar5 = 9" identifier = number_literal) ;) (expression_statement "pbVar6 = &SUB_00000002;" (assignment_expression "pbVar6 = &SUB_00000002" identifier = (pointer_expression "&SUB_00000002" & identifier)) ;) (goto_statement "goto LAB_0009e3d4;" goto statement_identifier ;) })) (expression_statement "uVar1 = (uint)*pbVar3;" (assignment_expression "uVar1 = (uint)*pbVar3" identifier = (binary_expression "(uint)*pbVar3" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) (expression_statement "pbVar3 = pbVar3 + -1;" (assignment_expression "pbVar3 = pbVar3 + -1" identifier = (binary_expression "pbVar3 + -1" identifier + number_literal)) ;) })) (expression_statement "iVar5 = (int)(pbVar6 + 1) * 3;" (assignment_expression "iVar5 = (int)(pbVar6 + 1) * 3" identifier = (binary_expression "(int)(pbVar6 + 1) * 3" (cast_expression "(int)(pbVar6 + 1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(pbVar6 + 1)" ( (binary_expression "pbVar6 + 1" identifier + number_literal) ))) * number_literal)) ;) (labeled_statement "LAB_0009e3d4:\n  iVar5 = *(int *)(iVar7 + 0x2ab0) + 0xe + iVar5;" statement_identifier : (expression_statement "iVar5 = *(int *)(iVar7 + 0x2ab0) + 0xe + iVar5;" (assignment_expression "iVar5 = *(int *)(iVar7 + 0x2ab0) + 0xe + iVar5" identifier = (binary_expression "*(int *)(iVar7 + 0x2ab0) + 0xe + iVar5" (binary_expression "*(int *)(iVar7 + 0x2ab0) + 0xe" (pointer_expression "*(int *)(iVar7 + 0x2ab0)" * (cast_expression "(int *)(iVar7 + 0x2ab0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x2ab0)" ( (binary_expression "iVar7 + 0x2ab0" identifier + number_literal) )))) + number_literal) + identifier)) ;)) (expression_statement "uVar4 = *(int *)(iVar7 + 0x2ab4) + 10U >> 3;" (assignment_expression "uVar4 = *(int *)(iVar7 + 0x2ab4) + 10U >> 3" identifier = (binary_expression "*(int *)(iVar7 + 0x2ab4) + 10U >> 3" (binary_expression "*(int *)(iVar7 + 0x2ab4) + 10U" (pointer_expression "*(int *)(iVar7 + 0x2ab4)" * (cast_expression "(int *)(iVar7 + 0x2ab4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x2ab4)" ( (binary_expression "iVar7 + 0x2ab4" identifier + number_literal) )))) + number_literal) >> number_literal)) ;) (expression_statement "*(int *)(iVar7 + 0x2ab0) = iVar5;" (assignment_expression "*(int *)(iVar7 + 0x2ab0) = iVar5" (pointer_expression "*(int *)(iVar7 + 0x2ab0)" * (cast_expression "(int *)(iVar7 + 0x2ab0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x2ab0)" ( (binary_expression "iVar7 + 0x2ab0" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar2 = iVar5 + 10U >> 3;" (assignment_expression "uVar2 = iVar5 + 10U >> 3" identifier = (binary_expression "iVar5 + 10U >> 3" (binary_expression "iVar5 + 10U" identifier + number_literal) >> number_literal)) ;) (expression_statement "uVar1 = uVar4;" (assignment_expression "uVar1 = uVar4" identifier = identifier) ;) (if_statement "if (uVar2 <= uVar4) {\n    uVar1 = uVar2;\n  }" if (parenthesized_expression "(uVar2 <= uVar4)" ( (binary_expression "uVar2 <= uVar4" identifier <= identifier) )) (compound_statement "{\n    uVar1 = uVar2;\n  }" { (expression_statement "uVar1 = uVar2;" (assignment_expression "uVar1 = uVar2" identifier = identifier) ;) })) (if_statement "if ((uVar1 < param_2 + 4) || (param_1 == (undefined1 *)0x0)) {\n    if (uVar4 <= uVar2) {\n      FUN_0009dcd4(param_3 + 2,3);\n      FUN_0009df98(iVar7 + 0xe6c,iVar7 + 0x12ec);\n      FUN_0009ceb0();\n      goto joined_r0x0009e65c;\n    }\n    pbVar3 = pbVar6 + (int)pbVar8;\n    FUN_0009dcd4(param_3 + 4,3);\n    iVar5 = *(int *)(iVar7 + 0x1418);\n    uVar12 = *(undefined4 *)(iVar7 + 0x1434);\n    FUN_0009dcd4(iVar5 + -0x100,5);\n    FUN_0009dcd4(uVar12,5);\n    FUN_0009dcd4(pbVar6 + -3,4);\n    uVar1 = 0x10;\n    for (; FUN_0009dcd4(*(undefined2 *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3), pbVar3 != pbVar8;\n        pbVar8 = pbVar8 + 1) {\n      uVar1 = (uint)pbVar8[1];\n    }\n    FUN_0009dd80(iVar9,iVar5);\n    FUN_0009dd80(iVar11,uVar12);\n    FUN_0009df98(iVar9,iVar11);\n  }\n  else {\n    puVar10 = param_1 + param_2;\n    FUN_0009dcd4(param_3,3);\n    FUN_0009e1f4();\n    FUN_0009dc0c(param_2 & 0xffff);\n    FUN_0009dc0c(~param_2 & 0xffff);\n    for (; param_1 != puVar10; param_1 = param_1 + 1) {\n      iVar9 = *(int *)(iVar7 + -0x10);\n      *(int *)(iVar7 + -0x10) = iVar9 + 1;\n      *(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9) = *param_1;\n      if (*(int *)(iVar7 + -0x10) == 0x4000) {\n        FUN_0009dbac();\n      }\n    }\n  }" if (parenthesized_expression "((uVar1 < param_2 + 4) || (param_1 == (undefined1 *)0x0))" ( (binary_expression "(uVar1 < param_2 + 4) || (param_1 == (undefined1 *)0x0)" (parenthesized_expression "(uVar1 < param_2 + 4)" ( (binary_expression "uVar1 < param_2 + 4" identifier < (binary_expression "param_2 + 4" identifier + number_literal)) )) || (parenthesized_expression "(param_1 == (undefined1 *)0x0)" ( (binary_expression "param_1 == (undefined1 *)0x0" identifier == (cast_expression "(undefined1 *)0x0" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n    if (uVar4 <= uVar2) {\n      FUN_0009dcd4(param_3 + 2,3);\n      FUN_0009df98(iVar7 + 0xe6c,iVar7 + 0x12ec);\n      FUN_0009ceb0();\n      goto joined_r0x0009e65c;\n    }\n    pbVar3 = pbVar6 + (int)pbVar8;\n    FUN_0009dcd4(param_3 + 4,3);\n    iVar5 = *(int *)(iVar7 + 0x1418);\n    uVar12 = *(undefined4 *)(iVar7 + 0x1434);\n    FUN_0009dcd4(iVar5 + -0x100,5);\n    FUN_0009dcd4(uVar12,5);\n    FUN_0009dcd4(pbVar6 + -3,4);\n    uVar1 = 0x10;\n    for (; FUN_0009dcd4(*(undefined2 *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3), pbVar3 != pbVar8;\n        pbVar8 = pbVar8 + 1) {\n      uVar1 = (uint)pbVar8[1];\n    }\n    FUN_0009dd80(iVar9,iVar5);\n    FUN_0009dd80(iVar11,uVar12);\n    FUN_0009df98(iVar9,iVar11);\n  }" { (if_statement "if (uVar4 <= uVar2) {\n      FUN_0009dcd4(param_3 + 2,3);\n      FUN_0009df98(iVar7 + 0xe6c,iVar7 + 0x12ec);\n      FUN_0009ceb0();\n      goto joined_r0x0009e65c;\n    }" if (parenthesized_expression "(uVar4 <= uVar2)" ( (binary_expression "uVar4 <= uVar2" identifier <= identifier) )) (compound_statement "{\n      FUN_0009dcd4(param_3 + 2,3);\n      FUN_0009df98(iVar7 + 0xe6c,iVar7 + 0x12ec);\n      FUN_0009ceb0();\n      goto joined_r0x0009e65c;\n    }" { (expression_statement "FUN_0009dcd4(param_3 + 2,3);" (call_expression "FUN_0009dcd4(param_3 + 2,3)" identifier (argument_list "(param_3 + 2,3)" ( (binary_expression "param_3 + 2" identifier + number_literal) , number_literal ))) ;) (expression_statement "FUN_0009df98(iVar7 + 0xe6c,iVar7 + 0x12ec);" (call_expression "FUN_0009df98(iVar7 + 0xe6c,iVar7 + 0x12ec)" identifier (argument_list "(iVar7 + 0xe6c,iVar7 + 0x12ec)" ( (binary_expression "iVar7 + 0xe6c" identifier + number_literal) , (binary_expression "iVar7 + 0x12ec" identifier + number_literal) ))) ;) (expression_statement "FUN_0009ceb0();" (call_expression "FUN_0009ceb0()" identifier (argument_list "()" ( ))) ;) (goto_statement "goto joined_r0x0009e65c;" goto statement_identifier ;) })) (expression_statement "pbVar3 = pbVar6 + (int)pbVar8;" (assignment_expression "pbVar3 = pbVar6 + (int)pbVar8" identifier = (binary_expression "pbVar6 + (int)pbVar8" identifier + (cast_expression "(int)pbVar8" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "FUN_0009dcd4(param_3 + 4,3);" (call_expression "FUN_0009dcd4(param_3 + 4,3)" identifier (argument_list "(param_3 + 4,3)" ( (binary_expression "param_3 + 4" identifier + number_literal) , number_literal ))) ;) (expression_statement "iVar5 = *(int *)(iVar7 + 0x1418);" (assignment_expression "iVar5 = *(int *)(iVar7 + 0x1418)" identifier = (pointer_expression "*(int *)(iVar7 + 0x1418)" * (cast_expression "(int *)(iVar7 + 0x1418)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x1418)" ( (binary_expression "iVar7 + 0x1418" identifier + number_literal) ))))) ;) (expression_statement "uVar12 = *(undefined4 *)(iVar7 + 0x1434);" (assignment_expression "uVar12 = *(undefined4 *)(iVar7 + 0x1434)" identifier = (pointer_expression "*(undefined4 *)(iVar7 + 0x1434)" * (cast_expression "(undefined4 *)(iVar7 + 0x1434)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + 0x1434)" ( (binary_expression "iVar7 + 0x1434" identifier + number_literal) ))))) ;) (expression_statement "FUN_0009dcd4(iVar5 + -0x100,5);" (call_expression "FUN_0009dcd4(iVar5 + -0x100,5)" identifier (argument_list "(iVar5 + -0x100,5)" ( (binary_expression "iVar5 + -0x100" identifier + number_literal) , number_literal ))) ;) (expression_statement "FUN_0009dcd4(uVar12,5);" (call_expression "FUN_0009dcd4(uVar12,5)" identifier (argument_list "(uVar12,5)" ( identifier , number_literal ))) ;) (expression_statement "FUN_0009dcd4(pbVar6 + -3,4);" (call_expression "FUN_0009dcd4(pbVar6 + -3,4)" identifier (argument_list "(pbVar6 + -3,4)" ( (binary_expression "pbVar6 + -3" identifier + number_literal) , number_literal ))) ;) (expression_statement "uVar1 = 0x10;" (assignment_expression "uVar1 = 0x10" identifier = number_literal) ;) (for_statement "for (; FUN_0009dcd4(*(undefined2 *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3), pbVar3 != pbVar8;\n        pbVar8 = pbVar8 + 1) {\n      uVar1 = (uint)pbVar8[1];\n    }" for ( ; (comma_expression "FUN_0009dcd4(*(undefined2 *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3), pbVar3 != pbVar8" (call_expression "FUN_0009dcd4(*(undefined2 *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3)" identifier (argument_list "(*(undefined2 *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3)" ( (pointer_expression "*(undefined2 *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6)" * (cast_expression "(undefined2 *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + (uVar1 + 0x4d8) * 4 + 6)" ( (binary_expression "iVar7 + (uVar1 + 0x4d8) * 4 + 6" (binary_expression "iVar7 + (uVar1 + 0x4d8) * 4" identifier + (binary_expression "(uVar1 + 0x4d8) * 4" (parenthesized_expression "(uVar1 + 0x4d8)" ( (binary_expression "uVar1 + 0x4d8" identifier + number_literal) )) * number_literal)) + number_literal) )))) , number_literal ))) , (binary_expression "pbVar3 != pbVar8" identifier != identifier)) ; (assignment_expression "pbVar8 = pbVar8 + 1" identifier = (binary_expression "pbVar8 + 1" identifier + number_literal)) ) (compound_statement "{\n      uVar1 = (uint)pbVar8[1];\n    }" { (expression_statement "uVar1 = (uint)pbVar8[1];" (assignment_expression "uVar1 = (uint)pbVar8[1]" identifier = (cast_expression "(uint)pbVar8[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "pbVar8[1]" identifier [ number_literal ]))) ;) })) (expression_statement "FUN_0009dd80(iVar9,iVar5);" (call_expression "FUN_0009dd80(iVar9,iVar5)" identifier (argument_list "(iVar9,iVar5)" ( identifier , identifier ))) ;) (expression_statement "FUN_0009dd80(iVar11,uVar12);" (call_expression "FUN_0009dd80(iVar11,uVar12)" identifier (argument_list "(iVar11,uVar12)" ( identifier , identifier ))) ;) (expression_statement "FUN_0009df98(iVar9,iVar11);" (call_expression "FUN_0009df98(iVar9,iVar11)" identifier (argument_list "(iVar9,iVar11)" ( identifier , identifier ))) ;) }) (else_clause "else {\n    puVar10 = param_1 + param_2;\n    FUN_0009dcd4(param_3,3);\n    FUN_0009e1f4();\n    FUN_0009dc0c(param_2 & 0xffff);\n    FUN_0009dc0c(~param_2 & 0xffff);\n    for (; param_1 != puVar10; param_1 = param_1 + 1) {\n      iVar9 = *(int *)(iVar7 + -0x10);\n      *(int *)(iVar7 + -0x10) = iVar9 + 1;\n      *(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9) = *param_1;\n      if (*(int *)(iVar7 + -0x10) == 0x4000) {\n        FUN_0009dbac();\n      }\n    }\n  }" else (compound_statement "{\n    puVar10 = param_1 + param_2;\n    FUN_0009dcd4(param_3,3);\n    FUN_0009e1f4();\n    FUN_0009dc0c(param_2 & 0xffff);\n    FUN_0009dc0c(~param_2 & 0xffff);\n    for (; param_1 != puVar10; param_1 = param_1 + 1) {\n      iVar9 = *(int *)(iVar7 + -0x10);\n      *(int *)(iVar7 + -0x10) = iVar9 + 1;\n      *(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9) = *param_1;\n      if (*(int *)(iVar7 + -0x10) == 0x4000) {\n        FUN_0009dbac();\n      }\n    }\n  }" { (expression_statement "puVar10 = param_1 + param_2;" (assignment_expression "puVar10 = param_1 + param_2" identifier = (binary_expression "param_1 + param_2" identifier + identifier)) ;) (expression_statement "FUN_0009dcd4(param_3,3);" (call_expression "FUN_0009dcd4(param_3,3)" identifier (argument_list "(param_3,3)" ( identifier , number_literal ))) ;) (expression_statement "FUN_0009e1f4();" (call_expression "FUN_0009e1f4()" identifier (argument_list "()" ( ))) ;) (expression_statement "FUN_0009dc0c(param_2 & 0xffff);" (call_expression "FUN_0009dc0c(param_2 & 0xffff)" identifier (argument_list "(param_2 & 0xffff)" ( (binary_expression "param_2 & 0xffff" identifier & number_literal) ))) ;) (expression_statement "FUN_0009dc0c(~param_2 & 0xffff);" (call_expression "FUN_0009dc0c(~param_2 & 0xffff)" identifier (argument_list "(~param_2 & 0xffff)" ( (binary_expression "~param_2 & 0xffff" (unary_expression "~param_2" ~ identifier) & number_literal) ))) ;) (for_statement "for (; param_1 != puVar10; param_1 = param_1 + 1) {\n      iVar9 = *(int *)(iVar7 + -0x10);\n      *(int *)(iVar7 + -0x10) = iVar9 + 1;\n      *(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9) = *param_1;\n      if (*(int *)(iVar7 + -0x10) == 0x4000) {\n        FUN_0009dbac();\n      }\n    }" for ( ; (binary_expression "param_1 != puVar10" identifier != identifier) ; (assignment_expression "param_1 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) ) (compound_statement "{\n      iVar9 = *(int *)(iVar7 + -0x10);\n      *(int *)(iVar7 + -0x10) = iVar9 + 1;\n      *(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9) = *param_1;\n      if (*(int *)(iVar7 + -0x10) == 0x4000) {\n        FUN_0009dbac();\n      }\n    }" { (expression_statement "iVar9 = *(int *)(iVar7 + -0x10);" (assignment_expression "iVar9 = *(int *)(iVar7 + -0x10)" identifier = (pointer_expression "*(int *)(iVar7 + -0x10)" * (cast_expression "(int *)(iVar7 + -0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + -0x10)" ( (binary_expression "iVar7 + -0x10" identifier + number_literal) ))))) ;) (expression_statement "*(int *)(iVar7 + -0x10) = iVar9 + 1;" (assignment_expression "*(int *)(iVar7 + -0x10) = iVar9 + 1" (pointer_expression "*(int *)(iVar7 + -0x10)" * (cast_expression "(int *)(iVar7 + -0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + -0x10)" ( (binary_expression "iVar7 + -0x10" identifier + number_literal) )))) = (binary_expression "iVar9 + 1" identifier + number_literal)) ;) (expression_statement "*(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9) = *param_1;" (assignment_expression "*(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9) = *param_1" (pointer_expression "*(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9)" * (cast_expression "(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(iVar7 + -0x3c) + iVar9)" ( (binary_expression "*(int *)(iVar7 + -0x3c) + iVar9" (pointer_expression "*(int *)(iVar7 + -0x3c)" * (cast_expression "(int *)(iVar7 + -0x3c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + -0x3c)" ( (binary_expression "iVar7 + -0x3c" identifier + number_literal) )))) + identifier) )))) = (pointer_expression "*param_1" * identifier)) ;) (if_statement "if (*(int *)(iVar7 + -0x10) == 0x4000) {\n        FUN_0009dbac();\n      }" if (parenthesized_expression "(*(int *)(iVar7 + -0x10) == 0x4000)" ( (binary_expression "*(int *)(iVar7 + -0x10) == 0x4000" (pointer_expression "*(int *)(iVar7 + -0x10)" * (cast_expression "(int *)(iVar7 + -0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + -0x10)" ( (binary_expression "iVar7 + -0x10" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n        FUN_0009dbac();\n      }" { (expression_statement "FUN_0009dbac();" (call_expression "FUN_0009dbac()" identifier (argument_list "()" ( ))) ;) })) })) }))) (expression_statement "FUN_0009ceb0();" (call_expression "FUN_0009ceb0()" identifier (argument_list "()" ( ))) ;) (labeled_statement "joined_r0x0009e65c:\n  if (param_3 != 0) {\n    FUN_0009e1f4();\n    return;\n  }" statement_identifier : (if_statement "if (param_3 != 0) {\n    FUN_0009e1f4();\n    return;\n  }" if (parenthesized_expression "(param_3 != 0)" ( (binary_expression "param_3 != 0" identifier != number_literal) )) (compound_statement "{\n    FUN_0009e1f4();\n    return;\n  }" { (expression_statement "FUN_0009e1f4();" (call_expression "FUN_0009e1f4()" identifier (argument_list "()" ( ))) ;) (return_statement "return;" return ;) }))) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) + LIT) )))) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) ))) ;) (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) ))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (while_statement while (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression IDENT + (parenthesized_expression ( (binary_expression LIT - (cast_expression ( (type_descriptor TYPE) ) IDENT)) )))) , (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) * LIT)) + LIT) )))) == LIT)) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression & IDENT)) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( IDENT )) * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))) * LIT)) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) + IDENT)) ;)) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) >> LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + LIT) >> LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT < (binary_expression IDENT + LIT)) )) || (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , LIT ))) ;) (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , (binary_expression IDENT + LIT) ))) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , LIT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , LIT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT ))) ;) (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , LIT ))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (for_statement for ( ; (comma_expression (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) * LIT)) + LIT) )))) , LIT ))) , (binary_expression IDENT != IDENT)) ; (assignment_expression IDENT = (binary_expression IDENT + LIT)) ) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT ))) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT & LIT) ))) ;) (expression_statement (call_expression IDENT (argument_list ( (binary_expression (unary_expression ~ IDENT) & LIT) ))) ;) (for_statement for ( ; (binary_expression IDENT != IDENT) ; (assignment_expression IDENT = (binary_expression IDENT + LIT)) ) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) )))) = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) })) }))) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) (return_statement return ;) }))) (return_statement return ;) })))
(function_definition "void FUN_0009e2c0(undefined1 *param_1,uint param_2,int param_3)\n\n{\n  uint uVar1;\n  uint uVar2;\n  byte *pbVar3;\n  uint uVar4;\n  int iVar5;\n  byte *pbVar6;\n  int iVar7;\n  byte *pbVar8;\n  int iVar9;\n  undefined1 *puVar10;\n  int iVar11;\n  undefined4 uVar12;\n  \n  iVar7 = *(int *)PTR_DAT_0012a304;\n  iVar9 = iVar7 + 0x484;\n  iVar11 = iVar7 + 0xd78;\n  *(undefined1 *)(iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0) = *(undefined1 *)(iVar7 + 0x2aac);\n  FUN_0009d144(iVar7 + 0x1400);\n  FUN_0009d144(iVar7 + 0x141c);\n  FUN_0009d61c(iVar9,*(undefined4 *)(iVar7 + 0x1418));\n  FUN_0009d61c(iVar11,*(undefined4 *)(iVar7 + 0x1434));\n  FUN_0009d144(iVar7 + 0x1438);\n  uVar1 = 0xf;\n  pbVar8 = PTR_FUN_0012a1a8 + 0x7050;\n  pbVar3 = PTR_FUN_0012a1a8 + 0x7061;\n  while (pbVar6 = pbVar3 + (1 - (int)pbVar8), *(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6) == 0) {\n    if (PTR_FUN_0012a1a8 + 0x7052 == pbVar3) {\n      iVar5 = 9;\n      pbVar6 = &SUB_00000002;\n      goto LAB_0009e3d4;\n    }\n    uVar1 = (uint)*pbVar3;\n    pbVar3 = pbVar3 + -1;\n  }\n  iVar5 = (int)(pbVar6 + 1) * 3;\nLAB_0009e3d4:\n  iVar5 = *(int *)(iVar7 + 0x2ab0) + 0xe + iVar5;\n  uVar4 = *(int *)(iVar7 + 0x2ab4) + 10U >> 3;\n  *(int *)(iVar7 + 0x2ab0) = iVar5;\n  uVar2 = iVar5 + 10U >> 3;\n  uVar1 = uVar4;\n  if (uVar2 <= uVar4) {\n    uVar1 = uVar2;\n  }\n  if ((uVar1 < param_2 + 4) || (param_1 == (undefined1 *)0x0)) {\n    if (uVar4 <= uVar2) {\n      FUN_0009dcd4(param_3 + 2,3);\n      FUN_0009df98(iVar7 + 0xe6c,iVar7 + 0x12ec);\n      FUN_0009ceb0();\n      goto joined_r0x0009e65c;\n    }\n    pbVar3 = pbVar6 + (int)pbVar8;\n    FUN_0009dcd4(param_3 + 4,3);\n    iVar5 = *(int *)(iVar7 + 0x1418);\n    uVar12 = *(undefined4 *)(iVar7 + 0x1434);\n    FUN_0009dcd4(iVar5 + -0x100,5);\n    FUN_0009dcd4(uVar12,5);\n    FUN_0009dcd4(pbVar6 + -3,4);\n    uVar1 = 0x10;\n    for (; FUN_0009dcd4(*(undefined2 *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3), pbVar3 != pbVar8;\n        pbVar8 = pbVar8 + 1) {\n      uVar1 = (uint)pbVar8[1];\n    }\n    FUN_0009dd80(iVar9,iVar5);\n    FUN_0009dd80(iVar11,uVar12);\n    FUN_0009df98(iVar9,iVar11);\n  }\n  else {\n    puVar10 = param_1 + param_2;\n    FUN_0009dcd4(param_3,3);\n    FUN_0009e1f4();\n    FUN_0009dc0c(param_2 & 0xffff);\n    FUN_0009dc0c(~param_2 & 0xffff);\n    for (; param_1 != puVar10; param_1 = param_1 + 1) {\n      iVar9 = *(int *)(iVar7 + -0x10);\n      *(int *)(iVar7 + -0x10) = iVar9 + 1;\n      *(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9) = *param_1;\n      if (*(int *)(iVar7 + -0x10) == 0x4000) {\n        FUN_0009dbac();\n      }\n    }\n  }\n  FUN_0009ceb0();\njoined_r0x0009e65c:\n  if (param_3 != 0) {\n    FUN_0009e1f4();\n    return;\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_0009e2c0(undefined1 *param_1,uint param_2,int param_3)" (identifier "FUN_0009e2c0") (parameter_list "(undefined1 *param_1,uint param_2,int param_3)" (( "(") (parameter_declaration "undefined1 *param_1" (type_identifier "undefined1") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "uint param_2" (type_identifier "uint") (identifier "param_2")) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) () ")"))) (compound_statement "{\n  uint uVar1;\n  uint uVar2;\n  byte *pbVar3;\n  uint uVar4;\n  int iVar5;\n  byte *pbVar6;\n  int iVar7;\n  byte *pbVar8;\n  int iVar9;\n  undefined1 *puVar10;\n  int iVar11;\n  undefined4 uVar12;\n  \n  iVar7 = *(int *)PTR_DAT_0012a304;\n  iVar9 = iVar7 + 0x484;\n  iVar11 = iVar7 + 0xd78;\n  *(undefined1 *)(iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0) = *(undefined1 *)(iVar7 + 0x2aac);\n  FUN_0009d144(iVar7 + 0x1400);\n  FUN_0009d144(iVar7 + 0x141c);\n  FUN_0009d61c(iVar9,*(undefined4 *)(iVar7 + 0x1418));\n  FUN_0009d61c(iVar11,*(undefined4 *)(iVar7 + 0x1434));\n  FUN_0009d144(iVar7 + 0x1438);\n  uVar1 = 0xf;\n  pbVar8 = PTR_FUN_0012a1a8 + 0x7050;\n  pbVar3 = PTR_FUN_0012a1a8 + 0x7061;\n  while (pbVar6 = pbVar3 + (1 - (int)pbVar8), *(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6) == 0) {\n    if (PTR_FUN_0012a1a8 + 0x7052 == pbVar3) {\n      iVar5 = 9;\n      pbVar6 = &SUB_00000002;\n      goto LAB_0009e3d4;\n    }\n    uVar1 = (uint)*pbVar3;\n    pbVar3 = pbVar3 + -1;\n  }\n  iVar5 = (int)(pbVar6 + 1) * 3;\nLAB_0009e3d4:\n  iVar5 = *(int *)(iVar7 + 0x2ab0) + 0xe + iVar5;\n  uVar4 = *(int *)(iVar7 + 0x2ab4) + 10U >> 3;\n  *(int *)(iVar7 + 0x2ab0) = iVar5;\n  uVar2 = iVar5 + 10U >> 3;\n  uVar1 = uVar4;\n  if (uVar2 <= uVar4) {\n    uVar1 = uVar2;\n  }\n  if ((uVar1 < param_2 + 4) || (param_1 == (undefined1 *)0x0)) {\n    if (uVar4 <= uVar2) {\n      FUN_0009dcd4(param_3 + 2,3);\n      FUN_0009df98(iVar7 + 0xe6c,iVar7 + 0x12ec);\n      FUN_0009ceb0();\n      goto joined_r0x0009e65c;\n    }\n    pbVar3 = pbVar6 + (int)pbVar8;\n    FUN_0009dcd4(param_3 + 4,3);\n    iVar5 = *(int *)(iVar7 + 0x1418);\n    uVar12 = *(undefined4 *)(iVar7 + 0x1434);\n    FUN_0009dcd4(iVar5 + -0x100,5);\n    FUN_0009dcd4(uVar12,5);\n    FUN_0009dcd4(pbVar6 + -3,4);\n    uVar1 = 0x10;\n    for (; FUN_0009dcd4(*(undefined2 *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3), pbVar3 != pbVar8;\n        pbVar8 = pbVar8 + 1) {\n      uVar1 = (uint)pbVar8[1];\n    }\n    FUN_0009dd80(iVar9,iVar5);\n    FUN_0009dd80(iVar11,uVar12);\n    FUN_0009df98(iVar9,iVar11);\n  }\n  else {\n    puVar10 = param_1 + param_2;\n    FUN_0009dcd4(param_3,3);\n    FUN_0009e1f4();\n    FUN_0009dc0c(param_2 & 0xffff);\n    FUN_0009dc0c(~param_2 & 0xffff);\n    for (; param_1 != puVar10; param_1 = param_1 + 1) {\n      iVar9 = *(int *)(iVar7 + -0x10);\n      *(int *)(iVar7 + -0x10) = iVar9 + 1;\n      *(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9) = *param_1;\n      if (*(int *)(iVar7 + -0x10) == 0x4000) {\n        FUN_0009dbac();\n      }\n    }\n  }\n  FUN_0009ceb0();\njoined_r0x0009e65c:\n  if (param_3 != 0) {\n    FUN_0009e1f4();\n    return;\n  }\n  return;\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "byte *pbVar3;" (type_identifier "byte") (pointer_declarator "*pbVar3" (* "*") (identifier "pbVar3")) (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "byte *pbVar6;" (type_identifier "byte") (pointer_declarator "*pbVar6" (* "*") (identifier "pbVar6")) (; ";")) (declaration "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (declaration "byte *pbVar8;" (type_identifier "byte") (pointer_declarator "*pbVar8" (* "*") (identifier "pbVar8")) (; ";")) (declaration "int iVar9;" (primitive_type "int") (identifier "iVar9") (; ";")) (declaration "undefined1 *puVar10;" (type_identifier "undefined1") (pointer_declarator "*puVar10" (* "*") (identifier "puVar10")) (; ";")) (declaration "int iVar11;" (primitive_type "int") (identifier "iVar11") (; ";")) (declaration "undefined4 uVar12;" (type_identifier "undefined4") (identifier "uVar12") (; ";")) (expression_statement "iVar7 = *(int *)PTR_DAT_0012a304;" (assignment_expression "iVar7 = *(int *)PTR_DAT_0012a304" (identifier "iVar7") (= "=") (pointer_expression "*(int *)PTR_DAT_0012a304" (* "*") (cast_expression "(int *)PTR_DAT_0012a304" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_DAT_0012a304")))) (; ";")) (expression_statement "iVar9 = iVar7 + 0x484;" (assignment_expression "iVar9 = iVar7 + 0x484" (identifier "iVar9") (= "=") (binary_expression "iVar7 + 0x484" (identifier "iVar7") (+ "+") (number_literal "0x484"))) (; ";")) (expression_statement "iVar11 = iVar7 + 0xd78;" (assignment_expression "iVar11 = iVar7 + 0xd78" (identifier "iVar11") (= "=") (binary_expression "iVar7 + 0xd78" (identifier "iVar7") (+ "+") (number_literal "0xd78"))) (; ";")) (expression_statement "*(undefined1 *)(iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0) = *(undefined1 *)(iVar7 + 0x2aac);" (assignment_expression "*(undefined1 *)(iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0) = *(undefined1 *)(iVar7 + 0x2aac)" (pointer_expression "*(undefined1 *)(iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0)" (* "*") (cast_expression "(undefined1 *)(iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0)" (( "(") (binary_expression "iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0" (binary_expression "iVar7 + *(int *)(iVar7 + 0x2aa8)" (identifier "iVar7") (+ "+") (pointer_expression "*(int *)(iVar7 + 0x2aa8)" (* "*") (cast_expression "(int *)(iVar7 + 0x2aa8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + 0x2aa8)" (( "(") (binary_expression "iVar7 + 0x2aa8" (identifier "iVar7") (+ "+") (number_literal "0x2aa8")) () ")"))))) (+ "+") (number_literal "0x1aa0")) () ")")))) (= "=") (pointer_expression "*(undefined1 *)(iVar7 + 0x2aac)" (* "*") (cast_expression "(undefined1 *)(iVar7 + 0x2aac)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + 0x2aac)" (( "(") (binary_expression "iVar7 + 0x2aac" (identifier "iVar7") (+ "+") (number_literal "0x2aac")) () ")"))))) (; ";")) (expression_statement "FUN_0009d144(iVar7 + 0x1400);" (call_expression "FUN_0009d144(iVar7 + 0x1400)" (identifier "FUN_0009d144") (argument_list "(iVar7 + 0x1400)" (( "(") (binary_expression "iVar7 + 0x1400" (identifier "iVar7") (+ "+") (number_literal "0x1400")) () ")"))) (; ";")) (expression_statement "FUN_0009d144(iVar7 + 0x141c);" (call_expression "FUN_0009d144(iVar7 + 0x141c)" (identifier "FUN_0009d144") (argument_list "(iVar7 + 0x141c)" (( "(") (binary_expression "iVar7 + 0x141c" (identifier "iVar7") (+ "+") (number_literal "0x141c")) () ")"))) (; ";")) (expression_statement "FUN_0009d61c(iVar9,*(undefined4 *)(iVar7 + 0x1418));" (call_expression "FUN_0009d61c(iVar9,*(undefined4 *)(iVar7 + 0x1418))" (identifier "FUN_0009d61c") (argument_list "(iVar9,*(undefined4 *)(iVar7 + 0x1418))" (( "(") (identifier "iVar9") (, ",") (pointer_expression "*(undefined4 *)(iVar7 + 0x1418)" (* "*") (cast_expression "(undefined4 *)(iVar7 + 0x1418)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + 0x1418)" (( "(") (binary_expression "iVar7 + 0x1418" (identifier "iVar7") (+ "+") (number_literal "0x1418")) () ")")))) () ")"))) (; ";")) (expression_statement "FUN_0009d61c(iVar11,*(undefined4 *)(iVar7 + 0x1434));" (call_expression "FUN_0009d61c(iVar11,*(undefined4 *)(iVar7 + 0x1434))" (identifier "FUN_0009d61c") (argument_list "(iVar11,*(undefined4 *)(iVar7 + 0x1434))" (( "(") (identifier "iVar11") (, ",") (pointer_expression "*(undefined4 *)(iVar7 + 0x1434)" (* "*") (cast_expression "(undefined4 *)(iVar7 + 0x1434)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + 0x1434)" (( "(") (binary_expression "iVar7 + 0x1434" (identifier "iVar7") (+ "+") (number_literal "0x1434")) () ")")))) () ")"))) (; ";")) (expression_statement "FUN_0009d144(iVar7 + 0x1438);" (call_expression "FUN_0009d144(iVar7 + 0x1438)" (identifier "FUN_0009d144") (argument_list "(iVar7 + 0x1438)" (( "(") (binary_expression "iVar7 + 0x1438" (identifier "iVar7") (+ "+") (number_literal "0x1438")) () ")"))) (; ";")) (expression_statement "uVar1 = 0xf;" (assignment_expression "uVar1 = 0xf" (identifier "uVar1") (= "=") (number_literal "0xf")) (; ";")) (expression_statement "pbVar8 = PTR_FUN_0012a1a8 + 0x7050;" (assignment_expression "pbVar8 = PTR_FUN_0012a1a8 + 0x7050" (identifier "pbVar8") (= "=") (binary_expression "PTR_FUN_0012a1a8 + 0x7050" (identifier "PTR_FUN_0012a1a8") (+ "+") (number_literal "0x7050"))) (; ";")) (expression_statement "pbVar3 = PTR_FUN_0012a1a8 + 0x7061;" (assignment_expression "pbVar3 = PTR_FUN_0012a1a8 + 0x7061" (identifier "pbVar3") (= "=") (binary_expression "PTR_FUN_0012a1a8 + 0x7061" (identifier "PTR_FUN_0012a1a8") (+ "+") (number_literal "0x7061"))) (; ";")) (while_statement "while (pbVar6 = pbVar3 + (1 - (int)pbVar8), *(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6) == 0) {\n    if (PTR_FUN_0012a1a8 + 0x7052 == pbVar3) {\n      iVar5 = 9;\n      pbVar6 = &SUB_00000002;\n      goto LAB_0009e3d4;\n    }\n    uVar1 = (uint)*pbVar3;\n    pbVar3 = pbVar3 + -1;\n  }" (while "while") (parenthesized_expression "(pbVar6 = pbVar3 + (1 - (int)pbVar8), *(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6) == 0)" (( "(") (comma_expression "pbVar6 = pbVar3 + (1 - (int)pbVar8), *(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6) == 0" (assignment_expression "pbVar6 = pbVar3 + (1 - (int)pbVar8)" (identifier "pbVar6") (= "=") (binary_expression "pbVar3 + (1 - (int)pbVar8)" (identifier "pbVar3") (+ "+") (parenthesized_expression "(1 - (int)pbVar8)" (( "(") (binary_expression "1 - (int)pbVar8" (number_literal "1") (- "-") (cast_expression "(int)pbVar8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pbVar8"))) () ")")))) (, ",") (binary_expression "*(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6) == 0" (pointer_expression "*(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6)" (* "*") (cast_expression "(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + (uVar1 + 0x4d8) * 4 + 6)" (( "(") (binary_expression "iVar7 + (uVar1 + 0x4d8) * 4 + 6" (binary_expression "iVar7 + (uVar1 + 0x4d8) * 4" (identifier "iVar7") (+ "+") (binary_expression "(uVar1 + 0x4d8) * 4" (parenthesized_expression "(uVar1 + 0x4d8)" (( "(") (binary_expression "uVar1 + 0x4d8" (identifier "uVar1") (+ "+") (number_literal "0x4d8")) () ")")) (* "*") (number_literal "4"))) (+ "+") (number_literal "6")) () ")")))) (== "==") (number_literal "0"))) () ")")) (compound_statement "{\n    if (PTR_FUN_0012a1a8 + 0x7052 == pbVar3) {\n      iVar5 = 9;\n      pbVar6 = &SUB_00000002;\n      goto LAB_0009e3d4;\n    }\n    uVar1 = (uint)*pbVar3;\n    pbVar3 = pbVar3 + -1;\n  }" ({ "{") (if_statement "if (PTR_FUN_0012a1a8 + 0x7052 == pbVar3) {\n      iVar5 = 9;\n      pbVar6 = &SUB_00000002;\n      goto LAB_0009e3d4;\n    }" (if "if") (parenthesized_expression "(PTR_FUN_0012a1a8 + 0x7052 == pbVar3)" (( "(") (binary_expression "PTR_FUN_0012a1a8 + 0x7052 == pbVar3" (binary_expression "PTR_FUN_0012a1a8 + 0x7052" (identifier "PTR_FUN_0012a1a8") (+ "+") (number_literal "0x7052")) (== "==") (identifier "pbVar3")) () ")")) (compound_statement "{\n      iVar5 = 9;\n      pbVar6 = &SUB_00000002;\n      goto LAB_0009e3d4;\n    }" ({ "{") (expression_statement "iVar5 = 9;" (assignment_expression "iVar5 = 9" (identifier "iVar5") (= "=") (number_literal "9")) (; ";")) (expression_statement "pbVar6 = &SUB_00000002;" (assignment_expression "pbVar6 = &SUB_00000002" (identifier "pbVar6") (= "=") (pointer_expression "&SUB_00000002" (& "&") (identifier "SUB_00000002"))) (; ";")) (goto_statement "goto LAB_0009e3d4;" (goto "goto") (statement_identifier "LAB_0009e3d4") (; ";")) (} "}"))) (expression_statement "uVar1 = (uint)*pbVar3;" (assignment_expression "uVar1 = (uint)*pbVar3" (identifier "uVar1") (= "=") (binary_expression "(uint)*pbVar3" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (identifier "pbVar3"))) (; ";")) (expression_statement "pbVar3 = pbVar3 + -1;" (assignment_expression "pbVar3 = pbVar3 + -1" (identifier "pbVar3") (= "=") (binary_expression "pbVar3 + -1" (identifier "pbVar3") (+ "+") (number_literal "-1"))) (; ";")) (} "}"))) (expression_statement "iVar5 = (int)(pbVar6 + 1) * 3;" (assignment_expression "iVar5 = (int)(pbVar6 + 1) * 3" (identifier "iVar5") (= "=") (binary_expression "(int)(pbVar6 + 1) * 3" (cast_expression "(int)(pbVar6 + 1)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(pbVar6 + 1)" (( "(") (binary_expression "pbVar6 + 1" (identifier "pbVar6") (+ "+") (number_literal "1")) () ")"))) (* "*") (number_literal "3"))) (; ";")) (labeled_statement "LAB_0009e3d4:\n  iVar5 = *(int *)(iVar7 + 0x2ab0) + 0xe + iVar5;" (statement_identifier "LAB_0009e3d4") (: ":") (expression_statement "iVar5 = *(int *)(iVar7 + 0x2ab0) + 0xe + iVar5;" (assignment_expression "iVar5 = *(int *)(iVar7 + 0x2ab0) + 0xe + iVar5" (identifier "iVar5") (= "=") (binary_expression "*(int *)(iVar7 + 0x2ab0) + 0xe + iVar5" (binary_expression "*(int *)(iVar7 + 0x2ab0) + 0xe" (pointer_expression "*(int *)(iVar7 + 0x2ab0)" (* "*") (cast_expression "(int *)(iVar7 + 0x2ab0)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + 0x2ab0)" (( "(") (binary_expression "iVar7 + 0x2ab0" (identifier "iVar7") (+ "+") (number_literal "0x2ab0")) () ")")))) (+ "+") (number_literal "0xe")) (+ "+") (identifier "iVar5"))) (; ";"))) (expression_statement "uVar4 = *(int *)(iVar7 + 0x2ab4) + 10U >> 3;" (assignment_expression "uVar4 = *(int *)(iVar7 + 0x2ab4) + 10U >> 3" (identifier "uVar4") (= "=") (binary_expression "*(int *)(iVar7 + 0x2ab4) + 10U >> 3" (binary_expression "*(int *)(iVar7 + 0x2ab4) + 10U" (pointer_expression "*(int *)(iVar7 + 0x2ab4)" (* "*") (cast_expression "(int *)(iVar7 + 0x2ab4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + 0x2ab4)" (( "(") (binary_expression "iVar7 + 0x2ab4" (identifier "iVar7") (+ "+") (number_literal "0x2ab4")) () ")")))) (+ "+") (number_literal "10U")) (>> ">>") (number_literal "3"))) (; ";")) (expression_statement "*(int *)(iVar7 + 0x2ab0) = iVar5;" (assignment_expression "*(int *)(iVar7 + 0x2ab0) = iVar5" (pointer_expression "*(int *)(iVar7 + 0x2ab0)" (* "*") (cast_expression "(int *)(iVar7 + 0x2ab0)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + 0x2ab0)" (( "(") (binary_expression "iVar7 + 0x2ab0" (identifier "iVar7") (+ "+") (number_literal "0x2ab0")) () ")")))) (= "=") (identifier "iVar5")) (; ";")) (expression_statement "uVar2 = iVar5 + 10U >> 3;" (assignment_expression "uVar2 = iVar5 + 10U >> 3" (identifier "uVar2") (= "=") (binary_expression "iVar5 + 10U >> 3" (binary_expression "iVar5 + 10U" (identifier "iVar5") (+ "+") (number_literal "10U")) (>> ">>") (number_literal "3"))) (; ";")) (expression_statement "uVar1 = uVar4;" (assignment_expression "uVar1 = uVar4" (identifier "uVar1") (= "=") (identifier "uVar4")) (; ";")) (if_statement "if (uVar2 <= uVar4) {\n    uVar1 = uVar2;\n  }" (if "if") (parenthesized_expression "(uVar2 <= uVar4)" (( "(") (binary_expression "uVar2 <= uVar4" (identifier "uVar2") (<= "<=") (identifier "uVar4")) () ")")) (compound_statement "{\n    uVar1 = uVar2;\n  }" ({ "{") (expression_statement "uVar1 = uVar2;" (assignment_expression "uVar1 = uVar2" (identifier "uVar1") (= "=") (identifier "uVar2")) (; ";")) (} "}"))) (if_statement "if ((uVar1 < param_2 + 4) || (param_1 == (undefined1 *)0x0)) {\n    if (uVar4 <= uVar2) {\n      FUN_0009dcd4(param_3 + 2,3);\n      FUN_0009df98(iVar7 + 0xe6c,iVar7 + 0x12ec);\n      FUN_0009ceb0();\n      goto joined_r0x0009e65c;\n    }\n    pbVar3 = pbVar6 + (int)pbVar8;\n    FUN_0009dcd4(param_3 + 4,3);\n    iVar5 = *(int *)(iVar7 + 0x1418);\n    uVar12 = *(undefined4 *)(iVar7 + 0x1434);\n    FUN_0009dcd4(iVar5 + -0x100,5);\n    FUN_0009dcd4(uVar12,5);\n    FUN_0009dcd4(pbVar6 + -3,4);\n    uVar1 = 0x10;\n    for (; FUN_0009dcd4(*(undefined2 *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3), pbVar3 != pbVar8;\n        pbVar8 = pbVar8 + 1) {\n      uVar1 = (uint)pbVar8[1];\n    }\n    FUN_0009dd80(iVar9,iVar5);\n    FUN_0009dd80(iVar11,uVar12);\n    FUN_0009df98(iVar9,iVar11);\n  }\n  else {\n    puVar10 = param_1 + param_2;\n    FUN_0009dcd4(param_3,3);\n    FUN_0009e1f4();\n    FUN_0009dc0c(param_2 & 0xffff);\n    FUN_0009dc0c(~param_2 & 0xffff);\n    for (; param_1 != puVar10; param_1 = param_1 + 1) {\n      iVar9 = *(int *)(iVar7 + -0x10);\n      *(int *)(iVar7 + -0x10) = iVar9 + 1;\n      *(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9) = *param_1;\n      if (*(int *)(iVar7 + -0x10) == 0x4000) {\n        FUN_0009dbac();\n      }\n    }\n  }" (if "if") (parenthesized_expression "((uVar1 < param_2 + 4) || (param_1 == (undefined1 *)0x0))" (( "(") (binary_expression "(uVar1 < param_2 + 4) || (param_1 == (undefined1 *)0x0)" (parenthesized_expression "(uVar1 < param_2 + 4)" (( "(") (binary_expression "uVar1 < param_2 + 4" (identifier "uVar1") (< "<") (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4"))) () ")")) (|| "||") (parenthesized_expression "(param_1 == (undefined1 *)0x0)" (( "(") (binary_expression "param_1 == (undefined1 *)0x0" (identifier "param_1") (== "==") (cast_expression "(undefined1 *)0x0" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")"))) () ")")) (compound_statement "{\n    if (uVar4 <= uVar2) {\n      FUN_0009dcd4(param_3 + 2,3);\n      FUN_0009df98(iVar7 + 0xe6c,iVar7 + 0x12ec);\n      FUN_0009ceb0();\n      goto joined_r0x0009e65c;\n    }\n    pbVar3 = pbVar6 + (int)pbVar8;\n    FUN_0009dcd4(param_3 + 4,3);\n    iVar5 = *(int *)(iVar7 + 0x1418);\n    uVar12 = *(undefined4 *)(iVar7 + 0x1434);\n    FUN_0009dcd4(iVar5 + -0x100,5);\n    FUN_0009dcd4(uVar12,5);\n    FUN_0009dcd4(pbVar6 + -3,4);\n    uVar1 = 0x10;\n    for (; FUN_0009dcd4(*(undefined2 *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3), pbVar3 != pbVar8;\n        pbVar8 = pbVar8 + 1) {\n      uVar1 = (uint)pbVar8[1];\n    }\n    FUN_0009dd80(iVar9,iVar5);\n    FUN_0009dd80(iVar11,uVar12);\n    FUN_0009df98(iVar9,iVar11);\n  }" ({ "{") (if_statement "if (uVar4 <= uVar2) {\n      FUN_0009dcd4(param_3 + 2,3);\n      FUN_0009df98(iVar7 + 0xe6c,iVar7 + 0x12ec);\n      FUN_0009ceb0();\n      goto joined_r0x0009e65c;\n    }" (if "if") (parenthesized_expression "(uVar4 <= uVar2)" (( "(") (binary_expression "uVar4 <= uVar2" (identifier "uVar4") (<= "<=") (identifier "uVar2")) () ")")) (compound_statement "{\n      FUN_0009dcd4(param_3 + 2,3);\n      FUN_0009df98(iVar7 + 0xe6c,iVar7 + 0x12ec);\n      FUN_0009ceb0();\n      goto joined_r0x0009e65c;\n    }" ({ "{") (expression_statement "FUN_0009dcd4(param_3 + 2,3);" (call_expression "FUN_0009dcd4(param_3 + 2,3)" (identifier "FUN_0009dcd4") (argument_list "(param_3 + 2,3)" (( "(") (binary_expression "param_3 + 2" (identifier "param_3") (+ "+") (number_literal "2")) (, ",") (number_literal "3") () ")"))) (; ";")) (expression_statement "FUN_0009df98(iVar7 + 0xe6c,iVar7 + 0x12ec);" (call_expression "FUN_0009df98(iVar7 + 0xe6c,iVar7 + 0x12ec)" (identifier "FUN_0009df98") (argument_list "(iVar7 + 0xe6c,iVar7 + 0x12ec)" (( "(") (binary_expression "iVar7 + 0xe6c" (identifier "iVar7") (+ "+") (number_literal "0xe6c")) (, ",") (binary_expression "iVar7 + 0x12ec" (identifier "iVar7") (+ "+") (number_literal "0x12ec")) () ")"))) (; ";")) (expression_statement "FUN_0009ceb0();" (call_expression "FUN_0009ceb0()" (identifier "FUN_0009ceb0") (argument_list "()" (( "(") () ")"))) (; ";")) (goto_statement "goto joined_r0x0009e65c;" (goto "goto") (statement_identifier "joined_r0x0009e65c") (; ";")) (} "}"))) (expression_statement "pbVar3 = pbVar6 + (int)pbVar8;" (assignment_expression "pbVar3 = pbVar6 + (int)pbVar8" (identifier "pbVar3") (= "=") (binary_expression "pbVar6 + (int)pbVar8" (identifier "pbVar6") (+ "+") (cast_expression "(int)pbVar8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pbVar8")))) (; ";")) (expression_statement "FUN_0009dcd4(param_3 + 4,3);" (call_expression "FUN_0009dcd4(param_3 + 4,3)" (identifier "FUN_0009dcd4") (argument_list "(param_3 + 4,3)" (( "(") (binary_expression "param_3 + 4" (identifier "param_3") (+ "+") (number_literal "4")) (, ",") (number_literal "3") () ")"))) (; ";")) (expression_statement "iVar5 = *(int *)(iVar7 + 0x1418);" (assignment_expression "iVar5 = *(int *)(iVar7 + 0x1418)" (identifier "iVar5") (= "=") (pointer_expression "*(int *)(iVar7 + 0x1418)" (* "*") (cast_expression "(int *)(iVar7 + 0x1418)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + 0x1418)" (( "(") (binary_expression "iVar7 + 0x1418" (identifier "iVar7") (+ "+") (number_literal "0x1418")) () ")"))))) (; ";")) (expression_statement "uVar12 = *(undefined4 *)(iVar7 + 0x1434);" (assignment_expression "uVar12 = *(undefined4 *)(iVar7 + 0x1434)" (identifier "uVar12") (= "=") (pointer_expression "*(undefined4 *)(iVar7 + 0x1434)" (* "*") (cast_expression "(undefined4 *)(iVar7 + 0x1434)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + 0x1434)" (( "(") (binary_expression "iVar7 + 0x1434" (identifier "iVar7") (+ "+") (number_literal "0x1434")) () ")"))))) (; ";")) (expression_statement "FUN_0009dcd4(iVar5 + -0x100,5);" (call_expression "FUN_0009dcd4(iVar5 + -0x100,5)" (identifier "FUN_0009dcd4") (argument_list "(iVar5 + -0x100,5)" (( "(") (binary_expression "iVar5 + -0x100" (identifier "iVar5") (+ "+") (number_literal "-0x100")) (, ",") (number_literal "5") () ")"))) (; ";")) (expression_statement "FUN_0009dcd4(uVar12,5);" (call_expression "FUN_0009dcd4(uVar12,5)" (identifier "FUN_0009dcd4") (argument_list "(uVar12,5)" (( "(") (identifier "uVar12") (, ",") (number_literal "5") () ")"))) (; ";")) (expression_statement "FUN_0009dcd4(pbVar6 + -3,4);" (call_expression "FUN_0009dcd4(pbVar6 + -3,4)" (identifier "FUN_0009dcd4") (argument_list "(pbVar6 + -3,4)" (( "(") (binary_expression "pbVar6 + -3" (identifier "pbVar6") (+ "+") (number_literal "-3")) (, ",") (number_literal "4") () ")"))) (; ";")) (expression_statement "uVar1 = 0x10;" (assignment_expression "uVar1 = 0x10" (identifier "uVar1") (= "=") (number_literal "0x10")) (; ";")) (for_statement "for (; FUN_0009dcd4(*(undefined2 *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3), pbVar3 != pbVar8;\n        pbVar8 = pbVar8 + 1) {\n      uVar1 = (uint)pbVar8[1];\n    }" (for "for") (( "(") (; ";") (comma_expression "FUN_0009dcd4(*(undefined2 *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3), pbVar3 != pbVar8" (call_expression "FUN_0009dcd4(*(undefined2 *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3)" (identifier "FUN_0009dcd4") (argument_list "(*(undefined2 *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3)" (( "(") (pointer_expression "*(undefined2 *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6)" (* "*") (cast_expression "(undefined2 *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + (uVar1 + 0x4d8) * 4 + 6)" (( "(") (binary_expression "iVar7 + (uVar1 + 0x4d8) * 4 + 6" (binary_expression "iVar7 + (uVar1 + 0x4d8) * 4" (identifier "iVar7") (+ "+") (binary_expression "(uVar1 + 0x4d8) * 4" (parenthesized_expression "(uVar1 + 0x4d8)" (( "(") (binary_expression "uVar1 + 0x4d8" (identifier "uVar1") (+ "+") (number_literal "0x4d8")) () ")")) (* "*") (number_literal "4"))) (+ "+") (number_literal "6")) () ")")))) (, ",") (number_literal "3") () ")"))) (, ",") (binary_expression "pbVar3 != pbVar8" (identifier "pbVar3") (!= "!=") (identifier "pbVar8"))) (; ";") (assignment_expression "pbVar8 = pbVar8 + 1" (identifier "pbVar8") (= "=") (binary_expression "pbVar8 + 1" (identifier "pbVar8") (+ "+") (number_literal "1"))) () ")") (compound_statement "{\n      uVar1 = (uint)pbVar8[1];\n    }" ({ "{") (expression_statement "uVar1 = (uint)pbVar8[1];" (assignment_expression "uVar1 = (uint)pbVar8[1]" (identifier "uVar1") (= "=") (cast_expression "(uint)pbVar8[1]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "pbVar8[1]" (identifier "pbVar8") ([ "[") (number_literal "1") (] "]")))) (; ";")) (} "}"))) (expression_statement "FUN_0009dd80(iVar9,iVar5);" (call_expression "FUN_0009dd80(iVar9,iVar5)" (identifier "FUN_0009dd80") (argument_list "(iVar9,iVar5)" (( "(") (identifier "iVar9") (, ",") (identifier "iVar5") () ")"))) (; ";")) (expression_statement "FUN_0009dd80(iVar11,uVar12);" (call_expression "FUN_0009dd80(iVar11,uVar12)" (identifier "FUN_0009dd80") (argument_list "(iVar11,uVar12)" (( "(") (identifier "iVar11") (, ",") (identifier "uVar12") () ")"))) (; ";")) (expression_statement "FUN_0009df98(iVar9,iVar11);" (call_expression "FUN_0009df98(iVar9,iVar11)" (identifier "FUN_0009df98") (argument_list "(iVar9,iVar11)" (( "(") (identifier "iVar9") (, ",") (identifier "iVar11") () ")"))) (; ";")) (} "}")) (else_clause "else {\n    puVar10 = param_1 + param_2;\n    FUN_0009dcd4(param_3,3);\n    FUN_0009e1f4();\n    FUN_0009dc0c(param_2 & 0xffff);\n    FUN_0009dc0c(~param_2 & 0xffff);\n    for (; param_1 != puVar10; param_1 = param_1 + 1) {\n      iVar9 = *(int *)(iVar7 + -0x10);\n      *(int *)(iVar7 + -0x10) = iVar9 + 1;\n      *(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9) = *param_1;\n      if (*(int *)(iVar7 + -0x10) == 0x4000) {\n        FUN_0009dbac();\n      }\n    }\n  }" (else "else") (compound_statement "{\n    puVar10 = param_1 + param_2;\n    FUN_0009dcd4(param_3,3);\n    FUN_0009e1f4();\n    FUN_0009dc0c(param_2 & 0xffff);\n    FUN_0009dc0c(~param_2 & 0xffff);\n    for (; param_1 != puVar10; param_1 = param_1 + 1) {\n      iVar9 = *(int *)(iVar7 + -0x10);\n      *(int *)(iVar7 + -0x10) = iVar9 + 1;\n      *(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9) = *param_1;\n      if (*(int *)(iVar7 + -0x10) == 0x4000) {\n        FUN_0009dbac();\n      }\n    }\n  }" ({ "{") (expression_statement "puVar10 = param_1 + param_2;" (assignment_expression "puVar10 = param_1 + param_2" (identifier "puVar10") (= "=") (binary_expression "param_1 + param_2" (identifier "param_1") (+ "+") (identifier "param_2"))) (; ";")) (expression_statement "FUN_0009dcd4(param_3,3);" (call_expression "FUN_0009dcd4(param_3,3)" (identifier "FUN_0009dcd4") (argument_list "(param_3,3)" (( "(") (identifier "param_3") (, ",") (number_literal "3") () ")"))) (; ";")) (expression_statement "FUN_0009e1f4();" (call_expression "FUN_0009e1f4()" (identifier "FUN_0009e1f4") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "FUN_0009dc0c(param_2 & 0xffff);" (call_expression "FUN_0009dc0c(param_2 & 0xffff)" (identifier "FUN_0009dc0c") (argument_list "(param_2 & 0xffff)" (( "(") (binary_expression "param_2 & 0xffff" (identifier "param_2") (& "&") (number_literal "0xffff")) () ")"))) (; ";")) (expression_statement "FUN_0009dc0c(~param_2 & 0xffff);" (call_expression "FUN_0009dc0c(~param_2 & 0xffff)" (identifier "FUN_0009dc0c") (argument_list "(~param_2 & 0xffff)" (( "(") (binary_expression "~param_2 & 0xffff" (unary_expression "~param_2" (~ "~") (identifier "param_2")) (& "&") (number_literal "0xffff")) () ")"))) (; ";")) (for_statement "for (; param_1 != puVar10; param_1 = param_1 + 1) {\n      iVar9 = *(int *)(iVar7 + -0x10);\n      *(int *)(iVar7 + -0x10) = iVar9 + 1;\n      *(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9) = *param_1;\n      if (*(int *)(iVar7 + -0x10) == 0x4000) {\n        FUN_0009dbac();\n      }\n    }" (for "for") (( "(") (; ";") (binary_expression "param_1 != puVar10" (identifier "param_1") (!= "!=") (identifier "puVar10")) (; ";") (assignment_expression "param_1 = param_1 + 1" (identifier "param_1") (= "=") (binary_expression "param_1 + 1" (identifier "param_1") (+ "+") (number_literal "1"))) () ")") (compound_statement "{\n      iVar9 = *(int *)(iVar7 + -0x10);\n      *(int *)(iVar7 + -0x10) = iVar9 + 1;\n      *(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9) = *param_1;\n      if (*(int *)(iVar7 + -0x10) == 0x4000) {\n        FUN_0009dbac();\n      }\n    }" ({ "{") (expression_statement "iVar9 = *(int *)(iVar7 + -0x10);" (assignment_expression "iVar9 = *(int *)(iVar7 + -0x10)" (identifier "iVar9") (= "=") (pointer_expression "*(int *)(iVar7 + -0x10)" (* "*") (cast_expression "(int *)(iVar7 + -0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + -0x10)" (( "(") (binary_expression "iVar7 + -0x10" (identifier "iVar7") (+ "+") (number_literal "-0x10")) () ")"))))) (; ";")) (expression_statement "*(int *)(iVar7 + -0x10) = iVar9 + 1;" (assignment_expression "*(int *)(iVar7 + -0x10) = iVar9 + 1" (pointer_expression "*(int *)(iVar7 + -0x10)" (* "*") (cast_expression "(int *)(iVar7 + -0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + -0x10)" (( "(") (binary_expression "iVar7 + -0x10" (identifier "iVar7") (+ "+") (number_literal "-0x10")) () ")")))) (= "=") (binary_expression "iVar9 + 1" (identifier "iVar9") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9) = *param_1;" (assignment_expression "*(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9) = *param_1" (pointer_expression "*(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9)" (* "*") (cast_expression "(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(iVar7 + -0x3c) + iVar9)" (( "(") (binary_expression "*(int *)(iVar7 + -0x3c) + iVar9" (pointer_expression "*(int *)(iVar7 + -0x3c)" (* "*") (cast_expression "(int *)(iVar7 + -0x3c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + -0x3c)" (( "(") (binary_expression "iVar7 + -0x3c" (identifier "iVar7") (+ "+") (number_literal "-0x3c")) () ")")))) (+ "+") (identifier "iVar9")) () ")")))) (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (if_statement "if (*(int *)(iVar7 + -0x10) == 0x4000) {\n        FUN_0009dbac();\n      }" (if "if") (parenthesized_expression "(*(int *)(iVar7 + -0x10) == 0x4000)" (( "(") (binary_expression "*(int *)(iVar7 + -0x10) == 0x4000" (pointer_expression "*(int *)(iVar7 + -0x10)" (* "*") (cast_expression "(int *)(iVar7 + -0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + -0x10)" (( "(") (binary_expression "iVar7 + -0x10" (identifier "iVar7") (+ "+") (number_literal "-0x10")) () ")")))) (== "==") (number_literal "0x4000")) () ")")) (compound_statement "{\n        FUN_0009dbac();\n      }" ({ "{") (expression_statement "FUN_0009dbac();" (call_expression "FUN_0009dbac()" (identifier "FUN_0009dbac") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (} "}"))) (} "}")))) (expression_statement "FUN_0009ceb0();" (call_expression "FUN_0009ceb0()" (identifier "FUN_0009ceb0") (argument_list "()" (( "(") () ")"))) (; ";")) (labeled_statement "joined_r0x0009e65c:\n  if (param_3 != 0) {\n    FUN_0009e1f4();\n    return;\n  }" (statement_identifier "joined_r0x0009e65c") (: ":") (if_statement "if (param_3 != 0) {\n    FUN_0009e1f4();\n    return;\n  }" (if "if") (parenthesized_expression "(param_3 != 0)" (( "(") (binary_expression "param_3 != 0" (identifier "param_3") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_0009e1f4();\n    return;\n  }" ({ "{") (expression_statement "FUN_0009e1f4();" (call_expression "FUN_0009e1f4()" (identifier "FUN_0009e1f4") (argument_list "()" (( "(") () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))) (return_statement "return;" (return "return") (; ";")) (} "}")))

void function_1(char *var_14,type_1 var_13,int var_16)

{
  type_2 var_8;
  type_2 var_11;
  type_3 *var_7;
  type_2 var_12;
  int var_10;
  type_3 *var_9;
  int var_1;
  type_3 *var_19;
  type_4 *tree;
  char *var_23;
  type_4 *tree_00;
  
  var_1 = *(int *)PTR_ptr_to_globals_0012a304;
  tree = (type_4 *)(var_1 + 0x484);
  tree_00 = (type_4 *)(var_1 + 0xd78);
  *(type_5 *)(var_1 + *(int *)(var_1 + 0x2aa8) + 0x1aa0) = *(type_5 *)(var_1 + 0x2aac);
  var_2((type_6 *)(var_1 + 0x1400));
  var_2((type_6 *)(var_1 + 0x141c));
  var_3(tree,*(int *)(var_1 + 0x1418));
  var_3(tree_00,*(int *)(var_1 + 0x1434));
  var_2((type_6 *)(var_1 + 0x1438));
  var_8 = 0xf;
  var_19 = var_4<var_5&var_6)9__f_l_0012a1a8 + 0x7050;
  var_7 = var_4<var_5&var_6)9__f_l_0012a1a8 + 0x7061;
  while (var_9 = var_7 + (1 - (int)var_19), *(short *)(var_1 + (var_8 + 0x4d8) * 4 + 6) == 0) {
    if (var_4<var_5&var_6)9__f_l_0012a1a8 + 0x7052 == var_7) {
      var_10 = 9;
      var_9 = &SUB_00000002;
      goto LAB_0009e3d4;
    }
    var_8 = (type_2)*var_7;
    var_7 = var_7 + -1;
  }
  var_10 = (int)(var_9 + 1) * 3;
LAB_0009e3d4:
  var_10 = *(int *)(var_1 + 0x2ab0) + 0xe + var_10;
  var_12 = *(int *)(var_1 + 0x2ab4) + 10U >> 3;
  *(int *)(var_1 + 0x2ab0) = var_10;
  var_11 = var_10 + 10U >> 3;
  var_8 = var_12;
  if (var_11 <= var_12) {
    var_8 = var_11;
  }
  if ((var_8 < var_13 + 4) || (var_14 == (char *)0x0)) {
    if (var_12 <= var_11) {
      var_15(var_16 + 2,3);
      var_17((type_4 *)(var_1 + 0xe6c),(type_4 *)(var_1 + 0x12ec));
      var_18();
      goto joined_r0x0009e65c;
    }
    var_7 = var_9 + (int)var_19;
    var_15(var_16 + 4,3);
    var_10 = *(int *)(var_1 + 0x1418);
    var_11 = *(type_2 *)(var_1 + 0x1434);
    var_15(var_10 - 0x100,5);
    var_15(var_11,5);
    var_15((type_2)(var_9 + -3),4);
    var_8 = 0x10;
    for (; var_15((type_2)*(type_7 *)(var_1 + (var_8 + 0x4d8) * 4 + 6),3), var_7 != var_19;
        var_19 = var_19 + 1) {
      var_8 = (type_2)var_19[1];
    }
    var_20(tree,var_10);
    var_20(tree_00,var_11);
    var_17(tree,tree_00);
  }
  else {
    var_23 = var_14 + var_13;
    var_15(var_16,3);
    var_21();
    var_22((type_7)var_13);
    var_22(~(type_7)var_13);
    for (; var_14 != var_23; var_14 = var_14 + 1) {
      var_10 = *(int *)(var_1 + -0x10);
      *(int *)(var_1 + -0x10) = var_10 + 1;
      *(char *)(*(int *)(var_1 + -0x3c) + var_10) = *var_14;
      if (*(int *)(var_1 + -0x10) == 0x4000) {
        var_24();
      }
    }
  }
  var_18();
joined_r0x0009e65c:
  if (var_16 != 0) {
    var_21();
    return;
  }
  return;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) right: (number_literal))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (while_statement condition: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))))) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (number_literal))))) right: (number_literal)))) body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (identifier)) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) right: (number_literal)))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) right: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (for_statement condition: (comma_expression left: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (number_literal))))) (number_literal))) right: (binary_expression left: (identifier) right: (identifier))) update: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (unary_expression argument: (identifier)) right: (number_literal))))) (for_statement condition: (binary_expression left: (identifier) right: (identifier)) update: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))))) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list)))))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (return_statement)))) (return_statement))))

void MASKED(undefined1 *param_1,uint param_2,int param_3)

{
  uint uVar1;
  uint uVar2;
  byte *pbVar3;
  uint uVar4;
  int iVar5;
  byte *pbVar6;
  int iVar7;
  byte *pbVar8;
  int iVar9;
  undefined1 *puVar10;
  int iVar11;
  undefined4 uVar12;
  
  iVar7 = *(int *)PTR_DAT_0012a304;
  iVar9 = iVar7 + 0x484;
  iVar11 = iVar7 + 0xd78;
  *(undefined1 *)(iVar7 + *(int *)(iVar7 + 0x2aa8) + 0x1aa0) = *(undefined1 *)(iVar7 + 0x2aac);
  FUN_0009d144(iVar7 + 0x1400);
  FUN_0009d144(iVar7 + 0x141c);
  FUN_0009d61c(iVar9,*(undefined4 *)(iVar7 + 0x1418));
  FUN_0009d61c(iVar11,*(undefined4 *)(iVar7 + 0x1434));
  FUN_0009d144(iVar7 + 0x1438);
  uVar1 = 0xf;
  pbVar8 = PTR_FUN_0012a1a8 + 0x7050;
  pbVar3 = PTR_FUN_0012a1a8 + 0x7061;
  while (pbVar6 = pbVar3 + (1 - (int)pbVar8), *(short *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6) == 0) {
    if (PTR_FUN_0012a1a8 + 0x7052 == pbVar3) {
      iVar5 = 9;
      pbVar6 = &SUB_00000002;
      goto LAB_0009e3d4;
    }
    uVar1 = (uint)*pbVar3;
    pbVar3 = pbVar3 + -1;
  }
  iVar5 = (int)(pbVar6 + 1) * 3;
LAB_0009e3d4:
  iVar5 = *(int *)(iVar7 + 0x2ab0) + 0xe + iVar5;
  uVar4 = *(int *)(iVar7 + 0x2ab4) + 10U >> 3;
  *(int *)(iVar7 + 0x2ab0) = iVar5;
  uVar2 = iVar5 + 10U >> 3;
  uVar1 = uVar4;
  if (uVar2 <= uVar4) {
    uVar1 = uVar2;
  }
  if ((uVar1 < param_2 + 4) || (param_1 == (undefined1 *)0x0)) {
    if (uVar4 <= uVar2) {
      FUN_0009dcd4(param_3 + 2,3);
      FUN_0009df98(iVar7 + 0xe6c,iVar7 + 0x12ec);
      FUN_0009ceb0();
      goto joined_r0x0009e65c;
    }
    pbVar3 = pbVar6 + (int)pbVar8;
    FUN_0009dcd4(param_3 + 4,3);
    iVar5 = *(int *)(iVar7 + 0x1418);
    uVar12 = *(undefined4 *)(iVar7 + 0x1434);
    FUN_0009dcd4(iVar5 + -0x100,5);
    FUN_0009dcd4(uVar12,5);
    FUN_0009dcd4(pbVar6 + -3,4);
    uVar1 = 0x10;
    for (; FUN_0009dcd4(*(undefined2 *)(iVar7 + (uVar1 + 0x4d8) * 4 + 6),3), pbVar3 != pbVar8;
        pbVar8 = pbVar8 + 1) {
      uVar1 = (uint)pbVar8[1];
    }
    FUN_0009dd80(iVar9,iVar5);
    FUN_0009dd80(iVar11,uVar12);
    FUN_0009df98(iVar9,iVar11);
  }
  else {
    puVar10 = param_1 + param_2;
    FUN_0009dcd4(param_3,3);
    FUN_0009e1f4();
    FUN_0009dc0c(param_2 & 0xffff);
    FUN_0009dc0c(~param_2 & 0xffff);
    for (; param_1 != puVar10; param_1 = param_1 + 1) {
      iVar9 = *(int *)(iVar7 + -0x10);
      *(int *)(iVar7 + -0x10) = iVar9 + 1;
      *(undefined1 *)(*(int *)(iVar7 + -0x3c) + iVar9) = *param_1;
      if (*(int *)(iVar7 + -0x10) == 0x4000) {
        FUN_0009dbac();
      }
    }
  }
  FUN_0009ceb0();
joined_r0x0009e65c:
  if (param_3 != 0) {
    FUN_0009e1f4();
    return;
  }
  return;
}

