
/* DWARF original name: _M_emplace_hint_unique<const std::piecewise_construct_t&,
   std::tuple<unsigned int const&>, std::tuple<> >
   DWARF original prototype: iterator
   _M_emplace_hint_unique<const_std::piecewise_construct_t&,_std::tuple<unsigned_int_const&>,_std::tuple<>_>(_Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::Layout::Gnu_property>,_std::_Select1st<std::pair<unsigned_int_const,_gold::Layout::Gnu_property>_>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::Layout::Gnu_property>_>_>
   * this, const_iterator __pos, piecewise_construct_t * __args#0, tuple<unsigned_int_const&> *
   __args#1, tuple<> * __args#2) */

iterator __thiscall
std::
_Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::Layout::Gnu_property>,_std::_Select1st<std::pair<unsigned_int_const,_gold::Layout::Gnu_property>_>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::Layout::Gnu_property>_>_>
::
_M_emplace_hint_unique<const_std::piecewise_construct_t&,_std::tuple<unsigned_int_const&>,_std::tuple<>_>
          (_Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::Layout::Gnu_property>,_std::_Select1st<std::pair<unsigned_int_const,_gold::Layout::Gnu_property>_>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::Layout::Gnu_property>_>_>
           *this,const_iterator __pos,piecewise_construct_t *__args_0,
          tuple<unsigned_int_const&> *__args_1,tuple<> *__args_2)

{
  _Rb_tree_header *p_Var1;
  size_t *psVar2;
  _Rb_tree_color _Var3;
  _Rb_tree_node_base *p_Var4;
  _Rb_tree_node_base *p_Var5;
  bool bVar6;
  pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*> pVar7;
  
  p_Var4 = (_Rb_tree_node_base *)operator_new(0x38);
  _Var3 = *(__args_1->super__Tuple_impl<0,_unsigned_int_const&>).
           super__Head_base<0,_unsigned_int_const&,_false>._M_head_impl;
  p_Var4[1]._M_parent = (_Base_ptr)0x0;
  p_Var4[1]._M_left = (_Base_ptr)0x0;
  p_Var4[1]._M_color = _Var3;
  pVar7 = _M_get_insert_hint_unique_pos(this,__pos,&p_Var4[1]._M_color);
  p_Var5 = pVar7.second;
  if (p_Var5 != (_Rb_tree_node_base *)0x0) {
    p_Var1 = &(this->_M_impl).super__Rb_tree_header;
    bVar6 = true;
    if ((pVar7.first == (_Base_ptr)0x0) && ((_Rb_tree_header *)p_Var5 != p_Var1)) {
      bVar6 = p_Var4[1]._M_color < p_Var5[1]._M_color;
    }
    _Rb_tree_insert_and_rebalance(bVar6,p_Var4,p_Var5,&p_Var1->_M_header);
    psVar2 = &(this->_M_impl).super__Rb_tree_header._M_node_count;
    *psVar2 = *psVar2 + 1;
    return (iterator)p_Var4;
  }
  operator_delete(p_Var4);
  return (iterator)pVar7.first;
}



long FUN_001c2720(long param_1,undefined8 param_2,undefined8 param_3,undefined8 *param_4)

