
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* DWARF original prototype: bool operator()(Merge_data_eq * this, Merge_data_key k1, Merge_data_key
   k2) */

bool __thiscall
gold::Output_merge_data::Merge_data_eq::operator()
          (Merge_data_eq *this,Merge_data_key k1,Merge_data_key k2)

{
  Output_merge_data *pOVar1;
  int iVar2;
  Output_merge_data *unaff_EBX;
  Merge_data_key unaff_ESI;
  Output_merge_data *unaff_EDI;
  
  pOVar1 = this->pomd_;
  if ((-1 < k1) && (k1 < (int)pOVar1->len_)) {
    if ((-1 < k2) && (k2 < (int)pOVar1->len_)) {
      iVar2 = memcmp(pOVar1->p_ + k1,pOVar1->p_ + k2,
                     (size_t)(pOVar1->super_Output_merge_base).entsize_);
      return iVar2 == 0;
    }
  }
                    /* WARNING: Subroutine does not return */
  constant(unaff_EBX,unaff_ESI,unaff_EDI);
}



/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void * FUN_0015e6f0(int *param_1,int param_2,int param_3)

{
  uint __n;
  uint uVar1;
  int iVar2;
  undefined4 uVar3;
  size_t __size;
  void *pvVar4;
  int *unaff_ESI;
  void *unaff_EDI;
  uint uVar5;
  undefined8 uVar6;
  
  iVar2 = *param_1;
  if ((-1 < param_2) && (param_2 < *(int *)(iVar2 + 0x60))) {
    if ((-1 < param_3) && (param_3 < *(int *)(iVar2 + 0x60))) {
      iVar2 = memcmp((void *)(param_2 + *(int *)(iVar2 + 0x5c)),
                     (void *)(*(int *)(iVar2 + 0x5c) + param_3),*(size_t *)(iVar2 + 0x2c));
      return (void *)(uint)(iVar2 == 0);
    }
  }
  uVar3 = FUN_0015e490();
  __n = unaff_ESI[0xb];
  if (unaff_ESI[0xc] != 0) {
LAB_0015e880:
                    /* WARNING: Subroutine does not return */
    FUN_0005f0b0("../../gold/gold.h",0xc0,"convert_types",uVar3);
  }
  if (*(code **)(*unaff_ESI + 0xc) == FUN_00068180) {
    uVar5 = unaff_ESI[9];
    uVar6 = CONCAT44(unaff_ESI[10],FUN_00068180);
  }
  else {
    uVar6 = (**(code **)(*unaff_ESI + 0xc))(unaff_ESI);
    uVar5 = (uint)uVar6;
  }
  uVar3 = (undefined4)uVar6;
  if ((int)((ulonglong)uVar6 >> 0x20) != 0) goto LAB_0015e880;
  pvVar4 = (void *)unaff_ESI[0x17];
  iVar2 = unaff_ESI[0x18];
  uVar1 = unaff_ESI[0x19];
  if (__n < uVar5) {
    if (iVar2 + uVar5 <= uVar1) {
      memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);
      goto LAB_0015e824;
    }
  }
  else {
    uVar5 = __n;
    if (__n + iVar2 <= uVar1) {
      pvVar4 = memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);
      unaff_ESI[0x18] = unaff_ESI[0x18] + __n;
      return pvVar4;
    }
  }
  __size = uVar1 * 2;
  if (uVar1 == 0) {
    __size = uVar5 << 7;
  }
  unaff_ESI[0x19] = __size;
  pvVar4 = realloc(pvVar4,__size);
  unaff_ESI[0x17] = (int)pvVar4;
  if (pvVar4 == (void *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_0005f060();
  }
  pvVar4 = memcpy((void *)((int)pvVar4 + unaff_ESI[0x18]),unaff_EDI,__n);
  if (uVar5 <= __n) {
    unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5;
    return pvVar4;
  }
LAB_0015e824:
  pvVar4 = memset((void *)(__n + unaff_ESI[0x18] + unaff_ESI[0x17]),0,uVar5 - __n);
  unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5;
  return pvVar4;
}


