
/* DWARF original prototype: __node_base *
   _M_find_before_node(_Hashtable<long_long_int,_long_long_int,_std::allocator<long_long_int>,_std::__detail::_Identity,_std::equal_to<long_long_int>,_gold::Archive::Seen_hash,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<true,_true,_true>_>
   * this, size_type __n, key_type.conflict * __k, __hash_code __code) */

__node_base * __thiscall
std::
_Hashtable<long_long_int,_long_long_int,_std::allocator<long_long_int>,_std::__detail::_Identity,_std::equal_to<long_long_int>,_gold::Archive::Seen_hash,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<true,_true,_true>_>
::_M_find_before_node
          (_Hashtable<long_long_int,_long_long_int,_std::allocator<long_long_int>,_std::__detail::_Identity,_std::equal_to<long_long_int>,_gold::Archive::Seen_hash,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<true,_true,_true>_>
           *this,size_type __n,key_type_conflict *__k,__hash_code __code)

{
  _Hash_node_base *p_Var1;
  _Hash_node_base *p_Var2;
  __node_base *p_Var3;
  __node_base *p_Var4;
  
  p_Var4 = this->_M_buckets[__n];
  if (p_Var4 != (__node_base *)0x0) {
    p_Var2 = p_Var4->_M_nxt[4]._M_nxt;
    p_Var1 = p_Var4->_M_nxt;
    while ((p_Var3 = p_Var1, p_Var2 != (_Hash_node_base *)__code ||
           (p_Var3[3]._M_nxt != *(_Hash_node_base **)((int)__k + 4) ||
            p_Var3[2]._M_nxt != *(_Hash_node_base **)__k))) {
      p_Var1 = p_Var3->_M_nxt;
      if ((p_Var1 == (_Hash_node_base *)0x0) ||
         (p_Var2 = p_Var1[4]._M_nxt, p_Var4 = p_Var3, __n != (uint)p_Var2 % this->_M_bucket_count))
      {
        return (__node_base *)0x0;
      }
    }
  }
  return p_Var4;
}



int * FUN_0013d3b0(int *param_1,uint param_2,int *param_3,uint param_4)

