
/* WARNING: Function: __x86.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */
/* DWARF original prototype: void new_key_offset(Stringpool_template<short_unsigned_int> * this,
   size_t length) */

void __thiscall
gold::Stringpool_template<short_unsigned_int>::new_key_offset
          (Stringpool_template<short_unsigned_int> *this,size_t length)

{
  size_t *psVar1;
  vector<int,_std::allocator<int>_> *this_00;
  int iVar2;
  iterator __position;
  pointer pvVar3;
  uint uVar4;
  section_offset_type offset;
  vector<int,_std::allocator<int>_> local_28 [2];
  
  if ((this->zero_null_ == false) || (length != 0)) {
    offset = this->offset_;
    iVar2 = (int)this->addralign_;
    if (*(int *)((int)&this->addralign_ + 4) != 0 || iVar2 != 0) {
      offset = iVar2 + -1 + offset & -iVar2;
    }
    this->offset_ = length * 2 + 2 + offset;
  }
  else {
    offset = 0;
  }
  pvVar3 = (this->key_to_offset_).chunks_.
           super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>
           ._M_impl._M_start;
  uVar4 = (this->key_to_offset_).size_ >> 0xd;
  if ((uint)(((int)(this->key_to_offset_).chunks_.
                   super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>
                   ._M_impl._M_finish - (int)pvVar3 >> 2) * -0x55555555) <= uVar4) {
    local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_start = (pointer)0x0;
    local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_finish = (pointer)0x0;
    local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_end_of_storage =
         (pointer)0x0;
                    /* try { // try from 001744b3 to 001744b7 has its CatchHandler @ 001745a9 */
    std::
    vector<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>
    ::emplace_back<std::vector<int,_std::allocator<int>_>_>
              (&(this->key_to_offset_).chunks_,local_28);
    if (local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_start != (pointer)0x0)
    {
      operator_delete(local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_start);
    }
    std::vector<int,_std::allocator<int>_>::reserve
              ((this->key_to_offset_).chunks_.
               super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>
               ._M_impl._M_finish + -1,0x2000);
    pvVar3 = (this->key_to_offset_).chunks_.
             super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>
             ._M_impl._M_start;
    if ((uint)(((int)(this->key_to_offset_).chunks_.
                     super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>
                     ._M_impl._M_finish - (int)pvVar3 >> 2) * -0x55555555) <= uVar4) {
                    /* WARNING: Subroutine does not return */
      do_gold_unreachable("../../gold/stringpool.h",0x8e,"push_back");
    }
  }
  this_00 = pvVar3 + uVar4;
  __position._M_current = (this_00->super__Vector_base<int,_std::allocator<int>_>)._M_impl._M_finish
  ;
  if (__position._M_current !=
      (this_00->super__Vector_base<int,_std::allocator<int>_>)._M_impl._M_end_of_storage) {
    *__position._M_current = offset;
    (this_00->super__Vector_base<int,_std::allocator<int>_>)._M_impl._M_finish =
         __position._M_current + 1;
    psVar1 = &(this->key_to_offset_).size_;
    *psVar1 = *psVar1 + 1;
    return;
  }
  std::vector<int,_std::allocator<int>_>::_M_realloc_insert<int_const&>(this_00,__position,&offset);
  psVar1 = &(this->key_to_offset_).size_;
  *psVar1 = *psVar1 + 1;
  return;
}



/* WARNING: Function: __i686.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */

void FUN_00174420(int param_1,int param_2)

