
Bignum_conflict modpow_simple(Bignum_conflict base_in,Bignum_conflict exp,Bignum_conflict mod)

{
  Bignum_conflict pBVar1;
  BignumInt *pBVar2;
  undefined4 *puVar3;
  undefined4 *puVar4;
  undefined4 *puVar5;
  undefined4 *puVar6;
  int iVar7;
  undefined4 uVar8;
  uint uVar9;
  code *pcVar10;
  code *pcVar11;
  Bignum_conflict pBVar12;
  BignumInt BVar13;
  int iVar14;
  Bignum_conflict pBVar15;
  BignumInt *pBVar16;
  BignumInt len;
  uint uVar17;
  undefined4 *puVar18;
  int iVar19;
  BignumInt BVar20;
  
  if (mod[*mod] == 0) {
    pBVar1 = (Bignum_conflict)
             (*(code *)PTR___assert_fail_000b8b18)
                       (PTR_PC2_1357_27__000b8348 + -0x7fc,PTR_PC2_1357_27__000b8348 + -0x840,0x3b9,
                        PTR_PC2_1357_27__000b8348 + -0x62c);
    return pBVar1;
  }
  pBVar1 = bigmod(base_in,mod);
  len = *mod;
  pBVar2 = (BignumInt *)(*(code *)PTR_safemalloc_000b82f8)(len,4);
  if (0 < (int)len) {
    BVar13 = 0;
    pBVar16 = pBVar2;
    do {
      *pBVar16 = mod[*mod - BVar13];
      BVar13 = BVar13 + 1;
      pBVar16 = pBVar16 + 1;
    } while (len != BVar13);
  }
  puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(len,4);
  iVar14 = len - *pBVar1;
  if (0 < iVar14) {
    puVar5 = puVar3;
    do {
      *puVar5 = 0;
      puVar5 = puVar5 + 1;
    } while (puVar5 != puVar3 + iVar14);
  }
  BVar13 = *pBVar1;
  if (0 < (int)BVar13) {
    pBVar16 = puVar3 + iVar14;
    iVar14 = 0;
    do {
      *pBVar16 = pBVar1[BVar13 - iVar14];
      iVar14 = iVar14 + 1;
      BVar13 = *pBVar1;
      pBVar16 = pBVar16 + 1;
    } while (iVar14 < (int)BVar13);
  }
  iVar14 = len << 1;
  puVar4 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar14,4);
  puVar5 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar14,4);
  if (0 < iVar14) {
    puVar6 = puVar4;
    do {
      *puVar6 = 0;
      puVar6 = puVar6 + 1;
    } while (puVar6 != puVar4 + len * 2);
  }
  puVar4[len * 2 + -1] = 1;
  iVar7 = mul_compute_scratch(len);
  uVar8 = (*(code *)PTR_safemalloc_000b82f8)(iVar7,4);
  BVar13 = *exp;
  iVar19 = 0;
LAB_000561f0:
  uVar17 = 0x1f;
  while (iVar19 < (int)BVar13) {
    if ((1 << (uVar17 & 0x1f) & exp[BVar13 - iVar19]) != 0) {
      BVar20 = *pBVar2;
      uVar9 = bn_clz(BVar20);
      if (uVar9 != 0) goto LAB_00056608;
      BVar20 = reciprocal_word(BVar20);
      goto LAB_000563c4;
    }
    uVar17 = uVar17 - 1;
    if (uVar17 == 0xffffffff) goto code_r0x00056228;
  }
  BVar20 = *pBVar2;
  uVar9 = bn_clz(BVar20);
  if (uVar9 == 0) {
    reciprocal_word(BVar20);
    goto LAB_00056404;
  }
LAB_00056608:
  BVar20 = BVar20 << (uVar9 & 0x1f);
  if ((int)len < 2) {
    BVar20 = reciprocal_word(BVar20);
    if ((int)BVar13 <= iVar19) goto LAB_00056404;
  }
  else {
    BVar20 = reciprocal_word(pBVar2[1] >> (-uVar9 & 0x1f) | BVar20);
    if ((int)BVar13 <= iVar19) {
      pBVar12 = newbn(*mod);
      goto LAB_0005642c;
    }
  }
LAB_000563c4:
  pcVar10 = (code *)(PTR_LAB_000b8640 + 0x2da0);
  pcVar11 = (code *)(PTR_LAB_000b8640 + 0x37b8);
  do {
    puVar6 = puVar5;
    puVar18 = puVar4;
    if (-1 < (int)uVar17) {
      do {
        (*pcVar10)(puVar18 + len,puVar18 + len,puVar6,len,uVar8);
        (*pcVar11)(puVar6,iVar14,pBVar2,len,0,BVar20,uVar9);
        puVar5 = puVar18;
        puVar4 = puVar6;
        if ((1 << (uVar17 & 0x1f) & exp[*exp - iVar19]) != 0) {
          (*pcVar10)(puVar6 + len,puVar3,puVar18,len,uVar8);
          (*pcVar11)(puVar18,iVar14,pBVar2,len,0,BVar20,uVar9);
          puVar5 = puVar6;
          puVar4 = puVar18;
        }
        uVar17 = uVar17 - 1;
        puVar6 = puVar5;
        puVar18 = puVar4;
      } while (uVar17 != 0xffffffff);
    }
    iVar19 = iVar19 + 1;
    uVar17 = 0x1f;
  } while (iVar19 < (int)*exp);
LAB_00056404:
  pBVar12 = newbn(*mod);
  if (0 < (int)len) {
LAB_0005642c:
    pBVar16 = puVar4 + len;
    iVar14 = 0;
    do {
      pBVar12[*pBVar12 - iVar14] = *pBVar16;
      iVar14 = iVar14 + 1;
      pBVar16 = pBVar16 + 1;
    } while (iVar14 < (int)len);
  }
  BVar13 = *pBVar12;
  if (1 < BVar13) {
    pBVar15 = pBVar12 + BVar13;
    BVar20 = *pBVar15;
    while (BVar20 == 0) {
      BVar13 = BVar13 - 1;
      *pBVar12 = BVar13;
      if (BVar13 == 1) break;
      pBVar16 = pBVar15 + -1;
      pBVar15 = pBVar15 + -1;
      BVar20 = *pBVar16;
    }
  }
  (*(code *)PTR_smemclr_000b8328)(puVar4,len * 8);
  (*(code *)PTR_safefree_000b82e8)(puVar4);
  (*(code *)PTR_smemclr_000b8328)(uVar8,iVar7 << 2);
  (*(code *)PTR_safefree_000b82e8)(uVar8);
  (*(code *)PTR_smemclr_000b8328)(puVar5,len * 8);
  (*(code *)PTR_safefree_000b82e8)(puVar5);
  (*(code *)PTR_smemclr_000b8328)(pBVar2,len << 2);
  (*(code *)PTR_safefree_000b82e8)(pBVar2);
  (*(code *)PTR_smemclr_000b8328)(puVar3,len << 2);
  (*(code *)PTR_safefree_000b82e8)(puVar3);
                    /* WARNING: Subroutine does not return */
  freebn(pBVar1);
code_r0x00056228:
  iVar19 = iVar19 + 1;
  goto LAB_000561f0;
}



uint * modpow_simple(undefined4 param_1,int *param_2,int *param_3)

{
  uint *puVar1;
  int *piVar2;
  int *piVar3;
  undefined4 *puVar4;
  int iVar5;
  undefined4 *puVar6;
  undefined4 *puVar7;
  undefined4 *puVar8;
  undefined4 uVar9;
  uint uVar10;
  undefined4 uVar11;
  code *pcVar12;
  code *pcVar13;
  uint *puVar14;
  int iVar15;
  int *piVar16;
  uint *puVar17;
  uint uVar18;
  int iVar19;
  uint uVar20;
  undefined4 *puVar21;
  int iVar22;
  int iVar23;
  int iVar24;
  
  if (param_3[*param_3] == 0) {
    puVar14 = (uint *)(*(code *)PTR___assert_fail_000b8b18)
                                (PTR_DAT_000b8348 + -0x7fc,PTR_DAT_000b8348 + -0x840,0x3b9,
                                 PTR_DAT_000b8348 + -0x62c);
    return puVar14;
  }
  piVar2 = (int *)bigmod(param_1,param_3);
  iVar19 = *param_3;
  piVar3 = (int *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4);
  if (0 < iVar19) {
    iVar15 = 0;
    piVar16 = piVar3;
    do {
      *piVar16 = param_3[*param_3 - iVar15];
      iVar15 = iVar15 + 1;
      piVar16 = piVar16 + 1;
    } while (iVar19 != iVar15);
  }
  puVar4 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4);
  iVar15 = iVar19 - *piVar2;
  if (0 < iVar15) {
    puVar7 = puVar4;
    do {
      *puVar7 = 0;
      puVar7 = puVar7 + 1;
    } while (puVar7 != puVar4 + iVar15);
  }
  iVar5 = *piVar2;
  if (0 < iVar5) {
    piVar16 = puVar4 + iVar15;
    iVar15 = 0;
    do {
      *piVar16 = piVar2[iVar5 - iVar15];
      iVar15 = iVar15 + 1;
      iVar5 = *piVar2;
      piVar16 = piVar16 + 1;
    } while (iVar15 < iVar5);
  }
  iVar15 = iVar19 << 1;
  puVar6 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4);
  puVar7 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4);
  if (0 < iVar15) {
    puVar8 = puVar6;
    do {
      *puVar8 = 0;
      puVar8 = puVar8 + 1;
    } while (puVar8 != puVar6 + iVar19 * 2);
  }
  puVar6[iVar19 * 2 + -1] = 1;
  iVar5 = FUN_00052bdc();
  uVar9 = (*(code *)PTR_safemalloc_000b82f8)(iVar5,4);
  iVar23 = *param_2;
  iVar22 = 0;
LAB_000561f0:
  uVar20 = 0x1f;
  while (iVar22 < iVar23) {
    if ((1 << (uVar20 & 0x1f) & param_2[iVar23 - iVar22]) != 0) {
      iVar24 = *piVar3;
      uVar10 = FUN_00052c20(iVar24);
      if (uVar10 != 0) goto LAB_00056608;
      uVar11 = FUN_00052c64(iVar24);
      goto LAB_000563c4;
    }
    uVar20 = uVar20 - 1;
    if (uVar20 == 0xffffffff) goto code_r0x00056228;
  }
  iVar24 = *piVar3;
  uVar10 = FUN_00052c20(iVar24);
  if (uVar10 == 0) {
    FUN_00052c64(iVar24);
    goto LAB_00056404;
  }
LAB_00056608:
  uVar18 = iVar24 << (uVar10 & 0x1f);
  if (iVar19 < 2) {
    uVar11 = FUN_00052c64(uVar18);
    if (iVar23 <= iVar22) goto LAB_00056404;
  }
  else {
    uVar11 = FUN_00052c64((uint)piVar3[1] >> (-uVar10 & 0x1f) | uVar18);
    if (iVar23 <= iVar22) {
      puVar14 = (uint *)FUN_00053e48(*param_3);
      goto LAB_0005642c;
    }
  }
LAB_000563c4:
  pcVar12 = (code *)(PTR_LAB_000b8640 + 0x2da0);
  pcVar13 = (code *)(PTR_LAB_000b8640 + 0x37b8);
  do {
    puVar8 = puVar7;
    puVar21 = puVar6;
    if (-1 < (int)uVar20) {
      do {
        (*pcVar12)(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9);
        (*pcVar13)(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10);
        puVar7 = puVar21;
        puVar6 = puVar8;
        if ((1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0) {
          (*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);
          (*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);
          puVar7 = puVar8;
          puVar6 = puVar21;
        }
        uVar20 = uVar20 - 1;
        puVar8 = puVar7;
        puVar21 = puVar6;
      } while (uVar20 != 0xffffffff);
    }
    iVar22 = iVar22 + 1;
    uVar20 = 0x1f;
  } while (iVar22 < *param_2);
LAB_00056404:
  puVar14 = (uint *)FUN_00053e48(*param_3);
  if (0 < iVar19) {
LAB_0005642c:
    puVar17 = puVar6 + iVar19;
    iVar15 = 0;
    do {
      puVar14[*puVar14 - iVar15] = *puVar17;
      iVar15 = iVar15 + 1;
      puVar17 = puVar17 + 1;
    } while (iVar15 < iVar19);
  }
  uVar20 = *puVar14;
  if (1 < uVar20) {
    puVar17 = puVar14 + uVar20;
    uVar10 = *puVar17;
    while (uVar10 == 0) {
      uVar20 = uVar20 - 1;
      *puVar14 = uVar20;
      if (uVar20 == 1) break;
      puVar1 = puVar17 + -1;
      puVar17 = puVar17 + -1;
      uVar10 = *puVar1;
    }
  }
  (*(code *)PTR_smemclr_000b8328)(puVar6,iVar19 * 8);
  (*(code *)PTR_safefree_000b82e8)(puVar6);
  (*(code *)PTR_smemclr_000b8328)(uVar9,iVar5 << 2);
  (*(code *)PTR_safefree_000b82e8)(uVar9);
  (*(code *)PTR_smemclr_000b8328)(puVar7,iVar19 * 8);
  (*(code *)PTR_safefree_000b82e8)(puVar7);
  (*(code *)PTR_smemclr_000b8328)(piVar3,iVar19 << 2);
  (*(code *)PTR_safefree_000b82e8)(piVar3);
  (*(code *)PTR_smemclr_000b8328)(puVar4,iVar19 << 2);
  (*(code *)PTR_safefree_000b82e8)(puVar4);
  freebn(piVar2);
  return puVar14;
code_r0x00056228:
  iVar22 = iVar22 + 1;
  goto LAB_000561f0;
}


