
void __gmpf_mul(mpf_ptr r,mpf_srcptr u,mpf_srcptr v)

{
  longlong lVar1;
  mp_limb_t *pmVar2;
  int iVar3;
  uint uVar4;
  mp_limb_t *pmVar5;
  tmp_reentrant_t *ptVar6;
  int iVar7;
  mp_limb_t *pmVar8;
  uint uVar9;
  uint *puVar10;
  mp_limb_t mVar11;
  tmp_reentrant_t *ptVar12;
  mpf_srcptr p_Var13;
  mpf_srcptr p_Var14;
  uint uVar15;
  tmp_reentrant_t *ptVar16;
  size_t sVar17;
  uint uVar18;
  tmp_reentrant_t *ptVar19;
  uint uVar20;
  uint *puVar21;
  uint uVar22;
  undefined *puVar23;
  code *pcVar24;
  undefined1 *puVar25;
  undefined4 uVar26;
  undefined1 auStack_60 [24];
  tmp_reentrant_t *__tmp_marker;
  int iStack_2c;
  
  puVar23 = PTR___stack_chk_guard_00097540;
  puVar25 = auStack_60;
  uVar18 = u->_mp_size;
  iStack_2c = *(int *)PTR___stack_chk_guard_00097540;
  uVar15 = r->_mp_prec;
  uVar20 = v->_mp_size;
  uVar4 = -uVar18;
  if (-1 < (int)uVar18) {
    uVar4 = uVar18;
  }
  uVar9 = uVar20;
  if ((int)uVar20 < 0) {
    uVar9 = -uVar20;
  }
  p_Var14 = (mpf_srcptr)u->_mp_d;
  p_Var13 = (mpf_srcptr)v->_mp_d;
  uVar22 = uVar4;
  if ((tmp_reentrant_t *)(uint)((int)uVar15 < (int)uVar4) != (tmp_reentrant_t *)0x0) {
    p_Var14 = (mpf_srcptr)((int)p_Var14 + (uVar4 - uVar15) * 4);
    uVar22 = uVar15;
  }
  if ((int)uVar15 < (int)uVar9) {
    p_Var13 = (mpf_srcptr)((int)p_Var13 + (uVar9 - uVar15) * 4);
    uVar9 = uVar15;
  }
  if ((uVar22 == 0) || (uVar9 == 0)) {
    r->_mp_size = 0;
    r->_mp_exp = 0;
    ptVar6 = (tmp_reentrant_t *)(uint)((int)uVar15 < (int)uVar4);
    p_Var14 = u;
    puVar25 = auStack_60;
  }
  else {
    uVar4 = (uVar22 + uVar9) * 4;
    __tmp_marker = (tmp_reentrant_t *)0x0;
    if (uVar4 < 0x7f01) {
      iVar3 = -(uVar4 + 7 & 0xfffffff8);
      puVar25 = auStack_60 + iVar3;
      pmVar5 = (mp_limb_t *)(&stack0xffffffb8 + iVar3);
    }
    else {
      pmVar5 = (mp_limb_t *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&__tmp_marker);
    }
    if ((int)uVar22 < (int)uVar9) {
      *(uint *)(puVar25 + 0x10) = uVar22;
      iVar3 = (*(code *)PTR___gmpn_mul_000972b4)(pmVar5,p_Var13,uVar9,p_Var14);
      p_Var14 = p_Var13;
    }
    else {
      *(uint *)(puVar25 + 0x10) = uVar9;
      iVar3 = (*(code *)PTR___gmpn_mul_000972b4)(pmVar5,p_Var14,uVar22,p_Var13);
    }
    uVar9 = (uVar22 + uVar9) - (uint)(iVar3 == 0);
    uVar15 = uVar15 + 1;
    if ((int)uVar15 < (int)uVar9) {
      pmVar5 = pmVar5 + (uVar9 - uVar15);
      uVar9 = uVar15;
    }
    iVar7 = uVar9 - 1;
    if (uVar9 != 0) {
      pmVar2 = r->_mp_d;
      mVar11 = *pmVar5;
      pmVar8 = pmVar2;
      if (iVar7 != 0) {
        do {
          pmVar5 = pmVar5 + 1;
          p_Var14 = (mpf_srcptr)(pmVar8 + 1);
          *pmVar8 = mVar11;
          iVar7 = iVar7 + -1;
          mVar11 = *pmVar5;
          pmVar8 = (mp_limb_t *)p_Var14;
        } while (iVar7 != 0);
        pmVar2 = pmVar2 + (uVar9 - 1);
      }
      *pmVar2 = mVar11;
    }
    uVar18 = uVar18 ^ uVar20;
    r->_mp_exp = (u->_mp_exp + v->_mp_exp) - (uint)(iVar3 == 0);
    if ((int)uVar18 < 0) {
      uVar9 = -uVar9;
    }
    r->_mp_size = uVar9;
    ptVar6 = __tmp_marker;
    if (__tmp_marker != (tmp_reentrant_t *)0x0) {
      (*(code *)PTR___gmp_tmp_reentrant_free_00097614)();
    }
  }
  if (iStack_2c == *(int *)puVar23) {
    return;
  }
  uVar26 = 0x1cbf4;
  puVar23 = PTR___stack_chk_fail_000974d0;
  (*(code *)PTR___stack_chk_fail_000974d0)();
  *(undefined **)(puVar25 + -0x28) = puVar23 + 0x82440;
  *(mpf_ptr *)(puVar25 + -0x14) = r;
  *(undefined4 *)(puVar25 + -4) = uVar26;
  *(mpf_srcptr *)(puVar25 + -8) = u;
  *(mpf_srcptr *)(puVar25 + -0xc) = v;
  *(uint *)(puVar25 + -0x10) = uVar20;
  *(uint *)(puVar25 + -0x18) = uVar18;
  *(uint *)(puVar25 + -0x1c) = uVar15;
  ptVar19 = (tmp_reentrant_t *)p_Var14->_mp_size;
  if ((uVar9 == 0) || (ptVar19 == (tmp_reentrant_t *)0x0)) {
    ptVar6->size = 0;
    ptVar6[1].next = (tmp_reentrant_t *)0x0;
    return;
  }
  if ((int)ptVar19 < 0) {
    ptVar16 = ptVar6->next;
    pmVar5 = p_Var14->_mp_d;
    puVar21 = (uint *)ptVar6[1].size;
    iVar3 = -(int)ptVar19 - (int)ptVar16;
    ptVar12 = (tmp_reentrant_t *)-(int)ptVar19;
    if (iVar3 < 1) goto LAB_0001cda8;
LAB_0001cc68:
    iVar7 = iVar3 + -1;
    lVar1 = (ulonglong)uVar9 * (ulonglong)pmVar5[iVar7];
    pmVar8 = pmVar5 + iVar3;
    while( true ) {
      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);
      iVar7 = iVar7 + -1;
      pcVar24 = *(code **)(puVar23 + 0x7a4a4);
      if (iVar7 == -1) break;
      puVar10 = pmVar8 + -2;
      pmVar8 = pmVar8 + -1;
      lVar1 = lVar1 + ((ulonglong)uVar9 * (ulonglong)*puVar10 >> 0x20);
      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);
      if ((int)lVar1 != -1) {
        pcVar24 = *(code **)(puVar23 + 0x7a4a4);
        break;
      }
      lVar1 = CONCAT44(uVar15,(int)((ulonglong)uVar9 * (ulonglong)*puVar10));
    }
    uVar4 = (*pcVar24)(puVar21,pmVar5 + iVar3,ptVar16);
    uVar18 = *puVar21;
    *puVar21 = uVar15 + uVar18;
    if (uVar15 + uVar18 < uVar15) {
      if ((int)ptVar16 < 2) {
LAB_0001cd34:
        uVar15 = (uint)(uVar4 + 1 != 0);
        sVar17 = (int)&ptVar16->next + uVar15;
        puVar21[(int)ptVar16] = uVar4 + 1;
        ptVar6[1].next = (tmp_reentrant_t *)(p_Var14->_mp_exp + uVar15);
        goto joined_r0x0001cddc;
      }
      uVar15 = puVar21[1];
      puVar21[1] = uVar15 + 1;
      if (uVar15 + 1 == 0) {
        ptVar12 = (tmp_reentrant_t *)0x2;
        puVar10 = puVar21 + 2;
        do {
          if (ptVar12 == ptVar16) goto LAB_0001cd34;
          uVar15 = *puVar10;
          ptVar12 = (tmp_reentrant_t *)((int)&ptVar12->next + 1);
          *puVar10 = uVar15 + 1;
          puVar10 = puVar10 + 1;
        } while (uVar15 + 1 == 0);
      }
    }
  }
  else {
    ptVar16 = ptVar6->next;
    pmVar5 = p_Var14->_mp_d;
    iVar3 = (int)ptVar19 - (int)ptVar16;
    puVar21 = (uint *)ptVar6[1].size;
    ptVar12 = ptVar19;
    if (0 < iVar3) goto LAB_0001cc68;
LAB_0001cda8:
    ptVar16 = ptVar12;
    uVar4 = (**(code **)(puVar23 + 0x7a4a4))(puVar21,pmVar5,ptVar16);
  }
  sVar17 = (int)&ptVar16->next + (uint)(uVar4 != 0);
  puVar21[(int)ptVar16] = uVar4;
  ptVar6[1].next = (tmp_reentrant_t *)(p_Var14->_mp_exp + (uint)(uVar4 != 0));
joined_r0x0001cddc:
  if ((int)ptVar19 < 0) {
    sVar17 = -sVar17;
  }
  ptVar6->size = sVar17;
  return;
}



void __gmpf_mul(uint *param_1,undefined4 *param_2,int param_3)

{
  longlong lVar1;
  ulonglong uVar2;
  undefined4 *puVar3;
  undefined4 *puVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  int *piVar8;
  int iVar9;
  uint uVar10;
  uint *puVar11;
  undefined4 *puVar12;
  int iVar13;
  undefined4 *puVar14;
  uint uVar15;
  int iVar16;
  uint uVar17;
  int iVar18;
  uint uVar19;
  uint *puVar20;
  uint uVar21;
  undefined *puVar22;
  code *pcVar23;
  undefined1 *puVar24;
  undefined4 uVar25;
  undefined1 auStack_60 [24];
  int *local_30;
  int local_2c;
  
  puVar22 = PTR___stack_chk_guard_00097540;
  puVar24 = auStack_60;
  uVar17 = param_2[1];
  local_2c = *(int *)PTR___stack_chk_guard_00097540;
  uVar15 = *param_1;
  uVar19 = *(uint *)(param_3 + 4);
  uVar6 = -uVar17;
  if (-1 < (int)uVar17) {
    uVar6 = uVar17;
  }
  uVar10 = uVar19;
  if ((int)uVar19 < 0) {
    uVar10 = -uVar19;
  }
  puVar14 = (undefined4 *)param_2[3];
  puVar12 = *(undefined4 **)(param_3 + 0xc);
  uVar21 = uVar6;
  if ((int *)(uint)((int)uVar15 < (int)uVar6) != (int *)0x0) {
    puVar14 = puVar14 + (uVar6 - uVar15);
    uVar21 = uVar15;
  }
  if ((int)uVar15 < (int)uVar10) {
    puVar12 = puVar12 + (uVar10 - uVar15);
    uVar10 = uVar15;
  }
  if ((uVar21 == 0) || (uVar10 == 0)) {
    param_1[1] = 0;
    param_1[2] = 0;
    piVar8 = (int *)(uint)((int)uVar15 < (int)uVar6);
    puVar14 = param_2;
    puVar24 = auStack_60;
  }
  else {
    uVar6 = (uVar21 + uVar10) * 4;
    local_30 = (int *)0x0;
    if (uVar6 < 0x7f01) {
      iVar18 = -(uVar6 + 7 & 0xfffffff8);
      puVar24 = auStack_60 + iVar18;
      puVar4 = (undefined4 *)(&stack0xffffffb8 + iVar18);
    }
    else {
      puVar4 = (undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30);
    }
    if ((int)uVar21 < (int)uVar10) {
      *(uint *)(puVar24 + 0x10) = uVar21;
      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar12,uVar10,puVar14);
      puVar14 = puVar12;
    }
    else {
      *(uint *)(puVar24 + 0x10) = uVar10;
      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12);
    }
    uVar10 = (uVar21 + uVar10) - (uint)(iVar18 == 0);
    uVar15 = uVar15 + 1;
    if ((int)uVar15 < (int)uVar10) {
      puVar4 = puVar4 + (uVar10 - uVar15);
      uVar10 = uVar15;
    }
    iVar13 = uVar10 - 1;
    if (uVar10 != 0) {
      puVar3 = (undefined4 *)param_1[3];
      uVar25 = *puVar4;
      puVar12 = puVar3;
      if (iVar13 != 0) {
        do {
          puVar4 = puVar4 + 1;
          puVar14 = puVar12 + 1;
          *puVar12 = uVar25;
          iVar13 = iVar13 + -1;
          uVar25 = *puVar4;
          puVar12 = puVar14;
        } while (iVar13 != 0);
        puVar3 = puVar3 + (uVar10 - 1);
      }
      *puVar3 = uVar25;
    }
    uVar17 = uVar17 ^ uVar19;
    param_1[2] = (param_2[2] + *(int *)(param_3 + 8)) - (uint)(iVar18 == 0);
    if ((int)uVar17 < 0) {
      uVar10 = -uVar10;
    }
    param_1[1] = uVar10;
    piVar8 = local_30;
    if (local_30 != (int *)0x0) {
      (*(code *)PTR___gmp_tmp_reentrant_free_00097614)();
    }
  }
  if (local_2c == *(int *)puVar22) {
    return;
  }
  uVar25 = 0x1cbf4;
  puVar22 = PTR___stack_chk_fail_000974d0;
  (*(code *)PTR___stack_chk_fail_000974d0)();
  *(undefined **)(puVar24 + -0x28) = puVar22 + 0x82440;
  *(uint **)(puVar24 + -0x14) = param_1;
  *(undefined4 *)(puVar24 + -4) = uVar25;
  *(undefined4 **)(puVar24 + -8) = param_2;
  *(int *)(puVar24 + -0xc) = param_3;
  *(uint *)(puVar24 + -0x10) = uVar19;
  *(uint *)(puVar24 + -0x18) = uVar17;
  *(uint *)(puVar24 + -0x1c) = uVar15;
  iVar18 = puVar14[1];
  if ((uVar10 == 0) || (iVar18 == 0)) {
    piVar8[1] = 0;
    piVar8[2] = 0;
    return;
  }
  if (iVar18 < 0) {
    iVar16 = *piVar8;
    iVar7 = puVar14[3];
    puVar20 = (uint *)piVar8[3];
    iVar5 = -iVar18 - iVar16;
    iVar13 = -iVar18;
    if (iVar5 < 1) goto LAB_0001cda8;
LAB_0001cc68:
    iVar9 = iVar5 + -1;
    iVar5 = iVar7 + iVar5 * 4;
    lVar1 = (ulonglong)uVar10 * (ulonglong)*(uint *)(iVar7 + iVar9 * 4);
    iVar13 = iVar5;
    while( true ) {
      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);
      iVar9 = iVar9 + -1;
      pcVar23 = *(code **)(puVar22 + 0x7a4a4);
      if (iVar9 == -1) break;
      puVar11 = (uint *)(iVar13 + -8);
      iVar13 = iVar13 + -4;
      uVar2 = (ulonglong)uVar10 * (ulonglong)*puVar11;
      lVar1 = lVar1 + (uVar2 >> 0x20);
      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);
      if ((int)lVar1 != -1) {
        pcVar23 = *(code **)(puVar22 + 0x7a4a4);
        break;
      }
      lVar1 = CONCAT44(uVar15,(int)uVar2);
    }
    uVar6 = (*pcVar23)(puVar20,iVar5,iVar16);
    uVar17 = *puVar20;
    *puVar20 = uVar15 + uVar17;
    if (uVar15 + uVar17 < uVar15) {
      if (iVar16 < 2) {
LAB_0001cd34:
        uVar15 = (uint)(uVar6 + 1 != 0);
        iVar13 = iVar16 + uVar15;
        puVar20[iVar16] = uVar6 + 1;
        piVar8[2] = puVar14[2] + uVar15;
        goto joined_r0x0001cddc;
      }
      uVar15 = puVar20[1];
      puVar20[1] = uVar15 + 1;
      if (uVar15 + 1 == 0) {
        iVar13 = 2;
        puVar11 = puVar20 + 2;
        do {
          if (iVar13 == iVar16) goto LAB_0001cd34;
          uVar15 = *puVar11;
          iVar13 = iVar13 + 1;
          *puVar11 = uVar15 + 1;
          puVar11 = puVar11 + 1;
        } while (uVar15 + 1 == 0);
      }
    }
  }
  else {
    iVar16 = *piVar8;
    iVar7 = puVar14[3];
    iVar5 = iVar18 - iVar16;
    puVar20 = (uint *)piVar8[3];
    iVar13 = iVar18;
    if (0 < iVar5) goto LAB_0001cc68;
LAB_0001cda8:
    iVar16 = iVar13;
    uVar6 = (**(code **)(puVar22 + 0x7a4a4))(puVar20,iVar7,iVar16);
  }
  iVar13 = iVar16 + (uint)(uVar6 != 0);
  puVar20[iVar16] = uVar6;
  piVar8[2] = puVar14[2] + (uint)(uVar6 != 0);
joined_r0x0001cddc:
  if (iVar18 < 0) {
    iVar13 = -iVar13;
  }
  piVar8[1] = iVar13;
  return;
}


lui gp,0x8
addiu gp,gp,0x26d0
addu gp,gp,t9
addiu sp,sp,-0x60
sw s7,0x54(sp)
sw s1,0x3c(sp)
lw s7,-0x7b00(gp)
lw s1,0x4(a1)
sw s8,0x58(sp)
or s8,sp,zero
sw s5,0x4c(sp)
or s5,a1,zero
sw s4,0x48(sp)
or s4,a2,zero
sw s3,0x44(sp)
sw s2,0x40(sp)
or s2,a0,zero
sw s0,0x38(sp)
sw ra,0x5c(sp)
sw s6,0x50(sp)
sw gp,0x18(sp)
lw v0,0x0(s7)
lw s0,0x0(a0)
lw s3,0x4(a2)
sw v0,0x34(s8)
bltz s1,0x0001c9e0
_subu v1,zero,s1
or v1,s1,zero
or s6,v1,zero
bgez s3,0x0001c9f0
_or v0,s3,zero
subu v0,zero,s3
slt a0,s0,v1
lw t1,0xc(s5)
or a2,v0,zero
beq a0,zero,0x0001ca14
_lw t0,0xc(s4)
subu v1,v1,s0
or s6,s0,zero
sll v1,v1,0x2
addu t1,t1,v1
slt v1,s0,v0
beq v1,zero,0x0001ca2c
_subu v0,v0,s0
or a2,s0,zero
sll v0,v0,0x2
addu t0,t0,v0
beq s6,zero,0x0001ca3c
_nop
bne a2,zero,0x0001ca84
_addu t2,s6,a2
sw zero,0x4(s2)
sw zero,0x8(s2)
lw v1,0x34(s8)
lw v0,0x0(s7)
bne v1,v0,0x0001cbe8
_lw ra,0x5c(s8)
or sp,s8,zero
lw s8,0x58(sp)
lw s7,0x54(sp)
lw s6,0x50(sp)
lw s5,0x4c(sp)
lw s4,0x48(sp)
lw s3,0x44(sp)
lw s2,0x40(sp)
lw s1,0x3c(sp)
lw s0,0x38(sp)
jr ra
_addiu sp,sp,0x60
sll a1,t2,0x2
sltiu v0,a1,0x7f01
beq v0,zero,0x0001cbb0
_sw zero,0x30(s8)
addiu a1,a1,0x7
srl a1,a1,0x3
sll a1,a1,0x3
subu sp,sp,a1
addiu v1,sp,0x18
slt v0,s6,a2
lw t9,-0x7d8c(gp)
beq v0,zero,0x0001cb84
_sw t2,0x28(s8)
or a0,v1,zero
sw v1,0x2c(s8)
or a3,t1,zero
sw s6,0x10(sp)
jalr t9
_or a1,t0,zero
lw gp,0x18(s8)
lw t2,0x28(s8)
lw v1,0x2c(s8)
sltiu t0,v0,0x1
subu a2,t2,t0
addiu s0,s0,0x1
slt v0,s0,a2
beq v0,zero,0x0001cb00
_subu v0,a2,s0
or a2,s0,zero
sll v0,v0,0x2
addu v1,v1,v0
beq a2,zero,0x0001cb44
_addiu a0,a2,-0x1
lw v0,0xc(s2)
beq a0,zero,0x0001cb40
_lw a3,0x0(v1)
addiu v1,v1,0x4
or a1,v0,zero
addiu a1,a1,0x4
sw a3,-0x4(a1)
addiu v1,v1,0x4
addiu a0,a0,-0x1
bne a0,zero,0x0001cb1c
_lw a3,-0x4(v1)
sll v1,a2,0x2
addiu v1,v1,-0x4
addu v0,v0,v1
sw a3,0x0(v0)
lw v0,0x8(s5)
xor s1,s1,s3
lw v1,0x8(s4)
addu v0,v0,v1
subu v0,v0,t0
bgez s1,0x0001cb64
_sw v0,0x8(s2)
subu a2,zero,a2
lw a0,0x30(s8)
beq a0,zero,0x0001ca44
_sw a2,0x4(s2)
lw t9,-0x7a2c(gp)
jalr t9
_nop
b 0x0001ca44
_lw gp,0x18(s8)
sw a2,0x10(sp)
or a0,v1,zero
sw v1,0x2c(s8)
or a3,t0,zero
or a2,s6,zero
jalr t9
_or a1,t1,zero
lw gp,0x18(s8)
lw v1,0x2c(s8)
b 0x0001cadc
_lw t2,0x28(s8)
lw t9,-0x7d50(gp)
addiu a0,s8,0x30
sw t2,0x20(s8)
sw a2,0x24(s8)
sw t0,0x28(s8)
jalr t9
_sw t1,0x2c(s8)
lw gp,0x18(s8)
or v1,v0,zero
lw t2,0x20(s8)
lw a2,0x24(s8)
lw t0,0x28(s8)
b 0x0001caa8
_lw t1,0x2c(s8)
lw t9,-0x7b70(gp)
jalr t9
_nop
nop
nop
nop
(translation_unit "void __gmpf_mul(uint *param_1,undefined4 *param_2,int param_3)\n\n{\n  longlong lVar1;\n  ulonglong uVar2;\n  undefined4 *puVar3;\n  undefined4 *puVar4;\n  int iVar5;\n  uint uVar6;\n  int iVar7;\n  int *piVar8;\n  int iVar9;\n  uint uVar10;\n  uint *puVar11;\n  undefined4 *puVar12;\n  int iVar13;\n  undefined4 *puVar14;\n  uint uVar15;\n  int iVar16;\n  uint uVar17;\n  int iVar18;\n  uint uVar19;\n  uint *puVar20;\n  uint uVar21;\n  undefined *puVar22;\n  code *pcVar23;\n  undefined1 *puVar24;\n  undefined4 uVar25;\n  undefined1 auStack_60 [24];\n  int *local_30;\n  int local_2c;\n  \n  puVar22 = PTR___stack_chk_guard_00097540;\n  puVar24 = auStack_60;\n  uVar17 = param_2[1];\n  local_2c = *(int *)PTR___stack_chk_guard_00097540;\n  uVar15 = *param_1;\n  uVar19 = *(uint *)(param_3 + 4);\n  uVar6 = -uVar17;\n  if (-1 < (int)uVar17) {\n    uVar6 = uVar17;\n  }\n  uVar10 = uVar19;\n  if ((int)uVar19 < 0) {\n    uVar10 = -uVar19;\n  }\n  puVar14 = (undefined4 *)param_2[3];\n  puVar12 = *(undefined4 **)(param_3 + 0xc);\n  uVar21 = uVar6;\n  if ((int *)(uint)((int)uVar15 < (int)uVar6) != (int *)0x0) {\n    puVar14 = puVar14 + (uVar6 - uVar15);\n    uVar21 = uVar15;\n  }\n  if ((int)uVar15 < (int)uVar10) {\n    puVar12 = puVar12 + (uVar10 - uVar15);\n    uVar10 = uVar15;\n  }\n  if ((uVar21 == 0) || (uVar10 == 0)) {\n    param_1[1] = 0;\n    param_1[2] = 0;\n    piVar8 = (int *)(uint)((int)uVar15 < (int)uVar6);\n    puVar14 = param_2;\n    puVar24 = auStack_60;\n  }\n  else {\n    uVar6 = (uVar21 + uVar10) * 4;\n    local_30 = (int *)0x0;\n    if (uVar6 < 0x7f01) {\n      iVar18 = -(uVar6 + 7 & 0xfffffff8);\n      puVar24 = auStack_60 + iVar18;\n      puVar4 = (undefined4 *)(&stack0xffffffb8 + iVar18);\n    }\n    else {\n      puVar4 = (undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30);\n    }\n    if ((int)uVar21 < (int)uVar10) {\n      *(uint *)(puVar24 + 0x10) = uVar21;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar12,uVar10,puVar14);\n      puVar14 = puVar12;\n    }\n    else {\n      *(uint *)(puVar24 + 0x10) = uVar10;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12);\n    }\n    uVar10 = (uVar21 + uVar10) - (uint)(iVar18 == 0);\n    uVar15 = uVar15 + 1;\n    if ((int)uVar15 < (int)uVar10) {\n      puVar4 = puVar4 + (uVar10 - uVar15);\n      uVar10 = uVar15;\n    }\n    iVar13 = uVar10 - 1;\n    if (uVar10 != 0) {\n      puVar3 = (undefined4 *)param_1[3];\n      uVar25 = *puVar4;\n      puVar12 = puVar3;\n      if (iVar13 != 0) {\n        do {\n          puVar4 = puVar4 + 1;\n          puVar14 = puVar12 + 1;\n          *puVar12 = uVar25;\n          iVar13 = iVar13 + -1;\n          uVar25 = *puVar4;\n          puVar12 = puVar14;\n        } while (iVar13 != 0);\n        puVar3 = puVar3 + (uVar10 - 1);\n      }\n      *puVar3 = uVar25;\n    }\n    uVar17 = uVar17 ^ uVar19;\n    param_1[2] = (param_2[2] + *(int *)(param_3 + 8)) - (uint)(iVar18 == 0);\n    if ((int)uVar17 < 0) {\n      uVar10 = -uVar10;\n    }\n    param_1[1] = uVar10;\n    piVar8 = local_30;\n    if (local_30 != (int *)0x0) {\n      (*(code *)PTR___gmp_tmp_reentrant_free_00097614)();\n    }\n  }\n  if (local_2c == *(int *)puVar22) {\n    return;\n  }\n  uVar25 = 0x1cbf4;\n  puVar22 = PTR___stack_chk_fail_000974d0;\n  (*(code *)PTR___stack_chk_fail_000974d0)();\n  *(undefined **)(puVar24 + -0x28) = puVar22 + 0x82440;\n  *(uint **)(puVar24 + -0x14) = param_1;\n  *(undefined4 *)(puVar24 + -4) = uVar25;\n  *(undefined4 **)(puVar24 + -8) = param_2;\n  *(int *)(puVar24 + -0xc) = param_3;\n  *(uint *)(puVar24 + -0x10) = uVar19;\n  *(uint *)(puVar24 + -0x18) = uVar17;\n  *(uint *)(puVar24 + -0x1c) = uVar15;\n  iVar18 = puVar14[1];\n  if ((uVar10 == 0) || (iVar18 == 0)) {\n    piVar8[1] = 0;\n    piVar8[2] = 0;\n    return;\n  }\n  if (iVar18 < 0) {\n    iVar16 = *piVar8;\n    iVar7 = puVar14[3];\n    puVar20 = (uint *)piVar8[3];\n    iVar5 = -iVar18 - iVar16;\n    iVar13 = -iVar18;\n    if (iVar5 < 1) goto LAB_0001cda8;\nLAB_0001cc68:\n    iVar9 = iVar5 + -1;\n    iVar5 = iVar7 + iVar5 * 4;\n    lVar1 = (ulonglong)uVar10 * (ulonglong)*(uint *)(iVar7 + iVar9 * 4);\n    iVar13 = iVar5;\n    while( true ) {\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      iVar9 = iVar9 + -1;\n      pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n      if (iVar9 == -1) break;\n      puVar11 = (uint *)(iVar13 + -8);\n      iVar13 = iVar13 + -4;\n      uVar2 = (ulonglong)uVar10 * (ulonglong)*puVar11;\n      lVar1 = lVar1 + (uVar2 >> 0x20);\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      if ((int)lVar1 != -1) {\n        pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n        break;\n      }\n      lVar1 = CONCAT44(uVar15,(int)uVar2);\n    }\n    uVar6 = (*pcVar23)(puVar20,iVar5,iVar16);\n    uVar17 = *puVar20;\n    *puVar20 = uVar15 + uVar17;\n    if (uVar15 + uVar17 < uVar15) {\n      if (iVar16 < 2) {\nLAB_0001cd34:\n        uVar15 = (uint)(uVar6 + 1 != 0);\n        iVar13 = iVar16 + uVar15;\n        puVar20[iVar16] = uVar6 + 1;\n        piVar8[2] = puVar14[2] + uVar15;\n        goto joined_r0x0001cddc;\n      }\n      uVar15 = puVar20[1];\n      puVar20[1] = uVar15 + 1;\n      if (uVar15 + 1 == 0) {\n        iVar13 = 2;\n        puVar11 = puVar20 + 2;\n        do {\n          if (iVar13 == iVar16) goto LAB_0001cd34;\n          uVar15 = *puVar11;\n          iVar13 = iVar13 + 1;\n          *puVar11 = uVar15 + 1;\n          puVar11 = puVar11 + 1;\n        } while (uVar15 + 1 == 0);\n      }\n    }\n  }\n  else {\n    iVar16 = *piVar8;\n    iVar7 = puVar14[3];\n    iVar5 = iVar18 - iVar16;\n    puVar20 = (uint *)piVar8[3];\n    iVar13 = iVar18;\n    if (0 < iVar5) goto LAB_0001cc68;\nLAB_0001cda8:\n    iVar16 = iVar13;\n    uVar6 = (**(code **)(puVar22 + 0x7a4a4))(puVar20,iVar7,iVar16);\n  }\n  iVar13 = iVar16 + (uint)(uVar6 != 0);\n  puVar20[iVar16] = uVar6;\n  piVar8[2] = puVar14[2] + (uint)(uVar6 != 0);\njoined_r0x0001cddc:\n  if (iVar18 < 0) {\n    iVar13 = -iVar13;\n  }\n  piVar8[1] = iVar13;\n  return;\n}\n\n" (function_definition "void __gmpf_mul(uint *param_1,undefined4 *param_2,int param_3)\n\n{\n  longlong lVar1;\n  ulonglong uVar2;\n  undefined4 *puVar3;\n  undefined4 *puVar4;\n  int iVar5;\n  uint uVar6;\n  int iVar7;\n  int *piVar8;\n  int iVar9;\n  uint uVar10;\n  uint *puVar11;\n  undefined4 *puVar12;\n  int iVar13;\n  undefined4 *puVar14;\n  uint uVar15;\n  int iVar16;\n  uint uVar17;\n  int iVar18;\n  uint uVar19;\n  uint *puVar20;\n  uint uVar21;\n  undefined *puVar22;\n  code *pcVar23;\n  undefined1 *puVar24;\n  undefined4 uVar25;\n  undefined1 auStack_60 [24];\n  int *local_30;\n  int local_2c;\n  \n  puVar22 = PTR___stack_chk_guard_00097540;\n  puVar24 = auStack_60;\n  uVar17 = param_2[1];\n  local_2c = *(int *)PTR___stack_chk_guard_00097540;\n  uVar15 = *param_1;\n  uVar19 = *(uint *)(param_3 + 4);\n  uVar6 = -uVar17;\n  if (-1 < (int)uVar17) {\n    uVar6 = uVar17;\n  }\n  uVar10 = uVar19;\n  if ((int)uVar19 < 0) {\n    uVar10 = -uVar19;\n  }\n  puVar14 = (undefined4 *)param_2[3];\n  puVar12 = *(undefined4 **)(param_3 + 0xc);\n  uVar21 = uVar6;\n  if ((int *)(uint)((int)uVar15 < (int)uVar6) != (int *)0x0) {\n    puVar14 = puVar14 + (uVar6 - uVar15);\n    uVar21 = uVar15;\n  }\n  if ((int)uVar15 < (int)uVar10) {\n    puVar12 = puVar12 + (uVar10 - uVar15);\n    uVar10 = uVar15;\n  }\n  if ((uVar21 == 0) || (uVar10 == 0)) {\n    param_1[1] = 0;\n    param_1[2] = 0;\n    piVar8 = (int *)(uint)((int)uVar15 < (int)uVar6);\n    puVar14 = param_2;\n    puVar24 = auStack_60;\n  }\n  else {\n    uVar6 = (uVar21 + uVar10) * 4;\n    local_30 = (int *)0x0;\n    if (uVar6 < 0x7f01) {\n      iVar18 = -(uVar6 + 7 & 0xfffffff8);\n      puVar24 = auStack_60 + iVar18;\n      puVar4 = (undefined4 *)(&stack0xffffffb8 + iVar18);\n    }\n    else {\n      puVar4 = (undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30);\n    }\n    if ((int)uVar21 < (int)uVar10) {\n      *(uint *)(puVar24 + 0x10) = uVar21;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar12,uVar10,puVar14);\n      puVar14 = puVar12;\n    }\n    else {\n      *(uint *)(puVar24 + 0x10) = uVar10;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12);\n    }\n    uVar10 = (uVar21 + uVar10) - (uint)(iVar18 == 0);\n    uVar15 = uVar15 + 1;\n    if ((int)uVar15 < (int)uVar10) {\n      puVar4 = puVar4 + (uVar10 - uVar15);\n      uVar10 = uVar15;\n    }\n    iVar13 = uVar10 - 1;\n    if (uVar10 != 0) {\n      puVar3 = (undefined4 *)param_1[3];\n      uVar25 = *puVar4;\n      puVar12 = puVar3;\n      if (iVar13 != 0) {\n        do {\n          puVar4 = puVar4 + 1;\n          puVar14 = puVar12 + 1;\n          *puVar12 = uVar25;\n          iVar13 = iVar13 + -1;\n          uVar25 = *puVar4;\n          puVar12 = puVar14;\n        } while (iVar13 != 0);\n        puVar3 = puVar3 + (uVar10 - 1);\n      }\n      *puVar3 = uVar25;\n    }\n    uVar17 = uVar17 ^ uVar19;\n    param_1[2] = (param_2[2] + *(int *)(param_3 + 8)) - (uint)(iVar18 == 0);\n    if ((int)uVar17 < 0) {\n      uVar10 = -uVar10;\n    }\n    param_1[1] = uVar10;\n    piVar8 = local_30;\n    if (local_30 != (int *)0x0) {\n      (*(code *)PTR___gmp_tmp_reentrant_free_00097614)();\n    }\n  }\n  if (local_2c == *(int *)puVar22) {\n    return;\n  }\n  uVar25 = 0x1cbf4;\n  puVar22 = PTR___stack_chk_fail_000974d0;\n  (*(code *)PTR___stack_chk_fail_000974d0)();\n  *(undefined **)(puVar24 + -0x28) = puVar22 + 0x82440;\n  *(uint **)(puVar24 + -0x14) = param_1;\n  *(undefined4 *)(puVar24 + -4) = uVar25;\n  *(undefined4 **)(puVar24 + -8) = param_2;\n  *(int *)(puVar24 + -0xc) = param_3;\n  *(uint *)(puVar24 + -0x10) = uVar19;\n  *(uint *)(puVar24 + -0x18) = uVar17;\n  *(uint *)(puVar24 + -0x1c) = uVar15;\n  iVar18 = puVar14[1];\n  if ((uVar10 == 0) || (iVar18 == 0)) {\n    piVar8[1] = 0;\n    piVar8[2] = 0;\n    return;\n  }\n  if (iVar18 < 0) {\n    iVar16 = *piVar8;\n    iVar7 = puVar14[3];\n    puVar20 = (uint *)piVar8[3];\n    iVar5 = -iVar18 - iVar16;\n    iVar13 = -iVar18;\n    if (iVar5 < 1) goto LAB_0001cda8;\nLAB_0001cc68:\n    iVar9 = iVar5 + -1;\n    iVar5 = iVar7 + iVar5 * 4;\n    lVar1 = (ulonglong)uVar10 * (ulonglong)*(uint *)(iVar7 + iVar9 * 4);\n    iVar13 = iVar5;\n    while( true ) {\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      iVar9 = iVar9 + -1;\n      pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n      if (iVar9 == -1) break;\n      puVar11 = (uint *)(iVar13 + -8);\n      iVar13 = iVar13 + -4;\n      uVar2 = (ulonglong)uVar10 * (ulonglong)*puVar11;\n      lVar1 = lVar1 + (uVar2 >> 0x20);\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      if ((int)lVar1 != -1) {\n        pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n        break;\n      }\n      lVar1 = CONCAT44(uVar15,(int)uVar2);\n    }\n    uVar6 = (*pcVar23)(puVar20,iVar5,iVar16);\n    uVar17 = *puVar20;\n    *puVar20 = uVar15 + uVar17;\n    if (uVar15 + uVar17 < uVar15) {\n      if (iVar16 < 2) {\nLAB_0001cd34:\n        uVar15 = (uint)(uVar6 + 1 != 0);\n        iVar13 = iVar16 + uVar15;\n        puVar20[iVar16] = uVar6 + 1;\n        piVar8[2] = puVar14[2] + uVar15;\n        goto joined_r0x0001cddc;\n      }\n      uVar15 = puVar20[1];\n      puVar20[1] = uVar15 + 1;\n      if (uVar15 + 1 == 0) {\n        iVar13 = 2;\n        puVar11 = puVar20 + 2;\n        do {\n          if (iVar13 == iVar16) goto LAB_0001cd34;\n          uVar15 = *puVar11;\n          iVar13 = iVar13 + 1;\n          *puVar11 = uVar15 + 1;\n          puVar11 = puVar11 + 1;\n        } while (uVar15 + 1 == 0);\n      }\n    }\n  }\n  else {\n    iVar16 = *piVar8;\n    iVar7 = puVar14[3];\n    iVar5 = iVar18 - iVar16;\n    puVar20 = (uint *)piVar8[3];\n    iVar13 = iVar18;\n    if (0 < iVar5) goto LAB_0001cc68;\nLAB_0001cda8:\n    iVar16 = iVar13;\n    uVar6 = (**(code **)(puVar22 + 0x7a4a4))(puVar20,iVar7,iVar16);\n  }\n  iVar13 = iVar16 + (uint)(uVar6 != 0);\n  puVar20[iVar16] = uVar6;\n  piVar8[2] = puVar14[2] + (uint)(uVar6 != 0);\njoined_r0x0001cddc:\n  if (iVar18 < 0) {\n    iVar13 = -iVar13;\n  }\n  piVar8[1] = iVar13;\n  return;\n}" primitive_type (function_declarator "__gmpf_mul(uint *param_1,undefined4 *param_2,int param_3)" identifier (parameter_list "(uint *param_1,undefined4 *param_2,int param_3)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined4 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  longlong lVar1;\n  ulonglong uVar2;\n  undefined4 *puVar3;\n  undefined4 *puVar4;\n  int iVar5;\n  uint uVar6;\n  int iVar7;\n  int *piVar8;\n  int iVar9;\n  uint uVar10;\n  uint *puVar11;\n  undefined4 *puVar12;\n  int iVar13;\n  undefined4 *puVar14;\n  uint uVar15;\n  int iVar16;\n  uint uVar17;\n  int iVar18;\n  uint uVar19;\n  uint *puVar20;\n  uint uVar21;\n  undefined *puVar22;\n  code *pcVar23;\n  undefined1 *puVar24;\n  undefined4 uVar25;\n  undefined1 auStack_60 [24];\n  int *local_30;\n  int local_2c;\n  \n  puVar22 = PTR___stack_chk_guard_00097540;\n  puVar24 = auStack_60;\n  uVar17 = param_2[1];\n  local_2c = *(int *)PTR___stack_chk_guard_00097540;\n  uVar15 = *param_1;\n  uVar19 = *(uint *)(param_3 + 4);\n  uVar6 = -uVar17;\n  if (-1 < (int)uVar17) {\n    uVar6 = uVar17;\n  }\n  uVar10 = uVar19;\n  if ((int)uVar19 < 0) {\n    uVar10 = -uVar19;\n  }\n  puVar14 = (undefined4 *)param_2[3];\n  puVar12 = *(undefined4 **)(param_3 + 0xc);\n  uVar21 = uVar6;\n  if ((int *)(uint)((int)uVar15 < (int)uVar6) != (int *)0x0) {\n    puVar14 = puVar14 + (uVar6 - uVar15);\n    uVar21 = uVar15;\n  }\n  if ((int)uVar15 < (int)uVar10) {\n    puVar12 = puVar12 + (uVar10 - uVar15);\n    uVar10 = uVar15;\n  }\n  if ((uVar21 == 0) || (uVar10 == 0)) {\n    param_1[1] = 0;\n    param_1[2] = 0;\n    piVar8 = (int *)(uint)((int)uVar15 < (int)uVar6);\n    puVar14 = param_2;\n    puVar24 = auStack_60;\n  }\n  else {\n    uVar6 = (uVar21 + uVar10) * 4;\n    local_30 = (int *)0x0;\n    if (uVar6 < 0x7f01) {\n      iVar18 = -(uVar6 + 7 & 0xfffffff8);\n      puVar24 = auStack_60 + iVar18;\n      puVar4 = (undefined4 *)(&stack0xffffffb8 + iVar18);\n    }\n    else {\n      puVar4 = (undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30);\n    }\n    if ((int)uVar21 < (int)uVar10) {\n      *(uint *)(puVar24 + 0x10) = uVar21;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar12,uVar10,puVar14);\n      puVar14 = puVar12;\n    }\n    else {\n      *(uint *)(puVar24 + 0x10) = uVar10;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12);\n    }\n    uVar10 = (uVar21 + uVar10) - (uint)(iVar18 == 0);\n    uVar15 = uVar15 + 1;\n    if ((int)uVar15 < (int)uVar10) {\n      puVar4 = puVar4 + (uVar10 - uVar15);\n      uVar10 = uVar15;\n    }\n    iVar13 = uVar10 - 1;\n    if (uVar10 != 0) {\n      puVar3 = (undefined4 *)param_1[3];\n      uVar25 = *puVar4;\n      puVar12 = puVar3;\n      if (iVar13 != 0) {\n        do {\n          puVar4 = puVar4 + 1;\n          puVar14 = puVar12 + 1;\n          *puVar12 = uVar25;\n          iVar13 = iVar13 + -1;\n          uVar25 = *puVar4;\n          puVar12 = puVar14;\n        } while (iVar13 != 0);\n        puVar3 = puVar3 + (uVar10 - 1);\n      }\n      *puVar3 = uVar25;\n    }\n    uVar17 = uVar17 ^ uVar19;\n    param_1[2] = (param_2[2] + *(int *)(param_3 + 8)) - (uint)(iVar18 == 0);\n    if ((int)uVar17 < 0) {\n      uVar10 = -uVar10;\n    }\n    param_1[1] = uVar10;\n    piVar8 = local_30;\n    if (local_30 != (int *)0x0) {\n      (*(code *)PTR___gmp_tmp_reentrant_free_00097614)();\n    }\n  }\n  if (local_2c == *(int *)puVar22) {\n    return;\n  }\n  uVar25 = 0x1cbf4;\n  puVar22 = PTR___stack_chk_fail_000974d0;\n  (*(code *)PTR___stack_chk_fail_000974d0)();\n  *(undefined **)(puVar24 + -0x28) = puVar22 + 0x82440;\n  *(uint **)(puVar24 + -0x14) = param_1;\n  *(undefined4 *)(puVar24 + -4) = uVar25;\n  *(undefined4 **)(puVar24 + -8) = param_2;\n  *(int *)(puVar24 + -0xc) = param_3;\n  *(uint *)(puVar24 + -0x10) = uVar19;\n  *(uint *)(puVar24 + -0x18) = uVar17;\n  *(uint *)(puVar24 + -0x1c) = uVar15;\n  iVar18 = puVar14[1];\n  if ((uVar10 == 0) || (iVar18 == 0)) {\n    piVar8[1] = 0;\n    piVar8[2] = 0;\n    return;\n  }\n  if (iVar18 < 0) {\n    iVar16 = *piVar8;\n    iVar7 = puVar14[3];\n    puVar20 = (uint *)piVar8[3];\n    iVar5 = -iVar18 - iVar16;\n    iVar13 = -iVar18;\n    if (iVar5 < 1) goto LAB_0001cda8;\nLAB_0001cc68:\n    iVar9 = iVar5 + -1;\n    iVar5 = iVar7 + iVar5 * 4;\n    lVar1 = (ulonglong)uVar10 * (ulonglong)*(uint *)(iVar7 + iVar9 * 4);\n    iVar13 = iVar5;\n    while( true ) {\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      iVar9 = iVar9 + -1;\n      pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n      if (iVar9 == -1) break;\n      puVar11 = (uint *)(iVar13 + -8);\n      iVar13 = iVar13 + -4;\n      uVar2 = (ulonglong)uVar10 * (ulonglong)*puVar11;\n      lVar1 = lVar1 + (uVar2 >> 0x20);\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      if ((int)lVar1 != -1) {\n        pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n        break;\n      }\n      lVar1 = CONCAT44(uVar15,(int)uVar2);\n    }\n    uVar6 = (*pcVar23)(puVar20,iVar5,iVar16);\n    uVar17 = *puVar20;\n    *puVar20 = uVar15 + uVar17;\n    if (uVar15 + uVar17 < uVar15) {\n      if (iVar16 < 2) {\nLAB_0001cd34:\n        uVar15 = (uint)(uVar6 + 1 != 0);\n        iVar13 = iVar16 + uVar15;\n        puVar20[iVar16] = uVar6 + 1;\n        piVar8[2] = puVar14[2] + uVar15;\n        goto joined_r0x0001cddc;\n      }\n      uVar15 = puVar20[1];\n      puVar20[1] = uVar15 + 1;\n      if (uVar15 + 1 == 0) {\n        iVar13 = 2;\n        puVar11 = puVar20 + 2;\n        do {\n          if (iVar13 == iVar16) goto LAB_0001cd34;\n          uVar15 = *puVar11;\n          iVar13 = iVar13 + 1;\n          *puVar11 = uVar15 + 1;\n          puVar11 = puVar11 + 1;\n        } while (uVar15 + 1 == 0);\n      }\n    }\n  }\n  else {\n    iVar16 = *piVar8;\n    iVar7 = puVar14[3];\n    iVar5 = iVar18 - iVar16;\n    puVar20 = (uint *)piVar8[3];\n    iVar13 = iVar18;\n    if (0 < iVar5) goto LAB_0001cc68;\nLAB_0001cda8:\n    iVar16 = iVar13;\n    uVar6 = (**(code **)(puVar22 + 0x7a4a4))(puVar20,iVar7,iVar16);\n  }\n  iVar13 = iVar16 + (uint)(uVar6 != 0);\n  puVar20[iVar16] = uVar6;\n  piVar8[2] = puVar14[2] + (uint)(uVar6 != 0);\njoined_r0x0001cddc:\n  if (iVar18 < 0) {\n    iVar13 = -iVar13;\n  }\n  piVar8[1] = iVar13;\n  return;\n}" { (declaration "longlong lVar1;" type_identifier identifier ;) (declaration "ulonglong uVar2;" type_identifier identifier ;) (declaration "undefined4 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined4 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "int *piVar8;" primitive_type (pointer_declarator "*piVar8" * identifier) ;) (declaration "int iVar9;" primitive_type identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "uint *puVar11;" type_identifier (pointer_declarator "*puVar11" * identifier) ;) (declaration "undefined4 *puVar12;" type_identifier (pointer_declarator "*puVar12" * identifier) ;) (declaration "int iVar13;" primitive_type identifier ;) (declaration "undefined4 *puVar14;" type_identifier (pointer_declarator "*puVar14" * identifier) ;) (declaration "uint uVar15;" type_identifier identifier ;) (declaration "int iVar16;" primitive_type identifier ;) (declaration "uint uVar17;" type_identifier identifier ;) (declaration "int iVar18;" primitive_type identifier ;) (declaration "uint uVar19;" type_identifier identifier ;) (declaration "uint *puVar20;" type_identifier (pointer_declarator "*puVar20" * identifier) ;) (declaration "uint uVar21;" type_identifier identifier ;) (declaration "undefined *puVar22;" type_identifier (pointer_declarator "*puVar22" * identifier) ;) (declaration "code *pcVar23;" type_identifier (pointer_declarator "*pcVar23" * identifier) ;) (declaration "undefined1 *puVar24;" type_identifier (pointer_declarator "*puVar24" * identifier) ;) (declaration "undefined4 uVar25;" type_identifier identifier ;) (declaration "undefined1 auStack_60 [24];" type_identifier (array_declarator "auStack_60 [24]" identifier [ number_literal ]) ;) (declaration "int *local_30;" primitive_type (pointer_declarator "*local_30" * identifier) ;) (declaration "int local_2c;" primitive_type identifier ;) (expression_statement "puVar22 = PTR___stack_chk_guard_00097540;" (assignment_expression "puVar22 = PTR___stack_chk_guard_00097540" identifier = identifier) ;) (expression_statement "puVar24 = auStack_60;" (assignment_expression "puVar24 = auStack_60" identifier = identifier) ;) (expression_statement "uVar17 = param_2[1];" (assignment_expression "uVar17 = param_2[1]" identifier = (subscript_expression "param_2[1]" identifier [ number_literal ])) ;) (expression_statement "local_2c = *(int *)PTR___stack_chk_guard_00097540;" (assignment_expression "local_2c = *(int *)PTR___stack_chk_guard_00097540" identifier = (pointer_expression "*(int *)PTR___stack_chk_guard_00097540" * (cast_expression "(int *)PTR___stack_chk_guard_00097540" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "uVar15 = *param_1;" (assignment_expression "uVar15 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "uVar19 = *(uint *)(param_3 + 4);" (assignment_expression "uVar19 = *(uint *)(param_3 + 4)" identifier = (pointer_expression "*(uint *)(param_3 + 4)" * (cast_expression "(uint *)(param_3 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) ))))) ;) (expression_statement "uVar6 = -uVar17;" (assignment_expression "uVar6 = -uVar17" identifier = (unary_expression "-uVar17" - identifier)) ;) (if_statement "if (-1 < (int)uVar17) {\n    uVar6 = uVar17;\n  }" if (parenthesized_expression "(-1 < (int)uVar17)" ( (binary_expression "-1 < (int)uVar17" number_literal < (cast_expression "(int)uVar17" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    uVar6 = uVar17;\n  }" { (expression_statement "uVar6 = uVar17;" (assignment_expression "uVar6 = uVar17" identifier = identifier) ;) })) (expression_statement "uVar10 = uVar19;" (assignment_expression "uVar10 = uVar19" identifier = identifier) ;) (if_statement "if ((int)uVar19 < 0) {\n    uVar10 = -uVar19;\n  }" if (parenthesized_expression "((int)uVar19 < 0)" ( (binary_expression "(int)uVar19 < 0" (cast_expression "(int)uVar19" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n    uVar10 = -uVar19;\n  }" { (expression_statement "uVar10 = -uVar19;" (assignment_expression "uVar10 = -uVar19" identifier = (unary_expression "-uVar19" - identifier)) ;) })) (expression_statement "puVar14 = (undefined4 *)param_2[3];" (assignment_expression "puVar14 = (undefined4 *)param_2[3]" identifier = (cast_expression "(undefined4 *)param_2[3]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_2[3]" identifier [ number_literal ]))) ;) (expression_statement "puVar12 = *(undefined4 **)(param_3 + 0xc);" (assignment_expression "puVar12 = *(undefined4 **)(param_3 + 0xc)" identifier = (pointer_expression "*(undefined4 **)(param_3 + 0xc)" * (cast_expression "(undefined4 **)(param_3 + 0xc)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_3 + 0xc)" ( (binary_expression "param_3 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "uVar21 = uVar6;" (assignment_expression "uVar21 = uVar6" identifier = identifier) ;) (if_statement "if ((int *)(uint)((int)uVar15 < (int)uVar6) != (int *)0x0) {\n    puVar14 = puVar14 + (uVar6 - uVar15);\n    uVar21 = uVar15;\n  }" if (parenthesized_expression "((int *)(uint)((int)uVar15 < (int)uVar6) != (int *)0x0)" ( (binary_expression "(int *)(uint)((int)uVar15 < (int)uVar6) != (int *)0x0" (cast_expression "(int *)(uint)((int)uVar15 < (int)uVar6)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "(uint)((int)uVar15 < (int)uVar6)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((int)uVar15 < (int)uVar6)" ( (binary_expression "(int)uVar15 < (int)uVar6" (cast_expression "(int)uVar15" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)uVar6" ( (type_descriptor "int" primitive_type) ) identifier)) )))) != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    puVar14 = puVar14 + (uVar6 - uVar15);\n    uVar21 = uVar15;\n  }" { (expression_statement "puVar14 = puVar14 + (uVar6 - uVar15);" (assignment_expression "puVar14 = puVar14 + (uVar6 - uVar15)" identifier = (binary_expression "puVar14 + (uVar6 - uVar15)" identifier + (parenthesized_expression "(uVar6 - uVar15)" ( (binary_expression "uVar6 - uVar15" identifier - identifier) )))) ;) (expression_statement "uVar21 = uVar15;" (assignment_expression "uVar21 = uVar15" identifier = identifier) ;) })) (if_statement "if ((int)uVar15 < (int)uVar10) {\n    puVar12 = puVar12 + (uVar10 - uVar15);\n    uVar10 = uVar15;\n  }" if (parenthesized_expression "((int)uVar15 < (int)uVar10)" ( (binary_expression "(int)uVar15 < (int)uVar10" (cast_expression "(int)uVar15" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)uVar10" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    puVar12 = puVar12 + (uVar10 - uVar15);\n    uVar10 = uVar15;\n  }" { (expression_statement "puVar12 = puVar12 + (uVar10 - uVar15);" (assignment_expression "puVar12 = puVar12 + (uVar10 - uVar15)" identifier = (binary_expression "puVar12 + (uVar10 - uVar15)" identifier + (parenthesized_expression "(uVar10 - uVar15)" ( (binary_expression "uVar10 - uVar15" identifier - identifier) )))) ;) (expression_statement "uVar10 = uVar15;" (assignment_expression "uVar10 = uVar15" identifier = identifier) ;) })) (if_statement "if ((uVar21 == 0) || (uVar10 == 0)) {\n    param_1[1] = 0;\n    param_1[2] = 0;\n    piVar8 = (int *)(uint)((int)uVar15 < (int)uVar6);\n    puVar14 = param_2;\n    puVar24 = auStack_60;\n  }\n  else {\n    uVar6 = (uVar21 + uVar10) * 4;\n    local_30 = (int *)0x0;\n    if (uVar6 < 0x7f01) {\n      iVar18 = -(uVar6 + 7 & 0xfffffff8);\n      puVar24 = auStack_60 + iVar18;\n      puVar4 = (undefined4 *)(&stack0xffffffb8 + iVar18);\n    }\n    else {\n      puVar4 = (undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30);\n    }\n    if ((int)uVar21 < (int)uVar10) {\n      *(uint *)(puVar24 + 0x10) = uVar21;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar12,uVar10,puVar14);\n      puVar14 = puVar12;\n    }\n    else {\n      *(uint *)(puVar24 + 0x10) = uVar10;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12);\n    }\n    uVar10 = (uVar21 + uVar10) - (uint)(iVar18 == 0);\n    uVar15 = uVar15 + 1;\n    if ((int)uVar15 < (int)uVar10) {\n      puVar4 = puVar4 + (uVar10 - uVar15);\n      uVar10 = uVar15;\n    }\n    iVar13 = uVar10 - 1;\n    if (uVar10 != 0) {\n      puVar3 = (undefined4 *)param_1[3];\n      uVar25 = *puVar4;\n      puVar12 = puVar3;\n      if (iVar13 != 0) {\n        do {\n          puVar4 = puVar4 + 1;\n          puVar14 = puVar12 + 1;\n          *puVar12 = uVar25;\n          iVar13 = iVar13 + -1;\n          uVar25 = *puVar4;\n          puVar12 = puVar14;\n        } while (iVar13 != 0);\n        puVar3 = puVar3 + (uVar10 - 1);\n      }\n      *puVar3 = uVar25;\n    }\n    uVar17 = uVar17 ^ uVar19;\n    param_1[2] = (param_2[2] + *(int *)(param_3 + 8)) - (uint)(iVar18 == 0);\n    if ((int)uVar17 < 0) {\n      uVar10 = -uVar10;\n    }\n    param_1[1] = uVar10;\n    piVar8 = local_30;\n    if (local_30 != (int *)0x0) {\n      (*(code *)PTR___gmp_tmp_reentrant_free_00097614)();\n    }\n  }" if (parenthesized_expression "((uVar21 == 0) || (uVar10 == 0))" ( (binary_expression "(uVar21 == 0) || (uVar10 == 0)" (parenthesized_expression "(uVar21 == 0)" ( (binary_expression "uVar21 == 0" identifier == number_literal) )) || (parenthesized_expression "(uVar10 == 0)" ( (binary_expression "uVar10 == 0" identifier == number_literal) ))) )) (compound_statement "{\n    param_1[1] = 0;\n    param_1[2] = 0;\n    piVar8 = (int *)(uint)((int)uVar15 < (int)uVar6);\n    puVar14 = param_2;\n    puVar24 = auStack_60;\n  }" { (expression_statement "param_1[1] = 0;" (assignment_expression "param_1[1] = 0" (subscript_expression "param_1[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[2] = 0;" (assignment_expression "param_1[2] = 0" (subscript_expression "param_1[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "piVar8 = (int *)(uint)((int)uVar15 < (int)uVar6);" (assignment_expression "piVar8 = (int *)(uint)((int)uVar15 < (int)uVar6)" identifier = (cast_expression "(int *)(uint)((int)uVar15 < (int)uVar6)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "(uint)((int)uVar15 < (int)uVar6)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((int)uVar15 < (int)uVar6)" ( (binary_expression "(int)uVar15 < (int)uVar6" (cast_expression "(int)uVar15" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)uVar6" ( (type_descriptor "int" primitive_type) ) identifier)) ))))) ;) (expression_statement "puVar14 = param_2;" (assignment_expression "puVar14 = param_2" identifier = identifier) ;) (expression_statement "puVar24 = auStack_60;" (assignment_expression "puVar24 = auStack_60" identifier = identifier) ;) }) (else_clause "else {\n    uVar6 = (uVar21 + uVar10) * 4;\n    local_30 = (int *)0x0;\n    if (uVar6 < 0x7f01) {\n      iVar18 = -(uVar6 + 7 & 0xfffffff8);\n      puVar24 = auStack_60 + iVar18;\n      puVar4 = (undefined4 *)(&stack0xffffffb8 + iVar18);\n    }\n    else {\n      puVar4 = (undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30);\n    }\n    if ((int)uVar21 < (int)uVar10) {\n      *(uint *)(puVar24 + 0x10) = uVar21;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar12,uVar10,puVar14);\n      puVar14 = puVar12;\n    }\n    else {\n      *(uint *)(puVar24 + 0x10) = uVar10;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12);\n    }\n    uVar10 = (uVar21 + uVar10) - (uint)(iVar18 == 0);\n    uVar15 = uVar15 + 1;\n    if ((int)uVar15 < (int)uVar10) {\n      puVar4 = puVar4 + (uVar10 - uVar15);\n      uVar10 = uVar15;\n    }\n    iVar13 = uVar10 - 1;\n    if (uVar10 != 0) {\n      puVar3 = (undefined4 *)param_1[3];\n      uVar25 = *puVar4;\n      puVar12 = puVar3;\n      if (iVar13 != 0) {\n        do {\n          puVar4 = puVar4 + 1;\n          puVar14 = puVar12 + 1;\n          *puVar12 = uVar25;\n          iVar13 = iVar13 + -1;\n          uVar25 = *puVar4;\n          puVar12 = puVar14;\n        } while (iVar13 != 0);\n        puVar3 = puVar3 + (uVar10 - 1);\n      }\n      *puVar3 = uVar25;\n    }\n    uVar17 = uVar17 ^ uVar19;\n    param_1[2] = (param_2[2] + *(int *)(param_3 + 8)) - (uint)(iVar18 == 0);\n    if ((int)uVar17 < 0) {\n      uVar10 = -uVar10;\n    }\n    param_1[1] = uVar10;\n    piVar8 = local_30;\n    if (local_30 != (int *)0x0) {\n      (*(code *)PTR___gmp_tmp_reentrant_free_00097614)();\n    }\n  }" else (compound_statement "{\n    uVar6 = (uVar21 + uVar10) * 4;\n    local_30 = (int *)0x0;\n    if (uVar6 < 0x7f01) {\n      iVar18 = -(uVar6 + 7 & 0xfffffff8);\n      puVar24 = auStack_60 + iVar18;\n      puVar4 = (undefined4 *)(&stack0xffffffb8 + iVar18);\n    }\n    else {\n      puVar4 = (undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30);\n    }\n    if ((int)uVar21 < (int)uVar10) {\n      *(uint *)(puVar24 + 0x10) = uVar21;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar12,uVar10,puVar14);\n      puVar14 = puVar12;\n    }\n    else {\n      *(uint *)(puVar24 + 0x10) = uVar10;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12);\n    }\n    uVar10 = (uVar21 + uVar10) - (uint)(iVar18 == 0);\n    uVar15 = uVar15 + 1;\n    if ((int)uVar15 < (int)uVar10) {\n      puVar4 = puVar4 + (uVar10 - uVar15);\n      uVar10 = uVar15;\n    }\n    iVar13 = uVar10 - 1;\n    if (uVar10 != 0) {\n      puVar3 = (undefined4 *)param_1[3];\n      uVar25 = *puVar4;\n      puVar12 = puVar3;\n      if (iVar13 != 0) {\n        do {\n          puVar4 = puVar4 + 1;\n          puVar14 = puVar12 + 1;\n          *puVar12 = uVar25;\n          iVar13 = iVar13 + -1;\n          uVar25 = *puVar4;\n          puVar12 = puVar14;\n        } while (iVar13 != 0);\n        puVar3 = puVar3 + (uVar10 - 1);\n      }\n      *puVar3 = uVar25;\n    }\n    uVar17 = uVar17 ^ uVar19;\n    param_1[2] = (param_2[2] + *(int *)(param_3 + 8)) - (uint)(iVar18 == 0);\n    if ((int)uVar17 < 0) {\n      uVar10 = -uVar10;\n    }\n    param_1[1] = uVar10;\n    piVar8 = local_30;\n    if (local_30 != (int *)0x0) {\n      (*(code *)PTR___gmp_tmp_reentrant_free_00097614)();\n    }\n  }" { (expression_statement "uVar6 = (uVar21 + uVar10) * 4;" (assignment_expression "uVar6 = (uVar21 + uVar10) * 4" identifier = (binary_expression "(uVar21 + uVar10) * 4" (parenthesized_expression "(uVar21 + uVar10)" ( (binary_expression "uVar21 + uVar10" identifier + identifier) )) * number_literal)) ;) (expression_statement "local_30 = (int *)0x0;" (assignment_expression "local_30 = (int *)0x0" identifier = (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (uVar6 < 0x7f01) {\n      iVar18 = -(uVar6 + 7 & 0xfffffff8);\n      puVar24 = auStack_60 + iVar18;\n      puVar4 = (undefined4 *)(&stack0xffffffb8 + iVar18);\n    }\n    else {\n      puVar4 = (undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30);\n    }" if (parenthesized_expression "(uVar6 < 0x7f01)" ( (binary_expression "uVar6 < 0x7f01" identifier < number_literal) )) (compound_statement "{\n      iVar18 = -(uVar6 + 7 & 0xfffffff8);\n      puVar24 = auStack_60 + iVar18;\n      puVar4 = (undefined4 *)(&stack0xffffffb8 + iVar18);\n    }" { (expression_statement "iVar18 = -(uVar6 + 7 & 0xfffffff8);" (assignment_expression "iVar18 = -(uVar6 + 7 & 0xfffffff8)" identifier = (unary_expression "-(uVar6 + 7 & 0xfffffff8)" - (parenthesized_expression "(uVar6 + 7 & 0xfffffff8)" ( (binary_expression "uVar6 + 7 & 0xfffffff8" (binary_expression "uVar6 + 7" identifier + number_literal) & number_literal) )))) ;) (expression_statement "puVar24 = auStack_60 + iVar18;" (assignment_expression "puVar24 = auStack_60 + iVar18" identifier = (binary_expression "auStack_60 + iVar18" identifier + identifier)) ;) (expression_statement "puVar4 = (undefined4 *)(&stack0xffffffb8 + iVar18);" (assignment_expression "puVar4 = (undefined4 *)(&stack0xffffffb8 + iVar18)" identifier = (cast_expression "(undefined4 *)(&stack0xffffffb8 + iVar18)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&stack0xffffffb8 + iVar18)" ( (binary_expression "&stack0xffffffb8 + iVar18" (pointer_expression "&stack0xffffffb8" & identifier) + identifier) )))) ;) }) (else_clause "else {\n      puVar4 = (undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30);\n    }" else (compound_statement "{\n      puVar4 = (undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30);\n    }" { (expression_statement "puVar4 = (undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30);" (assignment_expression "puVar4 = (undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30)" identifier = (cast_expression "(undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30)" (parenthesized_expression "(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)" ( (pointer_expression "*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0" * (cast_expression "(code *)PTR___gmp_tmp_reentrant_alloc_000972f0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(&local_30)" ( (pointer_expression "&local_30" & identifier) ))))) ;) }))) (if_statement "if ((int)uVar21 < (int)uVar10) {\n      *(uint *)(puVar24 + 0x10) = uVar21;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar12,uVar10,puVar14);\n      puVar14 = puVar12;\n    }\n    else {\n      *(uint *)(puVar24 + 0x10) = uVar10;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12);\n    }" if (parenthesized_expression "((int)uVar21 < (int)uVar10)" ( (binary_expression "(int)uVar21 < (int)uVar10" (cast_expression "(int)uVar21" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)uVar10" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n      *(uint *)(puVar24 + 0x10) = uVar21;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar12,uVar10,puVar14);\n      puVar14 = puVar12;\n    }" { (expression_statement "*(uint *)(puVar24 + 0x10) = uVar21;" (assignment_expression "*(uint *)(puVar24 + 0x10) = uVar21" (pointer_expression "*(uint *)(puVar24 + 0x10)" * (cast_expression "(uint *)(puVar24 + 0x10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar24 + 0x10)" ( (binary_expression "puVar24 + 0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar12,uVar10,puVar14);" (assignment_expression "iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar12,uVar10,puVar14)" identifier = (call_expression "(*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar12,uVar10,puVar14)" (parenthesized_expression "(*(code *)PTR___gmpn_mul_000972b4)" ( (pointer_expression "*(code *)PTR___gmpn_mul_000972b4" * (cast_expression "(code *)PTR___gmpn_mul_000972b4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar4,puVar12,uVar10,puVar14)" ( identifier , identifier , identifier , identifier )))) ;) (expression_statement "puVar14 = puVar12;" (assignment_expression "puVar14 = puVar12" identifier = identifier) ;) }) (else_clause "else {\n      *(uint *)(puVar24 + 0x10) = uVar10;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12);\n    }" else (compound_statement "{\n      *(uint *)(puVar24 + 0x10) = uVar10;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12);\n    }" { (expression_statement "*(uint *)(puVar24 + 0x10) = uVar10;" (assignment_expression "*(uint *)(puVar24 + 0x10) = uVar10" (pointer_expression "*(uint *)(puVar24 + 0x10)" * (cast_expression "(uint *)(puVar24 + 0x10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar24 + 0x10)" ( (binary_expression "puVar24 + 0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12);" (assignment_expression "iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12)" identifier = (call_expression "(*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12)" (parenthesized_expression "(*(code *)PTR___gmpn_mul_000972b4)" ( (pointer_expression "*(code *)PTR___gmpn_mul_000972b4" * (cast_expression "(code *)PTR___gmpn_mul_000972b4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar4,puVar14,uVar21,puVar12)" ( identifier , identifier , identifier , identifier )))) ;) }))) (expression_statement "uVar10 = (uVar21 + uVar10) - (uint)(iVar18 == 0);" (assignment_expression "uVar10 = (uVar21 + uVar10) - (uint)(iVar18 == 0)" identifier = (binary_expression "(uVar21 + uVar10) - (uint)(iVar18 == 0)" (parenthesized_expression "(uVar21 + uVar10)" ( (binary_expression "uVar21 + uVar10" identifier + identifier) )) - (call_expression "(uint)(iVar18 == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar18 == 0)" ( (binary_expression "iVar18 == 0" identifier == number_literal) ))))) ;) (expression_statement "uVar15 = uVar15 + 1;" (assignment_expression "uVar15 = uVar15 + 1" identifier = (binary_expression "uVar15 + 1" identifier + number_literal)) ;) (if_statement "if ((int)uVar15 < (int)uVar10) {\n      puVar4 = puVar4 + (uVar10 - uVar15);\n      uVar10 = uVar15;\n    }" if (parenthesized_expression "((int)uVar15 < (int)uVar10)" ( (binary_expression "(int)uVar15 < (int)uVar10" (cast_expression "(int)uVar15" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)uVar10" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n      puVar4 = puVar4 + (uVar10 - uVar15);\n      uVar10 = uVar15;\n    }" { (expression_statement "puVar4 = puVar4 + (uVar10 - uVar15);" (assignment_expression "puVar4 = puVar4 + (uVar10 - uVar15)" identifier = (binary_expression "puVar4 + (uVar10 - uVar15)" identifier + (parenthesized_expression "(uVar10 - uVar15)" ( (binary_expression "uVar10 - uVar15" identifier - identifier) )))) ;) (expression_statement "uVar10 = uVar15;" (assignment_expression "uVar10 = uVar15" identifier = identifier) ;) })) (expression_statement "iVar13 = uVar10 - 1;" (assignment_expression "iVar13 = uVar10 - 1" identifier = (binary_expression "uVar10 - 1" identifier - number_literal)) ;) (if_statement "if (uVar10 != 0) {\n      puVar3 = (undefined4 *)param_1[3];\n      uVar25 = *puVar4;\n      puVar12 = puVar3;\n      if (iVar13 != 0) {\n        do {\n          puVar4 = puVar4 + 1;\n          puVar14 = puVar12 + 1;\n          *puVar12 = uVar25;\n          iVar13 = iVar13 + -1;\n          uVar25 = *puVar4;\n          puVar12 = puVar14;\n        } while (iVar13 != 0);\n        puVar3 = puVar3 + (uVar10 - 1);\n      }\n      *puVar3 = uVar25;\n    }" if (parenthesized_expression "(uVar10 != 0)" ( (binary_expression "uVar10 != 0" identifier != number_literal) )) (compound_statement "{\n      puVar3 = (undefined4 *)param_1[3];\n      uVar25 = *puVar4;\n      puVar12 = puVar3;\n      if (iVar13 != 0) {\n        do {\n          puVar4 = puVar4 + 1;\n          puVar14 = puVar12 + 1;\n          *puVar12 = uVar25;\n          iVar13 = iVar13 + -1;\n          uVar25 = *puVar4;\n          puVar12 = puVar14;\n        } while (iVar13 != 0);\n        puVar3 = puVar3 + (uVar10 - 1);\n      }\n      *puVar3 = uVar25;\n    }" { (expression_statement "puVar3 = (undefined4 *)param_1[3];" (assignment_expression "puVar3 = (undefined4 *)param_1[3]" identifier = (cast_expression "(undefined4 *)param_1[3]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[3]" identifier [ number_literal ]))) ;) (expression_statement "uVar25 = *puVar4;" (assignment_expression "uVar25 = *puVar4" identifier = (pointer_expression "*puVar4" * identifier)) ;) (expression_statement "puVar12 = puVar3;" (assignment_expression "puVar12 = puVar3" identifier = identifier) ;) (if_statement "if (iVar13 != 0) {\n        do {\n          puVar4 = puVar4 + 1;\n          puVar14 = puVar12 + 1;\n          *puVar12 = uVar25;\n          iVar13 = iVar13 + -1;\n          uVar25 = *puVar4;\n          puVar12 = puVar14;\n        } while (iVar13 != 0);\n        puVar3 = puVar3 + (uVar10 - 1);\n      }" if (parenthesized_expression "(iVar13 != 0)" ( (binary_expression "iVar13 != 0" identifier != number_literal) )) (compound_statement "{\n        do {\n          puVar4 = puVar4 + 1;\n          puVar14 = puVar12 + 1;\n          *puVar12 = uVar25;\n          iVar13 = iVar13 + -1;\n          uVar25 = *puVar4;\n          puVar12 = puVar14;\n        } while (iVar13 != 0);\n        puVar3 = puVar3 + (uVar10 - 1);\n      }" { (do_statement "do {\n          puVar4 = puVar4 + 1;\n          puVar14 = puVar12 + 1;\n          *puVar12 = uVar25;\n          iVar13 = iVar13 + -1;\n          uVar25 = *puVar4;\n          puVar12 = puVar14;\n        } while (iVar13 != 0);" do (compound_statement "{\n          puVar4 = puVar4 + 1;\n          puVar14 = puVar12 + 1;\n          *puVar12 = uVar25;\n          iVar13 = iVar13 + -1;\n          uVar25 = *puVar4;\n          puVar12 = puVar14;\n        }" { (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" identifier = (binary_expression "puVar4 + 1" identifier + number_literal)) ;) (expression_statement "puVar14 = puVar12 + 1;" (assignment_expression "puVar14 = puVar12 + 1" identifier = (binary_expression "puVar12 + 1" identifier + number_literal)) ;) (expression_statement "*puVar12 = uVar25;" (assignment_expression "*puVar12 = uVar25" (pointer_expression "*puVar12" * identifier) = identifier) ;) (expression_statement "iVar13 = iVar13 + -1;" (assignment_expression "iVar13 = iVar13 + -1" identifier = (binary_expression "iVar13 + -1" identifier + number_literal)) ;) (expression_statement "uVar25 = *puVar4;" (assignment_expression "uVar25 = *puVar4" identifier = (pointer_expression "*puVar4" * identifier)) ;) (expression_statement "puVar12 = puVar14;" (assignment_expression "puVar12 = puVar14" identifier = identifier) ;) }) while (parenthesized_expression "(iVar13 != 0)" ( (binary_expression "iVar13 != 0" identifier != number_literal) )) ;) (expression_statement "puVar3 = puVar3 + (uVar10 - 1);" (assignment_expression "puVar3 = puVar3 + (uVar10 - 1)" identifier = (binary_expression "puVar3 + (uVar10 - 1)" identifier + (parenthesized_expression "(uVar10 - 1)" ( (binary_expression "uVar10 - 1" identifier - number_literal) )))) ;) })) (expression_statement "*puVar3 = uVar25;" (assignment_expression "*puVar3 = uVar25" (pointer_expression "*puVar3" * identifier) = identifier) ;) })) (expression_statement "uVar17 = uVar17 ^ uVar19;" (assignment_expression "uVar17 = uVar17 ^ uVar19" identifier = (binary_expression "uVar17 ^ uVar19" identifier ^ identifier)) ;) (expression_statement "param_1[2] = (param_2[2] + *(int *)(param_3 + 8)) - (uint)(iVar18 == 0);" (assignment_expression "param_1[2] = (param_2[2] + *(int *)(param_3 + 8)) - (uint)(iVar18 == 0)" (subscript_expression "param_1[2]" identifier [ number_literal ]) = (binary_expression "(param_2[2] + *(int *)(param_3 + 8)) - (uint)(iVar18 == 0)" (parenthesized_expression "(param_2[2] + *(int *)(param_3 + 8))" ( (binary_expression "param_2[2] + *(int *)(param_3 + 8)" (subscript_expression "param_2[2]" identifier [ number_literal ]) + (pointer_expression "*(int *)(param_3 + 8)" * (cast_expression "(int *)(param_3 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 8)" ( (binary_expression "param_3 + 8" identifier + number_literal) ))))) )) - (call_expression "(uint)(iVar18 == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar18 == 0)" ( (binary_expression "iVar18 == 0" identifier == number_literal) ))))) ;) (if_statement "if ((int)uVar17 < 0) {\n      uVar10 = -uVar10;\n    }" if (parenthesized_expression "((int)uVar17 < 0)" ( (binary_expression "(int)uVar17 < 0" (cast_expression "(int)uVar17" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n      uVar10 = -uVar10;\n    }" { (expression_statement "uVar10 = -uVar10;" (assignment_expression "uVar10 = -uVar10" identifier = (unary_expression "-uVar10" - identifier)) ;) })) (expression_statement "param_1[1] = uVar10;" (assignment_expression "param_1[1] = uVar10" (subscript_expression "param_1[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "piVar8 = local_30;" (assignment_expression "piVar8 = local_30" identifier = identifier) ;) (if_statement "if (local_30 != (int *)0x0) {\n      (*(code *)PTR___gmp_tmp_reentrant_free_00097614)();\n    }" if (parenthesized_expression "(local_30 != (int *)0x0)" ( (binary_expression "local_30 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      (*(code *)PTR___gmp_tmp_reentrant_free_00097614)();\n    }" { (expression_statement "(*(code *)PTR___gmp_tmp_reentrant_free_00097614)();" (call_expression "(*(code *)PTR___gmp_tmp_reentrant_free_00097614)()" (parenthesized_expression "(*(code *)PTR___gmp_tmp_reentrant_free_00097614)" ( (pointer_expression "*(code *)PTR___gmp_tmp_reentrant_free_00097614" * (cast_expression "(code *)PTR___gmp_tmp_reentrant_free_00097614" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) })) }))) (if_statement "if (local_2c == *(int *)puVar22) {\n    return;\n  }" if (parenthesized_expression "(local_2c == *(int *)puVar22)" ( (binary_expression "local_2c == *(int *)puVar22" identifier == (pointer_expression "*(int *)puVar22" * (cast_expression "(int *)puVar22" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "uVar25 = 0x1cbf4;" (assignment_expression "uVar25 = 0x1cbf4" identifier = number_literal) ;) (expression_statement "puVar22 = PTR___stack_chk_fail_000974d0;" (assignment_expression "puVar22 = PTR___stack_chk_fail_000974d0" identifier = identifier) ;) (expression_statement "(*(code *)PTR___stack_chk_fail_000974d0)();" (call_expression "(*(code *)PTR___stack_chk_fail_000974d0)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_000974d0)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_000974d0" * (cast_expression "(code *)PTR___stack_chk_fail_000974d0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (expression_statement "*(undefined **)(puVar24 + -0x28) = puVar22 + 0x82440;" (assignment_expression "*(undefined **)(puVar24 + -0x28) = puVar22 + 0x82440" (pointer_expression "*(undefined **)(puVar24 + -0x28)" * (cast_expression "(undefined **)(puVar24 + -0x28)" ( (type_descriptor "undefined **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar24 + -0x28)" ( (binary_expression "puVar24 + -0x28" identifier + number_literal) )))) = (binary_expression "puVar22 + 0x82440" identifier + number_literal)) ;) (expression_statement "*(uint **)(puVar24 + -0x14) = param_1;" (assignment_expression "*(uint **)(puVar24 + -0x14) = param_1" (pointer_expression "*(uint **)(puVar24 + -0x14)" * (cast_expression "(uint **)(puVar24 + -0x14)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar24 + -0x14)" ( (binary_expression "puVar24 + -0x14" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(puVar24 + -4) = uVar25;" (assignment_expression "*(undefined4 *)(puVar24 + -4) = uVar25" (pointer_expression "*(undefined4 *)(puVar24 + -4)" * (cast_expression "(undefined4 *)(puVar24 + -4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar24 + -4)" ( (binary_expression "puVar24 + -4" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 **)(puVar24 + -8) = param_2;" (assignment_expression "*(undefined4 **)(puVar24 + -8) = param_2" (pointer_expression "*(undefined4 **)(puVar24 + -8)" * (cast_expression "(undefined4 **)(puVar24 + -8)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar24 + -8)" ( (binary_expression "puVar24 + -8" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(int *)(puVar24 + -0xc) = param_3;" (assignment_expression "*(int *)(puVar24 + -0xc) = param_3" (pointer_expression "*(int *)(puVar24 + -0xc)" * (cast_expression "(int *)(puVar24 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar24 + -0xc)" ( (binary_expression "puVar24 + -0xc" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)(puVar24 + -0x10) = uVar19;" (assignment_expression "*(uint *)(puVar24 + -0x10) = uVar19" (pointer_expression "*(uint *)(puVar24 + -0x10)" * (cast_expression "(uint *)(puVar24 + -0x10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar24 + -0x10)" ( (binary_expression "puVar24 + -0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)(puVar24 + -0x18) = uVar17;" (assignment_expression "*(uint *)(puVar24 + -0x18) = uVar17" (pointer_expression "*(uint *)(puVar24 + -0x18)" * (cast_expression "(uint *)(puVar24 + -0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar24 + -0x18)" ( (binary_expression "puVar24 + -0x18" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)(puVar24 + -0x1c) = uVar15;" (assignment_expression "*(uint *)(puVar24 + -0x1c) = uVar15" (pointer_expression "*(uint *)(puVar24 + -0x1c)" * (cast_expression "(uint *)(puVar24 + -0x1c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar24 + -0x1c)" ( (binary_expression "puVar24 + -0x1c" identifier + number_literal) )))) = identifier) ;) (expression_statement "iVar18 = puVar14[1];" (assignment_expression "iVar18 = puVar14[1]" identifier = (subscript_expression "puVar14[1]" identifier [ number_literal ])) ;) (if_statement "if ((uVar10 == 0) || (iVar18 == 0)) {\n    piVar8[1] = 0;\n    piVar8[2] = 0;\n    return;\n  }" if (parenthesized_expression "((uVar10 == 0) || (iVar18 == 0))" ( (binary_expression "(uVar10 == 0) || (iVar18 == 0)" (parenthesized_expression "(uVar10 == 0)" ( (binary_expression "uVar10 == 0" identifier == number_literal) )) || (parenthesized_expression "(iVar18 == 0)" ( (binary_expression "iVar18 == 0" identifier == number_literal) ))) )) (compound_statement "{\n    piVar8[1] = 0;\n    piVar8[2] = 0;\n    return;\n  }" { (expression_statement "piVar8[1] = 0;" (assignment_expression "piVar8[1] = 0" (subscript_expression "piVar8[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "piVar8[2] = 0;" (assignment_expression "piVar8[2] = 0" (subscript_expression "piVar8[2]" identifier [ number_literal ]) = number_literal) ;) (return_statement "return;" return ;) })) (if_statement "if (iVar18 < 0) {\n    iVar16 = *piVar8;\n    iVar7 = puVar14[3];\n    puVar20 = (uint *)piVar8[3];\n    iVar5 = -iVar18 - iVar16;\n    iVar13 = -iVar18;\n    if (iVar5 < 1) goto LAB_0001cda8;\nLAB_0001cc68:\n    iVar9 = iVar5 + -1;\n    iVar5 = iVar7 + iVar5 * 4;\n    lVar1 = (ulonglong)uVar10 * (ulonglong)*(uint *)(iVar7 + iVar9 * 4);\n    iVar13 = iVar5;\n    while( true ) {\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      iVar9 = iVar9 + -1;\n      pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n      if (iVar9 == -1) break;\n      puVar11 = (uint *)(iVar13 + -8);\n      iVar13 = iVar13 + -4;\n      uVar2 = (ulonglong)uVar10 * (ulonglong)*puVar11;\n      lVar1 = lVar1 + (uVar2 >> 0x20);\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      if ((int)lVar1 != -1) {\n        pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n        break;\n      }\n      lVar1 = CONCAT44(uVar15,(int)uVar2);\n    }\n    uVar6 = (*pcVar23)(puVar20,iVar5,iVar16);\n    uVar17 = *puVar20;\n    *puVar20 = uVar15 + uVar17;\n    if (uVar15 + uVar17 < uVar15) {\n      if (iVar16 < 2) {\nLAB_0001cd34:\n        uVar15 = (uint)(uVar6 + 1 != 0);\n        iVar13 = iVar16 + uVar15;\n        puVar20[iVar16] = uVar6 + 1;\n        piVar8[2] = puVar14[2] + uVar15;\n        goto joined_r0x0001cddc;\n      }\n      uVar15 = puVar20[1];\n      puVar20[1] = uVar15 + 1;\n      if (uVar15 + 1 == 0) {\n        iVar13 = 2;\n        puVar11 = puVar20 + 2;\n        do {\n          if (iVar13 == iVar16) goto LAB_0001cd34;\n          uVar15 = *puVar11;\n          iVar13 = iVar13 + 1;\n          *puVar11 = uVar15 + 1;\n          puVar11 = puVar11 + 1;\n        } while (uVar15 + 1 == 0);\n      }\n    }\n  }\n  else {\n    iVar16 = *piVar8;\n    iVar7 = puVar14[3];\n    iVar5 = iVar18 - iVar16;\n    puVar20 = (uint *)piVar8[3];\n    iVar13 = iVar18;\n    if (0 < iVar5) goto LAB_0001cc68;\nLAB_0001cda8:\n    iVar16 = iVar13;\n    uVar6 = (**(code **)(puVar22 + 0x7a4a4))(puVar20,iVar7,iVar16);\n  }" if (parenthesized_expression "(iVar18 < 0)" ( (binary_expression "iVar18 < 0" identifier < number_literal) )) (compound_statement "{\n    iVar16 = *piVar8;\n    iVar7 = puVar14[3];\n    puVar20 = (uint *)piVar8[3];\n    iVar5 = -iVar18 - iVar16;\n    iVar13 = -iVar18;\n    if (iVar5 < 1) goto LAB_0001cda8;\nLAB_0001cc68:\n    iVar9 = iVar5 + -1;\n    iVar5 = iVar7 + iVar5 * 4;\n    lVar1 = (ulonglong)uVar10 * (ulonglong)*(uint *)(iVar7 + iVar9 * 4);\n    iVar13 = iVar5;\n    while( true ) {\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      iVar9 = iVar9 + -1;\n      pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n      if (iVar9 == -1) break;\n      puVar11 = (uint *)(iVar13 + -8);\n      iVar13 = iVar13 + -4;\n      uVar2 = (ulonglong)uVar10 * (ulonglong)*puVar11;\n      lVar1 = lVar1 + (uVar2 >> 0x20);\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      if ((int)lVar1 != -1) {\n        pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n        break;\n      }\n      lVar1 = CONCAT44(uVar15,(int)uVar2);\n    }\n    uVar6 = (*pcVar23)(puVar20,iVar5,iVar16);\n    uVar17 = *puVar20;\n    *puVar20 = uVar15 + uVar17;\n    if (uVar15 + uVar17 < uVar15) {\n      if (iVar16 < 2) {\nLAB_0001cd34:\n        uVar15 = (uint)(uVar6 + 1 != 0);\n        iVar13 = iVar16 + uVar15;\n        puVar20[iVar16] = uVar6 + 1;\n        piVar8[2] = puVar14[2] + uVar15;\n        goto joined_r0x0001cddc;\n      }\n      uVar15 = puVar20[1];\n      puVar20[1] = uVar15 + 1;\n      if (uVar15 + 1 == 0) {\n        iVar13 = 2;\n        puVar11 = puVar20 + 2;\n        do {\n          if (iVar13 == iVar16) goto LAB_0001cd34;\n          uVar15 = *puVar11;\n          iVar13 = iVar13 + 1;\n          *puVar11 = uVar15 + 1;\n          puVar11 = puVar11 + 1;\n        } while (uVar15 + 1 == 0);\n      }\n    }\n  }" { (expression_statement "iVar16 = *piVar8;" (assignment_expression "iVar16 = *piVar8" identifier = (pointer_expression "*piVar8" * identifier)) ;) (expression_statement "iVar7 = puVar14[3];" (assignment_expression "iVar7 = puVar14[3]" identifier = (subscript_expression "puVar14[3]" identifier [ number_literal ])) ;) (expression_statement "puVar20 = (uint *)piVar8[3];" (assignment_expression "puVar20 = (uint *)piVar8[3]" identifier = (cast_expression "(uint *)piVar8[3]" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar8[3]" identifier [ number_literal ]))) ;) (expression_statement "iVar5 = -iVar18 - iVar16;" (assignment_expression "iVar5 = -iVar18 - iVar16" identifier = (binary_expression "-iVar18 - iVar16" (unary_expression "-iVar18" - identifier) - identifier)) ;) (expression_statement "iVar13 = -iVar18;" (assignment_expression "iVar13 = -iVar18" identifier = (unary_expression "-iVar18" - identifier)) ;) (if_statement "if (iVar5 < 1) goto LAB_0001cda8;" if (parenthesized_expression "(iVar5 < 1)" ( (binary_expression "iVar5 < 1" identifier < number_literal) )) (goto_statement "goto LAB_0001cda8;" goto statement_identifier ;)) (labeled_statement "LAB_0001cc68:\n    iVar9 = iVar5 + -1;" statement_identifier : (expression_statement "iVar9 = iVar5 + -1;" (assignment_expression "iVar9 = iVar5 + -1" identifier = (binary_expression "iVar5 + -1" identifier + number_literal)) ;)) (expression_statement "iVar5 = iVar7 + iVar5 * 4;" (assignment_expression "iVar5 = iVar7 + iVar5 * 4" identifier = (binary_expression "iVar7 + iVar5 * 4" identifier + (binary_expression "iVar5 * 4" identifier * number_literal))) ;) (expression_statement "lVar1 = (ulonglong)uVar10 * (ulonglong)*(uint *)(iVar7 + iVar9 * 4);" (assignment_expression "lVar1 = (ulonglong)uVar10 * (ulonglong)*(uint *)(iVar7 + iVar9 * 4)" identifier = (binary_expression "(ulonglong)uVar10 * (ulonglong)*(uint *)(iVar7 + iVar9 * 4)" (binary_expression "(ulonglong)uVar10 * (ulonglong)" (cast_expression "(ulonglong)uVar10" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (parenthesized_expression "(ulonglong)" ( identifier ))) * (cast_expression "(uint *)(iVar7 + iVar9 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + iVar9 * 4)" ( (binary_expression "iVar7 + iVar9 * 4" identifier + (binary_expression "iVar9 * 4" identifier * number_literal)) ))))) ;) (expression_statement "iVar13 = iVar5;" (assignment_expression "iVar13 = iVar5" identifier = identifier) ;) (while_statement "while( true ) {\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      iVar9 = iVar9 + -1;\n      pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n      if (iVar9 == -1) break;\n      puVar11 = (uint *)(iVar13 + -8);\n      iVar13 = iVar13 + -4;\n      uVar2 = (ulonglong)uVar10 * (ulonglong)*puVar11;\n      lVar1 = lVar1 + (uVar2 >> 0x20);\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      if ((int)lVar1 != -1) {\n        pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n        break;\n      }\n      lVar1 = CONCAT44(uVar15,(int)uVar2);\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      iVar9 = iVar9 + -1;\n      pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n      if (iVar9 == -1) break;\n      puVar11 = (uint *)(iVar13 + -8);\n      iVar13 = iVar13 + -4;\n      uVar2 = (ulonglong)uVar10 * (ulonglong)*puVar11;\n      lVar1 = lVar1 + (uVar2 >> 0x20);\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      if ((int)lVar1 != -1) {\n        pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n        break;\n      }\n      lVar1 = CONCAT44(uVar15,(int)uVar2);\n    }" { (expression_statement "uVar15 = (uint)((ulonglong)lVar1 >> 0x20);" (assignment_expression "uVar15 = (uint)((ulonglong)lVar1 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)lVar1 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)lVar1 >> 0x20)" ( (binary_expression "(ulonglong)lVar1 >> 0x20" (cast_expression "(ulonglong)lVar1" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (expression_statement "iVar9 = iVar9 + -1;" (assignment_expression "iVar9 = iVar9 + -1" identifier = (binary_expression "iVar9 + -1" identifier + number_literal)) ;) (expression_statement "pcVar23 = *(code **)(puVar22 + 0x7a4a4);" (assignment_expression "pcVar23 = *(code **)(puVar22 + 0x7a4a4)" identifier = (pointer_expression "*(code **)(puVar22 + 0x7a4a4)" * (cast_expression "(code **)(puVar22 + 0x7a4a4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar22 + 0x7a4a4)" ( (binary_expression "puVar22 + 0x7a4a4" identifier + number_literal) ))))) ;) (if_statement "if (iVar9 == -1) break;" if (parenthesized_expression "(iVar9 == -1)" ( (binary_expression "iVar9 == -1" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "puVar11 = (uint *)(iVar13 + -8);" (assignment_expression "puVar11 = (uint *)(iVar13 + -8)" identifier = (cast_expression "(uint *)(iVar13 + -8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar13 + -8)" ( (binary_expression "iVar13 + -8" identifier + number_literal) )))) ;) (expression_statement "iVar13 = iVar13 + -4;" (assignment_expression "iVar13 = iVar13 + -4" identifier = (binary_expression "iVar13 + -4" identifier + number_literal)) ;) (expression_statement "uVar2 = (ulonglong)uVar10 * (ulonglong)*puVar11;" (assignment_expression "uVar2 = (ulonglong)uVar10 * (ulonglong)*puVar11" identifier = (binary_expression "(ulonglong)uVar10 * (ulonglong)*puVar11" (binary_expression "(ulonglong)uVar10 * (ulonglong)" (cast_expression "(ulonglong)uVar10" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (parenthesized_expression "(ulonglong)" ( identifier ))) * identifier)) ;) (expression_statement "lVar1 = lVar1 + (uVar2 >> 0x20);" (assignment_expression "lVar1 = lVar1 + (uVar2 >> 0x20)" identifier = (binary_expression "lVar1 + (uVar2 >> 0x20)" identifier + (parenthesized_expression "(uVar2 >> 0x20)" ( (binary_expression "uVar2 >> 0x20" identifier >> number_literal) )))) ;) (expression_statement "uVar15 = (uint)((ulonglong)lVar1 >> 0x20);" (assignment_expression "uVar15 = (uint)((ulonglong)lVar1 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)lVar1 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)lVar1 >> 0x20)" ( (binary_expression "(ulonglong)lVar1 >> 0x20" (cast_expression "(ulonglong)lVar1" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (if_statement "if ((int)lVar1 != -1) {\n        pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n        break;\n      }" if (parenthesized_expression "((int)lVar1 != -1)" ( (binary_expression "(int)lVar1 != -1" (cast_expression "(int)lVar1" ( (type_descriptor "int" primitive_type) ) identifier) != number_literal) )) (compound_statement "{\n        pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n        break;\n      }" { (expression_statement "pcVar23 = *(code **)(puVar22 + 0x7a4a4);" (assignment_expression "pcVar23 = *(code **)(puVar22 + 0x7a4a4)" identifier = (pointer_expression "*(code **)(puVar22 + 0x7a4a4)" * (cast_expression "(code **)(puVar22 + 0x7a4a4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar22 + 0x7a4a4)" ( (binary_expression "puVar22 + 0x7a4a4" identifier + number_literal) ))))) ;) (break_statement "break;" break ;) })) (expression_statement "lVar1 = CONCAT44(uVar15,(int)uVar2);" (assignment_expression "lVar1 = CONCAT44(uVar15,(int)uVar2)" identifier = (call_expression "CONCAT44(uVar15,(int)uVar2)" identifier (argument_list "(uVar15,(int)uVar2)" ( identifier , (cast_expression "(int)uVar2" ( (type_descriptor "int" primitive_type) ) identifier) )))) ;) })) (expression_statement "uVar6 = (*pcVar23)(puVar20,iVar5,iVar16);" (assignment_expression "uVar6 = (*pcVar23)(puVar20,iVar5,iVar16)" identifier = (call_expression "(*pcVar23)(puVar20,iVar5,iVar16)" (parenthesized_expression "(*pcVar23)" ( (pointer_expression "*pcVar23" * identifier) )) (argument_list "(puVar20,iVar5,iVar16)" ( identifier , identifier , identifier )))) ;) (expression_statement "uVar17 = *puVar20;" (assignment_expression "uVar17 = *puVar20" identifier = (pointer_expression "*puVar20" * identifier)) ;) (expression_statement "*puVar20 = uVar15 + uVar17;" (assignment_expression "*puVar20 = uVar15 + uVar17" (pointer_expression "*puVar20" * identifier) = (binary_expression "uVar15 + uVar17" identifier + identifier)) ;) (if_statement "if (uVar15 + uVar17 < uVar15) {\n      if (iVar16 < 2) {\nLAB_0001cd34:\n        uVar15 = (uint)(uVar6 + 1 != 0);\n        iVar13 = iVar16 + uVar15;\n        puVar20[iVar16] = uVar6 + 1;\n        piVar8[2] = puVar14[2] + uVar15;\n        goto joined_r0x0001cddc;\n      }\n      uVar15 = puVar20[1];\n      puVar20[1] = uVar15 + 1;\n      if (uVar15 + 1 == 0) {\n        iVar13 = 2;\n        puVar11 = puVar20 + 2;\n        do {\n          if (iVar13 == iVar16) goto LAB_0001cd34;\n          uVar15 = *puVar11;\n          iVar13 = iVar13 + 1;\n          *puVar11 = uVar15 + 1;\n          puVar11 = puVar11 + 1;\n        } while (uVar15 + 1 == 0);\n      }\n    }" if (parenthesized_expression "(uVar15 + uVar17 < uVar15)" ( (binary_expression "uVar15 + uVar17 < uVar15" (binary_expression "uVar15 + uVar17" identifier + identifier) < identifier) )) (compound_statement "{\n      if (iVar16 < 2) {\nLAB_0001cd34:\n        uVar15 = (uint)(uVar6 + 1 != 0);\n        iVar13 = iVar16 + uVar15;\n        puVar20[iVar16] = uVar6 + 1;\n        piVar8[2] = puVar14[2] + uVar15;\n        goto joined_r0x0001cddc;\n      }\n      uVar15 = puVar20[1];\n      puVar20[1] = uVar15 + 1;\n      if (uVar15 + 1 == 0) {\n        iVar13 = 2;\n        puVar11 = puVar20 + 2;\n        do {\n          if (iVar13 == iVar16) goto LAB_0001cd34;\n          uVar15 = *puVar11;\n          iVar13 = iVar13 + 1;\n          *puVar11 = uVar15 + 1;\n          puVar11 = puVar11 + 1;\n        } while (uVar15 + 1 == 0);\n      }\n    }" { (if_statement "if (iVar16 < 2) {\nLAB_0001cd34:\n        uVar15 = (uint)(uVar6 + 1 != 0);\n        iVar13 = iVar16 + uVar15;\n        puVar20[iVar16] = uVar6 + 1;\n        piVar8[2] = puVar14[2] + uVar15;\n        goto joined_r0x0001cddc;\n      }" if (parenthesized_expression "(iVar16 < 2)" ( (binary_expression "iVar16 < 2" identifier < number_literal) )) (compound_statement "{\nLAB_0001cd34:\n        uVar15 = (uint)(uVar6 + 1 != 0);\n        iVar13 = iVar16 + uVar15;\n        puVar20[iVar16] = uVar6 + 1;\n        piVar8[2] = puVar14[2] + uVar15;\n        goto joined_r0x0001cddc;\n      }" { (labeled_statement "LAB_0001cd34:\n        uVar15 = (uint)(uVar6 + 1 != 0);" statement_identifier : (expression_statement "uVar15 = (uint)(uVar6 + 1 != 0);" (assignment_expression "uVar15 = (uint)(uVar6 + 1 != 0)" identifier = (call_expression "(uint)(uVar6 + 1 != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar6 + 1 != 0)" ( (binary_expression "uVar6 + 1 != 0" (binary_expression "uVar6 + 1" identifier + number_literal) != number_literal) )))) ;)) (expression_statement "iVar13 = iVar16 + uVar15;" (assignment_expression "iVar13 = iVar16 + uVar15" identifier = (binary_expression "iVar16 + uVar15" identifier + identifier)) ;) (expression_statement "puVar20[iVar16] = uVar6 + 1;" (assignment_expression "puVar20[iVar16] = uVar6 + 1" (subscript_expression "puVar20[iVar16]" identifier [ identifier ]) = (binary_expression "uVar6 + 1" identifier + number_literal)) ;) (expression_statement "piVar8[2] = puVar14[2] + uVar15;" (assignment_expression "piVar8[2] = puVar14[2] + uVar15" (subscript_expression "piVar8[2]" identifier [ number_literal ]) = (binary_expression "puVar14[2] + uVar15" (subscript_expression "puVar14[2]" identifier [ number_literal ]) + identifier)) ;) (goto_statement "goto joined_r0x0001cddc;" goto statement_identifier ;) })) (expression_statement "uVar15 = puVar20[1];" (assignment_expression "uVar15 = puVar20[1]" identifier = (subscript_expression "puVar20[1]" identifier [ number_literal ])) ;) (expression_statement "puVar20[1] = uVar15 + 1;" (assignment_expression "puVar20[1] = uVar15 + 1" (subscript_expression "puVar20[1]" identifier [ number_literal ]) = (binary_expression "uVar15 + 1" identifier + number_literal)) ;) (if_statement "if (uVar15 + 1 == 0) {\n        iVar13 = 2;\n        puVar11 = puVar20 + 2;\n        do {\n          if (iVar13 == iVar16) goto LAB_0001cd34;\n          uVar15 = *puVar11;\n          iVar13 = iVar13 + 1;\n          *puVar11 = uVar15 + 1;\n          puVar11 = puVar11 + 1;\n        } while (uVar15 + 1 == 0);\n      }" if (parenthesized_expression "(uVar15 + 1 == 0)" ( (binary_expression "uVar15 + 1 == 0" (binary_expression "uVar15 + 1" identifier + number_literal) == number_literal) )) (compound_statement "{\n        iVar13 = 2;\n        puVar11 = puVar20 + 2;\n        do {\n          if (iVar13 == iVar16) goto LAB_0001cd34;\n          uVar15 = *puVar11;\n          iVar13 = iVar13 + 1;\n          *puVar11 = uVar15 + 1;\n          puVar11 = puVar11 + 1;\n        } while (uVar15 + 1 == 0);\n      }" { (expression_statement "iVar13 = 2;" (assignment_expression "iVar13 = 2" identifier = number_literal) ;) (expression_statement "puVar11 = puVar20 + 2;" (assignment_expression "puVar11 = puVar20 + 2" identifier = (binary_expression "puVar20 + 2" identifier + number_literal)) ;) (do_statement "do {\n          if (iVar13 == iVar16) goto LAB_0001cd34;\n          uVar15 = *puVar11;\n          iVar13 = iVar13 + 1;\n          *puVar11 = uVar15 + 1;\n          puVar11 = puVar11 + 1;\n        } while (uVar15 + 1 == 0);" do (compound_statement "{\n          if (iVar13 == iVar16) goto LAB_0001cd34;\n          uVar15 = *puVar11;\n          iVar13 = iVar13 + 1;\n          *puVar11 = uVar15 + 1;\n          puVar11 = puVar11 + 1;\n        }" { (if_statement "if (iVar13 == iVar16) goto LAB_0001cd34;" if (parenthesized_expression "(iVar13 == iVar16)" ( (binary_expression "iVar13 == iVar16" identifier == identifier) )) (goto_statement "goto LAB_0001cd34;" goto statement_identifier ;)) (expression_statement "uVar15 = *puVar11;" (assignment_expression "uVar15 = *puVar11" identifier = (pointer_expression "*puVar11" * identifier)) ;) (expression_statement "iVar13 = iVar13 + 1;" (assignment_expression "iVar13 = iVar13 + 1" identifier = (binary_expression "iVar13 + 1" identifier + number_literal)) ;) (expression_statement "*puVar11 = uVar15 + 1;" (assignment_expression "*puVar11 = uVar15 + 1" (pointer_expression "*puVar11" * identifier) = (binary_expression "uVar15 + 1" identifier + number_literal)) ;) (expression_statement "puVar11 = puVar11 + 1;" (assignment_expression "puVar11 = puVar11 + 1" identifier = (binary_expression "puVar11 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar15 + 1 == 0)" ( (binary_expression "uVar15 + 1 == 0" (binary_expression "uVar15 + 1" identifier + number_literal) == number_literal) )) ;) })) })) }) (else_clause "else {\n    iVar16 = *piVar8;\n    iVar7 = puVar14[3];\n    iVar5 = iVar18 - iVar16;\n    puVar20 = (uint *)piVar8[3];\n    iVar13 = iVar18;\n    if (0 < iVar5) goto LAB_0001cc68;\nLAB_0001cda8:\n    iVar16 = iVar13;\n    uVar6 = (**(code **)(puVar22 + 0x7a4a4))(puVar20,iVar7,iVar16);\n  }" else (compound_statement "{\n    iVar16 = *piVar8;\n    iVar7 = puVar14[3];\n    iVar5 = iVar18 - iVar16;\n    puVar20 = (uint *)piVar8[3];\n    iVar13 = iVar18;\n    if (0 < iVar5) goto LAB_0001cc68;\nLAB_0001cda8:\n    iVar16 = iVar13;\n    uVar6 = (**(code **)(puVar22 + 0x7a4a4))(puVar20,iVar7,iVar16);\n  }" { (expression_statement "iVar16 = *piVar8;" (assignment_expression "iVar16 = *piVar8" identifier = (pointer_expression "*piVar8" * identifier)) ;) (expression_statement "iVar7 = puVar14[3];" (assignment_expression "iVar7 = puVar14[3]" identifier = (subscript_expression "puVar14[3]" identifier [ number_literal ])) ;) (expression_statement "iVar5 = iVar18 - iVar16;" (assignment_expression "iVar5 = iVar18 - iVar16" identifier = (binary_expression "iVar18 - iVar16" identifier - identifier)) ;) (expression_statement "puVar20 = (uint *)piVar8[3];" (assignment_expression "puVar20 = (uint *)piVar8[3]" identifier = (cast_expression "(uint *)piVar8[3]" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar8[3]" identifier [ number_literal ]))) ;) (expression_statement "iVar13 = iVar18;" (assignment_expression "iVar13 = iVar18" identifier = identifier) ;) (if_statement "if (0 < iVar5) goto LAB_0001cc68;" if (parenthesized_expression "(0 < iVar5)" ( (binary_expression "0 < iVar5" number_literal < identifier) )) (goto_statement "goto LAB_0001cc68;" goto statement_identifier ;)) (labeled_statement "LAB_0001cda8:\n    iVar16 = iVar13;" statement_identifier : (expression_statement "iVar16 = iVar13;" (assignment_expression "iVar16 = iVar13" identifier = identifier) ;)) (expression_statement "uVar6 = (**(code **)(puVar22 + 0x7a4a4))(puVar20,iVar7,iVar16);" (assignment_expression "uVar6 = (**(code **)(puVar22 + 0x7a4a4))(puVar20,iVar7,iVar16)" identifier = (call_expression "(**(code **)(puVar22 + 0x7a4a4))(puVar20,iVar7,iVar16)" (parenthesized_expression "(**(code **)(puVar22 + 0x7a4a4))" ( (pointer_expression "**(code **)(puVar22 + 0x7a4a4)" * (pointer_expression "*(code **)(puVar22 + 0x7a4a4)" * (cast_expression "(code **)(puVar22 + 0x7a4a4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar22 + 0x7a4a4)" ( (binary_expression "puVar22 + 0x7a4a4" identifier + number_literal) ))))) )) (argument_list "(puVar20,iVar7,iVar16)" ( identifier , identifier , identifier )))) ;) }))) (expression_statement "iVar13 = iVar16 + (uint)(uVar6 != 0);" (assignment_expression "iVar13 = iVar16 + (uint)(uVar6 != 0)" identifier = (binary_expression "iVar16 + (uint)(uVar6 != 0)" identifier + (call_expression "(uint)(uVar6 != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar6 != 0)" ( (binary_expression "uVar6 != 0" identifier != number_literal) ))))) ;) (expression_statement "puVar20[iVar16] = uVar6;" (assignment_expression "puVar20[iVar16] = uVar6" (subscript_expression "puVar20[iVar16]" identifier [ identifier ]) = identifier) ;) (expression_statement "piVar8[2] = puVar14[2] + (uint)(uVar6 != 0);" (assignment_expression "piVar8[2] = puVar14[2] + (uint)(uVar6 != 0)" (subscript_expression "piVar8[2]" identifier [ number_literal ]) = (binary_expression "puVar14[2] + (uint)(uVar6 != 0)" (subscript_expression "puVar14[2]" identifier [ number_literal ]) + (call_expression "(uint)(uVar6 != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar6 != 0)" ( (binary_expression "uVar6 != 0" identifier != number_literal) ))))) ;) (labeled_statement "joined_r0x0001cddc:\n  if (iVar18 < 0) {\n    iVar13 = -iVar13;\n  }" statement_identifier : (if_statement "if (iVar18 < 0) {\n    iVar13 = -iVar13;\n  }" if (parenthesized_expression "(iVar18 < 0)" ( (binary_expression "iVar18 < 0" identifier < number_literal) )) (compound_statement "{\n    iVar13 = -iVar13;\n  }" { (expression_statement "iVar13 = -iVar13;" (assignment_expression "iVar13 = -iVar13" identifier = (unary_expression "-iVar13" - identifier)) ;) }))) (expression_statement "piVar8[1] = iVar13;" (assignment_expression "piVar8[1] = iVar13" (subscript_expression "piVar8[1]" identifier [ number_literal ]) = identifier) ;) (return_statement "return;" return ;) })))
(translation_unit "void __gmpf_mul(mpf_ptr r,mpf_srcptr u,mpf_srcptr v)\n\n{\n  longlong lVar1;\n  mp_limb_t *pmVar2;\n  int iVar3;\n  uint uVar4;\n  mp_limb_t *pmVar5;\n  tmp_reentrant_t *ptVar6;\n  int iVar7;\n  mp_limb_t *pmVar8;\n  uint uVar9;\n  uint *puVar10;\n  mp_limb_t mVar11;\n  tmp_reentrant_t *ptVar12;\n  mpf_srcptr p_Var13;\n  mpf_srcptr p_Var14;\n  uint uVar15;\n  tmp_reentrant_t *ptVar16;\n  size_t sVar17;\n  uint uVar18;\n  tmp_reentrant_t *ptVar19;\n  uint uVar20;\n  uint *puVar21;\n  uint uVar22;\n  undefined *puVar23;\n  code *pcVar24;\n  undefined1 *puVar25;\n  undefined4 uVar26;\n  undefined1 auStack_60 [24];\n  tmp_reentrant_t *__tmp_marker;\n  int iStack_2c;\n  \n  puVar23 = PTR___stack_chk_guard_00097540;\n  puVar25 = auStack_60;\n  uVar18 = u->_mp_size;\n  iStack_2c = *(int *)PTR___stack_chk_guard_00097540;\n  uVar15 = r->_mp_prec;\n  uVar20 = v->_mp_size;\n  uVar4 = -uVar18;\n  if (-1 < (int)uVar18) {\n    uVar4 = uVar18;\n  }\n  uVar9 = uVar20;\n  if ((int)uVar20 < 0) {\n    uVar9 = -uVar20;\n  }\n  p_Var14 = (mpf_srcptr)u->_mp_d;\n  p_Var13 = (mpf_srcptr)v->_mp_d;\n  uVar22 = uVar4;\n  if ((tmp_reentrant_t *)(uint)((int)uVar15 < (int)uVar4) != (tmp_reentrant_t *)0x0) {\n    p_Var14 = (mpf_srcptr)((int)p_Var14 + (uVar4 - uVar15) * 4);\n    uVar22 = uVar15;\n  }\n  if ((int)uVar15 < (int)uVar9) {\n    p_Var13 = (mpf_srcptr)((int)p_Var13 + (uVar9 - uVar15) * 4);\n    uVar9 = uVar15;\n  }\n  if ((uVar22 == 0) || (uVar9 == 0)) {\n    r->_mp_size = 0;\n    r->_mp_exp = 0;\n    ptVar6 = (tmp_reentrant_t *)(uint)((int)uVar15 < (int)uVar4);\n    p_Var14 = u;\n    puVar25 = auStack_60;\n  }\n  else {\n    uVar4 = (uVar22 + uVar9) * 4;\n    __tmp_marker = (tmp_reentrant_t *)0x0;\n    if (uVar4 < 0x7f01) {\n      iVar3 = -(uVar4 + 7 & 0xfffffff8);\n      puVar25 = auStack_60 + iVar3;\n      pmVar5 = (mp_limb_t *)(&stack0xffffffb8 + iVar3);\n    }\n    else {\n      pmVar5 = (mp_limb_t *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&__tmp_marker);\n    }\n    if ((int)uVar22 < (int)uVar9) {\n      *(uint *)(puVar25 + 0x10) = uVar22;\n      iVar3 = (*(code *)PTR___gmpn_mul_000972b4)(pmVar5,p_Var13,uVar9,p_Var14);\n      p_Var14 = p_Var13;\n    }\n    else {\n      *(uint *)(puVar25 + 0x10) = uVar9;\n      iVar3 = (*(code *)PTR___gmpn_mul_000972b4)(pmVar5,p_Var14,uVar22,p_Var13);\n    }\n    uVar9 = (uVar22 + uVar9) - (uint)(iVar3 == 0);\n    uVar15 = uVar15 + 1;\n    if ((int)uVar15 < (int)uVar9) {\n      pmVar5 = pmVar5 + (uVar9 - uVar15);\n      uVar9 = uVar15;\n    }\n    iVar7 = uVar9 - 1;\n    if (uVar9 != 0) {\n      pmVar2 = r->_mp_d;\n      mVar11 = *pmVar5;\n      pmVar8 = pmVar2;\n      if (iVar7 != 0) {\n        do {\n          pmVar5 = pmVar5 + 1;\n          p_Var14 = (mpf_srcptr)(pmVar8 + 1);\n          *pmVar8 = mVar11;\n          iVar7 = iVar7 + -1;\n          mVar11 = *pmVar5;\n          pmVar8 = (mp_limb_t *)p_Var14;\n        } while (iVar7 != 0);\n        pmVar2 = pmVar2 + (uVar9 - 1);\n      }\n      *pmVar2 = mVar11;\n    }\n    uVar18 = uVar18 ^ uVar20;\n    r->_mp_exp = (u->_mp_exp + v->_mp_exp) - (uint)(iVar3 == 0);\n    if ((int)uVar18 < 0) {\n      uVar9 = -uVar9;\n    }\n    r->_mp_size = uVar9;\n    ptVar6 = __tmp_marker;\n    if (__tmp_marker != (tmp_reentrant_t *)0x0) {\n      (*(code *)PTR___gmp_tmp_reentrant_free_00097614)();\n    }\n  }\n  if (iStack_2c == *(int *)puVar23) {\n    return;\n  }\n  uVar26 = 0x1cbf4;\n  puVar23 = PTR___stack_chk_fail_000974d0;\n  (*(code *)PTR___stack_chk_fail_000974d0)();\n  *(undefined **)(puVar25 + -0x28) = puVar23 + 0x82440;\n  *(mpf_ptr *)(puVar25 + -0x14) = r;\n  *(undefined4 *)(puVar25 + -4) = uVar26;\n  *(mpf_srcptr *)(puVar25 + -8) = u;\n  *(mpf_srcptr *)(puVar25 + -0xc) = v;\n  *(uint *)(puVar25 + -0x10) = uVar20;\n  *(uint *)(puVar25 + -0x18) = uVar18;\n  *(uint *)(puVar25 + -0x1c) = uVar15;\n  ptVar19 = (tmp_reentrant_t *)p_Var14->_mp_size;\n  if ((uVar9 == 0) || (ptVar19 == (tmp_reentrant_t *)0x0)) {\n    ptVar6->size = 0;\n    ptVar6[1].next = (tmp_reentrant_t *)0x0;\n    return;\n  }\n  if ((int)ptVar19 < 0) {\n    ptVar16 = ptVar6->next;\n    pmVar5 = p_Var14->_mp_d;\n    puVar21 = (uint *)ptVar6[1].size;\n    iVar3 = -(int)ptVar19 - (int)ptVar16;\n    ptVar12 = (tmp_reentrant_t *)-(int)ptVar19;\n    if (iVar3 < 1) goto LAB_0001cda8;\nLAB_0001cc68:\n    iVar7 = iVar3 + -1;\n    lVar1 = (ulonglong)uVar9 * (ulonglong)pmVar5[iVar7];\n    pmVar8 = pmVar5 + iVar3;\n    while( true ) {\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      iVar7 = iVar7 + -1;\n      pcVar24 = *(code **)(puVar23 + 0x7a4a4);\n      if (iVar7 == -1) break;\n      puVar10 = pmVar8 + -2;\n      pmVar8 = pmVar8 + -1;\n      lVar1 = lVar1 + ((ulonglong)uVar9 * (ulonglong)*puVar10 >> 0x20);\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      if ((int)lVar1 != -1) {\n        pcVar24 = *(code **)(puVar23 + 0x7a4a4);\n        break;\n      }\n      lVar1 = CONCAT44(uVar15,(int)((ulonglong)uVar9 * (ulonglong)*puVar10));\n    }\n    uVar4 = (*pcVar24)(puVar21,pmVar5 + iVar3,ptVar16);\n    uVar18 = *puVar21;\n    *puVar21 = uVar15 + uVar18;\n    if (uVar15 + uVar18 < uVar15) {\n      if ((int)ptVar16 < 2) {\nLAB_0001cd34:\n        uVar15 = (uint)(uVar4 + 1 != 0);\n        sVar17 = (int)&ptVar16->next + uVar15;\n        puVar21[(int)ptVar16] = uVar4 + 1;\n        ptVar6[1].next = (tmp_reentrant_t *)(p_Var14->_mp_exp + uVar15);\n        goto joined_r0x0001cddc;\n      }\n      uVar15 = puVar21[1];\n      puVar21[1] = uVar15 + 1;\n      if (uVar15 + 1 == 0) {\n        ptVar12 = (tmp_reentrant_t *)0x2;\n        puVar10 = puVar21 + 2;\n        do {\n          if (ptVar12 == ptVar16) goto LAB_0001cd34;\n          uVar15 = *puVar10;\n          ptVar12 = (tmp_reentrant_t *)((int)&ptVar12->next + 1);\n          *puVar10 = uVar15 + 1;\n          puVar10 = puVar10 + 1;\n        } while (uVar15 + 1 == 0);\n      }\n    }\n  }\n  else {\n    ptVar16 = ptVar6->next;\n    pmVar5 = p_Var14->_mp_d;\n    iVar3 = (int)ptVar19 - (int)ptVar16;\n    puVar21 = (uint *)ptVar6[1].size;\n    ptVar12 = ptVar19;\n    if (0 < iVar3) goto LAB_0001cc68;\nLAB_0001cda8:\n    ptVar16 = ptVar12;\n    uVar4 = (**(code **)(puVar23 + 0x7a4a4))(puVar21,pmVar5,ptVar16);\n  }\n  sVar17 = (int)&ptVar16->next + (uint)(uVar4 != 0);\n  puVar21[(int)ptVar16] = uVar4;\n  ptVar6[1].next = (tmp_reentrant_t *)(p_Var14->_mp_exp + (uint)(uVar4 != 0));\njoined_r0x0001cddc:\n  if ((int)ptVar19 < 0) {\n    sVar17 = -sVar17;\n  }\n  ptVar6->size = sVar17;\n  return;\n}\n\n" (function_definition "void __gmpf_mul(mpf_ptr r,mpf_srcptr u,mpf_srcptr v)\n\n{\n  longlong lVar1;\n  mp_limb_t *pmVar2;\n  int iVar3;\n  uint uVar4;\n  mp_limb_t *pmVar5;\n  tmp_reentrant_t *ptVar6;\n  int iVar7;\n  mp_limb_t *pmVar8;\n  uint uVar9;\n  uint *puVar10;\n  mp_limb_t mVar11;\n  tmp_reentrant_t *ptVar12;\n  mpf_srcptr p_Var13;\n  mpf_srcptr p_Var14;\n  uint uVar15;\n  tmp_reentrant_t *ptVar16;\n  size_t sVar17;\n  uint uVar18;\n  tmp_reentrant_t *ptVar19;\n  uint uVar20;\n  uint *puVar21;\n  uint uVar22;\n  undefined *puVar23;\n  code *pcVar24;\n  undefined1 *puVar25;\n  undefined4 uVar26;\n  undefined1 auStack_60 [24];\n  tmp_reentrant_t *__tmp_marker;\n  int iStack_2c;\n  \n  puVar23 = PTR___stack_chk_guard_00097540;\n  puVar25 = auStack_60;\n  uVar18 = u->_mp_size;\n  iStack_2c = *(int *)PTR___stack_chk_guard_00097540;\n  uVar15 = r->_mp_prec;\n  uVar20 = v->_mp_size;\n  uVar4 = -uVar18;\n  if (-1 < (int)uVar18) {\n    uVar4 = uVar18;\n  }\n  uVar9 = uVar20;\n  if ((int)uVar20 < 0) {\n    uVar9 = -uVar20;\n  }\n  p_Var14 = (mpf_srcptr)u->_mp_d;\n  p_Var13 = (mpf_srcptr)v->_mp_d;\n  uVar22 = uVar4;\n  if ((tmp_reentrant_t *)(uint)((int)uVar15 < (int)uVar4) != (tmp_reentrant_t *)0x0) {\n    p_Var14 = (mpf_srcptr)((int)p_Var14 + (uVar4 - uVar15) * 4);\n    uVar22 = uVar15;\n  }\n  if ((int)uVar15 < (int)uVar9) {\n    p_Var13 = (mpf_srcptr)((int)p_Var13 + (uVar9 - uVar15) * 4);\n    uVar9 = uVar15;\n  }\n  if ((uVar22 == 0) || (uVar9 == 0)) {\n    r->_mp_size = 0;\n    r->_mp_exp = 0;\n    ptVar6 = (tmp_reentrant_t *)(uint)((int)uVar15 < (int)uVar4);\n    p_Var14 = u;\n    puVar25 = auStack_60;\n  }\n  else {\n    uVar4 = (uVar22 + uVar9) * 4;\n    __tmp_marker = (tmp_reentrant_t *)0x0;\n    if (uVar4 < 0x7f01) {\n      iVar3 = -(uVar4 + 7 & 0xfffffff8);\n      puVar25 = auStack_60 + iVar3;\n      pmVar5 = (mp_limb_t *)(&stack0xffffffb8 + iVar3);\n    }\n    else {\n      pmVar5 = (mp_limb_t *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&__tmp_marker);\n    }\n    if ((int)uVar22 < (int)uVar9) {\n      *(uint *)(puVar25 + 0x10) = uVar22;\n      iVar3 = (*(code *)PTR___gmpn_mul_000972b4)(pmVar5,p_Var13,uVar9,p_Var14);\n      p_Var14 = p_Var13;\n    }\n    else {\n      *(uint *)(puVar25 + 0x10) = uVar9;\n      iVar3 = (*(code *)PTR___gmpn_mul_000972b4)(pmVar5,p_Var14,uVar22,p_Var13);\n    }\n    uVar9 = (uVar22 + uVar9) - (uint)(iVar3 == 0);\n    uVar15 = uVar15 + 1;\n    if ((int)uVar15 < (int)uVar9) {\n      pmVar5 = pmVar5 + (uVar9 - uVar15);\n      uVar9 = uVar15;\n    }\n    iVar7 = uVar9 - 1;\n    if (uVar9 != 0) {\n      pmVar2 = r->_mp_d;\n      mVar11 = *pmVar5;\n      pmVar8 = pmVar2;\n      if (iVar7 != 0) {\n        do {\n          pmVar5 = pmVar5 + 1;\n          p_Var14 = (mpf_srcptr)(pmVar8 + 1);\n          *pmVar8 = mVar11;\n          iVar7 = iVar7 + -1;\n          mVar11 = *pmVar5;\n          pmVar8 = (mp_limb_t *)p_Var14;\n        } while (iVar7 != 0);\n        pmVar2 = pmVar2 + (uVar9 - 1);\n      }\n      *pmVar2 = mVar11;\n    }\n    uVar18 = uVar18 ^ uVar20;\n    r->_mp_exp = (u->_mp_exp + v->_mp_exp) - (uint)(iVar3 == 0);\n    if ((int)uVar18 < 0) {\n      uVar9 = -uVar9;\n    }\n    r->_mp_size = uVar9;\n    ptVar6 = __tmp_marker;\n    if (__tmp_marker != (tmp_reentrant_t *)0x0) {\n      (*(code *)PTR___gmp_tmp_reentrant_free_00097614)();\n    }\n  }\n  if (iStack_2c == *(int *)puVar23) {\n    return;\n  }\n  uVar26 = 0x1cbf4;\n  puVar23 = PTR___stack_chk_fail_000974d0;\n  (*(code *)PTR___stack_chk_fail_000974d0)();\n  *(undefined **)(puVar25 + -0x28) = puVar23 + 0x82440;\n  *(mpf_ptr *)(puVar25 + -0x14) = r;\n  *(undefined4 *)(puVar25 + -4) = uVar26;\n  *(mpf_srcptr *)(puVar25 + -8) = u;\n  *(mpf_srcptr *)(puVar25 + -0xc) = v;\n  *(uint *)(puVar25 + -0x10) = uVar20;\n  *(uint *)(puVar25 + -0x18) = uVar18;\n  *(uint *)(puVar25 + -0x1c) = uVar15;\n  ptVar19 = (tmp_reentrant_t *)p_Var14->_mp_size;\n  if ((uVar9 == 0) || (ptVar19 == (tmp_reentrant_t *)0x0)) {\n    ptVar6->size = 0;\n    ptVar6[1].next = (tmp_reentrant_t *)0x0;\n    return;\n  }\n  if ((int)ptVar19 < 0) {\n    ptVar16 = ptVar6->next;\n    pmVar5 = p_Var14->_mp_d;\n    puVar21 = (uint *)ptVar6[1].size;\n    iVar3 = -(int)ptVar19 - (int)ptVar16;\n    ptVar12 = (tmp_reentrant_t *)-(int)ptVar19;\n    if (iVar3 < 1) goto LAB_0001cda8;\nLAB_0001cc68:\n    iVar7 = iVar3 + -1;\n    lVar1 = (ulonglong)uVar9 * (ulonglong)pmVar5[iVar7];\n    pmVar8 = pmVar5 + iVar3;\n    while( true ) {\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      iVar7 = iVar7 + -1;\n      pcVar24 = *(code **)(puVar23 + 0x7a4a4);\n      if (iVar7 == -1) break;\n      puVar10 = pmVar8 + -2;\n      pmVar8 = pmVar8 + -1;\n      lVar1 = lVar1 + ((ulonglong)uVar9 * (ulonglong)*puVar10 >> 0x20);\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      if ((int)lVar1 != -1) {\n        pcVar24 = *(code **)(puVar23 + 0x7a4a4);\n        break;\n      }\n      lVar1 = CONCAT44(uVar15,(int)((ulonglong)uVar9 * (ulonglong)*puVar10));\n    }\n    uVar4 = (*pcVar24)(puVar21,pmVar5 + iVar3,ptVar16);\n    uVar18 = *puVar21;\n    *puVar21 = uVar15 + uVar18;\n    if (uVar15 + uVar18 < uVar15) {\n      if ((int)ptVar16 < 2) {\nLAB_0001cd34:\n        uVar15 = (uint)(uVar4 + 1 != 0);\n        sVar17 = (int)&ptVar16->next + uVar15;\n        puVar21[(int)ptVar16] = uVar4 + 1;\n        ptVar6[1].next = (tmp_reentrant_t *)(p_Var14->_mp_exp + uVar15);\n        goto joined_r0x0001cddc;\n      }\n      uVar15 = puVar21[1];\n      puVar21[1] = uVar15 + 1;\n      if (uVar15 + 1 == 0) {\n        ptVar12 = (tmp_reentrant_t *)0x2;\n        puVar10 = puVar21 + 2;\n        do {\n          if (ptVar12 == ptVar16) goto LAB_0001cd34;\n          uVar15 = *puVar10;\n          ptVar12 = (tmp_reentrant_t *)((int)&ptVar12->next + 1);\n          *puVar10 = uVar15 + 1;\n          puVar10 = puVar10 + 1;\n        } while (uVar15 + 1 == 0);\n      }\n    }\n  }\n  else {\n    ptVar16 = ptVar6->next;\n    pmVar5 = p_Var14->_mp_d;\n    iVar3 = (int)ptVar19 - (int)ptVar16;\n    puVar21 = (uint *)ptVar6[1].size;\n    ptVar12 = ptVar19;\n    if (0 < iVar3) goto LAB_0001cc68;\nLAB_0001cda8:\n    ptVar16 = ptVar12;\n    uVar4 = (**(code **)(puVar23 + 0x7a4a4))(puVar21,pmVar5,ptVar16);\n  }\n  sVar17 = (int)&ptVar16->next + (uint)(uVar4 != 0);\n  puVar21[(int)ptVar16] = uVar4;\n  ptVar6[1].next = (tmp_reentrant_t *)(p_Var14->_mp_exp + (uint)(uVar4 != 0));\njoined_r0x0001cddc:\n  if ((int)ptVar19 < 0) {\n    sVar17 = -sVar17;\n  }\n  ptVar6->size = sVar17;\n  return;\n}" primitive_type (function_declarator "__gmpf_mul(mpf_ptr r,mpf_srcptr u,mpf_srcptr v)" identifier (parameter_list "(mpf_ptr r,mpf_srcptr u,mpf_srcptr v)" ( (parameter_declaration "mpf_ptr r" type_identifier identifier) , (parameter_declaration "mpf_srcptr u" type_identifier identifier) , (parameter_declaration "mpf_srcptr v" type_identifier identifier) ))) (compound_statement "{\n  longlong lVar1;\n  mp_limb_t *pmVar2;\n  int iVar3;\n  uint uVar4;\n  mp_limb_t *pmVar5;\n  tmp_reentrant_t *ptVar6;\n  int iVar7;\n  mp_limb_t *pmVar8;\n  uint uVar9;\n  uint *puVar10;\n  mp_limb_t mVar11;\n  tmp_reentrant_t *ptVar12;\n  mpf_srcptr p_Var13;\n  mpf_srcptr p_Var14;\n  uint uVar15;\n  tmp_reentrant_t *ptVar16;\n  size_t sVar17;\n  uint uVar18;\n  tmp_reentrant_t *ptVar19;\n  uint uVar20;\n  uint *puVar21;\n  uint uVar22;\n  undefined *puVar23;\n  code *pcVar24;\n  undefined1 *puVar25;\n  undefined4 uVar26;\n  undefined1 auStack_60 [24];\n  tmp_reentrant_t *__tmp_marker;\n  int iStack_2c;\n  \n  puVar23 = PTR___stack_chk_guard_00097540;\n  puVar25 = auStack_60;\n  uVar18 = u->_mp_size;\n  iStack_2c = *(int *)PTR___stack_chk_guard_00097540;\n  uVar15 = r->_mp_prec;\n  uVar20 = v->_mp_size;\n  uVar4 = -uVar18;\n  if (-1 < (int)uVar18) {\n    uVar4 = uVar18;\n  }\n  uVar9 = uVar20;\n  if ((int)uVar20 < 0) {\n    uVar9 = -uVar20;\n  }\n  p_Var14 = (mpf_srcptr)u->_mp_d;\n  p_Var13 = (mpf_srcptr)v->_mp_d;\n  uVar22 = uVar4;\n  if ((tmp_reentrant_t *)(uint)((int)uVar15 < (int)uVar4) != (tmp_reentrant_t *)0x0) {\n    p_Var14 = (mpf_srcptr)((int)p_Var14 + (uVar4 - uVar15) * 4);\n    uVar22 = uVar15;\n  }\n  if ((int)uVar15 < (int)uVar9) {\n    p_Var13 = (mpf_srcptr)((int)p_Var13 + (uVar9 - uVar15) * 4);\n    uVar9 = uVar15;\n  }\n  if ((uVar22 == 0) || (uVar9 == 0)) {\n    r->_mp_size = 0;\n    r->_mp_exp = 0;\n    ptVar6 = (tmp_reentrant_t *)(uint)((int)uVar15 < (int)uVar4);\n    p_Var14 = u;\n    puVar25 = auStack_60;\n  }\n  else {\n    uVar4 = (uVar22 + uVar9) * 4;\n    __tmp_marker = (tmp_reentrant_t *)0x0;\n    if (uVar4 < 0x7f01) {\n      iVar3 = -(uVar4 + 7 & 0xfffffff8);\n      puVar25 = auStack_60 + iVar3;\n      pmVar5 = (mp_limb_t *)(&stack0xffffffb8 + iVar3);\n    }\n    else {\n      pmVar5 = (mp_limb_t *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&__tmp_marker);\n    }\n    if ((int)uVar22 < (int)uVar9) {\n      *(uint *)(puVar25 + 0x10) = uVar22;\n      iVar3 = (*(code *)PTR___gmpn_mul_000972b4)(pmVar5,p_Var13,uVar9,p_Var14);\n      p_Var14 = p_Var13;\n    }\n    else {\n      *(uint *)(puVar25 + 0x10) = uVar9;\n      iVar3 = (*(code *)PTR___gmpn_mul_000972b4)(pmVar5,p_Var14,uVar22,p_Var13);\n    }\n    uVar9 = (uVar22 + uVar9) - (uint)(iVar3 == 0);\n    uVar15 = uVar15 + 1;\n    if ((int)uVar15 < (int)uVar9) {\n      pmVar5 = pmVar5 + (uVar9 - uVar15);\n      uVar9 = uVar15;\n    }\n    iVar7 = uVar9 - 1;\n    if (uVar9 != 0) {\n      pmVar2 = r->_mp_d;\n      mVar11 = *pmVar5;\n      pmVar8 = pmVar2;\n      if (iVar7 != 0) {\n        do {\n          pmVar5 = pmVar5 + 1;\n          p_Var14 = (mpf_srcptr)(pmVar8 + 1);\n          *pmVar8 = mVar11;\n          iVar7 = iVar7 + -1;\n          mVar11 = *pmVar5;\n          pmVar8 = (mp_limb_t *)p_Var14;\n        } while (iVar7 != 0);\n        pmVar2 = pmVar2 + (uVar9 - 1);\n      }\n      *pmVar2 = mVar11;\n    }\n    uVar18 = uVar18 ^ uVar20;\n    r->_mp_exp = (u->_mp_exp + v->_mp_exp) - (uint)(iVar3 == 0);\n    if ((int)uVar18 < 0) {\n      uVar9 = -uVar9;\n    }\n    r->_mp_size = uVar9;\n    ptVar6 = __tmp_marker;\n    if (__tmp_marker != (tmp_reentrant_t *)0x0) {\n      (*(code *)PTR___gmp_tmp_reentrant_free_00097614)();\n    }\n  }\n  if (iStack_2c == *(int *)puVar23) {\n    return;\n  }\n  uVar26 = 0x1cbf4;\n  puVar23 = PTR___stack_chk_fail_000974d0;\n  (*(code *)PTR___stack_chk_fail_000974d0)();\n  *(undefined **)(puVar25 + -0x28) = puVar23 + 0x82440;\n  *(mpf_ptr *)(puVar25 + -0x14) = r;\n  *(undefined4 *)(puVar25 + -4) = uVar26;\n  *(mpf_srcptr *)(puVar25 + -8) = u;\n  *(mpf_srcptr *)(puVar25 + -0xc) = v;\n  *(uint *)(puVar25 + -0x10) = uVar20;\n  *(uint *)(puVar25 + -0x18) = uVar18;\n  *(uint *)(puVar25 + -0x1c) = uVar15;\n  ptVar19 = (tmp_reentrant_t *)p_Var14->_mp_size;\n  if ((uVar9 == 0) || (ptVar19 == (tmp_reentrant_t *)0x0)) {\n    ptVar6->size = 0;\n    ptVar6[1].next = (tmp_reentrant_t *)0x0;\n    return;\n  }\n  if ((int)ptVar19 < 0) {\n    ptVar16 = ptVar6->next;\n    pmVar5 = p_Var14->_mp_d;\n    puVar21 = (uint *)ptVar6[1].size;\n    iVar3 = -(int)ptVar19 - (int)ptVar16;\n    ptVar12 = (tmp_reentrant_t *)-(int)ptVar19;\n    if (iVar3 < 1) goto LAB_0001cda8;\nLAB_0001cc68:\n    iVar7 = iVar3 + -1;\n    lVar1 = (ulonglong)uVar9 * (ulonglong)pmVar5[iVar7];\n    pmVar8 = pmVar5 + iVar3;\n    while( true ) {\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      iVar7 = iVar7 + -1;\n      pcVar24 = *(code **)(puVar23 + 0x7a4a4);\n      if (iVar7 == -1) break;\n      puVar10 = pmVar8 + -2;\n      pmVar8 = pmVar8 + -1;\n      lVar1 = lVar1 + ((ulonglong)uVar9 * (ulonglong)*puVar10 >> 0x20);\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      if ((int)lVar1 != -1) {\n        pcVar24 = *(code **)(puVar23 + 0x7a4a4);\n        break;\n      }\n      lVar1 = CONCAT44(uVar15,(int)((ulonglong)uVar9 * (ulonglong)*puVar10));\n    }\n    uVar4 = (*pcVar24)(puVar21,pmVar5 + iVar3,ptVar16);\n    uVar18 = *puVar21;\n    *puVar21 = uVar15 + uVar18;\n    if (uVar15 + uVar18 < uVar15) {\n      if ((int)ptVar16 < 2) {\nLAB_0001cd34:\n        uVar15 = (uint)(uVar4 + 1 != 0);\n        sVar17 = (int)&ptVar16->next + uVar15;\n        puVar21[(int)ptVar16] = uVar4 + 1;\n        ptVar6[1].next = (tmp_reentrant_t *)(p_Var14->_mp_exp + uVar15);\n        goto joined_r0x0001cddc;\n      }\n      uVar15 = puVar21[1];\n      puVar21[1] = uVar15 + 1;\n      if (uVar15 + 1 == 0) {\n        ptVar12 = (tmp_reentrant_t *)0x2;\n        puVar10 = puVar21 + 2;\n        do {\n          if (ptVar12 == ptVar16) goto LAB_0001cd34;\n          uVar15 = *puVar10;\n          ptVar12 = (tmp_reentrant_t *)((int)&ptVar12->next + 1);\n          *puVar10 = uVar15 + 1;\n          puVar10 = puVar10 + 1;\n        } while (uVar15 + 1 == 0);\n      }\n    }\n  }\n  else {\n    ptVar16 = ptVar6->next;\n    pmVar5 = p_Var14->_mp_d;\n    iVar3 = (int)ptVar19 - (int)ptVar16;\n    puVar21 = (uint *)ptVar6[1].size;\n    ptVar12 = ptVar19;\n    if (0 < iVar3) goto LAB_0001cc68;\nLAB_0001cda8:\n    ptVar16 = ptVar12;\n    uVar4 = (**(code **)(puVar23 + 0x7a4a4))(puVar21,pmVar5,ptVar16);\n  }\n  sVar17 = (int)&ptVar16->next + (uint)(uVar4 != 0);\n  puVar21[(int)ptVar16] = uVar4;\n  ptVar6[1].next = (tmp_reentrant_t *)(p_Var14->_mp_exp + (uint)(uVar4 != 0));\njoined_r0x0001cddc:\n  if ((int)ptVar19 < 0) {\n    sVar17 = -sVar17;\n  }\n  ptVar6->size = sVar17;\n  return;\n}" { (declaration "longlong lVar1;" type_identifier identifier ;) (declaration "mp_limb_t *pmVar2;" type_identifier (pointer_declarator "*pmVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "mp_limb_t *pmVar5;" type_identifier (pointer_declarator "*pmVar5" * identifier) ;) (declaration "tmp_reentrant_t *ptVar6;" type_identifier (pointer_declarator "*ptVar6" * identifier) ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "mp_limb_t *pmVar8;" type_identifier (pointer_declarator "*pmVar8" * identifier) ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "uint *puVar10;" type_identifier (pointer_declarator "*puVar10" * identifier) ;) (declaration "mp_limb_t mVar11;" type_identifier identifier ;) (declaration "tmp_reentrant_t *ptVar12;" type_identifier (pointer_declarator "*ptVar12" * identifier) ;) (declaration "mpf_srcptr p_Var13;" type_identifier identifier ;) (declaration "mpf_srcptr p_Var14;" type_identifier identifier ;) (declaration "uint uVar15;" type_identifier identifier ;) (declaration "tmp_reentrant_t *ptVar16;" type_identifier (pointer_declarator "*ptVar16" * identifier) ;) (declaration "size_t sVar17;" primitive_type identifier ;) (declaration "uint uVar18;" type_identifier identifier ;) (declaration "tmp_reentrant_t *ptVar19;" type_identifier (pointer_declarator "*ptVar19" * identifier) ;) (declaration "uint uVar20;" type_identifier identifier ;) (declaration "uint *puVar21;" type_identifier (pointer_declarator "*puVar21" * identifier) ;) (declaration "uint uVar22;" type_identifier identifier ;) (declaration "undefined *puVar23;" type_identifier (pointer_declarator "*puVar23" * identifier) ;) (declaration "code *pcVar24;" type_identifier (pointer_declarator "*pcVar24" * identifier) ;) (declaration "undefined1 *puVar25;" type_identifier (pointer_declarator "*puVar25" * identifier) ;) (declaration "undefined4 uVar26;" type_identifier identifier ;) (declaration "undefined1 auStack_60 [24];" type_identifier (array_declarator "auStack_60 [24]" identifier [ number_literal ]) ;) (declaration "tmp_reentrant_t *__tmp_marker;" type_identifier (pointer_declarator "*__tmp_marker" * identifier) ;) (declaration "int iStack_2c;" primitive_type identifier ;) (expression_statement "puVar23 = PTR___stack_chk_guard_00097540;" (assignment_expression "puVar23 = PTR___stack_chk_guard_00097540" identifier = identifier) ;) (expression_statement "puVar25 = auStack_60;" (assignment_expression "puVar25 = auStack_60" identifier = identifier) ;) (expression_statement "uVar18 = u->_mp_size;" (assignment_expression "uVar18 = u->_mp_size" identifier = (field_expression "u->_mp_size" identifier -> field_identifier)) ;) (expression_statement "iStack_2c = *(int *)PTR___stack_chk_guard_00097540;" (assignment_expression "iStack_2c = *(int *)PTR___stack_chk_guard_00097540" identifier = (pointer_expression "*(int *)PTR___stack_chk_guard_00097540" * (cast_expression "(int *)PTR___stack_chk_guard_00097540" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "uVar15 = r->_mp_prec;" (assignment_expression "uVar15 = r->_mp_prec" identifier = (field_expression "r->_mp_prec" identifier -> field_identifier)) ;) (expression_statement "uVar20 = v->_mp_size;" (assignment_expression "uVar20 = v->_mp_size" identifier = (field_expression "v->_mp_size" identifier -> field_identifier)) ;) (expression_statement "uVar4 = -uVar18;" (assignment_expression "uVar4 = -uVar18" identifier = (unary_expression "-uVar18" - identifier)) ;) (if_statement "if (-1 < (int)uVar18) {\n    uVar4 = uVar18;\n  }" if (parenthesized_expression "(-1 < (int)uVar18)" ( (binary_expression "-1 < (int)uVar18" number_literal < (cast_expression "(int)uVar18" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    uVar4 = uVar18;\n  }" { (expression_statement "uVar4 = uVar18;" (assignment_expression "uVar4 = uVar18" identifier = identifier) ;) })) (expression_statement "uVar9 = uVar20;" (assignment_expression "uVar9 = uVar20" identifier = identifier) ;) (if_statement "if ((int)uVar20 < 0) {\n    uVar9 = -uVar20;\n  }" if (parenthesized_expression "((int)uVar20 < 0)" ( (binary_expression "(int)uVar20 < 0" (cast_expression "(int)uVar20" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n    uVar9 = -uVar20;\n  }" { (expression_statement "uVar9 = -uVar20;" (assignment_expression "uVar9 = -uVar20" identifier = (unary_expression "-uVar20" - identifier)) ;) })) (expression_statement "p_Var14 = (mpf_srcptr)u->_mp_d;" (assignment_expression "p_Var14 = (mpf_srcptr)u->_mp_d" identifier = (cast_expression "(mpf_srcptr)u->_mp_d" ( (type_descriptor "mpf_srcptr" type_identifier) ) (field_expression "u->_mp_d" identifier -> field_identifier))) ;) (expression_statement "p_Var13 = (mpf_srcptr)v->_mp_d;" (assignment_expression "p_Var13 = (mpf_srcptr)v->_mp_d" identifier = (cast_expression "(mpf_srcptr)v->_mp_d" ( (type_descriptor "mpf_srcptr" type_identifier) ) (field_expression "v->_mp_d" identifier -> field_identifier))) ;) (expression_statement "uVar22 = uVar4;" (assignment_expression "uVar22 = uVar4" identifier = identifier) ;) (if_statement "if ((tmp_reentrant_t *)(uint)((int)uVar15 < (int)uVar4) != (tmp_reentrant_t *)0x0) {\n    p_Var14 = (mpf_srcptr)((int)p_Var14 + (uVar4 - uVar15) * 4);\n    uVar22 = uVar15;\n  }" if (parenthesized_expression "((tmp_reentrant_t *)(uint)((int)uVar15 < (int)uVar4) != (tmp_reentrant_t *)0x0)" ( (binary_expression "(tmp_reentrant_t *)(uint)((int)uVar15 < (int)uVar4) != (tmp_reentrant_t *)0x0" (cast_expression "(tmp_reentrant_t *)(uint)((int)uVar15 < (int)uVar4)" ( (type_descriptor "tmp_reentrant_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(uint)((int)uVar15 < (int)uVar4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((int)uVar15 < (int)uVar4)" ( (binary_expression "(int)uVar15 < (int)uVar4" (cast_expression "(int)uVar15" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)uVar4" ( (type_descriptor "int" primitive_type) ) identifier)) )))) != (cast_expression "(tmp_reentrant_t *)0x0" ( (type_descriptor "tmp_reentrant_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    p_Var14 = (mpf_srcptr)((int)p_Var14 + (uVar4 - uVar15) * 4);\n    uVar22 = uVar15;\n  }" { (expression_statement "p_Var14 = (mpf_srcptr)((int)p_Var14 + (uVar4 - uVar15) * 4);" (assignment_expression "p_Var14 = (mpf_srcptr)((int)p_Var14 + (uVar4 - uVar15) * 4)" identifier = (call_expression "(mpf_srcptr)((int)p_Var14 + (uVar4 - uVar15) * 4)" (parenthesized_expression "(mpf_srcptr)" ( identifier )) (argument_list "((int)p_Var14 + (uVar4 - uVar15) * 4)" ( (binary_expression "(int)p_Var14 + (uVar4 - uVar15) * 4" (cast_expression "(int)p_Var14" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "(uVar4 - uVar15) * 4" (parenthesized_expression "(uVar4 - uVar15)" ( (binary_expression "uVar4 - uVar15" identifier - identifier) )) * number_literal)) )))) ;) (expression_statement "uVar22 = uVar15;" (assignment_expression "uVar22 = uVar15" identifier = identifier) ;) })) (if_statement "if ((int)uVar15 < (int)uVar9) {\n    p_Var13 = (mpf_srcptr)((int)p_Var13 + (uVar9 - uVar15) * 4);\n    uVar9 = uVar15;\n  }" if (parenthesized_expression "((int)uVar15 < (int)uVar9)" ( (binary_expression "(int)uVar15 < (int)uVar9" (cast_expression "(int)uVar15" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)uVar9" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    p_Var13 = (mpf_srcptr)((int)p_Var13 + (uVar9 - uVar15) * 4);\n    uVar9 = uVar15;\n  }" { (expression_statement "p_Var13 = (mpf_srcptr)((int)p_Var13 + (uVar9 - uVar15) * 4);" (assignment_expression "p_Var13 = (mpf_srcptr)((int)p_Var13 + (uVar9 - uVar15) * 4)" identifier = (call_expression "(mpf_srcptr)((int)p_Var13 + (uVar9 - uVar15) * 4)" (parenthesized_expression "(mpf_srcptr)" ( identifier )) (argument_list "((int)p_Var13 + (uVar9 - uVar15) * 4)" ( (binary_expression "(int)p_Var13 + (uVar9 - uVar15) * 4" (cast_expression "(int)p_Var13" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "(uVar9 - uVar15) * 4" (parenthesized_expression "(uVar9 - uVar15)" ( (binary_expression "uVar9 - uVar15" identifier - identifier) )) * number_literal)) )))) ;) (expression_statement "uVar9 = uVar15;" (assignment_expression "uVar9 = uVar15" identifier = identifier) ;) })) (if_statement "if ((uVar22 == 0) || (uVar9 == 0)) {\n    r->_mp_size = 0;\n    r->_mp_exp = 0;\n    ptVar6 = (tmp_reentrant_t *)(uint)((int)uVar15 < (int)uVar4);\n    p_Var14 = u;\n    puVar25 = auStack_60;\n  }\n  else {\n    uVar4 = (uVar22 + uVar9) * 4;\n    __tmp_marker = (tmp_reentrant_t *)0x0;\n    if (uVar4 < 0x7f01) {\n      iVar3 = -(uVar4 + 7 & 0xfffffff8);\n      puVar25 = auStack_60 + iVar3;\n      pmVar5 = (mp_limb_t *)(&stack0xffffffb8 + iVar3);\n    }\n    else {\n      pmVar5 = (mp_limb_t *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&__tmp_marker);\n    }\n    if ((int)uVar22 < (int)uVar9) {\n      *(uint *)(puVar25 + 0x10) = uVar22;\n      iVar3 = (*(code *)PTR___gmpn_mul_000972b4)(pmVar5,p_Var13,uVar9,p_Var14);\n      p_Var14 = p_Var13;\n    }\n    else {\n      *(uint *)(puVar25 + 0x10) = uVar9;\n      iVar3 = (*(code *)PTR___gmpn_mul_000972b4)(pmVar5,p_Var14,uVar22,p_Var13);\n    }\n    uVar9 = (uVar22 + uVar9) - (uint)(iVar3 == 0);\n    uVar15 = uVar15 + 1;\n    if ((int)uVar15 < (int)uVar9) {\n      pmVar5 = pmVar5 + (uVar9 - uVar15);\n      uVar9 = uVar15;\n    }\n    iVar7 = uVar9 - 1;\n    if (uVar9 != 0) {\n      pmVar2 = r->_mp_d;\n      mVar11 = *pmVar5;\n      pmVar8 = pmVar2;\n      if (iVar7 != 0) {\n        do {\n          pmVar5 = pmVar5 + 1;\n          p_Var14 = (mpf_srcptr)(pmVar8 + 1);\n          *pmVar8 = mVar11;\n          iVar7 = iVar7 + -1;\n          mVar11 = *pmVar5;\n          pmVar8 = (mp_limb_t *)p_Var14;\n        } while (iVar7 != 0);\n        pmVar2 = pmVar2 + (uVar9 - 1);\n      }\n      *pmVar2 = mVar11;\n    }\n    uVar18 = uVar18 ^ uVar20;\n    r->_mp_exp = (u->_mp_exp + v->_mp_exp) - (uint)(iVar3 == 0);\n    if ((int)uVar18 < 0) {\n      uVar9 = -uVar9;\n    }\n    r->_mp_size = uVar9;\n    ptVar6 = __tmp_marker;\n    if (__tmp_marker != (tmp_reentrant_t *)0x0) {\n      (*(code *)PTR___gmp_tmp_reentrant_free_00097614)();\n    }\n  }" if (parenthesized_expression "((uVar22 == 0) || (uVar9 == 0))" ( (binary_expression "(uVar22 == 0) || (uVar9 == 0)" (parenthesized_expression "(uVar22 == 0)" ( (binary_expression "uVar22 == 0" identifier == number_literal) )) || (parenthesized_expression "(uVar9 == 0)" ( (binary_expression "uVar9 == 0" identifier == number_literal) ))) )) (compound_statement "{\n    r->_mp_size = 0;\n    r->_mp_exp = 0;\n    ptVar6 = (tmp_reentrant_t *)(uint)((int)uVar15 < (int)uVar4);\n    p_Var14 = u;\n    puVar25 = auStack_60;\n  }" { (expression_statement "r->_mp_size = 0;" (assignment_expression "r->_mp_size = 0" (field_expression "r->_mp_size" identifier -> field_identifier) = number_literal) ;) (expression_statement "r->_mp_exp = 0;" (assignment_expression "r->_mp_exp = 0" (field_expression "r->_mp_exp" identifier -> field_identifier) = number_literal) ;) (expression_statement "ptVar6 = (tmp_reentrant_t *)(uint)((int)uVar15 < (int)uVar4);" (assignment_expression "ptVar6 = (tmp_reentrant_t *)(uint)((int)uVar15 < (int)uVar4)" identifier = (cast_expression "(tmp_reentrant_t *)(uint)((int)uVar15 < (int)uVar4)" ( (type_descriptor "tmp_reentrant_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(uint)((int)uVar15 < (int)uVar4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((int)uVar15 < (int)uVar4)" ( (binary_expression "(int)uVar15 < (int)uVar4" (cast_expression "(int)uVar15" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)uVar4" ( (type_descriptor "int" primitive_type) ) identifier)) ))))) ;) (expression_statement "p_Var14 = u;" (assignment_expression "p_Var14 = u" identifier = identifier) ;) (expression_statement "puVar25 = auStack_60;" (assignment_expression "puVar25 = auStack_60" identifier = identifier) ;) }) (else_clause "else {\n    uVar4 = (uVar22 + uVar9) * 4;\n    __tmp_marker = (tmp_reentrant_t *)0x0;\n    if (uVar4 < 0x7f01) {\n      iVar3 = -(uVar4 + 7 & 0xfffffff8);\n      puVar25 = auStack_60 + iVar3;\n      pmVar5 = (mp_limb_t *)(&stack0xffffffb8 + iVar3);\n    }\n    else {\n      pmVar5 = (mp_limb_t *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&__tmp_marker);\n    }\n    if ((int)uVar22 < (int)uVar9) {\n      *(uint *)(puVar25 + 0x10) = uVar22;\n      iVar3 = (*(code *)PTR___gmpn_mul_000972b4)(pmVar5,p_Var13,uVar9,p_Var14);\n      p_Var14 = p_Var13;\n    }\n    else {\n      *(uint *)(puVar25 + 0x10) = uVar9;\n      iVar3 = (*(code *)PTR___gmpn_mul_000972b4)(pmVar5,p_Var14,uVar22,p_Var13);\n    }\n    uVar9 = (uVar22 + uVar9) - (uint)(iVar3 == 0);\n    uVar15 = uVar15 + 1;\n    if ((int)uVar15 < (int)uVar9) {\n      pmVar5 = pmVar5 + (uVar9 - uVar15);\n      uVar9 = uVar15;\n    }\n    iVar7 = uVar9 - 1;\n    if (uVar9 != 0) {\n      pmVar2 = r->_mp_d;\n      mVar11 = *pmVar5;\n      pmVar8 = pmVar2;\n      if (iVar7 != 0) {\n        do {\n          pmVar5 = pmVar5 + 1;\n          p_Var14 = (mpf_srcptr)(pmVar8 + 1);\n          *pmVar8 = mVar11;\n          iVar7 = iVar7 + -1;\n          mVar11 = *pmVar5;\n          pmVar8 = (mp_limb_t *)p_Var14;\n        } while (iVar7 != 0);\n        pmVar2 = pmVar2 + (uVar9 - 1);\n      }\n      *pmVar2 = mVar11;\n    }\n    uVar18 = uVar18 ^ uVar20;\n    r->_mp_exp = (u->_mp_exp + v->_mp_exp) - (uint)(iVar3 == 0);\n    if ((int)uVar18 < 0) {\n      uVar9 = -uVar9;\n    }\n    r->_mp_size = uVar9;\n    ptVar6 = __tmp_marker;\n    if (__tmp_marker != (tmp_reentrant_t *)0x0) {\n      (*(code *)PTR___gmp_tmp_reentrant_free_00097614)();\n    }\n  }" else (compound_statement "{\n    uVar4 = (uVar22 + uVar9) * 4;\n    __tmp_marker = (tmp_reentrant_t *)0x0;\n    if (uVar4 < 0x7f01) {\n      iVar3 = -(uVar4 + 7 & 0xfffffff8);\n      puVar25 = auStack_60 + iVar3;\n      pmVar5 = (mp_limb_t *)(&stack0xffffffb8 + iVar3);\n    }\n    else {\n      pmVar5 = (mp_limb_t *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&__tmp_marker);\n    }\n    if ((int)uVar22 < (int)uVar9) {\n      *(uint *)(puVar25 + 0x10) = uVar22;\n      iVar3 = (*(code *)PTR___gmpn_mul_000972b4)(pmVar5,p_Var13,uVar9,p_Var14);\n      p_Var14 = p_Var13;\n    }\n    else {\n      *(uint *)(puVar25 + 0x10) = uVar9;\n      iVar3 = (*(code *)PTR___gmpn_mul_000972b4)(pmVar5,p_Var14,uVar22,p_Var13);\n    }\n    uVar9 = (uVar22 + uVar9) - (uint)(iVar3 == 0);\n    uVar15 = uVar15 + 1;\n    if ((int)uVar15 < (int)uVar9) {\n      pmVar5 = pmVar5 + (uVar9 - uVar15);\n      uVar9 = uVar15;\n    }\n    iVar7 = uVar9 - 1;\n    if (uVar9 != 0) {\n      pmVar2 = r->_mp_d;\n      mVar11 = *pmVar5;\n      pmVar8 = pmVar2;\n      if (iVar7 != 0) {\n        do {\n          pmVar5 = pmVar5 + 1;\n          p_Var14 = (mpf_srcptr)(pmVar8 + 1);\n          *pmVar8 = mVar11;\n          iVar7 = iVar7 + -1;\n          mVar11 = *pmVar5;\n          pmVar8 = (mp_limb_t *)p_Var14;\n        } while (iVar7 != 0);\n        pmVar2 = pmVar2 + (uVar9 - 1);\n      }\n      *pmVar2 = mVar11;\n    }\n    uVar18 = uVar18 ^ uVar20;\n    r->_mp_exp = (u->_mp_exp + v->_mp_exp) - (uint)(iVar3 == 0);\n    if ((int)uVar18 < 0) {\n      uVar9 = -uVar9;\n    }\n    r->_mp_size = uVar9;\n    ptVar6 = __tmp_marker;\n    if (__tmp_marker != (tmp_reentrant_t *)0x0) {\n      (*(code *)PTR___gmp_tmp_reentrant_free_00097614)();\n    }\n  }" { (expression_statement "uVar4 = (uVar22 + uVar9) * 4;" (assignment_expression "uVar4 = (uVar22 + uVar9) * 4" identifier = (binary_expression "(uVar22 + uVar9) * 4" (parenthesized_expression "(uVar22 + uVar9)" ( (binary_expression "uVar22 + uVar9" identifier + identifier) )) * number_literal)) ;) (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)) ;) (if_statement "if (uVar4 < 0x7f01) {\n      iVar3 = -(uVar4 + 7 & 0xfffffff8);\n      puVar25 = auStack_60 + iVar3;\n      pmVar5 = (mp_limb_t *)(&stack0xffffffb8 + iVar3);\n    }\n    else {\n      pmVar5 = (mp_limb_t *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&__tmp_marker);\n    }" if (parenthesized_expression "(uVar4 < 0x7f01)" ( (binary_expression "uVar4 < 0x7f01" identifier < number_literal) )) (compound_statement "{\n      iVar3 = -(uVar4 + 7 & 0xfffffff8);\n      puVar25 = auStack_60 + iVar3;\n      pmVar5 = (mp_limb_t *)(&stack0xffffffb8 + iVar3);\n    }" { (expression_statement "iVar3 = -(uVar4 + 7 & 0xfffffff8);" (assignment_expression "iVar3 = -(uVar4 + 7 & 0xfffffff8)" identifier = (unary_expression "-(uVar4 + 7 & 0xfffffff8)" - (parenthesized_expression "(uVar4 + 7 & 0xfffffff8)" ( (binary_expression "uVar4 + 7 & 0xfffffff8" (binary_expression "uVar4 + 7" identifier + number_literal) & number_literal) )))) ;) (expression_statement "puVar25 = auStack_60 + iVar3;" (assignment_expression "puVar25 = auStack_60 + iVar3" identifier = (binary_expression "auStack_60 + iVar3" identifier + identifier)) ;) (expression_statement "pmVar5 = (mp_limb_t *)(&stack0xffffffb8 + iVar3);" (assignment_expression "pmVar5 = (mp_limb_t *)(&stack0xffffffb8 + iVar3)" identifier = (cast_expression "(mp_limb_t *)(&stack0xffffffb8 + iVar3)" ( (type_descriptor "mp_limb_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&stack0xffffffb8 + iVar3)" ( (binary_expression "&stack0xffffffb8 + iVar3" (pointer_expression "&stack0xffffffb8" & identifier) + identifier) )))) ;) }) (else_clause "else {\n      pmVar5 = (mp_limb_t *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&__tmp_marker);\n    }" else (compound_statement "{\n      pmVar5 = (mp_limb_t *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&__tmp_marker);\n    }" { (expression_statement "pmVar5 = (mp_limb_t *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&__tmp_marker);" (assignment_expression "pmVar5 = (mp_limb_t *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&__tmp_marker)" identifier = (cast_expression "(mp_limb_t *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&__tmp_marker)" ( (type_descriptor "mp_limb_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&__tmp_marker)" (parenthesized_expression "(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)" ( (pointer_expression "*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0" * (cast_expression "(code *)PTR___gmp_tmp_reentrant_alloc_000972f0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(&__tmp_marker)" ( (pointer_expression "&__tmp_marker" & identifier) ))))) ;) }))) (if_statement "if ((int)uVar22 < (int)uVar9) {\n      *(uint *)(puVar25 + 0x10) = uVar22;\n      iVar3 = (*(code *)PTR___gmpn_mul_000972b4)(pmVar5,p_Var13,uVar9,p_Var14);\n      p_Var14 = p_Var13;\n    }\n    else {\n      *(uint *)(puVar25 + 0x10) = uVar9;\n      iVar3 = (*(code *)PTR___gmpn_mul_000972b4)(pmVar5,p_Var14,uVar22,p_Var13);\n    }" if (parenthesized_expression "((int)uVar22 < (int)uVar9)" ( (binary_expression "(int)uVar22 < (int)uVar9" (cast_expression "(int)uVar22" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)uVar9" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n      *(uint *)(puVar25 + 0x10) = uVar22;\n      iVar3 = (*(code *)PTR___gmpn_mul_000972b4)(pmVar5,p_Var13,uVar9,p_Var14);\n      p_Var14 = p_Var13;\n    }" { (expression_statement "*(uint *)(puVar25 + 0x10) = uVar22;" (assignment_expression "*(uint *)(puVar25 + 0x10) = uVar22" (pointer_expression "*(uint *)(puVar25 + 0x10)" * (cast_expression "(uint *)(puVar25 + 0x10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar25 + 0x10)" ( (binary_expression "puVar25 + 0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "iVar3 = (*(code *)PTR___gmpn_mul_000972b4)(pmVar5,p_Var13,uVar9,p_Var14);" (assignment_expression "iVar3 = (*(code *)PTR___gmpn_mul_000972b4)(pmVar5,p_Var13,uVar9,p_Var14)" identifier = (call_expression "(*(code *)PTR___gmpn_mul_000972b4)(pmVar5,p_Var13,uVar9,p_Var14)" (parenthesized_expression "(*(code *)PTR___gmpn_mul_000972b4)" ( (pointer_expression "*(code *)PTR___gmpn_mul_000972b4" * (cast_expression "(code *)PTR___gmpn_mul_000972b4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(pmVar5,p_Var13,uVar9,p_Var14)" ( identifier , identifier , identifier , identifier )))) ;) (expression_statement "p_Var14 = p_Var13;" (assignment_expression "p_Var14 = p_Var13" identifier = identifier) ;) }) (else_clause "else {\n      *(uint *)(puVar25 + 0x10) = uVar9;\n      iVar3 = (*(code *)PTR___gmpn_mul_000972b4)(pmVar5,p_Var14,uVar22,p_Var13);\n    }" else (compound_statement "{\n      *(uint *)(puVar25 + 0x10) = uVar9;\n      iVar3 = (*(code *)PTR___gmpn_mul_000972b4)(pmVar5,p_Var14,uVar22,p_Var13);\n    }" { (expression_statement "*(uint *)(puVar25 + 0x10) = uVar9;" (assignment_expression "*(uint *)(puVar25 + 0x10) = uVar9" (pointer_expression "*(uint *)(puVar25 + 0x10)" * (cast_expression "(uint *)(puVar25 + 0x10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar25 + 0x10)" ( (binary_expression "puVar25 + 0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "iVar3 = (*(code *)PTR___gmpn_mul_000972b4)(pmVar5,p_Var14,uVar22,p_Var13);" (assignment_expression "iVar3 = (*(code *)PTR___gmpn_mul_000972b4)(pmVar5,p_Var14,uVar22,p_Var13)" identifier = (call_expression "(*(code *)PTR___gmpn_mul_000972b4)(pmVar5,p_Var14,uVar22,p_Var13)" (parenthesized_expression "(*(code *)PTR___gmpn_mul_000972b4)" ( (pointer_expression "*(code *)PTR___gmpn_mul_000972b4" * (cast_expression "(code *)PTR___gmpn_mul_000972b4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(pmVar5,p_Var14,uVar22,p_Var13)" ( identifier , identifier , identifier , identifier )))) ;) }))) (expression_statement "uVar9 = (uVar22 + uVar9) - (uint)(iVar3 == 0);" (assignment_expression "uVar9 = (uVar22 + uVar9) - (uint)(iVar3 == 0)" identifier = (binary_expression "(uVar22 + uVar9) - (uint)(iVar3 == 0)" (parenthesized_expression "(uVar22 + uVar9)" ( (binary_expression "uVar22 + uVar9" identifier + identifier) )) - (call_expression "(uint)(iVar3 == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) ))))) ;) (expression_statement "uVar15 = uVar15 + 1;" (assignment_expression "uVar15 = uVar15 + 1" identifier = (binary_expression "uVar15 + 1" identifier + number_literal)) ;) (if_statement "if ((int)uVar15 < (int)uVar9) {\n      pmVar5 = pmVar5 + (uVar9 - uVar15);\n      uVar9 = uVar15;\n    }" if (parenthesized_expression "((int)uVar15 < (int)uVar9)" ( (binary_expression "(int)uVar15 < (int)uVar9" (cast_expression "(int)uVar15" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)uVar9" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n      pmVar5 = pmVar5 + (uVar9 - uVar15);\n      uVar9 = uVar15;\n    }" { (expression_statement "pmVar5 = pmVar5 + (uVar9 - uVar15);" (assignment_expression "pmVar5 = pmVar5 + (uVar9 - uVar15)" identifier = (binary_expression "pmVar5 + (uVar9 - uVar15)" identifier + (parenthesized_expression "(uVar9 - uVar15)" ( (binary_expression "uVar9 - uVar15" identifier - identifier) )))) ;) (expression_statement "uVar9 = uVar15;" (assignment_expression "uVar9 = uVar15" identifier = identifier) ;) })) (expression_statement "iVar7 = uVar9 - 1;" (assignment_expression "iVar7 = uVar9 - 1" identifier = (binary_expression "uVar9 - 1" identifier - number_literal)) ;) (if_statement "if (uVar9 != 0) {\n      pmVar2 = r->_mp_d;\n      mVar11 = *pmVar5;\n      pmVar8 = pmVar2;\n      if (iVar7 != 0) {\n        do {\n          pmVar5 = pmVar5 + 1;\n          p_Var14 = (mpf_srcptr)(pmVar8 + 1);\n          *pmVar8 = mVar11;\n          iVar7 = iVar7 + -1;\n          mVar11 = *pmVar5;\n          pmVar8 = (mp_limb_t *)p_Var14;\n        } while (iVar7 != 0);\n        pmVar2 = pmVar2 + (uVar9 - 1);\n      }\n      *pmVar2 = mVar11;\n    }" if (parenthesized_expression "(uVar9 != 0)" ( (binary_expression "uVar9 != 0" identifier != number_literal) )) (compound_statement "{\n      pmVar2 = r->_mp_d;\n      mVar11 = *pmVar5;\n      pmVar8 = pmVar2;\n      if (iVar7 != 0) {\n        do {\n          pmVar5 = pmVar5 + 1;\n          p_Var14 = (mpf_srcptr)(pmVar8 + 1);\n          *pmVar8 = mVar11;\n          iVar7 = iVar7 + -1;\n          mVar11 = *pmVar5;\n          pmVar8 = (mp_limb_t *)p_Var14;\n        } while (iVar7 != 0);\n        pmVar2 = pmVar2 + (uVar9 - 1);\n      }\n      *pmVar2 = mVar11;\n    }" { (expression_statement "pmVar2 = r->_mp_d;" (assignment_expression "pmVar2 = r->_mp_d" identifier = (field_expression "r->_mp_d" identifier -> field_identifier)) ;) (expression_statement "mVar11 = *pmVar5;" (assignment_expression "mVar11 = *pmVar5" identifier = (pointer_expression "*pmVar5" * identifier)) ;) (expression_statement "pmVar8 = pmVar2;" (assignment_expression "pmVar8 = pmVar2" identifier = identifier) ;) (if_statement "if (iVar7 != 0) {\n        do {\n          pmVar5 = pmVar5 + 1;\n          p_Var14 = (mpf_srcptr)(pmVar8 + 1);\n          *pmVar8 = mVar11;\n          iVar7 = iVar7 + -1;\n          mVar11 = *pmVar5;\n          pmVar8 = (mp_limb_t *)p_Var14;\n        } while (iVar7 != 0);\n        pmVar2 = pmVar2 + (uVar9 - 1);\n      }" if (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) (compound_statement "{\n        do {\n          pmVar5 = pmVar5 + 1;\n          p_Var14 = (mpf_srcptr)(pmVar8 + 1);\n          *pmVar8 = mVar11;\n          iVar7 = iVar7 + -1;\n          mVar11 = *pmVar5;\n          pmVar8 = (mp_limb_t *)p_Var14;\n        } while (iVar7 != 0);\n        pmVar2 = pmVar2 + (uVar9 - 1);\n      }" { (do_statement "do {\n          pmVar5 = pmVar5 + 1;\n          p_Var14 = (mpf_srcptr)(pmVar8 + 1);\n          *pmVar8 = mVar11;\n          iVar7 = iVar7 + -1;\n          mVar11 = *pmVar5;\n          pmVar8 = (mp_limb_t *)p_Var14;\n        } while (iVar7 != 0);" do (compound_statement "{\n          pmVar5 = pmVar5 + 1;\n          p_Var14 = (mpf_srcptr)(pmVar8 + 1);\n          *pmVar8 = mVar11;\n          iVar7 = iVar7 + -1;\n          mVar11 = *pmVar5;\n          pmVar8 = (mp_limb_t *)p_Var14;\n        }" { (expression_statement "pmVar5 = pmVar5 + 1;" (assignment_expression "pmVar5 = pmVar5 + 1" identifier = (binary_expression "pmVar5 + 1" identifier + number_literal)) ;) (expression_statement "p_Var14 = (mpf_srcptr)(pmVar8 + 1);" (assignment_expression "p_Var14 = (mpf_srcptr)(pmVar8 + 1)" identifier = (call_expression "(mpf_srcptr)(pmVar8 + 1)" (parenthesized_expression "(mpf_srcptr)" ( identifier )) (argument_list "(pmVar8 + 1)" ( (binary_expression "pmVar8 + 1" identifier + number_literal) )))) ;) (expression_statement "*pmVar8 = mVar11;" (assignment_expression "*pmVar8 = mVar11" (pointer_expression "*pmVar8" * identifier) = identifier) ;) (expression_statement "iVar7 = iVar7 + -1;" (assignment_expression "iVar7 = iVar7 + -1" identifier = (binary_expression "iVar7 + -1" identifier + number_literal)) ;) (expression_statement "mVar11 = *pmVar5;" (assignment_expression "mVar11 = *pmVar5" identifier = (pointer_expression "*pmVar5" * identifier)) ;) (expression_statement "pmVar8 = (mp_limb_t *)p_Var14;" (assignment_expression "pmVar8 = (mp_limb_t *)p_Var14" identifier = (cast_expression "(mp_limb_t *)p_Var14" ( (type_descriptor "mp_limb_t *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) }) while (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) ;) (expression_statement "pmVar2 = pmVar2 + (uVar9 - 1);" (assignment_expression "pmVar2 = pmVar2 + (uVar9 - 1)" identifier = (binary_expression "pmVar2 + (uVar9 - 1)" identifier + (parenthesized_expression "(uVar9 - 1)" ( (binary_expression "uVar9 - 1" identifier - number_literal) )))) ;) })) (expression_statement "*pmVar2 = mVar11;" (assignment_expression "*pmVar2 = mVar11" (pointer_expression "*pmVar2" * identifier) = identifier) ;) })) (expression_statement "uVar18 = uVar18 ^ uVar20;" (assignment_expression "uVar18 = uVar18 ^ uVar20" identifier = (binary_expression "uVar18 ^ uVar20" identifier ^ identifier)) ;) (expression_statement "r->_mp_exp = (u->_mp_exp + v->_mp_exp) - (uint)(iVar3 == 0);" (assignment_expression "r->_mp_exp = (u->_mp_exp + v->_mp_exp) - (uint)(iVar3 == 0)" (field_expression "r->_mp_exp" identifier -> field_identifier) = (binary_expression "(u->_mp_exp + v->_mp_exp) - (uint)(iVar3 == 0)" (parenthesized_expression "(u->_mp_exp + v->_mp_exp)" ( (binary_expression "u->_mp_exp + v->_mp_exp" (field_expression "u->_mp_exp" identifier -> field_identifier) + (field_expression "v->_mp_exp" identifier -> field_identifier)) )) - (call_expression "(uint)(iVar3 == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) ))))) ;) (if_statement "if ((int)uVar18 < 0) {\n      uVar9 = -uVar9;\n    }" if (parenthesized_expression "((int)uVar18 < 0)" ( (binary_expression "(int)uVar18 < 0" (cast_expression "(int)uVar18" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n      uVar9 = -uVar9;\n    }" { (expression_statement "uVar9 = -uVar9;" (assignment_expression "uVar9 = -uVar9" identifier = (unary_expression "-uVar9" - identifier)) ;) })) (expression_statement "r->_mp_size = uVar9;" (assignment_expression "r->_mp_size = uVar9" (field_expression "r->_mp_size" identifier -> field_identifier) = identifier) ;) (expression_statement "ptVar6 = __tmp_marker;" (assignment_expression "ptVar6 = __tmp_marker" identifier = identifier) ;) (if_statement "if (__tmp_marker != (tmp_reentrant_t *)0x0) {\n      (*(code *)PTR___gmp_tmp_reentrant_free_00097614)();\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      (*(code *)PTR___gmp_tmp_reentrant_free_00097614)();\n    }" { (expression_statement "(*(code *)PTR___gmp_tmp_reentrant_free_00097614)();" (call_expression "(*(code *)PTR___gmp_tmp_reentrant_free_00097614)()" (parenthesized_expression "(*(code *)PTR___gmp_tmp_reentrant_free_00097614)" ( (pointer_expression "*(code *)PTR___gmp_tmp_reentrant_free_00097614" * (cast_expression "(code *)PTR___gmp_tmp_reentrant_free_00097614" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) })) }))) (if_statement "if (iStack_2c == *(int *)puVar23) {\n    return;\n  }" if (parenthesized_expression "(iStack_2c == *(int *)puVar23)" ( (binary_expression "iStack_2c == *(int *)puVar23" identifier == (pointer_expression "*(int *)puVar23" * (cast_expression "(int *)puVar23" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "uVar26 = 0x1cbf4;" (assignment_expression "uVar26 = 0x1cbf4" identifier = number_literal) ;) (expression_statement "puVar23 = PTR___stack_chk_fail_000974d0;" (assignment_expression "puVar23 = PTR___stack_chk_fail_000974d0" identifier = identifier) ;) (expression_statement "(*(code *)PTR___stack_chk_fail_000974d0)();" (call_expression "(*(code *)PTR___stack_chk_fail_000974d0)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_000974d0)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_000974d0" * (cast_expression "(code *)PTR___stack_chk_fail_000974d0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (expression_statement "*(undefined **)(puVar25 + -0x28) = puVar23 + 0x82440;" (assignment_expression "*(undefined **)(puVar25 + -0x28) = puVar23 + 0x82440" (pointer_expression "*(undefined **)(puVar25 + -0x28)" * (cast_expression "(undefined **)(puVar25 + -0x28)" ( (type_descriptor "undefined **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar25 + -0x28)" ( (binary_expression "puVar25 + -0x28" identifier + number_literal) )))) = (binary_expression "puVar23 + 0x82440" identifier + number_literal)) ;) (expression_statement "*(mpf_ptr *)(puVar25 + -0x14) = r;" (assignment_expression "*(mpf_ptr *)(puVar25 + -0x14) = r" (pointer_expression "*(mpf_ptr *)(puVar25 + -0x14)" * (cast_expression "(mpf_ptr *)(puVar25 + -0x14)" ( (type_descriptor "mpf_ptr *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar25 + -0x14)" ( (binary_expression "puVar25 + -0x14" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(puVar25 + -4) = uVar26;" (assignment_expression "*(undefined4 *)(puVar25 + -4) = uVar26" (pointer_expression "*(undefined4 *)(puVar25 + -4)" * (cast_expression "(undefined4 *)(puVar25 + -4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar25 + -4)" ( (binary_expression "puVar25 + -4" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(mpf_srcptr *)(puVar25 + -8) = u;" (assignment_expression "*(mpf_srcptr *)(puVar25 + -8) = u" (pointer_expression "*(mpf_srcptr *)(puVar25 + -8)" * (cast_expression "(mpf_srcptr *)(puVar25 + -8)" ( (type_descriptor "mpf_srcptr *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar25 + -8)" ( (binary_expression "puVar25 + -8" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(mpf_srcptr *)(puVar25 + -0xc) = v;" (assignment_expression "*(mpf_srcptr *)(puVar25 + -0xc) = v" (pointer_expression "*(mpf_srcptr *)(puVar25 + -0xc)" * (cast_expression "(mpf_srcptr *)(puVar25 + -0xc)" ( (type_descriptor "mpf_srcptr *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar25 + -0xc)" ( (binary_expression "puVar25 + -0xc" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)(puVar25 + -0x10) = uVar20;" (assignment_expression "*(uint *)(puVar25 + -0x10) = uVar20" (pointer_expression "*(uint *)(puVar25 + -0x10)" * (cast_expression "(uint *)(puVar25 + -0x10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar25 + -0x10)" ( (binary_expression "puVar25 + -0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)(puVar25 + -0x18) = uVar18;" (assignment_expression "*(uint *)(puVar25 + -0x18) = uVar18" (pointer_expression "*(uint *)(puVar25 + -0x18)" * (cast_expression "(uint *)(puVar25 + -0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar25 + -0x18)" ( (binary_expression "puVar25 + -0x18" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)(puVar25 + -0x1c) = uVar15;" (assignment_expression "*(uint *)(puVar25 + -0x1c) = uVar15" (pointer_expression "*(uint *)(puVar25 + -0x1c)" * (cast_expression "(uint *)(puVar25 + -0x1c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar25 + -0x1c)" ( (binary_expression "puVar25 + -0x1c" identifier + number_literal) )))) = identifier) ;) (expression_statement "ptVar19 = (tmp_reentrant_t *)p_Var14->_mp_size;" (assignment_expression "ptVar19 = (tmp_reentrant_t *)p_Var14->_mp_size" identifier = (cast_expression "(tmp_reentrant_t *)p_Var14->_mp_size" ( (type_descriptor "tmp_reentrant_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "p_Var14->_mp_size" identifier -> field_identifier))) ;) (if_statement "if ((uVar9 == 0) || (ptVar19 == (tmp_reentrant_t *)0x0)) {\n    ptVar6->size = 0;\n    ptVar6[1].next = (tmp_reentrant_t *)0x0;\n    return;\n  }" if (parenthesized_expression "((uVar9 == 0) || (ptVar19 == (tmp_reentrant_t *)0x0))" ( (binary_expression "(uVar9 == 0) || (ptVar19 == (tmp_reentrant_t *)0x0)" (parenthesized_expression "(uVar9 == 0)" ( (binary_expression "uVar9 == 0" identifier == number_literal) )) || (parenthesized_expression "(ptVar19 == (tmp_reentrant_t *)0x0)" ( (binary_expression "ptVar19 == (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    ptVar6->size = 0;\n    ptVar6[1].next = (tmp_reentrant_t *)0x0;\n    return;\n  }" { (expression_statement "ptVar6->size = 0;" (assignment_expression "ptVar6->size = 0" (field_expression "ptVar6->size" identifier -> field_identifier) = number_literal) ;) (expression_statement "ptVar6[1].next = (tmp_reentrant_t *)0x0;" (assignment_expression "ptVar6[1].next = (tmp_reentrant_t *)0x0" (field_expression "ptVar6[1].next" (subscript_expression "ptVar6[1]" identifier [ number_literal ]) . field_identifier) = (cast_expression "(tmp_reentrant_t *)0x0" ( (type_descriptor "tmp_reentrant_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (return_statement "return;" return ;) })) (if_statement "if ((int)ptVar19 < 0) {\n    ptVar16 = ptVar6->next;\n    pmVar5 = p_Var14->_mp_d;\n    puVar21 = (uint *)ptVar6[1].size;\n    iVar3 = -(int)ptVar19 - (int)ptVar16;\n    ptVar12 = (tmp_reentrant_t *)-(int)ptVar19;\n    if (iVar3 < 1) goto LAB_0001cda8;\nLAB_0001cc68:\n    iVar7 = iVar3 + -1;\n    lVar1 = (ulonglong)uVar9 * (ulonglong)pmVar5[iVar7];\n    pmVar8 = pmVar5 + iVar3;\n    while( true ) {\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      iVar7 = iVar7 + -1;\n      pcVar24 = *(code **)(puVar23 + 0x7a4a4);\n      if (iVar7 == -1) break;\n      puVar10 = pmVar8 + -2;\n      pmVar8 = pmVar8 + -1;\n      lVar1 = lVar1 + ((ulonglong)uVar9 * (ulonglong)*puVar10 >> 0x20);\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      if ((int)lVar1 != -1) {\n        pcVar24 = *(code **)(puVar23 + 0x7a4a4);\n        break;\n      }\n      lVar1 = CONCAT44(uVar15,(int)((ulonglong)uVar9 * (ulonglong)*puVar10));\n    }\n    uVar4 = (*pcVar24)(puVar21,pmVar5 + iVar3,ptVar16);\n    uVar18 = *puVar21;\n    *puVar21 = uVar15 + uVar18;\n    if (uVar15 + uVar18 < uVar15) {\n      if ((int)ptVar16 < 2) {\nLAB_0001cd34:\n        uVar15 = (uint)(uVar4 + 1 != 0);\n        sVar17 = (int)&ptVar16->next + uVar15;\n        puVar21[(int)ptVar16] = uVar4 + 1;\n        ptVar6[1].next = (tmp_reentrant_t *)(p_Var14->_mp_exp + uVar15);\n        goto joined_r0x0001cddc;\n      }\n      uVar15 = puVar21[1];\n      puVar21[1] = uVar15 + 1;\n      if (uVar15 + 1 == 0) {\n        ptVar12 = (tmp_reentrant_t *)0x2;\n        puVar10 = puVar21 + 2;\n        do {\n          if (ptVar12 == ptVar16) goto LAB_0001cd34;\n          uVar15 = *puVar10;\n          ptVar12 = (tmp_reentrant_t *)((int)&ptVar12->next + 1);\n          *puVar10 = uVar15 + 1;\n          puVar10 = puVar10 + 1;\n        } while (uVar15 + 1 == 0);\n      }\n    }\n  }\n  else {\n    ptVar16 = ptVar6->next;\n    pmVar5 = p_Var14->_mp_d;\n    iVar3 = (int)ptVar19 - (int)ptVar16;\n    puVar21 = (uint *)ptVar6[1].size;\n    ptVar12 = ptVar19;\n    if (0 < iVar3) goto LAB_0001cc68;\nLAB_0001cda8:\n    ptVar16 = ptVar12;\n    uVar4 = (**(code **)(puVar23 + 0x7a4a4))(puVar21,pmVar5,ptVar16);\n  }" if (parenthesized_expression "((int)ptVar19 < 0)" ( (binary_expression "(int)ptVar19 < 0" (cast_expression "(int)ptVar19" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n    ptVar16 = ptVar6->next;\n    pmVar5 = p_Var14->_mp_d;\n    puVar21 = (uint *)ptVar6[1].size;\n    iVar3 = -(int)ptVar19 - (int)ptVar16;\n    ptVar12 = (tmp_reentrant_t *)-(int)ptVar19;\n    if (iVar3 < 1) goto LAB_0001cda8;\nLAB_0001cc68:\n    iVar7 = iVar3 + -1;\n    lVar1 = (ulonglong)uVar9 * (ulonglong)pmVar5[iVar7];\n    pmVar8 = pmVar5 + iVar3;\n    while( true ) {\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      iVar7 = iVar7 + -1;\n      pcVar24 = *(code **)(puVar23 + 0x7a4a4);\n      if (iVar7 == -1) break;\n      puVar10 = pmVar8 + -2;\n      pmVar8 = pmVar8 + -1;\n      lVar1 = lVar1 + ((ulonglong)uVar9 * (ulonglong)*puVar10 >> 0x20);\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      if ((int)lVar1 != -1) {\n        pcVar24 = *(code **)(puVar23 + 0x7a4a4);\n        break;\n      }\n      lVar1 = CONCAT44(uVar15,(int)((ulonglong)uVar9 * (ulonglong)*puVar10));\n    }\n    uVar4 = (*pcVar24)(puVar21,pmVar5 + iVar3,ptVar16);\n    uVar18 = *puVar21;\n    *puVar21 = uVar15 + uVar18;\n    if (uVar15 + uVar18 < uVar15) {\n      if ((int)ptVar16 < 2) {\nLAB_0001cd34:\n        uVar15 = (uint)(uVar4 + 1 != 0);\n        sVar17 = (int)&ptVar16->next + uVar15;\n        puVar21[(int)ptVar16] = uVar4 + 1;\n        ptVar6[1].next = (tmp_reentrant_t *)(p_Var14->_mp_exp + uVar15);\n        goto joined_r0x0001cddc;\n      }\n      uVar15 = puVar21[1];\n      puVar21[1] = uVar15 + 1;\n      if (uVar15 + 1 == 0) {\n        ptVar12 = (tmp_reentrant_t *)0x2;\n        puVar10 = puVar21 + 2;\n        do {\n          if (ptVar12 == ptVar16) goto LAB_0001cd34;\n          uVar15 = *puVar10;\n          ptVar12 = (tmp_reentrant_t *)((int)&ptVar12->next + 1);\n          *puVar10 = uVar15 + 1;\n          puVar10 = puVar10 + 1;\n        } while (uVar15 + 1 == 0);\n      }\n    }\n  }" { (expression_statement "ptVar16 = ptVar6->next;" (assignment_expression "ptVar16 = ptVar6->next" identifier = (field_expression "ptVar6->next" identifier -> field_identifier)) ;) (expression_statement "pmVar5 = p_Var14->_mp_d;" (assignment_expression "pmVar5 = p_Var14->_mp_d" identifier = (field_expression "p_Var14->_mp_d" identifier -> field_identifier)) ;) (expression_statement "puVar21 = (uint *)ptVar6[1].size;" (assignment_expression "puVar21 = (uint *)ptVar6[1].size" identifier = (cast_expression "(uint *)ptVar6[1].size" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "ptVar6[1].size" (subscript_expression "ptVar6[1]" identifier [ number_literal ]) . field_identifier))) ;) (expression_statement "iVar3 = -(int)ptVar19 - (int)ptVar16;" (assignment_expression "iVar3 = -(int)ptVar19 - (int)ptVar16" identifier = (binary_expression "-(int)ptVar19 - (int)ptVar16" (unary_expression "-(int)ptVar19" - (cast_expression "(int)ptVar19" ( (type_descriptor "int" primitive_type) ) identifier)) - (cast_expression "(int)ptVar16" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "ptVar12 = (tmp_reentrant_t *)-(int)ptVar19;" (assignment_expression "ptVar12 = (tmp_reentrant_t *)-(int)ptVar19" identifier = (cast_expression "(tmp_reentrant_t *)-(int)ptVar19" ( (type_descriptor "tmp_reentrant_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (unary_expression "-(int)ptVar19" - (cast_expression "(int)ptVar19" ( (type_descriptor "int" primitive_type) ) identifier)))) ;) (if_statement "if (iVar3 < 1) goto LAB_0001cda8;" if (parenthesized_expression "(iVar3 < 1)" ( (binary_expression "iVar3 < 1" identifier < number_literal) )) (goto_statement "goto LAB_0001cda8;" goto statement_identifier ;)) (labeled_statement "LAB_0001cc68:\n    iVar7 = iVar3 + -1;" statement_identifier : (expression_statement "iVar7 = iVar3 + -1;" (assignment_expression "iVar7 = iVar3 + -1" identifier = (binary_expression "iVar3 + -1" identifier + number_literal)) ;)) (expression_statement "lVar1 = (ulonglong)uVar9 * (ulonglong)pmVar5[iVar7];" (assignment_expression "lVar1 = (ulonglong)uVar9 * (ulonglong)pmVar5[iVar7]" identifier = (binary_expression "(ulonglong)uVar9 * (ulonglong)pmVar5[iVar7]" (cast_expression "(ulonglong)uVar9" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)pmVar5[iVar7]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "pmVar5[iVar7]" identifier [ identifier ])))) ;) (expression_statement "pmVar8 = pmVar5 + iVar3;" (assignment_expression "pmVar8 = pmVar5 + iVar3" identifier = (binary_expression "pmVar5 + iVar3" identifier + identifier)) ;) (while_statement "while( true ) {\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      iVar7 = iVar7 + -1;\n      pcVar24 = *(code **)(puVar23 + 0x7a4a4);\n      if (iVar7 == -1) break;\n      puVar10 = pmVar8 + -2;\n      pmVar8 = pmVar8 + -1;\n      lVar1 = lVar1 + ((ulonglong)uVar9 * (ulonglong)*puVar10 >> 0x20);\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      if ((int)lVar1 != -1) {\n        pcVar24 = *(code **)(puVar23 + 0x7a4a4);\n        break;\n      }\n      lVar1 = CONCAT44(uVar15,(int)((ulonglong)uVar9 * (ulonglong)*puVar10));\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      iVar7 = iVar7 + -1;\n      pcVar24 = *(code **)(puVar23 + 0x7a4a4);\n      if (iVar7 == -1) break;\n      puVar10 = pmVar8 + -2;\n      pmVar8 = pmVar8 + -1;\n      lVar1 = lVar1 + ((ulonglong)uVar9 * (ulonglong)*puVar10 >> 0x20);\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      if ((int)lVar1 != -1) {\n        pcVar24 = *(code **)(puVar23 + 0x7a4a4);\n        break;\n      }\n      lVar1 = CONCAT44(uVar15,(int)((ulonglong)uVar9 * (ulonglong)*puVar10));\n    }" { (expression_statement "uVar15 = (uint)((ulonglong)lVar1 >> 0x20);" (assignment_expression "uVar15 = (uint)((ulonglong)lVar1 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)lVar1 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)lVar1 >> 0x20)" ( (binary_expression "(ulonglong)lVar1 >> 0x20" (cast_expression "(ulonglong)lVar1" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (expression_statement "iVar7 = iVar7 + -1;" (assignment_expression "iVar7 = iVar7 + -1" identifier = (binary_expression "iVar7 + -1" identifier + number_literal)) ;) (expression_statement "pcVar24 = *(code **)(puVar23 + 0x7a4a4);" (assignment_expression "pcVar24 = *(code **)(puVar23 + 0x7a4a4)" identifier = (pointer_expression "*(code **)(puVar23 + 0x7a4a4)" * (cast_expression "(code **)(puVar23 + 0x7a4a4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar23 + 0x7a4a4)" ( (binary_expression "puVar23 + 0x7a4a4" identifier + number_literal) ))))) ;) (if_statement "if (iVar7 == -1) break;" if (parenthesized_expression "(iVar7 == -1)" ( (binary_expression "iVar7 == -1" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "puVar10 = pmVar8 + -2;" (assignment_expression "puVar10 = pmVar8 + -2" identifier = (binary_expression "pmVar8 + -2" identifier + number_literal)) ;) (expression_statement "pmVar8 = pmVar8 + -1;" (assignment_expression "pmVar8 = pmVar8 + -1" identifier = (binary_expression "pmVar8 + -1" identifier + number_literal)) ;) (expression_statement "lVar1 = lVar1 + ((ulonglong)uVar9 * (ulonglong)*puVar10 >> 0x20);" (assignment_expression "lVar1 = lVar1 + ((ulonglong)uVar9 * (ulonglong)*puVar10 >> 0x20)" identifier = (binary_expression "lVar1 + ((ulonglong)uVar9 * (ulonglong)*puVar10 >> 0x20)" identifier + (parenthesized_expression "((ulonglong)uVar9 * (ulonglong)*puVar10 >> 0x20)" ( (binary_expression "(ulonglong)uVar9 * (ulonglong)*puVar10 >> 0x20" (binary_expression "(ulonglong)uVar9 * (ulonglong)*puVar10" (binary_expression "(ulonglong)uVar9 * (ulonglong)" (cast_expression "(ulonglong)uVar9" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (parenthesized_expression "(ulonglong)" ( identifier ))) * identifier) >> number_literal) )))) ;) (expression_statement "uVar15 = (uint)((ulonglong)lVar1 >> 0x20);" (assignment_expression "uVar15 = (uint)((ulonglong)lVar1 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)lVar1 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)lVar1 >> 0x20)" ( (binary_expression "(ulonglong)lVar1 >> 0x20" (cast_expression "(ulonglong)lVar1" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (if_statement "if ((int)lVar1 != -1) {\n        pcVar24 = *(code **)(puVar23 + 0x7a4a4);\n        break;\n      }" if (parenthesized_expression "((int)lVar1 != -1)" ( (binary_expression "(int)lVar1 != -1" (cast_expression "(int)lVar1" ( (type_descriptor "int" primitive_type) ) identifier) != number_literal) )) (compound_statement "{\n        pcVar24 = *(code **)(puVar23 + 0x7a4a4);\n        break;\n      }" { (expression_statement "pcVar24 = *(code **)(puVar23 + 0x7a4a4);" (assignment_expression "pcVar24 = *(code **)(puVar23 + 0x7a4a4)" identifier = (pointer_expression "*(code **)(puVar23 + 0x7a4a4)" * (cast_expression "(code **)(puVar23 + 0x7a4a4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar23 + 0x7a4a4)" ( (binary_expression "puVar23 + 0x7a4a4" identifier + number_literal) ))))) ;) (break_statement "break;" break ;) })) (expression_statement "lVar1 = CONCAT44(uVar15,(int)((ulonglong)uVar9 * (ulonglong)*puVar10));" (assignment_expression "lVar1 = CONCAT44(uVar15,(int)((ulonglong)uVar9 * (ulonglong)*puVar10))" identifier = (call_expression "CONCAT44(uVar15,(int)((ulonglong)uVar9 * (ulonglong)*puVar10))" identifier (argument_list "(uVar15,(int)((ulonglong)uVar9 * (ulonglong)*puVar10))" ( identifier , (cast_expression "(int)((ulonglong)uVar9 * (ulonglong)*puVar10)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)uVar9 * (ulonglong)*puVar10)" ( (binary_expression "(ulonglong)uVar9 * (ulonglong)*puVar10" (binary_expression "(ulonglong)uVar9 * (ulonglong)" (cast_expression "(ulonglong)uVar9" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (parenthesized_expression "(ulonglong)" ( identifier ))) * identifier) ))) )))) ;) })) (expression_statement "uVar4 = (*pcVar24)(puVar21,pmVar5 + iVar3,ptVar16);" (assignment_expression "uVar4 = (*pcVar24)(puVar21,pmVar5 + iVar3,ptVar16)" identifier = (call_expression "(*pcVar24)(puVar21,pmVar5 + iVar3,ptVar16)" (parenthesized_expression "(*pcVar24)" ( (pointer_expression "*pcVar24" * identifier) )) (argument_list "(puVar21,pmVar5 + iVar3,ptVar16)" ( identifier , (binary_expression "pmVar5 + iVar3" identifier + identifier) , identifier )))) ;) (expression_statement "uVar18 = *puVar21;" (assignment_expression "uVar18 = *puVar21" identifier = (pointer_expression "*puVar21" * identifier)) ;) (expression_statement "*puVar21 = uVar15 + uVar18;" (assignment_expression "*puVar21 = uVar15 + uVar18" (pointer_expression "*puVar21" * identifier) = (binary_expression "uVar15 + uVar18" identifier + identifier)) ;) (if_statement "if (uVar15 + uVar18 < uVar15) {\n      if ((int)ptVar16 < 2) {\nLAB_0001cd34:\n        uVar15 = (uint)(uVar4 + 1 != 0);\n        sVar17 = (int)&ptVar16->next + uVar15;\n        puVar21[(int)ptVar16] = uVar4 + 1;\n        ptVar6[1].next = (tmp_reentrant_t *)(p_Var14->_mp_exp + uVar15);\n        goto joined_r0x0001cddc;\n      }\n      uVar15 = puVar21[1];\n      puVar21[1] = uVar15 + 1;\n      if (uVar15 + 1 == 0) {\n        ptVar12 = (tmp_reentrant_t *)0x2;\n        puVar10 = puVar21 + 2;\n        do {\n          if (ptVar12 == ptVar16) goto LAB_0001cd34;\n          uVar15 = *puVar10;\n          ptVar12 = (tmp_reentrant_t *)((int)&ptVar12->next + 1);\n          *puVar10 = uVar15 + 1;\n          puVar10 = puVar10 + 1;\n        } while (uVar15 + 1 == 0);\n      }\n    }" if (parenthesized_expression "(uVar15 + uVar18 < uVar15)" ( (binary_expression "uVar15 + uVar18 < uVar15" (binary_expression "uVar15 + uVar18" identifier + identifier) < identifier) )) (compound_statement "{\n      if ((int)ptVar16 < 2) {\nLAB_0001cd34:\n        uVar15 = (uint)(uVar4 + 1 != 0);\n        sVar17 = (int)&ptVar16->next + uVar15;\n        puVar21[(int)ptVar16] = uVar4 + 1;\n        ptVar6[1].next = (tmp_reentrant_t *)(p_Var14->_mp_exp + uVar15);\n        goto joined_r0x0001cddc;\n      }\n      uVar15 = puVar21[1];\n      puVar21[1] = uVar15 + 1;\n      if (uVar15 + 1 == 0) {\n        ptVar12 = (tmp_reentrant_t *)0x2;\n        puVar10 = puVar21 + 2;\n        do {\n          if (ptVar12 == ptVar16) goto LAB_0001cd34;\n          uVar15 = *puVar10;\n          ptVar12 = (tmp_reentrant_t *)((int)&ptVar12->next + 1);\n          *puVar10 = uVar15 + 1;\n          puVar10 = puVar10 + 1;\n        } while (uVar15 + 1 == 0);\n      }\n    }" { (if_statement "if ((int)ptVar16 < 2) {\nLAB_0001cd34:\n        uVar15 = (uint)(uVar4 + 1 != 0);\n        sVar17 = (int)&ptVar16->next + uVar15;\n        puVar21[(int)ptVar16] = uVar4 + 1;\n        ptVar6[1].next = (tmp_reentrant_t *)(p_Var14->_mp_exp + uVar15);\n        goto joined_r0x0001cddc;\n      }" if (parenthesized_expression "((int)ptVar16 < 2)" ( (binary_expression "(int)ptVar16 < 2" (cast_expression "(int)ptVar16" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\nLAB_0001cd34:\n        uVar15 = (uint)(uVar4 + 1 != 0);\n        sVar17 = (int)&ptVar16->next + uVar15;\n        puVar21[(int)ptVar16] = uVar4 + 1;\n        ptVar6[1].next = (tmp_reentrant_t *)(p_Var14->_mp_exp + uVar15);\n        goto joined_r0x0001cddc;\n      }" { (labeled_statement "LAB_0001cd34:\n        uVar15 = (uint)(uVar4 + 1 != 0);" statement_identifier : (expression_statement "uVar15 = (uint)(uVar4 + 1 != 0);" (assignment_expression "uVar15 = (uint)(uVar4 + 1 != 0)" identifier = (call_expression "(uint)(uVar4 + 1 != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 + 1 != 0)" ( (binary_expression "uVar4 + 1 != 0" (binary_expression "uVar4 + 1" identifier + number_literal) != number_literal) )))) ;)) (expression_statement "sVar17 = (int)&ptVar16->next + uVar15;" (assignment_expression "sVar17 = (int)&ptVar16->next + uVar15" identifier = (binary_expression "(int)&ptVar16->next + uVar15" (cast_expression "(int)&ptVar16->next" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&ptVar16->next" & (field_expression "ptVar16->next" identifier -> field_identifier))) + identifier)) ;) (expression_statement "puVar21[(int)ptVar16] = uVar4 + 1;" (assignment_expression "puVar21[(int)ptVar16] = uVar4 + 1" (subscript_expression "puVar21[(int)ptVar16]" identifier [ (cast_expression "(int)ptVar16" ( (type_descriptor "int" primitive_type) ) identifier) ]) = (binary_expression "uVar4 + 1" identifier + number_literal)) ;) (expression_statement "ptVar6[1].next = (tmp_reentrant_t *)(p_Var14->_mp_exp + uVar15);" (assignment_expression "ptVar6[1].next = (tmp_reentrant_t *)(p_Var14->_mp_exp + uVar15)" (field_expression "ptVar6[1].next" (subscript_expression "ptVar6[1]" identifier [ number_literal ]) . field_identifier) = (cast_expression "(tmp_reentrant_t *)(p_Var14->_mp_exp + uVar15)" ( (type_descriptor "tmp_reentrant_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(p_Var14->_mp_exp + uVar15)" ( (binary_expression "p_Var14->_mp_exp + uVar15" (field_expression "p_Var14->_mp_exp" identifier -> field_identifier) + identifier) )))) ;) (goto_statement "goto joined_r0x0001cddc;" goto statement_identifier ;) })) (expression_statement "uVar15 = puVar21[1];" (assignment_expression "uVar15 = puVar21[1]" identifier = (subscript_expression "puVar21[1]" identifier [ number_literal ])) ;) (expression_statement "puVar21[1] = uVar15 + 1;" (assignment_expression "puVar21[1] = uVar15 + 1" (subscript_expression "puVar21[1]" identifier [ number_literal ]) = (binary_expression "uVar15 + 1" identifier + number_literal)) ;) (if_statement "if (uVar15 + 1 == 0) {\n        ptVar12 = (tmp_reentrant_t *)0x2;\n        puVar10 = puVar21 + 2;\n        do {\n          if (ptVar12 == ptVar16) goto LAB_0001cd34;\n          uVar15 = *puVar10;\n          ptVar12 = (tmp_reentrant_t *)((int)&ptVar12->next + 1);\n          *puVar10 = uVar15 + 1;\n          puVar10 = puVar10 + 1;\n        } while (uVar15 + 1 == 0);\n      }" if (parenthesized_expression "(uVar15 + 1 == 0)" ( (binary_expression "uVar15 + 1 == 0" (binary_expression "uVar15 + 1" identifier + number_literal) == number_literal) )) (compound_statement "{\n        ptVar12 = (tmp_reentrant_t *)0x2;\n        puVar10 = puVar21 + 2;\n        do {\n          if (ptVar12 == ptVar16) goto LAB_0001cd34;\n          uVar15 = *puVar10;\n          ptVar12 = (tmp_reentrant_t *)((int)&ptVar12->next + 1);\n          *puVar10 = uVar15 + 1;\n          puVar10 = puVar10 + 1;\n        } while (uVar15 + 1 == 0);\n      }" { (expression_statement "ptVar12 = (tmp_reentrant_t *)0x2;" (assignment_expression "ptVar12 = (tmp_reentrant_t *)0x2" identifier = (cast_expression "(tmp_reentrant_t *)0x2" ( (type_descriptor "tmp_reentrant_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "puVar10 = puVar21 + 2;" (assignment_expression "puVar10 = puVar21 + 2" identifier = (binary_expression "puVar21 + 2" identifier + number_literal)) ;) (do_statement "do {\n          if (ptVar12 == ptVar16) goto LAB_0001cd34;\n          uVar15 = *puVar10;\n          ptVar12 = (tmp_reentrant_t *)((int)&ptVar12->next + 1);\n          *puVar10 = uVar15 + 1;\n          puVar10 = puVar10 + 1;\n        } while (uVar15 + 1 == 0);" do (compound_statement "{\n          if (ptVar12 == ptVar16) goto LAB_0001cd34;\n          uVar15 = *puVar10;\n          ptVar12 = (tmp_reentrant_t *)((int)&ptVar12->next + 1);\n          *puVar10 = uVar15 + 1;\n          puVar10 = puVar10 + 1;\n        }" { (if_statement "if (ptVar12 == ptVar16) goto LAB_0001cd34;" if (parenthesized_expression "(ptVar12 == ptVar16)" ( (binary_expression "ptVar12 == ptVar16" identifier == identifier) )) (goto_statement "goto LAB_0001cd34;" goto statement_identifier ;)) (expression_statement "uVar15 = *puVar10;" (assignment_expression "uVar15 = *puVar10" identifier = (pointer_expression "*puVar10" * identifier)) ;) (expression_statement "ptVar12 = (tmp_reentrant_t *)((int)&ptVar12->next + 1);" (assignment_expression "ptVar12 = (tmp_reentrant_t *)((int)&ptVar12->next + 1)" identifier = (cast_expression "(tmp_reentrant_t *)((int)&ptVar12->next + 1)" ( (type_descriptor "tmp_reentrant_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&ptVar12->next + 1)" ( (binary_expression "(int)&ptVar12->next + 1" (cast_expression "(int)&ptVar12->next" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&ptVar12->next" & (field_expression "ptVar12->next" identifier -> field_identifier))) + number_literal) )))) ;) (expression_statement "*puVar10 = uVar15 + 1;" (assignment_expression "*puVar10 = uVar15 + 1" (pointer_expression "*puVar10" * identifier) = (binary_expression "uVar15 + 1" identifier + number_literal)) ;) (expression_statement "puVar10 = puVar10 + 1;" (assignment_expression "puVar10 = puVar10 + 1" identifier = (binary_expression "puVar10 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar15 + 1 == 0)" ( (binary_expression "uVar15 + 1 == 0" (binary_expression "uVar15 + 1" identifier + number_literal) == number_literal) )) ;) })) })) }) (else_clause "else {\n    ptVar16 = ptVar6->next;\n    pmVar5 = p_Var14->_mp_d;\n    iVar3 = (int)ptVar19 - (int)ptVar16;\n    puVar21 = (uint *)ptVar6[1].size;\n    ptVar12 = ptVar19;\n    if (0 < iVar3) goto LAB_0001cc68;\nLAB_0001cda8:\n    ptVar16 = ptVar12;\n    uVar4 = (**(code **)(puVar23 + 0x7a4a4))(puVar21,pmVar5,ptVar16);\n  }" else (compound_statement "{\n    ptVar16 = ptVar6->next;\n    pmVar5 = p_Var14->_mp_d;\n    iVar3 = (int)ptVar19 - (int)ptVar16;\n    puVar21 = (uint *)ptVar6[1].size;\n    ptVar12 = ptVar19;\n    if (0 < iVar3) goto LAB_0001cc68;\nLAB_0001cda8:\n    ptVar16 = ptVar12;\n    uVar4 = (**(code **)(puVar23 + 0x7a4a4))(puVar21,pmVar5,ptVar16);\n  }" { (expression_statement "ptVar16 = ptVar6->next;" (assignment_expression "ptVar16 = ptVar6->next" identifier = (field_expression "ptVar6->next" identifier -> field_identifier)) ;) (expression_statement "pmVar5 = p_Var14->_mp_d;" (assignment_expression "pmVar5 = p_Var14->_mp_d" identifier = (field_expression "p_Var14->_mp_d" identifier -> field_identifier)) ;) (expression_statement "iVar3 = (int)ptVar19 - (int)ptVar16;" (assignment_expression "iVar3 = (int)ptVar19 - (int)ptVar16" identifier = (binary_expression "(int)ptVar19 - (int)ptVar16" (cast_expression "(int)ptVar19" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)ptVar16" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "puVar21 = (uint *)ptVar6[1].size;" (assignment_expression "puVar21 = (uint *)ptVar6[1].size" identifier = (cast_expression "(uint *)ptVar6[1].size" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "ptVar6[1].size" (subscript_expression "ptVar6[1]" identifier [ number_literal ]) . field_identifier))) ;) (expression_statement "ptVar12 = ptVar19;" (assignment_expression "ptVar12 = ptVar19" identifier = identifier) ;) (if_statement "if (0 < iVar3) goto LAB_0001cc68;" if (parenthesized_expression "(0 < iVar3)" ( (binary_expression "0 < iVar3" number_literal < identifier) )) (goto_statement "goto LAB_0001cc68;" goto statement_identifier ;)) (labeled_statement "LAB_0001cda8:\n    ptVar16 = ptVar12;" statement_identifier : (expression_statement "ptVar16 = ptVar12;" (assignment_expression "ptVar16 = ptVar12" identifier = identifier) ;)) (expression_statement "uVar4 = (**(code **)(puVar23 + 0x7a4a4))(puVar21,pmVar5,ptVar16);" (assignment_expression "uVar4 = (**(code **)(puVar23 + 0x7a4a4))(puVar21,pmVar5,ptVar16)" identifier = (call_expression "(**(code **)(puVar23 + 0x7a4a4))(puVar21,pmVar5,ptVar16)" (parenthesized_expression "(**(code **)(puVar23 + 0x7a4a4))" ( (pointer_expression "**(code **)(puVar23 + 0x7a4a4)" * (pointer_expression "*(code **)(puVar23 + 0x7a4a4)" * (cast_expression "(code **)(puVar23 + 0x7a4a4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar23 + 0x7a4a4)" ( (binary_expression "puVar23 + 0x7a4a4" identifier + number_literal) ))))) )) (argument_list "(puVar21,pmVar5,ptVar16)" ( identifier , identifier , identifier )))) ;) }))) (expression_statement "sVar17 = (int)&ptVar16->next + (uint)(uVar4 != 0);" (assignment_expression "sVar17 = (int)&ptVar16->next + (uint)(uVar4 != 0)" identifier = (binary_expression "(int)&ptVar16->next + (uint)(uVar4 != 0)" (cast_expression "(int)&ptVar16->next" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&ptVar16->next" & (field_expression "ptVar16->next" identifier -> field_identifier))) + (call_expression "(uint)(uVar4 != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 != 0)" ( (binary_expression "uVar4 != 0" identifier != number_literal) ))))) ;) (expression_statement "puVar21[(int)ptVar16] = uVar4;" (assignment_expression "puVar21[(int)ptVar16] = uVar4" (subscript_expression "puVar21[(int)ptVar16]" identifier [ (cast_expression "(int)ptVar16" ( (type_descriptor "int" primitive_type) ) identifier) ]) = identifier) ;) (expression_statement "ptVar6[1].next = (tmp_reentrant_t *)(p_Var14->_mp_exp + (uint)(uVar4 != 0));" (assignment_expression "ptVar6[1].next = (tmp_reentrant_t *)(p_Var14->_mp_exp + (uint)(uVar4 != 0))" (field_expression "ptVar6[1].next" (subscript_expression "ptVar6[1]" identifier [ number_literal ]) . field_identifier) = (cast_expression "(tmp_reentrant_t *)(p_Var14->_mp_exp + (uint)(uVar4 != 0))" ( (type_descriptor "tmp_reentrant_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(p_Var14->_mp_exp + (uint)(uVar4 != 0))" ( (binary_expression "p_Var14->_mp_exp + (uint)(uVar4 != 0)" (field_expression "p_Var14->_mp_exp" identifier -> field_identifier) + (call_expression "(uint)(uVar4 != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar4 != 0)" ( (binary_expression "uVar4 != 0" identifier != number_literal) )))) )))) ;) (labeled_statement "joined_r0x0001cddc:\n  if ((int)ptVar19 < 0) {\n    sVar17 = -sVar17;\n  }" statement_identifier : (if_statement "if ((int)ptVar19 < 0) {\n    sVar17 = -sVar17;\n  }" if (parenthesized_expression "((int)ptVar19 < 0)" ( (binary_expression "(int)ptVar19 < 0" (cast_expression "(int)ptVar19" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n    sVar17 = -sVar17;\n  }" { (expression_statement "sVar17 = -sVar17;" (assignment_expression "sVar17 = -sVar17" identifier = (unary_expression "-sVar17" - identifier)) ;) }))) (expression_statement "ptVar6->size = sVar17;" (assignment_expression "ptVar6->size = sVar17" (field_expression "ptVar6->size" identifier -> field_identifier) = identifier) ;) (return_statement "return;" return ;) })))
(translation_unit "void __gmpf_mul(uint *param_1,undefined4 *param_2,int param_3)\n\n{\n  longlong lVar1;\n  ulonglong uVar2;\n  undefined4 *puVar3;\n  undefined4 *puVar4;\n  int iVar5;\n  uint uVar6;\n  int iVar7;\n  int *piVar8;\n  int iVar9;\n  uint uVar10;\n  uint *puVar11;\n  undefined4 *puVar12;\n  int iVar13;\n  undefined4 *puVar14;\n  uint uVar15;\n  int iVar16;\n  uint uVar17;\n  int iVar18;\n  uint uVar19;\n  uint *puVar20;\n  uint uVar21;\n  undefined *puVar22;\n  code *pcVar23;\n  undefined1 *puVar24;\n  undefined4 uVar25;\n  undefined1 auStack_60 [24];\n  int *local_30;\n  int local_2c;\n  \n  puVar22 = PTR___stack_chk_guard_00097540;\n  puVar24 = auStack_60;\n  uVar17 = param_2[1];\n  local_2c = *(int *)PTR___stack_chk_guard_00097540;\n  uVar15 = *param_1;\n  uVar19 = *(uint *)(param_3 + 4);\n  uVar6 = -uVar17;\n  if (-1 < (int)uVar17) {\n    uVar6 = uVar17;\n  }\n  uVar10 = uVar19;\n  if ((int)uVar19 < 0) {\n    uVar10 = -uVar19;\n  }\n  puVar14 = (undefined4 *)param_2[3];\n  puVar12 = *(undefined4 **)(param_3 + 0xc);\n  uVar21 = uVar6;\n  if ((int *)(uint)((int)uVar15 < (int)uVar6) != (int *)0x0) {\n    puVar14 = puVar14 + (uVar6 - uVar15);\n    uVar21 = uVar15;\n  }\n  if ((int)uVar15 < (int)uVar10) {\n    puVar12 = puVar12 + (uVar10 - uVar15);\n    uVar10 = uVar15;\n  }\n  if ((uVar21 == 0) || (uVar10 == 0)) {\n    param_1[1] = 0;\n    param_1[2] = 0;\n    piVar8 = (int *)(uint)((int)uVar15 < (int)uVar6);\n    puVar14 = param_2;\n    puVar24 = auStack_60;\n  }\n  else {\n    uVar6 = (uVar21 + uVar10) * 4;\n    local_30 = (int *)0x0;\n    if (uVar6 < 0x7f01) {\n      iVar18 = -(uVar6 + 7 & 0xfffffff8);\n      puVar24 = auStack_60 + iVar18;\n      puVar4 = (undefined4 *)(&stack0xffffffb8 + iVar18);\n    }\n    else {\n      puVar4 = (undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30);\n    }\n    if ((int)uVar21 < (int)uVar10) {\n      *(uint *)(puVar24 + 0x10) = uVar21;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar12,uVar10,puVar14);\n      puVar14 = puVar12;\n    }\n    else {\n      *(uint *)(puVar24 + 0x10) = uVar10;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12);\n    }\n    uVar10 = (uVar21 + uVar10) - (uint)(iVar18 == 0);\n    uVar15 = uVar15 + 1;\n    if ((int)uVar15 < (int)uVar10) {\n      puVar4 = puVar4 + (uVar10 - uVar15);\n      uVar10 = uVar15;\n    }\n    iVar13 = uVar10 - 1;\n    if (uVar10 != 0) {\n      puVar3 = (undefined4 *)param_1[3];\n      uVar25 = *puVar4;\n      puVar12 = puVar3;\n      if (iVar13 != 0) {\n        do {\n          puVar4 = puVar4 + 1;\n          puVar14 = puVar12 + 1;\n          *puVar12 = uVar25;\n          iVar13 = iVar13 + -1;\n          uVar25 = *puVar4;\n          puVar12 = puVar14;\n        } while (iVar13 != 0);\n        puVar3 = puVar3 + (uVar10 - 1);\n      }\n      *puVar3 = uVar25;\n    }\n    uVar17 = uVar17 ^ uVar19;\n    param_1[2] = (param_2[2] + *(int *)(param_3 + 8)) - (uint)(iVar18 == 0);\n    if ((int)uVar17 < 0) {\n      uVar10 = -uVar10;\n    }\n    param_1[1] = uVar10;\n    piVar8 = local_30;\n    if (local_30 != (int *)0x0) {\n      (*(code *)PTR___gmp_tmp_reentrant_free_00097614)();\n    }\n  }\n  if (local_2c == *(int *)puVar22) {\n    return;\n  }\n  uVar25 = 0x1cbf4;\n  puVar22 = PTR___stack_chk_fail_000974d0;\n  (*(code *)PTR___stack_chk_fail_000974d0)();\n  *(undefined **)(puVar24 + -0x28) = puVar22 + 0x82440;\n  *(uint **)(puVar24 + -0x14) = param_1;\n  *(undefined4 *)(puVar24 + -4) = uVar25;\n  *(undefined4 **)(puVar24 + -8) = param_2;\n  *(int *)(puVar24 + -0xc) = param_3;\n  *(uint *)(puVar24 + -0x10) = uVar19;\n  *(uint *)(puVar24 + -0x18) = uVar17;\n  *(uint *)(puVar24 + -0x1c) = uVar15;\n  iVar18 = puVar14[1];\n  if ((uVar10 == 0) || (iVar18 == 0)) {\n    piVar8[1] = 0;\n    piVar8[2] = 0;\n    return;\n  }\n  if (iVar18 < 0) {\n    iVar16 = *piVar8;\n    iVar7 = puVar14[3];\n    puVar20 = (uint *)piVar8[3];\n    iVar5 = -iVar18 - iVar16;\n    iVar13 = -iVar18;\n    if (iVar5 < 1) goto LAB_0001cda8;\nLAB_0001cc68:\n    iVar9 = iVar5 + -1;\n    iVar5 = iVar7 + iVar5 * 4;\n    lVar1 = (ulonglong)uVar10 * (ulonglong)*(uint *)(iVar7 + iVar9 * 4);\n    iVar13 = iVar5;\n    while( true ) {\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      iVar9 = iVar9 + -1;\n      pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n      if (iVar9 == -1) break;\n      puVar11 = (uint *)(iVar13 + -8);\n      iVar13 = iVar13 + -4;\n      uVar2 = (ulonglong)uVar10 * (ulonglong)*puVar11;\n      lVar1 = lVar1 + (uVar2 >> 0x20);\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      if ((int)lVar1 != -1) {\n        pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n        break;\n      }\n      lVar1 = CONCAT44(uVar15,(int)uVar2);\n    }\n    uVar6 = (*pcVar23)(puVar20,iVar5,iVar16);\n    uVar17 = *puVar20;\n    *puVar20 = uVar15 + uVar17;\n    if (uVar15 + uVar17 < uVar15) {\n      if (iVar16 < 2) {\nLAB_0001cd34:\n        uVar15 = (uint)(uVar6 + 1 != 0);\n        iVar13 = iVar16 + uVar15;\n        puVar20[iVar16] = uVar6 + 1;\n        piVar8[2] = puVar14[2] + uVar15;\n        goto joined_r0x0001cddc;\n      }\n      uVar15 = puVar20[1];\n      puVar20[1] = uVar15 + 1;\n      if (uVar15 + 1 == 0) {\n        iVar13 = 2;\n        puVar11 = puVar20 + 2;\n        do {\n          if (iVar13 == iVar16) goto LAB_0001cd34;\n          uVar15 = *puVar11;\n          iVar13 = iVar13 + 1;\n          *puVar11 = uVar15 + 1;\n          puVar11 = puVar11 + 1;\n        } while (uVar15 + 1 == 0);\n      }\n    }\n  }\n  else {\n    iVar16 = *piVar8;\n    iVar7 = puVar14[3];\n    iVar5 = iVar18 - iVar16;\n    puVar20 = (uint *)piVar8[3];\n    iVar13 = iVar18;\n    if (0 < iVar5) goto LAB_0001cc68;\nLAB_0001cda8:\n    iVar16 = iVar13;\n    uVar6 = (**(code **)(puVar22 + 0x7a4a4))(puVar20,iVar7,iVar16);\n  }\n  iVar13 = iVar16 + (uint)(uVar6 != 0);\n  puVar20[iVar16] = uVar6;\n  piVar8[2] = puVar14[2] + (uint)(uVar6 != 0);\njoined_r0x0001cddc:\n  if (iVar18 < 0) {\n    iVar13 = -iVar13;\n  }\n  piVar8[1] = iVar13;\n  return;\n}\n\n" (function_definition "void __gmpf_mul(uint *param_1,undefined4 *param_2,int param_3)\n\n{\n  longlong lVar1;\n  ulonglong uVar2;\n  undefined4 *puVar3;\n  undefined4 *puVar4;\n  int iVar5;\n  uint uVar6;\n  int iVar7;\n  int *piVar8;\n  int iVar9;\n  uint uVar10;\n  uint *puVar11;\n  undefined4 *puVar12;\n  int iVar13;\n  undefined4 *puVar14;\n  uint uVar15;\n  int iVar16;\n  uint uVar17;\n  int iVar18;\n  uint uVar19;\n  uint *puVar20;\n  uint uVar21;\n  undefined *puVar22;\n  code *pcVar23;\n  undefined1 *puVar24;\n  undefined4 uVar25;\n  undefined1 auStack_60 [24];\n  int *local_30;\n  int local_2c;\n  \n  puVar22 = PTR___stack_chk_guard_00097540;\n  puVar24 = auStack_60;\n  uVar17 = param_2[1];\n  local_2c = *(int *)PTR___stack_chk_guard_00097540;\n  uVar15 = *param_1;\n  uVar19 = *(uint *)(param_3 + 4);\n  uVar6 = -uVar17;\n  if (-1 < (int)uVar17) {\n    uVar6 = uVar17;\n  }\n  uVar10 = uVar19;\n  if ((int)uVar19 < 0) {\n    uVar10 = -uVar19;\n  }\n  puVar14 = (undefined4 *)param_2[3];\n  puVar12 = *(undefined4 **)(param_3 + 0xc);\n  uVar21 = uVar6;\n  if ((int *)(uint)((int)uVar15 < (int)uVar6) != (int *)0x0) {\n    puVar14 = puVar14 + (uVar6 - uVar15);\n    uVar21 = uVar15;\n  }\n  if ((int)uVar15 < (int)uVar10) {\n    puVar12 = puVar12 + (uVar10 - uVar15);\n    uVar10 = uVar15;\n  }\n  if ((uVar21 == 0) || (uVar10 == 0)) {\n    param_1[1] = 0;\n    param_1[2] = 0;\n    piVar8 = (int *)(uint)((int)uVar15 < (int)uVar6);\n    puVar14 = param_2;\n    puVar24 = auStack_60;\n  }\n  else {\n    uVar6 = (uVar21 + uVar10) * 4;\n    local_30 = (int *)0x0;\n    if (uVar6 < 0x7f01) {\n      iVar18 = -(uVar6 + 7 & 0xfffffff8);\n      puVar24 = auStack_60 + iVar18;\n      puVar4 = (undefined4 *)(&stack0xffffffb8 + iVar18);\n    }\n    else {\n      puVar4 = (undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30);\n    }\n    if ((int)uVar21 < (int)uVar10) {\n      *(uint *)(puVar24 + 0x10) = uVar21;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar12,uVar10,puVar14);\n      puVar14 = puVar12;\n    }\n    else {\n      *(uint *)(puVar24 + 0x10) = uVar10;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12);\n    }\n    uVar10 = (uVar21 + uVar10) - (uint)(iVar18 == 0);\n    uVar15 = uVar15 + 1;\n    if ((int)uVar15 < (int)uVar10) {\n      puVar4 = puVar4 + (uVar10 - uVar15);\n      uVar10 = uVar15;\n    }\n    iVar13 = uVar10 - 1;\n    if (uVar10 != 0) {\n      puVar3 = (undefined4 *)param_1[3];\n      uVar25 = *puVar4;\n      puVar12 = puVar3;\n      if (iVar13 != 0) {\n        do {\n          puVar4 = puVar4 + 1;\n          puVar14 = puVar12 + 1;\n          *puVar12 = uVar25;\n          iVar13 = iVar13 + -1;\n          uVar25 = *puVar4;\n          puVar12 = puVar14;\n        } while (iVar13 != 0);\n        puVar3 = puVar3 + (uVar10 - 1);\n      }\n      *puVar3 = uVar25;\n    }\n    uVar17 = uVar17 ^ uVar19;\n    param_1[2] = (param_2[2] + *(int *)(param_3 + 8)) - (uint)(iVar18 == 0);\n    if ((int)uVar17 < 0) {\n      uVar10 = -uVar10;\n    }\n    param_1[1] = uVar10;\n    piVar8 = local_30;\n    if (local_30 != (int *)0x0) {\n      (*(code *)PTR___gmp_tmp_reentrant_free_00097614)();\n    }\n  }\n  if (local_2c == *(int *)puVar22) {\n    return;\n  }\n  uVar25 = 0x1cbf4;\n  puVar22 = PTR___stack_chk_fail_000974d0;\n  (*(code *)PTR___stack_chk_fail_000974d0)();\n  *(undefined **)(puVar24 + -0x28) = puVar22 + 0x82440;\n  *(uint **)(puVar24 + -0x14) = param_1;\n  *(undefined4 *)(puVar24 + -4) = uVar25;\n  *(undefined4 **)(puVar24 + -8) = param_2;\n  *(int *)(puVar24 + -0xc) = param_3;\n  *(uint *)(puVar24 + -0x10) = uVar19;\n  *(uint *)(puVar24 + -0x18) = uVar17;\n  *(uint *)(puVar24 + -0x1c) = uVar15;\n  iVar18 = puVar14[1];\n  if ((uVar10 == 0) || (iVar18 == 0)) {\n    piVar8[1] = 0;\n    piVar8[2] = 0;\n    return;\n  }\n  if (iVar18 < 0) {\n    iVar16 = *piVar8;\n    iVar7 = puVar14[3];\n    puVar20 = (uint *)piVar8[3];\n    iVar5 = -iVar18 - iVar16;\n    iVar13 = -iVar18;\n    if (iVar5 < 1) goto LAB_0001cda8;\nLAB_0001cc68:\n    iVar9 = iVar5 + -1;\n    iVar5 = iVar7 + iVar5 * 4;\n    lVar1 = (ulonglong)uVar10 * (ulonglong)*(uint *)(iVar7 + iVar9 * 4);\n    iVar13 = iVar5;\n    while( true ) {\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      iVar9 = iVar9 + -1;\n      pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n      if (iVar9 == -1) break;\n      puVar11 = (uint *)(iVar13 + -8);\n      iVar13 = iVar13 + -4;\n      uVar2 = (ulonglong)uVar10 * (ulonglong)*puVar11;\n      lVar1 = lVar1 + (uVar2 >> 0x20);\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      if ((int)lVar1 != -1) {\n        pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n        break;\n      }\n      lVar1 = CONCAT44(uVar15,(int)uVar2);\n    }\n    uVar6 = (*pcVar23)(puVar20,iVar5,iVar16);\n    uVar17 = *puVar20;\n    *puVar20 = uVar15 + uVar17;\n    if (uVar15 + uVar17 < uVar15) {\n      if (iVar16 < 2) {\nLAB_0001cd34:\n        uVar15 = (uint)(uVar6 + 1 != 0);\n        iVar13 = iVar16 + uVar15;\n        puVar20[iVar16] = uVar6 + 1;\n        piVar8[2] = puVar14[2] + uVar15;\n        goto joined_r0x0001cddc;\n      }\n      uVar15 = puVar20[1];\n      puVar20[1] = uVar15 + 1;\n      if (uVar15 + 1 == 0) {\n        iVar13 = 2;\n        puVar11 = puVar20 + 2;\n        do {\n          if (iVar13 == iVar16) goto LAB_0001cd34;\n          uVar15 = *puVar11;\n          iVar13 = iVar13 + 1;\n          *puVar11 = uVar15 + 1;\n          puVar11 = puVar11 + 1;\n        } while (uVar15 + 1 == 0);\n      }\n    }\n  }\n  else {\n    iVar16 = *piVar8;\n    iVar7 = puVar14[3];\n    iVar5 = iVar18 - iVar16;\n    puVar20 = (uint *)piVar8[3];\n    iVar13 = iVar18;\n    if (0 < iVar5) goto LAB_0001cc68;\nLAB_0001cda8:\n    iVar16 = iVar13;\n    uVar6 = (**(code **)(puVar22 + 0x7a4a4))(puVar20,iVar7,iVar16);\n  }\n  iVar13 = iVar16 + (uint)(uVar6 != 0);\n  puVar20[iVar16] = uVar6;\n  piVar8[2] = puVar14[2] + (uint)(uVar6 != 0);\njoined_r0x0001cddc:\n  if (iVar18 < 0) {\n    iVar13 = -iVar13;\n  }\n  piVar8[1] = iVar13;\n  return;\n}" primitive_type (function_declarator "__gmpf_mul(uint *param_1,undefined4 *param_2,int param_3)" identifier (parameter_list "(uint *param_1,undefined4 *param_2,int param_3)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined4 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  longlong lVar1;\n  ulonglong uVar2;\n  undefined4 *puVar3;\n  undefined4 *puVar4;\n  int iVar5;\n  uint uVar6;\n  int iVar7;\n  int *piVar8;\n  int iVar9;\n  uint uVar10;\n  uint *puVar11;\n  undefined4 *puVar12;\n  int iVar13;\n  undefined4 *puVar14;\n  uint uVar15;\n  int iVar16;\n  uint uVar17;\n  int iVar18;\n  uint uVar19;\n  uint *puVar20;\n  uint uVar21;\n  undefined *puVar22;\n  code *pcVar23;\n  undefined1 *puVar24;\n  undefined4 uVar25;\n  undefined1 auStack_60 [24];\n  int *local_30;\n  int local_2c;\n  \n  puVar22 = PTR___stack_chk_guard_00097540;\n  puVar24 = auStack_60;\n  uVar17 = param_2[1];\n  local_2c = *(int *)PTR___stack_chk_guard_00097540;\n  uVar15 = *param_1;\n  uVar19 = *(uint *)(param_3 + 4);\n  uVar6 = -uVar17;\n  if (-1 < (int)uVar17) {\n    uVar6 = uVar17;\n  }\n  uVar10 = uVar19;\n  if ((int)uVar19 < 0) {\n    uVar10 = -uVar19;\n  }\n  puVar14 = (undefined4 *)param_2[3];\n  puVar12 = *(undefined4 **)(param_3 + 0xc);\n  uVar21 = uVar6;\n  if ((int *)(uint)((int)uVar15 < (int)uVar6) != (int *)0x0) {\n    puVar14 = puVar14 + (uVar6 - uVar15);\n    uVar21 = uVar15;\n  }\n  if ((int)uVar15 < (int)uVar10) {\n    puVar12 = puVar12 + (uVar10 - uVar15);\n    uVar10 = uVar15;\n  }\n  if ((uVar21 == 0) || (uVar10 == 0)) {\n    param_1[1] = 0;\n    param_1[2] = 0;\n    piVar8 = (int *)(uint)((int)uVar15 < (int)uVar6);\n    puVar14 = param_2;\n    puVar24 = auStack_60;\n  }\n  else {\n    uVar6 = (uVar21 + uVar10) * 4;\n    local_30 = (int *)0x0;\n    if (uVar6 < 0x7f01) {\n      iVar18 = -(uVar6 + 7 & 0xfffffff8);\n      puVar24 = auStack_60 + iVar18;\n      puVar4 = (undefined4 *)(&stack0xffffffb8 + iVar18);\n    }\n    else {\n      puVar4 = (undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30);\n    }\n    if ((int)uVar21 < (int)uVar10) {\n      *(uint *)(puVar24 + 0x10) = uVar21;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar12,uVar10,puVar14);\n      puVar14 = puVar12;\n    }\n    else {\n      *(uint *)(puVar24 + 0x10) = uVar10;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12);\n    }\n    uVar10 = (uVar21 + uVar10) - (uint)(iVar18 == 0);\n    uVar15 = uVar15 + 1;\n    if ((int)uVar15 < (int)uVar10) {\n      puVar4 = puVar4 + (uVar10 - uVar15);\n      uVar10 = uVar15;\n    }\n    iVar13 = uVar10 - 1;\n    if (uVar10 != 0) {\n      puVar3 = (undefined4 *)param_1[3];\n      uVar25 = *puVar4;\n      puVar12 = puVar3;\n      if (iVar13 != 0) {\n        do {\n          puVar4 = puVar4 + 1;\n          puVar14 = puVar12 + 1;\n          *puVar12 = uVar25;\n          iVar13 = iVar13 + -1;\n          uVar25 = *puVar4;\n          puVar12 = puVar14;\n        } while (iVar13 != 0);\n        puVar3 = puVar3 + (uVar10 - 1);\n      }\n      *puVar3 = uVar25;\n    }\n    uVar17 = uVar17 ^ uVar19;\n    param_1[2] = (param_2[2] + *(int *)(param_3 + 8)) - (uint)(iVar18 == 0);\n    if ((int)uVar17 < 0) {\n      uVar10 = -uVar10;\n    }\n    param_1[1] = uVar10;\n    piVar8 = local_30;\n    if (local_30 != (int *)0x0) {\n      (*(code *)PTR___gmp_tmp_reentrant_free_00097614)();\n    }\n  }\n  if (local_2c == *(int *)puVar22) {\n    return;\n  }\n  uVar25 = 0x1cbf4;\n  puVar22 = PTR___stack_chk_fail_000974d0;\n  (*(code *)PTR___stack_chk_fail_000974d0)();\n  *(undefined **)(puVar24 + -0x28) = puVar22 + 0x82440;\n  *(uint **)(puVar24 + -0x14) = param_1;\n  *(undefined4 *)(puVar24 + -4) = uVar25;\n  *(undefined4 **)(puVar24 + -8) = param_2;\n  *(int *)(puVar24 + -0xc) = param_3;\n  *(uint *)(puVar24 + -0x10) = uVar19;\n  *(uint *)(puVar24 + -0x18) = uVar17;\n  *(uint *)(puVar24 + -0x1c) = uVar15;\n  iVar18 = puVar14[1];\n  if ((uVar10 == 0) || (iVar18 == 0)) {\n    piVar8[1] = 0;\n    piVar8[2] = 0;\n    return;\n  }\n  if (iVar18 < 0) {\n    iVar16 = *piVar8;\n    iVar7 = puVar14[3];\n    puVar20 = (uint *)piVar8[3];\n    iVar5 = -iVar18 - iVar16;\n    iVar13 = -iVar18;\n    if (iVar5 < 1) goto LAB_0001cda8;\nLAB_0001cc68:\n    iVar9 = iVar5 + -1;\n    iVar5 = iVar7 + iVar5 * 4;\n    lVar1 = (ulonglong)uVar10 * (ulonglong)*(uint *)(iVar7 + iVar9 * 4);\n    iVar13 = iVar5;\n    while( true ) {\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      iVar9 = iVar9 + -1;\n      pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n      if (iVar9 == -1) break;\n      puVar11 = (uint *)(iVar13 + -8);\n      iVar13 = iVar13 + -4;\n      uVar2 = (ulonglong)uVar10 * (ulonglong)*puVar11;\n      lVar1 = lVar1 + (uVar2 >> 0x20);\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      if ((int)lVar1 != -1) {\n        pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n        break;\n      }\n      lVar1 = CONCAT44(uVar15,(int)uVar2);\n    }\n    uVar6 = (*pcVar23)(puVar20,iVar5,iVar16);\n    uVar17 = *puVar20;\n    *puVar20 = uVar15 + uVar17;\n    if (uVar15 + uVar17 < uVar15) {\n      if (iVar16 < 2) {\nLAB_0001cd34:\n        uVar15 = (uint)(uVar6 + 1 != 0);\n        iVar13 = iVar16 + uVar15;\n        puVar20[iVar16] = uVar6 + 1;\n        piVar8[2] = puVar14[2] + uVar15;\n        goto joined_r0x0001cddc;\n      }\n      uVar15 = puVar20[1];\n      puVar20[1] = uVar15 + 1;\n      if (uVar15 + 1 == 0) {\n        iVar13 = 2;\n        puVar11 = puVar20 + 2;\n        do {\n          if (iVar13 == iVar16) goto LAB_0001cd34;\n          uVar15 = *puVar11;\n          iVar13 = iVar13 + 1;\n          *puVar11 = uVar15 + 1;\n          puVar11 = puVar11 + 1;\n        } while (uVar15 + 1 == 0);\n      }\n    }\n  }\n  else {\n    iVar16 = *piVar8;\n    iVar7 = puVar14[3];\n    iVar5 = iVar18 - iVar16;\n    puVar20 = (uint *)piVar8[3];\n    iVar13 = iVar18;\n    if (0 < iVar5) goto LAB_0001cc68;\nLAB_0001cda8:\n    iVar16 = iVar13;\n    uVar6 = (**(code **)(puVar22 + 0x7a4a4))(puVar20,iVar7,iVar16);\n  }\n  iVar13 = iVar16 + (uint)(uVar6 != 0);\n  puVar20[iVar16] = uVar6;\n  piVar8[2] = puVar14[2] + (uint)(uVar6 != 0);\njoined_r0x0001cddc:\n  if (iVar18 < 0) {\n    iVar13 = -iVar13;\n  }\n  piVar8[1] = iVar13;\n  return;\n}" { (declaration "longlong lVar1;" type_identifier identifier ;) (declaration "ulonglong uVar2;" type_identifier identifier ;) (declaration "undefined4 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined4 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "int *piVar8;" primitive_type (pointer_declarator "*piVar8" * identifier) ;) (declaration "int iVar9;" primitive_type identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "uint *puVar11;" type_identifier (pointer_declarator "*puVar11" * identifier) ;) (declaration "undefined4 *puVar12;" type_identifier (pointer_declarator "*puVar12" * identifier) ;) (declaration "int iVar13;" primitive_type identifier ;) (declaration "undefined4 *puVar14;" type_identifier (pointer_declarator "*puVar14" * identifier) ;) (declaration "uint uVar15;" type_identifier identifier ;) (declaration "int iVar16;" primitive_type identifier ;) (declaration "uint uVar17;" type_identifier identifier ;) (declaration "int iVar18;" primitive_type identifier ;) (declaration "uint uVar19;" type_identifier identifier ;) (declaration "uint *puVar20;" type_identifier (pointer_declarator "*puVar20" * identifier) ;) (declaration "uint uVar21;" type_identifier identifier ;) (declaration "undefined *puVar22;" type_identifier (pointer_declarator "*puVar22" * identifier) ;) (declaration "code *pcVar23;" type_identifier (pointer_declarator "*pcVar23" * identifier) ;) (declaration "undefined1 *puVar24;" type_identifier (pointer_declarator "*puVar24" * identifier) ;) (declaration "undefined4 uVar25;" type_identifier identifier ;) (declaration "undefined1 auStack_60 [24];" type_identifier (array_declarator "auStack_60 [24]" identifier [ number_literal ]) ;) (declaration "int *local_30;" primitive_type (pointer_declarator "*local_30" * identifier) ;) (declaration "int local_2c;" primitive_type identifier ;) (expression_statement "puVar22 = PTR___stack_chk_guard_00097540;" (assignment_expression "puVar22 = PTR___stack_chk_guard_00097540" identifier = identifier) ;) (expression_statement "puVar24 = auStack_60;" (assignment_expression "puVar24 = auStack_60" identifier = identifier) ;) (expression_statement "uVar17 = param_2[1];" (assignment_expression "uVar17 = param_2[1]" identifier = (subscript_expression "param_2[1]" identifier [ number_literal ])) ;) (expression_statement "local_2c = *(int *)PTR___stack_chk_guard_00097540;" (assignment_expression "local_2c = *(int *)PTR___stack_chk_guard_00097540" identifier = (pointer_expression "*(int *)PTR___stack_chk_guard_00097540" * (cast_expression "(int *)PTR___stack_chk_guard_00097540" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "uVar15 = *param_1;" (assignment_expression "uVar15 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "uVar19 = *(uint *)(param_3 + 4);" (assignment_expression "uVar19 = *(uint *)(param_3 + 4)" identifier = (pointer_expression "*(uint *)(param_3 + 4)" * (cast_expression "(uint *)(param_3 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) ))))) ;) (expression_statement "uVar6 = -uVar17;" (assignment_expression "uVar6 = -uVar17" identifier = (unary_expression "-uVar17" - identifier)) ;) (if_statement "if (-1 < (int)uVar17) {\n    uVar6 = uVar17;\n  }" if (parenthesized_expression "(-1 < (int)uVar17)" ( (binary_expression "-1 < (int)uVar17" number_literal < (cast_expression "(int)uVar17" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    uVar6 = uVar17;\n  }" { (expression_statement "uVar6 = uVar17;" (assignment_expression "uVar6 = uVar17" identifier = identifier) ;) })) (expression_statement "uVar10 = uVar19;" (assignment_expression "uVar10 = uVar19" identifier = identifier) ;) (if_statement "if ((int)uVar19 < 0) {\n    uVar10 = -uVar19;\n  }" if (parenthesized_expression "((int)uVar19 < 0)" ( (binary_expression "(int)uVar19 < 0" (cast_expression "(int)uVar19" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n    uVar10 = -uVar19;\n  }" { (expression_statement "uVar10 = -uVar19;" (assignment_expression "uVar10 = -uVar19" identifier = (unary_expression "-uVar19" - identifier)) ;) })) (expression_statement "puVar14 = (undefined4 *)param_2[3];" (assignment_expression "puVar14 = (undefined4 *)param_2[3]" identifier = (cast_expression "(undefined4 *)param_2[3]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_2[3]" identifier [ number_literal ]))) ;) (expression_statement "puVar12 = *(undefined4 **)(param_3 + 0xc);" (assignment_expression "puVar12 = *(undefined4 **)(param_3 + 0xc)" identifier = (pointer_expression "*(undefined4 **)(param_3 + 0xc)" * (cast_expression "(undefined4 **)(param_3 + 0xc)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_3 + 0xc)" ( (binary_expression "param_3 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "uVar21 = uVar6;" (assignment_expression "uVar21 = uVar6" identifier = identifier) ;) (if_statement "if ((int *)(uint)((int)uVar15 < (int)uVar6) != (int *)0x0) {\n    puVar14 = puVar14 + (uVar6 - uVar15);\n    uVar21 = uVar15;\n  }" if (parenthesized_expression "((int *)(uint)((int)uVar15 < (int)uVar6) != (int *)0x0)" ( (binary_expression "(int *)(uint)((int)uVar15 < (int)uVar6) != (int *)0x0" (cast_expression "(int *)(uint)((int)uVar15 < (int)uVar6)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "(uint)((int)uVar15 < (int)uVar6)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((int)uVar15 < (int)uVar6)" ( (binary_expression "(int)uVar15 < (int)uVar6" (cast_expression "(int)uVar15" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)uVar6" ( (type_descriptor "int" primitive_type) ) identifier)) )))) != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    puVar14 = puVar14 + (uVar6 - uVar15);\n    uVar21 = uVar15;\n  }" { (expression_statement "puVar14 = puVar14 + (uVar6 - uVar15);" (assignment_expression "puVar14 = puVar14 + (uVar6 - uVar15)" identifier = (binary_expression "puVar14 + (uVar6 - uVar15)" identifier + (parenthesized_expression "(uVar6 - uVar15)" ( (binary_expression "uVar6 - uVar15" identifier - identifier) )))) ;) (expression_statement "uVar21 = uVar15;" (assignment_expression "uVar21 = uVar15" identifier = identifier) ;) })) (if_statement "if ((int)uVar15 < (int)uVar10) {\n    puVar12 = puVar12 + (uVar10 - uVar15);\n    uVar10 = uVar15;\n  }" if (parenthesized_expression "((int)uVar15 < (int)uVar10)" ( (binary_expression "(int)uVar15 < (int)uVar10" (cast_expression "(int)uVar15" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)uVar10" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    puVar12 = puVar12 + (uVar10 - uVar15);\n    uVar10 = uVar15;\n  }" { (expression_statement "puVar12 = puVar12 + (uVar10 - uVar15);" (assignment_expression "puVar12 = puVar12 + (uVar10 - uVar15)" identifier = (binary_expression "puVar12 + (uVar10 - uVar15)" identifier + (parenthesized_expression "(uVar10 - uVar15)" ( (binary_expression "uVar10 - uVar15" identifier - identifier) )))) ;) (expression_statement "uVar10 = uVar15;" (assignment_expression "uVar10 = uVar15" identifier = identifier) ;) })) (if_statement "if ((uVar21 == 0) || (uVar10 == 0)) {\n    param_1[1] = 0;\n    param_1[2] = 0;\n    piVar8 = (int *)(uint)((int)uVar15 < (int)uVar6);\n    puVar14 = param_2;\n    puVar24 = auStack_60;\n  }\n  else {\n    uVar6 = (uVar21 + uVar10) * 4;\n    local_30 = (int *)0x0;\n    if (uVar6 < 0x7f01) {\n      iVar18 = -(uVar6 + 7 & 0xfffffff8);\n      puVar24 = auStack_60 + iVar18;\n      puVar4 = (undefined4 *)(&stack0xffffffb8 + iVar18);\n    }\n    else {\n      puVar4 = (undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30);\n    }\n    if ((int)uVar21 < (int)uVar10) {\n      *(uint *)(puVar24 + 0x10) = uVar21;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar12,uVar10,puVar14);\n      puVar14 = puVar12;\n    }\n    else {\n      *(uint *)(puVar24 + 0x10) = uVar10;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12);\n    }\n    uVar10 = (uVar21 + uVar10) - (uint)(iVar18 == 0);\n    uVar15 = uVar15 + 1;\n    if ((int)uVar15 < (int)uVar10) {\n      puVar4 = puVar4 + (uVar10 - uVar15);\n      uVar10 = uVar15;\n    }\n    iVar13 = uVar10 - 1;\n    if (uVar10 != 0) {\n      puVar3 = (undefined4 *)param_1[3];\n      uVar25 = *puVar4;\n      puVar12 = puVar3;\n      if (iVar13 != 0) {\n        do {\n          puVar4 = puVar4 + 1;\n          puVar14 = puVar12 + 1;\n          *puVar12 = uVar25;\n          iVar13 = iVar13 + -1;\n          uVar25 = *puVar4;\n          puVar12 = puVar14;\n        } while (iVar13 != 0);\n        puVar3 = puVar3 + (uVar10 - 1);\n      }\n      *puVar3 = uVar25;\n    }\n    uVar17 = uVar17 ^ uVar19;\n    param_1[2] = (param_2[2] + *(int *)(param_3 + 8)) - (uint)(iVar18 == 0);\n    if ((int)uVar17 < 0) {\n      uVar10 = -uVar10;\n    }\n    param_1[1] = uVar10;\n    piVar8 = local_30;\n    if (local_30 != (int *)0x0) {\n      (*(code *)PTR___gmp_tmp_reentrant_free_00097614)();\n    }\n  }" if (parenthesized_expression "((uVar21 == 0) || (uVar10 == 0))" ( (binary_expression "(uVar21 == 0) || (uVar10 == 0)" (parenthesized_expression "(uVar21 == 0)" ( (binary_expression "uVar21 == 0" identifier == number_literal) )) || (parenthesized_expression "(uVar10 == 0)" ( (binary_expression "uVar10 == 0" identifier == number_literal) ))) )) (compound_statement "{\n    param_1[1] = 0;\n    param_1[2] = 0;\n    piVar8 = (int *)(uint)((int)uVar15 < (int)uVar6);\n    puVar14 = param_2;\n    puVar24 = auStack_60;\n  }" { (expression_statement "param_1[1] = 0;" (assignment_expression "param_1[1] = 0" (subscript_expression "param_1[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[2] = 0;" (assignment_expression "param_1[2] = 0" (subscript_expression "param_1[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "piVar8 = (int *)(uint)((int)uVar15 < (int)uVar6);" (assignment_expression "piVar8 = (int *)(uint)((int)uVar15 < (int)uVar6)" identifier = (cast_expression "(int *)(uint)((int)uVar15 < (int)uVar6)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "(uint)((int)uVar15 < (int)uVar6)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((int)uVar15 < (int)uVar6)" ( (binary_expression "(int)uVar15 < (int)uVar6" (cast_expression "(int)uVar15" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)uVar6" ( (type_descriptor "int" primitive_type) ) identifier)) ))))) ;) (expression_statement "puVar14 = param_2;" (assignment_expression "puVar14 = param_2" identifier = identifier) ;) (expression_statement "puVar24 = auStack_60;" (assignment_expression "puVar24 = auStack_60" identifier = identifier) ;) }) (else_clause "else {\n    uVar6 = (uVar21 + uVar10) * 4;\n    local_30 = (int *)0x0;\n    if (uVar6 < 0x7f01) {\n      iVar18 = -(uVar6 + 7 & 0xfffffff8);\n      puVar24 = auStack_60 + iVar18;\n      puVar4 = (undefined4 *)(&stack0xffffffb8 + iVar18);\n    }\n    else {\n      puVar4 = (undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30);\n    }\n    if ((int)uVar21 < (int)uVar10) {\n      *(uint *)(puVar24 + 0x10) = uVar21;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar12,uVar10,puVar14);\n      puVar14 = puVar12;\n    }\n    else {\n      *(uint *)(puVar24 + 0x10) = uVar10;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12);\n    }\n    uVar10 = (uVar21 + uVar10) - (uint)(iVar18 == 0);\n    uVar15 = uVar15 + 1;\n    if ((int)uVar15 < (int)uVar10) {\n      puVar4 = puVar4 + (uVar10 - uVar15);\n      uVar10 = uVar15;\n    }\n    iVar13 = uVar10 - 1;\n    if (uVar10 != 0) {\n      puVar3 = (undefined4 *)param_1[3];\n      uVar25 = *puVar4;\n      puVar12 = puVar3;\n      if (iVar13 != 0) {\n        do {\n          puVar4 = puVar4 + 1;\n          puVar14 = puVar12 + 1;\n          *puVar12 = uVar25;\n          iVar13 = iVar13 + -1;\n          uVar25 = *puVar4;\n          puVar12 = puVar14;\n        } while (iVar13 != 0);\n        puVar3 = puVar3 + (uVar10 - 1);\n      }\n      *puVar3 = uVar25;\n    }\n    uVar17 = uVar17 ^ uVar19;\n    param_1[2] = (param_2[2] + *(int *)(param_3 + 8)) - (uint)(iVar18 == 0);\n    if ((int)uVar17 < 0) {\n      uVar10 = -uVar10;\n    }\n    param_1[1] = uVar10;\n    piVar8 = local_30;\n    if (local_30 != (int *)0x0) {\n      (*(code *)PTR___gmp_tmp_reentrant_free_00097614)();\n    }\n  }" else (compound_statement "{\n    uVar6 = (uVar21 + uVar10) * 4;\n    local_30 = (int *)0x0;\n    if (uVar6 < 0x7f01) {\n      iVar18 = -(uVar6 + 7 & 0xfffffff8);\n      puVar24 = auStack_60 + iVar18;\n      puVar4 = (undefined4 *)(&stack0xffffffb8 + iVar18);\n    }\n    else {\n      puVar4 = (undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30);\n    }\n    if ((int)uVar21 < (int)uVar10) {\n      *(uint *)(puVar24 + 0x10) = uVar21;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar12,uVar10,puVar14);\n      puVar14 = puVar12;\n    }\n    else {\n      *(uint *)(puVar24 + 0x10) = uVar10;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12);\n    }\n    uVar10 = (uVar21 + uVar10) - (uint)(iVar18 == 0);\n    uVar15 = uVar15 + 1;\n    if ((int)uVar15 < (int)uVar10) {\n      puVar4 = puVar4 + (uVar10 - uVar15);\n      uVar10 = uVar15;\n    }\n    iVar13 = uVar10 - 1;\n    if (uVar10 != 0) {\n      puVar3 = (undefined4 *)param_1[3];\n      uVar25 = *puVar4;\n      puVar12 = puVar3;\n      if (iVar13 != 0) {\n        do {\n          puVar4 = puVar4 + 1;\n          puVar14 = puVar12 + 1;\n          *puVar12 = uVar25;\n          iVar13 = iVar13 + -1;\n          uVar25 = *puVar4;\n          puVar12 = puVar14;\n        } while (iVar13 != 0);\n        puVar3 = puVar3 + (uVar10 - 1);\n      }\n      *puVar3 = uVar25;\n    }\n    uVar17 = uVar17 ^ uVar19;\n    param_1[2] = (param_2[2] + *(int *)(param_3 + 8)) - (uint)(iVar18 == 0);\n    if ((int)uVar17 < 0) {\n      uVar10 = -uVar10;\n    }\n    param_1[1] = uVar10;\n    piVar8 = local_30;\n    if (local_30 != (int *)0x0) {\n      (*(code *)PTR___gmp_tmp_reentrant_free_00097614)();\n    }\n  }" { (expression_statement "uVar6 = (uVar21 + uVar10) * 4;" (assignment_expression "uVar6 = (uVar21 + uVar10) * 4" identifier = (binary_expression "(uVar21 + uVar10) * 4" (parenthesized_expression "(uVar21 + uVar10)" ( (binary_expression "uVar21 + uVar10" identifier + identifier) )) * number_literal)) ;) (expression_statement "local_30 = (int *)0x0;" (assignment_expression "local_30 = (int *)0x0" identifier = (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (uVar6 < 0x7f01) {\n      iVar18 = -(uVar6 + 7 & 0xfffffff8);\n      puVar24 = auStack_60 + iVar18;\n      puVar4 = (undefined4 *)(&stack0xffffffb8 + iVar18);\n    }\n    else {\n      puVar4 = (undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30);\n    }" if (parenthesized_expression "(uVar6 < 0x7f01)" ( (binary_expression "uVar6 < 0x7f01" identifier < number_literal) )) (compound_statement "{\n      iVar18 = -(uVar6 + 7 & 0xfffffff8);\n      puVar24 = auStack_60 + iVar18;\n      puVar4 = (undefined4 *)(&stack0xffffffb8 + iVar18);\n    }" { (expression_statement "iVar18 = -(uVar6 + 7 & 0xfffffff8);" (assignment_expression "iVar18 = -(uVar6 + 7 & 0xfffffff8)" identifier = (unary_expression "-(uVar6 + 7 & 0xfffffff8)" - (parenthesized_expression "(uVar6 + 7 & 0xfffffff8)" ( (binary_expression "uVar6 + 7 & 0xfffffff8" (binary_expression "uVar6 + 7" identifier + number_literal) & number_literal) )))) ;) (expression_statement "puVar24 = auStack_60 + iVar18;" (assignment_expression "puVar24 = auStack_60 + iVar18" identifier = (binary_expression "auStack_60 + iVar18" identifier + identifier)) ;) (expression_statement "puVar4 = (undefined4 *)(&stack0xffffffb8 + iVar18);" (assignment_expression "puVar4 = (undefined4 *)(&stack0xffffffb8 + iVar18)" identifier = (cast_expression "(undefined4 *)(&stack0xffffffb8 + iVar18)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&stack0xffffffb8 + iVar18)" ( (binary_expression "&stack0xffffffb8 + iVar18" (pointer_expression "&stack0xffffffb8" & identifier) + identifier) )))) ;) }) (else_clause "else {\n      puVar4 = (undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30);\n    }" else (compound_statement "{\n      puVar4 = (undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30);\n    }" { (expression_statement "puVar4 = (undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30);" (assignment_expression "puVar4 = (undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30)" identifier = (cast_expression "(undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30)" (parenthesized_expression "(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)" ( (pointer_expression "*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0" * (cast_expression "(code *)PTR___gmp_tmp_reentrant_alloc_000972f0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(&local_30)" ( (pointer_expression "&local_30" & identifier) ))))) ;) }))) (if_statement "if ((int)uVar21 < (int)uVar10) {\n      *(uint *)(puVar24 + 0x10) = uVar21;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar12,uVar10,puVar14);\n      puVar14 = puVar12;\n    }\n    else {\n      *(uint *)(puVar24 + 0x10) = uVar10;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12);\n    }" if (parenthesized_expression "((int)uVar21 < (int)uVar10)" ( (binary_expression "(int)uVar21 < (int)uVar10" (cast_expression "(int)uVar21" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)uVar10" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n      *(uint *)(puVar24 + 0x10) = uVar21;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar12,uVar10,puVar14);\n      puVar14 = puVar12;\n    }" { (expression_statement "*(uint *)(puVar24 + 0x10) = uVar21;" (assignment_expression "*(uint *)(puVar24 + 0x10) = uVar21" (pointer_expression "*(uint *)(puVar24 + 0x10)" * (cast_expression "(uint *)(puVar24 + 0x10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar24 + 0x10)" ( (binary_expression "puVar24 + 0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar12,uVar10,puVar14);" (assignment_expression "iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar12,uVar10,puVar14)" identifier = (call_expression "(*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar12,uVar10,puVar14)" (parenthesized_expression "(*(code *)PTR___gmpn_mul_000972b4)" ( (pointer_expression "*(code *)PTR___gmpn_mul_000972b4" * (cast_expression "(code *)PTR___gmpn_mul_000972b4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar4,puVar12,uVar10,puVar14)" ( identifier , identifier , identifier , identifier )))) ;) (expression_statement "puVar14 = puVar12;" (assignment_expression "puVar14 = puVar12" identifier = identifier) ;) }) (else_clause "else {\n      *(uint *)(puVar24 + 0x10) = uVar10;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12);\n    }" else (compound_statement "{\n      *(uint *)(puVar24 + 0x10) = uVar10;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12);\n    }" { (expression_statement "*(uint *)(puVar24 + 0x10) = uVar10;" (assignment_expression "*(uint *)(puVar24 + 0x10) = uVar10" (pointer_expression "*(uint *)(puVar24 + 0x10)" * (cast_expression "(uint *)(puVar24 + 0x10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar24 + 0x10)" ( (binary_expression "puVar24 + 0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12);" (assignment_expression "iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12)" identifier = (call_expression "(*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12)" (parenthesized_expression "(*(code *)PTR___gmpn_mul_000972b4)" ( (pointer_expression "*(code *)PTR___gmpn_mul_000972b4" * (cast_expression "(code *)PTR___gmpn_mul_000972b4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar4,puVar14,uVar21,puVar12)" ( identifier , identifier , identifier , identifier )))) ;) }))) (expression_statement "uVar10 = (uVar21 + uVar10) - (uint)(iVar18 == 0);" (assignment_expression "uVar10 = (uVar21 + uVar10) - (uint)(iVar18 == 0)" identifier = (binary_expression "(uVar21 + uVar10) - (uint)(iVar18 == 0)" (parenthesized_expression "(uVar21 + uVar10)" ( (binary_expression "uVar21 + uVar10" identifier + identifier) )) - (call_expression "(uint)(iVar18 == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar18 == 0)" ( (binary_expression "iVar18 == 0" identifier == number_literal) ))))) ;) (expression_statement "uVar15 = uVar15 + 1;" (assignment_expression "uVar15 = uVar15 + 1" identifier = (binary_expression "uVar15 + 1" identifier + number_literal)) ;) (if_statement "if ((int)uVar15 < (int)uVar10) {\n      puVar4 = puVar4 + (uVar10 - uVar15);\n      uVar10 = uVar15;\n    }" if (parenthesized_expression "((int)uVar15 < (int)uVar10)" ( (binary_expression "(int)uVar15 < (int)uVar10" (cast_expression "(int)uVar15" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)uVar10" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n      puVar4 = puVar4 + (uVar10 - uVar15);\n      uVar10 = uVar15;\n    }" { (expression_statement "puVar4 = puVar4 + (uVar10 - uVar15);" (assignment_expression "puVar4 = puVar4 + (uVar10 - uVar15)" identifier = (binary_expression "puVar4 + (uVar10 - uVar15)" identifier + (parenthesized_expression "(uVar10 - uVar15)" ( (binary_expression "uVar10 - uVar15" identifier - identifier) )))) ;) (expression_statement "uVar10 = uVar15;" (assignment_expression "uVar10 = uVar15" identifier = identifier) ;) })) (expression_statement "iVar13 = uVar10 - 1;" (assignment_expression "iVar13 = uVar10 - 1" identifier = (binary_expression "uVar10 - 1" identifier - number_literal)) ;) (if_statement "if (uVar10 != 0) {\n      puVar3 = (undefined4 *)param_1[3];\n      uVar25 = *puVar4;\n      puVar12 = puVar3;\n      if (iVar13 != 0) {\n        do {\n          puVar4 = puVar4 + 1;\n          puVar14 = puVar12 + 1;\n          *puVar12 = uVar25;\n          iVar13 = iVar13 + -1;\n          uVar25 = *puVar4;\n          puVar12 = puVar14;\n        } while (iVar13 != 0);\n        puVar3 = puVar3 + (uVar10 - 1);\n      }\n      *puVar3 = uVar25;\n    }" if (parenthesized_expression "(uVar10 != 0)" ( (binary_expression "uVar10 != 0" identifier != number_literal) )) (compound_statement "{\n      puVar3 = (undefined4 *)param_1[3];\n      uVar25 = *puVar4;\n      puVar12 = puVar3;\n      if (iVar13 != 0) {\n        do {\n          puVar4 = puVar4 + 1;\n          puVar14 = puVar12 + 1;\n          *puVar12 = uVar25;\n          iVar13 = iVar13 + -1;\n          uVar25 = *puVar4;\n          puVar12 = puVar14;\n        } while (iVar13 != 0);\n        puVar3 = puVar3 + (uVar10 - 1);\n      }\n      *puVar3 = uVar25;\n    }" { (expression_statement "puVar3 = (undefined4 *)param_1[3];" (assignment_expression "puVar3 = (undefined4 *)param_1[3]" identifier = (cast_expression "(undefined4 *)param_1[3]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[3]" identifier [ number_literal ]))) ;) (expression_statement "uVar25 = *puVar4;" (assignment_expression "uVar25 = *puVar4" identifier = (pointer_expression "*puVar4" * identifier)) ;) (expression_statement "puVar12 = puVar3;" (assignment_expression "puVar12 = puVar3" identifier = identifier) ;) (if_statement "if (iVar13 != 0) {\n        do {\n          puVar4 = puVar4 + 1;\n          puVar14 = puVar12 + 1;\n          *puVar12 = uVar25;\n          iVar13 = iVar13 + -1;\n          uVar25 = *puVar4;\n          puVar12 = puVar14;\n        } while (iVar13 != 0);\n        puVar3 = puVar3 + (uVar10 - 1);\n      }" if (parenthesized_expression "(iVar13 != 0)" ( (binary_expression "iVar13 != 0" identifier != number_literal) )) (compound_statement "{\n        do {\n          puVar4 = puVar4 + 1;\n          puVar14 = puVar12 + 1;\n          *puVar12 = uVar25;\n          iVar13 = iVar13 + -1;\n          uVar25 = *puVar4;\n          puVar12 = puVar14;\n        } while (iVar13 != 0);\n        puVar3 = puVar3 + (uVar10 - 1);\n      }" { (do_statement "do {\n          puVar4 = puVar4 + 1;\n          puVar14 = puVar12 + 1;\n          *puVar12 = uVar25;\n          iVar13 = iVar13 + -1;\n          uVar25 = *puVar4;\n          puVar12 = puVar14;\n        } while (iVar13 != 0);" do (compound_statement "{\n          puVar4 = puVar4 + 1;\n          puVar14 = puVar12 + 1;\n          *puVar12 = uVar25;\n          iVar13 = iVar13 + -1;\n          uVar25 = *puVar4;\n          puVar12 = puVar14;\n        }" { (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" identifier = (binary_expression "puVar4 + 1" identifier + number_literal)) ;) (expression_statement "puVar14 = puVar12 + 1;" (assignment_expression "puVar14 = puVar12 + 1" identifier = (binary_expression "puVar12 + 1" identifier + number_literal)) ;) (expression_statement "*puVar12 = uVar25;" (assignment_expression "*puVar12 = uVar25" (pointer_expression "*puVar12" * identifier) = identifier) ;) (expression_statement "iVar13 = iVar13 + -1;" (assignment_expression "iVar13 = iVar13 + -1" identifier = (binary_expression "iVar13 + -1" identifier + number_literal)) ;) (expression_statement "uVar25 = *puVar4;" (assignment_expression "uVar25 = *puVar4" identifier = (pointer_expression "*puVar4" * identifier)) ;) (expression_statement "puVar12 = puVar14;" (assignment_expression "puVar12 = puVar14" identifier = identifier) ;) }) while (parenthesized_expression "(iVar13 != 0)" ( (binary_expression "iVar13 != 0" identifier != number_literal) )) ;) (expression_statement "puVar3 = puVar3 + (uVar10 - 1);" (assignment_expression "puVar3 = puVar3 + (uVar10 - 1)" identifier = (binary_expression "puVar3 + (uVar10 - 1)" identifier + (parenthesized_expression "(uVar10 - 1)" ( (binary_expression "uVar10 - 1" identifier - number_literal) )))) ;) })) (expression_statement "*puVar3 = uVar25;" (assignment_expression "*puVar3 = uVar25" (pointer_expression "*puVar3" * identifier) = identifier) ;) })) (expression_statement "uVar17 = uVar17 ^ uVar19;" (assignment_expression "uVar17 = uVar17 ^ uVar19" identifier = (binary_expression "uVar17 ^ uVar19" identifier ^ identifier)) ;) (expression_statement "param_1[2] = (param_2[2] + *(int *)(param_3 + 8)) - (uint)(iVar18 == 0);" (assignment_expression "param_1[2] = (param_2[2] + *(int *)(param_3 + 8)) - (uint)(iVar18 == 0)" (subscript_expression "param_1[2]" identifier [ number_literal ]) = (binary_expression "(param_2[2] + *(int *)(param_3 + 8)) - (uint)(iVar18 == 0)" (parenthesized_expression "(param_2[2] + *(int *)(param_3 + 8))" ( (binary_expression "param_2[2] + *(int *)(param_3 + 8)" (subscript_expression "param_2[2]" identifier [ number_literal ]) + (pointer_expression "*(int *)(param_3 + 8)" * (cast_expression "(int *)(param_3 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 8)" ( (binary_expression "param_3 + 8" identifier + number_literal) ))))) )) - (call_expression "(uint)(iVar18 == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar18 == 0)" ( (binary_expression "iVar18 == 0" identifier == number_literal) ))))) ;) (if_statement "if ((int)uVar17 < 0) {\n      uVar10 = -uVar10;\n    }" if (parenthesized_expression "((int)uVar17 < 0)" ( (binary_expression "(int)uVar17 < 0" (cast_expression "(int)uVar17" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n      uVar10 = -uVar10;\n    }" { (expression_statement "uVar10 = -uVar10;" (assignment_expression "uVar10 = -uVar10" identifier = (unary_expression "-uVar10" - identifier)) ;) })) (expression_statement "param_1[1] = uVar10;" (assignment_expression "param_1[1] = uVar10" (subscript_expression "param_1[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "piVar8 = local_30;" (assignment_expression "piVar8 = local_30" identifier = identifier) ;) (if_statement "if (local_30 != (int *)0x0) {\n      (*(code *)PTR___gmp_tmp_reentrant_free_00097614)();\n    }" if (parenthesized_expression "(local_30 != (int *)0x0)" ( (binary_expression "local_30 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      (*(code *)PTR___gmp_tmp_reentrant_free_00097614)();\n    }" { (expression_statement "(*(code *)PTR___gmp_tmp_reentrant_free_00097614)();" (call_expression "(*(code *)PTR___gmp_tmp_reentrant_free_00097614)()" (parenthesized_expression "(*(code *)PTR___gmp_tmp_reentrant_free_00097614)" ( (pointer_expression "*(code *)PTR___gmp_tmp_reentrant_free_00097614" * (cast_expression "(code *)PTR___gmp_tmp_reentrant_free_00097614" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) })) }))) (if_statement "if (local_2c == *(int *)puVar22) {\n    return;\n  }" if (parenthesized_expression "(local_2c == *(int *)puVar22)" ( (binary_expression "local_2c == *(int *)puVar22" identifier == (pointer_expression "*(int *)puVar22" * (cast_expression "(int *)puVar22" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "uVar25 = 0x1cbf4;" (assignment_expression "uVar25 = 0x1cbf4" identifier = number_literal) ;) (expression_statement "puVar22 = PTR___stack_chk_fail_000974d0;" (assignment_expression "puVar22 = PTR___stack_chk_fail_000974d0" identifier = identifier) ;) (expression_statement "(*(code *)PTR___stack_chk_fail_000974d0)();" (call_expression "(*(code *)PTR___stack_chk_fail_000974d0)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_000974d0)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_000974d0" * (cast_expression "(code *)PTR___stack_chk_fail_000974d0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (expression_statement "*(undefined **)(puVar24 + -0x28) = puVar22 + 0x82440;" (assignment_expression "*(undefined **)(puVar24 + -0x28) = puVar22 + 0x82440" (pointer_expression "*(undefined **)(puVar24 + -0x28)" * (cast_expression "(undefined **)(puVar24 + -0x28)" ( (type_descriptor "undefined **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar24 + -0x28)" ( (binary_expression "puVar24 + -0x28" identifier + number_literal) )))) = (binary_expression "puVar22 + 0x82440" identifier + number_literal)) ;) (expression_statement "*(uint **)(puVar24 + -0x14) = param_1;" (assignment_expression "*(uint **)(puVar24 + -0x14) = param_1" (pointer_expression "*(uint **)(puVar24 + -0x14)" * (cast_expression "(uint **)(puVar24 + -0x14)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar24 + -0x14)" ( (binary_expression "puVar24 + -0x14" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(puVar24 + -4) = uVar25;" (assignment_expression "*(undefined4 *)(puVar24 + -4) = uVar25" (pointer_expression "*(undefined4 *)(puVar24 + -4)" * (cast_expression "(undefined4 *)(puVar24 + -4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar24 + -4)" ( (binary_expression "puVar24 + -4" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 **)(puVar24 + -8) = param_2;" (assignment_expression "*(undefined4 **)(puVar24 + -8) = param_2" (pointer_expression "*(undefined4 **)(puVar24 + -8)" * (cast_expression "(undefined4 **)(puVar24 + -8)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar24 + -8)" ( (binary_expression "puVar24 + -8" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(int *)(puVar24 + -0xc) = param_3;" (assignment_expression "*(int *)(puVar24 + -0xc) = param_3" (pointer_expression "*(int *)(puVar24 + -0xc)" * (cast_expression "(int *)(puVar24 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar24 + -0xc)" ( (binary_expression "puVar24 + -0xc" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)(puVar24 + -0x10) = uVar19;" (assignment_expression "*(uint *)(puVar24 + -0x10) = uVar19" (pointer_expression "*(uint *)(puVar24 + -0x10)" * (cast_expression "(uint *)(puVar24 + -0x10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar24 + -0x10)" ( (binary_expression "puVar24 + -0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)(puVar24 + -0x18) = uVar17;" (assignment_expression "*(uint *)(puVar24 + -0x18) = uVar17" (pointer_expression "*(uint *)(puVar24 + -0x18)" * (cast_expression "(uint *)(puVar24 + -0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar24 + -0x18)" ( (binary_expression "puVar24 + -0x18" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)(puVar24 + -0x1c) = uVar15;" (assignment_expression "*(uint *)(puVar24 + -0x1c) = uVar15" (pointer_expression "*(uint *)(puVar24 + -0x1c)" * (cast_expression "(uint *)(puVar24 + -0x1c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar24 + -0x1c)" ( (binary_expression "puVar24 + -0x1c" identifier + number_literal) )))) = identifier) ;) (expression_statement "iVar18 = puVar14[1];" (assignment_expression "iVar18 = puVar14[1]" identifier = (subscript_expression "puVar14[1]" identifier [ number_literal ])) ;) (if_statement "if ((uVar10 == 0) || (iVar18 == 0)) {\n    piVar8[1] = 0;\n    piVar8[2] = 0;\n    return;\n  }" if (parenthesized_expression "((uVar10 == 0) || (iVar18 == 0))" ( (binary_expression "(uVar10 == 0) || (iVar18 == 0)" (parenthesized_expression "(uVar10 == 0)" ( (binary_expression "uVar10 == 0" identifier == number_literal) )) || (parenthesized_expression "(iVar18 == 0)" ( (binary_expression "iVar18 == 0" identifier == number_literal) ))) )) (compound_statement "{\n    piVar8[1] = 0;\n    piVar8[2] = 0;\n    return;\n  }" { (expression_statement "piVar8[1] = 0;" (assignment_expression "piVar8[1] = 0" (subscript_expression "piVar8[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "piVar8[2] = 0;" (assignment_expression "piVar8[2] = 0" (subscript_expression "piVar8[2]" identifier [ number_literal ]) = number_literal) ;) (return_statement "return;" return ;) })) (if_statement "if (iVar18 < 0) {\n    iVar16 = *piVar8;\n    iVar7 = puVar14[3];\n    puVar20 = (uint *)piVar8[3];\n    iVar5 = -iVar18 - iVar16;\n    iVar13 = -iVar18;\n    if (iVar5 < 1) goto LAB_0001cda8;\nLAB_0001cc68:\n    iVar9 = iVar5 + -1;\n    iVar5 = iVar7 + iVar5 * 4;\n    lVar1 = (ulonglong)uVar10 * (ulonglong)*(uint *)(iVar7 + iVar9 * 4);\n    iVar13 = iVar5;\n    while( true ) {\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      iVar9 = iVar9 + -1;\n      pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n      if (iVar9 == -1) break;\n      puVar11 = (uint *)(iVar13 + -8);\n      iVar13 = iVar13 + -4;\n      uVar2 = (ulonglong)uVar10 * (ulonglong)*puVar11;\n      lVar1 = lVar1 + (uVar2 >> 0x20);\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      if ((int)lVar1 != -1) {\n        pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n        break;\n      }\n      lVar1 = CONCAT44(uVar15,(int)uVar2);\n    }\n    uVar6 = (*pcVar23)(puVar20,iVar5,iVar16);\n    uVar17 = *puVar20;\n    *puVar20 = uVar15 + uVar17;\n    if (uVar15 + uVar17 < uVar15) {\n      if (iVar16 < 2) {\nLAB_0001cd34:\n        uVar15 = (uint)(uVar6 + 1 != 0);\n        iVar13 = iVar16 + uVar15;\n        puVar20[iVar16] = uVar6 + 1;\n        piVar8[2] = puVar14[2] + uVar15;\n        goto joined_r0x0001cddc;\n      }\n      uVar15 = puVar20[1];\n      puVar20[1] = uVar15 + 1;\n      if (uVar15 + 1 == 0) {\n        iVar13 = 2;\n        puVar11 = puVar20 + 2;\n        do {\n          if (iVar13 == iVar16) goto LAB_0001cd34;\n          uVar15 = *puVar11;\n          iVar13 = iVar13 + 1;\n          *puVar11 = uVar15 + 1;\n          puVar11 = puVar11 + 1;\n        } while (uVar15 + 1 == 0);\n      }\n    }\n  }\n  else {\n    iVar16 = *piVar8;\n    iVar7 = puVar14[3];\n    iVar5 = iVar18 - iVar16;\n    puVar20 = (uint *)piVar8[3];\n    iVar13 = iVar18;\n    if (0 < iVar5) goto LAB_0001cc68;\nLAB_0001cda8:\n    iVar16 = iVar13;\n    uVar6 = (**(code **)(puVar22 + 0x7a4a4))(puVar20,iVar7,iVar16);\n  }" if (parenthesized_expression "(iVar18 < 0)" ( (binary_expression "iVar18 < 0" identifier < number_literal) )) (compound_statement "{\n    iVar16 = *piVar8;\n    iVar7 = puVar14[3];\n    puVar20 = (uint *)piVar8[3];\n    iVar5 = -iVar18 - iVar16;\n    iVar13 = -iVar18;\n    if (iVar5 < 1) goto LAB_0001cda8;\nLAB_0001cc68:\n    iVar9 = iVar5 + -1;\n    iVar5 = iVar7 + iVar5 * 4;\n    lVar1 = (ulonglong)uVar10 * (ulonglong)*(uint *)(iVar7 + iVar9 * 4);\n    iVar13 = iVar5;\n    while( true ) {\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      iVar9 = iVar9 + -1;\n      pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n      if (iVar9 == -1) break;\n      puVar11 = (uint *)(iVar13 + -8);\n      iVar13 = iVar13 + -4;\n      uVar2 = (ulonglong)uVar10 * (ulonglong)*puVar11;\n      lVar1 = lVar1 + (uVar2 >> 0x20);\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      if ((int)lVar1 != -1) {\n        pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n        break;\n      }\n      lVar1 = CONCAT44(uVar15,(int)uVar2);\n    }\n    uVar6 = (*pcVar23)(puVar20,iVar5,iVar16);\n    uVar17 = *puVar20;\n    *puVar20 = uVar15 + uVar17;\n    if (uVar15 + uVar17 < uVar15) {\n      if (iVar16 < 2) {\nLAB_0001cd34:\n        uVar15 = (uint)(uVar6 + 1 != 0);\n        iVar13 = iVar16 + uVar15;\n        puVar20[iVar16] = uVar6 + 1;\n        piVar8[2] = puVar14[2] + uVar15;\n        goto joined_r0x0001cddc;\n      }\n      uVar15 = puVar20[1];\n      puVar20[1] = uVar15 + 1;\n      if (uVar15 + 1 == 0) {\n        iVar13 = 2;\n        puVar11 = puVar20 + 2;\n        do {\n          if (iVar13 == iVar16) goto LAB_0001cd34;\n          uVar15 = *puVar11;\n          iVar13 = iVar13 + 1;\n          *puVar11 = uVar15 + 1;\n          puVar11 = puVar11 + 1;\n        } while (uVar15 + 1 == 0);\n      }\n    }\n  }" { (expression_statement "iVar16 = *piVar8;" (assignment_expression "iVar16 = *piVar8" identifier = (pointer_expression "*piVar8" * identifier)) ;) (expression_statement "iVar7 = puVar14[3];" (assignment_expression "iVar7 = puVar14[3]" identifier = (subscript_expression "puVar14[3]" identifier [ number_literal ])) ;) (expression_statement "puVar20 = (uint *)piVar8[3];" (assignment_expression "puVar20 = (uint *)piVar8[3]" identifier = (cast_expression "(uint *)piVar8[3]" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar8[3]" identifier [ number_literal ]))) ;) (expression_statement "iVar5 = -iVar18 - iVar16;" (assignment_expression "iVar5 = -iVar18 - iVar16" identifier = (binary_expression "-iVar18 - iVar16" (unary_expression "-iVar18" - identifier) - identifier)) ;) (expression_statement "iVar13 = -iVar18;" (assignment_expression "iVar13 = -iVar18" identifier = (unary_expression "-iVar18" - identifier)) ;) (if_statement "if (iVar5 < 1) goto LAB_0001cda8;" if (parenthesized_expression "(iVar5 < 1)" ( (binary_expression "iVar5 < 1" identifier < number_literal) )) (goto_statement "goto LAB_0001cda8;" goto statement_identifier ;)) (labeled_statement "LAB_0001cc68:\n    iVar9 = iVar5 + -1;" statement_identifier : (expression_statement "iVar9 = iVar5 + -1;" (assignment_expression "iVar9 = iVar5 + -1" identifier = (binary_expression "iVar5 + -1" identifier + number_literal)) ;)) (expression_statement "iVar5 = iVar7 + iVar5 * 4;" (assignment_expression "iVar5 = iVar7 + iVar5 * 4" identifier = (binary_expression "iVar7 + iVar5 * 4" identifier + (binary_expression "iVar5 * 4" identifier * number_literal))) ;) (expression_statement "lVar1 = (ulonglong)uVar10 * (ulonglong)*(uint *)(iVar7 + iVar9 * 4);" (assignment_expression "lVar1 = (ulonglong)uVar10 * (ulonglong)*(uint *)(iVar7 + iVar9 * 4)" identifier = (binary_expression "(ulonglong)uVar10 * (ulonglong)*(uint *)(iVar7 + iVar9 * 4)" (binary_expression "(ulonglong)uVar10 * (ulonglong)" (cast_expression "(ulonglong)uVar10" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (parenthesized_expression "(ulonglong)" ( identifier ))) * (cast_expression "(uint *)(iVar7 + iVar9 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar7 + iVar9 * 4)" ( (binary_expression "iVar7 + iVar9 * 4" identifier + (binary_expression "iVar9 * 4" identifier * number_literal)) ))))) ;) (expression_statement "iVar13 = iVar5;" (assignment_expression "iVar13 = iVar5" identifier = identifier) ;) (while_statement "while( true ) {\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      iVar9 = iVar9 + -1;\n      pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n      if (iVar9 == -1) break;\n      puVar11 = (uint *)(iVar13 + -8);\n      iVar13 = iVar13 + -4;\n      uVar2 = (ulonglong)uVar10 * (ulonglong)*puVar11;\n      lVar1 = lVar1 + (uVar2 >> 0x20);\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      if ((int)lVar1 != -1) {\n        pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n        break;\n      }\n      lVar1 = CONCAT44(uVar15,(int)uVar2);\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      iVar9 = iVar9 + -1;\n      pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n      if (iVar9 == -1) break;\n      puVar11 = (uint *)(iVar13 + -8);\n      iVar13 = iVar13 + -4;\n      uVar2 = (ulonglong)uVar10 * (ulonglong)*puVar11;\n      lVar1 = lVar1 + (uVar2 >> 0x20);\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      if ((int)lVar1 != -1) {\n        pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n        break;\n      }\n      lVar1 = CONCAT44(uVar15,(int)uVar2);\n    }" { (expression_statement "uVar15 = (uint)((ulonglong)lVar1 >> 0x20);" (assignment_expression "uVar15 = (uint)((ulonglong)lVar1 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)lVar1 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)lVar1 >> 0x20)" ( (binary_expression "(ulonglong)lVar1 >> 0x20" (cast_expression "(ulonglong)lVar1" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (expression_statement "iVar9 = iVar9 + -1;" (assignment_expression "iVar9 = iVar9 + -1" identifier = (binary_expression "iVar9 + -1" identifier + number_literal)) ;) (expression_statement "pcVar23 = *(code **)(puVar22 + 0x7a4a4);" (assignment_expression "pcVar23 = *(code **)(puVar22 + 0x7a4a4)" identifier = (pointer_expression "*(code **)(puVar22 + 0x7a4a4)" * (cast_expression "(code **)(puVar22 + 0x7a4a4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar22 + 0x7a4a4)" ( (binary_expression "puVar22 + 0x7a4a4" identifier + number_literal) ))))) ;) (if_statement "if (iVar9 == -1) break;" if (parenthesized_expression "(iVar9 == -1)" ( (binary_expression "iVar9 == -1" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "puVar11 = (uint *)(iVar13 + -8);" (assignment_expression "puVar11 = (uint *)(iVar13 + -8)" identifier = (cast_expression "(uint *)(iVar13 + -8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar13 + -8)" ( (binary_expression "iVar13 + -8" identifier + number_literal) )))) ;) (expression_statement "iVar13 = iVar13 + -4;" (assignment_expression "iVar13 = iVar13 + -4" identifier = (binary_expression "iVar13 + -4" identifier + number_literal)) ;) (expression_statement "uVar2 = (ulonglong)uVar10 * (ulonglong)*puVar11;" (assignment_expression "uVar2 = (ulonglong)uVar10 * (ulonglong)*puVar11" identifier = (binary_expression "(ulonglong)uVar10 * (ulonglong)*puVar11" (binary_expression "(ulonglong)uVar10 * (ulonglong)" (cast_expression "(ulonglong)uVar10" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (parenthesized_expression "(ulonglong)" ( identifier ))) * identifier)) ;) (expression_statement "lVar1 = lVar1 + (uVar2 >> 0x20);" (assignment_expression "lVar1 = lVar1 + (uVar2 >> 0x20)" identifier = (binary_expression "lVar1 + (uVar2 >> 0x20)" identifier + (parenthesized_expression "(uVar2 >> 0x20)" ( (binary_expression "uVar2 >> 0x20" identifier >> number_literal) )))) ;) (expression_statement "uVar15 = (uint)((ulonglong)lVar1 >> 0x20);" (assignment_expression "uVar15 = (uint)((ulonglong)lVar1 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)lVar1 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)lVar1 >> 0x20)" ( (binary_expression "(ulonglong)lVar1 >> 0x20" (cast_expression "(ulonglong)lVar1" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (if_statement "if ((int)lVar1 != -1) {\n        pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n        break;\n      }" if (parenthesized_expression "((int)lVar1 != -1)" ( (binary_expression "(int)lVar1 != -1" (cast_expression "(int)lVar1" ( (type_descriptor "int" primitive_type) ) identifier) != number_literal) )) (compound_statement "{\n        pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n        break;\n      }" { (expression_statement "pcVar23 = *(code **)(puVar22 + 0x7a4a4);" (assignment_expression "pcVar23 = *(code **)(puVar22 + 0x7a4a4)" identifier = (pointer_expression "*(code **)(puVar22 + 0x7a4a4)" * (cast_expression "(code **)(puVar22 + 0x7a4a4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar22 + 0x7a4a4)" ( (binary_expression "puVar22 + 0x7a4a4" identifier + number_literal) ))))) ;) (break_statement "break;" break ;) })) (expression_statement "lVar1 = CONCAT44(uVar15,(int)uVar2);" (assignment_expression "lVar1 = CONCAT44(uVar15,(int)uVar2)" identifier = (call_expression "CONCAT44(uVar15,(int)uVar2)" identifier (argument_list "(uVar15,(int)uVar2)" ( identifier , (cast_expression "(int)uVar2" ( (type_descriptor "int" primitive_type) ) identifier) )))) ;) })) (expression_statement "uVar6 = (*pcVar23)(puVar20,iVar5,iVar16);" (assignment_expression "uVar6 = (*pcVar23)(puVar20,iVar5,iVar16)" identifier = (call_expression "(*pcVar23)(puVar20,iVar5,iVar16)" (parenthesized_expression "(*pcVar23)" ( (pointer_expression "*pcVar23" * identifier) )) (argument_list "(puVar20,iVar5,iVar16)" ( identifier , identifier , identifier )))) ;) (expression_statement "uVar17 = *puVar20;" (assignment_expression "uVar17 = *puVar20" identifier = (pointer_expression "*puVar20" * identifier)) ;) (expression_statement "*puVar20 = uVar15 + uVar17;" (assignment_expression "*puVar20 = uVar15 + uVar17" (pointer_expression "*puVar20" * identifier) = (binary_expression "uVar15 + uVar17" identifier + identifier)) ;) (if_statement "if (uVar15 + uVar17 < uVar15) {\n      if (iVar16 < 2) {\nLAB_0001cd34:\n        uVar15 = (uint)(uVar6 + 1 != 0);\n        iVar13 = iVar16 + uVar15;\n        puVar20[iVar16] = uVar6 + 1;\n        piVar8[2] = puVar14[2] + uVar15;\n        goto joined_r0x0001cddc;\n      }\n      uVar15 = puVar20[1];\n      puVar20[1] = uVar15 + 1;\n      if (uVar15 + 1 == 0) {\n        iVar13 = 2;\n        puVar11 = puVar20 + 2;\n        do {\n          if (iVar13 == iVar16) goto LAB_0001cd34;\n          uVar15 = *puVar11;\n          iVar13 = iVar13 + 1;\n          *puVar11 = uVar15 + 1;\n          puVar11 = puVar11 + 1;\n        } while (uVar15 + 1 == 0);\n      }\n    }" if (parenthesized_expression "(uVar15 + uVar17 < uVar15)" ( (binary_expression "uVar15 + uVar17 < uVar15" (binary_expression "uVar15 + uVar17" identifier + identifier) < identifier) )) (compound_statement "{\n      if (iVar16 < 2) {\nLAB_0001cd34:\n        uVar15 = (uint)(uVar6 + 1 != 0);\n        iVar13 = iVar16 + uVar15;\n        puVar20[iVar16] = uVar6 + 1;\n        piVar8[2] = puVar14[2] + uVar15;\n        goto joined_r0x0001cddc;\n      }\n      uVar15 = puVar20[1];\n      puVar20[1] = uVar15 + 1;\n      if (uVar15 + 1 == 0) {\n        iVar13 = 2;\n        puVar11 = puVar20 + 2;\n        do {\n          if (iVar13 == iVar16) goto LAB_0001cd34;\n          uVar15 = *puVar11;\n          iVar13 = iVar13 + 1;\n          *puVar11 = uVar15 + 1;\n          puVar11 = puVar11 + 1;\n        } while (uVar15 + 1 == 0);\n      }\n    }" { (if_statement "if (iVar16 < 2) {\nLAB_0001cd34:\n        uVar15 = (uint)(uVar6 + 1 != 0);\n        iVar13 = iVar16 + uVar15;\n        puVar20[iVar16] = uVar6 + 1;\n        piVar8[2] = puVar14[2] + uVar15;\n        goto joined_r0x0001cddc;\n      }" if (parenthesized_expression "(iVar16 < 2)" ( (binary_expression "iVar16 < 2" identifier < number_literal) )) (compound_statement "{\nLAB_0001cd34:\n        uVar15 = (uint)(uVar6 + 1 != 0);\n        iVar13 = iVar16 + uVar15;\n        puVar20[iVar16] = uVar6 + 1;\n        piVar8[2] = puVar14[2] + uVar15;\n        goto joined_r0x0001cddc;\n      }" { (labeled_statement "LAB_0001cd34:\n        uVar15 = (uint)(uVar6 + 1 != 0);" statement_identifier : (expression_statement "uVar15 = (uint)(uVar6 + 1 != 0);" (assignment_expression "uVar15 = (uint)(uVar6 + 1 != 0)" identifier = (call_expression "(uint)(uVar6 + 1 != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar6 + 1 != 0)" ( (binary_expression "uVar6 + 1 != 0" (binary_expression "uVar6 + 1" identifier + number_literal) != number_literal) )))) ;)) (expression_statement "iVar13 = iVar16 + uVar15;" (assignment_expression "iVar13 = iVar16 + uVar15" identifier = (binary_expression "iVar16 + uVar15" identifier + identifier)) ;) (expression_statement "puVar20[iVar16] = uVar6 + 1;" (assignment_expression "puVar20[iVar16] = uVar6 + 1" (subscript_expression "puVar20[iVar16]" identifier [ identifier ]) = (binary_expression "uVar6 + 1" identifier + number_literal)) ;) (expression_statement "piVar8[2] = puVar14[2] + uVar15;" (assignment_expression "piVar8[2] = puVar14[2] + uVar15" (subscript_expression "piVar8[2]" identifier [ number_literal ]) = (binary_expression "puVar14[2] + uVar15" (subscript_expression "puVar14[2]" identifier [ number_literal ]) + identifier)) ;) (goto_statement "goto joined_r0x0001cddc;" goto statement_identifier ;) })) (expression_statement "uVar15 = puVar20[1];" (assignment_expression "uVar15 = puVar20[1]" identifier = (subscript_expression "puVar20[1]" identifier [ number_literal ])) ;) (expression_statement "puVar20[1] = uVar15 + 1;" (assignment_expression "puVar20[1] = uVar15 + 1" (subscript_expression "puVar20[1]" identifier [ number_literal ]) = (binary_expression "uVar15 + 1" identifier + number_literal)) ;) (if_statement "if (uVar15 + 1 == 0) {\n        iVar13 = 2;\n        puVar11 = puVar20 + 2;\n        do {\n          if (iVar13 == iVar16) goto LAB_0001cd34;\n          uVar15 = *puVar11;\n          iVar13 = iVar13 + 1;\n          *puVar11 = uVar15 + 1;\n          puVar11 = puVar11 + 1;\n        } while (uVar15 + 1 == 0);\n      }" if (parenthesized_expression "(uVar15 + 1 == 0)" ( (binary_expression "uVar15 + 1 == 0" (binary_expression "uVar15 + 1" identifier + number_literal) == number_literal) )) (compound_statement "{\n        iVar13 = 2;\n        puVar11 = puVar20 + 2;\n        do {\n          if (iVar13 == iVar16) goto LAB_0001cd34;\n          uVar15 = *puVar11;\n          iVar13 = iVar13 + 1;\n          *puVar11 = uVar15 + 1;\n          puVar11 = puVar11 + 1;\n        } while (uVar15 + 1 == 0);\n      }" { (expression_statement "iVar13 = 2;" (assignment_expression "iVar13 = 2" identifier = number_literal) ;) (expression_statement "puVar11 = puVar20 + 2;" (assignment_expression "puVar11 = puVar20 + 2" identifier = (binary_expression "puVar20 + 2" identifier + number_literal)) ;) (do_statement "do {\n          if (iVar13 == iVar16) goto LAB_0001cd34;\n          uVar15 = *puVar11;\n          iVar13 = iVar13 + 1;\n          *puVar11 = uVar15 + 1;\n          puVar11 = puVar11 + 1;\n        } while (uVar15 + 1 == 0);" do (compound_statement "{\n          if (iVar13 == iVar16) goto LAB_0001cd34;\n          uVar15 = *puVar11;\n          iVar13 = iVar13 + 1;\n          *puVar11 = uVar15 + 1;\n          puVar11 = puVar11 + 1;\n        }" { (if_statement "if (iVar13 == iVar16) goto LAB_0001cd34;" if (parenthesized_expression "(iVar13 == iVar16)" ( (binary_expression "iVar13 == iVar16" identifier == identifier) )) (goto_statement "goto LAB_0001cd34;" goto statement_identifier ;)) (expression_statement "uVar15 = *puVar11;" (assignment_expression "uVar15 = *puVar11" identifier = (pointer_expression "*puVar11" * identifier)) ;) (expression_statement "iVar13 = iVar13 + 1;" (assignment_expression "iVar13 = iVar13 + 1" identifier = (binary_expression "iVar13 + 1" identifier + number_literal)) ;) (expression_statement "*puVar11 = uVar15 + 1;" (assignment_expression "*puVar11 = uVar15 + 1" (pointer_expression "*puVar11" * identifier) = (binary_expression "uVar15 + 1" identifier + number_literal)) ;) (expression_statement "puVar11 = puVar11 + 1;" (assignment_expression "puVar11 = puVar11 + 1" identifier = (binary_expression "puVar11 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar15 + 1 == 0)" ( (binary_expression "uVar15 + 1 == 0" (binary_expression "uVar15 + 1" identifier + number_literal) == number_literal) )) ;) })) })) }) (else_clause "else {\n    iVar16 = *piVar8;\n    iVar7 = puVar14[3];\n    iVar5 = iVar18 - iVar16;\n    puVar20 = (uint *)piVar8[3];\n    iVar13 = iVar18;\n    if (0 < iVar5) goto LAB_0001cc68;\nLAB_0001cda8:\n    iVar16 = iVar13;\n    uVar6 = (**(code **)(puVar22 + 0x7a4a4))(puVar20,iVar7,iVar16);\n  }" else (compound_statement "{\n    iVar16 = *piVar8;\n    iVar7 = puVar14[3];\n    iVar5 = iVar18 - iVar16;\n    puVar20 = (uint *)piVar8[3];\n    iVar13 = iVar18;\n    if (0 < iVar5) goto LAB_0001cc68;\nLAB_0001cda8:\n    iVar16 = iVar13;\n    uVar6 = (**(code **)(puVar22 + 0x7a4a4))(puVar20,iVar7,iVar16);\n  }" { (expression_statement "iVar16 = *piVar8;" (assignment_expression "iVar16 = *piVar8" identifier = (pointer_expression "*piVar8" * identifier)) ;) (expression_statement "iVar7 = puVar14[3];" (assignment_expression "iVar7 = puVar14[3]" identifier = (subscript_expression "puVar14[3]" identifier [ number_literal ])) ;) (expression_statement "iVar5 = iVar18 - iVar16;" (assignment_expression "iVar5 = iVar18 - iVar16" identifier = (binary_expression "iVar18 - iVar16" identifier - identifier)) ;) (expression_statement "puVar20 = (uint *)piVar8[3];" (assignment_expression "puVar20 = (uint *)piVar8[3]" identifier = (cast_expression "(uint *)piVar8[3]" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar8[3]" identifier [ number_literal ]))) ;) (expression_statement "iVar13 = iVar18;" (assignment_expression "iVar13 = iVar18" identifier = identifier) ;) (if_statement "if (0 < iVar5) goto LAB_0001cc68;" if (parenthesized_expression "(0 < iVar5)" ( (binary_expression "0 < iVar5" number_literal < identifier) )) (goto_statement "goto LAB_0001cc68;" goto statement_identifier ;)) (labeled_statement "LAB_0001cda8:\n    iVar16 = iVar13;" statement_identifier : (expression_statement "iVar16 = iVar13;" (assignment_expression "iVar16 = iVar13" identifier = identifier) ;)) (expression_statement "uVar6 = (**(code **)(puVar22 + 0x7a4a4))(puVar20,iVar7,iVar16);" (assignment_expression "uVar6 = (**(code **)(puVar22 + 0x7a4a4))(puVar20,iVar7,iVar16)" identifier = (call_expression "(**(code **)(puVar22 + 0x7a4a4))(puVar20,iVar7,iVar16)" (parenthesized_expression "(**(code **)(puVar22 + 0x7a4a4))" ( (pointer_expression "**(code **)(puVar22 + 0x7a4a4)" * (pointer_expression "*(code **)(puVar22 + 0x7a4a4)" * (cast_expression "(code **)(puVar22 + 0x7a4a4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar22 + 0x7a4a4)" ( (binary_expression "puVar22 + 0x7a4a4" identifier + number_literal) ))))) )) (argument_list "(puVar20,iVar7,iVar16)" ( identifier , identifier , identifier )))) ;) }))) (expression_statement "iVar13 = iVar16 + (uint)(uVar6 != 0);" (assignment_expression "iVar13 = iVar16 + (uint)(uVar6 != 0)" identifier = (binary_expression "iVar16 + (uint)(uVar6 != 0)" identifier + (call_expression "(uint)(uVar6 != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar6 != 0)" ( (binary_expression "uVar6 != 0" identifier != number_literal) ))))) ;) (expression_statement "puVar20[iVar16] = uVar6;" (assignment_expression "puVar20[iVar16] = uVar6" (subscript_expression "puVar20[iVar16]" identifier [ identifier ]) = identifier) ;) (expression_statement "piVar8[2] = puVar14[2] + (uint)(uVar6 != 0);" (assignment_expression "piVar8[2] = puVar14[2] + (uint)(uVar6 != 0)" (subscript_expression "piVar8[2]" identifier [ number_literal ]) = (binary_expression "puVar14[2] + (uint)(uVar6 != 0)" (subscript_expression "puVar14[2]" identifier [ number_literal ]) + (call_expression "(uint)(uVar6 != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar6 != 0)" ( (binary_expression "uVar6 != 0" identifier != number_literal) ))))) ;) (labeled_statement "joined_r0x0001cddc:\n  if (iVar18 < 0) {\n    iVar13 = -iVar13;\n  }" statement_identifier : (if_statement "if (iVar18 < 0) {\n    iVar13 = -iVar13;\n  }" if (parenthesized_expression "(iVar18 < 0)" ( (binary_expression "iVar18 < 0" identifier < number_literal) )) (compound_statement "{\n    iVar13 = -iVar13;\n  }" { (expression_statement "iVar13 = -iVar13;" (assignment_expression "iVar13 = -iVar13" identifier = (unary_expression "-iVar13" - identifier)) ;) }))) (expression_statement "piVar8[1] = iVar13;" (assignment_expression "piVar8[1] = iVar13" (subscript_expression "piVar8[1]" identifier [ number_literal ]) = identifier) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (unary_expression - IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (unary_expression - IDENT)) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )))) != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (parenthesized_expression ( (binary_expression IDENT - IDENT) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (parenthesized_expression ( (binary_expression IDENT - IDENT) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) || (parenthesized_expression ( (binary_expression IDENT == LIT) ))) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT + IDENT) )) * LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) 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 IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression & IDENT) + IDENT) )))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( (pointer_expression & IDENT) ))))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , IDENT , IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , IDENT , IDENT , IDENT )))) ;) }))) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT + IDENT) )) - (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT == LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (parenthesized_expression ( (binary_expression IDENT - IDENT) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (parenthesized_expression ( (binary_expression IDENT - LIT) )))) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT ^ IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) - (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT == LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (unary_expression - IDENT)) ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( ))) ;) })) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) )) (compound_statement { (return_statement return ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) || (parenthesized_expression ( (binary_expression IDENT == LIT) ))) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (return_statement return ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (unary_expression - IDENT) - IDENT)) ;) (expression_statement (assignment_expression IDENT = (unary_expression - IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression IDENT * LIT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * (parenthesized_expression ( IDENT ))) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * (parenthesized_expression ( IDENT ))) * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (parenthesized_expression ( (binary_expression IDENT >> LIT) )))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (break_statement break ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (cast_expression ( (type_descriptor TYPE) ) IDENT) )))) ;) })) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression IDENT + IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + IDENT) < IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression IDENT + LIT) != LIT) )))) ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ IDENT ]) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT)) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) == LIT) )) ;) })) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = IDENT) ;)) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( IDENT , IDENT , IDENT )))) ;) }))) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT != LIT) ))))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ IDENT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) + (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT != LIT) ))))) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (unary_expression - IDENT)) ;) }))) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (return_statement return ;) })))
(function_definition "void __gmpf_mul(uint *param_1,undefined4 *param_2,int param_3)\n\n{\n  longlong lVar1;\n  ulonglong uVar2;\n  undefined4 *puVar3;\n  undefined4 *puVar4;\n  int iVar5;\n  uint uVar6;\n  int iVar7;\n  int *piVar8;\n  int iVar9;\n  uint uVar10;\n  uint *puVar11;\n  undefined4 *puVar12;\n  int iVar13;\n  undefined4 *puVar14;\n  uint uVar15;\n  int iVar16;\n  uint uVar17;\n  int iVar18;\n  uint uVar19;\n  uint *puVar20;\n  uint uVar21;\n  undefined *puVar22;\n  code *pcVar23;\n  undefined1 *puVar24;\n  undefined4 uVar25;\n  undefined1 auStack_60 [24];\n  int *local_30;\n  int local_2c;\n  \n  puVar22 = PTR___stack_chk_guard_00097540;\n  puVar24 = auStack_60;\n  uVar17 = param_2[1];\n  local_2c = *(int *)PTR___stack_chk_guard_00097540;\n  uVar15 = *param_1;\n  uVar19 = *(uint *)(param_3 + 4);\n  uVar6 = -uVar17;\n  if (-1 < (int)uVar17) {\n    uVar6 = uVar17;\n  }\n  uVar10 = uVar19;\n  if ((int)uVar19 < 0) {\n    uVar10 = -uVar19;\n  }\n  puVar14 = (undefined4 *)param_2[3];\n  puVar12 = *(undefined4 **)(param_3 + 0xc);\n  uVar21 = uVar6;\n  if ((int *)(uint)((int)uVar15 < (int)uVar6) != (int *)0x0) {\n    puVar14 = puVar14 + (uVar6 - uVar15);\n    uVar21 = uVar15;\n  }\n  if ((int)uVar15 < (int)uVar10) {\n    puVar12 = puVar12 + (uVar10 - uVar15);\n    uVar10 = uVar15;\n  }\n  if ((uVar21 == 0) || (uVar10 == 0)) {\n    param_1[1] = 0;\n    param_1[2] = 0;\n    piVar8 = (int *)(uint)((int)uVar15 < (int)uVar6);\n    puVar14 = param_2;\n    puVar24 = auStack_60;\n  }\n  else {\n    uVar6 = (uVar21 + uVar10) * 4;\n    local_30 = (int *)0x0;\n    if (uVar6 < 0x7f01) {\n      iVar18 = -(uVar6 + 7 & 0xfffffff8);\n      puVar24 = auStack_60 + iVar18;\n      puVar4 = (undefined4 *)(&stack0xffffffb8 + iVar18);\n    }\n    else {\n      puVar4 = (undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30);\n    }\n    if ((int)uVar21 < (int)uVar10) {\n      *(uint *)(puVar24 + 0x10) = uVar21;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar12,uVar10,puVar14);\n      puVar14 = puVar12;\n    }\n    else {\n      *(uint *)(puVar24 + 0x10) = uVar10;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12);\n    }\n    uVar10 = (uVar21 + uVar10) - (uint)(iVar18 == 0);\n    uVar15 = uVar15 + 1;\n    if ((int)uVar15 < (int)uVar10) {\n      puVar4 = puVar4 + (uVar10 - uVar15);\n      uVar10 = uVar15;\n    }\n    iVar13 = uVar10 - 1;\n    if (uVar10 != 0) {\n      puVar3 = (undefined4 *)param_1[3];\n      uVar25 = *puVar4;\n      puVar12 = puVar3;\n      if (iVar13 != 0) {\n        do {\n          puVar4 = puVar4 + 1;\n          puVar14 = puVar12 + 1;\n          *puVar12 = uVar25;\n          iVar13 = iVar13 + -1;\n          uVar25 = *puVar4;\n          puVar12 = puVar14;\n        } while (iVar13 != 0);\n        puVar3 = puVar3 + (uVar10 - 1);\n      }\n      *puVar3 = uVar25;\n    }\n    uVar17 = uVar17 ^ uVar19;\n    param_1[2] = (param_2[2] + *(int *)(param_3 + 8)) - (uint)(iVar18 == 0);\n    if ((int)uVar17 < 0) {\n      uVar10 = -uVar10;\n    }\n    param_1[1] = uVar10;\n    piVar8 = local_30;\n    if (local_30 != (int *)0x0) {\n      (*(code *)PTR___gmp_tmp_reentrant_free_00097614)();\n    }\n  }\n  if (local_2c == *(int *)puVar22) {\n    return;\n  }\n  uVar25 = 0x1cbf4;\n  puVar22 = PTR___stack_chk_fail_000974d0;\n  (*(code *)PTR___stack_chk_fail_000974d0)();\n  *(undefined **)(puVar24 + -0x28) = puVar22 + 0x82440;\n  *(uint **)(puVar24 + -0x14) = param_1;\n  *(undefined4 *)(puVar24 + -4) = uVar25;\n  *(undefined4 **)(puVar24 + -8) = param_2;\n  *(int *)(puVar24 + -0xc) = param_3;\n  *(uint *)(puVar24 + -0x10) = uVar19;\n  *(uint *)(puVar24 + -0x18) = uVar17;\n  *(uint *)(puVar24 + -0x1c) = uVar15;\n  iVar18 = puVar14[1];\n  if ((uVar10 == 0) || (iVar18 == 0)) {\n    piVar8[1] = 0;\n    piVar8[2] = 0;\n    return;\n  }\n  if (iVar18 < 0) {\n    iVar16 = *piVar8;\n    iVar7 = puVar14[3];\n    puVar20 = (uint *)piVar8[3];\n    iVar5 = -iVar18 - iVar16;\n    iVar13 = -iVar18;\n    if (iVar5 < 1) goto LAB_0001cda8;\nLAB_0001cc68:\n    iVar9 = iVar5 + -1;\n    iVar5 = iVar7 + iVar5 * 4;\n    lVar1 = (ulonglong)uVar10 * (ulonglong)*(uint *)(iVar7 + iVar9 * 4);\n    iVar13 = iVar5;\n    while( true ) {\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      iVar9 = iVar9 + -1;\n      pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n      if (iVar9 == -1) break;\n      puVar11 = (uint *)(iVar13 + -8);\n      iVar13 = iVar13 + -4;\n      uVar2 = (ulonglong)uVar10 * (ulonglong)*puVar11;\n      lVar1 = lVar1 + (uVar2 >> 0x20);\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      if ((int)lVar1 != -1) {\n        pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n        break;\n      }\n      lVar1 = CONCAT44(uVar15,(int)uVar2);\n    }\n    uVar6 = (*pcVar23)(puVar20,iVar5,iVar16);\n    uVar17 = *puVar20;\n    *puVar20 = uVar15 + uVar17;\n    if (uVar15 + uVar17 < uVar15) {\n      if (iVar16 < 2) {\nLAB_0001cd34:\n        uVar15 = (uint)(uVar6 + 1 != 0);\n        iVar13 = iVar16 + uVar15;\n        puVar20[iVar16] = uVar6 + 1;\n        piVar8[2] = puVar14[2] + uVar15;\n        goto joined_r0x0001cddc;\n      }\n      uVar15 = puVar20[1];\n      puVar20[1] = uVar15 + 1;\n      if (uVar15 + 1 == 0) {\n        iVar13 = 2;\n        puVar11 = puVar20 + 2;\n        do {\n          if (iVar13 == iVar16) goto LAB_0001cd34;\n          uVar15 = *puVar11;\n          iVar13 = iVar13 + 1;\n          *puVar11 = uVar15 + 1;\n          puVar11 = puVar11 + 1;\n        } while (uVar15 + 1 == 0);\n      }\n    }\n  }\n  else {\n    iVar16 = *piVar8;\n    iVar7 = puVar14[3];\n    iVar5 = iVar18 - iVar16;\n    puVar20 = (uint *)piVar8[3];\n    iVar13 = iVar18;\n    if (0 < iVar5) goto LAB_0001cc68;\nLAB_0001cda8:\n    iVar16 = iVar13;\n    uVar6 = (**(code **)(puVar22 + 0x7a4a4))(puVar20,iVar7,iVar16);\n  }\n  iVar13 = iVar16 + (uint)(uVar6 != 0);\n  puVar20[iVar16] = uVar6;\n  piVar8[2] = puVar14[2] + (uint)(uVar6 != 0);\njoined_r0x0001cddc:\n  if (iVar18 < 0) {\n    iVar13 = -iVar13;\n  }\n  piVar8[1] = iVar13;\n  return;\n}" (primitive_type "void") (function_declarator "__gmpf_mul(uint *param_1,undefined4 *param_2,int param_3)" (identifier "__gmpf_mul") (parameter_list "(uint *param_1,undefined4 *param_2,int param_3)" (( "(") (parameter_declaration "uint *param_1" (type_identifier "uint") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "undefined4 *param_2" (type_identifier "undefined4") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) () ")"))) (compound_statement "{\n  longlong lVar1;\n  ulonglong uVar2;\n  undefined4 *puVar3;\n  undefined4 *puVar4;\n  int iVar5;\n  uint uVar6;\n  int iVar7;\n  int *piVar8;\n  int iVar9;\n  uint uVar10;\n  uint *puVar11;\n  undefined4 *puVar12;\n  int iVar13;\n  undefined4 *puVar14;\n  uint uVar15;\n  int iVar16;\n  uint uVar17;\n  int iVar18;\n  uint uVar19;\n  uint *puVar20;\n  uint uVar21;\n  undefined *puVar22;\n  code *pcVar23;\n  undefined1 *puVar24;\n  undefined4 uVar25;\n  undefined1 auStack_60 [24];\n  int *local_30;\n  int local_2c;\n  \n  puVar22 = PTR___stack_chk_guard_00097540;\n  puVar24 = auStack_60;\n  uVar17 = param_2[1];\n  local_2c = *(int *)PTR___stack_chk_guard_00097540;\n  uVar15 = *param_1;\n  uVar19 = *(uint *)(param_3 + 4);\n  uVar6 = -uVar17;\n  if (-1 < (int)uVar17) {\n    uVar6 = uVar17;\n  }\n  uVar10 = uVar19;\n  if ((int)uVar19 < 0) {\n    uVar10 = -uVar19;\n  }\n  puVar14 = (undefined4 *)param_2[3];\n  puVar12 = *(undefined4 **)(param_3 + 0xc);\n  uVar21 = uVar6;\n  if ((int *)(uint)((int)uVar15 < (int)uVar6) != (int *)0x0) {\n    puVar14 = puVar14 + (uVar6 - uVar15);\n    uVar21 = uVar15;\n  }\n  if ((int)uVar15 < (int)uVar10) {\n    puVar12 = puVar12 + (uVar10 - uVar15);\n    uVar10 = uVar15;\n  }\n  if ((uVar21 == 0) || (uVar10 == 0)) {\n    param_1[1] = 0;\n    param_1[2] = 0;\n    piVar8 = (int *)(uint)((int)uVar15 < (int)uVar6);\n    puVar14 = param_2;\n    puVar24 = auStack_60;\n  }\n  else {\n    uVar6 = (uVar21 + uVar10) * 4;\n    local_30 = (int *)0x0;\n    if (uVar6 < 0x7f01) {\n      iVar18 = -(uVar6 + 7 & 0xfffffff8);\n      puVar24 = auStack_60 + iVar18;\n      puVar4 = (undefined4 *)(&stack0xffffffb8 + iVar18);\n    }\n    else {\n      puVar4 = (undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30);\n    }\n    if ((int)uVar21 < (int)uVar10) {\n      *(uint *)(puVar24 + 0x10) = uVar21;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar12,uVar10,puVar14);\n      puVar14 = puVar12;\n    }\n    else {\n      *(uint *)(puVar24 + 0x10) = uVar10;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12);\n    }\n    uVar10 = (uVar21 + uVar10) - (uint)(iVar18 == 0);\n    uVar15 = uVar15 + 1;\n    if ((int)uVar15 < (int)uVar10) {\n      puVar4 = puVar4 + (uVar10 - uVar15);\n      uVar10 = uVar15;\n    }\n    iVar13 = uVar10 - 1;\n    if (uVar10 != 0) {\n      puVar3 = (undefined4 *)param_1[3];\n      uVar25 = *puVar4;\n      puVar12 = puVar3;\n      if (iVar13 != 0) {\n        do {\n          puVar4 = puVar4 + 1;\n          puVar14 = puVar12 + 1;\n          *puVar12 = uVar25;\n          iVar13 = iVar13 + -1;\n          uVar25 = *puVar4;\n          puVar12 = puVar14;\n        } while (iVar13 != 0);\n        puVar3 = puVar3 + (uVar10 - 1);\n      }\n      *puVar3 = uVar25;\n    }\n    uVar17 = uVar17 ^ uVar19;\n    param_1[2] = (param_2[2] + *(int *)(param_3 + 8)) - (uint)(iVar18 == 0);\n    if ((int)uVar17 < 0) {\n      uVar10 = -uVar10;\n    }\n    param_1[1] = uVar10;\n    piVar8 = local_30;\n    if (local_30 != (int *)0x0) {\n      (*(code *)PTR___gmp_tmp_reentrant_free_00097614)();\n    }\n  }\n  if (local_2c == *(int *)puVar22) {\n    return;\n  }\n  uVar25 = 0x1cbf4;\n  puVar22 = PTR___stack_chk_fail_000974d0;\n  (*(code *)PTR___stack_chk_fail_000974d0)();\n  *(undefined **)(puVar24 + -0x28) = puVar22 + 0x82440;\n  *(uint **)(puVar24 + -0x14) = param_1;\n  *(undefined4 *)(puVar24 + -4) = uVar25;\n  *(undefined4 **)(puVar24 + -8) = param_2;\n  *(int *)(puVar24 + -0xc) = param_3;\n  *(uint *)(puVar24 + -0x10) = uVar19;\n  *(uint *)(puVar24 + -0x18) = uVar17;\n  *(uint *)(puVar24 + -0x1c) = uVar15;\n  iVar18 = puVar14[1];\n  if ((uVar10 == 0) || (iVar18 == 0)) {\n    piVar8[1] = 0;\n    piVar8[2] = 0;\n    return;\n  }\n  if (iVar18 < 0) {\n    iVar16 = *piVar8;\n    iVar7 = puVar14[3];\n    puVar20 = (uint *)piVar8[3];\n    iVar5 = -iVar18 - iVar16;\n    iVar13 = -iVar18;\n    if (iVar5 < 1) goto LAB_0001cda8;\nLAB_0001cc68:\n    iVar9 = iVar5 + -1;\n    iVar5 = iVar7 + iVar5 * 4;\n    lVar1 = (ulonglong)uVar10 * (ulonglong)*(uint *)(iVar7 + iVar9 * 4);\n    iVar13 = iVar5;\n    while( true ) {\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      iVar9 = iVar9 + -1;\n      pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n      if (iVar9 == -1) break;\n      puVar11 = (uint *)(iVar13 + -8);\n      iVar13 = iVar13 + -4;\n      uVar2 = (ulonglong)uVar10 * (ulonglong)*puVar11;\n      lVar1 = lVar1 + (uVar2 >> 0x20);\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      if ((int)lVar1 != -1) {\n        pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n        break;\n      }\n      lVar1 = CONCAT44(uVar15,(int)uVar2);\n    }\n    uVar6 = (*pcVar23)(puVar20,iVar5,iVar16);\n    uVar17 = *puVar20;\n    *puVar20 = uVar15 + uVar17;\n    if (uVar15 + uVar17 < uVar15) {\n      if (iVar16 < 2) {\nLAB_0001cd34:\n        uVar15 = (uint)(uVar6 + 1 != 0);\n        iVar13 = iVar16 + uVar15;\n        puVar20[iVar16] = uVar6 + 1;\n        piVar8[2] = puVar14[2] + uVar15;\n        goto joined_r0x0001cddc;\n      }\n      uVar15 = puVar20[1];\n      puVar20[1] = uVar15 + 1;\n      if (uVar15 + 1 == 0) {\n        iVar13 = 2;\n        puVar11 = puVar20 + 2;\n        do {\n          if (iVar13 == iVar16) goto LAB_0001cd34;\n          uVar15 = *puVar11;\n          iVar13 = iVar13 + 1;\n          *puVar11 = uVar15 + 1;\n          puVar11 = puVar11 + 1;\n        } while (uVar15 + 1 == 0);\n      }\n    }\n  }\n  else {\n    iVar16 = *piVar8;\n    iVar7 = puVar14[3];\n    iVar5 = iVar18 - iVar16;\n    puVar20 = (uint *)piVar8[3];\n    iVar13 = iVar18;\n    if (0 < iVar5) goto LAB_0001cc68;\nLAB_0001cda8:\n    iVar16 = iVar13;\n    uVar6 = (**(code **)(puVar22 + 0x7a4a4))(puVar20,iVar7,iVar16);\n  }\n  iVar13 = iVar16 + (uint)(uVar6 != 0);\n  puVar20[iVar16] = uVar6;\n  piVar8[2] = puVar14[2] + (uint)(uVar6 != 0);\njoined_r0x0001cddc:\n  if (iVar18 < 0) {\n    iVar13 = -iVar13;\n  }\n  piVar8[1] = iVar13;\n  return;\n}" ({ "{") (declaration "longlong lVar1;" (type_identifier "longlong") (identifier "lVar1") (; ";")) (declaration "ulonglong uVar2;" (type_identifier "ulonglong") (identifier "uVar2") (; ";")) (declaration "undefined4 *puVar3;" (type_identifier "undefined4") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "undefined4 *puVar4;" (type_identifier "undefined4") (pointer_declarator "*puVar4" (* "*") (identifier "puVar4")) (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "uint uVar6;" (type_identifier "uint") (identifier "uVar6") (; ";")) (declaration "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (declaration "int *piVar8;" (primitive_type "int") (pointer_declarator "*piVar8" (* "*") (identifier "piVar8")) (; ";")) (declaration "int iVar9;" (primitive_type "int") (identifier "iVar9") (; ";")) (declaration "uint uVar10;" (type_identifier "uint") (identifier "uVar10") (; ";")) (declaration "uint *puVar11;" (type_identifier "uint") (pointer_declarator "*puVar11" (* "*") (identifier "puVar11")) (; ";")) (declaration "undefined4 *puVar12;" (type_identifier "undefined4") (pointer_declarator "*puVar12" (* "*") (identifier "puVar12")) (; ";")) (declaration "int iVar13;" (primitive_type "int") (identifier "iVar13") (; ";")) (declaration "undefined4 *puVar14;" (type_identifier "undefined4") (pointer_declarator "*puVar14" (* "*") (identifier "puVar14")) (; ";")) (declaration "uint uVar15;" (type_identifier "uint") (identifier "uVar15") (; ";")) (declaration "int iVar16;" (primitive_type "int") (identifier "iVar16") (; ";")) (declaration "uint uVar17;" (type_identifier "uint") (identifier "uVar17") (; ";")) (declaration "int iVar18;" (primitive_type "int") (identifier "iVar18") (; ";")) (declaration "uint uVar19;" (type_identifier "uint") (identifier "uVar19") (; ";")) (declaration "uint *puVar20;" (type_identifier "uint") (pointer_declarator "*puVar20" (* "*") (identifier "puVar20")) (; ";")) (declaration "uint uVar21;" (type_identifier "uint") (identifier "uVar21") (; ";")) (declaration "undefined *puVar22;" (type_identifier "undefined") (pointer_declarator "*puVar22" (* "*") (identifier "puVar22")) (; ";")) (declaration "code *pcVar23;" (type_identifier "code") (pointer_declarator "*pcVar23" (* "*") (identifier "pcVar23")) (; ";")) (declaration "undefined1 *puVar24;" (type_identifier "undefined1") (pointer_declarator "*puVar24" (* "*") (identifier "puVar24")) (; ";")) (declaration "undefined4 uVar25;" (type_identifier "undefined4") (identifier "uVar25") (; ";")) (declaration "undefined1 auStack_60 [24];" (type_identifier "undefined1") (array_declarator "auStack_60 [24]" (identifier "auStack_60") ([ "[") (number_literal "24") (] "]")) (; ";")) (declaration "int *local_30;" (primitive_type "int") (pointer_declarator "*local_30" (* "*") (identifier "local_30")) (; ";")) (declaration "int local_2c;" (primitive_type "int") (identifier "local_2c") (; ";")) (expression_statement "puVar22 = PTR___stack_chk_guard_00097540;" (assignment_expression "puVar22 = PTR___stack_chk_guard_00097540" (identifier "puVar22") (= "=") (identifier "PTR___stack_chk_guard_00097540")) (; ";")) (expression_statement "puVar24 = auStack_60;" (assignment_expression "puVar24 = auStack_60" (identifier "puVar24") (= "=") (identifier "auStack_60")) (; ";")) (expression_statement "uVar17 = param_2[1];" (assignment_expression "uVar17 = param_2[1]" (identifier "uVar17") (= "=") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "local_2c = *(int *)PTR___stack_chk_guard_00097540;" (assignment_expression "local_2c = *(int *)PTR___stack_chk_guard_00097540" (identifier "local_2c") (= "=") (pointer_expression "*(int *)PTR___stack_chk_guard_00097540" (* "*") (cast_expression "(int *)PTR___stack_chk_guard_00097540" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___stack_chk_guard_00097540")))) (; ";")) (expression_statement "uVar15 = *param_1;" (assignment_expression "uVar15 = *param_1" (identifier "uVar15") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "uVar19 = *(uint *)(param_3 + 4);" (assignment_expression "uVar19 = *(uint *)(param_3 + 4)" (identifier "uVar19") (= "=") (pointer_expression "*(uint *)(param_3 + 4)" (* "*") (cast_expression "(uint *)(param_3 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 4)" (( "(") (binary_expression "param_3 + 4" (identifier "param_3") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (expression_statement "uVar6 = -uVar17;" (assignment_expression "uVar6 = -uVar17" (identifier "uVar6") (= "=") (unary_expression "-uVar17" (- "-") (identifier "uVar17"))) (; ";")) (if_statement "if (-1 < (int)uVar17) {\n    uVar6 = uVar17;\n  }" (if "if") (parenthesized_expression "(-1 < (int)uVar17)" (( "(") (binary_expression "-1 < (int)uVar17" (number_literal "-1") (< "<") (cast_expression "(int)uVar17" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar17"))) () ")")) (compound_statement "{\n    uVar6 = uVar17;\n  }" ({ "{") (expression_statement "uVar6 = uVar17;" (assignment_expression "uVar6 = uVar17" (identifier "uVar6") (= "=") (identifier "uVar17")) (; ";")) (} "}"))) (expression_statement "uVar10 = uVar19;" (assignment_expression "uVar10 = uVar19" (identifier "uVar10") (= "=") (identifier "uVar19")) (; ";")) (if_statement "if ((int)uVar19 < 0) {\n    uVar10 = -uVar19;\n  }" (if "if") (parenthesized_expression "((int)uVar19 < 0)" (( "(") (binary_expression "(int)uVar19 < 0" (cast_expression "(int)uVar19" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar19")) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n    uVar10 = -uVar19;\n  }" ({ "{") (expression_statement "uVar10 = -uVar19;" (assignment_expression "uVar10 = -uVar19" (identifier "uVar10") (= "=") (unary_expression "-uVar19" (- "-") (identifier "uVar19"))) (; ";")) (} "}"))) (expression_statement "puVar14 = (undefined4 *)param_2[3];" (assignment_expression "puVar14 = (undefined4 *)param_2[3]" (identifier "puVar14") (= "=") (cast_expression "(undefined4 *)param_2[3]" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_2[3]" (identifier "param_2") ([ "[") (number_literal "3") (] "]")))) (; ";")) (expression_statement "puVar12 = *(undefined4 **)(param_3 + 0xc);" (assignment_expression "puVar12 = *(undefined4 **)(param_3 + 0xc)" (identifier "puVar12") (= "=") (pointer_expression "*(undefined4 **)(param_3 + 0xc)" (* "*") (cast_expression "(undefined4 **)(param_3 + 0xc)" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_3 + 0xc)" (( "(") (binary_expression "param_3 + 0xc" (identifier "param_3") (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (expression_statement "uVar21 = uVar6;" (assignment_expression "uVar21 = uVar6" (identifier "uVar21") (= "=") (identifier "uVar6")) (; ";")) (if_statement "if ((int *)(uint)((int)uVar15 < (int)uVar6) != (int *)0x0) {\n    puVar14 = puVar14 + (uVar6 - uVar15);\n    uVar21 = uVar15;\n  }" (if "if") (parenthesized_expression "((int *)(uint)((int)uVar15 < (int)uVar6) != (int *)0x0)" (( "(") (binary_expression "(int *)(uint)((int)uVar15 < (int)uVar6) != (int *)0x0" (cast_expression "(int *)(uint)((int)uVar15 < (int)uVar6)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(uint)((int)uVar15 < (int)uVar6)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((int)uVar15 < (int)uVar6)" (( "(") (binary_expression "(int)uVar15 < (int)uVar6" (cast_expression "(int)uVar15" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar15")) (< "<") (cast_expression "(int)uVar6" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar6"))) () ")")))) (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    puVar14 = puVar14 + (uVar6 - uVar15);\n    uVar21 = uVar15;\n  }" ({ "{") (expression_statement "puVar14 = puVar14 + (uVar6 - uVar15);" (assignment_expression "puVar14 = puVar14 + (uVar6 - uVar15)" (identifier "puVar14") (= "=") (binary_expression "puVar14 + (uVar6 - uVar15)" (identifier "puVar14") (+ "+") (parenthesized_expression "(uVar6 - uVar15)" (( "(") (binary_expression "uVar6 - uVar15" (identifier "uVar6") (- "-") (identifier "uVar15")) () ")")))) (; ";")) (expression_statement "uVar21 = uVar15;" (assignment_expression "uVar21 = uVar15" (identifier "uVar21") (= "=") (identifier "uVar15")) (; ";")) (} "}"))) (if_statement "if ((int)uVar15 < (int)uVar10) {\n    puVar12 = puVar12 + (uVar10 - uVar15);\n    uVar10 = uVar15;\n  }" (if "if") (parenthesized_expression "((int)uVar15 < (int)uVar10)" (( "(") (binary_expression "(int)uVar15 < (int)uVar10" (cast_expression "(int)uVar15" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar15")) (< "<") (cast_expression "(int)uVar10" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar10"))) () ")")) (compound_statement "{\n    puVar12 = puVar12 + (uVar10 - uVar15);\n    uVar10 = uVar15;\n  }" ({ "{") (expression_statement "puVar12 = puVar12 + (uVar10 - uVar15);" (assignment_expression "puVar12 = puVar12 + (uVar10 - uVar15)" (identifier "puVar12") (= "=") (binary_expression "puVar12 + (uVar10 - uVar15)" (identifier "puVar12") (+ "+") (parenthesized_expression "(uVar10 - uVar15)" (( "(") (binary_expression "uVar10 - uVar15" (identifier "uVar10") (- "-") (identifier "uVar15")) () ")")))) (; ";")) (expression_statement "uVar10 = uVar15;" (assignment_expression "uVar10 = uVar15" (identifier "uVar10") (= "=") (identifier "uVar15")) (; ";")) (} "}"))) (if_statement "if ((uVar21 == 0) || (uVar10 == 0)) {\n    param_1[1] = 0;\n    param_1[2] = 0;\n    piVar8 = (int *)(uint)((int)uVar15 < (int)uVar6);\n    puVar14 = param_2;\n    puVar24 = auStack_60;\n  }\n  else {\n    uVar6 = (uVar21 + uVar10) * 4;\n    local_30 = (int *)0x0;\n    if (uVar6 < 0x7f01) {\n      iVar18 = -(uVar6 + 7 & 0xfffffff8);\n      puVar24 = auStack_60 + iVar18;\n      puVar4 = (undefined4 *)(&stack0xffffffb8 + iVar18);\n    }\n    else {\n      puVar4 = (undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30);\n    }\n    if ((int)uVar21 < (int)uVar10) {\n      *(uint *)(puVar24 + 0x10) = uVar21;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar12,uVar10,puVar14);\n      puVar14 = puVar12;\n    }\n    else {\n      *(uint *)(puVar24 + 0x10) = uVar10;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12);\n    }\n    uVar10 = (uVar21 + uVar10) - (uint)(iVar18 == 0);\n    uVar15 = uVar15 + 1;\n    if ((int)uVar15 < (int)uVar10) {\n      puVar4 = puVar4 + (uVar10 - uVar15);\n      uVar10 = uVar15;\n    }\n    iVar13 = uVar10 - 1;\n    if (uVar10 != 0) {\n      puVar3 = (undefined4 *)param_1[3];\n      uVar25 = *puVar4;\n      puVar12 = puVar3;\n      if (iVar13 != 0) {\n        do {\n          puVar4 = puVar4 + 1;\n          puVar14 = puVar12 + 1;\n          *puVar12 = uVar25;\n          iVar13 = iVar13 + -1;\n          uVar25 = *puVar4;\n          puVar12 = puVar14;\n        } while (iVar13 != 0);\n        puVar3 = puVar3 + (uVar10 - 1);\n      }\n      *puVar3 = uVar25;\n    }\n    uVar17 = uVar17 ^ uVar19;\n    param_1[2] = (param_2[2] + *(int *)(param_3 + 8)) - (uint)(iVar18 == 0);\n    if ((int)uVar17 < 0) {\n      uVar10 = -uVar10;\n    }\n    param_1[1] = uVar10;\n    piVar8 = local_30;\n    if (local_30 != (int *)0x0) {\n      (*(code *)PTR___gmp_tmp_reentrant_free_00097614)();\n    }\n  }" (if "if") (parenthesized_expression "((uVar21 == 0) || (uVar10 == 0))" (( "(") (binary_expression "(uVar21 == 0) || (uVar10 == 0)" (parenthesized_expression "(uVar21 == 0)" (( "(") (binary_expression "uVar21 == 0" (identifier "uVar21") (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(uVar10 == 0)" (( "(") (binary_expression "uVar10 == 0" (identifier "uVar10") (== "==") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n    param_1[1] = 0;\n    param_1[2] = 0;\n    piVar8 = (int *)(uint)((int)uVar15 < (int)uVar6);\n    puVar14 = param_2;\n    puVar24 = auStack_60;\n  }" ({ "{") (expression_statement "param_1[1] = 0;" (assignment_expression "param_1[1] = 0" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[2] = 0;" (assignment_expression "param_1[2] = 0" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "piVar8 = (int *)(uint)((int)uVar15 < (int)uVar6);" (assignment_expression "piVar8 = (int *)(uint)((int)uVar15 < (int)uVar6)" (identifier "piVar8") (= "=") (cast_expression "(int *)(uint)((int)uVar15 < (int)uVar6)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(uint)((int)uVar15 < (int)uVar6)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((int)uVar15 < (int)uVar6)" (( "(") (binary_expression "(int)uVar15 < (int)uVar6" (cast_expression "(int)uVar15" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar15")) (< "<") (cast_expression "(int)uVar6" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar6"))) () ")"))))) (; ";")) (expression_statement "puVar14 = param_2;" (assignment_expression "puVar14 = param_2" (identifier "puVar14") (= "=") (identifier "param_2")) (; ";")) (expression_statement "puVar24 = auStack_60;" (assignment_expression "puVar24 = auStack_60" (identifier "puVar24") (= "=") (identifier "auStack_60")) (; ";")) (} "}")) (else_clause "else {\n    uVar6 = (uVar21 + uVar10) * 4;\n    local_30 = (int *)0x0;\n    if (uVar6 < 0x7f01) {\n      iVar18 = -(uVar6 + 7 & 0xfffffff8);\n      puVar24 = auStack_60 + iVar18;\n      puVar4 = (undefined4 *)(&stack0xffffffb8 + iVar18);\n    }\n    else {\n      puVar4 = (undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30);\n    }\n    if ((int)uVar21 < (int)uVar10) {\n      *(uint *)(puVar24 + 0x10) = uVar21;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar12,uVar10,puVar14);\n      puVar14 = puVar12;\n    }\n    else {\n      *(uint *)(puVar24 + 0x10) = uVar10;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12);\n    }\n    uVar10 = (uVar21 + uVar10) - (uint)(iVar18 == 0);\n    uVar15 = uVar15 + 1;\n    if ((int)uVar15 < (int)uVar10) {\n      puVar4 = puVar4 + (uVar10 - uVar15);\n      uVar10 = uVar15;\n    }\n    iVar13 = uVar10 - 1;\n    if (uVar10 != 0) {\n      puVar3 = (undefined4 *)param_1[3];\n      uVar25 = *puVar4;\n      puVar12 = puVar3;\n      if (iVar13 != 0) {\n        do {\n          puVar4 = puVar4 + 1;\n          puVar14 = puVar12 + 1;\n          *puVar12 = uVar25;\n          iVar13 = iVar13 + -1;\n          uVar25 = *puVar4;\n          puVar12 = puVar14;\n        } while (iVar13 != 0);\n        puVar3 = puVar3 + (uVar10 - 1);\n      }\n      *puVar3 = uVar25;\n    }\n    uVar17 = uVar17 ^ uVar19;\n    param_1[2] = (param_2[2] + *(int *)(param_3 + 8)) - (uint)(iVar18 == 0);\n    if ((int)uVar17 < 0) {\n      uVar10 = -uVar10;\n    }\n    param_1[1] = uVar10;\n    piVar8 = local_30;\n    if (local_30 != (int *)0x0) {\n      (*(code *)PTR___gmp_tmp_reentrant_free_00097614)();\n    }\n  }" (else "else") (compound_statement "{\n    uVar6 = (uVar21 + uVar10) * 4;\n    local_30 = (int *)0x0;\n    if (uVar6 < 0x7f01) {\n      iVar18 = -(uVar6 + 7 & 0xfffffff8);\n      puVar24 = auStack_60 + iVar18;\n      puVar4 = (undefined4 *)(&stack0xffffffb8 + iVar18);\n    }\n    else {\n      puVar4 = (undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30);\n    }\n    if ((int)uVar21 < (int)uVar10) {\n      *(uint *)(puVar24 + 0x10) = uVar21;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar12,uVar10,puVar14);\n      puVar14 = puVar12;\n    }\n    else {\n      *(uint *)(puVar24 + 0x10) = uVar10;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12);\n    }\n    uVar10 = (uVar21 + uVar10) - (uint)(iVar18 == 0);\n    uVar15 = uVar15 + 1;\n    if ((int)uVar15 < (int)uVar10) {\n      puVar4 = puVar4 + (uVar10 - uVar15);\n      uVar10 = uVar15;\n    }\n    iVar13 = uVar10 - 1;\n    if (uVar10 != 0) {\n      puVar3 = (undefined4 *)param_1[3];\n      uVar25 = *puVar4;\n      puVar12 = puVar3;\n      if (iVar13 != 0) {\n        do {\n          puVar4 = puVar4 + 1;\n          puVar14 = puVar12 + 1;\n          *puVar12 = uVar25;\n          iVar13 = iVar13 + -1;\n          uVar25 = *puVar4;\n          puVar12 = puVar14;\n        } while (iVar13 != 0);\n        puVar3 = puVar3 + (uVar10 - 1);\n      }\n      *puVar3 = uVar25;\n    }\n    uVar17 = uVar17 ^ uVar19;\n    param_1[2] = (param_2[2] + *(int *)(param_3 + 8)) - (uint)(iVar18 == 0);\n    if ((int)uVar17 < 0) {\n      uVar10 = -uVar10;\n    }\n    param_1[1] = uVar10;\n    piVar8 = local_30;\n    if (local_30 != (int *)0x0) {\n      (*(code *)PTR___gmp_tmp_reentrant_free_00097614)();\n    }\n  }" ({ "{") (expression_statement "uVar6 = (uVar21 + uVar10) * 4;" (assignment_expression "uVar6 = (uVar21 + uVar10) * 4" (identifier "uVar6") (= "=") (binary_expression "(uVar21 + uVar10) * 4" (parenthesized_expression "(uVar21 + uVar10)" (( "(") (binary_expression "uVar21 + uVar10" (identifier "uVar21") (+ "+") (identifier "uVar10")) () ")")) (* "*") (number_literal "4"))) (; ";")) (expression_statement "local_30 = (int *)0x0;" (assignment_expression "local_30 = (int *)0x0" (identifier "local_30") (= "=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (if_statement "if (uVar6 < 0x7f01) {\n      iVar18 = -(uVar6 + 7 & 0xfffffff8);\n      puVar24 = auStack_60 + iVar18;\n      puVar4 = (undefined4 *)(&stack0xffffffb8 + iVar18);\n    }\n    else {\n      puVar4 = (undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30);\n    }" (if "if") (parenthesized_expression "(uVar6 < 0x7f01)" (( "(") (binary_expression "uVar6 < 0x7f01" (identifier "uVar6") (< "<") (number_literal "0x7f01")) () ")")) (compound_statement "{\n      iVar18 = -(uVar6 + 7 & 0xfffffff8);\n      puVar24 = auStack_60 + iVar18;\n      puVar4 = (undefined4 *)(&stack0xffffffb8 + iVar18);\n    }" ({ "{") (expression_statement "iVar18 = -(uVar6 + 7 & 0xfffffff8);" (assignment_expression "iVar18 = -(uVar6 + 7 & 0xfffffff8)" (identifier "iVar18") (= "=") (unary_expression "-(uVar6 + 7 & 0xfffffff8)" (- "-") (parenthesized_expression "(uVar6 + 7 & 0xfffffff8)" (( "(") (binary_expression "uVar6 + 7 & 0xfffffff8" (binary_expression "uVar6 + 7" (identifier "uVar6") (+ "+") (number_literal "7")) (& "&") (number_literal "0xfffffff8")) () ")")))) (; ";")) (expression_statement "puVar24 = auStack_60 + iVar18;" (assignment_expression "puVar24 = auStack_60 + iVar18" (identifier "puVar24") (= "=") (binary_expression "auStack_60 + iVar18" (identifier "auStack_60") (+ "+") (identifier "iVar18"))) (; ";")) (expression_statement "puVar4 = (undefined4 *)(&stack0xffffffb8 + iVar18);" (assignment_expression "puVar4 = (undefined4 *)(&stack0xffffffb8 + iVar18)" (identifier "puVar4") (= "=") (cast_expression "(undefined4 *)(&stack0xffffffb8 + iVar18)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(&stack0xffffffb8 + iVar18)" (( "(") (binary_expression "&stack0xffffffb8 + iVar18" (pointer_expression "&stack0xffffffb8" (& "&") (identifier "stack0xffffffb8")) (+ "+") (identifier "iVar18")) () ")")))) (; ";")) (} "}")) (else_clause "else {\n      puVar4 = (undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30);\n    }" (else "else") (compound_statement "{\n      puVar4 = (undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30);\n    }" ({ "{") (expression_statement "puVar4 = (undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30);" (assignment_expression "puVar4 = (undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30)" (identifier "puVar4") (= "=") (cast_expression "(undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30)" (parenthesized_expression "(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)" (( "(") (pointer_expression "*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0" (* "*") (cast_expression "(code *)PTR___gmp_tmp_reentrant_alloc_000972f0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___gmp_tmp_reentrant_alloc_000972f0"))) () ")")) (argument_list "(&local_30)" (( "(") (pointer_expression "&local_30" (& "&") (identifier "local_30")) () ")"))))) (; ";")) (} "}")))) (if_statement "if ((int)uVar21 < (int)uVar10) {\n      *(uint *)(puVar24 + 0x10) = uVar21;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar12,uVar10,puVar14);\n      puVar14 = puVar12;\n    }\n    else {\n      *(uint *)(puVar24 + 0x10) = uVar10;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12);\n    }" (if "if") (parenthesized_expression "((int)uVar21 < (int)uVar10)" (( "(") (binary_expression "(int)uVar21 < (int)uVar10" (cast_expression "(int)uVar21" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar21")) (< "<") (cast_expression "(int)uVar10" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar10"))) () ")")) (compound_statement "{\n      *(uint *)(puVar24 + 0x10) = uVar21;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar12,uVar10,puVar14);\n      puVar14 = puVar12;\n    }" ({ "{") (expression_statement "*(uint *)(puVar24 + 0x10) = uVar21;" (assignment_expression "*(uint *)(puVar24 + 0x10) = uVar21" (pointer_expression "*(uint *)(puVar24 + 0x10)" (* "*") (cast_expression "(uint *)(puVar24 + 0x10)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar24 + 0x10)" (( "(") (binary_expression "puVar24 + 0x10" (identifier "puVar24") (+ "+") (number_literal "0x10")) () ")")))) (= "=") (identifier "uVar21")) (; ";")) (expression_statement "iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar12,uVar10,puVar14);" (assignment_expression "iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar12,uVar10,puVar14)" (identifier "iVar18") (= "=") (call_expression "(*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar12,uVar10,puVar14)" (parenthesized_expression "(*(code *)PTR___gmpn_mul_000972b4)" (( "(") (pointer_expression "*(code *)PTR___gmpn_mul_000972b4" (* "*") (cast_expression "(code *)PTR___gmpn_mul_000972b4" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___gmpn_mul_000972b4"))) () ")")) (argument_list "(puVar4,puVar12,uVar10,puVar14)" (( "(") (identifier "puVar4") (, ",") (identifier "puVar12") (, ",") (identifier "uVar10") (, ",") (identifier "puVar14") () ")")))) (; ";")) (expression_statement "puVar14 = puVar12;" (assignment_expression "puVar14 = puVar12" (identifier "puVar14") (= "=") (identifier "puVar12")) (; ";")) (} "}")) (else_clause "else {\n      *(uint *)(puVar24 + 0x10) = uVar10;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12);\n    }" (else "else") (compound_statement "{\n      *(uint *)(puVar24 + 0x10) = uVar10;\n      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12);\n    }" ({ "{") (expression_statement "*(uint *)(puVar24 + 0x10) = uVar10;" (assignment_expression "*(uint *)(puVar24 + 0x10) = uVar10" (pointer_expression "*(uint *)(puVar24 + 0x10)" (* "*") (cast_expression "(uint *)(puVar24 + 0x10)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar24 + 0x10)" (( "(") (binary_expression "puVar24 + 0x10" (identifier "puVar24") (+ "+") (number_literal "0x10")) () ")")))) (= "=") (identifier "uVar10")) (; ";")) (expression_statement "iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12);" (assignment_expression "iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12)" (identifier "iVar18") (= "=") (call_expression "(*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12)" (parenthesized_expression "(*(code *)PTR___gmpn_mul_000972b4)" (( "(") (pointer_expression "*(code *)PTR___gmpn_mul_000972b4" (* "*") (cast_expression "(code *)PTR___gmpn_mul_000972b4" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___gmpn_mul_000972b4"))) () ")")) (argument_list "(puVar4,puVar14,uVar21,puVar12)" (( "(") (identifier "puVar4") (, ",") (identifier "puVar14") (, ",") (identifier "uVar21") (, ",") (identifier "puVar12") () ")")))) (; ";")) (} "}")))) (expression_statement "uVar10 = (uVar21 + uVar10) - (uint)(iVar18 == 0);" (assignment_expression "uVar10 = (uVar21 + uVar10) - (uint)(iVar18 == 0)" (identifier "uVar10") (= "=") (binary_expression "(uVar21 + uVar10) - (uint)(iVar18 == 0)" (parenthesized_expression "(uVar21 + uVar10)" (( "(") (binary_expression "uVar21 + uVar10" (identifier "uVar21") (+ "+") (identifier "uVar10")) () ")")) (- "-") (call_expression "(uint)(iVar18 == 0)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(iVar18 == 0)" (( "(") (binary_expression "iVar18 == 0" (identifier "iVar18") (== "==") (number_literal "0")) () ")"))))) (; ";")) (expression_statement "uVar15 = uVar15 + 1;" (assignment_expression "uVar15 = uVar15 + 1" (identifier "uVar15") (= "=") (binary_expression "uVar15 + 1" (identifier "uVar15") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if ((int)uVar15 < (int)uVar10) {\n      puVar4 = puVar4 + (uVar10 - uVar15);\n      uVar10 = uVar15;\n    }" (if "if") (parenthesized_expression "((int)uVar15 < (int)uVar10)" (( "(") (binary_expression "(int)uVar15 < (int)uVar10" (cast_expression "(int)uVar15" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar15")) (< "<") (cast_expression "(int)uVar10" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar10"))) () ")")) (compound_statement "{\n      puVar4 = puVar4 + (uVar10 - uVar15);\n      uVar10 = uVar15;\n    }" ({ "{") (expression_statement "puVar4 = puVar4 + (uVar10 - uVar15);" (assignment_expression "puVar4 = puVar4 + (uVar10 - uVar15)" (identifier "puVar4") (= "=") (binary_expression "puVar4 + (uVar10 - uVar15)" (identifier "puVar4") (+ "+") (parenthesized_expression "(uVar10 - uVar15)" (( "(") (binary_expression "uVar10 - uVar15" (identifier "uVar10") (- "-") (identifier "uVar15")) () ")")))) (; ";")) (expression_statement "uVar10 = uVar15;" (assignment_expression "uVar10 = uVar15" (identifier "uVar10") (= "=") (identifier "uVar15")) (; ";")) (} "}"))) (expression_statement "iVar13 = uVar10 - 1;" (assignment_expression "iVar13 = uVar10 - 1" (identifier "iVar13") (= "=") (binary_expression "uVar10 - 1" (identifier "uVar10") (- "-") (number_literal "1"))) (; ";")) (if_statement "if (uVar10 != 0) {\n      puVar3 = (undefined4 *)param_1[3];\n      uVar25 = *puVar4;\n      puVar12 = puVar3;\n      if (iVar13 != 0) {\n        do {\n          puVar4 = puVar4 + 1;\n          puVar14 = puVar12 + 1;\n          *puVar12 = uVar25;\n          iVar13 = iVar13 + -1;\n          uVar25 = *puVar4;\n          puVar12 = puVar14;\n        } while (iVar13 != 0);\n        puVar3 = puVar3 + (uVar10 - 1);\n      }\n      *puVar3 = uVar25;\n    }" (if "if") (parenthesized_expression "(uVar10 != 0)" (( "(") (binary_expression "uVar10 != 0" (identifier "uVar10") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      puVar3 = (undefined4 *)param_1[3];\n      uVar25 = *puVar4;\n      puVar12 = puVar3;\n      if (iVar13 != 0) {\n        do {\n          puVar4 = puVar4 + 1;\n          puVar14 = puVar12 + 1;\n          *puVar12 = uVar25;\n          iVar13 = iVar13 + -1;\n          uVar25 = *puVar4;\n          puVar12 = puVar14;\n        } while (iVar13 != 0);\n        puVar3 = puVar3 + (uVar10 - 1);\n      }\n      *puVar3 = uVar25;\n    }" ({ "{") (expression_statement "puVar3 = (undefined4 *)param_1[3];" (assignment_expression "puVar3 = (undefined4 *)param_1[3]" (identifier "puVar3") (= "=") (cast_expression "(undefined4 *)param_1[3]" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")))) (; ";")) (expression_statement "uVar25 = *puVar4;" (assignment_expression "uVar25 = *puVar4" (identifier "uVar25") (= "=") (pointer_expression "*puVar4" (* "*") (identifier "puVar4"))) (; ";")) (expression_statement "puVar12 = puVar3;" (assignment_expression "puVar12 = puVar3" (identifier "puVar12") (= "=") (identifier "puVar3")) (; ";")) (if_statement "if (iVar13 != 0) {\n        do {\n          puVar4 = puVar4 + 1;\n          puVar14 = puVar12 + 1;\n          *puVar12 = uVar25;\n          iVar13 = iVar13 + -1;\n          uVar25 = *puVar4;\n          puVar12 = puVar14;\n        } while (iVar13 != 0);\n        puVar3 = puVar3 + (uVar10 - 1);\n      }" (if "if") (parenthesized_expression "(iVar13 != 0)" (( "(") (binary_expression "iVar13 != 0" (identifier "iVar13") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        do {\n          puVar4 = puVar4 + 1;\n          puVar14 = puVar12 + 1;\n          *puVar12 = uVar25;\n          iVar13 = iVar13 + -1;\n          uVar25 = *puVar4;\n          puVar12 = puVar14;\n        } while (iVar13 != 0);\n        puVar3 = puVar3 + (uVar10 - 1);\n      }" ({ "{") (do_statement "do {\n          puVar4 = puVar4 + 1;\n          puVar14 = puVar12 + 1;\n          *puVar12 = uVar25;\n          iVar13 = iVar13 + -1;\n          uVar25 = *puVar4;\n          puVar12 = puVar14;\n        } while (iVar13 != 0);" (do "do") (compound_statement "{\n          puVar4 = puVar4 + 1;\n          puVar14 = puVar12 + 1;\n          *puVar12 = uVar25;\n          iVar13 = iVar13 + -1;\n          uVar25 = *puVar4;\n          puVar12 = puVar14;\n        }" ({ "{") (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" (identifier "puVar4") (= "=") (binary_expression "puVar4 + 1" (identifier "puVar4") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar14 = puVar12 + 1;" (assignment_expression "puVar14 = puVar12 + 1" (identifier "puVar14") (= "=") (binary_expression "puVar12 + 1" (identifier "puVar12") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*puVar12 = uVar25;" (assignment_expression "*puVar12 = uVar25" (pointer_expression "*puVar12" (* "*") (identifier "puVar12")) (= "=") (identifier "uVar25")) (; ";")) (expression_statement "iVar13 = iVar13 + -1;" (assignment_expression "iVar13 = iVar13 + -1" (identifier "iVar13") (= "=") (binary_expression "iVar13 + -1" (identifier "iVar13") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar25 = *puVar4;" (assignment_expression "uVar25 = *puVar4" (identifier "uVar25") (= "=") (pointer_expression "*puVar4" (* "*") (identifier "puVar4"))) (; ";")) (expression_statement "puVar12 = puVar14;" (assignment_expression "puVar12 = puVar14" (identifier "puVar12") (= "=") (identifier "puVar14")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar13 != 0)" (( "(") (binary_expression "iVar13 != 0" (identifier "iVar13") (!= "!=") (number_literal "0")) () ")")) (; ";")) (expression_statement "puVar3 = puVar3 + (uVar10 - 1);" (assignment_expression "puVar3 = puVar3 + (uVar10 - 1)" (identifier "puVar3") (= "=") (binary_expression "puVar3 + (uVar10 - 1)" (identifier "puVar3") (+ "+") (parenthesized_expression "(uVar10 - 1)" (( "(") (binary_expression "uVar10 - 1" (identifier "uVar10") (- "-") (number_literal "1")) () ")")))) (; ";")) (} "}"))) (expression_statement "*puVar3 = uVar25;" (assignment_expression "*puVar3 = uVar25" (pointer_expression "*puVar3" (* "*") (identifier "puVar3")) (= "=") (identifier "uVar25")) (; ";")) (} "}"))) (expression_statement "uVar17 = uVar17 ^ uVar19;" (assignment_expression "uVar17 = uVar17 ^ uVar19" (identifier "uVar17") (= "=") (binary_expression "uVar17 ^ uVar19" (identifier "uVar17") (^ "^") (identifier "uVar19"))) (; ";")) (expression_statement "param_1[2] = (param_2[2] + *(int *)(param_3 + 8)) - (uint)(iVar18 == 0);" (assignment_expression "param_1[2] = (param_2[2] + *(int *)(param_3 + 8)) - (uint)(iVar18 == 0)" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (= "=") (binary_expression "(param_2[2] + *(int *)(param_3 + 8)) - (uint)(iVar18 == 0)" (parenthesized_expression "(param_2[2] + *(int *)(param_3 + 8))" (( "(") (binary_expression "param_2[2] + *(int *)(param_3 + 8)" (subscript_expression "param_2[2]" (identifier "param_2") ([ "[") (number_literal "2") (] "]")) (+ "+") (pointer_expression "*(int *)(param_3 + 8)" (* "*") (cast_expression "(int *)(param_3 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 8)" (( "(") (binary_expression "param_3 + 8" (identifier "param_3") (+ "+") (number_literal "8")) () ")"))))) () ")")) (- "-") (call_expression "(uint)(iVar18 == 0)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(iVar18 == 0)" (( "(") (binary_expression "iVar18 == 0" (identifier "iVar18") (== "==") (number_literal "0")) () ")"))))) (; ";")) (if_statement "if ((int)uVar17 < 0) {\n      uVar10 = -uVar10;\n    }" (if "if") (parenthesized_expression "((int)uVar17 < 0)" (( "(") (binary_expression "(int)uVar17 < 0" (cast_expression "(int)uVar17" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar17")) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n      uVar10 = -uVar10;\n    }" ({ "{") (expression_statement "uVar10 = -uVar10;" (assignment_expression "uVar10 = -uVar10" (identifier "uVar10") (= "=") (unary_expression "-uVar10" (- "-") (identifier "uVar10"))) (; ";")) (} "}"))) (expression_statement "param_1[1] = uVar10;" (assignment_expression "param_1[1] = uVar10" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "uVar10")) (; ";")) (expression_statement "piVar8 = local_30;" (assignment_expression "piVar8 = local_30" (identifier "piVar8") (= "=") (identifier "local_30")) (; ";")) (if_statement "if (local_30 != (int *)0x0) {\n      (*(code *)PTR___gmp_tmp_reentrant_free_00097614)();\n    }" (if "if") (parenthesized_expression "(local_30 != (int *)0x0)" (( "(") (binary_expression "local_30 != (int *)0x0" (identifier "local_30") (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      (*(code *)PTR___gmp_tmp_reentrant_free_00097614)();\n    }" ({ "{") (expression_statement "(*(code *)PTR___gmp_tmp_reentrant_free_00097614)();" (call_expression "(*(code *)PTR___gmp_tmp_reentrant_free_00097614)()" (parenthesized_expression "(*(code *)PTR___gmp_tmp_reentrant_free_00097614)" (( "(") (pointer_expression "*(code *)PTR___gmp_tmp_reentrant_free_00097614" (* "*") (cast_expression "(code *)PTR___gmp_tmp_reentrant_free_00097614" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___gmp_tmp_reentrant_free_00097614"))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (} "}")))) (if_statement "if (local_2c == *(int *)puVar22) {\n    return;\n  }" (if "if") (parenthesized_expression "(local_2c == *(int *)puVar22)" (( "(") (binary_expression "local_2c == *(int *)puVar22" (identifier "local_2c") (== "==") (pointer_expression "*(int *)puVar22" (* "*") (cast_expression "(int *)puVar22" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar22")))) () ")")) (compound_statement "{\n    return;\n  }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "uVar25 = 0x1cbf4;" (assignment_expression "uVar25 = 0x1cbf4" (identifier "uVar25") (= "=") (number_literal "0x1cbf4")) (; ";")) (expression_statement "puVar22 = PTR___stack_chk_fail_000974d0;" (assignment_expression "puVar22 = PTR___stack_chk_fail_000974d0" (identifier "puVar22") (= "=") (identifier "PTR___stack_chk_fail_000974d0")) (; ";")) (expression_statement "(*(code *)PTR___stack_chk_fail_000974d0)();" (call_expression "(*(code *)PTR___stack_chk_fail_000974d0)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_000974d0)" (( "(") (pointer_expression "*(code *)PTR___stack_chk_fail_000974d0" (* "*") (cast_expression "(code *)PTR___stack_chk_fail_000974d0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___stack_chk_fail_000974d0"))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "*(undefined **)(puVar24 + -0x28) = puVar22 + 0x82440;" (assignment_expression "*(undefined **)(puVar24 + -0x28) = puVar22 + 0x82440" (pointer_expression "*(undefined **)(puVar24 + -0x28)" (* "*") (cast_expression "(undefined **)(puVar24 + -0x28)" (( "(") (type_descriptor "undefined **" (type_identifier "undefined") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar24 + -0x28)" (( "(") (binary_expression "puVar24 + -0x28" (identifier "puVar24") (+ "+") (number_literal "-0x28")) () ")")))) (= "=") (binary_expression "puVar22 + 0x82440" (identifier "puVar22") (+ "+") (number_literal "0x82440"))) (; ";")) (expression_statement "*(uint **)(puVar24 + -0x14) = param_1;" (assignment_expression "*(uint **)(puVar24 + -0x14) = param_1" (pointer_expression "*(uint **)(puVar24 + -0x14)" (* "*") (cast_expression "(uint **)(puVar24 + -0x14)" (( "(") (type_descriptor "uint **" (type_identifier "uint") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar24 + -0x14)" (( "(") (binary_expression "puVar24 + -0x14" (identifier "puVar24") (+ "+") (number_literal "-0x14")) () ")")))) (= "=") (identifier "param_1")) (; ";")) (expression_statement "*(undefined4 *)(puVar24 + -4) = uVar25;" (assignment_expression "*(undefined4 *)(puVar24 + -4) = uVar25" (pointer_expression "*(undefined4 *)(puVar24 + -4)" (* "*") (cast_expression "(undefined4 *)(puVar24 + -4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar24 + -4)" (( "(") (binary_expression "puVar24 + -4" (identifier "puVar24") (+ "+") (number_literal "-4")) () ")")))) (= "=") (identifier "uVar25")) (; ";")) (expression_statement "*(undefined4 **)(puVar24 + -8) = param_2;" (assignment_expression "*(undefined4 **)(puVar24 + -8) = param_2" (pointer_expression "*(undefined4 **)(puVar24 + -8)" (* "*") (cast_expression "(undefined4 **)(puVar24 + -8)" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar24 + -8)" (( "(") (binary_expression "puVar24 + -8" (identifier "puVar24") (+ "+") (number_literal "-8")) () ")")))) (= "=") (identifier "param_2")) (; ";")) (expression_statement "*(int *)(puVar24 + -0xc) = param_3;" (assignment_expression "*(int *)(puVar24 + -0xc) = param_3" (pointer_expression "*(int *)(puVar24 + -0xc)" (* "*") (cast_expression "(int *)(puVar24 + -0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar24 + -0xc)" (( "(") (binary_expression "puVar24 + -0xc" (identifier "puVar24") (+ "+") (number_literal "-0xc")) () ")")))) (= "=") (identifier "param_3")) (; ";")) (expression_statement "*(uint *)(puVar24 + -0x10) = uVar19;" (assignment_expression "*(uint *)(puVar24 + -0x10) = uVar19" (pointer_expression "*(uint *)(puVar24 + -0x10)" (* "*") (cast_expression "(uint *)(puVar24 + -0x10)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar24 + -0x10)" (( "(") (binary_expression "puVar24 + -0x10" (identifier "puVar24") (+ "+") (number_literal "-0x10")) () ")")))) (= "=") (identifier "uVar19")) (; ";")) (expression_statement "*(uint *)(puVar24 + -0x18) = uVar17;" (assignment_expression "*(uint *)(puVar24 + -0x18) = uVar17" (pointer_expression "*(uint *)(puVar24 + -0x18)" (* "*") (cast_expression "(uint *)(puVar24 + -0x18)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar24 + -0x18)" (( "(") (binary_expression "puVar24 + -0x18" (identifier "puVar24") (+ "+") (number_literal "-0x18")) () ")")))) (= "=") (identifier "uVar17")) (; ";")) (expression_statement "*(uint *)(puVar24 + -0x1c) = uVar15;" (assignment_expression "*(uint *)(puVar24 + -0x1c) = uVar15" (pointer_expression "*(uint *)(puVar24 + -0x1c)" (* "*") (cast_expression "(uint *)(puVar24 + -0x1c)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar24 + -0x1c)" (( "(") (binary_expression "puVar24 + -0x1c" (identifier "puVar24") (+ "+") (number_literal "-0x1c")) () ")")))) (= "=") (identifier "uVar15")) (; ";")) (expression_statement "iVar18 = puVar14[1];" (assignment_expression "iVar18 = puVar14[1]" (identifier "iVar18") (= "=") (subscript_expression "puVar14[1]" (identifier "puVar14") ([ "[") (number_literal "1") (] "]"))) (; ";")) (if_statement "if ((uVar10 == 0) || (iVar18 == 0)) {\n    piVar8[1] = 0;\n    piVar8[2] = 0;\n    return;\n  }" (if "if") (parenthesized_expression "((uVar10 == 0) || (iVar18 == 0))" (( "(") (binary_expression "(uVar10 == 0) || (iVar18 == 0)" (parenthesized_expression "(uVar10 == 0)" (( "(") (binary_expression "uVar10 == 0" (identifier "uVar10") (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(iVar18 == 0)" (( "(") (binary_expression "iVar18 == 0" (identifier "iVar18") (== "==") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n    piVar8[1] = 0;\n    piVar8[2] = 0;\n    return;\n  }" ({ "{") (expression_statement "piVar8[1] = 0;" (assignment_expression "piVar8[1] = 0" (subscript_expression "piVar8[1]" (identifier "piVar8") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "piVar8[2] = 0;" (assignment_expression "piVar8[2] = 0" (subscript_expression "piVar8[2]" (identifier "piVar8") ([ "[") (number_literal "2") (] "]")) (= "=") (number_literal "0")) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (if_statement "if (iVar18 < 0) {\n    iVar16 = *piVar8;\n    iVar7 = puVar14[3];\n    puVar20 = (uint *)piVar8[3];\n    iVar5 = -iVar18 - iVar16;\n    iVar13 = -iVar18;\n    if (iVar5 < 1) goto LAB_0001cda8;\nLAB_0001cc68:\n    iVar9 = iVar5 + -1;\n    iVar5 = iVar7 + iVar5 * 4;\n    lVar1 = (ulonglong)uVar10 * (ulonglong)*(uint *)(iVar7 + iVar9 * 4);\n    iVar13 = iVar5;\n    while( true ) {\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      iVar9 = iVar9 + -1;\n      pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n      if (iVar9 == -1) break;\n      puVar11 = (uint *)(iVar13 + -8);\n      iVar13 = iVar13 + -4;\n      uVar2 = (ulonglong)uVar10 * (ulonglong)*puVar11;\n      lVar1 = lVar1 + (uVar2 >> 0x20);\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      if ((int)lVar1 != -1) {\n        pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n        break;\n      }\n      lVar1 = CONCAT44(uVar15,(int)uVar2);\n    }\n    uVar6 = (*pcVar23)(puVar20,iVar5,iVar16);\n    uVar17 = *puVar20;\n    *puVar20 = uVar15 + uVar17;\n    if (uVar15 + uVar17 < uVar15) {\n      if (iVar16 < 2) {\nLAB_0001cd34:\n        uVar15 = (uint)(uVar6 + 1 != 0);\n        iVar13 = iVar16 + uVar15;\n        puVar20[iVar16] = uVar6 + 1;\n        piVar8[2] = puVar14[2] + uVar15;\n        goto joined_r0x0001cddc;\n      }\n      uVar15 = puVar20[1];\n      puVar20[1] = uVar15 + 1;\n      if (uVar15 + 1 == 0) {\n        iVar13 = 2;\n        puVar11 = puVar20 + 2;\n        do {\n          if (iVar13 == iVar16) goto LAB_0001cd34;\n          uVar15 = *puVar11;\n          iVar13 = iVar13 + 1;\n          *puVar11 = uVar15 + 1;\n          puVar11 = puVar11 + 1;\n        } while (uVar15 + 1 == 0);\n      }\n    }\n  }\n  else {\n    iVar16 = *piVar8;\n    iVar7 = puVar14[3];\n    iVar5 = iVar18 - iVar16;\n    puVar20 = (uint *)piVar8[3];\n    iVar13 = iVar18;\n    if (0 < iVar5) goto LAB_0001cc68;\nLAB_0001cda8:\n    iVar16 = iVar13;\n    uVar6 = (**(code **)(puVar22 + 0x7a4a4))(puVar20,iVar7,iVar16);\n  }" (if "if") (parenthesized_expression "(iVar18 < 0)" (( "(") (binary_expression "iVar18 < 0" (identifier "iVar18") (< "<") (number_literal "0")) () ")")) (compound_statement "{\n    iVar16 = *piVar8;\n    iVar7 = puVar14[3];\n    puVar20 = (uint *)piVar8[3];\n    iVar5 = -iVar18 - iVar16;\n    iVar13 = -iVar18;\n    if (iVar5 < 1) goto LAB_0001cda8;\nLAB_0001cc68:\n    iVar9 = iVar5 + -1;\n    iVar5 = iVar7 + iVar5 * 4;\n    lVar1 = (ulonglong)uVar10 * (ulonglong)*(uint *)(iVar7 + iVar9 * 4);\n    iVar13 = iVar5;\n    while( true ) {\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      iVar9 = iVar9 + -1;\n      pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n      if (iVar9 == -1) break;\n      puVar11 = (uint *)(iVar13 + -8);\n      iVar13 = iVar13 + -4;\n      uVar2 = (ulonglong)uVar10 * (ulonglong)*puVar11;\n      lVar1 = lVar1 + (uVar2 >> 0x20);\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      if ((int)lVar1 != -1) {\n        pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n        break;\n      }\n      lVar1 = CONCAT44(uVar15,(int)uVar2);\n    }\n    uVar6 = (*pcVar23)(puVar20,iVar5,iVar16);\n    uVar17 = *puVar20;\n    *puVar20 = uVar15 + uVar17;\n    if (uVar15 + uVar17 < uVar15) {\n      if (iVar16 < 2) {\nLAB_0001cd34:\n        uVar15 = (uint)(uVar6 + 1 != 0);\n        iVar13 = iVar16 + uVar15;\n        puVar20[iVar16] = uVar6 + 1;\n        piVar8[2] = puVar14[2] + uVar15;\n        goto joined_r0x0001cddc;\n      }\n      uVar15 = puVar20[1];\n      puVar20[1] = uVar15 + 1;\n      if (uVar15 + 1 == 0) {\n        iVar13 = 2;\n        puVar11 = puVar20 + 2;\n        do {\n          if (iVar13 == iVar16) goto LAB_0001cd34;\n          uVar15 = *puVar11;\n          iVar13 = iVar13 + 1;\n          *puVar11 = uVar15 + 1;\n          puVar11 = puVar11 + 1;\n        } while (uVar15 + 1 == 0);\n      }\n    }\n  }" ({ "{") (expression_statement "iVar16 = *piVar8;" (assignment_expression "iVar16 = *piVar8" (identifier "iVar16") (= "=") (pointer_expression "*piVar8" (* "*") (identifier "piVar8"))) (; ";")) (expression_statement "iVar7 = puVar14[3];" (assignment_expression "iVar7 = puVar14[3]" (identifier "iVar7") (= "=") (subscript_expression "puVar14[3]" (identifier "puVar14") ([ "[") (number_literal "3") (] "]"))) (; ";")) (expression_statement "puVar20 = (uint *)piVar8[3];" (assignment_expression "puVar20 = (uint *)piVar8[3]" (identifier "puVar20") (= "=") (cast_expression "(uint *)piVar8[3]" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar8[3]" (identifier "piVar8") ([ "[") (number_literal "3") (] "]")))) (; ";")) (expression_statement "iVar5 = -iVar18 - iVar16;" (assignment_expression "iVar5 = -iVar18 - iVar16" (identifier "iVar5") (= "=") (binary_expression "-iVar18 - iVar16" (unary_expression "-iVar18" (- "-") (identifier "iVar18")) (- "-") (identifier "iVar16"))) (; ";")) (expression_statement "iVar13 = -iVar18;" (assignment_expression "iVar13 = -iVar18" (identifier "iVar13") (= "=") (unary_expression "-iVar18" (- "-") (identifier "iVar18"))) (; ";")) (if_statement "if (iVar5 < 1) goto LAB_0001cda8;" (if "if") (parenthesized_expression "(iVar5 < 1)" (( "(") (binary_expression "iVar5 < 1" (identifier "iVar5") (< "<") (number_literal "1")) () ")")) (goto_statement "goto LAB_0001cda8;" (goto "goto") (statement_identifier "LAB_0001cda8") (; ";"))) (labeled_statement "LAB_0001cc68:\n    iVar9 = iVar5 + -1;" (statement_identifier "LAB_0001cc68") (: ":") (expression_statement "iVar9 = iVar5 + -1;" (assignment_expression "iVar9 = iVar5 + -1" (identifier "iVar9") (= "=") (binary_expression "iVar5 + -1" (identifier "iVar5") (+ "+") (number_literal "-1"))) (; ";"))) (expression_statement "iVar5 = iVar7 + iVar5 * 4;" (assignment_expression "iVar5 = iVar7 + iVar5 * 4" (identifier "iVar5") (= "=") (binary_expression "iVar7 + iVar5 * 4" (identifier "iVar7") (+ "+") (binary_expression "iVar5 * 4" (identifier "iVar5") (* "*") (number_literal "4")))) (; ";")) (expression_statement "lVar1 = (ulonglong)uVar10 * (ulonglong)*(uint *)(iVar7 + iVar9 * 4);" (assignment_expression "lVar1 = (ulonglong)uVar10 * (ulonglong)*(uint *)(iVar7 + iVar9 * 4)" (identifier "lVar1") (= "=") (binary_expression "(ulonglong)uVar10 * (ulonglong)*(uint *)(iVar7 + iVar9 * 4)" (binary_expression "(ulonglong)uVar10 * (ulonglong)" (cast_expression "(ulonglong)uVar10" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar10")) (* "*") (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")"))) (* "*") (cast_expression "(uint *)(iVar7 + iVar9 * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar7 + iVar9 * 4)" (( "(") (binary_expression "iVar7 + iVar9 * 4" (identifier "iVar7") (+ "+") (binary_expression "iVar9 * 4" (identifier "iVar9") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (expression_statement "iVar13 = iVar5;" (assignment_expression "iVar13 = iVar5" (identifier "iVar13") (= "=") (identifier "iVar5")) (; ";")) (while_statement "while( true ) {\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      iVar9 = iVar9 + -1;\n      pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n      if (iVar9 == -1) break;\n      puVar11 = (uint *)(iVar13 + -8);\n      iVar13 = iVar13 + -4;\n      uVar2 = (ulonglong)uVar10 * (ulonglong)*puVar11;\n      lVar1 = lVar1 + (uVar2 >> 0x20);\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      if ((int)lVar1 != -1) {\n        pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n        break;\n      }\n      lVar1 = CONCAT44(uVar15,(int)uVar2);\n    }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      iVar9 = iVar9 + -1;\n      pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n      if (iVar9 == -1) break;\n      puVar11 = (uint *)(iVar13 + -8);\n      iVar13 = iVar13 + -4;\n      uVar2 = (ulonglong)uVar10 * (ulonglong)*puVar11;\n      lVar1 = lVar1 + (uVar2 >> 0x20);\n      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);\n      if ((int)lVar1 != -1) {\n        pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n        break;\n      }\n      lVar1 = CONCAT44(uVar15,(int)uVar2);\n    }" ({ "{") (expression_statement "uVar15 = (uint)((ulonglong)lVar1 >> 0x20);" (assignment_expression "uVar15 = (uint)((ulonglong)lVar1 >> 0x20)" (identifier "uVar15") (= "=") (call_expression "(uint)((ulonglong)lVar1 >> 0x20)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((ulonglong)lVar1 >> 0x20)" (( "(") (binary_expression "(ulonglong)lVar1 >> 0x20" (cast_expression "(ulonglong)lVar1" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "lVar1")) (>> ">>") (number_literal "0x20")) () ")")))) (; ";")) (expression_statement "iVar9 = iVar9 + -1;" (assignment_expression "iVar9 = iVar9 + -1" (identifier "iVar9") (= "=") (binary_expression "iVar9 + -1" (identifier "iVar9") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "pcVar23 = *(code **)(puVar22 + 0x7a4a4);" (assignment_expression "pcVar23 = *(code **)(puVar22 + 0x7a4a4)" (identifier "pcVar23") (= "=") (pointer_expression "*(code **)(puVar22 + 0x7a4a4)" (* "*") (cast_expression "(code **)(puVar22 + 0x7a4a4)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar22 + 0x7a4a4)" (( "(") (binary_expression "puVar22 + 0x7a4a4" (identifier "puVar22") (+ "+") (number_literal "0x7a4a4")) () ")"))))) (; ";")) (if_statement "if (iVar9 == -1) break;" (if "if") (parenthesized_expression "(iVar9 == -1)" (( "(") (binary_expression "iVar9 == -1" (identifier "iVar9") (== "==") (number_literal "-1")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "puVar11 = (uint *)(iVar13 + -8);" (assignment_expression "puVar11 = (uint *)(iVar13 + -8)" (identifier "puVar11") (= "=") (cast_expression "(uint *)(iVar13 + -8)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar13 + -8)" (( "(") (binary_expression "iVar13 + -8" (identifier "iVar13") (+ "+") (number_literal "-8")) () ")")))) (; ";")) (expression_statement "iVar13 = iVar13 + -4;" (assignment_expression "iVar13 = iVar13 + -4" (identifier "iVar13") (= "=") (binary_expression "iVar13 + -4" (identifier "iVar13") (+ "+") (number_literal "-4"))) (; ";")) (expression_statement "uVar2 = (ulonglong)uVar10 * (ulonglong)*puVar11;" (assignment_expression "uVar2 = (ulonglong)uVar10 * (ulonglong)*puVar11" (identifier "uVar2") (= "=") (binary_expression "(ulonglong)uVar10 * (ulonglong)*puVar11" (binary_expression "(ulonglong)uVar10 * (ulonglong)" (cast_expression "(ulonglong)uVar10" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar10")) (* "*") (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")"))) (* "*") (identifier "puVar11"))) (; ";")) (expression_statement "lVar1 = lVar1 + (uVar2 >> 0x20);" (assignment_expression "lVar1 = lVar1 + (uVar2 >> 0x20)" (identifier "lVar1") (= "=") (binary_expression "lVar1 + (uVar2 >> 0x20)" (identifier "lVar1") (+ "+") (parenthesized_expression "(uVar2 >> 0x20)" (( "(") (binary_expression "uVar2 >> 0x20" (identifier "uVar2") (>> ">>") (number_literal "0x20")) () ")")))) (; ";")) (expression_statement "uVar15 = (uint)((ulonglong)lVar1 >> 0x20);" (assignment_expression "uVar15 = (uint)((ulonglong)lVar1 >> 0x20)" (identifier "uVar15") (= "=") (call_expression "(uint)((ulonglong)lVar1 >> 0x20)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((ulonglong)lVar1 >> 0x20)" (( "(") (binary_expression "(ulonglong)lVar1 >> 0x20" (cast_expression "(ulonglong)lVar1" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "lVar1")) (>> ">>") (number_literal "0x20")) () ")")))) (; ";")) (if_statement "if ((int)lVar1 != -1) {\n        pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n        break;\n      }" (if "if") (parenthesized_expression "((int)lVar1 != -1)" (( "(") (binary_expression "(int)lVar1 != -1" (cast_expression "(int)lVar1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "lVar1")) (!= "!=") (number_literal "-1")) () ")")) (compound_statement "{\n        pcVar23 = *(code **)(puVar22 + 0x7a4a4);\n        break;\n      }" ({ "{") (expression_statement "pcVar23 = *(code **)(puVar22 + 0x7a4a4);" (assignment_expression "pcVar23 = *(code **)(puVar22 + 0x7a4a4)" (identifier "pcVar23") (= "=") (pointer_expression "*(code **)(puVar22 + 0x7a4a4)" (* "*") (cast_expression "(code **)(puVar22 + 0x7a4a4)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar22 + 0x7a4a4)" (( "(") (binary_expression "puVar22 + 0x7a4a4" (identifier "puVar22") (+ "+") (number_literal "0x7a4a4")) () ")"))))) (; ";")) (break_statement "break;" (break "break") (; ";")) (} "}"))) (expression_statement "lVar1 = CONCAT44(uVar15,(int)uVar2);" (assignment_expression "lVar1 = CONCAT44(uVar15,(int)uVar2)" (identifier "lVar1") (= "=") (call_expression "CONCAT44(uVar15,(int)uVar2)" (identifier "CONCAT44") (argument_list "(uVar15,(int)uVar2)" (( "(") (identifier "uVar15") (, ",") (cast_expression "(int)uVar2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar2")) () ")")))) (; ";")) (} "}"))) (expression_statement "uVar6 = (*pcVar23)(puVar20,iVar5,iVar16);" (assignment_expression "uVar6 = (*pcVar23)(puVar20,iVar5,iVar16)" (identifier "uVar6") (= "=") (call_expression "(*pcVar23)(puVar20,iVar5,iVar16)" (parenthesized_expression "(*pcVar23)" (( "(") (pointer_expression "*pcVar23" (* "*") (identifier "pcVar23")) () ")")) (argument_list "(puVar20,iVar5,iVar16)" (( "(") (identifier "puVar20") (, ",") (identifier "iVar5") (, ",") (identifier "iVar16") () ")")))) (; ";")) (expression_statement "uVar17 = *puVar20;" (assignment_expression "uVar17 = *puVar20" (identifier "uVar17") (= "=") (pointer_expression "*puVar20" (* "*") (identifier "puVar20"))) (; ";")) (expression_statement "*puVar20 = uVar15 + uVar17;" (assignment_expression "*puVar20 = uVar15 + uVar17" (pointer_expression "*puVar20" (* "*") (identifier "puVar20")) (= "=") (binary_expression "uVar15 + uVar17" (identifier "uVar15") (+ "+") (identifier "uVar17"))) (; ";")) (if_statement "if (uVar15 + uVar17 < uVar15) {\n      if (iVar16 < 2) {\nLAB_0001cd34:\n        uVar15 = (uint)(uVar6 + 1 != 0);\n        iVar13 = iVar16 + uVar15;\n        puVar20[iVar16] = uVar6 + 1;\n        piVar8[2] = puVar14[2] + uVar15;\n        goto joined_r0x0001cddc;\n      }\n      uVar15 = puVar20[1];\n      puVar20[1] = uVar15 + 1;\n      if (uVar15 + 1 == 0) {\n        iVar13 = 2;\n        puVar11 = puVar20 + 2;\n        do {\n          if (iVar13 == iVar16) goto LAB_0001cd34;\n          uVar15 = *puVar11;\n          iVar13 = iVar13 + 1;\n          *puVar11 = uVar15 + 1;\n          puVar11 = puVar11 + 1;\n        } while (uVar15 + 1 == 0);\n      }\n    }" (if "if") (parenthesized_expression "(uVar15 + uVar17 < uVar15)" (( "(") (binary_expression "uVar15 + uVar17 < uVar15" (binary_expression "uVar15 + uVar17" (identifier "uVar15") (+ "+") (identifier "uVar17")) (< "<") (identifier "uVar15")) () ")")) (compound_statement "{\n      if (iVar16 < 2) {\nLAB_0001cd34:\n        uVar15 = (uint)(uVar6 + 1 != 0);\n        iVar13 = iVar16 + uVar15;\n        puVar20[iVar16] = uVar6 + 1;\n        piVar8[2] = puVar14[2] + uVar15;\n        goto joined_r0x0001cddc;\n      }\n      uVar15 = puVar20[1];\n      puVar20[1] = uVar15 + 1;\n      if (uVar15 + 1 == 0) {\n        iVar13 = 2;\n        puVar11 = puVar20 + 2;\n        do {\n          if (iVar13 == iVar16) goto LAB_0001cd34;\n          uVar15 = *puVar11;\n          iVar13 = iVar13 + 1;\n          *puVar11 = uVar15 + 1;\n          puVar11 = puVar11 + 1;\n        } while (uVar15 + 1 == 0);\n      }\n    }" ({ "{") (if_statement "if (iVar16 < 2) {\nLAB_0001cd34:\n        uVar15 = (uint)(uVar6 + 1 != 0);\n        iVar13 = iVar16 + uVar15;\n        puVar20[iVar16] = uVar6 + 1;\n        piVar8[2] = puVar14[2] + uVar15;\n        goto joined_r0x0001cddc;\n      }" (if "if") (parenthesized_expression "(iVar16 < 2)" (( "(") (binary_expression "iVar16 < 2" (identifier "iVar16") (< "<") (number_literal "2")) () ")")) (compound_statement "{\nLAB_0001cd34:\n        uVar15 = (uint)(uVar6 + 1 != 0);\n        iVar13 = iVar16 + uVar15;\n        puVar20[iVar16] = uVar6 + 1;\n        piVar8[2] = puVar14[2] + uVar15;\n        goto joined_r0x0001cddc;\n      }" ({ "{") (labeled_statement "LAB_0001cd34:\n        uVar15 = (uint)(uVar6 + 1 != 0);" (statement_identifier "LAB_0001cd34") (: ":") (expression_statement "uVar15 = (uint)(uVar6 + 1 != 0);" (assignment_expression "uVar15 = (uint)(uVar6 + 1 != 0)" (identifier "uVar15") (= "=") (call_expression "(uint)(uVar6 + 1 != 0)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar6 + 1 != 0)" (( "(") (binary_expression "uVar6 + 1 != 0" (binary_expression "uVar6 + 1" (identifier "uVar6") (+ "+") (number_literal "1")) (!= "!=") (number_literal "0")) () ")")))) (; ";"))) (expression_statement "iVar13 = iVar16 + uVar15;" (assignment_expression "iVar13 = iVar16 + uVar15" (identifier "iVar13") (= "=") (binary_expression "iVar16 + uVar15" (identifier "iVar16") (+ "+") (identifier "uVar15"))) (; ";")) (expression_statement "puVar20[iVar16] = uVar6 + 1;" (assignment_expression "puVar20[iVar16] = uVar6 + 1" (subscript_expression "puVar20[iVar16]" (identifier "puVar20") ([ "[") (identifier "iVar16") (] "]")) (= "=") (binary_expression "uVar6 + 1" (identifier "uVar6") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "piVar8[2] = puVar14[2] + uVar15;" (assignment_expression "piVar8[2] = puVar14[2] + uVar15" (subscript_expression "piVar8[2]" (identifier "piVar8") ([ "[") (number_literal "2") (] "]")) (= "=") (binary_expression "puVar14[2] + uVar15" (subscript_expression "puVar14[2]" (identifier "puVar14") ([ "[") (number_literal "2") (] "]")) (+ "+") (identifier "uVar15"))) (; ";")) (goto_statement "goto joined_r0x0001cddc;" (goto "goto") (statement_identifier "joined_r0x0001cddc") (; ";")) (} "}"))) (expression_statement "uVar15 = puVar20[1];" (assignment_expression "uVar15 = puVar20[1]" (identifier "uVar15") (= "=") (subscript_expression "puVar20[1]" (identifier "puVar20") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "puVar20[1] = uVar15 + 1;" (assignment_expression "puVar20[1] = uVar15 + 1" (subscript_expression "puVar20[1]" (identifier "puVar20") ([ "[") (number_literal "1") (] "]")) (= "=") (binary_expression "uVar15 + 1" (identifier "uVar15") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (uVar15 + 1 == 0) {\n        iVar13 = 2;\n        puVar11 = puVar20 + 2;\n        do {\n          if (iVar13 == iVar16) goto LAB_0001cd34;\n          uVar15 = *puVar11;\n          iVar13 = iVar13 + 1;\n          *puVar11 = uVar15 + 1;\n          puVar11 = puVar11 + 1;\n        } while (uVar15 + 1 == 0);\n      }" (if "if") (parenthesized_expression "(uVar15 + 1 == 0)" (( "(") (binary_expression "uVar15 + 1 == 0" (binary_expression "uVar15 + 1" (identifier "uVar15") (+ "+") (number_literal "1")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        iVar13 = 2;\n        puVar11 = puVar20 + 2;\n        do {\n          if (iVar13 == iVar16) goto LAB_0001cd34;\n          uVar15 = *puVar11;\n          iVar13 = iVar13 + 1;\n          *puVar11 = uVar15 + 1;\n          puVar11 = puVar11 + 1;\n        } while (uVar15 + 1 == 0);\n      }" ({ "{") (expression_statement "iVar13 = 2;" (assignment_expression "iVar13 = 2" (identifier "iVar13") (= "=") (number_literal "2")) (; ";")) (expression_statement "puVar11 = puVar20 + 2;" (assignment_expression "puVar11 = puVar20 + 2" (identifier "puVar11") (= "=") (binary_expression "puVar20 + 2" (identifier "puVar20") (+ "+") (number_literal "2"))) (; ";")) (do_statement "do {\n          if (iVar13 == iVar16) goto LAB_0001cd34;\n          uVar15 = *puVar11;\n          iVar13 = iVar13 + 1;\n          *puVar11 = uVar15 + 1;\n          puVar11 = puVar11 + 1;\n        } while (uVar15 + 1 == 0);" (do "do") (compound_statement "{\n          if (iVar13 == iVar16) goto LAB_0001cd34;\n          uVar15 = *puVar11;\n          iVar13 = iVar13 + 1;\n          *puVar11 = uVar15 + 1;\n          puVar11 = puVar11 + 1;\n        }" ({ "{") (if_statement "if (iVar13 == iVar16) goto LAB_0001cd34;" (if "if") (parenthesized_expression "(iVar13 == iVar16)" (( "(") (binary_expression "iVar13 == iVar16" (identifier "iVar13") (== "==") (identifier "iVar16")) () ")")) (goto_statement "goto LAB_0001cd34;" (goto "goto") (statement_identifier "LAB_0001cd34") (; ";"))) (expression_statement "uVar15 = *puVar11;" (assignment_expression "uVar15 = *puVar11" (identifier "uVar15") (= "=") (pointer_expression "*puVar11" (* "*") (identifier "puVar11"))) (; ";")) (expression_statement "iVar13 = iVar13 + 1;" (assignment_expression "iVar13 = iVar13 + 1" (identifier "iVar13") (= "=") (binary_expression "iVar13 + 1" (identifier "iVar13") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*puVar11 = uVar15 + 1;" (assignment_expression "*puVar11 = uVar15 + 1" (pointer_expression "*puVar11" (* "*") (identifier "puVar11")) (= "=") (binary_expression "uVar15 + 1" (identifier "uVar15") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar11 = puVar11 + 1;" (assignment_expression "puVar11 = puVar11 + 1" (identifier "puVar11") (= "=") (binary_expression "puVar11 + 1" (identifier "puVar11") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar15 + 1 == 0)" (( "(") (binary_expression "uVar15 + 1 == 0" (binary_expression "uVar15 + 1" (identifier "uVar15") (+ "+") (number_literal "1")) (== "==") (number_literal "0")) () ")")) (; ";")) (} "}"))) (} "}"))) (} "}")) (else_clause "else {\n    iVar16 = *piVar8;\n    iVar7 = puVar14[3];\n    iVar5 = iVar18 - iVar16;\n    puVar20 = (uint *)piVar8[3];\n    iVar13 = iVar18;\n    if (0 < iVar5) goto LAB_0001cc68;\nLAB_0001cda8:\n    iVar16 = iVar13;\n    uVar6 = (**(code **)(puVar22 + 0x7a4a4))(puVar20,iVar7,iVar16);\n  }" (else "else") (compound_statement "{\n    iVar16 = *piVar8;\n    iVar7 = puVar14[3];\n    iVar5 = iVar18 - iVar16;\n    puVar20 = (uint *)piVar8[3];\n    iVar13 = iVar18;\n    if (0 < iVar5) goto LAB_0001cc68;\nLAB_0001cda8:\n    iVar16 = iVar13;\n    uVar6 = (**(code **)(puVar22 + 0x7a4a4))(puVar20,iVar7,iVar16);\n  }" ({ "{") (expression_statement "iVar16 = *piVar8;" (assignment_expression "iVar16 = *piVar8" (identifier "iVar16") (= "=") (pointer_expression "*piVar8" (* "*") (identifier "piVar8"))) (; ";")) (expression_statement "iVar7 = puVar14[3];" (assignment_expression "iVar7 = puVar14[3]" (identifier "iVar7") (= "=") (subscript_expression "puVar14[3]" (identifier "puVar14") ([ "[") (number_literal "3") (] "]"))) (; ";")) (expression_statement "iVar5 = iVar18 - iVar16;" (assignment_expression "iVar5 = iVar18 - iVar16" (identifier "iVar5") (= "=") (binary_expression "iVar18 - iVar16" (identifier "iVar18") (- "-") (identifier "iVar16"))) (; ";")) (expression_statement "puVar20 = (uint *)piVar8[3];" (assignment_expression "puVar20 = (uint *)piVar8[3]" (identifier "puVar20") (= "=") (cast_expression "(uint *)piVar8[3]" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar8[3]" (identifier "piVar8") ([ "[") (number_literal "3") (] "]")))) (; ";")) (expression_statement "iVar13 = iVar18;" (assignment_expression "iVar13 = iVar18" (identifier "iVar13") (= "=") (identifier "iVar18")) (; ";")) (if_statement "if (0 < iVar5) goto LAB_0001cc68;" (if "if") (parenthesized_expression "(0 < iVar5)" (( "(") (binary_expression "0 < iVar5" (number_literal "0") (< "<") (identifier "iVar5")) () ")")) (goto_statement "goto LAB_0001cc68;" (goto "goto") (statement_identifier "LAB_0001cc68") (; ";"))) (labeled_statement "LAB_0001cda8:\n    iVar16 = iVar13;" (statement_identifier "LAB_0001cda8") (: ":") (expression_statement "iVar16 = iVar13;" (assignment_expression "iVar16 = iVar13" (identifier "iVar16") (= "=") (identifier "iVar13")) (; ";"))) (expression_statement "uVar6 = (**(code **)(puVar22 + 0x7a4a4))(puVar20,iVar7,iVar16);" (assignment_expression "uVar6 = (**(code **)(puVar22 + 0x7a4a4))(puVar20,iVar7,iVar16)" (identifier "uVar6") (= "=") (call_expression "(**(code **)(puVar22 + 0x7a4a4))(puVar20,iVar7,iVar16)" (parenthesized_expression "(**(code **)(puVar22 + 0x7a4a4))" (( "(") (pointer_expression "**(code **)(puVar22 + 0x7a4a4)" (* "*") (pointer_expression "*(code **)(puVar22 + 0x7a4a4)" (* "*") (cast_expression "(code **)(puVar22 + 0x7a4a4)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar22 + 0x7a4a4)" (( "(") (binary_expression "puVar22 + 0x7a4a4" (identifier "puVar22") (+ "+") (number_literal "0x7a4a4")) () ")"))))) () ")")) (argument_list "(puVar20,iVar7,iVar16)" (( "(") (identifier "puVar20") (, ",") (identifier "iVar7") (, ",") (identifier "iVar16") () ")")))) (; ";")) (} "}")))) (expression_statement "iVar13 = iVar16 + (uint)(uVar6 != 0);" (assignment_expression "iVar13 = iVar16 + (uint)(uVar6 != 0)" (identifier "iVar13") (= "=") (binary_expression "iVar16 + (uint)(uVar6 != 0)" (identifier "iVar16") (+ "+") (call_expression "(uint)(uVar6 != 0)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar6 != 0)" (( "(") (binary_expression "uVar6 != 0" (identifier "uVar6") (!= "!=") (number_literal "0")) () ")"))))) (; ";")) (expression_statement "puVar20[iVar16] = uVar6;" (assignment_expression "puVar20[iVar16] = uVar6" (subscript_expression "puVar20[iVar16]" (identifier "puVar20") ([ "[") (identifier "iVar16") (] "]")) (= "=") (identifier "uVar6")) (; ";")) (expression_statement "piVar8[2] = puVar14[2] + (uint)(uVar6 != 0);" (assignment_expression "piVar8[2] = puVar14[2] + (uint)(uVar6 != 0)" (subscript_expression "piVar8[2]" (identifier "piVar8") ([ "[") (number_literal "2") (] "]")) (= "=") (binary_expression "puVar14[2] + (uint)(uVar6 != 0)" (subscript_expression "puVar14[2]" (identifier "puVar14") ([ "[") (number_literal "2") (] "]")) (+ "+") (call_expression "(uint)(uVar6 != 0)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar6 != 0)" (( "(") (binary_expression "uVar6 != 0" (identifier "uVar6") (!= "!=") (number_literal "0")) () ")"))))) (; ";")) (labeled_statement "joined_r0x0001cddc:\n  if (iVar18 < 0) {\n    iVar13 = -iVar13;\n  }" (statement_identifier "joined_r0x0001cddc") (: ":") (if_statement "if (iVar18 < 0) {\n    iVar13 = -iVar13;\n  }" (if "if") (parenthesized_expression "(iVar18 < 0)" (( "(") (binary_expression "iVar18 < 0" (identifier "iVar18") (< "<") (number_literal "0")) () ")")) (compound_statement "{\n    iVar13 = -iVar13;\n  }" ({ "{") (expression_statement "iVar13 = -iVar13;" (assignment_expression "iVar13 = -iVar13" (identifier "iVar13") (= "=") (unary_expression "-iVar13" (- "-") (identifier "iVar13"))) (; ";")) (} "}")))) (expression_statement "piVar8[1] = iVar13;" (assignment_expression "piVar8[1] = iVar13" (subscript_expression "piVar8[1]" (identifier "piVar8") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "iVar13")) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

void function_1(type_1 r,type_2 u,type_2 v)

{
  type_3 var_18;
  type_4 *var_11;
  int var_6;
  type_5 var_1;
  type_4 *var_8;
  type_6 *ptVar6;
  int var_9;
  type_4 *var_10;
  type_5 var_3;
  type_5 *var_19;
  type_4 mVar11;
  type_6 *var_22;
  type_2 p_Var13;
  type_2 p_Var14;
  type_5 var_2;
  type_6 *var_23;
  size_t sVar17;
  type_5 var_12;
  type_6 *var_17;
  type_5 var_13;
  type_5 *var_21;
  type_5 var_4;
  type_7 *var_16;
  type_8 *pcVar24;
  type_9 *var_7;
  type_10 uVar26;
  type_9 var_5 [24];
  type_6 *var_14;
  int var_15;
  
  var_16 = PTR___stack_chk_guard_00097540;
  var_7 = var_5;
  var_12 = u->_mp_size;
  var_15 = *(int *)PTR___stack_chk_guard_00097540;
  var_2 = r->_mp_prec;
  var_13 = v->_mp_size;
  var_1 = -var_12;
  if (-1 < (int)var_12) {
    var_1 = var_12;
  }
  var_3 = var_13;
  if ((int)var_13 < 0) {
    var_3 = -var_13;
  }
  p_Var14 = (type_2)u->_mp_d;
  p_Var13 = (type_2)v->_mp_d;
  var_4 = var_1;
  if ((type_6 *)(type_5)((int)var_2 < (int)var_1) != (type_6 *)0x0) {
    p_Var14 = (type_2)((int)p_Var14 + (var_1 - var_2) * 4);
    var_4 = var_2;
  }
  if ((int)var_2 < (int)var_3) {
    p_Var13 = (type_2)((int)p_Var13 + (var_3 - var_2) * 4);
    var_3 = var_2;
  }
  if ((var_4 == 0) || (var_3 == 0)) {
    r->_mp_size = 0;
    r->_mp_exp = 0;
    ptVar6 = (type_6 *)(type_5)((int)var_2 < (int)var_1);
    p_Var14 = u;
    var_7 = var_5;
  }
  else {
    var_1 = (var_4 + var_3) * 4;
    var_14 = (type_6 *)0x0;
    if (var_1 < 0x7f01) {
      var_6 = -(var_1 + 7 & 0xfffffff8);
      var_7 = var_5 + var_6;
      var_8 = (type_4 *)(&stack0xffffffb8 + var_6);
    }
    else {
      var_8 = (type_4 *)(*(type_8 *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&var_14);
    }
    if ((int)var_4 < (int)var_3) {
      *(type_5 *)(var_7 + 0x10) = var_4;
      var_6 = (*(type_8 *)PTR___gmpn_mul_000972b4)(var_8,p_Var13,var_3,p_Var14);
      p_Var14 = p_Var13;
    }
    else {
      *(type_5 *)(var_7 + 0x10) = var_3;
      var_6 = (*(type_8 *)PTR___gmpn_mul_000972b4)(var_8,p_Var14,var_4,p_Var13);
    }
    var_3 = (var_4 + var_3) - (type_5)(var_6 == 0);
    var_2 = var_2 + 1;
    if ((int)var_2 < (int)var_3) {
      var_8 = var_8 + (var_3 - var_2);
      var_3 = var_2;
    }
    var_9 = var_3 - 1;
    if (var_3 != 0) {
      var_11 = r->_mp_d;
      mVar11 = *var_8;
      var_10 = var_11;
      if (var_9 != 0) {
        do {
          var_8 = var_8 + 1;
          p_Var14 = (type_2)(var_10 + 1);
          *var_10 = mVar11;
          var_9 = var_9 + -1;
          mVar11 = *var_8;
          var_10 = (type_4 *)p_Var14;
        } while (var_9 != 0);
        var_11 = var_11 + (var_3 - 1);
      }
      *var_11 = mVar11;
    }
    var_12 = var_12 ^ var_13;
    r->_mp_exp = (u->_mp_exp + v->_mp_exp) - (type_5)(var_6 == 0);
    if ((int)var_12 < 0) {
      var_3 = -var_3;
    }
    r->_mp_size = var_3;
    ptVar6 = var_14;
    if (var_14 != (type_6 *)0x0) {
      (*(type_8 *)PTR___gmp_tmp_reentrant_free_00097614)();
    }
  }
  if (var_15 == *(int *)var_16) {
    return;
  }
  uVar26 = 0x1cbf4;
  var_16 = PTR___stack_chk_fail_000974d0;
  (*(type_8 *)PTR___stack_chk_fail_000974d0)();
  *(type_7 **)(var_7 + -0x28) = var_16 + 0x82440;
  *(type_1 *)(var_7 + -0x14) = r;
  *(type_10 *)(var_7 + -4) = uVar26;
  *(type_2 *)(var_7 + -8) = u;
  *(type_2 *)(var_7 + -0xc) = v;
  *(type_5 *)(var_7 + -0x10) = var_13;
  *(type_5 *)(var_7 + -0x18) = var_12;
  *(type_5 *)(var_7 + -0x1c) = var_2;
  var_17 = (type_6 *)p_Var14->_mp_size;
  if ((var_3 == 0) || (var_17 == (type_6 *)0x0)) {
    ptVar6->size = 0;
    ptVar6[1].next = (type_6 *)0x0;
    return;
  }
  if ((int)var_17 < 0) {
    var_23 = ptVar6->next;
    var_8 = p_Var14->_mp_d;
    var_21 = (type_5 *)ptVar6[1].size;
    var_6 = -(int)var_17 - (int)var_23;
    var_22 = (type_6 *)-(int)var_17;
    if (var_6 < 1) goto LAB_0001cda8;
LAB_0001cc68:
    var_9 = var_6 + -1;
    var_18 = (type_11)var_3 * (type_11)var_8[var_9];
    var_10 = var_8 + var_6;
    while( true ) {
      var_2 = (type_5)((type_11)var_18 >> 0x20);
      var_9 = var_9 + -1;
      pcVar24 = *(type_8 **)(var_16 + 0x7a4a4);
      if (var_9 == -1) break;
      var_19 = var_10 + -2;
      var_10 = var_10 + -1;
      var_18 = var_18 + ((type_11)var_3 * (type_11)*var_19 >> 0x20);
      var_2 = (type_5)((type_11)var_18 >> 0x20);
      if ((int)var_18 != -1) {
        pcVar24 = *(type_8 **)(var_16 + 0x7a4a4);
        break;
      }
      var_18 = var_20(var_2,(int)((type_11)var_3 * (type_11)*var_19));
    }
    var_1 = (*pcVar24)(var_21,var_8 + var_6,var_23);
    var_12 = *var_21;
    *var_21 = var_2 + var_12;
    if (var_2 + var_12 < var_2) {
      if ((int)var_23 < 2) {
LAB_0001cd34:
        var_2 = (type_5)(var_1 + 1 != 0);
        sVar17 = (int)&var_23->next + var_2;
        var_21[(int)var_23] = var_1 + 1;
        ptVar6[1].next = (type_6 *)(p_Var14->_mp_exp + var_2);
        goto joined_r0x0001cddc;
      }
      var_2 = var_21[1];
      var_21[1] = var_2 + 1;
      if (var_2 + 1 == 0) {
        var_22 = (type_6 *)0x2;
        var_19 = var_21 + 2;
        do {
          if (var_22 == var_23) goto LAB_0001cd34;
          var_2 = *var_19;
          var_22 = (type_6 *)((int)&var_22->next + 1);
          *var_19 = var_2 + 1;
          var_19 = var_19 + 1;
        } while (var_2 + 1 == 0);
      }
    }
  }
  else {
    var_23 = ptVar6->next;
    var_8 = p_Var14->_mp_d;
    var_6 = (int)var_17 - (int)var_23;
    var_21 = (type_5 *)ptVar6[1].size;
    var_22 = var_17;
    if (0 < var_6) goto LAB_0001cc68;
LAB_0001cda8:
    var_23 = var_22;
    var_1 = (**(type_8 **)(var_16 + 0x7a4a4))(var_21,var_8,var_23);
  }
  sVar17 = (int)&var_23->next + (type_5)(var_1 != 0);
  var_21[(int)var_23] = var_1;
  ptVar6[1].next = (type_6 *)(p_Var14->_mp_exp + (type_5)(var_1 != 0));
joined_r0x0001cddc:
  if ((int)var_17 < 0) {
    sVar17 = -sVar17;
  }
  ptVar6->size = sVar17;
  return;
}


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

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

{
  longlong lVar1;
  ulonglong uVar2;
  undefined4 *puVar3;
  undefined4 *puVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  int *piVar8;
  int iVar9;
  uint uVar10;
  uint *puVar11;
  undefined4 *puVar12;
  int iVar13;
  undefined4 *puVar14;
  uint uVar15;
  int iVar16;
  uint uVar17;
  int iVar18;
  uint uVar19;
  uint *puVar20;
  uint uVar21;
  undefined *puVar22;
  code *pcVar23;
  undefined1 *puVar24;
  undefined4 uVar25;
  undefined1 auStack_60 [24];
  int *local_30;
  int local_2c;
  
  puVar22 = PTR___stack_chk_guard_00097540;
  puVar24 = auStack_60;
  uVar17 = param_2[1];
  local_2c = *(int *)PTR___stack_chk_guard_00097540;
  uVar15 = *param_1;
  uVar19 = *(uint *)(param_3 + 4);
  uVar6 = -uVar17;
  if (-1 < (int)uVar17) {
    uVar6 = uVar17;
  }
  uVar10 = uVar19;
  if ((int)uVar19 < 0) {
    uVar10 = -uVar19;
  }
  puVar14 = (undefined4 *)param_2[3];
  puVar12 = *(undefined4 **)(param_3 + 0xc);
  uVar21 = uVar6;
  if ((int *)(uint)((int)uVar15 < (int)uVar6) != (int *)0x0) {
    puVar14 = puVar14 + (uVar6 - uVar15);
    uVar21 = uVar15;
  }
  if ((int)uVar15 < (int)uVar10) {
    puVar12 = puVar12 + (uVar10 - uVar15);
    uVar10 = uVar15;
  }
  if ((uVar21 == 0) || (uVar10 == 0)) {
    param_1[1] = 0;
    param_1[2] = 0;
    piVar8 = (int *)(uint)((int)uVar15 < (int)uVar6);
    puVar14 = param_2;
    puVar24 = auStack_60;
  }
  else {
    uVar6 = (uVar21 + uVar10) * 4;
    local_30 = (int *)0x0;
    if (uVar6 < 0x7f01) {
      iVar18 = -(uVar6 + 7 & 0xfffffff8);
      puVar24 = auStack_60 + iVar18;
      puVar4 = (undefined4 *)(&stack0xffffffb8 + iVar18);
    }
    else {
      puVar4 = (undefined4 *)(*(code *)PTR___gmp_tmp_reentrant_alloc_000972f0)(&local_30);
    }
    if ((int)uVar21 < (int)uVar10) {
      *(uint *)(puVar24 + 0x10) = uVar21;
      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar12,uVar10,puVar14);
      puVar14 = puVar12;
    }
    else {
      *(uint *)(puVar24 + 0x10) = uVar10;
      iVar18 = (*(code *)PTR___gmpn_mul_000972b4)(puVar4,puVar14,uVar21,puVar12);
    }
    uVar10 = (uVar21 + uVar10) - (uint)(iVar18 == 0);
    uVar15 = uVar15 + 1;
    if ((int)uVar15 < (int)uVar10) {
      puVar4 = puVar4 + (uVar10 - uVar15);
      uVar10 = uVar15;
    }
    iVar13 = uVar10 - 1;
    if (uVar10 != 0) {
      puVar3 = (undefined4 *)param_1[3];
      uVar25 = *puVar4;
      puVar12 = puVar3;
      if (iVar13 != 0) {
        do {
          puVar4 = puVar4 + 1;
          puVar14 = puVar12 + 1;
          *puVar12 = uVar25;
          iVar13 = iVar13 + -1;
          uVar25 = *puVar4;
          puVar12 = puVar14;
        } while (iVar13 != 0);
        puVar3 = puVar3 + (uVar10 - 1);
      }
      *puVar3 = uVar25;
    }
    uVar17 = uVar17 ^ uVar19;
    param_1[2] = (param_2[2] + *(int *)(param_3 + 8)) - (uint)(iVar18 == 0);
    if ((int)uVar17 < 0) {
      uVar10 = -uVar10;
    }
    param_1[1] = uVar10;
    piVar8 = local_30;
    if (local_30 != (int *)0x0) {
      (*(code *)PTR___gmp_tmp_reentrant_free_00097614)();
    }
  }
  if (local_2c == *(int *)puVar22) {
    return;
  }
  uVar25 = 0x1cbf4;
  puVar22 = PTR___stack_chk_fail_000974d0;
  (*(code *)PTR___stack_chk_fail_000974d0)();
  *(undefined **)(puVar24 + -0x28) = puVar22 + 0x82440;
  *(uint **)(puVar24 + -0x14) = param_1;
  *(undefined4 *)(puVar24 + -4) = uVar25;
  *(undefined4 **)(puVar24 + -8) = param_2;
  *(int *)(puVar24 + -0xc) = param_3;
  *(uint *)(puVar24 + -0x10) = uVar19;
  *(uint *)(puVar24 + -0x18) = uVar17;
  *(uint *)(puVar24 + -0x1c) = uVar15;
  iVar18 = puVar14[1];
  if ((uVar10 == 0) || (iVar18 == 0)) {
    piVar8[1] = 0;
    piVar8[2] = 0;
    return;
  }
  if (iVar18 < 0) {
    iVar16 = *piVar8;
    iVar7 = puVar14[3];
    puVar20 = (uint *)piVar8[3];
    iVar5 = -iVar18 - iVar16;
    iVar13 = -iVar18;
    if (iVar5 < 1) goto LAB_0001cda8;
LAB_0001cc68:
    iVar9 = iVar5 + -1;
    iVar5 = iVar7 + iVar5 * 4;
    lVar1 = (ulonglong)uVar10 * (ulonglong)*(uint *)(iVar7 + iVar9 * 4);
    iVar13 = iVar5;
    while( true ) {
      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);
      iVar9 = iVar9 + -1;
      pcVar23 = *(code **)(puVar22 + 0x7a4a4);
      if (iVar9 == -1) break;
      puVar11 = (uint *)(iVar13 + -8);
      iVar13 = iVar13 + -4;
      uVar2 = (ulonglong)uVar10 * (ulonglong)*puVar11;
      lVar1 = lVar1 + (uVar2 >> 0x20);
      uVar15 = (uint)((ulonglong)lVar1 >> 0x20);
      if ((int)lVar1 != -1) {
        pcVar23 = *(code **)(puVar22 + 0x7a4a4);
        break;
      }
      lVar1 = CONCAT44(uVar15,(int)uVar2);
    }
    uVar6 = (*pcVar23)(puVar20,iVar5,iVar16);
    uVar17 = *puVar20;
    *puVar20 = uVar15 + uVar17;
    if (uVar15 + uVar17 < uVar15) {
      if (iVar16 < 2) {
LAB_0001cd34:
        uVar15 = (uint)(uVar6 + 1 != 0);
        iVar13 = iVar16 + uVar15;
        puVar20[iVar16] = uVar6 + 1;
        piVar8[2] = puVar14[2] + uVar15;
        goto joined_r0x0001cddc;
      }
      uVar15 = puVar20[1];
      puVar20[1] = uVar15 + 1;
      if (uVar15 + 1 == 0) {
        iVar13 = 2;
        puVar11 = puVar20 + 2;
        do {
          if (iVar13 == iVar16) goto LAB_0001cd34;
          uVar15 = *puVar11;
          iVar13 = iVar13 + 1;
          *puVar11 = uVar15 + 1;
          puVar11 = puVar11 + 1;
        } while (uVar15 + 1 == 0);
      }
    }
  }
  else {
    iVar16 = *piVar8;
    iVar7 = puVar14[3];
    iVar5 = iVar18 - iVar16;
    puVar20 = (uint *)piVar8[3];
    iVar13 = iVar18;
    if (0 < iVar5) goto LAB_0001cc68;
LAB_0001cda8:
    iVar16 = iVar13;
    uVar6 = (**(code **)(puVar22 + 0x7a4a4))(puVar20,iVar7,iVar16);
  }
  iVar13 = iVar16 + (uint)(uVar6 != 0);
  puVar20[iVar16] = uVar6;
  piVar8[2] = puVar14[2] + (uint)(uVar6 != 0);
joined_r0x0001cddc:
  if (iVar18 < 0) {
    iVar13 = -iVar13;
  }
  piVar8[1] = iVar13;
  return;
}

