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

{
  _Bool _Var1;
  bitset_type type;
  bitset_conflict bset;
  
  _Var1 = bitset_stats_enabled;
  bitset_stats_enabled = false;
  type = bitset_type_get(dst);
  bset = bitset_alloc(0,type);
  bitset_stats_enabled = _Var1;
  (*((src1->b).vtable)->or_)(bset,src1,src2);
  _Var1 = (*((src3->b).vtable)->and_cmp)(dst,src3,bset);
  bitset_free(bset);
  return _Var1;
}



undefined4 FUN_001369bc(undefined8 param_1,long *param_2,undefined8 param_3,long *param_4)

{
  undefined1 uVar1;
  undefined4 uVar2;
  undefined8 uVar3;
  
  uVar1 = DAT_00163868;
  DAT_00163868 = 0;
  uVar2 = FUN_00136495();
  uVar3 = FUN_0013636a(0,uVar2);
  DAT_00163868 = uVar1;
  (**(code **)(*param_2 + 0x98))(uVar3,param_2,param_3);
  uVar2 = (**(code **)(*param_4 + 0x80))(param_1,param_4,uVar3);
  FUN_0013645b(uVar3);
  return uVar2;
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x8
MOV RBP,RDI
MOV R13,RSI
MOV R14,RDX
MOV R12,RCX
MOVZX R15D,byte ptr [0x00163868]
MOV byte ptr [0x00163868],0x0
CALL 0x00136495
MOV ESI,EAX
MOV EDI,0x0
CALL 0x0013636a
MOV RBX,RAX
MOV byte ptr [0x00163868],R15B
MOV RAX,qword ptr [R13]
MOV RDX,R14
MOV RSI,R13
MOV RDI,RBX
CALL qword ptr [RAX + 0x98]
MOV RAX,qword ptr [R12]
MOV RDX,RBX
MOV RSI,R12
MOV RDI,RBP
CALL qword ptr [RAX + 0x80]
MOV EBP,EAX
MOV RDI,RBX
CALL 0x0013645b
MOV EAX,EBP
ADD RSP,0x8
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
(translation_unit "undefined4 FUN_001369bc(undefined8 param_1,long *param_2,undefined8 param_3,long *param_4)\n\n{\n  undefined1 uVar1;\n  undefined4 uVar2;\n  undefined8 uVar3;\n  \n  uVar1 = DAT_00163868;\n  DAT_00163868 = 0;\n  uVar2 = FUN_00136495();\n  uVar3 = FUN_0013636a(0,uVar2);\n  DAT_00163868 = uVar1;\n  (**(code **)(*param_2 + 0x98))(uVar3,param_2,param_3);\n  uVar2 = (**(code **)(*param_4 + 0x80))(param_1,param_4,uVar3);\n  FUN_0013645b(uVar3);\n  return uVar2;\n}\n\n" (function_definition "undefined4 FUN_001369bc(undefined8 param_1,long *param_2,undefined8 param_3,long *param_4)\n\n{\n  undefined1 uVar1;\n  undefined4 uVar2;\n  undefined8 uVar3;\n  \n  uVar1 = DAT_00163868;\n  DAT_00163868 = 0;\n  uVar2 = FUN_00136495();\n  uVar3 = FUN_0013636a(0,uVar2);\n  DAT_00163868 = uVar1;\n  (**(code **)(*param_2 + 0x98))(uVar3,param_2,param_3);\n  uVar2 = (**(code **)(*param_4 + 0x80))(param_1,param_4,uVar3);\n  FUN_0013645b(uVar3);\n  return uVar2;\n}" type_identifier (function_declarator "FUN_001369bc(undefined8 param_1,long *param_2,undefined8 param_3,long *param_4)" identifier (parameter_list "(undefined8 param_1,long *param_2,undefined8 param_3,long *param_4)" ( (parameter_declaration "undefined8 param_1" type_identifier identifier) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined8 param_3" type_identifier identifier) , (parameter_declaration "long *param_4" (sized_type_specifier "long" long) (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  undefined1 uVar1;\n  undefined4 uVar2;\n  undefined8 uVar3;\n  \n  uVar1 = DAT_00163868;\n  DAT_00163868 = 0;\n  uVar2 = FUN_00136495();\n  uVar3 = FUN_0013636a(0,uVar2);\n  DAT_00163868 = uVar1;\n  (**(code **)(*param_2 + 0x98))(uVar3,param_2,param_3);\n  uVar2 = (**(code **)(*param_4 + 0x80))(param_1,param_4,uVar3);\n  FUN_0013645b(uVar3);\n  return uVar2;\n}" { (declaration "undefined1 uVar1;" type_identifier identifier ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (declaration "undefined8 uVar3;" type_identifier identifier ;) (expression_statement "uVar1 = DAT_00163868;" (assignment_expression "uVar1 = DAT_00163868" identifier = identifier) ;) (expression_statement "DAT_00163868 = 0;" (assignment_expression "DAT_00163868 = 0" identifier = number_literal) ;) (expression_statement "uVar2 = FUN_00136495();" (assignment_expression "uVar2 = FUN_00136495()" identifier = (call_expression "FUN_00136495()" identifier (argument_list "()" ( )))) ;) (expression_statement "uVar3 = FUN_0013636a(0,uVar2);" (assignment_expression "uVar3 = FUN_0013636a(0,uVar2)" identifier = (call_expression "FUN_0013636a(0,uVar2)" identifier (argument_list "(0,uVar2)" ( number_literal , identifier )))) ;) (expression_statement "DAT_00163868 = uVar1;" (assignment_expression "DAT_00163868 = uVar1" identifier = identifier) ;) (expression_statement "(**(code **)(*param_2 + 0x98))(uVar3,param_2,param_3);" (call_expression "(**(code **)(*param_2 + 0x98))(uVar3,param_2,param_3)" (parenthesized_expression "(**(code **)(*param_2 + 0x98))" ( (pointer_expression "**(code **)(*param_2 + 0x98)" * (pointer_expression "*(code **)(*param_2 + 0x98)" * (cast_expression "(code **)(*param_2 + 0x98)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0x98)" ( (binary_expression "*param_2 + 0x98" (pointer_expression "*param_2" * identifier) + number_literal) ))))) )) (argument_list "(uVar3,param_2,param_3)" ( identifier , identifier , identifier ))) ;) (expression_statement "uVar2 = (**(code **)(*param_4 + 0x80))(param_1,param_4,uVar3);" (assignment_expression "uVar2 = (**(code **)(*param_4 + 0x80))(param_1,param_4,uVar3)" identifier = (call_expression "(**(code **)(*param_4 + 0x80))(param_1,param_4,uVar3)" (parenthesized_expression "(**(code **)(*param_4 + 0x80))" ( (pointer_expression "**(code **)(*param_4 + 0x80)" * (pointer_expression "*(code **)(*param_4 + 0x80)" * (cast_expression "(code **)(*param_4 + 0x80)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_4 + 0x80)" ( (binary_expression "*param_4 + 0x80" (pointer_expression "*param_4" * identifier) + number_literal) ))))) )) (argument_list "(param_1,param_4,uVar3)" ( identifier , identifier , identifier )))) ;) (expression_statement "FUN_0013645b(uVar3);" (call_expression "FUN_0013645b(uVar3)" identifier (argument_list "(uVar3)" ( identifier ))) ;) (return_statement "return uVar2;" return identifier ;) })))
(translation_unit "_Bool bitset_or_and_cmp_(bitset_conflict dst,bitset_conflict src1,bitset_conflict src2,\n                        bitset_conflict src3)\n\n{\n  _Bool _Var1;\n  bitset_type type;\n  bitset_conflict bset;\n  \n  _Var1 = bitset_stats_enabled;\n  bitset_stats_enabled = false;\n  type = bitset_type_get(dst);\n  bset = bitset_alloc(0,type);\n  bitset_stats_enabled = _Var1;\n  (*((src1->b).vtable)->or_)(bset,src1,src2);\n  _Var1 = (*((src3->b).vtable)->and_cmp)(dst,src3,bset);\n  bitset_free(bset);\n  return _Var1;\n}\n\n" (function_definition "_Bool bitset_or_and_cmp_(bitset_conflict dst,bitset_conflict src1,bitset_conflict src2,\n                        bitset_conflict src3)\n\n{\n  _Bool _Var1;\n  bitset_type type;\n  bitset_conflict bset;\n  \n  _Var1 = bitset_stats_enabled;\n  bitset_stats_enabled = false;\n  type = bitset_type_get(dst);\n  bset = bitset_alloc(0,type);\n  bitset_stats_enabled = _Var1;\n  (*((src1->b).vtable)->or_)(bset,src1,src2);\n  _Var1 = (*((src3->b).vtable)->and_cmp)(dst,src3,bset);\n  bitset_free(bset);\n  return _Var1;\n}" type_identifier (function_declarator "bitset_or_and_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  _Bool _Var1;\n  bitset_type type;\n  bitset_conflict bset;\n  \n  _Var1 = bitset_stats_enabled;\n  bitset_stats_enabled = false;\n  type = bitset_type_get(dst);\n  bset = bitset_alloc(0,type);\n  bitset_stats_enabled = _Var1;\n  (*((src1->b).vtable)->or_)(bset,src1,src2);\n  _Var1 = (*((src3->b).vtable)->and_cmp)(dst,src3,bset);\n  bitset_free(bset);\n  return _Var1;\n}" { (declaration "_Bool _Var1;" type_identifier identifier ;) (declaration "bitset_type type;" type_identifier identifier ;) (declaration "bitset_conflict bset;" type_identifier identifier ;) (expression_statement "_Var1 = bitset_stats_enabled;" (assignment_expression "_Var1 = bitset_stats_enabled" identifier = identifier) ;) (expression_statement "bitset_stats_enabled = false;" (assignment_expression "bitset_stats_enabled = false" identifier = false) ;) (expression_statement "type = bitset_type_get(dst);" (assignment_expression "type = bitset_type_get(dst)" identifier = (call_expression "bitset_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 "bitset_stats_enabled = _Var1;" (assignment_expression "bitset_stats_enabled = _Var1" identifier = identifier) ;) (expression_statement "(*((src1->b).vtable)->or_)(bset,src1,src2);" (call_expression "(*((src1->b).vtable)->or_)(bset,src1,src2)" (parenthesized_expression "(*((src1->b).vtable)->or_)" ( (pointer_expression "*((src1->b).vtable)->or_" * (field_expression "((src1->b).vtable)->or_" (parenthesized_expression "((src1->b).vtable)" ( (field_expression "(src1->b).vtable" (parenthesized_expression "(src1->b)" ( (field_expression "src1->b" identifier -> field_identifier) )) . field_identifier) )) -> field_identifier)) )) (argument_list "(bset,src1,src2)" ( identifier , identifier , identifier ))) ;) (expression_statement "_Var1 = (*((src3->b).vtable)->and_cmp)(dst,src3,bset);" (assignment_expression "_Var1 = (*((src3->b).vtable)->and_cmp)(dst,src3,bset)" identifier = (call_expression "(*((src3->b).vtable)->and_cmp)(dst,src3,bset)" (parenthesized_expression "(*((src3->b).vtable)->and_cmp)" ( (pointer_expression "*((src3->b).vtable)->and_cmp" * (field_expression "((src3->b).vtable)->and_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 _Var1;" return identifier ;) })))
(translation_unit "undefined4 FUN_001369bc(undefined8 param_1,long *param_2,undefined8 param_3,long *param_4)\n\n{\n  undefined1 uVar1;\n  undefined4 uVar2;\n  undefined8 uVar3;\n  \n  uVar1 = DAT_00163868;\n  DAT_00163868 = 0;\n  uVar2 = FUN_00136495();\n  uVar3 = FUN_0013636a(0,uVar2);\n  DAT_00163868 = uVar1;\n  (**(code **)(*param_2 + 0x98))(uVar3,param_2,param_3);\n  uVar2 = (**(code **)(*param_4 + 0x80))(param_1,param_4,uVar3);\n  FUN_0013645b(uVar3);\n  return uVar2;\n}\n\n" (function_definition "undefined4 FUN_001369bc(undefined8 param_1,long *param_2,undefined8 param_3,long *param_4)\n\n{\n  undefined1 uVar1;\n  undefined4 uVar2;\n  undefined8 uVar3;\n  \n  uVar1 = DAT_00163868;\n  DAT_00163868 = 0;\n  uVar2 = FUN_00136495();\n  uVar3 = FUN_0013636a(0,uVar2);\n  DAT_00163868 = uVar1;\n  (**(code **)(*param_2 + 0x98))(uVar3,param_2,param_3);\n  uVar2 = (**(code **)(*param_4 + 0x80))(param_1,param_4,uVar3);\n  FUN_0013645b(uVar3);\n  return uVar2;\n}" type_identifier (function_declarator "FUN_001369bc(undefined8 param_1,long *param_2,undefined8 param_3,long *param_4)" identifier (parameter_list "(undefined8 param_1,long *param_2,undefined8 param_3,long *param_4)" ( (parameter_declaration "undefined8 param_1" type_identifier identifier) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined8 param_3" type_identifier identifier) , (parameter_declaration "long *param_4" (sized_type_specifier "long" long) (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  undefined1 uVar1;\n  undefined4 uVar2;\n  undefined8 uVar3;\n  \n  uVar1 = DAT_00163868;\n  DAT_00163868 = 0;\n  uVar2 = FUN_00136495();\n  uVar3 = FUN_0013636a(0,uVar2);\n  DAT_00163868 = uVar1;\n  (**(code **)(*param_2 + 0x98))(uVar3,param_2,param_3);\n  uVar2 = (**(code **)(*param_4 + 0x80))(param_1,param_4,uVar3);\n  FUN_0013645b(uVar3);\n  return uVar2;\n}" { (declaration "undefined1 uVar1;" type_identifier identifier ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (declaration "undefined8 uVar3;" type_identifier identifier ;) (expression_statement "uVar1 = DAT_00163868;" (assignment_expression "uVar1 = DAT_00163868" identifier = identifier) ;) (expression_statement "DAT_00163868 = 0;" (assignment_expression "DAT_00163868 = 0" identifier = number_literal) ;) (expression_statement "uVar2 = FUN_00136495();" (assignment_expression "uVar2 = FUN_00136495()" identifier = (call_expression "FUN_00136495()" identifier (argument_list "()" ( )))) ;) (expression_statement "uVar3 = FUN_0013636a(0,uVar2);" (assignment_expression "uVar3 = FUN_0013636a(0,uVar2)" identifier = (call_expression "FUN_0013636a(0,uVar2)" identifier (argument_list "(0,uVar2)" ( number_literal , identifier )))) ;) (expression_statement "DAT_00163868 = uVar1;" (assignment_expression "DAT_00163868 = uVar1" identifier = identifier) ;) (expression_statement "(**(code **)(*param_2 + 0x98))(uVar3,param_2,param_3);" (call_expression "(**(code **)(*param_2 + 0x98))(uVar3,param_2,param_3)" (parenthesized_expression "(**(code **)(*param_2 + 0x98))" ( (pointer_expression "**(code **)(*param_2 + 0x98)" * (pointer_expression "*(code **)(*param_2 + 0x98)" * (cast_expression "(code **)(*param_2 + 0x98)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0x98)" ( (binary_expression "*param_2 + 0x98" (pointer_expression "*param_2" * identifier) + number_literal) ))))) )) (argument_list "(uVar3,param_2,param_3)" ( identifier , identifier , identifier ))) ;) (expression_statement "uVar2 = (**(code **)(*param_4 + 0x80))(param_1,param_4,uVar3);" (assignment_expression "uVar2 = (**(code **)(*param_4 + 0x80))(param_1,param_4,uVar3)" identifier = (call_expression "(**(code **)(*param_4 + 0x80))(param_1,param_4,uVar3)" (parenthesized_expression "(**(code **)(*param_4 + 0x80))" ( (pointer_expression "**(code **)(*param_4 + 0x80)" * (pointer_expression "*(code **)(*param_4 + 0x80)" * (cast_expression "(code **)(*param_4 + 0x80)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_4 + 0x80)" ( (binary_expression "*param_4 + 0x80" (pointer_expression "*param_4" * identifier) + number_literal) ))))) )) (argument_list "(param_1,param_4,uVar3)" ( identifier , identifier , identifier )))) ;) (expression_statement "FUN_0013645b(uVar3);" (call_expression "FUN_0013645b(uVar3)" identifier (argument_list "(uVar3)" ( identifier ))) ;) (return_statement "return uVar2;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (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 = 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 (pointer_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 FUN_001369bc(undefined8 param_1,long *param_2,undefined8 param_3,long *param_4)\n\n{\n  undefined1 uVar1;\n  undefined4 uVar2;\n  undefined8 uVar3;\n  \n  uVar1 = DAT_00163868;\n  DAT_00163868 = 0;\n  uVar2 = FUN_00136495();\n  uVar3 = FUN_0013636a(0,uVar2);\n  DAT_00163868 = uVar1;\n  (**(code **)(*param_2 + 0x98))(uVar3,param_2,param_3);\n  uVar2 = (**(code **)(*param_4 + 0x80))(param_1,param_4,uVar3);\n  FUN_0013645b(uVar3);\n  return uVar2;\n}" (type_identifier "undefined4") (function_declarator "FUN_001369bc(undefined8 param_1,long *param_2,undefined8 param_3,long *param_4)" (identifier "FUN_001369bc") (parameter_list "(undefined8 param_1,long *param_2,undefined8 param_3,long *param_4)" (( "(") (parameter_declaration "undefined8 param_1" (type_identifier "undefined8") (identifier "param_1")) (, ",") (parameter_declaration "long *param_2" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "undefined8 param_3" (type_identifier "undefined8") (identifier "param_3")) (, ",") (parameter_declaration "long *param_4" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) () ")"))) (compound_statement "{\n  undefined1 uVar1;\n  undefined4 uVar2;\n  undefined8 uVar3;\n  \n  uVar1 = DAT_00163868;\n  DAT_00163868 = 0;\n  uVar2 = FUN_00136495();\n  uVar3 = FUN_0013636a(0,uVar2);\n  DAT_00163868 = uVar1;\n  (**(code **)(*param_2 + 0x98))(uVar3,param_2,param_3);\n  uVar2 = (**(code **)(*param_4 + 0x80))(param_1,param_4,uVar3);\n  FUN_0013645b(uVar3);\n  return uVar2;\n}" ({ "{") (declaration "undefined1 uVar1;" (type_identifier "undefined1") (identifier "uVar1") (; ";")) (declaration "undefined4 uVar2;" (type_identifier "undefined4") (identifier "uVar2") (; ";")) (declaration "undefined8 uVar3;" (type_identifier "undefined8") (identifier "uVar3") (; ";")) (expression_statement "uVar1 = DAT_00163868;" (assignment_expression "uVar1 = DAT_00163868" (identifier "uVar1") (= "=") (identifier "DAT_00163868")) (; ";")) (expression_statement "DAT_00163868 = 0;" (assignment_expression "DAT_00163868 = 0" (identifier "DAT_00163868") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar2 = FUN_00136495();" (assignment_expression "uVar2 = FUN_00136495()" (identifier "uVar2") (= "=") (call_expression "FUN_00136495()" (identifier "FUN_00136495") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "uVar3 = FUN_0013636a(0,uVar2);" (assignment_expression "uVar3 = FUN_0013636a(0,uVar2)" (identifier "uVar3") (= "=") (call_expression "FUN_0013636a(0,uVar2)" (identifier "FUN_0013636a") (argument_list "(0,uVar2)" (( "(") (number_literal "0") (, ",") (identifier "uVar2") () ")")))) (; ";")) (expression_statement "DAT_00163868 = uVar1;" (assignment_expression "DAT_00163868 = uVar1" (identifier "DAT_00163868") (= "=") (identifier "uVar1")) (; ";")) (expression_statement "(**(code **)(*param_2 + 0x98))(uVar3,param_2,param_3);" (call_expression "(**(code **)(*param_2 + 0x98))(uVar3,param_2,param_3)" (parenthesized_expression "(**(code **)(*param_2 + 0x98))" (( "(") (pointer_expression "**(code **)(*param_2 + 0x98)" (* "*") (pointer_expression "*(code **)(*param_2 + 0x98)" (* "*") (cast_expression "(code **)(*param_2 + 0x98)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_2 + 0x98)" (( "(") (binary_expression "*param_2 + 0x98" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (+ "+") (number_literal "0x98")) () ")"))))) () ")")) (argument_list "(uVar3,param_2,param_3)" (( "(") (identifier "uVar3") (, ",") (identifier "param_2") (, ",") (identifier "param_3") () ")"))) (; ";")) (expression_statement "uVar2 = (**(code **)(*param_4 + 0x80))(param_1,param_4,uVar3);" (assignment_expression "uVar2 = (**(code **)(*param_4 + 0x80))(param_1,param_4,uVar3)" (identifier "uVar2") (= "=") (call_expression "(**(code **)(*param_4 + 0x80))(param_1,param_4,uVar3)" (parenthesized_expression "(**(code **)(*param_4 + 0x80))" (( "(") (pointer_expression "**(code **)(*param_4 + 0x80)" (* "*") (pointer_expression "*(code **)(*param_4 + 0x80)" (* "*") (cast_expression "(code **)(*param_4 + 0x80)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_4 + 0x80)" (( "(") (binary_expression "*param_4 + 0x80" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (+ "+") (number_literal "0x80")) () ")"))))) () ")")) (argument_list "(param_1,param_4,uVar3)" (( "(") (identifier "param_1") (, ",") (identifier "param_4") (, ",") (identifier "uVar3") () ")")))) (; ";")) (expression_statement "FUN_0013645b(uVar3);" (call_expression "FUN_0013645b(uVar3)" (identifier "FUN_0013645b") (argument_list "(uVar3)" (( "(") (identifier "uVar3") () ")"))) (; ";")) (return_statement "return uVar2;" (return "return") (identifier "uVar2") (; ";")) (} "}")))

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

{
  type_1 _Var1;
  type_3 type;
  type_2 bset;
  
  _Var1 = bitset_stats_enabled;
  bitset_stats_enabled = false;
  type = var_1(dst);
  bset = var_2(0,type);
  bitset_stats_enabled = _Var1;
  (*((src1->b).vtable)->or_)(bset,src1,src2);
  _Var1 = (*((src3->b).vtable)->and_cmp)(dst,src3,bset);
  var_3(bset);
  return _Var1;
}


(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: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (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: (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: (pointer_expression argument: (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(undefined8 param_1,long *param_2,undefined8 param_3,long *param_4)

{
  undefined1 uVar1;
  undefined4 uVar2;
  undefined8 uVar3;
  
  uVar1 = DAT_00163868;
  DAT_00163868 = 0;
  uVar2 = FUN_00136495();
  uVar3 = FUN_0013636a(0,uVar2);
  DAT_00163868 = uVar1;
  (**(code **)(*param_2 + 0x98))(uVar3,param_2,param_3);
  uVar2 = (**(code **)(*param_4 + 0x80))(param_1,param_4,uVar3);
  FUN_0013645b(uVar3);
  return uVar2;
}

