
bin_tree_t *
parse_expression(re_string_t *regexp,regex_t *preg,re_token_t *token,reg_syntax_t syntax,Idx nest,
                reg_errcode_t *err)

{
  bin_tree_t *pbVar1;
  Idx char_class_alloc;
  bracket_elem_t start_elem;
  re_token_t start_token;
  re_token_t t;
  uchar start_name_buf [32];
  uchar end_name_buf [32];
  
  if ((byte)token->field_0x4 < 0x25) {
                    /* WARNING: Could not emulate address calculation at 0x00028938 */
                    /* WARNING: Treating indirect jump as call */
    pbVar1 = (bin_tree_t *)
             (*(code *)(&_gp + *(int *)(PTR_DAT_00040108 + (uint)(byte)token->field_0x4 * 4 + -0x6ac
                                       )))();
    return pbVar1;
  }
  if (*(int *)PTR___stack_chk_guard_00040330 == *(int *)PTR___stack_chk_guard_00040330) {
    return (bin_tree_t *)0x0;
  }
  (*(code *)PTR___stack_chk_fail_00040310)();
  pbVar1 = (bin_tree_t *)
           (*(code *)PTR___assert_fail_00040234)
                     (PTR_DAT_00040108 + -0xa90,PTR_DAT_00040108 + -0xb80,0xcf3,
                      PTR_DAT_00040108 + -0x580);
  return pbVar1;
}



undefined4 FUN_000288bc(undefined4 param_1,undefined4 param_2,int param_3)

{
  undefined4 uVar1;
  
  if (*(byte *)(param_3 + 4) < 0x25) {
                    /* WARNING: Could not emulate address calculation at 0x00028938 */
                    /* WARNING: Treating indirect jump as call */
    uVar1 = (*(code *)(&_gp_1 + *(int *)(PTR_DAT_00040108 +
                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)))();
    return uVar1;
  }
  if (*(int *)PTR___stack_chk_guard_00040330 == *(int *)PTR___stack_chk_guard_00040330) {
    return 0;
  }
  (*(code *)PTR___stack_chk_fail_00040310)();
  uVar1 = (*(code *)PTR___assert_fail_00040234)
                    (PTR_DAT_00040108 + -0xa90,PTR_DAT_00040108 + -0xb80,0xcf3,
                     PTR_DAT_00040108 + -0x580);
  return uVar1;
}