{
  undefined4 uVar1;
  long lVar2;
  long lVar3;
  bool bVar4;
  undefined1 auVar5 [16];
  
  lVar2 = FUN_002a11b0(0x38);
  uVar1 = *(undefined4 *)*param_4;
  *(undefined8 *)(lVar2 + 0x28) = 0;
  *(undefined8 *)(lVar2 + 0x30) = 0;
  *(undefined4 *)(lVar2 + 0x20) = uVar1;
  auVar5 = FUN_001c2640(param_1,param_2,lVar2 + 0x20);
  lVar3 = auVar5._8_8_;
  if (lVar3 != 0) {
    bVar4 = true;
    if ((auVar5._0_8_ == 0) && (lVar3 != param_1 + 8)) {
      bVar4 = *(uint *)(lVar2 + 0x20) < *(uint *)(lVar3 + 0x20);
    }
    FUN_002a3e80(bVar4,lVar2);
    *(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1;
    return lVar2;
  }
  FUN_002a2980(lVar2);
  return auVar5._0_8_;
}


PUSH R13
MOV R13,RCX
PUSH R12
MOV R12,RSI
PUSH RBP
MOV RBP,RDI
MOV EDI,0x38
PUSH RBX
SUB RSP,0x18
CALL 0x002a11b0
MOV RSI,R12
MOV RDI,RBP
MOV RBX,RAX
MOV RAX,qword ptr [R13]
LEA RDX,[RBX + 0x20]
MOV EAX,dword ptr [RAX]
MOV qword ptr [RBX + 0x28],0x0
MOV qword ptr [RBX + 0x30],0x0
MOV dword ptr [RBX + 0x20],EAX
CALL 0x001c2640
TEST RDX,RDX
JZ 0x001c27b8
LEA RCX,[RBP + 0x8]
MOV EDI,0x1
TEST RAX,RAX
JZ 0x001c27a0
MOV RSI,RBX
CALL 0x002a3e80
ADD qword ptr [RBP + 0x28],0x1
ADD RSP,0x18
MOV RAX,RBX
POP RBX
POP RBP
POP R12
POP R13
RET
CMP RDX,RCX
JZ 0x001c277b
XOR EDI,EDI
MOV EAX,dword ptr [RDX + 0x20]
CMP dword ptr [RBX + 0x20],EAX
SETC DIL
JMP 0x001c277b
MOV RDI,RBX
MOV qword ptr [RSP + 0x8],RAX
CALL 0x002a2980
MOV RAX,qword ptr [RSP + 0x8]
ADD RSP,0x18
POP RBX
POP RBP
POP R12
POP R13
RET
(translation_unit "long FUN_001c2720(long param_1,undefined8 param_2,undefined8 param_3,undefined8 *param_4)\n\n{\n  undefined4 uVar1;\n  long lVar2;\n  long lVar3;\n  bool bVar4;\n  undefined1 auVar5 [16];\n  \n  lVar2 = FUN_002a11b0(0x38);\n  uVar1 = *(undefined4 *)*param_4;\n  *(undefined8 *)(lVar2 + 0x28) = 0;\n  *(undefined8 *)(lVar2 + 0x30) = 0;\n  *(undefined4 *)(lVar2 + 0x20) = uVar1;\n  auVar5 = FUN_001c2640(param_1,param_2,lVar2 + 0x20);\n  lVar3 = auVar5._8_8_;\n  if (lVar3 != 0) {\n    bVar4 = true;\n    if ((auVar5._0_8_ == 0) && (lVar3 != param_1 + 8)) {\n      bVar4 = *(uint *)(lVar2 + 0x20) < *(uint *)(lVar3 + 0x20);\n    }\n    FUN_002a3e80(bVar4,lVar2);\n    *(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1;\n    return lVar2;\n  }\n  FUN_002a2980(lVar2);\n  return auVar5._0_8_;\n}\n\n" (function_definition "long FUN_001c2720(long param_1,undefined8 param_2,undefined8 param_3,undefined8 *param_4)\n\n{\n  undefined4 uVar1;\n  long lVar2;\n  long lVar3;\n  bool bVar4;\n  undefined1 auVar5 [16];\n  \n  lVar2 = FUN_002a11b0(0x38);\n  uVar1 = *(undefined4 *)*param_4;\n  *(undefined8 *)(lVar2 + 0x28) = 0;\n  *(undefined8 *)(lVar2 + 0x30) = 0;\n  *(undefined4 *)(lVar2 + 0x20) = uVar1;\n  auVar5 = FUN_001c2640(param_1,param_2,lVar2 + 0x20);\n  lVar3 = auVar5._8_8_;\n  if (lVar3 != 0) {\n    bVar4 = true;\n    if ((auVar5._0_8_ == 0) && (lVar3 != param_1 + 8)) {\n      bVar4 = *(uint *)(lVar2 + 0x20) < *(uint *)(lVar3 + 0x20);\n    }\n    FUN_002a3e80(bVar4,lVar2);\n    *(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1;\n    return lVar2;\n  }\n  FUN_002a2980(lVar2);\n  return auVar5._0_8_;\n}" (sized_type_specifier "long" long) (function_declarator "FUN_001c2720(long param_1,undefined8 param_2,undefined8 param_3,undefined8 *param_4)" identifier (parameter_list "(long param_1,undefined8 param_2,undefined8 param_3,undefined8 *param_4)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_2" type_identifier identifier) , (parameter_declaration "undefined8 param_3" type_identifier identifier) , (parameter_declaration "undefined8 *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  undefined4 uVar1;\n  long lVar2;\n  long lVar3;\n  bool bVar4;\n  undefined1 auVar5 [16];\n  \n  lVar2 = FUN_002a11b0(0x38);\n  uVar1 = *(undefined4 *)*param_4;\n  *(undefined8 *)(lVar2 + 0x28) = 0;\n  *(undefined8 *)(lVar2 + 0x30) = 0;\n  *(undefined4 *)(lVar2 + 0x20) = uVar1;\n  auVar5 = FUN_001c2640(param_1,param_2,lVar2 + 0x20);\n  lVar3 = auVar5._8_8_;\n  if (lVar3 != 0) {\n    bVar4 = true;\n    if ((auVar5._0_8_ == 0) && (lVar3 != param_1 + 8)) {\n      bVar4 = *(uint *)(lVar2 + 0x20) < *(uint *)(lVar3 + 0x20);\n    }\n    FUN_002a3e80(bVar4,lVar2);\n    *(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1;\n    return lVar2;\n  }\n  FUN_002a2980(lVar2);\n  return auVar5._0_8_;\n}" { (declaration "undefined4 uVar1;" type_identifier identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "bool bVar4;" primitive_type identifier ;) (declaration "undefined1 auVar5 [16];" type_identifier (array_declarator "auVar5 [16]" identifier [ number_literal ]) ;) (expression_statement "lVar2 = FUN_002a11b0(0x38);" (assignment_expression "lVar2 = FUN_002a11b0(0x38)" identifier = (call_expression "FUN_002a11b0(0x38)" identifier (argument_list "(0x38)" ( number_literal )))) ;) (expression_statement "uVar1 = *(undefined4 *)*param_4;" (assignment_expression "uVar1 = *(undefined4 *)*param_4" identifier = (pointer_expression "*(undefined4 *)*param_4" * (cast_expression "(undefined4 *)*param_4" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_4" * identifier)))) ;) (expression_statement "*(undefined8 *)(lVar2 + 0x28) = 0;" (assignment_expression "*(undefined8 *)(lVar2 + 0x28) = 0" (pointer_expression "*(undefined8 *)(lVar2 + 0x28)" * (cast_expression "(undefined8 *)(lVar2 + 0x28)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0x28)" ( (binary_expression "lVar2 + 0x28" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(lVar2 + 0x30) = 0;" (assignment_expression "*(undefined8 *)(lVar2 + 0x30) = 0" (pointer_expression "*(undefined8 *)(lVar2 + 0x30)" * (cast_expression "(undefined8 *)(lVar2 + 0x30)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0x30)" ( (binary_expression "lVar2 + 0x30" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(lVar2 + 0x20) = uVar1;" (assignment_expression "*(undefined4 *)(lVar2 + 0x20) = uVar1" (pointer_expression "*(undefined4 *)(lVar2 + 0x20)" * (cast_expression "(undefined4 *)(lVar2 + 0x20)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0x20)" ( (binary_expression "lVar2 + 0x20" identifier + number_literal) )))) = identifier) ;) (expression_statement "auVar5 = FUN_001c2640(param_1,param_2,lVar2 + 0x20);" (assignment_expression "auVar5 = FUN_001c2640(param_1,param_2,lVar2 + 0x20)" identifier = (call_expression "FUN_001c2640(param_1,param_2,lVar2 + 0x20)" identifier (argument_list "(param_1,param_2,lVar2 + 0x20)" ( identifier , identifier , (binary_expression "lVar2 + 0x20" identifier + number_literal) )))) ;) (expression_statement "lVar3 = auVar5._8_8_;" (assignment_expression "lVar3 = auVar5._8_8_" identifier = (field_expression "auVar5._8_8_" identifier . field_identifier)) ;) (if_statement "if (lVar3 != 0) {\n    bVar4 = true;\n    if ((auVar5._0_8_ == 0) && (lVar3 != param_1 + 8)) {\n      bVar4 = *(uint *)(lVar2 + 0x20) < *(uint *)(lVar3 + 0x20);\n    }\n    FUN_002a3e80(bVar4,lVar2);\n    *(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1;\n    return lVar2;\n  }" if (parenthesized_expression "(lVar3 != 0)" ( (binary_expression "lVar3 != 0" identifier != number_literal) )) (compound_statement "{\n    bVar4 = true;\n    if ((auVar5._0_8_ == 0) && (lVar3 != param_1 + 8)) {\n      bVar4 = *(uint *)(lVar2 + 0x20) < *(uint *)(lVar3 + 0x20);\n    }\n    FUN_002a3e80(bVar4,lVar2);\n    *(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1;\n    return lVar2;\n  }" { (expression_statement "bVar4 = true;" (assignment_expression "bVar4 = true" identifier = true) ;) (if_statement "if ((auVar5._0_8_ == 0) && (lVar3 != param_1 + 8)) {\n      bVar4 = *(uint *)(lVar2 + 0x20) < *(uint *)(lVar3 + 0x20);\n    }" if (parenthesized_expression "((auVar5._0_8_ == 0) && (lVar3 != param_1 + 8))" ( (binary_expression "(auVar5._0_8_ == 0) && (lVar3 != param_1 + 8)" (parenthesized_expression "(auVar5._0_8_ == 0)" ( (binary_expression "auVar5._0_8_ == 0" (field_expression "auVar5._0_8_" identifier . field_identifier) == number_literal) )) && (parenthesized_expression "(lVar3 != param_1 + 8)" ( (binary_expression "lVar3 != param_1 + 8" identifier != (binary_expression "param_1 + 8" identifier + number_literal)) ))) )) (compound_statement "{\n      bVar4 = *(uint *)(lVar2 + 0x20) < *(uint *)(lVar3 + 0x20);\n    }" { (expression_statement "bVar4 = *(uint *)(lVar2 + 0x20) < *(uint *)(lVar3 + 0x20);" (assignment_expression "bVar4 = *(uint *)(lVar2 + 0x20) < *(uint *)(lVar3 + 0x20)" identifier = (binary_expression "*(uint *)(lVar2 + 0x20) < *(uint *)(lVar3 + 0x20)" (pointer_expression "*(uint *)(lVar2 + 0x20)" * (cast_expression "(uint *)(lVar2 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0x20)" ( (binary_expression "lVar2 + 0x20" identifier + number_literal) )))) < (pointer_expression "*(uint *)(lVar3 + 0x20)" * (cast_expression "(uint *)(lVar3 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x20)" ( (binary_expression "lVar3 + 0x20" identifier + number_literal) )))))) ;) })) (expression_statement "FUN_002a3e80(bVar4,lVar2);" (call_expression "FUN_002a3e80(bVar4,lVar2)" identifier (argument_list "(bVar4,lVar2)" ( identifier , identifier ))) ;) (expression_statement "*(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1;" (assignment_expression "*(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1" (pointer_expression "*(long *)(param_1 + 0x28)" * (cast_expression "(long *)(param_1 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) = (binary_expression "*(long *)(param_1 + 0x28) + 1" (pointer_expression "*(long *)(param_1 + 0x28)" * (cast_expression "(long *)(param_1 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) + number_literal)) ;) (return_statement "return lVar2;" return identifier ;) })) (expression_statement "FUN_002a2980(lVar2);" (call_expression "FUN_002a2980(lVar2)" identifier (argument_list "(lVar2)" ( identifier ))) ;) (return_statement "return auVar5._0_8_;" return (field_expression "auVar5._0_8_" identifier . field_identifier) ;) })))
(translation_unit "/* DWARF original name: _M_emplace_hint_unique<const std::piecewise_construct_t&,\n   std::tuple<unsigned int const&>, std::tuple<> >\n   DWARF original prototype: iterator\n   _M_emplace_hint_unique<const_std::piecewise_construct_t&,_std::tuple<unsigned_int_const&>,_std::tuple<>_>(_Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::Layout::Gnu_property>,_std::_Select1st<std::pair<unsigned_int_const,_gold::Layout::Gnu_property>_>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::Layout::Gnu_property>_>_>\n   * this, const_iterator __pos, piecewise_construct_t * __args#0, tuple<unsigned_int_const&> *\n   __args#1, tuple<> * __args#2) */\n\niterator __thiscall\nstd::\n_Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::Layout::Gnu_property>,_std::_Select1st<std::pair<unsigned_int_const,_gold::Layout::Gnu_property>_>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::Layout::Gnu_property>_>_>\n::\n_M_emplace_hint_unique<const_std::piecewise_construct_t&,_std::tuple<unsigned_int_const&>,_std::tuple<>_>\n          (_Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::Layout::Gnu_property>,_std::_Select1st<std::pair<unsigned_int_const,_gold::Layout::Gnu_property>_>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::Layout::Gnu_property>_>_>\n           *this,const_iterator __pos,piecewise_construct_t *__args_0,\n          tuple<unsigned_int_const&> *__args_1,tuple<> *__args_2)\n\n{\n  _Rb_tree_header *p_Var1;\n  size_t *psVar2;\n  _Rb_tree_color _Var3;\n  _Rb_tree_node_base *p_Var4;\n  _Rb_tree_node_base *p_Var5;\n  bool bVar6;\n  pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*> pVar7;\n  \n  p_Var4 = (_Rb_tree_node_base *)operator_new(0x38);\n  _Var3 = *(__args_1->super__Tuple_impl<0,_unsigned_int_const&>).\n           super__Head_base<0,_unsigned_int_const&,_false>._M_head_impl;\n  p_Var4[1]._M_parent = (_Base_ptr)0x0;\n  p_Var4[1]._M_left = (_Base_ptr)0x0;\n  p_Var4[1]._M_color = _Var3;\n  pVar7 = _M_get_insert_hint_unique_pos(this,__pos,&p_Var4[1]._M_color);\n  p_Var5 = pVar7.second;\n  if (p_Var5 != (_Rb_tree_node_base *)0x0) {\n    p_Var1 = &(this->_M_impl).super__Rb_tree_header;\n    bVar6 = true;\n    if ((pVar7.first == (_Base_ptr)0x0) && ((_Rb_tree_header *)p_Var5 != p_Var1)) {\n      bVar6 = p_Var4[1]._M_color < p_Var5[1]._M_color;\n    }\n    _Rb_tree_insert_and_rebalance(bVar6,p_Var4,p_Var5,&p_Var1->_M_header);\n    psVar2 = &(this->_M_impl).super__Rb_tree_header._M_node_count;\n    *psVar2 = *psVar2 + 1;\n    return (iterator)p_Var4;\n  }\n  operator_delete(p_Var4);\n  return (iterator)pVar7.first;\n}\n\n" comment (declaration "iterator __thiscall\nstd::\n_Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::Layout::Gnu_property>,_std::_Select1st<std::pair<unsigned_int_const,_gold::Layout::Gnu_property>_>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::Layout::Gnu_property>_>_>\n::\n_M_emplace_hint_unique<const_std::piecewise_construct_t&,_std::tuple<unsigned_int_const&>,_std::tuple<>_>\n          (_Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::Layout::Gnu_property>,_std::_Select1st<std::pair<unsigned_int_const,_gold::Layout::Gnu_property>_>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::Layout::Gnu_property>_>_>\n           *this,const_iterator __pos,piecewise_construct_t *__args_0,\n          tuple<unsigned_int_const&> *__args_1,tuple<> *__args_2)\n\n{\n  _Rb_tree_header *p_Var1;" type_identifier (ms_call_modifier "__thiscall" __thiscall) (ERROR "std::\n_Rb_tree<" identifier : : identifier <) identifier , (ERROR "_std::pair<" identifier : : identifier <) identifier , (ERROR "_gold::Layout::" identifier : : identifier : :) identifier (ERROR ">" >) , (ERROR "_std::_Select1st<std::pair<" identifier : : identifier < identifier : : identifier <) identifier , (ERROR "_gold::Layout::Gnu_property>" identifier : : identifier : : identifier >) identifier (ERROR ">" >) , (ERROR "_std::less<" identifier : : identifier <) identifier (ERROR ">" >) , (ERROR "_std::allocator<std::pair<" identifier : : identifier < identifier : : identifier <) identifier , (ERROR "_gold::Layout::Gnu_property>_>_>\n::\n_M_emplace_hint_unique<const_std::" identifier : : identifier : : identifier > identifier > identifier > : : identifier < identifier : :) identifier (ERROR "&" &) , (ERROR "_std::tuple<" identifier : : identifier <) identifier (ERROR "&>" & >) , (ERROR "_std::tuple<>_>\n          (_Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::Layout::Gnu_property>,_std::_Select1st<std::pair<unsigned_int_const,_gold::Layout::Gnu_property>_>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::Layout::Gnu_property>_>_>\n           *this,const_iterator __pos,piecewise_construct_t *__args_0,\n          tuple<unsigned_int_const&> *__args_1,tuple<> *__args_2)\n\n{\n  _Rb_tree_header" identifier : : identifier < > (function_declarator "_>\n          (_Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::Layout::Gnu_property>,_std::_Select1st<std::pair<unsigned_int_const,_gold::Layout::Gnu_property>_>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::Layout::Gnu_property>_>_>\n           *this,const_iterator __pos,piecewise_construct_t *__args_0,\n          tuple<unsigned_int_const&> *__args_1,tuple<> *__args_2)" identifier (ERROR ">" >) (parameter_list "(_Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::Layout::Gnu_property>,_std::_Select1st<std::pair<unsigned_int_const,_gold::Layout::Gnu_property>_>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::Layout::Gnu_property>_>_>\n           *this,const_iterator __pos,piecewise_construct_t *__args_0,\n          tuple<unsigned_int_const&> *__args_1,tuple<> *__args_2)" ( (parameter_declaration "_Rb_tree<unsigned_int" type_identifier (ERROR "<" <) identifier) , (parameter_declaration "_std::pair<unsigned_int_const" type_identifier (ERROR "::pair<" : : identifier <) identifier) , (parameter_declaration "_gold::Layout::Gnu_property" type_identifier (ERROR "::Layout::" : : identifier : :) identifier) (ERROR ">" >) , (parameter_declaration "_std::_Select1st<std::pair<unsigned_int_const" type_identifier (ERROR "::_Select1st<std::pair<" : : identifier < identifier : : identifier <) identifier) , (parameter_declaration "_gold::Layout::Gnu_property>_" type_identifier (ERROR "::Layout::Gnu_property>" : : identifier : : identifier >) identifier) (ERROR ">" >) , (parameter_declaration "_std::less<unsigned_int" type_identifier (ERROR "::less<" : : identifier <) identifier) (ERROR ">" >) , (parameter_declaration "_std::allocator<std::pair<unsigned_int_const" type_identifier (ERROR "::allocator<std::pair<" : : identifier < identifier : : identifier <) identifier) , (parameter_declaration "_gold::Layout::Gnu_property>_>_>\n           *this" type_identifier (ERROR "::Layout::Gnu_property>_>_>" : : identifier : : identifier > identifier > identifier >) (pointer_declarator "*this" * identifier)) , (parameter_declaration "const_iterator __pos" type_identifier identifier) , (parameter_declaration "piecewise_construct_t *__args_0" type_identifier (pointer_declarator "*__args_0" * identifier)) , (parameter_declaration "tuple<unsigned_int_const&> *__args_1" type_identifier (ERROR "<unsigned_int_const&>" < identifier & >) (pointer_declarator "*__args_1" * identifier)) , (parameter_declaration "tuple<> *__args_2" type_identifier (ERROR "<>" < >) (pointer_declarator "*__args_2" * identifier)) ))) { identifier) (pointer_declarator "*p_Var1" * identifier) ;) (declaration "size_t *psVar2;" primitive_type (pointer_declarator "*psVar2" * identifier) ;) (declaration "_Rb_tree_color _Var3;" type_identifier identifier ;) (declaration "_Rb_tree_node_base *p_Var4;" type_identifier (pointer_declarator "*p_Var4" * identifier) ;) (declaration "_Rb_tree_node_base *p_Var5;" type_identifier (pointer_declarator "*p_Var5" * identifier) ;) (declaration "bool bVar6;" primitive_type identifier ;) (ERROR "pair<std::_Rb_tree_node_base*,_std::_Rb_tree_node_base*> pVar7" (binary_expression "pair<std" identifier < identifier) : : (binary_expression "_Rb_tree_node_base*,_std" identifier * (ERROR "," ,) identifier) : : (binary_expression "_Rb_tree_node_base*> pVar7" identifier * (ERROR ">" >) identifier)) (expression_statement ";" ;) (expression_statement "p_Var4 = (_Rb_tree_node_base *)operator_new(0x38);" (assignment_expression "p_Var4 = (_Rb_tree_node_base *)operator_new(0x38)" identifier = (cast_expression "(_Rb_tree_node_base *)operator_new(0x38)" ( (type_descriptor "_Rb_tree_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "operator_new(0x38)" identifier (argument_list "(0x38)" ( number_literal ))))) ;) (expression_statement "_Var3 = *(__args_1->super__Tuple_impl<0,_unsigned_int_const&>).\n           super__Head_base<0,_unsigned_int_const&,_false>._M_head_impl;" (assignment_expression "_Var3 = *(__args_1->super__Tuple_impl<0,_unsigned_int_const&>).\n           super__Head_base<0,_unsigned_int_const&,_false>._M_head_impl" identifier = (pointer_expression "*(__args_1->super__Tuple_impl<0,_unsigned_int_const&>).\n           super__Head_base<0,_unsigned_int_const&,_false>._M_head_impl" * (parenthesized_expression "(__args_1->super__Tuple_impl<0,_unsigned_int_const&>).\n           super__Head_base<0,_unsigned_int_const&,_false>._M_head_impl" ( (comma_expression "__args_1->super__Tuple_impl<0,_unsigned_int_const&>).\n           super__Head_base<0,_unsigned_int_const&,_false>._M_head_impl" (binary_expression "__args_1->super__Tuple_impl<0" (field_expression "__args_1->super__Tuple_impl" identifier -> field_identifier) < number_literal) , (comma_expression "_unsigned_int_const&>).\n           super__Head_base<0,_unsigned_int_const&,_false>._M_head_impl" (binary_expression "_unsigned_int_const&>).\n           super__Head_base<0" (field_expression "_unsigned_int_const&>).\n           super__Head_base" identifier (ERROR "&>)" & > )) . field_identifier) < number_literal) , (binary_expression "_unsigned_int_const&,_false>._M_head_impl" identifier & (ERROR "," ,) (field_expression "_false>._M_head_impl" identifier (ERROR ">" >) . field_identifier)))) )))) ;) (expression_statement "p_Var4[1]._M_parent = (_Base_ptr)0x0;" (assignment_expression "p_Var4[1]._M_parent = (_Base_ptr)0x0" (field_expression "p_Var4[1]._M_parent" (subscript_expression "p_Var4[1]" identifier [ number_literal ]) . field_identifier) = (cast_expression "(_Base_ptr)0x0" ( (type_descriptor "_Base_ptr" type_identifier) ) number_literal)) ;) (expression_statement "p_Var4[1]._M_left = (_Base_ptr)0x0;" (assignment_expression "p_Var4[1]._M_left = (_Base_ptr)0x0" (field_expression "p_Var4[1]._M_left" (subscript_expression "p_Var4[1]" identifier [ number_literal ]) . field_identifier) = (cast_expression "(_Base_ptr)0x0" ( (type_descriptor "_Base_ptr" type_identifier) ) number_literal)) ;) (expression_statement "p_Var4[1]._M_color = _Var3;" (assignment_expression "p_Var4[1]._M_color = _Var3" (field_expression "p_Var4[1]._M_color" (subscript_expression "p_Var4[1]" identifier [ number_literal ]) . field_identifier) = identifier) ;) (expression_statement "pVar7 = _M_get_insert_hint_unique_pos(this,__pos,&p_Var4[1]._M_color);" (assignment_expression "pVar7 = _M_get_insert_hint_unique_pos(this,__pos,&p_Var4[1]._M_color)" identifier = (call_expression "_M_get_insert_hint_unique_pos(this,__pos,&p_Var4[1]._M_color)" identifier (argument_list "(this,__pos,&p_Var4[1]._M_color)" ( identifier , identifier , (pointer_expression "&p_Var4[1]._M_color" & (field_expression "p_Var4[1]._M_color" (subscript_expression "p_Var4[1]" identifier [ number_literal ]) . field_identifier)) )))) ;) (expression_statement "p_Var5 = pVar7.second;" (assignment_expression "p_Var5 = pVar7.second" identifier = (field_expression "pVar7.second" identifier . field_identifier)) ;) (if_statement "if (p_Var5 != (_Rb_tree_node_base *)0x0) {\n    p_Var1 = &(this->_M_impl).super__Rb_tree_header;\n    bVar6 = true;\n    if ((pVar7.first == (_Base_ptr)0x0) && ((_Rb_tree_header *)p_Var5 != p_Var1)) {\n      bVar6 = p_Var4[1]._M_color < p_Var5[1]._M_color;\n    }\n    _Rb_tree_insert_and_rebalance(bVar6,p_Var4,p_Var5,&p_Var1->_M_header);\n    psVar2 = &(this->_M_impl).super__Rb_tree_header._M_node_count;\n    *psVar2 = *psVar2 + 1;\n    return (iterator)p_Var4;\n  }" if (parenthesized_expression "(p_Var5 != (_Rb_tree_node_base *)0x0)" ( (binary_expression "p_Var5 != (_Rb_tree_node_base *)0x0" identifier != (cast_expression "(_Rb_tree_node_base *)0x0" ( (type_descriptor "_Rb_tree_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    p_Var1 = &(this->_M_impl).super__Rb_tree_header;\n    bVar6 = true;\n    if ((pVar7.first == (_Base_ptr)0x0) && ((_Rb_tree_header *)p_Var5 != p_Var1)) {\n      bVar6 = p_Var4[1]._M_color < p_Var5[1]._M_color;\n    }\n    _Rb_tree_insert_and_rebalance(bVar6,p_Var4,p_Var5,&p_Var1->_M_header);\n    psVar2 = &(this->_M_impl).super__Rb_tree_header._M_node_count;\n    *psVar2 = *psVar2 + 1;\n    return (iterator)p_Var4;\n  }" { (expression_statement "p_Var1 = &(this->_M_impl).super__Rb_tree_header;" (assignment_expression "p_Var1 = &(this->_M_impl).super__Rb_tree_header" identifier = (pointer_expression "&(this->_M_impl).super__Rb_tree_header" & (field_expression "(this->_M_impl).super__Rb_tree_header" (parenthesized_expression "(this->_M_impl)" ( (field_expression "this->_M_impl" identifier -> field_identifier) )) . field_identifier))) ;) (expression_statement "bVar6 = true;" (assignment_expression "bVar6 = true" identifier = true) ;) (if_statement "if ((pVar7.first == (_Base_ptr)0x0) && ((_Rb_tree_header *)p_Var5 != p_Var1)) {\n      bVar6 = p_Var4[1]._M_color < p_Var5[1]._M_color;\n    }" if (parenthesized_expression "((pVar7.first == (_Base_ptr)0x0) && ((_Rb_tree_header *)p_Var5 != p_Var1))" ( (binary_expression "(pVar7.first == (_Base_ptr)0x0) && ((_Rb_tree_header *)p_Var5 != p_Var1)" (parenthesized_expression "(pVar7.first == (_Base_ptr)0x0)" ( (binary_expression "pVar7.first == (_Base_ptr)0x0" (field_expression "pVar7.first" identifier . field_identifier) == (cast_expression "(_Base_ptr)0x0" ( (type_descriptor "_Base_ptr" type_identifier) ) number_literal)) )) && (parenthesized_expression "((_Rb_tree_header *)p_Var5 != p_Var1)" ( (binary_expression "(_Rb_tree_header *)p_Var5 != p_Var1" (cast_expression "(_Rb_tree_header *)p_Var5" ( (type_descriptor "_Rb_tree_header *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) != identifier) ))) )) (compound_statement "{\n      bVar6 = p_Var4[1]._M_color < p_Var5[1]._M_color;\n    }" { (expression_statement "bVar6 = p_Var4[1]._M_color < p_Var5[1]._M_color;" (assignment_expression "bVar6 = p_Var4[1]._M_color < p_Var5[1]._M_color" identifier = (binary_expression "p_Var4[1]._M_color < p_Var5[1]._M_color" (field_expression "p_Var4[1]._M_color" (subscript_expression "p_Var4[1]" identifier [ number_literal ]) . field_identifier) < (field_expression "p_Var5[1]._M_color" (subscript_expression "p_Var5[1]" identifier [ number_literal ]) . field_identifier))) ;) })) (expression_statement "_Rb_tree_insert_and_rebalance(bVar6,p_Var4,p_Var5,&p_Var1->_M_header);" (call_expression "_Rb_tree_insert_and_rebalance(bVar6,p_Var4,p_Var5,&p_Var1->_M_header)" identifier (argument_list "(bVar6,p_Var4,p_Var5,&p_Var1->_M_header)" ( identifier , identifier , identifier , (pointer_expression "&p_Var1->_M_header" & (field_expression "p_Var1->_M_header" identifier -> field_identifier)) ))) ;) (expression_statement "psVar2 = &(this->_M_impl).super__Rb_tree_header._M_node_count;" (assignment_expression "psVar2 = &(this->_M_impl).super__Rb_tree_header._M_node_count" identifier = (pointer_expression "&(this->_M_impl).super__Rb_tree_header._M_node_count" & (field_expression "(this->_M_impl).super__Rb_tree_header._M_node_count" (field_expression "(this->_M_impl).super__Rb_tree_header" (parenthesized_expression "(this->_M_impl)" ( (field_expression "this->_M_impl" identifier -> field_identifier) )) . field_identifier) . field_identifier))) ;) (expression_statement "*psVar2 = *psVar2 + 1;" (assignment_expression "*psVar2 = *psVar2 + 1" (pointer_expression "*psVar2" * identifier) = (binary_expression "*psVar2 + 1" (pointer_expression "*psVar2" * identifier) + number_literal)) ;) (return_statement "return (iterator)p_Var4;" return (cast_expression "(iterator)p_Var4" ( (type_descriptor "iterator" type_identifier) ) identifier) ;) })) (expression_statement "operator_delete(p_Var4);" (call_expression "operator_delete(p_Var4)" identifier (argument_list "(p_Var4)" ( identifier ))) ;) (return_statement "return (iterator)pVar7.first;" return (cast_expression "(iterator)pVar7.first" ( (type_descriptor "iterator" type_identifier) ) (field_expression "pVar7.first" identifier . field_identifier)) ;) (ERROR "}" }))
(translation_unit "long FUN_001c2720(long param_1,undefined8 param_2,undefined8 param_3,undefined8 *param_4)\n\n{\n  undefined4 uVar1;\n  long lVar2;\n  long lVar3;\n  bool bVar4;\n  undefined1 auVar5 [16];\n  \n  lVar2 = FUN_002a11b0(0x38);\n  uVar1 = *(undefined4 *)*param_4;\n  *(undefined8 *)(lVar2 + 0x28) = 0;\n  *(undefined8 *)(lVar2 + 0x30) = 0;\n  *(undefined4 *)(lVar2 + 0x20) = uVar1;\n  auVar5 = FUN_001c2640(param_1,param_2,lVar2 + 0x20);\n  lVar3 = auVar5._8_8_;\n  if (lVar3 != 0) {\n    bVar4 = true;\n    if ((auVar5._0_8_ == 0) && (lVar3 != param_1 + 8)) {\n      bVar4 = *(uint *)(lVar2 + 0x20) < *(uint *)(lVar3 + 0x20);\n    }\n    FUN_002a3e80(bVar4,lVar2);\n    *(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1;\n    return lVar2;\n  }\n  FUN_002a2980(lVar2);\n  return auVar5._0_8_;\n}\n\n" (function_definition "long FUN_001c2720(long param_1,undefined8 param_2,undefined8 param_3,undefined8 *param_4)\n\n{\n  undefined4 uVar1;\n  long lVar2;\n  long lVar3;\n  bool bVar4;\n  undefined1 auVar5 [16];\n  \n  lVar2 = FUN_002a11b0(0x38);\n  uVar1 = *(undefined4 *)*param_4;\n  *(undefined8 *)(lVar2 + 0x28) = 0;\n  *(undefined8 *)(lVar2 + 0x30) = 0;\n  *(undefined4 *)(lVar2 + 0x20) = uVar1;\n  auVar5 = FUN_001c2640(param_1,param_2,lVar2 + 0x20);\n  lVar3 = auVar5._8_8_;\n  if (lVar3 != 0) {\n    bVar4 = true;\n    if ((auVar5._0_8_ == 0) && (lVar3 != param_1 + 8)) {\n      bVar4 = *(uint *)(lVar2 + 0x20) < *(uint *)(lVar3 + 0x20);\n    }\n    FUN_002a3e80(bVar4,lVar2);\n    *(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1;\n    return lVar2;\n  }\n  FUN_002a2980(lVar2);\n  return auVar5._0_8_;\n}" (sized_type_specifier "long" long) (function_declarator "FUN_001c2720(long param_1,undefined8 param_2,undefined8 param_3,undefined8 *param_4)" identifier (parameter_list "(long param_1,undefined8 param_2,undefined8 param_3,undefined8 *param_4)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_2" type_identifier identifier) , (parameter_declaration "undefined8 param_3" type_identifier identifier) , (parameter_declaration "undefined8 *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  undefined4 uVar1;\n  long lVar2;\n  long lVar3;\n  bool bVar4;\n  undefined1 auVar5 [16];\n  \n  lVar2 = FUN_002a11b0(0x38);\n  uVar1 = *(undefined4 *)*param_4;\n  *(undefined8 *)(lVar2 + 0x28) = 0;\n  *(undefined8 *)(lVar2 + 0x30) = 0;\n  *(undefined4 *)(lVar2 + 0x20) = uVar1;\n  auVar5 = FUN_001c2640(param_1,param_2,lVar2 + 0x20);\n  lVar3 = auVar5._8_8_;\n  if (lVar3 != 0) {\n    bVar4 = true;\n    if ((auVar5._0_8_ == 0) && (lVar3 != param_1 + 8)) {\n      bVar4 = *(uint *)(lVar2 + 0x20) < *(uint *)(lVar3 + 0x20);\n    }\n    FUN_002a3e80(bVar4,lVar2);\n    *(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1;\n    return lVar2;\n  }\n  FUN_002a2980(lVar2);\n  return auVar5._0_8_;\n}" { (declaration "undefined4 uVar1;" type_identifier identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "bool bVar4;" primitive_type identifier ;) (declaration "undefined1 auVar5 [16];" type_identifier (array_declarator "auVar5 [16]" identifier [ number_literal ]) ;) (expression_statement "lVar2 = FUN_002a11b0(0x38);" (assignment_expression "lVar2 = FUN_002a11b0(0x38)" identifier = (call_expression "FUN_002a11b0(0x38)" identifier (argument_list "(0x38)" ( number_literal )))) ;) (expression_statement "uVar1 = *(undefined4 *)*param_4;" (assignment_expression "uVar1 = *(undefined4 *)*param_4" identifier = (pointer_expression "*(undefined4 *)*param_4" * (cast_expression "(undefined4 *)*param_4" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_4" * identifier)))) ;) (expression_statement "*(undefined8 *)(lVar2 + 0x28) = 0;" (assignment_expression "*(undefined8 *)(lVar2 + 0x28) = 0" (pointer_expression "*(undefined8 *)(lVar2 + 0x28)" * (cast_expression "(undefined8 *)(lVar2 + 0x28)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0x28)" ( (binary_expression "lVar2 + 0x28" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(lVar2 + 0x30) = 0;" (assignment_expression "*(undefined8 *)(lVar2 + 0x30) = 0" (pointer_expression "*(undefined8 *)(lVar2 + 0x30)" * (cast_expression "(undefined8 *)(lVar2 + 0x30)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0x30)" ( (binary_expression "lVar2 + 0x30" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(lVar2 + 0x20) = uVar1;" (assignment_expression "*(undefined4 *)(lVar2 + 0x20) = uVar1" (pointer_expression "*(undefined4 *)(lVar2 + 0x20)" * (cast_expression "(undefined4 *)(lVar2 + 0x20)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0x20)" ( (binary_expression "lVar2 + 0x20" identifier + number_literal) )))) = identifier) ;) (expression_statement "auVar5 = FUN_001c2640(param_1,param_2,lVar2 + 0x20);" (assignment_expression "auVar5 = FUN_001c2640(param_1,param_2,lVar2 + 0x20)" identifier = (call_expression "FUN_001c2640(param_1,param_2,lVar2 + 0x20)" identifier (argument_list "(param_1,param_2,lVar2 + 0x20)" ( identifier , identifier , (binary_expression "lVar2 + 0x20" identifier + number_literal) )))) ;) (expression_statement "lVar3 = auVar5._8_8_;" (assignment_expression "lVar3 = auVar5._8_8_" identifier = (field_expression "auVar5._8_8_" identifier . field_identifier)) ;) (if_statement "if (lVar3 != 0) {\n    bVar4 = true;\n    if ((auVar5._0_8_ == 0) && (lVar3 != param_1 + 8)) {\n      bVar4 = *(uint *)(lVar2 + 0x20) < *(uint *)(lVar3 + 0x20);\n    }\n    FUN_002a3e80(bVar4,lVar2);\n    *(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1;\n    return lVar2;\n  }" if (parenthesized_expression "(lVar3 != 0)" ( (binary_expression "lVar3 != 0" identifier != number_literal) )) (compound_statement "{\n    bVar4 = true;\n    if ((auVar5._0_8_ == 0) && (lVar3 != param_1 + 8)) {\n      bVar4 = *(uint *)(lVar2 + 0x20) < *(uint *)(lVar3 + 0x20);\n    }\n    FUN_002a3e80(bVar4,lVar2);\n    *(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1;\n    return lVar2;\n  }" { (expression_statement "bVar4 = true;" (assignment_expression "bVar4 = true" identifier = true) ;) (if_statement "if ((auVar5._0_8_ == 0) && (lVar3 != param_1 + 8)) {\n      bVar4 = *(uint *)(lVar2 + 0x20) < *(uint *)(lVar3 + 0x20);\n    }" if (parenthesized_expression "((auVar5._0_8_ == 0) && (lVar3 != param_1 + 8))" ( (binary_expression "(auVar5._0_8_ == 0) && (lVar3 != param_1 + 8)" (parenthesized_expression "(auVar5._0_8_ == 0)" ( (binary_expression "auVar5._0_8_ == 0" (field_expression "auVar5._0_8_" identifier . field_identifier) == number_literal) )) && (parenthesized_expression "(lVar3 != param_1 + 8)" ( (binary_expression "lVar3 != param_1 + 8" identifier != (binary_expression "param_1 + 8" identifier + number_literal)) ))) )) (compound_statement "{\n      bVar4 = *(uint *)(lVar2 + 0x20) < *(uint *)(lVar3 + 0x20);\n    }" { (expression_statement "bVar4 = *(uint *)(lVar2 + 0x20) < *(uint *)(lVar3 + 0x20);" (assignment_expression "bVar4 = *(uint *)(lVar2 + 0x20) < *(uint *)(lVar3 + 0x20)" identifier = (binary_expression "*(uint *)(lVar2 + 0x20) < *(uint *)(lVar3 + 0x20)" (pointer_expression "*(uint *)(lVar2 + 0x20)" * (cast_expression "(uint *)(lVar2 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 0x20)" ( (binary_expression "lVar2 + 0x20" identifier + number_literal) )))) < (pointer_expression "*(uint *)(lVar3 + 0x20)" * (cast_expression "(uint *)(lVar3 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x20)" ( (binary_expression "lVar3 + 0x20" identifier + number_literal) )))))) ;) })) (expression_statement "FUN_002a3e80(bVar4,lVar2);" (call_expression "FUN_002a3e80(bVar4,lVar2)" identifier (argument_list "(bVar4,lVar2)" ( identifier , identifier ))) ;) (expression_statement "*(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1;" (assignment_expression "*(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1" (pointer_expression "*(long *)(param_1 + 0x28)" * (cast_expression "(long *)(param_1 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) = (binary_expression "*(long *)(param_1 + 0x28) + 1" (pointer_expression "*(long *)(param_1 + 0x28)" * (cast_expression "(long *)(param_1 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) + number_literal)) ;) (return_statement "return lVar2;" return identifier ;) })) (expression_statement "FUN_002a2980(lVar2);" (call_expression "FUN_002a2980(lVar2)" identifier (argument_list "(lVar2)" ( identifier ))) ;) (return_statement "return auVar5._0_8_;" return (field_expression "auVar5._0_8_" identifier . field_identifier) ;) })))
(translation_unit (function_definition (sized_type_specifier long) (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (field_expression IDENT . field_identifier)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = BOOL) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (field_expression IDENT . field_identifier) == LIT) )) && (parenthesized_expression ( (binary_expression IDENT != (binary_expression IDENT + LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) ;) (return_statement return IDENT ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (return_statement return (field_expression IDENT . field_identifier) ;) })))
(function_definition "long FUN_001c2720(long param_1,undefined8 param_2,undefined8 param_3,undefined8 *param_4)\n\n{\n  undefined4 uVar1;\n  long lVar2;\n  long lVar3;\n  bool bVar4;\n  undefined1 auVar5 [16];\n  \n  lVar2 = FUN_002a11b0(0x38);\n  uVar1 = *(undefined4 *)*param_4;\n  *(undefined8 *)(lVar2 + 0x28) = 0;\n  *(undefined8 *)(lVar2 + 0x30) = 0;\n  *(undefined4 *)(lVar2 + 0x20) = uVar1;\n  auVar5 = FUN_001c2640(param_1,param_2,lVar2 + 0x20);\n  lVar3 = auVar5._8_8_;\n  if (lVar3 != 0) {\n    bVar4 = true;\n    if ((auVar5._0_8_ == 0) && (lVar3 != param_1 + 8)) {\n      bVar4 = *(uint *)(lVar2 + 0x20) < *(uint *)(lVar3 + 0x20);\n    }\n    FUN_002a3e80(bVar4,lVar2);\n    *(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1;\n    return lVar2;\n  }\n  FUN_002a2980(lVar2);\n  return auVar5._0_8_;\n}" (sized_type_specifier "long" (long "long")) (function_declarator "FUN_001c2720(long param_1,undefined8 param_2,undefined8 param_3,undefined8 *param_4)" (identifier "FUN_001c2720") (parameter_list "(long param_1,undefined8 param_2,undefined8 param_3,undefined8 *param_4)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "undefined8 param_2" (type_identifier "undefined8") (identifier "param_2")) (, ",") (parameter_declaration "undefined8 param_3" (type_identifier "undefined8") (identifier "param_3")) (, ",") (parameter_declaration "undefined8 *param_4" (type_identifier "undefined8") (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) () ")"))) (compound_statement "{\n  undefined4 uVar1;\n  long lVar2;\n  long lVar3;\n  bool bVar4;\n  undefined1 auVar5 [16];\n  \n  lVar2 = FUN_002a11b0(0x38);\n  uVar1 = *(undefined4 *)*param_4;\n  *(undefined8 *)(lVar2 + 0x28) = 0;\n  *(undefined8 *)(lVar2 + 0x30) = 0;\n  *(undefined4 *)(lVar2 + 0x20) = uVar1;\n  auVar5 = FUN_001c2640(param_1,param_2,lVar2 + 0x20);\n  lVar3 = auVar5._8_8_;\n  if (lVar3 != 0) {\n    bVar4 = true;\n    if ((auVar5._0_8_ == 0) && (lVar3 != param_1 + 8)) {\n      bVar4 = *(uint *)(lVar2 + 0x20) < *(uint *)(lVar3 + 0x20);\n    }\n    FUN_002a3e80(bVar4,lVar2);\n    *(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1;\n    return lVar2;\n  }\n  FUN_002a2980(lVar2);\n  return auVar5._0_8_;\n}" ({ "{") (declaration "undefined4 uVar1;" (type_identifier "undefined4") (identifier "uVar1") (; ";")) (declaration "long lVar2;" (sized_type_specifier "long" (long "long")) (identifier "lVar2") (; ";")) (declaration "long lVar3;" (sized_type_specifier "long" (long "long")) (identifier "lVar3") (; ";")) (declaration "bool bVar4;" (primitive_type "bool") (identifier "bVar4") (; ";")) (declaration "undefined1 auVar5 [16];" (type_identifier "undefined1") (array_declarator "auVar5 [16]" (identifier "auVar5") ([ "[") (number_literal "16") (] "]")) (; ";")) (expression_statement "lVar2 = FUN_002a11b0(0x38);" (assignment_expression "lVar2 = FUN_002a11b0(0x38)" (identifier "lVar2") (= "=") (call_expression "FUN_002a11b0(0x38)" (identifier "FUN_002a11b0") (argument_list "(0x38)" (( "(") (number_literal "0x38") () ")")))) (; ";")) (expression_statement "uVar1 = *(undefined4 *)*param_4;" (assignment_expression "uVar1 = *(undefined4 *)*param_4" (identifier "uVar1") (= "=") (pointer_expression "*(undefined4 *)*param_4" (* "*") (cast_expression "(undefined4 *)*param_4" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_4" (* "*") (identifier "param_4"))))) (; ";")) (expression_statement "*(undefined8 *)(lVar2 + 0x28) = 0;" (assignment_expression "*(undefined8 *)(lVar2 + 0x28) = 0" (pointer_expression "*(undefined8 *)(lVar2 + 0x28)" (* "*") (cast_expression "(undefined8 *)(lVar2 + 0x28)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar2 + 0x28)" (( "(") (binary_expression "lVar2 + 0x28" (identifier "lVar2") (+ "+") (number_literal "0x28")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined8 *)(lVar2 + 0x30) = 0;" (assignment_expression "*(undefined8 *)(lVar2 + 0x30) = 0" (pointer_expression "*(undefined8 *)(lVar2 + 0x30)" (* "*") (cast_expression "(undefined8 *)(lVar2 + 0x30)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar2 + 0x30)" (( "(") (binary_expression "lVar2 + 0x30" (identifier "lVar2") (+ "+") (number_literal "0x30")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined4 *)(lVar2 + 0x20) = uVar1;" (assignment_expression "*(undefined4 *)(lVar2 + 0x20) = uVar1" (pointer_expression "*(undefined4 *)(lVar2 + 0x20)" (* "*") (cast_expression "(undefined4 *)(lVar2 + 0x20)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar2 + 0x20)" (( "(") (binary_expression "lVar2 + 0x20" (identifier "lVar2") (+ "+") (number_literal "0x20")) () ")")))) (= "=") (identifier "uVar1")) (; ";")) (expression_statement "auVar5 = FUN_001c2640(param_1,param_2,lVar2 + 0x20);" (assignment_expression "auVar5 = FUN_001c2640(param_1,param_2,lVar2 + 0x20)" (identifier "auVar5") (= "=") (call_expression "FUN_001c2640(param_1,param_2,lVar2 + 0x20)" (identifier "FUN_001c2640") (argument_list "(param_1,param_2,lVar2 + 0x20)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (binary_expression "lVar2 + 0x20" (identifier "lVar2") (+ "+") (number_literal "0x20")) () ")")))) (; ";")) (expression_statement "lVar3 = auVar5._8_8_;" (assignment_expression "lVar3 = auVar5._8_8_" (identifier "lVar3") (= "=") (field_expression "auVar5._8_8_" (identifier "auVar5") (. ".") (field_identifier "_8_8_"))) (; ";")) (if_statement "if (lVar3 != 0) {\n    bVar4 = true;\n    if ((auVar5._0_8_ == 0) && (lVar3 != param_1 + 8)) {\n      bVar4 = *(uint *)(lVar2 + 0x20) < *(uint *)(lVar3 + 0x20);\n    }\n    FUN_002a3e80(bVar4,lVar2);\n    *(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1;\n    return lVar2;\n  }" (if "if") (parenthesized_expression "(lVar3 != 0)" (( "(") (binary_expression "lVar3 != 0" (identifier "lVar3") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    bVar4 = true;\n    if ((auVar5._0_8_ == 0) && (lVar3 != param_1 + 8)) {\n      bVar4 = *(uint *)(lVar2 + 0x20) < *(uint *)(lVar3 + 0x20);\n    }\n    FUN_002a3e80(bVar4,lVar2);\n    *(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1;\n    return lVar2;\n  }" ({ "{") (expression_statement "bVar4 = true;" (assignment_expression "bVar4 = true" (identifier "bVar4") (= "=") (true "true")) (; ";")) (if_statement "if ((auVar5._0_8_ == 0) && (lVar3 != param_1 + 8)) {\n      bVar4 = *(uint *)(lVar2 + 0x20) < *(uint *)(lVar3 + 0x20);\n    }" (if "if") (parenthesized_expression "((auVar5._0_8_ == 0) && (lVar3 != param_1 + 8))" (( "(") (binary_expression "(auVar5._0_8_ == 0) && (lVar3 != param_1 + 8)" (parenthesized_expression "(auVar5._0_8_ == 0)" (( "(") (binary_expression "auVar5._0_8_ == 0" (field_expression "auVar5._0_8_" (identifier "auVar5") (. ".") (field_identifier "_0_8_")) (== "==") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(lVar3 != param_1 + 8)" (( "(") (binary_expression "lVar3 != param_1 + 8" (identifier "lVar3") (!= "!=") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8"))) () ")"))) () ")")) (compound_statement "{\n      bVar4 = *(uint *)(lVar2 + 0x20) < *(uint *)(lVar3 + 0x20);\n    }" ({ "{") (expression_statement "bVar4 = *(uint *)(lVar2 + 0x20) < *(uint *)(lVar3 + 0x20);" (assignment_expression "bVar4 = *(uint *)(lVar2 + 0x20) < *(uint *)(lVar3 + 0x20)" (identifier "bVar4") (= "=") (binary_expression "*(uint *)(lVar2 + 0x20) < *(uint *)(lVar3 + 0x20)" (pointer_expression "*(uint *)(lVar2 + 0x20)" (* "*") (cast_expression "(uint *)(lVar2 + 0x20)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar2 + 0x20)" (( "(") (binary_expression "lVar2 + 0x20" (identifier "lVar2") (+ "+") (number_literal "0x20")) () ")")))) (< "<") (pointer_expression "*(uint *)(lVar3 + 0x20)" (* "*") (cast_expression "(uint *)(lVar3 + 0x20)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + 0x20)" (( "(") (binary_expression "lVar3 + 0x20" (identifier "lVar3") (+ "+") (number_literal "0x20")) () ")")))))) (; ";")) (} "}"))) (expression_statement "FUN_002a3e80(bVar4,lVar2);" (call_expression "FUN_002a3e80(bVar4,lVar2)" (identifier "FUN_002a3e80") (argument_list "(bVar4,lVar2)" (( "(") (identifier "bVar4") (, ",") (identifier "lVar2") () ")"))) (; ";")) (expression_statement "*(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1;" (assignment_expression "*(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1" (pointer_expression "*(long *)(param_1 + 0x28)" (* "*") (cast_expression "(long *)(param_1 + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x28)" (( "(") (binary_expression "param_1 + 0x28" (identifier "param_1") (+ "+") (number_literal "0x28")) () ")")))) (= "=") (binary_expression "*(long *)(param_1 + 0x28) + 1" (pointer_expression "*(long *)(param_1 + 0x28)" (* "*") (cast_expression "(long *)(param_1 + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x28)" (( "(") (binary_expression "param_1 + 0x28" (identifier "param_1") (+ "+") (number_literal "0x28")) () ")")))) (+ "+") (number_literal "1"))) (; ";")) (return_statement "return lVar2;" (return "return") (identifier "lVar2") (; ";")) (} "}"))) (expression_statement "FUN_002a2980(lVar2);" (call_expression "FUN_002a2980(lVar2)" (identifier "FUN_002a2980") (argument_list "(lVar2)" (( "(") (identifier "lVar2") () ")"))) (; ";")) (return_statement "return auVar5._0_8_;" (return "return") (field_expression "auVar5._0_8_" (identifier "auVar5") (. ".") (field_identifier "_0_8_")) (; ";")) (} "}")))

/* DWARF original name: _M_emplace_hint_unique<const std::piecewise_construct_t&,
   std::tuple<unsigned int const&>, std::tuple<> >
   DWARF original prototype: iterator
   _M_emplace_hint_unique<const_std::piecewise_construct_t&,_std::tuple<unsigned_int_const&>,_std::tuple<>_>(_Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::Layout::Gnu_property>,_std::_Select1st<std::pair<unsigned_int_const,_gold::Layout::Gnu_property>_>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::Layout::Gnu_property>_>_>
   * this, const_iterator __pos, piecewise_construct_t * __args#0, tuple<unsigned_int_const&> *
   __args#1, tuple<> * __args#2) */

type_1 __thiscall
std::
_Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::Layout::Gnu_property>,_std::_Select1st<std::pair<unsigned_int_const,_gold::Layout::Gnu_property>_>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::Layout::Gnu_property>_>_>
::
_M_emplace_hint_unique<const_std::piecewise_construct_t&,_std::tuple<unsigned_int_const&>,_std::tuple<>_>
          (_Rb_tree<unsigned_int,_std::pair<unsigned_int_const,_gold::Layout::Gnu_property>,_std::_Select1st<std::pair<unsigned_int_const,_gold::Layout::Gnu_property>_>,_std::less<unsigned_int>,_std::allocator<std::pair<unsigned_int_const,_gold::Layout::Gnu_property>_>_>
           *this,const_iterator __pos,piecewise_construct_t *__args_0,
          tuple<unsigned_int_const&> *__args_1,tuple<> *__args_2)

{
  type_5 *var_5;
  size_t *psVar2;
  type_2 _Var3;
  type_3 *p_Var4;
  type_3 *var_4;
  bool bVar6;
  pair<std::type_3*,_std::type_3*> pVar7;
  
  p_Var4 = (type_3 *)var_1(0x38);
  _Var3 = *(__args_1->super__Tuple_impl<0,var_2&>).
           super__Head_base<0,var_2&,_false>._M_head_impl;
  p_Var4[1]._M_parent = (type_4)0x0;
  p_Var4[1]._M_left = (type_4)0x0;
  p_Var4[1]._M_color = _Var3;
  pVar7 = var_3(this,__pos,&p_Var4[1]._M_color);
  var_4 = pVar7.second;
  if (var_4 != (type_3 *)0x0) {
    var_5 = &(this->_M_impl).super__Rb_tree_header;
    bVar6 = true;
    if ((pVar7.first == (type_4)0x0) && ((type_5 *)var_4 != var_5)) {
      bVar6 = p_Var4[1]._M_color < var_4[1]._M_color;
    }
    var_6(bVar6,p_Var4,var_4,&var_5->_M_header);
    psVar2 = &(this->_M_impl).super__Rb_tree_header._M_node_count;
    *psVar2 = *psVar2 + 1;
    return (type_1)p_Var4;
  }
  var_7(p_Var4);
  return (type_1)pVar7.first;
}


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

long MASKED(long param_1,undefined8 param_2,undefined8 param_3,undefined8 *param_4)

{
  undefined4 uVar1;
  long lVar2;
  long lVar3;
  bool bVar4;
  undefined1 auVar5 [16];
  
  lVar2 = FUN_002a11b0(0x38);
  uVar1 = *(undefined4 *)*param_4;
  *(undefined8 *)(lVar2 + 0x28) = 0;
  *(undefined8 *)(lVar2 + 0x30) = 0;
  *(undefined4 *)(lVar2 + 0x20) = uVar1;
  auVar5 = FUN_001c2640(param_1,param_2,lVar2 + 0x20);
  lVar3 = auVar5._8_8_;
  if (lVar3 != 0) {
    bVar4 = true;
    if ((auVar5._0_8_ == 0) && (lVar3 != param_1 + 8)) {
      bVar4 = *(uint *)(lVar2 + 0x20) < *(uint *)(lVar3 + 0x20);
    }
    FUN_002a3e80(bVar4,lVar2);
    *(long *)(param_1 + 0x28) = *(long *)(param_1 + 0x28) + 1;
    return lVar2;
  }
  FUN_002a2980(lVar2);
  return auVar5._0_8_;
}