PUSH EDI
PUSH ESI
PUSH EBX
MOV EDX,dword ptr [ESP + 0x10]
CALL 0x00032730
ADD EBX,0x1a3904
MOV EAX,dword ptr [ESP + 0x14]
MOV ESI,dword ptr [ESP + 0x18]
MOV ECX,dword ptr [EDX]
TEST EAX,EAX
JS 0x0015e73f
MOV EDI,dword ptr [ECX + 0x60]
CMP EAX,EDI
JGE 0x0015e73f
MOV EDX,dword ptr [ECX + 0x5c]
ADD EAX,EDX
TEST ESI,ESI
JS 0x0015e73f
CMP ESI,EDI
JGE 0x0015e73f
SUB ESP,0x4
ADD EDX,ESI
PUSH dword ptr [ECX + 0x2c]
PUSH EDX
PUSH EAX
CALL 0x00026130
ADD ESP,0x10
TEST EAX,EAX
POP EBX
POP ESI
SETZ AL
POP EDI
RET
CALL 0x0015e490
LEA ESI,[ESI]
LEA ESI,[ESI]
NOP
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nvoid * FUN_0015e6f0(int *param_1,int param_2,int param_3)\n\n{\n  uint __n;\n  uint uVar1;\n  int iVar2;\n  undefined4 uVar3;\n  size_t __size;\n  void *pvVar4;\n  int *unaff_ESI;\n  void *unaff_EDI;\n  uint uVar5;\n  undefined8 uVar6;\n  \n  iVar2 = *param_1;\n  if ((-1 < param_2) && (param_2 < *(int *)(iVar2 + 0x60))) {\n    if ((-1 < param_3) && (param_3 < *(int *)(iVar2 + 0x60))) {\n      iVar2 = memcmp((void *)(param_2 + *(int *)(iVar2 + 0x5c)),\n                     (void *)(*(int *)(iVar2 + 0x5c) + param_3),*(size_t *)(iVar2 + 0x2c));\n      return (void *)(uint)(iVar2 == 0);\n    }\n  }\n  uVar3 = FUN_0015e490();\n  __n = unaff_ESI[0xb];\n  if (unaff_ESI[0xc] != 0) {\nLAB_0015e880:\n                    /* WARNING: Subroutine does not return */\n    FUN_0005f0b0("../../gold/gold.h",0xc0,"convert_types",uVar3);\n  }\n  if (*(code **)(*unaff_ESI + 0xc) == FUN_00068180) {\n    uVar5 = unaff_ESI[9];\n    uVar6 = CONCAT44(unaff_ESI[10],FUN_00068180);\n  }\n  else {\n    uVar6 = (**(code **)(*unaff_ESI + 0xc))(unaff_ESI);\n    uVar5 = (uint)uVar6;\n  }\n  uVar3 = (undefined4)uVar6;\n  if ((int)((ulonglong)uVar6 >> 0x20) != 0) goto LAB_0015e880;\n  pvVar4 = (void *)unaff_ESI[0x17];\n  iVar2 = unaff_ESI[0x18];\n  uVar1 = unaff_ESI[0x19];\n  if (__n < uVar5) {\n    if (iVar2 + uVar5 <= uVar1) {\n      memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      goto LAB_0015e824;\n    }\n  }\n  else {\n    uVar5 = __n;\n    if (__n + iVar2 <= uVar1) {\n      pvVar4 = memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      unaff_ESI[0x18] = unaff_ESI[0x18] + __n;\n      return pvVar4;\n    }\n  }\n  __size = uVar1 * 2;\n  if (uVar1 == 0) {\n    __size = uVar5 << 7;\n  }\n  unaff_ESI[0x19] = __size;\n  pvVar4 = realloc(pvVar4,__size);\n  unaff_ESI[0x17] = (int)pvVar4;\n  if (pvVar4 == (void *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0005f060();\n  }\n  pvVar4 = memcpy((void *)((int)pvVar4 + unaff_ESI[0x18]),unaff_EDI,__n);\n  if (uVar5 <= __n) {\n    unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5;\n    return pvVar4;\n  }\nLAB_0015e824:\n  pvVar4 = memset((void *)(__n + unaff_ESI[0x18] + unaff_ESI[0x17]),0,uVar5 - __n);\n  unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5;\n  return pvVar4;\n}\n\n" comment (function_definition "void * FUN_0015e6f0(int *param_1,int param_2,int param_3)\n\n{\n  uint __n;\n  uint uVar1;\n  int iVar2;\n  undefined4 uVar3;\n  size_t __size;\n  void *pvVar4;\n  int *unaff_ESI;\n  void *unaff_EDI;\n  uint uVar5;\n  undefined8 uVar6;\n  \n  iVar2 = *param_1;\n  if ((-1 < param_2) && (param_2 < *(int *)(iVar2 + 0x60))) {\n    if ((-1 < param_3) && (param_3 < *(int *)(iVar2 + 0x60))) {\n      iVar2 = memcmp((void *)(param_2 + *(int *)(iVar2 + 0x5c)),\n                     (void *)(*(int *)(iVar2 + 0x5c) + param_3),*(size_t *)(iVar2 + 0x2c));\n      return (void *)(uint)(iVar2 == 0);\n    }\n  }\n  uVar3 = FUN_0015e490();\n  __n = unaff_ESI[0xb];\n  if (unaff_ESI[0xc] != 0) {\nLAB_0015e880:\n                    /* WARNING: Subroutine does not return */\n    FUN_0005f0b0("../../gold/gold.h",0xc0,"convert_types",uVar3);\n  }\n  if (*(code **)(*unaff_ESI + 0xc) == FUN_00068180) {\n    uVar5 = unaff_ESI[9];\n    uVar6 = CONCAT44(unaff_ESI[10],FUN_00068180);\n  }\n  else {\n    uVar6 = (**(code **)(*unaff_ESI + 0xc))(unaff_ESI);\n    uVar5 = (uint)uVar6;\n  }\n  uVar3 = (undefined4)uVar6;\n  if ((int)((ulonglong)uVar6 >> 0x20) != 0) goto LAB_0015e880;\n  pvVar4 = (void *)unaff_ESI[0x17];\n  iVar2 = unaff_ESI[0x18];\n  uVar1 = unaff_ESI[0x19];\n  if (__n < uVar5) {\n    if (iVar2 + uVar5 <= uVar1) {\n      memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      goto LAB_0015e824;\n    }\n  }\n  else {\n    uVar5 = __n;\n    if (__n + iVar2 <= uVar1) {\n      pvVar4 = memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      unaff_ESI[0x18] = unaff_ESI[0x18] + __n;\n      return pvVar4;\n    }\n  }\n  __size = uVar1 * 2;\n  if (uVar1 == 0) {\n    __size = uVar5 << 7;\n  }\n  unaff_ESI[0x19] = __size;\n  pvVar4 = realloc(pvVar4,__size);\n  unaff_ESI[0x17] = (int)pvVar4;\n  if (pvVar4 == (void *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0005f060();\n  }\n  pvVar4 = memcpy((void *)((int)pvVar4 + unaff_ESI[0x18]),unaff_EDI,__n);\n  if (uVar5 <= __n) {\n    unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5;\n    return pvVar4;\n  }\nLAB_0015e824:\n  pvVar4 = memset((void *)(__n + unaff_ESI[0x18] + unaff_ESI[0x17]),0,uVar5 - __n);\n  unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5;\n  return pvVar4;\n}" primitive_type (pointer_declarator "* FUN_0015e6f0(int *param_1,int param_2,int param_3)" * (function_declarator "FUN_0015e6f0(int *param_1,int param_2,int param_3)" identifier (parameter_list "(int *param_1,int param_2,int param_3)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) )))) (compound_statement "{\n  uint __n;\n  uint uVar1;\n  int iVar2;\n  undefined4 uVar3;\n  size_t __size;\n  void *pvVar4;\n  int *unaff_ESI;\n  void *unaff_EDI;\n  uint uVar5;\n  undefined8 uVar6;\n  \n  iVar2 = *param_1;\n  if ((-1 < param_2) && (param_2 < *(int *)(iVar2 + 0x60))) {\n    if ((-1 < param_3) && (param_3 < *(int *)(iVar2 + 0x60))) {\n      iVar2 = memcmp((void *)(param_2 + *(int *)(iVar2 + 0x5c)),\n                     (void *)(*(int *)(iVar2 + 0x5c) + param_3),*(size_t *)(iVar2 + 0x2c));\n      return (void *)(uint)(iVar2 == 0);\n    }\n  }\n  uVar3 = FUN_0015e490();\n  __n = unaff_ESI[0xb];\n  if (unaff_ESI[0xc] != 0) {\nLAB_0015e880:\n                    /* WARNING: Subroutine does not return */\n    FUN_0005f0b0("../../gold/gold.h",0xc0,"convert_types",uVar3);\n  }\n  if (*(code **)(*unaff_ESI + 0xc) == FUN_00068180) {\n    uVar5 = unaff_ESI[9];\n    uVar6 = CONCAT44(unaff_ESI[10],FUN_00068180);\n  }\n  else {\n    uVar6 = (**(code **)(*unaff_ESI + 0xc))(unaff_ESI);\n    uVar5 = (uint)uVar6;\n  }\n  uVar3 = (undefined4)uVar6;\n  if ((int)((ulonglong)uVar6 >> 0x20) != 0) goto LAB_0015e880;\n  pvVar4 = (void *)unaff_ESI[0x17];\n  iVar2 = unaff_ESI[0x18];\n  uVar1 = unaff_ESI[0x19];\n  if (__n < uVar5) {\n    if (iVar2 + uVar5 <= uVar1) {\n      memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      goto LAB_0015e824;\n    }\n  }\n  else {\n    uVar5 = __n;\n    if (__n + iVar2 <= uVar1) {\n      pvVar4 = memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      unaff_ESI[0x18] = unaff_ESI[0x18] + __n;\n      return pvVar4;\n    }\n  }\n  __size = uVar1 * 2;\n  if (uVar1 == 0) {\n    __size = uVar5 << 7;\n  }\n  unaff_ESI[0x19] = __size;\n  pvVar4 = realloc(pvVar4,__size);\n  unaff_ESI[0x17] = (int)pvVar4;\n  if (pvVar4 == (void *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0005f060();\n  }\n  pvVar4 = memcpy((void *)((int)pvVar4 + unaff_ESI[0x18]),unaff_EDI,__n);\n  if (uVar5 <= __n) {\n    unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5;\n    return pvVar4;\n  }\nLAB_0015e824:\n  pvVar4 = memset((void *)(__n + unaff_ESI[0x18] + unaff_ESI[0x17]),0,uVar5 - __n);\n  unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5;\n  return pvVar4;\n}" { (declaration "uint __n;" type_identifier identifier ;) (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "undefined4 uVar3;" type_identifier identifier ;) (declaration "size_t __size;" primitive_type identifier ;) (declaration "void *pvVar4;" primitive_type (pointer_declarator "*pvVar4" * identifier) ;) (declaration "int *unaff_ESI;" primitive_type (pointer_declarator "*unaff_ESI" * identifier) ;) (declaration "void *unaff_EDI;" primitive_type (pointer_declarator "*unaff_EDI" * identifier) ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "undefined8 uVar6;" type_identifier identifier ;) (expression_statement "iVar2 = *param_1;" (assignment_expression "iVar2 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (if_statement "if ((-1 < param_2) && (param_2 < *(int *)(iVar2 + 0x60))) {\n    if ((-1 < param_3) && (param_3 < *(int *)(iVar2 + 0x60))) {\n      iVar2 = memcmp((void *)(param_2 + *(int *)(iVar2 + 0x5c)),\n                     (void *)(*(int *)(iVar2 + 0x5c) + param_3),*(size_t *)(iVar2 + 0x2c));\n      return (void *)(uint)(iVar2 == 0);\n    }\n  }" if (parenthesized_expression "((-1 < param_2) && (param_2 < *(int *)(iVar2 + 0x60)))" ( (binary_expression "(-1 < param_2) && (param_2 < *(int *)(iVar2 + 0x60))" (parenthesized_expression "(-1 < param_2)" ( (binary_expression "-1 < param_2" number_literal < identifier) )) && (parenthesized_expression "(param_2 < *(int *)(iVar2 + 0x60))" ( (binary_expression "param_2 < *(int *)(iVar2 + 0x60)" identifier < (pointer_expression "*(int *)(iVar2 + 0x60)" * (cast_expression "(int *)(iVar2 + 0x60)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x60)" ( (binary_expression "iVar2 + 0x60" identifier + number_literal) ))))) ))) )) (compound_statement "{\n    if ((-1 < param_3) && (param_3 < *(int *)(iVar2 + 0x60))) {\n      iVar2 = memcmp((void *)(param_2 + *(int *)(iVar2 + 0x5c)),\n                     (void *)(*(int *)(iVar2 + 0x5c) + param_3),*(size_t *)(iVar2 + 0x2c));\n      return (void *)(uint)(iVar2 == 0);\n    }\n  }" { (if_statement "if ((-1 < param_3) && (param_3 < *(int *)(iVar2 + 0x60))) {\n      iVar2 = memcmp((void *)(param_2 + *(int *)(iVar2 + 0x5c)),\n                     (void *)(*(int *)(iVar2 + 0x5c) + param_3),*(size_t *)(iVar2 + 0x2c));\n      return (void *)(uint)(iVar2 == 0);\n    }" if (parenthesized_expression "((-1 < param_3) && (param_3 < *(int *)(iVar2 + 0x60)))" ( (binary_expression "(-1 < param_3) && (param_3 < *(int *)(iVar2 + 0x60))" (parenthesized_expression "(-1 < param_3)" ( (binary_expression "-1 < param_3" number_literal < identifier) )) && (parenthesized_expression "(param_3 < *(int *)(iVar2 + 0x60))" ( (binary_expression "param_3 < *(int *)(iVar2 + 0x60)" identifier < (pointer_expression "*(int *)(iVar2 + 0x60)" * (cast_expression "(int *)(iVar2 + 0x60)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x60)" ( (binary_expression "iVar2 + 0x60" identifier + number_literal) ))))) ))) )) (compound_statement "{\n      iVar2 = memcmp((void *)(param_2 + *(int *)(iVar2 + 0x5c)),\n                     (void *)(*(int *)(iVar2 + 0x5c) + param_3),*(size_t *)(iVar2 + 0x2c));\n      return (void *)(uint)(iVar2 == 0);\n    }" { (expression_statement "iVar2 = memcmp((void *)(param_2 + *(int *)(iVar2 + 0x5c)),\n                     (void *)(*(int *)(iVar2 + 0x5c) + param_3),*(size_t *)(iVar2 + 0x2c));" (assignment_expression "iVar2 = memcmp((void *)(param_2 + *(int *)(iVar2 + 0x5c)),\n                     (void *)(*(int *)(iVar2 + 0x5c) + param_3),*(size_t *)(iVar2 + 0x2c))" identifier = (call_expression "memcmp((void *)(param_2 + *(int *)(iVar2 + 0x5c)),\n                     (void *)(*(int *)(iVar2 + 0x5c) + param_3),*(size_t *)(iVar2 + 0x2c))" identifier (argument_list "((void *)(param_2 + *(int *)(iVar2 + 0x5c)),\n                     (void *)(*(int *)(iVar2 + 0x5c) + param_3),*(size_t *)(iVar2 + 0x2c))" ( (cast_expression "(void *)(param_2 + *(int *)(iVar2 + 0x5c))" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + *(int *)(iVar2 + 0x5c))" ( (binary_expression "param_2 + *(int *)(iVar2 + 0x5c)" identifier + (pointer_expression "*(int *)(iVar2 + 0x5c)" * (cast_expression "(int *)(iVar2 + 0x5c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x5c)" ( (binary_expression "iVar2 + 0x5c" identifier + number_literal) ))))) ))) , (cast_expression "(void *)(*(int *)(iVar2 + 0x5c) + param_3)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(iVar2 + 0x5c) + param_3)" ( (binary_expression "*(int *)(iVar2 + 0x5c) + param_3" (pointer_expression "*(int *)(iVar2 + 0x5c)" * (cast_expression "(int *)(iVar2 + 0x5c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x5c)" ( (binary_expression "iVar2 + 0x5c" identifier + number_literal) )))) + identifier) ))) , (pointer_expression "*(size_t *)(iVar2 + 0x2c)" * (cast_expression "(size_t *)(iVar2 + 0x2c)" ( (type_descriptor "size_t *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x2c)" ( (binary_expression "iVar2 + 0x2c" identifier + number_literal) )))) )))) ;) (return_statement "return (void *)(uint)(iVar2 == 0);" return (cast_expression "(void *)(uint)(iVar2 == 0)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "(uint)(iVar2 == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )))) ;) })) })) (expression_statement "uVar3 = FUN_0015e490();" (assignment_expression "uVar3 = FUN_0015e490()" identifier = (call_expression "FUN_0015e490()" identifier (argument_list "()" ( )))) ;) (expression_statement "__n = unaff_ESI[0xb];" (assignment_expression "__n = unaff_ESI[0xb]" identifier = (subscript_expression "unaff_ESI[0xb]" identifier [ number_literal ])) ;) (if_statement "if (unaff_ESI[0xc] != 0) {\nLAB_0015e880:\n                    /* WARNING: Subroutine does not return */\n    FUN_0005f0b0("../../gold/gold.h",0xc0,"convert_types",uVar3);\n  }" if (parenthesized_expression "(unaff_ESI[0xc] != 0)" ( (binary_expression "unaff_ESI[0xc] != 0" (subscript_expression "unaff_ESI[0xc]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\nLAB_0015e880:\n                    /* WARNING: Subroutine does not return */\n    FUN_0005f0b0("../../gold/gold.h",0xc0,"convert_types",uVar3);\n  }" { (labeled_statement "LAB_0015e880:\n                    /* WARNING: Subroutine does not return */\n    FUN_0005f0b0("../../gold/gold.h",0xc0,"convert_types",uVar3);" statement_identifier : comment (expression_statement "FUN_0005f0b0("../../gold/gold.h",0xc0,"convert_types",uVar3);" (call_expression "FUN_0005f0b0("../../gold/gold.h",0xc0,"convert_types",uVar3)" identifier (argument_list "("../../gold/gold.h",0xc0,"convert_types",uVar3)" ( (string_literal ""../../gold/gold.h"" " string_content ") , number_literal , (string_literal ""convert_types"" " string_content ") , identifier ))) ;)) })) (if_statement "if (*(code **)(*unaff_ESI + 0xc) == FUN_00068180) {\n    uVar5 = unaff_ESI[9];\n    uVar6 = CONCAT44(unaff_ESI[10],FUN_00068180);\n  }\n  else {\n    uVar6 = (**(code **)(*unaff_ESI + 0xc))(unaff_ESI);\n    uVar5 = (uint)uVar6;\n  }" if (parenthesized_expression "(*(code **)(*unaff_ESI + 0xc) == FUN_00068180)" ( (binary_expression "*(code **)(*unaff_ESI + 0xc) == FUN_00068180" (pointer_expression "*(code **)(*unaff_ESI + 0xc)" * (cast_expression "(code **)(*unaff_ESI + 0xc)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*unaff_ESI + 0xc)" ( (binary_expression "*unaff_ESI + 0xc" (pointer_expression "*unaff_ESI" * identifier) + number_literal) )))) == identifier) )) (compound_statement "{\n    uVar5 = unaff_ESI[9];\n    uVar6 = CONCAT44(unaff_ESI[10],FUN_00068180);\n  }" { (expression_statement "uVar5 = unaff_ESI[9];" (assignment_expression "uVar5 = unaff_ESI[9]" identifier = (subscript_expression "unaff_ESI[9]" identifier [ number_literal ])) ;) (expression_statement "uVar6 = CONCAT44(unaff_ESI[10],FUN_00068180);" (assignment_expression "uVar6 = CONCAT44(unaff_ESI[10],FUN_00068180)" identifier = (call_expression "CONCAT44(unaff_ESI[10],FUN_00068180)" identifier (argument_list "(unaff_ESI[10],FUN_00068180)" ( (subscript_expression "unaff_ESI[10]" identifier [ number_literal ]) , identifier )))) ;) }) (else_clause "else {\n    uVar6 = (**(code **)(*unaff_ESI + 0xc))(unaff_ESI);\n    uVar5 = (uint)uVar6;\n  }" else (compound_statement "{\n    uVar6 = (**(code **)(*unaff_ESI + 0xc))(unaff_ESI);\n    uVar5 = (uint)uVar6;\n  }" { (expression_statement "uVar6 = (**(code **)(*unaff_ESI + 0xc))(unaff_ESI);" (assignment_expression "uVar6 = (**(code **)(*unaff_ESI + 0xc))(unaff_ESI)" identifier = (call_expression "(**(code **)(*unaff_ESI + 0xc))(unaff_ESI)" (parenthesized_expression "(**(code **)(*unaff_ESI + 0xc))" ( (pointer_expression "**(code **)(*unaff_ESI + 0xc)" * (pointer_expression "*(code **)(*unaff_ESI + 0xc)" * (cast_expression "(code **)(*unaff_ESI + 0xc)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*unaff_ESI + 0xc)" ( (binary_expression "*unaff_ESI + 0xc" (pointer_expression "*unaff_ESI" * identifier) + number_literal) ))))) )) (argument_list "(unaff_ESI)" ( identifier )))) ;) (expression_statement "uVar5 = (uint)uVar6;" (assignment_expression "uVar5 = (uint)uVar6" identifier = (cast_expression "(uint)uVar6" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) }))) (expression_statement "uVar3 = (undefined4)uVar6;" (assignment_expression "uVar3 = (undefined4)uVar6" identifier = (cast_expression "(undefined4)uVar6" ( (type_descriptor "undefined4" type_identifier) ) identifier)) ;) (if_statement "if ((int)((ulonglong)uVar6 >> 0x20) != 0) goto LAB_0015e880;" if (parenthesized_expression "((int)((ulonglong)uVar6 >> 0x20) != 0)" ( (binary_expression "(int)((ulonglong)uVar6 >> 0x20) != 0" (cast_expression "(int)((ulonglong)uVar6 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)uVar6 >> 0x20)" ( (binary_expression "(ulonglong)uVar6 >> 0x20" (cast_expression "(ulonglong)uVar6" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) != number_literal) )) (goto_statement "goto LAB_0015e880;" goto statement_identifier ;)) (expression_statement "pvVar4 = (void *)unaff_ESI[0x17];" (assignment_expression "pvVar4 = (void *)unaff_ESI[0x17]" identifier = (cast_expression "(void *)unaff_ESI[0x17]" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "unaff_ESI[0x17]" identifier [ number_literal ]))) ;) (expression_statement "iVar2 = unaff_ESI[0x18];" (assignment_expression "iVar2 = unaff_ESI[0x18]" identifier = (subscript_expression "unaff_ESI[0x18]" identifier [ number_literal ])) ;) (expression_statement "uVar1 = unaff_ESI[0x19];" (assignment_expression "uVar1 = unaff_ESI[0x19]" identifier = (subscript_expression "unaff_ESI[0x19]" identifier [ number_literal ])) ;) (if_statement "if (__n < uVar5) {\n    if (iVar2 + uVar5 <= uVar1) {\n      memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      goto LAB_0015e824;\n    }\n  }\n  else {\n    uVar5 = __n;\n    if (__n + iVar2 <= uVar1) {\n      pvVar4 = memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      unaff_ESI[0x18] = unaff_ESI[0x18] + __n;\n      return pvVar4;\n    }\n  }" if (parenthesized_expression "(__n < uVar5)" ( (binary_expression "__n < uVar5" identifier < identifier) )) (compound_statement "{\n    if (iVar2 + uVar5 <= uVar1) {\n      memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      goto LAB_0015e824;\n    }\n  }" { (if_statement "if (iVar2 + uVar5 <= uVar1) {\n      memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      goto LAB_0015e824;\n    }" if (parenthesized_expression "(iVar2 + uVar5 <= uVar1)" ( (binary_expression "iVar2 + uVar5 <= uVar1" (binary_expression "iVar2 + uVar5" identifier + identifier) <= identifier) )) (compound_statement "{\n      memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      goto LAB_0015e824;\n    }" { (expression_statement "memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);" (call_expression "memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n)" identifier (argument_list "((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n)" ( (cast_expression "(void *)(iVar2 + (int)pvVar4)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + (int)pvVar4)" ( (binary_expression "iVar2 + (int)pvVar4" identifier + (cast_expression "(int)pvVar4" ( (type_descriptor "int" primitive_type) ) identifier)) ))) , identifier , identifier ))) ;) (goto_statement "goto LAB_0015e824;" goto statement_identifier ;) })) }) (else_clause "else {\n    uVar5 = __n;\n    if (__n + iVar2 <= uVar1) {\n      pvVar4 = memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      unaff_ESI[0x18] = unaff_ESI[0x18] + __n;\n      return pvVar4;\n    }\n  }" else (compound_statement "{\n    uVar5 = __n;\n    if (__n + iVar2 <= uVar1) {\n      pvVar4 = memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      unaff_ESI[0x18] = unaff_ESI[0x18] + __n;\n      return pvVar4;\n    }\n  }" { (expression_statement "uVar5 = __n;" (assignment_expression "uVar5 = __n" identifier = identifier) ;) (if_statement "if (__n + iVar2 <= uVar1) {\n      pvVar4 = memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      unaff_ESI[0x18] = unaff_ESI[0x18] + __n;\n      return pvVar4;\n    }" if (parenthesized_expression "(__n + iVar2 <= uVar1)" ( (binary_expression "__n + iVar2 <= uVar1" (binary_expression "__n + iVar2" identifier + identifier) <= identifier) )) (compound_statement "{\n      pvVar4 = memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      unaff_ESI[0x18] = unaff_ESI[0x18] + __n;\n      return pvVar4;\n    }" { (expression_statement "pvVar4 = memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);" (assignment_expression "pvVar4 = memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n)" identifier = (call_expression "memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n)" identifier (argument_list "((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n)" ( (cast_expression "(void *)(iVar2 + (int)pvVar4)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + (int)pvVar4)" ( (binary_expression "iVar2 + (int)pvVar4" identifier + (cast_expression "(int)pvVar4" ( (type_descriptor "int" primitive_type) ) identifier)) ))) , identifier , identifier )))) ;) (expression_statement "unaff_ESI[0x18] = unaff_ESI[0x18] + __n;" (assignment_expression "unaff_ESI[0x18] = unaff_ESI[0x18] + __n" (subscript_expression "unaff_ESI[0x18]" identifier [ number_literal ]) = (binary_expression "unaff_ESI[0x18] + __n" (subscript_expression "unaff_ESI[0x18]" identifier [ number_literal ]) + identifier)) ;) (return_statement "return pvVar4;" return identifier ;) })) }))) (expression_statement "__size = uVar1 * 2;" (assignment_expression "__size = uVar1 * 2" identifier = (binary_expression "uVar1 * 2" identifier * number_literal)) ;) (if_statement "if (uVar1 == 0) {\n    __size = uVar5 << 7;\n  }" if (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    __size = uVar5 << 7;\n  }" { (expression_statement "__size = uVar5 << 7;" (assignment_expression "__size = uVar5 << 7" identifier = (binary_expression "uVar5 << 7" identifier << number_literal)) ;) })) (expression_statement "unaff_ESI[0x19] = __size;" (assignment_expression "unaff_ESI[0x19] = __size" (subscript_expression "unaff_ESI[0x19]" identifier [ number_literal ]) = identifier) ;) (expression_statement "pvVar4 = realloc(pvVar4,__size);" (assignment_expression "pvVar4 = realloc(pvVar4,__size)" identifier = (call_expression "realloc(pvVar4,__size)" identifier (argument_list "(pvVar4,__size)" ( identifier , identifier )))) ;) (expression_statement "unaff_ESI[0x17] = (int)pvVar4;" (assignment_expression "unaff_ESI[0x17] = (int)pvVar4" (subscript_expression "unaff_ESI[0x17]" identifier [ number_literal ]) = (cast_expression "(int)pvVar4" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (if_statement "if (pvVar4 == (void *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0005f060();\n  }" if (parenthesized_expression "(pvVar4 == (void *)0x0)" ( (binary_expression "pvVar4 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_0005f060();\n  }" { comment (expression_statement "FUN_0005f060();" (call_expression "FUN_0005f060()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "pvVar4 = memcpy((void *)((int)pvVar4 + unaff_ESI[0x18]),unaff_EDI,__n);" (assignment_expression "pvVar4 = memcpy((void *)((int)pvVar4 + unaff_ESI[0x18]),unaff_EDI,__n)" identifier = (call_expression "memcpy((void *)((int)pvVar4 + unaff_ESI[0x18]),unaff_EDI,__n)" identifier (argument_list "((void *)((int)pvVar4 + unaff_ESI[0x18]),unaff_EDI,__n)" ( (cast_expression "(void *)((int)pvVar4 + unaff_ESI[0x18])" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar4 + unaff_ESI[0x18])" ( (binary_expression "(int)pvVar4 + unaff_ESI[0x18]" (cast_expression "(int)pvVar4" ( (type_descriptor "int" primitive_type) ) identifier) + (subscript_expression "unaff_ESI[0x18]" identifier [ number_literal ])) ))) , identifier , identifier )))) ;) (if_statement "if (uVar5 <= __n) {\n    unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5;\n    return pvVar4;\n  }" if (parenthesized_expression "(uVar5 <= __n)" ( (binary_expression "uVar5 <= __n" identifier <= identifier) )) (compound_statement "{\n    unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5;\n    return pvVar4;\n  }" { (expression_statement "unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5;" (assignment_expression "unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5" (subscript_expression "unaff_ESI[0x18]" identifier [ number_literal ]) = (binary_expression "unaff_ESI[0x18] + uVar5" (subscript_expression "unaff_ESI[0x18]" identifier [ number_literal ]) + identifier)) ;) (return_statement "return pvVar4;" return identifier ;) })) (labeled_statement "LAB_0015e824:\n  pvVar4 = memset((void *)(__n + unaff_ESI[0x18] + unaff_ESI[0x17]),0,uVar5 - __n);" statement_identifier : (expression_statement "pvVar4 = memset((void *)(__n + unaff_ESI[0x18] + unaff_ESI[0x17]),0,uVar5 - __n);" (assignment_expression "pvVar4 = memset((void *)(__n + unaff_ESI[0x18] + unaff_ESI[0x17]),0,uVar5 - __n)" identifier = (call_expression "memset((void *)(__n + unaff_ESI[0x18] + unaff_ESI[0x17]),0,uVar5 - __n)" identifier (argument_list "((void *)(__n + unaff_ESI[0x18] + unaff_ESI[0x17]),0,uVar5 - __n)" ( (cast_expression "(void *)(__n + unaff_ESI[0x18] + unaff_ESI[0x17])" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__n + unaff_ESI[0x18] + unaff_ESI[0x17])" ( (binary_expression "__n + unaff_ESI[0x18] + unaff_ESI[0x17]" (binary_expression "__n + unaff_ESI[0x18]" identifier + (subscript_expression "unaff_ESI[0x18]" identifier [ number_literal ])) + (subscript_expression "unaff_ESI[0x17]" identifier [ number_literal ])) ))) , number_literal , (binary_expression "uVar5 - __n" identifier - identifier) )))) ;)) (expression_statement "unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5;" (assignment_expression "unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5" (subscript_expression "unaff_ESI[0x18]" identifier [ number_literal ]) = (binary_expression "unaff_ESI[0x18] + uVar5" (subscript_expression "unaff_ESI[0x18]" identifier [ number_literal ]) + identifier)) ;) (return_statement "return pvVar4;" return identifier ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n/* DWARF original prototype: bool operator()(Merge_data_eq * this, Merge_data_key k1, Merge_data_key\n   k2) */\n\nbool __thiscall\ngold::Output_merge_data::Merge_data_eq::operator()\n          (Merge_data_eq *this,Merge_data_key k1,Merge_data_key k2)\n\n{\n  Output_merge_data *pOVar1;\n  int iVar2;\n  Output_merge_data *unaff_EBX;\n  Merge_data_key unaff_ESI;\n  Output_merge_data *unaff_EDI;\n  \n  pOVar1 = this->pomd_;\n  if ((-1 < k1) && (k1 < (int)pOVar1->len_)) {\n    if ((-1 < k2) && (k2 < (int)pOVar1->len_)) {\n      iVar2 = memcmp(pOVar1->p_ + k1,pOVar1->p_ + k2,\n                     (size_t)(pOVar1->super_Output_merge_base).entsize_);\n      return iVar2 == 0;\n    }\n  }\n                    /* WARNING: Subroutine does not return */\n  constant(unaff_EBX,unaff_ESI,unaff_EDI);\n}\n\n" comment comment (function_definition "bool __thiscall\ngold::Output_merge_data::Merge_data_eq::operator()\n          (Merge_data_eq *this,Merge_data_key k1,Merge_data_key k2)\n\n{\n  Output_merge_data *pOVar1;\n  int iVar2;\n  Output_merge_data *unaff_EBX;\n  Merge_data_key unaff_ESI;\n  Output_merge_data *unaff_EDI;\n  \n  pOVar1 = this->pomd_;\n  if ((-1 < k1) && (k1 < (int)pOVar1->len_)) {\n    if ((-1 < k2) && (k2 < (int)pOVar1->len_)) {\n      iVar2 = memcmp(pOVar1->p_ + k1,pOVar1->p_ + k2,\n                     (size_t)(pOVar1->super_Output_merge_base).entsize_);\n      return iVar2 == 0;\n    }\n  }\n                    /* WARNING: Subroutine does not return */\n  constant(unaff_EBX,unaff_ESI,unaff_EDI);\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Output_merge_data::Merge_data_eq::" identifier : : identifier : : identifier : :) (function_declarator "operator()\n          (Merge_data_eq *this,Merge_data_key k1,Merge_data_key k2)" (function_declarator "operator()" identifier (parameter_list "()" ( ))) (parameter_list "(Merge_data_eq *this,Merge_data_key k1,Merge_data_key k2)" ( (parameter_declaration "Merge_data_eq *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "Merge_data_key k1" type_identifier identifier) , (parameter_declaration "Merge_data_key k2" type_identifier identifier) ))) (compound_statement "{\n  Output_merge_data *pOVar1;\n  int iVar2;\n  Output_merge_data *unaff_EBX;\n  Merge_data_key unaff_ESI;\n  Output_merge_data *unaff_EDI;\n  \n  pOVar1 = this->pomd_;\n  if ((-1 < k1) && (k1 < (int)pOVar1->len_)) {\n    if ((-1 < k2) && (k2 < (int)pOVar1->len_)) {\n      iVar2 = memcmp(pOVar1->p_ + k1,pOVar1->p_ + k2,\n                     (size_t)(pOVar1->super_Output_merge_base).entsize_);\n      return iVar2 == 0;\n    }\n  }\n                    /* WARNING: Subroutine does not return */\n  constant(unaff_EBX,unaff_ESI,unaff_EDI);\n}" { (declaration "Output_merge_data *pOVar1;" type_identifier (pointer_declarator "*pOVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "Output_merge_data *unaff_EBX;" type_identifier (pointer_declarator "*unaff_EBX" * identifier) ;) (declaration "Merge_data_key unaff_ESI;" type_identifier identifier ;) (declaration "Output_merge_data *unaff_EDI;" type_identifier (pointer_declarator "*unaff_EDI" * identifier) ;) (expression_statement "pOVar1 = this->pomd_;" (assignment_expression "pOVar1 = this->pomd_" identifier = (field_expression "this->pomd_" identifier -> field_identifier)) ;) (if_statement "if ((-1 < k1) && (k1 < (int)pOVar1->len_)) {\n    if ((-1 < k2) && (k2 < (int)pOVar1->len_)) {\n      iVar2 = memcmp(pOVar1->p_ + k1,pOVar1->p_ + k2,\n                     (size_t)(pOVar1->super_Output_merge_base).entsize_);\n      return iVar2 == 0;\n    }\n  }" if (parenthesized_expression "((-1 < k1) && (k1 < (int)pOVar1->len_))" ( (binary_expression "(-1 < k1) && (k1 < (int)pOVar1->len_)" (parenthesized_expression "(-1 < k1)" ( (binary_expression "-1 < k1" number_literal < identifier) )) && (parenthesized_expression "(k1 < (int)pOVar1->len_)" ( (binary_expression "k1 < (int)pOVar1->len_" identifier < (cast_expression "(int)pOVar1->len_" ( (type_descriptor "int" primitive_type) ) (field_expression "pOVar1->len_" identifier -> field_identifier))) ))) )) (compound_statement "{\n    if ((-1 < k2) && (k2 < (int)pOVar1->len_)) {\n      iVar2 = memcmp(pOVar1->p_ + k1,pOVar1->p_ + k2,\n                     (size_t)(pOVar1->super_Output_merge_base).entsize_);\n      return iVar2 == 0;\n    }\n  }" { (if_statement "if ((-1 < k2) && (k2 < (int)pOVar1->len_)) {\n      iVar2 = memcmp(pOVar1->p_ + k1,pOVar1->p_ + k2,\n                     (size_t)(pOVar1->super_Output_merge_base).entsize_);\n      return iVar2 == 0;\n    }" if (parenthesized_expression "((-1 < k2) && (k2 < (int)pOVar1->len_))" ( (binary_expression "(-1 < k2) && (k2 < (int)pOVar1->len_)" (parenthesized_expression "(-1 < k2)" ( (binary_expression "-1 < k2" number_literal < identifier) )) && (parenthesized_expression "(k2 < (int)pOVar1->len_)" ( (binary_expression "k2 < (int)pOVar1->len_" identifier < (cast_expression "(int)pOVar1->len_" ( (type_descriptor "int" primitive_type) ) (field_expression "pOVar1->len_" identifier -> field_identifier))) ))) )) (compound_statement "{\n      iVar2 = memcmp(pOVar1->p_ + k1,pOVar1->p_ + k2,\n                     (size_t)(pOVar1->super_Output_merge_base).entsize_);\n      return iVar2 == 0;\n    }" { (expression_statement "iVar2 = memcmp(pOVar1->p_ + k1,pOVar1->p_ + k2,\n                     (size_t)(pOVar1->super_Output_merge_base).entsize_);" (assignment_expression "iVar2 = memcmp(pOVar1->p_ + k1,pOVar1->p_ + k2,\n                     (size_t)(pOVar1->super_Output_merge_base).entsize_)" identifier = (call_expression "memcmp(pOVar1->p_ + k1,pOVar1->p_ + k2,\n                     (size_t)(pOVar1->super_Output_merge_base).entsize_)" identifier (argument_list "(pOVar1->p_ + k1,pOVar1->p_ + k2,\n                     (size_t)(pOVar1->super_Output_merge_base).entsize_)" ( (binary_expression "pOVar1->p_ + k1" (field_expression "pOVar1->p_" identifier -> field_identifier) + identifier) , (binary_expression "pOVar1->p_ + k2" (field_expression "pOVar1->p_" identifier -> field_identifier) + identifier) , (cast_expression "(size_t)(pOVar1->super_Output_merge_base).entsize_" ( (type_descriptor "size_t" primitive_type) ) (field_expression "(pOVar1->super_Output_merge_base).entsize_" (parenthesized_expression "(pOVar1->super_Output_merge_base)" ( (field_expression "pOVar1->super_Output_merge_base" identifier -> field_identifier) )) . field_identifier)) )))) ;) (return_statement "return iVar2 == 0;" return (binary_expression "iVar2 == 0" identifier == number_literal) ;) })) })) comment (expression_statement "constant(unaff_EBX,unaff_ESI,unaff_EDI);" (call_expression "constant(unaff_EBX,unaff_ESI,unaff_EDI)" identifier (argument_list "(unaff_EBX,unaff_ESI,unaff_EDI)" ( identifier , identifier , identifier ))) ;) })))
(translation_unit "void * FUN_0015e6f0(int *param_1,int param_2,int param_3)\n\n{\n  uint __n;\n  uint uVar1;\n  int iVar2;\n  undefined4 uVar3;\n  size_t __size;\n  void *pvVar4;\n  int *unaff_ESI;\n  void *unaff_EDI;\n  uint uVar5;\n  undefined8 uVar6;\n  \n  iVar2 = *param_1;\n  if ((-1 < param_2) && (param_2 < *(int *)(iVar2 + 0x60))) {\n    if ((-1 < param_3) && (param_3 < *(int *)(iVar2 + 0x60))) {\n      iVar2 = memcmp((void *)(param_2 + *(int *)(iVar2 + 0x5c)),\n                     (void *)(*(int *)(iVar2 + 0x5c) + param_3),*(size_t *)(iVar2 + 0x2c));\n      return (void *)(uint)(iVar2 == 0);\n    }\n  }\n  uVar3 = FUN_0015e490();\n  __n = unaff_ESI[0xb];\n  if (unaff_ESI[0xc] != 0) {\nLAB_0015e880:\n                    \n    FUN_0005f0b0("../../gold/gold.h",0xc0,"convert_types",uVar3);\n  }\n  if (*(code **)(*unaff_ESI + 0xc) == FUN_00068180) {\n    uVar5 = unaff_ESI[9];\n    uVar6 = CONCAT44(unaff_ESI[10],FUN_00068180);\n  }\n  else {\n    uVar6 = (**(code **)(*unaff_ESI + 0xc))(unaff_ESI);\n    uVar5 = (uint)uVar6;\n  }\n  uVar3 = (undefined4)uVar6;\n  if ((int)((ulonglong)uVar6 >> 0x20) != 0) goto LAB_0015e880;\n  pvVar4 = (void *)unaff_ESI[0x17];\n  iVar2 = unaff_ESI[0x18];\n  uVar1 = unaff_ESI[0x19];\n  if (__n < uVar5) {\n    if (iVar2 + uVar5 <= uVar1) {\n      memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      goto LAB_0015e824;\n    }\n  }\n  else {\n    uVar5 = __n;\n    if (__n + iVar2 <= uVar1) {\n      pvVar4 = memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      unaff_ESI[0x18] = unaff_ESI[0x18] + __n;\n      return pvVar4;\n    }\n  }\n  __size = uVar1 * 2;\n  if (uVar1 == 0) {\n    __size = uVar5 << 7;\n  }\n  unaff_ESI[0x19] = __size;\n  pvVar4 = realloc(pvVar4,__size);\n  unaff_ESI[0x17] = (int)pvVar4;\n  if (pvVar4 == (void *)0x0) {\n                    \n    FUN_0005f060();\n  }\n  pvVar4 = memcpy((void *)((int)pvVar4 + unaff_ESI[0x18]),unaff_EDI,__n);\n  if (uVar5 <= __n) {\n    unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5;\n    return pvVar4;\n  }\nLAB_0015e824:\n  pvVar4 = memset((void *)(__n + unaff_ESI[0x18] + unaff_ESI[0x17]),0,uVar5 - __n);\n  unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5;\n  return pvVar4;\n}\n\n" (function_definition "void * FUN_0015e6f0(int *param_1,int param_2,int param_3)\n\n{\n  uint __n;\n  uint uVar1;\n  int iVar2;\n  undefined4 uVar3;\n  size_t __size;\n  void *pvVar4;\n  int *unaff_ESI;\n  void *unaff_EDI;\n  uint uVar5;\n  undefined8 uVar6;\n  \n  iVar2 = *param_1;\n  if ((-1 < param_2) && (param_2 < *(int *)(iVar2 + 0x60))) {\n    if ((-1 < param_3) && (param_3 < *(int *)(iVar2 + 0x60))) {\n      iVar2 = memcmp((void *)(param_2 + *(int *)(iVar2 + 0x5c)),\n                     (void *)(*(int *)(iVar2 + 0x5c) + param_3),*(size_t *)(iVar2 + 0x2c));\n      return (void *)(uint)(iVar2 == 0);\n    }\n  }\n  uVar3 = FUN_0015e490();\n  __n = unaff_ESI[0xb];\n  if (unaff_ESI[0xc] != 0) {\nLAB_0015e880:\n                    \n    FUN_0005f0b0("../../gold/gold.h",0xc0,"convert_types",uVar3);\n  }\n  if (*(code **)(*unaff_ESI + 0xc) == FUN_00068180) {\n    uVar5 = unaff_ESI[9];\n    uVar6 = CONCAT44(unaff_ESI[10],FUN_00068180);\n  }\n  else {\n    uVar6 = (**(code **)(*unaff_ESI + 0xc))(unaff_ESI);\n    uVar5 = (uint)uVar6;\n  }\n  uVar3 = (undefined4)uVar6;\n  if ((int)((ulonglong)uVar6 >> 0x20) != 0) goto LAB_0015e880;\n  pvVar4 = (void *)unaff_ESI[0x17];\n  iVar2 = unaff_ESI[0x18];\n  uVar1 = unaff_ESI[0x19];\n  if (__n < uVar5) {\n    if (iVar2 + uVar5 <= uVar1) {\n      memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      goto LAB_0015e824;\n    }\n  }\n  else {\n    uVar5 = __n;\n    if (__n + iVar2 <= uVar1) {\n      pvVar4 = memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      unaff_ESI[0x18] = unaff_ESI[0x18] + __n;\n      return pvVar4;\n    }\n  }\n  __size = uVar1 * 2;\n  if (uVar1 == 0) {\n    __size = uVar5 << 7;\n  }\n  unaff_ESI[0x19] = __size;\n  pvVar4 = realloc(pvVar4,__size);\n  unaff_ESI[0x17] = (int)pvVar4;\n  if (pvVar4 == (void *)0x0) {\n                    \n    FUN_0005f060();\n  }\n  pvVar4 = memcpy((void *)((int)pvVar4 + unaff_ESI[0x18]),unaff_EDI,__n);\n  if (uVar5 <= __n) {\n    unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5;\n    return pvVar4;\n  }\nLAB_0015e824:\n  pvVar4 = memset((void *)(__n + unaff_ESI[0x18] + unaff_ESI[0x17]),0,uVar5 - __n);\n  unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5;\n  return pvVar4;\n}" primitive_type (pointer_declarator "* FUN_0015e6f0(int *param_1,int param_2,int param_3)" * (function_declarator "FUN_0015e6f0(int *param_1,int param_2,int param_3)" identifier (parameter_list "(int *param_1,int param_2,int param_3)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) )))) (compound_statement "{\n  uint __n;\n  uint uVar1;\n  int iVar2;\n  undefined4 uVar3;\n  size_t __size;\n  void *pvVar4;\n  int *unaff_ESI;\n  void *unaff_EDI;\n  uint uVar5;\n  undefined8 uVar6;\n  \n  iVar2 = *param_1;\n  if ((-1 < param_2) && (param_2 < *(int *)(iVar2 + 0x60))) {\n    if ((-1 < param_3) && (param_3 < *(int *)(iVar2 + 0x60))) {\n      iVar2 = memcmp((void *)(param_2 + *(int *)(iVar2 + 0x5c)),\n                     (void *)(*(int *)(iVar2 + 0x5c) + param_3),*(size_t *)(iVar2 + 0x2c));\n      return (void *)(uint)(iVar2 == 0);\n    }\n  }\n  uVar3 = FUN_0015e490();\n  __n = unaff_ESI[0xb];\n  if (unaff_ESI[0xc] != 0) {\nLAB_0015e880:\n                    \n    FUN_0005f0b0("../../gold/gold.h",0xc0,"convert_types",uVar3);\n  }\n  if (*(code **)(*unaff_ESI + 0xc) == FUN_00068180) {\n    uVar5 = unaff_ESI[9];\n    uVar6 = CONCAT44(unaff_ESI[10],FUN_00068180);\n  }\n  else {\n    uVar6 = (**(code **)(*unaff_ESI + 0xc))(unaff_ESI);\n    uVar5 = (uint)uVar6;\n  }\n  uVar3 = (undefined4)uVar6;\n  if ((int)((ulonglong)uVar6 >> 0x20) != 0) goto LAB_0015e880;\n  pvVar4 = (void *)unaff_ESI[0x17];\n  iVar2 = unaff_ESI[0x18];\n  uVar1 = unaff_ESI[0x19];\n  if (__n < uVar5) {\n    if (iVar2 + uVar5 <= uVar1) {\n      memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      goto LAB_0015e824;\n    }\n  }\n  else {\n    uVar5 = __n;\n    if (__n + iVar2 <= uVar1) {\n      pvVar4 = memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      unaff_ESI[0x18] = unaff_ESI[0x18] + __n;\n      return pvVar4;\n    }\n  }\n  __size = uVar1 * 2;\n  if (uVar1 == 0) {\n    __size = uVar5 << 7;\n  }\n  unaff_ESI[0x19] = __size;\n  pvVar4 = realloc(pvVar4,__size);\n  unaff_ESI[0x17] = (int)pvVar4;\n  if (pvVar4 == (void *)0x0) {\n                    \n    FUN_0005f060();\n  }\n  pvVar4 = memcpy((void *)((int)pvVar4 + unaff_ESI[0x18]),unaff_EDI,__n);\n  if (uVar5 <= __n) {\n    unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5;\n    return pvVar4;\n  }\nLAB_0015e824:\n  pvVar4 = memset((void *)(__n + unaff_ESI[0x18] + unaff_ESI[0x17]),0,uVar5 - __n);\n  unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5;\n  return pvVar4;\n}" { (declaration "uint __n;" type_identifier identifier ;) (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "undefined4 uVar3;" type_identifier identifier ;) (declaration "size_t __size;" primitive_type identifier ;) (declaration "void *pvVar4;" primitive_type (pointer_declarator "*pvVar4" * identifier) ;) (declaration "int *unaff_ESI;" primitive_type (pointer_declarator "*unaff_ESI" * identifier) ;) (declaration "void *unaff_EDI;" primitive_type (pointer_declarator "*unaff_EDI" * identifier) ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "undefined8 uVar6;" type_identifier identifier ;) (expression_statement "iVar2 = *param_1;" (assignment_expression "iVar2 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (if_statement "if ((-1 < param_2) && (param_2 < *(int *)(iVar2 + 0x60))) {\n    if ((-1 < param_3) && (param_3 < *(int *)(iVar2 + 0x60))) {\n      iVar2 = memcmp((void *)(param_2 + *(int *)(iVar2 + 0x5c)),\n                     (void *)(*(int *)(iVar2 + 0x5c) + param_3),*(size_t *)(iVar2 + 0x2c));\n      return (void *)(uint)(iVar2 == 0);\n    }\n  }" if (parenthesized_expression "((-1 < param_2) && (param_2 < *(int *)(iVar2 + 0x60)))" ( (binary_expression "(-1 < param_2) && (param_2 < *(int *)(iVar2 + 0x60))" (parenthesized_expression "(-1 < param_2)" ( (binary_expression "-1 < param_2" number_literal < identifier) )) && (parenthesized_expression "(param_2 < *(int *)(iVar2 + 0x60))" ( (binary_expression "param_2 < *(int *)(iVar2 + 0x60)" identifier < (pointer_expression "*(int *)(iVar2 + 0x60)" * (cast_expression "(int *)(iVar2 + 0x60)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x60)" ( (binary_expression "iVar2 + 0x60" identifier + number_literal) ))))) ))) )) (compound_statement "{\n    if ((-1 < param_3) && (param_3 < *(int *)(iVar2 + 0x60))) {\n      iVar2 = memcmp((void *)(param_2 + *(int *)(iVar2 + 0x5c)),\n                     (void *)(*(int *)(iVar2 + 0x5c) + param_3),*(size_t *)(iVar2 + 0x2c));\n      return (void *)(uint)(iVar2 == 0);\n    }\n  }" { (if_statement "if ((-1 < param_3) && (param_3 < *(int *)(iVar2 + 0x60))) {\n      iVar2 = memcmp((void *)(param_2 + *(int *)(iVar2 + 0x5c)),\n                     (void *)(*(int *)(iVar2 + 0x5c) + param_3),*(size_t *)(iVar2 + 0x2c));\n      return (void *)(uint)(iVar2 == 0);\n    }" if (parenthesized_expression "((-1 < param_3) && (param_3 < *(int *)(iVar2 + 0x60)))" ( (binary_expression "(-1 < param_3) && (param_3 < *(int *)(iVar2 + 0x60))" (parenthesized_expression "(-1 < param_3)" ( (binary_expression "-1 < param_3" number_literal < identifier) )) && (parenthesized_expression "(param_3 < *(int *)(iVar2 + 0x60))" ( (binary_expression "param_3 < *(int *)(iVar2 + 0x60)" identifier < (pointer_expression "*(int *)(iVar2 + 0x60)" * (cast_expression "(int *)(iVar2 + 0x60)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x60)" ( (binary_expression "iVar2 + 0x60" identifier + number_literal) ))))) ))) )) (compound_statement "{\n      iVar2 = memcmp((void *)(param_2 + *(int *)(iVar2 + 0x5c)),\n                     (void *)(*(int *)(iVar2 + 0x5c) + param_3),*(size_t *)(iVar2 + 0x2c));\n      return (void *)(uint)(iVar2 == 0);\n    }" { (expression_statement "iVar2 = memcmp((void *)(param_2 + *(int *)(iVar2 + 0x5c)),\n                     (void *)(*(int *)(iVar2 + 0x5c) + param_3),*(size_t *)(iVar2 + 0x2c));" (assignment_expression "iVar2 = memcmp((void *)(param_2 + *(int *)(iVar2 + 0x5c)),\n                     (void *)(*(int *)(iVar2 + 0x5c) + param_3),*(size_t *)(iVar2 + 0x2c))" identifier = (call_expression "memcmp((void *)(param_2 + *(int *)(iVar2 + 0x5c)),\n                     (void *)(*(int *)(iVar2 + 0x5c) + param_3),*(size_t *)(iVar2 + 0x2c))" identifier (argument_list "((void *)(param_2 + *(int *)(iVar2 + 0x5c)),\n                     (void *)(*(int *)(iVar2 + 0x5c) + param_3),*(size_t *)(iVar2 + 0x2c))" ( (cast_expression "(void *)(param_2 + *(int *)(iVar2 + 0x5c))" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + *(int *)(iVar2 + 0x5c))" ( (binary_expression "param_2 + *(int *)(iVar2 + 0x5c)" identifier + (pointer_expression "*(int *)(iVar2 + 0x5c)" * (cast_expression "(int *)(iVar2 + 0x5c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x5c)" ( (binary_expression "iVar2 + 0x5c" identifier + number_literal) ))))) ))) , (cast_expression "(void *)(*(int *)(iVar2 + 0x5c) + param_3)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(iVar2 + 0x5c) + param_3)" ( (binary_expression "*(int *)(iVar2 + 0x5c) + param_3" (pointer_expression "*(int *)(iVar2 + 0x5c)" * (cast_expression "(int *)(iVar2 + 0x5c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x5c)" ( (binary_expression "iVar2 + 0x5c" identifier + number_literal) )))) + identifier) ))) , (pointer_expression "*(size_t *)(iVar2 + 0x2c)" * (cast_expression "(size_t *)(iVar2 + 0x2c)" ( (type_descriptor "size_t *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x2c)" ( (binary_expression "iVar2 + 0x2c" identifier + number_literal) )))) )))) ;) (return_statement "return (void *)(uint)(iVar2 == 0);" return (cast_expression "(void *)(uint)(iVar2 == 0)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "(uint)(iVar2 == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )))) ;) })) })) (expression_statement "uVar3 = FUN_0015e490();" (assignment_expression "uVar3 = FUN_0015e490()" identifier = (call_expression "FUN_0015e490()" identifier (argument_list "()" ( )))) ;) (expression_statement "__n = unaff_ESI[0xb];" (assignment_expression "__n = unaff_ESI[0xb]" identifier = (subscript_expression "unaff_ESI[0xb]" identifier [ number_literal ])) ;) (if_statement "if (unaff_ESI[0xc] != 0) {\nLAB_0015e880:\n                    \n    FUN_0005f0b0("../../gold/gold.h",0xc0,"convert_types",uVar3);\n  }" if (parenthesized_expression "(unaff_ESI[0xc] != 0)" ( (binary_expression "unaff_ESI[0xc] != 0" (subscript_expression "unaff_ESI[0xc]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\nLAB_0015e880:\n                    \n    FUN_0005f0b0("../../gold/gold.h",0xc0,"convert_types",uVar3);\n  }" { (labeled_statement "LAB_0015e880:\n                    \n    FUN_0005f0b0("../../gold/gold.h",0xc0,"convert_types",uVar3);" statement_identifier : (expression_statement "FUN_0005f0b0("../../gold/gold.h",0xc0,"convert_types",uVar3);" (call_expression "FUN_0005f0b0("../../gold/gold.h",0xc0,"convert_types",uVar3)" identifier (argument_list "("../../gold/gold.h",0xc0,"convert_types",uVar3)" ( (string_literal ""../../gold/gold.h"" " string_content ") , number_literal , (string_literal ""convert_types"" " string_content ") , identifier ))) ;)) })) (if_statement "if (*(code **)(*unaff_ESI + 0xc) == FUN_00068180) {\n    uVar5 = unaff_ESI[9];\n    uVar6 = CONCAT44(unaff_ESI[10],FUN_00068180);\n  }\n  else {\n    uVar6 = (**(code **)(*unaff_ESI + 0xc))(unaff_ESI);\n    uVar5 = (uint)uVar6;\n  }" if (parenthesized_expression "(*(code **)(*unaff_ESI + 0xc) == FUN_00068180)" ( (binary_expression "*(code **)(*unaff_ESI + 0xc) == FUN_00068180" (pointer_expression "*(code **)(*unaff_ESI + 0xc)" * (cast_expression "(code **)(*unaff_ESI + 0xc)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*unaff_ESI + 0xc)" ( (binary_expression "*unaff_ESI + 0xc" (pointer_expression "*unaff_ESI" * identifier) + number_literal) )))) == identifier) )) (compound_statement "{\n    uVar5 = unaff_ESI[9];\n    uVar6 = CONCAT44(unaff_ESI[10],FUN_00068180);\n  }" { (expression_statement "uVar5 = unaff_ESI[9];" (assignment_expression "uVar5 = unaff_ESI[9]" identifier = (subscript_expression "unaff_ESI[9]" identifier [ number_literal ])) ;) (expression_statement "uVar6 = CONCAT44(unaff_ESI[10],FUN_00068180);" (assignment_expression "uVar6 = CONCAT44(unaff_ESI[10],FUN_00068180)" identifier = (call_expression "CONCAT44(unaff_ESI[10],FUN_00068180)" identifier (argument_list "(unaff_ESI[10],FUN_00068180)" ( (subscript_expression "unaff_ESI[10]" identifier [ number_literal ]) , identifier )))) ;) }) (else_clause "else {\n    uVar6 = (**(code **)(*unaff_ESI + 0xc))(unaff_ESI);\n    uVar5 = (uint)uVar6;\n  }" else (compound_statement "{\n    uVar6 = (**(code **)(*unaff_ESI + 0xc))(unaff_ESI);\n    uVar5 = (uint)uVar6;\n  }" { (expression_statement "uVar6 = (**(code **)(*unaff_ESI + 0xc))(unaff_ESI);" (assignment_expression "uVar6 = (**(code **)(*unaff_ESI + 0xc))(unaff_ESI)" identifier = (call_expression "(**(code **)(*unaff_ESI + 0xc))(unaff_ESI)" (parenthesized_expression "(**(code **)(*unaff_ESI + 0xc))" ( (pointer_expression "**(code **)(*unaff_ESI + 0xc)" * (pointer_expression "*(code **)(*unaff_ESI + 0xc)" * (cast_expression "(code **)(*unaff_ESI + 0xc)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*unaff_ESI + 0xc)" ( (binary_expression "*unaff_ESI + 0xc" (pointer_expression "*unaff_ESI" * identifier) + number_literal) ))))) )) (argument_list "(unaff_ESI)" ( identifier )))) ;) (expression_statement "uVar5 = (uint)uVar6;" (assignment_expression "uVar5 = (uint)uVar6" identifier = (cast_expression "(uint)uVar6" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) }))) (expression_statement "uVar3 = (undefined4)uVar6;" (assignment_expression "uVar3 = (undefined4)uVar6" identifier = (cast_expression "(undefined4)uVar6" ( (type_descriptor "undefined4" type_identifier) ) identifier)) ;) (if_statement "if ((int)((ulonglong)uVar6 >> 0x20) != 0) goto LAB_0015e880;" if (parenthesized_expression "((int)((ulonglong)uVar6 >> 0x20) != 0)" ( (binary_expression "(int)((ulonglong)uVar6 >> 0x20) != 0" (cast_expression "(int)((ulonglong)uVar6 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)uVar6 >> 0x20)" ( (binary_expression "(ulonglong)uVar6 >> 0x20" (cast_expression "(ulonglong)uVar6" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) != number_literal) )) (goto_statement "goto LAB_0015e880;" goto statement_identifier ;)) (expression_statement "pvVar4 = (void *)unaff_ESI[0x17];" (assignment_expression "pvVar4 = (void *)unaff_ESI[0x17]" identifier = (cast_expression "(void *)unaff_ESI[0x17]" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "unaff_ESI[0x17]" identifier [ number_literal ]))) ;) (expression_statement "iVar2 = unaff_ESI[0x18];" (assignment_expression "iVar2 = unaff_ESI[0x18]" identifier = (subscript_expression "unaff_ESI[0x18]" identifier [ number_literal ])) ;) (expression_statement "uVar1 = unaff_ESI[0x19];" (assignment_expression "uVar1 = unaff_ESI[0x19]" identifier = (subscript_expression "unaff_ESI[0x19]" identifier [ number_literal ])) ;) (if_statement "if (__n < uVar5) {\n    if (iVar2 + uVar5 <= uVar1) {\n      memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      goto LAB_0015e824;\n    }\n  }\n  else {\n    uVar5 = __n;\n    if (__n + iVar2 <= uVar1) {\n      pvVar4 = memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      unaff_ESI[0x18] = unaff_ESI[0x18] + __n;\n      return pvVar4;\n    }\n  }" if (parenthesized_expression "(__n < uVar5)" ( (binary_expression "__n < uVar5" identifier < identifier) )) (compound_statement "{\n    if (iVar2 + uVar5 <= uVar1) {\n      memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      goto LAB_0015e824;\n    }\n  }" { (if_statement "if (iVar2 + uVar5 <= uVar1) {\n      memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      goto LAB_0015e824;\n    }" if (parenthesized_expression "(iVar2 + uVar5 <= uVar1)" ( (binary_expression "iVar2 + uVar5 <= uVar1" (binary_expression "iVar2 + uVar5" identifier + identifier) <= identifier) )) (compound_statement "{\n      memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      goto LAB_0015e824;\n    }" { (expression_statement "memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);" (call_expression "memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n)" identifier (argument_list "((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n)" ( (cast_expression "(void *)(iVar2 + (int)pvVar4)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + (int)pvVar4)" ( (binary_expression "iVar2 + (int)pvVar4" identifier + (cast_expression "(int)pvVar4" ( (type_descriptor "int" primitive_type) ) identifier)) ))) , identifier , identifier ))) ;) (goto_statement "goto LAB_0015e824;" goto statement_identifier ;) })) }) (else_clause "else {\n    uVar5 = __n;\n    if (__n + iVar2 <= uVar1) {\n      pvVar4 = memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      unaff_ESI[0x18] = unaff_ESI[0x18] + __n;\n      return pvVar4;\n    }\n  }" else (compound_statement "{\n    uVar5 = __n;\n    if (__n + iVar2 <= uVar1) {\n      pvVar4 = memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      unaff_ESI[0x18] = unaff_ESI[0x18] + __n;\n      return pvVar4;\n    }\n  }" { (expression_statement "uVar5 = __n;" (assignment_expression "uVar5 = __n" identifier = identifier) ;) (if_statement "if (__n + iVar2 <= uVar1) {\n      pvVar4 = memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      unaff_ESI[0x18] = unaff_ESI[0x18] + __n;\n      return pvVar4;\n    }" if (parenthesized_expression "(__n + iVar2 <= uVar1)" ( (binary_expression "__n + iVar2 <= uVar1" (binary_expression "__n + iVar2" identifier + identifier) <= identifier) )) (compound_statement "{\n      pvVar4 = memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      unaff_ESI[0x18] = unaff_ESI[0x18] + __n;\n      return pvVar4;\n    }" { (expression_statement "pvVar4 = memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);" (assignment_expression "pvVar4 = memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n)" identifier = (call_expression "memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n)" identifier (argument_list "((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n)" ( (cast_expression "(void *)(iVar2 + (int)pvVar4)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + (int)pvVar4)" ( (binary_expression "iVar2 + (int)pvVar4" identifier + (cast_expression "(int)pvVar4" ( (type_descriptor "int" primitive_type) ) identifier)) ))) , identifier , identifier )))) ;) (expression_statement "unaff_ESI[0x18] = unaff_ESI[0x18] + __n;" (assignment_expression "unaff_ESI[0x18] = unaff_ESI[0x18] + __n" (subscript_expression "unaff_ESI[0x18]" identifier [ number_literal ]) = (binary_expression "unaff_ESI[0x18] + __n" (subscript_expression "unaff_ESI[0x18]" identifier [ number_literal ]) + identifier)) ;) (return_statement "return pvVar4;" return identifier ;) })) }))) (expression_statement "__size = uVar1 * 2;" (assignment_expression "__size = uVar1 * 2" identifier = (binary_expression "uVar1 * 2" identifier * number_literal)) ;) (if_statement "if (uVar1 == 0) {\n    __size = uVar5 << 7;\n  }" if (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    __size = uVar5 << 7;\n  }" { (expression_statement "__size = uVar5 << 7;" (assignment_expression "__size = uVar5 << 7" identifier = (binary_expression "uVar5 << 7" identifier << number_literal)) ;) })) (expression_statement "unaff_ESI[0x19] = __size;" (assignment_expression "unaff_ESI[0x19] = __size" (subscript_expression "unaff_ESI[0x19]" identifier [ number_literal ]) = identifier) ;) (expression_statement "pvVar4 = realloc(pvVar4,__size);" (assignment_expression "pvVar4 = realloc(pvVar4,__size)" identifier = (call_expression "realloc(pvVar4,__size)" identifier (argument_list "(pvVar4,__size)" ( identifier , identifier )))) ;) (expression_statement "unaff_ESI[0x17] = (int)pvVar4;" (assignment_expression "unaff_ESI[0x17] = (int)pvVar4" (subscript_expression "unaff_ESI[0x17]" identifier [ number_literal ]) = (cast_expression "(int)pvVar4" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (if_statement "if (pvVar4 == (void *)0x0) {\n                    \n    FUN_0005f060();\n  }" if (parenthesized_expression "(pvVar4 == (void *)0x0)" ( (binary_expression "pvVar4 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    \n    FUN_0005f060();\n  }" { (expression_statement "FUN_0005f060();" (call_expression "FUN_0005f060()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "pvVar4 = memcpy((void *)((int)pvVar4 + unaff_ESI[0x18]),unaff_EDI,__n);" (assignment_expression "pvVar4 = memcpy((void *)((int)pvVar4 + unaff_ESI[0x18]),unaff_EDI,__n)" identifier = (call_expression "memcpy((void *)((int)pvVar4 + unaff_ESI[0x18]),unaff_EDI,__n)" identifier (argument_list "((void *)((int)pvVar4 + unaff_ESI[0x18]),unaff_EDI,__n)" ( (cast_expression "(void *)((int)pvVar4 + unaff_ESI[0x18])" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar4 + unaff_ESI[0x18])" ( (binary_expression "(int)pvVar4 + unaff_ESI[0x18]" (cast_expression "(int)pvVar4" ( (type_descriptor "int" primitive_type) ) identifier) + (subscript_expression "unaff_ESI[0x18]" identifier [ number_literal ])) ))) , identifier , identifier )))) ;) (if_statement "if (uVar5 <= __n) {\n    unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5;\n    return pvVar4;\n  }" if (parenthesized_expression "(uVar5 <= __n)" ( (binary_expression "uVar5 <= __n" identifier <= identifier) )) (compound_statement "{\n    unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5;\n    return pvVar4;\n  }" { (expression_statement "unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5;" (assignment_expression "unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5" (subscript_expression "unaff_ESI[0x18]" identifier [ number_literal ]) = (binary_expression "unaff_ESI[0x18] + uVar5" (subscript_expression "unaff_ESI[0x18]" identifier [ number_literal ]) + identifier)) ;) (return_statement "return pvVar4;" return identifier ;) })) (labeled_statement "LAB_0015e824:\n  pvVar4 = memset((void *)(__n + unaff_ESI[0x18] + unaff_ESI[0x17]),0,uVar5 - __n);" statement_identifier : (expression_statement "pvVar4 = memset((void *)(__n + unaff_ESI[0x18] + unaff_ESI[0x17]),0,uVar5 - __n);" (assignment_expression "pvVar4 = memset((void *)(__n + unaff_ESI[0x18] + unaff_ESI[0x17]),0,uVar5 - __n)" identifier = (call_expression "memset((void *)(__n + unaff_ESI[0x18] + unaff_ESI[0x17]),0,uVar5 - __n)" identifier (argument_list "((void *)(__n + unaff_ESI[0x18] + unaff_ESI[0x17]),0,uVar5 - __n)" ( (cast_expression "(void *)(__n + unaff_ESI[0x18] + unaff_ESI[0x17])" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__n + unaff_ESI[0x18] + unaff_ESI[0x17])" ( (binary_expression "__n + unaff_ESI[0x18] + unaff_ESI[0x17]" (binary_expression "__n + unaff_ESI[0x18]" identifier + (subscript_expression "unaff_ESI[0x18]" identifier [ number_literal ])) + (subscript_expression "unaff_ESI[0x17]" identifier [ number_literal ])) ))) , number_literal , (binary_expression "uVar5 - __n" identifier - identifier) )))) ;)) (expression_statement "unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5;" (assignment_expression "unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5" (subscript_expression "unaff_ESI[0x18]" identifier [ number_literal ]) = (binary_expression "unaff_ESI[0x18] + uVar5" (subscript_expression "unaff_ESI[0x18]" identifier [ number_literal ]) + identifier)) ;) (return_statement "return pvVar4;" return identifier ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) )))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < IDENT) )) && (parenthesized_expression ( (binary_expression IDENT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < IDENT) )) && (parenthesized_expression ( (binary_expression IDENT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ))) , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) ))) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )))) ;) (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT == LIT) )))) ;) })) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") , IDENT ))) ;)) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) , IDENT )))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) }))) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) ))) != LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + IDENT) <= IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) , IDENT , IDENT ))) ;) (goto_statement goto statement_identifier ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + IDENT) <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) , IDENT , IDENT )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT)) ;) (return_statement return IDENT ;) })) }))) (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT << LIT)) ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (subscript_expression IDENT [ LIT ])) ))) , IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT)) ;) (return_statement return IDENT ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (subscript_expression IDENT [ LIT ])) + (subscript_expression IDENT [ LIT ])) ))) , LIT , (binary_expression IDENT - IDENT) )))) ;)) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT)) ;) (return_statement return IDENT ;) })))
(function_definition "void * FUN_0015e6f0(int *param_1,int param_2,int param_3)\n\n{\n  uint __n;\n  uint uVar1;\n  int iVar2;\n  undefined4 uVar3;\n  size_t __size;\n  void *pvVar4;\n  int *unaff_ESI;\n  void *unaff_EDI;\n  uint uVar5;\n  undefined8 uVar6;\n  \n  iVar2 = *param_1;\n  if ((-1 < param_2) && (param_2 < *(int *)(iVar2 + 0x60))) {\n    if ((-1 < param_3) && (param_3 < *(int *)(iVar2 + 0x60))) {\n      iVar2 = memcmp((void *)(param_2 + *(int *)(iVar2 + 0x5c)),\n                     (void *)(*(int *)(iVar2 + 0x5c) + param_3),*(size_t *)(iVar2 + 0x2c));\n      return (void *)(uint)(iVar2 == 0);\n    }\n  }\n  uVar3 = FUN_0015e490();\n  __n = unaff_ESI[0xb];\n  if (unaff_ESI[0xc] != 0) {\nLAB_0015e880:\n                    \n    FUN_0005f0b0("../../gold/gold.h",0xc0,"convert_types",uVar3);\n  }\n  if (*(code **)(*unaff_ESI + 0xc) == FUN_00068180) {\n    uVar5 = unaff_ESI[9];\n    uVar6 = CONCAT44(unaff_ESI[10],FUN_00068180);\n  }\n  else {\n    uVar6 = (**(code **)(*unaff_ESI + 0xc))(unaff_ESI);\n    uVar5 = (uint)uVar6;\n  }\n  uVar3 = (undefined4)uVar6;\n  if ((int)((ulonglong)uVar6 >> 0x20) != 0) goto LAB_0015e880;\n  pvVar4 = (void *)unaff_ESI[0x17];\n  iVar2 = unaff_ESI[0x18];\n  uVar1 = unaff_ESI[0x19];\n  if (__n < uVar5) {\n    if (iVar2 + uVar5 <= uVar1) {\n      memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      goto LAB_0015e824;\n    }\n  }\n  else {\n    uVar5 = __n;\n    if (__n + iVar2 <= uVar1) {\n      pvVar4 = memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      unaff_ESI[0x18] = unaff_ESI[0x18] + __n;\n      return pvVar4;\n    }\n  }\n  __size = uVar1 * 2;\n  if (uVar1 == 0) {\n    __size = uVar5 << 7;\n  }\n  unaff_ESI[0x19] = __size;\n  pvVar4 = realloc(pvVar4,__size);\n  unaff_ESI[0x17] = (int)pvVar4;\n  if (pvVar4 == (void *)0x0) {\n                    \n    FUN_0005f060();\n  }\n  pvVar4 = memcpy((void *)((int)pvVar4 + unaff_ESI[0x18]),unaff_EDI,__n);\n  if (uVar5 <= __n) {\n    unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5;\n    return pvVar4;\n  }\nLAB_0015e824:\n  pvVar4 = memset((void *)(__n + unaff_ESI[0x18] + unaff_ESI[0x17]),0,uVar5 - __n);\n  unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5;\n  return pvVar4;\n}" (primitive_type "void") (pointer_declarator "* FUN_0015e6f0(int *param_1,int param_2,int param_3)" (* "*") (function_declarator "FUN_0015e6f0(int *param_1,int param_2,int param_3)" (identifier "FUN_0015e6f0") (parameter_list "(int *param_1,int param_2,int param_3)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) () ")")))) (compound_statement "{\n  uint __n;\n  uint uVar1;\n  int iVar2;\n  undefined4 uVar3;\n  size_t __size;\n  void *pvVar4;\n  int *unaff_ESI;\n  void *unaff_EDI;\n  uint uVar5;\n  undefined8 uVar6;\n  \n  iVar2 = *param_1;\n  if ((-1 < param_2) && (param_2 < *(int *)(iVar2 + 0x60))) {\n    if ((-1 < param_3) && (param_3 < *(int *)(iVar2 + 0x60))) {\n      iVar2 = memcmp((void *)(param_2 + *(int *)(iVar2 + 0x5c)),\n                     (void *)(*(int *)(iVar2 + 0x5c) + param_3),*(size_t *)(iVar2 + 0x2c));\n      return (void *)(uint)(iVar2 == 0);\n    }\n  }\n  uVar3 = FUN_0015e490();\n  __n = unaff_ESI[0xb];\n  if (unaff_ESI[0xc] != 0) {\nLAB_0015e880:\n                    \n    FUN_0005f0b0("../../gold/gold.h",0xc0,"convert_types",uVar3);\n  }\n  if (*(code **)(*unaff_ESI + 0xc) == FUN_00068180) {\n    uVar5 = unaff_ESI[9];\n    uVar6 = CONCAT44(unaff_ESI[10],FUN_00068180);\n  }\n  else {\n    uVar6 = (**(code **)(*unaff_ESI + 0xc))(unaff_ESI);\n    uVar5 = (uint)uVar6;\n  }\n  uVar3 = (undefined4)uVar6;\n  if ((int)((ulonglong)uVar6 >> 0x20) != 0) goto LAB_0015e880;\n  pvVar4 = (void *)unaff_ESI[0x17];\n  iVar2 = unaff_ESI[0x18];\n  uVar1 = unaff_ESI[0x19];\n  if (__n < uVar5) {\n    if (iVar2 + uVar5 <= uVar1) {\n      memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      goto LAB_0015e824;\n    }\n  }\n  else {\n    uVar5 = __n;\n    if (__n + iVar2 <= uVar1) {\n      pvVar4 = memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      unaff_ESI[0x18] = unaff_ESI[0x18] + __n;\n      return pvVar4;\n    }\n  }\n  __size = uVar1 * 2;\n  if (uVar1 == 0) {\n    __size = uVar5 << 7;\n  }\n  unaff_ESI[0x19] = __size;\n  pvVar4 = realloc(pvVar4,__size);\n  unaff_ESI[0x17] = (int)pvVar4;\n  if (pvVar4 == (void *)0x0) {\n                    \n    FUN_0005f060();\n  }\n  pvVar4 = memcpy((void *)((int)pvVar4 + unaff_ESI[0x18]),unaff_EDI,__n);\n  if (uVar5 <= __n) {\n    unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5;\n    return pvVar4;\n  }\nLAB_0015e824:\n  pvVar4 = memset((void *)(__n + unaff_ESI[0x18] + unaff_ESI[0x17]),0,uVar5 - __n);\n  unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5;\n  return pvVar4;\n}" ({ "{") (declaration "uint __n;" (type_identifier "uint") (identifier "__n") (; ";")) (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "undefined4 uVar3;" (type_identifier "undefined4") (identifier "uVar3") (; ";")) (declaration "size_t __size;" (primitive_type "size_t") (identifier "__size") (; ";")) (declaration "void *pvVar4;" (primitive_type "void") (pointer_declarator "*pvVar4" (* "*") (identifier "pvVar4")) (; ";")) (declaration "int *unaff_ESI;" (primitive_type "int") (pointer_declarator "*unaff_ESI" (* "*") (identifier "unaff_ESI")) (; ";")) (declaration "void *unaff_EDI;" (primitive_type "void") (pointer_declarator "*unaff_EDI" (* "*") (identifier "unaff_EDI")) (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (declaration "undefined8 uVar6;" (type_identifier "undefined8") (identifier "uVar6") (; ";")) (expression_statement "iVar2 = *param_1;" (assignment_expression "iVar2 = *param_1" (identifier "iVar2") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (if_statement "if ((-1 < param_2) && (param_2 < *(int *)(iVar2 + 0x60))) {\n    if ((-1 < param_3) && (param_3 < *(int *)(iVar2 + 0x60))) {\n      iVar2 = memcmp((void *)(param_2 + *(int *)(iVar2 + 0x5c)),\n                     (void *)(*(int *)(iVar2 + 0x5c) + param_3),*(size_t *)(iVar2 + 0x2c));\n      return (void *)(uint)(iVar2 == 0);\n    }\n  }" (if "if") (parenthesized_expression "((-1 < param_2) && (param_2 < *(int *)(iVar2 + 0x60)))" (( "(") (binary_expression "(-1 < param_2) && (param_2 < *(int *)(iVar2 + 0x60))" (parenthesized_expression "(-1 < param_2)" (( "(") (binary_expression "-1 < param_2" (number_literal "-1") (< "<") (identifier "param_2")) () ")")) (&& "&&") (parenthesized_expression "(param_2 < *(int *)(iVar2 + 0x60))" (( "(") (binary_expression "param_2 < *(int *)(iVar2 + 0x60)" (identifier "param_2") (< "<") (pointer_expression "*(int *)(iVar2 + 0x60)" (* "*") (cast_expression "(int *)(iVar2 + 0x60)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 0x60)" (( "(") (binary_expression "iVar2 + 0x60" (identifier "iVar2") (+ "+") (number_literal "0x60")) () ")"))))) () ")"))) () ")")) (compound_statement "{\n    if ((-1 < param_3) && (param_3 < *(int *)(iVar2 + 0x60))) {\n      iVar2 = memcmp((void *)(param_2 + *(int *)(iVar2 + 0x5c)),\n                     (void *)(*(int *)(iVar2 + 0x5c) + param_3),*(size_t *)(iVar2 + 0x2c));\n      return (void *)(uint)(iVar2 == 0);\n    }\n  }" ({ "{") (if_statement "if ((-1 < param_3) && (param_3 < *(int *)(iVar2 + 0x60))) {\n      iVar2 = memcmp((void *)(param_2 + *(int *)(iVar2 + 0x5c)),\n                     (void *)(*(int *)(iVar2 + 0x5c) + param_3),*(size_t *)(iVar2 + 0x2c));\n      return (void *)(uint)(iVar2 == 0);\n    }" (if "if") (parenthesized_expression "((-1 < param_3) && (param_3 < *(int *)(iVar2 + 0x60)))" (( "(") (binary_expression "(-1 < param_3) && (param_3 < *(int *)(iVar2 + 0x60))" (parenthesized_expression "(-1 < param_3)" (( "(") (binary_expression "-1 < param_3" (number_literal "-1") (< "<") (identifier "param_3")) () ")")) (&& "&&") (parenthesized_expression "(param_3 < *(int *)(iVar2 + 0x60))" (( "(") (binary_expression "param_3 < *(int *)(iVar2 + 0x60)" (identifier "param_3") (< "<") (pointer_expression "*(int *)(iVar2 + 0x60)" (* "*") (cast_expression "(int *)(iVar2 + 0x60)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 0x60)" (( "(") (binary_expression "iVar2 + 0x60" (identifier "iVar2") (+ "+") (number_literal "0x60")) () ")"))))) () ")"))) () ")")) (compound_statement "{\n      iVar2 = memcmp((void *)(param_2 + *(int *)(iVar2 + 0x5c)),\n                     (void *)(*(int *)(iVar2 + 0x5c) + param_3),*(size_t *)(iVar2 + 0x2c));\n      return (void *)(uint)(iVar2 == 0);\n    }" ({ "{") (expression_statement "iVar2 = memcmp((void *)(param_2 + *(int *)(iVar2 + 0x5c)),\n                     (void *)(*(int *)(iVar2 + 0x5c) + param_3),*(size_t *)(iVar2 + 0x2c));" (assignment_expression "iVar2 = memcmp((void *)(param_2 + *(int *)(iVar2 + 0x5c)),\n                     (void *)(*(int *)(iVar2 + 0x5c) + param_3),*(size_t *)(iVar2 + 0x2c))" (identifier "iVar2") (= "=") (call_expression "memcmp((void *)(param_2 + *(int *)(iVar2 + 0x5c)),\n                     (void *)(*(int *)(iVar2 + 0x5c) + param_3),*(size_t *)(iVar2 + 0x2c))" (identifier "memcmp") (argument_list "((void *)(param_2 + *(int *)(iVar2 + 0x5c)),\n                     (void *)(*(int *)(iVar2 + 0x5c) + param_3),*(size_t *)(iVar2 + 0x2c))" (( "(") (cast_expression "(void *)(param_2 + *(int *)(iVar2 + 0x5c))" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + *(int *)(iVar2 + 0x5c))" (( "(") (binary_expression "param_2 + *(int *)(iVar2 + 0x5c)" (identifier "param_2") (+ "+") (pointer_expression "*(int *)(iVar2 + 0x5c)" (* "*") (cast_expression "(int *)(iVar2 + 0x5c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 0x5c)" (( "(") (binary_expression "iVar2 + 0x5c" (identifier "iVar2") (+ "+") (number_literal "0x5c")) () ")"))))) () ")"))) (, ",") (cast_expression "(void *)(*(int *)(iVar2 + 0x5c) + param_3)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(iVar2 + 0x5c) + param_3)" (( "(") (binary_expression "*(int *)(iVar2 + 0x5c) + param_3" (pointer_expression "*(int *)(iVar2 + 0x5c)" (* "*") (cast_expression "(int *)(iVar2 + 0x5c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 0x5c)" (( "(") (binary_expression "iVar2 + 0x5c" (identifier "iVar2") (+ "+") (number_literal "0x5c")) () ")")))) (+ "+") (identifier "param_3")) () ")"))) (, ",") (pointer_expression "*(size_t *)(iVar2 + 0x2c)" (* "*") (cast_expression "(size_t *)(iVar2 + 0x2c)" (( "(") (type_descriptor "size_t *" (primitive_type "size_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 0x2c)" (( "(") (binary_expression "iVar2 + 0x2c" (identifier "iVar2") (+ "+") (number_literal "0x2c")) () ")")))) () ")")))) (; ";")) (return_statement "return (void *)(uint)(iVar2 == 0);" (return "return") (cast_expression "(void *)(uint)(iVar2 == 0)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(uint)(iVar2 == 0)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(iVar2 == 0)" (( "(") (binary_expression "iVar2 == 0" (identifier "iVar2") (== "==") (number_literal "0")) () ")")))) (; ";")) (} "}"))) (} "}"))) (expression_statement "uVar3 = FUN_0015e490();" (assignment_expression "uVar3 = FUN_0015e490()" (identifier "uVar3") (= "=") (call_expression "FUN_0015e490()" (identifier "FUN_0015e490") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "__n = unaff_ESI[0xb];" (assignment_expression "__n = unaff_ESI[0xb]" (identifier "__n") (= "=") (subscript_expression "unaff_ESI[0xb]" (identifier "unaff_ESI") ([ "[") (number_literal "0xb") (] "]"))) (; ";")) (if_statement "if (unaff_ESI[0xc] != 0) {\nLAB_0015e880:\n                    \n    FUN_0005f0b0("../../gold/gold.h",0xc0,"convert_types",uVar3);\n  }" (if "if") (parenthesized_expression "(unaff_ESI[0xc] != 0)" (( "(") (binary_expression "unaff_ESI[0xc] != 0" (subscript_expression "unaff_ESI[0xc]" (identifier "unaff_ESI") ([ "[") (number_literal "0xc") (] "]")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\nLAB_0015e880:\n                    \n    FUN_0005f0b0("../../gold/gold.h",0xc0,"convert_types",uVar3);\n  }" ({ "{") (labeled_statement "LAB_0015e880:\n                    \n    FUN_0005f0b0("../../gold/gold.h",0xc0,"convert_types",uVar3);" (statement_identifier "LAB_0015e880") (: ":") (expression_statement "FUN_0005f0b0("../../gold/gold.h",0xc0,"convert_types",uVar3);" (call_expression "FUN_0005f0b0("../../gold/gold.h",0xc0,"convert_types",uVar3)" (identifier "FUN_0005f0b0") (argument_list "("../../gold/gold.h",0xc0,"convert_types",uVar3)" (( "(") (string_literal ""../../gold/gold.h"" (" """) (string_content "../../gold/gold.h") (" """)) (, ",") (number_literal "0xc0") (, ",") (string_literal ""convert_types"" (" """) (string_content "convert_types") (" """)) (, ",") (identifier "uVar3") () ")"))) (; ";"))) (} "}"))) (if_statement "if (*(code **)(*unaff_ESI + 0xc) == FUN_00068180) {\n    uVar5 = unaff_ESI[9];\n    uVar6 = CONCAT44(unaff_ESI[10],FUN_00068180);\n  }\n  else {\n    uVar6 = (**(code **)(*unaff_ESI + 0xc))(unaff_ESI);\n    uVar5 = (uint)uVar6;\n  }" (if "if") (parenthesized_expression "(*(code **)(*unaff_ESI + 0xc) == FUN_00068180)" (( "(") (binary_expression "*(code **)(*unaff_ESI + 0xc) == FUN_00068180" (pointer_expression "*(code **)(*unaff_ESI + 0xc)" (* "*") (cast_expression "(code **)(*unaff_ESI + 0xc)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*unaff_ESI + 0xc)" (( "(") (binary_expression "*unaff_ESI + 0xc" (pointer_expression "*unaff_ESI" (* "*") (identifier "unaff_ESI")) (+ "+") (number_literal "0xc")) () ")")))) (== "==") (identifier "FUN_00068180")) () ")")) (compound_statement "{\n    uVar5 = unaff_ESI[9];\n    uVar6 = CONCAT44(unaff_ESI[10],FUN_00068180);\n  }" ({ "{") (expression_statement "uVar5 = unaff_ESI[9];" (assignment_expression "uVar5 = unaff_ESI[9]" (identifier "uVar5") (= "=") (subscript_expression "unaff_ESI[9]" (identifier "unaff_ESI") ([ "[") (number_literal "9") (] "]"))) (; ";")) (expression_statement "uVar6 = CONCAT44(unaff_ESI[10],FUN_00068180);" (assignment_expression "uVar6 = CONCAT44(unaff_ESI[10],FUN_00068180)" (identifier "uVar6") (= "=") (call_expression "CONCAT44(unaff_ESI[10],FUN_00068180)" (identifier "CONCAT44") (argument_list "(unaff_ESI[10],FUN_00068180)" (( "(") (subscript_expression "unaff_ESI[10]" (identifier "unaff_ESI") ([ "[") (number_literal "10") (] "]")) (, ",") (identifier "FUN_00068180") () ")")))) (; ";")) (} "}")) (else_clause "else {\n    uVar6 = (**(code **)(*unaff_ESI + 0xc))(unaff_ESI);\n    uVar5 = (uint)uVar6;\n  }" (else "else") (compound_statement "{\n    uVar6 = (**(code **)(*unaff_ESI + 0xc))(unaff_ESI);\n    uVar5 = (uint)uVar6;\n  }" ({ "{") (expression_statement "uVar6 = (**(code **)(*unaff_ESI + 0xc))(unaff_ESI);" (assignment_expression "uVar6 = (**(code **)(*unaff_ESI + 0xc))(unaff_ESI)" (identifier "uVar6") (= "=") (call_expression "(**(code **)(*unaff_ESI + 0xc))(unaff_ESI)" (parenthesized_expression "(**(code **)(*unaff_ESI + 0xc))" (( "(") (pointer_expression "**(code **)(*unaff_ESI + 0xc)" (* "*") (pointer_expression "*(code **)(*unaff_ESI + 0xc)" (* "*") (cast_expression "(code **)(*unaff_ESI + 0xc)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*unaff_ESI + 0xc)" (( "(") (binary_expression "*unaff_ESI + 0xc" (pointer_expression "*unaff_ESI" (* "*") (identifier "unaff_ESI")) (+ "+") (number_literal "0xc")) () ")"))))) () ")")) (argument_list "(unaff_ESI)" (( "(") (identifier "unaff_ESI") () ")")))) (; ";")) (expression_statement "uVar5 = (uint)uVar6;" (assignment_expression "uVar5 = (uint)uVar6" (identifier "uVar5") (= "=") (cast_expression "(uint)uVar6" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "uVar6"))) (; ";")) (} "}")))) (expression_statement "uVar3 = (undefined4)uVar6;" (assignment_expression "uVar3 = (undefined4)uVar6" (identifier "uVar3") (= "=") (cast_expression "(undefined4)uVar6" (( "(") (type_descriptor "undefined4" (type_identifier "undefined4")) () ")") (identifier "uVar6"))) (; ";")) (if_statement "if ((int)((ulonglong)uVar6 >> 0x20) != 0) goto LAB_0015e880;" (if "if") (parenthesized_expression "((int)((ulonglong)uVar6 >> 0x20) != 0)" (( "(") (binary_expression "(int)((ulonglong)uVar6 >> 0x20) != 0" (cast_expression "(int)((ulonglong)uVar6 >> 0x20)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((ulonglong)uVar6 >> 0x20)" (( "(") (binary_expression "(ulonglong)uVar6 >> 0x20" (cast_expression "(ulonglong)uVar6" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar6")) (>> ">>") (number_literal "0x20")) () ")"))) (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_0015e880;" (goto "goto") (statement_identifier "LAB_0015e880") (; ";"))) (expression_statement "pvVar4 = (void *)unaff_ESI[0x17];" (assignment_expression "pvVar4 = (void *)unaff_ESI[0x17]" (identifier "pvVar4") (= "=") (cast_expression "(void *)unaff_ESI[0x17]" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "unaff_ESI[0x17]" (identifier "unaff_ESI") ([ "[") (number_literal "0x17") (] "]")))) (; ";")) (expression_statement "iVar2 = unaff_ESI[0x18];" (assignment_expression "iVar2 = unaff_ESI[0x18]" (identifier "iVar2") (= "=") (subscript_expression "unaff_ESI[0x18]" (identifier "unaff_ESI") ([ "[") (number_literal "0x18") (] "]"))) (; ";")) (expression_statement "uVar1 = unaff_ESI[0x19];" (assignment_expression "uVar1 = unaff_ESI[0x19]" (identifier "uVar1") (= "=") (subscript_expression "unaff_ESI[0x19]" (identifier "unaff_ESI") ([ "[") (number_literal "0x19") (] "]"))) (; ";")) (if_statement "if (__n < uVar5) {\n    if (iVar2 + uVar5 <= uVar1) {\n      memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      goto LAB_0015e824;\n    }\n  }\n  else {\n    uVar5 = __n;\n    if (__n + iVar2 <= uVar1) {\n      pvVar4 = memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      unaff_ESI[0x18] = unaff_ESI[0x18] + __n;\n      return pvVar4;\n    }\n  }" (if "if") (parenthesized_expression "(__n < uVar5)" (( "(") (binary_expression "__n < uVar5" (identifier "__n") (< "<") (identifier "uVar5")) () ")")) (compound_statement "{\n    if (iVar2 + uVar5 <= uVar1) {\n      memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      goto LAB_0015e824;\n    }\n  }" ({ "{") (if_statement "if (iVar2 + uVar5 <= uVar1) {\n      memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      goto LAB_0015e824;\n    }" (if "if") (parenthesized_expression "(iVar2 + uVar5 <= uVar1)" (( "(") (binary_expression "iVar2 + uVar5 <= uVar1" (binary_expression "iVar2 + uVar5" (identifier "iVar2") (+ "+") (identifier "uVar5")) (<= "<=") (identifier "uVar1")) () ")")) (compound_statement "{\n      memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      goto LAB_0015e824;\n    }" ({ "{") (expression_statement "memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);" (call_expression "memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n)" (identifier "memcpy") (argument_list "((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n)" (( "(") (cast_expression "(void *)(iVar2 + (int)pvVar4)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + (int)pvVar4)" (( "(") (binary_expression "iVar2 + (int)pvVar4" (identifier "iVar2") (+ "+") (cast_expression "(int)pvVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar4"))) () ")"))) (, ",") (identifier "unaff_EDI") (, ",") (identifier "__n") () ")"))) (; ";")) (goto_statement "goto LAB_0015e824;" (goto "goto") (statement_identifier "LAB_0015e824") (; ";")) (} "}"))) (} "}")) (else_clause "else {\n    uVar5 = __n;\n    if (__n + iVar2 <= uVar1) {\n      pvVar4 = memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      unaff_ESI[0x18] = unaff_ESI[0x18] + __n;\n      return pvVar4;\n    }\n  }" (else "else") (compound_statement "{\n    uVar5 = __n;\n    if (__n + iVar2 <= uVar1) {\n      pvVar4 = memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      unaff_ESI[0x18] = unaff_ESI[0x18] + __n;\n      return pvVar4;\n    }\n  }" ({ "{") (expression_statement "uVar5 = __n;" (assignment_expression "uVar5 = __n" (identifier "uVar5") (= "=") (identifier "__n")) (; ";")) (if_statement "if (__n + iVar2 <= uVar1) {\n      pvVar4 = memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      unaff_ESI[0x18] = unaff_ESI[0x18] + __n;\n      return pvVar4;\n    }" (if "if") (parenthesized_expression "(__n + iVar2 <= uVar1)" (( "(") (binary_expression "__n + iVar2 <= uVar1" (binary_expression "__n + iVar2" (identifier "__n") (+ "+") (identifier "iVar2")) (<= "<=") (identifier "uVar1")) () ")")) (compound_statement "{\n      pvVar4 = memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);\n      unaff_ESI[0x18] = unaff_ESI[0x18] + __n;\n      return pvVar4;\n    }" ({ "{") (expression_statement "pvVar4 = memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);" (assignment_expression "pvVar4 = memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n)" (identifier "pvVar4") (= "=") (call_expression "memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n)" (identifier "memcpy") (argument_list "((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n)" (( "(") (cast_expression "(void *)(iVar2 + (int)pvVar4)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + (int)pvVar4)" (( "(") (binary_expression "iVar2 + (int)pvVar4" (identifier "iVar2") (+ "+") (cast_expression "(int)pvVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar4"))) () ")"))) (, ",") (identifier "unaff_EDI") (, ",") (identifier "__n") () ")")))) (; ";")) (expression_statement "unaff_ESI[0x18] = unaff_ESI[0x18] + __n;" (assignment_expression "unaff_ESI[0x18] = unaff_ESI[0x18] + __n" (subscript_expression "unaff_ESI[0x18]" (identifier "unaff_ESI") ([ "[") (number_literal "0x18") (] "]")) (= "=") (binary_expression "unaff_ESI[0x18] + __n" (subscript_expression "unaff_ESI[0x18]" (identifier "unaff_ESI") ([ "[") (number_literal "0x18") (] "]")) (+ "+") (identifier "__n"))) (; ";")) (return_statement "return pvVar4;" (return "return") (identifier "pvVar4") (; ";")) (} "}"))) (} "}")))) (expression_statement "__size = uVar1 * 2;" (assignment_expression "__size = uVar1 * 2" (identifier "__size") (= "=") (binary_expression "uVar1 * 2" (identifier "uVar1") (* "*") (number_literal "2"))) (; ";")) (if_statement "if (uVar1 == 0) {\n    __size = uVar5 << 7;\n  }" (if "if") (parenthesized_expression "(uVar1 == 0)" (( "(") (binary_expression "uVar1 == 0" (identifier "uVar1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    __size = uVar5 << 7;\n  }" ({ "{") (expression_statement "__size = uVar5 << 7;" (assignment_expression "__size = uVar5 << 7" (identifier "__size") (= "=") (binary_expression "uVar5 << 7" (identifier "uVar5") (<< "<<") (number_literal "7"))) (; ";")) (} "}"))) (expression_statement "unaff_ESI[0x19] = __size;" (assignment_expression "unaff_ESI[0x19] = __size" (subscript_expression "unaff_ESI[0x19]" (identifier "unaff_ESI") ([ "[") (number_literal "0x19") (] "]")) (= "=") (identifier "__size")) (; ";")) (expression_statement "pvVar4 = realloc(pvVar4,__size);" (assignment_expression "pvVar4 = realloc(pvVar4,__size)" (identifier "pvVar4") (= "=") (call_expression "realloc(pvVar4,__size)" (identifier "realloc") (argument_list "(pvVar4,__size)" (( "(") (identifier "pvVar4") (, ",") (identifier "__size") () ")")))) (; ";")) (expression_statement "unaff_ESI[0x17] = (int)pvVar4;" (assignment_expression "unaff_ESI[0x17] = (int)pvVar4" (subscript_expression "unaff_ESI[0x17]" (identifier "unaff_ESI") ([ "[") (number_literal "0x17") (] "]")) (= "=") (cast_expression "(int)pvVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar4"))) (; ";")) (if_statement "if (pvVar4 == (void *)0x0) {\n                    \n    FUN_0005f060();\n  }" (if "if") (parenthesized_expression "(pvVar4 == (void *)0x0)" (( "(") (binary_expression "pvVar4 == (void *)0x0" (identifier "pvVar4") (== "==") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n                    \n    FUN_0005f060();\n  }" ({ "{") (expression_statement "FUN_0005f060();" (call_expression "FUN_0005f060()" (identifier "FUN_0005f060") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "pvVar4 = memcpy((void *)((int)pvVar4 + unaff_ESI[0x18]),unaff_EDI,__n);" (assignment_expression "pvVar4 = memcpy((void *)((int)pvVar4 + unaff_ESI[0x18]),unaff_EDI,__n)" (identifier "pvVar4") (= "=") (call_expression "memcpy((void *)((int)pvVar4 + unaff_ESI[0x18]),unaff_EDI,__n)" (identifier "memcpy") (argument_list "((void *)((int)pvVar4 + unaff_ESI[0x18]),unaff_EDI,__n)" (( "(") (cast_expression "(void *)((int)pvVar4 + unaff_ESI[0x18])" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)pvVar4 + unaff_ESI[0x18])" (( "(") (binary_expression "(int)pvVar4 + unaff_ESI[0x18]" (cast_expression "(int)pvVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar4")) (+ "+") (subscript_expression "unaff_ESI[0x18]" (identifier "unaff_ESI") ([ "[") (number_literal "0x18") (] "]"))) () ")"))) (, ",") (identifier "unaff_EDI") (, ",") (identifier "__n") () ")")))) (; ";")) (if_statement "if (uVar5 <= __n) {\n    unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5;\n    return pvVar4;\n  }" (if "if") (parenthesized_expression "(uVar5 <= __n)" (( "(") (binary_expression "uVar5 <= __n" (identifier "uVar5") (<= "<=") (identifier "__n")) () ")")) (compound_statement "{\n    unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5;\n    return pvVar4;\n  }" ({ "{") (expression_statement "unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5;" (assignment_expression "unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5" (subscript_expression "unaff_ESI[0x18]" (identifier "unaff_ESI") ([ "[") (number_literal "0x18") (] "]")) (= "=") (binary_expression "unaff_ESI[0x18] + uVar5" (subscript_expression "unaff_ESI[0x18]" (identifier "unaff_ESI") ([ "[") (number_literal "0x18") (] "]")) (+ "+") (identifier "uVar5"))) (; ";")) (return_statement "return pvVar4;" (return "return") (identifier "pvVar4") (; ";")) (} "}"))) (labeled_statement "LAB_0015e824:\n  pvVar4 = memset((void *)(__n + unaff_ESI[0x18] + unaff_ESI[0x17]),0,uVar5 - __n);" (statement_identifier "LAB_0015e824") (: ":") (expression_statement "pvVar4 = memset((void *)(__n + unaff_ESI[0x18] + unaff_ESI[0x17]),0,uVar5 - __n);" (assignment_expression "pvVar4 = memset((void *)(__n + unaff_ESI[0x18] + unaff_ESI[0x17]),0,uVar5 - __n)" (identifier "pvVar4") (= "=") (call_expression "memset((void *)(__n + unaff_ESI[0x18] + unaff_ESI[0x17]),0,uVar5 - __n)" (identifier "memset") (argument_list "((void *)(__n + unaff_ESI[0x18] + unaff_ESI[0x17]),0,uVar5 - __n)" (( "(") (cast_expression "(void *)(__n + unaff_ESI[0x18] + unaff_ESI[0x17])" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(__n + unaff_ESI[0x18] + unaff_ESI[0x17])" (( "(") (binary_expression "__n + unaff_ESI[0x18] + unaff_ESI[0x17]" (binary_expression "__n + unaff_ESI[0x18]" (identifier "__n") (+ "+") (subscript_expression "unaff_ESI[0x18]" (identifier "unaff_ESI") ([ "[") (number_literal "0x18") (] "]"))) (+ "+") (subscript_expression "unaff_ESI[0x17]" (identifier "unaff_ESI") ([ "[") (number_literal "0x17") (] "]"))) () ")"))) (, ",") (number_literal "0") (, ",") (binary_expression "uVar5 - __n" (identifier "uVar5") (- "-") (identifier "__n")) () ")")))) (; ";"))) (expression_statement "unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5;" (assignment_expression "unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5" (subscript_expression "unaff_ESI[0x18]" (identifier "unaff_ESI") ([ "[") (number_literal "0x18") (] "]")) (= "=") (binary_expression "unaff_ESI[0x18] + uVar5" (subscript_expression "unaff_ESI[0x18]" (identifier "unaff_ESI") ([ "[") (number_literal "0x18") (] "]")) (+ "+") (identifier "uVar5"))) (; ";")) (return_statement "return pvVar4;" (return "return") (identifier "pvVar4") (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* DWARF original prototype: bool operator()(Merge_data_eq * this, Merge_data_key k1, Merge_data_key
   k2) */

bool __thiscall
gold::type_3::type_1::function_1()
          (type_1 *this,type_2 var_1,type_2 var_2)

{
  type_3 *pOVar1;
  int var_4;
  type_3 *unaff_EBX;
  type_2 unaff_ESI;
  type_3 *unaff_EDI;
  
  pOVar1 = this->pomd_;
  if ((-1 < var_1) && (var_1 < (int)pOVar1->len_)) {
    if ((-1 < var_2) && (var_2 < (int)pOVar1->len_)) {
      var_4 = var_3(pOVar1->p_ + var_1,pOVar1->p_ + var_2,
                     (size_t)(pOVar1->super_Output_merge_base).entsize_);
      return var_4 == 0;
    }
  }
                    /* WARNING: Subroutine does not return */
  var_5(unaff_EBX,unaff_ESI,unaff_EDI);
}


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

/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void * MASKED(int *param_1,int param_2,int param_3)

{
  uint __n;
  uint uVar1;
  int iVar2;
  undefined4 uVar3;
  size_t __size;
  void *pvVar4;
  int *unaff_ESI;
  void *unaff_EDI;
  uint uVar5;
  undefined8 uVar6;
  
  iVar2 = *param_1;
  if ((-1 < param_2) && (param_2 < *(int *)(iVar2 + 0x60))) {
    if ((-1 < param_3) && (param_3 < *(int *)(iVar2 + 0x60))) {
      iVar2 = memcmp((void *)(param_2 + *(int *)(iVar2 + 0x5c)),
                     (void *)(*(int *)(iVar2 + 0x5c) + param_3),*(size_t *)(iVar2 + 0x2c));
      return (void *)(uint)(iVar2 == 0);
    }
  }
  uVar3 = FUN_0015e490();
  __n = unaff_ESI[0xb];
  if (unaff_ESI[0xc] != 0) {
LAB_0015e880:
                    /* WARNING: Subroutine does not return */
    FUN_0005f0b0("../../gold/gold.h",0xc0,"convert_types",uVar3);
  }
  if (*(code **)(*unaff_ESI + 0xc) == FUN_00068180) {
    uVar5 = unaff_ESI[9];
    uVar6 = CONCAT44(unaff_ESI[10],FUN_00068180);
  }
  else {
    uVar6 = (**(code **)(*unaff_ESI + 0xc))(unaff_ESI);
    uVar5 = (uint)uVar6;
  }
  uVar3 = (undefined4)uVar6;
  if ((int)((ulonglong)uVar6 >> 0x20) != 0) goto LAB_0015e880;
  pvVar4 = (void *)unaff_ESI[0x17];
  iVar2 = unaff_ESI[0x18];
  uVar1 = unaff_ESI[0x19];
  if (__n < uVar5) {
    if (iVar2 + uVar5 <= uVar1) {
      memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);
      goto LAB_0015e824;
    }
  }
  else {
    uVar5 = __n;
    if (__n + iVar2 <= uVar1) {
      pvVar4 = memcpy((void *)(iVar2 + (int)pvVar4),unaff_EDI,__n);
      unaff_ESI[0x18] = unaff_ESI[0x18] + __n;
      return pvVar4;
    }
  }
  __size = uVar1 * 2;
  if (uVar1 == 0) {
    __size = uVar5 << 7;
  }
  unaff_ESI[0x19] = __size;
  pvVar4 = realloc(pvVar4,__size);
  unaff_ESI[0x17] = (int)pvVar4;
  if (pvVar4 == (void *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_0005f060();
  }
  pvVar4 = memcpy((void *)((int)pvVar4 + unaff_ESI[0x18]),unaff_EDI,__n);
  if (uVar5 <= __n) {
    unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5;
    return pvVar4;
  }
LAB_0015e824:
  pvVar4 = memset((void *)(__n + unaff_ESI[0x18] + unaff_ESI[0x17]),0,uVar5 - __n);
  unaff_ESI[0x18] = unaff_ESI[0x18] + uVar5;
  return pvVar4;
}

