
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Unknown calling convention */

void * x2nrealloc(void *p,size_t *pn,size_t s)

{
  void *pvVar1;
  uint uVar2;
  
  uVar2 = *pn;
  if (p == (void *)0x0) {
    if (uVar2 == 0) {
      uVar2 = (uint)(0x40 < s) + (int)(0x40 / (ulonglong)s);
    }
    if (((int)((ulonglong)uVar2 * (ulonglong)s) < 0) ||
       ((int)((ulonglong)uVar2 * (ulonglong)s >> 0x20) != 0)) goto LAB_00017bce;
  }
  else {
    if ((uint)(0x55555554 / (ulonglong)s) <= uVar2) {
LAB_00017bce:
                    /* WARNING: Subroutine does not return */
      xalloc_die();
    }
    uVar2 = (uVar2 >> 1) + 1 + uVar2;
  }
  *pn = uVar2;
  pvVar1 = xrealloc(p,uVar2 * s);
  return pvVar1;
}



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

void FUN_00017b60(int param_1,uint *param_2,uint param_3)

{
  uint uVar1;
  
  uVar1 = *param_2;
  if (param_1 == 0) {
    if (uVar1 == 0) {
      uVar1 = (uint)(0x40 < param_3) + (int)(0x40 / (ulonglong)param_3);
    }
    if (((int)((ulonglong)uVar1 * (ulonglong)param_3) < 0) ||
       ((int)((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20) != 0)) goto LAB_00017bce;
  }
  else {
    if ((uint)(0x55555554 / (ulonglong)param_3) <= uVar1) {
LAB_00017bce:
                    /* WARNING: Subroutine does not return */
      FUN_00017d30();
    }
    uVar1 = (uVar1 >> 1) + 1 + uVar1;
  }
  *param_2 = uVar1;
  FUN_00017ac0(param_1,uVar1 * param_3);
  return;
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x00012ff0
ADD EBX,0xe497
SUB ESP,0xc
MOV EBP,dword ptr [ESP + 0x24]
MOV EDI,dword ptr [ESP + 0x20]
MOV ESI,dword ptr [ESP + 0x28]
MOV ECX,dword ptr [EBP]
TEST EDI,EDI
JZ 0x00017bb8
MOV EAX,0x55555554
XOR EDX,EDX
DIV ESI
CMP EAX,ECX
JBE 0x00017bce
MOV EAX,ECX
SHR EAX,0x1
LEA ECX,[EAX + ECX*0x1 + 0x1]
MOV dword ptr [EBP],ECX
IMUL ECX,ESI
SUB ESP,0x8
PUSH ECX
PUSH EDI
CALL 0x00017ac0
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
TEST ECX,ECX
JZ 0x00017bd8
MOV EAX,ECX
MUL ESI
SETO DL
MOVZX EDX,DL
TEST EAX,EAX
JS 0x00017bce
TEST EDX,EDX
JZ 0x00017b9a
CALL 0x00017d30
XOR EDX,EDX
MOV EAX,0x40
XOR ECX,ECX
DIV ESI
CMP ESI,0x40
SETA CL
ADD ECX,EAX
JMP 0x00017bbc
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nvoid FUN_00017b60(int param_1,uint *param_2,uint param_3)\n\n{\n  uint uVar1;\n  \n  uVar1 = *param_2;\n  if (param_1 == 0) {\n    if (uVar1 == 0) {\n      uVar1 = (uint)(0x40 < param_3) + (int)(0x40 / (ulonglong)param_3);\n    }\n    if (((int)((ulonglong)uVar1 * (ulonglong)param_3) < 0) ||\n       ((int)((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20) != 0)) goto LAB_00017bce;\n  }\n  else {\n    if ((uint)(0x55555554 / (ulonglong)param_3) <= uVar1) {\nLAB_00017bce:\n                    /* WARNING: Subroutine does not return */\n      FUN_00017d30();\n    }\n    uVar1 = (uVar1 >> 1) + 1 + uVar1;\n  }\n  *param_2 = uVar1;\n  FUN_00017ac0(param_1,uVar1 * param_3);\n  return;\n}\n\n" comment (function_definition "void FUN_00017b60(int param_1,uint *param_2,uint param_3)\n\n{\n  uint uVar1;\n  \n  uVar1 = *param_2;\n  if (param_1 == 0) {\n    if (uVar1 == 0) {\n      uVar1 = (uint)(0x40 < param_3) + (int)(0x40 / (ulonglong)param_3);\n    }\n    if (((int)((ulonglong)uVar1 * (ulonglong)param_3) < 0) ||\n       ((int)((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20) != 0)) goto LAB_00017bce;\n  }\n  else {\n    if ((uint)(0x55555554 / (ulonglong)param_3) <= uVar1) {\nLAB_00017bce:\n                    /* WARNING: Subroutine does not return */\n      FUN_00017d30();\n    }\n    uVar1 = (uVar1 >> 1) + 1 + uVar1;\n  }\n  *param_2 = uVar1;\n  FUN_00017ac0(param_1,uVar1 * param_3);\n  return;\n}" primitive_type (function_declarator "FUN_00017b60(int param_1,uint *param_2,uint param_3)" identifier (parameter_list "(int param_1,uint *param_2,uint param_3)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint param_3" type_identifier identifier) ))) (compound_statement "{\n  uint uVar1;\n  \n  uVar1 = *param_2;\n  if (param_1 == 0) {\n    if (uVar1 == 0) {\n      uVar1 = (uint)(0x40 < param_3) + (int)(0x40 / (ulonglong)param_3);\n    }\n    if (((int)((ulonglong)uVar1 * (ulonglong)param_3) < 0) ||\n       ((int)((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20) != 0)) goto LAB_00017bce;\n  }\n  else {\n    if ((uint)(0x55555554 / (ulonglong)param_3) <= uVar1) {\nLAB_00017bce:\n                    /* WARNING: Subroutine does not return */\n      FUN_00017d30();\n    }\n    uVar1 = (uVar1 >> 1) + 1 + uVar1;\n  }\n  *param_2 = uVar1;\n  FUN_00017ac0(param_1,uVar1 * param_3);\n  return;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (expression_statement "uVar1 = *param_2;" (assignment_expression "uVar1 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (if_statement "if (param_1 == 0) {\n    if (uVar1 == 0) {\n      uVar1 = (uint)(0x40 < param_3) + (int)(0x40 / (ulonglong)param_3);\n    }\n    if (((int)((ulonglong)uVar1 * (ulonglong)param_3) < 0) ||\n       ((int)((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20) != 0)) goto LAB_00017bce;\n  }\n  else {\n    if ((uint)(0x55555554 / (ulonglong)param_3) <= uVar1) {\nLAB_00017bce:\n                    /* WARNING: Subroutine does not return */\n      FUN_00017d30();\n    }\n    uVar1 = (uVar1 >> 1) + 1 + uVar1;\n  }" if (parenthesized_expression "(param_1 == 0)" ( (binary_expression "param_1 == 0" identifier == number_literal) )) (compound_statement "{\n    if (uVar1 == 0) {\n      uVar1 = (uint)(0x40 < param_3) + (int)(0x40 / (ulonglong)param_3);\n    }\n    if (((int)((ulonglong)uVar1 * (ulonglong)param_3) < 0) ||\n       ((int)((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20) != 0)) goto LAB_00017bce;\n  }" { (if_statement "if (uVar1 == 0) {\n      uVar1 = (uint)(0x40 < param_3) + (int)(0x40 / (ulonglong)param_3);\n    }" if (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar1 = (uint)(0x40 < param_3) + (int)(0x40 / (ulonglong)param_3);\n    }" { (expression_statement "uVar1 = (uint)(0x40 < param_3) + (int)(0x40 / (ulonglong)param_3);" (assignment_expression "uVar1 = (uint)(0x40 < param_3) + (int)(0x40 / (ulonglong)param_3)" identifier = (binary_expression "(uint)(0x40 < param_3) + (int)(0x40 / (ulonglong)param_3)" (call_expression "(uint)(0x40 < param_3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(0x40 < param_3)" ( (binary_expression "0x40 < param_3" number_literal < identifier) ))) + (cast_expression "(int)(0x40 / (ulonglong)param_3)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(0x40 / (ulonglong)param_3)" ( (binary_expression "0x40 / (ulonglong)param_3" number_literal / (cast_expression "(ulonglong)param_3" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) ))))) ;) })) (if_statement "if (((int)((ulonglong)uVar1 * (ulonglong)param_3) < 0) ||\n       ((int)((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20) != 0)) goto LAB_00017bce;" if (parenthesized_expression "(((int)((ulonglong)uVar1 * (ulonglong)param_3) < 0) ||\n       ((int)((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20) != 0))" ( (binary_expression "((int)((ulonglong)uVar1 * (ulonglong)param_3) < 0) ||\n       ((int)((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20) != 0)" (parenthesized_expression "((int)((ulonglong)uVar1 * (ulonglong)param_3) < 0)" ( (binary_expression "(int)((ulonglong)uVar1 * (ulonglong)param_3) < 0" (cast_expression "(int)((ulonglong)uVar1 * (ulonglong)param_3)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)uVar1 * (ulonglong)param_3)" ( (binary_expression "(ulonglong)uVar1 * (ulonglong)param_3" (cast_expression "(ulonglong)uVar1" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)param_3" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) ))) < number_literal) )) || (parenthesized_expression "((int)((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20) != 0)" ( (binary_expression "(int)((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20) != 0" (cast_expression "(int)((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20)" ( (binary_expression "(ulonglong)uVar1 * (ulonglong)param_3 >> 0x20" (binary_expression "(ulonglong)uVar1 * (ulonglong)param_3" (cast_expression "(ulonglong)uVar1" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)param_3" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) >> number_literal) ))) != number_literal) ))) )) (goto_statement "goto LAB_00017bce;" goto statement_identifier ;)) }) (else_clause "else {\n    if ((uint)(0x55555554 / (ulonglong)param_3) <= uVar1) {\nLAB_00017bce:\n                    /* WARNING: Subroutine does not return */\n      FUN_00017d30();\n    }\n    uVar1 = (uVar1 >> 1) + 1 + uVar1;\n  }" else (compound_statement "{\n    if ((uint)(0x55555554 / (ulonglong)param_3) <= uVar1) {\nLAB_00017bce:\n                    /* WARNING: Subroutine does not return */\n      FUN_00017d30();\n    }\n    uVar1 = (uVar1 >> 1) + 1 + uVar1;\n  }" { (if_statement "if ((uint)(0x55555554 / (ulonglong)param_3) <= uVar1) {\nLAB_00017bce:\n                    /* WARNING: Subroutine does not return */\n      FUN_00017d30();\n    }" if (parenthesized_expression "((uint)(0x55555554 / (ulonglong)param_3) <= uVar1)" ( (binary_expression "(uint)(0x55555554 / (ulonglong)param_3) <= uVar1" (call_expression "(uint)(0x55555554 / (ulonglong)param_3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(0x55555554 / (ulonglong)param_3)" ( (binary_expression "0x55555554 / (ulonglong)param_3" number_literal / (cast_expression "(ulonglong)param_3" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) ))) <= identifier) )) (compound_statement "{\nLAB_00017bce:\n                    /* WARNING: Subroutine does not return */\n      FUN_00017d30();\n    }" { (labeled_statement "LAB_00017bce:\n                    /* WARNING: Subroutine does not return */\n      FUN_00017d30();" statement_identifier : comment (expression_statement "FUN_00017d30();" (call_expression "FUN_00017d30()" identifier (argument_list "()" ( ))) ;)) })) (expression_statement "uVar1 = (uVar1 >> 1) + 1 + uVar1;" (assignment_expression "uVar1 = (uVar1 >> 1) + 1 + uVar1" identifier = (binary_expression "(uVar1 >> 1) + 1 + uVar1" (binary_expression "(uVar1 >> 1) + 1" (parenthesized_expression "(uVar1 >> 1)" ( (binary_expression "uVar1 >> 1" identifier >> number_literal) )) + number_literal) + identifier)) ;) }))) (expression_statement "*param_2 = uVar1;" (assignment_expression "*param_2 = uVar1" (pointer_expression "*param_2" * identifier) = identifier) ;) (expression_statement "FUN_00017ac0(param_1,uVar1 * param_3);" (call_expression "FUN_00017ac0(param_1,uVar1 * param_3)" identifier (argument_list "(param_1,uVar1 * param_3)" ( identifier , (binary_expression "uVar1 * param_3" identifier * identifier) ))) ;) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n/* WARNING: Unknown calling convention */\n\nvoid * x2nrealloc(void *p,size_t *pn,size_t s)\n\n{\n  void *pvVar1;\n  uint uVar2;\n  \n  uVar2 = *pn;\n  if (p == (void *)0x0) {\n    if (uVar2 == 0) {\n      uVar2 = (uint)(0x40 < s) + (int)(0x40 / (ulonglong)s);\n    }\n    if (((int)((ulonglong)uVar2 * (ulonglong)s) < 0) ||\n       ((int)((ulonglong)uVar2 * (ulonglong)s >> 0x20) != 0)) goto LAB_00017bce;\n  }\n  else {\n    if ((uint)(0x55555554 / (ulonglong)s) <= uVar2) {\nLAB_00017bce:\n                    /* WARNING: Subroutine does not return */\n      xalloc_die();\n    }\n    uVar2 = (uVar2 >> 1) + 1 + uVar2;\n  }\n  *pn = uVar2;\n  pvVar1 = xrealloc(p,uVar2 * s);\n  return pvVar1;\n}\n\n" comment comment (function_definition "void * x2nrealloc(void *p,size_t *pn,size_t s)\n\n{\n  void *pvVar1;\n  uint uVar2;\n  \n  uVar2 = *pn;\n  if (p == (void *)0x0) {\n    if (uVar2 == 0) {\n      uVar2 = (uint)(0x40 < s) + (int)(0x40 / (ulonglong)s);\n    }\n    if (((int)((ulonglong)uVar2 * (ulonglong)s) < 0) ||\n       ((int)((ulonglong)uVar2 * (ulonglong)s >> 0x20) != 0)) goto LAB_00017bce;\n  }\n  else {\n    if ((uint)(0x55555554 / (ulonglong)s) <= uVar2) {\nLAB_00017bce:\n                    /* WARNING: Subroutine does not return */\n      xalloc_die();\n    }\n    uVar2 = (uVar2 >> 1) + 1 + uVar2;\n  }\n  *pn = uVar2;\n  pvVar1 = xrealloc(p,uVar2 * s);\n  return pvVar1;\n}" primitive_type (pointer_declarator "* x2nrealloc(void *p,size_t *pn,size_t s)" * (function_declarator "x2nrealloc(void *p,size_t *pn,size_t s)" identifier (parameter_list "(void *p,size_t *pn,size_t s)" ( (parameter_declaration "void *p" primitive_type (pointer_declarator "*p" * identifier)) , (parameter_declaration "size_t *pn" primitive_type (pointer_declarator "*pn" * identifier)) , (parameter_declaration "size_t s" primitive_type identifier) )))) (compound_statement "{\n  void *pvVar1;\n  uint uVar2;\n  \n  uVar2 = *pn;\n  if (p == (void *)0x0) {\n    if (uVar2 == 0) {\n      uVar2 = (uint)(0x40 < s) + (int)(0x40 / (ulonglong)s);\n    }\n    if (((int)((ulonglong)uVar2 * (ulonglong)s) < 0) ||\n       ((int)((ulonglong)uVar2 * (ulonglong)s >> 0x20) != 0)) goto LAB_00017bce;\n  }\n  else {\n    if ((uint)(0x55555554 / (ulonglong)s) <= uVar2) {\nLAB_00017bce:\n                    /* WARNING: Subroutine does not return */\n      xalloc_die();\n    }\n    uVar2 = (uVar2 >> 1) + 1 + uVar2;\n  }\n  *pn = uVar2;\n  pvVar1 = xrealloc(p,uVar2 * s);\n  return pvVar1;\n}" { (declaration "void *pvVar1;" primitive_type (pointer_declarator "*pvVar1" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (expression_statement "uVar2 = *pn;" (assignment_expression "uVar2 = *pn" identifier = (pointer_expression "*pn" * identifier)) ;) (if_statement "if (p == (void *)0x0) {\n    if (uVar2 == 0) {\n      uVar2 = (uint)(0x40 < s) + (int)(0x40 / (ulonglong)s);\n    }\n    if (((int)((ulonglong)uVar2 * (ulonglong)s) < 0) ||\n       ((int)((ulonglong)uVar2 * (ulonglong)s >> 0x20) != 0)) goto LAB_00017bce;\n  }\n  else {\n    if ((uint)(0x55555554 / (ulonglong)s) <= uVar2) {\nLAB_00017bce:\n                    /* WARNING: Subroutine does not return */\n      xalloc_die();\n    }\n    uVar2 = (uVar2 >> 1) + 1 + uVar2;\n  }" if (parenthesized_expression "(p == (void *)0x0)" ( (binary_expression "p == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    if (uVar2 == 0) {\n      uVar2 = (uint)(0x40 < s) + (int)(0x40 / (ulonglong)s);\n    }\n    if (((int)((ulonglong)uVar2 * (ulonglong)s) < 0) ||\n       ((int)((ulonglong)uVar2 * (ulonglong)s >> 0x20) != 0)) goto LAB_00017bce;\n  }" { (if_statement "if (uVar2 == 0) {\n      uVar2 = (uint)(0x40 < s) + (int)(0x40 / (ulonglong)s);\n    }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar2 = (uint)(0x40 < s) + (int)(0x40 / (ulonglong)s);\n    }" { (expression_statement "uVar2 = (uint)(0x40 < s) + (int)(0x40 / (ulonglong)s);" (assignment_expression "uVar2 = (uint)(0x40 < s) + (int)(0x40 / (ulonglong)s)" identifier = (binary_expression "(uint)(0x40 < s) + (int)(0x40 / (ulonglong)s)" (call_expression "(uint)(0x40 < s)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(0x40 < s)" ( (binary_expression "0x40 < s" number_literal < identifier) ))) + (cast_expression "(int)(0x40 / (ulonglong)s)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(0x40 / (ulonglong)s)" ( (binary_expression "0x40 / (ulonglong)s" number_literal / (cast_expression "(ulonglong)s" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) ))))) ;) })) (if_statement "if (((int)((ulonglong)uVar2 * (ulonglong)s) < 0) ||\n       ((int)((ulonglong)uVar2 * (ulonglong)s >> 0x20) != 0)) goto LAB_00017bce;" if (parenthesized_expression "(((int)((ulonglong)uVar2 * (ulonglong)s) < 0) ||\n       ((int)((ulonglong)uVar2 * (ulonglong)s >> 0x20) != 0))" ( (binary_expression "((int)((ulonglong)uVar2 * (ulonglong)s) < 0) ||\n       ((int)((ulonglong)uVar2 * (ulonglong)s >> 0x20) != 0)" (parenthesized_expression "((int)((ulonglong)uVar2 * (ulonglong)s) < 0)" ( (binary_expression "(int)((ulonglong)uVar2 * (ulonglong)s) < 0" (cast_expression "(int)((ulonglong)uVar2 * (ulonglong)s)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)uVar2 * (ulonglong)s)" ( (binary_expression "(ulonglong)uVar2 * (ulonglong)s" (cast_expression "(ulonglong)uVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)s" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) ))) < number_literal) )) || (parenthesized_expression "((int)((ulonglong)uVar2 * (ulonglong)s >> 0x20) != 0)" ( (binary_expression "(int)((ulonglong)uVar2 * (ulonglong)s >> 0x20) != 0" (cast_expression "(int)((ulonglong)uVar2 * (ulonglong)s >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)uVar2 * (ulonglong)s >> 0x20)" ( (binary_expression "(ulonglong)uVar2 * (ulonglong)s >> 0x20" (binary_expression "(ulonglong)uVar2 * (ulonglong)s" (cast_expression "(ulonglong)uVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)s" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) >> number_literal) ))) != number_literal) ))) )) (goto_statement "goto LAB_00017bce;" goto statement_identifier ;)) }) (else_clause "else {\n    if ((uint)(0x55555554 / (ulonglong)s) <= uVar2) {\nLAB_00017bce:\n                    /* WARNING: Subroutine does not return */\n      xalloc_die();\n    }\n    uVar2 = (uVar2 >> 1) + 1 + uVar2;\n  }" else (compound_statement "{\n    if ((uint)(0x55555554 / (ulonglong)s) <= uVar2) {\nLAB_00017bce:\n                    /* WARNING: Subroutine does not return */\n      xalloc_die();\n    }\n    uVar2 = (uVar2 >> 1) + 1 + uVar2;\n  }" { (if_statement "if ((uint)(0x55555554 / (ulonglong)s) <= uVar2) {\nLAB_00017bce:\n                    /* WARNING: Subroutine does not return */\n      xalloc_die();\n    }" if (parenthesized_expression "((uint)(0x55555554 / (ulonglong)s) <= uVar2)" ( (binary_expression "(uint)(0x55555554 / (ulonglong)s) <= uVar2" (call_expression "(uint)(0x55555554 / (ulonglong)s)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(0x55555554 / (ulonglong)s)" ( (binary_expression "0x55555554 / (ulonglong)s" number_literal / (cast_expression "(ulonglong)s" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) ))) <= identifier) )) (compound_statement "{\nLAB_00017bce:\n                    /* WARNING: Subroutine does not return */\n      xalloc_die();\n    }" { (labeled_statement "LAB_00017bce:\n                    /* WARNING: Subroutine does not return */\n      xalloc_die();" statement_identifier : comment (expression_statement "xalloc_die();" (call_expression "xalloc_die()" identifier (argument_list "()" ( ))) ;)) })) (expression_statement "uVar2 = (uVar2 >> 1) + 1 + uVar2;" (assignment_expression "uVar2 = (uVar2 >> 1) + 1 + uVar2" identifier = (binary_expression "(uVar2 >> 1) + 1 + uVar2" (binary_expression "(uVar2 >> 1) + 1" (parenthesized_expression "(uVar2 >> 1)" ( (binary_expression "uVar2 >> 1" identifier >> number_literal) )) + number_literal) + identifier)) ;) }))) (expression_statement "*pn = uVar2;" (assignment_expression "*pn = uVar2" (pointer_expression "*pn" * identifier) = identifier) ;) (expression_statement "pvVar1 = xrealloc(p,uVar2 * s);" (assignment_expression "pvVar1 = xrealloc(p,uVar2 * s)" identifier = (call_expression "xrealloc(p,uVar2 * s)" identifier (argument_list "(p,uVar2 * s)" ( identifier , (binary_expression "uVar2 * s" identifier * identifier) )))) ;) (return_statement "return pvVar1;" return identifier ;) })))
(translation_unit "void FUN_00017b60(int param_1,uint *param_2,uint param_3)\n\n{\n  uint uVar1;\n  \n  uVar1 = *param_2;\n  if (param_1 == 0) {\n    if (uVar1 == 0) {\n      uVar1 = (uint)(0x40 < param_3) + (int)(0x40 / (ulonglong)param_3);\n    }\n    if (((int)((ulonglong)uVar1 * (ulonglong)param_3) < 0) ||\n       ((int)((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20) != 0)) goto LAB_00017bce;\n  }\n  else {\n    if ((uint)(0x55555554 / (ulonglong)param_3) <= uVar1) {\nLAB_00017bce:\n                    \n      FUN_00017d30();\n    }\n    uVar1 = (uVar1 >> 1) + 1 + uVar1;\n  }\n  *param_2 = uVar1;\n  FUN_00017ac0(param_1,uVar1 * param_3);\n  return;\n}\n\n" (function_definition "void FUN_00017b60(int param_1,uint *param_2,uint param_3)\n\n{\n  uint uVar1;\n  \n  uVar1 = *param_2;\n  if (param_1 == 0) {\n    if (uVar1 == 0) {\n      uVar1 = (uint)(0x40 < param_3) + (int)(0x40 / (ulonglong)param_3);\n    }\n    if (((int)((ulonglong)uVar1 * (ulonglong)param_3) < 0) ||\n       ((int)((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20) != 0)) goto LAB_00017bce;\n  }\n  else {\n    if ((uint)(0x55555554 / (ulonglong)param_3) <= uVar1) {\nLAB_00017bce:\n                    \n      FUN_00017d30();\n    }\n    uVar1 = (uVar1 >> 1) + 1 + uVar1;\n  }\n  *param_2 = uVar1;\n  FUN_00017ac0(param_1,uVar1 * param_3);\n  return;\n}" primitive_type (function_declarator "FUN_00017b60(int param_1,uint *param_2,uint param_3)" identifier (parameter_list "(int param_1,uint *param_2,uint param_3)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint param_3" type_identifier identifier) ))) (compound_statement "{\n  uint uVar1;\n  \n  uVar1 = *param_2;\n  if (param_1 == 0) {\n    if (uVar1 == 0) {\n      uVar1 = (uint)(0x40 < param_3) + (int)(0x40 / (ulonglong)param_3);\n    }\n    if (((int)((ulonglong)uVar1 * (ulonglong)param_3) < 0) ||\n       ((int)((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20) != 0)) goto LAB_00017bce;\n  }\n  else {\n    if ((uint)(0x55555554 / (ulonglong)param_3) <= uVar1) {\nLAB_00017bce:\n                    \n      FUN_00017d30();\n    }\n    uVar1 = (uVar1 >> 1) + 1 + uVar1;\n  }\n  *param_2 = uVar1;\n  FUN_00017ac0(param_1,uVar1 * param_3);\n  return;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (expression_statement "uVar1 = *param_2;" (assignment_expression "uVar1 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (if_statement "if (param_1 == 0) {\n    if (uVar1 == 0) {\n      uVar1 = (uint)(0x40 < param_3) + (int)(0x40 / (ulonglong)param_3);\n    }\n    if (((int)((ulonglong)uVar1 * (ulonglong)param_3) < 0) ||\n       ((int)((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20) != 0)) goto LAB_00017bce;\n  }\n  else {\n    if ((uint)(0x55555554 / (ulonglong)param_3) <= uVar1) {\nLAB_00017bce:\n                    \n      FUN_00017d30();\n    }\n    uVar1 = (uVar1 >> 1) + 1 + uVar1;\n  }" if (parenthesized_expression "(param_1 == 0)" ( (binary_expression "param_1 == 0" identifier == number_literal) )) (compound_statement "{\n    if (uVar1 == 0) {\n      uVar1 = (uint)(0x40 < param_3) + (int)(0x40 / (ulonglong)param_3);\n    }\n    if (((int)((ulonglong)uVar1 * (ulonglong)param_3) < 0) ||\n       ((int)((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20) != 0)) goto LAB_00017bce;\n  }" { (if_statement "if (uVar1 == 0) {\n      uVar1 = (uint)(0x40 < param_3) + (int)(0x40 / (ulonglong)param_3);\n    }" if (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar1 = (uint)(0x40 < param_3) + (int)(0x40 / (ulonglong)param_3);\n    }" { (expression_statement "uVar1 = (uint)(0x40 < param_3) + (int)(0x40 / (ulonglong)param_3);" (assignment_expression "uVar1 = (uint)(0x40 < param_3) + (int)(0x40 / (ulonglong)param_3)" identifier = (binary_expression "(uint)(0x40 < param_3) + (int)(0x40 / (ulonglong)param_3)" (call_expression "(uint)(0x40 < param_3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(0x40 < param_3)" ( (binary_expression "0x40 < param_3" number_literal < identifier) ))) + (cast_expression "(int)(0x40 / (ulonglong)param_3)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(0x40 / (ulonglong)param_3)" ( (binary_expression "0x40 / (ulonglong)param_3" number_literal / (cast_expression "(ulonglong)param_3" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) ))))) ;) })) (if_statement "if (((int)((ulonglong)uVar1 * (ulonglong)param_3) < 0) ||\n       ((int)((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20) != 0)) goto LAB_00017bce;" if (parenthesized_expression "(((int)((ulonglong)uVar1 * (ulonglong)param_3) < 0) ||\n       ((int)((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20) != 0))" ( (binary_expression "((int)((ulonglong)uVar1 * (ulonglong)param_3) < 0) ||\n       ((int)((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20) != 0)" (parenthesized_expression "((int)((ulonglong)uVar1 * (ulonglong)param_3) < 0)" ( (binary_expression "(int)((ulonglong)uVar1 * (ulonglong)param_3) < 0" (cast_expression "(int)((ulonglong)uVar1 * (ulonglong)param_3)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)uVar1 * (ulonglong)param_3)" ( (binary_expression "(ulonglong)uVar1 * (ulonglong)param_3" (cast_expression "(ulonglong)uVar1" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)param_3" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) ))) < number_literal) )) || (parenthesized_expression "((int)((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20) != 0)" ( (binary_expression "(int)((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20) != 0" (cast_expression "(int)((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20)" ( (binary_expression "(ulonglong)uVar1 * (ulonglong)param_3 >> 0x20" (binary_expression "(ulonglong)uVar1 * (ulonglong)param_3" (cast_expression "(ulonglong)uVar1" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)param_3" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) >> number_literal) ))) != number_literal) ))) )) (goto_statement "goto LAB_00017bce;" goto statement_identifier ;)) }) (else_clause "else {\n    if ((uint)(0x55555554 / (ulonglong)param_3) <= uVar1) {\nLAB_00017bce:\n                    \n      FUN_00017d30();\n    }\n    uVar1 = (uVar1 >> 1) + 1 + uVar1;\n  }" else (compound_statement "{\n    if ((uint)(0x55555554 / (ulonglong)param_3) <= uVar1) {\nLAB_00017bce:\n                    \n      FUN_00017d30();\n    }\n    uVar1 = (uVar1 >> 1) + 1 + uVar1;\n  }" { (if_statement "if ((uint)(0x55555554 / (ulonglong)param_3) <= uVar1) {\nLAB_00017bce:\n                    \n      FUN_00017d30();\n    }" if (parenthesized_expression "((uint)(0x55555554 / (ulonglong)param_3) <= uVar1)" ( (binary_expression "(uint)(0x55555554 / (ulonglong)param_3) <= uVar1" (call_expression "(uint)(0x55555554 / (ulonglong)param_3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(0x55555554 / (ulonglong)param_3)" ( (binary_expression "0x55555554 / (ulonglong)param_3" number_literal / (cast_expression "(ulonglong)param_3" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) ))) <= identifier) )) (compound_statement "{\nLAB_00017bce:\n                    \n      FUN_00017d30();\n    }" { (labeled_statement "LAB_00017bce:\n                    \n      FUN_00017d30();" statement_identifier : (expression_statement "FUN_00017d30();" (call_expression "FUN_00017d30()" identifier (argument_list "()" ( ))) ;)) })) (expression_statement "uVar1 = (uVar1 >> 1) + 1 + uVar1;" (assignment_expression "uVar1 = (uVar1 >> 1) + 1 + uVar1" identifier = (binary_expression "(uVar1 >> 1) + 1 + uVar1" (binary_expression "(uVar1 >> 1) + 1" (parenthesized_expression "(uVar1 >> 1)" ( (binary_expression "uVar1 >> 1" identifier >> number_literal) )) + number_literal) + identifier)) ;) }))) (expression_statement "*param_2 = uVar1;" (assignment_expression "*param_2 = uVar1" (pointer_expression "*param_2" * identifier) = identifier) ;) (expression_statement "FUN_00017ac0(param_1,uVar1 * param_3);" (call_expression "FUN_00017ac0(param_1,uVar1 * param_3)" identifier (argument_list "(param_1,uVar1 * param_3)" ( identifier , (binary_expression "uVar1 * param_3" identifier * identifier) ))) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression LIT < IDENT) ))) + (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression LIT / (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) < LIT) )) || (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * (cast_expression ( (type_descriptor TYPE) ) IDENT)) >> LIT) ))) != LIT) ))) )) (goto_statement goto statement_identifier ;)) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression LIT / (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) <= IDENT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( ))) ;)) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (parenthesized_expression ( (binary_expression IDENT >> LIT) )) + LIT) + IDENT)) ;) }))) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT * IDENT) ))) ;) (return_statement return ;) })))
(function_definition "void FUN_00017b60(int param_1,uint *param_2,uint param_3)\n\n{\n  uint uVar1;\n  \n  uVar1 = *param_2;\n  if (param_1 == 0) {\n    if (uVar1 == 0) {\n      uVar1 = (uint)(0x40 < param_3) + (int)(0x40 / (ulonglong)param_3);\n    }\n    if (((int)((ulonglong)uVar1 * (ulonglong)param_3) < 0) ||\n       ((int)((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20) != 0)) goto LAB_00017bce;\n  }\n  else {\n    if ((uint)(0x55555554 / (ulonglong)param_3) <= uVar1) {\nLAB_00017bce:\n                    \n      FUN_00017d30();\n    }\n    uVar1 = (uVar1 >> 1) + 1 + uVar1;\n  }\n  *param_2 = uVar1;\n  FUN_00017ac0(param_1,uVar1 * param_3);\n  return;\n}" (primitive_type "void") (function_declarator "FUN_00017b60(int param_1,uint *param_2,uint param_3)" (identifier "FUN_00017b60") (parameter_list "(int param_1,uint *param_2,uint param_3)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "uint *param_2" (type_identifier "uint") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "uint param_3" (type_identifier "uint") (identifier "param_3")) () ")"))) (compound_statement "{\n  uint uVar1;\n  \n  uVar1 = *param_2;\n  if (param_1 == 0) {\n    if (uVar1 == 0) {\n      uVar1 = (uint)(0x40 < param_3) + (int)(0x40 / (ulonglong)param_3);\n    }\n    if (((int)((ulonglong)uVar1 * (ulonglong)param_3) < 0) ||\n       ((int)((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20) != 0)) goto LAB_00017bce;\n  }\n  else {\n    if ((uint)(0x55555554 / (ulonglong)param_3) <= uVar1) {\nLAB_00017bce:\n                    \n      FUN_00017d30();\n    }\n    uVar1 = (uVar1 >> 1) + 1 + uVar1;\n  }\n  *param_2 = uVar1;\n  FUN_00017ac0(param_1,uVar1 * param_3);\n  return;\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (expression_statement "uVar1 = *param_2;" (assignment_expression "uVar1 = *param_2" (identifier "uVar1") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (if_statement "if (param_1 == 0) {\n    if (uVar1 == 0) {\n      uVar1 = (uint)(0x40 < param_3) + (int)(0x40 / (ulonglong)param_3);\n    }\n    if (((int)((ulonglong)uVar1 * (ulonglong)param_3) < 0) ||\n       ((int)((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20) != 0)) goto LAB_00017bce;\n  }\n  else {\n    if ((uint)(0x55555554 / (ulonglong)param_3) <= uVar1) {\nLAB_00017bce:\n                    \n      FUN_00017d30();\n    }\n    uVar1 = (uVar1 >> 1) + 1 + uVar1;\n  }" (if "if") (parenthesized_expression "(param_1 == 0)" (( "(") (binary_expression "param_1 == 0" (identifier "param_1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    if (uVar1 == 0) {\n      uVar1 = (uint)(0x40 < param_3) + (int)(0x40 / (ulonglong)param_3);\n    }\n    if (((int)((ulonglong)uVar1 * (ulonglong)param_3) < 0) ||\n       ((int)((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20) != 0)) goto LAB_00017bce;\n  }" ({ "{") (if_statement "if (uVar1 == 0) {\n      uVar1 = (uint)(0x40 < param_3) + (int)(0x40 / (ulonglong)param_3);\n    }" (if "if") (parenthesized_expression "(uVar1 == 0)" (( "(") (binary_expression "uVar1 == 0" (identifier "uVar1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      uVar1 = (uint)(0x40 < param_3) + (int)(0x40 / (ulonglong)param_3);\n    }" ({ "{") (expression_statement "uVar1 = (uint)(0x40 < param_3) + (int)(0x40 / (ulonglong)param_3);" (assignment_expression "uVar1 = (uint)(0x40 < param_3) + (int)(0x40 / (ulonglong)param_3)" (identifier "uVar1") (= "=") (binary_expression "(uint)(0x40 < param_3) + (int)(0x40 / (ulonglong)param_3)" (call_expression "(uint)(0x40 < param_3)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(0x40 < param_3)" (( "(") (binary_expression "0x40 < param_3" (number_literal "0x40") (< "<") (identifier "param_3")) () ")"))) (+ "+") (cast_expression "(int)(0x40 / (ulonglong)param_3)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(0x40 / (ulonglong)param_3)" (( "(") (binary_expression "0x40 / (ulonglong)param_3" (number_literal "0x40") (/ "/") (cast_expression "(ulonglong)param_3" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "param_3"))) () ")"))))) (; ";")) (} "}"))) (if_statement "if (((int)((ulonglong)uVar1 * (ulonglong)param_3) < 0) ||\n       ((int)((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20) != 0)) goto LAB_00017bce;" (if "if") (parenthesized_expression "(((int)((ulonglong)uVar1 * (ulonglong)param_3) < 0) ||\n       ((int)((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20) != 0))" (( "(") (binary_expression "((int)((ulonglong)uVar1 * (ulonglong)param_3) < 0) ||\n       ((int)((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20) != 0)" (parenthesized_expression "((int)((ulonglong)uVar1 * (ulonglong)param_3) < 0)" (( "(") (binary_expression "(int)((ulonglong)uVar1 * (ulonglong)param_3) < 0" (cast_expression "(int)((ulonglong)uVar1 * (ulonglong)param_3)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((ulonglong)uVar1 * (ulonglong)param_3)" (( "(") (binary_expression "(ulonglong)uVar1 * (ulonglong)param_3" (cast_expression "(ulonglong)uVar1" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar1")) (* "*") (cast_expression "(ulonglong)param_3" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "param_3"))) () ")"))) (< "<") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "((int)((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20) != 0)" (( "(") (binary_expression "(int)((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20) != 0" (cast_expression "(int)((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20)" (( "(") (binary_expression "(ulonglong)uVar1 * (ulonglong)param_3 >> 0x20" (binary_expression "(ulonglong)uVar1 * (ulonglong)param_3" (cast_expression "(ulonglong)uVar1" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar1")) (* "*") (cast_expression "(ulonglong)param_3" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "param_3"))) (>> ">>") (number_literal "0x20")) () ")"))) (!= "!=") (number_literal "0")) () ")"))) () ")")) (goto_statement "goto LAB_00017bce;" (goto "goto") (statement_identifier "LAB_00017bce") (; ";"))) (} "}")) (else_clause "else {\n    if ((uint)(0x55555554 / (ulonglong)param_3) <= uVar1) {\nLAB_00017bce:\n                    \n      FUN_00017d30();\n    }\n    uVar1 = (uVar1 >> 1) + 1 + uVar1;\n  }" (else "else") (compound_statement "{\n    if ((uint)(0x55555554 / (ulonglong)param_3) <= uVar1) {\nLAB_00017bce:\n                    \n      FUN_00017d30();\n    }\n    uVar1 = (uVar1 >> 1) + 1 + uVar1;\n  }" ({ "{") (if_statement "if ((uint)(0x55555554 / (ulonglong)param_3) <= uVar1) {\nLAB_00017bce:\n                    \n      FUN_00017d30();\n    }" (if "if") (parenthesized_expression "((uint)(0x55555554 / (ulonglong)param_3) <= uVar1)" (( "(") (binary_expression "(uint)(0x55555554 / (ulonglong)param_3) <= uVar1" (call_expression "(uint)(0x55555554 / (ulonglong)param_3)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(0x55555554 / (ulonglong)param_3)" (( "(") (binary_expression "0x55555554 / (ulonglong)param_3" (number_literal "0x55555554") (/ "/") (cast_expression "(ulonglong)param_3" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "param_3"))) () ")"))) (<= "<=") (identifier "uVar1")) () ")")) (compound_statement "{\nLAB_00017bce:\n                    \n      FUN_00017d30();\n    }" ({ "{") (labeled_statement "LAB_00017bce:\n                    \n      FUN_00017d30();" (statement_identifier "LAB_00017bce") (: ":") (expression_statement "FUN_00017d30();" (call_expression "FUN_00017d30()" (identifier "FUN_00017d30") (argument_list "()" (( "(") () ")"))) (; ";"))) (} "}"))) (expression_statement "uVar1 = (uVar1 >> 1) + 1 + uVar1;" (assignment_expression "uVar1 = (uVar1 >> 1) + 1 + uVar1" (identifier "uVar1") (= "=") (binary_expression "(uVar1 >> 1) + 1 + uVar1" (binary_expression "(uVar1 >> 1) + 1" (parenthesized_expression "(uVar1 >> 1)" (( "(") (binary_expression "uVar1 >> 1" (identifier "uVar1") (>> ">>") (number_literal "1")) () ")")) (+ "+") (number_literal "1")) (+ "+") (identifier "uVar1"))) (; ";")) (} "}")))) (expression_statement "*param_2 = uVar1;" (assignment_expression "*param_2 = uVar1" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (identifier "uVar1")) (; ";")) (expression_statement "FUN_00017ac0(param_1,uVar1 * param_3);" (call_expression "FUN_00017ac0(param_1,uVar1 * param_3)" (identifier "FUN_00017ac0") (argument_list "(param_1,uVar1 * param_3)" (( "(") (identifier "param_1") (, ",") (binary_expression "uVar1 * param_3" (identifier "uVar1") (* "*") (identifier "param_3")) () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Unknown calling convention */

void * function_1(void *var_1,size_t *pn,size_t var_3)

{
  void *pvVar1;
  type_1 var_2;
  
  var_2 = *pn;
  if (var_1 == (void *)0x0) {
    if (var_2 == 0) {
      var_2 = (type_1)(0x40 < var_3) + (int)(0x40 / (type_2)var_3);
    }
    if (((int)((type_2)var_2 * (type_2)var_3) < 0) ||
       ((int)((type_2)var_2 * (type_2)var_3 >> 0x20) != 0)) goto LAB_00017bce;
  }
  else {
    if ((type_1)(0x55555554 / (type_2)var_3) <= var_2) {
LAB_00017bce:
                    /* WARNING: Subroutine does not return */
      var_4();
    }
    var_2 = (var_2 >> 1) + 1 + var_2;
  }
  *pn = var_2;
  pvVar1 = var_5(var_1,var_2 * var_3);
  return pvVar1;
}


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

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

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

{
  uint uVar1;
  
  uVar1 = *param_2;
  if (param_1 == 0) {
    if (uVar1 == 0) {
      uVar1 = (uint)(0x40 < param_3) + (int)(0x40 / (ulonglong)param_3);
    }
    if (((int)((ulonglong)uVar1 * (ulonglong)param_3) < 0) ||
       ((int)((ulonglong)uVar1 * (ulonglong)param_3 >> 0x20) != 0)) goto LAB_00017bce;
  }
  else {
    if ((uint)(0x55555554 / (ulonglong)param_3) <= uVar1) {
LAB_00017bce:
                    /* WARNING: Subroutine does not return */
      FUN_00017d30();
    }
    uVar1 = (uVar1 >> 1) + 1 + uVar1;
  }
  *param_2 = uVar1;
  FUN_00017ac0(param_1,uVar1 * param_3);
  return;
}