lui gp,0x2
addiu gp,gp,-0x7ec
addu gp,gp,t9
addiu sp,sp,-0xf8
lw v0,-0x7da0(gp)
lw v1,0x10c(sp)
sw s0,0xd0(sp)
or s0,a1,zero
sw gp,0x20(sp)
sw v1,0x40(sp)
sw v0,0x54(sp)
sw s6,0xe8(sp)
sw ra,0xf4(sp)
sw s8,0xf0(sp)
sw s7,0xec(sp)
sw s5,0xe4(sp)
sw s4,0xe0(sp)
sw s3,0xdc(sp)
sw s2,0xd8(sp)
sw s1,0xd4(sp)
sw a3,0x104(sp)
lbu a1,0x4(a2)
lw v1,0x0(v0)
lw s6,0x0(s0)
sltiu v0,a1,0x25
sw v1,0xcc(sp)
beq v0,zero,0x00028f1c
_lw v1,-0x7fc8(gp)
sll v0,a1,0x2
or s5,a2,zero
addiu v1,v1,-0x6ac
addu v0,v1,v0
lw v0,0x0(v0)
addu v0,v0,gp
jr v0
_or s8,a0,zero
lw v1,0x54(sp)
lw a0,0xcc(sp)
lw v0,0x30(sp)
lw v1,0x0(v1)
bne a0,v1,0x00029fd4
_lw ra,0xf4(sp)
lw s8,0xf0(sp)
lw s7,0xec(sp)
lw s6,0xe8(sp)
lw s5,0xe4(sp)
lw s4,0xe0(sp)
lw s3,0xdc(sp)
lw s2,0xd8(sp)
lw s1,0xd4(sp)
lw s0,0xd0(sp)
jr ra
_addiu sp,sp,0xf8
b 0x00028b30
_sw zero,0x30(sp)
lw t9,-0x7dc0(gp)
jalr t9
_nop
lw a3,-0x7fc8(gp)
li a2,0xcf3
lw a1,-0x7fc8(gp)
lw a0,-0x7fc8(gp)
lw t9,-0x7e9c(gp)
addiu a3,a3,-0x580
addiu a1,a1,-0xb80
jalr t9
_addiu a0,a0,-0xa90
(translation_unit "undefined4 FUN_000288bc(undefined4 param_1,undefined4 param_2,int param_3)\n\n{\n  undefined4 uVar1;\n  \n  if (*(byte *)(param_3 + 4) < 0x25) {\n                    /* WARNING: Could not emulate address calculation at 0x00028938 */\n                    /* WARNING: Treating indirect jump as call */\n    uVar1 = (*(code *)(&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)))();\n    return uVar1;\n  }\n  if (*(int *)PTR___stack_chk_guard_00040330 == *(int *)PTR___stack_chk_guard_00040330) {\n    return 0;\n  }\n  (*(code *)PTR___stack_chk_fail_00040310)();\n  uVar1 = (*(code *)PTR___assert_fail_00040234)\n                    (PTR_DAT_00040108 + -0xa90,PTR_DAT_00040108 + -0xb80,0xcf3,\n                     PTR_DAT_00040108 + -0x580);\n  return uVar1;\n}\n\n" (function_definition "undefined4 FUN_000288bc(undefined4 param_1,undefined4 param_2,int param_3)\n\n{\n  undefined4 uVar1;\n  \n  if (*(byte *)(param_3 + 4) < 0x25) {\n                    /* WARNING: Could not emulate address calculation at 0x00028938 */\n                    /* WARNING: Treating indirect jump as call */\n    uVar1 = (*(code *)(&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)))();\n    return uVar1;\n  }\n  if (*(int *)PTR___stack_chk_guard_00040330 == *(int *)PTR___stack_chk_guard_00040330) {\n    return 0;\n  }\n  (*(code *)PTR___stack_chk_fail_00040310)();\n  uVar1 = (*(code *)PTR___assert_fail_00040234)\n                    (PTR_DAT_00040108 + -0xa90,PTR_DAT_00040108 + -0xb80,0xcf3,\n                     PTR_DAT_00040108 + -0x580);\n  return uVar1;\n}" type_identifier (function_declarator "FUN_000288bc(undefined4 param_1,undefined4 param_2,int param_3)" identifier (parameter_list "(undefined4 param_1,undefined4 param_2,int param_3)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  undefined4 uVar1;\n  \n  if (*(byte *)(param_3 + 4) < 0x25) {\n                    /* WARNING: Could not emulate address calculation at 0x00028938 */\n                    /* WARNING: Treating indirect jump as call */\n    uVar1 = (*(code *)(&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)))();\n    return uVar1;\n  }\n  if (*(int *)PTR___stack_chk_guard_00040330 == *(int *)PTR___stack_chk_guard_00040330) {\n    return 0;\n  }\n  (*(code *)PTR___stack_chk_fail_00040310)();\n  uVar1 = (*(code *)PTR___assert_fail_00040234)\n                    (PTR_DAT_00040108 + -0xa90,PTR_DAT_00040108 + -0xb80,0xcf3,\n                     PTR_DAT_00040108 + -0x580);\n  return uVar1;\n}" { (declaration "undefined4 uVar1;" type_identifier identifier ;) (if_statement "if (*(byte *)(param_3 + 4) < 0x25) {\n                    /* WARNING: Could not emulate address calculation at 0x00028938 */\n                    /* WARNING: Treating indirect jump as call */\n    uVar1 = (*(code *)(&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)))();\n    return uVar1;\n  }" if (parenthesized_expression "(*(byte *)(param_3 + 4) < 0x25)" ( (binary_expression "*(byte *)(param_3 + 4) < 0x25" (pointer_expression "*(byte *)(param_3 + 4)" * (cast_expression "(byte *)(param_3 + 4)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) )))) < number_literal) )) (compound_statement "{\n                    /* WARNING: Could not emulate address calculation at 0x00028938 */\n                    /* WARNING: Treating indirect jump as call */\n    uVar1 = (*(code *)(&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)))();\n    return uVar1;\n  }" { comment comment (expression_statement "uVar1 = (*(code *)(&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)))();" (assignment_expression "uVar1 = (*(code *)(&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)))()" identifier = (call_expression "(*(code *)(&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)))()" (parenthesized_expression "(*(code *)(&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)))" ( (pointer_expression "*(code *)(&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac))" * (cast_expression "(code *)(&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac))" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac))" ( (binary_expression "&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)" (pointer_expression "&_gp_1" & identifier) + (pointer_expression "*(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)" * (cast_expression "(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)" ( (binary_expression "PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac" (binary_expression "PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4" identifier + (binary_expression "(uint)*(byte *)(param_3 + 4) * 4" (binary_expression "(uint)*(byte *)(param_3 + 4)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(byte *)(param_3 + 4)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) )))) * number_literal)) + number_literal) ))))) )))) )) (argument_list "()" ( )))) ;) (return_statement "return uVar1;" return identifier ;) })) (if_statement "if (*(int *)PTR___stack_chk_guard_00040330 == *(int *)PTR___stack_chk_guard_00040330) {\n    return 0;\n  }" if (parenthesized_expression "(*(int *)PTR___stack_chk_guard_00040330 == *(int *)PTR___stack_chk_guard_00040330)" ( (binary_expression "*(int *)PTR___stack_chk_guard_00040330 == *(int *)PTR___stack_chk_guard_00040330" (pointer_expression "*(int *)PTR___stack_chk_guard_00040330" * (cast_expression "(int *)PTR___stack_chk_guard_00040330" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) == (pointer_expression "*(int *)PTR___stack_chk_guard_00040330" * (cast_expression "(int *)PTR___stack_chk_guard_00040330" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "(*(code *)PTR___stack_chk_fail_00040310)();" (call_expression "(*(code *)PTR___stack_chk_fail_00040310)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_00040310)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_00040310" * (cast_expression "(code *)PTR___stack_chk_fail_00040310" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (expression_statement "uVar1 = (*(code *)PTR___assert_fail_00040234)\n                    (PTR_DAT_00040108 + -0xa90,PTR_DAT_00040108 + -0xb80,0xcf3,\n                     PTR_DAT_00040108 + -0x580);" (assignment_expression "uVar1 = (*(code *)PTR___assert_fail_00040234)\n                    (PTR_DAT_00040108 + -0xa90,PTR_DAT_00040108 + -0xb80,0xcf3,\n                     PTR_DAT_00040108 + -0x580)" identifier = (call_expression "(*(code *)PTR___assert_fail_00040234)\n                    (PTR_DAT_00040108 + -0xa90,PTR_DAT_00040108 + -0xb80,0xcf3,\n                     PTR_DAT_00040108 + -0x580)" (parenthesized_expression "(*(code *)PTR___assert_fail_00040234)" ( (pointer_expression "*(code *)PTR___assert_fail_00040234" * (cast_expression "(code *)PTR___assert_fail_00040234" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(PTR_DAT_00040108 + -0xa90,PTR_DAT_00040108 + -0xb80,0xcf3,\n                     PTR_DAT_00040108 + -0x580)" ( (binary_expression "PTR_DAT_00040108 + -0xa90" identifier + number_literal) , (binary_expression "PTR_DAT_00040108 + -0xb80" identifier + number_literal) , number_literal , (binary_expression "PTR_DAT_00040108 + -0x580" identifier + number_literal) )))) ;) (return_statement "return uVar1;" return identifier ;) })))
(translation_unit "bin_tree_t *\nparse_expression(re_string_t *regexp,regex_t *preg,re_token_t *token,reg_syntax_t syntax,Idx nest,\n                reg_errcode_t *err)\n\n{\n  bin_tree_t *pbVar1;\n  Idx char_class_alloc;\n  bracket_elem_t start_elem;\n  re_token_t start_token;\n  re_token_t t;\n  uchar start_name_buf [32];\n  uchar end_name_buf [32];\n  \n  if ((byte)token->field_0x4 < 0x25) {\n                    /* WARNING: Could not emulate address calculation at 0x00028938 */\n                    /* WARNING: Treating indirect jump as call */\n    pbVar1 = (bin_tree_t *)\n             (*(code *)(&_gp + *(int *)(PTR_DAT_00040108 + (uint)(byte)token->field_0x4 * 4 + -0x6ac\n                                       )))();\n    return pbVar1;\n  }\n  if (*(int *)PTR___stack_chk_guard_00040330 == *(int *)PTR___stack_chk_guard_00040330) {\n    return (bin_tree_t *)0x0;\n  }\n  (*(code *)PTR___stack_chk_fail_00040310)();\n  pbVar1 = (bin_tree_t *)\n           (*(code *)PTR___assert_fail_00040234)\n                     (PTR_DAT_00040108 + -0xa90,PTR_DAT_00040108 + -0xb80,0xcf3,\n                      PTR_DAT_00040108 + -0x580);\n  return pbVar1;\n}\n\n" (function_definition "bin_tree_t *\nparse_expression(re_string_t *regexp,regex_t *preg,re_token_t *token,reg_syntax_t syntax,Idx nest,\n                reg_errcode_t *err)\n\n{\n  bin_tree_t *pbVar1;\n  Idx char_class_alloc;\n  bracket_elem_t start_elem;\n  re_token_t start_token;\n  re_token_t t;\n  uchar start_name_buf [32];\n  uchar end_name_buf [32];\n  \n  if ((byte)token->field_0x4 < 0x25) {\n                    /* WARNING: Could not emulate address calculation at 0x00028938 */\n                    /* WARNING: Treating indirect jump as call */\n    pbVar1 = (bin_tree_t *)\n             (*(code *)(&_gp + *(int *)(PTR_DAT_00040108 + (uint)(byte)token->field_0x4 * 4 + -0x6ac\n                                       )))();\n    return pbVar1;\n  }\n  if (*(int *)PTR___stack_chk_guard_00040330 == *(int *)PTR___stack_chk_guard_00040330) {\n    return (bin_tree_t *)0x0;\n  }\n  (*(code *)PTR___stack_chk_fail_00040310)();\n  pbVar1 = (bin_tree_t *)\n           (*(code *)PTR___assert_fail_00040234)\n                     (PTR_DAT_00040108 + -0xa90,PTR_DAT_00040108 + -0xb80,0xcf3,\n                      PTR_DAT_00040108 + -0x580);\n  return pbVar1;\n}" type_identifier (pointer_declarator "*\nparse_expression(re_string_t *regexp,regex_t *preg,re_token_t *token,reg_syntax_t syntax,Idx nest,\n                reg_errcode_t *err)" * (function_declarator "parse_expression(re_string_t *regexp,regex_t *preg,re_token_t *token,reg_syntax_t syntax,Idx nest,\n                reg_errcode_t *err)" identifier (parameter_list "(re_string_t *regexp,regex_t *preg,re_token_t *token,reg_syntax_t syntax,Idx nest,\n                reg_errcode_t *err)" ( (parameter_declaration "re_string_t *regexp" type_identifier (pointer_declarator "*regexp" * identifier)) , (parameter_declaration "regex_t *preg" type_identifier (pointer_declarator "*preg" * identifier)) , (parameter_declaration "re_token_t *token" type_identifier (pointer_declarator "*token" * identifier)) , (parameter_declaration "reg_syntax_t syntax" type_identifier identifier) , (parameter_declaration "Idx nest" type_identifier identifier) , (parameter_declaration "reg_errcode_t *err" type_identifier (pointer_declarator "*err" * identifier)) )))) (compound_statement "{\n  bin_tree_t *pbVar1;\n  Idx char_class_alloc;\n  bracket_elem_t start_elem;\n  re_token_t start_token;\n  re_token_t t;\n  uchar start_name_buf [32];\n  uchar end_name_buf [32];\n  \n  if ((byte)token->field_0x4 < 0x25) {\n                    /* WARNING: Could not emulate address calculation at 0x00028938 */\n                    /* WARNING: Treating indirect jump as call */\n    pbVar1 = (bin_tree_t *)\n             (*(code *)(&_gp + *(int *)(PTR_DAT_00040108 + (uint)(byte)token->field_0x4 * 4 + -0x6ac\n                                       )))();\n    return pbVar1;\n  }\n  if (*(int *)PTR___stack_chk_guard_00040330 == *(int *)PTR___stack_chk_guard_00040330) {\n    return (bin_tree_t *)0x0;\n  }\n  (*(code *)PTR___stack_chk_fail_00040310)();\n  pbVar1 = (bin_tree_t *)\n           (*(code *)PTR___assert_fail_00040234)\n                     (PTR_DAT_00040108 + -0xa90,PTR_DAT_00040108 + -0xb80,0xcf3,\n                      PTR_DAT_00040108 + -0x580);\n  return pbVar1;\n}" { (declaration "bin_tree_t *pbVar1;" type_identifier (pointer_declarator "*pbVar1" * identifier) ;) (declaration "Idx char_class_alloc;" type_identifier identifier ;) (declaration "bracket_elem_t start_elem;" type_identifier identifier ;) (declaration "re_token_t start_token;" type_identifier identifier ;) (declaration "re_token_t t;" type_identifier identifier ;) (declaration "uchar start_name_buf [32];" type_identifier (array_declarator "start_name_buf [32]" identifier [ number_literal ]) ;) (declaration "uchar end_name_buf [32];" type_identifier (array_declarator "end_name_buf [32]" identifier [ number_literal ]) ;) (if_statement "if ((byte)token->field_0x4 < 0x25) {\n                    /* WARNING: Could not emulate address calculation at 0x00028938 */\n                    /* WARNING: Treating indirect jump as call */\n    pbVar1 = (bin_tree_t *)\n             (*(code *)(&_gp + *(int *)(PTR_DAT_00040108 + (uint)(byte)token->field_0x4 * 4 + -0x6ac\n                                       )))();\n    return pbVar1;\n  }" if (parenthesized_expression "((byte)token->field_0x4 < 0x25)" ( (binary_expression "(byte)token->field_0x4 < 0x25" (cast_expression "(byte)token->field_0x4" ( (type_descriptor "byte" type_identifier) ) (field_expression "token->field_0x4" identifier -> field_identifier)) < number_literal) )) (compound_statement "{\n                    /* WARNING: Could not emulate address calculation at 0x00028938 */\n                    /* WARNING: Treating indirect jump as call */\n    pbVar1 = (bin_tree_t *)\n             (*(code *)(&_gp + *(int *)(PTR_DAT_00040108 + (uint)(byte)token->field_0x4 * 4 + -0x6ac\n                                       )))();\n    return pbVar1;\n  }" { comment comment (expression_statement "pbVar1 = (bin_tree_t *)\n             (*(code *)(&_gp + *(int *)(PTR_DAT_00040108 + (uint)(byte)token->field_0x4 * 4 + -0x6ac\n                                       )))();" (assignment_expression "pbVar1 = (bin_tree_t *)\n             (*(code *)(&_gp + *(int *)(PTR_DAT_00040108 + (uint)(byte)token->field_0x4 * 4 + -0x6ac\n                                       )))()" identifier = (cast_expression "(bin_tree_t *)\n             (*(code *)(&_gp + *(int *)(PTR_DAT_00040108 + (uint)(byte)token->field_0x4 * 4 + -0x6ac\n                                       )))()" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)(&_gp + *(int *)(PTR_DAT_00040108 + (uint)(byte)token->field_0x4 * 4 + -0x6ac\n                                       )))()" (parenthesized_expression "(*(code *)(&_gp + *(int *)(PTR_DAT_00040108 + (uint)(byte)token->field_0x4 * 4 + -0x6ac\n                                       )))" ( (pointer_expression "*(code *)(&_gp + *(int *)(PTR_DAT_00040108 + (uint)(byte)token->field_0x4 * 4 + -0x6ac\n                                       ))" * (cast_expression "(code *)(&_gp + *(int *)(PTR_DAT_00040108 + (uint)(byte)token->field_0x4 * 4 + -0x6ac\n                                       ))" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&_gp + *(int *)(PTR_DAT_00040108 + (uint)(byte)token->field_0x4 * 4 + -0x6ac\n                                       ))" ( (binary_expression "&_gp + *(int *)(PTR_DAT_00040108 + (uint)(byte)token->field_0x4 * 4 + -0x6ac\n                                       )" (pointer_expression "&_gp" & identifier) + (pointer_expression "*(int *)(PTR_DAT_00040108 + (uint)(byte)token->field_0x4 * 4 + -0x6ac\n                                       )" * (cast_expression "(int *)(PTR_DAT_00040108 + (uint)(byte)token->field_0x4 * 4 + -0x6ac\n                                       )" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_00040108 + (uint)(byte)token->field_0x4 * 4 + -0x6ac\n                                       )" ( (binary_expression "PTR_DAT_00040108 + (uint)(byte)token->field_0x4 * 4 + -0x6ac" (binary_expression "PTR_DAT_00040108 + (uint)(byte)token->field_0x4 * 4" identifier + (binary_expression "(uint)(byte)token->field_0x4 * 4" (cast_expression "(uint)(byte)token->field_0x4" ( (type_descriptor "uint" type_identifier) ) (cast_expression "(byte)token->field_0x4" ( (type_descriptor "byte" type_identifier) ) (field_expression "token->field_0x4" identifier -> field_identifier))) * number_literal)) + number_literal) ))))) )))) )) (argument_list "()" ( ))))) ;) (return_statement "return pbVar1;" return identifier ;) })) (if_statement "if (*(int *)PTR___stack_chk_guard_00040330 == *(int *)PTR___stack_chk_guard_00040330) {\n    return (bin_tree_t *)0x0;\n  }" if (parenthesized_expression "(*(int *)PTR___stack_chk_guard_00040330 == *(int *)PTR___stack_chk_guard_00040330)" ( (binary_expression "*(int *)PTR___stack_chk_guard_00040330 == *(int *)PTR___stack_chk_guard_00040330" (pointer_expression "*(int *)PTR___stack_chk_guard_00040330" * (cast_expression "(int *)PTR___stack_chk_guard_00040330" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) == (pointer_expression "*(int *)PTR___stack_chk_guard_00040330" * (cast_expression "(int *)PTR___stack_chk_guard_00040330" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n    return (bin_tree_t *)0x0;\n  }" { (return_statement "return (bin_tree_t *)0x0;" return (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "(*(code *)PTR___stack_chk_fail_00040310)();" (call_expression "(*(code *)PTR___stack_chk_fail_00040310)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_00040310)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_00040310" * (cast_expression "(code *)PTR___stack_chk_fail_00040310" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (expression_statement "pbVar1 = (bin_tree_t *)\n           (*(code *)PTR___assert_fail_00040234)\n                     (PTR_DAT_00040108 + -0xa90,PTR_DAT_00040108 + -0xb80,0xcf3,\n                      PTR_DAT_00040108 + -0x580);" (assignment_expression "pbVar1 = (bin_tree_t *)\n           (*(code *)PTR___assert_fail_00040234)\n                     (PTR_DAT_00040108 + -0xa90,PTR_DAT_00040108 + -0xb80,0xcf3,\n                      PTR_DAT_00040108 + -0x580)" identifier = (cast_expression "(bin_tree_t *)\n           (*(code *)PTR___assert_fail_00040234)\n                     (PTR_DAT_00040108 + -0xa90,PTR_DAT_00040108 + -0xb80,0xcf3,\n                      PTR_DAT_00040108 + -0x580)" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR___assert_fail_00040234)\n                     (PTR_DAT_00040108 + -0xa90,PTR_DAT_00040108 + -0xb80,0xcf3,\n                      PTR_DAT_00040108 + -0x580)" (parenthesized_expression "(*(code *)PTR___assert_fail_00040234)" ( (pointer_expression "*(code *)PTR___assert_fail_00040234" * (cast_expression "(code *)PTR___assert_fail_00040234" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(PTR_DAT_00040108 + -0xa90,PTR_DAT_00040108 + -0xb80,0xcf3,\n                      PTR_DAT_00040108 + -0x580)" ( (binary_expression "PTR_DAT_00040108 + -0xa90" identifier + number_literal) , (binary_expression "PTR_DAT_00040108 + -0xb80" identifier + number_literal) , number_literal , (binary_expression "PTR_DAT_00040108 + -0x580" identifier + number_literal) ))))) ;) (return_statement "return pbVar1;" return identifier ;) })))
(translation_unit "undefined4 FUN_000288bc(undefined4 param_1,undefined4 param_2,int param_3)\n\n{\n  undefined4 uVar1;\n  \n  if (*(byte *)(param_3 + 4) < 0x25) {\n                    \n                    \n    uVar1 = (*(code *)(&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)))();\n    return uVar1;\n  }\n  if (*(int *)PTR___stack_chk_guard_00040330 == *(int *)PTR___stack_chk_guard_00040330) {\n    return 0;\n  }\n  (*(code *)PTR___stack_chk_fail_00040310)();\n  uVar1 = (*(code *)PTR___assert_fail_00040234)\n                    (PTR_DAT_00040108 + -0xa90,PTR_DAT_00040108 + -0xb80,0xcf3,\n                     PTR_DAT_00040108 + -0x580);\n  return uVar1;\n}\n\n" (function_definition "undefined4 FUN_000288bc(undefined4 param_1,undefined4 param_2,int param_3)\n\n{\n  undefined4 uVar1;\n  \n  if (*(byte *)(param_3 + 4) < 0x25) {\n                    \n                    \n    uVar1 = (*(code *)(&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)))();\n    return uVar1;\n  }\n  if (*(int *)PTR___stack_chk_guard_00040330 == *(int *)PTR___stack_chk_guard_00040330) {\n    return 0;\n  }\n  (*(code *)PTR___stack_chk_fail_00040310)();\n  uVar1 = (*(code *)PTR___assert_fail_00040234)\n                    (PTR_DAT_00040108 + -0xa90,PTR_DAT_00040108 + -0xb80,0xcf3,\n                     PTR_DAT_00040108 + -0x580);\n  return uVar1;\n}" type_identifier (function_declarator "FUN_000288bc(undefined4 param_1,undefined4 param_2,int param_3)" identifier (parameter_list "(undefined4 param_1,undefined4 param_2,int param_3)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  undefined4 uVar1;\n  \n  if (*(byte *)(param_3 + 4) < 0x25) {\n                    \n                    \n    uVar1 = (*(code *)(&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)))();\n    return uVar1;\n  }\n  if (*(int *)PTR___stack_chk_guard_00040330 == *(int *)PTR___stack_chk_guard_00040330) {\n    return 0;\n  }\n  (*(code *)PTR___stack_chk_fail_00040310)();\n  uVar1 = (*(code *)PTR___assert_fail_00040234)\n                    (PTR_DAT_00040108 + -0xa90,PTR_DAT_00040108 + -0xb80,0xcf3,\n                     PTR_DAT_00040108 + -0x580);\n  return uVar1;\n}" { (declaration "undefined4 uVar1;" type_identifier identifier ;) (if_statement "if (*(byte *)(param_3 + 4) < 0x25) {\n                    \n                    \n    uVar1 = (*(code *)(&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)))();\n    return uVar1;\n  }" if (parenthesized_expression "(*(byte *)(param_3 + 4) < 0x25)" ( (binary_expression "*(byte *)(param_3 + 4) < 0x25" (pointer_expression "*(byte *)(param_3 + 4)" * (cast_expression "(byte *)(param_3 + 4)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) )))) < number_literal) )) (compound_statement "{\n                    \n                    \n    uVar1 = (*(code *)(&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)))();\n    return uVar1;\n  }" { (expression_statement "uVar1 = (*(code *)(&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)))();" (assignment_expression "uVar1 = (*(code *)(&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)))()" identifier = (call_expression "(*(code *)(&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)))()" (parenthesized_expression "(*(code *)(&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)))" ( (pointer_expression "*(code *)(&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac))" * (cast_expression "(code *)(&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac))" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac))" ( (binary_expression "&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)" (pointer_expression "&_gp_1" & identifier) + (pointer_expression "*(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)" * (cast_expression "(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)" ( (binary_expression "PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac" (binary_expression "PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4" identifier + (binary_expression "(uint)*(byte *)(param_3 + 4) * 4" (binary_expression "(uint)*(byte *)(param_3 + 4)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(byte *)(param_3 + 4)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) )))) * number_literal)) + number_literal) ))))) )))) )) (argument_list "()" ( )))) ;) (return_statement "return uVar1;" return identifier ;) })) (if_statement "if (*(int *)PTR___stack_chk_guard_00040330 == *(int *)PTR___stack_chk_guard_00040330) {\n    return 0;\n  }" if (parenthesized_expression "(*(int *)PTR___stack_chk_guard_00040330 == *(int *)PTR___stack_chk_guard_00040330)" ( (binary_expression "*(int *)PTR___stack_chk_guard_00040330 == *(int *)PTR___stack_chk_guard_00040330" (pointer_expression "*(int *)PTR___stack_chk_guard_00040330" * (cast_expression "(int *)PTR___stack_chk_guard_00040330" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) == (pointer_expression "*(int *)PTR___stack_chk_guard_00040330" * (cast_expression "(int *)PTR___stack_chk_guard_00040330" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "(*(code *)PTR___stack_chk_fail_00040310)();" (call_expression "(*(code *)PTR___stack_chk_fail_00040310)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_00040310)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_00040310" * (cast_expression "(code *)PTR___stack_chk_fail_00040310" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (expression_statement "uVar1 = (*(code *)PTR___assert_fail_00040234)\n                    (PTR_DAT_00040108 + -0xa90,PTR_DAT_00040108 + -0xb80,0xcf3,\n                     PTR_DAT_00040108 + -0x580);" (assignment_expression "uVar1 = (*(code *)PTR___assert_fail_00040234)\n                    (PTR_DAT_00040108 + -0xa90,PTR_DAT_00040108 + -0xb80,0xcf3,\n                     PTR_DAT_00040108 + -0x580)" identifier = (call_expression "(*(code *)PTR___assert_fail_00040234)\n                    (PTR_DAT_00040108 + -0xa90,PTR_DAT_00040108 + -0xb80,0xcf3,\n                     PTR_DAT_00040108 + -0x580)" (parenthesized_expression "(*(code *)PTR___assert_fail_00040234)" ( (pointer_expression "*(code *)PTR___assert_fail_00040234" * (cast_expression "(code *)PTR___assert_fail_00040234" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(PTR_DAT_00040108 + -0xa90,PTR_DAT_00040108 + -0xb80,0xcf3,\n                     PTR_DAT_00040108 + -0x580)" ( (binary_expression "PTR_DAT_00040108 + -0xa90" identifier + number_literal) , (binary_expression "PTR_DAT_00040108 + -0xb80" identifier + number_literal) , number_literal , (binary_expression "PTR_DAT_00040108 + -0x580" identifier + number_literal) )))) ;) (return_statement "return uVar1;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression & IDENT) + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) * LIT)) + LIT) ))))) )))) )) (argument_list ( )))) ;) (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( (binary_expression IDENT + LIT) , (binary_expression IDENT + LIT) , LIT , (binary_expression IDENT + LIT) )))) ;) (return_statement return IDENT ;) })))
(function_definition "undefined4 FUN_000288bc(undefined4 param_1,undefined4 param_2,int param_3)\n\n{\n  undefined4 uVar1;\n  \n  if (*(byte *)(param_3 + 4) < 0x25) {\n                    \n                    \n    uVar1 = (*(code *)(&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)))();\n    return uVar1;\n  }\n  if (*(int *)PTR___stack_chk_guard_00040330 == *(int *)PTR___stack_chk_guard_00040330) {\n    return 0;\n  }\n  (*(code *)PTR___stack_chk_fail_00040310)();\n  uVar1 = (*(code *)PTR___assert_fail_00040234)\n                    (PTR_DAT_00040108 + -0xa90,PTR_DAT_00040108 + -0xb80,0xcf3,\n                     PTR_DAT_00040108 + -0x580);\n  return uVar1;\n}" (type_identifier "undefined4") (function_declarator "FUN_000288bc(undefined4 param_1,undefined4 param_2,int param_3)" (identifier "FUN_000288bc") (parameter_list "(undefined4 param_1,undefined4 param_2,int param_3)" (( "(") (parameter_declaration "undefined4 param_1" (type_identifier "undefined4") (identifier "param_1")) (, ",") (parameter_declaration "undefined4 param_2" (type_identifier "undefined4") (identifier "param_2")) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) () ")"))) (compound_statement "{\n  undefined4 uVar1;\n  \n  if (*(byte *)(param_3 + 4) < 0x25) {\n                    \n                    \n    uVar1 = (*(code *)(&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)))();\n    return uVar1;\n  }\n  if (*(int *)PTR___stack_chk_guard_00040330 == *(int *)PTR___stack_chk_guard_00040330) {\n    return 0;\n  }\n  (*(code *)PTR___stack_chk_fail_00040310)();\n  uVar1 = (*(code *)PTR___assert_fail_00040234)\n                    (PTR_DAT_00040108 + -0xa90,PTR_DAT_00040108 + -0xb80,0xcf3,\n                     PTR_DAT_00040108 + -0x580);\n  return uVar1;\n}" ({ "{") (declaration "undefined4 uVar1;" (type_identifier "undefined4") (identifier "uVar1") (; ";")) (if_statement "if (*(byte *)(param_3 + 4) < 0x25) {\n                    \n                    \n    uVar1 = (*(code *)(&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)))();\n    return uVar1;\n  }" (if "if") (parenthesized_expression "(*(byte *)(param_3 + 4) < 0x25)" (( "(") (binary_expression "*(byte *)(param_3 + 4) < 0x25" (pointer_expression "*(byte *)(param_3 + 4)" (* "*") (cast_expression "(byte *)(param_3 + 4)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 4)" (( "(") (binary_expression "param_3 + 4" (identifier "param_3") (+ "+") (number_literal "4")) () ")")))) (< "<") (number_literal "0x25")) () ")")) (compound_statement "{\n                    \n                    \n    uVar1 = (*(code *)(&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)))();\n    return uVar1;\n  }" ({ "{") (expression_statement "uVar1 = (*(code *)(&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)))();" (assignment_expression "uVar1 = (*(code *)(&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)))()" (identifier "uVar1") (= "=") (call_expression "(*(code *)(&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)))()" (parenthesized_expression "(*(code *)(&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)))" (( "(") (pointer_expression "*(code *)(&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac))" (* "*") (cast_expression "(code *)(&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac))" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac))" (( "(") (binary_expression "&_gp_1 + *(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)" (pointer_expression "&_gp_1" (& "&") (identifier "_gp_1")) (+ "+") (pointer_expression "*(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)" (* "*") (cast_expression "(int *)(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)" (( "(") (binary_expression "PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac" (binary_expression "PTR_DAT_00040108 +\n                                        (uint)*(byte *)(param_3 + 4) * 4" (identifier "PTR_DAT_00040108") (+ "+") (binary_expression "(uint)*(byte *)(param_3 + 4) * 4" (binary_expression "(uint)*(byte *)(param_3 + 4)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (cast_expression "(byte *)(param_3 + 4)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 4)" (( "(") (binary_expression "param_3 + 4" (identifier "param_3") (+ "+") (number_literal "4")) () ")")))) (* "*") (number_literal "4"))) (+ "+") (number_literal "-0x6ac")) () ")"))))) () ")")))) () ")")) (argument_list "()" (( "(") () ")")))) (; ";")) (return_statement "return uVar1;" (return "return") (identifier "uVar1") (; ";")) (} "}"))) (if_statement "if (*(int *)PTR___stack_chk_guard_00040330 == *(int *)PTR___stack_chk_guard_00040330) {\n    return 0;\n  }" (if "if") (parenthesized_expression "(*(int *)PTR___stack_chk_guard_00040330 == *(int *)PTR___stack_chk_guard_00040330)" (( "(") (binary_expression "*(int *)PTR___stack_chk_guard_00040330 == *(int *)PTR___stack_chk_guard_00040330" (pointer_expression "*(int *)PTR___stack_chk_guard_00040330" (* "*") (cast_expression "(int *)PTR___stack_chk_guard_00040330" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___stack_chk_guard_00040330"))) (== "==") (pointer_expression "*(int *)PTR___stack_chk_guard_00040330" (* "*") (cast_expression "(int *)PTR___stack_chk_guard_00040330" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___stack_chk_guard_00040330")))) () ")")) (compound_statement "{\n    return 0;\n  }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "(*(code *)PTR___stack_chk_fail_00040310)();" (call_expression "(*(code *)PTR___stack_chk_fail_00040310)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_00040310)" (( "(") (pointer_expression "*(code *)PTR___stack_chk_fail_00040310" (* "*") (cast_expression "(code *)PTR___stack_chk_fail_00040310" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___stack_chk_fail_00040310"))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "uVar1 = (*(code *)PTR___assert_fail_00040234)\n                    (PTR_DAT_00040108 + -0xa90,PTR_DAT_00040108 + -0xb80,0xcf3,\n                     PTR_DAT_00040108 + -0x580);" (assignment_expression "uVar1 = (*(code *)PTR___assert_fail_00040234)\n                    (PTR_DAT_00040108 + -0xa90,PTR_DAT_00040108 + -0xb80,0xcf3,\n                     PTR_DAT_00040108 + -0x580)" (identifier "uVar1") (= "=") (call_expression "(*(code *)PTR___assert_fail_00040234)\n                    (PTR_DAT_00040108 + -0xa90,PTR_DAT_00040108 + -0xb80,0xcf3,\n                     PTR_DAT_00040108 + -0x580)" (parenthesized_expression "(*(code *)PTR___assert_fail_00040234)" (( "(") (pointer_expression "*(code *)PTR___assert_fail_00040234" (* "*") (cast_expression "(code *)PTR___assert_fail_00040234" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___assert_fail_00040234"))) () ")")) (argument_list "(PTR_DAT_00040108 + -0xa90,PTR_DAT_00040108 + -0xb80,0xcf3,\n                     PTR_DAT_00040108 + -0x580)" (( "(") (binary_expression "PTR_DAT_00040108 + -0xa90" (identifier "PTR_DAT_00040108") (+ "+") (number_literal "-0xa90")) (, ",") (binary_expression "PTR_DAT_00040108 + -0xb80" (identifier "PTR_DAT_00040108") (+ "+") (number_literal "-0xb80")) (, ",") (number_literal "0xcf3") (, ",") (binary_expression "PTR_DAT_00040108 + -0x580" (identifier "PTR_DAT_00040108") (+ "+") (number_literal "-0x580")) () ")")))) (; ";")) (return_statement "return uVar1;" (return "return") (identifier "uVar1") (; ";")) (} "}")))

type_1 *
function_1(type_2 *regexp,type_3 *preg,type_4 *token,type_5 syntax,type_6 nest,
                type_7 *err)

{
  type_1 *pbVar1;
  type_6 char_class_alloc;
  type_8 start_elem;
  type_4 start_token;
  type_4 t;
  type_9 start_name_buf [32];
  type_9 end_name_buf [32];
  
  if ((type_10)token->field_0x4 < 0x25) {
                    /* WARNING: Could not emulate address calculation at 0x00028938 */
                    /* WARNING: Treating indirect jump as call */
    pbVar1 = (type_1 *)
             (*(type_11 *)(&_gp + *(int *)(var_1 + (type_12)(type_10)token->field_0x4 * 4 + -0x6ac
                                       )))();
    return pbVar1;
  }
  if (*(int *)PTR___stack_chk_guard_00040330 == *(int *)PTR___stack_chk_guard_00040330) {
    return (type_1 *)0x0;
  }
  (*(type_11 *)PTR___stack_chk_fail_00040310)();
  pbVar1 = (type_1 *)
           (*(type_11 *)PTR___assert_fail_00040234)
                     (var_1 + -0xa90,var_1 + -0xb80,0xcf3,
                      var_1 + -0x580);
  return pbVar1;
}


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

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

{
  undefined4 uVar1;
  
  if (*(byte *)(param_3 + 4) < 0x25) {
                    /* WARNING: Could not emulate address calculation at 0x00028938 */
                    /* WARNING: Treating indirect jump as call */
    uVar1 = (*(code *)(&_gp_1 + *(int *)(PTR_DAT_00040108 +
                                        (uint)*(byte *)(param_3 + 4) * 4 + -0x6ac)))();
    return uVar1;
  }
  if (*(int *)PTR___stack_chk_guard_00040330 == *(int *)PTR___stack_chk_guard_00040330) {
    return 0;
  }
  (*(code *)PTR___stack_chk_fail_00040310)();
  uVar1 = (*(code *)PTR___assert_fail_00040234)
                    (PTR_DAT_00040108 + -0xa90,PTR_DAT_00040108 + -0xb80,0xcf3,
                     PTR_DAT_00040108 + -0x580);
  return uVar1;
}

