
_Bool bitset_and_or_cmp_(bitset_conflict dst,bitset_conflict src1,bitset_conflict src2,
                        bitset_conflict src3)

{
  undefined1 uVar1;
  undefined *puVar2;
  bitset_conflict bset;
  _Bool _Var3;
  bitset_vtable *pbVar4;
  bitset_type type;
  
  puVar2 = PTR_bitset_stats_enabled_0008dcfc;
  type = ((dst->b).vtable)->type;
  uVar1 = *PTR_bitset_stats_enabled_0008dcfc;
  *PTR_bitset_stats_enabled_0008dcfc = 0;
  if (type == BITSET_STATS) {
    type = bitset_stats_type_get(dst);
  }
  bset = bitset_alloc(0,type);
  pbVar4 = (src1->b).vtable;
  *puVar2 = uVar1;
  (*pbVar4->and_)(bset,src1,src2);
  _Var3 = (*((src3->b).vtable)->or_cmp)(dst,src3,bset);
  bitset_free(bset);
  return _Var3;
}



undefined4 bitset_and_or_cmp_(int *param_1,int *param_2,undefined4 param_3,int *param_4)

{
  undefined1 uVar1;
  undefined *puVar2;
  undefined4 uVar3;
  undefined4 uVar4;
  int iVar5;
  
  puVar2 = PTR_bitset_stats_enabled_0008dcfc;
  iVar5 = *(int *)(*param_1 + 0x80);
  uVar1 = *PTR_bitset_stats_enabled_0008dcfc;
  *PTR_bitset_stats_enabled_0008dcfc = 0;
  if (iVar5 == 5) {
    iVar5 = bitset_stats_type_get();
  }
  uVar3 = bitset_alloc(0,iVar5);
  iVar5 = *param_2;
  *puVar2 = uVar1;
  (**(code **)(iVar5 + 0x3c))(uVar3,param_2,param_3);
  uVar4 = (**(code **)(*param_4 + 0x50))(param_1,param_4,uVar3);
  bitset_free(uVar3);
  return uVar4;
}


