
int get_mouseinput(int *mouse_y,int *mouse_x,_Bool allow_shortcuts)

{
  _Bool _Var1;
  undefined *puVar2;
  undefined *puVar3;
  undefined *puVar4;
  int *piVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  size_t sVar9;
  sc *psVar10;
  int *piVar11;
  uint uVar12;
  undefined4 uVar13;
  uint uVar14;
  undefined3 in_register_00000018;
  undefined4 *puVar15;
  uint uVar16;
  undefined *puVar17;
  MEVENT mevent;
  
  puVar4 = PTR___stack_chk_guard_000780f8;
  piVar5 = *(int **)PTR___stack_chk_guard_000780f8;
  iVar6 = (*(code *)PTR_getmouse_00078154)(&mevent);
  puVar3 = PTR_wenclose_00077ea4;
  puVar2 = PTR_margin_00077690;
  puVar17 = PTR_bottomwin_000775cc;
  if (iVar6 == -1) goto LAB_000447ec;
  uVar13 = *(undefined4 *)PTR_bottomwin_000775cc;
  *mouse_x = mevent.x - *(int *)PTR_margin_00077690;
  *mouse_y = mevent.y;
  iVar7 = (*(code *)puVar3)(uVar13,mevent.y,*mouse_x);
  if ((mevent.bstate & 5) == 0) {
    iVar6 = 2;
    if ((mevent.bstate & 0x210000) == 0) goto LAB_000447ec;
    iVar8 = (*(code *)PTR_wenclose_00077ea4)(*(undefined4 *)PTR_edit_000775d8,*mouse_y,*mouse_x);
    if (iVar7 == 0) {
      iVar6 = 2;
      if (iVar8 == 0) goto LAB_000447ec;
    }
    else {
      (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar17,mouse_y,mouse_x,0);
      if ((iVar8 == 0) && (*mouse_y != 0)) {
LAB_000448cc:
        iVar6 = 2;
        goto LAB_000447ec;
      }
    }
    iVar6 = 3;
    do {
      iVar7 = 0x102;
      iVar6 = iVar6 + -1;
      if ((mevent.bstate & 0x10000) != 0) {
        iVar7 = 0x103;
      }
      put_back(iVar7);
    } while (iVar6 != 0);
LAB_00044898:
    iVar6 = 1;
  }
  else {
    if (CONCAT31(in_register_00000018,allow_shortcuts) != 0) {
      iVar6 = 0;
      if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;
      if (iVar7 != 0) {
        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar17,mouse_y,mouse_x,0);
        puVar17 = PTR_currmenu_000778a4;
        if (*mouse_y == 0) {
          *mouse_x = mevent.x - *(int *)puVar2;
          *mouse_y = mevent.y;
          iVar6 = 0;
          goto LAB_000447ec;
        }
        sVar9 = length_of_list(*(int *)PTR_currmenu_000778a4);
        uVar14 = *(uint *)PTR_COLS_00077fb4;
        iVar6 = (int)(uVar14 + 0x28) / 0x14;
        if ((uint)(iVar6 * 2) <= sVar9) {
          sVar9 = iVar6 * 2;
        }
        if (sVar9 < 2) {
          if (iVar6 == 0) {
            trap(7);
          }
          uVar12 = (int)uVar14 / iVar6;
        }
        else {
          uVar12 = (sVar9 >> 1) + (sVar9 & 1);
          if (uVar12 == 0) {
            trap(7);
          }
          uVar12 = uVar14 / uVar12;
        }
        if (uVar12 == 0) {
          trap(7);
        }
        uVar16 = (*mouse_x / (int)uVar12) * 2 + *mouse_y;
        if (sVar9 < uVar16) {
          if (uVar12 == 0) {
            trap(7);
          }
          if ((int)uVar14 % (int)uVar12 <= *mouse_x % (int)uVar12) goto LAB_000448cc;
          uVar16 = uVar16 - 2;
          iVar6 = 2;
          if (sVar9 < uVar16) goto LAB_000447ec;
        }
        for (puVar15 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar6 = 1,
            puVar15 != (undefined4 *)0x0; puVar15 = (undefined4 *)puVar15[6]) {
          uVar14 = *(uint *)puVar17;
          if ((((uVar14 & puVar15[1]) != 0) &&
              (psVar10 = first_sc_for(uVar14,(_func_void *)*puVar15), psVar10 != (sc *)0x0)) &&
             (uVar16 = uVar16 - 1, uVar16 == 0)) {
            psVar10 = first_sc_for(*(int *)puVar17,(_func_void *)*puVar15);
            _Var1 = psVar10->meta;
            put_back(psVar10->keycode);
            if (_Var1 == false) goto LAB_00044898;
            put_back(0x1b);
            iVar6 = 1;
            break;
          }
        }
        goto LAB_000447ec;
      }
    }
    iVar6 = 0;
  }
LAB_000447ec:
  if (piVar5 == *(int **)puVar4) {
    return iVar6;
  }
  puVar17 = PTR___stack_chk_fail_000780c0;
  (*(code *)PTR___stack_chk_fail_000780c0)();
  piVar11 = *(int **)(puVar17 + 0x33058);
  if (**(char **)(puVar17 + 0x32c28) == '\0') {
    if (*piVar5 - 0x20U < 0x5f) {
      return 0;
    }
    if (*piVar5 - 0xa0U < 0x60) {
      return 0;
    }
    piVar11 = *(int **)(puVar17 + 0x33058);
  }
  iVar6 = *piVar11;
  if (iVar6 != 0) {
    while ((((**(uint **)(puVar17 + 0x32e28) & *(uint *)(iVar6 + 0xc)) == 0 ||
            (*piVar5 != *(int *)(iVar6 + 8))) ||
           (*(char *)(iVar6 + 4) != **(char **)(puVar17 + 0x32c28)))) {
      iVar6 = *(int *)(iVar6 + 0x20);
      if (iVar6 == 0) {
        return 0;
      }
    }
  }
  return iVar6;
}



int get_mouseinput(int *param_1,int *param_2,int param_3)

{
  char cVar1;
  undefined *puVar2;
  undefined *puVar3;
  undefined *puVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  uint uVar8;
  int *piVar9;
  uint uVar10;
  undefined4 uVar11;
  uint uVar12;
  undefined4 *puVar13;
  uint uVar14;
  undefined *puVar15;
  undefined1 auStack_38 [4];
  int local_34;
  int local_30;
  uint local_28;
  int *local_24;
  
  puVar4 = PTR___stack_chk_guard_000780f8;
  local_24 = *(int **)PTR___stack_chk_guard_000780f8;
  iVar5 = (*(code *)PTR_getmouse_00078154)(auStack_38);
  puVar3 = PTR_wenclose_00077ea4;
  puVar2 = PTR_margin_00077690;
  puVar15 = PTR_bottomwin_000775cc;
  if (iVar5 == -1) goto LAB_000447ec;
  uVar11 = *(undefined4 *)PTR_bottomwin_000775cc;
  *param_2 = local_34 - *(int *)PTR_margin_00077690;
  *param_1 = local_30;
  iVar6 = (*(code *)puVar3)(uVar11,local_30,*param_2);
  if ((local_28 & 5) == 0) {
    iVar5 = 2;
    if ((local_28 & 0x210000) == 0) goto LAB_000447ec;
    iVar7 = (*(code *)PTR_wenclose_00077ea4)(*(undefined4 *)PTR_edit_000775d8,*param_1,*param_2);
    if (iVar6 == 0) {
      iVar5 = 2;
      if (iVar7 == 0) goto LAB_000447ec;
    }
    else {
      (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);
      if ((iVar7 == 0) && (*param_1 != 0)) {
LAB_000448cc:
        iVar5 = 2;
        goto LAB_000447ec;
      }
    }
    iVar5 = 3;
    do {
      uVar11 = 0x102;
      iVar5 = iVar5 + -1;
      if ((local_28 & 0x10000) != 0) {
        uVar11 = 0x103;
      }
      put_back(uVar11);
    } while (iVar5 != 0);
LAB_00044898:
    iVar5 = 1;
  }
  else {
    if (param_3 != 0) {
      iVar5 = 0;
      if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;
      if (iVar6 != 0) {
        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);
        puVar15 = PTR_currmenu_000778a4;
        if (*param_1 == 0) {
          *param_2 = local_34 - *(int *)puVar2;
          *param_1 = local_30;
          iVar5 = 0;
          goto LAB_000447ec;
        }
        uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4);
        uVar12 = *(uint *)PTR_COLS_00077fb4;
        iVar5 = (int)(uVar12 + 0x28) / 0x14;
        if ((uint)(iVar5 * 2) <= uVar8) {
          uVar8 = iVar5 * 2;
        }
        if (uVar8 < 2) {
          if (iVar5 == 0) {
            trap(7);
          }
          uVar10 = (int)uVar12 / iVar5;
        }
        else {
          uVar10 = (uVar8 >> 1) + (uVar8 & 1);
          if (uVar10 == 0) {
            trap(7);
          }
          uVar10 = uVar12 / uVar10;
        }
        if (uVar10 == 0) {
          trap(7);
        }
        uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1;
        if (uVar8 < uVar14) {
          if (uVar10 == 0) {
            trap(7);
          }
          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;
          uVar14 = uVar14 - 2;
          iVar5 = 2;
          if (uVar8 < uVar14) goto LAB_000447ec;
        }
        for (puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar5 = 1,
            puVar13 != (undefined4 *)0x0; puVar13 = (undefined4 *)puVar13[6]) {
          uVar8 = *(uint *)puVar15;
          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&
             (uVar14 = uVar14 - 1, uVar14 == 0)) {
            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);
            cVar1 = *(char *)(iVar5 + 4);
            put_back(*(undefined4 *)(iVar5 + 8));
            if (cVar1 == '\0') goto LAB_00044898;
            put_back(0x1b);
            iVar5 = 1;
            break;
          }
        }
        goto LAB_000447ec;
      }
    }
    iVar5 = 0;
  }
LAB_000447ec:
  if (local_24 == *(int **)puVar4) {
    return iVar5;
  }
  puVar15 = PTR___stack_chk_fail_000780c0;
  (*(code *)PTR___stack_chk_fail_000780c0)();
  piVar9 = *(int **)(puVar15 + 0x33058);
  if (**(char **)(puVar15 + 0x32c28) == '\0') {
    if (*local_24 - 0x20U < 0x5f) {
      return 0;
    }
    if (*local_24 - 0xa0U < 0x60) {
      return 0;
    }
    piVar9 = *(int **)(puVar15 + 0x33058);
  }
  iVar5 = *piVar9;
  if (iVar5 != 0) {
    while ((((**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0 ||
            (*local_24 != *(int *)(iVar5 + 8))) ||
           (*(char *)(iVar5 + 4) != **(char **)(puVar15 + 0x32c28)))) {
      iVar5 = *(int *)(iVar5 + 0x20);
      if (iVar5 == 0) {
        return 0;
      }
    }
  }
  return iVar5;
}


