
void __gmpn_mulmid_n(mp_ptr rp,mp_srcptr ap,mp_srcptr bp,mp_size_t n)

{
  long lVar1;
  tmp_reentrant_t *mark;
  mp_ptr scratch;
  mp_size_t *pmVar2;
  size_t size;
  long in_FS_OFFSET;
  mp_size_t local_38;
  mp_srcptr local_30;
  tmp_reentrant_t *__tmp_marker;
  long local_20;
  
  pmVar2 = &local_38;
  local_20 = *(long *)(in_FS_OFFSET + 0x28);
  if (n < 0x24) {
    __gmpn_mulmid_basecase(rp,ap,n * 2 + -1,bp,n);
  }
  else {
    __tmp_marker = (tmp_reentrant_t *)0x0;
    size = (n * 3 + 0x40) * 8;
    if (size < 0x7f01) {
      lVar1 = -(size + 0x17 & 0xfffffffffffffff0);
      scratch = (mp_ptr)((long)&local_30 + lVar1);
      pmVar2 = (mp_size_t *)((long)&local_38 + lVar1);
    }
    else {
      local_38 = n;
      local_30 = bp;
      scratch = (mp_ptr)__gmp_tmp_reentrant_alloc(&__tmp_marker,size);
      n = local_38;
      bp = local_30;
      pmVar2 = &local_38;
    }
    *(undefined8 *)((long)pmVar2 + -8) = 0x13594f;
    __gmpn_toom42_mulmid(rp,ap,bp,n,scratch);
    mark = __tmp_marker;
    if (__tmp_marker != (tmp_reentrant_t *)0x0) {
      *(undefined8 *)((long)pmVar2 + -8) = 0x13598d;
      __gmp_tmp_reentrant_free(mark);
    }
  }
  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  *(undefined8 *)((long)pmVar2 + -8) = 0x1359b3;
  __stack_chk_fail();
}



void __gmpn_mulmid_n(undefined8 param_1,undefined8 param_2,undefined8 param_3,long param_4)

{
  long lVar1;
  long lVar2;
  long *plVar3;
  ulong uVar4;
  long in_FS_OFFSET;
  long local_38;
  undefined8 local_30;
  long local_28;
  long local_20;
  
  plVar3 = &local_38;
  local_20 = *(long *)(in_FS_OFFSET + 0x28);
  if (param_4 < 0x24) {
    __gmpn_mulmid_basecase(param_1,param_2,param_4 * 2 + -1,param_3,param_4);
  }
  else {
    local_28 = 0;
    uVar4 = (param_4 * 3 + 0x40) * 8;
    if (uVar4 < 0x7f01) {
      lVar1 = -(uVar4 + 0x17 & 0xfffffffffffffff0);
      lVar2 = (long)&local_30 + lVar1;
      plVar3 = (long *)((long)&local_38 + lVar1);
    }
    else {
      local_38 = param_4;
      local_30 = param_3;
      lVar2 = __gmp_tmp_reentrant_alloc(&local_28);
      param_4 = local_38;
      param_3 = local_30;
      plVar3 = &local_38;
    }
    *(undefined8 *)((long)plVar3 + -8) = 0x13594f;
    __gmpn_toom42_mulmid(param_1,param_2,param_3,param_4,lVar2);
    if (local_28 != 0) {
      *(undefined8 *)((long)plVar3 + -8) = 0x13598d;
      __gmp_tmp_reentrant_free();
    }
  }
  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  *(undefined8 *)((long)plVar3 + -8) = 0x1359b3;
  __stack_chk_fail();
}