lui gp,0x4
addiu gp,gp,-0x297c
addu gp,gp,t9
addiu sp,sp,-0x40
lw v1,0x0(a0)
li v0,0x5
sw s1,0x28(sp)
sw s4,0x34(sp)
or s4,a1,zero
sw gp,0x10(sp)
sw s5,0x38(sp)
sw s3,0x30(sp)
or s3,a0,zero
sw s2,0x2c(sp)
or s2,a3,zero
sw s0,0x24(sp)
or s0,a2,zero
sw ra,0x3c(sp)
lw s1,-0x78f4(gp)
lw a1,0x80(v1)
lbu s5,0x0(s1)
beq a1,v0,0x00058048
_sb zero,0x0(s1)
lw t9,-0x78bc(gp)
bal 0x000574cc
_or a0,zero,zero
or a2,s0,zero
lw v1,0x0(s4)
or a1,s4,zero
sb s5,0x0(s1)
or a0,v0,zero
lw t9,0x3c(v1)
jalr t9
_or s0,v0,zero
or a2,s0,zero
lw v0,0x0(s2)
or a1,s2,zero
lw t9,0x50(v0)
jalr t9
_or a0,s3,zero
or a0,s0,zero
lw gp,0x10(sp)
lw t9,-0x7e5c(gp)
bal 0x000576a8
_sw v0,0x1c(sp)
lw ra,0x3c(sp)
lw v0,0x1c(sp)
lw s5,0x38(sp)
lw s4,0x34(sp)
lw s3,0x30(sp)
lw s2,0x2c(sp)
lw s1,0x28(sp)
lw s0,0x24(sp)
jr ra
_addiu sp,sp,0x40
lw t9,-0x78b8(gp)
bal 0x0005a8fc
_nop
lw gp,0x10(sp)
b 0x00057fc8
_or a1,v0,zero
(translation_unit "undefined4 bitset_and_or_cmp_(int *param_1,int *param_2,undefined4 param_3,int *param_4)\n\n{\n  undefined1 uVar1;\n  undefined *puVar2;\n  undefined4 uVar3;\n  undefined4 uVar4;\n  int iVar5;\n  \n  puVar2 = PTR_bitset_stats_enabled_0008dcfc;\n  iVar5 = *(int *)(*param_1 + 0x80);\n  uVar1 = *PTR_bitset_stats_enabled_0008dcfc;\n  *PTR_bitset_stats_enabled_0008dcfc = 0;\n  if (iVar5 == 5) {\n    iVar5 = bitset_stats_type_get();\n  }\n  uVar3 = bitset_alloc(0,iVar5);\n  iVar5 = *param_2;\n  *puVar2 = uVar1;\n  (**(code **)(iVar5 + 0x3c))(uVar3,param_2,param_3);\n  uVar4 = (**(code **)(*param_4 + 0x50))(param_1,param_4,uVar3);\n  bitset_free(uVar3);\n  return uVar4;\n}\n\n" (function_definition "undefined4 bitset_and_or_cmp_(int *param_1,int *param_2,undefined4 param_3,int *param_4)\n\n{\n  undefined1 uVar1;\n  undefined *puVar2;\n  undefined4 uVar3;\n  undefined4 uVar4;\n  int iVar5;\n  \n  puVar2 = PTR_bitset_stats_enabled_0008dcfc;\n  iVar5 = *(int *)(*param_1 + 0x80);\n  uVar1 = *PTR_bitset_stats_enabled_0008dcfc;\n  *PTR_bitset_stats_enabled_0008dcfc = 0;\n  if (iVar5 == 5) {\n    iVar5 = bitset_stats_type_get();\n  }\n  uVar3 = bitset_alloc(0,iVar5);\n  iVar5 = *param_2;\n  *puVar2 = uVar1;\n  (**(code **)(iVar5 + 0x3c))(uVar3,param_2,param_3);\n  uVar4 = (**(code **)(*param_4 + 0x50))(param_1,param_4,uVar3);\n  bitset_free(uVar3);\n  return uVar4;\n}" type_identifier (function_declarator "bitset_and_or_cmp_(int *param_1,int *param_2,undefined4 param_3,int *param_4)" identifier (parameter_list "(int *param_1,int *param_2,undefined4 param_3,int *param_4)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined4 param_3" type_identifier identifier) , (parameter_declaration "int *param_4" primitive_type (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  undefined1 uVar1;\n  undefined *puVar2;\n  undefined4 uVar3;\n  undefined4 uVar4;\n  int iVar5;\n  \n  puVar2 = PTR_bitset_stats_enabled_0008dcfc;\n  iVar5 = *(int *)(*param_1 + 0x80);\n  uVar1 = *PTR_bitset_stats_enabled_0008dcfc;\n  *PTR_bitset_stats_enabled_0008dcfc = 0;\n  if (iVar5 == 5) {\n    iVar5 = bitset_stats_type_get();\n  }\n  uVar3 = bitset_alloc(0,iVar5);\n  iVar5 = *param_2;\n  *puVar2 = uVar1;\n  (**(code **)(iVar5 + 0x3c))(uVar3,param_2,param_3);\n  uVar4 = (**(code **)(*param_4 + 0x50))(param_1,param_4,uVar3);\n  bitset_free(uVar3);\n  return uVar4;\n}" { (declaration "undefined1 uVar1;" type_identifier identifier ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "undefined4 uVar3;" type_identifier identifier ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (expression_statement "puVar2 = PTR_bitset_stats_enabled_0008dcfc;" (assignment_expression "puVar2 = PTR_bitset_stats_enabled_0008dcfc" identifier = identifier) ;) (expression_statement "iVar5 = *(int *)(*param_1 + 0x80);" (assignment_expression "iVar5 = *(int *)(*param_1 + 0x80)" identifier = (pointer_expression "*(int *)(*param_1 + 0x80)" * (cast_expression "(int *)(*param_1 + 0x80)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x80)" ( (binary_expression "*param_1 + 0x80" (pointer_expression "*param_1" * identifier) + number_literal) ))))) ;) (expression_statement "uVar1 = *PTR_bitset_stats_enabled_0008dcfc;" (assignment_expression "uVar1 = *PTR_bitset_stats_enabled_0008dcfc" identifier = (pointer_expression "*PTR_bitset_stats_enabled_0008dcfc" * identifier)) ;) (expression_statement "*PTR_bitset_stats_enabled_0008dcfc = 0;" (assignment_expression "*PTR_bitset_stats_enabled_0008dcfc = 0" (pointer_expression "*PTR_bitset_stats_enabled_0008dcfc" * identifier) = number_literal) ;) (if_statement "if (iVar5 == 5) {\n    iVar5 = bitset_stats_type_get();\n  }" if (parenthesized_expression "(iVar5 == 5)" ( (binary_expression "iVar5 == 5" identifier == number_literal) )) (compound_statement "{\n    iVar5 = bitset_stats_type_get();\n  }" { (expression_statement "iVar5 = bitset_stats_type_get();" (assignment_expression "iVar5 = bitset_stats_type_get()" identifier = (call_expression "bitset_stats_type_get()" identifier (argument_list "()" ( )))) ;) })) (expression_statement "uVar3 = bitset_alloc(0,iVar5);" (assignment_expression "uVar3 = bitset_alloc(0,iVar5)" identifier = (call_expression "bitset_alloc(0,iVar5)" identifier (argument_list "(0,iVar5)" ( number_literal , identifier )))) ;) (expression_statement "iVar5 = *param_2;" (assignment_expression "iVar5 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "*puVar2 = uVar1;" (assignment_expression "*puVar2 = uVar1" (pointer_expression "*puVar2" * identifier) = identifier) ;) (expression_statement "(**(code **)(iVar5 + 0x3c))(uVar3,param_2,param_3);" (call_expression "(**(code **)(iVar5 + 0x3c))(uVar3,param_2,param_3)" (parenthesized_expression "(**(code **)(iVar5 + 0x3c))" ( (pointer_expression "**(code **)(iVar5 + 0x3c)" * (pointer_expression "*(code **)(iVar5 + 0x3c)" * (cast_expression "(code **)(iVar5 + 0x3c)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar5 + 0x3c)" ( (binary_expression "iVar5 + 0x3c" identifier + number_literal) ))))) )) (argument_list "(uVar3,param_2,param_3)" ( identifier , identifier , identifier ))) ;) (expression_statement "uVar4 = (**(code **)(*param_4 + 0x50))(param_1,param_4,uVar3);" (assignment_expression "uVar4 = (**(code **)(*param_4 + 0x50))(param_1,param_4,uVar3)" identifier = (call_expression "(**(code **)(*param_4 + 0x50))(param_1,param_4,uVar3)" (parenthesized_expression "(**(code **)(*param_4 + 0x50))" ( (pointer_expression "**(code **)(*param_4 + 0x50)" * (pointer_expression "*(code **)(*param_4 + 0x50)" * (cast_expression "(code **)(*param_4 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_4 + 0x50)" ( (binary_expression "*param_4 + 0x50" (pointer_expression "*param_4" * identifier) + number_literal) ))))) )) (argument_list "(param_1,param_4,uVar3)" ( identifier , identifier , identifier )))) ;) (expression_statement "bitset_free(uVar3);" (call_expression "bitset_free(uVar3)" identifier (argument_list "(uVar3)" ( identifier ))) ;) (return_statement "return uVar4;" return identifier ;) })))
(translation_unit "_Bool bitset_and_or_cmp_(bitset_conflict dst,bitset_conflict src1,bitset_conflict src2,\n                        bitset_conflict src3)\n\n{\n  undefined1 uVar1;\n  undefined *puVar2;\n  bitset_conflict bset;\n  _Bool _Var3;\n  bitset_vtable *pbVar4;\n  bitset_type type;\n  \n  puVar2 = PTR_bitset_stats_enabled_0008dcfc;\n  type = ((dst->b).vtable)->type;\n  uVar1 = *PTR_bitset_stats_enabled_0008dcfc;\n  *PTR_bitset_stats_enabled_0008dcfc = 0;\n  if (type == BITSET_STATS) {\n    type = bitset_stats_type_get(dst);\n  }\n  bset = bitset_alloc(0,type);\n  pbVar4 = (src1->b).vtable;\n  *puVar2 = uVar1;\n  (*pbVar4->and_)(bset,src1,src2);\n  _Var3 = (*((src3->b).vtable)->or_cmp)(dst,src3,bset);\n  bitset_free(bset);\n  return _Var3;\n}\n\n" (function_definition "_Bool bitset_and_or_cmp_(bitset_conflict dst,bitset_conflict src1,bitset_conflict src2,\n                        bitset_conflict src3)\n\n{\n  undefined1 uVar1;\n  undefined *puVar2;\n  bitset_conflict bset;\n  _Bool _Var3;\n  bitset_vtable *pbVar4;\n  bitset_type type;\n  \n  puVar2 = PTR_bitset_stats_enabled_0008dcfc;\n  type = ((dst->b).vtable)->type;\n  uVar1 = *PTR_bitset_stats_enabled_0008dcfc;\n  *PTR_bitset_stats_enabled_0008dcfc = 0;\n  if (type == BITSET_STATS) {\n    type = bitset_stats_type_get(dst);\n  }\n  bset = bitset_alloc(0,type);\n  pbVar4 = (src1->b).vtable;\n  *puVar2 = uVar1;\n  (*pbVar4->and_)(bset,src1,src2);\n  _Var3 = (*((src3->b).vtable)->or_cmp)(dst,src3,bset);\n  bitset_free(bset);\n  return _Var3;\n}" type_identifier (function_declarator "bitset_and_or_cmp_(bitset_conflict dst,bitset_conflict src1,bitset_conflict src2,\n                        bitset_conflict src3)" identifier (parameter_list "(bitset_conflict dst,bitset_conflict src1,bitset_conflict src2,\n                        bitset_conflict src3)" ( (parameter_declaration "bitset_conflict dst" type_identifier identifier) , (parameter_declaration "bitset_conflict src1" type_identifier identifier) , (parameter_declaration "bitset_conflict src2" type_identifier identifier) , (parameter_declaration "bitset_conflict src3" type_identifier identifier) ))) (compound_statement "{\n  undefined1 uVar1;\n  undefined *puVar2;\n  bitset_conflict bset;\n  _Bool _Var3;\n  bitset_vtable *pbVar4;\n  bitset_type type;\n  \n  puVar2 = PTR_bitset_stats_enabled_0008dcfc;\n  type = ((dst->b).vtable)->type;\n  uVar1 = *PTR_bitset_stats_enabled_0008dcfc;\n  *PTR_bitset_stats_enabled_0008dcfc = 0;\n  if (type == BITSET_STATS) {\n    type = bitset_stats_type_get(dst);\n  }\n  bset = bitset_alloc(0,type);\n  pbVar4 = (src1->b).vtable;\n  *puVar2 = uVar1;\n  (*pbVar4->and_)(bset,src1,src2);\n  _Var3 = (*((src3->b).vtable)->or_cmp)(dst,src3,bset);\n  bitset_free(bset);\n  return _Var3;\n}" { (declaration "undefined1 uVar1;" type_identifier identifier ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "bitset_conflict bset;" type_identifier identifier ;) (declaration "_Bool _Var3;" type_identifier identifier ;) (declaration "bitset_vtable *pbVar4;" type_identifier (pointer_declarator "*pbVar4" * identifier) ;) (declaration "bitset_type type;" type_identifier identifier ;) (expression_statement "puVar2 = PTR_bitset_stats_enabled_0008dcfc;" (assignment_expression "puVar2 = PTR_bitset_stats_enabled_0008dcfc" identifier = identifier) ;) (expression_statement "type = ((dst->b).vtable)->type;" (assignment_expression "type = ((dst->b).vtable)->type" identifier = (field_expression "((dst->b).vtable)->type" (parenthesized_expression "((dst->b).vtable)" ( (field_expression "(dst->b).vtable" (parenthesized_expression "(dst->b)" ( (field_expression "dst->b" identifier -> field_identifier) )) . field_identifier) )) -> field_identifier)) ;) (expression_statement "uVar1 = *PTR_bitset_stats_enabled_0008dcfc;" (assignment_expression "uVar1 = *PTR_bitset_stats_enabled_0008dcfc" identifier = (pointer_expression "*PTR_bitset_stats_enabled_0008dcfc" * identifier)) ;) (expression_statement "*PTR_bitset_stats_enabled_0008dcfc = 0;" (assignment_expression "*PTR_bitset_stats_enabled_0008dcfc = 0" (pointer_expression "*PTR_bitset_stats_enabled_0008dcfc" * identifier) = number_literal) ;) (if_statement "if (type == BITSET_STATS) {\n    type = bitset_stats_type_get(dst);\n  }" if (parenthesized_expression "(type == BITSET_STATS)" ( (binary_expression "type == BITSET_STATS" identifier == identifier) )) (compound_statement "{\n    type = bitset_stats_type_get(dst);\n  }" { (expression_statement "type = bitset_stats_type_get(dst);" (assignment_expression "type = bitset_stats_type_get(dst)" identifier = (call_expression "bitset_stats_type_get(dst)" identifier (argument_list "(dst)" ( identifier )))) ;) })) (expression_statement "bset = bitset_alloc(0,type);" (assignment_expression "bset = bitset_alloc(0,type)" identifier = (call_expression "bitset_alloc(0,type)" identifier (argument_list "(0,type)" ( number_literal , identifier )))) ;) (expression_statement "pbVar4 = (src1->b).vtable;" (assignment_expression "pbVar4 = (src1->b).vtable" identifier = (field_expression "(src1->b).vtable" (parenthesized_expression "(src1->b)" ( (field_expression "src1->b" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "*puVar2 = uVar1;" (assignment_expression "*puVar2 = uVar1" (pointer_expression "*puVar2" * identifier) = identifier) ;) (expression_statement "(*pbVar4->and_)(bset,src1,src2);" (call_expression "(*pbVar4->and_)(bset,src1,src2)" (parenthesized_expression "(*pbVar4->and_)" ( (pointer_expression "*pbVar4->and_" * (field_expression "pbVar4->and_" identifier -> field_identifier)) )) (argument_list "(bset,src1,src2)" ( identifier , identifier , identifier ))) ;) (expression_statement "_Var3 = (*((src3->b).vtable)->or_cmp)(dst,src3,bset);" (assignment_expression "_Var3 = (*((src3->b).vtable)->or_cmp)(dst,src3,bset)" identifier = (call_expression "(*((src3->b).vtable)->or_cmp)(dst,src3,bset)" (parenthesized_expression "(*((src3->b).vtable)->or_cmp)" ( (pointer_expression "*((src3->b).vtable)->or_cmp" * (field_expression "((src3->b).vtable)->or_cmp" (parenthesized_expression "((src3->b).vtable)" ( (field_expression "(src3->b).vtable" (parenthesized_expression "(src3->b)" ( (field_expression "src3->b" identifier -> field_identifier) )) . field_identifier) )) -> field_identifier)) )) (argument_list "(dst,src3,bset)" ( identifier , identifier , identifier )))) ;) (expression_statement "bitset_free(bset);" (call_expression "bitset_free(bset)" identifier (argument_list "(bset)" ( identifier ))) ;) (return_statement "return _Var3;" return identifier ;) })))
(translation_unit "undefined4 bitset_and_or_cmp_(int *param_1,int *param_2,undefined4 param_3,int *param_4)\n\n{\n  undefined1 uVar1;\n  undefined *puVar2;\n  undefined4 uVar3;\n  undefined4 uVar4;\n  int iVar5;\n  \n  puVar2 = PTR_bitset_stats_enabled_0008dcfc;\n  iVar5 = *(int *)(*param_1 + 0x80);\n  uVar1 = *PTR_bitset_stats_enabled_0008dcfc;\n  *PTR_bitset_stats_enabled_0008dcfc = 0;\n  if (iVar5 == 5) {\n    iVar5 = bitset_stats_type_get();\n  }\n  uVar3 = bitset_alloc(0,iVar5);\n  iVar5 = *param_2;\n  *puVar2 = uVar1;\n  (**(code **)(iVar5 + 0x3c))(uVar3,param_2,param_3);\n  uVar4 = (**(code **)(*param_4 + 0x50))(param_1,param_4,uVar3);\n  bitset_free(uVar3);\n  return uVar4;\n}\n\n" (function_definition "undefined4 bitset_and_or_cmp_(int *param_1,int *param_2,undefined4 param_3,int *param_4)\n\n{\n  undefined1 uVar1;\n  undefined *puVar2;\n  undefined4 uVar3;\n  undefined4 uVar4;\n  int iVar5;\n  \n  puVar2 = PTR_bitset_stats_enabled_0008dcfc;\n  iVar5 = *(int *)(*param_1 + 0x80);\n  uVar1 = *PTR_bitset_stats_enabled_0008dcfc;\n  *PTR_bitset_stats_enabled_0008dcfc = 0;\n  if (iVar5 == 5) {\n    iVar5 = bitset_stats_type_get();\n  }\n  uVar3 = bitset_alloc(0,iVar5);\n  iVar5 = *param_2;\n  *puVar2 = uVar1;\n  (**(code **)(iVar5 + 0x3c))(uVar3,param_2,param_3);\n  uVar4 = (**(code **)(*param_4 + 0x50))(param_1,param_4,uVar3);\n  bitset_free(uVar3);\n  return uVar4;\n}" type_identifier (function_declarator "bitset_and_or_cmp_(int *param_1,int *param_2,undefined4 param_3,int *param_4)" identifier (parameter_list "(int *param_1,int *param_2,undefined4 param_3,int *param_4)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined4 param_3" type_identifier identifier) , (parameter_declaration "int *param_4" primitive_type (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  undefined1 uVar1;\n  undefined *puVar2;\n  undefined4 uVar3;\n  undefined4 uVar4;\n  int iVar5;\n  \n  puVar2 = PTR_bitset_stats_enabled_0008dcfc;\n  iVar5 = *(int *)(*param_1 + 0x80);\n  uVar1 = *PTR_bitset_stats_enabled_0008dcfc;\n  *PTR_bitset_stats_enabled_0008dcfc = 0;\n  if (iVar5 == 5) {\n    iVar5 = bitset_stats_type_get();\n  }\n  uVar3 = bitset_alloc(0,iVar5);\n  iVar5 = *param_2;\n  *puVar2 = uVar1;\n  (**(code **)(iVar5 + 0x3c))(uVar3,param_2,param_3);\n  uVar4 = (**(code **)(*param_4 + 0x50))(param_1,param_4,uVar3);\n  bitset_free(uVar3);\n  return uVar4;\n}" { (declaration "undefined1 uVar1;" type_identifier identifier ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "undefined4 uVar3;" type_identifier identifier ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (expression_statement "puVar2 = PTR_bitset_stats_enabled_0008dcfc;" (assignment_expression "puVar2 = PTR_bitset_stats_enabled_0008dcfc" identifier = identifier) ;) (expression_statement "iVar5 = *(int *)(*param_1 + 0x80);" (assignment_expression "iVar5 = *(int *)(*param_1 + 0x80)" identifier = (pointer_expression "*(int *)(*param_1 + 0x80)" * (cast_expression "(int *)(*param_1 + 0x80)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x80)" ( (binary_expression "*param_1 + 0x80" (pointer_expression "*param_1" * identifier) + number_literal) ))))) ;) (expression_statement "uVar1 = *PTR_bitset_stats_enabled_0008dcfc;" (assignment_expression "uVar1 = *PTR_bitset_stats_enabled_0008dcfc" identifier = (pointer_expression "*PTR_bitset_stats_enabled_0008dcfc" * identifier)) ;) (expression_statement "*PTR_bitset_stats_enabled_0008dcfc = 0;" (assignment_expression "*PTR_bitset_stats_enabled_0008dcfc = 0" (pointer_expression "*PTR_bitset_stats_enabled_0008dcfc" * identifier) = number_literal) ;) (if_statement "if (iVar5 == 5) {\n    iVar5 = bitset_stats_type_get();\n  }" if (parenthesized_expression "(iVar5 == 5)" ( (binary_expression "iVar5 == 5" identifier == number_literal) )) (compound_statement "{\n    iVar5 = bitset_stats_type_get();\n  }" { (expression_statement "iVar5 = bitset_stats_type_get();" (assignment_expression "iVar5 = bitset_stats_type_get()" identifier = (call_expression "bitset_stats_type_get()" identifier (argument_list "()" ( )))) ;) })) (expression_statement "uVar3 = bitset_alloc(0,iVar5);" (assignment_expression "uVar3 = bitset_alloc(0,iVar5)" identifier = (call_expression "bitset_alloc(0,iVar5)" identifier (argument_list "(0,iVar5)" ( number_literal , identifier )))) ;) (expression_statement "iVar5 = *param_2;" (assignment_expression "iVar5 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "*puVar2 = uVar1;" (assignment_expression "*puVar2 = uVar1" (pointer_expression "*puVar2" * identifier) = identifier) ;) (expression_statement "(**(code **)(iVar5 + 0x3c))(uVar3,param_2,param_3);" (call_expression "(**(code **)(iVar5 + 0x3c))(uVar3,param_2,param_3)" (parenthesized_expression "(**(code **)(iVar5 + 0x3c))" ( (pointer_expression "**(code **)(iVar5 + 0x3c)" * (pointer_expression "*(code **)(iVar5 + 0x3c)" * (cast_expression "(code **)(iVar5 + 0x3c)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar5 + 0x3c)" ( (binary_expression "iVar5 + 0x3c" identifier + number_literal) ))))) )) (argument_list "(uVar3,param_2,param_3)" ( identifier , identifier , identifier ))) ;) (expression_statement "uVar4 = (**(code **)(*param_4 + 0x50))(param_1,param_4,uVar3);" (assignment_expression "uVar4 = (**(code **)(*param_4 + 0x50))(param_1,param_4,uVar3)" identifier = (call_expression "(**(code **)(*param_4 + 0x50))(param_1,param_4,uVar3)" (parenthesized_expression "(**(code **)(*param_4 + 0x50))" ( (pointer_expression "**(code **)(*param_4 + 0x50)" * (pointer_expression "*(code **)(*param_4 + 0x50)" * (cast_expression "(code **)(*param_4 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_4 + 0x50)" ( (binary_expression "*param_4 + 0x50" (pointer_expression "*param_4" * identifier) + number_literal) ))))) )) (argument_list "(param_1,param_4,uVar3)" ( identifier , identifier , identifier )))) ;) (expression_statement "bitset_free(uVar3);" (call_expression "bitset_free(uVar3)" identifier (argument_list "(uVar3)" ( identifier ))) ;) (return_statement "return uVar4;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( IDENT , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT , IDENT , IDENT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (return_statement return IDENT ;) })))
(function_definition "undefined4 bitset_and_or_cmp_(int *param_1,int *param_2,undefined4 param_3,int *param_4)\n\n{\n  undefined1 uVar1;\n  undefined *puVar2;\n  undefined4 uVar3;\n  undefined4 uVar4;\n  int iVar5;\n  \n  puVar2 = PTR_bitset_stats_enabled_0008dcfc;\n  iVar5 = *(int *)(*param_1 + 0x80);\n  uVar1 = *PTR_bitset_stats_enabled_0008dcfc;\n  *PTR_bitset_stats_enabled_0008dcfc = 0;\n  if (iVar5 == 5) {\n    iVar5 = bitset_stats_type_get();\n  }\n  uVar3 = bitset_alloc(0,iVar5);\n  iVar5 = *param_2;\n  *puVar2 = uVar1;\n  (**(code **)(iVar5 + 0x3c))(uVar3,param_2,param_3);\n  uVar4 = (**(code **)(*param_4 + 0x50))(param_1,param_4,uVar3);\n  bitset_free(uVar3);\n  return uVar4;\n}" (type_identifier "undefined4") (function_declarator "bitset_and_or_cmp_(int *param_1,int *param_2,undefined4 param_3,int *param_4)" (identifier "bitset_and_or_cmp_") (parameter_list "(int *param_1,int *param_2,undefined4 param_3,int *param_4)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int *param_2" (primitive_type "int") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "undefined4 param_3" (type_identifier "undefined4") (identifier "param_3")) (, ",") (parameter_declaration "int *param_4" (primitive_type "int") (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) () ")"))) (compound_statement "{\n  undefined1 uVar1;\n  undefined *puVar2;\n  undefined4 uVar3;\n  undefined4 uVar4;\n  int iVar5;\n  \n  puVar2 = PTR_bitset_stats_enabled_0008dcfc;\n  iVar5 = *(int *)(*param_1 + 0x80);\n  uVar1 = *PTR_bitset_stats_enabled_0008dcfc;\n  *PTR_bitset_stats_enabled_0008dcfc = 0;\n  if (iVar5 == 5) {\n    iVar5 = bitset_stats_type_get();\n  }\n  uVar3 = bitset_alloc(0,iVar5);\n  iVar5 = *param_2;\n  *puVar2 = uVar1;\n  (**(code **)(iVar5 + 0x3c))(uVar3,param_2,param_3);\n  uVar4 = (**(code **)(*param_4 + 0x50))(param_1,param_4,uVar3);\n  bitset_free(uVar3);\n  return uVar4;\n}" ({ "{") (declaration "undefined1 uVar1;" (type_identifier "undefined1") (identifier "uVar1") (; ";")) (declaration "undefined *puVar2;" (type_identifier "undefined") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "undefined4 uVar3;" (type_identifier "undefined4") (identifier "uVar3") (; ";")) (declaration "undefined4 uVar4;" (type_identifier "undefined4") (identifier "uVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (expression_statement "puVar2 = PTR_bitset_stats_enabled_0008dcfc;" (assignment_expression "puVar2 = PTR_bitset_stats_enabled_0008dcfc" (identifier "puVar2") (= "=") (identifier "PTR_bitset_stats_enabled_0008dcfc")) (; ";")) (expression_statement "iVar5 = *(int *)(*param_1 + 0x80);" (assignment_expression "iVar5 = *(int *)(*param_1 + 0x80)" (identifier "iVar5") (= "=") (pointer_expression "*(int *)(*param_1 + 0x80)" (* "*") (cast_expression "(int *)(*param_1 + 0x80)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + 0x80)" (( "(") (binary_expression "*param_1 + 0x80" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x80")) () ")"))))) (; ";")) (expression_statement "uVar1 = *PTR_bitset_stats_enabled_0008dcfc;" (assignment_expression "uVar1 = *PTR_bitset_stats_enabled_0008dcfc" (identifier "uVar1") (= "=") (pointer_expression "*PTR_bitset_stats_enabled_0008dcfc" (* "*") (identifier "PTR_bitset_stats_enabled_0008dcfc"))) (; ";")) (expression_statement "*PTR_bitset_stats_enabled_0008dcfc = 0;" (assignment_expression "*PTR_bitset_stats_enabled_0008dcfc = 0" (pointer_expression "*PTR_bitset_stats_enabled_0008dcfc" (* "*") (identifier "PTR_bitset_stats_enabled_0008dcfc")) (= "=") (number_literal "0")) (; ";")) (if_statement "if (iVar5 == 5) {\n    iVar5 = bitset_stats_type_get();\n  }" (if "if") (parenthesized_expression "(iVar5 == 5)" (( "(") (binary_expression "iVar5 == 5" (identifier "iVar5") (== "==") (number_literal "5")) () ")")) (compound_statement "{\n    iVar5 = bitset_stats_type_get();\n  }" ({ "{") (expression_statement "iVar5 = bitset_stats_type_get();" (assignment_expression "iVar5 = bitset_stats_type_get()" (identifier "iVar5") (= "=") (call_expression "bitset_stats_type_get()" (identifier "bitset_stats_type_get") (argument_list "()" (( "(") () ")")))) (; ";")) (} "}"))) (expression_statement "uVar3 = bitset_alloc(0,iVar5);" (assignment_expression "uVar3 = bitset_alloc(0,iVar5)" (identifier "uVar3") (= "=") (call_expression "bitset_alloc(0,iVar5)" (identifier "bitset_alloc") (argument_list "(0,iVar5)" (( "(") (number_literal "0") (, ",") (identifier "iVar5") () ")")))) (; ";")) (expression_statement "iVar5 = *param_2;" (assignment_expression "iVar5 = *param_2" (identifier "iVar5") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (expression_statement "*puVar2 = uVar1;" (assignment_expression "*puVar2 = uVar1" (pointer_expression "*puVar2" (* "*") (identifier "puVar2")) (= "=") (identifier "uVar1")) (; ";")) (expression_statement "(**(code **)(iVar5 + 0x3c))(uVar3,param_2,param_3);" (call_expression "(**(code **)(iVar5 + 0x3c))(uVar3,param_2,param_3)" (parenthesized_expression "(**(code **)(iVar5 + 0x3c))" (( "(") (pointer_expression "**(code **)(iVar5 + 0x3c)" (* "*") (pointer_expression "*(code **)(iVar5 + 0x3c)" (* "*") (cast_expression "(code **)(iVar5 + 0x3c)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar5 + 0x3c)" (( "(") (binary_expression "iVar5 + 0x3c" (identifier "iVar5") (+ "+") (number_literal "0x3c")) () ")"))))) () ")")) (argument_list "(uVar3,param_2,param_3)" (( "(") (identifier "uVar3") (, ",") (identifier "param_2") (, ",") (identifier "param_3") () ")"))) (; ";")) (expression_statement "uVar4 = (**(code **)(*param_4 + 0x50))(param_1,param_4,uVar3);" (assignment_expression "uVar4 = (**(code **)(*param_4 + 0x50))(param_1,param_4,uVar3)" (identifier "uVar4") (= "=") (call_expression "(**(code **)(*param_4 + 0x50))(param_1,param_4,uVar3)" (parenthesized_expression "(**(code **)(*param_4 + 0x50))" (( "(") (pointer_expression "**(code **)(*param_4 + 0x50)" (* "*") (pointer_expression "*(code **)(*param_4 + 0x50)" (* "*") (cast_expression "(code **)(*param_4 + 0x50)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_4 + 0x50)" (( "(") (binary_expression "*param_4 + 0x50" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (+ "+") (number_literal "0x50")) () ")"))))) () ")")) (argument_list "(param_1,param_4,uVar3)" (( "(") (identifier "param_1") (, ",") (identifier "param_4") (, ",") (identifier "uVar3") () ")")))) (; ";")) (expression_statement "bitset_free(uVar3);" (call_expression "bitset_free(uVar3)" (identifier "bitset_free") (argument_list "(uVar3)" (( "(") (identifier "uVar3") () ")"))) (; ";")) (return_statement "return uVar4;" (return "return") (identifier "uVar4") (; ";")) (} "}")))