lui gp,0x4
addiu gp,gp,-0x51f8
addu gp,gp,t9
addiu sp,sp,-0x50
lw t9,-0x73cc(gp)
sw s1,0x34(sp)
lw s1,-0x7428(gp)
sw s2,0x38(sp)
or s2,a0,zero
addiu a0,sp,0x18
sw gp,0x10(sp)
sw s4,0x40(sp)
or s4,a2,zero
sw s0,0x30(sp)
or s0,a1,zero
sw ra,0x4c(sp)
sw s6,0x48(sp)
sw s5,0x44(sp)
sw s3,0x3c(sp)
lw v0,0x0(s1)
sw v0,0x2c(sp)
jalr t9
_nop
li v1,-0x1
beq v0,v1,0x000447ec
_lw gp,0x10(sp)
lw s5,-0x7e90(gp)
lw v0,0x1c(sp)
lw s3,-0x7f54(gp)
lw v1,0x20(sp)
lw a0,0x0(s5)
lw t9,-0x767c(gp)
or a1,v1,zero
subu v0,v0,a0
lw a0,0x0(s3)
sw v0,0x0(s0)
sw v1,0x0(s2)
jalr t9
_lw a2,0x0(s0)
lw v1,0x28(sp)
or s6,v0,zero
andi v0,v1,0x5
beq v0,zero,0x00044820
_lw gp,0x10(sp)
beq s4,zero,0x000447e8
_lw v0,-0x7f84(gp)
lw v0,0x0(v0)
andi v0,v0,0x8
bne v0,zero,0x000447ec
_or v0,zero,zero
bne s6,zero,0x000448d4
_lw t9,-0x761c(gp)
or v0,zero,zero
lw a0,0x2c(sp)
lw v1,0x0(s1)
bne a0,v1,0x00044a70
_lw ra,0x4c(sp)
lw s6,0x48(sp)
lw s5,0x44(sp)
lw s4,0x40(sp)
lw s3,0x3c(sp)
lw s2,0x38(sp)
lw s1,0x34(sp)
lw s0,0x30(sp)
jr ra
_addiu sp,sp,0x50
lui v0,0x21
and v1,v1,v0
beq v1,zero,0x000447ec
_li v0,0x2
lw v0,-0x7f48(gp)
lw t9,-0x767c(gp)
lw a2,0x0(s0)
lw a1,0x0(s2)
jalr t9
_lw a0,0x0(v0)
lw gp,0x10(sp)
bne s6,zero,0x000448a0
_or s4,v0,zero
beq v0,zero,0x000447ec
_li v0,0x2
lw s5,-0x7744(gp)
li s0,0x3
lui s4,0x1
li s3,0x103
li s2,0x102
lw a0,0x28(sp)
or v0,s2,zero
addiu s0,s0,-0x1
or t9,s5,zero
and a0,a0,s4
movn v0,s3,a0
bal 0x00043660
_or a0,v0,zero
bne s0,zero,0x00044870
_lw gp,0x10(sp)
b 0x000447ec
_li v0,0x1
lw t9,-0x761c(gp)
or a3,zero,zero
lw a0,0x0(s3)
or a2,s0,zero
jalr t9
_or a1,s2,zero
bne s4,zero,0x0004485c
_lw gp,0x10(sp)
lw v0,0x0(s2)
beq v0,zero,0x0004485c
_nop
b 0x000447ec
_li v0,0x2
or a3,zero,zero
lw a0,0x0(s3)
or a2,s0,zero
jalr t9
_or a1,s2,zero
lw v0,0x0(s2)
bne v0,zero,0x00044910
_lw gp,0x10(sp)
lw a0,0x0(s5)
lw v1,0x1c(sp)
subu v1,v1,a0
sw v1,0x0(s0)
lw v1,0x20(sp)
b 0x000447ec
_sw v1,0x0(s2)
lw s3,-0x7c7c(gp)
lw t9,-0x7738(gp)
bal 0x00025208
_lw a0,0x0(s3)
lw gp,0x10(sp)
lw v1,-0x756c(gp)
lw a1,0x0(v1)
lui v1,0x6666
addiu v1,v1,0x6667
addiu a0,a1,0x28
mult a0,v1
sra a0,a0,0x1f
mfhi v1
sra v1,v1,0x3
subu v1,v1,a0
sll a2,v1,0x1
sltu a0,v0,a2
movz v0,a2,a0
sltiu a0,v0,0x2
bne a0,zero,0x00044a20
_nop
srl v1,v0,0x1
andi a0,v0,0x1
addu v1,v1,a0
teq v1,zero
divu a1,v1
mflo v1
lw a0,0x0(s0)
lw a2,0x0(s2)
teq v1,zero
div a0,v1
mflo s2
sll s2,s2,0x1
addu s2,s2,a2
sltu a2,v0,s2
beq a2,zero,0x000449cc
_mfhi a0
teq v1,zero
div a1,v1
mfhi v1
slt v1,a0,v1
beq v1,zero,0x000448cc
_nop
addiu s2,s2,-0x2
sltu v0,v0,s2
bne v0,zero,0x000447ec
_li v0,0x2
lw v0,-0x7a50(gp)
lw s0,0x0(v0)
beq s0,zero,0x000447ec
_li v0,0x1
lw a0,0x0(s3)
lw v0,0x4(s0)
and v0,a0,v0
beq v0,zero,0x00044a0c
_lw t9,-0x7bb0(gp)
bal 0x0002534c
_lw a1,0x0(s0)
beq v0,zero,0x00044a0c
_lw gp,0x10(sp)
addiu s2,s2,-0x1
beq s2,zero,0x00044a30
_lw t9,-0x7bb0(gp)
lw s0,0x18(s0)
bne s0,zero,0x000449dc
_li v0,0x1
b 0x000447ec
_nop
teq v1,zero
div a1,v1
b 0x0004497c
_mflo v1
lw a1,0x0(s0)
lw s0,-0x7744(gp)
bal 0x0002534c
_lw a0,0x0(s3)
lbu s2,0x4(v0)
or t9,s0,zero
bal 0x00043660
_lw a0,0x8(v0)
beq s2,zero,0x00044898
_lw gp,0x10(sp)
or t9,s0,zero
bal 0x00043660
_li a0,0x1b
li v0,0x1
b 0x000447ec
_lw gp,0x10(sp)
lw t9,-0x7460(gp)
jalr t9
_nop
(translation_unit "int get_mouseinput(int *param_1,int *param_2,int param_3)\n\n{\n  char cVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined *puVar4;\n  int iVar5;\n  int iVar6;\n  int iVar7;\n  uint uVar8;\n  int *piVar9;\n  uint uVar10;\n  undefined4 uVar11;\n  uint uVar12;\n  undefined4 *puVar13;\n  uint uVar14;\n  undefined *puVar15;\n  undefined1 auStack_38 [4];\n  int local_34;\n  int local_30;\n  uint local_28;\n  int *local_24;\n  \n  puVar4 = PTR___stack_chk_guard_000780f8;\n  local_24 = *(int **)PTR___stack_chk_guard_000780f8;\n  iVar5 = (*(code *)PTR_getmouse_00078154)(auStack_38);\n  puVar3 = PTR_wenclose_00077ea4;\n  puVar2 = PTR_margin_00077690;\n  puVar15 = PTR_bottomwin_000775cc;\n  if (iVar5 == -1) goto LAB_000447ec;\n  uVar11 = *(undefined4 *)PTR_bottomwin_000775cc;\n  *param_2 = local_34 - *(int *)PTR_margin_00077690;\n  *param_1 = local_30;\n  iVar6 = (*(code *)puVar3)(uVar11,local_30,*param_2);\n  if ((local_28 & 5) == 0) {\n    iVar5 = 2;\n    if ((local_28 & 0x210000) == 0) goto LAB_000447ec;\n    iVar7 = (*(code *)PTR_wenclose_00077ea4)(*(undefined4 *)PTR_edit_000775d8,*param_1,*param_2);\n    if (iVar6 == 0) {\n      iVar5 = 2;\n      if (iVar7 == 0) goto LAB_000447ec;\n    }\n    else {\n      (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n      if ((iVar7 == 0) && (*param_1 != 0)) {\nLAB_000448cc:\n        iVar5 = 2;\n        goto LAB_000447ec;\n      }\n    }\n    iVar5 = 3;\n    do {\n      uVar11 = 0x102;\n      iVar5 = iVar5 + -1;\n      if ((local_28 & 0x10000) != 0) {\n        uVar11 = 0x103;\n      }\n      put_back(uVar11);\n    } while (iVar5 != 0);\nLAB_00044898:\n    iVar5 = 1;\n  }\n  else {\n    if (param_3 != 0) {\n      iVar5 = 0;\n      if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;\n      if (iVar6 != 0) {\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n        puVar15 = PTR_currmenu_000778a4;\n        if (*param_1 == 0) {\n          *param_2 = local_34 - *(int *)puVar2;\n          *param_1 = local_30;\n          iVar5 = 0;\n          goto LAB_000447ec;\n        }\n        uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4);\n        uVar12 = *(uint *)PTR_COLS_00077fb4;\n        iVar5 = (int)(uVar12 + 0x28) / 0x14;\n        if ((uint)(iVar5 * 2) <= uVar8) {\n          uVar8 = iVar5 * 2;\n        }\n        if (uVar8 < 2) {\n          if (iVar5 == 0) {\n            trap(7);\n          }\n          uVar10 = (int)uVar12 / iVar5;\n        }\n        else {\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }\n        if (uVar10 == 0) {\n          trap(7);\n        }\n        uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1;\n        if (uVar8 < uVar14) {\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;\n          uVar14 = uVar14 - 2;\n          iVar5 = 2;\n          if (uVar8 < uVar14) goto LAB_000447ec;\n        }\n        for (puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar5 = 1,\n            puVar13 != (undefined4 *)0x0; puVar13 = (undefined4 *)puVar13[6]) {\n          uVar8 = *(uint *)puVar15;\n          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }\n    }\n    iVar5 = 0;\n  }\nLAB_000447ec:\n  if (local_24 == *(int **)puVar4) {\n    return iVar5;\n  }\n  puVar15 = PTR___stack_chk_fail_000780c0;\n  (*(code *)PTR___stack_chk_fail_000780c0)();\n  piVar9 = *(int **)(puVar15 + 0x33058);\n  if (**(char **)(puVar15 + 0x32c28) == '\0') {\n    if (*local_24 - 0x20U < 0x5f) {\n      return 0;\n    }\n    if (*local_24 - 0xa0U < 0x60) {\n      return 0;\n    }\n    piVar9 = *(int **)(puVar15 + 0x33058);\n  }\n  iVar5 = *piVar9;\n  if (iVar5 != 0) {\n    while ((((**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0 ||\n            (*local_24 != *(int *)(iVar5 + 8))) ||\n           (*(char *)(iVar5 + 4) != **(char **)(puVar15 + 0x32c28)))) {\n      iVar5 = *(int *)(iVar5 + 0x20);\n      if (iVar5 == 0) {\n        return 0;\n      }\n    }\n  }\n  return iVar5;\n}\n\n" (function_definition "int get_mouseinput(int *param_1,int *param_2,int param_3)\n\n{\n  char cVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined *puVar4;\n  int iVar5;\n  int iVar6;\n  int iVar7;\n  uint uVar8;\n  int *piVar9;\n  uint uVar10;\n  undefined4 uVar11;\n  uint uVar12;\n  undefined4 *puVar13;\n  uint uVar14;\n  undefined *puVar15;\n  undefined1 auStack_38 [4];\n  int local_34;\n  int local_30;\n  uint local_28;\n  int *local_24;\n  \n  puVar4 = PTR___stack_chk_guard_000780f8;\n  local_24 = *(int **)PTR___stack_chk_guard_000780f8;\n  iVar5 = (*(code *)PTR_getmouse_00078154)(auStack_38);\n  puVar3 = PTR_wenclose_00077ea4;\n  puVar2 = PTR_margin_00077690;\n  puVar15 = PTR_bottomwin_000775cc;\n  if (iVar5 == -1) goto LAB_000447ec;\n  uVar11 = *(undefined4 *)PTR_bottomwin_000775cc;\n  *param_2 = local_34 - *(int *)PTR_margin_00077690;\n  *param_1 = local_30;\n  iVar6 = (*(code *)puVar3)(uVar11,local_30,*param_2);\n  if ((local_28 & 5) == 0) {\n    iVar5 = 2;\n    if ((local_28 & 0x210000) == 0) goto LAB_000447ec;\n    iVar7 = (*(code *)PTR_wenclose_00077ea4)(*(undefined4 *)PTR_edit_000775d8,*param_1,*param_2);\n    if (iVar6 == 0) {\n      iVar5 = 2;\n      if (iVar7 == 0) goto LAB_000447ec;\n    }\n    else {\n      (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n      if ((iVar7 == 0) && (*param_1 != 0)) {\nLAB_000448cc:\n        iVar5 = 2;\n        goto LAB_000447ec;\n      }\n    }\n    iVar5 = 3;\n    do {\n      uVar11 = 0x102;\n      iVar5 = iVar5 + -1;\n      if ((local_28 & 0x10000) != 0) {\n        uVar11 = 0x103;\n      }\n      put_back(uVar11);\n    } while (iVar5 != 0);\nLAB_00044898:\n    iVar5 = 1;\n  }\n  else {\n    if (param_3 != 0) {\n      iVar5 = 0;\n      if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;\n      if (iVar6 != 0) {\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n        puVar15 = PTR_currmenu_000778a4;\n        if (*param_1 == 0) {\n          *param_2 = local_34 - *(int *)puVar2;\n          *param_1 = local_30;\n          iVar5 = 0;\n          goto LAB_000447ec;\n        }\n        uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4);\n        uVar12 = *(uint *)PTR_COLS_00077fb4;\n        iVar5 = (int)(uVar12 + 0x28) / 0x14;\n        if ((uint)(iVar5 * 2) <= uVar8) {\n          uVar8 = iVar5 * 2;\n        }\n        if (uVar8 < 2) {\n          if (iVar5 == 0) {\n            trap(7);\n          }\n          uVar10 = (int)uVar12 / iVar5;\n        }\n        else {\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }\n        if (uVar10 == 0) {\n          trap(7);\n        }\n        uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1;\n        if (uVar8 < uVar14) {\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;\n          uVar14 = uVar14 - 2;\n          iVar5 = 2;\n          if (uVar8 < uVar14) goto LAB_000447ec;\n        }\n        for (puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar5 = 1,\n            puVar13 != (undefined4 *)0x0; puVar13 = (undefined4 *)puVar13[6]) {\n          uVar8 = *(uint *)puVar15;\n          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }\n    }\n    iVar5 = 0;\n  }\nLAB_000447ec:\n  if (local_24 == *(int **)puVar4) {\n    return iVar5;\n  }\n  puVar15 = PTR___stack_chk_fail_000780c0;\n  (*(code *)PTR___stack_chk_fail_000780c0)();\n  piVar9 = *(int **)(puVar15 + 0x33058);\n  if (**(char **)(puVar15 + 0x32c28) == '\0') {\n    if (*local_24 - 0x20U < 0x5f) {\n      return 0;\n    }\n    if (*local_24 - 0xa0U < 0x60) {\n      return 0;\n    }\n    piVar9 = *(int **)(puVar15 + 0x33058);\n  }\n  iVar5 = *piVar9;\n  if (iVar5 != 0) {\n    while ((((**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0 ||\n            (*local_24 != *(int *)(iVar5 + 8))) ||\n           (*(char *)(iVar5 + 4) != **(char **)(puVar15 + 0x32c28)))) {\n      iVar5 = *(int *)(iVar5 + 0x20);\n      if (iVar5 == 0) {\n        return 0;\n      }\n    }\n  }\n  return iVar5;\n}" primitive_type (function_declarator "get_mouseinput(int *param_1,int *param_2,int param_3)" identifier (parameter_list "(int *param_1,int *param_2,int param_3)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  char cVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined *puVar4;\n  int iVar5;\n  int iVar6;\n  int iVar7;\n  uint uVar8;\n  int *piVar9;\n  uint uVar10;\n  undefined4 uVar11;\n  uint uVar12;\n  undefined4 *puVar13;\n  uint uVar14;\n  undefined *puVar15;\n  undefined1 auStack_38 [4];\n  int local_34;\n  int local_30;\n  uint local_28;\n  int *local_24;\n  \n  puVar4 = PTR___stack_chk_guard_000780f8;\n  local_24 = *(int **)PTR___stack_chk_guard_000780f8;\n  iVar5 = (*(code *)PTR_getmouse_00078154)(auStack_38);\n  puVar3 = PTR_wenclose_00077ea4;\n  puVar2 = PTR_margin_00077690;\n  puVar15 = PTR_bottomwin_000775cc;\n  if (iVar5 == -1) goto LAB_000447ec;\n  uVar11 = *(undefined4 *)PTR_bottomwin_000775cc;\n  *param_2 = local_34 - *(int *)PTR_margin_00077690;\n  *param_1 = local_30;\n  iVar6 = (*(code *)puVar3)(uVar11,local_30,*param_2);\n  if ((local_28 & 5) == 0) {\n    iVar5 = 2;\n    if ((local_28 & 0x210000) == 0) goto LAB_000447ec;\n    iVar7 = (*(code *)PTR_wenclose_00077ea4)(*(undefined4 *)PTR_edit_000775d8,*param_1,*param_2);\n    if (iVar6 == 0) {\n      iVar5 = 2;\n      if (iVar7 == 0) goto LAB_000447ec;\n    }\n    else {\n      (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n      if ((iVar7 == 0) && (*param_1 != 0)) {\nLAB_000448cc:\n        iVar5 = 2;\n        goto LAB_000447ec;\n      }\n    }\n    iVar5 = 3;\n    do {\n      uVar11 = 0x102;\n      iVar5 = iVar5 + -1;\n      if ((local_28 & 0x10000) != 0) {\n        uVar11 = 0x103;\n      }\n      put_back(uVar11);\n    } while (iVar5 != 0);\nLAB_00044898:\n    iVar5 = 1;\n  }\n  else {\n    if (param_3 != 0) {\n      iVar5 = 0;\n      if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;\n      if (iVar6 != 0) {\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n        puVar15 = PTR_currmenu_000778a4;\n        if (*param_1 == 0) {\n          *param_2 = local_34 - *(int *)puVar2;\n          *param_1 = local_30;\n          iVar5 = 0;\n          goto LAB_000447ec;\n        }\n        uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4);\n        uVar12 = *(uint *)PTR_COLS_00077fb4;\n        iVar5 = (int)(uVar12 + 0x28) / 0x14;\n        if ((uint)(iVar5 * 2) <= uVar8) {\n          uVar8 = iVar5 * 2;\n        }\n        if (uVar8 < 2) {\n          if (iVar5 == 0) {\n            trap(7);\n          }\n          uVar10 = (int)uVar12 / iVar5;\n        }\n        else {\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }\n        if (uVar10 == 0) {\n          trap(7);\n        }\n        uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1;\n        if (uVar8 < uVar14) {\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;\n          uVar14 = uVar14 - 2;\n          iVar5 = 2;\n          if (uVar8 < uVar14) goto LAB_000447ec;\n        }\n        for (puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar5 = 1,\n            puVar13 != (undefined4 *)0x0; puVar13 = (undefined4 *)puVar13[6]) {\n          uVar8 = *(uint *)puVar15;\n          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }\n    }\n    iVar5 = 0;\n  }\nLAB_000447ec:\n  if (local_24 == *(int **)puVar4) {\n    return iVar5;\n  }\n  puVar15 = PTR___stack_chk_fail_000780c0;\n  (*(code *)PTR___stack_chk_fail_000780c0)();\n  piVar9 = *(int **)(puVar15 + 0x33058);\n  if (**(char **)(puVar15 + 0x32c28) == '\0') {\n    if (*local_24 - 0x20U < 0x5f) {\n      return 0;\n    }\n    if (*local_24 - 0xa0U < 0x60) {\n      return 0;\n    }\n    piVar9 = *(int **)(puVar15 + 0x33058);\n  }\n  iVar5 = *piVar9;\n  if (iVar5 != 0) {\n    while ((((**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0 ||\n            (*local_24 != *(int *)(iVar5 + 8))) ||\n           (*(char *)(iVar5 + 4) != **(char **)(puVar15 + 0x32c28)))) {\n      iVar5 = *(int *)(iVar5 + 0x20);\n      if (iVar5 == 0) {\n        return 0;\n      }\n    }\n  }\n  return iVar5;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "undefined *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "int *piVar9;" primitive_type (pointer_declarator "*piVar9" * identifier) ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "undefined4 uVar11;" type_identifier identifier ;) (declaration "uint uVar12;" type_identifier identifier ;) (declaration "undefined4 *puVar13;" type_identifier (pointer_declarator "*puVar13" * identifier) ;) (declaration "uint uVar14;" type_identifier identifier ;) (declaration "undefined *puVar15;" type_identifier (pointer_declarator "*puVar15" * identifier) ;) (declaration "undefined1 auStack_38 [4];" type_identifier (array_declarator "auStack_38 [4]" identifier [ number_literal ]) ;) (declaration "int local_34;" primitive_type identifier ;) (declaration "int local_30;" primitive_type identifier ;) (declaration "uint local_28;" type_identifier identifier ;) (declaration "int *local_24;" primitive_type (pointer_declarator "*local_24" * identifier) ;) (expression_statement "puVar4 = PTR___stack_chk_guard_000780f8;" (assignment_expression "puVar4 = PTR___stack_chk_guard_000780f8" identifier = identifier) ;) (expression_statement "local_24 = *(int **)PTR___stack_chk_guard_000780f8;" (assignment_expression "local_24 = *(int **)PTR___stack_chk_guard_000780f8" identifier = (pointer_expression "*(int **)PTR___stack_chk_guard_000780f8" * (cast_expression "(int **)PTR___stack_chk_guard_000780f8" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) ;) (expression_statement "iVar5 = (*(code *)PTR_getmouse_00078154)(auStack_38);" (assignment_expression "iVar5 = (*(code *)PTR_getmouse_00078154)(auStack_38)" identifier = (call_expression "(*(code *)PTR_getmouse_00078154)(auStack_38)" (parenthesized_expression "(*(code *)PTR_getmouse_00078154)" ( (pointer_expression "*(code *)PTR_getmouse_00078154" * (cast_expression "(code *)PTR_getmouse_00078154" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(auStack_38)" ( identifier )))) ;) (expression_statement "puVar3 = PTR_wenclose_00077ea4;" (assignment_expression "puVar3 = PTR_wenclose_00077ea4" identifier = identifier) ;) (expression_statement "puVar2 = PTR_margin_00077690;" (assignment_expression "puVar2 = PTR_margin_00077690" identifier = identifier) ;) (expression_statement "puVar15 = PTR_bottomwin_000775cc;" (assignment_expression "puVar15 = PTR_bottomwin_000775cc" identifier = identifier) ;) (if_statement "if (iVar5 == -1) goto LAB_000447ec;" if (parenthesized_expression "(iVar5 == -1)" ( (binary_expression "iVar5 == -1" identifier == number_literal) )) (goto_statement "goto LAB_000447ec;" goto statement_identifier ;)) (expression_statement "uVar11 = *(undefined4 *)PTR_bottomwin_000775cc;" (assignment_expression "uVar11 = *(undefined4 *)PTR_bottomwin_000775cc" identifier = (pointer_expression "*(undefined4 *)PTR_bottomwin_000775cc" * (cast_expression "(undefined4 *)PTR_bottomwin_000775cc" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "*param_2 = local_34 - *(int *)PTR_margin_00077690;" (assignment_expression "*param_2 = local_34 - *(int *)PTR_margin_00077690" (pointer_expression "*param_2" * identifier) = (binary_expression "local_34 - *(int *)PTR_margin_00077690" identifier - (pointer_expression "*(int *)PTR_margin_00077690" * (cast_expression "(int *)PTR_margin_00077690" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)))) ;) (expression_statement "*param_1 = local_30;" (assignment_expression "*param_1 = local_30" (pointer_expression "*param_1" * identifier) = identifier) ;) (expression_statement "iVar6 = (*(code *)puVar3)(uVar11,local_30,*param_2);" (assignment_expression "iVar6 = (*(code *)puVar3)(uVar11,local_30,*param_2)" identifier = (call_expression "(*(code *)puVar3)(uVar11,local_30,*param_2)" (parenthesized_expression "(*(code *)puVar3)" ( (pointer_expression "*(code *)puVar3" * (cast_expression "(code *)puVar3" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(uVar11,local_30,*param_2)" ( identifier , identifier , (pointer_expression "*param_2" * identifier) )))) ;) (if_statement "if ((local_28 & 5) == 0) {\n    iVar5 = 2;\n    if ((local_28 & 0x210000) == 0) goto LAB_000447ec;\n    iVar7 = (*(code *)PTR_wenclose_00077ea4)(*(undefined4 *)PTR_edit_000775d8,*param_1,*param_2);\n    if (iVar6 == 0) {\n      iVar5 = 2;\n      if (iVar7 == 0) goto LAB_000447ec;\n    }\n    else {\n      (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n      if ((iVar7 == 0) && (*param_1 != 0)) {\nLAB_000448cc:\n        iVar5 = 2;\n        goto LAB_000447ec;\n      }\n    }\n    iVar5 = 3;\n    do {\n      uVar11 = 0x102;\n      iVar5 = iVar5 + -1;\n      if ((local_28 & 0x10000) != 0) {\n        uVar11 = 0x103;\n      }\n      put_back(uVar11);\n    } while (iVar5 != 0);\nLAB_00044898:\n    iVar5 = 1;\n  }\n  else {\n    if (param_3 != 0) {\n      iVar5 = 0;\n      if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;\n      if (iVar6 != 0) {\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n        puVar15 = PTR_currmenu_000778a4;\n        if (*param_1 == 0) {\n          *param_2 = local_34 - *(int *)puVar2;\n          *param_1 = local_30;\n          iVar5 = 0;\n          goto LAB_000447ec;\n        }\n        uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4);\n        uVar12 = *(uint *)PTR_COLS_00077fb4;\n        iVar5 = (int)(uVar12 + 0x28) / 0x14;\n        if ((uint)(iVar5 * 2) <= uVar8) {\n          uVar8 = iVar5 * 2;\n        }\n        if (uVar8 < 2) {\n          if (iVar5 == 0) {\n            trap(7);\n          }\n          uVar10 = (int)uVar12 / iVar5;\n        }\n        else {\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }\n        if (uVar10 == 0) {\n          trap(7);\n        }\n        uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1;\n        if (uVar8 < uVar14) {\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;\n          uVar14 = uVar14 - 2;\n          iVar5 = 2;\n          if (uVar8 < uVar14) goto LAB_000447ec;\n        }\n        for (puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar5 = 1,\n            puVar13 != (undefined4 *)0x0; puVar13 = (undefined4 *)puVar13[6]) {\n          uVar8 = *(uint *)puVar15;\n          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }\n    }\n    iVar5 = 0;\n  }" if (parenthesized_expression "((local_28 & 5) == 0)" ( (binary_expression "(local_28 & 5) == 0" (parenthesized_expression "(local_28 & 5)" ( (binary_expression "local_28 & 5" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    iVar5 = 2;\n    if ((local_28 & 0x210000) == 0) goto LAB_000447ec;\n    iVar7 = (*(code *)PTR_wenclose_00077ea4)(*(undefined4 *)PTR_edit_000775d8,*param_1,*param_2);\n    if (iVar6 == 0) {\n      iVar5 = 2;\n      if (iVar7 == 0) goto LAB_000447ec;\n    }\n    else {\n      (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n      if ((iVar7 == 0) && (*param_1 != 0)) {\nLAB_000448cc:\n        iVar5 = 2;\n        goto LAB_000447ec;\n      }\n    }\n    iVar5 = 3;\n    do {\n      uVar11 = 0x102;\n      iVar5 = iVar5 + -1;\n      if ((local_28 & 0x10000) != 0) {\n        uVar11 = 0x103;\n      }\n      put_back(uVar11);\n    } while (iVar5 != 0);\nLAB_00044898:\n    iVar5 = 1;\n  }" { (expression_statement "iVar5 = 2;" (assignment_expression "iVar5 = 2" identifier = number_literal) ;) (if_statement "if ((local_28 & 0x210000) == 0) goto LAB_000447ec;" if (parenthesized_expression "((local_28 & 0x210000) == 0)" ( (binary_expression "(local_28 & 0x210000) == 0" (parenthesized_expression "(local_28 & 0x210000)" ( (binary_expression "local_28 & 0x210000" identifier & number_literal) )) == number_literal) )) (goto_statement "goto LAB_000447ec;" goto statement_identifier ;)) (expression_statement "iVar7 = (*(code *)PTR_wenclose_00077ea4)(*(undefined4 *)PTR_edit_000775d8,*param_1,*param_2);" (assignment_expression "iVar7 = (*(code *)PTR_wenclose_00077ea4)(*(undefined4 *)PTR_edit_000775d8,*param_1,*param_2)" identifier = (call_expression "(*(code *)PTR_wenclose_00077ea4)(*(undefined4 *)PTR_edit_000775d8,*param_1,*param_2)" (parenthesized_expression "(*(code *)PTR_wenclose_00077ea4)" ( (pointer_expression "*(code *)PTR_wenclose_00077ea4" * (cast_expression "(code *)PTR_wenclose_00077ea4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(*(undefined4 *)PTR_edit_000775d8,*param_1,*param_2)" ( (pointer_expression "*(undefined4 *)PTR_edit_000775d8" * (cast_expression "(undefined4 *)PTR_edit_000775d8" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) , (pointer_expression "*param_1" * identifier) , (pointer_expression "*param_2" * identifier) )))) ;) (if_statement "if (iVar6 == 0) {\n      iVar5 = 2;\n      if (iVar7 == 0) goto LAB_000447ec;\n    }\n    else {\n      (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n      if ((iVar7 == 0) && (*param_1 != 0)) {\nLAB_000448cc:\n        iVar5 = 2;\n        goto LAB_000447ec;\n      }\n    }" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (compound_statement "{\n      iVar5 = 2;\n      if (iVar7 == 0) goto LAB_000447ec;\n    }" { (expression_statement "iVar5 = 2;" (assignment_expression "iVar5 = 2" identifier = number_literal) ;) (if_statement "if (iVar7 == 0) goto LAB_000447ec;" if (parenthesized_expression "(iVar7 == 0)" ( (binary_expression "iVar7 == 0" identifier == number_literal) )) (goto_statement "goto LAB_000447ec;" goto statement_identifier ;)) }) (else_clause "else {\n      (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n      if ((iVar7 == 0) && (*param_1 != 0)) {\nLAB_000448cc:\n        iVar5 = 2;\n        goto LAB_000447ec;\n      }\n    }" else (compound_statement "{\n      (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n      if ((iVar7 == 0) && (*param_1 != 0)) {\nLAB_000448cc:\n        iVar5 = 2;\n        goto LAB_000447ec;\n      }\n    }" { (expression_statement "(*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);" (call_expression "(*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0)" (parenthesized_expression "(*(code *)PTR_wmouse_trafo_00077f04)" ( (pointer_expression "*(code *)PTR_wmouse_trafo_00077f04" * (cast_expression "(code *)PTR_wmouse_trafo_00077f04" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(*(undefined4 *)puVar15,param_1,param_2,0)" ( (pointer_expression "*(undefined4 *)puVar15" * (cast_expression "(undefined4 *)puVar15" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) , identifier , identifier , number_literal ))) ;) (if_statement "if ((iVar7 == 0) && (*param_1 != 0)) {\nLAB_000448cc:\n        iVar5 = 2;\n        goto LAB_000447ec;\n      }" if (parenthesized_expression "((iVar7 == 0) && (*param_1 != 0))" ( (binary_expression "(iVar7 == 0) && (*param_1 != 0)" (parenthesized_expression "(iVar7 == 0)" ( (binary_expression "iVar7 == 0" identifier == number_literal) )) && (parenthesized_expression "(*param_1 != 0)" ( (binary_expression "*param_1 != 0" (pointer_expression "*param_1" * identifier) != number_literal) ))) )) (compound_statement "{\nLAB_000448cc:\n        iVar5 = 2;\n        goto LAB_000447ec;\n      }" { (labeled_statement "LAB_000448cc:\n        iVar5 = 2;" statement_identifier : (expression_statement "iVar5 = 2;" (assignment_expression "iVar5 = 2" identifier = number_literal) ;)) (goto_statement "goto LAB_000447ec;" goto statement_identifier ;) })) }))) (expression_statement "iVar5 = 3;" (assignment_expression "iVar5 = 3" identifier = number_literal) ;) (do_statement "do {\n      uVar11 = 0x102;\n      iVar5 = iVar5 + -1;\n      if ((local_28 & 0x10000) != 0) {\n        uVar11 = 0x103;\n      }\n      put_back(uVar11);\n    } while (iVar5 != 0);" do (compound_statement "{\n      uVar11 = 0x102;\n      iVar5 = iVar5 + -1;\n      if ((local_28 & 0x10000) != 0) {\n        uVar11 = 0x103;\n      }\n      put_back(uVar11);\n    }" { (expression_statement "uVar11 = 0x102;" (assignment_expression "uVar11 = 0x102" identifier = number_literal) ;) (expression_statement "iVar5 = iVar5 + -1;" (assignment_expression "iVar5 = iVar5 + -1" identifier = (binary_expression "iVar5 + -1" identifier + number_literal)) ;) (if_statement "if ((local_28 & 0x10000) != 0) {\n        uVar11 = 0x103;\n      }" if (parenthesized_expression "((local_28 & 0x10000) != 0)" ( (binary_expression "(local_28 & 0x10000) != 0" (parenthesized_expression "(local_28 & 0x10000)" ( (binary_expression "local_28 & 0x10000" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        uVar11 = 0x103;\n      }" { (expression_statement "uVar11 = 0x103;" (assignment_expression "uVar11 = 0x103" identifier = number_literal) ;) })) (expression_statement "put_back(uVar11);" (call_expression "put_back(uVar11)" identifier (argument_list "(uVar11)" ( identifier ))) ;) }) while (parenthesized_expression "(iVar5 != 0)" ( (binary_expression "iVar5 != 0" identifier != number_literal) )) ;) (labeled_statement "LAB_00044898:\n    iVar5 = 1;" statement_identifier : (expression_statement "iVar5 = 1;" (assignment_expression "iVar5 = 1" identifier = number_literal) ;)) }) (else_clause "else {\n    if (param_3 != 0) {\n      iVar5 = 0;\n      if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;\n      if (iVar6 != 0) {\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n        puVar15 = PTR_currmenu_000778a4;\n        if (*param_1 == 0) {\n          *param_2 = local_34 - *(int *)puVar2;\n          *param_1 = local_30;\n          iVar5 = 0;\n          goto LAB_000447ec;\n        }\n        uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4);\n        uVar12 = *(uint *)PTR_COLS_00077fb4;\n        iVar5 = (int)(uVar12 + 0x28) / 0x14;\n        if ((uint)(iVar5 * 2) <= uVar8) {\n          uVar8 = iVar5 * 2;\n        }\n        if (uVar8 < 2) {\n          if (iVar5 == 0) {\n            trap(7);\n          }\n          uVar10 = (int)uVar12 / iVar5;\n        }\n        else {\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }\n        if (uVar10 == 0) {\n          trap(7);\n        }\n        uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1;\n        if (uVar8 < uVar14) {\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;\n          uVar14 = uVar14 - 2;\n          iVar5 = 2;\n          if (uVar8 < uVar14) goto LAB_000447ec;\n        }\n        for (puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar5 = 1,\n            puVar13 != (undefined4 *)0x0; puVar13 = (undefined4 *)puVar13[6]) {\n          uVar8 = *(uint *)puVar15;\n          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }\n    }\n    iVar5 = 0;\n  }" else (compound_statement "{\n    if (param_3 != 0) {\n      iVar5 = 0;\n      if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;\n      if (iVar6 != 0) {\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n        puVar15 = PTR_currmenu_000778a4;\n        if (*param_1 == 0) {\n          *param_2 = local_34 - *(int *)puVar2;\n          *param_1 = local_30;\n          iVar5 = 0;\n          goto LAB_000447ec;\n        }\n        uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4);\n        uVar12 = *(uint *)PTR_COLS_00077fb4;\n        iVar5 = (int)(uVar12 + 0x28) / 0x14;\n        if ((uint)(iVar5 * 2) <= uVar8) {\n          uVar8 = iVar5 * 2;\n        }\n        if (uVar8 < 2) {\n          if (iVar5 == 0) {\n            trap(7);\n          }\n          uVar10 = (int)uVar12 / iVar5;\n        }\n        else {\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }\n        if (uVar10 == 0) {\n          trap(7);\n        }\n        uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1;\n        if (uVar8 < uVar14) {\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;\n          uVar14 = uVar14 - 2;\n          iVar5 = 2;\n          if (uVar8 < uVar14) goto LAB_000447ec;\n        }\n        for (puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar5 = 1,\n            puVar13 != (undefined4 *)0x0; puVar13 = (undefined4 *)puVar13[6]) {\n          uVar8 = *(uint *)puVar15;\n          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }\n    }\n    iVar5 = 0;\n  }" { (if_statement "if (param_3 != 0) {\n      iVar5 = 0;\n      if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;\n      if (iVar6 != 0) {\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n        puVar15 = PTR_currmenu_000778a4;\n        if (*param_1 == 0) {\n          *param_2 = local_34 - *(int *)puVar2;\n          *param_1 = local_30;\n          iVar5 = 0;\n          goto LAB_000447ec;\n        }\n        uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4);\n        uVar12 = *(uint *)PTR_COLS_00077fb4;\n        iVar5 = (int)(uVar12 + 0x28) / 0x14;\n        if ((uint)(iVar5 * 2) <= uVar8) {\n          uVar8 = iVar5 * 2;\n        }\n        if (uVar8 < 2) {\n          if (iVar5 == 0) {\n            trap(7);\n          }\n          uVar10 = (int)uVar12 / iVar5;\n        }\n        else {\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }\n        if (uVar10 == 0) {\n          trap(7);\n        }\n        uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1;\n        if (uVar8 < uVar14) {\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;\n          uVar14 = uVar14 - 2;\n          iVar5 = 2;\n          if (uVar8 < uVar14) goto LAB_000447ec;\n        }\n        for (puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar5 = 1,\n            puVar13 != (undefined4 *)0x0; puVar13 = (undefined4 *)puVar13[6]) {\n          uVar8 = *(uint *)puVar15;\n          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }\n    }" if (parenthesized_expression "(param_3 != 0)" ( (binary_expression "param_3 != 0" identifier != number_literal) )) (compound_statement "{\n      iVar5 = 0;\n      if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;\n      if (iVar6 != 0) {\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n        puVar15 = PTR_currmenu_000778a4;\n        if (*param_1 == 0) {\n          *param_2 = local_34 - *(int *)puVar2;\n          *param_1 = local_30;\n          iVar5 = 0;\n          goto LAB_000447ec;\n        }\n        uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4);\n        uVar12 = *(uint *)PTR_COLS_00077fb4;\n        iVar5 = (int)(uVar12 + 0x28) / 0x14;\n        if ((uint)(iVar5 * 2) <= uVar8) {\n          uVar8 = iVar5 * 2;\n        }\n        if (uVar8 < 2) {\n          if (iVar5 == 0) {\n            trap(7);\n          }\n          uVar10 = (int)uVar12 / iVar5;\n        }\n        else {\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }\n        if (uVar10 == 0) {\n          trap(7);\n        }\n        uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1;\n        if (uVar8 < uVar14) {\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;\n          uVar14 = uVar14 - 2;\n          iVar5 = 2;\n          if (uVar8 < uVar14) goto LAB_000447ec;\n        }\n        for (puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar5 = 1,\n            puVar13 != (undefined4 *)0x0; puVar13 = (undefined4 *)puVar13[6]) {\n          uVar8 = *(uint *)puVar15;\n          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }\n    }" { (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) (if_statement "if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;" if (parenthesized_expression "((*(uint *)PTR_flags_0007759c & 8) != 0)" ( (binary_expression "(*(uint *)PTR_flags_0007759c & 8) != 0" (parenthesized_expression "(*(uint *)PTR_flags_0007759c & 8)" ( (binary_expression "*(uint *)PTR_flags_0007759c & 8" (pointer_expression "*(uint *)PTR_flags_0007759c" * (cast_expression "(uint *)PTR_flags_0007759c" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) & number_literal) )) != number_literal) )) (goto_statement "goto LAB_000447ec;" goto statement_identifier ;)) (if_statement "if (iVar6 != 0) {\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n        puVar15 = PTR_currmenu_000778a4;\n        if (*param_1 == 0) {\n          *param_2 = local_34 - *(int *)puVar2;\n          *param_1 = local_30;\n          iVar5 = 0;\n          goto LAB_000447ec;\n        }\n        uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4);\n        uVar12 = *(uint *)PTR_COLS_00077fb4;\n        iVar5 = (int)(uVar12 + 0x28) / 0x14;\n        if ((uint)(iVar5 * 2) <= uVar8) {\n          uVar8 = iVar5 * 2;\n        }\n        if (uVar8 < 2) {\n          if (iVar5 == 0) {\n            trap(7);\n          }\n          uVar10 = (int)uVar12 / iVar5;\n        }\n        else {\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }\n        if (uVar10 == 0) {\n          trap(7);\n        }\n        uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1;\n        if (uVar8 < uVar14) {\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;\n          uVar14 = uVar14 - 2;\n          iVar5 = 2;\n          if (uVar8 < uVar14) goto LAB_000447ec;\n        }\n        for (puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar5 = 1,\n            puVar13 != (undefined4 *)0x0; puVar13 = (undefined4 *)puVar13[6]) {\n          uVar8 = *(uint *)puVar15;\n          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }" if (parenthesized_expression "(iVar6 != 0)" ( (binary_expression "iVar6 != 0" identifier != number_literal) )) (compound_statement "{\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n        puVar15 = PTR_currmenu_000778a4;\n        if (*param_1 == 0) {\n          *param_2 = local_34 - *(int *)puVar2;\n          *param_1 = local_30;\n          iVar5 = 0;\n          goto LAB_000447ec;\n        }\n        uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4);\n        uVar12 = *(uint *)PTR_COLS_00077fb4;\n        iVar5 = (int)(uVar12 + 0x28) / 0x14;\n        if ((uint)(iVar5 * 2) <= uVar8) {\n          uVar8 = iVar5 * 2;\n        }\n        if (uVar8 < 2) {\n          if (iVar5 == 0) {\n            trap(7);\n          }\n          uVar10 = (int)uVar12 / iVar5;\n        }\n        else {\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }\n        if (uVar10 == 0) {\n          trap(7);\n        }\n        uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1;\n        if (uVar8 < uVar14) {\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;\n          uVar14 = uVar14 - 2;\n          iVar5 = 2;\n          if (uVar8 < uVar14) goto LAB_000447ec;\n        }\n        for (puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar5 = 1,\n            puVar13 != (undefined4 *)0x0; puVar13 = (undefined4 *)puVar13[6]) {\n          uVar8 = *(uint *)puVar15;\n          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }" { (expression_statement "(*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);" (call_expression "(*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0)" (parenthesized_expression "(*(code *)PTR_wmouse_trafo_00077f04)" ( (pointer_expression "*(code *)PTR_wmouse_trafo_00077f04" * (cast_expression "(code *)PTR_wmouse_trafo_00077f04" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(*(undefined4 *)puVar15,param_1,param_2,0)" ( (pointer_expression "*(undefined4 *)puVar15" * (cast_expression "(undefined4 *)puVar15" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) , identifier , identifier , number_literal ))) ;) (expression_statement "puVar15 = PTR_currmenu_000778a4;" (assignment_expression "puVar15 = PTR_currmenu_000778a4" identifier = identifier) ;) (if_statement "if (*param_1 == 0) {\n          *param_2 = local_34 - *(int *)puVar2;\n          *param_1 = local_30;\n          iVar5 = 0;\n          goto LAB_000447ec;\n        }" if (parenthesized_expression "(*param_1 == 0)" ( (binary_expression "*param_1 == 0" (pointer_expression "*param_1" * identifier) == number_literal) )) (compound_statement "{\n          *param_2 = local_34 - *(int *)puVar2;\n          *param_1 = local_30;\n          iVar5 = 0;\n          goto LAB_000447ec;\n        }" { (expression_statement "*param_2 = local_34 - *(int *)puVar2;" (assignment_expression "*param_2 = local_34 - *(int *)puVar2" (pointer_expression "*param_2" * identifier) = (binary_expression "local_34 - *(int *)puVar2" identifier - (pointer_expression "*(int *)puVar2" * (cast_expression "(int *)puVar2" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)))) ;) (expression_statement "*param_1 = local_30;" (assignment_expression "*param_1 = local_30" (pointer_expression "*param_1" * identifier) = identifier) ;) (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) (goto_statement "goto LAB_000447ec;" goto statement_identifier ;) })) (expression_statement "uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4);" (assignment_expression "uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4)" identifier = (call_expression "length_of_list(*(undefined4 *)PTR_currmenu_000778a4)" identifier (argument_list "(*(undefined4 *)PTR_currmenu_000778a4)" ( (pointer_expression "*(undefined4 *)PTR_currmenu_000778a4" * (cast_expression "(undefined4 *)PTR_currmenu_000778a4" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )))) ;) (expression_statement "uVar12 = *(uint *)PTR_COLS_00077fb4;" (assignment_expression "uVar12 = *(uint *)PTR_COLS_00077fb4" identifier = (pointer_expression "*(uint *)PTR_COLS_00077fb4" * (cast_expression "(uint *)PTR_COLS_00077fb4" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "iVar5 = (int)(uVar12 + 0x28) / 0x14;" (assignment_expression "iVar5 = (int)(uVar12 + 0x28) / 0x14" identifier = (binary_expression "(int)(uVar12 + 0x28) / 0x14" (cast_expression "(int)(uVar12 + 0x28)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar12 + 0x28)" ( (binary_expression "uVar12 + 0x28" identifier + number_literal) ))) / number_literal)) ;) (if_statement "if ((uint)(iVar5 * 2) <= uVar8) {\n          uVar8 = iVar5 * 2;\n        }" if (parenthesized_expression "((uint)(iVar5 * 2) <= uVar8)" ( (binary_expression "(uint)(iVar5 * 2) <= uVar8" (call_expression "(uint)(iVar5 * 2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar5 * 2)" ( (binary_expression "iVar5 * 2" identifier * number_literal) ))) <= identifier) )) (compound_statement "{\n          uVar8 = iVar5 * 2;\n        }" { (expression_statement "uVar8 = iVar5 * 2;" (assignment_expression "uVar8 = iVar5 * 2" identifier = (binary_expression "iVar5 * 2" identifier * number_literal)) ;) })) (if_statement "if (uVar8 < 2) {\n          if (iVar5 == 0) {\n            trap(7);\n          }\n          uVar10 = (int)uVar12 / iVar5;\n        }\n        else {\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }" if (parenthesized_expression "(uVar8 < 2)" ( (binary_expression "uVar8 < 2" identifier < number_literal) )) (compound_statement "{\n          if (iVar5 == 0) {\n            trap(7);\n          }\n          uVar10 = (int)uVar12 / iVar5;\n        }" { (if_statement "if (iVar5 == 0) {\n            trap(7);\n          }" if (parenthesized_expression "(iVar5 == 0)" ( (binary_expression "iVar5 == 0" identifier == number_literal) )) (compound_statement "{\n            trap(7);\n          }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar10 = (int)uVar12 / iVar5;" (assignment_expression "uVar10 = (int)uVar12 / iVar5" identifier = (binary_expression "(int)uVar12 / iVar5" (cast_expression "(int)uVar12" ( (type_descriptor "int" primitive_type) ) identifier) / identifier)) ;) }) (else_clause "else {\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }" else (compound_statement "{\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }" { (expression_statement "uVar10 = (uVar8 >> 1) + (uVar8 & 1);" (assignment_expression "uVar10 = (uVar8 >> 1) + (uVar8 & 1)" identifier = (binary_expression "(uVar8 >> 1) + (uVar8 & 1)" (parenthesized_expression "(uVar8 >> 1)" ( (binary_expression "uVar8 >> 1" identifier >> number_literal) )) + (parenthesized_expression "(uVar8 & 1)" ( (binary_expression "uVar8 & 1" identifier & number_literal) )))) ;) (if_statement "if (uVar10 == 0) {\n            trap(7);\n          }" if (parenthesized_expression "(uVar10 == 0)" ( (binary_expression "uVar10 == 0" identifier == number_literal) )) (compound_statement "{\n            trap(7);\n          }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar10 = uVar12 / uVar10;" (assignment_expression "uVar10 = uVar12 / uVar10" identifier = (binary_expression "uVar12 / uVar10" identifier / identifier)) ;) }))) (if_statement "if (uVar10 == 0) {\n          trap(7);\n        }" if (parenthesized_expression "(uVar10 == 0)" ( (binary_expression "uVar10 == 0" identifier == number_literal) )) (compound_statement "{\n          trap(7);\n        }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1;" (assignment_expression "uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1" identifier = (binary_expression "(*param_2 / (int)uVar10) * 2 + *param_1" (binary_expression "(*param_2 / (int)uVar10) * 2" (parenthesized_expression "(*param_2 / (int)uVar10)" ( (binary_expression "*param_2 / (int)uVar10" (pointer_expression "*param_2" * identifier) / (cast_expression "(int)uVar10" ( (type_descriptor "int" primitive_type) ) identifier)) )) * number_literal) + (pointer_expression "*param_1" * identifier))) ;) (if_statement "if (uVar8 < uVar14) {\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;\n          uVar14 = uVar14 - 2;\n          iVar5 = 2;\n          if (uVar8 < uVar14) goto LAB_000447ec;\n        }" if (parenthesized_expression "(uVar8 < uVar14)" ( (binary_expression "uVar8 < uVar14" identifier < identifier) )) (compound_statement "{\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;\n          uVar14 = uVar14 - 2;\n          iVar5 = 2;\n          if (uVar8 < uVar14) goto LAB_000447ec;\n        }" { (if_statement "if (uVar10 == 0) {\n            trap(7);\n          }" if (parenthesized_expression "(uVar10 == 0)" ( (binary_expression "uVar10 == 0" identifier == number_literal) )) (compound_statement "{\n            trap(7);\n          }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (if_statement "if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;" if (parenthesized_expression "((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10)" ( (binary_expression "(int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10" (binary_expression "(int)uVar12 % (int)uVar10" (cast_expression "(int)uVar12" ( (type_descriptor "int" primitive_type) ) identifier) % (cast_expression "(int)uVar10" ( (type_descriptor "int" primitive_type) ) identifier)) <= (binary_expression "*param_2 % (int)uVar10" (pointer_expression "*param_2" * identifier) % (cast_expression "(int)uVar10" ( (type_descriptor "int" primitive_type) ) identifier))) )) (goto_statement "goto LAB_000448cc;" goto statement_identifier ;)) (expression_statement "uVar14 = uVar14 - 2;" (assignment_expression "uVar14 = uVar14 - 2" identifier = (binary_expression "uVar14 - 2" identifier - number_literal)) ;) (expression_statement "iVar5 = 2;" (assignment_expression "iVar5 = 2" identifier = number_literal) ;) (if_statement "if (uVar8 < uVar14) goto LAB_000447ec;" if (parenthesized_expression "(uVar8 < uVar14)" ( (binary_expression "uVar8 < uVar14" identifier < identifier) )) (goto_statement "goto LAB_000447ec;" goto statement_identifier ;)) })) (for_statement "for (puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar5 = 1,\n            puVar13 != (undefined4 *)0x0; puVar13 = (undefined4 *)puVar13[6]) {\n          uVar8 = *(uint *)puVar15;\n          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }\n        }" for ( (assignment_expression "puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0" identifier = (pointer_expression "*(undefined4 **)PTR_allfuncs_00077ad0" * (cast_expression "(undefined4 **)PTR_allfuncs_00077ad0" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) ; (comma_expression "iVar5 = 1,\n            puVar13 != (undefined4 *)0x0" (assignment_expression "iVar5 = 1" identifier = number_literal) , (binary_expression "puVar13 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) ; (assignment_expression "puVar13 = (undefined4 *)puVar13[6]" identifier = (cast_expression "(undefined4 *)puVar13[6]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar13[6]" identifier [ number_literal ]))) ) (compound_statement "{\n          uVar8 = *(uint *)puVar15;\n          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }\n        }" { (expression_statement "uVar8 = *(uint *)puVar15;" (assignment_expression "uVar8 = *(uint *)puVar15" identifier = (pointer_expression "*(uint *)puVar15" * (cast_expression "(uint *)puVar15" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (if_statement "if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }" if (parenthesized_expression "((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0))" ( (binary_expression "(((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)" (parenthesized_expression "(((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0))" ( (binary_expression "((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)" (parenthesized_expression "((uVar8 & puVar13[1]) != 0)" ( (binary_expression "(uVar8 & puVar13[1]) != 0" (parenthesized_expression "(uVar8 & puVar13[1])" ( (binary_expression "uVar8 & puVar13[1]" identifier & (subscript_expression "puVar13[1]" identifier [ number_literal ])) )) != number_literal) )) && (parenthesized_expression "(iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)" ( (comma_expression "iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0" (assignment_expression "iVar5 = first_sc_for(uVar8,*puVar13)" identifier = (call_expression "first_sc_for(uVar8,*puVar13)" identifier (argument_list "(uVar8,*puVar13)" ( identifier , (pointer_expression "*puVar13" * identifier) )))) , (binary_expression "iVar5 != 0" identifier != number_literal)) ))) )) && (parenthesized_expression "(uVar14 = uVar14 - 1, uVar14 == 0)" ( (comma_expression "uVar14 = uVar14 - 1, uVar14 == 0" (assignment_expression "uVar14 = uVar14 - 1" identifier = (binary_expression "uVar14 - 1" identifier - number_literal)) , (binary_expression "uVar14 == 0" identifier == number_literal)) ))) )) (compound_statement "{\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }" { (expression_statement "iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);" (assignment_expression "iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13)" identifier = (call_expression "first_sc_for(*(undefined4 *)puVar15,*puVar13)" identifier (argument_list "(*(undefined4 *)puVar15,*puVar13)" ( (pointer_expression "*(undefined4 *)puVar15" * (cast_expression "(undefined4 *)puVar15" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) , (pointer_expression "*puVar13" * identifier) )))) ;) (expression_statement "cVar1 = *(char *)(iVar5 + 4);" (assignment_expression "cVar1 = *(char *)(iVar5 + 4)" identifier = (pointer_expression "*(char *)(iVar5 + 4)" * (cast_expression "(char *)(iVar5 + 4)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 4)" ( (binary_expression "iVar5 + 4" identifier + number_literal) ))))) ;) (expression_statement "put_back(*(undefined4 *)(iVar5 + 8));" (call_expression "put_back(*(undefined4 *)(iVar5 + 8))" identifier (argument_list "(*(undefined4 *)(iVar5 + 8))" ( (pointer_expression "*(undefined4 *)(iVar5 + 8)" * (cast_expression "(undefined4 *)(iVar5 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 8)" ( (binary_expression "iVar5 + 8" identifier + number_literal) )))) ))) ;) (if_statement "if (cVar1 == '\0') goto LAB_00044898;" if (parenthesized_expression "(cVar1 == '\0')" ( (binary_expression "cVar1 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (goto_statement "goto LAB_00044898;" goto statement_identifier ;)) (expression_statement "put_back(0x1b);" (call_expression "put_back(0x1b)" identifier (argument_list "(0x1b)" ( number_literal ))) ;) (expression_statement "iVar5 = 1;" (assignment_expression "iVar5 = 1" identifier = number_literal) ;) (break_statement "break;" break ;) })) })) (goto_statement "goto LAB_000447ec;" goto statement_identifier ;) })) })) (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) }))) (labeled_statement "LAB_000447ec:\n  if (local_24 == *(int **)puVar4) {\n    return iVar5;\n  }" statement_identifier : (if_statement "if (local_24 == *(int **)puVar4) {\n    return iVar5;\n  }" if (parenthesized_expression "(local_24 == *(int **)puVar4)" ( (binary_expression "local_24 == *(int **)puVar4" identifier == (pointer_expression "*(int **)puVar4" * (cast_expression "(int **)puVar4" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) )) (compound_statement "{\n    return iVar5;\n  }" { (return_statement "return iVar5;" return identifier ;) }))) (expression_statement "puVar15 = PTR___stack_chk_fail_000780c0;" (assignment_expression "puVar15 = PTR___stack_chk_fail_000780c0" identifier = identifier) ;) (expression_statement "(*(code *)PTR___stack_chk_fail_000780c0)();" (call_expression "(*(code *)PTR___stack_chk_fail_000780c0)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_000780c0)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_000780c0" * (cast_expression "(code *)PTR___stack_chk_fail_000780c0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (expression_statement "piVar9 = *(int **)(puVar15 + 0x33058);" (assignment_expression "piVar9 = *(int **)(puVar15 + 0x33058)" identifier = (pointer_expression "*(int **)(puVar15 + 0x33058)" * (cast_expression "(int **)(puVar15 + 0x33058)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar15 + 0x33058)" ( (binary_expression "puVar15 + 0x33058" identifier + number_literal) ))))) ;) (if_statement "if (**(char **)(puVar15 + 0x32c28) == '\0') {\n    if (*local_24 - 0x20U < 0x5f) {\n      return 0;\n    }\n    if (*local_24 - 0xa0U < 0x60) {\n      return 0;\n    }\n    piVar9 = *(int **)(puVar15 + 0x33058);\n  }" if (parenthesized_expression "(**(char **)(puVar15 + 0x32c28) == '\0')" ( (binary_expression "**(char **)(puVar15 + 0x32c28) == '\0'" (pointer_expression "**(char **)(puVar15 + 0x32c28)" * (pointer_expression "*(char **)(puVar15 + 0x32c28)" * (cast_expression "(char **)(puVar15 + 0x32c28)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar15 + 0x32c28)" ( (binary_expression "puVar15 + 0x32c28" identifier + number_literal) ))))) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    if (*local_24 - 0x20U < 0x5f) {\n      return 0;\n    }\n    if (*local_24 - 0xa0U < 0x60) {\n      return 0;\n    }\n    piVar9 = *(int **)(puVar15 + 0x33058);\n  }" { (if_statement "if (*local_24 - 0x20U < 0x5f) {\n      return 0;\n    }" if (parenthesized_expression "(*local_24 - 0x20U < 0x5f)" ( (binary_expression "*local_24 - 0x20U < 0x5f" (binary_expression "*local_24 - 0x20U" (pointer_expression "*local_24" * identifier) - number_literal) < number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (*local_24 - 0xa0U < 0x60) {\n      return 0;\n    }" if (parenthesized_expression "(*local_24 - 0xa0U < 0x60)" ( (binary_expression "*local_24 - 0xa0U < 0x60" (binary_expression "*local_24 - 0xa0U" (pointer_expression "*local_24" * identifier) - number_literal) < number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "piVar9 = *(int **)(puVar15 + 0x33058);" (assignment_expression "piVar9 = *(int **)(puVar15 + 0x33058)" identifier = (pointer_expression "*(int **)(puVar15 + 0x33058)" * (cast_expression "(int **)(puVar15 + 0x33058)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar15 + 0x33058)" ( (binary_expression "puVar15 + 0x33058" identifier + number_literal) ))))) ;) })) (expression_statement "iVar5 = *piVar9;" (assignment_expression "iVar5 = *piVar9" identifier = (pointer_expression "*piVar9" * identifier)) ;) (if_statement "if (iVar5 != 0) {\n    while ((((**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0 ||\n            (*local_24 != *(int *)(iVar5 + 8))) ||\n           (*(char *)(iVar5 + 4) != **(char **)(puVar15 + 0x32c28)))) {\n      iVar5 = *(int *)(iVar5 + 0x20);\n      if (iVar5 == 0) {\n        return 0;\n      }\n    }\n  }" if (parenthesized_expression "(iVar5 != 0)" ( (binary_expression "iVar5 != 0" identifier != number_literal) )) (compound_statement "{\n    while ((((**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0 ||\n            (*local_24 != *(int *)(iVar5 + 8))) ||\n           (*(char *)(iVar5 + 4) != **(char **)(puVar15 + 0x32c28)))) {\n      iVar5 = *(int *)(iVar5 + 0x20);\n      if (iVar5 == 0) {\n        return 0;\n      }\n    }\n  }" { (while_statement "while ((((**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0 ||\n            (*local_24 != *(int *)(iVar5 + 8))) ||\n           (*(char *)(iVar5 + 4) != **(char **)(puVar15 + 0x32c28)))) {\n      iVar5 = *(int *)(iVar5 + 0x20);\n      if (iVar5 == 0) {\n        return 0;\n      }\n    }" while (parenthesized_expression "((((**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0 ||\n            (*local_24 != *(int *)(iVar5 + 8))) ||\n           (*(char *)(iVar5 + 4) != **(char **)(puVar15 + 0x32c28))))" ( (parenthesized_expression "(((**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0 ||\n            (*local_24 != *(int *)(iVar5 + 8))) ||\n           (*(char *)(iVar5 + 4) != **(char **)(puVar15 + 0x32c28)))" ( (binary_expression "((**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0 ||\n            (*local_24 != *(int *)(iVar5 + 8))) ||\n           (*(char *)(iVar5 + 4) != **(char **)(puVar15 + 0x32c28))" (parenthesized_expression "((**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0 ||\n            (*local_24 != *(int *)(iVar5 + 8)))" ( (binary_expression "(**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0 ||\n            (*local_24 != *(int *)(iVar5 + 8))" (binary_expression "(**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0" (parenthesized_expression "(**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc))" ( (binary_expression "**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)" (pointer_expression "**(uint **)(puVar15 + 0x32e28)" * (pointer_expression "*(uint **)(puVar15 + 0x32e28)" * (cast_expression "(uint **)(puVar15 + 0x32e28)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar15 + 0x32e28)" ( (binary_expression "puVar15 + 0x32e28" identifier + number_literal) ))))) & (pointer_expression "*(uint *)(iVar5 + 0xc)" * (cast_expression "(uint *)(iVar5 + 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 0xc)" ( (binary_expression "iVar5 + 0xc" identifier + number_literal) ))))) )) == number_literal) || (parenthesized_expression "(*local_24 != *(int *)(iVar5 + 8))" ( (binary_expression "*local_24 != *(int *)(iVar5 + 8)" (pointer_expression "*local_24" * identifier) != (pointer_expression "*(int *)(iVar5 + 8)" * (cast_expression "(int *)(iVar5 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 8)" ( (binary_expression "iVar5 + 8" identifier + number_literal) ))))) ))) )) || (parenthesized_expression "(*(char *)(iVar5 + 4) != **(char **)(puVar15 + 0x32c28))" ( (binary_expression "*(char *)(iVar5 + 4) != **(char **)(puVar15 + 0x32c28)" (pointer_expression "*(char *)(iVar5 + 4)" * (cast_expression "(char *)(iVar5 + 4)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 4)" ( (binary_expression "iVar5 + 4" identifier + number_literal) )))) != (pointer_expression "**(char **)(puVar15 + 0x32c28)" * (pointer_expression "*(char **)(puVar15 + 0x32c28)" * (cast_expression "(char **)(puVar15 + 0x32c28)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar15 + 0x32c28)" ( (binary_expression "puVar15 + 0x32c28" identifier + number_literal) )))))) ))) )) )) (compound_statement "{\n      iVar5 = *(int *)(iVar5 + 0x20);\n      if (iVar5 == 0) {\n        return 0;\n      }\n    }" { (expression_statement "iVar5 = *(int *)(iVar5 + 0x20);" (assignment_expression "iVar5 = *(int *)(iVar5 + 0x20)" identifier = (pointer_expression "*(int *)(iVar5 + 0x20)" * (cast_expression "(int *)(iVar5 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 0x20)" ( (binary_expression "iVar5 + 0x20" identifier + number_literal) ))))) ;) (if_statement "if (iVar5 == 0) {\n        return 0;\n      }" if (parenthesized_expression "(iVar5 == 0)" ( (binary_expression "iVar5 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) })) })) (return_statement "return iVar5;" return identifier ;) })))
(translation_unit "int get_mouseinput(int *mouse_y,int *mouse_x,_Bool allow_shortcuts)\n\n{\n  _Bool _Var1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined *puVar4;\n  int *piVar5;\n  int iVar6;\n  int iVar7;\n  int iVar8;\n  size_t sVar9;\n  sc *psVar10;\n  int *piVar11;\n  uint uVar12;\n  undefined4 uVar13;\n  uint uVar14;\n  undefined3 in_register_00000018;\n  undefined4 *puVar15;\n  uint uVar16;\n  undefined *puVar17;\n  MEVENT mevent;\n  \n  puVar4 = PTR___stack_chk_guard_000780f8;\n  piVar5 = *(int **)PTR___stack_chk_guard_000780f8;\n  iVar6 = (*(code *)PTR_getmouse_00078154)(&mevent);\n  puVar3 = PTR_wenclose_00077ea4;\n  puVar2 = PTR_margin_00077690;\n  puVar17 = PTR_bottomwin_000775cc;\n  if (iVar6 == -1) goto LAB_000447ec;\n  uVar13 = *(undefined4 *)PTR_bottomwin_000775cc;\n  *mouse_x = mevent.x - *(int *)PTR_margin_00077690;\n  *mouse_y = mevent.y;\n  iVar7 = (*(code *)puVar3)(uVar13,mevent.y,*mouse_x);\n  if ((mevent.bstate & 5) == 0) {\n    iVar6 = 2;\n    if ((mevent.bstate & 0x210000) == 0) goto LAB_000447ec;\n    iVar8 = (*(code *)PTR_wenclose_00077ea4)(*(undefined4 *)PTR_edit_000775d8,*mouse_y,*mouse_x);\n    if (iVar7 == 0) {\n      iVar6 = 2;\n      if (iVar8 == 0) goto LAB_000447ec;\n    }\n    else {\n      (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar17,mouse_y,mouse_x,0);\n      if ((iVar8 == 0) && (*mouse_y != 0)) {\nLAB_000448cc:\n        iVar6 = 2;\n        goto LAB_000447ec;\n      }\n    }\n    iVar6 = 3;\n    do {\n      iVar7 = 0x102;\n      iVar6 = iVar6 + -1;\n      if ((mevent.bstate & 0x10000) != 0) {\n        iVar7 = 0x103;\n      }\n      put_back(iVar7);\n    } while (iVar6 != 0);\nLAB_00044898:\n    iVar6 = 1;\n  }\n  else {\n    if (CONCAT31(in_register_00000018,allow_shortcuts) != 0) {\n      iVar6 = 0;\n      if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;\n      if (iVar7 != 0) {\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar17,mouse_y,mouse_x,0);\n        puVar17 = PTR_currmenu_000778a4;\n        if (*mouse_y == 0) {\n          *mouse_x = mevent.x - *(int *)puVar2;\n          *mouse_y = mevent.y;\n          iVar6 = 0;\n          goto LAB_000447ec;\n        }\n        sVar9 = length_of_list(*(int *)PTR_currmenu_000778a4);\n        uVar14 = *(uint *)PTR_COLS_00077fb4;\n        iVar6 = (int)(uVar14 + 0x28) / 0x14;\n        if ((uint)(iVar6 * 2) <= sVar9) {\n          sVar9 = iVar6 * 2;\n        }\n        if (sVar9 < 2) {\n          if (iVar6 == 0) {\n            trap(7);\n          }\n          uVar12 = (int)uVar14 / iVar6;\n        }\n        else {\n          uVar12 = (sVar9 >> 1) + (sVar9 & 1);\n          if (uVar12 == 0) {\n            trap(7);\n          }\n          uVar12 = uVar14 / uVar12;\n        }\n        if (uVar12 == 0) {\n          trap(7);\n        }\n        uVar16 = (*mouse_x / (int)uVar12) * 2 + *mouse_y;\n        if (sVar9 < uVar16) {\n          if (uVar12 == 0) {\n            trap(7);\n          }\n          if ((int)uVar14 % (int)uVar12 <= *mouse_x % (int)uVar12) goto LAB_000448cc;\n          uVar16 = uVar16 - 2;\n          iVar6 = 2;\n          if (sVar9 < uVar16) goto LAB_000447ec;\n        }\n        for (puVar15 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar6 = 1,\n            puVar15 != (undefined4 *)0x0; puVar15 = (undefined4 *)puVar15[6]) {\n          uVar14 = *(uint *)puVar17;\n          if ((((uVar14 & puVar15[1]) != 0) &&\n              (psVar10 = first_sc_for(uVar14,(_func_void *)*puVar15), psVar10 != (sc *)0x0)) &&\n             (uVar16 = uVar16 - 1, uVar16 == 0)) {\n            psVar10 = first_sc_for(*(int *)puVar17,(_func_void *)*puVar15);\n            _Var1 = psVar10->meta;\n            put_back(psVar10->keycode);\n            if (_Var1 == false) goto LAB_00044898;\n            put_back(0x1b);\n            iVar6 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }\n    }\n    iVar6 = 0;\n  }\nLAB_000447ec:\n  if (piVar5 == *(int **)puVar4) {\n    return iVar6;\n  }\n  puVar17 = PTR___stack_chk_fail_000780c0;\n  (*(code *)PTR___stack_chk_fail_000780c0)();\n  piVar11 = *(int **)(puVar17 + 0x33058);\n  if (**(char **)(puVar17 + 0x32c28) == '\0') {\n    if (*piVar5 - 0x20U < 0x5f) {\n      return 0;\n    }\n    if (*piVar5 - 0xa0U < 0x60) {\n      return 0;\n    }\n    piVar11 = *(int **)(puVar17 + 0x33058);\n  }\n  iVar6 = *piVar11;\n  if (iVar6 != 0) {\n    while ((((**(uint **)(puVar17 + 0x32e28) & *(uint *)(iVar6 + 0xc)) == 0 ||\n            (*piVar5 != *(int *)(iVar6 + 8))) ||\n           (*(char *)(iVar6 + 4) != **(char **)(puVar17 + 0x32c28)))) {\n      iVar6 = *(int *)(iVar6 + 0x20);\n      if (iVar6 == 0) {\n        return 0;\n      }\n    }\n  }\n  return iVar6;\n}\n\n" (function_definition "int get_mouseinput(int *mouse_y,int *mouse_x,_Bool allow_shortcuts)\n\n{\n  _Bool _Var1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined *puVar4;\n  int *piVar5;\n  int iVar6;\n  int iVar7;\n  int iVar8;\n  size_t sVar9;\n  sc *psVar10;\n  int *piVar11;\n  uint uVar12;\n  undefined4 uVar13;\n  uint uVar14;\n  undefined3 in_register_00000018;\n  undefined4 *puVar15;\n  uint uVar16;\n  undefined *puVar17;\n  MEVENT mevent;\n  \n  puVar4 = PTR___stack_chk_guard_000780f8;\n  piVar5 = *(int **)PTR___stack_chk_guard_000780f8;\n  iVar6 = (*(code *)PTR_getmouse_00078154)(&mevent);\n  puVar3 = PTR_wenclose_00077ea4;\n  puVar2 = PTR_margin_00077690;\n  puVar17 = PTR_bottomwin_000775cc;\n  if (iVar6 == -1) goto LAB_000447ec;\n  uVar13 = *(undefined4 *)PTR_bottomwin_000775cc;\n  *mouse_x = mevent.x - *(int *)PTR_margin_00077690;\n  *mouse_y = mevent.y;\n  iVar7 = (*(code *)puVar3)(uVar13,mevent.y,*mouse_x);\n  if ((mevent.bstate & 5) == 0) {\n    iVar6 = 2;\n    if ((mevent.bstate & 0x210000) == 0) goto LAB_000447ec;\n    iVar8 = (*(code *)PTR_wenclose_00077ea4)(*(undefined4 *)PTR_edit_000775d8,*mouse_y,*mouse_x);\n    if (iVar7 == 0) {\n      iVar6 = 2;\n      if (iVar8 == 0) goto LAB_000447ec;\n    }\n    else {\n      (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar17,mouse_y,mouse_x,0);\n      if ((iVar8 == 0) && (*mouse_y != 0)) {\nLAB_000448cc:\n        iVar6 = 2;\n        goto LAB_000447ec;\n      }\n    }\n    iVar6 = 3;\n    do {\n      iVar7 = 0x102;\n      iVar6 = iVar6 + -1;\n      if ((mevent.bstate & 0x10000) != 0) {\n        iVar7 = 0x103;\n      }\n      put_back(iVar7);\n    } while (iVar6 != 0);\nLAB_00044898:\n    iVar6 = 1;\n  }\n  else {\n    if (CONCAT31(in_register_00000018,allow_shortcuts) != 0) {\n      iVar6 = 0;\n      if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;\n      if (iVar7 != 0) {\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar17,mouse_y,mouse_x,0);\n        puVar17 = PTR_currmenu_000778a4;\n        if (*mouse_y == 0) {\n          *mouse_x = mevent.x - *(int *)puVar2;\n          *mouse_y = mevent.y;\n          iVar6 = 0;\n          goto LAB_000447ec;\n        }\n        sVar9 = length_of_list(*(int *)PTR_currmenu_000778a4);\n        uVar14 = *(uint *)PTR_COLS_00077fb4;\n        iVar6 = (int)(uVar14 + 0x28) / 0x14;\n        if ((uint)(iVar6 * 2) <= sVar9) {\n          sVar9 = iVar6 * 2;\n        }\n        if (sVar9 < 2) {\n          if (iVar6 == 0) {\n            trap(7);\n          }\n          uVar12 = (int)uVar14 / iVar6;\n        }\n        else {\n          uVar12 = (sVar9 >> 1) + (sVar9 & 1);\n          if (uVar12 == 0) {\n            trap(7);\n          }\n          uVar12 = uVar14 / uVar12;\n        }\n        if (uVar12 == 0) {\n          trap(7);\n        }\n        uVar16 = (*mouse_x / (int)uVar12) * 2 + *mouse_y;\n        if (sVar9 < uVar16) {\n          if (uVar12 == 0) {\n            trap(7);\n          }\n          if ((int)uVar14 % (int)uVar12 <= *mouse_x % (int)uVar12) goto LAB_000448cc;\n          uVar16 = uVar16 - 2;\n          iVar6 = 2;\n          if (sVar9 < uVar16) goto LAB_000447ec;\n        }\n        for (puVar15 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar6 = 1,\n            puVar15 != (undefined4 *)0x0; puVar15 = (undefined4 *)puVar15[6]) {\n          uVar14 = *(uint *)puVar17;\n          if ((((uVar14 & puVar15[1]) != 0) &&\n              (psVar10 = first_sc_for(uVar14,(_func_void *)*puVar15), psVar10 != (sc *)0x0)) &&\n             (uVar16 = uVar16 - 1, uVar16 == 0)) {\n            psVar10 = first_sc_for(*(int *)puVar17,(_func_void *)*puVar15);\n            _Var1 = psVar10->meta;\n            put_back(psVar10->keycode);\n            if (_Var1 == false) goto LAB_00044898;\n            put_back(0x1b);\n            iVar6 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }\n    }\n    iVar6 = 0;\n  }\nLAB_000447ec:\n  if (piVar5 == *(int **)puVar4) {\n    return iVar6;\n  }\n  puVar17 = PTR___stack_chk_fail_000780c0;\n  (*(code *)PTR___stack_chk_fail_000780c0)();\n  piVar11 = *(int **)(puVar17 + 0x33058);\n  if (**(char **)(puVar17 + 0x32c28) == '\0') {\n    if (*piVar5 - 0x20U < 0x5f) {\n      return 0;\n    }\n    if (*piVar5 - 0xa0U < 0x60) {\n      return 0;\n    }\n    piVar11 = *(int **)(puVar17 + 0x33058);\n  }\n  iVar6 = *piVar11;\n  if (iVar6 != 0) {\n    while ((((**(uint **)(puVar17 + 0x32e28) & *(uint *)(iVar6 + 0xc)) == 0 ||\n            (*piVar5 != *(int *)(iVar6 + 8))) ||\n           (*(char *)(iVar6 + 4) != **(char **)(puVar17 + 0x32c28)))) {\n      iVar6 = *(int *)(iVar6 + 0x20);\n      if (iVar6 == 0) {\n        return 0;\n      }\n    }\n  }\n  return iVar6;\n}" primitive_type (function_declarator "get_mouseinput(int *mouse_y,int *mouse_x,_Bool allow_shortcuts)" identifier (parameter_list "(int *mouse_y,int *mouse_x,_Bool allow_shortcuts)" ( (parameter_declaration "int *mouse_y" primitive_type (pointer_declarator "*mouse_y" * identifier)) , (parameter_declaration "int *mouse_x" primitive_type (pointer_declarator "*mouse_x" * identifier)) , (parameter_declaration "_Bool allow_shortcuts" type_identifier identifier) ))) (compound_statement "{\n  _Bool _Var1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined *puVar4;\n  int *piVar5;\n  int iVar6;\n  int iVar7;\n  int iVar8;\n  size_t sVar9;\n  sc *psVar10;\n  int *piVar11;\n  uint uVar12;\n  undefined4 uVar13;\n  uint uVar14;\n  undefined3 in_register_00000018;\n  undefined4 *puVar15;\n  uint uVar16;\n  undefined *puVar17;\n  MEVENT mevent;\n  \n  puVar4 = PTR___stack_chk_guard_000780f8;\n  piVar5 = *(int **)PTR___stack_chk_guard_000780f8;\n  iVar6 = (*(code *)PTR_getmouse_00078154)(&mevent);\n  puVar3 = PTR_wenclose_00077ea4;\n  puVar2 = PTR_margin_00077690;\n  puVar17 = PTR_bottomwin_000775cc;\n  if (iVar6 == -1) goto LAB_000447ec;\n  uVar13 = *(undefined4 *)PTR_bottomwin_000775cc;\n  *mouse_x = mevent.x - *(int *)PTR_margin_00077690;\n  *mouse_y = mevent.y;\n  iVar7 = (*(code *)puVar3)(uVar13,mevent.y,*mouse_x);\n  if ((mevent.bstate & 5) == 0) {\n    iVar6 = 2;\n    if ((mevent.bstate & 0x210000) == 0) goto LAB_000447ec;\n    iVar8 = (*(code *)PTR_wenclose_00077ea4)(*(undefined4 *)PTR_edit_000775d8,*mouse_y,*mouse_x);\n    if (iVar7 == 0) {\n      iVar6 = 2;\n      if (iVar8 == 0) goto LAB_000447ec;\n    }\n    else {\n      (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar17,mouse_y,mouse_x,0);\n      if ((iVar8 == 0) && (*mouse_y != 0)) {\nLAB_000448cc:\n        iVar6 = 2;\n        goto LAB_000447ec;\n      }\n    }\n    iVar6 = 3;\n    do {\n      iVar7 = 0x102;\n      iVar6 = iVar6 + -1;\n      if ((mevent.bstate & 0x10000) != 0) {\n        iVar7 = 0x103;\n      }\n      put_back(iVar7);\n    } while (iVar6 != 0);\nLAB_00044898:\n    iVar6 = 1;\n  }\n  else {\n    if (CONCAT31(in_register_00000018,allow_shortcuts) != 0) {\n      iVar6 = 0;\n      if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;\n      if (iVar7 != 0) {\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar17,mouse_y,mouse_x,0);\n        puVar17 = PTR_currmenu_000778a4;\n        if (*mouse_y == 0) {\n          *mouse_x = mevent.x - *(int *)puVar2;\n          *mouse_y = mevent.y;\n          iVar6 = 0;\n          goto LAB_000447ec;\n        }\n        sVar9 = length_of_list(*(int *)PTR_currmenu_000778a4);\n        uVar14 = *(uint *)PTR_COLS_00077fb4;\n        iVar6 = (int)(uVar14 + 0x28) / 0x14;\n        if ((uint)(iVar6 * 2) <= sVar9) {\n          sVar9 = iVar6 * 2;\n        }\n        if (sVar9 < 2) {\n          if (iVar6 == 0) {\n            trap(7);\n          }\n          uVar12 = (int)uVar14 / iVar6;\n        }\n        else {\n          uVar12 = (sVar9 >> 1) + (sVar9 & 1);\n          if (uVar12 == 0) {\n            trap(7);\n          }\n          uVar12 = uVar14 / uVar12;\n        }\n        if (uVar12 == 0) {\n          trap(7);\n        }\n        uVar16 = (*mouse_x / (int)uVar12) * 2 + *mouse_y;\n        if (sVar9 < uVar16) {\n          if (uVar12 == 0) {\n            trap(7);\n          }\n          if ((int)uVar14 % (int)uVar12 <= *mouse_x % (int)uVar12) goto LAB_000448cc;\n          uVar16 = uVar16 - 2;\n          iVar6 = 2;\n          if (sVar9 < uVar16) goto LAB_000447ec;\n        }\n        for (puVar15 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar6 = 1,\n            puVar15 != (undefined4 *)0x0; puVar15 = (undefined4 *)puVar15[6]) {\n          uVar14 = *(uint *)puVar17;\n          if ((((uVar14 & puVar15[1]) != 0) &&\n              (psVar10 = first_sc_for(uVar14,(_func_void *)*puVar15), psVar10 != (sc *)0x0)) &&\n             (uVar16 = uVar16 - 1, uVar16 == 0)) {\n            psVar10 = first_sc_for(*(int *)puVar17,(_func_void *)*puVar15);\n            _Var1 = psVar10->meta;\n            put_back(psVar10->keycode);\n            if (_Var1 == false) goto LAB_00044898;\n            put_back(0x1b);\n            iVar6 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }\n    }\n    iVar6 = 0;\n  }\nLAB_000447ec:\n  if (piVar5 == *(int **)puVar4) {\n    return iVar6;\n  }\n  puVar17 = PTR___stack_chk_fail_000780c0;\n  (*(code *)PTR___stack_chk_fail_000780c0)();\n  piVar11 = *(int **)(puVar17 + 0x33058);\n  if (**(char **)(puVar17 + 0x32c28) == '\0') {\n    if (*piVar5 - 0x20U < 0x5f) {\n      return 0;\n    }\n    if (*piVar5 - 0xa0U < 0x60) {\n      return 0;\n    }\n    piVar11 = *(int **)(puVar17 + 0x33058);\n  }\n  iVar6 = *piVar11;\n  if (iVar6 != 0) {\n    while ((((**(uint **)(puVar17 + 0x32e28) & *(uint *)(iVar6 + 0xc)) == 0 ||\n            (*piVar5 != *(int *)(iVar6 + 8))) ||\n           (*(char *)(iVar6 + 4) != **(char **)(puVar17 + 0x32c28)))) {\n      iVar6 = *(int *)(iVar6 + 0x20);\n      if (iVar6 == 0) {\n        return 0;\n      }\n    }\n  }\n  return iVar6;\n}" { (declaration "_Bool _Var1;" type_identifier identifier ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "undefined *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "int *piVar5;" primitive_type (pointer_declarator "*piVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "int iVar8;" primitive_type identifier ;) (declaration "size_t sVar9;" primitive_type identifier ;) (declaration "sc *psVar10;" type_identifier (pointer_declarator "*psVar10" * identifier) ;) (declaration "int *piVar11;" primitive_type (pointer_declarator "*piVar11" * identifier) ;) (declaration "uint uVar12;" type_identifier identifier ;) (declaration "undefined4 uVar13;" type_identifier identifier ;) (declaration "uint uVar14;" type_identifier identifier ;) (declaration "undefined3 in_register_00000018;" type_identifier identifier ;) (declaration "undefined4 *puVar15;" type_identifier (pointer_declarator "*puVar15" * identifier) ;) (declaration "uint uVar16;" type_identifier identifier ;) (declaration "undefined *puVar17;" type_identifier (pointer_declarator "*puVar17" * identifier) ;) (declaration "MEVENT mevent;" type_identifier identifier ;) (expression_statement "puVar4 = PTR___stack_chk_guard_000780f8;" (assignment_expression "puVar4 = PTR___stack_chk_guard_000780f8" identifier = identifier) ;) (expression_statement "piVar5 = *(int **)PTR___stack_chk_guard_000780f8;" (assignment_expression "piVar5 = *(int **)PTR___stack_chk_guard_000780f8" identifier = (pointer_expression "*(int **)PTR___stack_chk_guard_000780f8" * (cast_expression "(int **)PTR___stack_chk_guard_000780f8" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) ;) (expression_statement "iVar6 = (*(code *)PTR_getmouse_00078154)(&mevent);" (assignment_expression "iVar6 = (*(code *)PTR_getmouse_00078154)(&mevent)" identifier = (call_expression "(*(code *)PTR_getmouse_00078154)(&mevent)" (parenthesized_expression "(*(code *)PTR_getmouse_00078154)" ( (pointer_expression "*(code *)PTR_getmouse_00078154" * (cast_expression "(code *)PTR_getmouse_00078154" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(&mevent)" ( (pointer_expression "&mevent" & identifier) )))) ;) (expression_statement "puVar3 = PTR_wenclose_00077ea4;" (assignment_expression "puVar3 = PTR_wenclose_00077ea4" identifier = identifier) ;) (expression_statement "puVar2 = PTR_margin_00077690;" (assignment_expression "puVar2 = PTR_margin_00077690" identifier = identifier) ;) (expression_statement "puVar17 = PTR_bottomwin_000775cc;" (assignment_expression "puVar17 = PTR_bottomwin_000775cc" identifier = identifier) ;) (if_statement "if (iVar6 == -1) goto LAB_000447ec;" if (parenthesized_expression "(iVar6 == -1)" ( (binary_expression "iVar6 == -1" identifier == number_literal) )) (goto_statement "goto LAB_000447ec;" goto statement_identifier ;)) (expression_statement "uVar13 = *(undefined4 *)PTR_bottomwin_000775cc;" (assignment_expression "uVar13 = *(undefined4 *)PTR_bottomwin_000775cc" identifier = (pointer_expression "*(undefined4 *)PTR_bottomwin_000775cc" * (cast_expression "(undefined4 *)PTR_bottomwin_000775cc" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "*mouse_x = mevent.x - *(int *)PTR_margin_00077690;" (assignment_expression "*mouse_x = mevent.x - *(int *)PTR_margin_00077690" (pointer_expression "*mouse_x" * identifier) = (binary_expression "mevent.x - *(int *)PTR_margin_00077690" (field_expression "mevent.x" identifier . field_identifier) - (pointer_expression "*(int *)PTR_margin_00077690" * (cast_expression "(int *)PTR_margin_00077690" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)))) ;) (expression_statement "*mouse_y = mevent.y;" (assignment_expression "*mouse_y = mevent.y" (pointer_expression "*mouse_y" * identifier) = (field_expression "mevent.y" identifier . field_identifier)) ;) (expression_statement "iVar7 = (*(code *)puVar3)(uVar13,mevent.y,*mouse_x);" (assignment_expression "iVar7 = (*(code *)puVar3)(uVar13,mevent.y,*mouse_x)" identifier = (call_expression "(*(code *)puVar3)(uVar13,mevent.y,*mouse_x)" (parenthesized_expression "(*(code *)puVar3)" ( (pointer_expression "*(code *)puVar3" * (cast_expression "(code *)puVar3" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(uVar13,mevent.y,*mouse_x)" ( identifier , (field_expression "mevent.y" identifier . field_identifier) , (pointer_expression "*mouse_x" * identifier) )))) ;) (if_statement "if ((mevent.bstate & 5) == 0) {\n    iVar6 = 2;\n    if ((mevent.bstate & 0x210000) == 0) goto LAB_000447ec;\n    iVar8 = (*(code *)PTR_wenclose_00077ea4)(*(undefined4 *)PTR_edit_000775d8,*mouse_y,*mouse_x);\n    if (iVar7 == 0) {\n      iVar6 = 2;\n      if (iVar8 == 0) goto LAB_000447ec;\n    }\n    else {\n      (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar17,mouse_y,mouse_x,0);\n      if ((iVar8 == 0) && (*mouse_y != 0)) {\nLAB_000448cc:\n        iVar6 = 2;\n        goto LAB_000447ec;\n      }\n    }\n    iVar6 = 3;\n    do {\n      iVar7 = 0x102;\n      iVar6 = iVar6 + -1;\n      if ((mevent.bstate & 0x10000) != 0) {\n        iVar7 = 0x103;\n      }\n      put_back(iVar7);\n    } while (iVar6 != 0);\nLAB_00044898:\n    iVar6 = 1;\n  }\n  else {\n    if (CONCAT31(in_register_00000018,allow_shortcuts) != 0) {\n      iVar6 = 0;\n      if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;\n      if (iVar7 != 0) {\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar17,mouse_y,mouse_x,0);\n        puVar17 = PTR_currmenu_000778a4;\n        if (*mouse_y == 0) {\n          *mouse_x = mevent.x - *(int *)puVar2;\n          *mouse_y = mevent.y;\n          iVar6 = 0;\n          goto LAB_000447ec;\n        }\n        sVar9 = length_of_list(*(int *)PTR_currmenu_000778a4);\n        uVar14 = *(uint *)PTR_COLS_00077fb4;\n        iVar6 = (int)(uVar14 + 0x28) / 0x14;\n        if ((uint)(iVar6 * 2) <= sVar9) {\n          sVar9 = iVar6 * 2;\n        }\n        if (sVar9 < 2) {\n          if (iVar6 == 0) {\n            trap(7);\n          }\n          uVar12 = (int)uVar14 / iVar6;\n        }\n        else {\n          uVar12 = (sVar9 >> 1) + (sVar9 & 1);\n          if (uVar12 == 0) {\n            trap(7);\n          }\n          uVar12 = uVar14 / uVar12;\n        }\n        if (uVar12 == 0) {\n          trap(7);\n        }\n        uVar16 = (*mouse_x / (int)uVar12) * 2 + *mouse_y;\n        if (sVar9 < uVar16) {\n          if (uVar12 == 0) {\n            trap(7);\n          }\n          if ((int)uVar14 % (int)uVar12 <= *mouse_x % (int)uVar12) goto LAB_000448cc;\n          uVar16 = uVar16 - 2;\n          iVar6 = 2;\n          if (sVar9 < uVar16) goto LAB_000447ec;\n        }\n        for (puVar15 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar6 = 1,\n            puVar15 != (undefined4 *)0x0; puVar15 = (undefined4 *)puVar15[6]) {\n          uVar14 = *(uint *)puVar17;\n          if ((((uVar14 & puVar15[1]) != 0) &&\n              (psVar10 = first_sc_for(uVar14,(_func_void *)*puVar15), psVar10 != (sc *)0x0)) &&\n             (uVar16 = uVar16 - 1, uVar16 == 0)) {\n            psVar10 = first_sc_for(*(int *)puVar17,(_func_void *)*puVar15);\n            _Var1 = psVar10->meta;\n            put_back(psVar10->keycode);\n            if (_Var1 == false) goto LAB_00044898;\n            put_back(0x1b);\n            iVar6 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }\n    }\n    iVar6 = 0;\n  }" if (parenthesized_expression "((mevent.bstate & 5) == 0)" ( (binary_expression "(mevent.bstate & 5) == 0" (parenthesized_expression "(mevent.bstate & 5)" ( (binary_expression "mevent.bstate & 5" (field_expression "mevent.bstate" identifier . field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n    iVar6 = 2;\n    if ((mevent.bstate & 0x210000) == 0) goto LAB_000447ec;\n    iVar8 = (*(code *)PTR_wenclose_00077ea4)(*(undefined4 *)PTR_edit_000775d8,*mouse_y,*mouse_x);\n    if (iVar7 == 0) {\n      iVar6 = 2;\n      if (iVar8 == 0) goto LAB_000447ec;\n    }\n    else {\n      (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar17,mouse_y,mouse_x,0);\n      if ((iVar8 == 0) && (*mouse_y != 0)) {\nLAB_000448cc:\n        iVar6 = 2;\n        goto LAB_000447ec;\n      }\n    }\n    iVar6 = 3;\n    do {\n      iVar7 = 0x102;\n      iVar6 = iVar6 + -1;\n      if ((mevent.bstate & 0x10000) != 0) {\n        iVar7 = 0x103;\n      }\n      put_back(iVar7);\n    } while (iVar6 != 0);\nLAB_00044898:\n    iVar6 = 1;\n  }" { (expression_statement "iVar6 = 2;" (assignment_expression "iVar6 = 2" identifier = number_literal) ;) (if_statement "if ((mevent.bstate & 0x210000) == 0) goto LAB_000447ec;" if (parenthesized_expression "((mevent.bstate & 0x210000) == 0)" ( (binary_expression "(mevent.bstate & 0x210000) == 0" (parenthesized_expression "(mevent.bstate & 0x210000)" ( (binary_expression "mevent.bstate & 0x210000" (field_expression "mevent.bstate" identifier . field_identifier) & number_literal) )) == number_literal) )) (goto_statement "goto LAB_000447ec;" goto statement_identifier ;)) (expression_statement "iVar8 = (*(code *)PTR_wenclose_00077ea4)(*(undefined4 *)PTR_edit_000775d8,*mouse_y,*mouse_x);" (assignment_expression "iVar8 = (*(code *)PTR_wenclose_00077ea4)(*(undefined4 *)PTR_edit_000775d8,*mouse_y,*mouse_x)" identifier = (call_expression "(*(code *)PTR_wenclose_00077ea4)(*(undefined4 *)PTR_edit_000775d8,*mouse_y,*mouse_x)" (parenthesized_expression "(*(code *)PTR_wenclose_00077ea4)" ( (pointer_expression "*(code *)PTR_wenclose_00077ea4" * (cast_expression "(code *)PTR_wenclose_00077ea4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(*(undefined4 *)PTR_edit_000775d8,*mouse_y,*mouse_x)" ( (pointer_expression "*(undefined4 *)PTR_edit_000775d8" * (cast_expression "(undefined4 *)PTR_edit_000775d8" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) , (pointer_expression "*mouse_y" * identifier) , (pointer_expression "*mouse_x" * identifier) )))) ;) (if_statement "if (iVar7 == 0) {\n      iVar6 = 2;\n      if (iVar8 == 0) goto LAB_000447ec;\n    }\n    else {\n      (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar17,mouse_y,mouse_x,0);\n      if ((iVar8 == 0) && (*mouse_y != 0)) {\nLAB_000448cc:\n        iVar6 = 2;\n        goto LAB_000447ec;\n      }\n    }" if (parenthesized_expression "(iVar7 == 0)" ( (binary_expression "iVar7 == 0" identifier == number_literal) )) (compound_statement "{\n      iVar6 = 2;\n      if (iVar8 == 0) goto LAB_000447ec;\n    }" { (expression_statement "iVar6 = 2;" (assignment_expression "iVar6 = 2" identifier = number_literal) ;) (if_statement "if (iVar8 == 0) goto LAB_000447ec;" if (parenthesized_expression "(iVar8 == 0)" ( (binary_expression "iVar8 == 0" identifier == number_literal) )) (goto_statement "goto LAB_000447ec;" goto statement_identifier ;)) }) (else_clause "else {\n      (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar17,mouse_y,mouse_x,0);\n      if ((iVar8 == 0) && (*mouse_y != 0)) {\nLAB_000448cc:\n        iVar6 = 2;\n        goto LAB_000447ec;\n      }\n    }" else (compound_statement "{\n      (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar17,mouse_y,mouse_x,0);\n      if ((iVar8 == 0) && (*mouse_y != 0)) {\nLAB_000448cc:\n        iVar6 = 2;\n        goto LAB_000447ec;\n      }\n    }" { (expression_statement "(*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar17,mouse_y,mouse_x,0);" (call_expression "(*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar17,mouse_y,mouse_x,0)" (parenthesized_expression "(*(code *)PTR_wmouse_trafo_00077f04)" ( (pointer_expression "*(code *)PTR_wmouse_trafo_00077f04" * (cast_expression "(code *)PTR_wmouse_trafo_00077f04" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(*(undefined4 *)puVar17,mouse_y,mouse_x,0)" ( (pointer_expression "*(undefined4 *)puVar17" * (cast_expression "(undefined4 *)puVar17" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) , identifier , identifier , number_literal ))) ;) (if_statement "if ((iVar8 == 0) && (*mouse_y != 0)) {\nLAB_000448cc:\n        iVar6 = 2;\n        goto LAB_000447ec;\n      }" if (parenthesized_expression "((iVar8 == 0) && (*mouse_y != 0))" ( (binary_expression "(iVar8 == 0) && (*mouse_y != 0)" (parenthesized_expression "(iVar8 == 0)" ( (binary_expression "iVar8 == 0" identifier == number_literal) )) && (parenthesized_expression "(*mouse_y != 0)" ( (binary_expression "*mouse_y != 0" (pointer_expression "*mouse_y" * identifier) != number_literal) ))) )) (compound_statement "{\nLAB_000448cc:\n        iVar6 = 2;\n        goto LAB_000447ec;\n      }" { (labeled_statement "LAB_000448cc:\n        iVar6 = 2;" statement_identifier : (expression_statement "iVar6 = 2;" (assignment_expression "iVar6 = 2" identifier = number_literal) ;)) (goto_statement "goto LAB_000447ec;" goto statement_identifier ;) })) }))) (expression_statement "iVar6 = 3;" (assignment_expression "iVar6 = 3" identifier = number_literal) ;) (do_statement "do {\n      iVar7 = 0x102;\n      iVar6 = iVar6 + -1;\n      if ((mevent.bstate & 0x10000) != 0) {\n        iVar7 = 0x103;\n      }\n      put_back(iVar7);\n    } while (iVar6 != 0);" do (compound_statement "{\n      iVar7 = 0x102;\n      iVar6 = iVar6 + -1;\n      if ((mevent.bstate & 0x10000) != 0) {\n        iVar7 = 0x103;\n      }\n      put_back(iVar7);\n    }" { (expression_statement "iVar7 = 0x102;" (assignment_expression "iVar7 = 0x102" identifier = number_literal) ;) (expression_statement "iVar6 = iVar6 + -1;" (assignment_expression "iVar6 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (if_statement "if ((mevent.bstate & 0x10000) != 0) {\n        iVar7 = 0x103;\n      }" if (parenthesized_expression "((mevent.bstate & 0x10000) != 0)" ( (binary_expression "(mevent.bstate & 0x10000) != 0" (parenthesized_expression "(mevent.bstate & 0x10000)" ( (binary_expression "mevent.bstate & 0x10000" (field_expression "mevent.bstate" identifier . field_identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n        iVar7 = 0x103;\n      }" { (expression_statement "iVar7 = 0x103;" (assignment_expression "iVar7 = 0x103" identifier = number_literal) ;) })) (expression_statement "put_back(iVar7);" (call_expression "put_back(iVar7)" identifier (argument_list "(iVar7)" ( identifier ))) ;) }) while (parenthesized_expression "(iVar6 != 0)" ( (binary_expression "iVar6 != 0" identifier != number_literal) )) ;) (labeled_statement "LAB_00044898:\n    iVar6 = 1;" statement_identifier : (expression_statement "iVar6 = 1;" (assignment_expression "iVar6 = 1" identifier = number_literal) ;)) }) (else_clause "else {\n    if (CONCAT31(in_register_00000018,allow_shortcuts) != 0) {\n      iVar6 = 0;\n      if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;\n      if (iVar7 != 0) {\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar17,mouse_y,mouse_x,0);\n        puVar17 = PTR_currmenu_000778a4;\n        if (*mouse_y == 0) {\n          *mouse_x = mevent.x - *(int *)puVar2;\n          *mouse_y = mevent.y;\n          iVar6 = 0;\n          goto LAB_000447ec;\n        }\n        sVar9 = length_of_list(*(int *)PTR_currmenu_000778a4);\n        uVar14 = *(uint *)PTR_COLS_00077fb4;\n        iVar6 = (int)(uVar14 + 0x28) / 0x14;\n        if ((uint)(iVar6 * 2) <= sVar9) {\n          sVar9 = iVar6 * 2;\n        }\n        if (sVar9 < 2) {\n          if (iVar6 == 0) {\n            trap(7);\n          }\n          uVar12 = (int)uVar14 / iVar6;\n        }\n        else {\n          uVar12 = (sVar9 >> 1) + (sVar9 & 1);\n          if (uVar12 == 0) {\n            trap(7);\n          }\n          uVar12 = uVar14 / uVar12;\n        }\n        if (uVar12 == 0) {\n          trap(7);\n        }\n        uVar16 = (*mouse_x / (int)uVar12) * 2 + *mouse_y;\n        if (sVar9 < uVar16) {\n          if (uVar12 == 0) {\n            trap(7);\n          }\n          if ((int)uVar14 % (int)uVar12 <= *mouse_x % (int)uVar12) goto LAB_000448cc;\n          uVar16 = uVar16 - 2;\n          iVar6 = 2;\n          if (sVar9 < uVar16) goto LAB_000447ec;\n        }\n        for (puVar15 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar6 = 1,\n            puVar15 != (undefined4 *)0x0; puVar15 = (undefined4 *)puVar15[6]) {\n          uVar14 = *(uint *)puVar17;\n          if ((((uVar14 & puVar15[1]) != 0) &&\n              (psVar10 = first_sc_for(uVar14,(_func_void *)*puVar15), psVar10 != (sc *)0x0)) &&\n             (uVar16 = uVar16 - 1, uVar16 == 0)) {\n            psVar10 = first_sc_for(*(int *)puVar17,(_func_void *)*puVar15);\n            _Var1 = psVar10->meta;\n            put_back(psVar10->keycode);\n            if (_Var1 == false) goto LAB_00044898;\n            put_back(0x1b);\n            iVar6 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }\n    }\n    iVar6 = 0;\n  }" else (compound_statement "{\n    if (CONCAT31(in_register_00000018,allow_shortcuts) != 0) {\n      iVar6 = 0;\n      if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;\n      if (iVar7 != 0) {\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar17,mouse_y,mouse_x,0);\n        puVar17 = PTR_currmenu_000778a4;\n        if (*mouse_y == 0) {\n          *mouse_x = mevent.x - *(int *)puVar2;\n          *mouse_y = mevent.y;\n          iVar6 = 0;\n          goto LAB_000447ec;\n        }\n        sVar9 = length_of_list(*(int *)PTR_currmenu_000778a4);\n        uVar14 = *(uint *)PTR_COLS_00077fb4;\n        iVar6 = (int)(uVar14 + 0x28) / 0x14;\n        if ((uint)(iVar6 * 2) <= sVar9) {\n          sVar9 = iVar6 * 2;\n        }\n        if (sVar9 < 2) {\n          if (iVar6 == 0) {\n            trap(7);\n          }\n          uVar12 = (int)uVar14 / iVar6;\n        }\n        else {\n          uVar12 = (sVar9 >> 1) + (sVar9 & 1);\n          if (uVar12 == 0) {\n            trap(7);\n          }\n          uVar12 = uVar14 / uVar12;\n        }\n        if (uVar12 == 0) {\n          trap(7);\n        }\n        uVar16 = (*mouse_x / (int)uVar12) * 2 + *mouse_y;\n        if (sVar9 < uVar16) {\n          if (uVar12 == 0) {\n            trap(7);\n          }\n          if ((int)uVar14 % (int)uVar12 <= *mouse_x % (int)uVar12) goto LAB_000448cc;\n          uVar16 = uVar16 - 2;\n          iVar6 = 2;\n          if (sVar9 < uVar16) goto LAB_000447ec;\n        }\n        for (puVar15 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar6 = 1,\n            puVar15 != (undefined4 *)0x0; puVar15 = (undefined4 *)puVar15[6]) {\n          uVar14 = *(uint *)puVar17;\n          if ((((uVar14 & puVar15[1]) != 0) &&\n              (psVar10 = first_sc_for(uVar14,(_func_void *)*puVar15), psVar10 != (sc *)0x0)) &&\n             (uVar16 = uVar16 - 1, uVar16 == 0)) {\n            psVar10 = first_sc_for(*(int *)puVar17,(_func_void *)*puVar15);\n            _Var1 = psVar10->meta;\n            put_back(psVar10->keycode);\n            if (_Var1 == false) goto LAB_00044898;\n            put_back(0x1b);\n            iVar6 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }\n    }\n    iVar6 = 0;\n  }" { (if_statement "if (CONCAT31(in_register_00000018,allow_shortcuts) != 0) {\n      iVar6 = 0;\n      if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;\n      if (iVar7 != 0) {\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar17,mouse_y,mouse_x,0);\n        puVar17 = PTR_currmenu_000778a4;\n        if (*mouse_y == 0) {\n          *mouse_x = mevent.x - *(int *)puVar2;\n          *mouse_y = mevent.y;\n          iVar6 = 0;\n          goto LAB_000447ec;\n        }\n        sVar9 = length_of_list(*(int *)PTR_currmenu_000778a4);\n        uVar14 = *(uint *)PTR_COLS_00077fb4;\n        iVar6 = (int)(uVar14 + 0x28) / 0x14;\n        if ((uint)(iVar6 * 2) <= sVar9) {\n          sVar9 = iVar6 * 2;\n        }\n        if (sVar9 < 2) {\n          if (iVar6 == 0) {\n            trap(7);\n          }\n          uVar12 = (int)uVar14 / iVar6;\n        }\n        else {\n          uVar12 = (sVar9 >> 1) + (sVar9 & 1);\n          if (uVar12 == 0) {\n            trap(7);\n          }\n          uVar12 = uVar14 / uVar12;\n        }\n        if (uVar12 == 0) {\n          trap(7);\n        }\n        uVar16 = (*mouse_x / (int)uVar12) * 2 + *mouse_y;\n        if (sVar9 < uVar16) {\n          if (uVar12 == 0) {\n            trap(7);\n          }\n          if ((int)uVar14 % (int)uVar12 <= *mouse_x % (int)uVar12) goto LAB_000448cc;\n          uVar16 = uVar16 - 2;\n          iVar6 = 2;\n          if (sVar9 < uVar16) goto LAB_000447ec;\n        }\n        for (puVar15 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar6 = 1,\n            puVar15 != (undefined4 *)0x0; puVar15 = (undefined4 *)puVar15[6]) {\n          uVar14 = *(uint *)puVar17;\n          if ((((uVar14 & puVar15[1]) != 0) &&\n              (psVar10 = first_sc_for(uVar14,(_func_void *)*puVar15), psVar10 != (sc *)0x0)) &&\n             (uVar16 = uVar16 - 1, uVar16 == 0)) {\n            psVar10 = first_sc_for(*(int *)puVar17,(_func_void *)*puVar15);\n            _Var1 = psVar10->meta;\n            put_back(psVar10->keycode);\n            if (_Var1 == false) goto LAB_00044898;\n            put_back(0x1b);\n            iVar6 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }\n    }" if (parenthesized_expression "(CONCAT31(in_register_00000018,allow_shortcuts) != 0)" ( (binary_expression "CONCAT31(in_register_00000018,allow_shortcuts) != 0" (call_expression "CONCAT31(in_register_00000018,allow_shortcuts)" identifier (argument_list "(in_register_00000018,allow_shortcuts)" ( identifier , identifier ))) != number_literal) )) (compound_statement "{\n      iVar6 = 0;\n      if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;\n      if (iVar7 != 0) {\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar17,mouse_y,mouse_x,0);\n        puVar17 = PTR_currmenu_000778a4;\n        if (*mouse_y == 0) {\n          *mouse_x = mevent.x - *(int *)puVar2;\n          *mouse_y = mevent.y;\n          iVar6 = 0;\n          goto LAB_000447ec;\n        }\n        sVar9 = length_of_list(*(int *)PTR_currmenu_000778a4);\n        uVar14 = *(uint *)PTR_COLS_00077fb4;\n        iVar6 = (int)(uVar14 + 0x28) / 0x14;\n        if ((uint)(iVar6 * 2) <= sVar9) {\n          sVar9 = iVar6 * 2;\n        }\n        if (sVar9 < 2) {\n          if (iVar6 == 0) {\n            trap(7);\n          }\n          uVar12 = (int)uVar14 / iVar6;\n        }\n        else {\n          uVar12 = (sVar9 >> 1) + (sVar9 & 1);\n          if (uVar12 == 0) {\n            trap(7);\n          }\n          uVar12 = uVar14 / uVar12;\n        }\n        if (uVar12 == 0) {\n          trap(7);\n        }\n        uVar16 = (*mouse_x / (int)uVar12) * 2 + *mouse_y;\n        if (sVar9 < uVar16) {\n          if (uVar12 == 0) {\n            trap(7);\n          }\n          if ((int)uVar14 % (int)uVar12 <= *mouse_x % (int)uVar12) goto LAB_000448cc;\n          uVar16 = uVar16 - 2;\n          iVar6 = 2;\n          if (sVar9 < uVar16) goto LAB_000447ec;\n        }\n        for (puVar15 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar6 = 1,\n            puVar15 != (undefined4 *)0x0; puVar15 = (undefined4 *)puVar15[6]) {\n          uVar14 = *(uint *)puVar17;\n          if ((((uVar14 & puVar15[1]) != 0) &&\n              (psVar10 = first_sc_for(uVar14,(_func_void *)*puVar15), psVar10 != (sc *)0x0)) &&\n             (uVar16 = uVar16 - 1, uVar16 == 0)) {\n            psVar10 = first_sc_for(*(int *)puVar17,(_func_void *)*puVar15);\n            _Var1 = psVar10->meta;\n            put_back(psVar10->keycode);\n            if (_Var1 == false) goto LAB_00044898;\n            put_back(0x1b);\n            iVar6 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }\n    }" { (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (if_statement "if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;" if (parenthesized_expression "((*(uint *)PTR_flags_0007759c & 8) != 0)" ( (binary_expression "(*(uint *)PTR_flags_0007759c & 8) != 0" (parenthesized_expression "(*(uint *)PTR_flags_0007759c & 8)" ( (binary_expression "*(uint *)PTR_flags_0007759c & 8" (pointer_expression "*(uint *)PTR_flags_0007759c" * (cast_expression "(uint *)PTR_flags_0007759c" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) & number_literal) )) != number_literal) )) (goto_statement "goto LAB_000447ec;" goto statement_identifier ;)) (if_statement "if (iVar7 != 0) {\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar17,mouse_y,mouse_x,0);\n        puVar17 = PTR_currmenu_000778a4;\n        if (*mouse_y == 0) {\n          *mouse_x = mevent.x - *(int *)puVar2;\n          *mouse_y = mevent.y;\n          iVar6 = 0;\n          goto LAB_000447ec;\n        }\n        sVar9 = length_of_list(*(int *)PTR_currmenu_000778a4);\n        uVar14 = *(uint *)PTR_COLS_00077fb4;\n        iVar6 = (int)(uVar14 + 0x28) / 0x14;\n        if ((uint)(iVar6 * 2) <= sVar9) {\n          sVar9 = iVar6 * 2;\n        }\n        if (sVar9 < 2) {\n          if (iVar6 == 0) {\n            trap(7);\n          }\n          uVar12 = (int)uVar14 / iVar6;\n        }\n        else {\n          uVar12 = (sVar9 >> 1) + (sVar9 & 1);\n          if (uVar12 == 0) {\n            trap(7);\n          }\n          uVar12 = uVar14 / uVar12;\n        }\n        if (uVar12 == 0) {\n          trap(7);\n        }\n        uVar16 = (*mouse_x / (int)uVar12) * 2 + *mouse_y;\n        if (sVar9 < uVar16) {\n          if (uVar12 == 0) {\n            trap(7);\n          }\n          if ((int)uVar14 % (int)uVar12 <= *mouse_x % (int)uVar12) goto LAB_000448cc;\n          uVar16 = uVar16 - 2;\n          iVar6 = 2;\n          if (sVar9 < uVar16) goto LAB_000447ec;\n        }\n        for (puVar15 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar6 = 1,\n            puVar15 != (undefined4 *)0x0; puVar15 = (undefined4 *)puVar15[6]) {\n          uVar14 = *(uint *)puVar17;\n          if ((((uVar14 & puVar15[1]) != 0) &&\n              (psVar10 = first_sc_for(uVar14,(_func_void *)*puVar15), psVar10 != (sc *)0x0)) &&\n             (uVar16 = uVar16 - 1, uVar16 == 0)) {\n            psVar10 = first_sc_for(*(int *)puVar17,(_func_void *)*puVar15);\n            _Var1 = psVar10->meta;\n            put_back(psVar10->keycode);\n            if (_Var1 == false) goto LAB_00044898;\n            put_back(0x1b);\n            iVar6 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }" if (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) (compound_statement "{\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar17,mouse_y,mouse_x,0);\n        puVar17 = PTR_currmenu_000778a4;\n        if (*mouse_y == 0) {\n          *mouse_x = mevent.x - *(int *)puVar2;\n          *mouse_y = mevent.y;\n          iVar6 = 0;\n          goto LAB_000447ec;\n        }\n        sVar9 = length_of_list(*(int *)PTR_currmenu_000778a4);\n        uVar14 = *(uint *)PTR_COLS_00077fb4;\n        iVar6 = (int)(uVar14 + 0x28) / 0x14;\n        if ((uint)(iVar6 * 2) <= sVar9) {\n          sVar9 = iVar6 * 2;\n        }\n        if (sVar9 < 2) {\n          if (iVar6 == 0) {\n            trap(7);\n          }\n          uVar12 = (int)uVar14 / iVar6;\n        }\n        else {\n          uVar12 = (sVar9 >> 1) + (sVar9 & 1);\n          if (uVar12 == 0) {\n            trap(7);\n          }\n          uVar12 = uVar14 / uVar12;\n        }\n        if (uVar12 == 0) {\n          trap(7);\n        }\n        uVar16 = (*mouse_x / (int)uVar12) * 2 + *mouse_y;\n        if (sVar9 < uVar16) {\n          if (uVar12 == 0) {\n            trap(7);\n          }\n          if ((int)uVar14 % (int)uVar12 <= *mouse_x % (int)uVar12) goto LAB_000448cc;\n          uVar16 = uVar16 - 2;\n          iVar6 = 2;\n          if (sVar9 < uVar16) goto LAB_000447ec;\n        }\n        for (puVar15 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar6 = 1,\n            puVar15 != (undefined4 *)0x0; puVar15 = (undefined4 *)puVar15[6]) {\n          uVar14 = *(uint *)puVar17;\n          if ((((uVar14 & puVar15[1]) != 0) &&\n              (psVar10 = first_sc_for(uVar14,(_func_void *)*puVar15), psVar10 != (sc *)0x0)) &&\n             (uVar16 = uVar16 - 1, uVar16 == 0)) {\n            psVar10 = first_sc_for(*(int *)puVar17,(_func_void *)*puVar15);\n            _Var1 = psVar10->meta;\n            put_back(psVar10->keycode);\n            if (_Var1 == false) goto LAB_00044898;\n            put_back(0x1b);\n            iVar6 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }" { (expression_statement "(*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar17,mouse_y,mouse_x,0);" (call_expression "(*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar17,mouse_y,mouse_x,0)" (parenthesized_expression "(*(code *)PTR_wmouse_trafo_00077f04)" ( (pointer_expression "*(code *)PTR_wmouse_trafo_00077f04" * (cast_expression "(code *)PTR_wmouse_trafo_00077f04" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(*(undefined4 *)puVar17,mouse_y,mouse_x,0)" ( (pointer_expression "*(undefined4 *)puVar17" * (cast_expression "(undefined4 *)puVar17" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) , identifier , identifier , number_literal ))) ;) (expression_statement "puVar17 = PTR_currmenu_000778a4;" (assignment_expression "puVar17 = PTR_currmenu_000778a4" identifier = identifier) ;) (if_statement "if (*mouse_y == 0) {\n          *mouse_x = mevent.x - *(int *)puVar2;\n          *mouse_y = mevent.y;\n          iVar6 = 0;\n          goto LAB_000447ec;\n        }" if (parenthesized_expression "(*mouse_y == 0)" ( (binary_expression "*mouse_y == 0" (pointer_expression "*mouse_y" * identifier) == number_literal) )) (compound_statement "{\n          *mouse_x = mevent.x - *(int *)puVar2;\n          *mouse_y = mevent.y;\n          iVar6 = 0;\n          goto LAB_000447ec;\n        }" { (expression_statement "*mouse_x = mevent.x - *(int *)puVar2;" (assignment_expression "*mouse_x = mevent.x - *(int *)puVar2" (pointer_expression "*mouse_x" * identifier) = (binary_expression "mevent.x - *(int *)puVar2" (field_expression "mevent.x" identifier . field_identifier) - (pointer_expression "*(int *)puVar2" * (cast_expression "(int *)puVar2" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)))) ;) (expression_statement "*mouse_y = mevent.y;" (assignment_expression "*mouse_y = mevent.y" (pointer_expression "*mouse_y" * identifier) = (field_expression "mevent.y" identifier . field_identifier)) ;) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (goto_statement "goto LAB_000447ec;" goto statement_identifier ;) })) (expression_statement "sVar9 = length_of_list(*(int *)PTR_currmenu_000778a4);" (assignment_expression "sVar9 = length_of_list(*(int *)PTR_currmenu_000778a4)" identifier = (call_expression "length_of_list(*(int *)PTR_currmenu_000778a4)" identifier (argument_list "(*(int *)PTR_currmenu_000778a4)" ( (pointer_expression "*(int *)PTR_currmenu_000778a4" * (cast_expression "(int *)PTR_currmenu_000778a4" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) )))) ;) (expression_statement "uVar14 = *(uint *)PTR_COLS_00077fb4;" (assignment_expression "uVar14 = *(uint *)PTR_COLS_00077fb4" identifier = (pointer_expression "*(uint *)PTR_COLS_00077fb4" * (cast_expression "(uint *)PTR_COLS_00077fb4" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "iVar6 = (int)(uVar14 + 0x28) / 0x14;" (assignment_expression "iVar6 = (int)(uVar14 + 0x28) / 0x14" identifier = (binary_expression "(int)(uVar14 + 0x28) / 0x14" (cast_expression "(int)(uVar14 + 0x28)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar14 + 0x28)" ( (binary_expression "uVar14 + 0x28" identifier + number_literal) ))) / number_literal)) ;) (if_statement "if ((uint)(iVar6 * 2) <= sVar9) {\n          sVar9 = iVar6 * 2;\n        }" if (parenthesized_expression "((uint)(iVar6 * 2) <= sVar9)" ( (binary_expression "(uint)(iVar6 * 2) <= sVar9" (call_expression "(uint)(iVar6 * 2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar6 * 2)" ( (binary_expression "iVar6 * 2" identifier * number_literal) ))) <= identifier) )) (compound_statement "{\n          sVar9 = iVar6 * 2;\n        }" { (expression_statement "sVar9 = iVar6 * 2;" (assignment_expression "sVar9 = iVar6 * 2" identifier = (binary_expression "iVar6 * 2" identifier * number_literal)) ;) })) (if_statement "if (sVar9 < 2) {\n          if (iVar6 == 0) {\n            trap(7);\n          }\n          uVar12 = (int)uVar14 / iVar6;\n        }\n        else {\n          uVar12 = (sVar9 >> 1) + (sVar9 & 1);\n          if (uVar12 == 0) {\n            trap(7);\n          }\n          uVar12 = uVar14 / uVar12;\n        }" if (parenthesized_expression "(sVar9 < 2)" ( (binary_expression "sVar9 < 2" identifier < number_literal) )) (compound_statement "{\n          if (iVar6 == 0) {\n            trap(7);\n          }\n          uVar12 = (int)uVar14 / iVar6;\n        }" { (if_statement "if (iVar6 == 0) {\n            trap(7);\n          }" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (compound_statement "{\n            trap(7);\n          }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar12 = (int)uVar14 / iVar6;" (assignment_expression "uVar12 = (int)uVar14 / iVar6" identifier = (binary_expression "(int)uVar14 / iVar6" (cast_expression "(int)uVar14" ( (type_descriptor "int" primitive_type) ) identifier) / identifier)) ;) }) (else_clause "else {\n          uVar12 = (sVar9 >> 1) + (sVar9 & 1);\n          if (uVar12 == 0) {\n            trap(7);\n          }\n          uVar12 = uVar14 / uVar12;\n        }" else (compound_statement "{\n          uVar12 = (sVar9 >> 1) + (sVar9 & 1);\n          if (uVar12 == 0) {\n            trap(7);\n          }\n          uVar12 = uVar14 / uVar12;\n        }" { (expression_statement "uVar12 = (sVar9 >> 1) + (sVar9 & 1);" (assignment_expression "uVar12 = (sVar9 >> 1) + (sVar9 & 1)" identifier = (binary_expression "(sVar9 >> 1) + (sVar9 & 1)" (parenthesized_expression "(sVar9 >> 1)" ( (binary_expression "sVar9 >> 1" identifier >> number_literal) )) + (parenthesized_expression "(sVar9 & 1)" ( (binary_expression "sVar9 & 1" identifier & number_literal) )))) ;) (if_statement "if (uVar12 == 0) {\n            trap(7);\n          }" if (parenthesized_expression "(uVar12 == 0)" ( (binary_expression "uVar12 == 0" identifier == number_literal) )) (compound_statement "{\n            trap(7);\n          }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar12 = uVar14 / uVar12;" (assignment_expression "uVar12 = uVar14 / uVar12" identifier = (binary_expression "uVar14 / uVar12" identifier / identifier)) ;) }))) (if_statement "if (uVar12 == 0) {\n          trap(7);\n        }" if (parenthesized_expression "(uVar12 == 0)" ( (binary_expression "uVar12 == 0" identifier == number_literal) )) (compound_statement "{\n          trap(7);\n        }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar16 = (*mouse_x / (int)uVar12) * 2 + *mouse_y;" (assignment_expression "uVar16 = (*mouse_x / (int)uVar12) * 2 + *mouse_y" identifier = (binary_expression "(*mouse_x / (int)uVar12) * 2 + *mouse_y" (binary_expression "(*mouse_x / (int)uVar12) * 2" (parenthesized_expression "(*mouse_x / (int)uVar12)" ( (binary_expression "*mouse_x / (int)uVar12" (pointer_expression "*mouse_x" * identifier) / (cast_expression "(int)uVar12" ( (type_descriptor "int" primitive_type) ) identifier)) )) * number_literal) + (pointer_expression "*mouse_y" * identifier))) ;) (if_statement "if (sVar9 < uVar16) {\n          if (uVar12 == 0) {\n            trap(7);\n          }\n          if ((int)uVar14 % (int)uVar12 <= *mouse_x % (int)uVar12) goto LAB_000448cc;\n          uVar16 = uVar16 - 2;\n          iVar6 = 2;\n          if (sVar9 < uVar16) goto LAB_000447ec;\n        }" if (parenthesized_expression "(sVar9 < uVar16)" ( (binary_expression "sVar9 < uVar16" identifier < identifier) )) (compound_statement "{\n          if (uVar12 == 0) {\n            trap(7);\n          }\n          if ((int)uVar14 % (int)uVar12 <= *mouse_x % (int)uVar12) goto LAB_000448cc;\n          uVar16 = uVar16 - 2;\n          iVar6 = 2;\n          if (sVar9 < uVar16) goto LAB_000447ec;\n        }" { (if_statement "if (uVar12 == 0) {\n            trap(7);\n          }" if (parenthesized_expression "(uVar12 == 0)" ( (binary_expression "uVar12 == 0" identifier == number_literal) )) (compound_statement "{\n            trap(7);\n          }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (if_statement "if ((int)uVar14 % (int)uVar12 <= *mouse_x % (int)uVar12) goto LAB_000448cc;" if (parenthesized_expression "((int)uVar14 % (int)uVar12 <= *mouse_x % (int)uVar12)" ( (binary_expression "(int)uVar14 % (int)uVar12 <= *mouse_x % (int)uVar12" (binary_expression "(int)uVar14 % (int)uVar12" (cast_expression "(int)uVar14" ( (type_descriptor "int" primitive_type) ) identifier) % (cast_expression "(int)uVar12" ( (type_descriptor "int" primitive_type) ) identifier)) <= (binary_expression "*mouse_x % (int)uVar12" (pointer_expression "*mouse_x" * identifier) % (cast_expression "(int)uVar12" ( (type_descriptor "int" primitive_type) ) identifier))) )) (goto_statement "goto LAB_000448cc;" goto statement_identifier ;)) (expression_statement "uVar16 = uVar16 - 2;" (assignment_expression "uVar16 = uVar16 - 2" identifier = (binary_expression "uVar16 - 2" identifier - number_literal)) ;) (expression_statement "iVar6 = 2;" (assignment_expression "iVar6 = 2" identifier = number_literal) ;) (if_statement "if (sVar9 < uVar16) goto LAB_000447ec;" if (parenthesized_expression "(sVar9 < uVar16)" ( (binary_expression "sVar9 < uVar16" identifier < identifier) )) (goto_statement "goto LAB_000447ec;" goto statement_identifier ;)) })) (for_statement "for (puVar15 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar6 = 1,\n            puVar15 != (undefined4 *)0x0; puVar15 = (undefined4 *)puVar15[6]) {\n          uVar14 = *(uint *)puVar17;\n          if ((((uVar14 & puVar15[1]) != 0) &&\n              (psVar10 = first_sc_for(uVar14,(_func_void *)*puVar15), psVar10 != (sc *)0x0)) &&\n             (uVar16 = uVar16 - 1, uVar16 == 0)) {\n            psVar10 = first_sc_for(*(int *)puVar17,(_func_void *)*puVar15);\n            _Var1 = psVar10->meta;\n            put_back(psVar10->keycode);\n            if (_Var1 == false) goto LAB_00044898;\n            put_back(0x1b);\n            iVar6 = 1;\n            break;\n          }\n        }" for ( (assignment_expression "puVar15 = *(undefined4 **)PTR_allfuncs_00077ad0" identifier = (pointer_expression "*(undefined4 **)PTR_allfuncs_00077ad0" * (cast_expression "(undefined4 **)PTR_allfuncs_00077ad0" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) ; (comma_expression "iVar6 = 1,\n            puVar15 != (undefined4 *)0x0" (assignment_expression "iVar6 = 1" identifier = number_literal) , (binary_expression "puVar15 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) ; (assignment_expression "puVar15 = (undefined4 *)puVar15[6]" identifier = (cast_expression "(undefined4 *)puVar15[6]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar15[6]" identifier [ number_literal ]))) ) (compound_statement "{\n          uVar14 = *(uint *)puVar17;\n          if ((((uVar14 & puVar15[1]) != 0) &&\n              (psVar10 = first_sc_for(uVar14,(_func_void *)*puVar15), psVar10 != (sc *)0x0)) &&\n             (uVar16 = uVar16 - 1, uVar16 == 0)) {\n            psVar10 = first_sc_for(*(int *)puVar17,(_func_void *)*puVar15);\n            _Var1 = psVar10->meta;\n            put_back(psVar10->keycode);\n            if (_Var1 == false) goto LAB_00044898;\n            put_back(0x1b);\n            iVar6 = 1;\n            break;\n          }\n        }" { (expression_statement "uVar14 = *(uint *)puVar17;" (assignment_expression "uVar14 = *(uint *)puVar17" identifier = (pointer_expression "*(uint *)puVar17" * (cast_expression "(uint *)puVar17" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (if_statement "if ((((uVar14 & puVar15[1]) != 0) &&\n              (psVar10 = first_sc_for(uVar14,(_func_void *)*puVar15), psVar10 != (sc *)0x0)) &&\n             (uVar16 = uVar16 - 1, uVar16 == 0)) {\n            psVar10 = first_sc_for(*(int *)puVar17,(_func_void *)*puVar15);\n            _Var1 = psVar10->meta;\n            put_back(psVar10->keycode);\n            if (_Var1 == false) goto LAB_00044898;\n            put_back(0x1b);\n            iVar6 = 1;\n            break;\n          }" if (parenthesized_expression "((((uVar14 & puVar15[1]) != 0) &&\n              (psVar10 = first_sc_for(uVar14,(_func_void *)*puVar15), psVar10 != (sc *)0x0)) &&\n             (uVar16 = uVar16 - 1, uVar16 == 0))" ( (binary_expression "(((uVar14 & puVar15[1]) != 0) &&\n              (psVar10 = first_sc_for(uVar14,(_func_void *)*puVar15), psVar10 != (sc *)0x0)) &&\n             (uVar16 = uVar16 - 1, uVar16 == 0)" (parenthesized_expression "(((uVar14 & puVar15[1]) != 0) &&\n              (psVar10 = first_sc_for(uVar14,(_func_void *)*puVar15), psVar10 != (sc *)0x0))" ( (binary_expression "((uVar14 & puVar15[1]) != 0) &&\n              (psVar10 = first_sc_for(uVar14,(_func_void *)*puVar15), psVar10 != (sc *)0x0)" (parenthesized_expression "((uVar14 & puVar15[1]) != 0)" ( (binary_expression "(uVar14 & puVar15[1]) != 0" (parenthesized_expression "(uVar14 & puVar15[1])" ( (binary_expression "uVar14 & puVar15[1]" identifier & (subscript_expression "puVar15[1]" identifier [ number_literal ])) )) != number_literal) )) && (parenthesized_expression "(psVar10 = first_sc_for(uVar14,(_func_void *)*puVar15), psVar10 != (sc *)0x0)" ( (comma_expression "psVar10 = first_sc_for(uVar14,(_func_void *)*puVar15), psVar10 != (sc *)0x0" (assignment_expression "psVar10 = first_sc_for(uVar14,(_func_void *)*puVar15)" identifier = (call_expression "first_sc_for(uVar14,(_func_void *)*puVar15)" identifier (argument_list "(uVar14,(_func_void *)*puVar15)" ( identifier , (cast_expression "(_func_void *)*puVar15" ( (type_descriptor "_func_void *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar15" * identifier)) )))) , (binary_expression "psVar10 != (sc *)0x0" identifier != (cast_expression "(sc *)0x0" ( (type_descriptor "sc *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) ))) )) && (parenthesized_expression "(uVar16 = uVar16 - 1, uVar16 == 0)" ( (comma_expression "uVar16 = uVar16 - 1, uVar16 == 0" (assignment_expression "uVar16 = uVar16 - 1" identifier = (binary_expression "uVar16 - 1" identifier - number_literal)) , (binary_expression "uVar16 == 0" identifier == number_literal)) ))) )) (compound_statement "{\n            psVar10 = first_sc_for(*(int *)puVar17,(_func_void *)*puVar15);\n            _Var1 = psVar10->meta;\n            put_back(psVar10->keycode);\n            if (_Var1 == false) goto LAB_00044898;\n            put_back(0x1b);\n            iVar6 = 1;\n            break;\n          }" { (expression_statement "psVar10 = first_sc_for(*(int *)puVar17,(_func_void *)*puVar15);" (assignment_expression "psVar10 = first_sc_for(*(int *)puVar17,(_func_void *)*puVar15)" identifier = (call_expression "first_sc_for(*(int *)puVar17,(_func_void *)*puVar15)" identifier (argument_list "(*(int *)puVar17,(_func_void *)*puVar15)" ( (pointer_expression "*(int *)puVar17" * (cast_expression "(int *)puVar17" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) , (cast_expression "(_func_void *)*puVar15" ( (type_descriptor "_func_void *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar15" * identifier)) )))) ;) (expression_statement "_Var1 = psVar10->meta;" (assignment_expression "_Var1 = psVar10->meta" identifier = (field_expression "psVar10->meta" identifier -> field_identifier)) ;) (expression_statement "put_back(psVar10->keycode);" (call_expression "put_back(psVar10->keycode)" identifier (argument_list "(psVar10->keycode)" ( (field_expression "psVar10->keycode" identifier -> field_identifier) ))) ;) (if_statement "if (_Var1 == false) goto LAB_00044898;" if (parenthesized_expression "(_Var1 == false)" ( (binary_expression "_Var1 == false" identifier == false) )) (goto_statement "goto LAB_00044898;" goto statement_identifier ;)) (expression_statement "put_back(0x1b);" (call_expression "put_back(0x1b)" identifier (argument_list "(0x1b)" ( number_literal ))) ;) (expression_statement "iVar6 = 1;" (assignment_expression "iVar6 = 1" identifier = number_literal) ;) (break_statement "break;" break ;) })) })) (goto_statement "goto LAB_000447ec;" goto statement_identifier ;) })) })) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) }))) (labeled_statement "LAB_000447ec:\n  if (piVar5 == *(int **)puVar4) {\n    return iVar6;\n  }" statement_identifier : (if_statement "if (piVar5 == *(int **)puVar4) {\n    return iVar6;\n  }" if (parenthesized_expression "(piVar5 == *(int **)puVar4)" ( (binary_expression "piVar5 == *(int **)puVar4" identifier == (pointer_expression "*(int **)puVar4" * (cast_expression "(int **)puVar4" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) )) (compound_statement "{\n    return iVar6;\n  }" { (return_statement "return iVar6;" return identifier ;) }))) (expression_statement "puVar17 = PTR___stack_chk_fail_000780c0;" (assignment_expression "puVar17 = PTR___stack_chk_fail_000780c0" identifier = identifier) ;) (expression_statement "(*(code *)PTR___stack_chk_fail_000780c0)();" (call_expression "(*(code *)PTR___stack_chk_fail_000780c0)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_000780c0)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_000780c0" * (cast_expression "(code *)PTR___stack_chk_fail_000780c0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (expression_statement "piVar11 = *(int **)(puVar17 + 0x33058);" (assignment_expression "piVar11 = *(int **)(puVar17 + 0x33058)" identifier = (pointer_expression "*(int **)(puVar17 + 0x33058)" * (cast_expression "(int **)(puVar17 + 0x33058)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar17 + 0x33058)" ( (binary_expression "puVar17 + 0x33058" identifier + number_literal) ))))) ;) (if_statement "if (**(char **)(puVar17 + 0x32c28) == '\0') {\n    if (*piVar5 - 0x20U < 0x5f) {\n      return 0;\n    }\n    if (*piVar5 - 0xa0U < 0x60) {\n      return 0;\n    }\n    piVar11 = *(int **)(puVar17 + 0x33058);\n  }" if (parenthesized_expression "(**(char **)(puVar17 + 0x32c28) == '\0')" ( (binary_expression "**(char **)(puVar17 + 0x32c28) == '\0'" (pointer_expression "**(char **)(puVar17 + 0x32c28)" * (pointer_expression "*(char **)(puVar17 + 0x32c28)" * (cast_expression "(char **)(puVar17 + 0x32c28)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar17 + 0x32c28)" ( (binary_expression "puVar17 + 0x32c28" identifier + number_literal) ))))) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    if (*piVar5 - 0x20U < 0x5f) {\n      return 0;\n    }\n    if (*piVar5 - 0xa0U < 0x60) {\n      return 0;\n    }\n    piVar11 = *(int **)(puVar17 + 0x33058);\n  }" { (if_statement "if (*piVar5 - 0x20U < 0x5f) {\n      return 0;\n    }" if (parenthesized_expression "(*piVar5 - 0x20U < 0x5f)" ( (binary_expression "*piVar5 - 0x20U < 0x5f" (binary_expression "*piVar5 - 0x20U" (pointer_expression "*piVar5" * identifier) - number_literal) < number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (*piVar5 - 0xa0U < 0x60) {\n      return 0;\n    }" if (parenthesized_expression "(*piVar5 - 0xa0U < 0x60)" ( (binary_expression "*piVar5 - 0xa0U < 0x60" (binary_expression "*piVar5 - 0xa0U" (pointer_expression "*piVar5" * identifier) - number_literal) < number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "piVar11 = *(int **)(puVar17 + 0x33058);" (assignment_expression "piVar11 = *(int **)(puVar17 + 0x33058)" identifier = (pointer_expression "*(int **)(puVar17 + 0x33058)" * (cast_expression "(int **)(puVar17 + 0x33058)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar17 + 0x33058)" ( (binary_expression "puVar17 + 0x33058" identifier + number_literal) ))))) ;) })) (expression_statement "iVar6 = *piVar11;" (assignment_expression "iVar6 = *piVar11" identifier = (pointer_expression "*piVar11" * identifier)) ;) (if_statement "if (iVar6 != 0) {\n    while ((((**(uint **)(puVar17 + 0x32e28) & *(uint *)(iVar6 + 0xc)) == 0 ||\n            (*piVar5 != *(int *)(iVar6 + 8))) ||\n           (*(char *)(iVar6 + 4) != **(char **)(puVar17 + 0x32c28)))) {\n      iVar6 = *(int *)(iVar6 + 0x20);\n      if (iVar6 == 0) {\n        return 0;\n      }\n    }\n  }" if (parenthesized_expression "(iVar6 != 0)" ( (binary_expression "iVar6 != 0" identifier != number_literal) )) (compound_statement "{\n    while ((((**(uint **)(puVar17 + 0x32e28) & *(uint *)(iVar6 + 0xc)) == 0 ||\n            (*piVar5 != *(int *)(iVar6 + 8))) ||\n           (*(char *)(iVar6 + 4) != **(char **)(puVar17 + 0x32c28)))) {\n      iVar6 = *(int *)(iVar6 + 0x20);\n      if (iVar6 == 0) {\n        return 0;\n      }\n    }\n  }" { (while_statement "while ((((**(uint **)(puVar17 + 0x32e28) & *(uint *)(iVar6 + 0xc)) == 0 ||\n            (*piVar5 != *(int *)(iVar6 + 8))) ||\n           (*(char *)(iVar6 + 4) != **(char **)(puVar17 + 0x32c28)))) {\n      iVar6 = *(int *)(iVar6 + 0x20);\n      if (iVar6 == 0) {\n        return 0;\n      }\n    }" while (parenthesized_expression "((((**(uint **)(puVar17 + 0x32e28) & *(uint *)(iVar6 + 0xc)) == 0 ||\n            (*piVar5 != *(int *)(iVar6 + 8))) ||\n           (*(char *)(iVar6 + 4) != **(char **)(puVar17 + 0x32c28))))" ( (parenthesized_expression "(((**(uint **)(puVar17 + 0x32e28) & *(uint *)(iVar6 + 0xc)) == 0 ||\n            (*piVar5 != *(int *)(iVar6 + 8))) ||\n           (*(char *)(iVar6 + 4) != **(char **)(puVar17 + 0x32c28)))" ( (binary_expression "((**(uint **)(puVar17 + 0x32e28) & *(uint *)(iVar6 + 0xc)) == 0 ||\n            (*piVar5 != *(int *)(iVar6 + 8))) ||\n           (*(char *)(iVar6 + 4) != **(char **)(puVar17 + 0x32c28))" (parenthesized_expression "((**(uint **)(puVar17 + 0x32e28) & *(uint *)(iVar6 + 0xc)) == 0 ||\n            (*piVar5 != *(int *)(iVar6 + 8)))" ( (binary_expression "(**(uint **)(puVar17 + 0x32e28) & *(uint *)(iVar6 + 0xc)) == 0 ||\n            (*piVar5 != *(int *)(iVar6 + 8))" (binary_expression "(**(uint **)(puVar17 + 0x32e28) & *(uint *)(iVar6 + 0xc)) == 0" (parenthesized_expression "(**(uint **)(puVar17 + 0x32e28) & *(uint *)(iVar6 + 0xc))" ( (binary_expression "**(uint **)(puVar17 + 0x32e28) & *(uint *)(iVar6 + 0xc)" (pointer_expression "**(uint **)(puVar17 + 0x32e28)" * (pointer_expression "*(uint **)(puVar17 + 0x32e28)" * (cast_expression "(uint **)(puVar17 + 0x32e28)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar17 + 0x32e28)" ( (binary_expression "puVar17 + 0x32e28" identifier + number_literal) ))))) & (pointer_expression "*(uint *)(iVar6 + 0xc)" * (cast_expression "(uint *)(iVar6 + 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 0xc)" ( (binary_expression "iVar6 + 0xc" identifier + number_literal) ))))) )) == number_literal) || (parenthesized_expression "(*piVar5 != *(int *)(iVar6 + 8))" ( (binary_expression "*piVar5 != *(int *)(iVar6 + 8)" (pointer_expression "*piVar5" * identifier) != (pointer_expression "*(int *)(iVar6 + 8)" * (cast_expression "(int *)(iVar6 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 8)" ( (binary_expression "iVar6 + 8" identifier + number_literal) ))))) ))) )) || (parenthesized_expression "(*(char *)(iVar6 + 4) != **(char **)(puVar17 + 0x32c28))" ( (binary_expression "*(char *)(iVar6 + 4) != **(char **)(puVar17 + 0x32c28)" (pointer_expression "*(char *)(iVar6 + 4)" * (cast_expression "(char *)(iVar6 + 4)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 4)" ( (binary_expression "iVar6 + 4" identifier + number_literal) )))) != (pointer_expression "**(char **)(puVar17 + 0x32c28)" * (pointer_expression "*(char **)(puVar17 + 0x32c28)" * (cast_expression "(char **)(puVar17 + 0x32c28)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar17 + 0x32c28)" ( (binary_expression "puVar17 + 0x32c28" identifier + number_literal) )))))) ))) )) )) (compound_statement "{\n      iVar6 = *(int *)(iVar6 + 0x20);\n      if (iVar6 == 0) {\n        return 0;\n      }\n    }" { (expression_statement "iVar6 = *(int *)(iVar6 + 0x20);" (assignment_expression "iVar6 = *(int *)(iVar6 + 0x20)" identifier = (pointer_expression "*(int *)(iVar6 + 0x20)" * (cast_expression "(int *)(iVar6 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 0x20)" ( (binary_expression "iVar6 + 0x20" identifier + number_literal) ))))) ;) (if_statement "if (iVar6 == 0) {\n        return 0;\n      }" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) })) })) (return_statement "return iVar6;" return identifier ;) })))
(translation_unit "int get_mouseinput(int *param_1,int *param_2,int param_3)\n\n{\n  char cVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined *puVar4;\n  int iVar5;\n  int iVar6;\n  int iVar7;\n  uint uVar8;\n  int *piVar9;\n  uint uVar10;\n  undefined4 uVar11;\n  uint uVar12;\n  undefined4 *puVar13;\n  uint uVar14;\n  undefined *puVar15;\n  undefined1 auStack_38 [4];\n  int local_34;\n  int local_30;\n  uint local_28;\n  int *local_24;\n  \n  puVar4 = PTR___stack_chk_guard_000780f8;\n  local_24 = *(int **)PTR___stack_chk_guard_000780f8;\n  iVar5 = (*(code *)PTR_getmouse_00078154)(auStack_38);\n  puVar3 = PTR_wenclose_00077ea4;\n  puVar2 = PTR_margin_00077690;\n  puVar15 = PTR_bottomwin_000775cc;\n  if (iVar5 == -1) goto LAB_000447ec;\n  uVar11 = *(undefined4 *)PTR_bottomwin_000775cc;\n  *param_2 = local_34 - *(int *)PTR_margin_00077690;\n  *param_1 = local_30;\n  iVar6 = (*(code *)puVar3)(uVar11,local_30,*param_2);\n  if ((local_28 & 5) == 0) {\n    iVar5 = 2;\n    if ((local_28 & 0x210000) == 0) goto LAB_000447ec;\n    iVar7 = (*(code *)PTR_wenclose_00077ea4)(*(undefined4 *)PTR_edit_000775d8,*param_1,*param_2);\n    if (iVar6 == 0) {\n      iVar5 = 2;\n      if (iVar7 == 0) goto LAB_000447ec;\n    }\n    else {\n      (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n      if ((iVar7 == 0) && (*param_1 != 0)) {\nLAB_000448cc:\n        iVar5 = 2;\n        goto LAB_000447ec;\n      }\n    }\n    iVar5 = 3;\n    do {\n      uVar11 = 0x102;\n      iVar5 = iVar5 + -1;\n      if ((local_28 & 0x10000) != 0) {\n        uVar11 = 0x103;\n      }\n      put_back(uVar11);\n    } while (iVar5 != 0);\nLAB_00044898:\n    iVar5 = 1;\n  }\n  else {\n    if (param_3 != 0) {\n      iVar5 = 0;\n      if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;\n      if (iVar6 != 0) {\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n        puVar15 = PTR_currmenu_000778a4;\n        if (*param_1 == 0) {\n          *param_2 = local_34 - *(int *)puVar2;\n          *param_1 = local_30;\n          iVar5 = 0;\n          goto LAB_000447ec;\n        }\n        uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4);\n        uVar12 = *(uint *)PTR_COLS_00077fb4;\n        iVar5 = (int)(uVar12 + 0x28) / 0x14;\n        if ((uint)(iVar5 * 2) <= uVar8) {\n          uVar8 = iVar5 * 2;\n        }\n        if (uVar8 < 2) {\n          if (iVar5 == 0) {\n            trap(7);\n          }\n          uVar10 = (int)uVar12 / iVar5;\n        }\n        else {\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }\n        if (uVar10 == 0) {\n          trap(7);\n        }\n        uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1;\n        if (uVar8 < uVar14) {\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;\n          uVar14 = uVar14 - 2;\n          iVar5 = 2;\n          if (uVar8 < uVar14) goto LAB_000447ec;\n        }\n        for (puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar5 = 1,\n            puVar13 != (undefined4 *)0x0; puVar13 = (undefined4 *)puVar13[6]) {\n          uVar8 = *(uint *)puVar15;\n          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }\n    }\n    iVar5 = 0;\n  }\nLAB_000447ec:\n  if (local_24 == *(int **)puVar4) {\n    return iVar5;\n  }\n  puVar15 = PTR___stack_chk_fail_000780c0;\n  (*(code *)PTR___stack_chk_fail_000780c0)();\n  piVar9 = *(int **)(puVar15 + 0x33058);\n  if (**(char **)(puVar15 + 0x32c28) == '\0') {\n    if (*local_24 - 0x20U < 0x5f) {\n      return 0;\n    }\n    if (*local_24 - 0xa0U < 0x60) {\n      return 0;\n    }\n    piVar9 = *(int **)(puVar15 + 0x33058);\n  }\n  iVar5 = *piVar9;\n  if (iVar5 != 0) {\n    while ((((**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0 ||\n            (*local_24 != *(int *)(iVar5 + 8))) ||\n           (*(char *)(iVar5 + 4) != **(char **)(puVar15 + 0x32c28)))) {\n      iVar5 = *(int *)(iVar5 + 0x20);\n      if (iVar5 == 0) {\n        return 0;\n      }\n    }\n  }\n  return iVar5;\n}\n\n" (function_definition "int get_mouseinput(int *param_1,int *param_2,int param_3)\n\n{\n  char cVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined *puVar4;\n  int iVar5;\n  int iVar6;\n  int iVar7;\n  uint uVar8;\n  int *piVar9;\n  uint uVar10;\n  undefined4 uVar11;\n  uint uVar12;\n  undefined4 *puVar13;\n  uint uVar14;\n  undefined *puVar15;\n  undefined1 auStack_38 [4];\n  int local_34;\n  int local_30;\n  uint local_28;\n  int *local_24;\n  \n  puVar4 = PTR___stack_chk_guard_000780f8;\n  local_24 = *(int **)PTR___stack_chk_guard_000780f8;\n  iVar5 = (*(code *)PTR_getmouse_00078154)(auStack_38);\n  puVar3 = PTR_wenclose_00077ea4;\n  puVar2 = PTR_margin_00077690;\n  puVar15 = PTR_bottomwin_000775cc;\n  if (iVar5 == -1) goto LAB_000447ec;\n  uVar11 = *(undefined4 *)PTR_bottomwin_000775cc;\n  *param_2 = local_34 - *(int *)PTR_margin_00077690;\n  *param_1 = local_30;\n  iVar6 = (*(code *)puVar3)(uVar11,local_30,*param_2);\n  if ((local_28 & 5) == 0) {\n    iVar5 = 2;\n    if ((local_28 & 0x210000) == 0) goto LAB_000447ec;\n    iVar7 = (*(code *)PTR_wenclose_00077ea4)(*(undefined4 *)PTR_edit_000775d8,*param_1,*param_2);\n    if (iVar6 == 0) {\n      iVar5 = 2;\n      if (iVar7 == 0) goto LAB_000447ec;\n    }\n    else {\n      (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n      if ((iVar7 == 0) && (*param_1 != 0)) {\nLAB_000448cc:\n        iVar5 = 2;\n        goto LAB_000447ec;\n      }\n    }\n    iVar5 = 3;\n    do {\n      uVar11 = 0x102;\n      iVar5 = iVar5 + -1;\n      if ((local_28 & 0x10000) != 0) {\n        uVar11 = 0x103;\n      }\n      put_back(uVar11);\n    } while (iVar5 != 0);\nLAB_00044898:\n    iVar5 = 1;\n  }\n  else {\n    if (param_3 != 0) {\n      iVar5 = 0;\n      if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;\n      if (iVar6 != 0) {\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n        puVar15 = PTR_currmenu_000778a4;\n        if (*param_1 == 0) {\n          *param_2 = local_34 - *(int *)puVar2;\n          *param_1 = local_30;\n          iVar5 = 0;\n          goto LAB_000447ec;\n        }\n        uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4);\n        uVar12 = *(uint *)PTR_COLS_00077fb4;\n        iVar5 = (int)(uVar12 + 0x28) / 0x14;\n        if ((uint)(iVar5 * 2) <= uVar8) {\n          uVar8 = iVar5 * 2;\n        }\n        if (uVar8 < 2) {\n          if (iVar5 == 0) {\n            trap(7);\n          }\n          uVar10 = (int)uVar12 / iVar5;\n        }\n        else {\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }\n        if (uVar10 == 0) {\n          trap(7);\n        }\n        uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1;\n        if (uVar8 < uVar14) {\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;\n          uVar14 = uVar14 - 2;\n          iVar5 = 2;\n          if (uVar8 < uVar14) goto LAB_000447ec;\n        }\n        for (puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar5 = 1,\n            puVar13 != (undefined4 *)0x0; puVar13 = (undefined4 *)puVar13[6]) {\n          uVar8 = *(uint *)puVar15;\n          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }\n    }\n    iVar5 = 0;\n  }\nLAB_000447ec:\n  if (local_24 == *(int **)puVar4) {\n    return iVar5;\n  }\n  puVar15 = PTR___stack_chk_fail_000780c0;\n  (*(code *)PTR___stack_chk_fail_000780c0)();\n  piVar9 = *(int **)(puVar15 + 0x33058);\n  if (**(char **)(puVar15 + 0x32c28) == '\0') {\n    if (*local_24 - 0x20U < 0x5f) {\n      return 0;\n    }\n    if (*local_24 - 0xa0U < 0x60) {\n      return 0;\n    }\n    piVar9 = *(int **)(puVar15 + 0x33058);\n  }\n  iVar5 = *piVar9;\n  if (iVar5 != 0) {\n    while ((((**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0 ||\n            (*local_24 != *(int *)(iVar5 + 8))) ||\n           (*(char *)(iVar5 + 4) != **(char **)(puVar15 + 0x32c28)))) {\n      iVar5 = *(int *)(iVar5 + 0x20);\n      if (iVar5 == 0) {\n        return 0;\n      }\n    }\n  }\n  return iVar5;\n}" primitive_type (function_declarator "get_mouseinput(int *param_1,int *param_2,int param_3)" identifier (parameter_list "(int *param_1,int *param_2,int param_3)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  char cVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined *puVar4;\n  int iVar5;\n  int iVar6;\n  int iVar7;\n  uint uVar8;\n  int *piVar9;\n  uint uVar10;\n  undefined4 uVar11;\n  uint uVar12;\n  undefined4 *puVar13;\n  uint uVar14;\n  undefined *puVar15;\n  undefined1 auStack_38 [4];\n  int local_34;\n  int local_30;\n  uint local_28;\n  int *local_24;\n  \n  puVar4 = PTR___stack_chk_guard_000780f8;\n  local_24 = *(int **)PTR___stack_chk_guard_000780f8;\n  iVar5 = (*(code *)PTR_getmouse_00078154)(auStack_38);\n  puVar3 = PTR_wenclose_00077ea4;\n  puVar2 = PTR_margin_00077690;\n  puVar15 = PTR_bottomwin_000775cc;\n  if (iVar5 == -1) goto LAB_000447ec;\n  uVar11 = *(undefined4 *)PTR_bottomwin_000775cc;\n  *param_2 = local_34 - *(int *)PTR_margin_00077690;\n  *param_1 = local_30;\n  iVar6 = (*(code *)puVar3)(uVar11,local_30,*param_2);\n  if ((local_28 & 5) == 0) {\n    iVar5 = 2;\n    if ((local_28 & 0x210000) == 0) goto LAB_000447ec;\n    iVar7 = (*(code *)PTR_wenclose_00077ea4)(*(undefined4 *)PTR_edit_000775d8,*param_1,*param_2);\n    if (iVar6 == 0) {\n      iVar5 = 2;\n      if (iVar7 == 0) goto LAB_000447ec;\n    }\n    else {\n      (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n      if ((iVar7 == 0) && (*param_1 != 0)) {\nLAB_000448cc:\n        iVar5 = 2;\n        goto LAB_000447ec;\n      }\n    }\n    iVar5 = 3;\n    do {\n      uVar11 = 0x102;\n      iVar5 = iVar5 + -1;\n      if ((local_28 & 0x10000) != 0) {\n        uVar11 = 0x103;\n      }\n      put_back(uVar11);\n    } while (iVar5 != 0);\nLAB_00044898:\n    iVar5 = 1;\n  }\n  else {\n    if (param_3 != 0) {\n      iVar5 = 0;\n      if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;\n      if (iVar6 != 0) {\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n        puVar15 = PTR_currmenu_000778a4;\n        if (*param_1 == 0) {\n          *param_2 = local_34 - *(int *)puVar2;\n          *param_1 = local_30;\n          iVar5 = 0;\n          goto LAB_000447ec;\n        }\n        uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4);\n        uVar12 = *(uint *)PTR_COLS_00077fb4;\n        iVar5 = (int)(uVar12 + 0x28) / 0x14;\n        if ((uint)(iVar5 * 2) <= uVar8) {\n          uVar8 = iVar5 * 2;\n        }\n        if (uVar8 < 2) {\n          if (iVar5 == 0) {\n            trap(7);\n          }\n          uVar10 = (int)uVar12 / iVar5;\n        }\n        else {\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }\n        if (uVar10 == 0) {\n          trap(7);\n        }\n        uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1;\n        if (uVar8 < uVar14) {\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;\n          uVar14 = uVar14 - 2;\n          iVar5 = 2;\n          if (uVar8 < uVar14) goto LAB_000447ec;\n        }\n        for (puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar5 = 1,\n            puVar13 != (undefined4 *)0x0; puVar13 = (undefined4 *)puVar13[6]) {\n          uVar8 = *(uint *)puVar15;\n          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }\n    }\n    iVar5 = 0;\n  }\nLAB_000447ec:\n  if (local_24 == *(int **)puVar4) {\n    return iVar5;\n  }\n  puVar15 = PTR___stack_chk_fail_000780c0;\n  (*(code *)PTR___stack_chk_fail_000780c0)();\n  piVar9 = *(int **)(puVar15 + 0x33058);\n  if (**(char **)(puVar15 + 0x32c28) == '\0') {\n    if (*local_24 - 0x20U < 0x5f) {\n      return 0;\n    }\n    if (*local_24 - 0xa0U < 0x60) {\n      return 0;\n    }\n    piVar9 = *(int **)(puVar15 + 0x33058);\n  }\n  iVar5 = *piVar9;\n  if (iVar5 != 0) {\n    while ((((**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0 ||\n            (*local_24 != *(int *)(iVar5 + 8))) ||\n           (*(char *)(iVar5 + 4) != **(char **)(puVar15 + 0x32c28)))) {\n      iVar5 = *(int *)(iVar5 + 0x20);\n      if (iVar5 == 0) {\n        return 0;\n      }\n    }\n  }\n  return iVar5;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "undefined *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "int *piVar9;" primitive_type (pointer_declarator "*piVar9" * identifier) ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "undefined4 uVar11;" type_identifier identifier ;) (declaration "uint uVar12;" type_identifier identifier ;) (declaration "undefined4 *puVar13;" type_identifier (pointer_declarator "*puVar13" * identifier) ;) (declaration "uint uVar14;" type_identifier identifier ;) (declaration "undefined *puVar15;" type_identifier (pointer_declarator "*puVar15" * identifier) ;) (declaration "undefined1 auStack_38 [4];" type_identifier (array_declarator "auStack_38 [4]" identifier [ number_literal ]) ;) (declaration "int local_34;" primitive_type identifier ;) (declaration "int local_30;" primitive_type identifier ;) (declaration "uint local_28;" type_identifier identifier ;) (declaration "int *local_24;" primitive_type (pointer_declarator "*local_24" * identifier) ;) (expression_statement "puVar4 = PTR___stack_chk_guard_000780f8;" (assignment_expression "puVar4 = PTR___stack_chk_guard_000780f8" identifier = identifier) ;) (expression_statement "local_24 = *(int **)PTR___stack_chk_guard_000780f8;" (assignment_expression "local_24 = *(int **)PTR___stack_chk_guard_000780f8" identifier = (pointer_expression "*(int **)PTR___stack_chk_guard_000780f8" * (cast_expression "(int **)PTR___stack_chk_guard_000780f8" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) ;) (expression_statement "iVar5 = (*(code *)PTR_getmouse_00078154)(auStack_38);" (assignment_expression "iVar5 = (*(code *)PTR_getmouse_00078154)(auStack_38)" identifier = (call_expression "(*(code *)PTR_getmouse_00078154)(auStack_38)" (parenthesized_expression "(*(code *)PTR_getmouse_00078154)" ( (pointer_expression "*(code *)PTR_getmouse_00078154" * (cast_expression "(code *)PTR_getmouse_00078154" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(auStack_38)" ( identifier )))) ;) (expression_statement "puVar3 = PTR_wenclose_00077ea4;" (assignment_expression "puVar3 = PTR_wenclose_00077ea4" identifier = identifier) ;) (expression_statement "puVar2 = PTR_margin_00077690;" (assignment_expression "puVar2 = PTR_margin_00077690" identifier = identifier) ;) (expression_statement "puVar15 = PTR_bottomwin_000775cc;" (assignment_expression "puVar15 = PTR_bottomwin_000775cc" identifier = identifier) ;) (if_statement "if (iVar5 == -1) goto LAB_000447ec;" if (parenthesized_expression "(iVar5 == -1)" ( (binary_expression "iVar5 == -1" identifier == number_literal) )) (goto_statement "goto LAB_000447ec;" goto statement_identifier ;)) (expression_statement "uVar11 = *(undefined4 *)PTR_bottomwin_000775cc;" (assignment_expression "uVar11 = *(undefined4 *)PTR_bottomwin_000775cc" identifier = (pointer_expression "*(undefined4 *)PTR_bottomwin_000775cc" * (cast_expression "(undefined4 *)PTR_bottomwin_000775cc" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "*param_2 = local_34 - *(int *)PTR_margin_00077690;" (assignment_expression "*param_2 = local_34 - *(int *)PTR_margin_00077690" (pointer_expression "*param_2" * identifier) = (binary_expression "local_34 - *(int *)PTR_margin_00077690" identifier - (pointer_expression "*(int *)PTR_margin_00077690" * (cast_expression "(int *)PTR_margin_00077690" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)))) ;) (expression_statement "*param_1 = local_30;" (assignment_expression "*param_1 = local_30" (pointer_expression "*param_1" * identifier) = identifier) ;) (expression_statement "iVar6 = (*(code *)puVar3)(uVar11,local_30,*param_2);" (assignment_expression "iVar6 = (*(code *)puVar3)(uVar11,local_30,*param_2)" identifier = (call_expression "(*(code *)puVar3)(uVar11,local_30,*param_2)" (parenthesized_expression "(*(code *)puVar3)" ( (pointer_expression "*(code *)puVar3" * (cast_expression "(code *)puVar3" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(uVar11,local_30,*param_2)" ( identifier , identifier , (pointer_expression "*param_2" * identifier) )))) ;) (if_statement "if ((local_28 & 5) == 0) {\n    iVar5 = 2;\n    if ((local_28 & 0x210000) == 0) goto LAB_000447ec;\n    iVar7 = (*(code *)PTR_wenclose_00077ea4)(*(undefined4 *)PTR_edit_000775d8,*param_1,*param_2);\n    if (iVar6 == 0) {\n      iVar5 = 2;\n      if (iVar7 == 0) goto LAB_000447ec;\n    }\n    else {\n      (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n      if ((iVar7 == 0) && (*param_1 != 0)) {\nLAB_000448cc:\n        iVar5 = 2;\n        goto LAB_000447ec;\n      }\n    }\n    iVar5 = 3;\n    do {\n      uVar11 = 0x102;\n      iVar5 = iVar5 + -1;\n      if ((local_28 & 0x10000) != 0) {\n        uVar11 = 0x103;\n      }\n      put_back(uVar11);\n    } while (iVar5 != 0);\nLAB_00044898:\n    iVar5 = 1;\n  }\n  else {\n    if (param_3 != 0) {\n      iVar5 = 0;\n      if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;\n      if (iVar6 != 0) {\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n        puVar15 = PTR_currmenu_000778a4;\n        if (*param_1 == 0) {\n          *param_2 = local_34 - *(int *)puVar2;\n          *param_1 = local_30;\n          iVar5 = 0;\n          goto LAB_000447ec;\n        }\n        uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4);\n        uVar12 = *(uint *)PTR_COLS_00077fb4;\n        iVar5 = (int)(uVar12 + 0x28) / 0x14;\n        if ((uint)(iVar5 * 2) <= uVar8) {\n          uVar8 = iVar5 * 2;\n        }\n        if (uVar8 < 2) {\n          if (iVar5 == 0) {\n            trap(7);\n          }\n          uVar10 = (int)uVar12 / iVar5;\n        }\n        else {\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }\n        if (uVar10 == 0) {\n          trap(7);\n        }\n        uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1;\n        if (uVar8 < uVar14) {\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;\n          uVar14 = uVar14 - 2;\n          iVar5 = 2;\n          if (uVar8 < uVar14) goto LAB_000447ec;\n        }\n        for (puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar5 = 1,\n            puVar13 != (undefined4 *)0x0; puVar13 = (undefined4 *)puVar13[6]) {\n          uVar8 = *(uint *)puVar15;\n          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }\n    }\n    iVar5 = 0;\n  }" if (parenthesized_expression "((local_28 & 5) == 0)" ( (binary_expression "(local_28 & 5) == 0" (parenthesized_expression "(local_28 & 5)" ( (binary_expression "local_28 & 5" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    iVar5 = 2;\n    if ((local_28 & 0x210000) == 0) goto LAB_000447ec;\n    iVar7 = (*(code *)PTR_wenclose_00077ea4)(*(undefined4 *)PTR_edit_000775d8,*param_1,*param_2);\n    if (iVar6 == 0) {\n      iVar5 = 2;\n      if (iVar7 == 0) goto LAB_000447ec;\n    }\n    else {\n      (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n      if ((iVar7 == 0) && (*param_1 != 0)) {\nLAB_000448cc:\n        iVar5 = 2;\n        goto LAB_000447ec;\n      }\n    }\n    iVar5 = 3;\n    do {\n      uVar11 = 0x102;\n      iVar5 = iVar5 + -1;\n      if ((local_28 & 0x10000) != 0) {\n        uVar11 = 0x103;\n      }\n      put_back(uVar11);\n    } while (iVar5 != 0);\nLAB_00044898:\n    iVar5 = 1;\n  }" { (expression_statement "iVar5 = 2;" (assignment_expression "iVar5 = 2" identifier = number_literal) ;) (if_statement "if ((local_28 & 0x210000) == 0) goto LAB_000447ec;" if (parenthesized_expression "((local_28 & 0x210000) == 0)" ( (binary_expression "(local_28 & 0x210000) == 0" (parenthesized_expression "(local_28 & 0x210000)" ( (binary_expression "local_28 & 0x210000" identifier & number_literal) )) == number_literal) )) (goto_statement "goto LAB_000447ec;" goto statement_identifier ;)) (expression_statement "iVar7 = (*(code *)PTR_wenclose_00077ea4)(*(undefined4 *)PTR_edit_000775d8,*param_1,*param_2);" (assignment_expression "iVar7 = (*(code *)PTR_wenclose_00077ea4)(*(undefined4 *)PTR_edit_000775d8,*param_1,*param_2)" identifier = (call_expression "(*(code *)PTR_wenclose_00077ea4)(*(undefined4 *)PTR_edit_000775d8,*param_1,*param_2)" (parenthesized_expression "(*(code *)PTR_wenclose_00077ea4)" ( (pointer_expression "*(code *)PTR_wenclose_00077ea4" * (cast_expression "(code *)PTR_wenclose_00077ea4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(*(undefined4 *)PTR_edit_000775d8,*param_1,*param_2)" ( (pointer_expression "*(undefined4 *)PTR_edit_000775d8" * (cast_expression "(undefined4 *)PTR_edit_000775d8" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) , (pointer_expression "*param_1" * identifier) , (pointer_expression "*param_2" * identifier) )))) ;) (if_statement "if (iVar6 == 0) {\n      iVar5 = 2;\n      if (iVar7 == 0) goto LAB_000447ec;\n    }\n    else {\n      (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n      if ((iVar7 == 0) && (*param_1 != 0)) {\nLAB_000448cc:\n        iVar5 = 2;\n        goto LAB_000447ec;\n      }\n    }" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (compound_statement "{\n      iVar5 = 2;\n      if (iVar7 == 0) goto LAB_000447ec;\n    }" { (expression_statement "iVar5 = 2;" (assignment_expression "iVar5 = 2" identifier = number_literal) ;) (if_statement "if (iVar7 == 0) goto LAB_000447ec;" if (parenthesized_expression "(iVar7 == 0)" ( (binary_expression "iVar7 == 0" identifier == number_literal) )) (goto_statement "goto LAB_000447ec;" goto statement_identifier ;)) }) (else_clause "else {\n      (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n      if ((iVar7 == 0) && (*param_1 != 0)) {\nLAB_000448cc:\n        iVar5 = 2;\n        goto LAB_000447ec;\n      }\n    }" else (compound_statement "{\n      (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n      if ((iVar7 == 0) && (*param_1 != 0)) {\nLAB_000448cc:\n        iVar5 = 2;\n        goto LAB_000447ec;\n      }\n    }" { (expression_statement "(*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);" (call_expression "(*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0)" (parenthesized_expression "(*(code *)PTR_wmouse_trafo_00077f04)" ( (pointer_expression "*(code *)PTR_wmouse_trafo_00077f04" * (cast_expression "(code *)PTR_wmouse_trafo_00077f04" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(*(undefined4 *)puVar15,param_1,param_2,0)" ( (pointer_expression "*(undefined4 *)puVar15" * (cast_expression "(undefined4 *)puVar15" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) , identifier , identifier , number_literal ))) ;) (if_statement "if ((iVar7 == 0) && (*param_1 != 0)) {\nLAB_000448cc:\n        iVar5 = 2;\n        goto LAB_000447ec;\n      }" if (parenthesized_expression "((iVar7 == 0) && (*param_1 != 0))" ( (binary_expression "(iVar7 == 0) && (*param_1 != 0)" (parenthesized_expression "(iVar7 == 0)" ( (binary_expression "iVar7 == 0" identifier == number_literal) )) && (parenthesized_expression "(*param_1 != 0)" ( (binary_expression "*param_1 != 0" (pointer_expression "*param_1" * identifier) != number_literal) ))) )) (compound_statement "{\nLAB_000448cc:\n        iVar5 = 2;\n        goto LAB_000447ec;\n      }" { (labeled_statement "LAB_000448cc:\n        iVar5 = 2;" statement_identifier : (expression_statement "iVar5 = 2;" (assignment_expression "iVar5 = 2" identifier = number_literal) ;)) (goto_statement "goto LAB_000447ec;" goto statement_identifier ;) })) }))) (expression_statement "iVar5 = 3;" (assignment_expression "iVar5 = 3" identifier = number_literal) ;) (do_statement "do {\n      uVar11 = 0x102;\n      iVar5 = iVar5 + -1;\n      if ((local_28 & 0x10000) != 0) {\n        uVar11 = 0x103;\n      }\n      put_back(uVar11);\n    } while (iVar5 != 0);" do (compound_statement "{\n      uVar11 = 0x102;\n      iVar5 = iVar5 + -1;\n      if ((local_28 & 0x10000) != 0) {\n        uVar11 = 0x103;\n      }\n      put_back(uVar11);\n    }" { (expression_statement "uVar11 = 0x102;" (assignment_expression "uVar11 = 0x102" identifier = number_literal) ;) (expression_statement "iVar5 = iVar5 + -1;" (assignment_expression "iVar5 = iVar5 + -1" identifier = (binary_expression "iVar5 + -1" identifier + number_literal)) ;) (if_statement "if ((local_28 & 0x10000) != 0) {\n        uVar11 = 0x103;\n      }" if (parenthesized_expression "((local_28 & 0x10000) != 0)" ( (binary_expression "(local_28 & 0x10000) != 0" (parenthesized_expression "(local_28 & 0x10000)" ( (binary_expression "local_28 & 0x10000" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        uVar11 = 0x103;\n      }" { (expression_statement "uVar11 = 0x103;" (assignment_expression "uVar11 = 0x103" identifier = number_literal) ;) })) (expression_statement "put_back(uVar11);" (call_expression "put_back(uVar11)" identifier (argument_list "(uVar11)" ( identifier ))) ;) }) while (parenthesized_expression "(iVar5 != 0)" ( (binary_expression "iVar5 != 0" identifier != number_literal) )) ;) (labeled_statement "LAB_00044898:\n    iVar5 = 1;" statement_identifier : (expression_statement "iVar5 = 1;" (assignment_expression "iVar5 = 1" identifier = number_literal) ;)) }) (else_clause "else {\n    if (param_3 != 0) {\n      iVar5 = 0;\n      if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;\n      if (iVar6 != 0) {\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n        puVar15 = PTR_currmenu_000778a4;\n        if (*param_1 == 0) {\n          *param_2 = local_34 - *(int *)puVar2;\n          *param_1 = local_30;\n          iVar5 = 0;\n          goto LAB_000447ec;\n        }\n        uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4);\n        uVar12 = *(uint *)PTR_COLS_00077fb4;\n        iVar5 = (int)(uVar12 + 0x28) / 0x14;\n        if ((uint)(iVar5 * 2) <= uVar8) {\n          uVar8 = iVar5 * 2;\n        }\n        if (uVar8 < 2) {\n          if (iVar5 == 0) {\n            trap(7);\n          }\n          uVar10 = (int)uVar12 / iVar5;\n        }\n        else {\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }\n        if (uVar10 == 0) {\n          trap(7);\n        }\n        uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1;\n        if (uVar8 < uVar14) {\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;\n          uVar14 = uVar14 - 2;\n          iVar5 = 2;\n          if (uVar8 < uVar14) goto LAB_000447ec;\n        }\n        for (puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar5 = 1,\n            puVar13 != (undefined4 *)0x0; puVar13 = (undefined4 *)puVar13[6]) {\n          uVar8 = *(uint *)puVar15;\n          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }\n    }\n    iVar5 = 0;\n  }" else (compound_statement "{\n    if (param_3 != 0) {\n      iVar5 = 0;\n      if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;\n      if (iVar6 != 0) {\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n        puVar15 = PTR_currmenu_000778a4;\n        if (*param_1 == 0) {\n          *param_2 = local_34 - *(int *)puVar2;\n          *param_1 = local_30;\n          iVar5 = 0;\n          goto LAB_000447ec;\n        }\n        uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4);\n        uVar12 = *(uint *)PTR_COLS_00077fb4;\n        iVar5 = (int)(uVar12 + 0x28) / 0x14;\n        if ((uint)(iVar5 * 2) <= uVar8) {\n          uVar8 = iVar5 * 2;\n        }\n        if (uVar8 < 2) {\n          if (iVar5 == 0) {\n            trap(7);\n          }\n          uVar10 = (int)uVar12 / iVar5;\n        }\n        else {\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }\n        if (uVar10 == 0) {\n          trap(7);\n        }\n        uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1;\n        if (uVar8 < uVar14) {\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;\n          uVar14 = uVar14 - 2;\n          iVar5 = 2;\n          if (uVar8 < uVar14) goto LAB_000447ec;\n        }\n        for (puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar5 = 1,\n            puVar13 != (undefined4 *)0x0; puVar13 = (undefined4 *)puVar13[6]) {\n          uVar8 = *(uint *)puVar15;\n          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }\n    }\n    iVar5 = 0;\n  }" { (if_statement "if (param_3 != 0) {\n      iVar5 = 0;\n      if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;\n      if (iVar6 != 0) {\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n        puVar15 = PTR_currmenu_000778a4;\n        if (*param_1 == 0) {\n          *param_2 = local_34 - *(int *)puVar2;\n          *param_1 = local_30;\n          iVar5 = 0;\n          goto LAB_000447ec;\n        }\n        uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4);\n        uVar12 = *(uint *)PTR_COLS_00077fb4;\n        iVar5 = (int)(uVar12 + 0x28) / 0x14;\n        if ((uint)(iVar5 * 2) <= uVar8) {\n          uVar8 = iVar5 * 2;\n        }\n        if (uVar8 < 2) {\n          if (iVar5 == 0) {\n            trap(7);\n          }\n          uVar10 = (int)uVar12 / iVar5;\n        }\n        else {\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }\n        if (uVar10 == 0) {\n          trap(7);\n        }\n        uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1;\n        if (uVar8 < uVar14) {\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;\n          uVar14 = uVar14 - 2;\n          iVar5 = 2;\n          if (uVar8 < uVar14) goto LAB_000447ec;\n        }\n        for (puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar5 = 1,\n            puVar13 != (undefined4 *)0x0; puVar13 = (undefined4 *)puVar13[6]) {\n          uVar8 = *(uint *)puVar15;\n          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }\n    }" if (parenthesized_expression "(param_3 != 0)" ( (binary_expression "param_3 != 0" identifier != number_literal) )) (compound_statement "{\n      iVar5 = 0;\n      if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;\n      if (iVar6 != 0) {\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n        puVar15 = PTR_currmenu_000778a4;\n        if (*param_1 == 0) {\n          *param_2 = local_34 - *(int *)puVar2;\n          *param_1 = local_30;\n          iVar5 = 0;\n          goto LAB_000447ec;\n        }\n        uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4);\n        uVar12 = *(uint *)PTR_COLS_00077fb4;\n        iVar5 = (int)(uVar12 + 0x28) / 0x14;\n        if ((uint)(iVar5 * 2) <= uVar8) {\n          uVar8 = iVar5 * 2;\n        }\n        if (uVar8 < 2) {\n          if (iVar5 == 0) {\n            trap(7);\n          }\n          uVar10 = (int)uVar12 / iVar5;\n        }\n        else {\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }\n        if (uVar10 == 0) {\n          trap(7);\n        }\n        uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1;\n        if (uVar8 < uVar14) {\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;\n          uVar14 = uVar14 - 2;\n          iVar5 = 2;\n          if (uVar8 < uVar14) goto LAB_000447ec;\n        }\n        for (puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar5 = 1,\n            puVar13 != (undefined4 *)0x0; puVar13 = (undefined4 *)puVar13[6]) {\n          uVar8 = *(uint *)puVar15;\n          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }\n    }" { (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) (if_statement "if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;" if (parenthesized_expression "((*(uint *)PTR_flags_0007759c & 8) != 0)" ( (binary_expression "(*(uint *)PTR_flags_0007759c & 8) != 0" (parenthesized_expression "(*(uint *)PTR_flags_0007759c & 8)" ( (binary_expression "*(uint *)PTR_flags_0007759c & 8" (pointer_expression "*(uint *)PTR_flags_0007759c" * (cast_expression "(uint *)PTR_flags_0007759c" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) & number_literal) )) != number_literal) )) (goto_statement "goto LAB_000447ec;" goto statement_identifier ;)) (if_statement "if (iVar6 != 0) {\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n        puVar15 = PTR_currmenu_000778a4;\n        if (*param_1 == 0) {\n          *param_2 = local_34 - *(int *)puVar2;\n          *param_1 = local_30;\n          iVar5 = 0;\n          goto LAB_000447ec;\n        }\n        uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4);\n        uVar12 = *(uint *)PTR_COLS_00077fb4;\n        iVar5 = (int)(uVar12 + 0x28) / 0x14;\n        if ((uint)(iVar5 * 2) <= uVar8) {\n          uVar8 = iVar5 * 2;\n        }\n        if (uVar8 < 2) {\n          if (iVar5 == 0) {\n            trap(7);\n          }\n          uVar10 = (int)uVar12 / iVar5;\n        }\n        else {\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }\n        if (uVar10 == 0) {\n          trap(7);\n        }\n        uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1;\n        if (uVar8 < uVar14) {\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;\n          uVar14 = uVar14 - 2;\n          iVar5 = 2;\n          if (uVar8 < uVar14) goto LAB_000447ec;\n        }\n        for (puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar5 = 1,\n            puVar13 != (undefined4 *)0x0; puVar13 = (undefined4 *)puVar13[6]) {\n          uVar8 = *(uint *)puVar15;\n          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }" if (parenthesized_expression "(iVar6 != 0)" ( (binary_expression "iVar6 != 0" identifier != number_literal) )) (compound_statement "{\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n        puVar15 = PTR_currmenu_000778a4;\n        if (*param_1 == 0) {\n          *param_2 = local_34 - *(int *)puVar2;\n          *param_1 = local_30;\n          iVar5 = 0;\n          goto LAB_000447ec;\n        }\n        uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4);\n        uVar12 = *(uint *)PTR_COLS_00077fb4;\n        iVar5 = (int)(uVar12 + 0x28) / 0x14;\n        if ((uint)(iVar5 * 2) <= uVar8) {\n          uVar8 = iVar5 * 2;\n        }\n        if (uVar8 < 2) {\n          if (iVar5 == 0) {\n            trap(7);\n          }\n          uVar10 = (int)uVar12 / iVar5;\n        }\n        else {\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }\n        if (uVar10 == 0) {\n          trap(7);\n        }\n        uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1;\n        if (uVar8 < uVar14) {\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;\n          uVar14 = uVar14 - 2;\n          iVar5 = 2;\n          if (uVar8 < uVar14) goto LAB_000447ec;\n        }\n        for (puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar5 = 1,\n            puVar13 != (undefined4 *)0x0; puVar13 = (undefined4 *)puVar13[6]) {\n          uVar8 = *(uint *)puVar15;\n          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }" { (expression_statement "(*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);" (call_expression "(*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0)" (parenthesized_expression "(*(code *)PTR_wmouse_trafo_00077f04)" ( (pointer_expression "*(code *)PTR_wmouse_trafo_00077f04" * (cast_expression "(code *)PTR_wmouse_trafo_00077f04" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(*(undefined4 *)puVar15,param_1,param_2,0)" ( (pointer_expression "*(undefined4 *)puVar15" * (cast_expression "(undefined4 *)puVar15" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) , identifier , identifier , number_literal ))) ;) (expression_statement "puVar15 = PTR_currmenu_000778a4;" (assignment_expression "puVar15 = PTR_currmenu_000778a4" identifier = identifier) ;) (if_statement "if (*param_1 == 0) {\n          *param_2 = local_34 - *(int *)puVar2;\n          *param_1 = local_30;\n          iVar5 = 0;\n          goto LAB_000447ec;\n        }" if (parenthesized_expression "(*param_1 == 0)" ( (binary_expression "*param_1 == 0" (pointer_expression "*param_1" * identifier) == number_literal) )) (compound_statement "{\n          *param_2 = local_34 - *(int *)puVar2;\n          *param_1 = local_30;\n          iVar5 = 0;\n          goto LAB_000447ec;\n        }" { (expression_statement "*param_2 = local_34 - *(int *)puVar2;" (assignment_expression "*param_2 = local_34 - *(int *)puVar2" (pointer_expression "*param_2" * identifier) = (binary_expression "local_34 - *(int *)puVar2" identifier - (pointer_expression "*(int *)puVar2" * (cast_expression "(int *)puVar2" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)))) ;) (expression_statement "*param_1 = local_30;" (assignment_expression "*param_1 = local_30" (pointer_expression "*param_1" * identifier) = identifier) ;) (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) (goto_statement "goto LAB_000447ec;" goto statement_identifier ;) })) (expression_statement "uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4);" (assignment_expression "uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4)" identifier = (call_expression "length_of_list(*(undefined4 *)PTR_currmenu_000778a4)" identifier (argument_list "(*(undefined4 *)PTR_currmenu_000778a4)" ( (pointer_expression "*(undefined4 *)PTR_currmenu_000778a4" * (cast_expression "(undefined4 *)PTR_currmenu_000778a4" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )))) ;) (expression_statement "uVar12 = *(uint *)PTR_COLS_00077fb4;" (assignment_expression "uVar12 = *(uint *)PTR_COLS_00077fb4" identifier = (pointer_expression "*(uint *)PTR_COLS_00077fb4" * (cast_expression "(uint *)PTR_COLS_00077fb4" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "iVar5 = (int)(uVar12 + 0x28) / 0x14;" (assignment_expression "iVar5 = (int)(uVar12 + 0x28) / 0x14" identifier = (binary_expression "(int)(uVar12 + 0x28) / 0x14" (cast_expression "(int)(uVar12 + 0x28)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar12 + 0x28)" ( (binary_expression "uVar12 + 0x28" identifier + number_literal) ))) / number_literal)) ;) (if_statement "if ((uint)(iVar5 * 2) <= uVar8) {\n          uVar8 = iVar5 * 2;\n        }" if (parenthesized_expression "((uint)(iVar5 * 2) <= uVar8)" ( (binary_expression "(uint)(iVar5 * 2) <= uVar8" (call_expression "(uint)(iVar5 * 2)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar5 * 2)" ( (binary_expression "iVar5 * 2" identifier * number_literal) ))) <= identifier) )) (compound_statement "{\n          uVar8 = iVar5 * 2;\n        }" { (expression_statement "uVar8 = iVar5 * 2;" (assignment_expression "uVar8 = iVar5 * 2" identifier = (binary_expression "iVar5 * 2" identifier * number_literal)) ;) })) (if_statement "if (uVar8 < 2) {\n          if (iVar5 == 0) {\n            trap(7);\n          }\n          uVar10 = (int)uVar12 / iVar5;\n        }\n        else {\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }" if (parenthesized_expression "(uVar8 < 2)" ( (binary_expression "uVar8 < 2" identifier < number_literal) )) (compound_statement "{\n          if (iVar5 == 0) {\n            trap(7);\n          }\n          uVar10 = (int)uVar12 / iVar5;\n        }" { (if_statement "if (iVar5 == 0) {\n            trap(7);\n          }" if (parenthesized_expression "(iVar5 == 0)" ( (binary_expression "iVar5 == 0" identifier == number_literal) )) (compound_statement "{\n            trap(7);\n          }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar10 = (int)uVar12 / iVar5;" (assignment_expression "uVar10 = (int)uVar12 / iVar5" identifier = (binary_expression "(int)uVar12 / iVar5" (cast_expression "(int)uVar12" ( (type_descriptor "int" primitive_type) ) identifier) / identifier)) ;) }) (else_clause "else {\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }" else (compound_statement "{\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }" { (expression_statement "uVar10 = (uVar8 >> 1) + (uVar8 & 1);" (assignment_expression "uVar10 = (uVar8 >> 1) + (uVar8 & 1)" identifier = (binary_expression "(uVar8 >> 1) + (uVar8 & 1)" (parenthesized_expression "(uVar8 >> 1)" ( (binary_expression "uVar8 >> 1" identifier >> number_literal) )) + (parenthesized_expression "(uVar8 & 1)" ( (binary_expression "uVar8 & 1" identifier & number_literal) )))) ;) (if_statement "if (uVar10 == 0) {\n            trap(7);\n          }" if (parenthesized_expression "(uVar10 == 0)" ( (binary_expression "uVar10 == 0" identifier == number_literal) )) (compound_statement "{\n            trap(7);\n          }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar10 = uVar12 / uVar10;" (assignment_expression "uVar10 = uVar12 / uVar10" identifier = (binary_expression "uVar12 / uVar10" identifier / identifier)) ;) }))) (if_statement "if (uVar10 == 0) {\n          trap(7);\n        }" if (parenthesized_expression "(uVar10 == 0)" ( (binary_expression "uVar10 == 0" identifier == number_literal) )) (compound_statement "{\n          trap(7);\n        }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1;" (assignment_expression "uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1" identifier = (binary_expression "(*param_2 / (int)uVar10) * 2 + *param_1" (binary_expression "(*param_2 / (int)uVar10) * 2" (parenthesized_expression "(*param_2 / (int)uVar10)" ( (binary_expression "*param_2 / (int)uVar10" (pointer_expression "*param_2" * identifier) / (cast_expression "(int)uVar10" ( (type_descriptor "int" primitive_type) ) identifier)) )) * number_literal) + (pointer_expression "*param_1" * identifier))) ;) (if_statement "if (uVar8 < uVar14) {\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;\n          uVar14 = uVar14 - 2;\n          iVar5 = 2;\n          if (uVar8 < uVar14) goto LAB_000447ec;\n        }" if (parenthesized_expression "(uVar8 < uVar14)" ( (binary_expression "uVar8 < uVar14" identifier < identifier) )) (compound_statement "{\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;\n          uVar14 = uVar14 - 2;\n          iVar5 = 2;\n          if (uVar8 < uVar14) goto LAB_000447ec;\n        }" { (if_statement "if (uVar10 == 0) {\n            trap(7);\n          }" if (parenthesized_expression "(uVar10 == 0)" ( (binary_expression "uVar10 == 0" identifier == number_literal) )) (compound_statement "{\n            trap(7);\n          }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (if_statement "if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;" if (parenthesized_expression "((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10)" ( (binary_expression "(int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10" (binary_expression "(int)uVar12 % (int)uVar10" (cast_expression "(int)uVar12" ( (type_descriptor "int" primitive_type) ) identifier) % (cast_expression "(int)uVar10" ( (type_descriptor "int" primitive_type) ) identifier)) <= (binary_expression "*param_2 % (int)uVar10" (pointer_expression "*param_2" * identifier) % (cast_expression "(int)uVar10" ( (type_descriptor "int" primitive_type) ) identifier))) )) (goto_statement "goto LAB_000448cc;" goto statement_identifier ;)) (expression_statement "uVar14 = uVar14 - 2;" (assignment_expression "uVar14 = uVar14 - 2" identifier = (binary_expression "uVar14 - 2" identifier - number_literal)) ;) (expression_statement "iVar5 = 2;" (assignment_expression "iVar5 = 2" identifier = number_literal) ;) (if_statement "if (uVar8 < uVar14) goto LAB_000447ec;" if (parenthesized_expression "(uVar8 < uVar14)" ( (binary_expression "uVar8 < uVar14" identifier < identifier) )) (goto_statement "goto LAB_000447ec;" goto statement_identifier ;)) })) (for_statement "for (puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar5 = 1,\n            puVar13 != (undefined4 *)0x0; puVar13 = (undefined4 *)puVar13[6]) {\n          uVar8 = *(uint *)puVar15;\n          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }\n        }" for ( (assignment_expression "puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0" identifier = (pointer_expression "*(undefined4 **)PTR_allfuncs_00077ad0" * (cast_expression "(undefined4 **)PTR_allfuncs_00077ad0" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) ; (comma_expression "iVar5 = 1,\n            puVar13 != (undefined4 *)0x0" (assignment_expression "iVar5 = 1" identifier = number_literal) , (binary_expression "puVar13 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) ; (assignment_expression "puVar13 = (undefined4 *)puVar13[6]" identifier = (cast_expression "(undefined4 *)puVar13[6]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar13[6]" identifier [ number_literal ]))) ) (compound_statement "{\n          uVar8 = *(uint *)puVar15;\n          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }\n        }" { (expression_statement "uVar8 = *(uint *)puVar15;" (assignment_expression "uVar8 = *(uint *)puVar15" identifier = (pointer_expression "*(uint *)puVar15" * (cast_expression "(uint *)puVar15" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (if_statement "if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }" if (parenthesized_expression "((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0))" ( (binary_expression "(((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)" (parenthesized_expression "(((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0))" ( (binary_expression "((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)" (parenthesized_expression "((uVar8 & puVar13[1]) != 0)" ( (binary_expression "(uVar8 & puVar13[1]) != 0" (parenthesized_expression "(uVar8 & puVar13[1])" ( (binary_expression "uVar8 & puVar13[1]" identifier & (subscript_expression "puVar13[1]" identifier [ number_literal ])) )) != number_literal) )) && (parenthesized_expression "(iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)" ( (comma_expression "iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0" (assignment_expression "iVar5 = first_sc_for(uVar8,*puVar13)" identifier = (call_expression "first_sc_for(uVar8,*puVar13)" identifier (argument_list "(uVar8,*puVar13)" ( identifier , (pointer_expression "*puVar13" * identifier) )))) , (binary_expression "iVar5 != 0" identifier != number_literal)) ))) )) && (parenthesized_expression "(uVar14 = uVar14 - 1, uVar14 == 0)" ( (comma_expression "uVar14 = uVar14 - 1, uVar14 == 0" (assignment_expression "uVar14 = uVar14 - 1" identifier = (binary_expression "uVar14 - 1" identifier - number_literal)) , (binary_expression "uVar14 == 0" identifier == number_literal)) ))) )) (compound_statement "{\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }" { (expression_statement "iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);" (assignment_expression "iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13)" identifier = (call_expression "first_sc_for(*(undefined4 *)puVar15,*puVar13)" identifier (argument_list "(*(undefined4 *)puVar15,*puVar13)" ( (pointer_expression "*(undefined4 *)puVar15" * (cast_expression "(undefined4 *)puVar15" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) , (pointer_expression "*puVar13" * identifier) )))) ;) (expression_statement "cVar1 = *(char *)(iVar5 + 4);" (assignment_expression "cVar1 = *(char *)(iVar5 + 4)" identifier = (pointer_expression "*(char *)(iVar5 + 4)" * (cast_expression "(char *)(iVar5 + 4)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 4)" ( (binary_expression "iVar5 + 4" identifier + number_literal) ))))) ;) (expression_statement "put_back(*(undefined4 *)(iVar5 + 8));" (call_expression "put_back(*(undefined4 *)(iVar5 + 8))" identifier (argument_list "(*(undefined4 *)(iVar5 + 8))" ( (pointer_expression "*(undefined4 *)(iVar5 + 8)" * (cast_expression "(undefined4 *)(iVar5 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 8)" ( (binary_expression "iVar5 + 8" identifier + number_literal) )))) ))) ;) (if_statement "if (cVar1 == '\0') goto LAB_00044898;" if (parenthesized_expression "(cVar1 == '\0')" ( (binary_expression "cVar1 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (goto_statement "goto LAB_00044898;" goto statement_identifier ;)) (expression_statement "put_back(0x1b);" (call_expression "put_back(0x1b)" identifier (argument_list "(0x1b)" ( number_literal ))) ;) (expression_statement "iVar5 = 1;" (assignment_expression "iVar5 = 1" identifier = number_literal) ;) (break_statement "break;" break ;) })) })) (goto_statement "goto LAB_000447ec;" goto statement_identifier ;) })) })) (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) }))) (labeled_statement "LAB_000447ec:\n  if (local_24 == *(int **)puVar4) {\n    return iVar5;\n  }" statement_identifier : (if_statement "if (local_24 == *(int **)puVar4) {\n    return iVar5;\n  }" if (parenthesized_expression "(local_24 == *(int **)puVar4)" ( (binary_expression "local_24 == *(int **)puVar4" identifier == (pointer_expression "*(int **)puVar4" * (cast_expression "(int **)puVar4" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) )) (compound_statement "{\n    return iVar5;\n  }" { (return_statement "return iVar5;" return identifier ;) }))) (expression_statement "puVar15 = PTR___stack_chk_fail_000780c0;" (assignment_expression "puVar15 = PTR___stack_chk_fail_000780c0" identifier = identifier) ;) (expression_statement "(*(code *)PTR___stack_chk_fail_000780c0)();" (call_expression "(*(code *)PTR___stack_chk_fail_000780c0)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_000780c0)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_000780c0" * (cast_expression "(code *)PTR___stack_chk_fail_000780c0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (expression_statement "piVar9 = *(int **)(puVar15 + 0x33058);" (assignment_expression "piVar9 = *(int **)(puVar15 + 0x33058)" identifier = (pointer_expression "*(int **)(puVar15 + 0x33058)" * (cast_expression "(int **)(puVar15 + 0x33058)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar15 + 0x33058)" ( (binary_expression "puVar15 + 0x33058" identifier + number_literal) ))))) ;) (if_statement "if (**(char **)(puVar15 + 0x32c28) == '\0') {\n    if (*local_24 - 0x20U < 0x5f) {\n      return 0;\n    }\n    if (*local_24 - 0xa0U < 0x60) {\n      return 0;\n    }\n    piVar9 = *(int **)(puVar15 + 0x33058);\n  }" if (parenthesized_expression "(**(char **)(puVar15 + 0x32c28) == '\0')" ( (binary_expression "**(char **)(puVar15 + 0x32c28) == '\0'" (pointer_expression "**(char **)(puVar15 + 0x32c28)" * (pointer_expression "*(char **)(puVar15 + 0x32c28)" * (cast_expression "(char **)(puVar15 + 0x32c28)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar15 + 0x32c28)" ( (binary_expression "puVar15 + 0x32c28" identifier + number_literal) ))))) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    if (*local_24 - 0x20U < 0x5f) {\n      return 0;\n    }\n    if (*local_24 - 0xa0U < 0x60) {\n      return 0;\n    }\n    piVar9 = *(int **)(puVar15 + 0x33058);\n  }" { (if_statement "if (*local_24 - 0x20U < 0x5f) {\n      return 0;\n    }" if (parenthesized_expression "(*local_24 - 0x20U < 0x5f)" ( (binary_expression "*local_24 - 0x20U < 0x5f" (binary_expression "*local_24 - 0x20U" (pointer_expression "*local_24" * identifier) - number_literal) < number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (*local_24 - 0xa0U < 0x60) {\n      return 0;\n    }" if (parenthesized_expression "(*local_24 - 0xa0U < 0x60)" ( (binary_expression "*local_24 - 0xa0U < 0x60" (binary_expression "*local_24 - 0xa0U" (pointer_expression "*local_24" * identifier) - number_literal) < number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "piVar9 = *(int **)(puVar15 + 0x33058);" (assignment_expression "piVar9 = *(int **)(puVar15 + 0x33058)" identifier = (pointer_expression "*(int **)(puVar15 + 0x33058)" * (cast_expression "(int **)(puVar15 + 0x33058)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar15 + 0x33058)" ( (binary_expression "puVar15 + 0x33058" identifier + number_literal) ))))) ;) })) (expression_statement "iVar5 = *piVar9;" (assignment_expression "iVar5 = *piVar9" identifier = (pointer_expression "*piVar9" * identifier)) ;) (if_statement "if (iVar5 != 0) {\n    while ((((**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0 ||\n            (*local_24 != *(int *)(iVar5 + 8))) ||\n           (*(char *)(iVar5 + 4) != **(char **)(puVar15 + 0x32c28)))) {\n      iVar5 = *(int *)(iVar5 + 0x20);\n      if (iVar5 == 0) {\n        return 0;\n      }\n    }\n  }" if (parenthesized_expression "(iVar5 != 0)" ( (binary_expression "iVar5 != 0" identifier != number_literal) )) (compound_statement "{\n    while ((((**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0 ||\n            (*local_24 != *(int *)(iVar5 + 8))) ||\n           (*(char *)(iVar5 + 4) != **(char **)(puVar15 + 0x32c28)))) {\n      iVar5 = *(int *)(iVar5 + 0x20);\n      if (iVar5 == 0) {\n        return 0;\n      }\n    }\n  }" { (while_statement "while ((((**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0 ||\n            (*local_24 != *(int *)(iVar5 + 8))) ||\n           (*(char *)(iVar5 + 4) != **(char **)(puVar15 + 0x32c28)))) {\n      iVar5 = *(int *)(iVar5 + 0x20);\n      if (iVar5 == 0) {\n        return 0;\n      }\n    }" while (parenthesized_expression "((((**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0 ||\n            (*local_24 != *(int *)(iVar5 + 8))) ||\n           (*(char *)(iVar5 + 4) != **(char **)(puVar15 + 0x32c28))))" ( (parenthesized_expression "(((**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0 ||\n            (*local_24 != *(int *)(iVar5 + 8))) ||\n           (*(char *)(iVar5 + 4) != **(char **)(puVar15 + 0x32c28)))" ( (binary_expression "((**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0 ||\n            (*local_24 != *(int *)(iVar5 + 8))) ||\n           (*(char *)(iVar5 + 4) != **(char **)(puVar15 + 0x32c28))" (parenthesized_expression "((**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0 ||\n            (*local_24 != *(int *)(iVar5 + 8)))" ( (binary_expression "(**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0 ||\n            (*local_24 != *(int *)(iVar5 + 8))" (binary_expression "(**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0" (parenthesized_expression "(**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc))" ( (binary_expression "**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)" (pointer_expression "**(uint **)(puVar15 + 0x32e28)" * (pointer_expression "*(uint **)(puVar15 + 0x32e28)" * (cast_expression "(uint **)(puVar15 + 0x32e28)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar15 + 0x32e28)" ( (binary_expression "puVar15 + 0x32e28" identifier + number_literal) ))))) & (pointer_expression "*(uint *)(iVar5 + 0xc)" * (cast_expression "(uint *)(iVar5 + 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 0xc)" ( (binary_expression "iVar5 + 0xc" identifier + number_literal) ))))) )) == number_literal) || (parenthesized_expression "(*local_24 != *(int *)(iVar5 + 8))" ( (binary_expression "*local_24 != *(int *)(iVar5 + 8)" (pointer_expression "*local_24" * identifier) != (pointer_expression "*(int *)(iVar5 + 8)" * (cast_expression "(int *)(iVar5 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 8)" ( (binary_expression "iVar5 + 8" identifier + number_literal) ))))) ))) )) || (parenthesized_expression "(*(char *)(iVar5 + 4) != **(char **)(puVar15 + 0x32c28))" ( (binary_expression "*(char *)(iVar5 + 4) != **(char **)(puVar15 + 0x32c28)" (pointer_expression "*(char *)(iVar5 + 4)" * (cast_expression "(char *)(iVar5 + 4)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 4)" ( (binary_expression "iVar5 + 4" identifier + number_literal) )))) != (pointer_expression "**(char **)(puVar15 + 0x32c28)" * (pointer_expression "*(char **)(puVar15 + 0x32c28)" * (cast_expression "(char **)(puVar15 + 0x32c28)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar15 + 0x32c28)" ( (binary_expression "puVar15 + 0x32c28" identifier + number_literal) )))))) ))) )) )) (compound_statement "{\n      iVar5 = *(int *)(iVar5 + 0x20);\n      if (iVar5 == 0) {\n        return 0;\n      }\n    }" { (expression_statement "iVar5 = *(int *)(iVar5 + 0x20);" (assignment_expression "iVar5 = *(int *)(iVar5 + 0x20)" identifier = (pointer_expression "*(int *)(iVar5 + 0x20)" * (cast_expression "(int *)(iVar5 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 0x20)" ( (binary_expression "iVar5 + 0x20" identifier + number_literal) ))))) ;) (if_statement "if (iVar5 == 0) {\n        return 0;\n      }" if (parenthesized_expression "(iVar5 == 0)" ( (binary_expression "iVar5 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) })) })) (return_statement "return iVar5;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression IDENT - (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , IDENT , (pointer_expression * IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) , (pointer_expression * IDENT) , (pointer_expression * IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) }) (else_clause else (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) , IDENT , IDENT , LIT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) && (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != LIT) ))) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) (goto_statement goto statement_identifier ;) })) }))) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) & LIT) )) != LIT) )) (goto_statement goto statement_identifier ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) , IDENT , IDENT , LIT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression IDENT - (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))) / LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT * LIT) ))) <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) / IDENT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT >> LIT) )) + (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT / IDENT)) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) / (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) * LIT) + (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) % (cast_expression ( (type_descriptor TYPE) ) IDENT)) <= (binary_expression (pointer_expression * IDENT) % (cast_expression ( (type_descriptor TYPE) ) IDENT))) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (goto_statement goto statement_identifier ;)) })) (for_statement for ( (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) IDENT))) ; (comma_expression (assignment_expression IDENT = LIT) , (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT))) ; (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & (subscript_expression IDENT [ LIT ])) )) != LIT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (pointer_expression * IDENT) )))) , (binary_expression IDENT != LIT)) ))) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression IDENT - LIT)) , (binary_expression IDENT == LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) , (pointer_expression * IDENT) )))) ;) (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 ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (goto_statement goto statement_identifier ;)) (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (break_statement break ;) })) })) (goto_statement goto statement_identifier ;) })) })) (expression_statement (assignment_expression IDENT = LIT) ;) }))) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) IDENT))) )) (compound_statement { (return_statement return IDENT ;) }))) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) == (char_literal ' escape_sequence ')) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * IDENT) - LIT) < LIT) )) (compound_statement { (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * IDENT) - LIT) < LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (while_statement while (parenthesized_expression ( (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) & (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) == LIT) || (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ))) )) || (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (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) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) })) })) (return_statement return IDENT ;) })))
(function_definition "int get_mouseinput(int *param_1,int *param_2,int param_3)\n\n{\n  char cVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined *puVar4;\n  int iVar5;\n  int iVar6;\n  int iVar7;\n  uint uVar8;\n  int *piVar9;\n  uint uVar10;\n  undefined4 uVar11;\n  uint uVar12;\n  undefined4 *puVar13;\n  uint uVar14;\n  undefined *puVar15;\n  undefined1 auStack_38 [4];\n  int local_34;\n  int local_30;\n  uint local_28;\n  int *local_24;\n  \n  puVar4 = PTR___stack_chk_guard_000780f8;\n  local_24 = *(int **)PTR___stack_chk_guard_000780f8;\n  iVar5 = (*(code *)PTR_getmouse_00078154)(auStack_38);\n  puVar3 = PTR_wenclose_00077ea4;\n  puVar2 = PTR_margin_00077690;\n  puVar15 = PTR_bottomwin_000775cc;\n  if (iVar5 == -1) goto LAB_000447ec;\n  uVar11 = *(undefined4 *)PTR_bottomwin_000775cc;\n  *param_2 = local_34 - *(int *)PTR_margin_00077690;\n  *param_1 = local_30;\n  iVar6 = (*(code *)puVar3)(uVar11,local_30,*param_2);\n  if ((local_28 & 5) == 0) {\n    iVar5 = 2;\n    if ((local_28 & 0x210000) == 0) goto LAB_000447ec;\n    iVar7 = (*(code *)PTR_wenclose_00077ea4)(*(undefined4 *)PTR_edit_000775d8,*param_1,*param_2);\n    if (iVar6 == 0) {\n      iVar5 = 2;\n      if (iVar7 == 0) goto LAB_000447ec;\n    }\n    else {\n      (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n      if ((iVar7 == 0) && (*param_1 != 0)) {\nLAB_000448cc:\n        iVar5 = 2;\n        goto LAB_000447ec;\n      }\n    }\n    iVar5 = 3;\n    do {\n      uVar11 = 0x102;\n      iVar5 = iVar5 + -1;\n      if ((local_28 & 0x10000) != 0) {\n        uVar11 = 0x103;\n      }\n      put_back(uVar11);\n    } while (iVar5 != 0);\nLAB_00044898:\n    iVar5 = 1;\n  }\n  else {\n    if (param_3 != 0) {\n      iVar5 = 0;\n      if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;\n      if (iVar6 != 0) {\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n        puVar15 = PTR_currmenu_000778a4;\n        if (*param_1 == 0) {\n          *param_2 = local_34 - *(int *)puVar2;\n          *param_1 = local_30;\n          iVar5 = 0;\n          goto LAB_000447ec;\n        }\n        uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4);\n        uVar12 = *(uint *)PTR_COLS_00077fb4;\n        iVar5 = (int)(uVar12 + 0x28) / 0x14;\n        if ((uint)(iVar5 * 2) <= uVar8) {\n          uVar8 = iVar5 * 2;\n        }\n        if (uVar8 < 2) {\n          if (iVar5 == 0) {\n            trap(7);\n          }\n          uVar10 = (int)uVar12 / iVar5;\n        }\n        else {\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }\n        if (uVar10 == 0) {\n          trap(7);\n        }\n        uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1;\n        if (uVar8 < uVar14) {\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;\n          uVar14 = uVar14 - 2;\n          iVar5 = 2;\n          if (uVar8 < uVar14) goto LAB_000447ec;\n        }\n        for (puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar5 = 1,\n            puVar13 != (undefined4 *)0x0; puVar13 = (undefined4 *)puVar13[6]) {\n          uVar8 = *(uint *)puVar15;\n          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }\n    }\n    iVar5 = 0;\n  }\nLAB_000447ec:\n  if (local_24 == *(int **)puVar4) {\n    return iVar5;\n  }\n  puVar15 = PTR___stack_chk_fail_000780c0;\n  (*(code *)PTR___stack_chk_fail_000780c0)();\n  piVar9 = *(int **)(puVar15 + 0x33058);\n  if (**(char **)(puVar15 + 0x32c28) == '\0') {\n    if (*local_24 - 0x20U < 0x5f) {\n      return 0;\n    }\n    if (*local_24 - 0xa0U < 0x60) {\n      return 0;\n    }\n    piVar9 = *(int **)(puVar15 + 0x33058);\n  }\n  iVar5 = *piVar9;\n  if (iVar5 != 0) {\n    while ((((**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0 ||\n            (*local_24 != *(int *)(iVar5 + 8))) ||\n           (*(char *)(iVar5 + 4) != **(char **)(puVar15 + 0x32c28)))) {\n      iVar5 = *(int *)(iVar5 + 0x20);\n      if (iVar5 == 0) {\n        return 0;\n      }\n    }\n  }\n  return iVar5;\n}" (primitive_type "int") (function_declarator "get_mouseinput(int *param_1,int *param_2,int param_3)" (identifier "get_mouseinput") (parameter_list "(int *param_1,int *param_2,int param_3)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int *param_2" (primitive_type "int") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) () ")"))) (compound_statement "{\n  char cVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined *puVar4;\n  int iVar5;\n  int iVar6;\n  int iVar7;\n  uint uVar8;\n  int *piVar9;\n  uint uVar10;\n  undefined4 uVar11;\n  uint uVar12;\n  undefined4 *puVar13;\n  uint uVar14;\n  undefined *puVar15;\n  undefined1 auStack_38 [4];\n  int local_34;\n  int local_30;\n  uint local_28;\n  int *local_24;\n  \n  puVar4 = PTR___stack_chk_guard_000780f8;\n  local_24 = *(int **)PTR___stack_chk_guard_000780f8;\n  iVar5 = (*(code *)PTR_getmouse_00078154)(auStack_38);\n  puVar3 = PTR_wenclose_00077ea4;\n  puVar2 = PTR_margin_00077690;\n  puVar15 = PTR_bottomwin_000775cc;\n  if (iVar5 == -1) goto LAB_000447ec;\n  uVar11 = *(undefined4 *)PTR_bottomwin_000775cc;\n  *param_2 = local_34 - *(int *)PTR_margin_00077690;\n  *param_1 = local_30;\n  iVar6 = (*(code *)puVar3)(uVar11,local_30,*param_2);\n  if ((local_28 & 5) == 0) {\n    iVar5 = 2;\n    if ((local_28 & 0x210000) == 0) goto LAB_000447ec;\n    iVar7 = (*(code *)PTR_wenclose_00077ea4)(*(undefined4 *)PTR_edit_000775d8,*param_1,*param_2);\n    if (iVar6 == 0) {\n      iVar5 = 2;\n      if (iVar7 == 0) goto LAB_000447ec;\n    }\n    else {\n      (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n      if ((iVar7 == 0) && (*param_1 != 0)) {\nLAB_000448cc:\n        iVar5 = 2;\n        goto LAB_000447ec;\n      }\n    }\n    iVar5 = 3;\n    do {\n      uVar11 = 0x102;\n      iVar5 = iVar5 + -1;\n      if ((local_28 & 0x10000) != 0) {\n        uVar11 = 0x103;\n      }\n      put_back(uVar11);\n    } while (iVar5 != 0);\nLAB_00044898:\n    iVar5 = 1;\n  }\n  else {\n    if (param_3 != 0) {\n      iVar5 = 0;\n      if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;\n      if (iVar6 != 0) {\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n        puVar15 = PTR_currmenu_000778a4;\n        if (*param_1 == 0) {\n          *param_2 = local_34 - *(int *)puVar2;\n          *param_1 = local_30;\n          iVar5 = 0;\n          goto LAB_000447ec;\n        }\n        uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4);\n        uVar12 = *(uint *)PTR_COLS_00077fb4;\n        iVar5 = (int)(uVar12 + 0x28) / 0x14;\n        if ((uint)(iVar5 * 2) <= uVar8) {\n          uVar8 = iVar5 * 2;\n        }\n        if (uVar8 < 2) {\n          if (iVar5 == 0) {\n            trap(7);\n          }\n          uVar10 = (int)uVar12 / iVar5;\n        }\n        else {\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }\n        if (uVar10 == 0) {\n          trap(7);\n        }\n        uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1;\n        if (uVar8 < uVar14) {\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;\n          uVar14 = uVar14 - 2;\n          iVar5 = 2;\n          if (uVar8 < uVar14) goto LAB_000447ec;\n        }\n        for (puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar5 = 1,\n            puVar13 != (undefined4 *)0x0; puVar13 = (undefined4 *)puVar13[6]) {\n          uVar8 = *(uint *)puVar15;\n          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }\n    }\n    iVar5 = 0;\n  }\nLAB_000447ec:\n  if (local_24 == *(int **)puVar4) {\n    return iVar5;\n  }\n  puVar15 = PTR___stack_chk_fail_000780c0;\n  (*(code *)PTR___stack_chk_fail_000780c0)();\n  piVar9 = *(int **)(puVar15 + 0x33058);\n  if (**(char **)(puVar15 + 0x32c28) == '\0') {\n    if (*local_24 - 0x20U < 0x5f) {\n      return 0;\n    }\n    if (*local_24 - 0xa0U < 0x60) {\n      return 0;\n    }\n    piVar9 = *(int **)(puVar15 + 0x33058);\n  }\n  iVar5 = *piVar9;\n  if (iVar5 != 0) {\n    while ((((**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0 ||\n            (*local_24 != *(int *)(iVar5 + 8))) ||\n           (*(char *)(iVar5 + 4) != **(char **)(puVar15 + 0x32c28)))) {\n      iVar5 = *(int *)(iVar5 + 0x20);\n      if (iVar5 == 0) {\n        return 0;\n      }\n    }\n  }\n  return iVar5;\n}" ({ "{") (declaration "char cVar1;" (primitive_type "char") (identifier "cVar1") (; ";")) (declaration "undefined *puVar2;" (type_identifier "undefined") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "undefined *puVar3;" (type_identifier "undefined") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "undefined *puVar4;" (type_identifier "undefined") (pointer_declarator "*puVar4" (* "*") (identifier "puVar4")) (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (declaration "uint uVar8;" (type_identifier "uint") (identifier "uVar8") (; ";")) (declaration "int *piVar9;" (primitive_type "int") (pointer_declarator "*piVar9" (* "*") (identifier "piVar9")) (; ";")) (declaration "uint uVar10;" (type_identifier "uint") (identifier "uVar10") (; ";")) (declaration "undefined4 uVar11;" (type_identifier "undefined4") (identifier "uVar11") (; ";")) (declaration "uint uVar12;" (type_identifier "uint") (identifier "uVar12") (; ";")) (declaration "undefined4 *puVar13;" (type_identifier "undefined4") (pointer_declarator "*puVar13" (* "*") (identifier "puVar13")) (; ";")) (declaration "uint uVar14;" (type_identifier "uint") (identifier "uVar14") (; ";")) (declaration "undefined *puVar15;" (type_identifier "undefined") (pointer_declarator "*puVar15" (* "*") (identifier "puVar15")) (; ";")) (declaration "undefined1 auStack_38 [4];" (type_identifier "undefined1") (array_declarator "auStack_38 [4]" (identifier "auStack_38") ([ "[") (number_literal "4") (] "]")) (; ";")) (declaration "int local_34;" (primitive_type "int") (identifier "local_34") (; ";")) (declaration "int local_30;" (primitive_type "int") (identifier "local_30") (; ";")) (declaration "uint local_28;" (type_identifier "uint") (identifier "local_28") (; ";")) (declaration "int *local_24;" (primitive_type "int") (pointer_declarator "*local_24" (* "*") (identifier "local_24")) (; ";")) (expression_statement "puVar4 = PTR___stack_chk_guard_000780f8;" (assignment_expression "puVar4 = PTR___stack_chk_guard_000780f8" (identifier "puVar4") (= "=") (identifier "PTR___stack_chk_guard_000780f8")) (; ";")) (expression_statement "local_24 = *(int **)PTR___stack_chk_guard_000780f8;" (assignment_expression "local_24 = *(int **)PTR___stack_chk_guard_000780f8" (identifier "local_24") (= "=") (pointer_expression "*(int **)PTR___stack_chk_guard_000780f8" (* "*") (cast_expression "(int **)PTR___stack_chk_guard_000780f8" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (identifier "PTR___stack_chk_guard_000780f8")))) (; ";")) (expression_statement "iVar5 = (*(code *)PTR_getmouse_00078154)(auStack_38);" (assignment_expression "iVar5 = (*(code *)PTR_getmouse_00078154)(auStack_38)" (identifier "iVar5") (= "=") (call_expression "(*(code *)PTR_getmouse_00078154)(auStack_38)" (parenthesized_expression "(*(code *)PTR_getmouse_00078154)" (( "(") (pointer_expression "*(code *)PTR_getmouse_00078154" (* "*") (cast_expression "(code *)PTR_getmouse_00078154" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_getmouse_00078154"))) () ")")) (argument_list "(auStack_38)" (( "(") (identifier "auStack_38") () ")")))) (; ";")) (expression_statement "puVar3 = PTR_wenclose_00077ea4;" (assignment_expression "puVar3 = PTR_wenclose_00077ea4" (identifier "puVar3") (= "=") (identifier "PTR_wenclose_00077ea4")) (; ";")) (expression_statement "puVar2 = PTR_margin_00077690;" (assignment_expression "puVar2 = PTR_margin_00077690" (identifier "puVar2") (= "=") (identifier "PTR_margin_00077690")) (; ";")) (expression_statement "puVar15 = PTR_bottomwin_000775cc;" (assignment_expression "puVar15 = PTR_bottomwin_000775cc" (identifier "puVar15") (= "=") (identifier "PTR_bottomwin_000775cc")) (; ";")) (if_statement "if (iVar5 == -1) goto LAB_000447ec;" (if "if") (parenthesized_expression "(iVar5 == -1)" (( "(") (binary_expression "iVar5 == -1" (identifier "iVar5") (== "==") (number_literal "-1")) () ")")) (goto_statement "goto LAB_000447ec;" (goto "goto") (statement_identifier "LAB_000447ec") (; ";"))) (expression_statement "uVar11 = *(undefined4 *)PTR_bottomwin_000775cc;" (assignment_expression "uVar11 = *(undefined4 *)PTR_bottomwin_000775cc" (identifier "uVar11") (= "=") (pointer_expression "*(undefined4 *)PTR_bottomwin_000775cc" (* "*") (cast_expression "(undefined4 *)PTR_bottomwin_000775cc" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_bottomwin_000775cc")))) (; ";")) (expression_statement "*param_2 = local_34 - *(int *)PTR_margin_00077690;" (assignment_expression "*param_2 = local_34 - *(int *)PTR_margin_00077690" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (binary_expression "local_34 - *(int *)PTR_margin_00077690" (identifier "local_34") (- "-") (pointer_expression "*(int *)PTR_margin_00077690" (* "*") (cast_expression "(int *)PTR_margin_00077690" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_margin_00077690"))))) (; ";")) (expression_statement "*param_1 = local_30;" (assignment_expression "*param_1 = local_30" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (identifier "local_30")) (; ";")) (expression_statement "iVar6 = (*(code *)puVar3)(uVar11,local_30,*param_2);" (assignment_expression "iVar6 = (*(code *)puVar3)(uVar11,local_30,*param_2)" (identifier "iVar6") (= "=") (call_expression "(*(code *)puVar3)(uVar11,local_30,*param_2)" (parenthesized_expression "(*(code *)puVar3)" (( "(") (pointer_expression "*(code *)puVar3" (* "*") (cast_expression "(code *)puVar3" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar3"))) () ")")) (argument_list "(uVar11,local_30,*param_2)" (( "(") (identifier "uVar11") (, ",") (identifier "local_30") (, ",") (pointer_expression "*param_2" (* "*") (identifier "param_2")) () ")")))) (; ";")) (if_statement "if ((local_28 & 5) == 0) {\n    iVar5 = 2;\n    if ((local_28 & 0x210000) == 0) goto LAB_000447ec;\n    iVar7 = (*(code *)PTR_wenclose_00077ea4)(*(undefined4 *)PTR_edit_000775d8,*param_1,*param_2);\n    if (iVar6 == 0) {\n      iVar5 = 2;\n      if (iVar7 == 0) goto LAB_000447ec;\n    }\n    else {\n      (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n      if ((iVar7 == 0) && (*param_1 != 0)) {\nLAB_000448cc:\n        iVar5 = 2;\n        goto LAB_000447ec;\n      }\n    }\n    iVar5 = 3;\n    do {\n      uVar11 = 0x102;\n      iVar5 = iVar5 + -1;\n      if ((local_28 & 0x10000) != 0) {\n        uVar11 = 0x103;\n      }\n      put_back(uVar11);\n    } while (iVar5 != 0);\nLAB_00044898:\n    iVar5 = 1;\n  }\n  else {\n    if (param_3 != 0) {\n      iVar5 = 0;\n      if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;\n      if (iVar6 != 0) {\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n        puVar15 = PTR_currmenu_000778a4;\n        if (*param_1 == 0) {\n          *param_2 = local_34 - *(int *)puVar2;\n          *param_1 = local_30;\n          iVar5 = 0;\n          goto LAB_000447ec;\n        }\n        uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4);\n        uVar12 = *(uint *)PTR_COLS_00077fb4;\n        iVar5 = (int)(uVar12 + 0x28) / 0x14;\n        if ((uint)(iVar5 * 2) <= uVar8) {\n          uVar8 = iVar5 * 2;\n        }\n        if (uVar8 < 2) {\n          if (iVar5 == 0) {\n            trap(7);\n          }\n          uVar10 = (int)uVar12 / iVar5;\n        }\n        else {\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }\n        if (uVar10 == 0) {\n          trap(7);\n        }\n        uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1;\n        if (uVar8 < uVar14) {\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;\n          uVar14 = uVar14 - 2;\n          iVar5 = 2;\n          if (uVar8 < uVar14) goto LAB_000447ec;\n        }\n        for (puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar5 = 1,\n            puVar13 != (undefined4 *)0x0; puVar13 = (undefined4 *)puVar13[6]) {\n          uVar8 = *(uint *)puVar15;\n          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }\n    }\n    iVar5 = 0;\n  }" (if "if") (parenthesized_expression "((local_28 & 5) == 0)" (( "(") (binary_expression "(local_28 & 5) == 0" (parenthesized_expression "(local_28 & 5)" (( "(") (binary_expression "local_28 & 5" (identifier "local_28") (& "&") (number_literal "5")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    iVar5 = 2;\n    if ((local_28 & 0x210000) == 0) goto LAB_000447ec;\n    iVar7 = (*(code *)PTR_wenclose_00077ea4)(*(undefined4 *)PTR_edit_000775d8,*param_1,*param_2);\n    if (iVar6 == 0) {\n      iVar5 = 2;\n      if (iVar7 == 0) goto LAB_000447ec;\n    }\n    else {\n      (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n      if ((iVar7 == 0) && (*param_1 != 0)) {\nLAB_000448cc:\n        iVar5 = 2;\n        goto LAB_000447ec;\n      }\n    }\n    iVar5 = 3;\n    do {\n      uVar11 = 0x102;\n      iVar5 = iVar5 + -1;\n      if ((local_28 & 0x10000) != 0) {\n        uVar11 = 0x103;\n      }\n      put_back(uVar11);\n    } while (iVar5 != 0);\nLAB_00044898:\n    iVar5 = 1;\n  }" ({ "{") (expression_statement "iVar5 = 2;" (assignment_expression "iVar5 = 2" (identifier "iVar5") (= "=") (number_literal "2")) (; ";")) (if_statement "if ((local_28 & 0x210000) == 0) goto LAB_000447ec;" (if "if") (parenthesized_expression "((local_28 & 0x210000) == 0)" (( "(") (binary_expression "(local_28 & 0x210000) == 0" (parenthesized_expression "(local_28 & 0x210000)" (( "(") (binary_expression "local_28 & 0x210000" (identifier "local_28") (& "&") (number_literal "0x210000")) () ")")) (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_000447ec;" (goto "goto") (statement_identifier "LAB_000447ec") (; ";"))) (expression_statement "iVar7 = (*(code *)PTR_wenclose_00077ea4)(*(undefined4 *)PTR_edit_000775d8,*param_1,*param_2);" (assignment_expression "iVar7 = (*(code *)PTR_wenclose_00077ea4)(*(undefined4 *)PTR_edit_000775d8,*param_1,*param_2)" (identifier "iVar7") (= "=") (call_expression "(*(code *)PTR_wenclose_00077ea4)(*(undefined4 *)PTR_edit_000775d8,*param_1,*param_2)" (parenthesized_expression "(*(code *)PTR_wenclose_00077ea4)" (( "(") (pointer_expression "*(code *)PTR_wenclose_00077ea4" (* "*") (cast_expression "(code *)PTR_wenclose_00077ea4" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_wenclose_00077ea4"))) () ")")) (argument_list "(*(undefined4 *)PTR_edit_000775d8,*param_1,*param_2)" (( "(") (pointer_expression "*(undefined4 *)PTR_edit_000775d8" (* "*") (cast_expression "(undefined4 *)PTR_edit_000775d8" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_edit_000775d8"))) (, ",") (pointer_expression "*param_1" (* "*") (identifier "param_1")) (, ",") (pointer_expression "*param_2" (* "*") (identifier "param_2")) () ")")))) (; ";")) (if_statement "if (iVar6 == 0) {\n      iVar5 = 2;\n      if (iVar7 == 0) goto LAB_000447ec;\n    }\n    else {\n      (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n      if ((iVar7 == 0) && (*param_1 != 0)) {\nLAB_000448cc:\n        iVar5 = 2;\n        goto LAB_000447ec;\n      }\n    }" (if "if") (parenthesized_expression "(iVar6 == 0)" (( "(") (binary_expression "iVar6 == 0" (identifier "iVar6") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      iVar5 = 2;\n      if (iVar7 == 0) goto LAB_000447ec;\n    }" ({ "{") (expression_statement "iVar5 = 2;" (assignment_expression "iVar5 = 2" (identifier "iVar5") (= "=") (number_literal "2")) (; ";")) (if_statement "if (iVar7 == 0) goto LAB_000447ec;" (if "if") (parenthesized_expression "(iVar7 == 0)" (( "(") (binary_expression "iVar7 == 0" (identifier "iVar7") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_000447ec;" (goto "goto") (statement_identifier "LAB_000447ec") (; ";"))) (} "}")) (else_clause "else {\n      (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n      if ((iVar7 == 0) && (*param_1 != 0)) {\nLAB_000448cc:\n        iVar5 = 2;\n        goto LAB_000447ec;\n      }\n    }" (else "else") (compound_statement "{\n      (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n      if ((iVar7 == 0) && (*param_1 != 0)) {\nLAB_000448cc:\n        iVar5 = 2;\n        goto LAB_000447ec;\n      }\n    }" ({ "{") (expression_statement "(*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);" (call_expression "(*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0)" (parenthesized_expression "(*(code *)PTR_wmouse_trafo_00077f04)" (( "(") (pointer_expression "*(code *)PTR_wmouse_trafo_00077f04" (* "*") (cast_expression "(code *)PTR_wmouse_trafo_00077f04" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_wmouse_trafo_00077f04"))) () ")")) (argument_list "(*(undefined4 *)puVar15,param_1,param_2,0)" (( "(") (pointer_expression "*(undefined4 *)puVar15" (* "*") (cast_expression "(undefined4 *)puVar15" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar15"))) (, ",") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (number_literal "0") () ")"))) (; ";")) (if_statement "if ((iVar7 == 0) && (*param_1 != 0)) {\nLAB_000448cc:\n        iVar5 = 2;\n        goto LAB_000447ec;\n      }" (if "if") (parenthesized_expression "((iVar7 == 0) && (*param_1 != 0))" (( "(") (binary_expression "(iVar7 == 0) && (*param_1 != 0)" (parenthesized_expression "(iVar7 == 0)" (( "(") (binary_expression "iVar7 == 0" (identifier "iVar7") (== "==") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(*param_1 != 0)" (( "(") (binary_expression "*param_1 != 0" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\nLAB_000448cc:\n        iVar5 = 2;\n        goto LAB_000447ec;\n      }" ({ "{") (labeled_statement "LAB_000448cc:\n        iVar5 = 2;" (statement_identifier "LAB_000448cc") (: ":") (expression_statement "iVar5 = 2;" (assignment_expression "iVar5 = 2" (identifier "iVar5") (= "=") (number_literal "2")) (; ";"))) (goto_statement "goto LAB_000447ec;" (goto "goto") (statement_identifier "LAB_000447ec") (; ";")) (} "}"))) (} "}")))) (expression_statement "iVar5 = 3;" (assignment_expression "iVar5 = 3" (identifier "iVar5") (= "=") (number_literal "3")) (; ";")) (do_statement "do {\n      uVar11 = 0x102;\n      iVar5 = iVar5 + -1;\n      if ((local_28 & 0x10000) != 0) {\n        uVar11 = 0x103;\n      }\n      put_back(uVar11);\n    } while (iVar5 != 0);" (do "do") (compound_statement "{\n      uVar11 = 0x102;\n      iVar5 = iVar5 + -1;\n      if ((local_28 & 0x10000) != 0) {\n        uVar11 = 0x103;\n      }\n      put_back(uVar11);\n    }" ({ "{") (expression_statement "uVar11 = 0x102;" (assignment_expression "uVar11 = 0x102" (identifier "uVar11") (= "=") (number_literal "0x102")) (; ";")) (expression_statement "iVar5 = iVar5 + -1;" (assignment_expression "iVar5 = iVar5 + -1" (identifier "iVar5") (= "=") (binary_expression "iVar5 + -1" (identifier "iVar5") (+ "+") (number_literal "-1"))) (; ";")) (if_statement "if ((local_28 & 0x10000) != 0) {\n        uVar11 = 0x103;\n      }" (if "if") (parenthesized_expression "((local_28 & 0x10000) != 0)" (( "(") (binary_expression "(local_28 & 0x10000) != 0" (parenthesized_expression "(local_28 & 0x10000)" (( "(") (binary_expression "local_28 & 0x10000" (identifier "local_28") (& "&") (number_literal "0x10000")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        uVar11 = 0x103;\n      }" ({ "{") (expression_statement "uVar11 = 0x103;" (assignment_expression "uVar11 = 0x103" (identifier "uVar11") (= "=") (number_literal "0x103")) (; ";")) (} "}"))) (expression_statement "put_back(uVar11);" (call_expression "put_back(uVar11)" (identifier "put_back") (argument_list "(uVar11)" (( "(") (identifier "uVar11") () ")"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar5 != 0)" (( "(") (binary_expression "iVar5 != 0" (identifier "iVar5") (!= "!=") (number_literal "0")) () ")")) (; ";")) (labeled_statement "LAB_00044898:\n    iVar5 = 1;" (statement_identifier "LAB_00044898") (: ":") (expression_statement "iVar5 = 1;" (assignment_expression "iVar5 = 1" (identifier "iVar5") (= "=") (number_literal "1")) (; ";"))) (} "}")) (else_clause "else {\n    if (param_3 != 0) {\n      iVar5 = 0;\n      if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;\n      if (iVar6 != 0) {\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n        puVar15 = PTR_currmenu_000778a4;\n        if (*param_1 == 0) {\n          *param_2 = local_34 - *(int *)puVar2;\n          *param_1 = local_30;\n          iVar5 = 0;\n          goto LAB_000447ec;\n        }\n        uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4);\n        uVar12 = *(uint *)PTR_COLS_00077fb4;\n        iVar5 = (int)(uVar12 + 0x28) / 0x14;\n        if ((uint)(iVar5 * 2) <= uVar8) {\n          uVar8 = iVar5 * 2;\n        }\n        if (uVar8 < 2) {\n          if (iVar5 == 0) {\n            trap(7);\n          }\n          uVar10 = (int)uVar12 / iVar5;\n        }\n        else {\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }\n        if (uVar10 == 0) {\n          trap(7);\n        }\n        uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1;\n        if (uVar8 < uVar14) {\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;\n          uVar14 = uVar14 - 2;\n          iVar5 = 2;\n          if (uVar8 < uVar14) goto LAB_000447ec;\n        }\n        for (puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar5 = 1,\n            puVar13 != (undefined4 *)0x0; puVar13 = (undefined4 *)puVar13[6]) {\n          uVar8 = *(uint *)puVar15;\n          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }\n    }\n    iVar5 = 0;\n  }" (else "else") (compound_statement "{\n    if (param_3 != 0) {\n      iVar5 = 0;\n      if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;\n      if (iVar6 != 0) {\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n        puVar15 = PTR_currmenu_000778a4;\n        if (*param_1 == 0) {\n          *param_2 = local_34 - *(int *)puVar2;\n          *param_1 = local_30;\n          iVar5 = 0;\n          goto LAB_000447ec;\n        }\n        uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4);\n        uVar12 = *(uint *)PTR_COLS_00077fb4;\n        iVar5 = (int)(uVar12 + 0x28) / 0x14;\n        if ((uint)(iVar5 * 2) <= uVar8) {\n          uVar8 = iVar5 * 2;\n        }\n        if (uVar8 < 2) {\n          if (iVar5 == 0) {\n            trap(7);\n          }\n          uVar10 = (int)uVar12 / iVar5;\n        }\n        else {\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }\n        if (uVar10 == 0) {\n          trap(7);\n        }\n        uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1;\n        if (uVar8 < uVar14) {\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;\n          uVar14 = uVar14 - 2;\n          iVar5 = 2;\n          if (uVar8 < uVar14) goto LAB_000447ec;\n        }\n        for (puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar5 = 1,\n            puVar13 != (undefined4 *)0x0; puVar13 = (undefined4 *)puVar13[6]) {\n          uVar8 = *(uint *)puVar15;\n          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }\n    }\n    iVar5 = 0;\n  }" ({ "{") (if_statement "if (param_3 != 0) {\n      iVar5 = 0;\n      if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;\n      if (iVar6 != 0) {\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n        puVar15 = PTR_currmenu_000778a4;\n        if (*param_1 == 0) {\n          *param_2 = local_34 - *(int *)puVar2;\n          *param_1 = local_30;\n          iVar5 = 0;\n          goto LAB_000447ec;\n        }\n        uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4);\n        uVar12 = *(uint *)PTR_COLS_00077fb4;\n        iVar5 = (int)(uVar12 + 0x28) / 0x14;\n        if ((uint)(iVar5 * 2) <= uVar8) {\n          uVar8 = iVar5 * 2;\n        }\n        if (uVar8 < 2) {\n          if (iVar5 == 0) {\n            trap(7);\n          }\n          uVar10 = (int)uVar12 / iVar5;\n        }\n        else {\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }\n        if (uVar10 == 0) {\n          trap(7);\n        }\n        uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1;\n        if (uVar8 < uVar14) {\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;\n          uVar14 = uVar14 - 2;\n          iVar5 = 2;\n          if (uVar8 < uVar14) goto LAB_000447ec;\n        }\n        for (puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar5 = 1,\n            puVar13 != (undefined4 *)0x0; puVar13 = (undefined4 *)puVar13[6]) {\n          uVar8 = *(uint *)puVar15;\n          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }\n    }" (if "if") (parenthesized_expression "(param_3 != 0)" (( "(") (binary_expression "param_3 != 0" (identifier "param_3") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      iVar5 = 0;\n      if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;\n      if (iVar6 != 0) {\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n        puVar15 = PTR_currmenu_000778a4;\n        if (*param_1 == 0) {\n          *param_2 = local_34 - *(int *)puVar2;\n          *param_1 = local_30;\n          iVar5 = 0;\n          goto LAB_000447ec;\n        }\n        uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4);\n        uVar12 = *(uint *)PTR_COLS_00077fb4;\n        iVar5 = (int)(uVar12 + 0x28) / 0x14;\n        if ((uint)(iVar5 * 2) <= uVar8) {\n          uVar8 = iVar5 * 2;\n        }\n        if (uVar8 < 2) {\n          if (iVar5 == 0) {\n            trap(7);\n          }\n          uVar10 = (int)uVar12 / iVar5;\n        }\n        else {\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }\n        if (uVar10 == 0) {\n          trap(7);\n        }\n        uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1;\n        if (uVar8 < uVar14) {\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;\n          uVar14 = uVar14 - 2;\n          iVar5 = 2;\n          if (uVar8 < uVar14) goto LAB_000447ec;\n        }\n        for (puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar5 = 1,\n            puVar13 != (undefined4 *)0x0; puVar13 = (undefined4 *)puVar13[6]) {\n          uVar8 = *(uint *)puVar15;\n          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }\n    }" ({ "{") (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" (identifier "iVar5") (= "=") (number_literal "0")) (; ";")) (if_statement "if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;" (if "if") (parenthesized_expression "((*(uint *)PTR_flags_0007759c & 8) != 0)" (( "(") (binary_expression "(*(uint *)PTR_flags_0007759c & 8) != 0" (parenthesized_expression "(*(uint *)PTR_flags_0007759c & 8)" (( "(") (binary_expression "*(uint *)PTR_flags_0007759c & 8" (pointer_expression "*(uint *)PTR_flags_0007759c" (* "*") (cast_expression "(uint *)PTR_flags_0007759c" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_flags_0007759c"))) (& "&") (number_literal "8")) () ")")) (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_000447ec;" (goto "goto") (statement_identifier "LAB_000447ec") (; ";"))) (if_statement "if (iVar6 != 0) {\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n        puVar15 = PTR_currmenu_000778a4;\n        if (*param_1 == 0) {\n          *param_2 = local_34 - *(int *)puVar2;\n          *param_1 = local_30;\n          iVar5 = 0;\n          goto LAB_000447ec;\n        }\n        uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4);\n        uVar12 = *(uint *)PTR_COLS_00077fb4;\n        iVar5 = (int)(uVar12 + 0x28) / 0x14;\n        if ((uint)(iVar5 * 2) <= uVar8) {\n          uVar8 = iVar5 * 2;\n        }\n        if (uVar8 < 2) {\n          if (iVar5 == 0) {\n            trap(7);\n          }\n          uVar10 = (int)uVar12 / iVar5;\n        }\n        else {\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }\n        if (uVar10 == 0) {\n          trap(7);\n        }\n        uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1;\n        if (uVar8 < uVar14) {\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;\n          uVar14 = uVar14 - 2;\n          iVar5 = 2;\n          if (uVar8 < uVar14) goto LAB_000447ec;\n        }\n        for (puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar5 = 1,\n            puVar13 != (undefined4 *)0x0; puVar13 = (undefined4 *)puVar13[6]) {\n          uVar8 = *(uint *)puVar15;\n          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }" (if "if") (parenthesized_expression "(iVar6 != 0)" (( "(") (binary_expression "iVar6 != 0" (identifier "iVar6") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);\n        puVar15 = PTR_currmenu_000778a4;\n        if (*param_1 == 0) {\n          *param_2 = local_34 - *(int *)puVar2;\n          *param_1 = local_30;\n          iVar5 = 0;\n          goto LAB_000447ec;\n        }\n        uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4);\n        uVar12 = *(uint *)PTR_COLS_00077fb4;\n        iVar5 = (int)(uVar12 + 0x28) / 0x14;\n        if ((uint)(iVar5 * 2) <= uVar8) {\n          uVar8 = iVar5 * 2;\n        }\n        if (uVar8 < 2) {\n          if (iVar5 == 0) {\n            trap(7);\n          }\n          uVar10 = (int)uVar12 / iVar5;\n        }\n        else {\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }\n        if (uVar10 == 0) {\n          trap(7);\n        }\n        uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1;\n        if (uVar8 < uVar14) {\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;\n          uVar14 = uVar14 - 2;\n          iVar5 = 2;\n          if (uVar8 < uVar14) goto LAB_000447ec;\n        }\n        for (puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar5 = 1,\n            puVar13 != (undefined4 *)0x0; puVar13 = (undefined4 *)puVar13[6]) {\n          uVar8 = *(uint *)puVar15;\n          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }\n        }\n        goto LAB_000447ec;\n      }" ({ "{") (expression_statement "(*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);" (call_expression "(*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0)" (parenthesized_expression "(*(code *)PTR_wmouse_trafo_00077f04)" (( "(") (pointer_expression "*(code *)PTR_wmouse_trafo_00077f04" (* "*") (cast_expression "(code *)PTR_wmouse_trafo_00077f04" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_wmouse_trafo_00077f04"))) () ")")) (argument_list "(*(undefined4 *)puVar15,param_1,param_2,0)" (( "(") (pointer_expression "*(undefined4 *)puVar15" (* "*") (cast_expression "(undefined4 *)puVar15" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar15"))) (, ",") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "puVar15 = PTR_currmenu_000778a4;" (assignment_expression "puVar15 = PTR_currmenu_000778a4" (identifier "puVar15") (= "=") (identifier "PTR_currmenu_000778a4")) (; ";")) (if_statement "if (*param_1 == 0) {\n          *param_2 = local_34 - *(int *)puVar2;\n          *param_1 = local_30;\n          iVar5 = 0;\n          goto LAB_000447ec;\n        }" (if "if") (parenthesized_expression "(*param_1 == 0)" (( "(") (binary_expression "*param_1 == 0" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          *param_2 = local_34 - *(int *)puVar2;\n          *param_1 = local_30;\n          iVar5 = 0;\n          goto LAB_000447ec;\n        }" ({ "{") (expression_statement "*param_2 = local_34 - *(int *)puVar2;" (assignment_expression "*param_2 = local_34 - *(int *)puVar2" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (binary_expression "local_34 - *(int *)puVar2" (identifier "local_34") (- "-") (pointer_expression "*(int *)puVar2" (* "*") (cast_expression "(int *)puVar2" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar2"))))) (; ";")) (expression_statement "*param_1 = local_30;" (assignment_expression "*param_1 = local_30" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (identifier "local_30")) (; ";")) (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" (identifier "iVar5") (= "=") (number_literal "0")) (; ";")) (goto_statement "goto LAB_000447ec;" (goto "goto") (statement_identifier "LAB_000447ec") (; ";")) (} "}"))) (expression_statement "uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4);" (assignment_expression "uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4)" (identifier "uVar8") (= "=") (call_expression "length_of_list(*(undefined4 *)PTR_currmenu_000778a4)" (identifier "length_of_list") (argument_list "(*(undefined4 *)PTR_currmenu_000778a4)" (( "(") (pointer_expression "*(undefined4 *)PTR_currmenu_000778a4" (* "*") (cast_expression "(undefined4 *)PTR_currmenu_000778a4" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_currmenu_000778a4"))) () ")")))) (; ";")) (expression_statement "uVar12 = *(uint *)PTR_COLS_00077fb4;" (assignment_expression "uVar12 = *(uint *)PTR_COLS_00077fb4" (identifier "uVar12") (= "=") (pointer_expression "*(uint *)PTR_COLS_00077fb4" (* "*") (cast_expression "(uint *)PTR_COLS_00077fb4" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_COLS_00077fb4")))) (; ";")) (expression_statement "iVar5 = (int)(uVar12 + 0x28) / 0x14;" (assignment_expression "iVar5 = (int)(uVar12 + 0x28) / 0x14" (identifier "iVar5") (= "=") (binary_expression "(int)(uVar12 + 0x28) / 0x14" (cast_expression "(int)(uVar12 + 0x28)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(uVar12 + 0x28)" (( "(") (binary_expression "uVar12 + 0x28" (identifier "uVar12") (+ "+") (number_literal "0x28")) () ")"))) (/ "/") (number_literal "0x14"))) (; ";")) (if_statement "if ((uint)(iVar5 * 2) <= uVar8) {\n          uVar8 = iVar5 * 2;\n        }" (if "if") (parenthesized_expression "((uint)(iVar5 * 2) <= uVar8)" (( "(") (binary_expression "(uint)(iVar5 * 2) <= uVar8" (call_expression "(uint)(iVar5 * 2)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(iVar5 * 2)" (( "(") (binary_expression "iVar5 * 2" (identifier "iVar5") (* "*") (number_literal "2")) () ")"))) (<= "<=") (identifier "uVar8")) () ")")) (compound_statement "{\n          uVar8 = iVar5 * 2;\n        }" ({ "{") (expression_statement "uVar8 = iVar5 * 2;" (assignment_expression "uVar8 = iVar5 * 2" (identifier "uVar8") (= "=") (binary_expression "iVar5 * 2" (identifier "iVar5") (* "*") (number_literal "2"))) (; ";")) (} "}"))) (if_statement "if (uVar8 < 2) {\n          if (iVar5 == 0) {\n            trap(7);\n          }\n          uVar10 = (int)uVar12 / iVar5;\n        }\n        else {\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }" (if "if") (parenthesized_expression "(uVar8 < 2)" (( "(") (binary_expression "uVar8 < 2" (identifier "uVar8") (< "<") (number_literal "2")) () ")")) (compound_statement "{\n          if (iVar5 == 0) {\n            trap(7);\n          }\n          uVar10 = (int)uVar12 / iVar5;\n        }" ({ "{") (if_statement "if (iVar5 == 0) {\n            trap(7);\n          }" (if "if") (parenthesized_expression "(iVar5 == 0)" (( "(") (binary_expression "iVar5 == 0" (identifier "iVar5") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n            trap(7);\n          }" ({ "{") (expression_statement "trap(7);" (call_expression "trap(7)" (identifier "trap") (argument_list "(7)" (( "(") (number_literal "7") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar10 = (int)uVar12 / iVar5;" (assignment_expression "uVar10 = (int)uVar12 / iVar5" (identifier "uVar10") (= "=") (binary_expression "(int)uVar12 / iVar5" (cast_expression "(int)uVar12" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar12")) (/ "/") (identifier "iVar5"))) (; ";")) (} "}")) (else_clause "else {\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }" (else "else") (compound_statement "{\n          uVar10 = (uVar8 >> 1) + (uVar8 & 1);\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          uVar10 = uVar12 / uVar10;\n        }" ({ "{") (expression_statement "uVar10 = (uVar8 >> 1) + (uVar8 & 1);" (assignment_expression "uVar10 = (uVar8 >> 1) + (uVar8 & 1)" (identifier "uVar10") (= "=") (binary_expression "(uVar8 >> 1) + (uVar8 & 1)" (parenthesized_expression "(uVar8 >> 1)" (( "(") (binary_expression "uVar8 >> 1" (identifier "uVar8") (>> ">>") (number_literal "1")) () ")")) (+ "+") (parenthesized_expression "(uVar8 & 1)" (( "(") (binary_expression "uVar8 & 1" (identifier "uVar8") (& "&") (number_literal "1")) () ")")))) (; ";")) (if_statement "if (uVar10 == 0) {\n            trap(7);\n          }" (if "if") (parenthesized_expression "(uVar10 == 0)" (( "(") (binary_expression "uVar10 == 0" (identifier "uVar10") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n            trap(7);\n          }" ({ "{") (expression_statement "trap(7);" (call_expression "trap(7)" (identifier "trap") (argument_list "(7)" (( "(") (number_literal "7") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar10 = uVar12 / uVar10;" (assignment_expression "uVar10 = uVar12 / uVar10" (identifier "uVar10") (= "=") (binary_expression "uVar12 / uVar10" (identifier "uVar12") (/ "/") (identifier "uVar10"))) (; ";")) (} "}")))) (if_statement "if (uVar10 == 0) {\n          trap(7);\n        }" (if "if") (parenthesized_expression "(uVar10 == 0)" (( "(") (binary_expression "uVar10 == 0" (identifier "uVar10") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          trap(7);\n        }" ({ "{") (expression_statement "trap(7);" (call_expression "trap(7)" (identifier "trap") (argument_list "(7)" (( "(") (number_literal "7") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1;" (assignment_expression "uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1" (identifier "uVar14") (= "=") (binary_expression "(*param_2 / (int)uVar10) * 2 + *param_1" (binary_expression "(*param_2 / (int)uVar10) * 2" (parenthesized_expression "(*param_2 / (int)uVar10)" (( "(") (binary_expression "*param_2 / (int)uVar10" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (/ "/") (cast_expression "(int)uVar10" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar10"))) () ")")) (* "*") (number_literal "2")) (+ "+") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (if_statement "if (uVar8 < uVar14) {\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;\n          uVar14 = uVar14 - 2;\n          iVar5 = 2;\n          if (uVar8 < uVar14) goto LAB_000447ec;\n        }" (if "if") (parenthesized_expression "(uVar8 < uVar14)" (( "(") (binary_expression "uVar8 < uVar14" (identifier "uVar8") (< "<") (identifier "uVar14")) () ")")) (compound_statement "{\n          if (uVar10 == 0) {\n            trap(7);\n          }\n          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;\n          uVar14 = uVar14 - 2;\n          iVar5 = 2;\n          if (uVar8 < uVar14) goto LAB_000447ec;\n        }" ({ "{") (if_statement "if (uVar10 == 0) {\n            trap(7);\n          }" (if "if") (parenthesized_expression "(uVar10 == 0)" (( "(") (binary_expression "uVar10 == 0" (identifier "uVar10") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n            trap(7);\n          }" ({ "{") (expression_statement "trap(7);" (call_expression "trap(7)" (identifier "trap") (argument_list "(7)" (( "(") (number_literal "7") () ")"))) (; ";")) (} "}"))) (if_statement "if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;" (if "if") (parenthesized_expression "((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10)" (( "(") (binary_expression "(int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10" (binary_expression "(int)uVar12 % (int)uVar10" (cast_expression "(int)uVar12" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar12")) (% "%") (cast_expression "(int)uVar10" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar10"))) (<= "<=") (binary_expression "*param_2 % (int)uVar10" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (% "%") (cast_expression "(int)uVar10" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar10")))) () ")")) (goto_statement "goto LAB_000448cc;" (goto "goto") (statement_identifier "LAB_000448cc") (; ";"))) (expression_statement "uVar14 = uVar14 - 2;" (assignment_expression "uVar14 = uVar14 - 2" (identifier "uVar14") (= "=") (binary_expression "uVar14 - 2" (identifier "uVar14") (- "-") (number_literal "2"))) (; ";")) (expression_statement "iVar5 = 2;" (assignment_expression "iVar5 = 2" (identifier "iVar5") (= "=") (number_literal "2")) (; ";")) (if_statement "if (uVar8 < uVar14) goto LAB_000447ec;" (if "if") (parenthesized_expression "(uVar8 < uVar14)" (( "(") (binary_expression "uVar8 < uVar14" (identifier "uVar8") (< "<") (identifier "uVar14")) () ")")) (goto_statement "goto LAB_000447ec;" (goto "goto") (statement_identifier "LAB_000447ec") (; ";"))) (} "}"))) (for_statement "for (puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar5 = 1,\n            puVar13 != (undefined4 *)0x0; puVar13 = (undefined4 *)puVar13[6]) {\n          uVar8 = *(uint *)puVar15;\n          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }\n        }" (for "for") (( "(") (assignment_expression "puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0" (identifier "puVar13") (= "=") (pointer_expression "*(undefined4 **)PTR_allfuncs_00077ad0" (* "*") (cast_expression "(undefined4 **)PTR_allfuncs_00077ad0" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (identifier "PTR_allfuncs_00077ad0")))) (; ";") (comma_expression "iVar5 = 1,\n            puVar13 != (undefined4 *)0x0" (assignment_expression "iVar5 = 1" (identifier "iVar5") (= "=") (number_literal "1")) (, ",") (binary_expression "puVar13 != (undefined4 *)0x0" (identifier "puVar13") (!= "!=") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")))) (; ";") (assignment_expression "puVar13 = (undefined4 *)puVar13[6]" (identifier "puVar13") (= "=") (cast_expression "(undefined4 *)puVar13[6]" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "puVar13[6]" (identifier "puVar13") ([ "[") (number_literal "6") (] "]")))) () ")") (compound_statement "{\n          uVar8 = *(uint *)puVar15;\n          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }\n        }" ({ "{") (expression_statement "uVar8 = *(uint *)puVar15;" (assignment_expression "uVar8 = *(uint *)puVar15" (identifier "uVar8") (= "=") (pointer_expression "*(uint *)puVar15" (* "*") (cast_expression "(uint *)puVar15" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar15")))) (; ";")) (if_statement "if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)) {\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }" (if "if") (parenthesized_expression "((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0))" (( "(") (binary_expression "(((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&\n             (uVar14 = uVar14 - 1, uVar14 == 0)" (parenthesized_expression "(((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0))" (( "(") (binary_expression "((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)" (parenthesized_expression "((uVar8 & puVar13[1]) != 0)" (( "(") (binary_expression "(uVar8 & puVar13[1]) != 0" (parenthesized_expression "(uVar8 & puVar13[1])" (( "(") (binary_expression "uVar8 & puVar13[1]" (identifier "uVar8") (& "&") (subscript_expression "puVar13[1]" (identifier "puVar13") ([ "[") (number_literal "1") (] "]"))) () ")")) (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)" (( "(") (comma_expression "iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0" (assignment_expression "iVar5 = first_sc_for(uVar8,*puVar13)" (identifier "iVar5") (= "=") (call_expression "first_sc_for(uVar8,*puVar13)" (identifier "first_sc_for") (argument_list "(uVar8,*puVar13)" (( "(") (identifier "uVar8") (, ",") (pointer_expression "*puVar13" (* "*") (identifier "puVar13")) () ")")))) (, ",") (binary_expression "iVar5 != 0" (identifier "iVar5") (!= "!=") (number_literal "0"))) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(uVar14 = uVar14 - 1, uVar14 == 0)" (( "(") (comma_expression "uVar14 = uVar14 - 1, uVar14 == 0" (assignment_expression "uVar14 = uVar14 - 1" (identifier "uVar14") (= "=") (binary_expression "uVar14 - 1" (identifier "uVar14") (- "-") (number_literal "1"))) (, ",") (binary_expression "uVar14 == 0" (identifier "uVar14") (== "==") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\n            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);\n            cVar1 = *(char *)(iVar5 + 4);\n            put_back(*(undefined4 *)(iVar5 + 8));\n            if (cVar1 == '\0') goto LAB_00044898;\n            put_back(0x1b);\n            iVar5 = 1;\n            break;\n          }" ({ "{") (expression_statement "iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);" (assignment_expression "iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13)" (identifier "iVar5") (= "=") (call_expression "first_sc_for(*(undefined4 *)puVar15,*puVar13)" (identifier "first_sc_for") (argument_list "(*(undefined4 *)puVar15,*puVar13)" (( "(") (pointer_expression "*(undefined4 *)puVar15" (* "*") (cast_expression "(undefined4 *)puVar15" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar15"))) (, ",") (pointer_expression "*puVar13" (* "*") (identifier "puVar13")) () ")")))) (; ";")) (expression_statement "cVar1 = *(char *)(iVar5 + 4);" (assignment_expression "cVar1 = *(char *)(iVar5 + 4)" (identifier "cVar1") (= "=") (pointer_expression "*(char *)(iVar5 + 4)" (* "*") (cast_expression "(char *)(iVar5 + 4)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar5 + 4)" (( "(") (binary_expression "iVar5 + 4" (identifier "iVar5") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (expression_statement "put_back(*(undefined4 *)(iVar5 + 8));" (call_expression "put_back(*(undefined4 *)(iVar5 + 8))" (identifier "put_back") (argument_list "(*(undefined4 *)(iVar5 + 8))" (( "(") (pointer_expression "*(undefined4 *)(iVar5 + 8)" (* "*") (cast_expression "(undefined4 *)(iVar5 + 8)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar5 + 8)" (( "(") (binary_expression "iVar5 + 8" (identifier "iVar5") (+ "+") (number_literal "8")) () ")")))) () ")"))) (; ";")) (if_statement "if (cVar1 == '\0') goto LAB_00044898;" (if "if") (parenthesized_expression "(cVar1 == '\0')" (( "(") (binary_expression "cVar1 == '\0'" (identifier "cVar1") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (goto_statement "goto LAB_00044898;" (goto "goto") (statement_identifier "LAB_00044898") (; ";"))) (expression_statement "put_back(0x1b);" (call_expression "put_back(0x1b)" (identifier "put_back") (argument_list "(0x1b)" (( "(") (number_literal "0x1b") () ")"))) (; ";")) (expression_statement "iVar5 = 1;" (assignment_expression "iVar5 = 1" (identifier "iVar5") (= "=") (number_literal "1")) (; ";")) (break_statement "break;" (break "break") (; ";")) (} "}"))) (} "}"))) (goto_statement "goto LAB_000447ec;" (goto "goto") (statement_identifier "LAB_000447ec") (; ";")) (} "}"))) (} "}"))) (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" (identifier "iVar5") (= "=") (number_literal "0")) (; ";")) (} "}")))) (labeled_statement "LAB_000447ec:\n  if (local_24 == *(int **)puVar4) {\n    return iVar5;\n  }" (statement_identifier "LAB_000447ec") (: ":") (if_statement "if (local_24 == *(int **)puVar4) {\n    return iVar5;\n  }" (if "if") (parenthesized_expression "(local_24 == *(int **)puVar4)" (( "(") (binary_expression "local_24 == *(int **)puVar4" (identifier "local_24") (== "==") (pointer_expression "*(int **)puVar4" (* "*") (cast_expression "(int **)puVar4" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (identifier "puVar4")))) () ")")) (compound_statement "{\n    return iVar5;\n  }" ({ "{") (return_statement "return iVar5;" (return "return") (identifier "iVar5") (; ";")) (} "}")))) (expression_statement "puVar15 = PTR___stack_chk_fail_000780c0;" (assignment_expression "puVar15 = PTR___stack_chk_fail_000780c0" (identifier "puVar15") (= "=") (identifier "PTR___stack_chk_fail_000780c0")) (; ";")) (expression_statement "(*(code *)PTR___stack_chk_fail_000780c0)();" (call_expression "(*(code *)PTR___stack_chk_fail_000780c0)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_000780c0)" (( "(") (pointer_expression "*(code *)PTR___stack_chk_fail_000780c0" (* "*") (cast_expression "(code *)PTR___stack_chk_fail_000780c0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___stack_chk_fail_000780c0"))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "piVar9 = *(int **)(puVar15 + 0x33058);" (assignment_expression "piVar9 = *(int **)(puVar15 + 0x33058)" (identifier "piVar9") (= "=") (pointer_expression "*(int **)(puVar15 + 0x33058)" (* "*") (cast_expression "(int **)(puVar15 + 0x33058)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar15 + 0x33058)" (( "(") (binary_expression "puVar15 + 0x33058" (identifier "puVar15") (+ "+") (number_literal "0x33058")) () ")"))))) (; ";")) (if_statement "if (**(char **)(puVar15 + 0x32c28) == '\0') {\n    if (*local_24 - 0x20U < 0x5f) {\n      return 0;\n    }\n    if (*local_24 - 0xa0U < 0x60) {\n      return 0;\n    }\n    piVar9 = *(int **)(puVar15 + 0x33058);\n  }" (if "if") (parenthesized_expression "(**(char **)(puVar15 + 0x32c28) == '\0')" (( "(") (binary_expression "**(char **)(puVar15 + 0x32c28) == '\0'" (pointer_expression "**(char **)(puVar15 + 0x32c28)" (* "*") (pointer_expression "*(char **)(puVar15 + 0x32c28)" (* "*") (cast_expression "(char **)(puVar15 + 0x32c28)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar15 + 0x32c28)" (( "(") (binary_expression "puVar15 + 0x32c28" (identifier "puVar15") (+ "+") (number_literal "0x32c28")) () ")"))))) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n    if (*local_24 - 0x20U < 0x5f) {\n      return 0;\n    }\n    if (*local_24 - 0xa0U < 0x60) {\n      return 0;\n    }\n    piVar9 = *(int **)(puVar15 + 0x33058);\n  }" ({ "{") (if_statement "if (*local_24 - 0x20U < 0x5f) {\n      return 0;\n    }" (if "if") (parenthesized_expression "(*local_24 - 0x20U < 0x5f)" (( "(") (binary_expression "*local_24 - 0x20U < 0x5f" (binary_expression "*local_24 - 0x20U" (pointer_expression "*local_24" (* "*") (identifier "local_24")) (- "-") (number_literal "0x20U")) (< "<") (number_literal "0x5f")) () ")")) (compound_statement "{\n      return 0;\n    }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (if_statement "if (*local_24 - 0xa0U < 0x60) {\n      return 0;\n    }" (if "if") (parenthesized_expression "(*local_24 - 0xa0U < 0x60)" (( "(") (binary_expression "*local_24 - 0xa0U < 0x60" (binary_expression "*local_24 - 0xa0U" (pointer_expression "*local_24" (* "*") (identifier "local_24")) (- "-") (number_literal "0xa0U")) (< "<") (number_literal "0x60")) () ")")) (compound_statement "{\n      return 0;\n    }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "piVar9 = *(int **)(puVar15 + 0x33058);" (assignment_expression "piVar9 = *(int **)(puVar15 + 0x33058)" (identifier "piVar9") (= "=") (pointer_expression "*(int **)(puVar15 + 0x33058)" (* "*") (cast_expression "(int **)(puVar15 + 0x33058)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar15 + 0x33058)" (( "(") (binary_expression "puVar15 + 0x33058" (identifier "puVar15") (+ "+") (number_literal "0x33058")) () ")"))))) (; ";")) (} "}"))) (expression_statement "iVar5 = *piVar9;" (assignment_expression "iVar5 = *piVar9" (identifier "iVar5") (= "=") (pointer_expression "*piVar9" (* "*") (identifier "piVar9"))) (; ";")) (if_statement "if (iVar5 != 0) {\n    while ((((**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0 ||\n            (*local_24 != *(int *)(iVar5 + 8))) ||\n           (*(char *)(iVar5 + 4) != **(char **)(puVar15 + 0x32c28)))) {\n      iVar5 = *(int *)(iVar5 + 0x20);\n      if (iVar5 == 0) {\n        return 0;\n      }\n    }\n  }" (if "if") (parenthesized_expression "(iVar5 != 0)" (( "(") (binary_expression "iVar5 != 0" (identifier "iVar5") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    while ((((**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0 ||\n            (*local_24 != *(int *)(iVar5 + 8))) ||\n           (*(char *)(iVar5 + 4) != **(char **)(puVar15 + 0x32c28)))) {\n      iVar5 = *(int *)(iVar5 + 0x20);\n      if (iVar5 == 0) {\n        return 0;\n      }\n    }\n  }" ({ "{") (while_statement "while ((((**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0 ||\n            (*local_24 != *(int *)(iVar5 + 8))) ||\n           (*(char *)(iVar5 + 4) != **(char **)(puVar15 + 0x32c28)))) {\n      iVar5 = *(int *)(iVar5 + 0x20);\n      if (iVar5 == 0) {\n        return 0;\n      }\n    }" (while "while") (parenthesized_expression "((((**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0 ||\n            (*local_24 != *(int *)(iVar5 + 8))) ||\n           (*(char *)(iVar5 + 4) != **(char **)(puVar15 + 0x32c28))))" (( "(") (parenthesized_expression "(((**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0 ||\n            (*local_24 != *(int *)(iVar5 + 8))) ||\n           (*(char *)(iVar5 + 4) != **(char **)(puVar15 + 0x32c28)))" (( "(") (binary_expression "((**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0 ||\n            (*local_24 != *(int *)(iVar5 + 8))) ||\n           (*(char *)(iVar5 + 4) != **(char **)(puVar15 + 0x32c28))" (parenthesized_expression "((**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0 ||\n            (*local_24 != *(int *)(iVar5 + 8)))" (( "(") (binary_expression "(**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0 ||\n            (*local_24 != *(int *)(iVar5 + 8))" (binary_expression "(**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0" (parenthesized_expression "(**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc))" (( "(") (binary_expression "**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)" (pointer_expression "**(uint **)(puVar15 + 0x32e28)" (* "*") (pointer_expression "*(uint **)(puVar15 + 0x32e28)" (* "*") (cast_expression "(uint **)(puVar15 + 0x32e28)" (( "(") (type_descriptor "uint **" (type_identifier "uint") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar15 + 0x32e28)" (( "(") (binary_expression "puVar15 + 0x32e28" (identifier "puVar15") (+ "+") (number_literal "0x32e28")) () ")"))))) (& "&") (pointer_expression "*(uint *)(iVar5 + 0xc)" (* "*") (cast_expression "(uint *)(iVar5 + 0xc)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar5 + 0xc)" (( "(") (binary_expression "iVar5 + 0xc" (identifier "iVar5") (+ "+") (number_literal "0xc")) () ")"))))) () ")")) (== "==") (number_literal "0")) (|| "||") (parenthesized_expression "(*local_24 != *(int *)(iVar5 + 8))" (( "(") (binary_expression "*local_24 != *(int *)(iVar5 + 8)" (pointer_expression "*local_24" (* "*") (identifier "local_24")) (!= "!=") (pointer_expression "*(int *)(iVar5 + 8)" (* "*") (cast_expression "(int *)(iVar5 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar5 + 8)" (( "(") (binary_expression "iVar5 + 8" (identifier "iVar5") (+ "+") (number_literal "8")) () ")"))))) () ")"))) () ")")) (|| "||") (parenthesized_expression "(*(char *)(iVar5 + 4) != **(char **)(puVar15 + 0x32c28))" (( "(") (binary_expression "*(char *)(iVar5 + 4) != **(char **)(puVar15 + 0x32c28)" (pointer_expression "*(char *)(iVar5 + 4)" (* "*") (cast_expression "(char *)(iVar5 + 4)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar5 + 4)" (( "(") (binary_expression "iVar5 + 4" (identifier "iVar5") (+ "+") (number_literal "4")) () ")")))) (!= "!=") (pointer_expression "**(char **)(puVar15 + 0x32c28)" (* "*") (pointer_expression "*(char **)(puVar15 + 0x32c28)" (* "*") (cast_expression "(char **)(puVar15 + 0x32c28)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar15 + 0x32c28)" (( "(") (binary_expression "puVar15 + 0x32c28" (identifier "puVar15") (+ "+") (number_literal "0x32c28")) () ")")))))) () ")"))) () ")")) () ")")) (compound_statement "{\n      iVar5 = *(int *)(iVar5 + 0x20);\n      if (iVar5 == 0) {\n        return 0;\n      }\n    }" ({ "{") (expression_statement "iVar5 = *(int *)(iVar5 + 0x20);" (assignment_expression "iVar5 = *(int *)(iVar5 + 0x20)" (identifier "iVar5") (= "=") (pointer_expression "*(int *)(iVar5 + 0x20)" (* "*") (cast_expression "(int *)(iVar5 + 0x20)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar5 + 0x20)" (( "(") (binary_expression "iVar5 + 0x20" (identifier "iVar5") (+ "+") (number_literal "0x20")) () ")"))))) (; ";")) (if_statement "if (iVar5 == 0) {\n        return 0;\n      }" (if "if") (parenthesized_expression "(iVar5 == 0)" (( "(") (binary_expression "iVar5 == 0" (identifier "iVar5") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (} "}"))) (} "}"))) (return_statement "return iVar5;" (return "return") (identifier "iVar5") (; ";")) (} "}")))
(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (identifier)))) body: (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (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: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_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: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (identifier) (identifier) (pointer_expression argument: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier))) (pointer_expression argument: (identifier)) (pointer_expression argument: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier)))) alternative: (else_clause (compound_statement (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier))) (identifier) (identifier) (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) (goto_statement label: (statement_identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (number_literal))))) alternative: (else_clause (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier))) right: (number_literal))) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier))) (identifier) (identifier) (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_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: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier))))) (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)))) (if_statement condition: (parenthesized_expression (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (identifier))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (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 (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) right: (number_literal)) right: (pointer_expression argument: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (goto_statement label: (statement_identifier))))) (for_statement initializer: (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (identifier)))) condition: (comma_expression left: (assignment_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) update: (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal)))) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) right: (number_literal))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (identifier))))) right: (binary_expression left: (identifier) right: (number_literal)))))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (binary_expression left: (identifier) right: (number_literal)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier))) (pointer_expression argument: (identifier)))))) (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 (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: (identifier) right: (number_literal)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence)))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (break_statement))))) (goto_statement label: (statement_identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (identifier))))) consequence: (compound_statement (return_statement (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) right: (char_literal (escape_sequence)))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)) right: (number_literal))) consequence: (compound_statement (return_statement (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)) right: (number_literal))) consequence: (compound_statement (return_statement (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (while_statement condition: (parenthesized_expression (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) 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))))))) right: (number_literal)) right: (parenthesized_expression (binary_expression left: (pointer_expression argument: (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: (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: (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (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))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (number_literal)))))))) (return_statement (identifier)))))