{
  uint *puVar1;
  uint uVar2;
  int iVar3;
  uint uVar4;
  uint local_2c;
  int local_28 [6];
  
  if ((*(char *)(param_1 + 0x3c) == '\0') || (param_2 != 0)) {
    local_2c = *(uint *)(param_1 + 0x40);
    iVar3 = *(int *)(param_1 + 0x44);
    if (*(int *)(param_1 + 0x48) != 0 || iVar3 != 0) {
      local_2c = iVar3 + -1 + local_2c & -iVar3;
    }
    *(uint *)(param_1 + 0x40) = param_2 * 2 + 2 + local_2c;
  }
  else {
    local_2c = 0;
  }
  iVar3 = *(int *)(param_1 + 0x1c);
  uVar4 = *(uint *)(param_1 + 0x28) >> 0xd;
  if ((uint)((*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555) <= uVar4) {
    local_28[0] = 0;
    local_28[1] = 0;
    local_28[2] = 0;
                    /* try { // try from 001744b3 to 001744b7 has its CatchHandler @ 001745a9 */
    FUN_001743a0(param_1 + 0x1c,local_28);
    if (local_28[0] != 0) {
      FUN_001e6db0(local_28[0]);
    }
    FUN_00172ad0(*(int *)(param_1 + 0x20) + -0xc,0x2000);
    iVar3 = *(int *)(param_1 + 0x1c);
    uVar2 = (*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555;
    if (uVar2 <= uVar4) {
                    /* WARNING: Subroutine does not return */
      FUN_00069d00("../../gold/stringpool.h",0x8e,"push_back",uVar2);
    }
  }
  iVar3 = iVar3 + uVar4 * 0xc;
  puVar1 = *(uint **)(iVar3 + 4);
  if (puVar1 != *(uint **)(iVar3 + 8)) {
    *puVar1 = local_2c;
    *(uint **)(iVar3 + 4) = puVar1 + 1;
    *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;
    return;
  }
  FUN_0014ec40(iVar3,puVar1,&local_2c);
  *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;
  return;
}


CALL 0x000559e6
ADD EAX,0x21abdb
PUSH EBP
MOV EBP,ESP
PUSH EDI
PUSH ESI
PUSH EBX
SUB ESP,0x2c
MOV ESI,dword ptr [EBP + 0x8]
MOV dword ptr [EBP + -0x34],EAX
CMP byte ptr [ESI + 0x3c],0x0
JZ 0x0017444a
MOV EDX,dword ptr [EBP + 0xc]
TEST EDX,EDX
JZ 0x00174560
MOV ECX,dword ptr [ESI + 0x40]
MOV EDX,dword ptr [ESI + 0x48]
MOV EAX,dword ptr [ESI + 0x44]
MOV EBX,ECX
MOV EDI,EDX
MOV dword ptr [EBP + -0x30],ECX
SAR EBX,0x1f
OR EDI,EAX
MOV dword ptr [EBP + -0x2c],EBX
JNZ 0x00174530
MOV EAX,dword ptr [EBP + 0xc]
MOV dword ptr [EBP + -0x28],ECX
LEA EAX,[EAX + EAX*0x1 + 0x2]
ADD EAX,dword ptr [EBP + -0x30]
MOV dword ptr [ESI + 0x40],EAX
MOV EDX,dword ptr [ESI + 0x1c]
MOV EAX,dword ptr [ESI + 0x20]
MOV EDI,dword ptr [ESI + 0x28]
SUB EAX,EDX
SAR EAX,0x2
SHR EDI,0xd
IMUL EAX,EAX,-0x55555555
CMP EDI,EAX
JC 0x00174501
SUB ESP,0x8
LEA EAX,[EBP + -0x24]
MOV dword ptr [EBP + -0x24],0x0
PUSH EAX
LEA EAX,[ESI + 0x1c]
PUSH EAX
MOV dword ptr [EBP + -0x20],0x0
MOV dword ptr [EBP + -0x1c],0x0
CALL 0x001743a0
MOV EAX,dword ptr [EBP + -0x24]
ADD ESP,0x10
TEST EAX,EAX
JZ 0x001744d1
SUB ESP,0xc
MOV EBX,dword ptr [EBP + -0x34]
PUSH EAX
CALL 0x001e6db0
ADD ESP,0x10
MOV EAX,dword ptr [ESI + 0x20]
SUB ESP,0x8
PUSH 0x2000
SUB EAX,0xc
PUSH EAX
CALL 0x00172ad0
MOV EDX,dword ptr [ESI + 0x1c]
MOV EAX,dword ptr [ESI + 0x20]
ADD ESP,0x10
SUB EAX,EDX
SAR EAX,0x2
IMUL EAX,EAX,-0x55555555
CMP EDI,EAX
JNC 0x0017458d
LEA EAX,[EDI + EDI*0x2]
LEA EDX,[EDX + EAX*0x4]
MOV EAX,dword ptr [EDX + 0x4]
CMP EAX,dword ptr [EDX + 0x8]
JZ 0x00174570
MOV ECX,dword ptr [EBP + -0x28]
ADD EAX,0x4
MOV dword ptr [EAX + -0x4],ECX
MOV dword ptr [EDX + 0x4],EAX
ADD dword ptr [ESI + 0x28],0x1
LEA ESP,[EBP + -0xc]
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV ECX,EAX
MOV EBX,EDX
ADD ECX,-0x1
ADC EBX,-0x1
ADD ECX,dword ptr [EBP + -0x30]
ADC EBX,dword ptr [EBP + -0x2c]
NEG EAX
ADC EDX,0x0
MOV EDI,ECX
NEG EDX
AND EDI,EAX
AND EBX,EDX
MOV dword ptr [EBP + -0x30],EDI
MOV ECX,EDI
MOV dword ptr [EBP + -0x2c],EBX
JMP 0x00174468
MOV dword ptr [EBP + -0x28],0x0
JMP 0x00174478
SUB ESP,0x4
LEA ECX,[EBP + -0x28]
PUSH ECX
PUSH EAX
PUSH EDX
CALL 0x0014ec40
ADD dword ptr [ESI + 0x28],0x1
ADD ESP,0x10
LEA ESP,[EBP + -0xc]
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EBX,dword ptr [EBP + -0x34]
PUSH EAX
LEA EAX,[EBX + 0xfff0a7e0]
PUSH EAX
LEA EAX,[EBX + 0xffef1532]
PUSH 0x8e
PUSH EAX
CALL 0x00069d00
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */\n\nvoid FUN_00174420(int param_1,int param_2)\n\n{\n  uint *puVar1;\n  uint uVar2;\n  int iVar3;\n  uint uVar4;\n  uint local_2c;\n  int local_28 [6];\n  \n  if ((*(char *)(param_1 + 0x3c) == '\0') || (param_2 != 0)) {\n    local_2c = *(uint *)(param_1 + 0x40);\n    iVar3 = *(int *)(param_1 + 0x44);\n    if (*(int *)(param_1 + 0x48) != 0 || iVar3 != 0) {\n      local_2c = iVar3 + -1 + local_2c & -iVar3;\n    }\n    *(uint *)(param_1 + 0x40) = param_2 * 2 + 2 + local_2c;\n  }\n  else {\n    local_2c = 0;\n  }\n  iVar3 = *(int *)(param_1 + 0x1c);\n  uVar4 = *(uint *)(param_1 + 0x28) >> 0xd;\n  if ((uint)((*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555) <= uVar4) {\n    local_28[0] = 0;\n    local_28[1] = 0;\n    local_28[2] = 0;\n                    /* try { // try from 001744b3 to 001744b7 has its CatchHandler @ 001745a9 */\n    FUN_001743a0(param_1 + 0x1c,local_28);\n    if (local_28[0] != 0) {\n      FUN_001e6db0(local_28[0]);\n    }\n    FUN_00172ad0(*(int *)(param_1 + 0x20) + -0xc,0x2000);\n    iVar3 = *(int *)(param_1 + 0x1c);\n    uVar2 = (*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555;\n    if (uVar2 <= uVar4) {\n                    /* WARNING: Subroutine does not return */\n      FUN_00069d00("../../gold/stringpool.h",0x8e,"push_back",uVar2);\n    }\n  }\n  iVar3 = iVar3 + uVar4 * 0xc;\n  puVar1 = *(uint **)(iVar3 + 4);\n  if (puVar1 != *(uint **)(iVar3 + 8)) {\n    *puVar1 = local_2c;\n    *(uint **)(iVar3 + 4) = puVar1 + 1;\n    *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;\n    return;\n  }\n  FUN_0014ec40(iVar3,puVar1,&local_2c);\n  *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;\n  return;\n}\n\n" comment (function_definition "void FUN_00174420(int param_1,int param_2)\n\n{\n  uint *puVar1;\n  uint uVar2;\n  int iVar3;\n  uint uVar4;\n  uint local_2c;\n  int local_28 [6];\n  \n  if ((*(char *)(param_1 + 0x3c) == '\0') || (param_2 != 0)) {\n    local_2c = *(uint *)(param_1 + 0x40);\n    iVar3 = *(int *)(param_1 + 0x44);\n    if (*(int *)(param_1 + 0x48) != 0 || iVar3 != 0) {\n      local_2c = iVar3 + -1 + local_2c & -iVar3;\n    }\n    *(uint *)(param_1 + 0x40) = param_2 * 2 + 2 + local_2c;\n  }\n  else {\n    local_2c = 0;\n  }\n  iVar3 = *(int *)(param_1 + 0x1c);\n  uVar4 = *(uint *)(param_1 + 0x28) >> 0xd;\n  if ((uint)((*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555) <= uVar4) {\n    local_28[0] = 0;\n    local_28[1] = 0;\n    local_28[2] = 0;\n                    /* try { // try from 001744b3 to 001744b7 has its CatchHandler @ 001745a9 */\n    FUN_001743a0(param_1 + 0x1c,local_28);\n    if (local_28[0] != 0) {\n      FUN_001e6db0(local_28[0]);\n    }\n    FUN_00172ad0(*(int *)(param_1 + 0x20) + -0xc,0x2000);\n    iVar3 = *(int *)(param_1 + 0x1c);\n    uVar2 = (*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555;\n    if (uVar2 <= uVar4) {\n                    /* WARNING: Subroutine does not return */\n      FUN_00069d00("../../gold/stringpool.h",0x8e,"push_back",uVar2);\n    }\n  }\n  iVar3 = iVar3 + uVar4 * 0xc;\n  puVar1 = *(uint **)(iVar3 + 4);\n  if (puVar1 != *(uint **)(iVar3 + 8)) {\n    *puVar1 = local_2c;\n    *(uint **)(iVar3 + 4) = puVar1 + 1;\n    *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;\n    return;\n  }\n  FUN_0014ec40(iVar3,puVar1,&local_2c);\n  *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;\n  return;\n}" primitive_type (function_declarator "FUN_00174420(int param_1,int param_2)" identifier (parameter_list "(int param_1,int param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) ))) (compound_statement "{\n  uint *puVar1;\n  uint uVar2;\n  int iVar3;\n  uint uVar4;\n  uint local_2c;\n  int local_28 [6];\n  \n  if ((*(char *)(param_1 + 0x3c) == '\0') || (param_2 != 0)) {\n    local_2c = *(uint *)(param_1 + 0x40);\n    iVar3 = *(int *)(param_1 + 0x44);\n    if (*(int *)(param_1 + 0x48) != 0 || iVar3 != 0) {\n      local_2c = iVar3 + -1 + local_2c & -iVar3;\n    }\n    *(uint *)(param_1 + 0x40) = param_2 * 2 + 2 + local_2c;\n  }\n  else {\n    local_2c = 0;\n  }\n  iVar3 = *(int *)(param_1 + 0x1c);\n  uVar4 = *(uint *)(param_1 + 0x28) >> 0xd;\n  if ((uint)((*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555) <= uVar4) {\n    local_28[0] = 0;\n    local_28[1] = 0;\n    local_28[2] = 0;\n                    /* try { // try from 001744b3 to 001744b7 has its CatchHandler @ 001745a9 */\n    FUN_001743a0(param_1 + 0x1c,local_28);\n    if (local_28[0] != 0) {\n      FUN_001e6db0(local_28[0]);\n    }\n    FUN_00172ad0(*(int *)(param_1 + 0x20) + -0xc,0x2000);\n    iVar3 = *(int *)(param_1 + 0x1c);\n    uVar2 = (*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555;\n    if (uVar2 <= uVar4) {\n                    /* WARNING: Subroutine does not return */\n      FUN_00069d00("../../gold/stringpool.h",0x8e,"push_back",uVar2);\n    }\n  }\n  iVar3 = iVar3 + uVar4 * 0xc;\n  puVar1 = *(uint **)(iVar3 + 4);\n  if (puVar1 != *(uint **)(iVar3 + 8)) {\n    *puVar1 = local_2c;\n    *(uint **)(iVar3 + 4) = puVar1 + 1;\n    *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;\n    return;\n  }\n  FUN_0014ec40(iVar3,puVar1,&local_2c);\n  *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;\n  return;\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint local_2c;" type_identifier identifier ;) (declaration "int local_28 [6];" primitive_type (array_declarator "local_28 [6]" identifier [ number_literal ]) ;) (if_statement "if ((*(char *)(param_1 + 0x3c) == '\0') || (param_2 != 0)) {\n    local_2c = *(uint *)(param_1 + 0x40);\n    iVar3 = *(int *)(param_1 + 0x44);\n    if (*(int *)(param_1 + 0x48) != 0 || iVar3 != 0) {\n      local_2c = iVar3 + -1 + local_2c & -iVar3;\n    }\n    *(uint *)(param_1 + 0x40) = param_2 * 2 + 2 + local_2c;\n  }\n  else {\n    local_2c = 0;\n  }" if (parenthesized_expression "((*(char *)(param_1 + 0x3c) == '\0') || (param_2 != 0))" ( (binary_expression "(*(char *)(param_1 + 0x3c) == '\0') || (param_2 != 0)" (parenthesized_expression "(*(char *)(param_1 + 0x3c) == '\0')" ( (binary_expression "*(char *)(param_1 + 0x3c) == '\0'" (pointer_expression "*(char *)(param_1 + 0x3c)" * (cast_expression "(char *)(param_1 + 0x3c)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x3c)" ( (binary_expression "param_1 + 0x3c" identifier + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) )) || (parenthesized_expression "(param_2 != 0)" ( (binary_expression "param_2 != 0" identifier != number_literal) ))) )) (compound_statement "{\n    local_2c = *(uint *)(param_1 + 0x40);\n    iVar3 = *(int *)(param_1 + 0x44);\n    if (*(int *)(param_1 + 0x48) != 0 || iVar3 != 0) {\n      local_2c = iVar3 + -1 + local_2c & -iVar3;\n    }\n    *(uint *)(param_1 + 0x40) = param_2 * 2 + 2 + local_2c;\n  }" { (expression_statement "local_2c = *(uint *)(param_1 + 0x40);" (assignment_expression "local_2c = *(uint *)(param_1 + 0x40)" identifier = (pointer_expression "*(uint *)(param_1 + 0x40)" * (cast_expression "(uint *)(param_1 + 0x40)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) ))))) ;) (expression_statement "iVar3 = *(int *)(param_1 + 0x44);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x44)" identifier = (pointer_expression "*(int *)(param_1 + 0x44)" * (cast_expression "(int *)(param_1 + 0x44)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) ))))) ;) (if_statement "if (*(int *)(param_1 + 0x48) != 0 || iVar3 != 0) {\n      local_2c = iVar3 + -1 + local_2c & -iVar3;\n    }" if (parenthesized_expression "(*(int *)(param_1 + 0x48) != 0 || iVar3 != 0)" ( (binary_expression "*(int *)(param_1 + 0x48) != 0 || iVar3 != 0" (binary_expression "*(int *)(param_1 + 0x48) != 0" (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) != number_literal) || (binary_expression "iVar3 != 0" identifier != number_literal)) )) (compound_statement "{\n      local_2c = iVar3 + -1 + local_2c & -iVar3;\n    }" { (expression_statement "local_2c = iVar3 + -1 + local_2c & -iVar3;" (assignment_expression "local_2c = iVar3 + -1 + local_2c & -iVar3" identifier = (binary_expression "iVar3 + -1 + local_2c & -iVar3" (binary_expression "iVar3 + -1 + local_2c" (binary_expression "iVar3 + -1" identifier + number_literal) + identifier) & (unary_expression "-iVar3" - identifier))) ;) })) (expression_statement "*(uint *)(param_1 + 0x40) = param_2 * 2 + 2 + local_2c;" (assignment_expression "*(uint *)(param_1 + 0x40) = param_2 * 2 + 2 + local_2c" (pointer_expression "*(uint *)(param_1 + 0x40)" * (cast_expression "(uint *)(param_1 + 0x40)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) = (binary_expression "param_2 * 2 + 2 + local_2c" (binary_expression "param_2 * 2 + 2" (binary_expression "param_2 * 2" identifier * number_literal) + number_literal) + identifier)) ;) }) (else_clause "else {\n    local_2c = 0;\n  }" else (compound_statement "{\n    local_2c = 0;\n  }" { (expression_statement "local_2c = 0;" (assignment_expression "local_2c = 0" identifier = number_literal) ;) }))) (expression_statement "iVar3 = *(int *)(param_1 + 0x1c);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x1c)" identifier = (pointer_expression "*(int *)(param_1 + 0x1c)" * (cast_expression "(int *)(param_1 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1c)" ( (binary_expression "param_1 + 0x1c" identifier + number_literal) ))))) ;) (expression_statement "uVar4 = *(uint *)(param_1 + 0x28) >> 0xd;" (assignment_expression "uVar4 = *(uint *)(param_1 + 0x28) >> 0xd" identifier = (binary_expression "*(uint *)(param_1 + 0x28) >> 0xd" (pointer_expression "*(uint *)(param_1 + 0x28)" * (cast_expression "(uint *)(param_1 + 0x28)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) >> number_literal)) ;) (if_statement "if ((uint)((*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555) <= uVar4) {\n    local_28[0] = 0;\n    local_28[1] = 0;\n    local_28[2] = 0;\n                    /* try { // try from 001744b3 to 001744b7 has its CatchHandler @ 001745a9 */\n    FUN_001743a0(param_1 + 0x1c,local_28);\n    if (local_28[0] != 0) {\n      FUN_001e6db0(local_28[0]);\n    }\n    FUN_00172ad0(*(int *)(param_1 + 0x20) + -0xc,0x2000);\n    iVar3 = *(int *)(param_1 + 0x1c);\n    uVar2 = (*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555;\n    if (uVar2 <= uVar4) {\n                    /* WARNING: Subroutine does not return */\n      FUN_00069d00("../../gold/stringpool.h",0x8e,"push_back",uVar2);\n    }\n  }" if (parenthesized_expression "((uint)((*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555) <= uVar4)" ( (binary_expression "(uint)((*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555) <= uVar4" (call_expression "(uint)((*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555)" ( (binary_expression "(*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555" (parenthesized_expression "(*(int *)(param_1 + 0x20) - iVar3 >> 2)" ( (binary_expression "*(int *)(param_1 + 0x20) - iVar3 >> 2" (binary_expression "*(int *)(param_1 + 0x20) - iVar3" (pointer_expression "*(int *)(param_1 + 0x20)" * (cast_expression "(int *)(param_1 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) - identifier) >> number_literal) )) * number_literal) ))) <= identifier) )) (compound_statement "{\n    local_28[0] = 0;\n    local_28[1] = 0;\n    local_28[2] = 0;\n                    /* try { // try from 001744b3 to 001744b7 has its CatchHandler @ 001745a9 */\n    FUN_001743a0(param_1 + 0x1c,local_28);\n    if (local_28[0] != 0) {\n      FUN_001e6db0(local_28[0]);\n    }\n    FUN_00172ad0(*(int *)(param_1 + 0x20) + -0xc,0x2000);\n    iVar3 = *(int *)(param_1 + 0x1c);\n    uVar2 = (*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555;\n    if (uVar2 <= uVar4) {\n                    /* WARNING: Subroutine does not return */\n      FUN_00069d00("../../gold/stringpool.h",0x8e,"push_back",uVar2);\n    }\n  }" { (expression_statement "local_28[0] = 0;" (assignment_expression "local_28[0] = 0" (subscript_expression "local_28[0]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "local_28[1] = 0;" (assignment_expression "local_28[1] = 0" (subscript_expression "local_28[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "local_28[2] = 0;" (assignment_expression "local_28[2] = 0" (subscript_expression "local_28[2]" identifier [ number_literal ]) = number_literal) ;) comment (expression_statement "FUN_001743a0(param_1 + 0x1c,local_28);" (call_expression "FUN_001743a0(param_1 + 0x1c,local_28)" identifier (argument_list "(param_1 + 0x1c,local_28)" ( (binary_expression "param_1 + 0x1c" identifier + number_literal) , identifier ))) ;) (if_statement "if (local_28[0] != 0) {\n      FUN_001e6db0(local_28[0]);\n    }" if (parenthesized_expression "(local_28[0] != 0)" ( (binary_expression "local_28[0] != 0" (subscript_expression "local_28[0]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n      FUN_001e6db0(local_28[0]);\n    }" { (expression_statement "FUN_001e6db0(local_28[0]);" (call_expression "FUN_001e6db0(local_28[0])" identifier (argument_list "(local_28[0])" ( (subscript_expression "local_28[0]" identifier [ number_literal ]) ))) ;) })) (expression_statement "FUN_00172ad0(*(int *)(param_1 + 0x20) + -0xc,0x2000);" (call_expression "FUN_00172ad0(*(int *)(param_1 + 0x20) + -0xc,0x2000)" identifier (argument_list "(*(int *)(param_1 + 0x20) + -0xc,0x2000)" ( (binary_expression "*(int *)(param_1 + 0x20) + -0xc" (pointer_expression "*(int *)(param_1 + 0x20)" * (cast_expression "(int *)(param_1 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) + number_literal) , number_literal ))) ;) (expression_statement "iVar3 = *(int *)(param_1 + 0x1c);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x1c)" identifier = (pointer_expression "*(int *)(param_1 + 0x1c)" * (cast_expression "(int *)(param_1 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1c)" ( (binary_expression "param_1 + 0x1c" identifier + number_literal) ))))) ;) (expression_statement "uVar2 = (*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555;" (assignment_expression "uVar2 = (*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555" identifier = (binary_expression "(*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555" (parenthesized_expression "(*(int *)(param_1 + 0x20) - iVar3 >> 2)" ( (binary_expression "*(int *)(param_1 + 0x20) - iVar3 >> 2" (binary_expression "*(int *)(param_1 + 0x20) - iVar3" (pointer_expression "*(int *)(param_1 + 0x20)" * (cast_expression "(int *)(param_1 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) - identifier) >> number_literal) )) * number_literal)) ;) (if_statement "if (uVar2 <= uVar4) {\n                    /* WARNING: Subroutine does not return */\n      FUN_00069d00("../../gold/stringpool.h",0x8e,"push_back",uVar2);\n    }" if (parenthesized_expression "(uVar2 <= uVar4)" ( (binary_expression "uVar2 <= uVar4" identifier <= identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n      FUN_00069d00("../../gold/stringpool.h",0x8e,"push_back",uVar2);\n    }" { comment (expression_statement "FUN_00069d00("../../gold/stringpool.h",0x8e,"push_back",uVar2);" (call_expression "FUN_00069d00("../../gold/stringpool.h",0x8e,"push_back",uVar2)" identifier (argument_list "("../../gold/stringpool.h",0x8e,"push_back",uVar2)" ( (string_literal ""../../gold/stringpool.h"" " string_content ") , number_literal , (string_literal ""push_back"" " string_content ") , identifier ))) ;) })) })) (expression_statement "iVar3 = iVar3 + uVar4 * 0xc;" (assignment_expression "iVar3 = iVar3 + uVar4 * 0xc" identifier = (binary_expression "iVar3 + uVar4 * 0xc" identifier + (binary_expression "uVar4 * 0xc" identifier * number_literal))) ;) (expression_statement "puVar1 = *(uint **)(iVar3 + 4);" (assignment_expression "puVar1 = *(uint **)(iVar3 + 4)" identifier = (pointer_expression "*(uint **)(iVar3 + 4)" * (cast_expression "(uint **)(iVar3 + 4)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar3 + 4)" ( (binary_expression "iVar3 + 4" identifier + number_literal) ))))) ;) (if_statement "if (puVar1 != *(uint **)(iVar3 + 8)) {\n    *puVar1 = local_2c;\n    *(uint **)(iVar3 + 4) = puVar1 + 1;\n    *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;\n    return;\n  }" if (parenthesized_expression "(puVar1 != *(uint **)(iVar3 + 8))" ( (binary_expression "puVar1 != *(uint **)(iVar3 + 8)" identifier != (pointer_expression "*(uint **)(iVar3 + 8)" * (cast_expression "(uint **)(iVar3 + 8)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar3 + 8)" ( (binary_expression "iVar3 + 8" identifier + number_literal) ))))) )) (compound_statement "{\n    *puVar1 = local_2c;\n    *(uint **)(iVar3 + 4) = puVar1 + 1;\n    *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;\n    return;\n  }" { (expression_statement "*puVar1 = local_2c;" (assignment_expression "*puVar1 = local_2c" (pointer_expression "*puVar1" * identifier) = identifier) ;) (expression_statement "*(uint **)(iVar3 + 4) = puVar1 + 1;" (assignment_expression "*(uint **)(iVar3 + 4) = puVar1 + 1" (pointer_expression "*(uint **)(iVar3 + 4)" * (cast_expression "(uint **)(iVar3 + 4)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar3 + 4)" ( (binary_expression "iVar3 + 4" identifier + number_literal) )))) = (binary_expression "puVar1 + 1" identifier + number_literal)) ;) (expression_statement "*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;" (assignment_expression "*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1" (pointer_expression "*(int *)(param_1 + 0x28)" * (cast_expression "(int *)(param_1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) = (binary_expression "*(int *)(param_1 + 0x28) + 1" (pointer_expression "*(int *)(param_1 + 0x28)" * (cast_expression "(int *)(param_1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) + number_literal)) ;) (return_statement "return;" return ;) })) (expression_statement "FUN_0014ec40(iVar3,puVar1,&local_2c);" (call_expression "FUN_0014ec40(iVar3,puVar1,&local_2c)" identifier (argument_list "(iVar3,puVar1,&local_2c)" ( identifier , identifier , (pointer_expression "&local_2c" & identifier) ))) ;) (expression_statement "*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;" (assignment_expression "*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1" (pointer_expression "*(int *)(param_1 + 0x28)" * (cast_expression "(int *)(param_1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) = (binary_expression "*(int *)(param_1 + 0x28) + 1" (pointer_expression "*(int *)(param_1 + 0x28)" * (cast_expression "(int *)(param_1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) + number_literal)) ;) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */\n/* DWARF original prototype: void new_key_offset(Stringpool_template<short_unsigned_int> * this,\n   size_t length) */\n\nvoid __thiscall\ngold::Stringpool_template<short_unsigned_int>::new_key_offset\n          (Stringpool_template<short_unsigned_int> *this,size_t length)\n\n{\n  size_t *psVar1;\n  vector<int,_std::allocator<int>_> *this_00;\n  int iVar2;\n  iterator __position;\n  pointer pvVar3;\n  uint uVar4;\n  section_offset_type offset;\n  vector<int,_std::allocator<int>_> local_28 [2];\n  \n  if ((this->zero_null_ == false) || (length != 0)) {\n    offset = this->offset_;\n    iVar2 = (int)this->addralign_;\n    if (*(int *)((int)&this->addralign_ + 4) != 0 || iVar2 != 0) {\n      offset = iVar2 + -1 + offset & -iVar2;\n    }\n    this->offset_ = length * 2 + 2 + offset;\n  }\n  else {\n    offset = 0;\n  }\n  pvVar3 = (this->key_to_offset_).chunks_.\n           super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n           ._M_impl._M_start;\n  uVar4 = (this->key_to_offset_).size_ >> 0xd;\n  if ((uint)(((int)(this->key_to_offset_).chunks_.\n                   super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n                   ._M_impl._M_finish - (int)pvVar3 >> 2) * -0x55555555) <= uVar4) {\n    local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_start = (pointer)0x0;\n    local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_finish = (pointer)0x0;\n    local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_end_of_storage =\n         (pointer)0x0;\n                    /* try { // try from 001744b3 to 001744b7 has its CatchHandler @ 001745a9 */\n    std::\n    vector<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n    ::emplace_back<std::vector<int,_std::allocator<int>_>_>\n              (&(this->key_to_offset_).chunks_,local_28);\n    if (local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_start != (pointer)0x0)\n    {\n      operator_delete(local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_start);\n    }\n    std::vector<int,_std::allocator<int>_>::reserve\n              ((this->key_to_offset_).chunks_.\n               super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n               ._M_impl._M_finish + -1,0x2000);\n    pvVar3 = (this->key_to_offset_).chunks_.\n             super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n             ._M_impl._M_start;\n    if ((uint)(((int)(this->key_to_offset_).chunks_.\n                     super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n                     ._M_impl._M_finish - (int)pvVar3 >> 2) * -0x55555555) <= uVar4) {\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/stringpool.h",0x8e,"push_back");\n    }\n  }\n  this_00 = pvVar3 + uVar4;\n  __position._M_current = (this_00->super__Vector_base<int,_std::allocator<int>_>)._M_impl._M_finish\n  ;\n  if (__position._M_current !=\n      (this_00->super__Vector_base<int,_std::allocator<int>_>)._M_impl._M_end_of_storage) {\n    *__position._M_current = offset;\n    (this_00->super__Vector_base<int,_std::allocator<int>_>)._M_impl._M_finish =\n         __position._M_current + 1;\n    psVar1 = &(this->key_to_offset_).size_;\n    *psVar1 = *psVar1 + 1;\n    return;\n  }\n  std::vector<int,_std::allocator<int>_>::_M_realloc_insert<int_const&>(this_00,__position,&offset);\n  psVar1 = &(this->key_to_offset_).size_;\n  *psVar1 = *psVar1 + 1;\n  return;\n}\n\n" comment comment (function_definition "void __thiscall\ngold::Stringpool_template<short_unsigned_int>::new_key_offset\n          (Stringpool_template<short_unsigned_int> *this,size_t length)\n\n{\n  size_t *psVar1;\n  vector<int,_std::allocator<int>_> *this_00;\n  int iVar2;\n  iterator __position;\n  pointer pvVar3;\n  uint uVar4;\n  section_offset_type offset;\n  vector<int,_std::allocator<int>_> local_28 [2];\n  \n  if ((this->zero_null_ == false) || (length != 0)) {\n    offset = this->offset_;\n    iVar2 = (int)this->addralign_;\n    if (*(int *)((int)&this->addralign_ + 4) != 0 || iVar2 != 0) {\n      offset = iVar2 + -1 + offset & -iVar2;\n    }\n    this->offset_ = length * 2 + 2 + offset;\n  }\n  else {\n    offset = 0;\n  }\n  pvVar3 = (this->key_to_offset_).chunks_.\n           super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n           ._M_impl._M_start;\n  uVar4 = (this->key_to_offset_).size_ >> 0xd;\n  if ((uint)(((int)(this->key_to_offset_).chunks_.\n                   super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n                   ._M_impl._M_finish - (int)pvVar3 >> 2) * -0x55555555) <= uVar4) {\n    local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_start = (pointer)0x0;\n    local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_finish = (pointer)0x0;\n    local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_end_of_storage =\n         (pointer)0x0;\n                    /* try { // try from 001744b3 to 001744b7 has its CatchHandler @ 001745a9 */\n    std::\n    vector<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n    ::emplace_back<std::vector<int,_std::allocator<int>_>_>\n              (&(this->key_to_offset_).chunks_,local_28);\n    if (local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_start != (pointer)0x0)\n    {\n      operator_delete(local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_start);\n    }\n    std::vector<int,_std::allocator<int>_>::reserve\n              ((this->key_to_offset_).chunks_.\n               super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n               ._M_impl._M_finish + -1,0x2000);\n    pvVar3 = (this->key_to_offset_).chunks_.\n             super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n             ._M_impl._M_start;\n    if ((uint)(((int)(this->key_to_offset_).chunks_.\n                     super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n                     ._M_impl._M_finish - (int)pvVar3 >> 2) * -0x55555555) <= uVar4) {\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/stringpool.h",0x8e,"push_back");\n    }\n  }\n  this_00 = pvVar3 + uVar4;\n  __position._M_current = (this_00->super__Vector_base<int,_std::allocator<int>_>)._M_impl._M_finish\n  ;\n  if (__position._M_current !=\n      (this_00->super__Vector_base<int,_std::allocator<int>_>)._M_impl._M_end_of_storage) {\n    *__position._M_current = offset;\n    (this_00->super__Vector_base<int,_std::allocator<int>_>)._M_impl._M_finish =\n         __position._M_current + 1;\n    psVar1 = &(this->key_to_offset_).size_;\n    *psVar1 = *psVar1 + 1;\n    return;\n  }\n  std::vector<int,_std::allocator<int>_>::_M_realloc_insert<int_const&>(this_00,__position,&offset);\n  psVar1 = &(this->key_to_offset_).size_;\n  *psVar1 = *psVar1 + 1;\n  return;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Stringpool_template<short_unsigned_int>::" identifier : : identifier < identifier > : :) (function_declarator "new_key_offset\n          (Stringpool_template<short_unsigned_int> *this,size_t length)" identifier (parameter_list "(Stringpool_template<short_unsigned_int> *this,size_t length)" ( (parameter_declaration "Stringpool_template<short_unsigned_int> *this" type_identifier (ERROR "<short_unsigned_int>" < identifier >) (pointer_declarator "*this" * identifier)) , (parameter_declaration "size_t length" primitive_type identifier) ))) (compound_statement "{\n  size_t *psVar1;\n  vector<int,_std::allocator<int>_> *this_00;\n  int iVar2;\n  iterator __position;\n  pointer pvVar3;\n  uint uVar4;\n  section_offset_type offset;\n  vector<int,_std::allocator<int>_> local_28 [2];\n  \n  if ((this->zero_null_ == false) || (length != 0)) {\n    offset = this->offset_;\n    iVar2 = (int)this->addralign_;\n    if (*(int *)((int)&this->addralign_ + 4) != 0 || iVar2 != 0) {\n      offset = iVar2 + -1 + offset & -iVar2;\n    }\n    this->offset_ = length * 2 + 2 + offset;\n  }\n  else {\n    offset = 0;\n  }\n  pvVar3 = (this->key_to_offset_).chunks_.\n           super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n           ._M_impl._M_start;\n  uVar4 = (this->key_to_offset_).size_ >> 0xd;\n  if ((uint)(((int)(this->key_to_offset_).chunks_.\n                   super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n                   ._M_impl._M_finish - (int)pvVar3 >> 2) * -0x55555555) <= uVar4) {\n    local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_start = (pointer)0x0;\n    local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_finish = (pointer)0x0;\n    local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_end_of_storage =\n         (pointer)0x0;\n                    /* try { // try from 001744b3 to 001744b7 has its CatchHandler @ 001745a9 */\n    std::\n    vector<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n    ::emplace_back<std::vector<int,_std::allocator<int>_>_>\n              (&(this->key_to_offset_).chunks_,local_28);\n    if (local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_start != (pointer)0x0)\n    {\n      operator_delete(local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_start);\n    }\n    std::vector<int,_std::allocator<int>_>::reserve\n              ((this->key_to_offset_).chunks_.\n               super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n               ._M_impl._M_finish + -1,0x2000);\n    pvVar3 = (this->key_to_offset_).chunks_.\n             super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n             ._M_impl._M_start;\n    if ((uint)(((int)(this->key_to_offset_).chunks_.\n                     super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n                     ._M_impl._M_finish - (int)pvVar3 >> 2) * -0x55555555) <= uVar4) {\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/stringpool.h",0x8e,"push_back");\n    }\n  }\n  this_00 = pvVar3 + uVar4;\n  __position._M_current = (this_00->super__Vector_base<int,_std::allocator<int>_>)._M_impl._M_finish\n  ;\n  if (__position._M_current !=\n      (this_00->super__Vector_base<int,_std::allocator<int>_>)._M_impl._M_end_of_storage) {\n    *__position._M_current = offset;\n    (this_00->super__Vector_base<int,_std::allocator<int>_>)._M_impl._M_finish =\n         __position._M_current + 1;\n    psVar1 = &(this->key_to_offset_).size_;\n    *psVar1 = *psVar1 + 1;\n    return;\n  }\n  std::vector<int,_std::allocator<int>_>::_M_realloc_insert<int_const&>(this_00,__position,&offset);\n  psVar1 = &(this->key_to_offset_).size_;\n  *psVar1 = *psVar1 + 1;\n  return;\n}" { (declaration "size_t *psVar1;" primitive_type (pointer_declarator "*psVar1" * identifier) ;) (ERROR "vector<int,_std::" (comma_expression "vector<int,_std" (binary_expression "vector<int" identifier < identifier) , identifier) : :) (expression_statement "allocator<int>_> *this_00;" (binary_expression "allocator<int>_> *this_00" (binary_expression "allocator<int>_" (binary_expression "allocator<int" identifier < identifier) > identifier) > (pointer_expression "*this_00" * identifier)) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "iterator __position;" type_identifier identifier ;) (declaration "pointer pvVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "section_offset_type offset;" type_identifier identifier ;) (ERROR "vector<int,_std::" (comma_expression "vector<int,_std" (binary_expression "vector<int" identifier < identifier) , identifier) : :) (expression_statement "allocator<int>_> local_28 [2];" (binary_expression "allocator<int>_> local_28 [2]" (binary_expression "allocator<int>_" (binary_expression "allocator<int" identifier < identifier) > identifier) > (subscript_expression "local_28 [2]" identifier [ number_literal ])) ;) (if_statement "if ((this->zero_null_ == false) || (length != 0)) {\n    offset = this->offset_;\n    iVar2 = (int)this->addralign_;\n    if (*(int *)((int)&this->addralign_ + 4) != 0 || iVar2 != 0) {\n      offset = iVar2 + -1 + offset & -iVar2;\n    }\n    this->offset_ = length * 2 + 2 + offset;\n  }\n  else {\n    offset = 0;\n  }" if (parenthesized_expression "((this->zero_null_ == false) || (length != 0))" ( (binary_expression "(this->zero_null_ == false) || (length != 0)" (parenthesized_expression "(this->zero_null_ == false)" ( (binary_expression "this->zero_null_ == false" (field_expression "this->zero_null_" identifier -> field_identifier) == false) )) || (parenthesized_expression "(length != 0)" ( (binary_expression "length != 0" identifier != number_literal) ))) )) (compound_statement "{\n    offset = this->offset_;\n    iVar2 = (int)this->addralign_;\n    if (*(int *)((int)&this->addralign_ + 4) != 0 || iVar2 != 0) {\n      offset = iVar2 + -1 + offset & -iVar2;\n    }\n    this->offset_ = length * 2 + 2 + offset;\n  }" { (expression_statement "offset = this->offset_;" (assignment_expression "offset = this->offset_" identifier = (field_expression "this->offset_" identifier -> field_identifier)) ;) (expression_statement "iVar2 = (int)this->addralign_;" (assignment_expression "iVar2 = (int)this->addralign_" identifier = (cast_expression "(int)this->addralign_" ( (type_descriptor "int" primitive_type) ) (field_expression "this->addralign_" identifier -> field_identifier))) ;) (if_statement "if (*(int *)((int)&this->addralign_ + 4) != 0 || iVar2 != 0) {\n      offset = iVar2 + -1 + offset & -iVar2;\n    }" if (parenthesized_expression "(*(int *)((int)&this->addralign_ + 4) != 0 || iVar2 != 0)" ( (binary_expression "*(int *)((int)&this->addralign_ + 4) != 0 || iVar2 != 0" (binary_expression "*(int *)((int)&this->addralign_ + 4) != 0" (pointer_expression "*(int *)((int)&this->addralign_ + 4)" * (cast_expression "(int *)((int)&this->addralign_ + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&this->addralign_ + 4)" ( (binary_expression "(int)&this->addralign_ + 4" (cast_expression "(int)&this->addralign_" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&this->addralign_" & (field_expression "this->addralign_" identifier -> field_identifier))) + number_literal) )))) != number_literal) || (binary_expression "iVar2 != 0" identifier != number_literal)) )) (compound_statement "{\n      offset = iVar2 + -1 + offset & -iVar2;\n    }" { (expression_statement "offset = iVar2 + -1 + offset & -iVar2;" (assignment_expression "offset = iVar2 + -1 + offset & -iVar2" identifier = (binary_expression "iVar2 + -1 + offset & -iVar2" (binary_expression "iVar2 + -1 + offset" (binary_expression "iVar2 + -1" identifier + number_literal) + identifier) & (unary_expression "-iVar2" - identifier))) ;) })) (expression_statement "this->offset_ = length * 2 + 2 + offset;" (assignment_expression "this->offset_ = length * 2 + 2 + offset" (field_expression "this->offset_" identifier -> field_identifier) = (binary_expression "length * 2 + 2 + offset" (binary_expression "length * 2 + 2" (binary_expression "length * 2" identifier * number_literal) + number_literal) + identifier)) ;) }) (else_clause "else {\n    offset = 0;\n  }" else (compound_statement "{\n    offset = 0;\n  }" { (expression_statement "offset = 0;" (assignment_expression "offset = 0" identifier = number_literal) ;) }))) (ERROR "pvVar3 = (this->key_to_offset_).chunks_.\n           super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::" (comma_expression "pvVar3 = (this->key_to_offset_).chunks_.\n           super__Vector_base<std::vector<int,_std" (binary_expression "pvVar3 = (this->key_to_offset_).chunks_.\n           super__Vector_base<std::vector<int" (assignment_expression "pvVar3 = (this->key_to_offset_).chunks_.\n           super__Vector_base<std" identifier = (binary_expression "(this->key_to_offset_).chunks_.\n           super__Vector_base<std" (field_expression "(this->key_to_offset_).chunks_.\n           super__Vector_base" (field_expression "(this->key_to_offset_).chunks_" (parenthesized_expression "(this->key_to_offset_)" ( (field_expression "this->key_to_offset_" identifier -> field_identifier) )) . field_identifier) . field_identifier) < identifier)) (ERROR "::vector" : : identifier) < identifier) , identifier) : : (binary_expression "allocator<int>_>,_std" (binary_expression "allocator<int>_" (binary_expression "allocator<int" identifier < identifier) > identifier) > (ERROR "," ,) identifier) : : (binary_expression "allocator<std" identifier < identifier) : : (comma_expression "vector<int,_std" (binary_expression "vector<int" identifier < identifier) , identifier) : :) (expression_statement "allocator<int>_>_>_>\n           ._M_impl._M_start;" (field_expression "allocator<int>_>_>_>\n           ._M_impl._M_start" (field_expression "allocator<int>_>_>_>\n           ._M_impl" (binary_expression "allocator<int>_>_>_" (binary_expression "allocator<int>_>_" (binary_expression "allocator<int>_" (binary_expression "allocator<int" identifier < identifier) > identifier) > identifier) > identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;) (expression_statement "uVar4 = (this->key_to_offset_).size_ >> 0xd;" (assignment_expression "uVar4 = (this->key_to_offset_).size_ >> 0xd" identifier = (binary_expression "(this->key_to_offset_).size_ >> 0xd" (field_expression "(this->key_to_offset_).size_" (parenthesized_expression "(this->key_to_offset_)" ( (field_expression "this->key_to_offset_" identifier -> field_identifier) )) . field_identifier) >> number_literal)) ;) (if_statement "if ((uint)(((int)(this->key_to_offset_).chunks_.\n                   super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n                   ._M_impl._M_finish - (int)pvVar3 >> 2) * -0x55555555) <= uVar4) {\n    local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_start = (pointer)0x0;\n    local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_finish = (pointer)0x0;\n    local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_end_of_storage =\n         (pointer)0x0;\n                    /* try { // try from 001744b3 to 001744b7 has its CatchHandler @ 001745a9 */\n    std::\n    vector<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n    ::emplace_back<std::vector<int,_std::allocator<int>_>_>\n              (&(this->key_to_offset_).chunks_,local_28);\n    if (local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_start != (pointer)0x0)\n    {\n      operator_delete(local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_start);\n    }\n    std::vector<int,_std::allocator<int>_>::reserve\n              ((this->key_to_offset_).chunks_.\n               super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n               ._M_impl._M_finish + -1,0x2000);\n    pvVar3 = (this->key_to_offset_).chunks_.\n             super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n             ._M_impl._M_start;\n    if ((uint)(((int)(this->key_to_offset_).chunks_.\n                     super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n                     ._M_impl._M_finish - (int)pvVar3 >> 2) * -0x55555555) <= uVar4) {\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/stringpool.h",0x8e,"push_back");\n    }\n  }" if (parenthesized_expression "((uint)(((int)(this->key_to_offset_).chunks_.\n                   super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n                   ._M_impl._M_finish - (int)pvVar3 >> 2) * -0x55555555) <= uVar4)" ( (binary_expression "(uint)(((int)(this->key_to_offset_).chunks_.\n                   super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n                   ._M_impl._M_finish - (int)pvVar3 >> 2) * -0x55555555) <= uVar4" (call_expression "(uint)(((int)(this->key_to_offset_).chunks_.\n                   super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n                   ._M_impl._M_finish - (int)pvVar3 >> 2) * -0x55555555)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(((int)(this->key_to_offset_).chunks_.\n                   super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n                   ._M_impl._M_finish - (int)pvVar3 >> 2) * -0x55555555)" ( (binary_expression "((int)(this->key_to_offset_).chunks_.\n                   super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n                   ._M_impl._M_finish - (int)pvVar3 >> 2) * -0x55555555" (parenthesized_expression "((int)(this->key_to_offset_).chunks_.\n                   super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n                   ._M_impl._M_finish - (int)pvVar3 >> 2)" ( (ERROR "(int)(this->key_to_offset_).chunks_.\n                   super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::" (comma_expression "(int)(this->key_to_offset_).chunks_.\n                   super__Vector_base<std::vector<int,_std" (binary_expression "(int)(this->key_to_offset_).chunks_.\n                   super__Vector_base<std::vector<int" (binary_expression "(int)(this->key_to_offset_).chunks_.\n                   super__Vector_base<std" (cast_expression "(int)(this->key_to_offset_).chunks_.\n                   super__Vector_base" ( (type_descriptor "int" primitive_type) ) (field_expression "(this->key_to_offset_).chunks_.\n                   super__Vector_base" (field_expression "(this->key_to_offset_).chunks_" (parenthesized_expression "(this->key_to_offset_)" ( (field_expression "this->key_to_offset_" identifier -> field_identifier) )) . field_identifier) . field_identifier)) < identifier) (ERROR "::vector" : : identifier) < identifier) , identifier) : : (binary_expression "allocator<int>_>,_std" (binary_expression "allocator<int>_" (binary_expression "allocator<int" identifier < identifier) > identifier) > (ERROR "," ,) identifier) : : (binary_expression "allocator<std" identifier < identifier) : : (comma_expression "vector<int,_std" (binary_expression "vector<int" identifier < identifier) , identifier) : :) (binary_expression "allocator<int>_>_>_>\n                   ._M_impl._M_finish - (int)pvVar3 >> 2" (binary_expression "allocator<int>_>_>_>\n                   ._M_impl._M_finish - (int)pvVar3" (field_expression "allocator<int>_>_>_>\n                   ._M_impl._M_finish" (field_expression "allocator<int>_>_>_>\n                   ._M_impl" (binary_expression "allocator<int>_>_>_" (binary_expression "allocator<int>_>_" (binary_expression "allocator<int>_" (binary_expression "allocator<int" identifier < identifier) > identifier) > identifier) > identifier) (ERROR ">" >) . field_identifier) . field_identifier) - (cast_expression "(int)pvVar3" ( (type_descriptor "int" primitive_type) ) identifier)) >> number_literal) )) * number_literal) ))) <= identifier) )) (compound_statement "{\n    local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_start = (pointer)0x0;\n    local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_finish = (pointer)0x0;\n    local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_end_of_storage =\n         (pointer)0x0;\n                    /* try { // try from 001744b3 to 001744b7 has its CatchHandler @ 001745a9 */\n    std::\n    vector<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n    ::emplace_back<std::vector<int,_std::allocator<int>_>_>\n              (&(this->key_to_offset_).chunks_,local_28);\n    if (local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_start != (pointer)0x0)\n    {\n      operator_delete(local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_start);\n    }\n    std::vector<int,_std::allocator<int>_>::reserve\n              ((this->key_to_offset_).chunks_.\n               super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n               ._M_impl._M_finish + -1,0x2000);\n    pvVar3 = (this->key_to_offset_).chunks_.\n             super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n             ._M_impl._M_start;\n    if ((uint)(((int)(this->key_to_offset_).chunks_.\n                     super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n                     ._M_impl._M_finish - (int)pvVar3 >> 2) * -0x55555555) <= uVar4) {\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/stringpool.h",0x8e,"push_back");\n    }\n  }" { (ERROR "local_28[0].super__Vector_base<int,_std::" (comma_expression "local_28[0].super__Vector_base<int,_std" (binary_expression "local_28[0].super__Vector_base<int" (field_expression "local_28[0].super__Vector_base" (subscript_expression "local_28[0]" identifier [ number_literal ]) . field_identifier) < identifier) , identifier) : :) (expression_statement "allocator<int>_>._M_impl._M_start = (pointer)0x0;" (assignment_expression "allocator<int>_>._M_impl._M_start = (pointer)0x0" (field_expression "allocator<int>_>._M_impl._M_start" (field_expression "allocator<int>_>._M_impl" (binary_expression "allocator<int>_" (binary_expression "allocator<int" identifier < identifier) > identifier) (ERROR ">" >) . field_identifier) . field_identifier) = (cast_expression "(pointer)0x0" ( (type_descriptor "pointer" type_identifier) ) number_literal)) ;) (ERROR "local_28[0].super__Vector_base<int,_std::" (comma_expression "local_28[0].super__Vector_base<int,_std" (binary_expression "local_28[0].super__Vector_base<int" (field_expression "local_28[0].super__Vector_base" (subscript_expression "local_28[0]" identifier [ number_literal ]) . field_identifier) < identifier) , identifier) : :) (expression_statement "allocator<int>_>._M_impl._M_finish = (pointer)0x0;" (assignment_expression "allocator<int>_>._M_impl._M_finish = (pointer)0x0" (field_expression "allocator<int>_>._M_impl._M_finish" (field_expression "allocator<int>_>._M_impl" (binary_expression "allocator<int>_" (binary_expression "allocator<int" identifier < identifier) > identifier) (ERROR ">" >) . field_identifier) . field_identifier) = (cast_expression "(pointer)0x0" ( (type_descriptor "pointer" type_identifier) ) number_literal)) ;) (ERROR "local_28[0].super__Vector_base<int,_std::" (comma_expression "local_28[0].super__Vector_base<int,_std" (binary_expression "local_28[0].super__Vector_base<int" (field_expression "local_28[0].super__Vector_base" (subscript_expression "local_28[0]" identifier [ number_literal ]) . field_identifier) < identifier) , identifier) : :) (expression_statement "allocator<int>_>._M_impl._M_end_of_storage =\n         (pointer)0x0;" (assignment_expression "allocator<int>_>._M_impl._M_end_of_storage =\n         (pointer)0x0" (field_expression "allocator<int>_>._M_impl._M_end_of_storage" (field_expression "allocator<int>_>._M_impl" (binary_expression "allocator<int>_" (binary_expression "allocator<int" identifier < identifier) > identifier) (ERROR ">" >) . field_identifier) . field_identifier) = (cast_expression "(pointer)0x0" ( (type_descriptor "pointer" type_identifier) ) number_literal)) ;) comment (ERROR "std::\n    vector<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n    ::emplace_back<std::vector<int,_std::" (comma_expression "std::\n    vector<std::vector<int,_std::allocator<int>_>,_std" identifier (ERROR "::\n    vector<std::vector<int,_std::allocator<int>_>" : : (binary_expression "vector<std" identifier < identifier) : : (comma_expression "vector<int,_std" (binary_expression "vector<int" identifier < identifier) , identifier) : : (binary_expression "allocator<int>_" (binary_expression "allocator<int" identifier < identifier) > identifier) >) , identifier) : : (binary_expression "allocator<std" identifier < identifier) : : (comma_expression "vector<int,_std" (binary_expression "vector<int" identifier < identifier) , identifier) : : (binary_expression "allocator<int>_>_>_>\n    ::emplace_back<std" (binary_expression "allocator<int>_>_>_>\n    ::emplace_back" (binary_expression "allocator<int>_>_>_" (binary_expression "allocator<int>_>_" (binary_expression "allocator<int>_" (binary_expression "allocator<int" identifier < identifier) > identifier) > identifier) > identifier) > (ERROR "::" : :) identifier) < identifier) : : (comma_expression "vector<int,_std" (binary_expression "vector<int" identifier < identifier) , identifier) : :) (expression_statement "allocator<int>_>_>\n              (&(this->key_to_offset_).chunks_,local_28);" (binary_expression "allocator<int>_>_>\n              (&(this->key_to_offset_).chunks_,local_28)" (binary_expression "allocator<int>_>_" (binary_expression "allocator<int>_" (binary_expression "allocator<int" identifier < identifier) > identifier) > identifier) > (parenthesized_expression "(&(this->key_to_offset_).chunks_,local_28)" ( (comma_expression "&(this->key_to_offset_).chunks_,local_28" (pointer_expression "&(this->key_to_offset_).chunks_" & (field_expression "(this->key_to_offset_).chunks_" (parenthesized_expression "(this->key_to_offset_)" ( (field_expression "this->key_to_offset_" identifier -> field_identifier) )) . field_identifier)) , identifier) ))) ;) (if_statement "if (local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_start != (pointer)0x0)\n    {\n      operator_delete(local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_start);\n    }" if (parenthesized_expression "(local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_start != (pointer)0x0)" ( (ERROR "local_28[0].super__Vector_base<int,_std::" (comma_expression "local_28[0].super__Vector_base<int,_std" (binary_expression "local_28[0].super__Vector_base<int" (field_expression "local_28[0].super__Vector_base" (subscript_expression "local_28[0]" identifier [ number_literal ]) . field_identifier) < identifier) , identifier) : :) (binary_expression "allocator<int>_>._M_impl._M_start != (pointer)0x0" (field_expression "allocator<int>_>._M_impl._M_start" (field_expression "allocator<int>_>._M_impl" (binary_expression "allocator<int>_" (binary_expression "allocator<int" identifier < identifier) > identifier) (ERROR ">" >) . field_identifier) . field_identifier) != (cast_expression "(pointer)0x0" ( (type_descriptor "pointer" type_identifier) ) number_literal)) )) (compound_statement "{\n      operator_delete(local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_start);\n    }" { (expression_statement "operator_delete(local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_start);" (call_expression "operator_delete(local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_start)" identifier (argument_list "(local_28[0].super__Vector_base<int,_std::allocator<int>_>._M_impl._M_start)" ( (binary_expression "local_28[0].super__Vector_base<int" (field_expression "local_28[0].super__Vector_base" (subscript_expression "local_28[0]" identifier [ number_literal ]) . field_identifier) < identifier) , (ERROR "_std::" identifier : :) (field_expression "allocator<int>_>._M_impl._M_start" (field_expression "allocator<int>_>._M_impl" (binary_expression "allocator<int>_" (binary_expression "allocator<int" identifier < identifier) > identifier) (ERROR ">" >) . field_identifier) . field_identifier) ))) ;) })) (ERROR "std::vector<int,_std::allocator<int>_>::reserve\n              ((this->key_to_offset_).chunks_.\n               super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::" (comma_expression "std::vector<int,_std::allocator<int>_>::reserve\n              ((this->key_to_offset_).chunks_.\n               super__Vector_base<std::vector<int,_std::allocator<int>_>,_std" identifier (ERROR "::vector<int,_std::allocator<int>_>::reserve\n              ((this->key_to_offset_).chunks_.\n               super__Vector_base<std::vector<int,_std::allocator<int>_>" : : (comma_expression "vector<int,_std" (binary_expression "vector<int" identifier < identifier) , identifier) : : (binary_expression "allocator<int>_" (binary_expression "allocator<int" identifier < identifier) > identifier) > : : identifier ( (binary_expression "(this->key_to_offset_).chunks_.\n               super__Vector_base<std" (field_expression "(this->key_to_offset_).chunks_.\n               super__Vector_base" (field_expression "(this->key_to_offset_).chunks_" (parenthesized_expression "(this->key_to_offset_)" ( (field_expression "this->key_to_offset_" identifier -> field_identifier) )) . field_identifier) . field_identifier) < identifier) : : (comma_expression "vector<int,_std" (binary_expression "vector<int" identifier < identifier) , identifier) : : (binary_expression "allocator<int>_" (binary_expression "allocator<int" identifier < identifier) > identifier) >) , identifier) : : identifier < identifier : : (comma_expression "vector<int,_std" (binary_expression "vector<int" identifier < identifier) , identifier) : :) (expression_statement "allocator<int>_>_>_>\n               ._M_impl._M_finish + -1,0x2000);" (comma_expression "allocator<int>_>_>_>\n               ._M_impl._M_finish + -1,0x2000" (binary_expression "allocator<int>_>_>_>\n               ._M_impl._M_finish + -1" (field_expression "allocator<int>_>_>_>\n               ._M_impl._M_finish" (field_expression "allocator<int>_>_>_>\n               ._M_impl" (binary_expression "allocator<int>_>_>_" (binary_expression "allocator<int>_>_" (binary_expression "allocator<int>_" (binary_expression "allocator<int" identifier < identifier) > identifier) > identifier) > identifier) (ERROR ">" >) . field_identifier) . field_identifier) + number_literal) , number_literal) (ERROR ")" )) ;) (ERROR "pvVar3 = (this->key_to_offset_).chunks_.\n             super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::" (comma_expression "pvVar3 = (this->key_to_offset_).chunks_.\n             super__Vector_base<std::vector<int,_std" (binary_expression "pvVar3 = (this->key_to_offset_).chunks_.\n             super__Vector_base<std::vector<int" (assignment_expression "pvVar3 = (this->key_to_offset_).chunks_.\n             super__Vector_base<std" identifier = (binary_expression "(this->key_to_offset_).chunks_.\n             super__Vector_base<std" (field_expression "(this->key_to_offset_).chunks_.\n             super__Vector_base" (field_expression "(this->key_to_offset_).chunks_" (parenthesized_expression "(this->key_to_offset_)" ( (field_expression "this->key_to_offset_" identifier -> field_identifier) )) . field_identifier) . field_identifier) < identifier)) (ERROR "::vector" : : identifier) < identifier) , identifier) : : (binary_expression "allocator<int>_>,_std" (binary_expression "allocator<int>_" (binary_expression "allocator<int" identifier < identifier) > identifier) > (ERROR "," ,) identifier) : : (binary_expression "allocator<std" identifier < identifier) : : (comma_expression "vector<int,_std" (binary_expression "vector<int" identifier < identifier) , identifier) : :) (expression_statement "allocator<int>_>_>_>\n             ._M_impl._M_start;" (field_expression "allocator<int>_>_>_>\n             ._M_impl._M_start" (field_expression "allocator<int>_>_>_>\n             ._M_impl" (binary_expression "allocator<int>_>_>_" (binary_expression "allocator<int>_>_" (binary_expression "allocator<int>_" (binary_expression "allocator<int" identifier < identifier) > identifier) > identifier) > identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;) (if_statement "if ((uint)(((int)(this->key_to_offset_).chunks_.\n                     super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n                     ._M_impl._M_finish - (int)pvVar3 >> 2) * -0x55555555) <= uVar4) {\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/stringpool.h",0x8e,"push_back");\n    }" if (parenthesized_expression "((uint)(((int)(this->key_to_offset_).chunks_.\n                     super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n                     ._M_impl._M_finish - (int)pvVar3 >> 2) * -0x55555555) <= uVar4)" ( (binary_expression "(uint)(((int)(this->key_to_offset_).chunks_.\n                     super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n                     ._M_impl._M_finish - (int)pvVar3 >> 2) * -0x55555555) <= uVar4" (call_expression "(uint)(((int)(this->key_to_offset_).chunks_.\n                     super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n                     ._M_impl._M_finish - (int)pvVar3 >> 2) * -0x55555555)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(((int)(this->key_to_offset_).chunks_.\n                     super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n                     ._M_impl._M_finish - (int)pvVar3 >> 2) * -0x55555555)" ( (binary_expression "((int)(this->key_to_offset_).chunks_.\n                     super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n                     ._M_impl._M_finish - (int)pvVar3 >> 2) * -0x55555555" (parenthesized_expression "((int)(this->key_to_offset_).chunks_.\n                     super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::allocator<int>_>_>_>\n                     ._M_impl._M_finish - (int)pvVar3 >> 2)" ( (ERROR "(int)(this->key_to_offset_).chunks_.\n                     super__Vector_base<std::vector<int,_std::allocator<int>_>,_std::allocator<std::vector<int,_std::" (comma_expression "(int)(this->key_to_offset_).chunks_.\n                     super__Vector_base<std::vector<int,_std" (binary_expression "(int)(this->key_to_offset_).chunks_.\n                     super__Vector_base<std::vector<int" (binary_expression "(int)(this->key_to_offset_).chunks_.\n                     super__Vector_base<std" (cast_expression "(int)(this->key_to_offset_).chunks_.\n                     super__Vector_base" ( (type_descriptor "int" primitive_type) ) (field_expression "(this->key_to_offset_).chunks_.\n                     super__Vector_base" (field_expression "(this->key_to_offset_).chunks_" (parenthesized_expression "(this->key_to_offset_)" ( (field_expression "this->key_to_offset_" identifier -> field_identifier) )) . field_identifier) . field_identifier)) < identifier) (ERROR "::vector" : : identifier) < identifier) , identifier) : : (binary_expression "allocator<int>_>,_std" (binary_expression "allocator<int>_" (binary_expression "allocator<int" identifier < identifier) > identifier) > (ERROR "," ,) identifier) : : (binary_expression "allocator<std" identifier < identifier) : : (comma_expression "vector<int,_std" (binary_expression "vector<int" identifier < identifier) , identifier) : :) (binary_expression "allocator<int>_>_>_>\n                     ._M_impl._M_finish - (int)pvVar3 >> 2" (binary_expression "allocator<int>_>_>_>\n                     ._M_impl._M_finish - (int)pvVar3" (field_expression "allocator<int>_>_>_>\n                     ._M_impl._M_finish" (field_expression "allocator<int>_>_>_>\n                     ._M_impl" (binary_expression "allocator<int>_>_>_" (binary_expression "allocator<int>_>_" (binary_expression "allocator<int>_" (binary_expression "allocator<int" identifier < identifier) > identifier) > identifier) > identifier) (ERROR ">" >) . field_identifier) . field_identifier) - (cast_expression "(int)pvVar3" ( (type_descriptor "int" primitive_type) ) identifier)) >> number_literal) )) * number_literal) ))) <= identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n      do_gold_unreachable("../../gold/stringpool.h",0x8e,"push_back");\n    }" { comment (expression_statement "do_gold_unreachable("../../gold/stringpool.h",0x8e,"push_back");" (call_expression "do_gold_unreachable("../../gold/stringpool.h",0x8e,"push_back")" identifier (argument_list "("../../gold/stringpool.h",0x8e,"push_back")" ( (string_literal ""../../gold/stringpool.h"" " string_content ") , number_literal , (string_literal ""push_back"" " string_content ") ))) ;) })) })) (expression_statement "this_00 = pvVar3 + uVar4;" (assignment_expression "this_00 = pvVar3 + uVar4" identifier = (binary_expression "pvVar3 + uVar4" identifier + identifier)) ;) (expression_statement "__position._M_current = (this_00->super__Vector_base<int,_std::allocator<int>_>)._M_impl._M_finish\n  ;" (assignment_expression "__position._M_current = (this_00->super__Vector_base<int,_std::allocator<int>_>)._M_impl._M_finish" (field_expression "__position._M_current" identifier . field_identifier) = (field_expression "(this_00->super__Vector_base<int,_std::allocator<int>_>)._M_impl._M_finish" (field_expression "(this_00->super__Vector_base<int,_std::allocator<int>_>)._M_impl" (parenthesized_expression "(this_00->super__Vector_base<int,_std::allocator<int>_>)" ( (ERROR "this_00->super__Vector_base<int,_std::" (comma_expression "this_00->super__Vector_base<int,_std" (binary_expression "this_00->super__Vector_base<int" (field_expression "this_00->super__Vector_base" identifier -> field_identifier) < identifier) , identifier) : :) (binary_expression "allocator<int>_>" (binary_expression "allocator<int>_" (binary_expression "allocator<int" identifier < identifier) > identifier) > identifier) )) . field_identifier) . field_identifier)) ;) (if_statement "if (__position._M_current !=\n      (this_00->super__Vector_base<int,_std::allocator<int>_>)._M_impl._M_end_of_storage) {\n    *__position._M_current = offset;\n    (this_00->super__Vector_base<int,_std::allocator<int>_>)._M_impl._M_finish =\n         __position._M_current + 1;\n    psVar1 = &(this->key_to_offset_).size_;\n    *psVar1 = *psVar1 + 1;\n    return;\n  }" if (parenthesized_expression "(__position._M_current !=\n      (this_00->super__Vector_base<int,_std::allocator<int>_>)._M_impl._M_end_of_storage)" ( (binary_expression "__position._M_current !=\n      (this_00->super__Vector_base<int,_std::allocator<int>_>)._M_impl._M_end_of_storage" (field_expression "__position._M_current" identifier . field_identifier) != (field_expression "(this_00->super__Vector_base<int,_std::allocator<int>_>)._M_impl._M_end_of_storage" (field_expression "(this_00->super__Vector_base<int,_std::allocator<int>_>)._M_impl" (parenthesized_expression "(this_00->super__Vector_base<int,_std::allocator<int>_>)" ( (ERROR "this_00->super__Vector_base<int,_std::" (comma_expression "this_00->super__Vector_base<int,_std" (binary_expression "this_00->super__Vector_base<int" (field_expression "this_00->super__Vector_base" identifier -> field_identifier) < identifier) , identifier) : :) (binary_expression "allocator<int>_>" (binary_expression "allocator<int>_" (binary_expression "allocator<int" identifier < identifier) > identifier) > identifier) )) . field_identifier) . field_identifier)) )) (compound_statement "{\n    *__position._M_current = offset;\n    (this_00->super__Vector_base<int,_std::allocator<int>_>)._M_impl._M_finish =\n         __position._M_current + 1;\n    psVar1 = &(this->key_to_offset_).size_;\n    *psVar1 = *psVar1 + 1;\n    return;\n  }" { (expression_statement "*__position._M_current = offset;" (assignment_expression "*__position._M_current = offset" (pointer_expression "*__position._M_current" * (field_expression "__position._M_current" identifier . field_identifier)) = identifier) ;) (expression_statement "(this_00->super__Vector_base<int,_std::allocator<int>_>)._M_impl._M_finish =\n         __position._M_current + 1;" (assignment_expression "(this_00->super__Vector_base<int,_std::allocator<int>_>)._M_impl._M_finish =\n         __position._M_current + 1" (field_expression "(this_00->super__Vector_base<int,_std::allocator<int>_>)._M_impl._M_finish" (field_expression "(this_00->super__Vector_base<int,_std::allocator<int>_>)._M_impl" (parenthesized_expression "(this_00->super__Vector_base<int,_std::allocator<int>_>)" ( (ERROR "this_00->super__Vector_base<int,_std::" (comma_expression "this_00->super__Vector_base<int,_std" (binary_expression "this_00->super__Vector_base<int" (field_expression "this_00->super__Vector_base" identifier -> field_identifier) < identifier) , identifier) : :) (binary_expression "allocator<int>_>" (binary_expression "allocator<int>_" (binary_expression "allocator<int" identifier < identifier) > identifier) > identifier) )) . field_identifier) . field_identifier) = (binary_expression "__position._M_current + 1" (field_expression "__position._M_current" identifier . field_identifier) + number_literal)) ;) (expression_statement "psVar1 = &(this->key_to_offset_).size_;" (assignment_expression "psVar1 = &(this->key_to_offset_).size_" identifier = (pointer_expression "&(this->key_to_offset_).size_" & (field_expression "(this->key_to_offset_).size_" (parenthesized_expression "(this->key_to_offset_)" ( (field_expression "this->key_to_offset_" identifier -> field_identifier) )) . field_identifier))) ;) (expression_statement "*psVar1 = *psVar1 + 1;" (assignment_expression "*psVar1 = *psVar1 + 1" (pointer_expression "*psVar1" * identifier) = (binary_expression "*psVar1 + 1" (pointer_expression "*psVar1" * identifier) + number_literal)) ;) (return_statement "return;" return ;) })) (labeled_statement "std::vector<int,_std::allocator<int>_>::_M_realloc_insert<int_const&>(this_00,__position,&offset);" statement_identifier (ERROR "::vector<int,_std::allocator<int>_>:" : : (comma_expression "vector<int,_std" (binary_expression "vector<int" identifier < identifier) , identifier) : : (binary_expression "allocator<int>_" (binary_expression "allocator<int" identifier < identifier) > identifier) > :) : (expression_statement "_M_realloc_insert<int_const&>(this_00,__position,&offset);" (binary_expression "_M_realloc_insert<int_const&>(this_00,__position,&offset)" (binary_expression "_M_realloc_insert<int_const" identifier < identifier) (ERROR "&" &) > (parenthesized_expression "(this_00,__position,&offset)" ( (comma_expression "this_00,__position,&offset" identifier , (comma_expression "__position,&offset" identifier , (pointer_expression "&offset" & identifier))) ))) ;)) (expression_statement "psVar1 = &(this->key_to_offset_).size_;" (assignment_expression "psVar1 = &(this->key_to_offset_).size_" identifier = (pointer_expression "&(this->key_to_offset_).size_" & (field_expression "(this->key_to_offset_).size_" (parenthesized_expression "(this->key_to_offset_)" ( (field_expression "this->key_to_offset_" identifier -> field_identifier) )) . field_identifier))) ;) (expression_statement "*psVar1 = *psVar1 + 1;" (assignment_expression "*psVar1 = *psVar1 + 1" (pointer_expression "*psVar1" * identifier) = (binary_expression "*psVar1 + 1" (pointer_expression "*psVar1" * identifier) + number_literal)) ;) (return_statement "return;" return ;) })))
(translation_unit "void FUN_00174420(int param_1,int param_2)\n\n{\n  uint *puVar1;\n  uint uVar2;\n  int iVar3;\n  uint uVar4;\n  uint local_2c;\n  int local_28 [6];\n  \n  if ((*(char *)(param_1 + 0x3c) == '\0') || (param_2 != 0)) {\n    local_2c = *(uint *)(param_1 + 0x40);\n    iVar3 = *(int *)(param_1 + 0x44);\n    if (*(int *)(param_1 + 0x48) != 0 || iVar3 != 0) {\n      local_2c = iVar3 + -1 + local_2c & -iVar3;\n    }\n    *(uint *)(param_1 + 0x40) = param_2 * 2 + 2 + local_2c;\n  }\n  else {\n    local_2c = 0;\n  }\n  iVar3 = *(int *)(param_1 + 0x1c);\n  uVar4 = *(uint *)(param_1 + 0x28) >> 0xd;\n  if ((uint)((*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555) <= uVar4) {\n    local_28[0] = 0;\n    local_28[1] = 0;\n    local_28[2] = 0;\n                    \n    FUN_001743a0(param_1 + 0x1c,local_28);\n    if (local_28[0] != 0) {\n      FUN_001e6db0(local_28[0]);\n    }\n    FUN_00172ad0(*(int *)(param_1 + 0x20) + -0xc,0x2000);\n    iVar3 = *(int *)(param_1 + 0x1c);\n    uVar2 = (*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555;\n    if (uVar2 <= uVar4) {\n                    \n      FUN_00069d00("../../gold/stringpool.h",0x8e,"push_back",uVar2);\n    }\n  }\n  iVar3 = iVar3 + uVar4 * 0xc;\n  puVar1 = *(uint **)(iVar3 + 4);\n  if (puVar1 != *(uint **)(iVar3 + 8)) {\n    *puVar1 = local_2c;\n    *(uint **)(iVar3 + 4) = puVar1 + 1;\n    *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;\n    return;\n  }\n  FUN_0014ec40(iVar3,puVar1,&local_2c);\n  *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;\n  return;\n}\n\n" (function_definition "void FUN_00174420(int param_1,int param_2)\n\n{\n  uint *puVar1;\n  uint uVar2;\n  int iVar3;\n  uint uVar4;\n  uint local_2c;\n  int local_28 [6];\n  \n  if ((*(char *)(param_1 + 0x3c) == '\0') || (param_2 != 0)) {\n    local_2c = *(uint *)(param_1 + 0x40);\n    iVar3 = *(int *)(param_1 + 0x44);\n    if (*(int *)(param_1 + 0x48) != 0 || iVar3 != 0) {\n      local_2c = iVar3 + -1 + local_2c & -iVar3;\n    }\n    *(uint *)(param_1 + 0x40) = param_2 * 2 + 2 + local_2c;\n  }\n  else {\n    local_2c = 0;\n  }\n  iVar3 = *(int *)(param_1 + 0x1c);\n  uVar4 = *(uint *)(param_1 + 0x28) >> 0xd;\n  if ((uint)((*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555) <= uVar4) {\n    local_28[0] = 0;\n    local_28[1] = 0;\n    local_28[2] = 0;\n                    \n    FUN_001743a0(param_1 + 0x1c,local_28);\n    if (local_28[0] != 0) {\n      FUN_001e6db0(local_28[0]);\n    }\n    FUN_00172ad0(*(int *)(param_1 + 0x20) + -0xc,0x2000);\n    iVar3 = *(int *)(param_1 + 0x1c);\n    uVar2 = (*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555;\n    if (uVar2 <= uVar4) {\n                    \n      FUN_00069d00("../../gold/stringpool.h",0x8e,"push_back",uVar2);\n    }\n  }\n  iVar3 = iVar3 + uVar4 * 0xc;\n  puVar1 = *(uint **)(iVar3 + 4);\n  if (puVar1 != *(uint **)(iVar3 + 8)) {\n    *puVar1 = local_2c;\n    *(uint **)(iVar3 + 4) = puVar1 + 1;\n    *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;\n    return;\n  }\n  FUN_0014ec40(iVar3,puVar1,&local_2c);\n  *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;\n  return;\n}" primitive_type (function_declarator "FUN_00174420(int param_1,int param_2)" identifier (parameter_list "(int param_1,int param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) ))) (compound_statement "{\n  uint *puVar1;\n  uint uVar2;\n  int iVar3;\n  uint uVar4;\n  uint local_2c;\n  int local_28 [6];\n  \n  if ((*(char *)(param_1 + 0x3c) == '\0') || (param_2 != 0)) {\n    local_2c = *(uint *)(param_1 + 0x40);\n    iVar3 = *(int *)(param_1 + 0x44);\n    if (*(int *)(param_1 + 0x48) != 0 || iVar3 != 0) {\n      local_2c = iVar3 + -1 + local_2c & -iVar3;\n    }\n    *(uint *)(param_1 + 0x40) = param_2 * 2 + 2 + local_2c;\n  }\n  else {\n    local_2c = 0;\n  }\n  iVar3 = *(int *)(param_1 + 0x1c);\n  uVar4 = *(uint *)(param_1 + 0x28) >> 0xd;\n  if ((uint)((*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555) <= uVar4) {\n    local_28[0] = 0;\n    local_28[1] = 0;\n    local_28[2] = 0;\n                    \n    FUN_001743a0(param_1 + 0x1c,local_28);\n    if (local_28[0] != 0) {\n      FUN_001e6db0(local_28[0]);\n    }\n    FUN_00172ad0(*(int *)(param_1 + 0x20) + -0xc,0x2000);\n    iVar3 = *(int *)(param_1 + 0x1c);\n    uVar2 = (*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555;\n    if (uVar2 <= uVar4) {\n                    \n      FUN_00069d00("../../gold/stringpool.h",0x8e,"push_back",uVar2);\n    }\n  }\n  iVar3 = iVar3 + uVar4 * 0xc;\n  puVar1 = *(uint **)(iVar3 + 4);\n  if (puVar1 != *(uint **)(iVar3 + 8)) {\n    *puVar1 = local_2c;\n    *(uint **)(iVar3 + 4) = puVar1 + 1;\n    *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;\n    return;\n  }\n  FUN_0014ec40(iVar3,puVar1,&local_2c);\n  *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;\n  return;\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint local_2c;" type_identifier identifier ;) (declaration "int local_28 [6];" primitive_type (array_declarator "local_28 [6]" identifier [ number_literal ]) ;) (if_statement "if ((*(char *)(param_1 + 0x3c) == '\0') || (param_2 != 0)) {\n    local_2c = *(uint *)(param_1 + 0x40);\n    iVar3 = *(int *)(param_1 + 0x44);\n    if (*(int *)(param_1 + 0x48) != 0 || iVar3 != 0) {\n      local_2c = iVar3 + -1 + local_2c & -iVar3;\n    }\n    *(uint *)(param_1 + 0x40) = param_2 * 2 + 2 + local_2c;\n  }\n  else {\n    local_2c = 0;\n  }" if (parenthesized_expression "((*(char *)(param_1 + 0x3c) == '\0') || (param_2 != 0))" ( (binary_expression "(*(char *)(param_1 + 0x3c) == '\0') || (param_2 != 0)" (parenthesized_expression "(*(char *)(param_1 + 0x3c) == '\0')" ( (binary_expression "*(char *)(param_1 + 0x3c) == '\0'" (pointer_expression "*(char *)(param_1 + 0x3c)" * (cast_expression "(char *)(param_1 + 0x3c)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x3c)" ( (binary_expression "param_1 + 0x3c" identifier + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) )) || (parenthesized_expression "(param_2 != 0)" ( (binary_expression "param_2 != 0" identifier != number_literal) ))) )) (compound_statement "{\n    local_2c = *(uint *)(param_1 + 0x40);\n    iVar3 = *(int *)(param_1 + 0x44);\n    if (*(int *)(param_1 + 0x48) != 0 || iVar3 != 0) {\n      local_2c = iVar3 + -1 + local_2c & -iVar3;\n    }\n    *(uint *)(param_1 + 0x40) = param_2 * 2 + 2 + local_2c;\n  }" { (expression_statement "local_2c = *(uint *)(param_1 + 0x40);" (assignment_expression "local_2c = *(uint *)(param_1 + 0x40)" identifier = (pointer_expression "*(uint *)(param_1 + 0x40)" * (cast_expression "(uint *)(param_1 + 0x40)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) ))))) ;) (expression_statement "iVar3 = *(int *)(param_1 + 0x44);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x44)" identifier = (pointer_expression "*(int *)(param_1 + 0x44)" * (cast_expression "(int *)(param_1 + 0x44)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) ))))) ;) (if_statement "if (*(int *)(param_1 + 0x48) != 0 || iVar3 != 0) {\n      local_2c = iVar3 + -1 + local_2c & -iVar3;\n    }" if (parenthesized_expression "(*(int *)(param_1 + 0x48) != 0 || iVar3 != 0)" ( (binary_expression "*(int *)(param_1 + 0x48) != 0 || iVar3 != 0" (binary_expression "*(int *)(param_1 + 0x48) != 0" (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) != number_literal) || (binary_expression "iVar3 != 0" identifier != number_literal)) )) (compound_statement "{\n      local_2c = iVar3 + -1 + local_2c & -iVar3;\n    }" { (expression_statement "local_2c = iVar3 + -1 + local_2c & -iVar3;" (assignment_expression "local_2c = iVar3 + -1 + local_2c & -iVar3" identifier = (binary_expression "iVar3 + -1 + local_2c & -iVar3" (binary_expression "iVar3 + -1 + local_2c" (binary_expression "iVar3 + -1" identifier + number_literal) + identifier) & (unary_expression "-iVar3" - identifier))) ;) })) (expression_statement "*(uint *)(param_1 + 0x40) = param_2 * 2 + 2 + local_2c;" (assignment_expression "*(uint *)(param_1 + 0x40) = param_2 * 2 + 2 + local_2c" (pointer_expression "*(uint *)(param_1 + 0x40)" * (cast_expression "(uint *)(param_1 + 0x40)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) = (binary_expression "param_2 * 2 + 2 + local_2c" (binary_expression "param_2 * 2 + 2" (binary_expression "param_2 * 2" identifier * number_literal) + number_literal) + identifier)) ;) }) (else_clause "else {\n    local_2c = 0;\n  }" else (compound_statement "{\n    local_2c = 0;\n  }" { (expression_statement "local_2c = 0;" (assignment_expression "local_2c = 0" identifier = number_literal) ;) }))) (expression_statement "iVar3 = *(int *)(param_1 + 0x1c);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x1c)" identifier = (pointer_expression "*(int *)(param_1 + 0x1c)" * (cast_expression "(int *)(param_1 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1c)" ( (binary_expression "param_1 + 0x1c" identifier + number_literal) ))))) ;) (expression_statement "uVar4 = *(uint *)(param_1 + 0x28) >> 0xd;" (assignment_expression "uVar4 = *(uint *)(param_1 + 0x28) >> 0xd" identifier = (binary_expression "*(uint *)(param_1 + 0x28) >> 0xd" (pointer_expression "*(uint *)(param_1 + 0x28)" * (cast_expression "(uint *)(param_1 + 0x28)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) >> number_literal)) ;) (if_statement "if ((uint)((*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555) <= uVar4) {\n    local_28[0] = 0;\n    local_28[1] = 0;\n    local_28[2] = 0;\n                    \n    FUN_001743a0(param_1 + 0x1c,local_28);\n    if (local_28[0] != 0) {\n      FUN_001e6db0(local_28[0]);\n    }\n    FUN_00172ad0(*(int *)(param_1 + 0x20) + -0xc,0x2000);\n    iVar3 = *(int *)(param_1 + 0x1c);\n    uVar2 = (*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555;\n    if (uVar2 <= uVar4) {\n                    \n      FUN_00069d00("../../gold/stringpool.h",0x8e,"push_back",uVar2);\n    }\n  }" if (parenthesized_expression "((uint)((*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555) <= uVar4)" ( (binary_expression "(uint)((*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555) <= uVar4" (call_expression "(uint)((*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555)" ( (binary_expression "(*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555" (parenthesized_expression "(*(int *)(param_1 + 0x20) - iVar3 >> 2)" ( (binary_expression "*(int *)(param_1 + 0x20) - iVar3 >> 2" (binary_expression "*(int *)(param_1 + 0x20) - iVar3" (pointer_expression "*(int *)(param_1 + 0x20)" * (cast_expression "(int *)(param_1 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) - identifier) >> number_literal) )) * number_literal) ))) <= identifier) )) (compound_statement "{\n    local_28[0] = 0;\n    local_28[1] = 0;\n    local_28[2] = 0;\n                    \n    FUN_001743a0(param_1 + 0x1c,local_28);\n    if (local_28[0] != 0) {\n      FUN_001e6db0(local_28[0]);\n    }\n    FUN_00172ad0(*(int *)(param_1 + 0x20) + -0xc,0x2000);\n    iVar3 = *(int *)(param_1 + 0x1c);\n    uVar2 = (*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555;\n    if (uVar2 <= uVar4) {\n                    \n      FUN_00069d00("../../gold/stringpool.h",0x8e,"push_back",uVar2);\n    }\n  }" { (expression_statement "local_28[0] = 0;" (assignment_expression "local_28[0] = 0" (subscript_expression "local_28[0]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "local_28[1] = 0;" (assignment_expression "local_28[1] = 0" (subscript_expression "local_28[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "local_28[2] = 0;" (assignment_expression "local_28[2] = 0" (subscript_expression "local_28[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "FUN_001743a0(param_1 + 0x1c,local_28);" (call_expression "FUN_001743a0(param_1 + 0x1c,local_28)" identifier (argument_list "(param_1 + 0x1c,local_28)" ( (binary_expression "param_1 + 0x1c" identifier + number_literal) , identifier ))) ;) (if_statement "if (local_28[0] != 0) {\n      FUN_001e6db0(local_28[0]);\n    }" if (parenthesized_expression "(local_28[0] != 0)" ( (binary_expression "local_28[0] != 0" (subscript_expression "local_28[0]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n      FUN_001e6db0(local_28[0]);\n    }" { (expression_statement "FUN_001e6db0(local_28[0]);" (call_expression "FUN_001e6db0(local_28[0])" identifier (argument_list "(local_28[0])" ( (subscript_expression "local_28[0]" identifier [ number_literal ]) ))) ;) })) (expression_statement "FUN_00172ad0(*(int *)(param_1 + 0x20) + -0xc,0x2000);" (call_expression "FUN_00172ad0(*(int *)(param_1 + 0x20) + -0xc,0x2000)" identifier (argument_list "(*(int *)(param_1 + 0x20) + -0xc,0x2000)" ( (binary_expression "*(int *)(param_1 + 0x20) + -0xc" (pointer_expression "*(int *)(param_1 + 0x20)" * (cast_expression "(int *)(param_1 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) + number_literal) , number_literal ))) ;) (expression_statement "iVar3 = *(int *)(param_1 + 0x1c);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x1c)" identifier = (pointer_expression "*(int *)(param_1 + 0x1c)" * (cast_expression "(int *)(param_1 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1c)" ( (binary_expression "param_1 + 0x1c" identifier + number_literal) ))))) ;) (expression_statement "uVar2 = (*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555;" (assignment_expression "uVar2 = (*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555" identifier = (binary_expression "(*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555" (parenthesized_expression "(*(int *)(param_1 + 0x20) - iVar3 >> 2)" ( (binary_expression "*(int *)(param_1 + 0x20) - iVar3 >> 2" (binary_expression "*(int *)(param_1 + 0x20) - iVar3" (pointer_expression "*(int *)(param_1 + 0x20)" * (cast_expression "(int *)(param_1 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) - identifier) >> number_literal) )) * number_literal)) ;) (if_statement "if (uVar2 <= uVar4) {\n                    \n      FUN_00069d00("../../gold/stringpool.h",0x8e,"push_back",uVar2);\n    }" if (parenthesized_expression "(uVar2 <= uVar4)" ( (binary_expression "uVar2 <= uVar4" identifier <= identifier) )) (compound_statement "{\n                    \n      FUN_00069d00("../../gold/stringpool.h",0x8e,"push_back",uVar2);\n    }" { (expression_statement "FUN_00069d00("../../gold/stringpool.h",0x8e,"push_back",uVar2);" (call_expression "FUN_00069d00("../../gold/stringpool.h",0x8e,"push_back",uVar2)" identifier (argument_list "("../../gold/stringpool.h",0x8e,"push_back",uVar2)" ( (string_literal ""../../gold/stringpool.h"" " string_content ") , number_literal , (string_literal ""push_back"" " string_content ") , identifier ))) ;) })) })) (expression_statement "iVar3 = iVar3 + uVar4 * 0xc;" (assignment_expression "iVar3 = iVar3 + uVar4 * 0xc" identifier = (binary_expression "iVar3 + uVar4 * 0xc" identifier + (binary_expression "uVar4 * 0xc" identifier * number_literal))) ;) (expression_statement "puVar1 = *(uint **)(iVar3 + 4);" (assignment_expression "puVar1 = *(uint **)(iVar3 + 4)" identifier = (pointer_expression "*(uint **)(iVar3 + 4)" * (cast_expression "(uint **)(iVar3 + 4)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar3 + 4)" ( (binary_expression "iVar3 + 4" identifier + number_literal) ))))) ;) (if_statement "if (puVar1 != *(uint **)(iVar3 + 8)) {\n    *puVar1 = local_2c;\n    *(uint **)(iVar3 + 4) = puVar1 + 1;\n    *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;\n    return;\n  }" if (parenthesized_expression "(puVar1 != *(uint **)(iVar3 + 8))" ( (binary_expression "puVar1 != *(uint **)(iVar3 + 8)" identifier != (pointer_expression "*(uint **)(iVar3 + 8)" * (cast_expression "(uint **)(iVar3 + 8)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar3 + 8)" ( (binary_expression "iVar3 + 8" identifier + number_literal) ))))) )) (compound_statement "{\n    *puVar1 = local_2c;\n    *(uint **)(iVar3 + 4) = puVar1 + 1;\n    *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;\n    return;\n  }" { (expression_statement "*puVar1 = local_2c;" (assignment_expression "*puVar1 = local_2c" (pointer_expression "*puVar1" * identifier) = identifier) ;) (expression_statement "*(uint **)(iVar3 + 4) = puVar1 + 1;" (assignment_expression "*(uint **)(iVar3 + 4) = puVar1 + 1" (pointer_expression "*(uint **)(iVar3 + 4)" * (cast_expression "(uint **)(iVar3 + 4)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar3 + 4)" ( (binary_expression "iVar3 + 4" identifier + number_literal) )))) = (binary_expression "puVar1 + 1" identifier + number_literal)) ;) (expression_statement "*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;" (assignment_expression "*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1" (pointer_expression "*(int *)(param_1 + 0x28)" * (cast_expression "(int *)(param_1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) = (binary_expression "*(int *)(param_1 + 0x28) + 1" (pointer_expression "*(int *)(param_1 + 0x28)" * (cast_expression "(int *)(param_1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) + number_literal)) ;) (return_statement "return;" return ;) })) (expression_statement "FUN_0014ec40(iVar3,puVar1,&local_2c);" (call_expression "FUN_0014ec40(iVar3,puVar1,&local_2c)" identifier (argument_list "(iVar3,puVar1,&local_2c)" ( identifier , identifier , (pointer_expression "&local_2c" & identifier) ))) ;) (expression_statement "*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;" (assignment_expression "*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1" (pointer_expression "*(int *)(param_1 + 0x28)" * (cast_expression "(int *)(param_1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) = (binary_expression "*(int *)(param_1 + 0x28) + 1" (pointer_expression "*(int *)(param_1 + 0x28)" * (cast_expression "(int *)(param_1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) + number_literal)) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == (char_literal ' escape_sequence ')) )) || (parenthesized_expression ( (binary_expression IDENT != LIT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) || (binary_expression IDENT != LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression IDENT + LIT) + IDENT) & (unary_expression - IDENT))) ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (binary_expression (binary_expression IDENT * LIT) + LIT) + IDENT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }))) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) >> LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) - IDENT) >> LIT) )) * LIT) ))) <= IDENT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) , LIT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) - IDENT) >> LIT) )) * LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") , IDENT ))) ;) })) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression IDENT * LIT))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) ;) (return_statement return ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (pointer_expression & IDENT) ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) ;) (return_statement return ;) })))
(function_definition "void FUN_00174420(int param_1,int param_2)\n\n{\n  uint *puVar1;\n  uint uVar2;\n  int iVar3;\n  uint uVar4;\n  uint local_2c;\n  int local_28 [6];\n  \n  if ((*(char *)(param_1 + 0x3c) == '\0') || (param_2 != 0)) {\n    local_2c = *(uint *)(param_1 + 0x40);\n    iVar3 = *(int *)(param_1 + 0x44);\n    if (*(int *)(param_1 + 0x48) != 0 || iVar3 != 0) {\n      local_2c = iVar3 + -1 + local_2c & -iVar3;\n    }\n    *(uint *)(param_1 + 0x40) = param_2 * 2 + 2 + local_2c;\n  }\n  else {\n    local_2c = 0;\n  }\n  iVar3 = *(int *)(param_1 + 0x1c);\n  uVar4 = *(uint *)(param_1 + 0x28) >> 0xd;\n  if ((uint)((*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555) <= uVar4) {\n    local_28[0] = 0;\n    local_28[1] = 0;\n    local_28[2] = 0;\n                    \n    FUN_001743a0(param_1 + 0x1c,local_28);\n    if (local_28[0] != 0) {\n      FUN_001e6db0(local_28[0]);\n    }\n    FUN_00172ad0(*(int *)(param_1 + 0x20) + -0xc,0x2000);\n    iVar3 = *(int *)(param_1 + 0x1c);\n    uVar2 = (*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555;\n    if (uVar2 <= uVar4) {\n                    \n      FUN_00069d00("../../gold/stringpool.h",0x8e,"push_back",uVar2);\n    }\n  }\n  iVar3 = iVar3 + uVar4 * 0xc;\n  puVar1 = *(uint **)(iVar3 + 4);\n  if (puVar1 != *(uint **)(iVar3 + 8)) {\n    *puVar1 = local_2c;\n    *(uint **)(iVar3 + 4) = puVar1 + 1;\n    *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;\n    return;\n  }\n  FUN_0014ec40(iVar3,puVar1,&local_2c);\n  *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;\n  return;\n}" (primitive_type "void") (function_declarator "FUN_00174420(int param_1,int param_2)" (identifier "FUN_00174420") (parameter_list "(int param_1,int param_2)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) () ")"))) (compound_statement "{\n  uint *puVar1;\n  uint uVar2;\n  int iVar3;\n  uint uVar4;\n  uint local_2c;\n  int local_28 [6];\n  \n  if ((*(char *)(param_1 + 0x3c) == '\0') || (param_2 != 0)) {\n    local_2c = *(uint *)(param_1 + 0x40);\n    iVar3 = *(int *)(param_1 + 0x44);\n    if (*(int *)(param_1 + 0x48) != 0 || iVar3 != 0) {\n      local_2c = iVar3 + -1 + local_2c & -iVar3;\n    }\n    *(uint *)(param_1 + 0x40) = param_2 * 2 + 2 + local_2c;\n  }\n  else {\n    local_2c = 0;\n  }\n  iVar3 = *(int *)(param_1 + 0x1c);\n  uVar4 = *(uint *)(param_1 + 0x28) >> 0xd;\n  if ((uint)((*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555) <= uVar4) {\n    local_28[0] = 0;\n    local_28[1] = 0;\n    local_28[2] = 0;\n                    \n    FUN_001743a0(param_1 + 0x1c,local_28);\n    if (local_28[0] != 0) {\n      FUN_001e6db0(local_28[0]);\n    }\n    FUN_00172ad0(*(int *)(param_1 + 0x20) + -0xc,0x2000);\n    iVar3 = *(int *)(param_1 + 0x1c);\n    uVar2 = (*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555;\n    if (uVar2 <= uVar4) {\n                    \n      FUN_00069d00("../../gold/stringpool.h",0x8e,"push_back",uVar2);\n    }\n  }\n  iVar3 = iVar3 + uVar4 * 0xc;\n  puVar1 = *(uint **)(iVar3 + 4);\n  if (puVar1 != *(uint **)(iVar3 + 8)) {\n    *puVar1 = local_2c;\n    *(uint **)(iVar3 + 4) = puVar1 + 1;\n    *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;\n    return;\n  }\n  FUN_0014ec40(iVar3,puVar1,&local_2c);\n  *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;\n  return;\n}" ({ "{") (declaration "uint *puVar1;" (type_identifier "uint") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "uint local_2c;" (type_identifier "uint") (identifier "local_2c") (; ";")) (declaration "int local_28 [6];" (primitive_type "int") (array_declarator "local_28 [6]" (identifier "local_28") ([ "[") (number_literal "6") (] "]")) (; ";")) (if_statement "if ((*(char *)(param_1 + 0x3c) == '\0') || (param_2 != 0)) {\n    local_2c = *(uint *)(param_1 + 0x40);\n    iVar3 = *(int *)(param_1 + 0x44);\n    if (*(int *)(param_1 + 0x48) != 0 || iVar3 != 0) {\n      local_2c = iVar3 + -1 + local_2c & -iVar3;\n    }\n    *(uint *)(param_1 + 0x40) = param_2 * 2 + 2 + local_2c;\n  }\n  else {\n    local_2c = 0;\n  }" (if "if") (parenthesized_expression "((*(char *)(param_1 + 0x3c) == '\0') || (param_2 != 0))" (( "(") (binary_expression "(*(char *)(param_1 + 0x3c) == '\0') || (param_2 != 0)" (parenthesized_expression "(*(char *)(param_1 + 0x3c) == '\0')" (( "(") (binary_expression "*(char *)(param_1 + 0x3c) == '\0'" (pointer_expression "*(char *)(param_1 + 0x3c)" (* "*") (cast_expression "(char *)(param_1 + 0x3c)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x3c)" (( "(") (binary_expression "param_1 + 0x3c" (identifier "param_1") (+ "+") (number_literal "0x3c")) () ")")))) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (|| "||") (parenthesized_expression "(param_2 != 0)" (( "(") (binary_expression "param_2 != 0" (identifier "param_2") (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n    local_2c = *(uint *)(param_1 + 0x40);\n    iVar3 = *(int *)(param_1 + 0x44);\n    if (*(int *)(param_1 + 0x48) != 0 || iVar3 != 0) {\n      local_2c = iVar3 + -1 + local_2c & -iVar3;\n    }\n    *(uint *)(param_1 + 0x40) = param_2 * 2 + 2 + local_2c;\n  }" ({ "{") (expression_statement "local_2c = *(uint *)(param_1 + 0x40);" (assignment_expression "local_2c = *(uint *)(param_1 + 0x40)" (identifier "local_2c") (= "=") (pointer_expression "*(uint *)(param_1 + 0x40)" (* "*") (cast_expression "(uint *)(param_1 + 0x40)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x40)" (( "(") (binary_expression "param_1 + 0x40" (identifier "param_1") (+ "+") (number_literal "0x40")) () ")"))))) (; ";")) (expression_statement "iVar3 = *(int *)(param_1 + 0x44);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x44)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(param_1 + 0x44)" (* "*") (cast_expression "(int *)(param_1 + 0x44)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x44)" (( "(") (binary_expression "param_1 + 0x44" (identifier "param_1") (+ "+") (number_literal "0x44")) () ")"))))) (; ";")) (if_statement "if (*(int *)(param_1 + 0x48) != 0 || iVar3 != 0) {\n      local_2c = iVar3 + -1 + local_2c & -iVar3;\n    }" (if "if") (parenthesized_expression "(*(int *)(param_1 + 0x48) != 0 || iVar3 != 0)" (( "(") (binary_expression "*(int *)(param_1 + 0x48) != 0 || iVar3 != 0" (binary_expression "*(int *)(param_1 + 0x48) != 0" (pointer_expression "*(int *)(param_1 + 0x48)" (* "*") (cast_expression "(int *)(param_1 + 0x48)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x48)" (( "(") (binary_expression "param_1 + 0x48" (identifier "param_1") (+ "+") (number_literal "0x48")) () ")")))) (!= "!=") (number_literal "0")) (|| "||") (binary_expression "iVar3 != 0" (identifier "iVar3") (!= "!=") (number_literal "0"))) () ")")) (compound_statement "{\n      local_2c = iVar3 + -1 + local_2c & -iVar3;\n    }" ({ "{") (expression_statement "local_2c = iVar3 + -1 + local_2c & -iVar3;" (assignment_expression "local_2c = iVar3 + -1 + local_2c & -iVar3" (identifier "local_2c") (= "=") (binary_expression "iVar3 + -1 + local_2c & -iVar3" (binary_expression "iVar3 + -1 + local_2c" (binary_expression "iVar3 + -1" (identifier "iVar3") (+ "+") (number_literal "-1")) (+ "+") (identifier "local_2c")) (& "&") (unary_expression "-iVar3" (- "-") (identifier "iVar3")))) (; ";")) (} "}"))) (expression_statement "*(uint *)(param_1 + 0x40) = param_2 * 2 + 2 + local_2c;" (assignment_expression "*(uint *)(param_1 + 0x40) = param_2 * 2 + 2 + local_2c" (pointer_expression "*(uint *)(param_1 + 0x40)" (* "*") (cast_expression "(uint *)(param_1 + 0x40)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x40)" (( "(") (binary_expression "param_1 + 0x40" (identifier "param_1") (+ "+") (number_literal "0x40")) () ")")))) (= "=") (binary_expression "param_2 * 2 + 2 + local_2c" (binary_expression "param_2 * 2 + 2" (binary_expression "param_2 * 2" (identifier "param_2") (* "*") (number_literal "2")) (+ "+") (number_literal "2")) (+ "+") (identifier "local_2c"))) (; ";")) (} "}")) (else_clause "else {\n    local_2c = 0;\n  }" (else "else") (compound_statement "{\n    local_2c = 0;\n  }" ({ "{") (expression_statement "local_2c = 0;" (assignment_expression "local_2c = 0" (identifier "local_2c") (= "=") (number_literal "0")) (; ";")) (} "}")))) (expression_statement "iVar3 = *(int *)(param_1 + 0x1c);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x1c)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(param_1 + 0x1c)" (* "*") (cast_expression "(int *)(param_1 + 0x1c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1c)" (( "(") (binary_expression "param_1 + 0x1c" (identifier "param_1") (+ "+") (number_literal "0x1c")) () ")"))))) (; ";")) (expression_statement "uVar4 = *(uint *)(param_1 + 0x28) >> 0xd;" (assignment_expression "uVar4 = *(uint *)(param_1 + 0x28) >> 0xd" (identifier "uVar4") (= "=") (binary_expression "*(uint *)(param_1 + 0x28) >> 0xd" (pointer_expression "*(uint *)(param_1 + 0x28)" (* "*") (cast_expression "(uint *)(param_1 + 0x28)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x28)" (( "(") (binary_expression "param_1 + 0x28" (identifier "param_1") (+ "+") (number_literal "0x28")) () ")")))) (>> ">>") (number_literal "0xd"))) (; ";")) (if_statement "if ((uint)((*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555) <= uVar4) {\n    local_28[0] = 0;\n    local_28[1] = 0;\n    local_28[2] = 0;\n                    \n    FUN_001743a0(param_1 + 0x1c,local_28);\n    if (local_28[0] != 0) {\n      FUN_001e6db0(local_28[0]);\n    }\n    FUN_00172ad0(*(int *)(param_1 + 0x20) + -0xc,0x2000);\n    iVar3 = *(int *)(param_1 + 0x1c);\n    uVar2 = (*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555;\n    if (uVar2 <= uVar4) {\n                    \n      FUN_00069d00("../../gold/stringpool.h",0x8e,"push_back",uVar2);\n    }\n  }" (if "if") (parenthesized_expression "((uint)((*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555) <= uVar4)" (( "(") (binary_expression "(uint)((*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555) <= uVar4" (call_expression "(uint)((*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555)" (( "(") (binary_expression "(*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555" (parenthesized_expression "(*(int *)(param_1 + 0x20) - iVar3 >> 2)" (( "(") (binary_expression "*(int *)(param_1 + 0x20) - iVar3 >> 2" (binary_expression "*(int *)(param_1 + 0x20) - iVar3" (pointer_expression "*(int *)(param_1 + 0x20)" (* "*") (cast_expression "(int *)(param_1 + 0x20)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x20)" (( "(") (binary_expression "param_1 + 0x20" (identifier "param_1") (+ "+") (number_literal "0x20")) () ")")))) (- "-") (identifier "iVar3")) (>> ">>") (number_literal "2")) () ")")) (* "*") (number_literal "-0x55555555")) () ")"))) (<= "<=") (identifier "uVar4")) () ")")) (compound_statement "{\n    local_28[0] = 0;\n    local_28[1] = 0;\n    local_28[2] = 0;\n                    \n    FUN_001743a0(param_1 + 0x1c,local_28);\n    if (local_28[0] != 0) {\n      FUN_001e6db0(local_28[0]);\n    }\n    FUN_00172ad0(*(int *)(param_1 + 0x20) + -0xc,0x2000);\n    iVar3 = *(int *)(param_1 + 0x1c);\n    uVar2 = (*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555;\n    if (uVar2 <= uVar4) {\n                    \n      FUN_00069d00("../../gold/stringpool.h",0x8e,"push_back",uVar2);\n    }\n  }" ({ "{") (expression_statement "local_28[0] = 0;" (assignment_expression "local_28[0] = 0" (subscript_expression "local_28[0]" (identifier "local_28") ([ "[") (number_literal "0") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "local_28[1] = 0;" (assignment_expression "local_28[1] = 0" (subscript_expression "local_28[1]" (identifier "local_28") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "local_28[2] = 0;" (assignment_expression "local_28[2] = 0" (subscript_expression "local_28[2]" (identifier "local_28") ([ "[") (number_literal "2") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "FUN_001743a0(param_1 + 0x1c,local_28);" (call_expression "FUN_001743a0(param_1 + 0x1c,local_28)" (identifier "FUN_001743a0") (argument_list "(param_1 + 0x1c,local_28)" (( "(") (binary_expression "param_1 + 0x1c" (identifier "param_1") (+ "+") (number_literal "0x1c")) (, ",") (identifier "local_28") () ")"))) (; ";")) (if_statement "if (local_28[0] != 0) {\n      FUN_001e6db0(local_28[0]);\n    }" (if "if") (parenthesized_expression "(local_28[0] != 0)" (( "(") (binary_expression "local_28[0] != 0" (subscript_expression "local_28[0]" (identifier "local_28") ([ "[") (number_literal "0") (] "]")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      FUN_001e6db0(local_28[0]);\n    }" ({ "{") (expression_statement "FUN_001e6db0(local_28[0]);" (call_expression "FUN_001e6db0(local_28[0])" (identifier "FUN_001e6db0") (argument_list "(local_28[0])" (( "(") (subscript_expression "local_28[0]" (identifier "local_28") ([ "[") (number_literal "0") (] "]")) () ")"))) (; ";")) (} "}"))) (expression_statement "FUN_00172ad0(*(int *)(param_1 + 0x20) + -0xc,0x2000);" (call_expression "FUN_00172ad0(*(int *)(param_1 + 0x20) + -0xc,0x2000)" (identifier "FUN_00172ad0") (argument_list "(*(int *)(param_1 + 0x20) + -0xc,0x2000)" (( "(") (binary_expression "*(int *)(param_1 + 0x20) + -0xc" (pointer_expression "*(int *)(param_1 + 0x20)" (* "*") (cast_expression "(int *)(param_1 + 0x20)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x20)" (( "(") (binary_expression "param_1 + 0x20" (identifier "param_1") (+ "+") (number_literal "0x20")) () ")")))) (+ "+") (number_literal "-0xc")) (, ",") (number_literal "0x2000") () ")"))) (; ";")) (expression_statement "iVar3 = *(int *)(param_1 + 0x1c);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x1c)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(param_1 + 0x1c)" (* "*") (cast_expression "(int *)(param_1 + 0x1c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1c)" (( "(") (binary_expression "param_1 + 0x1c" (identifier "param_1") (+ "+") (number_literal "0x1c")) () ")"))))) (; ";")) (expression_statement "uVar2 = (*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555;" (assignment_expression "uVar2 = (*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555" (identifier "uVar2") (= "=") (binary_expression "(*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555" (parenthesized_expression "(*(int *)(param_1 + 0x20) - iVar3 >> 2)" (( "(") (binary_expression "*(int *)(param_1 + 0x20) - iVar3 >> 2" (binary_expression "*(int *)(param_1 + 0x20) - iVar3" (pointer_expression "*(int *)(param_1 + 0x20)" (* "*") (cast_expression "(int *)(param_1 + 0x20)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x20)" (( "(") (binary_expression "param_1 + 0x20" (identifier "param_1") (+ "+") (number_literal "0x20")) () ")")))) (- "-") (identifier "iVar3")) (>> ">>") (number_literal "2")) () ")")) (* "*") (number_literal "-0x55555555"))) (; ";")) (if_statement "if (uVar2 <= uVar4) {\n                    \n      FUN_00069d00("../../gold/stringpool.h",0x8e,"push_back",uVar2);\n    }" (if "if") (parenthesized_expression "(uVar2 <= uVar4)" (( "(") (binary_expression "uVar2 <= uVar4" (identifier "uVar2") (<= "<=") (identifier "uVar4")) () ")")) (compound_statement "{\n                    \n      FUN_00069d00("../../gold/stringpool.h",0x8e,"push_back",uVar2);\n    }" ({ "{") (expression_statement "FUN_00069d00("../../gold/stringpool.h",0x8e,"push_back",uVar2);" (call_expression "FUN_00069d00("../../gold/stringpool.h",0x8e,"push_back",uVar2)" (identifier "FUN_00069d00") (argument_list "("../../gold/stringpool.h",0x8e,"push_back",uVar2)" (( "(") (string_literal ""../../gold/stringpool.h"" (" """) (string_content "../../gold/stringpool.h") (" """)) (, ",") (number_literal "0x8e") (, ",") (string_literal ""push_back"" (" """) (string_content "push_back") (" """)) (, ",") (identifier "uVar2") () ")"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "iVar3 = iVar3 + uVar4 * 0xc;" (assignment_expression "iVar3 = iVar3 + uVar4 * 0xc" (identifier "iVar3") (= "=") (binary_expression "iVar3 + uVar4 * 0xc" (identifier "iVar3") (+ "+") (binary_expression "uVar4 * 0xc" (identifier "uVar4") (* "*") (number_literal "0xc")))) (; ";")) (expression_statement "puVar1 = *(uint **)(iVar3 + 4);" (assignment_expression "puVar1 = *(uint **)(iVar3 + 4)" (identifier "puVar1") (= "=") (pointer_expression "*(uint **)(iVar3 + 4)" (* "*") (cast_expression "(uint **)(iVar3 + 4)" (( "(") (type_descriptor "uint **" (type_identifier "uint") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar3 + 4)" (( "(") (binary_expression "iVar3 + 4" (identifier "iVar3") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (if_statement "if (puVar1 != *(uint **)(iVar3 + 8)) {\n    *puVar1 = local_2c;\n    *(uint **)(iVar3 + 4) = puVar1 + 1;\n    *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;\n    return;\n  }" (if "if") (parenthesized_expression "(puVar1 != *(uint **)(iVar3 + 8))" (( "(") (binary_expression "puVar1 != *(uint **)(iVar3 + 8)" (identifier "puVar1") (!= "!=") (pointer_expression "*(uint **)(iVar3 + 8)" (* "*") (cast_expression "(uint **)(iVar3 + 8)" (( "(") (type_descriptor "uint **" (type_identifier "uint") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar3 + 8)" (( "(") (binary_expression "iVar3 + 8" (identifier "iVar3") (+ "+") (number_literal "8")) () ")"))))) () ")")) (compound_statement "{\n    *puVar1 = local_2c;\n    *(uint **)(iVar3 + 4) = puVar1 + 1;\n    *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;\n    return;\n  }" ({ "{") (expression_statement "*puVar1 = local_2c;" (assignment_expression "*puVar1 = local_2c" (pointer_expression "*puVar1" (* "*") (identifier "puVar1")) (= "=") (identifier "local_2c")) (; ";")) (expression_statement "*(uint **)(iVar3 + 4) = puVar1 + 1;" (assignment_expression "*(uint **)(iVar3 + 4) = puVar1 + 1" (pointer_expression "*(uint **)(iVar3 + 4)" (* "*") (cast_expression "(uint **)(iVar3 + 4)" (( "(") (type_descriptor "uint **" (type_identifier "uint") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar3 + 4)" (( "(") (binary_expression "iVar3 + 4" (identifier "iVar3") (+ "+") (number_literal "4")) () ")")))) (= "=") (binary_expression "puVar1 + 1" (identifier "puVar1") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;" (assignment_expression "*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1" (pointer_expression "*(int *)(param_1 + 0x28)" (* "*") (cast_expression "(int *)(param_1 + 0x28)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x28)" (( "(") (binary_expression "param_1 + 0x28" (identifier "param_1") (+ "+") (number_literal "0x28")) () ")")))) (= "=") (binary_expression "*(int *)(param_1 + 0x28) + 1" (pointer_expression "*(int *)(param_1 + 0x28)" (* "*") (cast_expression "(int *)(param_1 + 0x28)" (( "(") (type_descriptor "int *" (primitive_type "int") (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;" (return "return") (; ";")) (} "}"))) (expression_statement "FUN_0014ec40(iVar3,puVar1,&local_2c);" (call_expression "FUN_0014ec40(iVar3,puVar1,&local_2c)" (identifier "FUN_0014ec40") (argument_list "(iVar3,puVar1,&local_2c)" (( "(") (identifier "iVar3") (, ",") (identifier "puVar1") (, ",") (pointer_expression "&local_2c" (& "&") (identifier "local_2c")) () ")"))) (; ";")) (expression_statement "*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;" (assignment_expression "*(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1" (pointer_expression "*(int *)(param_1 + 0x28)" (* "*") (cast_expression "(int *)(param_1 + 0x28)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x28)" (( "(") (binary_expression "param_1 + 0x28" (identifier "param_1") (+ "+") (number_literal "0x28")) () ")")))) (= "=") (binary_expression "*(int *)(param_1 + 0x28) + 1" (pointer_expression "*(int *)(param_1 + 0x28)" (* "*") (cast_expression "(int *)(param_1 + 0x28)" (( "(") (type_descriptor "int *" (primitive_type "int") (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;" (return "return") (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */
/* DWARF original prototype: void new_key_offset(Stringpool_template<short_unsigned_int> * this,
   size_t length) */

void __thiscall
gold::type_1<short_unsigned_int>::function_1
          (type_1<short_unsigned_int> *this,size_t var_4)

{
  size_t *psVar1;
  vector<var_2,_std::var_1<var_2>var_3> *this_00;
  int var_5;
  type_2 __position;
  type_3 var_10;
  type_4 var_7;
  type_5 var_6;
  vector<var_2,_std::var_1<var_2>var_3> local_28 [2];
  
  if ((this->zero_null_ == false) || (var_4 != 0)) {
    var_6 = this->offset_;
    var_5 = (int)this->addralign_;
    if (*(int *)((int)&this->addralign_ + 4) != 0 || var_5 != 0) {
      var_6 = var_5 + -1 + var_6 & -var_5;
    }
    this->offset_ = var_4 * 2 + 2 + var_6;
  }
  else {
    var_6 = 0;
  }
  var_10 = (this->key_to_offset_).chunks_.
           super__Vector_base<std::vector<var_2,_std::var_1<var_2>var_3>,_std::var_1<std::vector<var_2,_std::var_1<var_2>var_3>var_3>var_3>
           ._M_impl._M_start;
  var_7 = (this->key_to_offset_).size_ >> 0xd;
  if ((type_4)(((int)(this->key_to_offset_).chunks_.
                   super__Vector_base<std::vector<var_2,_std::var_1<var_2>var_3>,_std::var_1<std::vector<var_2,_std::var_1<var_2>var_3>var_3>var_3>
                   ._M_impl._M_finish - (int)var_10 >> 2) * -0x55555555) <= var_7) {
    local_28[0].super__Vector_base<var_2,_std::var_1<var_2>var_3>._M_impl._M_start = (type_3)0x0;
    local_28[0].super__Vector_base<var_2,_std::var_1<var_2>var_3>._M_impl._M_finish = (type_3)0x0;
    local_28[0].super__Vector_base<var_2,_std::var_1<var_2>var_3>._M_impl._M_end_of_storage =
         (type_3)0x0;
                    /* try { // try from 001744b3 to 001744b7 has its CatchHandler @ 001745a9 */
    std::
    vector<std::vector<var_2,_std::var_1<var_2>var_3>,_std::var_1<std::vector<var_2,_std::var_1<var_2>var_3>var_3>var_3>
    ::emplace_back<std::vector<var_2,_std::var_1<var_2>var_3>var_3>
              (&(this->key_to_offset_).chunks_,local_28);
    if (local_28[0].super__Vector_base<var_2,_std::var_1<var_2>var_3>._M_impl._M_start != (type_3)0x0)
    {
      var_8(local_28[0].super__Vector_base<var_2,_std::var_1<var_2>var_3>._M_impl._M_start);
    }
    std::vector<var_2,_std::var_1<var_2>var_3>::reserve
              ((this->key_to_offset_).chunks_.
               super__Vector_base<std::vector<var_2,_std::var_1<var_2>var_3>,_std::var_1<std::vector<var_2,_std::var_1<var_2>var_3>var_3>var_3>
               ._M_impl._M_finish + -1,0x2000);
    var_10 = (this->key_to_offset_).chunks_.
             super__Vector_base<std::vector<var_2,_std::var_1<var_2>var_3>,_std::var_1<std::vector<var_2,_std::var_1<var_2>var_3>var_3>var_3>
             ._M_impl._M_start;
    if ((type_4)(((int)(this->key_to_offset_).chunks_.
                     super__Vector_base<std::vector<var_2,_std::var_1<var_2>var_3>,_std::var_1<std::vector<var_2,_std::var_1<var_2>var_3>var_3>var_3>
                     ._M_impl._M_finish - (int)var_10 >> 2) * -0x55555555) <= var_7) {
                    /* WARNING: Subroutine does not return */
      var_9("../../gold/stringpool.h",0x8e,"push_back");
    }
  }
  this_00 = var_10 + var_7;
  __position._M_current = (this_00->super__Vector_base<var_2,_std::var_1<var_2>var_3>var_11)._M_impl._M_finish
  ;
  if (__position._M_current !=
      (this_00->super__Vector_base<var_2,_std::var_1<var_2>var_3>var_11)._M_impl._M_end_of_storage) {
    *__position._M_current = var_6;
    (this_00->super__Vector_base<var_2,_std::var_1<var_2>var_3>var_11)._M_impl._M_finish =
         __position._M_current + 1;
    psVar1 = &(this->key_to_offset_).size_;
    *psVar1 = *psVar1 + 1;
    return;
  }
  std::vector<var_2,_std::var_1<var_2>var_3>::var_12<var_13&>(this_00,__position,&var_6);
  psVar1 = &(this->key_to_offset_).size_;
  *psVar1 = *psVar1 + 1;
  return;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (char_literal (escape_sequence)))) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) 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 (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier)) right: (unary_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: (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal)) right: (identifier))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (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: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier)) right: (number_literal))) right: (number_literal)))) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (subscript_expression argument: (identifier) index: (number_literal))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)) (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier)) right: (number_literal))) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (number_literal) (string_literal (string_content)) (identifier)))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) 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: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))) (return_statement))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) 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: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))) (return_statement))))