type_1 function_1(type_2 dst,type_2 src1,type_2 src2,
                        type_2 src3)

{
  type_3 uVar1;
  type_4 *puVar2;
  type_2 bset;
  type_1 _Var3;
  type_5 *pbVar4;
  type_6 var_1;
  
  puVar2 = PTR_bitset_stats_enabled_0008dcfc;
  var_1 = ((dst->b).vtable)->var_1;
  uVar1 = *PTR_bitset_stats_enabled_0008dcfc;
  *PTR_bitset_stats_enabled_0008dcfc = 0;
  if (var_1 == var_2) {
    var_1 = var_3(dst);
  }
  bset = var_4(0,var_1);
  pbVar4 = (src1->b).vtable;
  *puVar2 = uVar1;
  (*pbVar4->and_)(bset,src1,src2);
  _Var3 = (*((src3->b).vtable)->or_cmp)(dst,src3,bset);
  var_5(bset);
  return _Var3;
}


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

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

{
  undefined1 uVar1;
  undefined *puVar2;
  undefined4 uVar3;
  undefined4 uVar4;
  int iVar5;
  
  puVar2 = PTR_bitset_stats_enabled_0008dcfc;
  iVar5 = *(int *)(*param_1 + 0x80);
  uVar1 = *PTR_bitset_stats_enabled_0008dcfc;
  *PTR_bitset_stats_enabled_0008dcfc = 0;
  if (iVar5 == 5) {
    iVar5 = bitset_stats_type_get();
  }
  uVar3 = bitset_alloc(0,iVar5);
  iVar5 = *param_2;
  *puVar2 = uVar1;
  (**(code **)(iVar5 + 0x3c))(uVar3,param_2,param_3);
  uVar4 = (**(code **)(*param_4 + 0x50))(param_1,param_4,uVar3);
  bitset_free(uVar3);
  return uVar4;
}