int MASKED(int *param_1,int *param_2,int param_3)

{
  char cVar1;
  undefined *puVar2;
  undefined *puVar3;
  undefined *puVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  uint uVar8;
  int *piVar9;
  uint uVar10;
  undefined4 uVar11;
  uint uVar12;
  undefined4 *puVar13;
  uint uVar14;
  undefined *puVar15;
  undefined1 auStack_38 [4];
  int local_34;
  int local_30;
  uint local_28;
  int *local_24;
  
  puVar4 = PTR___stack_chk_guard_000780f8;
  local_24 = *(int **)PTR___stack_chk_guard_000780f8;
  iVar5 = (*(code *)PTR_getmouse_00078154)(auStack_38);
  puVar3 = PTR_wenclose_00077ea4;
  puVar2 = PTR_margin_00077690;
  puVar15 = PTR_bottomwin_000775cc;
  if (iVar5 == -1) goto LAB_000447ec;
  uVar11 = *(undefined4 *)PTR_bottomwin_000775cc;
  *param_2 = local_34 - *(int *)PTR_margin_00077690;
  *param_1 = local_30;
  iVar6 = (*(code *)puVar3)(uVar11,local_30,*param_2);
  if ((local_28 & 5) == 0) {
    iVar5 = 2;
    if ((local_28 & 0x210000) == 0) goto LAB_000447ec;
    iVar7 = (*(code *)PTR_wenclose_00077ea4)(*(undefined4 *)PTR_edit_000775d8,*param_1,*param_2);
    if (iVar6 == 0) {
      iVar5 = 2;
      if (iVar7 == 0) goto LAB_000447ec;
    }
    else {
      (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);
      if ((iVar7 == 0) && (*param_1 != 0)) {
LAB_000448cc:
        iVar5 = 2;
        goto LAB_000447ec;
      }
    }
    iVar5 = 3;
    do {
      uVar11 = 0x102;
      iVar5 = iVar5 + -1;
      if ((local_28 & 0x10000) != 0) {
        uVar11 = 0x103;
      }
      put_back(uVar11);
    } while (iVar5 != 0);
LAB_00044898:
    iVar5 = 1;
  }
  else {
    if (param_3 != 0) {
      iVar5 = 0;
      if ((*(uint *)PTR_flags_0007759c & 8) != 0) goto LAB_000447ec;
      if (iVar6 != 0) {
        (*(code *)PTR_wmouse_trafo_00077f04)(*(undefined4 *)puVar15,param_1,param_2,0);
        puVar15 = PTR_currmenu_000778a4;
        if (*param_1 == 0) {
          *param_2 = local_34 - *(int *)puVar2;
          *param_1 = local_30;
          iVar5 = 0;
          goto LAB_000447ec;
        }
        uVar8 = length_of_list(*(undefined4 *)PTR_currmenu_000778a4);
        uVar12 = *(uint *)PTR_COLS_00077fb4;
        iVar5 = (int)(uVar12 + 0x28) / 0x14;
        if ((uint)(iVar5 * 2) <= uVar8) {
          uVar8 = iVar5 * 2;
        }
        if (uVar8 < 2) {
          if (iVar5 == 0) {
            trap(7);
          }
          uVar10 = (int)uVar12 / iVar5;
        }
        else {
          uVar10 = (uVar8 >> 1) + (uVar8 & 1);
          if (uVar10 == 0) {
            trap(7);
          }
          uVar10 = uVar12 / uVar10;
        }
        if (uVar10 == 0) {
          trap(7);
        }
        uVar14 = (*param_2 / (int)uVar10) * 2 + *param_1;
        if (uVar8 < uVar14) {
          if (uVar10 == 0) {
            trap(7);
          }
          if ((int)uVar12 % (int)uVar10 <= *param_2 % (int)uVar10) goto LAB_000448cc;
          uVar14 = uVar14 - 2;
          iVar5 = 2;
          if (uVar8 < uVar14) goto LAB_000447ec;
        }
        for (puVar13 = *(undefined4 **)PTR_allfuncs_00077ad0; iVar5 = 1,
            puVar13 != (undefined4 *)0x0; puVar13 = (undefined4 *)puVar13[6]) {
          uVar8 = *(uint *)puVar15;
          if ((((uVar8 & puVar13[1]) != 0) && (iVar5 = first_sc_for(uVar8,*puVar13), iVar5 != 0)) &&
             (uVar14 = uVar14 - 1, uVar14 == 0)) {
            iVar5 = first_sc_for(*(undefined4 *)puVar15,*puVar13);
            cVar1 = *(char *)(iVar5 + 4);
            put_back(*(undefined4 *)(iVar5 + 8));
            if (cVar1 == '\0') goto LAB_00044898;
            put_back(0x1b);
            iVar5 = 1;
            break;
          }
        }
        goto LAB_000447ec;
      }
    }
    iVar5 = 0;
  }
LAB_000447ec:
  if (local_24 == *(int **)puVar4) {
    return iVar5;
  }
  puVar15 = PTR___stack_chk_fail_000780c0;
  (*(code *)PTR___stack_chk_fail_000780c0)();
  piVar9 = *(int **)(puVar15 + 0x33058);
  if (**(char **)(puVar15 + 0x32c28) == '\0') {
    if (*local_24 - 0x20U < 0x5f) {
      return 0;
    }
    if (*local_24 - 0xa0U < 0x60) {
      return 0;
    }
    piVar9 = *(int **)(puVar15 + 0x33058);
  }
  iVar5 = *piVar9;
  if (iVar5 != 0) {
    while ((((**(uint **)(puVar15 + 0x32e28) & *(uint *)(iVar5 + 0xc)) == 0 ||
            (*local_24 != *(int *)(iVar5 + 8))) ||
           (*(char *)(iVar5 + 4) != **(char **)(puVar15 + 0x32c28)))) {
      iVar5 = *(int *)(iVar5 + 0x20);
      if (iVar5 == 0) {
        return 0;
      }
    }
  }
  return iVar5;
}