/* WARNING: Function: __i686.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */

void MASKED(int param_1,int param_2)

{
  uint *puVar1;
  uint uVar2;
  int iVar3;
  uint uVar4;
  uint local_2c;
  int local_28 [6];
  
  if ((*(char *)(param_1 + 0x3c) == '\0') || (param_2 != 0)) {
    local_2c = *(uint *)(param_1 + 0x40);
    iVar3 = *(int *)(param_1 + 0x44);
    if (*(int *)(param_1 + 0x48) != 0 || iVar3 != 0) {
      local_2c = iVar3 + -1 + local_2c & -iVar3;
    }
    *(uint *)(param_1 + 0x40) = param_2 * 2 + 2 + local_2c;
  }
  else {
    local_2c = 0;
  }
  iVar3 = *(int *)(param_1 + 0x1c);
  uVar4 = *(uint *)(param_1 + 0x28) >> 0xd;
  if ((uint)((*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555) <= uVar4) {
    local_28[0] = 0;
    local_28[1] = 0;
    local_28[2] = 0;
                    /* try { // try from 001744b3 to 001744b7 has its CatchHandler @ 001745a9 */
    FUN_001743a0(param_1 + 0x1c,local_28);
    if (local_28[0] != 0) {
      FUN_001e6db0(local_28[0]);
    }
    FUN_00172ad0(*(int *)(param_1 + 0x20) + -0xc,0x2000);
    iVar3 = *(int *)(param_1 + 0x1c);
    uVar2 = (*(int *)(param_1 + 0x20) - iVar3 >> 2) * -0x55555555;
    if (uVar2 <= uVar4) {
                    /* WARNING: Subroutine does not return */
      FUN_00069d00("../../gold/stringpool.h",0x8e,"push_back",uVar2);
    }
  }
  iVar3 = iVar3 + uVar4 * 0xc;
  puVar1 = *(uint **)(iVar3 + 4);
  if (puVar1 != *(uint **)(iVar3 + 8)) {
    *puVar1 = local_2c;
    *(uint **)(iVar3 + 4) = puVar1 + 1;
    *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;
    return;
  }
  FUN_0014ec40(iVar3,puVar1,&local_2c);
  *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;
  return;
}