{
  int *piVar1;
  uint uVar2;
  int *piVar3;
  int *piVar4;
  
  piVar4 = *(int **)(*param_1 + param_2 * 4);
  if (piVar4 != (int *)0x0) {
    uVar2 = ((int *)*piVar4)[4];
    piVar1 = (int *)*piVar4;
    while ((piVar3 = piVar1, uVar2 != param_4 || (piVar3[3] != param_3[1] || piVar3[2] != *param_3))
          ) {
      piVar1 = (int *)*piVar3;
      if ((piVar1 == (int *)0x0) ||
         (uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1])) {
        return (int *)0x0;
      }
    }
  }
  return piVar4;
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
MOV ESI,dword ptr [ESP + 0x14]
MOV EBP,dword ptr [ESP + 0x18]
MOV EAX,dword ptr [ESI]
MOV EDI,dword ptr [EAX + EBP*0x4]
TEST EDI,EDI
JZ 0x0013d401
MOV EBX,dword ptr [EDI]
MOV ECX,dword ptr [EBX + 0x10]
JMP 0x0013d3e8
MOV EAX,dword ptr [EBX]
TEST EAX,EAX
JZ 0x0013d410
MOV ECX,dword ptr [EAX + 0x10]
MOV EDI,EBX
XOR EDX,EDX
MOV EBX,EAX
MOV EAX,ECX
DIV dword ptr [ESI + 0x4]
CMP EBP,EDX
JNZ 0x0013d410
CMP ECX,dword ptr [ESP + 0x20]
JNZ 0x0013d3d0
MOV ECX,dword ptr [ESP + 0x1c]
MOV EAX,dword ptr [EBX + 0x8]
MOV EDX,dword ptr [EBX + 0xc]
XOR EAX,dword ptr [ECX]
XOR EDX,dword ptr [ECX + 0x4]
OR EDX,EAX
JNZ 0x0013d3d0
POP EBX
MOV EAX,EDI
POP ESI
POP EDI
POP EBP
RET
XOR EDI,EDI
POP EBX
POP ESI
MOV EAX,EDI
POP EDI
POP EBP
RET
(translation_unit "int * FUN_0013d3b0(int *param_1,uint param_2,int *param_3,uint param_4)\n\n{\n  int *piVar1;\n  uint uVar2;\n  int *piVar3;\n  int *piVar4;\n  \n  piVar4 = *(int **)(*param_1 + param_2 * 4);\n  if (piVar4 != (int *)0x0) {\n    uVar2 = ((int *)*piVar4)[4];\n    piVar1 = (int *)*piVar4;\n    while ((piVar3 = piVar1, uVar2 != param_4 || (piVar3[3] != param_3[1] || piVar3[2] != *param_3))\n          ) {\n      piVar1 = (int *)*piVar3;\n      if ((piVar1 == (int *)0x0) ||\n         (uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1])) {\n        return (int *)0x0;\n      }\n    }\n  }\n  return piVar4;\n}\n\n" (function_definition "int * FUN_0013d3b0(int *param_1,uint param_2,int *param_3,uint param_4)\n\n{\n  int *piVar1;\n  uint uVar2;\n  int *piVar3;\n  int *piVar4;\n  \n  piVar4 = *(int **)(*param_1 + param_2 * 4);\n  if (piVar4 != (int *)0x0) {\n    uVar2 = ((int *)*piVar4)[4];\n    piVar1 = (int *)*piVar4;\n    while ((piVar3 = piVar1, uVar2 != param_4 || (piVar3[3] != param_3[1] || piVar3[2] != *param_3))\n          ) {\n      piVar1 = (int *)*piVar3;\n      if ((piVar1 == (int *)0x0) ||\n         (uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1])) {\n        return (int *)0x0;\n      }\n    }\n  }\n  return piVar4;\n}" primitive_type (pointer_declarator "* FUN_0013d3b0(int *param_1,uint param_2,int *param_3,uint param_4)" * (function_declarator "FUN_0013d3b0(int *param_1,uint param_2,int *param_3,uint param_4)" identifier (parameter_list "(int *param_1,uint param_2,int *param_3,uint param_4)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "uint param_4" type_identifier identifier) )))) (compound_statement "{\n  int *piVar1;\n  uint uVar2;\n  int *piVar3;\n  int *piVar4;\n  \n  piVar4 = *(int **)(*param_1 + param_2 * 4);\n  if (piVar4 != (int *)0x0) {\n    uVar2 = ((int *)*piVar4)[4];\n    piVar1 = (int *)*piVar4;\n    while ((piVar3 = piVar1, uVar2 != param_4 || (piVar3[3] != param_3[1] || piVar3[2] != *param_3))\n          ) {\n      piVar1 = (int *)*piVar3;\n      if ((piVar1 == (int *)0x0) ||\n         (uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1])) {\n        return (int *)0x0;\n      }\n    }\n  }\n  return piVar4;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int *piVar3;" primitive_type (pointer_declarator "*piVar3" * identifier) ;) (declaration "int *piVar4;" primitive_type (pointer_declarator "*piVar4" * identifier) ;) (expression_statement "piVar4 = *(int **)(*param_1 + param_2 * 4);" (assignment_expression "piVar4 = *(int **)(*param_1 + param_2 * 4)" identifier = (pointer_expression "*(int **)(*param_1 + param_2 * 4)" * (cast_expression "(int **)(*param_1 + param_2 * 4)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + param_2 * 4)" ( (binary_expression "*param_1 + param_2 * 4" (pointer_expression "*param_1" * identifier) + (binary_expression "param_2 * 4" identifier * number_literal)) ))))) ;) (if_statement "if (piVar4 != (int *)0x0) {\n    uVar2 = ((int *)*piVar4)[4];\n    piVar1 = (int *)*piVar4;\n    while ((piVar3 = piVar1, uVar2 != param_4 || (piVar3[3] != param_3[1] || piVar3[2] != *param_3))\n          ) {\n      piVar1 = (int *)*piVar3;\n      if ((piVar1 == (int *)0x0) ||\n         (uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1])) {\n        return (int *)0x0;\n      }\n    }\n  }" if (parenthesized_expression "(piVar4 != (int *)0x0)" ( (binary_expression "piVar4 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    uVar2 = ((int *)*piVar4)[4];\n    piVar1 = (int *)*piVar4;\n    while ((piVar3 = piVar1, uVar2 != param_4 || (piVar3[3] != param_3[1] || piVar3[2] != *param_3))\n          ) {\n      piVar1 = (int *)*piVar3;\n      if ((piVar1 == (int *)0x0) ||\n         (uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1])) {\n        return (int *)0x0;\n      }\n    }\n  }" { (expression_statement "uVar2 = ((int *)*piVar4)[4];" (assignment_expression "uVar2 = ((int *)*piVar4)[4]" identifier = (subscript_expression "((int *)*piVar4)[4]" (parenthesized_expression "((int *)*piVar4)" ( (cast_expression "(int *)*piVar4" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar4" * identifier)) )) [ number_literal ])) ;) (expression_statement "piVar1 = (int *)*piVar4;" (assignment_expression "piVar1 = (int *)*piVar4" identifier = (cast_expression "(int *)*piVar4" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar4" * identifier))) ;) (while_statement "while ((piVar3 = piVar1, uVar2 != param_4 || (piVar3[3] != param_3[1] || piVar3[2] != *param_3))\n          ) {\n      piVar1 = (int *)*piVar3;\n      if ((piVar1 == (int *)0x0) ||\n         (uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1])) {\n        return (int *)0x0;\n      }\n    }" while (parenthesized_expression "((piVar3 = piVar1, uVar2 != param_4 || (piVar3[3] != param_3[1] || piVar3[2] != *param_3))\n          )" ( (parenthesized_expression "(piVar3 = piVar1, uVar2 != param_4 || (piVar3[3] != param_3[1] || piVar3[2] != *param_3))" ( (comma_expression "piVar3 = piVar1, uVar2 != param_4 || (piVar3[3] != param_3[1] || piVar3[2] != *param_3)" (assignment_expression "piVar3 = piVar1" identifier = identifier) , (binary_expression "uVar2 != param_4 || (piVar3[3] != param_3[1] || piVar3[2] != *param_3)" (binary_expression "uVar2 != param_4" identifier != identifier) || (parenthesized_expression "(piVar3[3] != param_3[1] || piVar3[2] != *param_3)" ( (binary_expression "piVar3[3] != param_3[1] || piVar3[2] != *param_3" (binary_expression "piVar3[3] != param_3[1]" (subscript_expression "piVar3[3]" identifier [ number_literal ]) != (subscript_expression "param_3[1]" identifier [ number_literal ])) || (binary_expression "piVar3[2] != *param_3" (subscript_expression "piVar3[2]" identifier [ number_literal ]) != (pointer_expression "*param_3" * identifier))) )))) )) )) (compound_statement "{\n      piVar1 = (int *)*piVar3;\n      if ((piVar1 == (int *)0x0) ||\n         (uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1])) {\n        return (int *)0x0;\n      }\n    }" { (expression_statement "piVar1 = (int *)*piVar3;" (assignment_expression "piVar1 = (int *)*piVar3" identifier = (cast_expression "(int *)*piVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar3" * identifier))) ;) (if_statement "if ((piVar1 == (int *)0x0) ||\n         (uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1])) {\n        return (int *)0x0;\n      }" if (parenthesized_expression "((piVar1 == (int *)0x0) ||\n         (uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1]))" ( (binary_expression "(piVar1 == (int *)0x0) ||\n         (uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1])" (parenthesized_expression "(piVar1 == (int *)0x0)" ( (binary_expression "piVar1 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "(uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1])" ( (comma_expression "uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1]" (assignment_expression "uVar2 = piVar1[4]" identifier = (subscript_expression "piVar1[4]" identifier [ number_literal ])) , (comma_expression "piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1]" (assignment_expression "piVar4 = piVar3" identifier = identifier) , (binary_expression "param_2 != uVar2 % (uint)param_1[1]" identifier != (binary_expression "uVar2 % (uint)param_1[1]" identifier % (cast_expression "(uint)param_1[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[1]" identifier [ number_literal ])))))) ))) )) (compound_statement "{\n        return (int *)0x0;\n      }" { (return_statement "return (int *)0x0;" return (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) })) })) (return_statement "return piVar4;" return identifier ;) })))
(translation_unit "/* DWARF original prototype: __node_base *\n   _M_find_before_node(_Hashtable<long_long_int,_long_long_int,_std::allocator<long_long_int>,_std::__detail::_Identity,_std::equal_to<long_long_int>,_gold::Archive::Seen_hash,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<true,_true,_true>_>\n   * this, size_type __n, key_type.conflict * __k, __hash_code __code) */\n\n__node_base * __thiscall\nstd::\n_Hashtable<long_long_int,_long_long_int,_std::allocator<long_long_int>,_std::__detail::_Identity,_std::equal_to<long_long_int>,_gold::Archive::Seen_hash,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<true,_true,_true>_>\n::_M_find_before_node\n          (_Hashtable<long_long_int,_long_long_int,_std::allocator<long_long_int>,_std::__detail::_Identity,_std::equal_to<long_long_int>,_gold::Archive::Seen_hash,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<true,_true,_true>_>\n           *this,size_type __n,key_type_conflict *__k,__hash_code __code)\n\n{\n  _Hash_node_base *p_Var1;\n  _Hash_node_base *p_Var2;\n  __node_base *p_Var3;\n  __node_base *p_Var4;\n  \n  p_Var4 = this->_M_buckets[__n];\n  if (p_Var4 != (__node_base *)0x0) {\n    p_Var2 = p_Var4->_M_nxt[4]._M_nxt;\n    p_Var1 = p_Var4->_M_nxt;\n    while ((p_Var3 = p_Var1, p_Var2 != (_Hash_node_base *)__code ||\n           (p_Var3[3]._M_nxt != *(_Hash_node_base **)((int)__k + 4) ||\n            p_Var3[2]._M_nxt != *(_Hash_node_base **)__k))) {\n      p_Var1 = p_Var3->_M_nxt;\n      if ((p_Var1 == (_Hash_node_base *)0x0) ||\n         (p_Var2 = p_Var1[4]._M_nxt, p_Var4 = p_Var3, __n != (uint)p_Var2 % this->_M_bucket_count))\n      {\n        return (__node_base *)0x0;\n      }\n    }\n  }\n  return p_Var4;\n}\n\n" comment (ERROR "__node_base * __thiscall\nstd::\n_Hashtable<long_long_int,_long_long_int,_std::allocator<long_long_int>,_std::__detail::_Identity,_std::equal_to<long_long_int>,_gold::Archive::Seen_hash,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<true,_true,_true>_>\n::_M_find_before_node\n          (_Hashtable<long_long_int,_long_long_int,_std::allocator<long_long_int>,_std::__detail::_Identity,_std::equal_to<long_long_int>,_gold::Archive::Seen_hash,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<true,_true,_true>_>\n           *this,size_type __n,key_type_conflict *__k,__hash_code __code)" (binary_expression "__node_base * __thiscall\nstd::\n_Hashtable<long_long_int,_long_long_int,_std::allocator<long_long_int>,_std::__detail::_Identity,_std::equal_to<long_long_int>,_gold" (binary_expression "__node_base * __thiscall\nstd::\n_Hashtable<long_long_int,_long_long_int,_std::allocator<long_long_int>,_std::__detail::_Identity,_std::equal_to<long_long_int" (binary_expression "__node_base * __thiscall\nstd::\n_Hashtable<long_long_int,_long_long_int,_std::allocator<long_long_int>,_std" (binary_expression "__node_base * __thiscall\nstd::\n_Hashtable<long_long_int,_long_long_int,_std::allocator<long_long_int" (binary_expression "__node_base * __thiscall\nstd::\n_Hashtable<long_long_int" (binary_expression "__node_base * __thiscall" identifier * identifier) (ERROR "std::\n_Hashtable" identifier : : identifier) < identifier) (ERROR ",_long_long_int,_std::allocator" , identifier , identifier : : identifier) < identifier) > (ERROR "," ,) identifier) (ERROR "::__detail::_Identity,_std::equal_to" : : identifier : : identifier , identifier : : identifier) < identifier) > (ERROR "," ,) identifier) : : identifier : : identifier , identifier : : identifier : : identifier , identifier : : identifier : : identifier , identifier : : identifier : : identifier , identifier : : identifier : : identifier < true , identifier , (binary_expression "_true>_>\n::_M_find_before_node\n          (_Hashtable<long_long_int,_long_long_int,_std::allocator<long_long_int>,_std::__detail::_Identity,_std::equal_to<long_long_int>,_gold::Archive::Seen_hash,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<true,_true,_true>_>\n           *this,size_type __n,key_type_conflict *__k,__hash_code __code)" (binary_expression "_true>_" identifier > identifier) > (ERROR "::" : :) (call_expression "_M_find_before_node\n          (_Hashtable<long_long_int,_long_long_int,_std::allocator<long_long_int>,_std::__detail::_Identity,_std::equal_to<long_long_int>,_gold::Archive::Seen_hash,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<true,_true,_true>_>\n           *this,size_type __n,key_type_conflict *__k,__hash_code __code)" identifier (argument_list "(_Hashtable<long_long_int,_long_long_int,_std::allocator<long_long_int>,_std::__detail::_Identity,_std::equal_to<long_long_int>,_gold::Archive::Seen_hash,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<true,_true,_true>_>\n           *this,size_type __n,key_type_conflict *__k,__hash_code __code)" ( (binary_expression "_Hashtable<long_long_int" identifier < identifier) , identifier , (ERROR "_std::" identifier : :) (binary_expression "allocator<long_long_int" identifier < identifier) (ERROR ">" >) , (ERROR "_std::__detail::" identifier : : identifier : :) identifier , (ERROR "_std::" identifier : :) (binary_expression "equal_to<long_long_int" identifier < identifier) (ERROR ">" >) , (ERROR "_gold::Archive::" identifier : : identifier : :) identifier , (ERROR "_std::__detail::" identifier : : identifier : :) identifier , (ERROR "_std::__detail::" identifier : : identifier : :) identifier , (ERROR "_std::__detail::" identifier : : identifier : :) identifier , (ERROR "_std::__detail::" identifier : : identifier : :) (binary_expression "_Hashtable_traits<true" identifier < true) , identifier , (binary_expression "_true>_>\n           *this" (binary_expression "_true>_" identifier > identifier) > (pointer_expression "*this" * identifier)) , identifier (ERROR "__n" identifier) , (binary_expression "key_type_conflict *__k" identifier * identifier) , identifier (ERROR "__code" identifier) ))))) (compound_statement "{\n  _Hash_node_base *p_Var1;\n  _Hash_node_base *p_Var2;\n  __node_base *p_Var3;\n  __node_base *p_Var4;\n  \n  p_Var4 = this->_M_buckets[__n];\n  if (p_Var4 != (__node_base *)0x0) {\n    p_Var2 = p_Var4->_M_nxt[4]._M_nxt;\n    p_Var1 = p_Var4->_M_nxt;\n    while ((p_Var3 = p_Var1, p_Var2 != (_Hash_node_base *)__code ||\n           (p_Var3[3]._M_nxt != *(_Hash_node_base **)((int)__k + 4) ||\n            p_Var3[2]._M_nxt != *(_Hash_node_base **)__k))) {\n      p_Var1 = p_Var3->_M_nxt;\n      if ((p_Var1 == (_Hash_node_base *)0x0) ||\n         (p_Var2 = p_Var1[4]._M_nxt, p_Var4 = p_Var3, __n != (uint)p_Var2 % this->_M_bucket_count))\n      {\n        return (__node_base *)0x0;\n      }\n    }\n  }\n  return p_Var4;\n}" { (declaration "_Hash_node_base *p_Var1;" type_identifier (pointer_declarator "*p_Var1" * identifier) ;) (declaration "_Hash_node_base *p_Var2;" type_identifier (pointer_declarator "*p_Var2" * identifier) ;) (declaration "__node_base *p_Var3;" type_identifier (pointer_declarator "*p_Var3" * identifier) ;) (declaration "__node_base *p_Var4;" type_identifier (pointer_declarator "*p_Var4" * identifier) ;) (expression_statement "p_Var4 = this->_M_buckets[__n];" (assignment_expression "p_Var4 = this->_M_buckets[__n]" identifier = (subscript_expression "this->_M_buckets[__n]" (field_expression "this->_M_buckets" identifier -> field_identifier) [ identifier ])) ;) (if_statement "if (p_Var4 != (__node_base *)0x0) {\n    p_Var2 = p_Var4->_M_nxt[4]._M_nxt;\n    p_Var1 = p_Var4->_M_nxt;\n    while ((p_Var3 = p_Var1, p_Var2 != (_Hash_node_base *)__code ||\n           (p_Var3[3]._M_nxt != *(_Hash_node_base **)((int)__k + 4) ||\n            p_Var3[2]._M_nxt != *(_Hash_node_base **)__k))) {\n      p_Var1 = p_Var3->_M_nxt;\n      if ((p_Var1 == (_Hash_node_base *)0x0) ||\n         (p_Var2 = p_Var1[4]._M_nxt, p_Var4 = p_Var3, __n != (uint)p_Var2 % this->_M_bucket_count))\n      {\n        return (__node_base *)0x0;\n      }\n    }\n  }" if (parenthesized_expression "(p_Var4 != (__node_base *)0x0)" ( (binary_expression "p_Var4 != (__node_base *)0x0" identifier != (cast_expression "(__node_base *)0x0" ( (type_descriptor "__node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    p_Var2 = p_Var4->_M_nxt[4]._M_nxt;\n    p_Var1 = p_Var4->_M_nxt;\n    while ((p_Var3 = p_Var1, p_Var2 != (_Hash_node_base *)__code ||\n           (p_Var3[3]._M_nxt != *(_Hash_node_base **)((int)__k + 4) ||\n            p_Var3[2]._M_nxt != *(_Hash_node_base **)__k))) {\n      p_Var1 = p_Var3->_M_nxt;\n      if ((p_Var1 == (_Hash_node_base *)0x0) ||\n         (p_Var2 = p_Var1[4]._M_nxt, p_Var4 = p_Var3, __n != (uint)p_Var2 % this->_M_bucket_count))\n      {\n        return (__node_base *)0x0;\n      }\n    }\n  }" { (expression_statement "p_Var2 = p_Var4->_M_nxt[4]._M_nxt;" (assignment_expression "p_Var2 = p_Var4->_M_nxt[4]._M_nxt" identifier = (field_expression "p_Var4->_M_nxt[4]._M_nxt" (subscript_expression "p_Var4->_M_nxt[4]" (field_expression "p_Var4->_M_nxt" identifier -> field_identifier) [ number_literal ]) . field_identifier)) ;) (expression_statement "p_Var1 = p_Var4->_M_nxt;" (assignment_expression "p_Var1 = p_Var4->_M_nxt" identifier = (field_expression "p_Var4->_M_nxt" identifier -> field_identifier)) ;) (while_statement "while ((p_Var3 = p_Var1, p_Var2 != (_Hash_node_base *)__code ||\n           (p_Var3[3]._M_nxt != *(_Hash_node_base **)((int)__k + 4) ||\n            p_Var3[2]._M_nxt != *(_Hash_node_base **)__k))) {\n      p_Var1 = p_Var3->_M_nxt;\n      if ((p_Var1 == (_Hash_node_base *)0x0) ||\n         (p_Var2 = p_Var1[4]._M_nxt, p_Var4 = p_Var3, __n != (uint)p_Var2 % this->_M_bucket_count))\n      {\n        return (__node_base *)0x0;\n      }\n    }" while (parenthesized_expression "((p_Var3 = p_Var1, p_Var2 != (_Hash_node_base *)__code ||\n           (p_Var3[3]._M_nxt != *(_Hash_node_base **)((int)__k + 4) ||\n            p_Var3[2]._M_nxt != *(_Hash_node_base **)__k)))" ( (parenthesized_expression "(p_Var3 = p_Var1, p_Var2 != (_Hash_node_base *)__code ||\n           (p_Var3[3]._M_nxt != *(_Hash_node_base **)((int)__k + 4) ||\n            p_Var3[2]._M_nxt != *(_Hash_node_base **)__k))" ( (comma_expression "p_Var3 = p_Var1, p_Var2 != (_Hash_node_base *)__code ||\n           (p_Var3[3]._M_nxt != *(_Hash_node_base **)((int)__k + 4) ||\n            p_Var3[2]._M_nxt != *(_Hash_node_base **)__k)" (assignment_expression "p_Var3 = p_Var1" identifier = identifier) , (binary_expression "p_Var2 != (_Hash_node_base *)__code ||\n           (p_Var3[3]._M_nxt != *(_Hash_node_base **)((int)__k + 4) ||\n            p_Var3[2]._M_nxt != *(_Hash_node_base **)__k)" (binary_expression "p_Var2 != (_Hash_node_base *)__code" identifier != (cast_expression "(_Hash_node_base *)__code" ( (type_descriptor "_Hash_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) || (parenthesized_expression "(p_Var3[3]._M_nxt != *(_Hash_node_base **)((int)__k + 4) ||\n            p_Var3[2]._M_nxt != *(_Hash_node_base **)__k)" ( (binary_expression "p_Var3[3]._M_nxt != *(_Hash_node_base **)((int)__k + 4) ||\n            p_Var3[2]._M_nxt != *(_Hash_node_base **)__k" (binary_expression "p_Var3[3]._M_nxt != *(_Hash_node_base **)((int)__k + 4)" (field_expression "p_Var3[3]._M_nxt" (subscript_expression "p_Var3[3]" identifier [ number_literal ]) . field_identifier) != (pointer_expression "*(_Hash_node_base **)((int)__k + 4)" * (cast_expression "(_Hash_node_base **)((int)__k + 4)" ( (type_descriptor "_Hash_node_base **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((int)__k + 4)" ( (binary_expression "(int)__k + 4" (cast_expression "(int)__k" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) || (binary_expression "p_Var3[2]._M_nxt != *(_Hash_node_base **)__k" (field_expression "p_Var3[2]._M_nxt" (subscript_expression "p_Var3[2]" identifier [ number_literal ]) . field_identifier) != (pointer_expression "*(_Hash_node_base **)__k" * (cast_expression "(_Hash_node_base **)__k" ( (type_descriptor "_Hash_node_base **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier)))) )))) )) )) (compound_statement "{\n      p_Var1 = p_Var3->_M_nxt;\n      if ((p_Var1 == (_Hash_node_base *)0x0) ||\n         (p_Var2 = p_Var1[4]._M_nxt, p_Var4 = p_Var3, __n != (uint)p_Var2 % this->_M_bucket_count))\n      {\n        return (__node_base *)0x0;\n      }\n    }" { (expression_statement "p_Var1 = p_Var3->_M_nxt;" (assignment_expression "p_Var1 = p_Var3->_M_nxt" identifier = (field_expression "p_Var3->_M_nxt" identifier -> field_identifier)) ;) (if_statement "if ((p_Var1 == (_Hash_node_base *)0x0) ||\n         (p_Var2 = p_Var1[4]._M_nxt, p_Var4 = p_Var3, __n != (uint)p_Var2 % this->_M_bucket_count))\n      {\n        return (__node_base *)0x0;\n      }" if (parenthesized_expression "((p_Var1 == (_Hash_node_base *)0x0) ||\n         (p_Var2 = p_Var1[4]._M_nxt, p_Var4 = p_Var3, __n != (uint)p_Var2 % this->_M_bucket_count))" ( (binary_expression "(p_Var1 == (_Hash_node_base *)0x0) ||\n         (p_Var2 = p_Var1[4]._M_nxt, p_Var4 = p_Var3, __n != (uint)p_Var2 % this->_M_bucket_count)" (parenthesized_expression "(p_Var1 == (_Hash_node_base *)0x0)" ( (binary_expression "p_Var1 == (_Hash_node_base *)0x0" identifier == (cast_expression "(_Hash_node_base *)0x0" ( (type_descriptor "_Hash_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "(p_Var2 = p_Var1[4]._M_nxt, p_Var4 = p_Var3, __n != (uint)p_Var2 % this->_M_bucket_count)" ( (comma_expression "p_Var2 = p_Var1[4]._M_nxt, p_Var4 = p_Var3, __n != (uint)p_Var2 % this->_M_bucket_count" (assignment_expression "p_Var2 = p_Var1[4]._M_nxt" identifier = (field_expression "p_Var1[4]._M_nxt" (subscript_expression "p_Var1[4]" identifier [ number_literal ]) . field_identifier)) , (comma_expression "p_Var4 = p_Var3, __n != (uint)p_Var2 % this->_M_bucket_count" (assignment_expression "p_Var4 = p_Var3" identifier = identifier) , (binary_expression "__n != (uint)p_Var2 % this->_M_bucket_count" identifier != (binary_expression "(uint)p_Var2 % this->_M_bucket_count" (cast_expression "(uint)p_Var2" ( (type_descriptor "uint" type_identifier) ) identifier) % (field_expression "this->_M_bucket_count" identifier -> field_identifier))))) ))) )) (compound_statement "{\n        return (__node_base *)0x0;\n      }" { (return_statement "return (__node_base *)0x0;" return (cast_expression "(__node_base *)0x0" ( (type_descriptor "__node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) })) })) (return_statement "return p_Var4;" return identifier ;) }))
(translation_unit "int * FUN_0013d3b0(int *param_1,uint param_2,int *param_3,uint param_4)\n\n{\n  int *piVar1;\n  uint uVar2;\n  int *piVar3;\n  int *piVar4;\n  \n  piVar4 = *(int **)(*param_1 + param_2 * 4);\n  if (piVar4 != (int *)0x0) {\n    uVar2 = ((int *)*piVar4)[4];\n    piVar1 = (int *)*piVar4;\n    while ((piVar3 = piVar1, uVar2 != param_4 || (piVar3[3] != param_3[1] || piVar3[2] != *param_3))\n          ) {\n      piVar1 = (int *)*piVar3;\n      if ((piVar1 == (int *)0x0) ||\n         (uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1])) {\n        return (int *)0x0;\n      }\n    }\n  }\n  return piVar4;\n}\n\n" (function_definition "int * FUN_0013d3b0(int *param_1,uint param_2,int *param_3,uint param_4)\n\n{\n  int *piVar1;\n  uint uVar2;\n  int *piVar3;\n  int *piVar4;\n  \n  piVar4 = *(int **)(*param_1 + param_2 * 4);\n  if (piVar4 != (int *)0x0) {\n    uVar2 = ((int *)*piVar4)[4];\n    piVar1 = (int *)*piVar4;\n    while ((piVar3 = piVar1, uVar2 != param_4 || (piVar3[3] != param_3[1] || piVar3[2] != *param_3))\n          ) {\n      piVar1 = (int *)*piVar3;\n      if ((piVar1 == (int *)0x0) ||\n         (uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1])) {\n        return (int *)0x0;\n      }\n    }\n  }\n  return piVar4;\n}" primitive_type (pointer_declarator "* FUN_0013d3b0(int *param_1,uint param_2,int *param_3,uint param_4)" * (function_declarator "FUN_0013d3b0(int *param_1,uint param_2,int *param_3,uint param_4)" identifier (parameter_list "(int *param_1,uint param_2,int *param_3,uint param_4)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "uint param_4" type_identifier identifier) )))) (compound_statement "{\n  int *piVar1;\n  uint uVar2;\n  int *piVar3;\n  int *piVar4;\n  \n  piVar4 = *(int **)(*param_1 + param_2 * 4);\n  if (piVar4 != (int *)0x0) {\n    uVar2 = ((int *)*piVar4)[4];\n    piVar1 = (int *)*piVar4;\n    while ((piVar3 = piVar1, uVar2 != param_4 || (piVar3[3] != param_3[1] || piVar3[2] != *param_3))\n          ) {\n      piVar1 = (int *)*piVar3;\n      if ((piVar1 == (int *)0x0) ||\n         (uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1])) {\n        return (int *)0x0;\n      }\n    }\n  }\n  return piVar4;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int *piVar3;" primitive_type (pointer_declarator "*piVar3" * identifier) ;) (declaration "int *piVar4;" primitive_type (pointer_declarator "*piVar4" * identifier) ;) (expression_statement "piVar4 = *(int **)(*param_1 + param_2 * 4);" (assignment_expression "piVar4 = *(int **)(*param_1 + param_2 * 4)" identifier = (pointer_expression "*(int **)(*param_1 + param_2 * 4)" * (cast_expression "(int **)(*param_1 + param_2 * 4)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + param_2 * 4)" ( (binary_expression "*param_1 + param_2 * 4" (pointer_expression "*param_1" * identifier) + (binary_expression "param_2 * 4" identifier * number_literal)) ))))) ;) (if_statement "if (piVar4 != (int *)0x0) {\n    uVar2 = ((int *)*piVar4)[4];\n    piVar1 = (int *)*piVar4;\n    while ((piVar3 = piVar1, uVar2 != param_4 || (piVar3[3] != param_3[1] || piVar3[2] != *param_3))\n          ) {\n      piVar1 = (int *)*piVar3;\n      if ((piVar1 == (int *)0x0) ||\n         (uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1])) {\n        return (int *)0x0;\n      }\n    }\n  }" if (parenthesized_expression "(piVar4 != (int *)0x0)" ( (binary_expression "piVar4 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    uVar2 = ((int *)*piVar4)[4];\n    piVar1 = (int *)*piVar4;\n    while ((piVar3 = piVar1, uVar2 != param_4 || (piVar3[3] != param_3[1] || piVar3[2] != *param_3))\n          ) {\n      piVar1 = (int *)*piVar3;\n      if ((piVar1 == (int *)0x0) ||\n         (uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1])) {\n        return (int *)0x0;\n      }\n    }\n  }" { (expression_statement "uVar2 = ((int *)*piVar4)[4];" (assignment_expression "uVar2 = ((int *)*piVar4)[4]" identifier = (subscript_expression "((int *)*piVar4)[4]" (parenthesized_expression "((int *)*piVar4)" ( (cast_expression "(int *)*piVar4" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar4" * identifier)) )) [ number_literal ])) ;) (expression_statement "piVar1 = (int *)*piVar4;" (assignment_expression "piVar1 = (int *)*piVar4" identifier = (cast_expression "(int *)*piVar4" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar4" * identifier))) ;) (while_statement "while ((piVar3 = piVar1, uVar2 != param_4 || (piVar3[3] != param_3[1] || piVar3[2] != *param_3))\n          ) {\n      piVar1 = (int *)*piVar3;\n      if ((piVar1 == (int *)0x0) ||\n         (uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1])) {\n        return (int *)0x0;\n      }\n    }" while (parenthesized_expression "((piVar3 = piVar1, uVar2 != param_4 || (piVar3[3] != param_3[1] || piVar3[2] != *param_3))\n          )" ( (parenthesized_expression "(piVar3 = piVar1, uVar2 != param_4 || (piVar3[3] != param_3[1] || piVar3[2] != *param_3))" ( (comma_expression "piVar3 = piVar1, uVar2 != param_4 || (piVar3[3] != param_3[1] || piVar3[2] != *param_3)" (assignment_expression "piVar3 = piVar1" identifier = identifier) , (binary_expression "uVar2 != param_4 || (piVar3[3] != param_3[1] || piVar3[2] != *param_3)" (binary_expression "uVar2 != param_4" identifier != identifier) || (parenthesized_expression "(piVar3[3] != param_3[1] || piVar3[2] != *param_3)" ( (binary_expression "piVar3[3] != param_3[1] || piVar3[2] != *param_3" (binary_expression "piVar3[3] != param_3[1]" (subscript_expression "piVar3[3]" identifier [ number_literal ]) != (subscript_expression "param_3[1]" identifier [ number_literal ])) || (binary_expression "piVar3[2] != *param_3" (subscript_expression "piVar3[2]" identifier [ number_literal ]) != (pointer_expression "*param_3" * identifier))) )))) )) )) (compound_statement "{\n      piVar1 = (int *)*piVar3;\n      if ((piVar1 == (int *)0x0) ||\n         (uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1])) {\n        return (int *)0x0;\n      }\n    }" { (expression_statement "piVar1 = (int *)*piVar3;" (assignment_expression "piVar1 = (int *)*piVar3" identifier = (cast_expression "(int *)*piVar3" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar3" * identifier))) ;) (if_statement "if ((piVar1 == (int *)0x0) ||\n         (uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1])) {\n        return (int *)0x0;\n      }" if (parenthesized_expression "((piVar1 == (int *)0x0) ||\n         (uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1]))" ( (binary_expression "(piVar1 == (int *)0x0) ||\n         (uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1])" (parenthesized_expression "(piVar1 == (int *)0x0)" ( (binary_expression "piVar1 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "(uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1])" ( (comma_expression "uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1]" (assignment_expression "uVar2 = piVar1[4]" identifier = (subscript_expression "piVar1[4]" identifier [ number_literal ])) , (comma_expression "piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1]" (assignment_expression "piVar4 = piVar3" identifier = identifier) , (binary_expression "param_2 != uVar2 % (uint)param_1[1]" identifier != (binary_expression "uVar2 % (uint)param_1[1]" identifier % (cast_expression "(uint)param_1[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[1]" identifier [ number_literal ])))))) ))) )) (compound_statement "{\n        return (int *)0x0;\n      }" { (return_statement "return (int *)0x0;" return (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) })) })) (return_statement "return piVar4;" return identifier ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) )))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + (binary_expression IDENT * LIT)) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression (parenthesized_expression ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)) )) [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (while_statement while (parenthesized_expression ( (parenthesized_expression ( (comma_expression (assignment_expression IDENT = IDENT) , (binary_expression (binary_expression IDENT != IDENT) || (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) != (subscript_expression IDENT [ LIT ])) || (binary_expression (subscript_expression IDENT [ LIT ]) != (pointer_expression * IDENT))) )))) )) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) || (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) , (comma_expression (assignment_expression IDENT = IDENT) , (binary_expression IDENT != (binary_expression IDENT % (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])))))) ))) )) (compound_statement { (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })) })) })) (return_statement return IDENT ;) })))
(function_definition "int * FUN_0013d3b0(int *param_1,uint param_2,int *param_3,uint param_4)\n\n{\n  int *piVar1;\n  uint uVar2;\n  int *piVar3;\n  int *piVar4;\n  \n  piVar4 = *(int **)(*param_1 + param_2 * 4);\n  if (piVar4 != (int *)0x0) {\n    uVar2 = ((int *)*piVar4)[4];\n    piVar1 = (int *)*piVar4;\n    while ((piVar3 = piVar1, uVar2 != param_4 || (piVar3[3] != param_3[1] || piVar3[2] != *param_3))\n          ) {\n      piVar1 = (int *)*piVar3;\n      if ((piVar1 == (int *)0x0) ||\n         (uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1])) {\n        return (int *)0x0;\n      }\n    }\n  }\n  return piVar4;\n}" (primitive_type "int") (pointer_declarator "* FUN_0013d3b0(int *param_1,uint param_2,int *param_3,uint param_4)" (* "*") (function_declarator "FUN_0013d3b0(int *param_1,uint param_2,int *param_3,uint param_4)" (identifier "FUN_0013d3b0") (parameter_list "(int *param_1,uint param_2,int *param_3,uint param_4)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "uint param_2" (type_identifier "uint") (identifier "param_2")) (, ",") (parameter_declaration "int *param_3" (primitive_type "int") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "uint param_4" (type_identifier "uint") (identifier "param_4")) () ")")))) (compound_statement "{\n  int *piVar1;\n  uint uVar2;\n  int *piVar3;\n  int *piVar4;\n  \n  piVar4 = *(int **)(*param_1 + param_2 * 4);\n  if (piVar4 != (int *)0x0) {\n    uVar2 = ((int *)*piVar4)[4];\n    piVar1 = (int *)*piVar4;\n    while ((piVar3 = piVar1, uVar2 != param_4 || (piVar3[3] != param_3[1] || piVar3[2] != *param_3))\n          ) {\n      piVar1 = (int *)*piVar3;\n      if ((piVar1 == (int *)0x0) ||\n         (uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1])) {\n        return (int *)0x0;\n      }\n    }\n  }\n  return piVar4;\n}" ({ "{") (declaration "int *piVar1;" (primitive_type "int") (pointer_declarator "*piVar1" (* "*") (identifier "piVar1")) (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "int *piVar3;" (primitive_type "int") (pointer_declarator "*piVar3" (* "*") (identifier "piVar3")) (; ";")) (declaration "int *piVar4;" (primitive_type "int") (pointer_declarator "*piVar4" (* "*") (identifier "piVar4")) (; ";")) (expression_statement "piVar4 = *(int **)(*param_1 + param_2 * 4);" (assignment_expression "piVar4 = *(int **)(*param_1 + param_2 * 4)" (identifier "piVar4") (= "=") (pointer_expression "*(int **)(*param_1 + param_2 * 4)" (* "*") (cast_expression "(int **)(*param_1 + param_2 * 4)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + param_2 * 4)" (( "(") (binary_expression "*param_1 + param_2 * 4" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (binary_expression "param_2 * 4" (identifier "param_2") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (if_statement "if (piVar4 != (int *)0x0) {\n    uVar2 = ((int *)*piVar4)[4];\n    piVar1 = (int *)*piVar4;\n    while ((piVar3 = piVar1, uVar2 != param_4 || (piVar3[3] != param_3[1] || piVar3[2] != *param_3))\n          ) {\n      piVar1 = (int *)*piVar3;\n      if ((piVar1 == (int *)0x0) ||\n         (uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1])) {\n        return (int *)0x0;\n      }\n    }\n  }" (if "if") (parenthesized_expression "(piVar4 != (int *)0x0)" (( "(") (binary_expression "piVar4 != (int *)0x0" (identifier "piVar4") (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    uVar2 = ((int *)*piVar4)[4];\n    piVar1 = (int *)*piVar4;\n    while ((piVar3 = piVar1, uVar2 != param_4 || (piVar3[3] != param_3[1] || piVar3[2] != *param_3))\n          ) {\n      piVar1 = (int *)*piVar3;\n      if ((piVar1 == (int *)0x0) ||\n         (uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1])) {\n        return (int *)0x0;\n      }\n    }\n  }" ({ "{") (expression_statement "uVar2 = ((int *)*piVar4)[4];" (assignment_expression "uVar2 = ((int *)*piVar4)[4]" (identifier "uVar2") (= "=") (subscript_expression "((int *)*piVar4)[4]" (parenthesized_expression "((int *)*piVar4)" (( "(") (cast_expression "(int *)*piVar4" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*piVar4" (* "*") (identifier "piVar4"))) () ")")) ([ "[") (number_literal "4") (] "]"))) (; ";")) (expression_statement "piVar1 = (int *)*piVar4;" (assignment_expression "piVar1 = (int *)*piVar4" (identifier "piVar1") (= "=") (cast_expression "(int *)*piVar4" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*piVar4" (* "*") (identifier "piVar4")))) (; ";")) (while_statement "while ((piVar3 = piVar1, uVar2 != param_4 || (piVar3[3] != param_3[1] || piVar3[2] != *param_3))\n          ) {\n      piVar1 = (int *)*piVar3;\n      if ((piVar1 == (int *)0x0) ||\n         (uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1])) {\n        return (int *)0x0;\n      }\n    }" (while "while") (parenthesized_expression "((piVar3 = piVar1, uVar2 != param_4 || (piVar3[3] != param_3[1] || piVar3[2] != *param_3))\n          )" (( "(") (parenthesized_expression "(piVar3 = piVar1, uVar2 != param_4 || (piVar3[3] != param_3[1] || piVar3[2] != *param_3))" (( "(") (comma_expression "piVar3 = piVar1, uVar2 != param_4 || (piVar3[3] != param_3[1] || piVar3[2] != *param_3)" (assignment_expression "piVar3 = piVar1" (identifier "piVar3") (= "=") (identifier "piVar1")) (, ",") (binary_expression "uVar2 != param_4 || (piVar3[3] != param_3[1] || piVar3[2] != *param_3)" (binary_expression "uVar2 != param_4" (identifier "uVar2") (!= "!=") (identifier "param_4")) (|| "||") (parenthesized_expression "(piVar3[3] != param_3[1] || piVar3[2] != *param_3)" (( "(") (binary_expression "piVar3[3] != param_3[1] || piVar3[2] != *param_3" (binary_expression "piVar3[3] != param_3[1]" (subscript_expression "piVar3[3]" (identifier "piVar3") ([ "[") (number_literal "3") (] "]")) (!= "!=") (subscript_expression "param_3[1]" (identifier "param_3") ([ "[") (number_literal "1") (] "]"))) (|| "||") (binary_expression "piVar3[2] != *param_3" (subscript_expression "piVar3[2]" (identifier "piVar3") ([ "[") (number_literal "2") (] "]")) (!= "!=") (pointer_expression "*param_3" (* "*") (identifier "param_3")))) () ")")))) () ")")) () ")")) (compound_statement "{\n      piVar1 = (int *)*piVar3;\n      if ((piVar1 == (int *)0x0) ||\n         (uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1])) {\n        return (int *)0x0;\n      }\n    }" ({ "{") (expression_statement "piVar1 = (int *)*piVar3;" (assignment_expression "piVar1 = (int *)*piVar3" (identifier "piVar1") (= "=") (cast_expression "(int *)*piVar3" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*piVar3" (* "*") (identifier "piVar3")))) (; ";")) (if_statement "if ((piVar1 == (int *)0x0) ||\n         (uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1])) {\n        return (int *)0x0;\n      }" (if "if") (parenthesized_expression "((piVar1 == (int *)0x0) ||\n         (uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1]))" (( "(") (binary_expression "(piVar1 == (int *)0x0) ||\n         (uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1])" (parenthesized_expression "(piVar1 == (int *)0x0)" (( "(") (binary_expression "piVar1 == (int *)0x0" (identifier "piVar1") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (|| "||") (parenthesized_expression "(uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1])" (( "(") (comma_expression "uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1]" (assignment_expression "uVar2 = piVar1[4]" (identifier "uVar2") (= "=") (subscript_expression "piVar1[4]" (identifier "piVar1") ([ "[") (number_literal "4") (] "]"))) (, ",") (comma_expression "piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1]" (assignment_expression "piVar4 = piVar3" (identifier "piVar4") (= "=") (identifier "piVar3")) (, ",") (binary_expression "param_2 != uVar2 % (uint)param_1[1]" (identifier "param_2") (!= "!=") (binary_expression "uVar2 % (uint)param_1[1]" (identifier "uVar2") (% "%") (cast_expression "(uint)param_1[1]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))))))) () ")"))) () ")")) (compound_statement "{\n        return (int *)0x0;\n      }" ({ "{") (return_statement "return (int *)0x0;" (return "return") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}"))) (} "}"))) (} "}"))) (return_statement "return piVar4;" (return "return") (identifier "piVar4") (; ";")) (} "}")))

/* DWARF original prototype: __node_base *
   _M_find_before_node(_Hashtable<long_long_int,_long_long_int,_std::allocator<long_long_int>,_std::__detail::_Identity,_std::equal_to<long_long_int>,_gold::Archive::Seen_hash,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<true,_true,_true>_>
   * this, size_type __n, key_type.conflict * __k, __hash_code __code) */

type_2 * __thiscall
std::
_Hashtable<long_long_int,_long_long_int,_std::allocator<long_long_int>,_std::__detail::_Identity,_std::equal_to<long_long_int>,_gold::Archive::Seen_hash,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<true,_true,_true>_>
::_M_find_before_node
          (_Hashtable<long_long_int,_long_long_int,_std::allocator<long_long_int>,_std::__detail::_Identity,_std::equal_to<long_long_int>,_gold::Archive::Seen_hash,_std::__detail::_Mod_range_hashing,_std::__detail::_Default_ranged_hash,_std::__detail::_Prime_rehash_policy,_std::__detail::_Hashtable_traits<true,_true,_true>_>
           *this,size_type var_4,key_type_conflict *__k,__hash_code __code)

{
  type_1 *var_3;
  type_1 *var_2;
  type_2 *p_Var3;
  type_2 *var_1;
  
  var_1 = this->_M_buckets[var_4];
  if (var_1 != (type_2 *)0x0) {
    var_2 = var_1->_M_nxt[4]._M_nxt;
    var_3 = var_1->_M_nxt;
    while ((p_Var3 = var_3, var_2 != (type_1 *)__code ||
           (p_Var3[3]._M_nxt != *(type_1 **)((int)__k + 4) ||
            p_Var3[2]._M_nxt != *(type_1 **)__k))) {
      var_3 = p_Var3->_M_nxt;
      if ((var_3 == (type_1 *)0x0) ||
         (var_2 = var_3[4]._M_nxt, var_1 = p_Var3, var_4 != (type_3)var_2 % this->_M_bucket_count))
      {
        return (type_2 *)0x0;
      }
    }
  }
  return var_1;
}


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

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

{
  int *piVar1;
  uint uVar2;
  int *piVar3;
  int *piVar4;
  
  piVar4 = *(int **)(*param_1 + param_2 * 4);
  if (piVar4 != (int *)0x0) {
    uVar2 = ((int *)*piVar4)[4];
    piVar1 = (int *)*piVar4;
    while ((piVar3 = piVar1, uVar2 != param_4 || (piVar3[3] != param_3[1] || piVar3[2] != *param_3))
          ) {
      piVar1 = (int *)*piVar3;
      if ((piVar1 == (int *)0x0) ||
         (uVar2 = piVar1[4], piVar4 = piVar3, param_2 != uVar2 % (uint)param_1[1])) {
        return (int *)0x0;
      }
    }
  }
  return piVar4;
}

