
bin_tree_t * create_tree(re_dfa_t *dfa,bin_tree_t *left,bin_tree_t *right,re_token_type_t type)

{
  undefined *puVar1;
  undefined4 *puVar2;
  bin_tree_t *pbVar3;
  bin_tree_t *left_00;
  bin_tree_t *right_00;
  bin_tree_t *right_01;
  anon_union_4_5_a39f51ca_for_opr aVar4;
  uint uVar5;
  re_dfa_t *dfa_00;
  re_token_t t;
  
  puVar1 = PTR___stack_chk_guard_00079c10;
  puVar2 = *(undefined4 **)PTR___stack_chk_guard_00079c10;
  t._4_1_ = (undefined1)type;
  pbVar3 = create_token_tree(dfa,left,right,&t);
  if (puVar2 == *(undefined4 **)puVar1) {
    return pbVar3;
  }
  (*(code *)PTR___stack_chk_fail_00079bd0)();
  dfa_00 = (re_dfa_t *)left->parent;
  pbVar3 = right->left;
  if ((left->node_idx & 0x8000000) == 0) {
    left_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_OPEN_SUBEXP);
    right_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_CLOSE_SUBEXP);
    right_01 = right_00;
    if (pbVar3 == (bin_tree_t *)0x0) goto LAB_00047248;
  }
  else {
    if (pbVar3 == (bin_tree_t *)0x0) {
      left_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_OPEN_SUBEXP);
      right_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_CLOSE_SUBEXP);
      right_01 = right_00;
      goto LAB_00047248;
    }
    uVar5 = (right->token).opr.idx;
    if (0x1f < (int)uVar5) {
      return pbVar3;
    }
    if ((dfa_00->used_bkref_map >> (uVar5 & 0x1f) & 1) == 0) {
      return pbVar3;
    }
    left_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_OPEN_SUBEXP);
    right_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_CLOSE_SUBEXP);
  }
  right_01 = create_tree(dfa_00,pbVar3,right_00,CONCAT);
LAB_00047248:
  pbVar3 = create_tree(dfa_00,left_00,right_01,CONCAT);
  if ((((pbVar3 == (bin_tree_t *)0x0) || (right_01 == (bin_tree_t *)0x0)) ||
      (left_00 == (bin_tree_t *)0x0)) || (right_00 == (bin_tree_t *)0x0)) {
    *puVar2 = 0xc;
    pbVar3 = (bin_tree_t *)0x0;
  }
  else {
    aVar4 = (right->token).opr;
    (right_00->token).opr = aVar4;
    (left_00->token).opr = aVar4;
    uVar5 = (uint)(*(int *)&(right->token).field_0x4 << 0x13) >> 0x1f;
    *(uint *)&(right_00->token).field_0x4 =
         *(uint *)&(right_00->token).field_0x4 & 0xffffefff | uVar5 << 0xc;
    *(uint *)&(left_00->token).field_0x4 =
         *(uint *)&(left_00->token).field_0x4 & 0xffffefff | uVar5 << 0xc;
  }
  return pbVar3;
}



int FUN_000470f0(undefined4 param_1,int *param_2,int param_3)

{
  uint uVar1;
  undefined4 *puVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  undefined4 uVar7;
  int iVar8;
  undefined *puVar9;
  
  puVar9 = PTR___stack_chk_guard_00079c10;
  puVar2 = *(undefined4 **)PTR___stack_chk_guard_00079c10;
  iVar3 = FUN_00046ed4();
  if (puVar2 == *(undefined4 **)puVar9) {
    return iVar3;
  }
  puVar9 = PTR___stack_chk_fail_00079bd0;
  (*(code *)PTR___stack_chk_fail_00079bd0)();
  puVar9 = puVar9 + 0x3a424;
  iVar8 = *param_2;
  iVar3 = *(int *)(param_3 + 4);
  if ((*(byte *)(param_2 + 7) & 8) == 0) {
    iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);
    iVar5 = FUN_000470f0(iVar8,0,0,9);
    iVar6 = iVar5;
    if (iVar3 == 0) goto LAB_00047248;
  }
  else {
    if (iVar3 == 0) {
      iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);
      iVar5 = FUN_000470f0(iVar8,0,0,9);
      iVar6 = iVar5;
      goto LAB_00047248;
    }
    if (0x1f < (int)*(uint *)(param_3 + 0x14)) {
      return iVar3;
    }
    if ((*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f) & 1) == 0) {
      return iVar3;
    }
    iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);
    iVar5 = FUN_000470f0(iVar8,0,0,9);
  }
  iVar6 = FUN_000470f0(iVar8,iVar3,iVar5,0x10,puVar9);
LAB_00047248:
  iVar3 = FUN_000470f0(iVar8,iVar4,iVar6,0x10,puVar9);
  if ((((iVar3 == 0) || (iVar6 == 0)) || (iVar4 == 0)) || (iVar5 == 0)) {
    *puVar2 = 0xc;
    iVar3 = 0;
  }
  else {
    uVar7 = *(undefined4 *)(param_3 + 0x14);
    *(undefined4 *)(iVar5 + 0x14) = uVar7;
    *(undefined4 *)(iVar4 + 0x14) = uVar7;
    uVar1 = (uint)(*(int *)(param_3 + 0x18) << 0x13) >> 0x1f;
    *(uint *)(iVar5 + 0x18) = *(uint *)(iVar5 + 0x18) & 0xffffefff | uVar1 << 0xc;
    *(uint *)(iVar4 + 0x18) = *(uint *)(iVar4 + 0x18) & 0xffffefff | uVar1 << 0xc;
  }
  return iVar3;
}