PUSH RBP
MOV RBP,RSP
PUSH R12
MOV R12,RSI
PUSH RBX
MOV RBX,RDI
SUB RSP,0x20
MOV RAX,qword ptr FS:[0x28]
MOV qword ptr [RBP + -0x18],RAX
XOR EAX,EAX
CMP RCX,0x23
JLE 0x00135970
LEA RSI,[RCX + RCX*0x2 + 0x40]
MOV qword ptr [RBP + -0x20],0x0
SHL RSI,0x3
CMP RSI,0x7f00
JA 0x00135990
ADD RSI,0x17
AND RSI,-0x10
SUB RSP,RSI
LEA R8,[RSP + 0xf]
AND R8,-0x10
MOV RDI,RBX
MOV RSI,R12
CALL 0x0010b8f0
MOV RDI,qword ptr [RBP + -0x20]
TEST RDI,RDI
JNZ 0x00135988
MOV RAX,qword ptr [RBP + -0x18]
XOR RAX,qword ptr FS:[0x28]
JNZ 0x001359ae
LEA RSP,[RBP + -0x10]
POP RBX
POP R12
POP RBP
RET
LEA RAX,[RCX + RCX*0x1 + -0x1]
MOV R8,RCX
MOV RCX,RDX
MOV RDX,RAX
CALL 0x0010b5e0
JMP 0x00135958
CALL 0x0010b040
JMP 0x00135958
LEA RDI,[RBP + -0x20]
MOV qword ptr [RBP + -0x30],RCX
MOV qword ptr [RBP + -0x28],RDX
CALL 0x0010bcb0
MOV RCX,qword ptr [RBP + -0x30]
MOV RDX,qword ptr [RBP + -0x28]
MOV R8,RAX
JMP 0x00135944
CALL 0x0010b530
(translation_unit "void __gmpn_mulmid_n(undefined8 param_1,undefined8 param_2,undefined8 param_3,long param_4)\n\n{\n  long lVar1;\n  long lVar2;\n  long *plVar3;\n  ulong uVar4;\n  long in_FS_OFFSET;\n  long local_38;\n  undefined8 local_30;\n  long local_28;\n  long local_20;\n  \n  plVar3 = &local_38;\n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_4 < 0x24) {\n    __gmpn_mulmid_basecase(param_1,param_2,param_4 * 2 + -1,param_3,param_4);\n  }\n  else {\n    local_28 = 0;\n    uVar4 = (param_4 * 3 + 0x40) * 8;\n    if (uVar4 < 0x7f01) {\n      lVar1 = -(uVar4 + 0x17 & 0xfffffffffffffff0);\n      lVar2 = (long)&local_30 + lVar1;\n      plVar3 = (long *)((long)&local_38 + lVar1);\n    }\n    else {\n      local_38 = param_4;\n      local_30 = param_3;\n      lVar2 = __gmp_tmp_reentrant_alloc(&local_28);\n      param_4 = local_38;\n      param_3 = local_30;\n      plVar3 = &local_38;\n    }\n    *(undefined8 *)((long)plVar3 + -8) = 0x13594f;\n    __gmpn_toom42_mulmid(param_1,param_2,param_3,param_4,lVar2);\n    if (local_28 != 0) {\n      *(undefined8 *)((long)plVar3 + -8) = 0x13598d;\n      __gmp_tmp_reentrant_free();\n    }\n  }\n  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  *(undefined8 *)((long)plVar3 + -8) = 0x1359b3;\n  __stack_chk_fail();\n}\n\n" (function_definition "void __gmpn_mulmid_n(undefined8 param_1,undefined8 param_2,undefined8 param_3,long param_4)\n\n{\n  long lVar1;\n  long lVar2;\n  long *plVar3;\n  ulong uVar4;\n  long in_FS_OFFSET;\n  long local_38;\n  undefined8 local_30;\n  long local_28;\n  long local_20;\n  \n  plVar3 = &local_38;\n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_4 < 0x24) {\n    __gmpn_mulmid_basecase(param_1,param_2,param_4 * 2 + -1,param_3,param_4);\n  }\n  else {\n    local_28 = 0;\n    uVar4 = (param_4 * 3 + 0x40) * 8;\n    if (uVar4 < 0x7f01) {\n      lVar1 = -(uVar4 + 0x17 & 0xfffffffffffffff0);\n      lVar2 = (long)&local_30 + lVar1;\n      plVar3 = (long *)((long)&local_38 + lVar1);\n    }\n    else {\n      local_38 = param_4;\n      local_30 = param_3;\n      lVar2 = __gmp_tmp_reentrant_alloc(&local_28);\n      param_4 = local_38;\n      param_3 = local_30;\n      plVar3 = &local_38;\n    }\n    *(undefined8 *)((long)plVar3 + -8) = 0x13594f;\n    __gmpn_toom42_mulmid(param_1,param_2,param_3,param_4,lVar2);\n    if (local_28 != 0) {\n      *(undefined8 *)((long)plVar3 + -8) = 0x13598d;\n      __gmp_tmp_reentrant_free();\n    }\n  }\n  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  *(undefined8 *)((long)plVar3 + -8) = 0x1359b3;\n  __stack_chk_fail();\n}" primitive_type (function_declarator "__gmpn_mulmid_n(undefined8 param_1,undefined8 param_2,undefined8 param_3,long param_4)" identifier (parameter_list "(undefined8 param_1,undefined8 param_2,undefined8 param_3,long param_4)" ( (parameter_declaration "undefined8 param_1" type_identifier identifier) , (parameter_declaration "undefined8 param_2" type_identifier identifier) , (parameter_declaration "undefined8 param_3" type_identifier identifier) , (parameter_declaration "long param_4" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  long lVar1;\n  long lVar2;\n  long *plVar3;\n  ulong uVar4;\n  long in_FS_OFFSET;\n  long local_38;\n  undefined8 local_30;\n  long local_28;\n  long local_20;\n  \n  plVar3 = &local_38;\n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_4 < 0x24) {\n    __gmpn_mulmid_basecase(param_1,param_2,param_4 * 2 + -1,param_3,param_4);\n  }\n  else {\n    local_28 = 0;\n    uVar4 = (param_4 * 3 + 0x40) * 8;\n    if (uVar4 < 0x7f01) {\n      lVar1 = -(uVar4 + 0x17 & 0xfffffffffffffff0);\n      lVar2 = (long)&local_30 + lVar1;\n      plVar3 = (long *)((long)&local_38 + lVar1);\n    }\n    else {\n      local_38 = param_4;\n      local_30 = param_3;\n      lVar2 = __gmp_tmp_reentrant_alloc(&local_28);\n      param_4 = local_38;\n      param_3 = local_30;\n      plVar3 = &local_38;\n    }\n    *(undefined8 *)((long)plVar3 + -8) = 0x13594f;\n    __gmpn_toom42_mulmid(param_1,param_2,param_3,param_4,lVar2);\n    if (local_28 != 0) {\n      *(undefined8 *)((long)plVar3 + -8) = 0x13598d;\n      __gmp_tmp_reentrant_free();\n    }\n  }\n  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  *(undefined8 *)((long)plVar3 + -8) = 0x1359b3;\n  __stack_chk_fail();\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "long *plVar3;" (sized_type_specifier "long" long) (pointer_declarator "*plVar3" * identifier) ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "long local_38;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 local_30;" type_identifier identifier ;) (declaration "long local_28;" (sized_type_specifier "long" long) identifier ;) (declaration "long local_20;" (sized_type_specifier "long" long) identifier ;) (expression_statement "plVar3 = &local_38;" (assignment_expression "plVar3 = &local_38" identifier = (pointer_expression "&local_38" & identifier)) ;) (expression_statement "local_20 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_20 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (if_statement "if (param_4 < 0x24) {\n    __gmpn_mulmid_basecase(param_1,param_2,param_4 * 2 + -1,param_3,param_4);\n  }\n  else {\n    local_28 = 0;\n    uVar4 = (param_4 * 3 + 0x40) * 8;\n    if (uVar4 < 0x7f01) {\n      lVar1 = -(uVar4 + 0x17 & 0xfffffffffffffff0);\n      lVar2 = (long)&local_30 + lVar1;\n      plVar3 = (long *)((long)&local_38 + lVar1);\n    }\n    else {\n      local_38 = param_4;\n      local_30 = param_3;\n      lVar2 = __gmp_tmp_reentrant_alloc(&local_28);\n      param_4 = local_38;\n      param_3 = local_30;\n      plVar3 = &local_38;\n    }\n    *(undefined8 *)((long)plVar3 + -8) = 0x13594f;\n    __gmpn_toom42_mulmid(param_1,param_2,param_3,param_4,lVar2);\n    if (local_28 != 0) {\n      *(undefined8 *)((long)plVar3 + -8) = 0x13598d;\n      __gmp_tmp_reentrant_free();\n    }\n  }" if (parenthesized_expression "(param_4 < 0x24)" ( (binary_expression "param_4 < 0x24" identifier < number_literal) )) (compound_statement "{\n    __gmpn_mulmid_basecase(param_1,param_2,param_4 * 2 + -1,param_3,param_4);\n  }" { (expression_statement "__gmpn_mulmid_basecase(param_1,param_2,param_4 * 2 + -1,param_3,param_4);" (call_expression "__gmpn_mulmid_basecase(param_1,param_2,param_4 * 2 + -1,param_3,param_4)" identifier (argument_list "(param_1,param_2,param_4 * 2 + -1,param_3,param_4)" ( identifier , identifier , (binary_expression "param_4 * 2 + -1" (binary_expression "param_4 * 2" identifier * number_literal) + number_literal) , identifier , identifier ))) ;) }) (else_clause "else {\n    local_28 = 0;\n    uVar4 = (param_4 * 3 + 0x40) * 8;\n    if (uVar4 < 0x7f01) {\n      lVar1 = -(uVar4 + 0x17 & 0xfffffffffffffff0);\n      lVar2 = (long)&local_30 + lVar1;\n      plVar3 = (long *)((long)&local_38 + lVar1);\n    }\n    else {\n      local_38 = param_4;\n      local_30 = param_3;\n      lVar2 = __gmp_tmp_reentrant_alloc(&local_28);\n      param_4 = local_38;\n      param_3 = local_30;\n      plVar3 = &local_38;\n    }\n    *(undefined8 *)((long)plVar3 + -8) = 0x13594f;\n    __gmpn_toom42_mulmid(param_1,param_2,param_3,param_4,lVar2);\n    if (local_28 != 0) {\n      *(undefined8 *)((long)plVar3 + -8) = 0x13598d;\n      __gmp_tmp_reentrant_free();\n    }\n  }" else (compound_statement "{\n    local_28 = 0;\n    uVar4 = (param_4 * 3 + 0x40) * 8;\n    if (uVar4 < 0x7f01) {\n      lVar1 = -(uVar4 + 0x17 & 0xfffffffffffffff0);\n      lVar2 = (long)&local_30 + lVar1;\n      plVar3 = (long *)((long)&local_38 + lVar1);\n    }\n    else {\n      local_38 = param_4;\n      local_30 = param_3;\n      lVar2 = __gmp_tmp_reentrant_alloc(&local_28);\n      param_4 = local_38;\n      param_3 = local_30;\n      plVar3 = &local_38;\n    }\n    *(undefined8 *)((long)plVar3 + -8) = 0x13594f;\n    __gmpn_toom42_mulmid(param_1,param_2,param_3,param_4,lVar2);\n    if (local_28 != 0) {\n      *(undefined8 *)((long)plVar3 + -8) = 0x13598d;\n      __gmp_tmp_reentrant_free();\n    }\n  }" { (expression_statement "local_28 = 0;" (assignment_expression "local_28 = 0" identifier = number_literal) ;) (expression_statement "uVar4 = (param_4 * 3 + 0x40) * 8;" (assignment_expression "uVar4 = (param_4 * 3 + 0x40) * 8" identifier = (binary_expression "(param_4 * 3 + 0x40) * 8" (parenthesized_expression "(param_4 * 3 + 0x40)" ( (binary_expression "param_4 * 3 + 0x40" (binary_expression "param_4 * 3" identifier * number_literal) + number_literal) )) * number_literal)) ;) (if_statement "if (uVar4 < 0x7f01) {\n      lVar1 = -(uVar4 + 0x17 & 0xfffffffffffffff0);\n      lVar2 = (long)&local_30 + lVar1;\n      plVar3 = (long *)((long)&local_38 + lVar1);\n    }\n    else {\n      local_38 = param_4;\n      local_30 = param_3;\n      lVar2 = __gmp_tmp_reentrant_alloc(&local_28);\n      param_4 = local_38;\n      param_3 = local_30;\n      plVar3 = &local_38;\n    }" if (parenthesized_expression "(uVar4 < 0x7f01)" ( (binary_expression "uVar4 < 0x7f01" identifier < number_literal) )) (compound_statement "{\n      lVar1 = -(uVar4 + 0x17 & 0xfffffffffffffff0);\n      lVar2 = (long)&local_30 + lVar1;\n      plVar3 = (long *)((long)&local_38 + lVar1);\n    }" { (expression_statement "lVar1 = -(uVar4 + 0x17 & 0xfffffffffffffff0);" (assignment_expression "lVar1 = -(uVar4 + 0x17 & 0xfffffffffffffff0)" identifier = (unary_expression "-(uVar4 + 0x17 & 0xfffffffffffffff0)" - (parenthesized_expression "(uVar4 + 0x17 & 0xfffffffffffffff0)" ( (binary_expression "uVar4 + 0x17 & 0xfffffffffffffff0" (binary_expression "uVar4 + 0x17" identifier + number_literal) & number_literal) )))) ;) (expression_statement "lVar2 = (long)&local_30 + lVar1;" (assignment_expression "lVar2 = (long)&local_30 + lVar1" identifier = (binary_expression "(long)&local_30 + lVar1" (cast_expression "(long)&local_30" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&local_30" & identifier)) + identifier)) ;) (expression_statement "plVar3 = (long *)((long)&local_38 + lVar1);" (assignment_expression "plVar3 = (long *)((long)&local_38 + lVar1)" identifier = (cast_expression "(long *)((long)&local_38 + lVar1)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&local_38 + lVar1)" ( (binary_expression "(long)&local_38 + lVar1" (cast_expression "(long)&local_38" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&local_38" & identifier)) + identifier) )))) ;) }) (else_clause "else {\n      local_38 = param_4;\n      local_30 = param_3;\n      lVar2 = __gmp_tmp_reentrant_alloc(&local_28);\n      param_4 = local_38;\n      param_3 = local_30;\n      plVar3 = &local_38;\n    }" else (compound_statement "{\n      local_38 = param_4;\n      local_30 = param_3;\n      lVar2 = __gmp_tmp_reentrant_alloc(&local_28);\n      param_4 = local_38;\n      param_3 = local_30;\n      plVar3 = &local_38;\n    }" { (expression_statement "local_38 = param_4;" (assignment_expression "local_38 = param_4" identifier = identifier) ;) (expression_statement "local_30 = param_3;" (assignment_expression "local_30 = param_3" identifier = identifier) ;) (expression_statement "lVar2 = __gmp_tmp_reentrant_alloc(&local_28);" (assignment_expression "lVar2 = __gmp_tmp_reentrant_alloc(&local_28)" identifier = (call_expression "__gmp_tmp_reentrant_alloc(&local_28)" identifier (argument_list "(&local_28)" ( (pointer_expression "&local_28" & identifier) )))) ;) (expression_statement "param_4 = local_38;" (assignment_expression "param_4 = local_38" identifier = identifier) ;) (expression_statement "param_3 = local_30;" (assignment_expression "param_3 = local_30" identifier = identifier) ;) (expression_statement "plVar3 = &local_38;" (assignment_expression "plVar3 = &local_38" identifier = (pointer_expression "&local_38" & identifier)) ;) }))) (expression_statement "*(undefined8 *)((long)plVar3 + -8) = 0x13594f;" (assignment_expression "*(undefined8 *)((long)plVar3 + -8) = 0x13594f" (pointer_expression "*(undefined8 *)((long)plVar3 + -8)" * (cast_expression "(undefined8 *)((long)plVar3 + -8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar3 + -8)" ( (binary_expression "(long)plVar3 + -8" (cast_expression "(long)plVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "__gmpn_toom42_mulmid(param_1,param_2,param_3,param_4,lVar2);" (call_expression "__gmpn_toom42_mulmid(param_1,param_2,param_3,param_4,lVar2)" identifier (argument_list "(param_1,param_2,param_3,param_4,lVar2)" ( identifier , identifier , identifier , identifier , identifier ))) ;) (if_statement "if (local_28 != 0) {\n      *(undefined8 *)((long)plVar3 + -8) = 0x13598d;\n      __gmp_tmp_reentrant_free();\n    }" if (parenthesized_expression "(local_28 != 0)" ( (binary_expression "local_28 != 0" identifier != number_literal) )) (compound_statement "{\n      *(undefined8 *)((long)plVar3 + -8) = 0x13598d;\n      __gmp_tmp_reentrant_free();\n    }" { (expression_statement "*(undefined8 *)((long)plVar3 + -8) = 0x13598d;" (assignment_expression "*(undefined8 *)((long)plVar3 + -8) = 0x13598d" (pointer_expression "*(undefined8 *)((long)plVar3 + -8)" * (cast_expression "(undefined8 *)((long)plVar3 + -8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar3 + -8)" ( (binary_expression "(long)plVar3 + -8" (cast_expression "(long)plVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "__gmp_tmp_reentrant_free();" (call_expression "__gmp_tmp_reentrant_free()" identifier (argument_list "()" ( ))) ;) })) }))) (if_statement "if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return;\n  }" if (parenthesized_expression "(local_20 == *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "local_20 == *(long *)(in_FS_OFFSET + 0x28)" identifier == (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) comment (expression_statement "*(undefined8 *)((long)plVar3 + -8) = 0x1359b3;" (assignment_expression "*(undefined8 *)((long)plVar3 + -8) = 0x1359b3" (pointer_expression "*(undefined8 *)((long)plVar3 + -8)" * (cast_expression "(undefined8 *)((long)plVar3 + -8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar3 + -8)" ( (binary_expression "(long)plVar3 + -8" (cast_expression "(long)plVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit "void __gmpn_mulmid_n(mp_ptr rp,mp_srcptr ap,mp_srcptr bp,mp_size_t n)\n\n{\n  long lVar1;\n  tmp_reentrant_t *mark;\n  mp_ptr scratch;\n  mp_size_t *pmVar2;\n  size_t size;\n  long in_FS_OFFSET;\n  mp_size_t local_38;\n  mp_srcptr local_30;\n  tmp_reentrant_t *__tmp_marker;\n  long local_20;\n  \n  pmVar2 = &local_38;\n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  if (n < 0x24) {\n    __gmpn_mulmid_basecase(rp,ap,n * 2 + -1,bp,n);\n  }\n  else {\n    __tmp_marker = (tmp_reentrant_t *)0x0;\n    size = (n * 3 + 0x40) * 8;\n    if (size < 0x7f01) {\n      lVar1 = -(size + 0x17 & 0xfffffffffffffff0);\n      scratch = (mp_ptr)((long)&local_30 + lVar1);\n      pmVar2 = (mp_size_t *)((long)&local_38 + lVar1);\n    }\n    else {\n      local_38 = n;\n      local_30 = bp;\n      scratch = (mp_ptr)__gmp_tmp_reentrant_alloc(&__tmp_marker,size);\n      n = local_38;\n      bp = local_30;\n      pmVar2 = &local_38;\n    }\n    *(undefined8 *)((long)pmVar2 + -8) = 0x13594f;\n    __gmpn_toom42_mulmid(rp,ap,bp,n,scratch);\n    mark = __tmp_marker;\n    if (__tmp_marker != (tmp_reentrant_t *)0x0) {\n      *(undefined8 *)((long)pmVar2 + -8) = 0x13598d;\n      __gmp_tmp_reentrant_free(mark);\n    }\n  }\n  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  *(undefined8 *)((long)pmVar2 + -8) = 0x1359b3;\n  __stack_chk_fail();\n}\n\n" (function_definition "void __gmpn_mulmid_n(mp_ptr rp,mp_srcptr ap,mp_srcptr bp,mp_size_t n)\n\n{\n  long lVar1;\n  tmp_reentrant_t *mark;\n  mp_ptr scratch;\n  mp_size_t *pmVar2;\n  size_t size;\n  long in_FS_OFFSET;\n  mp_size_t local_38;\n  mp_srcptr local_30;\n  tmp_reentrant_t *__tmp_marker;\n  long local_20;\n  \n  pmVar2 = &local_38;\n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  if (n < 0x24) {\n    __gmpn_mulmid_basecase(rp,ap,n * 2 + -1,bp,n);\n  }\n  else {\n    __tmp_marker = (tmp_reentrant_t *)0x0;\n    size = (n * 3 + 0x40) * 8;\n    if (size < 0x7f01) {\n      lVar1 = -(size + 0x17 & 0xfffffffffffffff0);\n      scratch = (mp_ptr)((long)&local_30 + lVar1);\n      pmVar2 = (mp_size_t *)((long)&local_38 + lVar1);\n    }\n    else {\n      local_38 = n;\n      local_30 = bp;\n      scratch = (mp_ptr)__gmp_tmp_reentrant_alloc(&__tmp_marker,size);\n      n = local_38;\n      bp = local_30;\n      pmVar2 = &local_38;\n    }\n    *(undefined8 *)((long)pmVar2 + -8) = 0x13594f;\n    __gmpn_toom42_mulmid(rp,ap,bp,n,scratch);\n    mark = __tmp_marker;\n    if (__tmp_marker != (tmp_reentrant_t *)0x0) {\n      *(undefined8 *)((long)pmVar2 + -8) = 0x13598d;\n      __gmp_tmp_reentrant_free(mark);\n    }\n  }\n  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  *(undefined8 *)((long)pmVar2 + -8) = 0x1359b3;\n  __stack_chk_fail();\n}" primitive_type (function_declarator "__gmpn_mulmid_n(mp_ptr rp,mp_srcptr ap,mp_srcptr bp,mp_size_t n)" identifier (parameter_list "(mp_ptr rp,mp_srcptr ap,mp_srcptr bp,mp_size_t n)" ( (parameter_declaration "mp_ptr rp" type_identifier identifier) , (parameter_declaration "mp_srcptr ap" type_identifier identifier) , (parameter_declaration "mp_srcptr bp" type_identifier identifier) , (parameter_declaration "mp_size_t n" type_identifier identifier) ))) (compound_statement "{\n  long lVar1;\n  tmp_reentrant_t *mark;\n  mp_ptr scratch;\n  mp_size_t *pmVar2;\n  size_t size;\n  long in_FS_OFFSET;\n  mp_size_t local_38;\n  mp_srcptr local_30;\n  tmp_reentrant_t *__tmp_marker;\n  long local_20;\n  \n  pmVar2 = &local_38;\n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  if (n < 0x24) {\n    __gmpn_mulmid_basecase(rp,ap,n * 2 + -1,bp,n);\n  }\n  else {\n    __tmp_marker = (tmp_reentrant_t *)0x0;\n    size = (n * 3 + 0x40) * 8;\n    if (size < 0x7f01) {\n      lVar1 = -(size + 0x17 & 0xfffffffffffffff0);\n      scratch = (mp_ptr)((long)&local_30 + lVar1);\n      pmVar2 = (mp_size_t *)((long)&local_38 + lVar1);\n    }\n    else {\n      local_38 = n;\n      local_30 = bp;\n      scratch = (mp_ptr)__gmp_tmp_reentrant_alloc(&__tmp_marker,size);\n      n = local_38;\n      bp = local_30;\n      pmVar2 = &local_38;\n    }\n    *(undefined8 *)((long)pmVar2 + -8) = 0x13594f;\n    __gmpn_toom42_mulmid(rp,ap,bp,n,scratch);\n    mark = __tmp_marker;\n    if (__tmp_marker != (tmp_reentrant_t *)0x0) {\n      *(undefined8 *)((long)pmVar2 + -8) = 0x13598d;\n      __gmp_tmp_reentrant_free(mark);\n    }\n  }\n  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  *(undefined8 *)((long)pmVar2 + -8) = 0x1359b3;\n  __stack_chk_fail();\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "tmp_reentrant_t *mark;" type_identifier (pointer_declarator "*mark" * identifier) ;) (declaration "mp_ptr scratch;" type_identifier identifier ;) (declaration "mp_size_t *pmVar2;" type_identifier (pointer_declarator "*pmVar2" * identifier) ;) (declaration "size_t size;" primitive_type identifier ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "mp_size_t local_38;" type_identifier identifier ;) (declaration "mp_srcptr local_30;" type_identifier identifier ;) (declaration "tmp_reentrant_t *__tmp_marker;" type_identifier (pointer_declarator "*__tmp_marker" * identifier) ;) (declaration "long local_20;" (sized_type_specifier "long" long) identifier ;) (expression_statement "pmVar2 = &local_38;" (assignment_expression "pmVar2 = &local_38" identifier = (pointer_expression "&local_38" & identifier)) ;) (expression_statement "local_20 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_20 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (if_statement "if (n < 0x24) {\n    __gmpn_mulmid_basecase(rp,ap,n * 2 + -1,bp,n);\n  }\n  else {\n    __tmp_marker = (tmp_reentrant_t *)0x0;\n    size = (n * 3 + 0x40) * 8;\n    if (size < 0x7f01) {\n      lVar1 = -(size + 0x17 & 0xfffffffffffffff0);\n      scratch = (mp_ptr)((long)&local_30 + lVar1);\n      pmVar2 = (mp_size_t *)((long)&local_38 + lVar1);\n    }\n    else {\n      local_38 = n;\n      local_30 = bp;\n      scratch = (mp_ptr)__gmp_tmp_reentrant_alloc(&__tmp_marker,size);\n      n = local_38;\n      bp = local_30;\n      pmVar2 = &local_38;\n    }\n    *(undefined8 *)((long)pmVar2 + -8) = 0x13594f;\n    __gmpn_toom42_mulmid(rp,ap,bp,n,scratch);\n    mark = __tmp_marker;\n    if (__tmp_marker != (tmp_reentrant_t *)0x0) {\n      *(undefined8 *)((long)pmVar2 + -8) = 0x13598d;\n      __gmp_tmp_reentrant_free(mark);\n    }\n  }" if (parenthesized_expression "(n < 0x24)" ( (binary_expression "n < 0x24" identifier < number_literal) )) (compound_statement "{\n    __gmpn_mulmid_basecase(rp,ap,n * 2 + -1,bp,n);\n  }" { (expression_statement "__gmpn_mulmid_basecase(rp,ap,n * 2 + -1,bp,n);" (call_expression "__gmpn_mulmid_basecase(rp,ap,n * 2 + -1,bp,n)" identifier (argument_list "(rp,ap,n * 2 + -1,bp,n)" ( identifier , identifier , (binary_expression "n * 2 + -1" (binary_expression "n * 2" identifier * number_literal) + number_literal) , identifier , identifier ))) ;) }) (else_clause "else {\n    __tmp_marker = (tmp_reentrant_t *)0x0;\n    size = (n * 3 + 0x40) * 8;\n    if (size < 0x7f01) {\n      lVar1 = -(size + 0x17 & 0xfffffffffffffff0);\n      scratch = (mp_ptr)((long)&local_30 + lVar1);\n      pmVar2 = (mp_size_t *)((long)&local_38 + lVar1);\n    }\n    else {\n      local_38 = n;\n      local_30 = bp;\n      scratch = (mp_ptr)__gmp_tmp_reentrant_alloc(&__tmp_marker,size);\n      n = local_38;\n      bp = local_30;\n      pmVar2 = &local_38;\n    }\n    *(undefined8 *)((long)pmVar2 + -8) = 0x13594f;\n    __gmpn_toom42_mulmid(rp,ap,bp,n,scratch);\n    mark = __tmp_marker;\n    if (__tmp_marker != (tmp_reentrant_t *)0x0) {\n      *(undefined8 *)((long)pmVar2 + -8) = 0x13598d;\n      __gmp_tmp_reentrant_free(mark);\n    }\n  }" else (compound_statement "{\n    __tmp_marker = (tmp_reentrant_t *)0x0;\n    size = (n * 3 + 0x40) * 8;\n    if (size < 0x7f01) {\n      lVar1 = -(size + 0x17 & 0xfffffffffffffff0);\n      scratch = (mp_ptr)((long)&local_30 + lVar1);\n      pmVar2 = (mp_size_t *)((long)&local_38 + lVar1);\n    }\n    else {\n      local_38 = n;\n      local_30 = bp;\n      scratch = (mp_ptr)__gmp_tmp_reentrant_alloc(&__tmp_marker,size);\n      n = local_38;\n      bp = local_30;\n      pmVar2 = &local_38;\n    }\n    *(undefined8 *)((long)pmVar2 + -8) = 0x13594f;\n    __gmpn_toom42_mulmid(rp,ap,bp,n,scratch);\n    mark = __tmp_marker;\n    if (__tmp_marker != (tmp_reentrant_t *)0x0) {\n      *(undefined8 *)((long)pmVar2 + -8) = 0x13598d;\n      __gmp_tmp_reentrant_free(mark);\n    }\n  }" { (expression_statement "__tmp_marker = (tmp_reentrant_t *)0x0;" (assignment_expression "__tmp_marker = (tmp_reentrant_t *)0x0" identifier = (cast_expression "(tmp_reentrant_t *)0x0" ( (type_descriptor "tmp_reentrant_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "size = (n * 3 + 0x40) * 8;" (assignment_expression "size = (n * 3 + 0x40) * 8" identifier = (binary_expression "(n * 3 + 0x40) * 8" (parenthesized_expression "(n * 3 + 0x40)" ( (binary_expression "n * 3 + 0x40" (binary_expression "n * 3" identifier * number_literal) + number_literal) )) * number_literal)) ;) (if_statement "if (size < 0x7f01) {\n      lVar1 = -(size + 0x17 & 0xfffffffffffffff0);\n      scratch = (mp_ptr)((long)&local_30 + lVar1);\n      pmVar2 = (mp_size_t *)((long)&local_38 + lVar1);\n    }\n    else {\n      local_38 = n;\n      local_30 = bp;\n      scratch = (mp_ptr)__gmp_tmp_reentrant_alloc(&__tmp_marker,size);\n      n = local_38;\n      bp = local_30;\n      pmVar2 = &local_38;\n    }" if (parenthesized_expression "(size < 0x7f01)" ( (binary_expression "size < 0x7f01" identifier < number_literal) )) (compound_statement "{\n      lVar1 = -(size + 0x17 & 0xfffffffffffffff0);\n      scratch = (mp_ptr)((long)&local_30 + lVar1);\n      pmVar2 = (mp_size_t *)((long)&local_38 + lVar1);\n    }" { (expression_statement "lVar1 = -(size + 0x17 & 0xfffffffffffffff0);" (assignment_expression "lVar1 = -(size + 0x17 & 0xfffffffffffffff0)" identifier = (unary_expression "-(size + 0x17 & 0xfffffffffffffff0)" - (parenthesized_expression "(size + 0x17 & 0xfffffffffffffff0)" ( (binary_expression "size + 0x17 & 0xfffffffffffffff0" (binary_expression "size + 0x17" identifier + number_literal) & number_literal) )))) ;) (expression_statement "scratch = (mp_ptr)((long)&local_30 + lVar1);" (assignment_expression "scratch = (mp_ptr)((long)&local_30 + lVar1)" identifier = (call_expression "(mp_ptr)((long)&local_30 + lVar1)" (parenthesized_expression "(mp_ptr)" ( identifier )) (argument_list "((long)&local_30 + lVar1)" ( (binary_expression "(long)&local_30 + lVar1" (cast_expression "(long)&local_30" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&local_30" & identifier)) + identifier) )))) ;) (expression_statement "pmVar2 = (mp_size_t *)((long)&local_38 + lVar1);" (assignment_expression "pmVar2 = (mp_size_t *)((long)&local_38 + lVar1)" identifier = (cast_expression "(mp_size_t *)((long)&local_38 + lVar1)" ( (type_descriptor "mp_size_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&local_38 + lVar1)" ( (binary_expression "(long)&local_38 + lVar1" (cast_expression "(long)&local_38" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&local_38" & identifier)) + identifier) )))) ;) }) (else_clause "else {\n      local_38 = n;\n      local_30 = bp;\n      scratch = (mp_ptr)__gmp_tmp_reentrant_alloc(&__tmp_marker,size);\n      n = local_38;\n      bp = local_30;\n      pmVar2 = &local_38;\n    }" else (compound_statement "{\n      local_38 = n;\n      local_30 = bp;\n      scratch = (mp_ptr)__gmp_tmp_reentrant_alloc(&__tmp_marker,size);\n      n = local_38;\n      bp = local_30;\n      pmVar2 = &local_38;\n    }" { (expression_statement "local_38 = n;" (assignment_expression "local_38 = n" identifier = identifier) ;) (expression_statement "local_30 = bp;" (assignment_expression "local_30 = bp" identifier = identifier) ;) (expression_statement "scratch = (mp_ptr)__gmp_tmp_reentrant_alloc(&__tmp_marker,size);" (assignment_expression "scratch = (mp_ptr)__gmp_tmp_reentrant_alloc(&__tmp_marker,size)" identifier = (cast_expression "(mp_ptr)__gmp_tmp_reentrant_alloc(&__tmp_marker,size)" ( (type_descriptor "mp_ptr" type_identifier) ) (call_expression "__gmp_tmp_reentrant_alloc(&__tmp_marker,size)" identifier (argument_list "(&__tmp_marker,size)" ( (pointer_expression "&__tmp_marker" & identifier) , identifier ))))) ;) (expression_statement "n = local_38;" (assignment_expression "n = local_38" identifier = identifier) ;) (expression_statement "bp = local_30;" (assignment_expression "bp = local_30" identifier = identifier) ;) (expression_statement "pmVar2 = &local_38;" (assignment_expression "pmVar2 = &local_38" identifier = (pointer_expression "&local_38" & identifier)) ;) }))) (expression_statement "*(undefined8 *)((long)pmVar2 + -8) = 0x13594f;" (assignment_expression "*(undefined8 *)((long)pmVar2 + -8) = 0x13594f" (pointer_expression "*(undefined8 *)((long)pmVar2 + -8)" * (cast_expression "(undefined8 *)((long)pmVar2 + -8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pmVar2 + -8)" ( (binary_expression "(long)pmVar2 + -8" (cast_expression "(long)pmVar2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "__gmpn_toom42_mulmid(rp,ap,bp,n,scratch);" (call_expression "__gmpn_toom42_mulmid(rp,ap,bp,n,scratch)" identifier (argument_list "(rp,ap,bp,n,scratch)" ( identifier , identifier , identifier , identifier , identifier ))) ;) (expression_statement "mark = __tmp_marker;" (assignment_expression "mark = __tmp_marker" identifier = identifier) ;) (if_statement "if (__tmp_marker != (tmp_reentrant_t *)0x0) {\n      *(undefined8 *)((long)pmVar2 + -8) = 0x13598d;\n      __gmp_tmp_reentrant_free(mark);\n    }" if (parenthesized_expression "(__tmp_marker != (tmp_reentrant_t *)0x0)" ( (binary_expression "__tmp_marker != (tmp_reentrant_t *)0x0" identifier != (cast_expression "(tmp_reentrant_t *)0x0" ( (type_descriptor "tmp_reentrant_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      *(undefined8 *)((long)pmVar2 + -8) = 0x13598d;\n      __gmp_tmp_reentrant_free(mark);\n    }" { (expression_statement "*(undefined8 *)((long)pmVar2 + -8) = 0x13598d;" (assignment_expression "*(undefined8 *)((long)pmVar2 + -8) = 0x13598d" (pointer_expression "*(undefined8 *)((long)pmVar2 + -8)" * (cast_expression "(undefined8 *)((long)pmVar2 + -8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pmVar2 + -8)" ( (binary_expression "(long)pmVar2 + -8" (cast_expression "(long)pmVar2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "__gmp_tmp_reentrant_free(mark);" (call_expression "__gmp_tmp_reentrant_free(mark)" identifier (argument_list "(mark)" ( identifier ))) ;) })) }))) (if_statement "if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return;\n  }" if (parenthesized_expression "(local_20 == *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "local_20 == *(long *)(in_FS_OFFSET + 0x28)" identifier == (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) comment (expression_statement "*(undefined8 *)((long)pmVar2 + -8) = 0x1359b3;" (assignment_expression "*(undefined8 *)((long)pmVar2 + -8) = 0x1359b3" (pointer_expression "*(undefined8 *)((long)pmVar2 + -8)" * (cast_expression "(undefined8 *)((long)pmVar2 + -8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pmVar2 + -8)" ( (binary_expression "(long)pmVar2 + -8" (cast_expression "(long)pmVar2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit "void __gmpn_mulmid_n(undefined8 param_1,undefined8 param_2,undefined8 param_3,long param_4)\n\n{\n  long lVar1;\n  long lVar2;\n  long *plVar3;\n  ulong uVar4;\n  long in_FS_OFFSET;\n  long local_38;\n  undefined8 local_30;\n  long local_28;\n  long local_20;\n  \n  plVar3 = &local_38;\n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_4 < 0x24) {\n    __gmpn_mulmid_basecase(param_1,param_2,param_4 * 2 + -1,param_3,param_4);\n  }\n  else {\n    local_28 = 0;\n    uVar4 = (param_4 * 3 + 0x40) * 8;\n    if (uVar4 < 0x7f01) {\n      lVar1 = -(uVar4 + 0x17 & 0xfffffffffffffff0);\n      lVar2 = (long)&local_30 + lVar1;\n      plVar3 = (long *)((long)&local_38 + lVar1);\n    }\n    else {\n      local_38 = param_4;\n      local_30 = param_3;\n      lVar2 = __gmp_tmp_reentrant_alloc(&local_28);\n      param_4 = local_38;\n      param_3 = local_30;\n      plVar3 = &local_38;\n    }\n    *(undefined8 *)((long)plVar3 + -8) = 0x13594f;\n    __gmpn_toom42_mulmid(param_1,param_2,param_3,param_4,lVar2);\n    if (local_28 != 0) {\n      *(undefined8 *)((long)plVar3 + -8) = 0x13598d;\n      __gmp_tmp_reentrant_free();\n    }\n  }\n  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return;\n  }\n                    \n  *(undefined8 *)((long)plVar3 + -8) = 0x1359b3;\n  __stack_chk_fail();\n}\n\n" (function_definition "void __gmpn_mulmid_n(undefined8 param_1,undefined8 param_2,undefined8 param_3,long param_4)\n\n{\n  long lVar1;\n  long lVar2;\n  long *plVar3;\n  ulong uVar4;\n  long in_FS_OFFSET;\n  long local_38;\n  undefined8 local_30;\n  long local_28;\n  long local_20;\n  \n  plVar3 = &local_38;\n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_4 < 0x24) {\n    __gmpn_mulmid_basecase(param_1,param_2,param_4 * 2 + -1,param_3,param_4);\n  }\n  else {\n    local_28 = 0;\n    uVar4 = (param_4 * 3 + 0x40) * 8;\n    if (uVar4 < 0x7f01) {\n      lVar1 = -(uVar4 + 0x17 & 0xfffffffffffffff0);\n      lVar2 = (long)&local_30 + lVar1;\n      plVar3 = (long *)((long)&local_38 + lVar1);\n    }\n    else {\n      local_38 = param_4;\n      local_30 = param_3;\n      lVar2 = __gmp_tmp_reentrant_alloc(&local_28);\n      param_4 = local_38;\n      param_3 = local_30;\n      plVar3 = &local_38;\n    }\n    *(undefined8 *)((long)plVar3 + -8) = 0x13594f;\n    __gmpn_toom42_mulmid(param_1,param_2,param_3,param_4,lVar2);\n    if (local_28 != 0) {\n      *(undefined8 *)((long)plVar3 + -8) = 0x13598d;\n      __gmp_tmp_reentrant_free();\n    }\n  }\n  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return;\n  }\n                    \n  *(undefined8 *)((long)plVar3 + -8) = 0x1359b3;\n  __stack_chk_fail();\n}" primitive_type (function_declarator "__gmpn_mulmid_n(undefined8 param_1,undefined8 param_2,undefined8 param_3,long param_4)" identifier (parameter_list "(undefined8 param_1,undefined8 param_2,undefined8 param_3,long param_4)" ( (parameter_declaration "undefined8 param_1" type_identifier identifier) , (parameter_declaration "undefined8 param_2" type_identifier identifier) , (parameter_declaration "undefined8 param_3" type_identifier identifier) , (parameter_declaration "long param_4" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  long lVar1;\n  long lVar2;\n  long *plVar3;\n  ulong uVar4;\n  long in_FS_OFFSET;\n  long local_38;\n  undefined8 local_30;\n  long local_28;\n  long local_20;\n  \n  plVar3 = &local_38;\n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_4 < 0x24) {\n    __gmpn_mulmid_basecase(param_1,param_2,param_4 * 2 + -1,param_3,param_4);\n  }\n  else {\n    local_28 = 0;\n    uVar4 = (param_4 * 3 + 0x40) * 8;\n    if (uVar4 < 0x7f01) {\n      lVar1 = -(uVar4 + 0x17 & 0xfffffffffffffff0);\n      lVar2 = (long)&local_30 + lVar1;\n      plVar3 = (long *)((long)&local_38 + lVar1);\n    }\n    else {\n      local_38 = param_4;\n      local_30 = param_3;\n      lVar2 = __gmp_tmp_reentrant_alloc(&local_28);\n      param_4 = local_38;\n      param_3 = local_30;\n      plVar3 = &local_38;\n    }\n    *(undefined8 *)((long)plVar3 + -8) = 0x13594f;\n    __gmpn_toom42_mulmid(param_1,param_2,param_3,param_4,lVar2);\n    if (local_28 != 0) {\n      *(undefined8 *)((long)plVar3 + -8) = 0x13598d;\n      __gmp_tmp_reentrant_free();\n    }\n  }\n  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return;\n  }\n                    \n  *(undefined8 *)((long)plVar3 + -8) = 0x1359b3;\n  __stack_chk_fail();\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "long *plVar3;" (sized_type_specifier "long" long) (pointer_declarator "*plVar3" * identifier) ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "long local_38;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 local_30;" type_identifier identifier ;) (declaration "long local_28;" (sized_type_specifier "long" long) identifier ;) (declaration "long local_20;" (sized_type_specifier "long" long) identifier ;) (expression_statement "plVar3 = &local_38;" (assignment_expression "plVar3 = &local_38" identifier = (pointer_expression "&local_38" & identifier)) ;) (expression_statement "local_20 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_20 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (if_statement "if (param_4 < 0x24) {\n    __gmpn_mulmid_basecase(param_1,param_2,param_4 * 2 + -1,param_3,param_4);\n  }\n  else {\n    local_28 = 0;\n    uVar4 = (param_4 * 3 + 0x40) * 8;\n    if (uVar4 < 0x7f01) {\n      lVar1 = -(uVar4 + 0x17 & 0xfffffffffffffff0);\n      lVar2 = (long)&local_30 + lVar1;\n      plVar3 = (long *)((long)&local_38 + lVar1);\n    }\n    else {\n      local_38 = param_4;\n      local_30 = param_3;\n      lVar2 = __gmp_tmp_reentrant_alloc(&local_28);\n      param_4 = local_38;\n      param_3 = local_30;\n      plVar3 = &local_38;\n    }\n    *(undefined8 *)((long)plVar3 + -8) = 0x13594f;\n    __gmpn_toom42_mulmid(param_1,param_2,param_3,param_4,lVar2);\n    if (local_28 != 0) {\n      *(undefined8 *)((long)plVar3 + -8) = 0x13598d;\n      __gmp_tmp_reentrant_free();\n    }\n  }" if (parenthesized_expression "(param_4 < 0x24)" ( (binary_expression "param_4 < 0x24" identifier < number_literal) )) (compound_statement "{\n    __gmpn_mulmid_basecase(param_1,param_2,param_4 * 2 + -1,param_3,param_4);\n  }" { (expression_statement "__gmpn_mulmid_basecase(param_1,param_2,param_4 * 2 + -1,param_3,param_4);" (call_expression "__gmpn_mulmid_basecase(param_1,param_2,param_4 * 2 + -1,param_3,param_4)" identifier (argument_list "(param_1,param_2,param_4 * 2 + -1,param_3,param_4)" ( identifier , identifier , (binary_expression "param_4 * 2 + -1" (binary_expression "param_4 * 2" identifier * number_literal) + number_literal) , identifier , identifier ))) ;) }) (else_clause "else {\n    local_28 = 0;\n    uVar4 = (param_4 * 3 + 0x40) * 8;\n    if (uVar4 < 0x7f01) {\n      lVar1 = -(uVar4 + 0x17 & 0xfffffffffffffff0);\n      lVar2 = (long)&local_30 + lVar1;\n      plVar3 = (long *)((long)&local_38 + lVar1);\n    }\n    else {\n      local_38 = param_4;\n      local_30 = param_3;\n      lVar2 = __gmp_tmp_reentrant_alloc(&local_28);\n      param_4 = local_38;\n      param_3 = local_30;\n      plVar3 = &local_38;\n    }\n    *(undefined8 *)((long)plVar3 + -8) = 0x13594f;\n    __gmpn_toom42_mulmid(param_1,param_2,param_3,param_4,lVar2);\n    if (local_28 != 0) {\n      *(undefined8 *)((long)plVar3 + -8) = 0x13598d;\n      __gmp_tmp_reentrant_free();\n    }\n  }" else (compound_statement "{\n    local_28 = 0;\n    uVar4 = (param_4 * 3 + 0x40) * 8;\n    if (uVar4 < 0x7f01) {\n      lVar1 = -(uVar4 + 0x17 & 0xfffffffffffffff0);\n      lVar2 = (long)&local_30 + lVar1;\n      plVar3 = (long *)((long)&local_38 + lVar1);\n    }\n    else {\n      local_38 = param_4;\n      local_30 = param_3;\n      lVar2 = __gmp_tmp_reentrant_alloc(&local_28);\n      param_4 = local_38;\n      param_3 = local_30;\n      plVar3 = &local_38;\n    }\n    *(undefined8 *)((long)plVar3 + -8) = 0x13594f;\n    __gmpn_toom42_mulmid(param_1,param_2,param_3,param_4,lVar2);\n    if (local_28 != 0) {\n      *(undefined8 *)((long)plVar3 + -8) = 0x13598d;\n      __gmp_tmp_reentrant_free();\n    }\n  }" { (expression_statement "local_28 = 0;" (assignment_expression "local_28 = 0" identifier = number_literal) ;) (expression_statement "uVar4 = (param_4 * 3 + 0x40) * 8;" (assignment_expression "uVar4 = (param_4 * 3 + 0x40) * 8" identifier = (binary_expression "(param_4 * 3 + 0x40) * 8" (parenthesized_expression "(param_4 * 3 + 0x40)" ( (binary_expression "param_4 * 3 + 0x40" (binary_expression "param_4 * 3" identifier * number_literal) + number_literal) )) * number_literal)) ;) (if_statement "if (uVar4 < 0x7f01) {\n      lVar1 = -(uVar4 + 0x17 & 0xfffffffffffffff0);\n      lVar2 = (long)&local_30 + lVar1;\n      plVar3 = (long *)((long)&local_38 + lVar1);\n    }\n    else {\n      local_38 = param_4;\n      local_30 = param_3;\n      lVar2 = __gmp_tmp_reentrant_alloc(&local_28);\n      param_4 = local_38;\n      param_3 = local_30;\n      plVar3 = &local_38;\n    }" if (parenthesized_expression "(uVar4 < 0x7f01)" ( (binary_expression "uVar4 < 0x7f01" identifier < number_literal) )) (compound_statement "{\n      lVar1 = -(uVar4 + 0x17 & 0xfffffffffffffff0);\n      lVar2 = (long)&local_30 + lVar1;\n      plVar3 = (long *)((long)&local_38 + lVar1);\n    }" { (expression_statement "lVar1 = -(uVar4 + 0x17 & 0xfffffffffffffff0);" (assignment_expression "lVar1 = -(uVar4 + 0x17 & 0xfffffffffffffff0)" identifier = (unary_expression "-(uVar4 + 0x17 & 0xfffffffffffffff0)" - (parenthesized_expression "(uVar4 + 0x17 & 0xfffffffffffffff0)" ( (binary_expression "uVar4 + 0x17 & 0xfffffffffffffff0" (binary_expression "uVar4 + 0x17" identifier + number_literal) & number_literal) )))) ;) (expression_statement "lVar2 = (long)&local_30 + lVar1;" (assignment_expression "lVar2 = (long)&local_30 + lVar1" identifier = (binary_expression "(long)&local_30 + lVar1" (cast_expression "(long)&local_30" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&local_30" & identifier)) + identifier)) ;) (expression_statement "plVar3 = (long *)((long)&local_38 + lVar1);" (assignment_expression "plVar3 = (long *)((long)&local_38 + lVar1)" identifier = (cast_expression "(long *)((long)&local_38 + lVar1)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&local_38 + lVar1)" ( (binary_expression "(long)&local_38 + lVar1" (cast_expression "(long)&local_38" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&local_38" & identifier)) + identifier) )))) ;) }) (else_clause "else {\n      local_38 = param_4;\n      local_30 = param_3;\n      lVar2 = __gmp_tmp_reentrant_alloc(&local_28);\n      param_4 = local_38;\n      param_3 = local_30;\n      plVar3 = &local_38;\n    }" else (compound_statement "{\n      local_38 = param_4;\n      local_30 = param_3;\n      lVar2 = __gmp_tmp_reentrant_alloc(&local_28);\n      param_4 = local_38;\n      param_3 = local_30;\n      plVar3 = &local_38;\n    }" { (expression_statement "local_38 = param_4;" (assignment_expression "local_38 = param_4" identifier = identifier) ;) (expression_statement "local_30 = param_3;" (assignment_expression "local_30 = param_3" identifier = identifier) ;) (expression_statement "lVar2 = __gmp_tmp_reentrant_alloc(&local_28);" (assignment_expression "lVar2 = __gmp_tmp_reentrant_alloc(&local_28)" identifier = (call_expression "__gmp_tmp_reentrant_alloc(&local_28)" identifier (argument_list "(&local_28)" ( (pointer_expression "&local_28" & identifier) )))) ;) (expression_statement "param_4 = local_38;" (assignment_expression "param_4 = local_38" identifier = identifier) ;) (expression_statement "param_3 = local_30;" (assignment_expression "param_3 = local_30" identifier = identifier) ;) (expression_statement "plVar3 = &local_38;" (assignment_expression "plVar3 = &local_38" identifier = (pointer_expression "&local_38" & identifier)) ;) }))) (expression_statement "*(undefined8 *)((long)plVar3 + -8) = 0x13594f;" (assignment_expression "*(undefined8 *)((long)plVar3 + -8) = 0x13594f" (pointer_expression "*(undefined8 *)((long)plVar3 + -8)" * (cast_expression "(undefined8 *)((long)plVar3 + -8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar3 + -8)" ( (binary_expression "(long)plVar3 + -8" (cast_expression "(long)plVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "__gmpn_toom42_mulmid(param_1,param_2,param_3,param_4,lVar2);" (call_expression "__gmpn_toom42_mulmid(param_1,param_2,param_3,param_4,lVar2)" identifier (argument_list "(param_1,param_2,param_3,param_4,lVar2)" ( identifier , identifier , identifier , identifier , identifier ))) ;) (if_statement "if (local_28 != 0) {\n      *(undefined8 *)((long)plVar3 + -8) = 0x13598d;\n      __gmp_tmp_reentrant_free();\n    }" if (parenthesized_expression "(local_28 != 0)" ( (binary_expression "local_28 != 0" identifier != number_literal) )) (compound_statement "{\n      *(undefined8 *)((long)plVar3 + -8) = 0x13598d;\n      __gmp_tmp_reentrant_free();\n    }" { (expression_statement "*(undefined8 *)((long)plVar3 + -8) = 0x13598d;" (assignment_expression "*(undefined8 *)((long)plVar3 + -8) = 0x13598d" (pointer_expression "*(undefined8 *)((long)plVar3 + -8)" * (cast_expression "(undefined8 *)((long)plVar3 + -8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar3 + -8)" ( (binary_expression "(long)plVar3 + -8" (cast_expression "(long)plVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "__gmp_tmp_reentrant_free();" (call_expression "__gmp_tmp_reentrant_free()" identifier (argument_list "()" ( ))) ;) })) }))) (if_statement "if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return;\n  }" if (parenthesized_expression "(local_20 == *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "local_20 == *(long *)(in_FS_OFFSET + 0x28)" identifier == (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "*(undefined8 *)((long)plVar3 + -8) = 0x1359b3;" (assignment_expression "*(undefined8 *)((long)plVar3 + -8) = 0x1359b3" (pointer_expression "*(undefined8 *)((long)plVar3 + -8)" * (cast_expression "(undefined8 *)((long)plVar3 + -8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar3 + -8)" ( (binary_expression "(long)plVar3 + -8" (cast_expression "(long)plVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) ))) (compound_statement { (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression & IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression (binary_expression IDENT * LIT) + LIT) , IDENT , IDENT ))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT * LIT) + LIT) )) * LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (unary_expression - (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression & IDENT)) + IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression & IDENT)) + IDENT) )))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression & IDENT) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression & IDENT)) ;) }))) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT , IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (return_statement return ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) })))
(function_definition "void __gmpn_mulmid_n(undefined8 param_1,undefined8 param_2,undefined8 param_3,long param_4)\n\n{\n  long lVar1;\n  long lVar2;\n  long *plVar3;\n  ulong uVar4;\n  long in_FS_OFFSET;\n  long local_38;\n  undefined8 local_30;\n  long local_28;\n  long local_20;\n  \n  plVar3 = &local_38;\n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_4 < 0x24) {\n    __gmpn_mulmid_basecase(param_1,param_2,param_4 * 2 + -1,param_3,param_4);\n  }\n  else {\n    local_28 = 0;\n    uVar4 = (param_4 * 3 + 0x40) * 8;\n    if (uVar4 < 0x7f01) {\n      lVar1 = -(uVar4 + 0x17 & 0xfffffffffffffff0);\n      lVar2 = (long)&local_30 + lVar1;\n      plVar3 = (long *)((long)&local_38 + lVar1);\n    }\n    else {\n      local_38 = param_4;\n      local_30 = param_3;\n      lVar2 = __gmp_tmp_reentrant_alloc(&local_28);\n      param_4 = local_38;\n      param_3 = local_30;\n      plVar3 = &local_38;\n    }\n    *(undefined8 *)((long)plVar3 + -8) = 0x13594f;\n    __gmpn_toom42_mulmid(param_1,param_2,param_3,param_4,lVar2);\n    if (local_28 != 0) {\n      *(undefined8 *)((long)plVar3 + -8) = 0x13598d;\n      __gmp_tmp_reentrant_free();\n    }\n  }\n  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return;\n  }\n                    \n  *(undefined8 *)((long)plVar3 + -8) = 0x1359b3;\n  __stack_chk_fail();\n}" (primitive_type "void") (function_declarator "__gmpn_mulmid_n(undefined8 param_1,undefined8 param_2,undefined8 param_3,long param_4)" (identifier "__gmpn_mulmid_n") (parameter_list "(undefined8 param_1,undefined8 param_2,undefined8 param_3,long param_4)" (( "(") (parameter_declaration "undefined8 param_1" (type_identifier "undefined8") (identifier "param_1")) (, ",") (parameter_declaration "undefined8 param_2" (type_identifier "undefined8") (identifier "param_2")) (, ",") (parameter_declaration "undefined8 param_3" (type_identifier "undefined8") (identifier "param_3")) (, ",") (parameter_declaration "long param_4" (sized_type_specifier "long" (long "long")) (identifier "param_4")) () ")"))) (compound_statement "{\n  long lVar1;\n  long lVar2;\n  long *plVar3;\n  ulong uVar4;\n  long in_FS_OFFSET;\n  long local_38;\n  undefined8 local_30;\n  long local_28;\n  long local_20;\n  \n  plVar3 = &local_38;\n  local_20 = *(long *)(in_FS_OFFSET + 0x28);\n  if (param_4 < 0x24) {\n    __gmpn_mulmid_basecase(param_1,param_2,param_4 * 2 + -1,param_3,param_4);\n  }\n  else {\n    local_28 = 0;\n    uVar4 = (param_4 * 3 + 0x40) * 8;\n    if (uVar4 < 0x7f01) {\n      lVar1 = -(uVar4 + 0x17 & 0xfffffffffffffff0);\n      lVar2 = (long)&local_30 + lVar1;\n      plVar3 = (long *)((long)&local_38 + lVar1);\n    }\n    else {\n      local_38 = param_4;\n      local_30 = param_3;\n      lVar2 = __gmp_tmp_reentrant_alloc(&local_28);\n      param_4 = local_38;\n      param_3 = local_30;\n      plVar3 = &local_38;\n    }\n    *(undefined8 *)((long)plVar3 + -8) = 0x13594f;\n    __gmpn_toom42_mulmid(param_1,param_2,param_3,param_4,lVar2);\n    if (local_28 != 0) {\n      *(undefined8 *)((long)plVar3 + -8) = 0x13598d;\n      __gmp_tmp_reentrant_free();\n    }\n  }\n  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return;\n  }\n                    \n  *(undefined8 *)((long)plVar3 + -8) = 0x1359b3;\n  __stack_chk_fail();\n}" ({ "{") (declaration "long lVar1;" (sized_type_specifier "long" (long "long")) (identifier "lVar1") (; ";")) (declaration "long lVar2;" (sized_type_specifier "long" (long "long")) (identifier "lVar2") (; ";")) (declaration "long *plVar3;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar3" (* "*") (identifier "plVar3")) (; ";")) (declaration "ulong uVar4;" (type_identifier "ulong") (identifier "uVar4") (; ";")) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" (long "long")) (identifier "in_FS_OFFSET") (; ";")) (declaration "long local_38;" (sized_type_specifier "long" (long "long")) (identifier "local_38") (; ";")) (declaration "undefined8 local_30;" (type_identifier "undefined8") (identifier "local_30") (; ";")) (declaration "long local_28;" (sized_type_specifier "long" (long "long")) (identifier "local_28") (; ";")) (declaration "long local_20;" (sized_type_specifier "long" (long "long")) (identifier "local_20") (; ";")) (expression_statement "plVar3 = &local_38;" (assignment_expression "plVar3 = &local_38" (identifier "plVar3") (= "=") (pointer_expression "&local_38" (& "&") (identifier "local_38"))) (; ";")) (expression_statement "local_20 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_20 = *(long *)(in_FS_OFFSET + 0x28)" (identifier "local_20") (= "=") (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" (* "*") (cast_expression "(long *)(in_FS_OFFSET + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_FS_OFFSET + 0x28)" (( "(") (binary_expression "in_FS_OFFSET + 0x28" (identifier "in_FS_OFFSET") (+ "+") (number_literal "0x28")) () ")"))))) (; ";")) (if_statement "if (param_4 < 0x24) {\n    __gmpn_mulmid_basecase(param_1,param_2,param_4 * 2 + -1,param_3,param_4);\n  }\n  else {\n    local_28 = 0;\n    uVar4 = (param_4 * 3 + 0x40) * 8;\n    if (uVar4 < 0x7f01) {\n      lVar1 = -(uVar4 + 0x17 & 0xfffffffffffffff0);\n      lVar2 = (long)&local_30 + lVar1;\n      plVar3 = (long *)((long)&local_38 + lVar1);\n    }\n    else {\n      local_38 = param_4;\n      local_30 = param_3;\n      lVar2 = __gmp_tmp_reentrant_alloc(&local_28);\n      param_4 = local_38;\n      param_3 = local_30;\n      plVar3 = &local_38;\n    }\n    *(undefined8 *)((long)plVar3 + -8) = 0x13594f;\n    __gmpn_toom42_mulmid(param_1,param_2,param_3,param_4,lVar2);\n    if (local_28 != 0) {\n      *(undefined8 *)((long)plVar3 + -8) = 0x13598d;\n      __gmp_tmp_reentrant_free();\n    }\n  }" (if "if") (parenthesized_expression "(param_4 < 0x24)" (( "(") (binary_expression "param_4 < 0x24" (identifier "param_4") (< "<") (number_literal "0x24")) () ")")) (compound_statement "{\n    __gmpn_mulmid_basecase(param_1,param_2,param_4 * 2 + -1,param_3,param_4);\n  }" ({ "{") (expression_statement "__gmpn_mulmid_basecase(param_1,param_2,param_4 * 2 + -1,param_3,param_4);" (call_expression "__gmpn_mulmid_basecase(param_1,param_2,param_4 * 2 + -1,param_3,param_4)" (identifier "__gmpn_mulmid_basecase") (argument_list "(param_1,param_2,param_4 * 2 + -1,param_3,param_4)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (binary_expression "param_4 * 2 + -1" (binary_expression "param_4 * 2" (identifier "param_4") (* "*") (number_literal "2")) (+ "+") (number_literal "-1")) (, ",") (identifier "param_3") (, ",") (identifier "param_4") () ")"))) (; ";")) (} "}")) (else_clause "else {\n    local_28 = 0;\n    uVar4 = (param_4 * 3 + 0x40) * 8;\n    if (uVar4 < 0x7f01) {\n      lVar1 = -(uVar4 + 0x17 & 0xfffffffffffffff0);\n      lVar2 = (long)&local_30 + lVar1;\n      plVar3 = (long *)((long)&local_38 + lVar1);\n    }\n    else {\n      local_38 = param_4;\n      local_30 = param_3;\n      lVar2 = __gmp_tmp_reentrant_alloc(&local_28);\n      param_4 = local_38;\n      param_3 = local_30;\n      plVar3 = &local_38;\n    }\n    *(undefined8 *)((long)plVar3 + -8) = 0x13594f;\n    __gmpn_toom42_mulmid(param_1,param_2,param_3,param_4,lVar2);\n    if (local_28 != 0) {\n      *(undefined8 *)((long)plVar3 + -8) = 0x13598d;\n      __gmp_tmp_reentrant_free();\n    }\n  }" (else "else") (compound_statement "{\n    local_28 = 0;\n    uVar4 = (param_4 * 3 + 0x40) * 8;\n    if (uVar4 < 0x7f01) {\n      lVar1 = -(uVar4 + 0x17 & 0xfffffffffffffff0);\n      lVar2 = (long)&local_30 + lVar1;\n      plVar3 = (long *)((long)&local_38 + lVar1);\n    }\n    else {\n      local_38 = param_4;\n      local_30 = param_3;\n      lVar2 = __gmp_tmp_reentrant_alloc(&local_28);\n      param_4 = local_38;\n      param_3 = local_30;\n      plVar3 = &local_38;\n    }\n    *(undefined8 *)((long)plVar3 + -8) = 0x13594f;\n    __gmpn_toom42_mulmid(param_1,param_2,param_3,param_4,lVar2);\n    if (local_28 != 0) {\n      *(undefined8 *)((long)plVar3 + -8) = 0x13598d;\n      __gmp_tmp_reentrant_free();\n    }\n  }" ({ "{") (expression_statement "local_28 = 0;" (assignment_expression "local_28 = 0" (identifier "local_28") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar4 = (param_4 * 3 + 0x40) * 8;" (assignment_expression "uVar4 = (param_4 * 3 + 0x40) * 8" (identifier "uVar4") (= "=") (binary_expression "(param_4 * 3 + 0x40) * 8" (parenthesized_expression "(param_4 * 3 + 0x40)" (( "(") (binary_expression "param_4 * 3 + 0x40" (binary_expression "param_4 * 3" (identifier "param_4") (* "*") (number_literal "3")) (+ "+") (number_literal "0x40")) () ")")) (* "*") (number_literal "8"))) (; ";")) (if_statement "if (uVar4 < 0x7f01) {\n      lVar1 = -(uVar4 + 0x17 & 0xfffffffffffffff0);\n      lVar2 = (long)&local_30 + lVar1;\n      plVar3 = (long *)((long)&local_38 + lVar1);\n    }\n    else {\n      local_38 = param_4;\n      local_30 = param_3;\n      lVar2 = __gmp_tmp_reentrant_alloc(&local_28);\n      param_4 = local_38;\n      param_3 = local_30;\n      plVar3 = &local_38;\n    }" (if "if") (parenthesized_expression "(uVar4 < 0x7f01)" (( "(") (binary_expression "uVar4 < 0x7f01" (identifier "uVar4") (< "<") (number_literal "0x7f01")) () ")")) (compound_statement "{\n      lVar1 = -(uVar4 + 0x17 & 0xfffffffffffffff0);\n      lVar2 = (long)&local_30 + lVar1;\n      plVar3 = (long *)((long)&local_38 + lVar1);\n    }" ({ "{") (expression_statement "lVar1 = -(uVar4 + 0x17 & 0xfffffffffffffff0);" (assignment_expression "lVar1 = -(uVar4 + 0x17 & 0xfffffffffffffff0)" (identifier "lVar1") (= "=") (unary_expression "-(uVar4 + 0x17 & 0xfffffffffffffff0)" (- "-") (parenthesized_expression "(uVar4 + 0x17 & 0xfffffffffffffff0)" (( "(") (binary_expression "uVar4 + 0x17 & 0xfffffffffffffff0" (binary_expression "uVar4 + 0x17" (identifier "uVar4") (+ "+") (number_literal "0x17")) (& "&") (number_literal "0xfffffffffffffff0")) () ")")))) (; ";")) (expression_statement "lVar2 = (long)&local_30 + lVar1;" (assignment_expression "lVar2 = (long)&local_30 + lVar1" (identifier "lVar2") (= "=") (binary_expression "(long)&local_30 + lVar1" (cast_expression "(long)&local_30" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "&local_30" (& "&") (identifier "local_30"))) (+ "+") (identifier "lVar1"))) (; ";")) (expression_statement "plVar3 = (long *)((long)&local_38 + lVar1);" (assignment_expression "plVar3 = (long *)((long)&local_38 + lVar1)" (identifier "plVar3") (= "=") (cast_expression "(long *)((long)&local_38 + lVar1)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)&local_38 + lVar1)" (( "(") (binary_expression "(long)&local_38 + lVar1" (cast_expression "(long)&local_38" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "&local_38" (& "&") (identifier "local_38"))) (+ "+") (identifier "lVar1")) () ")")))) (; ";")) (} "}")) (else_clause "else {\n      local_38 = param_4;\n      local_30 = param_3;\n      lVar2 = __gmp_tmp_reentrant_alloc(&local_28);\n      param_4 = local_38;\n      param_3 = local_30;\n      plVar3 = &local_38;\n    }" (else "else") (compound_statement "{\n      local_38 = param_4;\n      local_30 = param_3;\n      lVar2 = __gmp_tmp_reentrant_alloc(&local_28);\n      param_4 = local_38;\n      param_3 = local_30;\n      plVar3 = &local_38;\n    }" ({ "{") (expression_statement "local_38 = param_4;" (assignment_expression "local_38 = param_4" (identifier "local_38") (= "=") (identifier "param_4")) (; ";")) (expression_statement "local_30 = param_3;" (assignment_expression "local_30 = param_3" (identifier "local_30") (= "=") (identifier "param_3")) (; ";")) (expression_statement "lVar2 = __gmp_tmp_reentrant_alloc(&local_28);" (assignment_expression "lVar2 = __gmp_tmp_reentrant_alloc(&local_28)" (identifier "lVar2") (= "=") (call_expression "__gmp_tmp_reentrant_alloc(&local_28)" (identifier "__gmp_tmp_reentrant_alloc") (argument_list "(&local_28)" (( "(") (pointer_expression "&local_28" (& "&") (identifier "local_28")) () ")")))) (; ";")) (expression_statement "param_4 = local_38;" (assignment_expression "param_4 = local_38" (identifier "param_4") (= "=") (identifier "local_38")) (; ";")) (expression_statement "param_3 = local_30;" (assignment_expression "param_3 = local_30" (identifier "param_3") (= "=") (identifier "local_30")) (; ";")) (expression_statement "plVar3 = &local_38;" (assignment_expression "plVar3 = &local_38" (identifier "plVar3") (= "=") (pointer_expression "&local_38" (& "&") (identifier "local_38"))) (; ";")) (} "}")))) (expression_statement "*(undefined8 *)((long)plVar3 + -8) = 0x13594f;" (assignment_expression "*(undefined8 *)((long)plVar3 + -8) = 0x13594f" (pointer_expression "*(undefined8 *)((long)plVar3 + -8)" (* "*") (cast_expression "(undefined8 *)((long)plVar3 + -8)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)plVar3 + -8)" (( "(") (binary_expression "(long)plVar3 + -8" (cast_expression "(long)plVar3" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "plVar3")) (+ "+") (number_literal "-8")) () ")")))) (= "=") (number_literal "0x13594f")) (; ";")) (expression_statement "__gmpn_toom42_mulmid(param_1,param_2,param_3,param_4,lVar2);" (call_expression "__gmpn_toom42_mulmid(param_1,param_2,param_3,param_4,lVar2)" (identifier "__gmpn_toom42_mulmid") (argument_list "(param_1,param_2,param_3,param_4,lVar2)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (identifier "param_3") (, ",") (identifier "param_4") (, ",") (identifier "lVar2") () ")"))) (; ";")) (if_statement "if (local_28 != 0) {\n      *(undefined8 *)((long)plVar3 + -8) = 0x13598d;\n      __gmp_tmp_reentrant_free();\n    }" (if "if") (parenthesized_expression "(local_28 != 0)" (( "(") (binary_expression "local_28 != 0" (identifier "local_28") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      *(undefined8 *)((long)plVar3 + -8) = 0x13598d;\n      __gmp_tmp_reentrant_free();\n    }" ({ "{") (expression_statement "*(undefined8 *)((long)plVar3 + -8) = 0x13598d;" (assignment_expression "*(undefined8 *)((long)plVar3 + -8) = 0x13598d" (pointer_expression "*(undefined8 *)((long)plVar3 + -8)" (* "*") (cast_expression "(undefined8 *)((long)plVar3 + -8)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)plVar3 + -8)" (( "(") (binary_expression "(long)plVar3 + -8" (cast_expression "(long)plVar3" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "plVar3")) (+ "+") (number_literal "-8")) () ")")))) (= "=") (number_literal "0x13598d")) (; ";")) (expression_statement "__gmp_tmp_reentrant_free();" (call_expression "__gmp_tmp_reentrant_free()" (identifier "__gmp_tmp_reentrant_free") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (} "}")))) (if_statement "if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {\n    return;\n  }" (if "if") (parenthesized_expression "(local_20 == *(long *)(in_FS_OFFSET + 0x28))" (( "(") (binary_expression "local_20 == *(long *)(in_FS_OFFSET + 0x28)" (identifier "local_20") (== "==") (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" (* "*") (cast_expression "(long *)(in_FS_OFFSET + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_FS_OFFSET + 0x28)" (( "(") (binary_expression "in_FS_OFFSET + 0x28" (identifier "in_FS_OFFSET") (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (compound_statement "{\n    return;\n  }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "*(undefined8 *)((long)plVar3 + -8) = 0x1359b3;" (assignment_expression "*(undefined8 *)((long)plVar3 + -8) = 0x1359b3" (pointer_expression "*(undefined8 *)((long)plVar3 + -8)" (* "*") (cast_expression "(undefined8 *)((long)plVar3 + -8)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)plVar3 + -8)" (( "(") (binary_expression "(long)plVar3 + -8" (cast_expression "(long)plVar3" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "plVar3")) (+ "+") (number_literal "-8")) () ")")))) (= "=") (number_literal "0x1359b3")) (; ";")) (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" (identifier "__stack_chk_fail") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))

void function_1(type_1 rp,type_2 ap,type_2 bp,type_3 var_2)

{
  long var_5;
  type_4 *mark;
  type_1 scratch;
  type_3 *pmVar2;
  size_t var_4;
  long var_1;
  type_3 local_38;
  type_2 local_30;
  type_4 *var_8;
  long var_10;
  
  pmVar2 = &local_38;
  var_10 = *(long *)(var_1 + 0x28);
  if (var_2 < 0x24) {
    var_3(rp,ap,var_2 * 2 + -1,bp,var_2);
  }
  else {
    var_8 = (type_4 *)0x0;
    var_4 = (var_2 * 3 + 0x40) * 8;
    if (var_4 < 0x7f01) {
      var_5 = -(var_4 + 0x17 & 0xfffffffffffffff0);
      scratch = (type_1)((long)&local_30 + var_5);
      pmVar2 = (type_3 *)((long)&local_38 + var_5);
    }
    else {
      local_38 = var_2;
      local_30 = bp;
      scratch = (type_1)var_6(&var_8,var_4);
      var_2 = local_38;
      bp = local_30;
      pmVar2 = &local_38;
    }
    *(type_5 *)((long)pmVar2 + -8) = 0x13594f;
    var_7(rp,ap,bp,var_2,scratch);
    mark = var_8;
    if (var_8 != (type_4 *)0x0) {
      *(type_5 *)((long)pmVar2 + -8) = 0x13598d;
      var_9(mark);
    }
  }
  if (var_10 == *(long *)(var_1 + 0x28)) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  *(type_5 *)((long)pmVar2 + -8) = 0x1359b3;
  var_11();
}


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

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

{
  long lVar1;
  long lVar2;
  long *plVar3;
  ulong uVar4;
  long in_FS_OFFSET;
  long local_38;
  undefined8 local_30;
  long local_28;
  long local_20;
  
  plVar3 = &local_38;
  local_20 = *(long *)(in_FS_OFFSET + 0x28);
  if (param_4 < 0x24) {
    __gmpn_mulmid_basecase(param_1,param_2,param_4 * 2 + -1,param_3,param_4);
  }
  else {
    local_28 = 0;
    uVar4 = (param_4 * 3 + 0x40) * 8;
    if (uVar4 < 0x7f01) {
      lVar1 = -(uVar4 + 0x17 & 0xfffffffffffffff0);
      lVar2 = (long)&local_30 + lVar1;
      plVar3 = (long *)((long)&local_38 + lVar1);
    }
    else {
      local_38 = param_4;
      local_30 = param_3;
      lVar2 = __gmp_tmp_reentrant_alloc(&local_28);
      param_4 = local_38;
      param_3 = local_30;
      plVar3 = &local_38;
    }
    *(undefined8 *)((long)plVar3 + -8) = 0x13594f;
    __gmpn_toom42_mulmid(param_1,param_2,param_3,param_4,lVar2);
    if (local_28 != 0) {
      *(undefined8 *)((long)plVar3 + -8) = 0x13598d;
      __gmp_tmp_reentrant_free();
    }
  }
  if (local_20 == *(long *)(in_FS_OFFSET + 0x28)) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  *(undefined8 *)((long)plVar3 + -8) = 0x1359b3;
  __stack_chk_fail();
}