lui gp,0x7
addiu gp,gp,-0x5d30
addu gp,gp,t9
addiu sp,sp,-0x78
sw ra,0x74(sp)
sw s8,0x70(sp)
sw s7,0x6c(sp)
sw s6,0x68(sp)
sw s5,0x64(sp)
sw s4,0x60(sp)
sw s3,0x5c(sp)
sw s2,0x58(sp)
sw s1,0x54(sp)
sw s0,0x50(sp)
sw gp,0x20(sp)
sw a2,0x80(sp)
lw v0,0x0(a2)
sll v0,v0,0x2
addu v0,a2,v0
lw v0,0x0(v0)
beq v0,zero,0x00056230
_or s3,a1,zero
lw a1,0x80(sp)
lw t9,-0x7aac(gp)
bal 0x00055ef8
_nop
lw gp,0x20(sp)
sw v0,0x40(sp)
lw v0,0x80(sp)
lw s0,0x0(v0)
sw s0,0x44(sp)
sw s0,0x28(sp)
li a1,0x4
or a0,s0,zero
lw t9,-0x7f98(gp)
jalr t9
_nop
lw gp,0x20(sp)
blez s0,0x00056098
_sw v0,0x2c(sp)
or a0,v0,zero
or v1,zero,zero
lw v0,0x80(sp)
lw v0,0x0(v0)
subu v0,v0,v1
sll v0,v0,0x2
lw a1,0x80(sp)
addu v0,a1,v0
lw v0,0x0(v0)
sw v0,0x0(a0)
addiu v1,v1,0x1
lw v0,0x28(sp)
bne v0,v1,0x00056068
_addiu a0,a0,0x4
li a1,0x4
lw s0,0x44(sp)
or a0,s0,zero
lw t9,-0x7f98(gp)
jalr t9
_nop
lw gp,0x20(sp)
sw v0,0x3c(sp)
lw v1,0x40(sp)
lw v1,0x0(v1)
subu v1,s0,v1
blez v1,0x000560e4
_nop
sll a0,v1,0x2
addu a0,a0,v0
sw zero,0x0(v0)
addiu v0,v0,0x4
bne v0,a0,0x000560d4
_nop
lw v0,0x40(sp)
lw v0,0x0(v0)
blez v0,0x0005612c
_sll v1,v1,0x2
lw a0,0x3c(sp)
addu a0,a0,v1
or v1,zero,zero
subu v0,v0,v1
sll v0,v0,0x2
lw a1,0x40(sp)
addu v0,a1,v0
lw v0,0x0(v0)
sw v0,0x0(a0)
addiu v1,v1,0x1
lw v0,0x0(a1)
slt a1,v1,v0
bne a1,zero,0x00056100
_addiu a0,a0,0x4
lw v0,0x44(sp)
sll s0,v0,0x1
sw s0,0x30(sp)
li a1,0x4
or a0,s0,zero
lw t9,-0x7f98(gp)
jalr t9
_nop
lw gp,0x20(sp)
or s2,v0,zero
li a1,0x4
or a0,s0,zero
lw t9,-0x7f98(gp)
jalr t9
_nop
lw gp,0x20(sp)
blez s0,0x00056190
_or s1,v0,zero
or v0,s2,zero
sll v1,s0,0x2
addu v1,v1,s2
sw zero,0x0(v0)
addiu v0,v0,0x4
bne v0,v1,0x00056180
_nop
lw a0,0x44(sp)
sll v0,a0,0x3
sw v0,0x48(sp)
addu v0,s2,v0
li v1,0x1
sw v1,-0x4(v0)
lw t9,-0x7c50(gp)
addiu t9,t9,0x2bdc
bal 0x00052bdc
_nop
lw gp,0x20(sp)
sw v0,0x4c(sp)
li a1,0x4
or a0,v0,zero
lw t9,-0x7f98(gp)
jalr t9
_nop
lw gp,0x20(sp)
or s5,v0,zero
lw s7,0x0(s3)
or t0,s7,zero
or s4,zero,zero
li a2,0x1
li a3,-0x1
subu a0,s7,s4
sll a0,a0,0x2
addu a0,s3,a0
li s0,0x1f
slt a1,s4,t0
beq a1,zero,0x000565e0
_sllv v0,a2,s0
lw v1,0x0(a0)
and v0,v0,v1
bne v0,zero,0x00056384
_lw t9,-0x7c50(gp)
addiu s0,s0,-0x1
bne s0,a3,0x00056204
_nop
b 0x000561f0
_addiu s4,s4,0x1
lw a3,-0x7f48(gp)
addiu a3,a3,-0x62c
li a2,0x3b9
lw a1,-0x7f48(gp)
addiu a1,a1,-0x840
lw a0,-0x7f48(gp)
addiu a0,a0,-0x7fc
lw t9,-0x7778(gp)
jalr t9
_nop
lw t9,-0x7c50(gp)
addiu t9,t9,0x2c64
bal 0x00052c64
_nop
lw gp,0x20(sp)
slt s7,s4,s7
bne s7,zero,0x000563c4
_or s8,v0,zero
b 0x00056404
_lw v0,0x80(sp)
sw s5,0x10(sp)
lw a3,0x28(sp)
or a2,s2,zero
lw a1,0x3c(sp)
addu a0,s1,s7
lw t9,0x34(sp)
jalr t9
_nop
lw gp,0x20(sp)
sw s6,0x18(sp)
sw s8,0x14(sp)
sw zero,0x10(sp)
lw a3,0x28(sp)
lw a2,0x2c(sp)
lw a1,0x30(sp)
or a0,s2,zero
lw t9,0x38(sp)
jalr t9
_nop
lw gp,0x20(sp)
addiu s0,s0,-0x1
li v0,-0x1
beq s0,v0,0x00056360
_addu a0,s2,s7
sw s5,0x10(sp)
lw a3,0x28(sp)
or a2,s1,zero
or a1,a0,zero
lw t9,0x34(sp)
jalr t9
_nop
lw gp,0x20(sp)
sw s6,0x18(sp)
sw s8,0x14(sp)
sw zero,0x10(sp)
lw a3,0x28(sp)
lw a2,0x2c(sp)
lw a1,0x30(sp)
or a0,s1,zero
lw t9,0x38(sp)
jalr t9
_nop
lw gp,0x20(sp)
lw v0,0x0(s3)
subu v0,v0,s4
sll v0,v0,0x2
addu v0,s3,v0
li v1,0x1
sllv v1,v1,s0
lw a0,0x0(v0)
and v0,v1,a0
bne v0,zero,0x00056280
_or v0,s2,zero
or s2,s1,zero
b 0x000562d0
_or s1,v0,zero
addiu s4,s4,0x1
lw v0,0x0(s3)
slt v0,s4,v0
beq v0,zero,0x00056400
_li s0,0x1f
bgez s0,0x000562e0
_addu a0,s2,s7
b 0x00056364
_addiu s4,s4,0x1
lw v0,0x2c(sp)
lw s8,0x0(v0)
or a0,s8,zero
addiu t9,t9,0x2c20
bal 0x00052c20
_nop
lw gp,0x20(sp)
bne v0,zero,0x00056608
_or s6,v0,zero
or a0,s8,zero
lw t9,-0x7c50(gp)
addiu t9,t9,0x2c64
bal 0x00052c64
_nop
lw gp,0x20(sp)
or s8,v0,zero
lw v0,0x44(sp)
sll s7,v0,0x2
lw v0,-0x7c50(gp)
addiu v0,v0,0x2da0
sw v0,0x34(sp)
lw v0,-0x7c50(gp)
addiu v0,v0,0x37b8
b 0x00056374
_sw v0,0x38(sp)
or a0,s8,zero
lw t9,-0x7c50(gp)
addiu t9,t9,0x2c64
bal 0x00052c64
_nop
lw gp,0x20(sp)
lw v0,0x80(sp)
lw a0,0x0(v0)
lw t9,-0x7c50(gp)
addiu t9,t9,0x3e48
bal 0x00053e48
_nop
lw gp,0x20(sp)
or s0,v0,zero
lw v0,0x28(sp)
blez v0,0x00056468
_nop
lw v0,0x44(sp)
sll a0,v0,0x2
addu a0,s2,a0
or v1,zero,zero
lw a1,0x0(a0)
lw v0,0x0(s0)
subu v0,v0,v1
sll v0,v0,0x2
addu v0,s0,v0
sw a1,0x0(v0)
addiu v1,v1,0x1
lw v0,0x28(sp)
slt v0,v1,v0
bne v0,zero,0x0005643c
_addiu a0,a0,0x4
lw v0,0x0(s0)
sltiu v1,v0,0x2
bne v1,zero,0x000564a4
_sll v1,v0,0x2
addu v1,s0,v1
lw a0,0x0(v1)
bne a0,zero,0x000564a4
_addiu v0,v0,-0x1
li a1,0x1
beq v0,a1,0x000564a4
_sw v0,0x0(s0)
lw a0,-0x4(v1)
addiu v0,v0,-0x1
beq a0,zero,0x0005648c
_addiu v1,v1,-0x4
lw s3,0x48(sp)
or a1,s3,zero
or a0,s2,zero
lw t9,-0x7f68(gp)
jalr t9
_nop
lw gp,0x20(sp)
or a0,s2,zero
lw t9,-0x7fa8(gp)
jalr t9
_nop
lw gp,0x20(sp)
lw v0,0x4c(sp)
sll a1,v0,0x2
or a0,s5,zero
lw t9,-0x7f68(gp)
jalr t9
_nop
lw gp,0x20(sp)
or a0,s5,zero
lw t9,-0x7fa8(gp)
jalr t9
_nop
lw gp,0x20(sp)
or a1,s3,zero
or a0,s1,zero
lw t9,-0x7f68(gp)
jalr t9
_nop
lw gp,0x20(sp)
or a0,s1,zero
lw t9,-0x7fa8(gp)
jalr t9
_nop
lw gp,0x20(sp)
lw v0,0x44(sp)
sll s1,v0,0x2
or a1,s1,zero
lw s2,0x2c(sp)
or a0,s2,zero
lw t9,-0x7f68(gp)
jalr t9
_nop
lw gp,0x20(sp)
or a0,s2,zero
lw t9,-0x7fa8(gp)
jalr t9
_nop
lw gp,0x20(sp)
or a1,s1,zero
lw s1,0x3c(sp)
or a0,s1,zero
lw t9,-0x7f68(gp)
jalr t9
_nop
lw gp,0x20(sp)
or a0,s1,zero
lw t9,-0x7fa8(gp)
jalr t9
_nop
lw gp,0x20(sp)
lw a0,0x40(sp)
lw t9,-0x7bb0(gp)
bal 0x00053fcc
_nop
lw gp,0x20(sp)
or v0,s0,zero
lw ra,0x74(sp)
lw s8,0x70(sp)
lw s7,0x6c(sp)
lw s6,0x68(sp)
lw s5,0x64(sp)
lw s4,0x60(sp)
lw s3,0x5c(sp)
lw s2,0x58(sp)
lw s1,0x54(sp)
lw s0,0x50(sp)
jr ra
_addiu sp,sp,0x78
lw v0,0x2c(sp)
lw s8,0x0(v0)
or a0,s8,zero
lw t9,-0x7c50(gp)
addiu t9,t9,0x2c20
bal 0x00052c20
_nop
lw gp,0x20(sp)
beq v0,zero,0x000563e8
_or s6,v0,zero
lw v0,0x44(sp)
slti v0,v0,0x2
bne v0,zero,0x00056258
_sllv a0,s8,s6
subu v1,zero,s6
lw v0,0x2c(sp)
lw v0,0x4(v0)
srlv v0,v0,v1
or a0,v0,a0
lw t9,-0x7c50(gp)
addiu t9,t9,0x2c64
bal 0x00052c64
_nop
lw gp,0x20(sp)
slt s7,s4,s7
bne s7,zero,0x000563c4
_or s8,v0,zero
lw v0,0x80(sp)
lw a0,0x0(v0)
lw t9,-0x7c50(gp)
addiu t9,t9,0x3e48
bal 0x00053e48
_nop
lw gp,0x20(sp)
b 0x0005642c
_or s0,v0,zero
(translation_unit "uint * modpow_simple(undefined4 param_1,int *param_2,int *param_3)\n\n{\n  uint *puVar1;\n  int *piVar2;\n  int *piVar3;\n  undefined4 *puVar4;\n  int iVar5;\n  undefined4 *puVar6;\n  undefined4 *puVar7;\n  undefined4 *puVar8;\n  undefined4 uVar9;\n  uint uVar10;\n  undefined4 uVar11;\n  code *pcVar12;\n  code *pcVar13;\n  uint *puVar14;\n  int iVar15;\n  int *piVar16;\n  uint *puVar17;\n  uint uVar18;\n  int iVar19;\n  uint uVar20;\n  undefined4 *puVar21;\n  int iVar22;\n  int iVar23;\n  int iVar24;\n  \n  if (param_3[*param_3] == 0) {\n    puVar14 = (uint *)(*(code *)PTR___assert_fail_000b8b18)\n                                (PTR_DAT_000b8348 + -0x7fc,PTR_DAT_000b8348 + -0x840,0x3b9,\n                                 PTR_DAT_000b8348 + -0x62c);\n    return puVar14;\n  }\n  piVar2 = (int *)bigmod(param_1,param_3);\n  iVar19 = *param_3;\n  piVar3 = (int *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4);\n  if (0 < iVar19) {\n    iVar15 = 0;\n    piVar16 = piVar3;\n    do {\n      *piVar16 = param_3[*param_3 - iVar15];\n      iVar15 = iVar15 + 1;\n      piVar16 = piVar16 + 1;\n    } while (iVar19 != iVar15);\n  }\n  puVar4 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4);\n  iVar15 = iVar19 - *piVar2;\n  if (0 < iVar15) {\n    puVar7 = puVar4;\n    do {\n      *puVar7 = 0;\n      puVar7 = puVar7 + 1;\n    } while (puVar7 != puVar4 + iVar15);\n  }\n  iVar5 = *piVar2;\n  if (0 < iVar5) {\n    piVar16 = puVar4 + iVar15;\n    iVar15 = 0;\n    do {\n      *piVar16 = piVar2[iVar5 - iVar15];\n      iVar15 = iVar15 + 1;\n      iVar5 = *piVar2;\n      piVar16 = piVar16 + 1;\n    } while (iVar15 < iVar5);\n  }\n  iVar15 = iVar19 << 1;\n  puVar6 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4);\n  puVar7 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4);\n  if (0 < iVar15) {\n    puVar8 = puVar6;\n    do {\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    } while (puVar8 != puVar6 + iVar19 * 2);\n  }\n  puVar6[iVar19 * 2 + -1] = 1;\n  iVar5 = FUN_00052bdc();\n  uVar9 = (*(code *)PTR_safemalloc_000b82f8)(iVar5,4);\n  iVar23 = *param_2;\n  iVar22 = 0;\nLAB_000561f0:\n  uVar20 = 0x1f;\n  while (iVar22 < iVar23) {\n    if ((1 << (uVar20 & 0x1f) & param_2[iVar23 - iVar22]) != 0) {\n      iVar24 = *piVar3;\n      uVar10 = FUN_00052c20(iVar24);\n      if (uVar10 != 0) goto LAB_00056608;\n      uVar11 = FUN_00052c64(iVar24);\n      goto LAB_000563c4;\n    }\n    uVar20 = uVar20 - 1;\n    if (uVar20 == 0xffffffff) goto code_r0x00056228;\n  }\n  iVar24 = *piVar3;\n  uVar10 = FUN_00052c20(iVar24);\n  if (uVar10 == 0) {\n    FUN_00052c64(iVar24);\n    goto LAB_00056404;\n  }\nLAB_00056608:\n  uVar18 = iVar24 << (uVar10 & 0x1f);\n  if (iVar19 < 2) {\n    uVar11 = FUN_00052c64(uVar18);\n    if (iVar23 <= iVar22) goto LAB_00056404;\n  }\n  else {\n    uVar11 = FUN_00052c64((uint)piVar3[1] >> (-uVar10 & 0x1f) | uVar18);\n    if (iVar23 <= iVar22) {\n      puVar14 = (uint *)FUN_00053e48(*param_3);\n      goto LAB_0005642c;\n    }\n  }\nLAB_000563c4:\n  pcVar12 = (code *)(PTR_LAB_000b8640 + 0x2da0);\n  pcVar13 = (code *)(PTR_LAB_000b8640 + 0x37b8);\n  do {\n    puVar8 = puVar7;\n    puVar21 = puVar6;\n    if (-1 < (int)uVar20) {\n      do {\n        (*pcVar12)(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9);\n        (*pcVar13)(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n        puVar7 = puVar21;\n        puVar6 = puVar8;\n        if ((1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0) {\n          (*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);\n          (*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n          puVar7 = puVar8;\n          puVar6 = puVar21;\n        }\n        uVar20 = uVar20 - 1;\n        puVar8 = puVar7;\n        puVar21 = puVar6;\n      } while (uVar20 != 0xffffffff);\n    }\n    iVar22 = iVar22 + 1;\n    uVar20 = 0x1f;\n  } while (iVar22 < *param_2);\nLAB_00056404:\n  puVar14 = (uint *)FUN_00053e48(*param_3);\n  if (0 < iVar19) {\nLAB_0005642c:\n    puVar17 = puVar6 + iVar19;\n    iVar15 = 0;\n    do {\n      puVar14[*puVar14 - iVar15] = *puVar17;\n      iVar15 = iVar15 + 1;\n      puVar17 = puVar17 + 1;\n    } while (iVar15 < iVar19);\n  }\n  uVar20 = *puVar14;\n  if (1 < uVar20) {\n    puVar17 = puVar14 + uVar20;\n    uVar10 = *puVar17;\n    while (uVar10 == 0) {\n      uVar20 = uVar20 - 1;\n      *puVar14 = uVar20;\n      if (uVar20 == 1) break;\n      puVar1 = puVar17 + -1;\n      puVar17 = puVar17 + -1;\n      uVar10 = *puVar1;\n    }\n  }\n  (*(code *)PTR_smemclr_000b8328)(puVar6,iVar19 * 8);\n  (*(code *)PTR_safefree_000b82e8)(puVar6);\n  (*(code *)PTR_smemclr_000b8328)(uVar9,iVar5 << 2);\n  (*(code *)PTR_safefree_000b82e8)(uVar9);\n  (*(code *)PTR_smemclr_000b8328)(puVar7,iVar19 * 8);\n  (*(code *)PTR_safefree_000b82e8)(puVar7);\n  (*(code *)PTR_smemclr_000b8328)(piVar3,iVar19 << 2);\n  (*(code *)PTR_safefree_000b82e8)(piVar3);\n  (*(code *)PTR_smemclr_000b8328)(puVar4,iVar19 << 2);\n  (*(code *)PTR_safefree_000b82e8)(puVar4);\n  freebn(piVar2);\n  return puVar14;\ncode_r0x00056228:\n  iVar22 = iVar22 + 1;\n  goto LAB_000561f0;\n}\n\n" (function_definition "uint * modpow_simple(undefined4 param_1,int *param_2,int *param_3)\n\n{\n  uint *puVar1;\n  int *piVar2;\n  int *piVar3;\n  undefined4 *puVar4;\n  int iVar5;\n  undefined4 *puVar6;\n  undefined4 *puVar7;\n  undefined4 *puVar8;\n  undefined4 uVar9;\n  uint uVar10;\n  undefined4 uVar11;\n  code *pcVar12;\n  code *pcVar13;\n  uint *puVar14;\n  int iVar15;\n  int *piVar16;\n  uint *puVar17;\n  uint uVar18;\n  int iVar19;\n  uint uVar20;\n  undefined4 *puVar21;\n  int iVar22;\n  int iVar23;\n  int iVar24;\n  \n  if (param_3[*param_3] == 0) {\n    puVar14 = (uint *)(*(code *)PTR___assert_fail_000b8b18)\n                                (PTR_DAT_000b8348 + -0x7fc,PTR_DAT_000b8348 + -0x840,0x3b9,\n                                 PTR_DAT_000b8348 + -0x62c);\n    return puVar14;\n  }\n  piVar2 = (int *)bigmod(param_1,param_3);\n  iVar19 = *param_3;\n  piVar3 = (int *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4);\n  if (0 < iVar19) {\n    iVar15 = 0;\n    piVar16 = piVar3;\n    do {\n      *piVar16 = param_3[*param_3 - iVar15];\n      iVar15 = iVar15 + 1;\n      piVar16 = piVar16 + 1;\n    } while (iVar19 != iVar15);\n  }\n  puVar4 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4);\n  iVar15 = iVar19 - *piVar2;\n  if (0 < iVar15) {\n    puVar7 = puVar4;\n    do {\n      *puVar7 = 0;\n      puVar7 = puVar7 + 1;\n    } while (puVar7 != puVar4 + iVar15);\n  }\n  iVar5 = *piVar2;\n  if (0 < iVar5) {\n    piVar16 = puVar4 + iVar15;\n    iVar15 = 0;\n    do {\n      *piVar16 = piVar2[iVar5 - iVar15];\n      iVar15 = iVar15 + 1;\n      iVar5 = *piVar2;\n      piVar16 = piVar16 + 1;\n    } while (iVar15 < iVar5);\n  }\n  iVar15 = iVar19 << 1;\n  puVar6 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4);\n  puVar7 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4);\n  if (0 < iVar15) {\n    puVar8 = puVar6;\n    do {\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    } while (puVar8 != puVar6 + iVar19 * 2);\n  }\n  puVar6[iVar19 * 2 + -1] = 1;\n  iVar5 = FUN_00052bdc();\n  uVar9 = (*(code *)PTR_safemalloc_000b82f8)(iVar5,4);\n  iVar23 = *param_2;\n  iVar22 = 0;\nLAB_000561f0:\n  uVar20 = 0x1f;\n  while (iVar22 < iVar23) {\n    if ((1 << (uVar20 & 0x1f) & param_2[iVar23 - iVar22]) != 0) {\n      iVar24 = *piVar3;\n      uVar10 = FUN_00052c20(iVar24);\n      if (uVar10 != 0) goto LAB_00056608;\n      uVar11 = FUN_00052c64(iVar24);\n      goto LAB_000563c4;\n    }\n    uVar20 = uVar20 - 1;\n    if (uVar20 == 0xffffffff) goto code_r0x00056228;\n  }\n  iVar24 = *piVar3;\n  uVar10 = FUN_00052c20(iVar24);\n  if (uVar10 == 0) {\n    FUN_00052c64(iVar24);\n    goto LAB_00056404;\n  }\nLAB_00056608:\n  uVar18 = iVar24 << (uVar10 & 0x1f);\n  if (iVar19 < 2) {\n    uVar11 = FUN_00052c64(uVar18);\n    if (iVar23 <= iVar22) goto LAB_00056404;\n  }\n  else {\n    uVar11 = FUN_00052c64((uint)piVar3[1] >> (-uVar10 & 0x1f) | uVar18);\n    if (iVar23 <= iVar22) {\n      puVar14 = (uint *)FUN_00053e48(*param_3);\n      goto LAB_0005642c;\n    }\n  }\nLAB_000563c4:\n  pcVar12 = (code *)(PTR_LAB_000b8640 + 0x2da0);\n  pcVar13 = (code *)(PTR_LAB_000b8640 + 0x37b8);\n  do {\n    puVar8 = puVar7;\n    puVar21 = puVar6;\n    if (-1 < (int)uVar20) {\n      do {\n        (*pcVar12)(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9);\n        (*pcVar13)(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n        puVar7 = puVar21;\n        puVar6 = puVar8;\n        if ((1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0) {\n          (*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);\n          (*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n          puVar7 = puVar8;\n          puVar6 = puVar21;\n        }\n        uVar20 = uVar20 - 1;\n        puVar8 = puVar7;\n        puVar21 = puVar6;\n      } while (uVar20 != 0xffffffff);\n    }\n    iVar22 = iVar22 + 1;\n    uVar20 = 0x1f;\n  } while (iVar22 < *param_2);\nLAB_00056404:\n  puVar14 = (uint *)FUN_00053e48(*param_3);\n  if (0 < iVar19) {\nLAB_0005642c:\n    puVar17 = puVar6 + iVar19;\n    iVar15 = 0;\n    do {\n      puVar14[*puVar14 - iVar15] = *puVar17;\n      iVar15 = iVar15 + 1;\n      puVar17 = puVar17 + 1;\n    } while (iVar15 < iVar19);\n  }\n  uVar20 = *puVar14;\n  if (1 < uVar20) {\n    puVar17 = puVar14 + uVar20;\n    uVar10 = *puVar17;\n    while (uVar10 == 0) {\n      uVar20 = uVar20 - 1;\n      *puVar14 = uVar20;\n      if (uVar20 == 1) break;\n      puVar1 = puVar17 + -1;\n      puVar17 = puVar17 + -1;\n      uVar10 = *puVar1;\n    }\n  }\n  (*(code *)PTR_smemclr_000b8328)(puVar6,iVar19 * 8);\n  (*(code *)PTR_safefree_000b82e8)(puVar6);\n  (*(code *)PTR_smemclr_000b8328)(uVar9,iVar5 << 2);\n  (*(code *)PTR_safefree_000b82e8)(uVar9);\n  (*(code *)PTR_smemclr_000b8328)(puVar7,iVar19 * 8);\n  (*(code *)PTR_safefree_000b82e8)(puVar7);\n  (*(code *)PTR_smemclr_000b8328)(piVar3,iVar19 << 2);\n  (*(code *)PTR_safefree_000b82e8)(piVar3);\n  (*(code *)PTR_smemclr_000b8328)(puVar4,iVar19 << 2);\n  (*(code *)PTR_safefree_000b82e8)(puVar4);\n  freebn(piVar2);\n  return puVar14;\ncode_r0x00056228:\n  iVar22 = iVar22 + 1;\n  goto LAB_000561f0;\n}" type_identifier (pointer_declarator "* modpow_simple(undefined4 param_1,int *param_2,int *param_3)" * (function_declarator "modpow_simple(undefined4 param_1,int *param_2,int *param_3)" identifier (parameter_list "(undefined4 param_1,int *param_2,int *param_3)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) )))) (compound_statement "{\n  uint *puVar1;\n  int *piVar2;\n  int *piVar3;\n  undefined4 *puVar4;\n  int iVar5;\n  undefined4 *puVar6;\n  undefined4 *puVar7;\n  undefined4 *puVar8;\n  undefined4 uVar9;\n  uint uVar10;\n  undefined4 uVar11;\n  code *pcVar12;\n  code *pcVar13;\n  uint *puVar14;\n  int iVar15;\n  int *piVar16;\n  uint *puVar17;\n  uint uVar18;\n  int iVar19;\n  uint uVar20;\n  undefined4 *puVar21;\n  int iVar22;\n  int iVar23;\n  int iVar24;\n  \n  if (param_3[*param_3] == 0) {\n    puVar14 = (uint *)(*(code *)PTR___assert_fail_000b8b18)\n                                (PTR_DAT_000b8348 + -0x7fc,PTR_DAT_000b8348 + -0x840,0x3b9,\n                                 PTR_DAT_000b8348 + -0x62c);\n    return puVar14;\n  }\n  piVar2 = (int *)bigmod(param_1,param_3);\n  iVar19 = *param_3;\n  piVar3 = (int *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4);\n  if (0 < iVar19) {\n    iVar15 = 0;\n    piVar16 = piVar3;\n    do {\n      *piVar16 = param_3[*param_3 - iVar15];\n      iVar15 = iVar15 + 1;\n      piVar16 = piVar16 + 1;\n    } while (iVar19 != iVar15);\n  }\n  puVar4 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4);\n  iVar15 = iVar19 - *piVar2;\n  if (0 < iVar15) {\n    puVar7 = puVar4;\n    do {\n      *puVar7 = 0;\n      puVar7 = puVar7 + 1;\n    } while (puVar7 != puVar4 + iVar15);\n  }\n  iVar5 = *piVar2;\n  if (0 < iVar5) {\n    piVar16 = puVar4 + iVar15;\n    iVar15 = 0;\n    do {\n      *piVar16 = piVar2[iVar5 - iVar15];\n      iVar15 = iVar15 + 1;\n      iVar5 = *piVar2;\n      piVar16 = piVar16 + 1;\n    } while (iVar15 < iVar5);\n  }\n  iVar15 = iVar19 << 1;\n  puVar6 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4);\n  puVar7 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4);\n  if (0 < iVar15) {\n    puVar8 = puVar6;\n    do {\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    } while (puVar8 != puVar6 + iVar19 * 2);\n  }\n  puVar6[iVar19 * 2 + -1] = 1;\n  iVar5 = FUN_00052bdc();\n  uVar9 = (*(code *)PTR_safemalloc_000b82f8)(iVar5,4);\n  iVar23 = *param_2;\n  iVar22 = 0;\nLAB_000561f0:\n  uVar20 = 0x1f;\n  while (iVar22 < iVar23) {\n    if ((1 << (uVar20 & 0x1f) & param_2[iVar23 - iVar22]) != 0) {\n      iVar24 = *piVar3;\n      uVar10 = FUN_00052c20(iVar24);\n      if (uVar10 != 0) goto LAB_00056608;\n      uVar11 = FUN_00052c64(iVar24);\n      goto LAB_000563c4;\n    }\n    uVar20 = uVar20 - 1;\n    if (uVar20 == 0xffffffff) goto code_r0x00056228;\n  }\n  iVar24 = *piVar3;\n  uVar10 = FUN_00052c20(iVar24);\n  if (uVar10 == 0) {\n    FUN_00052c64(iVar24);\n    goto LAB_00056404;\n  }\nLAB_00056608:\n  uVar18 = iVar24 << (uVar10 & 0x1f);\n  if (iVar19 < 2) {\n    uVar11 = FUN_00052c64(uVar18);\n    if (iVar23 <= iVar22) goto LAB_00056404;\n  }\n  else {\n    uVar11 = FUN_00052c64((uint)piVar3[1] >> (-uVar10 & 0x1f) | uVar18);\n    if (iVar23 <= iVar22) {\n      puVar14 = (uint *)FUN_00053e48(*param_3);\n      goto LAB_0005642c;\n    }\n  }\nLAB_000563c4:\n  pcVar12 = (code *)(PTR_LAB_000b8640 + 0x2da0);\n  pcVar13 = (code *)(PTR_LAB_000b8640 + 0x37b8);\n  do {\n    puVar8 = puVar7;\n    puVar21 = puVar6;\n    if (-1 < (int)uVar20) {\n      do {\n        (*pcVar12)(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9);\n        (*pcVar13)(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n        puVar7 = puVar21;\n        puVar6 = puVar8;\n        if ((1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0) {\n          (*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);\n          (*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n          puVar7 = puVar8;\n          puVar6 = puVar21;\n        }\n        uVar20 = uVar20 - 1;\n        puVar8 = puVar7;\n        puVar21 = puVar6;\n      } while (uVar20 != 0xffffffff);\n    }\n    iVar22 = iVar22 + 1;\n    uVar20 = 0x1f;\n  } while (iVar22 < *param_2);\nLAB_00056404:\n  puVar14 = (uint *)FUN_00053e48(*param_3);\n  if (0 < iVar19) {\nLAB_0005642c:\n    puVar17 = puVar6 + iVar19;\n    iVar15 = 0;\n    do {\n      puVar14[*puVar14 - iVar15] = *puVar17;\n      iVar15 = iVar15 + 1;\n      puVar17 = puVar17 + 1;\n    } while (iVar15 < iVar19);\n  }\n  uVar20 = *puVar14;\n  if (1 < uVar20) {\n    puVar17 = puVar14 + uVar20;\n    uVar10 = *puVar17;\n    while (uVar10 == 0) {\n      uVar20 = uVar20 - 1;\n      *puVar14 = uVar20;\n      if (uVar20 == 1) break;\n      puVar1 = puVar17 + -1;\n      puVar17 = puVar17 + -1;\n      uVar10 = *puVar1;\n    }\n  }\n  (*(code *)PTR_smemclr_000b8328)(puVar6,iVar19 * 8);\n  (*(code *)PTR_safefree_000b82e8)(puVar6);\n  (*(code *)PTR_smemclr_000b8328)(uVar9,iVar5 << 2);\n  (*(code *)PTR_safefree_000b82e8)(uVar9);\n  (*(code *)PTR_smemclr_000b8328)(puVar7,iVar19 * 8);\n  (*(code *)PTR_safefree_000b82e8)(puVar7);\n  (*(code *)PTR_smemclr_000b8328)(piVar3,iVar19 << 2);\n  (*(code *)PTR_safefree_000b82e8)(piVar3);\n  (*(code *)PTR_smemclr_000b8328)(puVar4,iVar19 << 2);\n  (*(code *)PTR_safefree_000b82e8)(puVar4);\n  freebn(piVar2);\n  return puVar14;\ncode_r0x00056228:\n  iVar22 = iVar22 + 1;\n  goto LAB_000561f0;\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int *piVar2;" primitive_type (pointer_declarator "*piVar2" * identifier) ;) (declaration "int *piVar3;" primitive_type (pointer_declarator "*piVar3" * identifier) ;) (declaration "undefined4 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "undefined4 *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "undefined4 *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "undefined4 *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "undefined4 uVar9;" type_identifier identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "undefined4 uVar11;" type_identifier identifier ;) (declaration "code *pcVar12;" type_identifier (pointer_declarator "*pcVar12" * identifier) ;) (declaration "code *pcVar13;" type_identifier (pointer_declarator "*pcVar13" * identifier) ;) (declaration "uint *puVar14;" type_identifier (pointer_declarator "*puVar14" * identifier) ;) (declaration "int iVar15;" primitive_type identifier ;) (declaration "int *piVar16;" primitive_type (pointer_declarator "*piVar16" * identifier) ;) (declaration "uint *puVar17;" type_identifier (pointer_declarator "*puVar17" * identifier) ;) (declaration "uint uVar18;" type_identifier identifier ;) (declaration "int iVar19;" primitive_type identifier ;) (declaration "uint uVar20;" type_identifier identifier ;) (declaration "undefined4 *puVar21;" type_identifier (pointer_declarator "*puVar21" * identifier) ;) (declaration "int iVar22;" primitive_type identifier ;) (declaration "int iVar23;" primitive_type identifier ;) (declaration "int iVar24;" primitive_type identifier ;) (if_statement "if (param_3[*param_3] == 0) {\n    puVar14 = (uint *)(*(code *)PTR___assert_fail_000b8b18)\n                                (PTR_DAT_000b8348 + -0x7fc,PTR_DAT_000b8348 + -0x840,0x3b9,\n                                 PTR_DAT_000b8348 + -0x62c);\n    return puVar14;\n  }" if (parenthesized_expression "(param_3[*param_3] == 0)" ( (binary_expression "param_3[*param_3] == 0" (subscript_expression "param_3[*param_3]" identifier [ (pointer_expression "*param_3" * identifier) ]) == number_literal) )) (compound_statement "{\n    puVar14 = (uint *)(*(code *)PTR___assert_fail_000b8b18)\n                                (PTR_DAT_000b8348 + -0x7fc,PTR_DAT_000b8348 + -0x840,0x3b9,\n                                 PTR_DAT_000b8348 + -0x62c);\n    return puVar14;\n  }" { (expression_statement "puVar14 = (uint *)(*(code *)PTR___assert_fail_000b8b18)\n                                (PTR_DAT_000b8348 + -0x7fc,PTR_DAT_000b8348 + -0x840,0x3b9,\n                                 PTR_DAT_000b8348 + -0x62c);" (assignment_expression "puVar14 = (uint *)(*(code *)PTR___assert_fail_000b8b18)\n                                (PTR_DAT_000b8348 + -0x7fc,PTR_DAT_000b8348 + -0x840,0x3b9,\n                                 PTR_DAT_000b8348 + -0x62c)" identifier = (cast_expression "(uint *)(*(code *)PTR___assert_fail_000b8b18)\n                                (PTR_DAT_000b8348 + -0x7fc,PTR_DAT_000b8348 + -0x840,0x3b9,\n                                 PTR_DAT_000b8348 + -0x62c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR___assert_fail_000b8b18)\n                                (PTR_DAT_000b8348 + -0x7fc,PTR_DAT_000b8348 + -0x840,0x3b9,\n                                 PTR_DAT_000b8348 + -0x62c)" (parenthesized_expression "(*(code *)PTR___assert_fail_000b8b18)" ( (pointer_expression "*(code *)PTR___assert_fail_000b8b18" * (cast_expression "(code *)PTR___assert_fail_000b8b18" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(PTR_DAT_000b8348 + -0x7fc,PTR_DAT_000b8348 + -0x840,0x3b9,\n                                 PTR_DAT_000b8348 + -0x62c)" ( (binary_expression "PTR_DAT_000b8348 + -0x7fc" identifier + number_literal) , (binary_expression "PTR_DAT_000b8348 + -0x840" identifier + number_literal) , number_literal , (binary_expression "PTR_DAT_000b8348 + -0x62c" identifier + number_literal) ))))) ;) (return_statement "return puVar14;" return identifier ;) })) (expression_statement "piVar2 = (int *)bigmod(param_1,param_3);" (assignment_expression "piVar2 = (int *)bigmod(param_1,param_3)" identifier = (cast_expression "(int *)bigmod(param_1,param_3)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "bigmod(param_1,param_3)" identifier (argument_list "(param_1,param_3)" ( identifier , identifier ))))) ;) (expression_statement "iVar19 = *param_3;" (assignment_expression "iVar19 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (expression_statement "piVar3 = (int *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4);" (assignment_expression "piVar3 = (int *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4)" identifier = (cast_expression "(int *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000b82f8)(iVar19,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b82f8)" ( (pointer_expression "*(code *)PTR_safemalloc_000b82f8" * (cast_expression "(code *)PTR_safemalloc_000b82f8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar19,4)" ( identifier , number_literal ))))) ;) (if_statement "if (0 < iVar19) {\n    iVar15 = 0;\n    piVar16 = piVar3;\n    do {\n      *piVar16 = param_3[*param_3 - iVar15];\n      iVar15 = iVar15 + 1;\n      piVar16 = piVar16 + 1;\n    } while (iVar19 != iVar15);\n  }" if (parenthesized_expression "(0 < iVar19)" ( (binary_expression "0 < iVar19" number_literal < identifier) )) (compound_statement "{\n    iVar15 = 0;\n    piVar16 = piVar3;\n    do {\n      *piVar16 = param_3[*param_3 - iVar15];\n      iVar15 = iVar15 + 1;\n      piVar16 = piVar16 + 1;\n    } while (iVar19 != iVar15);\n  }" { (expression_statement "iVar15 = 0;" (assignment_expression "iVar15 = 0" identifier = number_literal) ;) (expression_statement "piVar16 = piVar3;" (assignment_expression "piVar16 = piVar3" identifier = identifier) ;) (do_statement "do {\n      *piVar16 = param_3[*param_3 - iVar15];\n      iVar15 = iVar15 + 1;\n      piVar16 = piVar16 + 1;\n    } while (iVar19 != iVar15);" do (compound_statement "{\n      *piVar16 = param_3[*param_3 - iVar15];\n      iVar15 = iVar15 + 1;\n      piVar16 = piVar16 + 1;\n    }" { (expression_statement "*piVar16 = param_3[*param_3 - iVar15];" (assignment_expression "*piVar16 = param_3[*param_3 - iVar15]" (pointer_expression "*piVar16" * identifier) = (subscript_expression "param_3[*param_3 - iVar15]" identifier [ (binary_expression "*param_3 - iVar15" (pointer_expression "*param_3" * identifier) - identifier) ])) ;) (expression_statement "iVar15 = iVar15 + 1;" (assignment_expression "iVar15 = iVar15 + 1" identifier = (binary_expression "iVar15 + 1" identifier + number_literal)) ;) (expression_statement "piVar16 = piVar16 + 1;" (assignment_expression "piVar16 = piVar16 + 1" identifier = (binary_expression "piVar16 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar19 != iVar15)" ( (binary_expression "iVar19 != iVar15" identifier != identifier) )) ;) })) (expression_statement "puVar4 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4);" (assignment_expression "puVar4 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4)" identifier = (cast_expression "(undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000b82f8)(iVar19,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b82f8)" ( (pointer_expression "*(code *)PTR_safemalloc_000b82f8" * (cast_expression "(code *)PTR_safemalloc_000b82f8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar19,4)" ( identifier , number_literal ))))) ;) (expression_statement "iVar15 = iVar19 - *piVar2;" (assignment_expression "iVar15 = iVar19 - *piVar2" identifier = (binary_expression "iVar19 - *piVar2" identifier - (pointer_expression "*piVar2" * identifier))) ;) (if_statement "if (0 < iVar15) {\n    puVar7 = puVar4;\n    do {\n      *puVar7 = 0;\n      puVar7 = puVar7 + 1;\n    } while (puVar7 != puVar4 + iVar15);\n  }" if (parenthesized_expression "(0 < iVar15)" ( (binary_expression "0 < iVar15" number_literal < identifier) )) (compound_statement "{\n    puVar7 = puVar4;\n    do {\n      *puVar7 = 0;\n      puVar7 = puVar7 + 1;\n    } while (puVar7 != puVar4 + iVar15);\n  }" { (expression_statement "puVar7 = puVar4;" (assignment_expression "puVar7 = puVar4" identifier = identifier) ;) (do_statement "do {\n      *puVar7 = 0;\n      puVar7 = puVar7 + 1;\n    } while (puVar7 != puVar4 + iVar15);" do (compound_statement "{\n      *puVar7 = 0;\n      puVar7 = puVar7 + 1;\n    }" { (expression_statement "*puVar7 = 0;" (assignment_expression "*puVar7 = 0" (pointer_expression "*puVar7" * identifier) = number_literal) ;) (expression_statement "puVar7 = puVar7 + 1;" (assignment_expression "puVar7 = puVar7 + 1" identifier = (binary_expression "puVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar7 != puVar4 + iVar15)" ( (binary_expression "puVar7 != puVar4 + iVar15" identifier != (binary_expression "puVar4 + iVar15" identifier + identifier)) )) ;) })) (expression_statement "iVar5 = *piVar2;" (assignment_expression "iVar5 = *piVar2" identifier = (pointer_expression "*piVar2" * identifier)) ;) (if_statement "if (0 < iVar5) {\n    piVar16 = puVar4 + iVar15;\n    iVar15 = 0;\n    do {\n      *piVar16 = piVar2[iVar5 - iVar15];\n      iVar15 = iVar15 + 1;\n      iVar5 = *piVar2;\n      piVar16 = piVar16 + 1;\n    } while (iVar15 < iVar5);\n  }" if (parenthesized_expression "(0 < iVar5)" ( (binary_expression "0 < iVar5" number_literal < identifier) )) (compound_statement "{\n    piVar16 = puVar4 + iVar15;\n    iVar15 = 0;\n    do {\n      *piVar16 = piVar2[iVar5 - iVar15];\n      iVar15 = iVar15 + 1;\n      iVar5 = *piVar2;\n      piVar16 = piVar16 + 1;\n    } while (iVar15 < iVar5);\n  }" { (expression_statement "piVar16 = puVar4 + iVar15;" (assignment_expression "piVar16 = puVar4 + iVar15" identifier = (binary_expression "puVar4 + iVar15" identifier + identifier)) ;) (expression_statement "iVar15 = 0;" (assignment_expression "iVar15 = 0" identifier = number_literal) ;) (do_statement "do {\n      *piVar16 = piVar2[iVar5 - iVar15];\n      iVar15 = iVar15 + 1;\n      iVar5 = *piVar2;\n      piVar16 = piVar16 + 1;\n    } while (iVar15 < iVar5);" do (compound_statement "{\n      *piVar16 = piVar2[iVar5 - iVar15];\n      iVar15 = iVar15 + 1;\n      iVar5 = *piVar2;\n      piVar16 = piVar16 + 1;\n    }" { (expression_statement "*piVar16 = piVar2[iVar5 - iVar15];" (assignment_expression "*piVar16 = piVar2[iVar5 - iVar15]" (pointer_expression "*piVar16" * identifier) = (subscript_expression "piVar2[iVar5 - iVar15]" identifier [ (binary_expression "iVar5 - iVar15" identifier - identifier) ])) ;) (expression_statement "iVar15 = iVar15 + 1;" (assignment_expression "iVar15 = iVar15 + 1" identifier = (binary_expression "iVar15 + 1" identifier + number_literal)) ;) (expression_statement "iVar5 = *piVar2;" (assignment_expression "iVar5 = *piVar2" identifier = (pointer_expression "*piVar2" * identifier)) ;) (expression_statement "piVar16 = piVar16 + 1;" (assignment_expression "piVar16 = piVar16 + 1" identifier = (binary_expression "piVar16 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar15 < iVar5)" ( (binary_expression "iVar15 < iVar5" identifier < identifier) )) ;) })) (expression_statement "iVar15 = iVar19 << 1;" (assignment_expression "iVar15 = iVar19 << 1" identifier = (binary_expression "iVar19 << 1" identifier << number_literal)) ;) (expression_statement "puVar6 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4);" (assignment_expression "puVar6 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4)" identifier = (cast_expression "(undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000b82f8)(iVar15,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b82f8)" ( (pointer_expression "*(code *)PTR_safemalloc_000b82f8" * (cast_expression "(code *)PTR_safemalloc_000b82f8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar15,4)" ( identifier , number_literal ))))) ;) (expression_statement "puVar7 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4);" (assignment_expression "puVar7 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4)" identifier = (cast_expression "(undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000b82f8)(iVar15,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b82f8)" ( (pointer_expression "*(code *)PTR_safemalloc_000b82f8" * (cast_expression "(code *)PTR_safemalloc_000b82f8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar15,4)" ( identifier , number_literal ))))) ;) (if_statement "if (0 < iVar15) {\n    puVar8 = puVar6;\n    do {\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    } while (puVar8 != puVar6 + iVar19 * 2);\n  }" if (parenthesized_expression "(0 < iVar15)" ( (binary_expression "0 < iVar15" number_literal < identifier) )) (compound_statement "{\n    puVar8 = puVar6;\n    do {\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    } while (puVar8 != puVar6 + iVar19 * 2);\n  }" { (expression_statement "puVar8 = puVar6;" (assignment_expression "puVar8 = puVar6" identifier = identifier) ;) (do_statement "do {\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    } while (puVar8 != puVar6 + iVar19 * 2);" do (compound_statement "{\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    }" { (expression_statement "*puVar8 = 0;" (assignment_expression "*puVar8 = 0" (pointer_expression "*puVar8" * identifier) = number_literal) ;) (expression_statement "puVar8 = puVar8 + 1;" (assignment_expression "puVar8 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar8 != puVar6 + iVar19 * 2)" ( (binary_expression "puVar8 != puVar6 + iVar19 * 2" identifier != (binary_expression "puVar6 + iVar19 * 2" identifier + (binary_expression "iVar19 * 2" identifier * number_literal))) )) ;) })) (expression_statement "puVar6[iVar19 * 2 + -1] = 1;" (assignment_expression "puVar6[iVar19 * 2 + -1] = 1" (subscript_expression "puVar6[iVar19 * 2 + -1]" identifier [ (binary_expression "iVar19 * 2 + -1" (binary_expression "iVar19 * 2" identifier * number_literal) + number_literal) ]) = number_literal) ;) (expression_statement "iVar5 = FUN_00052bdc();" (assignment_expression "iVar5 = FUN_00052bdc()" identifier = (call_expression "FUN_00052bdc()" identifier (argument_list "()" ( )))) ;) (expression_statement "uVar9 = (*(code *)PTR_safemalloc_000b82f8)(iVar5,4);" (assignment_expression "uVar9 = (*(code *)PTR_safemalloc_000b82f8)(iVar5,4)" identifier = (call_expression "(*(code *)PTR_safemalloc_000b82f8)(iVar5,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b82f8)" ( (pointer_expression "*(code *)PTR_safemalloc_000b82f8" * (cast_expression "(code *)PTR_safemalloc_000b82f8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar5,4)" ( identifier , number_literal )))) ;) (expression_statement "iVar23 = *param_2;" (assignment_expression "iVar23 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "iVar22 = 0;" (assignment_expression "iVar22 = 0" identifier = number_literal) ;) (labeled_statement "LAB_000561f0:\n  uVar20 = 0x1f;" statement_identifier : (expression_statement "uVar20 = 0x1f;" (assignment_expression "uVar20 = 0x1f" identifier = number_literal) ;)) (while_statement "while (iVar22 < iVar23) {\n    if ((1 << (uVar20 & 0x1f) & param_2[iVar23 - iVar22]) != 0) {\n      iVar24 = *piVar3;\n      uVar10 = FUN_00052c20(iVar24);\n      if (uVar10 != 0) goto LAB_00056608;\n      uVar11 = FUN_00052c64(iVar24);\n      goto LAB_000563c4;\n    }\n    uVar20 = uVar20 - 1;\n    if (uVar20 == 0xffffffff) goto code_r0x00056228;\n  }" while (parenthesized_expression "(iVar22 < iVar23)" ( (binary_expression "iVar22 < iVar23" identifier < identifier) )) (compound_statement "{\n    if ((1 << (uVar20 & 0x1f) & param_2[iVar23 - iVar22]) != 0) {\n      iVar24 = *piVar3;\n      uVar10 = FUN_00052c20(iVar24);\n      if (uVar10 != 0) goto LAB_00056608;\n      uVar11 = FUN_00052c64(iVar24);\n      goto LAB_000563c4;\n    }\n    uVar20 = uVar20 - 1;\n    if (uVar20 == 0xffffffff) goto code_r0x00056228;\n  }" { (if_statement "if ((1 << (uVar20 & 0x1f) & param_2[iVar23 - iVar22]) != 0) {\n      iVar24 = *piVar3;\n      uVar10 = FUN_00052c20(iVar24);\n      if (uVar10 != 0) goto LAB_00056608;\n      uVar11 = FUN_00052c64(iVar24);\n      goto LAB_000563c4;\n    }" if (parenthesized_expression "((1 << (uVar20 & 0x1f) & param_2[iVar23 - iVar22]) != 0)" ( (binary_expression "(1 << (uVar20 & 0x1f) & param_2[iVar23 - iVar22]) != 0" (parenthesized_expression "(1 << (uVar20 & 0x1f) & param_2[iVar23 - iVar22])" ( (binary_expression "1 << (uVar20 & 0x1f) & param_2[iVar23 - iVar22]" (binary_expression "1 << (uVar20 & 0x1f)" number_literal << (parenthesized_expression "(uVar20 & 0x1f)" ( (binary_expression "uVar20 & 0x1f" identifier & number_literal) ))) & (subscript_expression "param_2[iVar23 - iVar22]" identifier [ (binary_expression "iVar23 - iVar22" identifier - identifier) ])) )) != number_literal) )) (compound_statement "{\n      iVar24 = *piVar3;\n      uVar10 = FUN_00052c20(iVar24);\n      if (uVar10 != 0) goto LAB_00056608;\n      uVar11 = FUN_00052c64(iVar24);\n      goto LAB_000563c4;\n    }" { (expression_statement "iVar24 = *piVar3;" (assignment_expression "iVar24 = *piVar3" identifier = (pointer_expression "*piVar3" * identifier)) ;) (expression_statement "uVar10 = FUN_00052c20(iVar24);" (assignment_expression "uVar10 = FUN_00052c20(iVar24)" identifier = (call_expression "FUN_00052c20(iVar24)" identifier (argument_list "(iVar24)" ( identifier )))) ;) (if_statement "if (uVar10 != 0) goto LAB_00056608;" if (parenthesized_expression "(uVar10 != 0)" ( (binary_expression "uVar10 != 0" identifier != number_literal) )) (goto_statement "goto LAB_00056608;" goto statement_identifier ;)) (expression_statement "uVar11 = FUN_00052c64(iVar24);" (assignment_expression "uVar11 = FUN_00052c64(iVar24)" identifier = (call_expression "FUN_00052c64(iVar24)" identifier (argument_list "(iVar24)" ( identifier )))) ;) (goto_statement "goto LAB_000563c4;" goto statement_identifier ;) })) (expression_statement "uVar20 = uVar20 - 1;" (assignment_expression "uVar20 = uVar20 - 1" identifier = (binary_expression "uVar20 - 1" identifier - number_literal)) ;) (if_statement "if (uVar20 == 0xffffffff) goto code_r0x00056228;" if (parenthesized_expression "(uVar20 == 0xffffffff)" ( (binary_expression "uVar20 == 0xffffffff" identifier == number_literal) )) (goto_statement "goto code_r0x00056228;" goto statement_identifier ;)) })) (expression_statement "iVar24 = *piVar3;" (assignment_expression "iVar24 = *piVar3" identifier = (pointer_expression "*piVar3" * identifier)) ;) (expression_statement "uVar10 = FUN_00052c20(iVar24);" (assignment_expression "uVar10 = FUN_00052c20(iVar24)" identifier = (call_expression "FUN_00052c20(iVar24)" identifier (argument_list "(iVar24)" ( identifier )))) ;) (if_statement "if (uVar10 == 0) {\n    FUN_00052c64(iVar24);\n    goto LAB_00056404;\n  }" if (parenthesized_expression "(uVar10 == 0)" ( (binary_expression "uVar10 == 0" identifier == number_literal) )) (compound_statement "{\n    FUN_00052c64(iVar24);\n    goto LAB_00056404;\n  }" { (expression_statement "FUN_00052c64(iVar24);" (call_expression "FUN_00052c64(iVar24)" identifier (argument_list "(iVar24)" ( identifier ))) ;) (goto_statement "goto LAB_00056404;" goto statement_identifier ;) })) (labeled_statement "LAB_00056608:\n  uVar18 = iVar24 << (uVar10 & 0x1f);" statement_identifier : (expression_statement "uVar18 = iVar24 << (uVar10 & 0x1f);" (assignment_expression "uVar18 = iVar24 << (uVar10 & 0x1f)" identifier = (binary_expression "iVar24 << (uVar10 & 0x1f)" identifier << (parenthesized_expression "(uVar10 & 0x1f)" ( (binary_expression "uVar10 & 0x1f" identifier & number_literal) )))) ;)) (if_statement "if (iVar19 < 2) {\n    uVar11 = FUN_00052c64(uVar18);\n    if (iVar23 <= iVar22) goto LAB_00056404;\n  }\n  else {\n    uVar11 = FUN_00052c64((uint)piVar3[1] >> (-uVar10 & 0x1f) | uVar18);\n    if (iVar23 <= iVar22) {\n      puVar14 = (uint *)FUN_00053e48(*param_3);\n      goto LAB_0005642c;\n    }\n  }" if (parenthesized_expression "(iVar19 < 2)" ( (binary_expression "iVar19 < 2" identifier < number_literal) )) (compound_statement "{\n    uVar11 = FUN_00052c64(uVar18);\n    if (iVar23 <= iVar22) goto LAB_00056404;\n  }" { (expression_statement "uVar11 = FUN_00052c64(uVar18);" (assignment_expression "uVar11 = FUN_00052c64(uVar18)" identifier = (call_expression "FUN_00052c64(uVar18)" identifier (argument_list "(uVar18)" ( identifier )))) ;) (if_statement "if (iVar23 <= iVar22) goto LAB_00056404;" if (parenthesized_expression "(iVar23 <= iVar22)" ( (binary_expression "iVar23 <= iVar22" identifier <= identifier) )) (goto_statement "goto LAB_00056404;" goto statement_identifier ;)) }) (else_clause "else {\n    uVar11 = FUN_00052c64((uint)piVar3[1] >> (-uVar10 & 0x1f) | uVar18);\n    if (iVar23 <= iVar22) {\n      puVar14 = (uint *)FUN_00053e48(*param_3);\n      goto LAB_0005642c;\n    }\n  }" else (compound_statement "{\n    uVar11 = FUN_00052c64((uint)piVar3[1] >> (-uVar10 & 0x1f) | uVar18);\n    if (iVar23 <= iVar22) {\n      puVar14 = (uint *)FUN_00053e48(*param_3);\n      goto LAB_0005642c;\n    }\n  }" { (expression_statement "uVar11 = FUN_00052c64((uint)piVar3[1] >> (-uVar10 & 0x1f) | uVar18);" (assignment_expression "uVar11 = FUN_00052c64((uint)piVar3[1] >> (-uVar10 & 0x1f) | uVar18)" identifier = (call_expression "FUN_00052c64((uint)piVar3[1] >> (-uVar10 & 0x1f) | uVar18)" identifier (argument_list "((uint)piVar3[1] >> (-uVar10 & 0x1f) | uVar18)" ( (binary_expression "(uint)piVar3[1] >> (-uVar10 & 0x1f) | uVar18" (binary_expression "(uint)piVar3[1] >> (-uVar10 & 0x1f)" (cast_expression "(uint)piVar3[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "piVar3[1]" identifier [ number_literal ])) >> (parenthesized_expression "(-uVar10 & 0x1f)" ( (binary_expression "-uVar10 & 0x1f" (unary_expression "-uVar10" - identifier) & number_literal) ))) | identifier) )))) ;) (if_statement "if (iVar23 <= iVar22) {\n      puVar14 = (uint *)FUN_00053e48(*param_3);\n      goto LAB_0005642c;\n    }" if (parenthesized_expression "(iVar23 <= iVar22)" ( (binary_expression "iVar23 <= iVar22" identifier <= identifier) )) (compound_statement "{\n      puVar14 = (uint *)FUN_00053e48(*param_3);\n      goto LAB_0005642c;\n    }" { (expression_statement "puVar14 = (uint *)FUN_00053e48(*param_3);" (assignment_expression "puVar14 = (uint *)FUN_00053e48(*param_3)" identifier = (cast_expression "(uint *)FUN_00053e48(*param_3)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00053e48(*param_3)" identifier (argument_list "(*param_3)" ( (pointer_expression "*param_3" * identifier) ))))) ;) (goto_statement "goto LAB_0005642c;" goto statement_identifier ;) })) }))) (labeled_statement "LAB_000563c4:\n  pcVar12 = (code *)(PTR_LAB_000b8640 + 0x2da0);" statement_identifier : (expression_statement "pcVar12 = (code *)(PTR_LAB_000b8640 + 0x2da0);" (assignment_expression "pcVar12 = (code *)(PTR_LAB_000b8640 + 0x2da0)" identifier = (cast_expression "(code *)(PTR_LAB_000b8640 + 0x2da0)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000b8640 + 0x2da0)" ( (binary_expression "PTR_LAB_000b8640 + 0x2da0" identifier + number_literal) )))) ;)) (expression_statement "pcVar13 = (code *)(PTR_LAB_000b8640 + 0x37b8);" (assignment_expression "pcVar13 = (code *)(PTR_LAB_000b8640 + 0x37b8)" identifier = (cast_expression "(code *)(PTR_LAB_000b8640 + 0x37b8)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000b8640 + 0x37b8)" ( (binary_expression "PTR_LAB_000b8640 + 0x37b8" identifier + number_literal) )))) ;) (do_statement "do {\n    puVar8 = puVar7;\n    puVar21 = puVar6;\n    if (-1 < (int)uVar20) {\n      do {\n        (*pcVar12)(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9);\n        (*pcVar13)(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n        puVar7 = puVar21;\n        puVar6 = puVar8;\n        if ((1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0) {\n          (*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);\n          (*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n          puVar7 = puVar8;\n          puVar6 = puVar21;\n        }\n        uVar20 = uVar20 - 1;\n        puVar8 = puVar7;\n        puVar21 = puVar6;\n      } while (uVar20 != 0xffffffff);\n    }\n    iVar22 = iVar22 + 1;\n    uVar20 = 0x1f;\n  } while (iVar22 < *param_2);" do (compound_statement "{\n    puVar8 = puVar7;\n    puVar21 = puVar6;\n    if (-1 < (int)uVar20) {\n      do {\n        (*pcVar12)(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9);\n        (*pcVar13)(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n        puVar7 = puVar21;\n        puVar6 = puVar8;\n        if ((1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0) {\n          (*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);\n          (*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n          puVar7 = puVar8;\n          puVar6 = puVar21;\n        }\n        uVar20 = uVar20 - 1;\n        puVar8 = puVar7;\n        puVar21 = puVar6;\n      } while (uVar20 != 0xffffffff);\n    }\n    iVar22 = iVar22 + 1;\n    uVar20 = 0x1f;\n  }" { (expression_statement "puVar8 = puVar7;" (assignment_expression "puVar8 = puVar7" identifier = identifier) ;) (expression_statement "puVar21 = puVar6;" (assignment_expression "puVar21 = puVar6" identifier = identifier) ;) (if_statement "if (-1 < (int)uVar20) {\n      do {\n        (*pcVar12)(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9);\n        (*pcVar13)(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n        puVar7 = puVar21;\n        puVar6 = puVar8;\n        if ((1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0) {\n          (*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);\n          (*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n          puVar7 = puVar8;\n          puVar6 = puVar21;\n        }\n        uVar20 = uVar20 - 1;\n        puVar8 = puVar7;\n        puVar21 = puVar6;\n      } while (uVar20 != 0xffffffff);\n    }" if (parenthesized_expression "(-1 < (int)uVar20)" ( (binary_expression "-1 < (int)uVar20" number_literal < (cast_expression "(int)uVar20" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n      do {\n        (*pcVar12)(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9);\n        (*pcVar13)(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n        puVar7 = puVar21;\n        puVar6 = puVar8;\n        if ((1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0) {\n          (*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);\n          (*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n          puVar7 = puVar8;\n          puVar6 = puVar21;\n        }\n        uVar20 = uVar20 - 1;\n        puVar8 = puVar7;\n        puVar21 = puVar6;\n      } while (uVar20 != 0xffffffff);\n    }" { (do_statement "do {\n        (*pcVar12)(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9);\n        (*pcVar13)(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n        puVar7 = puVar21;\n        puVar6 = puVar8;\n        if ((1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0) {\n          (*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);\n          (*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n          puVar7 = puVar8;\n          puVar6 = puVar21;\n        }\n        uVar20 = uVar20 - 1;\n        puVar8 = puVar7;\n        puVar21 = puVar6;\n      } while (uVar20 != 0xffffffff);" do (compound_statement "{\n        (*pcVar12)(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9);\n        (*pcVar13)(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n        puVar7 = puVar21;\n        puVar6 = puVar8;\n        if ((1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0) {\n          (*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);\n          (*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n          puVar7 = puVar8;\n          puVar6 = puVar21;\n        }\n        uVar20 = uVar20 - 1;\n        puVar8 = puVar7;\n        puVar21 = puVar6;\n      }" { (expression_statement "(*pcVar12)(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9);" (call_expression "(*pcVar12)(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9)" (parenthesized_expression "(*pcVar12)" ( (pointer_expression "*pcVar12" * identifier) )) (argument_list "(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9)" ( (binary_expression "puVar21 + iVar19" identifier + identifier) , (binary_expression "puVar21 + iVar19" identifier + identifier) , identifier , identifier , identifier ))) ;) (expression_statement "(*pcVar13)(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10);" (call_expression "(*pcVar13)(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10)" (parenthesized_expression "(*pcVar13)" ( (pointer_expression "*pcVar13" * identifier) )) (argument_list "(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10)" ( identifier , identifier , identifier , identifier , number_literal , identifier , identifier ))) ;) (expression_statement "puVar7 = puVar21;" (assignment_expression "puVar7 = puVar21" identifier = identifier) ;) (expression_statement "puVar6 = puVar8;" (assignment_expression "puVar6 = puVar8" identifier = identifier) ;) (if_statement "if ((1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0) {\n          (*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);\n          (*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n          puVar7 = puVar8;\n          puVar6 = puVar21;\n        }" if (parenthesized_expression "((1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0)" ( (binary_expression "(1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0" (parenthesized_expression "(1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22])" ( (binary_expression "1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]" (binary_expression "1 << (uVar20 & 0x1f)" number_literal << (parenthesized_expression "(uVar20 & 0x1f)" ( (binary_expression "uVar20 & 0x1f" identifier & number_literal) ))) & (subscript_expression "param_2[*param_2 - iVar22]" identifier [ (binary_expression "*param_2 - iVar22" (pointer_expression "*param_2" * identifier) - identifier) ])) )) != number_literal) )) (compound_statement "{\n          (*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);\n          (*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n          puVar7 = puVar8;\n          puVar6 = puVar21;\n        }" { (expression_statement "(*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);" (call_expression "(*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9)" (parenthesized_expression "(*pcVar12)" ( (pointer_expression "*pcVar12" * identifier) )) (argument_list "(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9)" ( (binary_expression "puVar8 + iVar19" identifier + identifier) , identifier , identifier , identifier , identifier ))) ;) (expression_statement "(*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);" (call_expression "(*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10)" (parenthesized_expression "(*pcVar13)" ( (pointer_expression "*pcVar13" * identifier) )) (argument_list "(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10)" ( identifier , identifier , identifier , identifier , number_literal , identifier , identifier ))) ;) (expression_statement "puVar7 = puVar8;" (assignment_expression "puVar7 = puVar8" identifier = identifier) ;) (expression_statement "puVar6 = puVar21;" (assignment_expression "puVar6 = puVar21" identifier = identifier) ;) })) (expression_statement "uVar20 = uVar20 - 1;" (assignment_expression "uVar20 = uVar20 - 1" identifier = (binary_expression "uVar20 - 1" identifier - number_literal)) ;) (expression_statement "puVar8 = puVar7;" (assignment_expression "puVar8 = puVar7" identifier = identifier) ;) (expression_statement "puVar21 = puVar6;" (assignment_expression "puVar21 = puVar6" identifier = identifier) ;) }) while (parenthesized_expression "(uVar20 != 0xffffffff)" ( (binary_expression "uVar20 != 0xffffffff" identifier != number_literal) )) ;) })) (expression_statement "iVar22 = iVar22 + 1;" (assignment_expression "iVar22 = iVar22 + 1" identifier = (binary_expression "iVar22 + 1" identifier + number_literal)) ;) (expression_statement "uVar20 = 0x1f;" (assignment_expression "uVar20 = 0x1f" identifier = number_literal) ;) }) while (parenthesized_expression "(iVar22 < *param_2)" ( (binary_expression "iVar22 < *param_2" identifier < (pointer_expression "*param_2" * identifier)) )) ;) (labeled_statement "LAB_00056404:\n  puVar14 = (uint *)FUN_00053e48(*param_3);" statement_identifier : (expression_statement "puVar14 = (uint *)FUN_00053e48(*param_3);" (assignment_expression "puVar14 = (uint *)FUN_00053e48(*param_3)" identifier = (cast_expression "(uint *)FUN_00053e48(*param_3)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00053e48(*param_3)" identifier (argument_list "(*param_3)" ( (pointer_expression "*param_3" * identifier) ))))) ;)) (if_statement "if (0 < iVar19) {\nLAB_0005642c:\n    puVar17 = puVar6 + iVar19;\n    iVar15 = 0;\n    do {\n      puVar14[*puVar14 - iVar15] = *puVar17;\n      iVar15 = iVar15 + 1;\n      puVar17 = puVar17 + 1;\n    } while (iVar15 < iVar19);\n  }" if (parenthesized_expression "(0 < iVar19)" ( (binary_expression "0 < iVar19" number_literal < identifier) )) (compound_statement "{\nLAB_0005642c:\n    puVar17 = puVar6 + iVar19;\n    iVar15 = 0;\n    do {\n      puVar14[*puVar14 - iVar15] = *puVar17;\n      iVar15 = iVar15 + 1;\n      puVar17 = puVar17 + 1;\n    } while (iVar15 < iVar19);\n  }" { (labeled_statement "LAB_0005642c:\n    puVar17 = puVar6 + iVar19;" statement_identifier : (expression_statement "puVar17 = puVar6 + iVar19;" (assignment_expression "puVar17 = puVar6 + iVar19" identifier = (binary_expression "puVar6 + iVar19" identifier + identifier)) ;)) (expression_statement "iVar15 = 0;" (assignment_expression "iVar15 = 0" identifier = number_literal) ;) (do_statement "do {\n      puVar14[*puVar14 - iVar15] = *puVar17;\n      iVar15 = iVar15 + 1;\n      puVar17 = puVar17 + 1;\n    } while (iVar15 < iVar19);" do (compound_statement "{\n      puVar14[*puVar14 - iVar15] = *puVar17;\n      iVar15 = iVar15 + 1;\n      puVar17 = puVar17 + 1;\n    }" { (expression_statement "puVar14[*puVar14 - iVar15] = *puVar17;" (assignment_expression "puVar14[*puVar14 - iVar15] = *puVar17" (subscript_expression "puVar14[*puVar14 - iVar15]" identifier [ (binary_expression "*puVar14 - iVar15" (pointer_expression "*puVar14" * identifier) - identifier) ]) = (pointer_expression "*puVar17" * identifier)) ;) (expression_statement "iVar15 = iVar15 + 1;" (assignment_expression "iVar15 = iVar15 + 1" identifier = (binary_expression "iVar15 + 1" identifier + number_literal)) ;) (expression_statement "puVar17 = puVar17 + 1;" (assignment_expression "puVar17 = puVar17 + 1" identifier = (binary_expression "puVar17 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar15 < iVar19)" ( (binary_expression "iVar15 < iVar19" identifier < identifier) )) ;) })) (expression_statement "uVar20 = *puVar14;" (assignment_expression "uVar20 = *puVar14" identifier = (pointer_expression "*puVar14" * identifier)) ;) (if_statement "if (1 < uVar20) {\n    puVar17 = puVar14 + uVar20;\n    uVar10 = *puVar17;\n    while (uVar10 == 0) {\n      uVar20 = uVar20 - 1;\n      *puVar14 = uVar20;\n      if (uVar20 == 1) break;\n      puVar1 = puVar17 + -1;\n      puVar17 = puVar17 + -1;\n      uVar10 = *puVar1;\n    }\n  }" if (parenthesized_expression "(1 < uVar20)" ( (binary_expression "1 < uVar20" number_literal < identifier) )) (compound_statement "{\n    puVar17 = puVar14 + uVar20;\n    uVar10 = *puVar17;\n    while (uVar10 == 0) {\n      uVar20 = uVar20 - 1;\n      *puVar14 = uVar20;\n      if (uVar20 == 1) break;\n      puVar1 = puVar17 + -1;\n      puVar17 = puVar17 + -1;\n      uVar10 = *puVar1;\n    }\n  }" { (expression_statement "puVar17 = puVar14 + uVar20;" (assignment_expression "puVar17 = puVar14 + uVar20" identifier = (binary_expression "puVar14 + uVar20" identifier + identifier)) ;) (expression_statement "uVar10 = *puVar17;" (assignment_expression "uVar10 = *puVar17" identifier = (pointer_expression "*puVar17" * identifier)) ;) (while_statement "while (uVar10 == 0) {\n      uVar20 = uVar20 - 1;\n      *puVar14 = uVar20;\n      if (uVar20 == 1) break;\n      puVar1 = puVar17 + -1;\n      puVar17 = puVar17 + -1;\n      uVar10 = *puVar1;\n    }" while (parenthesized_expression "(uVar10 == 0)" ( (binary_expression "uVar10 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar20 = uVar20 - 1;\n      *puVar14 = uVar20;\n      if (uVar20 == 1) break;\n      puVar1 = puVar17 + -1;\n      puVar17 = puVar17 + -1;\n      uVar10 = *puVar1;\n    }" { (expression_statement "uVar20 = uVar20 - 1;" (assignment_expression "uVar20 = uVar20 - 1" identifier = (binary_expression "uVar20 - 1" identifier - number_literal)) ;) (expression_statement "*puVar14 = uVar20;" (assignment_expression "*puVar14 = uVar20" (pointer_expression "*puVar14" * identifier) = identifier) ;) (if_statement "if (uVar20 == 1) break;" if (parenthesized_expression "(uVar20 == 1)" ( (binary_expression "uVar20 == 1" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "puVar1 = puVar17 + -1;" (assignment_expression "puVar1 = puVar17 + -1" identifier = (binary_expression "puVar17 + -1" identifier + number_literal)) ;) (expression_statement "puVar17 = puVar17 + -1;" (assignment_expression "puVar17 = puVar17 + -1" identifier = (binary_expression "puVar17 + -1" identifier + number_literal)) ;) (expression_statement "uVar10 = *puVar1;" (assignment_expression "uVar10 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) })) })) (expression_statement "(*(code *)PTR_smemclr_000b8328)(puVar6,iVar19 * 8);" (call_expression "(*(code *)PTR_smemclr_000b8328)(puVar6,iVar19 * 8)" (parenthesized_expression "(*(code *)PTR_smemclr_000b8328)" ( (pointer_expression "*(code *)PTR_smemclr_000b8328" * (cast_expression "(code *)PTR_smemclr_000b8328" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar6,iVar19 * 8)" ( identifier , (binary_expression "iVar19 * 8" identifier * number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000b82e8)(puVar6);" (call_expression "(*(code *)PTR_safefree_000b82e8)(puVar6)" (parenthesized_expression "(*(code *)PTR_safefree_000b82e8)" ( (pointer_expression "*(code *)PTR_safefree_000b82e8" * (cast_expression "(code *)PTR_safefree_000b82e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar6)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000b8328)(uVar9,iVar5 << 2);" (call_expression "(*(code *)PTR_smemclr_000b8328)(uVar9,iVar5 << 2)" (parenthesized_expression "(*(code *)PTR_smemclr_000b8328)" ( (pointer_expression "*(code *)PTR_smemclr_000b8328" * (cast_expression "(code *)PTR_smemclr_000b8328" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(uVar9,iVar5 << 2)" ( identifier , (binary_expression "iVar5 << 2" identifier << number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000b82e8)(uVar9);" (call_expression "(*(code *)PTR_safefree_000b82e8)(uVar9)" (parenthesized_expression "(*(code *)PTR_safefree_000b82e8)" ( (pointer_expression "*(code *)PTR_safefree_000b82e8" * (cast_expression "(code *)PTR_safefree_000b82e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(uVar9)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000b8328)(puVar7,iVar19 * 8);" (call_expression "(*(code *)PTR_smemclr_000b8328)(puVar7,iVar19 * 8)" (parenthesized_expression "(*(code *)PTR_smemclr_000b8328)" ( (pointer_expression "*(code *)PTR_smemclr_000b8328" * (cast_expression "(code *)PTR_smemclr_000b8328" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar7,iVar19 * 8)" ( identifier , (binary_expression "iVar19 * 8" identifier * number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000b82e8)(puVar7);" (call_expression "(*(code *)PTR_safefree_000b82e8)(puVar7)" (parenthesized_expression "(*(code *)PTR_safefree_000b82e8)" ( (pointer_expression "*(code *)PTR_safefree_000b82e8" * (cast_expression "(code *)PTR_safefree_000b82e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar7)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000b8328)(piVar3,iVar19 << 2);" (call_expression "(*(code *)PTR_smemclr_000b8328)(piVar3,iVar19 << 2)" (parenthesized_expression "(*(code *)PTR_smemclr_000b8328)" ( (pointer_expression "*(code *)PTR_smemclr_000b8328" * (cast_expression "(code *)PTR_smemclr_000b8328" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(piVar3,iVar19 << 2)" ( identifier , (binary_expression "iVar19 << 2" identifier << number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000b82e8)(piVar3);" (call_expression "(*(code *)PTR_safefree_000b82e8)(piVar3)" (parenthesized_expression "(*(code *)PTR_safefree_000b82e8)" ( (pointer_expression "*(code *)PTR_safefree_000b82e8" * (cast_expression "(code *)PTR_safefree_000b82e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(piVar3)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000b8328)(puVar4,iVar19 << 2);" (call_expression "(*(code *)PTR_smemclr_000b8328)(puVar4,iVar19 << 2)" (parenthesized_expression "(*(code *)PTR_smemclr_000b8328)" ( (pointer_expression "*(code *)PTR_smemclr_000b8328" * (cast_expression "(code *)PTR_smemclr_000b8328" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar4,iVar19 << 2)" ( identifier , (binary_expression "iVar19 << 2" identifier << number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000b82e8)(puVar4);" (call_expression "(*(code *)PTR_safefree_000b82e8)(puVar4)" (parenthesized_expression "(*(code *)PTR_safefree_000b82e8)" ( (pointer_expression "*(code *)PTR_safefree_000b82e8" * (cast_expression "(code *)PTR_safefree_000b82e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar4)" ( identifier ))) ;) (expression_statement "freebn(piVar2);" (call_expression "freebn(piVar2)" identifier (argument_list "(piVar2)" ( identifier ))) ;) (return_statement "return puVar14;" return identifier ;) (labeled_statement "code_r0x00056228:\n  iVar22 = iVar22 + 1;" statement_identifier : (expression_statement "iVar22 = iVar22 + 1;" (assignment_expression "iVar22 = iVar22 + 1" identifier = (binary_expression "iVar22 + 1" identifier + number_literal)) ;)) (goto_statement "goto LAB_000561f0;" goto statement_identifier ;) })))
(translation_unit "Bignum_conflict modpow_simple(Bignum_conflict base_in,Bignum_conflict exp,Bignum_conflict mod)\n\n{\n  Bignum_conflict pBVar1;\n  BignumInt *pBVar2;\n  undefined4 *puVar3;\n  undefined4 *puVar4;\n  undefined4 *puVar5;\n  undefined4 *puVar6;\n  int iVar7;\n  undefined4 uVar8;\n  uint uVar9;\n  code *pcVar10;\n  code *pcVar11;\n  Bignum_conflict pBVar12;\n  BignumInt BVar13;\n  int iVar14;\n  Bignum_conflict pBVar15;\n  BignumInt *pBVar16;\n  BignumInt len;\n  uint uVar17;\n  undefined4 *puVar18;\n  int iVar19;\n  BignumInt BVar20;\n  \n  if (mod[*mod] == 0) {\n    pBVar1 = (Bignum_conflict)\n             (*(code *)PTR___assert_fail_000b8b18)\n                       (PTR_PC2_1357_27__000b8348 + -0x7fc,PTR_PC2_1357_27__000b8348 + -0x840,0x3b9,\n                        PTR_PC2_1357_27__000b8348 + -0x62c);\n    return pBVar1;\n  }\n  pBVar1 = bigmod(base_in,mod);\n  len = *mod;\n  pBVar2 = (BignumInt *)(*(code *)PTR_safemalloc_000b82f8)(len,4);\n  if (0 < (int)len) {\n    BVar13 = 0;\n    pBVar16 = pBVar2;\n    do {\n      *pBVar16 = mod[*mod - BVar13];\n      BVar13 = BVar13 + 1;\n      pBVar16 = pBVar16 + 1;\n    } while (len != BVar13);\n  }\n  puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(len,4);\n  iVar14 = len - *pBVar1;\n  if (0 < iVar14) {\n    puVar5 = puVar3;\n    do {\n      *puVar5 = 0;\n      puVar5 = puVar5 + 1;\n    } while (puVar5 != puVar3 + iVar14);\n  }\n  BVar13 = *pBVar1;\n  if (0 < (int)BVar13) {\n    pBVar16 = puVar3 + iVar14;\n    iVar14 = 0;\n    do {\n      *pBVar16 = pBVar1[BVar13 - iVar14];\n      iVar14 = iVar14 + 1;\n      BVar13 = *pBVar1;\n      pBVar16 = pBVar16 + 1;\n    } while (iVar14 < (int)BVar13);\n  }\n  iVar14 = len << 1;\n  puVar4 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar14,4);\n  puVar5 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar14,4);\n  if (0 < iVar14) {\n    puVar6 = puVar4;\n    do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (puVar6 != puVar4 + len * 2);\n  }\n  puVar4[len * 2 + -1] = 1;\n  iVar7 = mul_compute_scratch(len);\n  uVar8 = (*(code *)PTR_safemalloc_000b82f8)(iVar7,4);\n  BVar13 = *exp;\n  iVar19 = 0;\nLAB_000561f0:\n  uVar17 = 0x1f;\n  while (iVar19 < (int)BVar13) {\n    if ((1 << (uVar17 & 0x1f) & exp[BVar13 - iVar19]) != 0) {\n      BVar20 = *pBVar2;\n      uVar9 = bn_clz(BVar20);\n      if (uVar9 != 0) goto LAB_00056608;\n      BVar20 = reciprocal_word(BVar20);\n      goto LAB_000563c4;\n    }\n    uVar17 = uVar17 - 1;\n    if (uVar17 == 0xffffffff) goto code_r0x00056228;\n  }\n  BVar20 = *pBVar2;\n  uVar9 = bn_clz(BVar20);\n  if (uVar9 == 0) {\n    reciprocal_word(BVar20);\n    goto LAB_00056404;\n  }\nLAB_00056608:\n  BVar20 = BVar20 << (uVar9 & 0x1f);\n  if ((int)len < 2) {\n    BVar20 = reciprocal_word(BVar20);\n    if ((int)BVar13 <= iVar19) goto LAB_00056404;\n  }\n  else {\n    BVar20 = reciprocal_word(pBVar2[1] >> (-uVar9 & 0x1f) | BVar20);\n    if ((int)BVar13 <= iVar19) {\n      pBVar12 = newbn(*mod);\n      goto LAB_0005642c;\n    }\n  }\nLAB_000563c4:\n  pcVar10 = (code *)(PTR_LAB_000b8640 + 0x2da0);\n  pcVar11 = (code *)(PTR_LAB_000b8640 + 0x37b8);\n  do {\n    puVar6 = puVar5;\n    puVar18 = puVar4;\n    if (-1 < (int)uVar17) {\n      do {\n        (*pcVar10)(puVar18 + len,puVar18 + len,puVar6,len,uVar8);\n        (*pcVar11)(puVar6,iVar14,pBVar2,len,0,BVar20,uVar9);\n        puVar5 = puVar18;\n        puVar4 = puVar6;\n        if ((1 << (uVar17 & 0x1f) & exp[*exp - iVar19]) != 0) {\n          (*pcVar10)(puVar6 + len,puVar3,puVar18,len,uVar8);\n          (*pcVar11)(puVar18,iVar14,pBVar2,len,0,BVar20,uVar9);\n          puVar5 = puVar6;\n          puVar4 = puVar18;\n        }\n        uVar17 = uVar17 - 1;\n        puVar6 = puVar5;\n        puVar18 = puVar4;\n      } while (uVar17 != 0xffffffff);\n    }\n    iVar19 = iVar19 + 1;\n    uVar17 = 0x1f;\n  } while (iVar19 < (int)*exp);\nLAB_00056404:\n  pBVar12 = newbn(*mod);\n  if (0 < (int)len) {\nLAB_0005642c:\n    pBVar16 = puVar4 + len;\n    iVar14 = 0;\n    do {\n      pBVar12[*pBVar12 - iVar14] = *pBVar16;\n      iVar14 = iVar14 + 1;\n      pBVar16 = pBVar16 + 1;\n    } while (iVar14 < (int)len);\n  }\n  BVar13 = *pBVar12;\n  if (1 < BVar13) {\n    pBVar15 = pBVar12 + BVar13;\n    BVar20 = *pBVar15;\n    while (BVar20 == 0) {\n      BVar13 = BVar13 - 1;\n      *pBVar12 = BVar13;\n      if (BVar13 == 1) break;\n      pBVar16 = pBVar15 + -1;\n      pBVar15 = pBVar15 + -1;\n      BVar20 = *pBVar16;\n    }\n  }\n  (*(code *)PTR_smemclr_000b8328)(puVar4,len * 8);\n  (*(code *)PTR_safefree_000b82e8)(puVar4);\n  (*(code *)PTR_smemclr_000b8328)(uVar8,iVar7 << 2);\n  (*(code *)PTR_safefree_000b82e8)(uVar8);\n  (*(code *)PTR_smemclr_000b8328)(puVar5,len * 8);\n  (*(code *)PTR_safefree_000b82e8)(puVar5);\n  (*(code *)PTR_smemclr_000b8328)(pBVar2,len << 2);\n  (*(code *)PTR_safefree_000b82e8)(pBVar2);\n  (*(code *)PTR_smemclr_000b8328)(puVar3,len << 2);\n  (*(code *)PTR_safefree_000b82e8)(puVar3);\n                    /* WARNING: Subroutine does not return */\n  freebn(pBVar1);\ncode_r0x00056228:\n  iVar19 = iVar19 + 1;\n  goto LAB_000561f0;\n}\n\n" (function_definition "Bignum_conflict modpow_simple(Bignum_conflict base_in,Bignum_conflict exp,Bignum_conflict mod)\n\n{\n  Bignum_conflict pBVar1;\n  BignumInt *pBVar2;\n  undefined4 *puVar3;\n  undefined4 *puVar4;\n  undefined4 *puVar5;\n  undefined4 *puVar6;\n  int iVar7;\n  undefined4 uVar8;\n  uint uVar9;\n  code *pcVar10;\n  code *pcVar11;\n  Bignum_conflict pBVar12;\n  BignumInt BVar13;\n  int iVar14;\n  Bignum_conflict pBVar15;\n  BignumInt *pBVar16;\n  BignumInt len;\n  uint uVar17;\n  undefined4 *puVar18;\n  int iVar19;\n  BignumInt BVar20;\n  \n  if (mod[*mod] == 0) {\n    pBVar1 = (Bignum_conflict)\n             (*(code *)PTR___assert_fail_000b8b18)\n                       (PTR_PC2_1357_27__000b8348 + -0x7fc,PTR_PC2_1357_27__000b8348 + -0x840,0x3b9,\n                        PTR_PC2_1357_27__000b8348 + -0x62c);\n    return pBVar1;\n  }\n  pBVar1 = bigmod(base_in,mod);\n  len = *mod;\n  pBVar2 = (BignumInt *)(*(code *)PTR_safemalloc_000b82f8)(len,4);\n  if (0 < (int)len) {\n    BVar13 = 0;\n    pBVar16 = pBVar2;\n    do {\n      *pBVar16 = mod[*mod - BVar13];\n      BVar13 = BVar13 + 1;\n      pBVar16 = pBVar16 + 1;\n    } while (len != BVar13);\n  }\n  puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(len,4);\n  iVar14 = len - *pBVar1;\n  if (0 < iVar14) {\n    puVar5 = puVar3;\n    do {\n      *puVar5 = 0;\n      puVar5 = puVar5 + 1;\n    } while (puVar5 != puVar3 + iVar14);\n  }\n  BVar13 = *pBVar1;\n  if (0 < (int)BVar13) {\n    pBVar16 = puVar3 + iVar14;\n    iVar14 = 0;\n    do {\n      *pBVar16 = pBVar1[BVar13 - iVar14];\n      iVar14 = iVar14 + 1;\n      BVar13 = *pBVar1;\n      pBVar16 = pBVar16 + 1;\n    } while (iVar14 < (int)BVar13);\n  }\n  iVar14 = len << 1;\n  puVar4 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar14,4);\n  puVar5 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar14,4);\n  if (0 < iVar14) {\n    puVar6 = puVar4;\n    do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (puVar6 != puVar4 + len * 2);\n  }\n  puVar4[len * 2 + -1] = 1;\n  iVar7 = mul_compute_scratch(len);\n  uVar8 = (*(code *)PTR_safemalloc_000b82f8)(iVar7,4);\n  BVar13 = *exp;\n  iVar19 = 0;\nLAB_000561f0:\n  uVar17 = 0x1f;\n  while (iVar19 < (int)BVar13) {\n    if ((1 << (uVar17 & 0x1f) & exp[BVar13 - iVar19]) != 0) {\n      BVar20 = *pBVar2;\n      uVar9 = bn_clz(BVar20);\n      if (uVar9 != 0) goto LAB_00056608;\n      BVar20 = reciprocal_word(BVar20);\n      goto LAB_000563c4;\n    }\n    uVar17 = uVar17 - 1;\n    if (uVar17 == 0xffffffff) goto code_r0x00056228;\n  }\n  BVar20 = *pBVar2;\n  uVar9 = bn_clz(BVar20);\n  if (uVar9 == 0) {\n    reciprocal_word(BVar20);\n    goto LAB_00056404;\n  }\nLAB_00056608:\n  BVar20 = BVar20 << (uVar9 & 0x1f);\n  if ((int)len < 2) {\n    BVar20 = reciprocal_word(BVar20);\n    if ((int)BVar13 <= iVar19) goto LAB_00056404;\n  }\n  else {\n    BVar20 = reciprocal_word(pBVar2[1] >> (-uVar9 & 0x1f) | BVar20);\n    if ((int)BVar13 <= iVar19) {\n      pBVar12 = newbn(*mod);\n      goto LAB_0005642c;\n    }\n  }\nLAB_000563c4:\n  pcVar10 = (code *)(PTR_LAB_000b8640 + 0x2da0);\n  pcVar11 = (code *)(PTR_LAB_000b8640 + 0x37b8);\n  do {\n    puVar6 = puVar5;\n    puVar18 = puVar4;\n    if (-1 < (int)uVar17) {\n      do {\n        (*pcVar10)(puVar18 + len,puVar18 + len,puVar6,len,uVar8);\n        (*pcVar11)(puVar6,iVar14,pBVar2,len,0,BVar20,uVar9);\n        puVar5 = puVar18;\n        puVar4 = puVar6;\n        if ((1 << (uVar17 & 0x1f) & exp[*exp - iVar19]) != 0) {\n          (*pcVar10)(puVar6 + len,puVar3,puVar18,len,uVar8);\n          (*pcVar11)(puVar18,iVar14,pBVar2,len,0,BVar20,uVar9);\n          puVar5 = puVar6;\n          puVar4 = puVar18;\n        }\n        uVar17 = uVar17 - 1;\n        puVar6 = puVar5;\n        puVar18 = puVar4;\n      } while (uVar17 != 0xffffffff);\n    }\n    iVar19 = iVar19 + 1;\n    uVar17 = 0x1f;\n  } while (iVar19 < (int)*exp);\nLAB_00056404:\n  pBVar12 = newbn(*mod);\n  if (0 < (int)len) {\nLAB_0005642c:\n    pBVar16 = puVar4 + len;\n    iVar14 = 0;\n    do {\n      pBVar12[*pBVar12 - iVar14] = *pBVar16;\n      iVar14 = iVar14 + 1;\n      pBVar16 = pBVar16 + 1;\n    } while (iVar14 < (int)len);\n  }\n  BVar13 = *pBVar12;\n  if (1 < BVar13) {\n    pBVar15 = pBVar12 + BVar13;\n    BVar20 = *pBVar15;\n    while (BVar20 == 0) {\n      BVar13 = BVar13 - 1;\n      *pBVar12 = BVar13;\n      if (BVar13 == 1) break;\n      pBVar16 = pBVar15 + -1;\n      pBVar15 = pBVar15 + -1;\n      BVar20 = *pBVar16;\n    }\n  }\n  (*(code *)PTR_smemclr_000b8328)(puVar4,len * 8);\n  (*(code *)PTR_safefree_000b82e8)(puVar4);\n  (*(code *)PTR_smemclr_000b8328)(uVar8,iVar7 << 2);\n  (*(code *)PTR_safefree_000b82e8)(uVar8);\n  (*(code *)PTR_smemclr_000b8328)(puVar5,len * 8);\n  (*(code *)PTR_safefree_000b82e8)(puVar5);\n  (*(code *)PTR_smemclr_000b8328)(pBVar2,len << 2);\n  (*(code *)PTR_safefree_000b82e8)(pBVar2);\n  (*(code *)PTR_smemclr_000b8328)(puVar3,len << 2);\n  (*(code *)PTR_safefree_000b82e8)(puVar3);\n                    /* WARNING: Subroutine does not return */\n  freebn(pBVar1);\ncode_r0x00056228:\n  iVar19 = iVar19 + 1;\n  goto LAB_000561f0;\n}" type_identifier (function_declarator "modpow_simple(Bignum_conflict base_in,Bignum_conflict exp,Bignum_conflict mod)" identifier (parameter_list "(Bignum_conflict base_in,Bignum_conflict exp,Bignum_conflict mod)" ( (parameter_declaration "Bignum_conflict base_in" type_identifier identifier) , (parameter_declaration "Bignum_conflict exp" type_identifier identifier) , (parameter_declaration "Bignum_conflict mod" type_identifier identifier) ))) (compound_statement "{\n  Bignum_conflict pBVar1;\n  BignumInt *pBVar2;\n  undefined4 *puVar3;\n  undefined4 *puVar4;\n  undefined4 *puVar5;\n  undefined4 *puVar6;\n  int iVar7;\n  undefined4 uVar8;\n  uint uVar9;\n  code *pcVar10;\n  code *pcVar11;\n  Bignum_conflict pBVar12;\n  BignumInt BVar13;\n  int iVar14;\n  Bignum_conflict pBVar15;\n  BignumInt *pBVar16;\n  BignumInt len;\n  uint uVar17;\n  undefined4 *puVar18;\n  int iVar19;\n  BignumInt BVar20;\n  \n  if (mod[*mod] == 0) {\n    pBVar1 = (Bignum_conflict)\n             (*(code *)PTR___assert_fail_000b8b18)\n                       (PTR_PC2_1357_27__000b8348 + -0x7fc,PTR_PC2_1357_27__000b8348 + -0x840,0x3b9,\n                        PTR_PC2_1357_27__000b8348 + -0x62c);\n    return pBVar1;\n  }\n  pBVar1 = bigmod(base_in,mod);\n  len = *mod;\n  pBVar2 = (BignumInt *)(*(code *)PTR_safemalloc_000b82f8)(len,4);\n  if (0 < (int)len) {\n    BVar13 = 0;\n    pBVar16 = pBVar2;\n    do {\n      *pBVar16 = mod[*mod - BVar13];\n      BVar13 = BVar13 + 1;\n      pBVar16 = pBVar16 + 1;\n    } while (len != BVar13);\n  }\n  puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(len,4);\n  iVar14 = len - *pBVar1;\n  if (0 < iVar14) {\n    puVar5 = puVar3;\n    do {\n      *puVar5 = 0;\n      puVar5 = puVar5 + 1;\n    } while (puVar5 != puVar3 + iVar14);\n  }\n  BVar13 = *pBVar1;\n  if (0 < (int)BVar13) {\n    pBVar16 = puVar3 + iVar14;\n    iVar14 = 0;\n    do {\n      *pBVar16 = pBVar1[BVar13 - iVar14];\n      iVar14 = iVar14 + 1;\n      BVar13 = *pBVar1;\n      pBVar16 = pBVar16 + 1;\n    } while (iVar14 < (int)BVar13);\n  }\n  iVar14 = len << 1;\n  puVar4 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar14,4);\n  puVar5 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar14,4);\n  if (0 < iVar14) {\n    puVar6 = puVar4;\n    do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (puVar6 != puVar4 + len * 2);\n  }\n  puVar4[len * 2 + -1] = 1;\n  iVar7 = mul_compute_scratch(len);\n  uVar8 = (*(code *)PTR_safemalloc_000b82f8)(iVar7,4);\n  BVar13 = *exp;\n  iVar19 = 0;\nLAB_000561f0:\n  uVar17 = 0x1f;\n  while (iVar19 < (int)BVar13) {\n    if ((1 << (uVar17 & 0x1f) & exp[BVar13 - iVar19]) != 0) {\n      BVar20 = *pBVar2;\n      uVar9 = bn_clz(BVar20);\n      if (uVar9 != 0) goto LAB_00056608;\n      BVar20 = reciprocal_word(BVar20);\n      goto LAB_000563c4;\n    }\n    uVar17 = uVar17 - 1;\n    if (uVar17 == 0xffffffff) goto code_r0x00056228;\n  }\n  BVar20 = *pBVar2;\n  uVar9 = bn_clz(BVar20);\n  if (uVar9 == 0) {\n    reciprocal_word(BVar20);\n    goto LAB_00056404;\n  }\nLAB_00056608:\n  BVar20 = BVar20 << (uVar9 & 0x1f);\n  if ((int)len < 2) {\n    BVar20 = reciprocal_word(BVar20);\n    if ((int)BVar13 <= iVar19) goto LAB_00056404;\n  }\n  else {\n    BVar20 = reciprocal_word(pBVar2[1] >> (-uVar9 & 0x1f) | BVar20);\n    if ((int)BVar13 <= iVar19) {\n      pBVar12 = newbn(*mod);\n      goto LAB_0005642c;\n    }\n  }\nLAB_000563c4:\n  pcVar10 = (code *)(PTR_LAB_000b8640 + 0x2da0);\n  pcVar11 = (code *)(PTR_LAB_000b8640 + 0x37b8);\n  do {\n    puVar6 = puVar5;\n    puVar18 = puVar4;\n    if (-1 < (int)uVar17) {\n      do {\n        (*pcVar10)(puVar18 + len,puVar18 + len,puVar6,len,uVar8);\n        (*pcVar11)(puVar6,iVar14,pBVar2,len,0,BVar20,uVar9);\n        puVar5 = puVar18;\n        puVar4 = puVar6;\n        if ((1 << (uVar17 & 0x1f) & exp[*exp - iVar19]) != 0) {\n          (*pcVar10)(puVar6 + len,puVar3,puVar18,len,uVar8);\n          (*pcVar11)(puVar18,iVar14,pBVar2,len,0,BVar20,uVar9);\n          puVar5 = puVar6;\n          puVar4 = puVar18;\n        }\n        uVar17 = uVar17 - 1;\n        puVar6 = puVar5;\n        puVar18 = puVar4;\n      } while (uVar17 != 0xffffffff);\n    }\n    iVar19 = iVar19 + 1;\n    uVar17 = 0x1f;\n  } while (iVar19 < (int)*exp);\nLAB_00056404:\n  pBVar12 = newbn(*mod);\n  if (0 < (int)len) {\nLAB_0005642c:\n    pBVar16 = puVar4 + len;\n    iVar14 = 0;\n    do {\n      pBVar12[*pBVar12 - iVar14] = *pBVar16;\n      iVar14 = iVar14 + 1;\n      pBVar16 = pBVar16 + 1;\n    } while (iVar14 < (int)len);\n  }\n  BVar13 = *pBVar12;\n  if (1 < BVar13) {\n    pBVar15 = pBVar12 + BVar13;\n    BVar20 = *pBVar15;\n    while (BVar20 == 0) {\n      BVar13 = BVar13 - 1;\n      *pBVar12 = BVar13;\n      if (BVar13 == 1) break;\n      pBVar16 = pBVar15 + -1;\n      pBVar15 = pBVar15 + -1;\n      BVar20 = *pBVar16;\n    }\n  }\n  (*(code *)PTR_smemclr_000b8328)(puVar4,len * 8);\n  (*(code *)PTR_safefree_000b82e8)(puVar4);\n  (*(code *)PTR_smemclr_000b8328)(uVar8,iVar7 << 2);\n  (*(code *)PTR_safefree_000b82e8)(uVar8);\n  (*(code *)PTR_smemclr_000b8328)(puVar5,len * 8);\n  (*(code *)PTR_safefree_000b82e8)(puVar5);\n  (*(code *)PTR_smemclr_000b8328)(pBVar2,len << 2);\n  (*(code *)PTR_safefree_000b82e8)(pBVar2);\n  (*(code *)PTR_smemclr_000b8328)(puVar3,len << 2);\n  (*(code *)PTR_safefree_000b82e8)(puVar3);\n                    /* WARNING: Subroutine does not return */\n  freebn(pBVar1);\ncode_r0x00056228:\n  iVar19 = iVar19 + 1;\n  goto LAB_000561f0;\n}" { (declaration "Bignum_conflict pBVar1;" type_identifier identifier ;) (declaration "BignumInt *pBVar2;" type_identifier (pointer_declarator "*pBVar2" * identifier) ;) (declaration "undefined4 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined4 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "undefined4 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "undefined4 *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "undefined4 uVar8;" type_identifier identifier ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "code *pcVar10;" type_identifier (pointer_declarator "*pcVar10" * identifier) ;) (declaration "code *pcVar11;" type_identifier (pointer_declarator "*pcVar11" * identifier) ;) (declaration "Bignum_conflict pBVar12;" type_identifier identifier ;) (declaration "BignumInt BVar13;" type_identifier identifier ;) (declaration "int iVar14;" primitive_type identifier ;) (declaration "Bignum_conflict pBVar15;" type_identifier identifier ;) (declaration "BignumInt *pBVar16;" type_identifier (pointer_declarator "*pBVar16" * identifier) ;) (declaration "BignumInt len;" type_identifier identifier ;) (declaration "uint uVar17;" type_identifier identifier ;) (declaration "undefined4 *puVar18;" type_identifier (pointer_declarator "*puVar18" * identifier) ;) (declaration "int iVar19;" primitive_type identifier ;) (declaration "BignumInt BVar20;" type_identifier identifier ;) (if_statement "if (mod[*mod] == 0) {\n    pBVar1 = (Bignum_conflict)\n             (*(code *)PTR___assert_fail_000b8b18)\n                       (PTR_PC2_1357_27__000b8348 + -0x7fc,PTR_PC2_1357_27__000b8348 + -0x840,0x3b9,\n                        PTR_PC2_1357_27__000b8348 + -0x62c);\n    return pBVar1;\n  }" if (parenthesized_expression "(mod[*mod] == 0)" ( (binary_expression "mod[*mod] == 0" (subscript_expression "mod[*mod]" identifier [ (pointer_expression "*mod" * identifier) ]) == number_literal) )) (compound_statement "{\n    pBVar1 = (Bignum_conflict)\n             (*(code *)PTR___assert_fail_000b8b18)\n                       (PTR_PC2_1357_27__000b8348 + -0x7fc,PTR_PC2_1357_27__000b8348 + -0x840,0x3b9,\n                        PTR_PC2_1357_27__000b8348 + -0x62c);\n    return pBVar1;\n  }" { (expression_statement "pBVar1 = (Bignum_conflict)\n             (*(code *)PTR___assert_fail_000b8b18)\n                       (PTR_PC2_1357_27__000b8348 + -0x7fc,PTR_PC2_1357_27__000b8348 + -0x840,0x3b9,\n                        PTR_PC2_1357_27__000b8348 + -0x62c);" (assignment_expression "pBVar1 = (Bignum_conflict)\n             (*(code *)PTR___assert_fail_000b8b18)\n                       (PTR_PC2_1357_27__000b8348 + -0x7fc,PTR_PC2_1357_27__000b8348 + -0x840,0x3b9,\n                        PTR_PC2_1357_27__000b8348 + -0x62c)" identifier = (call_expression "(Bignum_conflict)\n             (*(code *)PTR___assert_fail_000b8b18)\n                       (PTR_PC2_1357_27__000b8348 + -0x7fc,PTR_PC2_1357_27__000b8348 + -0x840,0x3b9,\n                        PTR_PC2_1357_27__000b8348 + -0x62c)" (call_expression "(Bignum_conflict)\n             (*(code *)PTR___assert_fail_000b8b18)" (parenthesized_expression "(Bignum_conflict)" ( identifier )) (argument_list "(*(code *)PTR___assert_fail_000b8b18)" ( (pointer_expression "*(code *)PTR___assert_fail_000b8b18" * (cast_expression "(code *)PTR___assert_fail_000b8b18" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ))) (argument_list "(PTR_PC2_1357_27__000b8348 + -0x7fc,PTR_PC2_1357_27__000b8348 + -0x840,0x3b9,\n                        PTR_PC2_1357_27__000b8348 + -0x62c)" ( (binary_expression "PTR_PC2_1357_27__000b8348 + -0x7fc" identifier + number_literal) , (binary_expression "PTR_PC2_1357_27__000b8348 + -0x840" identifier + number_literal) , number_literal , (binary_expression "PTR_PC2_1357_27__000b8348 + -0x62c" identifier + number_literal) )))) ;) (return_statement "return pBVar1;" return identifier ;) })) (expression_statement "pBVar1 = bigmod(base_in,mod);" (assignment_expression "pBVar1 = bigmod(base_in,mod)" identifier = (call_expression "bigmod(base_in,mod)" identifier (argument_list "(base_in,mod)" ( identifier , identifier )))) ;) (expression_statement "len = *mod;" (assignment_expression "len = *mod" identifier = (pointer_expression "*mod" * identifier)) ;) (expression_statement "pBVar2 = (BignumInt *)(*(code *)PTR_safemalloc_000b82f8)(len,4);" (assignment_expression "pBVar2 = (BignumInt *)(*(code *)PTR_safemalloc_000b82f8)(len,4)" identifier = (cast_expression "(BignumInt *)(*(code *)PTR_safemalloc_000b82f8)(len,4)" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000b82f8)(len,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b82f8)" ( (pointer_expression "*(code *)PTR_safemalloc_000b82f8" * (cast_expression "(code *)PTR_safemalloc_000b82f8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(len,4)" ( identifier , number_literal ))))) ;) (if_statement "if (0 < (int)len) {\n    BVar13 = 0;\n    pBVar16 = pBVar2;\n    do {\n      *pBVar16 = mod[*mod - BVar13];\n      BVar13 = BVar13 + 1;\n      pBVar16 = pBVar16 + 1;\n    } while (len != BVar13);\n  }" if (parenthesized_expression "(0 < (int)len)" ( (binary_expression "0 < (int)len" number_literal < (cast_expression "(int)len" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    BVar13 = 0;\n    pBVar16 = pBVar2;\n    do {\n      *pBVar16 = mod[*mod - BVar13];\n      BVar13 = BVar13 + 1;\n      pBVar16 = pBVar16 + 1;\n    } while (len != BVar13);\n  }" { (expression_statement "BVar13 = 0;" (assignment_expression "BVar13 = 0" identifier = number_literal) ;) (expression_statement "pBVar16 = pBVar2;" (assignment_expression "pBVar16 = pBVar2" identifier = identifier) ;) (do_statement "do {\n      *pBVar16 = mod[*mod - BVar13];\n      BVar13 = BVar13 + 1;\n      pBVar16 = pBVar16 + 1;\n    } while (len != BVar13);" do (compound_statement "{\n      *pBVar16 = mod[*mod - BVar13];\n      BVar13 = BVar13 + 1;\n      pBVar16 = pBVar16 + 1;\n    }" { (expression_statement "*pBVar16 = mod[*mod - BVar13];" (assignment_expression "*pBVar16 = mod[*mod - BVar13]" (pointer_expression "*pBVar16" * identifier) = (subscript_expression "mod[*mod - BVar13]" identifier [ (binary_expression "*mod - BVar13" (pointer_expression "*mod" * identifier) - identifier) ])) ;) (expression_statement "BVar13 = BVar13 + 1;" (assignment_expression "BVar13 = BVar13 + 1" identifier = (binary_expression "BVar13 + 1" identifier + number_literal)) ;) (expression_statement "pBVar16 = pBVar16 + 1;" (assignment_expression "pBVar16 = pBVar16 + 1" identifier = (binary_expression "pBVar16 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(len != BVar13)" ( (binary_expression "len != BVar13" identifier != identifier) )) ;) })) (expression_statement "puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(len,4);" (assignment_expression "puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(len,4)" identifier = (cast_expression "(undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(len,4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000b82f8)(len,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b82f8)" ( (pointer_expression "*(code *)PTR_safemalloc_000b82f8" * (cast_expression "(code *)PTR_safemalloc_000b82f8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(len,4)" ( identifier , number_literal ))))) ;) (expression_statement "iVar14 = len - *pBVar1;" (assignment_expression "iVar14 = len - *pBVar1" identifier = (binary_expression "len - *pBVar1" identifier - (pointer_expression "*pBVar1" * identifier))) ;) (if_statement "if (0 < iVar14) {\n    puVar5 = puVar3;\n    do {\n      *puVar5 = 0;\n      puVar5 = puVar5 + 1;\n    } while (puVar5 != puVar3 + iVar14);\n  }" if (parenthesized_expression "(0 < iVar14)" ( (binary_expression "0 < iVar14" number_literal < identifier) )) (compound_statement "{\n    puVar5 = puVar3;\n    do {\n      *puVar5 = 0;\n      puVar5 = puVar5 + 1;\n    } while (puVar5 != puVar3 + iVar14);\n  }" { (expression_statement "puVar5 = puVar3;" (assignment_expression "puVar5 = puVar3" identifier = identifier) ;) (do_statement "do {\n      *puVar5 = 0;\n      puVar5 = puVar5 + 1;\n    } while (puVar5 != puVar3 + iVar14);" do (compound_statement "{\n      *puVar5 = 0;\n      puVar5 = puVar5 + 1;\n    }" { (expression_statement "*puVar5 = 0;" (assignment_expression "*puVar5 = 0" (pointer_expression "*puVar5" * identifier) = number_literal) ;) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" identifier = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar5 != puVar3 + iVar14)" ( (binary_expression "puVar5 != puVar3 + iVar14" identifier != (binary_expression "puVar3 + iVar14" identifier + identifier)) )) ;) })) (expression_statement "BVar13 = *pBVar1;" (assignment_expression "BVar13 = *pBVar1" identifier = (pointer_expression "*pBVar1" * identifier)) ;) (if_statement "if (0 < (int)BVar13) {\n    pBVar16 = puVar3 + iVar14;\n    iVar14 = 0;\n    do {\n      *pBVar16 = pBVar1[BVar13 - iVar14];\n      iVar14 = iVar14 + 1;\n      BVar13 = *pBVar1;\n      pBVar16 = pBVar16 + 1;\n    } while (iVar14 < (int)BVar13);\n  }" if (parenthesized_expression "(0 < (int)BVar13)" ( (binary_expression "0 < (int)BVar13" number_literal < (cast_expression "(int)BVar13" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    pBVar16 = puVar3 + iVar14;\n    iVar14 = 0;\n    do {\n      *pBVar16 = pBVar1[BVar13 - iVar14];\n      iVar14 = iVar14 + 1;\n      BVar13 = *pBVar1;\n      pBVar16 = pBVar16 + 1;\n    } while (iVar14 < (int)BVar13);\n  }" { (expression_statement "pBVar16 = puVar3 + iVar14;" (assignment_expression "pBVar16 = puVar3 + iVar14" identifier = (binary_expression "puVar3 + iVar14" identifier + identifier)) ;) (expression_statement "iVar14 = 0;" (assignment_expression "iVar14 = 0" identifier = number_literal) ;) (do_statement "do {\n      *pBVar16 = pBVar1[BVar13 - iVar14];\n      iVar14 = iVar14 + 1;\n      BVar13 = *pBVar1;\n      pBVar16 = pBVar16 + 1;\n    } while (iVar14 < (int)BVar13);" do (compound_statement "{\n      *pBVar16 = pBVar1[BVar13 - iVar14];\n      iVar14 = iVar14 + 1;\n      BVar13 = *pBVar1;\n      pBVar16 = pBVar16 + 1;\n    }" { (expression_statement "*pBVar16 = pBVar1[BVar13 - iVar14];" (assignment_expression "*pBVar16 = pBVar1[BVar13 - iVar14]" (pointer_expression "*pBVar16" * identifier) = (subscript_expression "pBVar1[BVar13 - iVar14]" identifier [ (binary_expression "BVar13 - iVar14" identifier - identifier) ])) ;) (expression_statement "iVar14 = iVar14 + 1;" (assignment_expression "iVar14 = iVar14 + 1" identifier = (binary_expression "iVar14 + 1" identifier + number_literal)) ;) (expression_statement "BVar13 = *pBVar1;" (assignment_expression "BVar13 = *pBVar1" identifier = (pointer_expression "*pBVar1" * identifier)) ;) (expression_statement "pBVar16 = pBVar16 + 1;" (assignment_expression "pBVar16 = pBVar16 + 1" identifier = (binary_expression "pBVar16 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar14 < (int)BVar13)" ( (binary_expression "iVar14 < (int)BVar13" identifier < (cast_expression "(int)BVar13" ( (type_descriptor "int" primitive_type) ) identifier)) )) ;) })) (expression_statement "iVar14 = len << 1;" (assignment_expression "iVar14 = len << 1" identifier = (binary_expression "len << 1" identifier << number_literal)) ;) (expression_statement "puVar4 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar14,4);" (assignment_expression "puVar4 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar14,4)" identifier = (cast_expression "(undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar14,4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000b82f8)(iVar14,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b82f8)" ( (pointer_expression "*(code *)PTR_safemalloc_000b82f8" * (cast_expression "(code *)PTR_safemalloc_000b82f8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar14,4)" ( identifier , number_literal ))))) ;) (expression_statement "puVar5 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar14,4);" (assignment_expression "puVar5 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar14,4)" identifier = (cast_expression "(undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar14,4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000b82f8)(iVar14,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b82f8)" ( (pointer_expression "*(code *)PTR_safemalloc_000b82f8" * (cast_expression "(code *)PTR_safemalloc_000b82f8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar14,4)" ( identifier , number_literal ))))) ;) (if_statement "if (0 < iVar14) {\n    puVar6 = puVar4;\n    do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (puVar6 != puVar4 + len * 2);\n  }" if (parenthesized_expression "(0 < iVar14)" ( (binary_expression "0 < iVar14" number_literal < identifier) )) (compound_statement "{\n    puVar6 = puVar4;\n    do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (puVar6 != puVar4 + len * 2);\n  }" { (expression_statement "puVar6 = puVar4;" (assignment_expression "puVar6 = puVar4" identifier = identifier) ;) (do_statement "do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (puVar6 != puVar4 + len * 2);" do (compound_statement "{\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    }" { (expression_statement "*puVar6 = 0;" (assignment_expression "*puVar6 = 0" (pointer_expression "*puVar6" * identifier) = number_literal) ;) (expression_statement "puVar6 = puVar6 + 1;" (assignment_expression "puVar6 = puVar6 + 1" identifier = (binary_expression "puVar6 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar6 != puVar4 + len * 2)" ( (binary_expression "puVar6 != puVar4 + len * 2" identifier != (binary_expression "puVar4 + len * 2" identifier + (binary_expression "len * 2" identifier * number_literal))) )) ;) })) (expression_statement "puVar4[len * 2 + -1] = 1;" (assignment_expression "puVar4[len * 2 + -1] = 1" (subscript_expression "puVar4[len * 2 + -1]" identifier [ (binary_expression "len * 2 + -1" (binary_expression "len * 2" identifier * number_literal) + number_literal) ]) = number_literal) ;) (expression_statement "iVar7 = mul_compute_scratch(len);" (assignment_expression "iVar7 = mul_compute_scratch(len)" identifier = (call_expression "mul_compute_scratch(len)" identifier (argument_list "(len)" ( identifier )))) ;) (expression_statement "uVar8 = (*(code *)PTR_safemalloc_000b82f8)(iVar7,4);" (assignment_expression "uVar8 = (*(code *)PTR_safemalloc_000b82f8)(iVar7,4)" identifier = (call_expression "(*(code *)PTR_safemalloc_000b82f8)(iVar7,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b82f8)" ( (pointer_expression "*(code *)PTR_safemalloc_000b82f8" * (cast_expression "(code *)PTR_safemalloc_000b82f8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar7,4)" ( identifier , number_literal )))) ;) (expression_statement "BVar13 = *exp;" (assignment_expression "BVar13 = *exp" identifier = (pointer_expression "*exp" * identifier)) ;) (expression_statement "iVar19 = 0;" (assignment_expression "iVar19 = 0" identifier = number_literal) ;) (labeled_statement "LAB_000561f0:\n  uVar17 = 0x1f;" statement_identifier : (expression_statement "uVar17 = 0x1f;" (assignment_expression "uVar17 = 0x1f" identifier = number_literal) ;)) (while_statement "while (iVar19 < (int)BVar13) {\n    if ((1 << (uVar17 & 0x1f) & exp[BVar13 - iVar19]) != 0) {\n      BVar20 = *pBVar2;\n      uVar9 = bn_clz(BVar20);\n      if (uVar9 != 0) goto LAB_00056608;\n      BVar20 = reciprocal_word(BVar20);\n      goto LAB_000563c4;\n    }\n    uVar17 = uVar17 - 1;\n    if (uVar17 == 0xffffffff) goto code_r0x00056228;\n  }" while (parenthesized_expression "(iVar19 < (int)BVar13)" ( (binary_expression "iVar19 < (int)BVar13" identifier < (cast_expression "(int)BVar13" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    if ((1 << (uVar17 & 0x1f) & exp[BVar13 - iVar19]) != 0) {\n      BVar20 = *pBVar2;\n      uVar9 = bn_clz(BVar20);\n      if (uVar9 != 0) goto LAB_00056608;\n      BVar20 = reciprocal_word(BVar20);\n      goto LAB_000563c4;\n    }\n    uVar17 = uVar17 - 1;\n    if (uVar17 == 0xffffffff) goto code_r0x00056228;\n  }" { (if_statement "if ((1 << (uVar17 & 0x1f) & exp[BVar13 - iVar19]) != 0) {\n      BVar20 = *pBVar2;\n      uVar9 = bn_clz(BVar20);\n      if (uVar9 != 0) goto LAB_00056608;\n      BVar20 = reciprocal_word(BVar20);\n      goto LAB_000563c4;\n    }" if (parenthesized_expression "((1 << (uVar17 & 0x1f) & exp[BVar13 - iVar19]) != 0)" ( (binary_expression "(1 << (uVar17 & 0x1f) & exp[BVar13 - iVar19]) != 0" (parenthesized_expression "(1 << (uVar17 & 0x1f) & exp[BVar13 - iVar19])" ( (binary_expression "1 << (uVar17 & 0x1f) & exp[BVar13 - iVar19]" (binary_expression "1 << (uVar17 & 0x1f)" number_literal << (parenthesized_expression "(uVar17 & 0x1f)" ( (binary_expression "uVar17 & 0x1f" identifier & number_literal) ))) & (subscript_expression "exp[BVar13 - iVar19]" identifier [ (binary_expression "BVar13 - iVar19" identifier - identifier) ])) )) != number_literal) )) (compound_statement "{\n      BVar20 = *pBVar2;\n      uVar9 = bn_clz(BVar20);\n      if (uVar9 != 0) goto LAB_00056608;\n      BVar20 = reciprocal_word(BVar20);\n      goto LAB_000563c4;\n    }" { (expression_statement "BVar20 = *pBVar2;" (assignment_expression "BVar20 = *pBVar2" identifier = (pointer_expression "*pBVar2" * identifier)) ;) (expression_statement "uVar9 = bn_clz(BVar20);" (assignment_expression "uVar9 = bn_clz(BVar20)" identifier = (call_expression "bn_clz(BVar20)" identifier (argument_list "(BVar20)" ( identifier )))) ;) (if_statement "if (uVar9 != 0) goto LAB_00056608;" if (parenthesized_expression "(uVar9 != 0)" ( (binary_expression "uVar9 != 0" identifier != number_literal) )) (goto_statement "goto LAB_00056608;" goto statement_identifier ;)) (expression_statement "BVar20 = reciprocal_word(BVar20);" (assignment_expression "BVar20 = reciprocal_word(BVar20)" identifier = (call_expression "reciprocal_word(BVar20)" identifier (argument_list "(BVar20)" ( identifier )))) ;) (goto_statement "goto LAB_000563c4;" goto statement_identifier ;) })) (expression_statement "uVar17 = uVar17 - 1;" (assignment_expression "uVar17 = uVar17 - 1" identifier = (binary_expression "uVar17 - 1" identifier - number_literal)) ;) (if_statement "if (uVar17 == 0xffffffff) goto code_r0x00056228;" if (parenthesized_expression "(uVar17 == 0xffffffff)" ( (binary_expression "uVar17 == 0xffffffff" identifier == number_literal) )) (goto_statement "goto code_r0x00056228;" goto statement_identifier ;)) })) (expression_statement "BVar20 = *pBVar2;" (assignment_expression "BVar20 = *pBVar2" identifier = (pointer_expression "*pBVar2" * identifier)) ;) (expression_statement "uVar9 = bn_clz(BVar20);" (assignment_expression "uVar9 = bn_clz(BVar20)" identifier = (call_expression "bn_clz(BVar20)" identifier (argument_list "(BVar20)" ( identifier )))) ;) (if_statement "if (uVar9 == 0) {\n    reciprocal_word(BVar20);\n    goto LAB_00056404;\n  }" if (parenthesized_expression "(uVar9 == 0)" ( (binary_expression "uVar9 == 0" identifier == number_literal) )) (compound_statement "{\n    reciprocal_word(BVar20);\n    goto LAB_00056404;\n  }" { (expression_statement "reciprocal_word(BVar20);" (call_expression "reciprocal_word(BVar20)" identifier (argument_list "(BVar20)" ( identifier ))) ;) (goto_statement "goto LAB_00056404;" goto statement_identifier ;) })) (labeled_statement "LAB_00056608:\n  BVar20 = BVar20 << (uVar9 & 0x1f);" statement_identifier : (expression_statement "BVar20 = BVar20 << (uVar9 & 0x1f);" (assignment_expression "BVar20 = BVar20 << (uVar9 & 0x1f)" identifier = (binary_expression "BVar20 << (uVar9 & 0x1f)" identifier << (parenthesized_expression "(uVar9 & 0x1f)" ( (binary_expression "uVar9 & 0x1f" identifier & number_literal) )))) ;)) (if_statement "if ((int)len < 2) {\n    BVar20 = reciprocal_word(BVar20);\n    if ((int)BVar13 <= iVar19) goto LAB_00056404;\n  }\n  else {\n    BVar20 = reciprocal_word(pBVar2[1] >> (-uVar9 & 0x1f) | BVar20);\n    if ((int)BVar13 <= iVar19) {\n      pBVar12 = newbn(*mod);\n      goto LAB_0005642c;\n    }\n  }" if (parenthesized_expression "((int)len < 2)" ( (binary_expression "(int)len < 2" (cast_expression "(int)len" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n    BVar20 = reciprocal_word(BVar20);\n    if ((int)BVar13 <= iVar19) goto LAB_00056404;\n  }" { (expression_statement "BVar20 = reciprocal_word(BVar20);" (assignment_expression "BVar20 = reciprocal_word(BVar20)" identifier = (call_expression "reciprocal_word(BVar20)" identifier (argument_list "(BVar20)" ( identifier )))) ;) (if_statement "if ((int)BVar13 <= iVar19) goto LAB_00056404;" if (parenthesized_expression "((int)BVar13 <= iVar19)" ( (binary_expression "(int)BVar13 <= iVar19" (cast_expression "(int)BVar13" ( (type_descriptor "int" primitive_type) ) identifier) <= identifier) )) (goto_statement "goto LAB_00056404;" goto statement_identifier ;)) }) (else_clause "else {\n    BVar20 = reciprocal_word(pBVar2[1] >> (-uVar9 & 0x1f) | BVar20);\n    if ((int)BVar13 <= iVar19) {\n      pBVar12 = newbn(*mod);\n      goto LAB_0005642c;\n    }\n  }" else (compound_statement "{\n    BVar20 = reciprocal_word(pBVar2[1] >> (-uVar9 & 0x1f) | BVar20);\n    if ((int)BVar13 <= iVar19) {\n      pBVar12 = newbn(*mod);\n      goto LAB_0005642c;\n    }\n  }" { (expression_statement "BVar20 = reciprocal_word(pBVar2[1] >> (-uVar9 & 0x1f) | BVar20);" (assignment_expression "BVar20 = reciprocal_word(pBVar2[1] >> (-uVar9 & 0x1f) | BVar20)" identifier = (call_expression "reciprocal_word(pBVar2[1] >> (-uVar9 & 0x1f) | BVar20)" identifier (argument_list "(pBVar2[1] >> (-uVar9 & 0x1f) | BVar20)" ( (binary_expression "pBVar2[1] >> (-uVar9 & 0x1f) | BVar20" (binary_expression "pBVar2[1] >> (-uVar9 & 0x1f)" (subscript_expression "pBVar2[1]" identifier [ number_literal ]) >> (parenthesized_expression "(-uVar9 & 0x1f)" ( (binary_expression "-uVar9 & 0x1f" (unary_expression "-uVar9" - identifier) & number_literal) ))) | identifier) )))) ;) (if_statement "if ((int)BVar13 <= iVar19) {\n      pBVar12 = newbn(*mod);\n      goto LAB_0005642c;\n    }" if (parenthesized_expression "((int)BVar13 <= iVar19)" ( (binary_expression "(int)BVar13 <= iVar19" (cast_expression "(int)BVar13" ( (type_descriptor "int" primitive_type) ) identifier) <= identifier) )) (compound_statement "{\n      pBVar12 = newbn(*mod);\n      goto LAB_0005642c;\n    }" { (expression_statement "pBVar12 = newbn(*mod);" (assignment_expression "pBVar12 = newbn(*mod)" identifier = (call_expression "newbn(*mod)" identifier (argument_list "(*mod)" ( (pointer_expression "*mod" * identifier) )))) ;) (goto_statement "goto LAB_0005642c;" goto statement_identifier ;) })) }))) (labeled_statement "LAB_000563c4:\n  pcVar10 = (code *)(PTR_LAB_000b8640 + 0x2da0);" statement_identifier : (expression_statement "pcVar10 = (code *)(PTR_LAB_000b8640 + 0x2da0);" (assignment_expression "pcVar10 = (code *)(PTR_LAB_000b8640 + 0x2da0)" identifier = (cast_expression "(code *)(PTR_LAB_000b8640 + 0x2da0)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000b8640 + 0x2da0)" ( (binary_expression "PTR_LAB_000b8640 + 0x2da0" identifier + number_literal) )))) ;)) (expression_statement "pcVar11 = (code *)(PTR_LAB_000b8640 + 0x37b8);" (assignment_expression "pcVar11 = (code *)(PTR_LAB_000b8640 + 0x37b8)" identifier = (cast_expression "(code *)(PTR_LAB_000b8640 + 0x37b8)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000b8640 + 0x37b8)" ( (binary_expression "PTR_LAB_000b8640 + 0x37b8" identifier + number_literal) )))) ;) (do_statement "do {\n    puVar6 = puVar5;\n    puVar18 = puVar4;\n    if (-1 < (int)uVar17) {\n      do {\n        (*pcVar10)(puVar18 + len,puVar18 + len,puVar6,len,uVar8);\n        (*pcVar11)(puVar6,iVar14,pBVar2,len,0,BVar20,uVar9);\n        puVar5 = puVar18;\n        puVar4 = puVar6;\n        if ((1 << (uVar17 & 0x1f) & exp[*exp - iVar19]) != 0) {\n          (*pcVar10)(puVar6 + len,puVar3,puVar18,len,uVar8);\n          (*pcVar11)(puVar18,iVar14,pBVar2,len,0,BVar20,uVar9);\n          puVar5 = puVar6;\n          puVar4 = puVar18;\n        }\n        uVar17 = uVar17 - 1;\n        puVar6 = puVar5;\n        puVar18 = puVar4;\n      } while (uVar17 != 0xffffffff);\n    }\n    iVar19 = iVar19 + 1;\n    uVar17 = 0x1f;\n  } while (iVar19 < (int)*exp);" do (compound_statement "{\n    puVar6 = puVar5;\n    puVar18 = puVar4;\n    if (-1 < (int)uVar17) {\n      do {\n        (*pcVar10)(puVar18 + len,puVar18 + len,puVar6,len,uVar8);\n        (*pcVar11)(puVar6,iVar14,pBVar2,len,0,BVar20,uVar9);\n        puVar5 = puVar18;\n        puVar4 = puVar6;\n        if ((1 << (uVar17 & 0x1f) & exp[*exp - iVar19]) != 0) {\n          (*pcVar10)(puVar6 + len,puVar3,puVar18,len,uVar8);\n          (*pcVar11)(puVar18,iVar14,pBVar2,len,0,BVar20,uVar9);\n          puVar5 = puVar6;\n          puVar4 = puVar18;\n        }\n        uVar17 = uVar17 - 1;\n        puVar6 = puVar5;\n        puVar18 = puVar4;\n      } while (uVar17 != 0xffffffff);\n    }\n    iVar19 = iVar19 + 1;\n    uVar17 = 0x1f;\n  }" { (expression_statement "puVar6 = puVar5;" (assignment_expression "puVar6 = puVar5" identifier = identifier) ;) (expression_statement "puVar18 = puVar4;" (assignment_expression "puVar18 = puVar4" identifier = identifier) ;) (if_statement "if (-1 < (int)uVar17) {\n      do {\n        (*pcVar10)(puVar18 + len,puVar18 + len,puVar6,len,uVar8);\n        (*pcVar11)(puVar6,iVar14,pBVar2,len,0,BVar20,uVar9);\n        puVar5 = puVar18;\n        puVar4 = puVar6;\n        if ((1 << (uVar17 & 0x1f) & exp[*exp - iVar19]) != 0) {\n          (*pcVar10)(puVar6 + len,puVar3,puVar18,len,uVar8);\n          (*pcVar11)(puVar18,iVar14,pBVar2,len,0,BVar20,uVar9);\n          puVar5 = puVar6;\n          puVar4 = puVar18;\n        }\n        uVar17 = uVar17 - 1;\n        puVar6 = puVar5;\n        puVar18 = puVar4;\n      } while (uVar17 != 0xffffffff);\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      do {\n        (*pcVar10)(puVar18 + len,puVar18 + len,puVar6,len,uVar8);\n        (*pcVar11)(puVar6,iVar14,pBVar2,len,0,BVar20,uVar9);\n        puVar5 = puVar18;\n        puVar4 = puVar6;\n        if ((1 << (uVar17 & 0x1f) & exp[*exp - iVar19]) != 0) {\n          (*pcVar10)(puVar6 + len,puVar3,puVar18,len,uVar8);\n          (*pcVar11)(puVar18,iVar14,pBVar2,len,0,BVar20,uVar9);\n          puVar5 = puVar6;\n          puVar4 = puVar18;\n        }\n        uVar17 = uVar17 - 1;\n        puVar6 = puVar5;\n        puVar18 = puVar4;\n      } while (uVar17 != 0xffffffff);\n    }" { (do_statement "do {\n        (*pcVar10)(puVar18 + len,puVar18 + len,puVar6,len,uVar8);\n        (*pcVar11)(puVar6,iVar14,pBVar2,len,0,BVar20,uVar9);\n        puVar5 = puVar18;\n        puVar4 = puVar6;\n        if ((1 << (uVar17 & 0x1f) & exp[*exp - iVar19]) != 0) {\n          (*pcVar10)(puVar6 + len,puVar3,puVar18,len,uVar8);\n          (*pcVar11)(puVar18,iVar14,pBVar2,len,0,BVar20,uVar9);\n          puVar5 = puVar6;\n          puVar4 = puVar18;\n        }\n        uVar17 = uVar17 - 1;\n        puVar6 = puVar5;\n        puVar18 = puVar4;\n      } while (uVar17 != 0xffffffff);" do (compound_statement "{\n        (*pcVar10)(puVar18 + len,puVar18 + len,puVar6,len,uVar8);\n        (*pcVar11)(puVar6,iVar14,pBVar2,len,0,BVar20,uVar9);\n        puVar5 = puVar18;\n        puVar4 = puVar6;\n        if ((1 << (uVar17 & 0x1f) & exp[*exp - iVar19]) != 0) {\n          (*pcVar10)(puVar6 + len,puVar3,puVar18,len,uVar8);\n          (*pcVar11)(puVar18,iVar14,pBVar2,len,0,BVar20,uVar9);\n          puVar5 = puVar6;\n          puVar4 = puVar18;\n        }\n        uVar17 = uVar17 - 1;\n        puVar6 = puVar5;\n        puVar18 = puVar4;\n      }" { (expression_statement "(*pcVar10)(puVar18 + len,puVar18 + len,puVar6,len,uVar8);" (call_expression "(*pcVar10)(puVar18 + len,puVar18 + len,puVar6,len,uVar8)" (parenthesized_expression "(*pcVar10)" ( (pointer_expression "*pcVar10" * identifier) )) (argument_list "(puVar18 + len,puVar18 + len,puVar6,len,uVar8)" ( (binary_expression "puVar18 + len" identifier + identifier) , (binary_expression "puVar18 + len" identifier + identifier) , identifier , identifier , identifier ))) ;) (expression_statement "(*pcVar11)(puVar6,iVar14,pBVar2,len,0,BVar20,uVar9);" (call_expression "(*pcVar11)(puVar6,iVar14,pBVar2,len,0,BVar20,uVar9)" (parenthesized_expression "(*pcVar11)" ( (pointer_expression "*pcVar11" * identifier) )) (argument_list "(puVar6,iVar14,pBVar2,len,0,BVar20,uVar9)" ( identifier , identifier , identifier , identifier , number_literal , identifier , identifier ))) ;) (expression_statement "puVar5 = puVar18;" (assignment_expression "puVar5 = puVar18" identifier = identifier) ;) (expression_statement "puVar4 = puVar6;" (assignment_expression "puVar4 = puVar6" identifier = identifier) ;) (if_statement "if ((1 << (uVar17 & 0x1f) & exp[*exp - iVar19]) != 0) {\n          (*pcVar10)(puVar6 + len,puVar3,puVar18,len,uVar8);\n          (*pcVar11)(puVar18,iVar14,pBVar2,len,0,BVar20,uVar9);\n          puVar5 = puVar6;\n          puVar4 = puVar18;\n        }" if (parenthesized_expression "((1 << (uVar17 & 0x1f) & exp[*exp - iVar19]) != 0)" ( (binary_expression "(1 << (uVar17 & 0x1f) & exp[*exp - iVar19]) != 0" (parenthesized_expression "(1 << (uVar17 & 0x1f) & exp[*exp - iVar19])" ( (binary_expression "1 << (uVar17 & 0x1f) & exp[*exp - iVar19]" (binary_expression "1 << (uVar17 & 0x1f)" number_literal << (parenthesized_expression "(uVar17 & 0x1f)" ( (binary_expression "uVar17 & 0x1f" identifier & number_literal) ))) & (subscript_expression "exp[*exp - iVar19]" identifier [ (binary_expression "*exp - iVar19" (pointer_expression "*exp" * identifier) - identifier) ])) )) != number_literal) )) (compound_statement "{\n          (*pcVar10)(puVar6 + len,puVar3,puVar18,len,uVar8);\n          (*pcVar11)(puVar18,iVar14,pBVar2,len,0,BVar20,uVar9);\n          puVar5 = puVar6;\n          puVar4 = puVar18;\n        }" { (expression_statement "(*pcVar10)(puVar6 + len,puVar3,puVar18,len,uVar8);" (call_expression "(*pcVar10)(puVar6 + len,puVar3,puVar18,len,uVar8)" (parenthesized_expression "(*pcVar10)" ( (pointer_expression "*pcVar10" * identifier) )) (argument_list "(puVar6 + len,puVar3,puVar18,len,uVar8)" ( (binary_expression "puVar6 + len" identifier + identifier) , identifier , identifier , identifier , identifier ))) ;) (expression_statement "(*pcVar11)(puVar18,iVar14,pBVar2,len,0,BVar20,uVar9);" (call_expression "(*pcVar11)(puVar18,iVar14,pBVar2,len,0,BVar20,uVar9)" (parenthesized_expression "(*pcVar11)" ( (pointer_expression "*pcVar11" * identifier) )) (argument_list "(puVar18,iVar14,pBVar2,len,0,BVar20,uVar9)" ( identifier , identifier , identifier , identifier , number_literal , identifier , identifier ))) ;) (expression_statement "puVar5 = puVar6;" (assignment_expression "puVar5 = puVar6" identifier = identifier) ;) (expression_statement "puVar4 = puVar18;" (assignment_expression "puVar4 = puVar18" identifier = identifier) ;) })) (expression_statement "uVar17 = uVar17 - 1;" (assignment_expression "uVar17 = uVar17 - 1" identifier = (binary_expression "uVar17 - 1" identifier - number_literal)) ;) (expression_statement "puVar6 = puVar5;" (assignment_expression "puVar6 = puVar5" identifier = identifier) ;) (expression_statement "puVar18 = puVar4;" (assignment_expression "puVar18 = puVar4" identifier = identifier) ;) }) while (parenthesized_expression "(uVar17 != 0xffffffff)" ( (binary_expression "uVar17 != 0xffffffff" identifier != number_literal) )) ;) })) (expression_statement "iVar19 = iVar19 + 1;" (assignment_expression "iVar19 = iVar19 + 1" identifier = (binary_expression "iVar19 + 1" identifier + number_literal)) ;) (expression_statement "uVar17 = 0x1f;" (assignment_expression "uVar17 = 0x1f" identifier = number_literal) ;) }) while (parenthesized_expression "(iVar19 < (int)*exp)" ( (binary_expression "iVar19 < (int)*exp" identifier < (cast_expression "(int)*exp" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*exp" * identifier))) )) ;) (labeled_statement "LAB_00056404:\n  pBVar12 = newbn(*mod);" statement_identifier : (expression_statement "pBVar12 = newbn(*mod);" (assignment_expression "pBVar12 = newbn(*mod)" identifier = (call_expression "newbn(*mod)" identifier (argument_list "(*mod)" ( (pointer_expression "*mod" * identifier) )))) ;)) (if_statement "if (0 < (int)len) {\nLAB_0005642c:\n    pBVar16 = puVar4 + len;\n    iVar14 = 0;\n    do {\n      pBVar12[*pBVar12 - iVar14] = *pBVar16;\n      iVar14 = iVar14 + 1;\n      pBVar16 = pBVar16 + 1;\n    } while (iVar14 < (int)len);\n  }" if (parenthesized_expression "(0 < (int)len)" ( (binary_expression "0 < (int)len" number_literal < (cast_expression "(int)len" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\nLAB_0005642c:\n    pBVar16 = puVar4 + len;\n    iVar14 = 0;\n    do {\n      pBVar12[*pBVar12 - iVar14] = *pBVar16;\n      iVar14 = iVar14 + 1;\n      pBVar16 = pBVar16 + 1;\n    } while (iVar14 < (int)len);\n  }" { (labeled_statement "LAB_0005642c:\n    pBVar16 = puVar4 + len;" statement_identifier : (expression_statement "pBVar16 = puVar4 + len;" (assignment_expression "pBVar16 = puVar4 + len" identifier = (binary_expression "puVar4 + len" identifier + identifier)) ;)) (expression_statement "iVar14 = 0;" (assignment_expression "iVar14 = 0" identifier = number_literal) ;) (do_statement "do {\n      pBVar12[*pBVar12 - iVar14] = *pBVar16;\n      iVar14 = iVar14 + 1;\n      pBVar16 = pBVar16 + 1;\n    } while (iVar14 < (int)len);" do (compound_statement "{\n      pBVar12[*pBVar12 - iVar14] = *pBVar16;\n      iVar14 = iVar14 + 1;\n      pBVar16 = pBVar16 + 1;\n    }" { (expression_statement "pBVar12[*pBVar12 - iVar14] = *pBVar16;" (assignment_expression "pBVar12[*pBVar12 - iVar14] = *pBVar16" (subscript_expression "pBVar12[*pBVar12 - iVar14]" identifier [ (binary_expression "*pBVar12 - iVar14" (pointer_expression "*pBVar12" * identifier) - identifier) ]) = (pointer_expression "*pBVar16" * identifier)) ;) (expression_statement "iVar14 = iVar14 + 1;" (assignment_expression "iVar14 = iVar14 + 1" identifier = (binary_expression "iVar14 + 1" identifier + number_literal)) ;) (expression_statement "pBVar16 = pBVar16 + 1;" (assignment_expression "pBVar16 = pBVar16 + 1" identifier = (binary_expression "pBVar16 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar14 < (int)len)" ( (binary_expression "iVar14 < (int)len" identifier < (cast_expression "(int)len" ( (type_descriptor "int" primitive_type) ) identifier)) )) ;) })) (expression_statement "BVar13 = *pBVar12;" (assignment_expression "BVar13 = *pBVar12" identifier = (pointer_expression "*pBVar12" * identifier)) ;) (if_statement "if (1 < BVar13) {\n    pBVar15 = pBVar12 + BVar13;\n    BVar20 = *pBVar15;\n    while (BVar20 == 0) {\n      BVar13 = BVar13 - 1;\n      *pBVar12 = BVar13;\n      if (BVar13 == 1) break;\n      pBVar16 = pBVar15 + -1;\n      pBVar15 = pBVar15 + -1;\n      BVar20 = *pBVar16;\n    }\n  }" if (parenthesized_expression "(1 < BVar13)" ( (binary_expression "1 < BVar13" number_literal < identifier) )) (compound_statement "{\n    pBVar15 = pBVar12 + BVar13;\n    BVar20 = *pBVar15;\n    while (BVar20 == 0) {\n      BVar13 = BVar13 - 1;\n      *pBVar12 = BVar13;\n      if (BVar13 == 1) break;\n      pBVar16 = pBVar15 + -1;\n      pBVar15 = pBVar15 + -1;\n      BVar20 = *pBVar16;\n    }\n  }" { (expression_statement "pBVar15 = pBVar12 + BVar13;" (assignment_expression "pBVar15 = pBVar12 + BVar13" identifier = (binary_expression "pBVar12 + BVar13" identifier + identifier)) ;) (expression_statement "BVar20 = *pBVar15;" (assignment_expression "BVar20 = *pBVar15" identifier = (pointer_expression "*pBVar15" * identifier)) ;) (while_statement "while (BVar20 == 0) {\n      BVar13 = BVar13 - 1;\n      *pBVar12 = BVar13;\n      if (BVar13 == 1) break;\n      pBVar16 = pBVar15 + -1;\n      pBVar15 = pBVar15 + -1;\n      BVar20 = *pBVar16;\n    }" while (parenthesized_expression "(BVar20 == 0)" ( (binary_expression "BVar20 == 0" identifier == number_literal) )) (compound_statement "{\n      BVar13 = BVar13 - 1;\n      *pBVar12 = BVar13;\n      if (BVar13 == 1) break;\n      pBVar16 = pBVar15 + -1;\n      pBVar15 = pBVar15 + -1;\n      BVar20 = *pBVar16;\n    }" { (expression_statement "BVar13 = BVar13 - 1;" (assignment_expression "BVar13 = BVar13 - 1" identifier = (binary_expression "BVar13 - 1" identifier - number_literal)) ;) (expression_statement "*pBVar12 = BVar13;" (assignment_expression "*pBVar12 = BVar13" (pointer_expression "*pBVar12" * identifier) = identifier) ;) (if_statement "if (BVar13 == 1) break;" if (parenthesized_expression "(BVar13 == 1)" ( (binary_expression "BVar13 == 1" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "pBVar16 = pBVar15 + -1;" (assignment_expression "pBVar16 = pBVar15 + -1" identifier = (binary_expression "pBVar15 + -1" identifier + number_literal)) ;) (expression_statement "pBVar15 = pBVar15 + -1;" (assignment_expression "pBVar15 = pBVar15 + -1" identifier = (binary_expression "pBVar15 + -1" identifier + number_literal)) ;) (expression_statement "BVar20 = *pBVar16;" (assignment_expression "BVar20 = *pBVar16" identifier = (pointer_expression "*pBVar16" * identifier)) ;) })) })) (expression_statement "(*(code *)PTR_smemclr_000b8328)(puVar4,len * 8);" (call_expression "(*(code *)PTR_smemclr_000b8328)(puVar4,len * 8)" (parenthesized_expression "(*(code *)PTR_smemclr_000b8328)" ( (pointer_expression "*(code *)PTR_smemclr_000b8328" * (cast_expression "(code *)PTR_smemclr_000b8328" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar4,len * 8)" ( identifier , (binary_expression "len * 8" identifier * number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000b82e8)(puVar4);" (call_expression "(*(code *)PTR_safefree_000b82e8)(puVar4)" (parenthesized_expression "(*(code *)PTR_safefree_000b82e8)" ( (pointer_expression "*(code *)PTR_safefree_000b82e8" * (cast_expression "(code *)PTR_safefree_000b82e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar4)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000b8328)(uVar8,iVar7 << 2);" (call_expression "(*(code *)PTR_smemclr_000b8328)(uVar8,iVar7 << 2)" (parenthesized_expression "(*(code *)PTR_smemclr_000b8328)" ( (pointer_expression "*(code *)PTR_smemclr_000b8328" * (cast_expression "(code *)PTR_smemclr_000b8328" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(uVar8,iVar7 << 2)" ( identifier , (binary_expression "iVar7 << 2" identifier << number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000b82e8)(uVar8);" (call_expression "(*(code *)PTR_safefree_000b82e8)(uVar8)" (parenthesized_expression "(*(code *)PTR_safefree_000b82e8)" ( (pointer_expression "*(code *)PTR_safefree_000b82e8" * (cast_expression "(code *)PTR_safefree_000b82e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(uVar8)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000b8328)(puVar5,len * 8);" (call_expression "(*(code *)PTR_smemclr_000b8328)(puVar5,len * 8)" (parenthesized_expression "(*(code *)PTR_smemclr_000b8328)" ( (pointer_expression "*(code *)PTR_smemclr_000b8328" * (cast_expression "(code *)PTR_smemclr_000b8328" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar5,len * 8)" ( identifier , (binary_expression "len * 8" identifier * number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000b82e8)(puVar5);" (call_expression "(*(code *)PTR_safefree_000b82e8)(puVar5)" (parenthesized_expression "(*(code *)PTR_safefree_000b82e8)" ( (pointer_expression "*(code *)PTR_safefree_000b82e8" * (cast_expression "(code *)PTR_safefree_000b82e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar5)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000b8328)(pBVar2,len << 2);" (call_expression "(*(code *)PTR_smemclr_000b8328)(pBVar2,len << 2)" (parenthesized_expression "(*(code *)PTR_smemclr_000b8328)" ( (pointer_expression "*(code *)PTR_smemclr_000b8328" * (cast_expression "(code *)PTR_smemclr_000b8328" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(pBVar2,len << 2)" ( identifier , (binary_expression "len << 2" identifier << number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000b82e8)(pBVar2);" (call_expression "(*(code *)PTR_safefree_000b82e8)(pBVar2)" (parenthesized_expression "(*(code *)PTR_safefree_000b82e8)" ( (pointer_expression "*(code *)PTR_safefree_000b82e8" * (cast_expression "(code *)PTR_safefree_000b82e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(pBVar2)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000b8328)(puVar3,len << 2);" (call_expression "(*(code *)PTR_smemclr_000b8328)(puVar3,len << 2)" (parenthesized_expression "(*(code *)PTR_smemclr_000b8328)" ( (pointer_expression "*(code *)PTR_smemclr_000b8328" * (cast_expression "(code *)PTR_smemclr_000b8328" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar3,len << 2)" ( identifier , (binary_expression "len << 2" identifier << number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000b82e8)(puVar3);" (call_expression "(*(code *)PTR_safefree_000b82e8)(puVar3)" (parenthesized_expression "(*(code *)PTR_safefree_000b82e8)" ( (pointer_expression "*(code *)PTR_safefree_000b82e8" * (cast_expression "(code *)PTR_safefree_000b82e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar3)" ( identifier ))) ;) comment (expression_statement "freebn(pBVar1);" (call_expression "freebn(pBVar1)" identifier (argument_list "(pBVar1)" ( identifier ))) ;) (labeled_statement "code_r0x00056228:\n  iVar19 = iVar19 + 1;" statement_identifier : (expression_statement "iVar19 = iVar19 + 1;" (assignment_expression "iVar19 = iVar19 + 1" identifier = (binary_expression "iVar19 + 1" identifier + number_literal)) ;)) (goto_statement "goto LAB_000561f0;" goto statement_identifier ;) })))
(translation_unit "uint * modpow_simple(undefined4 param_1,int *param_2,int *param_3)\n\n{\n  uint *puVar1;\n  int *piVar2;\n  int *piVar3;\n  undefined4 *puVar4;\n  int iVar5;\n  undefined4 *puVar6;\n  undefined4 *puVar7;\n  undefined4 *puVar8;\n  undefined4 uVar9;\n  uint uVar10;\n  undefined4 uVar11;\n  code *pcVar12;\n  code *pcVar13;\n  uint *puVar14;\n  int iVar15;\n  int *piVar16;\n  uint *puVar17;\n  uint uVar18;\n  int iVar19;\n  uint uVar20;\n  undefined4 *puVar21;\n  int iVar22;\n  int iVar23;\n  int iVar24;\n  \n  if (param_3[*param_3] == 0) {\n    puVar14 = (uint *)(*(code *)PTR___assert_fail_000b8b18)\n                                (PTR_DAT_000b8348 + -0x7fc,PTR_DAT_000b8348 + -0x840,0x3b9,\n                                 PTR_DAT_000b8348 + -0x62c);\n    return puVar14;\n  }\n  piVar2 = (int *)bigmod(param_1,param_3);\n  iVar19 = *param_3;\n  piVar3 = (int *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4);\n  if (0 < iVar19) {\n    iVar15 = 0;\n    piVar16 = piVar3;\n    do {\n      *piVar16 = param_3[*param_3 - iVar15];\n      iVar15 = iVar15 + 1;\n      piVar16 = piVar16 + 1;\n    } while (iVar19 != iVar15);\n  }\n  puVar4 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4);\n  iVar15 = iVar19 - *piVar2;\n  if (0 < iVar15) {\n    puVar7 = puVar4;\n    do {\n      *puVar7 = 0;\n      puVar7 = puVar7 + 1;\n    } while (puVar7 != puVar4 + iVar15);\n  }\n  iVar5 = *piVar2;\n  if (0 < iVar5) {\n    piVar16 = puVar4 + iVar15;\n    iVar15 = 0;\n    do {\n      *piVar16 = piVar2[iVar5 - iVar15];\n      iVar15 = iVar15 + 1;\n      iVar5 = *piVar2;\n      piVar16 = piVar16 + 1;\n    } while (iVar15 < iVar5);\n  }\n  iVar15 = iVar19 << 1;\n  puVar6 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4);\n  puVar7 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4);\n  if (0 < iVar15) {\n    puVar8 = puVar6;\n    do {\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    } while (puVar8 != puVar6 + iVar19 * 2);\n  }\n  puVar6[iVar19 * 2 + -1] = 1;\n  iVar5 = FUN_00052bdc();\n  uVar9 = (*(code *)PTR_safemalloc_000b82f8)(iVar5,4);\n  iVar23 = *param_2;\n  iVar22 = 0;\nLAB_000561f0:\n  uVar20 = 0x1f;\n  while (iVar22 < iVar23) {\n    if ((1 << (uVar20 & 0x1f) & param_2[iVar23 - iVar22]) != 0) {\n      iVar24 = *piVar3;\n      uVar10 = FUN_00052c20(iVar24);\n      if (uVar10 != 0) goto LAB_00056608;\n      uVar11 = FUN_00052c64(iVar24);\n      goto LAB_000563c4;\n    }\n    uVar20 = uVar20 - 1;\n    if (uVar20 == 0xffffffff) goto code_r0x00056228;\n  }\n  iVar24 = *piVar3;\n  uVar10 = FUN_00052c20(iVar24);\n  if (uVar10 == 0) {\n    FUN_00052c64(iVar24);\n    goto LAB_00056404;\n  }\nLAB_00056608:\n  uVar18 = iVar24 << (uVar10 & 0x1f);\n  if (iVar19 < 2) {\n    uVar11 = FUN_00052c64(uVar18);\n    if (iVar23 <= iVar22) goto LAB_00056404;\n  }\n  else {\n    uVar11 = FUN_00052c64((uint)piVar3[1] >> (-uVar10 & 0x1f) | uVar18);\n    if (iVar23 <= iVar22) {\n      puVar14 = (uint *)FUN_00053e48(*param_3);\n      goto LAB_0005642c;\n    }\n  }\nLAB_000563c4:\n  pcVar12 = (code *)(PTR_LAB_000b8640 + 0x2da0);\n  pcVar13 = (code *)(PTR_LAB_000b8640 + 0x37b8);\n  do {\n    puVar8 = puVar7;\n    puVar21 = puVar6;\n    if (-1 < (int)uVar20) {\n      do {\n        (*pcVar12)(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9);\n        (*pcVar13)(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n        puVar7 = puVar21;\n        puVar6 = puVar8;\n        if ((1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0) {\n          (*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);\n          (*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n          puVar7 = puVar8;\n          puVar6 = puVar21;\n        }\n        uVar20 = uVar20 - 1;\n        puVar8 = puVar7;\n        puVar21 = puVar6;\n      } while (uVar20 != 0xffffffff);\n    }\n    iVar22 = iVar22 + 1;\n    uVar20 = 0x1f;\n  } while (iVar22 < *param_2);\nLAB_00056404:\n  puVar14 = (uint *)FUN_00053e48(*param_3);\n  if (0 < iVar19) {\nLAB_0005642c:\n    puVar17 = puVar6 + iVar19;\n    iVar15 = 0;\n    do {\n      puVar14[*puVar14 - iVar15] = *puVar17;\n      iVar15 = iVar15 + 1;\n      puVar17 = puVar17 + 1;\n    } while (iVar15 < iVar19);\n  }\n  uVar20 = *puVar14;\n  if (1 < uVar20) {\n    puVar17 = puVar14 + uVar20;\n    uVar10 = *puVar17;\n    while (uVar10 == 0) {\n      uVar20 = uVar20 - 1;\n      *puVar14 = uVar20;\n      if (uVar20 == 1) break;\n      puVar1 = puVar17 + -1;\n      puVar17 = puVar17 + -1;\n      uVar10 = *puVar1;\n    }\n  }\n  (*(code *)PTR_smemclr_000b8328)(puVar6,iVar19 * 8);\n  (*(code *)PTR_safefree_000b82e8)(puVar6);\n  (*(code *)PTR_smemclr_000b8328)(uVar9,iVar5 << 2);\n  (*(code *)PTR_safefree_000b82e8)(uVar9);\n  (*(code *)PTR_smemclr_000b8328)(puVar7,iVar19 * 8);\n  (*(code *)PTR_safefree_000b82e8)(puVar7);\n  (*(code *)PTR_smemclr_000b8328)(piVar3,iVar19 << 2);\n  (*(code *)PTR_safefree_000b82e8)(piVar3);\n  (*(code *)PTR_smemclr_000b8328)(puVar4,iVar19 << 2);\n  (*(code *)PTR_safefree_000b82e8)(puVar4);\n  freebn(piVar2);\n  return puVar14;\ncode_r0x00056228:\n  iVar22 = iVar22 + 1;\n  goto LAB_000561f0;\n}\n\n" (function_definition "uint * modpow_simple(undefined4 param_1,int *param_2,int *param_3)\n\n{\n  uint *puVar1;\n  int *piVar2;\n  int *piVar3;\n  undefined4 *puVar4;\n  int iVar5;\n  undefined4 *puVar6;\n  undefined4 *puVar7;\n  undefined4 *puVar8;\n  undefined4 uVar9;\n  uint uVar10;\n  undefined4 uVar11;\n  code *pcVar12;\n  code *pcVar13;\n  uint *puVar14;\n  int iVar15;\n  int *piVar16;\n  uint *puVar17;\n  uint uVar18;\n  int iVar19;\n  uint uVar20;\n  undefined4 *puVar21;\n  int iVar22;\n  int iVar23;\n  int iVar24;\n  \n  if (param_3[*param_3] == 0) {\n    puVar14 = (uint *)(*(code *)PTR___assert_fail_000b8b18)\n                                (PTR_DAT_000b8348 + -0x7fc,PTR_DAT_000b8348 + -0x840,0x3b9,\n                                 PTR_DAT_000b8348 + -0x62c);\n    return puVar14;\n  }\n  piVar2 = (int *)bigmod(param_1,param_3);\n  iVar19 = *param_3;\n  piVar3 = (int *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4);\n  if (0 < iVar19) {\n    iVar15 = 0;\n    piVar16 = piVar3;\n    do {\n      *piVar16 = param_3[*param_3 - iVar15];\n      iVar15 = iVar15 + 1;\n      piVar16 = piVar16 + 1;\n    } while (iVar19 != iVar15);\n  }\n  puVar4 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4);\n  iVar15 = iVar19 - *piVar2;\n  if (0 < iVar15) {\n    puVar7 = puVar4;\n    do {\n      *puVar7 = 0;\n      puVar7 = puVar7 + 1;\n    } while (puVar7 != puVar4 + iVar15);\n  }\n  iVar5 = *piVar2;\n  if (0 < iVar5) {\n    piVar16 = puVar4 + iVar15;\n    iVar15 = 0;\n    do {\n      *piVar16 = piVar2[iVar5 - iVar15];\n      iVar15 = iVar15 + 1;\n      iVar5 = *piVar2;\n      piVar16 = piVar16 + 1;\n    } while (iVar15 < iVar5);\n  }\n  iVar15 = iVar19 << 1;\n  puVar6 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4);\n  puVar7 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4);\n  if (0 < iVar15) {\n    puVar8 = puVar6;\n    do {\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    } while (puVar8 != puVar6 + iVar19 * 2);\n  }\n  puVar6[iVar19 * 2 + -1] = 1;\n  iVar5 = FUN_00052bdc();\n  uVar9 = (*(code *)PTR_safemalloc_000b82f8)(iVar5,4);\n  iVar23 = *param_2;\n  iVar22 = 0;\nLAB_000561f0:\n  uVar20 = 0x1f;\n  while (iVar22 < iVar23) {\n    if ((1 << (uVar20 & 0x1f) & param_2[iVar23 - iVar22]) != 0) {\n      iVar24 = *piVar3;\n      uVar10 = FUN_00052c20(iVar24);\n      if (uVar10 != 0) goto LAB_00056608;\n      uVar11 = FUN_00052c64(iVar24);\n      goto LAB_000563c4;\n    }\n    uVar20 = uVar20 - 1;\n    if (uVar20 == 0xffffffff) goto code_r0x00056228;\n  }\n  iVar24 = *piVar3;\n  uVar10 = FUN_00052c20(iVar24);\n  if (uVar10 == 0) {\n    FUN_00052c64(iVar24);\n    goto LAB_00056404;\n  }\nLAB_00056608:\n  uVar18 = iVar24 << (uVar10 & 0x1f);\n  if (iVar19 < 2) {\n    uVar11 = FUN_00052c64(uVar18);\n    if (iVar23 <= iVar22) goto LAB_00056404;\n  }\n  else {\n    uVar11 = FUN_00052c64((uint)piVar3[1] >> (-uVar10 & 0x1f) | uVar18);\n    if (iVar23 <= iVar22) {\n      puVar14 = (uint *)FUN_00053e48(*param_3);\n      goto LAB_0005642c;\n    }\n  }\nLAB_000563c4:\n  pcVar12 = (code *)(PTR_LAB_000b8640 + 0x2da0);\n  pcVar13 = (code *)(PTR_LAB_000b8640 + 0x37b8);\n  do {\n    puVar8 = puVar7;\n    puVar21 = puVar6;\n    if (-1 < (int)uVar20) {\n      do {\n        (*pcVar12)(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9);\n        (*pcVar13)(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n        puVar7 = puVar21;\n        puVar6 = puVar8;\n        if ((1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0) {\n          (*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);\n          (*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n          puVar7 = puVar8;\n          puVar6 = puVar21;\n        }\n        uVar20 = uVar20 - 1;\n        puVar8 = puVar7;\n        puVar21 = puVar6;\n      } while (uVar20 != 0xffffffff);\n    }\n    iVar22 = iVar22 + 1;\n    uVar20 = 0x1f;\n  } while (iVar22 < *param_2);\nLAB_00056404:\n  puVar14 = (uint *)FUN_00053e48(*param_3);\n  if (0 < iVar19) {\nLAB_0005642c:\n    puVar17 = puVar6 + iVar19;\n    iVar15 = 0;\n    do {\n      puVar14[*puVar14 - iVar15] = *puVar17;\n      iVar15 = iVar15 + 1;\n      puVar17 = puVar17 + 1;\n    } while (iVar15 < iVar19);\n  }\n  uVar20 = *puVar14;\n  if (1 < uVar20) {\n    puVar17 = puVar14 + uVar20;\n    uVar10 = *puVar17;\n    while (uVar10 == 0) {\n      uVar20 = uVar20 - 1;\n      *puVar14 = uVar20;\n      if (uVar20 == 1) break;\n      puVar1 = puVar17 + -1;\n      puVar17 = puVar17 + -1;\n      uVar10 = *puVar1;\n    }\n  }\n  (*(code *)PTR_smemclr_000b8328)(puVar6,iVar19 * 8);\n  (*(code *)PTR_safefree_000b82e8)(puVar6);\n  (*(code *)PTR_smemclr_000b8328)(uVar9,iVar5 << 2);\n  (*(code *)PTR_safefree_000b82e8)(uVar9);\n  (*(code *)PTR_smemclr_000b8328)(puVar7,iVar19 * 8);\n  (*(code *)PTR_safefree_000b82e8)(puVar7);\n  (*(code *)PTR_smemclr_000b8328)(piVar3,iVar19 << 2);\n  (*(code *)PTR_safefree_000b82e8)(piVar3);\n  (*(code *)PTR_smemclr_000b8328)(puVar4,iVar19 << 2);\n  (*(code *)PTR_safefree_000b82e8)(puVar4);\n  freebn(piVar2);\n  return puVar14;\ncode_r0x00056228:\n  iVar22 = iVar22 + 1;\n  goto LAB_000561f0;\n}" type_identifier (pointer_declarator "* modpow_simple(undefined4 param_1,int *param_2,int *param_3)" * (function_declarator "modpow_simple(undefined4 param_1,int *param_2,int *param_3)" identifier (parameter_list "(undefined4 param_1,int *param_2,int *param_3)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) )))) (compound_statement "{\n  uint *puVar1;\n  int *piVar2;\n  int *piVar3;\n  undefined4 *puVar4;\n  int iVar5;\n  undefined4 *puVar6;\n  undefined4 *puVar7;\n  undefined4 *puVar8;\n  undefined4 uVar9;\n  uint uVar10;\n  undefined4 uVar11;\n  code *pcVar12;\n  code *pcVar13;\n  uint *puVar14;\n  int iVar15;\n  int *piVar16;\n  uint *puVar17;\n  uint uVar18;\n  int iVar19;\n  uint uVar20;\n  undefined4 *puVar21;\n  int iVar22;\n  int iVar23;\n  int iVar24;\n  \n  if (param_3[*param_3] == 0) {\n    puVar14 = (uint *)(*(code *)PTR___assert_fail_000b8b18)\n                                (PTR_DAT_000b8348 + -0x7fc,PTR_DAT_000b8348 + -0x840,0x3b9,\n                                 PTR_DAT_000b8348 + -0x62c);\n    return puVar14;\n  }\n  piVar2 = (int *)bigmod(param_1,param_3);\n  iVar19 = *param_3;\n  piVar3 = (int *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4);\n  if (0 < iVar19) {\n    iVar15 = 0;\n    piVar16 = piVar3;\n    do {\n      *piVar16 = param_3[*param_3 - iVar15];\n      iVar15 = iVar15 + 1;\n      piVar16 = piVar16 + 1;\n    } while (iVar19 != iVar15);\n  }\n  puVar4 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4);\n  iVar15 = iVar19 - *piVar2;\n  if (0 < iVar15) {\n    puVar7 = puVar4;\n    do {\n      *puVar7 = 0;\n      puVar7 = puVar7 + 1;\n    } while (puVar7 != puVar4 + iVar15);\n  }\n  iVar5 = *piVar2;\n  if (0 < iVar5) {\n    piVar16 = puVar4 + iVar15;\n    iVar15 = 0;\n    do {\n      *piVar16 = piVar2[iVar5 - iVar15];\n      iVar15 = iVar15 + 1;\n      iVar5 = *piVar2;\n      piVar16 = piVar16 + 1;\n    } while (iVar15 < iVar5);\n  }\n  iVar15 = iVar19 << 1;\n  puVar6 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4);\n  puVar7 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4);\n  if (0 < iVar15) {\n    puVar8 = puVar6;\n    do {\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    } while (puVar8 != puVar6 + iVar19 * 2);\n  }\n  puVar6[iVar19 * 2 + -1] = 1;\n  iVar5 = FUN_00052bdc();\n  uVar9 = (*(code *)PTR_safemalloc_000b82f8)(iVar5,4);\n  iVar23 = *param_2;\n  iVar22 = 0;\nLAB_000561f0:\n  uVar20 = 0x1f;\n  while (iVar22 < iVar23) {\n    if ((1 << (uVar20 & 0x1f) & param_2[iVar23 - iVar22]) != 0) {\n      iVar24 = *piVar3;\n      uVar10 = FUN_00052c20(iVar24);\n      if (uVar10 != 0) goto LAB_00056608;\n      uVar11 = FUN_00052c64(iVar24);\n      goto LAB_000563c4;\n    }\n    uVar20 = uVar20 - 1;\n    if (uVar20 == 0xffffffff) goto code_r0x00056228;\n  }\n  iVar24 = *piVar3;\n  uVar10 = FUN_00052c20(iVar24);\n  if (uVar10 == 0) {\n    FUN_00052c64(iVar24);\n    goto LAB_00056404;\n  }\nLAB_00056608:\n  uVar18 = iVar24 << (uVar10 & 0x1f);\n  if (iVar19 < 2) {\n    uVar11 = FUN_00052c64(uVar18);\n    if (iVar23 <= iVar22) goto LAB_00056404;\n  }\n  else {\n    uVar11 = FUN_00052c64((uint)piVar3[1] >> (-uVar10 & 0x1f) | uVar18);\n    if (iVar23 <= iVar22) {\n      puVar14 = (uint *)FUN_00053e48(*param_3);\n      goto LAB_0005642c;\n    }\n  }\nLAB_000563c4:\n  pcVar12 = (code *)(PTR_LAB_000b8640 + 0x2da0);\n  pcVar13 = (code *)(PTR_LAB_000b8640 + 0x37b8);\n  do {\n    puVar8 = puVar7;\n    puVar21 = puVar6;\n    if (-1 < (int)uVar20) {\n      do {\n        (*pcVar12)(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9);\n        (*pcVar13)(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n        puVar7 = puVar21;\n        puVar6 = puVar8;\n        if ((1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0) {\n          (*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);\n          (*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n          puVar7 = puVar8;\n          puVar6 = puVar21;\n        }\n        uVar20 = uVar20 - 1;\n        puVar8 = puVar7;\n        puVar21 = puVar6;\n      } while (uVar20 != 0xffffffff);\n    }\n    iVar22 = iVar22 + 1;\n    uVar20 = 0x1f;\n  } while (iVar22 < *param_2);\nLAB_00056404:\n  puVar14 = (uint *)FUN_00053e48(*param_3);\n  if (0 < iVar19) {\nLAB_0005642c:\n    puVar17 = puVar6 + iVar19;\n    iVar15 = 0;\n    do {\n      puVar14[*puVar14 - iVar15] = *puVar17;\n      iVar15 = iVar15 + 1;\n      puVar17 = puVar17 + 1;\n    } while (iVar15 < iVar19);\n  }\n  uVar20 = *puVar14;\n  if (1 < uVar20) {\n    puVar17 = puVar14 + uVar20;\n    uVar10 = *puVar17;\n    while (uVar10 == 0) {\n      uVar20 = uVar20 - 1;\n      *puVar14 = uVar20;\n      if (uVar20 == 1) break;\n      puVar1 = puVar17 + -1;\n      puVar17 = puVar17 + -1;\n      uVar10 = *puVar1;\n    }\n  }\n  (*(code *)PTR_smemclr_000b8328)(puVar6,iVar19 * 8);\n  (*(code *)PTR_safefree_000b82e8)(puVar6);\n  (*(code *)PTR_smemclr_000b8328)(uVar9,iVar5 << 2);\n  (*(code *)PTR_safefree_000b82e8)(uVar9);\n  (*(code *)PTR_smemclr_000b8328)(puVar7,iVar19 * 8);\n  (*(code *)PTR_safefree_000b82e8)(puVar7);\n  (*(code *)PTR_smemclr_000b8328)(piVar3,iVar19 << 2);\n  (*(code *)PTR_safefree_000b82e8)(piVar3);\n  (*(code *)PTR_smemclr_000b8328)(puVar4,iVar19 << 2);\n  (*(code *)PTR_safefree_000b82e8)(puVar4);\n  freebn(piVar2);\n  return puVar14;\ncode_r0x00056228:\n  iVar22 = iVar22 + 1;\n  goto LAB_000561f0;\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int *piVar2;" primitive_type (pointer_declarator "*piVar2" * identifier) ;) (declaration "int *piVar3;" primitive_type (pointer_declarator "*piVar3" * identifier) ;) (declaration "undefined4 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "undefined4 *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "undefined4 *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "undefined4 *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "undefined4 uVar9;" type_identifier identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "undefined4 uVar11;" type_identifier identifier ;) (declaration "code *pcVar12;" type_identifier (pointer_declarator "*pcVar12" * identifier) ;) (declaration "code *pcVar13;" type_identifier (pointer_declarator "*pcVar13" * identifier) ;) (declaration "uint *puVar14;" type_identifier (pointer_declarator "*puVar14" * identifier) ;) (declaration "int iVar15;" primitive_type identifier ;) (declaration "int *piVar16;" primitive_type (pointer_declarator "*piVar16" * identifier) ;) (declaration "uint *puVar17;" type_identifier (pointer_declarator "*puVar17" * identifier) ;) (declaration "uint uVar18;" type_identifier identifier ;) (declaration "int iVar19;" primitive_type identifier ;) (declaration "uint uVar20;" type_identifier identifier ;) (declaration "undefined4 *puVar21;" type_identifier (pointer_declarator "*puVar21" * identifier) ;) (declaration "int iVar22;" primitive_type identifier ;) (declaration "int iVar23;" primitive_type identifier ;) (declaration "int iVar24;" primitive_type identifier ;) (if_statement "if (param_3[*param_3] == 0) {\n    puVar14 = (uint *)(*(code *)PTR___assert_fail_000b8b18)\n                                (PTR_DAT_000b8348 + -0x7fc,PTR_DAT_000b8348 + -0x840,0x3b9,\n                                 PTR_DAT_000b8348 + -0x62c);\n    return puVar14;\n  }" if (parenthesized_expression "(param_3[*param_3] == 0)" ( (binary_expression "param_3[*param_3] == 0" (subscript_expression "param_3[*param_3]" identifier [ (pointer_expression "*param_3" * identifier) ]) == number_literal) )) (compound_statement "{\n    puVar14 = (uint *)(*(code *)PTR___assert_fail_000b8b18)\n                                (PTR_DAT_000b8348 + -0x7fc,PTR_DAT_000b8348 + -0x840,0x3b9,\n                                 PTR_DAT_000b8348 + -0x62c);\n    return puVar14;\n  }" { (expression_statement "puVar14 = (uint *)(*(code *)PTR___assert_fail_000b8b18)\n                                (PTR_DAT_000b8348 + -0x7fc,PTR_DAT_000b8348 + -0x840,0x3b9,\n                                 PTR_DAT_000b8348 + -0x62c);" (assignment_expression "puVar14 = (uint *)(*(code *)PTR___assert_fail_000b8b18)\n                                (PTR_DAT_000b8348 + -0x7fc,PTR_DAT_000b8348 + -0x840,0x3b9,\n                                 PTR_DAT_000b8348 + -0x62c)" identifier = (cast_expression "(uint *)(*(code *)PTR___assert_fail_000b8b18)\n                                (PTR_DAT_000b8348 + -0x7fc,PTR_DAT_000b8348 + -0x840,0x3b9,\n                                 PTR_DAT_000b8348 + -0x62c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR___assert_fail_000b8b18)\n                                (PTR_DAT_000b8348 + -0x7fc,PTR_DAT_000b8348 + -0x840,0x3b9,\n                                 PTR_DAT_000b8348 + -0x62c)" (parenthesized_expression "(*(code *)PTR___assert_fail_000b8b18)" ( (pointer_expression "*(code *)PTR___assert_fail_000b8b18" * (cast_expression "(code *)PTR___assert_fail_000b8b18" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(PTR_DAT_000b8348 + -0x7fc,PTR_DAT_000b8348 + -0x840,0x3b9,\n                                 PTR_DAT_000b8348 + -0x62c)" ( (binary_expression "PTR_DAT_000b8348 + -0x7fc" identifier + number_literal) , (binary_expression "PTR_DAT_000b8348 + -0x840" identifier + number_literal) , number_literal , (binary_expression "PTR_DAT_000b8348 + -0x62c" identifier + number_literal) ))))) ;) (return_statement "return puVar14;" return identifier ;) })) (expression_statement "piVar2 = (int *)bigmod(param_1,param_3);" (assignment_expression "piVar2 = (int *)bigmod(param_1,param_3)" identifier = (cast_expression "(int *)bigmod(param_1,param_3)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "bigmod(param_1,param_3)" identifier (argument_list "(param_1,param_3)" ( identifier , identifier ))))) ;) (expression_statement "iVar19 = *param_3;" (assignment_expression "iVar19 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (expression_statement "piVar3 = (int *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4);" (assignment_expression "piVar3 = (int *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4)" identifier = (cast_expression "(int *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000b82f8)(iVar19,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b82f8)" ( (pointer_expression "*(code *)PTR_safemalloc_000b82f8" * (cast_expression "(code *)PTR_safemalloc_000b82f8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar19,4)" ( identifier , number_literal ))))) ;) (if_statement "if (0 < iVar19) {\n    iVar15 = 0;\n    piVar16 = piVar3;\n    do {\n      *piVar16 = param_3[*param_3 - iVar15];\n      iVar15 = iVar15 + 1;\n      piVar16 = piVar16 + 1;\n    } while (iVar19 != iVar15);\n  }" if (parenthesized_expression "(0 < iVar19)" ( (binary_expression "0 < iVar19" number_literal < identifier) )) (compound_statement "{\n    iVar15 = 0;\n    piVar16 = piVar3;\n    do {\n      *piVar16 = param_3[*param_3 - iVar15];\n      iVar15 = iVar15 + 1;\n      piVar16 = piVar16 + 1;\n    } while (iVar19 != iVar15);\n  }" { (expression_statement "iVar15 = 0;" (assignment_expression "iVar15 = 0" identifier = number_literal) ;) (expression_statement "piVar16 = piVar3;" (assignment_expression "piVar16 = piVar3" identifier = identifier) ;) (do_statement "do {\n      *piVar16 = param_3[*param_3 - iVar15];\n      iVar15 = iVar15 + 1;\n      piVar16 = piVar16 + 1;\n    } while (iVar19 != iVar15);" do (compound_statement "{\n      *piVar16 = param_3[*param_3 - iVar15];\n      iVar15 = iVar15 + 1;\n      piVar16 = piVar16 + 1;\n    }" { (expression_statement "*piVar16 = param_3[*param_3 - iVar15];" (assignment_expression "*piVar16 = param_3[*param_3 - iVar15]" (pointer_expression "*piVar16" * identifier) = (subscript_expression "param_3[*param_3 - iVar15]" identifier [ (binary_expression "*param_3 - iVar15" (pointer_expression "*param_3" * identifier) - identifier) ])) ;) (expression_statement "iVar15 = iVar15 + 1;" (assignment_expression "iVar15 = iVar15 + 1" identifier = (binary_expression "iVar15 + 1" identifier + number_literal)) ;) (expression_statement "piVar16 = piVar16 + 1;" (assignment_expression "piVar16 = piVar16 + 1" identifier = (binary_expression "piVar16 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar19 != iVar15)" ( (binary_expression "iVar19 != iVar15" identifier != identifier) )) ;) })) (expression_statement "puVar4 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4);" (assignment_expression "puVar4 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4)" identifier = (cast_expression "(undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000b82f8)(iVar19,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b82f8)" ( (pointer_expression "*(code *)PTR_safemalloc_000b82f8" * (cast_expression "(code *)PTR_safemalloc_000b82f8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar19,4)" ( identifier , number_literal ))))) ;) (expression_statement "iVar15 = iVar19 - *piVar2;" (assignment_expression "iVar15 = iVar19 - *piVar2" identifier = (binary_expression "iVar19 - *piVar2" identifier - (pointer_expression "*piVar2" * identifier))) ;) (if_statement "if (0 < iVar15) {\n    puVar7 = puVar4;\n    do {\n      *puVar7 = 0;\n      puVar7 = puVar7 + 1;\n    } while (puVar7 != puVar4 + iVar15);\n  }" if (parenthesized_expression "(0 < iVar15)" ( (binary_expression "0 < iVar15" number_literal < identifier) )) (compound_statement "{\n    puVar7 = puVar4;\n    do {\n      *puVar7 = 0;\n      puVar7 = puVar7 + 1;\n    } while (puVar7 != puVar4 + iVar15);\n  }" { (expression_statement "puVar7 = puVar4;" (assignment_expression "puVar7 = puVar4" identifier = identifier) ;) (do_statement "do {\n      *puVar7 = 0;\n      puVar7 = puVar7 + 1;\n    } while (puVar7 != puVar4 + iVar15);" do (compound_statement "{\n      *puVar7 = 0;\n      puVar7 = puVar7 + 1;\n    }" { (expression_statement "*puVar7 = 0;" (assignment_expression "*puVar7 = 0" (pointer_expression "*puVar7" * identifier) = number_literal) ;) (expression_statement "puVar7 = puVar7 + 1;" (assignment_expression "puVar7 = puVar7 + 1" identifier = (binary_expression "puVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar7 != puVar4 + iVar15)" ( (binary_expression "puVar7 != puVar4 + iVar15" identifier != (binary_expression "puVar4 + iVar15" identifier + identifier)) )) ;) })) (expression_statement "iVar5 = *piVar2;" (assignment_expression "iVar5 = *piVar2" identifier = (pointer_expression "*piVar2" * identifier)) ;) (if_statement "if (0 < iVar5) {\n    piVar16 = puVar4 + iVar15;\n    iVar15 = 0;\n    do {\n      *piVar16 = piVar2[iVar5 - iVar15];\n      iVar15 = iVar15 + 1;\n      iVar5 = *piVar2;\n      piVar16 = piVar16 + 1;\n    } while (iVar15 < iVar5);\n  }" if (parenthesized_expression "(0 < iVar5)" ( (binary_expression "0 < iVar5" number_literal < identifier) )) (compound_statement "{\n    piVar16 = puVar4 + iVar15;\n    iVar15 = 0;\n    do {\n      *piVar16 = piVar2[iVar5 - iVar15];\n      iVar15 = iVar15 + 1;\n      iVar5 = *piVar2;\n      piVar16 = piVar16 + 1;\n    } while (iVar15 < iVar5);\n  }" { (expression_statement "piVar16 = puVar4 + iVar15;" (assignment_expression "piVar16 = puVar4 + iVar15" identifier = (binary_expression "puVar4 + iVar15" identifier + identifier)) ;) (expression_statement "iVar15 = 0;" (assignment_expression "iVar15 = 0" identifier = number_literal) ;) (do_statement "do {\n      *piVar16 = piVar2[iVar5 - iVar15];\n      iVar15 = iVar15 + 1;\n      iVar5 = *piVar2;\n      piVar16 = piVar16 + 1;\n    } while (iVar15 < iVar5);" do (compound_statement "{\n      *piVar16 = piVar2[iVar5 - iVar15];\n      iVar15 = iVar15 + 1;\n      iVar5 = *piVar2;\n      piVar16 = piVar16 + 1;\n    }" { (expression_statement "*piVar16 = piVar2[iVar5 - iVar15];" (assignment_expression "*piVar16 = piVar2[iVar5 - iVar15]" (pointer_expression "*piVar16" * identifier) = (subscript_expression "piVar2[iVar5 - iVar15]" identifier [ (binary_expression "iVar5 - iVar15" identifier - identifier) ])) ;) (expression_statement "iVar15 = iVar15 + 1;" (assignment_expression "iVar15 = iVar15 + 1" identifier = (binary_expression "iVar15 + 1" identifier + number_literal)) ;) (expression_statement "iVar5 = *piVar2;" (assignment_expression "iVar5 = *piVar2" identifier = (pointer_expression "*piVar2" * identifier)) ;) (expression_statement "piVar16 = piVar16 + 1;" (assignment_expression "piVar16 = piVar16 + 1" identifier = (binary_expression "piVar16 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar15 < iVar5)" ( (binary_expression "iVar15 < iVar5" identifier < identifier) )) ;) })) (expression_statement "iVar15 = iVar19 << 1;" (assignment_expression "iVar15 = iVar19 << 1" identifier = (binary_expression "iVar19 << 1" identifier << number_literal)) ;) (expression_statement "puVar6 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4);" (assignment_expression "puVar6 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4)" identifier = (cast_expression "(undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000b82f8)(iVar15,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b82f8)" ( (pointer_expression "*(code *)PTR_safemalloc_000b82f8" * (cast_expression "(code *)PTR_safemalloc_000b82f8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar15,4)" ( identifier , number_literal ))))) ;) (expression_statement "puVar7 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4);" (assignment_expression "puVar7 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4)" identifier = (cast_expression "(undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000b82f8)(iVar15,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b82f8)" ( (pointer_expression "*(code *)PTR_safemalloc_000b82f8" * (cast_expression "(code *)PTR_safemalloc_000b82f8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar15,4)" ( identifier , number_literal ))))) ;) (if_statement "if (0 < iVar15) {\n    puVar8 = puVar6;\n    do {\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    } while (puVar8 != puVar6 + iVar19 * 2);\n  }" if (parenthesized_expression "(0 < iVar15)" ( (binary_expression "0 < iVar15" number_literal < identifier) )) (compound_statement "{\n    puVar8 = puVar6;\n    do {\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    } while (puVar8 != puVar6 + iVar19 * 2);\n  }" { (expression_statement "puVar8 = puVar6;" (assignment_expression "puVar8 = puVar6" identifier = identifier) ;) (do_statement "do {\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    } while (puVar8 != puVar6 + iVar19 * 2);" do (compound_statement "{\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    }" { (expression_statement "*puVar8 = 0;" (assignment_expression "*puVar8 = 0" (pointer_expression "*puVar8" * identifier) = number_literal) ;) (expression_statement "puVar8 = puVar8 + 1;" (assignment_expression "puVar8 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar8 != puVar6 + iVar19 * 2)" ( (binary_expression "puVar8 != puVar6 + iVar19 * 2" identifier != (binary_expression "puVar6 + iVar19 * 2" identifier + (binary_expression "iVar19 * 2" identifier * number_literal))) )) ;) })) (expression_statement "puVar6[iVar19 * 2 + -1] = 1;" (assignment_expression "puVar6[iVar19 * 2 + -1] = 1" (subscript_expression "puVar6[iVar19 * 2 + -1]" identifier [ (binary_expression "iVar19 * 2 + -1" (binary_expression "iVar19 * 2" identifier * number_literal) + number_literal) ]) = number_literal) ;) (expression_statement "iVar5 = FUN_00052bdc();" (assignment_expression "iVar5 = FUN_00052bdc()" identifier = (call_expression "FUN_00052bdc()" identifier (argument_list "()" ( )))) ;) (expression_statement "uVar9 = (*(code *)PTR_safemalloc_000b82f8)(iVar5,4);" (assignment_expression "uVar9 = (*(code *)PTR_safemalloc_000b82f8)(iVar5,4)" identifier = (call_expression "(*(code *)PTR_safemalloc_000b82f8)(iVar5,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b82f8)" ( (pointer_expression "*(code *)PTR_safemalloc_000b82f8" * (cast_expression "(code *)PTR_safemalloc_000b82f8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar5,4)" ( identifier , number_literal )))) ;) (expression_statement "iVar23 = *param_2;" (assignment_expression "iVar23 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "iVar22 = 0;" (assignment_expression "iVar22 = 0" identifier = number_literal) ;) (labeled_statement "LAB_000561f0:\n  uVar20 = 0x1f;" statement_identifier : (expression_statement "uVar20 = 0x1f;" (assignment_expression "uVar20 = 0x1f" identifier = number_literal) ;)) (while_statement "while (iVar22 < iVar23) {\n    if ((1 << (uVar20 & 0x1f) & param_2[iVar23 - iVar22]) != 0) {\n      iVar24 = *piVar3;\n      uVar10 = FUN_00052c20(iVar24);\n      if (uVar10 != 0) goto LAB_00056608;\n      uVar11 = FUN_00052c64(iVar24);\n      goto LAB_000563c4;\n    }\n    uVar20 = uVar20 - 1;\n    if (uVar20 == 0xffffffff) goto code_r0x00056228;\n  }" while (parenthesized_expression "(iVar22 < iVar23)" ( (binary_expression "iVar22 < iVar23" identifier < identifier) )) (compound_statement "{\n    if ((1 << (uVar20 & 0x1f) & param_2[iVar23 - iVar22]) != 0) {\n      iVar24 = *piVar3;\n      uVar10 = FUN_00052c20(iVar24);\n      if (uVar10 != 0) goto LAB_00056608;\n      uVar11 = FUN_00052c64(iVar24);\n      goto LAB_000563c4;\n    }\n    uVar20 = uVar20 - 1;\n    if (uVar20 == 0xffffffff) goto code_r0x00056228;\n  }" { (if_statement "if ((1 << (uVar20 & 0x1f) & param_2[iVar23 - iVar22]) != 0) {\n      iVar24 = *piVar3;\n      uVar10 = FUN_00052c20(iVar24);\n      if (uVar10 != 0) goto LAB_00056608;\n      uVar11 = FUN_00052c64(iVar24);\n      goto LAB_000563c4;\n    }" if (parenthesized_expression "((1 << (uVar20 & 0x1f) & param_2[iVar23 - iVar22]) != 0)" ( (binary_expression "(1 << (uVar20 & 0x1f) & param_2[iVar23 - iVar22]) != 0" (parenthesized_expression "(1 << (uVar20 & 0x1f) & param_2[iVar23 - iVar22])" ( (binary_expression "1 << (uVar20 & 0x1f) & param_2[iVar23 - iVar22]" (binary_expression "1 << (uVar20 & 0x1f)" number_literal << (parenthesized_expression "(uVar20 & 0x1f)" ( (binary_expression "uVar20 & 0x1f" identifier & number_literal) ))) & (subscript_expression "param_2[iVar23 - iVar22]" identifier [ (binary_expression "iVar23 - iVar22" identifier - identifier) ])) )) != number_literal) )) (compound_statement "{\n      iVar24 = *piVar3;\n      uVar10 = FUN_00052c20(iVar24);\n      if (uVar10 != 0) goto LAB_00056608;\n      uVar11 = FUN_00052c64(iVar24);\n      goto LAB_000563c4;\n    }" { (expression_statement "iVar24 = *piVar3;" (assignment_expression "iVar24 = *piVar3" identifier = (pointer_expression "*piVar3" * identifier)) ;) (expression_statement "uVar10 = FUN_00052c20(iVar24);" (assignment_expression "uVar10 = FUN_00052c20(iVar24)" identifier = (call_expression "FUN_00052c20(iVar24)" identifier (argument_list "(iVar24)" ( identifier )))) ;) (if_statement "if (uVar10 != 0) goto LAB_00056608;" if (parenthesized_expression "(uVar10 != 0)" ( (binary_expression "uVar10 != 0" identifier != number_literal) )) (goto_statement "goto LAB_00056608;" goto statement_identifier ;)) (expression_statement "uVar11 = FUN_00052c64(iVar24);" (assignment_expression "uVar11 = FUN_00052c64(iVar24)" identifier = (call_expression "FUN_00052c64(iVar24)" identifier (argument_list "(iVar24)" ( identifier )))) ;) (goto_statement "goto LAB_000563c4;" goto statement_identifier ;) })) (expression_statement "uVar20 = uVar20 - 1;" (assignment_expression "uVar20 = uVar20 - 1" identifier = (binary_expression "uVar20 - 1" identifier - number_literal)) ;) (if_statement "if (uVar20 == 0xffffffff) goto code_r0x00056228;" if (parenthesized_expression "(uVar20 == 0xffffffff)" ( (binary_expression "uVar20 == 0xffffffff" identifier == number_literal) )) (goto_statement "goto code_r0x00056228;" goto statement_identifier ;)) })) (expression_statement "iVar24 = *piVar3;" (assignment_expression "iVar24 = *piVar3" identifier = (pointer_expression "*piVar3" * identifier)) ;) (expression_statement "uVar10 = FUN_00052c20(iVar24);" (assignment_expression "uVar10 = FUN_00052c20(iVar24)" identifier = (call_expression "FUN_00052c20(iVar24)" identifier (argument_list "(iVar24)" ( identifier )))) ;) (if_statement "if (uVar10 == 0) {\n    FUN_00052c64(iVar24);\n    goto LAB_00056404;\n  }" if (parenthesized_expression "(uVar10 == 0)" ( (binary_expression "uVar10 == 0" identifier == number_literal) )) (compound_statement "{\n    FUN_00052c64(iVar24);\n    goto LAB_00056404;\n  }" { (expression_statement "FUN_00052c64(iVar24);" (call_expression "FUN_00052c64(iVar24)" identifier (argument_list "(iVar24)" ( identifier ))) ;) (goto_statement "goto LAB_00056404;" goto statement_identifier ;) })) (labeled_statement "LAB_00056608:\n  uVar18 = iVar24 << (uVar10 & 0x1f);" statement_identifier : (expression_statement "uVar18 = iVar24 << (uVar10 & 0x1f);" (assignment_expression "uVar18 = iVar24 << (uVar10 & 0x1f)" identifier = (binary_expression "iVar24 << (uVar10 & 0x1f)" identifier << (parenthesized_expression "(uVar10 & 0x1f)" ( (binary_expression "uVar10 & 0x1f" identifier & number_literal) )))) ;)) (if_statement "if (iVar19 < 2) {\n    uVar11 = FUN_00052c64(uVar18);\n    if (iVar23 <= iVar22) goto LAB_00056404;\n  }\n  else {\n    uVar11 = FUN_00052c64((uint)piVar3[1] >> (-uVar10 & 0x1f) | uVar18);\n    if (iVar23 <= iVar22) {\n      puVar14 = (uint *)FUN_00053e48(*param_3);\n      goto LAB_0005642c;\n    }\n  }" if (parenthesized_expression "(iVar19 < 2)" ( (binary_expression "iVar19 < 2" identifier < number_literal) )) (compound_statement "{\n    uVar11 = FUN_00052c64(uVar18);\n    if (iVar23 <= iVar22) goto LAB_00056404;\n  }" { (expression_statement "uVar11 = FUN_00052c64(uVar18);" (assignment_expression "uVar11 = FUN_00052c64(uVar18)" identifier = (call_expression "FUN_00052c64(uVar18)" identifier (argument_list "(uVar18)" ( identifier )))) ;) (if_statement "if (iVar23 <= iVar22) goto LAB_00056404;" if (parenthesized_expression "(iVar23 <= iVar22)" ( (binary_expression "iVar23 <= iVar22" identifier <= identifier) )) (goto_statement "goto LAB_00056404;" goto statement_identifier ;)) }) (else_clause "else {\n    uVar11 = FUN_00052c64((uint)piVar3[1] >> (-uVar10 & 0x1f) | uVar18);\n    if (iVar23 <= iVar22) {\n      puVar14 = (uint *)FUN_00053e48(*param_3);\n      goto LAB_0005642c;\n    }\n  }" else (compound_statement "{\n    uVar11 = FUN_00052c64((uint)piVar3[1] >> (-uVar10 & 0x1f) | uVar18);\n    if (iVar23 <= iVar22) {\n      puVar14 = (uint *)FUN_00053e48(*param_3);\n      goto LAB_0005642c;\n    }\n  }" { (expression_statement "uVar11 = FUN_00052c64((uint)piVar3[1] >> (-uVar10 & 0x1f) | uVar18);" (assignment_expression "uVar11 = FUN_00052c64((uint)piVar3[1] >> (-uVar10 & 0x1f) | uVar18)" identifier = (call_expression "FUN_00052c64((uint)piVar3[1] >> (-uVar10 & 0x1f) | uVar18)" identifier (argument_list "((uint)piVar3[1] >> (-uVar10 & 0x1f) | uVar18)" ( (binary_expression "(uint)piVar3[1] >> (-uVar10 & 0x1f) | uVar18" (binary_expression "(uint)piVar3[1] >> (-uVar10 & 0x1f)" (cast_expression "(uint)piVar3[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "piVar3[1]" identifier [ number_literal ])) >> (parenthesized_expression "(-uVar10 & 0x1f)" ( (binary_expression "-uVar10 & 0x1f" (unary_expression "-uVar10" - identifier) & number_literal) ))) | identifier) )))) ;) (if_statement "if (iVar23 <= iVar22) {\n      puVar14 = (uint *)FUN_00053e48(*param_3);\n      goto LAB_0005642c;\n    }" if (parenthesized_expression "(iVar23 <= iVar22)" ( (binary_expression "iVar23 <= iVar22" identifier <= identifier) )) (compound_statement "{\n      puVar14 = (uint *)FUN_00053e48(*param_3);\n      goto LAB_0005642c;\n    }" { (expression_statement "puVar14 = (uint *)FUN_00053e48(*param_3);" (assignment_expression "puVar14 = (uint *)FUN_00053e48(*param_3)" identifier = (cast_expression "(uint *)FUN_00053e48(*param_3)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00053e48(*param_3)" identifier (argument_list "(*param_3)" ( (pointer_expression "*param_3" * identifier) ))))) ;) (goto_statement "goto LAB_0005642c;" goto statement_identifier ;) })) }))) (labeled_statement "LAB_000563c4:\n  pcVar12 = (code *)(PTR_LAB_000b8640 + 0x2da0);" statement_identifier : (expression_statement "pcVar12 = (code *)(PTR_LAB_000b8640 + 0x2da0);" (assignment_expression "pcVar12 = (code *)(PTR_LAB_000b8640 + 0x2da0)" identifier = (cast_expression "(code *)(PTR_LAB_000b8640 + 0x2da0)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000b8640 + 0x2da0)" ( (binary_expression "PTR_LAB_000b8640 + 0x2da0" identifier + number_literal) )))) ;)) (expression_statement "pcVar13 = (code *)(PTR_LAB_000b8640 + 0x37b8);" (assignment_expression "pcVar13 = (code *)(PTR_LAB_000b8640 + 0x37b8)" identifier = (cast_expression "(code *)(PTR_LAB_000b8640 + 0x37b8)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000b8640 + 0x37b8)" ( (binary_expression "PTR_LAB_000b8640 + 0x37b8" identifier + number_literal) )))) ;) (do_statement "do {\n    puVar8 = puVar7;\n    puVar21 = puVar6;\n    if (-1 < (int)uVar20) {\n      do {\n        (*pcVar12)(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9);\n        (*pcVar13)(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n        puVar7 = puVar21;\n        puVar6 = puVar8;\n        if ((1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0) {\n          (*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);\n          (*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n          puVar7 = puVar8;\n          puVar6 = puVar21;\n        }\n        uVar20 = uVar20 - 1;\n        puVar8 = puVar7;\n        puVar21 = puVar6;\n      } while (uVar20 != 0xffffffff);\n    }\n    iVar22 = iVar22 + 1;\n    uVar20 = 0x1f;\n  } while (iVar22 < *param_2);" do (compound_statement "{\n    puVar8 = puVar7;\n    puVar21 = puVar6;\n    if (-1 < (int)uVar20) {\n      do {\n        (*pcVar12)(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9);\n        (*pcVar13)(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n        puVar7 = puVar21;\n        puVar6 = puVar8;\n        if ((1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0) {\n          (*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);\n          (*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n          puVar7 = puVar8;\n          puVar6 = puVar21;\n        }\n        uVar20 = uVar20 - 1;\n        puVar8 = puVar7;\n        puVar21 = puVar6;\n      } while (uVar20 != 0xffffffff);\n    }\n    iVar22 = iVar22 + 1;\n    uVar20 = 0x1f;\n  }" { (expression_statement "puVar8 = puVar7;" (assignment_expression "puVar8 = puVar7" identifier = identifier) ;) (expression_statement "puVar21 = puVar6;" (assignment_expression "puVar21 = puVar6" identifier = identifier) ;) (if_statement "if (-1 < (int)uVar20) {\n      do {\n        (*pcVar12)(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9);\n        (*pcVar13)(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n        puVar7 = puVar21;\n        puVar6 = puVar8;\n        if ((1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0) {\n          (*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);\n          (*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n          puVar7 = puVar8;\n          puVar6 = puVar21;\n        }\n        uVar20 = uVar20 - 1;\n        puVar8 = puVar7;\n        puVar21 = puVar6;\n      } while (uVar20 != 0xffffffff);\n    }" if (parenthesized_expression "(-1 < (int)uVar20)" ( (binary_expression "-1 < (int)uVar20" number_literal < (cast_expression "(int)uVar20" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n      do {\n        (*pcVar12)(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9);\n        (*pcVar13)(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n        puVar7 = puVar21;\n        puVar6 = puVar8;\n        if ((1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0) {\n          (*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);\n          (*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n          puVar7 = puVar8;\n          puVar6 = puVar21;\n        }\n        uVar20 = uVar20 - 1;\n        puVar8 = puVar7;\n        puVar21 = puVar6;\n      } while (uVar20 != 0xffffffff);\n    }" { (do_statement "do {\n        (*pcVar12)(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9);\n        (*pcVar13)(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n        puVar7 = puVar21;\n        puVar6 = puVar8;\n        if ((1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0) {\n          (*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);\n          (*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n          puVar7 = puVar8;\n          puVar6 = puVar21;\n        }\n        uVar20 = uVar20 - 1;\n        puVar8 = puVar7;\n        puVar21 = puVar6;\n      } while (uVar20 != 0xffffffff);" do (compound_statement "{\n        (*pcVar12)(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9);\n        (*pcVar13)(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n        puVar7 = puVar21;\n        puVar6 = puVar8;\n        if ((1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0) {\n          (*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);\n          (*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n          puVar7 = puVar8;\n          puVar6 = puVar21;\n        }\n        uVar20 = uVar20 - 1;\n        puVar8 = puVar7;\n        puVar21 = puVar6;\n      }" { (expression_statement "(*pcVar12)(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9);" (call_expression "(*pcVar12)(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9)" (parenthesized_expression "(*pcVar12)" ( (pointer_expression "*pcVar12" * identifier) )) (argument_list "(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9)" ( (binary_expression "puVar21 + iVar19" identifier + identifier) , (binary_expression "puVar21 + iVar19" identifier + identifier) , identifier , identifier , identifier ))) ;) (expression_statement "(*pcVar13)(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10);" (call_expression "(*pcVar13)(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10)" (parenthesized_expression "(*pcVar13)" ( (pointer_expression "*pcVar13" * identifier) )) (argument_list "(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10)" ( identifier , identifier , identifier , identifier , number_literal , identifier , identifier ))) ;) (expression_statement "puVar7 = puVar21;" (assignment_expression "puVar7 = puVar21" identifier = identifier) ;) (expression_statement "puVar6 = puVar8;" (assignment_expression "puVar6 = puVar8" identifier = identifier) ;) (if_statement "if ((1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0) {\n          (*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);\n          (*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n          puVar7 = puVar8;\n          puVar6 = puVar21;\n        }" if (parenthesized_expression "((1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0)" ( (binary_expression "(1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0" (parenthesized_expression "(1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22])" ( (binary_expression "1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]" (binary_expression "1 << (uVar20 & 0x1f)" number_literal << (parenthesized_expression "(uVar20 & 0x1f)" ( (binary_expression "uVar20 & 0x1f" identifier & number_literal) ))) & (subscript_expression "param_2[*param_2 - iVar22]" identifier [ (binary_expression "*param_2 - iVar22" (pointer_expression "*param_2" * identifier) - identifier) ])) )) != number_literal) )) (compound_statement "{\n          (*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);\n          (*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n          puVar7 = puVar8;\n          puVar6 = puVar21;\n        }" { (expression_statement "(*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);" (call_expression "(*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9)" (parenthesized_expression "(*pcVar12)" ( (pointer_expression "*pcVar12" * identifier) )) (argument_list "(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9)" ( (binary_expression "puVar8 + iVar19" identifier + identifier) , identifier , identifier , identifier , identifier ))) ;) (expression_statement "(*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);" (call_expression "(*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10)" (parenthesized_expression "(*pcVar13)" ( (pointer_expression "*pcVar13" * identifier) )) (argument_list "(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10)" ( identifier , identifier , identifier , identifier , number_literal , identifier , identifier ))) ;) (expression_statement "puVar7 = puVar8;" (assignment_expression "puVar7 = puVar8" identifier = identifier) ;) (expression_statement "puVar6 = puVar21;" (assignment_expression "puVar6 = puVar21" identifier = identifier) ;) })) (expression_statement "uVar20 = uVar20 - 1;" (assignment_expression "uVar20 = uVar20 - 1" identifier = (binary_expression "uVar20 - 1" identifier - number_literal)) ;) (expression_statement "puVar8 = puVar7;" (assignment_expression "puVar8 = puVar7" identifier = identifier) ;) (expression_statement "puVar21 = puVar6;" (assignment_expression "puVar21 = puVar6" identifier = identifier) ;) }) while (parenthesized_expression "(uVar20 != 0xffffffff)" ( (binary_expression "uVar20 != 0xffffffff" identifier != number_literal) )) ;) })) (expression_statement "iVar22 = iVar22 + 1;" (assignment_expression "iVar22 = iVar22 + 1" identifier = (binary_expression "iVar22 + 1" identifier + number_literal)) ;) (expression_statement "uVar20 = 0x1f;" (assignment_expression "uVar20 = 0x1f" identifier = number_literal) ;) }) while (parenthesized_expression "(iVar22 < *param_2)" ( (binary_expression "iVar22 < *param_2" identifier < (pointer_expression "*param_2" * identifier)) )) ;) (labeled_statement "LAB_00056404:\n  puVar14 = (uint *)FUN_00053e48(*param_3);" statement_identifier : (expression_statement "puVar14 = (uint *)FUN_00053e48(*param_3);" (assignment_expression "puVar14 = (uint *)FUN_00053e48(*param_3)" identifier = (cast_expression "(uint *)FUN_00053e48(*param_3)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00053e48(*param_3)" identifier (argument_list "(*param_3)" ( (pointer_expression "*param_3" * identifier) ))))) ;)) (if_statement "if (0 < iVar19) {\nLAB_0005642c:\n    puVar17 = puVar6 + iVar19;\n    iVar15 = 0;\n    do {\n      puVar14[*puVar14 - iVar15] = *puVar17;\n      iVar15 = iVar15 + 1;\n      puVar17 = puVar17 + 1;\n    } while (iVar15 < iVar19);\n  }" if (parenthesized_expression "(0 < iVar19)" ( (binary_expression "0 < iVar19" number_literal < identifier) )) (compound_statement "{\nLAB_0005642c:\n    puVar17 = puVar6 + iVar19;\n    iVar15 = 0;\n    do {\n      puVar14[*puVar14 - iVar15] = *puVar17;\n      iVar15 = iVar15 + 1;\n      puVar17 = puVar17 + 1;\n    } while (iVar15 < iVar19);\n  }" { (labeled_statement "LAB_0005642c:\n    puVar17 = puVar6 + iVar19;" statement_identifier : (expression_statement "puVar17 = puVar6 + iVar19;" (assignment_expression "puVar17 = puVar6 + iVar19" identifier = (binary_expression "puVar6 + iVar19" identifier + identifier)) ;)) (expression_statement "iVar15 = 0;" (assignment_expression "iVar15 = 0" identifier = number_literal) ;) (do_statement "do {\n      puVar14[*puVar14 - iVar15] = *puVar17;\n      iVar15 = iVar15 + 1;\n      puVar17 = puVar17 + 1;\n    } while (iVar15 < iVar19);" do (compound_statement "{\n      puVar14[*puVar14 - iVar15] = *puVar17;\n      iVar15 = iVar15 + 1;\n      puVar17 = puVar17 + 1;\n    }" { (expression_statement "puVar14[*puVar14 - iVar15] = *puVar17;" (assignment_expression "puVar14[*puVar14 - iVar15] = *puVar17" (subscript_expression "puVar14[*puVar14 - iVar15]" identifier [ (binary_expression "*puVar14 - iVar15" (pointer_expression "*puVar14" * identifier) - identifier) ]) = (pointer_expression "*puVar17" * identifier)) ;) (expression_statement "iVar15 = iVar15 + 1;" (assignment_expression "iVar15 = iVar15 + 1" identifier = (binary_expression "iVar15 + 1" identifier + number_literal)) ;) (expression_statement "puVar17 = puVar17 + 1;" (assignment_expression "puVar17 = puVar17 + 1" identifier = (binary_expression "puVar17 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar15 < iVar19)" ( (binary_expression "iVar15 < iVar19" identifier < identifier) )) ;) })) (expression_statement "uVar20 = *puVar14;" (assignment_expression "uVar20 = *puVar14" identifier = (pointer_expression "*puVar14" * identifier)) ;) (if_statement "if (1 < uVar20) {\n    puVar17 = puVar14 + uVar20;\n    uVar10 = *puVar17;\n    while (uVar10 == 0) {\n      uVar20 = uVar20 - 1;\n      *puVar14 = uVar20;\n      if (uVar20 == 1) break;\n      puVar1 = puVar17 + -1;\n      puVar17 = puVar17 + -1;\n      uVar10 = *puVar1;\n    }\n  }" if (parenthesized_expression "(1 < uVar20)" ( (binary_expression "1 < uVar20" number_literal < identifier) )) (compound_statement "{\n    puVar17 = puVar14 + uVar20;\n    uVar10 = *puVar17;\n    while (uVar10 == 0) {\n      uVar20 = uVar20 - 1;\n      *puVar14 = uVar20;\n      if (uVar20 == 1) break;\n      puVar1 = puVar17 + -1;\n      puVar17 = puVar17 + -1;\n      uVar10 = *puVar1;\n    }\n  }" { (expression_statement "puVar17 = puVar14 + uVar20;" (assignment_expression "puVar17 = puVar14 + uVar20" identifier = (binary_expression "puVar14 + uVar20" identifier + identifier)) ;) (expression_statement "uVar10 = *puVar17;" (assignment_expression "uVar10 = *puVar17" identifier = (pointer_expression "*puVar17" * identifier)) ;) (while_statement "while (uVar10 == 0) {\n      uVar20 = uVar20 - 1;\n      *puVar14 = uVar20;\n      if (uVar20 == 1) break;\n      puVar1 = puVar17 + -1;\n      puVar17 = puVar17 + -1;\n      uVar10 = *puVar1;\n    }" while (parenthesized_expression "(uVar10 == 0)" ( (binary_expression "uVar10 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar20 = uVar20 - 1;\n      *puVar14 = uVar20;\n      if (uVar20 == 1) break;\n      puVar1 = puVar17 + -1;\n      puVar17 = puVar17 + -1;\n      uVar10 = *puVar1;\n    }" { (expression_statement "uVar20 = uVar20 - 1;" (assignment_expression "uVar20 = uVar20 - 1" identifier = (binary_expression "uVar20 - 1" identifier - number_literal)) ;) (expression_statement "*puVar14 = uVar20;" (assignment_expression "*puVar14 = uVar20" (pointer_expression "*puVar14" * identifier) = identifier) ;) (if_statement "if (uVar20 == 1) break;" if (parenthesized_expression "(uVar20 == 1)" ( (binary_expression "uVar20 == 1" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "puVar1 = puVar17 + -1;" (assignment_expression "puVar1 = puVar17 + -1" identifier = (binary_expression "puVar17 + -1" identifier + number_literal)) ;) (expression_statement "puVar17 = puVar17 + -1;" (assignment_expression "puVar17 = puVar17 + -1" identifier = (binary_expression "puVar17 + -1" identifier + number_literal)) ;) (expression_statement "uVar10 = *puVar1;" (assignment_expression "uVar10 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) })) })) (expression_statement "(*(code *)PTR_smemclr_000b8328)(puVar6,iVar19 * 8);" (call_expression "(*(code *)PTR_smemclr_000b8328)(puVar6,iVar19 * 8)" (parenthesized_expression "(*(code *)PTR_smemclr_000b8328)" ( (pointer_expression "*(code *)PTR_smemclr_000b8328" * (cast_expression "(code *)PTR_smemclr_000b8328" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar6,iVar19 * 8)" ( identifier , (binary_expression "iVar19 * 8" identifier * number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000b82e8)(puVar6);" (call_expression "(*(code *)PTR_safefree_000b82e8)(puVar6)" (parenthesized_expression "(*(code *)PTR_safefree_000b82e8)" ( (pointer_expression "*(code *)PTR_safefree_000b82e8" * (cast_expression "(code *)PTR_safefree_000b82e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar6)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000b8328)(uVar9,iVar5 << 2);" (call_expression "(*(code *)PTR_smemclr_000b8328)(uVar9,iVar5 << 2)" (parenthesized_expression "(*(code *)PTR_smemclr_000b8328)" ( (pointer_expression "*(code *)PTR_smemclr_000b8328" * (cast_expression "(code *)PTR_smemclr_000b8328" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(uVar9,iVar5 << 2)" ( identifier , (binary_expression "iVar5 << 2" identifier << number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000b82e8)(uVar9);" (call_expression "(*(code *)PTR_safefree_000b82e8)(uVar9)" (parenthesized_expression "(*(code *)PTR_safefree_000b82e8)" ( (pointer_expression "*(code *)PTR_safefree_000b82e8" * (cast_expression "(code *)PTR_safefree_000b82e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(uVar9)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000b8328)(puVar7,iVar19 * 8);" (call_expression "(*(code *)PTR_smemclr_000b8328)(puVar7,iVar19 * 8)" (parenthesized_expression "(*(code *)PTR_smemclr_000b8328)" ( (pointer_expression "*(code *)PTR_smemclr_000b8328" * (cast_expression "(code *)PTR_smemclr_000b8328" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar7,iVar19 * 8)" ( identifier , (binary_expression "iVar19 * 8" identifier * number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000b82e8)(puVar7);" (call_expression "(*(code *)PTR_safefree_000b82e8)(puVar7)" (parenthesized_expression "(*(code *)PTR_safefree_000b82e8)" ( (pointer_expression "*(code *)PTR_safefree_000b82e8" * (cast_expression "(code *)PTR_safefree_000b82e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar7)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000b8328)(piVar3,iVar19 << 2);" (call_expression "(*(code *)PTR_smemclr_000b8328)(piVar3,iVar19 << 2)" (parenthesized_expression "(*(code *)PTR_smemclr_000b8328)" ( (pointer_expression "*(code *)PTR_smemclr_000b8328" * (cast_expression "(code *)PTR_smemclr_000b8328" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(piVar3,iVar19 << 2)" ( identifier , (binary_expression "iVar19 << 2" identifier << number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000b82e8)(piVar3);" (call_expression "(*(code *)PTR_safefree_000b82e8)(piVar3)" (parenthesized_expression "(*(code *)PTR_safefree_000b82e8)" ( (pointer_expression "*(code *)PTR_safefree_000b82e8" * (cast_expression "(code *)PTR_safefree_000b82e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(piVar3)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000b8328)(puVar4,iVar19 << 2);" (call_expression "(*(code *)PTR_smemclr_000b8328)(puVar4,iVar19 << 2)" (parenthesized_expression "(*(code *)PTR_smemclr_000b8328)" ( (pointer_expression "*(code *)PTR_smemclr_000b8328" * (cast_expression "(code *)PTR_smemclr_000b8328" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar4,iVar19 << 2)" ( identifier , (binary_expression "iVar19 << 2" identifier << number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000b82e8)(puVar4);" (call_expression "(*(code *)PTR_safefree_000b82e8)(puVar4)" (parenthesized_expression "(*(code *)PTR_safefree_000b82e8)" ( (pointer_expression "*(code *)PTR_safefree_000b82e8" * (cast_expression "(code *)PTR_safefree_000b82e8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar4)" ( identifier ))) ;) (expression_statement "freebn(piVar2);" (call_expression "freebn(piVar2)" identifier (argument_list "(piVar2)" ( identifier ))) ;) (return_statement "return puVar14;" return identifier ;) (labeled_statement "code_r0x00056228:\n  iVar22 = iVar22 + 1;" statement_identifier : (expression_statement "iVar22 = iVar22 + 1;" (assignment_expression "iVar22 = iVar22 + 1" identifier = (binary_expression "iVar22 + 1" identifier + number_literal)) ;)) (goto_statement "goto LAB_000561f0;" goto statement_identifier ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) )))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * 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 IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * 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 IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ (pointer_expression * IDENT) ]) == LIT) )) (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 ( (binary_expression IDENT + LIT) , (binary_expression IDENT + LIT) , LIT , (binary_expression IDENT + LIT) ))))) ;) (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , IDENT ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (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 ( IDENT , LIT ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (subscript_expression IDENT [ (binary_expression (pointer_expression * IDENT) - IDENT) ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) })) (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 ( IDENT , LIT ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (binary_expression IDENT + IDENT)) )) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (subscript_expression IDENT [ (binary_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 = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT << LIT)) ;) (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 ( IDENT , LIT ))))) ;) (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 ( IDENT , LIT ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (binary_expression IDENT + (binary_expression IDENT * LIT))) )) ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ (binary_expression (binary_expression IDENT * LIT) + LIT) ]) = LIT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , LIT )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) (while_statement while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression LIT << (parenthesized_expression ( (binary_expression IDENT & LIT) ))) & (subscript_expression IDENT [ (binary_expression IDENT - IDENT) ])) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (goto_statement goto statement_identifier ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (goto_statement goto statement_identifier ;)) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) >> (parenthesized_expression ( (binary_expression (unary_expression - IDENT) & LIT) ))) | IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( (pointer_expression * IDENT) ))))) ;) (goto_statement goto statement_identifier ;) })) }))) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( (binary_expression IDENT + IDENT) , (binary_expression IDENT + IDENT) , IDENT , IDENT , IDENT ))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , IDENT , IDENT , IDENT , LIT , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression LIT << (parenthesized_expression ( (binary_expression IDENT & LIT) ))) & (subscript_expression IDENT [ (binary_expression (pointer_expression * IDENT) - IDENT) ])) )) != LIT) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( (binary_expression IDENT + IDENT) , IDENT , IDENT , IDENT , IDENT ))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , IDENT , IDENT , IDENT , LIT , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) }) while (parenthesized_expression ( (binary_expression IDENT < (pointer_expression * IDENT)) )) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( (pointer_expression * IDENT) ))))) ;)) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;)) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ (binary_expression (pointer_expression * IDENT) - IDENT) ]) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (while_statement while (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) })) })) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , (binary_expression IDENT * LIT) ))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT ))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , (binary_expression IDENT << LIT) ))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT ))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , (binary_expression IDENT * LIT) ))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT ))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , (binary_expression IDENT << LIT) ))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT ))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , (binary_expression IDENT << LIT) ))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (return_statement return IDENT ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;)) (goto_statement goto statement_identifier ;) })))
(function_definition "uint * modpow_simple(undefined4 param_1,int *param_2,int *param_3)\n\n{\n  uint *puVar1;\n  int *piVar2;\n  int *piVar3;\n  undefined4 *puVar4;\n  int iVar5;\n  undefined4 *puVar6;\n  undefined4 *puVar7;\n  undefined4 *puVar8;\n  undefined4 uVar9;\n  uint uVar10;\n  undefined4 uVar11;\n  code *pcVar12;\n  code *pcVar13;\n  uint *puVar14;\n  int iVar15;\n  int *piVar16;\n  uint *puVar17;\n  uint uVar18;\n  int iVar19;\n  uint uVar20;\n  undefined4 *puVar21;\n  int iVar22;\n  int iVar23;\n  int iVar24;\n  \n  if (param_3[*param_3] == 0) {\n    puVar14 = (uint *)(*(code *)PTR___assert_fail_000b8b18)\n                                (PTR_DAT_000b8348 + -0x7fc,PTR_DAT_000b8348 + -0x840,0x3b9,\n                                 PTR_DAT_000b8348 + -0x62c);\n    return puVar14;\n  }\n  piVar2 = (int *)bigmod(param_1,param_3);\n  iVar19 = *param_3;\n  piVar3 = (int *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4);\n  if (0 < iVar19) {\n    iVar15 = 0;\n    piVar16 = piVar3;\n    do {\n      *piVar16 = param_3[*param_3 - iVar15];\n      iVar15 = iVar15 + 1;\n      piVar16 = piVar16 + 1;\n    } while (iVar19 != iVar15);\n  }\n  puVar4 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4);\n  iVar15 = iVar19 - *piVar2;\n  if (0 < iVar15) {\n    puVar7 = puVar4;\n    do {\n      *puVar7 = 0;\n      puVar7 = puVar7 + 1;\n    } while (puVar7 != puVar4 + iVar15);\n  }\n  iVar5 = *piVar2;\n  if (0 < iVar5) {\n    piVar16 = puVar4 + iVar15;\n    iVar15 = 0;\n    do {\n      *piVar16 = piVar2[iVar5 - iVar15];\n      iVar15 = iVar15 + 1;\n      iVar5 = *piVar2;\n      piVar16 = piVar16 + 1;\n    } while (iVar15 < iVar5);\n  }\n  iVar15 = iVar19 << 1;\n  puVar6 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4);\n  puVar7 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4);\n  if (0 < iVar15) {\n    puVar8 = puVar6;\n    do {\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    } while (puVar8 != puVar6 + iVar19 * 2);\n  }\n  puVar6[iVar19 * 2 + -1] = 1;\n  iVar5 = FUN_00052bdc();\n  uVar9 = (*(code *)PTR_safemalloc_000b82f8)(iVar5,4);\n  iVar23 = *param_2;\n  iVar22 = 0;\nLAB_000561f0:\n  uVar20 = 0x1f;\n  while (iVar22 < iVar23) {\n    if ((1 << (uVar20 & 0x1f) & param_2[iVar23 - iVar22]) != 0) {\n      iVar24 = *piVar3;\n      uVar10 = FUN_00052c20(iVar24);\n      if (uVar10 != 0) goto LAB_00056608;\n      uVar11 = FUN_00052c64(iVar24);\n      goto LAB_000563c4;\n    }\n    uVar20 = uVar20 - 1;\n    if (uVar20 == 0xffffffff) goto code_r0x00056228;\n  }\n  iVar24 = *piVar3;\n  uVar10 = FUN_00052c20(iVar24);\n  if (uVar10 == 0) {\n    FUN_00052c64(iVar24);\n    goto LAB_00056404;\n  }\nLAB_00056608:\n  uVar18 = iVar24 << (uVar10 & 0x1f);\n  if (iVar19 < 2) {\n    uVar11 = FUN_00052c64(uVar18);\n    if (iVar23 <= iVar22) goto LAB_00056404;\n  }\n  else {\n    uVar11 = FUN_00052c64((uint)piVar3[1] >> (-uVar10 & 0x1f) | uVar18);\n    if (iVar23 <= iVar22) {\n      puVar14 = (uint *)FUN_00053e48(*param_3);\n      goto LAB_0005642c;\n    }\n  }\nLAB_000563c4:\n  pcVar12 = (code *)(PTR_LAB_000b8640 + 0x2da0);\n  pcVar13 = (code *)(PTR_LAB_000b8640 + 0x37b8);\n  do {\n    puVar8 = puVar7;\n    puVar21 = puVar6;\n    if (-1 < (int)uVar20) {\n      do {\n        (*pcVar12)(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9);\n        (*pcVar13)(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n        puVar7 = puVar21;\n        puVar6 = puVar8;\n        if ((1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0) {\n          (*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);\n          (*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n          puVar7 = puVar8;\n          puVar6 = puVar21;\n        }\n        uVar20 = uVar20 - 1;\n        puVar8 = puVar7;\n        puVar21 = puVar6;\n      } while (uVar20 != 0xffffffff);\n    }\n    iVar22 = iVar22 + 1;\n    uVar20 = 0x1f;\n  } while (iVar22 < *param_2);\nLAB_00056404:\n  puVar14 = (uint *)FUN_00053e48(*param_3);\n  if (0 < iVar19) {\nLAB_0005642c:\n    puVar17 = puVar6 + iVar19;\n    iVar15 = 0;\n    do {\n      puVar14[*puVar14 - iVar15] = *puVar17;\n      iVar15 = iVar15 + 1;\n      puVar17 = puVar17 + 1;\n    } while (iVar15 < iVar19);\n  }\n  uVar20 = *puVar14;\n  if (1 < uVar20) {\n    puVar17 = puVar14 + uVar20;\n    uVar10 = *puVar17;\n    while (uVar10 == 0) {\n      uVar20 = uVar20 - 1;\n      *puVar14 = uVar20;\n      if (uVar20 == 1) break;\n      puVar1 = puVar17 + -1;\n      puVar17 = puVar17 + -1;\n      uVar10 = *puVar1;\n    }\n  }\n  (*(code *)PTR_smemclr_000b8328)(puVar6,iVar19 * 8);\n  (*(code *)PTR_safefree_000b82e8)(puVar6);\n  (*(code *)PTR_smemclr_000b8328)(uVar9,iVar5 << 2);\n  (*(code *)PTR_safefree_000b82e8)(uVar9);\n  (*(code *)PTR_smemclr_000b8328)(puVar7,iVar19 * 8);\n  (*(code *)PTR_safefree_000b82e8)(puVar7);\n  (*(code *)PTR_smemclr_000b8328)(piVar3,iVar19 << 2);\n  (*(code *)PTR_safefree_000b82e8)(piVar3);\n  (*(code *)PTR_smemclr_000b8328)(puVar4,iVar19 << 2);\n  (*(code *)PTR_safefree_000b82e8)(puVar4);\n  freebn(piVar2);\n  return puVar14;\ncode_r0x00056228:\n  iVar22 = iVar22 + 1;\n  goto LAB_000561f0;\n}" (type_identifier "uint") (pointer_declarator "* modpow_simple(undefined4 param_1,int *param_2,int *param_3)" (* "*") (function_declarator "modpow_simple(undefined4 param_1,int *param_2,int *param_3)" (identifier "modpow_simple") (parameter_list "(undefined4 param_1,int *param_2,int *param_3)" (( "(") (parameter_declaration "undefined4 param_1" (type_identifier "undefined4") (identifier "param_1")) (, ",") (parameter_declaration "int *param_2" (primitive_type "int") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "int *param_3" (primitive_type "int") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) () ")")))) (compound_statement "{\n  uint *puVar1;\n  int *piVar2;\n  int *piVar3;\n  undefined4 *puVar4;\n  int iVar5;\n  undefined4 *puVar6;\n  undefined4 *puVar7;\n  undefined4 *puVar8;\n  undefined4 uVar9;\n  uint uVar10;\n  undefined4 uVar11;\n  code *pcVar12;\n  code *pcVar13;\n  uint *puVar14;\n  int iVar15;\n  int *piVar16;\n  uint *puVar17;\n  uint uVar18;\n  int iVar19;\n  uint uVar20;\n  undefined4 *puVar21;\n  int iVar22;\n  int iVar23;\n  int iVar24;\n  \n  if (param_3[*param_3] == 0) {\n    puVar14 = (uint *)(*(code *)PTR___assert_fail_000b8b18)\n                                (PTR_DAT_000b8348 + -0x7fc,PTR_DAT_000b8348 + -0x840,0x3b9,\n                                 PTR_DAT_000b8348 + -0x62c);\n    return puVar14;\n  }\n  piVar2 = (int *)bigmod(param_1,param_3);\n  iVar19 = *param_3;\n  piVar3 = (int *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4);\n  if (0 < iVar19) {\n    iVar15 = 0;\n    piVar16 = piVar3;\n    do {\n      *piVar16 = param_3[*param_3 - iVar15];\n      iVar15 = iVar15 + 1;\n      piVar16 = piVar16 + 1;\n    } while (iVar19 != iVar15);\n  }\n  puVar4 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4);\n  iVar15 = iVar19 - *piVar2;\n  if (0 < iVar15) {\n    puVar7 = puVar4;\n    do {\n      *puVar7 = 0;\n      puVar7 = puVar7 + 1;\n    } while (puVar7 != puVar4 + iVar15);\n  }\n  iVar5 = *piVar2;\n  if (0 < iVar5) {\n    piVar16 = puVar4 + iVar15;\n    iVar15 = 0;\n    do {\n      *piVar16 = piVar2[iVar5 - iVar15];\n      iVar15 = iVar15 + 1;\n      iVar5 = *piVar2;\n      piVar16 = piVar16 + 1;\n    } while (iVar15 < iVar5);\n  }\n  iVar15 = iVar19 << 1;\n  puVar6 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4);\n  puVar7 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4);\n  if (0 < iVar15) {\n    puVar8 = puVar6;\n    do {\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    } while (puVar8 != puVar6 + iVar19 * 2);\n  }\n  puVar6[iVar19 * 2 + -1] = 1;\n  iVar5 = FUN_00052bdc();\n  uVar9 = (*(code *)PTR_safemalloc_000b82f8)(iVar5,4);\n  iVar23 = *param_2;\n  iVar22 = 0;\nLAB_000561f0:\n  uVar20 = 0x1f;\n  while (iVar22 < iVar23) {\n    if ((1 << (uVar20 & 0x1f) & param_2[iVar23 - iVar22]) != 0) {\n      iVar24 = *piVar3;\n      uVar10 = FUN_00052c20(iVar24);\n      if (uVar10 != 0) goto LAB_00056608;\n      uVar11 = FUN_00052c64(iVar24);\n      goto LAB_000563c4;\n    }\n    uVar20 = uVar20 - 1;\n    if (uVar20 == 0xffffffff) goto code_r0x00056228;\n  }\n  iVar24 = *piVar3;\n  uVar10 = FUN_00052c20(iVar24);\n  if (uVar10 == 0) {\n    FUN_00052c64(iVar24);\n    goto LAB_00056404;\n  }\nLAB_00056608:\n  uVar18 = iVar24 << (uVar10 & 0x1f);\n  if (iVar19 < 2) {\n    uVar11 = FUN_00052c64(uVar18);\n    if (iVar23 <= iVar22) goto LAB_00056404;\n  }\n  else {\n    uVar11 = FUN_00052c64((uint)piVar3[1] >> (-uVar10 & 0x1f) | uVar18);\n    if (iVar23 <= iVar22) {\n      puVar14 = (uint *)FUN_00053e48(*param_3);\n      goto LAB_0005642c;\n    }\n  }\nLAB_000563c4:\n  pcVar12 = (code *)(PTR_LAB_000b8640 + 0x2da0);\n  pcVar13 = (code *)(PTR_LAB_000b8640 + 0x37b8);\n  do {\n    puVar8 = puVar7;\n    puVar21 = puVar6;\n    if (-1 < (int)uVar20) {\n      do {\n        (*pcVar12)(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9);\n        (*pcVar13)(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n        puVar7 = puVar21;\n        puVar6 = puVar8;\n        if ((1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0) {\n          (*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);\n          (*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n          puVar7 = puVar8;\n          puVar6 = puVar21;\n        }\n        uVar20 = uVar20 - 1;\n        puVar8 = puVar7;\n        puVar21 = puVar6;\n      } while (uVar20 != 0xffffffff);\n    }\n    iVar22 = iVar22 + 1;\n    uVar20 = 0x1f;\n  } while (iVar22 < *param_2);\nLAB_00056404:\n  puVar14 = (uint *)FUN_00053e48(*param_3);\n  if (0 < iVar19) {\nLAB_0005642c:\n    puVar17 = puVar6 + iVar19;\n    iVar15 = 0;\n    do {\n      puVar14[*puVar14 - iVar15] = *puVar17;\n      iVar15 = iVar15 + 1;\n      puVar17 = puVar17 + 1;\n    } while (iVar15 < iVar19);\n  }\n  uVar20 = *puVar14;\n  if (1 < uVar20) {\n    puVar17 = puVar14 + uVar20;\n    uVar10 = *puVar17;\n    while (uVar10 == 0) {\n      uVar20 = uVar20 - 1;\n      *puVar14 = uVar20;\n      if (uVar20 == 1) break;\n      puVar1 = puVar17 + -1;\n      puVar17 = puVar17 + -1;\n      uVar10 = *puVar1;\n    }\n  }\n  (*(code *)PTR_smemclr_000b8328)(puVar6,iVar19 * 8);\n  (*(code *)PTR_safefree_000b82e8)(puVar6);\n  (*(code *)PTR_smemclr_000b8328)(uVar9,iVar5 << 2);\n  (*(code *)PTR_safefree_000b82e8)(uVar9);\n  (*(code *)PTR_smemclr_000b8328)(puVar7,iVar19 * 8);\n  (*(code *)PTR_safefree_000b82e8)(puVar7);\n  (*(code *)PTR_smemclr_000b8328)(piVar3,iVar19 << 2);\n  (*(code *)PTR_safefree_000b82e8)(piVar3);\n  (*(code *)PTR_smemclr_000b8328)(puVar4,iVar19 << 2);\n  (*(code *)PTR_safefree_000b82e8)(puVar4);\n  freebn(piVar2);\n  return puVar14;\ncode_r0x00056228:\n  iVar22 = iVar22 + 1;\n  goto LAB_000561f0;\n}" ({ "{") (declaration "uint *puVar1;" (type_identifier "uint") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "int *piVar2;" (primitive_type "int") (pointer_declarator "*piVar2" (* "*") (identifier "piVar2")) (; ";")) (declaration "int *piVar3;" (primitive_type "int") (pointer_declarator "*piVar3" (* "*") (identifier "piVar3")) (; ";")) (declaration "undefined4 *puVar4;" (type_identifier "undefined4") (pointer_declarator "*puVar4" (* "*") (identifier "puVar4")) (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "undefined4 *puVar6;" (type_identifier "undefined4") (pointer_declarator "*puVar6" (* "*") (identifier "puVar6")) (; ";")) (declaration "undefined4 *puVar7;" (type_identifier "undefined4") (pointer_declarator "*puVar7" (* "*") (identifier "puVar7")) (; ";")) (declaration "undefined4 *puVar8;" (type_identifier "undefined4") (pointer_declarator "*puVar8" (* "*") (identifier "puVar8")) (; ";")) (declaration "undefined4 uVar9;" (type_identifier "undefined4") (identifier "uVar9") (; ";")) (declaration "uint uVar10;" (type_identifier "uint") (identifier "uVar10") (; ";")) (declaration "undefined4 uVar11;" (type_identifier "undefined4") (identifier "uVar11") (; ";")) (declaration "code *pcVar12;" (type_identifier "code") (pointer_declarator "*pcVar12" (* "*") (identifier "pcVar12")) (; ";")) (declaration "code *pcVar13;" (type_identifier "code") (pointer_declarator "*pcVar13" (* "*") (identifier "pcVar13")) (; ";")) (declaration "uint *puVar14;" (type_identifier "uint") (pointer_declarator "*puVar14" (* "*") (identifier "puVar14")) (; ";")) (declaration "int iVar15;" (primitive_type "int") (identifier "iVar15") (; ";")) (declaration "int *piVar16;" (primitive_type "int") (pointer_declarator "*piVar16" (* "*") (identifier "piVar16")) (; ";")) (declaration "uint *puVar17;" (type_identifier "uint") (pointer_declarator "*puVar17" (* "*") (identifier "puVar17")) (; ";")) (declaration "uint uVar18;" (type_identifier "uint") (identifier "uVar18") (; ";")) (declaration "int iVar19;" (primitive_type "int") (identifier "iVar19") (; ";")) (declaration "uint uVar20;" (type_identifier "uint") (identifier "uVar20") (; ";")) (declaration "undefined4 *puVar21;" (type_identifier "undefined4") (pointer_declarator "*puVar21" (* "*") (identifier "puVar21")) (; ";")) (declaration "int iVar22;" (primitive_type "int") (identifier "iVar22") (; ";")) (declaration "int iVar23;" (primitive_type "int") (identifier "iVar23") (; ";")) (declaration "int iVar24;" (primitive_type "int") (identifier "iVar24") (; ";")) (if_statement "if (param_3[*param_3] == 0) {\n    puVar14 = (uint *)(*(code *)PTR___assert_fail_000b8b18)\n                                (PTR_DAT_000b8348 + -0x7fc,PTR_DAT_000b8348 + -0x840,0x3b9,\n                                 PTR_DAT_000b8348 + -0x62c);\n    return puVar14;\n  }" (if "if") (parenthesized_expression "(param_3[*param_3] == 0)" (( "(") (binary_expression "param_3[*param_3] == 0" (subscript_expression "param_3[*param_3]" (identifier "param_3") ([ "[") (pointer_expression "*param_3" (* "*") (identifier "param_3")) (] "]")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    puVar14 = (uint *)(*(code *)PTR___assert_fail_000b8b18)\n                                (PTR_DAT_000b8348 + -0x7fc,PTR_DAT_000b8348 + -0x840,0x3b9,\n                                 PTR_DAT_000b8348 + -0x62c);\n    return puVar14;\n  }" ({ "{") (expression_statement "puVar14 = (uint *)(*(code *)PTR___assert_fail_000b8b18)\n                                (PTR_DAT_000b8348 + -0x7fc,PTR_DAT_000b8348 + -0x840,0x3b9,\n                                 PTR_DAT_000b8348 + -0x62c);" (assignment_expression "puVar14 = (uint *)(*(code *)PTR___assert_fail_000b8b18)\n                                (PTR_DAT_000b8348 + -0x7fc,PTR_DAT_000b8348 + -0x840,0x3b9,\n                                 PTR_DAT_000b8348 + -0x62c)" (identifier "puVar14") (= "=") (cast_expression "(uint *)(*(code *)PTR___assert_fail_000b8b18)\n                                (PTR_DAT_000b8348 + -0x7fc,PTR_DAT_000b8348 + -0x840,0x3b9,\n                                 PTR_DAT_000b8348 + -0x62c)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(*(code *)PTR___assert_fail_000b8b18)\n                                (PTR_DAT_000b8348 + -0x7fc,PTR_DAT_000b8348 + -0x840,0x3b9,\n                                 PTR_DAT_000b8348 + -0x62c)" (parenthesized_expression "(*(code *)PTR___assert_fail_000b8b18)" (( "(") (pointer_expression "*(code *)PTR___assert_fail_000b8b18" (* "*") (cast_expression "(code *)PTR___assert_fail_000b8b18" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___assert_fail_000b8b18"))) () ")")) (argument_list "(PTR_DAT_000b8348 + -0x7fc,PTR_DAT_000b8348 + -0x840,0x3b9,\n                                 PTR_DAT_000b8348 + -0x62c)" (( "(") (binary_expression "PTR_DAT_000b8348 + -0x7fc" (identifier "PTR_DAT_000b8348") (+ "+") (number_literal "-0x7fc")) (, ",") (binary_expression "PTR_DAT_000b8348 + -0x840" (identifier "PTR_DAT_000b8348") (+ "+") (number_literal "-0x840")) (, ",") (number_literal "0x3b9") (, ",") (binary_expression "PTR_DAT_000b8348 + -0x62c" (identifier "PTR_DAT_000b8348") (+ "+") (number_literal "-0x62c")) () ")"))))) (; ";")) (return_statement "return puVar14;" (return "return") (identifier "puVar14") (; ";")) (} "}"))) (expression_statement "piVar2 = (int *)bigmod(param_1,param_3);" (assignment_expression "piVar2 = (int *)bigmod(param_1,param_3)" (identifier "piVar2") (= "=") (cast_expression "(int *)bigmod(param_1,param_3)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "bigmod(param_1,param_3)" (identifier "bigmod") (argument_list "(param_1,param_3)" (( "(") (identifier "param_1") (, ",") (identifier "param_3") () ")"))))) (; ";")) (expression_statement "iVar19 = *param_3;" (assignment_expression "iVar19 = *param_3" (identifier "iVar19") (= "=") (pointer_expression "*param_3" (* "*") (identifier "param_3"))) (; ";")) (expression_statement "piVar3 = (int *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4);" (assignment_expression "piVar3 = (int *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4)" (identifier "piVar3") (= "=") (cast_expression "(int *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(*(code *)PTR_safemalloc_000b82f8)(iVar19,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b82f8)" (( "(") (pointer_expression "*(code *)PTR_safemalloc_000b82f8" (* "*") (cast_expression "(code *)PTR_safemalloc_000b82f8" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safemalloc_000b82f8"))) () ")")) (argument_list "(iVar19,4)" (( "(") (identifier "iVar19") (, ",") (number_literal "4") () ")"))))) (; ";")) (if_statement "if (0 < iVar19) {\n    iVar15 = 0;\n    piVar16 = piVar3;\n    do {\n      *piVar16 = param_3[*param_3 - iVar15];\n      iVar15 = iVar15 + 1;\n      piVar16 = piVar16 + 1;\n    } while (iVar19 != iVar15);\n  }" (if "if") (parenthesized_expression "(0 < iVar19)" (( "(") (binary_expression "0 < iVar19" (number_literal "0") (< "<") (identifier "iVar19")) () ")")) (compound_statement "{\n    iVar15 = 0;\n    piVar16 = piVar3;\n    do {\n      *piVar16 = param_3[*param_3 - iVar15];\n      iVar15 = iVar15 + 1;\n      piVar16 = piVar16 + 1;\n    } while (iVar19 != iVar15);\n  }" ({ "{") (expression_statement "iVar15 = 0;" (assignment_expression "iVar15 = 0" (identifier "iVar15") (= "=") (number_literal "0")) (; ";")) (expression_statement "piVar16 = piVar3;" (assignment_expression "piVar16 = piVar3" (identifier "piVar16") (= "=") (identifier "piVar3")) (; ";")) (do_statement "do {\n      *piVar16 = param_3[*param_3 - iVar15];\n      iVar15 = iVar15 + 1;\n      piVar16 = piVar16 + 1;\n    } while (iVar19 != iVar15);" (do "do") (compound_statement "{\n      *piVar16 = param_3[*param_3 - iVar15];\n      iVar15 = iVar15 + 1;\n      piVar16 = piVar16 + 1;\n    }" ({ "{") (expression_statement "*piVar16 = param_3[*param_3 - iVar15];" (assignment_expression "*piVar16 = param_3[*param_3 - iVar15]" (pointer_expression "*piVar16" (* "*") (identifier "piVar16")) (= "=") (subscript_expression "param_3[*param_3 - iVar15]" (identifier "param_3") ([ "[") (binary_expression "*param_3 - iVar15" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (- "-") (identifier "iVar15")) (] "]"))) (; ";")) (expression_statement "iVar15 = iVar15 + 1;" (assignment_expression "iVar15 = iVar15 + 1" (identifier "iVar15") (= "=") (binary_expression "iVar15 + 1" (identifier "iVar15") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "piVar16 = piVar16 + 1;" (assignment_expression "piVar16 = piVar16 + 1" (identifier "piVar16") (= "=") (binary_expression "piVar16 + 1" (identifier "piVar16") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar19 != iVar15)" (( "(") (binary_expression "iVar19 != iVar15" (identifier "iVar19") (!= "!=") (identifier "iVar15")) () ")")) (; ";")) (} "}"))) (expression_statement "puVar4 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4);" (assignment_expression "puVar4 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4)" (identifier "puVar4") (= "=") (cast_expression "(undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(*(code *)PTR_safemalloc_000b82f8)(iVar19,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b82f8)" (( "(") (pointer_expression "*(code *)PTR_safemalloc_000b82f8" (* "*") (cast_expression "(code *)PTR_safemalloc_000b82f8" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safemalloc_000b82f8"))) () ")")) (argument_list "(iVar19,4)" (( "(") (identifier "iVar19") (, ",") (number_literal "4") () ")"))))) (; ";")) (expression_statement "iVar15 = iVar19 - *piVar2;" (assignment_expression "iVar15 = iVar19 - *piVar2" (identifier "iVar15") (= "=") (binary_expression "iVar19 - *piVar2" (identifier "iVar19") (- "-") (pointer_expression "*piVar2" (* "*") (identifier "piVar2")))) (; ";")) (if_statement "if (0 < iVar15) {\n    puVar7 = puVar4;\n    do {\n      *puVar7 = 0;\n      puVar7 = puVar7 + 1;\n    } while (puVar7 != puVar4 + iVar15);\n  }" (if "if") (parenthesized_expression "(0 < iVar15)" (( "(") (binary_expression "0 < iVar15" (number_literal "0") (< "<") (identifier "iVar15")) () ")")) (compound_statement "{\n    puVar7 = puVar4;\n    do {\n      *puVar7 = 0;\n      puVar7 = puVar7 + 1;\n    } while (puVar7 != puVar4 + iVar15);\n  }" ({ "{") (expression_statement "puVar7 = puVar4;" (assignment_expression "puVar7 = puVar4" (identifier "puVar7") (= "=") (identifier "puVar4")) (; ";")) (do_statement "do {\n      *puVar7 = 0;\n      puVar7 = puVar7 + 1;\n    } while (puVar7 != puVar4 + iVar15);" (do "do") (compound_statement "{\n      *puVar7 = 0;\n      puVar7 = puVar7 + 1;\n    }" ({ "{") (expression_statement "*puVar7 = 0;" (assignment_expression "*puVar7 = 0" (pointer_expression "*puVar7" (* "*") (identifier "puVar7")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar7 = puVar7 + 1;" (assignment_expression "puVar7 = puVar7 + 1" (identifier "puVar7") (= "=") (binary_expression "puVar7 + 1" (identifier "puVar7") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(puVar7 != puVar4 + iVar15)" (( "(") (binary_expression "puVar7 != puVar4 + iVar15" (identifier "puVar7") (!= "!=") (binary_expression "puVar4 + iVar15" (identifier "puVar4") (+ "+") (identifier "iVar15"))) () ")")) (; ";")) (} "}"))) (expression_statement "iVar5 = *piVar2;" (assignment_expression "iVar5 = *piVar2" (identifier "iVar5") (= "=") (pointer_expression "*piVar2" (* "*") (identifier "piVar2"))) (; ";")) (if_statement "if (0 < iVar5) {\n    piVar16 = puVar4 + iVar15;\n    iVar15 = 0;\n    do {\n      *piVar16 = piVar2[iVar5 - iVar15];\n      iVar15 = iVar15 + 1;\n      iVar5 = *piVar2;\n      piVar16 = piVar16 + 1;\n    } while (iVar15 < iVar5);\n  }" (if "if") (parenthesized_expression "(0 < iVar5)" (( "(") (binary_expression "0 < iVar5" (number_literal "0") (< "<") (identifier "iVar5")) () ")")) (compound_statement "{\n    piVar16 = puVar4 + iVar15;\n    iVar15 = 0;\n    do {\n      *piVar16 = piVar2[iVar5 - iVar15];\n      iVar15 = iVar15 + 1;\n      iVar5 = *piVar2;\n      piVar16 = piVar16 + 1;\n    } while (iVar15 < iVar5);\n  }" ({ "{") (expression_statement "piVar16 = puVar4 + iVar15;" (assignment_expression "piVar16 = puVar4 + iVar15" (identifier "piVar16") (= "=") (binary_expression "puVar4 + iVar15" (identifier "puVar4") (+ "+") (identifier "iVar15"))) (; ";")) (expression_statement "iVar15 = 0;" (assignment_expression "iVar15 = 0" (identifier "iVar15") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n      *piVar16 = piVar2[iVar5 - iVar15];\n      iVar15 = iVar15 + 1;\n      iVar5 = *piVar2;\n      piVar16 = piVar16 + 1;\n    } while (iVar15 < iVar5);" (do "do") (compound_statement "{\n      *piVar16 = piVar2[iVar5 - iVar15];\n      iVar15 = iVar15 + 1;\n      iVar5 = *piVar2;\n      piVar16 = piVar16 + 1;\n    }" ({ "{") (expression_statement "*piVar16 = piVar2[iVar5 - iVar15];" (assignment_expression "*piVar16 = piVar2[iVar5 - iVar15]" (pointer_expression "*piVar16" (* "*") (identifier "piVar16")) (= "=") (subscript_expression "piVar2[iVar5 - iVar15]" (identifier "piVar2") ([ "[") (binary_expression "iVar5 - iVar15" (identifier "iVar5") (- "-") (identifier "iVar15")) (] "]"))) (; ";")) (expression_statement "iVar15 = iVar15 + 1;" (assignment_expression "iVar15 = iVar15 + 1" (identifier "iVar15") (= "=") (binary_expression "iVar15 + 1" (identifier "iVar15") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "iVar5 = *piVar2;" (assignment_expression "iVar5 = *piVar2" (identifier "iVar5") (= "=") (pointer_expression "*piVar2" (* "*") (identifier "piVar2"))) (; ";")) (expression_statement "piVar16 = piVar16 + 1;" (assignment_expression "piVar16 = piVar16 + 1" (identifier "piVar16") (= "=") (binary_expression "piVar16 + 1" (identifier "piVar16") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar15 < iVar5)" (( "(") (binary_expression "iVar15 < iVar5" (identifier "iVar15") (< "<") (identifier "iVar5")) () ")")) (; ";")) (} "}"))) (expression_statement "iVar15 = iVar19 << 1;" (assignment_expression "iVar15 = iVar19 << 1" (identifier "iVar15") (= "=") (binary_expression "iVar19 << 1" (identifier "iVar19") (<< "<<") (number_literal "1"))) (; ";")) (expression_statement "puVar6 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4);" (assignment_expression "puVar6 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4)" (identifier "puVar6") (= "=") (cast_expression "(undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(*(code *)PTR_safemalloc_000b82f8)(iVar15,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b82f8)" (( "(") (pointer_expression "*(code *)PTR_safemalloc_000b82f8" (* "*") (cast_expression "(code *)PTR_safemalloc_000b82f8" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safemalloc_000b82f8"))) () ")")) (argument_list "(iVar15,4)" (( "(") (identifier "iVar15") (, ",") (number_literal "4") () ")"))))) (; ";")) (expression_statement "puVar7 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4);" (assignment_expression "puVar7 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4)" (identifier "puVar7") (= "=") (cast_expression "(undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(*(code *)PTR_safemalloc_000b82f8)(iVar15,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b82f8)" (( "(") (pointer_expression "*(code *)PTR_safemalloc_000b82f8" (* "*") (cast_expression "(code *)PTR_safemalloc_000b82f8" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safemalloc_000b82f8"))) () ")")) (argument_list "(iVar15,4)" (( "(") (identifier "iVar15") (, ",") (number_literal "4") () ")"))))) (; ";")) (if_statement "if (0 < iVar15) {\n    puVar8 = puVar6;\n    do {\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    } while (puVar8 != puVar6 + iVar19 * 2);\n  }" (if "if") (parenthesized_expression "(0 < iVar15)" (( "(") (binary_expression "0 < iVar15" (number_literal "0") (< "<") (identifier "iVar15")) () ")")) (compound_statement "{\n    puVar8 = puVar6;\n    do {\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    } while (puVar8 != puVar6 + iVar19 * 2);\n  }" ({ "{") (expression_statement "puVar8 = puVar6;" (assignment_expression "puVar8 = puVar6" (identifier "puVar8") (= "=") (identifier "puVar6")) (; ";")) (do_statement "do {\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    } while (puVar8 != puVar6 + iVar19 * 2);" (do "do") (compound_statement "{\n      *puVar8 = 0;\n      puVar8 = puVar8 + 1;\n    }" ({ "{") (expression_statement "*puVar8 = 0;" (assignment_expression "*puVar8 = 0" (pointer_expression "*puVar8" (* "*") (identifier "puVar8")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar8 = puVar8 + 1;" (assignment_expression "puVar8 = puVar8 + 1" (identifier "puVar8") (= "=") (binary_expression "puVar8 + 1" (identifier "puVar8") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(puVar8 != puVar6 + iVar19 * 2)" (( "(") (binary_expression "puVar8 != puVar6 + iVar19 * 2" (identifier "puVar8") (!= "!=") (binary_expression "puVar6 + iVar19 * 2" (identifier "puVar6") (+ "+") (binary_expression "iVar19 * 2" (identifier "iVar19") (* "*") (number_literal "2")))) () ")")) (; ";")) (} "}"))) (expression_statement "puVar6[iVar19 * 2 + -1] = 1;" (assignment_expression "puVar6[iVar19 * 2 + -1] = 1" (subscript_expression "puVar6[iVar19 * 2 + -1]" (identifier "puVar6") ([ "[") (binary_expression "iVar19 * 2 + -1" (binary_expression "iVar19 * 2" (identifier "iVar19") (* "*") (number_literal "2")) (+ "+") (number_literal "-1")) (] "]")) (= "=") (number_literal "1")) (; ";")) (expression_statement "iVar5 = FUN_00052bdc();" (assignment_expression "iVar5 = FUN_00052bdc()" (identifier "iVar5") (= "=") (call_expression "FUN_00052bdc()" (identifier "FUN_00052bdc") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "uVar9 = (*(code *)PTR_safemalloc_000b82f8)(iVar5,4);" (assignment_expression "uVar9 = (*(code *)PTR_safemalloc_000b82f8)(iVar5,4)" (identifier "uVar9") (= "=") (call_expression "(*(code *)PTR_safemalloc_000b82f8)(iVar5,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000b82f8)" (( "(") (pointer_expression "*(code *)PTR_safemalloc_000b82f8" (* "*") (cast_expression "(code *)PTR_safemalloc_000b82f8" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safemalloc_000b82f8"))) () ")")) (argument_list "(iVar5,4)" (( "(") (identifier "iVar5") (, ",") (number_literal "4") () ")")))) (; ";")) (expression_statement "iVar23 = *param_2;" (assignment_expression "iVar23 = *param_2" (identifier "iVar23") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (expression_statement "iVar22 = 0;" (assignment_expression "iVar22 = 0" (identifier "iVar22") (= "=") (number_literal "0")) (; ";")) (labeled_statement "LAB_000561f0:\n  uVar20 = 0x1f;" (statement_identifier "LAB_000561f0") (: ":") (expression_statement "uVar20 = 0x1f;" (assignment_expression "uVar20 = 0x1f" (identifier "uVar20") (= "=") (number_literal "0x1f")) (; ";"))) (while_statement "while (iVar22 < iVar23) {\n    if ((1 << (uVar20 & 0x1f) & param_2[iVar23 - iVar22]) != 0) {\n      iVar24 = *piVar3;\n      uVar10 = FUN_00052c20(iVar24);\n      if (uVar10 != 0) goto LAB_00056608;\n      uVar11 = FUN_00052c64(iVar24);\n      goto LAB_000563c4;\n    }\n    uVar20 = uVar20 - 1;\n    if (uVar20 == 0xffffffff) goto code_r0x00056228;\n  }" (while "while") (parenthesized_expression "(iVar22 < iVar23)" (( "(") (binary_expression "iVar22 < iVar23" (identifier "iVar22") (< "<") (identifier "iVar23")) () ")")) (compound_statement "{\n    if ((1 << (uVar20 & 0x1f) & param_2[iVar23 - iVar22]) != 0) {\n      iVar24 = *piVar3;\n      uVar10 = FUN_00052c20(iVar24);\n      if (uVar10 != 0) goto LAB_00056608;\n      uVar11 = FUN_00052c64(iVar24);\n      goto LAB_000563c4;\n    }\n    uVar20 = uVar20 - 1;\n    if (uVar20 == 0xffffffff) goto code_r0x00056228;\n  }" ({ "{") (if_statement "if ((1 << (uVar20 & 0x1f) & param_2[iVar23 - iVar22]) != 0) {\n      iVar24 = *piVar3;\n      uVar10 = FUN_00052c20(iVar24);\n      if (uVar10 != 0) goto LAB_00056608;\n      uVar11 = FUN_00052c64(iVar24);\n      goto LAB_000563c4;\n    }" (if "if") (parenthesized_expression "((1 << (uVar20 & 0x1f) & param_2[iVar23 - iVar22]) != 0)" (( "(") (binary_expression "(1 << (uVar20 & 0x1f) & param_2[iVar23 - iVar22]) != 0" (parenthesized_expression "(1 << (uVar20 & 0x1f) & param_2[iVar23 - iVar22])" (( "(") (binary_expression "1 << (uVar20 & 0x1f) & param_2[iVar23 - iVar22]" (binary_expression "1 << (uVar20 & 0x1f)" (number_literal "1") (<< "<<") (parenthesized_expression "(uVar20 & 0x1f)" (( "(") (binary_expression "uVar20 & 0x1f" (identifier "uVar20") (& "&") (number_literal "0x1f")) () ")"))) (& "&") (subscript_expression "param_2[iVar23 - iVar22]" (identifier "param_2") ([ "[") (binary_expression "iVar23 - iVar22" (identifier "iVar23") (- "-") (identifier "iVar22")) (] "]"))) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      iVar24 = *piVar3;\n      uVar10 = FUN_00052c20(iVar24);\n      if (uVar10 != 0) goto LAB_00056608;\n      uVar11 = FUN_00052c64(iVar24);\n      goto LAB_000563c4;\n    }" ({ "{") (expression_statement "iVar24 = *piVar3;" (assignment_expression "iVar24 = *piVar3" (identifier "iVar24") (= "=") (pointer_expression "*piVar3" (* "*") (identifier "piVar3"))) (; ";")) (expression_statement "uVar10 = FUN_00052c20(iVar24);" (assignment_expression "uVar10 = FUN_00052c20(iVar24)" (identifier "uVar10") (= "=") (call_expression "FUN_00052c20(iVar24)" (identifier "FUN_00052c20") (argument_list "(iVar24)" (( "(") (identifier "iVar24") () ")")))) (; ";")) (if_statement "if (uVar10 != 0) goto LAB_00056608;" (if "if") (parenthesized_expression "(uVar10 != 0)" (( "(") (binary_expression "uVar10 != 0" (identifier "uVar10") (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_00056608;" (goto "goto") (statement_identifier "LAB_00056608") (; ";"))) (expression_statement "uVar11 = FUN_00052c64(iVar24);" (assignment_expression "uVar11 = FUN_00052c64(iVar24)" (identifier "uVar11") (= "=") (call_expression "FUN_00052c64(iVar24)" (identifier "FUN_00052c64") (argument_list "(iVar24)" (( "(") (identifier "iVar24") () ")")))) (; ";")) (goto_statement "goto LAB_000563c4;" (goto "goto") (statement_identifier "LAB_000563c4") (; ";")) (} "}"))) (expression_statement "uVar20 = uVar20 - 1;" (assignment_expression "uVar20 = uVar20 - 1" (identifier "uVar20") (= "=") (binary_expression "uVar20 - 1" (identifier "uVar20") (- "-") (number_literal "1"))) (; ";")) (if_statement "if (uVar20 == 0xffffffff) goto code_r0x00056228;" (if "if") (parenthesized_expression "(uVar20 == 0xffffffff)" (( "(") (binary_expression "uVar20 == 0xffffffff" (identifier "uVar20") (== "==") (number_literal "0xffffffff")) () ")")) (goto_statement "goto code_r0x00056228;" (goto "goto") (statement_identifier "code_r0x00056228") (; ";"))) (} "}"))) (expression_statement "iVar24 = *piVar3;" (assignment_expression "iVar24 = *piVar3" (identifier "iVar24") (= "=") (pointer_expression "*piVar3" (* "*") (identifier "piVar3"))) (; ";")) (expression_statement "uVar10 = FUN_00052c20(iVar24);" (assignment_expression "uVar10 = FUN_00052c20(iVar24)" (identifier "uVar10") (= "=") (call_expression "FUN_00052c20(iVar24)" (identifier "FUN_00052c20") (argument_list "(iVar24)" (( "(") (identifier "iVar24") () ")")))) (; ";")) (if_statement "if (uVar10 == 0) {\n    FUN_00052c64(iVar24);\n    goto LAB_00056404;\n  }" (if "if") (parenthesized_expression "(uVar10 == 0)" (( "(") (binary_expression "uVar10 == 0" (identifier "uVar10") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_00052c64(iVar24);\n    goto LAB_00056404;\n  }" ({ "{") (expression_statement "FUN_00052c64(iVar24);" (call_expression "FUN_00052c64(iVar24)" (identifier "FUN_00052c64") (argument_list "(iVar24)" (( "(") (identifier "iVar24") () ")"))) (; ";")) (goto_statement "goto LAB_00056404;" (goto "goto") (statement_identifier "LAB_00056404") (; ";")) (} "}"))) (labeled_statement "LAB_00056608:\n  uVar18 = iVar24 << (uVar10 & 0x1f);" (statement_identifier "LAB_00056608") (: ":") (expression_statement "uVar18 = iVar24 << (uVar10 & 0x1f);" (assignment_expression "uVar18 = iVar24 << (uVar10 & 0x1f)" (identifier "uVar18") (= "=") (binary_expression "iVar24 << (uVar10 & 0x1f)" (identifier "iVar24") (<< "<<") (parenthesized_expression "(uVar10 & 0x1f)" (( "(") (binary_expression "uVar10 & 0x1f" (identifier "uVar10") (& "&") (number_literal "0x1f")) () ")")))) (; ";"))) (if_statement "if (iVar19 < 2) {\n    uVar11 = FUN_00052c64(uVar18);\n    if (iVar23 <= iVar22) goto LAB_00056404;\n  }\n  else {\n    uVar11 = FUN_00052c64((uint)piVar3[1] >> (-uVar10 & 0x1f) | uVar18);\n    if (iVar23 <= iVar22) {\n      puVar14 = (uint *)FUN_00053e48(*param_3);\n      goto LAB_0005642c;\n    }\n  }" (if "if") (parenthesized_expression "(iVar19 < 2)" (( "(") (binary_expression "iVar19 < 2" (identifier "iVar19") (< "<") (number_literal "2")) () ")")) (compound_statement "{\n    uVar11 = FUN_00052c64(uVar18);\n    if (iVar23 <= iVar22) goto LAB_00056404;\n  }" ({ "{") (expression_statement "uVar11 = FUN_00052c64(uVar18);" (assignment_expression "uVar11 = FUN_00052c64(uVar18)" (identifier "uVar11") (= "=") (call_expression "FUN_00052c64(uVar18)" (identifier "FUN_00052c64") (argument_list "(uVar18)" (( "(") (identifier "uVar18") () ")")))) (; ";")) (if_statement "if (iVar23 <= iVar22) goto LAB_00056404;" (if "if") (parenthesized_expression "(iVar23 <= iVar22)" (( "(") (binary_expression "iVar23 <= iVar22" (identifier "iVar23") (<= "<=") (identifier "iVar22")) () ")")) (goto_statement "goto LAB_00056404;" (goto "goto") (statement_identifier "LAB_00056404") (; ";"))) (} "}")) (else_clause "else {\n    uVar11 = FUN_00052c64((uint)piVar3[1] >> (-uVar10 & 0x1f) | uVar18);\n    if (iVar23 <= iVar22) {\n      puVar14 = (uint *)FUN_00053e48(*param_3);\n      goto LAB_0005642c;\n    }\n  }" (else "else") (compound_statement "{\n    uVar11 = FUN_00052c64((uint)piVar3[1] >> (-uVar10 & 0x1f) | uVar18);\n    if (iVar23 <= iVar22) {\n      puVar14 = (uint *)FUN_00053e48(*param_3);\n      goto LAB_0005642c;\n    }\n  }" ({ "{") (expression_statement "uVar11 = FUN_00052c64((uint)piVar3[1] >> (-uVar10 & 0x1f) | uVar18);" (assignment_expression "uVar11 = FUN_00052c64((uint)piVar3[1] >> (-uVar10 & 0x1f) | uVar18)" (identifier "uVar11") (= "=") (call_expression "FUN_00052c64((uint)piVar3[1] >> (-uVar10 & 0x1f) | uVar18)" (identifier "FUN_00052c64") (argument_list "((uint)piVar3[1] >> (-uVar10 & 0x1f) | uVar18)" (( "(") (binary_expression "(uint)piVar3[1] >> (-uVar10 & 0x1f) | uVar18" (binary_expression "(uint)piVar3[1] >> (-uVar10 & 0x1f)" (cast_expression "(uint)piVar3[1]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "piVar3[1]" (identifier "piVar3") ([ "[") (number_literal "1") (] "]"))) (>> ">>") (parenthesized_expression "(-uVar10 & 0x1f)" (( "(") (binary_expression "-uVar10 & 0x1f" (unary_expression "-uVar10" (- "-") (identifier "uVar10")) (& "&") (number_literal "0x1f")) () ")"))) (| "|") (identifier "uVar18")) () ")")))) (; ";")) (if_statement "if (iVar23 <= iVar22) {\n      puVar14 = (uint *)FUN_00053e48(*param_3);\n      goto LAB_0005642c;\n    }" (if "if") (parenthesized_expression "(iVar23 <= iVar22)" (( "(") (binary_expression "iVar23 <= iVar22" (identifier "iVar23") (<= "<=") (identifier "iVar22")) () ")")) (compound_statement "{\n      puVar14 = (uint *)FUN_00053e48(*param_3);\n      goto LAB_0005642c;\n    }" ({ "{") (expression_statement "puVar14 = (uint *)FUN_00053e48(*param_3);" (assignment_expression "puVar14 = (uint *)FUN_00053e48(*param_3)" (identifier "puVar14") (= "=") (cast_expression "(uint *)FUN_00053e48(*param_3)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_00053e48(*param_3)" (identifier "FUN_00053e48") (argument_list "(*param_3)" (( "(") (pointer_expression "*param_3" (* "*") (identifier "param_3")) () ")"))))) (; ";")) (goto_statement "goto LAB_0005642c;" (goto "goto") (statement_identifier "LAB_0005642c") (; ";")) (} "}"))) (} "}")))) (labeled_statement "LAB_000563c4:\n  pcVar12 = (code *)(PTR_LAB_000b8640 + 0x2da0);" (statement_identifier "LAB_000563c4") (: ":") (expression_statement "pcVar12 = (code *)(PTR_LAB_000b8640 + 0x2da0);" (assignment_expression "pcVar12 = (code *)(PTR_LAB_000b8640 + 0x2da0)" (identifier "pcVar12") (= "=") (cast_expression "(code *)(PTR_LAB_000b8640 + 0x2da0)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_000b8640 + 0x2da0)" (( "(") (binary_expression "PTR_LAB_000b8640 + 0x2da0" (identifier "PTR_LAB_000b8640") (+ "+") (number_literal "0x2da0")) () ")")))) (; ";"))) (expression_statement "pcVar13 = (code *)(PTR_LAB_000b8640 + 0x37b8);" (assignment_expression "pcVar13 = (code *)(PTR_LAB_000b8640 + 0x37b8)" (identifier "pcVar13") (= "=") (cast_expression "(code *)(PTR_LAB_000b8640 + 0x37b8)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_000b8640 + 0x37b8)" (( "(") (binary_expression "PTR_LAB_000b8640 + 0x37b8" (identifier "PTR_LAB_000b8640") (+ "+") (number_literal "0x37b8")) () ")")))) (; ";")) (do_statement "do {\n    puVar8 = puVar7;\n    puVar21 = puVar6;\n    if (-1 < (int)uVar20) {\n      do {\n        (*pcVar12)(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9);\n        (*pcVar13)(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n        puVar7 = puVar21;\n        puVar6 = puVar8;\n        if ((1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0) {\n          (*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);\n          (*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n          puVar7 = puVar8;\n          puVar6 = puVar21;\n        }\n        uVar20 = uVar20 - 1;\n        puVar8 = puVar7;\n        puVar21 = puVar6;\n      } while (uVar20 != 0xffffffff);\n    }\n    iVar22 = iVar22 + 1;\n    uVar20 = 0x1f;\n  } while (iVar22 < *param_2);" (do "do") (compound_statement "{\n    puVar8 = puVar7;\n    puVar21 = puVar6;\n    if (-1 < (int)uVar20) {\n      do {\n        (*pcVar12)(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9);\n        (*pcVar13)(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n        puVar7 = puVar21;\n        puVar6 = puVar8;\n        if ((1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0) {\n          (*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);\n          (*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n          puVar7 = puVar8;\n          puVar6 = puVar21;\n        }\n        uVar20 = uVar20 - 1;\n        puVar8 = puVar7;\n        puVar21 = puVar6;\n      } while (uVar20 != 0xffffffff);\n    }\n    iVar22 = iVar22 + 1;\n    uVar20 = 0x1f;\n  }" ({ "{") (expression_statement "puVar8 = puVar7;" (assignment_expression "puVar8 = puVar7" (identifier "puVar8") (= "=") (identifier "puVar7")) (; ";")) (expression_statement "puVar21 = puVar6;" (assignment_expression "puVar21 = puVar6" (identifier "puVar21") (= "=") (identifier "puVar6")) (; ";")) (if_statement "if (-1 < (int)uVar20) {\n      do {\n        (*pcVar12)(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9);\n        (*pcVar13)(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n        puVar7 = puVar21;\n        puVar6 = puVar8;\n        if ((1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0) {\n          (*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);\n          (*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n          puVar7 = puVar8;\n          puVar6 = puVar21;\n        }\n        uVar20 = uVar20 - 1;\n        puVar8 = puVar7;\n        puVar21 = puVar6;\n      } while (uVar20 != 0xffffffff);\n    }" (if "if") (parenthesized_expression "(-1 < (int)uVar20)" (( "(") (binary_expression "-1 < (int)uVar20" (number_literal "-1") (< "<") (cast_expression "(int)uVar20" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar20"))) () ")")) (compound_statement "{\n      do {\n        (*pcVar12)(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9);\n        (*pcVar13)(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n        puVar7 = puVar21;\n        puVar6 = puVar8;\n        if ((1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0) {\n          (*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);\n          (*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n          puVar7 = puVar8;\n          puVar6 = puVar21;\n        }\n        uVar20 = uVar20 - 1;\n        puVar8 = puVar7;\n        puVar21 = puVar6;\n      } while (uVar20 != 0xffffffff);\n    }" ({ "{") (do_statement "do {\n        (*pcVar12)(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9);\n        (*pcVar13)(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n        puVar7 = puVar21;\n        puVar6 = puVar8;\n        if ((1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0) {\n          (*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);\n          (*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n          puVar7 = puVar8;\n          puVar6 = puVar21;\n        }\n        uVar20 = uVar20 - 1;\n        puVar8 = puVar7;\n        puVar21 = puVar6;\n      } while (uVar20 != 0xffffffff);" (do "do") (compound_statement "{\n        (*pcVar12)(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9);\n        (*pcVar13)(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n        puVar7 = puVar21;\n        puVar6 = puVar8;\n        if ((1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0) {\n          (*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);\n          (*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n          puVar7 = puVar8;\n          puVar6 = puVar21;\n        }\n        uVar20 = uVar20 - 1;\n        puVar8 = puVar7;\n        puVar21 = puVar6;\n      }" ({ "{") (expression_statement "(*pcVar12)(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9);" (call_expression "(*pcVar12)(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9)" (parenthesized_expression "(*pcVar12)" (( "(") (pointer_expression "*pcVar12" (* "*") (identifier "pcVar12")) () ")")) (argument_list "(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9)" (( "(") (binary_expression "puVar21 + iVar19" (identifier "puVar21") (+ "+") (identifier "iVar19")) (, ",") (binary_expression "puVar21 + iVar19" (identifier "puVar21") (+ "+") (identifier "iVar19")) (, ",") (identifier "puVar8") (, ",") (identifier "iVar19") (, ",") (identifier "uVar9") () ")"))) (; ";")) (expression_statement "(*pcVar13)(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10);" (call_expression "(*pcVar13)(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10)" (parenthesized_expression "(*pcVar13)" (( "(") (pointer_expression "*pcVar13" (* "*") (identifier "pcVar13")) () ")")) (argument_list "(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10)" (( "(") (identifier "puVar8") (, ",") (identifier "iVar15") (, ",") (identifier "piVar3") (, ",") (identifier "iVar19") (, ",") (number_literal "0") (, ",") (identifier "uVar11") (, ",") (identifier "uVar10") () ")"))) (; ";")) (expression_statement "puVar7 = puVar21;" (assignment_expression "puVar7 = puVar21" (identifier "puVar7") (= "=") (identifier "puVar21")) (; ";")) (expression_statement "puVar6 = puVar8;" (assignment_expression "puVar6 = puVar8" (identifier "puVar6") (= "=") (identifier "puVar8")) (; ";")) (if_statement "if ((1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0) {\n          (*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);\n          (*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n          puVar7 = puVar8;\n          puVar6 = puVar21;\n        }" (if "if") (parenthesized_expression "((1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0)" (( "(") (binary_expression "(1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0" (parenthesized_expression "(1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22])" (( "(") (binary_expression "1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]" (binary_expression "1 << (uVar20 & 0x1f)" (number_literal "1") (<< "<<") (parenthesized_expression "(uVar20 & 0x1f)" (( "(") (binary_expression "uVar20 & 0x1f" (identifier "uVar20") (& "&") (number_literal "0x1f")) () ")"))) (& "&") (subscript_expression "param_2[*param_2 - iVar22]" (identifier "param_2") ([ "[") (binary_expression "*param_2 - iVar22" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (- "-") (identifier "iVar22")) (] "]"))) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          (*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);\n          (*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);\n          puVar7 = puVar8;\n          puVar6 = puVar21;\n        }" ({ "{") (expression_statement "(*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);" (call_expression "(*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9)" (parenthesized_expression "(*pcVar12)" (( "(") (pointer_expression "*pcVar12" (* "*") (identifier "pcVar12")) () ")")) (argument_list "(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9)" (( "(") (binary_expression "puVar8 + iVar19" (identifier "puVar8") (+ "+") (identifier "iVar19")) (, ",") (identifier "puVar4") (, ",") (identifier "puVar21") (, ",") (identifier "iVar19") (, ",") (identifier "uVar9") () ")"))) (; ";")) (expression_statement "(*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);" (call_expression "(*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10)" (parenthesized_expression "(*pcVar13)" (( "(") (pointer_expression "*pcVar13" (* "*") (identifier "pcVar13")) () ")")) (argument_list "(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10)" (( "(") (identifier "puVar21") (, ",") (identifier "iVar15") (, ",") (identifier "piVar3") (, ",") (identifier "iVar19") (, ",") (number_literal "0") (, ",") (identifier "uVar11") (, ",") (identifier "uVar10") () ")"))) (; ";")) (expression_statement "puVar7 = puVar8;" (assignment_expression "puVar7 = puVar8" (identifier "puVar7") (= "=") (identifier "puVar8")) (; ";")) (expression_statement "puVar6 = puVar21;" (assignment_expression "puVar6 = puVar21" (identifier "puVar6") (= "=") (identifier "puVar21")) (; ";")) (} "}"))) (expression_statement "uVar20 = uVar20 - 1;" (assignment_expression "uVar20 = uVar20 - 1" (identifier "uVar20") (= "=") (binary_expression "uVar20 - 1" (identifier "uVar20") (- "-") (number_literal "1"))) (; ";")) (expression_statement "puVar8 = puVar7;" (assignment_expression "puVar8 = puVar7" (identifier "puVar8") (= "=") (identifier "puVar7")) (; ";")) (expression_statement "puVar21 = puVar6;" (assignment_expression "puVar21 = puVar6" (identifier "puVar21") (= "=") (identifier "puVar6")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar20 != 0xffffffff)" (( "(") (binary_expression "uVar20 != 0xffffffff" (identifier "uVar20") (!= "!=") (number_literal "0xffffffff")) () ")")) (; ";")) (} "}"))) (expression_statement "iVar22 = iVar22 + 1;" (assignment_expression "iVar22 = iVar22 + 1" (identifier "iVar22") (= "=") (binary_expression "iVar22 + 1" (identifier "iVar22") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar20 = 0x1f;" (assignment_expression "uVar20 = 0x1f" (identifier "uVar20") (= "=") (number_literal "0x1f")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar22 < *param_2)" (( "(") (binary_expression "iVar22 < *param_2" (identifier "iVar22") (< "<") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) () ")")) (; ";")) (labeled_statement "LAB_00056404:\n  puVar14 = (uint *)FUN_00053e48(*param_3);" (statement_identifier "LAB_00056404") (: ":") (expression_statement "puVar14 = (uint *)FUN_00053e48(*param_3);" (assignment_expression "puVar14 = (uint *)FUN_00053e48(*param_3)" (identifier "puVar14") (= "=") (cast_expression "(uint *)FUN_00053e48(*param_3)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_00053e48(*param_3)" (identifier "FUN_00053e48") (argument_list "(*param_3)" (( "(") (pointer_expression "*param_3" (* "*") (identifier "param_3")) () ")"))))) (; ";"))) (if_statement "if (0 < iVar19) {\nLAB_0005642c:\n    puVar17 = puVar6 + iVar19;\n    iVar15 = 0;\n    do {\n      puVar14[*puVar14 - iVar15] = *puVar17;\n      iVar15 = iVar15 + 1;\n      puVar17 = puVar17 + 1;\n    } while (iVar15 < iVar19);\n  }" (if "if") (parenthesized_expression "(0 < iVar19)" (( "(") (binary_expression "0 < iVar19" (number_literal "0") (< "<") (identifier "iVar19")) () ")")) (compound_statement "{\nLAB_0005642c:\n    puVar17 = puVar6 + iVar19;\n    iVar15 = 0;\n    do {\n      puVar14[*puVar14 - iVar15] = *puVar17;\n      iVar15 = iVar15 + 1;\n      puVar17 = puVar17 + 1;\n    } while (iVar15 < iVar19);\n  }" ({ "{") (labeled_statement "LAB_0005642c:\n    puVar17 = puVar6 + iVar19;" (statement_identifier "LAB_0005642c") (: ":") (expression_statement "puVar17 = puVar6 + iVar19;" (assignment_expression "puVar17 = puVar6 + iVar19" (identifier "puVar17") (= "=") (binary_expression "puVar6 + iVar19" (identifier "puVar6") (+ "+") (identifier "iVar19"))) (; ";"))) (expression_statement "iVar15 = 0;" (assignment_expression "iVar15 = 0" (identifier "iVar15") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n      puVar14[*puVar14 - iVar15] = *puVar17;\n      iVar15 = iVar15 + 1;\n      puVar17 = puVar17 + 1;\n    } while (iVar15 < iVar19);" (do "do") (compound_statement "{\n      puVar14[*puVar14 - iVar15] = *puVar17;\n      iVar15 = iVar15 + 1;\n      puVar17 = puVar17 + 1;\n    }" ({ "{") (expression_statement "puVar14[*puVar14 - iVar15] = *puVar17;" (assignment_expression "puVar14[*puVar14 - iVar15] = *puVar17" (subscript_expression "puVar14[*puVar14 - iVar15]" (identifier "puVar14") ([ "[") (binary_expression "*puVar14 - iVar15" (pointer_expression "*puVar14" (* "*") (identifier "puVar14")) (- "-") (identifier "iVar15")) (] "]")) (= "=") (pointer_expression "*puVar17" (* "*") (identifier "puVar17"))) (; ";")) (expression_statement "iVar15 = iVar15 + 1;" (assignment_expression "iVar15 = iVar15 + 1" (identifier "iVar15") (= "=") (binary_expression "iVar15 + 1" (identifier "iVar15") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar17 = puVar17 + 1;" (assignment_expression "puVar17 = puVar17 + 1" (identifier "puVar17") (= "=") (binary_expression "puVar17 + 1" (identifier "puVar17") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar15 < iVar19)" (( "(") (binary_expression "iVar15 < iVar19" (identifier "iVar15") (< "<") (identifier "iVar19")) () ")")) (; ";")) (} "}"))) (expression_statement "uVar20 = *puVar14;" (assignment_expression "uVar20 = *puVar14" (identifier "uVar20") (= "=") (pointer_expression "*puVar14" (* "*") (identifier "puVar14"))) (; ";")) (if_statement "if (1 < uVar20) {\n    puVar17 = puVar14 + uVar20;\n    uVar10 = *puVar17;\n    while (uVar10 == 0) {\n      uVar20 = uVar20 - 1;\n      *puVar14 = uVar20;\n      if (uVar20 == 1) break;\n      puVar1 = puVar17 + -1;\n      puVar17 = puVar17 + -1;\n      uVar10 = *puVar1;\n    }\n  }" (if "if") (parenthesized_expression "(1 < uVar20)" (( "(") (binary_expression "1 < uVar20" (number_literal "1") (< "<") (identifier "uVar20")) () ")")) (compound_statement "{\n    puVar17 = puVar14 + uVar20;\n    uVar10 = *puVar17;\n    while (uVar10 == 0) {\n      uVar20 = uVar20 - 1;\n      *puVar14 = uVar20;\n      if (uVar20 == 1) break;\n      puVar1 = puVar17 + -1;\n      puVar17 = puVar17 + -1;\n      uVar10 = *puVar1;\n    }\n  }" ({ "{") (expression_statement "puVar17 = puVar14 + uVar20;" (assignment_expression "puVar17 = puVar14 + uVar20" (identifier "puVar17") (= "=") (binary_expression "puVar14 + uVar20" (identifier "puVar14") (+ "+") (identifier "uVar20"))) (; ";")) (expression_statement "uVar10 = *puVar17;" (assignment_expression "uVar10 = *puVar17" (identifier "uVar10") (= "=") (pointer_expression "*puVar17" (* "*") (identifier "puVar17"))) (; ";")) (while_statement "while (uVar10 == 0) {\n      uVar20 = uVar20 - 1;\n      *puVar14 = uVar20;\n      if (uVar20 == 1) break;\n      puVar1 = puVar17 + -1;\n      puVar17 = puVar17 + -1;\n      uVar10 = *puVar1;\n    }" (while "while") (parenthesized_expression "(uVar10 == 0)" (( "(") (binary_expression "uVar10 == 0" (identifier "uVar10") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      uVar20 = uVar20 - 1;\n      *puVar14 = uVar20;\n      if (uVar20 == 1) break;\n      puVar1 = puVar17 + -1;\n      puVar17 = puVar17 + -1;\n      uVar10 = *puVar1;\n    }" ({ "{") (expression_statement "uVar20 = uVar20 - 1;" (assignment_expression "uVar20 = uVar20 - 1" (identifier "uVar20") (= "=") (binary_expression "uVar20 - 1" (identifier "uVar20") (- "-") (number_literal "1"))) (; ";")) (expression_statement "*puVar14 = uVar20;" (assignment_expression "*puVar14 = uVar20" (pointer_expression "*puVar14" (* "*") (identifier "puVar14")) (= "=") (identifier "uVar20")) (; ";")) (if_statement "if (uVar20 == 1) break;" (if "if") (parenthesized_expression "(uVar20 == 1)" (( "(") (binary_expression "uVar20 == 1" (identifier "uVar20") (== "==") (number_literal "1")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "puVar1 = puVar17 + -1;" (assignment_expression "puVar1 = puVar17 + -1" (identifier "puVar1") (= "=") (binary_expression "puVar17 + -1" (identifier "puVar17") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "puVar17 = puVar17 + -1;" (assignment_expression "puVar17 = puVar17 + -1" (identifier "puVar17") (= "=") (binary_expression "puVar17 + -1" (identifier "puVar17") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar10 = *puVar1;" (assignment_expression "uVar10 = *puVar1" (identifier "uVar10") (= "=") (pointer_expression "*puVar1" (* "*") (identifier "puVar1"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "(*(code *)PTR_smemclr_000b8328)(puVar6,iVar19 * 8);" (call_expression "(*(code *)PTR_smemclr_000b8328)(puVar6,iVar19 * 8)" (parenthesized_expression "(*(code *)PTR_smemclr_000b8328)" (( "(") (pointer_expression "*(code *)PTR_smemclr_000b8328" (* "*") (cast_expression "(code *)PTR_smemclr_000b8328" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_smemclr_000b8328"))) () ")")) (argument_list "(puVar6,iVar19 * 8)" (( "(") (identifier "puVar6") (, ",") (binary_expression "iVar19 * 8" (identifier "iVar19") (* "*") (number_literal "8")) () ")"))) (; ";")) (expression_statement "(*(code *)PTR_safefree_000b82e8)(puVar6);" (call_expression "(*(code *)PTR_safefree_000b82e8)(puVar6)" (parenthesized_expression "(*(code *)PTR_safefree_000b82e8)" (( "(") (pointer_expression "*(code *)PTR_safefree_000b82e8" (* "*") (cast_expression "(code *)PTR_safefree_000b82e8" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safefree_000b82e8"))) () ")")) (argument_list "(puVar6)" (( "(") (identifier "puVar6") () ")"))) (; ";")) (expression_statement "(*(code *)PTR_smemclr_000b8328)(uVar9,iVar5 << 2);" (call_expression "(*(code *)PTR_smemclr_000b8328)(uVar9,iVar5 << 2)" (parenthesized_expression "(*(code *)PTR_smemclr_000b8328)" (( "(") (pointer_expression "*(code *)PTR_smemclr_000b8328" (* "*") (cast_expression "(code *)PTR_smemclr_000b8328" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_smemclr_000b8328"))) () ")")) (argument_list "(uVar9,iVar5 << 2)" (( "(") (identifier "uVar9") (, ",") (binary_expression "iVar5 << 2" (identifier "iVar5") (<< "<<") (number_literal "2")) () ")"))) (; ";")) (expression_statement "(*(code *)PTR_safefree_000b82e8)(uVar9);" (call_expression "(*(code *)PTR_safefree_000b82e8)(uVar9)" (parenthesized_expression "(*(code *)PTR_safefree_000b82e8)" (( "(") (pointer_expression "*(code *)PTR_safefree_000b82e8" (* "*") (cast_expression "(code *)PTR_safefree_000b82e8" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safefree_000b82e8"))) () ")")) (argument_list "(uVar9)" (( "(") (identifier "uVar9") () ")"))) (; ";")) (expression_statement "(*(code *)PTR_smemclr_000b8328)(puVar7,iVar19 * 8);" (call_expression "(*(code *)PTR_smemclr_000b8328)(puVar7,iVar19 * 8)" (parenthesized_expression "(*(code *)PTR_smemclr_000b8328)" (( "(") (pointer_expression "*(code *)PTR_smemclr_000b8328" (* "*") (cast_expression "(code *)PTR_smemclr_000b8328" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_smemclr_000b8328"))) () ")")) (argument_list "(puVar7,iVar19 * 8)" (( "(") (identifier "puVar7") (, ",") (binary_expression "iVar19 * 8" (identifier "iVar19") (* "*") (number_literal "8")) () ")"))) (; ";")) (expression_statement "(*(code *)PTR_safefree_000b82e8)(puVar7);" (call_expression "(*(code *)PTR_safefree_000b82e8)(puVar7)" (parenthesized_expression "(*(code *)PTR_safefree_000b82e8)" (( "(") (pointer_expression "*(code *)PTR_safefree_000b82e8" (* "*") (cast_expression "(code *)PTR_safefree_000b82e8" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safefree_000b82e8"))) () ")")) (argument_list "(puVar7)" (( "(") (identifier "puVar7") () ")"))) (; ";")) (expression_statement "(*(code *)PTR_smemclr_000b8328)(piVar3,iVar19 << 2);" (call_expression "(*(code *)PTR_smemclr_000b8328)(piVar3,iVar19 << 2)" (parenthesized_expression "(*(code *)PTR_smemclr_000b8328)" (( "(") (pointer_expression "*(code *)PTR_smemclr_000b8328" (* "*") (cast_expression "(code *)PTR_smemclr_000b8328" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_smemclr_000b8328"))) () ")")) (argument_list "(piVar3,iVar19 << 2)" (( "(") (identifier "piVar3") (, ",") (binary_expression "iVar19 << 2" (identifier "iVar19") (<< "<<") (number_literal "2")) () ")"))) (; ";")) (expression_statement "(*(code *)PTR_safefree_000b82e8)(piVar3);" (call_expression "(*(code *)PTR_safefree_000b82e8)(piVar3)" (parenthesized_expression "(*(code *)PTR_safefree_000b82e8)" (( "(") (pointer_expression "*(code *)PTR_safefree_000b82e8" (* "*") (cast_expression "(code *)PTR_safefree_000b82e8" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safefree_000b82e8"))) () ")")) (argument_list "(piVar3)" (( "(") (identifier "piVar3") () ")"))) (; ";")) (expression_statement "(*(code *)PTR_smemclr_000b8328)(puVar4,iVar19 << 2);" (call_expression "(*(code *)PTR_smemclr_000b8328)(puVar4,iVar19 << 2)" (parenthesized_expression "(*(code *)PTR_smemclr_000b8328)" (( "(") (pointer_expression "*(code *)PTR_smemclr_000b8328" (* "*") (cast_expression "(code *)PTR_smemclr_000b8328" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_smemclr_000b8328"))) () ")")) (argument_list "(puVar4,iVar19 << 2)" (( "(") (identifier "puVar4") (, ",") (binary_expression "iVar19 << 2" (identifier "iVar19") (<< "<<") (number_literal "2")) () ")"))) (; ";")) (expression_statement "(*(code *)PTR_safefree_000b82e8)(puVar4);" (call_expression "(*(code *)PTR_safefree_000b82e8)(puVar4)" (parenthesized_expression "(*(code *)PTR_safefree_000b82e8)" (( "(") (pointer_expression "*(code *)PTR_safefree_000b82e8" (* "*") (cast_expression "(code *)PTR_safefree_000b82e8" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safefree_000b82e8"))) () ")")) (argument_list "(puVar4)" (( "(") (identifier "puVar4") () ")"))) (; ";")) (expression_statement "freebn(piVar2);" (call_expression "freebn(piVar2)" (identifier "freebn") (argument_list "(piVar2)" (( "(") (identifier "piVar2") () ")"))) (; ";")) (return_statement "return puVar14;" (return "return") (identifier "puVar14") (; ";")) (labeled_statement "code_r0x00056228:\n  iVar22 = iVar22 + 1;" (statement_identifier "code_r0x00056228") (: ":") (expression_statement "iVar22 = iVar22 + 1;" (assignment_expression "iVar22 = iVar22 + 1" (identifier "iVar22") (= "=") (binary_expression "iVar22 + 1" (identifier "iVar22") (+ "+") (number_literal "1"))) (; ";"))) (goto_statement "goto LAB_000561f0;" (goto "goto") (statement_identifier "LAB_000561f0") (; ";")) (} "}")))
(translation_unit (function_definition type: (type_identifier) declarator: (pointer_declarator declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier)))))) body: (compound_statement (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) 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: (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: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator 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: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (if_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (pointer_expression argument: (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: (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 (binary_expression left: (identifier) right: (number_literal)) (binary_expression left: (identifier) right: (number_literal)) (number_literal) (binary_expression left: (identifier) right: (number_literal))))))) (return_statement (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (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 (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (identifier) (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (subscript_expression argument: (identifier) index: (binary_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: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (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: (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) (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (pointer_expression argument: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (subscript_expression argument: (identifier) index: (binary_expression left: (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: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (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 (identifier) (number_literal)))))) (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 (identifier) (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal))) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list)))) (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) (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) (while_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (number_literal) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) right: (subscript_expression argument: (identifier) index: (binary_expression left: (identifier) right: (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: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (goto_statement label: (statement_identifier)))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (goto_statement label: (statement_identifier)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (parenthesized_expression (binary_expression left: (unary_expression argument: (identifier)) right: (number_literal)))) right: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (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: (identifier) arguments: (argument_list (pointer_expression argument: (identifier))))))) (goto_statement label: (statement_identifier))))))) (labeled_statement label: (statement_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: (identifier) right: (number_literal))))))) (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)))))) (do_statement body: (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: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) consequence: (compound_statement (do_statement body: (compound_statement (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (binary_expression left: (identifier) right: (identifier)) (binary_expression left: (identifier) right: (identifier)) (identifier) (identifier) (identifier)))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (identifier) (identifier) (identifier) (identifier) (number_literal) (identifier) (identifier)))) (expression_statement (assignment_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: (binary_expression left: (number_literal) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) right: (subscript_expression argument: (identifier) index: (binary_expression left: (pointer_expression argument: (identifier)) right: (identifier))))) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (binary_expression left: (identifier) right: (identifier)) (identifier) (identifier) (identifier) (identifier)))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (identifier) (identifier) (identifier) (identifier) (number_literal) (identifier) (identifier)))) (expression_statement (assignment_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)))) (expression_statement (assignment_expression left: (identifier) right: (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: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (identifier))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (binary_expression left: (pointer_expression argument: (identifier)) right: (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: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (while_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) body: (compound_statement (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))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (break_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: (identifier) right: (pointer_expression argument: (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 (identifier) (binary_expression left: (identifier) right: (number_literal))))) (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 (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 (identifier) (binary_expression left: (identifier) right: (number_literal))))) (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 (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 (identifier) (binary_expression left: (identifier) right: (number_literal))))) (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 (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 (identifier) (binary_expression left: (identifier) right: (number_literal))))) (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 (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 (identifier) (binary_expression left: (identifier) right: (number_literal))))) (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 (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (return_statement (identifier)) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) (goto_statement label: (statement_identifier)))))

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

{
  uint *puVar1;
  int *piVar2;
  int *piVar3;
  undefined4 *puVar4;
  int iVar5;
  undefined4 *puVar6;
  undefined4 *puVar7;
  undefined4 *puVar8;
  undefined4 uVar9;
  uint uVar10;
  undefined4 uVar11;
  code *pcVar12;
  code *pcVar13;
  uint *puVar14;
  int iVar15;
  int *piVar16;
  uint *puVar17;
  uint uVar18;
  int iVar19;
  uint uVar20;
  undefined4 *puVar21;
  int iVar22;
  int iVar23;
  int iVar24;
  
  if (param_3[*param_3] == 0) {
    puVar14 = (uint *)(*(code *)PTR___assert_fail_000b8b18)
                                (PTR_DAT_000b8348 + -0x7fc,PTR_DAT_000b8348 + -0x840,0x3b9,
                                 PTR_DAT_000b8348 + -0x62c);
    return puVar14;
  }
  piVar2 = (int *)bigmod(param_1,param_3);
  iVar19 = *param_3;
  piVar3 = (int *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4);
  if (0 < iVar19) {
    iVar15 = 0;
    piVar16 = piVar3;
    do {
      *piVar16 = param_3[*param_3 - iVar15];
      iVar15 = iVar15 + 1;
      piVar16 = piVar16 + 1;
    } while (iVar19 != iVar15);
  }
  puVar4 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar19,4);
  iVar15 = iVar19 - *piVar2;
  if (0 < iVar15) {
    puVar7 = puVar4;
    do {
      *puVar7 = 0;
      puVar7 = puVar7 + 1;
    } while (puVar7 != puVar4 + iVar15);
  }
  iVar5 = *piVar2;
  if (0 < iVar5) {
    piVar16 = puVar4 + iVar15;
    iVar15 = 0;
    do {
      *piVar16 = piVar2[iVar5 - iVar15];
      iVar15 = iVar15 + 1;
      iVar5 = *piVar2;
      piVar16 = piVar16 + 1;
    } while (iVar15 < iVar5);
  }
  iVar15 = iVar19 << 1;
  puVar6 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4);
  puVar7 = (undefined4 *)(*(code *)PTR_safemalloc_000b82f8)(iVar15,4);
  if (0 < iVar15) {
    puVar8 = puVar6;
    do {
      *puVar8 = 0;
      puVar8 = puVar8 + 1;
    } while (puVar8 != puVar6 + iVar19 * 2);
  }
  puVar6[iVar19 * 2 + -1] = 1;
  iVar5 = FUN_00052bdc();
  uVar9 = (*(code *)PTR_safemalloc_000b82f8)(iVar5,4);
  iVar23 = *param_2;
  iVar22 = 0;
LAB_000561f0:
  uVar20 = 0x1f;
  while (iVar22 < iVar23) {
    if ((1 << (uVar20 & 0x1f) & param_2[iVar23 - iVar22]) != 0) {
      iVar24 = *piVar3;
      uVar10 = FUN_00052c20(iVar24);
      if (uVar10 != 0) goto LAB_00056608;
      uVar11 = FUN_00052c64(iVar24);
      goto LAB_000563c4;
    }
    uVar20 = uVar20 - 1;
    if (uVar20 == 0xffffffff) goto code_r0x00056228;
  }
  iVar24 = *piVar3;
  uVar10 = FUN_00052c20(iVar24);
  if (uVar10 == 0) {
    FUN_00052c64(iVar24);
    goto LAB_00056404;
  }
LAB_00056608:
  uVar18 = iVar24 << (uVar10 & 0x1f);
  if (iVar19 < 2) {
    uVar11 = FUN_00052c64(uVar18);
    if (iVar23 <= iVar22) goto LAB_00056404;
  }
  else {
    uVar11 = FUN_00052c64((uint)piVar3[1] >> (-uVar10 & 0x1f) | uVar18);
    if (iVar23 <= iVar22) {
      puVar14 = (uint *)FUN_00053e48(*param_3);
      goto LAB_0005642c;
    }
  }
LAB_000563c4:
  pcVar12 = (code *)(PTR_LAB_000b8640 + 0x2da0);
  pcVar13 = (code *)(PTR_LAB_000b8640 + 0x37b8);
  do {
    puVar8 = puVar7;
    puVar21 = puVar6;
    if (-1 < (int)uVar20) {
      do {
        (*pcVar12)(puVar21 + iVar19,puVar21 + iVar19,puVar8,iVar19,uVar9);
        (*pcVar13)(puVar8,iVar15,piVar3,iVar19,0,uVar11,uVar10);
        puVar7 = puVar21;
        puVar6 = puVar8;
        if ((1 << (uVar20 & 0x1f) & param_2[*param_2 - iVar22]) != 0) {
          (*pcVar12)(puVar8 + iVar19,puVar4,puVar21,iVar19,uVar9);
          (*pcVar13)(puVar21,iVar15,piVar3,iVar19,0,uVar11,uVar10);
          puVar7 = puVar8;
          puVar6 = puVar21;
        }
        uVar20 = uVar20 - 1;
        puVar8 = puVar7;
        puVar21 = puVar6;
      } while (uVar20 != 0xffffffff);
    }
    iVar22 = iVar22 + 1;
    uVar20 = 0x1f;
  } while (iVar22 < *param_2);
LAB_00056404:
  puVar14 = (uint *)FUN_00053e48(*param_3);
  if (0 < iVar19) {
LAB_0005642c:
    puVar17 = puVar6 + iVar19;
    iVar15 = 0;
    do {
      puVar14[*puVar14 - iVar15] = *puVar17;
      iVar15 = iVar15 + 1;
      puVar17 = puVar17 + 1;
    } while (iVar15 < iVar19);
  }
  uVar20 = *puVar14;
  if (1 < uVar20) {
    puVar17 = puVar14 + uVar20;
    uVar10 = *puVar17;
    while (uVar10 == 0) {
      uVar20 = uVar20 - 1;
      *puVar14 = uVar20;
      if (uVar20 == 1) break;
      puVar1 = puVar17 + -1;
      puVar17 = puVar17 + -1;
      uVar10 = *puVar1;
    }
  }
  (*(code *)PTR_smemclr_000b8328)(puVar6,iVar19 * 8);
  (*(code *)PTR_safefree_000b82e8)(puVar6);
  (*(code *)PTR_smemclr_000b8328)(uVar9,iVar5 << 2);
  (*(code *)PTR_safefree_000b82e8)(uVar9);
  (*(code *)PTR_smemclr_000b8328)(puVar7,iVar19 * 8);
  (*(code *)PTR_safefree_000b82e8)(puVar7);
  (*(code *)PTR_smemclr_000b8328)(piVar3,iVar19 << 2);
  (*(code *)PTR_safefree_000b82e8)(piVar3);
  (*(code *)PTR_smemclr_000b8328)(puVar4,iVar19 << 2);
  (*(code *)PTR_safefree_000b82e8)(puVar4);
  freebn(piVar2);
  return puVar14;
code_r0x00056228:
  iVar22 = iVar22 + 1;
  goto LAB_000561f0;
}