lui gp,0x4
addiu gp,gp,-0x5b70
addu gp,gp,t9
addiu sp,sp,-0x30
sw ra,0x2c(sp)
sw s0,0x28(sp)
sw gp,0x10(sp)
lw s0,-0x7970(gp)
lw v0,0x0(s0)
sw v0,0x24(sp)
sb a3,0x20(sp)
addiu a3,sp,0x1c
lw t9,-0x7c60(gp)
addiu t9,t9,0x6ed4
bal 0x00046ed4
_nop
lw gp,0x10(sp)
lw a0,0x24(sp)
lw v1,0x0(s0)
bne a0,v1,0x00047150
_lw ra,0x2c(sp)
lw s0,0x28(sp)
jr ra
_addiu sp,sp,0x30
lw t9,-0x79b0(gp)
jalr t9
_nop
lui gp,0x4
addiu gp,gp,-0x5bdc
addu gp,gp,t9
addiu sp,sp,-0x38
sw ra,0x34(sp)
sw s6,0x30(sp)
sw s5,0x2c(sp)
sw s4,0x28(sp)
sw s3,0x24(sp)
sw s2,0x20(sp)
sw s1,0x1c(sp)
sw s0,0x18(sp)
sw gp,0x10(sp)
or s5,a0,zero
or s3,a2,zero
lw s1,0x0(a1)
lbu v0,0x1c(a1)
andi v0,v0,0x8
beq v0,zero,0x000472e4
_lw s0,0x4(a2)
beq s0,zero,0x00047350
_li a3,0x8
lw v1,0x14(a2)
slti v0,v1,0x20
beq v0,zero,0x000472bc
_or v0,s0,zero
lw v0,0x50(s1)
srlv v0,v0,v1
andi v0,v0,0x1
beq v0,zero,0x000472b8
_or a2,zero,zero
or a1,zero,zero
or a0,s1,zero
lw s4,-0x7c60(gp)
addiu s4,s4,0x70f0
or t9,s4,zero
bal 0x000470f0
_nop
lw gp,0x10(sp)
or s2,v0,zero
li a3,0x9
or a2,zero,zero
or a1,zero,zero
or a0,s1,zero
or t9,s4,zero
bal 0x000470f0
_nop
lw gp,0x10(sp)
or s4,v0,zero
li a3,0x10
or a2,s4,zero
or a1,s0,zero
or a0,s1,zero
lw t9,-0x7c60(gp)
addiu t9,t9,0x70f0
bal 0x000470f0
_nop
lw gp,0x10(sp)
or s6,v0,zero
li a3,0x10
or a2,s6,zero
or a1,s2,zero
or a0,s1,zero
lw t9,-0x7c60(gp)
addiu t9,t9,0x70f0
bal 0x000470f0
_nop
lw gp,0x10(sp)
beq v0,zero,0x00047340
_or s0,v0,zero
beq s6,zero,0x00047340
_nop
beq s2,zero,0x00047344
_li v0,0xc
beq s4,zero,0x00047344
_nop
lw v0,0x14(s3)
sw v0,0x14(s4)
sw v0,0x14(s2)
lw v0,0x18(s3)
ext v0,v0,0xc,0x1
lw v1,0x18(s4)
ins v1,v0,0xc,0x1
sw v1,0x18(s4)
lw v1,0x18(s2)
ins v1,v0,0xc,0x1
sw v1,0x18(s2)
or v0,s0,zero
lw ra,0x34(sp)
lw s6,0x30(sp)
lw s5,0x2c(sp)
lw s4,0x28(sp)
lw s3,0x24(sp)
lw s2,0x20(sp)
lw s1,0x1c(sp)
lw s0,0x18(sp)
jr ra
_addiu sp,sp,0x38
li a3,0x8
or a2,zero,zero
or a1,zero,zero
or a0,s1,zero
lw s4,-0x7c60(gp)
addiu s4,s4,0x70f0
or t9,s4,zero
bal 0x000470f0
_nop
lw gp,0x10(sp)
or s2,v0,zero
li a3,0x9
or a2,zero,zero
or a1,zero,zero
or a0,s1,zero
or t9,s4,zero
bal 0x000470f0
_nop
lw gp,0x10(sp)
bne s0,zero,0x00047220
_or s4,v0,zero
b 0x00047248
_or s6,v0,zero
li v0,0xc
sw v0,0x0(s5)
b 0x000472b8
_or s0,zero,zero
or a2,zero,zero
or a1,zero,zero
or a0,s1,zero
lw s0,-0x7c60(gp)
addiu s0,s0,0x70f0
or t9,s0,zero
bal 0x000470f0
_nop
lw gp,0x10(sp)
or s2,v0,zero
li a3,0x9
or a2,zero,zero
or a1,zero,zero
or a0,s1,zero
or t9,s0,zero
bal 0x000470f0
_nop
lw gp,0x10(sp)
or s6,v0,zero
b 0x00047248
_or s4,v0,zero
(translation_unit "int FUN_000470f0(undefined4 param_1,int *param_2,int param_3)\n\n{\n  uint uVar1;\n  undefined4 *puVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  undefined4 uVar7;\n  int iVar8;\n  undefined *puVar9;\n  \n  puVar9 = PTR___stack_chk_guard_00079c10;\n  puVar2 = *(undefined4 **)PTR___stack_chk_guard_00079c10;\n  iVar3 = FUN_00046ed4();\n  if (puVar2 == *(undefined4 **)puVar9) {\n    return iVar3;\n  }\n  puVar9 = PTR___stack_chk_fail_00079bd0;\n  (*(code *)PTR___stack_chk_fail_00079bd0)();\n  puVar9 = puVar9 + 0x3a424;\n  iVar8 = *param_2;\n  iVar3 = *(int *)(param_3 + 4);\n  if ((*(byte *)(param_2 + 7) & 8) == 0) {\n    iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n    iVar5 = FUN_000470f0(iVar8,0,0,9);\n    iVar6 = iVar5;\n    if (iVar3 == 0) goto LAB_00047248;\n  }\n  else {\n    if (iVar3 == 0) {\n      iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n      iVar5 = FUN_000470f0(iVar8,0,0,9);\n      iVar6 = iVar5;\n      goto LAB_00047248;\n    }\n    if (0x1f < (int)*(uint *)(param_3 + 0x14)) {\n      return iVar3;\n    }\n    if ((*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f) & 1) == 0) {\n      return iVar3;\n    }\n    iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n    iVar5 = FUN_000470f0(iVar8,0,0,9);\n  }\n  iVar6 = FUN_000470f0(iVar8,iVar3,iVar5,0x10,puVar9);\nLAB_00047248:\n  iVar3 = FUN_000470f0(iVar8,iVar4,iVar6,0x10,puVar9);\n  if ((((iVar3 == 0) || (iVar6 == 0)) || (iVar4 == 0)) || (iVar5 == 0)) {\n    *puVar2 = 0xc;\n    iVar3 = 0;\n  }\n  else {\n    uVar7 = *(undefined4 *)(param_3 + 0x14);\n    *(undefined4 *)(iVar5 + 0x14) = uVar7;\n    *(undefined4 *)(iVar4 + 0x14) = uVar7;\n    uVar1 = (uint)(*(int *)(param_3 + 0x18) << 0x13) >> 0x1f;\n    *(uint *)(iVar5 + 0x18) = *(uint *)(iVar5 + 0x18) & 0xffffefff | uVar1 << 0xc;\n    *(uint *)(iVar4 + 0x18) = *(uint *)(iVar4 + 0x18) & 0xffffefff | uVar1 << 0xc;\n  }\n  return iVar3;\n}\n\n" (function_definition "int FUN_000470f0(undefined4 param_1,int *param_2,int param_3)\n\n{\n  uint uVar1;\n  undefined4 *puVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  undefined4 uVar7;\n  int iVar8;\n  undefined *puVar9;\n  \n  puVar9 = PTR___stack_chk_guard_00079c10;\n  puVar2 = *(undefined4 **)PTR___stack_chk_guard_00079c10;\n  iVar3 = FUN_00046ed4();\n  if (puVar2 == *(undefined4 **)puVar9) {\n    return iVar3;\n  }\n  puVar9 = PTR___stack_chk_fail_00079bd0;\n  (*(code *)PTR___stack_chk_fail_00079bd0)();\n  puVar9 = puVar9 + 0x3a424;\n  iVar8 = *param_2;\n  iVar3 = *(int *)(param_3 + 4);\n  if ((*(byte *)(param_2 + 7) & 8) == 0) {\n    iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n    iVar5 = FUN_000470f0(iVar8,0,0,9);\n    iVar6 = iVar5;\n    if (iVar3 == 0) goto LAB_00047248;\n  }\n  else {\n    if (iVar3 == 0) {\n      iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n      iVar5 = FUN_000470f0(iVar8,0,0,9);\n      iVar6 = iVar5;\n      goto LAB_00047248;\n    }\n    if (0x1f < (int)*(uint *)(param_3 + 0x14)) {\n      return iVar3;\n    }\n    if ((*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f) & 1) == 0) {\n      return iVar3;\n    }\n    iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n    iVar5 = FUN_000470f0(iVar8,0,0,9);\n  }\n  iVar6 = FUN_000470f0(iVar8,iVar3,iVar5,0x10,puVar9);\nLAB_00047248:\n  iVar3 = FUN_000470f0(iVar8,iVar4,iVar6,0x10,puVar9);\n  if ((((iVar3 == 0) || (iVar6 == 0)) || (iVar4 == 0)) || (iVar5 == 0)) {\n    *puVar2 = 0xc;\n    iVar3 = 0;\n  }\n  else {\n    uVar7 = *(undefined4 *)(param_3 + 0x14);\n    *(undefined4 *)(iVar5 + 0x14) = uVar7;\n    *(undefined4 *)(iVar4 + 0x14) = uVar7;\n    uVar1 = (uint)(*(int *)(param_3 + 0x18) << 0x13) >> 0x1f;\n    *(uint *)(iVar5 + 0x18) = *(uint *)(iVar5 + 0x18) & 0xffffefff | uVar1 << 0xc;\n    *(uint *)(iVar4 + 0x18) = *(uint *)(iVar4 + 0x18) & 0xffffefff | uVar1 << 0xc;\n  }\n  return iVar3;\n}" primitive_type (function_declarator "FUN_000470f0(undefined4 param_1,int *param_2,int param_3)" identifier (parameter_list "(undefined4 param_1,int *param_2,int param_3)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  uint uVar1;\n  undefined4 *puVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  undefined4 uVar7;\n  int iVar8;\n  undefined *puVar9;\n  \n  puVar9 = PTR___stack_chk_guard_00079c10;\n  puVar2 = *(undefined4 **)PTR___stack_chk_guard_00079c10;\n  iVar3 = FUN_00046ed4();\n  if (puVar2 == *(undefined4 **)puVar9) {\n    return iVar3;\n  }\n  puVar9 = PTR___stack_chk_fail_00079bd0;\n  (*(code *)PTR___stack_chk_fail_00079bd0)();\n  puVar9 = puVar9 + 0x3a424;\n  iVar8 = *param_2;\n  iVar3 = *(int *)(param_3 + 4);\n  if ((*(byte *)(param_2 + 7) & 8) == 0) {\n    iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n    iVar5 = FUN_000470f0(iVar8,0,0,9);\n    iVar6 = iVar5;\n    if (iVar3 == 0) goto LAB_00047248;\n  }\n  else {\n    if (iVar3 == 0) {\n      iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n      iVar5 = FUN_000470f0(iVar8,0,0,9);\n      iVar6 = iVar5;\n      goto LAB_00047248;\n    }\n    if (0x1f < (int)*(uint *)(param_3 + 0x14)) {\n      return iVar3;\n    }\n    if ((*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f) & 1) == 0) {\n      return iVar3;\n    }\n    iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n    iVar5 = FUN_000470f0(iVar8,0,0,9);\n  }\n  iVar6 = FUN_000470f0(iVar8,iVar3,iVar5,0x10,puVar9);\nLAB_00047248:\n  iVar3 = FUN_000470f0(iVar8,iVar4,iVar6,0x10,puVar9);\n  if ((((iVar3 == 0) || (iVar6 == 0)) || (iVar4 == 0)) || (iVar5 == 0)) {\n    *puVar2 = 0xc;\n    iVar3 = 0;\n  }\n  else {\n    uVar7 = *(undefined4 *)(param_3 + 0x14);\n    *(undefined4 *)(iVar5 + 0x14) = uVar7;\n    *(undefined4 *)(iVar4 + 0x14) = uVar7;\n    uVar1 = (uint)(*(int *)(param_3 + 0x18) << 0x13) >> 0x1f;\n    *(uint *)(iVar5 + 0x18) = *(uint *)(iVar5 + 0x18) & 0xffffefff | uVar1 << 0xc;\n    *(uint *)(iVar4 + 0x18) = *(uint *)(iVar4 + 0x18) & 0xffffefff | uVar1 << 0xc;\n  }\n  return iVar3;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "undefined4 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "undefined4 uVar7;" type_identifier identifier ;) (declaration "int iVar8;" primitive_type identifier ;) (declaration "undefined *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (expression_statement "puVar9 = PTR___stack_chk_guard_00079c10;" (assignment_expression "puVar9 = PTR___stack_chk_guard_00079c10" identifier = identifier) ;) (expression_statement "puVar2 = *(undefined4 **)PTR___stack_chk_guard_00079c10;" (assignment_expression "puVar2 = *(undefined4 **)PTR___stack_chk_guard_00079c10" identifier = (pointer_expression "*(undefined4 **)PTR___stack_chk_guard_00079c10" * (cast_expression "(undefined4 **)PTR___stack_chk_guard_00079c10" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) ;) (expression_statement "iVar3 = FUN_00046ed4();" (assignment_expression "iVar3 = FUN_00046ed4()" identifier = (call_expression "FUN_00046ed4()" identifier (argument_list "()" ( )))) ;) (if_statement "if (puVar2 == *(undefined4 **)puVar9) {\n    return iVar3;\n  }" if (parenthesized_expression "(puVar2 == *(undefined4 **)puVar9)" ( (binary_expression "puVar2 == *(undefined4 **)puVar9" identifier == (pointer_expression "*(undefined4 **)puVar9" * (cast_expression "(undefined4 **)puVar9" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) )) (compound_statement "{\n    return iVar3;\n  }" { (return_statement "return iVar3;" return identifier ;) })) (expression_statement "puVar9 = PTR___stack_chk_fail_00079bd0;" (assignment_expression "puVar9 = PTR___stack_chk_fail_00079bd0" identifier = identifier) ;) (expression_statement "(*(code *)PTR___stack_chk_fail_00079bd0)();" (call_expression "(*(code *)PTR___stack_chk_fail_00079bd0)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_00079bd0)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_00079bd0" * (cast_expression "(code *)PTR___stack_chk_fail_00079bd0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (expression_statement "puVar9 = puVar9 + 0x3a424;" (assignment_expression "puVar9 = puVar9 + 0x3a424" identifier = (binary_expression "puVar9 + 0x3a424" identifier + number_literal)) ;) (expression_statement "iVar8 = *param_2;" (assignment_expression "iVar8 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "iVar3 = *(int *)(param_3 + 4);" (assignment_expression "iVar3 = *(int *)(param_3 + 4)" identifier = (pointer_expression "*(int *)(param_3 + 4)" * (cast_expression "(int *)(param_3 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) ))))) ;) (if_statement "if ((*(byte *)(param_2 + 7) & 8) == 0) {\n    iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n    iVar5 = FUN_000470f0(iVar8,0,0,9);\n    iVar6 = iVar5;\n    if (iVar3 == 0) goto LAB_00047248;\n  }\n  else {\n    if (iVar3 == 0) {\n      iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n      iVar5 = FUN_000470f0(iVar8,0,0,9);\n      iVar6 = iVar5;\n      goto LAB_00047248;\n    }\n    if (0x1f < (int)*(uint *)(param_3 + 0x14)) {\n      return iVar3;\n    }\n    if ((*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f) & 1) == 0) {\n      return iVar3;\n    }\n    iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n    iVar5 = FUN_000470f0(iVar8,0,0,9);\n  }" if (parenthesized_expression "((*(byte *)(param_2 + 7) & 8) == 0)" ( (binary_expression "(*(byte *)(param_2 + 7) & 8) == 0" (parenthesized_expression "(*(byte *)(param_2 + 7) & 8)" ( (binary_expression "*(byte *)(param_2 + 7) & 8" (pointer_expression "*(byte *)(param_2 + 7)" * (cast_expression "(byte *)(param_2 + 7)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 7)" ( (binary_expression "param_2 + 7" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n    iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n    iVar5 = FUN_000470f0(iVar8,0,0,9);\n    iVar6 = iVar5;\n    if (iVar3 == 0) goto LAB_00047248;\n  }" { (expression_statement "iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);" (assignment_expression "iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9)" identifier = (call_expression "FUN_000470f0(iVar8,0,0,8,puVar9)" identifier (argument_list "(iVar8,0,0,8,puVar9)" ( identifier , number_literal , number_literal , number_literal , identifier )))) ;) (expression_statement "iVar5 = FUN_000470f0(iVar8,0,0,9);" (assignment_expression "iVar5 = FUN_000470f0(iVar8,0,0,9)" identifier = (call_expression "FUN_000470f0(iVar8,0,0,9)" identifier (argument_list "(iVar8,0,0,9)" ( identifier , number_literal , number_literal , number_literal )))) ;) (expression_statement "iVar6 = iVar5;" (assignment_expression "iVar6 = iVar5" identifier = identifier) ;) (if_statement "if (iVar3 == 0) goto LAB_00047248;" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (goto_statement "goto LAB_00047248;" goto statement_identifier ;)) }) (else_clause "else {\n    if (iVar3 == 0) {\n      iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n      iVar5 = FUN_000470f0(iVar8,0,0,9);\n      iVar6 = iVar5;\n      goto LAB_00047248;\n    }\n    if (0x1f < (int)*(uint *)(param_3 + 0x14)) {\n      return iVar3;\n    }\n    if ((*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f) & 1) == 0) {\n      return iVar3;\n    }\n    iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n    iVar5 = FUN_000470f0(iVar8,0,0,9);\n  }" else (compound_statement "{\n    if (iVar3 == 0) {\n      iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n      iVar5 = FUN_000470f0(iVar8,0,0,9);\n      iVar6 = iVar5;\n      goto LAB_00047248;\n    }\n    if (0x1f < (int)*(uint *)(param_3 + 0x14)) {\n      return iVar3;\n    }\n    if ((*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f) & 1) == 0) {\n      return iVar3;\n    }\n    iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n    iVar5 = FUN_000470f0(iVar8,0,0,9);\n  }" { (if_statement "if (iVar3 == 0) {\n      iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n      iVar5 = FUN_000470f0(iVar8,0,0,9);\n      iVar6 = iVar5;\n      goto LAB_00047248;\n    }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n      iVar5 = FUN_000470f0(iVar8,0,0,9);\n      iVar6 = iVar5;\n      goto LAB_00047248;\n    }" { (expression_statement "iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);" (assignment_expression "iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9)" identifier = (call_expression "FUN_000470f0(iVar8,0,0,8,puVar9)" identifier (argument_list "(iVar8,0,0,8,puVar9)" ( identifier , number_literal , number_literal , number_literal , identifier )))) ;) (expression_statement "iVar5 = FUN_000470f0(iVar8,0,0,9);" (assignment_expression "iVar5 = FUN_000470f0(iVar8,0,0,9)" identifier = (call_expression "FUN_000470f0(iVar8,0,0,9)" identifier (argument_list "(iVar8,0,0,9)" ( identifier , number_literal , number_literal , number_literal )))) ;) (expression_statement "iVar6 = iVar5;" (assignment_expression "iVar6 = iVar5" identifier = identifier) ;) (goto_statement "goto LAB_00047248;" goto statement_identifier ;) })) (if_statement "if (0x1f < (int)*(uint *)(param_3 + 0x14)) {\n      return iVar3;\n    }" if (parenthesized_expression "(0x1f < (int)*(uint *)(param_3 + 0x14))" ( (binary_expression "0x1f < (int)*(uint *)(param_3 + 0x14)" number_literal < (cast_expression "(int)*(uint *)(param_3 + 0x14)" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*(uint *)(param_3 + 0x14)" * (cast_expression "(uint *)(param_3 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x14)" ( (binary_expression "param_3 + 0x14" identifier + number_literal) )))))) )) (compound_statement "{\n      return iVar3;\n    }" { (return_statement "return iVar3;" return identifier ;) })) (if_statement "if ((*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f) & 1) == 0) {\n      return iVar3;\n    }" if (parenthesized_expression "((*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f) & 1) == 0)" ( (binary_expression "(*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f) & 1) == 0" (parenthesized_expression "(*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f) & 1)" ( (binary_expression "*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f) & 1" (binary_expression "*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f)" (pointer_expression "*(uint *)(iVar8 + 0x50)" * (cast_expression "(uint *)(iVar8 + 0x50)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar8 + 0x50)" ( (binary_expression "iVar8 + 0x50" identifier + number_literal) )))) >> (parenthesized_expression "(*(uint *)(param_3 + 0x14) & 0x1f)" ( (binary_expression "*(uint *)(param_3 + 0x14) & 0x1f" (pointer_expression "*(uint *)(param_3 + 0x14)" * (cast_expression "(uint *)(param_3 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x14)" ( (binary_expression "param_3 + 0x14" identifier + number_literal) )))) & number_literal) ))) & number_literal) )) == number_literal) )) (compound_statement "{\n      return iVar3;\n    }" { (return_statement "return iVar3;" return identifier ;) })) (expression_statement "iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);" (assignment_expression "iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9)" identifier = (call_expression "FUN_000470f0(iVar8,0,0,8,puVar9)" identifier (argument_list "(iVar8,0,0,8,puVar9)" ( identifier , number_literal , number_literal , number_literal , identifier )))) ;) (expression_statement "iVar5 = FUN_000470f0(iVar8,0,0,9);" (assignment_expression "iVar5 = FUN_000470f0(iVar8,0,0,9)" identifier = (call_expression "FUN_000470f0(iVar8,0,0,9)" identifier (argument_list "(iVar8,0,0,9)" ( identifier , number_literal , number_literal , number_literal )))) ;) }))) (expression_statement "iVar6 = FUN_000470f0(iVar8,iVar3,iVar5,0x10,puVar9);" (assignment_expression "iVar6 = FUN_000470f0(iVar8,iVar3,iVar5,0x10,puVar9)" identifier = (call_expression "FUN_000470f0(iVar8,iVar3,iVar5,0x10,puVar9)" identifier (argument_list "(iVar8,iVar3,iVar5,0x10,puVar9)" ( identifier , identifier , identifier , number_literal , identifier )))) ;) (labeled_statement "LAB_00047248:\n  iVar3 = FUN_000470f0(iVar8,iVar4,iVar6,0x10,puVar9);" statement_identifier : (expression_statement "iVar3 = FUN_000470f0(iVar8,iVar4,iVar6,0x10,puVar9);" (assignment_expression "iVar3 = FUN_000470f0(iVar8,iVar4,iVar6,0x10,puVar9)" identifier = (call_expression "FUN_000470f0(iVar8,iVar4,iVar6,0x10,puVar9)" identifier (argument_list "(iVar8,iVar4,iVar6,0x10,puVar9)" ( identifier , identifier , identifier , number_literal , identifier )))) ;)) (if_statement "if ((((iVar3 == 0) || (iVar6 == 0)) || (iVar4 == 0)) || (iVar5 == 0)) {\n    *puVar2 = 0xc;\n    iVar3 = 0;\n  }\n  else {\n    uVar7 = *(undefined4 *)(param_3 + 0x14);\n    *(undefined4 *)(iVar5 + 0x14) = uVar7;\n    *(undefined4 *)(iVar4 + 0x14) = uVar7;\n    uVar1 = (uint)(*(int *)(param_3 + 0x18) << 0x13) >> 0x1f;\n    *(uint *)(iVar5 + 0x18) = *(uint *)(iVar5 + 0x18) & 0xffffefff | uVar1 << 0xc;\n    *(uint *)(iVar4 + 0x18) = *(uint *)(iVar4 + 0x18) & 0xffffefff | uVar1 << 0xc;\n  }" if (parenthesized_expression "((((iVar3 == 0) || (iVar6 == 0)) || (iVar4 == 0)) || (iVar5 == 0))" ( (binary_expression "(((iVar3 == 0) || (iVar6 == 0)) || (iVar4 == 0)) || (iVar5 == 0)" (parenthesized_expression "(((iVar3 == 0) || (iVar6 == 0)) || (iVar4 == 0))" ( (binary_expression "((iVar3 == 0) || (iVar6 == 0)) || (iVar4 == 0)" (parenthesized_expression "((iVar3 == 0) || (iVar6 == 0))" ( (binary_expression "(iVar3 == 0) || (iVar6 == 0)" (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) || (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) ))) )) || (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) ))) )) || (parenthesized_expression "(iVar5 == 0)" ( (binary_expression "iVar5 == 0" identifier == number_literal) ))) )) (compound_statement "{\n    *puVar2 = 0xc;\n    iVar3 = 0;\n  }" { (expression_statement "*puVar2 = 0xc;" (assignment_expression "*puVar2 = 0xc" (pointer_expression "*puVar2" * identifier) = number_literal) ;) (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) }) (else_clause "else {\n    uVar7 = *(undefined4 *)(param_3 + 0x14);\n    *(undefined4 *)(iVar5 + 0x14) = uVar7;\n    *(undefined4 *)(iVar4 + 0x14) = uVar7;\n    uVar1 = (uint)(*(int *)(param_3 + 0x18) << 0x13) >> 0x1f;\n    *(uint *)(iVar5 + 0x18) = *(uint *)(iVar5 + 0x18) & 0xffffefff | uVar1 << 0xc;\n    *(uint *)(iVar4 + 0x18) = *(uint *)(iVar4 + 0x18) & 0xffffefff | uVar1 << 0xc;\n  }" else (compound_statement "{\n    uVar7 = *(undefined4 *)(param_3 + 0x14);\n    *(undefined4 *)(iVar5 + 0x14) = uVar7;\n    *(undefined4 *)(iVar4 + 0x14) = uVar7;\n    uVar1 = (uint)(*(int *)(param_3 + 0x18) << 0x13) >> 0x1f;\n    *(uint *)(iVar5 + 0x18) = *(uint *)(iVar5 + 0x18) & 0xffffefff | uVar1 << 0xc;\n    *(uint *)(iVar4 + 0x18) = *(uint *)(iVar4 + 0x18) & 0xffffefff | uVar1 << 0xc;\n  }" { (expression_statement "uVar7 = *(undefined4 *)(param_3 + 0x14);" (assignment_expression "uVar7 = *(undefined4 *)(param_3 + 0x14)" identifier = (pointer_expression "*(undefined4 *)(param_3 + 0x14)" * (cast_expression "(undefined4 *)(param_3 + 0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x14)" ( (binary_expression "param_3 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "*(undefined4 *)(iVar5 + 0x14) = uVar7;" (assignment_expression "*(undefined4 *)(iVar5 + 0x14) = uVar7" (pointer_expression "*(undefined4 *)(iVar5 + 0x14)" * (cast_expression "(undefined4 *)(iVar5 + 0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 0x14)" ( (binary_expression "iVar5 + 0x14" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(iVar4 + 0x14) = uVar7;" (assignment_expression "*(undefined4 *)(iVar4 + 0x14) = uVar7" (pointer_expression "*(undefined4 *)(iVar4 + 0x14)" * (cast_expression "(undefined4 *)(iVar4 + 0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x14)" ( (binary_expression "iVar4 + 0x14" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar1 = (uint)(*(int *)(param_3 + 0x18) << 0x13) >> 0x1f;" (assignment_expression "uVar1 = (uint)(*(int *)(param_3 + 0x18) << 0x13) >> 0x1f" identifier = (binary_expression "(uint)(*(int *)(param_3 + 0x18) << 0x13) >> 0x1f" (call_expression "(uint)(*(int *)(param_3 + 0x18) << 0x13)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*(int *)(param_3 + 0x18) << 0x13)" ( (binary_expression "*(int *)(param_3 + 0x18) << 0x13" (pointer_expression "*(int *)(param_3 + 0x18)" * (cast_expression "(int *)(param_3 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x18)" ( (binary_expression "param_3 + 0x18" identifier + number_literal) )))) << number_literal) ))) >> number_literal)) ;) (expression_statement "*(uint *)(iVar5 + 0x18) = *(uint *)(iVar5 + 0x18) & 0xffffefff | uVar1 << 0xc;" (assignment_expression "*(uint *)(iVar5 + 0x18) = *(uint *)(iVar5 + 0x18) & 0xffffefff | uVar1 << 0xc" (pointer_expression "*(uint *)(iVar5 + 0x18)" * (cast_expression "(uint *)(iVar5 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 0x18)" ( (binary_expression "iVar5 + 0x18" identifier + number_literal) )))) = (binary_expression "*(uint *)(iVar5 + 0x18) & 0xffffefff | uVar1 << 0xc" (binary_expression "*(uint *)(iVar5 + 0x18) & 0xffffefff" (pointer_expression "*(uint *)(iVar5 + 0x18)" * (cast_expression "(uint *)(iVar5 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 0x18)" ( (binary_expression "iVar5 + 0x18" identifier + number_literal) )))) & number_literal) | (binary_expression "uVar1 << 0xc" identifier << number_literal))) ;) (expression_statement "*(uint *)(iVar4 + 0x18) = *(uint *)(iVar4 + 0x18) & 0xffffefff | uVar1 << 0xc;" (assignment_expression "*(uint *)(iVar4 + 0x18) = *(uint *)(iVar4 + 0x18) & 0xffffefff | uVar1 << 0xc" (pointer_expression "*(uint *)(iVar4 + 0x18)" * (cast_expression "(uint *)(iVar4 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x18)" ( (binary_expression "iVar4 + 0x18" identifier + number_literal) )))) = (binary_expression "*(uint *)(iVar4 + 0x18) & 0xffffefff | uVar1 << 0xc" (binary_expression "*(uint *)(iVar4 + 0x18) & 0xffffefff" (pointer_expression "*(uint *)(iVar4 + 0x18)" * (cast_expression "(uint *)(iVar4 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x18)" ( (binary_expression "iVar4 + 0x18" identifier + number_literal) )))) & number_literal) | (binary_expression "uVar1 << 0xc" identifier << number_literal))) ;) }))) (return_statement "return iVar3;" return identifier ;) })))
(translation_unit "bin_tree_t * create_tree(re_dfa_t *dfa,bin_tree_t *left,bin_tree_t *right,re_token_type_t type)\n\n{\n  undefined *puVar1;\n  undefined4 *puVar2;\n  bin_tree_t *pbVar3;\n  bin_tree_t *left_00;\n  bin_tree_t *right_00;\n  bin_tree_t *right_01;\n  anon_union_4_5_a39f51ca_for_opr aVar4;\n  uint uVar5;\n  re_dfa_t *dfa_00;\n  re_token_t t;\n  \n  puVar1 = PTR___stack_chk_guard_00079c10;\n  puVar2 = *(undefined4 **)PTR___stack_chk_guard_00079c10;\n  t._4_1_ = (undefined1)type;\n  pbVar3 = create_token_tree(dfa,left,right,&t);\n  if (puVar2 == *(undefined4 **)puVar1) {\n    return pbVar3;\n  }\n  (*(code *)PTR___stack_chk_fail_00079bd0)();\n  dfa_00 = (re_dfa_t *)left->parent;\n  pbVar3 = right->left;\n  if ((left->node_idx & 0x8000000) == 0) {\n    left_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_OPEN_SUBEXP);\n    right_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_CLOSE_SUBEXP);\n    right_01 = right_00;\n    if (pbVar3 == (bin_tree_t *)0x0) goto LAB_00047248;\n  }\n  else {\n    if (pbVar3 == (bin_tree_t *)0x0) {\n      left_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_OPEN_SUBEXP);\n      right_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_CLOSE_SUBEXP);\n      right_01 = right_00;\n      goto LAB_00047248;\n    }\n    uVar5 = (right->token).opr.idx;\n    if (0x1f < (int)uVar5) {\n      return pbVar3;\n    }\n    if ((dfa_00->used_bkref_map >> (uVar5 & 0x1f) & 1) == 0) {\n      return pbVar3;\n    }\n    left_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_OPEN_SUBEXP);\n    right_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_CLOSE_SUBEXP);\n  }\n  right_01 = create_tree(dfa_00,pbVar3,right_00,CONCAT);\nLAB_00047248:\n  pbVar3 = create_tree(dfa_00,left_00,right_01,CONCAT);\n  if ((((pbVar3 == (bin_tree_t *)0x0) || (right_01 == (bin_tree_t *)0x0)) ||\n      (left_00 == (bin_tree_t *)0x0)) || (right_00 == (bin_tree_t *)0x0)) {\n    *puVar2 = 0xc;\n    pbVar3 = (bin_tree_t *)0x0;\n  }\n  else {\n    aVar4 = (right->token).opr;\n    (right_00->token).opr = aVar4;\n    (left_00->token).opr = aVar4;\n    uVar5 = (uint)(*(int *)&(right->token).field_0x4 << 0x13) >> 0x1f;\n    *(uint *)&(right_00->token).field_0x4 =\n         *(uint *)&(right_00->token).field_0x4 & 0xffffefff | uVar5 << 0xc;\n    *(uint *)&(left_00->token).field_0x4 =\n         *(uint *)&(left_00->token).field_0x4 & 0xffffefff | uVar5 << 0xc;\n  }\n  return pbVar3;\n}\n\n" (function_definition "bin_tree_t * create_tree(re_dfa_t *dfa,bin_tree_t *left,bin_tree_t *right,re_token_type_t type)\n\n{\n  undefined *puVar1;\n  undefined4 *puVar2;\n  bin_tree_t *pbVar3;\n  bin_tree_t *left_00;\n  bin_tree_t *right_00;\n  bin_tree_t *right_01;\n  anon_union_4_5_a39f51ca_for_opr aVar4;\n  uint uVar5;\n  re_dfa_t *dfa_00;\n  re_token_t t;\n  \n  puVar1 = PTR___stack_chk_guard_00079c10;\n  puVar2 = *(undefined4 **)PTR___stack_chk_guard_00079c10;\n  t._4_1_ = (undefined1)type;\n  pbVar3 = create_token_tree(dfa,left,right,&t);\n  if (puVar2 == *(undefined4 **)puVar1) {\n    return pbVar3;\n  }\n  (*(code *)PTR___stack_chk_fail_00079bd0)();\n  dfa_00 = (re_dfa_t *)left->parent;\n  pbVar3 = right->left;\n  if ((left->node_idx & 0x8000000) == 0) {\n    left_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_OPEN_SUBEXP);\n    right_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_CLOSE_SUBEXP);\n    right_01 = right_00;\n    if (pbVar3 == (bin_tree_t *)0x0) goto LAB_00047248;\n  }\n  else {\n    if (pbVar3 == (bin_tree_t *)0x0) {\n      left_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_OPEN_SUBEXP);\n      right_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_CLOSE_SUBEXP);\n      right_01 = right_00;\n      goto LAB_00047248;\n    }\n    uVar5 = (right->token).opr.idx;\n    if (0x1f < (int)uVar5) {\n      return pbVar3;\n    }\n    if ((dfa_00->used_bkref_map >> (uVar5 & 0x1f) & 1) == 0) {\n      return pbVar3;\n    }\n    left_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_OPEN_SUBEXP);\n    right_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_CLOSE_SUBEXP);\n  }\n  right_01 = create_tree(dfa_00,pbVar3,right_00,CONCAT);\nLAB_00047248:\n  pbVar3 = create_tree(dfa_00,left_00,right_01,CONCAT);\n  if ((((pbVar3 == (bin_tree_t *)0x0) || (right_01 == (bin_tree_t *)0x0)) ||\n      (left_00 == (bin_tree_t *)0x0)) || (right_00 == (bin_tree_t *)0x0)) {\n    *puVar2 = 0xc;\n    pbVar3 = (bin_tree_t *)0x0;\n  }\n  else {\n    aVar4 = (right->token).opr;\n    (right_00->token).opr = aVar4;\n    (left_00->token).opr = aVar4;\n    uVar5 = (uint)(*(int *)&(right->token).field_0x4 << 0x13) >> 0x1f;\n    *(uint *)&(right_00->token).field_0x4 =\n         *(uint *)&(right_00->token).field_0x4 & 0xffffefff | uVar5 << 0xc;\n    *(uint *)&(left_00->token).field_0x4 =\n         *(uint *)&(left_00->token).field_0x4 & 0xffffefff | uVar5 << 0xc;\n  }\n  return pbVar3;\n}" type_identifier (pointer_declarator "* create_tree(re_dfa_t *dfa,bin_tree_t *left,bin_tree_t *right,re_token_type_t type)" * (function_declarator "create_tree(re_dfa_t *dfa,bin_tree_t *left,bin_tree_t *right,re_token_type_t type)" identifier (parameter_list "(re_dfa_t *dfa,bin_tree_t *left,bin_tree_t *right,re_token_type_t type)" ( (parameter_declaration "re_dfa_t *dfa" type_identifier (pointer_declarator "*dfa" * identifier)) , (parameter_declaration "bin_tree_t *left" type_identifier (pointer_declarator "*left" * identifier)) , (parameter_declaration "bin_tree_t *right" type_identifier (pointer_declarator "*right" * identifier)) , (parameter_declaration "re_token_type_t type" type_identifier identifier) )))) (compound_statement "{\n  undefined *puVar1;\n  undefined4 *puVar2;\n  bin_tree_t *pbVar3;\n  bin_tree_t *left_00;\n  bin_tree_t *right_00;\n  bin_tree_t *right_01;\n  anon_union_4_5_a39f51ca_for_opr aVar4;\n  uint uVar5;\n  re_dfa_t *dfa_00;\n  re_token_t t;\n  \n  puVar1 = PTR___stack_chk_guard_00079c10;\n  puVar2 = *(undefined4 **)PTR___stack_chk_guard_00079c10;\n  t._4_1_ = (undefined1)type;\n  pbVar3 = create_token_tree(dfa,left,right,&t);\n  if (puVar2 == *(undefined4 **)puVar1) {\n    return pbVar3;\n  }\n  (*(code *)PTR___stack_chk_fail_00079bd0)();\n  dfa_00 = (re_dfa_t *)left->parent;\n  pbVar3 = right->left;\n  if ((left->node_idx & 0x8000000) == 0) {\n    left_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_OPEN_SUBEXP);\n    right_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_CLOSE_SUBEXP);\n    right_01 = right_00;\n    if (pbVar3 == (bin_tree_t *)0x0) goto LAB_00047248;\n  }\n  else {\n    if (pbVar3 == (bin_tree_t *)0x0) {\n      left_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_OPEN_SUBEXP);\n      right_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_CLOSE_SUBEXP);\n      right_01 = right_00;\n      goto LAB_00047248;\n    }\n    uVar5 = (right->token).opr.idx;\n    if (0x1f < (int)uVar5) {\n      return pbVar3;\n    }\n    if ((dfa_00->used_bkref_map >> (uVar5 & 0x1f) & 1) == 0) {\n      return pbVar3;\n    }\n    left_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_OPEN_SUBEXP);\n    right_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_CLOSE_SUBEXP);\n  }\n  right_01 = create_tree(dfa_00,pbVar3,right_00,CONCAT);\nLAB_00047248:\n  pbVar3 = create_tree(dfa_00,left_00,right_01,CONCAT);\n  if ((((pbVar3 == (bin_tree_t *)0x0) || (right_01 == (bin_tree_t *)0x0)) ||\n      (left_00 == (bin_tree_t *)0x0)) || (right_00 == (bin_tree_t *)0x0)) {\n    *puVar2 = 0xc;\n    pbVar3 = (bin_tree_t *)0x0;\n  }\n  else {\n    aVar4 = (right->token).opr;\n    (right_00->token).opr = aVar4;\n    (left_00->token).opr = aVar4;\n    uVar5 = (uint)(*(int *)&(right->token).field_0x4 << 0x13) >> 0x1f;\n    *(uint *)&(right_00->token).field_0x4 =\n         *(uint *)&(right_00->token).field_0x4 & 0xffffefff | uVar5 << 0xc;\n    *(uint *)&(left_00->token).field_0x4 =\n         *(uint *)&(left_00->token).field_0x4 & 0xffffefff | uVar5 << 0xc;\n  }\n  return pbVar3;\n}" { (declaration "undefined *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "undefined4 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "bin_tree_t *pbVar3;" type_identifier (pointer_declarator "*pbVar3" * identifier) ;) (declaration "bin_tree_t *left_00;" type_identifier (pointer_declarator "*left_00" * identifier) ;) (declaration "bin_tree_t *right_00;" type_identifier (pointer_declarator "*right_00" * identifier) ;) (declaration "bin_tree_t *right_01;" type_identifier (pointer_declarator "*right_01" * identifier) ;) (declaration "anon_union_4_5_a39f51ca_for_opr aVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "re_dfa_t *dfa_00;" type_identifier (pointer_declarator "*dfa_00" * identifier) ;) (declaration "re_token_t t;" type_identifier identifier ;) (expression_statement "puVar1 = PTR___stack_chk_guard_00079c10;" (assignment_expression "puVar1 = PTR___stack_chk_guard_00079c10" identifier = identifier) ;) (expression_statement "puVar2 = *(undefined4 **)PTR___stack_chk_guard_00079c10;" (assignment_expression "puVar2 = *(undefined4 **)PTR___stack_chk_guard_00079c10" identifier = (pointer_expression "*(undefined4 **)PTR___stack_chk_guard_00079c10" * (cast_expression "(undefined4 **)PTR___stack_chk_guard_00079c10" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) ;) (expression_statement "t._4_1_ = (undefined1)type;" (assignment_expression "t._4_1_ = (undefined1)type" (field_expression "t._4_1_" identifier . field_identifier) = (cast_expression "(undefined1)type" ( (type_descriptor "undefined1" type_identifier) ) identifier)) ;) (expression_statement "pbVar3 = create_token_tree(dfa,left,right,&t);" (assignment_expression "pbVar3 = create_token_tree(dfa,left,right,&t)" identifier = (call_expression "create_token_tree(dfa,left,right,&t)" identifier (argument_list "(dfa,left,right,&t)" ( identifier , identifier , identifier , (pointer_expression "&t" & identifier) )))) ;) (if_statement "if (puVar2 == *(undefined4 **)puVar1) {\n    return pbVar3;\n  }" if (parenthesized_expression "(puVar2 == *(undefined4 **)puVar1)" ( (binary_expression "puVar2 == *(undefined4 **)puVar1" identifier == (pointer_expression "*(undefined4 **)puVar1" * (cast_expression "(undefined4 **)puVar1" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) )) (compound_statement "{\n    return pbVar3;\n  }" { (return_statement "return pbVar3;" return identifier ;) })) (expression_statement "(*(code *)PTR___stack_chk_fail_00079bd0)();" (call_expression "(*(code *)PTR___stack_chk_fail_00079bd0)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_00079bd0)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_00079bd0" * (cast_expression "(code *)PTR___stack_chk_fail_00079bd0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (expression_statement "dfa_00 = (re_dfa_t *)left->parent;" (assignment_expression "dfa_00 = (re_dfa_t *)left->parent" identifier = (cast_expression "(re_dfa_t *)left->parent" ( (type_descriptor "re_dfa_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "left->parent" identifier -> field_identifier))) ;) (expression_statement "pbVar3 = right->left;" (assignment_expression "pbVar3 = right->left" identifier = (field_expression "right->left" identifier -> field_identifier)) ;) (if_statement "if ((left->node_idx & 0x8000000) == 0) {\n    left_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_OPEN_SUBEXP);\n    right_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_CLOSE_SUBEXP);\n    right_01 = right_00;\n    if (pbVar3 == (bin_tree_t *)0x0) goto LAB_00047248;\n  }\n  else {\n    if (pbVar3 == (bin_tree_t *)0x0) {\n      left_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_OPEN_SUBEXP);\n      right_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_CLOSE_SUBEXP);\n      right_01 = right_00;\n      goto LAB_00047248;\n    }\n    uVar5 = (right->token).opr.idx;\n    if (0x1f < (int)uVar5) {\n      return pbVar3;\n    }\n    if ((dfa_00->used_bkref_map >> (uVar5 & 0x1f) & 1) == 0) {\n      return pbVar3;\n    }\n    left_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_OPEN_SUBEXP);\n    right_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_CLOSE_SUBEXP);\n  }" if (parenthesized_expression "((left->node_idx & 0x8000000) == 0)" ( (binary_expression "(left->node_idx & 0x8000000) == 0" (parenthesized_expression "(left->node_idx & 0x8000000)" ( (binary_expression "left->node_idx & 0x8000000" (field_expression "left->node_idx" identifier -> field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n    left_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_OPEN_SUBEXP);\n    right_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_CLOSE_SUBEXP);\n    right_01 = right_00;\n    if (pbVar3 == (bin_tree_t *)0x0) goto LAB_00047248;\n  }" { (expression_statement "left_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_OPEN_SUBEXP);" (assignment_expression "left_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_OPEN_SUBEXP)" identifier = (call_expression "create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_OPEN_SUBEXP)" identifier (argument_list "(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_OPEN_SUBEXP)" ( identifier , (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) , (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) , identifier )))) ;) (expression_statement "right_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_CLOSE_SUBEXP);" (assignment_expression "right_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_CLOSE_SUBEXP)" identifier = (call_expression "create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_CLOSE_SUBEXP)" identifier (argument_list "(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_CLOSE_SUBEXP)" ( identifier , (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) , (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) , identifier )))) ;) (expression_statement "right_01 = right_00;" (assignment_expression "right_01 = right_00" identifier = identifier) ;) (if_statement "if (pbVar3 == (bin_tree_t *)0x0) goto LAB_00047248;" if (parenthesized_expression "(pbVar3 == (bin_tree_t *)0x0)" ( (binary_expression "pbVar3 == (bin_tree_t *)0x0" identifier == (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00047248;" goto statement_identifier ;)) }) (else_clause "else {\n    if (pbVar3 == (bin_tree_t *)0x0) {\n      left_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_OPEN_SUBEXP);\n      right_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_CLOSE_SUBEXP);\n      right_01 = right_00;\n      goto LAB_00047248;\n    }\n    uVar5 = (right->token).opr.idx;\n    if (0x1f < (int)uVar5) {\n      return pbVar3;\n    }\n    if ((dfa_00->used_bkref_map >> (uVar5 & 0x1f) & 1) == 0) {\n      return pbVar3;\n    }\n    left_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_OPEN_SUBEXP);\n    right_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_CLOSE_SUBEXP);\n  }" else (compound_statement "{\n    if (pbVar3 == (bin_tree_t *)0x0) {\n      left_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_OPEN_SUBEXP);\n      right_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_CLOSE_SUBEXP);\n      right_01 = right_00;\n      goto LAB_00047248;\n    }\n    uVar5 = (right->token).opr.idx;\n    if (0x1f < (int)uVar5) {\n      return pbVar3;\n    }\n    if ((dfa_00->used_bkref_map >> (uVar5 & 0x1f) & 1) == 0) {\n      return pbVar3;\n    }\n    left_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_OPEN_SUBEXP);\n    right_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_CLOSE_SUBEXP);\n  }" { (if_statement "if (pbVar3 == (bin_tree_t *)0x0) {\n      left_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_OPEN_SUBEXP);\n      right_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_CLOSE_SUBEXP);\n      right_01 = right_00;\n      goto LAB_00047248;\n    }" if (parenthesized_expression "(pbVar3 == (bin_tree_t *)0x0)" ( (binary_expression "pbVar3 == (bin_tree_t *)0x0" identifier == (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      left_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_OPEN_SUBEXP);\n      right_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_CLOSE_SUBEXP);\n      right_01 = right_00;\n      goto LAB_00047248;\n    }" { (expression_statement "left_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_OPEN_SUBEXP);" (assignment_expression "left_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_OPEN_SUBEXP)" identifier = (call_expression "create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_OPEN_SUBEXP)" identifier (argument_list "(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_OPEN_SUBEXP)" ( identifier , (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) , (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) , identifier )))) ;) (expression_statement "right_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_CLOSE_SUBEXP);" (assignment_expression "right_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_CLOSE_SUBEXP)" identifier = (call_expression "create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_CLOSE_SUBEXP)" identifier (argument_list "(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_CLOSE_SUBEXP)" ( identifier , (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) , (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) , identifier )))) ;) (expression_statement "right_01 = right_00;" (assignment_expression "right_01 = right_00" identifier = identifier) ;) (goto_statement "goto LAB_00047248;" goto statement_identifier ;) })) (expression_statement "uVar5 = (right->token).opr.idx;" (assignment_expression "uVar5 = (right->token).opr.idx" identifier = (field_expression "(right->token).opr.idx" (field_expression "(right->token).opr" (parenthesized_expression "(right->token)" ( (field_expression "right->token" identifier -> field_identifier) )) . field_identifier) . field_identifier)) ;) (if_statement "if (0x1f < (int)uVar5) {\n      return pbVar3;\n    }" if (parenthesized_expression "(0x1f < (int)uVar5)" ( (binary_expression "0x1f < (int)uVar5" number_literal < (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n      return pbVar3;\n    }" { (return_statement "return pbVar3;" return identifier ;) })) (if_statement "if ((dfa_00->used_bkref_map >> (uVar5 & 0x1f) & 1) == 0) {\n      return pbVar3;\n    }" if (parenthesized_expression "((dfa_00->used_bkref_map >> (uVar5 & 0x1f) & 1) == 0)" ( (binary_expression "(dfa_00->used_bkref_map >> (uVar5 & 0x1f) & 1) == 0" (parenthesized_expression "(dfa_00->used_bkref_map >> (uVar5 & 0x1f) & 1)" ( (binary_expression "dfa_00->used_bkref_map >> (uVar5 & 0x1f) & 1" (binary_expression "dfa_00->used_bkref_map >> (uVar5 & 0x1f)" (field_expression "dfa_00->used_bkref_map" identifier -> field_identifier) >> (parenthesized_expression "(uVar5 & 0x1f)" ( (binary_expression "uVar5 & 0x1f" identifier & number_literal) ))) & number_literal) )) == number_literal) )) (compound_statement "{\n      return pbVar3;\n    }" { (return_statement "return pbVar3;" return identifier ;) })) (expression_statement "left_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_OPEN_SUBEXP);" (assignment_expression "left_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_OPEN_SUBEXP)" identifier = (call_expression "create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_OPEN_SUBEXP)" identifier (argument_list "(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_OPEN_SUBEXP)" ( identifier , (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) , (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) , identifier )))) ;) (expression_statement "right_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_CLOSE_SUBEXP);" (assignment_expression "right_00 = create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_CLOSE_SUBEXP)" identifier = (call_expression "create_tree(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_CLOSE_SUBEXP)" identifier (argument_list "(dfa_00,(bin_tree_t *)0x0,(bin_tree_t *)0x0,OP_CLOSE_SUBEXP)" ( identifier , (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) , (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) , identifier )))) ;) }))) (expression_statement "right_01 = create_tree(dfa_00,pbVar3,right_00,CONCAT);" (assignment_expression "right_01 = create_tree(dfa_00,pbVar3,right_00,CONCAT)" identifier = (call_expression "create_tree(dfa_00,pbVar3,right_00,CONCAT)" identifier (argument_list "(dfa_00,pbVar3,right_00,CONCAT)" ( identifier , identifier , identifier , identifier )))) ;) (labeled_statement "LAB_00047248:\n  pbVar3 = create_tree(dfa_00,left_00,right_01,CONCAT);" statement_identifier : (expression_statement "pbVar3 = create_tree(dfa_00,left_00,right_01,CONCAT);" (assignment_expression "pbVar3 = create_tree(dfa_00,left_00,right_01,CONCAT)" identifier = (call_expression "create_tree(dfa_00,left_00,right_01,CONCAT)" identifier (argument_list "(dfa_00,left_00,right_01,CONCAT)" ( identifier , identifier , identifier , identifier )))) ;)) (if_statement "if ((((pbVar3 == (bin_tree_t *)0x0) || (right_01 == (bin_tree_t *)0x0)) ||\n      (left_00 == (bin_tree_t *)0x0)) || (right_00 == (bin_tree_t *)0x0)) {\n    *puVar2 = 0xc;\n    pbVar3 = (bin_tree_t *)0x0;\n  }\n  else {\n    aVar4 = (right->token).opr;\n    (right_00->token).opr = aVar4;\n    (left_00->token).opr = aVar4;\n    uVar5 = (uint)(*(int *)&(right->token).field_0x4 << 0x13) >> 0x1f;\n    *(uint *)&(right_00->token).field_0x4 =\n         *(uint *)&(right_00->token).field_0x4 & 0xffffefff | uVar5 << 0xc;\n    *(uint *)&(left_00->token).field_0x4 =\n         *(uint *)&(left_00->token).field_0x4 & 0xffffefff | uVar5 << 0xc;\n  }" if (parenthesized_expression "((((pbVar3 == (bin_tree_t *)0x0) || (right_01 == (bin_tree_t *)0x0)) ||\n      (left_00 == (bin_tree_t *)0x0)) || (right_00 == (bin_tree_t *)0x0))" ( (binary_expression "(((pbVar3 == (bin_tree_t *)0x0) || (right_01 == (bin_tree_t *)0x0)) ||\n      (left_00 == (bin_tree_t *)0x0)) || (right_00 == (bin_tree_t *)0x0)" (parenthesized_expression "(((pbVar3 == (bin_tree_t *)0x0) || (right_01 == (bin_tree_t *)0x0)) ||\n      (left_00 == (bin_tree_t *)0x0))" ( (binary_expression "((pbVar3 == (bin_tree_t *)0x0) || (right_01 == (bin_tree_t *)0x0)) ||\n      (left_00 == (bin_tree_t *)0x0)" (parenthesized_expression "((pbVar3 == (bin_tree_t *)0x0) || (right_01 == (bin_tree_t *)0x0))" ( (binary_expression "(pbVar3 == (bin_tree_t *)0x0) || (right_01 == (bin_tree_t *)0x0)" (parenthesized_expression "(pbVar3 == (bin_tree_t *)0x0)" ( (binary_expression "pbVar3 == (bin_tree_t *)0x0" identifier == (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "(right_01 == (bin_tree_t *)0x0)" ( (binary_expression "right_01 == (bin_tree_t *)0x0" identifier == (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) || (parenthesized_expression "(left_00 == (bin_tree_t *)0x0)" ( (binary_expression "left_00 == (bin_tree_t *)0x0" identifier == (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) || (parenthesized_expression "(right_00 == (bin_tree_t *)0x0)" ( (binary_expression "right_00 == (bin_tree_t *)0x0" identifier == (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n    *puVar2 = 0xc;\n    pbVar3 = (bin_tree_t *)0x0;\n  }" { (expression_statement "*puVar2 = 0xc;" (assignment_expression "*puVar2 = 0xc" (pointer_expression "*puVar2" * identifier) = number_literal) ;) (expression_statement "pbVar3 = (bin_tree_t *)0x0;" (assignment_expression "pbVar3 = (bin_tree_t *)0x0" identifier = (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else {\n    aVar4 = (right->token).opr;\n    (right_00->token).opr = aVar4;\n    (left_00->token).opr = aVar4;\n    uVar5 = (uint)(*(int *)&(right->token).field_0x4 << 0x13) >> 0x1f;\n    *(uint *)&(right_00->token).field_0x4 =\n         *(uint *)&(right_00->token).field_0x4 & 0xffffefff | uVar5 << 0xc;\n    *(uint *)&(left_00->token).field_0x4 =\n         *(uint *)&(left_00->token).field_0x4 & 0xffffefff | uVar5 << 0xc;\n  }" else (compound_statement "{\n    aVar4 = (right->token).opr;\n    (right_00->token).opr = aVar4;\n    (left_00->token).opr = aVar4;\n    uVar5 = (uint)(*(int *)&(right->token).field_0x4 << 0x13) >> 0x1f;\n    *(uint *)&(right_00->token).field_0x4 =\n         *(uint *)&(right_00->token).field_0x4 & 0xffffefff | uVar5 << 0xc;\n    *(uint *)&(left_00->token).field_0x4 =\n         *(uint *)&(left_00->token).field_0x4 & 0xffffefff | uVar5 << 0xc;\n  }" { (expression_statement "aVar4 = (right->token).opr;" (assignment_expression "aVar4 = (right->token).opr" identifier = (field_expression "(right->token).opr" (parenthesized_expression "(right->token)" ( (field_expression "right->token" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "(right_00->token).opr = aVar4;" (assignment_expression "(right_00->token).opr = aVar4" (field_expression "(right_00->token).opr" (parenthesized_expression "(right_00->token)" ( (field_expression "right_00->token" identifier -> field_identifier) )) . field_identifier) = identifier) ;) (expression_statement "(left_00->token).opr = aVar4;" (assignment_expression "(left_00->token).opr = aVar4" (field_expression "(left_00->token).opr" (parenthesized_expression "(left_00->token)" ( (field_expression "left_00->token" identifier -> field_identifier) )) . field_identifier) = identifier) ;) (expression_statement "uVar5 = (uint)(*(int *)&(right->token).field_0x4 << 0x13) >> 0x1f;" (assignment_expression "uVar5 = (uint)(*(int *)&(right->token).field_0x4 << 0x13) >> 0x1f" identifier = (binary_expression "(uint)(*(int *)&(right->token).field_0x4 << 0x13) >> 0x1f" (call_expression "(uint)(*(int *)&(right->token).field_0x4 << 0x13)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*(int *)&(right->token).field_0x4 << 0x13)" ( (binary_expression "*(int *)&(right->token).field_0x4 << 0x13" (pointer_expression "*(int *)&(right->token).field_0x4" * (cast_expression "(int *)&(right->token).field_0x4" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&(right->token).field_0x4" & (field_expression "(right->token).field_0x4" (parenthesized_expression "(right->token)" ( (field_expression "right->token" identifier -> field_identifier) )) . field_identifier)))) << number_literal) ))) >> number_literal)) ;) (expression_statement "*(uint *)&(right_00->token).field_0x4 =\n         *(uint *)&(right_00->token).field_0x4 & 0xffffefff | uVar5 << 0xc;" (assignment_expression "*(uint *)&(right_00->token).field_0x4 =\n         *(uint *)&(right_00->token).field_0x4 & 0xffffefff | uVar5 << 0xc" (pointer_expression "*(uint *)&(right_00->token).field_0x4" * (cast_expression "(uint *)&(right_00->token).field_0x4" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&(right_00->token).field_0x4" & (field_expression "(right_00->token).field_0x4" (parenthesized_expression "(right_00->token)" ( (field_expression "right_00->token" identifier -> field_identifier) )) . field_identifier)))) = (binary_expression "*(uint *)&(right_00->token).field_0x4 & 0xffffefff | uVar5 << 0xc" (binary_expression "*(uint *)&(right_00->token).field_0x4 & 0xffffefff" (pointer_expression "*(uint *)&(right_00->token).field_0x4" * (cast_expression "(uint *)&(right_00->token).field_0x4" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&(right_00->token).field_0x4" & (field_expression "(right_00->token).field_0x4" (parenthesized_expression "(right_00->token)" ( (field_expression "right_00->token" identifier -> field_identifier) )) . field_identifier)))) & number_literal) | (binary_expression "uVar5 << 0xc" identifier << number_literal))) ;) (expression_statement "*(uint *)&(left_00->token).field_0x4 =\n         *(uint *)&(left_00->token).field_0x4 & 0xffffefff | uVar5 << 0xc;" (assignment_expression "*(uint *)&(left_00->token).field_0x4 =\n         *(uint *)&(left_00->token).field_0x4 & 0xffffefff | uVar5 << 0xc" (pointer_expression "*(uint *)&(left_00->token).field_0x4" * (cast_expression "(uint *)&(left_00->token).field_0x4" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&(left_00->token).field_0x4" & (field_expression "(left_00->token).field_0x4" (parenthesized_expression "(left_00->token)" ( (field_expression "left_00->token" identifier -> field_identifier) )) . field_identifier)))) = (binary_expression "*(uint *)&(left_00->token).field_0x4 & 0xffffefff | uVar5 << 0xc" (binary_expression "*(uint *)&(left_00->token).field_0x4 & 0xffffefff" (pointer_expression "*(uint *)&(left_00->token).field_0x4" * (cast_expression "(uint *)&(left_00->token).field_0x4" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&(left_00->token).field_0x4" & (field_expression "(left_00->token).field_0x4" (parenthesized_expression "(left_00->token)" ( (field_expression "left_00->token" identifier -> field_identifier) )) . field_identifier)))) & number_literal) | (binary_expression "uVar5 << 0xc" identifier << number_literal))) ;) }))) (return_statement "return pbVar3;" return identifier ;) })))
(translation_unit "int FUN_000470f0(undefined4 param_1,int *param_2,int param_3)\n\n{\n  uint uVar1;\n  undefined4 *puVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  undefined4 uVar7;\n  int iVar8;\n  undefined *puVar9;\n  \n  puVar9 = PTR___stack_chk_guard_00079c10;\n  puVar2 = *(undefined4 **)PTR___stack_chk_guard_00079c10;\n  iVar3 = FUN_00046ed4();\n  if (puVar2 == *(undefined4 **)puVar9) {\n    return iVar3;\n  }\n  puVar9 = PTR___stack_chk_fail_00079bd0;\n  (*(code *)PTR___stack_chk_fail_00079bd0)();\n  puVar9 = puVar9 + 0x3a424;\n  iVar8 = *param_2;\n  iVar3 = *(int *)(param_3 + 4);\n  if ((*(byte *)(param_2 + 7) & 8) == 0) {\n    iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n    iVar5 = FUN_000470f0(iVar8,0,0,9);\n    iVar6 = iVar5;\n    if (iVar3 == 0) goto LAB_00047248;\n  }\n  else {\n    if (iVar3 == 0) {\n      iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n      iVar5 = FUN_000470f0(iVar8,0,0,9);\n      iVar6 = iVar5;\n      goto LAB_00047248;\n    }\n    if (0x1f < (int)*(uint *)(param_3 + 0x14)) {\n      return iVar3;\n    }\n    if ((*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f) & 1) == 0) {\n      return iVar3;\n    }\n    iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n    iVar5 = FUN_000470f0(iVar8,0,0,9);\n  }\n  iVar6 = FUN_000470f0(iVar8,iVar3,iVar5,0x10,puVar9);\nLAB_00047248:\n  iVar3 = FUN_000470f0(iVar8,iVar4,iVar6,0x10,puVar9);\n  if ((((iVar3 == 0) || (iVar6 == 0)) || (iVar4 == 0)) || (iVar5 == 0)) {\n    *puVar2 = 0xc;\n    iVar3 = 0;\n  }\n  else {\n    uVar7 = *(undefined4 *)(param_3 + 0x14);\n    *(undefined4 *)(iVar5 + 0x14) = uVar7;\n    *(undefined4 *)(iVar4 + 0x14) = uVar7;\n    uVar1 = (uint)(*(int *)(param_3 + 0x18) << 0x13) >> 0x1f;\n    *(uint *)(iVar5 + 0x18) = *(uint *)(iVar5 + 0x18) & 0xffffefff | uVar1 << 0xc;\n    *(uint *)(iVar4 + 0x18) = *(uint *)(iVar4 + 0x18) & 0xffffefff | uVar1 << 0xc;\n  }\n  return iVar3;\n}\n\n" (function_definition "int FUN_000470f0(undefined4 param_1,int *param_2,int param_3)\n\n{\n  uint uVar1;\n  undefined4 *puVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  undefined4 uVar7;\n  int iVar8;\n  undefined *puVar9;\n  \n  puVar9 = PTR___stack_chk_guard_00079c10;\n  puVar2 = *(undefined4 **)PTR___stack_chk_guard_00079c10;\n  iVar3 = FUN_00046ed4();\n  if (puVar2 == *(undefined4 **)puVar9) {\n    return iVar3;\n  }\n  puVar9 = PTR___stack_chk_fail_00079bd0;\n  (*(code *)PTR___stack_chk_fail_00079bd0)();\n  puVar9 = puVar9 + 0x3a424;\n  iVar8 = *param_2;\n  iVar3 = *(int *)(param_3 + 4);\n  if ((*(byte *)(param_2 + 7) & 8) == 0) {\n    iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n    iVar5 = FUN_000470f0(iVar8,0,0,9);\n    iVar6 = iVar5;\n    if (iVar3 == 0) goto LAB_00047248;\n  }\n  else {\n    if (iVar3 == 0) {\n      iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n      iVar5 = FUN_000470f0(iVar8,0,0,9);\n      iVar6 = iVar5;\n      goto LAB_00047248;\n    }\n    if (0x1f < (int)*(uint *)(param_3 + 0x14)) {\n      return iVar3;\n    }\n    if ((*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f) & 1) == 0) {\n      return iVar3;\n    }\n    iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n    iVar5 = FUN_000470f0(iVar8,0,0,9);\n  }\n  iVar6 = FUN_000470f0(iVar8,iVar3,iVar5,0x10,puVar9);\nLAB_00047248:\n  iVar3 = FUN_000470f0(iVar8,iVar4,iVar6,0x10,puVar9);\n  if ((((iVar3 == 0) || (iVar6 == 0)) || (iVar4 == 0)) || (iVar5 == 0)) {\n    *puVar2 = 0xc;\n    iVar3 = 0;\n  }\n  else {\n    uVar7 = *(undefined4 *)(param_3 + 0x14);\n    *(undefined4 *)(iVar5 + 0x14) = uVar7;\n    *(undefined4 *)(iVar4 + 0x14) = uVar7;\n    uVar1 = (uint)(*(int *)(param_3 + 0x18) << 0x13) >> 0x1f;\n    *(uint *)(iVar5 + 0x18) = *(uint *)(iVar5 + 0x18) & 0xffffefff | uVar1 << 0xc;\n    *(uint *)(iVar4 + 0x18) = *(uint *)(iVar4 + 0x18) & 0xffffefff | uVar1 << 0xc;\n  }\n  return iVar3;\n}" primitive_type (function_declarator "FUN_000470f0(undefined4 param_1,int *param_2,int param_3)" identifier (parameter_list "(undefined4 param_1,int *param_2,int param_3)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  uint uVar1;\n  undefined4 *puVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  undefined4 uVar7;\n  int iVar8;\n  undefined *puVar9;\n  \n  puVar9 = PTR___stack_chk_guard_00079c10;\n  puVar2 = *(undefined4 **)PTR___stack_chk_guard_00079c10;\n  iVar3 = FUN_00046ed4();\n  if (puVar2 == *(undefined4 **)puVar9) {\n    return iVar3;\n  }\n  puVar9 = PTR___stack_chk_fail_00079bd0;\n  (*(code *)PTR___stack_chk_fail_00079bd0)();\n  puVar9 = puVar9 + 0x3a424;\n  iVar8 = *param_2;\n  iVar3 = *(int *)(param_3 + 4);\n  if ((*(byte *)(param_2 + 7) & 8) == 0) {\n    iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n    iVar5 = FUN_000470f0(iVar8,0,0,9);\n    iVar6 = iVar5;\n    if (iVar3 == 0) goto LAB_00047248;\n  }\n  else {\n    if (iVar3 == 0) {\n      iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n      iVar5 = FUN_000470f0(iVar8,0,0,9);\n      iVar6 = iVar5;\n      goto LAB_00047248;\n    }\n    if (0x1f < (int)*(uint *)(param_3 + 0x14)) {\n      return iVar3;\n    }\n    if ((*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f) & 1) == 0) {\n      return iVar3;\n    }\n    iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n    iVar5 = FUN_000470f0(iVar8,0,0,9);\n  }\n  iVar6 = FUN_000470f0(iVar8,iVar3,iVar5,0x10,puVar9);\nLAB_00047248:\n  iVar3 = FUN_000470f0(iVar8,iVar4,iVar6,0x10,puVar9);\n  if ((((iVar3 == 0) || (iVar6 == 0)) || (iVar4 == 0)) || (iVar5 == 0)) {\n    *puVar2 = 0xc;\n    iVar3 = 0;\n  }\n  else {\n    uVar7 = *(undefined4 *)(param_3 + 0x14);\n    *(undefined4 *)(iVar5 + 0x14) = uVar7;\n    *(undefined4 *)(iVar4 + 0x14) = uVar7;\n    uVar1 = (uint)(*(int *)(param_3 + 0x18) << 0x13) >> 0x1f;\n    *(uint *)(iVar5 + 0x18) = *(uint *)(iVar5 + 0x18) & 0xffffefff | uVar1 << 0xc;\n    *(uint *)(iVar4 + 0x18) = *(uint *)(iVar4 + 0x18) & 0xffffefff | uVar1 << 0xc;\n  }\n  return iVar3;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "undefined4 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "undefined4 uVar7;" type_identifier identifier ;) (declaration "int iVar8;" primitive_type identifier ;) (declaration "undefined *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (expression_statement "puVar9 = PTR___stack_chk_guard_00079c10;" (assignment_expression "puVar9 = PTR___stack_chk_guard_00079c10" identifier = identifier) ;) (expression_statement "puVar2 = *(undefined4 **)PTR___stack_chk_guard_00079c10;" (assignment_expression "puVar2 = *(undefined4 **)PTR___stack_chk_guard_00079c10" identifier = (pointer_expression "*(undefined4 **)PTR___stack_chk_guard_00079c10" * (cast_expression "(undefined4 **)PTR___stack_chk_guard_00079c10" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) ;) (expression_statement "iVar3 = FUN_00046ed4();" (assignment_expression "iVar3 = FUN_00046ed4()" identifier = (call_expression "FUN_00046ed4()" identifier (argument_list "()" ( )))) ;) (if_statement "if (puVar2 == *(undefined4 **)puVar9) {\n    return iVar3;\n  }" if (parenthesized_expression "(puVar2 == *(undefined4 **)puVar9)" ( (binary_expression "puVar2 == *(undefined4 **)puVar9" identifier == (pointer_expression "*(undefined4 **)puVar9" * (cast_expression "(undefined4 **)puVar9" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) )) (compound_statement "{\n    return iVar3;\n  }" { (return_statement "return iVar3;" return identifier ;) })) (expression_statement "puVar9 = PTR___stack_chk_fail_00079bd0;" (assignment_expression "puVar9 = PTR___stack_chk_fail_00079bd0" identifier = identifier) ;) (expression_statement "(*(code *)PTR___stack_chk_fail_00079bd0)();" (call_expression "(*(code *)PTR___stack_chk_fail_00079bd0)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_00079bd0)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_00079bd0" * (cast_expression "(code *)PTR___stack_chk_fail_00079bd0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (expression_statement "puVar9 = puVar9 + 0x3a424;" (assignment_expression "puVar9 = puVar9 + 0x3a424" identifier = (binary_expression "puVar9 + 0x3a424" identifier + number_literal)) ;) (expression_statement "iVar8 = *param_2;" (assignment_expression "iVar8 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "iVar3 = *(int *)(param_3 + 4);" (assignment_expression "iVar3 = *(int *)(param_3 + 4)" identifier = (pointer_expression "*(int *)(param_3 + 4)" * (cast_expression "(int *)(param_3 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) ))))) ;) (if_statement "if ((*(byte *)(param_2 + 7) & 8) == 0) {\n    iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n    iVar5 = FUN_000470f0(iVar8,0,0,9);\n    iVar6 = iVar5;\n    if (iVar3 == 0) goto LAB_00047248;\n  }\n  else {\n    if (iVar3 == 0) {\n      iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n      iVar5 = FUN_000470f0(iVar8,0,0,9);\n      iVar6 = iVar5;\n      goto LAB_00047248;\n    }\n    if (0x1f < (int)*(uint *)(param_3 + 0x14)) {\n      return iVar3;\n    }\n    if ((*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f) & 1) == 0) {\n      return iVar3;\n    }\n    iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n    iVar5 = FUN_000470f0(iVar8,0,0,9);\n  }" if (parenthesized_expression "((*(byte *)(param_2 + 7) & 8) == 0)" ( (binary_expression "(*(byte *)(param_2 + 7) & 8) == 0" (parenthesized_expression "(*(byte *)(param_2 + 7) & 8)" ( (binary_expression "*(byte *)(param_2 + 7) & 8" (pointer_expression "*(byte *)(param_2 + 7)" * (cast_expression "(byte *)(param_2 + 7)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 7)" ( (binary_expression "param_2 + 7" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n    iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n    iVar5 = FUN_000470f0(iVar8,0,0,9);\n    iVar6 = iVar5;\n    if (iVar3 == 0) goto LAB_00047248;\n  }" { (expression_statement "iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);" (assignment_expression "iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9)" identifier = (call_expression "FUN_000470f0(iVar8,0,0,8,puVar9)" identifier (argument_list "(iVar8,0,0,8,puVar9)" ( identifier , number_literal , number_literal , number_literal , identifier )))) ;) (expression_statement "iVar5 = FUN_000470f0(iVar8,0,0,9);" (assignment_expression "iVar5 = FUN_000470f0(iVar8,0,0,9)" identifier = (call_expression "FUN_000470f0(iVar8,0,0,9)" identifier (argument_list "(iVar8,0,0,9)" ( identifier , number_literal , number_literal , number_literal )))) ;) (expression_statement "iVar6 = iVar5;" (assignment_expression "iVar6 = iVar5" identifier = identifier) ;) (if_statement "if (iVar3 == 0) goto LAB_00047248;" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (goto_statement "goto LAB_00047248;" goto statement_identifier ;)) }) (else_clause "else {\n    if (iVar3 == 0) {\n      iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n      iVar5 = FUN_000470f0(iVar8,0,0,9);\n      iVar6 = iVar5;\n      goto LAB_00047248;\n    }\n    if (0x1f < (int)*(uint *)(param_3 + 0x14)) {\n      return iVar3;\n    }\n    if ((*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f) & 1) == 0) {\n      return iVar3;\n    }\n    iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n    iVar5 = FUN_000470f0(iVar8,0,0,9);\n  }" else (compound_statement "{\n    if (iVar3 == 0) {\n      iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n      iVar5 = FUN_000470f0(iVar8,0,0,9);\n      iVar6 = iVar5;\n      goto LAB_00047248;\n    }\n    if (0x1f < (int)*(uint *)(param_3 + 0x14)) {\n      return iVar3;\n    }\n    if ((*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f) & 1) == 0) {\n      return iVar3;\n    }\n    iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n    iVar5 = FUN_000470f0(iVar8,0,0,9);\n  }" { (if_statement "if (iVar3 == 0) {\n      iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n      iVar5 = FUN_000470f0(iVar8,0,0,9);\n      iVar6 = iVar5;\n      goto LAB_00047248;\n    }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n      iVar5 = FUN_000470f0(iVar8,0,0,9);\n      iVar6 = iVar5;\n      goto LAB_00047248;\n    }" { (expression_statement "iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);" (assignment_expression "iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9)" identifier = (call_expression "FUN_000470f0(iVar8,0,0,8,puVar9)" identifier (argument_list "(iVar8,0,0,8,puVar9)" ( identifier , number_literal , number_literal , number_literal , identifier )))) ;) (expression_statement "iVar5 = FUN_000470f0(iVar8,0,0,9);" (assignment_expression "iVar5 = FUN_000470f0(iVar8,0,0,9)" identifier = (call_expression "FUN_000470f0(iVar8,0,0,9)" identifier (argument_list "(iVar8,0,0,9)" ( identifier , number_literal , number_literal , number_literal )))) ;) (expression_statement "iVar6 = iVar5;" (assignment_expression "iVar6 = iVar5" identifier = identifier) ;) (goto_statement "goto LAB_00047248;" goto statement_identifier ;) })) (if_statement "if (0x1f < (int)*(uint *)(param_3 + 0x14)) {\n      return iVar3;\n    }" if (parenthesized_expression "(0x1f < (int)*(uint *)(param_3 + 0x14))" ( (binary_expression "0x1f < (int)*(uint *)(param_3 + 0x14)" number_literal < (cast_expression "(int)*(uint *)(param_3 + 0x14)" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*(uint *)(param_3 + 0x14)" * (cast_expression "(uint *)(param_3 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x14)" ( (binary_expression "param_3 + 0x14" identifier + number_literal) )))))) )) (compound_statement "{\n      return iVar3;\n    }" { (return_statement "return iVar3;" return identifier ;) })) (if_statement "if ((*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f) & 1) == 0) {\n      return iVar3;\n    }" if (parenthesized_expression "((*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f) & 1) == 0)" ( (binary_expression "(*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f) & 1) == 0" (parenthesized_expression "(*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f) & 1)" ( (binary_expression "*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f) & 1" (binary_expression "*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f)" (pointer_expression "*(uint *)(iVar8 + 0x50)" * (cast_expression "(uint *)(iVar8 + 0x50)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar8 + 0x50)" ( (binary_expression "iVar8 + 0x50" identifier + number_literal) )))) >> (parenthesized_expression "(*(uint *)(param_3 + 0x14) & 0x1f)" ( (binary_expression "*(uint *)(param_3 + 0x14) & 0x1f" (pointer_expression "*(uint *)(param_3 + 0x14)" * (cast_expression "(uint *)(param_3 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x14)" ( (binary_expression "param_3 + 0x14" identifier + number_literal) )))) & number_literal) ))) & number_literal) )) == number_literal) )) (compound_statement "{\n      return iVar3;\n    }" { (return_statement "return iVar3;" return identifier ;) })) (expression_statement "iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);" (assignment_expression "iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9)" identifier = (call_expression "FUN_000470f0(iVar8,0,0,8,puVar9)" identifier (argument_list "(iVar8,0,0,8,puVar9)" ( identifier , number_literal , number_literal , number_literal , identifier )))) ;) (expression_statement "iVar5 = FUN_000470f0(iVar8,0,0,9);" (assignment_expression "iVar5 = FUN_000470f0(iVar8,0,0,9)" identifier = (call_expression "FUN_000470f0(iVar8,0,0,9)" identifier (argument_list "(iVar8,0,0,9)" ( identifier , number_literal , number_literal , number_literal )))) ;) }))) (expression_statement "iVar6 = FUN_000470f0(iVar8,iVar3,iVar5,0x10,puVar9);" (assignment_expression "iVar6 = FUN_000470f0(iVar8,iVar3,iVar5,0x10,puVar9)" identifier = (call_expression "FUN_000470f0(iVar8,iVar3,iVar5,0x10,puVar9)" identifier (argument_list "(iVar8,iVar3,iVar5,0x10,puVar9)" ( identifier , identifier , identifier , number_literal , identifier )))) ;) (labeled_statement "LAB_00047248:\n  iVar3 = FUN_000470f0(iVar8,iVar4,iVar6,0x10,puVar9);" statement_identifier : (expression_statement "iVar3 = FUN_000470f0(iVar8,iVar4,iVar6,0x10,puVar9);" (assignment_expression "iVar3 = FUN_000470f0(iVar8,iVar4,iVar6,0x10,puVar9)" identifier = (call_expression "FUN_000470f0(iVar8,iVar4,iVar6,0x10,puVar9)" identifier (argument_list "(iVar8,iVar4,iVar6,0x10,puVar9)" ( identifier , identifier , identifier , number_literal , identifier )))) ;)) (if_statement "if ((((iVar3 == 0) || (iVar6 == 0)) || (iVar4 == 0)) || (iVar5 == 0)) {\n    *puVar2 = 0xc;\n    iVar3 = 0;\n  }\n  else {\n    uVar7 = *(undefined4 *)(param_3 + 0x14);\n    *(undefined4 *)(iVar5 + 0x14) = uVar7;\n    *(undefined4 *)(iVar4 + 0x14) = uVar7;\n    uVar1 = (uint)(*(int *)(param_3 + 0x18) << 0x13) >> 0x1f;\n    *(uint *)(iVar5 + 0x18) = *(uint *)(iVar5 + 0x18) & 0xffffefff | uVar1 << 0xc;\n    *(uint *)(iVar4 + 0x18) = *(uint *)(iVar4 + 0x18) & 0xffffefff | uVar1 << 0xc;\n  }" if (parenthesized_expression "((((iVar3 == 0) || (iVar6 == 0)) || (iVar4 == 0)) || (iVar5 == 0))" ( (binary_expression "(((iVar3 == 0) || (iVar6 == 0)) || (iVar4 == 0)) || (iVar5 == 0)" (parenthesized_expression "(((iVar3 == 0) || (iVar6 == 0)) || (iVar4 == 0))" ( (binary_expression "((iVar3 == 0) || (iVar6 == 0)) || (iVar4 == 0)" (parenthesized_expression "((iVar3 == 0) || (iVar6 == 0))" ( (binary_expression "(iVar3 == 0) || (iVar6 == 0)" (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) || (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) ))) )) || (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) ))) )) || (parenthesized_expression "(iVar5 == 0)" ( (binary_expression "iVar5 == 0" identifier == number_literal) ))) )) (compound_statement "{\n    *puVar2 = 0xc;\n    iVar3 = 0;\n  }" { (expression_statement "*puVar2 = 0xc;" (assignment_expression "*puVar2 = 0xc" (pointer_expression "*puVar2" * identifier) = number_literal) ;) (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) }) (else_clause "else {\n    uVar7 = *(undefined4 *)(param_3 + 0x14);\n    *(undefined4 *)(iVar5 + 0x14) = uVar7;\n    *(undefined4 *)(iVar4 + 0x14) = uVar7;\n    uVar1 = (uint)(*(int *)(param_3 + 0x18) << 0x13) >> 0x1f;\n    *(uint *)(iVar5 + 0x18) = *(uint *)(iVar5 + 0x18) & 0xffffefff | uVar1 << 0xc;\n    *(uint *)(iVar4 + 0x18) = *(uint *)(iVar4 + 0x18) & 0xffffefff | uVar1 << 0xc;\n  }" else (compound_statement "{\n    uVar7 = *(undefined4 *)(param_3 + 0x14);\n    *(undefined4 *)(iVar5 + 0x14) = uVar7;\n    *(undefined4 *)(iVar4 + 0x14) = uVar7;\n    uVar1 = (uint)(*(int *)(param_3 + 0x18) << 0x13) >> 0x1f;\n    *(uint *)(iVar5 + 0x18) = *(uint *)(iVar5 + 0x18) & 0xffffefff | uVar1 << 0xc;\n    *(uint *)(iVar4 + 0x18) = *(uint *)(iVar4 + 0x18) & 0xffffefff | uVar1 << 0xc;\n  }" { (expression_statement "uVar7 = *(undefined4 *)(param_3 + 0x14);" (assignment_expression "uVar7 = *(undefined4 *)(param_3 + 0x14)" identifier = (pointer_expression "*(undefined4 *)(param_3 + 0x14)" * (cast_expression "(undefined4 *)(param_3 + 0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x14)" ( (binary_expression "param_3 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "*(undefined4 *)(iVar5 + 0x14) = uVar7;" (assignment_expression "*(undefined4 *)(iVar5 + 0x14) = uVar7" (pointer_expression "*(undefined4 *)(iVar5 + 0x14)" * (cast_expression "(undefined4 *)(iVar5 + 0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 0x14)" ( (binary_expression "iVar5 + 0x14" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(iVar4 + 0x14) = uVar7;" (assignment_expression "*(undefined4 *)(iVar4 + 0x14) = uVar7" (pointer_expression "*(undefined4 *)(iVar4 + 0x14)" * (cast_expression "(undefined4 *)(iVar4 + 0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x14)" ( (binary_expression "iVar4 + 0x14" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar1 = (uint)(*(int *)(param_3 + 0x18) << 0x13) >> 0x1f;" (assignment_expression "uVar1 = (uint)(*(int *)(param_3 + 0x18) << 0x13) >> 0x1f" identifier = (binary_expression "(uint)(*(int *)(param_3 + 0x18) << 0x13) >> 0x1f" (call_expression "(uint)(*(int *)(param_3 + 0x18) << 0x13)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*(int *)(param_3 + 0x18) << 0x13)" ( (binary_expression "*(int *)(param_3 + 0x18) << 0x13" (pointer_expression "*(int *)(param_3 + 0x18)" * (cast_expression "(int *)(param_3 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x18)" ( (binary_expression "param_3 + 0x18" identifier + number_literal) )))) << number_literal) ))) >> number_literal)) ;) (expression_statement "*(uint *)(iVar5 + 0x18) = *(uint *)(iVar5 + 0x18) & 0xffffefff | uVar1 << 0xc;" (assignment_expression "*(uint *)(iVar5 + 0x18) = *(uint *)(iVar5 + 0x18) & 0xffffefff | uVar1 << 0xc" (pointer_expression "*(uint *)(iVar5 + 0x18)" * (cast_expression "(uint *)(iVar5 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 0x18)" ( (binary_expression "iVar5 + 0x18" identifier + number_literal) )))) = (binary_expression "*(uint *)(iVar5 + 0x18) & 0xffffefff | uVar1 << 0xc" (binary_expression "*(uint *)(iVar5 + 0x18) & 0xffffefff" (pointer_expression "*(uint *)(iVar5 + 0x18)" * (cast_expression "(uint *)(iVar5 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 0x18)" ( (binary_expression "iVar5 + 0x18" identifier + number_literal) )))) & number_literal) | (binary_expression "uVar1 << 0xc" identifier << number_literal))) ;) (expression_statement "*(uint *)(iVar4 + 0x18) = *(uint *)(iVar4 + 0x18) & 0xffffefff | uVar1 << 0xc;" (assignment_expression "*(uint *)(iVar4 + 0x18) = *(uint *)(iVar4 + 0x18) & 0xffffefff | uVar1 << 0xc" (pointer_expression "*(uint *)(iVar4 + 0x18)" * (cast_expression "(uint *)(iVar4 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x18)" ( (binary_expression "iVar4 + 0x18" identifier + number_literal) )))) = (binary_expression "*(uint *)(iVar4 + 0x18) & 0xffffefff | uVar1 << 0xc" (binary_expression "*(uint *)(iVar4 + 0x18) & 0xffffefff" (pointer_expression "*(uint *)(iVar4 + 0x18)" * (cast_expression "(uint *)(iVar4 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + 0x18)" ( (binary_expression "iVar4 + 0x18" identifier + number_literal) )))) & number_literal) | (binary_expression "uVar1 << 0xc" identifier << number_literal))) ;) }))) (return_statement "return iVar3;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (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 IDENT (argument_list ( )))) ;) (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 = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression 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) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , LIT , LIT , LIT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , LIT , LIT , LIT )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , LIT , LIT , LIT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , LIT , LIT , LIT )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) )) (compound_statement { (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (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) )))) & LIT) ))) & LIT) )) == LIT) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , LIT , LIT , LIT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , LIT , LIT , LIT )))) ;) }))) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , LIT , IDENT )))) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , LIT , IDENT )))) ;)) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) || (parenthesized_expression ( (binary_expression IDENT == LIT) ))) )) || (parenthesized_expression ( (binary_expression IDENT == LIT) ))) )) || (parenthesized_expression ( (binary_expression IDENT == LIT) ))) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) << LIT) ))) >> LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) | (binary_expression IDENT << LIT))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) | (binary_expression IDENT << LIT))) ;) }))) (return_statement return IDENT ;) })))
(function_definition "int FUN_000470f0(undefined4 param_1,int *param_2,int param_3)\n\n{\n  uint uVar1;\n  undefined4 *puVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  undefined4 uVar7;\n  int iVar8;\n  undefined *puVar9;\n  \n  puVar9 = PTR___stack_chk_guard_00079c10;\n  puVar2 = *(undefined4 **)PTR___stack_chk_guard_00079c10;\n  iVar3 = FUN_00046ed4();\n  if (puVar2 == *(undefined4 **)puVar9) {\n    return iVar3;\n  }\n  puVar9 = PTR___stack_chk_fail_00079bd0;\n  (*(code *)PTR___stack_chk_fail_00079bd0)();\n  puVar9 = puVar9 + 0x3a424;\n  iVar8 = *param_2;\n  iVar3 = *(int *)(param_3 + 4);\n  if ((*(byte *)(param_2 + 7) & 8) == 0) {\n    iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n    iVar5 = FUN_000470f0(iVar8,0,0,9);\n    iVar6 = iVar5;\n    if (iVar3 == 0) goto LAB_00047248;\n  }\n  else {\n    if (iVar3 == 0) {\n      iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n      iVar5 = FUN_000470f0(iVar8,0,0,9);\n      iVar6 = iVar5;\n      goto LAB_00047248;\n    }\n    if (0x1f < (int)*(uint *)(param_3 + 0x14)) {\n      return iVar3;\n    }\n    if ((*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f) & 1) == 0) {\n      return iVar3;\n    }\n    iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n    iVar5 = FUN_000470f0(iVar8,0,0,9);\n  }\n  iVar6 = FUN_000470f0(iVar8,iVar3,iVar5,0x10,puVar9);\nLAB_00047248:\n  iVar3 = FUN_000470f0(iVar8,iVar4,iVar6,0x10,puVar9);\n  if ((((iVar3 == 0) || (iVar6 == 0)) || (iVar4 == 0)) || (iVar5 == 0)) {\n    *puVar2 = 0xc;\n    iVar3 = 0;\n  }\n  else {\n    uVar7 = *(undefined4 *)(param_3 + 0x14);\n    *(undefined4 *)(iVar5 + 0x14) = uVar7;\n    *(undefined4 *)(iVar4 + 0x14) = uVar7;\n    uVar1 = (uint)(*(int *)(param_3 + 0x18) << 0x13) >> 0x1f;\n    *(uint *)(iVar5 + 0x18) = *(uint *)(iVar5 + 0x18) & 0xffffefff | uVar1 << 0xc;\n    *(uint *)(iVar4 + 0x18) = *(uint *)(iVar4 + 0x18) & 0xffffefff | uVar1 << 0xc;\n  }\n  return iVar3;\n}" (primitive_type "int") (function_declarator "FUN_000470f0(undefined4 param_1,int *param_2,int param_3)" (identifier "FUN_000470f0") (parameter_list "(undefined4 param_1,int *param_2,int param_3)" (( "(") (parameter_declaration "undefined4 param_1" (type_identifier "undefined4") (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  uint uVar1;\n  undefined4 *puVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  undefined4 uVar7;\n  int iVar8;\n  undefined *puVar9;\n  \n  puVar9 = PTR___stack_chk_guard_00079c10;\n  puVar2 = *(undefined4 **)PTR___stack_chk_guard_00079c10;\n  iVar3 = FUN_00046ed4();\n  if (puVar2 == *(undefined4 **)puVar9) {\n    return iVar3;\n  }\n  puVar9 = PTR___stack_chk_fail_00079bd0;\n  (*(code *)PTR___stack_chk_fail_00079bd0)();\n  puVar9 = puVar9 + 0x3a424;\n  iVar8 = *param_2;\n  iVar3 = *(int *)(param_3 + 4);\n  if ((*(byte *)(param_2 + 7) & 8) == 0) {\n    iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n    iVar5 = FUN_000470f0(iVar8,0,0,9);\n    iVar6 = iVar5;\n    if (iVar3 == 0) goto LAB_00047248;\n  }\n  else {\n    if (iVar3 == 0) {\n      iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n      iVar5 = FUN_000470f0(iVar8,0,0,9);\n      iVar6 = iVar5;\n      goto LAB_00047248;\n    }\n    if (0x1f < (int)*(uint *)(param_3 + 0x14)) {\n      return iVar3;\n    }\n    if ((*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f) & 1) == 0) {\n      return iVar3;\n    }\n    iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n    iVar5 = FUN_000470f0(iVar8,0,0,9);\n  }\n  iVar6 = FUN_000470f0(iVar8,iVar3,iVar5,0x10,puVar9);\nLAB_00047248:\n  iVar3 = FUN_000470f0(iVar8,iVar4,iVar6,0x10,puVar9);\n  if ((((iVar3 == 0) || (iVar6 == 0)) || (iVar4 == 0)) || (iVar5 == 0)) {\n    *puVar2 = 0xc;\n    iVar3 = 0;\n  }\n  else {\n    uVar7 = *(undefined4 *)(param_3 + 0x14);\n    *(undefined4 *)(iVar5 + 0x14) = uVar7;\n    *(undefined4 *)(iVar4 + 0x14) = uVar7;\n    uVar1 = (uint)(*(int *)(param_3 + 0x18) << 0x13) >> 0x1f;\n    *(uint *)(iVar5 + 0x18) = *(uint *)(iVar5 + 0x18) & 0xffffefff | uVar1 << 0xc;\n    *(uint *)(iVar4 + 0x18) = *(uint *)(iVar4 + 0x18) & 0xffffefff | uVar1 << 0xc;\n  }\n  return iVar3;\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "undefined4 *puVar2;" (type_identifier "undefined4") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "undefined4 uVar7;" (type_identifier "undefined4") (identifier "uVar7") (; ";")) (declaration "int iVar8;" (primitive_type "int") (identifier "iVar8") (; ";")) (declaration "undefined *puVar9;" (type_identifier "undefined") (pointer_declarator "*puVar9" (* "*") (identifier "puVar9")) (; ";")) (expression_statement "puVar9 = PTR___stack_chk_guard_00079c10;" (assignment_expression "puVar9 = PTR___stack_chk_guard_00079c10" (identifier "puVar9") (= "=") (identifier "PTR___stack_chk_guard_00079c10")) (; ";")) (expression_statement "puVar2 = *(undefined4 **)PTR___stack_chk_guard_00079c10;" (assignment_expression "puVar2 = *(undefined4 **)PTR___stack_chk_guard_00079c10" (identifier "puVar2") (= "=") (pointer_expression "*(undefined4 **)PTR___stack_chk_guard_00079c10" (* "*") (cast_expression "(undefined4 **)PTR___stack_chk_guard_00079c10" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (identifier "PTR___stack_chk_guard_00079c10")))) (; ";")) (expression_statement "iVar3 = FUN_00046ed4();" (assignment_expression "iVar3 = FUN_00046ed4()" (identifier "iVar3") (= "=") (call_expression "FUN_00046ed4()" (identifier "FUN_00046ed4") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (puVar2 == *(undefined4 **)puVar9) {\n    return iVar3;\n  }" (if "if") (parenthesized_expression "(puVar2 == *(undefined4 **)puVar9)" (( "(") (binary_expression "puVar2 == *(undefined4 **)puVar9" (identifier "puVar2") (== "==") (pointer_expression "*(undefined4 **)puVar9" (* "*") (cast_expression "(undefined4 **)puVar9" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (identifier "puVar9")))) () ")")) (compound_statement "{\n    return iVar3;\n  }" ({ "{") (return_statement "return iVar3;" (return "return") (identifier "iVar3") (; ";")) (} "}"))) (expression_statement "puVar9 = PTR___stack_chk_fail_00079bd0;" (assignment_expression "puVar9 = PTR___stack_chk_fail_00079bd0" (identifier "puVar9") (= "=") (identifier "PTR___stack_chk_fail_00079bd0")) (; ";")) (expression_statement "(*(code *)PTR___stack_chk_fail_00079bd0)();" (call_expression "(*(code *)PTR___stack_chk_fail_00079bd0)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_00079bd0)" (( "(") (pointer_expression "*(code *)PTR___stack_chk_fail_00079bd0" (* "*") (cast_expression "(code *)PTR___stack_chk_fail_00079bd0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___stack_chk_fail_00079bd0"))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "puVar9 = puVar9 + 0x3a424;" (assignment_expression "puVar9 = puVar9 + 0x3a424" (identifier "puVar9") (= "=") (binary_expression "puVar9 + 0x3a424" (identifier "puVar9") (+ "+") (number_literal "0x3a424"))) (; ";")) (expression_statement "iVar8 = *param_2;" (assignment_expression "iVar8 = *param_2" (identifier "iVar8") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (expression_statement "iVar3 = *(int *)(param_3 + 4);" (assignment_expression "iVar3 = *(int *)(param_3 + 4)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(param_3 + 4)" (* "*") (cast_expression "(int *)(param_3 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 4)" (( "(") (binary_expression "param_3 + 4" (identifier "param_3") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (if_statement "if ((*(byte *)(param_2 + 7) & 8) == 0) {\n    iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n    iVar5 = FUN_000470f0(iVar8,0,0,9);\n    iVar6 = iVar5;\n    if (iVar3 == 0) goto LAB_00047248;\n  }\n  else {\n    if (iVar3 == 0) {\n      iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n      iVar5 = FUN_000470f0(iVar8,0,0,9);\n      iVar6 = iVar5;\n      goto LAB_00047248;\n    }\n    if (0x1f < (int)*(uint *)(param_3 + 0x14)) {\n      return iVar3;\n    }\n    if ((*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f) & 1) == 0) {\n      return iVar3;\n    }\n    iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n    iVar5 = FUN_000470f0(iVar8,0,0,9);\n  }" (if "if") (parenthesized_expression "((*(byte *)(param_2 + 7) & 8) == 0)" (( "(") (binary_expression "(*(byte *)(param_2 + 7) & 8) == 0" (parenthesized_expression "(*(byte *)(param_2 + 7) & 8)" (( "(") (binary_expression "*(byte *)(param_2 + 7) & 8" (pointer_expression "*(byte *)(param_2 + 7)" (* "*") (cast_expression "(byte *)(param_2 + 7)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 7)" (( "(") (binary_expression "param_2 + 7" (identifier "param_2") (+ "+") (number_literal "7")) () ")")))) (& "&") (number_literal "8")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n    iVar5 = FUN_000470f0(iVar8,0,0,9);\n    iVar6 = iVar5;\n    if (iVar3 == 0) goto LAB_00047248;\n  }" ({ "{") (expression_statement "iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);" (assignment_expression "iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9)" (identifier "iVar4") (= "=") (call_expression "FUN_000470f0(iVar8,0,0,8,puVar9)" (identifier "FUN_000470f0") (argument_list "(iVar8,0,0,8,puVar9)" (( "(") (identifier "iVar8") (, ",") (number_literal "0") (, ",") (number_literal "0") (, ",") (number_literal "8") (, ",") (identifier "puVar9") () ")")))) (; ";")) (expression_statement "iVar5 = FUN_000470f0(iVar8,0,0,9);" (assignment_expression "iVar5 = FUN_000470f0(iVar8,0,0,9)" (identifier "iVar5") (= "=") (call_expression "FUN_000470f0(iVar8,0,0,9)" (identifier "FUN_000470f0") (argument_list "(iVar8,0,0,9)" (( "(") (identifier "iVar8") (, ",") (number_literal "0") (, ",") (number_literal "0") (, ",") (number_literal "9") () ")")))) (; ";")) (expression_statement "iVar6 = iVar5;" (assignment_expression "iVar6 = iVar5" (identifier "iVar6") (= "=") (identifier "iVar5")) (; ";")) (if_statement "if (iVar3 == 0) goto LAB_00047248;" (if "if") (parenthesized_expression "(iVar3 == 0)" (( "(") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_00047248;" (goto "goto") (statement_identifier "LAB_00047248") (; ";"))) (} "}")) (else_clause "else {\n    if (iVar3 == 0) {\n      iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n      iVar5 = FUN_000470f0(iVar8,0,0,9);\n      iVar6 = iVar5;\n      goto LAB_00047248;\n    }\n    if (0x1f < (int)*(uint *)(param_3 + 0x14)) {\n      return iVar3;\n    }\n    if ((*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f) & 1) == 0) {\n      return iVar3;\n    }\n    iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n    iVar5 = FUN_000470f0(iVar8,0,0,9);\n  }" (else "else") (compound_statement "{\n    if (iVar3 == 0) {\n      iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n      iVar5 = FUN_000470f0(iVar8,0,0,9);\n      iVar6 = iVar5;\n      goto LAB_00047248;\n    }\n    if (0x1f < (int)*(uint *)(param_3 + 0x14)) {\n      return iVar3;\n    }\n    if ((*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f) & 1) == 0) {\n      return iVar3;\n    }\n    iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n    iVar5 = FUN_000470f0(iVar8,0,0,9);\n  }" ({ "{") (if_statement "if (iVar3 == 0) {\n      iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n      iVar5 = FUN_000470f0(iVar8,0,0,9);\n      iVar6 = iVar5;\n      goto LAB_00047248;\n    }" (if "if") (parenthesized_expression "(iVar3 == 0)" (( "(") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);\n      iVar5 = FUN_000470f0(iVar8,0,0,9);\n      iVar6 = iVar5;\n      goto LAB_00047248;\n    }" ({ "{") (expression_statement "iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);" (assignment_expression "iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9)" (identifier "iVar4") (= "=") (call_expression "FUN_000470f0(iVar8,0,0,8,puVar9)" (identifier "FUN_000470f0") (argument_list "(iVar8,0,0,8,puVar9)" (( "(") (identifier "iVar8") (, ",") (number_literal "0") (, ",") (number_literal "0") (, ",") (number_literal "8") (, ",") (identifier "puVar9") () ")")))) (; ";")) (expression_statement "iVar5 = FUN_000470f0(iVar8,0,0,9);" (assignment_expression "iVar5 = FUN_000470f0(iVar8,0,0,9)" (identifier "iVar5") (= "=") (call_expression "FUN_000470f0(iVar8,0,0,9)" (identifier "FUN_000470f0") (argument_list "(iVar8,0,0,9)" (( "(") (identifier "iVar8") (, ",") (number_literal "0") (, ",") (number_literal "0") (, ",") (number_literal "9") () ")")))) (; ";")) (expression_statement "iVar6 = iVar5;" (assignment_expression "iVar6 = iVar5" (identifier "iVar6") (= "=") (identifier "iVar5")) (; ";")) (goto_statement "goto LAB_00047248;" (goto "goto") (statement_identifier "LAB_00047248") (; ";")) (} "}"))) (if_statement "if (0x1f < (int)*(uint *)(param_3 + 0x14)) {\n      return iVar3;\n    }" (if "if") (parenthesized_expression "(0x1f < (int)*(uint *)(param_3 + 0x14))" (( "(") (binary_expression "0x1f < (int)*(uint *)(param_3 + 0x14)" (number_literal "0x1f") (< "<") (cast_expression "(int)*(uint *)(param_3 + 0x14)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "*(uint *)(param_3 + 0x14)" (* "*") (cast_expression "(uint *)(param_3 + 0x14)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x14)" (( "(") (binary_expression "param_3 + 0x14" (identifier "param_3") (+ "+") (number_literal "0x14")) () ")")))))) () ")")) (compound_statement "{\n      return iVar3;\n    }" ({ "{") (return_statement "return iVar3;" (return "return") (identifier "iVar3") (; ";")) (} "}"))) (if_statement "if ((*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f) & 1) == 0) {\n      return iVar3;\n    }" (if "if") (parenthesized_expression "((*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f) & 1) == 0)" (( "(") (binary_expression "(*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f) & 1) == 0" (parenthesized_expression "(*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f) & 1)" (( "(") (binary_expression "*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f) & 1" (binary_expression "*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f)" (pointer_expression "*(uint *)(iVar8 + 0x50)" (* "*") (cast_expression "(uint *)(iVar8 + 0x50)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar8 + 0x50)" (( "(") (binary_expression "iVar8 + 0x50" (identifier "iVar8") (+ "+") (number_literal "0x50")) () ")")))) (>> ">>") (parenthesized_expression "(*(uint *)(param_3 + 0x14) & 0x1f)" (( "(") (binary_expression "*(uint *)(param_3 + 0x14) & 0x1f" (pointer_expression "*(uint *)(param_3 + 0x14)" (* "*") (cast_expression "(uint *)(param_3 + 0x14)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x14)" (( "(") (binary_expression "param_3 + 0x14" (identifier "param_3") (+ "+") (number_literal "0x14")) () ")")))) (& "&") (number_literal "0x1f")) () ")"))) (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      return iVar3;\n    }" ({ "{") (return_statement "return iVar3;" (return "return") (identifier "iVar3") (; ";")) (} "}"))) (expression_statement "iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9);" (assignment_expression "iVar4 = FUN_000470f0(iVar8,0,0,8,puVar9)" (identifier "iVar4") (= "=") (call_expression "FUN_000470f0(iVar8,0,0,8,puVar9)" (identifier "FUN_000470f0") (argument_list "(iVar8,0,0,8,puVar9)" (( "(") (identifier "iVar8") (, ",") (number_literal "0") (, ",") (number_literal "0") (, ",") (number_literal "8") (, ",") (identifier "puVar9") () ")")))) (; ";")) (expression_statement "iVar5 = FUN_000470f0(iVar8,0,0,9);" (assignment_expression "iVar5 = FUN_000470f0(iVar8,0,0,9)" (identifier "iVar5") (= "=") (call_expression "FUN_000470f0(iVar8,0,0,9)" (identifier "FUN_000470f0") (argument_list "(iVar8,0,0,9)" (( "(") (identifier "iVar8") (, ",") (number_literal "0") (, ",") (number_literal "0") (, ",") (number_literal "9") () ")")))) (; ";")) (} "}")))) (expression_statement "iVar6 = FUN_000470f0(iVar8,iVar3,iVar5,0x10,puVar9);" (assignment_expression "iVar6 = FUN_000470f0(iVar8,iVar3,iVar5,0x10,puVar9)" (identifier "iVar6") (= "=") (call_expression "FUN_000470f0(iVar8,iVar3,iVar5,0x10,puVar9)" (identifier "FUN_000470f0") (argument_list "(iVar8,iVar3,iVar5,0x10,puVar9)" (( "(") (identifier "iVar8") (, ",") (identifier "iVar3") (, ",") (identifier "iVar5") (, ",") (number_literal "0x10") (, ",") (identifier "puVar9") () ")")))) (; ";")) (labeled_statement "LAB_00047248:\n  iVar3 = FUN_000470f0(iVar8,iVar4,iVar6,0x10,puVar9);" (statement_identifier "LAB_00047248") (: ":") (expression_statement "iVar3 = FUN_000470f0(iVar8,iVar4,iVar6,0x10,puVar9);" (assignment_expression "iVar3 = FUN_000470f0(iVar8,iVar4,iVar6,0x10,puVar9)" (identifier "iVar3") (= "=") (call_expression "FUN_000470f0(iVar8,iVar4,iVar6,0x10,puVar9)" (identifier "FUN_000470f0") (argument_list "(iVar8,iVar4,iVar6,0x10,puVar9)" (( "(") (identifier "iVar8") (, ",") (identifier "iVar4") (, ",") (identifier "iVar6") (, ",") (number_literal "0x10") (, ",") (identifier "puVar9") () ")")))) (; ";"))) (if_statement "if ((((iVar3 == 0) || (iVar6 == 0)) || (iVar4 == 0)) || (iVar5 == 0)) {\n    *puVar2 = 0xc;\n    iVar3 = 0;\n  }\n  else {\n    uVar7 = *(undefined4 *)(param_3 + 0x14);\n    *(undefined4 *)(iVar5 + 0x14) = uVar7;\n    *(undefined4 *)(iVar4 + 0x14) = uVar7;\n    uVar1 = (uint)(*(int *)(param_3 + 0x18) << 0x13) >> 0x1f;\n    *(uint *)(iVar5 + 0x18) = *(uint *)(iVar5 + 0x18) & 0xffffefff | uVar1 << 0xc;\n    *(uint *)(iVar4 + 0x18) = *(uint *)(iVar4 + 0x18) & 0xffffefff | uVar1 << 0xc;\n  }" (if "if") (parenthesized_expression "((((iVar3 == 0) || (iVar6 == 0)) || (iVar4 == 0)) || (iVar5 == 0))" (( "(") (binary_expression "(((iVar3 == 0) || (iVar6 == 0)) || (iVar4 == 0)) || (iVar5 == 0)" (parenthesized_expression "(((iVar3 == 0) || (iVar6 == 0)) || (iVar4 == 0))" (( "(") (binary_expression "((iVar3 == 0) || (iVar6 == 0)) || (iVar4 == 0)" (parenthesized_expression "((iVar3 == 0) || (iVar6 == 0))" (( "(") (binary_expression "(iVar3 == 0) || (iVar6 == 0)" (parenthesized_expression "(iVar3 == 0)" (( "(") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(iVar6 == 0)" (( "(") (binary_expression "iVar6 == 0" (identifier "iVar6") (== "==") (number_literal "0")) () ")"))) () ")")) (|| "||") (parenthesized_expression "(iVar4 == 0)" (( "(") (binary_expression "iVar4 == 0" (identifier "iVar4") (== "==") (number_literal "0")) () ")"))) () ")")) (|| "||") (parenthesized_expression "(iVar5 == 0)" (( "(") (binary_expression "iVar5 == 0" (identifier "iVar5") (== "==") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n    *puVar2 = 0xc;\n    iVar3 = 0;\n  }" ({ "{") (expression_statement "*puVar2 = 0xc;" (assignment_expression "*puVar2 = 0xc" (pointer_expression "*puVar2" (* "*") (identifier "puVar2")) (= "=") (number_literal "0xc")) (; ";")) (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" (identifier "iVar3") (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n    uVar7 = *(undefined4 *)(param_3 + 0x14);\n    *(undefined4 *)(iVar5 + 0x14) = uVar7;\n    *(undefined4 *)(iVar4 + 0x14) = uVar7;\n    uVar1 = (uint)(*(int *)(param_3 + 0x18) << 0x13) >> 0x1f;\n    *(uint *)(iVar5 + 0x18) = *(uint *)(iVar5 + 0x18) & 0xffffefff | uVar1 << 0xc;\n    *(uint *)(iVar4 + 0x18) = *(uint *)(iVar4 + 0x18) & 0xffffefff | uVar1 << 0xc;\n  }" (else "else") (compound_statement "{\n    uVar7 = *(undefined4 *)(param_3 + 0x14);\n    *(undefined4 *)(iVar5 + 0x14) = uVar7;\n    *(undefined4 *)(iVar4 + 0x14) = uVar7;\n    uVar1 = (uint)(*(int *)(param_3 + 0x18) << 0x13) >> 0x1f;\n    *(uint *)(iVar5 + 0x18) = *(uint *)(iVar5 + 0x18) & 0xffffefff | uVar1 << 0xc;\n    *(uint *)(iVar4 + 0x18) = *(uint *)(iVar4 + 0x18) & 0xffffefff | uVar1 << 0xc;\n  }" ({ "{") (expression_statement "uVar7 = *(undefined4 *)(param_3 + 0x14);" (assignment_expression "uVar7 = *(undefined4 *)(param_3 + 0x14)" (identifier "uVar7") (= "=") (pointer_expression "*(undefined4 *)(param_3 + 0x14)" (* "*") (cast_expression "(undefined4 *)(param_3 + 0x14)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x14)" (( "(") (binary_expression "param_3 + 0x14" (identifier "param_3") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "*(undefined4 *)(iVar5 + 0x14) = uVar7;" (assignment_expression "*(undefined4 *)(iVar5 + 0x14) = uVar7" (pointer_expression "*(undefined4 *)(iVar5 + 0x14)" (* "*") (cast_expression "(undefined4 *)(iVar5 + 0x14)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar5 + 0x14)" (( "(") (binary_expression "iVar5 + 0x14" (identifier "iVar5") (+ "+") (number_literal "0x14")) () ")")))) (= "=") (identifier "uVar7")) (; ";")) (expression_statement "*(undefined4 *)(iVar4 + 0x14) = uVar7;" (assignment_expression "*(undefined4 *)(iVar4 + 0x14) = uVar7" (pointer_expression "*(undefined4 *)(iVar4 + 0x14)" (* "*") (cast_expression "(undefined4 *)(iVar4 + 0x14)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 0x14)" (( "(") (binary_expression "iVar4 + 0x14" (identifier "iVar4") (+ "+") (number_literal "0x14")) () ")")))) (= "=") (identifier "uVar7")) (; ";")) (expression_statement "uVar1 = (uint)(*(int *)(param_3 + 0x18) << 0x13) >> 0x1f;" (assignment_expression "uVar1 = (uint)(*(int *)(param_3 + 0x18) << 0x13) >> 0x1f" (identifier "uVar1") (= "=") (binary_expression "(uint)(*(int *)(param_3 + 0x18) << 0x13) >> 0x1f" (call_expression "(uint)(*(int *)(param_3 + 0x18) << 0x13)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(*(int *)(param_3 + 0x18) << 0x13)" (( "(") (binary_expression "*(int *)(param_3 + 0x18) << 0x13" (pointer_expression "*(int *)(param_3 + 0x18)" (* "*") (cast_expression "(int *)(param_3 + 0x18)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x18)" (( "(") (binary_expression "param_3 + 0x18" (identifier "param_3") (+ "+") (number_literal "0x18")) () ")")))) (<< "<<") (number_literal "0x13")) () ")"))) (>> ">>") (number_literal "0x1f"))) (; ";")) (expression_statement "*(uint *)(iVar5 + 0x18) = *(uint *)(iVar5 + 0x18) & 0xffffefff | uVar1 << 0xc;" (assignment_expression "*(uint *)(iVar5 + 0x18) = *(uint *)(iVar5 + 0x18) & 0xffffefff | uVar1 << 0xc" (pointer_expression "*(uint *)(iVar5 + 0x18)" (* "*") (cast_expression "(uint *)(iVar5 + 0x18)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar5 + 0x18)" (( "(") (binary_expression "iVar5 + 0x18" (identifier "iVar5") (+ "+") (number_literal "0x18")) () ")")))) (= "=") (binary_expression "*(uint *)(iVar5 + 0x18) & 0xffffefff | uVar1 << 0xc" (binary_expression "*(uint *)(iVar5 + 0x18) & 0xffffefff" (pointer_expression "*(uint *)(iVar5 + 0x18)" (* "*") (cast_expression "(uint *)(iVar5 + 0x18)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar5 + 0x18)" (( "(") (binary_expression "iVar5 + 0x18" (identifier "iVar5") (+ "+") (number_literal "0x18")) () ")")))) (& "&") (number_literal "0xffffefff")) (| "|") (binary_expression "uVar1 << 0xc" (identifier "uVar1") (<< "<<") (number_literal "0xc")))) (; ";")) (expression_statement "*(uint *)(iVar4 + 0x18) = *(uint *)(iVar4 + 0x18) & 0xffffefff | uVar1 << 0xc;" (assignment_expression "*(uint *)(iVar4 + 0x18) = *(uint *)(iVar4 + 0x18) & 0xffffefff | uVar1 << 0xc" (pointer_expression "*(uint *)(iVar4 + 0x18)" (* "*") (cast_expression "(uint *)(iVar4 + 0x18)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 0x18)" (( "(") (binary_expression "iVar4 + 0x18" (identifier "iVar4") (+ "+") (number_literal "0x18")) () ")")))) (= "=") (binary_expression "*(uint *)(iVar4 + 0x18) & 0xffffefff | uVar1 << 0xc" (binary_expression "*(uint *)(iVar4 + 0x18) & 0xffffefff" (pointer_expression "*(uint *)(iVar4 + 0x18)" (* "*") (cast_expression "(uint *)(iVar4 + 0x18)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + 0x18)" (( "(") (binary_expression "iVar4 + 0x18" (identifier "iVar4") (+ "+") (number_literal "0x18")) () ")")))) (& "&") (number_literal "0xffffefff")) (| "|") (binary_expression "uVar1 << 0xc" (identifier "uVar1") (<< "<<") (number_literal "0xc")))) (; ";")) (} "}")))) (return_statement "return iVar3;" (return "return") (identifier "iVar3") (; ";")) (} "}")))

type_1 * function_1(type_2 *dfa,type_1 *left,type_1 *right,type_3 type)

{
  type_4 *puVar1;
  type_5 *var_2;
  type_1 *var_3;
  type_1 *var_6;
  type_1 *var_7;
  type_1 *var_5;
  type_6 aVar4;
  type_7 var_4;
  type_2 *dfa_00;
  type_8 t;
  
  puVar1 = PTR___stack_chk_guard_00079c10;
  var_2 = *(type_5 **)PTR___stack_chk_guard_00079c10;
  t._4_1_ = (type_9)type;
  var_3 = var_1(dfa,left,right,&t);
  if (var_2 == *(type_5 **)puVar1) {
    return var_3;
  }
  (*(type_10 *)PTR___stack_chk_fail_00079bd0)();
  dfa_00 = (type_2 *)left->parent;
  var_3 = right->left;
  if ((left->node_idx & 0x8000000) == 0) {
    var_6 = function_1(dfa_00,(type_1 *)0x0,(type_1 *)0x0,OP_OPEN_SUBEXP);
    var_7 = function_1(dfa_00,(type_1 *)0x0,(type_1 *)0x0,OP_CLOSE_SUBEXP);
    var_5 = var_7;
    if (var_3 == (type_1 *)0x0) goto LAB_00047248;
  }
  else {
    if (var_3 == (type_1 *)0x0) {
      var_6 = function_1(dfa_00,(type_1 *)0x0,(type_1 *)0x0,OP_OPEN_SUBEXP);
      var_7 = function_1(dfa_00,(type_1 *)0x0,(type_1 *)0x0,OP_CLOSE_SUBEXP);
      var_5 = var_7;
      goto LAB_00047248;
    }
    var_4 = (right->token).opr.idx;
    if (0x1f < (int)var_4) {
      return var_3;
    }
    if ((dfa_00->used_bkref_map >> (var_4 & 0x1f) & 1) == 0) {
      return var_3;
    }
    var_6 = function_1(dfa_00,(type_1 *)0x0,(type_1 *)0x0,OP_OPEN_SUBEXP);
    var_7 = function_1(dfa_00,(type_1 *)0x0,(type_1 *)0x0,OP_CLOSE_SUBEXP);
  }
  var_5 = function_1(dfa_00,var_3,var_7,CONCAT);
LAB_00047248:
  var_3 = function_1(dfa_00,var_6,var_5,CONCAT);
  if ((((var_3 == (type_1 *)0x0) || (var_5 == (type_1 *)0x0)) ||
      (var_6 == (type_1 *)0x0)) || (var_7 == (type_1 *)0x0)) {
    *var_2 = 0xc;
    var_3 = (type_1 *)0x0;
  }
  else {
    aVar4 = (right->token).opr;
    (var_7->token).opr = aVar4;
    (var_6->token).opr = aVar4;
    var_4 = (type_7)(*(int *)&(right->token).field_0x4 << 0x13) >> 0x1f;
    *(type_7 *)&(var_7->token).field_0x4 =
         *(type_7 *)&(var_7->token).field_0x4 & 0xffffefff | var_4 << 0xc;
    *(type_7 *)&(var_6->token).field_0x4 =
         *(type_7 *)&(var_6->token).field_0x4 & 0xffffefff | var_4 << 0xc;
  }
  return var_3;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) 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: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) 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: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list)))) (if_statement condition: (parenthesized_expression (binary_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))))) 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: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (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))))))) (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: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (number_literal) (number_literal) (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (number_literal) (number_literal))))) (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)))) 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: (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (number_literal) (number_literal) (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (number_literal) (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (goto_statement label: (statement_identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (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)))))))) consequence: (compound_statement (return_statement (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (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: (parenthesized_expression (binary_expression left: (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: (number_literal))) right: (number_literal))) consequence: (compound_statement (return_statement (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (number_literal) (number_literal) (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (number_literal) (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (number_literal) (identifier))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (number_literal) (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: (number_literal))) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) alternative: (else_clause (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: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (binary_expression left: (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: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (binary_expression left: (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: (binary_expression left: (identifier) right: (number_literal)))))))) (return_statement (identifier)))))

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

{
  uint uVar1;
  undefined4 *puVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  undefined4 uVar7;
  int iVar8;
  undefined *puVar9;
  
  puVar9 = PTR___stack_chk_guard_00079c10;
  puVar2 = *(undefined4 **)PTR___stack_chk_guard_00079c10;
  iVar3 = FUN_00046ed4();
  if (puVar2 == *(undefined4 **)puVar9) {
    return iVar3;
  }
  puVar9 = PTR___stack_chk_fail_00079bd0;
  (*(code *)PTR___stack_chk_fail_00079bd0)();
  puVar9 = puVar9 + 0x3a424;
  iVar8 = *param_2;
  iVar3 = *(int *)(param_3 + 4);
  if ((*(byte *)(param_2 + 7) & 8) == 0) {
    iVar4 = MASKED(iVar8,0,0,8,puVar9);
    iVar5 = MASKED(iVar8,0,0,9);
    iVar6 = iVar5;
    if (iVar3 == 0) goto LAB_00047248;
  }
  else {
    if (iVar3 == 0) {
      iVar4 = MASKED(iVar8,0,0,8,puVar9);
      iVar5 = MASKED(iVar8,0,0,9);
      iVar6 = iVar5;
      goto LAB_00047248;
    }
    if (0x1f < (int)*(uint *)(param_3 + 0x14)) {
      return iVar3;
    }
    if ((*(uint *)(iVar8 + 0x50) >> (*(uint *)(param_3 + 0x14) & 0x1f) & 1) == 0) {
      return iVar3;
    }
    iVar4 = MASKED(iVar8,0,0,8,puVar9);
    iVar5 = MASKED(iVar8,0,0,9);
  }
  iVar6 = MASKED(iVar8,iVar3,iVar5,0x10,puVar9);
LAB_00047248:
  iVar3 = MASKED(iVar8,iVar4,iVar6,0x10,puVar9);
  if ((((iVar3 == 0) || (iVar6 == 0)) || (iVar4 == 0)) || (iVar5 == 0)) {
    *puVar2 = 0xc;
    iVar3 = 0;
  }
  else {
    uVar7 = *(undefined4 *)(param_3 + 0x14);
    *(undefined4 *)(iVar5 + 0x14) = uVar7;
    *(undefined4 *)(iVar4 + 0x14) = uVar7;
    uVar1 = (uint)(*(int *)(param_3 + 0x18) << 0x13) >> 0x1f;
    *(uint *)(iVar5 + 0x18) = *(uint *)(iVar5 + 0x18) & 0xffffefff | uVar1 << 0xc;
    *(uint *)(iVar4 + 0x18) = *(uint *)(iVar4 + 0x18) & 0xffffefff | uVar1 << 0xc;
  }
  return iVar3;
}

